[suitesparse-metis] 08/28: Imported Upstream version 4.4.1

Wolfgang Fütterer wlfuetter-guest at moszumanska.debian.org
Mon Sep 7 10:18:14 UTC 2015


This is an automated email from the git hooks/post-receive script.

wlfuetter-guest pushed a commit to branch master
in repository suitesparse-metis.

commit 04ce7e44c916db46b14ea2aa1dadcfc941f81623
Author: Wolfgang Fuetterer <debian at wlf-online.de>
Date:   Fri Oct 31 20:09:17 2014 +0100

    Imported Upstream version 4.4.1
---
 AMD/Demo/Makefile                                  |     18 +-
 AMD/Demo/amd_demo.c                                |      7 +-
 AMD/Demo/amd_demo.out                              |      6 +-
 AMD/Demo/amd_demo2.c                               |      3 +-
 AMD/Demo/amd_demo2.out                             |      4 +-
 AMD/Demo/amd_f77cross.f                            |      5 +-
 AMD/Demo/amd_f77demo.f                             |      5 +-
 AMD/Demo/amd_f77simple.f                           |      5 +-
 AMD/Demo/amd_f77wrapper.c                          |      3 +-
 AMD/Demo/amd_l_demo.c                              |     15 +-
 AMD/Demo/amd_l_demo.out                            |      6 +-
 AMD/Demo/amd_simple.c                              |      3 +-
 AMD/Doc/AMD_UserGuide.pdf                          |    Bin 176721 -> 271996 bytes
 AMD/Doc/AMD_UserGuide.tex                          |    449 +-
 AMD/Doc/ChangeLog                                  |     32 +
 AMD/Doc/License                                    |      2 +-
 AMD/Doc/Makefile                                   |      9 +-
 AMD/Include/amd.h                                  |    366 +-
 AMD/Include/amd_internal.h                         |     58 +-
 AMD/Lib/GNUmakefile                                |     29 +-
 AMD/Lib/Makefile                                   |     14 +-
 AMD/MATLAB/Contents.m                              |      3 +-
 AMD/MATLAB/Makefile                                |     34 -
 AMD/MATLAB/amd2.m                                  |      6 +-
 AMD/MATLAB/amd_demo.m                              |      5 +-
 AMD/MATLAB/amd_install.m                           |      3 +-
 AMD/MATLAB/amd_make.m                              |     23 +-
 AMD/MATLAB/amd_mex.c                               |     19 +-
 AMD/Makefile                                       |     40 +-
 AMD/README.txt                                     |     32 +-
 AMD/Source/amd_1.c                                 |      3 +-
 AMD/Source/amd_2.c                                 |     14 +-
 AMD/Source/amd_aat.c                               |      3 +-
 AMD/Source/amd_control.c                           |     16 +-
 AMD/Source/amd_defaults.c                          |      3 +-
 AMD/Source/amd_dump.c                              |      3 +-
 AMD/Source/amd_global.c                            |     78 +-
 AMD/Source/amd_info.c                              |     23 +-
 AMD/Source/amd_order.c                             |     43 +-
 AMD/Source/amd_post_tree.c                         |      3 +-
 AMD/Source/amd_postorder.c                         |      3 +-
 AMD/Source/amd_preprocess.c                        |      3 +-
 AMD/Source/amd_valid.c                             |      3 +-
 BTF/Doc/ChangeLog                                  |     32 +-
 BTF/Doc/lesser.txt                                 |     12 +-
 BTF/Include/btf.h                                  |    104 +-
 BTF/Include/btf_internal.h                         |      6 +-
 BTF/Lib/Makefile                                   |     10 +-
 BTF/MATLAB/Contents.m                              |      2 +-
 BTF/MATLAB/Makefile                                |     37 -
 BTF/MATLAB/Test/btf_test.m                         |      2 +-
 BTF/MATLAB/Test/checkbtf.m                         |      6 +-
 BTF/MATLAB/Test/test1.m                            |     12 +-
 BTF/MATLAB/Test/test2.m                            |     13 +-
 BTF/MATLAB/Test/test3.m                            |     21 +-
 BTF/MATLAB/Test/test4.m                            |      2 +-
 BTF/MATLAB/Test/test5.m                            |      2 +-
 BTF/MATLAB/Test/test6.m                            |      2 +-
 BTF/MATLAB/btf.c                                   |     65 +-
 BTF/MATLAB/btf.m                                   |      4 +-
 BTF/MATLAB/btf_demo.m                              |      3 +-
 BTF/MATLAB/btf_install.m                           |      2 +-
 BTF/MATLAB/btf_make.m                              |     11 +-
 BTF/MATLAB/drawbtf.m                               |      4 +-
 BTF/MATLAB/maxtrans.c                              |     31 +-
 BTF/MATLAB/maxtrans.m                              |      4 +-
 BTF/MATLAB/strongcomp.c                            |    119 +-
 BTF/MATLAB/strongcomp.m                            |      4 +-
 BTF/Makefile                                       |     28 +-
 BTF/README.txt                                     |     68 +-
 BTF/Source/btf_maxtrans.c                          |    402 +-
 BTF/Source/btf_order.c                             |    100 +-
 BTF/Source/btf_strongcomp.c                        |    506 +-
 CAMD/Demo/Makefile                                 |     18 +-
 CAMD/Demo/camd_demo.c                              |      3 +-
 CAMD/Demo/camd_demo.out                            |      7 +-
 CAMD/Demo/camd_demo2.c                             |      3 +-
 CAMD/Demo/camd_demo2.out                           |      5 +-
 CAMD/Demo/camd_l_demo.c                            |     15 +-
 CAMD/Demo/camd_l_demo.out                          |      7 +-
 CAMD/Demo/camd_simple.c                            |      3 +-
 CAMD/Doc/CAMD_UserGuide.pdf                        |    Bin 168515 -> 265441 bytes
 CAMD/Doc/CAMD_UserGuide.tex                        |    451 +-
 CAMD/Doc/ChangeLog                                 |     32 +
 CAMD/Doc/License                                   |      2 +-
 CAMD/Doc/Makefile                                  |     12 +-
 CAMD/Include/camd.h                                |    372 +-
 CAMD/Include/camd_internal.h                       |     62 +-
 CAMD/Lib/GNUmakefile                               |     16 +-
 CAMD/Lib/Makefile                                  |     10 +-
 CAMD/MATLAB/Contents.m                             |      3 +-
 CAMD/MATLAB/Makefile                               |     34 -
 CAMD/MATLAB/camd.m                                 |      3 +-
 CAMD/MATLAB/camd_demo.m                            |      4 +-
 CAMD/MATLAB/camd_make.m                            |     23 +-
 CAMD/MATLAB/camd_mex.c                             |     23 +-
 CAMD/Makefile                                      |     42 +-
 CAMD/README.txt                                    |     29 +-
 CAMD/Source/camd_1.c                               |      3 +-
 CAMD/Source/camd_2.c                               |      3 +-
 CAMD/Source/camd_aat.c                             |      3 +-
 CAMD/Source/camd_control.c                         |     16 +-
 CAMD/Source/camd_defaults.c                        |      3 +-
 CAMD/Source/camd_dump.c                            |      3 +-
 CAMD/Source/camd_global.c                          |     78 +-
 CAMD/Source/camd_info.c                            |     26 +-
 CAMD/Source/camd_order.c                           |     43 +-
 CAMD/Source/camd_postorder.c                       |      3 +-
 CAMD/Source/camd_preprocess.c                      |      3 +-
 CAMD/Source/camd_valid.c                           |      3 +-
 CCOLAMD/Demo/Makefile                              |     16 +-
 CCOLAMD/Demo/ccolamd_example.c                     |      1 -
 CCOLAMD/Demo/ccolamd_example.out                   |      4 +-
 CCOLAMD/Demo/ccolamd_l_example.c                   |     21 +-
 CCOLAMD/Demo/ccolamd_l_example.out                 |      4 +-
 CCOLAMD/Doc/ChangeLog                              |     25 +
 CCOLAMD/Include/ccolamd.h                          |    142 +-
 CCOLAMD/Lib/Makefile                               |     16 +-
 CCOLAMD/MATLAB/Makefile                            |     35 -
 CCOLAMD/MATLAB/ccolamd_demo.m                      |     29 +-
 CCOLAMD/MATLAB/ccolamd_make.m                      |     23 +-
 CCOLAMD/MATLAB/ccolamd_test.m                      |      9 +-
 CCOLAMD/MATLAB/ccolamdmex.c                        |     51 +-
 CCOLAMD/MATLAB/ccolamdtestmex.c                    |     69 +-
 CCOLAMD/MATLAB/csymamd.m                           |      4 +-
 CCOLAMD/MATLAB/csymamdmex.c                        |     45 +-
 CCOLAMD/MATLAB/csymamdtestmex.c                    |     67 +-
 CCOLAMD/Makefile                                   |     37 +-
 CCOLAMD/README.txt                                 |     29 +-
 CCOLAMD/Source/ccolamd.c                           |    153 +-
 CCOLAMD/Source/ccolamd_global.c                    |     17 +-
 CHOLMOD/Check/License.txt                          |      2 +-
 CHOLMOD/Check/cholmod_check.c                      |    245 +-
 CHOLMOD/Check/cholmod_read.c                       |      1 -
 CHOLMOD/Check/cholmod_write.c                      |      6 +-
 CHOLMOD/Cholesky/License.txt                       |      2 +-
 CHOLMOD/Cholesky/cholmod_amd.c                     |     12 -
 CHOLMOD/Cholesky/cholmod_analyze.c                 |     86 +-
 CHOLMOD/Cholesky/cholmod_colamd.c                  |      4 -
 CHOLMOD/Cholesky/cholmod_etree.c                   |      1 -
 CHOLMOD/Cholesky/cholmod_factorize.c               |      1 -
 CHOLMOD/Cholesky/cholmod_postorder.c               |      7 +-
 CHOLMOD/Cholesky/cholmod_rcond.c                   |      1 -
 CHOLMOD/Cholesky/cholmod_resymbol.c                |      1 -
 CHOLMOD/Cholesky/cholmod_rowcolcounts.c            |      1 -
 CHOLMOD/Cholesky/cholmod_rowfac.c                  |    142 +-
 CHOLMOD/Cholesky/cholmod_solve.c                   |    661 +-
 CHOLMOD/Cholesky/cholmod_spsolve.c                 |      1 -
 CHOLMOD/Cholesky/t_cholmod_lsolve.c                |     95 +-
 CHOLMOD/Cholesky/t_cholmod_ltsolve.c               |    100 +-
 CHOLMOD/Cholesky/t_cholmod_rowfac.c                |      7 +-
 CHOLMOD/Cholesky/t_cholmod_solve.c                 |     51 +-
 CHOLMOD/Core/License.txt                           |      2 +-
 CHOLMOD/Core/cholmod_aat.c                         |      1 -
 CHOLMOD/Core/cholmod_add.c                         |      1 -
 CHOLMOD/Core/cholmod_band.c                        |     13 +-
 CHOLMOD/Core/cholmod_change_factor.c               |      1 -
 CHOLMOD/Core/cholmod_common.c                      |    144 +-
 CHOLMOD/Core/cholmod_complex.c                     |     65 +-
 CHOLMOD/Core/cholmod_copy.c                        |      1 -
 CHOLMOD/Core/cholmod_dense.c                       |     50 +-
 CHOLMOD/Core/cholmod_error.c                       |     13 +-
 CHOLMOD/Core/cholmod_factor.c                      |      6 +-
 CHOLMOD/Core/cholmod_memory.c                      |    153 +-
 CHOLMOD/Core/cholmod_sparse.c                      |      3 +-
 CHOLMOD/Core/cholmod_transpose.c                   |      1 -
 CHOLMOD/Core/cholmod_triplet.c                     |      1 -
 CHOLMOD/Core/cholmod_version.c                     |     37 +
 CHOLMOD/Core/t_cholmod_change_factor.c             |      1 -
 CHOLMOD/Core/t_cholmod_dense.c                     |      1 -
 CHOLMOD/Core/t_cholmod_transpose.c                 |      1 -
 CHOLMOD/Core/t_cholmod_triplet.c                   |      1 -
 CHOLMOD/Demo/License.txt                           |      2 +-
 CHOLMOD/Demo/Makefile                              |     79 +-
 CHOLMOD/Demo/Matrix/two.tri                        |      5 +
 CHOLMOD/Demo/cholmod_demo.c                        |    404 +-
 CHOLMOD/Demo/cholmod_demo.h                        |      8 +-
 CHOLMOD/Demo/cholmod_l_demo.c                      |    507 +-
 CHOLMOD/Demo/cholmod_simple.c                      |      1 -
 CHOLMOD/Demo/gpu.sh                                |      4 +
 CHOLMOD/Demo/lperf.m                               |     56 +
 CHOLMOD/Demo/make.out                              |    213 -
 CHOLMOD/Doc/ChangeLog                              |    120 +
 ...2014_Workshop_Rennich_Stosic_Davis_preprint.pdf |    Bin 0 -> 1553980 bytes
 CHOLMOD/Doc/Makefile                               |     14 +-
 CHOLMOD/Doc/UserGuide.pdf                          |    Bin 459421 -> 562324 bytes
 CHOLMOD/Doc/UserGuide.tex                          |    445 +-
 CHOLMOD/GPU/cholmod_gpu.c                          |    479 +
 CHOLMOD/GPU/cholmod_gpu_kernels.c                  |      6 +
 CHOLMOD/GPU/cholmod_gpu_kernels.cu                 |    196 +
 CHOLMOD/GPU/t_cholmod_gpu.c                        |   1397 +
 CHOLMOD/Include/License.txt                        |      1 -
 CHOLMOD/Include/README.txt                         |      2 +-
 CHOLMOD/Include/cholmod.h                          |     22 +-
 CHOLMOD/Include/cholmod_blas.h                     |    142 +-
 CHOLMOD/Include/cholmod_camd.h                     |    102 +
 CHOLMOD/Include/cholmod_check.h                    |     66 +-
 CHOLMOD/Include/cholmod_cholesky.h                 |    141 +-
 CHOLMOD/Include/cholmod_complexity.h               |      7 +-
 CHOLMOD/Include/cholmod_config.h                   |      6 +-
 CHOLMOD/Include/cholmod_core.h                     |    424 +-
 CHOLMOD/Include/cholmod_function.h                 |    155 +
 CHOLMOD/Include/cholmod_gpu.h                      |     80 +
 CHOLMOD/Include/cholmod_gpu_kernels.h              |     50 +
 CHOLMOD/Include/cholmod_internal.h                 |    145 +-
 CHOLMOD/Include/cholmod_io64.h                     |      3 +-
 CHOLMOD/Include/cholmod_matrixops.h                |     16 +-
 CHOLMOD/Include/cholmod_modify.h                   |     41 +-
 CHOLMOD/Include/cholmod_partition.h                |    117 +-
 CHOLMOD/Include/cholmod_supernodal.h               |     31 +-
 CHOLMOD/Include/cholmod_template.h                 |      7 +
 CHOLMOD/Lib/Makefile                               |     98 +-
 CHOLMOD/MATLAB/Contents.m                          |      3 +-
 CHOLMOD/MATLAB/License.txt                         |      2 +-
 CHOLMOD/MATLAB/Makefile                            |    700 -
 CHOLMOD/MATLAB/README.txt                          |      7 +-
 CHOLMOD/MATLAB/Test/Contents.m                     |      5 +-
 CHOLMOD/MATLAB/Test/Results.mat                    |    Bin 2419 -> 0 bytes
 CHOLMOD/MATLAB/Test/cholmod_test.m                 |     73 +-
 .../Test/cholmod_test_11-May-2007_13-29-15.txt     |  12324 --
 CHOLMOD/MATLAB/Test/dg.m                           |      4 +-
 CHOLMOD/MATLAB/Test/ltest.m                        |     70 +
 CHOLMOD/MATLAB/Test/ltest2.m                       |    112 +
 CHOLMOD/MATLAB/Test/lxtest.m                       |     82 +
 CHOLMOD/MATLAB/Test/n2.m                           |      2 +-
 CHOLMOD/MATLAB/Test/nn.m                           |      2 +-
 CHOLMOD/MATLAB/Test/test0.m                        |      7 +-
 CHOLMOD/MATLAB/Test/test1.m                        |      2 +-
 CHOLMOD/MATLAB/Test/test10.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test11.m                       |      4 +-
 CHOLMOD/MATLAB/Test/test11results.m                |      3 +-
 CHOLMOD/MATLAB/Test/test12.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test13.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test14.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test15.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test16.m                       |      3 +-
 CHOLMOD/MATLAB/Test/test17.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test18.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test19.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test2.m                        |      2 +-
 CHOLMOD/MATLAB/Test/test20.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test21.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test22.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test23.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test24.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test25.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test26.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test27.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test28.m                       |      2 +-
 CHOLMOD/MATLAB/Test/test3.m                        |     33 +-
 CHOLMOD/MATLAB/Test/test4.m                        |      2 +-
 CHOLMOD/MATLAB/Test/test5.m                        |      2 +-
 CHOLMOD/MATLAB/Test/test6.m                        |      2 +-
 CHOLMOD/MATLAB/Test/test7.m                        |      2 +-
 CHOLMOD/MATLAB/Test/test8.m                        |      2 +-
 CHOLMOD/MATLAB/Test/test9.m                        |      4 +-
 CHOLMOD/MATLAB/Test/testmm.m                       |      2 +-
 CHOLMOD/MATLAB/Test/testsolve.m                    |      2 +-
 CHOLMOD/MATLAB/Windows/README.txt                  |      2 +
 CHOLMOD/MATLAB/analyze.c                           |      4 +-
 CHOLMOD/MATLAB/analyze.m                           |      3 +-
 CHOLMOD/MATLAB/bisect.c                            |     10 +-
 CHOLMOD/MATLAB/bisect.m                            |      3 +-
 CHOLMOD/MATLAB/chol2.c                             |      4 +-
 CHOLMOD/MATLAB/chol2.m                             |      5 +-
 CHOLMOD/MATLAB/cholmod2.c                          |      8 +-
 CHOLMOD/MATLAB/cholmod2.m                          |      3 +-
 CHOLMOD/MATLAB/cholmod_demo.m                      |     14 +-
 CHOLMOD/MATLAB/cholmod_make.m                      |    246 +-
 CHOLMOD/MATLAB/cholmod_matlab.c                    |    213 +-
 CHOLMOD/MATLAB/cholmod_matlab.h                    |    101 +-
 CHOLMOD/MATLAB/etree2.c                            |     16 +-
 CHOLMOD/MATLAB/etree2.m                            |      3 +-
 CHOLMOD/MATLAB/get_symmetry.m                      |     34 +
 CHOLMOD/MATLAB/graph_demo.m                        |      8 +-
 CHOLMOD/MATLAB/lchol.c                             |      4 +-
 CHOLMOD/MATLAB/lchol.m                             |      5 +-
 CHOLMOD/MATLAB/ldl_normest.m                       |      8 +-
 CHOLMOD/MATLAB/ldlchol.c                           |      6 +-
 CHOLMOD/MATLAB/ldlchol.m                           |      4 +-
 CHOLMOD/MATLAB/ldlsolve.c                          |     12 +-
 CHOLMOD/MATLAB/ldlsolve.m                          |      3 +-
 CHOLMOD/MATLAB/ldlsplit.m                          |      3 +-
 CHOLMOD/MATLAB/ldlupdate.c                         |     12 +-
 CHOLMOD/MATLAB/ldlupdate.m                         |      3 +-
 CHOLMOD/MATLAB/lsubsolve.c                         |    247 +
 CHOLMOD/MATLAB/lxbpattern.c                        |    150 +
 CHOLMOD/MATLAB/metis.c                             |     10 +-
 CHOLMOD/MATLAB/metis.m                             |      3 +-
 CHOLMOD/MATLAB/mread.c                             |      8 +-
 CHOLMOD/MATLAB/mread.m                             |      3 +-
 CHOLMOD/MATLAB/mwrite.c                            |      2 +-
 CHOLMOD/MATLAB/nesdis.c                            |     18 +-
 CHOLMOD/MATLAB/nesdis.m                            |      3 +-
 CHOLMOD/MATLAB/rename.h                            |     10 -
 CHOLMOD/MATLAB/resymbol.c                          |     10 +-
 CHOLMOD/MATLAB/resymbol.m                          |      3 +-
 CHOLMOD/MATLAB/sdmult.c                            |      4 +-
 CHOLMOD/MATLAB/sdmult.m                            |      3 +-
 CHOLMOD/MATLAB/septree.c                           |     14 +-
 CHOLMOD/MATLAB/septree.m                           |      3 +-
 CHOLMOD/MATLAB/sparse2.m                           |      3 +-
 CHOLMOD/MATLAB/spsym.c                             |      4 +-
 CHOLMOD/MATLAB/spsym.m                             |     23 +-
 CHOLMOD/MATLAB/symbfact2.c                         |     26 +-
 CHOLMOD/MATLAB/symbfact2.m                         |      3 +-
 CHOLMOD/Makefile                                   |     40 +-
 CHOLMOD/MatrixOps/License.txt                      |      2 +-
 CHOLMOD/MatrixOps/cholmod_drop.c                   |      2 +-
 CHOLMOD/MatrixOps/cholmod_horzcat.c                |      2 +-
 CHOLMOD/MatrixOps/cholmod_norm.c                   |      6 +-
 CHOLMOD/MatrixOps/cholmod_scale.c                  |      2 +-
 CHOLMOD/MatrixOps/cholmod_sdmult.c                 |      2 +-
 CHOLMOD/MatrixOps/cholmod_ssmult.c                 |      2 +-
 CHOLMOD/MatrixOps/cholmod_submatrix.c              |      6 +-
 CHOLMOD/MatrixOps/cholmod_symmetry.c               |      8 +-
 CHOLMOD/MatrixOps/cholmod_vertcat.c                |      2 +-
 CHOLMOD/MatrixOps/t_cholmod_sdmult.c               |      2 +-
 CHOLMOD/Modify/License.txt                         |      2 +-
 CHOLMOD/Modify/cholmod_rowadd.c                    |      2 +-
 CHOLMOD/Modify/cholmod_rowdel.c                    |      2 +-
 CHOLMOD/Modify/cholmod_updown.c                    |     41 +-
 CHOLMOD/Modify/t_cholmod_updown.c                  |      5 +-
 CHOLMOD/Modify/t_cholmod_updown_numkr.c            |      2 +-
 CHOLMOD/Partition/License.txt                      |      2 +-
 CHOLMOD/Partition/cholmod_camd.c                   |     19 +-
 CHOLMOD/Partition/cholmod_ccolamd.c                |      7 +-
 CHOLMOD/Partition/cholmod_csymamd.c                |     20 +-
 CHOLMOD/Partition/cholmod_metis.c                  |      9 +-
 CHOLMOD/Partition/cholmod_nesdis.c                 |     12 +-
 CHOLMOD/README.txt                                 |     29 +-
 CHOLMOD/Supernodal/License.txt                     |      2 +-
 CHOLMOD/Supernodal/cholmod_super_numeric.c         |     19 +-
 CHOLMOD/Supernodal/cholmod_super_solve.c           |     23 +-
 CHOLMOD/Supernodal/cholmod_super_symbolic.c        |    330 +-
 CHOLMOD/Supernodal/t_cholmod_super_numeric.c       |   1471 +-
 CHOLMOD/Supernodal/t_cholmod_super_solve.c         |     17 +-
 CHOLMOD/Tcov/License.txt                           |      2 +-
 CHOLMOD/Tcov/Make.inc                              |      2 +-
 CHOLMOD/Tcov/Makefile                              |    471 +-
 CHOLMOD/Tcov/Matrix/rename.h                       |     10 -
 CHOLMOD/Tcov/README.txt                            |     16 +
 CHOLMOD/Tcov/amdtest.c                             |     14 +-
 CHOLMOD/Tcov/aug.c                                 |      2 +-
 CHOLMOD/Tcov/camdtest.c                            |     16 +-
 CHOLMOD/Tcov/cctest.c                              |     70 +-
 CHOLMOD/Tcov/cm.c                                  |     97 +-
 CHOLMOD/Tcov/cm.h                                  |     12 +-
 CHOLMOD/Tcov/cmread.c                              |      4 +-
 CHOLMOD/Tcov/covs                                  |      6 +-
 CHOLMOD/Tcov/ctest.c                               |     71 +-
 CHOLMOD/Tcov/gcovs                                 |      1 +
 CHOLMOD/Tcov/go                                    |     15 +
 CHOLMOD/Tcov/huge.c                                |      8 +-
 CHOLMOD/Tcov/leak.c                                |      2 +-
 CHOLMOD/Tcov/lpdemo.c                              |      2 +-
 CHOLMOD/Tcov/memory.c                              |     25 +-
 CHOLMOD/Tcov/null.c                                |     21 +-
 CHOLMOD/Tcov/null2.c                               |     68 +-
 CHOLMOD/Tcov/raw_factor.c                          |      6 +-
 CHOLMOD/Tcov/solve.c                               |    392 +-
 CHOLMOD/Tcov/test_ops.c                            |     15 +-
 CHOLMOD/Tcov/unpack.c                              |      2 +-
 CHOLMOD/Valgrind/License.txt                       |      2 +-
 CHOLMOD/Valgrind/Make.inc                          |      2 +-
 CHOLMOD/Valgrind/README.txt                        |      1 +
 COLAMD/Demo/Makefile                               |     16 +-
 COLAMD/Demo/colamd_example.c                       |      3 +-
 COLAMD/Demo/colamd_example.out                     |      4 +-
 COLAMD/Demo/colamd_l_example.c                     |     21 +-
 COLAMD/Demo/colamd_l_example.out                   |      4 +-
 COLAMD/Doc/ChangeLog                               |     24 +
 COLAMD/Include/colamd.h                            |     60 +-
 COLAMD/Lib/Makefile                                |     16 +-
 COLAMD/MATLAB/Makefile                             |     35 -
 COLAMD/MATLAB/colamd_demo.m                        |      3 +-
 COLAMD/MATLAB/colamd_make.m                        |     23 +-
 COLAMD/MATLAB/colamd_test.m                        |      9 +-
 COLAMD/MATLAB/colamdmex.c                          |     56 +-
 COLAMD/MATLAB/colamdtestmex.c                      |    102 +-
 COLAMD/MATLAB/symamdmex.c                          |     51 +-
 COLAMD/MATLAB/symamdtestmex.c                      |     96 +-
 COLAMD/Makefile                                    |     37 +-
 COLAMD/README.txt                                  |     23 +-
 COLAMD/Source/colamd.c                             |    148 +-
 COLAMD/Source/colamd_global.c                      |     18 +-
 CSparse/Demo/Makefile                              |     14 +-
 CSparse/Demo/README.txt                            |      2 +
 CSparse/Demo/cs_demo.c                             |    213 +-
 CSparse/Demo/cs_demo.h                             |      6 +-
 CSparse/Demo/cs_demo.out                           |     33 +-
 CSparse/Demo/cs_demo1.c                            |     26 +-
 CSparse/Doc/ChangeLog                              |    251 +-
 CSparse/Doc/License.txt                            |      2 +-
 CSparse/Doc/lesser.txt                             |     12 +-
 CSparse/Include/cs.h                               |    175 +-
 CSparse/Lib/Makefile                               |     18 +-
 CSparse/MATLAB/CSparse/Contents.m                  |      3 +-
 CSparse/MATLAB/CSparse/Makefile                    |    259 -
 CSparse/MATLAB/CSparse/README.txt                  |      2 +
 CSparse/MATLAB/CSparse/ccspy.m                     |      3 +-
 CSparse/MATLAB/CSparse/cs_add.m                    |      5 +-
 CSparse/MATLAB/CSparse/cs_add_mex.c                |     10 +-
 CSparse/MATLAB/CSparse/cs_amd.m                    |      5 +-
 CSparse/MATLAB/CSparse/cs_amd_mex.c                |      6 +-
 CSparse/MATLAB/CSparse/cs_chol.m                   |      5 +-
 CSparse/MATLAB/CSparse/cs_chol_mex.c               |     20 +-
 CSparse/MATLAB/CSparse/cs_cholsol.m                |      5 +-
 CSparse/MATLAB/CSparse/cs_cholsol_mex.c            |     12 +-
 CSparse/MATLAB/CSparse/cs_counts.m                 |      5 +-
 CSparse/MATLAB/CSparse/cs_counts_mex.c             |     20 +-
 CSparse/MATLAB/CSparse/cs_dmperm.m                 |      5 +-
 CSparse/MATLAB/CSparse/cs_dmperm_mex.c             |     30 +-
 CSparse/MATLAB/CSparse/cs_dmsol.m                  |     13 +-
 CSparse/MATLAB/CSparse/cs_dmspy.m                  |      3 +-
 CSparse/MATLAB/CSparse/cs_droptol.m                |      5 +-
 CSparse/MATLAB/CSparse/cs_droptol_mex.c            |     12 +-
 CSparse/MATLAB/CSparse/cs_esep.m                   |      3 +-
 CSparse/MATLAB/CSparse/cs_etree.m                  |      5 +-
 CSparse/MATLAB/CSparse/cs_etree_mex.c              |     20 +-
 CSparse/MATLAB/CSparse/cs_gaxpy.m                  |      7 +-
 CSparse/MATLAB/CSparse/cs_gaxpy_mex.c              |     10 +-
 CSparse/MATLAB/CSparse/cs_lsolve.m                 |      5 +-
 CSparse/MATLAB/CSparse/cs_lsolve_mex.c             |     44 +-
 CSparse/MATLAB/CSparse/cs_ltsolve.m                |      5 +-
 CSparse/MATLAB/CSparse/cs_ltsolve_mex.c            |      8 +-
 CSparse/MATLAB/CSparse/cs_lu.m                     |      5 +-
 CSparse/MATLAB/CSparse/cs_lu_mex.c                 |     32 +-
 CSparse/MATLAB/CSparse/cs_lusol.m                  |      5 +-
 CSparse/MATLAB/CSparse/cs_lusol_mex.c              |     18 +-
 CSparse/MATLAB/CSparse/cs_make.m                   |    107 +-
 CSparse/MATLAB/CSparse/cs_mex.c                    |     72 +-
 CSparse/MATLAB/CSparse/cs_mex.h                    |     12 +-
 CSparse/MATLAB/CSparse/cs_multiply.m               |      5 +-
 CSparse/MATLAB/CSparse/cs_multiply_mex.c           |     10 +-
 CSparse/MATLAB/CSparse/cs_must_compile.m           |      5 +-
 CSparse/MATLAB/CSparse/cs_nd.m                     |     13 +-
 CSparse/MATLAB/CSparse/cs_nsep.m                   |      3 +-
 CSparse/MATLAB/CSparse/cs_permute.m                |      5 +-
 CSparse/MATLAB/CSparse/cs_permute_mex.c            |     16 +-
 CSparse/MATLAB/CSparse/cs_print.m                  |      5 +-
 CSparse/MATLAB/CSparse/cs_print_mex.c              |      6 +-
 CSparse/MATLAB/CSparse/cs_qleft.m                  |      7 +-
 CSparse/MATLAB/CSparse/cs_qr.m                     |      5 +-
 CSparse/MATLAB/CSparse/cs_qr_mex.c                 |     26 +-
 CSparse/MATLAB/CSparse/cs_qright.m                 |      3 +-
 CSparse/MATLAB/CSparse/cs_qrsol.m                  |      5 +-
 CSparse/MATLAB/CSparse/cs_qrsol_mex.c              |     12 +-
 CSparse/MATLAB/CSparse/cs_randperm.m               |      5 +-
 CSparse/MATLAB/CSparse/cs_randperm_mex.c           |      6 +-
 CSparse/MATLAB/CSparse/cs_scc.m                    |      5 +-
 CSparse/MATLAB/CSparse/cs_scc2.m                   |     21 +-
 CSparse/MATLAB/CSparse/cs_scc_mex.c                |     16 +-
 CSparse/MATLAB/CSparse/cs_sep.m                    |      7 +-
 CSparse/MATLAB/CSparse/cs_sparse.m                 |      5 +-
 CSparse/MATLAB/CSparse/cs_sparse_mex.c             |     16 +-
 CSparse/MATLAB/CSparse/cs_sqr.m                    |      7 +-
 CSparse/MATLAB/CSparse/cs_sqr_mex.c                |     24 +-
 CSparse/MATLAB/CSparse/cs_symperm.m                |      5 +-
 CSparse/MATLAB/CSparse/cs_symperm_mex.c            |     14 +-
 CSparse/MATLAB/CSparse/cs_thumb_mex.c              |     30 +-
 CSparse/MATLAB/CSparse/cs_transpose.m              |      5 +-
 CSparse/MATLAB/CSparse/cs_transpose_mex.c          |      6 +-
 CSparse/MATLAB/CSparse/cs_updown.m                 |      5 +-
 CSparse/MATLAB/CSparse/cs_updown_mex.c             |     24 +-
 CSparse/MATLAB/CSparse/cs_usolve.m                 |      5 +-
 CSparse/MATLAB/CSparse/cs_usolve_mex.c             |     44 +-
 CSparse/MATLAB/CSparse/cs_utsolve.m                |      5 +-
 CSparse/MATLAB/CSparse/cs_utsolve_mex.c            |      8 +-
 CSparse/MATLAB/CSparse/cspy.m                      |     27 +-
 CSparse/MATLAB/CSparse/private/drawbox.m           |      7 +-
 CSparse/MATLAB/CSparse/private/drawboxes.m         |     23 +-
 CSparse/MATLAB/Demo/README.txt                     |      2 +
 CSparse/MATLAB/Demo/cs_demo.m                      |     10 +-
 CSparse/MATLAB/Demo/cs_demo1.m                     |     31 +-
 CSparse/MATLAB/Demo/cs_demo2.m                     |     17 +-
 CSparse/MATLAB/Demo/cs_demo3.m                     |     17 +-
 CSparse/MATLAB/Demo/private/demo2.m                |     53 +-
 CSparse/MATLAB/Demo/private/demo3.m                |     10 +-
 CSparse/MATLAB/Demo/private/ex2.m                  |     13 +-
 CSparse/MATLAB/Demo/private/ex3.m                  |      3 +-
 CSparse/MATLAB/Demo/private/ex_1.m                 |     15 +-
 CSparse/MATLAB/Demo/private/frand.m                |      4 +-
 CSparse/MATLAB/Demo/private/get_problem.m          |      5 +-
 CSparse/MATLAB/Demo/private/is_sym.m               |      7 +-
 CSparse/MATLAB/Demo/private/mesh2d1.m              |     15 +-
 CSparse/MATLAB/Demo/private/mesh2d2.m              |      3 +-
 CSparse/MATLAB/Demo/private/mesh3d1.m              |     31 +-
 CSparse/MATLAB/Demo/private/mesh3d2.m              |      3 +-
 CSparse/MATLAB/Demo/private/print_order.m          |     13 +-
 CSparse/MATLAB/Demo/private/print_resid.m          |      3 +-
 CSparse/MATLAB/Demo/private/rhs.m                  |      3 +-
 CSparse/MATLAB/Makefile                            |     14 -
 CSparse/MATLAB/README.txt                          |      2 +
 CSparse/MATLAB/Test/Makefile                       |     51 -
 CSparse/MATLAB/Test/README.txt                     |      2 +
 CSparse/MATLAB/Test/another_colormap.m             |      6 +-
 CSparse/MATLAB/Test/check_if_same.m                |     19 +-
 CSparse/MATLAB/Test/chol_downdate.m                |      7 +-
 CSparse/MATLAB/Test/chol_example.m                 |      4 +-
 CSparse/MATLAB/Test/chol_left.m                    |      3 +-
 CSparse/MATLAB/Test/chol_left2.m                   |      5 +-
 CSparse/MATLAB/Test/chol_right.m                   |      3 +-
 CSparse/MATLAB/Test/chol_super.m                   |      3 +-
 CSparse/MATLAB/Test/chol_up.m                      |      3 +-
 CSparse/MATLAB/Test/chol_update.m                  |      5 +-
 CSparse/MATLAB/Test/chol_updown.m                  |     25 +-
 CSparse/MATLAB/Test/choldn.m                       |      9 +-
 CSparse/MATLAB/Test/cholup.m                       |      3 +-
 CSparse/MATLAB/Test/cholupdown.m                   |     38 +-
 CSparse/MATLAB/Test/cond1est.m                     |      7 +-
 CSparse/MATLAB/Test/cs_fiedler.m                   |      9 +-
 CSparse/MATLAB/Test/cs_frand.m                     |      5 +-
 CSparse/MATLAB/Test/cs_frand_mex.c                 |     26 +-
 CSparse/MATLAB/Test/cs_ipvec.m                     |      5 +-
 CSparse/MATLAB/Test/cs_ipvec_mex.c                 |      8 +-
 CSparse/MATLAB/Test/cs_maxtransr.m                 |      5 +-
 CSparse/MATLAB/Test/cs_maxtransr_mex.c             |     46 +-
 CSparse/MATLAB/Test/cs_pvec.m                      |      5 +-
 CSparse/MATLAB/Test/cs_pvec_mex.c                  |      8 +-
 CSparse/MATLAB/Test/cs_q1.m                        |      5 +-
 CSparse/MATLAB/Test/cs_reach.m                     |      5 +-
 CSparse/MATLAB/Test/cs_reach_mex.c                 |      8 +-
 CSparse/MATLAB/Test/cs_reachr.m                    |      5 +-
 CSparse/MATLAB/Test/cs_reachr_mex.c                |     42 +-
 CSparse/MATLAB/Test/cs_rowcnt.m                    |      6 +-
 CSparse/MATLAB/Test/cs_rowcnt_mex.c                |     58 +-
 CSparse/MATLAB/Test/cs_sparse2.m                   |      6 +-
 CSparse/MATLAB/Test/cs_sparse2_mex.c               |      8 +-
 CSparse/MATLAB/Test/cs_test_make.m                 |     44 +-
 CSparse/MATLAB/Test/cspy_test.m                    |     39 +-
 CSparse/MATLAB/Test/dmperm_test.m                  |     65 +-
 CSparse/MATLAB/Test/dmspy_test.m                   |      6 +-
 CSparse/MATLAB/Test/etree_sample.m                 |      5 +-
 CSparse/MATLAB/Test/givens2.m                      |      3 +-
 CSparse/MATLAB/Test/gqr3.m                         |     20 +-
 CSparse/MATLAB/Test/happly.m                       |      4 +-
 CSparse/MATLAB/Test/hmake1.m                       |     15 +-
 CSparse/MATLAB/Test/house.m                        |      7 +-
 CSparse/MATLAB/Test/lu_left.m                      |     11 +-
 CSparse/MATLAB/Test/lu_right.m                     |      9 +-
 CSparse/MATLAB/Test/lu_rightp.m                    |      9 +-
 CSparse/MATLAB/Test/lu_rightpr.m                   |     15 +-
 CSparse/MATLAB/Test/lu_rightr.m                    |     11 +-
 CSparse/MATLAB/Test/mynormest1.m                   |     54 +-
 CSparse/MATLAB/Test/myqr.m                         |     30 +-
 CSparse/MATLAB/Test/norm1est.m                     |     29 +-
 CSparse/MATLAB/Test/qr2.m                          |      3 +-
 CSparse/MATLAB/Test/qr_givens.m                    |     15 +-
 CSparse/MATLAB/Test/qr_givens_full.m               |      7 +-
 CSparse/MATLAB/Test/qr_left.m                      |      9 +-
 CSparse/MATLAB/Test/qr_right.m                     |      3 +-
 CSparse/MATLAB/Test/sample_colormap.m              |      8 +-
 CSparse/MATLAB/Test/signum.m                       |      5 +-
 CSparse/MATLAB/Test/sqr_example.m                  |      3 +-
 CSparse/MATLAB/Test/test1.m                        |     37 +-
 CSparse/MATLAB/Test/test10.m                       |     41 +-
 CSparse/MATLAB/Test/test11.m                       |     15 +-
 CSparse/MATLAB/Test/test12.m                       |     13 +-
 CSparse/MATLAB/Test/test13.m                       |     16 +-
 CSparse/MATLAB/Test/test14.m                       |      6 +-
 CSparse/MATLAB/Test/test15.m                       |     10 +-
 CSparse/MATLAB/Test/test16.m                       |     59 +-
 CSparse/MATLAB/Test/test17.m                       |     18 +-
 CSparse/MATLAB/Test/test18.m                       |      8 +-
 CSparse/MATLAB/Test/test19.m                       |    122 +-
 CSparse/MATLAB/Test/test2.m                        |     35 +-
 CSparse/MATLAB/Test/test20.m                       |     10 +-
 CSparse/MATLAB/Test/test21.m                       |    100 +-
 CSparse/MATLAB/Test/test22.m                       |     22 +-
 CSparse/MATLAB/Test/test23.m                       |      3 +-
 CSparse/MATLAB/Test/test24.m                       |      6 +-
 CSparse/MATLAB/Test/test25.m                       |     10 +-
 CSparse/MATLAB/Test/test26.m                       |     12 +-
 CSparse/MATLAB/Test/test27.m                       |      5 +-
 CSparse/MATLAB/Test/test28.m                       |     45 +-
 CSparse/MATLAB/Test/test3.m                        |     27 +-
 CSparse/MATLAB/Test/test4.m                        |     10 +-
 CSparse/MATLAB/Test/test5.m                        |     22 +-
 CSparse/MATLAB/Test/test6.m                        |    138 +-
 CSparse/MATLAB/Test/test7.m                        |     67 +-
 CSparse/MATLAB/Test/test8.m                        |     62 +-
 CSparse/MATLAB/Test/test9.m                        |     45 +-
 CSparse/MATLAB/Test/test_qr.m                      |     15 +-
 CSparse/MATLAB/Test/test_qr1.m                     |     36 +-
 CSparse/MATLAB/Test/test_qrsol.m                   |      7 +-
 CSparse/MATLAB/Test/test_randperms.m               |     19 +-
 CSparse/MATLAB/Test/test_sep.m                     |     26 +-
 CSparse/MATLAB/Test/testall.m                      |      6 +-
 CSparse/MATLAB/Test/testh.m                        |      6 +-
 CSparse/MATLAB/UFget/Contents.m                    |      4 +-
 CSparse/MATLAB/UFget/Makefile                      |      7 +
 CSparse/MATLAB/UFget/README.txt                    |    141 +-
 CSparse/MATLAB/UFget/UFget.m                       |    116 +-
 CSparse/MATLAB/UFget/UFget_defaults.m              |     74 +-
 CSparse/MATLAB/UFget/UFget_example.m               |      4 +-
 CSparse/MATLAB/UFget/UFget_lookup.m                |     64 +-
 CSparse/MATLAB/UFget/UFgrep.m                      |      8 +-
 CSparse/MATLAB/UFget/UFgui.jar                     |    Bin 0 -> 40421 bytes
 CSparse/MATLAB/UFget/UFgui.java                    |   2589 +
 CSparse/MATLAB/UFget/UFhelp.html                   |    545 +
 CSparse/MATLAB/UFget/UFkinds.m                     |     71 +
 CSparse/MATLAB/UFget/UFsettings.txt                |      6 +
 CSparse/MATLAB/UFget/UFsvd.m                       |     54 +
 CSparse/MATLAB/UFget/UFweb.m                       |    101 +-
 CSparse/MATLAB/UFget/mat/UF_Index.mat              |    Bin 124288 -> 117643 bytes
 CSparse/MATLAB/UFget/matrices/UFstats.csv          |   2652 +
 CSparse/MATLAB/cs_install.m                        |     42 +-
 CSparse/Makefile                                   |     20 +-
 CSparse/README.txt                                 |    387 +-
 CSparse/Source/README.txt                          |      2 +
 CSparse/Source/cs_add.c                            |     22 +-
 CSparse/Source/cs_amd.c                            |    606 +-
 CSparse/Source/cs_chol.c                           |     70 +-
 CSparse/Source/cs_cholsol.c                        |     18 +-
 CSparse/Source/cs_compress.c                       |     20 +-
 CSparse/Source/cs_counts.c                         |     64 +-
 CSparse/Source/cs_cumsum.c                         |     16 +-
 CSparse/Source/cs_dfs.c                            |     54 +-
 CSparse/Source/cs_dmperm.c                         |    140 +-
 CSparse/Source/cs_droptol.c                        |      4 +-
 CSparse/Source/cs_dropzeros.c                      |      6 +-
 CSparse/Source/cs_dupl.c                           |     50 +-
 CSparse/Source/cs_entry.c                          |      4 +-
 CSparse/Source/cs_ereach.c                         |     28 +-
 CSparse/Source/cs_etree.c                          |     36 +-
 CSparse/Source/cs_fkeep.c                          |     30 +-
 CSparse/Source/cs_gaxpy.c                          |     14 +-
 CSparse/Source/cs_happly.c                         |     12 +-
 CSparse/Source/cs_house.c                          |     18 +-
 CSparse/Source/cs_ipvec.c                          |      6 +-
 CSparse/Source/cs_leaf.c                           |     16 +-
 CSparse/Source/cs_load.c                           |     10 +-
 CSparse/Source/cs_lsolve.c                         |     16 +-
 CSparse/Source/cs_ltsolve.c                        |     16 +-
 CSparse/Source/cs_lu.c                             |    130 +-
 CSparse/Source/cs_lusol.c                          |     18 +-
 CSparse/Source/cs_malloc.c                         |     14 +-
 CSparse/Source/cs_maxtrans.c                       |    120 +-
 CSparse/Source/cs_multiply.c                       |     36 +-
 CSparse/Source/cs_norm.c                           |      8 +-
 CSparse/Source/cs_permute.c                        |     22 +-
 CSparse/Source/cs_pinv.c                           |     12 +-
 CSparse/Source/cs_post.c                           |     24 +-
 CSparse/Source/cs_print.c                          |     45 +-
 CSparse/Source/cs_pvec.c                           |      6 +-
 CSparse/Source/cs_qr.c                             |    102 +-
 CSparse/Source/cs_qrsol.c                          |     64 +-
 CSparse/Source/cs_randperm.c                       |     22 +-
 CSparse/Source/cs_reach.c                          |     14 +-
 CSparse/Source/cs_scatter.c                        |     24 +-
 CSparse/Source/cs_scc.c                            |     36 +-
 CSparse/Source/cs_schol.c                          |     22 +-
 CSparse/Source/cs_spsolve.c                        |     32 +-
 CSparse/Source/cs_sqr.c                            |    105 +-
 CSparse/Source/cs_symperm.c                        |     50 +-
 CSparse/Source/cs_tdfs.c                           |     32 +-
 CSparse/Source/cs_transpose.c                      |     28 +-
 CSparse/Source/cs_updown.c                         |     46 +-
 CSparse/Source/cs_usolve.c                         |     16 +-
 CSparse/Source/cs_util.c                           |     78 +-
 CSparse/Source/cs_utsolve.c                        |     16 +-
 CSparse/Tcov/Makefile                              |      8 +-
 CSparse/Tcov/README.txt                            |      2 +
 CSparse/Tcov/cov.awk                               |      2 +-
 CSparse/Tcov/covall                                |     12 +-
 CSparse/Tcov/covall.linux                          |     12 +-
 CSparse/Tcov/covall.sol                            |      8 +-
 CSparse/Tcov/cover                                 |     10 +-
 CSparse/Tcov/covs                                  |      8 +-
 CSparse/Tcov/cstcov_malloc_test.c                  |     14 +-
 CSparse/Tcov/cstcov_malloc_test.h                  |      2 +-
 CSparse/Tcov/cstcov_test.c                         |     26 +-
 CSparse/Tcov/gcovs                                 |      6 +-
 CSparse_to_CXSparse                                |     89 +-
 CXSparse/Demo/Makefile                             |     58 +-
 CXSparse/Demo/README.txt                           |      2 +
 CXSparse/Demo/cs_ci_demo.c                         |    181 +-
 CXSparse/Demo/cs_ci_demo1.c                        |     24 +-
 CXSparse/Demo/cs_cl_demo.c                         |    213 +-
 CXSparse/Demo/cs_cl_demo.h                         |      6 +-
 CXSparse/Demo/cs_cl_demo1.c                        |     26 +-
 CXSparse/Demo/cs_demo.c                            |    181 +-
 CXSparse/Demo/cs_demo.out                          |    396 +-
 CXSparse/Demo/cs_demo1.c                           |     24 +-
 CXSparse/Demo/cs_di_demo.c                         |    181 +-
 CXSparse/Demo/cs_di_demo1.c                        |     24 +-
 CXSparse/Demo/cs_dl_demo.c                         |    213 +-
 CXSparse/Demo/cs_dl_demo.h                         |      6 +-
 CXSparse/Demo/cs_dl_demo1.c                        |     26 +-
 CXSparse/Demo/cs_idemo.c                           |     18 +-
 CXSparse/Demo/cs_ldemo.c                           |     20 +-
 CXSparse/Doc/ChangeLog                             |    251 +-
 CXSparse/Doc/License.txt                           |      2 +-
 CXSparse/Doc/lesser.txt                            |     12 +-
 CXSparse/Include/cs.h                              |    462 +-
 CXSparse/Lib/Makefile                              |     31 +-
 CXSparse/MATLAB/CSparse/Contents.m                 |      3 +-
 CXSparse/MATLAB/CSparse/Makefile                   |    171 -
 CXSparse/MATLAB/CSparse/README.txt                 |      2 +
 CXSparse/MATLAB/CSparse/ccspy.m                    |      3 +-
 CXSparse/MATLAB/CSparse/cs_add.m                   |      5 +-
 CXSparse/MATLAB/CSparse/cs_add_mex.c               |     64 +-
 CXSparse/MATLAB/CSparse/cs_amd.m                   |      5 +-
 CXSparse/MATLAB/CSparse/cs_amd_mex.c               |      4 +-
 CXSparse/MATLAB/CSparse/cs_chol.m                  |      5 +-
 CXSparse/MATLAB/CSparse/cs_chol_mex.c              |     76 +-
 CXSparse/MATLAB/CSparse/cs_cholsol.m               |      5 +-
 CXSparse/MATLAB/CSparse/cs_cholsol_mex.c           |     42 +-
 CXSparse/MATLAB/CSparse/cs_counts.m                |      5 +-
 CXSparse/MATLAB/CSparse/cs_counts_mex.c            |     18 +-
 CXSparse/MATLAB/CSparse/cs_dmperm.m                |      5 +-
 CXSparse/MATLAB/CSparse/cs_dmperm_mex.c            |     28 +-
 CXSparse/MATLAB/CSparse/cs_dmsol.m                 |     13 +-
 CXSparse/MATLAB/CSparse/cs_dmspy.m                 |      3 +-
 CXSparse/MATLAB/CSparse/cs_droptol.m               |      5 +-
 CXSparse/MATLAB/CSparse/cs_droptol_mex.c           |     38 +-
 CXSparse/MATLAB/CSparse/cs_esep.m                  |      3 +-
 CXSparse/MATLAB/CSparse/cs_etree.m                 |      5 +-
 CXSparse/MATLAB/CSparse/cs_etree_mex.c             |     18 +-
 CXSparse/MATLAB/CSparse/cs_gaxpy.m                 |      7 +-
 CXSparse/MATLAB/CSparse/cs_gaxpy_mex.c             |     38 +-
 CXSparse/MATLAB/CSparse/cs_lsolve.m                |      5 +-
 CXSparse/MATLAB/CSparse/cs_lsolve_mex.c            |     84 +-
 CXSparse/MATLAB/CSparse/cs_ltsolve.m               |      5 +-
 CXSparse/MATLAB/CSparse/cs_ltsolve_mex.c           |     30 +-
 CXSparse/MATLAB/CSparse/cs_lu.m                    |      5 +-
 CXSparse/MATLAB/CSparse/cs_lu_mex.c                |    120 +-
 CXSparse/MATLAB/CSparse/cs_lusol.m                 |      5 +-
 CXSparse/MATLAB/CSparse/cs_lusol_mex.c             |     48 +-
 CXSparse/MATLAB/CSparse/cs_make.m                  |     16 +-
 CXSparse/MATLAB/CSparse/cs_mex.c                   |     48 +-
 CXSparse/MATLAB/CSparse/cs_multiply.m              |      5 +-
 CXSparse/MATLAB/CSparse/cs_multiply_mex.c          |     52 +-
 CXSparse/MATLAB/CSparse/cs_must_compile.m          |      5 +-
 CXSparse/MATLAB/CSparse/cs_nd.m                    |     13 +-
 CXSparse/MATLAB/CSparse/cs_nsep.m                  |      3 +-
 CXSparse/MATLAB/CSparse/cs_permute.m               |      5 +-
 CXSparse/MATLAB/CSparse/cs_permute_mex.c           |     44 +-
 CXSparse/MATLAB/CSparse/cs_print.m                 |      5 +-
 CXSparse/MATLAB/CSparse/cs_print_mex.c             |     18 +-
 CXSparse/MATLAB/CSparse/cs_qleft.m                 |      7 +-
 CXSparse/MATLAB/CSparse/cs_qr.m                    |      5 +-
 CXSparse/MATLAB/CSparse/cs_qr_mex.c                |    112 +-
 CXSparse/MATLAB/CSparse/cs_qright.m                |      3 +-
 CXSparse/MATLAB/CSparse/cs_qrsol.m                 |      5 +-
 CXSparse/MATLAB/CSparse/cs_qrsol_mex.c             |     52 +-
 CXSparse/MATLAB/CSparse/cs_randperm.m              |      5 +-
 CXSparse/MATLAB/CSparse/cs_randperm_mex.c          |      4 +-
 CXSparse/MATLAB/CSparse/cs_scc.m                   |      5 +-
 CXSparse/MATLAB/CSparse/cs_scc2.m                  |     21 +-
 CXSparse/MATLAB/CSparse/cs_scc_mex.c               |     12 +-
 CXSparse/MATLAB/CSparse/cs_sep.m                   |      7 +-
 CXSparse/MATLAB/CSparse/cs_sparse.m                |      5 +-
 CXSparse/MATLAB/CSparse/cs_sparse_mex.c            |     70 +-
 CXSparse/MATLAB/CSparse/cs_sqr.m                   |      7 +-
 CXSparse/MATLAB/CSparse/cs_sqr_mex.c               |     20 +-
 CXSparse/MATLAB/CSparse/cs_symperm.m               |      5 +-
 CXSparse/MATLAB/CSparse/cs_symperm_mex.c           |     56 +-
 CXSparse/MATLAB/CSparse/cs_thumb_mex.c             |     40 +-
 CXSparse/MATLAB/CSparse/cs_transpose.m             |      5 +-
 CXSparse/MATLAB/CSparse/cs_transpose_mex.c         |     20 +-
 CXSparse/MATLAB/CSparse/cs_updown.m                |      5 +-
 CXSparse/MATLAB/CSparse/cs_updown_mex.c            |    136 +-
 CXSparse/MATLAB/CSparse/cs_usolve.m                |      5 +-
 CXSparse/MATLAB/CSparse/cs_usolve_mex.c            |     84 +-
 CXSparse/MATLAB/CSparse/cs_utsolve.m               |      5 +-
 CXSparse/MATLAB/CSparse/cs_utsolve_mex.c           |     30 +-
 CXSparse/MATLAB/CSparse/cspy.m                     |     27 +-
 CXSparse/MATLAB/CSparse/private/cs_make_helper.m   |    106 +-
 CXSparse/MATLAB/CSparse/private/drawbox.m          |      7 +-
 CXSparse/MATLAB/CSparse/private/drawboxes.m        |     23 +-
 CXSparse/MATLAB/Demo/README.txt                    |      2 +
 CXSparse/MATLAB/Demo/cs_demo.m                     |     10 +-
 CXSparse/MATLAB/Demo/cs_demo1.m                    |     31 +-
 CXSparse/MATLAB/Demo/cs_demo2.m                    |     17 +-
 CXSparse/MATLAB/Demo/cs_demo3.m                    |     17 +-
 CXSparse/MATLAB/Demo/private/demo2.m               |     53 +-
 CXSparse/MATLAB/Demo/private/demo3.m               |     10 +-
 CXSparse/MATLAB/Demo/private/ex2.m                 |     13 +-
 CXSparse/MATLAB/Demo/private/ex3.m                 |      3 +-
 CXSparse/MATLAB/Demo/private/ex_1.m                |     15 +-
 CXSparse/MATLAB/Demo/private/frand.m               |      4 +-
 CXSparse/MATLAB/Demo/private/get_problem.m         |      5 +-
 CXSparse/MATLAB/Demo/private/is_sym.m              |      7 +-
 CXSparse/MATLAB/Demo/private/mesh2d1.m             |     15 +-
 CXSparse/MATLAB/Demo/private/mesh2d2.m             |      3 +-
 CXSparse/MATLAB/Demo/private/mesh3d1.m             |     31 +-
 CXSparse/MATLAB/Demo/private/mesh3d2.m             |      3 +-
 CXSparse/MATLAB/Demo/private/print_order.m         |     13 +-
 CXSparse/MATLAB/Demo/private/print_resid.m         |      3 +-
 CXSparse/MATLAB/Demo/private/rhs.m                 |      3 +-
 CXSparse/MATLAB/Makefile                           |     14 -
 CXSparse/MATLAB/README.txt                         |      2 +
 CXSparse/MATLAB/Test/Makefile                      |     53 -
 CXSparse/MATLAB/Test/README.txt                    |      2 +
 CXSparse/MATLAB/Test/another_colormap.m            |      6 +-
 CXSparse/MATLAB/Test/check_if_same.m               |     19 +-
 CXSparse/MATLAB/Test/chol_downdate.m               |      7 +-
 CXSparse/MATLAB/Test/chol_example.m                |      4 +-
 CXSparse/MATLAB/Test/chol_left.m                   |      3 +-
 CXSparse/MATLAB/Test/chol_left2.m                  |      5 +-
 CXSparse/MATLAB/Test/chol_right.m                  |      3 +-
 CXSparse/MATLAB/Test/chol_super.m                  |      3 +-
 CXSparse/MATLAB/Test/chol_up.m                     |      3 +-
 CXSparse/MATLAB/Test/chol_update.m                 |      5 +-
 CXSparse/MATLAB/Test/chol_updown.m                 |     25 +-
 CXSparse/MATLAB/Test/chol_updown2.m                |     33 +-
 CXSparse/MATLAB/Test/choldn.m                      |      9 +-
 CXSparse/MATLAB/Test/cholup.m                      |      3 +-
 CXSparse/MATLAB/Test/cholupdown.m                  |     38 +-
 CXSparse/MATLAB/Test/cond1est.m                    |      7 +-
 CXSparse/MATLAB/Test/cs_fiedler.m                  |      9 +-
 CXSparse/MATLAB/Test/cs_frand.m                    |      5 +-
 CXSparse/MATLAB/Test/cs_frand_mex.c                |     18 +-
 CXSparse/MATLAB/Test/cs_ipvec.m                    |      5 +-
 CXSparse/MATLAB/Test/cs_ipvec_mex.c                |     26 +-
 CXSparse/MATLAB/Test/cs_maxtransr.m                |      5 +-
 CXSparse/MATLAB/Test/cs_maxtransr_mex.c            |     28 +-
 CXSparse/MATLAB/Test/cs_pvec.m                     |      5 +-
 CXSparse/MATLAB/Test/cs_pvec_mex.c                 |     26 +-
 CXSparse/MATLAB/Test/cs_q1.m                       |      5 +-
 CXSparse/MATLAB/Test/cs_reach.m                    |      5 +-
 CXSparse/MATLAB/Test/cs_reach_mex.c                |      2 +-
 CXSparse/MATLAB/Test/cs_reachr.m                   |      5 +-
 CXSparse/MATLAB/Test/cs_reachr_mex.c               |     30 +-
 CXSparse/MATLAB/Test/cs_rowcnt.m                   |      6 +-
 CXSparse/MATLAB/Test/cs_rowcnt_mex.c               |     48 +-
 CXSparse/MATLAB/Test/cs_sparse2.m                  |      6 +-
 CXSparse/MATLAB/Test/cs_sparse2_mex.c              |     64 +-
 CXSparse/MATLAB/Test/cs_test_make.m                |     18 +-
 CXSparse/MATLAB/Test/cspy_test.m                   |     39 +-
 CXSparse/MATLAB/Test/dmperm_test.m                 |     65 +-
 CXSparse/MATLAB/Test/dmspy_test.m                  |      6 +-
 CXSparse/MATLAB/Test/etree_sample.m                |      5 +-
 CXSparse/MATLAB/Test/givens2.m                     |      3 +-
 CXSparse/MATLAB/Test/gqr3.m                        |     20 +-
 CXSparse/MATLAB/Test/happly.m                      |      4 +-
 CXSparse/MATLAB/Test/hmake1.m                      |     15 +-
 CXSparse/MATLAB/Test/house.m                       |      5 +-
 CXSparse/MATLAB/Test/lu_left.m                     |     11 +-
 CXSparse/MATLAB/Test/lu_right.m                    |      9 +-
 CXSparse/MATLAB/Test/lu_rightp.m                   |      9 +-
 CXSparse/MATLAB/Test/lu_rightpr.m                  |     15 +-
 CXSparse/MATLAB/Test/lu_rightr.m                   |     11 +-
 CXSparse/MATLAB/Test/mynormest1.m                  |     54 +-
 CXSparse/MATLAB/Test/myqr.m                        |     30 +-
 CXSparse/MATLAB/Test/norm1est.m                    |     29 +-
 CXSparse/MATLAB/Test/qr2.m                         |      3 +-
 CXSparse/MATLAB/Test/qr_givens.m                   |     15 +-
 CXSparse/MATLAB/Test/qr_givens_full.m              |      7 +-
 CXSparse/MATLAB/Test/qr_left.m                     |      9 +-
 CXSparse/MATLAB/Test/qr_right.m                    |      3 +-
 CXSparse/MATLAB/Test/sample_colormap.m             |      8 +-
 CXSparse/MATLAB/Test/signum.m                      |      5 +-
 CXSparse/MATLAB/Test/sqr_example.m                 |      3 +-
 CXSparse/MATLAB/Test/test1.m                       |    103 +-
 CXSparse/MATLAB/Test/test10.m                      |    149 +-
 CXSparse/MATLAB/Test/test11.m                      |     13 +-
 CXSparse/MATLAB/Test/test12.m                      |     41 +-
 CXSparse/MATLAB/Test/test13.m                      |     16 +-
 CXSparse/MATLAB/Test/test14.m                      |     26 +-
 CXSparse/MATLAB/Test/test15.m                      |     12 +-
 CXSparse/MATLAB/Test/test16.m                      |     59 +-
 CXSparse/MATLAB/Test/test17.m                      |     18 +-
 CXSparse/MATLAB/Test/test18.m                      |      8 +-
 CXSparse/MATLAB/Test/test19.m                      |    122 +-
 CXSparse/MATLAB/Test/test2.m                       |     35 +-
 CXSparse/MATLAB/Test/test20.m                      |     10 +-
 CXSparse/MATLAB/Test/test21.m                      |     92 +-
 CXSparse/MATLAB/Test/test22.m                      |     12 +-
 CXSparse/MATLAB/Test/test23.m                      |      3 +-
 CXSparse/MATLAB/Test/test24.m                      |      6 +-
 CXSparse/MATLAB/Test/test25.m                      |     10 +-
 CXSparse/MATLAB/Test/test26.m                      |     26 +-
 CXSparse/MATLAB/Test/test27.m                      |      5 +-
 CXSparse/MATLAB/Test/test28.m                      |     45 +-
 CXSparse/MATLAB/Test/test3.m                       |    157 +-
 CXSparse/MATLAB/Test/test4.m                       |     10 +-
 CXSparse/MATLAB/Test/test5.m                       |     22 +-
 CXSparse/MATLAB/Test/test6.m                       |    158 +-
 CXSparse/MATLAB/Test/test7.m                       |    151 +-
 CXSparse/MATLAB/Test/test8.m                       |    119 +-
 CXSparse/MATLAB/Test/test9.m                       |    169 +-
 CXSparse/MATLAB/Test/test_qr.m                     |     15 +-
 CXSparse/MATLAB/Test/test_qr1.m                    |     36 +-
 CXSparse/MATLAB/Test/test_qrsol.m                  |      7 +-
 CXSparse/MATLAB/Test/test_randperms.m              |     19 +-
 CXSparse/MATLAB/Test/test_sep.m                    |     26 +-
 CXSparse/MATLAB/Test/testall.m                     |      6 +-
 CXSparse/MATLAB/Test/testh.m                       |      6 +-
 CXSparse/MATLAB/UFget/Contents.m                   |      4 +-
 CXSparse/MATLAB/UFget/Makefile                     |      7 +
 CXSparse/MATLAB/UFget/README.txt                   |    141 +-
 CXSparse/MATLAB/UFget/UFget.m                      |    116 +-
 CXSparse/MATLAB/UFget/UFget_defaults.m             |     74 +-
 CXSparse/MATLAB/UFget/UFget_example.m              |      4 +-
 CXSparse/MATLAB/UFget/UFget_lookup.m               |     64 +-
 CXSparse/MATLAB/UFget/UFgrep.m                     |      8 +-
 CXSparse/MATLAB/UFget/UFgui.jar                    |    Bin 0 -> 40421 bytes
 CXSparse/MATLAB/UFget/UFgui.java                   |   2589 +
 CXSparse/MATLAB/UFget/UFhelp.html                  |    545 +
 CXSparse/MATLAB/UFget/UFkinds.m                    |     71 +
 CXSparse/MATLAB/UFget/UFsettings.txt               |      6 +
 CXSparse/MATLAB/UFget/UFsvd.m                      |     54 +
 CXSparse/MATLAB/UFget/UFweb.m                      |    101 +-
 CXSparse/MATLAB/UFget/mat/UF_Index.mat             |    Bin 124288 -> 117643 bytes
 CXSparse/MATLAB/UFget/matrices/UFstats.csv         |   2652 +
 CXSparse/MATLAB/cs_install.m                       |     38 +-
 CXSparse/Makefile                                  |     33 +-
 CXSparse/README.txt                                |    558 +-
 CXSparse/Source/README.txt                         |      2 +
 CXSparse/Source/cs_add.c                           |     20 +-
 CXSparse/Source/cs_amd.c                           |    594 +-
 CXSparse/Source/cs_chol.c                          |     68 +-
 CXSparse/Source/cs_cholsol.c                       |     14 +-
 CXSparse/Source/cs_compress.c                      |     18 +-
 CXSparse/Source/cs_convert.c                       |     28 +-
 CXSparse/Source/cs_counts.c                        |     56 +-
 CXSparse/Source/cs_cumsum.c                        |     12 +-
 CXSparse/Source/cs_dfs.c                           |     50 +-
 CXSparse/Source/cs_dmperm.c                        |    114 +-
 CXSparse/Source/cs_dropzeros.c                     |      2 +-
 CXSparse/Source/cs_dupl.c                          |     46 +-
 CXSparse/Source/cs_entry.c                         |      2 +-
 CXSparse/Source/cs_ereach.c                        |     24 +-
 CXSparse/Source/cs_etree.c                         |     32 +-
 CXSparse/Source/cs_fkeep.c                         |     26 +-
 CXSparse/Source/cs_gaxpy.c                         |     10 +-
 CXSparse/Source/cs_happly.c                        |      8 +-
 CXSparse/Source/cs_house.c                         |     20 +-
 CXSparse/Source/cs_ipvec.c                         |      2 +-
 CXSparse/Source/cs_leaf.c                          |     10 +-
 CXSparse/Source/cs_load.c                          |     14 +-
 CXSparse/Source/cs_lsolve.c                        |     12 +-
 CXSparse/Source/cs_ltsolve.c                       |     12 +-
 CXSparse/Source/cs_lu.c                            |    126 +-
 CXSparse/Source/cs_lusol.c                         |     14 +-
 CXSparse/Source/cs_malloc.c                        |      8 +-
 CXSparse/Source/cs_maxtrans.c                      |    110 +-
 CXSparse/Source/cs_multiply.c                      |     34 +-
 CXSparse/Source/cs_norm.c                          |      6 +-
 CXSparse/Source/cs_permute.c                       |     18 +-
 CXSparse/Source/cs_pinv.c                          |      8 +-
 CXSparse/Source/cs_post.c                          |     20 +-
 CXSparse/Source/cs_print.c                         |     51 +-
 CXSparse/Source/cs_pvec.c                          |      2 +-
 CXSparse/Source/cs_qr.c                            |    100 +-
 CXSparse/Source/cs_qrsol.c                         |     60 +-
 CXSparse/Source/cs_randperm.c                      |     18 +-
 CXSparse/Source/cs_reach.c                         |     10 +-
 CXSparse/Source/cs_scatter.c                       |     18 +-
 CXSparse/Source/cs_scc.c                           |     34 +-
 CXSparse/Source/cs_schol.c                         |     16 +-
 CXSparse/Source/cs_spsolve.c                       |     26 +-
 CXSparse/Source/cs_sqr.c                           |     93 +-
 CXSparse/Source/cs_symperm.c                       |     46 +-
 CXSparse/Source/cs_tdfs.c                          |     28 +-
 CXSparse/Source/cs_transpose.c                     |     24 +-
 CXSparse/Source/cs_updown.c                        |     48 +-
 CXSparse/Source/cs_usolve.c                        |     12 +-
 CXSparse/Source/cs_util.c                          |     44 +-
 CXSparse/Source/cs_utsolve.c                       |     12 +-
 CXSparse/Tcov/Makefile                             |     68 +-
 CXSparse/Tcov/README.txt                           |      2 +
 CXSparse/Tcov/cov.awk                              |      2 +-
 CXSparse/Tcov/covall                               |     12 +-
 CXSparse/Tcov/covall.linux                         |     12 +-
 CXSparse/Tcov/covall.sol                           |      8 +-
 CXSparse/Tcov/cover                                |     10 +-
 CXSparse/Tcov/covs                                 |      8 +-
 CXSparse/Tcov/cstcov_malloc_test.c                 |      6 +-
 CXSparse/Tcov/cstcov_test.c                        |     26 +-
 CXSparse/Tcov/gcovs                                |      6 +-
 CXSparse_newfiles.tar.gz                           |    Bin 575398 -> 0 bytes
 CXSparse_newfiles/Demo/Makefile                    |     58 +-
 CXSparse_newfiles/Demo/README.txt                  |      2 +
 CXSparse_newfiles/Demo/cs_idemo.c                  |     18 +-
 CXSparse_newfiles/Demo/cs_ldemo.c                  |     20 +-
 CXSparse_newfiles/Doc/License.txt                  |      2 +-
 CXSparse_newfiles/Include/cs.h                     |    462 +-
 CXSparse_newfiles/Lib/Makefile                     |     31 +-
 CXSparse_newfiles/MATLAB/CSparse/Contents.m        |      3 +-
 CXSparse_newfiles/MATLAB/CSparse/Makefile          |    171 -
 CXSparse_newfiles/MATLAB/CSparse/README.txt        |      2 +
 CXSparse_newfiles/MATLAB/CSparse/cs_add_mex.c      |     64 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_amd_mex.c      |      4 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_chol_mex.c     |     76 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_cholsol_mex.c  |     42 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_counts_mex.c   |     18 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_dmperm_mex.c   |     28 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_droptol_mex.c  |     38 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_esep.m         |      3 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_etree_mex.c    |     18 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_gaxpy_mex.c    |     38 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_lsolve_mex.c   |     84 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_ltsolve_mex.c  |     30 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_lu_mex.c       |    120 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_lusol_mex.c    |     48 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_make.m         |     16 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_mex.c          |     48 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_multiply_mex.c |     52 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_permute_mex.c  |     44 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_print_mex.c    |     18 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_qr_mex.c       |    112 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_qrsol_mex.c    |     52 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_randperm_mex.c |      4 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_scc_mex.c      |     12 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_sparse_mex.c   |     70 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_sqr_mex.c      |     20 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_symperm_mex.c  |     56 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_thumb_mex.c    |     40 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_transpose.m    |      5 +-
 .../MATLAB/CSparse/cs_transpose_mex.c              |     20 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_updown_mex.c   |    136 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_usolve_mex.c   |     84 +-
 CXSparse_newfiles/MATLAB/CSparse/cs_utsolve_mex.c  |     30 +-
 .../MATLAB/CSparse/private/cs_make_helper.m        |    106 +-
 CXSparse_newfiles/MATLAB/Demo/README.txt           |      2 +
 CXSparse_newfiles/MATLAB/Demo/cs_demo.m            |     10 +-
 CXSparse_newfiles/MATLAB/README.txt                |      2 +
 CXSparse_newfiles/MATLAB/Test/Makefile             |     53 -
 CXSparse_newfiles/MATLAB/Test/README.txt           |      2 +
 CXSparse_newfiles/MATLAB/Test/chol_updown2.m       |     33 +-
 CXSparse_newfiles/MATLAB/Test/cholupdown.m         |     38 +-
 CXSparse_newfiles/MATLAB/Test/cs_fiedler.m         |      9 +-
 CXSparse_newfiles/MATLAB/Test/cs_frand_mex.c       |     18 +-
 CXSparse_newfiles/MATLAB/Test/cs_ipvec_mex.c       |     26 +-
 CXSparse_newfiles/MATLAB/Test/cs_maxtransr_mex.c   |     28 +-
 CXSparse_newfiles/MATLAB/Test/cs_pvec_mex.c        |     26 +-
 CXSparse_newfiles/MATLAB/Test/cs_reach_mex.c       |      2 +-
 CXSparse_newfiles/MATLAB/Test/cs_reachr_mex.c      |     30 +-
 CXSparse_newfiles/MATLAB/Test/cs_rowcnt_mex.c      |     48 +-
 CXSparse_newfiles/MATLAB/Test/cs_sparse2_mex.c     |     64 +-
 CXSparse_newfiles/MATLAB/Test/cs_test_make.m       |     18 +-
 CXSparse_newfiles/MATLAB/Test/house.m              |      5 +-
 CXSparse_newfiles/MATLAB/Test/norm1est.m           |     29 +-
 CXSparse_newfiles/MATLAB/Test/test1.m              |    103 +-
 CXSparse_newfiles/MATLAB/Test/test10.m             |    149 +-
 CXSparse_newfiles/MATLAB/Test/test11.m             |     13 +-
 CXSparse_newfiles/MATLAB/Test/test12.m             |     41 +-
 CXSparse_newfiles/MATLAB/Test/test13.m             |     16 +-
 CXSparse_newfiles/MATLAB/Test/test14.m             |     26 +-
 CXSparse_newfiles/MATLAB/Test/test15.m             |     12 +-
 CXSparse_newfiles/MATLAB/Test/test16.m             |     59 +-
 CXSparse_newfiles/MATLAB/Test/test17.m             |     18 +-
 CXSparse_newfiles/MATLAB/Test/test18.m             |      8 +-
 CXSparse_newfiles/MATLAB/Test/test19.m             |    122 +-
 CXSparse_newfiles/MATLAB/Test/test2.m              |     35 +-
 CXSparse_newfiles/MATLAB/Test/test20.m             |     10 +-
 CXSparse_newfiles/MATLAB/Test/test21.m             |     92 +-
 CXSparse_newfiles/MATLAB/Test/test22.m             |     12 +-
 CXSparse_newfiles/MATLAB/Test/test23.m             |      3 +-
 CXSparse_newfiles/MATLAB/Test/test24.m             |      6 +-
 CXSparse_newfiles/MATLAB/Test/test25.m             |     10 +-
 CXSparse_newfiles/MATLAB/Test/test26.m             |     26 +-
 CXSparse_newfiles/MATLAB/Test/test27.m             |      5 +-
 CXSparse_newfiles/MATLAB/Test/test28.m             |     45 +-
 CXSparse_newfiles/MATLAB/Test/test3.m              |    157 +-
 CXSparse_newfiles/MATLAB/Test/test4.m              |     10 +-
 CXSparse_newfiles/MATLAB/Test/test5.m              |     22 +-
 CXSparse_newfiles/MATLAB/Test/test6.m              |    158 +-
 CXSparse_newfiles/MATLAB/Test/test7.m              |    151 +-
 CXSparse_newfiles/MATLAB/Test/test8.m              |    119 +-
 CXSparse_newfiles/MATLAB/Test/test9.m              |    169 +-
 CXSparse_newfiles/MATLAB/Test/testall.m            |      6 +-
 CXSparse_newfiles/MATLAB/Test/testh.m              |      6 +-
 CXSparse_newfiles/MATLAB/cs_install.m              |     38 +-
 CXSparse_newfiles/Makefile                         |     51 +
 CXSparse_newfiles/README.txt                       |    558 +-
 CXSparse_newfiles/Source/README.txt                |      2 +
 CXSparse_newfiles/Source/cs_convert.c              |     28 +-
 CXSparse_newfiles/Source/cs_house.c                |     20 +-
 CXSparse_newfiles/Source/cs_load.c                 |     26 +
 CXSparse_newfiles/Source/cs_print.c                |     51 +
 CXSparse_newfiles/Source/cs_updown.c               |     48 +-
 CXSparse_newfiles/Tcov/Makefile                    |     68 +-
 CXSparse_newfiles/Tcov/README.txt                  |      2 +
 CXSparse_newfiles/Tcov/cstcov_malloc_test.c        |      6 +-
 ChangeLog                                          |    477 +
 Contents.m                                         |     33 +-
 GPUQREngine/Demo/Makefile                          |     40 +
 GPUQREngine/Demo/README.txt                        |     12 +
 GPUQREngine/Demo/gpuqrengine_demo.cpp              |    337 +
 GPUQREngine/Doc/ChangeLog                          |      3 +
 {SSMULT => GPUQREngine/Doc}/gpl.txt                |      0
 GPUQREngine/Include/GPUQREngine.hpp                |     58 +
 GPUQREngine/Include/GPUQREngine_BucketList.hpp     |    168 +
 GPUQREngine/Include/GPUQREngine_Common.hpp         |     82 +
 GPUQREngine/Include/GPUQREngine_Front.hpp          |    167 +
 GPUQREngine/Include/GPUQREngine_FrontState.hpp     |     30 +
 GPUQREngine/Include/GPUQREngine_GraphVizHelper.hpp |     19 +
 GPUQREngine/Include/GPUQREngine_Internal.hpp       |     37 +
 GPUQREngine/Include/GPUQREngine_LLBundle.hpp       |     96 +
 GPUQREngine/Include/GPUQREngine_SEntry.hpp         |     25 +
 GPUQREngine/Include/GPUQREngine_Scheduler.hpp      |    168 +
 GPUQREngine/Include/GPUQREngine_SparseMeta.hpp     |     82 +
 GPUQREngine/Include/GPUQREngine_Stats.hpp          |     31 +
 GPUQREngine/Include/GPUQREngine_TaskDescriptor.hpp |    117 +
 GPUQREngine/Include/GPUQREngine_Timing.hpp         |     46 +
 GPUQREngine/Include/Kernel/Apply/block_apply.cu    |    219 +
 GPUQREngine/Include/Kernel/Apply/block_apply_1.cu  |     12 +
 .../Include/Kernel/Apply/block_apply_1_by_1.cu     |     12 +
 GPUQREngine/Include/Kernel/Apply/block_apply_2.cu  |     12 +
 .../Include/Kernel/Apply/block_apply_2_by_1.cu     |     12 +
 GPUQREngine/Include/Kernel/Apply/block_apply_3.cu  |     12 +
 .../Include/Kernel/Apply/block_apply_3_by_1.cu     |     12 +
 .../Include/Kernel/Apply/block_apply_chunk.cu      |    529 +
 GPUQREngine/Include/Kernel/Apply/cevta_tile.cu     |    152 +
 GPUQREngine/Include/Kernel/Apply/params_apply.hpp  |     63 +
 .../Include/Kernel/Apply/pipelined_rearrange.cu    |    195 +
 .../Include/Kernel/Assemble/packAssemble.cu        |     57 +
 GPUQREngine/Include/Kernel/Assemble/sAssemble.cu   |     19 +
 .../Include/Kernel/Factorize/factorize_3_by_1.cu   |     14 +
 .../Include/Kernel/Factorize/factorize_vt.cu       |    568 +
 .../Kernel/Factorize/factorize_vt_1_by_1.cu        |     14 +
 .../Kernel/Factorize/factorize_vt_1_by_1_edge.cu   |     15 +
 .../Kernel/Factorize/factorize_vt_2_by_1.cu        |     14 +
 .../Kernel/Factorize/factorize_vt_2_by_1_edge.cu   |     15 +
 .../Kernel/Factorize/factorize_vt_3_by_1.cu        |     14 +
 .../Kernel/Factorize/factorize_vt_3_by_1_edge.cu   |     15 +
 GPUQREngine/Include/Kernel/qrKernel.cu             |     74 +
 GPUQREngine/Include/Kernel/sharedMemory.hpp        |     51 +
 GPUQREngine/Include/Kernel/uberKernel.cu           |     45 +
 GPUQREngine/Lib/Makefile                           |    204 +
 GPUQREngine/Makefile                               |     41 +
 GPUQREngine/README.txt                             |     36 +
 GPUQREngine/Source/BucketList/BucketList.cpp       |    129 +
 .../BucketList/BucketList_AdvanceBundles.cpp       |     41 +
 .../Source/BucketList/BucketList_CreateBundles.cpp |    108 +
 .../Source/BucketList/BucketList_FillWorkQueue.cpp |    198 +
 .../Source/BucketList/BucketList_GrowBundles.cpp   |     70 +
 .../Source/BucketList/BucketList_Manage.cpp        |     90 +
 .../BucketList/BucketList_PostProcessing.cpp       |     44 +
 GPUQREngine/Source/GPUQREngine_ExpertDense.cpp     |    217 +
 GPUQREngine/Source/GPUQREngine_ExpertSparse.cpp    |     30 +
 GPUQREngine/Source/GPUQREngine_GraphVizHelper.cpp  |    216 +
 GPUQREngine/Source/GPUQREngine_Internal.cpp        |     88 +
 GPUQREngine/Source/GPUQREngine_UberKernel.cu       |     30 +
 GPUQREngine/Source/LLBundle/LLBundle.cpp           |     35 +
 GPUQREngine/Source/LLBundle/LLBundle_AddTiles.cpp  |    114 +
 GPUQREngine/Source/LLBundle/LLBundle_Advance.cpp   |     80 +
 GPUQREngine/Source/LLBundle/LLBundle_GPUPack.cpp   |     56 +
 .../LLBundle/LLBundle_PipelinedRearrange.cpp       |    106 +
 .../LLBundle/LLBundle_UpdateSecondMinIndex.cpp     |     50 +
 GPUQREngine/Source/Scheduler/Scheduler.cpp         |    254 +
 .../Source/Scheduler/Scheduler_FillWorkQueue.cpp   |    463 +
 GPUQREngine/Source/Scheduler/Scheduler_Front.cpp   |    209 +
 .../Source/Scheduler/Scheduler_LaunchKernel.cpp    |     63 +
 .../Source/Scheduler/Scheduler_PostProcess.cpp     |    241 +
 GPUQREngine/Source/Scheduler/Scheduler_Render.cpp  |     96 +
 .../Source/Scheduler/Scheduler_TransferData.cpp    |     59 +
 .../Source/Scheduler/ssgpu_maxQueueSize.cpp        |     28 +
 .../Source/TaskDescriptor/TaskDescriptor_flops.cpp |    140 +
 KLU/Demo/Makefile                                  |     34 +-
 KLU/Demo/klu_simple.c                              |      2 +-
 KLU/Demo/klu_simple.out                            |      5 +
 KLU/Demo/kludemo.c                                 |    364 +-
 KLU/Demo/kludemo.out                               |     24 +-
 KLU/Demo/kluldemo.c                                |    378 +-
 KLU/Doc/ChangeLog                                  |     46 +
 KLU/Doc/KLU_UserGuide.bib                          |     24 +-
 KLU/Doc/KLU_UserGuide.pdf                          |    Bin 224864 -> 314130 bytes
 KLU/Doc/KLU_UserGuide.tex                          |    107 +-
 KLU/Doc/Makefile                                   |     12 +-
 KLU/Include/klu.h                                  |    535 +-
 KLU/Include/klu_internal.h                         |     90 +-
 KLU/Include/klu_version.h                          |    202 +-
 KLU/Lib/Makefile                                   |     12 +-
 KLU/MATLAB/Contents.m                              |      2 +-
 KLU/MATLAB/Makefile                                |    699 -
 KLU/MATLAB/Makefile_no_CHOLMOD                     |    263 -
 KLU/MATLAB/Test/klu_test.m                         |      5 +-
 KLU/MATLAB/Test/test1.m                            |     41 +-
 KLU/MATLAB/Test/test2.m                            |     31 +-
 KLU/MATLAB/Test/test3.m                            |     22 +-
 KLU/MATLAB/Test/test4.m                            |     30 +-
 KLU/MATLAB/Test/test5.m                            |    168 +-
 KLU/MATLAB/klu.m                                   |      7 +-
 KLU/MATLAB/klu_demo.m                              |      2 +-
 KLU/MATLAB/klu_demo.m.out                          |     10 +-
 KLU/MATLAB/klu_install.m                           |     11 +-
 KLU/MATLAB/klu_make.m                              |    291 +-
 KLU/MATLAB/klu_mex.c                               |   3587 +-
 KLU/Makefile                                       |     41 +-
 KLU/README.txt                                     |    160 +-
 KLU/Source/klu.c                                   |    920 +-
 KLU/Source/klu_analyze.c                           |    522 +-
 KLU/Source/klu_analyze_given.c                     |    408 +-
 KLU/Source/klu_defaults.c                          |     36 +-
 KLU/Source/klu_diagnostics.c                       |    554 +-
 KLU/Source/klu_dump.c                              |    138 +-
 KLU/Source/klu_extract.c                           |    298 +-
 KLU/Source/klu_factor.c                            |    522 +-
 KLU/Source/klu_free_numeric.c                      |     16 +-
 KLU/Source/klu_free_symbolic.c                     |      6 +-
 KLU/Source/klu_kernel.c                            |   1017 +-
 KLU/Source/klu_memory.c                            |    147 +-
 KLU/Source/klu_refactor.c                          |    672 +-
 KLU/Source/klu_scale.c                             |    162 +-
 KLU/Source/klu_solve.c                             |    622 +-
 KLU/Source/klu_sort.c                              |     78 +-
 KLU/Source/klu_tsolve.c                            |    730 +-
 KLU/Tcov/Makefile                                  |     31 +-
 KLU/Tcov/README.txt                                |      2 +
 KLU/Tcov/klutest.c                                 |   1417 +-
 KLU/User/Makefile                                  |     15 +-
 KLU/User/README.txt                                |      2 +
 KLU/User/klu_cholmod.c                             |     74 +-
 KLU/User/klu_cholmod.h                             |      5 +-
 KLU/User/klu_l_cholmod.c                           |     78 +-
 LDL/Demo/Makefile                                  |     22 +-
 LDL/Demo/ldlamd.out                                |    186 +-
 LDL/Demo/ldllamd.out                               |    186 +-
 LDL/Demo/ldllmain.out                              |    364 +
 LDL/Demo/ldllsimple.c                              |      9 +-
 LDL/Demo/ldllsimple.out                            |     11 +
 LDL/Demo/ldlmain.c                                 |     69 +-
 LDL/Demo/ldlmain.out                               |     90 +-
 LDL/Demo/ldlsimple.c                               |      4 +-
 LDL/Doc/ChangeLog                                  |     25 +
 LDL/Doc/Makefile                                   |      2 +-
 LDL/Doc/ldl_userguide.pdf                          |    Bin 148374 -> 242255 bytes
 LDL/Doc/ldl_userguide.tex                          |     12 +-
 LDL/Include/ldl.h                                  |     54 +-
 LDL/Lib/Makefile                                   |      8 +-
 LDL/MATLAB/Contents.m                              |      6 +-
 LDL/MATLAB/Makefile                                |     27 -
 LDL/MATLAB/ldl_install.m                           |      2 +-
 LDL/MATLAB/ldl_make.m                              |     12 +-
 LDL/MATLAB/ldldemo.m                               |      3 +-
 LDL/MATLAB/ldlmain2.m                              |     14 +-
 LDL/MATLAB/ldlmex.c                                |     37 +-
 LDL/MATLAB/ldlrow.m                                |      2 +-
 LDL/MATLAB/ldlsparse.m                             |      2 +-
 LDL/MATLAB/ldlsymbol.m                             |      2 +-
 LDL/MATLAB/ldlsymbolmex.c                          |     29 +-
 LDL/MATLAB/ldltest.m                               |      3 +-
 LDL/Makefile                                       |     38 +-
 LDL/Matrix/A25                                     |      6 +-
 LDL/README.txt                                     |     14 +-
 LDL/Source/ldl.c                                   |      9 +-
 LINFACTOR/Contents.m                               |     22 -
 LINFACTOR/README.txt                               |     60 -
 LINFACTOR/linfactor.m                              |    187 -
 LINFACTOR/lintests.m                               |     69 -
 MATLAB_Tools/Contents.m                            |     15 +-
 MATLAB_Tools/Factorize/Contents.m                  |     65 +
 MATLAB_Tools/Factorize/Demo/factorize_demo.m       |    335 +
 MATLAB_Tools/Factorize/Demo/fdemo.m                |      2 +
 MATLAB_Tools/Factorize/Doc/factorize_article.pdf   |    Bin 0 -> 568479 bytes
 MATLAB_Tools/Factorize/Doc/factorize_demo.html     |    633 +
 MATLAB_Tools/Factorize/Doc/factorize_demo.pdf      |    Bin 0 -> 27530 bytes
 MATLAB_Tools/Factorize/Doc/factorize_demo.tex      |    590 +
 MATLAB_Tools/Factorize/Doc/license.txt             |     27 +
 MATLAB_Tools/Factorize/README.txt                  |     15 +
 MATLAB_Tools/Factorize/Test/Contents.m             |     22 +
 MATLAB_Tools/Factorize/Test/README.txt             |      4 +
 MATLAB_Tools/Factorize/Test/reset_rand.m           |     15 +
 MATLAB_Tools/Factorize/Test/test_accuracy.m        |    120 +
 MATLAB_Tools/Factorize/Test/test_all.m             |     32 +
 MATLAB_Tools/Factorize/Test/test_all.txt           |   1187 +
 MATLAB_Tools/Factorize/Test/test_all_cod.m         |     30 +
 MATLAB_Tools/Factorize/Test/test_all_svd.m         |     77 +
 MATLAB_Tools/Factorize/Test/test_cod.m             |    121 +
 MATLAB_Tools/Factorize/Test/test_disp.m            |    174 +
 MATLAB_Tools/Factorize/Test/test_errors.m          |    325 +
 MATLAB_Tools/Factorize/Test/test_factorize.m       |    484 +
 MATLAB_Tools/Factorize/Test/test_function.m        |    317 +
 MATLAB_Tools/Factorize/Test/test_functions.m       |     63 +
 MATLAB_Tools/Factorize/Test/test_performance.m     |    385 +
 MATLAB_Tools/Factorize/Test/test_svd.m             |    214 +
 MATLAB_Tools/Factorize/cod.m                       |     69 +
 MATLAB_Tools/Factorize/cod_qmult.m                 |     46 +
 MATLAB_Tools/Factorize/cod_sparse.m                |    177 +
 MATLAB_Tools/Factorize/factorization.m             |    650 +
 MATLAB_Tools/Factorize/factorization_chol_dense.m  |     77 +
 MATLAB_Tools/Factorize/factorization_chol_sparse.m |     40 +
 MATLAB_Tools/Factorize/factorization_cod_dense.m   |     50 +
 MATLAB_Tools/Factorize/factorization_cod_sparse.m  |     62 +
 MATLAB_Tools/Factorize/factorization_ldl_dense.m   |     62 +
 MATLAB_Tools/Factorize/factorization_ldl_sparse.m  |     43 +
 MATLAB_Tools/Factorize/factorization_lu_dense.m    |     59 +
 MATLAB_Tools/Factorize/factorization_lu_sparse.m   |     54 +
 MATLAB_Tools/Factorize/factorization_qr_dense.m    |     56 +
 MATLAB_Tools/Factorize/factorization_qr_sparse.m   |     54 +
 MATLAB_Tools/Factorize/factorization_qrt_dense.m   |     56 +
 MATLAB_Tools/Factorize/factorization_qrt_sparse.m  |     54 +
 MATLAB_Tools/Factorize/factorization_svd.m         |    211 +
 MATLAB_Tools/Factorize/factorize.m                 |    369 +
 MATLAB_Tools/Factorize/inverse.m                   |     44 +
 MATLAB_Tools/Factorize/private/cheap_condest.m     |     41 +
 MATLAB_Tools/Factorize/private/get_diag.m          |     15 +
 MATLAB_Tools/Factorize/private/rank_est.m          |      8 +
 MATLAB_Tools/Factorize/rq.m                        |    175 +
 MATLAB_Tools/GEE/Contents.m                        |     51 +
 MATLAB_Tools/GEE/gee_its_short.m                   |     22 +
 MATLAB_Tools/GEE/gee_its_simple.m                  |     38 +
 MATLAB_Tools/GEE/gee_its_simple_backsolve.m        |     38 +
 MATLAB_Tools/GEE/gee_its_simple_factorize.m        |    129 +
 MATLAB_Tools/GEE/gee_its_simple_forwardsolve.m     |     38 +
 MATLAB_Tools/GEE/gee_its_simple_resid.m            |     15 +
 MATLAB_Tools/GEE/gee_its_simple_test.m             |    282 +
 MATLAB_Tools/GEE/gee_its_sweet.m                   |     28 +
 MATLAB_Tools/GEE/gee_its_too_short.m               |     18 +
 MATLAB_Tools/GEE/private/gee_its_simple_check.m    |     30 +
 MATLAB_Tools/LINFACTOR/Contents.m                  |     22 +
 MATLAB_Tools/LINFACTOR/README.txt                  |     61 +
 MATLAB_Tools/LINFACTOR/linfactor.m                 |    186 +
 {LINFACTOR => MATLAB_Tools/LINFACTOR}/lintest.m    |      0
 MATLAB_Tools/LINFACTOR/lintests.m                  |     69 +
 MATLAB_Tools/MESHND/Contents.m                     |     25 +
 MATLAB_Tools/MESHND/README.txt                     |     25 +
 MATLAB_Tools/MESHND/meshnd.m                       |    114 +
 {MESHND => MATLAB_Tools/MESHND}/meshnd.png         |    Bin
 MATLAB_Tools/MESHND/meshnd_example.m               |    106 +
 MATLAB_Tools/MESHND/meshnd_quality.m               |    158 +
 {MESHND => MATLAB_Tools/MESHND}/meshnd_quality.png |    Bin
 .../MESHND}/meshnd_quality_out.txt                 |      0
 MATLAB_Tools/MESHND/meshsparse.m                   |    144 +
 MATLAB_Tools/SFMULT/Contents.m                     |     16 +
 MATLAB_Tools/SFMULT/Makefile                       |     55 +
 MATLAB_Tools/SFMULT/sfmult.c                       |    198 +
 MATLAB_Tools/SFMULT/sfmult.h                       |    551 +
 MATLAB_Tools/SFMULT/sfmult.m                       |     28 +
 MATLAB_Tools/SFMULT/sfmult_anxnyn.c                |    169 +
 MATLAB_Tools/SFMULT/sfmult_anxnyt.c                |    161 +
 MATLAB_Tools/SFMULT/sfmult_anxnyt_k.c              |    206 +
 MATLAB_Tools/SFMULT/sfmult_anxtyn.c                |    168 +
 MATLAB_Tools/SFMULT/sfmult_anxtyt.c                |    183 +
 MATLAB_Tools/SFMULT/sfmult_anxtyt_k.c              |    213 +
 MATLAB_Tools/SFMULT/sfmult_atxnyn.c                |    144 +
 MATLAB_Tools/SFMULT/sfmult_atxnyt.c                |    144 +
 MATLAB_Tools/SFMULT/sfmult_atxtyn.c                |    161 +
 MATLAB_Tools/SFMULT/sfmult_atxtyn_k.c              |    197 +
 MATLAB_Tools/SFMULT/sfmult_atxtyt.c                |    168 +
 MATLAB_Tools/SFMULT/sfmult_atxtyt_k.c              |    200 +
 MATLAB_Tools/SFMULT/sfmult_atxtyt_k.s              |    512 +
 MATLAB_Tools/SFMULT/sfmult_mex.c                   |     65 +
 MATLAB_Tools/SFMULT/sfmult_vector_1.c              |    122 +
 MATLAB_Tools/SFMULT/sfmult_vector_k.c              |    124 +
 MATLAB_Tools/SFMULT/sfmult_xA.c                    |     70 +
 MATLAB_Tools/SFMULT/ssmult_transpose.c             |    140 +
 MATLAB_Tools/SSMULT/ChangeLog                      |     12 +
 MATLAB_Tools/SSMULT/Contents.m                     |     18 +
 MATLAB_Tools/SSMULT/README.txt                     |     92 +
 .../SSMULT}/Results/CoreDuo_Linux.png              |    Bin
 .../SSMULT}/Results/CoreDuo_MS_lcc.png             |    Bin
 .../SSMULT}/Results/CoreDuo_MS_vc2005.png          |    Bin
 .../SSMULT}/Results/Opteron64_Linux.png            |    Bin
 .../SSMULT}/Results/Opteron64_sstest2.png          |    Bin
 .../SSMULT}/Results/Pentium4M_Linux.png            |    Bin
 MATLAB_Tools/SSMULT/Results/s2.m                   |     43 +
 MATLAB_Tools/SSMULT/Results/sstest2_results.mat    |    Bin 0 -> 3468 bytes
 MATLAB_Tools/SSMULT/gpl.txt                        |    340 +
 MATLAB_Tools/SSMULT/sptranspose.c                  |     42 +
 MATLAB_Tools/SSMULT/sptranspose.m                  |     16 +
 MATLAB_Tools/SSMULT/ssmult.c                       |    188 +
 MATLAB_Tools/SSMULT/ssmult.h                       |     66 +
 MATLAB_Tools/SSMULT/ssmult.m                       |     36 +
 MATLAB_Tools/SSMULT/ssmult_demo.m                  |     18 +
 MATLAB_Tools/SSMULT/ssmult_dot.c                   |    291 +
 MATLAB_Tools/SSMULT/ssmult_install.m               |     79 +
 MATLAB_Tools/SSMULT/ssmult_mex.c                   |     44 +
 MATLAB_Tools/SSMULT/ssmult_saxpy.c                 |    555 +
 MATLAB_Tools/SSMULT/ssmult_template.c              |    421 +
 MATLAB_Tools/SSMULT/ssmult_test.m                  |    124 +
 MATLAB_Tools/SSMULT/ssmult_transpose.c             |    169 +
 MATLAB_Tools/SSMULT/ssmultsym.c                    |    150 +
 MATLAB_Tools/SSMULT/ssmultsym.m                    |     41 +
 MATLAB_Tools/SSMULT/sstest.m                       |    174 +
 MATLAB_Tools/SSMULT/sstest2.m                      |    164 +
 MATLAB_Tools/SSMULT/sstest3.m                      |    627 +
 MATLAB_Tools/SSMULT/tryit.mat                      |    Bin 0 -> 56189 bytes
 .../UFcollection}/Contents.m                       |      0
 MATLAB_Tools/UFcollection/Doc/ChangeLog            |     52 +
 MATLAB_Tools/UFcollection/Doc/License.txt          |     22 +
 .../UFcollection}/Doc/gpl.txt                      |      0
 MATLAB_Tools/UFcollection/README.txt               |    230 +
 .../UFcollection}/UFallpages.m                     |      0
 MATLAB_Tools/UFcollection/UFcollection_install.m   |     29 +
 MATLAB_Tools/UFcollection/UFexport.m               |    101 +
 .../UFcollection}/UFfull_read.m                    |      0
 MATLAB_Tools/UFcollection/UFfull_write.c           |    164 +
 MATLAB_Tools/UFcollection/UFfull_write.m           |     29 +
 .../UFcollection}/UFgplot.m                        |      0
 MATLAB_Tools/UFcollection/UFindex.m                |    405 +
 .../UFcollection}/UFint.m                          |      0
 MATLAB_Tools/UFcollection/UFlist.m                 |    360 +
 MATLAB_Tools/UFcollection/UFlists.m                |    115 +
 MATLAB_Tools/UFcollection/UFlocation.m             |     14 +
 MATLAB_Tools/UFcollection/UFpage.m                 |    703 +
 .../UFcollection}/UFpages.m                        |      0
 MATLAB_Tools/UFcollection/UFread.m                 |    449 +
 MATLAB_Tools/UFcollection/UFstats.m                |    443 +
 MATLAB_Tools/UFcollection/UFwrite.m                |    439 +
 .../UFcollection}/dsxy2figxy.m                     |      0
 MATLAB_Tools/dimacs10/Contents.m                   |      8 +
 MATLAB_Tools/dimacs10/adjnoun.graph                |    113 +
 MATLAB_Tools/dimacs10/bad1.graph                   |      9 +
 MATLAB_Tools/dimacs10/bad2.graph                   |      9 +
 MATLAB_Tools/dimacs10/bad3.graph                   |     10 +
 MATLAB_Tools/dimacs10/bad4.graph                   |      9 +
 MATLAB_Tools/dimacs10/bad5.graph                   |      9 +
 MATLAB_Tools/dimacs10/bad6.graph                   |      2 +
 MATLAB_Tools/dimacs10/bad7.graph                   |      9 +
 MATLAB_Tools/dimacs10/bad8.graph                   |      9 +
 MATLAB_Tools/dimacs10/bad9.graph                   |      9 +
 MATLAB_Tools/dimacs10/dimacs10.m                   |    654 +
 MATLAB_Tools/dimacs10/dimacs10_convert_to_graph.c  |     76 +
 MATLAB_Tools/dimacs10/dimacs10_demo.m              |     65 +
 MATLAB_Tools/dimacs10/dimacs10_install.m           |     38 +
 MATLAB_Tools/dimacs10/fig8a.graph                  |      9 +
 MATLAB_Tools/dimacs10/fig8b.graph                  |     10 +
 MATLAB_Tools/dimacs10/fig8c.graph                  |      9 +
 MATLAB_Tools/dimacs10/fig8d.graph                  |     10 +
 MATLAB_Tools/dimacs10/ilp_test.graph               |      8 +
 MATLAB_Tools/dimacs10/metis_graph_read.m           |    137 +
 MATLAB_Tools/dimacs10/metis_graph_read_mex.c       |    352 +
 MATLAB_Tools/dimacs10/metis_graph_test.m           |    125 +
 MATLAB_Tools/dimacs10/multi.graph                  |      9 +
 MATLAB_Tools/find_components/Contents.m            |     14 +
 MATLAB_Tools/find_components/find_components.m     |    249 +
 MATLAB_Tools/find_components/find_components.png   |    Bin 0 -> 4788 bytes
 .../find_components/find_components_example.m      |    131 +
 MATLAB_Tools/find_components/largest_component.m   |     29 +
 MATLAB_Tools/getversion.m                          |     15 +-
 MATLAB_Tools/gipper.m                              |     10 +-
 MATLAB_Tools/pagerankdemo.m                        |      2 +-
 MATLAB_Tools/shellgui/Contents.m                   |      2 +-
 MATLAB_Tools/shellgui/seashell.m                   |      4 +-
 MATLAB_Tools/shellgui/shellgui.m                   |      2 +-
 MATLAB_Tools/sparseinv/Contents.m                  |     15 +
 MATLAB_Tools/sparseinv/sparseinv.c                 |    167 +
 MATLAB_Tools/sparseinv/sparseinv.h                 |     38 +
 MATLAB_Tools/sparseinv/sparseinv.m                 |    122 +
 MATLAB_Tools/sparseinv/sparseinv_install.m         |     21 +
 MATLAB_Tools/sparseinv/sparseinv_mex.c             |    117 +
 MATLAB_Tools/sparseinv/sparseinv_test.m            |    149 +
 MATLAB_Tools/spok/Contents.m                       |     25 +
 MATLAB_Tools/spok/private/spok_invalid.c           |     70 +
 MATLAB_Tools/spok/spok.c                           |    131 +
 MATLAB_Tools/spok/spok.h                           |     37 +
 MATLAB_Tools/spok/spok.m                           |     35 +
 MATLAB_Tools/spok/spok_install.m                   |     21 +
 MATLAB_Tools/spok/spok_mex.c                       |    122 +
 MATLAB_Tools/spok/spok_test.m                      |     75 +
 MATLAB_Tools/spqr_rank/Contents.m                  |     43 +
 MATLAB_Tools/spqr_rank/README.txt                  |     55 +
 MATLAB_Tools/spqr_rank/SJget/Contents.m            |     31 +
 MATLAB_Tools/spqr_rank/SJget/README.txt            |     84 +
 MATLAB_Tools/spqr_rank/SJget/SJget.m               |    205 +
 MATLAB_Tools/spqr_rank/SJget/SJget_defaults.m      |     44 +
 MATLAB_Tools/spqr_rank/SJget/SJget_example.m       |     46 +
 MATLAB_Tools/spqr_rank/SJget/SJget_install.m       |     47 +
 MATLAB_Tools/spqr_rank/SJget/SJget_lookup.m        |     85 +
 MATLAB_Tools/spqr_rank/SJget/SJgrep.m              |     54 +
 MATLAB_Tools/spqr_rank/SJget/SJplot.m              |    430 +
 MATLAB_Tools/spqr_rank/SJget/SJrank.m              |    113 +
 MATLAB_Tools/spqr_rank/SJget/SJweb.m               |    136 +
 .../spqr_rank/SJget/mat/GHS_indef/laser.mat        |    Bin 0 -> 35628 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/bcspwr02.mat   |    Bin 0 -> 1305 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm01.mat   |    Bin 0 -> 745 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm03.mat   |    Bin 0 -> 1359 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm04.mat   |    Bin 0 -> 1177 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/can_144.mat    |    Bin 0 -> 2742 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/can_187.mat    |    Bin 0 -> 3516 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/can_61.mat     |    Bin 0 -> 1772 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/curtis54.mat   |    Bin 0 -> 1423 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_162.mat    |    Bin 0 -> 3234 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_193.mat    |    Bin 0 -> 4596 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_198.mat    |    Bin 0 -> 3477 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_209.mat    |    Bin 0 -> 4359 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_72.mat     |    Bin 0 -> 1546 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/fs_183_3.mat   |    Bin 0 -> 9248 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/gent113.mat    |    Bin 0 -> 2343 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl009.mat     |    Bin 0 -> 726 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl011.mat     |    Bin 0 -> 763 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/lap_25.mat     |    Bin 0 -> 925 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/lns_131.mat    |    Bin 0 -> 4035 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/lnsp_131.mat   |    Bin 0 -> 4101 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/mcca.mat       |    Bin 0 -> 17274 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/rgg010.mat     |    Bin 0 -> 745 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/west0156.mat   |    Bin 0 -> 4075 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/will199.mat    |    Bin 0 -> 3631 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/HB/will57.mat     |    Bin 0 -> 1503 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/ch3-3-b1.mat  |    Bin 0 -> 960 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/ch4-4-b1.mat  |    Bin 0 -> 1217 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/ch4-4-b2.mat  |    Bin 0 -> 1788 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/ch5-5-b1.mat  |    Bin 0 -> 1780 bytes
 .../SJget/mat/JGD_Homology/cis-n4c6-b1.mat         |    Bin 0 -> 1832 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/klein-b1.mat  |    Bin 0 -> 1089 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n2c6-b1.mat   |    Bin 0 -> 1356 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c4-b1.mat   |    Bin 0 -> 936 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c4-b2.mat   |    Bin 0 -> 1060 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c4-b3.mat   |    Bin 0 -> 1072 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c4-b4.mat   |    Bin 0 -> 940 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c5-b1.mat   |    Bin 0 -> 1090 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c5-b2.mat   |    Bin 0 -> 1722 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c5-b3.mat   |    Bin 0 -> 3088 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n3c6-b1.mat   |    Bin 0 -> 1377 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n4c5-b1.mat   |    Bin 0 -> 1355 bytes
 .../spqr_rank/SJget/mat/JGD_Homology/n4c6-b1.mat   |    Bin 0 -> 1824 bytes
 .../SJget/mat/JGD_Margulies/cat_ears_2_1.mat       |    Bin 0 -> 3423 bytes
 .../SJget/mat/JGD_Margulies/cat_ears_3_1.mat       |    Bin 0 -> 4751 bytes
 .../SJget/mat/JGD_Margulies/flower_4_1.mat         |    Bin 0 -> 3934 bytes
 .../SJget/mat/JGD_Margulies/wheel_3_1.mat          |    Bin 0 -> 2293 bytes
 .../SJget/mat/JGD_Margulies/wheel_4_1.mat          |    Bin 0 -> 2632 bytes
 .../SJget/mat/JGD_Margulies/wheel_5_1.mat          |    Bin 0 -> 2957 bytes
 .../SJget/mat/JGD_Margulies/wheel_6_1.mat          |    Bin 0 -> 3391 bytes
 .../SJget/mat/JGD_Margulies/wheel_7_1.mat          |    Bin 0 -> 3831 bytes
 .../spqr_rank/SJget/mat/JGD_Relat/rel3.mat         |    Bin 0 -> 893 bytes
 .../spqr_rank/SJget/mat/JGD_Relat/rel4.mat         |    Bin 0 -> 1112 bytes
 .../spqr_rank/SJget/mat/JGD_Relat/relat3.mat       |    Bin 0 -> 931 bytes
 .../spqr_rank/SJget/mat/JGD_Relat/relat4.mat       |    Bin 0 -> 1203 bytes
 .../spqr_rank/SJget/mat/NYPA/Maragal_1.mat         |    Bin 0 -> 1775 bytes
 .../spqr_rank/SJget/mat/Pajek/Erdos971.mat         |    Bin 0 -> 15208 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_b.mat  |    Bin 0 -> 1743 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_c.mat  |    Bin 0 -> 2159 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_a.mat  |    Bin 0 -> 2088 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_b.mat  |    Bin 0 -> 3346 bytes
 .../spqr_rank/SJget/mat/Pajek/GD06_theory.mat      |    Bin 0 -> 2519 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_a.mat  |    Bin 0 -> 1860 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_b.mat  |    Bin 0 -> 3627 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_b.mat  |    Bin 0 -> 3120 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_c.mat  |    Bin 0 -> 2454 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_d.mat  |    Bin 0 -> 7508 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_a.mat  |    Bin 0 -> 3388 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_b.mat  |    Bin 0 -> 4648 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_a.mat  |    Bin 0 -> 2432 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_b.mat  |    Bin 0 -> 3847 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_c.mat  |    Bin 0 -> 3672 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_b.mat  |    Bin 0 -> 2687 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_c.mat  |    Bin 0 -> 3708 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GlossGT.mat |    Bin 0 -> 3671 bytes
 .../spqr_rank/SJget/mat/Pajek/Ragusa16.mat         |    Bin 0 -> 1927 bytes
 .../spqr_rank/SJget/mat/Pajek/Ragusa18.mat         |    Bin 0 -> 1838 bytes
 .../spqr_rank/SJget/mat/Pajek/Sandi_authors.mat    |    Bin 0 -> 3567 bytes
 .../spqr_rank/SJget/mat/Pajek/Tina_AskCal.mat      |    Bin 0 -> 1184 bytes
 .../spqr_rank/SJget/mat/Pajek/Tina_DisCal.mat      |    Bin 0 -> 1414 bytes
 .../spqr_rank/SJget/mat/Pajek/Tina_DisCog.mat      |    Bin 0 -> 1191 bytes
 .../spqr_rank/SJget/mat/Pajek/football.mat         |    Bin 0 -> 2281 bytes
 .../spqr_rank/SJget/mat/Pothen/sphere2.mat         |    Bin 0 -> 1777 bytes
 .../spqr_rank/SJget/mat/Regtools/baart_100.mat     |    Bin 0 -> 78590 bytes
 .../spqr_rank/SJget/mat/Regtools/baart_200.mat     |    Bin 0 -> 304768 bytes
 .../spqr_rank/SJget/mat/Regtools/foxgood_100.mat   |    Bin 0 -> 71180 bytes
 .../spqr_rank/SJget/mat/Regtools/foxgood_200.mat   |    Bin 0 -> 297407 bytes
 .../spqr_rank/SJget/mat/Regtools/gravity_100.mat   |    Bin 0 -> 16389 bytes
 .../spqr_rank/SJget/mat/Regtools/gravity_1000.mat  |    Bin 0 -> 6300036 bytes
 .../spqr_rank/SJget/mat/Regtools/gravity_200.mat   |    Bin 0 -> 71567 bytes
 .../spqr_rank/SJget/mat/Regtools/heat_100.mat      |    Bin 0 -> 8975 bytes
 .../spqr_rank/SJget/mat/Regtools/heat_200.mat      |    Bin 0 -> 40859 bytes
 .../spqr_rank/SJget/mat/Regtools/i_laplace_100.mat |    Bin 0 -> 64060 bytes
 .../spqr_rank/SJget/mat/Regtools/i_laplace_200.mat |    Bin 0 -> 198000 bytes
 .../spqr_rank/SJget/mat/Regtools/parallax_100.mat  |    Bin 0 -> 7875 bytes
 .../spqr_rank/SJget/mat/Regtools/parallax_200.mat  |    Bin 0 -> 18139 bytes
 .../spqr_rank/SJget/mat/Regtools/shaw_100.mat      |    Bin 0 -> 74952 bytes
 .../spqr_rank/SJget/mat/Regtools/shaw_200.mat      |    Bin 0 -> 304473 bytes
 .../spqr_rank/SJget/mat/Regtools/tomo_100.mat      |    Bin 0 -> 13431 bytes
 .../spqr_rank/SJget/mat/Regtools/ursell_100.mat    |    Bin 0 -> 10039 bytes
 .../spqr_rank/SJget/mat/Regtools/ursell_200.mat    |    Bin 0 -> 53967 bytes
 .../spqr_rank/SJget/mat/Regtools/wing_100.mat      |    Bin 0 -> 76098 bytes
 .../spqr_rank/SJget/mat/Regtools/wing_200.mat      |    Bin 0 -> 292718 bytes
 .../spqr_rank/SJget/mat/Regtools/wing_500.mat      |    Bin 0 -> 1782625 bytes
 MATLAB_Tools/spqr_rank/SJget/mat/SJ_Index.mat      |    Bin 0 -> 67976 bytes
 .../spqr_rank/SJget/mat/Sandia/oscil_dcop_24.mat   |    Bin 0 -> 13756 bytes
 .../spqr_rank/SJget/mat/Sandia/oscil_dcop_33.mat   |    Bin 0 -> 13234 bytes
 .../spqr_rank/SJget/mat/Sandia/oscil_dcop_34.mat   |    Bin 0 -> 13242 bytes
 MATLAB_Tools/spqr_rank/demo_spqr_rank.m            |   1280 +
 MATLAB_Tools/spqr_rank/private/Contents.m          |     16 +
 MATLAB_Tools/spqr_rank/private/install_SJget.m     |     40 +
 MATLAB_Tools/spqr_rank/private/spqr_failure.m      |     17 +
 .../spqr_rank/private/spqr_rank_assign_stats.m     |    151 +
 .../spqr_rank/private/spqr_rank_deflation.m        |     95 +
 .../spqr_rank/private/spqr_rank_form_basis.m       |    235 +
 .../spqr_rank/private/spqr_rank_get_inputs.m       |    325 +
 .../spqr_rank/private/spqr_rank_order_fields.m     |     55 +
 MATLAB_Tools/spqr_rank/private/spqr_repeatable.m   |     29 +
 MATLAB_Tools/spqr_rank/private/spqr_wrapper.m      |     57 +
 .../spqr_rank/private/test_spqr_coverage.txt       |   2814 +
 MATLAB_Tools/spqr_rank/private/tol_is_default.m    |      8 +
 MATLAB_Tools/spqr_rank/quickdemo_spqr_rank.m       |    113 +
 .../spqr_rank/save_samples_demo_spqr_rank.mat      |    Bin 0 -> 21524 bytes
 MATLAB_Tools/spqr_rank/spqr_basic.m                |    253 +
 MATLAB_Tools/spqr_rank/spqr_cod.m                  |    333 +
 MATLAB_Tools/spqr_rank/spqr_explicit_basis.m       |     34 +
 MATLAB_Tools/spqr_rank/spqr_null.m                 |    127 +
 MATLAB_Tools/spqr_rank/spqr_null_mult.m            |    253 +
 MATLAB_Tools/spqr_rank/spqr_pinv.m                 |    245 +
 MATLAB_Tools/spqr_rank/spqr_rank_opts.m            |    357 +
 MATLAB_Tools/spqr_rank/spqr_rank_stats.m           |    808 +
 MATLAB_Tools/spqr_rank/spqr_ssi.m                  |    583 +
 MATLAB_Tools/spqr_rank/spqr_ssp.m                  |    322 +
 MATLAB_Tools/spqr_rank/test_spqr_coverage.m        |    589 +
 MATLAB_Tools/spqr_rank/test_spqr_rank.m            |    118 +
 MATLAB_Tools/waitmex/README.txt                    |      4 +-
 MATLAB_Tools/waitmex/waitmex.c                     |      2 +-
 MESHND/Contents.m                                  |     26 -
 MESHND/README.txt                                  |     26 -
 MESHND/meshnd.m                                    |    114 -
 MESHND/meshnd_example.m                            |    106 -
 MESHND/meshnd_quality.m                            |    159 -
 MESHND/meshsparse.m                                |    144 -
 Makefile                                           |    227 +-
 RBio/Contents.m                                    |     24 -
 RBio/Demo/Makefile                                 |     37 +
 RBio/Demo/RBdemo.c                                 |    252 +
 RBio/Demo/RBdemo.out                               |     19 +
 RBio/Doc/ChangeLog                                 |     40 +
 RBio/Doc/License.txt                               |      4 +-
 RBio/Doc/dodiff                                    |     15 -
 RBio/Include/RBio.h                                |    302 +
 RBio/Lib/Makefile                                  |     63 +
 RBio/Makefile                                      |     64 +
 RBio/RBcread_32.f                                  |    255 -
 RBio/RBcread_64.f                                  |    255 -
 RBio/RBcsplit_32.f                                 |     25 -
 RBio/RBcsplit_64.f                                 |     25 -
 RBio/RBfix.m                                       |    135 -
 RBio/RBinstall.m                                   |     29 -
 RBio/RBio/Contents.m                               |     24 +
 RBio/RBio/RBerror.c                                |     82 +
 RBio/RBio/RBfix.m                                  |    135 +
 RBio/RBio/RBinstall.m                              |     41 +
 RBio/RBio/RBmake.m                                 |     58 +
 RBio/RBio/RBraw.c                                  |    153 +
 RBio/RBio/RBraw.m                                  |     32 +
 RBio/RBio/RBread.c                                 |    141 +
 RBio/RBio/RBread.m                                 |     27 +
 RBio/RBio/RBreade.m                                |    136 +
 RBio/RBio/RBtype.c                                 |    102 +
 RBio/RBio/RBtype.m                                 |     39 +
 RBio/RBio/RBwrite.c                                |    168 +
 RBio/RBio/RBwrite.m                                |     36 +
 RBio/RBio/mywest                                   |    601 +
 RBio/{Test => RBio/private}/bcsstk01.rb            |      0
 RBio/{Test => RBio/private}/farm.rb                |      0
 RBio/{Test => RBio/private}/lap_25.pse             |      0
 RBio/{Test => RBio/private}/lap_25.rb              |      0
 RBio/RBio/private/testRB1.m                        |     77 +
 RBio/RBio/private/testRB2.m                        |     76 +
 RBio/RBio/private/testRB3.m                        |     64 +
 RBio/{Test => RBio/private}/west0479.rb            |      0
 RBio/{Test => RBio/private}/west0479.rua           |      0
 RBio/RBmake.m                                      |     30 -
 RBio/RBraw.m                                       |     32 -
 RBio/RBraw_mex_32.f                                |    214 -
 RBio/RBraw_mex_64.f                                |    214 -
 RBio/RBread.m                                      |     27 -
 RBio/RBread_32.f                                   |    464 -
 RBio/RBread_64.f                                   |    464 -
 RBio/RBread_mex_32.f                               |    239 -
 RBio/RBread_mex_64.f                               |    239 -
 RBio/RBreade.m                                     |    136 -
 RBio/RBrread_32.f                                  |    299 -
 RBio/RBrread_64.f                                  |    299 -
 RBio/RBtype.m                                      |     39 -
 RBio/RBtype_mex_32.f                               |    128 -
 RBio/RBtype_mex_64.f                               |    128 -
 RBio/RBwrite.m                                     |     36 -
 RBio/RBwrite_32.f                                  |    713 -
 RBio/RBwrite_64.f                                  |    713 -
 RBio/RBwrite_mex_32.f                              |    324 -
 RBio/RBwrite_mex_64.f                              |    324 -
 RBio/README.txt                                    |    113 +-
 RBio/Source/RBio.c                                 |   2923 +
 RBio/Tcov/Makefile                                 |     94 +
 RBio/Tcov/RBtest.c                                 |    285 +
 RBio/Tcov/README.txt                               |      5 +
 RBio/Tcov/mangled/1.rb                             |      5 +
 RBio/Tcov/mangled/10.rb                            |      7 +
 RBio/Tcov/mangled/11.rb                            |      5 +
 RBio/Tcov/mangled/12.rb                            |      7 +
 RBio/Tcov/mangled/13.rb                            |      7 +
 RBio/Tcov/mangled/14.rb                            |      7 +
 RBio/Tcov/mangled/15.rb                            |      7 +
 RBio/Tcov/mangled/2.rb                             |      7 +
 RBio/Tcov/mangled/3.rb                             |      7 +
 RBio/Tcov/mangled/4.rb                             |      6 +
 RBio/Tcov/mangled/5.rb                             |      7 +
 RBio/Tcov/mangled/6.rb                             |      7 +
 RBio/Tcov/mangled/7.rb                             |      7 +
 RBio/Tcov/mangled/8.rb                             |      7 +
 RBio/Tcov/mangled/9.rb                             |      7 +
 RBio/Tcov/matrices/Tina_DisCog.tar.gz              |    Bin 0 -> 793 bytes
 RBio/Tcov/matrices/dwg961a.tar.gz                  |    Bin 0 -> 13808 bytes
 RBio/Tcov/matrices/m4.rb                           |      7 +
 RBio/Tcov/matrices/m4b.rb                          |      8 +
 RBio/Tcov/matrices/mhd1280a.tar.gz                 |    Bin 0 -> 399589 bytes
 RBio/Tcov/matrices/mhd1280b.tar.gz                 |    Bin 0 -> 80089 bytes
 RBio/Tcov/matrices/plskz362.tar.gz                 |    Bin 0 -> 10839 bytes
 RBio/Tcov/matrices/qc324.tar.gz                    |    Bin 0 -> 28024 bytes
 RBio/Tcov/matrices/s4.rb                           |      7 +
 RBio/Tcov/matrices/west0067.tar.gz                 |    Bin 0 -> 1875 bytes
 RBio/Test/testRB1.m                                |     65 -
 RBio/Test/testRB2.m                                |     60 -
 README.txt                                         |    160 +-
 SPQR/Demo/Makefile                                 |    262 +
 SPQR/Demo/README.txt                               |     37 +
 SPQR/Demo/demo_colamd.sh                           |      1 +
 SPQR/Demo/demo_colamd2.sh                          |      1 +
 SPQR/Demo/demo_colamd3.sh                          |      1 +
 SPQR/Demo/demo_metis.sh                            |      1 +
 SPQR/Demo/demo_metis2.sh                           |      1 +
 SPQR/Demo/demo_metis3.sh                           |      1 +
 SPQR/Demo/go4.m                                    |    225 +
 SPQR/Demo/go5.m                                    |    254 +
 SPQR/Demo/qrdemo.cpp                               |    173 +
 SPQR/Demo/qrdemo.m                                 |    141 +
 SPQR/Demo/qrdemo_gpu.cpp                           |    144 +
 SPQR/Demo/qrdemo_gpu2.cpp                          |    106 +
 SPQR/Demo/qrdemo_gpu3.cpp                          |    106 +
 SPQR/Demo/qrdemo_out.txt                           |    146 +
 SPQR/Demo/qrdemoc.c                                |     80 +
 SPQR/Demo/qrdemoc_out.txt                          |     56 +
 SPQR/Demo/qrsimple.cpp                             |     45 +
 SPQR/Demo/qrsimplec.c                              |     45 +
 SPQR/Demo/spqr_gpu.m                               |     81 +
 SPQR/Demo/spqr_gpu2.m                              |     76 +
 SPQR/Demo/spqr_gpu3.m                              |     76 +
 SPQR/Doc/ChangeLog                                 |     85 +
 SPQR/Doc/Makefile                                  |     11 +
 SPQR/Doc/README.txt                                |     34 +
 SPQR/Doc/algo_spqr.pdf                             |    Bin 0 -> 109347 bytes
 {SSMULT => SPQR/Doc}/gpl.txt                       |      0
 SPQR/Doc/qrgpu_paper.pdf                           |    Bin 0 -> 783763 bytes
 SPQR/Doc/spqr.pdf                                  |    Bin 0 -> 287647 bytes
 SPQR/Doc/spqr_user_guide.bib                       |    180 +
 SPQR/Doc/spqr_user_guide.pdf                       |    Bin 0 -> 226386 bytes
 SPQR/Doc/spqr_user_guide.tex                       |    952 +
 SPQR/Include/SuiteSparseQR.hpp                     |    644 +
 SPQR/Include/SuiteSparseQR_C.h                     |    220 +
 SPQR/Include/SuiteSparseQR_definitions.h           |     69 +
 SPQR/Include/spqr.hpp                              |   1115 +
 SPQR/Include/spqrgpu.hpp                           |     81 +
 SPQR/Lib/Makefile                                  |    250 +
 SPQR/MATLAB/Contents.m                             |     16 +
 SPQR/MATLAB/spqr.cpp                               |    488 +
 SPQR/MATLAB/spqr.m                                 |    127 +
 SPQR/MATLAB/spqr_demo.m                            |    188 +
 SPQR/MATLAB/spqr_install.m                         |     41 +
 SPQR/MATLAB/spqr_make.m                            |    485 +
 SPQR/MATLAB/spqr_mx.cpp                            |   1103 +
 SPQR/MATLAB/spqr_mx.hpp                            |    156 +
 SPQR/MATLAB/spqr_mx_error.c                        |     68 +
 SPQR/MATLAB/spqr_qmult.cpp                         |    288 +
 SPQR/MATLAB/spqr_qmult.m                           |     24 +
 SPQR/MATLAB/spqr_singletons.cpp                    |    144 +
 SPQR/MATLAB/spqr_singletons.m                      |     37 +
 SPQR/MATLAB/spqr_solve.cpp                         |    299 +
 SPQR/MATLAB/spqr_solve.m                           |     28 +
 SPQR/Makefile                                      |     65 +
 SPQR/Matrix/Franz6_id1959_aug.mtx                  |  48477 +++++
 SPQR/Matrix/GD01_b.mtx                             |     61 +
 SPQR/Matrix/GD06_theory.mtx                        |    215 +
 SPQR/Matrix/GD98_a.mtx                             |     74 +
 SPQR/Matrix/Groebner_id2003_aug.mtx                | 173678 ++++++++++++++++++
 SPQR/Matrix/LFAT5.mtx                              |     48 +
 SPQR/Matrix/README.txt                             |      3 +
 SPQR/Matrix/Ragusa16.mtx                           |    103 +
 SPQR/Matrix/Tina_AskCal.mtx                        |     53 +
 SPQR/Matrix/Tina_AskCal_perm.mtx                   |     34 +
 SPQR/Matrix/a0.mtx                                 |      5 +
 SPQR/Matrix/a04.mtx                                |      5 +
 SPQR/Matrix/a1.mtx                                 |     17 +
 SPQR/Matrix/a2.mtx                                 |     11 +
 SPQR/Matrix/a4.mtx                                 |     14 +
 SPQR/Matrix/arrow.mtx                              | 139504 ++++++++++++++
 SPQR/Matrix/ash219.mtx                             |    452 +
 SPQR/Matrix/b1_ss.mtx                              |     29 +
 SPQR/Matrix/bcspwr01.mtx                           |     99 +
 SPQR/Matrix/bfwa62.mtx                             |    464 +
 SPQR/Matrix/c2.mtx                                 |     12 +
 SPQR/Matrix/c32.mtx                                |     16 +
 SPQR/Matrix/lfat5b.mtx                             |     70 +
 SPQR/Matrix/lp_e226.mtx                            |   2834 +
 SPQR/Matrix/lp_e226_transposed.mtx                 |   2770 +
 SPQR/Matrix/lp_share1b.mtx                         |   1245 +
 SPQR/Matrix/lpi_galenet.mtx                        |     58 +
 SPQR/Matrix/lpi_itest6.mtx                         |     79 +
 SPQR/Matrix/pwr01b.mtx                             |    136 +
 SPQR/Matrix/r2.mtx                                 |     12 +
 SPQR/Matrix/s32.mtx                                |     15 +
 SPQR/Matrix/west0067.mtx                           |    308 +
 SPQR/Matrix/young1c.mtx                            |   4115 +
 SPQR/README.txt                                    |     62 +
 SPQR/SPQRGPU/spqrgpu_buildAssemblyMaps.cpp         |    191 +
 SPQR/SPQRGPU/spqrgpu_computeFrontStaging.cpp       |    231 +
 SPQR/SPQRGPU/spqrgpu_kernel.cpp                    |    737 +
 SPQR/Source/SuiteSparseQR.cpp                      |   1433 +
 SPQR/Source/SuiteSparseQR_C.cpp                    |    367 +
 SPQR/Source/SuiteSparseQR_expert.cpp               |   1736 +
 SPQR/Source/SuiteSparseQR_qmult.cpp                |    730 +
 SPQR/Source/spqr_1colamd.cpp                       |    811 +
 SPQR/Source/spqr_1factor.cpp                       |    790 +
 SPQR/Source/spqr_1fixed.cpp                        |    358 +
 SPQR/Source/spqr_analyze.cpp                       |   1788 +
 SPQR/Source/spqr_append.cpp                        |    165 +
 SPQR/Source/spqr_assemble.cpp                      |    519 +
 SPQR/Source/spqr_cpack.cpp                         |    140 +
 SPQR/Source/spqr_csize.cpp                         |     29 +
 SPQR/Source/spqr_cumsum.cpp                        |     42 +
 SPQR/Source/spqr_debug.cpp                         |    292 +
 SPQR/Source/spqr_factorize.cpp                     |    778 +
 SPQR/Source/spqr_fcsize.cpp                        |     25 +
 SPQR/Source/spqr_freefac.cpp                       |     68 +
 SPQR/Source/spqr_freenum.cpp                       |     84 +
 SPQR/Source/spqr_freesym.cpp                       |     87 +
 SPQR/Source/spqr_front.cpp                         |    655 +
 SPQR/Source/spqr_fsize.cpp                         |    130 +
 SPQR/Source/spqr_happly.cpp                        |    443 +
 SPQR/Source/spqr_happly_work.cpp                   |     96 +
 SPQR/Source/spqr_hpinv.cpp                         |    189 +
 SPQR/Source/spqr_kernel.cpp                        |    349 +
 SPQR/Source/spqr_larftb.cpp                        |    237 +
 SPQR/Source/spqr_maxcolnorm.cpp                    |    101 +
 SPQR/Source/spqr_panel.cpp                         |    192 +
 SPQR/Source/spqr_parallel.cpp                      |    114 +
 SPQR/Source/spqr_rconvert.cpp                      |    398 +
 SPQR/Source/spqr_rcount.cpp                        |    266 +
 SPQR/Source/spqr_rhpack.cpp                        |    181 +
 SPQR/Source/spqr_rmap.cpp                          |    121 +
 SPQR/Source/spqr_rsolve.cpp                        |    420 +
 SPQR/Source/spqr_shift.cpp                         |     28 +
 SPQR/Source/spqr_stranspose1.cpp                   |    160 +
 SPQR/Source/spqr_stranspose2.cpp                   |    106 +
 SPQR/Source/spqr_tol.cpp                           |     42 +
 SPQR/Source/spqr_trapezoidal.cpp                   |    277 +
 SPQR/Source/spqr_type.cpp                          |     18 +
 SPQR/Tcov/Makefile                                 |    529 +
 SPQR/Tcov/README.txt                               |     30 +
 SPQR/Tcov/cov                                      |     37 +
 SPQR/Tcov/matrix1.txt                              |      1 +
 SPQR/Tcov/matrixlist.txt                           |     26 +
 SPQR/Tcov/qrtest.cpp                               |   2855 +
 SPQR/Tcov/qrtestc.c                                |    113 +
 SSMULT/Contents.m                                  |     18 -
 SSMULT/README.txt                                  |     87 -
 SSMULT/ssmult.c                                    |    487 -
 SSMULT/ssmult.h                                    |     24 -
 SSMULT/ssmult.m                                    |     20 -
 SSMULT/ssmult_demo.m                               |     18 -
 SSMULT/ssmult_install.m                            |     74 -
 SSMULT/ssmult_template.c                           |    419 -
 SSMULT/ssmult_test.m                               |    115 -
 SSMULT/ssmult_unsorted.m                           |     37 -
 SSMULT/ssmultsym.c                                 |    160 -
 SSMULT/ssmultsym.m                                 |     33 -
 SSMULT/sstest.m                                    |    163 -
 SSMULT/sstest2.m                                   |    215 -
 SuiteSparse_GPURuntime/Doc/ChangeLog               |      3 +
 {SSMULT => SuiteSparse_GPURuntime/Doc}/gpl.txt     |      0
 .../Include/SuiteSparseGPU_Runtime.hpp             |     32 +
 .../Include/SuiteSparseGPU_Workspace.hpp           |    110 +
 .../Include/SuiteSparseGPU_debug.hpp               |     43 +
 .../Include/SuiteSparseGPU_macros.hpp              |     15 +
 .../Include/SuiteSparseGPU_workspace_macros.hpp    |     18 +
 SuiteSparse_GPURuntime/Lib/Makefile                |     51 +
 SuiteSparse_GPURuntime/Makefile                    |     40 +
 SuiteSparse_GPURuntime/README.txt                  |     28 +
 .../Source/SuiteSparseGPU_Workspace.cpp            |    153 +
 .../SuiteSparseGPU_Workspace_cpuAllocators.cpp     |    129 +
 .../SuiteSparseGPU_Workspace_gpuAllocators.cpp     |     93 +
 .../Source/SuiteSparseGPU_Workspace_transfer.cpp   |     60 +
 SuiteSparse_config/Makefile                        |     48 +
 SuiteSparse_config/README.txt                      |     71 +
 SuiteSparse_config/SuiteSparse_config.c            |    531 +
 SuiteSparse_config/SuiteSparse_config.h            |    247 +
 SuiteSparse_config/SuiteSparse_config.mk           |    452 +
 SuiteSparse_config/SuiteSparse_config_GPU_debug.mk |    452 +
 SuiteSparse_config/SuiteSparse_config_GPU_gcc.mk   |    452 +
 SuiteSparse_config/SuiteSparse_config_GPU_icc.mk   |    452 +
 SuiteSparse_config/SuiteSparse_config_GPU_icc10.mk |    453 +
 SuiteSparse_config/SuiteSparse_config_Mac.mk       |    452 +
 SuiteSparse_config/SuiteSparse_config_linux.mk     |    452 +
 SuiteSparse_config/xerbla/Makefile                 |     33 +
 {UFconfig => SuiteSparse_config}/xerbla/xerbla.c   |      0
 {UFconfig => SuiteSparse_config}/xerbla/xerbla.f   |      0
 {UFconfig => SuiteSparse_config}/xerbla/xerbla.h   |      0
 SuiteSparse_demo.m                                 |    147 +-
 SuiteSparse_install.m                              |    331 +-
 SuiteSparse_test.m                                 |    142 +-
 UFcollection/Doc/ChangeLog                         |     20 -
 UFcollection/Doc/License.txt                       |     22 -
 UFcollection/README.txt                            |    176 -
 UFcollection/UFcollection_install.m                |     29 -
 UFcollection/UFexport.m                            |     78 -
 UFcollection/UFfull_write.c                        |    164 -
 UFcollection/UFfull_write.m                        |     29 -
 UFcollection/UFindex.m                             |    396 -
 UFcollection/UFlist.m                              |    339 -
 UFcollection/UFlists.m                             |    114 -
 UFcollection/UFlocation.m                          |     17 -
 UFcollection/UFpage.m                              |    604 -
 UFcollection/UFread.m                              |    449 -
 UFcollection/UFstats.m                             |    610 -
 UFcollection/UFwrite.m                             |    444 -
 UFconfig/README.txt                                |     34 -
 UFconfig/UFconfig.h                                |    117 -
 UFconfig/UFconfig.mk                               |    310 -
 UFconfig/xerbla/Makefile                           |     31 -
 UFget/Contents.m                                   |     18 +
 UFget/Makefile                                     |      7 +
 UFget/README.txt                                   |    124 +
 UFget/UFget.m                                      |    198 +
 UFget/UFget_defaults.m                             |     71 +
 UFget/UFget_example.m                              |     30 +
 UFget/UFget_lookup.m                               |     77 +
 UFget/UFgrep.m                                     |     53 +
 UFget/UFgui.jar                                    |    Bin 0 -> 40421 bytes
 UFget/UFgui.java                                   |   2589 +
 UFget/UFhelp.html                                  |    545 +
 UFget/UFkinds.m                                    |     71 +
 UFget/UFsettings.txt                               |      6 +
 UFget/UFsvd.m                                      |     54 +
 UFget/UFweb.m                                      |    124 +
 UFget/mat/UF_Index.mat                             |    Bin 0 -> 117643 bytes
 UFget/matrices/UFstats.csv                         |   2652 +
 UMFPACK/Demo/Makefile                              |     89 +-
 UMFPACK/Demo/dodefault                             |      4 +-
 UMFPACK/Demo/dospd                                 |      4 +-
 UMFPACK/Demo/readhb.f                              |      6 +-
 UMFPACK/Demo/readhb_nozeros.f                      |      6 +-
 UMFPACK/Demo/readhb_size.f                         |      6 +-
 UMFPACK/Demo/simple_compile                        |      3 +-
 UMFPACK/Demo/umf4.c                                |     49 +-
 UMFPACK/Demo/umf4.out                              |    593 +-
 UMFPACK/Demo/umf4_f77wrapper.c                     |     27 +-
 UMFPACK/Demo/umf4_f77zwrapper.c                    |     16 +-
 UMFPACK/Demo/umf4hb.f                              |      6 +-
 UMFPACK/Demo/umf4hb.out                            |     85 +-
 UMFPACK/Demo/umf4hb64.f                            |      6 +-
 UMFPACK/Demo/umf4hb64.out                          |     89 +-
 UMFPACK/Demo/umf4zhb.f                             |      6 +-
 UMFPACK/Demo/umf4zhb.out                           |     74 +-
 UMFPACK/Demo/umfpack_di_demo.c                     |      8 +-
 UMFPACK/Demo/umfpack_di_demo.out                   |    125 +-
 UMFPACK/Demo/umfpack_dl_demo.c                     |     70 +-
 UMFPACK/Demo/umfpack_dl_demo.out                   |    139 +-
 UMFPACK/Demo/umfpack_dl_demo.sed                   |      2 +-
 UMFPACK/Demo/umfpack_simple.c                      |      6 +-
 UMFPACK/Demo/umfpack_xx_demo.c                     |     14 +-
 UMFPACK/Demo/umfpack_zi_demo.c                     |      8 +-
 UMFPACK/Demo/umfpack_zi_demo.out                   |    125 +-
 UMFPACK/Demo/umfpack_zl_demo.c                     |     70 +-
 UMFPACK/Demo/umfpack_zl_demo.out                   |    141 +-
 UMFPACK/Demo/umfpack_zl_demo.sed                   |      2 +-
 UMFPACK/Doc/ChangeLog                              |     66 +
 UMFPACK/Doc/License                                |      4 +-
 UMFPACK/Doc/Makefile                               |      2 +-
 UMFPACK/Doc/QuickStart.pdf                         |    Bin 134109 -> 214188 bytes
 UMFPACK/Doc/QuickStart.tex                         |     88 +-
 UMFPACK/Doc/UserGuide.bib                          |     39 -
 UMFPACK/Doc/UserGuide.pdf                          |    Bin 401310 -> 496139 bytes
 UMFPACK/Doc/UserGuide.stex                         |    395 +-
 UMFPACK/Include/umfpack.h                          |     70 +-
 UMFPACK/Include/umfpack_col_to_triplet.h           |     29 +-
 UMFPACK/Include/umfpack_defaults.h                 |      9 +-
 UMFPACK/Include/umfpack_free_numeric.h             |      9 +-
 UMFPACK/Include/umfpack_free_symbolic.h            |      9 +-
 UMFPACK/Include/umfpack_get_determinant.h          |     16 +-
 UMFPACK/Include/umfpack_get_lunz.h                 |     37 +-
 UMFPACK/Include/umfpack_get_numeric.h              |     47 +-
 UMFPACK/Include/umfpack_get_symbolic.h             |     87 +-
 UMFPACK/Include/umfpack_global.h                   |     18 +-
 UMFPACK/Include/umfpack_load_numeric.h             |     17 +-
 UMFPACK/Include/umfpack_load_symbolic.h            |     17 +-
 UMFPACK/Include/umfpack_numeric.h                  |     31 +-
 UMFPACK/Include/umfpack_qsymbolic.h                |    129 +-
 UMFPACK/Include/umfpack_report_control.h           |      9 +-
 UMFPACK/Include/umfpack_report_info.h              |      9 +-
 UMFPACK/Include/umfpack_report_matrix.h            |     37 +-
 UMFPACK/Include/umfpack_report_numeric.h           |     17 +-
 UMFPACK/Include/umfpack_report_perm.h              |     25 +-
 UMFPACK/Include/umfpack_report_status.h            |     17 +-
 UMFPACK/Include/umfpack_report_symbolic.h          |     17 +-
 UMFPACK/Include/umfpack_report_triplet.h           |     37 +-
 UMFPACK/Include/umfpack_report_vector.h            |     21 +-
 UMFPACK/Include/umfpack_save_numeric.h             |     17 +-
 UMFPACK/Include/umfpack_save_symbolic.h            |     17 +-
 UMFPACK/Include/umfpack_scale.h                    |     13 +-
 UMFPACK/Include/umfpack_solve.h                    |     29 +-
 UMFPACK/Include/umfpack_symbolic.h                 |    114 +-
 UMFPACK/Include/umfpack_tictoc.h                   |     29 +-
 UMFPACK/Include/umfpack_timer.h                    |     19 +-
 UMFPACK/Include/umfpack_transpose.h                |     51 +-
 UMFPACK/Include/umfpack_triplet_to_col.h           |     49 +-
 UMFPACK/Include/umfpack_wsolve.h                   |     33 +-
 UMFPACK/Lib/GNUmakefile                            |     53 +-
 UMFPACK/Lib/Makefile                               |     31 +-
 UMFPACK/Lib/libumfpack.def                         |      4 +
 UMFPACK/MATLAB/Contents.m                          |      2 +-
 UMFPACK/MATLAB/GNUmakefile                         |    240 -
 UMFPACK/MATLAB/Makefile                            |    437 +-
 UMFPACK/MATLAB/lu_normest.m                        |      7 +-
 UMFPACK/MATLAB/luflop.m                            |      2 +-
 UMFPACK/MATLAB/luflopmex.c                         |     22 +-
 UMFPACK/MATLAB/umfpack2.m                          |     21 +-
 UMFPACK/MATLAB/umfpack_btf.m                       |     15 +-
 UMFPACK/MATLAB/umfpack_demo.m                      |     12 +-
 UMFPACK/MATLAB/umfpack_demo.m.out                  |     18 +-
 UMFPACK/MATLAB/umfpack_details.m                   |     10 +-
 UMFPACK/MATLAB/umfpack_make.m                      |    325 +-
 UMFPACK/MATLAB/umfpack_report.m                    |    312 +-
 UMFPACK/MATLAB/umfpack_simple.m                    |      4 +-
 UMFPACK/MATLAB/umfpack_solve.m                     |      9 +-
 UMFPACK/MATLAB/umfpack_test.m                      |     43 +-
 UMFPACK/MATLAB/umfpack_test2.m                     |     52 +
 UMFPACK/MATLAB/umfpackmex.c                        |   1135 +-
 UMFPACK/Makefile                                   |     51 +-
 UMFPACK/README.txt                                 |     64 +-
 UMFPACK/Source/cholmod_blas.h                      |    150 +-
 UMFPACK/Source/umf_2by2.c                          |    860 -
 UMFPACK/Source/umf_2by2.h                          |     36 -
 UMFPACK/Source/umf_analyze.c                       |     13 +-
 UMFPACK/Source/umf_analyze.h                       |      5 +-
 UMFPACK/Source/umf_apply_order.c                   |      5 +-
 UMFPACK/Source/umf_apply_order.h                   |      5 +-
 UMFPACK/Source/umf_assemble.c                      |      9 +-
 UMFPACK/Source/umf_assemble.h                      |      5 +-
 UMFPACK/Source/umf_blas3_update.c                  |      5 +-
 UMFPACK/Source/umf_blas3_update.h                  |      5 +-
 UMFPACK/Source/umf_build_tuples.c                  |      5 +-
 UMFPACK/Source/umf_build_tuples.h                  |      5 +-
 UMFPACK/Source/umf_cholmod.c                       |    233 +
 UMFPACK/Source/umf_cholmod.h                       |     37 +
 UMFPACK/Source/umf_colamd.c                        |     15 +-
 UMFPACK/Source/umf_colamd.h                        |      9 +-
 UMFPACK/Source/umf_config.h                        |     63 +-
 UMFPACK/Source/umf_create_element.c                |      5 +-
 UMFPACK/Source/umf_create_element.h                |      5 +-
 UMFPACK/Source/umf_dump.c                          |     47 +-
 UMFPACK/Source/umf_dump.h                          |      9 +-
 UMFPACK/Source/umf_extend_front.c                  |      5 +-
 UMFPACK/Source/umf_extend_front.h                  |      5 +-
 UMFPACK/Source/umf_free.c                          |      8 +-
 UMFPACK/Source/umf_free.h                          |      5 +-
 UMFPACK/Source/umf_fsize.c                         |      5 +-
 UMFPACK/Source/umf_fsize.h                         |      5 +-
 UMFPACK/Source/umf_garbage_collection.c            |      5 +-
 UMFPACK/Source/umf_garbage_collection.h            |      5 +-
 UMFPACK/Source/umf_get_memory.c                    |      5 +-
 UMFPACK/Source/umf_get_memory.h                    |      5 +-
 UMFPACK/Source/umf_grow_front.c                    |      5 +-
 UMFPACK/Source/umf_grow_front.h                    |      5 +-
 UMFPACK/Source/umf_init_front.c                    |      7 +-
 UMFPACK/Source/umf_init_front.h                    |      5 +-
 UMFPACK/Source/umf_internal.h                      |     25 +-
 UMFPACK/Source/umf_is_permutation.c                |      5 +-
 UMFPACK/Source/umf_is_permutation.h                |      5 +-
 UMFPACK/Source/umf_kernel.c                        |      5 +-
 UMFPACK/Source/umf_kernel.h                        |      5 +-
 UMFPACK/Source/umf_kernel_init.c                   |     24 +-
 UMFPACK/Source/umf_kernel_init.h                   |      5 +-
 UMFPACK/Source/umf_kernel_wrapup.c                 |      5 +-
 UMFPACK/Source/umf_kernel_wrapup.h                 |      5 +-
 UMFPACK/Source/umf_local_search.c                  |     15 +-
 UMFPACK/Source/umf_local_search.h                  |      5 +-
 UMFPACK/Source/umf_lsolve.c                        |      5 +-
 UMFPACK/Source/umf_lsolve.h                        |      5 +-
 UMFPACK/Source/umf_ltsolve.c                       |      5 +-
 UMFPACK/Source/umf_ltsolve.h                       |      5 +-
 UMFPACK/Source/umf_malloc.c                        |     20 +-
 UMFPACK/Source/umf_malloc.h                        |      5 +-
 UMFPACK/Source/umf_mem_alloc_element.c             |      5 +-
 UMFPACK/Source/umf_mem_alloc_element.h             |      5 +-
 UMFPACK/Source/umf_mem_alloc_head_block.c          |      5 +-
 UMFPACK/Source/umf_mem_alloc_head_block.h          |      5 +-
 UMFPACK/Source/umf_mem_alloc_tail_block.c          |      5 +-
 UMFPACK/Source/umf_mem_alloc_tail_block.h          |      5 +-
 UMFPACK/Source/umf_mem_free_tail_block.c           |      5 +-
 UMFPACK/Source/umf_mem_free_tail_block.h           |      5 +-
 UMFPACK/Source/umf_mem_init_memoryspace.c          |      5 +-
 UMFPACK/Source/umf_mem_init_memoryspace.h          |      5 +-
 UMFPACK/Source/umf_multicompile.c                  |      5 +-
 UMFPACK/Source/umf_realloc.c                       |      8 +-
 UMFPACK/Source/umf_realloc.h                       |      5 +-
 UMFPACK/Source/umf_report_perm.c                   |      5 +-
 UMFPACK/Source/umf_report_perm.h                   |      5 +-
 UMFPACK/Source/umf_report_vector.c                 |      5 +-
 UMFPACK/Source/umf_report_vector.h                 |      5 +-
 UMFPACK/Source/umf_row_search.c                    |      5 +-
 UMFPACK/Source/umf_row_search.h                    |      5 +-
 UMFPACK/Source/umf_scale.c                         |      5 +-
 UMFPACK/Source/umf_scale.h                         |      5 +-
 UMFPACK/Source/umf_scale_column.c                  |      5 +-
 UMFPACK/Source/umf_scale_column.h                  |      5 +-
 UMFPACK/Source/umf_set_stats.c                     |      5 +-
 UMFPACK/Source/umf_set_stats.h                     |      5 +-
 UMFPACK/Source/umf_singletons.c                    |     29 +-
 UMFPACK/Source/umf_singletons.h                    |      6 +-
 UMFPACK/Source/umf_solve.c                         |      5 +-
 UMFPACK/Source/umf_solve.h                         |      5 +-
 UMFPACK/Source/umf_start_front.c                   |      5 +-
 UMFPACK/Source/umf_start_front.h                   |      5 +-
 UMFPACK/Source/umf_store_lu.c                      |      5 +-
 UMFPACK/Source/umf_store_lu.h                      |      5 +-
 UMFPACK/Source/umf_symbolic_usage.c                |      5 +-
 UMFPACK/Source/umf_symbolic_usage.h                |      5 +-
 UMFPACK/Source/umf_transpose.c                     |      5 +-
 UMFPACK/Source/umf_transpose.h                     |      5 +-
 UMFPACK/Source/umf_triplet.c                       |      5 +-
 UMFPACK/Source/umf_triplet.h                       |      5 +-
 UMFPACK/Source/umf_tuple_lengths.c                 |      5 +-
 UMFPACK/Source/umf_tuple_lengths.h                 |      5 +-
 UMFPACK/Source/umf_usolve.c                        |      5 +-
 UMFPACK/Source/umf_usolve.h                        |      5 +-
 UMFPACK/Source/umf_utsolve.c                       |      5 +-
 UMFPACK/Source/umf_utsolve.h                       |      5 +-
 UMFPACK/Source/umf_valid_numeric.c                 |      5 +-
 UMFPACK/Source/umf_valid_numeric.h                 |      5 +-
 UMFPACK/Source/umf_valid_symbolic.c                |      5 +-
 UMFPACK/Source/umf_valid_symbolic.h                |      5 +-
 UMFPACK/Source/umf_version.h                       |     35 +-
 UMFPACK/Source/umfpack_col_to_triplet.c            |      5 +-
 UMFPACK/Source/umfpack_defaults.c                  |     52 +-
 UMFPACK/Source/umfpack_free_numeric.c              |      5 +-
 UMFPACK/Source/umfpack_free_symbolic.c             |      5 +-
 UMFPACK/Source/umfpack_get_determinant.c           |      8 +-
 UMFPACK/Source/umfpack_get_lunz.c                  |      5 +-
 UMFPACK/Source/umfpack_get_numeric.c               |      5 +-
 UMFPACK/Source/umfpack_get_symbolic.c              |      5 +-
 UMFPACK/Source/umfpack_global.c                    |    126 +-
 UMFPACK/Source/umfpack_load_numeric.c              |      5 +-
 UMFPACK/Source/umfpack_load_symbolic.c             |      5 +-
 UMFPACK/Source/umfpack_numeric.c                   |     10 +-
 UMFPACK/Source/umfpack_qsymbolic.c                 |   1113 +-
 UMFPACK/Source/umfpack_report_control.c            |    127 +-
 UMFPACK/Source/umfpack_report_info.c               |    177 +-
 UMFPACK/Source/umfpack_report_matrix.c             |     31 +-
 UMFPACK/Source/umfpack_report_numeric.c            |      5 +-
 UMFPACK/Source/umfpack_report_perm.c               |      5 +-
 UMFPACK/Source/umfpack_report_status.c             |     12 +-
 UMFPACK/Source/umfpack_report_symbolic.c           |     66 +-
 UMFPACK/Source/umfpack_report_triplet.c            |      5 +-
 UMFPACK/Source/umfpack_report_vector.c             |      5 +-
 UMFPACK/Source/umfpack_save_numeric.c              |      9 +-
 UMFPACK/Source/umfpack_save_symbolic.c             |      6 +-
 UMFPACK/Source/umfpack_scale.c                     |      5 +-
 UMFPACK/Source/umfpack_solve.c                     |      5 +-
 UMFPACK/Source/umfpack_symbolic.c                  |     10 +-
 UMFPACK/Source/umfpack_tictoc.c                    |     96 +-
 UMFPACK/Source/umfpack_timer.c                     |     70 +-
 UMFPACK/Source/umfpack_transpose.c                 |      5 +-
 UMFPACK/Source/umfpack_triplet_to_col.c            |      5 +-
 UMFPACK/Tcov/AMD_Demo_Makefile                     |     17 +-
 UMFPACK/Tcov/DO                                    |     65 +-
 UMFPACK/Tcov/DO.all                                |     54 +
 UMFPACK/Tcov/DO.linux                              |     55 -
 UMFPACK/Tcov/DO.linux.Jan24                        |    465 -
 UMFPACK/Tcov/DO.linux.out                          |    475 -
 UMFPACK/Tcov/DO.linux.out2                         |    428 -
 UMFPACK/Tcov/DO.linux2                             |    108 -
 UMFPACK/Tcov/DO.solaris                            |     47 -
 UMFPACK/Tcov/DO.solaris.out.Jan24                  |      0
 UMFPACK/Tcov/DO2                                   |      9 -
 UMFPACK/Tcov/DO678                                 |     17 -
 UMFPACK/Tcov/DOsol                                 |      6 -
 UMFPACK/Tcov/DOsol2                                |     57 -
 UMFPACK/Tcov/Demo_Makefile                         |     47 +-
 UMFPACK/Tcov/GNUmakefile.di                        |     12 +-
 UMFPACK/Tcov/GNUmakefile.dl                        |     13 +-
 UMFPACK/Tcov/GNUmakefile.zi                        |     13 +-
 UMFPACK/Tcov/GNUmakefile.zl                        |     13 +-
 UMFPACK/Tcov/Make.1                                |     10 +-
 UMFPACK/Tcov/Make.1g                               |     18 -
 UMFPACK/Tcov/Make.1i                               |     21 -
 UMFPACK/Tcov/Make.1n                               |     21 -
 UMFPACK/Tcov/Make.2                                |     10 +-
 UMFPACK/Tcov/Make.2g                               |     18 -
 UMFPACK/Tcov/Make.2i                               |     20 -
 UMFPACK/Tcov/Make.2n                               |     20 -
 UMFPACK/Tcov/Make.3                                |     12 +-
 UMFPACK/Tcov/Make.3g                               |     18 -
 UMFPACK/Tcov/Make.3i                               |     20 -
 UMFPACK/Tcov/Make.3n                               |     20 -
 UMFPACK/Tcov/Make.4                                |     11 +-
 UMFPACK/Tcov/Make.4g                               |     18 -
 UMFPACK/Tcov/Make.4i                               |     20 -
 UMFPACK/Tcov/Make.4n                               |     20 -
 UMFPACK/Tcov/Make.5                                |     10 +-
 UMFPACK/Tcov/Make.6                                |     12 +-
 UMFPACK/Tcov/Make.7                                |     10 +-
 UMFPACK/Tcov/Make.8                                |     10 +-
 UMFPACK/Tcov/Make.n1                               |     18 -
 UMFPACK/Tcov/Make.n2                               |     18 -
 UMFPACK/Tcov/Make.n3                               |     18 -
 UMFPACK/Tcov/Make.n4                               |     18 -
 UMFPACK/Tcov/Make.s1                               |     18 -
 UMFPACK/Tcov/Make.s2                               |     18 -
 UMFPACK/Tcov/Make.s3                               |     18 -
 UMFPACK/Tcov/Make.s4                               |     18 -
 UMFPACK/Tcov/Make.s5                               |     18 -
 UMFPACK/Tcov/Make_file                             |     24 -
 UMFPACK/Tcov/Makefile                              |     12 +-
 UMFPACK/Tcov/README.txt                            |    133 +-
 UMFPACK/Tcov/Top_Makefile                          |      2 +-
 UMFPACK/Tcov/covall                                |      4 +-
 UMFPACK/Tcov/cover.out                             |    545 -
 UMFPACK/Tcov/cover.out_May5                        |    536 -
 UMFPACK/Tcov/ss.awk                                |      3 -
 UMFPACK/Tcov/ucov.di                               |      2 +-
 UMFPACK/Tcov/ucov.dl                               |      2 +-
 UMFPACK/Tcov/ucov.zi                               |      2 +-
 UMFPACK/Tcov/ucov.zl                               |      2 +-
 UMFPACK/Tcov/ut.c                                  |    220 +-
 2206 files changed, 513283 insertions(+), 62783 deletions(-)

diff --git a/AMD/Demo/Makefile b/AMD/Demo/Makefile
index 93c9e06..6f7cca4 100644
--- a/AMD/Demo/Makefile
+++ b/AMD/Demo/Makefile
@@ -4,13 +4,16 @@
 
 default: amd_simple amd_demo amd_demo2 amd_l_demo
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) -I../Include -I../../UFconfig
+C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config
 
-INC = ../Include/amd.h ../../UFconfig/UFconfig.h
+INC = ../Include/amd.h ../../SuiteSparse_config/SuiteSparse_config.h
+
+LIB2 = ../../SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 library:
+	( cd ../../SuiteSparse_config ; $(MAKE) )
 	( cd ../Lib ; $(MAKE) )
 
 f77lib:
@@ -23,22 +26,22 @@ f77lib:
 dist:
 
 amd_demo: amd_demo.c library $(INC)
-	$(C) -o amd_demo amd_demo.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_demo amd_demo.c ../Lib/libamd.a $(LIB2)
 	./amd_demo > my_amd_demo.out
 	- diff amd_demo.out my_amd_demo.out
 
 amd_l_demo: amd_l_demo.c library $(INC)
-	$(C) -o amd_l_demo amd_l_demo.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_l_demo amd_l_demo.c ../Lib/libamd.a $(LIB2)
 	./amd_l_demo > my_amd_l_demo.out
 	- diff amd_l_demo.out my_amd_l_demo.out
 
 amd_demo2: amd_demo2.c library $(INC)
-	$(C) -o amd_demo2 amd_demo2.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_demo2 amd_demo2.c ../Lib/libamd.a $(LIB2)
 	./amd_demo2 > my_amd_demo2.out
 	- diff amd_demo2.out my_amd_demo2.out
 
 amd_simple: amd_simple.c library $(INC)
-	$(C) -o amd_simple amd_simple.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_simple amd_simple.c ../Lib/libamd.a $(LIB2)
 	./amd_simple > my_amd_simple.out
 	- diff amd_simple.out my_amd_simple.out
 
@@ -88,3 +91,4 @@ distclean: clean
 	- $(RM) amd_f77demo my_amd_f77demo.out
 	- $(RM) amd_f77simple my_amd_f77simple.out
 	- $(RM) amd_f77cross my_amd_f77cross.out
+	- $(RM) -r *.dSYM
diff --git a/AMD/Demo/amd_demo.c b/AMD/Demo/amd_demo.c
index 1e8c045..70d9007 100644
--- a/AMD/Demo/amd_demo.c
+++ b/AMD/Demo/amd_demo.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD Copyright (c) by Timothy A. Davis,				     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* DrTimothyAldenDavis at gmail.com, http://www.suitesparse.com                 */
 /* ------------------------------------------------------------------------- */
 
 /* A simple C main program that illustrates the use of the ANSI C interface
@@ -58,8 +57,8 @@ int main (void)
     /* here is an example of how to use AMD_VERSION.  This code will work in
      * any version of AMD. */
 #if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE(1,2))
-    printf ("AMD version %d.%d, date: %s\n", AMD_MAIN_VERSION, AMD_SUB_VERSION,
-	    AMD_DATE) ;
+    printf ("AMD version %d.%d.%d, date: %s\n",
+        AMD_MAIN_VERSION, AMD_SUB_VERSION, AMD_SUBSUB_VERSION, AMD_DATE) ;
 #else
     printf ("AMD version: 1.1 or earlier\n") ;
 #endif
diff --git a/AMD/Demo/amd_demo.out b/AMD/Demo/amd_demo.out
index b577e4e..a6a9d71 100644
--- a/AMD/Demo/amd_demo.out
+++ b/AMD/Demo/amd_demo.out
@@ -1,7 +1,7 @@
-AMD version 2.2, date: May 31, 2007
+AMD version 2.4.1, date: Oct 10, 2014
 AMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24:
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -115,7 +115,7 @@ Plot of input matrix pattern:
 23:  . . . . . . X . . . . X X . . . . . . . . . . X
 return value from amd_order: 0 (should be 0)
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
diff --git a/AMD/Demo/amd_demo2.c b/AMD/Demo/amd_demo2.c
index b718580..68c1e9e 100644
--- a/AMD/Demo/amd_demo2.c
+++ b/AMD/Demo/amd_demo2.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD Copyright (c) by Timothy A. Davis,				     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* DrTimothyAldenDavis at gmail.com, http://www.suitesparse.com                 */
 /* ------------------------------------------------------------------------- */
 
 /* A simple C main program that illustrates the use of the ANSI C interface
diff --git a/AMD/Demo/amd_demo2.out b/AMD/Demo/amd_demo2.out
index a47f078..7cd13cd 100644
--- a/AMD/Demo/amd_demo2.out
+++ b/AMD/Demo/amd_demo2.out
@@ -1,7 +1,7 @@
 AMD demo, with a jumbled version of the 24-by-24
 Harwell/Boeing matrix, can_24:
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -144,7 +144,7 @@ Plot of symmetric matrix to be ordered by amd_order:
 23:  . . . . . . X . . . . X X . . . . . . . . . . X
 return value from amd_order: 1 (should be 1)
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        102
diff --git a/AMD/Demo/amd_f77cross.f b/AMD/Demo/amd_f77cross.f
index 26513e0..b79920d 100644
--- a/AMD/Demo/amd_f77cross.f
+++ b/AMD/Demo/amd_f77cross.f
@@ -4,9 +4,8 @@ C ======================================================================
 
 C ----------------------------------------------------------------------
 C AMD, Copyright (c) by Timothy A. Davis, Patrick R.
-C Amestoy, and Iain S. Duff.  See ../README.txt for
-C License.  email: davis at cise.ufl.edu    CISE Department, Univ. of
-C Florida.  web: http://www.cise.ufl.edu/research/sparse/amd
+C Amestoy, and Iain S. Duff.  See ../README.txt for License.
+C email: DrTimothyAldenDavis at gmail.com
 C ----------------------------------------------------------------------
 
 C This program provides an example of how to call the C version of AMD
diff --git a/AMD/Demo/amd_f77demo.f b/AMD/Demo/amd_f77demo.f
index 47b69fb..6aa6296 100644
--- a/AMD/Demo/amd_f77demo.f
+++ b/AMD/Demo/amd_f77demo.f
@@ -4,9 +4,8 @@ C ======================================================================
 
 C ----------------------------------------------------------------------
 C AMD, Copyright (c) by Timothy A. Davis, Patrick R.
-C Amestoy, and Iain S. Duff.  See ../README.txt for
-C License.  email: davis at cise.ufl.edu    CISE Department, Univ. of
-C Florida.  web: http://www.cise.ufl.edu/research/sparse/amd
+C Amestoy, and Iain S. Duff.  See ../README.txt for License.
+C email: DrTimothyAldenDavis at gmail.com
 C ----------------------------------------------------------------------
 
 C A simple Fortran 77 main program that illustrates the use of the
diff --git a/AMD/Demo/amd_f77simple.f b/AMD/Demo/amd_f77simple.f
index 398681b..8f39606 100644
--- a/AMD/Demo/amd_f77simple.f
+++ b/AMD/Demo/amd_f77simple.f
@@ -1,8 +1,7 @@
 C ----------------------------------------------------------------------
 C AMD, Copyright (c) by Timothy A. Davis, Patrick R.
-C Amestoy, and Iain S. Duff.  See ../README.txt for
-C License.  email: davis at cise.ufl.edu    CISE Department, Univ. of
-C Florida.  web: http://www.cise.ufl.edu/research/sparse/amd
+C Amestoy, and Iain S. Duff.  See ../README.txt for License.
+C email: DrTimothyAldenDavis at gmail.com
 C ----------------------------------------------------------------------
 
 C This program provides an example of how to call the Fortran version
diff --git a/AMD/Demo/amd_f77wrapper.c b/AMD/Demo/amd_f77wrapper.c
index eb1cd54..ff77ce0 100644
--- a/AMD/Demo/amd_f77wrapper.c
+++ b/AMD/Demo/amd_f77wrapper.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD Copyright (c) by Timothy A. Davis,				     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Fortran interface for the C-callable AMD library (int version only).  This
diff --git a/AMD/Demo/amd_l_demo.c b/AMD/Demo/amd_l_demo.c
index 342f085..62a0591 100644
--- a/AMD/Demo/amd_l_demo.c
+++ b/AMD/Demo/amd_l_demo.c
@@ -1,12 +1,11 @@
 /* ========================================================================= */
-/* === AMD demo main program (UF_long integer version) ===================== */
+/* === AMD demo main program (long integer version) ======================== */
 /* ========================================================================= */
 
 /* ------------------------------------------------------------------------- */
 /* AMD Copyright (c) by Timothy A. Davis,				     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* A simple C main program that illustrates the use of the ANSI C interface
@@ -16,14 +15,14 @@
 #include "amd.h"
 #include <stdio.h>
 #include <stdlib.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 int main (void)
 {
     /* The symmetric can_24 Harwell/Boeing matrix, including upper and lower
      * triangular parts, and the diagonal entries.  Note that this matrix is
      * 0-based, with row and column indices in the range 0 to n-1. */
-    UF_long n = 24, nz,
+    Long n = 24, nz,
     Ap [ ] = { 0, 9, 15, 21, 27, 33, 39, 48, 57, 61, 70, 76, 82, 88, 94, 100,
 	106, 110, 119, 128, 137, 143, 152, 156, 160 },
     Ai [ ] = {
@@ -52,15 +51,15 @@ int main (void)
 	/* column 22: */    2, 20, 21, 22,
 	/* column 23: */    6, 11, 12, 23 } ;
 
-    UF_long P [24], Pinv [24], i, j, k, jnew, p, inew, result ;
+    Long P [24], Pinv [24], i, j, k, jnew, p, inew, result ;
     double Control [AMD_CONTROL], Info [AMD_INFO] ;
     char A [24][24] ;
 
     /* here is an example of how to use AMD_VERSION.  This code will work in
      * any version of AMD. */
 #if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE(1,2))
-    printf ("AMD version %d.%d, date: %s\n", AMD_MAIN_VERSION, AMD_SUB_VERSION,
-	    AMD_DATE) ;
+    printf ("AMD version %d.%d.%d, date: %s\n",
+        AMD_MAIN_VERSION, AMD_SUB_VERSION, AMD_SUBSUB_VERSION, AMD_DATE) ;
 #else
     printf ("AMD version: 1.1 or earlier\n") ;
 #endif
diff --git a/AMD/Demo/amd_l_demo.out b/AMD/Demo/amd_l_demo.out
index 58f8489..24f3f36 100644
--- a/AMD/Demo/amd_l_demo.out
+++ b/AMD/Demo/amd_l_demo.out
@@ -1,7 +1,7 @@
-AMD version 2.2, date: May 31, 2007
+AMD version 2.4.1, date: Oct 10, 2014
 AMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24:
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -115,7 +115,7 @@ Plot of input matrix pattern:
 23:  . . . . . . X . . . . X X . . . . . . . . . . X
 return value from amd_l_order: 0 (should be 0)
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
diff --git a/AMD/Demo/amd_simple.c b/AMD/Demo/amd_simple.c
index 2eae945..5241fb1 100644
--- a/AMD/Demo/amd_simple.c
+++ b/AMD/Demo/amd_simple.c
@@ -1,8 +1,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD Copyright (c) by Timothy A. Davis,				     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 #include <stdio.h>
diff --git a/AMD/Doc/AMD_UserGuide.pdf b/AMD/Doc/AMD_UserGuide.pdf
index c6c29fe..b89f5d3 100644
Binary files a/AMD/Doc/AMD_UserGuide.pdf and b/AMD/Doc/AMD_UserGuide.pdf differ
diff --git a/AMD/Doc/AMD_UserGuide.tex b/AMD/Doc/AMD_UserGuide.tex
index 9381142..f0e7af8 100644
--- a/AMD/Doc/AMD_UserGuide.tex
+++ b/AMD/Doc/AMD_UserGuide.tex
@@ -13,15 +13,13 @@
 \begin{document}
 %------------------------------------------------------------------------------
 
-\title{AMD Version 2.2 User Guide}
+\title{AMD User Guide}
 \author{Patrick R. Amestoy\thanks{ENSEEIHT-IRIT,
 2 rue Camichel 31017 Toulouse, France.
 email: amestoy at enseeiht.fr.  http://www.enseeiht.fr/$\sim$amestoy.}
 \and Timothy A. Davis\thanks{
-Dept.~of Computer and Information Science and Engineering,
-Univ.~of Florida, Gainesville, FL, USA.
-email: davis at cise.ufl.edu.
-http://www.cise.ufl.edu/$\sim$davis.
+email: DrTimothyAldenDavis at gmail.com,
+http://www.suitesparse.com.
 This work was supported by the National
 Science Foundation, under grants ASC-9111263, DMS-9223088, and CCR-0203270.
 Portions of the work were done while on sabbatical at Stanford University
@@ -34,7 +32,7 @@ http://www.numerical.rl.ac.uk/people/isd/isd.html.
 This work was supported by the EPSRC under grant GR/R46441.
 }}
 
-\date{May 31, 2007}
+\date{VERSION 2.4.1, Oct 10, 2014}
 \maketitle
 
 %------------------------------------------------------------------------------
@@ -47,10 +45,7 @@ A MATLAB interface is included.
 \end{abstract}
 %------------------------------------------------------------------------------
 
-Technical report TR-04-002 (revised), CISE Department, University of Florida,
-Gainesville, FL, 2007.
-
-AMD Version 2.2, Copyright\copyright 2007 by Timothy A.
+AMD Copyright\copyright 2013 by Timothy A.
 Davis, Patrick R. Amestoy, and Iain S. Duff.  All Rights Reserved.
 AMD is available under alternate licences; contact T. Davis for details.
 
@@ -84,7 +79,7 @@ AMD is available under alternate licences; contact T. Davis for details.
     and a notice that the code was modified is included.
 
 {\bf Availability:}
-    http://www.cise.ufl.edu/research/sparse/amd
+    http://www.suitesparse.com
 
 {\bf Acknowledgments:}
 
@@ -174,7 +169,7 @@ see \cite{GeorgeLiu89}.
 %------------------------------------------------------------------------------
 
 In addition to appearing as a Collected Algorithm of the ACM, \newline
-AMD is available at http://www.cise.ufl.edu/research/sparse.
+AMD is available at http://www.suitesparse.com.
 The Fortran version is available as the routine {\tt MC47} in HSL
 (formerly the Harwell Subroutine Library) \cite{hsl:2002}.
 
@@ -212,7 +207,7 @@ UMFPACK Version 4.1 in MATLAB 7.0 and later
 uses several strategies, including a symmetric pivoting strategy, and
 will give you better results if you want to factorize an unsymmetric matrix
 of this type.  Refer to the UMFPACK User Guide for more details, at
-http://www.cise.ufl.edu/research/sparse/umfpack.
+http://www.suitesparse.com.
 
 The AMD mexFunction is much faster than the built-in MATLAB symmetric minimum
 degree ordering methods, SYMAMD and SYMMMD.  Its ordering quality is
@@ -690,7 +685,8 @@ primary {\tt Source} directory.
 The following discussion assumes you have the {\tt make} program, either in
 Unix, or in Windows with Cygwin.
 
-System-dependent configurations are in the {\tt ../UFconfig/UFconfig.mk}
+System-dependent configurations are in the
+{\tt ../SuiteSparse\_config/SuiteSparse\_config.mk}
 file.  You can edit that file to customize the compilation.  The default
 settings will work on most systems.
 Sample configuration files are provided
@@ -713,7 +709,8 @@ The output will be compared with an output file in the distribution.
 Typing {\tt make clean} will remove all but the final compiled libraries
 and demo programs.  Typing {\tt make purge} or {\tt make distclean}
 removes all files not in the original distribution.
-If you compile AMD and then later change the {\tt ../UFconfig/UFconfig.mk} file
+If you compile AMD and then later change the
+{\tt ../SuiteSparse\_config/SuiteSparse\_config.mk} file
 then you should type {\tt make purge} and then {\tt make} to recompile.
 
 When you compile your program that uses the C-callable AMD library,
@@ -731,11 +728,6 @@ This works on any system with MATLAB, including Windows.
 Alternately, type {\tt make} in the {\tt AMD/MATLAB} directory,
 or just use the built-in {\tt amd} in MATLAB 7.3 or later.
 
-If you have MATLAB 7.2 or earlier, you must first edit UFconfig/UFconfig.h to
-remove the "-largeArrayDims" option from the MEX command, prior to
-{\tt make mex} or {\tt make} in the MATLAB directory
-(or just use {\tt amd\_make.m} inside MATLAB.
-
 If you are including AMD as a subset of a larger library and do not want
 to link the C standard I/O library, or if you simply do not need to use
 them, you can safely remove the {\tt amd\_control.c} and {\tt amd\_info.c}
@@ -776,422 +768,7 @@ describes each user-callable routine in the C version of AMD,
 and gives details on their use.
 
 {\footnotesize
-\begin{verbatim}
-
-/* ========================================================================= */
-/* === AMD:  approximate minimum degree ordering =========================== */
-/* ========================================================================= */
-
-/* ------------------------------------------------------------------------- */
-/* AMD Version 2.2, Copyright (c) 2007 by Timothy A. Davis,                  */
-/* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
-/* ------------------------------------------------------------------------- */
-
-/* AMD finds a symmetric ordering P of a matrix A so that the Cholesky
- * factorization of P*A*P' has fewer nonzeros and takes less work than the
- * Cholesky factorization of A.  If A is not symmetric, then it performs its
- * ordering on the matrix A+A'.  Two sets of user-callable routines are
- * provided, one for int integers and the other for UF_long integers.
- *
- * The method is based on the approximate minimum degree algorithm, discussed
- * in Amestoy, Davis, and Duff, "An approximate degree ordering algorithm",
- * SIAM Journal of Matrix Analysis and Applications, vol. 17, no. 4, pp.
- * 886-905, 1996.  This package can perform both the AMD ordering (with
- * aggressive absorption), and the AMDBAR ordering (without aggressive
- * absorption) discussed in the above paper.  This package differs from the
- * Fortran codes discussed in the paper:
- *
- *      (1) it can ignore "dense" rows and columns, leading to faster run times
- *      (2) it computes the ordering of A+A' if A is not symmetric
- *      (3) it is followed by a depth-first post-ordering of the assembly tree
- *          (or supernodal elimination tree)
- *
- * For historical reasons, the Fortran versions, amd.f and amdbar.f, have
- * been left (nearly) unchanged.  They compute the identical ordering as
- * described in the above paper.
- */
-
-#ifndef AMD_H
-#define AMD_H
-
-/* make it easy for C++ programs to include AMD */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* get the definition of size_t: */
-#include <stddef.h>
-
-/* define UF_long */
-#include "UFconfig.h"
-
-int amd_order               /* returns AMD_OK, AMD_OK_BUT_JUMBLED,
-                             * AMD_INVALID, or AMD_OUT_OF_MEMORY */
-(
-    int n,                  /* A is n-by-n.  n must be >= 0. */
-    const int Ap [ ],       /* column pointers for A, of size n+1 */
-    const int Ai [ ],       /* row indices of A, of size nz = Ap [n] */
-    int P [ ],              /* output permutation, of size n */
-    double Control [ ],     /* input Control settings, of size AMD_CONTROL */
-    double Info [ ]         /* output Info statistics, of size AMD_INFO */
-) ;
-
-UF_long amd_l_order         /* see above for description of arguments */
-(
-    UF_long n,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
-    UF_long P [ ],
-    double Control [ ],
-    double Info [ ]
-) ;
-
-/* Input arguments (not modified):
- *
- *      n: the matrix A is n-by-n.
- *      Ap: an int/UF_long array of size n+1, containing column pointers of A.
- *      Ai: an int/UF_long array of size nz, containing the row indices of A,
- *          where nz = Ap [n].
- *      Control:  a double array of size AMD_CONTROL, containing control
- *          parameters.  Defaults are used if Control is NULL.
- *
- * Output arguments (not defined on input):
- *
- *      P: an int/UF_long array of size n, containing the output permutation. If
- *          row i is the kth pivot row, then P [k] = i.  In MATLAB notation,
- *          the reordered matrix is A (P,P).
- *      Info: a double array of size AMD_INFO, containing statistical
- *          information.  Ignored if Info is NULL.
- *
- * On input, the matrix A is stored in column-oriented form.  The row indices
- * of nonzero entries in column j are stored in Ai [Ap [j] ... Ap [j+1]-1].
- *
- * If the row indices appear in ascending order in each column, and there
- * are no duplicate entries, then amd_order is slightly more efficient in
- * terms of time and memory usage.  If this condition does not hold, a copy
- * of the matrix is created (where these conditions do hold), and the copy is
- * ordered.  This feature is new to v2.0 (v1.2 and earlier required this
- * condition to hold for the input matrix).
- * 
- * Row indices must be in the range 0 to
- * n-1.  Ap [0] must be zero, and thus nz = Ap [n] is the number of nonzeros
- * in A.  The array Ap is of size n+1, and the array Ai is of size nz = Ap [n].
- * The matrix does not need to be symmetric, and the diagonal does not need to
- * be present (if diagonal entries are present, they are ignored except for
- * the output statistic Info [AMD_NZDIAG]).  The arrays Ai and Ap are not
- * modified.  This form of the Ap and Ai arrays to represent the nonzero
- * pattern of the matrix A is the same as that used internally by MATLAB.
- * If you wish to use a more flexible input structure, please see the
- * umfpack_*_triplet_to_col routines in the UMFPACK package, at
- * http://www.cise.ufl.edu/research/sparse/umfpack.
- *
- * Restrictions:  n >= 0.  Ap [0] = 0.  Ap [j] <= Ap [j+1] for all j in the
- *      range 0 to n-1.  nz = Ap [n] >= 0.  Ai [0..nz-1] must be in the range 0
- *      to n-1.  Finally, Ai, Ap, and P must not be NULL.  If any of these
- *      restrictions are not met, AMD returns AMD_INVALID.
- *
- * AMD returns:
- *
- *      AMD_OK if the matrix is valid and sufficient memory can be allocated to
- *          perform the ordering.
- *
- *      AMD_OUT_OF_MEMORY if not enough memory can be allocated.
- *
- *      AMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is
- *          NULL.
- *
- *      AMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate
- *          entries, but was otherwise valid.
- *
- * The AMD routine first forms the pattern of the matrix A+A', and then
- * computes a fill-reducing ordering, P.  If P [k] = i, then row/column i of
- * the original is the kth pivotal row.  In MATLAB notation, the permuted
- * matrix is A (P,P), except that 0-based indexing is used instead of the
- * 1-based indexing in MATLAB.
- *
- * The Control array is used to set various parameters for AMD.  If a NULL
- * pointer is passed, default values are used.  The Control array is not
- * modified.
- *
- *      Control [AMD_DENSE]:  controls the threshold for "dense" rows/columns.
- *          A dense row/column in A+A' can cause AMD to spend a lot of time in
- *          ordering the matrix.  If Control [AMD_DENSE] >= 0, rows/columns
- *          with more than Control [AMD_DENSE] * sqrt (n) entries are ignored
- *          during the ordering, and placed last in the output order.  The
- *          default value of Control [AMD_DENSE] is 10.  If negative, no
- *          rows/columns are treated as "dense".  Rows/columns with 16 or
- *          fewer off-diagonal entries are never considered "dense".
- *
- *      Control [AMD_AGGRESSIVE]: controls whether or not to use aggressive
- *          absorption, in which a prior element is absorbed into the current
- *          element if is a subset of the current element, even if it is not
- *          adjacent to the current pivot element (refer to Amestoy, Davis,
- *          & Duff, 1996, for more details).  The default value is nonzero,
- *          which means to perform aggressive absorption.  This nearly always
- *          leads to a better ordering (because the approximate degrees are
- *          more accurate) and a lower execution time.  There are cases where
- *          it can lead to a slightly worse ordering, however.  To turn it off,
- *          set Control [AMD_AGGRESSIVE] to 0.
- *
- *      Control [2..4] are not used in the current version, but may be used in
- *          future versions.
- *
- * The Info array provides statistics about the ordering on output.  If it is
- * not present, the statistics are not returned.  This is not an error
- * condition.
- * 
- *      Info [AMD_STATUS]:  the return value of AMD, either AMD_OK,
- *          AMD_OK_BUT_JUMBLED, AMD_OUT_OF_MEMORY, or AMD_INVALID.
- *
- *      Info [AMD_N]: n, the size of the input matrix
- *
- *      Info [AMD_NZ]: the number of nonzeros in A, nz = Ap [n]
- *
- *      Info [AMD_SYMMETRY]:  the symmetry of the matrix A.  It is the number
- *          of "matched" off-diagonal entries divided by the total number of
- *          off-diagonal entries.  An entry A(i,j) is matched if A(j,i) is also
- *          an entry, for any pair (i,j) for which i != j.  In MATLAB notation,
- *              S = spones (A) ;
- *              B = tril (S, -1) + triu (S, 1) ;
- *              symmetry = nnz (B & B') / nnz (B) ;
- *
- *      Info [AMD_NZDIAG]: the number of entries on the diagonal of A.
- *
- *      Info [AMD_NZ_A_PLUS_AT]:  the number of nonzeros in A+A', excluding the
- *          diagonal.  If A is perfectly symmetric (Info [AMD_SYMMETRY] = 1)
- *          with a fully nonzero diagonal, then Info [AMD_NZ_A_PLUS_AT] = nz-n
- *          (the smallest possible value).  If A is perfectly unsymmetric
- *          (Info [AMD_SYMMETRY] = 0, for an upper triangular matrix, for
- *          example) with no diagonal, then Info [AMD_NZ_A_PLUS_AT] = 2*nz
- *          (the largest possible value).
- *
- *      Info [AMD_NDENSE]: the number of "dense" rows/columns of A+A' that were
- *          removed from A prior to ordering.  These are placed last in the
- *          output order P.
- *
- *      Info [AMD_MEMORY]: the amount of memory used by AMD, in bytes.  In the
- *          current version, this is 1.2 * Info  [AMD_NZ_A_PLUS_AT] + 9*n
- *          times the size of an integer.  This is at most 2.4nz + 9n.  This
- *          excludes the size of the input arguments Ai, Ap, and P, which have
- *          a total size of nz + 2*n + 1 integers.
- *
- *      Info [AMD_NCMPA]: the number of garbage collections performed.
- *
- *      Info [AMD_LNZ]: the number of nonzeros in L (excluding the diagonal).
- *          This is a slight upper bound because mass elimination is combined
- *          with the approximate degree update.  It is a rough upper bound if
- *          there are many "dense" rows/columns.  The rest of the statistics,
- *          below, are also slight or rough upper bounds, for the same reasons.
- *          The post-ordering of the assembly tree might also not exactly
- *          correspond to a true elimination tree postordering.
- *
- *      Info [AMD_NDIV]: the number of divide operations for a subsequent LDL'
- *          or LU factorization of the permuted matrix A (P,P).
- *
- *      Info [AMD_NMULTSUBS_LDL]:  the number of multiply-subtract pairs for a
- *          subsequent LDL' factorization of A (P,P).
- *
- *      Info [AMD_NMULTSUBS_LU]:  the number of multiply-subtract pairs for a
- *          subsequent LU factorization of A (P,P), assuming that no numerical
- *          pivoting is required.
- *
- *      Info [AMD_DMAX]:  the maximum number of nonzeros in any column of L,
- *          including the diagonal.
- *
- *      Info [14..19] are not used in the current version, but may be used in
- *          future versions.
- */    
-
-/* ------------------------------------------------------------------------- */
-/* direct interface to AMD */
-/* ------------------------------------------------------------------------- */
-
-/* amd_2 is the primary AMD ordering routine.  It is not meant to be
- * user-callable because of its restrictive inputs and because it destroys
- * the user's input matrix.  It does not check its inputs for errors, either.
- * However, if you can work with these restrictions it can be faster than
- * amd_order and use less memory (assuming that you can create your own copy
- * of the matrix for AMD to destroy).  Refer to AMD/Source/amd_2.c for a
- * description of each parameter. */
-
-void amd_2
-(
-    int n,
-    int Pe [ ],
-    int Iw [ ],
-    int Len [ ],
-    int iwlen,
-    int pfree,
-    int Nv [ ],
-    int Next [ ], 
-    int Last [ ],
-    int Head [ ],
-    int Elen [ ],
-    int Degree [ ],
-    int W [ ],
-    double Control [ ],
-    double Info [ ]
-) ;
-
-void amd_l2
-(
-    UF_long n,
-    UF_long Pe [ ],
-    UF_long Iw [ ],
-    UF_long Len [ ],
-    UF_long iwlen,
-    UF_long pfree,
-    UF_long Nv [ ],
-    UF_long Next [ ], 
-    UF_long Last [ ],
-    UF_long Head [ ],
-    UF_long Elen [ ],
-    UF_long Degree [ ],
-    UF_long W [ ],
-    double Control [ ],
-    double Info [ ]
-) ;
-
-/* ------------------------------------------------------------------------- */
-/* amd_valid */
-/* ------------------------------------------------------------------------- */
-
-/* Returns AMD_OK or AMD_OK_BUT_JUMBLED if the matrix is valid as input to
- * amd_order; the latter is returned if the matrix has unsorted and/or
- * duplicate row indices in one or more columns.  Returns AMD_INVALID if the
- * matrix cannot be passed to amd_order.  For amd_order, the matrix must also
- * be square.  The first two arguments are the number of rows and the number
- * of columns of the matrix.  For its use in AMD, these must both equal n.
- *
- * NOTE: this routine returned TRUE/FALSE in v1.2 and earlier.
- */
-
-int amd_valid
-(
-    int n_row,              /* # of rows */
-    int n_col,              /* # of columns */
-    const int Ap [ ],       /* column pointers, of size n_col+1 */
-    const int Ai [ ]        /* row indices, of size Ap [n_col] */
-) ;
-
-UF_long amd_l_valid
-(
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ]
-) ;
-
-/* ------------------------------------------------------------------------- */
-/* AMD memory manager and printf routines */
-/* ------------------------------------------------------------------------- */
-
-/* The user can redefine these to change the malloc, free, and printf routines
- * that AMD uses. */
-
-#ifndef EXTERN
-#define EXTERN extern
-#endif
-
-EXTERN void *(*amd_malloc) (size_t) ;               /* pointer to malloc */
-EXTERN void (*amd_free) (void *) ;                  /* pointer to free */
-EXTERN void *(*amd_realloc) (void *, size_t) ;      /* pointer to realloc */
-EXTERN void *(*amd_calloc) (size_t, size_t) ;       /* pointer to calloc */
-EXTERN int (*amd_printf) (const char *, ...) ;      /* pointer to printf */
-
-/* ------------------------------------------------------------------------- */
-/* AMD Control and Info arrays */
-/* ------------------------------------------------------------------------- */
-
-/* amd_defaults:  sets the default control settings */
-void amd_defaults   (double Control [ ]) ;
-void amd_l_defaults (double Control [ ]) ;
-
-/* amd_control: prints the control settings */
-void amd_control    (double Control [ ]) ;
-void amd_l_control  (double Control [ ]) ;
-
-/* amd_info: prints the statistics */
-void amd_info       (double Info [ ]) ;
-void amd_l_info     (double Info [ ]) ;
-
-#define AMD_CONTROL 5       /* size of Control array */
-#define AMD_INFO 20         /* size of Info array */
-
-/* contents of Control */
-#define AMD_DENSE 0         /* "dense" if degree > Control [0] * sqrt (n) */
-#define AMD_AGGRESSIVE 1    /* do aggressive absorption if Control [1] != 0 */
-
-/* default Control settings */
-#define AMD_DEFAULT_DENSE 10.0      /* default "dense" degree 10*sqrt(n) */
-#define AMD_DEFAULT_AGGRESSIVE 1    /* do aggressive absorption by default */
-
-/* contents of Info */
-#define AMD_STATUS 0        /* return value of amd_order and amd_l_order */
-#define AMD_N 1             /* A is n-by-n */
-#define AMD_NZ 2            /* number of nonzeros in A */ 
-#define AMD_SYMMETRY 3      /* symmetry of pattern (1 is sym., 0 is unsym.) */
-#define AMD_NZDIAG 4        /* # of entries on diagonal */
-#define AMD_NZ_A_PLUS_AT 5  /* nz in A+A' */
-#define AMD_NDENSE 6        /* number of "dense" rows/columns in A */
-#define AMD_MEMORY 7        /* amount of memory used by AMD */
-#define AMD_NCMPA 8         /* number of garbage collections in AMD */
-#define AMD_LNZ 9           /* approx. nz in L, excluding the diagonal */
-#define AMD_NDIV 10         /* number of fl. point divides for LU and LDL' */
-#define AMD_NMULTSUBS_LDL 11 /* number of fl. point (*,-) pairs for LDL' */
-#define AMD_NMULTSUBS_LU 12  /* number of fl. point (*,-) pairs for LU */
-#define AMD_DMAX 13          /* max nz. in any column of L, incl. diagonal */
-
-/* ------------------------------------------------------------------------- */
-/* return values of AMD */
-/* ------------------------------------------------------------------------- */
-
-#define AMD_OK 0                /* success */
-#define AMD_OUT_OF_MEMORY -1    /* malloc failed, or problem too large */
-#define AMD_INVALID -2          /* input arguments are not valid */
-#define AMD_OK_BUT_JUMBLED 1    /* input matrix is OK for amd_order, but
-    * columns were not sorted, and/or duplicate entries were present.  AMD had
-    * to do extra work before ordering the matrix.  This is a warning, not an
-    * error.  */
-
-/* ========================================================================== */
-/* === AMD version ========================================================== */
-/* ========================================================================== */
-
-/* AMD Version 1.2 and later include the following definitions.
- * As an example, to test if the version you are using is 1.2 or later:
- *
- * #ifdef AMD_VERSION
- *      if (AMD_VERSION >= AMD_VERSION_CODE (1,2)) ...
- * #endif
- *
- * This also works during compile-time:
- *
- *      #if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE (1,2))
- *          printf ("This is version 1.2 or later\n") ;
- *      #else
- *          printf ("This is an early version\n") ;
- *      #endif
- *
- * Versions 1.1 and earlier of AMD do not include a #define'd version number.
- */
-
-#define AMD_DATE "May 31, 2007"
-#define AMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
-#define AMD_MAIN_VERSION 2
-#define AMD_SUB_VERSION 2
-#define AMD_SUBSUB_VERSION 0
-#define AMD_VERSION AMD_VERSION_CODE(AMD_MAIN_VERSION,AMD_SUB_VERSION)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-#endif
-\end{verbatim}
+\input{amd_h.tex}
 }
 
 
diff --git a/AMD/Doc/ChangeLog b/AMD/Doc/ChangeLog
index 9b98e38..89dd783 100644
--- a/AMD/Doc/ChangeLog
+++ b/AMD/Doc/ChangeLog
@@ -1,3 +1,35 @@
+Oct 10, 2014: version 2.4.1
+
+    modified MATLAB/amd_make.m.  No change to C code except version number.
+
+July 31, 2013: version 2.4.0
+
+    * changed malloc and printf pointers to use SuiteSparse_config
+
+Jun 20, 2012: verison 2.3.1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 2.3.0
+
+    * changed from UFconfig to SuiteSparse_config
+
+May 15, 2012: version 2.2.4
+
+    * minor fix to SIZE_T_MAX definition (finicky compiler workaround)
+
+Dec 7, 2011: version 2.2.3
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+
+Jan 25, 2011: version 2.2.2
+
+    * minor fix to "make install"
+
+Nov 30, 2009: version 2.2.1
+
+    * added "make install" and "make uninstall"
+
 May 31, 2007: version 2.2.0
 
     * port to 64-bit MATLAB
diff --git a/AMD/Doc/License b/AMD/Doc/License
index b01008a..81026a1 100644
--- a/AMD/Doc/License
+++ b/AMD/Doc/License
@@ -34,6 +34,6 @@ AMD License:
 
 Availability:
 
-    http://www.cise.ufl.edu/research/sparse/amd
+    http://www.suitesparse.com
 
 -------------------------------------------------------------------------------
diff --git a/AMD/Doc/Makefile b/AMD/Doc/Makefile
index 8b593fa..0fea143 100644
--- a/AMD/Doc/Makefile
+++ b/AMD/Doc/Makefile
@@ -4,7 +4,7 @@
 
 default: dist
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 #------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
@@ -22,12 +22,15 @@ distclean: clean
 # Create the User Guide and Quick Start Guide
 #------------------------------------------------------------------------------
 
-AMD_UserGuide.pdf: AMD_UserGuide.tex AMD_UserGuide.bib
+AMD_UserGuide.pdf: AMD_UserGuide.tex AMD_UserGuide.bib ../Include/amd.h
+	echo '\\begin{verbatim}' > amd_h.tex
+	expand -8 ../Include/amd.h >> amd_h.tex
+	echo '\end{verbatim}' >> amd_h.tex
 	pdflatex AMD_UserGuide
 	bibtex AMD_UserGuide
 	pdflatex AMD_UserGuide
 	pdflatex AMD_UserGuide
 
 dist:  AMD_UserGuide.pdf
-	- $(RM) *.aux *.bbl *.blg *.log *.toc
+	- $(RM) *.aux *.bbl *.blg *.log *.toc amd_h.tex
 
diff --git a/AMD/Include/amd.h b/AMD/Include/amd.h
index e4fd47e..c80de1a 100644
--- a/AMD/Include/amd.h
+++ b/AMD/Include/amd.h
@@ -3,17 +3,16 @@
 /* ========================================================================= */
 
 /* ------------------------------------------------------------------------- */
-/* AMD Version 2.2, Copyright (c) 2007 by Timothy A. Davis,                  */
+/* AMD Version 2.4, Copyright (c) 1996-2013 by Timothy A. Davis,             */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* AMD finds a symmetric ordering P of a matrix A so that the Cholesky
  * factorization of P*A*P' has fewer nonzeros and takes less work than the
  * Cholesky factorization of A.  If A is not symmetric, then it performs its
  * ordering on the matrix A+A'.  Two sets of user-callable routines are
- * provided, one for int integers and the other for UF_long integers.
+ * provided, one for int integers and the other for SuiteSparse_long integers.
  *
  * The method is based on the approximate minimum degree algorithm, discussed
  * in Amestoy, Davis, and Duff, "An approximate degree ordering algorithm",
@@ -23,10 +22,10 @@
  * absorption) discussed in the above paper.  This package differs from the
  * Fortran codes discussed in the paper:
  *
- *	(1) it can ignore "dense" rows and columns, leading to faster run times
- *	(2) it computes the ordering of A+A' if A is not symmetric
- *	(3) it is followed by a depth-first post-ordering of the assembly tree
- *	    (or supernodal elimination tree)
+ *       (1) it can ignore "dense" rows and columns, leading to faster run times
+ *       (2) it computes the ordering of A+A' if A is not symmetric
+ *       (3) it is followed by a depth-first post-ordering of the assembly tree
+ *           (or supernodal elimination tree)
  *
  * For historical reasons, the Fortran versions, amd.f and amdbar.f, have
  * been left (nearly) unchanged.  They compute the identical ordering as
@@ -44,46 +43,46 @@ extern "C" {
 /* get the definition of size_t: */
 #include <stddef.h>
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
-int amd_order		    /* returns AMD_OK, AMD_OK_BUT_JUMBLED,
-			     * AMD_INVALID, or AMD_OUT_OF_MEMORY */
+int amd_order                  /* returns AMD_OK, AMD_OK_BUT_JUMBLED,
+                                * AMD_INVALID, or AMD_OUT_OF_MEMORY */
 (
-    int n,		    /* A is n-by-n.  n must be >= 0. */
-    const int Ap [ ],	    /* column pointers for A, of size n+1 */
-    const int Ai [ ],	    /* row indices of A, of size nz = Ap [n] */
-    int P [ ],		    /* output permutation, of size n */
-    double Control [ ],	    /* input Control settings, of size AMD_CONTROL */
-    double Info [ ]	    /* output Info statistics, of size AMD_INFO */
+    int n,                     /* A is n-by-n.  n must be >= 0. */
+    const int Ap [ ],          /* column pointers for A, of size n+1 */
+    const int Ai [ ],          /* row indices of A, of size nz = Ap [n] */
+    int P [ ],                 /* output permutation, of size n */
+    double Control [ ],        /* input Control settings, of size AMD_CONTROL */
+    double Info [ ]            /* output Info statistics, of size AMD_INFO */
 ) ;
 
-UF_long amd_l_order	    /* see above for description of arguments */
+SuiteSparse_long amd_l_order    /* see above for description of arguments */
 (
-    UF_long n,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
-    UF_long P [ ],
+    SuiteSparse_long n,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
+    SuiteSparse_long P [ ],
     double Control [ ],
     double Info [ ]
 ) ;
 
 /* Input arguments (not modified):
  *
- *	n: the matrix A is n-by-n.
- *	Ap: an int/UF_long array of size n+1, containing column pointers of A.
- *	Ai: an int/UF_long array of size nz, containing the row indices of A,
- *	    where nz = Ap [n].
- *	Control:  a double array of size AMD_CONTROL, containing control
- *	    parameters.  Defaults are used if Control is NULL.
+ *       n: the matrix A is n-by-n.
+ *       Ap: an int/SuiteSparse_long array of size n+1, containing column
+ *              pointers of A.
+ *       Ai: an int/SuiteSparse_long array of size nz, containing the row
+ *              indices of A, where nz = Ap [n].
+ *       Control:  a double array of size AMD_CONTROL, containing control
+ *           parameters.  Defaults are used if Control is NULL.
  *
  * Output arguments (not defined on input):
  *
- *	P: an int/UF_long array of size n, containing the output permutation. If
- *	    row i is the kth pivot row, then P [k] = i.  In MATLAB notation,
- *	    the reordered matrix is A (P,P).
- *	Info: a double array of size AMD_INFO, containing statistical
- *	    information.  Ignored if Info is NULL.
+ *       P: an int/SuiteSparse_long array of size n, containing the output
+ *           permutation. If row i is the kth pivot row, then P [k] = i.  In
+ *           MATLAB notation, the reordered matrix is A (P,P).
+ *       Info: a double array of size AMD_INFO, containing statistical
+ *           information.  Ignored if Info is NULL.
  *
  * On input, the matrix A is stored in column-oriented form.  The row indices
  * of nonzero entries in column j are stored in Ai [Ap [j] ... Ap [j+1]-1].
@@ -105,25 +104,25 @@ UF_long amd_l_order	    /* see above for description of arguments */
  * pattern of the matrix A is the same as that used internally by MATLAB.
  * If you wish to use a more flexible input structure, please see the
  * umfpack_*_triplet_to_col routines in the UMFPACK package, at
- * http://www.cise.ufl.edu/research/sparse/umfpack.
+ * http://www.suitesparse.com.
  *
  * Restrictions:  n >= 0.  Ap [0] = 0.  Ap [j] <= Ap [j+1] for all j in the
- *	range 0 to n-1.  nz = Ap [n] >= 0.  Ai [0..nz-1] must be in the range 0
- *	to n-1.  Finally, Ai, Ap, and P must not be NULL.  If any of these
- *	restrictions are not met, AMD returns AMD_INVALID.
+ *       range 0 to n-1.  nz = Ap [n] >= 0.  Ai [0..nz-1] must be in the range 0
+ *       to n-1.  Finally, Ai, Ap, and P must not be NULL.  If any of these
+ *       restrictions are not met, AMD returns AMD_INVALID.
  *
  * AMD returns:
  *
- *	AMD_OK if the matrix is valid and sufficient memory can be allocated to
- *	    perform the ordering.
+ *       AMD_OK if the matrix is valid and sufficient memory can be allocated to
+ *           perform the ordering.
  *
- *	AMD_OUT_OF_MEMORY if not enough memory can be allocated.
+ *       AMD_OUT_OF_MEMORY if not enough memory can be allocated.
  *
- *	AMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is
- *	    NULL.
+ *       AMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is
+ *           NULL.
  *
- *	AMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate
- *	    entries, but was otherwise valid.
+ *       AMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate
+ *           entries, but was otherwise valid.
  *
  * The AMD routine first forms the pattern of the matrix A+A', and then
  * computes a fill-reducing ordering, P.  If P [k] = i, then row/column i of
@@ -135,93 +134,93 @@ UF_long amd_l_order	    /* see above for description of arguments */
  * pointer is passed, default values are used.  The Control array is not
  * modified.
  *
- *	Control [AMD_DENSE]:  controls the threshold for "dense" rows/columns.
- *	    A dense row/column in A+A' can cause AMD to spend a lot of time in
- *	    ordering the matrix.  If Control [AMD_DENSE] >= 0, rows/columns
- *	    with more than Control [AMD_DENSE] * sqrt (n) entries are ignored
- *	    during the ordering, and placed last in the output order.  The
- *	    default value of Control [AMD_DENSE] is 10.  If negative, no
- *	    rows/columns are treated as "dense".  Rows/columns with 16 or
- *	    fewer off-diagonal entries are never considered "dense".
- *
- *	Control [AMD_AGGRESSIVE]: controls whether or not to use aggressive
- *	    absorption, in which a prior element is absorbed into the current
- *	    element if is a subset of the current element, even if it is not
- *	    adjacent to the current pivot element (refer to Amestoy, Davis,
- *	    & Duff, 1996, for more details).  The default value is nonzero,
- *	    which means to perform aggressive absorption.  This nearly always
- *	    leads to a better ordering (because the approximate degrees are
- *	    more accurate) and a lower execution time.  There are cases where
- *	    it can lead to a slightly worse ordering, however.  To turn it off,
- *	    set Control [AMD_AGGRESSIVE] to 0.
- *
- *	Control [2..4] are not used in the current version, but may be used in
- *	    future versions.
+ *       Control [AMD_DENSE]:  controls the threshold for "dense" rows/columns.
+ *           A dense row/column in A+A' can cause AMD to spend a lot of time in
+ *           ordering the matrix.  If Control [AMD_DENSE] >= 0, rows/columns
+ *           with more than Control [AMD_DENSE] * sqrt (n) entries are ignored
+ *           during the ordering, and placed last in the output order.  The
+ *           default value of Control [AMD_DENSE] is 10.  If negative, no
+ *           rows/columns are treated as "dense".  Rows/columns with 16 or
+ *           fewer off-diagonal entries are never considered "dense".
+ *
+ *       Control [AMD_AGGRESSIVE]: controls whether or not to use aggressive
+ *           absorption, in which a prior element is absorbed into the current
+ *           element if is a subset of the current element, even if it is not
+ *           adjacent to the current pivot element (refer to Amestoy, Davis,
+ *           & Duff, 1996, for more details).  The default value is nonzero,
+ *           which means to perform aggressive absorption.  This nearly always
+ *           leads to a better ordering (because the approximate degrees are
+ *           more accurate) and a lower execution time.  There are cases where
+ *           it can lead to a slightly worse ordering, however.  To turn it off,
+ *           set Control [AMD_AGGRESSIVE] to 0.
+ *
+ *       Control [2..4] are not used in the current version, but may be used in
+ *           future versions.
  *
  * The Info array provides statistics about the ordering on output.  If it is
  * not present, the statistics are not returned.  This is not an error
  * condition.
  * 
- *	Info [AMD_STATUS]:  the return value of AMD, either AMD_OK,
- *	    AMD_OK_BUT_JUMBLED, AMD_OUT_OF_MEMORY, or AMD_INVALID.
- *
- *	Info [AMD_N]: n, the size of the input matrix
- *
- *	Info [AMD_NZ]: the number of nonzeros in A, nz = Ap [n]
- *
- *	Info [AMD_SYMMETRY]:  the symmetry of the matrix A.  It is the number
- *	    of "matched" off-diagonal entries divided by the total number of
- *	    off-diagonal entries.  An entry A(i,j) is matched if A(j,i) is also
- *	    an entry, for any pair (i,j) for which i != j.  In MATLAB notation,
- *		S = spones (A) ;
- *		B = tril (S, -1) + triu (S, 1) ;
- *		symmetry = nnz (B & B') / nnz (B) ;
- *
- *	Info [AMD_NZDIAG]: the number of entries on the diagonal of A.
- *
- *	Info [AMD_NZ_A_PLUS_AT]:  the number of nonzeros in A+A', excluding the
- *	    diagonal.  If A is perfectly symmetric (Info [AMD_SYMMETRY] = 1)
- *	    with a fully nonzero diagonal, then Info [AMD_NZ_A_PLUS_AT] = nz-n
- *	    (the smallest possible value).  If A is perfectly unsymmetric
- *	    (Info [AMD_SYMMETRY] = 0, for an upper triangular matrix, for
- *	    example) with no diagonal, then Info [AMD_NZ_A_PLUS_AT] = 2*nz
- *	    (the largest possible value).
- *
- *	Info [AMD_NDENSE]: the number of "dense" rows/columns of A+A' that were
- *	    removed from A prior to ordering.  These are placed last in the
- *	    output order P.
- *
- *	Info [AMD_MEMORY]: the amount of memory used by AMD, in bytes.  In the
- *	    current version, this is 1.2 * Info  [AMD_NZ_A_PLUS_AT] + 9*n
- *	    times the size of an integer.  This is at most 2.4nz + 9n.  This
- *	    excludes the size of the input arguments Ai, Ap, and P, which have
- *	    a total size of nz + 2*n + 1 integers.
- *
- *	Info [AMD_NCMPA]: the number of garbage collections performed.
- *
- *	Info [AMD_LNZ]: the number of nonzeros in L (excluding the diagonal).
- *	    This is a slight upper bound because mass elimination is combined
- *	    with the approximate degree update.  It is a rough upper bound if
- *	    there are many "dense" rows/columns.  The rest of the statistics,
- *	    below, are also slight or rough upper bounds, for the same reasons.
- *	    The post-ordering of the assembly tree might also not exactly
- *	    correspond to a true elimination tree postordering.
- *
- *	Info [AMD_NDIV]: the number of divide operations for a subsequent LDL'
- *	    or LU factorization of the permuted matrix A (P,P).
- *
- *	Info [AMD_NMULTSUBS_LDL]:  the number of multiply-subtract pairs for a
- *	    subsequent LDL' factorization of A (P,P).
- *
- *	Info [AMD_NMULTSUBS_LU]:  the number of multiply-subtract pairs for a
- *	    subsequent LU factorization of A (P,P), assuming that no numerical
- *	    pivoting is required.
- *
- *	Info [AMD_DMAX]:  the maximum number of nonzeros in any column of L,
- *	    including the diagonal.
- *
- *	Info [14..19] are not used in the current version, but may be used in
- *	    future versions.
+ *       Info [AMD_STATUS]:  the return value of AMD, either AMD_OK,
+ *           AMD_OK_BUT_JUMBLED, AMD_OUT_OF_MEMORY, or AMD_INVALID.
+ *
+ *       Info [AMD_N]: n, the size of the input matrix
+ *
+ *       Info [AMD_NZ]: the number of nonzeros in A, nz = Ap [n]
+ *
+ *       Info [AMD_SYMMETRY]:  the symmetry of the matrix A.  It is the number
+ *           of "matched" off-diagonal entries divided by the total number of
+ *           off-diagonal entries.  An entry A(i,j) is matched if A(j,i) is also
+ *           an entry, for any pair (i,j) for which i != j.  In MATLAB notation,
+ *                S = spones (A) ;
+ *                B = tril (S, -1) + triu (S, 1) ;
+ *                symmetry = nnz (B & B') / nnz (B) ;
+ *
+ *       Info [AMD_NZDIAG]: the number of entries on the diagonal of A.
+ *
+ *       Info [AMD_NZ_A_PLUS_AT]:  the number of nonzeros in A+A', excluding the
+ *           diagonal.  If A is perfectly symmetric (Info [AMD_SYMMETRY] = 1)
+ *           with a fully nonzero diagonal, then Info [AMD_NZ_A_PLUS_AT] = nz-n
+ *           (the smallest possible value).  If A is perfectly unsymmetric
+ *           (Info [AMD_SYMMETRY] = 0, for an upper triangular matrix, for
+ *           example) with no diagonal, then Info [AMD_NZ_A_PLUS_AT] = 2*nz
+ *           (the largest possible value).
+ *
+ *       Info [AMD_NDENSE]: the number of "dense" rows/columns of A+A' that were
+ *           removed from A prior to ordering.  These are placed last in the
+ *           output order P.
+ *
+ *       Info [AMD_MEMORY]: the amount of memory used by AMD, in bytes.  In the
+ *           current version, this is 1.2 * Info  [AMD_NZ_A_PLUS_AT] + 9*n
+ *           times the size of an integer.  This is at most 2.4nz + 9n.  This
+ *           excludes the size of the input arguments Ai, Ap, and P, which have
+ *           a total size of nz + 2*n + 1 integers.
+ *
+ *       Info [AMD_NCMPA]: the number of garbage collections performed.
+ *
+ *       Info [AMD_LNZ]: the number of nonzeros in L (excluding the diagonal).
+ *           This is a slight upper bound because mass elimination is combined
+ *           with the approximate degree update.  It is a rough upper bound if
+ *           there are many "dense" rows/columns.  The rest of the statistics,
+ *           below, are also slight or rough upper bounds, for the same reasons.
+ *           The post-ordering of the assembly tree might also not exactly
+ *           correspond to a true elimination tree postordering.
+ *
+ *       Info [AMD_NDIV]: the number of divide operations for a subsequent LDL'
+ *           or LU factorization of the permuted matrix A (P,P).
+ *
+ *       Info [AMD_NMULTSUBS_LDL]:  the number of multiply-subtract pairs for a
+ *           subsequent LDL' factorization of A (P,P).
+ *
+ *       Info [AMD_NMULTSUBS_LU]:  the number of multiply-subtract pairs for a
+ *           subsequent LU factorization of A (P,P), assuming that no numerical
+ *           pivoting is required.
+ *
+ *       Info [AMD_DMAX]:  the maximum number of nonzeros in any column of L,
+ *           including the diagonal.
+ *
+ *       Info [14..19] are not used in the current version, but may be used in
+ *           future versions.
  */    
 
 /* ------------------------------------------------------------------------- */
@@ -257,19 +256,19 @@ void amd_2
 
 void amd_l2
 (
-    UF_long n,
-    UF_long Pe [ ],
-    UF_long Iw [ ],
-    UF_long Len [ ],
-    UF_long iwlen,
-    UF_long pfree,
-    UF_long Nv [ ],
-    UF_long Next [ ], 
-    UF_long Last [ ],
-    UF_long Head [ ],
-    UF_long Elen [ ],
-    UF_long Degree [ ],
-    UF_long W [ ],
+    SuiteSparse_long n,
+    SuiteSparse_long Pe [ ],
+    SuiteSparse_long Iw [ ],
+    SuiteSparse_long Len [ ],
+    SuiteSparse_long iwlen,
+    SuiteSparse_long pfree,
+    SuiteSparse_long Nv [ ],
+    SuiteSparse_long Next [ ], 
+    SuiteSparse_long Last [ ],
+    SuiteSparse_long Head [ ],
+    SuiteSparse_long Elen [ ],
+    SuiteSparse_long Degree [ ],
+    SuiteSparse_long W [ ],
     double Control [ ],
     double Info [ ]
 ) ;
@@ -290,36 +289,25 @@ void amd_l2
 
 int amd_valid
 (
-    int n_row,		    /* # of rows */
-    int n_col,		    /* # of columns */
-    const int Ap [ ],	    /* column pointers, of size n_col+1 */
-    const int Ai [ ]	    /* row indices, of size Ap [n_col] */
+    int n_row,                 /* # of rows */
+    int n_col,                 /* # of columns */
+    const int Ap [ ],          /* column pointers, of size n_col+1 */
+    const int Ai [ ]           /* row indices, of size Ap [n_col] */
 ) ;
 
-UF_long amd_l_valid
+SuiteSparse_long amd_l_valid
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ]
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ]
 ) ;
 
 /* ------------------------------------------------------------------------- */
 /* AMD memory manager and printf routines */
 /* ------------------------------------------------------------------------- */
 
-/* The user can redefine these to change the malloc, free, and printf routines
- * that AMD uses. */
-
-#ifndef EXTERN
-#define EXTERN extern
-#endif
-
-EXTERN void *(*amd_malloc) (size_t) ;		    /* pointer to malloc */
-EXTERN void (*amd_free) (void *) ;		    /* pointer to free */
-EXTERN void *(*amd_realloc) (void *, size_t) ;	    /* pointer to realloc */
-EXTERN void *(*amd_calloc) (size_t, size_t) ;	    /* pointer to calloc */
-EXTERN int (*amd_printf) (const char *, ...) ;	    /* pointer to printf */
+    /* moved to SuiteSparse_config.c */
 
 /* ------------------------------------------------------------------------- */
 /* AMD Control and Info arrays */
@@ -337,41 +325,41 @@ void amd_l_control  (double Control [ ]) ;
 void amd_info       (double Info [ ]) ;
 void amd_l_info     (double Info [ ]) ;
 
-#define AMD_CONTROL 5	    /* size of Control array */
-#define AMD_INFO 20	    /* size of Info array */
+#define AMD_CONTROL 5          /* size of Control array */
+#define AMD_INFO 20            /* size of Info array */
 
 /* contents of Control */
-#define AMD_DENSE 0	    /* "dense" if degree > Control [0] * sqrt (n) */
+#define AMD_DENSE 0            /* "dense" if degree > Control [0] * sqrt (n) */
 #define AMD_AGGRESSIVE 1    /* do aggressive absorption if Control [1] != 0 */
 
 /* default Control settings */
-#define AMD_DEFAULT_DENSE 10.0	    /* default "dense" degree 10*sqrt(n) */
+#define AMD_DEFAULT_DENSE 10.0          /* default "dense" degree 10*sqrt(n) */
 #define AMD_DEFAULT_AGGRESSIVE 1    /* do aggressive absorption by default */
 
 /* contents of Info */
-#define AMD_STATUS 0	    /* return value of amd_order and amd_l_order */
-#define AMD_N 1		    /* A is n-by-n */
-#define AMD_NZ 2	    /* number of nonzeros in A */ 
-#define AMD_SYMMETRY 3	    /* symmetry of pattern (1 is sym., 0 is unsym.) */
-#define AMD_NZDIAG 4	    /* # of entries on diagonal */
+#define AMD_STATUS 0           /* return value of amd_order and amd_l_order */
+#define AMD_N 1                /* A is n-by-n */
+#define AMD_NZ 2      /* number of nonzeros in A */ 
+#define AMD_SYMMETRY 3         /* symmetry of pattern (1 is sym., 0 is unsym.) */
+#define AMD_NZDIAG 4           /* # of entries on diagonal */
 #define AMD_NZ_A_PLUS_AT 5  /* nz in A+A' */
-#define AMD_NDENSE 6	    /* number of "dense" rows/columns in A */
-#define AMD_MEMORY 7	    /* amount of memory used by AMD */
-#define AMD_NCMPA 8	    /* number of garbage collections in AMD */
-#define AMD_LNZ 9	    /* approx. nz in L, excluding the diagonal */
-#define AMD_NDIV 10	    /* number of fl. point divides for LU and LDL' */
+#define AMD_NDENSE 6           /* number of "dense" rows/columns in A */
+#define AMD_MEMORY 7           /* amount of memory used by AMD */
+#define AMD_NCMPA 8            /* number of garbage collections in AMD */
+#define AMD_LNZ 9     /* approx. nz in L, excluding the diagonal */
+#define AMD_NDIV 10            /* number of fl. point divides for LU and LDL' */
 #define AMD_NMULTSUBS_LDL 11 /* number of fl. point (*,-) pairs for LDL' */
 #define AMD_NMULTSUBS_LU 12  /* number of fl. point (*,-) pairs for LU */
-#define AMD_DMAX 13	     /* max nz. in any column of L, incl. diagonal */
+#define AMD_DMAX 13             /* max nz. in any column of L, incl. diagonal */
 
 /* ------------------------------------------------------------------------- */
 /* return values of AMD */
 /* ------------------------------------------------------------------------- */
 
-#define AMD_OK 0		/* success */
-#define AMD_OUT_OF_MEMORY -1	/* malloc failed, or problem too large */
-#define AMD_INVALID -2		/* input arguments are not valid */
-#define AMD_OK_BUT_JUMBLED 1	/* input matrix is OK for amd_order, but
+#define AMD_OK 0           /* success */
+#define AMD_OUT_OF_MEMORY -1        /* malloc failed, or problem too large */
+#define AMD_INVALID -2              /* input arguments are not valid */
+#define AMD_OK_BUT_JUMBLED 1        /* input matrix is OK for amd_order, but
     * columns were not sorted, and/or duplicate entries were present.  AMD had
     * to do extra work before ordering the matrix.  This is a warning, not an
     * error.  */
@@ -384,25 +372,25 @@ void amd_l_info     (double Info [ ]) ;
  * As an example, to test if the version you are using is 1.2 or later:
  *
  * #ifdef AMD_VERSION
- *	if (AMD_VERSION >= AMD_VERSION_CODE (1,2)) ...
+ *       if (AMD_VERSION >= AMD_VERSION_CODE (1,2)) ...
  * #endif
  *
  * This also works during compile-time:
  *
- *	#if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE (1,2))
- *	    printf ("This is version 1.2 or later\n") ;
- *	#else
- *	    printf ("This is an early version\n") ;
- *	#endif
+ *       #if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE (1,2))
+ *           printf ("This is version 1.2 or later\n") ;
+ *       #else
+ *           printf ("This is an early version\n") ;
+ *       #endif
  *
  * Versions 1.1 and earlier of AMD do not include a #define'd version number.
  */
 
-#define AMD_DATE "May 31, 2007"
+#define AMD_DATE "Oct 10, 2014"
 #define AMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
 #define AMD_MAIN_VERSION 2
-#define AMD_SUB_VERSION 2
-#define AMD_SUBSUB_VERSION 0
+#define AMD_SUB_VERSION 4
+#define AMD_SUBSUB_VERSION 1
 #define AMD_VERSION AMD_VERSION_CODE(AMD_MAIN_VERSION,AMD_SUB_VERSION)
 
 #ifdef __cplusplus
diff --git a/AMD/Include/amd_internal.h b/AMD/Include/amd_internal.h
index d515b64..6730527 100644
--- a/AMD/Include/amd_internal.h
+++ b/AMD/Include/amd_internal.h
@@ -3,29 +3,14 @@
 /* ========================================================================= */
 
 /* ------------------------------------------------------------------------- */
-/* AMD, Copyright (c) Timothy A. Davis,					     */
+/* AMD, Copyright (c) Timothy A. Davis,                                      */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* This file is for internal use in AMD itself, and does not normally need to
  * be included in user code (it is included in UMFPACK, however).   All others
  * should use amd.h instead.
- *
- * The following compile-time definitions affect how AMD is compiled.
- *
- *	-DNPRINT
- *
- *	    Disable all printing.  stdio.h will not be included.  Printing can
- *	    be re-enabled at run-time by setting the global pointer amd_printf
- *	    to printf (or mexPrintf for a MATLAB mexFunction).
- *
- *	-DNMALLOC
- *
- *	    No memory manager is defined at compile-time.  You MUST define the
- *	    function pointers amd_malloc, amd_free, amd_realloc, and
- *	    amd_calloc at run-time for AMD to work properly.
  */
 
 /* ========================================================================= */
@@ -154,21 +139,25 @@
 
 /* largest value of size_t */
 #ifndef SIZE_T_MAX
+#ifdef SIZE_MAX
+/* C99 only */
+#define SIZE_T_MAX SIZE_MAX
+#else
 #define SIZE_T_MAX ((size_t) (-1))
 #endif
+#endif
 
 /* ------------------------------------------------------------------------- */
-/* integer type for AMD: int or UF_long */
+/* integer type for AMD: int or SuiteSparse_long */
 /* ------------------------------------------------------------------------- */
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "amd.h"
 
 #if defined (DLONG) || defined (ZLONG)
 
-#define Int UF_long
-#define ID  UF_long_id
-#define Int_MAX UF_long_max
+#define Int SuiteSparse_long
+#define ID  SuiteSparse_long_id
+#define Int_MAX SuiteSparse_long_max
 
 #define AMD_order amd_l_order
 #define AMD_defaults amd_l_defaults
@@ -208,19 +197,6 @@
 
 #endif
 
-/* ========================================================================= */
-/* === PRINTF macro ======================================================== */
-/* ========================================================================= */
-
-/* All output goes through the PRINTF macro.  */
-#define PRINTF(params) { if (amd_printf != NULL) (void) amd_printf params ; }
-
-/* ------------------------------------------------------------------------- */
-/* AMD routine definitions (user-callable) */
-/* ------------------------------------------------------------------------- */
-
-#include "amd.h"
-
 /* ------------------------------------------------------------------------- */
 /* AMD routine definitions (not user-callable) */
 /* ------------------------------------------------------------------------- */
@@ -331,11 +307,11 @@ GLOBAL void AMD_dump
 #define ASSERT(expression) (assert (expression))
 #endif
 
-#define AMD_DEBUG0(params) { PRINTF (params) ; }
-#define AMD_DEBUG1(params) { if (AMD_debug >= 1) PRINTF (params) ; }
-#define AMD_DEBUG2(params) { if (AMD_debug >= 2) PRINTF (params) ; }
-#define AMD_DEBUG3(params) { if (AMD_debug >= 3) PRINTF (params) ; }
-#define AMD_DEBUG4(params) { if (AMD_debug >= 4) PRINTF (params) ; }
+#define AMD_DEBUG0(params) { SUITESPARSE_PRINTF (params) ; }
+#define AMD_DEBUG1(params) { if (AMD_debug >= 1) SUITESPARSE_PRINTF (params) ; }
+#define AMD_DEBUG2(params) { if (AMD_debug >= 2) SUITESPARSE_PRINTF (params) ; }
+#define AMD_DEBUG3(params) { if (AMD_debug >= 3) SUITESPARSE_PRINTF (params) ; }
+#define AMD_DEBUG4(params) { if (AMD_debug >= 4) SUITESPARSE_PRINTF (params) ; }
 
 #else
 
diff --git a/AMD/Lib/GNUmakefile b/AMD/Lib/GNUmakefile
index f59b1d6..8e6d899 100644
--- a/AMD/Lib/GNUmakefile
+++ b/AMD/Lib/GNUmakefile
@@ -2,11 +2,11 @@
 # AMD Makefile for compiling on Unix systems (for GNU make only)
 #-------------------------------------------------------------------------------
 
-default: ../Lib/libamd.a
+default: libamd.a
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(CONFIG) -I../Include -I../../UFconfig
+C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config
 
 #-------------------------------------------------------------------------------
 # source files
@@ -15,9 +15,9 @@ C = $(CC) $(CFLAGS) $(CONFIG) -I../Include -I../../UFconfig
 AMD = amd_aat amd_1 amd_2 amd_dump amd_postorder amd_post_tree amd_defaults \
 	amd_order amd_control amd_info amd_valid amd_preprocess
 
-UFCONFIG = ../../UFconfig/UFconfig.h
+CONFIG = ../../SuiteSparse_config/SuiteSparse_config.h
 
-INC = ../Include/amd.h ../Include/amd_internal.h $(UFCONFIG)
+INC = ../Include/amd.h ../Include/amd_internal.h $(CONFIG)
 
 #-------------------------------------------------------------------------------
 # object files for each version
@@ -30,9 +30,6 @@ AMDL = $(addsuffix .o, $(subst amd_,amd_l_,$(AMD)))
 # compile each int and long routine (with no real/complex version)
 #-------------------------------------------------------------------------------
 
-amd_global.o: ../Source/amd_global.c $(INC)
-	$(C) -c $< -o $@
-
 amd_i_%.o: ../Source/amd_%.c $(INC)
 	$(C) -DDINT -c $< -o $@
 
@@ -43,15 +40,15 @@ amd_l_%.o: ../Source/amd_%.c $(INC)
 # Create the libamd.a library (C versions only)
 #-------------------------------------------------------------------------------
 
-../Lib/libamd.a: amd_global.o $(AMDI) $(AMDL)
-	$(AR) ../Lib/libamd.a $^
-	- $(RANLIB) ../Lib/libamd.a
+libamd.a: $(AMDI) $(AMDL)
+	$(ARCHIVE) libamd.a $^
+	- $(RANLIB) libamd.a
 
 #-------------------------------------------------------------------------------
 # compile the Fortran versions and the libamdf77.a library
 #-------------------------------------------------------------------------------
 
-fortran: ../Lib/libamdf77.a
+fortran: libamdf77.a
 
 AMDF77 = amd.o amdbar.o
 
@@ -61,9 +58,9 @@ amd.o: ../Source/amd.f
 amdbar.o: ../Source/amdbar.f
 	$(F77) $(F77FLAGS) -c ../Source/amdbar.f -o amdbar.o
 
-../Lib/libamdf77.a: $(AMDF77)
-	$(AR) ../Lib/libamdf77.a $^
-	- $(RANLIB) ../Lib/libamdf77.a
+libamdf77.a: $(AMDF77)
+	$(ARCHIVE) libamdf77.a $^
+	- $(RANLIB) libamdf77.a
 
 #-------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
@@ -75,4 +72,4 @@ clean:
 purge: distclean
 
 distclean: clean
-	- $(RM) ../Lib/libamd.a ../Lib/libamdf77.a
+	- $(RM) libamd.a libamdf77.a
diff --git a/AMD/Lib/Makefile b/AMD/Lib/Makefile
index 8e0f197..ac3424e 100644
--- a/AMD/Lib/Makefile
+++ b/AMD/Lib/Makefile
@@ -8,9 +8,9 @@
 
 default: everything
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(CONFIG) -I../Include -I../../UFconfig
+C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config
 
 everything:
 	$(C) -DDINT -c ../Source/amd_aat.c -o amd_i_aat.o
@@ -26,7 +26,7 @@ everything:
 	$(C) -DDINT -c ../Source/amd_valid.c -o amd_i_valid.o
 	$(C) -DDINT -c ../Source/amd_preprocess.c -o amd_i_preprocess.o
 	$(C) -DDLONG -c ../Source/amd_aat.c -o amd_l_aat.o
-	$(C) -DDLONG -c ../Source/amd_1.c -o ../Source/amd_l_1.o
+	$(C) -DDLONG -c ../Source/amd_1.c -o amd_l_1.o
 	$(C) -DDLONG -c ../Source/amd_2.c -o amd_l_2.o
 	$(C) -DDLONG -c ../Source/amd_dump.c -o amd_l_dump.o
 	$(C) -DDLONG -c ../Source/amd_postorder.c -o amd_l_postorder.o
@@ -37,13 +37,13 @@ everything:
 	$(C) -DDLONG -c ../Source/amd_info.c -o amd_l_info.o
 	$(C) -DDLONG -c ../Source/amd_valid.c -o amd_l_valid.o
 	$(C) -DDLONG -c ../Source/amd_preprocess.c -o amd_l_preprocess.o
-	$(C) -c ../Source/amd_global.c
-	$(AR) ../Lib/libamd.a amd_i_aat.o amd_i_1.o amd_i_2.o amd_i_dump.o \
+	$(ARCHIVE)  ../Lib/libamd.a \
+            amd_i_aat.o amd_i_1.o amd_i_2.o amd_i_dump.o \
 	    amd_i_postorder.o amd_i_post_tree.o amd_i_defaults.o amd_i_order.o \
 	    amd_i_control.o amd_i_info.o amd_i_valid.o amd_l_aat.o amd_l_1.o \
 	    amd_l_2.o amd_l_dump.o amd_l_postorder.o amd_l_post_tree.o \
 	    amd_l_defaults.o amd_l_order.o amd_l_control.o amd_l_info.o \
-	    amd_l_valid.o amd_i_preprocess.o amd_l_preprocess.o amd_global.o
+	    amd_l_valid.o amd_i_preprocess.o amd_l_preprocess.o
 	- $(RANLIB) ../Lib/libamd.a
 
 #-------------------------------------------------------------------------------
@@ -53,7 +53,7 @@ everything:
 fortran:
 	$(F77) $(F77FLAGS) -c ../Source/amd.f -o amd.o
 	$(F77) $(F77FLAGS) -c ../Source/amdbar.f -o amdbar.o
-	$(AR) ../Lib/libamdf77.a amd.o amdbar.o
+	$(ARCHIVE)  ../Lib/libamdf77.a amd.o amdbar.o
 	- $(RANLIB) ../Lib/libamdf77.a
 
 #-------------------------------------------------------------------------------
diff --git a/AMD/MATLAB/Contents.m b/AMD/MATLAB/Contents.m
index 8d43c30..c9c5eec 100644
--- a/AMD/MATLAB/Contents.m
+++ b/AMD/MATLAB/Contents.m
@@ -13,7 +13,6 @@
 % Example:
 %   p = amd2 (A) ;
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, and Iain S. Duff. 
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, and Iain S. Duff. 
 
 help Contents
diff --git a/AMD/MATLAB/Makefile b/AMD/MATLAB/Makefile
deleted file mode 100644
index 9abad3c..0000000
--- a/AMD/MATLAB/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-#------------------------------------------------------------------------------
-# Makefile for the AMD MATLAB mexFunction
-#------------------------------------------------------------------------------
-
-default: amd2
-
-include ../../UFconfig/UFconfig.mk
-
-AMD = ../Lib/libamd.a
-
-I = -I../Include -I../../UFconfig
-
-INC = ../Include/amd.h ../Include/amd_internal.h ../../UFconfig/UFconfig.h
-
-SRC = ../Source/amd_1.c ../Source/amd_2.c ../Source/amd_aat.c \
-    ../Source/amd_control.c ../Source/amd_defaults.c ../Source/amd_dump.c \
-    ../Source/amd_global.c ../Source/amd_info.c ../Source/amd_order.c \
-    ../Source/amd_postorder.c ../Source/amd_post_tree.c \
-    ../Source/amd_preprocess.c ../Source/amd_valid.c
-
-amd2: $(SRC) $(INC) amd_mex.c
-	$(MEX) -DDLONG $(I) -output amd2 amd_mex.c $(SRC)
-
-#------------------------------------------------------------------------------
-# Remove all but the files in the original distribution
-#------------------------------------------------------------------------------
-
-clean:
-	- $(RM) $(CLEAN)
-
-purge: distclean
-
-distclean: clean
-	- $(RM) amd2.mex*
diff --git a/AMD/MATLAB/amd2.m b/AMD/MATLAB/amd2.m
index 41aa874..60e09d5 100644
--- a/AMD/MATLAB/amd2.m
+++ b/AMD/MATLAB/amd2.m
@@ -63,12 +63,8 @@ function [p, Info] = amd2 (A, Control)					    %#ok
 %
 % See also AMD, COLMMD, COLAMD, COLPERM, SYMAMD, SYMMMD, SYMRCM.
 
-% --------------------------------------------------------------------------
-% Copyright 1994-2007, Tim Davis, University of Florida
+% Copyright 1994-2012, Timothy A. Davis, http://www.suitesparse.com,
 % Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.
-% email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.
-% web: http://www.cise.ufl.edu/research/sparse/amd
-% --------------------------------------------------------------------------
 %
 %    Acknowledgements: This work was supported by the National Science
 %       Foundation, under grants ASC-9111263, DMS-9223088, and CCR-0203270.
diff --git a/AMD/MATLAB/amd_demo.m b/AMD/MATLAB/amd_demo.m
index e889e01..06deba2 100644
--- a/AMD/MATLAB/amd_demo.m
+++ b/AMD/MATLAB/amd_demo.m
@@ -8,8 +8,7 @@ function amd_demo
 %
 % See also: amd, amd2, amd_make
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, and Iain S. Duff. 
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, and Iain S. Duff. 
 
 % This orders the same matrix as the ANSI C demo, amd_demo.c.  It includes an
 % additional analysis of the matrix via MATLAB's symbfact routine.
@@ -24,9 +23,7 @@ A = spconvert (can_24) ;
 
 n = size (A,1) ;
 
-figure (1)
 clf
-hold off
 subplot (2,2,1) ;
 spy (A)
 title ('HB/can24 matrix') ;
diff --git a/AMD/MATLAB/amd_install.m b/AMD/MATLAB/amd_install.m
index 844fc85..6b9f362 100644
--- a/AMD/MATLAB/amd_install.m
+++ b/AMD/MATLAB/amd_install.m
@@ -7,8 +7,7 @@ function amd_install
 %
 % See also amd, amd2.
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, and Iain S. Duff. 
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, and Iain S. Duff. 
 
 % This orders the same matrix as the ANSI C demo, amd_demo.c.  It includes an
 
diff --git a/AMD/MATLAB/amd_make.m b/AMD/MATLAB/amd_make.m
index 18e5b50..e43ec87 100644
--- a/AMD/MATLAB/amd_make.m
+++ b/AMD/MATLAB/amd_make.m
@@ -6,8 +6,7 @@ function amd_make
 %
 % See also amd, amd2.
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, and Iain S. Duff. 
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, and Iain S. Duff. 
 
 details = 0 ;	    % 1 if details of each command are to be printed
 
@@ -16,17 +15,29 @@ if (~isempty (strfind (computer, '64')))
     d = '-largeArrayDims' ;
 end
 
-i = sprintf ('-I..%sInclude -I..%s..%sUFconfig', filesep, filesep, filesep) ;
-cmd = sprintf ('mex -O %s -DDLONG -output amd2 %s amd_mex.c', d, i) ;
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    d = ['-silent ' d] ;
+end
+
+i = sprintf ('-I../Include -I../../SuiteSparse_config') ;
+cmd = sprintf ('mex -O %s -DDLONG -output amd2 %s amd_mex.c %s', d, i, ...
+    '../../SuiteSparse_config/SuiteSparse_config.c') ;
 files = {'amd_order', 'amd_dump', 'amd_postorder', 'amd_post_tree', ...
     'amd_aat', 'amd_2', 'amd_1', 'amd_defaults', 'amd_control', ...
-    'amd_info', 'amd_valid', 'amd_global', 'amd_preprocess' } ;
+    'amd_info', 'amd_valid', 'amd_preprocess' } ;
 for i = 1 : length (files)
-    cmd = sprintf ('%s ..%sSource%s%s.c', cmd, filesep, filesep, files {i}) ;
+    cmd = sprintf ('%s ../Source/%s.c', cmd, files {i}) ;
 end
 if (details)
     fprintf ('%s\n', cmd) ;
 end
+
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    cmd = [cmd ' -lrt'] ;
+end
+
 eval (cmd) ;
 
 fprintf ('AMD successfully compiled.\n') ;
diff --git a/AMD/MATLAB/amd_mex.c b/AMD/MATLAB/amd_mex.c
index 1d36c7b..89fdc9b 100644
--- a/AMD/MATLAB/amd_mex.c
+++ b/AMD/MATLAB/amd_mex.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /*
@@ -30,7 +29,7 @@
 #include "amd.h"
 #include "mex.h"
 #include "matrix.h"
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 void mexFunction
 (
@@ -40,7 +39,7 @@ void mexFunction
     const mxArray *pargin [ ]
 )
 {
-    UF_long i, m, n, *Ap, *Ai, *P, nc, result, spumoni, full ;
+    Long i, m, n, *Ap, *Ai, *P, nc, result, spumoni, full ;
     double *Pout, *InfoOut, Control [AMD_CONTROL], Info [AMD_INFO], *ControlIn ;
     mxArray *A ;
 
@@ -48,12 +47,6 @@ void mexFunction
     /* get control parameters */
     /* --------------------------------------------------------------------- */
 
-    amd_malloc = mxMalloc ;
-    amd_free = mxFree ;
-    amd_calloc = mxCalloc ;
-    amd_realloc = mxRealloc ;
-    amd_printf = mexPrintf ;
-
     spumoni = 0 ;
     if (nargin == 0)
     {
@@ -113,7 +106,7 @@ void mexFunction
     /* allocate workspace for output permutation */
     /* --------------------------------------------------------------------- */
 
-    P = mxMalloc ((n+1) * sizeof (UF_long)) ;
+    P = mxMalloc ((n+1) * sizeof (Long)) ;
 
     /* --------------------------------------------------------------------- */
     /* if A is full, convert to a sparse matrix */
@@ -129,8 +122,8 @@ void mexFunction
 	}
 	mexCallMATLAB (1, &A, 1, (mxArray **) pargin, "sparse") ;
     }
-    Ap = (UF_long *) mxGetJc (A) ;
-    Ai = (UF_long *) mxGetIr (A) ;
+    Ap = (Long *) mxGetJc (A) ;
+    Ai = (Long *) mxGetIr (A) ;
     if (spumoni > 0)
     {
 	mexPrintf ("    input matrix A has %d nonzero entries\n", Ap [n]) ;
diff --git a/AMD/Makefile b/AMD/Makefile
index ce727aa..0b1e01b 100644
--- a/AMD/Makefile
+++ b/AMD/Makefile
@@ -2,24 +2,20 @@
 # AMD Makefile (for GNU Make or original make)
 #------------------------------------------------------------------------------
 
-default: demo
+VERSION = 2.4.1
 
-include ../UFconfig/UFconfig.mk
+default: all
 
-# Compile all C code, including the C-callable routines.
-# Do not compile the FORTRAN versions, or MATLAB interface.
-demo:
-	( cd Lib    ; $(MAKE) )
-	( cd Demo   ; $(MAKE) )
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+demos: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
-# Do not compile the FORTRAN versions.
+# Compile all C code.  Do not compile the FORTRAN versions.
 all:
 	( cd Lib    ; $(MAKE) )
 	( cd Demo   ; $(MAKE) )
-	( cd MATLAB ; $(MAKE) )
 
-# compile just the C-callable libraries (not mexFunctions or Demos)
+# compile just the C-callable libraries (not Demos)
 library:
 	( cd Lib    ; $(MAKE) )
 
@@ -37,20 +33,20 @@ cross:
 clean:
 	( cd Lib    ; $(MAKE) clean )
 	( cd Demo   ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) )
 	( cd Doc    ; $(MAKE) clean )
 
 # clean, and then remove compiled programs and library archives
 purge:
 	( cd Lib    ; $(MAKE) purge )
 	( cd Demo   ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) ; $(RM) *.mex* )
 	( cd Doc    ; $(MAKE) purge )
 
 distclean: purge
 
 # create PDF documents for the original distribution
-doc:
+docs:
 	( cd Doc    ; $(MAKE) )
 
 # get ready for distribution
@@ -62,6 +58,16 @@ ccode: library
 
 lib: library
 
-# compile the MATLAB mexFunction
-mex:
-	( cd MATLAB ; $(MAKE) )
+# install AMD
+install:
+	$(CP) Lib/libamd.a $(INSTALL_LIB)/libamd.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libamd.$(VERSION).a libamd.a )
+	$(CP) Include/amd.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libamd*
+	chmod 644 $(INSTALL_INCLUDE)/amd.h
+
+# uninstall AMD
+uninstall:
+	$(RM) $(INSTALL_LIB)/libamd*.a
+	$(RM) $(INSTALL_INCLUDE)/amd.h
+
diff --git a/AMD/README.txt b/AMD/README.txt
index c6fd2e0..f6c970d 100644
--- a/AMD/README.txt
+++ b/AMD/README.txt
@@ -1,32 +1,30 @@
-AMD Version 2.2, Copyright (c) 2007 by Timothy A.
-Davis, Patrick R. Amestoy, and Iain S. Duff.  All Rights Reserved.
-AMD is available under alternate licences; contact T. Davis for details.
+AMD, Copyright (c) 2009-2013 by Timothy A. Davis (http://www.suitesparse.com),
+Patrick R. Amestoy, and Iain S. Duff.  All Rights Reserved.  AMD is available
+under alternate licences; contact T. Davis for details.
 
 AMD:  a set of routines for permuting sparse matrices prior to
     factorization.  Includes a version in C, a version in Fortran, and a MATLAB
     mexFunction.
 
-Requires UFconfig, in the ../UFconfig directory relative to this directory.
+Requires SuiteSparse_config, in the ../SuiteSparse_config directory relative to
+this directory.
 
 Quick start (Unix, or Windows with Cygwin):
 
     To compile, test, and install AMD, you may wish to first configure the
-    installation by editting the ../UFconfig/UFconfig.mk file.  Next, cd to this
-    directory (AMD) and type "make" (or "make lib" if you do not have MATLAB).
-    To compile and run a demo program for the Fortran version, type
-    "make fortran".  When done, type "make clean" to remove unused *.o files
-    (keeps the compiled libraries and demo programs).  See the User Guide
-    (Doc/AMD_UserGuide.pdf), or ../UFconfig/UFconfig.mk for more details.
+    installation by editting the ../SuiteSparse_config/SuiteSparse_config.mk
+    file.  Next, cd to this directory (AMD) and type "make" (or "make lib" if
+    you do not have MATLAB).  To compile and run a demo program for the Fortran
+    version, type "make fortran".  When done, type "make clean" to remove
+    unused *.o files (keeps the compiled libraries and demo programs).  See the
+    User Guide (Doc/AMD_UserGuide.pdf), or
+    ../SuiteSparse_config/SuiteSparse_config.mk for more details.
 
 Quick start (for MATLAB users);
 
     To compile, test, and install the AMD mexFunction, cd to the
     AMD/MATLAB directory and type amd_make at the MATLAB prompt.
 
-If you have MATLAB 7.2 or earlier and use "make mex", you must first edit
-UFconfig/UFconfig.h to remove the "-largeArrayDims" option from the MEX command
-(or just use amd_make.m inside MATLAB).
-
 -------------------------------------------------------------------------------
 
 AMD License:
@@ -61,7 +59,7 @@ AMD License:
 
 Availability:
 
-    http://www.cise.ufl.edu/research/sparse/amd
+    http://www.suitesparse.com
 
 -------------------------------------------------------------------------------
 
@@ -78,7 +76,7 @@ Description:
 
 Authors:
 
-    Timothy A. Davis (davis at cise.ufl.edu), University of Florida.
+    Timothy A. Davis (DrTimothyAldenDavis at gmail.com)
     Patrick R. Amestory, ENSEEIHT, Toulouse, France.
     Iain S. Duff, Rutherford Appleton Laboratory, UK.
 
@@ -171,7 +169,7 @@ Files and directories in the AMD distribution:
     amd_demo2.c			C demo program for AMD, jumbled matrix
     amd_demo2.out		output of amd_demo2.c
 
-    amd_l_demo.c		C demo program for AMD (UF_long version)
+    amd_l_demo.c		C demo program for AMD (long integer version)
     amd_l_demo.out		output of amd_l_demo.c
 
     amd_simple.c		simple C demo program for AMD
diff --git a/AMD/Source/amd_1.c b/AMD/Source/amd_1.c
index 30cb277..2be486e 100644
--- a/AMD/Source/amd_1.c
+++ b/AMD/Source/amd_1.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* AMD_1: Construct A+A' for a sparse matrix A and perform the AMD ordering.
diff --git a/AMD/Source/amd_2.c b/AMD/Source/amd_2.c
index 97b4f7a..f144722 100644
--- a/AMD/Source/amd_2.c
+++ b/AMD/Source/amd_2.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* AMD_2:  performs the AMD ordering on a symmetric sparse matrix A, followed
@@ -120,9 +119,9 @@ GLOBAL void AMD_2
  *	ouput.  Many of these functions are also provided by the Fortran
  *	Harwell Subroutine Library routine MC47A.
  *
- * (6) both int and UF_long versions are provided.  In the descriptions below
- *	and integer is and int or UF_long depending on which version is
- *	being used.
+ * (6) both int and SuiteSparse_long versions are provided.  In the
+ *      descriptions below and integer is and int or SuiteSparse_long depending
+ *      on which version is being used.
 
  **********************************************************************
  ***** CAUTION:  ARGUMENTS ARE NOT CHECKED FOR ERRORS ON INPUT.  ******
@@ -495,8 +494,9 @@ GLOBAL void AMD_2
  * nvj:		the number of variables in a supervariable j (= Nv [j])
  * nvpiv:	number of pivots in current element
  * slenme:	number of variables in variable list of pivotal variable
- * wbig:	= INT_MAX - n for the int version, UF_long_max - n for the
- *		    UF_long version.  wflg is not allowed to be >= wbig.
+ * wbig:	= (INT_MAX - n) for the int version, (SuiteSparse_long_max - n)
+ *                  for the SuiteSparse_long version.  wflg is not allowed to
+ *                  be >= wbig.
  * we:		W [e]
  * wflg:	used for flagging the W array.  See description of Iw.
  * wnvi:	wflg - Nv [i]
diff --git a/AMD/Source/amd_aat.c b/AMD/Source/amd_aat.c
index 4f02b75..67c03f7 100644
--- a/AMD/Source/amd_aat.c
+++ b/AMD/Source/amd_aat.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* AMD_aat:  compute the symmetry of the pattern of A, and count the number of
diff --git a/AMD/Source/amd_control.c b/AMD/Source/amd_control.c
index c2aec9f..f6a5e9a 100644
--- a/AMD/Source/amd_control.c
+++ b/AMD/Source/amd_control.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable.  Prints the control parameters for AMD.  See amd.h
@@ -35,17 +34,18 @@ GLOBAL void AMD_control
 	aggressive = AMD_DEFAULT_AGGRESSIVE ;
     }
 
-    PRINTF (("\nAMD version %d.%d.%d, %s: approximate minimum degree ordering\n"
+    SUITESPARSE_PRINTF ((
+        "\nAMD version %d.%d.%d, %s: approximate minimum degree ordering\n"
 	"    dense row parameter: %g\n", AMD_MAIN_VERSION, AMD_SUB_VERSION,
 	AMD_SUBSUB_VERSION, AMD_DATE, alpha)) ;
 
     if (alpha < 0)
     {
-	PRINTF (("    no rows treated as dense\n")) ;
+	SUITESPARSE_PRINTF (("    no rows treated as dense\n")) ;
     }
     else
     {
-	PRINTF ((
+	SUITESPARSE_PRINTF ((
 	"    (rows with more than max (%g * sqrt (n), 16) entries are\n"
 	"    considered \"dense\", and placed last in output permutation)\n",
 	alpha)) ;
@@ -53,12 +53,12 @@ GLOBAL void AMD_control
 
     if (aggressive)
     {
-	PRINTF (("    aggressive absorption:  yes\n")) ;
+	SUITESPARSE_PRINTF (("    aggressive absorption:  yes\n")) ;
     }
     else
     {
-	PRINTF (("    aggressive absorption:  no\n")) ;
+	SUITESPARSE_PRINTF (("    aggressive absorption:  no\n")) ;
     }
 
-    PRINTF (("    size of AMD integer: %d\n\n", sizeof (Int))) ;
+    SUITESPARSE_PRINTF (("    size of AMD integer: %d\n\n", sizeof (Int))) ;
 }
diff --git a/AMD/Source/amd_defaults.c b/AMD/Source/amd_defaults.c
index ffe3f4b..b9a9079 100644
--- a/AMD/Source/amd_defaults.c
+++ b/AMD/Source/amd_defaults.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable.  Sets default control parameters for AMD.  See amd.h
diff --git a/AMD/Source/amd_dump.c b/AMD/Source/amd_dump.c
index 89d67b8..e58aaf5 100644
--- a/AMD/Source/amd_dump.c
+++ b/AMD/Source/amd_dump.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Debugging routines for AMD.  Not used if NDEBUG is not defined at compile-
diff --git a/AMD/Source/amd_global.c b/AMD/Source/amd_global.c
index 93f2b45..453e970 100644
--- a/AMD/Source/amd_global.c
+++ b/AMD/Source/amd_global.c
@@ -5,80 +5,10 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
-#include <stdlib.h>
-
-#ifdef MATLAB_MEX_FILE
-#include "mex.h"
-#include "matrix.h"
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* ========================================================================= */
-/* === Default AMD memory manager ========================================== */
-/* ========================================================================= */
-
-/* The user can redefine these global pointers at run-time to change the memory
- * manager used by AMD.  AMD only uses malloc and free; realloc and calloc are
- * include for completeness, in case another package wants to use the same
- * memory manager as AMD.
- *
- * If compiling as a MATLAB mexFunction, the default memory manager is mxMalloc.
- * You can also compile AMD as a standard ANSI-C library and link a mexFunction
- * against it, and then redefine these pointers at run-time, in your
- * mexFunction.
- *
- * If -DNMALLOC is defined at compile-time, no memory manager is specified at
- * compile-time.  You must then define these functions at run-time, before
- * calling AMD, for AMD to work properly.
+/* In prior versions of AMD, this file declared the amd_malloc, amd_free,
+   amd_realloc, amd_calloc, and amd_printf functions.  They are now replaced
+   by functions defined in SuiteSparse_config/SuiteSparse_config.c.
  */
-
-#ifndef NMALLOC
-#ifdef MATLAB_MEX_FILE
-/* MATLAB mexFunction: */
-void *(*amd_malloc) (size_t) = mxMalloc ;
-void (*amd_free) (void *) = mxFree ;
-void *(*amd_realloc) (void *, size_t) = mxRealloc ;
-void *(*amd_calloc) (size_t, size_t) = mxCalloc ;
-#else
-/* standard ANSI-C: */
-void *(*amd_malloc) (size_t) = malloc ;
-void (*amd_free) (void *) = free ;
-void *(*amd_realloc) (void *, size_t) = realloc ;
-void *(*amd_calloc) (size_t, size_t) = calloc ;
-#endif
-#else
-/* no memory manager defined at compile-time; you MUST define one at run-time */
-void *(*amd_malloc) (size_t) = NULL ;
-void (*amd_free) (void *) = NULL ;
-void *(*amd_realloc) (void *, size_t) = NULL ;
-void *(*amd_calloc) (size_t, size_t) = NULL ;
-#endif
-
-/* ========================================================================= */
-/* === Default AMD printf routine ========================================== */
-/* ========================================================================= */
-
-/* The user can redefine this global pointer at run-time to change the printf
- * routine used by AMD.  If NULL, no printing occurs.  
- *
- * If -DNPRINT is defined at compile-time, stdio.h is not included.  Printing
- * can then be enabled at run-time by setting amd_printf to a non-NULL function.
- */
-
-#ifndef NPRINT
-#ifdef MATLAB_MEX_FILE
-int (*amd_printf) (const char *, ...) = mexPrintf ;
-#else
-#include <stdio.h>
-int (*amd_printf) (const char *, ...) = printf ;
-#endif
-#else
-int (*amd_printf) (const char *, ...) = NULL ;
-#endif
diff --git a/AMD/Source/amd_info.c b/AMD/Source/amd_info.c
index 0a842ad..062651f 100644
--- a/AMD/Source/amd_info.c
+++ b/AMD/Source/amd_info.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable.  Prints the output statistics for AMD.  See amd.h
@@ -15,7 +14,7 @@
 
 #include "amd_internal.h"
 
-#define PRI(format,x) { if (x >= 0) { PRINTF ((format, x)) ; }}
+#define PRI(format,x) { if (x >= 0) { SUITESPARSE_PRINTF ((format, x)) ; }}
 
 GLOBAL void AMD_info
 (
@@ -24,7 +23,7 @@ GLOBAL void AMD_info
 {
     double n, ndiv, nmultsubs_ldl, nmultsubs_lu, lnz, lnzd ;
 
-    PRINTF (("\nAMD version %d.%d.%d, %s, results:\n",
+    SUITESPARSE_PRINTF (("\nAMD version %d.%d.%d, %s, results:\n",
 	AMD_MAIN_VERSION, AMD_SUB_VERSION, AMD_SUBSUB_VERSION, AMD_DATE)) ;
 
     if (!Info)
@@ -40,26 +39,26 @@ GLOBAL void AMD_info
     lnzd = (n >= 0 && lnz >= 0) ? (n + lnz) : (-1) ;
 
     /* AMD return status */
-    PRINTF (("    status: ")) ;
+    SUITESPARSE_PRINTF (("    status: ")) ;
     if (Info [AMD_STATUS] == AMD_OK)
     {
-	PRINTF (("OK\n")) ;
+	SUITESPARSE_PRINTF (("OK\n")) ;
     }
     else if (Info [AMD_STATUS] == AMD_OUT_OF_MEMORY)
     {
-	PRINTF (("out of memory\n")) ;
+	SUITESPARSE_PRINTF (("out of memory\n")) ;
     }
     else if (Info [AMD_STATUS] == AMD_INVALID)
     {
-	PRINTF (("invalid matrix\n")) ;
+	SUITESPARSE_PRINTF (("invalid matrix\n")) ;
     }
     else if (Info [AMD_STATUS] == AMD_OK_BUT_JUMBLED)
     {
-	PRINTF (("OK, but jumbled\n")) ;
+	SUITESPARSE_PRINTF (("OK, but jumbled\n")) ;
     }
     else
     {
-	PRINTF (("unknown\n")) ;
+	SUITESPARSE_PRINTF (("unknown\n")) ;
     }
 
     /* statistics about the input matrix */
@@ -82,7 +81,7 @@ GLOBAL void AMD_info
 	Info [AMD_NCMPA]) ;
 
     /* statistics about the ordering quality */
-    PRINTF (("\n"
+    SUITESPARSE_PRINTF (("\n"
 	"    The following approximate statistics are for a subsequent\n"
 	"    factorization of A(P,P) + A(P,P)'.  They are slight upper\n"
 	"    bounds if there are no dense rows/columns in A+A', and become\n"
@@ -105,7 +104,7 @@ GLOBAL void AMD_info
 
     if (n >= 0 && ndiv >= 0 && nmultsubs_ldl >= 0 && nmultsubs_lu >= 0)
     {
-	PRINTF (("\n"
+	SUITESPARSE_PRINTF (("\n"
 	"    chol flop count for real A, sqrt counted as 1 flop: %.20g\n"
 	"    LDL' flop count for real A:                         %.20g\n"
 	"    LDL' flop count for complex A:                      %.20g\n"
diff --git a/AMD/Source/amd_order.c b/AMD/Source/amd_order.c
index d3f6853..7f199ae 100644
--- a/AMD/Source/amd_order.c
+++ b/AMD/Source/amd_order.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable AMD minimum degree ordering routine.  See amd.h for
@@ -90,15 +89,15 @@ GLOBAL Int AMD_order
     }
 
     /* allocate two size-n integer workspaces */
-    Len = amd_malloc (n * sizeof (Int)) ;
-    Pinv = amd_malloc (n * sizeof (Int)) ;
+    Len  = SuiteSparse_malloc (n, sizeof (Int)) ;
+    Pinv = SuiteSparse_malloc (n, sizeof (Int)) ;
     mem += n ;
     mem += n ;
     if (!Len || !Pinv)
     {
 	/* :: out of memory :: */
-	amd_free (Len) ;
-	amd_free (Pinv) ;
+	SuiteSparse_free (Len) ;
+	SuiteSparse_free (Pinv) ;
 	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
 	return (AMD_OUT_OF_MEMORY) ;
     }
@@ -107,17 +106,17 @@ GLOBAL Int AMD_order
     {
 	/* sort the input matrix and remove duplicate entries */
 	AMD_DEBUG1 (("Matrix is jumbled\n")) ;
-	Rp = amd_malloc ((n+1) * sizeof (Int)) ;
-	Ri = amd_malloc (MAX (nz,1) * sizeof (Int)) ;
+	Rp = SuiteSparse_malloc (n+1, sizeof (Int)) ;
+	Ri = SuiteSparse_malloc (nz,  sizeof (Int)) ;
 	mem += (n+1) ;
 	mem += MAX (nz,1) ;
 	if (!Rp || !Ri)
 	{
 	    /* :: out of memory :: */
-	    amd_free (Rp) ;
-	    amd_free (Ri) ;
-	    amd_free (Len) ;
-	    amd_free (Pinv) ;
+	    SuiteSparse_free (Rp) ;
+	    SuiteSparse_free (Ri) ;
+	    SuiteSparse_free (Len) ;
+	    SuiteSparse_free (Pinv) ;
 	    if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
 	    return (AMD_OUT_OF_MEMORY) ;
 	}
@@ -161,16 +160,16 @@ GLOBAL Int AMD_order
     ok = ok && (slen < Int_MAX) ;	/* S[i] for Int i must be OK */
     if (ok)
     {
-	S = amd_malloc (slen * sizeof (Int)) ;
+	S = SuiteSparse_malloc (slen, sizeof (Int)) ;
     }
     AMD_DEBUG1 (("slen %g\n", (double) slen)) ;
     if (!S)
     {
 	/* :: out of memory :: (or problem too large) */
-	amd_free (Rp) ;
-	amd_free (Ri) ;
-	amd_free (Len) ;
-	amd_free (Pinv) ;
+	SuiteSparse_free (Rp) ;
+	SuiteSparse_free (Ri) ;
+	SuiteSparse_free (Len) ;
+	SuiteSparse_free (Pinv) ;
 	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
 	return (AMD_OUT_OF_MEMORY) ;
     }
@@ -190,11 +189,11 @@ GLOBAL Int AMD_order
     /* free the workspace */
     /* --------------------------------------------------------------------- */
 
-    amd_free (Rp) ;
-    amd_free (Ri) ;
-    amd_free (Len) ;
-    amd_free (Pinv) ;
-    amd_free (S) ;
+    SuiteSparse_free (Rp) ;
+    SuiteSparse_free (Ri) ;
+    SuiteSparse_free (Len) ;
+    SuiteSparse_free (Pinv) ;
+    SuiteSparse_free (S) ;
     if (info) Info [AMD_STATUS] = status ;
     return (status) ;	    /* successful ordering */
 }
diff --git a/AMD/Source/amd_post_tree.c b/AMD/Source/amd_post_tree.c
index b4e063d..516c95c 100644
--- a/AMD/Source/amd_post_tree.c
+++ b/AMD/Source/amd_post_tree.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Post-ordering of a supernodal elimination tree.  */
diff --git a/AMD/Source/amd_postorder.c b/AMD/Source/amd_postorder.c
index 4adcea3..e5aea7b 100644
--- a/AMD/Source/amd_postorder.c
+++ b/AMD/Source/amd_postorder.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Perform a postordering (via depth-first search) of an assembly tree. */
diff --git a/AMD/Source/amd_preprocess.c b/AMD/Source/amd_preprocess.c
index 86ea07f..a8139c3 100644
--- a/AMD/Source/amd_preprocess.c
+++ b/AMD/Source/amd_preprocess.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Sorts, removes duplicate entries, and transposes from the nonzero pattern of
diff --git a/AMD/Source/amd_valid.c b/AMD/Source/amd_valid.c
index 4d05925..609abca 100644
--- a/AMD/Source/amd_valid.c
+++ b/AMD/Source/amd_valid.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* AMD, Copyright (c) Timothy A. Davis,					     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Check if a column-form matrix is valid or not.  The matrix A is
diff --git a/BTF/Doc/ChangeLog b/BTF/Doc/ChangeLog
index ee289d4..6848f9e 100644
--- a/BTF/Doc/ChangeLog
+++ b/BTF/Doc/ChangeLog
@@ -1,3 +1,27 @@
+Oct 10, 2014: version 1.2.1
+
+    modified MATLAB/btf_make.m.  No change to C code except version number.
+
+Jun 1, 2012: version 1.2.0
+
+    * changed from UFconfig to SuiteSparse_config
+
+Dec 7, 2011: version 1.1.3
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+
+Jan 25, 2011: version 1.1.2
+
+    * minor fix to "make install"
+
+Nov 30, 2009: version 1.1.1
+
+    * added "make install" and "make uninstall"
+
+Mar 24, 2009: version 1.1.0
+
+    * tabs expanded to 8 spaces; version number updated to stay in sync with KLU
+
 Nov 1, 2007: version 1.0.1
 
     * trivial change to BTF/MATLAB/btf.c mexFunction: unused variable removed.
@@ -15,13 +39,13 @@ May 31, 2007:  version 1.0 released
     * maxwork parameter added to btf_maxtrans and btf_order
 
     * btf_maxtrans modified; now returns Q[i] = -1 if row i is unmatched;
-	code to complete the permutation moved to btf_order.  This also
-	changes the maxtrans mexFunction.
+        code to complete the permutation moved to btf_order.  This also
+        changes the maxtrans mexFunction.
 
     * btf_install added for easy MATLAB installation
 
     * illustrative recursive version of maxtrans removed (see the recursive
-	version of cs_maxtrans in CSparse instead)
+        version of cs_maxtrans in CSparse instead)
 
     * MAXTRANS_* macros renamed BTF_*
 
@@ -34,5 +58,5 @@ Dec 12, 2006: version 0.11
 Apr 30, 2006:
 
     * minor editing of comments.  dmperm.c moved to MATLAB directory, since
-	it requires MATLAB.  Version number not changed.
+        it requires MATLAB.  Version number not changed.
 
diff --git a/BTF/Doc/lesser.txt b/BTF/Doc/lesser.txt
index 8add30a..783bd5e 100644
--- a/BTF/Doc/lesser.txt
+++ b/BTF/Doc/lesser.txt
@@ -1,5 +1,5 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
 
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
      51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
@@ -10,7 +10,7 @@
  as the successor of the GNU Library Public License, version 2, hence
  the version number 2.1.]
 
-			    Preamble
+                            Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -112,7 +112,7 @@ modification follow.  Pay close attention to the difference between a
 former contains code derived from the library, whereas the latter must
 be combined with the library in order to run.
 

-		  GNU LESSER GENERAL PUBLIC LICENSE
+                  GNU LESSER GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License Agreement applies to any software library or other
@@ -432,7 +432,7 @@ decision will be guided by the two goals of preserving the free status
 of all derivatives of our free software and of promoting the sharing
 and reuse of software generally.
 
-			    NO WARRANTY
+                            NO WARRANTY
 
   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
@@ -455,7 +455,7 @@ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+                     END OF TERMS AND CONDITIONS
 

            How to Apply These Terms to Your New Libraries
 
diff --git a/BTF/Include/btf.h b/BTF/Include/btf.h
index b62d009..8435e4d 100644
--- a/BTF/Include/btf.h
+++ b/BTF/Include/btf.h
@@ -4,10 +4,10 @@
 
 /* BTF_MAXTRANS:  find a column permutation Q to give A*Q a zero-free diagonal
  * BTF_STRONGCOMP:  find a symmetric permutation P to put P*A*P' into block
- *	upper triangular form.
+ *      upper triangular form.
  * BTF_ORDER: do both of the above (btf_maxtrans then btf_strongcomp).
  *
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  */
 
@@ -36,8 +36,8 @@
  * k of the original matrix becomes column Match[k] of the permuted matrix.  In
  * MATLAB, this can be expressed as (for non-structurally singular matrices):
  *
- *	Match = maxtrans (A) ;
- *	B = A (:, Match) ;
+ *      Match = maxtrans (A) ;
+ *      B = A (:, Match) ;
  *
  * except of course here the A matrix and Match vector are all 0-based (rows
  * and columns in the range 0 to n-1), not 1-based (rows/cols in range 1 to n).
@@ -51,19 +51,19 @@
  * In the MATLAB mexFunction interface to btf_maxtrans, 1 is added to the Match
  * array to obtain a 1-based permutation.  Thus, in MATLAB where A is m-by-n:
  *
- *	q = maxtrans (A) ;	% has entries in the range 0:n
- *	q			% a column permutation (only if sprank(A)==n)
- *	B = A (:, q) ;		% permuted matrix (only if sprank(A)==n)
- *	sum (q > 0) ;		% same as "sprank (A)"
+ *      q = maxtrans (A) ;      % has entries in the range 0:n
+ *      q                       % a column permutation (only if sprank(A)==n)
+ *      B = A (:, q) ;          % permuted matrix (only if sprank(A)==n)
+ *      sum (q > 0) ;           % same as "sprank (A)"
  *
  * This behaviour differs from p = dmperm (A) in MATLAB, which returns the
  * matching as p(j)=i if row i and column j are matched, and p(j)=0 if column j
  * is unmatched.
  *
- *	p = dmperm (A) ;	% has entries in the range 0:m
- *	p                       % a row permutation (only if sprank(A)==m)
- *	B = A (p, :) ;		% permuted matrix (only if sprank(A)==m)
- *	sum (p > 0) ;		% definition of sprank (A)
+ *      p = dmperm (A) ;        % has entries in the range 0:m
+ *      p                       % a row permutation (only if sprank(A)==m)
+ *      B = A (p, :) ;          % permuted matrix (only if sprank(A)==m)
+ *      sum (p > 0) ;           % definition of sprank (A)
  *
  * This algorithm is based on the paper "On Algorithms for obtaining a maximum
  * transversal" by Iain Duff, ACM Trans. Mathematical Software, vol 7, no. 1,
@@ -93,33 +93,34 @@
 extern "C" {
 #endif
 
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
 int btf_maxtrans    /* returns # of columns matched */
 (
     /* --- input, not modified: --- */
-    int nrow,	    /* A is nrow-by-ncol in compressed column form */
+    int nrow,       /* A is nrow-by-ncol in compressed column form */
     int ncol,
-    int Ap [ ],	    /* size ncol+1 */
-    int Ai [ ],	    /* size nz = Ap [ncol] */
+    int Ap [ ],     /* size ncol+1 */
+    int Ai [ ],     /* size nz = Ap [ncol] */
     double maxwork, /* maximum amount of work to do is maxwork*nnz(A); no limit
-		     * if <= 0 */
+                     * if <= 0 */
 
     /* --- output, not defined on input --- */
     double *work,   /* work = -1 if maxwork > 0 and the total work performed
-		     * reached the maximum of maxwork*nnz(A).
-		     * Otherwise, work = the total work performed. */
+                     * reached the maximum of maxwork*nnz(A).
+                     * Otherwise, work = the total work performed. */
 
     int Match [ ],  /* size nrow.  Match [i] = j if column j matched to row i
-		     * (see above for the singular-matrix case) */
+                     * (see above for the singular-matrix case) */
 
     /* --- workspace, not defined on input or output --- */
     int Work [ ]    /* size 5*ncol */
 ) ;
 
-/* long integer version (all "int" parameters become "UF_long") */
-UF_long btf_l_maxtrans (UF_long, UF_long, UF_long *, UF_long *, double,
-    double *, UF_long *, UF_long *) ;
+/* long integer version (all "int" parameters become "SuiteSparse_long") */
+SuiteSparse_long btf_l_maxtrans (SuiteSparse_long, SuiteSparse_long,
+    SuiteSparse_long *, SuiteSparse_long *, double, double *,
+    SuiteSparse_long *, SuiteSparse_long *) ;
 
 
 /* ========================================================================== */
@@ -147,25 +148,26 @@ UF_long btf_l_maxtrans (UF_long, UF_long, UF_long *, UF_long *, double,
 int btf_strongcomp  /* return # of strongly connected components */
 (
     /* input, not modified: */
-    int n,	    /* A is n-by-n in compressed column form */
-    int Ap [ ],	    /* size n+1 */
-    int Ai [ ],	    /* size nz = Ap [n] */
+    int n,          /* A is n-by-n in compressed column form */
+    int Ap [ ],     /* size n+1 */
+    int Ai [ ],     /* size nz = Ap [n] */
 
     /* optional input, modified (if present) on output: */
-    int Q [ ],	    /* size n, input column permutation */
+    int Q [ ],      /* size n, input column permutation */
 
     /* output, not defined on input */
-    int P [ ],	    /* size n.  P [k] = j if row and column j are kth row/col
-		     * in permuted matrix. */
+    int P [ ],      /* size n.  P [k] = j if row and column j are kth row/col
+                     * in permuted matrix. */
 
-    int R [ ],	    /* size n+1.  block b is in rows/cols R[b] ... R[b+1]-1 */
+    int R [ ],      /* size n+1.  block b is in rows/cols R[b] ... R[b+1]-1 */
 
     /* workspace, not defined on input or output */
     int Work [ ]    /* size 4n */
 ) ;
 
-UF_long btf_l_strongcomp (UF_long, UF_long *, UF_long *, UF_long *, UF_long *,
-    UF_long *, UF_long *) ;
+SuiteSparse_long btf_l_strongcomp (SuiteSparse_long, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *) ;
 
 
 /* ========================================================================== */
@@ -191,28 +193,30 @@ UF_long btf_l_strongcomp (UF_long, UF_long *, UF_long *, UF_long *, UF_long *,
  * number of strongly connected components found.
  */
 
-int btf_order	    /* returns number of blocks found */
+int btf_order       /* returns number of blocks found */
 (
     /* --- input, not modified: --- */
-    int n,	    /* A is n-by-n in compressed column form */
-    int Ap [ ],	    /* size n+1 */
-    int Ai [ ],	    /* size nz = Ap [n] */
+    int n,          /* A is n-by-n in compressed column form */
+    int Ap [ ],     /* size n+1 */
+    int Ai [ ],     /* size nz = Ap [n] */
     double maxwork, /* do at most maxwork*nnz(A) work in the maximum
-		     * transversal; no limit if <= 0 */
+                     * transversal; no limit if <= 0 */
 
     /* --- output, not defined on input --- */
     double *work,   /* return value from btf_maxtrans */
-    int P [ ],	    /* size n, row permutation */
-    int Q [ ],	    /* size n, column permutation */
-    int R [ ],	    /* size n+1.  block b is in rows/cols R[b] ... R[b+1]-1 */
+    int P [ ],      /* size n, row permutation */
+    int Q [ ],      /* size n, column permutation */
+    int R [ ],      /* size n+1.  block b is in rows/cols R[b] ... R[b+1]-1 */
     int *nmatch,    /* # nonzeros on diagonal of P*A*Q */
 
     /* --- workspace, not defined on input or output --- */
     int Work [ ]    /* size 5n */
 ) ;
 
-UF_long btf_l_order (UF_long, UF_long *, UF_long *, double , double *,
-    UF_long *, UF_long *, UF_long *, UF_long *, UF_long *) ;
+SuiteSparse_long btf_l_order (SuiteSparse_long, SuiteSparse_long *,
+    SuiteSparse_long *, double , double *, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    SuiteSparse_long *) ;
 
 
 /* ========================================================================== */
@@ -239,21 +243,21 @@ UF_long btf_l_order (UF_long, UF_long *, UF_long *, double , double *,
 /* All versions of BTF include these definitions.
  * As an example, to test if the version you are using is 1.2 or later:
  *
- *	if (BTF_VERSION >= BTF_VERSION_CODE (1,2)) ...
+ *      if (BTF_VERSION >= BTF_VERSION_CODE (1,2)) ...
  *
  * This also works during compile-time:
  *
- *	#if (BTF >= BTF_VERSION_CODE (1,2))
- *	    printf ("This is version 1.2 or later\n") ;
- *	#else
- *	    printf ("This is an early version\n") ;
- *	#endif
+ *      #if (BTF >= BTF_VERSION_CODE (1,2))
+ *          printf ("This is version 1.2 or later\n") ;
+ *      #else
+ *          printf ("This is an early version\n") ;
+ *      #endif
  */
 
-#define BTF_DATE "Nov 1, 2007"
+#define BTF_DATE "Oct 10, 2014"
 #define BTF_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
 #define BTF_MAIN_VERSION 1
-#define BTF_SUB_VERSION 0
+#define BTF_SUB_VERSION 2
 #define BTF_SUBSUB_VERSION 1
 #define BTF_VERSION BTF_VERSION_CODE(BTF_MAIN_VERSION,BTF_SUB_VERSION)
 
diff --git a/BTF/Include/btf_internal.h b/BTF/Include/btf_internal.h
index 83f76f1..fc0426d 100644
--- a/BTF/Include/btf_internal.h
+++ b/BTF/Include/btf_internal.h
@@ -6,15 +6,15 @@
 #define _BTF_INTERNAL_H
 
 /*
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  */
 
 /* Not to be included in any user program. */
 
 #ifdef DLONG
-#define Int UF_long
-#define Int_id UF_long_id
+#define Int SuiteSparse_long
+#define Int_id SuiteSparse_long_id
 #define BTF(name) btf_l_ ## name
 #else
 #define Int int
diff --git a/BTF/Lib/Makefile b/BTF/Lib/Makefile
index a118002..0069c93 100644
--- a/BTF/Lib/Makefile
+++ b/BTF/Lib/Makefile
@@ -2,16 +2,16 @@ default: all
 
 ccode: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 # for testing only:
 # TEST = -DTESTING
 
-C = $(CC) $(CFLAGS)
+C = $(CC) $(CF)
 
 INC = ../Include/btf.h ../Include/btf_internal.h
 
-I = -I../Include -I../../UFconfig
+I = -I../Include -I../../SuiteSparse_config
 
 all: library
 
@@ -21,8 +21,8 @@ OBJ = btf_order.o btf_maxtrans.o btf_strongcomp.o \
     btf_l_order.o btf_l_maxtrans.o btf_l_strongcomp.o
 
 libbtf.a: $(OBJ)
-	$(AR) libbtf.a $(OBJ)
-	$(RANLIB) libbtf.a
+	$(ARCHIVE)  libbtf.a $(OBJ)
+	- $(RANLIB) libbtf.a
 
 $(OBJ): $(INC)
 
diff --git a/BTF/MATLAB/Contents.m b/BTF/MATLAB/Contents.m
index 9b6e0bc..bc535b0 100644
--- a/BTF/MATLAB/Contents.m
+++ b/BTF/MATLAB/Contents.m
@@ -17,4 +17,4 @@
 %   [p,q,r] = btf (A)
 %   [p,r] = strongcomp (A)
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
diff --git a/BTF/MATLAB/Makefile b/BTF/MATLAB/Makefile
deleted file mode 100644
index 7cb1bcf..0000000
--- a/BTF/MATLAB/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-
-include ../../UFconfig/UFconfig.mk
-
-I = -I../Include -I../../UFconfig
-
-MX = $(MEX) $(I) -DDLONG
-
-all: maxtrans.mexglx strongcomp.mexglx btf.mexglx
-
-recursive: strongcomp_recursive.mexglx
-
-maxtrans.mexglx: ../Source/btf_maxtrans.c ../Include/btf.h maxtrans.c \
-		../Include/btf_internal.h
-	$(MX) maxtrans.c ../Source/btf_maxtrans.c
-
-strongcomp.mexglx: ../Source/btf_strongcomp.c ../Include/btf.h \
-		strongcomp.c ../Include/btf_internal.h
-	$(MX) strongcomp.c ../Source/btf_strongcomp.c
-
-strongcomp_recursive.mexglx: ../Source/btf_strongcomp.c ../Include/btf.h \
-		strongcomp.c ../Include/btf_internal.h
-	$(MX) -DRECURSIVE -output strongcomp_recursive \
-		../Source/btf_strongcomp.c strongcomp.c
-
-btf.mexglx: ../Source/btf_strongcomp.c ../Include/btf.h btf.c \
-		../Include/btf_internal.h \
-		../Source/btf_maxtrans.c ../Source/btf_order.c
-	$(MX) btf.c ../Source/btf_maxtrans.c \
-		../Source/btf_strongcomp.c ../Source/btf_order.c
-
-distclean: purge
-
-purge: clean
-	- $(RM) *.o *.mex*
-
-clean:
-	- $(RM) $(CLEAN)
diff --git a/BTF/MATLAB/Test/btf_test.m b/BTF/MATLAB/Test/btf_test.m
index 9def379..c0ede02 100644
--- a/BTF/MATLAB/Test/btf_test.m
+++ b/BTF/MATLAB/Test/btf_test.m
@@ -7,7 +7,7 @@ function btf_test (nmat)
 %   test1, test2, test3, test4, test5, test6.
 
 if (nargin < 1)
-    nmat = 800 ;
+    nmat = 200 ;
 end
 
 test1 (nmat) ;
diff --git a/BTF/MATLAB/Test/checkbtf.m b/BTF/MATLAB/Test/checkbtf.m
index 95bceca..1ba99df 100644
--- a/BTF/MATLAB/Test/checkbtf.m
+++ b/BTF/MATLAB/Test/checkbtf.m
@@ -9,7 +9,7 @@ function checkbtf (A, p, q, r)
 %
 % See also drawbtf, maxtrans, strongcomp.
 
-% Copyright 2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 if (m ~= n)
@@ -34,13 +34,13 @@ if (r (end) ~= n+1)
     error ('r(end) not n+1') ;
 end
 
-if (nblocks < 1 | nblocks > n)						    %#ok
+if (nblocks < 1 | nblocks > n)                                              %#ok
     error ('nblocks wrong') ;
 end
 
 nblocks = length (r) - 1 ;
 rdiff = r (2:(nblocks+1)) - r (1:nblocks) ;
-if (any (rdiff < 1) | any (rdiff > n))					    %#ok
+if (any (rdiff < 1) | any (rdiff > n))                                      %#ok
     error ('r bad')
 end
 
diff --git a/BTF/MATLAB/Test/test1.m b/BTF/MATLAB/Test/test1.m
index c44e9db..e97d178 100644
--- a/BTF/MATLAB/Test/test1.m
+++ b/BTF/MATLAB/Test/test1.m
@@ -6,7 +6,7 @@ function test1 (nmat)
 % See also btf, maxtrans, strongcomp, dmperm, UFget,
 %   test1, test2, test3, test4, test5.
 
-% Copyright 2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 % f = find (index.sprank < min (index.nrows, index.ncols)) ;
@@ -29,14 +29,14 @@ f = f (1:nmat) ;
 T0 = zeros (nmat,1) ;
 T1 = zeros (nmat,1) ;
 Anz = zeros (nmat,1) ;
-figure (1) ;
 MN = zeros (nmat, 2) ;
 Nzdiag = zeros (nmat,1) ;
+clf
 
 % warmup
-p = maxtrans (sparse (1)) ;	    %#ok
-p = cs_dmperm (sparse (1)) ;	    %#ok
-a = cs_transpose (sparse (1)) ;	    %#ok
+p = maxtrans (sparse (1)) ;         %#ok
+p = cs_dmperm (sparse (1)) ;        %#ok
+a = cs_transpose (sparse (1)) ;     %#ok
 
 h = waitbar (0, 'BTF test 1 of 6') ;
 
@@ -91,7 +91,7 @@ try
             error ('!') ;
         end
 
-        if (s0 == n & m == n)						    %#ok
+        if (s0 == n & m == n)                                               %#ok
             B = A (:, q) ;
             subplot (2,2,1) ;
             cspy (B) ;
diff --git a/BTF/MATLAB/Test/test2.m b/BTF/MATLAB/Test/test2.m
index abcc3cd..20e1ad6 100644
--- a/BTF/MATLAB/Test/test2.m
+++ b/BTF/MATLAB/Test/test2.m
@@ -6,7 +6,7 @@ function test2 (nmat)
 % See also btf, maxtrans, strongcomp, dmperm, UFget,
 %   test1, test2, test3, test4, test5.
 
-% Copyright 2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 f = find (index.nrows == index.ncols) ;
@@ -27,16 +27,15 @@ f = f (1:nmat) ;
 T0 = zeros (nmat,1) ;
 T1 = zeros (nmat,1) ;
 Anz = zeros (nmat,1) ;
-figure (1) ;
-clf
 MN = zeros (nmat, 2) ;
 Nzdiag = zeros (nmat,1) ;
+clf
 
 % warmup
-p = maxtrans (sparse (1)) ;		%#ok
-p = btf (sparse (1)) ;			%#ok
-p = cs_dmperm (sparse (1)) ;		%#ok
-a = cs_transpose (sparse (1)) ;		%#ok
+p = maxtrans (sparse (1)) ;             %#ok
+p = btf (sparse (1)) ;                  %#ok
+p = cs_dmperm (sparse (1)) ;            %#ok
+a = cs_transpose (sparse (1)) ;         %#ok
 
 h = waitbar (0, 'BTF test 2 of 6') ;
 
diff --git a/BTF/MATLAB/Test/test3.m b/BTF/MATLAB/Test/test3.m
index 40b236e..408033a 100644
--- a/BTF/MATLAB/Test/test3.m
+++ b/BTF/MATLAB/Test/test3.m
@@ -6,7 +6,7 @@ function test3 (nmat)
 % See also btf, maxtrans, strongcomp, dmperm, UFget,
 %   test1, test2, test3, test4, test5.
 
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 doplot = 1 ;
 dopause = 0 ;
@@ -18,15 +18,13 @@ f = find (index.nrows == index.ncols) ;
 f = f (i) ;
 clear i
 
-figure (1)
-
 % short test set: seg faults, lots of blocks, lots of work, and so on:
 nasty = [
         % --- various test matrices (no seg fault, quick run time)
     -(1:8)'  % generated matrices
     904 % vanHeukelum/cage3 (5-by-5)
     819 % Simon/raefsky6 (permuted triangular matrix)
-	%
+        %
         % --- older seg faults:
     264 % HB/west0156, causes older strongcomp_recursive to fail
     824 % TOKAMAK/utm300 (300-by-300), causes older code to fail
@@ -76,7 +74,7 @@ nasty = [
     851 % Chen/pkustk05
     979 % Kamvar/Stanford
     374 % Bova/rma10
-	%
+        %
         % --- lots of time:
     395 % DRIVCAV/cavity16
     396 % DRIVCAV/cavity17
@@ -136,9 +134,9 @@ nasty = [
         %
         % --- lots of time, and seg faults:
     285 % ATandT/pre2
-	% --- huge matrix, turn off plotting
+        % --- huge matrix, turn off plotting
     940 % Shenk/af_shell1, memory leak in plot, after call to btf, once.
-	% ----
+        % ----
 ]' ;
 
 % maxtrans_recursive causes a seg fault on these matrices, because of
@@ -217,13 +215,13 @@ try
             % construct the jth test matrix
             j = -j ;
             if (j == 1 | j == 2)                                            %#ok
-                B11 = UFget ('Grund/b1_ss') ;	    % 7-by-7 diagonal block
+                B11 = UFget ('Grund/b1_ss') ;       % 7-by-7 diagonal block
                 B11 = B11.A ;
                 B12 = sparse (zeros (7,2)) ;
                 B12 (3,2) = 1 ;
                 B13 = sparse (ones  (7,5)) ;
                 B21 = sparse (zeros (2,7)) ;
-                B22 = sparse (ones  (2,2)) ;	    % 2-by-2 diagonal block
+                B22 = sparse (ones  (2,2)) ;        % 2-by-2 diagonal block
                 B23 = sparse (ones  (2,5)) ;
                 B31 = sparse (zeros (5,7)) ;
                 B32 = sparse (zeros (5,2)) ;
@@ -279,7 +277,6 @@ try
         singular = s1 < n ;
 
         if (doplot)
-            % figure (1)
             clf
             subplot (2,4,1)
             spy (A)
@@ -427,7 +424,7 @@ try
             if (any (c (kbad) ~= 0))
                 error ('kbad') ;
             end
-            if (any (c (kgood) == 0))	    %#ok
+            if (any (c (kgood) == 0))       %#ok
                 error ('kgood') ;
             end
 
@@ -511,7 +508,7 @@ try
             drawnow
         end
 
-        if (matnum ~= nmat & dopause)					    %#ok
+        if (matnum ~= nmat & dopause)                                       %#ok
             input ('Hit enter: ') ;
         end
 
diff --git a/BTF/MATLAB/Test/test4.m b/BTF/MATLAB/Test/test4.m
index 4e82083..c67273a 100644
--- a/BTF/MATLAB/Test/test4.m
+++ b/BTF/MATLAB/Test/test4.m
@@ -6,7 +6,7 @@ function test4 (nmat)
 % See also btf, maxtrans, strongcomp, dmperm, UFget,
 %   test1, test2, test3, test4, test5.
 
-% Copyright 2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 f = find (index.nrows == index.ncols) ;
diff --git a/BTF/MATLAB/Test/test5.m b/BTF/MATLAB/Test/test5.m
index 97358ac..0118ed4 100644
--- a/BTF/MATLAB/Test/test5.m
+++ b/BTF/MATLAB/Test/test5.m
@@ -6,7 +6,7 @@ function test5 (nmat)
 % See also btf, maxtrans, strongcomp, dmperm, UFget,
 %   test1, test2, test3, test4, test5.
 
-% Copyright 2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 
diff --git a/BTF/MATLAB/Test/test6.m b/BTF/MATLAB/Test/test6.m
index c27ca82..0a643ec 100644
--- a/BTF/MATLAB/Test/test6.m
+++ b/BTF/MATLAB/Test/test6.m
@@ -6,7 +6,7 @@ function test6
 % See also btf, maxtrans, strongcomp, dmperm, UFget,
 %   test1, test2, test3, test4, test5.
 
-% Copyright 2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 quick2 = [ ...
  1522 -272  1463  1521   460 1507  -838 1533 -1533 -1456 -1512   734   211 ...
diff --git a/BTF/MATLAB/btf.c b/BTF/MATLAB/btf.c
index 79d1ba2..45dcf75 100644
--- a/BTF/MATLAB/btf.c
+++ b/BTF/MATLAB/btf.c
@@ -8,12 +8,12 @@
  *
  * Usage:
  *
- *	[p,q,r] = btf (A) ;
- *	[p,q,r] = btf (A, maxwork) ;
+ *      [p,q,r] = btf (A) ;
+ *      [p,q,r] = btf (A, maxwork) ;
  *
  * If the matrix has structural full rank, this is essentially identical to
  *
- *	[p,q,r] = dmperm (A)
+ *      [p,q,r] = dmperm (A)
  *
  * except that p, q, and r will differ in trivial ways.  Both return an upper
  * block triangular form with a zero-free diagonal, if the matrix is
@@ -33,7 +33,7 @@
  * work performed, or -1 if the maximum work limit is reached (in which case
  * the maximum matching might not have been found).
  *
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  *
  * See also maxtrans, strongcomp, dmperm
@@ -43,17 +43,18 @@
 
 #include "mex.h"
 #include "btf.h"
+#define Long SuiteSparse_long
 
 void mexFunction
 (
-    int	nargout,
+    int nargout,
     mxArray *pargout [ ],
-    int	nargin,
+    int nargin,
     const mxArray *pargin [ ]
 )
 {
     double work, maxwork ;
-    UF_long b, n, k, *Ap, *Ai, *P, *R, nblocks, *Work, *Q, nmatch ;
+    Long b, n, k, *Ap, *Ai, *P, *R, nblocks, *Work, *Q, nmatch ;
     double *Px, *Rx, *Qx, *w ;
 
     /* ---------------------------------------------------------------------- */
@@ -62,30 +63,30 @@ void mexFunction
 
     if (nargin < 1 || nargin > 2 || nargout > 4)
     {
-	mexErrMsgTxt ("Usage: [p,q,r] = btf (A)") ;
+        mexErrMsgTxt ("Usage: [p,q,r] = btf (A)") ;
     }
     n = mxGetM (pargin [0]) ;
     if (!mxIsSparse (pargin [0]) || n != mxGetN (pargin [0]))
     {
-    	mexErrMsgTxt ("btf: A must be sparse, square, and non-empty") ;
+        mexErrMsgTxt ("btf: A must be sparse, square, and non-empty") ;
     }
 
     /* get sparse matrix A */
-    Ap = (UF_long *) mxGetJc (pargin [0]) ;
-    Ai = (UF_long *) mxGetIr (pargin [0]) ;
+    Ap = (Long *) mxGetJc (pargin [0]) ;
+    Ai = (Long *) mxGetIr (pargin [0]) ;
 
     /* get output arrays */
-    Q = mxMalloc (n * sizeof (UF_long)) ;
-    P = mxMalloc (n * sizeof (UF_long)) ;
-    R = mxMalloc ((n+1) * sizeof (UF_long)) ;
+    Q = mxMalloc (n * sizeof (Long)) ;
+    P = mxMalloc (n * sizeof (Long)) ;
+    R = mxMalloc ((n+1) * sizeof (Long)) ;
 
     /* get workspace */
-    Work = mxMalloc (5*n * sizeof (UF_long)) ;
+    Work = mxMalloc (5*n * sizeof (Long)) ;
 
     maxwork = 0 ;
     if (nargin > 1)
     {
-	maxwork = mxGetScalar (pargin [1]) ;
+        maxwork = mxGetScalar (pargin [1]) ;
     }
     work = 0 ;
 
@@ -104,37 +105,37 @@ void mexFunction
     Px = mxGetPr (pargout [0]) ;
     for (k = 0 ; k < n ; k++)
     {
-	Px [k] = P [k] + 1 ;	/* convert to 1-based */
+        Px [k] = P [k] + 1 ;    /* convert to 1-based */
     }
 
     /* create Q */
     if (nargout > 1)
     {
-	pargout [1] = mxCreateDoubleMatrix (1, n, mxREAL) ;
-	Qx = mxGetPr (pargout [1]) ;
-	for (k = 0 ; k < n ; k++)
-	{
-	    Qx [k] = Q [k] + 1 ;	/* convert to 1-based */
-	}
+        pargout [1] = mxCreateDoubleMatrix (1, n, mxREAL) ;
+        Qx = mxGetPr (pargout [1]) ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Qx [k] = Q [k] + 1 ;        /* convert to 1-based */
+        }
     }
 
     /* create R */
     if (nargout > 2)
     {
-	pargout [2] = mxCreateDoubleMatrix (1, nblocks+1, mxREAL) ;
-	Rx = mxGetPr (pargout [2]) ;
-	for (b = 0 ; b <= nblocks ; b++)
-	{
-	    Rx [b] = R [b] + 1 ;	/* convert to 1-based */
-	}
+        pargout [2] = mxCreateDoubleMatrix (1, nblocks+1, mxREAL) ;
+        Rx = mxGetPr (pargout [2]) ;
+        for (b = 0 ; b <= nblocks ; b++)
+        {
+            Rx [b] = R [b] + 1 ;        /* convert to 1-based */
+        }
     }
 
     /* create work output */
     if (nargout > 3)
     {
-	pargout [3] = mxCreateDoubleMatrix (1, 1, mxREAL) ;
-	w = mxGetPr (pargout [3]) ;
-	w [0] = work ;
+        pargout [3] = mxCreateDoubleMatrix (1, 1, mxREAL) ;
+        w = mxGetPr (pargout [3]) ;
+        w [0] = work ;
     }
 
     mxFree (P) ;
diff --git a/BTF/MATLAB/btf.m b/BTF/MATLAB/btf.m
index 14d7ac4..a4d1c11 100644
--- a/BTF/MATLAB/btf.m
+++ b/BTF/MATLAB/btf.m
@@ -1,4 +1,4 @@
-function [p,q,r] = btf (A)						    %#ok
+function [p,q,r] = btf (A)                                                  %#ok
 %BTF permute a square sparse matrix into upper block triangular form
 % with a zero-free diagonal, or with a maximum number of nonzeros along the
 % diagonal if a zero-free permutation does not exist.
@@ -32,7 +32,7 @@ function [p,q,r] = btf (A)						    %#ok
 %
 % See also maxtrans, strongcomp, dmperm, sprank
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
 % with support from Sandia National Laboratories.  All Rights Reserved.
 
 error ('btf mexFunction not found') ;
diff --git a/BTF/MATLAB/btf_demo.m b/BTF/MATLAB/btf_demo.m
index 8f2e7d4..6f0901d 100644
--- a/BTF/MATLAB/btf_demo.m
+++ b/BTF/MATLAB/btf_demo.m
@@ -5,12 +5,11 @@
 %
 % See also btf, dmperm, strongcomp, maxtrans
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
 
 load west0479 ;
 A = west0479 ;
 
-figure (1)
 clf
 
 subplot (2,3,1) ;
diff --git a/BTF/MATLAB/btf_install.m b/BTF/MATLAB/btf_install.m
index 4507c6b..d0b8b0f 100644
--- a/BTF/MATLAB/btf_install.m
+++ b/BTF/MATLAB/btf_install.m
@@ -7,7 +7,7 @@ function btf_install
 %
 % See also btf, maxtrans, stroncomp, dmperm.
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
 
 btf_make
 addpath (pwd) ;
diff --git a/BTF/MATLAB/btf_make.m b/BTF/MATLAB/btf_make.m
index a0c105d..a222bbb 100644
--- a/BTF/MATLAB/btf_make.m
+++ b/BTF/MATLAB/btf_make.m
@@ -7,15 +7,20 @@ function btf_make
 %
 % See also btf, maxtrans, stroncomp, dmperm.
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
 
-details = 0 ;	    % if 1, print details of each command
+details = 0 ;       % if 1, print details of each command
 
-mexcmd = 'mex -O -DDLONG -I../Include -I../../UFconfig ' ;
+mexcmd = 'mex -O -DDLONG -I../Include -I../../SuiteSparse_config ' ;
 if (~isempty (strfind (computer, '64')))
     mexcmd = [mexcmd '-largeArrayDims '] ;
 end
 
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    mexcmd = [mexcmd ' -silent '] ;
+end
+
 s = [mexcmd 'maxtrans.c ../Source/btf_maxtrans.c'] ;
 if (details)
     fprintf ('%s\n', s) ;
diff --git a/BTF/MATLAB/drawbtf.m b/BTF/MATLAB/drawbtf.m
index 55725b9..96a7bc5 100644
--- a/BTF/MATLAB/drawbtf.m
+++ b/BTF/MATLAB/drawbtf.m
@@ -9,7 +9,7 @@ function drawbtf (A, p, q, r)
 %
 % See also btf, maxtrans, strongcomp, dmperm.
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
 
 nblocks = length (r) - 1 ;
 
@@ -22,6 +22,6 @@ for k = 1:nblocks
     k2 = r (k+1) ;
     nk = k2 - k1 ;
     if (nk > 1)
-	plot ([k1 k2 k2 k1 k1]-.5, [k1 k1 k2 k2 k1]-.5, 'r') ;
+        plot ([k1 k2 k2 k1 k1]-.5, [k1 k1 k2 k2 k1]-.5, 'r') ;
     end
 end
diff --git a/BTF/MATLAB/maxtrans.c b/BTF/MATLAB/maxtrans.c
index f89c2e8..8219981 100644
--- a/BTF/MATLAB/maxtrans.c
+++ b/BTF/MATLAB/maxtrans.c
@@ -19,7 +19,7 @@
  * work performed, or -1 if the maximum work limit is reached (in which case
  * the maximum matching might not have been found).
  *
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  */
 
@@ -27,17 +27,18 @@
 
 #include "mex.h"
 #include "btf.h"
+#define Long SuiteSparse_long
 
 void mexFunction
 (
-    int	nargout,
+    int nargout,
     mxArray *pargout [ ],
-    int	nargin,
+    int nargin,
     const mxArray *pargin [ ]
 )
 {
     double maxwork, work ;
-    UF_long nrow, ncol, i, *Ap, *Ai, *Match, nmatch, *Work ;
+    Long nrow, ncol, i, *Ap, *Ai, *Match, nmatch, *Work ;
     double *Matchx, *w ;
 
     /* ---------------------------------------------------------------------- */
@@ -46,29 +47,29 @@ void mexFunction
 
     if (nargin < 1 || nargin > 2 || nargout > 2)
     {
-	mexErrMsgTxt ("Usage: q = maxtrans (A)") ;
+        mexErrMsgTxt ("Usage: q = maxtrans (A)") ;
     }
     nrow = mxGetM (pargin [0]) ;
     ncol = mxGetN (pargin [0]) ;
     if (!mxIsSparse (pargin [0]))
     {
-    	mexErrMsgTxt ("maxtrans: A must be sparse, and non-empty") ;
+        mexErrMsgTxt ("maxtrans: A must be sparse, and non-empty") ;
     }
 
     /* get sparse matrix A */
-    Ap = (UF_long *) mxGetJc (pargin [0]) ;
-    Ai = (UF_long *) mxGetIr (pargin [0]) ;
+    Ap = (Long *) mxGetJc (pargin [0]) ;
+    Ai = (Long *) mxGetIr (pargin [0]) ;
 
     /* get output array */
-    Match = mxMalloc (nrow * sizeof (UF_long)) ;
+    Match = mxMalloc (nrow * sizeof (Long)) ;
 
     /* get workspace of size 5n (recursive version needs only 2n) */
-    Work = mxMalloc (5*ncol * sizeof (UF_long)) ;
+    Work = mxMalloc (5*ncol * sizeof (Long)) ;
 
     maxwork = 0 ;
     if (nargin > 1)
     {
-	maxwork = mxGetScalar (pargin [1]) ;
+        maxwork = mxGetScalar (pargin [1]) ;
     }
     work = 0 ;
 
@@ -86,14 +87,14 @@ void mexFunction
     Matchx = mxGetPr (pargout [0]) ;
     for (i = 0 ; i < nrow ; i++)
     {
-	Matchx [i] = Match [i] + 1 ;	/* convert to 1-based */
+        Matchx [i] = Match [i] + 1 ;    /* convert to 1-based */
     }
 
     if (nargout > 1)
     {
-	pargout [1] = mxCreateDoubleMatrix (1, 1, mxREAL) ;
-	w = mxGetPr (pargout [1]) ;
-	w [0] = work ;
+        pargout [1] = mxCreateDoubleMatrix (1, 1, mxREAL) ;
+        w = mxGetPr (pargout [1]) ;
+        w [0] = work ;
     }
 
     mxFree (Work) ;
diff --git a/BTF/MATLAB/maxtrans.m b/BTF/MATLAB/maxtrans.m
index 1fad193..aba591a 100644
--- a/BTF/MATLAB/maxtrans.m
+++ b/BTF/MATLAB/maxtrans.m
@@ -1,4 +1,4 @@
-function q = maxtrans (A)						    %#ok
+function q = maxtrans (A)                                                   %#ok
 %MAXTRANS permute the columns of a sparse matrix so it has a zero-free diagonal
 % (if it exists).   If no zero-free diagonal exists, then a maximum matching is
 % found.  Note that this differs from p=dmperm(A), which returns a row
@@ -25,6 +25,6 @@ function q = maxtrans (A)						    %#ok
 %
 % See also: btf, strongcomp, dmperm, sprank
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
 
 error ('maxtrans mexfunction not found') ;
diff --git a/BTF/MATLAB/strongcomp.c b/BTF/MATLAB/strongcomp.c
index 16d7dc3..0e15735 100644
--- a/BTF/MATLAB/strongcomp.c
+++ b/BTF/MATLAB/strongcomp.c
@@ -7,17 +7,17 @@
  *
  * Usage:
  *
- *	[p,r] = strongcomp (A) ;
+ *      [p,r] = strongcomp (A) ;
  *
- *	[p,q,r] = strongcomp (A,qin) ;
+ *      [p,q,r] = strongcomp (A,qin) ;
  *
  * In the first usage, the permuted matrix is C = A (p,p).  In the second usage,
  * the matrix A (:,qin) is symmetrically permuted to upper block triangular
  * form, where qin is an input column permutation, and the final permuted
  * matrix is C = A (p,q).  This second usage is equivalent to
  *
- *	[p,r] = strongcomp (A (:,qin)) ;
- *	q = qin (p) ;
+ *      [p,r] = strongcomp (A (:,qin)) ;
+ *      q = qin (p) ;
  *
  * That is, if qin is not present it is assumed to be qin = 1:n.
  *
@@ -28,16 +28,16 @@
  *
  * strongcomp is normally proceeded by a maximum transversal:
  *
- *	[p,q,r] = strongcomp (A, maxtrans (A))
+ *      [p,q,r] = strongcomp (A, maxtrans (A))
  *
  * if the matrix has full structural rank.  This is identical to
  *
- *	[p,q,r] = btf (A)
+ *      [p,q,r] = btf (A)
  *
  * (except that btf handles the case when A is structurally rank-deficient).
  * It essentially the same as
  *
- *	[p,q,r] = dmperm (A)
+ *      [p,q,r] = dmperm (A)
  *
  * except that p, q, and r will differ between btf and dmperm.  Both return an
  * upper block triangular form with a zero-free diagonal.  The number and sizes
@@ -47,7 +47,7 @@
  * diagonal that is above the main diagonal; btf always returns the matching as
  * the main diagonal (which will thus contain zeros).
  *
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  *
  * See also maxtrans, btf, dmperm
@@ -57,16 +57,17 @@
 
 #include "mex.h"
 #include "btf.h"
+#define Long SuiteSparse_long
 
 void mexFunction
 (
-    int	nargout,
+    int nargout,
     mxArray *pargout[],
-    int	nargin,
+    int nargin,
     const mxArray *pargin[]
 )
 {
-    UF_long b, n, i, k, j, *Ap, *Ai, *P, *R, nblocks, *Work, *Q, jj ;
+    Long b, n, i, k, j, *Ap, *Ai, *P, *R, nblocks, *Work, *Q, jj ;
     double *Px, *Rx, *Qx ;
 
     /* ---------------------------------------------------------------------- */
@@ -75,58 +76,58 @@ void mexFunction
 
     if (!((nargin == 1 && nargout <= 2) || (nargin == 2 && nargout <= 3)))
     {
-	mexErrMsgTxt ("Usage: [p,r] = strongcomp (A)"
-		      " or [p,q,r] = strongcomp (A,qin)") ;
+        mexErrMsgTxt ("Usage: [p,r] = strongcomp (A)"
+                      " or [p,q,r] = strongcomp (A,qin)") ;
     }
     n = mxGetM (pargin [0]) ;
     if (!mxIsSparse (pargin [0]) || n != mxGetN (pargin [0]))
     {
-    	mexErrMsgTxt ("strongcomp: A must be sparse, square, and non-empty") ;
+        mexErrMsgTxt ("strongcomp: A must be sparse, square, and non-empty") ;
     }
 
     /* get sparse matrix A */
-    Ap = (UF_long *) mxGetJc (pargin [0]) ;
-    Ai = (UF_long *) mxGetIr (pargin [0]) ;
+    Ap = (Long *) mxGetJc (pargin [0]) ;
+    Ai = (Long *) mxGetIr (pargin [0]) ;
 
     /* get output arrays */
-    P = mxMalloc (n * sizeof (UF_long)) ;
-    R = mxMalloc ((n+1) * sizeof (UF_long)) ;
+    P = mxMalloc (n * sizeof (Long)) ;
+    R = mxMalloc ((n+1) * sizeof (Long)) ;
 
     /* get workspace of size 4n (recursive code only needs 2n) */
-    Work = mxMalloc (4*n * sizeof (UF_long)) ;
+    Work = mxMalloc (4*n * sizeof (Long)) ;
 
     /* get the input column permutation Q */
     if (nargin == 2)
     {
-	if (mxGetNumberOfElements (pargin [1]) != n)
-	{
-	    mexErrMsgTxt
-		("strongcomp: qin must be a permutation vector of size n") ;
-	}
-	Qx = mxGetPr (pargin [1]) ;
-	Q = mxMalloc (n * sizeof (UF_long)) ;
-	/* connvert Qin to 0-based and check validity */
-	for (i = 0 ; i < n ; i++)
-	{
-	    Work [i] = 0 ;
-	}
-	for (k = 0 ; k < n ; k++)
-	{
-	    j = Qx [k] - 1 ;	/* convert to 0-based */
-	    jj = BTF_UNFLIP (j) ;
-	    if (jj < 0 || jj >= n || Work [jj] == 1)
-	    {
-		mexErrMsgTxt
-		    ("strongcomp: qin must be a permutation vector of size n") ;
-	    }
-	    Work [jj] = 1 ;
-	    Q [k] = j ;
-	}
+        if (mxGetNumberOfElements (pargin [1]) != n)
+        {
+            mexErrMsgTxt
+                ("strongcomp: qin must be a permutation vector of size n") ;
+        }
+        Qx = mxGetPr (pargin [1]) ;
+        Q = mxMalloc (n * sizeof (Long)) ;
+        /* connvert Qin to 0-based and check validity */
+        for (i = 0 ; i < n ; i++)
+        {
+            Work [i] = 0 ;
+        }
+        for (k = 0 ; k < n ; k++)
+        {
+            j = Qx [k] - 1 ;    /* convert to 0-based */
+            jj = BTF_UNFLIP (j) ;
+            if (jj < 0 || jj >= n || Work [jj] == 1)
+            {
+                mexErrMsgTxt
+                    ("strongcomp: qin must be a permutation vector of size n") ;
+            }
+            Work [jj] = 1 ;
+            Q [k] = j ;
+        }
     }
     else
     {
-	/* no input column permutation */
-	Q = (UF_long *) NULL ;
+        /* no input column permutation */
+        Q = (Long *) NULL ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -144,29 +145,29 @@ void mexFunction
     Px = mxGetPr (pargout [0]) ;
     for (k = 0 ; k < n ; k++)
     {
-	Px [k] = P [k] + 1 ;		/* convert to 1-based */
+        Px [k] = P [k] + 1 ;            /* convert to 1-based */
     }
 
     /* create Q */
     if (nargin == 2 && nargout > 1)
     {
-	pargout [1] = mxCreateDoubleMatrix (1, n, mxREAL) ;
-	Qx = mxGetPr (pargout [1]) ;
-	for (k = 0 ; k < n ; k++)
-	{
-	    Qx [k] = Q [k] + 1 ;	/* convert to 1-based */
-	}
+        pargout [1] = mxCreateDoubleMatrix (1, n, mxREAL) ;
+        Qx = mxGetPr (pargout [1]) ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Qx [k] = Q [k] + 1 ;        /* convert to 1-based */
+        }
     }
 
     /* create R */
     if (nargout == nargin + 1)
     {
-	pargout [nargin] = mxCreateDoubleMatrix (1, nblocks+1, mxREAL) ;
-	Rx = mxGetPr (pargout [nargin]) ;
-	for (b = 0 ; b <= nblocks ; b++)
-	{
-	    Rx [b] = R [b] + 1 ;		/* convert to 1-based */
-	}
+        pargout [nargin] = mxCreateDoubleMatrix (1, nblocks+1, mxREAL) ;
+        Rx = mxGetPr (pargout [nargin]) ;
+        for (b = 0 ; b <= nblocks ; b++)
+        {
+            Rx [b] = R [b] + 1 ;                /* convert to 1-based */
+        }
     }
 
     mxFree (P) ;
@@ -174,6 +175,6 @@ void mexFunction
     mxFree (Work) ;
     if (nargin == 2)
     {
-	mxFree (Q) ;
+        mxFree (Q) ;
     }
 }
diff --git a/BTF/MATLAB/strongcomp.m b/BTF/MATLAB/strongcomp.m
index 86546db..b20f1b8 100644
--- a/BTF/MATLAB/strongcomp.m
+++ b/BTF/MATLAB/strongcomp.m
@@ -1,4 +1,4 @@
-function [p,q,r] = strongcomp (A, qin)					    %#ok
+function [p,q,r] = strongcomp (A, qin)                                      %#ok
 %STRONGCOMP symmetric permutation to upper block triangular form
 % The matrix must be sparse and square.
 %
@@ -40,6 +40,6 @@ function [p,q,r] = strongcomp (A, qin)					    %#ok
 %
 % See also btf, maxtrans, dmperm
 
-% Copyright 2004-2007, Tim Davis, University of Florida
+% Copyright 2004-2007, University of Florida
 
 error ('strongcomp mexFunction not found') ;
diff --git a/BTF/Makefile b/BTF/Makefile
index 796d8c1..59bd62d 100644
--- a/BTF/Makefile
+++ b/BTF/Makefile
@@ -1,18 +1,36 @@
+#------------------------------------------------------------------------------
+# BTF Makefile
+#------------------------------------------------------------------------------
+
+VERSION = 1.2.1
+
 default: library
 
-include ../UFconfig/UFconfig.mk
+include ../SuiteSparse_config/SuiteSparse_config.mk
 
 library:
 	( cd Lib ; $(MAKE) )
 
 clean:
 	( cd Lib ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) )
 
 distclean:
 	( cd Lib ; $(MAKE) distclean )
-	( cd MATLAB ; $(MAKE) distclean )
-
-mex:
-	( cd MATLAB ; $(MAKE) )
+	( cd MATLAB ; $(RM) $(CLEAN) ; $(RM) *.mex* )
 
 purge: distclean
+
+# install BTF
+install:
+	$(CP) Lib/libbtf.a $(INSTALL_LIB)/libbtf.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libbtf.$(VERSION).a libbtf.a )
+	$(CP) Include/btf.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libbtf*.a
+	chmod 644 $(INSTALL_INCLUDE)/btf.h
+
+# uninstall BTF
+uninstall:
+	$(RM) $(INSTALL_LIB)/libbtf*.a
+	$(RM) $(INSTALL_INCLUDE)/btf.h
+
diff --git a/BTF/README.txt b/BTF/README.txt
index efc84f8..88eb64e 100644
--- a/BTF/README.txt
+++ b/BTF/README.txt
@@ -1,7 +1,6 @@
-BTF Version 1.0, May 31, 2007, by Timothy A. Davis
-Copyright (C) 2004-2007, University of Florida
+BTF, by Timothy A. Davis, Copyright (C) 2004-2012, University of Florida
 BTF is also available under other licenses; contact the author for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 BTF is a software package for permuting a matrix into block upper triangular
 form.  It includes a maximum transversal algorithm, which finds a permutation
@@ -11,8 +10,9 @@ nonzeros on the diagonal.  The package also includes a method for finding the
 strongly connected components of a graph.  These two methods together give the
 permutation to block upper triangular form.
 
-Requires UFconfig, in the ../UFconfig directory relative to this directory.
-KLU relies on this package to permute
+Requires SuiteSparse_config, in the ../SuiteSparse_config directory relative to
+this directory.  KLU relies on the BTF package to permute the matrix prior to
+factorization.
 
 To compile the libbtf.a library, type "make".  The compiled library is located
 in BTF/Lib/libbtf.a.  Compile code that uses BTF with -IBTF/Include.
@@ -55,55 +55,55 @@ A full text of the license is in Doc/lesser.txt.
 
 Files and directories in the BTF package:
 
-    Doc		    documentation and license
-    Include	    include files
-    Lib		    compiled BTF library
-    Makefile	    Makefile for C and MATLAB versions
-    MATLAB	    MATLAB interface
-    README.txt	    this file
-    Source	    BTF source code
+    Doc             documentation and license
+    Include         include files
+    Lib             compiled BTF library
+    Makefile        Makefile for C and MATLAB versions
+    MATLAB          MATLAB interface
+    README.txt      this file
+    Source          BTF source code
 
 ./Doc:
 
-    ChangeLog	    changes in BTF
-    lesser.txt	    license
+    ChangeLog       changes in BTF
+    lesser.txt      license
 
 ./Include:
 
-    btf.h	    primary user include file
+    btf.h           primary user include file
     btf_internal.h  internal include file, not for user programs
 
 ./Lib:
 
-    Makefile	    Makefile for C library
+    Makefile        Makefile for C library
 
 ./MATLAB:
 
-    btf.c	    btf mexFunction
+    btf.c           btf mexFunction
     btf_install.m   compile and install BTF for use in MATLAB
-    btf.m	    btf help
-    Contents.m	    contents of MATLAB interface
-    Makefile	    Makefile for MATLAB functions
-    maxtrans.c	    maxtrans mexFunction
-    maxtrans.m	    maxtrans help
+    btf.m           btf help
+    Contents.m      contents of MATLAB interface
+    Makefile        Makefile for MATLAB functions
+    maxtrans.c      maxtrans mexFunction
+    maxtrans.m      maxtrans help
     strongcomp.c    strongcomp mexFunction
     strongcomp.m    strongcomp help
-    Test	    MATLAB test directory
+    Test            MATLAB test directory
 
 ./MATLAB/Test:
 
-    checkbtf.m	    check a BTF ordering
-    drawbtf.m	    plot a BTF ordering
-    test1.m	    compare maxtrans and cs_dmperm
-    test2.m	    compare btf and cs_dmperm
-    test3.m	    extensive test (maxtrans, strongcomp, and btf)
-    test4b.m	    test btf maxwork option
-    test4.m	    test btf maxwork option
-    test5.m	    test maxtrans maxwork option
+    checkbtf.m      check a BTF ordering
+    drawbtf.m       plot a BTF ordering
+    test1.m         compare maxtrans and cs_dmperm
+    test2.m         compare btf and cs_dmperm
+    test3.m         extensive test (maxtrans, strongcomp, and btf)
+    test4b.m        test btf maxwork option
+    test4.m         test btf maxwork option
+    test5.m         test maxtrans maxwork option
 
 ./Source:
 
-    btf_maxtrans.c	btf_maxtrans C function
-    btf_order.c		btf_order C function
-    btf_strongcomp.c	btf_strongcomp C function
+    btf_maxtrans.c      btf_maxtrans C function
+    btf_order.c         btf_order C function
+    btf_strongcomp.c    btf_strongcomp C function
 
diff --git a/BTF/Source/btf_maxtrans.c b/BTF/Source/btf_maxtrans.c
index 7583e71..3f44b26 100644
--- a/BTF/Source/btf_maxtrans.c
+++ b/BTF/Source/btf_maxtrans.c
@@ -9,39 +9,39 @@
  * exceptions:
  *
  *  (1) cs_maxtrans finds both jmatch and imatch, where jmatch [i] = j and
- *	imatch [j] = i if row i is matched to column j.  This function returns
- *	just jmatch (the Match array).  The MATLAB interface to cs_maxtrans
- *	(the single-output cs_dmperm) returns imatch, not jmatch to the MATLAB
- *	caller.
+ *      imatch [j] = i if row i is matched to column j.  This function returns
+ *      just jmatch (the Match array).  The MATLAB interface to cs_maxtrans
+ *      (the single-output cs_dmperm) returns imatch, not jmatch to the MATLAB
+ *      caller.
  *
  *  (2) cs_maxtrans includes a pre-pass that counts the number of non-empty
- *	rows and columns (m2 and n2, respectively), and computes the matching
- *	using the transpose of A if m2 < n2.  cs_maxtrans also returns quickly
- *	if the diagonal of the matrix is already zero-free.  This pre-pass
- *	allows cs_maxtrans to be much faster than maxtrans, if the use of the
- *	transpose is warranted.
+ *      rows and columns (m2 and n2, respectively), and computes the matching
+ *      using the transpose of A if m2 < n2.  cs_maxtrans also returns quickly
+ *      if the diagonal of the matrix is already zero-free.  This pre-pass
+ *      allows cs_maxtrans to be much faster than maxtrans, if the use of the
+ *      transpose is warranted.
  *
- *	However, for square structurally non-singular matrices with one or more
- *	zeros on the diagonal, the pre-pass is a waste of time, and for these
- *	matrices, maxtrans can be twice as fast as cs_maxtrans.  Since the
- *	maxtrans function is intended primarily for square matrices that are
- *	typically structurally nonsingular, the pre-pass is not included here.
- *	If this maxtrans function is used on a matrix with many more columns
- *	than rows, consider passing the transpose to this function, or use
- *	cs_maxtrans instead.
+ *      However, for square structurally non-singular matrices with one or more
+ *      zeros on the diagonal, the pre-pass is a waste of time, and for these
+ *      matrices, maxtrans can be twice as fast as cs_maxtrans.  Since the
+ *      maxtrans function is intended primarily for square matrices that are
+ *      typically structurally nonsingular, the pre-pass is not included here.
+ *      If this maxtrans function is used on a matrix with many more columns
+ *      than rows, consider passing the transpose to this function, or use
+ *      cs_maxtrans instead.
  *
  *  (3) cs_maxtrans can operate as a randomized algorithm, to help avoid
- *	rare cases of excessive run-time.
+ *      rare cases of excessive run-time.
  *
  *  (4) this maxtrans function includes an option that limits the total work
- *	performed.  If this limit is reached, the maximum transveral might not
- *	be found.
+ *      performed.  If this limit is reached, the maximum transveral might not
+ *      be found.
  *
  * Thus, for general usage, cs_maxtrans is preferred.  For square matrices that
  * are typically structurally non-singular, maxtrans is preferred.  A partial
  * maxtrans can still be very useful when solving a sparse linear system.
  *
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  */ 
 
@@ -57,16 +57,16 @@
  * path.  An augmenting path is a sequence of row/column pairs (i1,k), (i2,j1),
  * (i3,j2), ..., (i(s+1), js), such that all of the following properties hold:
  *
- *	* column k is not matched to any row
- *	* entries in the path are nonzero
- *	* the pairs (i1,j1), (i2,j2), (i3,j3) ..., (is,js) have been 
- *	    previously matched to each other
- *	* (i(s+1), js) is nonzero, and row i(s+1) is not matched to any column
+ *      * column k is not matched to any row
+ *      * entries in the path are nonzero
+ *      * the pairs (i1,j1), (i2,j2), (i3,j3) ..., (is,js) have been 
+ *          previously matched to each other
+ *      * (i(s+1), js) is nonzero, and row i(s+1) is not matched to any column
  *
  * Once this path is found, the matching can be changed to the set of pairs
  * path.  An augmenting path is a sequence of row/column pairs
  *
- *	(i1,k), (i2,j1), (i3,j2), ..., (i(s+1), js)
+ *      (i1,k), (i2,j1), (i3,j2), ..., (i(s+1), js)
  *
  * Once a row is matched with a column it remains matched with some column, but
  * not necessarily the column it was first matched with.
@@ -93,72 +93,72 @@
  * the details of MC21A/B, such as how the stack is maintained.  The following
  * arguments are essentially identical between this code and MC21A:
  *
- * maxtrans	MC21A,B
- * --------	-------
- * n		N	    identical
- * k		JORD	    identical
- * Ap		IP	    column / row pointers
- * Ai		ICN	    row / column indices
- * Ap[n]	LICN	    length of index array (# of nonzeros in A)
- * Match	IPERM	    output column / row permutation
- * nmatch	NUMNZ	    # of nonzeros on diagonal of permuted matrix
- * Flag		CV	    mark a node as visited by the depth-first-search
+ * maxtrans     MC21A,B
+ * --------     -------
+ * n            N           identical
+ * k            JORD        identical
+ * Ap           IP          column / row pointers
+ * Ai           ICN         row / column indices
+ * Ap[n]        LICN        length of index array (# of nonzeros in A)
+ * Match        IPERM       output column / row permutation
+ * nmatch       NUMNZ       # of nonzeros on diagonal of permuted matrix
+ * Flag         CV          mark a node as visited by the depth-first-search
  *
  * The following are different, but analogous:
  *
- * Cheap	ARP	    indicates what part of the a column / row has
- *			    already been matched.
+ * Cheap        ARP         indicates what part of the a column / row has
+ *                          already been matched.
  *
  * The following arguments are very different:
  *
- * -		LENR	    # of entries in each row/column (unused in maxtrans)
- * Pstack	OUT	    Pstack keeps track of where we are in the depth-
- *			    first-search scan of column j.  I think that OUT
- *			    plays a similar role in MC21B, but I'm unsure.
- * Istack	PR	    keeps track of the rows in the path.  PR is a link
- *			    list, though, whereas Istack is a stack.  Maxtrans
- *			    does not use any link lists.
- * Jstack	OUT? PR?    the stack for nodes in the path (unsure)
+ * -            LENR        # of entries in each row/column (unused in maxtrans)
+ * Pstack       OUT         Pstack keeps track of where we are in the depth-
+ *                          first-search scan of column j.  I think that OUT
+ *                          plays a similar role in MC21B, but I'm unsure.
+ * Istack       PR          keeps track of the rows in the path.  PR is a link
+ *                          list, though, whereas Istack is a stack.  Maxtrans
+ *                          does not use any link lists.
+ * Jstack       OUT? PR?    the stack for nodes in the path (unsure)
  *
  * The following control structures are roughly comparable:
  *
- * maxtrans			MC21B
- * --------			-----
- * for (k = 0 ; k < n ; k++)	DO 100 JORD=1,N
- * while (head >= 0)		DO 70 K=1,JORD
- * for (p = Cheap [j] ; ...)	DO 20 II=IN1,IN2
- * for (p = head ; ...)		DO 90 K=1,JORD
+ * maxtrans                     MC21B
+ * --------                     -----
+ * for (k = 0 ; k < n ; k++)    DO 100 JORD=1,N
+ * while (head >= 0)            DO 70 K=1,JORD
+ * for (p = Cheap [j] ; ...)    DO 20 II=IN1,IN2
+ * for (p = head ; ...)         DO 90 K=1,JORD
  */
 
 static Int augment
 (
-    Int k,		/* which stage of the main loop we're in */
-    Int Ap [ ],		/* column pointers, size n+1 */
-    Int Ai [ ],		/* row indices, size nz = Ap [n] */
-    Int Match [ ],	/* size n,  Match [i] = j if col j matched to i */
-    Int Cheap [ ],	/* rows Ai [Ap [j] .. Cheap [j]-1] alread matched */
-    Int Flag [ ],	/* Flag [j] = k if j already visited this stage */
-    Int Istack [ ],	/* size n.  Row index stack. */
-    Int Jstack [ ],	/* size n.  Column index stack. */
-    Int Pstack [ ],	/* size n.  Keeps track of position in adjacency list */
-    double *work,	/* work performed by the depth-first-search */
-    double maxwork	/* maximum work allowed */
+    Int k,              /* which stage of the main loop we're in */
+    Int Ap [ ],         /* column pointers, size n+1 */
+    Int Ai [ ],         /* row indices, size nz = Ap [n] */
+    Int Match [ ],      /* size n,  Match [i] = j if col j matched to i */
+    Int Cheap [ ],      /* rows Ai [Ap [j] .. Cheap [j]-1] alread matched */
+    Int Flag [ ],       /* Flag [j] = k if j already visited this stage */
+    Int Istack [ ],     /* size n.  Row index stack. */
+    Int Jstack [ ],     /* size n.  Column index stack. */
+    Int Pstack [ ],     /* size n.  Keeps track of position in adjacency list */
+    double *work,       /* work performed by the depth-first-search */
+    double maxwork      /* maximum work allowed */
 )
 {
     /* local variables, but "global" to all DFS levels: */
-    Int found ;	/* true if match found.  */
-    Int head ;	/* top of stack */
+    Int found ; /* true if match found.  */
+    Int head ;  /* top of stack */
 
     /* variables that are purely local to any one DFS level: */
-    Int j2 ;	/* the next DFS goes to node j2 */
-    Int pend ;	/* one past the end of the adjacency list for node j */
+    Int j2 ;    /* the next DFS goes to node j2 */
+    Int pend ;  /* one past the end of the adjacency list for node j */
     Int pstart ;
     Int quick ;
 
     /* variables that need to be pushed then popped from the stack: */
-    Int i ;	/* the row tentatively matched to i if DFS successful */
-    Int j ;	/* the DFS is at the current node j */
-    Int p ;	/* current index into the adj. list for node j */
+    Int i ;     /* the row tentatively matched to i if DFS successful */
+    Int j ;     /* the DFS is at the current node j */
+    Int p ;     /* current index into the adj. list for node j */
     /* the variables i, j, and p are stacked in Istack, Jstack, and Pstack */
 
     quick = (maxwork > 0) ;
@@ -172,117 +172,117 @@ static Int augment
 
     while (head >= 0)
     {
-	j = Jstack [head] ;
-	pend = Ap [j+1] ;
-
-	if (Flag [j] != k)	    /* a node is not yet visited */
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* prework for node j */
-	    /* -------------------------------------------------------------- */
-
-	    /* first time that j has been visited */
-	    Flag [j] = k ;
-	    /* cheap assignment: find the next unmatched row in col j.  This
-	     * loop takes at most O(nnz(A)) time for the sum total of all
-	     * calls to augment. */
-	    for (p = Cheap [j] ; p < pend && !found ; p++)
-	    {
-		i = Ai [p] ;
-		found = (Match [i] == EMPTY) ;
-	    }
-	    Cheap [j] = p ;
-
-	    /* -------------------------------------------------------------- */
-
-	    /* prepare for DFS */
-	    if (found)
-	    {
-		/* end of augmenting path, column j matched with row i */
-		Istack [head] = i ;
-		break ;
-	    }
-	    /* set Pstack [head] to the first entry in column j to scan */
-	    Pstack [head] = Ap [j] ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* quick return if too much work done */
-	/* ------------------------------------------------------------------ */
-
-	if (quick && *work > maxwork)
-	{
-	    /* too much work has been performed; abort the search */
-	    return (EMPTY) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* DFS for nodes adjacent to j */
-	/* ------------------------------------------------------------------ */
-
-	/* If cheap assignment not made, continue the depth-first search.  All
-	 * rows in column j are already matched.  Add the adjacent nodes to the
-	 * stack by iterating through until finding another non-visited node.
-	 *
-	 * It is the following loop that can force maxtrans to take
-	 * O(n*nnz(A)) time. */
-
-	pstart = Pstack [head] ;
-	for (p = pstart ; p < pend ; p++)
-	{
-	    i = Ai [p] ;
-	    j2 = Match [i] ;
-	    ASSERT (j2 != EMPTY) ;
-	    if (Flag [j2] != k)
-	    {
-		/* Node j2 is not yet visited, start a depth-first search on
-		 * node j2.  Keep track of where we left off in the scan of adj
-		 * list of node j so we can restart j where we left off. */
-		Pstack [head] = p + 1 ;
-		/* Push j2 onto the stack and immediately break so we can
-		 * recurse on node j2.  Also keep track of row i which (if this
-		 * search for an augmenting path works) will be matched with the
-		 * current node j. */
-		Istack [head] = i ;
-		Jstack [++head] = j2 ;
-		break ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* determine how much work was just performed */
-	/* ------------------------------------------------------------------ */
-
-	*work += (p - pstart + 1) ;
-
-	/* ------------------------------------------------------------------ */
-	/* node j is done, but the postwork is postponed - see below */
-	/* ------------------------------------------------------------------ */
-
-	if (p == pend)
-	{
-	    /* If all adjacent nodes of j are already visited, pop j from
-	     * stack and continue.  We failed to find a match. */
-	    head-- ;
-	}
+        j = Jstack [head] ;
+        pend = Ap [j+1] ;
+
+        if (Flag [j] != k)          /* a node is not yet visited */
+        {
+
+            /* -------------------------------------------------------------- */
+            /* prework for node j */
+            /* -------------------------------------------------------------- */
+
+            /* first time that j has been visited */
+            Flag [j] = k ;
+            /* cheap assignment: find the next unmatched row in col j.  This
+             * loop takes at most O(nnz(A)) time for the sum total of all
+             * calls to augment. */
+            for (p = Cheap [j] ; p < pend && !found ; p++)
+            {
+                i = Ai [p] ;
+                found = (Match [i] == EMPTY) ;
+            }
+            Cheap [j] = p ;
+
+            /* -------------------------------------------------------------- */
+
+            /* prepare for DFS */
+            if (found)
+            {
+                /* end of augmenting path, column j matched with row i */
+                Istack [head] = i ;
+                break ;
+            }
+            /* set Pstack [head] to the first entry in column j to scan */
+            Pstack [head] = Ap [j] ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* quick return if too much work done */
+        /* ------------------------------------------------------------------ */
+
+        if (quick && *work > maxwork)
+        {
+            /* too much work has been performed; abort the search */
+            return (EMPTY) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* DFS for nodes adjacent to j */
+        /* ------------------------------------------------------------------ */
+
+        /* If cheap assignment not made, continue the depth-first search.  All
+         * rows in column j are already matched.  Add the adjacent nodes to the
+         * stack by iterating through until finding another non-visited node.
+         *
+         * It is the following loop that can force maxtrans to take
+         * O(n*nnz(A)) time. */
+
+        pstart = Pstack [head] ;
+        for (p = pstart ; p < pend ; p++)
+        {
+            i = Ai [p] ;
+            j2 = Match [i] ;
+            ASSERT (j2 != EMPTY) ;
+            if (Flag [j2] != k)
+            {
+                /* Node j2 is not yet visited, start a depth-first search on
+                 * node j2.  Keep track of where we left off in the scan of adj
+                 * list of node j so we can restart j where we left off. */
+                Pstack [head] = p + 1 ;
+                /* Push j2 onto the stack and immediately break so we can
+                 * recurse on node j2.  Also keep track of row i which (if this
+                 * search for an augmenting path works) will be matched with the
+                 * current node j. */
+                Istack [head] = i ;
+                Jstack [++head] = j2 ;
+                break ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* determine how much work was just performed */
+        /* ------------------------------------------------------------------ */
+
+        *work += (p - pstart + 1) ;
+
+        /* ------------------------------------------------------------------ */
+        /* node j is done, but the postwork is postponed - see below */
+        /* ------------------------------------------------------------------ */
+
+        if (p == pend)
+        {
+            /* If all adjacent nodes of j are already visited, pop j from
+             * stack and continue.  We failed to find a match. */
+            head-- ;
+        }
     }
 
     /* postwork for all nodes j in the stack */
     /* unwind the path and make the corresponding matches */
     if (found)
     {
-	for (p = head ; p >= 0 ; p--)
-	{
-	    j = Jstack [p] ;
-	    i = Istack [p] ;
-
-	    /* -------------------------------------------------------------- */
-	    /* postwork for node j */
-	    /* -------------------------------------------------------------- */
-	    /* if found, match row i with column j */
-	    Match [i] = j ;
-	}
+        for (p = head ; p >= 0 ; p--)
+        {
+            j = Jstack [p] ;
+            i = Istack [p] ;
+
+            /* -------------------------------------------------------------- */
+            /* postwork for node j */
+            /* -------------------------------------------------------------- */
+            /* if found, match row i with column j */
+            Match [i] = j ;
+        }
     }
     return (found) ;
 }
@@ -295,17 +295,17 @@ static Int augment
 Int BTF(maxtrans)   /* returns # of columns in the matching */
 (
     /* --- input --- */
-    Int nrow,	    /* A is nrow-by-ncol in compressed column form */
+    Int nrow,       /* A is nrow-by-ncol in compressed column form */
     Int ncol,
-    Int Ap [ ],	    /* size ncol+1 */
-    Int Ai [ ],	    /* size nz = Ap [ncol] */
+    Int Ap [ ],     /* size ncol+1 */
+    Int Ai [ ],     /* size nz = Ap [ncol] */
     double maxwork, /* do at most maxwork*nnz(A) work; no limit if <= 0.  This
-		     * work limit excludes the O(nnz(A)) cheap-match phase. */
+                     * work limit excludes the O(nnz(A)) cheap-match phase. */
 
     /* --- output --- */
     double *work,   /* work = -1 if maxwork > 0 and the total work performed
-		     * reached the maximum of maxwork*nnz(A)).
-		     * Otherwise, work = the total work performed. */
+                     * reached the maximum of maxwork*nnz(A)).
+                     * Otherwise, work = the total work performed. */
 
     Int Match [ ],  /* size nrow.  Match [i] = j if column j matched to row i */
 
@@ -331,19 +331,19 @@ Int BTF(maxtrans)   /* returns # of columns in the matching */
     /* in column j, rows Ai [Ap [j] .. Cheap [j]-1] are known to be matched */
     for (j = 0 ; j < ncol ; j++)
     {
-	Cheap [j] = Ap [j] ;
-	Flag [j] = EMPTY ; 
+        Cheap [j] = Ap [j] ;
+        Flag [j] = EMPTY ; 
     }
 
     /* all rows and columns are currently unmatched */
     for (i = 0 ; i < nrow ; i++)
     {
-	Match [i] = EMPTY ;
+        Match [i] = EMPTY ;
     }
 
     if (maxwork > 0)
     {
-	maxwork *= Ap [ncol] ;
+        maxwork *= Ap [ncol] ;
     }
     *work = 0 ;
 
@@ -355,19 +355,19 @@ Int BTF(maxtrans)   /* returns # of columns in the matching */
     work_limit_reached = FALSE ;
     for (k = 0 ; k < ncol ; k++)
     {
-	/* find an augmenting path to match some row i to column k */
-	result = augment (k, Ap, Ai, Match, Cheap, Flag, Istack, Jstack, Pstack,
-	    work, maxwork) ;
-	if (result == TRUE)
-	{
-	    /* we found it.  Match [i] = k for some row i has been done. */
-	    nmatch++ ;
-	}
-	else if (result == EMPTY)
-	{
-	    /* augment gave up because of too much work, and no match found */
-	    work_limit_reached = TRUE ;
-	}
+        /* find an augmenting path to match some row i to column k */
+        result = augment (k, Ap, Ai, Match, Cheap, Flag, Istack, Jstack, Pstack,
+            work, maxwork) ;
+        if (result == TRUE)
+        {
+            /* we found it.  Match [i] = k for some row i has been done. */
+            nmatch++ ;
+        }
+        else if (result == EMPTY)
+        {
+            /* augment gave up because of too much work, and no match found */
+            work_limit_reached = TRUE ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -379,8 +379,8 @@ Int BTF(maxtrans)   /* returns # of columns in the matching */
 
     if (work_limit_reached)
     {
-	/* return -1 if the work limit of maxwork*nnz(A) was reached */
-	*work = EMPTY ;
+        /* return -1 if the work limit of maxwork*nnz(A) was reached */
+        *work = EMPTY ;
     }
 
     return (nmatch) ;
diff --git a/BTF/Source/btf_order.c b/BTF/Source/btf_order.c
index 7ed04f1..b0bdb29 100644
--- a/BTF/Source/btf_order.c
+++ b/BTF/Source/btf_order.c
@@ -22,7 +22,7 @@
  *
  * See btf.h for more details.
  *
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  */
 
@@ -32,20 +32,20 @@
 /* This function only operates on square matrices (either structurally full-
  * rank, or structurally rank deficient). */
 
-Int BTF(order)	    /* returns number of blocks found */
+Int BTF(order)      /* returns number of blocks found */
 (
     /* input, not modified: */
-    Int n,	    /* A is n-by-n in compressed column form */
-    Int Ap [ ],	    /* size n+1 */
-    Int Ai [ ],	    /* size nz = Ap [n] */
+    Int n,          /* A is n-by-n in compressed column form */
+    Int Ap [ ],     /* size n+1 */
+    Int Ai [ ],     /* size nz = Ap [n] */
     double maxwork, /* do at most maxwork*nnz(A) work in the maximum
-		     * transversal; no limit if <= 0 */
+                     * transversal; no limit if <= 0 */
 
     /* output, not defined on input */
     double *work,   /* work performed in maxtrans, or -1 if limit reached */
-    Int P [ ],	    /* size n, row permutation */
-    Int Q [ ],	    /* size n, column permutation */
-    Int R [ ],	    /* size n+1.  block b is in rows/cols R[b] ... R[b+1]-1 */
+    Int P [ ],      /* size n, row permutation */
+    Int Q [ ],      /* size n, column permutation */
+    Int R [ ],      /* size n+1.  block b is in rows/cols R[b] ... R[b+1]-1 */
     Int *nmatch,    /* # nonzeros on diagonal of P*A*Q */
 
     /* workspace, not defined on input or output */
@@ -74,47 +74,47 @@ Int BTF(order)	    /* returns number of blocks found */
 
     if (*nmatch < n)
     {
-	/* get a size-n work array */
-	Flag = Work + n ;
-	for (j = 0 ; j < n ; j++)
-	{
-	    Flag [j] = 0 ;
-	}
-
-	/* flag all matched columns */
-	for (i = 0 ; i < n ; i++)
-	{
-	    j = Q [i] ;
-	    if (j != EMPTY)
-	    {
-		/* row i and column j are matched to each other */
-		Flag [j] = 1 ;
-	    }
-	}
-
-	/* make a list of all unmatched columns, in Work [0..nbadcol-1]  */
-	nbadcol = 0 ;
-	for (j = n-1 ; j >= 0 ; j--)
-	{
-	    if (!Flag [j])
-	    {
-		/* j is matched to nobody */
-		Work [nbadcol++] = j ;
-	    }
-	}
-	ASSERT (*nmatch + nbadcol == n) ;
-
-	/* make an assignment for each unmatched row */
-	for (i = 0 ; i < n ; i++)
-	{
-	    if (Q [i] == EMPTY && nbadcol > 0)
-	    {
-		/* get an unmatched column j */
-		j = Work [--nbadcol] ;
-		/* assign j to row i and flag the entry by "flipping" it */
-		Q [i] = BTF_FLIP (j) ;
-	    }
-	}
+        /* get a size-n work array */
+        Flag = Work + n ;
+        for (j = 0 ; j < n ; j++)
+        {
+            Flag [j] = 0 ;
+        }
+
+        /* flag all matched columns */
+        for (i = 0 ; i < n ; i++)
+        {
+            j = Q [i] ;
+            if (j != EMPTY)
+            {
+                /* row i and column j are matched to each other */
+                Flag [j] = 1 ;
+            }
+        }
+
+        /* make a list of all unmatched columns, in Work [0..nbadcol-1]  */
+        nbadcol = 0 ;
+        for (j = n-1 ; j >= 0 ; j--)
+        {
+            if (!Flag [j])
+            {
+                /* j is matched to nobody */
+                Work [nbadcol++] = j ;
+            }
+        }
+        ASSERT (*nmatch + nbadcol == n) ;
+
+        /* make an assignment for each unmatched row */
+        for (i = 0 ; i < n ; i++)
+        {
+            if (Q [i] == EMPTY && nbadcol > 0)
+            {
+                /* get an unmatched column j */
+                j = Work [--nbadcol] ;
+                /* assign j to row i and flag the entry by "flipping" it */
+                Q [i] = BTF_FLIP (j) ;
+            }
+        }
     }
 
     /* The permutation of a square matrix can be recovered as follows: Row i is
diff --git a/BTF/Source/btf_strongcomp.c b/BTF/Source/btf_strongcomp.c
index 4474bec..36ec3e2 100644
--- a/BTF/Source/btf_strongcomp.c
+++ b/BTF/Source/btf_strongcomp.c
@@ -6,20 +6,20 @@
  * the matrix into upper block triangular form.  See btf.h for more details.
  * Input matrix and Q are not checked on input.
  *
- * Copyright (c) 2004-2007.  Tim Davis, University of Florida,
+ * By Tim Davis.  Copyright (c) 2004-2007, University of Florida.
  * with support from Sandia National Laboratories.  All Rights Reserved.
  */
 
 #include "btf.h"
 #include "btf_internal.h"
 
-#define UNVISITED (-2)	    /* Flag [j] = UNVISITED if node j not visited yet */
-#define UNASSIGNED (-1)	    /* Flag [j] = UNASSIGNED if node j has been visited,
-			     * but not yet assigned to a strongly-connected
-			     * component (aka block).  Flag [j] = k (k in the
-			     * range 0 to nblocks-1) if node j has been visited
-			     * (and completed, with its postwork done) and
-			     * assigned to component k. */
+#define UNVISITED (-2)      /* Flag [j] = UNVISITED if node j not visited yet */
+#define UNASSIGNED (-1)     /* Flag [j] = UNASSIGNED if node j has been visited,
+                             * but not yet assigned to a strongly-connected
+                             * component (aka block).  Flag [j] = k (k in the
+                             * range 0 to nblocks-1) if node j has been visited
+                             * (and completed, with its postwork done) and
+                             * assigned to component k. */
 
 /* This file contains two versions of the depth-first-search, a recursive one
  * and a non-recursive one.  By default, the non-recursive one is used. */
@@ -58,22 +58,22 @@
 static void dfs
 (
     /* inputs, not modified on output: */
-    Int j,		/* start the DFS at node j */
-    Int Ap [ ],		/* size n+1, column pointers for the matrix A */
-    Int Ai [ ],		/* row indices, size nz = Ap [n] */
-    Int Q [ ],		/* input column permutation */
+    Int j,              /* start the DFS at node j */
+    Int Ap [ ],         /* size n+1, column pointers for the matrix A */
+    Int Ai [ ],         /* row indices, size nz = Ap [n] */
+    Int Q [ ],          /* input column permutation */
 
     /* inputs, modified on output (each array is of size n): */
-    Int Time [ ],	/* Time [j] = "time" that node j was first visited */
-    Int Flag [ ],	/* Flag [j]: see above */
-    Int Low [ ],	/* Low [j]: see definition below */
-    Int *p_nblocks,	/* number of blocks (aka strongly-connected-comp.)*/
-    Int *p_timestamp,	/* current "time" */
+    Int Time [ ],       /* Time [j] = "time" that node j was first visited */
+    Int Flag [ ],       /* Flag [j]: see above */
+    Int Low [ ],        /* Low [j]: see definition below */
+    Int *p_nblocks,     /* number of blocks (aka strongly-connected-comp.)*/
+    Int *p_timestamp,   /* current "time" */
 
     /* workspace, not defined on input or output: */
-    Int Cstack [ ],	/* size n, output stack to hold nodes of components */
-    Int Jstack [ ],	/* size n, stack for the variable j */
-    Int Pstack [ ]	/* size n, stack for the variable p */
+    Int Cstack [ ],     /* size n, output stack to hold nodes of components */
+    Int Jstack [ ],     /* size n, stack for the variable j */
+    Int Pstack [ ]      /* size n, stack for the variable p */
 )
 {
     /* ---------------------------------------------------------------------- */
@@ -81,17 +81,17 @@ static void dfs
     /* ---------------------------------------------------------------------- */
 
     /* local variables, but "global" to all DFS levels: */
-    Int chead ;	    /* top of Cstack */
-    Int jhead ;	    /* top of Jstack and Pstack */
+    Int chead ;     /* top of Cstack */
+    Int jhead ;     /* top of Jstack and Pstack */
 
     /* variables that are purely local to any one DFS level: */
-    Int i ;	    /* edge (j,i) considered; i can be next node to traverse */
+    Int i ;         /* edge (j,i) considered; i can be next node to traverse */
     Int parent ;    /* parent of node j in the DFS tree */
-    Int pend ;	    /* one past the end of the adjacency list for node j */
-    Int jj ;	    /* column j of A*Q is column jj of the input matrix A */
+    Int pend ;      /* one past the end of the adjacency list for node j */
+    Int jj ;        /* column j of A*Q is column jj of the input matrix A */
 
     /* variables that need to be pushed then popped from the stack: */
-    Int p ;	    /* current index into the adj. list for node j */
+    Int p ;         /* current index into the adj. list for node j */
     /* the variables j and p are stacked in Jstack and Pstack */
 
     /* local copies of variables in the calling routine */
@@ -102,106 +102,106 @@ static void dfs
     /* start a DFS at node j (same as the recursive call dfs (EMPTY, j)) */
     /* ---------------------------------------------------------------------- */
 
-    chead = 0 ;		    /* component stack is empty */
-    jhead = 0 ;		    /* Jstack and Pstack are empty */
-    Jstack [0] = j ;	    /* put the first node j on the Jstack */
+    chead = 0 ;             /* component stack is empty */
+    jhead = 0 ;             /* Jstack and Pstack are empty */
+    Jstack [0] = j ;        /* put the first node j on the Jstack */
     ASSERT (Flag [j] == UNVISITED) ;
 
     while (jhead >= 0)
     {
-	j = Jstack [jhead] ;	    /* grab the node j from the top of Jstack */
-
-	/* determine which column jj of the A is column j of A*Q */
-	jj = (Q == (Int *) NULL) ? (j) : (BTF_UNFLIP (Q [j])) ;
-	pend = Ap [jj+1] ;	    /* j's row index list ends at Ai [pend-1] */
-
-	if (Flag [j] == UNVISITED)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* prework at node j */
-	    /* -------------------------------------------------------------- */
-
-	    /* node j is being visited for the first time */
-	    Cstack [++chead] = j ;	    /* push j onto the stack */
-	    timestamp++ ;		    /* get a timestamp */
-	    Time [j] = timestamp ;	    /* give the timestamp to node j */
-	    Low [j] = timestamp ;
-	    Flag [j] = UNASSIGNED ;	    /* flag node j as visited */
-
-	    /* -------------------------------------------------------------- */
-	    /* set Pstack [jhead] to the first entry in column j to scan */
-	    /* -------------------------------------------------------------- */
-
-	    Pstack [jhead] = Ap [jj] ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* DFS rooted at node j (start it, or continue where left off) */
-	/* ------------------------------------------------------------------ */
-
-	for (p = Pstack [jhead] ; p < pend ; p++)
-	{
-	    i = Ai [p] ;    /* examine the edge from node j to node i */
-	    if (Flag [i] == UNVISITED)
-	    {
-		/* Node i has not been visited - start a DFS at node i.
-		 * Keep track of where we left off in the scan of adjacency list
-		 * of node j so we can restart j where we left off. */
-		Pstack [jhead] = p + 1 ;
-		/* Push i onto the stack and immediately break
-		 * so we can recurse on node i. */
-		Jstack [++jhead] = i ;
-		ASSERT (Time [i] == EMPTY) ;
-		ASSERT (Low [i] == EMPTY) ;
-		/* break here to do what the recursive call dfs (j,i) does */
-		break ;
-	    }
-	    else if (Flag [i] == UNASSIGNED)
-	    {
-		/* Node i has been visited, but still unassigned to a block
-		 * this is a back or cross edge if Time [i] < Time [j].
-		 * Note that i might equal j, in which case this code does
-		 * nothing. */
-		ASSERT (Time [i] > 0) ;
-		ASSERT (Low [i] > 0) ;
-		Low [j] = MIN (Low [j], Time [i]) ;
-	    }
-	}
-
-	if (p == pend)
-	{
-	    /* If all adjacent nodes of j are already visited, pop j from
-	     * Jstack and do the post work for node j.  This also pops p
-	     * from the Pstack. */
-	    jhead-- ;
-
-	    /* -------------------------------------------------------------- */
-	    /* postwork at node j */
-	    /* -------------------------------------------------------------- */
-
-	    /* determine if node j is the head of a component */
-	    if (Low [j] == Time [j])
-	    {
-		/* pop all nodes in this SCC from Cstack */
-		while (TRUE)
-		{
-		    ASSERT (chead >= 0) ;	/* stack not empty (j in it) */
-		    i = Cstack [chead--] ;	/* pop a node from the Cstack */
-		    ASSERT (i >= 0) ;
-		    ASSERT (Flag [i] == UNASSIGNED) ;
-		    Flag [i] = nblocks ;	/* assign i to current block */
-		    if (i == j) break ;		/* current block ends at j */
-		}
-		nblocks++ ;	/* one more block has been found */
-	    }
-	    /* update Low [parent], if the parent exists */
-	    if (jhead >= 0)
-	    {
-		parent = Jstack [jhead] ;
-		Low [parent] = MIN (Low [parent], Low [j]) ;
-	    }
-	}
+        j = Jstack [jhead] ;        /* grab the node j from the top of Jstack */
+
+        /* determine which column jj of the A is column j of A*Q */
+        jj = (Q == (Int *) NULL) ? (j) : (BTF_UNFLIP (Q [j])) ;
+        pend = Ap [jj+1] ;          /* j's row index list ends at Ai [pend-1] */
+
+        if (Flag [j] == UNVISITED)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* prework at node j */
+            /* -------------------------------------------------------------- */
+
+            /* node j is being visited for the first time */
+            Cstack [++chead] = j ;          /* push j onto the stack */
+            timestamp++ ;                   /* get a timestamp */
+            Time [j] = timestamp ;          /* give the timestamp to node j */
+            Low [j] = timestamp ;
+            Flag [j] = UNASSIGNED ;         /* flag node j as visited */
+
+            /* -------------------------------------------------------------- */
+            /* set Pstack [jhead] to the first entry in column j to scan */
+            /* -------------------------------------------------------------- */
+
+            Pstack [jhead] = Ap [jj] ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* DFS rooted at node j (start it, or continue where left off) */
+        /* ------------------------------------------------------------------ */
+
+        for (p = Pstack [jhead] ; p < pend ; p++)
+        {
+            i = Ai [p] ;    /* examine the edge from node j to node i */
+            if (Flag [i] == UNVISITED)
+            {
+                /* Node i has not been visited - start a DFS at node i.
+                 * Keep track of where we left off in the scan of adjacency list
+                 * of node j so we can restart j where we left off. */
+                Pstack [jhead] = p + 1 ;
+                /* Push i onto the stack and immediately break
+                 * so we can recurse on node i. */
+                Jstack [++jhead] = i ;
+                ASSERT (Time [i] == EMPTY) ;
+                ASSERT (Low [i] == EMPTY) ;
+                /* break here to do what the recursive call dfs (j,i) does */
+                break ;
+            }
+            else if (Flag [i] == UNASSIGNED)
+            {
+                /* Node i has been visited, but still unassigned to a block
+                 * this is a back or cross edge if Time [i] < Time [j].
+                 * Note that i might equal j, in which case this code does
+                 * nothing. */
+                ASSERT (Time [i] > 0) ;
+                ASSERT (Low [i] > 0) ;
+                Low [j] = MIN (Low [j], Time [i]) ;
+            }
+        }
+
+        if (p == pend)
+        {
+            /* If all adjacent nodes of j are already visited, pop j from
+             * Jstack and do the post work for node j.  This also pops p
+             * from the Pstack. */
+            jhead-- ;
+
+            /* -------------------------------------------------------------- */
+            /* postwork at node j */
+            /* -------------------------------------------------------------- */
+
+            /* determine if node j is the head of a component */
+            if (Low [j] == Time [j])
+            {
+                /* pop all nodes in this SCC from Cstack */
+                while (TRUE)
+                {
+                    ASSERT (chead >= 0) ;       /* stack not empty (j in it) */
+                    i = Cstack [chead--] ;      /* pop a node from the Cstack */
+                    ASSERT (i >= 0) ;
+                    ASSERT (Flag [i] == UNASSIGNED) ;
+                    Flag [i] = nblocks ;        /* assign i to current block */
+                    if (i == j) break ;         /* current block ends at j */
+                }
+                nblocks++ ;     /* one more block has been found */
+            }
+            /* update Low [parent], if the parent exists */
+            if (jhead >= 0)
+            {
+                parent = Jstack [jhead] ;
+                Low [parent] = MIN (Low [parent], Low [j]) ;
+            }
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -242,24 +242,24 @@ static Int  /* for recursive illustration only, not for production use */
 
 static void dfs
 (
-    Int parent,		/* came from parent node */
-    Int j		/* at node j in the DFS */
+    Int parent,         /* came from parent node */
+    Int j               /* at node j in the DFS */
 )
 {
-    Int p ;	    /* current index into the adj. list for node j */
-    Int i ;	    /* edge (j,i) considered; i can be next node to traverse */
-    Int jj ;	    /* column j of A*Q is column jj of the input matrix A */
+    Int p ;         /* current index into the adj. list for node j */
+    Int i ;         /* edge (j,i) considered; i can be next node to traverse */
+    Int jj ;        /* column j of A*Q is column jj of the input matrix A */
 
     /* ---------------------------------------------------------------------- */
     /* prework at node j */
     /* ---------------------------------------------------------------------- */
 
     /* node j is being visited for the first time */
-    Cstack [++chead] = j ;	    /* push j onto the stack */
-    timestamp++ ;		    /* get a timestamp */
-    Time [j] = timestamp ;	    /* give the timestamp to node j */
+    Cstack [++chead] = j ;          /* push j onto the stack */
+    timestamp++ ;                   /* get a timestamp */
+    Time [j] = timestamp ;          /* give the timestamp to node j */
     Low [j] = timestamp ;
-    Flag [j] = UNASSIGNED ;	    /* flag node j as visited */
+    Flag [j] = UNASSIGNED ;         /* flag node j as visited */
 
     /* ---------------------------------------------------------------------- */
     /* DFS rooted at node j */
@@ -269,20 +269,20 @@ static void dfs
     jj = (Q == (Int *) NULL) ? (j) : (BTF_UNFLIP (Q [j])) ;
     for (p = Ap [jj] ; p < Ap [jj+1] ; p++)
     {
-	i = Ai [p] ;    /* examine the edge from node j to node i */
-	if (Flag [i] == UNVISITED)
-	{
-	    /* Node i has not been visited - start a DFS at node i. */
-	    dfs (j, i) ;
-	}
-	else if (Flag [i] == UNASSIGNED)
-	{
-	    /* Node i has been visited, but still unassigned to a block
-	     * this is a back or cross edge if Time [i] < Time [j].
-	     * Note that i might equal j, in which case this code does
-	     * nothing. */
-	    Low [j] = MIN (Low [j], Time [i]) ;
-	}
+        i = Ai [p] ;    /* examine the edge from node j to node i */
+        if (Flag [i] == UNVISITED)
+        {
+            /* Node i has not been visited - start a DFS at node i. */
+            dfs (j, i) ;
+        }
+        else if (Flag [i] == UNASSIGNED)
+        {
+            /* Node i has been visited, but still unassigned to a block
+             * this is a back or cross edge if Time [i] < Time [j].
+             * Note that i might equal j, in which case this code does
+             * nothing. */
+            Low [j] = MIN (Low [j], Time [i]) ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -292,23 +292,23 @@ static void dfs
     /* determine if node j is the head of a component */
     if (Low [j] == Time [j])
     {
-	/* pop all nodes in this strongly connected component from Cstack */
-	while (TRUE)
-	{
-	    i = Cstack [chead--] ;	/* pop a node from the Cstack */
-	    Flag [i] = nblocks ;	/* assign node i to current block */
-	    if (i == j) break ;		/* current block ends at node j */
-	}
-	nblocks++ ;	/* one more block has been found */
+        /* pop all nodes in this strongly connected component from Cstack */
+        while (TRUE)
+        {
+            i = Cstack [chead--] ;      /* pop a node from the Cstack */
+            Flag [i] = nblocks ;        /* assign node i to current block */
+            if (i == j) break ;         /* current block ends at node j */
+        }
+        nblocks++ ;     /* one more block has been found */
     }
     /* update Low [parent] */
     if (parent != EMPTY)
     {
-	/* Note that this could be done with Low[j] = MIN(Low[j],Low[i]) just
-	 * after the dfs (j,i) statement above, and then parent would not have
-	 * to be an input argument.  Putting it here places all the postwork
-	 * for node j in one place, thus making the non-recursive DFS easier. */
-	Low [parent] = MIN (Low [parent], Low [j]) ;
+        /* Note that this could be done with Low[j] = MIN(Low[j],Low[i]) just
+         * after the dfs (j,i) statement above, and then parent would not have
+         * to be an input argument.  Putting it here places all the postwork
+         * for node j in one place, thus making the non-recursive DFS easier. */
+        Low [parent] = MIN (Low [parent], Low [j]) ;
     }
 }
 
@@ -323,22 +323,22 @@ static void dfs
 Int BTF(strongcomp) /* return # of strongly connected components */
 (
     /* input, not modified: */
-    Int n,	    /* A is n-by-n in compressed column form */
-    Int Ap [ ],	    /* size n+1 */
-    Int Ai [ ],	    /* size nz = Ap [n] */
+    Int n,          /* A is n-by-n in compressed column form */
+    Int Ap [ ],     /* size n+1 */
+    Int Ai [ ],     /* size nz = Ap [n] */
 
     /* optional input, modified (if present) on output: */
-    Int Q [ ],	    /* size n, input column permutation.  The permutation Q can
-		     * include a flag which indicates an unmatched row.
-		     * jold = BTF_UNFLIP (Q [jnew]) is the permutation;
-		     * this function ingnores these flags.  On output, it is
-		     * modified according to the permutation P. */
+    Int Q [ ],      /* size n, input column permutation.  The permutation Q can
+                     * include a flag which indicates an unmatched row.
+                     * jold = BTF_UNFLIP (Q [jnew]) is the permutation;
+                     * this function ingnores these flags.  On output, it is
+                     * modified according to the permutation P. */
 
     /* output, not defined on input: */
-    Int P [ ],	    /* size n.  P [k] = j if row and column j are kth row/col
-		     * in permuted matrix. */
-    Int R [ ],	    /* size n+1.  kth block is in rows/cols R[k] ... R[k+1]-1
-		     * of the permuted matrix. */
+    Int P [ ],      /* size n.  P [k] = j if row and column j are kth row/col
+                     * in permuted matrix. */
+    Int R [ ],      /* size n+1.  kth block is in rows/cols R[k] ... R[k+1]-1
+                     * of the permuted matrix. */
 
     /* workspace, not defined on input or output: */
     Int Work [ ]    /* size 4n */
@@ -403,31 +403,31 @@ Int BTF(strongcomp) /* recursive version - same as above except for Work size */
 
     Time   = Work ; Work += n ;
     Flag   = Work ; Work += n ;
-    Low    = P ;		/* use output array P as workspace for Low */
-    Cstack = R ;		/* use output array R as workspace for Cstack */
+    Low    = P ;                /* use output array P as workspace for Low */
+    Cstack = R ;                /* use output array R as workspace for Cstack */
 
 #ifndef RECURSIVE
     /* stack for non-recursive dfs */
-    Jstack = Work ; Work += n ;	    /* stack for j */
-    Pstack = Work ;		    /* stack for p */
+    Jstack = Work ; Work += n ;     /* stack for j */
+    Pstack = Work ;                 /* stack for p */
 #endif
 
     for (j = 0 ; j < n ; j++)
     {
-	Flag [j] = UNVISITED ;
-	Low [j] = EMPTY ;
-	Time [j] = EMPTY ;
+        Flag [j] = UNVISITED ;
+        Low [j] = EMPTY ;
+        Time [j] = EMPTY ;
 #ifndef NDEBUG
-	Cstack [j] = EMPTY ;
+        Cstack [j] = EMPTY ;
 #ifndef RECURSIVE
-	Jstack [j] = EMPTY ;
-	Pstack [j] = EMPTY ;
+        Jstack [j] = EMPTY ;
+        Pstack [j] = EMPTY ;
 #endif
 #endif
     }
 
-    timestamp = 0 ;	/* each node given a timestamp when it is visited */
-    nblocks = 0 ;	/* number of blocks found so far */
+    timestamp = 0 ;     /* each node given a timestamp when it is visited */
+    nblocks = 0 ;       /* number of blocks found so far */
 
     /* ---------------------------------------------------------------------- */
     /* find the connected components via a depth-first-search */
@@ -435,21 +435,21 @@ Int BTF(strongcomp) /* recursive version - same as above except for Work size */
 
     for (j = 0 ; j < n ; j++)
     {
-	/* node j is unvisited or assigned to a block. Cstack is empty. */
-	ASSERT (Flag [j] == UNVISITED || (Flag [j] >= 0 && Flag [j] < nblocks));
-	if (Flag [j] == UNVISITED)
-	{
+        /* node j is unvisited or assigned to a block. Cstack is empty. */
+        ASSERT (Flag [j] == UNVISITED || (Flag [j] >= 0 && Flag [j] < nblocks));
+        if (Flag [j] == UNVISITED)
+        {
 #ifndef RECURSIVE
-	    /* non-recursive dfs (default) */
-	    dfs (j, Ap, Ai, Q, Time, Flag, Low, &nblocks, &timestamp,
-		    Cstack, Jstack, Pstack) ;
+            /* non-recursive dfs (default) */
+            dfs (j, Ap, Ai, Q, Time, Flag, Low, &nblocks, &timestamp,
+                    Cstack, Jstack, Pstack) ;
 #else
-	    /* recursive dfs (for illustration only) */
-	    ASSERT (chead == EMPTY) ;
-	    dfs (EMPTY, j) ;
-	    ASSERT (chead == EMPTY) ;
+            /* recursive dfs (for illustration only) */
+            ASSERT (chead == EMPTY) ;
+            dfs (EMPTY, j) ;
+            ASSERT (chead == EMPTY) ;
 #endif
-	}
+        }
     }
     ASSERT (timestamp == n) ;
 
@@ -459,26 +459,26 @@ Int BTF(strongcomp) /* recursive version - same as above except for Work size */
 
     for (b = 0 ; b < nblocks ; b++)
     {
-	R [b] = 0 ;
+        R [b] = 0 ;
     }
     for (j = 0 ; j < n ; j++)
     {
-	/* node j has been assigned to block b = Flag [j] */
-	ASSERT (Time [j] > 0 && Time [j] <= n) ;
-	ASSERT (Low [j] > 0 && Low [j] <= n) ;
-	ASSERT (Flag [j] >= 0 && Flag [j] < nblocks) ;
-	R [Flag [j]]++ ;
+        /* node j has been assigned to block b = Flag [j] */
+        ASSERT (Time [j] > 0 && Time [j] <= n) ;
+        ASSERT (Low [j] > 0 && Low [j] <= n) ;
+        ASSERT (Flag [j] >= 0 && Flag [j] < nblocks) ;
+        R [Flag [j]]++ ;
     }
     /* R [b] is now the number of nodes in block b.  Compute cumulative sum
      * of R, using Time [0 ... nblocks-1] as workspace. */
     Time [0] = 0 ;
     for (b = 1 ; b < nblocks ; b++)
     {
-	Time [b] = Time [b-1] + R [b-1] ;
+        Time [b] = Time [b-1] + R [b-1] ;
     }
     for (b = 0 ; b < nblocks ; b++)
     {
-	R [b] = Time [b] ;
+        R [b] = Time [b] ;
     }
     R [nblocks] = n ;
 
@@ -489,20 +489,20 @@ Int BTF(strongcomp) /* recursive version - same as above except for Work size */
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++)
     {
-	P [k] = EMPTY ;
+        P [k] = EMPTY ;
     }
 #endif
 
     for (j = 0 ; j < n ; j++)
     {
-	/* place column j in the permutation */
-	P [Time [Flag [j]]++] = j ;
+        /* place column j in the permutation */
+        P [Time [Flag [j]]++] = j ;
     }
 
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++)
     {
-	ASSERT (P [k] != EMPTY) ;
+        ASSERT (P [k] != EMPTY) ;
     }
 #endif
 
@@ -519,19 +519,19 @@ Int BTF(strongcomp) /* recursive version - same as above except for Work size */
 
     if (Q != (Int *) NULL)
     {
-	/* We found a symmetric permutation P for the matrix A*Q.  The overall
-	 * permutation is thus P*(A*Q)*P'.  Set Q=Q*P' so that the final
-	 * permutation is P*A*Q.  Use Time as workspace.  Note that this
-	 * preserves the negative values of Q if the matrix is structurally
-	 * singular. */
-	for (k = 0 ; k < n ; k++)
-	{
-	    Time [k] = Q [P [k]] ;
-	}
-	for (k = 0 ; k < n ; k++)
-	{
-	    Q [k] = Time [k] ;
-	}
+        /* We found a symmetric permutation P for the matrix A*Q.  The overall
+         * permutation is thus P*(A*Q)*P'.  Set Q=Q*P' so that the final
+         * permutation is P*A*Q.  Use Time as workspace.  Note that this
+         * preserves the negative values of Q if the matrix is structurally
+         * singular. */
+        for (k = 0 ; k < n ; k++)
+        {
+            Time [k] = Q [P [k]] ;
+        }
+        for (k = 0 ; k < n ; k++)
+        {
+            Q [k] = Time [k] ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -541,44 +541,44 @@ Int BTF(strongcomp) /* recursive version - same as above except for Work size */
     /* If Q is not present, the following code can be used to traverse the
      * permuted matrix P*A*P'
      *
-     *	    // compute the inverse of P
-     *	    for (knew = 0 ; knew < n ; knew++)
-     *	    {
-     *		// row and column kold in the old matrix is row/column knew
-     *		// in the permuted matrix P*A*P'
-     *		kold = P [knew] ;
-     *		Pinv [kold] = knew ;
-     *	    }
-     *	    for (b = 0 ; b < nblocks ; b++)
-     *	    {
-     *		// traverse block b of the permuted matrix P*A*P'
-     *		k1 = R [b] ;
-     *		k2 = R [b+1] ;
-     *		nk = k2 - k1 ;
-     *		for (jnew = k1 ; jnew < k2 ; jnew++)
-     *		{
-     *		    jold = P [jnew] ;
-     *		    for (p = Ap [jold] ; p < Ap [jold+1] ; p++)
-     *		    {
-     *			iold = Ai [p] ;
-     *			inew = Pinv [iold] ;
-     *			// Entry in the old matrix is A (iold, jold), and its
-     *			// position in the new matrix P*A*P' is (inew, jnew).
-     *			// Let B be the bth diagonal block of the permuted
-     *			// matrix.  If inew >= k1, then this entry is in row/
-     *			// column (inew-k1, jnew-k1) of the nk-by-nk matrix B.
-     *			// Otherwise, the entry is in the upper block triangular
-     *			// part, not in any diagonal block.
-     *		    }
-     *		}
-     *	    }
+     *      // compute the inverse of P
+     *      for (knew = 0 ; knew < n ; knew++)
+     *      {
+     *          // row and column kold in the old matrix is row/column knew
+     *          // in the permuted matrix P*A*P'
+     *          kold = P [knew] ;
+     *          Pinv [kold] = knew ;
+     *      }
+     *      for (b = 0 ; b < nblocks ; b++)
+     *      {
+     *          // traverse block b of the permuted matrix P*A*P'
+     *          k1 = R [b] ;
+     *          k2 = R [b+1] ;
+     *          nk = k2 - k1 ;
+     *          for (jnew = k1 ; jnew < k2 ; jnew++)
+     *          {
+     *              jold = P [jnew] ;
+     *              for (p = Ap [jold] ; p < Ap [jold+1] ; p++)
+     *              {
+     *                  iold = Ai [p] ;
+     *                  inew = Pinv [iold] ;
+     *                  // Entry in the old matrix is A (iold, jold), and its
+     *                  // position in the new matrix P*A*P' is (inew, jnew).
+     *                  // Let B be the bth diagonal block of the permuted
+     *                  // matrix.  If inew >= k1, then this entry is in row/
+     *                  // column (inew-k1, jnew-k1) of the nk-by-nk matrix B.
+     *                  // Otherwise, the entry is in the upper block triangular
+     *                  // part, not in any diagonal block.
+     *              }
+     *          }
+     *      }
      *
      * If Q is present replace the above statement
-     *		jold = P [jnew] ;
+     *          jold = P [jnew] ;
      * with
-     *		jold = Q [jnew] ;
+     *          jold = Q [jnew] ;
      * or
-     *		jold = BTF_UNFLIP (Q [jnew]) ;
+     *          jold = BTF_UNFLIP (Q [jnew]) ;
      *
      * then entry A (iold,jold) in the old (unpermuted) matrix is at (inew,jnew)
      * in the permuted matrix P*A*Q.  Everything else remains the same as the
diff --git a/CAMD/Demo/Makefile b/CAMD/Demo/Makefile
index 4eebb3d..352b768 100644
--- a/CAMD/Demo/Makefile
+++ b/CAMD/Demo/Makefile
@@ -4,15 +4,16 @@
 
 default: camd_simple camd_demo camd_demo2 camd_l_demo
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(CONFIG) -I../Include -I../../UFconfig
+C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config
 
-UFCONFIG = ../../UFconfig/UFconfig.h
+INC = ../Include/camd.h ../../SuiteSparse_config/SuiteSparse_config.h
 
-INC = ../Include/camd.h $(UFCONFIG)
+LIB2 = ../../SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 library:
+	( cd ../../SuiteSparse_config ; $(MAKE) )
 	( cd ../Lib ; $(MAKE) )
 
 #------------------------------------------------------------------------------
@@ -22,22 +23,22 @@ library:
 dist:
 
 camd_demo: camd_demo.c library $(INC)
-	$(C) -o camd_demo camd_demo.c ../Lib/libcamd.a $(LIB)
+	$(C) -o camd_demo camd_demo.c ../Lib/libcamd.a $(LIB2)
 	./camd_demo > my_camd_demo.out
 	- diff camd_demo.out my_camd_demo.out
 
 camd_l_demo: camd_l_demo.c library $(INC)
-	$(C) -o camd_l_demo camd_l_demo.c ../Lib/libcamd.a $(LIB)
+	$(C) -o camd_l_demo camd_l_demo.c ../Lib/libcamd.a $(LIB2)
 	./camd_l_demo > my_camd_l_demo.out
 	- diff camd_l_demo.out my_camd_l_demo.out
 
 camd_demo2: camd_demo2.c library $(INC)
-	$(C) -o camd_demo2 camd_demo2.c ../Lib/libcamd.a $(LIB)
+	$(C) -o camd_demo2 camd_demo2.c ../Lib/libcamd.a $(LIB2)
 	./camd_demo2 > my_camd_demo2.out
 	- diff camd_demo2.out my_camd_demo2.out
 
 camd_simple: camd_simple.c library $(INC)
-	$(C) -o camd_simple camd_simple.c ../Lib/libcamd.a $(LIB)
+	$(C) -o camd_simple camd_simple.c ../Lib/libcamd.a $(LIB2)
 	./camd_simple > my_camd_simple.out
 	- diff camd_simple.out my_camd_simple.out
 
@@ -55,3 +56,4 @@ distclean: clean
 	- $(RM) camd_l_demo my_camd_l_demo.out
 	- $(RM) camd_demo2 my_camd_demo2.out
 	- $(RM) camd_simple my_camd_simple.out
+	- $(RM) -r *.dSYM
diff --git a/CAMD/Demo/camd_demo.c b/CAMD/Demo/camd_demo.c
index 7b3b9a3..0fd909a 100644
--- a/CAMD/Demo/camd_demo.c
+++ b/CAMD/Demo/camd_demo.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* A simple C main program that illustrates the use of the ANSI C interface
diff --git a/CAMD/Demo/camd_demo.out b/CAMD/Demo/camd_demo.out
index 6ec7daf..1d55cfd 100644
--- a/CAMD/Demo/camd_demo.out
+++ b/CAMD/Demo/camd_demo.out
@@ -1,11 +1,12 @@
-CAMD version 2.2, date: May 31, 2007
+CAMD version 2.4, date: Oct 10, 2014
 CAMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24:
 
-camd version 2.2, May 31, 2007:  approximate minimum degree ordering:
+camd version 2.4, Oct 10, 2014:  approximate minimum degree ordering:
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
     aggressive absorption:  yes
+    size of CAMD integer: 4
 
 
 Input matrix:  24-by-24, with 160 entries.
@@ -114,7 +115,7 @@ Plot of input matrix pattern:
 23:  . . . . . . X . . . . X X . . . . . . . . . . X
 return value from camd_order: 0 (should be 0)
 
-camd:  approximate minimum degree ordering, results:
+CAMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
diff --git a/CAMD/Demo/camd_demo2.c b/CAMD/Demo/camd_demo2.c
index fe6f675..8dd0b62 100644
--- a/CAMD/Demo/camd_demo2.c
+++ b/CAMD/Demo/camd_demo2.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* A simple C main program that illustrates the use of the ANSI C interface
diff --git a/CAMD/Demo/camd_demo2.out b/CAMD/Demo/camd_demo2.out
index d3f67fd..2de9360 100644
--- a/CAMD/Demo/camd_demo2.out
+++ b/CAMD/Demo/camd_demo2.out
@@ -1,11 +1,12 @@
 CAMD demo, with a jumbled version of the 24-by-24
 Harwell/Boeing matrix, can_24:
 
-camd version 2.2, May 31, 2007:  approximate minimum degree ordering:
+camd version 2.4, Oct 10, 2014:  approximate minimum degree ordering:
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
     aggressive absorption:  yes
+    size of CAMD integer: 4
 
 
 Jumbled input matrix:  24-by-24, with 116 entries.
@@ -143,7 +144,7 @@ Plot of symmetric matrix to be ordered by camd_order:
 23:  . . . . . . X . . . . X X . . . . . . . . . . X
 return value from camd_order: 1 (should be 1)
 
-camd:  approximate minimum degree ordering, results:
+CAMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        102
diff --git a/CAMD/Demo/camd_l_demo.c b/CAMD/Demo/camd_l_demo.c
index 55491d6..1c127d0 100644
--- a/CAMD/Demo/camd_l_demo.c
+++ b/CAMD/Demo/camd_l_demo.c
@@ -1,12 +1,11 @@
 /* ========================================================================= */
-/* === CAMD demo main program (UF_long integer version) ==================== */
+/* === CAMD demo main program (long integer version) ======================= */
 /* ========================================================================= */
 
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* A simple C main program that illustrates the use of the ANSI C interface
@@ -16,16 +15,14 @@
 #include "camd.h"
 #include <stdio.h>
 #include <stdlib.h>
-
-/* define UF_long */
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 int main (void)
 {
     /* The symmetric can_24 Harwell/Boeing matrix, including upper and lower
      * triangular parts, and the diagonal entries.  Note that this matrix is
      * 0-based, with row and column indices in the range 0 to n-1. */
-    UF_long n = 24, nz,
+    Long n = 24, nz,
     Ap [ ] = { 0, 9, 15, 21, 27, 33, 39, 48, 57, 61, 70, 76, 82, 88, 94, 100,
 	106, 110, 119, 128, 137, 143, 152, 156, 160 },
     Ai [ ] = {
@@ -54,10 +51,10 @@ int main (void)
 	/* column 22: */    2, 20, 21, 22,
 	/* column 23: */    6, 11, 12, 23 } ;
 
-    UF_long P [24], Pinv [24], i, j, k, jnew, p, inew, result ;
+    Long P [24], Pinv [24], i, j, k, jnew, p, inew, result ;
     double Control [CAMD_CONTROL], Info [CAMD_INFO] ;
     char A [24][24] ;
-    UF_long C [ ] = { 0, 0, 4, 0, 1, 0, 2, 2, 1, 1, 3, 4, 5, 5, 3, 4,
+    Long C [ ] = { 0, 0, 4, 0, 1, 0, 2, 2, 1, 1, 3, 4, 5, 5, 3, 4,
 	5, 2, 5, 3, 4, 2, 1, 0 };
 
     printf ("CAMD version %d.%d, date: %s\n", CAMD_MAIN_VERSION,
diff --git a/CAMD/Demo/camd_l_demo.out b/CAMD/Demo/camd_l_demo.out
index 8899143..f58fbe3 100644
--- a/CAMD/Demo/camd_l_demo.out
+++ b/CAMD/Demo/camd_l_demo.out
@@ -1,11 +1,12 @@
-CAMD version 2.2, date: May 31, 2007
+CAMD version 2.4, date: Oct 10, 2014
 CAMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24:
 
-camd version 2.2, May 31, 2007:  approximate minimum degree ordering:
+camd version 2.4, Oct 10, 2014:  approximate minimum degree ordering:
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
     aggressive absorption:  yes
+    size of CAMD integer: 8
 
 
 Input matrix:  24-by-24, with 160 entries.
@@ -114,7 +115,7 @@ Plot of input matrix pattern:
 23:  . . . . . . X . . . . X X . . . . . . . . . . X
 return value from camd_l_order: 0 (should be 0)
 
-camd:  approximate minimum degree ordering, results:
+CAMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
diff --git a/CAMD/Demo/camd_simple.c b/CAMD/Demo/camd_simple.c
index 54334a6..87dbdd5 100644
--- a/CAMD/Demo/camd_simple.c
+++ b/CAMD/Demo/camd_simple.c
@@ -1,8 +1,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 #include <stdio.h>
diff --git a/CAMD/Doc/CAMD_UserGuide.pdf b/CAMD/Doc/CAMD_UserGuide.pdf
index c08e7cc..2aaa151 100644
Binary files a/CAMD/Doc/CAMD_UserGuide.pdf and b/CAMD/Doc/CAMD_UserGuide.pdf differ
diff --git a/CAMD/Doc/CAMD_UserGuide.tex b/CAMD/Doc/CAMD_UserGuide.tex
index 4976140..5a40124 100644
--- a/CAMD/Doc/CAMD_UserGuide.tex
+++ b/CAMD/Doc/CAMD_UserGuide.tex
@@ -13,16 +13,14 @@
 \begin{document}
 %------------------------------------------------------------------------------
 
-\title{CAMD Version 2.2 User Guide}
+\title{CAMD User Guide}
 \author{Patrick R. Amestoy\thanks{ENSEEIHT-IRIT,
 2 rue Camichel 31017 Toulouse, France.
 email: amestoy at enseeiht.fr.  http://www.enseeiht.fr/$\sim$amestoy.}
 \and Yanqing (Morris) Chen
 \and Timothy A. Davis\thanks{
-Dept.~of Computer and Information Science and Engineering,
-Univ.~of Florida, Gainesville, FL, USA.
-email: davis at cise.ufl.edu.
-http://www.cise.ufl.edu/$\sim$davis.
+email: DrTimothyAldenDavis at gmail.com,
+http://www.suitesparse.com.
 This work was supported by the National
 Science Foundation, under grants ASC-9111263, DMS-9223088, and CCR-0203270.
 Portions of the work were done while on sabbatical at Stanford University
@@ -36,7 +34,7 @@ http://www.numerical.rl.ac.uk/people/isd/isd.html.
 This work was supported by the EPSRC under grant GR/R46441.
 }}
 
-\date{May 31, 2007}
+\date{VERSION 2.4.1, Oct 10, 2014}
 \maketitle
 
 %------------------------------------------------------------------------------
@@ -48,7 +46,7 @@ A MATLAB interface is included.
 \end{abstract}
 %------------------------------------------------------------------------------
 
-CAMD Version 2.2, Copyright\copyright 2007 by Timothy A.  Davis,
+CAMD Copyright\copyright 2013 by Timothy A.  Davis,
 Yanqing (Morris) Chen,
 Patrick R. Amestoy, and Iain S. Duff.  All Rights Reserved.
 CAMD is available under alternate licences; contact T. Davis for details.
@@ -83,7 +81,7 @@ CAMD is available under alternate licences; contact T. Davis for details.
     and a notice that the code was modified is included.
 
 {\bf Availability:}
-    http://www.cise.ufl.edu/research/sparse/camd
+    http://www.suitesparse.com.
 
 {\bf Acknowledgments:}
 
@@ -183,7 +181,7 @@ see \cite{GeorgeLiu89}.
 \section{Availability}
 %------------------------------------------------------------------------------
 
-CAMD is available at http://www.cise.ufl.edu/research/sparse.
+CAMD is available at http://www.suitesparse.com.
 The Fortran version is available as the routine {\tt MC47} in HSL
 (formerly the Harwell Subroutine Library) \cite{hsl:2002}. {\tt MC47} does
 not include ordering constraints.
@@ -217,7 +215,7 @@ UMFPACK Version 4.1 in MATLAB 7.0 and later
 uses several strategies, including a symmetric pivoting strategy, and
 will give you better results if you want to factorize an unsymmetric matrix
 of this type.  Refer to the UMFPACK User Guide for more details, at
-http://www.cise.ufl.edu/research/sparse/umfpack.
+http://www.suitesparse.com.
 
 The CAMD mexFunction is much faster than the built-in MATLAB symmetric minimum
 degree ordering methods, SYMAMD and SYMMMD.  Its ordering quality is
@@ -539,7 +537,8 @@ status = camd_l_valid (n, n, Ap, Ai) ;
 The following discussion assumes you have the {\tt make} program, either in
 Unix, or in Windows with Cygwin.
 
-System-dependent configurations are in the {\tt ../UFconfig/UFconfig.mk}
+System-dependent configurations are in the
+{\tt ../SuiteSparse\_config/SuiteSparse\_config.mk}
 file.  You can edit that file to customize the compilation.  The default
 settings will work on most systems.
 Sample configuration files are provided
@@ -556,7 +555,8 @@ files in the distribution.
 Typing {\tt make clean} will remove all but the final compiled libraries
 and demo programs.  Typing {\tt make purge} or {\tt make distclean}
 removes all files not in the original distribution.
-If you compile CAMD and then later change the {\tt ../UFconfig/UFconfig.mk} file
+If you compile CAMD and then later change the
+{\tt ../SuiteSparse\_config/SuiteSparse\_config.mk} file
 then you should type {\tt make purge} and then {\tt make} to recompile.
 
 When you compile your program that uses the C-callable CAMD library,
@@ -572,11 +572,6 @@ the use of the {\tt make} command entirely.  Simply type
 This works on any system with MATLAB, including Windows.
 Alternately, type {\tt make} in the {\tt CAMD/MATLAB} directory.
 
-If you have MATLAB 7.2 or earlier, you must first edit UFconfig/UFconfig.h to
-remove the "-largeArrayDims" option from the MEX command, prior to
-{\tt make mex} or {\tt make} in the MATLAB directory
-(or just use {\tt camd\_make.m} inside MATLAB.
-
 If you are including CAMD as a subset of a larger library and do not want
 to link the C standard I/O library, or if you simply do not need to use
 them, you can safely remove the {\tt camd\_control.c} and {\tt camd\_info.c}
@@ -616,427 +611,7 @@ describes each user-callable routine in CAMD,
 and gives details on their use.
 
 {\footnotesize
-\begin{verbatim}
-/* ========================================================================= */
-/* === CAMD:  approximate minimum degree ordering ========================== */
-/* ========================================================================= */
-
-/* ------------------------------------------------------------------------- */
-/* CAMD Version 2.2, Copyright (c) 2007 by Timothy A. Davis, Yanqing Chen,   */
-/* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
-/* ------------------------------------------------------------------------- */
-
-/* CAMD finds a symmetric ordering P of a matrix A so that the Cholesky
- * factorization of P*A*P' has fewer nonzeros and takes less work than the
- * Cholesky factorization of A.  If A is not symmetric, then it performs its
- * ordering on the matrix A+A'.  Two sets of user-callable routines are
- * provided, one for int integers and the other for UF_long integers.
- *
- * The method is based on the approximate minimum degree algorithm, discussed
- * in Amestoy, Davis, and Duff, "An approximate degree ordering algorithm",
- * SIAM Journal of Matrix Analysis and Applications, vol. 17, no. 4, pp.
- * 886-905, 1996.
- */
-
-#ifndef CAMD_H
-#define CAMD_H
-
-/* make it easy for C++ programs to include CAMD */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* get the definition of size_t: */
-#include <stddef.h>
-
-/* define UF_long */
-#include "UFconfig.h"
-
-int camd_order              /* returns CAMD_OK, CAMD_OK_BUT_JUMBLED,
-                             * CAMD_INVALID, or CAMD_OUT_OF_MEMORY */
-(
-    int n,                  /* A is n-by-n.  n must be >= 0. */
-    const int Ap [ ],       /* column pointers for A, of size n+1 */
-    const int Ai [ ],       /* row indices of A, of size nz = Ap [n] */
-    int P [ ],              /* output permutation, of size n */
-    double Control [ ],     /* input Control settings, of size CAMD_CONTROL */
-    double Info [ ],        /* output Info statistics, of size CAMD_INFO */
-    const int C [ ]         /* Constraint set of A, of size n; can be NULL */
-) ;
-
-UF_long camd_l_order        /* see above for description of arguments */
-(
-    UF_long n,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
-    UF_long P [ ],
-    double Control [ ],
-    double Info [ ],
-    const UF_long C [ ]
-) ;
-
-/* Input arguments (not modified):
- *
- *      n: the matrix A is n-by-n.
- *      Ap: an int/UF_long array of size n+1, containing column pointers of A.
- *      Ai: an int/UF_long array of size nz, containing the row indices of A,
- *          where nz = Ap [n].
- *      Control:  a double array of size CAMD_CONTROL, containing control
- *          parameters.  Defaults are used if Control is NULL.
- *
- * Output arguments (not defined on input):
- *
- *      P: an int/UF_long array of size n, containing the output permutation. If
- *          row i is the kth pivot row, then P [k] = i.  In MATLAB notation,
- *          the reordered matrix is A (P,P).
- *      Info: a double array of size CAMD_INFO, containing statistical
- *          information.  Ignored if Info is NULL.
- *
- * On input, the matrix A is stored in column-oriented form.  The row indices
- * of nonzero entries in column j are stored in Ai [Ap [j] ... Ap [j+1]-1].
- *
- * If the row indices appear in ascending order in each column, and there
- * are no duplicate entries, then camd_order is slightly more efficient in
- * terms of time and memory usage.  If this condition does not hold, a copy
- * of the matrix is created (where these conditions do hold), and the copy is
- * ordered.
- *
- * Row indices must be in the range 0 to
- * n-1.  Ap [0] must be zero, and thus nz = Ap [n] is the number of nonzeros
- * in A.  The array Ap is of size n+1, and the array Ai is of size nz = Ap [n].
- * The matrix does not need to be symmetric, and the diagonal does not need to
- * be present (if diagonal entries are present, they are ignored except for
- * the output statistic Info [CAMD_NZDIAG]).  The arrays Ai and Ap are not
- * modified.  This form of the Ap and Ai arrays to represent the nonzero
- * pattern of the matrix A is the same as that used internally by MATLAB.
- * If you wish to use a more flexible input structure, please see the
- * umfpack_*_triplet_to_col routines in the UMFPACK package, at
- * http://www.cise.ufl.edu/research/sparse/umfpack.
- *
- * Restrictions:  n >= 0.  Ap [0] = 0.  Ap [j] <= Ap [j+1] for all j in the
- *      range 0 to n-1.  nz = Ap [n] >= 0.  Ai [0..nz-1] must be in the range 0
- *      to n-1.  Finally, Ai, Ap, and P must not be NULL.  If any of these
- *      restrictions are not met, CAMD returns CAMD_INVALID.
- *
- * CAMD returns:
- *
- *      CAMD_OK if the matrix is valid and sufficient memory can be allocated to
- *          perform the ordering.
- *
- *      CAMD_OUT_OF_MEMORY if not enough memory can be allocated.
- *
- *      CAMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is
- *          NULL.
- *
- *      CAMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate
- *          entries, but was otherwise valid.
- *
- * The CAMD routine first forms the pattern of the matrix A+A', and then
- * computes a fill-reducing ordering, P.  If P [k] = i, then row/column i of
- * the original is the kth pivotal row.  In MATLAB notation, the permuted
- * matrix is A (P,P), except that 0-based indexing is used instead of the
- * 1-based indexing in MATLAB.
- *
- * The Control array is used to set various parameters for CAMD.  If a NULL
- * pointer is passed, default values are used.  The Control array is not
- * modified.
- *
- *      Control [CAMD_DENSE]:  controls the threshold for "dense" rows/columns.
- *          A dense row/column in A+A' can cause CAMD to spend a lot of time in
- *          ordering the matrix.  If Control [CAMD_DENSE] >= 0, rows/columns
- *          with more than Control [CAMD_DENSE] * sqrt (n) entries are ignored
- *          during the ordering, and placed last in the output order.  The
- *          default value of Control [CAMD_DENSE] is 10.  If negative, no
- *          rows/columns are treated as "dense".  Rows/columns with 16 or
- *          fewer off-diagonal entries are never considered "dense".
- *
- *      Control [CAMD_AGGRESSIVE]: controls whether or not to use aggressive
- *          absorption, in which a prior element is absorbed into the current
- *          element if is a subset of the current element, even if it is not
- *          adjacent to the current pivot element (refer to Amestoy, Davis,
- *          & Duff, 1996, for more details).  The default value is nonzero,
- *          which means to perform aggressive absorption.  This nearly always
- *          leads to a better ordering (because the approximate degrees are
- *          more accurate) and a lower execution time.  There are cases where
- *          it can lead to a slightly worse ordering, however.  To turn it off,
- *          set Control [CAMD_AGGRESSIVE] to 0.
- *
- *      Control [2..4] are not used in the current version, but may be used in
- *          future versions.
- *
- * The Info array provides statistics about the ordering on output.  If it is
- * not present, the statistics are not returned.  This is not an error
- * condition.
- * 
- *      Info [CAMD_STATUS]:  the return value of CAMD, either CAMD_OK,
- *          CAMD_OK_BUT_JUMBLED, CAMD_OUT_OF_MEMORY, or CAMD_INVALID.
- *
- *      Info [CAMD_N]: n, the size of the input matrix
- *
- *      Info [CAMD_NZ]: the number of nonzeros in A, nz = Ap [n]
- *
- *      Info [CAMD_SYMMETRY]:  the symmetry of the matrix A.  It is the number
- *          of "matched" off-diagonal entries divided by the total number of
- *          off-diagonal entries.  An entry A(i,j) is matched if A(j,i) is also
- *          an entry, for any pair (i,j) for which i != j.  In MATLAB notation,
- *              S = spones (A) ;
- *              B = tril (S, -1) + triu (S, 1) ;
- *              symmetry = nnz (B & B') / nnz (B) ;
- *
- *      Info [CAMD_NZDIAG]: the number of entries on the diagonal of A.
- *
- *      Info [CAMD_NZ_A_PLUS_AT]:  the number of nonzeros in A+A', excluding the
- *          diagonal.  If A is perfectly symmetric (Info [CAMD_SYMMETRY] = 1)
- *          with a fully nonzero diagonal, then Info [CAMD_NZ_A_PLUS_AT] = nz-n
- *          (the smallest possible value).  If A is perfectly unsymmetric
- *          (Info [CAMD_SYMMETRY] = 0, for an upper triangular matrix, for
- *          example) with no diagonal, then Info [CAMD_NZ_A_PLUS_AT] = 2*nz
- *          (the largest possible value).
- *
- *      Info [CAMD_NDENSE]: the number of "dense" rows/columns of A+A' that were
- *          removed from A prior to ordering.  These are placed last in the
- *          output order P.
- *
- *      Info [CAMD_MEMORY]: the amount of memory used by CAMD, in bytes.  In the
- *          current version, this is 1.2 * Info  [CAMD_NZ_A_PLUS_AT] + 9*n
- *          times the size of an integer.  This is at most 2.4nz + 9n.  This
- *          excludes the size of the input arguments Ai, Ap, and P, which have
- *          a total size of nz + 2*n + 1 integers.
- *
- *      Info [CAMD_NCMPA]: the number of garbage collections performed.
- *
- *      Info [CAMD_LNZ]: the number of nonzeros in L (excluding the diagonal).
- *          This is a slight upper bound because mass elimination is combined
- *          with the approximate degree update.  It is a rough upper bound if
- *          there are many "dense" rows/columns.  The rest of the statistics,
- *          below, are also slight or rough upper bounds, for the same reasons.
- *          The post-ordering of the assembly tree might also not exactly
- *          correspond to a true elimination tree postordering.
- *
- *      Info [CAMD_NDIV]: the number of divide operations for a subsequent LDL'
- *          or LU factorization of the permuted matrix A (P,P).
- *
- *      Info [CAMD_NMULTSUBS_LDL]:  the number of multiply-subtract pairs for a
- *          subsequent LDL' factorization of A (P,P).
- *
- *      Info [CAMD_NMULTSUBS_LU]:  the number of multiply-subtract pairs for a
- *          subsequent LU factorization of A (P,P), assuming that no numerical
- *          pivoting is required.
- *
- *      Info [CAMD_DMAX]:  the maximum number of nonzeros in any column of L,
- *          including the diagonal.
- *
- *      Info [14..19] are not used in the current version, but may be used in
- *          future versions.
- */    
-
-/* ------------------------------------------------------------------------- */
-/* direct interface to CAMD */
-/* ------------------------------------------------------------------------- */
-
-/* camd_2 is the primary CAMD ordering routine.  It is not meant to be
- * user-callable because of its restrictive inputs and because it destroys
- * the user's input matrix.  It does not check its inputs for errors, either.
- * However, if you can work with these restrictions it can be faster than
- * camd_order and use less memory (assuming that you can create your own copy
- * of the matrix for CAMD to destroy).  Refer to CAMD/Source/camd_2.c for a
- * description of each parameter. */
-
-void camd_2
-(
-    int n,
-    int Pe [ ],
-    int Iw [ ],
-    int Len [ ],
-    int iwlen,
-    int pfree,
-    int Nv [ ],
-    int Next [ ], 
-    int Last [ ],
-    int Head [ ],
-    int Elen [ ],
-    int Degree [ ],
-    int W [ ],
-    double Control [ ],
-    double Info [ ],
-    const int C [ ],
-    int BucketSet [ ] 
-) ;
-
-void camd_l2
-(
-    UF_long n,
-    UF_long Pe [ ],
-    UF_long Iw [ ],
-    UF_long Len [ ],
-    UF_long iwlen,
-    UF_long pfree,
-    UF_long Nv [ ],
-    UF_long Next [ ], 
-    UF_long Last [ ],
-    UF_long Head [ ],
-    UF_long Elen [ ],
-    UF_long Degree [ ],
-    UF_long W [ ],
-    double Control [ ],
-    double Info [ ],
-    const UF_long C [ ],
-    UF_long BucketSet [ ]
-    
-) ;
-
-/* ------------------------------------------------------------------------- */
-/* camd_valid */
-/* ------------------------------------------------------------------------- */
-
-/* Returns CAMD_OK or CAMD_OK_BUT_JUMBLED if the matrix is valid as input to
- * camd_order; the latter is returned if the matrix has unsorted and/or
- * duplicate row indices in one or more columns.  Returns CAMD_INVALID if the
- * matrix cannot be passed to camd_order.  For camd_order, the matrix must also
- * be square.  The first two arguments are the number of rows and the number
- * of columns of the matrix.  For its use in CAMD, these must both equal n.
- */
-
-int camd_valid
-(
-    int n_row,              /* # of rows */
-    int n_col,              /* # of columns */
-    const int Ap [ ],       /* column pointers, of size n_col+1 */
-    const int Ai [ ]        /* row indices, of size Ap [n_col] */
-) ;
-
-UF_long camd_l_valid
-(
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ]
-) ;
-
-/* ------------------------------------------------------------------------- */
-/* camd_cvalid */
-/* ------------------------------------------------------------------------- */
-
-/* Returns TRUE if the constraint set is valid as input to camd_order,
- * FALSE otherwise. */
-
-int camd_cvalid
-(
-   int n,
-   const int C [ ]
-) ;
-
-UF_long camd_l_cvalid
-(
-   UF_long n,
-   const UF_long C [ ]
-) ;
-
-/* ------------------------------------------------------------------------- */
-/* CAMD memory manager and printf routines */
-/* ------------------------------------------------------------------------- */
-
-/* The user can redefine these to change the malloc, free, and printf routines
- * that CAMD uses. */
-
-#ifndef EXTERN
-#define EXTERN extern
-#endif
-
-EXTERN void *(*camd_malloc) (size_t) ;              /* pointer to malloc */
-EXTERN void (*camd_free) (void *) ;                 /* pointer to free */
-EXTERN void *(*camd_realloc) (void *, size_t) ;     /* pointer to realloc */
-EXTERN void *(*camd_calloc) (size_t, size_t) ;      /* pointer to calloc */
-EXTERN int (*camd_printf) (const char *, ...) ;     /* pointer to printf */
-
-/* ------------------------------------------------------------------------- */
-/* CAMD Control and Info arrays */
-/* ------------------------------------------------------------------------- */
-
-/* camd_defaults:  sets the default control settings */
-void camd_defaults   (double Control [ ]) ;
-void camd_l_defaults (double Control [ ]) ;
-
-/* camd_control: prints the control settings */
-void camd_control    (double Control [ ]) ;
-void camd_l_control  (double Control [ ]) ;
-
-/* camd_info: prints the statistics */
-void camd_info       (double Info [ ]) ;
-void camd_l_info     (double Info [ ]) ;
-
-#define CAMD_CONTROL 5      /* size of Control array */
-#define CAMD_INFO 20        /* size of Info array */
-
-/* contents of Control */
-#define CAMD_DENSE 0        /* "dense" if degree > Control [0] * sqrt (n) */
-#define CAMD_AGGRESSIVE 1    /* do aggressive absorption if Control [1] != 0 */
-
-/* default Control settings */
-#define CAMD_DEFAULT_DENSE 10.0     /* default "dense" degree 10*sqrt(n) */
-#define CAMD_DEFAULT_AGGRESSIVE 1    /* do aggressive absorption by default */
-
-/* contents of Info */
-#define CAMD_STATUS 0       /* return value of camd_order and camd_l_order */
-#define CAMD_N 1                    /* A is n-by-n */
-#define CAMD_NZ 2           /* number of nonzeros in A */ 
-#define CAMD_SYMMETRY 3     /* symmetry of pattern (1 is sym., 0 is unsym.) */
-#define CAMD_NZDIAG 4       /* # of entries on diagonal */
-#define CAMD_NZ_A_PLUS_AT 5  /* nz in A+A' */
-#define CAMD_NDENSE 6       /* number of "dense" rows/columns in A */
-#define CAMD_MEMORY 7       /* amount of memory used by CAMD */
-#define CAMD_NCMPA 8        /* number of garbage collections in CAMD */
-#define CAMD_LNZ 9          /* approx. nz in L, excluding the diagonal */
-#define CAMD_NDIV 10        /* number of fl. point divides for LU and LDL' */
-#define CAMD_NMULTSUBS_LDL 11 /* number of fl. point (*,-) pairs for LDL' */
-#define CAMD_NMULTSUBS_LU 12  /* number of fl. point (*,-) pairs for LU */
-#define CAMD_DMAX 13         /* max nz. in any column of L, incl. diagonal */
-
-/* ------------------------------------------------------------------------- */
-/* return values of CAMD */
-/* ------------------------------------------------------------------------- */
-
-#define CAMD_OK 0               /* success */
-#define CAMD_OUT_OF_MEMORY -1   /* malloc failed, or problem too large */
-#define CAMD_INVALID -2         /* input arguments are not valid */
-#define CAMD_OK_BUT_JUMBLED 1   /* input matrix is OK for camd_order, but
-    * columns were not sorted, and/or duplicate entries were present.  CAMD had
-    * to do extra work before ordering the matrix.  This is a warning, not an
-    * error.  */
-
-/* ========================================================================== */
-/* === CAMD version ========================================================= */
-/* ========================================================================== */
-
-/*
- * As an example, to test if the version you are using is 1.2 or later:
- *
- *      if (CAMD_VERSION >= CAMD_VERSION_CODE (1,2)) ...
- *
- * This also works during compile-time:
- *
- *      #if (CAMD_VERSION >= CAMD_VERSION_CODE (1,2))
- *          printf ("This is version 1.2 or later\n") ;
- *      #else
- *          printf ("This is an early version\n") ;
- *      #endif
- */
-
-#define CAMD_DATE "May 31, 2007"
-#define CAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
-#define CAMD_MAIN_VERSION 2
-#define CAMD_SUB_VERSION 2
-#define CAMD_SUBSUB_VERSION 0
-#define CAMD_VERSION CAMD_VERSION_CODE(CAMD_MAIN_VERSION,CAMD_SUB_VERSION)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-\end{verbatim}
+\input{camd_h.tex}
 }
 
 %------------------------------------------------------------------------------
diff --git a/CAMD/Doc/ChangeLog b/CAMD/Doc/ChangeLog
index e3c5e12..71dcb6d 100644
--- a/CAMD/Doc/ChangeLog
+++ b/CAMD/Doc/ChangeLog
@@ -1,3 +1,35 @@
+Oct 10, 2014: version 2.4.1
+
+    modified MATLAB/camd_make.m.  No change to C code except version number.
+
+July 31, 2013: version 2.4.0
+
+    * changed malloc and printf pointers to use SuiteSparse_config
+
+Jun 20, 2012: verison 2.3.1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 2.3.0
+
+    * changed from UFconfig to SuiteSparse_config
+
+May 15, 2012: version 2.2.4
+
+    * minor fix to SIZE_T_MAX definition (finicky compiler workaround)
+
+Dec 7, 2011: version 2.2.3
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+
+Jan 25, 2011: version 2.2.2
+
+    * minor fix to "make install"
+
+Nov 30, 2009: version 2.2.1
+
+    * added "make install" and "make uninstall"
+
 May 31, 2007: version 2.2.0
 
     * port to 64-bit MATLAB
diff --git a/CAMD/Doc/License b/CAMD/Doc/License
index 781b0f2..9f3faa0 100644
--- a/CAMD/Doc/License
+++ b/CAMD/Doc/License
@@ -35,6 +35,6 @@ CAMD License:
 
 Availability:
 
-    http://www.cise.ufl.edu/research/sparse/camd
+    http://www.suitesparse.com
 
 -------------------------------------------------------------------------------
diff --git a/CAMD/Doc/Makefile b/CAMD/Doc/Makefile
index 0598668..a77ab6f 100644
--- a/CAMD/Doc/Makefile
+++ b/CAMD/Doc/Makefile
@@ -4,32 +4,36 @@
 
 default: dist
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 #------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
 #------------------------------------------------------------------------------
 
 clean:
-	- $(RM) $(CLEAN)
+	- $(RM) -r $(CLEAN)
 	- $(RM) camd_temp
 
 purge: distclean
 
 distclean: clean
 	- $(RM) *.aux *.bbl *.blg *.log *.toc
+	- $(RM) -r *.dSYM
 
 #------------------------------------------------------------------------------
 # Create the User Guide and Quick Start Guide
 #------------------------------------------------------------------------------
 
-CAMD_UserGuide.pdf: CAMD_UserGuide.tex CAMD_UserGuide.bib
+CAMD_UserGuide.pdf: CAMD_UserGuide.tex CAMD_UserGuide.bib ../Include/camd.h
+	echo '\\begin{verbatim}' > camd_h.tex
+	expand -8 ../Include/camd.h >> camd_h.tex
+	echo '\end{verbatim}' >> camd_h.tex
 	pdflatex CAMD_UserGuide
 	bibtex CAMD_UserGuide
 	pdflatex CAMD_UserGuide
 	pdflatex CAMD_UserGuide
 
 dist:  CAMD_UserGuide.pdf
-	- $(RM) *.aux *.bbl *.blg *.log *.toc
+	- $(RM) *.aux *.bbl *.blg *.log *.toc camd_h.tex
 	- $(RM) camd_temp
 
diff --git a/CAMD/Include/camd.h b/CAMD/Include/camd.h
index a822387..1602f17 100644
--- a/CAMD/Include/camd.h
+++ b/CAMD/Include/camd.h
@@ -3,17 +3,16 @@
 /* ========================================================================= */
 
 /* ------------------------------------------------------------------------- */
-/* CAMD Version 2.2, Copyright (c) 2007 by Timothy A. Davis, Yanqing Chen,   */
+/* CAMD Version 2.4, Copyright (c) 2013 by Timothy A. Davis, Yanqing Chen,   */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* CAMD finds a symmetric ordering P of a matrix A so that the Cholesky
  * factorization of P*A*P' has fewer nonzeros and takes less work than the
  * Cholesky factorization of A.  If A is not symmetric, then it performs its
  * ordering on the matrix A+A'.  Two sets of user-callable routines are
- * provided, one for int integers and the other for UF_long integers.
+ * provided, one for int integers and the other for SuiteSparse_long integers.
  *
  * The method is based on the approximate minimum degree algorithm, discussed
  * in Amestoy, Davis, and Duff, "An approximate degree ordering algorithm",
@@ -32,48 +31,48 @@ extern "C" {
 /* get the definition of size_t: */
 #include <stddef.h>
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
-int camd_order		    /* returns CAMD_OK, CAMD_OK_BUT_JUMBLED,
-			     * CAMD_INVALID, or CAMD_OUT_OF_MEMORY */
+int camd_order              /* returns CAMD_OK, CAMD_OK_BUT_JUMBLED,
+                             * CAMD_INVALID, or CAMD_OUT_OF_MEMORY */
 (
-    int n,		    /* A is n-by-n.  n must be >= 0. */
-    const int Ap [ ],	    /* column pointers for A, of size n+1 */
-    const int Ai [ ],	    /* row indices of A, of size nz = Ap [n] */
-    int P [ ],		    /* output permutation, of size n */
-    double Control [ ],	    /* input Control settings, of size CAMD_CONTROL */
-    double Info [ ],	    /* output Info statistics, of size CAMD_INFO */
-    const int C [ ]	    /* Constraint set of A, of size n; can be NULL */
+    int n,                  /* A is n-by-n.  n must be >= 0. */
+    const int Ap [ ],       /* column pointers for A, of size n+1 */
+    const int Ai [ ],       /* row indices of A, of size nz = Ap [n] */
+    int P [ ],              /* output permutation, of size n */
+    double Control [ ],     /* input Control settings, of size CAMD_CONTROL */
+    double Info [ ],        /* output Info statistics, of size CAMD_INFO */
+    const int C [ ]         /* Constraint set of A, of size n; can be NULL */
 ) ;
 
-UF_long camd_l_order	    /* see above for description of arguments */
+SuiteSparse_long camd_l_order   /* see above for description of arguments */
 (
-    UF_long n,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
-    UF_long P [ ],
+    SuiteSparse_long n,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
+    SuiteSparse_long P [ ],
     double Control [ ],
     double Info [ ],
-    const UF_long C [ ]
+    const SuiteSparse_long C [ ]
 ) ;
 
 /* Input arguments (not modified):
  *
- *	n: the matrix A is n-by-n.
- *	Ap: an int/UF_long array of size n+1, containing column pointers of A.
- *	Ai: an int/UF_long array of size nz, containing the row indices of A,
- *	    where nz = Ap [n].
- *	Control:  a double array of size CAMD_CONTROL, containing control
- *	    parameters.  Defaults are used if Control is NULL.
+ *      n: the matrix A is n-by-n.
+ *      Ap: an int/SuiteSparse_long array of size n+1, containing column
+ *          pointers of A.
+ *      Ai: an int/SuiteSparse_long array of size nz, containing the row
+ *          indices of A, where nz = Ap [n].
+ *      Control:  a double array of size CAMD_CONTROL, containing control
+ *          parameters.  Defaults are used if Control is NULL.
  *
  * Output arguments (not defined on input):
  *
- *	P: an int/UF_long array of size n, containing the output permutation. If
- *	    row i is the kth pivot row, then P [k] = i.  In MATLAB notation,
- *	    the reordered matrix is A (P,P).
- *	Info: a double array of size CAMD_INFO, containing statistical
- *	    information.  Ignored if Info is NULL.
+ *      P: an int/SuiteSparse_long array of size n, containing the output
+ *          permutation. If row i is the kth pivot row, then P [k] = i.  In
+ *          MATLAB notation, the reordered matrix is A (P,P).
+ *      Info: a double array of size CAMD_INFO, containing statistical
+ *          information.  Ignored if Info is NULL.
  *
  * On input, the matrix A is stored in column-oriented form.  The row indices
  * of nonzero entries in column j are stored in Ai [Ap [j] ... Ap [j+1]-1].
@@ -94,25 +93,25 @@ UF_long camd_l_order	    /* see above for description of arguments */
  * pattern of the matrix A is the same as that used internally by MATLAB.
  * If you wish to use a more flexible input structure, please see the
  * umfpack_*_triplet_to_col routines in the UMFPACK package, at
- * http://www.cise.ufl.edu/research/sparse/umfpack.
+ * http://www.suitesparse.com.
  *
  * Restrictions:  n >= 0.  Ap [0] = 0.  Ap [j] <= Ap [j+1] for all j in the
- *	range 0 to n-1.  nz = Ap [n] >= 0.  Ai [0..nz-1] must be in the range 0
- *	to n-1.  Finally, Ai, Ap, and P must not be NULL.  If any of these
- *	restrictions are not met, CAMD returns CAMD_INVALID.
+ *      range 0 to n-1.  nz = Ap [n] >= 0.  Ai [0..nz-1] must be in the range 0
+ *      to n-1.  Finally, Ai, Ap, and P must not be NULL.  If any of these
+ *      restrictions are not met, CAMD returns CAMD_INVALID.
  *
  * CAMD returns:
  *
- *	CAMD_OK if the matrix is valid and sufficient memory can be allocated to
- *	    perform the ordering.
+ *      CAMD_OK if the matrix is valid and sufficient memory can be allocated to
+ *          perform the ordering.
  *
- *	CAMD_OUT_OF_MEMORY if not enough memory can be allocated.
+ *      CAMD_OUT_OF_MEMORY if not enough memory can be allocated.
  *
- *	CAMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is
- *	    NULL.
+ *      CAMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is
+ *          NULL.
  *
- *	CAMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate
- *	    entries, but was otherwise valid.
+ *      CAMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate
+ *          entries, but was otherwise valid.
  *
  * The CAMD routine first forms the pattern of the matrix A+A', and then
  * computes a fill-reducing ordering, P.  If P [k] = i, then row/column i of
@@ -124,93 +123,93 @@ UF_long camd_l_order	    /* see above for description of arguments */
  * pointer is passed, default values are used.  The Control array is not
  * modified.
  *
- *	Control [CAMD_DENSE]:  controls the threshold for "dense" rows/columns.
- *	    A dense row/column in A+A' can cause CAMD to spend a lot of time in
- *	    ordering the matrix.  If Control [CAMD_DENSE] >= 0, rows/columns
- *	    with more than Control [CAMD_DENSE] * sqrt (n) entries are ignored
- *	    during the ordering, and placed last in the output order.  The
- *	    default value of Control [CAMD_DENSE] is 10.  If negative, no
- *	    rows/columns are treated as "dense".  Rows/columns with 16 or
- *	    fewer off-diagonal entries are never considered "dense".
- *
- *	Control [CAMD_AGGRESSIVE]: controls whether or not to use aggressive
- *	    absorption, in which a prior element is absorbed into the current
- *	    element if is a subset of the current element, even if it is not
- *	    adjacent to the current pivot element (refer to Amestoy, Davis,
- *	    & Duff, 1996, for more details).  The default value is nonzero,
- *	    which means to perform aggressive absorption.  This nearly always
- *	    leads to a better ordering (because the approximate degrees are
- *	    more accurate) and a lower execution time.  There are cases where
- *	    it can lead to a slightly worse ordering, however.  To turn it off,
- *	    set Control [CAMD_AGGRESSIVE] to 0.
- *
- *	Control [2..4] are not used in the current version, but may be used in
- *	    future versions.
+ *      Control [CAMD_DENSE]:  controls the threshold for "dense" rows/columns.
+ *          A dense row/column in A+A' can cause CAMD to spend a lot of time in
+ *          ordering the matrix.  If Control [CAMD_DENSE] >= 0, rows/columns
+ *          with more than Control [CAMD_DENSE] * sqrt (n) entries are ignored
+ *          during the ordering, and placed last in the output order.  The
+ *          default value of Control [CAMD_DENSE] is 10.  If negative, no
+ *          rows/columns are treated as "dense".  Rows/columns with 16 or
+ *          fewer off-diagonal entries are never considered "dense".
+ *
+ *      Control [CAMD_AGGRESSIVE]: controls whether or not to use aggressive
+ *          absorption, in which a prior element is absorbed into the current
+ *          element if is a subset of the current element, even if it is not
+ *          adjacent to the current pivot element (refer to Amestoy, Davis,
+ *          & Duff, 1996, for more details).  The default value is nonzero,
+ *          which means to perform aggressive absorption.  This nearly always
+ *          leads to a better ordering (because the approximate degrees are
+ *          more accurate) and a lower execution time.  There are cases where
+ *          it can lead to a slightly worse ordering, however.  To turn it off,
+ *          set Control [CAMD_AGGRESSIVE] to 0.
+ *
+ *      Control [2..4] are not used in the current version, but may be used in
+ *          future versions.
  *
  * The Info array provides statistics about the ordering on output.  If it is
  * not present, the statistics are not returned.  This is not an error
  * condition.
  * 
- *	Info [CAMD_STATUS]:  the return value of CAMD, either CAMD_OK,
- *	    CAMD_OK_BUT_JUMBLED, CAMD_OUT_OF_MEMORY, or CAMD_INVALID.
- *
- *	Info [CAMD_N]: n, the size of the input matrix
- *
- *	Info [CAMD_NZ]: the number of nonzeros in A, nz = Ap [n]
- *
- *	Info [CAMD_SYMMETRY]:  the symmetry of the matrix A.  It is the number
- *	    of "matched" off-diagonal entries divided by the total number of
- *	    off-diagonal entries.  An entry A(i,j) is matched if A(j,i) is also
- *	    an entry, for any pair (i,j) for which i != j.  In MATLAB notation,
- *		S = spones (A) ;
- *		B = tril (S, -1) + triu (S, 1) ;
- *		symmetry = nnz (B & B') / nnz (B) ;
- *
- *	Info [CAMD_NZDIAG]: the number of entries on the diagonal of A.
- *
- *	Info [CAMD_NZ_A_PLUS_AT]:  the number of nonzeros in A+A', excluding the
- *	    diagonal.  If A is perfectly symmetric (Info [CAMD_SYMMETRY] = 1)
- *	    with a fully nonzero diagonal, then Info [CAMD_NZ_A_PLUS_AT] = nz-n
- *	    (the smallest possible value).  If A is perfectly unsymmetric
- *	    (Info [CAMD_SYMMETRY] = 0, for an upper triangular matrix, for
- *	    example) with no diagonal, then Info [CAMD_NZ_A_PLUS_AT] = 2*nz
- *	    (the largest possible value).
- *
- *	Info [CAMD_NDENSE]: the number of "dense" rows/columns of A+A' that were
- *	    removed from A prior to ordering.  These are placed last in the
- *	    output order P.
- *
- *	Info [CAMD_MEMORY]: the amount of memory used by CAMD, in bytes.  In the
- *	    current version, this is 1.2 * Info  [CAMD_NZ_A_PLUS_AT] + 9*n
- *	    times the size of an integer.  This is at most 2.4nz + 9n.  This
- *	    excludes the size of the input arguments Ai, Ap, and P, which have
- *	    a total size of nz + 2*n + 1 integers.
- *
- *	Info [CAMD_NCMPA]: the number of garbage collections performed.
- *
- *	Info [CAMD_LNZ]: the number of nonzeros in L (excluding the diagonal).
- *	    This is a slight upper bound because mass elimination is combined
- *	    with the approximate degree update.  It is a rough upper bound if
- *	    there are many "dense" rows/columns.  The rest of the statistics,
- *	    below, are also slight or rough upper bounds, for the same reasons.
- *	    The post-ordering of the assembly tree might also not exactly
- *	    correspond to a true elimination tree postordering.
- *
- *	Info [CAMD_NDIV]: the number of divide operations for a subsequent LDL'
- *	    or LU factorization of the permuted matrix A (P,P).
- *
- *	Info [CAMD_NMULTSUBS_LDL]:  the number of multiply-subtract pairs for a
- *	    subsequent LDL' factorization of A (P,P).
- *
- *	Info [CAMD_NMULTSUBS_LU]:  the number of multiply-subtract pairs for a
- *	    subsequent LU factorization of A (P,P), assuming that no numerical
- *	    pivoting is required.
- *
- *	Info [CAMD_DMAX]:  the maximum number of nonzeros in any column of L,
- *	    including the diagonal.
- *
- *	Info [14..19] are not used in the current version, but may be used in
- *	    future versions.
+ *      Info [CAMD_STATUS]:  the return value of CAMD, either CAMD_OK,
+ *          CAMD_OK_BUT_JUMBLED, CAMD_OUT_OF_MEMORY, or CAMD_INVALID.
+ *
+ *      Info [CAMD_N]: n, the size of the input matrix
+ *
+ *      Info [CAMD_NZ]: the number of nonzeros in A, nz = Ap [n]
+ *
+ *      Info [CAMD_SYMMETRY]:  the symmetry of the matrix A.  It is the number
+ *          of "matched" off-diagonal entries divided by the total number of
+ *          off-diagonal entries.  An entry A(i,j) is matched if A(j,i) is also
+ *          an entry, for any pair (i,j) for which i != j.  In MATLAB notation,
+ *              S = spones (A) ;
+ *              B = tril (S, -1) + triu (S, 1) ;
+ *              symmetry = nnz (B & B') / nnz (B) ;
+ *
+ *      Info [CAMD_NZDIAG]: the number of entries on the diagonal of A.
+ *
+ *      Info [CAMD_NZ_A_PLUS_AT]:  the number of nonzeros in A+A', excluding the
+ *          diagonal.  If A is perfectly symmetric (Info [CAMD_SYMMETRY] = 1)
+ *          with a fully nonzero diagonal, then Info [CAMD_NZ_A_PLUS_AT] = nz-n
+ *          (the smallest possible value).  If A is perfectly unsymmetric
+ *          (Info [CAMD_SYMMETRY] = 0, for an upper triangular matrix, for
+ *          example) with no diagonal, then Info [CAMD_NZ_A_PLUS_AT] = 2*nz
+ *          (the largest possible value).
+ *
+ *      Info [CAMD_NDENSE]: the number of "dense" rows/columns of A+A' that were
+ *          removed from A prior to ordering.  These are placed last in the
+ *          output order P.
+ *
+ *      Info [CAMD_MEMORY]: the amount of memory used by CAMD, in bytes.  In the
+ *          current version, this is 1.2 * Info  [CAMD_NZ_A_PLUS_AT] + 9*n
+ *          times the size of an integer.  This is at most 2.4nz + 9n.  This
+ *          excludes the size of the input arguments Ai, Ap, and P, which have
+ *          a total size of nz + 2*n + 1 integers.
+ *
+ *      Info [CAMD_NCMPA]: the number of garbage collections performed.
+ *
+ *      Info [CAMD_LNZ]: the number of nonzeros in L (excluding the diagonal).
+ *          This is a slight upper bound because mass elimination is combined
+ *          with the approximate degree update.  It is a rough upper bound if
+ *          there are many "dense" rows/columns.  The rest of the statistics,
+ *          below, are also slight or rough upper bounds, for the same reasons.
+ *          The post-ordering of the assembly tree might also not exactly
+ *          correspond to a true elimination tree postordering.
+ *
+ *      Info [CAMD_NDIV]: the number of divide operations for a subsequent LDL'
+ *          or LU factorization of the permuted matrix A (P,P).
+ *
+ *      Info [CAMD_NMULTSUBS_LDL]:  the number of multiply-subtract pairs for a
+ *          subsequent LDL' factorization of A (P,P).
+ *
+ *      Info [CAMD_NMULTSUBS_LU]:  the number of multiply-subtract pairs for a
+ *          subsequent LU factorization of A (P,P), assuming that no numerical
+ *          pivoting is required.
+ *
+ *      Info [CAMD_DMAX]:  the maximum number of nonzeros in any column of L,
+ *          including the diagonal.
+ *
+ *      Info [14..19] are not used in the current version, but may be used in
+ *          future versions.
  */    
 
 /* ------------------------------------------------------------------------- */
@@ -248,23 +247,23 @@ void camd_2
 
 void camd_l2
 (
-    UF_long n,
-    UF_long Pe [ ],
-    UF_long Iw [ ],
-    UF_long Len [ ],
-    UF_long iwlen,
-    UF_long pfree,
-    UF_long Nv [ ],
-    UF_long Next [ ], 
-    UF_long Last [ ],
-    UF_long Head [ ],
-    UF_long Elen [ ],
-    UF_long Degree [ ],
-    UF_long W [ ],
+    SuiteSparse_long n,
+    SuiteSparse_long Pe [ ],
+    SuiteSparse_long Iw [ ],
+    SuiteSparse_long Len [ ],
+    SuiteSparse_long iwlen,
+    SuiteSparse_long pfree,
+    SuiteSparse_long Nv [ ],
+    SuiteSparse_long Next [ ], 
+    SuiteSparse_long Last [ ],
+    SuiteSparse_long Head [ ],
+    SuiteSparse_long Elen [ ],
+    SuiteSparse_long Degree [ ],
+    SuiteSparse_long W [ ],
     double Control [ ],
     double Info [ ],
-    const UF_long C [ ],
-    UF_long BucketSet [ ]
+    const SuiteSparse_long C [ ],
+    SuiteSparse_long BucketSet [ ]
     
 ) ;
 
@@ -282,18 +281,18 @@ void camd_l2
 
 int camd_valid
 (
-    int n_row,		    /* # of rows */
-    int n_col,		    /* # of columns */
-    const int Ap [ ],	    /* column pointers, of size n_col+1 */
-    const int Ai [ ]	    /* row indices, of size Ap [n_col] */
+    int n_row,              /* # of rows */
+    int n_col,              /* # of columns */
+    const int Ap [ ],       /* column pointers, of size n_col+1 */
+    const int Ai [ ]        /* row indices, of size Ap [n_col] */
 ) ;
 
-UF_long camd_l_valid
+SuiteSparse_long camd_l_valid
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ]
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ]
 ) ;
 
 /* ------------------------------------------------------------------------- */
@@ -309,28 +308,17 @@ int camd_cvalid
    const int C [ ]
 ) ;
 
-UF_long camd_l_cvalid
+SuiteSparse_long camd_l_cvalid
 (
-   UF_long n,
-   const UF_long C [ ]
+   SuiteSparse_long n,
+   const SuiteSparse_long C [ ]
 ) ;
 
 /* ------------------------------------------------------------------------- */
 /* CAMD memory manager and printf routines */
 /* ------------------------------------------------------------------------- */
 
-/* The user can redefine these to change the malloc, free, and printf routines
- * that CAMD uses. */
-
-#ifndef EXTERN
-#define EXTERN extern
-#endif
-
-EXTERN void *(*camd_malloc) (size_t) ;		    /* pointer to malloc */
-EXTERN void (*camd_free) (void *) ;		    /* pointer to free */
-EXTERN void *(*camd_realloc) (void *, size_t) ;	    /* pointer to realloc */
-EXTERN void *(*camd_calloc) (size_t, size_t) ;	    /* pointer to calloc */
-EXTERN int (*camd_printf) (const char *, ...) ;	    /* pointer to printf */
+    /* moved to SuiteSparse_config.c */
 
 /* ------------------------------------------------------------------------- */
 /* CAMD Control and Info arrays */
@@ -348,41 +336,41 @@ void camd_l_control  (double Control [ ]) ;
 void camd_info       (double Info [ ]) ;
 void camd_l_info     (double Info [ ]) ;
 
-#define CAMD_CONTROL 5	    /* size of Control array */
-#define CAMD_INFO 20	    /* size of Info array */
+#define CAMD_CONTROL 5      /* size of Control array */
+#define CAMD_INFO 20        /* size of Info array */
 
 /* contents of Control */
-#define CAMD_DENSE 0	    /* "dense" if degree > Control [0] * sqrt (n) */
+#define CAMD_DENSE 0        /* "dense" if degree > Control [0] * sqrt (n) */
 #define CAMD_AGGRESSIVE 1    /* do aggressive absorption if Control [1] != 0 */
 
 /* default Control settings */
-#define CAMD_DEFAULT_DENSE 10.0	    /* default "dense" degree 10*sqrt(n) */
+#define CAMD_DEFAULT_DENSE 10.0     /* default "dense" degree 10*sqrt(n) */
 #define CAMD_DEFAULT_AGGRESSIVE 1    /* do aggressive absorption by default */
 
 /* contents of Info */
-#define CAMD_STATUS 0	    /* return value of camd_order and camd_l_order */
-#define CAMD_N 1		    /* A is n-by-n */
-#define CAMD_NZ 2	    /* number of nonzeros in A */ 
-#define CAMD_SYMMETRY 3	    /* symmetry of pattern (1 is sym., 0 is unsym.) */
-#define CAMD_NZDIAG 4	    /* # of entries on diagonal */
+#define CAMD_STATUS 0       /* return value of camd_order and camd_l_order */
+#define CAMD_N 1                    /* A is n-by-n */
+#define CAMD_NZ 2           /* number of nonzeros in A */ 
+#define CAMD_SYMMETRY 3     /* symmetry of pattern (1 is sym., 0 is unsym.) */
+#define CAMD_NZDIAG 4       /* # of entries on diagonal */
 #define CAMD_NZ_A_PLUS_AT 5  /* nz in A+A' */
-#define CAMD_NDENSE 6	    /* number of "dense" rows/columns in A */
-#define CAMD_MEMORY 7	    /* amount of memory used by CAMD */
-#define CAMD_NCMPA 8	    /* number of garbage collections in CAMD */
-#define CAMD_LNZ 9	    /* approx. nz in L, excluding the diagonal */
-#define CAMD_NDIV 10	    /* number of fl. point divides for LU and LDL' */
+#define CAMD_NDENSE 6       /* number of "dense" rows/columns in A */
+#define CAMD_MEMORY 7       /* amount of memory used by CAMD */
+#define CAMD_NCMPA 8        /* number of garbage collections in CAMD */
+#define CAMD_LNZ 9          /* approx. nz in L, excluding the diagonal */
+#define CAMD_NDIV 10        /* number of fl. point divides for LU and LDL' */
 #define CAMD_NMULTSUBS_LDL 11 /* number of fl. point (*,-) pairs for LDL' */
 #define CAMD_NMULTSUBS_LU 12  /* number of fl. point (*,-) pairs for LU */
-#define CAMD_DMAX 13	     /* max nz. in any column of L, incl. diagonal */
+#define CAMD_DMAX 13         /* max nz. in any column of L, incl. diagonal */
 
 /* ------------------------------------------------------------------------- */
 /* return values of CAMD */
 /* ------------------------------------------------------------------------- */
 
-#define CAMD_OK 0		/* success */
-#define CAMD_OUT_OF_MEMORY -1	/* malloc failed, or problem too large */
-#define CAMD_INVALID -2		/* input arguments are not valid */
-#define CAMD_OK_BUT_JUMBLED 1	/* input matrix is OK for camd_order, but
+#define CAMD_OK 0               /* success */
+#define CAMD_OUT_OF_MEMORY -1   /* malloc failed, or problem too large */
+#define CAMD_INVALID -2         /* input arguments are not valid */
+#define CAMD_OK_BUT_JUMBLED 1   /* input matrix is OK for camd_order, but
     * columns were not sorted, and/or duplicate entries were present.  CAMD had
     * to do extra work before ordering the matrix.  This is a warning, not an
     * error.  */
@@ -394,22 +382,22 @@ void camd_l_info     (double Info [ ]) ;
 /*
  * As an example, to test if the version you are using is 1.2 or later:
  *
- *	if (CAMD_VERSION >= CAMD_VERSION_CODE (1,2)) ...
+ *      if (CAMD_VERSION >= CAMD_VERSION_CODE (1,2)) ...
  *
  * This also works during compile-time:
  *
- *	#if (CAMD_VERSION >= CAMD_VERSION_CODE (1,2))
- *	    printf ("This is version 1.2 or later\n") ;
- *	#else
- *	    printf ("This is an early version\n") ;
- *	#endif
+ *      #if (CAMD_VERSION >= CAMD_VERSION_CODE (1,2))
+ *          printf ("This is version 1.2 or later\n") ;
+ *      #else
+ *          printf ("This is an early version\n") ;
+ *      #endif
  */
 
-#define CAMD_DATE "May 31, 2007"
+#define CAMD_DATE "Oct 10, 2014"
 #define CAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
 #define CAMD_MAIN_VERSION 2
-#define CAMD_SUB_VERSION 2
-#define CAMD_SUBSUB_VERSION 0
+#define CAMD_SUB_VERSION 4
+#define CAMD_SUBSUB_VERSION 1
 #define CAMD_VERSION CAMD_VERSION_CODE(CAMD_MAIN_VERSION,CAMD_SUB_VERSION)
 
 #ifdef __cplusplus
diff --git a/CAMD/Include/camd_internal.h b/CAMD/Include/camd_internal.h
index 2f0fe1f..92407c8 100644
--- a/CAMD/Include/camd_internal.h
+++ b/CAMD/Include/camd_internal.h
@@ -3,29 +3,14 @@
 /* ========================================================================= */
 
 /* ------------------------------------------------------------------------- */
-/* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
+/* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,                       */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* This file is for internal use in CAMD itself, and does not normally need to
  * be included in user code (it is included in UMFPACK, however).   All others
  * should use camd.h instead.
- *
- * The following compile-time definitions affect how CAMD is compiled.
- *
- *	-DNPRINT
- *
- *	    Disable all printing.  stdio.h will not be included.  Printing can
- *	    be re-enabled at run-time by setting the global pointer camd_printf
- *	    to printf (or mexPrintf for a MATLAB mexFunction).
- *
- *	-DNMALLOC
- *
- *	    No memory manager is defined at compile-time.  You MUST define the
- *	    function pointers camd_malloc, camd_free, camd_realloc, and
- *	    camd_calloc at run-time for CAMD to work properly.
  */
 
 /* ========================================================================= */
@@ -155,21 +140,25 @@
 
 /* largest value of size_t */
 #ifndef SIZE_T_MAX
+#ifdef SIZE_MAX
+/* C99 only */
+#define SIZE_T_MAX SIZE_MAX
+#else
 #define SIZE_T_MAX ((size_t) (-1))
 #endif
+#endif
 
 /* ------------------------------------------------------------------------- */
-/* integer type for CAMD: int or UF_long */
+/* integer type for CAMD: int or SuiteSparse_long */
 /* ------------------------------------------------------------------------- */
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "camd.h"
 
 #if defined (DLONG) || defined (ZLONG)
 
-#define Int UF_long
-#define ID  UF_long_id
-#define Int_MAX UF_long_max
+#define Int SuiteSparse_long
+#define ID  SuiteSparse_long_id
+#define Int_MAX SuiteSparse_long_max
 
 #define CAMD_order camd_l_order
 #define CAMD_defaults camd_l_defaults
@@ -211,19 +200,6 @@
 
 #endif
 
-/* ========================================================================= */
-/* === PRINTF macro ======================================================== */
-/* ========================================================================= */
-
-/* All output goes through the PRINTF macro.  */
-#define PRINTF(params) { if (camd_printf != NULL) (void) camd_printf params ; }
-
-/* ------------------------------------------------------------------------- */
-/* CAMD routine definitions (user-callable) */
-/* ------------------------------------------------------------------------- */
-
-#include "camd.h"
-
 /* ------------------------------------------------------------------------- */
 /* CAMD routine definitions (not user-callable) */
 /* ------------------------------------------------------------------------- */
@@ -318,11 +294,15 @@ GLOBAL void CAMD_dump
 #define ASSERT(expression) (assert (expression))
 #endif
 
-#define CAMD_DEBUG0(params) { PRINTF (params) ; }
-#define CAMD_DEBUG1(params) { if (CAMD_debug >= 1) PRINTF (params) ; }
-#define CAMD_DEBUG2(params) { if (CAMD_debug >= 2) PRINTF (params) ; }
-#define CAMD_DEBUG3(params) { if (CAMD_debug >= 3) PRINTF (params) ; }
-#define CAMD_DEBUG4(params) { if (CAMD_debug >= 4) PRINTF (params) ; }
+#define CAMD_DEBUG0(params) { SUITESPARSE_PRINTF (params) ; }
+#define CAMD_DEBUG1(params) \
+    { if (CAMD_debug >= 1) SUITESPARSE_PRINTF (params) ; }
+#define CAMD_DEBUG2(params) \
+    { if (CAMD_debug >= 2) SUITESPARSE_PRINTF (params) ; }
+#define CAMD_DEBUG3(params) \
+    { if (CAMD_debug >= 3) SUITESPARSE_PRINTF (params) ; }
+#define CAMD_DEBUG4(params) \
+    { if (CAMD_debug >= 4) SUITESPARSE_PRINTF (params) ; }
 
 #else
 
diff --git a/CAMD/Lib/GNUmakefile b/CAMD/Lib/GNUmakefile
index 1568e69..8fa0224 100644
--- a/CAMD/Lib/GNUmakefile
+++ b/CAMD/Lib/GNUmakefile
@@ -4,9 +4,9 @@
 
 default: libcamd.a
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(CONFIG) -I../Include -I../../UFconfig
+C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config
 
 #-------------------------------------------------------------------------------
 # source files
@@ -15,9 +15,8 @@ C = $(CC) $(CFLAGS) $(CONFIG) -I../Include -I../../UFconfig
 CAMD = camd_aat camd_1 camd_2 camd_dump camd_postorder camd_defaults \
 	camd_order camd_control camd_info camd_valid camd_preprocess
 
-UFCONFIG = ../../UFconfig/UFconfig.h
-
-INC = ../Include/camd.h ../Include/camd_internal.h $(UFCONFIG)
+INC = ../Include/camd.h ../Include/camd_internal.h \
+      ../../SuiteSparse_config/SuiteSparse_config.h
 
 #-------------------------------------------------------------------------------
 # object files for each version
@@ -30,9 +29,6 @@ CAMDL = $(addsuffix .o, $(subst camd_,camd_l_,$(CAMD)))
 # compile each int and long routine (with no real/complex version)
 #-------------------------------------------------------------------------------
 
-camd_global.o: ../Source/camd_global.c $(INC)
-	$(C) -c $< -o $@
-
 camd_i_%.o: ../Source/camd_%.c $(INC)
 	$(C) -DDINT -c $< -o $@
 
@@ -43,8 +39,8 @@ camd_l_%.o: ../Source/camd_%.c $(INC)
 # Create the libcamd.a library (C versions only)
 #-------------------------------------------------------------------------------
 
-libcamd.a: camd_global.o $(CAMDI) $(CAMDL)
-	$(AR) libcamd.a $^
+libcamd.a: $(CAMDI) $(CAMDL)
+	$(ARCHIVE)  libcamd.a $^
 	- $(RANLIB) libcamd.a
 
 #-------------------------------------------------------------------------------
diff --git a/CAMD/Lib/Makefile b/CAMD/Lib/Makefile
index 355202b..08b1b4c 100644
--- a/CAMD/Lib/Makefile
+++ b/CAMD/Lib/Makefile
@@ -8,9 +8,9 @@
 
 default: everything
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(CONFIG) -I../Include -I../../UFconfig
+C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config
 
 everything:
 	$(C) -DDINT -c ../Source/camd_aat.c -o camd_i_aat.o
@@ -35,13 +35,13 @@ everything:
 	$(C) -DDLONG -c ../Source/camd_info.c -o camd_l_info.o
 	$(C) -DDLONG -c ../Source/camd_valid.c -o camd_l_valid.o
 	$(C) -DDLONG -c ../Source/camd_preprocess.c -o camd_l_preprocess.o
-	$(C) -c ../Source/camd_global.c
-	$(AR) libcamd.a camd_i_aat.o camd_i_1.o camd_i_2.o camd_i_dump.o \
+	$(ARCHIVE)  libcamd.a \
+            camd_i_aat.o camd_i_1.o camd_i_2.o camd_i_dump.o \
 	    camd_i_postorder.o camd_i_defaults.o camd_i_order.o \
 	    camd_i_control.o camd_i_info.o camd_i_valid.o camd_l_aat.o \
 	    camd_l_1.o camd_l_2.o camd_l_dump.o camd_l_postorder.o \
 	    camd_l_defaults.o camd_l_order.o camd_l_control.o camd_l_info.o \
-	    camd_l_valid.o camd_i_preprocess.o camd_l_preprocess.o camd_global.o
+	    camd_l_valid.o camd_i_preprocess.o camd_l_preprocess.o
 	- $(RANLIB) libcamd.a
 
 #-------------------------------------------------------------------------------
diff --git a/CAMD/MATLAB/Contents.m b/CAMD/MATLAB/Contents.m
index cb7b987..ba35d1b 100644
--- a/CAMD/MATLAB/Contents.m
+++ b/CAMD/MATLAB/Contents.m
@@ -9,7 +9,6 @@
 %
 % See also:  camd, amd, colamd, symamd, colmmd, symmmd, umfpack
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, Iain S. Duff, and Yanqing Chen.
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, Iain S. Duff, and Y. Chen.
 
 help Contents
diff --git a/CAMD/MATLAB/Makefile b/CAMD/MATLAB/Makefile
deleted file mode 100644
index a0bd541..0000000
--- a/CAMD/MATLAB/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-#------------------------------------------------------------------------------
-# Makefile for the CAMD MATLAB mexFunction
-#------------------------------------------------------------------------------
-
-default: camd
-
-include ../../UFconfig/UFconfig.mk
-
-CAMD = ../Lib/libcamd.a
-
-I = -I../Include -I../../UFconfig
-
-INC = ../Include/camd.h ../Include/camd_internal.h ../../UFconfig/UFconfig.h
-
-SRC = ../Source/camd_1.c ../Source/camd_2.c ../Source/camd_aat.c \
-    ../Source/camd_control.c ../Source/camd_defaults.c ../Source/camd_dump.c \
-    ../Source/camd_global.c ../Source/camd_info.c ../Source/camd_order.c \
-    ../Source/camd_postorder.c \
-    ../Source/camd_preprocess.c ../Source/camd_valid.c
-
-camd: $(SRC) $(INC) camd_mex.c
-	$(MEX) -DDLONG $(I) -output camd camd_mex.c $(SRC)
-
-#------------------------------------------------------------------------------
-# Remove all but the files in the original distribution
-#------------------------------------------------------------------------------
-
-clean:
-	- $(RM) $(CLEAN)
-
-purge: distclean
-
-distclean: clean
-	- $(RM) camd.mex*
diff --git a/CAMD/MATLAB/camd.m b/CAMD/MATLAB/camd.m
index 72512b9..de43096 100644
--- a/CAMD/MATLAB/camd.m
+++ b/CAMD/MATLAB/camd.m
@@ -68,8 +68,7 @@ function [p, Info] = camd (A, Control, C)				    %#ok
 %    See also AMD, COLMMD, COLAMD, COLPERM, SYMAMD, SYMMMD, SYMRCM.
 
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, Iain S. Duff, and Yanqing Chen.
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, Iain S. Duff, and Y. Chen.
 %
 %    Acknowledgements: This work was supported by the National Science
 %       Foundation, under grants ASC-9111263, DMS-9223088, and CCR-0203270,
diff --git a/CAMD/MATLAB/camd_demo.m b/CAMD/MATLAB/camd_demo.m
index b8f3665..5b5c177 100644
--- a/CAMD/MATLAB/camd_demo.m
+++ b/CAMD/MATLAB/camd_demo.m
@@ -8,8 +8,7 @@ function camd_demo
 %
 % See also: camd, camd_make
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, Iain S. Duff, and Yanqing Chen.
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, Iain S. Duff, and Y. Chen.
 
 % This orders the same matrix as the ANSI C demo, camd_demo.c.  It includes an
 % additional analysis of the matrix via MATLAB's symbfact routine.
@@ -27,7 +26,6 @@ n = size (A,1) ;
 rand ('state', 0) ;
 C = irand (6, n) ;
 
-figure (1)
 clf
 hold off
 subplot (2,2,1) ;
diff --git a/CAMD/MATLAB/camd_make.m b/CAMD/MATLAB/camd_make.m
index 0d59796..7b959bf 100644
--- a/CAMD/MATLAB/camd_make.m
+++ b/CAMD/MATLAB/camd_make.m
@@ -6,8 +6,7 @@ function camd_make
 %
 % See also camd.
 
-% Copyright 1994-2007, Tim Davis, University of Florida,
-% Patrick R. Amestoy, Iain S. Duff, and Yanqing Chen.
+% Copyright 1994-2007, Tim Davis, Patrick R. Amestoy, Iain S. Duff, and Y. Chen.
 
 details = 0 ;	    % 1 if details of each command are to be printed
 
@@ -16,17 +15,29 @@ if (~isempty (strfind (computer, '64')))
     d = '-largeArrayDims' ;
 end
 
-i = sprintf ('-I..%sInclude -I..%s..%sUFconfig', filesep, filesep, filesep) ;
-cmd = sprintf ('mex -O %s -DDLONG -output camd %s camd_mex.c', d, i) ;
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    d = ['-silent ' d] ;
+end
+
+i = sprintf ('-I../Include -I../../SuiteSparse_config') ;
+cmd = sprintf ('mex -O %s -DDLONG -output camd %s camd_mex.c %s', d, i, ...
+    '../../SuiteSparse_config/SuiteSparse_config.c') ;
 files = {'camd_order', 'camd_dump', 'camd_postorder', ...
     'camd_aat', 'camd_2', 'camd_1', 'camd_defaults', 'camd_control', ...
-    'camd_info', 'camd_valid', 'camd_global', 'camd_preprocess' } ;
+    'camd_info', 'camd_valid', 'camd_preprocess' } ;
 for i = 1 : length (files)
-    cmd = sprintf ('%s ..%sSource%s%s.c', cmd, filesep, filesep, files {i}) ;
+    cmd = sprintf ('%s ../Source/%s.c', cmd, files {i}) ;
 end
 if (details)
     fprintf ('%s\n', cmd) ;
 end
+
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    cmd = [cmd ' -lrt'] ;
+end
+
 eval (cmd) ;
 
 fprintf ('CAMD successfully compiled.\n') ;
diff --git a/CAMD/MATLAB/camd_mex.c b/CAMD/MATLAB/camd_mex.c
index 03cbd25..38c65de 100644
--- a/CAMD/MATLAB/camd_mex.c
+++ b/CAMD/MATLAB/camd_mex.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /*
@@ -30,7 +29,7 @@
 #include "camd.h"
 #include "mex.h"
 #include "matrix.h"
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 void mexFunction
 (
@@ -40,7 +39,7 @@ void mexFunction
     const mxArray *pargin [ ]
 )
 {
-    UF_long i, m, n, *Ap, *Ai, *P, nc, result, spumoni, full, *C, Clen ;
+    Long i, m, n, *Ap, *Ai, *P, nc, result, spumoni, full, *C, Clen ;
     double *Pout, *InfoOut, Control [CAMD_CONTROL], Info [CAMD_INFO],
 	*ControlIn, *Cin ;
     mxArray *A ;
@@ -49,12 +48,6 @@ void mexFunction
     /* get control parameters */
     /* --------------------------------------------------------------------- */
 
-    camd_malloc = mxMalloc ;
-    camd_free = mxFree ;
-    camd_calloc = mxCalloc ;
-    camd_realloc = mxRealloc ;
-    camd_printf = mexPrintf ;
-
     spumoni = 0 ;
     if (nargin == 0)
     {
@@ -103,11 +96,11 @@ void mexFunction
 	Clen = mxGetNumberOfElements (pargin [2]) ;
 	if (Clen != 0)
 	{
-	    C = (UF_long *) mxCalloc (Clen, sizeof (UF_long)) ;
+	    C = (Long *) mxCalloc (Clen, sizeof (Long)) ;
 	    for (i = 0 ; i < Clen ; i++)
 	    {
 		/* convert c from 1-based to 0-based */
-		C [i] = (UF_long) Cin [i] - 1 ;
+		C [i] = (Long) Cin [i] - 1 ;
 	    }
 	}
     }
@@ -133,7 +126,7 @@ void mexFunction
     /* allocate workspace for output permutation */
     /* --------------------------------------------------------------------- */
 
-    P = mxMalloc ((n+1) * sizeof (UF_long)) ;
+    P = mxMalloc ((n+1) * sizeof (Long)) ;
 
     /* --------------------------------------------------------------------- */
     /* if A is full, convert to a sparse matrix */
@@ -149,8 +142,8 @@ void mexFunction
 	}
 	mexCallMATLAB (1, &A, 1, (mxArray **) pargin, "sparse") ;
     }
-    Ap = (UF_long *) mxGetJc (A) ;
-    Ai = (UF_long *) mxGetIr (A) ;
+    Ap = (Long *) mxGetJc (A) ;
+    Ai = (Long *) mxGetIr (A) ;
     if (spumoni > 0)
     {
 	mexPrintf ("    input matrix A has %d nonzero entries\n", Ap [n]) ;
diff --git a/CAMD/Makefile b/CAMD/Makefile
index 58341b0..9c87731 100644
--- a/CAMD/Makefile
+++ b/CAMD/Makefile
@@ -1,25 +1,21 @@
 #------------------------------------------------------------------------------
-# CAMD Makefile (for GNU Make or original make)
+# CAMD Makefile
 #------------------------------------------------------------------------------
 
-default: demo
+VERSION = 2.4.1
 
-include ../UFconfig/UFconfig.mk
+default: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
-# Do not compile the FORTRAN versions, or MATLAB interface.
-demo:
-	( cd Lib    ; $(MAKE) )
-	( cd Demo   ; $(MAKE) )
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+demos: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
-# Do not compile the FORTRAN versions.
+# Compile all C code.  Do not compile the FORTRAN versions.
 all:
 	( cd Lib    ; $(MAKE) )
 	( cd Demo   ; $(MAKE) )
-	( cd MATLAB ; $(MAKE) )
 
-# compile just the C-callable libraries (not mexFunctions or Demos)
+# compile just the C-callable libraries (not Demos)
 library:
 	( cd Lib    ; $(MAKE) )
 
@@ -27,20 +23,20 @@ library:
 clean:
 	( cd Lib    ; $(MAKE) clean )
 	( cd Demo   ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) )
 	( cd Doc    ; $(MAKE) clean )
 
 # clean, and then remove compiled programs and library archives
 purge:
 	( cd Lib    ; $(MAKE) purge )
 	( cd Demo   ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) ; $(RM) *.mex* )
 	( cd Doc    ; $(MAKE) purge )
 
 distclean: purge
 
 # create PDF documents for the original distribution
-doc:
+docs:
 	( cd Doc    ; $(MAKE) )
 
 # get ready for distribution
@@ -52,6 +48,16 @@ ccode: library
 
 lib: library
 
-# compile the MATLAB mexFunction
-mex:
-	( cd MATLAB ; $(MAKE) )
+# install CAMD
+install:
+	$(CP) Lib/libcamd.a $(INSTALL_LIB)/libcamd.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libcamd.$(VERSION).a libcamd.a )
+	$(CP) Include/camd.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libcamd*.a
+	chmod 644 $(INSTALL_INCLUDE)/camd.h
+
+# uninstall CAMD
+uninstall:
+	$(RM) $(INSTALL_LIB)/libcamd*.a
+	$(RM) $(INSTALL_INCLUDE)/camd.h
+
diff --git a/CAMD/README.txt b/CAMD/README.txt
index 84702cc..53bf199 100644
--- a/CAMD/README.txt
+++ b/CAMD/README.txt
@@ -1,31 +1,30 @@
-CAMD Version 2.2, Copyright (c) 2007 by Timothy A.  Davis, Yanqing Chen,
-Patrick R. Amestoy, and Iain S. Duff.  All Rights Reserved.
-CAMD is available under alternate licences; contact T. Davis for details.
+CAMD, Copyright (c) 2007-2013, University of Florida.
+Written by Timothy A. Davis (http://www.suitesparse.com), Yanqing Chen, Patrick
+R. Amestoy, and Iain S. Duff.  All Rights Reserved.  CAMD is available under
+alternate licences; contact T. Davis for details.
 
 CAMD:  a set of routines for permuting sparse matrices prior to
     factorization.  Includes a version in C, a version in Fortran, and a MATLAB
     mexFunction.
 
-Requires UFconfig, in the ../UFconfig directory relative to this directory.
+Requires SuiteSparse_config, in the ../SuiteSparse_config directory relative to
+this directory.
 
 Quick start (Unix, or Windows with Cygwin):
 
     To compile, test, and install CAMD, you may wish to first configure the
-    installation by editting the ../UFconfig/UFconfig.mk file.  Next, cd to
-    this directory (CAMD) and type "make" (or "make lib" if you do not have
-    MATLAB).  When done, type "make clean" to remove unused *.o files
-    (keeps the compiled libraries and demo programs).  See the User Guide
-    (Doc/CAMD_UserGuide.pdf), or ../UFconfig/UFconfig.mk for more details.
+    installation by editting the ../SuiteSparse_config/SuiteSparse_config.mk
+    file.  Next, cd to this directory (CAMD) and type "make" (or "make lib" if
+    you do not have MATLAB).  When done, type "make clean" to remove unused *.o
+    files (keeps the compiled libraries and demo programs).  See the User Guide
+    (Doc/CAMD_UserGuide.pdf), or ../SuiteSparse_config/SuiteSparse_config.mk
+    for more details.
 
 Quick start (for MATLAB users);
 
     To compile, test, and install the CAMD mexFunction, cd to the
     CAMD/MATLAB directory and type camd_make at the MATLAB prompt.
 
-If you have MATLAB 7.2 or earlier and use "make mex", you must first edit
-UFconfig/UFconfig.h to remove the "-largeArrayDims" option from the MEX command
-(or just use camd_make.m inside MATLAB).
-
 -------------------------------------------------------------------------------
 
 CAMD License:
@@ -60,7 +59,7 @@ CAMD License:
 
 Availability:
 
-    http://www.cise.ufl.edu/research/sparse/camd
+    http://www.suitesparse.com
 
 -------------------------------------------------------------------------------
 
@@ -77,7 +76,7 @@ Description:
 
 Authors:
 
-    Timothy A. Davis (davis at cise.ufl.edu), University of Florida.
+    Timothy A. Davis (DrTimothyAldenDavis at gmail.com)
     Patrick R. Amestory, ENSEEIHT, Toulouse, France.
     Iain S. Duff, Rutherford Appleton Laboratory, UK.
 
diff --git a/CAMD/Source/camd_1.c b/CAMD/Source/camd_1.c
index 6ab1ac4..753f965 100644
--- a/CAMD/Source/camd_1.c
+++ b/CAMD/Source/camd_1.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* CAMD_1: Construct A+A' for a sparse matrix A and perform the CAMD ordering.
diff --git a/CAMD/Source/camd_2.c b/CAMD/Source/camd_2.c
index bb9409c..ac8d636 100644
--- a/CAMD/Source/camd_2.c
+++ b/CAMD/Source/camd_2.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* CAMD_2:  performs the CAMD ordering on a symmetric sparse matrix A, followed
diff --git a/CAMD/Source/camd_aat.c b/CAMD/Source/camd_aat.c
index 450ba34..b385fc7 100644
--- a/CAMD/Source/camd_aat.c
+++ b/CAMD/Source/camd_aat.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* CAMD_aat:  compute the symmetry of the pattern of A, and count the number of
diff --git a/CAMD/Source/camd_control.c b/CAMD/Source/camd_control.c
index f68eae9..c1c5754 100644
--- a/CAMD/Source/camd_control.c
+++ b/CAMD/Source/camd_control.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable.  Prints the control parameters for CAMD.  See camd.h
@@ -35,17 +34,18 @@ GLOBAL void CAMD_control
 	aggressive = CAMD_DEFAULT_AGGRESSIVE ;
     }
 
-    PRINTF (("\ncamd version %d.%d, %s:  approximate minimum degree ordering:\n"
+    SUITESPARSE_PRINTF ((
+        "\ncamd version %d.%d, %s:  approximate minimum degree ordering:\n"
 	"    dense row parameter: %g\n", CAMD_MAIN_VERSION, CAMD_SUB_VERSION,
 	CAMD_DATE, alpha)) ;
 
     if (alpha < 0)
     {
-	PRINTF (("    no rows treated as dense\n")) ;
+	SUITESPARSE_PRINTF (("    no rows treated as dense\n")) ;
     }
     else
     {
-	PRINTF ((
+	SUITESPARSE_PRINTF ((
 	"    (rows with more than max (%g * sqrt (n), 16) entries are\n"
 	"    considered \"dense\", and placed last in output permutation)\n",
 	alpha)) ;
@@ -53,10 +53,12 @@ GLOBAL void CAMD_control
 
     if (aggressive)
     {
-	PRINTF (("    aggressive absorption:  yes\n\n")) ;
+	SUITESPARSE_PRINTF (("    aggressive absorption:  yes\n")) ;
     }
     else
     {
-	PRINTF (("    aggressive absorption:  no\n\n")) ;
+	SUITESPARSE_PRINTF (("    aggressive absorption:  no\n")) ;
     }
+
+    SUITESPARSE_PRINTF (("    size of CAMD integer: %d\n\n", sizeof (Int))) ;
 }
diff --git a/CAMD/Source/camd_defaults.c b/CAMD/Source/camd_defaults.c
index 98002e8..5ac59bf 100644
--- a/CAMD/Source/camd_defaults.c
+++ b/CAMD/Source/camd_defaults.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable.  Sets default control parameters for CAMD.  See camd.h
diff --git a/CAMD/Source/camd_dump.c b/CAMD/Source/camd_dump.c
index deddeba..6b0b495 100644
--- a/CAMD/Source/camd_dump.c
+++ b/CAMD/Source/camd_dump.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Debugging routines for CAMD.  Not used if NDEBUG is not defined at compile-
diff --git a/CAMD/Source/camd_global.c b/CAMD/Source/camd_global.c
index 8a0a962..eef93ee 100644
--- a/CAMD/Source/camd_global.c
+++ b/CAMD/Source/camd_global.c
@@ -5,80 +5,10 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
-#include <stdlib.h>
-
-#ifdef MATLAB_MEX_FILE
-#include "mex.h"
-#include "matrix.h"
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* ========================================================================= */
-/* === Default CAMD memory manager ========================================= */
-/* ========================================================================= */
-
-/* The user can redefine these global pointers at run-time to change the memory
- * manager used by CAMD.  CAMD only uses malloc and free; realloc and calloc are
- * include for completeness, in case another package wants to use the same
- * memory manager as CAMD.
- *
- * If compiling as a MATLAB mexFunction, the default memory manager is mxMalloc.
- * You can also compile CAMD as a standard ANSI-C library and link a mexFunction
- * against it, and then redefine these pointers at run-time, in your
- * mexFunction.
- *
- * If -DNMALLOC is defined at compile-time, no memory manager is specified at
- * compile-time.  You must then define these functions at run-time, before
- * calling CAMD, for CAMD to work properly.
+/* In prior versions of CAMD, this file declared the camd_malloc, camd_free,
+   camd_realloc, camd_calloc, and camd_printf functions.  They are now replaced
+   by functions defined in SuiteSparse_config/SuiteSparse_config.c.
  */
-
-#ifndef NMALLOC
-#ifdef MATLAB_MEX_FILE
-/* MATLAB mexFunction: */
-void *(*camd_malloc) (size_t) = mxMalloc ;
-void (*camd_free) (void *) = mxFree ;
-void *(*camd_realloc) (void *, size_t) = mxRealloc ;
-void *(*camd_calloc) (size_t, size_t) = mxCalloc ;
-#else
-/* standard ANSI-C: */
-void *(*camd_malloc) (size_t) = malloc ;
-void (*camd_free) (void *) = free ;
-void *(*camd_realloc) (void *, size_t) = realloc ;
-void *(*camd_calloc) (size_t, size_t) = calloc ;
-#endif
-#else
-/* no memory manager defined at compile-time; you MUST define one at run-time */
-void *(*camd_malloc) (size_t) = NULL ;
-void (*camd_free) (void *) = NULL ;
-void *(*camd_realloc) (void *, size_t) = NULL ;
-void *(*camd_calloc) (size_t, size_t) = NULL ;
-#endif
-
-/* ========================================================================= */
-/* === Default CAMD printf routine ========================================= */
-/* ========================================================================= */
-
-/* The user can redefine this global pointer at run-time to change the printf
- * routine used by CAMD.  If NULL, no printing occurs.  
- *
- * If -DNPRINT is defined at compile-time, stdio.h is not included.  Printing
- * can then be enabled at run-time by setting camd_printf to a non-NULL function.
- */
-
-#ifndef NPRINT
-#ifdef MATLAB_MEX_FILE
-int (*camd_printf) (const char *, ...) = mexPrintf ;
-#else
-#include <stdio.h>
-int (*camd_printf) (const char *, ...) = printf ;
-#endif
-#else
-int (*camd_printf) (const char *, ...) = NULL ;
-#endif
diff --git a/CAMD/Source/camd_info.c b/CAMD/Source/camd_info.c
index 8451c1d..96547e6 100644
--- a/CAMD/Source/camd_info.c
+++ b/CAMD/Source/camd_info.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable.  Prints the output statistics for CAMD.  See camd.h
@@ -15,7 +14,7 @@
 
 #include "camd_internal.h"
 
-#define PRI(format,x) { if (x >= 0) { PRINTF ((format, x)) ; }}
+#define PRI(format,x) { if (x >= 0) { SUITESPARSE_PRINTF ((format, x)) ; }}
 
 GLOBAL void CAMD_info
 (
@@ -24,6 +23,9 @@ GLOBAL void CAMD_info
 {
     double n, ndiv, nmultsubs_ldl, nmultsubs_lu, lnz, lnzd ;
 
+    SUITESPARSE_PRINTF (("\nCAMD version %d.%d.%d, %s, results:\n",
+	CAMD_MAIN_VERSION, CAMD_SUB_VERSION, CAMD_SUBSUB_VERSION, CAMD_DATE)) ;
+
     if (!Info)
     {
 	return ;
@@ -37,28 +39,26 @@ GLOBAL void CAMD_info
     lnzd = (n >= 0 && lnz >= 0) ? (n + lnz) : (-1) ;
 
     /* CAMD return status */
-    PRINTF ((
-	"\ncamd:  approximate minimum degree ordering, results:\n"
-	"    status: ")) ;
+    SUITESPARSE_PRINTF (("    status: ")) ;
     if (Info [CAMD_STATUS] == CAMD_OK)
     {
-	PRINTF (("OK\n")) ;
+	SUITESPARSE_PRINTF (("OK\n")) ;
     }
     else if (Info [CAMD_STATUS] == CAMD_OUT_OF_MEMORY)
     {
-	PRINTF (("out of memory\n")) ;
+	SUITESPARSE_PRINTF (("out of memory\n")) ;
     }
     else if (Info [CAMD_STATUS] == CAMD_INVALID)
     {
-	PRINTF (("invalid matrix\n")) ;
+	SUITESPARSE_PRINTF (("invalid matrix\n")) ;
     }
     else if (Info [CAMD_STATUS] == CAMD_OK_BUT_JUMBLED)
     {
-	PRINTF (("OK, but jumbled\n")) ;
+	SUITESPARSE_PRINTF (("OK, but jumbled\n")) ;
     }
     else
     {
-	PRINTF (("unknown\n")) ;
+	SUITESPARSE_PRINTF (("unknown\n")) ;
     }
 
     /* statistics about the input matrix */
@@ -81,7 +81,7 @@ GLOBAL void CAMD_info
 	Info [CAMD_NCMPA]) ;
 
     /* statistics about the ordering quality */
-    PRINTF (("\n"
+    SUITESPARSE_PRINTF (("\n"
 	"    The following approximate statistics are for a subsequent\n"
 	"    factorization of A(P,P) + A(P,P)'.  They are slight upper\n"
 	"    bounds if there are no dense rows/columns in A+A', and become\n"
@@ -104,7 +104,7 @@ GLOBAL void CAMD_info
 
     if (n >= 0 && ndiv >= 0 && nmultsubs_ldl >= 0 && nmultsubs_lu >= 0)
     {
-	PRINTF (("\n"
+	SUITESPARSE_PRINTF (("\n"
 	"    chol flop count for real A, sqrt counted as 1 flop: %.20g\n"
 	"    LDL' flop count for real A:                         %.20g\n"
 	"    LDL' flop count for complex A:                      %.20g\n"
diff --git a/CAMD/Source/camd_order.c b/CAMD/Source/camd_order.c
index 44bb809..67eb1fd 100644
--- a/CAMD/Source/camd_order.c
+++ b/CAMD/Source/camd_order.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* User-callable CAMD minimum degree ordering routine.  See camd.h for
@@ -91,15 +90,15 @@ GLOBAL Int CAMD_order
     }
 
     /* allocate two size-n integer workspaces */
-    Len = camd_malloc (n * sizeof (Int)) ;
-    Pinv = camd_malloc (n * sizeof (Int)) ;
+    Len  = SuiteSparse_malloc (n, sizeof (Int)) ;
+    Pinv = SuiteSparse_malloc (n, sizeof (Int)) ;
     mem += n ;
     mem += n ;
     if (!Len || !Pinv)
     {
 	/* :: out of memory :: */
-	camd_free (Len) ;
-	camd_free (Pinv) ;
+	SuiteSparse_free (Len) ;
+	SuiteSparse_free (Pinv) ;
 	if (info) Info [CAMD_STATUS] = CAMD_OUT_OF_MEMORY ;
 	return (CAMD_OUT_OF_MEMORY) ;
     }
@@ -108,17 +107,17 @@ GLOBAL Int CAMD_order
     {
 	/* sort the input matrix and remove duplicate entries */
 	CAMD_DEBUG1 (("Matrix is jumbled\n")) ;
-	Rp = camd_malloc ((n+1) * sizeof (Int)) ;
-	Ri = camd_malloc (MAX (nz,1) * sizeof (Int)) ;
+	Rp = SuiteSparse_malloc (n+1, sizeof (Int)) ;
+	Ri = SuiteSparse_malloc (nz,  sizeof (Int)) ;
 	mem += (n+1) ;
 	mem += MAX (nz,1) ;
 	if (!Rp || !Ri)
 	{
 	    /* :: out of memory :: */
-	    camd_free (Rp) ;
-	    camd_free (Ri) ;
-	    camd_free (Len) ;
-	    camd_free (Pinv) ;
+	    SuiteSparse_free (Rp) ;
+	    SuiteSparse_free (Ri) ;
+	    SuiteSparse_free (Len) ;
+	    SuiteSparse_free (Pinv) ;
 	    if (info) Info [CAMD_STATUS] = CAMD_OUT_OF_MEMORY ;
 	    return (CAMD_OUT_OF_MEMORY) ;
 	}
@@ -162,16 +161,16 @@ GLOBAL Int CAMD_order
     ok = ok && (slen < Int_MAX) ;	/* S[i] for Int i must be OK */
     if (ok)
     {
-	S = camd_malloc (slen * sizeof (Int)) ;
+	S = SuiteSparse_malloc (slen, sizeof (Int)) ;
     }
     CAMD_DEBUG1 (("slen %g\n", (double) slen)) ;
     if (!S)
     {
 	/* :: out of memory :: (or problem too large) */
-	camd_free (Rp) ;
-	camd_free (Ri) ;
-	camd_free (Len) ;
-	camd_free (Pinv) ;
+	SuiteSparse_free (Rp) ;
+	SuiteSparse_free (Ri) ;
+	SuiteSparse_free (Len) ;
+	SuiteSparse_free (Pinv) ;
 	if (info) Info [CAMD_STATUS] = CAMD_OUT_OF_MEMORY ;
 	return (CAMD_OUT_OF_MEMORY) ;
     }
@@ -191,11 +190,11 @@ GLOBAL Int CAMD_order
     /* free the workspace */
     /* --------------------------------------------------------------------- */
 
-    camd_free (Rp) ;
-    camd_free (Ri) ;
-    camd_free (Len) ;
-    camd_free (Pinv) ;
-    camd_free (S) ;
+    SuiteSparse_free (Rp) ;
+    SuiteSparse_free (Ri) ;
+    SuiteSparse_free (Len) ;
+    SuiteSparse_free (Pinv) ;
+    SuiteSparse_free (S) ;
     if (info) Info [CAMD_STATUS] = status ;
     return (status) ;	    /* successful ordering */
 }
diff --git a/CAMD/Source/camd_postorder.c b/CAMD/Source/camd_postorder.c
index b720856..4af03e1 100644
--- a/CAMD/Source/camd_postorder.c
+++ b/CAMD/Source/camd_postorder.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Perform a postordering (via depth-first search) of an assembly tree. */
diff --git a/CAMD/Source/camd_preprocess.c b/CAMD/Source/camd_preprocess.c
index 27c5942..aa399c3 100644
--- a/CAMD/Source/camd_preprocess.c
+++ b/CAMD/Source/camd_preprocess.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Sorts, removes duplicate entries, and transposes from the nonzero pattern of
diff --git a/CAMD/Source/camd_valid.c b/CAMD/Source/camd_valid.c
index e628ddd..a1da203 100644
--- a/CAMD/Source/camd_valid.c
+++ b/CAMD/Source/camd_valid.c
@@ -5,8 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /* CAMD, Copyright (c) Timothy A. Davis, Yanqing Chen,			     */
 /* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
-/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
-/* web: http://www.cise.ufl.edu/research/sparse/camd                         */
+/* email: DrTimothyAldenDavis at gmail.com                                      */
 /* ------------------------------------------------------------------------- */
 
 /* Check if a column-form matrix is valid or not.  The matrix A is
diff --git a/CCOLAMD/Demo/Makefile b/CCOLAMD/Demo/Makefile
index 2c02586..0a2950a 100644
--- a/CCOLAMD/Demo/Makefile
+++ b/CCOLAMD/Demo/Makefile
@@ -4,13 +4,16 @@
 
 default: ccolamd_example ccolamd_l_example
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-I = -I../Include -I../../UFconfig
+I = -I../Include -I../../SuiteSparse_config
 
-C = $(CC) $(CFLAGS) $(I)
+C = $(CC) $(CF) $(I)
+
+LIB2 = ../../SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 library:
+	( cd ../../SuiteSparse_config ; $(MAKE) )
 	( cd ../Lib ; $(MAKE) )
 
 #------------------------------------------------------------------------------
@@ -20,14 +23,14 @@ library:
 dist:
 
 ccolamd_example: ccolamd_example.c library
-	$(C) -o ccolamd_example ccolamd_example.c ../Lib/libccolamd.a -lm
+	$(C) -o ccolamd_example ccolamd_example.c ../Lib/libccolamd.a $(LIB2)
 	- ./ccolamd_example > my_ccolamd_example.out
 	- diff ccolamd_example.out my_ccolamd_example.out
 
 ccolamd_l_example: ccolamd_l_example.c library
-	$(C) -o ccolamd_l_example ccolamd_l_example.c ../Lib/libccolamd.a -lm
+	$(C) -o ccolamd_l_example ccolamd_l_example.c ../Lib/libccolamd.a $(LIB2)
 	- ./ccolamd_l_example > my_ccolamd_l_example.out
-	- diff ccolamd_example.out my_ccolamd_example.out
+	- diff ccolamd_l_example.out my_ccolamd_l_example.out
 
 #------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
@@ -41,3 +44,4 @@ purge: distclean
 distclean: clean
 	- $(RM) ccolamd_example ccolamd_l_example
 	- $(RM) my_ccolamd_example.out my_ccolamd_l_example.out
+	- $(RM) -r *.dSYM
diff --git a/CCOLAMD/Demo/ccolamd_example.c b/CCOLAMD/Demo/ccolamd_example.c
index 253fdc9..a48da26 100644
--- a/CCOLAMD/Demo/ccolamd_example.c
+++ b/CCOLAMD/Demo/ccolamd_example.c
@@ -6,7 +6,6 @@
  * CCOLAMD Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /*
diff --git a/CCOLAMD/Demo/ccolamd_example.out b/CCOLAMD/Demo/ccolamd_example.out
index c2139b2..a4ad86f 100644
--- a/CCOLAMD/Demo/ccolamd_example.out
+++ b/CCOLAMD/Demo/ccolamd_example.out
@@ -15,7 +15,7 @@ Column 3, with 2 entries:
     row 1
     row 3
 
-ccolamd version 2.7, Nov 1, 2007: OK.  
+ccolamd version 2.9, Oct 10, 2014: OK.  
 ccolamd: number of dense or empty rows ignored:    0
 ccolamd: number of dense or empty columns ignored: 0
 ccolamd: number of garbage collections performed:  0
@@ -38,7 +38,7 @@ Column 3, with 1 entries:
     row 4
 Column 4, with 0 entries:
 
-csymamd version 2.7, Nov 1, 2007: OK.  
+csymamd version 2.9, Oct 10, 2014: OK.  
 csymamd: number of dense or empty rows ignored:    0
 csymamd: number of dense or empty columns ignored: 0
 csymamd: number of garbage collections performed:  0
diff --git a/CCOLAMD/Demo/ccolamd_l_example.c b/CCOLAMD/Demo/ccolamd_l_example.c
index b213aad..41d6971 100644
--- a/CCOLAMD/Demo/ccolamd_l_example.c
+++ b/CCOLAMD/Demo/ccolamd_l_example.c
@@ -1,12 +1,11 @@
 /* ========================================================================== */
-/* === ccolamd and csymamd example (UF_long integer version) ================ */
+/* === ccolamd and csymamd example (long integer version) =================== */
 /* ========================================================================== */
 
 /* ----------------------------------------------------------------------------
  * CCOLAMD Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /*
@@ -46,9 +45,6 @@
 #define B_NNZ 4
 #define B_N 5
 
-/* define UF_long */
-#include "UFconfig.h"
-
 int main (void)
 {
 
@@ -56,14 +52,14 @@ int main (void)
     /* input matrix A definition */
     /* ====================================================================== */
 
-    UF_long A [ALEN] = {
+    SuiteSparse_long A [ALEN] = {
 
     	0, 1, 4,		/* row indices of nonzeros in column 0 */
 	2, 4,			/* row indices of nonzeros in column 1 */
 	0, 1, 2, 3,		/* row indices of nonzeros in column 2 */
 	1, 3} ;			/* row indices of nonzeros in column 3 */
 
-    UF_long p [ ] = {
+    SuiteSparse_long p [ ] = {
 
     	0,			/* column 0 is in A [0..2] */
 	3,			/* column 1 is in A [3..4] */ 
@@ -75,7 +71,7 @@ int main (void)
     /* input matrix B definition */
     /* ====================================================================== */
 
-    UF_long B [ ] = {		/* Note: only strictly lower triangular part */
+    SuiteSparse_long B [ ] = {  /* Note: only strictly lower triangular part */
     				/* is included, since symamd ignores the */
 				/* diagonal and upper triangular part of B. */
 
@@ -85,7 +81,7 @@ int main (void)
     	4			/* row indices of nonzeros in column 3 */
     	} ;			/* row indices of nonzeros in column 4 (none) */
 
-    UF_long q [ ] = {
+    SuiteSparse_long q [ ] = {
 
     	0,			/* column 0 is in B [0] */
 	1,			/* column 1 is in B [1..2] */ 
@@ -98,10 +94,9 @@ int main (void)
     /* other variable definitions */
     /* ====================================================================== */
 
-    UF_long perm [B_N+1] ;	    /* note the size is N+1 */
-    UF_long stats [CCOLAMD_STATS] ; /* for ccolamd and csymamd output stats */
-
-    UF_long row, col, pp, length, ok ;
+    SuiteSparse_long perm [B_N+1] ;	    /* note the size is N+1 */
+    SuiteSparse_long stats [CCOLAMD_STATS] ;  /* ccolamd/csymamd output stats */
+    SuiteSparse_long row, col, pp, length, ok ;
 
     /* ====================================================================== */
     /* dump the input matrix A */
diff --git a/CCOLAMD/Demo/ccolamd_l_example.out b/CCOLAMD/Demo/ccolamd_l_example.out
index 5341d80..118c9b7 100644
--- a/CCOLAMD/Demo/ccolamd_l_example.out
+++ b/CCOLAMD/Demo/ccolamd_l_example.out
@@ -15,7 +15,7 @@ Column 3, with 2 entries:
     row 1
     row 3
 
-ccolamd version 2.7, Nov 1, 2007: OK.  
+ccolamd version 2.9, Oct 10, 2014: OK.  
 ccolamd: number of dense or empty rows ignored:    0
 ccolamd: number of dense or empty columns ignored: 0
 ccolamd: number of garbage collections performed:  0
@@ -38,7 +38,7 @@ Column 3, with 1 entries:
     row 4
 Column 4, with 0 entries:
 
-csymamd version 2.7, Nov 1, 2007: OK.  
+csymamd version 2.9, Oct 10, 2014: OK.  
 csymamd: number of dense or empty rows ignored:    0
 csymamd: number of dense or empty columns ignored: 0
 csymamd: number of garbage collections performed:  0
diff --git a/CCOLAMD/Doc/ChangeLog b/CCOLAMD/Doc/ChangeLog
index 7a5f4a2..4964390 100644
--- a/CCOLAMD/Doc/ChangeLog
+++ b/CCOLAMD/Doc/ChangeLog
@@ -1,3 +1,28 @@
+Oct 10, 2014: version 2.9.1
+
+    modified MATLAB/ccolamd_make.m.  No change to C code except version number.
+
+July 31, 2013: version 2.9.0
+
+    * changed malloc and printf pointers to use SuiteSparse_config
+
+Jun 1, 2012: version 2.8.0
+
+    * changed from UFconfig to SuiteSparse_config
+
+Dec 7, 2011: version 2.7.4
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+
+Jan 25, 2011: version 2.7.3
+
+    * minor fix to "make install"
+    * fixed stats [CCOLAMD_EMPTY_ROW] output
+
+Nov 30, 2009: version 2.7.2
+
+    * added "make install" and "make uninstall"
+
 Nov 1, 2007: version 2.7.1
 
     * minor changes to MATLAB test code
diff --git a/CCOLAMD/Include/ccolamd.h b/CCOLAMD/Include/ccolamd.h
index ec8aaaa..8e2fe1d 100644
--- a/CCOLAMD/Include/ccolamd.h
+++ b/CCOLAMD/Include/ccolamd.h
@@ -6,7 +6,6 @@
  * CCOLAMD Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /*
@@ -43,10 +42,10 @@ extern "C" {
  *	#endif
  */
 
-#define CCOLAMD_DATE "Nov 1, 2007"
+#define CCOLAMD_DATE "Oct 10, 2014"
 #define CCOLAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
 #define CCOLAMD_MAIN_VERSION 2
-#define CCOLAMD_SUB_VERSION 7
+#define CCOLAMD_SUB_VERSION 9
 #define CCOLAMD_SUBSUB_VERSION 1
 #define CCOLAMD_VERSION \
 	CCOLAMD_VERSION_CODE(CCOLAMD_MAIN_VERSION,CCOLAMD_SUB_VERSION)
@@ -113,8 +112,7 @@ extern "C" {
 /* === Prototypes of user-callable routines ================================= */
 /* ========================================================================== */
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
 size_t ccolamd_recommended	/* returns recommended value of Alen, */
 				/* or 0 if input arguments are erroneous */
@@ -127,9 +125,9 @@ size_t ccolamd_recommended	/* returns recommended value of Alen, */
 size_t ccolamd_l_recommended	/* returns recommended value of Alen, */
 				/* or 0 if input arguments are erroneous */
 (
-    UF_long nnz,		/* nonzeros in A */
-    UF_long n_row,		/* number of rows in A */
-    UF_long n_col		/* number of columns in A */
+    SuiteSparse_long nnz,		/* nonzeros in A */
+    SuiteSparse_long n_row,		/* number of rows in A */
+    SuiteSparse_long n_col		/* number of columns in A */
 ) ;
 
 void ccolamd_set_defaults	/* sets default parameters */
@@ -154,16 +152,16 @@ int ccolamd			/* returns (1) if successful, (0) otherwise*/
     int cmember [ ]		/* Constraint set of A, of size n_col */
 ) ;
 
-UF_long ccolamd_l		/* same as ccolamd, but with UF_long integers */
+SuiteSparse_long ccolamd_l      /* as ccolamd w/ SuiteSparse_long integers */
 (
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long A [ ],
-    UF_long p [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    SuiteSparse_long Alen,
+    SuiteSparse_long A [ ],
+    SuiteSparse_long p [ ],
     double knobs [CCOLAMD_KNOBS],
-    UF_long stats [CCOLAMD_STATS],
-    UF_long cmember [ ]
+    SuiteSparse_long stats [CCOLAMD_STATS],
+    SuiteSparse_long cmember [ ]
 ) ;
 
 int csymamd			/* return (1) if OK, (0) otherwise */
@@ -182,18 +180,18 @@ int csymamd			/* return (1) if OK, (0) otherwise */
     int stype			/* 0: use both parts, >0: upper, <0: lower */
 ) ;
 
-UF_long csymamd_l		/* same as csymamd, but with UF_long integers */
+SuiteSparse_long csymamd_l      /* as csymamd, w/ SuiteSparse_long integers */
 (
-    UF_long n,
-    UF_long A [ ],
-    UF_long p [ ],
-    UF_long perm [ ],
+    SuiteSparse_long n,
+    SuiteSparse_long A [ ],
+    SuiteSparse_long p [ ],
+    SuiteSparse_long perm [ ],
     double knobs [CCOLAMD_KNOBS],
-    UF_long stats [CCOLAMD_STATS],
+    SuiteSparse_long stats [CCOLAMD_STATS],
     void * (*allocate) (size_t, size_t),
     void (*release) (void *),
-    UF_long cmember [ ],
-    UF_long stype
+    SuiteSparse_long cmember [ ],
+    SuiteSparse_long stype
 ) ;
 
 void ccolamd_report
@@ -203,7 +201,7 @@ void ccolamd_report
 
 void ccolamd_l_report
 (
-    UF_long stats [CCOLAMD_STATS]
+    SuiteSparse_long stats [CCOLAMD_STATS]
 ) ;
 
 void csymamd_report
@@ -213,7 +211,7 @@ void csymamd_report
 
 void csymamd_l_report
 (
-    UF_long stats [CCOLAMD_STATS]
+    SuiteSparse_long stats [CCOLAMD_STATS]
 ) ;
 
 
@@ -246,23 +244,23 @@ int ccolamd2
     int cmember [ ]		/* Constraint set of A */
 ) ;
 
-UF_long ccolamd2_l	    /* same as ccolamd2, but with UF_long integers */
+SuiteSparse_long ccolamd2_l     /* as ccolamd2, w/ SuiteSparse_long integers */
 (
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long A [ ],
-    UF_long p [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    SuiteSparse_long Alen,
+    SuiteSparse_long A [ ],
+    SuiteSparse_long p [ ],
     double knobs [CCOLAMD_KNOBS],
-    UF_long stats [CCOLAMD_STATS],
-    UF_long Front_npivcol [ ],
-    UF_long Front_nrows [ ],
-    UF_long Front_ncols [ ],
-    UF_long Front_parent [ ],
-    UF_long Front_cols [ ],
-    UF_long *p_nfr,
-    UF_long InFront [ ],
-    UF_long cmember [ ]
+    SuiteSparse_long stats [CCOLAMD_STATS],
+    SuiteSparse_long Front_npivcol [ ],
+    SuiteSparse_long Front_nrows [ ],
+    SuiteSparse_long Front_ncols [ ],
+    SuiteSparse_long Front_parent [ ],
+    SuiteSparse_long Front_cols [ ],
+    SuiteSparse_long *p_nfr,
+    SuiteSparse_long InFront [ ],
+    SuiteSparse_long cmember [ ]
 ) ;
 
 void ccolamd_apply_order
@@ -276,11 +274,11 @@ void ccolamd_apply_order
 
 void ccolamd_l_apply_order
 (
-    UF_long Front [ ],
-    const UF_long Order [ ],
-    UF_long Temp [ ],
-    UF_long nn,
-    UF_long nfr
+    SuiteSparse_long Front [ ],
+    const SuiteSparse_long Order [ ],
+    SuiteSparse_long Temp [ ],
+    SuiteSparse_long nn,
+    SuiteSparse_long nfr
 ) ;
 
 
@@ -296,12 +294,12 @@ void ccolamd_fsize
 
 void ccolamd_l_fsize
 (
-    UF_long nn,
-    UF_long MaxFsize [ ],
-    UF_long Fnrows [ ],
-    UF_long Fncols [ ],
-    UF_long Parent [ ],
-    UF_long Npiv [ ]
+    SuiteSparse_long nn,
+    SuiteSparse_long MaxFsize [ ],
+    SuiteSparse_long Fnrows [ ],
+    SuiteSparse_long Fncols [ ],
+    SuiteSparse_long Parent [ ],
+    SuiteSparse_long Npiv [ ]
 ) ;
 
 void ccolamd_postorder
@@ -320,16 +318,16 @@ void ccolamd_postorder
 
 void ccolamd_l_postorder
 (
-    UF_long nn,
-    UF_long Parent [ ],
-    UF_long Npiv [ ],
-    UF_long Fsize [ ],
-    UF_long Order [ ],
-    UF_long Child [ ],
-    UF_long Sibling [ ],
-    UF_long Stack [ ],
-    UF_long Front_cols [ ],
-    UF_long cmember [ ]
+    SuiteSparse_long nn,
+    SuiteSparse_long Parent [ ],
+    SuiteSparse_long Npiv [ ],
+    SuiteSparse_long Fsize [ ],
+    SuiteSparse_long Order [ ],
+    SuiteSparse_long Child [ ],
+    SuiteSparse_long Sibling [ ],
+    SuiteSparse_long Stack [ ],
+    SuiteSparse_long Front_cols [ ],
+    SuiteSparse_long cmember [ ]
 ) ;
 
 int ccolamd_post_tree
@@ -342,22 +340,16 @@ int ccolamd_post_tree
     int Stack [ ]
 ) ;
 
-UF_long ccolamd_l_post_tree
+SuiteSparse_long ccolamd_l_post_tree
 (
-    UF_long root,
-    UF_long k,
-    UF_long Child [ ],
-    const UF_long Sibling [ ],
-    UF_long Order [ ],
-    UF_long Stack [ ]
+    SuiteSparse_long root,
+    SuiteSparse_long k,
+    SuiteSparse_long Child [ ],
+    const SuiteSparse_long Sibling [ ],
+    SuiteSparse_long Order [ ],
+    SuiteSparse_long Stack [ ]
 ) ;
 
-#ifndef EXTERN
-#define EXTERN extern
-#endif
-
-EXTERN int (*ccolamd_printf) (const char *, ...) ;
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/CCOLAMD/Lib/Makefile b/CCOLAMD/Lib/Makefile
index c5a0ce3..8a471d5 100644
--- a/CCOLAMD/Lib/Makefile
+++ b/CCOLAMD/Lib/Makefile
@@ -4,20 +4,20 @@
 
 default: libccolamd.a
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-I = -I../Include -I../../UFconfig
+I = -I../Include -I../../SuiteSparse_config
 
-INC = ../Include/ccolamd.h ../../UFconfig/UFconfig.h
+INC = ../Include/ccolamd.h ../../SuiteSparse_config/SuiteSparse_config.h
 
-SRC = ../Source/ccolamd.c ../Source/ccolamd_global.c
+SRC = ../Source/ccolamd.c
 
 # creates libccolamd.a, a C-callable COLAMD library
 libccolamd.a:  $(SRC) $(INC)
-	$(CC) $(CFLAGS) $(I) -c ../Source/ccolamd_global.c
-	$(CC) $(CFLAGS) $(I) -c ../Source/ccolamd.c
-	$(CC) $(CFLAGS) $(I) -c ../Source/ccolamd.c -DDLONG -o ccolamd_l.o
-	$(AR) libccolamd.a ccolamd.o ccolamd_l.o ccolamd_global.o
+	$(CC) $(CF) $(I) -c ../Source/ccolamd.c
+	$(CC) $(CF) $(I) -c ../Source/ccolamd.c -DDLONG -o ccolamd_l.o
+	$(ARCHIVE)  libccolamd.a ccolamd.o ccolamd_l.o
+	- $(RANLIB) libccolamd.a 
 
 ccode: libccolamd.a
 
diff --git a/CCOLAMD/MATLAB/Makefile b/CCOLAMD/MATLAB/Makefile
deleted file mode 100644
index 6bc82fc..0000000
--- a/CCOLAMD/MATLAB/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# CCOLAMD Makefile for MATLAB mexFunctions
-
-default: ccolamd2 csymamd2
-
-include ../../UFconfig/UFconfig.mk
-
-I = -I../../UFconfig -I../Include
-
-INC = ../Include/ccolamd.h ../../UFconfig/UFconfig.h
-
-SRC = ../Source/ccolamd.c ../Source/ccolamd_global.c
-
-MX = $(MEX) -DDLONG $(I)
-
-# Compiles the MATLAB-callable routines
-mex: ccolamd2 csymamd2
-
-csymamd2: csymamdmex.c $(INC) $(SRC)
-	$(MX) -output csymamd csymamdmex.c $(SRC)
-
-ccolamd2: ccolamdmex.c $(INC) $(SRC)
-	$(MX) -output ccolamd ccolamdmex.c $(SRC)
-
-# Compiles the extensive test code
-test: mex ccolamdtestmex.c csymamdtestmex.c $(INC) $(SRC)
-	$(MX) ccolamdtestmex.c $(SRC)
-	$(MX) csymamdtestmex.c $(SRC)
-
-clean:
-	- $(RM) $(CLEAN)
-
-purge: distclean
-
-distclean: clean
-	- $(RM) *.mex* *.dll
diff --git a/CCOLAMD/MATLAB/ccolamd_demo.m b/CCOLAMD/MATLAB/ccolamd_demo.m
index e2fd684..2c69a50 100644
--- a/CCOLAMD/MATLAB/ccolamd_demo.m
+++ b/CCOLAMD/MATLAB/ccolamd_demo.m
@@ -47,9 +47,8 @@ spparms ('default') ;
 A = sprandn (n, n, 2/n) + speye (n) ;
 b = (1:n)' ;
 
-figure (1)
 clf ;
-subplot (2,2,1)
+subplot (3,4,1)
 spy (A)
 title ('original matrix')
 
@@ -62,7 +61,7 @@ fl = luflops (L, U) ;
 x = Q * (U \ (L \ (P * b))) ;
 fprintf (1, '\nFlop count for [L,U,P] = lu (A*Q):          %d\n', fl) ;
 fprintf (1, 'residual:                                     %e\n', norm (A*x-b));
-subplot (2,2,2) ;
+subplot (3,4,2) ;
 spy (L|U) ;
 title ('LU with ccolamd') ;
 
@@ -76,7 +75,7 @@ fl = luflops (L, U) ;
 x = Q * (U \ (L \ (P * b))) ;
 fprintf (1, '\nFlop count for [L,U,P] = lu (A*Q):          %d\n', fl) ;
 fprintf (1, 'residual:                                     %e\n', norm (A*x-b));
-subplot (2,2,3) ;
+subplot (3,4,3) ;
 spy (L|U) ;
 title ('LU with colamd') ;
 catch
@@ -89,7 +88,7 @@ fl = luflops (L, U) ;
 x = U \ (L \ (P * b)) ;
 fprintf (1, '\nFlop count for [L,U,P] = lu (A*Q):          %d\n', fl) ;
 fprintf (1, 'residual:                                     %e\n', norm (A*x-b));
-subplot (2,2,4) ;
+subplot (3,4,4) ;
 spy (L|U) ;
 title ('LU with no ordering') ;
 
@@ -111,9 +110,7 @@ n = 1000 ;
 fprintf (1, 'Generating a random %d-by-%d sparse matrix.\n', n, n) ;
 A = sprandn (n, n, 2/n) + speye (n) ;
 
-figure (2)
-clf ;
-subplot (2,2,1)
+subplot (3,4,5)
 spy (A)
 title ('original matrix')
 
@@ -121,7 +118,7 @@ fprintf (1, '\n\nUnordered matrix:\n') ;
 [lnz,h,parent,post,R] = symbfact (A, 'col') ;
 fprintf (1, 'nz in Cholesky factors of A''A:            %d\n', sum (lnz)) ;
 fprintf (1, 'flop count for Cholesky of A''A:           %d\n', sum (lnz.^2)) ;
-subplot (2,2,4) ;
+subplot (3,4,6) ;
 spy (R) ;
 title ('Cholesky with no ordering') ;
 
@@ -133,7 +130,7 @@ fprintf (1, '\n\nccolamd run time:                         %f\n', t) ;
 fprintf (1, 'ccolamd ordering quality: \n') ;
 fprintf (1, 'nz in Cholesky factors of A(:,p)''A(:,p):  %d\n', sum (lnz)) ;
 fprintf (1, 'flop count for Cholesky of A(:,p)''A(:,p): %d\n', sum (lnz.^2)) ;
-subplot (2,2,2) ;
+subplot (3,4,7) ;
 spy (R) ;
 title ('Cholesky with ccolamd') ;
 
@@ -146,7 +143,7 @@ fprintf (1, '\n\ncolamd run time:                          %f\n', t) ;
 fprintf (1, 'colamd ordering quality: \n') ;
 fprintf (1, 'nz in Cholesky factors of A(:,p)''A(:,p):  %d\n', sum (lnz)) ;
 fprintf (1, 'flop count for Cholesky of A(:,p)''A(:,p): %d\n', sum (lnz.^2)) ;
-subplot (2,2,3) ;
+subplot (3,4,8) ;
 spy (R) ;
 title ('Cholesky with colamd') ;
 catch
@@ -164,9 +161,7 @@ fprintf (1, '\n-----------------------------------------------------------\n') ;
 fprintf (1, 'Generating a random symmetric %d-by-%d sparse matrix.\n', n, n) ;
 A = A+A' ;
 
-figure (3)
-clf ;
-subplot (2,2,1)
+subplot (3,4,9) ;
 spy (A)
 title ('original matrix')
 
@@ -174,7 +169,7 @@ fprintf (1, '\n\nUnordered matrix:\n') ;
 [lnz,h,parent,post,R] = symbfact (A, 'sym') ;
 fprintf (1, 'nz in Cholesky factors of A:       %d\n', sum (lnz)) ;
 fprintf (1, 'flop count for Cholesky of A:      %d\n', sum (lnz.^2)) ;
-subplot (2,2,4) ;
+subplot (3,4,10) ;
 spy (R) ;
 title ('Cholesky with no ordering') ;
 
@@ -186,7 +181,7 @@ fprintf (1, '\n\ncsymamd run time:                  %f\n', t) ;
 fprintf (1, 'csymamd ordering quality: \n') ;
 fprintf (1, 'nz in Cholesky factors of A(p,p):  %d\n', sum (lnz)) ;
 fprintf (1, 'flop count for Cholesky of A(p,p): %d\n', sum (lnz.^2)) ;
-subplot (2,2,2) ;
+subplot (3,4,11) ;
 spy (R) ;
 title ('Cholesky with csymamd') ;
 
@@ -199,7 +194,7 @@ fprintf (1, '\n\nsymamd run time:                   %f\n', t) ;
 fprintf (1, 'symamd ordering quality: \n') ;
 fprintf (1, 'nz in Cholesky factors of A(p,p):  %d\n', sum (lnz)) ;
 fprintf (1, 'flop count for Cholesky of A(p,p): %d\n', sum (lnz.^2)) ;
-subplot (2,2,3) ;
+subplot (3,4,12) ;
 spy (R) ;
 title ('Cholesky with symamd') ;
 catch
diff --git a/CCOLAMD/MATLAB/ccolamd_make.m b/CCOLAMD/MATLAB/ccolamd_make.m
index 4637f38..9a84da9 100644
--- a/CCOLAMD/MATLAB/ccolamd_make.m
+++ b/CCOLAMD/MATLAB/ccolamd_make.m
@@ -14,14 +14,33 @@ d = '' ;
 if (~isempty (strfind (computer, '64')))
     d = '-largeArrayDims' ;
 end
-src = '../Source/ccolamd.c ../Source/ccolamd_global.c' ;
-cmd = sprintf ('mex -DDLONG -O %s -I../../UFconfig -I../Include -output ', d) ;
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    d = ['-silent ' d] ;
+end
+
+src = '../Source/ccolamd.c ../../SuiteSparse_config/SuiteSparse_config.c' ;
+cmd = sprintf ( ...
+    'mex -DDLONG -O %s -I../../SuiteSparse_config -I../Include -output ', d) ;
 s = [cmd 'ccolamd ccolamdmex.c ' src] ;
+
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    s = [s ' -lrt'] ;
+end
 if (details)
     fprintf ('%s\n', s) ;
 end
 eval (s) ;
+
 s = [cmd 'csymamd csymamdmex.c ' src] ;
+
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    s = [s ' -lrt'] ;
+end
+
 if (details)
     fprintf ('%s\n', s) ;
 end
diff --git a/CCOLAMD/MATLAB/ccolamd_test.m b/CCOLAMD/MATLAB/ccolamd_test.m
index e359b9f..0514ad9 100644
--- a/CCOLAMD/MATLAB/ccolamd_test.m
+++ b/CCOLAMD/MATLAB/ccolamd_test.m
@@ -22,8 +22,13 @@ csymamd_default_knobs = [10 1 0] ;
     if (~isempty (strfind (computer, '64')))
 	d = '-largeArrayDims' ;
     end
-    src = '../Source/ccolamd.c ../Source/ccolamd_global.c' ;
-    cmd = sprintf ('mex -DDLONG -O %s -I../../UFconfig -I../Include ', d) ;
+    cmd = sprintf ( ...
+        'mex -DDLONG -O %s -I../../SuiteSparse_config -I../Include ', d) ;
+    src = '../Source/ccolamd.c ../../SuiteSparse_config/SuiteSparse_config.c' ;
+    if (~(ispc || ismac))
+        % for POSIX timing routine
+        src = [src ' -lrt'] ;
+    end
     eval ([cmd 'ccolamdtestmex.c ' src]) ;
     eval ([cmd 'csymamdtestmex.c ' src]) ;
     fprintf ('Done compiling.\n') ; 
diff --git a/CCOLAMD/MATLAB/ccolamdmex.c b/CCOLAMD/MATLAB/ccolamdmex.c
index fbcb878..b387f79 100644
--- a/CCOLAMD/MATLAB/ccolamdmex.c
+++ b/CCOLAMD/MATLAB/ccolamdmex.c
@@ -6,7 +6,6 @@
  * CCOLAMD, Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* 
@@ -26,7 +25,7 @@
 #include "matrix.h"
 #include <stdlib.h>
 #include <string.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 /* ========================================================================== */
 /* === ccolamd mexFunction ================================================== */
@@ -44,24 +43,24 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *A ;		/* ccolamd's copy of the matrix and workspace */
-    UF_long *cmember ;		/* ccolamd's copy of the constraint set */
-    double *in_cmember ;	/* input constraint set */
-    UF_long *p ;		/* ccolamd's copy of the column pointers */
-    UF_long Alen ;		/* size of A */
-    UF_long cslen ;		/* size of CS  */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long nnz ;		/* number of entries in A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *A ;                   /* ccolamd's copy of the matrix and workspace */
+    Long *cmember ;             /* ccolamd's copy of the constraint set */
+    double *in_cmember ;        /* input constraint set */
+    Long *p ;                   /* ccolamd's copy of the column pointers */
+    Long Alen ;                 /* size of A */
+    Long cslen ;                /* size of CS  */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long nnz ;                  /* number of entries in A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [CCOLAMD_KNOBS] ; /* ccolamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats [CCOLAMD_STATS] ;	/* stats for ccolamd */
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats [CCOLAMD_STATS] ;/* stats for ccolamd */
 
     /* === Check inputs ===================================================== */
 
@@ -80,11 +79,11 @@ void mexFunction
 	cslen = mxGetNumberOfElements (pargin [2]) ;
 	if (cslen != 0)
 	{
-	    cmember = (UF_long *) mxCalloc (cslen, sizeof (UF_long)) ;
+	    cmember = (Long *) mxCalloc (cslen, sizeof (Long)) ;
 	    for (i = 0 ; i < cslen ; i++)
 	    {
 		/* convert cmember from 1-based to 0-based */
-		cmember[i] = ((UF_long) in_cmember [i] - 1) ;
+		cmember[i] = ((Long) in_cmember [i] - 1) ;
 	    }
 	}
     }
@@ -157,10 +156,10 @@ void mexFunction
     n_col = mxGetN (Ainput) ;
 
     /* get column pointer vector */
-    p = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
-    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (UF_long)) ;
+    p = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
+    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (Long)) ;
     nnz = p [n_col] ;
-    Alen = (UF_long) ccolamd_l_recommended (nnz, n_row, n_col) ;
+    Alen = (Long) ccolamd_l_recommended (nnz, n_row, n_col) ;
     if (Alen == 0)
     {
     	mexErrMsgTxt ("ccolamd: problem too large") ;
@@ -168,8 +167,8 @@ void mexFunction
 
     /* === Copy input matrix into workspace ================================= */
 
-    A = (UF_long *) mxCalloc (Alen, sizeof (UF_long)) ;
-    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (UF_long)) ;
+    A = (Long *) mxCalloc (Alen, sizeof (Long)) ;
+    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (Long)) ;
 
     if (full)
     {
diff --git a/CCOLAMD/MATLAB/ccolamdtestmex.c b/CCOLAMD/MATLAB/ccolamdtestmex.c
index b5b04da..319a900 100644
--- a/CCOLAMD/MATLAB/ccolamdtestmex.c
+++ b/CCOLAMD/MATLAB/ccolamdtestmex.c
@@ -6,7 +6,6 @@
  * CCOLAMD Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /*
@@ -43,7 +42,7 @@
 #include "matrix.h"
 #include <stdlib.h>
 #include <string.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 /* Here only for testing */
 #undef MIN
@@ -61,15 +60,15 @@
 
 static void dump_matrix
 (
-    UF_long A [ ],
-    UF_long p [ ],
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long limit
+    Long A [ ],
+    Long p [ ],
+    Long n_row,
+    Long n_col,
+    Long Alen,
+    Long limit
 )
 {
-    UF_long col, k, row ;
+    Long col, k, row ;
 
     mexPrintf ("dump matrix: nrow %d ncol %d Alen %d\n", n_row, n_col, Alen) ;
 
@@ -102,24 +101,24 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *A ;		/* ccolamd's copy of the matrix and workspace */
-    UF_long *p ;		/* ccolamd's copy of the column pointers */
-    UF_long Alen ;		/* size of A */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long nnz ;		/* number of entries in A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *A ;                   /* ccolamd's copy of the matrix and workspace */
+    Long *p ;                   /* ccolamd's copy of the column pointers */
+    Long Alen ;                 /* size of A */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long nnz ;                  /* number of entries in A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [CCOLAMD_KNOBS] ; /* ccolamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats2 [CCOLAMD_STATS] ;	/* stats for ccolamd */
-
-    UF_long *cp, *cp_end, result, col, length, ok ;
-    UF_long *stats ;
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats2 [CCOLAMD_STATS] ; /* stats for ccolamd */
+
+    Long *cp, *cp_end, result, col, length, ok ;
+    Long *stats ;
     stats = stats2 ;
 
     /* === Check inputs ===================================================== */
@@ -199,10 +198,10 @@ void mexFunction
     n_col = mxGetN (Ainput) ;
 
     /* get column pointer vector so we can find nnz */
-    p = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
-    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (UF_long)) ;
+    p = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
+    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (Long)) ;
     nnz = p [n_col] ;
-    Alen = (UF_long) ccolamd_l_recommended (nnz, n_row, n_col) ;
+    Alen = (Long) ccolamd_l_recommended (nnz, n_row, n_col) ;
     if (Alen == 0)
     {
     	mexErrMsgTxt ("ccolamd: problem too large") ;
@@ -230,8 +229,8 @@ void mexFunction
 
     /* === Copy input matrix into workspace ================================= */
 
-    A = (UF_long *) mxCalloc (Alen, sizeof (UF_long)) ;
-    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (UF_long)) ;
+    A = (Long *) mxCalloc (Alen, sizeof (Long)) ;
+    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (Long)) ;
 
     if (full)
     {
@@ -261,7 +260,7 @@ void mexFunction
     */
 
     /* jumble appropriately */
-    switch ((UF_long) in_knobs [6])
+    switch ((Long) in_knobs [6])
     {
 
 	case 0 :
@@ -359,7 +358,7 @@ void mexFunction
 		mexPrintf ("ccolamdtest: A not present\n") ;
 	    }
 	    result = 0 ;		/* A not present */
-	    A = (UF_long *) NULL ;
+	    A = (Long *) NULL ;
 	    break ;
 
 	case 8 :
@@ -368,7 +367,7 @@ void mexFunction
 		mexPrintf ("ccolamdtest: p not present\n") ;
 	    }
 	    result = 0 ;		/* p not present */
-	    p = (UF_long *) NULL ;
+	    p = (Long *) NULL ;
 	    break ;
 
 	case 9 :
@@ -456,7 +455,7 @@ void mexFunction
 		mexPrintf ("ccolamdtest: stats not present\n") ;
 	    }
 	    result = 0 ;		/* stats not present */
-	    stats = (UF_long *) NULL ;
+	    stats = (Long *) NULL ;
 	    break ;
 
 	case 13 :
diff --git a/CCOLAMD/MATLAB/csymamd.m b/CCOLAMD/MATLAB/csymamd.m
index 901040d..4308f99 100644
--- a/CCOLAMD/MATLAB/csymamd.m
+++ b/CCOLAMD/MATLAB/csymamd.m
@@ -34,10 +34,10 @@ function [p, stats] = csymamd (S, knobs, cmember)			    %#ok
 %    p = csymamd(S) is about the same as p = symamd(S).  knobs and its default
 %    values differ.
 %
-%    Authors: S. Larimore, T. Davis (Univ of Florida), and S. Rajamanickam, in
+%    Authors: S. Larimore, T. Davis, and S. Rajamanickam, in
 %    collaboration with J. Gilbert and E. Ng.  Supported by the National
 %    Science Foundation (DMS-9504974, DMS-9803599, CCR-0203270), and a grant
-%    from Sandia National Lab.  See http://www.cise.ufl.edu/research/sparse
+%    from Sandia National Lab.  See http://www.suitesparse.com
 %    for ccolamd, csymamd, amd, colamd, symamd, and other related orderings.
 %
 %    See also AMD, CCOLAMD, COLAMD, SYMAMD, SYMRCM.
diff --git a/CCOLAMD/MATLAB/csymamdmex.c b/CCOLAMD/MATLAB/csymamdmex.c
index e52d926..dd3e282 100644
--- a/CCOLAMD/MATLAB/csymamdmex.c
+++ b/CCOLAMD/MATLAB/csymamdmex.c
@@ -6,7 +6,6 @@
  * CCOLAMD, Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* 
@@ -25,7 +24,7 @@
 #include "mex.h"
 #include "matrix.h"
 #include <stdlib.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 /* ========================================================================== */
 /* === csymamd mexFunction ================================================== */
@@ -43,23 +42,23 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *A ;		/* row indices of input matrix A */
-    UF_long *perm ;		/* column ordering of M and ordering of A */
-    UF_long *cmember ;		/* csymamd's copy of the constraint set */
-    double *in_cmember ;	/* input constraint set */
-    UF_long *p ;		/* column pointers of input matrix A */
-    UF_long cslen ;		/* size of constraint set */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *A ;                   /* row indices of input matrix A */
+    Long *perm ;                /* column ordering of M and ordering of A */
+    Long *cmember ;             /* csymamd's copy of the constraint set */
+    double *in_cmember ;        /* input constraint set */
+    Long *p ;                   /* column pointers of input matrix A */
+    Long cslen ;                /* size of constraint set */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [CCOLAMD_KNOBS] ; /* csymamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats [CCOLAMD_STATS] ;	/* stats for symamd */
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats [CCOLAMD_STATS] ;/* stats for symamd */
 
     /* === Check inputs ===================================================== */
 
@@ -78,11 +77,11 @@ void mexFunction
 	cslen = mxGetNumberOfElements (pargin [2]) ;
 	if (cslen != 0)
 	{
-	    cmember = (UF_long *) mxCalloc (cslen, sizeof (UF_long)) ;
+	    cmember = (Long *) mxCalloc (cslen, sizeof (Long)) ;
 	    for (i = 0 ; i < cslen ; i++)
 	    {
 		/* convert cmember from 1-based to 0-based */
-		cmember[i] = ((UF_long) in_cmember [i] - 1) ;
+		cmember[i] = ((Long) in_cmember [i] - 1) ;
 	    }
 	}
     }
@@ -153,9 +152,9 @@ void mexFunction
     	mexErrMsgTxt ("csymamd: cmember must be of length equal to #cols of A");
     }
 
-    A = (UF_long *) mxGetIr (Ainput) ;
-    p = (UF_long *) mxGetJc (Ainput) ;
-    perm = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
+    A = (Long *) mxGetIr (Ainput) ;
+    p = (Long *) mxGetJc (Ainput) ;
+    perm = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
 
     /* === Order the rows and columns of A (does not destroy A) ============= */
 
diff --git a/CCOLAMD/MATLAB/csymamdtestmex.c b/CCOLAMD/MATLAB/csymamdtestmex.c
index 428b411..fd293fb 100644
--- a/CCOLAMD/MATLAB/csymamdtestmex.c
+++ b/CCOLAMD/MATLAB/csymamdtestmex.c
@@ -6,7 +6,6 @@
  * CCOLAMD Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /*
@@ -37,7 +36,7 @@
 #include "matrix.h"
 #include <stdlib.h>
 #include <string.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 #ifdef MIN
 #undef MIN
@@ -47,15 +46,15 @@
 
 static void dump_matrix
 (
-    UF_long A [ ],
-    UF_long p [ ],
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long limit
+    Long A [ ],
+    Long p [ ],
+    Long n_row,
+    Long n_col,
+    Long Alen,
+    Long limit
 )
 {
-    UF_long col, k, row ;
+    Long col, k, row ;
 
     mexPrintf ("dump matrix: nrow %d ncol %d Alen %d\n", n_row, n_col, Alen) ;
 
@@ -100,23 +99,23 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *perm ;		/* column ordering of M and ordering of A */
-    UF_long *A ;		/* row indices of input matrix A */
-    UF_long *p ;		/* column pointers of input matrix A */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *perm ;                /* column ordering of M and ordering of A */
+    Long *A ;                   /* row indices of input matrix A */
+    Long *p ;                   /* column pointers of input matrix A */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [CCOLAMD_KNOBS] ; /* ccolamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats2 [CCOLAMD_STATS] ;/* stats for csymamd */
-
-    UF_long *cp, *cp_end, result, nnz, col, length, ok ;
-    UF_long *stats ;
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats2 [CCOLAMD_STATS] ;/* stats for csymamd */
+
+    Long *cp, *cp_end, result, nnz, col, length, ok ;
+    Long *stats ;
     stats = stats2 ;
 
     /* === Check inputs ===================================================== */
@@ -192,8 +191,8 @@ void mexFunction
     }
 
     /* p = mxGetJc (Ainput) ; */
-    p = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
-    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (UF_long)) ;
+    p = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
+    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (Long)) ;
 
     nnz = p [n_col] ;
     if (spumoni)
@@ -202,10 +201,10 @@ void mexFunction
     }
 
     /* A = mxGetIr (Ainput) ; */
-    A = (UF_long *) mxCalloc (nnz+1, sizeof (UF_long)) ;
-    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (UF_long)) ;
+    A = (Long *) mxCalloc (nnz+1, sizeof (Long)) ;
+    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (Long)) ;
 
-    perm = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
+    perm = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
 
     /* === Jumble matrix ==================================================== */
 
@@ -230,7 +229,7 @@ void mexFunction
     */
 
     /* jumble appropriately */
-    switch ((UF_long) in_knobs [3])
+    switch ((Long) in_knobs [3])
     {
 
 	case 0 :
@@ -321,7 +320,7 @@ void mexFunction
 		mexPrintf ("csymamdtest: A not present\n") ;
 	    }
 	    result = 0 ;		/* A not present */
-	    A = (UF_long *) NULL ;
+	    A = (Long *) NULL ;
 	    break ;
 
 	case 8 :
@@ -330,7 +329,7 @@ void mexFunction
 		mexPrintf ("csymamdtest: p not present\n") ;
 	    }
 	    result = 0 ;		/* p not present */
-	    p = (UF_long *) NULL ;
+	    p = (Long *) NULL ;
 	    break ;
 
 	case 9 :
@@ -418,7 +417,7 @@ void mexFunction
 		mexPrintf ("csymamdtest: stats not present\n") ;
 	    }
 	    result = 0 ;		/* stats not present */
-	    stats = (UF_long *) NULL ;
+	    stats = (Long *) NULL ;
 	    break ;
 
 	case 13 :
diff --git a/CCOLAMD/Makefile b/CCOLAMD/Makefile
index a79f7eb..83111ca 100644
--- a/CCOLAMD/Makefile
+++ b/CCOLAMD/Makefile
@@ -2,23 +2,20 @@
 # CCOLAMD Makefile
 #------------------------------------------------------------------------------
 
-default: demo
+VERSION = 2.9.1
 
-include ../UFconfig/UFconfig.mk
+default: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
-# Do not the MATLAB interface.
-demo:
-	( cd Lib    ; $(MAKE) )
-	( cd Demo   ; $(MAKE) )
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+demos: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
+# Compile all C code
 all:
 	( cd Lib    ; $(MAKE) )
 	( cd Demo   ; $(MAKE) )
-	( cd MATLAB ; $(MAKE) )
 
-# compile just the C-callable libraries (not mexFunctions or Demos)
+# compile just the C-callable libraries (not Demos)
 library:
 	( cd Lib    ; $(MAKE) )
 
@@ -26,13 +23,13 @@ library:
 clean:
 	( cd Lib    ; $(MAKE) clean )
 	( cd Demo   ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) )
 
 # clean, and then remove compiled programs and library archives
 purge:
 	( cd Lib    ; $(MAKE) purge )
 	( cd Demo   ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) ; $(RM) *.mex* )
 
 distclean: purge
 
@@ -44,6 +41,16 @@ ccode: library
 
 lib: library
 
-# compile the MATLAB mexFunction
-mex:
-	( cd MATLAB ; $(MAKE) )
+# install CCOLAMD
+install:
+	$(CP) Lib/libccolamd.a $(INSTALL_LIB)/libccolamd.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libccolamd.$(VERSION).a libccolamd.a )
+	$(CP) Include/ccolamd.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libccolamd*.a
+	chmod 644 $(INSTALL_INCLUDE)/ccolamd.h
+
+# uninstall CCOLAMD
+uninstall:
+	$(RM) $(INSTALL_LIB)/libccolamd*.a
+	$(RM) $(INSTALL_INCLUDE)/ccolamd.h
+
diff --git a/CCOLAMD/README.txt b/CCOLAMD/README.txt
index f919208..1305637 100644
--- a/CCOLAMD/README.txt
+++ b/CCOLAMD/README.txt
@@ -1,8 +1,8 @@
-CCOLAMD version 2.7: constrained column approximate minimum degree ordering
-Copyright (C) 2005-2007, Univ. of Florida.  Authors: Timothy A. Davis,
+CCOLAMD: constrained column approximate minimum degree ordering
+Copyright (C) 2005-2013, Univ. of Florida.  Authors: Timothy A. Davis,
 Sivasankaran Rajamanickam, and Stefan Larimore.  Closely based on COLAMD by
 Davis, Stefan Larimore, in collaboration with Esmond Ng, and John Gilbert.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 -------------------------------------------------------------------------------
 
 The CCOLAMD column approximate minimum degree ordering algorithm computes
@@ -14,7 +14,8 @@ available as a MATLAB-callable function.  It constructs a matrix M such
 that M'*M has the same pattern as A, and then uses CCOLAMD to compute a column
 ordering of M.
 
-Requires UFconfig, in the ../UFconfig directory relative to this directory.
+Requires SuiteSparse_config, in the ../SuiteSparse_config directory relative to
+this directory.
 
 To compile and install the ccolamd m-files and mexFunctions, just cd to
 CCOLAMD/MATLAB and type ccolamd_install in the MATLAB command window.
@@ -22,10 +23,6 @@ A short demo will run.  Optionally, type ccolamd_test to run an extensive tests.
 Type "make" in Unix in the CCOLAMD directory to compile the C-callable
 library and to run a short demo.
 
-If you have MATLAB 7.2 or earlier, you must first edit UFconfig/UFconfig.h to
-remove the "-largeArrayDims" option from the MEX command (or just use
-ccolamd_install.m inside MATLAB).
-
 Other "make" targets:
 
     make mex		compiles MATLAB mexFunctions only
@@ -39,9 +36,6 @@ ccolamd.c and ccolamd.h, which are the C-callable ccolamd/csymamd codes.
 See ccolamd.c for more information on how to call ccolamd from a C program.
 It contains a complete description of the C-interface to CCOLAMD and CSYMAMD.
 
-	Copyright (c) 1998-2007 by the University of Florida.
-	All Rights Reserved.
-
 	Licensed under the GNU LESSER GENERAL PUBLIC LICENSE.
 
 -------------------------------------------------------------------------------
@@ -86,21 +80,18 @@ Related papers:
 	"An approximate minimum degree column ordering algorithm",
 	S. I. Larimore, MS Thesis, Dept. of Computer and Information
 	Science and Engineering, University of Florida, Gainesville, FL,
-	1998.  CISE Tech Report TR-98-016.  Available at 
-	ftp://ftp.cise.ufl.edu/cis/tech-reports/tr98/tr98-016.ps
-	via anonymous ftp.
+	1998.  CISE Tech Report TR-98-016.
 
 	Approximate Deficiency for Ordering the Columns of a Matrix,
 	J. L. Kern, Senior Thesis, Dept. of Computer and Information
 	Science and Engineering, University of Florida, Gainesville, FL,
-	1999.  Available at http://www.cise.ufl.edu/~davis/Kern/kern.ps 
+	1999.
 
 Authors:  Timothy A. Davis, Sivasankaran Rajamanickam, and Stefan Larimore.
 	Closely based on COLAMD by Stefan I. Larimore and Timothy A. Davis,
-	University of Florida, in collaboration with John Gilbert, Xerox PARC
-	(now at UC Santa Barbara), and Esmong Ng, Lawrence Berkeley National
-	Laboratory (much of this work he did while at Oak Ridge National
-	Laboratory). 
+        in collaboration with John Gilbert, Xerox PARC (now at UC Santa
+        Barbara), and Esmong Ng, Lawrence Berkeley National Laboratory (much of
+        this work he did while at Oak Ridge National Laboratory). 
 
 CCOLAMD files:
 
diff --git a/CCOLAMD/Source/ccolamd.c b/CCOLAMD/Source/ccolamd.c
index 9247471..c4fec39 100644
--- a/CCOLAMD/Source/ccolamd.c
+++ b/CCOLAMD/Source/ccolamd.c
@@ -6,7 +6,6 @@
  * CCOLAMD, Copyright (C) Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /*
@@ -87,10 +86,7 @@
  *
  *	The CCOLAMD/CSYMAMD library is available at
  *
- *	    http://www.cise.ufl.edu/research/sparse/ccolamd/
- *
- *	This is the http://www.cise.ufl.edu/research/sparse/ccolamd/ccolamd.c
- *	file.
+ *	    http://www.suitesparse.com
  *
  *   See the ChangeLog file for changes since Version 1.0.
  */
@@ -99,10 +95,10 @@
 /* === Description of user-callable routines ================================ */
 /* ========================================================================== */
 
-/* CCOLAMD includes both int and UF_long versions of all its routines.  The
- * description below is for the int version.   For UF_long, all int arguments
- * become UF_long integers.  UF_long is normally defined as long, except for
- * WIN64 */
+/* CCOLAMD includes both int and SuiteSparse_long versions of all its routines.
+ * The description below is for the int version.   For SuiteSparse_long, all
+ * int arguments become SuiteSparse_long integers.  SuiteSparse_long is
+ * normally defined as long, except for WIN64 */
 
 /*  ----------------------------------------------------------------------------
  *  ccolamd_recommended:
@@ -112,8 +108,8 @@
  *
  *	    #include "ccolamd.h"
  *	    size_t ccolamd_recommended (int nnz, int n_row, int n_col) ;
- *	    size_t ccolamd_l_recommended (UF_long nnz, UF_long n_row,
- *		UF_long n_col) ;
+ *	    size_t ccolamd_l_recommended (SuiteSparse_long nnz,
+ *              SuiteSparse_long n_row, SuiteSparse_long n_col) ;
  *
  *	Purpose:
  *
@@ -209,9 +205,12 @@
  *	    	double knobs [CCOLAMD_KNOBS], int stats [CCOLAMD_STATS],
  *		int *cmember) ;
  *
- *	    UF_long ccolamd_l (UF_long n_row, UF_long n_col, UF_long Alen,
- *		UF_long *A, UF_long *p, double knobs [CCOLAMD_KNOBS],
- *		UF_long stats [CCOLAMD_STATS], UF_long *cmember) ;
+ *	    SuiteSparse_long ccolamd_l (SuiteSparse_long n_row,
+ *	        SuiteSparse_long n_col, SuiteSparse_long Alen,
+ *              SuiteSparse_long *A, SuiteSparse_long *p,
+ *              double knobs [CCOLAMD_KNOBS],
+ *              SuiteSparse_long stats [CCOLAMD_STATS],
+ *              SuiteSparse_long *cmember) ;
  *
  *	Purpose:
  *
@@ -385,9 +384,7 @@
  *
  *	Example:
  *
- *	    See
- *	    http://www.cise.ufl.edu/research/sparse/ccolamd/ccolamd_example.c
- *	    for a complete example.
+ *	    See ccolamd_example.c for a complete example.
  *
  *	    To order the columns of a 5-by-4 matrix with 11 nonzero entries in
  *	    the following nonzero pattern
@@ -423,10 +420,12 @@
  *		void (*allocate) (size_t, size_t), void (*release) (void *),
  *		int *cmember, int stype) ;
  *
- *	    UF_long csymamd_l (UF_long n, UF_long *A, UF_long *p, UF_long *perm,
- *	    	double knobs [CCOLAMD_KNOBS], UF_long stats [CCOLAMD_STATS],
- *		void (*allocate) (size_t, size_t), void (*release) (void *),
- *		UF_long *cmember, UF_long stype) ;
+ *	    SuiteSparse_long csymamd_l (SuiteSparse_long n,
+ *              SuiteSparse_long *A, SuiteSparse_long *p,
+ *              SuiteSparse_long *perm, double knobs [CCOLAMD_KNOBS],
+ *              SuiteSparse_long stats [CCOLAMD_STATS], void (*allocate)
+ *              (size_t, size_t), void (*release) (void *),
+ *              SuiteSparse_long *cmember, SuiteSparse_long stype) ;
  *
  *	Purpose:
  *
@@ -562,7 +561,7 @@
  *
  *	    #include "ccolamd.h"
  *	    ccolamd_report (int stats [CCOLAMD_STATS]) ;
- *	    ccolamd_l_report (UF_long stats [CCOLAMD_STATS]) ;
+ *	    ccolamd_l_report (SuiteSparse_long stats [CCOLAMD_STATS]) ;
  *
  *	Purpose:
  *
@@ -583,7 +582,7 @@
  *
  *	    #include "ccolamd.h"
  *	    csymamd_report (int stats [CCOLAMD_STATS]) ;
- *	    csymamd_l_report (UF_long stats [CCOLAMD_STATS]) ;
+ *	    csymamd_l_report (SuiteSparse_long stats [CCOLAMD_STATS]) ;
  *
  *	Purpose:
  *
@@ -635,17 +634,14 @@
 #endif
 
 /* ========================================================================== */
-/* === int or UF_long ======================================================= */
+/* === int or SuiteSparse_long ============================================== */
 /* ========================================================================== */
 
-/* define UF_long */
-#include "UFconfig.h"
-
 #ifdef DLONG
 
-#define Int UF_long
-#define ID  UF_long_id
-#define Int_MAX UF_long_max
+#define Int SuiteSparse_long
+#define ID  SuiteSparse_long_id
+#define Int_MAX SuiteSparse_long_max
 
 #define CCOLAMD_recommended ccolamd_l_recommended
 #define CCOLAMD_set_defaults ccolamd_l_set_defaults
@@ -810,9 +806,6 @@ typedef struct CColamd_Row_struct
 #define INDEX(i) (i)
 #endif
 
-/* All output goes through the PRINTF macro.  */
-#define PRINTF(params) { if (ccolamd_printf != NULL) (void) ccolamd_printf params ; }
-
 
 /* ========================================================================== */
 /* === Debugging prototypes and definitions ================================= */
@@ -826,11 +819,11 @@ typedef struct CColamd_Row_struct
 PRIVATE Int ccolamd_debug ;
 
 /* debug print statements */
-#define DEBUG0(params) { PRINTF (params) ; }
-#define DEBUG1(params) { if (ccolamd_debug >= 1) PRINTF (params) ; }
-#define DEBUG2(params) { if (ccolamd_debug >= 2) PRINTF (params) ; }
-#define DEBUG3(params) { if (ccolamd_debug >= 3) PRINTF (params) ; }
-#define DEBUG4(params) { if (ccolamd_debug >= 4) PRINTF (params) ; }
+#define DEBUG0(params) { SUITESPARSE_PRINTF (params) ; }
+#define DEBUG1(params) { if (ccolamd_debug >= 1) SUITESPARSE_PRINTF (params) ; }
+#define DEBUG2(params) { if (ccolamd_debug >= 2) SUITESPARSE_PRINTF (params) ; }
+#define DEBUG3(params) { if (ccolamd_debug >= 3) SUITESPARSE_PRINTF (params) ; }
+#define DEBUG4(params) { if (ccolamd_debug >= 4) SUITESPARSE_PRINTF (params) ; }
 
 #ifdef MATLAB_MEX_FILE
 #define ASSERT(expression) (mxAssert ((expression), ""))
@@ -1980,7 +1973,7 @@ PUBLIC Int CCOLAMD_2	    /* returns TRUE if successful, FALSE otherwise */
     /* === Return statistics in stats ======================================= */
 
     stats [CCOLAMD_DENSE_ROW] = ndense_row ;
-    stats [CCOLAMD_DENSE_COL] = nempty_row ;
+    stats [CCOLAMD_EMPTY_ROW] = nempty_row ;        /* fixed in 2.7.3 */
     stats [CCOLAMD_NEWLY_EMPTY_ROW] = nnewlyempty_row ;
     stats [CCOLAMD_DENSE_COL] = ndense_col ;
     stats [CCOLAMD_EMPTY_COL] = nempty_col ;
@@ -3751,12 +3744,12 @@ PRIVATE void print_report
 
     Int i1, i2, i3 ;
 
-    PRINTF (("\n%s version %d.%d, %s: ", method,
+    SUITESPARSE_PRINTF (("\n%s version %d.%d, %s: ", method,
 	    CCOLAMD_MAIN_VERSION, CCOLAMD_SUB_VERSION, CCOLAMD_DATE)) ;
 
     if (!stats)
     {
-    	PRINTF (("No statistics available.\n")) ;
+    	SUITESPARSE_PRINTF (("No statistics available.\n")) ;
 	return ;
     }
 
@@ -3766,11 +3759,11 @@ PRIVATE void print_report
 
     if (stats [CCOLAMD_STATUS] >= 0)
     {
-    	PRINTF(("OK.  ")) ;
+    	SUITESPARSE_PRINTF(("OK.  ")) ;
     }
     else
     {
-    	PRINTF(("ERROR.  ")) ;
+    	SUITESPARSE_PRINTF(("ERROR.  ")) ;
     }
 
     switch (stats [CCOLAMD_STATUS])
@@ -3778,91 +3771,105 @@ PRIVATE void print_report
 
 	case CCOLAMD_OK_BUT_JUMBLED:
 
-	    PRINTF(("Matrix has unsorted or duplicate row indices.\n")) ;
+            SUITESPARSE_PRINTF((
+                    "Matrix has unsorted or duplicate row indices.\n")) ;
 
-	    PRINTF(("%s: duplicate or out-of-order row indices:    "ID"\n",
-		    method, i3)) ;
+            SUITESPARSE_PRINTF((
+                    "%s: duplicate or out-of-order row indices:    "ID"\n",
+                    method, i3)) ;
 
-	    PRINTF(("%s: last seen duplicate or out-of-order row:  "ID"\n",
-		    method, INDEX (i2))) ;
+            SUITESPARSE_PRINTF((
+                    "%s: last seen duplicate or out-of-order row:  "ID"\n",
+                    method, INDEX (i2))) ;
 
-	    PRINTF(("%s: last seen in column:                      "ID"",
-		    method, INDEX (i1))) ;
+            SUITESPARSE_PRINTF((
+                    "%s: last seen in column:                      "ID"",
+                    method, INDEX (i1))) ;
 
 	    /* no break - fall through to next case instead */
 
 	case CCOLAMD_OK:
 
-	    PRINTF(("\n")) ;
+            SUITESPARSE_PRINTF(("\n")) ;
 
- 	    PRINTF(("%s: number of dense or empty rows ignored:    "ID"\n",
-		    method, stats [CCOLAMD_DENSE_ROW])) ;
+            SUITESPARSE_PRINTF((
+                    "%s: number of dense or empty rows ignored:    "ID"\n",
+                    method, stats [CCOLAMD_DENSE_ROW])) ;
 
-	    PRINTF(("%s: number of dense or empty columns ignored: "ID"\n",
-		    method, stats [CCOLAMD_DENSE_COL])) ;
+            SUITESPARSE_PRINTF((
+                    "%s: number of dense or empty columns ignored: "ID"\n",
+                    method, stats [CCOLAMD_DENSE_COL])) ;
 
-	    PRINTF(("%s: number of garbage collections performed:  "ID"\n",
-		    method, stats [CCOLAMD_DEFRAG_COUNT])) ;
+            SUITESPARSE_PRINTF((
+                    "%s: number of garbage collections performed:  "ID"\n",
+                    method, stats [CCOLAMD_DEFRAG_COUNT])) ;
 	    break ;
 
 	case CCOLAMD_ERROR_A_not_present:
 
-	    PRINTF(("Array A (row indices of matrix) not present.\n")) ;
+            SUITESPARSE_PRINTF((
+                    "Array A (row indices of matrix) not present.\n")) ;
 	    break ;
 
 	case CCOLAMD_ERROR_p_not_present:
 
-	    PRINTF(("Array p (column pointers for matrix) not present.\n")) ;
+            SUITESPARSE_PRINTF((
+                    "Array p (column pointers for matrix) not present.\n")) ;
 	    break ;
 
 	case CCOLAMD_ERROR_nrow_negative:
 
-	    PRINTF(("Invalid number of rows ("ID").\n", i1)) ;
+            SUITESPARSE_PRINTF(("Invalid number of rows ("ID").\n", i1)) ;
 	    break ;
 
 	case CCOLAMD_ERROR_ncol_negative:
 
-	    PRINTF(("Invalid number of columns ("ID").\n", i1)) ;
+            SUITESPARSE_PRINTF(("Invalid number of columns ("ID").\n", i1)) ;
 	    break ;
 
 	case CCOLAMD_ERROR_nnz_negative:
 
-	    PRINTF(("Invalid number of nonzero entries ("ID").\n", i1)) ;
+            SUITESPARSE_PRINTF((
+                    "Invalid number of nonzero entries ("ID").\n", i1)) ;
 	    break ;
 
 	case CCOLAMD_ERROR_p0_nonzero:
 
-	    PRINTF(("Invalid column pointer, p [0] = "ID", must be 0.\n", i1)) ;
+            SUITESPARSE_PRINTF((
+                    "Invalid column pointer, p [0] = "ID", must be 0.\n", i1)) ;
 	    break ;
 
 	case CCOLAMD_ERROR_A_too_small:
 
-	    PRINTF(("Array A too small.\n")) ;
-	    PRINTF(("        Need Alen >= "ID", but given only Alen = "ID".\n",
-		    i1, i2)) ;
+            SUITESPARSE_PRINTF(("Array A too small.\n")) ;
+            SUITESPARSE_PRINTF((
+                    "        Need Alen >= "ID", but given only Alen = "ID".\n",
+                    i1, i2)) ;
 	    break ;
 
 	case CCOLAMD_ERROR_col_length_negative:
 
-	    PRINTF(("Column "ID" has a negative number of entries ("ID").\n",
-		    INDEX (i1), i2)) ;
+            SUITESPARSE_PRINTF((
+                    "Column "ID" has a negative number of entries ("ID").\n",
+                    INDEX (i1), i2)) ;
 	    break ;
 
 	case CCOLAMD_ERROR_row_index_out_of_bounds:
 
-	    PRINTF(("Row index (row "ID") out of bounds ("ID" to "ID") in"
-		    "column "ID".\n", INDEX (i2), INDEX (0), INDEX (i3-1),
-		    INDEX (i1))) ;
+            SUITESPARSE_PRINTF((
+                    "Row index (row "ID") out of bounds ("ID" to "ID") in"
+                    "column "ID".\n", INDEX (i2), INDEX (0), INDEX (i3-1),
+                    INDEX (i1))) ;
 	    break ;
 
 	case CCOLAMD_ERROR_out_of_memory:
 
-	    PRINTF(("Out of memory.\n")) ;
+            SUITESPARSE_PRINTF(("Out of memory.\n")) ;
 	    break ;
 
 	case CCOLAMD_ERROR_invalid_cmember:
 
-	    PRINTF(("cmember invalid\n")) ;
+            SUITESPARSE_PRINTF(("cmember invalid\n")) ;
 	    break ;
     }
 }
diff --git a/CCOLAMD/Source/ccolamd_global.c b/CCOLAMD/Source/ccolamd_global.c
index d439851..844fc61 100644
--- a/CCOLAMD/Source/ccolamd_global.c
+++ b/CCOLAMD/Source/ccolamd_global.c
@@ -6,20 +6,7 @@
  * CCOLAMD Copyright (C), Univ. of Florida.  Authors: Timothy A. Davis,
  * Sivasankaran Rajamanickam, and Stefan Larimore
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
-/* Global variables for CCOLAMD */
-
-#ifndef NPRINT
-#ifdef MATLAB_MEX_FILE
-#include "mex.h"
-int (*ccolamd_printf) (const char *, ...) = mexPrintf ;
-#else
-#include <stdio.h>
-int (*ccolamd_printf) (const char *, ...) = printf ;
-#endif
-#else
-int (*ccolamd_printf) (const char *, ...) = ((void *) 0) ;
-#endif
-
+/* Global variables for CCOLAMD : ccolamd_printf replaced with
+    a function in SuiteSparse_config. */
diff --git a/CHOLMOD/Check/License.txt b/CHOLMOD/Check/License.txt
index 8a20b17..ba50e66 100644
--- a/CHOLMOD/Check/License.txt
+++ b/CHOLMOD/Check/License.txt
@@ -1,6 +1,6 @@
 CHOLMOD/Check Module.  Copyright (C) 2005-2006, Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Check module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Check/cholmod_check.c b/CHOLMOD/Check/cholmod_check.c
index 13a092d..4fa9cd2 100644
--- a/CHOLMOD/Check/cholmod_check.c
+++ b/CHOLMOD/Check/cholmod_check.c
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Check Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Check Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Check Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Routines to check and print the contents of the 5 CHOLMOD objects:
@@ -55,7 +54,7 @@
  * Common->precise controls the # of digits printed for numerical entries
  * (5 if FALSE, 15 if TRUE).
  *
- * If Common->print_function is NULL, then no printing occurs.  The
+ * If SuiteSparse_config.printf_func is NULL, then no printing occurs.  The
  * cholmod_check_* and cholmod_print_* routines still check their inputs and
  * return TRUE/FALSE if the object is valid or not.
  *
@@ -82,9 +81,9 @@
 
 #define PR(i,format,arg) \
 { \
-    if (print >= i && Common->print_function != NULL) \
+    if (print >= i && SuiteSparse_config.printf_func != NULL) \
     { \
-	(Common->print_function) (format, arg) ; \
+	SuiteSparse_config.printf_func (format, arg) ; \
     } \
 }
 
@@ -197,16 +196,16 @@ static void print_value
 static int check_common
 (
     Int print,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
     double fl, lnz ;
     double *Xwork ;
     Int *Flag, *Head ;
-    UF_long mark ;
-    Int i, nrow, nmethods, ordering, xworksize, amd_printed, init_print ;
-    char *type = "common" ;
+    SuiteSparse_long mark ;
+    Int i, nrow, nmethods, ordering, xworksize, amd_backup, init_print ;
+    const char *type = "common" ;
 
     /* ---------------------------------------------------------------------- */
     /* print control parameters and statistics */
@@ -249,6 +248,10 @@ static int check_common
 	    P1 ("%s", "status: ERROR, method not installed\n") ;
 	    break ;
 
+	case CHOLMOD_GPU_PROBLEM:
+	    P1 ("%s", "status: ERROR, GPU had a fatal error\n") ;
+	    break ;
+
 	case CHOLMOD_NOT_POSDEF:
 	    P1 ("%s", "status: warning, matrix not positive definite\n") ;
 	    break ;
@@ -263,7 +266,7 @@ static int check_common
 
     P2 ("  Architecture: %s\n", CHOLMOD_ARCHITECTURE) ;
     P3 ("    sizeof(int):      %d\n", (int) sizeof (int)) ;
-    P3 ("    sizeof(UF_long):  %d\n", (int) sizeof (UF_long)) ;
+    P3 ("    sizeof(SuiteSparse_long):  %d\n", (int) sizeof (SuiteSparse_long));
     P3 ("    sizeof(void *):   %d\n", (int) sizeof (void *)) ;
     P3 ("    sizeof(double):   %d\n", (int) sizeof (double)) ;
     P3 ("    sizeof(Int):      %d (CHOLMOD's basic integer)\n", (int) sizeof (Int)) ;
@@ -315,6 +318,9 @@ static int check_common
     {
 	P3 ("%s", "  nmethods:   number of ordering methods to try: ") ;
 	P3 (""ID"\n", nmethods) ;
+        amd_backup = (nmethods > 1) || (nmethods == 1 &&
+            (Common->method [0].ordering == CHOLMOD_METIS ||
+             Common->method [0].ordering == CHOLMOD_NESDIS)) ;
     }
     else
     {
@@ -335,7 +341,9 @@ static int check_common
 	P3 ("%s", "    Select best ordering tried.\n") ;
 	Common->method [0].ordering = CHOLMOD_GIVEN ;
 	Common->method [1].ordering = CHOLMOD_AMD ;
-	Common->method [2].ordering = CHOLMOD_METIS ;
+	Common->method [2].ordering = 
+            (Common->default_nesdis ? CHOLMOD_NESDIS : CHOLMOD_METIS) ;
+        amd_backup = FALSE ;
 #ifndef NPARTITION
 	nmethods = 3 ;
 #else
@@ -343,7 +351,6 @@ static int check_common
 #endif
     }
 
-    amd_printed = FALSE ;
     for (i = 0 ; i < nmethods ; i++)
     {
 	P3 ("    method "ID": ", i) ;
@@ -363,12 +370,12 @@ static int check_common
 
 	    case CHOLMOD_AMD:
 		P3 ("%s", "AMD (or COLAMD if factorizing AA')\n") ;
-		amd_printed = TRUE ;
+		amd_backup = FALSE ;
 		break ;
 
 	    case CHOLMOD_COLAMD:
 		P3 ("%s", "AMD if factorizing A, COLAMD if factorizing AA')\n");
-		amd_printed = TRUE ;
+		amd_backup = FALSE ;
 		break ;
 
 	    case CHOLMOD_METIS:
@@ -433,7 +440,7 @@ static int check_common
     }
 
     /* backup AMD results, if any */
-    if (!amd_printed)
+    if (amd_backup)
     {
 	P3 ("%s", "    backup method: ") ;
 	P3 ("%s", "AMD (or COLAMD if factorizing AA')\n") ;
@@ -579,7 +586,7 @@ int CHOLMOD(check_common)
 int CHOLMOD(print_common)
 (
     /* ---- input ---- */
-    char *name,		/* printed name of Common object */
+    const char *name,		/* printed name of Common object */
     /* --------------- */
     cholmod_common *Common
 )
@@ -590,6 +597,59 @@ int CHOLMOD(print_common)
 
 
 /* ========================================================================== */
+/* === cholmod_gpu_stats ==================================================== */
+/* ========================================================================== */
+
+/* Print CPU / GPU statistics.  If the timer is not installed, the times are
+   reported as zero, but this function still works.  Likewise, the function
+   still works if the GPU BLAS is not installed. */
+
+int CHOLMOD(gpu_stats)
+(
+    cholmod_common *Common      /* input */
+)
+{
+    double cpu_time, gpu_time ;
+    int print ;
+
+    RETURN_IF_NULL_COMMON (FALSE) ;
+    print = Common->print ;
+
+    P2 ("%s", "\nCHOLMOD GPU/CPU statistics:\n") ;
+    P2 ("SYRK  CPU calls %12.0f", (double) Common->CHOLMOD_CPU_SYRK_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_CPU_SYRK_TIME) ;
+    P2 ("      GPU calls %12.0f", (double) Common->CHOLMOD_GPU_SYRK_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_GPU_SYRK_TIME) ;
+    P2 ("GEMM  CPU calls %12.0f", (double) Common->CHOLMOD_CPU_GEMM_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_CPU_GEMM_TIME) ;
+    P2 ("      GPU calls %12.0f", (double) Common->CHOLMOD_GPU_GEMM_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_GPU_GEMM_TIME) ;
+    P2 ("POTRF CPU calls %12.0f", (double) Common->CHOLMOD_CPU_POTRF_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_CPU_POTRF_TIME) ;
+    P2 ("      GPU calls %12.0f", (double) Common->CHOLMOD_GPU_POTRF_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_GPU_POTRF_TIME) ;
+    P2 ("TRSM  CPU calls %12.0f", (double) Common->CHOLMOD_CPU_TRSM_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_CPU_TRSM_TIME) ;
+    P2 ("      GPU calls %12.0f", (double) Common->CHOLMOD_GPU_TRSM_CALLS) ;
+    P2 (" time %12.4e\n", Common->CHOLMOD_GPU_TRSM_TIME) ;
+
+    cpu_time = Common->CHOLMOD_CPU_SYRK_TIME + Common->CHOLMOD_CPU_TRSM_TIME +
+               Common->CHOLMOD_CPU_GEMM_TIME + Common->CHOLMOD_CPU_POTRF_TIME ;
+
+    gpu_time = Common->CHOLMOD_GPU_SYRK_TIME + Common->CHOLMOD_GPU_TRSM_TIME +
+               Common->CHOLMOD_GPU_GEMM_TIME + Common->CHOLMOD_GPU_POTRF_TIME ;
+
+    P2 ("time in the BLAS: CPU %12.4e", cpu_time) ;
+    P2 (" GPU %12.4e", gpu_time) ;
+    P2 (" total: %12.4e\n", cpu_time + gpu_time) ;
+
+    P2 ("assembly time %12.4e", Common->CHOLMOD_ASSEMBLE_TIME) ;
+    P2 ("  %12.4e\n", Common->CHOLMOD_ASSEMBLE_TIME2) ;
+    return (TRUE) ;
+}
+
+
+/* ========================================================================== */
 /* === cholmod_check_sparse ================================================= */
 /* ========================================================================== */
 
@@ -599,13 +659,13 @@ int CHOLMOD(print_common)
  * workspace: Iwork (nrow)
  */
 
-static UF_long check_sparse
+static SuiteSparse_long check_sparse
 (
     Int *Wi,
     Int print,
-    char *name,
+    const char *name,
     cholmod_sparse *A,
-    UF_long *nnzdiag,
+    SuiteSparse_long *nnzdiag,
     cholmod_common *Common
 )
 {
@@ -613,7 +673,7 @@ static UF_long check_sparse
     Int *Ap, *Ai, *Anz ;
     Int nrow, ncol, nzmax, sorted, packed, j, p, pend, i, nz, ilast,
 	space, init_print, dnz, count, xtype ;
-    char *type = "sparse" ;
+    const char *type = "sparse" ;
 
     /* ---------------------------------------------------------------------- */
     /* print header information */
@@ -679,8 +739,9 @@ static UF_long check_sparse
     switch (A->itype)
     {
 	case CHOLMOD_INT:     P4 ("%s", "\n  scalar types: int, ") ; break ;
-	case CHOLMOD_INTLONG: ERR ("mixed int/UF_long type unsupported") ;
-	case CHOLMOD_LONG:    P4 ("%s", "\n  scalar types: UF_long, ") ; break ;
+	case CHOLMOD_INTLONG: ERR ("mixed int/long type unsupported") ;
+	case CHOLMOD_LONG:    P4 ("%s", "\n  scalar types: SuiteSparse_long, ");
+        break ;
 	default:	      ERR ("unknown itype") ;
     }
 
@@ -857,7 +918,7 @@ int CHOLMOD(check_sparse)
     cholmod_common *Common
 )
 {
-    UF_long nnzdiag ;
+    SuiteSparse_long nnzdiag ;
     RETURN_IF_NULL_COMMON (FALSE) ;
     Common->status = CHOLMOD_OK ;
     return (check_sparse (NULL, 0, NULL, A, &nnzdiag, Common)) ;
@@ -868,12 +929,12 @@ int CHOLMOD(print_sparse)
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* sparse matrix to print */
-    char *name,		/* printed name of sparse matrix */
+    const char *name,	/* printed name of sparse matrix */
     /* --------------- */
     cholmod_common *Common
 )
 {
-    UF_long nnzdiag ;
+    SuiteSparse_long nnzdiag ;
     RETURN_IF_NULL_COMMON (FALSE) ;
     Common->status = CHOLMOD_OK ;
     return (check_sparse (NULL, Common->print, name, A, &nnzdiag, Common)) ;
@@ -889,14 +950,14 @@ int CHOLMOD(print_sparse)
 static int check_dense
 (
     Int print,
-    char *name,
+    const char *name,
     cholmod_dense *X,
     cholmod_common *Common
 )
 {
     double *Xx, *Xz ;
     Int i, j, d, nrow, ncol, nzmax, nz, init_print, count, xtype ;
-    char *type = "dense" ;
+    const char *type = "dense" ;
 
     /* ---------------------------------------------------------------------- */
     /* print header information */
@@ -1005,7 +1066,7 @@ int CHOLMOD(print_dense)
 (
     /* ---- input ---- */
     cholmod_dense *X,	/* dense matrix to print */
-    char *name,		/* printed name of dense matrix */
+    const char *name,	/* printed name of dense matrix */
     /* --------------- */
     cholmod_common *Common
 )
@@ -1035,15 +1096,15 @@ int CHOLMOD(print_dense)
 static int check_subset
 (
     Int *S,
-    UF_long len,
+    SuiteSparse_long len,
     size_t n,
     Int print,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
     Int i, k, init_print, count ;
-    char *type = "subset" ;
+    const char *type = "subset" ;
 
     init_print = print ;
 
@@ -1111,7 +1172,7 @@ int CHOLMOD(check_subset)
 (
     /* ---- input ---- */
     Int *Set,		/* Set [0:len-1] is a subset of 0:n-1.  Duplicates OK */
-    UF_long len,	/* size of Set (an integer array), or < 0 if 0:n-1 */
+    SuiteSparse_long len, /* size of Set (an integer array), or < 0 if 0:n-1 */
     size_t n,		/* 0:n-1 is valid range */
     /* --------------- */
     cholmod_common *Common
@@ -1127,9 +1188,9 @@ int CHOLMOD(print_subset)
 (
     /* ---- input ---- */
     Int *Set,		/* Set [0:len-1] is a subset of 0:n-1.  Duplicates OK */
-    UF_long len,	/* size of Set (an integer array), or < 0 if 0:n-1 */
+    SuiteSparse_long len, /* size of Set (an integer array), or < 0 if 0:n-1 */
     size_t n,		/* 0:n-1 is valid range */
-    char *name,		/* printed name of Set */
+    const char *name,	/* printed name of Set */
     /* --------------- */
     cholmod_common *Common
 )
@@ -1162,7 +1223,7 @@ static int check_perm
 (
     Int *Wi,
     Int print,
-    char *name,
+    const char *name,
     Int *Perm,
     size_t len,
     size_t n,
@@ -1171,7 +1232,7 @@ static int check_perm
 {
     Int *Flag ;
     Int i, k, mark, init_print, count ;
-    char *type = "perm" ;
+    const char *type = "perm" ;
 
     /* ---------------------------------------------------------------------- */
     /* checks that take O(1) time */
@@ -1300,7 +1361,7 @@ int CHOLMOD(print_perm)
     Int *Perm,		/* Perm [0:len-1] is a permutation of subset of 0:n-1 */
     size_t len,		/* size of Perm (an integer array) */
     size_t n,		/* 0:n-1 is valid range */
-    char *name,		/* printed name of Perm */
+    const char *name,	/* printed name of Perm */
     /* --------------- */
     cholmod_common *Common
 )
@@ -1346,12 +1407,12 @@ static int check_parent
     Int *Parent,
     size_t n,
     Int print,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
     Int j, p, init_print, count ;
-    char *type = "parent" ;
+    const char *type = "parent" ;
 
     init_print = print ;
 
@@ -1412,7 +1473,7 @@ int CHOLMOD(print_parent)
     /* ---- input ---- */
     Int *Parent,	/* Parent [0:n-1] is an elimination tree */
     size_t n,		/* size of Parent */
-    char *name,		/* printed name of Parent */
+    const char *name,	/* printed name of Parent */
     /* --------------- */
     cholmod_common *Common
 )
@@ -1431,7 +1492,7 @@ static int check_factor
 (
     Int *Wi,
     Int print,
-    char *name,
+    const char *name,
     cholmod_factor *L,
     cholmod_common *Common
 )
@@ -1443,7 +1504,8 @@ static int check_factor
 	count, precise, init_print, ilast, lnz, head, tail, jprev, plast,
 	jnext, examine_super, nsuper, s, k1, k2, psi, psend, psx, nsrow, nscol,
 	ps2, psxend, ssize, xsize, maxcsize, maxesize, nsrow2, jj, ii, xtype ;
-    char *type = "factor" ;
+    Int check_Lpx ;
+    const char *type = "factor" ;
 
     /* ---------------------------------------------------------------------- */
     /* print header information */
@@ -1483,8 +1545,9 @@ static int check_factor
     switch (L->itype)
     {
 	case CHOLMOD_INT:     P4 ("%s", "\n  scalar types: int, ") ; break ;
-	case CHOLMOD_INTLONG: ERR ("mixed int/UF_long type unsupported") ;
-	case CHOLMOD_LONG:    P4 ("%s", "\n  scalar types: UF_long, ") ; break ;
+	case CHOLMOD_INTLONG: ERR ("mixed int/long type unsupported") ;
+	case CHOLMOD_LONG:    P4 ("%s", "\n  scalar types: SuiteSparse_long, ");
+        break ;
 	default:	      ERR ("unknown itype") ;
     }
 
@@ -1827,7 +1890,12 @@ static int check_factor
 			Lpi [0], nsuper, Lpi [nsuper])) ;
 		ERR ("invalid: L->pi invalid") ;
 	    }
-	    if (Lpx [0] != 0 || MAX (1, Lpx [nsuper]) != xsize)
+
+            /* If Lpx [0] is 123456, then supernodes are present but
+               Lpx [0...nsuper] is not defined, so don't check it.  This is
+               used in the non-GPU accelerated SPQR */
+            check_Lpx = (Lpx [0] != 123456) ;
+	    if (check_Lpx && (Lpx [0] != 0 || MAX (1, Lpx[nsuper]) != xsize))
 	    {
 		ERR ("invalid: L->px invalid") ;
 	    }
@@ -1839,12 +1907,16 @@ static int check_factor
 		k2 = Super [s+1] ;
 		psi = Lpi [s] ;
 		psend = Lpi [s+1] ;
-		psx = Lpx [s] ;
 		nsrow = psend - psi ;
 		nscol = k2 - k1 ;
 		nsrow2 = nsrow - nscol ;
 		ps2 = psi + nscol ;
-		psxend = Lpx [s+1] ;
+
+                if (check_Lpx)
+                {
+                    psx = Lpx [s] ;
+                    psxend = Lpx [s+1] ;
+                }
 
 		ETC (s == nsuper-1, count, 4) ;
 
@@ -1852,11 +1924,15 @@ static int check_factor
 		P4 ("col "ID" ", k1) ;
 		P4 ("to "ID". ", k2-1) ;
 		P4 ("nz in first col: "ID".\n", nsrow) ;
-		P4 ("  values start "ID", ", psx) ;
-		P4 ("end "ID"\n", psxend) ;
+
+                if (check_Lpx)
+                {
+                    P4 ("  values start "ID", ", psx) ;
+                    P4 ("end "ID"\n", psxend) ;
+                }
 
 		if (k1 > k2 || k1 < 0 || k2 > n || nsrow < nscol || nsrow2 < 0
-		    || psxend - psx != nsrow * nscol)
+                    || (check_Lpx && psxend - psx != nsrow * nscol))
 		{
 		    ERR ("invalid supernode") ;
 		}
@@ -1963,7 +2039,7 @@ int CHOLMOD(print_factor)
 (
     /* ---- input ---- */
     cholmod_factor *L,	/* factor to print */
-    char *name,		/* printed name of factor */
+    const char *name,	/* printed name of factor */
     /* --------------- */
     cholmod_common *Common
 )
@@ -1983,7 +2059,7 @@ int CHOLMOD(print_factor)
 static int check_triplet
 (
     Int print,
-    char *name,
+    const char *name,
     cholmod_triplet *T,
     cholmod_common *Common
 )
@@ -1991,7 +2067,7 @@ static int check_triplet
     double *Tx, *Tz ;
     Int *Ti, *Tj ;
     Int i, j, p, nrow, ncol, nzmax, nz, xtype, init_print, count ;
-    char *type = "triplet" ;
+    const char *type = "triplet" ;
 
     /* ---------------------------------------------------------------------- */
     /* print header information */
@@ -2045,8 +2121,9 @@ static int check_triplet
     switch (T->itype)
     {
 	case CHOLMOD_INT:     P4 ("%s", "\n  scalar types: int, ") ; break ;
-	case CHOLMOD_INTLONG: ERR ("mixed int/UF_long type unsupported") ;
-	case CHOLMOD_LONG:    P4 ("%s", "\n  scalar types: UF_long, ") ; break ;
+	case CHOLMOD_INTLONG: ERR ("mixed int/long type unsupported") ;
+	case CHOLMOD_LONG:    P4 ("%s", "\n  scalar types: SuiteSparse_long, ");
+        break ;
 	default:	      ERR ("unknown itype") ;
     }
 
@@ -2150,7 +2227,7 @@ int CHOLMOD(print_triplet)
 (
     /* ---- input ---- */
     cholmod_triplet *T,	/* triplet matrix to print */
-    char *name,		/* printed name of triplet matrix */
+    const char *name,	/* printed name of triplet matrix */
     /* --------------- */
     cholmod_common *Common
 )
@@ -2178,17 +2255,15 @@ int CHOLMOD(dump_malloc) = -1 ;
 /* === cholmod_dump_init ==================================================== */
 /* ========================================================================== */
 
-void CHOLMOD(dump_init) (char *s, cholmod_common *Common)
+void CHOLMOD(dump_init) (const char *s, cholmod_common *Common)
 {
+    int i = 0 ;
     FILE *f ;
     f = fopen ("debug", "r") ;
-    if (f == NULL)
-    {
-	CHOLMOD(dump) = 0 ;
-    }
-    else
+    CHOLMOD(dump) = 0 ;
+    if (f != NULL)
     {
-	fscanf (f, "%d", &CHOLMOD(dump)) ;
+	i = fscanf (f, "%d", &CHOLMOD(dump)) ;
 	fclose (f) ;
     }
     PRINT1 (("%s: cholmod_dump_init, D = %d\n", s, CHOLMOD(dump))) ;
@@ -2199,15 +2274,17 @@ void CHOLMOD(dump_init) (char *s, cholmod_common *Common)
 /* === cholmod_dump_sparse ================================================== */
 /* ========================================================================== */
 
-UF_long CHOLMOD(dump_sparse)	/* returns nnz (diag (A)) or EMPTY if error */
+/* returns nnz (diag (A)) or EMPTY if error */
+
+SuiteSparse_long CHOLMOD(dump_sparse)
 (
     cholmod_sparse *A,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
     Int *Wi ;
-    UF_long nnzdiag ;
+    SuiteSparse_long nnzdiag ;
     Int ok ;
 
     if (CHOLMOD(dump) < -1)
@@ -2232,7 +2309,7 @@ UF_long CHOLMOD(dump_sparse)	/* returns nnz (diag (A)) or EMPTY if error */
 int CHOLMOD(dump_factor)
 (
     cholmod_factor *L,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
@@ -2262,7 +2339,7 @@ int CHOLMOD(dump_perm)
     Int *Perm,
     size_t len,
     size_t n,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
@@ -2289,7 +2366,7 @@ int CHOLMOD(dump_perm)
 int CHOLMOD(dump_dense)
 (
     cholmod_dense *X,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
@@ -2310,7 +2387,7 @@ int CHOLMOD(dump_dense)
 int CHOLMOD(dump_triplet)
 (
     cholmod_triplet *T,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
@@ -2333,7 +2410,7 @@ int CHOLMOD(dump_subset)
     Int *S,
     size_t len,
     size_t n,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
@@ -2355,7 +2432,7 @@ int CHOLMOD(dump_parent)
 (
     Int *Parent,
     size_t n,
-    char *name,
+    const char *name,
     cholmod_common *Common
 )
 {
@@ -2375,12 +2452,13 @@ int CHOLMOD(dump_parent)
 
 void CHOLMOD(dump_real)
 (
-    char *name, Real *X, UF_long nrow, UF_long ncol, int lower, int xentry,
-    cholmod_common *Common
+    const char *name,
+    Real *X, SuiteSparse_long nrow, SuiteSparse_long ncol, int lower,
+    int xentry, cholmod_common *Common
 )
 {
     /* dump an nrow-by-ncol real dense matrix */
-    UF_long i, j ;
+    SuiteSparse_long i, j ;
     double x, z ;
     if (CHOLMOD(dump) < -1)
     {
@@ -2422,7 +2500,7 @@ void CHOLMOD(dump_real)
 
 void CHOLMOD(dump_super)
 (
-    UF_long s,
+    SuiteSparse_long s,
     Int *Super, Int *Lpi, Int *Ls, Int *Lpx, double *Lx,
     int xentry,
     cholmod_common *Common
@@ -2466,9 +2544,14 @@ void CHOLMOD(dump_super)
 /* === cholmod_dump_mem ===================================================== */
 /* ========================================================================== */
 
-int CHOLMOD(dump_mem) (char *where, UF_long should, cholmod_common *Common)
+int CHOLMOD(dump_mem)
+(
+    const char *where,
+    SuiteSparse_long should,
+    cholmod_common *Common
+)
 {
-    UF_long diff = should - Common->memory_inuse ;
+    SuiteSparse_long diff = should - Common->memory_inuse ;
     if (diff != 0)
     {
 	PRINT0 (("mem: %-15s peak %10g inuse %10g should %10g\n",
@@ -2491,12 +2574,12 @@ int CHOLMOD(dump_mem) (char *where, UF_long should, cholmod_common *Common)
 
 int CHOLMOD(dump_partition)
 (
-    UF_long n,
+    SuiteSparse_long n,
     Int *Cp,
     Int *Ci,
     Int *Cnw,
     Int *Part,
-    UF_long sepsize,
+    SuiteSparse_long sepsize,
     cholmod_common *Common
 )
 {
@@ -2553,7 +2636,7 @@ int CHOLMOD(dump_partition)
 /* === cholmod_dump_work ==================================================== */
 /* ========================================================================== */
 
-int CHOLMOD(dump_work) (int flag, int head, UF_long wsize,
+int CHOLMOD(dump_work) (int flag, int head, SuiteSparse_long wsize,
     cholmod_common *Common)
 {
     double *W ;
diff --git a/CHOLMOD/Check/cholmod_read.c b/CHOLMOD/Check/cholmod_read.c
index 089f524..144fd60 100644
--- a/CHOLMOD/Check/cholmod_read.c
+++ b/CHOLMOD/Check/cholmod_read.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Check Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Read a sparse matrix in triplet or dense form.  A triplet matrix can be
diff --git a/CHOLMOD/Check/cholmod_write.c b/CHOLMOD/Check/cholmod_write.c
index 0c2d83f..eb578f9 100644
--- a/CHOLMOD/Check/cholmod_write.c
+++ b/CHOLMOD/Check/cholmod_write.c
@@ -40,7 +40,7 @@
  * otherwise.
  */
 
-static int include_comments (FILE *f, char *comments)
+static int include_comments (FILE *f, const char *comments)
 {
     FILE *cf = NULL ;
     char buffer [MAXLINE] ;
@@ -354,7 +354,7 @@ int CHOLMOD(write_sparse)
     FILE *f,		    /* file to write to, must already be open */
     cholmod_sparse *A,	    /* matrix to print */
     cholmod_sparse *Z,	    /* optional matrix with pattern of explicit zeros */
-    char *comments,	    /* optional filename of comments to include */
+    const char *comments,    /* optional filename of comments to include */
     /* --------------- */
     cholmod_common *Common
 )
@@ -657,7 +657,7 @@ int CHOLMOD(write_dense)
     /* ---- input ---- */
     FILE *f,		    /* file to write to, must already be open */
     cholmod_dense *X,	    /* matrix to print */
-    char *comments,	    /* optional filename of comments to include */
+    const char *comments,    /* optional filename of comments to include */
     /* --------------- */
     cholmod_common *Common
 )
diff --git a/CHOLMOD/Cholesky/License.txt b/CHOLMOD/Cholesky/License.txt
index b444856..800ac5e 100644
--- a/CHOLMOD/Cholesky/License.txt
+++ b/CHOLMOD/Cholesky/License.txt
@@ -1,6 +1,6 @@
 CHOLMOD/Cholesky module, Copyright (C) 2005-2006, Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Cholesky module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Cholesky/cholmod_amd.c b/CHOLMOD/Cholesky/cholmod_amd.c
index 09f8ec1..f15d07b 100644
--- a/CHOLMOD/Cholesky/cholmod_amd.c
+++ b/CHOLMOD/Cholesky/cholmod_amd.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD interface to the AMD ordering routine.  Orders A if the matrix is
@@ -169,17 +168,6 @@ int CHOLMOD(amd)
 	Control [AMD_AGGRESSIVE] = Common->method [Common->current].aggressive ;
     }
 
-    /* AMD_2 does not use amd_malloc and amd_free, but set these pointers just
-     * be safe. */
-    amd_malloc = Common->malloc_memory ;
-    amd_free = Common->free_memory ;
-    amd_calloc = Common->calloc_memory ;
-    amd_realloc = Common->realloc_memory ;
-
-    /* AMD_2 doesn't print anything either, but future versions might,
-     * so set the amd_printf pointer too. */
-    amd_printf = Common->print_function ;
-
 #ifdef LONG
     amd_l2 (n, C->p,  C->i, Len, C->nzmax, cnz, Nv, Next, Perm, Head, Elen,
 	    Degree, Wi, Control, Info) ;
diff --git a/CHOLMOD/Cholesky/cholmod_analyze.c b/CHOLMOD/Cholesky/cholmod_analyze.c
index 19ce5b4..62f8606 100644
--- a/CHOLMOD/Cholesky/cholmod_analyze.c
+++ b/CHOLMOD/Cholesky/cholmod_analyze.c
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Order and analyze a matrix (either simplicial or supernodal), in prepartion
@@ -139,7 +138,31 @@ cholmod_factor *CHOLMOD(analyze)
     cholmod_common *Common
 )
 {
-    return (CHOLMOD(analyze_p) (A, NULL, NULL, 0, Common)) ;
+    return (CHOLMOD(analyze_p2) (TRUE, A, NULL, NULL, 0, Common)) ;
+}
+
+
+/* ========================================================================== */
+/* === cholmod_analyze_p ==================================================== */
+/* ========================================================================== */
+
+/* Orders and analyzes A, AA', PAP', PAA'P', FF', or PFF'P and returns a
+ * symbolic factor that can later be passed to cholmod_factorize, where
+ * F = A(:,fset) if fset is not NULL and A->stype is zero.
+ * UserPerm is tried if non-NULL.  */
+
+cholmod_factor *CHOLMOD(analyze_p)
+(
+    /* ---- input ---- */
+    cholmod_sparse *A,	/* matrix to order and analyze */
+    Int *UserPerm,	/* user-provided permutation, size A->nrow */
+    Int *fset,		/* subset of 0:(A->ncol)-1 */
+    size_t fsize,	/* size of fset */
+    /* --------------- */
+    cholmod_common *Common
+)
+{
+    return (CHOLMOD(analyze_p2) (TRUE, A, UserPerm, fset, fsize, Common)) ;
 }
 
 
@@ -302,7 +325,7 @@ int CHOLMOD(analyze_ordering)
     Int *Post,		/* size n, postordering of elimination tree */
     Int *ColCount,	/* size n, nnz in each column of L */
     /* ---- workspace  */
-    Int *First,		/* size nworkspace for cholmod_postorder */
+    Int *First,		/* size n workspace for cholmod_postorder */
     Int *Level,		/* size n workspace for cholmod_postorder */
     /* --------------- */
     cholmod_common *Common
@@ -373,17 +396,17 @@ int CHOLMOD(analyze_ordering)
 
 
 /* ========================================================================== */
-/* === cholmod_analyze_p ==================================================== */
+/* === cholmod_analyze_p2 =================================================== */
 /* ========================================================================== */
 
-/* Orders and analyzes A, AA', PAP', PAA'P', FF', or PFF'P and returns a
- * symbolic factor that can later be passed to cholmod_factorize, where
- * F = A(:,fset) if fset is not NULL and A->stype is zero.
- * UserPerm is tried if non-NULL.  */
+/* Ordering and analysis for sparse Cholesky or sparse QR.  */
 
-cholmod_factor *CHOLMOD(analyze_p)
+cholmod_factor *CHOLMOD(analyze_p2)
 (
     /* ---- input ---- */
+    int for_whom,       /* FOR_SPQR     (0): for SPQR but not GPU-accelerated
+                           FOR_CHOLESKY (1): for Cholesky (GPU or not)
+                           FOR_SPQRGPU  (2): for SPQR with GPU acceleration */
     cholmod_sparse *A,	/* matrix to order and analyze */
     Int *UserPerm,	/* user-provided permutation, size A->nrow */
     Int *fset,		/* subset of 0:(A->ncol)-1 */
@@ -398,6 +421,7 @@ cholmod_factor *CHOLMOD(analyze_p)
     cholmod_factor *L ;
     Int k, n, ordering, method, nmethods, status, default_strategy, ncol, uncol,
 	skip_analysis, skip_best ;
+    Int amd_backup ;
     size_t s ;
     int ok = TRUE ;
 
@@ -429,27 +453,43 @@ cholmod_factor *CHOLMOD(analyze_p)
     skip_best = FALSE ;
     nmethods = MIN (Common->nmethods, CHOLMOD_MAXMETHODS) ;
     nmethods = MAX (0, nmethods) ;
-    PRINT1 (("nmethods "ID"\n", nmethods)) ;
+
+#ifndef NDEBUG
+    PRINT1 (("cholmod_analyze_p2 :: nmethods "ID"\n", nmethods)) ;
+    for (method = 0 ; method < nmethods ; method++)
+    {
+        PRINT1 (("  "ID": ordering "ID"\n",     
+            method, Common->method [method].ordering)) ;
+    }
+#endif
 
     default_strategy = (nmethods == 0) ;
     if (default_strategy)
     {
-	/* default strategy: try UserPerm, if given.  Try AMD for A, or COLAMD
+	/* default strategy: try UserPerm, if given.  Try AMD for A, or AMD
 	 * to order A*A'.  Try METIS for the symmetric case only if AMD reports
-	 * a high degree of fill-in and flop count.  Always try METIS for the
-	 * unsymmetric case.  METIS is not tried if the Partition Module
-	 * isn't installed.   If Common->default_nesdis is TRUE, then NESDIS
-	 * is used as the 3rd ordering instead. */
+         * a high degree of fill-in and flop count.  METIS is not tried if the
+         * Partition Module isn't installed.   If Common->default_nesdis is
+         * TRUE, then NESDIS is used as the 3rd ordering instead. */
 	Common->method [0].ordering = CHOLMOD_GIVEN ;/* skip if UserPerm NULL */
 	Common->method [1].ordering = CHOLMOD_AMD ;
 	Common->method [2].ordering = 
 	    (Common->default_nesdis ? CHOLMOD_NESDIS : CHOLMOD_METIS) ;
+        amd_backup = FALSE ;
 #ifndef NPARTITION
 	nmethods = 3 ;
 #else
 	nmethods = 2 ;
 #endif
     }
+    else
+    {
+        /* If only METIS and NESDIS are selected, or if 2 or more methods are
+         * being tried, then enable AMD backup */
+        amd_backup = (nmethods > 1) || (nmethods == 1 &&
+            (Common->method [0].ordering == CHOLMOD_METIS ||
+             Common->method [0].ordering == CHOLMOD_NESDIS)) ;
+    }
 
 #ifdef NSUPERNODAL
     /* CHOLMOD Supernodal module not installed, just do simplicial analysis */
@@ -543,7 +583,7 @@ cholmod_factor *CHOLMOD(analyze_p)
 	if (method == nmethods)
 	{
 	    /* All methods failed: backup to AMD */
-	    if (Common->selected == EMPTY && !default_strategy)
+	    if (Common->selected == EMPTY && amd_backup)
 	    {
 		PRINT1 (("All methods requested failed: backup to AMD\n")) ;
 		ordering = CHOLMOD_AMD ;
@@ -604,6 +644,7 @@ cholmod_factor *CHOLMOD(analyze_p)
 	    /* AMD ordering of A, A*A', or A(:,f)*A(:,f)' */
 	    /* -------------------------------------------------------------- */
 
+            amd_backup = FALSE ;    /* no need to try AMD twice ... */
 	    CHOLMOD(amd) (A, fset, fsize, Perm, Common) ;
 	    skip_analysis = TRUE ;
 
@@ -759,7 +800,7 @@ cholmod_factor *CHOLMOD(analyze_p)
 		 * better (this heuristic is based on tests on all symmetric
 		 * positive definite matrices in the UF sparse matrix
 		 * collection, and it works well across a wide range of
-		 * problems).  METIS can take much more time and AMD. */
+		 * problems).  METIS can take much more time than AMD. */
 		break ;
 	    }
 	}
@@ -782,7 +823,12 @@ cholmod_factor *CHOLMOD(analyze_p)
 	 * than CHOLMOD_OUT_OF_MEMORY, since the former implies something may
 	 * be wrong with the user's input.  CHOLMOD_OUT_OF_MEMORY is simply an
 	 * indication of lack of resources. */
-	ASSERT (status < CHOLMOD_OK) ;
+        if (status >= CHOLMOD_OK)
+        {
+            /* this can occur if nmethods = 1, ordering = CHOLMOD_GIVEN,
+               but UserPerm is NULL */
+            status = CHOLMOD_INVALID ;
+        }
 	ERROR (status, "all methods failed") ;
 	FREE_WORKSPACE_AND_RETURN ;
     }
@@ -879,7 +925,7 @@ cholmod_factor *CHOLMOD(analyze_p)
 		&A1, &A2, &S, &F, Common) ;
 
 	/* workspace: Flag (nrow), Head (nrow), Iwork (5*nrow) */
-	CHOLMOD(super_symbolic) (S, F, Lparent, L, Common) ;
+	CHOLMOD(super_symbolic2) (for_whom, S, F, Lparent, L, Common) ;
 	PRINT1 (("status %d\n", Common->status)) ;
 
 	CHOLMOD(free_sparse) (&A1, Common) ;
diff --git a/CHOLMOD/Cholesky/cholmod_colamd.c b/CHOLMOD/Cholesky/cholmod_colamd.c
index 1f20101..34046bc 100644
--- a/CHOLMOD/Cholesky/cholmod_colamd.c
+++ b/CHOLMOD/Cholesky/cholmod_colamd.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD interface to the COLAMD ordering routine (version 2.4 or later).
@@ -119,9 +118,6 @@ int CHOLMOD(colamd)
     /* allocate COLAMD workspace */
     /* ---------------------------------------------------------------------- */
 
-    /* colamd_printf is only available in colamd v2.4 or later */
-    colamd_printf = Common->print_function ;
-
     C = CHOLMOD(allocate_sparse) (ncol, nrow, alen, TRUE, TRUE, 0,
 	    CHOLMOD_PATTERN, Common) ;
 
diff --git a/CHOLMOD/Cholesky/cholmod_etree.c b/CHOLMOD/Cholesky/cholmod_etree.c
index 592cba8..0dcb85f 100644
--- a/CHOLMOD/Cholesky/cholmod_etree.c
+++ b/CHOLMOD/Cholesky/cholmod_etree.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Compute the elimination tree of A or A'*A
diff --git a/CHOLMOD/Cholesky/cholmod_factorize.c b/CHOLMOD/Cholesky/cholmod_factorize.c
index 15544d3..884fdc7 100644
--- a/CHOLMOD/Cholesky/cholmod_factorize.c
+++ b/CHOLMOD/Cholesky/cholmod_factorize.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Computes the numerical factorization of a symmetric matrix.  The primary
diff --git a/CHOLMOD/Cholesky/cholmod_postorder.c b/CHOLMOD/Cholesky/cholmod_postorder.c
index d9b44c5..f66b1df 100644
--- a/CHOLMOD/Cholesky/cholmod_postorder.c
+++ b/CHOLMOD/Cholesky/cholmod_postorder.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Compute the postorder of a tree. */
@@ -129,9 +128,9 @@ static Int dfs		/* return the new value of k */
  * permutation if Parent is a component tree.
  *
  * An optional node weight can be given.  When starting a postorder at node j,
- * the children of j are ordered in decreasing order of their weight.
+ * the children of j are ordered in increasing order of their weight.
  * If no weights are given (Weight is NULL) then children are ordered in
- * decreasing order of their node number.  The weight of a node must be in the
+ * increasing order of their node number.  The weight of a node must be in the
  * range 0 to n-1.  Weights outside that range are silently converted to that
  * range (weights < 0 are treated as zero, and weights >= n are treated as n-1).
  *
@@ -139,7 +138,7 @@ static Int dfs		/* return the new value of k */
  * workspace: Head (n), Iwork (2*n)
  */
 
-UF_long CHOLMOD(postorder)	/* return # of nodes postordered */
+SuiteSparse_long CHOLMOD(postorder)	/* return # of nodes postordered */
 (
     /* ---- input ---- */
     Int *Parent,	/* size n. Parent [j] = p if p is the parent of j */
diff --git a/CHOLMOD/Cholesky/cholmod_rcond.c b/CHOLMOD/Cholesky/cholmod_rcond.c
index 69f7412..f261e31 100644
--- a/CHOLMOD/Cholesky/cholmod_rcond.c
+++ b/CHOLMOD/Cholesky/cholmod_rcond.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Return a rough estimate of the reciprocal of the condition number:
diff --git a/CHOLMOD/Cholesky/cholmod_resymbol.c b/CHOLMOD/Cholesky/cholmod_resymbol.c
index c1c0018..5b39cd9 100644
--- a/CHOLMOD/Cholesky/cholmod_resymbol.c
+++ b/CHOLMOD/Cholesky/cholmod_resymbol.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Recompute the symbolic pattern of L.  Entries not in the symbolic pattern
diff --git a/CHOLMOD/Cholesky/cholmod_rowcolcounts.c b/CHOLMOD/Cholesky/cholmod_rowcolcounts.c
index 62d5770..5b0290d 100644
--- a/CHOLMOD/Cholesky/cholmod_rowcolcounts.c
+++ b/CHOLMOD/Cholesky/cholmod_rowcolcounts.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Compute the row and column counts of the Cholesky factor L of the matrix
diff --git a/CHOLMOD/Cholesky/cholmod_rowfac.c b/CHOLMOD/Cholesky/cholmod_rowfac.c
index 255bb9b..94ba960 100644
--- a/CHOLMOD/Cholesky/cholmod_rowfac.c
+++ b/CHOLMOD/Cholesky/cholmod_rowfac.c
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Full or incremental numerical LDL' or LL' factorization (simplicial, not
@@ -357,12 +356,47 @@ int CHOLMOD(row_subtree)
 
 
 /* ========================================================================== */
+/* === cholmod_lsolve_pattern =============================================== */
+/* ========================================================================== */
+
+/* Compute the nonzero pattern of Y=L\B.  L must be simplicial, and B
+ * must be a single sparse column vector with B->stype = 0.  The values of
+ * B are not used; it just specifies a nonzero pattern.  The pattern of
+ * Y is not sorted, but is in topological order instead (suitable for a
+ * sparse forward/backsolve).
+ */
+
+int CHOLMOD(lsolve_pattern)
+(
+    /* ---- input ---- */
+    cholmod_sparse *B,	/* sparse right-hand-side (a single sparse column) */
+    cholmod_factor *L,	/* the factor L from which parent(i) is derived */
+    /* ---- output --- */
+    cholmod_sparse *Yset,   /* pattern of Y=L\B, n-by-1 with Y->nzmax >= n */
+    /* --------------- */
+    cholmod_common *Common
+)
+{
+    size_t krow ;
+    RETURN_IF_NULL (B, FALSE) ;
+    krow = B->nrow ;
+    return (CHOLMOD(row_lsubtree) (B, NULL, 0, krow, L, Yset, Common)) ;
+}
+
+
+/* ========================================================================== */
 /* === cholmod_row_lsubtree ================================================= */
 /* ========================================================================== */
 
 /* Identical to cholmod_row_subtree, except that the elimination tree is
  * obtained from L itself, as the first off-diagonal entry in each column.
- * L must be simplicial, not supernodal */
+ * L must be simplicial, not supernodal.
+ *
+ * If krow = A->nrow, then A must be a single sparse column vector, (A->stype
+ * must be zero), and the nonzero pattern of x=L\b is computed, where b=A(:,0)
+ * is the single sparse right-hand-side.  The inputs Fi and fnz are ignored.
+ * See CHOLMOD(lsolve_pattern) above for a simpler interface for this case.
+ */
 
 int CHOLMOD(row_lsubtree)
 (
@@ -373,14 +407,14 @@ int CHOLMOD(row_lsubtree)
     size_t krow,	/* row k of L */
     cholmod_factor *L,	/* the factor L from which parent(i) is derived */
     /* ---- output --- */
-    cholmod_sparse *R,	/* pattern of L(k,:), 1-by-n with R->nzmax >= n */
+    cholmod_sparse *R,	/* pattern of L(k,:), n-by-1 with R->nzmax >= n */
     /* --------------- */
     cholmod_common *Common
 )
 {
     Int *Rp, *Stack, *Flag, *Ap, *Ai, *Anz, *Lp, *Li, *Lnz ;
     Int p, pend, parent, t, stype, nrow, k, pf, packed, sorted, top, len, i,
-	mark ;
+	mark, ka ;
 
     /* ---------------------------------------------------------------------- */
     /* check inputs */
@@ -393,17 +427,46 @@ int CHOLMOD(row_lsubtree)
     RETURN_IF_XTYPE_INVALID (A, CHOLMOD_PATTERN, CHOLMOD_ZOMPLEX, FALSE) ;
     RETURN_IF_XTYPE_INVALID (R, CHOLMOD_PATTERN, CHOLMOD_ZOMPLEX, FALSE) ;
     RETURN_IF_XTYPE_INVALID (L, CHOLMOD_REAL, CHOLMOD_ZOMPLEX, FALSE) ;
+
+    nrow = A->nrow ;
     stype = A->stype ;
-    if (stype == 0)
+    if (stype < 0)
     {
-	RETURN_IF_NULL (Fi, FALSE) ;
+	/* symmetric lower triangular form not supported */
+	ERROR (CHOLMOD_INVALID, "symmetric lower not supported") ;
+	return (FALSE) ;
     }
-    if (krow >= A->nrow)
+
+    if (krow > nrow)
     {
-	ERROR (CHOLMOD_INVALID, "lsubtree: k invalid") ;
-	return (FALSE) ;
+        ERROR (CHOLMOD_INVALID, "lsubtree: krow invalid") ;
+        return (FALSE) ;
     }
-    if (R->ncol != 1 || A->nrow != R->nrow || A->nrow > R->nzmax)
+    else if (krow == nrow)
+    {
+        /* find pattern of x=L\b where b=A(:,0) */
+        k = nrow ;      /* compute all of the result; don't stop in SUBTREE */
+        ka = 0 ;        /* use column A(:,0) */
+        if (stype != 0 || A->ncol != 1)
+        {
+            /* A must be unsymmetric (it's a single sparse column vector) */
+            ERROR (CHOLMOD_INVALID, "lsubtree: A invalid") ;
+            return (FALSE) ;
+        }
+    }
+    else
+    {
+        /* find pattern of L(k,:) using A(:,k) and Fi if A unsymmetric */
+        k = krow ;      /* which row of L to compute */
+        ka = k ;        /* which column of A to use */
+        if (stype == 0)
+        {
+            RETURN_IF_NULL (Fi, FALSE) ;
+        }
+    }
+
+    if (R->ncol != 1 || nrow != R->nrow || nrow > R->nzmax ||
+        ((krow == nrow || stype != 0) && ka >= A->ncol))
     {
 	ERROR (CHOLMOD_INVALID, "lsubtree: R invalid") ;
 	return (FALSE) ;
@@ -419,7 +482,6 @@ int CHOLMOD(row_lsubtree)
     /* allocate workspace */
     /* ---------------------------------------------------------------------- */
 
-    nrow = A->nrow ;
     CHOLMOD(allocate_work) (nrow, 0, 0, Common) ;
     if (Common->status < CHOLMOD_OK)
     {
@@ -431,20 +493,12 @@ int CHOLMOD(row_lsubtree)
     /* get inputs */
     /* ---------------------------------------------------------------------- */
 
-    if (stype < 0)
-    {
-	/* symmetric lower triangular form not supported */
-	ERROR (CHOLMOD_INVALID, "symmetric lower not supported") ;
-	return (FALSE) ;
-    }
-
     Ap = A->p ;
     Ai = A->i ;
     Anz = A->nz ;
     packed = A->packed ;
     sorted = A->sorted ;
 
-    k = krow ;
     Stack = R->i ;
 
     Lp = L->p ;
@@ -463,16 +517,19 @@ int CHOLMOD(row_lsubtree)
     /* ---------------------------------------------------------------------- */
 
     top = nrow ;		/* Stack is empty */
-    Flag [k] = mark ;		/* do not include diagonal entry in Stack */
+    if (k < nrow)
+    {
+        Flag [k] = mark ;       /* do not include diagonal entry in Stack */
+    }
 
 #define SCATTER			/* do not scatter numerical values */
 #define PARENT(i) (Lnz [i] > 1) ? (Li [Lp [i] + 1]) : EMPTY
 
-    if (stype != 0)
+    if (krow == nrow || stype != 0)
     {
 	/* scatter kth col of triu (A), get pattern L(k,:) */
-	p = Ap [k] ;
-	pend = (packed) ? (Ap [k+1]) : (p + Anz [k]) ;
+	p = Ap [ka] ;
+	pend = (packed) ? (Ap [ka+1]) : (p + Anz [ka]) ;
 	SUBTREE ;
     }
     else
@@ -529,7 +586,7 @@ int CHOLMOD(rowfac)
     cholmod_common *Common
 )
 {
-    return (CHOLMOD(rowfac_mask) (A, F, beta, kstart, kend, NULL, NULL, L,
+    return (CHOLMOD(rowfac_mask2) (A, F, beta, kstart, kend, NULL, 0, NULL, L,
 	Common)) ;
 }
 
@@ -556,6 +613,35 @@ int CHOLMOD(rowfac_mask)
     cholmod_common *Common
 )
 {
+    Int maskmark = 0 ;
+    return (CHOLMOD(rowfac_mask2) (A, F, beta, kstart, kend, mask, maskmark,
+        RLinkUp, L, Common)) ;
+}
+
+/* ========================================================================== */
+/* === cholmod_rowfac_mask2 ================================================= */
+/* ========================================================================== */
+
+/* This is meant for use in LPDASA only. */
+
+int CHOLMOD(rowfac_mask2)
+(
+    /* ---- input ---- */
+    cholmod_sparse *A,	/* matrix to factorize */
+    cholmod_sparse *F,	/* used for A*A' case only. F=A' or A(:,f)' */
+    double beta [2],	/* factorize beta*I+A or beta*I+AA' */
+    size_t kstart,	/* first row to factorize */
+    size_t kend,	/* last row to factorize is kend-1 */
+    Int *mask,		/* size A->nrow. if mask[i] >= maskmark row i is set
+                           to zero */
+    Int maskmark,       /* for mask [i] test */
+    Int *RLinkUp,	/* size A->nrow. link list of rows to compute */
+    /* ---- in/out --- */
+    cholmod_factor *L,
+    /* --------------- */
+    cholmod_common *Common
+)
+{
     Int n ;
     size_t s ;
     int ok = TRUE ;
@@ -659,17 +745,17 @@ int CHOLMOD(rowfac_mask)
 	{
 	    case CHOLMOD_REAL:
 		ok = r_cholmod_rowfac_mask (A, F, beta, kstart, kend,
-		    mask, RLinkUp, L, Common) ;
+		    mask, maskmark, RLinkUp, L, Common) ;
 		break ;
 
 	    case CHOLMOD_COMPLEX:
 		ok = c_cholmod_rowfac_mask (A, F, beta, kstart, kend,
-		    mask, RLinkUp, L, Common) ;
+		    mask, maskmark, RLinkUp, L, Common) ;
 		break ;
 
 	    case CHOLMOD_ZOMPLEX:
 		ok = z_cholmod_rowfac_mask (A, F, beta, kstart, kend,
-		    mask, RLinkUp, L, Common) ;
+		    mask, maskmark, RLinkUp, L, Common) ;
 		break ;
 	}
     }
diff --git a/CHOLMOD/Cholesky/cholmod_solve.c b/CHOLMOD/Cholesky/cholmod_solve.c
index b51fc80..df0c5d4 100644
--- a/CHOLMOD/Cholesky/cholmod_solve.c
+++ b/CHOLMOD/Cholesky/cholmod_solve.c
@@ -3,24 +3,24 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
-/* Solve one of the following systems:
+/* Solve one of the following systems.  D is identity for an LL' factorization,
+ * in which the D operation is skipped:
  *
- *	Ax=b	    0: CHOLMOD_A	also applies the permutation L->Perm
- *	LDL'x=b	    1: CHOLMOD_LDLt	does not apply L->Perm
- *	LDx=b	    2: CHOLMOD_LD
- *	DL'x=b	    3: CHOLMOD_DLt
- *	Lx=b	    4: CHOLMOD_L
- *	L'x=b	    5: CHOLMOD_Lt
- *	Dx=b	    6: CHOLMOD_D
- *	x=Pb	    7: CHOLMOD_P	apply a permutation (P is L->Perm)
- *	x=P'b	    8: CHOLMOD_Pt	apply an inverse permutation
+ *      Ax=b        0: CHOLMOD_A     x = P' * (L' \ (D \ (L \ (P * b))))
+ *      LDL'x=b     1: CHOLMOD_LDLt  x =      (L' \ (D \ (L \ (    b))))
+ *      LDx=b       2: CHOLMOD_LD    x =      (     (D \ (L \ (    b))))
+ *      DL'x=b      3: CHOLMOD_DLt   x =      (L' \ (D \ (    (    b))))
+ *      Lx=b        4: CHOLMOD_L     x =      (     (    (L \ (    b))))
+ *      L'x=b       5: CHOLMOD_Lt    x =      (L' \ (    (    (    b))))
+ *      Dx=b        6: CHOLMOD_D     x =      (     (D \ (    (    b))))
+ *      x=Pb        7: CHOLMOD_P     x =      (     (    (    (P * b))))
+ *      x=P'b       8: CHOLMOD_Pt    x = P' * (     (    (    (    b))))
  *
  * The factorization can be simplicial LDL', simplicial LL', or supernodal LL'.
  * For an LL' factorization, D is the identity matrix.  Thus CHOLMOD_LD and
@@ -957,30 +957,145 @@ cholmod_dense *CHOLMOD(solve)
 )
 {
     cholmod_dense *Y = NULL, *X = NULL ;
-    Int *Perm ;
-    Int n, nrhs, ncols, ctype, xtype, k1, nr, ytype ;
+    cholmod_dense *E = NULL ;
+    int ok ;
+
+    /* do the solve, allocating workspaces as needed  */
+    ok = CHOLMOD (solve2) (sys, L, B, NULL, &X, NULL, &Y, &E, Common) ;
+
+    /* free workspaces if allocated, and free result if an error occured */
+    CHOLMOD(free_dense) (&Y, Common) ;
+    CHOLMOD(free_dense) (&E, Common) ;
+    if (!ok)
+    {
+        CHOLMOD(free_dense) (&X, Common) ;
+    }
+    return (X) ;
+}
+
+
+/* ========================================================================== */
+/* === cholmod_solve2 ======================================================= */
+/* ========================================================================== */
+
+/* This function acts just like cholmod_solve, except that the solution X and
+ * the internal workspace (Y and E) can be passed in preallocated.  If the
+ * solution X or any required workspaces are not allocated on input, or if they
+ * are the wrong size or type, then this function frees them and reallocates
+ * them as the proper size and type.  Thus, if you have a sequence of solves to
+ * do, you can let this function allocate X, Y, and E on the first call.
+ * Subsequent calls to cholmod_solve2 can then reuse this space.  You must
+ * then free the workspaces Y and E (and X if desired) when you are finished.
+ * For example, the first call to cholmod_l_solve2, below, will solve the
+ * requested system.  The next 2 calls (with different right-hand-sides but
+ * the same value of "sys") will resuse the workspace and solution X from the
+ * first call.  Finally, when all solves are done, you must free the workspaces
+ * Y and E (otherwise you will have a memory leak), and you should also free X
+ * when you are done with it.  Note that on input, X, Y, and E must be either
+ * valid cholmod_dense matrices, or initialized to NULL.  You cannot pass in an
+ * uninitialized X, Y, or E.
+ *
+ *      cholmod_dense *X = NULL, *Y = NULL, *E = NULL ;
+ *      ...
+ *      cholmod_l_solve2 (sys, L, B1, NULL, &X, NULL, &Y, &E, Common) ;
+ *      cholmod_l_solve2 (sys, L, B2, NULL, &X, NULL, &Y, &E, Common) ;
+ *      cholmod_l_solve2 (sys, L, B3, NULL, &X, NULL, &Y, &E, Common) ;
+ *      cholmod_l_free_dense (&X, Common) ;
+ *      cholmod_l_free_dense (&Y, Common) ;
+ *      cholmod_l_free_dense (&E, Common) ;
+ *
+ * The equivalent when using cholmod_l_solve is:
+ *
+ *      cholmod_dense *X = NULL, *Y = NULL, *E = NULL ;
+ *      ...
+ *      X = cholmod_l_solve (sys, L, B1, Common) ;
+ *      cholmod_l_free_dense (&X, Common) ;
+ *      X = cholmod_l_solve (sys, L, B2, Common) ;
+ *      cholmod_l_free_dense (&X, Common) ;
+ *      X = cholmod_l_solve (sys, L, B3, Common) ;
+ *      cholmod_l_free_dense (&X, Common) ;
+ *
+ * Both methods work fine, but in the 2nd method with cholmod_solve, the
+ * internal workspaces (Y and E) are allocated and freed on each call.
+ *
+ * Bset is an optional sparse column (pattern only) that specifies a set
+ * of row indices.  It is ignored if NULL, or if sys is CHOLMOD_P or
+ * CHOLMOD_Pt.  If it is present and not ignored, B must be a dense column
+ * vector, and only entries B(i) where i is in the pattern of Bset are
+ * considered.  All others are treated as if they were zero (they are not
+ * accessed).  L must be a simplicial factorization, not supernodal.  L is
+ * converted from supernodal to simplicial if necessary.  The solution X is
+ * defined only for entries in the output sparse pattern of Xset.
+ * The xtype (real/complex/zomplex) of L and B must match.
+ *
+ * NOTE: If Bset is present and L is supernodal, it is converted to simplicial
+ * on output.
+ */
+
+int CHOLMOD(solve2)         /* returns TRUE on success, FALSE on failure */
+(
+    /* ---- input ---- */
+    int sys,		            /* system to solve */
+    cholmod_factor *L,	            /* factorization to use */
+    cholmod_dense *B,               /* right-hand-side */
+    cholmod_sparse *Bset,
+    /* ---- output --- */
+    cholmod_dense **X_Handle,       /* solution, allocated if need be */
+    cholmod_sparse **Xset_Handle,
+    /* ---- workspace  */
+    cholmod_dense **Y_Handle,       /* workspace, or NULL */
+    cholmod_dense **E_Handle,       /* workspace, or NULL */
+    /* --------------- */
+    cholmod_common *Common
+)
+{
+    double *Yx, *Yz, *Bx, *Bz, *Xx, *Xz ;
+    cholmod_dense *Y = NULL, *X = NULL ;
+    cholmod_sparse *C, *Yset, C_header, Yset_header, *Xset ;
+    Int *Perm = NULL, *IPerm = NULL ;
+    Int n, nrhs, ncols, ctype, xtype, k1, nr, ytype, k, blen, p, i, d, nrow ;
+    Int Cp [2], Ysetp [2], *Ci, *Yseti, ysetlen ;
+    Int *Bsetp, *Bseti, *Bsetnz, *Xseti, *Xsetp, *Iwork ;
 
     /* ---------------------------------------------------------------------- */
     /* check inputs */
     /* ---------------------------------------------------------------------- */
 
-    RETURN_IF_NULL_COMMON (NULL) ;
-    RETURN_IF_NULL (L, NULL) ;
-    RETURN_IF_NULL (B, NULL) ;
-    RETURN_IF_XTYPE_INVALID (L, CHOLMOD_REAL, CHOLMOD_ZOMPLEX, NULL) ;
-    RETURN_IF_XTYPE_INVALID (B, CHOLMOD_REAL, CHOLMOD_ZOMPLEX, NULL) ;
+    RETURN_IF_NULL_COMMON (FALSE) ;
+    RETURN_IF_NULL (L, FALSE) ;
+    RETURN_IF_NULL (B, FALSE) ;
+    RETURN_IF_XTYPE_INVALID (L, CHOLMOD_REAL, CHOLMOD_ZOMPLEX, FALSE) ;
+    RETURN_IF_XTYPE_INVALID (B, CHOLMOD_REAL, CHOLMOD_ZOMPLEX, FALSE) ;
     if (sys < CHOLMOD_A || sys > CHOLMOD_Pt)
     {
 	ERROR (CHOLMOD_INVALID, "invalid system") ;
-	return (NULL) ;
+	return (FALSE) ;
     }
-    if (B->d < L->n || B->nrow != L->n)
+    DEBUG (CHOLMOD(dump_factor) (L, "L", Common)) ;
+    DEBUG (CHOLMOD(dump_dense) (B, "B", Common)) ;
+    nrhs = B->ncol ;
+    n = (Int) L->n ;
+    d = (Int) B->d ;
+    nrow = (Int) B->nrow ;
+    if (d < n || nrow != n)
     {
 	ERROR (CHOLMOD_INVALID, "dimensions of L and B do not match") ;
-	return (NULL) ;
+	return (FALSE) ;
+    }
+    if (Bset)
+    {
+        if (nrhs != 1)
+        {
+            ERROR (CHOLMOD_INVALID, "Bset requires a single right-hand side") ;
+            return (FALSE) ;
+        }
+        if (L->xtype != B->xtype)
+        {
+            ERROR (CHOLMOD_INVALID, "Bset requires xtype of L and B to match") ;
+            return (FALSE) ;
+        }
+        DEBUG (CHOLMOD(dump_sparse) (Bset, "Bset", Common)) ;
     }
-    DEBUG (CHOLMOD(dump_factor) (L, "L", Common)) ;
-    DEBUG (CHOLMOD(dump_dense) (B, "B", Common)) ;
     Common->status = CHOLMOD_OK ;
 
     /* ---------------------------------------------------------------------- */
@@ -990,24 +1105,21 @@ cholmod_dense *CHOLMOD(solve)
     if ((sys == CHOLMOD_P || sys == CHOLMOD_Pt || sys == CHOLMOD_A)
 	    && L->ordering != CHOLMOD_NATURAL)
     {
+        /* otherwise, Perm is NULL, and the identity permutation is used */
 	Perm = L->Perm ;
     }
-    else
-    {
-	/* do not use L->Perm; use the identity permutation instead */
-	Perm = NULL ;
-    }
-
-    nrhs = B->ncol ;
-    n = L->n ;
 
     /* ---------------------------------------------------------------------- */
-    /* allocate the result X */
+    /* allocate the result X (or resuse the space from a prior call) */
     /* ---------------------------------------------------------------------- */
 
     ctype = (Common->prefer_zomplex) ? CHOLMOD_ZOMPLEX : CHOLMOD_COMPLEX ;
 
-    if (sys == CHOLMOD_P || sys == CHOLMOD_Pt)
+    if (Bset)
+    {
+        xtype = L->xtype ;
+    }
+    else if (sys == CHOLMOD_P || sys == CHOLMOD_Pt)
     {
 	/* x=Pb and x=P'b return X real if B is real; X is the preferred
 	 * complex/zcomplex type if B is complex or zomplex */
@@ -1024,17 +1136,392 @@ cholmod_dense *CHOLMOD(solve)
 	xtype = ctype ;
     }
 
-    X = CHOLMOD(allocate_dense) (n, nrhs, n, xtype, Common) ;
+    /* ensure X has the right size and type */
+    X = CHOLMOD(ensure_dense) (X_Handle, n, nrhs, n, xtype, Common) ;
     if (Common->status < CHOLMOD_OK)
     {
-	return (NULL) ;
+	return (FALSE) ;
     }
 
     /* ---------------------------------------------------------------------- */
     /* solve using L, D, L', P, or some combination */
     /* ---------------------------------------------------------------------- */
 
-    if (sys == CHOLMOD_P)
+    if (Bset)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* solve for a subset of x, with a sparse b */
+        /* ------------------------------------------------------------------ */
+
+        Int save_realloc_state ;
+
+#ifndef NSUPERNODAL
+        /* convert a supernodal L to simplicial when using Bset */
+        if (L->is_super)
+        {
+            /* Can only use Bset on a simplicial factorization.  The supernodal
+             * factor L is converted to simplicial, leaving the xtype unchanged
+             * (real, complex, or zomplex).  Since the supernodal factorization
+             * is already LL', it is left in that form.   This conversion uses
+             * the ll_super_to_simplicial_numeric function in
+             * cholmod_change_factor.
+             */
+            CHOLMOD(change_factor) (
+                CHOLMOD_REAL,   /* ignored, since L is already numeric */
+                TRUE,           /* convert to LL' (no change to num. values) */
+                FALSE,          /* convert to simplicial */
+                FALSE,          /* do not pack the columns of L */
+                FALSE,          /* (ignored) */
+                L, Common) ;
+            if (Common->status < CHOLMOD_OK)
+            {
+                /* out of memory, L is returned unchanged */
+                return (FALSE) ;
+            }
+        }
+#endif
+
+        /* L, X, and B are all the same xtype */
+        /* ensure Y is the the right size */
+	Y = CHOLMOD(ensure_dense) (Y_Handle, 1, n, 1, L->xtype, Common) ;
+	if (Common->status < CHOLMOD_OK)
+	{
+	    /* out of memory */
+	    return (FALSE) ;
+	}
+
+        /* ------------------------------------------------------------------ */
+        /* get the inverse permutation, constructing it if needed */
+        /* ------------------------------------------------------------------ */
+
+        DEBUG (CHOLMOD (dump_perm) (Perm,  n,n, "Perm",  Common)) ;
+
+        if ((sys == CHOLMOD_A || sys == CHOLMOD_P) && Perm != NULL)
+        {
+            /* The inverse permutation IPerm is used for the c=Pb step,
+               which is needed only for solving Ax=b or x=Pb.  No other
+               steps should use IPerm */
+            if (L->IPerm == NULL)
+            {
+                /* construct the inverse permutation.  This is done only once
+                 * and then stored in L permanently.  */
+                L->IPerm = CHOLMOD(malloc) (n, sizeof (Int), Common) ;
+                if (Common->status < CHOLMOD_OK)
+                {
+                    /* out of memory */
+                    return (FALSE) ;
+                }
+                IPerm = L->IPerm ;
+                for (k = 0 ; k < n ; k++)
+                {
+                    IPerm [Perm [k]] = k ;
+                }
+            }
+            /* x=A\b and x=Pb both need IPerm */
+            IPerm = L->IPerm ;
+        }
+
+        if (sys == CHOLMOD_P)
+        {
+            /* x=Pb needs to turn off the subsequent x=P'b permutation */
+            Perm = NULL ;
+        }
+
+        DEBUG (CHOLMOD (dump_perm) (Perm,  n,n, "Perm",  Common)) ;
+        DEBUG (CHOLMOD (dump_perm) (IPerm, n,n, "IPerm", Common)) ;
+
+        /* ------------------------------------------------------------------ */
+        /* ensure Xset is the right size and type */
+        /* ------------------------------------------------------------------ */
+
+        /* Xset is n-by-1, nzmax >= n, pattern-only, packed, unsorted */
+        Xset = *Xset_Handle ;
+        if (Xset == NULL || (Int) Xset->nrow != n || (Int) Xset->ncol != 1 ||
+            (Int) Xset->nzmax < n || Xset->itype != CHOLMOD_PATTERN)
+        {
+            /* this is done only once, for the 1st call to cholmod_solve */
+            CHOLMOD(free_sparse) (Xset_Handle, Common) ;
+            Xset = CHOLMOD(allocate_sparse) (n, 1, n, FALSE, TRUE, 0,
+                CHOLMOD_PATTERN, Common) ;
+            *Xset_Handle = Xset ;
+        }
+        Xset->sorted = FALSE ;
+        Xset->stype = 0 ;
+        if (Common->status < CHOLMOD_OK)
+        {
+            /* out of memory */
+            return (FALSE) ;
+        }
+
+        /* -------------------------------------------------------------- */
+        /* ensure Flag of size n, and 3*n Int workspace is available */
+        /* -------------------------------------------------------------- */
+
+        /* does no work if prior calls already allocated enough space */
+        CHOLMOD(allocate_work) (n, 3*n, 0, Common) ;
+        if (Common->status < CHOLMOD_OK)
+        {
+            /* out of memory */
+            return (FALSE) ;
+        }
+
+        /* [ use Iwork (n:3n-1) for Ci and Yseti */
+        Iwork = Common->Iwork ;
+        /* Iwork (0:n-1) is not used because it is used by check_perm,
+           print_perm, check_sparse, and print_sparse */
+        Ci = Iwork + n ;
+        Yseti = Ci + n ;
+
+        /* reallocating workspace would break Ci and Yseti */
+        save_realloc_state = Common->no_workspace_reallocate ;
+        Common->no_workspace_reallocate = TRUE ;
+
+        /* -------------------------------------------------------------- */
+        /* C = permuted Bset, to correspond to the permutation of L */
+        /* -------------------------------------------------------------- */
+
+        /* C = IPerm (Bset) */
+        DEBUG (CHOLMOD(dump_sparse) (Bset, "Bset", Common)) ;
+
+        Bsetp = Bset->p ;
+        Bseti = Bset->i ;
+        Bsetnz = Bset->nz ;
+        blen = (Bset->packed) ? Bsetp [1] : Bsetnz [0] ;
+
+        /* C = spones (P*B) or C = spones (B) if IPerm is NULL */
+        C = &C_header ;
+        C->nrow = n ;
+        C->ncol = 1 ;
+        C->nzmax = n ;
+        C->packed = TRUE ;
+        C->stype = 0 ;
+        C->itype = ITYPE ;
+        C->xtype = CHOLMOD_PATTERN ;
+        C->dtype = CHOLMOD_DOUBLE ;
+        C->nz = NULL ;
+        C->p = Cp ;
+        C->i = Ci ;
+        C->x = NULL ;
+        C->z = NULL ;
+        C->sorted = FALSE ;
+        Cp [0] = 0 ;
+        Cp [1] = blen ;
+        for (p = 0 ; p < blen ; p++)
+        {
+            Int iold = Bseti [p] ;
+            Ci [p] = IPerm ? IPerm [iold] : iold ;
+        }
+        DEBUG (CHOLMOD (dump_sparse) (C, "C", Common)) ;
+
+        /* create a sparse column Yset from Iwork (n:2n-1) */
+        Yset = &Yset_header ;
+        Yset->nrow = n ;
+        Yset->ncol = 1 ;
+        Yset->nzmax = n ;
+        Yset->packed = TRUE ;
+        Yset->stype = 0 ;
+        Yset->itype = ITYPE ;
+        Yset->xtype = CHOLMOD_PATTERN ;
+        Yset->dtype = CHOLMOD_DOUBLE ;
+        Yset->nz = NULL ;
+        Yset->p = Ysetp ;
+        Yset->i = Yseti ;
+        Yset->x = NULL ;
+        Yset->z = NULL ;
+        Yset->sorted = FALSE ;
+        Ysetp [0] = 0 ;
+        Ysetp [1] = 0 ;
+        DEBUG (CHOLMOD (dump_sparse) (Yset, "Yset empty", Common)) ;
+
+        /* -------------------------------------------------------------- */
+        /* Yset = nonzero pattern of L\C, or just C itself */
+        /* -------------------------------------------------------------- */
+
+        /* this takes O(ysetlen) time  */
+        if (sys == CHOLMOD_P || sys == CHOLMOD_Pt || sys == CHOLMOD_D)
+        {
+            Ysetp [1] = blen ;
+            for (p = 0 ; p < blen ; p++)
+            {
+                Yseti [p] = Ci [p] ;
+            }
+        }
+        else
+        {
+            if (!CHOLMOD(lsolve_pattern) (C, L, Yset, Common))
+            {
+                Common->no_workspace_reallocate = save_realloc_state ;
+                return (FALSE) ;
+            }
+        }
+        DEBUG (CHOLMOD (dump_sparse) (Yset, "Yset", Common)) ;
+
+        /* -------------------------------------------------------------- */
+        /* clear the parts of Y that we will use in the solve */
+        /* -------------------------------------------------------------- */
+
+        Yx = Y->x ;
+        Yz = Y->z ;
+        ysetlen = Ysetp [1] ;
+
+        switch (L->xtype)
+        {
+
+            case CHOLMOD_REAL:
+                for (p = 0 ; p < ysetlen ; p++)
+                {
+                    i = Yseti [p] ;
+                    Yx [i] = 0 ;
+                }
+                break ;
+
+            case CHOLMOD_COMPLEX:
+                for (p = 0 ; p < ysetlen ; p++)
+                {
+                    i = Yseti [p] ;
+                    Yx [2*i  ] = 0 ;
+                    Yx [2*i+1] = 0 ;
+                }
+                break ;
+
+            case CHOLMOD_ZOMPLEX:
+                for (p = 0 ; p < ysetlen ; p++)
+                {
+                    i = Yseti [p] ;
+                    Yx [i] = 0 ;
+                    Yz [i] = 0 ;
+                }
+                break ;
+        }
+
+        DEBUG (CHOLMOD (dump_dense) (Y, "Y (Yset) = 0", Common)) ;
+
+        /* -------------------------------------------------------------- */
+        /* scatter and permute B into Y */
+        /* -------------------------------------------------------------- */
+
+        /* Y (C) = B (Bset) */
+        Bx = B->x ;
+        Bz = B->z ;
+
+        switch (L->xtype)
+        {
+
+            case CHOLMOD_REAL:
+                for (p = 0 ; p < blen ; p++)
+                {
+                    Int iold = Bseti [p] ;
+                    Int inew = Ci [p] ;
+                    Yx [inew] = Bx [iold] ;
+                }
+                break ;
+
+            case CHOLMOD_COMPLEX:
+                for (p = 0 ; p < blen ; p++)
+                {
+                    Int iold = Bseti [p] ;
+                    Int inew = Ci [p] ;
+                    Yx [2*inew  ] = Bx [2*iold  ] ;
+                    Yx [2*inew+1] = Bx [2*iold+1] ;
+                }
+                break ;
+
+            case CHOLMOD_ZOMPLEX:
+                for (p = 0 ; p < blen ; p++)
+                {
+                    Int iold = Bseti [p] ;
+                    Int inew = Ci [p] ;
+                    Yx [inew] = Bx [iold] ;
+                    Yz [inew] = Bz [iold] ;
+                }
+                break ;
+        }
+
+        DEBUG (CHOLMOD (dump_dense) (Y, "Y (C) = B (Bset)", Common)) ;
+
+        /* -------------------------------------------------------------- */
+        /* solve Y = (L' \ (L \ Y'))', or other system, with template */
+        /* -------------------------------------------------------------- */
+
+        /* the solve only iterates over columns in Yseti [0...ysetlen-1] */
+
+        if (! (sys == CHOLMOD_P || sys == CHOLMOD_Pt))
+        {
+            switch (L->xtype)
+            {
+                case CHOLMOD_REAL:
+                    r_simplicial_solver (sys, L, Y, Yseti, ysetlen) ;
+                    break ;
+
+                case CHOLMOD_COMPLEX:
+                    c_simplicial_solver (sys, L, Y, Yseti, ysetlen) ;
+                    break ;
+
+                case CHOLMOD_ZOMPLEX:
+                    z_simplicial_solver (sys, L, Y, Yseti, ysetlen) ;
+                    break ;
+            }
+        }
+
+        DEBUG (CHOLMOD (dump_dense) (Y, "Y after solve", Common)) ;
+
+        /* -------------------------------------------------------------- */
+        /* X = P'*Y, but only for rows in Yset, and create Xset */
+        /* -------------------------------------------------------------- */
+
+        /* X (Perm (Yset)) = Y (Yset) */
+        Xx = X->x ;
+        Xz = X->z ;
+        Xseti = Xset->i ;
+        Xsetp = Xset->p ;
+
+        switch (L->xtype)
+        {
+
+            case CHOLMOD_REAL:
+                for (p = 0 ; p < ysetlen ; p++)
+                {
+                    Int inew = Yseti [p] ;
+                    Int iold = Perm ? Perm [inew] : inew ;
+                    Xx [iold] = Yx [inew] ;
+                    Xseti [p] = iold ;
+                }
+                break ;
+
+            case CHOLMOD_COMPLEX:
+                for (p = 0 ; p < ysetlen ; p++)
+                {
+                    Int inew = Yseti [p] ;
+                    Int iold = Perm ? Perm [inew] : inew ;
+                    Xx [2*iold  ] = Yx [2*inew] ;
+                    Xx [2*iold+1] = Yx [2*inew+1] ;
+                    Xseti [p] = iold ;
+                }
+                break ;
+
+            case CHOLMOD_ZOMPLEX:
+                for (p = 0 ; p < ysetlen ; p++)
+                {
+                    Int inew = Yseti [p] ;
+                    Int iold = Perm ? Perm [inew] : inew ;
+                    Xx [iold] = Yx [inew] ;
+                    Xz [iold] = Yz [inew] ;
+                    Xseti [p] = iold ;
+                }
+                break ;
+        }
+
+        Xsetp [0] = 0 ;
+        Xsetp [1] = ysetlen ;
+
+        DEBUG (CHOLMOD(dump_sparse) (Xset, "Xset", Common)) ;
+        DEBUG (CHOLMOD(dump_dense) (X, "X", Common)) ;
+        Common->no_workspace_reallocate = save_realloc_state ;
+        /* done using Iwork (n:3n-1) for Ci and Yseti ] */
+
+    }
+    else if (sys == CHOLMOD_P)
     {
 
 	/* ------------------------------------------------------------------ */
@@ -1062,55 +1549,49 @@ cholmod_dense *CHOLMOD(solve)
 	/* ------------------------------------------------------------------ */
 
 #ifndef NSUPERNODAL
-	Int blas_ok = TRUE ;
-
 	/* allocate workspace */
 	cholmod_dense *E ;
 	Int dual ;
+        Common->blas_ok = TRUE ;
 	dual = (L->xtype == CHOLMOD_REAL && B->xtype != CHOLMOD_REAL) ? 2 : 1 ;
-	Y = CHOLMOD(allocate_dense) (n, dual*nrhs, n, L->xtype, Common) ;
-	E = CHOLMOD(allocate_dense) (dual*nrhs, L->maxesize, dual*nrhs,
+	Y = CHOLMOD(ensure_dense) (Y_Handle, n, dual*nrhs, n, L->xtype, Common);
+	E = CHOLMOD(ensure_dense) (E_Handle, dual*nrhs, L->maxesize, dual*nrhs,
 		L->xtype, Common) ;
 
 	if (Common->status < CHOLMOD_OK)
 	{
 	    /* out of memory */
-	    CHOLMOD(free_dense) (&X, Common) ;
-	    CHOLMOD(free_dense) (&Y, Common) ;
-	    CHOLMOD(free_dense) (&E, Common) ;
-	    return (NULL) ;
+            return (FALSE) ;
 	}
 
 	perm (B, Perm, 0, nrhs, Y) ;			    /* Y = P*B */
 
 	if (sys == CHOLMOD_A || sys == CHOLMOD_LDLt)
 	{
-	    blas_ok = CHOLMOD(super_lsolve) (L, Y, E, Common) ;	   /* Y = L\Y */
-	    blas_ok = blas_ok &&
-		CHOLMOD(super_ltsolve) (L, Y, E, Common) ;	   /* Y = L'\Y*/
+	    CHOLMOD(super_lsolve) (L, Y, E, Common) ;	    /* Y = L\Y */
+            CHOLMOD(super_ltsolve) (L, Y, E, Common) ;	    /* Y = L'\Y*/
 	}
 	else if (sys == CHOLMOD_L || sys == CHOLMOD_LD)
 	{
-	    blas_ok = CHOLMOD(super_lsolve) (L, Y, E, Common) ;	   /* Y = L\Y */
+	    CHOLMOD(super_lsolve) (L, Y, E, Common) ;	    /* Y = L\Y */
 	}
 	else if (sys == CHOLMOD_Lt || sys == CHOLMOD_DLt)
 	{
-	    blas_ok = CHOLMOD(super_ltsolve) (L, Y, E, Common) ;   /* Y = L'\Y*/
+	    CHOLMOD(super_ltsolve) (L, Y, E, Common) ;      /* Y = L'\Y*/
 	}
-	CHOLMOD(free_dense) (&E, Common) ;
 
 	iperm (Y, Perm, 0, nrhs, X) ;			    /* X = P'*Y */
 
-	if (CHECK_BLAS_INT && !blas_ok)
+	if (CHECK_BLAS_INT && !Common->blas_ok)
 	{
 	    /* Integer overflow in the BLAS.  This is probably impossible,
 	     * since the BLAS were used to create the supernodal factorization.
 	     * It might be possible for the calls to the BLAS to differ between
 	     * factorization and forward/backsolves, however.  This statement
 	     * is untested; it does not appear in the compiled code if
-	     * CHECK_BLAS_INT is true (when the same integer is used in CHOLMOD
-	     * and the BLAS. */
-	    CHOLMOD(free_dense) (&X, Common) ;
+             * CHECK_BLAS_INT is true (when the same integer is used in
+             * CHOLMOD and the BLAS. */
+	    return (FALSE) ;
 	}
 
 #else
@@ -1126,16 +1607,17 @@ cholmod_dense *CHOLMOD(solve)
 	/* solve using a simplicial LL' or LDL' factorization */
 	/* ------------------------------------------------------------------ */
 
-	if (L->xtype == CHOLMOD_REAL && B->xtype == CHOLMOD_REAL)
+        if (L->xtype == CHOLMOD_REAL && B->xtype == CHOLMOD_REAL)
 	{
 	    /* L, B, and Y are all real */
 	    /* solve with up to 4 columns of B at a time */
-	    ncols = 4 ;
-	    nr = MAX (4, nrhs) ;
+            ncols = 4 ;
+            nr = MAX (4, nrhs) ;
 	    ytype = CHOLMOD_REAL ;
 	}
 	else if (L->xtype == CHOLMOD_REAL)
 	{
+            /* L is real and B is complex or zomplex */
 	    /* solve with one column of B (real/imag), at a time */
 	    ncols = 1 ;
 	    nr = 2 ;
@@ -1150,53 +1632,50 @@ cholmod_dense *CHOLMOD(solve)
 	    ytype = L->xtype ;
 	}
 
-	Y = CHOLMOD(allocate_dense) (nr, n, nr, ytype, Common) ;
-
+	Y = CHOLMOD(ensure_dense) (Y_Handle, nr, n, nr, ytype, Common) ;
 	if (Common->status < CHOLMOD_OK)
 	{
 	    /* out of memory */
-	    CHOLMOD(free_dense) (&X, Common) ;
-	    CHOLMOD(free_dense) (&Y, Common) ;
-	    return (NULL) ;
+	    return (FALSE) ;
 	}
 
-	for (k1 = 0 ; k1 < nrhs ; k1 += ncols)
-	{
-	    /* -------------------------------------------------------------- */
-	    /* Y = B (P, k1:k1+ncols-1)' = (P * B (:,...))' */
-	    /* -------------------------------------------------------------- */
+        for (k1 = 0 ; k1 < nrhs ; k1 += ncols)
+        {
 
-	    ptrans (B, Perm, k1, ncols, Y) ;
+            /* -------------------------------------------------------------- */
+            /* Y = B (P, k1:k1+ncols-1)' = (P * B (:,...))' */
+            /* -------------------------------------------------------------- */
 
-	    /* -------------------------------------------------------------- */
-	    /* solve Y = (L' \ (L \ Y'))', or other system, with template */
-	    /* -------------------------------------------------------------- */
+            ptrans (B, Perm, k1, ncols, Y) ;
 
-	    switch (L->xtype)
-	    {
-		case CHOLMOD_REAL:
-		    r_simplicial_solver (sys, L, Y) ;
-		    break ;
+            /* -------------------------------------------------------------- */
+            /* solve Y = (L' \ (L \ Y'))', or other system, with template */
+            /* -------------------------------------------------------------- */
 
-		case CHOLMOD_COMPLEX:
-		    c_simplicial_solver (sys, L, Y) ;
-		    break ;
+            switch (L->xtype)
+            {
+                case CHOLMOD_REAL:
+                    r_simplicial_solver (sys, L, Y, NULL, 0) ;
+                    break ;
 
-		case CHOLMOD_ZOMPLEX:
-		    z_simplicial_solver (sys, L, Y) ;
-		    break ;
-	    }
+                case CHOLMOD_COMPLEX:
+                    c_simplicial_solver (sys, L, Y, NULL, 0) ;
+                    break ;
 
-	    /* -------------------------------------------------------------- */
-	    /* X (P, k1:k2+ncols-1) = Y' */
-	    /* -------------------------------------------------------------- */
+                case CHOLMOD_ZOMPLEX:
+                    z_simplicial_solver (sys, L, Y, NULL, 0) ;
+                    break ;
+            }
 
-	    iptrans (Y, Perm, k1, ncols, X) ;
-	}
+            /* -------------------------------------------------------------- */
+            /* X (P, k1:k2+ncols-1) = Y' */
+            /* -------------------------------------------------------------- */
+
+            iptrans (Y, Perm, k1, ncols, X) ;
+        }
     }
 
-    CHOLMOD(free_dense) (&Y, Common) ;
     DEBUG (CHOLMOD(dump_dense) (X, "X result", Common)) ;
-    return (X) ;
+    return (TRUE) ;
 }
 #endif
diff --git a/CHOLMOD/Cholesky/cholmod_spsolve.c b/CHOLMOD/Cholesky/cholmod_spsolve.c
index a9c34f9..1b0f71a 100644
--- a/CHOLMOD/Cholesky/cholmod_spsolve.c
+++ b/CHOLMOD/Cholesky/cholmod_spsolve.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Given an LL' or LDL' factorization of A, solve one of the following systems:
diff --git a/CHOLMOD/Cholesky/t_cholmod_lsolve.c b/CHOLMOD/Cholesky/t_cholmod_lsolve.c
index 1ab79b9..c91dc2f 100644
--- a/CHOLMOD/Cholesky/t_cholmod_lsolve.c
+++ b/CHOLMOD/Cholesky/t_cholmod_lsolve.c
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine to solve Lx=b with unit or non-unit diagonal, or
@@ -62,7 +61,7 @@
 static void LSOLVE (PREFIX,1)
 (
     cholmod_factor *L,
-    double X [ ]			/* n-by-1 in row form */
+    double X [ ]                        /* n-by-1 in row form */
 )
 {
     double *Lx = L->x ;
@@ -758,11 +757,11 @@ static void LSOLVE (PREFIX,4)
 static void LSOLVE (PREFIX,k)
 (
     cholmod_factor *L,
-    cholmod_dense *Y		    /* nr-by-n where nr is 1 to 4 */
+    cholmod_dense *Y,		    /* nr-by-n where nr is 1 to 4 */
+    Int *Yseti, Int ysetlen
 )
 {
 
-#ifndef REAL
     double yx [2] ;
 #ifdef ZOMPLEX
     double yz [1] ;
@@ -774,8 +773,7 @@ static void LSOLVE (PREFIX,k)
     Int *Li = L->i ;
     Int *Lp = L->p ;
     Int *Lnz = L->nz ;
-    Int i, j, n = L->n ;
-#endif
+    Int n = L->n, jj, jjiters ;
 
     ASSERT (L->xtype == Y->xtype) ; /* L and Y must have the same xtype */
     ASSERT (L->n == Y->ncol) ;	    /* dimensions must match */
@@ -785,57 +783,66 @@ static void LSOLVE (PREFIX,k)
 
 #ifdef REAL
 
-    /* ---------------------------------------------------------------------- */
-    /* solve a real linear system, with 1 to 4 RHS's and dynamic supernodes */
-    /* ---------------------------------------------------------------------- */
+    if (Yseti == NULL)
+    {
 
-    ASSERT (Y->nrow <= 4) ;
+        /* ------------------------------------------------------------------ */
+        /* real case, no Yseti, with 1 to 4 RHS's and dynamic supernodes */
+        /* ------------------------------------------------------------------ */
+
+        ASSERT (Y->nrow <= 4) ;
+
+        switch (Y->nrow)
+        {
+            case 1: LSOLVE (PREFIX,1) (L, Y->x) ; break ;
+            case 2: LSOLVE (PREFIX,2) (L, Y->x) ; break ;
+            case 3: LSOLVE (PREFIX,3) (L, Y->x) ; break ;
+            case 4: LSOLVE (PREFIX,4) (L, Y->x) ; break ;
+        }
 
-    switch (Y->nrow)
-    {
-	case 1: LSOLVE (PREFIX,1) (L, Y->x) ; break ;
-	case 2: LSOLVE (PREFIX,2) (L, Y->x) ; break ;
-	case 3: LSOLVE (PREFIX,3) (L, Y->x) ; break ;
-	case 4: LSOLVE (PREFIX,4) (L, Y->x) ; break ;
     }
+    else
+#endif
+    {
 
-#else
+        /* ------------------------------------------------------------------ */
+        /* solve a complex linear system or solve with Yseti */
+        /* ------------------------------------------------------------------ */
 
-    /* ---------------------------------------------------------------------- */
-    /* solve a complex linear system, with just one right-hand-side */
-    /* ---------------------------------------------------------------------- */
+        ASSERT (Y->nrow == 1) ;
 
-    ASSERT (Y->nrow == 1) ;
+        jjiters = Yseti ? ysetlen : n ;
 
-    for (j = 0 ; j < n ; j++)
-    {
-	/* get the start, end, and length of column j */
-	Int p = Lp [j] ;
-	Int lnz = Lnz [j] ;
-	Int pend = p + lnz ;
+        for (jj = 0 ; jj < jjiters ; jj++)
+        {
+            Int j = Yseti ? Yseti [jj] : jj ;
+
+            /* get the start, end, and length of column j */
+            Int p = Lp [j] ;
+            Int lnz = Lnz [j] ;
+            Int pend = p + lnz ;
 
-	/* y = X [j] ; */
-	ASSIGN (yx,yz,0, Xx,Xz,j) ;
+            /* y = X [j] ; */
+            ASSIGN (yx,yz,0, Xx,Xz,j) ;
 
 #ifdef LL
-	/* y /= Lx [p] ; */
-	/* X [j] = y ; */
-	DIV_REAL (yx,yz,0, yx,yz,0, Lx,p) ;
-	ASSIGN (Xx,Xz,j, yx,yz,0) ;
+            /* y /= Lx [p] ; */
+            /* X [j] = y ; */
+            DIV_REAL (yx,yz,0, yx,yz,0, Lx,p) ;
+            ASSIGN (Xx,Xz,j, yx,yz,0) ;
 #elif defined (LD)
-	/* X [j] = y / Lx [p] ; */
-	DIV_REAL (Xx,Xz,j, yx,yz,0, Lx,p) ;
+            /* X [j] = y / Lx [p] ; */
+            DIV_REAL (Xx,Xz,j, yx,yz,0, Lx,p) ;
 #endif
 
-	for (p++ ; p < pend ; p++)
-	{
-	    /* X [Li [p]] -= Lx [p] * y ; */
-	    i = Li [p] ;
-	    MULTSUB (Xx,Xz,i, Lx,Lz,p, yx,yz,0) ;
-	}
+            for (p++ ; p < pend ; p++)
+            {
+                /* X [Li [p]] -= Lx [p] * y ; */
+                Int i = Li [p] ;
+                MULTSUB (Xx,Xz,i, Lx,Lz,p, yx,yz,0) ;
+            }
+        }
     }
-
-#endif
 }
 
 /* prepare for the next inclusion of this file in cholmod_solve.c */
diff --git a/CHOLMOD/Cholesky/t_cholmod_ltsolve.c b/CHOLMOD/Cholesky/t_cholmod_ltsolve.c
index e58d1cd..c04bbbb 100644
--- a/CHOLMOD/Cholesky/t_cholmod_ltsolve.c
+++ b/CHOLMOD/Cholesky/t_cholmod_ltsolve.c
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine to solve L'x=b with unit or non-unit diagonal, or
@@ -64,7 +63,7 @@
 static void LSOLVE (PREFIX,1)
 (
     cholmod_factor *L,
-    double X [ ]		    /* n-by-1 in row form */
+    double X [ ]                        /* n-by-1 in row form */
 )
 {
     double *Lx = L->x ;
@@ -746,11 +745,11 @@ static void LSOLVE (PREFIX,4)
 static void LSOLVE (PREFIX,k)
 (
     cholmod_factor *L,
-    cholmod_dense *Y		    /* nr-by-n where nr is 1 to 4 */
+    cholmod_dense *Y,		    /* nr-by-n where nr is 1 to 4 */
+    Int *Yseti, Int ysetlen
 )
 {
 
-#ifndef REAL
 #ifdef DIAG
     double d [1] ;
 #endif
@@ -765,8 +764,7 @@ static void LSOLVE (PREFIX,k)
     Int *Li = L->i ;
     Int *Lp = L->p ;
     Int *Lnz = L->nz ;
-    Int i, j, n = L->n ;
-#endif
+    Int n = L->n, jj, jjiters ;
 
     ASSERT (L->xtype == Y->xtype) ; /* L and Y must have the same xtype */
     ASSERT (L->n == Y->ncol) ;	    /* dimensions must match */
@@ -776,64 +774,74 @@ static void LSOLVE (PREFIX,k)
 
 #ifdef REAL
 
-    /* ---------------------------------------------------------------------- */
-    /* solve a real linear system, with 1 to 4 RHS's and dynamic supernodes */
-    /* ---------------------------------------------------------------------- */
-
-    ASSERT (Y->nrow <= 4) ;
-    switch (Y->nrow)
+    if (Yseti == NULL)
     {
-	case 1: LSOLVE (PREFIX,1) (L, Y->x) ; break ;
-	case 2: LSOLVE (PREFIX,2) (L, Y->x) ; break ;
-	case 3: LSOLVE (PREFIX,3) (L, Y->x) ; break ;
-	case 4: LSOLVE (PREFIX,4) (L, Y->x) ; break ;
+
+        /* ------------------------------------------------------------------ */
+        /* real case, no Yseti, with 1 to 4 RHS's and dynamic supernodes */
+        /* ------------------------------------------------------------------ */
+
+        ASSERT (Y->nrow <= 4) ;
+        switch (Y->nrow)
+        {
+            case 1: LSOLVE (PREFIX,1) (L, Y->x) ; break ;
+            case 2: LSOLVE (PREFIX,2) (L, Y->x) ; break ;
+            case 3: LSOLVE (PREFIX,3) (L, Y->x) ; break ;
+            case 4: LSOLVE (PREFIX,4) (L, Y->x) ; break ;
+        }
+
     }
+    else
+#endif
+    {
 
-#else
+        /* ------------------------------------------------------------------ */
+        /* solve a complex linear system or solve with Yseti */
+        /* ------------------------------------------------------------------ */
 
-    /* ---------------------------------------------------------------------- */
-    /* solve a complex linear system, with just one right-hand-side */
-    /* ---------------------------------------------------------------------- */
+        ASSERT (Y->nrow == 1) ;
 
-    ASSERT (Y->nrow == 1) ;
+        jjiters = Yseti ? ysetlen : n ;
 
-    for (j = n-1 ; j >= 0 ; j--)
-    {
-	/* get the start, end, and length of column j */
-	Int p = Lp [j] ;
-	Int lnz = Lnz [j] ;
-	Int pend = p + lnz ;
+        for (jj = jjiters-1 ; jj >= 0 ; jj--)
+        {
+
+            Int j = Yseti ? Yseti [jj] : jj ;
+
+            /* get the start, end, and length of column j */
+            Int p = Lp [j] ;
+            Int lnz = Lnz [j] ;
+            Int pend = p + lnz ;
 
-	/* y = X [j] ; */
-	ASSIGN (yx,yz,0, Xx,Xz,j) ;
+            /* y = X [j] ; */
+            ASSIGN (yx,yz,0, Xx,Xz,j) ;
 
 #ifdef DIAG
-	/* d = Lx [p] ; */
-	ASSIGN_REAL (d,0, Lx,p) ;
+            /* d = Lx [p] ; */
+            ASSIGN_REAL (d,0, Lx,p) ;
 #endif
 #ifdef LD
-	/* y /= d ; */
-	DIV_REAL (yx,yz,0, yx,yz,0, d,0) ;
+            /* y /= d ; */
+            DIV_REAL (yx,yz,0, yx,yz,0, d,0) ;
 #endif
 
-	for (p++ ; p < pend ; p++)
-	{
-	    /* y -= conj (Lx [p]) * X [Li [p]] ; */
-	    i = Li [p] ;
-	    MULTSUBCONJ (yx,yz,0, Lx,Lz,p, Xx,Xz,i) ;
-	}
+            for (p++ ; p < pend ; p++)
+            {
+                /* y -= conj (Lx [p]) * X [Li [p]] ; */
+                Int i = Li [p] ;
+                MULTSUBCONJ (yx,yz,0, Lx,Lz,p, Xx,Xz,i) ;
+            }
 
 #ifdef LL
-	/* X [j] = y / d ; */
-	DIV_REAL (Xx,Xz,j, yx,yz,0, d,0) ;
+            /* X [j] = y / d ; */
+            DIV_REAL (Xx,Xz,j, yx,yz,0, d,0) ;
 #else
-	/* X [j] = y ; */
-	ASSIGN (Xx,Xz,j, yx,yz,0) ;
+            /* X [j] = y ; */
+            ASSIGN (Xx,Xz,j, yx,yz,0) ;
 #endif
 
+        }
     }
-
-#endif
 }
 
 /* prepare for the next inclusion of this file in cholmod_solve.c */
diff --git a/CHOLMOD/Cholesky/t_cholmod_rowfac.c b/CHOLMOD/Cholesky/t_cholmod_rowfac.c
index 38120ce..63b8442 100644
--- a/CHOLMOD/Cholesky/t_cholmod_rowfac.c
+++ b/CHOLMOD/Cholesky/t_cholmod_rowfac.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_rowfac.  Supports any numeric xtype
@@ -32,7 +31,9 @@ static int TEMPLATE (cholmod_rowfac)
     size_t kend,	/* last row to factorize is kend-1 */
 #ifdef MASK
     /* These inputs are used for cholmod_rowfac_mask only */
-    Int *mask,		/* size A->nrow. if mask[i] then W(i) is set to zero */
+    Int *mask,		/* size A->nrow. if mask[i] >= maskmark
+                           then W(i) is set to zero */
+    Int maskmark,
     Int *RLinkUp,	/* size A->nrow. link list of rows to compute */
 #endif
     /* ---- in/out --- */
@@ -249,7 +250,7 @@ static int TEMPLATE (cholmod_rowfac)
             for (s = top ; s < n ; s++)
             {
                 i = Stack [s] ;
-                if (mask [i] >= 0)
+                if (mask [i] >= maskmark)
 		{
 		    CLEAR (Wx,Wz,i) ;	/* set W(i) to zero */
 		}
diff --git a/CHOLMOD/Cholesky/t_cholmod_solve.c b/CHOLMOD/Cholesky/t_cholmod_solve.c
index a70594a..87aa0a9 100644
--- a/CHOLMOD/Cholesky/t_cholmod_solve.c
+++ b/CHOLMOD/Cholesky/t_cholmod_solve.c
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Cholesky Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Cholesky Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_solve.  Supports any numeric xtype (real,
@@ -48,18 +47,23 @@
 /* ========================================================================== */
 
 /* Solve Dx=b for an LDL' factorization, where Y holds b' on input and x' on
- * output. */
+ * output.
+ *
+ * The number of right-hand-sides (nrhs) is not restricted, even if Yseti
+ * is present.
+ */
 
 static void TEMPLATE (ldl_dsolve)
 (
     cholmod_factor *L,
-    cholmod_dense *Y		/* nr-by-n with leading dimension nr */
+    cholmod_dense *Y,		/* nr-by-n with leading dimension nr */
+    Int *Yseti, Int ysetlen
 )
 {
     double d [1] ;
     double *Lx, *Yx, *Yz ;
     Int *Lp ;
-    Int n, nrhs, k, p, k1, k2 ;
+    Int n, nrhs, k, p, k1, k2, kk, kkiters ;
 
     ASSERT (L->xtype == Y->xtype) ; /* L and Y must have the same xtype */
     ASSERT (L->n == Y->ncol) ;	    /* dimensions must match */
@@ -73,8 +77,10 @@ static void TEMPLATE (ldl_dsolve)
     Lx = L->x ;
     Yx = Y->x ;
     Yz = Y->z ;
-    for (k = 0 ; k < n ; k++)
+    kkiters = Yseti ? ysetlen : n ;
+    for (kk = 0 ; kk < kkiters ; kk++)
     {
+        k = Yseti ? Yseti [kk] : kk ;
 	k1 = k*nrhs ;
 	k2 = (k+1)*nrhs ;
 	ASSIGN_REAL (d,0, Lx,Lp[k]) ;
@@ -92,13 +98,20 @@ static void TEMPLATE (ldl_dsolve)
 
 /* Solve a linear system, where Y' contains the (array-transposed) right-hand
  * side on input, and the solution on output.  No permutations are applied;
- * these must have already been applied to Y on input. */
+ * these must have already been applied to Y on input.
+ *
+ * Yseti [0..ysetlen-1] is an optional list of indices from
+ * cholmod_lsolve_pattern.  The solve is performed only on the columns of L
+ * corresponding to entries in Yseti.  Ignored if NULL.  If present, most
+ * functions require that Y' consist of a single dense column.
+ */
 
 static void TEMPLATE (simplicial_solver)
 (
     int sys,		    /* system to solve */
     cholmod_factor *L,	    /* factor to use, a simplicial LL' or LDL' */
-    cholmod_dense *Y	    /* right-hand-side on input, solution on output */
+    cholmod_dense *Y,	    /* right-hand-side on input, solution on output */
+    Int *Yseti, Int ysetlen
 )
 {
     if (L->is_ll)
@@ -107,18 +120,18 @@ static void TEMPLATE (simplicial_solver)
 	if (sys == CHOLMOD_A || sys == CHOLMOD_LDLt)
 	{
 	    /* Solve Ax=b or LL'x=b */
-	    TEMPLATE (ll_lsolve_k) (L, Y) ;
-	    TEMPLATE (ll_ltsolve_k) (L, Y) ;
+	    TEMPLATE (ll_lsolve_k) (L, Y, Yseti, ysetlen) ;
+	    TEMPLATE (ll_ltsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
 	else if (sys == CHOLMOD_L || sys == CHOLMOD_LD)
 	{
 	    /* Solve Lx=b */
-	    TEMPLATE (ll_lsolve_k) (L, Y) ;
+	    TEMPLATE (ll_lsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
 	else if (sys == CHOLMOD_Lt || sys == CHOLMOD_DLt)
 	{
 	    /* Solve L'x=b */
-	    TEMPLATE (ll_ltsolve_k) (L, Y) ;
+	    TEMPLATE (ll_ltsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
     }
     else
@@ -127,33 +140,33 @@ static void TEMPLATE (simplicial_solver)
 	if (sys == CHOLMOD_A || sys == CHOLMOD_LDLt)
 	{
 	    /* Solve Ax=b or LDL'x=b */
-	    TEMPLATE (ldl_lsolve_k) (L, Y) ;
-	    TEMPLATE (ldl_dltsolve_k) (L, Y) ;
+	    TEMPLATE (ldl_lsolve_k) (L, Y, Yseti, ysetlen) ;
+	    TEMPLATE (ldl_dltsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
 	else if (sys == CHOLMOD_LD)
 	{
 	    /* Solve LDx=b */
-	    TEMPLATE (ldl_ldsolve_k) (L, Y) ;
+	    TEMPLATE (ldl_ldsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
 	else if (sys == CHOLMOD_L)
 	{
 	    /* Solve Lx=b */
-	    TEMPLATE (ldl_lsolve_k) (L, Y) ;
+	    TEMPLATE (ldl_lsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
 	else if (sys == CHOLMOD_Lt)
 	{
 	    /* Solve L'x=b */
-	    TEMPLATE (ldl_ltsolve_k) (L, Y) ;
+	    TEMPLATE (ldl_ltsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
 	else if (sys == CHOLMOD_DLt)
 	{
 	    /* Solve DL'x=b */
-	    TEMPLATE (ldl_dltsolve_k) (L, Y) ;
+	    TEMPLATE (ldl_dltsolve_k) (L, Y, Yseti, ysetlen) ;
 	}
 	else if (sys == CHOLMOD_D)
 	{
 	    /* Solve Dx=b */
-	    TEMPLATE (ldl_dsolve) (L, Y) ;
+	    TEMPLATE (ldl_dsolve) (L, Y, Yseti, ysetlen) ;
 	}
     }
 }
diff --git a/CHOLMOD/Core/License.txt b/CHOLMOD/Core/License.txt
index 51b795e..1c3ab99 100644
--- a/CHOLMOD/Core/License.txt
+++ b/CHOLMOD/Core/License.txt
@@ -1,7 +1,7 @@
 CHOLMOD/Core Module.  Copyright (C) 2005-2006, Univ. of Florida.
 Author: Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Core module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Core/cholmod_aat.c b/CHOLMOD/Core/cholmod_aat.c
index 7514edf..c62580a 100644
--- a/CHOLMOD/Core/cholmod_aat.c
+++ b/CHOLMOD/Core/cholmod_aat.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* C = A*A' or C = A(:,f)*A(:,f)'
diff --git a/CHOLMOD/Core/cholmod_add.c b/CHOLMOD/Core/cholmod_add.c
index 04eca8b..f7fc675 100644
--- a/CHOLMOD/Core/cholmod_add.c
+++ b/CHOLMOD/Core/cholmod_add.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* C = alpha*A + beta*B, or spones(A+B).  Result is packed, with sorted or
diff --git a/CHOLMOD/Core/cholmod_band.c b/CHOLMOD/Core/cholmod_band.c
index 2e5f0ac..fd03698 100644
--- a/CHOLMOD/Core/cholmod_band.c
+++ b/CHOLMOD/Core/cholmod_band.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* C = tril (triu (A,k1), k2)
@@ -52,8 +51,8 @@ static cholmod_sparse *band		/* returns C, or NULL if failure */
     /* ---- input or in/out if inplace is TRUE --- */
     cholmod_sparse *A,
     /* ---- input ---- */
-    UF_long k1,	    /* ignore entries below the k1-st diagonal */
-    UF_long k2,	    /* ignore entries above the k2-nd diagonal */
+    SuiteSparse_long k1,    /* ignore entries below the k1-st diagonal */
+    SuiteSparse_long k2,    /* ignore entries above the k2-nd diagonal */
     int mode,	    /* >0: numerical, 0: pattern, <0: pattern (no diagonal) */
     int inplace,    /* if TRUE, then convert A in place */
     /* --------------- */
@@ -343,8 +342,8 @@ cholmod_sparse *CHOLMOD(band)
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to extract band matrix from */
-    UF_long k1,		/* ignore entries below the k1-st diagonal */
-    UF_long k2,		/* ignore entries above the k2-nd diagonal */
+    SuiteSparse_long k1,    /* ignore entries below the k1-st diagonal */
+    SuiteSparse_long k2,    /* ignore entries above the k2-nd diagonal */
     int mode,		/* >0: numerical, 0: pattern, <0: pattern (no diag) */
     /* --------------- */
     cholmod_common *Common
@@ -361,8 +360,8 @@ cholmod_sparse *CHOLMOD(band)
 int CHOLMOD(band_inplace)
 (
     /* ---- input ---- */
-    UF_long k1,		/* ignore entries below the k1-st diagonal */
-    UF_long k2,		/* ignore entries above the k2-nd diagonal */
+    SuiteSparse_long k1,    /* ignore entries below the k1-st diagonal */
+    SuiteSparse_long k2,    /* ignore entries above the k2-nd diagonal */
     int mode,		/* >0: numerical, 0: pattern, <0: pattern (no diag) */
     /* ---- in/out --- */
     cholmod_sparse *A,	/* matrix from which entries not in band are removed */
diff --git a/CHOLMOD/Core/cholmod_change_factor.c b/CHOLMOD/Core/cholmod_change_factor.c
index cc90b0e..05032b7 100644
--- a/CHOLMOD/Core/cholmod_change_factor.c
+++ b/CHOLMOD/Core/cholmod_change_factor.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Change the numeric/symbolic, LL/LDL, simplicial/super, packed/unpacked,
diff --git a/CHOLMOD/Core/cholmod_common.c b/CHOLMOD/Core/cholmod_common.c
index 9b00b8d..eabcb93 100644
--- a/CHOLMOD/Core/cholmod_common.c
+++ b/CHOLMOD/Core/cholmod_common.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Core utility routines for the cholmod_common object:
@@ -57,6 +56,8 @@ int CHOLMOD(start)
     cholmod_common *Common
 )
 {
+    int k ;
+
     if (Common == NULL)
     {
 	return (FALSE) ;
@@ -86,41 +87,19 @@ int CHOLMOD(start)
     /* memory management routines */
     /* ---------------------------------------------------------------------- */
 
-    /* The user can replace cholmod's memory management routines by redefining
-     * these function pointers. */
-
-#ifndef NMALLOC
-    /* stand-alone ANSI C program */
-    Common->malloc_memory  = malloc ;
-    Common->free_memory    = free ;
-    Common->realloc_memory = realloc ;
-    Common->calloc_memory  = calloc ;
-#else
-    /* no memory manager defined at compile-time; MUST define one at run-time */
-    Common->malloc_memory  = NULL ;
-    Common->free_memory    = NULL ;
-    Common->realloc_memory = NULL ;
-    Common->calloc_memory  = NULL ;
-#endif
+        /* moved to SuiteSparse_config */
 
     /* ---------------------------------------------------------------------- */
     /* complex arithmetic routines */
     /* ---------------------------------------------------------------------- */
 
-    Common->complex_divide = CHOLMOD(divcomplex) ;
-    Common->hypotenuse = CHOLMOD(hypot) ;
+        /* moved to SuiteSparse_config */
 
     /* ---------------------------------------------------------------------- */
     /* print routine */
     /* ---------------------------------------------------------------------- */
 
-#ifndef NPRINT
-    /* stand-alone ANSI C program */
-    Common->print_function = printf ;
-#else
-    /* printing disabled */
-    Common->print_function = NULL ;
-#endif
+        /* moved to SuiteSparse_config */
 
     /* ---------------------------------------------------------------------- */
     /* workspace */
@@ -167,7 +146,84 @@ int CHOLMOD(start)
     /* Common->called_nd is TRUE if cholmod_analyze called or NESDIS */
     Common->called_nd = FALSE ;
 
+    Common->blas_ok = TRUE ;    /* false if BLAS int overflow occurs */
+
+    /* ---------------------------------------------------------------------- */
+    /* default SuiteSparseQR knobs and statististics */
+    /* ---------------------------------------------------------------------- */
+
+    for (k = 0 ; k < 10 ; k++) Common->SPQR_istat [k] = 0 ;
+
+    Common->SPQR_flopcount_bound = 0 ;   /* upper bound on flop count */
+    Common->SPQR_tol_used = 0 ;          /* tolerance used */
+    Common->SPQR_norm_E_fro = 0 ;        /* Frobenius norm of dropped entries */
+
+    Common->SPQR_grain = 1 ;    /* no Intel TBB multitasking, by default */
+    Common->SPQR_small = 1e6 ;  /* target min task size for TBB */
+    Common->SPQR_shrink = 1 ;   /* controls SPQR shrink realloc */
+    Common->SPQR_nthreads = 0 ; /* 0: let TBB decide how many threads to use */
+
+    Common->SPQR_flopcount = 0 ;         /* flop count for SPQR */
+    Common->SPQR_analyze_time = 0 ;      /* analysis time for SPQR */
+    Common->SPQR_factorize_time = 0 ;    /* factorize time for SPQR */
+    Common->SPQR_solve_time = 0 ;        /* backsolve time for SPQR */
+
+    /* ---------------------------------------------------------------------- */
+    /* GPU initializations */
+    /* ---------------------------------------------------------------------- */
+
+    /* these are destroyed by cholmod_gpu_deallocate and cholmod_gpu_end */
+    Common->cublasHandle = NULL ;
+    Common->cublasEventPotrf [0] = NULL ;
+    Common->cublasEventPotrf [1] = NULL ;
+    Common->cublasEventPotrf [2] = NULL ;
+    for (k = 0 ; k < CHOLMOD_HOST_SUPERNODE_BUFFERS ; k++)
+    {
+        Common->gpuStream [k] = NULL ;
+        Common->updateCBuffersFree [k] = NULL ;
+    }
+    Common->updateCKernelsComplete = NULL;
+
+    /* these are destroyed by cholmod_gpu_deallocate */
+    Common->dev_mempool = NULL;
+    Common->dev_mempool_size = 0;
+    Common->host_pinned_mempool = NULL;
+    Common->host_pinned_mempool_size = 0;
+
+    Common->syrkStart = 0 ;
+
+    Common->cholmod_cpu_gemm_time = 0 ;
+    Common->cholmod_cpu_syrk_time = 0 ;
+    Common->cholmod_cpu_trsm_time = 0 ;
+    Common->cholmod_cpu_potrf_time = 0 ;
+    Common->cholmod_gpu_gemm_time = 0 ;
+    Common->cholmod_gpu_syrk_time = 0 ;
+    Common->cholmod_gpu_trsm_time = 0 ;
+    Common->cholmod_gpu_potrf_time = 0 ;
+    Common->cholmod_assemble_time = 0 ;
+    Common->cholmod_assemble_time2 = 0 ;
+
+    Common->cholmod_cpu_gemm_calls = 0 ;
+    Common->cholmod_cpu_syrk_calls = 0 ;
+    Common->cholmod_cpu_trsm_calls = 0 ;
+    Common->cholmod_cpu_potrf_calls = 0 ;
+
+    Common->cholmod_gpu_gemm_calls = 0 ;
+    Common->cholmod_gpu_syrk_calls = 0 ;
+    Common->cholmod_gpu_trsm_calls = 0 ;
+    Common->cholmod_gpu_potrf_calls = 0 ;
+
+    Common->maxGpuMemBytes = 0;
+    Common->maxGpuMemFraction = 0.0;
+
+    /* SPQR statistics and settings */
+    Common->gpuMemorySize = 1 ;         /* default: no GPU memory available */
+    Common->gpuKernelTime = 0.0 ;
+    Common->gpuFlops = 0 ;
+    Common->gpuNumKernelLaunches = 0 ;
+
     DEBUG_INIT ("cholmod start", Common) ;
+
     return (TRUE) ;
 }
 
@@ -304,6 +360,17 @@ int CHOLMOD(defaults)
     /* COLAMD for A*A', AMD for A */
     Common->method [8].ordering = CHOLMOD_COLAMD ;
 
+    /* ---------------------------------------------------------------------- */
+    /* GPU configuration and statistics */
+    /* ---------------------------------------------------------------------- */
+
+#ifdef DLONG
+    Common->useGPU = EMPTY ;
+#else
+    /* GPU acceleration is not supported for int version of CHOLMOD */
+    Common->useGPU = 0 ;
+#endif
+
     return (TRUE) ;
 }
 
@@ -517,6 +584,10 @@ int CHOLMOD(free_work)
     Common->nrow = 0 ;
     Common->iworksize = 0 ;
     Common->xworksize = 0 ;
+
+#ifdef GPU_BLAS
+    CHOLMOD(gpu_deallocate) (Common) ;
+#endif
     return (TRUE) ;
 }
 
@@ -532,7 +603,7 @@ int CHOLMOD(free_work)
  * workspace: Flag (nrow).  Does not modify Flag if nrow is zero.
  */
 
-UF_long CHOLMOD(clear_flag)
+SuiteSparse_long CHOLMOD(clear_flag)
 (
     cholmod_common *Common
 )
@@ -655,3 +726,22 @@ double CHOLMOD(dbound)	/* returns modified diagonal entry of D */
     }
     return (dj) ;
 }
+
+
+/* ========================================================================== */
+/* === scorecomp ============================================================ */
+/* ========================================================================== */
+
+/* For sorting descendant supernodes with qsort */
+int CHOLMOD(score_comp) (struct cholmod_descendant_score_t *i, 
+			       struct cholmod_descendant_score_t *j)
+{
+  if ((*i).score < (*j).score)
+    {
+	return (1) ;
+    }
+    else
+    {
+	return (-1) ;
+    }
+}
diff --git a/CHOLMOD/Core/cholmod_complex.c b/CHOLMOD/Core/cholmod_complex.c
index 8bef584..b25a693 100644
--- a/CHOLMOD/Core/cholmod_complex.c
+++ b/CHOLMOD/Core/cholmod_complex.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* If you convert a matrix that contains uninitialized data, valgrind will
@@ -25,49 +24,9 @@
 /* === cholmod_hypot ======================================================== */
 /* ========================================================================== */
 
-/* There is an equivalent routine called hypot in <math.h>, which conforms
- * to ANSI C99.  However, CHOLMOD does not assume that ANSI C99 is available.
- * You can use the ANSI C99 hypot routine with:
- *
- *	#include <math.h>
- *	Common->hypotenuse = hypot ;
- *
- * Default value of the Common->hypotenuse pointer is cholmod_hypot.
- *
- * s = hypot (x,y) computes s = sqrt (x*x + y*y) but does so more accurately.
- * The NaN cases for the double relops x >= y and x+y == x are safely ignored.
- */
-
 double CHOLMOD(hypot) (double x, double y)
 {
-    double s, r ;
-    x = fabs (x) ;
-    y = fabs (y) ;
-    if (x >= y)
-    {
-	if (x + y == x)
-	{
-	    s = x ;
-	}
-	else
-	{
-	    r = y / x ;
-	    s = x * sqrt (1.0 + r*r) ;
-	}
-    }
-    else
-    {
-	if (y + x == y)
-	{
-	    s = y ;
-	}
-	else
-	{
-	    r = x / y ;
-	    s = y * sqrt (1.0 + r*r) ;
-	}
-    } 
-    return (s) ;
+    return (SuiteSparse_config.hypot_func (x, y)) ;
 }
 
 
@@ -87,7 +46,8 @@ double CHOLMOD(hypot) (double x, double y)
  *
  * c can be the same variable as a or b.
  *
- * Default value of the Common->complex_divide pointer is cholmod_divcomplex.
+ * Default value of the SuiteSparse_config.divcomplex_func pointer is
+ * SuiteSparse_divcomplex, located in SuiteSparse_config.c.
  */
 
 int CHOLMOD(divcomplex)
@@ -97,24 +57,7 @@ int CHOLMOD(divcomplex)
     double *cr, double *ci	/* real and imaginary parts of c */
 )
 {
-    double tr, ti, r, den ;
-    if (fabs (br) >= fabs (bi))
-    {
-	r = bi / br ;
-	den = br + r * bi ;
-	tr = (ar + ai * r) / den ;
-	ti = (ai - ar * r) / den ;
-    }
-    else
-    {
-	r = br / bi ;
-	den = r * br + bi ;
-	tr = (ar * r + ai) / den ;
-	ti = (ai * r - ar) / den ;
-    }
-    *cr = tr ;
-    *ci = ti ;
-    return (IS_ZERO (den)) ;
+    return (SuiteSparse_config.divcomplex_func (ar, ai, br, bi, cr, ci)) ;
 }
 
 
diff --git a/CHOLMOD/Core/cholmod_copy.c b/CHOLMOD/Core/cholmod_copy.c
index d4532ad..9ceb394 100644
--- a/CHOLMOD/Core/cholmod_copy.c
+++ b/CHOLMOD/Core/cholmod_copy.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* C = A, which allocates C and copies A into C, with possible change of
diff --git a/CHOLMOD/Core/cholmod_dense.c b/CHOLMOD/Core/cholmod_dense.c
index 57cb6de..c54ad67 100644
--- a/CHOLMOD/Core/cholmod_dense.c
+++ b/CHOLMOD/Core/cholmod_dense.c
@@ -3,12 +3,11 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Core Module.  Copyright (C) 2005-2006,
+ * CHOLMOD/Core Module.  Copyright (C) 2005-2013,
  * Univ. of Florida.  Author: Timothy A. Davis
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Core utility routines for the cholmod_dense object:
@@ -394,6 +393,53 @@ int CHOLMOD(free_dense)
     return (TRUE) ;
 }
 
+/* ========================================================================== */
+/* === cholmod_ensure_dense ================================================= */
+/* ========================================================================== */
+
+/* Ensure that the input matrix has a certain size and type.  If not, free
+ * the existing matrix and reallocate one of the right size and type.
+ * Returns a pointer to the cholmod_dense matrix, possibly reallocated.
+ * Also modifies the input matrix handle, XHandle, if necessary.
+ */
+
+cholmod_dense *CHOLMOD(ensure_dense)
+(
+    /* ---- input/output ---- */
+    cholmod_dense **XHandle,    /* matrix handle to check */
+    /* ---- input ---- */
+    size_t nrow,	/* # of rows of matrix */
+    size_t ncol,	/* # of columns of matrix */
+    size_t d,		/* leading dimension */
+    int xtype,		/* CHOLMOD_REAL, _COMPLEX, or _ZOMPLEX */
+    /* --------------- */
+    cholmod_common *Common
+)
+{
+    cholmod_dense *X ;
+
+    RETURN_IF_NULL_COMMON (NULL) ;
+    if (XHandle == NULL)
+    {
+        ERROR (CHOLMOD_INVALID, "matrix invalid") ;
+        return (NULL) ;
+    }
+
+    X = *XHandle ;
+    if (X == NULL || X->nrow != nrow || X->ncol != ncol
+        || X->d != d || X->xtype != xtype)
+    {
+        /* Matrix X is not allocated, or has the wrong size.  Free it and
+         * reallocate it in the right size and shape.  If an error occurs
+         * (out of memory or inputs nrow, etc invalid), then the error is
+         * set in cholmod_allocate_dense and X is returned as NULL. */
+        CHOLMOD(free_dense) (XHandle, Common) ;
+        X = CHOLMOD(allocate_dense) (nrow, ncol, d, xtype, Common) ;
+        *XHandle = X ;
+    }
+    return (X) ;
+}
+
 
 /* ========================================================================== */
 /* === cholmod_sparse_to_dense ============================================== */
diff --git a/CHOLMOD/Core/cholmod_error.c b/CHOLMOD/Core/cholmod_error.c
index b1e5d4c..e14887a 100644
--- a/CHOLMOD/Core/cholmod_error.c
+++ b/CHOLMOD/Core/cholmod_error.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD error-handling routine.  */
@@ -36,9 +35,9 @@ int CHOLMOD(error)
 (
     /* ---- input ---- */
     int status,		/* error status */
-    char *file,		/* name of source code file where error occured */ 
+    const char *file,	/* name of source code file where error occured */ 
     int line,		/* line number in source code file where error occured*/
-    char *message,	/* error message */
+    const char *message,    /* error message */
     /* --------------- */
     cholmod_common *Common
 )
@@ -52,17 +51,19 @@ int CHOLMOD(error)
 
 #ifndef NPRINT
 	/* print a warning or error message */
-	if (Common->print_function != NULL)
+	if (SuiteSparse_config.printf_func != NULL)
 	{
 	    if (status > 0 && Common->print > 1)
 	    {
-		(Common->print_function) ("CHOLMOD warning: %s\n", message) ;
+		SuiteSparse_config.printf_func ("CHOLMOD warning: %s\n",
+                    message) ;
 		fflush (stdout) ;
 		fflush (stderr) ;
 	    }
 	    else if (Common->print > 0)
 	    {
-		(Common->print_function) ("CHOLMOD error: %s\n", message) ;
+		SuiteSparse_config.printf_func ("CHOLMOD error: %s\n",
+                    message) ;
 		fflush (stdout) ;
 		fflush (stderr) ;
 	    }
diff --git a/CHOLMOD/Core/cholmod_factor.c b/CHOLMOD/Core/cholmod_factor.c
index 0185ce4..6dc020b 100644
--- a/CHOLMOD/Core/cholmod_factor.c
+++ b/CHOLMOD/Core/cholmod_factor.c
@@ -3,12 +3,11 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Core Module.  Copyright (C) 2005-2006,
+ * CHOLMOD/Core Module.  Copyright (C) 2005-2013,
  * Univ. of Florida.  Author: Timothy A. Davis
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Core utility routines for the cholmod_factor object:
@@ -110,6 +109,7 @@ cholmod_factor *CHOLMOD(allocate_factor)
     /* allocate the purely symbolic part of L */
     L->ordering = CHOLMOD_NATURAL ;
     L->Perm = CHOLMOD(malloc) (n, sizeof (Int), Common) ;
+    L->IPerm = NULL ;       /* only created by cholmod_solve2 when needed */
     L->ColCount = CHOLMOD(malloc) (n, sizeof (Int), Common) ;
 
     /* simplicial part of L is empty */
@@ -132,6 +132,7 @@ cholmod_factor *CHOLMOD(allocate_factor)
     L->pi = NULL ;
     L->px = NULL ;
     L->s = NULL ;
+    L->useGPU = 0;
 
     /* L has not been factorized */
     L->minor = n ;
@@ -200,6 +201,7 @@ int CHOLMOD(free_factor)
 
     /* symbolic part of L */
     CHOLMOD(free) (n,   sizeof (Int), L->Perm,     Common) ;
+    CHOLMOD(free) (n,   sizeof (Int), L->IPerm,    Common) ;
     CHOLMOD(free) (n,   sizeof (Int), L->ColCount, Common) ;
 
     /* simplicial form of L */
diff --git a/CHOLMOD/Core/cholmod_memory.c b/CHOLMOD/Core/cholmod_memory.c
index f6a1f00..17eb489 100644
--- a/CHOLMOD/Core/cholmod_memory.c
+++ b/CHOLMOD/Core/cholmod_memory.c
@@ -3,12 +3,11 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Core Module.  Copyright (C) 2005-2006,
+ * CHOLMOD/Core Module.  Copyright (C) 2005-2013,
  * Univ. of Florida.  Author: Timothy A. Davis
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Core memory management routines:
@@ -123,7 +122,9 @@ void *CHOLMOD(malloc)	/* returns pointer to the newly malloc'd block */
 {
     void *p ;
     size_t s ;
+    /*
     int ok = TRUE ;
+    */
 
     RETURN_IF_NULL_COMMON (NULL) ;
     if (size == 0)
@@ -140,8 +141,8 @@ void *CHOLMOD(malloc)	/* returns pointer to the newly malloc'd block */
     else
     {
 	/* call malloc, or its equivalent */
-	s = CHOLMOD(mult_size_t) (MAX (1,n), size, &ok) ;
-	p = ok ? ((Common->malloc_memory) (s)) : NULL ;
+	p = SuiteSparse_malloc (n, size) ;
+
 	if (p == NULL)
 	{
 	    /* failure: out of memory */
@@ -154,8 +155,9 @@ void *CHOLMOD(malloc)	/* returns pointer to the newly malloc'd block */
 	    Common->memory_inuse += (n * size) ;
 	    Common->memory_usage =
 		MAX (Common->memory_usage, Common->memory_inuse) ;
-	    PRINTM (("cholmod_malloc %p %d cnt: %d inuse %d\n",
-		    p, n*size, Common->malloc_count, Common->memory_inuse)) ;
+	    PRINTM (("cholmod_malloc %p %g cnt: %g inuse %g\n",
+		    p, (double) n*size, (double) Common->malloc_count,
+                    (double) Common->memory_inuse)) ;
 	}
     }
     return (p) ;
@@ -196,11 +198,13 @@ void *CHOLMOD(free)	/* always returns NULL */
     {
 	/* only free the object if the pointer is not NULL */
 	/* call free, or its equivalent */
-	(Common->free_memory) (p) ;
+	SuiteSparse_free (p) ;
+
 	Common->malloc_count-- ;
 	Common->memory_inuse -= (n * size) ;
-	PRINTM (("cholmod_free   %p %d cnt: %d inuse %d\n",
-		p, n*size, Common->malloc_count, Common->memory_inuse)) ;
+	PRINTM (("cholmod_free   %p %g cnt: %g inuse %g\n",
+		p, (double) n*size, (double) Common->malloc_count,
+                (double) Common->memory_inuse)) ;
 	/* This assertion will fail if the user calls cholmod_malloc and
 	 * cholmod_free with mismatched memory sizes.  It shouldn't fail
 	 * otherwise. */
@@ -249,7 +253,8 @@ void *CHOLMOD(calloc)	/* returns pointer to the newly calloc'd block */
     else
     {
 	/* call calloc, or its equivalent */
-	p = (Common->calloc_memory) (MAX (1,n), size) ;
+	p = SuiteSparse_calloc (n, size) ;
+
 	if (p == NULL)
 	{
 	    /* failure: out of memory */
@@ -262,8 +267,9 @@ void *CHOLMOD(calloc)	/* returns pointer to the newly calloc'd block */
 	    Common->memory_inuse += (n * size) ;
 	    Common->memory_usage =
 		MAX (Common->memory_usage, Common->memory_inuse) ;
-	    PRINTM (("cholmod_calloc %p %d cnt: %d inuse %d\n",
-		    p, n*size, Common->malloc_count, Common->memory_inuse)) ;
+	    PRINTM (("cholmod_malloc %p %g cnt: %g inuse %g\n",
+		    p, (double) n*size, (double) Common->malloc_count,
+                    (double) Common->memory_inuse)) ;
 	}
     }
     return (p) ;
@@ -336,50 +342,27 @@ void *CHOLMOD(realloc)	/* returns pointer to reallocated block */
 	/* The object exists, and is changing to some other nonzero size. */
 	/* call realloc, or its equivalent */
 	PRINT1 (("realloc : %d to %d, %d\n", nold, nnew, size)) ;
-	pnew = NULL ;
-
-	s = CHOLMOD(mult_size_t) (MAX (1,nnew), size, &ok) ;
-	pnew = ok ? ((Common->realloc_memory) (p, s)) : NULL ;
-
-	if (pnew == NULL)
-	{
-	    /* Do not change p, since it still points to allocated memory */
-	    if (nnew <= nold)
-	    {
-		/* The attempt to reduce the size of the block from n to
-		 * nnew has failed.  The current block is not modified, so
-		 * pretend to succeed, but do not change p.  Do change
-		 * CHOLMOD's notion of the size of the block, however. */
-		*n = nnew ;
-		PRINTM (("nnew <= nold failed, pretend to succeed\n")) ;
-		PRINTM (("cholmod_realloc_old: %p %d cnt: %d inuse %d\n"
-			 "cholmod_realloc_new: %p %d cnt: %d inuse %d\n",
-		    p, nold*size, Common->malloc_count-1,
-				  Common->memory_inuse - nold*size,
-		    p, nnew*size, Common->malloc_count,
-				  Common->memory_inuse + (nnew-nold)*size)) ;
-		Common->memory_inuse += ((nnew-nold) * size) ;
-	    }
-	    else
-	    {
-		/* Increasing the size of the block has failed.
-		 * Do not change n. */
-		ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
-	    }
-	}
-	else
-	{
+        pnew = SuiteSparse_realloc (nnew, nold, size, p, &ok) ;
+        if (ok)
+        {
 	    /* success: return revised p and change the size of the block */
-	    PRINTM (("cholmod_realloc_old: %p %d cnt: %d inuse %d\n"
-		     "cholmod_realloc_new: %p %d cnt: %d inuse %d\n",
-		p, nold*size,    Common->malloc_count-1,
-				 Common->memory_inuse - nold*size,
-		pnew, nnew*size, Common->malloc_count,
-				 Common->memory_inuse + (nnew-nold)*size)) ;
+	    PRINTM (("cholmod_free %p %g cnt: %g inuse %g\n"
+		     "cholmod_malloc %p %g cnt: %g inuse %g\n",
+		p, (double) nold*size, (double) Common->malloc_count-1,
+                   (double) (Common->memory_inuse - nold*size),
+		pnew, (double) nnew*size, (double) Common->malloc_count,
+                   (double) (Common->memory_inuse + (nnew-nold)*size))) ;
 	    p = pnew ;
 	    *n = nnew ;
 	    Common->memory_inuse += ((nnew-nold) * size) ;
 	}
+        else
+        {
+            /* Increasing the size of the block has failed.
+             * Do not change n. */
+            ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+        }
+
 	Common->memory_usage = MAX (Common->memory_usage, Common->memory_inuse);
     }
 
@@ -401,13 +384,13 @@ int CHOLMOD(realloc_multiple)
 (
     /* ---- input ---- */
     size_t nnew,	/* requested # of items in reallocated blocks */
-    int nint,		/* number of int/UF_long blocks */
+    int nint,		/* number of int/SuiteSparse_long blocks */
     int xtype,		/* CHOLMOD_PATTERN, _REAL, _COMPLEX, or _ZOMPLEX */
     /* ---- in/out --- */
-    void **I,		/* int or UF_long block */
-    void **J,		/* int or UF_long block */
-    void **X,		/* complex or double block */
-    void **Z,		/* zomplex case only: double block */
+    void **Iblock,	/* int or SuiteSparse_long block */
+    void **Jblock,	/* int or SuiteSparse_long block */
+    void **Xblock,	/* complex or double block */
+    void **Zblock,	/* zomplex case only: double block */
     size_t *nold_p,	/* current size of the I,J,X,Z blocks on input,
 			 * nnew on output if successful */
     /* --------------- */
@@ -440,26 +423,30 @@ int CHOLMOD(realloc_multiple)
 
     if (nint > 0)
     {
-	*I = CHOLMOD(realloc) (nnew, sizeof (Int), *I, &i, Common) ;
+	*Iblock = CHOLMOD(realloc) (nnew, sizeof (Int), *Iblock, &i, Common) ;
     }
     if (nint > 1)
     {
-	*J = CHOLMOD(realloc) (nnew, sizeof (Int), *J, &j, Common) ;
+	*Jblock = CHOLMOD(realloc) (nnew, sizeof (Int), *Jblock, &j, Common) ;
     }
 
     switch (xtype)
     {
 	case CHOLMOD_REAL:
-	    *X = CHOLMOD(realloc) (nnew, sizeof (double), *X, &x, Common) ;
+	    *Xblock = CHOLMOD(realloc) (nnew, sizeof (double), *Xblock, &x,
+                    Common) ;
 	    break ;
 
 	case CHOLMOD_COMPLEX:
-	    *X = CHOLMOD(realloc) (nnew, 2*sizeof (double), *X, &x, Common) ;
+	    *Xblock = CHOLMOD(realloc) (nnew, 2*sizeof (double), *Xblock, &x,
+                    Common) ;
 	    break ;
 
 	case CHOLMOD_ZOMPLEX:
-	    *X = CHOLMOD(realloc) (nnew, sizeof (double), *X, &x, Common) ;
-	    *Z = CHOLMOD(realloc) (nnew, sizeof (double), *Z, &z, Common) ;
+	    *Xblock = CHOLMOD(realloc) (nnew, sizeof (double), *Xblock, &x,
+                    Common) ;
+	    *Zblock = CHOLMOD(realloc) (nnew, sizeof (double), *Zblock, &z,
+                    Common) ;
 	    break ;
     }
 
@@ -472,26 +459,30 @@ int CHOLMOD(realloc_multiple)
 
 	    if (nint > 0)
 	    {
-		*I = CHOLMOD(free) (i, sizeof (Int), *I, Common) ;
+		*Iblock = CHOLMOD(free) (i, sizeof (Int), *Iblock, Common) ;
 	    }
 	    if (nint > 1)
 	    {
-		*J = CHOLMOD(free) (j, sizeof (Int), *J, Common) ;
+		*Jblock = CHOLMOD(free) (j, sizeof (Int), *Jblock, Common) ;
 	    }
 
 	    switch (xtype)
 	    {
 		case CHOLMOD_REAL:
-		    *X = CHOLMOD(free) (x, sizeof (double), *X, Common) ;
+		    *Xblock = CHOLMOD(free) (x, sizeof (double), *Xblock,
+                            Common) ;
 		    break ;
 
 		case CHOLMOD_COMPLEX:
-		    *X = CHOLMOD(free) (x, 2*sizeof (double), *X, Common) ;
+		    *Xblock = CHOLMOD(free) (x, 2*sizeof (double), *Xblock,
+                            Common) ;
 		    break ;
 
 		case CHOLMOD_ZOMPLEX:
-		    *X = CHOLMOD(free) (x, sizeof (double), *X, Common) ;
-		    *Z = CHOLMOD(free) (x, sizeof (double), *Z, Common) ;
+		    *Xblock = CHOLMOD(free) (x, sizeof (double), *Xblock,
+                            Common) ;
+		    *Zblock = CHOLMOD(free) (x, sizeof (double), *Zblock,
+                            Common) ;
 		    break ;
 	    }
 
@@ -500,30 +491,32 @@ int CHOLMOD(realloc_multiple)
 	{
 	    if (nint > 0)
 	    {
-		*I = CHOLMOD(realloc) (nold, sizeof (Int), *I, &i, Common) ;
+		*Iblock = CHOLMOD(realloc) (nold, sizeof (Int), *Iblock, &i,
+                            Common) ;
 	    }
 	    if (nint > 1)
 	    {
-		*J = CHOLMOD(realloc) (nold, sizeof (Int), *J, &j, Common) ;
+		*Jblock = CHOLMOD(realloc) (nold, sizeof (Int), *Jblock, &j,
+                            Common) ;
 	    }
 
 	    switch (xtype)
 	    {
 		case CHOLMOD_REAL:
-		    *X = CHOLMOD(realloc) (nold, sizeof (double), *X, &x,
-			    Common) ;
+		    *Xblock = CHOLMOD(realloc) (nold, sizeof (double),
+                            *Xblock, &x, Common) ;
 		    break ;
 
 		case CHOLMOD_COMPLEX:
-		    *X = CHOLMOD(realloc) (nold, 2*sizeof (double), *X, &x,
-			    Common) ;
+		    *Xblock = CHOLMOD(realloc) (nold, 2*sizeof (double),
+                            *Xblock, &x, Common) ;
 		    break ;
 
 		case CHOLMOD_ZOMPLEX:
-		    *X = CHOLMOD(realloc) (nold, sizeof (double), *X, &x,
-			    Common) ;
-		    *Z = CHOLMOD(realloc) (nold, sizeof (double), *Z, &z,
-			    Common) ;
+		    *Xblock = CHOLMOD(realloc) (nold, sizeof (double),
+                            *Xblock, &x, Common) ;
+		    *Zblock = CHOLMOD(realloc) (nold, sizeof (double),
+                            *Zblock, &z, Common) ;
 		    break ;
 	    }
 
@@ -537,8 +530,8 @@ int CHOLMOD(realloc_multiple)
 	/* New space was allocated.  Clear the first entry so that valgrind
 	 * doesn't complain about its access in change_complexity
 	 * (Core/cholmod_complex.c). */
-	xx = *X ;
-	zz = *Z ;
+	xx = *Xblock ;
+	zz = *Zblock ;
 	switch (xtype)
 	{
 	    case CHOLMOD_REAL:
diff --git a/CHOLMOD/Core/cholmod_sparse.c b/CHOLMOD/Core/cholmod_sparse.c
index 059f855..557dbc1 100644
--- a/CHOLMOD/Core/cholmod_sparse.c
+++ b/CHOLMOD/Core/cholmod_sparse.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Core utility routines for the cholmod_sparse object:
@@ -414,7 +413,7 @@ cholmod_sparse *CHOLMOD(spzeros)
  * integer overflow cannot occur, since the matrix is already allocated.
  */
 
-UF_long CHOLMOD(nnz)
+SuiteSparse_long CHOLMOD(nnz)
 (
     /* ---- input ---- */
     cholmod_sparse *A,
diff --git a/CHOLMOD/Core/cholmod_transpose.c b/CHOLMOD/Core/cholmod_transpose.c
index 7e94aa8..51a7035 100644
--- a/CHOLMOD/Core/cholmod_transpose.c
+++ b/CHOLMOD/Core/cholmod_transpose.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Core utility routines for the cholmod_sparse object to
diff --git a/CHOLMOD/Core/cholmod_triplet.c b/CHOLMOD/Core/cholmod_triplet.c
index 5ce7ad8..a5f39b2 100644
--- a/CHOLMOD/Core/cholmod_triplet.c
+++ b/CHOLMOD/Core/cholmod_triplet.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Core utility routines for the cholmod_triplet object:
diff --git a/CHOLMOD/Core/cholmod_version.c b/CHOLMOD/Core/cholmod_version.c
new file mode 100644
index 0000000..0cc034e
--- /dev/null
+++ b/CHOLMOD/Core/cholmod_version.c
@@ -0,0 +1,37 @@
+/* ========================================================================== */
+/* === Core/cholmod_version ================================================= */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/Core Module.  Copyright (C) 2005-2013,
+ * Univ. of Florida.  Author: Timothy A. Davis
+ * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
+ * Lesser General Public License.  See lesser.txt for a text of the license.
+ * CHOLMOD is also available under other licenses; contact authors for details.
+ * -------------------------------------------------------------------------- */
+
+/* Return the current version of CHOLMOD.  Unlike all other functions in
+   CHOLMOD, this function does not require the CHOLMOD Common. */
+
+#include "cholmod_internal.h"
+#include "cholmod_core.h"
+
+int CHOLMOD(version)        /* returns CHOLMOD_VERSION */
+(
+    /* output, contents not defined on input.  Not used if NULL.
+        version [0] = CHOLMOD_MAIN_VERSION ;
+        version [1] = CHOLMOD_SUB_VERSION ;
+        version [2] = CHOLMOD_SUBSUB_VERSION ;
+    */
+    int version [3]
+)
+{
+    if (version != NULL)
+    {
+        version [0] = CHOLMOD_MAIN_VERSION ;
+        version [1] = CHOLMOD_SUB_VERSION ;
+        version [2] = CHOLMOD_SUBSUB_VERSION ;
+    }
+    return (CHOLMOD_VERSION) ;
+}
+
diff --git a/CHOLMOD/Core/t_cholmod_change_factor.c b/CHOLMOD/Core/t_cholmod_change_factor.c
index 548f883..dd49b44 100644
--- a/CHOLMOD/Core/t_cholmod_change_factor.c
+++ b/CHOLMOD/Core/t_cholmod_change_factor.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_change_factor.  All xtypes supported. */
diff --git a/CHOLMOD/Core/t_cholmod_dense.c b/CHOLMOD/Core/t_cholmod_dense.c
index 6be9e6d..6f3f270 100644
--- a/CHOLMOD/Core/t_cholmod_dense.c
+++ b/CHOLMOD/Core/t_cholmod_dense.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_dense.  All xtypes supported, except that there
diff --git a/CHOLMOD/Core/t_cholmod_transpose.c b/CHOLMOD/Core/t_cholmod_transpose.c
index f36a20b..a5dd849 100644
--- a/CHOLMOD/Core/t_cholmod_transpose.c
+++ b/CHOLMOD/Core/t_cholmod_transpose.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_transpose.  All xtypes are supported.  For
diff --git a/CHOLMOD/Core/t_cholmod_triplet.c b/CHOLMOD/Core/t_cholmod_triplet.c
index d917175..d2b1c82 100644
--- a/CHOLMOD/Core/t_cholmod_triplet.c
+++ b/CHOLMOD/Core/t_cholmod_triplet.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_triplet.  All xtypes supported */
diff --git a/CHOLMOD/Demo/License.txt b/CHOLMOD/Demo/License.txt
index 256c3e0..437ce82 100644
--- a/CHOLMOD/Demo/License.txt
+++ b/CHOLMOD/Demo/License.txt
@@ -1,6 +1,6 @@
 CHOLMOD/Demo Module.  Copyright (C) 2005-2006, Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Demo module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Demo/Makefile b/CHOLMOD/Demo/Makefile
index 3681f0b..894aaee 100644
--- a/CHOLMOD/Demo/Makefile
+++ b/CHOLMOD/Demo/Makefile
@@ -7,19 +7,55 @@
 
 default: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 #-------------------------------------------------------------------------------
-# With METIS, CCOLAMD, CAMD, and the Partition Module:
+# the optional Partition module requires METIS, CAMD, and CCOLAMD.
+# CAMD and CCOLAMD can be installed without METIS, but are optional.
+I_WITH_PARTITION = 
+LIB_WITH_PARTITION =
+CONFIG = -DNPARTITION -DNCAMD
+# check if CAMD/CCOLAMD and METIS are requested and available
+ifeq (,$(findstring -DNCAMD, $(CHOLMOD_CONFIG)))
+    # CAMD and CCOLAMD are requested.  See if they are available
+    ifeq (../../CAMD, $(wildcard ../../CAMD))
+        ifeq (../../CCOLAMD, $(wildcard ../../CCOLAMD))
+            # CAMD and CCOLAMD are requested and available
+            LIB_WITH_PARTITION = \
+                        ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a
+            I_WITH_PARTITION = \
+                        -I../../CCOLAMD/Include -I../../CAMD/Include
+            CONFIG = -DNPARTITION
+            # check if METIS is requested and available
+            ifeq (,$(findstring -DNPARTITION, $(CHOLMOD_CONFIG)))
+                # METIS is requested.  See if it is available
+                ifeq ($(METIS_PATH), $(wildcard $(METIS_PATH)))
+                    # METIS is available
+                    LIB_WITH_PARTITION = $(METIS) \
+                        ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a
+                    I_WITH_PARTITION = -I$(METIS_PATH)/Lib \
+                        -I../../CCOLAMD/Include -I../../CAMD/Include
+                    CONFIG =
+                endif
+            endif
+        endif
+    endif
+endif
+
+#-------------------------------------------------------------------------------
+
 LIB2 = ../Lib/libcholmod.a ../../AMD/Lib/libamd.a ../../COLAMD/Lib/libcolamd.a \
-	../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a \
-	$(METIS) $(LAPACK) $(BLAS) $(XERBLA) $(LIB)
-# Use this instead, if you compile with -DNPARTITION:
-# LIB2 = ../Lib/libcholmod.a ../../AMD/Lib/libamd.a ../../COLAMD/libcolamd.a \
-	$(LAPACK) $(BLAS) $(XERBLA) $(LIB)
+        ../../SuiteSparse_config/libsuitesparseconfig.a \
+	$(LIB_WITH_PARTITION) $(LAPACK) $(BLAS) $(XERBLA) $(LIB)
+
+#-------------------------------------------------------------------------------
+# With the CUDA BLAS:
+ifneq ($(GPU_CONFIG),)
+LIB2 += $(CUDART_LIB) $(CUBLAS_LIB)
+endif
 #-------------------------------------------------------------------------------
 
-C = $(CC) $(CFLAGS) $(CHOLMOD_CONFIG)
+C = $(CC) $(CF) $(CHOLMOD_CONFIG) $(CONFIG)
 
 code: library cholmod_demo cholmod_l_demo cholmod_simple
 
@@ -38,11 +74,17 @@ all: code
 	./cholmod_simple < Matrix/can___24.mtx
 	./cholmod_simple < Matrix/bcsstk01.tri
 
+# run on a big matrix.  This exercises the GPU, if compiled to exploit it
+big: code
+	tcsh gpu.sh
+
 distclean: purge
 
 purge: clean
 	- $(RM) cholmod_demo cholmod_l_demo readhb readhb2 reade
 	- $(RM) cholmod_simple
+	- $(RM) timelog.m
+	- $(RM) -r *.dSYM
 
 clean:
 	- $(RM) $(CLEAN)
@@ -50,21 +92,24 @@ clean:
 #-------------------------------------------------------------------------------
 # See below if you compile with -DNPARTITION
 library:
-	( cd ../../UFconfig/xerbla ; $(MAKE) )
+	( cd ../../SuiteSparse_config/xerbla ; $(MAKE) )
+	( cd ../../SuiteSparse_config ; $(MAKE) )
 	( cd ../Lib ; $(MAKE) )
 	( cd ../../AMD ; $(MAKE) library )
-	( cd ../../CAMD ; $(MAKE) library )
 	( cd ../../COLAMD ; $(MAKE) library )
+ifneq (,$(findstring -DCAMD, $(CONFIG)))
+else
 	( cd ../../CCOLAMD ; $(MAKE) library )
-# use this rule instead, if you compile with -DNPARTITION:
-# library:
-# 	( cd ../../UFconfig/xerbla ; $(MAKE) )
-# 	( cd ../Lib ; $(MAKE) )
-# 	( cd ../../AMD ; $(MAKE) library )
-# 	( cd ../../COLAMD ; $(MAKE) )
+	( cd ../../CAMD ; $(MAKE) library )
+endif
+ifneq (,$(findstring -DNPARTITION, $(CONFIG)))
+else
+	( cd $(METIS_PATH) && $(MAKE) )
+endif
+
 #-------------------------------------------------------------------------------
 
-I = -I../Include -I../../UFconfig
+I = -I../Include -I../../SuiteSparse_config
 
 cholmod_demo: library cholmod_demo.c cholmod_demo.h
 	$(C) -o cholmod_demo $(I) cholmod_demo.c $(LIB2)
diff --git a/CHOLMOD/Demo/Matrix/two.tri b/CHOLMOD/Demo/Matrix/two.tri
new file mode 100644
index 0000000..16020f8
--- /dev/null
+++ b/CHOLMOD/Demo/Matrix/two.tri
@@ -0,0 +1,5 @@
+%%MatrixMarket matrix coord real symmetric
+2 2 3
+1 1 3
+2 1 -1
+2 2 3
diff --git a/CHOLMOD/Demo/cholmod_demo.c b/CHOLMOD/Demo/cholmod_demo.c
index 73dbacf..88ec4e2 100644
--- a/CHOLMOD/Demo/cholmod_demo.c
+++ b/CHOLMOD/Demo/cholmod_demo.c
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Demo Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Demo Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Demo Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Read in a matrix from a file, and use CHOLMOD to solve Ax=b if A is
@@ -30,15 +29,20 @@
  * Does not use the Modify Module.
  *
  * See cholmod_simple.c for a simpler demo program.
+ *
+ * cholmod_demo is the same as cholmod_l_demo, except for the size of the
+ * basic integer (int vs SuiteSparse_long)
  */
 
 #include "cholmod_demo.h"
+#define NTRIALS 100
 
 /* ff is a global variable so that it can be closed by my_handler */
 FILE *ff ;
 
 /* halt if an error occurs */
-static void my_handler (int status, char *file, int line, char *message)
+static void my_handler (int status, const char *file, int line,
+    const char *message)
 {
     printf ("cholmod error: file: %s line: %d status: %d: %s\n",
 	    file, line, status, message) ;
@@ -51,16 +55,22 @@ static void my_handler (int status, char *file, int line, char *message)
 
 int main (int argc, char **argv)
 {
-    double resid, t, ta, tf, ts, tot, bnorm, xnorm, anorm, rnorm, fl, anz, 
-	axbnorm, rnorm2, resid2 ;
+    double resid [4], t, ta, tf, ts [3], tot, bnorm, xnorm, anorm, rnorm, fl,
+        anz, axbnorm, rnorm2, resid2, rcond ;
     FILE *f ;
     cholmod_sparse *A ;
-    cholmod_dense *X, *B, *W, *R ;
+    cholmod_dense *X = NULL, *B, *W, *R ;
     double one [2], zero [2], minusone [2], beta [2], xlnz ;
     cholmod_common Common, *cm ;
     cholmod_factor *L ;
     double *Bx, *Rx, *Xx ;
     int i, n, isize, xsize, ordering, xtype, s, ss, lnz ;
+    int trial, method, L_is_super ;
+    int ver [3] ;
+
+    ts[0] = 0.;
+    ts[1] = 0.;
+    ts[2] = 0.;
 
     /* ---------------------------------------------------------------------- */
     /* get the file containing the input matrix */
@@ -87,6 +97,7 @@ int main (int argc, char **argv)
 
     cm = &Common ;
     cholmod_start (cm) ;
+    CHOLMOD_FUNCTION_DEFAULTS (cm) ;    /* just for testing (not required) */
 
     /* use default parameter settings, except for the error handler.  This
      * demo program terminates if an error occurs (out of memory, not positive
@@ -116,8 +127,16 @@ int main (int argc, char **argv)
     /* ---------------------------------------------------------------------- */
 
     printf ("\n---------------------------------- cholmod_demo:\n") ;
+    cholmod_version (ver) ;
+    printf ("cholmod version %d.%d.%d\n", ver [0], ver [1], ver [2]) ;
+    SuiteSparse_version (ver) ;
+    printf ("SuiteSparse version %d.%d.%d\n", ver [0], ver [1], ver [2]) ;
     A = cholmod_read_sparse (f, cm) ;
-    if (ff != NULL) fclose (ff) ;
+    if (ff != NULL)
+    {
+        fclose (ff) ;
+        ff = NULL ;
+    }
     anorm = cholmod_norm_sparse (A, 0, cm) ;
     xtype = A->xtype ;
     printf ("norm (A,inf) = %g\n", anorm) ;
@@ -176,7 +195,7 @@ int main (int argc, char **argv)
     printf ("bnorm %g\n", bnorm) ;
 
     /* ---------------------------------------------------------------------- */
-    /* analyze, factorize, and solve */
+    /* analyze and factorize */
     /* ---------------------------------------------------------------------- */
 
     t = CPUTIME ;
@@ -203,58 +222,279 @@ int main (int argc, char **argv)
 	tf = MAX (tf, 0) ;
     }
 
-    t = CPUTIME ;
+    cholmod_print_factor (L, "L", cm) ;
 
-    X = cholmod_solve (CHOLMOD_A, L, B, cm) ;
-    ts = CPUTIME - t ;
-    ts = MAX (ts, 0) ;
-    tot = ta + tf + ts ;
+    /* determine the # of integers's and reals's in L.  See cholmod_free */
+    if (L->is_super)
+    {
+	s = L->nsuper + 1 ;
+	xsize = L->xsize ;
+	ss = L->ssize ;
+	isize =
+	    n	/* L->Perm */
+	    + n	/* L->ColCount, nz in each column of 'pure' L */
+	    + s	/* L->pi, column pointers for L->s */
+	    + s	/* L->px, column pointers for L->x */
+	    + s	/* L->super, starting column index of each supernode */
+	    + ss ;	/* L->s, the pattern of the supernodes */
+    }
+    else
+    {
+	/* this space can increase if you change parameters to their non-
+	 * default values (cm->final_pack, for example). */
+	lnz = L->nzmax ;
+	xsize = lnz ;
+	isize =
+	    n	/* L->Perm */
+	    + n	/* L->ColCount, nz in each column of 'pure' L */
+	    + n+1	/* L->p, column pointers */
+	    + lnz	/* L->i, integer row indices */
+	    + n	/* L->nz, nz in each column of L */
+	    + n+2	/* L->next, link list */
+	    + n+2 ;	/* L->prev, link list */
+    }
+
+    /* solve with Bset will change L from simplicial to supernodal */
+    rcond = cholmod_rcond (L, cm) ;
+    L_is_super = L->is_super ;
 
     /* ---------------------------------------------------------------------- */
-    /* compute the residual */
+    /* solve */
     /* ---------------------------------------------------------------------- */
 
-    if (A->stype == 0)
-    {
-	/* (AA'+beta*I)x=b is the linear system that was solved */
-	/* W = A'*X */
-	W = cholmod_allocate_dense (A->ncol, 1, A->ncol, xtype, cm) ;
-	cholmod_sdmult (A, 2, one, zero, X, W, cm) ;
-	/* R = B - beta*X */
-	R = cholmod_zeros (n, 1, xtype, cm) ;
-	Rx = R->x ;
-	Xx = X->x ;
-	if (xtype == CHOLMOD_REAL)
-	{
-	    for (i = 0 ; i < n ; i++)
-	    {
-		Rx [i] = Bx [i] - beta [0] * Xx [i] ;
-	    }
-	}
-	else
-	{
-	    /* complex case */
-	    for (i = 0 ; i < n ; i++)
-	    {
-		Rx [2*i  ] = Bx [2*i  ] - beta [0] * Xx [2*i  ] ;
-		Rx [2*i+1] = Bx [2*i+1] - beta [0] * Xx [2*i+1] ;
-	    }
-	}
-	/* R = A*W - R */
-	cholmod_sdmult (A, 0, one, minusone, W, R, cm) ;
-	cholmod_free_dense (&W, cm) ;
-    }
-    else
+    for (method = 0 ; method <= 3 ; method++)
     {
-	/* Ax=b was factorized and solved, R = B-A*X */
-	R = cholmod_copy_dense (B, cm) ;
-	cholmod_sdmult (A, 0, minusone, one, X, R, cm) ;
+        double x = n ;
+
+        if (method == 0)
+        {
+            /* basic solve, just once */
+            t = CPUTIME ;
+            X = cholmod_solve (CHOLMOD_A, L, B, cm) ;
+            ts [0] = CPUTIME - t ;
+            ts [0] = MAX (ts [0], 0) ;
+        }
+        else if (method == 1)
+        {
+            /* basic solve, many times, but keep the last one */
+            t = CPUTIME ;
+            for (trial = 0 ; trial < NTRIALS ; trial++)
+            {
+                cholmod_free_dense (&X, cm) ;
+                Bx [0] = 1 + trial / x ;        /* tweak B each iteration */
+                X = cholmod_solve (CHOLMOD_A, L, B, cm) ;
+            }
+            ts [1] = CPUTIME - t ;
+            ts [1] = MAX (ts [1], 0) / NTRIALS ;
+        }
+        else if (method == 2)
+        {
+            /* solve with reused workspace */
+            cholmod_dense *Ywork = NULL, *Ework = NULL ;
+            cholmod_free_dense (&X, cm) ;
+
+            t = CPUTIME ;
+            for (trial = 0 ; trial < NTRIALS ; trial++)
+            {
+                Bx [0] = 1 + trial / x ;        /* tweak B each iteration */
+                cholmod_solve2 (CHOLMOD_A, L, B, NULL, &X, NULL,
+                    &Ywork, &Ework, cm) ;
+            }
+            cholmod_free_dense (&Ywork, cm) ;
+            cholmod_free_dense (&Ework, cm) ;
+            ts [2] = CPUTIME - t ;
+            ts [2] = MAX (ts [2], 0) / NTRIALS ;
+        }
+        else
+        {
+            /* solve with reused workspace and sparse Bset */
+            cholmod_dense *Ywork = NULL, *Ework = NULL ;
+            cholmod_dense *X2 = NULL, *B2 = NULL ;
+            cholmod_sparse *Bset, *Xset = NULL ;
+            int *Bsetp, *Bseti, *Xsetp, *Xseti, xlen, j, k, *Lnz ;
+            double *X1x, *X2x, *B2x, err ;
+            FILE *timelog = fopen ("timelog.m", "w") ;
+            if (timelog) fprintf (timelog, "results = [\n") ;
+
+            B2 = cholmod_zeros (n, 1, xtype, cm) ;
+            B2x = B2->x ;
+
+            Bset = cholmod_allocate_sparse (n, 1, 1, FALSE, TRUE, 0,
+                CHOLMOD_PATTERN, cm) ;
+            Bsetp = Bset->p ;
+            Bseti = Bset->i ;
+            Bsetp [0] = 0 ;     /* nnz(B) is 1 (it can be anything) */
+            Bsetp [1] = 1 ;
+            resid [3] = 0 ;
+
+            for (i = 0 ; i < MIN (100,n) ; i++)
+            {
+                /* B (i) is nonzero, all other entries are ignored
+                   (implied to be zero) */
+                Bseti [0] = i ;
+                if (xtype == CHOLMOD_REAL)
+                {
+                    B2x [i] = 3.1 * i + 0.9 ;
+                }
+                else
+                {
+                    B2x [2*i  ] = i + 0.042 ;
+                    B2x [2*i+1] = i - 92.7 ;
+                }
+
+                /* first get the entire solution, to compare against */
+                cholmod_solve2 (CHOLMOD_A, L, B2, NULL, &X, NULL,
+                    &Ywork, &Ework, cm) ;
+
+                /* now get the sparse solutions; this will change L from
+                   supernodal to simplicial */
+
+                if (i == 0)
+                {
+                    /* first solve can be slower because it has to allocate
+                       space for X2, Xset, etc, and change L.
+                       So don't time it */
+                    cholmod_solve2 (CHOLMOD_A, L, B2, Bset, &X2, &Xset,
+                        &Ywork, &Ework, cm) ;
+                }
+
+                t = CPUTIME ;
+                for (trial = 0 ; trial < NTRIALS ; trial++)
+                {
+                    /* solve Ax=b but only to get x(i).
+                       b is all zero except for b(i).
+                       This takes O(xlen) time */
+                    cholmod_solve2 (CHOLMOD_A, L, B2, Bset, &X2, &Xset,
+                        &Ywork, &Ework, cm) ;
+                }
+                t = CPUTIME - t ;
+                t = MAX (t, 0) / NTRIALS ;
+
+                /* check the solution and log the time */
+                Xsetp = Xset->p ;
+                Xseti = Xset->i ;
+                xlen = Xsetp [1] ;
+                X1x = X->x ;
+                X2x = X2->x ;
+                Lnz = L->nz ;
+
+                /*
+                printf ("\ni %d xlen %d  (%p %p)\n", i, xlen, X1x, X2x) ;
+                */
+
+                if (xtype == CHOLMOD_REAL)
+                {
+                    fl = 2 * xlen ;
+                    for (k = 0 ; k < xlen ; k++)
+                    {
+                        j = Xseti [k] ;
+                        fl += 4 * Lnz [j] ;
+                        err = X1x [j] - X2x [j] ;
+                        err = ABS (err) ;
+                        resid [3] = MAX (resid [3], err) ;
+                    }
+                }
+                else
+                {
+                    fl = 16 * xlen ;
+                    for (k = 0 ; k < xlen ; k++)
+                    {
+                        j = Xseti [k] ;
+                        fl += 16 * Lnz [j] ;
+                        err = X1x [2*j  ] - X2x [2*j  ] ;
+                        err = ABS (err) ;
+                        resid [3] = MAX (resid [3], err) ;
+                        err = X1x [2*j+1] - X2x [2*j+1] ;
+                        err = ABS (err) ;
+                        resid [3] = MAX (resid [3], err) ;
+                    }
+                }
+                if (timelog) fprintf (timelog, "%g %g %g %g\n",
+                    (double) i, (double) xlen, fl, t);
+
+                /* clear B for the next test */
+                if (xtype == CHOLMOD_REAL)
+                {
+                    B2x [i] = 0 ;
+                }
+                else
+                {
+                    B2x [2*i  ] = 0 ;
+                    B2x [2*i+1] = 0 ;
+                }
+
+            }
+
+            if (timelog)
+            {
+                fprintf (timelog, "] ; resid = %g ;\n", resid [3]) ;
+                fprintf (timelog, "lnz = %g ;\n", cm->lnz) ;
+                fprintf (timelog, "t = %g ;   %% dense solve time\n", ts [2]) ;
+                fclose (timelog) ;
+            }
+
+            resid [3] = resid [3] / cholmod_norm_dense (X, 1, cm) ;
+
+            cholmod_free_dense (&Ywork, cm) ;
+            cholmod_free_dense (&Ework, cm) ;
+            cholmod_free_dense (&X2, cm) ;
+            cholmod_free_dense (&B2, cm) ;
+            cholmod_free_sparse (&Xset, cm) ;
+            cholmod_free_sparse (&Bset, cm) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* compute the residual */
+        /* ------------------------------------------------------------------ */
+
+        if (method < 3)
+        {
+
+            if (A->stype == 0)
+            {
+                /* (AA'+beta*I)x=b is the linear system that was solved */
+                /* W = A'*X */
+                W = cholmod_allocate_dense (A->ncol, 1, A->ncol, xtype, cm) ;
+                cholmod_sdmult (A, 2, one, zero, X, W, cm) ;
+                /* R = B - beta*X */
+                R = cholmod_zeros (n, 1, xtype, cm) ;
+                Rx = R->x ;
+                Xx = X->x ;
+                if (xtype == CHOLMOD_REAL)
+                {
+                    for (i = 0 ; i < n ; i++)
+                    {
+                        Rx [i] = Bx [i] - beta [0] * Xx [i] ;
+                    }
+                }
+                else
+                {
+                    /* complex case */
+                    for (i = 0 ; i < n ; i++)
+                    {
+                        Rx [2*i  ] = Bx [2*i  ] - beta [0] * Xx [2*i  ] ;
+                        Rx [2*i+1] = Bx [2*i+1] - beta [0] * Xx [2*i+1] ;
+                    }
+                }
+                /* R = A*W - R */
+                cholmod_sdmult (A, 0, one, minusone, W, R, cm) ;
+                cholmod_free_dense (&W, cm) ;
+            }
+            else
+            {
+                /* Ax=b was factorized and solved, R = B-A*X */
+                R = cholmod_copy_dense (B, cm) ;
+                cholmod_sdmult (A, 0, minusone, one, X, R, cm) ;
+            }
+            rnorm = cholmod_norm_dense (R, 0, cm) ;	    /* max abs. entry */
+            xnorm = cholmod_norm_dense (X, 0, cm) ;	    /* max abs. entry */
+
+            axbnorm = (anorm * xnorm + bnorm + ((n == 0) ? 1 : 0)) ;
+            resid [method] = rnorm / axbnorm ;
+        }
     }
-    rnorm = cholmod_norm_dense (R, 0, cm) ;	    /* max abs. entry */
-    xnorm = cholmod_norm_dense (X, 0, cm) ;	    /* max abs. entry */
 
-    axbnorm = (anorm * xnorm + bnorm + ((n == 0) ? 1 : 0)) ;
-    resid = rnorm / axbnorm ;
+    tot = ta + tf + ts [0] ;
 
     /* ---------------------------------------------------------------------- */
     /* iterative refinement (real symmetric case only) */
@@ -290,38 +530,6 @@ int main (int argc, char **argv)
     /* print results */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_print_factor (L, "L", cm) ;
-
-    /* determine the # of integers's and reals's in L.  See cholmod_free */
-    if (L->is_super)
-    {
-	s = L->nsuper + 1 ;
-	xsize = L->xsize ;
-	ss = L->ssize ;
-	isize =
-	    n	/* L->Perm */
-	    + n	/* L->ColCount, nz in each column of 'pure' L */
-	    + s	/* L->pi, column pointers for L->s */
-	    + s	/* L->px, column pointers for L->x */
-	    + s	/* L->super, starting column index of each supernode */
-	    + ss ;	/* L->s, the pattern of the supernodes */
-    }
-    else
-    {
-	/* this space can increase if you change parameters to their non-
-	 * default values (cm->final_pack, for example). */
-	lnz = L->nzmax ;
-	xsize = lnz ;
-	isize =
-	    n	/* L->Perm */
-	    + n	/* L->ColCount, nz in each column of 'pure' L */
-	    + n+1	/* L->p, column pointers */
-	    + lnz	/* L->i, integer row indices */
-	    + n	/* L->nz, nz in each column of L */
-	    + n+2	/* L->next, link list */
-	    + n+2 ;	/* L->prev, link list */
-    }
-
     anz = cm->anz ;
     for (i = 0 ; i < CHOLMOD_MAXMETHODS ; i++)
     {
@@ -351,7 +559,8 @@ int main (int argc, char **argv)
 	}
     }
 
-    printf ("ints in L: %d, doubles in L: %d\n", isize, xsize) ;
+    printf ("ints in L: %15.0f, doubles in L: %15.0f\n",
+        (double) isize, (double) xsize) ;
     printf ("factor flops %g nnz(L) %15.0f (w/no amalgamation)\n",
 	    cm->fl, cm->lnz) ;
     if (A->stype == 0)
@@ -373,19 +582,35 @@ int main (int argc, char **argv)
     printf ("analyze cputime:  %12.4f\n", ta) ;
     printf ("factor  cputime:   %12.4f mflop: %8.1f\n", tf,
 	(tf == 0) ? 0 : (1e-6*cm->fl / tf)) ;
-    printf ("solve   cputime:   %12.4f mflop: %8.1f\n", ts,
-	(ts == 0) ? 0 : (1e-6*4*cm->lnz / ts)) ;
+    printf ("solve   cputime:   %12.4f mflop: %8.1f\n", ts [0],
+	(ts [0] == 0) ? 0 : (1e-6*4*cm->lnz / ts [0])) ;
     printf ("overall cputime:   %12.4f mflop: %8.1f\n", 
 	    tot, (tot == 0) ? 0 : (1e-6 * (cm->fl + 4 * cm->lnz) / tot)) ;
+    printf ("solve   cputime:   %12.4f mflop: %8.1f (%d trials)\n", ts [1],
+	(ts [1] == 0) ? 0 : (1e-6*4*cm->lnz / ts [1]), NTRIALS) ;
+    printf ("solve2  cputime:   %12.4f mflop: %8.1f (%d trials)\n", ts [2],
+	(ts [2] == 0) ? 0 : (1e-6*4*cm->lnz / ts [2]), NTRIALS) ;
     printf ("peak memory usage: %12.0f (MB)\n",
 	    (double) (cm->memory_usage) / 1048576.) ;
-    printf ("residual %8.1e (|Ax-b|/(|A||x|+|b|))\n", resid) ;
+    printf ("residual (|Ax-b|/(|A||x|+|b|)): ") ;
+    for (method = 0 ; method <= 3 ; method++)
+    {
+        printf ("%8.2e ", resid [method]) ;
+    }
+    printf ("\n") ;
     if (resid2 >= 0)
     {
 	printf ("residual %8.1e (|Ax-b|/(|A||x|+|b|))"
 		" after iterative refinement\n", resid2) ;
     }
-    printf ("rcond    %8.1e\n\n", cholmod_rcond (L, cm)) ;
+
+    printf ("rcond    %8.1e\n\n", rcond) ;
+
+    if (L_is_super)
+    {
+        cholmod_gpu_stats (cm) ;
+    }
+
     cholmod_free_factor (&L, cm) ;
     cholmod_free_dense (&X, cm) ;
 
@@ -396,5 +621,6 @@ int main (int argc, char **argv)
     cholmod_free_sparse (&A, cm) ;
     cholmod_free_dense (&B, cm) ;
     cholmod_finish (cm) ;
+    
     return (0) ;
 }
diff --git a/CHOLMOD/Demo/cholmod_demo.h b/CHOLMOD/Demo/cholmod_demo.h
index 147f270..81e8f02 100644
--- a/CHOLMOD/Demo/cholmod_demo.h
+++ b/CHOLMOD/Demo/cholmod_demo.h
@@ -3,11 +3,10 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Demo Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Demo Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Demo Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 #include "cholmod.h"
@@ -19,7 +18,10 @@
 #define TRUE 1
 #define FALSE 0
 
-#define CPUTIME ((double) (clock ( )) / CLOCKS_PER_SEC)
+#define CPUTIME (SuiteSparse_time ( ))
 
 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define ABS(a)   (((a) >= (0)) ? (a) : -(a))
 
+#include "cholmod_function.h"
diff --git a/CHOLMOD/Demo/cholmod_l_demo.c b/CHOLMOD/Demo/cholmod_l_demo.c
index a011b47..5ad4f76 100644
--- a/CHOLMOD/Demo/cholmod_l_demo.c
+++ b/CHOLMOD/Demo/cholmod_l_demo.c
@@ -3,17 +3,16 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Demo Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Demo Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Demo Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Read in a matrix from a file, and use CHOLMOD to solve Ax=b if A is
  * symmetric, or (AA'+beta*I)x=b otherwise.  The file format is a simple
  * triplet format, compatible with most files in the Matrix Market format.
- * See cholmod_read.c for more details.  The readhb.f format reads a
+ * See cholmod_read.c for more details.  The readhb.f program reads a
  * Harwell/Boeing matrix (excluding element-types) and converts it into the
  * form needed by this program.  reade.f reads a matrix in Harwell/Boeing
  * finite-element form.
@@ -31,16 +30,18 @@
  *
  * See cholmod_simple.c for a simpler demo program.
  *
- * UF_long is normally defined as long, except for WIN64.
+ * SuiteSparse_long is normally defined as long, except for WIN64.
  */
 
 #include "cholmod_demo.h"
+#define NTRIALS 100
 
 /* ff is a global variable so that it can be closed by my_handler */
 FILE *ff ;
 
 /* halt if an error occurs */
-static void my_handler (int status, char *file, int line, char *message)
+static void my_handler (int status, const char *file, int line,
+    const char *message)
 {
     printf ("cholmod error: file: %s line: %d status: %d: %s\n",
 	    file, line, status, message) ;
@@ -53,22 +54,30 @@ static void my_handler (int status, char *file, int line, char *message)
 
 int main (int argc, char **argv)
 {
-    double resid, t, ta, tf, ts, tot, bnorm, xnorm, anorm, rnorm, fl, anz, 
-	axbnorm, rnorm2, resid2 ;
+    double resid [4], t, ta, tf, ts [3], tot, bnorm, xnorm, anorm, rnorm, fl,
+        anz, axbnorm, rnorm2, resid2, rcond ;
     FILE *f ;
     cholmod_sparse *A ;
-    cholmod_dense *X, *B, *W, *R ;
+    cholmod_dense *X = NULL, *B, *W, *R ;
     double one [2], zero [2], minusone [2], beta [2], xlnz ;
     cholmod_common Common, *cm ;
     cholmod_factor *L ;
-    double *Bx, *Rx, *Xx ;
-    UF_long i, n, isize, xsize, ordering, xtype, s, ss, lnz ;
+    double *Bx, *Rx, *Xx, *Bz, *Xz, *Rz ;
+    SuiteSparse_long i, n, isize, xsize, ordering, xtype, s, ss, lnz ;
+    int trial, method, L_is_super ;
+    int ver [3] ;
+    int prefer_zomplex, nmethods ;
+
+    ts[0] = 0.;
+    ts[1] = 0.;
+    ts[2] = 0.;
 
     /* ---------------------------------------------------------------------- */
     /* get the file containing the input matrix */
     /* ---------------------------------------------------------------------- */
 
     ff = NULL ;
+    prefer_zomplex = 0 ;
     if (argc > 1)
     {
 	if ((f = fopen (argv [1], "r")) == NULL)
@@ -77,6 +86,7 @@ int main (int argc, char **argv)
 		    "unable to open file") ;
 	}
 	ff = f ;
+        prefer_zomplex = (argc > 2) ;
     }
     else
     {
@@ -89,6 +99,10 @@ int main (int argc, char **argv)
 
     cm = &Common ;
     cholmod_l_start (cm) ;
+    CHOLMOD_FUNCTION_DEFAULTS (cm) ;    /* just for testing (not required) */
+
+    /* cm->useGPU = 1; */
+    cm->prefer_zomplex = prefer_zomplex ;
 
     /* use default parameter settings, except for the error handler.  This
      * demo program terminates if an error occurs (out of memory, not positive
@@ -118,14 +132,75 @@ int main (int argc, char **argv)
     /* ---------------------------------------------------------------------- */
 
     printf ("\n---------------------------------- cholmod_l_demo:\n") ;
+    cholmod_l_version (ver) ;
+    printf ("cholmod version %d.%d.%d\n", ver [0], ver [1], ver [2]) ;
+    SuiteSparse_version (ver) ;
+    printf ("SuiteSparse version %d.%d.%d\n", ver [0], ver [1], ver [2]) ;
     A = cholmod_l_read_sparse (f, cm) ;
-    if (ff != NULL) fclose (ff) ;
+    if (ff != NULL)
+    {
+        fclose (ff) ;
+        ff = NULL ;
+    }
     anorm = cholmod_l_norm_sparse (A, 0, cm) ;
-    xtype = A->xtype ;
     printf ("norm (A,inf) = %g\n", anorm) ;
     printf ("norm (A,1)   = %g\n", cholmod_l_norm_sparse (A, 1, cm)) ;
+
+    if (prefer_zomplex && A->xtype == CHOLMOD_COMPLEX)
+    {
+        /* Convert to zomplex, just for testing.  In a zomplex matrix,
+           the real and imaginary parts are in separate arrays.  MATLAB
+           uses zomplex matrix exclusively. */
+        double *Ax = A->x ;
+        SuiteSparse_long nz = cholmod_l_nnz (A, cm) ;
+        printf ("nz: %ld\n", nz) ;
+        double *Ax2 = cholmod_l_malloc (nz, sizeof (double), cm) ;
+        double *Az2 = cholmod_l_malloc (nz, sizeof (double), cm) ;
+        for (i = 0 ; i < nz ; i++)
+        {
+            Ax2 [i] = Ax [2*i  ] ;
+            Az2 [i] = Ax [2*i+1] ;
+        }
+        cholmod_l_free (A->nzmax, 2*sizeof(double), Ax, cm) ;
+        A->x = Ax2 ;
+        A->z = Az2 ;
+        A->xtype = CHOLMOD_ZOMPLEX ;
+        /* cm->print = 5 ; */
+    }
+
+    xtype = A->xtype ;
     cholmod_l_print_sparse (A, "A", cm) ;
 
+#if 0
+    if ( 0 ) {
+      // scale diagonal
+      printf ("\n\n     SCALING DIAGONAL   \n\n");
+      
+      // create diagonal
+      printf ("%ld,%ld,%d\n", A->nrow, A->ncol, A->xtype );
+
+      cholmod_sparse *D = cholmod_l_speye (A->nrow, A->ncol, A->xtype, cm );
+      printf ("sparse done \n");
+      cholmod_l_print_sparse (D, "D", cm);
+
+      D->stype = 1;
+      cholmod_l_print_sparse (D, "D", cm);
+
+      double alpha[2];
+      double beta[2];
+      alpha[0] = 1.0;
+      alpha[1] = 1.0;
+      beta[0] = 1.0e9; // 9 works, 467doesn't
+      beta[1] = 1.0e0;
+
+      cholmod_sparse *C = cholmod_l_add (A, D, alpha, beta, 1, 0, cm );
+      cholmod_l_print_sparse (C, "C", cm);
+
+      A = C;
+
+    }
+#endif
+
     if (A->nrow > A->ncol)
     {
 	/* Transpose A so that A'A+beta*I will be factorized instead */
@@ -142,6 +217,7 @@ int main (int argc, char **argv)
     n = A->nrow ;
     B = cholmod_l_zeros (n, 1, xtype, cm) ;
     Bx = B->x ;
+    Bz = B->z ;
 
 #if GHS
     {
@@ -161,7 +237,7 @@ int main (int argc, char **argv)
 	    Bx [i] = 1 + i / x ;
 	}
     }
-    else
+    else if (xtype == CHOLMOD_COMPLEX)
     {
 	/* complex case */
 	for (i = 0 ; i < n ; i++)
@@ -171,6 +247,17 @@ int main (int argc, char **argv)
 	    Bx [2*i+1] = (x/2 - i) / (3*x) ;	/* imag part of B(i) */
 	}
     }
+    else /* (xtype == CHOLMOD_ZOMPLEX) */
+    {
+	/* zomplex case */
+	for (i = 0 ; i < n ; i++)
+	{
+	    double x = n ;
+	    Bx [i] = 1 + i / x ;		/* real part of B(i) */
+	    Bz [i] = (x/2 - i) / (3*x) ;	/* imag part of B(i) */
+	}
+    }
+
 #endif
 
     cholmod_l_print_dense (B, "B", cm) ;
@@ -178,7 +265,7 @@ int main (int argc, char **argv)
     printf ("bnorm %g\n", bnorm) ;
 
     /* ---------------------------------------------------------------------- */
-    /* analyze, factorize, and solve */
+    /* analyze and factorize */
     /* ---------------------------------------------------------------------- */
 
     t = CPUTIME ;
@@ -205,58 +292,302 @@ int main (int argc, char **argv)
 	tf = MAX (tf, 0) ;
     }
 
-    t = CPUTIME ;
+    cholmod_l_print_factor (L, "L", cm) ;
+
+    /* determine the # of integers's and reals's in L.  See cholmod_free */
+    if (L->is_super)
+    {
+	s = L->nsuper + 1 ;
+	xsize = L->xsize ;
+	ss = L->ssize ;
+	isize =
+	    n	/* L->Perm */
+	    + n	/* L->ColCount, nz in each column of 'pure' L */
+	    + s	/* L->pi, column pointers for L->s */
+	    + s	/* L->px, column pointers for L->x */
+	    + s	/* L->super, starting column index of each supernode */
+	    + ss ;	/* L->s, the pattern of the supernodes */
+    }
+    else
+    {
+	/* this space can increase if you change parameters to their non-
+	 * default values (cm->final_pack, for example). */
+	lnz = L->nzmax ;
+	xsize = lnz ;
+	isize =
+	    n	/* L->Perm */
+	    + n	/* L->ColCount, nz in each column of 'pure' L */
+	    + n+1	/* L->p, column pointers */
+	    + lnz	/* L->i, integer row indices */
+	    + n	/* L->nz, nz in each column of L */
+	    + n+2	/* L->next, link list */
+	    + n+2 ;	/* L->prev, link list */
+    }
 
-    X = cholmod_l_solve (CHOLMOD_A, L, B, cm) ;
-    ts = CPUTIME - t ;
-    ts = MAX (ts, 0) ;
-    tot = ta + tf + ts ;
+    /* solve with Bset will change L from simplicial to supernodal */
+    rcond = cholmod_l_rcond (L, cm) ;
+    L_is_super = L->is_super ;
 
     /* ---------------------------------------------------------------------- */
-    /* compute the residual */
+    /* solve */
     /* ---------------------------------------------------------------------- */
 
-    if (A->stype == 0)
+    if (n >= 1000)
     {
-	/* (AA'+beta*I)x=b is the linear system that was solved */
-	/* W = A'*X */
-	W = cholmod_l_allocate_dense (A->ncol, 1, A->ncol, xtype, cm) ;
-	cholmod_l_sdmult (A, 2, one, zero, X, W, cm) ;
-	/* R = B - beta*X */
-	R = cholmod_l_zeros (n, 1, xtype, cm) ;
-	Rx = R->x ;
-	Xx = X->x ;
-	if (xtype == CHOLMOD_REAL)
-	{
-	    for (i = 0 ; i < n ; i++)
-	    {
-		Rx [i] = Bx [i] - beta [0] * Xx [i] ;
-	    }
-	}
-	else
-	{
-	    /* complex case */
-	    for (i = 0 ; i < n ; i++)
-	    {
-		Rx [2*i  ] = Bx [2*i  ] - beta [0] * Xx [2*i  ] ;
-		Rx [2*i+1] = Bx [2*i+1] - beta [0] * Xx [2*i+1] ;
-	    }
-	}
-	/* R = A*W - R */
-	cholmod_l_sdmult (A, 0, one, minusone, W, R, cm) ;
-	cholmod_l_free_dense (&W, cm) ;
+        nmethods = 1 ;
+    }
+    else if (xtype == CHOLMOD_ZOMPLEX)
+    {
+        nmethods = 2 ;
     }
     else
     {
-	/* Ax=b was factorized and solved, R = B-A*X */
-	R = cholmod_l_copy_dense (B, cm) ;
-	cholmod_l_sdmult (A, 0, minusone, one, X, R, cm) ;
+        nmethods = 3 ;
+    }
+    printf ("nmethods: %d\n", nmethods) ;
+
+    for (method = 0 ; method <= nmethods ; method++)
+    {
+        double x = n ;
+        resid [method] = -1 ;       /* not yet computed */
+
+        if (method == 0)
+        {
+            /* basic solve, just once */
+            t = CPUTIME ;
+            X = cholmod_l_solve (CHOLMOD_A, L, B, cm) ;
+            ts [0] = CPUTIME - t ;
+            ts [0] = MAX (ts [0], 0) ;
+        }
+        else if (method == 1)
+        {
+            /* basic solve, many times, but keep the last one */
+            t = CPUTIME ;
+            for (trial = 0 ; trial < NTRIALS ; trial++)
+            {
+                cholmod_l_free_dense (&X, cm) ;
+                Bx [0] = 1 + trial / x ;        /* tweak B each iteration */
+                X = cholmod_l_solve (CHOLMOD_A, L, B, cm) ;
+            }
+            ts [1] = CPUTIME - t ;
+            ts [1] = MAX (ts [1], 0) / NTRIALS ;
+        }
+        else if (method == 2)
+        {
+            /* solve with reused workspace */
+            cholmod_dense *Ywork = NULL, *Ework = NULL ;
+            cholmod_l_free_dense (&X, cm) ;
+
+            t = CPUTIME ;
+            for (trial = 0 ; trial < NTRIALS ; trial++)
+            {
+                Bx [0] = 1 + trial / x ;        /* tweak B each iteration */
+                cholmod_l_solve2 (CHOLMOD_A, L, B, NULL, &X, NULL,
+                    &Ywork, &Ework, cm) ;
+            }
+            cholmod_l_free_dense (&Ywork, cm) ;
+            cholmod_l_free_dense (&Ework, cm) ;
+            ts [2] = CPUTIME - t ;
+            ts [2] = MAX (ts [2], 0) / NTRIALS ;
+            
+        }
+        else
+        {
+            /* solve with reused workspace and sparse Bset */
+            cholmod_dense *Ywork = NULL, *Ework = NULL ;
+            cholmod_dense *X2 = NULL, *B2 = NULL ;
+            cholmod_sparse *Bset, *Xset = NULL ;
+            SuiteSparse_long *Bsetp, *Bseti, *Xsetp, *Xseti, xlen, j, k, *Lnz ;
+            double *X1x, *X2x, *B2x, err ;
+            FILE *timelog = fopen ("timelog.m", "w") ;
+            if (timelog) fprintf (timelog, "results = [\n") ;
+
+            B2 = cholmod_l_zeros (n, 1, xtype, cm) ;
+            B2x = B2->x ;
+
+            Bset = cholmod_l_allocate_sparse (n, 1, 1, FALSE, TRUE, 0,
+                CHOLMOD_PATTERN, cm) ;
+            Bsetp = Bset->p ;
+            Bseti = Bset->i ;
+            Bsetp [0] = 0 ;     /* nnz(B) is 1 (it can be anything) */
+            Bsetp [1] = 1 ;
+            resid [3] = 0 ;
+
+            for (i = 0 ; i < MIN (100,n) ; i++)
+            {
+                /* B (i) is nonzero, all other entries are ignored
+                   (implied to be zero) */
+                Bseti [0] = i ;
+                if (xtype == CHOLMOD_REAL)
+                {
+                    B2x [i] = 3.1 * i + 0.9 ;
+                }
+                else /* (xtype == CHOLMOD_COMPLEX) */
+                {
+                    B2x [2*i  ] = i + 0.042 ;
+                    B2x [2*i+1] = i - 92.7 ;
+                }
+
+                /* first get the entire solution, to compare against */
+                cholmod_l_solve2 (CHOLMOD_A, L, B2, NULL, &X, NULL,
+                    &Ywork, &Ework, cm) ;
+
+                /* now get the sparse solutions; this will change L from
+                   supernodal to simplicial */
+
+                if (i == 0)
+                {
+                    /* first solve can be slower because it has to allocate
+                       space for X2, Xset, etc, and change L.
+                       So don't time it */
+                    cholmod_l_solve2 (CHOLMOD_A, L, B2, Bset, &X2, &Xset,
+                        &Ywork, &Ework, cm) ;
+                }
+
+                t = CPUTIME ;
+                for (trial = 0 ; trial < NTRIALS ; trial++)
+                {
+                    /* solve Ax=b but only to get x(i).
+                       b is all zero except for b(i).
+                       This takes O(xlen) time */
+                    cholmod_l_solve2 (CHOLMOD_A, L, B2, Bset, &X2, &Xset,
+                        &Ywork, &Ework, cm) ;
+                }
+                t = CPUTIME - t ;
+                t = MAX (t, 0) / NTRIALS ;
+
+                /* check the solution and log the time */
+                Xsetp = Xset->p ;
+                Xseti = Xset->i ;
+                xlen = Xsetp [1] ;
+                X1x = X->x ;
+                X2x = X2->x ;
+                Lnz = L->nz ;
+
+                if (xtype == CHOLMOD_REAL)
+                {
+                    fl = 2 * xlen ;
+                    for (k = 0 ; k < xlen ; k++)
+                    {
+                        j = Xseti [k] ;
+                        fl += 4 * Lnz [j] ;
+                        err = X1x [j] - X2x [j] ;
+                        err = ABS (err) ;
+                        resid [3] = MAX (resid [3], err) ;
+                    }
+                }
+                else /* (xtype == CHOLMOD_COMPLEX) */
+                {
+                    fl = 16 * xlen ;
+                    for (k = 0 ; k < xlen ; k++)
+                    {
+                        j = Xseti [k] ;
+                        fl += 16 * Lnz [j] ;
+                        err = X1x [2*j  ] - X2x [2*j  ] ;
+                        err = ABS (err) ;
+                        resid [3] = MAX (resid [3], err) ;
+                        err = X1x [2*j+1] - X2x [2*j+1] ;
+                        err = ABS (err) ;
+                        resid [3] = MAX (resid [3], err) ;
+                    }
+                }
+
+                if (timelog) fprintf (timelog, "%g %g %g %g\n",
+                    (double) i, (double) xlen, fl, t);
+
+                /* clear B for the next test */
+                if (xtype == CHOLMOD_REAL)
+                {
+                    B2x [i] = 0 ;
+                }
+                else /* (xtype == CHOLMOD_COMPLEX) */
+                {
+                    B2x [2*i  ] = 0 ;
+                    B2x [2*i+1] = 0 ;
+                }
+            }
+
+            if (timelog)
+            {
+                fprintf (timelog, "] ; resid = %g ;\n", resid [3]) ;
+                fprintf (timelog, "lnz = %g ;\n", cm->lnz) ;
+                fprintf (timelog, "t = %g ;   %% dense solve time\n", ts [2]) ;
+                fclose (timelog) ;
+            }
+
+            resid [3] = resid [3] / cholmod_l_norm_dense (X, 1, cm) ;
+
+            cholmod_l_free_dense (&Ywork, cm) ;
+            cholmod_l_free_dense (&Ework, cm) ;
+            cholmod_l_free_dense (&X2, cm) ;
+            cholmod_l_free_dense (&B2, cm) ;
+            cholmod_l_free_sparse (&Xset, cm) ;
+            cholmod_l_free_sparse (&Bset, cm) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* compute the residual */
+        /* ------------------------------------------------------------------ */
+
+        if (method < 3)
+        {
+            if (A->stype == 0)
+            {
+                /* (AA'+beta*I)x=b is the linear system that was solved */
+                /* W = A'*X */
+                W = cholmod_l_allocate_dense (A->ncol, 1, A->ncol, xtype, cm) ;
+                cholmod_l_sdmult (A, 2, one, zero, X, W, cm) ;
+                /* R = B - beta*X */
+                R = cholmod_l_zeros (n, 1, xtype, cm) ;
+                Rx = R->x ;
+                Rz = R->z ;
+                Xx = X->x ;
+                Xz = X->z ;
+                if (xtype == CHOLMOD_REAL)
+                {
+                    for (i = 0 ; i < n ; i++)
+                    {
+                        Rx [i] = Bx [i] - beta [0] * Xx [i] ;
+                    }
+                }
+                else if (xtype == CHOLMOD_COMPLEX)
+                {
+                    /* complex case */
+                    for (i = 0 ; i < n ; i++)
+                    {
+                        Rx [2*i  ] = Bx [2*i  ] - beta [0] * Xx [2*i  ] ;
+                        Rx [2*i+1] = Bx [2*i+1] - beta [1] * Xx [2*i+1] ;
+                    }
+                }
+                else /* (xtype == CHOLMOD_ZOMPLEX) */
+                {
+                    /* zomplex case */
+                    for (i = 0 ; i < n ; i++)
+                    {
+                        Rx [i] = Bx [i] - beta [0] * Xx [i] ;
+                        Rz [i] = Bz [i] - beta [1] * Xz [i] ;
+                    }
+                }
+
+                /* R = A*W - R */
+                cholmod_l_sdmult (A, 0, one, minusone, W, R, cm) ;
+                cholmod_l_free_dense (&W, cm) ;
+            }
+            else
+            {
+                /* Ax=b was factorized and solved, R = B-A*X */
+                R = cholmod_l_copy_dense (B, cm) ;
+                cholmod_l_sdmult (A, 0, minusone, one, X, R, cm) ;
+            }
+            rnorm = cholmod_l_norm_dense (R, 0, cm) ;	    /* max abs. entry */
+            xnorm = cholmod_l_norm_dense (X, 0, cm) ;	    /* max abs. entry */
+
+            axbnorm = (anorm * xnorm + bnorm + ((n == 0) ? 1 : 0)) ;
+            resid [method] = rnorm / axbnorm ;
+        }
     }
-    rnorm = cholmod_l_norm_dense (R, 0, cm) ;	    /* max abs. entry */
-    xnorm = cholmod_l_norm_dense (X, 0, cm) ;	    /* max abs. entry */
 
-    axbnorm = (anorm * xnorm + bnorm + ((n == 0) ? 1 : 0)) ;
-    resid = rnorm / axbnorm ;
+    tot = ta + tf + ts [0] ;
 
     /* ---------------------------------------------------------------------- */
     /* iterative refinement (real symmetric case only) */
@@ -292,40 +623,9 @@ int main (int argc, char **argv)
     /* print results */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_l_print_factor (L, "L", cm) ;
-
-    /* determine the # of integers's and reals's in L.  See cholmod_free */
-    if (L->is_super)
-    {
-	s = L->nsuper + 1 ;
-	xsize = L->xsize ;
-	ss = L->ssize ;
-	isize =
-	    n	/* L->Perm */
-	    + n	/* L->ColCount, nz in each column of 'pure' L */
-	    + s	/* L->pi, column pointers for L->s */
-	    + s	/* L->px, column pointers for L->x */
-	    + s	/* L->super, starting column index of each supernode */
-	    + ss ;	/* L->s, the pattern of the supernodes */
-    }
-    else
-    {
-	/* this space can increase if you change parameters to their non-
-	 * default values (cm->final_pack, for example). */
-	lnz = L->nzmax ;
-	xsize = lnz ;
-	isize =
-	    n	/* L->Perm */
-	    + n	/* L->ColCount, nz in each column of 'pure' L */
-	    + n+1	/* L->p, column pointers */
-	    + lnz	/* L->i, integer row indices */
-	    + n	/* L->nz, nz in each column of L */
-	    + n+2	/* L->next, link list */
-	    + n+2 ;	/* L->prev, link list */
-    }
-
     anz = cm->anz ;
     for (i = 0 ; i < CHOLMOD_MAXMETHODS ; i++)
+    /* for (i = 4 ; i < 3 ; i++) */
     {
 	fl = cm->method [i].fl ;
 	xlnz = cm->method [i].lnz ;
@@ -337,9 +637,9 @@ int main (int argc, char **argv)
 	    printf ("Ordering: ") ;
 	    if (ordering == CHOLMOD_POSTORDERED) printf ("postordered ") ;
 	    if (ordering == CHOLMOD_NATURAL)     printf ("natural ") ;
-	    if (ordering == CHOLMOD_GIVEN)	     printf ("user    ") ;
-	    if (ordering == CHOLMOD_AMD)	     printf ("AMD     ") ;
-	    if (ordering == CHOLMOD_METIS)	     printf ("METIS   ") ;
+	    if (ordering == CHOLMOD_GIVEN)	 printf ("user    ") ;
+	    if (ordering == CHOLMOD_AMD)	 printf ("AMD     ") ;
+	    if (ordering == CHOLMOD_METIS)	 printf ("METIS   ") ;
 	    if (ordering == CHOLMOD_NESDIS)      printf ("NESDIS  ") ;
 	    if (xlnz > 0)
 	    {
@@ -353,7 +653,8 @@ int main (int argc, char **argv)
 	}
     }
 
-    printf ("ints in L: %ld, doubles in L: %ld\n", isize, xsize) ;
+    printf ("ints in L: %15.0f, doubles in L: %15.0f\n",
+        (double) isize, (double) xsize) ;
     printf ("factor flops %g nnz(L) %15.0f (w/no amalgamation)\n",
 	    cm->fl, cm->lnz) ;
     if (A->stype == 0)
@@ -375,19 +676,34 @@ int main (int argc, char **argv)
     printf ("analyze cputime:  %12.4f\n", ta) ;
     printf ("factor  cputime:   %12.4f mflop: %8.1f\n", tf,
 	(tf == 0) ? 0 : (1e-6*cm->fl / tf)) ;
-    printf ("solve   cputime:   %12.4f mflop: %8.1f\n", ts,
-	(ts == 0) ? 0 : (1e-6*4*cm->lnz / ts)) ;
+    printf ("solve   cputime:   %12.4f mflop: %8.1f\n", ts [0],
+	(ts [0] == 0) ? 0 : (1e-6*4*cm->lnz / ts [0])) ;
     printf ("overall cputime:   %12.4f mflop: %8.1f\n", 
 	    tot, (tot == 0) ? 0 : (1e-6 * (cm->fl + 4 * cm->lnz) / tot)) ;
+    printf ("solve   cputime:   %12.4f mflop: %8.1f (%d trials)\n", ts [1],
+	(ts [1] == 0) ? 0 : (1e-6*4*cm->lnz / ts [1]), NTRIALS) ;
+    printf ("solve2  cputime:   %12.4f mflop: %8.1f (%d trials)\n", ts [2],
+	(ts [2] == 0) ? 0 : (1e-6*4*cm->lnz / ts [2]), NTRIALS) ;
     printf ("peak memory usage: %12.0f (MB)\n",
 	    (double) (cm->memory_usage) / 1048576.) ;
-    printf ("residual %8.1e (|Ax-b|/(|A||x|+|b|))\n", resid) ;
+    printf ("residual (|Ax-b|/(|A||x|+|b|)): ") ;
+    for (method = 0 ; method <= nmethods ; method++)
+    {
+        printf ("%8.2e ", resid [method]) ;
+    }
+    printf ("\n") ;
     if (resid2 >= 0)
     {
 	printf ("residual %8.1e (|Ax-b|/(|A||x|+|b|))"
 		" after iterative refinement\n", resid2) ;
     }
-    printf ("rcond    %8.1e\n\n", cholmod_l_rcond (L, cm)) ;
+    printf ("rcond    %8.1e\n\n", rcond) ;
+
+    if (L_is_super)
+    {
+        cholmod_l_gpu_stats (cm) ;
+    }
+
     cholmod_l_free_factor (&L, cm) ;
     cholmod_l_free_dense (&X, cm) ;
 
@@ -398,5 +714,6 @@ int main (int argc, char **argv)
     cholmod_l_free_sparse (&A, cm) ;
     cholmod_l_free_dense (&B, cm) ;
     cholmod_l_finish (cm) ;
+    
     return (0) ;
 }
diff --git a/CHOLMOD/Demo/cholmod_simple.c b/CHOLMOD/Demo/cholmod_simple.c
index a997147..fa60641 100644
--- a/CHOLMOD/Demo/cholmod_simple.c
+++ b/CHOLMOD/Demo/cholmod_simple.c
@@ -7,7 +7,6 @@
  * The CHOLMOD/Demo Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Read in a real symmetric or complex Hermitian matrix from stdin in
diff --git a/CHOLMOD/Demo/gpu.sh b/CHOLMOD/Demo/gpu.sh
new file mode 100755
index 0000000..6d165c7
--- /dev/null
+++ b/CHOLMOD/Demo/gpu.sh
@@ -0,0 +1,4 @@
+setenv CHOLMOD_USE_GPU 1
+./cholmod_l_demo < ~/nd6k.mtx
+setenv CHOLMOD_USE_GPU 0
+./cholmod_l_demo < ~/nd6k.mtx
diff --git a/CHOLMOD/Demo/lperf.m b/CHOLMOD/Demo/lperf.m
new file mode 100644
index 0000000..66fb24e
--- /dev/null
+++ b/CHOLMOD/Demo/lperf.m
@@ -0,0 +1,56 @@
+% test the performance of the sparse subset Ax=b solver
+
+clear
+rng ('default')
+index = UFget ;
+f = find (index.posdef & (index.amd_lnz > 0)) ;
+f = setdiff (f, [1425 228 353 354]) ; % not really posdef
+[ignore i] = sort (index.amd_lnz (f)) ;
+f = f (i) ;
+nmat = length (f)
+
+figure (1) ; clf ; hold off
+figure (2) ; clf ; hold off
+maxresid = 0 ;
+
+for k = 1:nmat
+    id = f (k) ;
+    Prob = UFget (id, index)
+    A = Prob.A ;
+    n = size (A,1) ;
+
+    if (exist ('timelog.m', 'file'))
+        delete ('timelog.m') ;
+    end
+    clear results
+    mwrite ('/tmp/A.mtx', A) ;
+    system ('./cholmod_l_demo < /tmp/A.mtx > /tmp/output') ;
+
+    % get the results = [i, xlen, flops, time]
+    % also get lnz and t = dense solve time
+    timelog
+
+    if (isreal (A))
+        fl = 2 * n + 4 * lnz ;
+    else
+        fl = 16 * n + 16 * lnz ;
+    end
+
+    figure (1) 
+    clf
+    hold off
+    loglog (results (:,3), results (:,4), 'o', fl, t, 'ro') ;
+    xlabel ('flops') ;
+    ylabel ('time') ;
+
+    figure (2) 
+    loglog (results (:,3), results (:,4), 'o', fl, t, 'ro') ;
+    xlabel ('flops') ;
+    ylabel ('time') ;
+    hold on
+
+    maxresid = max (maxresid, resid) ;
+    fprintf ('resid %g maxresid %g\n', resid, maxresid) ;
+    drawnow
+
+end
diff --git a/CHOLMOD/Demo/make.out b/CHOLMOD/Demo/make.out
deleted file mode 100644
index 0b1980f..0000000
--- a/CHOLMOD/Demo/make.out
+++ /dev/null
@@ -1,213 +0,0 @@
-./cholmod_demo < Matrix/bcsstk01.tri
-
----------------------------------- cholmod_demo:
-norm (A,inf) = 3.57095e+09
-norm (A,1)   = 3.57095e+09
-CHOLMOD sparse:  A:  48-by-48, nz 224, upper.  OK
-CHOLMOD dense:   B:  48-by-1,   OK
-bnorm 1.97917
-Analyze: flop 6009 lnz 489
-Factorizing A
-CHOLMOD factor:  L:  48-by-48  simplicial, LDL'. nzmax 489.  nz 489  OK
-Ordering: AMD     fl/lnz       12.3  lnz/anz        2.2
-ints in L: 782, doubles in L: 489
-factor flops 6009 nnz(L)             489 (w/no amalgamation)
-nnz(A*A'):             224
-flops / nnz(L):      12.3
-nnz(L) / nnz(A):      2.2
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  2.5e-19 (|Ax-b|/(|A||x|+|b|))
-residual  1.3e-19 (|Ax-b|/(|A||x|+|b|)) after iterative refinement
-rcond     9.5e-06
-
-./cholmod_l_demo < Matrix/bcsstk01.tri
-
----------------------------------- cholmod_l_demo:
-norm (A,inf) = 3.57095e+09
-norm (A,1)   = 3.57095e+09
-CHOLMOD sparse:  A:  48-by-48, nz 224, upper.  OK
-CHOLMOD dense:   B:  48-by-1,   OK
-bnorm 1.97917
-Analyze: flop 6009 lnz 489
-Factorizing A
-CHOLMOD factor:  L:  48-by-48  simplicial, LDL'. nzmax 489.  nz 489  OK
-Ordering: AMD     fl/lnz       12.3  lnz/anz        2.2
-ints in L: 782, doubles in L: 489
-factor flops 6009 nnz(L)             489 (w/no amalgamation)
-nnz(A*A'):             224
-flops / nnz(L):      12.3
-nnz(L) / nnz(A):      2.2
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  2.5e-19 (|Ax-b|/(|A||x|+|b|))
-residual  1.3e-19 (|Ax-b|/(|A||x|+|b|)) after iterative refinement
-rcond     9.5e-06
-
-./cholmod_demo < Matrix/lp_afiro.tri
-
----------------------------------- cholmod_demo:
-norm (A,inf) = 20.525
-norm (A,1)   = 3.429
-CHOLMOD sparse:  A:  27-by-51, nz 102, up/lo.  OK
-CHOLMOD dense:   B:  27-by-1,   OK
-bnorm 1.96296
-Analyze: flop 529 lnz 113
-Factorizing A*A'+beta*I
-CHOLMOD factor:  L:  27-by-27  simplicial, LDL'. nzmax 113.  nz 113  OK
-Ordering: AMD     fl/lnz        4.7  lnz/anz        1.3
-ints in L: 280, doubles in L: 113
-factor flops 529 nnz(L)             113 (w/no amalgamation)
-nnz(A):                 90
-flops / nnz(L):       4.7
-nnz(L) / nnz(A):      1.3
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  7.4e-17 (|Ax-b|/(|A||x|+|b|))
-rcond     3.0e-02
-
-./cholmod_l_demo < Matrix/lp_afiro.tri
-
----------------------------------- cholmod_l_demo:
-norm (A,inf) = 20.525
-norm (A,1)   = 3.429
-CHOLMOD sparse:  A:  27-by-51, nz 102, up/lo.  OK
-CHOLMOD dense:   B:  27-by-1,   OK
-bnorm 1.96296
-Analyze: flop 529 lnz 113
-Factorizing A*A'+beta*I
-CHOLMOD factor:  L:  27-by-27  simplicial, LDL'. nzmax 113.  nz 113  OK
-Ordering: AMD     fl/lnz        4.7  lnz/anz        1.3
-ints in L: 280, doubles in L: 113
-factor flops 529 nnz(L)             113 (w/no amalgamation)
-nnz(A):                 90
-flops / nnz(L):       4.7
-nnz(L) / nnz(A):      1.3
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  7.4e-17 (|Ax-b|/(|A||x|+|b|))
-rcond     3.0e-02
-
-./cholmod_demo < Matrix/can___24.mtx
-
----------------------------------- cholmod_demo:
-norm (A,inf) = 17
-norm (A,1)   = 17
-CHOLMOD sparse:  A:  24-by-24, nz 92, upper.  OK
-CHOLMOD dense:   B:  24-by-1,   OK
-bnorm 1.95833
-Analyze: flop 656 lnz 120
-Factorizing A
-CHOLMOD factor:  L:  24-by-24  simplicial, LDL'. nzmax 120.  nz 120  OK
-Ordering: AMD     fl/lnz        5.5  lnz/anz        1.3
-ints in L: 269, doubles in L: 120
-factor flops 656 nnz(L)             120 (w/no amalgamation)
-nnz(A*A'):              92
-flops / nnz(L):       5.5
-nnz(L) / nnz(A):      1.3
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  1.3e-16 (|Ax-b|/(|A||x|+|b|))
-residual  7.5e-17 (|Ax-b|/(|A||x|+|b|)) after iterative refinement
-rcond     5.0e-01
-
-./cholmod_l_demo < Matrix/can___24.mtx
-
----------------------------------- cholmod_l_demo:
-norm (A,inf) = 17
-norm (A,1)   = 17
-CHOLMOD sparse:  A:  24-by-24, nz 92, upper.  OK
-CHOLMOD dense:   B:  24-by-1,   OK
-bnorm 1.95833
-Analyze: flop 656 lnz 120
-Factorizing A
-CHOLMOD factor:  L:  24-by-24  simplicial, LDL'. nzmax 120.  nz 120  OK
-Ordering: AMD     fl/lnz        5.5  lnz/anz        1.3
-ints in L: 269, doubles in L: 120
-factor flops 656 nnz(L)             120 (w/no amalgamation)
-nnz(A*A'):              92
-flops / nnz(L):       5.5
-nnz(L) / nnz(A):      1.3
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  1.3e-16 (|Ax-b|/(|A||x|+|b|))
-residual  7.5e-17 (|Ax-b|/(|A||x|+|b|)) after iterative refinement
-rcond     5.0e-01
-
-./cholmod_demo < Matrix/c.tri
-
----------------------------------- cholmod_demo:
-norm (A,inf) = 47.2361
-norm (A,1)   = 47.2361
-CHOLMOD sparse:  A:  3-by-3, nz 5, upper.  OK
-CHOLMOD dense:   B:  3-by-1,   OK
-bnorm 1.66759
-Analyze: flop 9 lnz 5
-Factorizing A
-CHOLMOD factor:  L:  3-by-3  simplicial, LDL'. nzmax 5.  nz 5  OK
-Ordering: AMD     fl/lnz        1.8  lnz/anz        1.0
-ints in L: 28, doubles in L: 5
-factor flops 9 nnz(L)               5 (w/no amalgamation)
-nnz(A*A'):               5
-flops / nnz(L):       1.8
-nnz(L) / nnz(A):      1.0
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  2.0e-17 (|Ax-b|/(|A||x|+|b|))
-rcond     3.6e-02
-
-./cholmod_l_demo < Matrix/c.tri
-
----------------------------------- cholmod_l_demo:
-norm (A,inf) = 47.2361
-norm (A,1)   = 47.2361
-CHOLMOD sparse:  A:  3-by-3, nz 5, upper.  OK
-CHOLMOD dense:   B:  3-by-1,   OK
-bnorm 1.66759
-Analyze: flop 9 lnz 5
-Factorizing A
-CHOLMOD factor:  L:  3-by-3  simplicial, LDL'. nzmax 5.  nz 5  OK
-Ordering: AMD     fl/lnz        1.8  lnz/anz        1.0
-ints in L: 28, doubles in L: 5
-factor flops 9 nnz(L)               5 (w/no amalgamation)
-nnz(A*A'):               5
-flops / nnz(L):       1.8
-nnz(L) / nnz(A):      1.0
-analyze cputime:        0.0000
-factor  cputime:         0.0000 mflop:      0.0
-solve   cputime:         0.0000 mflop:      0.0
-overall cputime:         0.0000 mflop:      0.0
-peak memory usage:            0 (MB)
-residual  2.0e-17 (|Ax-b|/(|A||x|+|b|))
-rcond     3.6e-02
-
-./cholmod_simple < Matrix/c.tri
-CHOLMOD sparse:  A:  3-by-3, nz 5, upper.  OK
-norm(b-Ax)  5.6e-17
-./cholmod_simple < Matrix/can___24.mtx
-CHOLMOD sparse:  A:  24-by-24, nz 92, upper.  OK
-norm(b-Ax)  2.0e-15
-./cholmod_simple < Matrix/bcsstk01.tri
-CHOLMOD sparse:  A:  48-by-48, nz 224, upper.  OK
-norm(b-Ax)  2.7e-13
diff --git a/CHOLMOD/Doc/ChangeLog b/CHOLMOD/Doc/ChangeLog
index 487ba9a..c445e38 100644
--- a/CHOLMOD/Doc/ChangeLog
+++ b/CHOLMOD/Doc/ChangeLog
@@ -1,3 +1,123 @@
+Oct 23, 2014: version 3.0.3
+
+    * minor fix for CHOLMOD/Supernodal/cholmod_super_symbolic.c (was using a
+      non-ANSI C method to declare and initialize a variable).
+    * added additional paper in CHOLMOD/Doc
+
+Oct 10, 2014: version 3.0.2
+
+    * changes to accomodate GPU-accelerated SPQR
+    * added CHOLMOD/Include/cholmod_function.h for backward compatibility
+        for function pointers (moved from Common to SuiteSparse_config,
+        as of v2.2.0)
+
+July 18, 2014: version 3.0.1
+
+    * minor correction to 3.0.0 Beta build process, to compile SPQR when
+        CHOLMOD is compiled on the GPU
+    * added cholmod_rowfac_mask2 function for LPDASA
+    * to test the GPU, use 'make big' in CHOLMOD/Demo.  You will need to first
+        download the GHS_psdef/audikw_1.mtx from the UF collection:
+        http://www.cise.ufl.edu/research/sparse/matrices/GHS_psdef/audikw_1.html
+
+March 26, 2014: version 3.0.0 (beta)
+
+    * major update to GPU acceleration.  Released at NVIDIA GTC 2014.
+
+July 31, 2013: version 2.2.0
+
+    * modified the CHOLMOD Common so that it is the same size regardless
+        of whether or not the GPU is used.
+    * changed malloc, printf, hypot, and divcomplex pointers to use
+        SuiteSparse_config.  Removed CHOLMOD Common-> function pointers.
+
+Apr 25, 2013: version 2.1.2
+
+    * minor update for CHOLMOD/Cholesky/*solve*.c:
+        version 2.1.0 broke the Microsoft Visual C/C++ compiler
+
+Apr 16, 2013: version 2.1.1
+
+    * bug fix to Lib/Makefile and Demo/Makefile, to handle -DNCAMD correctly.
+    * changes to Supernodal/t_cholmod_gpu.c: to fix a GPU memory leak,
+        to fix the statistics on TRSM timing, and to reduce CPU-GPU memory
+        traffic.
+    * added cholmod_version function.
+
+Mar 27, 2013: version 2.1.0
+
+    * added the -DNCAMD option.  Formerly, the -DNPARTITION option disabled
+        both METIS and the interface to CAMD, CCOLAMD, and CSYMAMD.
+        Now, -DNPARTITION controls just whether or not the interface to
+        METIS is compiled.  The new -DNCAMD option controls whether or not
+        the interfaces to CAMD, CCOLAMD, and CSYMAMD are compiled.
+        Both features remain in the Partition Module, as in prior versions.
+    * added cholmod_lsolve_pattern and modified cholmod_row_lsubtree,
+        to compute nonzero pattern of L\b where b is sparse
+    * added cholmod_solve2 and cholmod_ensure_dense, so that repeated
+        forward/backsolves can be done without the need to malloc/free,
+        memory on each solve.  Also provides the option for solving for
+        a subset of the solution vector x (via the Bset and Xset
+        parameters to cholmod_solve2).  The last option required an IPerm
+        member to be added to the Cholesky factorization object.  It is only
+        allocated and used if cholmod_solve2 solves with Bset.
+
+Jun 20, 2012: verison 2.0.1
+
+    * minor update for Windows (removed filesep, compiler port fix)
+    * minor changes to format of User Guide
+    * bug fix for GPU code (singular case)
+
+Jun 1, 2012: version 2.0.0
+
+    * changed from UFconfig to SuiteSparse_config
+    * added interface to CUDA BLAS
+
+Dec 7, 2011: version 1.7.4
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * Makefile now detects whether or not METIS is present, and
+        sets -DNPARTITION if it is not
+
+Jan 25, 2011: version 1.7.3
+
+    * minor fix to "make install"
+    * minor change to Core/cholmod_memory.c, rename "I" which conflicts with
+        a predefined token in some compilers
+
+Nov 30, 2009: version 1.7.2
+
+    * added "make install" and "make uninstall"
+    * fixed interface to 64-bit BLAS for MATLAB 7.8
+
+Sept 30, 2008, version 1.7.1
+
+    * bug fix to cholmod_symmetry; it reported incorrectly if the matrix
+        had a zero-free diagonal or not.  No effect on the use of CHOLMOD in
+        MATLAB.  No effect on the mwrite function, either, which uses
+        cholmod_symmetry.  Note that the number of nonzeros on the diagonal was
+        (and still is) correctly computed.  Only effect is on the
+        UF_Index.cholcand statistic reported in the UFget index, and on the web
+        pages, for the UF Sparse Matrix Collection (the UF_Index.cholcand
+        field).  This affects the output of spsym.
+
+Sept 20, 2008, version 1.7.0
+
+    * update for SuiteSparseQR:
+
+	- add SuiteSparseQR knobs and stats to CHOLMOD Common
+	- SuiteSparseQR uses CHOLMOD for its multifrontal symbolic analysis
+	- changed (char *) input parameters to (const char *), to avoid
+	    spurious compiler warnings when C++ calls C.
+	- minor change to the AMD backup strategy in cholmod_analyze, to better
+	    suit SuiteSparseQR
+	- modified cholmod_analyze and cholmod_super_symbolic,
+	    to add "for_cholesky" parameter; new function cholmod_analyze_p2.
+	    This parameter is false for SuiteSparseQR.
+	- minor correction to comments in cholmod_postorder.c
+	- performance enhancement to supernodal symbolic analysis, when
+	    A or AA' is fairly dense
+
 Nov 1, 2007, version 1.6.0
 
     * minor lint cleanup (no bugs)
diff --git a/CHOLMOD/Doc/IA3_2014_Workshop_Rennich_Stosic_Davis_preprint.pdf b/CHOLMOD/Doc/IA3_2014_Workshop_Rennich_Stosic_Davis_preprint.pdf
new file mode 100644
index 0000000..fd14f28
Binary files /dev/null and b/CHOLMOD/Doc/IA3_2014_Workshop_Rennich_Stosic_Davis_preprint.pdf differ
diff --git a/CHOLMOD/Doc/Makefile b/CHOLMOD/Doc/Makefile
index 6945903..d274db6 100644
--- a/CHOLMOD/Doc/Makefile
+++ b/CHOLMOD/Doc/Makefile
@@ -1,8 +1,8 @@
 default: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-all: UserGuide.pdf
+all: UserGuide.pdf purge
 
 I = \
 	../Include/cholmod.h \
@@ -114,6 +114,7 @@ UserGuide.pdf: UserGuide.tex UserGuide.bib $(I) $(C) $(M) Makefile getproto rule
 	./getproto '/int cholmod_factor_xtype/, /\*\) ;/' ../Include/cholmod_core.h > _factor_xtype.tex 
 	./getproto '/typedef struct cholmod_dense/, /^}/' ../Include/cholmod_core.h > _dense.tex 
 	./getproto '/cholmod_dense \*cholmod_allocate_dense/, /\*\) ;/' ../Include/cholmod_core.h > _allocate_dense.tex 
+	./getproto '/cholmod_dense \*cholmod_ensure_dense/, /\*\) ;/' ../Include/cholmod_core.h > _ensure_dense.tex 
 	./getproto '/cholmod_dense \*cholmod_zeros/, /\*\) ;/' ../Include/cholmod_core.h > _zeros.tex 
 	./getproto '/cholmod_dense \*cholmod_ones/, /\*\) ;/' ../Include/cholmod_core.h > _ones.tex 
 	./getproto '/cholmod_dense \*cholmod_eye/, /\*\) ;/' ../Include/cholmod_core.h > _eye.tex 
@@ -136,6 +137,7 @@ UserGuide.pdf: UserGuide.tex UserGuide.bib $(I) $(C) $(M) Makefile getproto rule
 	./getproto '/void \*cholmod_free/, /\*\) ;/' ../Include/cholmod_core.h > _free.tex 
 	./getproto '/void \*cholmod_realloc/, /\*\) ;/' ../Include/cholmod_core.h > _realloc.tex 
 	./getproto '/int cholmod_realloc_multiple/, /\*\) ;/' ../Include/cholmod_core.h > _realloc_multiple.tex 
+	./getproto '/int cholmod_version/, /l_version/' ../Include/cholmod_core.h > _version.tex 
 	./getproto '/itype defines the/, /define CHOLMOD_SUPERNODAL/' ../Include/cholmod_core.h > _defn.tex 
 	./getproto '/int cholmod_check_common/, /\*\) ;/' ../Include/cholmod_check.h > _check_common.tex 
 	./getproto '/int cholmod_print_common/, /\*\) ;/' ../Include/cholmod_check.h > _print_common.tex 
@@ -164,6 +166,7 @@ UserGuide.pdf: UserGuide.tex UserGuide.bib $(I) $(C) $(M) Makefile getproto rule
 	./getproto '/int cholmod_factorize /, /\*\) ;/' ../Include/cholmod_cholesky.h > _factorize.tex
 	./getproto '/int cholmod_factorize_p/, /\*\) ;/' ../Include/cholmod_cholesky.h > _factorize_p.tex
 	./getproto '/cholmod_dense \*cholmod_solve/, /\*\) ;/' ../Include/cholmod_cholesky.h > _solve.tex 
+	./getproto '/int cholmod_solve2/, /\*\) ;/' ../Include/cholmod_cholesky.h > _solve2.tex 
 	./getproto '/cholmod_sparse \*cholmod_spsolve/, /\*\) ;/' ../Include/cholmod_cholesky.h > _spsolve.tex 
 	./getproto '/int cholmod_etree/, /\*\) ;/' ../Include/cholmod_cholesky.h > _etree.tex 
 	./getproto '/int cholmod_rowcolcounts/, /\*\) ;/' ../Include/cholmod_cholesky.h > _rowcolcounts.tex 
@@ -174,6 +177,7 @@ UserGuide.pdf: UserGuide.tex UserGuide.bib $(I) $(C) $(M) Makefile getproto rule
 	./getproto '/int cholmod_rowfac_mask/, /\*\) ;/' ../Include/cholmod_cholesky.h > _rowfac_mask.tex 
 	./getproto '/int cholmod_row_subtree/, /\*\) ;/' ../Include/cholmod_cholesky.h > _row_subtree.tex 
 	./getproto '/int cholmod_row_lsubtree/, /\*\) ;/' ../Include/cholmod_cholesky.h > _row_lsubtree.tex 
+	./getproto '/int cholmod_lsolve_pattern/, /\*\) ;/' ../Include/cholmod_cholesky.h > _lsolve_pattern.tex 
 	./getproto '/int cholmod_resymbol /, /\*\) ;/' ../Include/cholmod_cholesky.h > _resymbol.tex
 	./getproto '/int cholmod_resymbol_noperm/, /\*\) ;/' ../Include/cholmod_cholesky.h > _resymbol_noperm.tex 
 	./getproto '/double cholmod_rcond/, /\*\) ;/' ../Include/cholmod_cholesky.h > _rcond.tex
@@ -219,7 +223,9 @@ UserGuide.pdf: UserGuide.tex UserGuide.bib $(I) $(C) $(M) Makefile getproto rule
 distclean: purge
 
 purge: clean
-	- $(RM) _temp.awk _*.tex *.dvi *.aux *.log *.lof *.lot *.toc *.bak *.bbl *.blg
+	- $(RM) _temp.awk _*.tex *.dvi *.aux *.log *.lof *.lot *.toc *.bak 
+	- $(RM) *.bbl *.blg
+	- $(RM) -r *.dSYM
 
 clean:
-	- $(RM) $(CLEAN)
+	- $(RM) -r $(CLEAN)
diff --git a/CHOLMOD/Doc/UserGuide.pdf b/CHOLMOD/Doc/UserGuide.pdf
index 03a0724..a4ca672 100644
Binary files a/CHOLMOD/Doc/UserGuide.pdf and b/CHOLMOD/Doc/UserGuide.pdf differ
diff --git a/CHOLMOD/Doc/UserGuide.tex b/CHOLMOD/Doc/UserGuide.tex
index 8a0d72e..5e04f98 100644
--- a/CHOLMOD/Doc/UserGuide.tex
+++ b/CHOLMOD/Doc/UserGuide.tex
@@ -9,7 +9,7 @@
 \newcommand{\new}[1]{\overline{#1}}
 
 \topmargin 0in
-\textheight 9in
+\textheight 8.5in
 \oddsidemargin 0pt
 \evensidemargin 0pt
 \textwidth 6.5in
@@ -17,11 +17,11 @@
 \begin{document}
 
 \author{Timothy A. Davis \\
-Dept. of Computer and Information Science and Engineering \\
-Univ. of Florida, Gainesville, FL}
+DrTimothyAldenDavis at gmail.com, http://www.suitesparse.com }
 \title{User Guide for CHOLMOD: a sparse Cholesky factorization and
 modification package}
-\date{Version 1.6, Nov 1, 2007}
+
+\date{VERSION 3.0.3, Oct 23, 2014}
 \maketitle
 
 %-------------------------------------------------------------------------------
@@ -37,13 +37,17 @@ modification package}
     Its supernodal Cholesky factorization
     relies on LAPACK and the Level-3 BLAS, and obtains a substantial fraction
     of the peak performance of the BLAS.  Both real and complex matrices
-    are supported.  CHOLMOD is written in ANSI/ISO C, with both
+    are supported.  
+    It also includes a non-supernodal $\m{LDL}^T$ factorization method
+    that can factorize symmetric indefinite matrices if all of their
+    leading submatrices are well-conditioned ($\m{D}$ is diagonal).
+    CHOLMOD is written in ANSI/ISO C, with both
     C and MATLAB interfaces.  This code works on Microsoft Windows and many versions
     of Unix and Linux.
 \end{abstract}
 %-------------------------------------------------------------------------------
 
-CHOLMOD Copyright\copyright 2005-2006 by Timothy A. Davis.  Portions are also
+CHOLMOD Copyright\copyright 2005-2014 by Timothy A. Davis.  Portions are also
 copyrighted by William W. Hager (the {\tt Modify} Module),
 and the University of Florida (the {\tt Partition} and {\tt Core} Modules).
 All Rights Reserved.  Some of CHOLMOD's Modules are distributed under the GNU
@@ -51,7 +55,7 @@ General Public License, and others under the GNU Lesser General Public License.
 Refer to each Module for details.
 CHOLMOD is also available under other licenses that permit its use in
 proprietary applications; contact the authors for details.
-See http://www.cise.ufl.edu/research/sparse for the code and all documentation,
+See http://www.suitesparse.com for the code and all documentation,
 including this User Guide.
 
 \newpage
@@ -83,8 +87,12 @@ constrained minimum degree (CSYMAMD, CCOLAMD, CAMD), and
 graph-partitioning-based nested dissection (METIS \cite{KarypisKumar98}).
 Most of its operations are available within MATLAB via mexFunction interfaces.
 
+    CHOLMOD also includes a non-supernodal $\m{LDL}^T$ factorization method
+    that can factorize symmetric indefinite matrices if all of their
+    leading submatrices are well-conditioned ($\m{D}$ is diagonal).
+
 A pair of articles on CHOLMOD has been submitted to the ACM Transactions
-on Mathematical Softare:
+on Mathematical Software:
 \cite{ChenDavisHagerRajamanickam06,DavisHager06}.
 
 CHOLMOD 1.0 replaces {\tt chol} (the sparse case), {\tt symbfact}, and {\tt etree}
@@ -239,13 +247,14 @@ along with CHOLMOD, but three of which are not.  Those included with CHOLMOD are
     algorithm,
     by Tim Davis and Siva Rajamanickam, based directly on COLAMD.
     This package is not required if CHOLMOD is compiled with the
-    {\tt -DNPARTITION} flag.
+    {\tt -DNCAMD} flag.
 \item CAMD: a constrained approximate minimum degree ordering
     algorithm,
     by Tim Davis and Yanqing Chen, based directly on AMD.
     This package is not required if CHOLMOD is compiled with the
-    {\tt -DNPARTITION} flag.
-\item {\tt UFconfig}: a single place where all sparse matrix packages authored
+    {\tt -DNCAMD} flag.
+\item {\tt SuiteSparse\_config}:
+    a single place where all sparse matrix packages authored
     or co-authored by Davis are configured.  Also includes a version of the
     {\tt xerbla} routine for the BLAS.
 \end{itemize}
@@ -269,34 +278,44 @@ Three other packages are required for optimal performance:
 \item LAPACK: the Basic Linear Algebra Subprograms.
     Not needed if {\tt -DNSUPERNODAL} is used.
     See http://www.netlib.org.
+\item CUDA BLAS:  CHOLMOD can exploit an NVIDIA GPU by using the CUDA BLAS
+    for large supernodes.  This feature is new to CHOLMOD v2.0.0.
 \end{itemize}
 
 You must first obtain and install METIS, LAPACK, and the BLAS.
 Next edit the system-dependent configurations in the
-{\tt UFconfig/UFconfig.mk} file.  Sample configurations are provided
+{\tt SuiteSparse\_config/SuiteSparse\_config.mk} file.
+Sample configurations are provided
 for Linux, Macintosh, Sun Solaris, SGI IRIX, IBM AIX, and the DEC/Compaq Alpha.
 The most important configuration is the location of the BLAS, LAPACK, and METIS
 packages, since in its default configuration CHOLMOD cannot be compiled without them.
 
 \noindent
-Here are the various parameters that you can control in your {\tt UFconfig/UFconfig.mk} file:
+Here are the various parameters that you can control in your
+{\tt SuiteSparse\_config/SuiteSparse\_config.mk} file:
 \begin{itemize}
 \item {\tt CC = } your C compiler, such as {\tt cc}.
-\item {\tt CFLAGS = } optimization flags, such as {\tt -O}.
+\item {\tt CF = } optimization flags, such as {\tt -O}.
 \item {\tt RANLIB = } your system's {\tt ranlib} program, if needed.
-\item {\tt AR =} the command to create a library (such as {\tt ar}).
+\item {\tt ARCHIVE =} the command to create a library (such as {\tt ar}).
 \item {\tt RM =} the command to delete a file.
 \item {\tt MV =} the command to rename a file.
 \item {\tt F77 =} the command to compile a Fortran program (optional).
 \item {\tt F77FLAGS =} the Fortran compiler flags (optional).
 \item {\tt F77LIB =} the Fortran libraries (optional).
 \item {\tt LIB = } basic libraries, such as {\tt -lm}.
-\item {\tt MEX =} the command to compile a MATLAB mexFunction.
 \item {\tt BLAS =} your BLAS library.
 \item {\tt LAPACK =} your LAPACK library.
 \item {\tt XERBLA =} a library containing the BLAS {\tt xerbla} routine, if required.
 \item {\tt METIS\_PATH =} the path to your copy of the METIS 4.0.1 source code.
 \item {\tt METIS =} your METIS library.
+\item {\tt GPU\_CONFIG = } configuration settings specific to the CUDA BLAS.
+    To enable the CUDA BLAS, use {\tt GPU\_CONFIG = -DGPU\_BLAS
+    -I\$(GPU\_BLAS\_PACK)/include}, and set
+    {\tt GPU\_BLAS\_PATH =} to your CUDA library installation path.
+    Then include {\tt \$(GPU\_CONFIG)} as one of the settings for
+    {\tt CHOLMOD\_CONFIG}.  See the {\tt SuiteSparse\_config.mk}
+    file for details.
 \item {\tt CHOLMOD\_CONFIG = } configuration settings specific to CHOLMOD.
 \end{itemize}
 
@@ -305,7 +324,10 @@ CHOLMOD's specific settings are given by the {\tt CHOLMOD\_CONFIG} string:
 \begin{itemize}
 \item {\tt -DNCHECK}:	    do not include the Check module.	   License: GNU LGPL.
 \item {\tt -DNCHOLESKY}:    do not include the Cholesky module.	   License: GNU LGPL.
-\item {\tt -DNPARTITION}:   do not include the Partition module.   License: GNU LGPL.
+\item {\tt -DNPARTITION}:   do not include the interface to METIS in
+the Partition module.   License: GNU LGPL.
+\item {\tt -DCAMD}:   do not include the interfaces to CAMD, CCOLAMD,
+and CSYMAMD in the Partition module.   License: GNU LGPL.
 \item {\tt -DNGPL}:	    do not include any GNU GPL Modules in the CHOLMOD library.
 \item {\tt -DNMATRIXOPS}:   do not include the MatrixOps module.   License: GNU GPL.
 \item {\tt -DNMODIFY}:	    do not include the Modify module.      License: GNU GPL.
@@ -335,16 +357,17 @@ your programs with the
 {\tt CHOLMOD/Lib/libcholmod.a},
 {\tt AMD/Lib/libamd.a},
 {\tt COLAMD/libcolamd.a},
-{\tt CAMD/libcamd.a}, \newline
-{\tt CCOLAMD/libccolamd.a},
-{\tt metis-4.0/libmetis.a},
 LAPACK,
 and
 BLAS libraries,
 as well as the {\tt xerbla} library if you need it
-({\tt UFconfig/xerlib/libcerbla.a} for the C version or
+({\tt SuiteSparse\_config/xerlib/libcerbla.a} for the C version or
 \newline
- {\tt UFconfig/xerlib/libxerbla.a} for the Fortran version).
+ {\tt SuiteSparse\_config/xerlib/libxerbla.a} for the Fortran version).
+Unless you use {\tt -DNPARTITION}, you must also link with
+{\tt metis-4.0/libmetis.a}.
+Unless {\tt -DNCAMD} is present at compile time,
+you must link with {\tt CAMD/libcamd.a}, and {\tt CCOLAMD/libccolamd.a}.
 Your compiler needs to know the location of the CHOLMOD {\tt Include} directory,
 so that it can find the {\tt cholmod.h} include file, by
 adding the {\tt -ICHOLMOD/Include} to your C compiler options
@@ -400,6 +423,7 @@ Each function is described in the next sections.
 \subsection{{\tt cholmod\_make}: compile CHOLMOD in MATLAB}			\input{_cholmod_make_m.tex}
 \newpage
 \subsection{{\tt etree2}: same as {\tt etree}}					\input{_etree2_m.tex}
+\newpage
 \subsection{{\tt graph\_demo}: graph partitioning demo}				\input{_graph_demo_m.tex}
 \newpage
 \subsection{{\tt lchol}: $\m{LL}\tr$ factorization}				\input{_lchol_m.tex}
@@ -411,7 +435,7 @@ Each function is described in the next sections.
 \subsection{{\tt ldlupdate}: update/downdate an $\m{LDL}\tr$ factorization}	\input{_ldlupdate_m.tex}
 \newpage
 \subsection{{\tt mread}: read a sparse or dense matrix from a Matrix Market file}\input{_mread_m.tex}
-\subsection{{\tt mwrite}: write a sparse or densematrix to a Matrix Market file}	\input{_mwrite_m.tex}
+\subsection{{\tt mwrite}: write a sparse or dense matrix to a Matrix Market file}	\input{_mwrite_m.tex}
 \newpage
 \subsection{{\tt metis}: order with METIS}					\input{_metis_m.tex}
 \newpage
@@ -470,35 +494,140 @@ The {\tt cholmod\_make} handles this redefinition without making any
 changes to your METIS source code.
 
 %-------------------------------------------------------------------------------
-\subsection{Unix {\tt make} for compiling CHOLMOD}
+\newpage \section{Using CHOLMOD with GPU acceleration}
 %-------------------------------------------------------------------------------
 
-You can also compile the CHOLMOD mexFunctions using the Unix/Linux {\tt make}
-command.  When using the {\tt gcc} compiler, I strongly recommend editing the
-{\tt metis-4.0/Makefile.in} file and changing {\tt COPTIONS} to
-\begin{verbatim}
-        COPTIONS = -fexceptions
-\end{verbatim}
-Also ensure {\tt -fexceptions} is in the {\tt CFLAGS} option in the
-{\tt UFconfig/UFconfig.mk} file that comes with CHOLMOD.
-If you do not make these modifications, the CHOLMOD mexFunctions
-will terminate MATLAB if they encounter an error.
-
-If you have MATLAB 7.2 or earlier and use {\tt make mex} in the
-{\tt CHOLMOD} directory (equivalently, {\tt make} in {\tt CHOLMOD/MATLAB}),
-you must first edit
-{\tt UFconfig/UFconfig.h} to remove the {\tt -largeArrayDims}
-option from the MEX command
-(or just use {\tt cholmod\_make.m} inside MATLAB).
-
-Next, compile your METIS 4.0.1 library by typing {\tt make} in the
-{\tt metis-4.0} directory.  Then type {\tt make} in the {\tt CHOLMOD/MATLAB}
-directory.  This will compile the C-callable libraries for
-AMD, COLAMD, CAMD, CCOLAMD, METIS, and CHOLMOD, and then compile the
-mexFunction interfaces to those libraries.
-If METIS tries {\tt malloc} and encounters an out-of-memory condition,
-it calls {\tt abort}, which will terminate MATLAB.  This problem does not
-occur using the method described in the previous section.
+Starting with CHOLMOD v2.0.0, it is possible to accelerate the numerical
+factorization phase of CHOLMOD using NVIDIA GPUs.  Due to the large
+computational capability of the GPUs, enabling this capability can result in
+significant performance improvements.  Similar to CPU processing, the GPU is
+better able to accelerate the dense math associated with larger supernodes.
+Hence the GPU will provide more significant performance improvements for larger
+matrices that have more, larger supernodes.
+
+In CHOLMOD v2.3.0 this GPU capability has been improved to provide a
+significant increase in performance and the interface has been expanded to make
+the use of GPUs more flexible.  CHOLMOD can take advantage of a single NVIDIA
+GPU that supports CUDA and has at least 64MB of memory.  (But substantially
+more memory, typically about 3 GB, is recommended for best performance.)
+
+Only the {\tt long} integer version of CHOLMOD can leverage GPU acceleration.
+
+%-------------------------------------------------------------------------------
+\subsection{Compiling CHOLMOD with GPU support}
+%-------------------------------------------------------------------------------
+
+In order to support GPU processing, CHOLMOD must be compiled with the
+preprocessor macro {\tt GPU\_BLAS} defined.  All GPU code is conditional upon
+this macro.  As well, the environment variable {\tt CUDA\_ROOT} must be defined
+and point to the installation of the CUDA toolkit to be used for compilation of
+CHOLMOD.  Typically this would be {\tt /usr/local/cuda}.  See {\tt
+SuiteSparse\_config\_GPU.mk} for an example of how this is done.
+
+%-------------------------------------------------------------------------------
+\subsection{Enabling GPU acceleration in CHOLMOD}
+%-------------------------------------------------------------------------------
+
+Even if compiled with GPU support, in CHOLMOD v.2.3.0, GPU processing is not
+enabled by default and must be specifically requested.  There are two ways to
+do this, either in the code calling CHOLMOD or using environment variables.
+
+The code author can specify the use of GPU processing with the {\tt
+Common->useGPU} variable.  If this is set to {\tt 1}, CHOLMOD will attempt to
+use the GPU.  If this is set to {\tt 0} the use of the GPU will be prohibited.
+If this is set to {\tt -1}, which is the default case, then the environment
+variables (following paragraph) will be queried to determine if the GPU is to
+be used.  Note that the default value of {\tt -1} is set when {\tt
+cholmod\_start(Common)} is called, so the code author must set {\tt
+Common->useGPU} after calling {\tt cholmod\_start}.
+
+Alternatively, or if it is not possible to modify the code calling CHOLMOD, GPU
+processing can invoked using the {\tt CHOLMOD\_USE\_GPU} environment variable.
+This makes it possible for any CHOLMOD user to invoke GPU processing even if
+the author of the calling program did not consider this.  The interpretation of
+the environment variable {\tt CHOLMOD\_USE\_GPU} is that if the string
+evaluates to an integer other than zero, GPU processing will be enabled.  Note
+that the setting of {\tt Common->useGPU} takes precedence and the environment
+variable {\tt CHOLMOD\_USE\_GPU} will only be queried if {\tt Common->useGPU =
+-1}.
+
+Note that in either case, if GPU processing is requested, but there is no GPU
+present, CHOLMOD will continue using the CPU only.  Consequently it is always
+safe to request GPU processing.
+
+%-------------------------------------------------------------------------------
+\newpage \subsection{Adjustable parameters}
+%-------------------------------------------------------------------------------
+
+There are a number of parameters that have been added to CHOLMOD to control GPU
+processing.  All of these have appropriate defaults such that GPU processing
+can be used without any modification.  However, for any particular combination
+of CPU/GPU, better performance might be obtained by adjusting these parameters.
+
+\bigskip
+
+From {\tt t\_cholmod\_gpu.c}
+
+\begin{quote}
+  {\tt CHOLMOD\_ND\_ROW\_LIMIT} : Minimum number of rows required in a
+  descendant supernode to be eligible for GPU processing during supernode
+  assembly
+
+
+  {\tt CHOLMOD\_ND\_COL\_LIMIT} : Minimum number of columns in a descendant
+  supernode to be eligible for GPU processing during supernode assembly
+
+
+  {\tt CHOLMOD\_POTRF\_LIMIT} : Minimum number of columns in a supernode to be
+  eligible for {\tt POTRF} and {\tt TRSM} processing on the GPU
+
+
+  {\tt CHOLMOD\_GPU\_SKIP} : Number of small descendant supernodes to assembled
+  on the CPU before querying if the GPU is needs more descendant supernodes
+  queued 
+
+\end{quote}
+
+From {\tt cholmod\_core.h}
+
+\begin{quote}
+  {\tt CHOLMOD\_HOST\_SUPERNODE\_BUFFERS} : Number of buffers in which to queue
+  descendant supernodes for GPU processing
+
+\end{quote}
+
+Programatically
+
+\begin{quote}
+
+  {\tt Common->maxGpuMemBytes} : Specifies the maximum amount of memory, in
+  bytes, that CHOLMOD can allocate on the GPU.  If this parameter is not set,
+  CHOLMOD will allocate as much GPU memory as possible.  Hence, the purpose of
+  this parameter is to restrict CHOLMOD's GPU memory use so that CHOLMOD can be
+  used simultaneously with other codes that also use GPU acceleration and
+  require some amount of GPU memory.  If the specified amount of GPU memory is
+  not allocatable, CHOLMOD will allocate the available memory and continue.
+
+  {\tt Common->maxGpuMemFraction} : Entirely similar to {\tt
+  Common->maxGpuMemBytes} but with the memory specified as a fraction of total
+  GPU memory.  Note that if both {\tt maxGpuMemBytes} and {\tt
+  maxGpuMemFraction} are specified, whichever results in the minimum amount of
+  memory will be used.
+
+\end{quote}
+
+Environment variables
+
+\begin{quote}
+  {\tt CHOLMOD\_GPU\_MEM\_BYTES} : Environment variable with a meaning
+  equivalent to {\tt Common->maxGpuMemBytes}.  This will only be queried if
+  {\tt Common->useGPU = -1}.
+
+  {\tt CHOLMOD\_GPU\_MEM\_FRACTION} : Environment variable with a meaning
+  equivalent to {\tt Common->maxGpuMemFraction}.  This will only be queried if
+  {\tt Common->useGPU = -1}.
+
+\end{quote}
 
 %-------------------------------------------------------------------------------
 \newpage \section{Integer and floating-point types, and notation used}
@@ -509,11 +638,11 @@ routines with the prefix {\tt cholmod\_} use {\tt int} integers,
 {\tt cholmod\_l\_} routines use {\tt long}.  All floating-point
 values are {\tt double}.
 
-The {\tt long} integer is redefinable, via {\tt UFconfig.h}.
-That file defines a C preprocessor token {\tt UF\_long} which is
+The {\tt long} integer is redefinable, via {\tt SuiteSparse\_config.h}.
+That file defines a C preprocessor token {\tt SuiteSparse\_long} which is
 {\tt long} on all systems except for Windows-64, in which case it is
 defined as {\tt \_\_int64}.  The intent is that with suitable compile-time
-switches, {\tt int} is a 32-bit integer and {\tt UF\_long} is a 64-bit
+switches, {\tt int} is a 32-bit integer and {\tt SuiteSparse\_long} is a 64-bit
 integer.  The term {\tt long} is used to describe the latter
 integer throughout this document (except in the prototypes).
 
@@ -869,6 +998,11 @@ and is required by all six other CHOLMOD library Modules:
     \end{itemize}
 
 %-------------------------------------------------------------------------------
+\subsubsection{{\tt cholmod\_version:} Version control}
+%-------------------------------------------------------------------------------
+The {\tt cholmod\_version} function returns the current version of CHOLMOD.
+
+%-------------------------------------------------------------------------------
 \newpage \subsection{{\tt Check} Module: print/check the CHOLMOD objects}
 %-------------------------------------------------------------------------------
     The {\tt Check} Module contains routines that check and print the five
@@ -945,6 +1079,7 @@ required by the {\tt Partition} Module.
     \item {\tt cholmod\_analyze\_p}: analyze, with user-provided permutation or $\m{f}$ set.
     \item {\tt cholmod\_factorize\_p}: factorize, with user-provided permutation or $\m{f}$.
     \item {\tt cholmod\_analyze\_ordering}:  analyze a permutation
+    \item {\tt cholmod\_solve2}: solve a linear system, reusing workspace.
     \item {\tt cholmod\_etree}: find the elimination tree.
     \item {\tt cholmod\_rowcolcounts}: compute the row/column counts of $\m{L}$.
     \item {\tt cholmod\_amd}: order using AMD.
@@ -952,6 +1087,7 @@ required by the {\tt Partition} Module.
     \item {\tt cholmod\_rowfac}: incremental simplicial factorization.
     \item {\tt cholmod\_row\_subtree}: find the nonzero pattern of a row of $\m{L}$.
     \item {\tt cholmod\_row\_lsubtree}: find the nonzero pattern of a row of $\m{L}$.
+    \item {\tt cholmod\_row\_lsubtree}: find the nonzero pattern of $\m{L}^{-1}b$.
     \item {\tt cholmod\_resymbol}: recompute the symbolic pattern of $\m{L}$.
     \item {\tt cholmod\_resymbol\_noperm}: recompute the symbolic pattern of $\m{L}$, no permutation.
     \item {\tt cholmod\_postorder}: postorder a tree.
@@ -1272,7 +1408,7 @@ that is not a part of CHOLMOD, but can be used via the function pointer.
 Stores a sparse matrix in compressed-column form.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_allocate\_sparse}: allocate sparse matrix}
+\subsection{{\tt cholmod\_allocate\_sparse}: allocate sparse matrix}
 %---------------------------------------
 
 \input{_allocate_sparse.tex}
@@ -1294,7 +1430,7 @@ Frees a sparse matrix.
 Reallocates a sparse matrix, so that it can contain {\tt nznew} entries.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_nnz}: number of entries in sparse matrix}
+\subsection{{\tt cholmod\_nnz}: number of entries in sparse matrix}
 %---------------------------------------
 
 \input{_nnz.tex}
@@ -1444,7 +1580,7 @@ of {\tt F->p} contain the column pointers of the resulting matrix, where
 not modified.  {\tt F} can still be properly freed with {\tt cholmod\_free\_sparse}.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_band}: extract band of a sparse matrix}
+\subsection{{\tt cholmod\_band}: extract band of a sparse matrix}
 %---------------------------------------
 
 \input{_band.tex}
@@ -1482,7 +1618,7 @@ Same as {\tt cholmod\_band}, except that it always operates in place.
 Only packed matrices can be converted in place.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_aat}: compute $\m{AA}\tr$}
+\subsection{{\tt cholmod\_aat}: compute $\m{AA}\tr$}
 %---------------------------------------
 
 \input{_aat.tex}
@@ -1505,7 +1641,7 @@ by changing {\tt C->stype} to 1 or -1, respectively, after calling this routine.
 Returns an exact copy of the input sparse matrix {\tt A}.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_copy}: copy (and change) sparse matrix}
+\subsection{{\tt cholmod\_copy}: copy (and change) sparse matrix}
 %---------------------------------------
 
 \input{_copy.tex}
@@ -1795,6 +1931,16 @@ Allocates a dense matrix.
 Frees a dense matrix.
 
 %---------------------------------------
+\subsection{{\tt cholmod\_ensure\_dense}: ensure dense matrix has a given size
+and type}
+%---------------------------------------
+
+\input{_ensure_dense.tex}
+Ensures a dense matrix has a given size and type.
+
+%---------------------------------------
+
+%---------------------------------------
 \newpage \subsection{{\tt cholmod\_zeros}: dense zero matrix}
 %---------------------------------------
 
@@ -1930,7 +2076,7 @@ Changing from complex or zomplex to real discards the imaginary part.
 
 \input{_malloc.tex}
 Allocates a block of memory of size {\tt n*size},
-using the {\tt Common->malloc\_memory}
+using the {\tt SuiteSparse\_config.malloc\_func}
 function pointer (default is to use the ANSI C {\tt malloc} routine).
 A value of {\tt n=0} is treated as {\tt n=1}.
 If not successful, {\tt NULL} is returned and {\tt Common->status} is set to {\tt CHOLMOD\_OUT\_OF\_MEMORY}.
@@ -1941,7 +2087,7 @@ If not successful, {\tt NULL} is returned and {\tt Common->status} is set to {\t
 
 \input{_calloc.tex}
 Allocates a block of memory of size {\tt n*size},
-using the {\tt Common->calloc\_memory}
+using the {\tt SuiteSparse\_config.calloc\_func}
 function pointer (default is to use the ANSI C {\tt calloc} routine).
 A value of {\tt n=0} is treated as {\tt n=1}.
 If not successful, {\tt NULL} is returned and {\tt Common->status} is set to {\tt CHOLMOD\_OUT\_OF\_MEMORY}.
@@ -1952,7 +2098,7 @@ If not successful, {\tt NULL} is returned and {\tt Common->status} is set to {\t
 
 \input{_free.tex}
 Frees a block of memory of size {\tt n*size},
-using the {\tt Common->free\_memory}
+using the {\tt SuiteSparse\_config.free\_func}
 function pointer (default is to use the ANSI C {\tt free} routine).
 The size of the block ({\tt n} and {\tt size}) is only required so that CHOLMOD
 can keep track of its current and peak memory usage.  This is a useful statistic,
@@ -1970,7 +2116,7 @@ have a memory leak.
 \input{_realloc.tex}
 Reallocates a block of memory whose current size {\tt n*size},
 and whose new size will be {\tt nnew*size} if successful,
-using the {\tt Common->calloc\_memory}
+using the {\tt SuiteSparse\_config.calloc\_func}
 function pointer (default is to use the ANSI C {\tt realloc} routine).
 If the reallocation is not successful, {\tt p} is returned unchanged
 and {\tt Common->status} is set to {\tt CHOLMOD\_OUT\_OF\_MEMORY}.
@@ -1988,6 +2134,38 @@ Reallocates multiple blocks of memory, all with the same number of items
 or all are returned to their original size.
 
 %-------------------------------------------------------------------------------
+\newpage \section{{\tt Core} Module: version control}
+%-------------------------------------------------------------------------------
+
+\subsection{{\tt cholmod\_version}: return current CHOLMOD version}
+
+\input{_version.tex}
+Returns the CHOLMOD version number, so that it can be tested at run time, even
+if the caller does not have access to the CHOLMOD include files.  For example,
+for a CHOLMOD version 3.2.1, the {\tt version} array will contain 3, 2, and 1,
+in that order.  This function appears in CHOLMOD 2.1.1 and later.  You can
+check if the function exists with the {\tt CHOLMOD\_HAS\_VERSION\_FUNCTION}
+macro, so that the following code fragment works in any version of CHOLMOD:
+
+\begin{verbatim}
+   #ifdef CHOLMOD_HAS_VERSION_FUNCTION
+   v = cholmod_version (NULL) ;
+   #else
+   v = CHOLMOD_VERSION ;
+   #endif
+\end{verbatim}
+
+Note that {\tt cholmod\_version} and {\tt cholmod\_l\_version} have identical
+prototypes.  Both use {\tt int}'s.  Unlike all other CHOLMOD functions, this
+function does not take the {\tt Common} object as an input parameter, and it
+does not use any definitions from any include files.  Thus, the caller can
+access this function even if the caller does not include any CHOLMOD include
+files.
+
+The above code fragment does require the {\tt \#include "cholmod.h"},
+of course, but {\tt cholmod\_version} can be called without it, if necessary.
+
+%-------------------------------------------------------------------------------
 \newpage \section{{\tt Check} Module routines}
 %-------------------------------------------------------------------------------
 
@@ -2418,7 +2596,7 @@ a supernodal $\m{LL}\tr$ factorization, however.
 Refer to {\tt cholmod\_transpose\_unsym} for a description of {\tt f}.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_factorize}: numeric factorization}
+\subsection{{\tt cholmod\_factorize}: numeric factorization}
 %---------------------------------------
 
 \input{_factorize.tex}
@@ -2464,7 +2642,7 @@ a supernodal zomplex factor, since it is incompatible with how complex numbers a
 stored in LAPACK and the BLAS.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_analyze\_p}: symbolic factorization, given permutation}
+\subsection{{\tt cholmod\_analyze\_p}: symbolic factorization, given permutation}
 %---------------------------------------
 
 \input{_analyze_p.tex}
@@ -2485,7 +2663,7 @@ the matrix before it is factorized, where {\tt beta} is real.
 Only the real part, {\tt beta[0]}, is used.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_solve}: solve a linear system}
+\subsection{{\tt cholmod\_solve}: solve a linear system}
 %---------------------------------------
 
 \input{_solve.tex}
@@ -2527,10 +2705,110 @@ the {\tt MatrixOps} Module.  See {\tt Demo/cholmod\_demo.c} for an example.
 %---------------------------------------
 
 \input{_spsolve.tex}
-Identical to {\tt cholmod\_spsolve}, except that {\tt B} and {\tt X} are sparse.
+Identical to {\tt cholmod\_solve}, except that {\tt B} and {\tt X} are sparse.
+This function converts {\tt B} to full format, solves the system, and then
+converts {\tt X} back to sparse.  If you want to solve with a sparse {\tt B}
+and get just a partial solution back in {\tt X} (corresponding to the pattern
+of {\tt B}), use {\tt cholmod\_solve2} below.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_etree}: find elimination tree}
+\subsection{{\tt cholmod\_solve2}: solve a linear system, reusing workspace}
+%---------------------------------------
+
+\input{_solve2.tex}
+Solve a linear system, optionally reusing workspace from a prior call
+to {\tt cholmod\_solve2}.
+
+The inputs to this function are the same as {\tt cholmod\_solve},
+with the addition of three parameters:
+{\tt X},
+{\tt Y},
+and
+{\tt E}.  The dense matrix {\tt X} is the solution on output.
+On input, {\tt \&X} can point to a NULL matrix, or be the wrong size.
+If that is the case, it is freed and allocated to be the proper size. 
+If {\tt X} has the right size and type on input, then the allocation
+is skipped.  In contrast, the {\tt cholmod\_solve} function always
+allocates its output {\tt X}.  This {\tt cholmod\_solve2} function
+allows you to reuse the memory space of a prior {\tt X}, thereby
+saving time.
+
+The two workspace matrices {\tt Y} and {\tt E} can also be reused
+between calls.
+You must free
+{\tt X}
+{\tt Y},
+and 
+{\tt E} yourself, when your computations are done.  Below is an
+example of usage.
+Note that 
+{\tt X}
+{\tt Y},
+and 
+{\tt E} must be defined on input (either NULL, or valid dense matrices).
+
+\begin{verbatim}
+        cholmod_dense *X = NULL, *Y = NULL, *E = NULL ;
+        ...
+        cholmod_l_solve2 (sys, L, B1, NULL, &X, NULL, &Y, &E, Common) ;
+        cholmod_l_solve2 (sys, L, B2, NULL, &X, NULL, &Y, &E, Common) ;
+        cholmod_l_solve2 (sys, L, B3, NULL, &X, NULL, &Y, &E, Common) ;
+        cholmod_l_free_dense (&X, Common) ;
+        cholmod_l_free_dense (&Y, Common) ;
+        cholmod_l_free_dense (&E, Common) ;
+\end{verbatim}
+
+The equivalent when using {\tt cholmod\_solve} is:
+
+\begin{verbatim}
+        cholmod_dense *X = NULL, *Y = NULL, *E = NULL ;
+        ...
+        X = cholmod_l_solve (sys, L, B1, Common) ;
+        cholmod_l_free_dense (&X, Common) ;
+        X = cholmod_l_solve (sys, L, B2, Common) ;
+        cholmod_l_free_dense (&X, Common) ;
+        X = cholmod_l_solve (sys, L, B3, Common) ;
+        cholmod_l_free_dense (&X, Common) ;
+\end{verbatim}
+
+Both methods work fine, but in the second method with {\tt cholmod\_solve},
+the internal workspaces ({\tt Y} and {\tt E}) and the solution ({\tt X})
+are allocated and freed on each call.
+
+The {\tt cholmod\_solve2 function} can also solve for a subset of the solution
+vector {\tt X}, if the optional {\tt Bset} parameter is non-NULL.  The
+right-hand-side {\tt B} must be a single column vector, and its complexity
+(real, complex, zomplex) must match that of {\tt L}.  The vector {\tt B} is
+dense, but it is assumed to be zero except for row indices specified in {\tt
+Bset}.  The vector {\tt Bset} must be a sparse column vector, of dimension the
+same as {\tt B}.  Only the pattern of {\tt Bset} is used.  The solution {\tt X}
+(a dense column vector) is modified on output, but is defined only in the rows
+defined by the sparse vector {\tt Xset}.  The entries in {\tt Bset} are a
+subset of {\tt Xset} (except if {\tt sys} is {\tt CHOLMOD\_P} or {\tt
+CHOLMOD\_Pt}).
+
+No memory allocations are done if the outputs and internal
+workspaces ({\tt X}, {\tt Xset}, {\tt Y}, and {\tt E}) have been allocated
+by a prior call (or if allocated by the user).  To let {\tt cholmod\_solve2}
+allocate these outputs and workspaces for you, simply initialize them to
+NULL (as in the example above).  Since it is possible for this function
+to reallocate these 4 arrays, you should always re-acquire the pointers to
+their internal data ({\tt X->x} for example) after calling
+{\tt cholmod\_solve2}), since they may change.  They normally will not
+change except in the first call to this function.
+
+On the first call to {\tt cholmod\_solve2} when {\tt Bset} is NULL,
+the factorization is converted from supernodal to simplicial, if needed.
+The inverse permutation is also computed and stored in the factorization
+object, {\tt L}.  This can take a modest amount of time.  Subsequent
+calls to {\tt cholmod\_solve2} with a small {\tt Bset}
+are very fast (both asymptotically and in practice).
+
+You can find an example of how to use {\tt cholmod\_solve2} in the
+two demo programs, {\tt cholmod\_demo} and {\tt cholmod\_l\_demo}.
+
+%---------------------------------------
+\subsection{{\tt cholmod\_etree}: find elimination tree}
 %---------------------------------------
 
 \input{_etree.tex}
@@ -2568,7 +2846,7 @@ The algorithm is described in \cite{GilbertLiNgPeyton01,GilbertNgPeyton94}.
 % sparse QR and LU factorization", BIT, vol 41, 2001, pp. 693-710.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_analyze\_ordering}: analyze a permutation}
+\subsection{{\tt cholmod\_analyze\_ordering}: analyze a permutation}
 %---------------------------------------
 
 \input{_analyze_ordering.tex}
@@ -2586,7 +2864,7 @@ The column counts of {\tt L}, flop count, and other statistics from
 {\tt cholmod\_rowcolcounts} are not computed if {\tt ColCount} is {\tt NULL}.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_amd}: interface to AMD}
+\subsection{{\tt cholmod\_amd}: interface to AMD}
 %---------------------------------------
 
 \input{_amd.tex}
@@ -2619,7 +2897,7 @@ combined with its postordering (COLAMD itself does not perform this postordering
 {\tt A} must be unsymmetric ({\tt A->stype = 0}).
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_rowfac}: row-oriented Cholesky factorization}
+\subsection{{\tt cholmod\_rowfac}: row-oriented Cholesky factorization}
 %---------------------------------------
 
 \input{_rowfac.tex}
@@ -2674,7 +2952,7 @@ For use in LPDASA only.
 
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_row\_subtree}: pattern of row of a factor}
+\subsection{{\tt cholmod\_row\_subtree}: pattern of row of a factor}
 %---------------------------------------
 
 \input{_row_subtree.tex}
@@ -2698,7 +2976,7 @@ with {\tt R->nzmax >= nrow}.  {\tt R} is assumed to be packed ({\tt Rnz [0]} is
 the number of entries in {\tt R} is given by {\tt Rp [0]}.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_row\_lsubtree}: pattern of row of a factor}
+\subsection{{\tt cholmod\_row\_lsubtree}: pattern of row of a factor}
 %---------------------------------------
 
 \input{_row_lsubtree.tex}
@@ -2708,7 +2986,7 @@ the nonzero pattern of the {\tt k}th column of {\tt F} is given by
 {\tt Fi} and {\tt fnz} instead.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_resymbol}: re-do symbolic factorization}
+\subsection{{\tt cholmod\_resymbol}: re-do symbolic factorization}
 %---------------------------------------
 
 \input{_resymbol.tex}
@@ -2737,7 +3015,7 @@ Identical to {\tt cholmod\_resymbol}, except that the fill-reducing
 ordering {\tt L->Perm} is not used.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_postorder}: tree postorder}
+\subsection{{\tt cholmod\_postorder}: tree postorder}
 %---------------------------------------
 
 \input{_postorder.tex}
@@ -2850,7 +3128,6 @@ reducing permutation {\tt L->Perm} is not used.  The vectors $\m{x}$ and $\m{b}$
 ordering, not your original ordering.  This routine does not handle multiple right-hand-sides.
 
 %---------------------------------------
-\newpage
 \subsection{{\tt cholmod\_updown\_mark}: update/downdate}
 %---------------------------------------
 
@@ -2869,7 +3146,7 @@ by Hager and Davis.
 For use in LPDASA only.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_rowadd}: add row to factor}
+\subsection{{\tt cholmod\_rowadd}: add row to factor}
 %---------------------------------------
 
 \input{_rowadd.tex}
@@ -2887,7 +3164,7 @@ The algorithm is described in \cite{DavisHager05}.
 Identical to {\tt cholmod\_rowadd}, except the system $\m{Lx}=\m{b}$ is also updated/downdated, just like {\tt cholmod\_updown\_solve}.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_rowdel}: delete row from factor}
+\subsection{{\tt cholmod\_rowdel}: delete row from factor}
 %---------------------------------------
 
 \input{_rowdel.tex}
@@ -2908,7 +3185,7 @@ If this is the case, the kth entry of $\m{y}$ is required as input ({\tt yk}).
 The algorithm is described in \cite{DavisHager05}.
 
 %---------------------------------------
-\newpage \subsection{{\tt cholmod\_rowadd\_mark}: add row to factor}
+\subsection{{\tt cholmod\_rowadd\_mark}: add row to factor}
 %---------------------------------------
 
 \input{_rowadd_mark.tex}
@@ -3010,8 +3287,12 @@ Only real matrices are supported.
 Sparse matrix times dense matrix:
 {\tt Y = alpha*(A*X) + beta*Y} or {\tt Y = alpha*(A'*X) + beta*Y},
 where {\tt A} is sparse and {\tt X} and {\tt Y} are dense.
-When using {\tt A},  {\tt X} has {\tt A->ncol} columns and {\tt Y} has {\tt A->nrow} rows.
-When using {\tt A'}, {\tt X} has {\tt A->nrow} columns and {\tt Y} has {\tt A->ncol} rows.
+When using {\tt A},
+{\tt X} has {\tt A->ncol} rows and
+{\tt Y} has {\tt A->nrow} rows.
+When using {\tt A'},
+{\tt X} has {\tt A->nrow} rows and
+{\tt Y} has {\tt A->ncol} rows.
 If {\tt transpose = 0}, then {\tt A} is used;
 otherwise, {\tt A'} is used (the complex conjugate transpose).
 The {\tt transpose} parameter is ignored if the matrix is symmetric or Hermitian.
@@ -3128,8 +3409,8 @@ pattern symmetry, where 0 is a completely unsymmetric matrix, and 1 is a
 perfectly symmetric matrix.  This option is used when computing the following
 statistics for the matrices in the UF Sparse Matrix Collection.
 
-	numerical symmetry: number of matched offdiagonal nonzeros over
-	the total number of offdiagonal entries.  A real entry $a_{ij}$,  $i \ne j$,
+	numerical symmetry: number of matched off-diagonal nonzeros over
+	the total number of off-diagonal entries.  A real entry $a_{ij}$,  $i \ne j$,
 	is matched if $a_{ji} = a_{ij}$, but this is only counted if both
 	$a_{ji}$ and $a_{ij}$ are nonzero.  This does not depend on {\tt Z}.
 	(If A is complex, then the above test is modified; $a_{ij}$ is matched
diff --git a/CHOLMOD/GPU/cholmod_gpu.c b/CHOLMOD/GPU/cholmod_gpu.c
new file mode 100644
index 0000000..31007f8
--- /dev/null
+++ b/CHOLMOD/GPU/cholmod_gpu.c
@@ -0,0 +1,479 @@
+/* ========================================================================== */
+/* === GPU/cholmod_gpu -===================================================== */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/GPU Module.  Copyright (C) 2014, Timothy A. Davis.
+ * The CHOLMOD/GPU Module is licensed under Version 2.0 of the GNU
+ * General Public License.  See gpl.txt for a text of the license.
+ * CHOLMOD is also available under other licenses; contact authors for details.
+ * http://www.suitesparse.com
+ * -------------------------------------------------------------------------- */
+
+/* Primary routines:
+ * -----------------
+ * cholmod_gpu_memorysize       determine free memory on current GPU
+ * cholmod_gpu_probe            ensure a GPU is available
+ * cholmod_gpu_allocate         allocate GPU resources
+ * cholmod_gpu_deallocate       free GPU resources
+ */
+
+#include "cholmod_internal.h"
+#include "cholmod_core.h"
+#include "cholmod_gpu.h"
+#include "stdio.h"
+#ifdef GPU_BLAS
+#include <cuda_runtime.h>
+#endif
+
+#define MINSIZE (64 * 1024 * 1024)
+
+/* ========================================================================== */
+/* === cholmod_gpu_memorysize =============================================== */
+/* ========================================================================== */
+
+/* Determine the amount of free memory on the current GPU.  To use another
+ * GPU, use cudaSetDevice (k) prior to calling this routine, where k is an
+ * integer in the range 0 to the number of devices-1.   If the free size is
+ * less than 64 MB, then a size of 1 is returned.  Normal usage:
+ *
+ *  Common->useGPU = 1 ;
+ *  err = cholmod_gpu_memorysize (&totmem, &availmem, Common);
+ *  Returns 1 if GPU requested but not available, 0 otherwise
+ */
+
+#ifdef GPU_BLAS
+
+static int poll_gpu (size_t s)          /* TRUE if OK, FALSE otherwise */
+{
+    /* Returns TRUE if the GPU has a block of memory of size s,
+       FALSE otherwise.  The block of memory is immediately freed. */
+    void *p = NULL ;
+    /* double t = SuiteSparse_time ( ) ; */
+    if (s == 0)
+    {
+        return (FALSE) ;
+    }
+    if (cudaMalloc (&p, s) != cudaSuccess)
+    {
+        /* t = SuiteSparse_time ( ) - t ; */
+        /* printf ("s %lu failed, time %g\n", s, t) ; */
+        return (FALSE) ;
+    }
+    cudaFree (p) ;
+    /* t = SuiteSparse_time ( ) - t ; */
+    /* printf ("s %lu OK time %g\n", s, t) ; */
+    return (TRUE) ;
+}
+
+#endif
+
+int CHOLMOD(gpu_memorysize)      /* returns 1 on error, 0 otherwise */
+(
+    size_t         *total_mem,
+    size_t         *available_mem,
+    cholmod_common *Common
+)
+{
+    size_t good, bad, s, total_free, total_memory ;
+    int k ;
+    double t ;
+
+    *total_mem = 0;
+    *available_mem = 0;
+#ifndef DLONG
+    return 0;
+#endif
+
+    if (Common->useGPU != 1)
+    {
+        return (0) ;                    /* not using the GPU at all */
+    }
+
+#ifdef GPU_BLAS
+
+    /* find the total amount of free memory */
+    t = SuiteSparse_time ( ) ;
+    cudaMemGetInfo (&total_free, &total_memory) ;
+    t = SuiteSparse_time ( ) - t ;
+    /* printf ("free %lu tot %lu time %g\n", total_free, total_memory, t) ; */
+
+    *total_mem = total_memory;
+
+    if (total_free < MINSIZE)
+    {
+        return (1) ;                    /* not even 64MB; return failure code */
+    }
+
+    /* try a bit less than the total free memory */
+    s = MAX (MINSIZE, total_free*0.98) ;
+    if (poll_gpu (s))
+    {
+        /* printf ("quick %lu\n", s) ; */
+        *available_mem = s;
+        return (0) ;  /* no error */
+    }
+
+    /* ensure s = 64 MB is OK */
+    if (!poll_gpu (MINSIZE))
+    {
+        return (1) ;                    /* not even 64MB; return failure code */
+    }
+
+    /* 8 iterations of binary search */
+    good = MINSIZE ;                    /* already known to be OK */
+    bad  = total_free ;                 /* already known to be bad */
+    for (k = 0 ; k < 8 ; k++)
+    {
+        s = (good + bad) / 2 ;
+        if (poll_gpu (s))
+        {
+            good = s ;                  /* s is OK, increase good */
+        }
+        else
+        {
+            bad = s ;                   /* s failed, decrease bad */
+        }
+    }
+
+    /* printf ("final %lu\n", good) ; */
+    *available_mem = good;
+
+#endif
+
+    return (0) ; /* no error */
+}
+
+
+/* ========================================================================== */
+/* === cholmod_gpu_probe ==================================================== */
+/* ========================================================================== */
+/*
+ * Used to ensure that a suitable GPU is available.  As this version of
+ * CHOLMOD can only utilize a single GPU, only the default (i.e. selected as
+ * 'best' by the NVIDIA driver) is verified as suitable.  If this selection
+ * is incorrect, the user can select the proper GPU with the
+ * CUDA_VISIBLE_DEVICES environment variable.
+ *
+ * To be considered suitable, the GPU must have a compute capability > 1 and
+ * more than 1 GB of device memory.
+ */
+
+int CHOLMOD(gpu_probe) ( cholmod_common *Common )
+{
+
+#ifdef GPU_BLAS
+    int ngpus, idevice;
+    double tstart, tend;
+    struct cudaDeviceProp gpuProp;
+
+    if (Common->useGPU != 1)
+    {
+        return (0) ;
+    }
+
+    cudaGetDeviceCount(&ngpus);
+
+    if ( ngpus ) {
+        cudaGetDevice ( &idevice );
+        cudaGetDeviceProperties ( &gpuProp, idevice );
+        if ( gpuProp.major > 1 && 1.0e-9*gpuProp.totalGlobalMem > 1.0 ) {
+            return 1;  /* useGPU = 1 */
+        }
+    }
+    CHOLMOD_GPU_PRINTF (("GPU WARNING: useGPUs was selected, "
+        "but no applicable GPUs were found. useGPU reset to FALSE.\n")) ;
+#endif
+
+    /* no GPU is available */
+    return 0;  /* useGPU = 0 */
+}
+
+/* ========================================================================== */
+/* === cholmod_gpu_deallocate =============================================== */
+/* ========================================================================== */
+
+/*
+ * Deallocate all GPU related buffers.
+ */
+
+int CHOLMOD(gpu_deallocate)
+(
+    cholmod_common *Common
+)
+{
+
+#ifdef GPU_BLAS
+    cudaError_t cudaErr;
+
+    if ( Common->dev_mempool )
+    {
+        /* fprintf (stderr, "free dev_mempool\n") ; */
+        cudaErr = cudaFree (Common->dev_mempool);
+        /* fprintf (stderr, "free dev_mempool done\n") ; */
+        if ( cudaErr )
+        {
+            ERROR ( CHOLMOD_GPU_PROBLEM,
+                    "GPU error when freeing device memory.");
+        }
+    }
+    Common->dev_mempool = NULL;
+    Common->dev_mempool_size = 0;
+
+    if ( Common->host_pinned_mempool )
+    {
+        /* fprintf (stderr, "free host_pinned_mempool\n") ; */
+        cudaErr = cudaFreeHost ( Common->host_pinned_mempool );
+        /* fprintf (stderr, "free host_pinned_mempool done\n") ; */
+        if ( cudaErr )
+        {
+            ERROR ( CHOLMOD_GPU_PROBLEM,
+                    "GPU error when freeing host pinned memory.");
+        }
+    }
+    Common->host_pinned_mempool = NULL;
+    Common->host_pinned_mempool_size = 0;
+
+    CHOLMOD (gpu_end) (Common) ;
+#endif
+
+    return (0);
+}
+
+/* ========================================================================== */
+/* === cholmod_gpu_end ====================================================== */
+/* ========================================================================== */
+
+void CHOLMOD(gpu_end)
+(
+    cholmod_common *Common
+)
+{
+#ifdef GPU_BLAS
+    int k ;
+
+    /* ------------------------------------------------------------------ */
+    /* destroy Cublas Handle */
+    /* ------------------------------------------------------------------ */
+
+    if (Common->cublasHandle)
+    {
+        /* fprintf (stderr, "destroy cublas %p\n", Common->cublasHandle) ; */
+        cublasDestroy (Common->cublasHandle) ;
+        /* fprintf (stderr, "destroy cublas done\n") ; */
+        Common->cublasHandle = NULL ;
+    }
+
+    /* ------------------------------------------------------------------ */
+    /* destroy each CUDA stream */
+    /* ------------------------------------------------------------------ */
+
+    for (k = 0 ; k < CHOLMOD_HOST_SUPERNODE_BUFFERS ; k++)
+    {
+        if (Common->gpuStream [k])
+        {
+            /* fprintf (stderr, "destroy gpuStream [%d] %p\n", k,
+                Common->gpuStream [k]) ; */
+            cudaStreamDestroy (Common->gpuStream [k]) ;
+            /* fprintf (stderr, "destroy gpuStream [%d] done\n", k) ; */
+            Common->gpuStream [k] = NULL ;
+        }
+    }
+
+    /* ------------------------------------------------------------------ */
+    /* destroy each CUDA event */
+    /* ------------------------------------------------------------------ */
+
+    for (k = 0 ; k < 3 ; k++)
+    {
+        if (Common->cublasEventPotrf [k])
+        {
+            /* fprintf (stderr, "destroy cublasEnventPotrf [%d] %p\n", k,
+                Common->cublasEventPotrf [k]) ; */
+            cudaEventDestroy (Common->cublasEventPotrf [k]) ;
+            /* fprintf (stderr, "destroy cublasEnventPotrf [%d] done\n", k) ; */
+            Common->cublasEventPotrf [k] = NULL ;
+        }
+    }
+
+    for (k = 0 ; k < CHOLMOD_HOST_SUPERNODE_BUFFERS ; k++)
+    {
+        if (Common->updateCBuffersFree [k])
+        {
+            /* fprintf (stderr, "destroy updateCBuffersFree [%d] %p\n", k,
+                Common->updateCBuffersFree [k]) ; */
+            cudaEventDestroy (Common->updateCBuffersFree [k]) ;
+            /* fprintf (stderr, "destroy updateCBuffersFree [%d] done\n", k) ;*/
+            Common->updateCBuffersFree [k] = NULL ;
+        }
+    }
+
+    if (Common->updateCKernelsComplete)
+    {
+        /* fprintf (stderr, "destroy updateCKernelsComplete %p\n",
+            Common->updateCKernelsComplete) ; */
+        cudaEventDestroy (Common->updateCKernelsComplete) ;
+        /* fprintf (stderr, "destroy updateCKernelsComplete done\n") ; */
+        Common->updateCKernelsComplete = NULL;
+    }
+#endif
+}
+
+
+/* ========================================================================== */
+/* === cholmod_gpu_allocate ================================================= */
+/* ========================================================================== */
+/*
+ * Allocate both host and device memory needed for GPU computation.
+ *
+ * Memory allocation is expensive and should be done once and reused for
+ * multiple factorizations.
+ *
+ * When gpu_allocate is called, the requested amount of device (and by
+ * association host) memory is computed.  If that amount or more memory has
+ * already been allocated, then nothing is done.  (i.e. memory allocation is
+ * not reduced.)  If the requested amount is more than is currently allcoated
+ * then both device and pinned host memory is freed and the new amount
+ * allocated.
+ *
+ * This routine will allocate the minimum of either:
+ *
+ * maxGpuMemBytes - size of requested device allocation in bytes
+ *
+ * maxGpuMemFraction - size of requested device allocation as a fraction of
+ *                     total GPU memory
+ *
+ * If both maxGpuMemBytes and maxGpuMemFraction are zero, this will allocate
+ * the maximum amount of GPU memory possible.
+ *
+ * Note that since the GPU driver requires some memory, it is not advisable
+ * to request maxGpuMemFraction of 1.0 (which will request all GPU memory and
+ * will fail).  If maximum memory is requested then call this routine wtih
+ * both maxGpuMemBytes and maxGpuMemFraction of 0.0.
+ *
+ */
+
+int CHOLMOD(gpu_allocate) ( cholmod_common *Common )
+{
+
+#ifdef GPU_BLAS
+
+    int k;
+    size_t fdm, tdm;
+    size_t requestedDeviceMemory, requestedHostMemory;
+    double tstart, tend;
+    cudaError_t cudaErr;
+    cublasStatus_t cublasErr;
+    size_t maxGpuMemBytes;
+    double maxGpuMemFraction;
+
+    /* fprintf (stderr, "gpu_allocate useGPU %d\n", Common->useGPU) ; */
+    if (Common->useGPU != 1) return (0) ;
+
+    maxGpuMemBytes = Common->maxGpuMemBytes;
+    maxGpuMemFraction = Common->maxGpuMemFraction;
+
+    /* ensure valid input */
+    if ( maxGpuMemBytes < 0 ) maxGpuMemBytes = 0;
+    if ( maxGpuMemFraction < 0 ) maxGpuMemFraction = 0;
+    if ( maxGpuMemFraction > 1 ) maxGpuMemFraction = 1;
+
+    int err = CHOLMOD(gpu_memorysize) (&tdm,&fdm,Common) ;
+    if (err)
+    {
+        printf ("GPU failure in cholmod_gpu: gpu_memorysize %g %g MB\n",
+            ((double) tdm) / (1024*1024),
+            ((double) fdm) / (1024*1024)) ;
+        ERROR (CHOLMOD_GPU_PROBLEM, "gpu memorysize failure\n") ;
+    }
+
+    /* compute the amount of device memory requested */
+    if ( maxGpuMemBytes == 0 && maxGpuMemFraction == 0 ) {
+        /* no specific request - take all available GPU memory
+         *  (other programs could already have allocated some GPU memory,
+         *  possibly even previous calls to gpu_allocate).  Always leave
+         *  50 MB free for driver use. */
+        requestedDeviceMemory = fdm+Common->dev_mempool_size-
+            1024ll*1024ll*50ll;
+    }
+    else if ( maxGpuMemBytes > 0 && maxGpuMemFraction > 0 ) {
+        /* both byte and fraction limits - take the lowest of the two */
+        requestedDeviceMemory = maxGpuMemBytes;
+        if ( requestedDeviceMemory > tdm*maxGpuMemFraction ) {
+            requestedDeviceMemory = tdm*maxGpuMemFraction;
+        }
+    }
+    else if ( maxGpuMemFraction > 0 ) {
+        /* just a fraction requested */
+        requestedDeviceMemory = maxGpuMemFraction * tdm;
+    }
+    else {
+        /* specific number of bytes requested */
+        requestedDeviceMemory = maxGpuMemBytes;
+        if ( maxGpuMemBytes > fdm ) {
+            CHOLMOD_GPU_PRINTF ((
+                "GPU WARNING: Requested amount of device memory not available\n"
+                )) ;
+            requestedDeviceMemory = fdm;
+        }
+    }
+
+    /* do nothing if sufficient memory has already been allocated */
+    if ( requestedDeviceMemory <= Common->dev_mempool_size ) {
+
+        CHOLMOD_GPU_PRINTF (("requested = %d, mempool = %d \n",
+            requestedDeviceMemory, Common->dev_mempool_size));
+        CHOLMOD_GPU_PRINTF (("GPU NOTE:  gpu_allocate did nothing \n"));
+        return 0;
+    }
+
+    CHOLMOD(gpu_deallocate);
+
+    /* create cuBlas handle */
+    if ( ! Common->cublasHandle ) {
+        cublasErr = cublasCreate (&(Common->cublasHandle)) ;
+        if (cublasErr != CUBLAS_STATUS_SUCCESS) {
+            ERROR (CHOLMOD_GPU_PROBLEM, "CUBLAS initialization") ;
+            return 1;
+        }
+    }
+
+    /* allocated corresponding pinned host memory */
+    requestedHostMemory = requestedDeviceMemory*CHOLMOD_HOST_SUPERNODE_BUFFERS/
+        CHOLMOD_DEVICE_SUPERNODE_BUFFERS;
+
+    cudaErr = cudaMallocHost ( (void**)&(Common->host_pinned_mempool),
+                               requestedHostMemory );
+    while ( cudaErr ) {
+        /* insufficient host memory, try again with less */
+        requestedHostMemory *= .5;
+        cudaErr = cudaMallocHost ( (void**)&(Common->host_pinned_mempool),
+                                   requestedHostMemory );
+    }
+    Common->host_pinned_mempool_size = requestedHostMemory;
+
+    requestedDeviceMemory = requestedHostMemory*
+        CHOLMOD_DEVICE_SUPERNODE_BUFFERS/CHOLMOD_HOST_SUPERNODE_BUFFERS;
+
+    /* Split up the memory allocations into required device buffers. */
+    Common->devBuffSize = requestedDeviceMemory/
+        (size_t)CHOLMOD_DEVICE_SUPERNODE_BUFFERS;
+    Common->devBuffSize -= Common->devBuffSize%0x20000;
+
+    cudaErr = cudaMalloc ( &(Common->dev_mempool), requestedDeviceMemory );
+    /*
+    CHOLMOD_HANDLE_CUDA_ERROR (cudaErr,"device memory allocation failure\n");
+    */
+    if (cudaErr)
+    {
+        printf ("GPU failure in cholmod_gpu: requested %g MB\n",
+            ((double) requestedDeviceMemory) / (1024*1024)) ;
+        ERROR (CHOLMOD_GPU_PROBLEM, "device memory allocation failure\n") ;
+    }
+
+    Common->dev_mempool_size = requestedDeviceMemory;
+
+#endif
+
+    return (0);
+}
diff --git a/CHOLMOD/GPU/cholmod_gpu_kernels.c b/CHOLMOD/GPU/cholmod_gpu_kernels.c
new file mode 100644
index 0000000..95d1378
--- /dev/null
+++ b/CHOLMOD/GPU/cholmod_gpu_kernels.c
@@ -0,0 +1,6 @@
+/* ========================================================================== */
+/* === cholmod_gpu_kernels.c ================================================ */
+/* ========================================================================== */
+
+/* a dummy file to satisfy 'make' when the GPU is not available */
+
diff --git a/CHOLMOD/GPU/cholmod_gpu_kernels.cu b/CHOLMOD/GPU/cholmod_gpu_kernels.cu
new file mode 100644
index 0000000..1e212a2
--- /dev/null
+++ b/CHOLMOD/GPU/cholmod_gpu_kernels.cu
@@ -0,0 +1,196 @@
+/* ========================================================================== */
+/* ========================= CHOLMOD CUDA/C kernels ========================= */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/GPU Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * The CHOLMOD/GPU Module is licensed under Version 2.0 of the GNU
+ * General Public License.  See gpl.txt for a text of the license.
+ * CHOLMOD is also available under other licenses; contact authors for details.
+ * http://www.suitesparse.com
+ * -------------------------------------------------------------------------- */
+
+#include <stdio.h>
+#include "SuiteSparse_config.h"
+/* 64-bit version only */
+#define Int SuiteSparse_long
+
+extern "C" {
+
+  __global__ void kernelCreateMap ( Int *d_Map, Int *d_Ls, 
+				    Int psi, Int nsrow )
+  /*
+    Ls[supernode row] = Matrix Row
+  */
+  {
+    int tid = blockIdx.x * blockDim.x + threadIdx.x;
+    if ( tid < nsrow ) {
+      d_Map[d_Ls[psi+tid]] = ((Int) (tid));
+    }
+  }
+  
+  __global__ void kernelCreateRelativeMap ( Int *d_Map, Int *d_Ls, 
+					    Int *d_RelativeMap, 
+					    Int pdi1, Int ndrow )
+  {
+    int tid = blockIdx.x * blockDim.x + threadIdx.x;
+    if ( tid < ndrow ) {
+      d_RelativeMap[tid] = d_Map[d_Ls[pdi1+tid]];
+    }
+  }
+  
+  __global__ void kernelAddUpdate ( double *d_A, double *devPtrC, 
+				    Int *d_RelativeMap, 
+				    Int ndrow1, Int ndrow2, 
+				    Int nsrow )
+  {
+    int idrow = blockIdx.x * blockDim.x + threadIdx.x;
+    int idcol = blockIdx.y * blockDim.y + threadIdx.y;
+    if ( idrow < ndrow2  && idcol < ndrow1 ) {
+      Int idx = d_RelativeMap[idrow] + d_RelativeMap[idcol] * nsrow;
+      d_A[idx] += devPtrC[idrow+ndrow2*idcol];
+    }
+  }
+  
+  __global__ void kernelAddComplexUpdate ( double *d_A, double *devPtrC, 
+					   Int *d_RelativeMap, 
+					   Int ndrow1, Int ndrow2, 
+					   Int nsrow )
+  {
+    int idrow = blockIdx.x * blockDim.x + threadIdx.x;
+    int idcol = blockIdx.y * blockDim.y + threadIdx.y;
+    if ( idrow < ndrow2  && idcol < ndrow1 ) {
+      Int idx = d_RelativeMap[idrow] + d_RelativeMap[idcol] * nsrow;
+      d_A[idx*2] += devPtrC[(idrow+ndrow2*idcol)*2];
+      d_A[idx*2+1] += devPtrC[(idrow+ndrow2*idcol)*2+1];
+    }
+  }
+  
+  __global__ void kernelSumA ( double *a1, double *a2, const double alpha, 
+			       int nsrow, int nscol ) {
+    int isrow = blockIdx.x * blockDim.x + threadIdx.x;
+    int iscol = blockIdx.y * blockDim.y + threadIdx.y;
+    if ( isrow < nsrow && iscol < nscol ) {
+      Int idx = iscol*nsrow + isrow;
+      a1[idx] += alpha * a2[idx];
+    }
+  }
+
+  __global__ void kernelSumComplexA ( double *a1, double *a2, 
+				      const double alpha, int nsrow, 
+				      int nscol ) {
+    int isrow = blockIdx.x * blockDim.x + threadIdx.x;
+    int iscol = blockIdx.y * blockDim.y + threadIdx.y;
+    if ( isrow < nsrow && iscol < nscol ) {
+      Int idx = iscol*nsrow + isrow;
+      a1[idx*2] += alpha * a2[idx*2];
+      a1[idx*2+1] += alpha * a2[idx*2+1];
+    }
+  }
+
+  /* ======================================================================== */
+  /* using Ls and Lpi data already on the device, construct Map */
+  /* ======================================================================== */
+  int createMapOnDevice ( Int *d_Map, Int *d_Ls, 
+			  Int  psi, Int nsrow ) 
+  {
+    unsigned int kgrid = (nsrow+31)/32;
+    unsigned int kblock = 32;
+    kernelCreateMap <<<kgrid, kblock>>> ( d_Map, d_Ls, psi, nsrow );
+    return 0;
+  }
+
+
+  int createRelativeMapOnDevice ( Int *d_Map, Int *d_Ls, 
+				  Int *d_RelativeMap,Int  pdi1, 
+				  Int ndrow, cudaStream_t* astream )
+  {
+    unsigned int kgrid = (ndrow+255)/256;
+    unsigned int kblock = 256;
+    kernelCreateRelativeMap <<<kgrid, kblock, 0, *astream>>> 
+      ( d_Map, d_Ls, d_RelativeMap, pdi1, ndrow);
+    return 0;
+  }
+
+
+  /* ======================================================================== */
+  int addUpdateOnDevice ( double *d_A, double *devPtrC, 
+			  Int *d_RelativeMap, Int ndrow1, 
+			  Int ndrow2, Int nsrow, 
+			  cudaStream_t* astream )
+  /* ======================================================================== */
+  /* Assemble the Schur complment from a descendant supernode into the current
+     supernode */ 
+  /* ======================================================================== */
+{
+  dim3 grids;
+  dim3 blocks;
+
+  blocks.x = 16;
+  blocks.y = 16;
+  blocks.z = 1;
+
+  grids.x = (ndrow2+15)/16; 
+  grids.y = (ndrow1+15)/16; 
+
+  kernelAddUpdate <<<grids, blocks, 0, *astream>>> 
+    ( d_A, devPtrC, d_RelativeMap, ndrow1, ndrow2, nsrow );
+
+  return 0;
+}
+
+  /* ======================================================================== */
+  int addComplexUpdateOnDevice ( double *d_A, double *devPtrC, 
+				 Int *d_RelativeMap, Int ndrow1, 
+				 Int ndrow2, Int nsrow, 
+				 cudaStream_t* astream )
+  /* ======================================================================== */
+  /* Assemble the Schur complment from a descendant supernode into the current
+     supernode */ 
+  /* ======================================================================== */
+{
+  dim3 grids;
+  dim3 blocks;
+
+  blocks.x = 16;
+  blocks.y = 16;
+  blocks.z = 1;
+
+  grids.x = (ndrow2+15)/16; 
+  grids.y = (ndrow1+15)/16; 
+
+  kernelAddComplexUpdate <<<grids, blocks, 0, *astream>>> 
+    ( d_A, devPtrC, d_RelativeMap, ndrow1, ndrow2, nsrow );
+
+  return 0;
+}
+
+  int sumAOnDevice ( double *a1, double *a2, const double alpha, 
+		     int nsrow, int nscol )
+  {
+    dim3 grids;
+    dim3 blocks;
+    blocks.x = 16;
+    blocks.y = 16;
+    blocks.z = 1;
+    grids.x = (nsrow+15)/16;
+    grids.y = (nscol+15)/16;
+    kernelSumA <<<grids, blocks, 0, 0>>> ( a1, a2, alpha, nsrow, nscol );
+    return 0;
+  }
+
+  int sumComplexAOnDevice ( double *a1, double *a2, const double alpha, 
+			    int nsrow, int nscol )
+  {
+    dim3 grids;
+    dim3 blocks;
+    blocks.x = 16;
+    blocks.y = 16;
+    blocks.z = 1;
+    grids.x = (nsrow+15)/16;
+    grids.y = (nscol+15)/16;
+    kernelSumComplexA <<<grids, blocks, 0, 0>>> ( a1, a2, alpha, nsrow, nscol );
+    return 0;
+  }
+
+}
diff --git a/CHOLMOD/GPU/t_cholmod_gpu.c b/CHOLMOD/GPU/t_cholmod_gpu.c
new file mode 100644
index 0000000..ec45f51
--- /dev/null
+++ b/CHOLMOD/GPU/t_cholmod_gpu.c
@@ -0,0 +1,1397 @@
+/* ========================================================================== */
+/* === GPU/t_cholmod_gpu ==================================================== */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/GPU Module.  Copyright (C) 2005-2012, Timothy A. Davis
+ * The CHOLMOD/GPU Module is licensed under Version 2.0 of the GNU
+ * General Public License.  See gpl.txt for a text of the license.
+ * CHOLMOD is also available under other licenses; contact authors for details.
+ * http://www.suitesparse.com
+ * -------------------------------------------------------------------------- */
+
+/* GPU BLAS template routine for cholmod_super_numeric. */
+
+/* ========================================================================== */
+/* === include files and definitions ======================================== */
+/* ========================================================================== */
+
+#ifdef GPU_BLAS
+
+#include <string.h>
+#include "cholmod_template.h"
+
+#undef L_ENTRY
+#ifdef REAL
+#define L_ENTRY 1
+#else
+#define L_ENTRY 2
+#endif
+
+
+/* ========================================================================== */
+/* === gpu_clear_memory ===================================================== */
+/* ========================================================================== */
+/*
+ * Ensure the Lx is zeroed before forming factor.  This is a significant cost
+ * in the GPU case - so using this parallel memset code for efficiency.
+ */
+
+void TEMPLATE2 (CHOLMOD (gpu_clear_memory))
+(
+    double* buff,
+    size_t size,
+    int num_threads
+)
+{
+    int chunk_multiplier = 5;
+    int num_chunks = chunk_multiplier * num_threads;
+    size_t chunksize = size / num_chunks;
+    size_t i;
+
+#pragma omp parallel for num_threads(num_threads) private(i) schedule(dynamic)
+    for(i = 0; i < num_chunks; i++) {
+        size_t chunkoffset = i * chunksize;
+        if(i == num_chunks - 1) {
+            memset(buff + chunkoffset, 0, (size - chunksize*(num_chunks - 1)) *
+                   sizeof(double));
+        }
+        else {
+            memset(buff + chunkoffset, 0, chunksize * sizeof(double));
+        }
+    }
+}
+
+/* ========================================================================== */
+/* === gpu_init ============================================================= */
+/* ========================================================================== */
+/*
+ * Performs required initialization for GPU computing.
+ *
+ * Returns 0 if there is an error, so the intended use is
+ *
+ *     useGPU = CHOLMOD(gpu_init)
+ *
+ * which would locally turn off gpu processing if the initialization failed.
+ */
+
+int TEMPLATE2 (CHOLMOD (gpu_init))
+(
+    void *Cwork,
+    cholmod_factor *L,
+    cholmod_common *Common,
+    Int nsuper,
+    Int n,
+    Int nls,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+    Int i, k, maxSize ;
+    cublasStatus_t cublasError ;
+    cudaError_t cudaErr ;
+    size_t maxBytesSize, HostPinnedSize ;
+
+    feenableexcept (FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW );
+
+    maxSize = L->maxcsize;
+
+    /* #define PAGE_SIZE (4*1024) */
+    CHOLMOD_GPU_PRINTF (("gpu_init : %p\n",
+        (void *) ((size_t) Cwork & ~(4*1024-1)))) ;
+
+    /* make sure the assumed buffer sizes are large enough */
+    if ( (nls+2*n+4)*sizeof(Int) > Common->devBuffSize ) {
+        ERROR (CHOLMOD_GPU_PROBLEM,"\n\n"
+               "GPU Memory allocation error.  Ls, Map and RelativeMap exceed\n"
+               "devBuffSize.  It is not clear if this is due to insufficient\n"
+               "device or host memory or both.  You can try:\n"
+               "     1) increasing the amount of GPU memory requested\n"
+               "     2) reducing CHOLMOD_NUM_HOST_BUFFERS\n"
+               "     3) using a GPU & host with more memory\n"
+               "This issue is a known limitation and should be fixed in a \n"
+               "future release of CHOLMOD.\n") ;
+        return (0) ;
+    }
+
+    /* divvy up the memory in dev_mempool */
+    gpu_p->d_Lx[0] = Common->dev_mempool;
+    gpu_p->d_Lx[1] = Common->dev_mempool + Common->devBuffSize;
+    gpu_p->d_C = Common->dev_mempool + 2*Common->devBuffSize;
+    gpu_p->d_A[0] = Common->dev_mempool + 3*Common->devBuffSize;
+    gpu_p->d_A[1] = Common->dev_mempool + 4*Common->devBuffSize;
+    gpu_p->d_Ls = Common->dev_mempool + 5*Common->devBuffSize;
+    gpu_p->d_Map = gpu_p->d_Ls + (nls+1)*sizeof(Int) ;
+    gpu_p->d_RelativeMap = gpu_p->d_Map + (n+1)*sizeof(Int) ;
+
+    /* Copy all of the Ls and Lpi data to the device.  If any supernodes are
+     * to be computed on the device then this will be needed, so might as
+     * well do it now.   */
+
+    cudaErr = cudaMemcpy ( gpu_p->d_Ls, L->s, nls*sizeof(Int),
+                           cudaMemcpyHostToDevice );
+    CHOLMOD_HANDLE_CUDA_ERROR(cudaErr,"cudaMemcpy(d_Ls)");
+
+    if (!(Common->gpuStream[0])) {
+
+        /* ------------------------------------------------------------------ */
+        /* create each CUDA stream */
+        /* ------------------------------------------------------------------ */
+
+        for ( i=0; i<CHOLMOD_HOST_SUPERNODE_BUFFERS; i++ ) {
+            cudaErr = cudaStreamCreate ( &(Common->gpuStream[i]) );
+            if (cudaErr != cudaSuccess) {
+                ERROR (CHOLMOD_GPU_PROBLEM, "CUDA stream") ;
+                return (0) ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* create each CUDA event */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < 3 ; i++) {
+            cudaErr = cudaEventCreateWithFlags
+                (&(Common->cublasEventPotrf [i]), cudaEventDisableTiming) ;
+            if (cudaErr != cudaSuccess) {
+                ERROR (CHOLMOD_GPU_PROBLEM, "CUDA event") ;
+                return (0) ;
+            }
+        }
+
+        for (i = 0 ; i < CHOLMOD_HOST_SUPERNODE_BUFFERS ; i++) {
+            cudaErr = cudaEventCreateWithFlags
+                (&(Common->updateCBuffersFree[i]), cudaEventDisableTiming) ;
+            if (cudaErr != cudaSuccess) {
+                ERROR (CHOLMOD_GPU_PROBLEM, "CUDA event") ;
+                return (0) ;
+            }
+        }
+
+        cudaErr = cudaEventCreateWithFlags ( &(Common->updateCKernelsComplete),
+                                             cudaEventDisableTiming );
+        if (cudaErr != cudaSuccess) {
+            ERROR (CHOLMOD_GPU_PROBLEM, "CUDA updateCKernelsComplete event") ;
+            return (0) ;
+        }
+
+    }
+
+    gpu_p->h_Lx[0] = (double*)(Common->host_pinned_mempool);
+    for ( k=1; k<CHOLMOD_HOST_SUPERNODE_BUFFERS; k++ ) {
+        gpu_p->h_Lx[k] = (double*)((char *)(Common->host_pinned_mempool) +
+                                   k*Common->devBuffSize);
+    }
+
+    return (1);  /* initialization successfull, useGPU = 1 */
+
+}
+
+
+/* ========================================================================== */
+/* === gpu_reorder_descendants ============================================== */
+/* ========================================================================== */
+/* Reorder the descendant supernodes as:
+ *    1st - descendant supernodes eligible for processing on the GPU
+ *          in increasing (by flops) order
+ *    2nd - supernodes whose processing is to remain on the CPU
+ *          in any order
+ *
+ * All of the GPU-eligible supernodes will be scheduled first.  All
+ * CPU-eligible descendants will overlap with the last (largest)
+ * CHOLMOD_HOST_SUPERNODE_BUFFERS GPU-eligible descendants.
+ */
+
+void TEMPLATE2 (CHOLMOD (gpu_reorder_descendants))
+(
+    cholmod_common *Common,
+    Int *Super,
+    Int *locals,
+    Int *Lpi,
+    Int *Lpos,
+    Int *Head,
+    Int *Next,
+    Int *Previous,
+    Int *ndescendants,
+    Int *tail,
+    Int *mapCreatedOnGpu,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+
+    Int prevd, nextd, firstcpu, d, k, kd1, kd2, ndcol, pdi, pdend, pdi1;
+    Int dnext, ndrow2, p;
+    Int n_descendant = 0;
+    double score;
+
+    /* use h_Lx[0] to buffer the GPU-eligible descendants */
+    struct cholmod_descendant_score_t* scores =
+        (struct cholmod_descendant_score_t*) gpu_p->h_Lx[0];
+
+    double cpuref = 0.0;
+
+    int nreverse = 1;
+    int previousd;
+
+
+    d = Head[*locals];
+    prevd = -1;
+    firstcpu = -1;
+    *mapCreatedOnGpu = 0;
+
+    while ( d != EMPTY )
+    {
+
+        /* Get the parameters for the current descendant supernode */
+        kd1 = Super [d] ;       /* d contains cols kd1 to kd2-1 of L */
+        kd2 = Super [d+1] ;
+        ndcol = kd2 - kd1 ;     /* # of columns in all of d */
+        pdi = Lpi [d] ;         /* pointer to first row of d in Ls */
+        pdend = Lpi [d+1] ;     /* pointer just past last row of d in Ls */
+        p = Lpos [d] ;          /* offset of 1st row of d affecting s */
+        pdi1 = pdi + p ;        /* ptr to 1st row of d affecting s in Ls */
+        ndrow2 = pdend - pdi1;
+
+        nextd = Next[d];
+
+        /* compute a rough flops 'score' for this descendant supernode */
+        score = ndrow2 * ndcol;
+        if ( ndrow2*L_ENTRY >= CHOLMOD_ND_ROW_LIMIT &&
+             ndcol*L_ENTRY >= CHOLMOD_ND_COL_LIMIT ) {
+            score += Common->devBuffSize;
+        }
+
+        /* place in sort buffer */
+        scores[n_descendant].score = score;
+        scores[n_descendant].d = d;
+        n_descendant++;
+
+        d = nextd;
+
+    }
+
+    /* Sort the GPU-eligible supernodes */
+    qsort ( scores, n_descendant, sizeof(struct cholmod_descendant_score_t),
+            (__compar_fn_t) CHOLMOD(score_comp) );
+
+    /* Place sorted data back in descendant supernode linked list*/
+    if ( n_descendant > 0 ) {
+        Head[*locals] = scores[0].d;
+        if ( n_descendant > 1 ) {
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    if (n_descendant > 64)
+
+            for ( k=1; k<n_descendant; k++ ) {
+                Next[scores[k-1].d] = scores[k].d;
+            }
+        }
+        Next[scores[n_descendant-1].d] = firstcpu;
+    }
+
+    /* reverse the first CHOLMOD_HOST_SUPERNODE_BUFFERS to better hide PCIe
+       communications */
+
+    if ( Head[*locals] != EMPTY && Next[Head[*locals]] != EMPTY ) {
+        previousd = Head[*locals];
+        d = Next[Head[*locals]];
+        while ( d!=EMPTY && nreverse < CHOLMOD_HOST_SUPERNODE_BUFFERS ) {
+
+            kd1 = Super [d] ;       /* d contains cols kd1 to kd2-1 of L */
+            kd2 = Super [d+1] ;
+            ndcol = kd2 - kd1 ;     /* # of columns in all of d */
+            pdi = Lpi [d] ;         /* pointer to first row of d in Ls */
+            pdend = Lpi [d+1] ;     /* pointer just past last row of d in Ls */
+            p = Lpos [d] ;          /* offset of 1st row of d affecting s */
+            pdi1 = pdi + p ;        /* ptr to 1st row of d affecting s in Ls */
+            ndrow2 = pdend - pdi1;
+
+            nextd = Next[d];
+
+            nreverse++;
+
+            if ( ndrow2*L_ENTRY >= CHOLMOD_ND_ROW_LIMIT && ndcol*L_ENTRY >=
+                 CHOLMOD_ND_COL_LIMIT ) {
+                /* place this supernode at the front of the list */
+                Next[previousd] = Next[d];
+                Next[d] = Head[*locals];
+                Head[*locals] = d;
+            }
+            else {
+                previousd = d;
+            }
+            d = nextd;
+        }
+    }
+
+    /* create a 'previous' list so we can traverse backwards */
+    *ndescendants = 0;
+    if ( Head[*locals] != EMPTY ) {
+        Previous[Head[*locals]] = EMPTY;
+        for (d = Head [*locals] ; d != EMPTY ; d = dnext) {
+            (*ndescendants)++;
+            dnext = Next[d];
+            if ( dnext != EMPTY ) {
+                Previous[dnext] = d;
+            }
+            else {
+                *tail = d;
+            }
+        }
+    }
+
+    return;
+
+}
+
+/* ========================================================================== */
+/* === gpu_initialize_supernode ============================================= */
+/* ========================================================================== */
+
+/* C = L (k1:n-1, kd1:kd2-1) * L (k1:k2-1, kd1:kd2-1)', except that k1:n-1
+ */
+
+void TEMPLATE2 (CHOLMOD (gpu_initialize_supernode))
+(
+    cholmod_common *Common,
+    Int nscol,
+    Int nsrow,
+    Int psi,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+
+    cudaError_t cuErr;
+
+    /* initialize the device supernode assemby memory to zero */
+    cuErr = cudaMemset ( gpu_p->d_A[0], 0, nscol*nsrow*L_ENTRY*sizeof(double) );
+    CHOLMOD_HANDLE_CUDA_ERROR(cuErr,"cudaMemset(d_A)");
+
+    /* Create the Map on the device */
+    createMapOnDevice ( (Int *)(gpu_p->d_Map),
+                        (Int *)(gpu_p->d_Ls), psi, nsrow );
+
+    return;
+
+}
+
+
+/* ========================================================================== */
+/* === gpu_updateC ========================================================== */
+/* ========================================================================== */
+
+/* C = L (k1:n-1, kd1:kd2-1) * L (k1:k2-1, kd1:kd2-1)', except that k1:n-1
+ * refers to all of the rows in L, but many of the rows are all zero.
+ * Supernode d holds columns kd1 to kd2-1 of L.  Nonzero rows in the range
+ * k1:k2-1 are in the list Ls [pdi1 ... pdi2-1], of size ndrow1.  Nonzero rows
+ * in the range k2:n-1 are in the list Ls [pdi2 ... pdend], of size ndrow2.
+ * Let L1 = L (Ls [pdi1 ... pdi2-1], kd1:kd2-1), and let L2 = L (Ls [pdi2 ...
+ * pdend],  kd1:kd2-1).  C is ndrow2-by-ndrow1.  Let C1 be the first ndrow1
+ * rows of C and let C2 be the last ndrow2-ndrow1 rows of C.  Only the lower
+ * triangular part of C1 needs to be computed since C1 is symmetric.
+ *
+ * UpdateC is completely asynchronous w.r.t. the GPU.  Once the input buffer
+ * d_Lx[] has been filled, all of the device operations are issues, and the
+ * host can continue with filling the next input buffer / or start processing
+ * all of the descendant supernodes which are not eligible for processing on
+ * the device (since they are too small - will not fill the device).
+ */
+
+int TEMPLATE2 (CHOLMOD (gpu_updateC))
+(
+    Int ndrow1,         /* C is ndrow2-by-ndrow2 */
+    Int ndrow2,
+    Int ndrow,          /* leading dimension of Lx */
+    Int ndcol,          /* L1 is ndrow1-by-ndcol */
+    Int nsrow,
+    Int pdx1,           /* L1 starts at Lx + L_ENTRY*pdx1 */
+    /* L2 starts at Lx + L_ENTRY*(pdx1 + ndrow1) */
+    Int pdi1,
+    double *Lx,
+    double *C,
+    cholmod_common *Common,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+    double *devPtrLx, *devPtrC ;
+    double alpha, beta ;
+    cublasStatus_t cublasStatus ;
+    cudaError_t cudaStat [2] ;
+    Int ndrow3 ;
+    int icol, irow;
+    int iHostBuff, iDevBuff ;
+
+#ifndef NTIMER
+    double tstart = 0;
+#endif
+
+    if ((ndrow2*L_ENTRY < CHOLMOD_ND_ROW_LIMIT) ||
+        (ndcol*L_ENTRY <  CHOLMOD_ND_COL_LIMIT))
+    {
+        /* too small for the CUDA BLAS; use the CPU instead */
+        return (0) ;
+    }
+
+    ndrow3 = ndrow2 - ndrow1 ;
+
+#ifndef NTIMER
+    Common->syrkStart = SuiteSparse_time ( ) ;
+    Common->CHOLMOD_GPU_SYRK_CALLS++ ;
+#endif
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate workspace on the GPU */
+    /* ---------------------------------------------------------------------- */
+
+    iHostBuff = (Common->ibuffer)%CHOLMOD_HOST_SUPERNODE_BUFFERS;
+    iDevBuff = (Common->ibuffer)%CHOLMOD_DEVICE_STREAMS;
+
+    /* cycle the device Lx buffer, d_Lx, through CHOLMOD_DEVICE_STREAMS,
+       usually 2, so we can overlap the copy of this descendent supernode
+       with the compute of the previous descendant supernode */
+    devPtrLx = (double *)(gpu_p->d_Lx[iDevBuff]);
+    /* very little overlap between kernels for difference descendant supernodes
+       (since we enforce the supernodes must be large enough to fill the
+       device) so we only need one C buffer */
+    devPtrC = (double *)(gpu_p->d_C);
+
+    /* ---------------------------------------------------------------------- */
+    /* copy Lx to the GPU */
+    /* ---------------------------------------------------------------------- */
+
+    /* copy host data to pinned buffer first for better H2D bandwidth */
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS) if (ndcol > 32)
+    for ( icol=0; icol<ndcol; icol++ ) {
+        for ( irow=0; irow<ndrow2*L_ENTRY; irow++ ) {
+            gpu_p->h_Lx[iHostBuff][icol*ndrow2*L_ENTRY+irow] =
+                Lx[pdx1*L_ENTRY+icol*ndrow*L_ENTRY + irow];
+        }
+    }
+
+    cudaStat[0] = cudaMemcpyAsync ( devPtrLx,
+        gpu_p->h_Lx[iHostBuff],
+        ndrow2*ndcol*L_ENTRY*sizeof(devPtrLx[0]),
+        cudaMemcpyHostToDevice,
+        Common->gpuStream[iDevBuff] );
+
+    if ( cudaStat[0] ) {
+        CHOLMOD_GPU_PRINTF ((" ERROR cudaMemcpyAsync = %d \n", cudaStat[0]));
+        return (0);
+    }
+
+    /* make the current stream wait for kernels in previous streams */
+    cudaStreamWaitEvent ( Common->gpuStream[iDevBuff],
+                          Common->updateCKernelsComplete, 0 ) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* create the relative map for this descendant supernode */
+    /* ---------------------------------------------------------------------- */
+
+    createRelativeMapOnDevice ( (Int *)(gpu_p->d_Map),
+                                (Int *)(gpu_p->d_Ls),
+                                (Int *)(gpu_p->d_RelativeMap),
+                                pdi1, ndrow2,
+                                &(Common->gpuStream[iDevBuff]) );
+
+    /* ---------------------------------------------------------------------- */
+    /* do the CUDA SYRK */
+    /* ---------------------------------------------------------------------- */
+
+    cublasStatus = cublasSetStream (Common->cublasHandle,
+                                    Common->gpuStream[iDevBuff]) ;
+    if (cublasStatus != CUBLAS_STATUS_SUCCESS)
+    {
+        ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS stream") ;
+    }
+
+    alpha  = 1.0 ;
+    beta   = 0.0 ;
+
+#ifdef REAL
+    cublasStatus = cublasDsyrk (Common->cublasHandle,
+        CUBLAS_FILL_MODE_LOWER,
+        CUBLAS_OP_N,
+        (int) ndrow1,
+        (int) ndcol,    /* N, K: L1 is ndrow1-by-ndcol */
+        &alpha,         /* ALPHA:  1 */
+        devPtrLx,
+        ndrow2,         /* A, LDA: L1, ndrow2 */
+        &beta,          /* BETA:   0 */
+        devPtrC,
+        ndrow2) ;       /* C, LDC: C1 */
+#else
+    cublasStatus = cublasZherk (Common->cublasHandle,
+        CUBLAS_FILL_MODE_LOWER,
+        CUBLAS_OP_N,
+        (int) ndrow1,
+        (int) ndcol,    /* N, K: L1 is ndrow1-by-ndcol*/
+        &alpha,         /* ALPHA:  1 */
+        (const cuDoubleComplex *) devPtrLx,
+        ndrow2,         /* A, LDA: L1, ndrow2 */
+        &beta,          /* BETA:   0 */
+        (cuDoubleComplex *) devPtrC,
+        ndrow2) ;       /* C, LDC: C1 */
+#endif
+
+    if (cublasStatus != CUBLAS_STATUS_SUCCESS)
+    {
+        ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS routine failure") ;
+    }
+
+#ifndef NTIMER
+    Common->CHOLMOD_GPU_SYRK_TIME += SuiteSparse_time() - Common->syrkStart;
+#endif
+
+    /* ---------------------------------------------------------------------- */
+    /* compute remaining (ndrow2-ndrow1)-by-ndrow1 block of C, C2 = L2*L1'    */
+    /* ---------------------------------------------------------------------- */
+
+#ifndef NTIMER
+    Common->CHOLMOD_GPU_GEMM_CALLS++ ;
+    tstart = SuiteSparse_time();
+#endif
+
+    if (ndrow3 > 0)
+    {
+#ifndef REAL
+        cuDoubleComplex calpha  = {1.0,0.0} ;
+        cuDoubleComplex cbeta   = {0.0,0.0} ;
+#endif
+
+        /* ------------------------------------------------------------------ */
+        /* do the CUDA BLAS dgemm */
+        /* ------------------------------------------------------------------ */
+
+#ifdef REAL
+        alpha  = 1.0 ;
+        beta   = 0.0 ;
+        cublasStatus = cublasDgemm (Common->cublasHandle,
+            CUBLAS_OP_N, CUBLAS_OP_T,
+            ndrow3, ndrow1, ndcol,          /* M, N, K */
+            &alpha,                         /* ALPHA:  1 */
+            devPtrLx + L_ENTRY*(ndrow1),    /* A, LDA: L2*/
+            ndrow2,                         /* ndrow */
+            devPtrLx,                       /* B, LDB: L1 */
+            ndrow2,                         /* ndrow */
+            &beta,                          /* BETA:   0 */
+            devPtrC + L_ENTRY*ndrow1,       /* C, LDC: C2 */
+            ndrow2) ;
+#else
+        cublasStatus = cublasZgemm (Common->cublasHandle,
+            CUBLAS_OP_N, CUBLAS_OP_C,
+            ndrow3, ndrow1, ndcol,          /* M, N, K */
+            &calpha,                        /* ALPHA:  1 */
+            (const cuDoubleComplex*) devPtrLx + ndrow1,
+            ndrow2,                         /* ndrow */
+            (const cuDoubleComplex *) devPtrLx,
+            ndrow2,                         /* ndrow */
+            &cbeta,                         /* BETA:   0 */
+            (cuDoubleComplex *)devPtrC + ndrow1,
+            ndrow2) ;
+#endif
+
+        if (cublasStatus != CUBLAS_STATUS_SUCCESS)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS routine failure") ;
+        }
+
+    }
+
+#ifndef NTIMER
+    Common->CHOLMOD_GPU_GEMM_TIME += SuiteSparse_time() - tstart;
+#endif
+
+    /* ------------------------------------------------------------------ */
+    /* Assemble the update C on the device using the d_RelativeMap */
+    /* ------------------------------------------------------------------ */
+
+#ifdef REAL
+    addUpdateOnDevice ( gpu_p->d_A[0], devPtrC,
+        gpu_p->d_RelativeMap, ndrow1, ndrow2, nsrow,
+        &(Common->gpuStream[iDevBuff]) );
+#else
+    addComplexUpdateOnDevice ( gpu_p->d_A[0], devPtrC,
+        gpu_p->d_RelativeMap, ndrow1, ndrow2, nsrow,
+        &(Common->gpuStream[iDevBuff]) );
+#endif
+
+    /* Record an event indicating that kernels for
+       this descendant are complete */
+    cudaEventRecord ( Common->updateCKernelsComplete,
+                      Common->gpuStream[iDevBuff]);
+    cudaEventRecord ( Common->updateCBuffersFree[iHostBuff],
+                      Common->gpuStream[iDevBuff]);
+
+    return (1) ;
+}
+
+/* ========================================================================== */
+/* === gpu_final_assembly =================================================== */
+/* ========================================================================== */
+
+/* If the supernode was assembled on both the CPU and the GPU, this will
+ * complete the supernode assembly on both the GPU and CPU.
+ */
+
+void TEMPLATE2 (CHOLMOD (gpu_final_assembly))
+(
+    cholmod_common *Common,
+    double *Lx,
+    Int psx,
+    Int nscol,
+    Int nsrow,
+    int supernodeUsedGPU,
+    int *iHostBuff,
+    int *iDevBuff,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+    Int iidx, i, j;
+    Int iHostBuff2 ;
+    Int iDevBuff2 ;
+
+    if ( supernodeUsedGPU ) {
+
+        /* ------------------------------------------------------------------ */
+        /* Apply all of the Shur-complement updates, computed on the gpu, to */
+        /* the supernode. */
+        /* ------------------------------------------------------------------ */
+
+        *iHostBuff = (Common->ibuffer)%CHOLMOD_HOST_SUPERNODE_BUFFERS;
+        *iDevBuff = (Common->ibuffer)%CHOLMOD_DEVICE_STREAMS;
+
+        if ( nscol * L_ENTRY >= CHOLMOD_POTRF_LIMIT ) {
+
+            /* If this supernode is going to be factored using the GPU (potrf)
+             * then it will need the portion of the update assembled ont the
+             * CPU.  So copy that to a pinned buffer an H2D copy to device. */
+
+            /* wait until a buffer is free */
+            cudaEventSynchronize ( Common->updateCBuffersFree[*iHostBuff] );
+
+            /* copy update assembled on CPU to a pinned buffer */
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    private(iidx) if (nscol>32)
+
+            for ( j=0; j<nscol; j++ ) {
+                for ( i=j; i<nsrow*L_ENTRY; i++ ) {
+                    iidx = j*nsrow*L_ENTRY+i;
+                    gpu_p->h_Lx[*iHostBuff][iidx] = Lx[psx*L_ENTRY+iidx];
+                }
+            }
+
+            /* H2D transfer of update assembled on CPU */
+            cudaMemcpyAsync ( gpu_p->d_A[1], gpu_p->h_Lx[*iHostBuff],
+                              nscol*nsrow*L_ENTRY*sizeof(double),
+                              cudaMemcpyHostToDevice,
+                              Common->gpuStream[*iDevBuff] );
+        }
+
+        Common->ibuffer++;
+
+        iHostBuff2 = (Common->ibuffer)%CHOLMOD_HOST_SUPERNODE_BUFFERS;
+        iDevBuff2 = (Common->ibuffer)%CHOLMOD_DEVICE_STREAMS;
+
+        /* wait for all kernels to complete */
+        cudaEventSynchronize( Common->updateCKernelsComplete );
+
+        /* copy assembled Schur-complement updates computed on GPU */
+        cudaMemcpyAsync ( gpu_p->h_Lx[iHostBuff2], gpu_p->d_A[0],
+                          nscol*nsrow*L_ENTRY*sizeof(double),
+                          cudaMemcpyDeviceToHost,
+                          Common->gpuStream[iDevBuff2] );
+
+        if ( nscol * L_ENTRY >= CHOLMOD_POTRF_LIMIT ) {
+
+            /* with the current implementation, potrf still uses data from the
+             * CPU - so put the fully assembled supernode in a pinned buffer for
+             * fastest access */
+
+            /* need both H2D and D2H copies to be complete */
+            cudaDeviceSynchronize();
+
+            /* sum updates from cpu and device on device */
+#ifdef REAL
+            sumAOnDevice ( gpu_p->d_A[1], gpu_p->d_A[0], -1.0, nsrow, nscol );
+#else
+            sumComplexAOnDevice ( gpu_p->d_A[1], gpu_p->d_A[0],
+                                  -1.0, nsrow, nscol );
+#endif
+
+            /* place final assembled supernode in pinned buffer */
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    private(iidx) if (nscol>32)
+
+            for ( j=0; j<nscol; j++ ) {
+                for ( i=j*L_ENTRY; i<nscol*L_ENTRY; i++ ) {
+                    iidx = j*nsrow*L_ENTRY+i;
+                    gpu_p->h_Lx[*iHostBuff][iidx] -=
+                        gpu_p->h_Lx[iHostBuff2][iidx];
+                }
+            }
+
+        }
+        else
+        {
+
+            /* assemble with CPU updates */
+            cudaDeviceSynchronize();
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    private(iidx) if (nscol>32)
+
+            for ( j=0; j<nscol; j++ ) {
+                for ( i=j*L_ENTRY; i<nsrow*L_ENTRY; i++ ) {
+                    iidx = j*nsrow*L_ENTRY+i;
+                    Lx[psx*L_ENTRY+iidx] -= gpu_p->h_Lx[iHostBuff2][iidx];
+                }
+            }
+        }
+    }
+    return;
+}
+
+
+/* ========================================================================== */
+/* === gpu_lower_potrf ====================================================== */
+/* ========================================================================== */
+
+/* Cholesky factorzation (dpotrf) of a matrix S, operating on the lower
+ * triangular part only.   S is nscol2-by-nscol2 with leading dimension nsrow.
+ *
+ * S is the top part of the supernode (the lower triangular matrx).
+ * This function also copies the bottom rectangular part of the supernode (B)
+ * onto the GPU, in preparation for gpu_triangular_solve.
+ */
+
+/*
+ * On entry, d_A[1] contains the fully assembled supernode
+ */
+
+int TEMPLATE2 (CHOLMOD (gpu_lower_potrf))
+(
+    Int nscol2,     /* S is nscol2-by-nscol2 */
+    Int nsrow,      /* leading dimension of S */
+    Int psx,        /* S is located at Lx + L_ENTRY*psx */
+    double *Lx,     /* contains S; overwritten with Cholesky factor */
+    Int *info,      /* BLAS info return value */
+    cholmod_common *Common,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+    double *devPtrA, *devPtrB, *A ;
+    double alpha, beta ;
+    cudaError_t cudaStat ;
+    cublasStatus_t cublasStatus ;
+    Int j, nsrow2, nb, n, gpu_lda, lda, gpu_ldb ;
+    int ilda, ijb, iinfo ;
+#ifndef NTIMER
+    double tstart ;
+#endif
+
+    if (nscol2 * L_ENTRY < CHOLMOD_POTRF_LIMIT)
+    {
+        /* too small for the CUDA BLAS; use the CPU instead */
+        return (0) ;
+    }
+
+#ifndef NTIMER
+    tstart = SuiteSparse_time ( ) ;
+    Common->CHOLMOD_GPU_POTRF_CALLS++ ;
+#endif
+
+    nsrow2 = nsrow - nscol2 ;
+
+    /* ---------------------------------------------------------------------- */
+    /* heuristic to get the block size depending of the problem size */
+    /* ---------------------------------------------------------------------- */
+
+    nb = 128 ;
+    if (nscol2 > 4096) nb = 256 ;
+    if (nscol2 > 8192) nb = 384 ;
+    n  = nscol2 ;
+    gpu_lda = ((nscol2+31)/32)*32 ;
+    lda = nsrow ;
+
+    A = gpu_p->h_Lx[(Common->ibuffer+CHOLMOD_HOST_SUPERNODE_BUFFERS-1)%
+                    CHOLMOD_HOST_SUPERNODE_BUFFERS];
+
+    /* ---------------------------------------------------------------------- */
+    /* determine the GPU leading dimension of B */
+    /* ---------------------------------------------------------------------- */
+
+    gpu_ldb = 0 ;
+    if (nsrow2 > 0)
+    {
+        gpu_ldb = ((nsrow2+31)/32)*32 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* remember where device memory is, to be used by triangular solve later */
+    /* ---------------------------------------------------------------------- */
+
+    devPtrA = gpu_p->d_Lx[0];
+    devPtrB = gpu_p->d_Lx[1];
+
+    /* ---------------------------------------------------------------------- */
+    /* copy A from device to device */
+    /* ---------------------------------------------------------------------- */
+
+    cudaStat = cudaMemcpy2DAsync ( devPtrA,
+       gpu_lda * L_ENTRY * sizeof (devPtrA[0]),
+       gpu_p->d_A[1],
+       nsrow * L_ENTRY * sizeof (Lx[0]),
+       nscol2 * L_ENTRY * sizeof (devPtrA[0]),
+       nscol2,
+       cudaMemcpyDeviceToDevice,
+       Common->gpuStream[0] );
+
+    if ( cudaStat ) {
+        ERROR ( CHOLMOD_GPU_PROBLEM, "GPU memcopy device to device");
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* copy B in advance, for gpu_triangular_solve */
+    /* ---------------------------------------------------------------------- */
+
+    if (nsrow2 > 0)
+    {
+        cudaStat = cudaMemcpy2DAsync (devPtrB,
+            gpu_ldb * L_ENTRY * sizeof (devPtrB [0]),
+            gpu_p->d_A[1] + L_ENTRY*nscol2,
+            nsrow * L_ENTRY * sizeof (Lx [0]),
+            nsrow2 * L_ENTRY * sizeof (devPtrB [0]),
+            nscol2,
+            cudaMemcpyDeviceToDevice,
+            Common->gpuStream[0]) ;
+        if (cudaStat)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU memcopy to device") ;
+        }
+    }
+
+    /* ------------------------------------------------------------------ */
+    /* define the dpotrf stream */
+    /* ------------------------------------------------------------------ */
+
+    cublasStatus = cublasSetStream (Common->cublasHandle,
+                                    Common->gpuStream [0]) ;
+    if (cublasStatus != CUBLAS_STATUS_SUCCESS) {
+        ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS stream") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* block Cholesky factorization of S */
+    /* ---------------------------------------------------------------------- */
+
+    for (j = 0 ; j < n ; j += nb)
+    {
+        Int jb = nb < (n-j) ? nb : (n-j) ;
+
+        /* ------------------------------------------------------------------ */
+        /* do the CUDA BLAS dsyrk */
+        /* ------------------------------------------------------------------ */
+
+        alpha = -1.0 ;
+        beta  = 1.0 ;
+#ifdef REAL
+        cublasStatus = cublasDsyrk (Common->cublasHandle,
+            CUBLAS_FILL_MODE_LOWER, CUBLAS_OP_N, jb, j,
+            &alpha, devPtrA + j, gpu_lda,
+            &beta,  devPtrA + j + j*gpu_lda, gpu_lda) ;
+
+#else
+        cublasStatus = cublasZherk (Common->cublasHandle,
+            CUBLAS_FILL_MODE_LOWER, CUBLAS_OP_N, jb, j,
+            &alpha, (cuDoubleComplex*)devPtrA + j,
+            gpu_lda,
+            &beta,
+            (cuDoubleComplex*)devPtrA + j + j*gpu_lda,
+            gpu_lda) ;
+#endif
+
+        if (cublasStatus != CUBLAS_STATUS_SUCCESS)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS routine failure") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+
+        cudaStat = cudaEventRecord (Common->cublasEventPotrf [0],
+                                    Common->gpuStream [0]) ;
+        if (cudaStat)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "CUDA event failure") ;
+        }
+
+        cudaStat = cudaStreamWaitEvent (Common->gpuStream [1],
+                                        Common->cublasEventPotrf [0], 0) ;
+        if (cudaStat)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "CUDA event failure") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* copy back the jb columns on two different streams */
+        /* ------------------------------------------------------------------ */
+
+        cudaStat = cudaMemcpy2DAsync (A + L_ENTRY*(j + j*lda),
+            lda * L_ENTRY * sizeof (double),
+            devPtrA + L_ENTRY*(j + j*gpu_lda),
+            gpu_lda * L_ENTRY * sizeof (double),
+            L_ENTRY * sizeof (double)*jb,
+            jb,
+            cudaMemcpyDeviceToHost,
+            Common->gpuStream [1]) ;
+
+        if (cudaStat)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU memcopy from device") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* do the CUDA BLAS dgemm */
+        /* ------------------------------------------------------------------ */
+
+        if ((j+jb) < n)
+        {
+
+#ifdef REAL
+            alpha = -1.0 ;
+            beta  = 1.0 ;
+            cublasStatus = cublasDgemm (Common->cublasHandle,
+                CUBLAS_OP_N, CUBLAS_OP_T,
+                (n-j-jb), jb, j,
+                &alpha,
+                devPtrA + (j+jb), gpu_lda,
+                devPtrA + (j)  , gpu_lda,
+                &beta,
+                devPtrA + (j+jb + j*gpu_lda), gpu_lda) ;
+
+#else
+            cuDoubleComplex calpha = {-1.0,0.0} ;
+            cuDoubleComplex cbeta  = { 1.0,0.0} ;
+            cublasStatus = cublasZgemm (Common->cublasHandle,
+                CUBLAS_OP_N, CUBLAS_OP_C,
+                (n-j-jb), jb, j,
+                &calpha,
+                (cuDoubleComplex*)devPtrA + (j+jb),
+                gpu_lda,
+                (cuDoubleComplex*)devPtrA + (j),
+                gpu_lda,
+                &cbeta,
+                (cuDoubleComplex*)devPtrA +
+                (j+jb + j*gpu_lda),
+                gpu_lda ) ;
+#endif
+
+            if (cublasStatus != CUBLAS_STATUS_SUCCESS)
+            {
+                ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS routine failure") ;
+            }
+        }
+
+        cudaStat = cudaStreamSynchronize (Common->gpuStream [1]) ;
+        if (cudaStat)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU memcopy to device") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* compute the Cholesky factorization of the jbxjb block on the CPU */
+        /* ------------------------------------------------------------------ */
+
+        ilda = (int) lda ;
+        ijb  = jb ;
+#ifdef REAL
+        LAPACK_DPOTRF ("L", &ijb, A + L_ENTRY * (j + j*lda), &ilda, &iinfo) ;
+#else
+        LAPACK_ZPOTRF ("L", &ijb, A + L_ENTRY * (j + j*lda), &ilda, &iinfo) ;
+#endif
+        *info = iinfo ;
+
+        if (*info != 0)
+        {
+            *info = *info + j ;
+            break ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* copy the result back to the GPU */
+        /* ------------------------------------------------------------------ */
+
+        cudaStat = cudaMemcpy2DAsync (devPtrA + L_ENTRY*(j + j*gpu_lda),
+            gpu_lda * L_ENTRY * sizeof (double),
+            A + L_ENTRY * (j + j*lda),
+            lda * L_ENTRY * sizeof (double),
+            L_ENTRY * sizeof (double) * jb,
+            jb,
+            cudaMemcpyHostToDevice,
+            Common->gpuStream [0]) ;
+
+        if (cudaStat)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU memcopy to device") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* do the CUDA BLAS dtrsm */
+        /* ------------------------------------------------------------------ */
+
+        if ((j+jb) < n)
+        {
+
+#ifdef REAL
+            alpha  = 1.0 ;
+            cublasStatus = cublasDtrsm (Common->cublasHandle,
+                CUBLAS_SIDE_RIGHT,
+                CUBLAS_FILL_MODE_LOWER,
+                CUBLAS_OP_T, CUBLAS_DIAG_NON_UNIT,
+                (n-j-jb), jb,
+                &alpha,
+                devPtrA + (j + j*gpu_lda), gpu_lda,
+                devPtrA + (j+jb + j*gpu_lda), gpu_lda) ;
+#else
+            cuDoubleComplex calpha  = {1.0,0.0};
+            cublasStatus = cublasZtrsm (Common->cublasHandle,
+                CUBLAS_SIDE_RIGHT,
+                CUBLAS_FILL_MODE_LOWER,
+                CUBLAS_OP_C, CUBLAS_DIAG_NON_UNIT,
+                (n-j-jb), jb,
+                &calpha,
+                (cuDoubleComplex *)devPtrA +
+                (j + j*gpu_lda),
+                gpu_lda,
+                (cuDoubleComplex *)devPtrA +
+                (j+jb + j*gpu_lda),
+                gpu_lda) ;
+#endif
+
+            if (cublasStatus != CUBLAS_STATUS_SUCCESS)
+            {
+                ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS routine failure") ;
+            }
+
+            /* -------------------------------------------------------------- */
+            /* Copy factored column back to host.                             */
+            /* -------------------------------------------------------------- */
+
+            cudaStat = cudaEventRecord (Common->cublasEventPotrf[2],
+                                        Common->gpuStream[0]) ;
+            if (cudaStat)
+            {
+                ERROR (CHOLMOD_GPU_PROBLEM, "CUDA event failure") ;
+            }
+
+            cudaStat = cudaStreamWaitEvent (Common->gpuStream[1],
+                                            Common->cublasEventPotrf[2], 0) ;
+            if (cudaStat)
+            {
+                ERROR (CHOLMOD_GPU_PROBLEM, "CUDA event failure") ;
+            }
+
+            cudaStat = cudaMemcpy2DAsync (A + L_ENTRY*(j + jb + j * lda),
+                  lda * L_ENTRY * sizeof (double),
+                  devPtrA + L_ENTRY*
+                  (j + jb + j * gpu_lda),
+                  gpu_lda * L_ENTRY * sizeof (double),
+                  L_ENTRY * sizeof (double)*
+                  (n - j - jb), jb,
+                  cudaMemcpyDeviceToHost,
+                  Common->gpuStream[1]) ;
+
+            if (cudaStat)
+            {
+                ERROR (CHOLMOD_GPU_PROBLEM, "GPU memcopy to device") ;
+            }
+        }
+    }
+
+#ifndef NTIMER
+    Common->CHOLMOD_GPU_POTRF_TIME += SuiteSparse_time ( ) - tstart ;
+#endif
+
+    return (1) ;
+}
+
+
+/* ========================================================================== */
+/* === gpu_triangular_solve ================================================= */
+/* ========================================================================== */
+
+/* The current supernode is columns k1 to k2-1 of L.  Let L1 be the diagonal
+ * block (factorized by dpotrf/zpotrf above; rows/cols k1:k2-1), and L2 be rows
+ * k2:n-1 and columns k1:k2-1 of L.  The triangular system to solve is L2*L1' =
+ * S2, where S2 is overwritten with L2.  More precisely, L2 = S2 / L1' in
+ * MATLAB notation.
+ */
+
+/* Version with pre-allocation in POTRF */
+
+int TEMPLATE2 (CHOLMOD (gpu_triangular_solve))
+(
+    Int nsrow2,     /* L1 and S2 are nsrow2-by-nscol2 */
+    Int nscol2,     /* L1 is nscol2-by-nscol2 */
+    Int nsrow,      /* leading dimension of L1, L2, and S2 */
+    Int psx,        /* L1 is at Lx+L_ENTRY*psx;
+                     * L2 at Lx+L_ENTRY*(psx+nscol2)*/
+    double *Lx,     /* holds L1, L2, and S2 */
+    cholmod_common *Common,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+    double *devPtrA, *devPtrB ;
+    cudaError_t cudaStat ;
+    cublasStatus_t cublasStatus ;
+    Int gpu_lda, gpu_ldb, gpu_rowstep ;
+
+    Int gpu_row_start = 0 ;
+    Int gpu_row_max_chunk, gpu_row_chunk;
+    int ibuf = 0;
+    int iblock = 0;
+    int iHostBuff = (Common->ibuffer+CHOLMOD_HOST_SUPERNODE_BUFFERS-1) %
+        CHOLMOD_HOST_SUPERNODE_BUFFERS;
+    int i, j;
+    Int iidx;
+    int iwrap;
+
+#ifndef NTIMER
+    double tstart ;
+#endif
+
+#ifdef REAL
+    double alpha  = 1.0 ;
+    gpu_row_max_chunk = 768;
+#else
+    cuDoubleComplex calpha  = {1.0,0.0} ;
+    gpu_row_max_chunk = 256;
+#endif
+
+    if ( nsrow2 <= 0 )
+    {
+        return (0) ;
+    }
+
+#ifndef NTIMER
+    tstart = SuiteSparse_time ( ) ;
+    Common->CHOLMOD_GPU_TRSM_CALLS++ ;
+#endif
+
+    gpu_lda = ((nscol2+31)/32)*32 ;
+    gpu_ldb = ((nsrow2+31)/32)*32 ;
+
+    devPtrA = gpu_p->d_Lx[0];
+    devPtrB = gpu_p->d_Lx[1];
+
+    /* make sure the copy of B has completed */
+    cudaStreamSynchronize( Common->gpuStream[0] );
+
+    /* ---------------------------------------------------------------------- */
+    /* do the CUDA BLAS dtrsm */
+    /* ---------------------------------------------------------------------- */
+
+    while ( gpu_row_start < nsrow2 )
+    {
+
+        gpu_row_chunk = nsrow2 - gpu_row_start;
+        if ( gpu_row_chunk  > gpu_row_max_chunk ) {
+            gpu_row_chunk = gpu_row_max_chunk;
+        }
+
+        cublasStatus = cublasSetStream ( Common->cublasHandle,
+                                         Common->gpuStream[ibuf] );
+
+        if ( cublasStatus != CUBLAS_STATUS_SUCCESS )
+        {
+            ERROR ( CHOLMOD_GPU_PROBLEM, "GPU CUBLAS stream");
+        }
+
+#ifdef REAL
+        cublasStatus = cublasDtrsm (Common->cublasHandle,
+                                    CUBLAS_SIDE_RIGHT,
+                                    CUBLAS_FILL_MODE_LOWER,
+                                    CUBLAS_OP_T,
+                                    CUBLAS_DIAG_NON_UNIT,
+                                    gpu_row_chunk,
+                                    nscol2,
+                                    &alpha,
+                                    devPtrA,
+                                    gpu_lda,
+                                    devPtrB + gpu_row_start,
+                                    gpu_ldb) ;
+#else
+        cublasStatus = cublasZtrsm (Common->cublasHandle,
+                                    CUBLAS_SIDE_RIGHT,
+                                    CUBLAS_FILL_MODE_LOWER,
+                                    CUBLAS_OP_C,
+                                    CUBLAS_DIAG_NON_UNIT,
+                                    gpu_row_chunk,
+                                    nscol2,
+                                    &calpha,
+                                    (const cuDoubleComplex *) devPtrA,
+                                    gpu_lda,
+                                    (cuDoubleComplex *)devPtrB + gpu_row_start ,
+                                    gpu_ldb) ;
+#endif
+        if (cublasStatus != CUBLAS_STATUS_SUCCESS)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU CUBLAS routine failure") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* copy result back to the CPU */
+        /* ------------------------------------------------------------------ */
+
+        cudaStat = cudaMemcpy2DAsync (
+            gpu_p->h_Lx[iHostBuff] +
+            L_ENTRY*(nscol2+gpu_row_start),
+            nsrow * L_ENTRY * sizeof (Lx [0]),
+            devPtrB + L_ENTRY*gpu_row_start,
+            gpu_ldb * L_ENTRY * sizeof (devPtrB [0]),
+            gpu_row_chunk * L_ENTRY *
+            sizeof (devPtrB [0]),
+            nscol2,
+            cudaMemcpyDeviceToHost,
+            Common->gpuStream[ibuf]);
+
+        if (cudaStat)
+        {
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU memcopy from device") ;
+        }
+
+        cudaEventRecord ( Common->updateCBuffersFree[ibuf],
+                          Common->gpuStream[ibuf] );
+
+        gpu_row_start += gpu_row_chunk;
+        ibuf++;
+        ibuf = ibuf % CHOLMOD_HOST_SUPERNODE_BUFFERS;
+
+        iblock ++;
+
+        if ( iblock >= CHOLMOD_HOST_SUPERNODE_BUFFERS )
+        {
+            Int gpu_row_start2 ;
+            Int gpu_row_end ;
+
+            /* then CHOLMOD_HOST_SUPERNODE_BUFFERS worth of work has been
+             *  scheduled, so check for completed events and copy result into
+             *  Lx before continuing. */
+            cudaEventSynchronize ( Common->updateCBuffersFree
+                                   [iblock%CHOLMOD_HOST_SUPERNODE_BUFFERS] );
+
+            /* copy into Lx */
+            gpu_row_start2 = nscol2 +
+                (iblock-CHOLMOD_HOST_SUPERNODE_BUFFERS)
+                *gpu_row_max_chunk;
+            gpu_row_end = gpu_row_start2+gpu_row_max_chunk;
+
+            if ( gpu_row_end > nsrow ) gpu_row_end = nsrow;
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    private(iidx) if ( nscol2 > 32 )
+
+            for ( j=0; j<nscol2; j++ ) {
+                for ( i=gpu_row_start2*L_ENTRY; i<gpu_row_end*L_ENTRY; i++ ) {
+                    iidx = j*nsrow*L_ENTRY+i;
+                    Lx[psx*L_ENTRY+iidx] = gpu_p->h_Lx[iHostBuff][iidx];
+                }
+            }
+        }
+    }
+
+    /* Convenient to copy the L1 block here */
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+private ( iidx ) if ( nscol2 > 32 )
+
+    for ( j=0; j<nscol2; j++ ) {
+        for ( i=j*L_ENTRY; i<nscol2*L_ENTRY; i++ ) {
+            iidx = j*nsrow*L_ENTRY + i;
+            Lx[psx*L_ENTRY+iidx] = gpu_p->h_Lx[iHostBuff][iidx];
+        }
+    }
+
+    /* now account for the last HSTREAMS buffers */
+    for ( iwrap=0; iwrap<CHOLMOD_HOST_SUPERNODE_BUFFERS; iwrap++ )
+    {
+        int i, j;
+        Int gpu_row_start2 = nscol2 + (iblock-CHOLMOD_HOST_SUPERNODE_BUFFERS)
+            *gpu_row_max_chunk;
+        if (iblock-CHOLMOD_HOST_SUPERNODE_BUFFERS >= 0 &&
+            gpu_row_start2 < nsrow )
+        {
+            Int iidx;
+            Int gpu_row_end = gpu_row_start2+gpu_row_max_chunk;
+            if ( gpu_row_end > nsrow ) gpu_row_end = nsrow;
+            cudaEventSynchronize ( Common->updateCBuffersFree
+                                   [iblock%CHOLMOD_HOST_SUPERNODE_BUFFERS] );
+            /* copy into Lx */
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    private(iidx) if ( nscol2 > 32 )
+
+            for ( j=0; j<nscol2; j++ ) {
+                for ( i=gpu_row_start2*L_ENTRY; i<gpu_row_end*L_ENTRY; i++ ) {
+                    iidx = j*nsrow*L_ENTRY+i;
+                    Lx[psx*L_ENTRY+iidx] = gpu_p->h_Lx[iHostBuff][iidx];
+                }
+            }
+        }
+        iblock++;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return */
+    /* ---------------------------------------------------------------------- */
+
+#ifndef NTIMER
+    Common->CHOLMOD_GPU_TRSM_TIME += SuiteSparse_time ( ) - tstart ;
+#endif
+
+    return (1) ;
+}
+
+/* ========================================================================== */
+/* === gpu_copy_supernode =================================================== */
+/* ========================================================================== */
+/*
+ * In the event gpu_triangular_sovle is not needed / called, this routine
+ * copies the factored diagonal block from the GPU to the CPU.
+ */
+
+void TEMPLATE2 (CHOLMOD (gpu_copy_supernode))
+(
+    cholmod_common *Common,
+    double *Lx,
+    Int psx,
+    Int nscol,
+    Int nscol2,
+    Int nsrow,
+    int supernodeUsedGPU,
+    int iHostBuff,
+    cholmod_gpu_pointers *gpu_p
+)
+{
+    Int iidx, i, j;
+    if ( supernodeUsedGPU && nscol2 * L_ENTRY >= CHOLMOD_POTRF_LIMIT ) {
+        cudaDeviceSynchronize();
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    private(iidx,i,j) if (nscol>32)
+
+        for ( j=0; j<nscol; j++ ) {
+            for ( i=j*L_ENTRY; i<nscol*L_ENTRY; i++ ) {
+                iidx = j*nsrow*L_ENTRY+i;
+                Lx[psx*L_ENTRY+iidx] = gpu_p->h_Lx[iHostBuff][iidx];
+            }
+        }
+    }
+    return;
+}
+
+#endif
+
+#undef REAL
+#undef COMPLEX
+#undef ZOMPLEX
diff --git a/CHOLMOD/Include/License.txt b/CHOLMOD/Include/License.txt
index cfca615..ea2c374 100644
--- a/CHOLMOD/Include/License.txt
+++ b/CHOLMOD/Include/License.txt
@@ -1,7 +1,6 @@
 CHOLMOD/Include/* files.
 Copyright (C) 2005-2006, either Univ. of Florida or T. Davis,
 depending on the file.
-http://www.cise.ufl.edu/research/sparse
 
 Refer to each include file in this directory; each file is licensed
 separately, according to the Module for which it contains definitions
diff --git a/CHOLMOD/Include/README.txt b/CHOLMOD/Include/README.txt
index 387eb6e..ec68624 100644
--- a/CHOLMOD/Include/README.txt
+++ b/CHOLMOD/Include/README.txt
@@ -1,4 +1,4 @@
-CHOLMOD: a sparse Cholesky factorization package.
+CHOLMOD: a sparse Cholesky factorization package.  http://www.suitesparse.com
 
 The Include/*.h files in this directory provide a basic documentation of all
 user-callable routines and user-visible data structures in the CHOLMOD
diff --git a/CHOLMOD/Include/cholmod.h b/CHOLMOD/Include/cholmod.h
index 1332516..21d3ed2 100644
--- a/CHOLMOD/Include/cholmod.h
+++ b/CHOLMOD/Include/cholmod.h
@@ -4,11 +4,11 @@
 
 /* -----------------------------------------------------------------------------
  * CHOLMOD/Include/cholmod.h.
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
  * CHOLMOD/Include/cholmod.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  *
  * Portions of CHOLMOD (the Core and Partition Modules) are copyrighted by the
  * University of Florida.  The Modify Module is co-authored by William W.
@@ -37,9 +37,9 @@
  * -------------
  *
  *	Most CHOLMOD routines return an int (TRUE (1) if successful, or FALSE
- *	(0) otherwise.  A UF_long or double return value is >= 0 if successful,
- *	or -1 otherwise.  A size_t return value is > 0 if successful, or 0
- *	otherwise.
+ *	(0) otherwise.  A SuiteSparse_long or double return value is >= 0 if
+ *	successful, or -1 otherwise.  A size_t return value is > 0 if
+ *	successful, or 0 otherwise.
  *
  *	If a routine returns a pointer, it is a pointer to a newly allocated
  *	object or NULL if a failure occured, with one exception.  cholmod_free
@@ -83,11 +83,11 @@ extern "C" {
 /* assume large file support.  If problems occur, compile with -DNLARGEFILE */
 #include "cholmod_io64.h"
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
 #include "cholmod_config.h"
 
+
 /* CHOLMOD always includes the Core module. */
 #include "cholmod_core.h"
 
@@ -107,6 +107,10 @@ extern "C" {
 #include "cholmod_modify.h"
 #endif
 
+#ifndef NCAMD
+#include "cholmod_camd.h"
+#endif
+
 #ifndef NPARTITION
 #include "cholmod_partition.h"
 #endif
@@ -115,6 +119,10 @@ extern "C" {
 #include "cholmod_supernodal.h"
 #endif
 
+#ifdef GPU_BLAS
+#include "cholmod_gpu.h"
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/CHOLMOD/Include/cholmod_blas.h b/CHOLMOD/Include/cholmod_blas.h
index 7957968..f99e04d 100644
--- a/CHOLMOD/Include/cholmod_blas.h
+++ b/CHOLMOD/Include/cholmod_blas.h
@@ -8,7 +8,6 @@
  * CHOLMOD/Include/cholmod_blas.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* This does not need to be included in the user's program. */
@@ -32,10 +31,15 @@
 #define CHOLMOD_LINUX
 #define CHOLMOD_ARCHITECTURE "Linux"
 
+#elif defined (__APPLE__)
+#define CHOLMOD_MAC
+#define CHOLMOD_ARCHITECTURE "Mac"
+
 #elif defined (_AIX) || defined (MIBM_RS) || defined (ARCH_IBM_RS)
 #define CHOLMOD_AIX
 #define CHOLMOD_ARCHITECTURE "IBM AIX"
-#define BLAS_NO_UNDERSCORE
+/* recent reports from IBM AIX seem to indicate that this is not needed: */
+/* #define BLAS_NO_UNDERSCORE */
 
 #elif defined (__alpha) || defined (MALPHA) || defined (ARCH_ALPHA)
 #define CHOLMOD_ALPHA
@@ -68,7 +72,6 @@
 #define CHOLMOD_ARCHITECTURE "unknown"
 #endif
 
-
 /* ========================================================================== */
 /* === BLAS and LAPACK names ================================================ */
 /* ========================================================================== */
@@ -76,7 +79,7 @@
 /* Prototypes for the various versions of the BLAS.  */
 
 /* Determine if the 64-bit Sun Performance BLAS is to be used */
-#if defined(CHOLMOD_SOL2) && !defined(NSUNPERF) && defined(LONG) && defined(LONGBLAS)
+#if defined(CHOLMOD_SOL2) && !defined(NSUNPERF) && defined(BLAS64)
 #define SUN64
 #endif
 
@@ -146,23 +149,20 @@
 /* === BLAS and LAPACK integer arguments ==================================== */
 /* ========================================================================== */
 
-/* CHOLMOD can be compiled with -D'LONGBLAS=long' for the Sun Performance
- * Library, or -D'LONGBLAS=long long' for SGI's SCSL BLAS.  This defines the
- * integer used in the BLAS for the cholmod_l_* routines.
- *
- * The "int" version of CHOLMOD always uses the "int" version of the BLAS.
- */
+/* Compile CHOLMOD, UMFPACK, and SPQR with -DBLAS64 if you have a BLAS that
+ * uses 64-bit integers */
 
-#if defined (LONGBLAS) && defined (LONG)
-#define BLAS_INT LONGBLAS
+#if defined (LONGBLAS) || defined (BLAS64)
+#define BLAS_INT SuiteSparse_long
 #else
 #define BLAS_INT int
 #endif
 
 /* If the BLAS integer is smaller than the basic CHOLMOD integer, then we need
- * to check for integer overflow when converting from one to the other.  If
- * any integer overflows, the externally-defined blas_ok variable is set to
- * FALSE.  blas_ok should be set to TRUE before calling any BLAS_* macro.
+ * to check for integer overflow when converting from Int to BLAS_INT.  If
+ * any integer overflows, the externally-defined BLAS_OK variable is
+ * set to FALSE.  BLAS_OK should be set to TRUE before calling any
+ * BLAS_* macro.
  */
 
 #define CHECK_BLAS_INT (sizeof (BLAS_INT) < sizeof (Int))
@@ -179,12 +179,12 @@ void BLAS_DGEMV (char *trans, BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_dgemv(trans,m,n,alpha,A,lda,X,incx,beta,Y,incy) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DGEMV (trans, &M, &N, alpha, A, &LDA, X, &INCX, beta, Y, &INCY) ; \
     } \
@@ -197,12 +197,12 @@ void BLAS_ZGEMV (char *trans, BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_zgemv(trans,m,n,alpha,A,lda,X,incx,beta,Y,incy) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZGEMV (trans, &M, &N, alpha, A, &LDA, X, &INCX, beta, Y, &INCY) ; \
     } \
@@ -214,11 +214,11 @@ void BLAS_DTRSV (char *uplo, char *trans, char *diag, BLAS_INT *n, double *A,
 #define BLAS_dtrsv(uplo,trans,diag,n,A,lda,X,incx) \
 { \
     BLAS_INT N = n, LDA = lda, INCX = incx ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DTRSV (uplo, trans, diag, &N, A, &LDA, X, &INCX) ; \
     } \
@@ -230,11 +230,11 @@ void BLAS_ZTRSV (char *uplo, char *trans, char *diag, BLAS_INT *n, double *A,
 #define BLAS_ztrsv(uplo,trans,diag,n,A,lda,X,incx) \
 { \
     BLAS_INT N = n, LDA = lda, INCX = incx ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZTRSV (uplo, trans, diag, &N, A, &LDA, X, &INCX) ; \
     } \
@@ -247,11 +247,12 @@ void BLAS_DTRSM (char *side, char *uplo, char *transa, char *diag, BLAS_INT *m,
 #define BLAS_dtrsm(side,uplo,transa,diag,m,n,alpha,A,lda,B,ldb) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, LDB = ldb ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (LDB,ldb))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (LDB,ldb) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DTRSM (side, uplo, transa, diag, &M, &N, alpha, A, &LDA, B, &LDB);\
     } \
@@ -264,11 +265,12 @@ void BLAS_ZTRSM (char *side, char *uplo, char *transa, char *diag, BLAS_INT *m,
 #define BLAS_ztrsm(side,uplo,transa,diag,m,n,alpha,A,lda,B,ldb) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, LDB = ldb ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (LDB,ldb))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (LDB,ldb) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZTRSM (side, uplo, transa, diag, &M, &N, alpha, A, &LDA, B, &LDB);\
     } \
@@ -281,12 +283,12 @@ void BLAS_DGEMM (char *transa, char *transb, BLAS_INT *m, BLAS_INT *n,
 #define BLAS_dgemm(transa,transb,m,n,k,alpha,A,lda,B,ldb,beta,C,ldc) \
 { \
     BLAS_INT M = m, N = n, K = k, LDA = lda, LDB = ldb, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (K,k) && \
+        EQ (LDA,lda) && EQ (LDB,ldb) && EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (K,k) && EQ (LDA,lda) \
-		&& EQ (LDB,ldb) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DGEMM (transa, transb, &M, &N, &K, alpha, A, &LDA, B, &LDB, beta, \
 	    C, &LDC) ; \
@@ -300,12 +302,12 @@ void BLAS_ZGEMM (char *transa, char *transb, BLAS_INT *m, BLAS_INT *n,
 #define BLAS_zgemm(transa,transb,m,n,k,alpha,A,lda,B,ldb,beta,C,ldc) \
 { \
     BLAS_INT M = m, N = n, K = k, LDA = lda, LDB = ldb, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (K,k) && \
+        EQ (LDA,lda) && EQ (LDB,ldb) && EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (K,k) && EQ (LDA,lda) \
-		&& EQ (LDB,ldb) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZGEMM (transa, transb, &M, &N, &K, alpha, A, &LDA, B, &LDB, beta, \
 	    C, &LDC) ; \
@@ -319,11 +321,12 @@ void BLAS_DSYRK (char *uplo, char *trans, BLAS_INT *n, BLAS_INT *k,
 #define BLAS_dsyrk(uplo,trans,n,k,alpha,A,lda,beta,C,ldc) \
 { \
     BLAS_INT N = n, K = k, LDA = lda, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && \
+        EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DSYRK (uplo, trans, &N, &K, alpha, A, &LDA, beta, C, &LDC) ; \
     } \
@@ -336,11 +339,12 @@ void BLAS_ZHERK (char *uplo, char *trans, BLAS_INT *n, BLAS_INT *k,
 #define BLAS_zherk(uplo,trans,n,k,alpha,A,lda,beta,C,ldc) \
 { \
     BLAS_INT N = n, K = k, LDA = lda, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && \
+        EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZHERK (uplo, trans, &N, &K, alpha, A, &LDA, beta, C, &LDC) ; \
     } \
@@ -352,11 +356,11 @@ void LAPACK_DPOTRF (char *uplo, BLAS_INT *n, double *A, BLAS_INT *lda,
 #define LAPACK_dpotrf(uplo,n,A,lda,info) \
 { \
     BLAS_INT N = n, LDA = lda, INFO = 1 ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	LAPACK_DPOTRF (uplo, &N, A, &LDA, &INFO) ; \
     } \
@@ -369,11 +373,11 @@ void LAPACK_ZPOTRF (char *uplo, BLAS_INT *n, double *A, BLAS_INT *lda,
 #define LAPACK_zpotrf(uplo,n,A,lda,info) \
 { \
     BLAS_INT N = n, LDA = lda, INFO = 1 ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	LAPACK_ZPOTRF (uplo, &N, A, &LDA, &INFO) ; \
     } \
@@ -387,11 +391,11 @@ void BLAS_DSCAL (BLAS_INT *n, double *alpha, double *Y, BLAS_INT *incy) ;
 #define BLAS_dscal(n,alpha,Y,incy) \
 { \
     BLAS_INT N = n, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DSCAL (&N, alpha, Y, &INCY) ; \
     } \
@@ -402,11 +406,11 @@ void BLAS_ZSCAL (BLAS_INT *n, double *alpha, double *Y, BLAS_INT *incy) ;
 #define BLAS_zscal(n,alpha,Y,incy) \
 { \
     BLAS_INT N = n, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZSCAL (&N, alpha, Y, &INCY) ; \
     } \
@@ -419,12 +423,12 @@ void BLAS_DGER (BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_dger(m,n,alpha,X,incx,Y,incy,A,lda) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+          EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DGER (&M, &N, alpha, X, &INCX, Y, &INCY, A, &LDA) ; \
     } \
@@ -437,12 +441,12 @@ void BLAS_ZGER (BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_zgeru(m,n,alpha,X,incx,Y,incy,A,lda) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+          EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZGER (&M, &N, alpha, X, &INCX, Y, &INCY, A, &LDA) ; \
     } \
diff --git a/CHOLMOD/Include/cholmod_camd.h b/CHOLMOD/Include/cholmod_camd.h
new file mode 100644
index 0000000..3e1bf8d
--- /dev/null
+++ b/CHOLMOD/Include/cholmod_camd.h
@@ -0,0 +1,102 @@
+/* ========================================================================== */
+/* === Include/cholmod_camd.h =============================================== */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/Include/cholmod_camd.h.
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
+ * CHOLMOD/Include/cholmod_partition.h is licensed under Version 2.1 of the GNU
+ * Lesser General Public License.  See lesser.txt for a text of the license.
+ * CHOLMOD is also available under other licenses; contact authors for details.
+ * -------------------------------------------------------------------------- */
+
+/* CHOLMOD Partition module, interface to CAMD, CCOLAMD, and CSYMAMD
+ *
+ * An interface to CCOLAMD and CSYMAMD, constrained minimum degree ordering
+ * methods which order a matrix following constraints determined via nested
+ * dissection.
+ *
+ * These functions do not require METIS.  They are installed unless NCAMD
+ * is defined:
+ * cholmod_ccolamd		interface to CCOLAMD ordering
+ * cholmod_csymamd		interface to CSYMAMD ordering
+ * cholmod_camd			interface to CAMD ordering
+ *
+ * Requires the Core and Cholesky modules, and two packages: CAMD,
+ * and CCOLAMD.  Used by functions in the Partition Module.
+ */
+
+#ifndef CHOLMOD_CAMD_H
+#define CHOLMOD_CAMD_H
+
+#include "cholmod_core.h"
+
+/* -------------------------------------------------------------------------- */
+/* cholmod_ccolamd */
+/* -------------------------------------------------------------------------- */
+
+/* Order AA' or A(:,f)*A(:,f)' using CCOLAMD. */
+
+int cholmod_ccolamd
+(
+    /* ---- input ---- */
+    cholmod_sparse *A,	/* matrix to order */
+    int *fset,		/* subset of 0:(A->ncol)-1 */
+    size_t fsize,	/* size of fset */
+    int *Cmember,	/* size A->nrow.  Cmember [i] = c if row i is in the
+			 * constraint set c.  c must be >= 0.  The # of
+			 * constraint sets is max (Cmember) + 1.  If Cmember is
+			 * NULL, then it is interpretted as Cmember [i] = 0 for
+			 * all i */
+    /* ---- output --- */
+    int *Perm,		/* size A->nrow, output permutation */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_ccolamd (cholmod_sparse *, SuiteSparse_long *, size_t,
+    SuiteSparse_long *, SuiteSparse_long *, cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
+/* cholmod_csymamd */
+/* -------------------------------------------------------------------------- */
+
+/* Order A using CSYMAMD. */
+
+int cholmod_csymamd
+(
+    /* ---- input ---- */
+    cholmod_sparse *A,	/* matrix to order */
+    /* ---- output --- */
+    int *Cmember,	/* size nrow.  see cholmod_ccolamd above */
+    int *Perm,		/* size A->nrow, output permutation */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_csymamd (cholmod_sparse *, SuiteSparse_long *,
+    SuiteSparse_long *, cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
+/* cholmod_camd */
+/* -------------------------------------------------------------------------- */
+
+/* Order A using CAMD. */
+
+int cholmod_camd
+(
+    /* ---- input ---- */
+    cholmod_sparse *A,	/* matrix to order */
+    int *fset,		/* subset of 0:(A->ncol)-1 */
+    size_t fsize,	/* size of fset */
+    /* ---- output --- */
+    int *Cmember,	/* size nrow.  see cholmod_ccolamd above */
+    int *Perm,		/* size A->nrow, output permutation */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_camd (cholmod_sparse *, SuiteSparse_long *, size_t,
+    SuiteSparse_long *, SuiteSparse_long *, cholmod_common *) ;
+
+#endif
diff --git a/CHOLMOD/Include/cholmod_check.h b/CHOLMOD/Include/cholmod_check.h
index 58e4ad0..e75c415 100644
--- a/CHOLMOD/Include/cholmod_check.h
+++ b/CHOLMOD/Include/cholmod_check.h
@@ -7,7 +7,7 @@
  * CHOLMOD/Include/cholmod_check.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD Check module.
@@ -87,12 +87,19 @@ int cholmod_l_check_common (cholmod_common *) ;
 int cholmod_print_common
 (
     /* ---- input ---- */
-    char *name,		/* printed name of Common object */
+    const char *name,	/* printed name of Common object */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_common (char *, cholmod_common *) ;
+int cholmod_l_print_common (const char *, cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
+/* cholmod_gpu_stats:  print the GPU / CPU statistics */
+/* -------------------------------------------------------------------------- */
+
+int cholmod_gpu_stats   (cholmod_common *) ;
+int cholmod_l_gpu_stats (cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_check_sparse:  check a sparse matrix */
@@ -116,12 +123,12 @@ int cholmod_print_sparse
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* sparse matrix to print */
-    char *name,		/* printed name of sparse matrix */
+    const char *name,	/* printed name of sparse matrix */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_sparse (cholmod_sparse *, char *, cholmod_common *) ;
+int cholmod_l_print_sparse (cholmod_sparse *, const char *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_check_dense:  check a dense matrix */
@@ -145,12 +152,12 @@ int cholmod_print_dense
 (
     /* ---- input ---- */
     cholmod_dense *X,	/* dense matrix to print */
-    char *name,		/* printed name of dense matrix */
+    const char *name,	/* printed name of dense matrix */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_dense (cholmod_dense *, char *, cholmod_common *) ;
+int cholmod_l_print_dense (cholmod_dense *, const char *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_check_factor:  check a factor */
@@ -174,12 +181,12 @@ int cholmod_print_factor
 (
     /* ---- input ---- */
     cholmod_factor *L,	/* factor to print */
-    char *name,		/* printed name of factor */
+    const char *name,	/* printed name of factor */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_factor (cholmod_factor *, char *, cholmod_common *) ;
+int cholmod_l_print_factor (cholmod_factor *, const char *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_check_triplet:  check a sparse matrix in triplet form */
@@ -203,12 +210,12 @@ int cholmod_print_triplet
 (
     /* ---- input ---- */
     cholmod_triplet *T,	/* triplet matrix to print */
-    char *name,		/* printed name of triplet matrix */
+    const char *name,	/* printed name of triplet matrix */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_triplet (cholmod_triplet *, char *, cholmod_common *) ;
+int cholmod_l_print_triplet (cholmod_triplet *, const char *, cholmod_common *);
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_check_subset:  check a subset */
@@ -218,13 +225,14 @@ int cholmod_check_subset
 (
     /* ---- input ---- */
     int *Set,		/* Set [0:len-1] is a subset of 0:n-1.  Duplicates OK */
-    UF_long len,	/* size of Set (an integer array) */
+    SuiteSparse_long len,   /* size of Set (an integer array) */
     size_t n,		/* 0:n-1 is valid range */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_check_subset (UF_long *, UF_long, size_t, cholmod_common *) ;
+int cholmod_l_check_subset (SuiteSparse_long *, SuiteSparse_long, size_t,
+    cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_print_subset:  print a subset */
@@ -234,15 +242,15 @@ int cholmod_print_subset
 (
     /* ---- input ---- */
     int *Set,		/* Set [0:len-1] is a subset of 0:n-1.  Duplicates OK */
-    UF_long len,	/* size of Set (an integer array) */
+    SuiteSparse_long len,   /* size of Set (an integer array) */
     size_t n,		/* 0:n-1 is valid range */
-    char *name,		/* printed name of Set */
+    const char *name,	/* printed name of Set */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_subset (UF_long *, UF_long, size_t, char *,
-    cholmod_common *) ;
+int cholmod_l_print_subset (SuiteSparse_long *, SuiteSparse_long, size_t,
+    const char *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_check_perm:  check a permutation */
@@ -258,7 +266,7 @@ int cholmod_check_perm
     cholmod_common *Common
 ) ;
 
-int cholmod_l_check_perm (UF_long *, size_t, size_t, cholmod_common *) ;
+int cholmod_l_check_perm (SuiteSparse_long *, size_t, size_t, cholmod_common *);
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_print_perm:  print a permutation vector */
@@ -270,12 +278,13 @@ int cholmod_print_perm
     int *Perm,		/* Perm [0:len-1] is a permutation of subset of 0:n-1 */
     size_t len,		/* size of Perm (an integer array) */
     size_t n,		/* 0:n-1 is valid range */
-    char *name,		/* printed name of Perm */
+    const char *name,	/* printed name of Perm */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_perm (UF_long *, size_t, size_t, char *, cholmod_common *) ;
+int cholmod_l_print_perm (SuiteSparse_long *, size_t, size_t, const char *,
+    cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_check_parent:  check an elimination tree */
@@ -290,7 +299,7 @@ int cholmod_check_parent
     cholmod_common *Common
 ) ;
 
-int cholmod_l_check_parent (UF_long *, size_t, cholmod_common *) ;
+int cholmod_l_check_parent (SuiteSparse_long *, size_t, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_print_parent */
@@ -301,12 +310,13 @@ int cholmod_print_parent
     /* ---- input ---- */
     int *Parent,	/* Parent [0:n-1] is an elimination tree */
     size_t n,		/* size of Parent */
-    char *name,		/* printed name of Parent */
+    const char *name,	/* printed name of Parent */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_print_parent (UF_long *, size_t, char *, cholmod_common *) ;
+int cholmod_l_print_parent (SuiteSparse_long *, size_t, const char *,
+    cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_read_sparse: read a sparse matrix from a file */
@@ -390,13 +400,13 @@ int cholmod_write_sparse
     FILE *f,		    /* file to write to, must already be open */
     cholmod_sparse *A,	    /* matrix to print */
     cholmod_sparse *Z,	    /* optional matrix with pattern of explicit zeros */
-    char *comments,	    /* optional filename of comments to include */
+    const char *comments,    /* optional filename of comments to include */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
 int cholmod_l_write_sparse (FILE *, cholmod_sparse *, cholmod_sparse *,
-    char *c, cholmod_common *) ;
+    const char *c, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_write_dense: write a dense matrix to a file */
@@ -407,11 +417,11 @@ int cholmod_write_dense
     /* ---- input ---- */
     FILE *f,		    /* file to write to, must already be open */
     cholmod_dense *X,	    /* matrix to print */
-    char *comments,	    /* optional filename of comments to include */
+    const char *comments,    /* optional filename of comments to include */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_write_dense (FILE *, cholmod_dense *, char *, cholmod_common *) ;
-
+int cholmod_l_write_dense (FILE *, cholmod_dense *, const char *,
+    cholmod_common *) ;
 #endif
diff --git a/CHOLMOD/Include/cholmod_cholesky.h b/CHOLMOD/Include/cholmod_cholesky.h
index 7388afb..a6d6038 100644
--- a/CHOLMOD/Include/cholmod_cholesky.h
+++ b/CHOLMOD/Include/cholmod_cholesky.h
@@ -3,11 +3,11 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Include/cholmod_cholesky.h. Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Include/cholmod_cholesky.h. Copyright (C) 2005-2013, Timothy A. Davis
  * CHOLMOD/Include/cholmod_cholesky.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD Cholesky module.
@@ -27,6 +27,7 @@
  * cholmod_analyze		order and analyze (simplicial or supernodal)
  * cholmod_factorize		simplicial or supernodal Cholesky factorization
  * cholmod_solve		solve a linear system (simplicial or supernodal)
+ * cholmod_solve2		like cholmod_solve, but reuse workspace
  * cholmod_spsolve		solve a linear system (sparse x and b)
  *
  * Secondary routines:
@@ -41,6 +42,7 @@
  * cholmod_colamd		order using COLAMD
  * cholmod_rowfac		incremental simplicial factorization
  * cholmod_rowfac_mask		rowfac, specific to LPDASA
+ * cholmod_rowfac_mask2         rowfac, specific to LPDASA
  * cholmod_row_subtree		find the nonzero pattern of a row of L
  * cholmod_resymbol		recompute the symbolic pattern of L
  * cholmod_resymbol_noperm	recompute the symbolic pattern of L, no L->Perm
@@ -102,8 +104,29 @@ cholmod_factor *cholmod_analyze_p
     cholmod_common *Common
 ) ;
 
-cholmod_factor *cholmod_l_analyze_p (cholmod_sparse *, UF_long *, UF_long *,
-    size_t, cholmod_common *) ;
+cholmod_factor *cholmod_l_analyze_p (cholmod_sparse *, SuiteSparse_long *,
+    SuiteSparse_long *, size_t, cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
+/* cholmod_analyze_p2:  analyze for sparse Cholesky or sparse QR */
+/* -------------------------------------------------------------------------- */
+
+cholmod_factor *cholmod_analyze_p2
+(
+    /* ---- input ---- */
+    int for_whom,       /* FOR_SPQR     (0): for SPQR but not GPU-accelerated
+                           FOR_CHOLESKY (1): for Cholesky (GPU or not)
+                           FOR_SPQRGPU  (2): for SPQR with GPU acceleration */
+    cholmod_sparse *A,	/* matrix to order and analyze */
+    int *UserPerm,	/* user-provided permutation, size A->nrow */
+    int *fset,		/* subset of 0:(A->ncol)-1 */
+    size_t fsize,	/* size of fset */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+cholmod_factor *cholmod_l_analyze_p2 (int, cholmod_sparse *, SuiteSparse_long *,
+    SuiteSparse_long *, size_t, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_factorize:  simplicial or supernodal Cholesky factorization */
@@ -145,8 +168,8 @@ int cholmod_factorize_p
     cholmod_common *Common
 ) ;
 
-int cholmod_l_factorize_p (cholmod_sparse *, double *, UF_long *, size_t,
-    cholmod_factor *, cholmod_common *) ;
+int cholmod_l_factorize_p (cholmod_sparse *, double *, SuiteSparse_long *,
+    size_t, cholmod_factor *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_solve:  solve a linear system (simplicial or supernodal) */
@@ -180,6 +203,31 @@ cholmod_dense *cholmod_l_solve (int, cholmod_factor *, cholmod_dense *,
     cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
+/* cholmod_solve2:  like cholmod_solve, but with reusable workspace */
+/* -------------------------------------------------------------------------- */
+
+int cholmod_solve2     /* returns TRUE on success, FALSE on failure */
+(
+    /* ---- input ---- */
+    int sys,		            /* system to solve */
+    cholmod_factor *L,	            /* factorization to use */
+    cholmod_dense *B,               /* right-hand-side */
+    cholmod_sparse *Bset,
+    /* ---- output --- */
+    cholmod_dense **X_Handle,       /* solution, allocated if need be */
+    cholmod_sparse **Xset_Handle,
+    /* ---- workspace  */
+    cholmod_dense **Y_Handle,       /* workspace, or NULL */
+    cholmod_dense **E_Handle,       /* workspace, or NULL */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_solve2 (int, cholmod_factor *, cholmod_dense *, cholmod_sparse *,
+    cholmod_dense **, cholmod_sparse **, cholmod_dense **, cholmod_dense **,
+    cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
 /* cholmod_spsolve:  solve a linear system with a sparse right-hand-side */
 /* -------------------------------------------------------------------------- */
 
@@ -210,7 +258,7 @@ int cholmod_etree
     cholmod_common *Common
 ) ;
 
-int cholmod_l_etree (cholmod_sparse *, UF_long *, cholmod_common *) ;
+int cholmod_l_etree (cholmod_sparse *, SuiteSparse_long *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_rowcolcounts: compute the row/column counts of L */
@@ -238,8 +286,10 @@ int cholmod_rowcolcounts
     cholmod_common *Common
 ) ;
 
-int cholmod_l_rowcolcounts (cholmod_sparse *, UF_long *, size_t, UF_long *,
-    UF_long *, UF_long *, UF_long *, UF_long *, UF_long *, cholmod_common *) ;
+int cholmod_l_rowcolcounts (cholmod_sparse *, SuiteSparse_long *, size_t,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_analyze_ordering:  analyze a fill-reducing ordering */
@@ -264,8 +314,9 @@ int cholmod_analyze_ordering
     cholmod_common *Common
 ) ;
 
-int cholmod_l_analyze_ordering (cholmod_sparse *, int, UF_long *, UF_long *,
-    size_t, UF_long *, UF_long *, UF_long *, UF_long *, UF_long *,
+int cholmod_l_analyze_ordering (cholmod_sparse *, int, SuiteSparse_long *,
+    SuiteSparse_long *, size_t, SuiteSparse_long *, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
     cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
@@ -287,8 +338,8 @@ int cholmod_amd
     cholmod_common *Common
 ) ;
 
-int cholmod_l_amd (cholmod_sparse *, UF_long *, size_t, UF_long *,
-    cholmod_common *) ;
+int cholmod_l_amd (cholmod_sparse *, SuiteSparse_long *, size_t,
+    SuiteSparse_long *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_colamd:  order using COLAMD */
@@ -310,8 +361,8 @@ int cholmod_colamd
     cholmod_common *Common
 ) ;
 
-int cholmod_l_colamd (cholmod_sparse *, UF_long *, size_t, int, UF_long *,
-    cholmod_common *) ;
+int cholmod_l_colamd (cholmod_sparse *, SuiteSparse_long *, size_t, int,
+    SuiteSparse_long *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_rowfac:  incremental simplicial factorization */
@@ -363,7 +414,29 @@ int cholmod_rowfac_mask
 ) ;
 
 int cholmod_l_rowfac_mask (cholmod_sparse *, cholmod_sparse *, double *, size_t,
-    size_t, UF_long *, UF_long *, cholmod_factor *, cholmod_common *) ;
+    size_t, SuiteSparse_long *, SuiteSparse_long *, cholmod_factor *,
+    cholmod_common *) ;
+
+int cholmod_rowfac_mask2
+(
+    /* ---- input ---- */
+    cholmod_sparse *A,	/* matrix to factorize */
+    cholmod_sparse *F,	/* used for A*A' case only. F=A' or A(:,fset)' */
+    double beta [2],	/* factorize beta*I+A or beta*I+A'*A */
+    size_t kstart,	/* first row to factorize */
+    size_t kend,	/* last row to factorize is kend-1 */
+    int *mask,		/* if mask[i] >= maskmark, then set row i to zero */
+    int maskmark,
+    int *RLinkUp,	/* link list of rows to compute */
+    /* ---- in/out --- */
+    cholmod_factor *L,
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_rowfac_mask2 (cholmod_sparse *, cholmod_sparse *, double *,
+    size_t, size_t, SuiteSparse_long *, SuiteSparse_long, SuiteSparse_long *,
+    cholmod_factor *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_row_subtree:  find the nonzero pattern of a row of L */
@@ -380,13 +453,31 @@ int cholmod_row_subtree
     size_t k,		/* row k of L */
     int *Parent,	/* elimination tree */
     /* ---- output --- */
-    cholmod_sparse *R,	/* pattern of L(k,:), 1-by-n with R->nzmax >= n */
+    cholmod_sparse *R,	/* pattern of L(k,:), n-by-1 with R->nzmax >= n */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
 int cholmod_l_row_subtree (cholmod_sparse *, cholmod_sparse *, size_t,
-    UF_long *, cholmod_sparse *, cholmod_common *) ;
+    SuiteSparse_long *, cholmod_sparse *, cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
+/* cholmod_lsolve_pattern: find the nonzero pattern of x=L\b */
+/* -------------------------------------------------------------------------- */
+
+int cholmod_lsolve_pattern
+(
+    /* ---- input ---- */
+    cholmod_sparse *B,	/* sparse right-hand-side (a single sparse column) */
+    cholmod_factor *L,	/* the factor L from which parent(i) is derived */
+    /* ---- output --- */
+    cholmod_sparse *X,	/* pattern of X=L\B, n-by-1 with X->nzmax >= n */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_lsolve_pattern (cholmod_sparse *, cholmod_factor *,
+    cholmod_sparse *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_row_lsubtree:  find the nonzero pattern of a row of L */
@@ -404,12 +495,12 @@ int cholmod_row_lsubtree
     size_t k,		/* row k of L */
     cholmod_factor *L,	/* the factor L from which parent(i) is derived */
     /* ---- output --- */
-    cholmod_sparse *R,	/* pattern of L(k,:), 1-by-n with R->nzmax >= n */
+    cholmod_sparse *R,	/* pattern of L(k,:), n-by-1 with R->nzmax >= n */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_row_lsubtree (cholmod_sparse *, UF_long *, size_t,
+int cholmod_l_row_lsubtree (cholmod_sparse *, SuiteSparse_long *, size_t,
     size_t, cholmod_factor *, cholmod_sparse *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
@@ -436,7 +527,7 @@ int cholmod_resymbol
     cholmod_common *Common
 ) ;
 
-int cholmod_l_resymbol (cholmod_sparse *, UF_long *, size_t, int,
+int cholmod_l_resymbol (cholmod_sparse *, SuiteSparse_long *, size_t, int,
     cholmod_factor *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
@@ -459,7 +550,7 @@ int cholmod_resymbol_noperm
     cholmod_common *Common
 ) ;
 
-int cholmod_l_resymbol_noperm (cholmod_sparse *, UF_long *, size_t, int,
+int cholmod_l_resymbol_noperm (cholmod_sparse *, SuiteSparse_long *, size_t, int,
     cholmod_factor *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
@@ -480,7 +571,7 @@ double cholmod_l_rcond (cholmod_factor *, cholmod_common *) ;
 /* cholmod_postorder: Compute the postorder of a tree */
 /* -------------------------------------------------------------------------- */
 
-UF_long cholmod_postorder	/* return # of nodes postordered */
+SuiteSparse_long cholmod_postorder	/* return # of nodes postordered */
 (
     /* ---- input ---- */
     int *Parent,	/* size n. Parent [j] = p if p is the parent of j */
@@ -492,7 +583,7 @@ UF_long cholmod_postorder	/* return # of nodes postordered */
     cholmod_common *Common
 ) ;
 
-UF_long cholmod_l_postorder (UF_long *, size_t, UF_long *, UF_long *,
-    cholmod_common *) ;
+SuiteSparse_long cholmod_l_postorder (SuiteSparse_long *, size_t,
+    SuiteSparse_long *, SuiteSparse_long *, cholmod_common *) ;
 
 #endif
diff --git a/CHOLMOD/Include/cholmod_complexity.h b/CHOLMOD/Include/cholmod_complexity.h
index a84583a..2fd60c8 100644
--- a/CHOLMOD/Include/cholmod_complexity.h
+++ b/CHOLMOD/Include/cholmod_complexity.h
@@ -128,7 +128,7 @@ x [2*(p)+1] -= (-ax [2*(q)+1]) * bx [2*(r)] + ax [2*(q)  ] * bx [2*(r)+1]
 
 /* s = s / a */
 #define C_DIV(x,z,p,ax,az,q) \
-    Common->complex_divide ( \
+    SuiteSparse_config.divcomplex_func ( \
 	      x [2*(p)],  x [2*(p)+1], \
 	     ax [2*(q)], ax [2*(q)+1], \
 	     &x [2*(p)], &x [2*(p)+1])
@@ -219,9 +219,10 @@ x [2*(p)+1] -= (-ax [2*(q)+1]) * bx [2*(r)] + ax [2*(q)  ] * bx [2*(r)+1]
 #define Z_CLEAR_IMAG(x,z,p) \
     z [p] = 0
 
-/* s = s/a */
+/* s = s / a */
 #define Z_DIV(x,z,p,ax,az,q) \
-    Common->complex_divide (x [p], z [p], ax [q], az [q], &x [p], &z [p])
+    SuiteSparse_config.divcomplex_func \
+        (x [p], z [p], ax [q], az [q], &x [p], &z [p])
 
 /* s -= conj(a)*a ; note that the result of conj(a)*a is real */
 #define Z_LLDOT(x,p, ax,az,q) \
diff --git a/CHOLMOD/Include/cholmod_config.h b/CHOLMOD/Include/cholmod_config.h
index b9de51b..5ada402 100644
--- a/CHOLMOD/Include/cholmod_config.h
+++ b/CHOLMOD/Include/cholmod_config.h
@@ -4,11 +4,10 @@
 
 /* -----------------------------------------------------------------------------
  * CHOLMOD/Include/cholmod_config.h.
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
  * CHOLMOD/Include/cholmod_config.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD configuration file, for inclusion in user programs.
@@ -26,6 +25,8 @@
  * -DNCHECK	    do not include the Check module.        License: GNU LGPL
  * -DNCHOLESKY	    do not include the Cholesky module.     License: GNU LGPL
  * -DNPARTITION	    do not include the Partition module.    License: GNU LGPL
+ * -DNCAMD          do not include the interfaces to CAMD,
+ *                  CCOLAMD, CSYMAND in Partition module.   License: GNU LGPL
  *
  * -DNGPL	    do not include any GNU GPL Modules in the CHOLMOD library.
  * -DNMATRIXOPS	    do not include the MatrixOps module.    License: GNU GPL
@@ -56,6 +57,7 @@
 /*
 #define NCHECK
 #define NCHOLESKY
+#define NCAMD
 #define NPARTITION
 
 #define NGPL  
diff --git a/CHOLMOD/Include/cholmod_core.h b/CHOLMOD/Include/cholmod_core.h
index 523f505..32015d5 100644
--- a/CHOLMOD/Include/cholmod_core.h
+++ b/CHOLMOD/Include/cholmod_core.h
@@ -4,11 +4,10 @@
 
 /* -----------------------------------------------------------------------------
  * CHOLMOD/Include/cholmod_core.h.
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
  * CHOLMOD/Include/cholmod_core.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD Core module: basic CHOLMOD objects and routines.
@@ -160,6 +159,7 @@
  * cholmod_copy_dense		create a copy of a dense matrix
  * cholmod_copy_dense2		copy a dense matrix (pre-allocated)
  * cholmod_dense_xtype		change the xtype of a dense matrix
+ * cholmod_ensure_dense  	ensure a dense matrix has a given size and type
  *
  * ============================================================================
  * === cholmod_triplet ========================================================
@@ -200,7 +200,7 @@
  *
  * int			TRUE (1) if successful, or FALSE (0) otherwise.
  *			(exception: cholmod_divcomplex)
- * UF_long		a value >= 0 if successful, or -1 otherwise.
+ * SuiteSparse_long     a value >= 0 if successful, or -1 otherwise.
  * double		a value >= 0 if successful, or -1 otherwise.
  * size_t		a value > 0 if successful, or 0 otherwise.
  * void *		a non-NULL pointer to newly allocated memory if
@@ -244,11 +244,13 @@
  *	#endif
  */
 
-#define CHOLMOD_DATE "Nov 1, 2007"
+#define CHOLMOD_HAS_VERSION_FUNCTION
+
+#define CHOLMOD_DATE "Oct 23, 2014"
 #define CHOLMOD_VER_CODE(main,sub) ((main) * 1000 + (sub))
-#define CHOLMOD_MAIN_VERSION 1
-#define CHOLMOD_SUB_VERSION 6
-#define CHOLMOD_SUBSUB_VERSION 0
+#define CHOLMOD_MAIN_VERSION 3
+#define CHOLMOD_SUB_VERSION 0
+#define CHOLMOD_SUBSUB_VERSION 3
 #define CHOLMOD_VERSION \
     CHOLMOD_VER_CODE(CHOLMOD_MAIN_VERSION,CHOLMOD_SUB_VERSION)
 
@@ -269,6 +271,25 @@
 #include <stdlib.h>
 
 /* ========================================================================== */
+/* === CUDA BLAS for the GPU ================================================ */
+/* ========================================================================== */
+
+/* The number of OMP threads should typically be set to the number of cores   */
+/* per socket inthe machine being used.  This maximizes memory performance.   */
+#ifndef CHOLMOD_OMP_NUM_THREADS
+#define CHOLMOD_OMP_NUM_THREADS 4
+#endif
+
+/* Define buffering parameters for GPU processing */
+#ifdef GPU_BLAS
+#include <cublas_v2.h>
+#endif
+
+#define CHOLMOD_DEVICE_SUPERNODE_BUFFERS 6
+#define CHOLMOD_HOST_SUPERNODE_BUFFERS 8
+#define CHOLMOD_DEVICE_STREAMS 2
+
+/* ========================================================================== */
 /* === CHOLMOD objects ====================================================== */
 /* ========================================================================== */
 
@@ -286,8 +307,8 @@
 
 /* itype defines the types of integer used: */
 #define CHOLMOD_INT 0		/* all integer arrays are int */
-#define CHOLMOD_INTLONG 1	/* most are int, some are UF_long */
-#define CHOLMOD_LONG 2		/* all integer arrays are UF_long */
+#define CHOLMOD_INTLONG 1	/* most are int, some are SuiteSparse_long */
+#define CHOLMOD_LONG 2		/* all integer arrays are SuiteSparse_long */
 
 /* The itype of all parameters for all CHOLMOD routines must match.
  * FUTURE WORK: CHOLMOD_INTLONG is not yet supported.
@@ -356,8 +377,8 @@
  */
 
 /* Definitions for cholmod_common: */
-#define CHOLMOD_MAXMETHODS 9	/* maximum number of different methods that
-				 * cholmod_analyze can try. Must be >= 9. */
+#define CHOLMOD_MAXMETHODS 9	/* maximum number of different methods that */
+				/* cholmod_analyze can try. Must be >= 9. */
 
 /* Common->status values.  zero means success, negative means a fatal error,
  * positive is a warning. */
@@ -366,17 +387,18 @@
 #define CHOLMOD_OUT_OF_MEMORY (-2)	/* failure: out of memory */
 #define CHOLMOD_TOO_LARGE (-3)		/* failure: integer overflow occured */
 #define CHOLMOD_INVALID (-4)		/* failure: invalid input */
+#define CHOLMOD_GPU_PROBLEM (-5)        /* failure: GPU fatal error */
 #define CHOLMOD_NOT_POSDEF (1)		/* warning: matrix not pos. def. */
-#define CHOLMOD_DSMALL (2)		/* warning: D for LDL'  or diag(L) or
-					 * LL' has tiny absolute value */
+#define CHOLMOD_DSMALL (2)		/* warning: D for LDL'  or diag(L) or */
+					/* LL' has tiny absolute value */
 
 /* ordering method (also used for L->ordering) */
 #define CHOLMOD_NATURAL 0	/* use natural ordering */
 #define CHOLMOD_GIVEN 1		/* use given permutation */
 #define CHOLMOD_AMD 2		/* use minimum degree (AMD) */
 #define CHOLMOD_METIS 3		/* use METIS' nested dissection */
-#define CHOLMOD_NESDIS 4	/* use CHOLMOD's version of nested dissection:
-				 * node bisector applied recursively, followed
+#define CHOLMOD_NESDIS 4	/* use CHOLMOD's version of nested dissection:*/
+				/* node bisector applied recursively, followed
 				 * by constrained minimum degree (CSYMAMD or
 				 * CCOLAMD) */
 #define CHOLMOD_COLAMD 5	/* use AMD for A, COLAMD for A*A' */
@@ -519,19 +541,30 @@ typedef struct cholmod_common_struct
 					 * factorization will return quickly if
 	* the matrix is not positive definite.  Default: FALSE. */
 
+    int prefer_binary ;	    /* cholmod_read_triplet converts a symmetric
+			     * pattern-only matrix into a real matrix.  If
+	* prefer_binary is FALSE, the diagonal entries are set to 1 + the degree
+	* of the row/column, and off-diagonal entries are set to -1 (resulting
+	* in a positive definite matrix if the diagonal is zero-free).  Most
+	* symmetric patterns are the pattern a positive definite matrix.  If
+	* this parameter is TRUE, then the matrix is returned with a 1 in each
+	* entry, instead.  Default: FALSE.  Added in v1.3. */
+
     /* ---------------------------------------------------------------------- */
     /* printing and error handling options */
     /* ---------------------------------------------------------------------- */
 
     int print ;		/* print level. Default: 3 */
     int precise ;	/* if TRUE, print 16 digits.  Otherwise print 5 */
-    int (*print_function) (const char *, ...) ;	/* pointer to printf */
+
+    /* CHOLMOD print_function replaced with SuiteSparse_config.print_func */
 
     int try_catch ;	/* if TRUE, then ignore errors; CHOLMOD is in the middle
 			 * of a try/catch block.  No error message is printed
 	 * and the Common->error_handler function is not called. */
 
-    void (*error_handler) (int status, char *file, int line, char *message) ;
+    void (*error_handler) (int status, const char *file,
+        int line, const char *message) ;
 
 	/* Common->error_handler is the user's error handling routine.  If not
 	 * NULL, this routine is called if an error occurs in CHOLMOD.  status
@@ -674,13 +707,13 @@ typedef struct cholmod_common_struct
 	    * separator is discarded if it consists of the entire graph.
 	    * Default: 1 */
 
-	double other1 [4] ; /* future expansion */
+	double other_1 [4] ; /* future expansion */
 
 	size_t nd_small ;    /* do not partition graphs with fewer nodes than
 			     * nd_small, in NESDIS.  Default: 200 (same as
 			     * METIS) */
 
-	size_t other2 [4] ; /* future expansion */
+	size_t other_2 [4] ; /* future expansion */
 
 	int aggressive ;    /* Aggresive absorption in AMD, COLAMD, SYMAMD,
 			     * CCOLAMD, and CSYMAMD.  Default: TRUE */
@@ -713,7 +746,7 @@ typedef struct cholmod_common_struct
 	/* fill-reducing ordering to use */
 	int ordering ;
 
-	size_t other3 [4] ; /* future expansion */
+	size_t other_3 [4] ; /* future expansion */
 
     } method [CHOLMOD_MAXMETHODS + 1] ;
 
@@ -722,36 +755,21 @@ typedef struct cholmod_common_struct
 	* supernode amalgamation.  Does not affect fundamental nnz(L) and
 	* flop count.  Default: TRUE. */
 
-    /* ---------------------------------------------------------------------- */
-    /* memory management routines */
-    /* ---------------------------------------------------------------------- */
-
-    void *(*malloc_memory) (size_t) ;		/* pointer to malloc */
-    void *(*realloc_memory) (void *, size_t) ;  /* pointer to realloc */
-    void (*free_memory) (void *) ;		/* pointer to free */
-    void *(*calloc_memory) (size_t, size_t) ;	/* pointer to calloc */
+    int default_nesdis ;    /* Default: FALSE.  If FALSE, then the default
+			     * ordering strategy (when Common->nmethods == 0)
+	* is to try the given ordering (if present), AMD, and then METIS if AMD
+	* reports high fill-in.  If Common->default_nesdis is TRUE then NESDIS
+	* is used instead in the default strategy. */
 
     /* ---------------------------------------------------------------------- */
-    /* routines for complex arithmetic */
+    /* memory management, complex divide, and hypot function pointers moved */
     /* ---------------------------------------------------------------------- */
 
-    int (*complex_divide) (double ax, double az, double bx, double bz,
-	    double *cx, double *cz) ;
-
-	/* flag = complex_divide (ax, az, bx, bz, &cx, &cz) computes the complex
-	 * division c = a/b, where ax and az hold the real and imaginary part
-	 * of a, and b and c are stored similarly.  flag is returned as 1 if
-	 * a divide-by-zero occurs, or 0 otherwise.  By default, the function
-	 * pointer Common->complex_divide is set equal to cholmod_divcomplex.
-	 */
-
-    double (*hypotenuse) (double x, double y) ;
-
-	/* s = hypotenuse (x,y) computes s = sqrt (x*x + y*y), but does so more
-	 * accurately.  By default, the function pointer Common->hypotenuse is
-	 * set equal to cholmod_hypot.  See also the hypot function in the C99
-	 * standard, which has an identical syntax and function.  If you have
-	 * a C99-compliant compiler, you can set Common->hypotenuse = hypot.  */
+    /* Function pointers moved from here (in CHOLMOD 2.2.0) to
+       SuiteSparse_config.[ch].  See CHOLMOD/Include/cholmod_back.h
+       for a set of macros that can be #include'd or copied into your
+       application to define these function pointers on any version of CHOLMOD.
+       */
 
     /* ---------------------------------------------------------------------- */
     /* METIS workarounds */
@@ -821,7 +839,7 @@ typedef struct cholmod_common_struct
      */
 
     size_t nrow ;	/* size of Flag and Head */
-    UF_long mark ;	/* mark value for Flag array */
+    SuiteSparse_long mark ;	/* mark value for Flag array */
     size_t iworksize ;	/* size of Iwork.  Upper bound: 6*nrow+ncol */
     size_t xworksize ;	/* size of Xwork,  in bytes.
 			 * maxrank*nrow*sizeof(double) for update/downdate.
@@ -846,8 +864,8 @@ typedef struct cholmod_common_struct
     void *Iwork ;	/* size iworksize, 2*nrow+ncol for most routines,
 			 * up to 6*nrow+ncol for cholmod_analyze. */
 
-    int itype ;		/* If CHOLMOD_LONG, Flag, Head, and Iwork are UF_long.
-			 * Otherwise all three arrays are int. */
+    int itype ;		/* If CHOLMOD_LONG, Flag, Head, and Iwork are
+                         * SuiteSparse_long.  Otherwise all three are int. */
 
     int dtype ;		/* double or float */
 
@@ -889,47 +907,147 @@ typedef struct cholmod_common_struct
     double rowfacfl ;	    /* # of flops in last call to cholmod_rowfac */
     double aatfl ;	    /* # of flops to compute A(:,f)*A(:,f)' */
 
+    int called_nd ;	    /* TRUE if the last call to
+			     * cholmod_analyze called NESDIS or METIS. */
+    int blas_ok ;           /* FALSE if BLAS int overflow; TRUE otherwise */
+
     /* ---------------------------------------------------------------------- */
-    /* future expansion */
+    /* SuiteSparseQR control parameters: */
     /* ---------------------------------------------------------------------- */
 
-    /* To allow CHOLMOD to be updated without recompiling the user application,
-     * additional space is set aside here for future statistics, parameters,
-     * and workspace.  Note:  additional entries were added in v1.1 to the
-     * method array, above, and thus v1.0 and v1.1 are not binary compatible.
-     *
-     * v1.1 to the current version are binary compatible.
-     */
+    double SPQR_grain ;      /* task size is >= max (total flops / grain) */
+    double SPQR_small ;      /* task size is >= small */
+    int SPQR_shrink ;        /* controls stack realloc method */
+    int SPQR_nthreads ;      /* number of TBB threads, 0 = auto */
 
-    double  other1 [16] ;
-    UF_long other2 [16] ;
-    int     other3 [13] ;   /* reduced from size 16 in v1.1. */
+    /* ---------------------------------------------------------------------- */
+    /* SuiteSparseQR statistics */
+    /* ---------------------------------------------------------------------- */
 
-    int prefer_binary ;	    /* cholmod_read_triplet converts a symmetric
-			     * pattern-only matrix into a real matrix.  If
-	* prefer_binary is FALSE, the diagonal entries are set to 1 + the degree
-	* of the row/column, and off-diagonal entries are set to -1 (resulting
-	* in a positive definite matrix if the diagonal is zero-free).  Most
-	* symmetric patterns are the pattern a positive definite matrix.  If
-	* this parameter is TRUE, then the matrix is returned with a 1 in each
-	* entry, instead.  Default: FALSE.  Added in v1.3. */
+    /* was other1 [0:3] */
+    double SPQR_flopcount ;         /* flop count for SPQR */
+    double SPQR_analyze_time ;      /* analysis time in seconds for SPQR */
+    double SPQR_factorize_time ;    /* factorize time in seconds for SPQR */
+    double SPQR_solve_time ;        /* backsolve time in seconds */
 
-    /* control parameter (added for v1.2): */
-    int default_nesdis ;    /* Default: FALSE.  If FALSE, then the default
-			     * ordering strategy (when Common->nmethods == 0)
-	* is to try the given ordering (if present), AMD, and then METIS if AMD
-	* reports high fill-in.  If Common->default_nesdis is TRUE then NESDIS
-	* is used instead in the default strategy. */
+    /* was SPQR_xstat [0:3] */
+    double SPQR_flopcount_bound ;   /* upper bound on flop count */
+    double SPQR_tol_used ;          /* tolerance used */
+    double SPQR_norm_E_fro ;        /* Frobenius norm of dropped entries */
 
-    /* statistic (added for v1.2): */
-    int called_nd ;	    /* TRUE if the last call to
-			     * cholmod_analyze called NESDIS or METIS. */
+    /* was SPQR_istat [0:9] */
+    SuiteSparse_long SPQR_istat [10] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* GPU configuration and statistics */
+    /* ---------------------------------------------------------------------- */
+
+    /*  useGPU:  1 if gpu-acceleration is requested */
+    /*           0 if gpu-acceleration is prohibited */
+    /*          -1 if gpu-acceleration is undefined in which case the */
+    /*             environment CHOLMOD_USE_GPU will be queried and used. */
+    /*             useGPU=-1 is only used by CHOLMOD and treated as 0 by SPQR */
+    int useGPU;
+
+    /* for CHOLMOD: */
+    size_t maxGpuMemBytes;
+    double maxGpuMemFraction;
+
+    /* for SPQR: */
+    size_t gpuMemorySize;       /* Amount of memory in bytes on the GPU */
+    double gpuKernelTime;       /* Time taken by GPU kernels */
+    SuiteSparse_long gpuFlops;  /* Number of flops performed by the GPU */
+    int gpuNumKernelLaunches;   /* Number of GPU kernel launches */
+
+    /* If not using the GPU, these items are not used, but they should be
+       present so that the CHOLMOD Common has the same size whether the GPU
+       is used or not.  This way, all packages will agree on the size of
+       the CHOLMOD Common, regardless of whether or not they are compiled
+       with the GPU libraries or not */
+
+#ifdef GPU_BLAS
+    /* in CUDA, these three types are pointers */
+    #define CHOLMOD_CUBLAS_HANDLE cublasHandle_t
+    #define CHOLMOD_CUDASTREAM    cudaStream_t
+    #define CHOLMOD_CUDAEVENT     cudaEvent_t
+#else
+    /* ... so make them void * pointers if the GPU is not being used */
+    #define CHOLMOD_CUBLAS_HANDLE void *
+    #define CHOLMOD_CUDASTREAM    void *
+    #define CHOLMOD_CUDAEVENT     void *
+#endif
+
+    CHOLMOD_CUBLAS_HANDLE cublasHandle ;
+
+    /* a set of streams for general use */
+    CHOLMOD_CUDASTREAM    gpuStream[CHOLMOD_HOST_SUPERNODE_BUFFERS];
+
+    CHOLMOD_CUDAEVENT     cublasEventPotrf [3] ;
+    CHOLMOD_CUDAEVENT     updateCKernelsComplete;
+    CHOLMOD_CUDAEVENT     updateCBuffersFree[CHOLMOD_HOST_SUPERNODE_BUFFERS];
+
+    void *dev_mempool;    /* pointer to single allocation of device memory */
+    size_t dev_mempool_size;
+
+    void *host_pinned_mempool;  /* pointer to single allocation of pinned mem */
+    size_t host_pinned_mempool_size;
+
+    size_t devBuffSize;
+    int    ibuffer;
 
-    size_t  other4 [16] ;
-    void   *other5 [16] ;
+    double syrkStart ;          /* time syrk started */
+
+    /* run times of the different parts of CHOLMOD (GPU and CPU) */
+    double cholmod_cpu_gemm_time ;
+    double cholmod_cpu_syrk_time ;
+    double cholmod_cpu_trsm_time ;
+    double cholmod_cpu_potrf_time ;
+    double cholmod_gpu_gemm_time ;
+    double cholmod_gpu_syrk_time ;
+    double cholmod_gpu_trsm_time ;
+    double cholmod_gpu_potrf_time ;
+    double cholmod_assemble_time ;
+    double cholmod_assemble_time2 ;
+
+    /* number of times the BLAS are called on the CPU and the GPU */
+    size_t cholmod_cpu_gemm_calls ;
+    size_t cholmod_cpu_syrk_calls ;
+    size_t cholmod_cpu_trsm_calls ;
+    size_t cholmod_cpu_potrf_calls ;
+    size_t cholmod_gpu_gemm_calls ;
+    size_t cholmod_gpu_syrk_calls ;
+    size_t cholmod_gpu_trsm_calls ;
+    size_t cholmod_gpu_potrf_calls ;
 
 } cholmod_common ;
 
+/* size_t BLAS statistcs in Common: */
+#define CHOLMOD_CPU_GEMM_CALLS      cholmod_cpu_gemm_calls
+#define CHOLMOD_CPU_SYRK_CALLS      cholmod_cpu_syrk_calls
+#define CHOLMOD_CPU_TRSM_CALLS      cholmod_cpu_trsm_calls
+#define CHOLMOD_CPU_POTRF_CALLS     cholmod_cpu_potrf_calls
+#define CHOLMOD_GPU_GEMM_CALLS      cholmod_gpu_gemm_calls
+#define CHOLMOD_GPU_SYRK_CALLS      cholmod_gpu_syrk_calls
+#define CHOLMOD_GPU_TRSM_CALLS      cholmod_gpu_trsm_calls
+#define CHOLMOD_GPU_POTRF_CALLS     cholmod_gpu_potrf_calls
+
+/* double BLAS statistics in Common: */
+#define CHOLMOD_CPU_GEMM_TIME       cholmod_cpu_gemm_time
+#define CHOLMOD_CPU_SYRK_TIME       cholmod_cpu_syrk_time
+#define CHOLMOD_CPU_TRSM_TIME       cholmod_cpu_trsm_time
+#define CHOLMOD_CPU_POTRF_TIME      cholmod_cpu_potrf_time
+#define CHOLMOD_GPU_GEMM_TIME       cholmod_gpu_gemm_time
+#define CHOLMOD_GPU_SYRK_TIME       cholmod_gpu_syrk_time
+#define CHOLMOD_GPU_TRSM_TIME       cholmod_gpu_trsm_time
+#define CHOLMOD_GPU_POTRF_TIME      cholmod_gpu_potrf_time
+#define CHOLMOD_ASSEMBLE_TIME       cholmod_assemble_time
+#define CHOLMOD_ASSEMBLE_TIME2      cholmod_assemble_time2
+
+/* for supernodal analysis */
+#define CHOLMOD_ANALYZE_FOR_SPQR     0
+#define CHOLMOD_ANALYZE_FOR_CHOLESKY 1
+#define CHOLMOD_ANALYZE_FOR_SPQRGPU  2
+
 /* -------------------------------------------------------------------------- */
 /* cholmod_start:  first call to CHOLMOD */
 /* -------------------------------------------------------------------------- */
@@ -1019,12 +1137,12 @@ int cholmod_l_free_work (cholmod_common *) ;
     } \
 }
 
-UF_long cholmod_clear_flag
+SuiteSparse_long cholmod_clear_flag
 (
     cholmod_common *Common
 ) ;
 
-UF_long cholmod_l_clear_flag (cholmod_common *) ;
+SuiteSparse_long cholmod_l_clear_flag (cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_error:  called when CHOLMOD encounters an error */
@@ -1034,14 +1152,14 @@ int cholmod_error
 (
     /* ---- input ---- */
     int status,		/* error status */
-    char *file,		/* name of source code file where error occured */
+    const char *file,	/* name of source code file where error occured */
     int line,		/* line number in source code file where error occured*/
-    char *message,	/* error message */
+    const char *message,/* error message */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-int cholmod_l_error (int, char *, int, char *, cholmod_common *) ;
+int cholmod_l_error (int, const char *, int, const char *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_dbound:  for internal use in CHOLMOD only */
@@ -1097,7 +1215,7 @@ typedef struct cholmod_sparse_struct
     size_t ncol ;
     size_t nzmax ;	/* maximum number of entries in the matrix */
 
-    /* pointers to int or UF_long: */
+    /* pointers to int or SuiteSparse_long: */
     void *p ;		/* p [0..ncol], the column pointers */
     void *i ;		/* i [0..nzmax-1], the row indices */
 
@@ -1130,8 +1248,9 @@ typedef struct cholmod_sparse_struct
 	*/
 
     int itype ;		/* CHOLMOD_INT:     p, i, and nz are int.
-			 * CHOLMOD_INTLONG: p is UF_long, i and nz are int.
-			 * CHOLMOD_LONG:    p, i, and nz are UF_long.  */
+			 * CHOLMOD_INTLONG: p is SuiteSparse_long,
+                         *                  i and nz are int.
+			 * CHOLMOD_LONG:    p, i, and nz are SuiteSparse_long */
 
     int xtype ;		/* pattern, real, complex, or zomplex */
     int dtype ;		/* x and z are double or float */
@@ -1141,6 +1260,18 @@ typedef struct cholmod_sparse_struct
 
 } cholmod_sparse ;
 
+typedef struct cholmod_descendant_score_t {
+  double score;
+  SuiteSparse_long d;
+} descendantScore;
+
+/* For sorting descendant supernodes with qsort */
+int cholmod_score_comp (struct cholmod_descendant_score_t *i,
+			       struct cholmod_descendant_score_t *j);
+
+int cholmod_l_score_comp (struct cholmod_descendant_score_t *i,
+			       struct cholmod_descendant_score_t *j);
+
 /* -------------------------------------------------------------------------- */
 /* cholmod_allocate_sparse:  allocate a sparse matrix */
 /* -------------------------------------------------------------------------- */
@@ -1196,7 +1327,7 @@ int cholmod_l_reallocate_sparse ( size_t, cholmod_sparse *, cholmod_common *) ;
 /* cholmod_nnz:  return number of nonzeros in a sparse matrix */
 /* -------------------------------------------------------------------------- */
 
-UF_long cholmod_nnz
+SuiteSparse_long cholmod_nnz
 (
     /* ---- input ---- */
     cholmod_sparse *A,
@@ -1204,7 +1335,7 @@ UF_long cholmod_nnz
     cholmod_common *Common
 ) ;
 
-UF_long cholmod_l_nnz (cholmod_sparse *, cholmod_common *) ;
+SuiteSparse_long cholmod_l_nnz (cholmod_sparse *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_speye:  sparse identity matrix */
@@ -1281,8 +1412,8 @@ int cholmod_transpose_unsym
     cholmod_common *Common
 ) ;
 
-int cholmod_l_transpose_unsym (cholmod_sparse *, int, UF_long *, UF_long *,
-    size_t, cholmod_sparse *, cholmod_common *) ;
+int cholmod_l_transpose_unsym (cholmod_sparse *, int, SuiteSparse_long *,
+    SuiteSparse_long *, size_t, cholmod_sparse *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_transpose_sym:  transpose a symmetric sparse matrix */
@@ -1303,8 +1434,8 @@ int cholmod_transpose_sym
     cholmod_common *Common
 ) ;
 
-int cholmod_l_transpose_sym (cholmod_sparse *, int, UF_long *, cholmod_sparse *,
-    cholmod_common *) ;
+int cholmod_l_transpose_sym (cholmod_sparse *, int, SuiteSparse_long *,
+    cholmod_sparse *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_ptranspose:  transpose a sparse matrix */
@@ -1325,8 +1456,8 @@ cholmod_sparse *cholmod_ptranspose
     cholmod_common *Common
 ) ;
 
-cholmod_sparse *cholmod_l_ptranspose (cholmod_sparse *, int, UF_long *,
-    UF_long *, size_t, cholmod_common *) ;
+cholmod_sparse *cholmod_l_ptranspose (cholmod_sparse *, int, SuiteSparse_long *,
+    SuiteSparse_long *, size_t, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_sort:  sort row indices in each column of sparse matrix */
@@ -1350,15 +1481,15 @@ cholmod_sparse *cholmod_band
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to extract band matrix from */
-    UF_long k1,		/* ignore entries below the k1-st diagonal */
-    UF_long k2,		/* ignore entries above the k2-nd diagonal */
+    SuiteSparse_long k1,    /* ignore entries below the k1-st diagonal */
+    SuiteSparse_long k2,    /* ignore entries above the k2-nd diagonal */
     int mode,		/* >0: numerical, 0: pattern, <0: pattern (no diag) */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-cholmod_sparse *cholmod_l_band (cholmod_sparse *, UF_long, UF_long, int,
-    cholmod_common *) ;
+cholmod_sparse *cholmod_l_band (cholmod_sparse *, SuiteSparse_long,
+    SuiteSparse_long, int, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_band_inplace:  A = tril (triu (A,k1), k2) */
@@ -1367,8 +1498,8 @@ cholmod_sparse *cholmod_l_band (cholmod_sparse *, UF_long, UF_long, int,
 int cholmod_band_inplace
 (
     /* ---- input ---- */
-    UF_long k1,		/* ignore entries below the k1-st diagonal */
-    UF_long k2,		/* ignore entries above the k2-nd diagonal */
+    SuiteSparse_long k1,    /* ignore entries below the k1-st diagonal */
+    SuiteSparse_long k2,    /* ignore entries above the k2-nd diagonal */
     int mode,		/* >0: numerical, 0: pattern, <0: pattern (no diag) */
     /* ---- in/out --- */
     cholmod_sparse *A,	/* matrix from which entries not in band are removed */
@@ -1376,8 +1507,8 @@ int cholmod_band_inplace
     cholmod_common *Common
 ) ;
 
-int cholmod_l_band_inplace (UF_long, UF_long, int, cholmod_sparse *,
-    cholmod_common *) ;
+int cholmod_l_band_inplace (SuiteSparse_long, SuiteSparse_long, int,
+    cholmod_sparse *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_aat:  C = A*A' or A(:,f)*A(:,f)' */
@@ -1396,8 +1527,8 @@ cholmod_sparse *cholmod_aat
     cholmod_common *Common
 ) ;
 
-cholmod_sparse *cholmod_l_aat (cholmod_sparse *, UF_long *, size_t, int,
-    cholmod_common *) ;
+cholmod_sparse *cholmod_l_aat (cholmod_sparse *, SuiteSparse_long *, size_t,
+    int, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_copy_sparse:  C = A, create an exact copy of a sparse matrix */
@@ -1417,7 +1548,7 @@ cholmod_sparse *cholmod_l_copy_sparse (cholmod_sparse *, cholmod_common *) ;
 /* cholmod_copy:  C = A, with possible change of stype */
 /* -------------------------------------------------------------------------- */
 
-cholmod_sparse *cholmod_copy 
+cholmod_sparse *cholmod_copy
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to copy */
@@ -1493,6 +1624,9 @@ typedef struct cholmod_factor_struct
     void *Perm ;	/* size n, permutation used */
     void *ColCount ;	/* size n, column counts for simplicial L */
 
+    void *IPerm ;       /* size n, inverse permutation.  Only created by
+                         * cholmod_solve2 if Bset is used. */
+
     /* ---------------------------------------------------------------------- */
     /* simplicial factorization */
     /* ---------------------------------------------------------------------- */
@@ -1584,13 +1718,16 @@ typedef struct cholmod_factor_struct
      *	    except for the numerical values (x and z).
      */
 
-    int itype ;		/* The integer arrays are Perm, ColCount, p, i, nz,
-			 * next, prev, super, pi, px, and s.  If itype is
-			 * CHOLMOD_INT, all of these are int arrays.
-			 * CHOLMOD_INTLONG: p, pi, px are UF_long, others int.
-			 * CHOLMOD_LONG:    all integer arrays are UF_long. */
-    int xtype ;		/* pattern, real, complex, or zomplex */
-    int dtype ;		/* x and z double or float */
+    int itype ; /* The integer arrays are Perm, ColCount, p, i, nz,
+                 * next, prev, super, pi, px, and s.  If itype is
+		 * CHOLMOD_INT, all of these are int arrays.
+		 * CHOLMOD_INTLONG: p, pi, px are SuiteSparse_long, others int.
+		 * CHOLMOD_LONG:    all integer arrays are SuiteSparse_long. */
+    int xtype ; /* pattern, real, complex, or zomplex */
+    int dtype ; /* x and z double or float */
+
+    int useGPU; /* Indicates the symbolic factorization supports
+		 * GPU acceleration */
 
 } cholmod_factor ;
 
@@ -1846,6 +1983,26 @@ int cholmod_free_dense
 int cholmod_l_free_dense (cholmod_dense **, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
+/* cholmod_ensure_dense:  ensure a dense matrix has a given size and type */
+/* -------------------------------------------------------------------------- */
+
+cholmod_dense *cholmod_ensure_dense
+(
+    /* ---- input/output ---- */
+    cholmod_dense **XHandle,    /* matrix handle to check */
+    /* ---- input ---- */
+    size_t nrow,	/* # of rows of matrix */
+    size_t ncol,	/* # of columns of matrix */
+    size_t d,		/* leading dimension */
+    int xtype,		/* CHOLMOD_REAL, _COMPLEX, or _ZOMPLEX */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+cholmod_dense *cholmod_l_ensure_dense (cholmod_dense **, size_t, size_t, size_t,
+    int, cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
 /* cholmod_sparse_to_dense:  create a dense matrix copy of a sparse matrix */
 /* -------------------------------------------------------------------------- */
 
@@ -1986,9 +2143,9 @@ typedef struct cholmod_triplet_struct
 	* no entry in a triplet matrix is ever ignored.
 	*/
 
-    int itype ;		/* CHOLMOD_LONG: i and j are UF_long.  Otherwise int. */
-    int xtype ;		/* pattern, real, complex, or zomplex */
-    int dtype ;		/* x and z are double or float */
+    int itype ; /* CHOLMOD_LONG: i and j are SuiteSparse_long.  Otherwise int */
+    int xtype ; /* pattern, real, complex, or zomplex */
+    int dtype ; /* x and z are double or float */
 
 } cholmod_triplet ;
 
@@ -2176,13 +2333,13 @@ int cholmod_realloc_multiple
 (
     /* ---- input ---- */
     size_t nnew,	/* requested # of items in reallocated blocks */
-    int nint,		/* number of int/UF_long blocks */
+    int nint,		/* number of int/SuiteSparse_long blocks */
     int xtype,		/* CHOLMOD_PATTERN, _REAL, _COMPLEX, or _ZOMPLEX */
     /* ---- in/out --- */
-    void **I,		/* int or UF_long block */
-    void **J,		/* int or UF_long block */
-    void **X,		/* complex, double, or float block */
-    void **Z,		/* zomplex case only: double or float block */
+    void **Iblock,	/* int or SuiteSparse_long block */
+    void **Jblock,	/* int or SuiteSparse_long block */
+    void **Xblock,	/* complex, double, or float block */
+    void **Zblock,	/* zomplex case only: double or float block */
     size_t *n,		/* current size of the I,J,X,Z blocks on input,
 			 * nnew on output if successful */
     /* --------------- */
@@ -2193,6 +2350,31 @@ int cholmod_l_realloc_multiple (size_t, int, int, void **, void **, void **,
     void **, size_t *, cholmod_common *) ;
 
 /* ========================================================================== */
+/* === version control ====================================================== */
+/* ========================================================================== */
+
+int cholmod_version     /* returns CHOLMOD_VERSION */
+(
+    /* output, contents not defined on input.  Not used if NULL.
+        version [0] = CHOLMOD_MAIN_VERSION
+        version [1] = CHOLMOD_SUB_VERSION
+        version [2] = CHOLMOD_SUBSUB_VERSION
+    */
+    int version [3]
+) ;
+
+int cholmod_l_version (int version [3]) ;
+
+/* Versions prior to 2.1.1 do not have the above function.  The following
+   code fragment will work with any version of CHOLMOD:
+   #ifdef CHOLMOD_HAS_VERSION_FUNCTION
+   v = cholmod_version (NULL) ;
+   #else
+   v = CHOLMOD_VERSION ;
+   #endif
+*/
+
+/* ========================================================================== */
 /* === symmetry types ======================================================= */
 /* ========================================================================== */
 
diff --git a/CHOLMOD/Include/cholmod_function.h b/CHOLMOD/Include/cholmod_function.h
new file mode 100644
index 0000000..aec275e
--- /dev/null
+++ b/CHOLMOD/Include/cholmod_function.h
@@ -0,0 +1,155 @@
+/* ========================================================================== */
+/* === CHOLMOD/Include/cholmod_function.h ================================ */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/Include/cholmod_function.h
+ * Copyright (C) 2014, Timothy A. Davis
+ * This specific file (CHOLMOD/Include/cholmod_function.h) has no license
+ * restrictions at all.  You may freely include this in your applications, and
+ * modify it at will.
+ * -------------------------------------------------------------------------- */
+
+/* Memory management, printing, and math function pointers were removed from
+   the CHOLMOD Common struct as of version 2.2.0 and later.  They now appear in
+   SuiteSparse_config.h instead.  This file assists in backward compatibility,
+   so that you can use either old or new versions of CHOLMOD and SuiteSparse in
+   an application that uses the function pointers.  You can copy the file into
+   your own application that uses older versions of CHOLMOD, or the current
+   version, so that you have a transparent method for setting these function
+   pointers for any version of CHOLMOD and SuiteSparse.
+
+   In both old and new versions of CHOLMOD (and SuiteSparse), the intent of
+   these function pointers is that they are not to be called directly.
+   Instead, you should use (for example), the cholmod_malloc function.  That
+   function is a wrapper that then uses the cc->malloc_memory or
+   SuiteSparse_config.malloc_func function pointers.
+
+   In each of the macros below, 'cc' is a pointer to the CHOLMOD Common struct. 
+
+   Usage:  to assign, say, 'malloc' as your memory allocator, use this:
+
+        #include "cholmod_function.h"
+        ...
+        cholmod_common *cc, Common ;
+        cc = &Common ;
+        cholmod_start (cc) ;
+        ...
+        CHOLMOD_FUNCTION_DEFAULTS ;
+        CHOLMOD_FUNCTION_MALLOC (cc) = mymalloc ;
+
+    instead of this, in older versions of CHOLMOD:
+
+        cc->malloc_memory = mymalloc ;
+
+    or in newer versions of CHOLMOD:
+
+        SuiteSparse_config.malloc_func = mymalloc ;
+*/
+
+#ifndef CHOLMOD_FUNCTION_H
+#define CHOLMOD_FUNCTION_H
+
+#include "cholmod.h"
+
+/* -------------------------------------------------------------------------- */
+/* location of function pointers, depending on the CHOLMOD version */
+/* -------------------------------------------------------------------------- */
+
+#if (CHOLMOD_VERSION < (CHOLMOD_VER_CODE(2,2)))
+
+    #define CHOLMOD_FUNCTION_MALLOC(cc)     cc->malloc_memory
+    #define CHOLMOD_FUNCTION_REALLOC(cc)    cc->realloc_memory
+    #define CHOLMOD_FUNCTION_FREE(cc)       cc->free_memory
+    #define CHOLMOD_FUNCTION_CALLOC(cc)     cc->calloc_memory
+    #define CHOLMOD_FUNCTION_PRINTF(cc)     cc->print_function
+    #define CHOLMOD_FUNCTION_DIVCOMPLEX(cc) cc->complex_divide
+    #define CHOLMOD_FUNCTION_HYPOTENUSE(cc) cc->hypotenuse
+
+#else
+
+    #include "SuiteSparse_config.h"
+    #define CHOLMOD_FUNCTION_MALLOC(cc)     SuiteSparse_config.malloc_func
+    #define CHOLMOD_FUNCTION_REALLOC(cc)    SuiteSparse_config.realloc_func
+    #define CHOLMOD_FUNCTION_FREE(cc)       SuiteSparse_config.free_func
+    #define CHOLMOD_FUNCTION_CALLOC(cc)     SuiteSparse_config.calloc_func
+    #define CHOLMOD_FUNCTION_PRINTF(cc)     SuiteSparse_config.printf_func
+    #define CHOLMOD_FUNCTION_DIVCOMPLEX(cc) SuiteSparse_config.divcomplex_func
+    #define CHOLMOD_FUNCTION_HYPOTENUSE(cc) SuiteSparse_config.hypot_func
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* default math functions, depending on the CHOLMOD version */
+/* -------------------------------------------------------------------------- */
+
+#if (CHOLMOD_VERSION < (CHOLMOD_VER_CODE(2,2)))
+
+    #define CHOLMOD_FUNCTION_DEFAULT_DIVCOMPLEX cholmod_l_divcomplex
+    #define CHOLMOD_FUNCTION_DEFAULT_HYPOTENUSE cholmod_l_hypot
+
+#else
+
+    #define CHOLMOD_FUNCTION_DEFAULT_DIVCOMPLEX SuiteSparse_divcomplex
+    #define CHOLMOD_FUNCTION_DEFAULT_HYPOTENUSE SuiteSparse_hypot
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* default memory manager functions */
+/* -------------------------------------------------------------------------- */
+
+#ifndef NMALLOC
+    #ifdef MATLAB_MEX_FILE
+        /* MATLAB mexFunction */
+        #define CHOLMOD_FUNCTION_DEFAULT_MALLOC  mxMalloc
+        #define CHOLMOD_FUNCTION_DEFAULT_CALLOC  mxCalloc
+        #define CHOLMOD_FUNCTION_DEFAULT_REALLOC mxRealloc
+        #define CHOLMOD_FUNCTION_DEFAULT_FREE    mxFree
+    #else
+        /* standard ANSI C */
+        #define CHOLMOD_FUNCTION_DEFAULT_MALLOC  malloc
+        #define CHOLMOD_FUNCTION_DEFAULT_CALLOC  calloc
+        #define CHOLMOD_FUNCTION_DEFAULT_REALLOC realloc
+        #define CHOLMOD_FUNCTION_DEFAULT_FREE    free
+    #endif
+#else
+    /* no memory manager defined at compile time */
+    #define CHOLMOD_FUNCTION_DEFAULT_MALLOC  NULL
+    #define CHOLMOD_FUNCTION_DEFAULT_CALLOC  NULL
+    #define CHOLMOD_FUNCTION_DEFAULT_REALLOC NULL
+    #define CHOLMOD_FUNCTION_DEFAULT_FREE    NULL
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* default printf function */
+/* -------------------------------------------------------------------------- */
+
+#ifdef MATLAB_MEX_FILE
+    #define CHOLMOD_FUNCTION_DEFAULT_PRINTF mexPrintf
+#else
+    #define CHOLMOD_FUNCTION_DEFAULT_PRINTF printf
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* set all the defaults */
+/* -------------------------------------------------------------------------- */
+
+/* Use this macro to initialize all the function pointers to their defaults 
+   for any version of CHOLMOD.  For CHOLMD 2.2.0 and later, it sets function
+   pointers in the SuiteSparse_config struct.  For older versions, it sets
+   function pointers in the CHOLMOD Common.  This assignment is not
+   thread-safe, and should be done before launching any threads. */
+
+#define CHOLMOD_FUNCTION_DEFAULTS \
+{ \
+    CHOLMOD_FUNCTION_MALLOC (cc)     = CHOLMOD_FUNCTION_DEFAULT_MALLOC ; \
+    CHOLMOD_FUNCTION_REALLOC (cc)    = CHOLMOD_FUNCTION_DEFAULT_REALLOC ; \
+    CHOLMOD_FUNCTION_FREE (cc)       = CHOLMOD_FUNCTION_DEFAULT_FREE ; \
+    CHOLMOD_FUNCTION_CALLOC (cc)     = CHOLMOD_FUNCTION_DEFAULT_CALLOC ; \
+    CHOLMOD_FUNCTION_PRINTF (cc)     = CHOLMOD_FUNCTION_DEFAULT_PRINTF ; \
+    CHOLMOD_FUNCTION_DIVCOMPLEX (cc) = CHOLMOD_FUNCTION_DEFAULT_DIVCOMPLEX ; \
+    CHOLMOD_FUNCTION_HYPOTENUSE (cc) = CHOLMOD_FUNCTION_DEFAULT_HYPOTENUSE ; \
+}
+
+#endif
diff --git a/CHOLMOD/Include/cholmod_gpu.h b/CHOLMOD/Include/cholmod_gpu.h
new file mode 100644
index 0000000..d34f174
--- /dev/null
+++ b/CHOLMOD/Include/cholmod_gpu.h
@@ -0,0 +1,80 @@
+/* ========================================================================== */
+/* === Include/cholmod_gpu.h ================================================ */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/Include/cholmod_gpu.h.
+ * Copyright (C) 2014, Timothy A. Davis
+ * CHOLMOD/Include/cholmod_gpu.h and the CHOLMOD GPU Module are licensed under
+ * Version 2.0 of the GNU General Public License.  See gpl.txt for a text of
+ * the license.  CHOLMOD is also available under other licenses; contact
+ * authors for details.
+ * http://www.suitesparse.com
+ * -------------------------------------------------------------------------- */
+
+/* CHOLMOD GPU module
+ */
+
+#ifndef CHOLMOD_GPU_H
+#define CHOLMOD_GPU_H
+
+#ifdef GPU_BLAS
+#include "omp.h"
+#include <fenv.h>
+#endif
+
+/* CHOLMOD_GPU_PRINTF: for printing GPU debug error messages */
+/*
+#define CHOLMOD_GPU_PRINTF(args) printf args
+*/
+#define CHOLMOD_GPU_PRINTF(args)
+
+/* define supernode requirements for processing on GPU */
+#define CHOLMOD_ND_ROW_LIMIT 256 /* required descendant rows */
+#define CHOLMOD_ND_COL_LIMIT 32  /* required descendnat cols */
+#define CHOLMOD_POTRF_LIMIT  512  /* required cols for POTRF & TRSM on GPU */
+
+/* # of host supernodes to perform before checking for free pinned buffers */
+#define CHOLMOD_GPU_SKIP     3    
+
+#define CHOLMOD_HANDLE_CUDA_ERROR(e,s) {if (e) {ERROR(CHOLMOD_GPU_PROBLEM,s);}}
+
+typedef struct cholmod_gpu_pointers
+{
+    double *h_Lx [CHOLMOD_HOST_SUPERNODE_BUFFERS] ;
+    double *d_Lx [CHOLMOD_DEVICE_STREAMS] ;
+    double *d_C ;
+    double *d_A [CHOLMOD_DEVICE_STREAMS] ;
+    void   *d_Ls ;
+    void   *d_Map ;
+    void   *d_RelativeMap ;
+
+} cholmod_gpu_pointers ;
+
+int cholmod_gpu_memorysize   /* GPU memory size available, 1 if no GPU */
+(
+    size_t         *total_mem,
+    size_t         *available_mem,
+    cholmod_common *Common
+) ;
+
+int cholmod_l_gpu_memorysize /* GPU memory size available, 1 if no GPU */
+(
+    size_t         *total_mem,
+    size_t         *available_mem,
+    cholmod_common *Common
+) ;
+ 
+int cholmod_gpu_probe   ( cholmod_common *Common ) ;
+int cholmod_l_gpu_probe ( cholmod_common *Common ) ;
+
+int cholmod_gpu_deallocate   ( cholmod_common *Common ) ;
+int cholmod_l_gpu_deallocate ( cholmod_common *Common ) ;
+
+void cholmod_gpu_end   ( cholmod_common *Common ) ;
+void cholmod_l_gpu_end ( cholmod_common *Common ) ;
+
+int cholmod_gpu_allocate   ( cholmod_common *Common ) ;
+int cholmod_l_gpu_allocate ( cholmod_common *Common ) ;
+
+#endif
diff --git a/CHOLMOD/Include/cholmod_gpu_kernels.h b/CHOLMOD/Include/cholmod_gpu_kernels.h
new file mode 100644
index 0000000..9fa3d47
--- /dev/null
+++ b/CHOLMOD/Include/cholmod_gpu_kernels.h
@@ -0,0 +1,50 @@
+/* ========================================================================== */
+/* === Include/cholmod_gpu_kernels.h ======================================== */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/Include/cholmod_gpu_kernels.h.
+ * Copyright (C) 2014, Timothy A. Davis
+ * CHOLMOD/Include/cholmod_gpu.h and the CHOLMOD GPU Module are licensed under
+ * Version 2.0 of the GNU General Public License.  See gpl.txt for a text of
+ * the license.  CHOLMOD is also available under other licenses; contact
+ * authors for details.
+ * http://www.suitesparse.com
+ * -------------------------------------------------------------------------- */
+
+/* -----------------------------------------------------------------------------
+ * CUDA kernel support routines for CHOLMOD
+ * -------------------------------------------------------------------------- */
+
+#ifndef CHOLMODGPUKERNELS_H
+#define CHOLMODGPUKERNELS_H
+
+/* make it easy for C++ programs to include CHOLMOD */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "SuiteSparse_config.h"
+
+int createMapOnDevice ( Int *d_Map, Int *d_Ls, Int psi, Int nsrow ); 
+
+int createRelativeMapOnDevice ( Int *d_Map, Int *d_Ls, Int *d_RelativeMap,
+                           Int pdi1, Int ndrow, cudaStream_t astream ); 
+
+int addUpateOnDevice ( double *d_A, double *devPtrC, Int *d_RelativeMap,
+    Int ndrow1, Int ndrow2, Int nsrow, cudaStream_t astream );
+
+int addComplexUpateOnDevice ( double *d_A, double *devPtrC, Int *d_RelativeMap,
+    Int ndrow1, Int ndrow2, Int nsrow, cudaStream_t astream );
+
+int sumAOnDevice ( double *a1, double *a2, const double alpha, int nsrow,
+    int nscol );
+
+int sumComplexAOnDevice ( double *a1, double *a2, const double alpha,
+    int nsrow, int nscol );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/CHOLMOD/Include/cholmod_internal.h b/CHOLMOD/Include/cholmod_internal.h
index 383eecb..0cef5f9 100644
--- a/CHOLMOD/Include/cholmod_internal.h
+++ b/CHOLMOD/Include/cholmod_internal.h
@@ -4,11 +4,10 @@
 
 /* -----------------------------------------------------------------------------
  * CHOLMOD/Include/cholmod_internal.h.
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
  * CHOLMOD/Include/cholmod_internal.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD internal include file.
@@ -155,14 +154,14 @@
 #define HUGE_DOUBLE 1e308
 
 /* ========================================================================== */
-/* === int/UF_long and double/float definitions ============================= */
+/* === int/long and double/float definitions ================================ */
 /* ========================================================================== */
 
 /* CHOLMOD is designed for 3 types of integer variables:
  *
  *	(1) all integers are int
- *	(2) most integers are int, some are UF_long
- *	(3) all integers are UF_long
+ *	(2) most integers are int, some are SuiteSparse_long
+ *	(3) all integers are SuiteSparse_long
  *
  * and two kinds of floating-point values:
  *
@@ -177,17 +176,17 @@
  * first two are currently supported):
  *
  *	DINT	double, int			prefix: cholmod_
- *	DLONG	double, UF_long			prefix: cholmod_l_
- *	DMIX	double, mixed int/UF_long	prefix: cholmod_m_
+ *	DLONG	double, SuiteSparse_long	prefix: cholmod_l_
+ *	DMIX	double, mixed int/SuiteSparse_long	prefix: cholmod_m_
  *	SINT	float, int			prefix: cholmod_si_
- *	SLONG	float, UF_long			prefix: cholmod_sl_
+ *	SLONG	float, SuiteSparse_long		prefix: cholmod_sl_
  *	SMIX	float, mixed int/log		prefix: cholmod_sm_
  *
  * These are selected with compile time flags (-DDLONG, for example).  If no
  * flag is selected, the default is DINT.
  *
  * All six versions use the same include files.  The user-visible include files
- * are completely independent of which int/UF_long/double/float version is being
+ * are completely independent of which int/long/double/float version is being
  * used.  The integer / real types in all data structures (sparse, triplet,
  * dense, common, and triplet) are defined at run-time, not compile-time, so
  * there is only one "cholmod_sparse" data type.  Void pointers are used inside
@@ -195,13 +194,14 @@
  * structure has an itype and dtype field which determines the kind of basic
  * types used.  These are defined in Include/cholmod_core.h.
  *
- * FUTURE WORK: support all six types (float, and mixed int/UF_long)
+ * FUTURE WORK: support all six types (float, and mixed int/long)
  *
- * UF_long is normally defined as long.  However, for WIN64 it is __int64.
- * It can also be redefined for other platforms, by modifying UFconfig.h.
+ * SuiteSparse_long is normally defined as long.  However, for WIN64 it is
+ * __int64.  It can also be redefined for other platforms, by modifying
+ * SuiteSparse_config.h.
  */
 
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
 /* -------------------------------------------------------------------------- */
 /* Size_max: the largest value of size_t */
@@ -216,47 +216,19 @@ size_t cholmod_l_add_size_t (size_t a, size_t b, int *ok) ;
 size_t cholmod_l_mult_size_t (size_t a, size_t k, int *ok) ;
 
 /* -------------------------------------------------------------------------- */
-/* double (also complex double), UF_long */
+/* double (also complex double), SuiteSparse_long */
 /* -------------------------------------------------------------------------- */
 
 #ifdef DLONG
 #define Real double
-#define Int UF_long
-#define Int_max UF_long_max
+#define Int SuiteSparse_long
+#define Int_max SuiteSparse_long_max
 #define CHOLMOD(name) cholmod_l_ ## name
 #define LONG
 #define DOUBLE
 #define ITYPE CHOLMOD_LONG
 #define DTYPE CHOLMOD_DOUBLE
-#define ID UF_long_id
-
-/* -------------------------------------------------------------------------- */
-/* double, int/UF_long */
-/* -------------------------------------------------------------------------- */
-
-#elif defined (DMIX)
-#error "mixed int/UF_long not yet supported"
-
-/* -------------------------------------------------------------------------- */
-/* single, int */
-/* -------------------------------------------------------------------------- */
-
-#elif defined (SINT)
-#error "single-precision not yet supported"
-
-/* -------------------------------------------------------------------------- */
-/* single, UF_long */
-/* -------------------------------------------------------------------------- */
-
-#elif defined (SLONG)
-#error "single-precision not yet supported"
-
-/* -------------------------------------------------------------------------- */
-/* single, int/UF_long */
-/* -------------------------------------------------------------------------- */
-
-#elif defined (SMIX)
-#error "single-precision not yet supported"
+#define ID SuiteSparse_long_id
 
 /* -------------------------------------------------------------------------- */
 /* double (also complex double), int: this is the default */
@@ -278,6 +250,9 @@ size_t cholmod_l_mult_size_t (size_t a, size_t k, int *ok) ;
 #define DTYPE CHOLMOD_DOUBLE
 #define ID "%d"
 
+/* GPU acceleration is not available for the int version of CHOLMOD */
+#undef GPU_BLAS
+
 #endif
 
 
@@ -291,6 +266,7 @@ size_t cholmod_l_mult_size_t (size_t a, size_t k, int *ok) ;
 /* === Architecture and BLAS ================================================ */
 /* ========================================================================== */
 
+#define BLAS_OK Common->blas_ok
 #include "cholmod_blas.h"
 
 /* ========================================================================== */
@@ -315,52 +291,59 @@ size_t cholmod_l_mult_size_t (size_t a, size_t k, int *ok) ;
 /* double, int */
 EXTERN int cholmod_dump ;
 EXTERN int cholmod_dump_malloc ;
-UF_long cholmod_dump_sparse (cholmod_sparse  *, char *, cholmod_common *) ;
-int  cholmod_dump_factor (cholmod_factor  *, char *, cholmod_common *) ;
-int  cholmod_dump_triplet (cholmod_triplet *, char *, cholmod_common *) ;
-int  cholmod_dump_dense (cholmod_dense   *, char *, cholmod_common *) ;
-int  cholmod_dump_subset (int *, size_t, size_t, char *, cholmod_common *) ;
-int  cholmod_dump_perm (int *, size_t, size_t, char *, cholmod_common *) ;
-int  cholmod_dump_parent (int *, size_t, char *, cholmod_common *) ;
-void cholmod_dump_init (char *, cholmod_common *) ;
-int  cholmod_dump_mem (char *, UF_long, cholmod_common *) ;
-void cholmod_dump_real (char *, Real *, UF_long, UF_long, int, int,
-	cholmod_common *) ;
-void cholmod_dump_super (UF_long, int *, int *, int *, int *, double *, int,
-	cholmod_common *) ;
-int  cholmod_dump_partition (UF_long, int *, int *, int *, int *, UF_long,
-	cholmod_common *) ;
-int  cholmod_dump_work(int, int, UF_long, cholmod_common *) ;
-
-/* double, UF_long */
+SuiteSparse_long cholmod_dump_sparse (cholmod_sparse  *, const char *,
+    cholmod_common *) ;
+int  cholmod_dump_factor (cholmod_factor  *, const char *, cholmod_common *) ;
+int  cholmod_dump_triplet (cholmod_triplet *, const char *, cholmod_common *) ;
+int  cholmod_dump_dense (cholmod_dense   *, const char *, cholmod_common *) ;
+int  cholmod_dump_subset (int *, size_t, size_t, const char *,
+    cholmod_common *) ;
+int  cholmod_dump_perm (int *, size_t, size_t, const char *, cholmod_common *) ;
+int  cholmod_dump_parent (int *, size_t, const char *, cholmod_common *) ;
+void cholmod_dump_init (const char *, cholmod_common *) ;
+int  cholmod_dump_mem (const char *, SuiteSparse_long, cholmod_common *) ;
+void cholmod_dump_real (const char *, Real *, SuiteSparse_long,
+    SuiteSparse_long, int, int, cholmod_common *) ;
+void cholmod_dump_super (SuiteSparse_long, int *, int *, int *, int *, double *,
+    int, cholmod_common *) ;
+int  cholmod_dump_partition (SuiteSparse_long, int *, int *, int *, int *,
+    SuiteSparse_long, cholmod_common *) ;
+int  cholmod_dump_work(int, int, SuiteSparse_long, cholmod_common *) ;
+
+/* double, SuiteSparse_long */
 EXTERN int cholmod_l_dump ;
 EXTERN int cholmod_l_dump_malloc ;
-UF_long cholmod_l_dump_sparse (cholmod_sparse  *, char *, cholmod_common *) ;
-int  cholmod_l_dump_factor (cholmod_factor  *, char *, cholmod_common *) ;
-int  cholmod_l_dump_triplet (cholmod_triplet *, char *, cholmod_common *) ;
-int  cholmod_l_dump_dense (cholmod_dense   *, char *, cholmod_common *) ;
-int  cholmod_l_dump_subset (UF_long *, size_t, size_t, char *,
+SuiteSparse_long cholmod_l_dump_sparse (cholmod_sparse  *, const char *,
+    cholmod_common *) ;
+int  cholmod_l_dump_factor (cholmod_factor  *, const char *, cholmod_common *) ;
+int  cholmod_l_dump_triplet (cholmod_triplet *, const char *, cholmod_common *);
+int  cholmod_l_dump_dense (cholmod_dense   *, const char *, cholmod_common *) ;
+int  cholmod_l_dump_subset (SuiteSparse_long *, size_t, size_t, const char *,
+    cholmod_common *) ;
+int  cholmod_l_dump_perm (SuiteSparse_long *, size_t, size_t, const char *,
+    cholmod_common *) ;
+int  cholmod_l_dump_parent (SuiteSparse_long *, size_t, const char *,
     cholmod_common *) ;
-int  cholmod_l_dump_perm (UF_long *, size_t, size_t, char *, cholmod_common *) ;
-int  cholmod_l_dump_parent (UF_long *, size_t, char *, cholmod_common *) ;
-void cholmod_l_dump_init (char *, cholmod_common *) ;
-int  cholmod_l_dump_mem (char *, UF_long, cholmod_common *) ;
-void cholmod_l_dump_real (char *, Real *, UF_long, UF_long, int, int,
-	cholmod_common *) ;
-void cholmod_l_dump_super (UF_long, UF_long *, UF_long *, UF_long *, UF_long *,
-        double *, int, cholmod_common *) ;
-int  cholmod_l_dump_partition (UF_long, UF_long *, UF_long *, UF_long *,
-	UF_long *, UF_long, cholmod_common *) ;
-int  cholmod_l_dump_work(int, int, UF_long, cholmod_common *) ;
+void cholmod_l_dump_init (const char *, cholmod_common *) ;
+int  cholmod_l_dump_mem (const char *, SuiteSparse_long, cholmod_common *) ;
+void cholmod_l_dump_real (const char *, Real *, SuiteSparse_long,
+    SuiteSparse_long, int, int, cholmod_common *) ;
+void cholmod_l_dump_super (SuiteSparse_long, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    double *, int, cholmod_common *) ;
+int  cholmod_l_dump_partition (SuiteSparse_long, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long, cholmod_common *) ;
+int  cholmod_l_dump_work(int, int, SuiteSparse_long, cholmod_common *) ;
 
 #define DEBUG_INIT(s,Common)  { CHOLMOD(dump_init)(s, Common) ; }
 #define ASSERT(expression) (assert (expression))
 
 #define PRK(k,params) \
 { \
-    if (CHOLMOD(dump) >= (k) && Common->print_function != NULL) \
+    if (CHOLMOD(dump) >= (k) && SuiteSparse_config.printf_func != NULL) \
     { \
-	(Common->print_function) params ; \
+	(SuiteSparse_config.printf_func) params ; \
     } \
 }
 
diff --git a/CHOLMOD/Include/cholmod_io64.h b/CHOLMOD/Include/cholmod_io64.h
index 98bf2b3..1964418 100644
--- a/CHOLMOD/Include/cholmod_io64.h
+++ b/CHOLMOD/Include/cholmod_io64.h
@@ -8,7 +8,6 @@
  * CHOLMOD/Include/cholmod_io64.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* Definitions required for large file I/O, which must come before any other
@@ -27,7 +26,7 @@
 
 #if defined(MATLAB_MEX_FILE) || defined(MATHWORKS)
 
-/* CHOLMOD is being compiled as a MATLAB MEX file, or for use inside MATLAB */
+/* CHOLMOD is being compiled as a MATLAB mexFunction, or for use in MATLAB */
 #include "io64.h"
 
 #else
diff --git a/CHOLMOD/Include/cholmod_matrixops.h b/CHOLMOD/Include/cholmod_matrixops.h
index b4d090b..7cce7b2 100644
--- a/CHOLMOD/Include/cholmod_matrixops.h
+++ b/CHOLMOD/Include/cholmod_matrixops.h
@@ -8,7 +8,7 @@
  * CHOLMOD/Include/cholmod_matrixops.h is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD MatrixOps module.
@@ -182,17 +182,18 @@ cholmod_sparse *cholmod_submatrix
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to subreference */
     int *rset,		/* set of row indices, duplicates OK */
-    UF_long rsize,	/* size of r; rsize < 0 denotes ":" */
+    SuiteSparse_long rsize,	/* size of r; rsize < 0 denotes ":" */
     int *cset,		/* set of column indices, duplicates OK */
-    UF_long csize,	/* size of c; csize < 0 denotes ":" */
+    SuiteSparse_long csize,	/* size of c; csize < 0 denotes ":" */
     int values,		/* if TRUE compute the numerical values of C */
     int sorted,		/* if TRUE then return C with sorted columns */
     /* --------------- */
     cholmod_common *Common
 ) ;
 
-cholmod_sparse *cholmod_l_submatrix (cholmod_sparse *, UF_long *, UF_long,
-    UF_long *, UF_long, int, int, cholmod_common *) ;
+cholmod_sparse *cholmod_l_submatrix (cholmod_sparse *, SuiteSparse_long *,
+    SuiteSparse_long, SuiteSparse_long *, SuiteSparse_long, int, int,
+    cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_vertcat:  C = [A ; B] */
@@ -229,7 +230,8 @@ int cholmod_symmetry
     cholmod_common *Common
 ) ;
 
-int cholmod_l_symmetry (cholmod_sparse *, int, UF_long *, UF_long *, UF_long *,
-    UF_long *, cholmod_common *) ;
+int cholmod_l_symmetry (cholmod_sparse *, int, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    cholmod_common *) ;
 
 #endif
diff --git a/CHOLMOD/Include/cholmod_modify.h b/CHOLMOD/Include/cholmod_modify.h
index bb7dd5a..0fd68f8 100644
--- a/CHOLMOD/Include/cholmod_modify.h
+++ b/CHOLMOD/Include/cholmod_modify.h
@@ -8,7 +8,7 @@
  * CHOLMOD/Include/cholmod_modify.h is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD Modify module.
@@ -33,6 +33,7 @@
  * cholmod_updown_solve	    update/downdate, and modify solution to Lx=b
  * cholmod_updown_mark	    update/downdate, and modify solution to partial Lx=b
  * cholmod_updown_mask	    update/downdate for LPDASA
+ * cholmod_updown_mask2     update/downdate for LPDASA
  * cholmod_rowadd_solve	    add a row, and update solution to Lx=b
  * cholmod_rowadd_mark	    add a row, and update solution to partial Lx=b
  * cholmod_rowdel_solve	    delete a row, and downdate Lx=b
@@ -117,8 +118,8 @@ int cholmod_updown_mark
     cholmod_common *Common
 ) ;
 
-int cholmod_l_updown_mark (int, cholmod_sparse *, UF_long *, cholmod_factor *,
-    cholmod_dense *, cholmod_dense *, cholmod_common *) ;
+int cholmod_l_updown_mark (int, cholmod_sparse *, SuiteSparse_long *,
+    cholmod_factor *, cholmod_dense *, cholmod_dense *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_updown_mask:  update/downdate, for LPDASA */
@@ -143,8 +144,29 @@ int cholmod_updown_mask
     cholmod_common *Common
 ) ;
 
-int cholmod_l_updown_mask (int, cholmod_sparse *, UF_long *, UF_long *,
-    cholmod_factor *, cholmod_dense *, cholmod_dense *, cholmod_common *) ;
+int cholmod_l_updown_mask (int, cholmod_sparse *, SuiteSparse_long *,
+    SuiteSparse_long *, cholmod_factor *, cholmod_dense *, cholmod_dense *,
+    cholmod_common *) ;
+
+int cholmod_updown_mask2
+(
+    /* ---- input ---- */
+    int update,		/* TRUE for update, FALSE for downdate */
+    cholmod_sparse *C,	/* the incoming sparse update */
+    int *colmark,	/* int array of size n.  See cholmod_updown.c */
+    int *mask,		/* size n */
+    int maskmark,
+    /* ---- in/out --- */
+    cholmod_factor *L,	/* factor to modify */
+    cholmod_dense *X,	/* solution to Lx=b (size n-by-1) */
+    cholmod_dense *DeltaB,  /* change in b, zero on output */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_updown_mask2 (int, cholmod_sparse *, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long, cholmod_factor *, cholmod_dense *,
+    cholmod_dense *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_rowadd:  add a row to an LDL' factorization (a rank-2 update) */
@@ -219,8 +241,8 @@ int cholmod_rowadd_mark
     cholmod_common *Common
 ) ;
 
-int cholmod_l_rowadd_mark (size_t, cholmod_sparse *, double *, UF_long *,
-    cholmod_factor *, cholmod_dense *, cholmod_dense *,
+int cholmod_l_rowadd_mark (size_t, cholmod_sparse *, double *,
+    SuiteSparse_long *, cholmod_factor *, cholmod_dense *, cholmod_dense *,
     cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
@@ -298,7 +320,8 @@ int cholmod_rowdel_mark
     cholmod_common *Common
 ) ;
 
-int cholmod_l_rowdel_mark (size_t, cholmod_sparse *, double *, UF_long *,
-    cholmod_factor *, cholmod_dense *, cholmod_dense *, cholmod_common *) ;
+int cholmod_l_rowdel_mark (size_t, cholmod_sparse *, double *,
+    SuiteSparse_long *, cholmod_factor *, cholmod_dense *, cholmod_dense *,
+    cholmod_common *) ;
 
 #endif
diff --git a/CHOLMOD/Include/cholmod_partition.h b/CHOLMOD/Include/cholmod_partition.h
index 1adbc46..1e8ecd3 100644
--- a/CHOLMOD/Include/cholmod_partition.h
+++ b/CHOLMOD/Include/cholmod_partition.h
@@ -4,11 +4,10 @@
 
 /* -----------------------------------------------------------------------------
  * CHOLMOD/Include/cholmod_partition.h.
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
  * CHOLMOD/Include/cholmod_partition.h is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD Partition module.
@@ -18,28 +17,28 @@
  * methods which order a matrix following constraints determined via nested
  * dissection.
  *
+ * These functions require METIS:
  * cholmod_nested_dissection	CHOLMOD nested dissection ordering
  * cholmod_metis		METIS nested dissection ordering (METIS_NodeND)
- * cholmod_ccolamd		interface to CCOLAMD ordering
- * cholmod_csymamd		interface to CSYMAMD ordering
- * cholmod_camd			interface to CAMD ordering
  * cholmod_bisect		graph partitioner (currently based on METIS)
  * cholmod_metis_bisector	direct interface to METIS_NodeComputeSeparator
  *
  * Requires the Core and Cholesky modules, and three packages: METIS, CAMD,
  * and CCOLAMD.  Optionally used by the Cholesky module.
  *
- * Note that METIS does not have a version that uses UF_long integers.  If you
- * try to use cholmod_nested_dissection, cholmod_metis, cholmod_bisect, or
- * cholmod_metis_bisector on a matrix that is too large, an error code will be
- * returned.  METIS does have an "idxtype", which could be redefined as UF_long,
- * if you wish to edit METIS or use compile-time flags to redefine idxtype.
+ * Note that METIS does not have a version that uses SuiteSparse_long integers.
+ * If you try to use cholmod_nested_dissection, cholmod_metis, cholmod_bisect,
+ * or cholmod_metis_bisector on a matrix that is too large, an error code will
+ * be returned.  METIS does have an "idxtype", which could be redefined as
+ * SuiteSparse_long, if you wish to edit METIS or use compile-time flags to
+ * redefine idxtype.
  */
 
 #ifndef CHOLMOD_PARTITION_H
 #define CHOLMOD_PARTITION_H
 
 #include "cholmod_core.h"
+#include "cholmod_camd.h"
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_nested_dissection */
@@ -51,7 +50,7 @@
  * finds better orderings than METIS_NodeND, but takes longer.
  */
 
-UF_long cholmod_nested_dissection	/* returns # of components */
+SuiteSparse_long cholmod_nested_dissection	/* returns # of components */
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to order */
@@ -68,8 +67,9 @@ UF_long cholmod_nested_dissection	/* returns # of components */
     cholmod_common *Common
 ) ;
 
-UF_long cholmod_l_nested_dissection (cholmod_sparse *, UF_long *, size_t,
-    UF_long *, UF_long *, UF_long *, cholmod_common *) ;
+SuiteSparse_long cholmod_l_nested_dissection (cholmod_sparse *,
+    SuiteSparse_long *, size_t, SuiteSparse_long *, SuiteSparse_long *,
+    SuiteSparse_long *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_metis */
@@ -90,76 +90,8 @@ int cholmod_metis
     cholmod_common *Common
 ) ;
 
-int cholmod_l_metis (cholmod_sparse *, UF_long *, size_t, int, UF_long *,
-    cholmod_common *) ;
-
-/* -------------------------------------------------------------------------- */
-/* cholmod_ccolamd */
-/* -------------------------------------------------------------------------- */
-
-/* Order AA' or A(:,f)*A(:,f)' using CCOLAMD. */
-
-int cholmod_ccolamd
-(
-    /* ---- input ---- */
-    cholmod_sparse *A,	/* matrix to order */
-    int *fset,		/* subset of 0:(A->ncol)-1 */
-    size_t fsize,	/* size of fset */
-    int *Cmember,	/* size A->nrow.  Cmember [i] = c if row i is in the
-			 * constraint set c.  c must be >= 0.  The # of
-			 * constraint sets is max (Cmember) + 1.  If Cmember is
-			 * NULL, then it is interpretted as Cmember [i] = 0 for
-			 * all i */
-    /* ---- output --- */
-    int *Perm,		/* size A->nrow, output permutation */
-    /* --------------- */
-    cholmod_common *Common
-) ;
-
-int cholmod_l_ccolamd (cholmod_sparse *, UF_long *, size_t, UF_long *,
-    UF_long *, cholmod_common *) ;
-
-/* -------------------------------------------------------------------------- */
-/* cholmod_csymamd */
-/* -------------------------------------------------------------------------- */
-
-/* Order A using CSYMAMD. */
-
-int cholmod_csymamd
-(
-    /* ---- input ---- */
-    cholmod_sparse *A,	/* matrix to order */
-    /* ---- output --- */
-    int *Cmember,	/* size nrow.  see cholmod_ccolamd above */
-    int *Perm,		/* size A->nrow, output permutation */
-    /* --------------- */
-    cholmod_common *Common
-) ;
-
-int cholmod_l_csymamd (cholmod_sparse *, UF_long *, UF_long *,
-    cholmod_common *) ;
-
-/* -------------------------------------------------------------------------- */
-/* cholmod_camd */
-/* -------------------------------------------------------------------------- */
-
-/* Order A using CAMD. */
-
-int cholmod_camd
-(
-    /* ---- input ---- */
-    cholmod_sparse *A,	/* matrix to order */
-    int *fset,		/* subset of 0:(A->ncol)-1 */
-    size_t fsize,	/* size of fset */
-    /* ---- output --- */
-    int *Cmember,	/* size nrow.  see cholmod_ccolamd above */
-    int *Perm,		/* size A->nrow, output permutation */
-    /* --------------- */
-    cholmod_common *Common
-) ;
-
-int cholmod_l_camd (cholmod_sparse *, UF_long *, size_t, UF_long *, UF_long *,
-    cholmod_common *) ;
+int cholmod_l_metis (cholmod_sparse *, SuiteSparse_long *, size_t, int,
+    SuiteSparse_long *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_bisect */
@@ -167,7 +99,7 @@ int cholmod_l_camd (cholmod_sparse *, UF_long *, size_t, UF_long *, UF_long *,
 
 /* Finds a node bisector of A, A*A', A(:,f)*A(:,f)'. */
 
-UF_long cholmod_bisect	/* returns # of nodes in separator */
+SuiteSparse_long cholmod_bisect	/* returns # of nodes in separator */
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to bisect */
@@ -182,8 +114,8 @@ UF_long cholmod_bisect	/* returns # of nodes in separator */
     cholmod_common *Common
 ) ;
 
-UF_long cholmod_l_bisect (cholmod_sparse *, UF_long *, size_t, int, UF_long *,
-    cholmod_common *) ;
+SuiteSparse_long cholmod_l_bisect (cholmod_sparse *, SuiteSparse_long *,
+    size_t, int, SuiteSparse_long *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_metis_bisector */
@@ -192,7 +124,7 @@ UF_long cholmod_l_bisect (cholmod_sparse *, UF_long *, size_t, int, UF_long *,
 /* Find a set of nodes that bisects the graph of A or AA' (direct interface
  * to METIS_NodeComputeSeparator). */
 
-UF_long cholmod_metis_bisector	/* returns separator size */
+SuiteSparse_long cholmod_metis_bisector	/* returns separator size */
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to bisect */
@@ -204,8 +136,9 @@ UF_long cholmod_metis_bisector	/* returns separator size */
     cholmod_common *Common
 ) ;
 
-UF_long cholmod_l_metis_bisector (cholmod_sparse *, UF_long *, UF_long *,
-    UF_long *, cholmod_common *) ;
+SuiteSparse_long cholmod_l_metis_bisector (cholmod_sparse *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_collapse_septree */
@@ -213,7 +146,7 @@ UF_long cholmod_l_metis_bisector (cholmod_sparse *, UF_long *, UF_long *,
 
 /* Collapse nodes in a separator tree. */
 
-UF_long cholmod_collapse_septree
+SuiteSparse_long cholmod_collapse_septree
 (
     /* ---- input ---- */
     size_t n,		/* # of nodes in the graph */
@@ -227,7 +160,7 @@ UF_long cholmod_collapse_septree
     cholmod_common *Common
 ) ;
 
-UF_long cholmod_l_collapse_septree (size_t, size_t, double, size_t, UF_long *,
-    UF_long *, cholmod_common *) ;
+SuiteSparse_long cholmod_l_collapse_septree (size_t, size_t, double, size_t,
+    SuiteSparse_long *, SuiteSparse_long *, cholmod_common *) ;
 
 #endif
diff --git a/CHOLMOD/Include/cholmod_supernodal.h b/CHOLMOD/Include/cholmod_supernodal.h
index cfb483e..36efa97 100644
--- a/CHOLMOD/Include/cholmod_supernodal.h
+++ b/CHOLMOD/Include/cholmod_supernodal.h
@@ -8,7 +8,7 @@
  * CHOLMOD/Include/cholmod_supernodal.h is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD Supernodal module.
@@ -71,8 +71,33 @@ int cholmod_super_symbolic
     cholmod_common *Common
 ) ;
 
-int cholmod_l_super_symbolic (cholmod_sparse *, cholmod_sparse *, UF_long *,
-    cholmod_factor *, cholmod_common *) ;
+int cholmod_l_super_symbolic (cholmod_sparse *, cholmod_sparse *,
+    SuiteSparse_long *, cholmod_factor *, cholmod_common *) ;
+
+/* -------------------------------------------------------------------------- */
+/* cholmod_super_symbolic2 */
+/* -------------------------------------------------------------------------- */
+
+/* Analyze for supernodal Cholesky or multifrontal QR */
+
+int cholmod_super_symbolic2
+(
+    /* ---- input ---- */
+    int for_whom,       /* FOR_SPQR     (0): for SPQR but not GPU-accelerated
+                           FOR_CHOLESKY (1): for Cholesky (GPU or not)
+                           FOR_SPQRGPU  (2): for SPQR with GPU acceleration */
+    cholmod_sparse *A,	/* matrix to analyze */
+    cholmod_sparse *F,	/* F = A' or A(:,f)' */
+    int *Parent,	/* elimination tree */
+    /* ---- in/out --- */
+    cholmod_factor *L,	/* simplicial symbolic on input,
+			 * supernodal symbolic on output */
+    /* --------------- */
+    cholmod_common *Common
+) ;
+
+int cholmod_l_super_symbolic2 (int, cholmod_sparse *, cholmod_sparse *,
+    SuiteSparse_long *, cholmod_factor *, cholmod_common *) ;
 
 /* -------------------------------------------------------------------------- */
 /* cholmod_super_numeric */
diff --git a/CHOLMOD/Include/cholmod_template.h b/CHOLMOD/Include/cholmod_template.h
index aa45b4d..5623a38 100644
--- a/CHOLMOD/Include/cholmod_template.h
+++ b/CHOLMOD/Include/cholmod_template.h
@@ -7,6 +7,7 @@
 /* -------------------------------------------------------------------------- */
 
 #undef TEMPLATE
+#undef TEMPLATE2
 #undef XTYPE
 #undef XTYPE2
 #undef XTYPE_OK
@@ -53,6 +54,7 @@
 
 #define PREFIX				    p_
 #define TEMPLATE(name)			    P_TEMPLATE(name)
+#define TEMPLATE2(name)			    P_TEMPLATE(name)
 #define XTYPE				    CHOLMOD_PATTERN
 #define XTYPE2				    CHOLMOD_REAL
 #define XTYPE_OK(type)			    (TRUE)
@@ -96,6 +98,7 @@
 
 #define PREFIX				    r_
 #define TEMPLATE(name)			    R_TEMPLATE(name)
+#define TEMPLATE2(name)			    R_TEMPLATE(name)
 #define XTYPE				    CHOLMOD_REAL
 #define XTYPE2				    CHOLMOD_REAL
 #define XTYPE_OK(type)			    R_XTYPE_OK(type)
@@ -143,8 +146,10 @@
 
 #ifdef NCONJUGATE
 #define TEMPLATE(name)			    CT_TEMPLATE(name)
+#define TEMPLATE2(name)			    CT_TEMPLATE(name)
 #else
 #define TEMPLATE(name)			    C_TEMPLATE(name)
+#define TEMPLATE2(name)			    C_TEMPLATE(name)
 #endif
 
 #define ASSEMBLE(x,z,p,ax,az,q)		    C_ASSEMBLE(x,z,p,ax,az,q) 
@@ -194,8 +199,10 @@
 
 #ifdef NCONJUGATE
 #define TEMPLATE(name)			    ZT_TEMPLATE(name)
+#define TEMPLATE2(name)			    CT_TEMPLATE(name)
 #else
 #define TEMPLATE(name)			    Z_TEMPLATE(name)
+#define TEMPLATE2(name)			    C_TEMPLATE(name)
 #endif
 
 #define ASSEMBLE(x,z,p,ax,az,q)		    Z_ASSEMBLE(x,z,p,ax,az,q) 
diff --git a/CHOLMOD/Lib/Makefile b/CHOLMOD/Lib/Makefile
index 7d736d3..3893d39 100644
--- a/CHOLMOD/Lib/Makefile
+++ b/CHOLMOD/Lib/Makefile
@@ -6,9 +6,49 @@ default: all
 
 ccode: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(CHOLMOD_CONFIG)
+#-------------------------------------------------------------------------------
+# the optional Partition module requires METIS, CAMD, and CCOLAMD.
+# CAMD and CCOLAMD can be installed without METIS, but are optional.
+I_WITH_PARTITION = 
+LIB_WITH_PARTITION =
+CONFIG = -DNPARTITION -DNCAMD
+# check if CAMD/CCOLAMD and METIS are requested and available
+ifeq (,$(findstring -DNCAMD, $(CHOLMOD_CONFIG)))
+    # CAMD and CCOLAMD are requested.  See if they are available
+    ifeq (../../CAMD, $(wildcard ../../CAMD))
+        ifeq (../../CCOLAMD, $(wildcard ../../CCOLAMD))
+            # CAMD and CCOLAMD are requested and available
+            LIB_WITH_PARTITION = \
+                        ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a
+            I_WITH_PARTITION = \
+                        -I../../CCOLAMD/Include -I../../CAMD/Include
+            CONFIG = -DNPARTITION
+            # check if METIS is requested and available
+            ifeq (,$(findstring -DNPARTITION, $(CHOLMOD_CONFIG)))
+                # METIS is requested.  See if it is available
+                ifeq ($(METIS_PATH), $(wildcard $(METIS_PATH)))
+                    # METIS is available
+                    LIB_WITH_PARTITION = $(METIS) \
+                        ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a
+                    I_WITH_PARTITION = -I$(METIS_PATH)/Lib \
+                        -I../../CCOLAMD/Include -I../../CAMD/Include
+                    CONFIG =
+                endif
+            endif
+        endif
+    endif
+endif
+
+#-------------------------------------------------------------------------------
+
+I = -I../../AMD/Include -I../../AMD/Source -I../../COLAMD/Include \
+	$(I_WITH_PARTITION) -I../Include -I../../SuiteSparse_config
+
+#-------------------------------------------------------------------------------
+
+C = $(CC) $(CF) $(CHOLMOD_CONFIG) $(CONFIG)
 
 all: libcholmod.a
 
@@ -38,7 +78,8 @@ INC =   ../Include/cholmod.h \
 	../Include/cholmod_modify.h \
 	../Include/cholmod_partition.h \
 	../Include/cholmod_supernodal.h \
-	../Include/cholmod_template.h
+	../Include/cholmod_template.h \
+	../Include/cholmod_gpu.h
 
 #-------------------------------------------------------------------------------
 # The 7 CHOLMOD library modules (int, double)
@@ -48,7 +89,8 @@ CORE = cholmod_aat.o cholmod_add.o cholmod_band.o \
 	cholmod_change_factor.o cholmod_common.o cholmod_complex.o \
 	cholmod_copy.o cholmod_dense.o cholmod_error.o cholmod_factor.o \
 	cholmod_memory.o cholmod_sparse.o \
-	cholmod_transpose.o cholmod_triplet.o
+	cholmod_transpose.o cholmod_triplet.o \
+        cholmod_version.o
 
 CHECK = cholmod_check.o cholmod_read.o cholmod_write.o
 
@@ -69,8 +111,14 @@ MODIFY = cholmod_rowadd.o cholmod_rowdel.o cholmod_updown.o
 SUPERNODAL = cholmod_super_numeric.o cholmod_super_solve.o \
 	cholmod_super_symbolic.o
 
+ifneq ($(GPU_CONFIG),)
+GPU = cholmod_gpu.o cholmod_gpu_kernels.o
+else
+GPU =
+endif
+
 DI = $(CORE) $(CHECK) $(CHOLESKY) $(MATRIXOPS) $(MODIFY) $(SUPERNODAL) \
-	$(PARTITION)
+	$(GPU) $(PARTITION) 
 
 #-------------------------------------------------------------------------------
 # CHOLMOD library modules (long, double)
@@ -80,7 +128,8 @@ LCORE = cholmod_l_aat.o cholmod_l_add.o cholmod_l_band.o \
 	cholmod_l_change_factor.o cholmod_l_common.o cholmod_l_complex.o \
 	cholmod_l_copy.o cholmod_l_dense.o cholmod_l_error.o \
 	cholmod_l_factor.o cholmod_l_memory.o \
-	cholmod_l_sparse.o cholmod_l_transpose.o cholmod_l_triplet.o
+	cholmod_l_sparse.o cholmod_l_transpose.o cholmod_l_triplet.o \
+        cholmod_l_version.o
 
 LCHECK = cholmod_l_check.o cholmod_l_read.o cholmod_l_write.o
 
@@ -101,8 +150,14 @@ LMODIFY = cholmod_l_rowadd.o cholmod_l_rowdel.o cholmod_l_updown.o
 LSUPERNODAL = cholmod_l_super_numeric.o cholmod_l_super_solve.o \
 	cholmod_l_super_symbolic.o
 
+ifneq ($(GPU_CONFIG),)
+LGPU = cholmod_l_gpu.o cholmod_gpu_kernels.o
+else
+LGPU =
+endif
+
 DL = $(LCORE) $(LCHECK) $(LCHOLESKY) $(LMATRIXOPS) $(LMODIFY) $(LSUPERNODAL) \
-	$(LPARTITION)
+	$(LPARTITION) $(LGPU)
 
 #-------------------------------------------------------------------------------
 
@@ -110,15 +165,11 @@ DL = $(LCORE) $(LCHECK) $(LCHOLESKY) $(LMATRIXOPS) $(LMODIFY) $(LSUPERNODAL) \
 OBJ = $(DI) $(DL)
 
 libcholmod.a: $(OBJ)
-	$(AR) libcholmod.a $(OBJ)
-	$(RANLIB) libcholmod.a
+	$(ARCHIVE)  libcholmod.a $(OBJ)
+	- $(RANLIB) libcholmod.a
 
 $(OBJ): $(INC)
 
-I = -I../../AMD/Include -I../../AMD/Source -I../../COLAMD/Include \
-	-I$(METIS_PATH)/Lib -I../../CCOLAMD/Include -I../../CAMD/Include \
-	-I../Include -I../../UFconfig
-
 #-------------------------------------------------------------------------------
 # Check Module:
 #-------------------------------------------------------------------------------
@@ -191,6 +242,9 @@ cholmod_aat.o: ../Core/cholmod_aat.c
 cholmod_add.o: ../Core/cholmod_add.c
 	$(C) -c $(I) $<
 
+cholmod_version.o: ../Core/cholmod_version.c
+	$(C) -c $(I) $<
+
 #-------------------------------------------------------------------------------
 
 cholmod_l_common.o: ../Core/cholmod_common.c
@@ -236,6 +290,9 @@ cholmod_l_aat.o: ../Core/cholmod_aat.c
 cholmod_l_add.o: ../Core/cholmod_add.c
 	$(C) -DDLONG -c $(I) $< -o $@
 
+cholmod_l_version.o: ../Core/cholmod_version.c
+	$(C) -DDLONG -c $(I) $< -o $@
+
 
 #-------------------------------------------------------------------------------
 # Cholesky Module:
@@ -448,6 +505,7 @@ cholmod_l_updown.o: ../Modify/cholmod_updown.c \
 #-------------------------------------------------------------------------------
 
 cholmod_super_numeric.o: ../Supernodal/cholmod_super_numeric.c \
+        ../GPU/t_cholmod_gpu.c \
 	../Supernodal/t_cholmod_super_numeric.c
 	$(C) -c $(I) $<
 
@@ -470,3 +528,17 @@ cholmod_l_super_symbolic.o: ../Supernodal/cholmod_super_symbolic.c
 cholmod_l_super_solve.o: ../Supernodal/cholmod_super_solve.c \
 	../Supernodal/t_cholmod_super_solve.c
 	$(C) -DDLONG -c $(I) $< -o $@
+
+#-------------------------------------------------------------------------------
+# GPU module
+#-------------------------------------------------------------------------------
+
+cholmod_gpu_kernels.o: ../GPU/cholmod_gpu_kernels.cu
+	$(NVCC) -I../../SuiteSparse_config -Xcompiler -fPIC -O3  -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -c ../GPU/cholmod_gpu_kernels.cu
+
+cholmod_gpu.o: ../GPU/cholmod_gpu.c 
+	$(C) -c $(I) $<
+
+cholmod_l_gpu.o: ../GPU/cholmod_gpu.c 
+	$(C) -DDLONG -c $(I) $< -o $@
+
diff --git a/CHOLMOD/MATLAB/Contents.m b/CHOLMOD/MATLAB/Contents.m
index d1fd3e7..d0a2e25 100644
--- a/CHOLMOD/MATLAB/Contents.m
+++ b/CHOLMOD/MATLAB/Contents.m
@@ -33,5 +33,4 @@
 % Note: cholmod has been renamed cholmod2, so as not to conflict with itself
 % (the MATLAB built-in cholmod function).
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
diff --git a/CHOLMOD/MATLAB/License.txt b/CHOLMOD/MATLAB/License.txt
index 916cc31..cebd70b 100644
--- a/CHOLMOD/MATLAB/License.txt
+++ b/CHOLMOD/MATLAB/License.txt
@@ -2,7 +2,7 @@ CHOLMOD/MATLAB Module.
 Copyright (C) 2005-2006, Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
 MATLAB(tm) is a Registered Trademark of The MathWorks, Inc.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/MATLAB module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/MATLAB/Makefile b/CHOLMOD/MATLAB/Makefile
deleted file mode 100644
index 884aabe..0000000
--- a/CHOLMOD/MATLAB/Makefile
+++ /dev/null
@@ -1,700 +0,0 @@
-#===============================================================================
-# CHOLMOD/MATLAB/Makefile
-#===============================================================================
-
-default: all
-
-include ../../UFconfig/UFconfig.mk
-
-I = -I. -I../../AMD/Include -I../../COLAMD/Include -I../../CCOLAMD/Include \
-    -I../../CAMD/Include -I../Include -I../../UFconfig -I$(METIS_PATH)/Lib
-
-all: mread sdmult ldlsolve resymbol symbfact2 chol2 lchol \
-	ldlchol cholmod2 ldlupdate metis bisect nesdis etree2 sparse2 analyze \
-	septree spsym mwrite other
-
-MX = $(MEX) $(CHOLMOD_CONFIG) -DDLONG -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE $(I)
-
-distclean: purge
-
-purge: clean
-	- $(RM) *.mex* *.dll
-
-clean:
-	- $(RM) $(CLEAN)
-
-#===============================================================================
-
-AMD_INC = ../../AMD/Include/amd.h ../../AMD/Include/amd_internal.h
-
-AMD = \
-	amd_1.o \
-	amd_2.o \
-	amd_aat.o \
-	amd_control.o \
-	amd_defaults.o \
-	amd_dump.o \
-	amd_global.o \
-	amd_info.o \
-	amd_order.o \
-	amd_postorder.o \
-	amd_post_tree.o \
-	amd_preprocess.o \
-	amd_valid.o
-
-amd_1.o: ../../AMD/Source/amd_1.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_2.o: ../../AMD/Source/amd_2.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_aat.o: ../../AMD/Source/amd_aat.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_control.o: ../../AMD/Source/amd_control.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_defaults.o: ../../AMD/Source/amd_defaults.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_dump.o: ../../AMD/Source/amd_dump.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_global.o: ../../AMD/Source/amd_global.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_info.o: ../../AMD/Source/amd_info.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_order.o: ../../AMD/Source/amd_order.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_postorder.o: ../../AMD/Source/amd_postorder.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_post_tree.o: ../../AMD/Source/amd_post_tree.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_preprocess.o: ../../AMD/Source/amd_preprocess.c $(AMD_INC)
-	$(MX) -c $<
-
-amd_valid.o: ../../AMD/Source/amd_valid.c $(AMD_INC)
-	$(MX) -c $<
-
-#===============================================================================
-
-CAMD_INC = ../../CAMD/Include/camd.h ../../CAMD/Include/camd_internal.h
-
-CAMD = \
-	camd_1.o \
-	camd_2.o \
-	camd_aat.o \
-	camd_control.o \
-	camd_defaults.o \
-	camd_dump.o \
-	camd_global.o \
-	camd_info.o \
-	camd_order.o \
-	camd_postorder.o \
-	camd_preprocess.o \
-	camd_valid.o
-
-camd_1.o: ../../CAMD/Source/camd_1.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_2.o: ../../CAMD/Source/camd_2.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_aat.o: ../../CAMD/Source/camd_aat.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_control.o: ../../CAMD/Source/camd_control.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_defaults.o: ../../CAMD/Source/camd_defaults.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_dump.o: ../../CAMD/Source/camd_dump.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_global.o: ../../CAMD/Source/camd_global.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_info.o: ../../CAMD/Source/camd_info.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_order.o: ../../CAMD/Source/camd_order.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_postorder.o: ../../CAMD/Source/camd_postorder.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_post_tree.o: ../../CAMD/Source/camd_post_tree.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_preprocess.o: ../../CAMD/Source/camd_preprocess.c $(CAMD_INC)
-	$(MX) -c $<
-
-camd_valid.o: ../../CAMD/Source/camd_valid.c $(CAMD_INC)
-	$(MX) -c $<
-
-#===============================================================================
-
-COLAMD_INC = ../../COLAMD/Include/colamd.h
-
-COLAMD = colamd.o colamd_global.o
-
-colamd.o: ../../COLAMD/Source/colamd.c $(COLAMD_INC)
-	$(MX) -c $<
-
-colamd_global.o: ../../COLAMD/Source/colamd_global.c $(COLAMD_INC)
-	$(MX) -c $<
-
-#===============================================================================
-
-CCOLAMD_INC = ../../CCOLAMD/Include/ccolamd.h
-
-CCOLAMD = ccolamd.o ccolamd_global.o
-
-ccolamd.o: ../../CCOLAMD/Source/ccolamd.c $(CCOLAMD_INC)
-	$(MX) -c $<
-
-ccolamd_global.o: ../../CCOLAMD/Source/ccolamd_global.c $(CCOLAMD_INC)
-	$(MX) -c $<
-
-#===============================================================================
-
-# patch METIS 4.0.1
-rename.h: Makefile $(METIS_PATH)/Lib/rename.h
-	echo '/* do not edit this file; generated by CHOLMOD/MATLAB/Makefile */' > rename.h
-	echo '#undef log2' >> rename.h
-	echo '#include "$(METIS_PATH)/Lib/rename.h"' >> rename.h
-	echo '#undef log2' >> rename.h
-	echo '#define log2 METIS__log2' >> rename.h
-	echo '#include "mex.h"' >> rename.h
-	echo '#define malloc mxMalloc' >> rename.h
-	echo '#define free mxFree' >> rename.h
-	echo '#define calloc mxCalloc' >> rename.h
-	echo '#define realloc mxRealloc' >> rename.h
-
-METIS_INC = rename.h \
-	$(METIS_PATH)/Lib/defs.h \
-	$(METIS_PATH)/Lib/macros.h \
-	$(METIS_PATH)/Lib/metis.h \
-	$(METIS_PATH)/Lib/proto.h \
-	$(METIS_PATH)/Lib/rename.h \
-	$(METIS_PATH)/Lib/struct.h 
-
-METIS = \
-	balance.o \
-	bucketsort.o \
-	ccgraph.o \
-	coarsen.o \
-	compress.o \
-	debug.o \
-	estmem.o \
-	fm.o \
-	fortran.o \
-	frename.o \
-	graph.o \
-	initpart.o \
-	kmetis.o \
-	kvmetis.o \
-	kwayfm.o \
-	kwayrefine.o \
-	kwayvolfm.o \
-	kwayvolrefine.o \
-	match.o \
-	mbalance2.o \
-	mbalance.o \
-	mcoarsen.o \
-	memory.o \
-	mesh.o \
-	meshpart.o \
-	mfm2.o \
-	mfm.o \
-	mincover.o \
-	minitpart2.o \
-	minitpart.o \
-	mkmetis.o \
-	mkwayfmh.o \
-	mkwayrefine.o \
-	mmatch.o \
-	mmd.o \
-	mpmetis.o \
-	mrefine2.o \
-	mrefine.o \
-	mutil.o \
-	myqsort.o \
-	ometis.o \
-	parmetis.o \
-	pmetis.o \
-	pqueue.o \
-	refine.o \
-	separator.o \
-	sfm.o \
-	srefine.o \
-	stat.o \
-	subdomains.o \
-	timing.o \
-	util.o
-
-balance.o: $(METIS_PATH)/Lib/balance.c $(METIS_INC)
-	$(MX) -c $<
-
-bucketsort.o: $(METIS_PATH)/Lib/bucketsort.c $(METIS_INC)
-	$(MX) -c $<
-
-ccgraph.o: $(METIS_PATH)/Lib/ccgraph.c $(METIS_INC)
-	$(MX) -c $<
-
-coarsen.o: $(METIS_PATH)/Lib/coarsen.c $(METIS_INC)
-	$(MX) -c $<
-
-compress.o: $(METIS_PATH)/Lib/compress.c $(METIS_INC)
-	$(MX) -c $<
-
-debug.o: $(METIS_PATH)/Lib/debug.c $(METIS_INC)
-	$(MX) -c $<
-
-estmem.o: $(METIS_PATH)/Lib/estmem.c $(METIS_INC)
-	$(MX) -c $<
-
-fm.o: $(METIS_PATH)/Lib/fm.c $(METIS_INC)
-	$(MX) -c $<
-
-fortran.o: $(METIS_PATH)/Lib/fortran.c $(METIS_INC)
-	$(MX) -c $<
-
-frename.o: $(METIS_PATH)/Lib/frename.c $(METIS_INC)
-	$(MX) -c $<
-
-graph.o: $(METIS_PATH)/Lib/graph.c $(METIS_INC)
-	$(MX) -c $<
-
-initpart.o: $(METIS_PATH)/Lib/initpart.c $(METIS_INC)
-	$(MX) -c $<
-
-kmetis.o: $(METIS_PATH)/Lib/kmetis.c $(METIS_INC)
-	$(MX) -c $<
-
-kvmetis.o: $(METIS_PATH)/Lib/kvmetis.c $(METIS_INC)
-	$(MX) -c $<
-
-kwayfm.o: $(METIS_PATH)/Lib/kwayfm.c $(METIS_INC)
-	$(MX) -c $<
-
-kwayrefine.o: $(METIS_PATH)/Lib/kwayrefine.c $(METIS_INC)
-	$(MX) -c $<
-
-kwayvolfm.o: $(METIS_PATH)/Lib/kwayvolfm.c $(METIS_INC)
-	$(MX) -c $<
-
-kwayvolrefine.o: $(METIS_PATH)/Lib/kwayvolrefine.c $(METIS_INC)
-	$(MX) -c $<
-
-match.o: $(METIS_PATH)/Lib/match.c $(METIS_INC)
-	$(MX) -c $<
-
-mbalance2.o: $(METIS_PATH)/Lib/mbalance2.c $(METIS_INC)
-	$(MX) -c $<
-
-mbalance.o: $(METIS_PATH)/Lib/mbalance.c $(METIS_INC)
-	$(MX) -c $<
-
-mcoarsen.o: $(METIS_PATH)/Lib/mcoarsen.c $(METIS_INC)
-	$(MX) -c $<
-
-memory.o: $(METIS_PATH)/Lib/memory.c $(METIS_INC)
-	$(MX) -c $<
-
-mesh.o: $(METIS_PATH)/Lib/mesh.c $(METIS_INC)
-	$(MX) -c $<
-
-meshpart.o: $(METIS_PATH)/Lib/meshpart.c $(METIS_INC)
-	$(MX) -c $<
-
-mfm2.o: $(METIS_PATH)/Lib/mfm2.c $(METIS_INC)
-	$(MX) -c $<
-
-mfm.o: $(METIS_PATH)/Lib/mfm.c $(METIS_INC)
-	$(MX) -c $<
-
-mincover.o: $(METIS_PATH)/Lib/mincover.c $(METIS_INC)
-	$(MX) -c $<
-
-minitpart2.o: $(METIS_PATH)/Lib/minitpart2.c $(METIS_INC)
-	$(MX) -c $<
-
-minitpart.o: $(METIS_PATH)/Lib/minitpart.c $(METIS_INC)
-	$(MX) -c $<
-
-mkmetis.o: $(METIS_PATH)/Lib/mkmetis.c $(METIS_INC)
-	$(MX) -c $<
-
-mkwayfmh.o: $(METIS_PATH)/Lib/mkwayfmh.c $(METIS_INC)
-	$(MX) -c $<
-
-mkwayrefine.o: $(METIS_PATH)/Lib/mkwayrefine.c $(METIS_INC)
-	$(MX) -c $<
-
-mmatch.o: $(METIS_PATH)/Lib/mmatch.c $(METIS_INC)
-	$(MX) -c $<
-
-mmd.o: $(METIS_PATH)/Lib/mmd.c $(METIS_INC)
-	$(MX) -c $<
-
-mpmetis.o: $(METIS_PATH)/Lib/mpmetis.c $(METIS_INC)
-	$(MX) -c $<
-
-mrefine2.o: $(METIS_PATH)/Lib/mrefine2.c $(METIS_INC)
-	$(MX) -c $<
-
-mrefine.o: $(METIS_PATH)/Lib/mrefine.c $(METIS_INC)
-	$(MX) -c $<
-
-mutil.o: $(METIS_PATH)/Lib/mutil.c $(METIS_INC)
-	$(MX) -c $<
-
-myqsort.o: $(METIS_PATH)/Lib/myqsort.c $(METIS_INC)
-	$(MX) -c $<
-
-ometis.o: $(METIS_PATH)/Lib/ometis.c $(METIS_INC)
-	$(MX) -c $<
-
-parmetis.o: $(METIS_PATH)/Lib/parmetis.c $(METIS_INC)
-	$(MX) -c $<
-
-pmetis.o: $(METIS_PATH)/Lib/pmetis.c $(METIS_INC)
-	$(MX) -c $<
-
-pqueue.o: $(METIS_PATH)/Lib/pqueue.c $(METIS_INC)
-	$(MX) -c $<
-
-refine.o: $(METIS_PATH)/Lib/refine.c $(METIS_INC)
-	$(MX) -c $<
-
-separator.o: $(METIS_PATH)/Lib/separator.c $(METIS_INC)
-	$(MX) -c $<
-
-sfm.o: $(METIS_PATH)/Lib/sfm.c $(METIS_INC)
-	$(MX) -c $<
-
-srefine.o: $(METIS_PATH)/Lib/srefine.c $(METIS_INC)
-	$(MX) -c $<
-
-stat.o: $(METIS_PATH)/Lib/stat.c $(METIS_INC)
-	$(MX) -c $<
-
-subdomains.o: $(METIS_PATH)/Lib/subdomains.c $(METIS_INC)
-	$(MX) -c $<
-
-timing.o: $(METIS_PATH)/Lib/timing.c $(METIS_INC)
-	$(MX) -c $<
-
-util.o: $(METIS_PATH)/Lib/util.c $(METIS_INC)
-	$(MX) -c $<
-
-#===============================================================================
-
-CHOLMOD_INC = \
-	cholmod_matlab.h \
-	../Include/cholmod_blas.h \
-	../Include/cholmod_check.h \
-	../Include/cholmod_cholesky.h \
-	../Include/cholmod_complexity.h \
-	../Include/cholmod_config.h \
-	../Include/cholmod_core.h \
-	../Include/cholmod.h \
-	../Include/cholmod_internal.h \
-	../Include/cholmod_io64.h \
-	../Include/cholmod_matrixops.h \
-	../Include/cholmod_modify.h \
-	../Include/cholmod_partition.h \
-	../Include/cholmod_supernodal.h \
-	../Include/cholmod_template.h
-
-CHOLMOD = \
-	cholmod_matlab.o \
-	cholmod_check.o \
-	cholmod_read.o \
-	cholmod_write.o \
-	cholmod_amd.o \
-	cholmod_analyze.o \
-	cholmod_colamd.o \
-	cholmod_etree.o \
-	cholmod_factorize.o \
-	cholmod_postorder.o \
-	cholmod_rcond.o \
-	cholmod_resymbol.o \
-	cholmod_rowcolcounts.o \
-	cholmod_rowfac.o \
-	cholmod_solve.o \
-	cholmod_spsolve.o \
-	cholmod_aat.o \
-	cholmod_add.o \
-	cholmod_band.o \
-	cholmod_change_factor.o \
-	cholmod_common.o \
-	cholmod_complex.o \
-	cholmod_copy.o \
-	cholmod_dense.o \
-	cholmod_error.o \
-	cholmod_factor.o \
-	cholmod_memory.o \
-	cholmod_sparse.o \
-	cholmod_transpose.o \
-	cholmod_triplet.o \
-	cholmod_drop.o \
-	cholmod_horzcat.o \
-	cholmod_norm.o \
-	cholmod_scale.o \
-	cholmod_sdmult.o \
-	cholmod_ssmult.o \
-	cholmod_submatrix.o \
-	cholmod_symmetry.o \
-	cholmod_vertcat.o \
-	cholmod_rowadd.o \
-	cholmod_rowdel.o \
-	cholmod_updown.o \
-	cholmod_camd.o \
-	cholmod_ccolamd.o \
-	cholmod_csymamd.o \
-	cholmod_metis.o \
-	cholmod_nesdis.o \
-	cholmod_super_numeric.o \
-	cholmod_super_solve.o \
-	cholmod_super_symbolic.o
-
-cholmod_matlab.o: cholmod_matlab.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_check.o: ../Check/cholmod_check.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_read.o: ../Check/cholmod_read.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_write.o: ../Check/cholmod_write.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_amd.o: ../Cholesky/cholmod_amd.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_analyze.o: ../Cholesky/cholmod_analyze.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_colamd.o: ../Cholesky/cholmod_colamd.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_etree.o: ../Cholesky/cholmod_etree.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_factorize.o: ../Cholesky/cholmod_factorize.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_postorder.o: ../Cholesky/cholmod_postorder.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_rcond.o: ../Cholesky/cholmod_rcond.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_resymbol.o: ../Cholesky/cholmod_resymbol.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_rowcolcounts.o: ../Cholesky/cholmod_rowcolcounts.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_rowfac.o: ../Cholesky/cholmod_rowfac.c \
-	../Cholesky/t_cholmod_rowfac.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_solve.o: ../Cholesky/cholmod_solve.c \
-	../Cholesky/t_cholmod_lsolve.c \
-	../Cholesky/t_cholmod_ltsolve.c \
-	../Cholesky/t_cholmod_solve.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_spsolve.o: ../Cholesky/cholmod_spsolve.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_aat.o: ../Core/cholmod_aat.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_add.o: ../Core/cholmod_add.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_band.o: ../Core/cholmod_band.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_change_factor.o: ../Core/cholmod_change_factor.c \
-	../Core/t_cholmod_change_factor.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_common.o: ../Core/cholmod_common.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_complex.o: ../Core/cholmod_complex.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_copy.o: ../Core/cholmod_copy.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_dense.o: ../Core/cholmod_dense.c \
-	../Core/t_cholmod_dense.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_error.o: ../Core/cholmod_error.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_factor.o: ../Core/cholmod_factor.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_memory.o: ../Core/cholmod_memory.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_sparse.o: ../Core/cholmod_sparse.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_transpose.o: ../Core/cholmod_transpose.c \
-	../Core/t_cholmod_transpose.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_triplet.o: ../Core/cholmod_triplet.c \
-	../Core/t_cholmod_triplet.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_drop.o: ../MatrixOps/cholmod_drop.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_horzcat.o: ../MatrixOps/cholmod_horzcat.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_norm.o: ../MatrixOps/cholmod_norm.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_scale.o: ../MatrixOps/cholmod_scale.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_sdmult.o: ../MatrixOps/cholmod_sdmult.c \
-	../MatrixOps/t_cholmod_sdmult.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_ssmult.o: ../MatrixOps/cholmod_ssmult.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_submatrix.o: ../MatrixOps/cholmod_submatrix.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_symmetry.o: ../MatrixOps/cholmod_symmetry.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_vertcat.o: ../MatrixOps/cholmod_vertcat.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_rowadd.o: ../Modify/cholmod_rowadd.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_rowdel.o: ../Modify/cholmod_rowdel.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_updown.o: ../Modify/cholmod_updown.c \
-	../Modify/t_cholmod_updown.c \
-	../Modify/t_cholmod_updown_numkr.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_camd.o: ../Partition/cholmod_camd.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_ccolamd.o: ../Partition/cholmod_ccolamd.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_csymamd.o: ../Partition/cholmod_csymamd.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_metis.o: ../Partition/cholmod_metis.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_nesdis.o: ../Partition/cholmod_nesdis.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_super_numeric.o: ../Supernodal/cholmod_super_numeric.c \
-	../Supernodal/t_cholmod_super_numeric.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_super_solve.o: ../Supernodal/cholmod_super_solve.c \
-	../Supernodal/t_cholmod_super_solve.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-cholmod_super_symbolic.o: ../Supernodal/cholmod_super_symbolic.c $(CHOLMOD_INC)
-	$(MX) -c $<
-
-
-#===============================================================================
-
-OBJ = $(AMD) $(CAMD) $(COLAMD) $(CCOLAMD) $(METIS) $(CHOLMOD)
-
-analyze: analyze.c $(OBJ)
-	$(MX) analyze.c $(OBJ)
-
-mread: mread.c $(OBJ)
-	$(MX) mread.c $(OBJ)
-
-mwrite: mwrite.c $(OBJ)
-	$(MX) mwrite.c $(OBJ)
-
-spsym: spsym.c $(OBJ)
-	$(MX) spsym.c $(OBJ)
-
-chol2: chol2.c $(OBJ)
-	$(MX) chol2.c $(OBJ)
-
-lchol: lchol.c $(OBJ)
-	$(MX) lchol.c $(OBJ)
-
-ldlchol: ldlchol.c $(OBJ)
-	$(MX) ldlchol.c $(OBJ)
-
-ldlupdate: ldlupdate.c $(OBJ)
-	$(MX) ldlupdate.c $(OBJ)
-
-ldlsolve: ldlsolve.c $(OBJ)
-	$(MX) ldlsolve.c $(OBJ)
-
-sdmult: sdmult.c $(OBJ)
-	$(MX) sdmult.c $(OBJ)
-
-resymbol: resymbol.c $(OBJ)
-	$(MX) resymbol.c $(OBJ)
-
-cholmod2: cholmod2.c $(OBJ)
-	$(MX) cholmod2.c $(OBJ)
-
-nesdis: nesdis.c $(OBJ)
-	$(MX) nesdis.c $(OBJ)
-
-septree: septree.c $(OBJ)
-	$(MX) septree.c $(OBJ)
-
-metis: metis.c $(OBJ)
-	$(MX) metis.c $(OBJ)
-
-etree2: etree2.c $(OBJ)
-	$(MX) etree2.c $(OBJ)
-
-bisect: bisect.c $(OBJ)
-	$(MX) bisect.c $(OBJ)
-
-symbfact2: symbfact2.c $(OBJ) 
-	$(MX) symbfact2.c $(OBJ)
-
-sparse2: sparse2.c $(OBJ) 
-	$(MX) sparse2.c $(OBJ)
-
-#-------------------------------------------------------------------------------
-
-other:
-	( cd ../../AMD ; $(MAKE) mex )
-	( cd ../../CAMD ; $(MAKE) mex )
-	( cd ../../COLAMD ; $(MAKE) mex )
-	( cd ../../CCOLAMD ; $(MAKE) mex )
diff --git a/CHOLMOD/MATLAB/README.txt b/CHOLMOD/MATLAB/README.txt
index 18f1637..5fa96e3 100644
--- a/CHOLMOD/MATLAB/README.txt
+++ b/CHOLMOD/MATLAB/README.txt
@@ -1,5 +1,5 @@
 -----------------------
-Using CHOLMOD in MATLAB
+Using CHOLMOD in MATLAB                         http://www.suitesparse.com
 -----------------------
 
 See Contents.m for a description of each CHOLMOD function.
@@ -11,7 +11,8 @@ There are two ways of compiling the CHOLMOD mexFunctions.  The 2nd one is best.
 
 (1) Using the Unix "make" command.  This will compile the AMD, COLAMD, CCOLAMD,
     and CHOLMOD libraries (*.a).  You must first add -fexceptions to the
-    CFLAGS definition in UFconfig/UFconfig.mk first (for Linux).  Otherwise,
+    CFLAGS definition in SuiteSparse_config/SuiteSparse_config.mk first
+    (for Linux).  Otherwise,
     MATLAB will not be able to handle exceptions properly (CHOLMOD may terminate
     MATLAB if it encounters an error).  The METIS library must also be compiled
     with -fexceptions (see metis-4.0/Makefile.in).
@@ -44,7 +45,7 @@ your MATLAB command window to test your newly compiling CHOLMOD functions.
 Test/cholmod_test.m runs the test suite for the MATLAB interface to CHOLMOD.
 It requires the "UFget" interface to the UF sparse matrix collection, but
 provides a more extensive test for CHOLMOD.  To obtain a copy of UFget, see
-http://www.cise.ufl.edu/research/sparse .
+http://www.suitesparse.com .
 
 ----------------------------------------
 Using AMD, CCOLAMD, and COLAMD in MATLAB
diff --git a/CHOLMOD/MATLAB/Test/Contents.m b/CHOLMOD/MATLAB/Test/Contents.m
index 828f1e7..0a64514 100644
--- a/CHOLMOD/MATLAB/Test/Contents.m
+++ b/CHOLMOD/MATLAB/Test/Contents.m
@@ -36,9 +36,12 @@
 %   test28        - test nesdis
 %   testmm        - compare mread and mmread for entire Matrix Market collection
 %   testsolve     - test CHOLMOD and compare with x=A\b 
+%   ltest         - test lxbpattern
+%   lxtest        - test lsubsolve
+%   ltest2        - test lsubsolve
 %
 % Example:
 %   cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
diff --git a/CHOLMOD/MATLAB/Test/Results.mat b/CHOLMOD/MATLAB/Test/Results.mat
deleted file mode 100644
index 63f83a3..0000000
Binary files a/CHOLMOD/MATLAB/Test/Results.mat and /dev/null differ
diff --git a/CHOLMOD/MATLAB/Test/cholmod_test.m b/CHOLMOD/MATLAB/Test/cholmod_test.m
index 9f8eed2..1dded81 100644
--- a/CHOLMOD/MATLAB/Test/cholmod_test.m
+++ b/CHOLMOD/MATLAB/Test/cholmod_test.m
@@ -42,13 +42,15 @@ function cholmod_test (nmat, do_diary)
 % test25: test sdmult on a large matrix
 % test26: test logical full and sparse matrices
 % test27: test nesdis
+% ltest:  test lxbpattern
+% lxtest: test lsubsolve
 %
 % See also test0, test1, ... test28.
 
 % This extensive test is not included:
 % test28: test nesdis
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 2)
     do_diary = 0 ;
@@ -104,55 +106,57 @@ catch
     do_metis = 0 ;
 end
 
-h = waitbar (0.5/32, 'CHOLMOD demo:') ;
+tt = 34 ;
+
+h = waitbar (0.5/tt, 'CHOLMOD demo:') ;
 
 try
 
-    cholmod_demo                    ; waitbar ( 1/32, h, 'CHOLMOD graph demo');
+    cholmod_demo                    ; waitbar ( 1/tt, h, 'CHOLMOD graph demo');
     if (do_metis)
         graph_demo ;
     end
-    waitbar ( 2/32, h, 'CHOLMOD test0') ;
-    test0 (nmat)                    ; waitbar ( 3/32, h, 'CHOLMOD test1') ;
-    test1                           ; waitbar ( 4/32, h, 'CHOLMOD test2') ;
-    test2                           ; waitbar ( 5/32, h, 'CHOLMOD test3') ;
-    test3                           ; waitbar ( 6/32, h, 'CHOLMOD test4') ;
-    test4                           ; waitbar ( 7/32, h, 'CHOLMOD test5') ;
-    test5                           ; waitbar ( 8/32, h, 'CHOLMOD test6') ;
-    test6                           ; waitbar ( 9/32, h, 'CHOLMOD test7') ;
-    test7                           ; waitbar (10/32, h, 'CHOLMOD test8') ;
+    waitbar ( 2/tt, h, 'CHOLMOD test0') ;
+    test0 (nmat)                    ; waitbar ( 3/tt, h, 'CHOLMOD test1') ;
+    test1                           ; waitbar ( 4/tt, h, 'CHOLMOD test2') ;
+    test2                           ; waitbar ( 5/tt, h, 'CHOLMOD test3') ;
+    test3                           ; waitbar ( 6/tt, h, 'CHOLMOD test4') ;
+    test4                           ; waitbar ( 7/tt, h, 'CHOLMOD test5') ;
+    test5                           ; waitbar ( 8/tt, h, 'CHOLMOD test6') ;
+    test6                           ; waitbar ( 9/tt, h, 'CHOLMOD test7') ;
+    test7                           ; waitbar (10/tt, h, 'CHOLMOD test8') ;
 
     if (do_metis)
         % these tests require METIS
-        test8 (nmat)                ; waitbar (11/32, h, 'CHOLMOD test9') ;
+        test8 (nmat)                ; waitbar (11/tt, h, 'CHOLMOD test9') ;
         test9 ;
     end
 
-    waitbar (12/32, h, 'CHOLMOD test10') ;
-    test10 (nmat)                   ; waitbar (13/32, h, 'CHOLMOD test11') ;
-    test11 (nmat)                   ; waitbar (14/32, h, 'CHOLMOD test12') ;
-    test12 (nmat)                   ; waitbar (15/32, h, 'CHOLMOD test13') ;
-    test13                          ; waitbar (16/32, h, 'CHOLMOD test14') ;
+    waitbar (12/tt, h, 'CHOLMOD test10') ;
+    test10 (nmat)                   ; waitbar (13/tt, h, 'CHOLMOD test11') ;
+    test11 (nmat)                   ; waitbar (14/tt, h, 'CHOLMOD test12') ;
+    test12 (nmat)                   ; waitbar (15/tt, h, 'CHOLMOD test13') ;
+    test13                          ; waitbar (16/tt, h, 'CHOLMOD test14') ;
 
     if (do_metis)
         % this test requires METIS
         test14 (2*nmat) ;
     end
 
-    waitbar (17/32, h, 'CHOLMOD test15') ;
-    test15 (2*nmat)                 ; waitbar (18/32, h, 'CHOLMOD test16') ;
-    test16                          ; waitbar (19/32, h, 'CHOLMOD test17') ;
-    test17                          ; waitbar (20/32, h, 'CHOLMOD test18') ;
-    test18                          ; waitbar (21/32, h, 'CHOLMOD test19') ;
-    test19                          ; waitbar (22/32, h, 'CHOLMOD test20') ;
-    test20                          ; waitbar (23/32, h, 'CHOLMOD test21') ;
-    test21                          ; waitbar (24/32, h, 'CHOLMOD test22a') ;
-    test22 (nmat)                   ; waitbar (25/32, h, 'CHOLMOD test22b') ;
-    test22 (0)                      ; waitbar (26/32, h, 'CHOLMOD test23') ;
-    test23                          ; waitbar (27/32, h, 'CHOLMOD test24') ;
-    test24                          ; waitbar (28/32, h, 'CHOLMOD test25') ;
-    test25                          ; waitbar (29/32, h, 'CHOLMOD test26') ;
-    test26 (do_metis)               ; waitbar (31/32, h, 'CHOLMOD test27') ;
+    waitbar (17/tt, h, 'CHOLMOD test15') ;
+    test15 (2*nmat)                 ; waitbar (18/tt, h, 'CHOLMOD test16') ;
+    test16                          ; waitbar (19/tt, h, 'CHOLMOD test17') ;
+    test17                          ; waitbar (20/tt, h, 'CHOLMOD test18') ;
+    test18                          ; waitbar (21/tt, h, 'CHOLMOD test19') ;
+    test19                          ; waitbar (22/tt, h, 'CHOLMOD test20') ;
+    test20                          ; waitbar (23/tt, h, 'CHOLMOD test21') ;
+    test21                          ; waitbar (24/tt, h, 'CHOLMOD test22a') ;
+    test22 (nmat)                   ; waitbar (25/tt, h, 'CHOLMOD test22b') ;
+    test22 (0)                      ; waitbar (26/tt, h, 'CHOLMOD test23') ;
+    test23                          ; waitbar (27/tt, h, 'CHOLMOD test24') ;
+    test24                          ; waitbar (28/tt, h, 'CHOLMOD test25') ;
+    test25                          ; waitbar (29/tt, h, 'CHOLMOD test26') ;
+    test26 (do_metis)               ; waitbar (31/tt, h, 'CHOLMOD test27') ;
 
     if (do_metis)
         test27 ;
@@ -161,7 +165,10 @@ try
     % this test requires METIS
     % test28 ;                      % (disabled)
 
-    waitbar (32/32, h, 'CHOLMOD test done') ;
+    ltest                           ; waitbar (32/tt, h, 'CHOLMOD ltest') ;
+    lxtest                          ; waitbar (33/tt, h, 'CHOLMOD lxtest') ;
+
+    waitbar (tt/tt, h, 'CHOLMOD test done') ;
     fprintf ('=============================================================\n');
     fprintf ('all tests passed\n') ;
 
diff --git a/CHOLMOD/MATLAB/Test/cholmod_test_11-May-2007_13-29-15.txt b/CHOLMOD/MATLAB/Test/cholmod_test_11-May-2007_13-29-15.txt
deleted file mode 100644
index 08b4651..0000000
--- a/CHOLMOD/MATLAB/Test/cholmod_test_11-May-2007_13-29-15.txt
+++ /dev/null
@@ -1,12324 +0,0 @@
-Running CHOLMOD tests.
-diary cholmod_test_11-May-2007_13-29-15.txt
-
- CHOLMOD_TEST test the CHOLMOD mexFunctions
- 
-  Example:
-  cholmod_test(nmat)
- 
-  The UFget interface to the UF sparse matrix collection is required.
- 
-  nmat is optional.  If present, it is the # of matrices used in
-    tests 0, 8, 10, 11, 12, and 12.  tests 14 and 15 use 2*nmat matrices.
-    default nmat is 50.
- 
-  cholmod_demo: run tests on a few random matrices
-  graph_demo: graph partitioning demo
-  test0:  test most CHOLMOD functions
-  test1:  test sparse2
-  test2:  test sparse2
-  test3:  test sparse on int8, int16, and logical
-  test4:  test cholmod2 with multiple and sparse right-hand-sides
-  test5:  test sparse2
-  test6:  test sparse with large matrix, both real and complex, compare w/MATLAB
-  test7:  test sparse2
-  test8:  order many sparse matrices, test symbfact2, compare amd and metis
-  test9:  test metis, etree, bisect, nesdis
-  test10: test cholmod2's backslash on real and complex matrices
-  test11: test analyze, compare CHOLMOD and MATLAB, save results in Results.mat
-  test12: test etree2 and compare with etree
-  test13: test cholmod2 and MATLAB on large tridiagonal matrices
-  test14: test metis, symbfact2, and etree2
-  test15: test symbfact2 vs MATLAB
-  test16: test cholmod2 on a large matrix
-  test17: test lchol on a few large matrices
-  test18: test cholmod2 on a few large matrices
-  test19: look for NaN's from lchol (caused by Intel MKL 7.x bug)
-  test20: test symbfact2, cholmod2, and lu on a few large matrices
-  test21: test cholmod2 on diagonal or ill-conditioned matrices
-  test22: test chol and chol2 and singular and indefinite matrices
-  test23: test chol and cholmod2 on the sparse matrix used in "bench"
-  test24: test sdmult
-  test25: test sdmult on a large matrix
-  test26: test logical full and sparse matrices
-  test27: test nesdis
- 
-  See also test0, test1, ... test28.
-
-Added the following paths.  You may wish to add them
-permanently using the MATLAB pathtool command.
-/amd/birch/export/research07/sparse/SuiteSparse/CHOLMOD/MATLAB
-/amd/birch/export/research07/sparse/SuiteSparse/AMD/MATLAB
-/amd/birch/export/research07/sparse/SuiteSparse/COLAMD
-/amd/birch/export/research07/sparse/SuiteSparse/CCOLAMD
-/amd/birch/export/research07/sparse/SuiteSparse/CAMD/MATLAB
-
-
---------- Hit enter to contine: 
- CHOLMOD_DEMO a demo for CHOLMOD
- 
-  Tests CHOLMOD with various randomly-generated matrices, and the west0479
-  matrix distributed with MATLAB.  Random matrices are not good test cases,
-  but they are easily generated.  It also compares CHOLMOD and MATLAB on the
-  sparse matrix problem used in the MATLAB BENCH command.
- 
-  See CHOLMOD/MATLAB/Test/test_all.m for a lengthy test using matrices from
-  the UF sparse matrix collection.
- 
-  Example:
-    cholmod_demo
- 
-  See also BENCH
-
-
---------------------------------------------------------------
-cholmod_demo: sparse matrix, n 479 nnz 7551
-CHOLMOD lchol(sparse(A))       time:   0.00    mflop     83.4
-CHOLMOD ldlchol(sparse(A))     time:   0.00    mflop     78.5
-CHOLMOD ldlupdate(sparse(A),C) time:   0.01 (rank-1, C dense)
-err: 8.87659e-16
-MATLAB  chol(sparse(A))        time:   0.00    mflop    133.1
-MATLAB  chol(full(A))          time:   0.02    mflop     16.0
-MATLAB  cholupdate(full(A),C)  time:   0.00 (rank-1)
-err: 2.78134e-16
-CHOLMOD lchol(sparse(A)) speedup over chol(sparse(A)):    0.6
-CHOLMOD sparse update speedup vs MATLAB DENSE update:     0.3
-
---------------------------------------------------------------
-cholmod_demo: sparse matrix, n 2000 nnz 17946
-CHOLMOD lchol(sparse(A))       time:   0.13    mflop   1720.7
-CHOLMOD ldlchol(sparse(A))     time:   0.13    mflop   1697.2
-CHOLMOD ldlupdate(sparse(A),C) time:   0.16 (rank-1, C dense)
-err: 1.10497e-14
-MATLAB  chol(sparse(A))        time:   0.43    mflop    518.5
-MATLAB  chol(full(A))          time:   1.61    mflop    138.4
-MATLAB  cholupdate(full(A),C)  time:   0.16 (rank-1)
-err: 2.58727e-14
-CHOLMOD lchol(sparse(A)) speedup over chol(sparse(A)):    3.3
-CHOLMOD sparse update speedup vs MATLAB DENSE update:     1.0
-
---------------------------------------------------------------
-cholmod_demo: dense matrix, n 100
-CHOLMOD lchol(sparse(A))       time:   0.00    mflop    419.8
-CHOLMOD ldlchol(sparse(A))     time:   0.00    mflop    373.9
-CHOLMOD ldlupdate(sparse(A),C) time:   0.00 (rank-1, C dense)
-err: 2.67101e-16
-MATLAB  chol(sparse(A))        time:   0.00    mflop    313.0
-MATLAB  chol(full(A))          time:   0.00    mflop    735.5
-MATLAB  cholupdate(full(A),C)  time:   0.00 (rank-1)
-err: 2.63339e-16
-CHOLMOD lchol(sparse(A)) speedup over chol(sparse(A)):    1.3
-CHOLMOD sparse update speedup vs MATLAB DENSE update:     1.0
-
---------------------------------------------------------------
-cholmod_demo: dense matrix, n 2000
-CHOLMOD lchol(sparse(A))       time:   2.21    mflop   1208.8
-CHOLMOD ldlchol(sparse(A))     time:   2.24    mflop   1192.4
-CHOLMOD ldlupdate(sparse(A),C) time:   0.15 (rank-1, C dense)
-err: 1.45631e-15
-MATLAB  chol(sparse(A))        time:   2.66    mflop   1004.9
-MATLAB  chol(full(A))          time:   1.60    mflop   1672.4
-MATLAB  cholupdate(full(A),C)  time:   0.16 (rank-1)
-err: 1.42948e-15
-CHOLMOD lchol(sparse(A)) speedup over chol(sparse(A)):    1.2
-CHOLMOD sparse update speedup vs MATLAB DENSE update:     1.1
-
---------------------------------------------------------------
-
-With the matrix used in the MATLAB 7.2 "bench" program.
-No fill-reducing orderings are used; type "help bench" for more information.
-MATLAB  x=A\b      time:   4.4297  resid:    2e-13
-CHOLMOD x=A\b      time:   2.3991  resid:    2e-13
-CHOLMOD speedup:     1.85
-
-cholmod_demo finished: all tests passed
-
-For more accurate timings, run this test again.
-=================================================================
-test0: test most CHOLMOD functions
-Testing CHOLMOD with AMD and the UF sparse matrix collection
-test matrices sorted by dimension:
-1440: Oberwolfach          LFAT5                          14 1
-1438: Oberwolfach          LF10                           18 1
- 436: FIDAP                ex5                            27 1
-  23: HB                   bcsstk01                       48 1
- 872: Pothen               mesh1e1                        48 1
- 873: Pothen               mesh1em1                       48 1
- 874: Pothen               mesh1em6                       48 1
-  24: HB                   bcsstk02                       66 1
-  57: HB                   bcsstm02                       66 1
- 220: HB                   nos4                          100 1
-  25: HB                   bcsstk03                      112 1
-1506: Pajek                Journals                      124 1
-  26: HB                   bcsstk04                      132 1
-  44: HB                   bcsstk22                      138 1
-  72: HB                   bcsstm22                      138 1
- 206: HB                   lund_a                        147 1
- 207: HB                   lund_b                        147 1
-  27: HB                   bcsstk05                      153 1
-  60: HB                   bcsstm05                      153 1
- 217: HB                   nos1                          237 1
- 877: Pothen               mesh3e1                       289 1
- 878: Pothen               mesh3em5                      289 1
- 875: Pothen               mesh2e1                       306 1
- 876: Pothen               mesh2em5                      306 1
- 229: HB                   plat362                       362 1
- 315: Bai                  mhdb416                       416 1
-  28: HB                   bcsstk06                      420 1
-  29: HB                   bcsstk07                      420 1
-  61: HB                   bcsstm06                      420 1
-  62: HB                   bcsstm07                      420 1
- 221: HB                   nos5                          468 1
-  42: HB                   bcsstk20                      485 1
-  70: HB                   bcsstm20                      485 1
-   2: HB                   494_bus                       494 1
- 339: Boeing               bcsstk34                      588 1
-   3: HB                   662_bus                       662 1
- 222: HB                   nos6                          675 1
-   4: HB                   685_bus                       685 1
- 357: Boeing               msc00726                      726 1
- 223: HB                   nos7                          729 1
-  41: HB                   bcsstk19                      817 1
-  69: HB                   bcsstm19                      817 1
- 159: HB                   gr_30_30                      900 1
- 218: HB                   nos2                          957 1
- 219: HB                   nos3                          960 1
- 358: Boeing               msc01050                     1050 1
-  30: HB                   bcsstk08                     1074 1
-  63: HB                   bcsstm08                     1074 1
-  31: HB                   bcsstk09                     1083 1
-  64: HB                   bcsstm09                     1083 1
-
-================== Problem: 1440: Oberwolfach/LFAT5  n: 14 nnz: 46
-title: Oberwolfach: linear 1D beam
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0002  nnz(L): 33
-CHOLMOD time: R=chol2      0.0002  nnz(R): 33
-MATLAB time:  R=chol       0.0002  nnz(R): 33
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 33
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.88 L:     0.91
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.79
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 33
-CHOLMOD time: [L,,q]=ldlchol     0.0002  nnz(L): 33
-
-CHOLMOD time: rank-8 ldlupdate        0.0002  nnz(L) 33  no fill-in
-CHOLMOD time: rank-4 ldldowndate      0.0002  nnz(L) 33  no fill-in
-after resymbol: 33
-CHOLMOD residual:  2.3e-21
-MATLAB  residual:  6.0e-21
-CHOLMOD residual:  6.7e-21 (sparse b)
-MATLAB  residual:  1.1e-20 (sparse b)
-
-================== Problem: 1438: Oberwolfach/LF10  n: 18 nnz: 82
-title: Oberwolfach: linear 1D beam
-time: amd         0.0000
-CHOLMOD time: L=lchol      0.0000  nnz(L): 58
-CHOLMOD time: R=chol2      0.0000  nnz(R): 58
-MATLAB time:  R=chol       0.0000  nnz(R): 58
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 58
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.84 L:     1.09
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      4.67
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 58
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 58
-
-CHOLMOD time: rank-6 ldlupdate        0.0001  nnz(L) 65  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0000  nnz(L) 65  no fill-in
-after resymbol: 58
-CHOLMOD residual:  5.8e-18
-MATLAB  residual:  3.3e-18
-CHOLMOD residual:  8.9e-18 (sparse b)
-MATLAB  residual:  3.0e-18 (sparse b)
-
-================== Problem: 436: FIDAP/ex5  n: 27 nnz: 279
-title:  TEST MATRIX FROM FIDAP: EX5.MAT
-time: amd         0.0000
-CHOLMOD time: L=lchol      0.0000  nnz(L): 153
-CHOLMOD time: R=chol2      0.0001  nnz(R): 153
-MATLAB time:  R=chol       0.0001  nnz(R): 153
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 153
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.91 L:     1.11
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      3.83
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 153
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 153
-
-CHOLMOD time: rank-4 ldlupdate        0.0001  nnz(L) 213  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0000  nnz(L) 213  no fill-in
-after resymbol: 153
-CHOLMOD residual:  2.0e-15
-MATLAB  residual:  2.0e-15
-CHOLMOD residual:  1.5e-15 (sparse b)
-MATLAB  residual:  1.2e-15 (sparse b)
-
-================== Problem: 23: HB/bcsstk01  n: 48 nnz: 400
-title: SYMMETRIC STIFFNESS MATRIX SMALL GENERALIZED EIGENVALUE PROBLEM
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 489
-CHOLMOD time: R=chol2      0.0001  nnz(R): 489
-MATLAB time:  R=chol       0.0001  nnz(R): 489
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 489
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.93 L:     1.04
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.45
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 489
-CHOLMOD time: [L,,q]=ldlchol     0.0002  nnz(L): 489
-
-CHOLMOD time: rank-3 ldlupdate        0.0001  nnz(L) 518  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0000  nnz(L) 518  no fill-in
-after resymbol: 489
-CHOLMOD residual:  4.9e-22
-MATLAB  residual:  3.8e-22
-CHOLMOD residual:  2.8e-22 (sparse b)
-MATLAB  residual:  3.7e-22 (sparse b)
-
-================== Problem: 872: Pothen/mesh1e1  n: 48 nnz: 306
-title: mesh1e1, with coordinates.  From NASA, collected by Alex Pothen
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 336
-CHOLMOD time: R=chol2      0.0001  nnz(R): 336
-MATLAB time:  R=chol       0.0001  nnz(R): 336
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 336
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.87 L:     1.02
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.80
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 336
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 336
-
-CHOLMOD time: rank-1 ldlupdate        0.0001  nnz(L) 337  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0000  nnz(L) 337  no fill-in
-after resymbol: 336
-CHOLMOD residual:  3.1e-16
-MATLAB  residual:  4.4e-16
-CHOLMOD residual:  3.9e-16 (sparse b)
-MATLAB  residual:  4.1e-16 (sparse b)
-
-================== Problem: 873: Pothen/mesh1em1  n: 48 nnz: 306
-title: mesh1em1, with coordinates.  From NASA, collected by Alex Pothen
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 336
-CHOLMOD time: R=chol2      0.0001  nnz(R): 336
-MATLAB time:  R=chol       0.0001  nnz(R): 336
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 336
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.87 L:     0.99
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.82
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 336
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 336
-
-CHOLMOD time: rank-2 ldlupdate        0.0001  nnz(L) 370  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0000  nnz(L) 370  no fill-in
-after resymbol: 336
-CHOLMOD residual:  1.7e-16
-MATLAB  residual:  1.4e-16
-CHOLMOD residual:  1.5e-16 (sparse b)
-MATLAB  residual:  1.9e-16 (sparse b)
-
-================== Problem: 874: Pothen/mesh1em6  n: 48 nnz: 306
-title: mesh1em6, with coordinates.  From NASA, collected by Alex Pothen
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 336
-CHOLMOD time: R=chol2      0.0001  nnz(R): 336
-MATLAB time:  R=chol       0.0001  nnz(R): 336
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 336
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.87 L:     0.68
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.89
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 336
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 336
-
-CHOLMOD time: rank-4 ldlupdate        0.0001  nnz(L) 371  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0000  nnz(L) 371  no fill-in
-after resymbol: 336
-CHOLMOD residual:  4.8e-16
-MATLAB  residual:  4.8e-16
-CHOLMOD residual:  5.3e-16 (sparse b)
-MATLAB  residual:  4.4e-16 (sparse b)
-
-================== Problem: 24: HB/bcsstk02  n: 66 nnz: 4356
-title: SYMMETRIC STIFFNESS MATRIX, SMALL OIL RIG, STATICALLY CONDENSED
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0003  nnz(L): 2211
-CHOLMOD time: R=chol2      0.0004  nnz(R): 2211
-MATLAB time:  R=chol       0.0004  nnz(R): 2211
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 2211
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.93 L:     1.12
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.16
-CHOLMOD time: [L,,q]=lchol       0.0005  nnz(L): 2211
-CHOLMOD time: [L,,q]=ldlchol     0.0005  nnz(L): 2211
-
-CHOLMOD time: rank-4 ldlupdate        0.0001  nnz(L) 2211  no fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0001  nnz(L) 2211  no fill-in
-after resymbol: 2211
-CHOLMOD residual:  9.8e-17
-MATLAB  residual:  1.0e-16
-CHOLMOD residual:  4.3e-17 (sparse b)
-MATLAB  residual:  3.8e-17 (sparse b)
-
-================== Problem: 57: HB/bcsstm02  n: 66 nnz: 66
-title: SYMMETRIC MASS MATRIX, SMALL OIL RIG, STATICALLY CONDENSED
-time: amd         0.0000
-CHOLMOD time: L=lchol      0.0000  nnz(L): 66
-CHOLMOD time: R=chol2      0.0000  nnz(R): 66
-MATLAB time:  R=chol       0.0000  nnz(R): 66
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 66
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.84 L:     1.06
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      5.44
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 66
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 66
-
-CHOLMOD time: rank-7 ldlupdate        0.0001  nnz(L) 67  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0000  nnz(L) 67  no fill-in
-after resymbol: 66
-CHOLMOD residual:  2.4e-14
-MATLAB  residual:  3.2e-15
-CHOLMOD residual:  1.0e-14 (sparse b)
-MATLAB  residual:  6.4e-16 (sparse b)
-
-================== Problem: 220: HB/nos4  n: 100 nnz: 594
-title: SYMMETRIC MATRIX OF BEAM STRUCTURE, NOVEMBER 1982.
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 630
-CHOLMOD time: R=chol2      0.0001  nnz(R): 630
-MATLAB time:  R=chol       0.0001  nnz(R): 630
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 632
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.89 L:     0.99
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.13
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 632
-CHOLMOD time: [L,,q]=ldlchol     0.0002  nnz(L): 632
-
-CHOLMOD time: rank-3 ldlupdate        0.0001  nnz(L) 654  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0000  nnz(L) 654  no fill-in
-after resymbol: 632
-CHOLMOD residual:  9.2e-13
-MATLAB  residual:  8.5e-13
-CHOLMOD residual:  3.2e-13 (sparse b)
-MATLAB  residual:  2.4e-13 (sparse b)
-
-================== Problem: 25: HB/bcsstk03  n: 112 nnz: 640
-title: SYMMETRIC STIFFNESS MATRIX, SMALL TEST STRUCTURE
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 380
-CHOLMOD time: R=chol2      0.0001  nnz(R): 380
-MATLAB time:  R=chol       0.0001  nnz(R): 380
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 384
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.88 L:     0.96
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.86
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 380
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 384
-
-CHOLMOD time: rank-6 ldlupdate        0.0001  nnz(L) 445  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0000  nnz(L) 445  no fill-in
-after resymbol: 384
-CHOLMOD residual:  1.4e-22
-MATLAB  residual:  2.2e-22
-CHOLMOD residual:  9.8e-23 (sparse b)
-MATLAB  residual:  2.2e-22 (sparse b)
-
-================== Problem: 1506: Pajek/Journals  n: 124 nnz: 12068
-title: Pajek network: Slovenian journals 1999-2000
-time: amd         0.0003
-CHOLMOD time: L=lchol      0.0010  nnz(L): 6990
-CHOLMOD time: R=chol2      0.0013  nnz(R): 6990
-MATLAB time:  R=chol       0.0013  nnz(R): 6990
-MATLAB [..,R]=symbfact     0.0009  nnz(R): 6990
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.04 L:     1.25
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.84
-CHOLMOD time: [L,,q]=lchol       0.0017  nnz(L): 6990
-CHOLMOD time: [L,,q]=ldlchol     0.0017  nnz(L): 6990
-
-CHOLMOD time: rank-8 ldlupdate        0.0002  nnz(L) 6990  no fill-in
-CHOLMOD time: rank-4 ldldowndate      0.0002  nnz(L) 6990  no fill-in
-after resymbol: 6990
-CHOLMOD residual:  5.1e-19
-MATLAB  residual:  5.3e-19
-CHOLMOD residual:  2.5e-19 (sparse b)
-MATLAB  residual:  2.7e-19 (sparse b)
-
-================== Problem: 26: HB/bcsstk04  n: 132 nnz: 3648
-title: SYMMETRIC STIFFNESS MATRIX, OIL RIG, NOT CONDENSED (SAME MODEL AS X02)
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0005  nnz(L): 3291
-CHOLMOD time: R=chol2      0.0005  nnz(R): 3291
-MATLAB time:  R=chol       0.0005  nnz(R): 3291
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 3293
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.02 L:     1.01
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.85
-CHOLMOD time: [L,,q]=lchol       0.0007  nnz(L): 3291
-CHOLMOD time: [L,,q]=ldlchol     0.0007  nnz(L): 3293
-
-CHOLMOD time: rank-1 ldlupdate        0.0002  nnz(L) 3570  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0001  nnz(L) 3570  no fill-in
-after resymbol: 3293
-CHOLMOD residual:  1.4e-18
-MATLAB  residual:  1.6e-18
-CHOLMOD residual:  4.2e-19 (sparse b)
-MATLAB  residual:  3.5e-19 (sparse b)
-
-================== Problem: 44: HB/bcsstk22  n: 138 nnz: 696
-title: SYMMETRIC STIFFNESS MATRIX - TEXTILE LOOM FRAME
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 680
-CHOLMOD time: R=chol2      0.0001  nnz(R): 680
-MATLAB time:  R=chol       0.0001  nnz(R): 680
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 680
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.91 L:     0.99
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.08
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 680
-CHOLMOD time: [L,,q]=ldlchol     0.0002  nnz(L): 680
-
-CHOLMOD time: rank-6 ldlupdate        0.0001  nnz(L) 685  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 685  no fill-in
-after resymbol: 680
-CHOLMOD residual:  1.3e-18
-MATLAB  residual:  1.2e-18
-CHOLMOD residual:  2.3e-19 (sparse b)
-MATLAB  residual:  2.2e-19 (sparse b)
-
-================== Problem: 72: HB/bcsstm22  n: 138 nnz: 138
-title: SYMMETRIC MASS      MATRIX - TEXTILE LOOM FRAME
-time: amd         0.0000
-CHOLMOD time: L=lchol      0.0000  nnz(L): 138
-CHOLMOD time: R=chol2      0.0001  nnz(R): 138
-MATLAB time:  R=chol       0.0001  nnz(R): 138
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 138
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.90 L:     1.08
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      3.65
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 138
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 138
-
-CHOLMOD time: rank-5 ldlupdate        0.0001  nnz(L) 139  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0000  nnz(L) 139  no fill-in
-after resymbol: 138
-CHOLMOD residual:  5.7e-10
-MATLAB  residual:  1.2e-13
-CHOLMOD residual:  1.5e-11 (sparse b)
-MATLAB  residual:  6.7e-14 (sparse b)
-
-================== Problem: 206: HB/lund_a  n: 147 nnz: 2449
-title: SYMMETRIC MATRIX A OF LUND EIGENVALUE PROBLEM, MAY 1974
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0003  nnz(L): 2339
-CHOLMOD time: R=chol2      0.0003  nnz(R): 2339
-MATLAB time:  R=chol       0.0003  nnz(R): 2339
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 2339
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.99 L:     0.96
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.09
-CHOLMOD time: [L,,q]=lchol       0.0004  nnz(L): 2339
-CHOLMOD time: [L,,q]=ldlchol     0.0004  nnz(L): 2339
-
-CHOLMOD time: rank-5 ldlupdate        0.0001  nnz(L) 2354  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0001  nnz(L) 2354  no fill-in
-after resymbol: 2339
-CHOLMOD residual:  1.1e-18
-MATLAB  residual:  8.2e-19
-CHOLMOD residual:  5.8e-20 (sparse b)
-MATLAB  residual:  6.4e-20 (sparse b)
-
-================== Problem: 207: HB/lund_b  n: 147 nnz: 2441
-title: SYMMETRIC MATRIX B OF LUND EIGENVALUE PROBLEM, MAY 1974
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0003  nnz(L): 2340
-CHOLMOD time: R=chol2      0.0003  nnz(R): 2340
-MATLAB time:  R=chol       0.0003  nnz(R): 2340
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 2340
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.07 L:     1.07
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.12
-CHOLMOD time: [L,,q]=lchol       0.0004  nnz(L): 2340
-CHOLMOD time: [L,,q]=ldlchol     0.0004  nnz(L): 2340
-
-CHOLMOD time: rank-6 ldlupdate        0.0001  nnz(L) 2481  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 2481  no fill-in
-after resymbol: 2340
-CHOLMOD residual:  1.2e-16
-MATLAB  residual:  1.2e-16
-CHOLMOD residual:  8.7e-17 (sparse b)
-MATLAB  residual:  8.7e-17 (sparse b)
-
-================== Problem: 27: HB/bcsstk05  n: 153 nnz: 2423
-title: SYMMETRIC STIFFNESS MATRIX, TRANSMISSION TOWER, LUMPED MASSES
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0003  nnz(L): 2326
-CHOLMOD time: R=chol2      0.0003  nnz(R): 2326
-MATLAB time:  R=chol       0.0003  nnz(R): 2326
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 2326
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.97 L:     0.90
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.05
-CHOLMOD time: [L,,q]=lchol       0.0005  nnz(L): 2326
-CHOLMOD time: [L,,q]=ldlchol     0.0005  nnz(L): 2326
-
-CHOLMOD time: rank-4 ldlupdate        0.0002  nnz(L) 2572  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0001  nnz(L) 2572  no fill-in
-after resymbol: 2326
-CHOLMOD residual:  1.5e-18
-MATLAB  residual:  1.2e-18
-CHOLMOD residual:  3.8e-19 (sparse b)
-MATLAB  residual:  3.3e-19 (sparse b)
-
-================== Problem: 60: HB/bcsstm05  n: 153 nnz: 153
-title: SYMMETRIC MASS MATRIX, TRANSMISSION TOWER, LUMPED MASSES
-time: amd         0.0000
-CHOLMOD time: L=lchol      0.0001  nnz(L): 153
-CHOLMOD time: R=chol2      0.0001  nnz(R): 153
-MATLAB time:  R=chol       0.0001  nnz(R): 153
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 153
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.81 L:     0.94
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      3.33
-CHOLMOD time: [L,,q]=lchol       0.0001  nnz(L): 153
-CHOLMOD time: [L,,q]=ldlchol     0.0001  nnz(L): 153
-
-CHOLMOD time: rank-1 ldlupdate        0.0001  nnz(L) 154  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0000  nnz(L) 154  no fill-in
-after resymbol: 153
-CHOLMOD residual:  1.8e-15
-MATLAB  residual:  1.7e-15
-CHOLMOD residual:  8.8e-16 (sparse b)
-MATLAB  residual:  8.8e-16 (sparse b)
-
-================== Problem: 217: HB/nos1  n: 237 nnz: 1017
-title: SYMMETRIC MATRIX, FE APPROXIMATION TO BIHARMONIC OPERATOR ON BEAM.
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 704
-CHOLMOD time: R=chol2      0.0001  nnz(R): 704
-MATLAB time:  R=chol       0.0001  nnz(R): 704
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 704
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.88 L:     0.92
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.11
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 704
-CHOLMOD time: [L,,q]=ldlchol     0.0002  nnz(L): 704
-
-CHOLMOD time: rank-3 ldlupdate        0.0001  nnz(L) 896  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0001  nnz(L) 896  no fill-in
-after resymbol: 704
-CHOLMOD residual:  2.1e-18
-MATLAB  residual:  2.2e-18
-CHOLMOD residual:  2.5e-19 (sparse b)
-MATLAB  residual:  2.7e-19 (sparse b)
-
-================== Problem: 877: Pothen/mesh3e1  n: 289 nnz: 1377
-title: mesh3e1, with coordinates.  From NASA, collected by Alex Pothen
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0003  nnz(L): 2433
-CHOLMOD time: R=chol2      0.0003  nnz(R): 2433
-MATLAB time:  R=chol       0.0003  nnz(R): 2433
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 2433
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.92 L:     0.94
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.18
-CHOLMOD time: [L,,q]=lchol       0.0006  nnz(L): 2433
-CHOLMOD time: [L,,q]=ldlchol     0.0005  nnz(L): 2433
-
-CHOLMOD time: rank-4 ldlupdate        0.0001  nnz(L) 2433  no fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0001  nnz(L) 2433  no fill-in
-after resymbol: 2433
-CHOLMOD residual:  2.8e-15
-MATLAB  residual:  2.9e-15
-CHOLMOD residual:  3.9e-15 (sparse b)
-MATLAB  residual:  3.8e-15 (sparse b)
-
-================== Problem: 878: Pothen/mesh3em5  n: 289 nnz: 1377
-title: mesh3em5, with coordinates.  From NASA, collected by Alex Pothen
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0003  nnz(L): 2433
-CHOLMOD time: R=chol2      0.0003  nnz(R): 2433
-MATLAB time:  R=chol       0.0003  nnz(R): 2433
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 2433
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.92 L:     0.93
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.17
-CHOLMOD time: [L,,q]=lchol       0.0006  nnz(L): 2433
-CHOLMOD time: [L,,q]=ldlchol     0.0006  nnz(L): 2433
-
-CHOLMOD time: rank-7 ldlupdate        0.0002  nnz(L) 2538  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 2538  no fill-in
-after resymbol: 2433
-CHOLMOD residual:  4.7e-15
-MATLAB  residual:  4.9e-15
-CHOLMOD residual:  5.3e-15 (sparse b)
-MATLAB  residual:  5.1e-15 (sparse b)
-
-================== Problem: 875: Pothen/mesh2e1  n: 306 nnz: 2018
-title: mesh2e1, with coordinates.  From NASA, collected by Alex Pothen
-time: amd         0.0003
-CHOLMOD time: L=lchol      0.0004  nnz(L): 3224
-CHOLMOD time: R=chol2      0.0004  nnz(R): 3224
-MATLAB time:  R=chol       0.0004  nnz(R): 3224
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 3224
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.96 L:     0.96
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.06
-CHOLMOD time: [L,,q]=lchol       0.0007  nnz(L): 3224
-CHOLMOD time: [L,,q]=ldlchol     0.0007  nnz(L): 3224
-
-CHOLMOD time: rank-7 ldlupdate        0.0002  nnz(L) 3508  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 3508  no fill-in
-after resymbol: 3224
-CHOLMOD residual:  1.8e-16
-MATLAB  residual:  2.2e-16
-CHOLMOD residual:  4.0e-16 (sparse b)
-MATLAB  residual:  3.9e-16 (sparse b)
-
-================== Problem: 876: Pothen/mesh2em5  n: 306 nnz: 2018
-title: mesh2em5, with coordinates.  From NASA, collected by Alex Pothen
-time: amd         0.0003
-CHOLMOD time: L=lchol      0.0004  nnz(L): 3224
-CHOLMOD time: R=chol2      0.0004  nnz(R): 3224
-MATLAB time:  R=chol       0.0004  nnz(R): 3224
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 3224
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.03 L:     1.04
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.01
-CHOLMOD time: [L,,q]=lchol       0.0007  nnz(L): 3224
-CHOLMOD time: [L,,q]=ldlchol     0.0007  nnz(L): 3224
-
-CHOLMOD time: rank-7 ldlupdate        0.0001  nnz(L) 3224  no fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 3224  no fill-in
-after resymbol: 3224
-CHOLMOD residual:  1.7e-16
-MATLAB  residual:  2.2e-16
-CHOLMOD residual:  2.2e-16 (sparse b)
-MATLAB  residual:  3.0e-16 (sparse b)
-
-================== Problem: 229: HB/plat362  n: 362 nnz: 5786
-title: SPLATZMAN FINITE DIFFERENCE MODEL OF ATLANTICOCEAN
-time: amd         0.0004
-CHOLMOD time: L=lchol      0.0010  nnz(L): 8060
-CHOLMOD time: R=chol2      0.0010  nnz(R): 8060
-MATLAB time:  R=chol       0.0011  nnz(R): 8060
-MATLAB [..,R]=symbfact     0.0007  nnz(R): 8060
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.07 L:     1.12
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.70
-CHOLMOD time: [L,,q]=lchol       0.0015  nnz(L): 8060
-CHOLMOD time: [L,,q]=ldlchol     0.0015  nnz(L): 8060
-
-CHOLMOD time: rank-5 ldlupdate        0.0007  nnz(L) 9872  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0002  nnz(L) 9872  no fill-in
-after resymbol: 8060
-CHOLMOD residual:  3.5e-05
-MATLAB  residual:  1.4e-05
-CHOLMOD residual:  2.6e-05 (sparse b)
-MATLAB  residual:  1.0e-05 (sparse b)
-
-================== Problem: 315: Bai/mhdb416  n: 416 nnz: 2312
-title: MAGNETO-HYDRO-DYNAMICS ALFVEN SPECTRAL PROBLEM
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0002  nnz(L): 1364
-CHOLMOD time: R=chol2      0.0002  nnz(R): 1364
-MATLAB time:  R=chol       0.0002  nnz(R): 1364
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 1364
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.87 L:     0.85
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.53
-CHOLMOD time: [L,,q]=lchol       0.0004  nnz(L): 1364
-CHOLMOD time: [L,,q]=ldlchol     0.0004  nnz(L): 1364
-
-CHOLMOD time: rank-5 ldlupdate        0.0001  nnz(L) 1369  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0001  nnz(L) 1369  no fill-in
-after resymbol: 1364
-CHOLMOD residual:  6.7e-11
-MATLAB  residual:  7.0e-11
-CHOLMOD residual:  3.4e-11 (sparse b)
-MATLAB  residual:  1.6e-11 (sparse b)
-
-================== Problem: 28: HB/bcsstk06  n: 420 nnz: 7860
-title: SYMMETRIC STIFFNESS MATRIX, MEDIUM TEST PROBLEM, LUMPED MASSES
-time: amd         0.0004
-CHOLMOD time: L=lchol      0.0015  nnz(L): 11345
-CHOLMOD time: R=chol2      0.0016  nnz(R): 11345
-MATLAB time:  R=chol       0.0017  nnz(R): 11345
-MATLAB [..,R]=symbfact     0.0009  nnz(R): 11345
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.06 L:     1.10
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.58
-CHOLMOD time: [L,,q]=lchol       0.0021  nnz(L): 11345
-CHOLMOD time: [L,,q]=ldlchol     0.0020  nnz(L): 11345
-
-CHOLMOD time: rank-5 ldlupdate        0.0008  nnz(L) 12897  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0003  nnz(L) 12897  no fill-in
-after resymbol: 11345
-CHOLMOD residual:  4.8e-20
-MATLAB  residual:  4.8e-20
-CHOLMOD residual:  2.4e-20 (sparse b)
-MATLAB  residual:  2.6e-20 (sparse b)
-
-================== Problem: 29: HB/bcsstk07  n: 420 nnz: 7860
-title: SYMMETRIC STIFFNESS MATRIX, MEDIUM TEST PROBLEM, CONSISTENT MASSES
-time: amd         0.0004
-CHOLMOD time: L=lchol      0.0015  nnz(L): 11345
-CHOLMOD time: R=chol2      0.0016  nnz(R): 11345
-MATLAB time:  R=chol       0.0017  nnz(R): 11345
-MATLAB [..,R]=symbfact     0.0009  nnz(R): 11345
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.11 L:     1.17
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.60
-CHOLMOD time: [L,,q]=lchol       0.0021  nnz(L): 11345
-CHOLMOD time: [L,,q]=ldlchol     0.0020  nnz(L): 11345
-
-CHOLMOD time: rank-1 ldlupdate        0.0006  nnz(L) 11385  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0002  nnz(L) 11385  no fill-in
-after resymbol: 11345
-CHOLMOD residual:  3.9e-20
-MATLAB  residual:  4.1e-20
-CHOLMOD residual:  1.5e-20 (sparse b)
-MATLAB  residual:  1.4e-20 (sparse b)
-
-================== Problem: 61: HB/bcsstm06  n: 420 nnz: 420
-title: SYMMETRIC MASS MATRIX, MEDIUM TEST PROBLEM, LUMPED MASSES
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0001  nnz(L): 420
-CHOLMOD time: R=chol2      0.0001  nnz(R): 420
-MATLAB time:  R=chol       0.0001  nnz(R): 420
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 420
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.83 L:     0.90
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.86
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 420
-CHOLMOD time: [L,,q]=ldlchol     0.0002  nnz(L): 420
-
-CHOLMOD time: rank-5 ldlupdate        0.0001  nnz(L) 421  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0000  nnz(L) 421  no fill-in
-after resymbol: 420
-CHOLMOD residual:  4.2e-19
-MATLAB  residual:  4.0e-19
-CHOLMOD residual:  2.0e-19 (sparse b)
-MATLAB  residual:  2.0e-19 (sparse b)
-
-================== Problem: 62: HB/bcsstm07  n: 420 nnz: 7252
-title: SYMMETRIC MASS MATRIX, MEDIUM TEST PROBLEM, CONSISTENT MASSES
-time: amd         0.0004
-CHOLMOD time: L=lchol      0.0014  nnz(L): 10654
-CHOLMOD time: R=chol2      0.0015  nnz(R): 10654
-MATLAB time:  R=chol       0.0015  nnz(R): 10654
-MATLAB [..,R]=symbfact     0.0009  nnz(R): 10654
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.03 L:     1.08
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.61
-CHOLMOD time: [L,,q]=lchol       0.0020  nnz(L): 10654
-CHOLMOD time: [L,,q]=ldlchol     0.0019  nnz(L): 10654
-
-CHOLMOD time: rank-6 ldlupdate        0.0005  nnz(L) 10730  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0003  nnz(L) 10730  no fill-in
-after resymbol: 10654
-CHOLMOD residual:  2.0e-16
-MATLAB  residual:  1.8e-16
-CHOLMOD residual:  1.7e-16 (sparse b)
-MATLAB  residual:  1.4e-16 (sparse b)
-
-================== Problem: 221: HB/nos5  n: 468 nnz: 5172
-title: SYMMETRIC MATRIX, FE APPROXIMATION OF BUILDING.
-time: amd         0.0008
-CHOLMOD time: L=lchol      0.0024  nnz(L): 18436
-CHOLMOD time: R=chol2      0.0028  nnz(R): 18436
-MATLAB time:  R=chol       0.0028  nnz(R): 18436
-MATLAB [..,R]=symbfact     0.0012  nnz(R): 18437
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.00 L:     1.20
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.53
-CHOLMOD time: [L,,q]=lchol       0.0036  nnz(L): 18436
-CHOLMOD time: [L,,q]=ldlchol     0.0038  nnz(L): 18437
-
-CHOLMOD time: rank-7 ldlupdate        0.0016  nnz(L) 19563  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0004  nnz(L) 19563  no fill-in
-after resymbol: 18437
-CHOLMOD residual:  2.0e-17
-MATLAB  residual:  1.8e-17
-CHOLMOD residual:  3.2e-18 (sparse b)
-MATLAB  residual:  3.8e-18 (sparse b)
-
-================== Problem: 42: HB/bcsstk20  n: 485 nnz: 3135
-title: SYMMETRIC STIFFNESS MATRIX - FRAME WITHIN A SUSPENSION BRIDGE
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0003  nnz(L): 2310
-CHOLMOD time: R=chol2      0.0003  nnz(R): 2310
-MATLAB time:  R=chol       0.0003  nnz(R): 2310
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 2336
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.91 L:     0.90
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.31
-CHOLMOD time: [L,,q]=lchol       0.0006  nnz(L): 2310
-CHOLMOD time: [L,,q]=ldlchol     0.0006  nnz(L): 2336
-
-CHOLMOD time: rank-7 ldlupdate        0.0002  nnz(L) 2548  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 2548  no fill-in
-after resymbol: 2336
-CHOLMOD residual:  7.4e-22
-MATLAB  residual:  7.1e-22
-CHOLMOD residual:  5.6e-23 (sparse b)
-MATLAB  residual:  9.0e-23 (sparse b)
-
-================== Problem: 70: HB/bcsstm20  n: 485 nnz: 485
-title: SYMMETRIC MASS      MATRIX - FRAME WITHIN A SUSPENSION BRIDGE
-time: amd         0.0004
-CHOLMOD time: L=lchol      0.0001  nnz(L): 485
-CHOLMOD time: R=chol2      0.0001  nnz(R): 485
-MATLAB time:  R=chol       0.0001  nnz(R): 485
-MATLAB [..,R]=symbfact     0.0002  nnz(R): 485
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.83 L:     0.81
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      2.04
-CHOLMOD time: [L,,q]=lchol       0.0002  nnz(L): 485
-CHOLMOD time: [L,,q]=ldlchol     0.0002  nnz(L): 485
-
-CHOLMOD time: rank-8 ldlupdate        0.0001  nnz(L) 486  with fill-in
-CHOLMOD time: rank-4 ldldowndate      0.0000  nnz(L) 486  no fill-in
-after resymbol: 485
-CHOLMOD residual:  1.0e-22
-MATLAB  residual:  9.8e-23
-CHOLMOD residual:  5.0e-23 (sparse b)
-MATLAB  residual:  4.5e-23 (sparse b)
-
-================== Problem: 2: HB/494_bus  n: 494 nnz: 1666
-title: S ADMITTANCE MATRIX  494 BUS POWER SYSTEM, D.J.TYLAVSKY, JULY 1985.
-time: amd         0.0002
-CHOLMOD time: L=lchol      0.0002  nnz(L): 1414
-CHOLMOD time: R=chol2      0.0002  nnz(R): 1414
-MATLAB time:  R=chol       0.0002  nnz(R): 1414
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 1414
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.88 L:     0.87
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.46
-CHOLMOD time: [L,,q]=lchol       0.0006  nnz(L): 1414
-CHOLMOD time: [L,,q]=ldlchol     0.0005  nnz(L): 1414
-
-CHOLMOD time: rank-6 ldlupdate        0.0001  nnz(L) 1499  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 1499  no fill-in
-after resymbol: 1414
-CHOLMOD residual:  2.5e-14
-MATLAB  residual:  2.0e-14
-CHOLMOD residual:  1.4e-15 (sparse b)
-MATLAB  residual:  1.8e-15 (sparse b)
-
-================== Problem: 339: Boeing/bcsstk34  n: 588 nnz: 21418
-title: NASTRAN BUCKLING PROBLEM STIFFNESS MATRIX
-time: amd         0.0010
-CHOLMOD time: L=lchol      0.0055  nnz(L): 43351
-CHOLMOD time: R=chol2      0.0069  nnz(R): 43351
-MATLAB time:  R=chol       0.0070  nnz(R): 43351
-MATLAB [..,R]=symbfact     0.0036  nnz(R): 43366
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.02 L:     1.28
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.65
-CHOLMOD time: [L,,q]=lchol       0.0073  nnz(L): 43351
-CHOLMOD time: [L,,q]=ldlchol     0.0076  nnz(L): 43366
-
-CHOLMOD time: rank-4 ldlupdate        0.0036  nnz(L) 48749  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0012  nnz(L) 48749  no fill-in
-after resymbol: 43366
-CHOLMOD residual:  2.9e-20
-MATLAB  residual:  3.0e-20
-CHOLMOD residual:  2.6e-20 (sparse b)
-MATLAB  residual:  2.6e-20 (sparse b)
-
-================== Problem: 3: HB/662_bus  n: 662 nnz: 2474
-title: S ADMITTANCE MATRIX  662 BUS POWER SYSTEM, D.J.TYLAVSKY, JULY 1985.
-time: amd         0.0004
-CHOLMOD time: L=lchol      0.0004  nnz(L): 2549
-CHOLMOD time: R=chol2      0.0004  nnz(R): 2549
-MATLAB time:  R=chol       0.0003  nnz(R): 2549
-MATLAB [..,R]=symbfact     0.0005  nnz(R): 2549
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.89 L:     0.88
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.20
-CHOLMOD time: [L,,q]=lchol       0.0009  nnz(L): 2549
-CHOLMOD time: [L,,q]=ldlchol     0.0008  nnz(L): 2549
-
-CHOLMOD time: rank-6 ldlupdate        0.0002  nnz(L) 2589  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 2589  no fill-in
-after resymbol: 2549
-CHOLMOD residual:  1.4e-13
-MATLAB  residual:  2.0e-13
-CHOLMOD residual:  7.1e-15 (sparse b)
-MATLAB  residual:  8.7e-15 (sparse b)
-
-================== Problem: 222: HB/nos6  n: 675 nnz: 3255
-title: SYMMETRIC MATRIX, POISSON'S EQUATION IN L SHAPE, MIXED BC.
-time: amd         0.0005
-CHOLMOD time: L=lchol      0.0007  nnz(L): 6453
-CHOLMOD time: R=chol2      0.0007  nnz(R): 6453
-MATLAB time:  R=chol       0.0007  nnz(R): 6453
-MATLAB [..,R]=symbfact     0.0006  nnz(R): 6453
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.01 L:     1.00
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.85
-CHOLMOD time: [L,,q]=lchol       0.0013  nnz(L): 6453
-CHOLMOD time: [L,,q]=ldlchol     0.0013  nnz(L): 6453
-
-CHOLMOD time: rank-2 ldlupdate        0.0004  nnz(L) 6600  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0001  nnz(L) 6600  no fill-in
-after resymbol: 6453
-CHOLMOD residual:  3.3e-15
-MATLAB  residual:  3.6e-15
-CHOLMOD residual:  2.1e-16 (sparse b)
-MATLAB  residual:  2.1e-16 (sparse b)
-
-================== Problem: 4: HB/685_bus  n: 685 nnz: 3249
-title: S ADMITTANCE MATRIX  685 BUS POWER SYSTEM, D.J.TYLAVSKY, JULY 1985.
-time: amd         0.0005
-CHOLMOD time: L=lchol      0.0005  nnz(L): 3650
-CHOLMOD time: R=chol2      0.0005  nnz(R): 3650
-MATLAB time:  R=chol       0.0005  nnz(R): 3650
-MATLAB [..,R]=symbfact     0.0005  nnz(R): 3650
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.98 L:     0.98
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.07
-CHOLMOD time: [L,,q]=lchol       0.0011  nnz(L): 3650
-CHOLMOD time: [L,,q]=ldlchol     0.0011  nnz(L): 3650
-
-CHOLMOD time: rank-1 ldlupdate        0.0002  nnz(L) 3717  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0001  nnz(L) 3717  no fill-in
-after resymbol: 3650
-CHOLMOD residual:  4.5e-15
-MATLAB  residual:  6.8e-15
-CHOLMOD residual:  2.4e-16 (sparse b)
-MATLAB  residual:  3.3e-16 (sparse b)
-
-================== Problem: 357: Boeing/msc00726  n: 726 nnz: 34518
-title: SYMMETRIC TEST MATRIX FROM MSC/NASTRAN BC4F8.OUT2
-time: amd         0.0021
-CHOLMOD time: L=lchol      0.0173  nnz(L): 110707
-CHOLMOD time: R=chol2      0.0214  nnz(R): 110707
-MATLAB time:  R=chol       0.0218  nnz(R): 110707
-MATLAB [..,R]=symbfact     0.0085  nnz(R): 110707
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.02 L:     1.26
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.49
-CHOLMOD time: [L,,q]=lchol       0.0213  nnz(L): 110707
-CHOLMOD time: [L,,q]=ldlchol     0.1228  nnz(L): 110707
-
-CHOLMOD time: rank-6 ldlupdate        0.0058  nnz(L) 110715  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0028  nnz(L) 110715  no fill-in
-after resymbol: 110707
-CHOLMOD residual:  2.7e-21
-MATLAB  residual:  2.8e-21
-CHOLMOD residual:  3.9e-22 (sparse b)
-MATLAB  residual:  3.9e-22 (sparse b)
-
-================== Problem: 223: HB/nos7  n: 729 nnz: 4617
-title: SYMMETRIC MATRIX, POISSON'S EQUATION IN UNIT CUBE.
-time: amd         0.0008
-CHOLMOD time: L=lchol      0.0027  nnz(L): 18945
-CHOLMOD time: R=chol2      0.0035  nnz(R): 18945
-MATLAB time:  R=chol       0.0034  nnz(R): 18945
-MATLAB [..,R]=symbfact     0.0013  nnz(R): 18945
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.99 L:     1.24
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.48
-CHOLMOD time: [L,,q]=lchol       0.0042  nnz(L): 18945
-CHOLMOD time: [L,,q]=ldlchol     0.0044  nnz(L): 18945
-
-CHOLMOD time: rank-3 ldlupdate        0.0012  nnz(L) 19170  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0005  nnz(L) 19170  no fill-in
-after resymbol: 18945
-CHOLMOD residual:  2.2e-13
-MATLAB  residual:  2.6e-13
-CHOLMOD residual:  9.3e-15 (sparse b)
-MATLAB  residual:  9.4e-15 (sparse b)
-
-================== Problem: 41: HB/bcsstk19  n: 817 nnz: 6853
-title: SYMMETRIC STIFFNESS MATRIX - PART OF A SUSPENSION BRIDGE
-time: amd         0.0005
-CHOLMOD time: L=lchol      0.0009  nnz(L): 7528
-CHOLMOD time: R=chol2      0.0009  nnz(R): 7528
-MATLAB time:  R=chol       0.0009  nnz(R): 7528
-MATLAB [..,R]=symbfact     0.0008  nnz(R): 7528
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.98 L:     0.95
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.90
-CHOLMOD time: [L,,q]=lchol       0.0016  nnz(L): 7528
-CHOLMOD time: [L,,q]=ldlchol     0.0016  nnz(L): 7528
-
-CHOLMOD time: rank-6 ldlupdate        0.0006  nnz(L) 7558  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0002  nnz(L) 7558  no fill-in
-after resymbol: 7528
-CHOLMOD residual:  2.8e-20
-MATLAB  residual:  3.2e-20
-CHOLMOD residual:  7.6e-21 (sparse b)
-MATLAB  residual:  5.7e-21 (sparse b)
-
-================== Problem: 69: HB/bcsstm19  n: 817 nnz: 817
-title: SYMMETRIC MASS      MATRIX - PART OF A SUSPENSION BRIDGE
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0002  nnz(L): 817
-CHOLMOD time: R=chol2      0.0002  nnz(R): 817
-MATLAB time:  R=chol       0.0002  nnz(R): 817
-MATLAB [..,R]=symbfact     0.0003  nnz(R): 817
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.81 L:     0.79
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.67
-CHOLMOD time: [L,,q]=lchol       0.0003  nnz(L): 817
-CHOLMOD time: [L,,q]=ldlchol     0.0003  nnz(L): 817
-
-CHOLMOD time: rank-2 ldlupdate        0.0001  nnz(L) 818  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0001  nnz(L) 818  no fill-in
-after resymbol: 817
-CHOLMOD residual:  2.0e-22
-MATLAB  residual:  2.0e-22
-CHOLMOD residual:  1.0e-22 (sparse b)
-MATLAB  residual:  1.0e-22 (sparse b)
-
-================== Problem: 159: HB/gr_30_30  n: 900 nnz: 7744
-title: SYMMETRIC MATRIX FROM NINE POINT START ON A  30 X  30 GRID.
-time: amd         0.0007
-CHOLMOD time: L=lchol      0.0020  nnz(L): 16348
-CHOLMOD time: R=chol2      0.0021  nnz(R): 16348
-MATLAB time:  R=chol       0.0022  nnz(R): 16348
-MATLAB [..,R]=symbfact     0.0012  nnz(R): 16348
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.02 L:     1.10
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.61
-CHOLMOD time: [L,,q]=lchol       0.0030  nnz(L): 16348
-CHOLMOD time: [L,,q]=ldlchol     0.0029  nnz(L): 16348
-
-CHOLMOD time: rank-8 ldlupdate        0.0013  nnz(L) 17998  with fill-in
-CHOLMOD time: rank-4 ldldowndate      0.0004  nnz(L) 17998  no fill-in
-after resymbol: 16348
-CHOLMOD residual:  4.1e-13
-MATLAB  residual:  4.4e-13
-CHOLMOD residual:  2.4e-14 (sparse b)
-MATLAB  residual:  2.7e-14 (sparse b)
-
-================== Problem: 218: HB/nos2  n: 957 nnz: 4137
-title: SYMMETRIC MATRIX, FE APPROXIMATION TO BIHARMONIC OPERATOR ON BEAM.
-time: amd         0.0003
-CHOLMOD time: L=lchol      0.0004  nnz(L): 2864
-CHOLMOD time: R=chol2      0.0004  nnz(R): 2864
-MATLAB time:  R=chol       0.0003  nnz(R): 2864
-MATLAB [..,R]=symbfact     0.0005  nnz(R): 2864
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.88 L:     0.83
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.25
-CHOLMOD time: [L,,q]=lchol       0.0008  nnz(L): 2864
-CHOLMOD time: [L,,q]=ldlchol     0.0008  nnz(L): 2864
-
-CHOLMOD time: rank-8 ldlupdate        0.0003  nnz(L) 3124  with fill-in
-CHOLMOD time: rank-4 ldldowndate      0.0002  nnz(L) 3124  no fill-in
-after resymbol: 2864
-CHOLMOD residual:  3.5e-17
-MATLAB  residual:  3.8e-17
-CHOLMOD residual:  4.8e-18 (sparse b)
-MATLAB  residual:  4.6e-18 (sparse b)
-
-================== Problem: 219: HB/nos3  n: 960 nnz: 15844
-title: SYMMETRIC MATRIX, FE APPROXIMATION TO BIHARMONIC OPERATOR ON PLATE
-time: amd         0.0009
-CHOLMOD time: L=lchol      0.0039  nnz(L): 31309
-CHOLMOD time: R=chol2      0.0049  nnz(R): 31309
-MATLAB time:  R=chol       0.0049  nnz(R): 31309
-MATLAB [..,R]=symbfact     0.0027  nnz(R): 31314
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.99 L:     1.24
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.70
-CHOLMOD time: [L,,q]=lchol       0.0055  nnz(L): 31311
-CHOLMOD time: [L,,q]=ldlchol     0.0057  nnz(L): 31314
-
-CHOLMOD time: rank-7 ldlupdate        0.0026  nnz(L) 36618  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0010  nnz(L) 36618  no fill-in
-after resymbol: 31314
-CHOLMOD residual:  1.9e-13
-MATLAB  residual:  1.9e-13
-CHOLMOD residual:  7.0e-15 (sparse b)
-MATLAB  residual:  7.0e-15 (sparse b)
-
-================== Problem: 358: Boeing/msc01050  n: 1050 nnz: 26198
-title: SYMMETRIC TEST MATRIX FROM MSC/NASTRAN STARF8.OUT2
-time: amd         0.0019
-CHOLMOD time: L=lchol      0.0051  nnz(L): 28305
-CHOLMOD time: R=chol2      0.0054  nnz(R): 28305
-MATLAB time:  R=chol       0.0057  nnz(R): 28305
-MATLAB [..,R]=symbfact     0.0032  nnz(R): 28305
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.06 L:     1.13
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.64
-CHOLMOD time: [L,,q]=lchol       0.0074  nnz(L): 28305
-CHOLMOD time: [L,,q]=ldlchol     0.0072  nnz(L): 28305
-
-CHOLMOD time: rank-5 ldlupdate        0.0016  nnz(L) 28411  with fill-in
-CHOLMOD time: rank-2 ldldowndate      0.0007  nnz(L) 28411  no fill-in
-after resymbol: 28305
-CHOLMOD residual:  5.3e-14
-MATLAB  residual:  5.1e-14
-CHOLMOD residual:  4.3e-15 (sparse b)
-MATLAB  residual:  4.3e-15 (sparse b)
-
-================== Problem: 30: HB/bcsstk08  n: 1074 nnz: 12960
-title: SYMMETRIC STIFFNESS MATRIX, FRAME BUILDING (TV STUDIO)
-time: amd         0.0024
-CHOLMOD time: L=lchol      0.0056  nnz(L): 31150
-CHOLMOD time: R=chol2      0.0068  nnz(R): 31150
-MATLAB time:  R=chol       0.0070  nnz(R): 31150
-MATLAB [..,R]=symbfact     0.0027  nnz(R): 31153
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.04 L:     1.25
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.48
-CHOLMOD time: [L,,q]=lchol       0.0089  nnz(L): 31150
-CHOLMOD time: [L,,q]=ldlchol     0.0092  nnz(L): 31153
-
-CHOLMOD time: rank-8 ldlupdate        0.0021  nnz(L) 31639  with fill-in
-CHOLMOD time: rank-4 ldldowndate      0.0009  nnz(L) 31639  no fill-in
-after resymbol: 31153
-CHOLMOD residual:  4.0e-22
-MATLAB  residual:  3.0e-22
-CHOLMOD residual:  4.3e-22 (sparse b)
-MATLAB  residual:  2.7e-22 (sparse b)
-
-================== Problem: 63: HB/bcsstm08  n: 1074 nnz: 1074
-title: SYMMETRIC MASS MATRIX, FRAME BUILDING (TV STUDIO)
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0002  nnz(L): 1074
-CHOLMOD time: R=chol2      0.0002  nnz(R): 1074
-MATLAB time:  R=chol       0.0002  nnz(R): 1074
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 1074
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.83 L:     0.81
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.81
-CHOLMOD time: [L,,q]=lchol       0.0004  nnz(L): 1074
-CHOLMOD time: [L,,q]=ldlchol     0.0004  nnz(L): 1074
-
-CHOLMOD time: rank-8 ldlupdate        0.0001  nnz(L) 1075  with fill-in
-CHOLMOD time: rank-4 ldldowndate      0.0001  nnz(L) 1075  no fill-in
-after resymbol: 1074
-CHOLMOD residual:  3.2e-21
-MATLAB  residual:  3.0e-21
-CHOLMOD residual:  1.4e-21 (sparse b)
-MATLAB  residual:  1.2e-21 (sparse b)
-
-================== Problem: 31: HB/bcsstk09  n: 1083 nnz: 18437
-title: SYMMETRIC STIFFNESS MATRIX, SQUARE PLATE CLAMPED
-time: amd         0.0018
-CHOLMOD time: L=lchol      0.0076  nnz(L): 58341
-CHOLMOD time: R=chol2      0.0095  nnz(R): 58341
-MATLAB time:  R=chol       0.0095  nnz(R): 58341
-MATLAB [..,R]=symbfact     0.0045  nnz(R): 58416
-
-CHOLMOD speedup vs MATLAB chol:         R:     1.01 L:     1.26
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      0.60
-CHOLMOD time: [L,,q]=lchol       0.0103  nnz(L): 58339
-CHOLMOD time: [L,,q]=ldlchol     0.0107  nnz(L): 58416
-
-CHOLMOD time: rank-1 ldlupdate        0.0040  nnz(L) 64019  with fill-in
-CHOLMOD time: rank-1 ldldowndate      0.0015  nnz(L) 64019  no fill-in
-after resymbol: 58416
-CHOLMOD residual:  1.7e-18
-MATLAB  residual:  1.3e-18
-CHOLMOD residual:  1.1e-19 (sparse b)
-MATLAB  residual:  8.9e-20 (sparse b)
-
-================== Problem: 64: HB/bcsstm09  n: 1083 nnz: 1083
-title: SYMMETRIC MASS MATRIX, SQUARE PLATE CLAMPED
-time: amd         0.0001
-CHOLMOD time: L=lchol      0.0002  nnz(L): 1083
-CHOLMOD time: R=chol2      0.0002  nnz(R): 1083
-MATLAB time:  R=chol       0.0002  nnz(R): 1083
-MATLAB [..,R]=symbfact     0.0004  nnz(R): 1083
-
-CHOLMOD speedup vs MATLAB chol:         R:     0.86 L:     0.84
-
-
-CHOLMOD numeric lchol vs MATLAB symbfact:      1.61
-CHOLMOD time: [L,,q]=lchol       0.0004  nnz(L): 1083
-CHOLMOD time: [L,,q]=ldlchol     0.0004  nnz(L): 1083
-
-CHOLMOD time: rank-7 ldlupdate        0.0001  nnz(L) 1084  with fill-in
-CHOLMOD time: rank-3 ldldowndate      0.0001  nnz(L) 1084  no fill-in
-after resymbol: 1083
-CHOLMOD residual:  1.5e-05
-MATLAB  residual:  3.4e-11
-CHOLMOD residual:  1.2e-06 (sparse b)
-MATLAB  residual:  1.8e-11 (sparse b)
-test0 passed
-=================================================================
-test1: test sparse2
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     1
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (1,1)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,1)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (1,1)        1
-
-size B1: 1 1
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,1)        1
-
-size B2: 1 1
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     1
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,1)        5
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,1)        5
-
-size B2: 1 1
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     1
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (1,1)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,1)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (1,1)       3.1416
-
-size B1: 1 1
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,1)       3.1416
-
-size B2: 1 1
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     1
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 1-by-1
-
-size B2: 1 1
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (1,2)        1
-   (1,3)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,2)        1
-   (1,3)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (1,2)        1
-   (1,3)        1
-
-size B1: 1 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,2)        1
-   (1,3)        1
-
-size B2: 1 3
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (1,2)        2
-   (1,3)        3
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,2)        2
-   (1,3)        3
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (1,2)        2
-   (1,3)        3
-
-size B1: 1 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,2)        2
-   (1,3)        3
-
-size B2: 1 3
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (1,2)       3.1416
-   (1,3)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,2)       3.1416
-   (1,3)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (1,2)       3.1416
-   (1,3)       3.1416
-
-size B1: 1 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,2)       3.1416
-   (1,3)       3.1416
-
-size B2: 1 3
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (1,3)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,3)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (1,3)        1
-
-size B1: 1 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,3)        1
-
-size B2: 1 3
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,3)        5
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,3)        5
-
-size B2: 1 3
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (1,3)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (1,3)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (1,3)       3.1416
-
-size B1: 1 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (1,3)       3.1416
-
-size B2: 1 3
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 1-by-3
-
-size B2: 1 3
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     []
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 1-by-0
-
-size B2: 1 0
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     []
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     []
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 1-by-0
-
-size B2: 1 0
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     1
-
-
-j =
-
-     []
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 1-by-0
-
-size B2: 1 0
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     1
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,1)        1
-   (3,1)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,1)        1
-   (3,1)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,1)        1
-   (3,1)        1
-
-size B1: 3 1
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,1)        1
-   (3,1)        1
-
-size B2: 3 1
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     1
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,1)        2
-   (3,1)        3
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,1)        2
-   (3,1)        3
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,1)        2
-   (3,1)        3
-
-size B1: 3 1
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,1)        2
-   (3,1)        3
-
-size B2: 3 1
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     1
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,1)       3.1416
-   (3,1)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,1)       3.1416
-   (3,1)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,1)       3.1416
-   (3,1)       3.1416
-
-size B1: 3 1
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,1)       3.1416
-   (3,1)       3.1416
-
-size B2: 3 1
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     1
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,2)        1
-   (3,3)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,2)        1
-   (3,3)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,2)        1
-   (3,3)        1
-
-size B1: 3 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,2)        1
-   (3,3)        1
-
-size B2: 3 3
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,2)        2
-   (3,3)        3
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,2)        2
-   (3,3)        3
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,2)        2
-   (3,3)        3
-
-size B1: 3 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,2)        2
-   (3,3)        3
-
-size B2: 3 3
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,2)       3.1416
-   (3,3)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,2)       3.1416
-   (3,3)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,2)       3.1416
-   (3,3)       3.1416
-
-size B1: 3 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,2)       3.1416
-   (3,3)       3.1416
-
-size B2: 3 3
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,3)        1
-   (3,3)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,3)        1
-   (3,3)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,3)        1
-   (3,3)        1
-
-size B1: 3 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,3)        1
-   (3,3)        1
-
-size B2: 3 3
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,3)        2
-   (3,3)        3
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,3)        2
-   (3,3)        3
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,3)        2
-   (3,3)        3
-
-size B1: 3 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,3)        2
-   (3,3)        3
-
-size B2: 3 3
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,3)       3.1416
-   (3,3)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,3)       3.1416
-   (3,3)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,3)       3.1416
-   (3,3)       3.1416
-
-size B1: 3 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,3)       3.1416
-   (3,3)       3.1416
-
-size B2: 3 3
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     []
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     []
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     []
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-     3
-
-
-j =
-
-     []
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     1
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,1)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,1)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,1)        1
-
-size B1: 2 1
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,1)        1
-
-size B2: 2 1
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     1
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,1)        5
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,1)        5
-
-size B2: 2 1
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     1
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,1)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,1)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,1)       3.1416
-
-size B1: 2 1
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,1)       3.1416
-
-size B2: 2 1
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     1
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 2-by-1
-
-size B2: 2 1
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,2)        1
-   (2,3)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,2)        1
-   (2,3)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,2)        1
-   (2,3)        1
-
-size B1: 2 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,2)        1
-   (2,3)        1
-
-size B2: 2 3
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,2)        2
-   (2,3)        3
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,2)        2
-   (2,3)        3
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,2)        2
-   (2,3)        3
-
-size B1: 2 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,2)        2
-   (2,3)        3
-
-size B2: 2 3
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,2)       3.1416
-   (2,3)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,2)       3.1416
-   (2,3)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,2)       3.1416
-   (2,3)       3.1416
-
-size B1: 2 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,2)       3.1416
-   (2,3)       3.1416
-
-size B2: 2 3
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,3)        1
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,3)        1
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,3)        1
-
-size B1: 2 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,3)        1
-
-size B2: 2 3
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,3)        5
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,3)        5
-
-size B2: 2 3
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   (2,3)       3.1416
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   (2,3)       3.1416
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   (2,3)       3.1416
-
-size B1: 2 3
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   (2,3)       3.1416
-
-size B2: 2 3
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 2-by-3
-
-size B2: 2 3
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     []
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 2-by-0
-
-size B2: 2 0
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     []
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     []
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 2-by-0
-
-size B2: 2 0
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     2
-
-
-j =
-
-     []
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 2-by-0
-
-size B2: 2 0
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     1
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-1
-
-size B2: 0 1
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     1
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     1
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-1
-
-size B2: 0 1
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     1
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-1
-
-size B2: 0 1
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     2
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     3
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-3
-
-size B2: 0 3
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     3
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     3
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-3
-
-size B2: 0 3
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     3
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-3
-
-size B2: 0 3
-========================== SPARSE AND SPARSE2 DIFFER
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     []
-
-
-s =
-
-     1
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-0
-
-size B2: 0 0
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     []
-
-
-s =
-
-     2
-     3
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-sparse failed
-
-A2 = sparse2 (i,j,s,m,n)
-sparse2 failed
-
-B1 = sparse (i,j,s)
-sparse failed
-
-B2 = sparse2 (i,j,s)
-sparse2 failed
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     []
-
-
-s =
-
-    3.1416
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-0
-
-size B2: 0 0
-
------------------------------------------------
-
-i =
-
-     []
-
-
-j =
-
-     []
-
-
-s =
-
-     []
-
-
-m =
-
-     3
-
-
-n =
-
-     4
-
-
-A1 = sparse (i,j,s,m,n)
-
-A1 =
-
-   All zero sparse: 3-by-4
-
-size A1: 3 4
-
-A2 = sparse2 (i,j,s,m,n)
-
-A2 =
-
-   All zero sparse: 3-by-4
-
-size A2: 3 4
-
-B1 = sparse (i,j,s)
-
-B1 =
-
-   All zero sparse: 0-by-0
-
-size B1: 0 0
-
-B2 = sparse2 (i,j,s)
-
-B2 =
-
-   All zero sparse: 0-by-0
-
-size B2: 0 0
-test1 passed (review the above results)
-=================================================================
-test2: test sparse2
-
-i =
-
-     2     3
-
-
-j =
-
-     3     4
-
-
-s =
-
-  11.4000 + 3.4000i   9.2000 + 1.2000i
-
-
-ans =
-
-   (2,3)     11.4000 + 3.4000i
-   (3,4)      9.2000 + 1.2000i
-
-
-ans =
-
-   (2,3)     11.4000 + 3.4000i
-   (3,4)      9.2000 + 1.2000i
-
-
-ans =
-
-        3290
-
-test2 passed
-=================================================================
-test3: test sparse on int8, int16, and logical
-
-c =
-
-ab d
-
-Warning: SPARSE with a character array input returns a sparse double result.
-         This behavior will change in a future release.
-> In test3 at 14
-  In cholmod_test at 100
-
-ans =
-
-   (1,1)       97
-   (1,2)       98
-   (1,4)      100
-
-
-ans =
-
-   (1,1)       97
-   (1,2)       98
-   (1,4)      100
-
-Warning: SPARSE with a character array input returns a sparse double result.
-         This behavior will change in a future release.
-> In test3 at 16
-  In cholmod_test at 100
-
-ans =
-
-   (1,1)       97
-   (2,1)       98
-   (4,1)      100
-
-
-ans =
-
-   (1,1)       97
-   (2,1)       98
-   (4,1)      100
-
-  Name      Size            Bytes  Class     Attributes
-
-  ans       4x1                64  double    sparse    
-  c         1x4                 8  char                
-
-
-ans =
-
-     3
-
-sparse(int8(c)) fails in MATLAB
-
-ans =
-
-   (1,1)       97
-   (1,2)       98
-   (1,4)      100
-
-
-ans =
-
-   (1,1)       97
-   (1,2)       98
-   (1,4)      100
-
-  Name      Size            Bytes  Class     Attributes
-
-  ans       1x4                88  double    sparse    
-  c         1x4                 8  char                
-
-
-s =
-
-     1     0     1     1
-     0     0     0     1
-     0     1     1     1
-     1     0     0     0
-
-
-ans =
-
-   (1,1)        1
-   (4,1)        1
-   (3,2)        1
-   (1,3)        1
-   (3,3)        1
-   (1,4)        1
-   (2,4)        1
-   (3,4)        1
-
-  Name      Size            Bytes  Class      Attributes
-
-  ans       4x4               112  logical    sparse    
-  c         1x4                 8  char                 
-  s         4x4                16  logical              
-
-
-ans =
-
-   (1,1)        1
-   (4,1)        1
-   (3,2)        1
-   (1,3)        1
-   (3,3)        1
-   (1,4)        1
-   (2,4)        1
-   (3,4)        1
-
-  Name      Size            Bytes  Class      Attributes
-
-  ans       4x4               112  logical    sparse    
-  c         1x4                 8  char                 
-  s         4x4                16  logical              
-
-
-x =
-
-    0.1013    0.2280    0.1095    0.9468
-    0.2648    0.0281    0.8211    0.8138
-    0.2595    0.6996    0.4195    0.7779
-    0.5345    0.8071    0.8422    0.8768
-
-
-ans =
-
-   (4,1)        1
-   (3,2)        1
-   (4,2)        1
-   (2,3)        1
-   (4,3)        1
-   (1,4)        1
-   (2,4)        1
-   (3,4)        1
-   (4,4)        1
-
-  Name      Size            Bytes  Class      Attributes
-
-  ans       4x4               121  logical    sparse    
-  c         1x4                 8  char                 
-  s         4x4                16  logical              
-  x         4x4               128  double               
-
-
-ans =
-
-   (4,1)        1
-   (3,2)        1
-   (4,2)        1
-   (2,3)        1
-   (4,3)        1
-   (1,4)        1
-   (2,4)        1
-   (3,4)        1
-   (4,4)        1
-
-  Name      Size            Bytes  Class      Attributes
-
-  ans       4x4               121  logical    sparse    
-  c         1x4                 8  char                 
-  s         4x4                16  logical              
-  x         4x4               128  double               
-
-test3 passed
-=================================================================
-test4: test cholmod2 with multiple and sparse right-hand-sides
-maxerr 2.363058e-12 2.350665e-12
-test4 passed
-=================================================================
-test5: test sparse2
-test5 passed
-=================================================================
-test6: test sparse with large matrix, both real and complex
-do_complex = 0
-
-Prob = 
-
-     title: 'Light hydrocarbon recovery. OK if illconditioned,from a nonlinear solvr'
-         A: [70304x70304 double]
-     Zeros: [70304x70304 double]
-         b: [70304x1 double]
-      name: 'Mallya/lhr71'
-        id: 750
-      date: '1994'
-    author: 'J. Mallya'
-        ed: 'T. Davis'
-      kind: 'chemical process simulation problem'
-
-find time   0.0573
-dtri time: cholmod2 0.154045  matlab 0.143959
-dtri time: cholmod2 0.155702  matlab 0.144404 (jumbled)
-dtri time: cholmod2 0.740039  matlab 3.960841 (duplicates)
-length 2988012 nz 1494006
-
-err =
-
-     0
-
-dtri time: cholmod2 1.054730  matlab 3.971992 (upper)
-
-err =
-
-     0
-
-dtri time: cholmod2 1.170586  matlab 3.867817 (lower)
-dtri time: cholmod2 0.564294  matlab 3.392247 (sorted, dupl)
-do_complex = 1
-
-Prob = 
-
-     title: 'Light hydrocarbon recovery. OK if illconditioned,from a nonlinear solvr'
-         A: [70304x70304 double]
-     Zeros: [70304x70304 double]
-         b: [70304x1 double]
-      name: 'Mallya/lhr71'
-        id: 750
-      date: '1994'
-    author: 'J. Mallya'
-        ed: 'T. Davis'
-      kind: 'chemical process simulation problem'
-
-find time   0.0776
-dtri time: cholmod2 0.205535  matlab 0.171580
-dtri time: cholmod2 0.396889  matlab 0.269580 (jumbled)
-dtri time: cholmod2 1.634356  matlab 4.170549 (duplicates)
-length 2988012 nz 1494006
-
-err =
-
-     0
-
-dtri time: cholmod2 1.754138  matlab 4.164494 (upper)
-
-err =
-
-     0
-
-dtri time: cholmod2 1.633999  matlab 4.168737 (lower)
-dtri time: cholmod2 0.635309  matlab 3.554928 (sorted, dupl)
-test6 passed
-=================================================================
-test7: test sparse2
-
-Prob = 
-
-     title: 'Light hydrocarbon recovery. OK if illconditioned,from a nonlinear solvr'
-         A: [70304x70304 double]
-     Zeros: [70304x70304 double]
-         b: [70304x1 double]
-      name: 'Mallya/lhr71'
-        id: 750
-      date: '1994'
-    author: 'J. Mallya'
-        ed: 'T. Davis'
-      kind: 'chemical process simulation problem'
-
-find time   0.0574
-tot: 0.154660
-tot: 0.156477 again 
-tot: 0.153834 (i,j,x)
-tot: 0.156731  (jumbled)
-tot 0.634492  (duplicates)
-test7 passed
-=================================================================
-test8: factorize a large range of sparse matrices
-test matrices sorted by dimension:
-1440: Oberwolfach          LFAT5                          14 1
-1438: Oberwolfach          LF10                           18 1
-  97: HB                   can_24                         24 0
-1177: HB                   lap_25                         25 0
- 436: FIDAP                ex5                            27 1
-  13: HB                   bcspwr01                       39 0
-  23: HB                   bcsstk01                       48 1
- 872: Pothen               mesh1e1                        48 1
- 873: Pothen               mesh1em1                       48 1
- 874: Pothen               mesh1em6                       48 1
-  14: HB                   bcspwr02                       49 0
- 129: HB                   dwt_59                         59 0
- 102: HB                   can_61                         61 0
- 103: HB                   can_62                         62 0
-  24: HB                   bcsstk02                       66 1
- 132: HB                   dwt_66                         66 0
- 883: Pothen               sphere2                        66 0
- 133: HB                   dwt_72                         72 0
- 106: HB                   can_73                         73 0
-  11: HB                   ash85                          85 0
- 136: HB                   dwt_87                         87 0
- 108: HB                   can_96                         96 0
- 220: HB                   nos4                          100 1
-  25: HB                   bcsstk03                      112 1
-  15: HB                   bcspwr03                      118 0
-1506: Pajek                Journals                      124 1
-  26: HB                   bcsstk04                      132 1
-  44: HB                   bcsstk22                      138 1
-  93: HB                   can_144                       144 0
- 206: HB                   lund_a                        147 1
- 207: HB                   lund_b                        147 1
-  27: HB                   bcsstk05                      153 1
-  94: HB                   can_161                       161 0
- 113: HB                   dwt_162                       162 0
-  95: HB                   can_187                       187 0
- 114: HB                   dwt_193                       193 0
- 115: HB                   dwt_198                       198 0
- 116: HB                   dwt_209                       209 0
- 117: HB                   dwt_221                       221 0
-  96: HB                   can_229                       229 0
- 118: HB                   dwt_234                       234 0
- 217: HB                   nos1                          237 1
- 119: HB                   dwt_245                       245 0
-  98: HB                   can_256                       256 0
- 884: Pothen               sphere3                       258 0
- 202: HB                   lshp_265                      265 0
-  99: HB                   can_268                       268 0
-  16: HB                   bcspwr04                      274 0
- 877: Pothen               mesh3e1                       289 1
- 878: Pothen               mesh3em5                      289 1
-
-================== Problem: Oberwolfach/LFAT5  n: 14 nnz: 46
-title: Oberwolfach: linear 1D beam
-
-symbfact time: MATLAB    0.0133  CHOLMOD    0.0005  speedup    27.72
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      2.8
-time: metis       0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      2.8
-
-metis/amd time:   1.5023 nnz(L):   1.0000
-
-================== Problem: Oberwolfach/LF10  n: 18 nnz: 82
-title: Oberwolfach: linear 1D beam
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.64
-time: amd         0.0000 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.4
-time: metis       0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      4.4
-
-metis/amd time:   4.7692 nnz(L):   1.2414
-
-================== Problem: HB/can_24  n: 24 nnz: 160
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.66
-time: amd         0.0000 mnnz(L)      0.0 mfl        0  fl/nnz(L)      5.5
-time: metis       0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      5.8
-
-metis/amd time:   5.4865 nnz(L):   1.0417
-
-================== Problem: HB/lap_25  n: 25 nnz: 169
-title: FINITE ELEMENT PROBLEM. LAPLACIAN ON A  5 BY 5 GRID.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.86
-time: amd         0.0000 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.3
-time: metis       0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      5.7
-
-metis/amd time:   4.8421 nnz(L):   0.9493
-
-================== Problem: FIDAP/ex5  n: 27 nnz: 279
-title:  TEST MATRIX FROM FIDAP: EX5.MAT
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.73
-time: amd         0.0000 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.4
-time: metis       0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.4
-
-metis/amd time:   3.0526 nnz(L):   1.0000
-
-================== Problem: HB/bcspwr01  n: 39 nnz: 131
-title: SYMMETRIC STRUCTURE (STANDARD TEST POWER SYSTEM - NEW ENGLAND)
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.65
-time: amd         0.0000 mnnz(L)      0.0 mfl        0  fl/nnz(L)      2.8
-time: metis       0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.0
-
-metis/amd time:   3.8750 nnz(L):   1.0385
-
-================== Problem: HB/bcsstk01  n: 48 nnz: 400
-title: SYMMETRIC STIFFNESS MATRIX SMALL GENERALIZED EIGENVALUE PROBLEM
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.84
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)     12.3
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)     12.0
-
-metis/amd time:   6.5909 nnz(L):   0.9898
-
-================== Problem: Pothen/mesh1e1  n: 48 nnz: 306
-title: mesh1e1, with coordinates.  From NASA, collected by Alex Pothen
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.65
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      8.0
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      8.3
-
-metis/amd time:   5.4697 nnz(L):   1.0357
-
-================== Problem: Pothen/mesh1em1  n: 48 nnz: 306
-title: mesh1em1, with coordinates.  From NASA, collected by Alex Pothen
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.53
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      8.0
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      8.3
-
-metis/amd time:   5.9667 nnz(L):   1.0357
-
-================== Problem: Pothen/mesh1em6  n: 48 nnz: 306
-title: mesh1em6, with coordinates.  From NASA, collected by Alex Pothen
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.56
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      8.0
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      8.3
-
-metis/amd time:   5.8361 nnz(L):   1.0357
-
-================== Problem: HB/bcspwr02  n: 49 nnz: 167
-title: SYMMETRIC STRUCTURE OF A SMALL TEST POWER SYSTEM
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.59
-time: amd         0.0000 mnnz(L)      0.0 mfl        0  fl/nnz(L)      2.8
-time: metis       0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.2
-
-metis/amd time:   5.7907 nnz(L):   1.0775
-
-================== Problem: HB/dwt_59  n: 59 nnz: 267
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.59
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      4.5
-time: metis       0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      4.7
-
-metis/amd time:   3.8286 nnz(L):   1.0492
-
-================== Problem: HB/can_61  n: 61 nnz: 557
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.83
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.2
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.0
-
-metis/amd time:   6.6721 nnz(L):   1.0997
-
-================== Problem: HB/can_62  n: 62 nnz: 218
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.57
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.2
-time: metis       0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.5
-
-metis/amd time:   5.4118 nnz(L):   1.0870
-
-================== Problem: HB/bcsstk02  n: 66 nnz: 4356
-title: SYMMETRIC STIFFNESS MATRIX, SMALL OIL RIG, STATICALLY CONDENSED
-
-symbfact time: MATLAB    0.0004  CHOLMOD    0.0002  speedup     1.89
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)     44.3
-time: metis       0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     44.3
-
-metis/amd time:   2.6044 nnz(L):   1.0000
-
-================== Problem: HB/dwt_66  n: 66 nnz: 320
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.58
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.0
-time: metis       0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      4.6
-
-metis/amd time:   4.5455 nnz(L):   1.4767
-
-================== Problem: Pothen/sphere2  n: 66 nnz: 450
-title: sphere2, with coordinates.  From NASA, collected by Alex Pothen
-
-symbfact time: MATLAB    0.0004  CHOLMOD    0.0001  speedup     3.69
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)     12.6
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)     11.8
-
-metis/amd time:   5.2329 nnz(L):   0.9736
-
-================== Problem: HB/dwt_72  n: 72 nnz: 222
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.69
-time: amd         0.0000 mnnz(L)      0.0 mfl        0  fl/nnz(L)      2.7
-time: metis       0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      2.9
-
-metis/amd time:   5.6383 nnz(L):   1.0924
-
-================== Problem: HB/can_73  n: 73 nnz: 377
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.59
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.9
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.4
-
-metis/amd time:   5.5857 nnz(L):   1.0434
-
-================== Problem: HB/ash85  n: 85 nnz: 523
-title: SYMMETRIC PATTERN OF NORMAL MATRIX OF HOLLAND SURVEY. ASHKENAZI, 1974
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.45
-time: amd         0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.6
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.6
-
-metis/amd time:   1.4360 nnz(L):   1.1089
-
-================== Problem: HB/dwt_87  n: 87 nnz: 541
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.19
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      5.3
-time: metis       0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.8
-
-metis/amd time:   3.2791 nnz(L):   1.1739
-
-================== Problem: HB/can_96  n: 96 nnz: 768
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.36
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)     11.6
-time: metis       0.0005 mnnz(L)      0.0 mfl        0  fl/nnz(L)     12.3
-
-metis/amd time:   4.6700 nnz(L):   1.0467
-
-================== Problem: HB/nos4  n: 100 nnz: 594
-title: SYMMETRIC MATRIX OF BEAM STRUCTURE, NOVEMBER 1982.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.40
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.0
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      9.7
-
-metis/amd time:   3.6610 nnz(L):   1.2168
-
-================== Problem: HB/bcsstk03  n: 112 nnz: 640
-title: SYMMETRIC STIFFNESS MATRIX, SMALL TEST STRUCTURE
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.44
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.5
-time: metis       0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      4.9
-
-metis/amd time:   2.9107 nnz(L):   1.3385
-
-================== Problem: HB/bcspwr03  n: 118 nnz: 476
-title: SYMMETRIC STRUCTURE OF 118 BUS IEEE STANDARD TEST CASE POWER NETWORK
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.40
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.4
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.9
-
-metis/amd time:   4.0326 nnz(L):   1.0862
-
-================== Problem: Pajek/Journals  n: 124 nnz: 12068
-title: Pajek network: Slovenian journals 1999-2000
-
-symbfact time: MATLAB    0.0006  CHOLMOD    0.0004  speedup     1.71
-time: amd         0.0003 mnnz(L)      0.0 mfl        1  fl/nnz(L)     72.3
-time: metis       0.0020 mnnz(L)      0.0 mfl        0  fl/nnz(L)     70.1
-
-metis/amd time:   5.8776 nnz(L):   0.9744
-
-================== Problem: HB/bcsstk04  n: 132 nnz: 3648
-title: SYMMETRIC STIFFNESS MATRIX, OIL RIG, NOT CONDENSED (SAME MODEL AS X02)
-
-symbfact time: MATLAB    0.0004  CHOLMOD    0.0002  speedup     2.05
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     27.5
-time: metis       0.0008 mnnz(L)      0.0 mfl        0  fl/nnz(L)     32.2
-
-metis/amd time:   3.8689 nnz(L):   1.1072
-
-================== Problem: HB/bcsstk22  n: 138 nnz: 696
-title: SYMMETRIC STIFFNESS MATRIX - TEXTILE LOOM FRAME
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.34
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.2
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.7
-
-metis/amd time:   2.3333 nnz(L):   1.0632
-
-================== Problem: HB/can_144  n: 144 nnz: 1296
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.27
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.6
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.2
-
-metis/amd time:   3.3840 nnz(L):   1.0706
-
-================== Problem: HB/lund_a  n: 147 nnz: 2449
-title: SYMMETRIC MATRIX A OF LUND EIGENVALUE PROBLEM, MAY 1974
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.12
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)     18.1
-time: metis       0.0005 mnnz(L)      0.0 mfl        0  fl/nnz(L)     21.2
-
-metis/amd time:   4.4622 nnz(L):   1.1475
-
-================== Problem: HB/lund_b  n: 147 nnz: 2441
-title: SYMMETRIC MATRIX B OF LUND EIGENVALUE PROBLEM, MAY 1974
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.11
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)     18.1
-time: metis       0.0006 mnnz(L)      0.0 mfl        0  fl/nnz(L)     22.1
-
-metis/amd time:   4.4160 nnz(L):   1.1833
-
-================== Problem: HB/bcsstk05  n: 153 nnz: 2423
-title: SYMMETRIC STIFFNESS MATRIX, TRANSMISSION TOWER, LUMPED MASSES
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.02
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     16.8
-time: metis       0.0007 mnnz(L)      0.0 mfl        0  fl/nnz(L)     21.7
-
-metis/amd time:   4.0545 nnz(L):   1.2055
-
-================== Problem: HB/can_161  n: 161 nnz: 1377
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0003  speedup     0.93
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     19.1
-time: metis       0.0005 mnnz(L)      0.0 mfl        0  fl/nnz(L)     15.9
-
-metis/amd time:   2.7914 nnz(L):   0.8795
-
-================== Problem: HB/dwt_162  n: 162 nnz: 1182
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.17
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      9.2
-time: metis       0.0004 mnnz(L)      0.0 mfl        0  fl/nnz(L)      9.5
-
-metis/amd time:   2.6013 nnz(L):   1.0291
-
-================== Problem: HB/can_187  n: 187 nnz: 1491
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.16
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     13.8
-time: metis       0.0006 mnnz(L)      0.0 mfl        0  fl/nnz(L)     12.8
-
-metis/amd time:   3.7267 nnz(L):   0.9683
-
-================== Problem: HB/dwt_193  n: 193 nnz: 3493
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0004  CHOLMOD    0.0002  speedup     2.01
-time: amd         0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)     28.3
-time: metis       0.0011 mnnz(L)      0.0 mfl        0  fl/nnz(L)     29.6
-
-metis/amd time:   4.1051 nnz(L):   1.0422
-
-================== Problem: HB/dwt_198  n: 198 nnz: 1392
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.11
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.4
-time: metis       0.0005 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.1
-
-metis/amd time:   2.9815 nnz(L):   0.9694
-
-================== Problem: HB/dwt_209  n: 209 nnz: 1743
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.09
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     11.0
-time: metis       0.0008 mnnz(L)      0.0 mfl        0  fl/nnz(L)     13.6
-
-metis/amd time:   3.5598 nnz(L):   1.1378
-
-================== Problem: HB/dwt_221  n: 221 nnz: 1629
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.11
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      9.1
-time: metis       0.0007 mnnz(L)      0.0 mfl        0  fl/nnz(L)     10.7
-
-metis/amd time:   2.7893 nnz(L):   1.1089
-
-================== Problem: HB/can_229  n: 229 nnz: 1777
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.08
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     17.2
-time: metis       0.0008 mnnz(L)      0.0 mfl        0  fl/nnz(L)     18.8
-
-metis/amd time:   3.7621 nnz(L):   1.0619
-
-================== Problem: HB/dwt_234  n: 234 nnz: 834
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.26
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.5
-time: metis       0.0005 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.9
-
-metis/amd time:   3.5515 nnz(L):   1.0641
-
-================== Problem: HB/nos1  n: 237 nnz: 1017
-title: SYMMETRIC MATRIX, FE APPROXIMATION TO BIHARMONIC OPERATOR ON BEAM.
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0001  speedup     2.22
-time: amd         0.0001 mnnz(L)      0.0 mfl        0  fl/nnz(L)      3.2
-time: metis       0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)      4.4
-
-metis/amd time:   3.7444 nnz(L):   1.3537
-
-================== Problem: HB/dwt_245  n: 245 nnz: 1461
-title: SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.14
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.3
-time: metis       0.0006 mnnz(L)      0.0 mfl        0  fl/nnz(L)      9.0
-
-metis/amd time:   2.7129 nnz(L):   1.1176
-
-================== Problem: HB/can_256  n: 256 nnz: 2916
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0004  CHOLMOD    0.0002  speedup     1.94
-time: amd         0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)     17.7
-time: metis       0.0008 mnnz(L)      0.0 mfl        0  fl/nnz(L)     20.2
-
-metis/amd time:   2.9789 nnz(L):   1.0937
-
-================== Problem: Pothen/sphere3  n: 258 nnz: 1794
-title: sphere3, with coordinates.  From NASA, collected by Alex Pothen
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     1.97
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     24.5
-time: metis       0.0007 mnnz(L)      0.0 mfl        0  fl/nnz(L)     21.5
-
-metis/amd time:   2.8970 nnz(L):   0.9353
-
-================== Problem: HB/lshp_265  n: 265 nnz: 1753
-title: SYMMETRIC MATRIX FROM ALAN GEORGE'S L-SHAPE PROBLEMS, 1978.
-
-symbfact time: MATLAB    0.0004  CHOLMOD    0.0002  speedup     2.02
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     14.4
-time: metis       0.0006 mnnz(L)      0.0 mfl        0  fl/nnz(L)     17.5
-
-metis/amd time:   2.8216 nnz(L):   1.1213
-
-================== Problem: HB/can_268  n: 268 nnz: 3082
-title: SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
-
-symbfact time: MATLAB    0.0004  CHOLMOD    0.0002  speedup     1.96
-time: amd         0.0003 mnnz(L)      0.0 mfl        0  fl/nnz(L)     18.1
-time: metis       0.0009 mnnz(L)      0.0 mfl        0  fl/nnz(L)     21.3
-
-metis/amd time:   3.2102 nnz(L):   1.0960
-
-================== Problem: HB/bcspwr04  n: 274 nnz: 1612
-title: SYMMETRIC STRUCTURE EQUIVALENCED REPRESENTATION OF U.S. POWER NETWORK
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     1.99
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)      6.2
-time: metis       0.0006 mnnz(L)      0.0 mfl        0  fl/nnz(L)      7.1
-
-metis/amd time:   3.2887 nnz(L):   1.0819
-
-================== Problem: Pothen/mesh3e1  n: 289 nnz: 1377
-title: mesh3e1, with coordinates.  From NASA, collected by Alex Pothen
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     2.11
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     11.3
-time: metis       0.0006 mnnz(L)      0.0 mfl        0  fl/nnz(L)     12.7
-
-metis/amd time:   2.3906 nnz(L):   1.0908
-
-================== Problem: Pothen/mesh3em5  n: 289 nnz: 1377
-title: mesh3em5, with coordinates.  From NASA, collected by Alex Pothen
-
-symbfact time: MATLAB    0.0003  CHOLMOD    0.0002  speedup     1.71
-time: amd         0.0002 mnnz(L)      0.0 mfl        0  fl/nnz(L)     11.3
-time: metis       0.0006 mnnz(L)      0.0 mfl        0  fl/nnz(L)     12.7
-
-metis/amd time:   2.4410 nnz(L):   1.0908
-test8 passed
-=================================================================
-test9: test metis, etree, bisect, nesdis
-
-Prob = 
-
-     title: 'S  STIFFNESS MATRIX - MODULE OF AN OFFSHORE PLATFORM'
-         A: [3948x3948 double]
-      name: 'HB/bcsstk15'
-        id: 37
-      date: '1985'
-    author: 'M. Will'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-
-metis:
-Elapsed time is 0.100277 seconds.
-Elapsed time is 0.100283 seconds.
-Elapsed time is 0.101989 seconds.
-Elapsed time is 0.113528 seconds.
-Elapsed time is 0.115154 seconds.
-
-metis(A):
-Elapsed time is 0.058451 seconds.
-
-lnz0 =
-
-      492391
-
-
-amd:
-Elapsed time is 0.009234 seconds.
-
-lnz =
-
-      614590
-
-
-bisect:
-Elapsed time is 0.040865 seconds.
-Elapsed time is 0.039559 seconds.
-Elapsed time is 0.040628 seconds.
-Elapsed time is 0.061155 seconds.
-Elapsed time is 0.063285 seconds.
-
-nested dissection:
-Elapsed time is 0.137077 seconds.
-Elapsed time is 0.135862 seconds.
-Elapsed time is 0.136597 seconds.
-Elapsed time is 0.174602 seconds.
-Elapsed time is 0.175804 seconds.
-
-nested_dissection(A):
-Elapsed time is 0.078392 seconds.
-
-lnz1 =
-
-      485679
-
-test9 passed
-=================================================================
-test10: test cholmod2's backslash
-test matrices sorted by dimension:
-1440: Oberwolfach          LFAT5                          14 1
-1438: Oberwolfach          LF10                           18 1
- 436: FIDAP                ex5                            27 1
-  23: HB                   bcsstk01                       48 1
- 872: Pothen               mesh1e1                        48 1
- 873: Pothen               mesh1em1                       48 1
- 874: Pothen               mesh1em6                       48 1
-  24: HB                   bcsstk02                       66 1
-  57: HB                   bcsstm02                       66 1
- 220: HB                   nos4                          100 1
-  25: HB                   bcsstk03                      112 1
-1506: Pajek                Journals                      124 1
-  26: HB                   bcsstk04                      132 1
-  44: HB                   bcsstk22                      138 1
-  72: HB                   bcsstm22                      138 1
- 206: HB                   lund_a                        147 1
- 207: HB                   lund_b                        147 1
-  27: HB                   bcsstk05                      153 1
-  60: HB                   bcsstm05                      153 1
- 217: HB                   nos1                          237 1
- 877: Pothen               mesh3e1                       289 1
- 878: Pothen               mesh3em5                      289 1
- 875: Pothen               mesh2e1                       306 1
- 876: Pothen               mesh2em5                      306 1
- 229: HB                   plat362                       362 1
- 315: Bai                  mhdb416                       416 1
-  28: HB                   bcsstk06                      420 1
-  29: HB                   bcsstk07                      420 1
-  61: HB                   bcsstm06                      420 1
-  62: HB                   bcsstm07                      420 1
- 221: HB                   nos5                          468 1
-  42: HB                   bcsstk20                      485 1
-  70: HB                   bcsstm20                      485 1
-   2: HB                   494_bus                       494 1
- 339: Boeing               bcsstk34                      588 1
-   3: HB                   662_bus                       662 1
- 222: HB                   nos6                          675 1
-   4: HB                   685_bus                       685 1
- 357: Boeing               msc00726                      726 1
- 223: HB                   nos7                          729 1
-  41: HB                   bcsstk19                      817 1
-  69: HB                   bcsstm19                      817 1
- 159: HB                   gr_30_30                      900 1
- 218: HB                   nos2                          957 1
- 219: HB                   nos3                          960 1
- 358: Boeing               msc01050                     1050 1
-  30: HB                   bcsstk08                     1074 1
-  63: HB                   bcsstm08                     1074 1
-  31: HB                   bcsstk09                     1083 1
-  64: HB                   bcsstm09                     1083 1
-
-nn =
-
-        1440
-
-
-Prob = 
-
-      name: 'Oberwolfach/LFAT5'
-     title: 'Oberwolfach: linear 1D beam'
-         A: [14x14 double]
-        id: 1440
-     notes: 'Primary matrix in this model reduction problem is the Oberwolfach K matrix'
-       aux: [1x1 struct]
-      date: '2004'
-    author: 'J. Lienemann, A. Greiner, J. Korvink'
-        ed: 'E. Rudnyi'
-      kind: 'model reduction problem'
-
-A: [n     14 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-14 :  -0.6] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     14 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-14 :  -1.2] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     14 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     14 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     14 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-13 :  -0.3] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     14 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     14 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-14 :   0.5] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     14 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     14 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     14 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     14 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     14 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     14 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     14 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     14 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     14 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-18 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     14 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-16 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     14 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 7e-16 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     14 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-16 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     14 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   2.4]
-
-nn =
-
-        1438
-
-
-Prob = 
-
-      name: 'Oberwolfach/LF10'
-     title: 'Oberwolfach: linear 1D beam'
-         A: [18x18 double]
-        id: 1438
-     notes: 'Primary matrix in this model reduction problem is the Oberwolfach K matrix'
-       aux: [1x1 struct]
-      date: '2004'
-    author: 'J. Lienemann, A. Greiner, J. Korvink'
-        ed: 'E. Rudnyi'
-      kind: 'model reduction problem'
-
-A: [n     18 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-13 :  -2.6] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-12 :  -1.0] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-12 :  -1.3] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-12 :  -0.6] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-12 :  -1.2] [t1:     0.00 t2     0.00 :   0.7]
-A: [n     18 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-12 :  -0.7] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-12 :  -0.7] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-12 :   0.1] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-12 :  -1.3] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-12 :  -0.8] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 9e-16 :  -0.2] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     18 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-15 :  -0.5] [t1:     0.00 t2     0.00 :   0.7]
-A: [n     18 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-15 :  -0.3] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     18 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-15 :   0.1] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-15 :  -0.2] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     18 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-16 :   0.3] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     18 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-16 :   0.1] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     18 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-16 :   0.8] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     18 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-15 :   0.1] [t1:     0.00 t2     0.00 :   0.8]
-
-nn =
-
-   436
-
-
-Prob = 
-
-     title: ' TEST MATRIX FROM FIDAP: EX5.MAT'
-         A: [27x27 double]
-      name: 'FIDAP/ex5'
-        id: 436
-      date: '1994'
-    author: 'A. Baggag, Y. Saad'
-        ed: 'A. Baggag, Y. Saad'
-      kind: 'computational fluid dynamics problem'
-
-A: [n     27 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-08 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     27 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-08 :  -0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     27 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-08 :   0.3] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 5e-08 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 5e-08 :  -0.0] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     27 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-09 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-09 :  -0.7] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     27 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 7e-09 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     27 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 8e-09 :  -0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     27 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     27 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     27 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 6e-16 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     27 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    23
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX SMALL GENERALIZED EIGENVALUE PROBLEM'
-         A: [48x48 double]
-      name: 'HB/bcsstk01'
-        id: 23
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-12 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   0.7]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 8e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 8e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-16 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   872
-
-
-Prob = 
-
-         A: [48x48 double]
-     title: 'mesh1e1, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh1e1'
-        id: 872
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-15 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     48 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 7e-16 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-
-nn =
-
-   873
-
-
-Prob = 
-
-         A: [48x48 double]
-     title: 'mesh1em1, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh1em1'
-        id: 873
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 7e-15 :   0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-15 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-15 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-16 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-
-nn =
-
-   874
-
-
-Prob = 
-
-         A: [48x48 double]
-     title: 'mesh1em6, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh1em6'
-        id: 874
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-15 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     48 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     48 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n     48 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    24
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, SMALL OIL RIG, STATICALLY CONDENSED'
-         A: [66x66 double]
-      name: 'HB/bcsstk02'
-        id: 24
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n     66 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-12 :  -0.3] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     66 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-12 :  -0.2] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     66 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-12 :  -0.1] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     66 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 7e-12 :  -0.1] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     66 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 7e-12 :  -0.1] [t1:     0.00 t2     0.00 :   0.7]
-A: [n     66 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-13 :   0.2] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     66 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 7e-13 :  -0.1] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     66 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-12 :  -0.3] [t1:     0.00 t2     0.00 :   0.5]
-A: [n     66 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-12 :  -0.0] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     66 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-12 :  -0.2] [t1:     0.00 t2     0.00 :   0.6]
-A: [n     66 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.3] [t1:     0.00 t2     0.00 :   1.2]
-A: [n     66 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-14 :   0.2] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     66 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-14 :   0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     66 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-14 :   0.2] [t1:     0.00 t2     0.00 :   1.1]
-A: [n     66 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n     66 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 9e-16 :  -0.1] [t1:     0.00 t2     0.00 :   1.2]
-A: [n     66 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-15 :   0.2] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     66 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-15 :   0.2] [t1:     0.00 t2     0.00 :   0.8]
-A: [n     66 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-15 :   0.1] [t1:     0.00 t2     0.00 :   1.2]
-A: [n     66 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-15 :   0.2] [t1:     0.00 t2     0.00 :   0.8]
-
-nn =
-
-    57
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, SMALL OIL RIG, STATICALLY CONDENSED'
-         A: [66x66 double]
-      name: 'HB/bcsstm02'
-        id: 57
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n     66 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 6e-16 :  -2.2] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-15 :  -1.8] [t1:     0.00 t2     0.00 :   0.3]
-A: [n     66 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 6e-16 :  -2.5] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-15 :  -2.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-15 :  -2.5] [t1:     0.00 t2     0.00 :   0.3]
-A: [n     66 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-17 :  -5.7] [t1:     0.00 t2     0.00 :   0.1]
-A: [n     66 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-16 :  -1.7] [t1:     0.00 t2     0.00 :   0.1]
-A: [n     66 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-16 :  -2.2] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-16 :  -2.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 7e-16 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 7e-16 :  -2.4] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-16 :  -2.3] [t1:     0.00 t2     0.00 :   0.3]
-A: [n     66 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-16 :  -3.3] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-15 :  -2.4] [t1:     0.00 t2     0.00 :   0.4]
-A: [n     66 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-16 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-16 :  -2.3] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-16 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-16 :  -1.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n     66 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-16 :  -1.9] [t1:     0.00 t2     0.00 :   0.3]
-
-nn =
-
-   220
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX OF BEAM STRUCTURE, NOVEMBER 1982.'
-         A: [100x100 double]
-      name: 'HB/nos4'
-        id: 220
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    100 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-12 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    100 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    100 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-14 :  -0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-13 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    100 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    100 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    100 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    100 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    100 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    100 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    25
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, SMALL TEST STRUCTURE'
-         A: [112x112 double]
-      name: 'HB/bcsstk03'
-        id: 25
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    112 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    112 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-11 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-11 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    112 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 6e-11 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 9e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 9e-12 :   0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    112 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 8e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-12 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    112 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    112 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    112 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    112 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    112 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    112 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-
-nn =
-
-        1506
-
-
-Prob = 
-
-      name: 'Pajek/Journals'
-     title: 'Pajek network: Slovenian journals 1999-2000'
-         A: [124x124 double]
-        id: 1506
-      kind: 'undirected weighted graph'
-     notes: [14x78 char]
-       aux: [1x1 struct]
-      date: '2000'
-    author: 'CATI Center Ljubljana'
-        ed: 'V. Batagelj'
-
-A: [n    124 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-14 :  -0.2] [t1:     0.00 t2     0.00 :   0.7]
-A: [n    124 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-14 :  -0.2] [t1:     0.10 t2     0.00 :  57.8]
-A: [n    124 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-14 :  -0.2] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    124 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 8e-14 :   0.2] [t1:     0.00 t2     0.00 :   0.7]
-A: [n    124 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 8e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    124 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.5] [t1:     0.00 t2     0.00 :   0.7]
-A: [n    124 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.7]
-A: [n    124 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.1] [t1:     0.00 t2     0.00 :   0.6]
-A: [n    124 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.1] [t1:     0.00 t2     0.00 :   0.7]
-A: [n    124 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-14 :   0.1] [t1:     0.00 t2     0.00 :   0.7]
-A: [n    124 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-14 :   0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    124 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-14 :   0.1] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    124 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    124 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    124 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    124 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-15 :  -0.4] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    124 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-14 :   0.3] [t1:     0.00 t2     0.10 :   0.0]
-A: [n    124 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :  -0.2] [t1:     0.00 t2     0.01 :   0.7]
-A: [n    124 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :  -0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    124 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.2] [t1:     0.00 t2     0.01 :   0.7]
-
-nn =
-
-    26
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, OIL RIG, NOT CONDENSED (SAME MODEL AS X02)'
-         A: [132x132 double]
-      name: 'HB/bcsstk04'
-        id: 26
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    132 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    132 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-11 :  -0.1] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-11 :   0.4] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    132 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-12 :   0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    132 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-12 :  -0.1] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-12 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    132 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    132 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    132 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    132 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    132 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    132 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    132 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    132 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    44
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX - TEXTILE LOOM FRAME'
-         A: [138x138 double]
-      name: 'HB/bcsstk22'
-        id: 44
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    138 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.3]
-A: [n    138 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-11 :  -0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-11 :   0.2] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 8e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    138 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    138 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    138 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-16 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    138 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    72
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS      MATRIX - TEXTILE LOOM FRAME'
-         A: [138x138 double]
-      name: 'HB/bcsstm22'
-        id: 72
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    138 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-15 :  -1.8] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    138 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-15 :  -1.9] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    138 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-15 :  -2.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    138 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-15 :  -2.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    138 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-15 :  -1.9] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    138 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-16 :  -1.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-16 :  -1.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-16 :  -1.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-16 :  -3.7] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 9e-16 :  -1.7] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 7e-16 :  -3.5] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    138 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 7e-16 :  -3.5] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-15 :  -3.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    138 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-15 :  -3.7] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    138 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-15 :  -2.9] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    138 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 7e-16 :  -1.4] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 7e-16 :  -1.4] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-16 :  -2.5] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    138 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-16 :  -2.3] [t1:     0.00 t2     0.00 :   0.1]
-
-nn =
-
-   206
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX A OF LUND EIGENVALUE PROBLEM, MAY 1974'
-         A: [147x147 double]
-      name: 'HB/lund_a'
-        id: 206
-      date: '1974'
-    author: 'T. Johansson'
-        ed: 'A. Curtis, I. Duff, J. Reid'
-      kind: 'structural problem'
-
-A: [n    147 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-10 :  -0.1] [t1:     0.00 t2     0.00 :   1.4]
-A: [n    147 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-10 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 5e-10 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-11 :   0.1] [t1:     0.00 t2     0.00 :   1.3]
-A: [n    147 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-11 :   0.2] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-11 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    147 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    147 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    147 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   207
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX B OF LUND EIGENVALUE PROBLEM, MAY 1974'
-         A: [147x147 double]
-      name: 'HB/lund_b'
-        id: 207
-      date: '1974'
-    author: 'T. Johansson'
-        ed: 'A. Curtis, I. Duff, J. Reid'
-      kind: 'structural problem'
-
-A: [n    147 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 8e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    147 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-12 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    147 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    147 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    147 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    147 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    147 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    27
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, TRANSMISSION TOWER, LUMPED MASSES'
-         A: [153x153 double]
-      name: 'HB/bcsstk05'
-        id: 27
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    153 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 9e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    153 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    153 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-11 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-12 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    153 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    153 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    153 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    153 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    153 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    153 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    153 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    60
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, TRANSMISSION TOWER, LUMPED MASSES'
-         A: [153x153 double]
-      name: 'HB/bcsstm05'
-        id: 60
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    153 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-15 :  -2.8] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    153 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-15 :  -2.5] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    153 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    153 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-15 :  -2.3] [t1:     0.00 t2     0.00 :   0.5]
-A: [n    153 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-15 :  -2.2] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    153 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-16 :  -2.3] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 9e-16 :  -1.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-17 :  -8.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-16 :  -2.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-15 :  -2.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    153 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    153 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-15 :  -2.6] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    153 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    153 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-15 :  -2.0] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    153 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-16 :  -3.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-16 :  -2.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-16 :  -3.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 5e-16 :  -2.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    153 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 9e-16 :  -1.6] [t1:     0.00 t2     0.00 :   0.1]
-
-nn =
-
-   217
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX, FE APPROXIMATION TO BIHARMONIC OPERATOR ON BEAM.'
-         A: [237x237 double]
-      name: 'HB/nos1'
-        id: 217
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    237 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 8e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 8e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    237 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 9e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 7e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    237 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 7e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    237 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-10 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    237 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    237 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    237 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    237 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    237 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    237 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   877
-
-
-Prob = 
-
-         A: [289x289 double]
-     title: 'mesh3e1, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh3e1'
-     Zeros: [289x289 double]
-        id: 877
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-A: [n    289 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    289 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-14 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    289 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-14 :   0.0] [t1:     0.10 t2     0.00 :  96.1]
-
-nn =
-
-   878
-
-
-Prob = 
-
-         A: [289x289 double]
-     title: 'mesh3em5, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh3em5'
-     Zeros: [289x289 double]
-        id: 878
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-A: [n    289 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.10 :   0.0]
-A: [n    289 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-A: [n    289 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    289 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    289 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   875
-
-
-Prob = 
-
-         A: [306x306 double]
-     title: 'mesh2e1, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh2e1'
-        id: 875
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-A: [n    306 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.10 :   0.0]
-A: [n    306 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-13 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-13 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-13 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   876
-
-
-Prob = 
-
-         A: [306x306 double]
-     title: 'mesh2em5, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh2em5'
-        id: 876
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-A: [n    306 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    306 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-14 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-14 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.5]
-A: [n    306 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 5e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    306 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    306 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   229
-
-
-Prob = 
-
-     title: 'SPLATZMAN FINITE DIFFERENCE MODEL OF ATLANTICOCEAN'
-         A: [362x362 double]
-      name: 'HB/plat362'
-        id: 229
-      date: '1975'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: '2D/3D problem'
-
-A: [n    362 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-05 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    362 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 8e-05 :  -0.2] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-05 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 9e-05 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-04 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    362 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-05 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    362 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-04 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-04 :  -0.1] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    362 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-04 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    362 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-04 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    362 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    362 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 9e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    362 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    362 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   315
-
-
-Prob = 
-
-     title: 'MAGNETO-HYDRO-DYNAMICS ALFVEN SPECTRAL PROBLEM'
-         A: [416x416 double]
-      name: 'Bai/mhdb416'
-        id: 315
-      date: '1994'
-    author: 'A. Booten, M. Kooper, H. van der Vorst, S. Poedts, J. Goedbloed'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: 'electromagnetics problem'
-
-A: [n    416 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-12 :  -0.1] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-12 :  -0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    416 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    416 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    416 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-13 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    416 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    416 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    416 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 6e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    416 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.3]
-A: [n    416 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    416 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.10 t2     0.00 : 206.5]
-A: [n    416 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-
-nn =
-
-    28
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, MEDIUM TEST PROBLEM, LUMPED MASSES'
-         A: [420x420 double]
-      name: 'HB/bcsstk06'
-        id: 28
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-10 :   0.1] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 8e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-11 :  -0.1] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-11 :  -0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 8e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 7e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 7e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.10 :   0.0]
-A: [n    420 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    29
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, MEDIUM TEST PROBLEM, CONSISTENT MASSES'
-         A: [420x420 double]
-      name: 'HB/bcsstk07'
-        id: 29
-      kind: 'duplicate structural problem'
-     notes: 'duplicate of HB/bcsstk06'
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-10 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-10 :  -0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-11 :   0.1] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-11 :  -0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 8e-11 :  -0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.10 :   0.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-    61
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, MEDIUM TEST PROBLEM, LUMPED MASSES'
-         A: [420x420 double]
-      name: 'HB/bcsstm06'
-        id: 61
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-15 :  -2.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-15 :  -2.7] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-15 :  -2.6] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-15 :  -2.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 6e-15 :  -2.5] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-16 :  -3.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-16 :  -3.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 9e-16 :  -2.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-16 :  -4.4] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-15 :  -2.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-15 :  -3.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-15 :  -3.8] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-15 :  -3.7] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-15 :  -3.5] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-15 :  -3.3] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-16 :  -4.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-16 :  -3.7] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-16 :  -4.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-16 :  -4.5] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-16 :  -4.0] [t1:     0.00 t2     0.00 :   0.1]
-
-nn =
-
-    62
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, MEDIUM TEST PROBLEM, CONSISTENT MASSES'
-         A: [420x420 double]
-      name: 'HB/bcsstm07'
-        id: 62
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 6e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 6e-13 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 7e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    420 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-13 :  -0.1] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    420 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 7e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    420 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    420 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   221
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX, FE APPROXIMATION OF BUILDING.'
-         A: [468x468 double]
-      name: 'HB/nos5'
-        id: 221
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    468 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    468 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    468 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    468 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    468 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    468 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 5e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    468 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    468 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.01 :   1.0]
-A: [n    468 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    468 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 6e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 9e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.1]
-A: [n    468 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:1 nrhs 9 real 1]  Warning: Matrix is indefinite or singular to working precision
- [e1: 2e-14 :   NaN] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    468 real 0]    B: [sp:1 nrhs 1 real 0]  Warning: Matrix is singular to working precision.
-> In testsolve at 15
-  In test10 at 116
-  In cholmod_test at 112
-Warning: Matrix is indefinite or singular to working precision
- [e1:   NaN :   NaN] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    468 real 0]    B: [sp:1 nrhs 9 real 0]  Warning: Matrix is singular to working precision.
-> In testsolve at 15
-  In test10 at 117
-  In cholmod_test at 112
-Warning: Matrix is indefinite or singular to working precision
- [e1:   NaN :   NaN] [t1:     0.02 t2     0.02 :   1.0]
-
-nn =
-
-    42
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX - FRAME WITHIN A SUSPENSION BRIDGE'
-         A: [485x485 double]
-      name: 'HB/bcsstk20'
-        id: 42
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    485 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 9e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-05 :   0.4] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 9e-06 :  -0.3] [t1:     0.00 t2     0.00 :   1.3]
-A: [n    485 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 9e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-05 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-07 :   0.0] [t1:     0.00 t2     0.00 :   1.2]
-A: [n    485 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 8e-07 :   0.4] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 7e-07 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-06 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    485 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    485 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    485 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 7e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 7e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 7e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    485 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    485 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    485 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-
-nn =
-
-    70
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS      MATRIX - FRAME WITHIN A SUSPENSION BRIDGE'
-         A: [485x485 double]
-      name: 'HB/bcsstm20'
-        id: 70
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    485 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-15 :  -2.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 6e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    485 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 6e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    485 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 9e-15 :  -2.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-14 :  -1.8] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    485 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-16 :  -3.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 8e-16 :  -2.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 9e-16 :  -2.3] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-16 :  -7.4] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-16 :  -6.3] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    485 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-16 :  -6.2] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    485 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-16 :  -6.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 7e-16 :  -6.2] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    485 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-16 :  -5.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-16 :  -5.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-17 :  -8.7] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    485 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-16 :  -4.1] [t1:     0.00 t2     0.00 :   0.1]
-
-nn =
-
-     2
-
-
-Prob = 
-
-     title: 'S ADMITTANCE MATRIX  494 BUS POWER SYSTEM, D.J.TYLAVSKY, JULY 1985.'
-         A: [494x494 double]
-      name: 'HB/494_bus'
-        id: 2
-      date: '1985'
-    author: 'D. Tylavsky'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'power network problem'
-
-A: [n    494 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-09 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 6e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-11 :  -0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    494 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    494 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-11 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    494 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 7e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    494 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 8e-15 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    494 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 9e-15 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    494 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    494 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-
-nn =
-
-   339
-
-
-Prob = 
-
-     title: 'NASTRAN BUCKLING PROBLEM STIFFNESS MATRIX'
-         A: [588x588 double]
-      name: 'Boeing/bcsstk34'
-        id: 339
-      date: '1995'
-    author: 'R. Grimes'
-        ed: 'T. Davis'
-      kind: 'structural problem'
-
-A: [n    588 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 6e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.1]
-A: [n    588 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 9e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    588 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    588 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    588 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-13 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    588 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    588 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-13 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    588 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-14 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    588 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-14 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    588 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-14 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    588 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-14 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    588 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-14 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-
-nn =
-
-     3
-
-
-Prob = 
-
-     title: 'S ADMITTANCE MATRIX  662 BUS POWER SYSTEM, D.J.TYLAVSKY, JULY 1985.'
-         A: [662x662 double]
-      name: 'HB/662_bus'
-        id: 3
-      date: '1985'
-    author: 'D. Tylavsky'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'power network problem'
-
-A: [n    662 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 9e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 9e-10 :  -0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    662 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-09 :  -0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-09 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    662 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-09 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    662 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-11 :  -0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    662 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    662 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 9e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    662 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    662 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   222
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX, POISSON'S EQUATION IN L SHAPE, MIXED BC.'
-         A: [675x675 double]
-      name: 'HB/nos6'
-        id: 222
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: '2D/3D problem'
-
-A: [n    675 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-08 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-08 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-08 :  -0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-08 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-08 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 9e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-09 :   0.1] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 7e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    675 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    675 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    675 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    675 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    675 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    675 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    675 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    675 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-     4
-
-
-Prob = 
-
-     title: 'S ADMITTANCE MATRIX  685 BUS POWER SYSTEM, D.J.TYLAVSKY, JULY 1985.'
-         A: [685x685 double]
-      name: 'HB/685_bus'
-        id: 4
-      date: '1985'
-    author: 'D. Tylavsky'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'power network problem'
-
-A: [n    685 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-10 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-10 :  -0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-10 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 9e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 6e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 9e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    685 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    685 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   357
-
-
-Prob = 
-
-     title: 'SYMMETRIC TEST MATRIX FROM MSC/NASTRAN BC4F8.OUT2'
-         A: [726x726 double]
-      name: 'Boeing/msc00726'
-        id: 357
-      date: '1995'
-    author: 'R. Grimes'
-        ed: 'T. Davis'
-      kind: 'structural problem'
-
-A: [n    726 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-11 :   0.0] [t1:     0.02 t2     0.02 :   1.1]
-A: [n    726 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-11 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    726 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-11 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    726 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-11 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    726 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-11 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    726 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 5e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    726 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-12 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    726 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-12 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    726 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-12 :   0.0] [t1:     0.12 t2     0.02 :   5.4]
-A: [n    726 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-12 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    726 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-13 :   0.0] [t1:     0.06 t2     0.16 :   0.4]
-A: [n    726 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-13 :   0.0] [t1:     0.17 t2     0.07 :   2.3]
-A: [n    726 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-13 :   0.0] [t1:     0.18 t2     0.18 :   1.0]
-A: [n    726 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-13 :   0.0] [t1:     0.16 t2     0.06 :   2.6]
-A: [n    726 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-13 :   0.0] [t1:     0.18 t2     0.18 :   1.0]
-A: [n    726 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 5e-14 :   0.0] [t1:     0.16 t2     0.06 :   2.6]
-A: [n    726 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-14 :   0.0] [t1:     0.18 t2     0.17 :   1.0]
-A: [n    726 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-14 :   0.0] [t1:     0.19 t2     0.09 :   2.2]
-A: [n    726 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 7e-14 :   0.0] [t1:     0.06 t2     0.16 :   0.4]
-A: [n    726 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.19 t2     0.19 :   1.0]
-
-nn =
-
-   223
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX, POISSON'S EQUATION IN UNIT CUBE.'
-         A: [729x729 double]
-      name: 'HB/nos7'
-        id: 223
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: '2D/3D problem'
-
-A: [n    729 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    729 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 3e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    729 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 3e-06 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    729 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 4e-06 :   0.0] [t1:     0.00 t2     0.01 :   0.9]
-A: [n    729 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-06 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    729 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-09 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    729 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-08 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    729 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 9e-08 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    729 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-07 :   0.0] [t1:     0.10 t2     0.01 :  18.0]
-A: [n    729 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-07 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    729 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 9e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    729 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-13 :   0.0] [t1:     0.02 t2     0.12 :   0.2]
-A: [n    729 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-13 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    729 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    729 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-13 :   0.0] [t1:     0.13 t2     0.03 :   5.0]
-A: [n    729 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    729 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-14 :   0.0] [t1:     0.02 t2     0.12 :   0.2]
-A: [n    729 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.04 t2     0.04 :   1.0]
-A: [n    729 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.11 t2     0.01 :   8.6]
-A: [n    729 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.04 t2     0.04 :   1.0]
-
-nn =
-
-    41
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX - PART OF A SUSPENSION BRIDGE'
-         A: [817x817 double]
-      name: 'HB/bcsstk19'
-        id: 41
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    817 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 7e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 7e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 7e-06 :  -0.2] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-05 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-05 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 4e-07 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-07 :  -0.1] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    817 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-06 :  -0.2] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 1e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-06 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    817 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    817 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    817 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    817 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    817 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    817 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    817 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.8]
-
-nn =
-
-    69
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS      MATRIX - PART OF A SUSPENSION BRIDGE'
-         A: [817x817 double]
-      name: 'HB/bcsstm19'
-        id: 69
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    817 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 8e-15 :  -2.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 8e-15 :  -2.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 9e-15 :  -2.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    817 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-14 :  -2.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-14 :  -1.9] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    817 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-15 :  -2.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-15 :  -2.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :  -2.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-15 :  -1.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-15 :  -1.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 9e-16 :  -5.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 9e-16 :  -5.8] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    817 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-15 :  -4.9] [t1:     0.00 t2     0.00 :   0.2]
-A: [n    817 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-15 :  -4.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-15 :  -5.0] [t1:     0.00 t2     0.00 :   0.3]
-A: [n    817 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-16 :  -5.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-16 :  -4.5] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-16 :  -6.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n    817 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-16 :  -6.3] [t1:     0.00 t2     0.00 :   0.1]
-
-nn =
-
-   159
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX FROM NINE POINT START ON A  30 X  30 GRID.'
-         A: [900x900 double]
-      name: 'HB/gr_30_30'
-        id: 159
-      date: '1983'
-    author: 'R. Grimes'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: '2D/3D problem'
-
-A: [n    900 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 9e-12 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    900 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 9e-12 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 9e-12 :  -0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    900 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 6e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    900 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-13 :   0.0] [t1:     0.01 t2     0.01 :   0.7]
-A: [n    900 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    900 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-13 :   0.0] [t1:     0.01 t2     0.01 :   0.9]
-A: [n    900 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    900 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    900 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.01 t2     0.01 :   0.9]
-A: [n    900 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 4e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    900 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-14 :   0.0] [t1:     0.01 t2     0.01 :   0.9]
-
-nn =
-
-   218
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX, FE APPROXIMATION TO BIHARMONIC OPERATOR ON BEAM.'
-         A: [957x957 double]
-      name: 'HB/nos2'
-        id: 218
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    957 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 5e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    957 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 7e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    957 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 8e-06 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-07 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    957 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-07 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-07 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 9e-08 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    957 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 6e-07 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.0]
-A: [n    957 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 8e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    957 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    957 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    957 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    957 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    957 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-A: [n    957 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   1.1]
-A: [n    957 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-14 :   0.0] [t1:     0.00 t2     0.00 :   0.9]
-
-nn =
-
-   219
-
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX, FE APPROXIMATION TO BIHARMONIC OPERATOR ON PLATE'
-         A: [960x960 double]
-      name: 'HB/nos3'
-        id: 219
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n    960 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 4e-10 :   0.0] [t1:     0.01 t2     0.00 :   1.0]
-A: [n    960 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 6e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 7e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 1e-11 :   0.0] [t1:     0.00 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 3e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 2e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    960 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-13 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    960 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-13 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-13 :   0.0] [t1:     0.03 t2     0.02 :   1.0]
-A: [n    960 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 4e-14 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n    960 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n    960 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 5e-14 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n    960 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 7e-14 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-
-nn =
-
-   358
-
-
-Prob = 
-
-     title: 'SYMMETRIC TEST MATRIX FROM MSC/NASTRAN STARF8.OUT2'
-         A: [1050x1050 double]
-     Zeros: [1050x1050 double]
-      name: 'Boeing/msc01050'
-        id: 358
-      date: '1995'
-    author: 'R. Grimes'
-        ed: 'T. Davis'
-      kind: 'structural problem'
-
-A: [n   1050 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-00 :   0.0] [t1:     0.01 t2     0.01 :   1.1]
-A: [n   1050 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e+00 :  -0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1050 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e+00 :  -0.0] [t1:     0.01 t2     0.01 :   1.1]
-A: [n   1050 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e+00 :  -0.0] [t1:     0.01 t2     0.01 :   1.1]
-A: [n   1050 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e+00 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1050 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-02 :   0.0] [t1:     0.01 t2     0.01 :   1.1]
-A: [n   1050 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-01 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1050 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-01 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1050 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-02 :   0.0] [t1:     0.01 t2     0.01 :   1.1]
-A: [n   1050 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-01 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1050 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1050 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1050 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-13 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n   1050 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-13 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1050 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-13 :   0.0] [t1:     0.03 t2     0.12 :   0.2]
-A: [n   1050 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1050 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-14 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1050 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 4e-14 :   0.0] [t1:     0.03 t2     0.03 :   0.9]
-A: [n   1050 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 5e-14 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1050 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 6e-14 :   0.0] [t1:     0.03 t2     0.03 :   0.9]
-
-nn =
-
-    30
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, FRAME BUILDING (TV STUDIO)'
-         A: [1074x1074 double]
-      name: 'HB/bcsstk08'
-        id: 30
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n   1074 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1074 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 4e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1074 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 4e-11 :   0.0] [t1:     0.01 t2     0.11 :   0.1]
-A: [n   1074 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 5e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1074 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 7e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1074 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1074 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-11 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1074 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-11 :   0.0] [t1:     0.11 t2     0.01 :   8.7]
-A: [n   1074 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 8e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1074 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-11 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1074 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-13 :   0.0] [t1:     0.13 t2     0.03 :   4.9]
-A: [n   1074 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-13 :   0.0] [t1:     0.04 t2     0.14 :   0.3]
-A: [n   1074 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-13 :   0.0] [t1:     0.05 t2     0.15 :   0.3]
-A: [n   1074 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-13 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n   1074 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 3e-13 :   0.0] [t1:     0.15 t2     0.05 :   3.2]
-A: [n   1074 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 2e-14 :   0.0] [t1:     0.13 t2     0.03 :   4.9]
-A: [n   1074 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 2e-14 :   0.0] [t1:     0.04 t2     0.14 :   0.3]
-A: [n   1074 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 3e-14 :   0.0] [t1:     0.06 t2     0.16 :   0.4]
-A: [n   1074 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 3e-14 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n   1074 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 5e-14 :   0.0] [t1:     0.06 t2     0.16 :   0.4]
-
-nn =
-
-    63
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, FRAME BUILDING (TV STUDIO)'
-         A: [1074x1074 double]
-      name: 'HB/bcsstm08'
-        id: 63
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n   1074 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 3e-15 :  -3.5] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 5e-15 :  -2.8] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1074 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 5e-15 :  -3.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1074 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 8e-15 :  -2.9] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-14 :  -2.7] [t1:     0.00 t2     0.00 :   0.3]
-A: [n   1074 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 5e-16 :  -3.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-16 :  -3.5] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-15 :  -2.5] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 7e-16 :  -3.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-15 :  -3.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 6e-17 :  -9.2] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-16 :  -7.3] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1074 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-16 :  -7.7] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1074 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 7e-18 : -13.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 6e-16 :  -6.8] [t1:     0.00 t2     0.00 :   0.4]
-A: [n   1074 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 6e-17 :  -6.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 6e-17 :  -6.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-16 :  -6.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1074 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 4e-16 :  -4.6] [t1:     0.00 t2     0.00 :   0.1]
-
-nn =
-
-    31
-
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, SQUARE PLATE CLAMPED'
-         A: [1083x1083 double]
-      name: 'HB/bcsstk09'
-        id: 31
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n   1083 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 1e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1083 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 1e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1083 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 1e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1083 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 2e-10 :   0.0] [t1:     0.01 t2     0.11 :   0.1]
-A: [n   1083 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-10 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1083 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 5e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1083 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1083 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 1e-11 :   0.0] [t1:     0.01 t2     0.11 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 9e-12 :   0.0] [t1:     0.01 t2     0.01 :   1.0]
-A: [n   1083 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 2e-11 :   0.0] [t1:     0.02 t2     0.02 :   1.0]
-A: [n   1083 real 0]    B: [sp:0 nrhs 1 real 1]   [e1: 2e-13 :   0.0] [t1:     0.13 t2     0.03 :   4.6]
-A: [n   1083 real 0]    B: [sp:0 nrhs 4 real 1]   [e1: 2e-13 :   0.0] [t1:     0.04 t2     0.14 :   0.3]
-A: [n   1083 real 0]    B: [sp:0 nrhs 9 real 1]   [e1: 2e-13 :   0.0] [t1:     0.04 t2     0.14 :   0.3]
-A: [n   1083 real 0]    B: [sp:0 nrhs 1 real 0]   [e1: 3e-13 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n   1083 real 0]    B: [sp:0 nrhs 9 real 0]   [e1: 4e-13 :   0.0] [t1:     0.14 t2     0.04 :   3.3]
-A: [n   1083 real 0]    B: [sp:1 nrhs 1 real 1]   [e1: 3e-14 :   0.0] [t1:     0.03 t2     0.13 :   0.2]
-A: [n   1083 real 0]    B: [sp:1 nrhs 4 real 1]   [e1: 5e-14 :   0.0] [t1:     0.04 t2     0.14 :   0.3]
-A: [n   1083 real 0]    B: [sp:1 nrhs 9 real 1]   [e1: 5e-14 :   0.0] [t1:     0.05 t2     0.15 :   0.4]
-A: [n   1083 real 0]    B: [sp:1 nrhs 1 real 0]   [e1: 8e-14 :   0.0] [t1:     0.03 t2     0.03 :   1.0]
-A: [n   1083 real 0]    B: [sp:1 nrhs 9 real 0]   [e1: 1e-13 :   0.0] [t1:     0.16 t2     0.05 :   2.9]
-
-nn =
-
-    64
-
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, SQUARE PLATE CLAMPED'
-         A: [1083x1083 double]
-      name: 'HB/bcsstm09'
-        id: 64
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-A: [n   1083 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 7e-15 :  -3.4] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1083 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 8e-15 :  -3.2] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1083 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 9e-15 :  -3.1] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1083 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 1e-14 :  -3.1] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 2e-14 :  -2.9] [t1:     0.00 t2     0.00 :   0.3]
-A: [n   1083 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 7e-16 :  -4.3] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 1e-15 :  -3.7] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 2e-15 :  -3.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 8e-16 :  -4.8] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 3e-15 :  -3.6] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:0 nrhs 1 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:0 nrhs 4 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:0 nrhs 9 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.2]
-A: [n   1083 real 1]    B: [sp:0 nrhs 1 real 0]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:0 nrhs 9 real 0]   [e1: 1e-16 : -10.4] [t1:     0.00 t2     0.00 :   0.3]
-A: [n   1083 real 1]    B: [sp:1 nrhs 1 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 4 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 9 real 1]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 1 real 0]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-A: [n   1083 real 1]    B: [sp:1 nrhs 9 real 0]   [e1: 0e+00 :   0.0] [t1:     0.00 t2     0.00 :   0.1]
-=================================================================
-test11 : compare CHOLMOD and MATLAB, save results in Results.mat
-test matrices sorted by dimension:
-1440: Oberwolfach          LFAT5                          14 1
-1438: Oberwolfach          LF10                           18 1
- 436: FIDAP                ex5                            27 1
-  23: HB                   bcsstk01                       48 1
- 872: Pothen               mesh1e1                        48 1
- 873: Pothen               mesh1em1                       48 1
- 874: Pothen               mesh1em6                       48 1
-  24: HB                   bcsstk02                       66 1
-  57: HB                   bcsstm02                       66 1
- 220: HB                   nos4                          100 1
-  25: HB                   bcsstk03                      112 1
-1506: Pajek                Journals                      124 1
-  26: HB                   bcsstk04                      132 1
-  44: HB                   bcsstk22                      138 1
-  72: HB                   bcsstm22                      138 1
- 206: HB                   lund_a                        147 1
- 207: HB                   lund_b                        147 1
-  27: HB                   bcsstk05                      153 1
-  60: HB                   bcsstm05                      153 1
- 217: HB                   nos1                          237 1
- 877: Pothen               mesh3e1                       289 1
- 878: Pothen               mesh3em5                      289 1
- 875: Pothen               mesh2e1                       306 1
- 876: Pothen               mesh2em5                      306 1
- 229: HB                   plat362                       362 1
- 315: Bai                  mhdb416                       416 1
-  28: HB                   bcsstk06                      420 1
-  29: HB                   bcsstk07                      420 1
-  61: HB                   bcsstm06                      420 1
-  62: HB                   bcsstm07                      420 1
- 221: HB                   nos5                          468 1
-  42: HB                   bcsstk20                      485 1
-  70: HB                   bcsstm20                      485 1
-   2: HB                   494_bus                       494 1
- 339: Boeing               bcsstk34                      588 1
-   3: HB                   662_bus                       662 1
- 222: HB                   nos6                          675 1
-   4: HB                   685_bus                       685 1
- 357: Boeing               msc00726                      726 1
- 223: HB                   nos7                          729 1
-  41: HB                   bcsstk19                      817 1
-  69: HB                   bcsstm19                      817 1
- 159: HB                   gr_30_30                      900 1
- 218: HB                   nos2                          957 1
- 219: HB                   nos3                          960 1
- 358: Boeing               msc01050                     1050 1
-  30: HB                   bcsstk08                     1074 1
-  63: HB                   bcsstm08                     1074 1
-  31: HB                   bcsstk09                     1083 1
-  64: HB                   bcsstm09                     1083 1
-
-1440: Oberwolfach/LFAT5
-n 14 lnz 33 fl 91
-cholmod2: t:    0.00003 e: 6.4e-14  mflop      3
-matlab:  t:    0.00003 e: 4.3e-14  mflop      3   cholmod2 speedup:   1.1
-
-1438: Oberwolfach/LF10
-n 18 lnz 58 fl 198
-cholmod2: t:    0.00003 e: 1.8e-12  mflop      6
-matlab:  t:    0.00002 e: 1.1e-12  mflop      9   cholmod2 speedup:   0.6
-
-436: FIDAP/ex5
-n 27 lnz 153 fl 981
-cholmod2: t:    0.00009 e: 3.5e-08  mflop     11
-matlab:  t:    0.00012 e: 3.5e-08  mflop      8   cholmod2 speedup:   1.3
-
- 23: HB/bcsstk01
-n 48 lnz 489 fl 6009
-cholmod2: t:    0.00027 e: 1.2e-12  mflop     22
-matlab:  t:    0.00023 e: 1.2e-12  mflop     26   cholmod2 speedup:   0.8
-
-872: Pothen/mesh1e1
-n 48 lnz 336 fl 2678
-cholmod2: t:    0.00011 e: 4.1e-15  mflop     25
-matlab:  t:    0.00009 e: 4.1e-15  mflop     28   cholmod2 speedup:   0.9
-
-873: Pothen/mesh1em1
-n 48 lnz 336 fl 2678
-cholmod2: t:    0.00021 e: 5.7e-15  mflop     13
-matlab:  t:    0.00018 e: 5.7e-15  mflop     15   cholmod2 speedup:   0.8
-
-874: Pothen/mesh1em6
-n 48 lnz 336 fl 2678
-cholmod2: t:    0.00023 e: 2.5e-15  mflop     12
-matlab:  t:    0.00019 e: 2.5e-15  mflop     14   cholmod2 speedup:   0.8
-
- 24: HB/bcsstk02
-n 66 lnz 2211 fl 98021
-cholmod2: t:    0.00071 e: 5.7e-12  mflop    138
-matlab:  t:    0.00032 e: 5.7e-12  mflop    302   cholmod2 speedup:   0.5
-
- 57: HB/bcsstm02
-n 66 lnz 66 fl 66
-cholmod2: t:    0.00004 e: 3.3e-15  mflop      2
-matlab:  t:    0.00001 e: 2.5e-16  mflop      7   cholmod2 speedup:   0.2
-
-220: HB/nos4
-n 100 lnz 632 fl 4438
-cholmod2: t:    0.00040 e: 1.3e-12  mflop     11
-matlab:  t:    0.00037 e: 1.3e-12  mflop     12   cholmod2 speedup:   0.9
-
- 25: HB/bcsstk03
-n 112 lnz 384 fl 1360
-cholmod2: t:    0.00027 e: 2.4e-11  mflop      5
-matlab:  t:    0.00021 e: 2.4e-11  mflop      7   cholmod2 speedup:   0.8
-
-1506: Pajek/Journals
-n 124 lnz 6990 fl 505314
-cholmod2: t:    0.00131 e: 4.2e-14  mflop    386
-matlab:  t:    0.00087 e: 4.1e-14  mflop    580   cholmod2 speedup:   0.7
-
- 26: HB/bcsstk04
-n 132 lnz 3293 fl 90567
-cholmod2: t:    0.00092 e: 1.5e-11  mflop     98
-matlab:  t:    0.00132 e: 1.5e-11  mflop     68   cholmod2 speedup:   1.4
-
- 44: HB/bcsstk22
-n 138 lnz 680 fl 4224
-cholmod2: t:    0.00040 e: 8.2e-12  mflop     10
-matlab:  t:    0.00037 e: 8.2e-12  mflop     11   cholmod2 speedup:   0.9
-
- 72: HB/bcsstm22
-n 138 lnz 138 fl 138
-cholmod2: t:    0.00013 e: 5.4e-15  mflop      1
-matlab:  t:    0.00002 e: 1.1e-15  mflop      7   cholmod2 speedup:   0.1
-
-206: HB/lund_a
-n 147 lnz 2339 fl 42287
-cholmod2: t:    0.00040 e: 3.4e-10  mflop    105
-matlab:  t:    0.00041 e: 3.4e-10  mflop    104   cholmod2 speedup:   1.0
-
-207: HB/lund_b
-n 147 lnz 2340 fl 42320
-cholmod2: t:    0.00066 e: 1.4e-12  mflop     65
-matlab:  t:    0.00076 e: 1.4e-12  mflop     56   cholmod2 speedup:   1.2
-
- 27: HB/bcsstk05
-n 153 lnz 2326 fl 39118
-cholmod2: t:    0.00091 e: 9.7e-12  mflop     43
-matlab:  t:    0.00090 e: 9.7e-12  mflop     44   cholmod2 speedup:   1.0
-
- 60: HB/bcsstm05
-n 153 lnz 153 fl 153
-cholmod2: t:    0.00015 e: 7.8e-15  mflop      1
-matlab:  t:    0.00002 e: 1.3e-15  mflop      7   cholmod2 speedup:   0.1
-
-217: HB/nos1
-n 237 lnz 704 fl 2254
-cholmod2: t:    0.00020 e: 4.0e-09  mflop     11
-matlab:  t:    0.00018 e: 4.0e-09  mflop     12   cholmod2 speedup:   0.9
-
-877: Pothen/mesh3e1
-n 289 lnz 2433 fl 27549
-cholmod2: t:    0.00077 e: 2.8e-14  mflop     36
-matlab:  t:    0.00096 e: 2.8e-14  mflop     29   cholmod2 speedup:   1.3
-
-878: Pothen/mesh3em5
-n 289 lnz 2433 fl 27549
-cholmod2: t:    0.00108 e: 2.6e-14  mflop     25
-matlab:  t:    0.00096 e: 2.6e-14  mflop     29   cholmod2 speedup:   0.9
-
-875: Pothen/mesh2e1
-n 306 lnz 3224 fl 43648
-cholmod2: t:    0.00148 e: 1.5e-13  mflop     29
-matlab:  t:    0.00124 e: 1.5e-13  mflop     35   cholmod2 speedup:   0.8
-
-876: Pothen/mesh2em5
-n 306 lnz 3224 fl 43648
-cholmod2: t:    0.00068 e: 4.9e-14  mflop     65
-matlab:  t:    0.00062 e: 4.9e-14  mflop     70   cholmod2 speedup:   0.9
-
-229: HB/plat362
-n 362 lnz 8060 fl 220156
-cholmod2: t:    0.00242 e: 2.1e-05  mflop     91
-matlab:  t:    0.00298 e: 2.1e-05  mflop     74   cholmod2 speedup:   1.2
-
-315: Bai/mhdb416
-n 416 lnz 1364 fl 4998
-cholmod2: t:    0.00076 e: 2.0e-12  mflop      7
-matlab:  t:    0.00081 e: 2.0e-12  mflop      6   cholmod2 speedup:   1.1
-
- 28: HB/bcsstk06
-n 420 lnz 11345 fl 400973
-cholmod2: t:    0.00396 e: 1.9e-10  mflop    101
-matlab:  t:    0.00423 e: 1.9e-10  mflop     95   cholmod2 speedup:   1.1
-
- 29: HB/bcsstk07
-n 420 lnz 11345 fl 400973
-cholmod2: t:    0.00200 e: 1.9e-10  mflop    201
-matlab:  t:    0.00211 e: 1.9e-10  mflop    190   cholmod2 speedup:   1.1
-
- 61: HB/bcsstm06
-n 420 lnz 420 fl 420
-cholmod2: t:    0.00027 e: 2.1e-14  mflop      2
-matlab:  t:    0.00003 e: 3.0e-15  mflop     14   cholmod2 speedup:   0.1
-
- 62: HB/bcsstm07
-n 420 lnz 10654 fl 353996
-cholmod2: t:    0.00375 e: 5.7e-13  mflop     94
-matlab:  t:    0.00392 e: 5.7e-13  mflop     90   cholmod2 speedup:   1.0
-
-221: HB/nos5
-n 468 lnz 18437 fl 1.07298e+06
-cholmod2: t:    0.00672 e: 9.8e-12  mflop    160
-matlab:  t:    0.00647 e: 9.8e-12  mflop    166   cholmod2 speedup:   1.0
-
- 42: HB/bcsstk20
-n 485 lnz 2336 fl 13864
-cholmod2: t:    0.00056 e: 5.6e-06  mflop     25
-matlab:  t:    0.00053 e: 5.6e-06  mflop     26   cholmod2 speedup:   0.9
-
- 70: HB/bcsstm20
-n 485 lnz 485 fl 485
-cholmod2: t:    0.00034 e: 2.7e-14  mflop      1
-matlab:  t:    0.00004 e: 5.7e-15  mflop     13   cholmod2 speedup:   0.1
-
-  2: HB/494_bus
-n 494 lnz 1414 fl 4812
-cholmod2: t:    0.00105 e: 8.0e-10  mflop      5
-matlab:  t:    0.00098 e: 8.0e-10  mflop      5   cholmod2 speedup:   0.9
-
-339: Boeing/bcsstk34
-n 588 lnz 43366 fl 3.91893e+06
-cholmod2: t:    0.01322 e: 1.1e-12  mflop    296
-matlab:  t:    0.01341 e: 1.1e-12  mflop    292   cholmod2 speedup:   1.0
-
-  3: HB/662_bus
-n 662 lnz 2549 fl 12937
-cholmod2: t:    0.00185 e: 9.6e-10  mflop      7
-matlab:  t:    0.00156 e: 9.6e-10  mflop      8   cholmod2 speedup:   0.8
-
-222: HB/nos6
-n 675 lnz 6453 fl 85577
-cholmod2: t:    0.00129 e: 2.7e-08  mflop     66
-matlab:  t:    0.00117 e: 2.7e-08  mflop     73   cholmod2 speedup:   0.9
-
-  4: HB/685_bus
-n 685 lnz 3650 fl 25150
-cholmod2: t:    0.00158 e: 1.6e-10  mflop     16
-matlab:  t:    0.00200 e: 1.6e-10  mflop     13   cholmod2 speedup:   1.3
-
-357: Boeing/msc00726
-n 726 lnz 110707 fl 2.31244e+07
-cholmod2: t:    0.02436 e: 1.8e-11  mflop    949
-matlab:  t:    0.03762 e: 1.8e-11  mflop    615   cholmod2 speedup:   1.5
-
-223: HB/nos7
-n 729 lnz 18945 fl 1.0875e+06
-cholmod2: t:    0.00748 e: 2.5e-06  mflop    145
-matlab:  t:    0.00720 e: 2.5e-06  mflop    151   cholmod2 speedup:   1.0
-
- 41: HB/bcsstk19
-n 817 lnz 7528 fl 77096
-cholmod2: t:    0.00342 e: 6.7e-06  mflop     23
-matlab:  t:    0.00297 e: 6.7e-06  mflop     26   cholmod2 speedup:   0.9
-
- 69: HB/bcsstm19
-n 817 lnz 817 fl 817
-cholmod2: t:    0.00030 e: 3.8e-14  mflop      3
-matlab:  t:    0.00003 e: 6.0e-15  mflop     31   cholmod2 speedup:   0.1
-
-159: HB/gr_30_30
-n 900 lnz 16348 fl 405796
-cholmod2: t:    0.00557 e: 8.7e-12  mflop     73
-matlab:  t:    0.00560 e: 8.7e-12  mflop     73   cholmod2 speedup:   1.0
-
-218: HB/nos2
-n 957 lnz 2864 fl 9214
-cholmod2: t:    0.00152 e: 4.4e-06  mflop      6
-matlab:  t:    0.00144 e: 4.4e-06  mflop      6   cholmod2 speedup:   0.9
-
-219: HB/nos3
-n 960 lnz 31314 fl 1.38676e+06
-cholmod2: t:    0.00953 e: 4.3e-10  mflop    145
-matlab:  t:    0.00984 e: 4.3e-10  mflop    141   cholmod2 speedup:   1.0
-
-358: Boeing/msc01050
-n 1050 lnz 28305 fl 1.01711e+06
-cholmod2: t:    0.00768 e: 1.1e+00  mflop    133
-matlab:  t:    0.00809 e: 1.1e+00  mflop    126   cholmod2 speedup:   1.1
-
- 30: HB/bcsstk08
-n 1074 lnz 31153 fl 1.80924e+06
-cholmod2: t:    0.01337 e: 4.5e-11  mflop    135
-matlab:  t:    0.01572 e: 4.5e-11  mflop    115   cholmod2 speedup:   1.2
-
- 63: HB/bcsstm08
-n 1074 lnz 1074 fl 1074
-cholmod2: t:    0.00086 e: 3.6e-14  mflop      1
-matlab:  t:    0.00005 e: 4.4e-15  mflop     22   cholmod2 speedup:   0.1
-
- 31: HB/bcsstk09
-n 1083 lnz 58416 fl 4.50027e+06
-cholmod2: t:    0.01767 e: 1.3e-10  mflop    255
-matlab:  t:    0.01763 e: 1.3e-10  mflop    255   cholmod2 speedup:   1.0
-
- 64: HB/bcsstm09
-n 1083 lnz 1083 fl 1083
-cholmod2: t:    0.00040 e: 8.1e-14  mflop      3
-matlab:  t:    0.00003 e: 8.2e-15  mflop     34   cholmod2 speedup:   0.1
-test11 passed
-=================================================================
-test12: test etree2 and compare with etree
-Matrices to test: 50
-
- 904: vanHeukelum/cage3    nrow:      5 ncol:      5 nnz:         19
-etree(A,'col'):   0.0004    0.0003              speedup     1.36  
-etree(A,'row'):   0.0003    0.0003              speedup     1.12  
-etree(A):         0.0003    0.0003              speedup     1.24  
-etree(A'):        0.0003    0.0003              speedup     0.96  
-after amd:
-etree(A):         0.0002    0.0000              speedup    10.05  
-etree(A'):        0.0001    0.0000              speedup     5.48  
-
- 449: Grund/b1_ss          nrow:      7 ncol:      7 nnz:         15
-etree(A,'col'):   0.0001    0.0000              speedup     7.28  
-etree(A,'row'):   0.0001    0.0000              speedup     3.83  
-etree(A):         0.0001    0.0000              speedup     8.14  
-etree(A'):        0.0001    0.0000              speedup     5.74  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.71  
-etree(A'):        0.0001    0.0000              speedup     6.41  
-
-1710: Meszaros/farm        nrow:      7 ncol:     17 nnz:         41
-etree(A,'col'):   0.0002    0.0000              speedup     7.70  
-etree(A,'row'):   0.0001    0.0000              speedup     3.93  
-
- 715: LPnetlib/lpi_galenet nrow:      8 ncol:     14 nnz:         22
-etree(A,'col'):   0.0001    0.0000              speedup     6.39  
-etree(A,'row'):   0.0001    0.0000              speedup     5.57  
-
-1817: Meszaros/kleemin     nrow:      8 ncol:     16 nnz:         44
-etree(A,'col'):   0.0001    0.0000              speedup     5.80  
-etree(A,'row'):   0.0001    0.0000              speedup     5.45  
-
- 185: HB/jgl009            nrow:      9 ncol:      9 nnz:         50
-etree(A,'col'):   0.0001    0.0000              speedup     6.39  
-etree(A,'row'):   0.0001    0.0000              speedup     4.07  
-etree(A):         0.0001    0.0000              speedup     7.47  
-etree(A'):        0.0001    0.0000              speedup     5.45  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.93  
-etree(A'):        0.0001    0.0000              speedup     6.06  
-
- 719: LPnetlib/lpi_itest2  nrow:      9 ncol:     13 nnz:         26
-etree(A,'col'):   0.0001    0.0000              speedup     6.05  
-etree(A,'row'):   0.0001    0.0000              speedup     5.60  
-
- 905: vanHeukelum/cage4    nrow:      9 ncol:      9 nnz:         49
-etree(A,'col'):   0.0001    0.0000              speedup     6.11  
-etree(A,'row'):   0.0001    0.0000              speedup     5.36  
-etree(A):         0.0001    0.0000              speedup     7.79  
-etree(A'):        0.0001    0.0000              speedup     5.50  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.79  
-etree(A'):        0.0001    0.0000              speedup     8.11  
-
- 238: HB/rgg010            nrow:     10 ncol:     10 nnz:         76
-etree(A,'col'):   0.0001    0.0000              speedup     6.37  
-etree(A,'row'):   0.0001    0.0000              speedup     5.55  
-etree(A):         0.0001    0.0000              speedup     5.10  
-etree(A'):        0.0001    0.0000              speedup     5.14  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.79  
-etree(A'):        0.0001    0.0000              speedup     5.63  
-
-1524: Pajek/Stranke94      nrow:     10 ncol:     10 nnz:         90
-etree(A,'col'):   0.0001    0.0000              speedup     6.21  
-etree(A,'row'):   0.0001    0.0000              speedup     3.97  
-etree(A):         0.0001    0.0000              speedup     7.53  
-etree(A'):        0.0001    0.0000              speedup     5.43  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.36  
-etree(A'):        0.0001    0.0000              speedup     5.58  
-
- 186: HB/jgl011            nrow:     11 ncol:     11 nnz:         76
-etree(A,'col'):   0.0001    0.0000              speedup     6.21  
-etree(A,'row'):   0.0001    0.0000              speedup     5.55  
-etree(A):         0.0001    0.0000              speedup     7.40  
-etree(A'):        0.0001    0.0000              speedup     4.00  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.64  
-etree(A'):        0.0001    0.0000              speedup     4.42  
-
- 720: LPnetlib/lpi_itest6  nrow:     11 ncol:     17 nnz:         29
-etree(A,'col'):   0.0001    0.0000              speedup     6.11  
-etree(A,'row'):   0.0001    0.0000              speedup     5.48  
-
-1525: Pajek/Tina_AskCal    nrow:     11 ncol:     11 nnz:         29
-etree(A,'col'):   0.0001    0.0000              speedup     6.11  
-etree(A,'row'):   0.0001    0.0000              speedup     5.62  
-etree(A):         0.0001    0.0000              speedup     7.33  
-etree(A'):        0.0001    0.0000              speedup     5.53  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.79  
-etree(A'):        0.0001    0.0000              speedup     5.72  
-
-1526: Pajek/Tina_AskCog    nrow:     11 ncol:     11 nnz:         36
-etree(A,'col'):   0.0001    0.0000              speedup     6.60  
-etree(A,'row'):   0.0001    0.0000              speedup     5.27  
-etree(A):         0.0001    0.0000              speedup     7.67  
-etree(A'):        0.0001    0.0000              speedup     5.70  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.64  
-etree(A'):        0.0001    0.0000              speedup     5.79  
-
-1527: Pajek/Tina_DisCal    nrow:     11 ncol:     11 nnz:         41
-etree(A,'col'):   0.0001    0.0000              speedup     6.50  
-etree(A,'row'):   0.0001    0.0000              speedup     5.62  
-etree(A):         0.0001    0.0000              speedup     7.00  
-etree(A'):        0.0001    0.0000              speedup     4.28  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.86  
-etree(A'):        0.0001    0.0000              speedup     4.42  
-
-1528: Pajek/Tina_DisCog    nrow:     11 ncol:     11 nnz:         48
-etree(A,'col'):   0.0001    0.0000              speedup     6.11  
-etree(A,'row'):   0.0001    0.0000              speedup     4.91  
-etree(A):         0.0001    0.0000              speedup     9.87  
-etree(A'):        0.0001    0.0000              speedup     5.00  
-after amd:
-etree(A):         0.0001    0.0000              speedup     8.31  
-etree(A'):        0.0001    0.0000              speedup     5.67  
-
-1755: Meszaros/problem     nrow:     12 ncol:     46 nnz:         86
-etree(A,'col'):   0.0001    0.0000              speedup     5.30  
-etree(A,'row'):   0.0001    0.0000              speedup     5.17  
-
-1440: Oberwolfach/LFAT5    nrow:     14 ncol:     14 nnz:         46
-etree(A,'col'):   0.0001    0.0000              speedup     6.39  
-etree(A,'row'):   0.0001    0.0000              speedup     5.29  
-etree(A):         0.0002    0.0000              speedup    15.20  
-etree(A'):        0.0001    0.0000              speedup     5.48  
-after amd:
-etree(A):         0.0001    0.0000              speedup     5.10  
-etree(A'):        0.0001    0.0000              speedup     6.11  
-
-1741: Meszaros/p0033       nrow:     15 ncol:     48 nnz:        113
-etree(A,'col'):   0.0001    0.0000              speedup     5.43  
-etree(A,'row'):   0.0001    0.0000              speedup     3.87  
-
-1438: Oberwolfach/LF10     nrow:     18 ncol:     18 nnz:         82
-etree(A,'col'):   0.0001    0.0000              speedup     6.00  
-etree(A,'row'):   0.0001    0.0000              speedup     4.88  
-etree(A):         0.0001    0.0000              speedup     7.73  
-etree(A'):        0.0001    0.0000              speedup     4.95  
-after amd:
-etree(A):         0.0001    0.0000              speedup     5.75  
-etree(A'):        0.0001    0.0000              speedup     5.14  
-
-1479: Pajek/GD01_b         nrow:     18 ncol:     18 nnz:         37
-etree(A,'col'):   0.0001    0.0000              speedup     5.80  
-etree(A,'row'):   0.0001    0.0000              speedup     5.18  
-etree(A):         0.0001    0.0000              speedup     7.47  
-etree(A'):        0.0001    0.0000              speedup     5.33  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.27  
-etree(A'):        0.0002    0.0000              speedup     9.05  
-
- 706: LPnetlib/lpi_bgprtr  nrow:     20 ncol:     40 nnz:         70
-etree(A,'col'):   0.0001    0.0000              speedup     5.48  
-etree(A,'row'):   0.0001    0.0000              speedup     5.21  
-
-1481: Pajek/GD02_a         nrow:     23 ncol:     23 nnz:         87
-etree(A,'col'):   0.0001    0.0000              speedup     5.71  
-etree(A,'row'):   0.0001    0.0000              speedup     5.12  
-etree(A):         0.0001    0.0000              speedup     7.56  
-etree(A'):        0.0001    0.0000              speedup     5.23  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.47  
-etree(A'):        0.0001    0.0000              speedup     5.70  
-
-1516: Pajek/Ragusa18       nrow:     23 ncol:     23 nnz:         64
-etree(A,'col'):   0.0001    0.0000              speedup     6.00  
-etree(A,'row'):   0.0001    0.0000              speedup     5.12  
-etree(A):         0.0001    0.0000              speedup     4.70  
-etree(A'):        0.0001    0.0000              speedup     5.27  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.27  
-etree(A'):        0.0001    0.0000              speedup     5.60  
-
-1742: Meszaros/p0040       nrow:     23 ncol:     63 nnz:        133
-etree(A,'col'):   0.0001    0.0000              speedup     5.39  
-etree(A,'row'):   0.0001    0.0000              speedup     3.94  
-
-  97: HB/can_24            nrow:     24 ncol:     24 nnz:        160
-etree(A,'col'):   0.0001    0.0000              speedup     6.10  
-etree(A,'row'):   0.0001    0.0000              speedup     3.72  
-etree(A):         0.0001    0.0000              speedup     6.88  
-etree(A'):        0.0001    0.0000              speedup     5.13  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.06  
-etree(A'):        0.0001    0.0000              speedup     5.24  
-
- 624: LPnetlib/lp_fit1d    nrow:     24 ncol:   1049 nnz:      13427
-etree(A,'col'):   0.0004    0.0002              speedup     2.25  
-etree(A,'row'):   0.0008    0.0002              speedup     3.34  
-
-1515: Pajek/Ragusa16       nrow:     24 ncol:     24 nnz:         81
-etree(A,'col'):   0.0001    0.0000              speedup     5.71  
-etree(A,'row'):   0.0001    0.0000              speedup     5.08  
-etree(A):         0.0001    0.0000              speedup     4.95  
-etree(A'):        0.0001    0.0000              speedup     4.96  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.60  
-etree(A'):        0.0001    0.0000              speedup     5.60  
-
- 626: LPnetlib/lp_fit2d    nrow:     25 ncol:  10524 nnz:     129042
-etree(A,'col'):   0.0056    0.0020              speedup     2.74  
-etree(A,'row'):   0.0107    0.0032              speedup     3.33  
-
-1177: HB/lap_25            nrow:     25 ncol:     25 nnz:        169
-etree(A,'col'):   0.0001    0.0000              speedup     5.76  
-etree(A,'row'):   0.0001    0.0000              speedup     3.53  
-etree(A):         0.0001    0.0000              speedup     7.44  
-etree(A'):        0.0001    0.0000              speedup     5.18  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.93  
-etree(A'):        0.0001    0.0000              speedup     5.19  
-
- 436: FIDAP/ex5            nrow:     27 ncol:     27 nnz:        279
-etree(A,'col'):   0.0001    0.0000              speedup     5.59  
-etree(A,'row'):   0.0001    0.0000              speedup     5.04  
-etree(A):         0.0001    0.0000              speedup     6.59  
-etree(A'):        0.0001    0.0000              speedup     4.88  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.59  
-etree(A'):        0.0001    0.0000              speedup     5.45  
-
- 597: LPnetlib/lp_afiro    nrow:     27 ncol:     51 nnz:        102
-etree(A,'col'):   0.0001    0.0000              speedup     5.21  
-etree(A,'row'):   0.0002    0.0000              speedup     6.27  
-
-1759: Meszaros/refine      nrow:     29 ncol:     62 nnz:        153
-etree(A,'col'):   0.0001    0.0000              speedup     4.96  
-etree(A,'row'):   0.0001    0.0000              speedup     5.08  
-
- 232: HB/pores_1           nrow:     30 ncol:     30 nnz:        180
-etree(A,'col'):   0.0001    0.0000              speedup     5.76  
-etree(A,'row'):   0.0001    0.0000              speedup     5.04  
-etree(A):         0.0001    0.0000              speedup     6.82  
-etree(A'):        0.0001    0.0000              speedup     5.35  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.06  
-etree(A'):        0.0001    0.0000              speedup     4.11  
-
- 168: HB/ibm32             nrow:     32 ncol:     32 nnz:        126
-etree(A,'col'):   0.0001    0.0000              speedup     5.76  
-etree(A,'row'):   0.0001    0.0000              speedup     4.58  
-etree(A):         0.0001    0.0000              speedup     6.82  
-etree(A'):        0.0001    0.0000              speedup     5.23  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.33  
-etree(A'):        0.0001    0.0000              speedup     5.29  
-
-1199: Hamrle/Hamrle1       nrow:     32 ncol:     32 nnz:         98
-etree(A,'col'):   0.0001    0.0000              speedup     5.71  
-etree(A,'row'):   0.0001    0.0000              speedup     5.17  
-etree(A):         0.0001    0.0000              speedup     6.88  
-etree(A'):        0.0001    0.0000              speedup     5.00  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.41  
-etree(A'):        0.0001    0.0000              speedup     5.65  
-
-1480: Pajek/GD01_c         nrow:     33 ncol:     33 nnz:        135
-etree(A,'col'):   0.0001    0.0000              speedup     5.81  
-etree(A,'row'):   0.0001    0.0000              speedup     4.70  
-etree(A):         0.0001    0.0000              speedup     6.44  
-etree(A'):        0.0001    0.0000              speedup     5.05  
-after amd:
-etree(A):         0.0001    0.0000              speedup     7.06  
-etree(A'):        0.0001    0.0000              speedup     3.93  
-
- 731: LPnetlib/lpi_woodinfe nrow:     35 ncol:     89 nnz:        140
-etree(A,'col'):   0.0001    0.0000              speedup     5.00  
-etree(A,'row'):   0.0001    0.0000              speedup     5.12  
-
-1474: Pajek/football       nrow:     35 ncol:     35 nnz:        118
-etree(A,'col'):   0.0001    0.0000              speedup     5.68  
-etree(A,'row'):   0.0001    0.0000              speedup     4.74  
-etree(A):         0.0001    0.0000              speedup     6.21  
-etree(A'):        0.0001    0.0000              speedup     5.16  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.33  
-etree(A'):        0.0001    0.0000              speedup     4.15  
-
-1485: Pajek/GD95_a         nrow:     36 ncol:     36 nnz:         57
-etree(A,'col'):   0.0001    0.0000              speedup     5.50  
-etree(A,'row'):   0.0001    0.0000              speedup     5.00  
-etree(A):         0.0001    0.0000              speedup     6.33  
-etree(A'):        0.0001    0.0000              speedup     4.83  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.53  
-etree(A'):        0.0001    0.0000              speedup     4.04  
-
- 906: vanHeukelum/cage5    nrow:     37 ncol:     37 nnz:        233
-etree(A,'col'):   0.0001    0.0000              speedup     5.25  
-etree(A,'row'):   0.0001    0.0000              speedup     4.78  
-etree(A):         0.0001    0.0000              speedup     6.00  
-etree(A'):        0.0001    0.0000              speedup     4.73  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.65  
-etree(A'):        0.0001    0.0000              speedup     5.00  
-
-1495: Pajek/GD98_a         nrow:     38 ncol:     38 nnz:         50
-etree(A,'col'):   0.0001    0.0000              speedup     5.45  
-etree(A,'row'):   0.0001    0.0000              speedup     4.88  
-etree(A):         0.0001    0.0000              speedup     6.44  
-etree(A'):        0.0001    0.0000              speedup     5.04  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.71  
-etree(A'):        0.0001    0.0000              speedup     5.48  
-
-  13: HB/bcspwr01          nrow:     39 ncol:     39 nnz:        131
-etree(A,'col'):   0.0001    0.0000              speedup     5.25  
-etree(A,'row'):   0.0001    0.0000              speedup     4.89  
-etree(A):         0.0001    0.0000              speedup     6.26  
-etree(A'):        0.0001    0.0000              speedup     3.80  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.53  
-etree(A'):        0.0001    0.0000              speedup     5.17  
-
- 636: LPnetlib/lp_kb2      nrow:     43 ncol:     68 nnz:        313
-etree(A,'col'):   0.0001    0.0000              speedup     4.67  
-etree(A,'row'):   0.0001    0.0000              speedup     3.39  
-
-1493: Pajek/GD97_b         nrow:     47 ncol:     47 nnz:        264
-etree(A,'col'):   0.0001    0.0000              speedup     5.08  
-etree(A,'row'):   0.0001    0.0000              speedup     4.13  
-etree(A):         0.0001    0.0000              speedup     6.32  
-etree(A'):        0.0001    0.0000              speedup     4.58  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.11  
-etree(A'):        0.0002    0.0000              speedup     6.08  
-
-  23: HB/bcsstk01          nrow:     48 ncol:     48 nnz:        400
-etree(A,'col'):   0.0001    0.0000              speedup     4.92  
-etree(A,'row'):   0.0001    0.0000              speedup     4.28  
-etree(A):         0.0001    0.0000              speedup     5.86  
-etree(A'):        0.0001    0.0000              speedup     4.54  
-after amd:
-etree(A):         0.0001    0.0000              speedup     5.33  
-etree(A'):        0.0001    0.0000              speedup     4.70  
-
-  56: HB/bcsstm01          nrow:     48 ncol:     48 nnz:         24
-etree(A,'col'):   0.0001    0.0000              speedup     5.86  
-etree(A,'row'):   0.0001    0.0000              speedup     5.17  
-etree(A):         0.0001    0.0000              speedup     4.58  
-etree(A'):        0.0001    0.0000              speedup     5.32  
-after amd:
-etree(A):         0.0001    0.0000              speedup     5.15  
-etree(A'):        0.0001    0.0000              speedup     5.48  
-
- 872: Pothen/mesh1e1       nrow:     48 ncol:     48 nnz:        306
-etree(A,'col'):   0.0001    0.0000              speedup     5.12  
-etree(A,'row'):   0.0001    0.0000              speedup     3.51  
-etree(A):         0.0001    0.0000              speedup     5.81  
-etree(A'):        0.0002    0.0000              speedup     5.67  
-after amd:
-etree(A):         0.0001    0.0000              speedup     5.95  
-etree(A'):        0.0001    0.0000              speedup     5.04  
-
- 873: Pothen/mesh1em1      nrow:     48 ncol:     48 nnz:        306
-etree(A,'col'):   0.0001    0.0000              speedup     4.88  
-etree(A,'row'):   0.0001    0.0000              speedup     4.63  
-etree(A):         0.0001    0.0000              speedup     6.00  
-etree(A'):        0.0001    0.0000              speedup     3.67  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.53  
-etree(A'):        0.0001    0.0000              speedup     5.12  
-
- 874: Pothen/mesh1em6      nrow:     48 ncol:     48 nnz:        306
-etree(A,'col'):   0.0001    0.0000              speedup     5.16  
-etree(A,'row'):   0.0001    0.0000              speedup     4.53  
-etree(A):         0.0001    0.0000              speedup     6.00  
-etree(A'):        0.0001    0.0000              speedup     4.25  
-after amd:
-etree(A):         0.0001    0.0000              speedup     6.26  
-etree(A'):        0.0001    0.0000              speedup     5.00  
-test12 passed
-=================================================================
-test13: test cholmod2 and MATLAB on large tridiagonal matrices
-n     10000   cholmod2     0.01  err 3.5e-13
-n     10000   matlab      0.00  err 2.6e-13
-n     10000   cholmod2     0.01  err 3.6e-13
-n     10000   matlab      0.00  err 2.6e-13
-n    100000   cholmod2     0.14  err 3.6e-12
-n    100000   matlab      0.01  err 2.6e-12
-n   1000000   cholmod2     2.84  err 3.6e-11
-n   1000000   matlab      0.18  err 2.6e-11
-=================================================================
-test14: test metis, symbfact2, and etree2
-904:
-
-Prob = 
-
-     title: 'DNA electrophoresis, 3 monomers in polymer. A. van Heukelum, Utrecht U.'
-         A: [5x5 double]
-      name: 'vanHeukelum/cage3'
-        id: 904
-      date: '2003'
-    author: 'A. van Heukelum'
-        ed: 'T. Davis'
-      kind: 'directed weighted graph'
-
-nnz(A)    19
-nnz(S)    19
-nnz(A*A') 25
-nnz(A'*A) 25
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-449:
-
-Prob = 
-
-     title: 'Unsymmetric Matrix b1_ss, F. Grund, Dec 1994.'
-         A: [7x7 double]
-         b: [7x1 double]
-      name: 'Grund/b1_ss'
-        id: 449
-      date: '1997'
-    author: 'F. Grund'
-        ed: 'F. Grund'
-      kind: 'chemical process simulation problem'
-
-nnz(A)    15
-nnz(S)    24
-nnz(A*A') 25
-nnz(A'*A) 25
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-185:
-
-Prob = 
-
-     title: 'U JOHN G. LEWIS P4 COUNTEREXAMPLE WHICH REQUIRES FILL IN SPIKES'
-         A: [9x9 double]
-      name: 'HB/jgl009'
-        id: 185
-      date: '1983'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'counter-example problem'
-
-nnz(A)    50
-nnz(S)    72
-nnz(A*A') 81
-nnz(A'*A) 81
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-905:
-
-Prob = 
-
-     title: 'DNA electrophoresis, 4 monomers in polymer. A. van Heukelum, Utrecht U.'
-         A: [9x9 double]
-      name: 'vanHeukelum/cage4'
-        id: 905
-      date: '2003'
-    author: 'A. van Heukelum'
-        ed: 'T. Davis'
-      kind: 'directed weighted graph'
-
-nnz(A)    49
-nnz(S)    49
-nnz(A*A') 81
-nnz(A'*A) 81
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-238:
-
-Prob = 
-
-     title: 'S EXAMPLE TO DEMONSTRATE THE CHIMNEY EFFECT IN P4 - BY R.G. GRIMES'
-         A: [10x10 double]
-      name: 'HB/rgg010'
-        id: 238
-      date: '1983'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'counter-example problem'
-
-nnz(A)    76
-nnz(S)    100
-nnz(A*A') 100
-nnz(A'*A) 100
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1524:
-
-Prob = 
-
-      name: 'Pajek/Stranke94'
-     title: 'Pajek network: Slovene Parliamentary Parties 1994'
-         A: [10x10 double]
-        id: 1524
-      kind: 'undirected weighted graph'
-     notes: [22x78 char]
-       aux: [1x1 struct]
-      date: '1994'
-    author: 'V. Batagelj'
-        ed: 'V. Batagelj'
-
-nnz(A)    90
-nnz(S)    90
-nnz(A*A') 100
-nnz(A'*A) 100
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-186:
-
-Prob = 
-
-     title: 'U JOHN G. LEWIS P4 COUNTEREXAMPLE WHICH REQUIRES FILL IN SPIKES'
-         A: [11x11 double]
-      name: 'HB/jgl011'
-        id: 186
-      date: '1983'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'counter-example problem'
-
-nnz(A)    76
-nnz(S)    108
-nnz(A*A') 115
-nnz(A'*A) 121
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1525:
-
-Prob = 
-
-      name: 'Pajek/Tina_AskCal'
-     title: 'Pajek network: student govt, Univ. Ljubljana, 1992 (ask opin., recall)'
-         A: [11x11 double]
-        id: 1525
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1992'
-    author: 'V. Batagelj'
-        ed: 'V. Batagelj'
-
-nnz(A)    29
-nnz(S)    50
-nnz(A*A') 85
-nnz(A'*A) 58
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1526:
-
-Prob = 
-
-      name: 'Pajek/Tina_AskCog'
-     title: 'Pajek network: student govt, Univ. Ljubljana, 1992 (ask, recognized)'
-         A: [11x11 double]
-        id: 1526
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1992'
-    author: 'V. Batagelj'
-        ed: 'V. Batagelj'
-
-nnz(A)    36
-nnz(S)    54
-nnz(A*A') 95
-nnz(A'*A) 75
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1527:
-
-Prob = 
-
-      name: 'Pajek/Tina_DisCal'
-     title: 'Pajek network: student govt, Univ. Ljubljana, 1992 (discuss, recall)'
-         A: [11x11 double]
-        id: 1527
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1992'
-    author: 'V. Batagelj'
-        ed: 'V. Batagelj'
-
-nnz(A)    41
-nnz(S)    64
-nnz(A*A') 103
-nnz(A'*A) 76
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1528:
-
-Prob = 
-
-      name: 'Pajek/Tina_DisCog'
-     title: 'Pajek network: student govt, Univ. Ljubljana, 1992 (discuss, recog.)'
-         A: [11x11 double]
-        id: 1528
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1992'
-    author: 'V. Batagelj'
-        ed: 'V. Batagelj'
-
-nnz(A)    48
-nnz(S)    72
-nnz(A*A') 109
-nnz(A'*A) 97
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-719:
-
-Prob = 
-
-     title: 'Netlib LP problem itest2: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lpi_itest2'
-         A: [9x13 double]
-         b: [9x1 double]
-        id: 719
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1991'
-    author: 'J. Chinneck, E. Dravnieks'
-        ed: 'J. Chinneck'
-     notes: [33x76 char]
-
-nnz(A)    26
-nnz(S)    9
-nnz(A*A') 9
-nnz(A'*A) 9
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-715:
-
-Prob = 
-
-     title: 'Netlib LP problem galenet: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lpi_galenet'
-         A: [8x14 double]
-         b: [8x1 double]
-        id: 715
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: ''
-    author: 'H. Greenberg'
-        ed: 'J. Chinneck'
-     notes: [19x76 char]
-
-nnz(A)    22
-nnz(S)    17
-nnz(A*A') 11
-nnz(A'*A) 14
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1440:
-
-Prob = 
-
-      name: 'Oberwolfach/LFAT5'
-     title: 'Oberwolfach: linear 1D beam'
-         A: [14x14 double]
-        id: 1440
-     notes: 'Primary matrix in this model reduction problem is the Oberwolfach K matrix'
-       aux: [1x1 struct]
-      date: '2004'
-    author: 'J. Lienemann, A. Greiner, J. Korvink'
-        ed: 'E. Rudnyi'
-      kind: 'model reduction problem'
-
-nnz(A)    46
-nnz(S)    46
-nnz(A*A') 72
-nnz(A'*A) 72
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1817:
-
-Prob = 
-
-      name: 'Meszaros/kleemin'
-     title: 'LP sequence: kleemin3, 4, 5, 6, 7, 8'
-        id: 1817
-      kind: 'linear programming problem sequence'
-      date: '2004'
-    author: ''
-        ed: 'C. Meszaros'
-         A: [8x16 double]
-     notes: [3x57 char]
-       aux: [1x1 struct]
-
-nnz(A)    44
-nnz(S)    8
-nnz(A*A') 8
-nnz(A'*A) 8
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-720:
-
-Prob = 
-
-     title: 'Netlib LP problem itest6: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lpi_itest6'
-         A: [11x17 double]
-         b: [11x1 double]
-        id: 720
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1991'
-    author: 'J. Chinneck, E. Dravnieks'
-        ed: 'J. Chinneck'
-     notes: [33x76 char]
-
-nnz(A)    29
-nnz(S)    19
-nnz(A*A') 31
-nnz(A'*A) 19
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1710:
-
-Prob = 
-
-      name: 'Meszaros/farm'
-     title: 'linear programming problem, C. Meszaros test set'
-        id: 1710
-      kind: 'linear programming problem'
-      date: '2004'
-    author: ''
-        ed: 'C. Meszaros'
-         A: [7x17 double]
-         b: [7x1 double]
-       aux: [1x1 struct]
-     notes: [3x57 char]
-
-nnz(A)    41
-nnz(S)    21
-nnz(A*A') 18
-nnz(A'*A) 21
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1438:
-
-Prob = 
-
-      name: 'Oberwolfach/LF10'
-     title: 'Oberwolfach: linear 1D beam'
-         A: [18x18 double]
-        id: 1438
-     notes: 'Primary matrix in this model reduction problem is the Oberwolfach K matrix'
-       aux: [1x1 struct]
-      date: '2004'
-    author: 'J. Lienemann, A. Greiner, J. Korvink'
-        ed: 'E. Rudnyi'
-      kind: 'model reduction problem'
-
-nnz(A)    82
-nnz(S)    82
-nnz(A*A') 154
-nnz(A'*A) 154
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1479:
-
-Prob = 
-
-      name: 'Pajek/GD01_b'
-     title: 'Pajek network: Graph Drawing contest 2001'
-         A: [18x18 double]
-        id: 1479
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '2001'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    37
-nnz(S)    54
-nnz(A*A') 62
-nnz(A'*A) 56
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1481:
-
-Prob = 
-
-      name: 'Pajek/GD02_a'
-     title: 'Pajek network: Graph Drawing contest 2002'
-         A: [23x23 double]
-        id: 1481
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '2002'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    87
-nnz(S)    118
-nnz(A*A') 272
-nnz(A'*A) 376
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1516:
-
-Prob = 
-
-      name: 'Pajek/Ragusa18'
-     title: 'Pajek network: Ragusa set'
-         A: [23x23 double]
-        id: 1516
-      kind: 'directed weighted graph'
-     notes: [5x78 char]
-       aux: [1x1 struct]
-      date: '2006'
-    author: 'V. Batagelj'
-        ed: 'V. Batagelj'
-
-nnz(A)    64
-nnz(S)    105
-nnz(A*A') 263
-nnz(A'*A) 158
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-97:
-
-Prob = 
-
-     title: 'SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.'
-         A: [24x24 double]
-      name: 'HB/can_24'
-        id: 97
-      date: '1981'
-    author: 'L. Marro'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    160
-nnz(S)    160
-nnz(A*A') 336
-nnz(A'*A) 336
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1515:
-
-Prob = 
-
-      name: 'Pajek/Ragusa16'
-     title: 'Pajek network: Ragusa set'
-         A: [24x24 double]
-        id: 1515
-      kind: 'directed weighted graph'
-     notes: [5x78 char]
-       aux: [1x1 struct]
-      date: '2006'
-    author: 'V. Batagelj'
-        ed: 'V. Batagelj'
-
-nnz(A)    81
-nnz(S)    126
-nnz(A*A') 271
-nnz(A'*A) 250
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1177:
-
-Prob = 
-
-     title: 'FINITE ELEMENT PROBLEM. LAPLACIAN ON A  5 BY 5 GRID.'
-         A: [25x25 double]
-      name: 'HB/lap_25'
-        id: 1177
-      date: '1980'
-    author: 'I. Duff'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    169
-nnz(S)    169
-nnz(A*A') 361
-nnz(A'*A) 361
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-436:
-
-Prob = 
-
-     title: ' TEST MATRIX FROM FIDAP: EX5.MAT'
-         A: [27x27 double]
-      name: 'FIDAP/ex5'
-        id: 436
-      date: '1994'
-    author: 'A. Baggag, Y. Saad'
-        ed: 'A. Baggag, Y. Saad'
-      kind: 'computational fluid dynamics problem'
-
-nnz(A)    279
-nnz(S)    279
-nnz(A*A') 495
-nnz(A'*A) 495
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-232:
-
-Prob = 
-
-     title: 'UNSYMMETRIC MATRIX FROM  PORES'
-         A: [30x30 double]
-      name: 'HB/pores_1'
-        id: 232
-      date: '1980'
-    author: 'J. Appleyard'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'computational fluid dynamics problem'
-
-nnz(A)    180
-nnz(S)    236
-nnz(A*A') 476
-nnz(A'*A) 388
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-168:
-
-Prob = 
-
-     title: 'UNSYMMETRIC PATTERN ON LEAFLET ADVERTISING IBM 1971 CONFERENCE'
-         A: [32x32 double]
-      name: 'HB/ibm32'
-        id: 168
-      date: '1971'
-    author: 'IBM'
-        ed: 'A. Curtis, I. Duff, J. Reid'
-      kind: 'directed graph'
-
-nnz(A)    126
-nnz(S)    212
-nnz(A*A') 392
-nnz(A'*A) 390
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1199:
-
-Prob = 
-
-      name: 'Hamrle/Hamrle1'
-     title: 'Hamrle/Hamrle1 circuit simulation matrix'
-         A: [32x32 double]
-         b: [32x1 double]
-        id: 1199
-      date: '2004'
-    author: 'J. Hamrle'
-        ed: 'T. Davis'
-      kind: 'circuit simulation problem'
-
-nnz(A)    98
-nnz(S)    185
-nnz(A*A') 222
-nnz(A'*A) 220
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1480:
-
-Prob = 
-
-      name: 'Pajek/GD01_c'
-     title: 'Pajek network: Graph Drawing contest 2001'
-         A: [33x33 double]
-        id: 1480
-      kind: 'directed multigraph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '2001'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    135
-nnz(S)    270
-nnz(A*A') 312
-nnz(A'*A) 374
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1474:
-
-Prob = 
-
-      name: 'Pajek/football'
-     title: 'Pajek network: World Soccer, Paris 1998'
-         A: [35x35 double]
-        id: 1474
-      kind: 'directed weighted graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1998'
-    author: 'L. Krempel'
-        ed: 'V. Batagelj'
-
-nnz(A)    118
-nnz(S)    236
-nnz(A*A') 568
-nnz(A'*A) 234
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1485:
-
-Prob = 
-
-      name: 'Pajek/GD95_a'
-     title: 'Pajek network: Graph Drawing contest 1995'
-         A: [36x36 double]
-        id: 1485
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1995'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    57
-nnz(S)    112
-nnz(A*A') 80
-nnz(A'*A) 101
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-906:
-
-Prob = 
-
-     title: 'DNA electrophoresis, 5 monomers in polymer. A. van Heukelum, Utrecht U.'
-         A: [37x37 double]
-      name: 'vanHeukelum/cage5'
-        id: 906
-      date: '2003'
-    author: 'A. van Heukelum'
-        ed: 'T. Davis'
-      kind: 'directed weighted graph'
-
-nnz(A)    233
-nnz(S)    233
-nnz(A*A') 653
-nnz(A'*A) 653
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1495:
-
-Prob = 
-
-      name: 'Pajek/GD98_a'
-     title: 'Pajek network: Graph Drawing contest 1998'
-         A: [38x38 double]
-        id: 1495
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1998'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    50
-nnz(S)    92
-nnz(A*A') 78
-nnz(A'*A) 241
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-13:
-
-Prob = 
-
-     title: 'SYMMETRIC STRUCTURE (STANDARD TEST POWER SYSTEM - NEW ENGLAND)'
-         A: [39x39 double]
-      name: 'HB/bcspwr01'
-        id: 13
-      date: '1981'
-    author: 'B. Dembart, J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'power network problem'
-
-nnz(A)    131
-nnz(S)    131
-nnz(A*A') 275
-nnz(A'*A) 275
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-706:
-
-Prob = 
-
-     title: 'Netlib LP problem bgprtr: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lpi_bgprtr'
-         A: [20x40 double]
-         b: [20x1 double]
-        id: 706
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1993'
-    author: 'L. Schrage'
-        ed: 'J. Chinneck'
-     notes: [23x76 char]
-
-nnz(A)    70
-nnz(S)    52
-nnz(A*A') 37
-nnz(A'*A) 44
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1755:
-
-Prob = 
-
-      name: 'Meszaros/problem'
-     title: 'linear programming problem, C. Meszaros test set'
-        id: 1755
-      kind: 'linear programming problem'
-      date: '2004'
-    author: ''
-        ed: 'C. Meszaros'
-         A: [12x46 double]
-         b: [12x1 double]
-       aux: [1x1 struct]
-     notes: [3x57 char]
-
-nnz(A)    86
-nnz(S)    44
-nnz(A*A') 14
-nnz(A'*A) 80
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1493:
-
-Prob = 
-
-      name: 'Pajek/GD97_b'
-     title: 'Pajek network: Graph Drawing contest 1997'
-         A: [47x47 double]
-        id: 1493
-      kind: 'undirected weighted graph'
-     notes: [12x78 char]
-       aux: [1x1 struct]
-      date: '1997'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    264
-nnz(S)    264
-nnz(A*A') 1274
-nnz(A'*A) 1274
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-23:
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX SMALL GENERALIZED EIGENVALUE PROBLEM'
-         A: [48x48 double]
-      name: 'HB/bcsstk01'
-        id: 23
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    400
-nnz(S)    400
-nnz(A*A') 1292
-nnz(A'*A) 1292
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-56:
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX SMALL GENERALIZED EIGENVALUE PROBLEM, B MATRIX'
-         A: [48x48 double]
-     Zeros: [48x48 double]
-      name: 'HB/bcsstm01'
-        id: 56
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    24
-nnz(S)    24
-nnz(A*A') 24
-nnz(A'*A) 24
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-872:
-
-Prob = 
-
-         A: [48x48 double]
-     title: 'mesh1e1, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh1e1'
-        id: 872
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-nnz(A)    306
-nnz(S)    306
-nnz(A*A') 772
-nnz(A'*A) 772
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-873:
-
-Prob = 
-
-         A: [48x48 double]
-     title: 'mesh1em1, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh1em1'
-        id: 873
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-nnz(A)    306
-nnz(S)    306
-nnz(A*A') 772
-nnz(A'*A) 772
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-874:
-
-Prob = 
-
-         A: [48x48 double]
-     title: 'mesh1em6, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/mesh1em6'
-        id: 874
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-nnz(A)    306
-nnz(S)    306
-nnz(A*A') 772
-nnz(A'*A) 772
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1741:
-
-Prob = 
-
-      name: 'Meszaros/p0033'
-     title: 'linear programming problem, C. Meszaros test set'
-        id: 1741
-      kind: 'linear programming problem'
-      date: '2004'
-    author: ''
-        ed: 'C. Meszaros'
-         A: [15x48 double]
-         b: [15x1 double]
-       aux: [1x1 struct]
-     notes: [3x57 char]
-
-nnz(A)    113
-nnz(S)    15
-nnz(A*A') 15
-nnz(A'*A) 15
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-14:
-
-Prob = 
-
-     title: 'SYMMETRIC STRUCTURE OF A SMALL TEST POWER SYSTEM'
-         A: [49x49 double]
-      name: 'HB/bcspwr02'
-        id: 14
-      date: '1981'
-    author: 'B. Dembart, J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'power network problem'
-
-nnz(A)    167
-nnz(S)    167
-nnz(A*A') 403
-nnz(A'*A) 403
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1460:
-
-Prob = 
-
-      name: 'Pajek/divorce'
-     title: 'Pajek network: divorce laws in the 50 US states'
-         A: [50x9 double]
-        id: 1460
-      kind: 'bipartite graph'
-     notes: [6x78 char]
-       aux: [1x1 struct]
-      date: '2006'
-    author: ''
-        ed: 'V. Batagelj'
-
-nnz(A)    225
-nnz(S)    57
-nnz(A*A') 77
-nnz(A'*A) 81
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-597:
-
-Prob = 
-
-     title: 'Netlib LP problem afiro: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lp_afiro'
-         A: [27x51 double]
-         b: [27x1 double]
-        id: 597
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: ''
-    author: 'M. Saunders'
-        ed: 'D. Gay'
-     notes: [48x78 char]
-
-nnz(A)    102
-nnz(S)    88
-nnz(A*A') 71
-nnz(A'*A) 73
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-464:
-
-Prob = 
-
-     title: 'Unsymmetric Matrix d_ss, F. Grund, Dec 1994.'
-         A: [53x53 double]
-     Zeros: [53x53 double]
-         b: [53x1 double]
-      name: 'Grund/d_ss'
-        id: 464
-      date: '1997'
-    author: 'F. Grund'
-        ed: 'F. Grund'
-      kind: 'chemical process simulation problem'
-
-nnz(A)    144
-nnz(S)    278
-nnz(A*A') 311
-nnz(A'*A) 315
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-109:
-
-Prob = 
-
-     title: 'UNSYMMETRIC PATTERN OF CURTIS, 1971'
-         A: [54x54 double]
-      name: 'HB/curtis54'
-        id: 109
-      date: '1971'
-    author: 'A. Curtis'
-        ed: 'A. Curtis, I. Duff, J. Reid'
-      kind: '2D/3D problem'
-
-nnz(A)    291
-nnz(S)    302
-nnz(A*A') 794
-nnz(A'*A) 728
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1457:
-
-Prob = 
-
-      name: 'Pajek/Cities'
-     title: 'Pajek network: www.lboro.ac.uk/gawc, data set 6'
-         A: [55x46 double]
-        id: 1457
-      kind: 'weighted bipartite graph'
-     notes: [10x78 char]
-       aux: [1x1 struct]
-      date: '2001'
-    author: 'P. Taylor, D. Walker'
-        ed: 'V. Batagelj'
-
-nnz(A)    1342
-nnz(S)    1626
-nnz(A*A') 2116
-nnz(A'*A) 2114
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-274:
-
-Prob = 
-
-     title: 'UNSYMMETRIC PATTERN OF ORDER  57 GIVEN BY WILLOUGHBY IN REID, 1970'
-         A: [57x57 double]
-      name: 'HB/will57'
-        id: 274
-      date: '1970'
-    author: 'R. Willoughby'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'semiconductor device problem'
-
-nnz(A)    281
-nnz(S)    311
-nnz(A*A') 647
-nnz(A'*A) 665
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-129:
-
-Prob = 
-
-     title: 'SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON'
-         A: [59x59 double]
-      name: 'HB/dwt_59'
-        id: 129
-      date: '1980'
-    author: 'G. Everstine, D. Taylor'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    267
-nnz(S)    267
-nnz(A*A') 571
-nnz(A'*A) 571
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-172:
-
-Prob = 
-
-     title: 'UNSYMMETRIC MATRIX - CAVETT'S PROCESS (CHEM ENG),1982'
-         A: [59x59 double]
-     Zeros: [59x59 double]
-      name: 'HB/impcol_b'
-        id: 172
-      date: '1982'
-    author: 'D. Bogle'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'chemical process simulation problem'
-
-nnz(A)    271
-nnz(S)    497
-nnz(A*A') 783
-nnz(A'*A) 627
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-102:
-
-Prob = 
-
-     title: 'SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.'
-         A: [61x61 double]
-      name: 'HB/can_61'
-        id: 102
-      date: '1981'
-    author: 'L. Marro'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    557
-nnz(S)    557
-nnz(A*A') 1793
-nnz(A'*A) 1793
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-103:
-
-Prob = 
-
-     title: 'SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.'
-         A: [62x62 double]
-      name: 'HB/can_62'
-        id: 103
-      date: '1981'
-    author: 'L. Marro'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    218
-nnz(S)    218
-nnz(A*A') 482
-nnz(A'*A) 482
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-293:
-
-Prob = 
-
-     title: 'BOUNDED FINLINE WAVEGUIDE EIGENMODES B SHULTZ AND S GEDNEY'
-         A: [62x62 double]
-      name: 'Bai/bfwa62'
-        id: 293
-      date: '1994'
-    author: 'B. Schultz, S. Gedney'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: 'electromagnetics problem'
-
-nnz(A)    450
-nnz(S)    462
-nnz(A*A') 1306
-nnz(A'*A) 1340
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-296:
-
-Prob = 
-
-     title: 'BOUNDED FINLINE WAVEGUIDE EIGENMODES B SHULTZ AND S GEDNEY'
-         A: [62x62 double]
-      name: 'Bai/bfwb62'
-        id: 296
-      date: '1994'
-    author: 'B. Schultz, S. Gedney'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: 'electromagnetics problem'
-
-nnz(A)    342
-nnz(S)    342
-nnz(A*A') 992
-nnz(A'*A) 992
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1487:
-
-Prob = 
-
-      name: 'Pajek/GD95_c'
-     title: 'Pajek network: Graph Drawing contest 1995'
-         A: [62x62 double]
-        id: 1487
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1995'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    287
-nnz(S)    288
-nnz(A*A') 998
-nnz(A'*A) 996
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1759:
-
-Prob = 
-
-      name: 'Meszaros/refine'
-     title: 'linear programming problem, C. Meszaros test set'
-        id: 1759
-      kind: 'linear programming problem'
-      date: '2004'
-    author: ''
-        ed: 'C. Meszaros'
-         A: [29x62 double]
-         b: [29x1 double]
-       aux: [1x1 struct]
-     notes: [3x57 char]
-
-nnz(A)    153
-nnz(S)    29
-nnz(A*A') 29
-nnz(A'*A) 29
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1742:
-
-Prob = 
-
-      name: 'Meszaros/p0040'
-     title: 'linear programming problem, C. Meszaros test set'
-        id: 1742
-      kind: 'linear programming problem'
-      date: '2004'
-    author: ''
-        ed: 'C. Meszaros'
-         A: [23x63 double]
-         b: [23x1 double]
-       aux: [1x1 struct]
-     notes: [3x57 char]
-
-nnz(A)    133
-nnz(S)    23
-nnz(A*A') 23
-nnz(A'*A) 23
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1498:
-
-Prob = 
-
-      name: 'Pajek/GD99_b'
-     title: 'Pajek network: Graph Drawing contest 1999'
-         A: [64x64 double]
-        id: 1498
-      kind: 'undirected multigraph'
-     notes: [5x78 char]
-       aux: [1x1 struct]
-      date: '1999'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    252
-nnz(S)    252
-nnz(A*A') 668
-nnz(A'*A) 668
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1490:
-
-Prob = 
-
-      name: 'Pajek/GD96_c'
-     title: 'Pajek network: Graph Drawing contest 1996'
-         A: [65x65 double]
-        id: 1490
-      kind: 'undirected graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1996'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    250
-nnz(S)    250
-nnz(A*A') 695
-nnz(A'*A) 695
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-24:
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, SMALL OIL RIG, STATICALLY CONDENSED'
-         A: [66x66 double]
-      name: 'HB/bcsstk02'
-        id: 24
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    4356
-nnz(S)    4356
-nnz(A*A') 4356
-nnz(A'*A) 4356
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-57:
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, SMALL OIL RIG, STATICALLY CONDENSED'
-         A: [66x66 double]
-      name: 'HB/bcsstm02'
-        id: 57
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    66
-nnz(S)    66
-nnz(A*A') 66
-nnz(A'*A) 66
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-132:
-
-Prob = 
-
-     title: 'SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON'
-         A: [66x66 double]
-      name: 'HB/dwt_66'
-        id: 132
-      date: '1980'
-    author: 'G. Everstine, D. Taylor'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    320
-nnz(S)    320
-nnz(A*A') 576
-nnz(A'*A) 576
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-883:
-
-Prob = 
-
-         A: [66x66 double]
-     title: 'sphere2, with coordinates.  From NASA, collected by Alex Pothen'
-      name: 'Pothen/sphere2'
-        id: 883
-       aux: [1x1 struct]
-      date: '2003'
-    author: 'NASA'
-        ed: 'G. Kumfert, A. Pothen'
-      kind: 'structural problem'
-
-nnz(A)    450
-nnz(S)    450
-nnz(A*A') 1170
-nnz(A'*A) 1170
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-262:
-
-Prob = 
-
-     title: 'U CAVETT PROBLEM WITH 5 COMPONENTS ( CHEM. ENG. FROM WESTERBERG )'
-         A: [67x67 double]
-      name: 'HB/west0067'
-        id: 262
-      date: '1983'
-    author: 'A. Westerberg'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'chemical process simulation problem'
-
-nnz(A)    294
-nnz(S)    576
-nnz(A*A') 1041
-nnz(A'*A) 889
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-636:
-
-Prob = 
-
-     title: 'Netlib LP problem kb2: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lp_kb2'
-         A: [43x68 double]
-         b: [43x1 double]
-        id: 636
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1989'
-    author: 'J. Tomlin'
-        ed: 'D. Gay'
-     notes: [39x74 char]
-
-nnz(A)    313
-nnz(S)    318
-nnz(A*A') 513
-nnz(A'*A) 355
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-133:
-
-Prob = 
-
-     title: 'SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON'
-         A: [72x72 double]
-      name: 'HB/dwt_72'
-        id: 133
-      date: '1980'
-    author: 'G. Everstine, D. Taylor'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    222
-nnz(S)    222
-nnz(A*A') 412
-nnz(A'*A) 412
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1501:
-
-Prob = 
-
-      name: 'Pajek/GlossGT'
-     title: 'Pajek network: graph and digraph glossary'
-         A: [72x72 double]
-        id: 1501
-      kind: 'directed graph'
-     notes: [10x78 char]
-       aux: [1x1 struct]
-      date: '2001'
-    author: 'W. Cherowitzo'
-        ed: 'V. Batagelj'
-
-nnz(A)    122
-nnz(S)    236
-nnz(A*A') 798
-nnz(A'*A) 161
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-106:
-
-Prob = 
-
-     title: 'SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.'
-         A: [73x73 double]
-      name: 'HB/can_73'
-        id: 106
-      date: '1981'
-    author: 'L. Marro'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    377
-nnz(S)    377
-nnz(A*A') 1377
-nnz(A'*A) 1377
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1486:
-
-Prob = 
-
-      name: 'Pajek/GD95_b'
-     title: 'Pajek network: Graph Drawing contest 1995'
-         A: [73x73 double]
-        id: 1486
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1995'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    96
-nnz(S)    191
-nnz(A*A') 148
-nnz(A'*A) 875
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-666:
-
-Prob = 
-
-     title: 'Netlib LP problem sc50a: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lp_sc50a'
-         A: [50x78 double]
-         b: [50x1 double]
-        id: 666
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1989'
-    author: 'N. Gould'
-        ed: 'D. Gay'
-     notes: [30x74 char]
-
-nnz(A)    160
-nnz(S)    163
-nnz(A*A') 136
-nnz(A'*A) 174
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-667:
-
-Prob = 
-
-     title: 'Netlib LP problem sc50b: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lp_sc50b'
-         A: [50x78 double]
-         b: [50x1 double]
-        id: 667
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1989'
-    author: 'N. Gould'
-        ed: 'D. Gay'
-     notes: [30x74 char]
-
-nnz(A)    148
-nnz(S)    155
-nnz(A*A') 132
-nnz(A'*A) 162
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-253:
-
-Prob = 
-
-     title: 'UNSYMMETRIC - 1D STEAM MODEL OF OIL RES. - 20 POINTS - 4 DOF  MAY 1983'
-         A: [80x80 double]
-     Zeros: [80x80 double]
-      name: 'HB/steam3'
-        id: 253
-      date: '1983'
-    author: 'R. Grimes'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'computational fluid dynamics problem'
-
-nnz(A)    314
-nnz(S)    392
-nnz(A*A') 688
-nnz(A'*A) 768
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1482:
-
-Prob = 
-
-      name: 'Pajek/GD02_b'
-     title: 'Pajek network: Graph Drawing contest 2002'
-         A: [80x80 double]
-        id: 1482
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '2002'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    232
-nnz(S)    464
-nnz(A*A') 570
-nnz(A'*A) 630
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1492:
-
-Prob = 
-
-      name: 'Pajek/GD97_a'
-     title: 'Pajek network: Graph Drawing contest 1997'
-         A: [84x84 double]
-        id: 1492
-      kind: 'directed graph'
-     notes: [5x78 char]
-       aux: [1x1 struct]
-      date: '1997'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    332
-nnz(S)    332
-nnz(A*A') 860
-nnz(A'*A) 860
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-11:
-
-Prob = 
-
-     title: 'SYMMETRIC PATTERN OF NORMAL MATRIX OF HOLLAND SURVEY. ASHKENAZI, 1974'
-         A: [85x85 double]
-      name: 'HB/ash85'
-        id: 11
-      date: '1974'
-    author: 'V. Askenazi'
-        ed: 'A. Curtis, I. Duff, J. Reid'
-      kind: 'least squares problem'
-
-nnz(A)    523
-nnz(S)    523
-nnz(A*A') 1317
-nnz(A'*A) 1317
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1519:
-
-Prob = 
-
-      name: 'Pajek/Sandi_authors'
-     title: 'Pajek network: Klavzar bibliography'
-         A: [86x86 double]
-        id: 1519
-      kind: 'undirected weighted graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1999'
-    author: 'I. Klavzar'
-        ed: 'V. Batagelj'
-
-nnz(A)    248
-nnz(S)    248
-nnz(A*A') 908
-nnz(A'*A) 908
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-136:
-
-Prob = 
-
-     title: 'SYMMETRIC CONNECTION TABLE FROM DTNSRDC, WASHINGTON'
-         A: [87x87 double]
-      name: 'HB/dwt_87'
-        id: 136
-      date: '1980'
-    author: 'G. Everstine, D. Taylor'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    541
-nnz(S)    541
-nnz(A*A') 1539
-nnz(A'*A) 1539
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-462:
-
-Prob = 
-
-     title: 'Unsymmetric Matrix d_dyn, F. Grund, Dec 1994.'
-         A: [87x87 double]
-     Zeros: [87x87 double]
-         b: [87x1 double]
-      name: 'Grund/d_dyn'
-        id: 462
-      date: '1997'
-    author: 'F. Grund'
-        ed: 'F. Grund'
-      kind: 'chemical process simulation problem'
-
-nnz(A)    230
-nnz(S)    438
-nnz(A*A') 497
-nnz(A'*A) 525
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-463:
-
-Prob = 
-
-     title: 'Unsymmetric Matrix d_dyn1, F. Grund, Oct 1995.'
-         A: [87x87 double]
-     Zeros: [87x87 double]
-      name: 'Grund/d_dyn1'
-        id: 463
-      date: '1997'
-    author: 'F. Grund'
-        ed: 'F. Grund'
-      kind: 'chemical process simulation problem'
-
-nnz(A)    232
-nnz(S)    442
-nnz(A*A') 503
-nnz(A'*A) 535
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-731:
-
-Prob = 
-
-     title: 'Netlib LP problem woodinfe: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lpi_woodinfe'
-         A: [35x89 double]
-         b: [35x1 double]
-        id: 731
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1989'
-    author: 'H. Greenberg'
-        ed: 'J. Chinneck'
-     notes: [35x76 char]
-
-nnz(A)    140
-nnz(S)    67
-nnz(A*A') 32
-nnz(A'*A) 41
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1641:
-
-Prob = 
-
-      name: 'Bai/tols90'
-     title: 'TOLOSA MATRIX'
-         A: [90x90 double]
-        id: 1641
-      date: '1991'
-    author: 'S. Godet-Thobie'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: 'computational fluid dynamics problem'
-
-nnz(A)    1746
-nnz(S)    2970
-nnz(A*A') 3204
-nnz(A'*A) 8100
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-907:
-
-Prob = 
-
-     title: 'DNA electrophoresis, 6 monomers in polymer. A. van Heukelum, Utrecht U.'
-         A: [93x93 double]
-      name: 'vanHeukelum/cage6'
-        id: 907
-      date: '2003'
-    author: 'A. van Heukelum'
-        ed: 'T. Davis'
-      kind: 'directed weighted graph'
-
-nnz(A)    785
-nnz(S)    785
-nnz(A*A') 2849
-nnz(A'*A) 2849
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-108:
-
-Prob = 
-
-     title: 'SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.'
-         A: [96x96 double]
-      name: 'HB/can_96'
-        id: 108
-      date: '1981'
-    author: 'L. Marro'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    768
-nnz(S)    768
-nnz(A*A') 1920
-nnz(A'*A) 1920
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-220:
-
-Prob = 
-
-     title: 'SYMMETRIC MATRIX OF BEAM STRUCTURE, NOVEMBER 1982.'
-         A: [100x100 double]
-      name: 'HB/nos4'
-        id: 220
-      date: '1982'
-    author: 'H. Simon'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    594
-nnz(S)    594
-nnz(A*A') 1802
-nnz(A'*A) 1802
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-318:
-
-Prob = 
-
-     title: 'OLMSTEAD FLOW MODEL'
-         A: [100x100 double]
-      name: 'Bai/olm100'
-        id: 318
-      date: '1994'
-    author: 'K. Meerbergen'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: 'computational fluid dynamics problem'
-
-nnz(A)    396
-nnz(S)    494
-nnz(A*A') 590
-nnz(A'*A) 976
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-337:
-
-Prob = 
-
-     title: 'TUBULAR REACTOR MODEL'
-         A: [100x100 double]
-      name: 'Bai/tub100'
-        id: 337
-      date: '1994'
-    author: 'K. Meerbergen, D. Roose'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: 'computational fluid dynamics problem'
-
-nnz(A)    396
-nnz(S)    396
-nnz(A*A') 784
-nnz(A'*A) 784
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1326:
-
-Prob = 
-
-      name: 'Morandini/rotor1'
-     title: 'Marco Morandini, small helicoptor rotor model'
-         A: [100x100 double]
-        id: 1326
-      date: '2006'
-    author: 'M. Morandini'
-        ed: 'T. Davis'
-      kind: 'structural problem'
-
-nnz(A)    708
-nnz(S)    1020
-nnz(A*A') 3346
-nnz(A'*A) 3634
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1484:
-
-Prob = 
-
-      name: 'Pajek/GD06_theory'
-     title: 'Pajek network: Graph Drawing contest 2006'
-         A: [101x101 double]
-        id: 1484
-      kind: 'undirected graph'
-     notes: [9x78 char]
-      date: '2006'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    380
-nnz(S)    380
-nnz(A*A') 3341
-nnz(A'*A) 3341
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-861:
-
-Prob = 
-
-         A: [102x102 double]
-         b: [102x3 double]
-     title: 'Spline toolbox. Pivot tol 0.1 fails, needs >= 0.26. MathWorks,Inc'
-      name: 'MathWorks/pivtol'
-        id: 861
-      date: '2002'
-    author: 'B. Cheng'
-        ed: 'T. Davis'
-      kind: 'statistical/mathematical problem'
-
-nnz(A)    306
-nnz(S)    308
-nnz(A*A') 510
-nnz(A'*A) 512
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-306:
-
-Prob = 
-
-     title: 'CHUCK MATRIX (MULTIPLE EIGENVALUES)  J. CULLUM'
-         A: [104x104 double]
-      name: 'Bai/ck104'
-        id: 306
-      date: '1986'
-    author: 'J. Cullum'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: '2D/3D problem'
-
-nnz(A)    992
-nnz(S)    992
-nnz(A*A') 1712
-nnz(A'*A) 1712
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1499:
-
-Prob = 
-
-      name: 'Pajek/GD99_c'
-     title: 'Pajek network: Graph Drawing contest 1999'
-         A: [105x105 double]
-        id: 1499
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1999'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    149
-nnz(S)    240
-nnz(A*A') 177
-nnz(A'*A) 352
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-721:
-
-Prob = 
-
-     title: 'Netlib LP problem klein1: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lpi_klein1'
-         A: [54x108 double]
-         b: [54x1 double]
-        id: 721
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: ''
-    author: 'E. Klotz'
-        ed: 'J. Chinneck'
-     notes: [19x76 char]
-
-nnz(A)    750
-nnz(S)    54
-nnz(A*A') 54
-nnz(A'*A) 54
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1489:
-
-Prob = 
-
-      name: 'Pajek/GD96_b'
-     title: 'Pajek network: Graph Drawing contest 1996'
-         A: [111x111 double]
-        id: 1489
-      kind: 'directed graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1996'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    193
-nnz(S)    386
-nnz(A*A') 3021
-nnz(A'*A) 100
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-25:
-
-Prob = 
-
-     title: 'SYMMETRIC STIFFNESS MATRIX, SMALL TEST STRUCTURE'
-         A: [112x112 double]
-      name: 'HB/bcsstk03'
-        id: 25
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    640
-nnz(S)    640
-nnz(A*A') 1072
-nnz(A'*A) 1072
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-58:
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, SMALL TEST STRUCTURE'
-         A: [112x112 double]
-     Zeros: [112x112 double]
-      name: 'HB/bcsstm03'
-        id: 58
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz(A)    72
-nnz(S)    72
-nnz(A*A') 72
-nnz(A'*A) 72
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-1497:
-
-Prob = 
-
-      name: 'Pajek/GD98_c'
-     title: 'Pajek network: Graph Drawing contest 1998'
-         A: [112x112 double]
-        id: 1497
-      kind: 'undirected graph'
-     notes: [7x78 char]
-       aux: [1x1 struct]
-      date: '1998'
-    author: 'Graph Drawing Contest'
-        ed: 'V. Batagelj'
-
-nnz(A)    336
-nnz(S)    336
-nnz(A*A') 784
-nnz(A'*A) 784
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-158:
-
-Prob = 
-
-     title: 'UNSYMMETRIC PATTERN SUPPLIED BY MORVEN GENTLEMAN, SUMMER  1973'
-         A: [113x113 double]
-      name: 'HB/gent113'
-        id: 158
-      date: '1973'
-    author: 'W. Gentleman'
-        ed: 'A. Curtis, I. Duff, J. Reid'
-      kind: 'statistical/mathematical problem'
-
-nnz(A)    655
-nnz(S)    1188
-nnz(A*A') 2683
-nnz(A'*A) 2351
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-603:
-
-Prob = 
-
-     title: 'Netlib LP problem blend: minimize c'*x, where Ax=b, lo<=x<=hi'
-      name: 'LPnetlib/lp_blend'
-         A: [74x114 double]
-         b: [74x1 double]
-        id: 603
-       aux: [1x1 struct]
-      kind: 'linear programming problem'
-      date: '1989'
-    author: 'N. Gould'
-        ed: 'D. Gay'
-     notes: [36x76 char]
-
-nnz(A)    522
-nnz(S)    749
-nnz(A*A') 1319
-nnz(A'*A) 1062
-metis (S):
-metis (A,row):
-metis (A,col):
-turning off postorder:
-metis (S):
-metis (A,row):
-metis (A,col):
-analyzing results:
-test14 passed
-=================================================================
-Matrices to test: 100
-
- 904: vanHeukelum/cage3    nrow:      5 ncol:      5 nnz:         19
-c=symbfact(A):             0.0003     0.0001  speedup     2.57 lnz 12
-R=symbfact(A):             0.0004     0.0002  speedup     2.66
-c=symbfact(A'):            0.0004     0.0001  speedup     2.89 lnz 12
-R=symbfact(A'):            0.0004     0.0002  speedup     2.77
-c=symbfact(A,'col'):       0.0004     0.0002  speedup     2.38 lnz 15
-R=symbfact(A,'col'):       0.0004     0.0002  speedup     2.86
-
- 449: Grund/b1_ss          nrow:      7 ncol:      7 nnz:         15
-c=symbfact(A):             0.0001     0.0000  speedup     6.25 lnz 13
-R=symbfact(A):             0.0001     0.0000  speedup     4.36
-c=symbfact(A'):            0.0001     0.0000  speedup     5.84 lnz 10
-R=symbfact(A'):            0.0001     0.0000  speedup     5.04
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.80 lnz 19
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.77
-
- 185: HB/jgl009            nrow:      9 ncol:      9 nnz:         50
-c=symbfact(A):             0.0001     0.0000  speedup     5.61 lnz 23
-R=symbfact(A):             0.0001     0.0000  speedup     3.74
-c=symbfact(A'):            0.0001     0.0000  speedup     5.52 lnz 39
-R=symbfact(A'):            0.0003     0.0000  speedup     8.63
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.90 lnz 45
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.07
-
- 905: vanHeukelum/cage4    nrow:      9 ncol:      9 nnz:         49
-c=symbfact(A):             0.0001     0.0000  speedup     5.94 lnz 36
-R=symbfact(A):             0.0001     0.0000  speedup     3.50
-c=symbfact(A'):            0.0001     0.0000  speedup     5.52 lnz 36
-R=symbfact(A'):            0.0001     0.0000  speedup     4.57
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.67 lnz 45
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.55
-
- 238: HB/rgg010            nrow:     10 ncol:     10 nnz:         76
-c=symbfact(A):             0.0001     0.0000  speedup     5.37 lnz 31
-R=symbfact(A):             0.0001     0.0000  speedup     4.55
-c=symbfact(A'):            0.0001     0.0000  speedup     3.93 lnz 55
-R=symbfact(A'):            0.0001     0.0000  speedup     3.57
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.62 lnz 55
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.37
-
-1524: Pajek/Stranke94      nrow:     10 ncol:     10 nnz:         90
-c=symbfact(A):             0.0001     0.0000  speedup     5.37 lnz 55
-R=symbfact(A):             0.0001     0.0000  speedup     4.65
-c=symbfact(A'):            0.0002     0.0000  speedup     6.65 lnz 55
-R=symbfact(A'):            0.0001     0.0000  speedup     4.69
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.76 lnz 55
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.22
-
- 186: HB/jgl011            nrow:     11 ncol:     11 nnz:         76
-c=symbfact(A):             0.0001     0.0000  speedup     5.72 lnz 31
-R=symbfact(A):             0.0001     0.0000  speedup     4.47
-c=symbfact(A'):            0.0001     0.0000  speedup     3.96 lnz 59
-R=symbfact(A'):            0.0001     0.0000  speedup     3.57
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.45 lnz 66
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.32
-
-1525: Pajek/Tina_AskCal    nrow:     11 ncol:     11 nnz:         29
-c=symbfact(A):             0.0001     0.0000  speedup     5.44 lnz 33
-R=symbfact(A):             0.0001     0.0000  speedup     4.48
-c=symbfact(A'):            0.0001     0.0000  speedup     5.65 lnz 25
-R=symbfact(A'):            0.0001     0.0000  speedup     5.04
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.62 lnz 35
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.21
-
-1526: Pajek/Tina_AskCog    nrow:     11 ncol:     11 nnz:         36
-c=symbfact(A):             0.0001     0.0000  speedup     5.61 lnz 36
-R=symbfact(A):             0.0001     0.0000  speedup     3.69
-c=symbfact(A'):            0.0001     0.0000  speedup     5.36 lnz 35
-R=symbfact(A'):            0.0001     0.0000  speedup     4.36
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.50 lnz 44
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.23
-
-1527: Pajek/Tina_DisCal    nrow:     11 ncol:     11 nnz:         41
-c=symbfact(A):             0.0001     0.0000  speedup     5.61 lnz 47
-R=symbfact(A):             0.0001     0.0000  speedup     4.32
-c=symbfact(A'):            0.0001     0.0000  speedup     5.36 lnz 34
-R=symbfact(A'):            0.0001     0.0000  speedup     4.54
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.71 lnz 46
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.33
-
-1528: Pajek/Tina_DisCog    nrow:     11 ncol:     11 nnz:         48
-c=symbfact(A):             0.0001     0.0000  speedup     5.61 lnz 45
-R=symbfact(A):             0.0001     0.0000  speedup     4.55
-c=symbfact(A'):            0.0001     0.0000  speedup     5.14 lnz 39
-R=symbfact(A'):            0.0001     0.0000  speedup     4.43
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.45 lnz 55
-R=symbfact(A,'col'):       0.0002     0.0000  speedup     4.78
-
- 719: LPnetlib/lpi_itest2  nrow:      9 ncol:     13 nnz:         26
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.64 lnz 35
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.09
-
- 715: LPnetlib/lpi_galenet nrow:      8 ncol:     14 nnz:         22
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.64 lnz 37
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.09
-
-1440: Oberwolfach/LFAT5    nrow:     14 ncol:     14 nnz:         46
-c=symbfact(A):             0.0001     0.0000  speedup     5.61 lnz 33
-R=symbfact(A):             0.0001     0.0000  speedup     3.57
-c=symbfact(A'):            0.0001     0.0000  speedup     5.52 lnz 33
-R=symbfact(A'):            0.0001     0.0000  speedup     4.61
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.50 lnz 43
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.26
-
-1817: Meszaros/kleemin     nrow:      8 ncol:     16 nnz:         44
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.77 lnz 86
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.03
-
- 720: LPnetlib/lpi_itest6  nrow:     11 ncol:     17 nnz:         29
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.48 lnz 38
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.12
-
-1710: Meszaros/farm        nrow:      7 ncol:     17 nnz:         41
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.61 lnz 101
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.89
-
-1438: Oberwolfach/LF10     nrow:     18 ncol:     18 nnz:         82
-c=symbfact(A):             0.0001     0.0000  speedup     5.00 lnz 58
-R=symbfact(A):             0.0001     0.0000  speedup     4.24
-c=symbfact(A'):            0.0001     0.0000  speedup     5.32 lnz 58
-R=symbfact(A'):            0.0001     0.0000  speedup     4.03
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.17 lnz 86
-R=symbfact(A,'col'):       0.0002     0.0000  speedup     4.78
-
-1479: Pajek/GD01_b         nrow:     18 ncol:     18 nnz:         37
-c=symbfact(A):             0.0001     0.0000  speedup     5.47 lnz 43
-R=symbfact(A):             0.0001     0.0001  speedup     0.92
-c=symbfact(A'):            0.0001     0.0000  speedup     4.03 lnz 37
-R=symbfact(A'):            0.0001     0.0000  speedup     3.50
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.43 lnz 43
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     4.06
-
-1481: Pajek/GD02_a         nrow:     23 ncol:     23 nnz:         87
-c=symbfact(A):             0.0001     0.0000  speedup     5.05 lnz 83
-R=symbfact(A):             0.0001     0.0000  speedup     4.14
-c=symbfact(A'):            0.0001     0.0000  speedup     3.65 lnz 83
-R=symbfact(A'):            0.0001     0.0000  speedup     3.25
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.92 lnz 208
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.38
-
-1516: Pajek/Ragusa18       nrow:     23 ncol:     23 nnz:         64
-c=symbfact(A):             0.0001     0.0000  speedup     5.05 lnz 69
-R=symbfact(A):             0.0001     0.0001  speedup     2.10
-c=symbfact(A'):            0.0001     0.0000  speedup     3.74 lnz 61
-R=symbfact(A'):            0.0001     0.0000  speedup     3.28
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.25 lnz 96
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.83
-
-  97: HB/can_24            nrow:     24 ncol:     24 nnz:        160
-c=symbfact(A):             0.0001     0.0000  speedup     4.65 lnz 120
-R=symbfact(A):             0.0001     0.0000  speedup     3.09
-c=symbfact(A'):            0.0001     0.0000  speedup     4.73 lnz 120
-R=symbfact(A'):            0.0001     0.0001  speedup     1.96
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.93 lnz 196
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.36
-
-1515: Pajek/Ragusa16       nrow:     24 ncol:     24 nnz:         81
-c=symbfact(A):             0.0001     0.0000  speedup     5.05 lnz 71
-R=symbfact(A):             0.0001     0.0000  speedup     3.36
-c=symbfact(A'):            0.0001     0.0000  speedup     5.04 lnz 70
-R=symbfact(A'):            0.0001     0.0000  speedup     4.00
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.12 lnz 144
-R=symbfact(A,'col'):       0.0002     0.0000  speedup     5.54
-
-1177: HB/lap_25            nrow:     25 ncol:     25 nnz:        169
-c=symbfact(A):             0.0001     0.0000  speedup     4.65 lnz 138
-R=symbfact(A):             0.0002     0.0000  speedup     3.87
-c=symbfact(A'):            0.0001     0.0000  speedup     3.62 lnz 138
-R=symbfact(A'):            0.0001     0.0000  speedup     3.86
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.44 lnz 235
-R=symbfact(A,'col'):       0.0002     0.0000  speedup     3.21
-
- 436: FIDAP/ex5            nrow:     27 ncol:     27 nnz:        279
-c=symbfact(A):             0.0001     0.0000  speedup     4.58 lnz 153
-R=symbfact(A):             0.0002     0.0000  speedup     3.80
-c=symbfact(A'):            0.0001     0.0000  speedup     4.64 lnz 153
-R=symbfact(A'):            0.0001     0.0000  speedup     3.92
-c=symbfact(A,'col'):       0.0002     0.0000  speedup     6.69 lnz 261
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     3.21
-
- 232: HB/pores_1           nrow:     30 ncol:     30 nnz:        180
-c=symbfact(A):             0.0005     0.0000  speedup    20.28 lnz 133
-R=symbfact(A):             0.0002     0.0001  speedup     3.04
-c=symbfact(A'):            0.0001     0.0000  speedup     5.04 lnz 183
-R=symbfact(A'):            0.0001     0.0000  speedup     3.16
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.82 lnz 253
-R=symbfact(A,'col'):       0.0001     0.0001  speedup     2.65
-
- 168: HB/ibm32             nrow:     32 ncol:     32 nnz:        126
-c=symbfact(A):             0.0001     0.0000  speedup     4.70 lnz 155
-R=symbfact(A):             0.0001     0.0000  speedup     3.00
-c=symbfact(A'):            0.0001     0.0000  speedup     5.00 lnz 135
-R=symbfact(A'):            0.0001     0.0000  speedup     3.75
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.66 lnz 325
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.08
-
-1199: Hamrle/Hamrle1       nrow:     32 ncol:     32 nnz:         98
-c=symbfact(A):             0.0001     0.0000  speedup     4.86 lnz 173
-R=symbfact(A):             0.0001     0.0002  speedup     0.88
-c=symbfact(A'):            0.0001     0.0000  speedup     4.96 lnz 112
-R=symbfact(A'):            0.0001     0.0000  speedup     3.12
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.93 lnz 176
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.34
-
-1480: Pajek/GD01_c         nrow:     33 ncol:     33 nnz:        135
-c=symbfact(A):             0.0001     0.0000  speedup     4.50 lnz 139
-R=symbfact(A):             0.0962     0.0000  speedup  1963.43
-c=symbfact(A'):            0.0002     0.0000  speedup     6.00 lnz 144
-R=symbfact(A'):            0.0001     0.0000  speedup     3.87
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.82 lnz 214
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.04
-
-1474: Pajek/football       nrow:     35 ncol:     35 nnz:        118
-c=symbfact(A):             0.0001     0.0000  speedup     4.40 lnz 144
-R=symbfact(A):             0.0002     0.0000  speedup     3.49
-c=symbfact(A'):            0.0002     0.0000  speedup     5.72 lnz 97
-R=symbfact(A'):            0.0001     0.0000  speedup     3.09
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.63 lnz 146
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.13
-
-1485: Pajek/GD95_a         nrow:     36 ncol:     36 nnz:         57
-c=symbfact(A):             0.0001     0.0000  speedup     4.42 lnz 69
-R=symbfact(A):             0.0001     0.0000  speedup     2.96
-c=symbfact(A'):            0.0001     0.0000  speedup     4.73 lnz 71
-R=symbfact(A'):            0.0001     0.0011  speedup     0.12
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.07 lnz 69
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.72
-
- 906: vanHeukelum/cage5    nrow:     37 ncol:     37 nnz:        233
-c=symbfact(A):             0.0001     0.0000  speedup     4.19 lnz 198
-R=symbfact(A):             0.0002     0.0001  speedup     2.00
-c=symbfact(A'):            0.0001     0.0000  speedup     4.67 lnz 198
-R=symbfact(A'):            0.0001     0.0000  speedup     3.36
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.38 lnz 472
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.37
-
-1495: Pajek/GD98_a         nrow:     38 ncol:     38 nnz:         50
-c=symbfact(A):             0.0001     0.0000  speedup     4.65 lnz 59
-R=symbfact(A):             0.0001     0.0000  speedup     3.69
-c=symbfact(A'):            0.0001     0.0000  speedup     5.19 lnz 74
-R=symbfact(A'):            0.0001     0.0000  speedup     3.16
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.04 lnz 144
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.49
-
-  13: HB/bcspwr01          nrow:     39 ncol:     39 nnz:        131
-c=symbfact(A):             0.0001     0.0000  speedup     4.40 lnz 104
-R=symbfact(A):             0.0001     0.0001  speedup     2.92
-c=symbfact(A'):            0.0001     0.0000  speedup     4.70 lnz 104
-R=symbfact(A'):            0.0001     0.0000  speedup     3.54
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.47 lnz 190
-R=symbfact(A,'col'):       0.0001     0.0001  speedup     2.65
-
- 706: LPnetlib/lpi_bgprtr  nrow:     20 ncol:     40 nnz:         70
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.96 lnz 155
-R=symbfact(A,'col'):       0.0001     0.0001  speedup     2.72
-
-1755: Meszaros/problem     nrow:     12 ncol:     46 nnz:         86
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.93 lnz 377
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     3.04
-
-1493: Pajek/GD97_b         nrow:     47 ncol:     47 nnz:        264
-c=symbfact(A):             0.0001     0.0000  speedup     3.87 lnz 211
-R=symbfact(A):             0.0002     0.0001  speedup     2.71
-c=symbfact(A'):            0.0001     0.0000  speedup     4.25 lnz 211
-R=symbfact(A'):            0.0002     0.0001  speedup     2.75
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.19 lnz 713
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.17
-
-  23: HB/bcsstk01          nrow:     48 ncol:     48 nnz:        400
-c=symbfact(A):             0.0001     0.0000  speedup     3.75 lnz 489
-R=symbfact(A):             0.0002     0.0001  speedup     2.56
-c=symbfact(A'):            0.0001     0.0000  speedup     4.45 lnz 489
-R=symbfact(A'):            0.0002     0.0001  speedup     2.98
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.98 lnz 944
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     1.97
-
-  56: HB/bcsstm01          nrow:     48 ncol:     48 nnz:         24
-c=symbfact(A):             0.0001     0.0000  speedup     4.73 lnz 48
-R=symbfact(A):             0.0001     0.0000  speedup     4.00
-c=symbfact(A'):            0.0001     0.0000  speedup     4.96 lnz 48
-R=symbfact(A'):            0.0002     0.0001  speedup     3.67
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     4.33 lnz 48
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.74
-
- 872: Pothen/mesh1e1       nrow:     48 ncol:     48 nnz:        306
-c=symbfact(A):             0.0001     0.0000  speedup     4.30 lnz 336
-R=symbfact(A):             0.0002     0.0001  speedup     3.04
-c=symbfact(A'):            0.0001     0.0000  speedup     4.34 lnz 336
-R=symbfact(A'):            0.0002     0.0001  speedup     2.72
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.11 lnz 769
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.40
-
- 873: Pothen/mesh1em1      nrow:     48 ncol:     48 nnz:        306
-c=symbfact(A):             0.0001     0.0000  speedup     3.90 lnz 336
-R=symbfact(A):             0.0002     0.0001  speedup     3.13
-c=symbfact(A'):            0.0001     0.0000  speedup     4.27 lnz 336
-R=symbfact(A'):            0.0002     0.0001  speedup     2.70
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.19 lnz 769
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.45
-
- 874: Pothen/mesh1em6      nrow:     48 ncol:     48 nnz:        306
-c=symbfact(A):             0.0001     0.0000  speedup     3.90 lnz 336
-R=symbfact(A):             0.0002     0.0001  speedup     3.17
-c=symbfact(A'):            0.0002     0.0000  speedup     5.35 lnz 336
-R=symbfact(A'):            0.0002     0.0001  speedup     3.04
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.08 lnz 769
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.30
-
-1741: Meszaros/p0033       nrow:     15 ncol:     48 nnz:        113
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.61 lnz 364
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.91
-
-  14: HB/bcspwr02          nrow:     49 ncol:     49 nnz:        167
-c=symbfact(A):             0.0001     0.0000  speedup     4.04 lnz 129
-R=symbfact(A):             0.0002     0.0001  speedup     3.06
-c=symbfact(A'):            0.0001     0.0000  speedup     4.59 lnz 129
-R=symbfact(A'):            0.0001     0.0000  speedup     2.92
-c=symbfact(A,'col'):       0.0002     0.0000  speedup     4.97 lnz 275
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.50
-
-1460: Pajek/divorce        nrow:     50 ncol:      9 nnz:        225
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.96 lnz 45
-R=symbfact(A,'col'):       0.0001     0.0001  speedup     2.71
-
- 597: LPnetlib/lp_afiro    nrow:     27 ncol:     51 nnz:        102
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.68 lnz 293
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.52
-
- 464: Grund/d_ss           nrow:     53 ncol:     53 nnz:        144
-c=symbfact(A):             0.0001     0.0000  speedup     4.15 lnz 238
-R=symbfact(A):             0.0002     0.0001  speedup     2.74
-c=symbfact(A'):            0.0001     0.0000  speedup     4.29 lnz 243
-R=symbfact(A'):            0.0003     0.0000  speedup     5.36
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.39 lnz 259
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.96
-
- 109: HB/curtis54          nrow:     54 ncol:     54 nnz:        291
-c=symbfact(A):             0.0001     0.0000  speedup     3.81 lnz 222
-R=symbfact(A):             0.0002     0.0001  speedup     3.11
-c=symbfact(A'):            0.0001     0.0001  speedup     2.09 lnz 208
-R=symbfact(A'):            0.0002     0.0001  speedup     3.34
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.13 lnz 556
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.22
-
-1457: Pajek/Cities         nrow:     55 ncol:     46 nnz:       1342
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.76 lnz 1081
-R=symbfact(A,'col'):       0.0003     0.0002  speedup     1.78
-
- 274: HB/will57            nrow:     57 ncol:     57 nnz:        281
-c=symbfact(A):             0.0001     0.0000  speedup     4.03 lnz 179
-R=symbfact(A):             0.0002     0.0001  speedup     3.30
-c=symbfact(A'):            0.0001     0.0000  speedup     4.15 lnz 178
-R=symbfact(A'):            0.0002     0.0000  speedup     4.41
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.11 lnz 450
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.17
-
- 129: HB/dwt_59            nrow:     59 ncol:     59 nnz:        267
-c=symbfact(A):             0.0001     0.0000  speedup     3.77 lnz 244
-R=symbfact(A):             0.0002     0.0001  speedup     3.13
-c=symbfact(A'):            0.0001     0.0001  speedup     2.22 lnz 244
-R=symbfact(A'):            0.0002     0.0001  speedup     3.30
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.03 lnz 492
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.25
-
- 172: HB/impcol_b          nrow:     59 ncol:     59 nnz:        271
-c=symbfact(A):             0.0001     0.0000  speedup     3.75 lnz 394
-R=symbfact(A):             0.0002     0.0001  speedup     2.52
-c=symbfact(A'):            0.0002     0.0000  speedup     6.14 lnz 269
-R=symbfact(A'):            0.0002     0.0001  speedup     2.78
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.19 lnz 468
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.25
-
- 102: HB/can_61            nrow:     61 ncol:     61 nnz:        557
-c=symbfact(A):             0.0001     0.0000  speedup     3.50 lnz 361
-R=symbfact(A):             0.0002     0.0001  speedup     2.07
-c=symbfact(A'):            0.0002     0.0000  speedup     3.92 lnz 361
-R=symbfact(A'):            0.0002     0.0001  speedup     2.54
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.84 lnz 966
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.09
-
- 103: HB/can_62            nrow:     62 ncol:     62 nnz:        218
-c=symbfact(A):             0.0001     0.0000  speedup     3.87 lnz 184
-R=symbfact(A):             0.0002     0.0001  speedup     2.64
-c=symbfact(A'):            0.0001     0.0000  speedup     4.13 lnz 184
-R=symbfact(A'):            0.0001     0.0000  speedup     3.19
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.19 lnz 358
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.74
-
- 293: Bai/bfwa62           nrow:     62 ncol:     62 nnz:        450
-c=symbfact(A):             0.0001     0.0000  speedup     3.43 lnz 317
-R=symbfact(A):             0.0002     0.0001  speedup     3.02
-c=symbfact(A'):            0.0001     0.0000  speedup     3.97 lnz 327
-R=symbfact(A'):            0.0002     0.0001  speedup     3.00
-c=symbfact(A,'col'):       0.0002     0.0000  speedup     3.57 lnz 743
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.24
-
- 296: Bai/bfwb62           nrow:     62 ncol:     62 nnz:        342
-c=symbfact(A):             0.0001     0.0000  speedup     3.64 lnz 288
-R=symbfact(A):             0.0002     0.0001  speedup     2.98
-c=symbfact(A'):            0.0001     0.0000  speedup     4.00 lnz 288
-R=symbfact(A'):            0.0002     0.0001  speedup     2.62
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.72 lnz 589
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.64
-
-1487: Pajek/GD95_c         nrow:     62 ncol:     62 nnz:        287
-c=symbfact(A):             0.0002     0.0000  speedup     4.67 lnz 234
-R=symbfact(A):             0.0002     0.0001  speedup     3.27
-c=symbfact(A'):            0.0001     0.0000  speedup     4.03 lnz 234
-R=symbfact(A'):            0.0002     0.0001  speedup     3.13
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.05 lnz 598
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.49
-
-1759: Meszaros/refine      nrow:     29 ncol:     62 nnz:        153
-c=symbfact(A,'col'):       0.0002     0.0000  speedup     6.03 lnz 628
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.74
-
-1742: Meszaros/p0040       nrow:     23 ncol:     63 nnz:        133
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.71 lnz 515
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.71
-
-1498: Pajek/GD99_b         nrow:     64 ncol:     64 nnz:        252
-c=symbfact(A):             0.0001     0.0000  speedup     3.75 lnz 461
-R=symbfact(A):             0.0002     0.0001  speedup     2.82
-c=symbfact(A'):            0.0002     0.0000  speedup     4.46 lnz 461
-R=symbfact(A'):            0.0002     0.0001  speedup     2.98
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.95 lnz 1001
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.81
-
-1490: Pajek/GD96_c         nrow:     65 ncol:     65 nnz:        250
-c=symbfact(A):             0.0001     0.0000  speedup     3.69 lnz 341
-R=symbfact(A):             0.0002     0.0001  speedup     3.00
-c=symbfact(A'):            0.0001     0.0000  speedup     4.06 lnz 341
-R=symbfact(A'):            0.0002     0.0001  speedup     3.00
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.00 lnz 626
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.16
-
-  24: HB/bcsstk02          nrow:     66 ncol:     66 nnz:       4356
-c=symbfact(A):             0.0002     0.0001  speedup     2.47 lnz 2211
-R=symbfact(A):             0.0934     0.0002  speedup   411.51
-c=symbfact(A'):            0.0004     0.0001  speedup     4.48 lnz 2211
-R=symbfact(A'):            0.0004     0.0002  speedup     2.47
-c=symbfact(A,'col'):       0.0002     0.0001  speedup     2.09 lnz 2211
-R=symbfact(A,'col'):       0.0010     0.0008  speedup     1.27
-
-  57: HB/bcsstm02          nrow:     66 ncol:     66 nnz:         66
-c=symbfact(A):             0.0001     0.0000  speedup     4.82 lnz 66
-R=symbfact(A):             0.0001     0.0000  speedup     3.57
-c=symbfact(A'):            0.0001     0.0000  speedup     4.92 lnz 66
-R=symbfact(A'):            0.0001     0.0001  speedup     1.07
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.96 lnz 66
-R=symbfact(A,'col'):       0.0001     0.0000  speedup     3.60
-
- 132: HB/dwt_66            nrow:     66 ncol:     66 nnz:        320
-c=symbfact(A):             0.0001     0.0000  speedup     4.11 lnz 193
-R=symbfact(A):             0.0002     0.0000  speedup     3.59
-c=symbfact(A'):            0.0001     0.0000  speedup     4.77 lnz 193
-R=symbfact(A'):            0.0002     0.0001  speedup     2.96
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.17 lnz 321
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.89
-
- 883: Pothen/sphere2       nrow:     66 ncol:     66 nnz:        450
-c=symbfact(A):             0.0001     0.0000  speedup     3.44 lnz 682
-R=symbfact(A):             0.0002     0.0001  speedup     2.76
-c=symbfact(A'):            0.0002     0.0000  speedup     4.63 lnz 682
-R=symbfact(A'):            0.0002     0.0001  speedup     2.82
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.91 lnz 1368
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     1.89
-
- 262: HB/west0067          nrow:     67 ncol:     67 nnz:        294
-c=symbfact(A):             0.0001     0.0000  speedup     3.56 lnz 701
-R=symbfact(A):             0.0002     0.0001  speedup     2.56
-c=symbfact(A'):            0.0001     0.0000  speedup     4.11 lnz 569
-R=symbfact(A'):            0.0002     0.0001  speedup     2.80
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.83 lnz 872
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.36
-
- 636: LPnetlib/lp_kb2      nrow:     43 ncol:     68 nnz:        313
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.00 lnz 589
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.39
-
- 133: HB/dwt_72            nrow:     72 ncol:     72 nnz:        222
-c=symbfact(A):             0.0001     0.0000  speedup     4.00 lnz 184
-R=symbfact(A):             0.0002     0.0001  speedup     2.78
-c=symbfact(A'):            0.0001     0.0000  speedup     4.35 lnz 184
-R=symbfact(A'):            0.0002     0.0001  speedup     3.12
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.14 lnz 329
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.76
-
-1501: Pajek/GlossGT        nrow:     72 ncol:     72 nnz:        122
-c=symbfact(A):             0.0001     0.0000  speedup     3.66 lnz 219
-R=symbfact(A):             0.0002     0.0001  speedup     3.09
-c=symbfact(A'):            0.0001     0.0000  speedup     3.32 lnz 96
-R=symbfact(A'):            0.0001     0.0000  speedup     3.44
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.36 lnz 147
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     3.06
-
- 106: HB/can_73            nrow:     73 ncol:     73 nnz:        377
-c=symbfact(A):             0.0001     0.0000  speedup     3.62 lnz 392
-R=symbfact(A):             0.0002     0.0001  speedup     2.60
-c=symbfact(A'):            0.0002     0.0000  speedup     4.21 lnz 392
-R=symbfact(A'):            0.0002     0.0001  speedup     2.73
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.90 lnz 1438
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.05
-
-1486: Pajek/GD95_b         nrow:     73 ncol:     73 nnz:         96
-c=symbfact(A):             0.0001     0.0000  speedup     4.04 lnz 105
-R=symbfact(A):             0.0002     0.0000  speedup     3.29
-c=symbfact(A'):            0.0001     0.0000  speedup     4.00 lnz 147
-R=symbfact(A'):            0.0002     0.0000  speedup     3.30
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.41 lnz 476
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.76
-
- 666: LPnetlib/lp_sc50a    nrow:     50 ncol:     78 nnz:        160
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.08 lnz 332
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.62
-
- 667: LPnetlib/lp_sc50b    nrow:     50 ncol:     78 nnz:        148
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.59 lnz 316
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.70
-
- 253: HB/steam3            nrow:     80 ncol:     80 nnz:        314
-c=symbfact(A):             0.0001     0.0000  speedup     4.00 lnz 208
-R=symbfact(A):             0.0002     0.0001  speedup     3.20
-c=symbfact(A'):            0.0001     0.0000  speedup     4.09 lnz 205
-R=symbfact(A'):            0.0002     0.0001  speedup     3.20
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.11 lnz 424
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.49
-
-1482: Pajek/GD02_b         nrow:     80 ncol:     80 nnz:        232
-c=symbfact(A):             0.0001     0.0000  speedup     3.56 lnz 326
-R=symbfact(A):             0.0002     0.0001  speedup     2.88
-c=symbfact(A'):            0.0002     0.0000  speedup     4.31 lnz 317
-R=symbfact(A'):            0.0002     0.0001  speedup     2.93
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.88 lnz 497
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.53
-
-1492: Pajek/GD97_a         nrow:     84 ncol:     84 nnz:        332
-c=symbfact(A):             0.0001     0.0000  speedup     3.41 lnz 677
-R=symbfact(A):             0.0002     0.0001  speedup     2.60
-c=symbfact(A'):            0.0002     0.0000  speedup     3.87 lnz 677
-R=symbfact(A'):            0.0002     0.0001  speedup     2.75
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.71 lnz 1608
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.29
-
-  11: HB/ash85             nrow:     85 ncol:     85 nnz:        523
-c=symbfact(A):             0.0001     0.0000  speedup     3.26 lnz 505
-R=symbfact(A):             0.0002     0.0001  speedup     2.73
-c=symbfact(A'):            0.0002     0.0000  speedup     3.74 lnz 505
-R=symbfact(A'):            0.0002     0.0001  speedup     2.71
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.59 lnz 1109
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.13
-
-1519: Pajek/Sandi_authors  nrow:     86 ncol:     86 nnz:        248
-c=symbfact(A):             0.0001     0.0000  speedup     3.46 lnz 221
-R=symbfact(A):             0.0002     0.0001  speedup     2.37
-c=symbfact(A'):            0.0001     0.0000  speedup     3.94 lnz 221
-R=symbfact(A'):            0.0002     0.0001  speedup     2.52
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.95 lnz 533
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.43
-
- 136: HB/dwt_87            nrow:     87 ncol:     87 nnz:        541
-c=symbfact(A):             0.0001     0.0000  speedup     3.37 lnz 414
-R=symbfact(A):             0.0002     0.0001  speedup     2.64
-c=symbfact(A'):            0.0002     0.0000  speedup     4.42 lnz 414
-R=symbfact(A'):            0.0002     0.0001  speedup     2.46
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.65 lnz 921
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.08
-
- 462: Grund/d_dyn          nrow:     87 ncol:     87 nnz:        230
-c=symbfact(A):             0.0001     0.0000  speedup     3.33 lnz 442
-R=symbfact(A):             0.0002     0.0001  speedup     2.74
-c=symbfact(A'):            0.0001     0.0000  speedup     3.84 lnz 450
-R=symbfact(A'):            0.0002     0.0001  speedup     2.85
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.81 lnz 432
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.01
-
- 463: Grund/d_dyn1         nrow:     87 ncol:     87 nnz:        232
-c=symbfact(A):             0.0001     0.0000  speedup     3.43 lnz 476
-R=symbfact(A):             0.0002     0.0001  speedup     2.64
-c=symbfact(A'):            0.0001     0.0000  speedup     3.74 lnz 441
-R=symbfact(A'):            0.0002     0.0001  speedup     2.38
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.74 lnz 439
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     1.80
-
- 731: LPnetlib/lpi_woodinfe nrow:     35 ncol:     89 nnz:        140
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.11 lnz 402
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.58
-
-1641: Bai/tols90           nrow:     90 ncol:     90 nnz:       1746
-c=symbfact(A):             0.0001     0.0000  speedup     3.33 lnz 315
-R=symbfact(A):             0.0002     0.0001  speedup     2.75
-c=symbfact(A'):            0.0002     0.0001  speedup     2.96 lnz 1539
-R=symbfact(A'):            0.0003     0.0001  speedup     2.25
-c=symbfact(A,'col'):       0.0002     0.0001  speedup     2.33 lnz 4095
-R=symbfact(A,'col'):       0.0007     0.0005  speedup     1.46
-
- 907: vanHeukelum/cage6    nrow:     93 ncol:     93 nnz:        785
-c=symbfact(A):             0.0001     0.0000  speedup     3.07 lnz 1170
-R=symbfact(A):             0.0002     0.0001  speedup     2.27
-c=symbfact(A'):            0.0002     0.0000  speedup     3.65 lnz 1170
-R=symbfact(A'):            0.0002     0.0001  speedup     2.42
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.34 lnz 2665
-R=symbfact(A,'col'):       0.0003     0.0002  speedup     1.82
-
- 108: HB/can_96            nrow:     96 ncol:     96 nnz:        768
-c=symbfact(A):             0.0002     0.0000  speedup     3.42 lnz 984
-R=symbfact(A):             0.0002     0.0001  speedup     2.26
-c=symbfact(A'):            0.0002     0.0001  speedup     1.20 lnz 984
-R=symbfact(A'):            0.0002     0.0001  speedup     2.57
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.46 lnz 2620
-R=symbfact(A,'col'):       0.0003     0.0002  speedup     1.78
-
- 220: HB/nos4              nrow:    100 ncol:    100 nnz:        594
-c=symbfact(A):             0.0001     0.0000  speedup     3.02 lnz 632
-R=symbfact(A):             0.0002     0.0001  speedup     2.39
-c=symbfact(A'):            0.0002     0.0000  speedup     3.50 lnz 632
-R=symbfact(A'):            0.0002     0.0001  speedup     2.59
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.53 lnz 1414
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.05
-
- 318: Bai/olm100           nrow:    100 ncol:    100 nnz:        396
-c=symbfact(A):             0.0001     0.0000  speedup     3.67 lnz 247
-R=symbfact(A):             0.0002     0.0001  speedup     3.04
-c=symbfact(A'):            0.0001     0.0000  speedup     4.15 lnz 249
-R=symbfact(A'):            0.0002     0.0001  speedup     3.18
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.95 lnz 538
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.10
-
- 337: Bai/tub100           nrow:    100 ncol:    100 nnz:        396
-c=symbfact(A):             0.0001     0.0000  speedup     3.73 lnz 297
-R=symbfact(A):             0.0002     0.0001  speedup     2.55
-c=symbfact(A'):            0.0001     0.0000  speedup     4.11 lnz 297
-R=symbfact(A'):            0.0002     0.0001  speedup     3.05
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.93 lnz 490
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.55
-
-1326: Morandini/rotor1     nrow:    100 ncol:    100 nnz:        708
-c=symbfact(A):             0.0001     0.0000  speedup     3.02 lnz 551
-R=symbfact(A):             0.0002     0.0001  speedup     2.44
-c=symbfact(A'):            0.0002     0.0000  speedup     4.18 lnz 714
-R=symbfact(A'):            0.0002     0.0001  speedup     2.52
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.41 lnz 2049
-R=symbfact(A,'col'):       0.0003     0.0002  speedup     1.76
-
-1484: Pajek/GD06_theory    nrow:    101 ncol:    101 nnz:        380
-c=symbfact(A):             0.0001     0.0000  speedup     3.61 lnz 336
-R=symbfact(A):             0.0002     0.0001  speedup     2.89
-c=symbfact(A'):            0.0001     0.0000  speedup     3.94 lnz 336
-R=symbfact(A'):            0.0002     0.0001  speedup     2.56
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.75 lnz 3401
-R=symbfact(A,'col'):       0.0003     0.0001  speedup     1.99
-
- 861: MathWorks/pivtol     nrow:    102 ncol:    102 nnz:        306
-c=symbfact(A):             0.0001     0.0000  speedup     3.93 lnz 302
-R=symbfact(A):             0.0002     0.0001  speedup     2.57
-c=symbfact(A'):            0.0001     0.0000  speedup     4.12 lnz 303
-R=symbfact(A'):            0.0002     0.0001  speedup     3.00
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.03 lnz 500
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.62
-
- 306: Bai/ck104            nrow:    104 ncol:    104 nnz:        992
-c=symbfact(A):             0.0001     0.0000  speedup     3.11 lnz 548
-R=symbfact(A):             0.0002     0.0001  speedup     2.61
-c=symbfact(A'):            0.0002     0.0000  speedup     3.71 lnz 548
-R=symbfact(A'):            0.0002     0.0001  speedup     3.12
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.48 lnz 912
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     1.89
-
-1499: Pajek/GD99_c         nrow:    105 ncol:    105 nnz:        149
-c=symbfact(A):             0.0002     0.0000  speedup     5.75 lnz 166
-R=symbfact(A):             0.0002     0.0001  speedup     3.15
-c=symbfact(A'):            0.0001     0.0000  speedup     3.76 lnz 221
-R=symbfact(A'):            0.0002     0.0001  speedup     2.61
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.08 lnz 231
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.83
-
- 721: LPnetlib/lpi_klein1  nrow:     54 ncol:    108 nnz:        750
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.35 lnz 2132
-R=symbfact(A,'col'):       0.0003     0.0002  speedup     1.82
-
-1489: Pajek/GD96_b         nrow:    111 ncol:    111 nnz:        193
-c=symbfact(A):             0.0001     0.0000  speedup     3.49 lnz 303
-R=symbfact(A):             0.0003     0.0001  speedup     4.68
-c=symbfact(A'):            0.0001     0.0000  speedup     4.45 lnz 132
-R=symbfact(A'):            0.0001     0.0001  speedup     2.68
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.14 lnz 168
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.83
-
-  25: HB/bcsstk03          nrow:    112 ncol:    112 nnz:        640
-c=symbfact(A):             0.0002     0.0000  speedup     4.18 lnz 384
-R=symbfact(A):             0.0002     0.0001  speedup     2.46
-c=symbfact(A'):            0.0002     0.0000  speedup     3.72 lnz 384
-R=symbfact(A'):            0.0002     0.0001  speedup     2.88
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.65 lnz 592
-R=symbfact(A,'col'):       0.0002     0.0001  speedup     2.13
-
-  58: HB/bcsstm03          nrow:    112 ncol:    112 nnz:         72
-c=symbfact(A):             0.0001     0.0000  speedup     4.19 lnz 112
-R=symbfact(A):             0.0002     0.0000  speedup     3.40
-c=symbfact(A'):            0.0001     0.0000  speedup     4.86 lnz 112
-R=symbfact(A'):            0.0001     0.0000  speedup     3.31
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     3.52 lnz 112
-R=symbfact(A,'col'):       0.0002     0.0000  speedup     3.23
-
-1497: Pajek/GD98_c         nrow:    112 ncol:    112 nnz:        336
-c=symbfact(A):             0.0001     0.0000  speedup     3.12 lnz 967
-R=symbfact(A):             0.0002     0.0001  speedup     2.43
-c=symbfact(A'):            0.0002     0.0000  speedup     3.58 lnz 967
-R=symbfact(A'):            0.0002     0.0001  speedup     2.43
-c=symbfact(A,'col'):       0.0001     0.0000  speedup     2.63 lnz 2064
-R=symbfact(A,'col'):       0.0003     0.0001  speedup     2.16
-
- 158: HB/gent113           nrow:    113 ncol:    113 nnz:        655
-c=symbfact(A):             0.0001     0.0000  speedup     2.94 lnz 791
-R=symbfact(A):             0.0002     0.0001  speedup     2.33
-c=symbfact(A'):            0.0002     0.0000  speedup     3.73 lnz 643
-R=symbfact(A'):            0.0002     0.0001  speedup     2.56
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.36 lnz 1433
-R=symbfact(A,'col'):       0.0003     0.0001  speedup     2.06
-
- 603: LPnetlib/lp_blend    nrow:     74 ncol:    114 nnz:        522
-c=symbfact(A,'col'):       0.0001     0.0001  speedup     2.57 lnz 1459
-R=symbfact(A,'col'):       0.0002     0.0002  speedup     1.14
-test15 passed
-=================================================================
-test16: test cholmod2 on a large matrix
-
-Prob = 
-
-         A: [9000x9000 double]
-      name: 'ND/nd3k'
-     title: 'ND problem set, matrix nd3k'
-        id: 936
-      date: '2003'
-    author: 'author unknown'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-time 17.5518
-test16 passed
-=================================================================
-test17: test lchol on a few large matrices
-
-Prob = 
-
-     title: 'S.Norris, Univ. Auckland. FEM, Laplace eqn 2D 100x100 mesh'
-         A: [9604x9604 double]
-      name: 'Norris/fv1'
-        id: 887
-      date: '2003'
-    author: 'S. Norris'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-
-ans =
-
-    3.4748
-
-
-Prob = 
-
-         A: [9000x9000 double]
-      name: 'ND/nd3k'
-     title: 'ND problem set, matrix nd3k'
-        id: 936
-      date: '2003'
-    author: 'author unknown'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-
-ans =
-
-   30.1030
-
-
-Prob = 
-
-     title: 'S.Norris, Univ. Auckland. FEM, Laplace eqn 2D 100x100 mesh'
-         A: [9604x9604 double]
-      name: 'Norris/fv1'
-        id: 887
-      date: '2003'
-    author: 'S. Norris'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-
-ans =
-
-    3.4748
-
-=================================================================
-test18: test cholmod2 on a few large matrices
-
-Prob = 
-
-     title: 'S.Norris, Univ. Auckland. FEM, Laplace eqn 2D 100x100 mesh'
-         A: [9604x9604 double]
-      name: 'Norris/fv1'
-        id: 887
-      date: '2003'
-    author: 'S. Norris'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-
-ans =
-
-   4.9310e-12
-
-
-Prob = 
-
-         A: [9000x9000 double]
-      name: 'ND/nd3k'
-     title: 'ND problem set, matrix nd3k'
-        id: 936
-      date: '2003'
-    author: 'author unknown'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-
-ans =
-
-   1.6330e-05
-
-
-Prob = 
-
-     title: 'S.Norris, Univ. Auckland. FEM, Laplace eqn 2D 100x100 mesh'
-         A: [9604x9604 double]
-      name: 'Norris/fv1'
-        id: 887
-      date: '2003'
-    author: 'S. Norris'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-
-ans =
-
-   4.9453e-12
-
-test18 passed
-=================================================================
-test19: look for NaN's from lchol (caused by Intel MKL 7.x bug)
-
-Prob = 
-
-         A: [9000x9000 double]
-      name: 'ND/nd3k'
-     title: 'ND problem set, matrix nd3k'
-        id: 936
-      date: '2003'
-    author: 'author unknown'
-        ed: 'T. Davis'
-      kind: '2D/3D problem'
-
-mflop rate:  1287.30
-test19 passed; you have a NaN-free BLAS (must not be MKL 7.x...)
-=================================================================
-test20: test symbfact2, cholmod2, and lu on a few large matrices
-
-Prob = 
-
-     title: 'STRUCTURE FROM NASA LANGLEY, ACCURACY PROBLEM ON Y-MP'
-         A: [16146x16146 double]
-         b: [16146x1 double]
-      name: 'Simon/olafu'
-        id: 813
-      date: '1993'
-    author: 'H. Simon'
-        ed: 'H. Simon'
-      kind: 'structural problem'
-
-lnz 3095636 unz 3095636 nnz(L+U) 6175126 fl 1.13063e+09 gflop 1.84307
- t 0.613446 err 5.225120e-04
-
-Prob = 
-
-     title: 'BUCKLING PROBLEM FOR CONTAINER MODEL, ARTHUR RAEFSKY, CENTRIC ENG.'
-         A: [19779x19779 double]
-     Zeros: [19779x19779 double]
-         b: [19779x1 double]
-      name: 'Simon/raefsky4'
-        id: 817
-      date: '1993'
-    author: 'A. Raefsky'
-        ed: 'H. Simon'
-      kind: 'structural problem'
-
-lnz 7304797 unz 7304797 nnz(L+U) 14589815 fl 5.30769e+09 gflop 4.02389
- t 1.31904 err 6.031010e-03
-=================================================================
-test21: test cholmod2 on diagonal or ill-conditioned matrices
-
-Prob = 
-
-     title: 'SYMMETRIC MASS      MATRIX - TEXTILE LOOM FRAME'
-         A: [138x138 double]
-      name: 'HB/bcsstm22'
-        id: 72
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz: 138
-MATLAB  resid 0.0e+00 err 0.0e+00
-CHOLMOD resid 1.1e-17 err 1.3e-14
-condest 9.4e+02
-
-Prob = 
-
-     title: 'MAGNETO-HYDRO-DYNAMICS ALFVEN SPECTRAL PROBLEM'
-         A: [416x416 double]
-      name: 'Bai/mhdb416'
-        id: 315
-      date: '1994'
-    author: 'A. Booten, M. Kooper, H. van der Vorst, S. Poedts, J. Goedbloed'
-        ed: 'Z. Bai, D. Day, J. Demmel, J. Dongarra'
-      kind: 'electromagnetics problem'
-
-nnz: 2312
-MATLAB  resid 2.3e-18 err 2.8e-12
-CHOLMOD resid 2.3e-18 err 2.8e-12
-condest 5.1e+09
-
-Prob = 
-
-     title: 'SYMMETRIC MASS MATRIX, SQUARE PLATE CLAMPED'
-         A: [1083x1083 double]
-      name: 'HB/bcsstm09'
-        id: 64
-      date: '1982'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz: 1083
-MATLAB  resid 0.0e+00 err 0.0e+00
-CHOLMOD resid 5.2e-17 err 2.4e-13
-condest 1.0e+04
-
-Prob = 
-
-     title: 'SYMMETRIC MASS      MATRIX - CLAMPED SQUARE PLATE'
-         A: [3600x3600 double]
-      name: 'HB/bcsstm21'
-        id: 71
-      date: '1984'
-    author: 'J. Lewis'
-        ed: 'I. Duff, R. Grimes, J. Lewis'
-      kind: 'structural problem'
-
-nnz: 3600
-MATLAB  resid 0.0e+00 err 0.0e+00
-CHOLMOD resid 2.5e-18 err 2.7e-13
-condest 2.4e+01
-
-Prob = 
-
-      name: 'Oberwolfach/t2dal_e'
-     title: 'Oberwolfach: micropyros thruster, E matrix'
-         A: [4257x4257 double]
-        id: 1207
-      kind: 'duplicate model reduction problem'
-      date: '2004'
-    author: 'E. Rudnyi'
-        ed: 'E. Rudnyi'
-
-nnz: 4257
-MATLAB  resid 0.0e+00 err 0.0e+00
-CHOLMOD resid 1.3e-17 err 3.9e-13
-condest 3.8e+07
-
-Prob = 
-
-     title: 'FEM CRYSTAL FREE VIBRATION MASS MATRIX'
-         A: [13965x13965 double]
-      name: 'Boeing/crystm02'
-        id: 354
-      date: '1995'
-    author: 'R. Grimes'
-        ed: 'T. Davis'
-      kind: 'materials problem'
-
-nnz: 322905
-MATLAB  resid 9.5e-17 err 2.3e-11
-CHOLMOD resid 9.5e-17 err 2.3e-11
-condest 4.5e+02
-
-Prob = 
-
-      name: 'Oberwolfach/t3dl_e'
-     title: 'Oberwolfach: micropyros thruster, E matrix'
-         A: [20360x20360 double]
-        id: 1211
-      kind: 'duplicate model reduction problem'
-      date: '2004'
-    author: 'E. Rudnyi'
-        ed: 'E. Rudnyi'
-
-nnz: 20360
-MATLAB  resid 0.0e+00 err 0.0e+00
-CHOLMOD resid 3.2e-17 err 2.0e-12
-condest 6.0e+03
-=================================================================
-test22: test pos.def and indef. matrices
-test22: chol and chol2 are repeated so each take >= 0.1 sec
-
-==================  904: Problem: vanHeukelum/cage3  m: 5 n: 5 nnz: 19 19
-rcond:     4.25263103233630423983e-01
-p:      0      0 MATLAB:     0.0003 CHOLMOD:     0.0003 speedup   1.08 err:      0      0
-
-==================  449: Problem: Grund/b1_ss  m: 7 n: 7 nnz: 15 24
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.76 err:      0      0
-
-================== 1710: Problem: Meszaros/farm  m: 7 n: 17 nnz: 41 39
-rcond:     2.52948218857096309570e-03
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.88 err:      0      0
-
-==================  715: Problem: LPnetlib/lpi_galenet  m: 8 n: 14 nnz: 22 24
-rcond:     8.16496580927726145482e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.75 err:      0      0
-
-================== 1817: Problem: Meszaros/kleemin  m: 8 n: 16 nnz: 44 64
-rcond:     9.94982371447397095920e-02
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.91 err:      0      0
-
-==================  185: Problem: HB/jgl009  m: 9 n: 9 nnz: 50 72
-rcond:     0.00000000000000000000e+00
-p:      3      3 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.78 err:      0      0
-
-==================  719: Problem: LPnetlib/lpi_itest2  m: 9 n: 13 nnz: 26 51
-rcond:     4.47109297966382157608e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.73 err:      0      0
-
-==================  905: Problem: vanHeukelum/cage4  m: 9 n: 9 nnz: 49 49
-rcond:     4.78114120908413264832e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.92 err:      0      0
-
-==================  238: Problem: HB/rgg010  m: 10 n: 10 nnz: 76 100
-rcond:     0.00000000000000000000e+00
-p:      3      3 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.90 err:      0      0
-
-================== 1524: Problem: Pajek/Stranke94  m: 10 n: 10 nnz: 90 90
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.76 err:      0      0
-
-==================  186: Problem: HB/jgl011  m: 11 n: 11 nnz: 76 108
-rcond:     0.00000000000000000000e+00
-p:      6      6 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.80 err:      0      0
-
-==================  720: Problem: LPnetlib/lpi_itest6  m: 11 n: 17 nnz: 29 51
-rcond:     9.45751723210471600956e-03
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.87 err:      0      0
-
-================== 1525: Problem: Pajek/Tina_AskCal  m: 11 n: 11 nnz: 29 50
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.91 err:      0      0
-
-================== 1526: Problem: Pajek/Tina_AskCog  m: 11 n: 11 nnz: 36 54
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.79 err:      0      0
-
-================== 1527: Problem: Pajek/Tina_DisCal  m: 11 n: 11 nnz: 41 64
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.84 err:      0      0
-
-================== 1528: Problem: Pajek/Tina_DisCog  m: 11 n: 11 nnz: 48 72
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.85 err:      0      0
-
-================== 1755: Problem: Meszaros/problem  m: 12 n: 46 nnz: 86 42
-rcond:     5.37847998878130950651e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   1.08 err:      0      0
-
-================== 1440: Problem: Oberwolfach/LFAT5  m: 14 n: 14 nnz: 46 46
-rcond:     1.55639238128393175712e-04
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.76 err:      0      0
-
-================== 1741: Problem: Meszaros/p0033  m: 15 n: 48 nnz: 113 95
-rcond:     1.48172008456599587148e-03
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.78 err:      0      0
-
-================== 1438: Problem: Oberwolfach/LF10  m: 18 n: 18 nnz: 82 82
-rcond:     5.27046276694730000262e-03
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.91 err:      0      0
-
-================== 1479: Problem: Pajek/GD01_b  m: 18 n: 18 nnz: 37 54
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.92 err:      0      0
-
-==================  706: Problem: LPnetlib/lpi_bgprtr  m: 20 n: 40 nnz: 70 96
-rcond:     1.25918385245936273811e-03
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.76 err:      0      0
-
-================== 1481: Problem: Pajek/GD02_a  m: 23 n: 23 nnz: 87 118
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.78 err:      0      0
-
-================== 1516: Problem: Pajek/Ragusa18  m: 23 n: 23 nnz: 64 105
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.93 err:      0      0
-
-================== 1742: Problem: Meszaros/p0040  m: 23 n: 63 nnz: 133 163
-rcond:     2.52390925692451309308e-04
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.91 err:      0      0
-
-==================   97: Problem: HB/can_24  m: 24 n: 24 nnz: 160 160
-rcond:     0.00000000000000000000e+00
-p:      2      2 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.82 err:      0      0
-
-==================  624: Problem: LPnetlib/lp_fit1d  m: 24 n: 1049 nnz: 13427 558
-rcond:     7.36202451773845909129e-04
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.98 err:      0      0
-
-================== 1515: Problem: Pajek/Ragusa16  m: 24 n: 24 nnz: 81 126
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.92 err:      0      0
-
-==================  626: Problem: LPnetlib/lp_fit2d  m: 25 n: 10524 nnz: 129042 617
-rcond:     2.18529247214663312551e-03
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.95 err:      0      0
-
-================== 1177: Problem: HB/lap_25  m: 25 n: 25 nnz: 169 169
-rcond:     0.00000000000000000000e+00
-p:      2      2 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.80 err:      0      0
-
-==================  436: Problem: FIDAP/ex5  m: 27 n: 27 nnz: 279 279
-rcond:     8.27464239340425602477e-04
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.86 err:      0      0
-
-==================  597: Problem: LPnetlib/lp_afiro  m: 27 n: 51 nnz: 102 153
-rcond:     1.72386001683099310267e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.83 err:      0      0
-
-================== 1759: Problem: Meszaros/refine  m: 29 n: 62 nnz: 153 217
-rcond:     1.81514831282913007005e-02
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.91 err:      0      0
-
-==================  232: Problem: HB/pores_1  m: 30 n: 30 nnz: 180 236
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.91 err:      0      0
-
-==================  168: Problem: HB/ibm32  m: 32 n: 32 nnz: 126 212
-rcond:     0.00000000000000000000e+00
-p:     18     18 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.84 err:      0      0
-
-================== 1199: Problem: Hamrle/Hamrle1  m: 32 n: 32 nnz: 98 181
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.79 err:      0      0
-
-================== 1480: Problem: Pajek/GD01_c  m: 33 n: 33 nnz: 135 270
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.92 err:      0      0
-
-==================  731: Problem: LPnetlib/lpi_woodinfe  m: 35 n: 89 nnz: 140 137
-rcond:     4.26401432711220829130e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.86 err:      0      0
-
-================== 1474: Problem: Pajek/football  m: 35 n: 35 nnz: 118 236
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.84 err:      0      0
-
-================== 1485: Problem: Pajek/GD95_a  m: 36 n: 36 nnz: 57 112
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.80 err:      0      0
-
-==================  906: Problem: vanHeukelum/cage5  m: 37 n: 37 nnz: 233 233
-rcond:     2.54392381006308010427e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.82 err:      0      0
-
-================== 1495: Problem: Pajek/GD98_a  m: 38 n: 38 nnz: 50 92
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.91 err:      0      0
-
-==================   13: Problem: HB/bcspwr01  m: 39 n: 39 nnz: 131 131
-rcond:     0.00000000000000000000e+00
-p:      2      2 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.83 err:      0      0
-
-==================  636: Problem: LPnetlib/lp_kb2  m: 43 n: 68 nnz: 313 847
-rcond:     4.57208742551626703965e-04
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.93 err:      0      0
-
-================== 1493: Problem: Pajek/GD97_b  m: 47 n: 47 nnz: 264 264
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.99 err:      0      0
-
-==================   23: Problem: HB/bcsstk01  m: 48 n: 48 nnz: 400 400
-rcond:     3.07546526042088742836e-03
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.88 err:      0      0
-
-==================   56: Problem: HB/bcsstm01  m: 48 n: 48 nnz: 24 24
-rcond:     0.00000000000000000000e+00
-p:      4      4 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.79 err:      0      0
-
-==================  872: Problem: Pothen/mesh1e1  m: 48 n: 48 nnz: 306 306
-rcond:     5.92447279051849906573e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   1.07 err:      0      0
-
-==================  873: Problem: Pothen/mesh1em1  m: 48 n: 48 nnz: 306 306
-rcond:     2.99182771005118530727e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.88 err:      0      0
-
-==================  874: Problem: Pothen/mesh1em6  m: 48 n: 48 nnz: 306 306
-rcond:     5.98061003584390182830e-01
-p:      0      0 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.88 err:      0      0
-test22: all tests passed
-=================================================================
-test22: test pos.def and indef. matrices
-testing matrices for which MATLAB and CHOLMOD differ
-test22: chol and chol2 are repeated so each take >= 0.1 sec
-
-==================  186: Problem: HB/jgl011  m: 11 n: 11 nnz: 76 108
-rcond:     0.00000000000000000000e+00
-p:      6      6 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.78 err:      0      0
-
-==================  109: Problem: HB/curtis54  m: 54 n: 54 nnz: 291 302
-rcond:     0.00000000000000000000e+00
-p:      4      4 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.96 err:      0      0
-
-==================  793: Problem: Qaplib/lp_nug05  m: 210 n: 225 nnz: 1050 4060
-rcond:     0.00000000000000000000e+00
-p:     75     75 MATLAB:     0.0015 CHOLMOD:     0.0014 speedup   1.12 err:      0      0
-
-==================  607: Problem: LPnetlib/lp_brandy  m: 220 n: 303 nnz: 2202 5275
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0004 CHOLMOD:     0.0003 speedup   1.18 err:      0      0
-
-==================  707: Problem: LPnetlib/lpi_box1  m: 231 n: 261 nnz: 651 1401
-rcond:     0.00000000000000000000e+00
-p:     22     22 MATLAB:     0.0003 CHOLMOD:     0.0002 speedup   1.80 err:      0      0
-
-==================  231: Problem: HB/plskz362  m: 362 n: 362 nnz: 1760 0
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0001 CHOLMOD:     0.0001 speedup   0.87 err:      0      0
-
-==================  794: Problem: Qaplib/lp_nug06  m: 372 n: 486 nnz: 2232 8724
-rcond:     0.00000000000000000000e+00
-p:    260    260 MATLAB:     0.0089 CHOLMOD:     0.1089 speedup   0.08 err:      0      0
-
-==================  673: Problem: LPnetlib/lp_scorpion  m: 388 n: 466 nnz: 1534 3814
-rcond:     0.00000000000000000000e+00
-p:     35     35 MATLAB:     0.0003 CHOLMOD:     0.0004 speedup   0.79 err:      0      0
-
-================== 1156: Problem: Sandia/oscil_dcop_45  m: 430 n: 430 nnz: 1544 1572
-rcond:     0.00000000000000000000e+00
-p:     31     31 MATLAB:     0.0002 CHOLMOD:     0.0002 speedup   0.90 err:      0      0
-
-==================  795: Problem: Qaplib/lp_nug07  m: 602 n: 931 nnz: 4214 16576
-rcond:     0.00000000000000000000e+00
-p:    218    218 MATLAB:     0.0171 CHOLMOD:     0.0170 speedup   1.01 err:      0      0
-
-==================  796: Problem: Qaplib/lp_nug08  m: 912 n: 1632 nnz: 7296 28816
-rcond:     0.00000000000000000000e+00
-p:    388    388 MATLAB:     0.1514 CHOLMOD:     0.0512 speedup   2.96 err:      0      0
-
-==================  260: Problem: HB/well1033  m: 1033 n: 320 nnz: 4732 182679
-rcond:     0.00000000000000000000e+00
-p:     15     15 MATLAB:     0.0148 CHOLMOD:     0.0149 speedup   0.99 err:      0      0
-
-==================  261: Problem: HB/well1850  m: 1850 n: 712 nnz: 8755 522902
-rcond:     0.00000000000000000000e+00
-p:      6      6 MATLAB:     0.0454 CHOLMOD:     0.0440 speedup   1.03 err:      0      0
-
-==================  230: Problem: HB/plsk1919  m: 1919 n: 1919 nnz: 9662 0
-rcond:     0.00000000000000000000e+00
-p:      1      1 MATLAB:     0.0003 CHOLMOD:     0.0003 speedup   0.92 err:      0      0
-
-==================  649: Problem: LPnetlib/lp_pds_02  m: 2953 n: 7716 nnz: 16571 23281
-rcond:     2.12687604726321055632e-08
-p:      0      0 MATLAB:     0.0140 CHOLMOD:     0.0144 speedup   0.97 err:      0      0
-
-==================  660: Problem: LPnetlib/lp_qap12  m: 3192 n: 8856 nnz: 38304 152376
-rcond:     0.00000000000000000000e+00
-p:   1424   1424 MATLAB:     0.9041 CHOLMOD:     1.2285 speedup   0.74 err:      0      0
-
-==================  609: Problem: LPnetlib/lp_cre_a  m: 3516 n: 7248 nnz: 18168 44866
-rcond:     0.00000000000000000000e+00
-p:   3407   3407 MATLAB:     0.0077 CHOLMOD:     0.0069 speedup   1.11 err:      0      0
-
-==================  619: Problem: LPnetlib/lp_dfl001  m: 6071 n: 12230 nnz: 35632 81917
-rcond:     0.00000000000000000000e+00
-p:   5652   5652 MATLAB:     1.0070 CHOLMOD:     1.3922 speedup   0.72 err:      0      0
-
-==================  661: Problem: LPnetlib/lp_qap15  m: 6330 n: 22275 nnz: 94950 378480
-rcond:     0.00000000000000000000e+00
-p:    617    617 MATLAB:     0.3764 CHOLMOD:     0.7196 speedup   0.52 err:      0      0
-
-==================  650: Problem: LPnetlib/lp_pds_06  m: 9881 n: 29351 nnz: 63220 88003
-rcond:     0.00000000000000000000e+00
-p:   9316   9316 MATLAB:     0.1965 CHOLMOD:     0.1951 speedup   1.01 err:      0      0
-
-==================  379: Problem: Cote/vibrobox  m: 12328 n: 12328 nnz: 301700 301700
-rcond:     0.00000000000000000000e+00
-p:  11561  11561 MATLAB:     0.6442 CHOLMOD:     0.6420 speedup   1.00 err:      0      0
-
-==================  638: Problem: LPnetlib/lp_ken_11  m: 14694 n: 21349 nnz: 49058 82454
-rcond:     0.00000000000000000000e+00
-p:  14626  14626 MATLAB:     0.0411 CHOLMOD:     0.0413 speedup   0.99 err:      0      0
-test22: all tests passed
-=================================================================
-test23: test chol & cholmod2 on the sparse matrix used in "bench"
-Using each method's internal fill-reducing ordering:
-MATLAB  x=A\b      time:   0.0467  resid:    6e-14
-CHOLMOD x=A\b      time:   0.0472  resid:    6e-14
-CHOLMOD speedup:     0.99
-
-S = A(p,p) where p is CHOLMOD's ordering:
-MATLAB  R=chol(S)  time:   0.0434  resid:    5e-14
-CHOLMOD L=lchol(S) time:   0.0363  resid:    5e-14
-CHOLMOD speedup:     1.20
-Warning: SYMMMD is obsolete and will be removed in a future version. Use SYMAMD instead.
-> In symmmd at 16
-  In test23 at 60
-  In cholmod_test at 131
-
-S = A(p,p) where p is MATLAB's ordering in x=A\b (symmmd):
-MATLAB  R=chol(S)  time:   0.0449  resid:    5e-14
-CHOLMOD L=lchol(S) time:   0.0369  resid:    5e-14
-CHOLMOD speedup:     1.22
-
-
-With no fill-reducing orderings:
-MATLAB  R=chol(A)  time:   0.1380  resid:    1e-13
-CHOLMOD L=lchol(A) time:   0.1098  resid:    1e-13
-CHOLMOD speedup:     1.26
-
-
-With no fill-reducing orderings (as used in "bench"):
-MATLAB  x=A\b      time:   0.0822  resid:    6e-14
-CHOLMOD x=A\b      time:   0.0899  resid:    8e-14
-CHOLMOD speedup:     0.91
-=================================================================
-test24: test sdmult
-test 24 passed, maxerr 0
-=================================================================
-test25: test sdmult on a large matrix
-
-Test matrix: 9000-by-9000, nnz 3279690
-
-A*X where X is 9000-by-k
-k:   0 time: MATLAB     0.00 CHOLMOD     0.00 speedup     0.90 err  0e+00  mflop: MATLAB      0.0 CHOLMOD      0.0
-k:   1 time: MATLAB     0.02 CHOLMOD     0.02 speedup     1.00 err  0e+00  mflop: MATLAB    402.6 CHOLMOD    403.3
-k:   2 time: MATLAB     0.02 CHOLMOD     0.02 speedup     0.72 err  0e+00  mflop: MATLAB    740.2 CHOLMOD    535.8
-k:   3 time: MATLAB     0.12 CHOLMOD     0.03 speedup     4.51 err  0e+00  mflop: MATLAB    163.9 CHOLMOD    739.9
-k:   4 time: MATLAB     0.02 CHOLMOD     0.16 speedup     0.15 err  0e+00  mflop: MATLAB   1132.3 CHOLMOD    165.1
-k:   5 time: MATLAB     0.04 CHOLMOD     0.18 speedup     0.23 err  0e+00  mflop: MATLAB    828.0 CHOLMOD    187.1
-k:   6 time: MATLAB     0.04 CHOLMOD     0.18 speedup     0.22 err  0e+00  mflop: MATLAB    960.9 CHOLMOD    213.6
-k:   7 time: MATLAB     0.14 CHOLMOD     0.09 speedup     1.68 err  0e+00  mflop: MATLAB    320.6 CHOLMOD    537.6
-k:   8 time: MATLAB     0.05 CHOLMOD     0.22 speedup     0.21 err  0e+00  mflop: MATLAB   1127.1 CHOLMOD    240.8
-k:   9 time: MATLAB     0.16 CHOLMOD     0.23 speedup     0.69 err  0e+00  mflop: MATLAB    363.5 CHOLMOD    251.4
-k:  10 time: MATLAB     0.16 CHOLMOD     0.24 speedup     0.68 err  0e+00  mflop: MATLAB    398.6 CHOLMOD    271.1
-k:  10 time: MATLAB     0.16 CHOLMOD     0.24 speedup     0.68 err  0e+00  mflop: MATLAB    398.1 CHOLMOD    270.3
-k:  20 time: MATLAB     0.32 CHOLMOD     0.59 speedup     0.53 err  0e+00  mflop: MATLAB    412.6 CHOLMOD    220.7
-k:  30 time: MATLAB     0.28 CHOLMOD     0.94 speedup     0.30 err  0e+00  mflop: MATLAB    696.3 CHOLMOD    210.1
-k:  40 time: MATLAB     0.43 CHOLMOD     1.19 speedup     0.37 err  0e+00  mflop: MATLAB    604.7 CHOLMOD    220.8
-k:  50 time: MATLAB     0.60 CHOLMOD     1.43 speedup     0.42 err  0e+00  mflop: MATLAB    549.5 CHOLMOD    229.5
-k: 100 time: MATLAB     1.08 CHOLMOD     2.97 speedup     0.36 err  0e+00  mflop: MATLAB    606.6 CHOLMOD    221.0
-k: 200 time: MATLAB     2.26 CHOLMOD     5.95 speedup     0.38 err  0e+00  mflop: MATLAB    579.4 CHOLMOD    220.6
-k: 300 time: MATLAB     3.55 CHOLMOD     8.80 speedup     0.40 err  0e+00  mflop: MATLAB    554.7 CHOLMOD    223.5
-k: 400 time: MATLAB     4.65 CHOLMOD    12.36 speedup     0.38 err  0e+00  mflop: MATLAB    564.5 CHOLMOD    212.3
-k: 500 time: MATLAB     5.81 CHOLMOD    14.75 speedup     0.39 err  0e+00  mflop: MATLAB    564.7 CHOLMOD    222.3
-
-For comparison, here is CHOLMOD's x=A\b time:
-CHOLMOD x=A\b time:    18.82 (b is n-by-1) resid  2e-05
-CHOLMOD x=A\b time:    22.40 (b is n-by-100) resid  2e-05
-CHOLMOD x=A\b time:    26.86 (b is n-by-200) resid  2e-05
-CHOLMOD x=A\b time:    29.62 (b is n-by-300) resid  2e-05
-CHOLMOD x=A\b time:    33.93 (b is n-by-400) resid  2e-05
-CHOLMOD x=A\b time:    38.16 (b is n-by-500) resid  2e-05
-
-MATLAB  x=A\b time:    24.45 (b is n-by-1) resid  1e-05
-test25 passed
-=================================================================
-test26: test logical full and sparse matrices
-test26 passed
-=================================================================
-test27: test nesdis
-# of components: 7
-size of root 32 out of 479 rows
-node    1 : parent    3 size    105 work 40598
-node    2 : parent    3 size     99 work 32753
-node    3 : parent    7 size     11 work 2584
-node    4 : parent    6 size    108 work 99359
-node    5 : parent    6 size    105 work 54811
-node    6 : parent    7 size     19 work 8846
-node    7 : parent    0 size     32 work 15983
-test27 passed
-=================================================================
-all tests passed
diff --git a/CHOLMOD/MATLAB/Test/dg.m b/CHOLMOD/MATLAB/Test/dg.m
index 433bdbd..e093eb7 100644
--- a/CHOLMOD/MATLAB/Test/dg.m
+++ b/CHOLMOD/MATLAB/Test/dg.m
@@ -5,7 +5,7 @@ function dg(A)
 %   dg(A)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 A = spones (A) ;
 [p cp cm] = nesdis (A, 'row') ;
@@ -22,7 +22,6 @@ end
 [ignore q] = sort (qmin) ;
 
 C = C (:,q) ;
-% figure (1)
 clf
 subplot (2,3,1) ; treeplot (cp)
 drawnow
@@ -66,7 +65,6 @@ drawnow
 % subplot (2,3,4) ; spy (E*E')
 % fprintf ('bisect: %d\n', length (find (s == 2))) ;
 
-% figure (2)
 % spy (C*C')
 % hold on
 % for j = cboundaries
diff --git a/CHOLMOD/MATLAB/Test/ltest.m b/CHOLMOD/MATLAB/Test/ltest.m
new file mode 100644
index 0000000..5bcab56
--- /dev/null
+++ b/CHOLMOD/MATLAB/Test/ltest.m
@@ -0,0 +1,70 @@
+function ltest
+%LTEST test lxbpattern
+% Example:
+%   ltest
+% See also cholmod_test, lxtest, ltest2
+
+% Copyright 2013, Timothy A. Davis, http://www.suitesparse.com
+
+rng ('default')
+index = UFget ;
+
+%{
+f = find (index.nrows == index.ncols & index.amd_lnz > 0) ;
+f = setdiff (f, 1425) ; % not really posdef
+[ignore i] = sort (index.amd_lnz (f)) ;
+f = f (i) ;
+%}
+
+f = [ 449 1440 185 56 238 1438 186 57 13 58 97 2203 14 59 72 1177 2204 60 ...
+      436 103 133 232 274 132 109 ] ;
+
+nmat = length (f) ;
+
+for k = 1:nmat
+    id = f (k) ;
+    Prob = UFget (id, index)
+    A = spones (Prob.A) ;
+    n = size (A,1) ;
+    A = A+A' ;
+    p = amd (A) ;
+    A = A (p,p) ;
+    [count, h, parent, post, L] = symbfact (A, 'sym', 'lower') ;
+    L = sparse (1:n, 1:n, count+1, n, n) - sprand (L) / n ;
+
+    % test lxbpattern
+    for i = 1:n
+        b = sparse (i, 1, rand(1), n, 1) ;
+
+        x1 = find (L\b) ;
+        x2 = lxbpattern (L, b) ;
+        s2 = sort (x2)' ;
+        if (~isequal (x1, s2))
+            error ('!') ;
+        end
+
+    end
+
+    for trial = 1:100
+        b = sprand (n, 1, trial/100) ;
+
+        x1 = find (L\b) ;
+        x2 = lxbpattern (L, b) ;
+        s2 = sort (x2)' ;
+        if (~isequal (x1, s2))
+            error ('!') ;
+        end
+
+    end
+
+    b = sparse (rand (n,1)) ;
+
+    x1 = find (L\b) ;
+    x2 = lxbpattern (L, b) ;
+    s2 = sort (x2)' ;
+    if (~isequal (x1, s2))
+        error ('!') ;
+    end
+end
+
+fprintf ('ltest: all tests passed\n') ;
diff --git a/CHOLMOD/MATLAB/Test/ltest2.m b/CHOLMOD/MATLAB/Test/ltest2.m
new file mode 100644
index 0000000..82ad140
--- /dev/null
+++ b/CHOLMOD/MATLAB/Test/ltest2.m
@@ -0,0 +1,112 @@
+function [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err)
+%LTEST2 test the lsubsolve mexFunction
+% Example:
+%   [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err)
+%
+% See also cholmod_test, ltest, ltest2
+
+% Copyright 2013, Timothy A. Davis, http://www.suitesparse.com
+
+if (~isreal (L))
+    b = b * (pi + 1i) ;
+end
+
+for sys = 0:8
+
+    %---------------------------------------------------------------------------
+    % solve with LDL' = A
+    %---------------------------------------------------------------------------
+
+    % solve for all of x
+    switch sys
+
+        case 0
+            x1 = P' * (L' \ (D \ (L \ (P * b)))) ;        % solve Ax = b
+
+        case 1
+            x1 =      (L' \ (D \ (L \ (    b)))) ;        % solve LDL'x = b
+
+        case 2
+            x1 =      (     (D \ (L \ (    b)))) ;        % solve LDx = b
+
+        case 3
+            x1 =      (L' \ (D \ (    (    b)))) ;        % solve DL'x = b
+            
+        case 4
+            x1 =      (     (    (L \ (    b)))) ;        % solve Lx = b
+
+        case 5
+            x1 =      (L' \ (    (    (    b)))) ;        % solve L'x = b
+
+        case 6
+            x1 =      (     (D \ (    (    b)))) ;        % solve Dx = b
+
+        case 7
+            x1 =      (     (    (    (P * b)))) ;        % x = Pb
+
+        case 8
+            x1 = P' * (     (    (    (    b)))) ;        % x = P'b
+    end
+
+    % solve only for entries in xset, using lsubsolve.
+    % xset contains the pattern of b, and the reach of b in the graph of L
+    kind = 1 ;  % LDL'
+    [x2 xset] = lsubsolve (LD, kind, p, b, sys) ;
+    xset = xset'' ;
+    spok (xset) ;
+    err = max (err, norm ((x1 - x2).*xset, 1) / norm (x1,1)) ;
+    if (err > 1e-12)
+        sys
+        warning ('LDL''!') ;
+        return
+    end
+
+    %---------------------------------------------------------------------------
+    % solve with L2*L2' = A
+    %---------------------------------------------------------------------------
+
+    % solve for all of x
+    switch sys
+
+        case 0
+            x1 = P' * (L2' \ (    (L2 \ (P * b)))) ;        % solve Ax = b
+
+        case 1
+            x1 =      (L2' \ (    (L2 \ (    b)))) ;        % solve L2L2'x = b
+
+        case 2
+            x1 =      (      (    (L2 \ (    b)))) ;        % solve L2x = b
+
+        case 3
+            x1 =      (L2' \ (    (     (    b)))) ;        % solve L2'x = b
+            
+        case 4
+            x1 =      (      (    (L2 \ (    b)))) ;        % solve L2x = b
+
+        case 5
+            x1 =      (L2' \ (    (     (    b)))) ;        % solve L2'x = b
+
+        case 6
+            x1 =      (      (    (     (    b)))) ;        % solve Dx = b
+
+        case 7
+            x1 =      (      (    (     (P * b)))) ;        % x = Pb
+
+        case 8
+            x1 = P' * (      (    (     (    b)))) ;        % x = P'b
+    end
+
+    % solve only for entries in xset, using lsubsolve.
+    % xset contains the pattern of b, and the reach of b in the graph of L2
+    kind = 0 ;  % L2*L2'
+    [x2 xset] = lsubsolve (L2, kind, p, b, sys) ;
+    xset = xset'' ;
+    spok (xset) ;
+    err = max (err, norm ((x1 - x2).*xset, 1) / norm (x1,1)) ;
+    if (err > 1e-12)
+        sys
+        warning ('LL''!') ;
+        return
+    end
+
+end
diff --git a/CHOLMOD/MATLAB/Test/lxtest.m b/CHOLMOD/MATLAB/Test/lxtest.m
new file mode 100644
index 0000000..a545729
--- /dev/null
+++ b/CHOLMOD/MATLAB/Test/lxtest.m
@@ -0,0 +1,82 @@
+function lxtest
+%LXTEST test the lsubsolve mexFunction
+% Example:
+%   lxtest
+% See also cholmod_test, ltest, ltest2
+
+% Copyright 2013, Timothy A. Davis, http://www.suitesparse.com
+
+rng ('default')
+index = UFget ;
+
+%{
+f = find (index.posdef & index.amd_lnz > 0) ;
+f = setdiff (f, 1425) ; % not really posdef
+[ignore i] = sort (index.amd_lnz (f)) ;
+f = f (i) ;
+%}
+
+f = [ 1440 1438 57 2203 72 2204 60 436 872 873 874 25 61 70 23 220 44 217 ...
+    69 63 64 315 2 66 76 ] ;
+
+nmat = length (f) ;
+
+for k = 1:nmat
+    id = f (k) ;
+    Prob = UFget (id, index)
+    A = Prob.A ;
+    n = size (A,1) ;
+    [LD gunk p] = ldlchol (A) ;
+    C = A (p,p) ;
+    [count h parent post Lpattern] = symbfact (C, 'sym', 'lower') ;
+    if (~isequal (Lpattern, spones (LD)))
+        error ('!') ;
+    end
+
+    P = sparse (1:n, p, 1) ;
+
+    L = speye (n) + tril (LD,-1) ;
+    D = triu (LD) ;
+    err = norm (L*D*L' - C, 1) / norm (C, 1) ;
+    fprintf ('err %g in LDL''-C\n', err) ;
+    if (err > 1e-12)
+        error ('!') ;
+    end
+
+    D2 = chol (D) ;
+    L2 = L*D2 + 1e-50 * spones (L) ;
+    if (~isequal (spones (L), spones (L2)))
+        error ('oops') ;
+    end
+    err = norm (L2*L2' - C, 1) / norm (C, 1) ;
+    fprintf ('err %g in LL''-C\n', err) ;
+    if (err > 1e-12)
+        error ('!') ;
+    end
+
+    % test lsubsolve
+    for i = 1:n
+        b = sparse (i, 1, rand(1), n, 1) ;
+        [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err) ;
+        if (err > 1e-12)
+            error ('!') ;
+        end
+    end
+
+    for trial = 1:100
+        b = sprand (n, 1, trial/100) ;
+        [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err) ;
+        if (err > 1e-12)
+            error ('!') ;
+        end
+    end
+
+    b = sparse (rand (n,1)) ;
+    [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err) ;
+    fprintf ('err %g in solves\n', err) ;
+    if (err > 1e-12)
+        error ('!') ;
+    end
+end
+
+fprintf ('lxtest: all tests passed\n') ;
diff --git a/CHOLMOD/MATLAB/Test/n2.m b/CHOLMOD/MATLAB/Test/n2.m
index 64239cb..88d5d65 100644
--- a/CHOLMOD/MATLAB/Test/n2.m
+++ b/CHOLMOD/MATLAB/Test/n2.m
@@ -3,7 +3,7 @@
 %   n2
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 f = find ((index.amd_lnz > 0) & (index.nrows > 200)) ;
diff --git a/CHOLMOD/MATLAB/Test/nn.m b/CHOLMOD/MATLAB/Test/nn.m
index 10b55ff..117e458 100644
--- a/CHOLMOD/MATLAB/Test/nn.m
+++ b/CHOLMOD/MATLAB/Test/nn.m
@@ -4,7 +4,7 @@
 %   nn
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 f = find (index.amd_lnz > 0) ;
diff --git a/CHOLMOD/MATLAB/Test/test0.m b/CHOLMOD/MATLAB/Test/test0.m
index 35ae12a..96c1cdf 100644
--- a/CHOLMOD/MATLAB/Test/test0.m
+++ b/CHOLMOD/MATLAB/Test/test0.m
@@ -4,16 +4,15 @@ function test0 (nmat)
 %   test0(nmat)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test0: test most CHOLMOD functions\n') ;
 
 % This test requires UFget, the MATLAB interface to the UF sparse matrix
-% collection.  You can obtain UFget from
-% http://www.cise.ufl.edu/research/sparse/matrices.
+% collection.  You can obtain UFget from http://www.suitesparse.com.
 
-try % load UF index
+try
     index = UFget ;
 catch
     error ('Test aborted.  UF sparse matrix collection not available.\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test1.m b/CHOLMOD/MATLAB/Test/test1.m
index 73e2a10..ac98ddb 100644
--- a/CHOLMOD/MATLAB/Test/test1.m
+++ b/CHOLMOD/MATLAB/Test/test1.m
@@ -4,7 +4,7 @@ function test1 (wait)
 %   test1
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test1: test sparse2\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test10.m b/CHOLMOD/MATLAB/Test/test10.m
index 95a3ad3..59082ac 100644
--- a/CHOLMOD/MATLAB/Test/test10.m
+++ b/CHOLMOD/MATLAB/Test/test10.m
@@ -4,7 +4,7 @@ function test10 (nmat)
 %   test10(nmat)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test10: test cholmod2''s backslash\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test11.m b/CHOLMOD/MATLAB/Test/test11.m
index 99e4b18..419c513 100644
--- a/CHOLMOD/MATLAB/Test/test11.m
+++ b/CHOLMOD/MATLAB/Test/test11.m
@@ -5,7 +5,7 @@ function test11 (nmat)
 %   test11(nmat)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test11 : compare CHOLMOD and MATLAB, save results in Results.mat\n');
@@ -124,7 +124,7 @@ for kkk = 1:length(f)
 	E2 (kk) = e2 ;
 	FL (kk) = fl ;
 	LNZ (kk) = lnz ;
-	save Results T1 T2 E1 E2 FL LNZ f kkk
+	%%% save Results T1 T2 E1 E2 FL LNZ f kkk
 
     % catch
     %	fprintf (' failed\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test11results.m b/CHOLMOD/MATLAB/Test/test11results.m
index 5ffd69c..97d9195 100644
--- a/CHOLMOD/MATLAB/Test/test11results.m
+++ b/CHOLMOD/MATLAB/Test/test11results.m
@@ -4,7 +4,7 @@ function test11results
 %   test11results
 % See also test11, cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 load Results
 index = UFget ;
@@ -40,7 +40,6 @@ for k = bad
 	index.Group{i}, index.Name{i}) ;
 end
 
-% figure (3)
 clf
 loglog (fl_per_lnz (good), speedup (good), 'x') ;
 axis ([1 4000 .1 50]) ;
diff --git a/CHOLMOD/MATLAB/Test/test12.m b/CHOLMOD/MATLAB/Test/test12.m
index fb81d1d..a1e622d 100644
--- a/CHOLMOD/MATLAB/Test/test12.m
+++ b/CHOLMOD/MATLAB/Test/test12.m
@@ -4,7 +4,7 @@ function test12 (nmat)
 %   test12(nmat)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test12: test etree2 and compare with etree\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test13.m b/CHOLMOD/MATLAB/Test/test13.m
index 0f53009..ffead97 100644
--- a/CHOLMOD/MATLAB/Test/test13.m
+++ b/CHOLMOD/MATLAB/Test/test13.m
@@ -4,7 +4,7 @@ function test13
 %   test13
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test13: test cholmod2 and MATLAB on large tridiagonal matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test14.m b/CHOLMOD/MATLAB/Test/test14.m
index 58ee672..f5fe56b 100644
--- a/CHOLMOD/MATLAB/Test/test14.m
+++ b/CHOLMOD/MATLAB/Test/test14.m
@@ -4,7 +4,7 @@ function test14 (nmat)
 %   test14(nmat)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test14: test metis, symbfact2, and etree2\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test15.m b/CHOLMOD/MATLAB/Test/test15.m
index 7b5ac81..22b63ad 100644
--- a/CHOLMOD/MATLAB/Test/test15.m
+++ b/CHOLMOD/MATLAB/Test/test15.m
@@ -4,7 +4,7 @@ function test15 (nmat)
 %   test15(nmat)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 
diff --git a/CHOLMOD/MATLAB/Test/test16.m b/CHOLMOD/MATLAB/Test/test16.m
index 65f0151..845041e 100644
--- a/CHOLMOD/MATLAB/Test/test16.m
+++ b/CHOLMOD/MATLAB/Test/test16.m
@@ -4,8 +4,7 @@ function test16
 %   test16
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
-
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test16: test cholmod2 on a large matrix\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test17.m b/CHOLMOD/MATLAB/Test/test17.m
index a833cfd..1d745b2 100644
--- a/CHOLMOD/MATLAB/Test/test17.m
+++ b/CHOLMOD/MATLAB/Test/test17.m
@@ -4,7 +4,7 @@ function test17
 %   test17
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test17: test lchol on a few large matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test18.m b/CHOLMOD/MATLAB/Test/test18.m
index 06bcf8f..638a304 100644
--- a/CHOLMOD/MATLAB/Test/test18.m
+++ b/CHOLMOD/MATLAB/Test/test18.m
@@ -4,7 +4,7 @@ function test18
 %   test18
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test18: test cholmod2 on a few large matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test19.m b/CHOLMOD/MATLAB/Test/test19.m
index f3349e2..0486af4 100644
--- a/CHOLMOD/MATLAB/Test/test19.m
+++ b/CHOLMOD/MATLAB/Test/test19.m
@@ -4,7 +4,7 @@ function test19
 %   test19
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test19: look for NaN''s from lchol (caused by Intel MKL 7.x bug)\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test2.m b/CHOLMOD/MATLAB/Test/test2.m
index dd26e92..d133576 100644
--- a/CHOLMOD/MATLAB/Test/test2.m
+++ b/CHOLMOD/MATLAB/Test/test2.m
@@ -4,7 +4,7 @@ function test2
 %   test2
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test2: test sparse2\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test20.m b/CHOLMOD/MATLAB/Test/test20.m
index 0f0f53a..4506fed 100644
--- a/CHOLMOD/MATLAB/Test/test20.m
+++ b/CHOLMOD/MATLAB/Test/test20.m
@@ -4,7 +4,7 @@ function test20
 %   test20
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test20: test symbfact2, cholmod2, and lu on a few large matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test21.m b/CHOLMOD/MATLAB/Test/test21.m
index c24de77..0656e7a 100644
--- a/CHOLMOD/MATLAB/Test/test21.m
+++ b/CHOLMOD/MATLAB/Test/test21.m
@@ -4,7 +4,7 @@ function test21
 %   test21
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test21: test cholmod2 on diagonal or ill-conditioned matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test22.m b/CHOLMOD/MATLAB/Test/test22.m
index d77c861..ffff6dd 100644
--- a/CHOLMOD/MATLAB/Test/test22.m
+++ b/CHOLMOD/MATLAB/Test/test22.m
@@ -6,7 +6,7 @@ function test22(nmat)
 % if nmat <= 0, just test problematic matrices
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test22: test pos.def and indef. matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test23.m b/CHOLMOD/MATLAB/Test/test23.m
index b1cafb9..74624cd 100644
--- a/CHOLMOD/MATLAB/Test/test23.m
+++ b/CHOLMOD/MATLAB/Test/test23.m
@@ -4,7 +4,7 @@ function test23
 %   test23
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test23: test chol & cholmod2 on the sparse matrix used in "bench"\n');
diff --git a/CHOLMOD/MATLAB/Test/test24.m b/CHOLMOD/MATLAB/Test/test24.m
index 56000ad..7870a3f 100644
--- a/CHOLMOD/MATLAB/Test/test24.m
+++ b/CHOLMOD/MATLAB/Test/test24.m
@@ -4,7 +4,7 @@ function test24
 %   test24
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test24: test sdmult\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test25.m b/CHOLMOD/MATLAB/Test/test25.m
index 4253951..bfc3b30 100644
--- a/CHOLMOD/MATLAB/Test/test25.m
+++ b/CHOLMOD/MATLAB/Test/test25.m
@@ -4,7 +4,7 @@ function test25
 %   test25
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test25: test sdmult on a large matrix\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test26.m b/CHOLMOD/MATLAB/Test/test26.m
index 76b55e2..5221f42 100644
--- a/CHOLMOD/MATLAB/Test/test26.m
+++ b/CHOLMOD/MATLAB/Test/test26.m
@@ -4,7 +4,7 @@ function test26 (do_metis)
 %   test26
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test26: test logical full and sparse matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test27.m b/CHOLMOD/MATLAB/Test/test27.m
index 06f1a0d..9dbd064 100644
--- a/CHOLMOD/MATLAB/Test/test27.m
+++ b/CHOLMOD/MATLAB/Test/test27.m
@@ -4,7 +4,7 @@ function test27
 %   test27
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test27: test nesdis\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test28.m b/CHOLMOD/MATLAB/Test/test28.m
index 708d749..8cfa658 100644
--- a/CHOLMOD/MATLAB/Test/test28.m
+++ b/CHOLMOD/MATLAB/Test/test28.m
@@ -4,7 +4,7 @@ function test28
 %   test28
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 
diff --git a/CHOLMOD/MATLAB/Test/test3.m b/CHOLMOD/MATLAB/Test/test3.m
index f84b902..df6ccb6 100644
--- a/CHOLMOD/MATLAB/Test/test3.m
+++ b/CHOLMOD/MATLAB/Test/test3.m
@@ -4,39 +4,54 @@ function test3
 %   test3
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test3: test sparse on int8, int16, and logical\n') ;
 
 clear all
 c =  ['a' 'b' 0 'd']							    %#ok
-sparse(c)
+
+fprintf ('---- char:\n') ;
 sparse2(c)
-sparse(c')
-sparse2(c')
+nzmax(ans)  %#ok
 whos
+
+fprintf ('---- char transposed:\n') ;
+sparse2(c')
 nzmax(ans)  %#ok
+whos
 
-try % this will fail
-    sparse(int8(c))
-catch
-    fprintf ('sparse(int8(c)) fails in MATLAB\n') ;
-end
+fprintf ('---- int8:\n') ;
 sparse2(int8(c))
+nzmax(ans)  %#ok
+whos
 
+fprintf ('---- int16:\n') ;
 sparse2 (int16(c))
+nzmax(ans)  %#ok
 whos
+
+fprintf ('---- logical (using the MATLAB "sparse"):\n') ;
 s = logical(rand(4) > .5)						    %#ok
 sparse (s)
+nzmax(ans)  %#ok
 whos
+
+fprintf ('---- logical (using sparse2):\n') ;
 sparse2(s)
+nzmax(ans)  %#ok
 whos
 
+fprintf ('---- double (using the MATLAB "sparse"):\n') ;
 x = rand(4)								    %#ok
 sparse (x > .5)								    %#ok
+nzmax(ans)  %#ok
 whos
+
+fprintf ('---- double (using sparse2):\n') ;
 sparse2 (x > .5)							    %#ok
+nzmax(ans)  %#ok
 whos
 
 fprintf ('test3 passed\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test4.m b/CHOLMOD/MATLAB/Test/test4.m
index 5b0872e..c89e48b 100644
--- a/CHOLMOD/MATLAB/Test/test4.m
+++ b/CHOLMOD/MATLAB/Test/test4.m
@@ -4,7 +4,7 @@ function test4
 %   test4
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test4: test cholmod2 with multiple and sparse right-hand-sides\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test5.m b/CHOLMOD/MATLAB/Test/test5.m
index 3fd8cc7..3093b27 100644
--- a/CHOLMOD/MATLAB/Test/test5.m
+++ b/CHOLMOD/MATLAB/Test/test5.m
@@ -4,7 +4,7 @@ function test5
 %   test5
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test5: test sparse2\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test6.m b/CHOLMOD/MATLAB/Test/test6.m
index 3a217c4..1a30c27 100644
--- a/CHOLMOD/MATLAB/Test/test6.m
+++ b/CHOLMOD/MATLAB/Test/test6.m
@@ -5,7 +5,7 @@ function test6
 %   test6
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test6: test sparse with large matrix, both real and complex\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test7.m b/CHOLMOD/MATLAB/Test/test7.m
index 8403dbc..2543cd8 100644
--- a/CHOLMOD/MATLAB/Test/test7.m
+++ b/CHOLMOD/MATLAB/Test/test7.m
@@ -4,7 +4,7 @@ function test7
 %   test7
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test7: test sparse2\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test8.m b/CHOLMOD/MATLAB/Test/test8.m
index 19465e5..b5b1c6b 100644
--- a/CHOLMOD/MATLAB/Test/test8.m
+++ b/CHOLMOD/MATLAB/Test/test8.m
@@ -5,7 +5,7 @@ function test8 (nmat)
 %   test8(nmat)
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test8: factorize a large range of sparse matrices\n') ;
diff --git a/CHOLMOD/MATLAB/Test/test9.m b/CHOLMOD/MATLAB/Test/test9.m
index f514dfb..3b92221 100644
--- a/CHOLMOD/MATLAB/Test/test9.m
+++ b/CHOLMOD/MATLAB/Test/test9.m
@@ -4,7 +4,7 @@ function test9
 %   test9
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('=================================================================\n');
 fprintf ('test9: test metis, etree, bisect, nesdis\n') ;
@@ -36,11 +36,9 @@ fprintf ('\nmetis(A):\n') ;
 if (m == n)
     if (nnz (A-A') == 0)
 	tic ; p5 = metis (A) ; toc
-	% figure (1)
 	% spy (A (p5,p5)) ;
 	[ignore q] = etree (A(p5,p5)) ;
 	p5post = p5 (q) ;						    %#ok
-	% figure (2)
 	% spy (A (p5post,p5post)) ;
 	lnz0 = sum (symbfact (A (p5,p5)))				    %#ok
     end
diff --git a/CHOLMOD/MATLAB/Test/testmm.m b/CHOLMOD/MATLAB/Test/testmm.m
index c45f03b..9d70513 100644
--- a/CHOLMOD/MATLAB/Test/testmm.m
+++ b/CHOLMOD/MATLAB/Test/testmm.m
@@ -4,7 +4,7 @@
 % See also mread.
 % Requires the mmread MATLAB m-file from http://www.nist.gov
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 matrices = {
     'M/Harwell-Boeing/acoust/young1c.mtx', ...
diff --git a/CHOLMOD/MATLAB/Test/testsolve.m b/CHOLMOD/MATLAB/Test/testsolve.m
index 22ad363..8b7783c 100644
--- a/CHOLMOD/MATLAB/Test/testsolve.m
+++ b/CHOLMOD/MATLAB/Test/testsolve.m
@@ -7,7 +7,7 @@ function [x1,x2,e1,e2] = testsolve (A,b)
 %   [x1,x2,e1,e2] = testsolve (A,b) ;
 % See also cholmod_test
 
-% Copyright 2006-2007, Timothy A. Davis, University of Florida
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('A: [n %6d real %d]    B: [sp:%d nrhs %d real %d]  ', ...
     size(A,1), isreal(A), issparse(b), size(b,2), isreal(b)) ;
diff --git a/CHOLMOD/MATLAB/Windows/README.txt b/CHOLMOD/MATLAB/Windows/README.txt
index 165a532..8baf9e4 100644
--- a/CHOLMOD/MATLAB/Windows/README.txt
+++ b/CHOLMOD/MATLAB/Windows/README.txt
@@ -1 +1,3 @@
 These files are need to compile METIS on Windows.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CHOLMOD/MATLAB/analyze.c b/CHOLMOD/MATLAB/analyze.c
index e806fe7..2f0235e 100644
--- a/CHOLMOD/MATLAB/analyze.c
+++ b/CHOLMOD/MATLAB/analyze.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -47,7 +47,7 @@ void mexFunction
     cholmod_factor *L ;
     cholmod_sparse *A, Amatrix, *C, *S ;
     cholmod_common Common, *cm ;
-    Int n, transpose, c ;
+    Long n, transpose, c ;
     char buf [LEN] ;
 
     /* ---------------------------------------------------------------------- */
diff --git a/CHOLMOD/MATLAB/analyze.m b/CHOLMOD/MATLAB/analyze.m
index 323e8c4..314d4e5 100644
--- a/CHOLMOD/MATLAB/analyze.m
+++ b/CHOLMOD/MATLAB/analyze.m
@@ -59,7 +59,6 @@ function [p, count] = analyze (A, mode, k)				    %#ok
 %
 %   See also METIS, NESDIS, BISECT, SYMBFACT, AMD
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('analyze mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/bisect.c b/CHOLMOD/MATLAB/bisect.c
index 5e48090..1439478 100644
--- a/CHOLMOD/MATLAB/bisect.c
+++ b/CHOLMOD/MATLAB/bisect.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * METIS (Copyright 1998, G. Karypis) is not distributed with CHOLMOD.
  * -------------------------------------------------------------------------- */
@@ -42,10 +42,10 @@ void mexFunction
 #ifndef NPARTITION
 
     double dummy = 0 ;
-    Int *Partition ;
+    Long *Partition ;
     cholmod_sparse *A, Amatrix, *C, *S ;
     cholmod_common Common, *cm ;
-    Int n, transpose, c ;
+    Long n, transpose, c ;
     char buf [LEN] ;
 
     /* ---------------------------------------------------------------------- */
@@ -134,7 +134,7 @@ void mexFunction
     /* get workspace */
     /* ---------------------------------------------------------------------- */
 
-    Partition = cholmod_l_malloc (n, sizeof (Int), cm) ;
+    Partition = cholmod_l_malloc (n, sizeof (Long), cm) ;
 
     /* ---------------------------------------------------------------------- */
     /* order the matrix with CHOLMOD's interface to METIS_NodeND */ 
@@ -155,7 +155,7 @@ void mexFunction
     /* free workspace */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_l_free (n, sizeof (Int), Partition, cm) ;
+    cholmod_l_free (n, sizeof (Long), Partition, cm) ;
     cholmod_l_free_sparse (&C, cm) ;
     cholmod_l_free_sparse (&S, cm) ;
     cholmod_l_finish (cm) ;
diff --git a/CHOLMOD/MATLAB/bisect.m b/CHOLMOD/MATLAB/bisect.m
index 36b928a..13ec084 100644
--- a/CHOLMOD/MATLAB/bisect.m
+++ b/CHOLMOD/MATLAB/bisect.m
@@ -19,7 +19,6 @@ function p = bisect (A, mode)						    %#ok
 %
 %   See also METIS, NESDIS
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('bisect mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/chol2.c b/CHOLMOD/MATLAB/chol2.c
index 4313ebd..4f1248b 100644
--- a/CHOLMOD/MATLAB/chol2.c
+++ b/CHOLMOD/MATLAB/chol2.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -42,7 +42,7 @@ void mexFunction
     cholmod_sparse Amatrix, *A, *Lsparse, *R ;
     cholmod_factor *L ;
     cholmod_common Common, *cm ;
-    Int n, minor ;
+    Long n, minor ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
diff --git a/CHOLMOD/MATLAB/chol2.m b/CHOLMOD/MATLAB/chol2.m
index 2279ec8..baa5b7c 100644
--- a/CHOLMOD/MATLAB/chol2.m
+++ b/CHOLMOD/MATLAB/chol2.m
@@ -7,7 +7,7 @@ function [R,p,q] = chol2 (A)						    %#ok
 %
 %   Example:
 %   R = chol2 (A)                 same as R = chol (A), just faster
-%   [R,p] = chol2 (A)             save as [R,p] = chol(A), just faster
+%   [R,p] = chol2 (A)             same as [R,p] = chol(A), just faster
 %   [R,p,q] = chol2 (A)           factorizes A(q,q) into R'*R, where q is
 %                                 a fill-reducing ordering
 %
@@ -15,7 +15,6 @@ function [R,p,q] = chol2 (A)						    %#ok
 %
 %   See also LCHOL, LDLCHOL, CHOL, LDLUPDATE.
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('chol2 mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/cholmod2.c b/CHOLMOD/MATLAB/cholmod2.c
index 4a784ac..1a78bc5 100644
--- a/CHOLMOD/MATLAB/cholmod2.c
+++ b/CHOLMOD/MATLAB/cholmod2.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -62,7 +62,7 @@ void mexFunction
     cholmod_dense Bmatrix, *X, *B ;
     cholmod_factor *L ;
     cholmod_common Common, *cm ;
-    Int n, B_is_sparse, ordering, k, *Perm ;
+    Long n, B_is_sparse, ordering, k, *Perm ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
@@ -193,7 +193,7 @@ void mexFunction
 	}
 	/* copy from double to integer, and convert to 0-based */
 	p = mxGetPr (pargin [2]) ;
-	Perm = cholmod_l_malloc (n, sizeof (Int), cm) ;
+	Perm = cholmod_l_malloc (n, sizeof (Long), cm) ;
 	for (k = 0 ; k < n ; k++)
 	{
 	    Perm [k] = p [k] - 1 ;
@@ -218,7 +218,7 @@ void mexFunction
     /* ---------------------------------------------------------------------- */
 
     L = cholmod_l_analyze_p (A, Perm, NULL, 0, cm) ;
-    cholmod_l_free (n, sizeof (Int), Perm, cm) ;
+    cholmod_l_free (n, sizeof (Long), Perm, cm) ;
     cholmod_l_factorize (A, L, cm) ;
 
     rcond = cholmod_l_rcond (L, cm) ;
diff --git a/CHOLMOD/MATLAB/cholmod2.m b/CHOLMOD/MATLAB/cholmod2.m
index 759d545..8e47e3f 100644
--- a/CHOLMOD/MATLAB/cholmod2.m
+++ b/CHOLMOD/MATLAB/cholmod2.m
@@ -36,7 +36,6 @@ function [x,stats] = cholmod2 (A, b, ordering)				    %#ok
 %
 %   See also CHOL, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cholmod2 mexFunction not found\n') ;
diff --git a/CHOLMOD/MATLAB/cholmod_demo.m b/CHOLMOD/MATLAB/cholmod_demo.m
index 159c68a..61a6ffc 100644
--- a/CHOLMOD/MATLAB/cholmod_demo.m
+++ b/CHOLMOD/MATLAB/cholmod_demo.m
@@ -14,8 +14,7 @@ function cholmod_demo
 %
 % See also BENCH
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 help cholmod_demo
 
@@ -44,23 +43,18 @@ end
 
 fprintf ('\n--------------------------------------------------------------\n') ;
 fprintf ('\nWith the matrix used in the MATLAB 7.2 "bench" program.\n') ;
-fprintf ('No fill-reducing orderings are used; type "help bench" for more') ;
-fprintf (' information.\n') ;
 
 n = 300 ;
 A = delsq (numgrid ('L', n)) ;
 b = sum (A)' ;
 
-spparms ('default') ;
-spparms ('autommd',0) ;
-spparms ('autoamd',0) ;
 tic ;
 x = A\b ;
 t1 = toc ;
 e1 = norm (A*x-b) ;
 
 tic ;
-x = cholmod2 (A,b,0) ; 
+x = cholmod2 (A,b) ; 
 t2 = toc ;
 e2 = norm (A*x-b) ;
 
@@ -68,8 +62,6 @@ fprintf ('MATLAB  x=A\\b      time: %8.4f  resid: %8.0e\n', t1, e1) ;
 fprintf ('CHOLMOD x=A\\b      time: %8.4f  resid: %8.0e\n', t2, e2) ;
 fprintf ('CHOLMOD speedup: %8.2f\n', t1/t2) ;
 
-spparms ('default') ;
-
 fprintf ('\ncholmod_demo finished: all tests passed\n') ;
 fprintf ('\nFor more accurate timings, run this test again.\n') ;
 
@@ -79,7 +71,7 @@ fprintf ('\nFor more accurate timings, run this test again.\n') ;
 
 
 function try_matrix (A)
-% try_matrix: try a matrix with CHOLMOD
+    % try_matrix: try a matrix with CHOLMOD
 
 n = size (A,1) ;
 S = sparse (A) ;
diff --git a/CHOLMOD/MATLAB/cholmod_make.m b/CHOLMOD/MATLAB/cholmod_make.m
index 44d22dc..5daf8b8 100644
--- a/CHOLMOD/MATLAB/cholmod_make.m
+++ b/CHOLMOD/MATLAB/cholmod_make.m
@@ -8,19 +8,8 @@ function cholmod_make (metis_path)
 % All but METIS are distributed with CHOLMOD.  To compile CHOLMOD to use METIS
 % you must first place a copy of the metis-4.0 directory (METIS version 4.0.1)
 % in same directory that contains the AMD, COLAMD, CCOLAMD, and CHOLMOD
-% directories.  Next, type
-%
-%   cholmod_make
-%
-% in the MATLAB command window.  Alternatively, use this command:
-%
-%   cholmod_make ('path to your copy of metis-4.0 here') ;
-%
-% See http://www-users.cs.umn.edu/~karypis/metis for a copy of
-% METIS 4.0.1.  If you do not have METIS, use either of the following:
-%
-%   cholmod_make ('')
-%   cholmod_make ('no metis')
+% directories.  See http://www-users.cs.umn.edu/~karypis/metis for a copy of
+% METIS 4.0.1.
 %
 % You must type the cholmod_make command while in the CHOLMOD/MATLAB directory.
 %
@@ -28,29 +17,36 @@ function cholmod_make (metis_path)
 %   ldlupdate, metis, spsym, nesdis, septree, resymbol, sdmult, sparse2,
 %   symbfact2, mread, mwrite
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 details = 0 ;	    % 1 if details of each command are to be printed
 
-v = getversion ;
+v = version ;
 try
     % ispc does not appear in MATLAB 5.3
     pc = ispc ;
-catch
+    mac = ismac ;
+catch                                                                       %#ok
     % if ispc fails, assume we are on a Windows PC if it's not unix
     pc = ~isunix ;
+    mac = 0 ;
 end
 
-d = '' ;
-if (~isempty (strfind (computer, '64')))
+flags = '' ;
+is64 = ~isempty (strfind (computer, '64')) ;
+if (is64)
     % 64-bit MATLAB
-    d = '-largeArrayDims' ;
+    flags = '-largeArrayDims' ;
+end
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    flags = ['-silent ' flags] ;
 end
 
-include = '-I. -I../../AMD/Include -I../../COLAMD/Include -I../../CCOLAMD/Include -I../../CAMD/Include -I../Include -I../../UFconfig' ;
+include = '-I. -I../../AMD/Include -I../../COLAMD/Include -I../../CCOLAMD/Include -I../../CAMD/Include -I../Include -I../../SuiteSparse_config' ;
 
-if (v < 7.0)
+if (verLessThan ('matlab', '7.0'))
     % do not attempt to compile CHOLMOD with large file support
     include = [include ' -DNLARGEFILE'] ;
 elseif (~pc)
@@ -58,23 +54,20 @@ elseif (~pc)
     include = [include ' -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE'] ;
 end
 
-if (v < 6.5)
+if (verLessThan ('matlab', '6.5'))
     % logical class does not exist in MATLAB 6.1 or earlie
     include = [include ' -DMATLAB6p1_OR_EARLIER'] ;
 end
 
-% Determine the METIS path, and whether or not METIS is available
-if (nargin == 0)
+ % Determine if METIS is available
+if (nargin < 1)
     metis_path = '../../metis-4.0' ;
 end
-if (strcmp (metis_path, 'no metis'))
-    metis_path = '' ;
-end
-have_metis = (~isempty (metis_path)) ;
+have_metis = exist ([metis_path '/Lib'], 'dir') ;
 
-% fix the METIS 4.0.1 rename.h file
+ % fix the METIS 4.0.1 rename.h file
 if (have_metis)
-    fprintf ('Compiling CHOLMOD with METIS on MATLAB Version %g\n', v) ;
+    fprintf ('Compiling CHOLMOD with METIS for MATLAB Version %s\n', v) ;
     f = fopen ('rename.h', 'w') ;
     if (f == -1)
         error ('unable to create rename.h in current directory') ;
@@ -92,40 +85,51 @@ if (have_metis)
     fclose (f) ;
     include = [include ' -I' metis_path '/Lib'] ;
 else
-    fprintf ('Compiling CHOLMOD without METIS on MATLAB Version %g\n', v) ;
+    fprintf ('Compiling CHOLMOD without METIS for MATLAB Version %s\n', v) ;
     include = ['-DNPARTITION ' include] ;
 end
 
 
-%-------------------------------------------------------------------------------
-% BLAS option
-%-------------------------------------------------------------------------------
+ %---------------------------------------------------------------------------
+ % BLAS option
+ %---------------------------------------------------------------------------
 
-% This is exceedingly ugly.  The MATLAB mex command needs to be told where to
-% fine the LAPACK and BLAS libraries, which is a real portability nightmare.
+ % This is exceedingly ugly.  The MATLAB mex command needs to be told where to
+ % fine the LAPACK and BLAS libraries, which is a real portability nightmare.
 
 if (pc)
-    if (v < 6.5)
+    if (verLessThan ('matlab', '6.5'))
         % MATLAB 6.1 and earlier: use the version supplied here
         lapack = 'lcc_lib/libmwlapack.lib' ;
-    elseif (v < 7.5)
+    elseif (verLessThan ('matlab', '7.5'))
         lapack = 'libmwlapack.lib' ;
     else
         lapack = 'libmwlapack.lib libmwblas.lib' ;
     end
 else
-    if (v < 7.5)
+    if (verLessThan ('matlab', '7.5'))
         lapack = '-lmwlapack' ;
     else
         lapack = '-lmwlapack -lmwblas' ;
     end
 end
 
-%-------------------------------------------------------------------------------
+if (is64 && ~verLessThan ('matlab', '7.8'))
+    % versions 7.8 and later on 64-bit platforms use a 64-bit BLAS
+    fprintf ('with 64-bit BLAS\n') ;
+    flags = [flags ' -DBLAS64'] ;
+end
 
-include = strrep (include, '/', filesep) ;
+if (~(pc || mac))
+    % for POSIX timing routine
+    lapack = [lapack ' -lrt'] ;
+end
+
+ %-------------------------------------------------------------------------------
+
+config_src = { '../../SuiteSparse_config/SuiteSparse_config' } ;
 
-amd_src = { ...
+ordering_src = { ...
     '../../AMD/Source/amd_1', ...
     '../../AMD/Source/amd_2', ...
     '../../AMD/Source/amd_aat', ...
@@ -138,9 +142,7 @@ amd_src = { ...
     '../../AMD/Source/amd_postorder', ...
     '../../AMD/Source/amd_post_tree', ...
     '../../AMD/Source/amd_preprocess', ...
-    '../../AMD/Source/amd_valid' } ;
-
-camd_src = { ...
+    '../../AMD/Source/amd_valid', ...
     '../../CAMD/Source/camd_1', ...
     '../../CAMD/Source/camd_2', ...
     '../../CAMD/Source/camd_aat', ...
@@ -152,72 +154,70 @@ camd_src = { ...
     '../../CAMD/Source/camd_order', ...
     '../../CAMD/Source/camd_postorder', ...
     '../../CAMD/Source/camd_preprocess', ...
-    '../../CAMD/Source/camd_valid' } ;
-
-colamd_src = {
+    '../../CAMD/Source/camd_valid', ...
     '../../COLAMD/Source/colamd', ...
-    '../../COLAMD/Source/colamd_global' } ;
-
-ccolamd_src = {
+    '../../COLAMD/Source/colamd_global', ...
     '../../CCOLAMD/Source/ccolamd', ...
     '../../CCOLAMD/Source/ccolamd_global' } ;
 
-metis_src = {
-    'Lib/balance', ...
-    'Lib/bucketsort', ...
-    'Lib/ccgraph', ...
-    'Lib/coarsen', ...
-    'Lib/compress', ...
-    'Lib/debug', ...
-    'Lib/estmem', ...
-    'Lib/fm', ...
-    'Lib/fortran', ...
-    'Lib/frename', ...
-    'Lib/graph', ...
-    'Lib/initpart', ...
-    'Lib/kmetis', ...
-    'Lib/kvmetis', ...
-    'Lib/kwayfm', ...
-    'Lib/kwayrefine', ...
-    'Lib/kwayvolfm', ...
-    'Lib/kwayvolrefine', ...
-    'Lib/match', ...
-    'Lib/mbalance2', ...
-    'Lib/mbalance', ...
-    'Lib/mcoarsen', ...
-    'Lib/memory', ...
-    'Lib/mesh', ...
-    'Lib/meshpart', ...
-    'Lib/mfm2', ...
-    'Lib/mfm', ...
-    'Lib/mincover', ...
-    'Lib/minitpart2', ...
-    'Lib/minitpart', ...
-    'Lib/mkmetis', ...
-    'Lib/mkwayfmh', ...
-    'Lib/mkwayrefine', ...
-    'Lib/mmatch', ...
-    'Lib/mmd', ...
-    'Lib/mpmetis', ...
-    'Lib/mrefine2', ...
-    'Lib/mrefine', ...
-    'Lib/mutil', ...
-    'Lib/myqsort', ...
-    'Lib/ometis', ...
-    'Lib/parmetis', ...
-    'Lib/pmetis', ...
-    'Lib/pqueue', ...
-    'Lib/refine', ...
-    'Lib/separator', ...
-    'Lib/sfm', ...
-    'Lib/srefine', ...
-    'Lib/stat', ...
-    'Lib/subdomains', ...
-    'Lib/timing', ...
-    'Lib/util' } ;
-
-for i = 1:length (metis_src)
-    metis_src {i} = [metis_path '/' metis_src{i}] ;
+if (have_metis)
+    metis_src = {
+        'Lib/balance', ...
+        'Lib/bucketsort', ...
+        'Lib/ccgraph', ...
+        'Lib/coarsen', ...
+        'Lib/compress', ...
+        'Lib/debug', ...
+        'Lib/estmem', ...
+        'Lib/fm', ...
+        'Lib/fortran', ...
+        'Lib/frename', ...
+        'Lib/graph', ...
+        'Lib/initpart', ...
+        'Lib/kmetis', ...
+        'Lib/kvmetis', ...
+        'Lib/kwayfm', ...
+        'Lib/kwayrefine', ...
+        'Lib/kwayvolfm', ...
+        'Lib/kwayvolrefine', ...
+        'Lib/match', ...
+        'Lib/mbalance2', ...
+        'Lib/mbalance', ...
+        'Lib/mcoarsen', ...
+        'Lib/memory', ...
+        'Lib/mesh', ...
+        'Lib/meshpart', ...
+        'Lib/mfm2', ...
+        'Lib/mfm', ...
+        'Lib/mincover', ...
+        'Lib/minitpart2', ...
+        'Lib/minitpart', ...
+        'Lib/mkmetis', ...
+        'Lib/mkwayfmh', ...
+        'Lib/mkwayrefine', ...
+        'Lib/mmatch', ...
+        'Lib/mmd', ...
+        'Lib/mpmetis', ...
+        'Lib/mrefine2', ...
+        'Lib/mrefine', ...
+        'Lib/mutil', ...
+        'Lib/myqsort', ...
+        'Lib/ometis', ...
+        'Lib/parmetis', ...
+        'Lib/pmetis', ...
+        'Lib/pqueue', ...
+        'Lib/refine', ...
+        'Lib/separator', ...
+        'Lib/sfm', ...
+        'Lib/srefine', ...
+        'Lib/stat', ...
+        'Lib/subdomains', ...
+        'Lib/timing', ...
+        'Lib/util' } ;
+
+    for i = 1:length (metis_src)
+        metis_src {i} = [metis_path '/' metis_src{i}] ;
+    end
 end
 
 cholmod_matlab = { 'cholmod_matlab' } ;
@@ -292,11 +292,13 @@ cholmod_mex_src = { ...
     'sparse2', ...
     'symbfact2', ...
     'mread', ...
-    'mwrite' } ;
+    'mwrite', ...
+    'lxbpattern', 'lsubsolve' } ;   % <=== these 2 are just for testing
 
 if (pc)
     % Windows does not have drand48 and srand48, required by METIS.  Use
     % drand48 and srand48 in CHOLMOD/MATLAB/Windows/rand48.c instead.
+    % Also provide Windows with an empty <strings.h> include file.
     obj_extension = '.obj' ;
     cholmod_matlab = [cholmod_matlab {'Windows/rand48'}] ;
     include = [include ' -IWindows'] ;
@@ -304,10 +306,10 @@ else
     obj_extension = '.o' ;
 end
 
-% compile each library source file
+ % compile each library source file
 obj = '' ;
 
-source = [amd_src colamd_src ccolamd_src camd_src cholmod_src cholmod_matlab] ;
+source = [ordering_src config_src cholmod_src cholmod_matlab] ;
 if (have_metis)
     source = [metis_src source] ;
 end
@@ -315,8 +317,8 @@ end
 kk = 0 ;
 
 for f = source
-    ff = strrep (f {1}, '/', filesep) ;
-    slash = strfind (ff, filesep) ;
+    ff = f {1} ;
+    slash = strfind (ff, '/') ;
     if (isempty (slash))
         slash = 1 ;
     else
@@ -324,25 +326,25 @@ for f = source
     end
     o = ff (slash:end) ;
     obj = [obj  ' ' o obj_extension] ;					    %#ok
-    s = sprintf ('mex %s -DDLONG -O %s -c %s.c', d, include, ff) ;
+    s = sprintf ('mex %s -DDLONG -O %s -c %s.c', flags, include, ff) ;
     kk = do_cmd (s, kk, details) ;
 end
 
-% compile each mexFunction
+ % compile each mexFunction
 for f = cholmod_mex_src
-    s = sprintf ('mex %s -DDLONG -O %s %s.c', d, include, f{1}) ;
+    s = sprintf ('mex %s -DDLONG -O %s %s.c', flags, include, f{1}) ;
     s = [s obj ' ' lapack] ;						    %#ok
     kk = do_cmd (s, kk, details) ;
 end
 
-% clean up
+ % clean up
 s = ['delete ' obj] ;
 do_cmd (s, kk, details) ;
 fprintf ('\nCHOLMOD successfully compiled\n') ;
 
-%-------------------------------------------------------------------------------
+ %------------------------------------------------------------------------------
 function kk = do_cmd (s, kk, details)
-%DO_CMD: evaluate a command, and either print it or print a "."
+ %DO_CMD: evaluate a command, and either print it or print a "."
 if (details)
     fprintf ('%s\n', s) ;
 else
@@ -353,9 +355,3 @@ else
     fprintf ('.') ;
 end
 eval (s) ;
-
-%-------------------------------------------------------------------------------
-function v = getversion
-% determine the MATLAB version, and return it as a double.
-v = sscanf (version, '%d.%d.%d') ;
-v = 10.^(0:-1:-(length(v)-1)) * v ;
diff --git a/CHOLMOD/MATLAB/cholmod_matlab.c b/CHOLMOD/MATLAB/cholmod_matlab.c
index a1cda98..b9078d4 100644
--- a/CHOLMOD/MATLAB/cholmod_matlab.c
+++ b/CHOLMOD/MATLAB/cholmod_matlab.c
@@ -30,23 +30,17 @@ FILE *sputil_file = NULL ;
 
 /* Define function pointers and other parameters for a mexFunction */
 
-void sputil_config (Int spumoni, cholmod_common *cm)
+void sputil_config (Long spumoni, cholmod_common *cm)
 {
     /* cholmod_l_solve must return a real or zomplex X for MATLAB */
     cm->prefer_zomplex = TRUE ;
 
-    /* use mxMalloc and related memory management routines */
-    cm->malloc_memory  = mxMalloc ;
-    cm->free_memory    = mxFree ;
-    cm->realloc_memory = mxRealloc ;
-    cm->calloc_memory  = mxCalloc ;
-
     /* printing and error handling */
     if (spumoni == 0)
     {
 	/* do not print anything from within CHOLMOD */
 	cm->print = -1 ;
-	cm->print_function = NULL ;
+        SuiteSparse_config.printf_func = NULL ;
     }
     else
     {
@@ -55,22 +49,18 @@ void sputil_config (Int spumoni, cholmod_common *cm)
 	 * spumoni = 2: also print a short summary of each object.
 	 */
 	cm->print = spumoni + 2 ;
-	cm->print_function = mexPrintf ;
+        /* SuiteSparse_config.printf_func = mexPrintf : */
     }
 
     /* error handler */
     cm->error_handler  = sputil_error_handler ;
 
-    /* complex arithmetic */
-    cm->complex_divide = cholmod_l_divcomplex ;
-    cm->hypotenuse     = cholmod_l_hypot ;
-
 #ifndef NPARTITION
 #if defined(METIS_VERSION)
 #if (METIS_VERSION >= METIS_VER(4,0,2))
     /* METIS 4.0.2 uses function pointers for malloc and free */
-    METIS_malloc = cm->malloc_memory ;
-    METIS_free   = cm->free_memory ;
+    METIS_malloc = Suiteparse_config.malloc_func ;
+    METIS_free   = Suiteparse_config.free_func ;
 #endif
 #endif
 #endif
@@ -87,7 +77,8 @@ void sputil_config (Int spumoni, cholmod_common *cm)
 /* === sputil_error_handler ================================================= */
 /* ========================================================================== */
 
-void sputil_error_handler (int status, char *file, int line, char *message)
+void sputil_error_handler (int status, const char *file, int line,
+    const char *message)
 {
     if (status < CHOLMOD_OK)
     {
@@ -123,20 +114,20 @@ cholmod_sparse *sputil_get_sparse
     const mxArray *Amatlab, /* MATLAB version of the matrix */
     cholmod_sparse *A,	    /* CHOLMOD version of the matrix */
     double *dummy,	    /* a pointer to a valid scalar double */
-    Int stype		    /* -1: lower, 0: unsymmetric, 1: upper */
+    Long stype		    /* -1: lower, 0: unsymmetric, 1: upper */
 )
 {
-    Int *Ap ;
+    Long *Ap ;
     A->nrow = mxGetM (Amatlab) ;
     A->ncol = mxGetN (Amatlab) ;
-    A->p = (Int *) mxGetJc (Amatlab) ;
-    A->i = (Int *) mxGetIr (Amatlab) ;
+    A->p = (Long *) mxGetJc (Amatlab) ;
+    A->i = (Long *) mxGetIr (Amatlab) ;
     Ap = A->p ;
     A->nzmax = Ap [A->ncol] ;
     A->packed = TRUE ;
     A->sorted = TRUE ;
     A->nz = NULL ;
-    A->itype = CHOLMOD_INT ;
+    A->itype = CHOLMOD_LONG ;       /* was CHOLMOD_INT in v1.6 and earlier */
     A->dtype = CHOLMOD_DOUBLE ;
     A->stype = stype ;
 
@@ -296,8 +287,8 @@ cholmod_sparse *sputil_get_sparse_pattern
 	    /* (this is copied and modified from t_cholmod_dense.c) */
 
 	    char *x ;
-	    Int *Ap, *Ai ;
-	    Int nrow, ncol, i, j, nz, nzmax, p ;
+	    Long *Ap, *Ai ;
+	    Long nrow, ncol, i, j, nz, nzmax, p ;
 
 	    /* -------------------------------------------------------------- */
 	    /* count the number of nonzeros in the result */
@@ -462,18 +453,18 @@ mxArray *sputil_put_dense
 /* === sputil_put_int ======================================================= */
 /* ========================================================================== */
 
-/* Convert an Int vector into a double mxArray */
+/* Convert a Long vector into a double mxArray */
 
 mxArray *sputil_put_int
 (
-    Int *P,		/* vector to convert */
-    Int n,		/* length of P */
-    Int one_based	/* 1 if convert from 0-based to 1-based, 0 otherwise */
+    Long *P,		/* vector to convert */
+    Long n,		/* length of P */
+    Long one_based	/* 1 if convert from 0-based to 1-based, 0 otherwise */
 )
 {
     double *p ;
     mxArray *Q ;
-    Int i ;
+    Long i ;
     Q = mxCreateDoubleMatrix (1, n, mxREAL) ;
     p = mxGetPr (Q) ;
     for (i = 0 ; i < n ; i++)
@@ -492,8 +483,8 @@ mxArray *sputil_put_int
 
 void sputil_error
 (
-    Int error,	    /* kind of error */
-    Int is_index    /* TRUE if a matrix index, FALSE if a matrix dimension */
+    Long error,	    /* kind of error */
+    Long is_index    /* TRUE if a matrix index, FALSE if a matrix dimension */
 )
 {
     if (error == ERROR_TOO_SMALL)
@@ -545,15 +536,15 @@ void sputil_error
 
 /* convert a double into an integer */
 
-Int sputil_double_to_int   /* returns integer value of x */
+Long sputil_double_to_int   /* returns integer value of x */
 (
     double x,	    /* double value to convert */
-    Int is_index,   /* TRUE if a matrix index, FALSE if a matrix dimension */
-    Int n	    /* if a matrix index, x cannot exceed this dimension,
+    Long is_index,  /* TRUE if a matrix index, FALSE if a matrix dimension */
+    Long n	    /* if a matrix index, x cannot exceed this dimension,
 		     * except that -1 is treated as infinity */
 )
 {
-    Int i ;
+    Long i ;
     if (x > INT_MAX)
     {
 	/* x is way too big for an integer */
@@ -564,7 +555,7 @@ Int sputil_double_to_int   /* returns integer value of x */
 	/* x must be non-negative */
 	sputil_error (ERROR_TOO_SMALL, is_index) ;
     }
-    i = (Int) x ;
+    i = (Long) x ;
     if (x != (double) i)
     {
 	/* x must be an integer */
@@ -592,13 +583,13 @@ Int sputil_double_to_int   /* returns integer value of x */
 /* return the number of elements in an mxArray.  Trigger an error on integer
  * overflow (in case the argument is sparse) */
 
-Int sputil_nelements (const mxArray *arg)
+Long sputil_nelements (const mxArray *arg)
 {
     double size ;
-    const Int *dims ;
-    Int k, ndims ;
+    const Long *dims ;
+    Long k, ndims ;
     ndims = mxGetNumberOfDimensions (arg) ;
-    dims = (Int *) mxGetDimensions (arg) ;
+    dims = (Long *) mxGetDimensions (arg) ;
     size = 1 ;
     for (k = 0 ; k < ndims ; k++)
     {
@@ -630,11 +621,11 @@ double sputil_get_double (const mxArray *arg)
 
 /* return an argument as a non-negative integer scalar, or -1 if error */
 
-Int sputil_get_integer
+Long sputil_get_integer
 (
     const mxArray *arg,	    /* MATLAB argument to convert */
-    Int is_index,	    /* TRUE if an index, FALSE if a matrix dimension */
-    Int n		    /* maximum value, if an index */
+    Long is_index,	    /* TRUE if an index, FALSE if a matrix dimension */
+    Long n		    /* maximum value, if an index */
 )
 {
     double x = sputil_get_double (arg) ;
@@ -658,12 +649,12 @@ Int sputil_get_integer
 void sputil_trim
 (
     cholmod_sparse *S,
-    Int k,
+    Long k,
     cholmod_common *cm
 )
 {
-    Int *Sp ;
-    Int ncol ;
+    Long *Sp ;
+    Long ncol ;
     size_t n1, nznew ;
 
     if (S == NULL)
@@ -680,7 +671,7 @@ void sputil_trim
 
     /* reduce S->p in size.  This cannot fail. */
     n1 = ncol + 1 ;
-    S->p = cholmod_l_realloc (k+1, sizeof (Int), S->p, &n1, cm) ;
+    S->p = cholmod_l_realloc (k+1, sizeof (Long), S->p, &n1, cm) ;
 
     /* get the new number of entries in S */
     Sp = S->p ;
@@ -707,9 +698,9 @@ cholmod_sparse *sputil_extract_zeros
     cholmod_common *cm
 )
 {
-    Int *Ap, *Ai, *Zp, *Zi ;
+    Long *Ap, *Ai, *Zp, *Zi ;
     double *Ax, *Az, *Zx ;
-    Int j, p, nzeros = 0, is_complex, pz, nrow, ncol ;
+    Long j, p, nzeros = 0, is_complex, pz, nrow, ncol ;
     cholmod_sparse *Z ;
 
     if (A == NULL || A->xtype == CHOLMOD_PATTERN || A->xtype == CHOLMOD_COMPLEX)
@@ -782,15 +773,15 @@ cholmod_sparse *sputil_extract_zeros
  * Returns the number of entries dropped.
  */
 
-Int sputil_drop_zeros
+Long sputil_drop_zeros
 (
     cholmod_sparse *S
 )
 {
     double sik, zik ;
-    Int *Sp, *Si ;
+    Long *Sp, *Si ;
     double *Sx, *Sz ;
-    Int pdest, k, ncol, p, pend, nz ;
+    Long pdest, k, ncol, p, pend, nz ;
 
     if (S == NULL)
     {
@@ -860,29 +851,29 @@ Int sputil_drop_zeros
 /* === sputil_copy_ij ======================================================= */
 /* ========================================================================== */
 
-/* copy i or j arguments into an Int vector.  For small integer types, i and
+/* copy i or j arguments into an Long vector.  For small integer types, i and
  * and j can be returned with negative entries; this error condition is caught
  * later, in cholmod_triplet_to_sparse.
  *
- * TODO: if the mxClassID matches the default Int integer (INT32 for 32-bit
+ * Future work: if the mxClassID matches the default integer (INT32 for 32-bit
  * MATLAB and INT64 for 64-bit), then it would save memory to patch in the
  * vector with a pointer copy, rather than making a copy of the whole vector.
  * This would require that the 1-based i and j vectors be converted on the fly
  * to 0-based vectors in cholmod_triplet_to_sparse.
  */
 
-Int sputil_copy_ij		/* returns the dimension, n */
+Long sputil_copy_ij		/* returns the dimension, n */
 (
-    Int is_scalar,	/* TRUE if argument is a scalar, FALSE otherwise */
-    Int scalar,		/* scalar value of the argument */
+    Long is_scalar,	/* TRUE if argument is a scalar, FALSE otherwise */
+    Long scalar,        /* scalar value of the argument */
     void *vector,	/* vector value of the argument */
     mxClassID category,	/* type of vector */
-    Int nz,		/* length of output vector I */
-    Int n,		/* maximum dimension, EMPTY if not yet known */
-    Int *I		/* vector of length nz to copy into */
+    Long nz,		/* length of output vector I */
+    Long n,		/* maximum dimension, EMPTY if not yet known */
+    Long *I		/* vector of length nz to copy into */
 )
 {
-    Int i, k, ok, ok2, ok3, n2 ;
+    Long i, k, ok, ok2, ok3, n2 ;
 
     if (is_scalar)
     {
@@ -899,7 +890,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
     }
     else
     {
-	/* copy double input into Int vector (convert to 0-based) */
+	/* copy double input into Long vector (convert to 0-based) */
 	ok = TRUE ;
 	ok2 = TRUE ;
 	ok3 = TRUE ;
@@ -915,7 +906,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
 
 		for (k = 0 ; k < nz ; k++)
 		{
-		    i = (Int) (((mxLogical *) vector) [k]) ;
+		    i = (Long) (((mxLogical *) vector) [k]) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -927,7 +918,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
 
 		for (k = 0 ; k < nz ; k++)
 		{
-		    i = (Int) (((mxChar *) vector) [k]) ;
+		    i = (Long) (((mxChar *) vector) [k]) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -937,7 +928,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
 
 		for (k = 0 ; k < nz ; k++)
 		{
-		    i = (Int) (((INT8_T *) vector) [k]) ;
+		    i = (Long) (((INT8_T *) vector) [k]) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -947,7 +938,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
 
 		for (k = 0 ; k < nz ; k++)
 		{
-		    i = (Int) (((UINT8_T *) vector) [k]) ;
+		    i = (Long) (((UINT8_T *) vector) [k]) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -957,7 +948,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
 
 		for (k = 0 ; k < nz ; k++)
 		{
-		    i = (Int) (((INT16_T *) vector) [k]) ;
+		    i = (Long) (((INT16_T *) vector) [k]) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -967,7 +958,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
 
 		for (k = 0 ; k < nz ; k++)
 		{
-		    i = (Int) (((UINT16_T *) vector) [k]) ;
+		    i = (Long) (((UINT16_T *) vector) [k]) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -977,7 +968,7 @@ Int sputil_copy_ij		/* returns the dimension, n */
 
 		for (k = 0 ; k < nz ; k++)
 		{
-		    i = (Int) (((INT32_T *) vector) [k]) ;
+		    i = (Long) (((INT32_T *) vector) [k]) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -988,8 +979,8 @@ Int sputil_copy_ij		/* returns the dimension, n */
 		for (k = 0 ; ok3 && k < nz ; k++)
 		{
 		    double y = (((UINT32_T *) vector) [k]) ;
-		    i = (Int) y ;
-		    ok3 = (y < Int_max) ;
+		    i = (Long) y ;
+		    ok3 = (y < Long_max) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -1000,9 +991,9 @@ Int sputil_copy_ij		/* returns the dimension, n */
 		for (k = 0 ; ok2 && ok3 && k < nz ; k++)
 		{
 		    INT64_T y = ((INT64_T *) vector) [k] ;
-		    i = (Int) y ;
+		    i = (Long) y ;
 		    ok2 = (y > 0) ;
-		    ok3 = (y < Int_max) ;
+		    ok3 = (y < Long_max) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -1013,9 +1004,9 @@ Int sputil_copy_ij		/* returns the dimension, n */
 		for (k = 0 ; ok2 && ok3 && k < nz ; k++)
 		{
 		    unsigned INT64_T y = ((unsigned INT64_T *) vector) [k] ;
-		    i = (Int) y ;
+		    i = (Long) y ;
 		    ok2 = (y > 0) ;
-		    ok3 = (y < Int_max) ;
+		    ok3 = (y < Long_max) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -1026,10 +1017,10 @@ Int sputil_copy_ij		/* returns the dimension, n */
 		for (k = 0 ; ok && ok2 && ok3 && k < nz ; k++)
 		{
 		    float y = ((float *) vector) [k] ;
-		    i = (Int) y ;
+		    i = (Long) y ;
 		    ok = (y == (float) i) ;
 		    ok2 = (y > 0) ;
-		    ok3 = (y < Int_max) ;
+		    ok3 = (y < Long_max) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -1040,10 +1031,10 @@ Int sputil_copy_ij		/* returns the dimension, n */
 		for (k = 0 ; ok && ok2 && ok3 && k < nz ; k++)
 		{
 		    double y = ((double *) vector) [k] ;
-		    i = (Int) y ;
+		    i = (Long) y ;
 		    ok = (y == (double) i) ;
 		    ok2 = (y > 0) ;
-		    ok3 = (y < Int_max) ;
+		    ok3 = (y < Long_max) ;
 		    I [k] = i - 1 ;
 		    n2 = MAX (n2, i) ;
 		}
@@ -1102,8 +1093,8 @@ Int sputil_copy_ij		/* returns the dimension, n */
 #define COPY_DENSE_TO_SPARSE(stype) \
 { \
     stype *Sx ; \
-    Sp = (Int *) mxGetJc (S) ; \
-    Si = (Int *) mxGetIr (S) ; \
+    Sp = (Long *) mxGetJc (S) ; \
+    Si = (Long *) mxGetIr (S) ; \
     Sx = (stype *) mxGetData (S) ; \
     nz = 0 ; \
     for (j = 0 ; j < ncol ; j++) \
@@ -1135,8 +1126,8 @@ Int sputil_copy_ij		/* returns the dimension, n */
 mxArray *sputil_dense_to_sparse (const mxArray *arg)
 {
     mxArray *S = NULL ;
-    Int *Sp, *Si ;
-    Int nrow, ncol, nz, i, j ;
+    Long *Sp, *Si ;
+    Long nrow, ncol, nz, i, j ;
 
     nrow = mxGetM (arg) ;
     ncol = mxGetN (arg) ;
@@ -1175,8 +1166,8 @@ mxArray *sputil_dense_to_sparse (const mxArray *arg)
 	    }
 	} 
 	S = mxCreateSparse (nrow, ncol, nz, mxCOMPLEX) ;
-	Sp = (Int *) mxGetJc (S) ;
-	Si = (Int *) mxGetIr (S) ;
+	Sp = (Long *) mxGetJc (S) ;
+	Si = (Long *) mxGetIr (S) ;
 	Sx = mxGetPr (S) ;
 	Sz = mxGetPi (S) ;
 	nz = 0 ;
@@ -1299,11 +1290,11 @@ mxArray *sputil_dense_to_sparse (const mxArray *arg)
 
 cholmod_sparse *sputil_triplet_to_sparse
 (
-    Int nrow, Int ncol, Int nz, Int nzmax,
-    Int i_is_scalar, Int i, void *i_vector, mxClassID i_class,
-    Int j_is_scalar, Int j, void *j_vector, mxClassID j_class,
-    Int s_is_scalar, double x, double z, void *x_vector, double *z_vector,
-    mxClassID s_class, Int s_complex,
+    Long nrow, Long ncol, Long nz, Long nzmax,
+    Long i_is_scalar, Long i, void *i_vector, mxClassID i_class,
+    Long j_is_scalar, Long j, void *j_vector, mxClassID j_class,
+    Long s_is_scalar, double x, double z, void *x_vector, double *z_vector,
+    mxClassID s_class, Long s_complex,
     cholmod_common *cm
 )
 {
@@ -1311,8 +1302,8 @@ cholmod_sparse *sputil_triplet_to_sparse
     cholmod_triplet *T ;
     cholmod_sparse *S ;
     double *Tx, *Tz ;
-    Int *Ti, *Tj ;
-    Int k, x_patch ;
+    Long *Ti, *Tj ;
+    Long k, x_patch ;
 
     /* ---------------------------------------------------------------------- */
     /* allocate the triplet form */
@@ -1532,8 +1523,8 @@ mxArray *sputil_copy_sparse (const mxArray *A)
     double aij, zij ;
     mxArray *S ;
     double *Ax, *Az, *Sx, *Sz ;
-    Int *Ap, *Ai, *Sp, *Si ;
-    Int anz, snz, p, j, nrow, ncol, pend ;
+    Long *Ap, *Ai, *Sp, *Si ;
+    Long anz, snz, p, j, nrow, ncol, pend ;
 
 #ifndef MATLAB6p1_OR_EARLIER
 
@@ -1550,8 +1541,8 @@ mxArray *sputil_copy_sparse (const mxArray *A)
 
     nrow = mxGetM (A) ;
     ncol = mxGetN (A) ;
-    Ap = (Int *) mxGetJc (A) ;
-    Ai = (Int *) mxGetIr (A) ;
+    Ap = (Long *) mxGetJc (A) ;
+    Ai = (Long *) mxGetIr (A) ;
     anz = Ap [ncol] ;
 
     snz = 0 ;
@@ -1579,8 +1570,8 @@ mxArray *sputil_copy_sparse (const mxArray *A)
 
 	/* allocate S */
 	S = mxCreateSparseLogicalMatrix (nrow, ncol, snz) ;
-	Sp = (Int *) mxGetJc (S) ;
-	Si = (Int *) mxGetIr (S) ;
+	Sp = (Long *) mxGetJc (S) ;
+	Si = (Long *) mxGetIr (S) ;
 	Sl = mxGetLogicals (S) ;
 
 	/* copy A into S, dropping zero entries */
@@ -1627,8 +1618,8 @@ mxArray *sputil_copy_sparse (const mxArray *A)
 
 	/* allocate S */
 	S = mxCreateSparse (nrow, ncol, snz, mxCOMPLEX) ;
-	Sp = (Int *) mxGetJc (S) ;
-	Si = (Int *) mxGetIr (S) ;
+	Sp = (Long *) mxGetJc (S) ;
+	Si = (Long *) mxGetIr (S) ;
 	Sx = mxGetPr (S) ;
 	Sz = mxGetPi (S) ;
 
@@ -1673,8 +1664,8 @@ mxArray *sputil_copy_sparse (const mxArray *A)
 
 	/* allocate S */
 	S = mxCreateSparse (nrow, ncol, snz, mxREAL) ;
-	Sp = (Int *) mxGetJc (S) ;
-	Si = (Int *) mxGetIr (S) ;
+	Sp = (Long *) mxGetJc (S) ;
+	Si = (Long *) mxGetIr (S) ;
 	Sx = mxGetPr (S) ;
 
 	/* copy A into S, dropping zero entries */
@@ -1711,8 +1702,8 @@ mxArray *sputil_sparse_to_dense (const mxArray *S)
 {
     mxArray *X ;
     double *Sx, *Sz, *Xx, *Xz ;
-    Int *Sp, *Si ;
-    Int nrow, ncol, i, j, p, pend, j2 ;
+    Long *Sp, *Si ;
+    Long nrow, ncol, i, j, p, pend, j2 ;
 
 #ifndef MATLAB6p1_OR_EARLIER
 
@@ -1728,8 +1719,8 @@ mxArray *sputil_sparse_to_dense (const mxArray *S)
 
     nrow = mxGetM (S) ;
     ncol = mxGetN (S) ;
-    Sp = (Int *) mxGetJc (S) ;
-    Si = (Int *) mxGetIr (S) ;
+    Sp = (Long *) mxGetJc (S) ;
+    Si = (Long *) mxGetIr (S) ;
 
 #ifndef MATLAB6p1_OR_EARLIER
 
@@ -1814,11 +1805,11 @@ void sputil_check_ijvector (const mxArray *arg)
 	/* the i and j arguments for sparse(i,j,s,...) can be sparse, but if so
 	 * they must have no zero entries. */
 	double mn, m, nz ;
-	Int *p, n ;
+	Long *p, n ;
 	m = (double) mxGetM (arg) ;
 	n =  mxGetN (arg) ;
 	mn = m*n ;
-	p = (Int *) mxGetJc (arg) ;
+	p = (Long *) mxGetJc (arg) ;
 	nz = p [n] ;
 	if (mn != nz)
 	{
@@ -1849,7 +1840,7 @@ void sputil_sparse
     mxArray *s_array ;
     cholmod_sparse *S, *Z ;
     cholmod_common Common, *cm ;
-    Int nrow, ncol, k, nz, i_is_scalar, j_is_scalar, s_is_sparse,
+    Long nrow, ncol, k, nz, i_is_scalar, j_is_scalar, s_is_sparse,
 	s_is_scalar, ilen, jlen, slen, nzmax, i, j, s_complex, ndropped ;
     mxClassID i_class, j_class, s_class ;
 
@@ -1917,11 +1908,11 @@ void sputil_sparse
 	/* S = sparse (m,n) */
 	/* ------------------------------------------------------------------ */
 
-	Int *Sp ;
+	Long *Sp ;
 	nrow = sputil_get_integer (pargin [0], FALSE, 0) ;
 	ncol = sputil_get_integer (pargin [1], FALSE, 0) ;
 	pargout [0] = mxCreateSparse (nrow, ncol, 1, mxREAL) ;
-	Sp = (Int *) mxGetJc (pargout [0]) ;
+	Sp = (Long *) mxGetJc (pargout [0]) ;
 	Sp [0] = 0 ;
 
     }
@@ -2086,7 +2077,7 @@ void sputil_sparse
 	    mxLogical *s_logical ;
 	    pargout [0] = mxCreateSparseLogicalMatrix (0, 0, 0) ;
 	    s_logical = cholmod_l_malloc (S->nzmax, sizeof (mxLogical), cm) ;
-	    for (k = 0 ; k < (Int) (S->nzmax) ; k++)
+	    for (k = 0 ; k < (Long) (S->nzmax) ; k++)
 	    {
 		s_logical [k] = 1 ;
 	    }
diff --git a/CHOLMOD/MATLAB/cholmod_matlab.h b/CHOLMOD/MATLAB/cholmod_matlab.h
index 34207d3..ed39805 100644
--- a/CHOLMOD/MATLAB/cholmod_matlab.h
+++ b/CHOLMOD/MATLAB/cholmod_matlab.h
@@ -4,12 +4,12 @@
 
 /* Shared prototypes and definitions for CHOLMOD mexFunctions */
 
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 #ifndef DLONG
 #define DLONG
 #endif
-#define Int UF_long
-#define Int_max UF_long_max
+#define Long SuiteSparse_long
+#define Long_max SuiteSparse_long_max
 
 /* Ensure cholmod_read_* and cholmod_write_* work for large files.  This
  * requires MATLAB 7.0 or later.  If you are using MATLAB 6.5 or earlier,
@@ -52,104 +52,105 @@ extern FILE *sputil_file ;
 
 void sputil_error   /* reports an error */
 (
-    Int error,  /* kind of error */
-    Int is_index /* TRUE if a matrix index, FALSE if a matrix dimension */
+    Long error,     /* kind of error */
+    Long is_index   /* TRUE if a matrix index, FALSE if a matrix dimension */
 ) ;
 
-Int sputil_double_to_int   /* returns integer value of x */
+Long sputil_double_to_int   /* returns integer value of x */
 (
-    double x,	    /* double value to convert */
-    Int is_index, /* TRUE if a matrix index, FALSE if a matrix dimension */
-    Int n	    /* if a matrix index, x cannot exceed this dimension */
+    double x,       /* double value to convert */
+    Long is_index,  /* TRUE if a matrix index, FALSE if a matrix dimension */
+    Long n          /* if a matrix index, x cannot exceed this dimension */
 ) ;
 
-double sputil_get_double (const mxArray *arg) ;	/* like mxGetScalar */
+double sputil_get_double (const mxArray *arg) ; /* like mxGetScalar */
 
-Int sputil_get_integer  /* returns the integer value of a MATLAB argument */
+Long sputil_get_integer  /* returns the integer value of a MATLAB argument */
 (
-    const mxArray *arg,	    /* MATLAB argument to convert */
-    Int is_index,	    /* TRUE if an index, FALSE if a matrix dimension */
-    Int n		    /* maximum value, if an index */
+    const mxArray *arg,     /* MATLAB argument to convert */
+    Long is_index,          /* TRUE if an index, FALSE if a matrix dimension */
+    Long n                  /* maximum value, if an index */
 ) ;
 
 
-Int sputil_copy_ij    /* returns the dimension, n */
+Long sputil_copy_ij     /* returns the dimension, n */
 (
-    Int is_scalar,	/* TRUE if argument is a scalar, FALSE otherwise */
-    Int scalar,		/* scalar value of the argument */
-    void *vector,	/* vector value of the argument */
-    mxClassID category,	/* type of vector */
-    Int nz,		/* length of output vector I */
-    Int n,		/* maximum dimension, EMPTY if not yet known */
-    Int *I		/* vector of length nz to copy into */
+    Long is_scalar,     /* TRUE if argument is a scalar, FALSE otherwise */
+    Long scalar,        /* scalar value of the argument */
+    void *vector,       /* vector value of the argument */
+    mxClassID category, /* type of vector */
+    Long nz,            /* length of output vector I */
+    Long n,             /* maximum dimension, EMPTY if not yet known */
+    Long *I             /* vector of length nz to copy into */
 ) ;
 
 /* converts a triplet matrix to a compressed-column matrix */
 cholmod_sparse *sputil_triplet_to_sparse
 (
-    Int nrow, Int ncol, Int nz, Int nzmax,
-    Int i_is_scalar, Int i, void *i_vector, mxClassID i_class,
-    Int j_is_scalar, Int j, void *j_vector, mxClassID j_class,
-    Int s_is_scalar, double x, double z, void *x_vector, double *z_vector,
-    mxClassID s_class, Int s_complex,
+    Long nrow, Long ncol, Long nz, Long nzmax,
+    Long i_is_scalar, Long i, void *i_vector, mxClassID i_class,
+    Long j_is_scalar, Long j, void *j_vector, mxClassID j_class,
+    Long s_is_scalar, double x, double z, void *x_vector, double *z_vector,
+    mxClassID s_class, Long s_complex,
     cholmod_common *cm
 ) ;
 
 mxArray *sputil_copy_sparse (const mxArray *A) ;    /* copy a sparse matrix */
 
-Int sputil_nelements (const mxArray *arg) ; /* like mxGetNumberOfElements */
+Long sputil_nelements (const mxArray *arg) ; /* like mxGetNumberOfElements */
 
-void sputil_sparse		/* top-level wrapper for "sparse" function */
+void sputil_sparse      /* top-level wrapper for "sparse" function */
 (
-    int	nargout,
+    int nargout,
     mxArray *pargout [ ],
-    int	nargin,
+    int nargin,
     const mxArray *pargin [ ]
 ) ;
 
-void sputil_error_handler (int status, char *file, int line, char *message) ;
+void sputil_error_handler (int status, const char *file, int line,
+    const char *message) ;
 
-void sputil_config (Int spumoni, cholmod_common *cm) ;
+void sputil_config (Long spumoni, cholmod_common *cm) ;
 
 mxArray *sputil_sparse_to_dense (const mxArray *S) ;
 
 cholmod_sparse *sputil_get_sparse
 (
     const mxArray *Amatlab, /* MATLAB version of the matrix */
-    cholmod_sparse *A,	    /* CHOLMOD version of the matrix */
-    double *dummy,	    /* a pointer to a valid scalar double */
-    Int stype		    /* -1: lower, 0: unsymmetric, 1: upper */
+    cholmod_sparse *A,      /* CHOLMOD version of the matrix */
+    double *dummy,          /* a pointer to a valid scalar double */
+    Long stype              /* -1: lower, 0: unsymmetric, 1: upper */
 ) ;
 
 cholmod_dense *sputil_get_dense
 (
     const mxArray *Amatlab, /* MATLAB version of the matrix */
-    cholmod_dense *A,	    /* CHOLMOD version of the matrix */
-    double *dummy	    /* a pointer to a valid scalar double */
+    cholmod_dense *A,       /* CHOLMOD version of the matrix */
+    double *dummy           /* a pointer to a valid scalar double */
 ) ;
 
-mxArray *sputil_put_dense	/* returns the MATLAB version */
+mxArray *sputil_put_dense   /* returns the MATLAB version */
 (
-    cholmod_dense **Ahandle,	/* CHOLMOD version of the matrix */
+    cholmod_dense **Ahandle,    /* CHOLMOD version of the matrix */
     cholmod_common *cm
 ) ;
 
 mxArray *sputil_put_sparse
 (
-    cholmod_sparse **Ahandle,	/* CHOLMOD version of the matrix */
+    cholmod_sparse **Ahandle,   /* CHOLMOD version of the matrix */
     cholmod_common *cm
 ) ;
 
-Int sputil_drop_zeros	    /* drop numerical zeros from a CHOLMOD matrix */
+Long sputil_drop_zeros      /* drop numerical zeros from a CHOLMOD matrix */
 (
     cholmod_sparse *S
 ) ;
 
-mxArray *sputil_put_int	/* copy Int vector to mxArray */
+mxArray *sputil_put_int     /* copy Long vector to mxArray */
 (
-    Int *P,		/* vector to convert */
-    Int n,		/* length of P */
-    Int one_based	/* 1 if convert from 0-based to 1-based, 0 otherwise */
+    Long *P,            /* vector to convert */
+    Long n,             /* length of P */
+    Long one_based      /* 1 if convert from 0-based to 1-based, else 0 */
 ) ;
 
 mxArray *sputil_dense_to_sparse (const mxArray *arg) ;
@@ -159,15 +160,15 @@ void sputil_check_ijvector (const mxArray *arg) ;
 void sputil_trim
 (
     cholmod_sparse *S,
-    Int k,
+    Long k,
     cholmod_common *cm
 ) ;
 
 cholmod_sparse *sputil_get_sparse_pattern
 (
-    const mxArray *Amatlab,	/* MATLAB version of the matrix */
-    cholmod_sparse *Ashallow,	/* shallow CHOLMOD version of the matrix */
-    double *dummy,		/* a pointer to a valid scalar double */
+    const mxArray *Amatlab,     /* MATLAB version of the matrix */
+    cholmod_sparse *Ashallow,   /* shallow CHOLMOD version of the matrix */
+    double *dummy,              /* a pointer to a valid scalar double */
     cholmod_common *cm
 ) ;
 
diff --git a/CHOLMOD/MATLAB/etree2.c b/CHOLMOD/MATLAB/etree2.c
index 13f7e82..22e108b 100644
--- a/CHOLMOD/MATLAB/etree2.c
+++ b/CHOLMOD/MATLAB/etree2.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -37,10 +37,10 @@ void mexFunction
 )
 {
     double dummy = 0 ;
-    Int *Parent ;
+    Long *Parent ;
     cholmod_sparse *A, Amatrix, *S ;
     cholmod_common Common, *cm ;
-    Int n, coletree, c ;
+    Long n, coletree, c ;
     char buf [LEN] ;
 
     /* ---------------------------------------------------------------------- */
@@ -119,7 +119,7 @@ void mexFunction
     /* compute the etree */
     /* ---------------------------------------------------------------------- */
 
-    Parent = cholmod_l_malloc (n, sizeof (Int), cm) ;
+    Parent = cholmod_l_malloc (n, sizeof (Long), cm) ;
     if (A->stype == 1 || coletree)
     {
 	/* symmetric case: find etree of A, using triu(A) */
@@ -155,22 +155,22 @@ void mexFunction
 
     if (nargout > 1)
     {
-	Int *Post ;
-	Post = cholmod_l_malloc (n, sizeof (Int), cm) ;
+	Long *Post ;
+	Post = cholmod_l_malloc (n, sizeof (Long), cm) ;
 	if (cholmod_l_postorder (Parent, n, NULL, Post, cm) != n)
 	{
 	    /* out of memory or Parent invalid */
 	    mexErrMsgTxt ("etree2 postorder failed!") ;
 	}
 	pargout [1] = sputil_put_int (Post, n, 1) ;
-	cholmod_l_free (n, sizeof (Int), Post, cm) ;
+	cholmod_l_free (n, sizeof (Long), Post, cm) ;
     }
 
     /* ---------------------------------------------------------------------- */
     /* free workspace */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_l_free (n, sizeof (Int), Parent, cm) ;
+    cholmod_l_free (n, sizeof (Long), Parent, cm) ;
     cholmod_l_free_sparse (&S, cm) ;
     cholmod_l_finish (cm) ;
     cholmod_l_print_common (" ", cm) ;
diff --git a/CHOLMOD/MATLAB/etree2.m b/CHOLMOD/MATLAB/etree2.m
index 15ad182..14e4952 100644
--- a/CHOLMOD/MATLAB/etree2.m
+++ b/CHOLMOD/MATLAB/etree2.m
@@ -36,7 +36,6 @@ function [parent, post] = etree2 (A, mode)				    %#ok
 %
 %   See also TREELAYOUT, TREEPLOT, ETREEPLOT, ETREE
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('etree2 mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/get_symmetry.m b/CHOLMOD/MATLAB/get_symmetry.m
new file mode 100644
index 0000000..c050e13
--- /dev/null
+++ b/CHOLMOD/MATLAB/get_symmetry.m
@@ -0,0 +1,34 @@
+function result = get_symmetry (A,quick)
+%GET_SYMMETRY: does the same thing as the spsym mexFunction.
+% It's just a lot slower and uses much more memory.  This function
+% is meant for testing and documentation only.
+[m n] = size (A) ;
+if (m ~= n)
+    result = 1 ;            % rectangular
+    return
+end
+if (nargin < 2)
+    quick = 0 ;
+end
+d = diag (A) ;
+posdiag = all (real (d) > 0) & all (imag (d) == 0) ;
+if (quick & ~posdiag)
+    result = 2 ;            % Not a candidate for sparse Cholesky.
+elseif (~isreal (A) & nnz (A-A') == 0)
+    if (posdiag)
+        result = 7 ;        % complex Hermitian, with positive diagonal
+    else
+        result = 4 ;        % complex Hermitian, nonpositive diagonal
+    end
+elseif (nnz (A-A.') == 0)
+    if (posdiag)
+        result = 6 ;        % symmetric with positive diagonal
+    else
+        result = 3 ;        % symmetric, nonpositive diagonal
+    end
+elseif (nnz (A+A.') == 0)
+    result = 5 ;            % skew symmetric
+else
+    result = 2 ;            % unsymmetric
+end
+
diff --git a/CHOLMOD/MATLAB/graph_demo.m b/CHOLMOD/MATLAB/graph_demo.m
index 36ab539..409bf6a 100644
--- a/CHOLMOD/MATLAB/graph_demo.m
+++ b/CHOLMOD/MATLAB/graph_demo.m
@@ -8,15 +8,13 @@ function graph_demo (n)
 %
 %   See also DELSQ, NUMGRID, GPLOT, TREEPLOT
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 1)
     % construct a 60-by-60 grid
     n = 60 ;
 end
 
-figure (1)
 clf
 
 for regions = {'Square', 'C' 'Disc', 'Annulus', 'Heart', 'Butterfly', 'L'}
@@ -91,10 +89,8 @@ for regions = {'Square', 'C' 'Disc', 'Annulus', 'Heart', 'Butterfly', 'L'}
     end
 end
 
-%-------------------------------------------------------------------------------
-
 function my_gplot (A, x, y)
-% my_gplot : like gplot, just a lot faster
+    % my_gplot : like gplot, just a lot faster
 [i, j] = find (A) ;
 [ignore, p] = sort (max(i, j)) ;
 i = i (p) ;
diff --git a/CHOLMOD/MATLAB/lchol.c b/CHOLMOD/MATLAB/lchol.c
index 95a23aa..729fc28 100644
--- a/CHOLMOD/MATLAB/lchol.c
+++ b/CHOLMOD/MATLAB/lchol.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -41,7 +41,7 @@ void mexFunction
     cholmod_sparse Amatrix, *A, *Lsparse ;
     cholmod_factor *L ;
     cholmod_common Common, *cm ;
-    Int n, minor ;
+    Long n, minor ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
diff --git a/CHOLMOD/MATLAB/lchol.m b/CHOLMOD/MATLAB/lchol.m
index 9ffb004..0262736 100644
--- a/CHOLMOD/MATLAB/lchol.m
+++ b/CHOLMOD/MATLAB/lchol.m
@@ -6,13 +6,12 @@ function [L,p,q] = lchol (A)						    %#ok
 %
 %   Example:
 %   L = lchol (A)                 same as L = chol (A')', just faster
-%   [L,p] = lchol (A)             save as [R,p] = chol(A') ; L=R', just faster
+%   [L,p] = lchol (A)             same as [R,p] = chol(A') ; L=R', just faster
 %   [L,p,q] = lchol (A)           factorizes A(q,q) into L*L', where q is a
 %                                 fill-reducing ordering
 %
 %   See also CHOL2, LDLCHOL, CHOL.
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('lchol mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/ldl_normest.m b/CHOLMOD/MATLAB/ldl_normest.m
index 858f5e7..f7f284c 100644
--- a/CHOLMOD/MATLAB/ldl_normest.m
+++ b/CHOLMOD/MATLAB/ldl_normest.m
@@ -9,15 +9,9 @@ function rho = ldl_normest (A, L, D)
 %
 %       rho = norm (A-L*D*L', 1)
 %
-% Authors:  William W. Hager, Math Dept., Univ. of Florida
-%       Timothy A. Davis, CISE Dept., Univ. of Florida
-%       Gainesville, FL, 32611, USA.
-%       based on normest1, contributed on November, 1997
-%
 % See also condest, normest
 
-%   Copyright 2006-2007, William W. Hager and Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2007, William W. Hager and Timothy A. Davis
 
 [m n] = size (A) ;
 
diff --git a/CHOLMOD/MATLAB/ldlchol.c b/CHOLMOD/MATLAB/ldlchol.c
index d1a3159..9c3afc2 100644
--- a/CHOLMOD/MATLAB/ldlchol.c
+++ b/CHOLMOD/MATLAB/ldlchol.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -72,7 +72,7 @@ void mexFunction
     cholmod_sparse Amatrix, *A, *Lsparse ;
     cholmod_factor *L ;
     cholmod_common Common, *cm ;
-    Int n, minor ;
+    Long n, minor ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
@@ -103,7 +103,7 @@ void mexFunction
     /* get inputs */
     /* ---------------------------------------------------------------------- */
 
-    if (nargin > 2 || nargout > 3)
+    if (nargin < 1 || nargin > 2 || nargout > 3)
     {
 	mexErrMsgTxt ("usage: [L,p,q] = ldlchol (A,beta)") ;
     }
diff --git a/CHOLMOD/MATLAB/ldlchol.m b/CHOLMOD/MATLAB/ldlchol.m
index fe2b7ff..17bdf2a 100644
--- a/CHOLMOD/MATLAB/ldlchol.m
+++ b/CHOLMOD/MATLAB/ldlchol.m
@@ -9,7 +9,6 @@ function [LD,p,q] = ldlchol (A,beta)					    %#ok
 %   [LD,p] = ldlchol (A)        similar [R,p] = chol(A), but for L*D*L'
 %   [LD,p,q] = ldlchol (A)      factorizes A(q,q) into L*D*L', where q is a
 %                               fill-reducing ordering
-%
 %   LD = ldlchol (A,beta)       return the LDL' factorization of A*A'+beta*I
 %   [LD,p] = ldlchol (A,beta)   like [R,p] = chol(A*A'+beta+I)
 %   [LD,p,q] = ldlchol (A,beta) factorizes A(q,:)*A(q,:)'+beta*I into L*D*L'
@@ -33,7 +32,6 @@ function [LD,p,q] = ldlchol (A,beta)					    %#ok
 %
 %   See also LDLUPDATE, LDLSOLVE, LDLSPLIT, CHOL2, LCHOL, CHOL, SPARSE2
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('ldlchol mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/ldlsolve.c b/CHOLMOD/MATLAB/ldlsolve.c
index d6579d7..77cce15 100644
--- a/CHOLMOD/MATLAB/ldlsolve.c
+++ b/CHOLMOD/MATLAB/ldlsolve.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -31,12 +31,12 @@ void mexFunction
 )
 {
     double dummy = 0, rcond ;
-    Int *Lp, *Lnz, *Lprev, *Lnext ;
+    Long *Lp, *Lnz, *Lprev, *Lnext ;
     cholmod_sparse *Bs, Bspmatrix, *Xs ;
     cholmod_dense *B, Bmatrix, *X ;
     cholmod_factor *L ;
     cholmod_common Common, *cm ;
-    Int j, k, n, B_is_sparse, head, tail ;
+    Long j, k, n, B_is_sparse, head, tail ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
@@ -103,15 +103,15 @@ void mexFunction
     L->z = mxGetPi (pargin [0]) ;
 
     /* allocate and initialize the rest of L */
-    L->nz = cholmod_l_malloc (n, sizeof (Int), cm) ;
+    L->nz = cholmod_l_malloc (n, sizeof (Long), cm) ;
     Lp = L->p ;
     Lnz = L->nz ;
     for (j = 0 ; j < n ; j++)
     {
 	Lnz [j] = Lp [j+1] - Lp [j] ;
     }
-    L->prev = cholmod_l_malloc (n+2, sizeof (Int), cm) ;
-    L->next = cholmod_l_malloc (n+2, sizeof (Int), cm) ;
+    L->prev = cholmod_l_malloc (n+2, sizeof (Long), cm) ;
+    L->next = cholmod_l_malloc (n+2, sizeof (Long), cm) ;
     Lprev = L->prev ;
     Lnext = L->next ;
 
diff --git a/CHOLMOD/MATLAB/ldlsolve.m b/CHOLMOD/MATLAB/ldlsolve.m
index 0bb97c0..399e341 100644
--- a/CHOLMOD/MATLAB/ldlsolve.m
+++ b/CHOLMOD/MATLAB/ldlsolve.m
@@ -15,7 +15,6 @@ function x = ldlsolve (LD,b)						    %#ok
 %
 %   See also LDLCHOL, LDLUPDATE, LDLSPLIT
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('ldlsolve mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/ldlsplit.m b/CHOLMOD/MATLAB/ldlsplit.m
index 5f86c32..ee74725 100644
--- a/CHOLMOD/MATLAB/ldlsplit.m
+++ b/CHOLMOD/MATLAB/ldlsplit.m
@@ -11,8 +11,7 @@ function [L,D] = ldlsplit (LD)						    %#ok
 %
 %   See also LDLCHOL, LDLSOLVE, LDLUPDATE.
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (LD,1) ;
 D = diag (diag (LD)) ;
diff --git a/CHOLMOD/MATLAB/ldlupdate.c b/CHOLMOD/MATLAB/ldlupdate.c
index 34035d6..ba78dfd 100644
--- a/CHOLMOD/MATLAB/ldlupdate.c
+++ b/CHOLMOD/MATLAB/ldlupdate.c
@@ -3,11 +3,11 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/MATLAB Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/MATLAB Module.  Copyright (C) 2005-2006, Timothy A. Davis.
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -37,11 +37,11 @@ void mexFunction
 {
     double dummy = 0 ;
     double *Lx, *Lx2 ;
-    Int *Li, *Lp, *Li2, *Lp2, *Lnz2, *ColCount ;
+    Long *Li, *Lp, *Li2, *Lp2, *Lnz2, *ColCount ;
     cholmod_sparse Cmatrix, *C, *Lsparse ;
     cholmod_factor *L ;
     cholmod_common Common, *cm ;
-    Int j, k, s, update, n, lnz ;
+    Long j, k, s, update, n, lnz ;
     char buf [LEN] ;
 
     /* ---------------------------------------------------------------------- */
@@ -101,8 +101,8 @@ void mexFunction
     /* ---------------------------------------------------------------------- */
 
     /* get the MATLAB L */
-    Lp = (Int *) mxGetJc (pargin [0]) ;
-    Li = (Int *) mxGetIr (pargin [0]) ;
+    Lp = (Long *) mxGetJc (pargin [0]) ;
+    Li = (Long *) mxGetIr (pargin [0]) ;
     Lx = mxGetPr (pargin [0]) ;
 
     /* allocate the CHOLMOD symbolic L */
diff --git a/CHOLMOD/MATLAB/ldlupdate.m b/CHOLMOD/MATLAB/ldlupdate.m
index a7cb0df..df137a3 100644
--- a/CHOLMOD/MATLAB/ldlupdate.m
+++ b/CHOLMOD/MATLAB/ldlupdate.m
@@ -48,8 +48,7 @@ function LD = ldlupdate (LD,C,updown)					    %#ok
 %   solve, so ldlupdate and ldlsolve simply assume the propertly holds.
 %   ===========================================================================
 
-%   Copyright 2006-2007, Timothy A. Davis, William W. Hager
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('ldlupdate mexFunction not found') ;
 
diff --git a/CHOLMOD/MATLAB/lsubsolve.c b/CHOLMOD/MATLAB/lsubsolve.c
new file mode 100644
index 0000000..73c0a7f
--- /dev/null
+++ b/CHOLMOD/MATLAB/lsubsolve.c
@@ -0,0 +1,247 @@
+/* ========================================================================== */
+/* === CHOLMOD/MATLAB/lsubsolve mexFunction ================================= */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/MATLAB Module.  Copyright (C) 2005-2013, Timothy A. Davis
+ * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
+ * General Public License.  See gpl.txt for a text of the license.
+ * CHOLMOD is also available under other licenses; contact authors for details.
+ * http://www.suitesparse.com
+ * MATLAB(tm) is a Trademark of The MathWorks, Inc.
+ * -------------------------------------------------------------------------- */
+
+/* [x xset] = lsubsolve (L,kind,P,b,system)
+ *
+ * L is a sparse lower triangular matrix, of size n-by-n.  kind = 0 if
+ * L is from an LL' factorization, 1 if from LDL' (in which case L contains
+ * L in the lower part and D on the diagonal).  P is a permutation vector, or
+ * empty (which means P is identity).  b is a sparse column vector.
+ * system is a number between 0 and 8:
+ *
+ * Given L or LD, a permutation P, and a sparse right-hand size b,
+ * solve one of the following systems:
+ *
+ *	Ax=b	    0: CHOLMOD_A	also applies the permutation L->Perm
+ *	LDL'x=b	    1: CHOLMOD_LDLt	does not apply L->Perm
+ *	LDx=b	    2: CHOLMOD_LD
+ *	DL'x=b	    3: CHOLMOD_DLt
+ *	Lx=b	    4: CHOLMOD_L
+ *	L'x=b	    5: CHOLMOD_Lt
+ *	Dx=b	    6: CHOLMOD_D
+ *	x=Pb	    7: CHOLMOD_P	apply a permutation (P is L->Perm)
+ *	x=P'b	    8: CHOLMOD_Pt	apply an inverse permutation
+ *
+ * The solution x is a dense vector, but it is a subset of the entire solution, 
+ * x is zero except where xset is 1.  xset is reach of b (or P*b) in the graph
+ * of L.  If P is empty then it is treated as the identity permutation.
+ *
+ * No zeros can be dropped from the stucture of the Cholesky factorization
+ * because this function gets its elimination tree from L itself.  See ldlchol
+ * for a method of constructing a sparse L with explicit zeros that are
+ * normally dropped by MATLAB.
+ *
+ * This function is only meant for testing the cholmod_solve2 function.  The
+ * cholmod_solve2 function takes O(flops) time, but the setup time in this
+ * mexFunction wrapper can dominate that time.
+ */
+
+#include "cholmod_matlab.h"
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    double dummy = 0, *Px, *Xsetx ;
+    Long *Lp, *Lnz, *Xp, *Xi, xnz, *Perm, *Lprev, *Lnext, *Xsetp ;
+    cholmod_sparse *Bset, Bmatrix, *Xset ;
+    cholmod_dense *Bdense, *X, *Y, *E ;
+    cholmod_factor *L ;
+    cholmod_common Common, *cm ;
+    Long k, j, n, head, tail, xsetlen ;
+    int sys, kind ;
+
+    /* ---------------------------------------------------------------------- */
+    /* start CHOLMOD and set parameters */ 
+    /* ---------------------------------------------------------------------- */
+
+    cm = &Common ;
+    cholmod_l_start (cm) ;
+    sputil_config (SPUMONI, cm) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin != 5 || nargout > 2)
+    {
+	mexErrMsgTxt ("usage: [x xset] = lsubsolve (L,kind,P,b,system)") ;
+    }
+
+    n = mxGetN (pargin [0]) ;
+    if (!mxIsSparse (pargin [0]) || n != mxGetM (pargin [0]))
+    {
+	mexErrMsgTxt ("lsubsolve: L must be sparse and square") ;
+    }
+    if (mxGetNumberOfElements (pargin [1]) != 1)
+    {
+	mexErrMsgTxt ("lsubsolve: kind must be a scalar") ;
+    }
+
+    if (mxIsSparse (pargin [2]) ||
+       !(mxIsEmpty (pargin [2]) || mxGetNumberOfElements (pargin [2]) == n))
+    {
+	mexErrMsgTxt ("lsubsolve: P must be size n, or empty") ;
+    }
+
+    if (mxGetM (pargin [3]) != n || mxGetN (pargin [3]) != 1)
+    {
+	mexErrMsgTxt ("lsubsolve: b wrong dimension") ;
+    }
+    if (!mxIsSparse (pargin [3]))
+    {
+	mexErrMsgTxt ("lxbpattern: b must be sparse") ;
+    }
+    if (mxGetNumberOfElements (pargin [4]) != 1)
+    {
+	mexErrMsgTxt ("lsubsolve: system must be a scalar") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get the inputs */
+    /* ---------------------------------------------------------------------- */
+
+    kind = (int) sputil_get_integer (pargin [1], FALSE, 0) ;
+    sys  = (int) sputil_get_integer (pargin [4], FALSE, 0) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get the sparse b */
+    /* ---------------------------------------------------------------------- */
+
+    /* get sparse matrix B (unsymmetric) */
+    Bset = sputil_get_sparse (pargin [3], &Bmatrix, &dummy, 0) ;
+    Bdense = cholmod_l_sparse_to_dense (Bset, cm) ;
+    Bset->x = NULL ;
+    Bset->z = NULL ;
+    Bset->xtype = CHOLMOD_PATTERN ;
+
+    /* ---------------------------------------------------------------------- */
+    /* construct a shallow copy of the input sparse matrix L */
+    /* ---------------------------------------------------------------------- */
+
+    /* the construction of the CHOLMOD takes O(n) time and memory */
+
+    /* allocate the CHOLMOD symbolic L */
+    L = cholmod_l_allocate_factor (n, cm) ;
+    L->ordering = CHOLMOD_NATURAL ;
+
+    /* get the MATLAB L */
+    L->p = mxGetJc (pargin [0]) ;
+    L->i = mxGetIr (pargin [0]) ;
+    L->x = mxGetPr (pargin [0]) ;
+    L->z = mxGetPi (pargin [0]) ;
+
+    /* allocate and initialize the rest of L */
+    L->nz = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    Lp = L->p ;
+    Lnz = L->nz ;
+    for (j = 0 ; j < n ; j++)
+    {
+	Lnz [j] = Lp [j+1] - Lp [j] ;
+    }
+
+    /* these pointers are not accessed in cholmod_solve2 */
+    L->prev = cholmod_l_malloc (n+2, sizeof (Long), cm) ;
+    L->next = cholmod_l_malloc (n+2, sizeof (Long), cm) ;
+    Lprev = L->prev ;
+    Lnext = L->next ;
+
+    head = n+1 ;
+    tail = n ;
+    Lnext [head] = 0 ;
+    Lprev [head] = -1 ;
+    Lnext [tail] = -1 ;
+    Lprev [tail] = n-1 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	Lnext [j] = j+1 ;
+	Lprev [j] = j-1 ;
+    }
+    Lprev [0] = head ;
+
+    L->xtype = (mxIsComplex (pargin [0])) ? CHOLMOD_ZOMPLEX : CHOLMOD_REAL ;
+    L->nzmax = Lp [n] ;
+
+    /* get the permutation */
+    if (mxIsEmpty (pargin [2]))
+    {
+        L->Perm = NULL ;
+        Perm = NULL ;
+    }
+    else
+    {
+        L->ordering = CHOLMOD_GIVEN ;
+        L->Perm = cholmod_l_malloc (n, sizeof (Long), cm) ;
+        Perm = L->Perm ;
+        Px = mxGetPr (pargin [2]) ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Perm [k] = ((Long) Px [k]) - 1 ;
+        }
+    }
+
+    /* set the kind, LL' or LDL' */
+    L->is_ll = (kind == 0) ;
+    /*
+    cholmod_l_print_factor (L, "L", cm) ;
+    */
+
+    /* ---------------------------------------------------------------------- */
+    /* solve the system */
+    /* ---------------------------------------------------------------------- */
+
+    X = cholmod_l_zeros (n, 1, L->xtype, cm) ;
+    Xset = NULL ;
+    Y = NULL ;
+    E = NULL ;
+
+    cholmod_l_solve2 (sys, L, Bdense, Bset, &X, &Xset, &Y, &E, cm) ;
+
+    cholmod_l_free_dense (&Y, cm) ;
+    cholmod_l_free_dense (&E, cm) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* return result */
+    /* ---------------------------------------------------------------------- */
+
+    pargout [0] = sputil_put_dense (&X, cm) ;
+
+    /* fill numerical values of Xset with one's */
+    Xsetp = Xset->p ;
+    xsetlen = Xsetp [1] ;
+    Xset->x = cholmod_l_malloc (xsetlen, sizeof (double), cm) ;
+    Xsetx = Xset->x ;
+    for (k = 0 ; k < xsetlen ; k++)
+    {
+        Xsetx [k] = 1 ;
+    }
+    Xset->xtype = CHOLMOD_REAL ;
+
+    pargout [1] = sputil_put_sparse (&Xset, cm) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace and the CHOLMOD L, except for what is copied to MATLAB */
+    /* ---------------------------------------------------------------------- */
+
+    L->p = NULL ;
+    L->i = NULL ;
+    L->x = NULL ;
+    L->z = NULL ;
+    cholmod_l_free_factor (&L, cm) ;
+    cholmod_l_finish (cm) ;
+    cholmod_l_print_common (" ", cm) ;
+}
diff --git a/CHOLMOD/MATLAB/lxbpattern.c b/CHOLMOD/MATLAB/lxbpattern.c
new file mode 100644
index 0000000..88e0d5e
--- /dev/null
+++ b/CHOLMOD/MATLAB/lxbpattern.c
@@ -0,0 +1,150 @@
+/* ========================================================================== */
+/* === CHOLMOD/MATLAB/Test/lxbpattern mexFunction =========================== */
+/* ========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * CHOLMOD/MATLAB Module.  Copyright (C) 2005-2013, Timothy A. Davis
+ * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
+ * General Public License.  See gpl.txt for a text of the license.
+ * CHOLMOD is also available under other licenses; contact authors for details.
+ * http://www.suitesparse.com
+ * MATLAB(tm) is a Trademark of The MathWorks, Inc.
+ * -------------------------------------------------------------------------- */
+
+/* Find the nonzero pattern of x=L\b for a sparse vector b.  If numerical
+ * cancellation has caused entries to drop in L, then this function may
+ * give an incorrect result.
+ *
+ * xpattern = lxbpattern (L,b), same as xpattern = find (L\b),
+ * assuming no numerical cancellation, except that xpattern will not
+ * appear in sorted ordering (it appears in topological ordering).
+ *
+ * The core cholmod_lsolve_pattern function takes O(length (xpattern)) time,
+ * except that the initialzations in this mexFunction interface add O(n) time.
+ *
+ * This function is for testing cholmod_lsolve_pattern only.
+ */
+
+#include "cholmod_matlab.h"
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    double dummy = 0 ;
+    Long *Lp, *Lnz, *Xp, *Xi, xnz ;
+    cholmod_sparse *B, Bmatrix, *X ;
+    cholmod_factor *L ;
+    cholmod_common Common, *cm ;
+    Long j, n ;
+
+    /* ---------------------------------------------------------------------- */
+    /* start CHOLMOD and set parameters */ 
+    /* ---------------------------------------------------------------------- */
+
+    cm = &Common ;
+    cholmod_l_start (cm) ;
+    sputil_config (SPUMONI, cm) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin != 2 || nargout > 1)
+    {
+	mexErrMsgTxt ("usage: xpattern = lxbpattern (L,b)") ;
+    }
+
+    n = mxGetN (pargin [0]) ;
+
+    if (!mxIsSparse (pargin [0]) || n != mxGetM (pargin [0]))
+    {
+	mexErrMsgTxt ("lxbpattern: L must be sparse and square") ;
+    }
+    if (n != mxGetM (pargin [1]) || mxGetN (pargin [1]) != 1)
+    {
+	mexErrMsgTxt ("lxbpattern: b wrong dimension") ;
+    }
+    if (!mxIsSparse (pargin [1]))
+    {
+	mexErrMsgTxt ("lxbpattern: b must be sparse") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get the sparse b */
+    /* ---------------------------------------------------------------------- */
+
+    /* get sparse matrix B (unsymmetric) */
+    B = sputil_get_sparse (pargin [1], &Bmatrix, &dummy, 0) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* construct a shallow copy of the input sparse matrix L */
+    /* ---------------------------------------------------------------------- */
+
+    /* the construction of the CHOLMOD takes O(n) time and memory */
+
+    /* allocate the CHOLMOD symbolic L */
+    L = cholmod_l_allocate_factor (n, cm) ;
+    L->ordering = CHOLMOD_NATURAL ;
+
+    /* get the MATLAB L */
+    L->p = mxGetJc (pargin [0]) ;
+    L->i = mxGetIr (pargin [0]) ;
+    L->x = mxGetPr (pargin [0]) ;
+    L->z = mxGetPi (pargin [0]) ;
+
+    /* allocate and initialize the rest of L */
+    L->nz = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    Lp = L->p ;
+    Lnz = L->nz ;
+    for (j = 0 ; j < n ; j++)
+    {
+	Lnz [j] = Lp [j+1] - Lp [j] ;
+    }
+
+    /* L is not truly a valid CHOLMOD sparse factor, since L->prev and next are
+        NULL.  But these pointers are not accessed in cholmod_lsolve_pattern */
+    L->prev = NULL ;
+    L->next = NULL ;
+
+    L->xtype = (mxIsComplex (pargin [0])) ? CHOLMOD_ZOMPLEX : CHOLMOD_REAL ;
+    L->nzmax = Lp [n] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate size-n space for the result X */
+    /* ---------------------------------------------------------------------- */
+
+    X = cholmod_l_allocate_sparse (n, 1, n, FALSE, TRUE, 0, 0, cm) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* find the pattern of X=L\B */
+    /* ---------------------------------------------------------------------- */
+
+    cholmod_l_lsolve_pattern (B, L, X, cm) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* return result, converting to 1-based */ 
+    /* ---------------------------------------------------------------------- */
+
+    Xp = (Long *) X->p ;
+    Xi = (Long *) X->i ;
+    xnz = Xp [1] ;
+    pargout [0] = sputil_put_int (Xi, xnz, 1) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace and the CHOLMOD L, except for what is copied to MATLAB */
+    /* ---------------------------------------------------------------------- */
+
+    L->p = NULL ;
+    L->i = NULL ;
+    L->x = NULL ;
+    L->z = NULL ;
+    cholmod_l_free_factor (&L, cm) ;
+    cholmod_l_free_sparse (&X, cm) ;
+    cholmod_l_finish (cm) ;
+    cholmod_l_print_common (" ", cm) ;
+}
diff --git a/CHOLMOD/MATLAB/metis.c b/CHOLMOD/MATLAB/metis.c
index 0696ae0..a20326a 100644
--- a/CHOLMOD/MATLAB/metis.c
+++ b/CHOLMOD/MATLAB/metis.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * METIS (Copyright 1998, G. Karypis) is not distributed with CHOLMOD.
  * -------------------------------------------------------------------------- */
@@ -37,10 +37,10 @@ void mexFunction
 {
 #ifndef NPARTITION
     double dummy = 0 ;
-    Int *Perm ;
+    Long *Perm ;
     cholmod_sparse *A, Amatrix, *C, *S ;
     cholmod_common Common, *cm ;
-    Int n, transpose, c, postorder ;
+    Long n, transpose, c, postorder ;
     char buf [LEN] ;
 
     /* ---------------------------------------------------------------------- */
@@ -129,7 +129,7 @@ void mexFunction
     /* get workspace */
     /* ---------------------------------------------------------------------- */
 
-    Perm = cholmod_l_malloc (n, sizeof (Int), cm) ;
+    Perm = cholmod_l_malloc (n, sizeof (Long), cm) ;
 
     /* ---------------------------------------------------------------------- */
     /* order the matrix with CHOLMOD's interface to METIS_NodeND */ 
@@ -152,7 +152,7 @@ void mexFunction
     /* free workspace */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_l_free (n, sizeof (Int), Perm, cm) ;
+    cholmod_l_free (n, sizeof (Long), Perm, cm) ;
     cholmod_l_free_sparse (&C, cm) ;
     cholmod_l_free_sparse (&S, cm) ;
     cholmod_l_finish (cm) ;
diff --git a/CHOLMOD/MATLAB/metis.m b/CHOLMOD/MATLAB/metis.m
index 8df183a..1104228 100644
--- a/CHOLMOD/MATLAB/metis.m
+++ b/CHOLMOD/MATLAB/metis.m
@@ -17,7 +17,6 @@ function p = metis (A, mode)						    %#ok
 %
 %   See also NESDIS, BISECT
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('metis mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/mread.c b/CHOLMOD/MATLAB/mread.c
index 5a0e047..85e8336 100644
--- a/CHOLMOD/MATLAB/mread.c
+++ b/CHOLMOD/MATLAB/mread.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -43,10 +43,10 @@ void mexFunction
     cholmod_dense *X = NULL ;
     cholmod_sparse *A = NULL, *Z = NULL ;
     cholmod_common Common, *cm ;
-    Int *Ap = NULL, *Ai ;
+    Long *Ap = NULL, *Ai ;
     double *Ax, *Az = NULL ;
     char filename [MAXLEN] ;
-    Int nz, k, is_complex = FALSE, nrow = 0, ncol = 0, allzero ;
+    Long nz, k, is_complex = FALSE, nrow = 0, ncol = 0, allzero ;
     int mtype ;
 
     /* ---------------------------------------------------------------------- */
@@ -61,7 +61,7 @@ void mexFunction
     /* get inputs */
     /* ---------------------------------------------------------------------- */
 
-    if (nargin > 2 || nargout > 2)
+    if (nargin < 1 || nargin > 2 || nargout > 2)
     {
 	mexErrMsgTxt ("usage: [A Z] = mread (filename, prefer_binary)") ;
     }
diff --git a/CHOLMOD/MATLAB/mread.m b/CHOLMOD/MATLAB/mread.m
index 1490013..d585ddf 100644
--- a/CHOLMOD/MATLAB/mread.m
+++ b/CHOLMOD/MATLAB/mread.m
@@ -18,7 +18,6 @@ function [A, Z] = mread (filename,prefer_binary)			    %#ok
 %
 %   See also load
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('mread mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/mwrite.c b/CHOLMOD/MATLAB/mwrite.c
index 46f4390..c06ba3c 100644
--- a/CHOLMOD/MATLAB/mwrite.c
+++ b/CHOLMOD/MATLAB/mwrite.c
@@ -39,7 +39,7 @@ void mexFunction
     cholmod_sparse Amatrix, Zmatrix, *A, *Z ;
     cholmod_dense Xmatrix, *X ;
     cholmod_common Common, *cm ;
-    Int arg_z, arg_comments, sym ;
+    Long arg_z, arg_comments, sym ;
     char filename [MAXLEN], comments [MAXLEN] ;
 
     /* ---------------------------------------------------------------------- */
diff --git a/CHOLMOD/MATLAB/nesdis.c b/CHOLMOD/MATLAB/nesdis.c
index 3e8150c..446d978 100644
--- a/CHOLMOD/MATLAB/nesdis.c
+++ b/CHOLMOD/MATLAB/nesdis.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * METIS (Copyright 1998, G. Karypis) is not distributed with CHOLMOD.
  * -------------------------------------------------------------------------- */
@@ -63,10 +63,10 @@ void mexFunction
 {
 #ifndef NPARTITION
     double dummy = 0 ;
-    Int *Perm, *Cmember, *CParent ;
+    Long *Perm, *Cmember, *CParent ;
     cholmod_sparse *A, Amatrix, *C, *S ;
     cholmod_common Common, *cm ;
-    Int n, transpose, c, ncomp ;
+    Long n, transpose, c, ncomp ;
     char buf [LEN] ;
 
     /* ---------------------------------------------------------------------- */
@@ -164,9 +164,9 @@ void mexFunction
     /* get workspace */
     /* ---------------------------------------------------------------------- */
 
-    CParent = cholmod_l_malloc (n, sizeof (Int), cm) ;
-    Cmember = cholmod_l_malloc (n, sizeof (Int), cm) ;
-    Perm = cholmod_l_malloc (n, sizeof (Int), cm) ;
+    CParent = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    Cmember = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    Perm = cholmod_l_malloc (n, sizeof (Long), cm) ;
 
     /* ---------------------------------------------------------------------- */
     /* order the matrix with CHOLMOD's nested dissection */
@@ -197,9 +197,9 @@ void mexFunction
     /* free workspace */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_l_free (n, sizeof (Int), Perm, cm) ;
-    cholmod_l_free (n, sizeof (Int), CParent, cm) ;
-    cholmod_l_free (n, sizeof (Int), Cmember, cm) ;
+    cholmod_l_free (n, sizeof (Long), Perm, cm) ;
+    cholmod_l_free (n, sizeof (Long), CParent, cm) ;
+    cholmod_l_free (n, sizeof (Long), Cmember, cm) ;
     cholmod_l_free_sparse (&C, cm) ;
     cholmod_l_free_sparse (&S, cm) ;
     cholmod_l_finish (cm) ;
diff --git a/CHOLMOD/MATLAB/nesdis.m b/CHOLMOD/MATLAB/nesdis.m
index b439861..fef2548 100644
--- a/CHOLMOD/MATLAB/nesdis.m
+++ b/CHOLMOD/MATLAB/nesdis.m
@@ -48,7 +48,6 @@ function [p, cparent, cmember] = nesdis (A, mode, opts)			    %#ok
 %
 %   See also METIS, BISECT, AMD
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('nesdis mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/rename.h b/CHOLMOD/MATLAB/rename.h
deleted file mode 100644
index bd8aace..0000000
--- a/CHOLMOD/MATLAB/rename.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* do not edit this file; generated by cholmod_make */
-#undef log2
-#include "../../metis-4.0/Lib/rename.h"
-#undef log2
-#define log2 METIS__log2
-#include "mex.h"
-#define malloc mxMalloc
-#define free mxFree
-#define calloc mxCalloc
-#define realloc mxRealloc
diff --git a/CHOLMOD/MATLAB/resymbol.c b/CHOLMOD/MATLAB/resymbol.c
index 83426ee..999ba2d 100644
--- a/CHOLMOD/MATLAB/resymbol.c
+++ b/CHOLMOD/MATLAB/resymbol.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -35,11 +35,11 @@ void mexFunction
 {
     double dummy = 0 ;
     double *Lx, *Lx2, *Lz, *Lz2 ;
-    Int *Li, *Lp, *Lnz2, *Li2, *Lp2, *ColCount ;
+    Long *Li, *Lp, *Lnz2, *Li2, *Lp2, *ColCount ;
     cholmod_sparse *A, Amatrix, *Lsparse, *S ;
     cholmod_factor *L ;
     cholmod_common Common, *cm ;
-    Int j, s, n, lnz, is_complex ;
+    Long j, s, n, lnz, is_complex ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
@@ -84,8 +84,8 @@ void mexFunction
     /* ---------------------------------------------------------------------- */
 
     /* get the MATLAB L */
-    Lp = (Int *) mxGetJc (pargin [0]) ;
-    Li = (Int *) mxGetIr (pargin [0]) ;
+    Lp = (Long *) mxGetJc (pargin [0]) ;
+    Li = (Long *) mxGetIr (pargin [0]) ;
     Lx = mxGetPr (pargin [0]) ;
     Lz = mxGetPi (pargin [0]) ;
     is_complex = mxIsComplex (pargin [0]) ;
diff --git a/CHOLMOD/MATLAB/resymbol.m b/CHOLMOD/MATLAB/resymbol.m
index e80d9d9..4d3169c 100644
--- a/CHOLMOD/MATLAB/resymbol.m
+++ b/CHOLMOD/MATLAB/resymbol.m
@@ -13,7 +13,6 @@ function L = resymbol (L, A)						    %#ok
 %
 % See also LCHOL, LDLUPDATE
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('resymbol not found') ;
diff --git a/CHOLMOD/MATLAB/sdmult.c b/CHOLMOD/MATLAB/sdmult.c
index 47dd766..2b9fb09 100644
--- a/CHOLMOD/MATLAB/sdmult.c
+++ b/CHOLMOD/MATLAB/sdmult.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -35,7 +35,7 @@ void mexFunction
     cholmod_sparse *S, Smatrix ;
     cholmod_dense *F, Fmatrix, *C ;
     cholmod_common Common, *cm ;
-    Int srow, scol, frow, fcol, crow, transpose ; 
+    Long srow, scol, frow, fcol, crow, transpose ; 
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
diff --git a/CHOLMOD/MATLAB/sdmult.m b/CHOLMOD/MATLAB/sdmult.m
index e49bff9..d0c79cd 100644
--- a/CHOLMOD/MATLAB/sdmult.m
+++ b/CHOLMOD/MATLAB/sdmult.m
@@ -12,8 +12,7 @@ function C = sdmult (S,F,transpose)					    %#ok
 %
 %   See also MTIMES
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('sdmult mexFunction not found') ;
 
diff --git a/CHOLMOD/MATLAB/septree.c b/CHOLMOD/MATLAB/septree.c
index b7bd25b..1e8b384 100644
--- a/CHOLMOD/MATLAB/septree.c
+++ b/CHOLMOD/MATLAB/septree.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * METIS (Copyright 1998, G. Karypis) is not distributed with CHOLMOD.
  * -------------------------------------------------------------------------- */
@@ -46,10 +46,10 @@ void mexFunction
 {
 #ifndef NPARTITION
     double *p ;
-    Int *Cmember, *CParent ;
+    Long *Cmember, *CParent ;
     cholmod_common Common, *cm ;
     double nd_oksep ;
-    Int nd_small, nc, n, c, j, nc_new ;
+    Long nd_small, nc, n, c, j, nc_new ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set defaults */
@@ -79,8 +79,8 @@ void mexFunction
 	mexErrMsgTxt ("invalid inputs") ;
     }
 
-    CParent = cholmod_l_malloc (nc, sizeof (Int), cm) ;
-    Cmember = cholmod_l_malloc (n, sizeof (Int), cm) ;
+    CParent = cholmod_l_malloc (nc, sizeof (Long), cm) ;
+    Cmember = cholmod_l_malloc (n, sizeof (Long), cm) ;
 
     p = mxGetPr (pargin [0]) ;
     for (c = 0 ; c < nc ; c++)
@@ -128,8 +128,8 @@ void mexFunction
     /* free workspace */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_l_free (nc, sizeof (Int), CParent, cm) ;
-    cholmod_l_free (n, sizeof (Int), Cmember, cm) ;
+    cholmod_l_free (nc, sizeof (Long), CParent, cm) ;
+    cholmod_l_free (n, sizeof (Long), Cmember, cm) ;
     cholmod_l_finish (cm) ;
     cholmod_l_print_common (" ", cm) ;
     /*
diff --git a/CHOLMOD/MATLAB/septree.m b/CHOLMOD/MATLAB/septree.m
index 23dc58e..da4947f 100644
--- a/CHOLMOD/MATLAB/septree.m
+++ b/CHOLMOD/MATLAB/septree.m
@@ -20,7 +20,6 @@ function [cp_new, cmember_new] = septree (cp, cmember, nd_oksep, nd_small)  %#ok
 %
 %   See also NESDIS.
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('septree mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/sparse2.m b/CHOLMOD/MATLAB/sparse2.m
index f19e656..28fcca5 100644
--- a/CHOLMOD/MATLAB/sparse2.m
+++ b/CHOLMOD/MATLAB/sparse2.m
@@ -22,7 +22,6 @@ function S = sparse2 (i,j,s,m,n,nzmax)					    %#ok
 %
 %   See also sparse.
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('sparse2 mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/spsym.c b/CHOLMOD/MATLAB/spsym.c
index e693852..0e12a32 100644
--- a/CHOLMOD/MATLAB/spsym.c
+++ b/CHOLMOD/MATLAB/spsym.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -28,7 +28,7 @@ void mexFunction
     double dummy = 0 ;
     cholmod_sparse Amatrix, *A ;
     cholmod_common Common, *cm ;
-    Int result, quick, option, xmatched, pmatched, nzoffdiag, nzdiag ;
+    Long result, quick, option, xmatched, pmatched, nzoffdiag, nzdiag ;
 
     /* ---------------------------------------------------------------------- */
     /* start CHOLMOD and set parameters */ 
diff --git a/CHOLMOD/MATLAB/spsym.m b/CHOLMOD/MATLAB/spsym.m
index 6221a9b..160abc9 100644
--- a/CHOLMOD/MATLAB/spsym.m
+++ b/CHOLMOD/MATLAB/spsym.m
@@ -19,9 +19,9 @@ function result = spsym (A, quick)					    %#ok
 %       7: if A is Hermitian with real positive diagonal
 %
 %   If quick is nonzero, then the function can return more quickly, as soon as
-%   it finds a diagonal entry that is <= 0 or with a nonzero imaginary part.  In
-%   this case, it returns 1, even if the matrix might otherwise be symmetric or
-%   Hermitian.
+%   it finds a diagonal entry that is <= 0 or with a nonzero imaginary part.
+%   In this case, it returns 2 for a square matrix, even if the matrix might
+%   otherwise be symmetric or Hermitian.
 %
 %   Regardless of the value of "quick", this function returns 6 or 7 if A is
 %   a candidate for sparse Cholesky.
@@ -78,7 +78,20 @@ function result = spsym (A, quick)					    %#ok
 %           result = 2 ;            % unsymmetric
 %       end
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+% With additional outputs, spsym computes the following for square matrices:
+% (in this case "quick" is ignored, and set to zero):
+%
+% [result xmatched pmatched nzoffdiag nnzdiag] = spsym(A)
+%
+%   xmatched is the number of nonzero entries for which A(i,j) = conj(A(j,i)).
+%   pmatched is the number of entries (i,j) for which A(i,j) and A(j,i) are
+%   both in the pattern of A (the value doesn't matter).  nzoffdiag is the
+%   total number of off-diagonal entries in the pattern.  nzdiag is the number
+%   of diagonal entries in the pattern.  If the matrix is rectangular,
+%   xmatched, pmatched, nzoffdiag, and nzdiag are not computed (all of them are
+%   returned as zero).  Note that a matched pair, A(i,j) and A(j,i) for i != j,
+%   is counted twice (once per entry).
+
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('spsym mexFunction not found') ;
diff --git a/CHOLMOD/MATLAB/symbfact2.c b/CHOLMOD/MATLAB/symbfact2.c
index c56dda1..391c656 100644
--- a/CHOLMOD/MATLAB/symbfact2.c
+++ b/CHOLMOD/MATLAB/symbfact2.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MATLAB Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * MATLAB(tm) is a Trademark of The MathWorks, Inc.
  * -------------------------------------------------------------------------- */
 
@@ -51,10 +51,10 @@ void mexFunction
 {
     double dummy = 0 ;
     double *Lx, *px ;
-    Int *Parent, *Post, *ColCount, *First, *Level, *Rp, *Ri, *Lp, *Li, *W ;
+    Long *Parent, *Post, *ColCount, *First, *Level, *Rp, *Ri, *Lp, *Li, *W ;
     cholmod_sparse *A, Amatrix, *F, *Aup, *Alo, *R, *A1, *A2, *L, *S ;
     cholmod_common Common, *cm ;
-    Int n, i, coletree, j, lnz, p, k, height, c ;
+    Long n, i, coletree, j, lnz, p, k, height, c ;
     char buf [LEN] ;
 
     /* ---------------------------------------------------------------------- */
@@ -134,11 +134,11 @@ void mexFunction
     /* compute the etree, its postorder, and the row/column counts */
     /* ---------------------------------------------------------------------- */
 
-    Parent = cholmod_l_malloc (n, sizeof (Int), cm) ;
-    Post = cholmod_l_malloc (n, sizeof (Int), cm) ;
-    ColCount = cholmod_l_malloc (n, sizeof (Int), cm) ;
-    First = cholmod_l_malloc (n, sizeof (Int), cm) ;
-    Level = cholmod_l_malloc (n, sizeof (Int), cm) ;
+    Parent = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    Post = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    ColCount = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    First = cholmod_l_malloc (n, sizeof (Long), cm) ;
+    Level = cholmod_l_malloc (n, sizeof (Long), cm) ;
 
     /* F = A' */
     F = cholmod_l_transpose (A, 0, cm) ;
@@ -321,11 +321,11 @@ void mexFunction
     /* free workspace */
     /* ---------------------------------------------------------------------- */
 
-    cholmod_l_free (n, sizeof (Int), Parent, cm) ;
-    cholmod_l_free (n, sizeof (Int), Post, cm) ;
-    cholmod_l_free (n, sizeof (Int), ColCount, cm) ;
-    cholmod_l_free (n, sizeof (Int), First, cm) ;
-    cholmod_l_free (n, sizeof (Int), Level, cm) ;
+    cholmod_l_free (n, sizeof (Long), Parent, cm) ;
+    cholmod_l_free (n, sizeof (Long), Post, cm) ;
+    cholmod_l_free (n, sizeof (Long), ColCount, cm) ;
+    cholmod_l_free (n, sizeof (Long), First, cm) ;
+    cholmod_l_free (n, sizeof (Long), Level, cm) ;
     cholmod_l_free_sparse (&F, cm) ;
     cholmod_l_free_sparse (&S, cm) ;
     cholmod_l_finish (cm) ;
diff --git a/CHOLMOD/MATLAB/symbfact2.m b/CHOLMOD/MATLAB/symbfact2.m
index f8348b4..3b24cc5 100644
--- a/CHOLMOD/MATLAB/symbfact2.m
+++ b/CHOLMOD/MATLAB/symbfact2.m
@@ -41,8 +41,7 @@ function [count, h, parent, post, L] = symbfact2 (A, mode, Lmode)	    %#ok
 %
 %   See also CHOL, ETREE, TREELAYOUT, SYMBFACT
 
-%   Copyright 2006-2007, Timothy A. Davis
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
 
 error ('symbfact2 mexFunction not found!') ;
 
diff --git a/CHOLMOD/Makefile b/CHOLMOD/Makefile
index 1916688..dd08f74 100644
--- a/CHOLMOD/Makefile
+++ b/CHOLMOD/Makefile
@@ -2,16 +2,18 @@
 # CHOLMOD Makefile
 #-------------------------------------------------------------------------------
 
+VERSION = 3.0.3
+
 # Note: If you do not have METIS, or do not wish to use it in CHOLMOD, you must
-# compile CHOLMOD with the -DNPARTITION flag.  See ../UFconfig/UFconfig.mk.
+# compile CHOLMOD with the -DNPARTITION flag.
+# See ../SuiteSparse_config/SuiteSparse_config.mk .
 
 default: all
 
-include ../UFconfig/UFconfig.mk
+include ../SuiteSparse_config/SuiteSparse_config.mk
 
 # Compile the C-callable libraries and the Demo programs.
 all:
-	( cd Lib ; $(MAKE) )
 	( cd Demo ; $(MAKE) )
 
 # Compile the C-callable libraries only.
@@ -20,40 +22,54 @@ library:
 
 # Remove all files not in the original distribution
 purge:
-	( cd MATLAB ; $(MAKE) purge )
 	( cd Tcov ; $(MAKE) purge )
 	( cd Lib ; $(MAKE) purge )
-#	( cd Valgrind ; $(MAKE) purge )
+	( cd Valgrind ; $(MAKE) dopurge )
 	( cd Demo ; $(MAKE) purge )
 	( cd Doc ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) rename.h *.mex* )
 
 # Remove all files not in the original distribution, except keep the 
 # compiled libraries.
 clean:
-	( cd MATLAB ; $(MAKE) clean )
 	( cd Tcov ; $(MAKE) clean )
 	( cd Lib ; $(MAKE) clean )
 	( cd Valgrind ; $(MAKE) clean )
 	( cd Demo ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) )
 
 distclean: purge
 
 ccode: all
 
-# Compile the MATLAB mexFunctions (you can also use cholmod_make.m in MATLAB)
-mex:
-	( cd MATLAB ; $(MAKE) )
-
 # Run the test coverage suite.  Takes about 40 minutes on a 3.2GHz Pentium.
 # Requires Linux (gcc, gcov).
 cov:
-	( cd Tcov ; $(MAKE) go )
+	( cd Tcov ; $(MAKE) )
 
 # Run the test coverage suite using Valgrind.  This takes a *** long *** time.
 valgrind:
 	( cd Valgrind ; $(MAKE) )
 
 # Compile the C-callable libraries and the Demo programs.
-demo:
+demos:
 	( cd Demo ; $(MAKE) )
 
+# create PDF documents for the original distribution
+docs:
+	( cd Doc    ; $(MAKE) )
+
+# install CHOLMOD
+install:
+	$(CP) Lib/libcholmod.a $(INSTALL_LIB)/libcholmod.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libcholmod.$(VERSION).a libcholmod.a )
+	$(CP) Include/cholmod*.h $(INSTALL_INCLUDE)
+	$(RM) $(INSTALL_INCLUDE)/cholmod_internal.h
+	chmod 644 $(INSTALL_LIB)/libcholmod*.a
+	chmod 644 $(INSTALL_INCLUDE)/cholmod*.h
+
+# uninstall CHOLMOD
+uninstall:
+	$(RM) $(INSTALL_LIB)/libcholmod*.a
+	$(RM) $(INSTALL_INCLUDE)/cholmod*.h
+
diff --git a/CHOLMOD/MatrixOps/License.txt b/CHOLMOD/MatrixOps/License.txt
index 3db84d9..8c23f46 100644
--- a/CHOLMOD/MatrixOps/License.txt
+++ b/CHOLMOD/MatrixOps/License.txt
@@ -1,7 +1,7 @@
 CHOLMOD/MatrixOps Module.  Copyright (C) 2005-2006,
 Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/MatrixOps module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/MatrixOps/cholmod_drop.c b/CHOLMOD/MatrixOps/cholmod_drop.c
index adba83d..69eb0fa 100644
--- a/CHOLMOD/MatrixOps/cholmod_drop.c
+++ b/CHOLMOD/MatrixOps/cholmod_drop.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Drop small entries from A, and entries in the ignored part of A if A
diff --git a/CHOLMOD/MatrixOps/cholmod_horzcat.c b/CHOLMOD/MatrixOps/cholmod_horzcat.c
index 0c731a0..9388e9a 100644
--- a/CHOLMOD/MatrixOps/cholmod_horzcat.c
+++ b/CHOLMOD/MatrixOps/cholmod_horzcat.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Horizontal concatenation, C = [A , B] in MATLAB notation.
diff --git a/CHOLMOD/MatrixOps/cholmod_norm.c b/CHOLMOD/MatrixOps/cholmod_norm.c
index d4ed600..200f5bd 100644
--- a/CHOLMOD/MatrixOps/cholmod_norm.c
+++ b/CHOLMOD/MatrixOps/cholmod_norm.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* r = norm (A), compute the infinity-norm, 1-norm, or 2-norm of a sparse or
@@ -50,11 +50,11 @@ static double abs_value
 	    break ;
 
 	case CHOLMOD_COMPLEX:
-	    s = Common->hypotenuse (Ax [2*p], Ax [2*p+1]) ;
+	    s = SuiteSparse_config.hypot_func (Ax [2*p], Ax [2*p+1]) ;
 	    break ;
 
 	case CHOLMOD_ZOMPLEX:
-	    s = Common->hypotenuse (Ax [p], Az [p]) ;
+	    s = SuiteSparse_config.hypot_func (Ax [p], Az [p]) ;
 	    break ;
     }
     return (s) ;
diff --git a/CHOLMOD/MatrixOps/cholmod_scale.c b/CHOLMOD/MatrixOps/cholmod_scale.c
index 22bc249..2f722c6 100644
--- a/CHOLMOD/MatrixOps/cholmod_scale.c
+++ b/CHOLMOD/MatrixOps/cholmod_scale.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* scale a matrix:  A = diag(s)*A, A*diag(s), s*A, or diag(s)*A*diag(s)
diff --git a/CHOLMOD/MatrixOps/cholmod_sdmult.c b/CHOLMOD/MatrixOps/cholmod_sdmult.c
index 6e85174..fd40b48 100644
--- a/CHOLMOD/MatrixOps/cholmod_sdmult.c
+++ b/CHOLMOD/MatrixOps/cholmod_sdmult.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Sparse matrix times dense matrix:
diff --git a/CHOLMOD/MatrixOps/cholmod_ssmult.c b/CHOLMOD/MatrixOps/cholmod_ssmult.c
index aa02326..fbdf0ce 100644
--- a/CHOLMOD/MatrixOps/cholmod_ssmult.c
+++ b/CHOLMOD/MatrixOps/cholmod_ssmult.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* C = A*B.  Multiply two sparse matrices.
diff --git a/CHOLMOD/MatrixOps/cholmod_submatrix.c b/CHOLMOD/MatrixOps/cholmod_submatrix.c
index 467b679..a412053 100644
--- a/CHOLMOD/MatrixOps/cholmod_submatrix.c
+++ b/CHOLMOD/MatrixOps/cholmod_submatrix.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* C = A (rset,cset), where C becomes length(rset)-by-length(cset) in dimension.
@@ -76,9 +76,9 @@ cholmod_sparse *CHOLMOD(submatrix)
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to subreference */
     Int *rset,		/* set of row indices, duplicates OK */
-    UF_long rsize,	/* size of rset, or -1 for ":" */
+    SuiteSparse_long rsize,	/* size of rset, or -1 for ":" */
     Int *cset,		/* set of column indices, duplicates OK */
-    UF_long csize,	/* size of cset, or -1 for ":" */
+    SuiteSparse_long csize,	/* size of cset, or -1 for ":" */
     int values,		/* if TRUE compute the numerical values of C */
     int sorted,		/* if TRUE then return C with sorted columns */
     /* --------------- */
diff --git a/CHOLMOD/MatrixOps/cholmod_symmetry.c b/CHOLMOD/MatrixOps/cholmod_symmetry.c
index 6770346..6bda9dc 100644
--- a/CHOLMOD/MatrixOps/cholmod_symmetry.c
+++ b/CHOLMOD/MatrixOps/cholmod_symmetry.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Determines if a sparse matrix is rectangular, unsymmetric, symmetric,
@@ -453,6 +453,12 @@ int CHOLMOD(symmetry)
     /* return the results */
     /* ---------------------------------------------------------------------- */
 
+    if (nzdiag < ncol)
+    {
+        /* not all diagonal entries are present */
+        posdiag = FALSE ;
+    }
+
     if (option >= 2)
     {
 	*p_xmatched = xmatched ;
diff --git a/CHOLMOD/MatrixOps/cholmod_vertcat.c b/CHOLMOD/MatrixOps/cholmod_vertcat.c
index e04d5b2..4199a91 100644
--- a/CHOLMOD/MatrixOps/cholmod_vertcat.c
+++ b/CHOLMOD/MatrixOps/cholmod_vertcat.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Vertical concatenation, C = [A ; B] in MATLAB notation.
diff --git a/CHOLMOD/MatrixOps/t_cholmod_sdmult.c b/CHOLMOD/MatrixOps/t_cholmod_sdmult.c
index b653285..7ddd3b6 100644
--- a/CHOLMOD/MatrixOps/t_cholmod_sdmult.c
+++ b/CHOLMOD/MatrixOps/t_cholmod_sdmult.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/MatrixOps Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_sdmult */
diff --git a/CHOLMOD/Modify/License.txt b/CHOLMOD/Modify/License.txt
index cbcf9b3..6e35274 100644
--- a/CHOLMOD/Modify/License.txt
+++ b/CHOLMOD/Modify/License.txt
@@ -1,7 +1,7 @@
 CHOLMOD/Modify Module.
 Copyright (C) 2005-2006, Timothy A. Davis and William W. Hager
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Modify module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Modify/cholmod_rowadd.c b/CHOLMOD/Modify/cholmod_rowadd.c
index f0adc9c..dd7ecf0 100644
--- a/CHOLMOD/Modify/cholmod_rowadd.c
+++ b/CHOLMOD/Modify/cholmod_rowadd.c
@@ -8,7 +8,7 @@
  * The CHOLMOD/Modify Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Adds a row and column to an LDL' factorization, and optionally updates the
diff --git a/CHOLMOD/Modify/cholmod_rowdel.c b/CHOLMOD/Modify/cholmod_rowdel.c
index ee0c1a2..ccf1ce7 100644
--- a/CHOLMOD/Modify/cholmod_rowdel.c
+++ b/CHOLMOD/Modify/cholmod_rowdel.c
@@ -8,7 +8,7 @@
  * The CHOLMOD/Modify Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Deletes a row and column from an LDL' factorization.  The row and column k
diff --git a/CHOLMOD/Modify/cholmod_updown.c b/CHOLMOD/Modify/cholmod_updown.c
index 1b220c9..e3621f4 100644
--- a/CHOLMOD/Modify/cholmod_updown.c
+++ b/CHOLMOD/Modify/cholmod_updown.c
@@ -8,7 +8,7 @@
  * The CHOLMOD/Modify Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Updates/downdates the LDL' factorization (symbolic, then numeric), by
@@ -86,7 +86,7 @@ int CHOLMOD(updown)
     cholmod_common *Common
 )
 {
-    return (CHOLMOD(updown_mask) (update, C, NULL, NULL, L, NULL, NULL,
+    return (CHOLMOD(updown_mask2) (update, C, NULL, NULL, 0, L, NULL, NULL,
 	Common)) ;
 }
 
@@ -115,7 +115,7 @@ int CHOLMOD(updown_solve)
     cholmod_common *Common
 )
 {
-    return (CHOLMOD(updown_mask) (update, C, NULL, NULL, L, X, DeltaB,
+    return (CHOLMOD(updown_mask2) (update, C, NULL, NULL, 0, L, X, DeltaB,
 	Common)) ;
 }
 
@@ -380,7 +380,7 @@ int CHOLMOD(updown_mark)
     cholmod_common *Common
 )
 {
-    return (CHOLMOD(updown_mask) (update, C, colmark, NULL, L, X, DeltaB,
+    return (CHOLMOD(updown_mask2) (update, C, colmark, NULL, 0, L, X, DeltaB,
 	Common)) ;
 }
 
@@ -404,6 +404,31 @@ int CHOLMOD(updown_mask)
     cholmod_common *Common
 )
 {
+    Int maskmark = 0 ;
+    return (CHOLMOD(updown_mask2) (update, C, colmark, mask, maskmark,
+        L, X, DeltaB, Common)) ;
+}
+
+/* ========================================================================== */
+/* === cholmod_updown_mask2 ================================================= */
+/* ========================================================================== */
+
+int CHOLMOD(updown_mask2)
+(
+    /* ---- input ---- */
+    int update,		/* TRUE for update, FALSE for downdate */
+    cholmod_sparse *C,	/* the incoming sparse update */
+    Int *colmark,	/* Int array of size n.  See cholmod_updown.c */
+    Int *mask,		/* size n */
+    Int maskmark,
+    /* ---- in/out --- */
+    cholmod_factor *L,	/* factor to modify */
+    cholmod_dense *X,	/* solution to Lx=b (size n-by-1) */
+    cholmod_dense *DeltaB,  /* change in b, zero on output */
+    /* --------------- */
+    cholmod_common *Common
+)
+{
     double xj, fl ;
     double *Lx, *W, *Xx, *Nx ;
     Int *Li, *Lp, *Lnz, *Cp, *Ci, *Cnz, *Head, *Flag, *Stack, *Lnext, *Iwork,
@@ -1389,19 +1414,19 @@ int CHOLMOD(updown_mask)
 	{
 	    case 1:
 		updown_1_r (update, C, k, L, W, OrderedPath, npaths, mask,
-		    Common) ;
+		    maskmark, Common) ;
 		break ;
 	    case 2:
 		updown_2_r (update, C, k, L, W, OrderedPath, npaths, mask,
-		    Common) ;
+		    maskmark, Common) ;
 		break ;
 	    case 4:
 		updown_4_r (update, C, k, L, W, OrderedPath, npaths, mask,
-		    Common) ;
+		    maskmark, Common) ;
 		break ;
 	    case 8:
 		updown_8_r (update, C, k, L, W, OrderedPath, npaths, mask,
-		    Common) ;
+		    maskmark, Common) ;
 		break ;
 	}
 
diff --git a/CHOLMOD/Modify/t_cholmod_updown.c b/CHOLMOD/Modify/t_cholmod_updown.c
index 094c290..12dfb7e 100644
--- a/CHOLMOD/Modify/t_cholmod_updown.c
+++ b/CHOLMOD/Modify/t_cholmod_updown.c
@@ -8,7 +8,7 @@
  * The CHOLMOD/Modify Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Updates/downdates the LDL' factorization, by computing a new factorization of
@@ -93,6 +93,7 @@ static void NUMERIC (WDIM, r)
     Path_type Path [ ],
     Int npaths,
     Int mask [ ],	/* size n */
+    Int maskmark,
     cholmod_common *Common
 )
 {
@@ -131,7 +132,7 @@ static void NUMERIC (WDIM, r)
 	{
 	    i = Ci [p] ;
 	    ASSERT (i >= 0 && i < (Int) (C->nrow)) ;
-	    if (mask == NULL || mask [i] < 0)
+	    if (mask == NULL || mask [i] < maskmark)
 	    {
 		Wpath [WDIM * i] = Cx [p] ;
 	    }
diff --git a/CHOLMOD/Modify/t_cholmod_updown_numkr.c b/CHOLMOD/Modify/t_cholmod_updown_numkr.c
index 33060e9..df01dc5 100644
--- a/CHOLMOD/Modify/t_cholmod_updown_numkr.c
+++ b/CHOLMOD/Modify/t_cholmod_updown_numkr.c
@@ -8,7 +8,7 @@
  * The CHOLMOD/Modify Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Supernodal numerical update/downdate of rank K = RANK, along a single path.
diff --git a/CHOLMOD/Partition/License.txt b/CHOLMOD/Partition/License.txt
index 8a2bd21..4beeb59 100644
--- a/CHOLMOD/Partition/License.txt
+++ b/CHOLMOD/Partition/License.txt
@@ -1,7 +1,7 @@
 CHOLMOD/Partition Module.
 Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Partition module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Partition/cholmod_camd.c b/CHOLMOD/Partition/cholmod_camd.c
index 51ec0a7..7b2da60 100644
--- a/CHOLMOD/Partition/cholmod_camd.c
+++ b/CHOLMOD/Partition/cholmod_camd.c
@@ -3,11 +3,11 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Partition Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Partition Module.  Copyright (C) 2005-2013, Timothy A. Davis
  * The CHOLMOD/Partition Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD interface to the CAMD ordering routine.  Orders A if the matrix is
@@ -32,11 +32,11 @@
  * Supports any xtype (pattern, real, complex, or zomplex)
  */
 
-#ifndef NPARTITION
+#ifndef NCAMD
 
 #include "cholmod_internal.h"
 #include "camd.h"
-#include "cholmod_partition.h"
+#include "cholmod_camd.h"
 
 #if (CAMD_VERSION < CAMD_VERSION_CODE (2,0))
 #error "CAMD v2.0 or later is required"
@@ -180,17 +180,6 @@ int CHOLMOD(camd)
 	Control [CAMD_AGGRESSIVE] = Common->method [Common->current].aggressive;
     }
 
-    /* CAMD_2 does not use camd_malloc and camd_free, but set these pointers
-     * just be safe. */
-    camd_malloc = Common->malloc_memory ;
-    camd_free = Common->free_memory ;
-    camd_calloc = Common->calloc_memory ;
-    camd_realloc = Common->realloc_memory ;
-
-    /* CAMD_2 doesn't print anything either, but future versions might,
-     * so set the camd_printf pointer too. */
-    camd_printf = Common->print_function ;
-
 #ifdef LONG
     /* DEBUG (camd_l_debug_init ("cholmod_l_camd")) ; */
     camd_l2 (n, C->p,  C->i, Len, C->nzmax, cnz, Nv, Next, Perm, Head, Elen,
diff --git a/CHOLMOD/Partition/cholmod_ccolamd.c b/CHOLMOD/Partition/cholmod_ccolamd.c
index 06d4fd0..3c2bf28 100644
--- a/CHOLMOD/Partition/cholmod_ccolamd.c
+++ b/CHOLMOD/Partition/cholmod_ccolamd.c
@@ -4,11 +4,10 @@
 
 /* -----------------------------------------------------------------------------
  * CHOLMOD/Partition Module. 
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
  * The CHOLMOD/Partition Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD interface to the CCOLAMD ordering routine.  Finds a permutation
@@ -23,11 +22,11 @@
  * Supports any xtype (pattern, real, complex, or zomplex).
  */
 
-#ifndef NPARTITION
+#ifndef NCAMD
 
 #include "cholmod_internal.h"
 #include "ccolamd.h"
-#include "cholmod_partition.h"
+#include "cholmod_camd.h"
 
 #if (CCOLAMD_VERSION < CCOLAMD_VERSION_CODE (2,5))
 #error "CCOLAMD v2.0 or later is required"
diff --git a/CHOLMOD/Partition/cholmod_csymamd.c b/CHOLMOD/Partition/cholmod_csymamd.c
index 7b8044a..961cfc8 100644
--- a/CHOLMOD/Partition/cholmod_csymamd.c
+++ b/CHOLMOD/Partition/cholmod_csymamd.c
@@ -4,11 +4,10 @@
 
 /* -----------------------------------------------------------------------------
  * CHOLMOD/Partition Module.
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
+ * Copyright (C) 2005-2013, Univ. of Florida.  Author: Timothy A. Davis
  * The CHOLMOD/Partition Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD interface to the CSYMAMD ordering routine.  Finds a permutation
@@ -22,11 +21,11 @@
  * Supports any xtype (pattern, real, complex, or zomplex).
  */
 
-#ifndef NPARTITION
+#ifndef NCAMD
 
 #include "cholmod_internal.h"
 #include "ccolamd.h"
-#include "cholmod_partition.h"
+#include "cholmod_camd.h"
 
 #if (CCOLAMD_VERSION < CCOLAMD_VERSION_CODE (2,5))
 #error "CCOLAMD v2.0 or later is required"
@@ -101,14 +100,17 @@ int CHOLMOD(csymamd)
 	knobs [CCOLAMD_DENSE_ROW] =Common->method[Common->current].prune_dense ;
 	knobs [CCOLAMD_AGGRESSIVE]=Common->method[Common->current].aggressive ;
     }
-
     {
 #ifdef LONG
-	csymamd_l (nrow, A->i, A->p, perm, knobs, stats, Common->calloc_memory,
-		Common->free_memory, Cmember, A->stype) ;
+	csymamd_l (nrow, A->i, A->p, perm, knobs, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+                Cmember, A->stype) ;
 #else
-	csymamd (nrow, A->i, A->p, perm, knobs, stats, Common->calloc_memory,
-		Common->free_memory, Cmember, A->stype) ;
+	csymamd (nrow, A->i, A->p, perm, knobs, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+                Cmember, A->stype) ;
 #endif
 	ok = stats [CCOLAMD_STATUS] ;
     }
diff --git a/CHOLMOD/Partition/cholmod_metis.c b/CHOLMOD/Partition/cholmod_metis.c
index 0351543..bc31a1c 100644
--- a/CHOLMOD/Partition/cholmod_metis.c
+++ b/CHOLMOD/Partition/cholmod_metis.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Partition Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD interface to the METIS package (Version 4.0.1):
@@ -76,10 +75,10 @@
 #ifdef DUMP_GRAPH
 #include <stdio.h>
 /* After dumping the graph with this routine, run "onmetis metisgraph" */
-static void dumpgraph (idxtype *Mp, idxtype *Mi, UF_long n,
+static void dumpgraph (idxtype *Mp, idxtype *Mi, SuiteSparse_long n,
     cholmod_common *Common)
 {
-    UF_long i, j, p, nz ;
+    SuiteSparse_long i, j, p, nz ;
     FILE *f ;
     nz = Mp [n] ;
     printf ("Dumping METIS graph n %ld nz %ld\n", n, nz) ;    /* DUMP_GRAPH */
@@ -198,7 +197,7 @@ static int metis_memory_ok
  * checked.
  */
 
-UF_long CHOLMOD(metis_bisector)	/* returns separator size */
+SuiteSparse_long CHOLMOD(metis_bisector)	/* returns separator size */
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to bisect */
@@ -597,7 +596,7 @@ int CHOLMOD(metis)
     nz = Bp [n] ;
 
     /* ---------------------------------------------------------------------- */
-    /* METIS does not have a UF_long integer version */
+    /* METIS does not have a SuiteSparse_long integer version */
     /* ---------------------------------------------------------------------- */
 
 #ifdef LONG
diff --git a/CHOLMOD/Partition/cholmod_nesdis.c b/CHOLMOD/Partition/cholmod_nesdis.c
index 7def8b9..fa823b8 100644
--- a/CHOLMOD/Partition/cholmod_nesdis.c
+++ b/CHOLMOD/Partition/cholmod_nesdis.c
@@ -8,7 +8,6 @@
  * The CHOLMOD/Partition Module is licensed under Version 2.1 of the GNU
  * Lesser General Public License.  See lesser.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
  * -------------------------------------------------------------------------- */
 
 /* CHOLMOD nested dissection and graph partitioning.
@@ -69,7 +68,7 @@
  * cholmod_metis_bisector).
  */
 
-static UF_long partition    /* size of separator or -1 if failure */
+static SuiteSparse_long partition    /* size of separator or -1 if failure */
 (
     /* inputs, not modified on output */
 #ifndef NDEBUG
@@ -590,7 +589,7 @@ static UF_long partition    /* size of separator or -1 if failure */
  * workspace: Flag (nrow)
  */
 
-static UF_long clear_flag (Int *Map, Int cn, cholmod_common *Common)
+static SuiteSparse_long clear_flag (Int *Map, Int cn, cholmod_common *Common)
 {
     Int nrow, i ;
     Int *Flag ;
@@ -840,7 +839,7 @@ static void find_components
  *	and O(nnz(A)) temporary memory space.
  */
 
-UF_long CHOLMOD(bisect)	/* returns # of nodes in separator */
+SuiteSparse_long CHOLMOD(bisect)	/* returns # of nodes in separator */
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to bisect */
@@ -1037,7 +1036,8 @@ UF_long CHOLMOD(bisect)	/* returns # of nodes in separator */
  *	Allocates an additional 3*n*sizeof(Int) temporary workspace
  */
 
-UF_long CHOLMOD(nested_dissection) /* returns # of components, or -1 if error */
+SuiteSparse_long CHOLMOD(nested_dissection)
+    /* returns # of components, or -1 if error */
 (
     /* ---- input ---- */
     cholmod_sparse *A,	/* matrix to order */
@@ -1956,7 +1956,7 @@ UF_long CHOLMOD(nested_dissection) /* returns # of components, or -1 if error */
  * Returns the new number of nodes in the separator tree.
  */
 
-UF_long CHOLMOD(collapse_septree)
+SuiteSparse_long CHOLMOD(collapse_septree)
 (
     /* ---- input ---- */
     size_t n,		/* # of nodes in the graph */
diff --git a/CHOLMOD/README.txt b/CHOLMOD/README.txt
index 193d758..212b0dd 100644
--- a/CHOLMOD/README.txt
+++ b/CHOLMOD/README.txt
@@ -1,5 +1,5 @@
-CHOLMOD: a sparse CHOLesky MODification package 
-Version 1.6, Nov 1, 2007.  Copyright (c) 2005-2007.
+CHOLMOD: a sparse CHOLesky MODification package, Copyright (c) 2005-2014.
+http://www.suitesparse.com
 -----------------------------------------------
 
     CHOLMOD is a set of routines for factorizing sparse symmetric positive
@@ -18,9 +18,9 @@ Some Modules of CHOLMOD are copyrighted by the University of Florida (the
 Core and Partition Modules).  The rest are copyrighted by the authors:
 Timothy A. Davis (all of them), and William W. Hager (the Modify Module).
 
-CHOLMOD relies on several other packages:  AMD, CAMD, COLAMD, CCOLAMD, UFconfig,
-METIS, the BLAS, and LAPACK.  All but METIS, the BLAS, and LAPACK are part of
-SuiteSparse.
+CHOLMOD relies on several other packages:  AMD, CAMD, COLAMD, CCOLAMD,
+SuiteSparse_config, METIS, the BLAS, and LAPACK.  All but METIS, the BLAS, and
+LAPACK are part of SuiteSparse.
 
 AMD is authored by T. Davis, Iain Duff, and Patrick Amestoy.
 COLAMD is authored by T. Davis and Stefan Larimore, with algorithmic design
@@ -37,7 +37,8 @@ Place a copy of the metis-4.0 directory in the same directory that
 contains the CHOLMOD, AMD, COLAMD, and CCOLAMD directories prior to compiling
 with "make".
 
-If you do not wish to use METIS, you must edit UFconfig and change the line:
+If you do not wish to use METIS, you must edit SuiteSparse_config and change
+the line:
 
     CHOLMOD_CONFIG =
 
@@ -45,12 +46,12 @@ to
 
     CHOLMOD_CONFIG = -DNPARTITION
 
-The CHOLMOD, AMD, COLAMD, CCOLAMD, and UFconfig directories must all reside
-in a common parent directory.  To compile all these libraries,
-edit UFconfig/UFconfig.mk to reflect your environment (C compiler, location
-of the BLAS, and so on) and then type "make" in either the CHOLMOD directory
-or in the parent directory of CHOLMOD.  See each package for more details on
-how to compile them.
+The CHOLMOD, AMD, COLAMD, CCOLAMD, and SuiteSparse)config directories must all
+reside in a common parent directory.  To compile all these libraries, edit
+SuiteSparse)config/SuiteSparse)config.mk to reflect your environment (C
+compiler, location of the BLAS, and so on) and then type "make" in either the
+CHOLMOD directory or in the parent directory of CHOLMOD.  See each package for
+more details on how to compile them.
 
 For use in MATLAB (on any system, including Windows):  start MATLAB,
 cd to the CHOLMOD/MATLAB directory, and type cholmod_make in the MATLAB
@@ -61,10 +62,6 @@ also ensures your mexFunctions are compiled with -fexceptions, so that
 exceptions are handled properly (when hitting control-C in the MATLAB command
 window, for example).
 
-If you have MATLAB 7.2 or earlier and use "make mex", you must first edit
-UFconfig/UFconfig.h to remove the "-largeArrayDims" option from the MEX command
-(or just use cholmod_make.m inside MATLAB).
-
 On the Pentium, do NOT use the Intel MKL BLAS prior to MKL Version 8.0 with
 CHOLMOD.  Older versions (prior to 8.0) have a bug in dgemm when computing
 A*B'.  The bug generates a NaN result, when the inputs are well-defined.  Use
diff --git a/CHOLMOD/Supernodal/License.txt b/CHOLMOD/Supernodal/License.txt
index 668c929..d6b6abf 100644
--- a/CHOLMOD/Supernodal/License.txt
+++ b/CHOLMOD/Supernodal/License.txt
@@ -1,7 +1,7 @@
 CHOLMOD/Supernodal Module.
 Copyright (C) 2005-2006, Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Supernodal module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Supernodal/cholmod_super_numeric.c b/CHOLMOD/Supernodal/cholmod_super_numeric.c
index 93d33a2..53c6140 100644
--- a/CHOLMOD/Supernodal/cholmod_super_numeric.c
+++ b/CHOLMOD/Supernodal/cholmod_super_numeric.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Supernodal Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Computes the Cholesky factorization of A+beta*I or A*F+beta*I.  Only the
@@ -61,10 +61,25 @@
 #include "cholmod_internal.h"
 #include "cholmod_supernodal.h"
 
+#ifdef GPU_BLAS
+#include "cholmod_gpu.h"
+#endif
+
 /* ========================================================================== */
-/* === TEMPLATE ============================================================= */
+/* === TEMPLATE codes for GPU and regular numeric factorization ============= */
 /* ========================================================================== */
 
+#ifdef DLONG
+#ifdef GPU_BLAS
+#define REAL
+#include "../GPU/t_cholmod_gpu.c"
+#define COMPLEX
+#include "../GPU/t_cholmod_gpu.c"
+#define ZOMPLEX
+/* no #include of "../GPU/t_cholmod_gpu.c".  Zomplex case relies on complex */
+#endif
+#endif
+
 #define REAL
 #include "t_cholmod_super_numeric.c"
 #define COMPLEX
diff --git a/CHOLMOD/Supernodal/cholmod_super_solve.c b/CHOLMOD/Supernodal/cholmod_super_solve.c
index 2d81222..ff6b8a9 100644
--- a/CHOLMOD/Supernodal/cholmod_super_solve.c
+++ b/CHOLMOD/Supernodal/cholmod_super_solve.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Supernodal Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Solve Lx=b or L'x=b for a supernodal factorization.  These routines do not
@@ -54,8 +54,6 @@ int CHOLMOD(super_lsolve)   /* TRUE if OK, FALSE if BLAS overflow occured */
     cholmod_common *Common
 )
 {
-    int blas_ok = TRUE ;
-
     /* ---------------------------------------------------------------------- */
     /* check inputs */
     /* ---------------------------------------------------------------------- */
@@ -108,19 +106,19 @@ int CHOLMOD(super_lsolve)   /* TRUE if OK, FALSE if BLAS overflow occured */
     {
 
 	case CHOLMOD_REAL:
-	    blas_ok = r_cholmod_super_lsolve (L, X, E, Common) ;
+	    r_cholmod_super_lsolve (L, X, E, Common) ;
 	    break ;
 
 	case CHOLMOD_COMPLEX:
-	    blas_ok = c_cholmod_super_lsolve (L, X, E, Common) ;
+	    c_cholmod_super_lsolve (L, X, E, Common) ;
 	    break ;
     }
 
-    if (CHECK_BLAS_INT && !blas_ok)
+    if (CHECK_BLAS_INT && !Common->blas_ok)
     {
 	ERROR (CHOLMOD_TOO_LARGE, "problem too large for the BLAS") ;
     }
-    return (blas_ok) ;
+    return (Common->blas_ok) ;
 }
 
 
@@ -149,8 +147,6 @@ int CHOLMOD(super_ltsolve)  /* TRUE if OK, FALSE if BLAS overflow occured */
     cholmod_common *Common
 )
 {
-    int blas_ok = TRUE ;
-
     /* ---------------------------------------------------------------------- */
     /* check inputs */
     /* ---------------------------------------------------------------------- */
@@ -203,19 +199,18 @@ int CHOLMOD(super_ltsolve)  /* TRUE if OK, FALSE if BLAS overflow occured */
     {
 
 	case CHOLMOD_REAL:
-	    blas_ok = r_cholmod_super_ltsolve (L, X, E, Common) ;
+	    r_cholmod_super_ltsolve (L, X, E, Common) ;
 	    break ;
 
 	case CHOLMOD_COMPLEX:
-	    blas_ok = c_cholmod_super_ltsolve (L, X, E, Common) ;
+	    c_cholmod_super_ltsolve (L, X, E, Common) ;
 	    break ;
     }
 
-    if (CHECK_BLAS_INT && !blas_ok)
+    if (CHECK_BLAS_INT && !Common->blas_ok)
     {
 	ERROR (CHOLMOD_TOO_LARGE, "problem too large for the BLAS") ;
     }
-
-    return (blas_ok) ;
+    return (Common->blas_ok) ;
 }
 #endif
diff --git a/CHOLMOD/Supernodal/cholmod_super_symbolic.c b/CHOLMOD/Supernodal/cholmod_super_symbolic.c
index c7cd0c7..ad8037c 100644
--- a/CHOLMOD/Supernodal/cholmod_super_symbolic.c
+++ b/CHOLMOD/Supernodal/cholmod_super_symbolic.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Supernodal Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Supernodal symbolic analysis of the LL' factorization of A, A*A',
@@ -45,19 +45,37 @@
 #include "cholmod_internal.h"
 #include "cholmod_supernodal.h"
 
+#ifdef GPU_BLAS
+#include "cholmod_gpu.h"
+#endif
 
 /* ========================================================================== */
 /* === subtree ============================================================== */
 /* ========================================================================== */
 
 /* In the symmetric case, traverse the kth row subtree from the nonzeros in
- * A (0:k,k) and add the new entries found to the pattern of the kth row of L.
+ * A (0:k1-1,k) and add the new entries found to the pattern of the kth row
+ * of L.  The current supernode s contains the diagonal block k1:k2-1, so it
+ * can be skipped.
+ *
+ * In the unsymmetric case, the nonzero pattern of A*F is computed one column
+ * at a time (thus, the total time spent in this function is bounded below by
+ * the time taken to multiply A*F, which can be high if A is tall and thin).
+ * The kth column is A*F(:,k), or the set union of all columns A(:,j) for which
+ * F(j,k) is nonzero.  This routine is called once for each entry j.  Only the
+ * upper triangular part is needed, so only A (0:k1-1,j) is accessed, where
+ * k1:k2-1 are the columns of the current supernode s (k is in the range k1 to
+ * k2-1).
+ *
+ * If A is sorted, then the total time taken by this function is proportional
+ * to the number of nonzeros in the strictly block upper triangular part of A,
+ * plus the number of entries in the strictly block lower triangular part of
+ * the supernodal part of L.  This excludes entries in the diagonal blocks
+ * corresponding to the columns in each supernode.  That is, if k1:k2-1 are
+ * in a single supernode, then only A (0:k1-1,k1:k2-1) are accessed.
  *
- * In the unsymmetric case, the nonzero pattern of A*F is computed one column at
- * one column at a time.  The kth column is A*F(:,k), or the set union of all
- * columns A(:,j) for which F(j,k) is nonzero.  This routine is called once
- * for each entry j.  Only the upper triangular part is needed, so only
- * A (0:k,j) is accessed.
+ * For the unsymmetric case, only the strictly block upper triangular part
+ * of A*F is constructed.
  *
  * Only adds column indices corresponding to the leading columns of each
  * relaxed supernode.
@@ -74,6 +92,8 @@ static void subtree
     Int SuperMap [ ],
     Int Sparent [ ],
     Int mark,
+    Int sorted,         /* true if the columns of A are sorted */
+    Int k1,             /* only consider A (0:k1-1,k) */
 
     /* input/output: */
     Int Flag [ ],
@@ -84,10 +104,11 @@ static void subtree
     Int p, pend, i, si ;
     p = Ap [j] ;
     pend = (Anz == NULL) ? (Ap [j+1]) : (p + Anz [j]) ;
+
     for ( ; p < pend ; p++)
     {
 	i = Ai [p] ;
-	if (i < k)
+	if (i < k1)
 	{
 	    /* (i,k) is an entry in the upper triangular part of A or A*F'.
 	     * symmetric case:   A(i,k) is nonzero (j=k).
@@ -106,6 +127,10 @@ static void subtree
 		Flag [si] = mark ;
 	    }
 	}
+        else if (sorted)
+        {
+            break ;
+        }
     }
 }
 
@@ -124,21 +149,17 @@ static void subtree
 
 
 /* ========================================================================== */
-/* === cholmod_super_symbolic =============================================== */
+/* === cholmod_super_symbolic2 ============================================== */
 /* ========================================================================== */
 
-/* Analyzes A, AA', or A(:,f)*A(:,f)' in preparation for a supernodal numeric
- * factorization.  The user need not call this directly; cholmod_analyze is
- * a "simple" wrapper for this routine.
- *
- * workspace: Flag (nrow), Head (nrow), Iwork (2*nrow),
- * and temporary space of size 3*nfsuper*sizeof(Int), where nfsuper <= n
- * is the number of fundamental supernodes.
- */
+/* Analyze for supernodal Cholesky or multifrontal QR. */
 
-int CHOLMOD(super_symbolic)
+int CHOLMOD(super_symbolic2)
 (
     /* ---- input ---- */
+    int for_whom,       /* FOR_SPQR     (0): for SPQR but not GPU-accelerated
+                           FOR_CHOLESKY (1): for Cholesky (GPU or not)
+                           FOR_SPQRGPU  (2): for SPQR with GPU acceleration */
     cholmod_sparse *A,	/* matrix to analyze */
     cholmod_sparse *F,	/* F = A' or A(:,f)' */
     Int *Parent,	/* elimination tree */
@@ -156,9 +177,14 @@ int CHOLMOD(super_symbolic)
     Int nsuper, d, n, j, k, s, mark, parent, p, pend, k1, k2, packed, nscol,
 	nsrow, ndrow1, ndrow2, stype, ssize, xsize, sparent, plast, slast,
 	csize, maxcsize, ss, nscol0, nscol1, ns, nfsuper, newzeros, totzeros,
-	merge, snext, esize, maxesize, nrelax0, nrelax1, nrelax2 ;
+	merge, snext, esize, maxesize, nrelax0, nrelax1, nrelax2, Asorted ;
     size_t w ;
-    int ok = TRUE ;
+    int ok = TRUE, find_xsize ;
+    const char* env_use_gpu;
+    const char* env_max_bytes;
+    size_t max_bytes;
+    const char* env_max_fraction;
+    double max_fraction;
 
     /* ---------------------------------------------------------------------- */
     /* check inputs */
@@ -213,6 +239,96 @@ int CHOLMOD(super_symbolic)
     ASSERT (CHOLMOD(dump_work) (TRUE, TRUE, 0, Common)) ;
 
     /* ---------------------------------------------------------------------- */
+    /* allocate GPU workspace */
+    /* ---------------------------------------------------------------------- */
+
+    L->useGPU = 0 ;     /* only used for Cholesky factorization, not QR */
+
+#ifdef GPU_BLAS
+
+    /* GPU module is installed */
+    if ( for_whom == CHOLMOD_ANALYZE_FOR_CHOLESKY )
+    {
+        /* only allocate GPU workspace for supernodal Cholesky, and only when
+           the GPU is requested and available. */
+
+        max_bytes = 0;
+        max_fraction = 0;
+
+#ifdef DLONG
+        if ( Common->useGPU == EMPTY )
+        {
+            /* useGPU not explicity requested by the user, but not explicitly
+             * prohibited either.  Query OS environment variables for request.*/
+            env_use_gpu  = getenv("CHOLMOD_USE_GPU");
+
+            if ( env_use_gpu )
+            {
+                /* CHOLMOD_USE_GPU environment variable is set to something */
+                if ( atoi ( env_use_gpu ) == 0 )
+                {
+                    Common->useGPU = 0; /* don't use the gpu */
+                }
+                else
+                {
+                    Common->useGPU = 1; /* use the gpu */
+                    env_max_bytes = getenv("CHOLMOD_GPU_MEM_BYTES");
+                    env_max_fraction = getenv("CHOLMOD_GPU_MEM_FRACTION");
+                    if ( env_max_bytes )
+                    {
+                        max_bytes = atol(env_max_bytes);
+                        Common->maxGpuMemBytes = max_bytes;
+                    }
+                    if ( env_max_fraction )
+                    {
+                        max_fraction = atof (env_max_fraction);
+                        if ( max_fraction < 0 ) max_fraction = 0;
+                        if ( max_fraction > 1 ) max_fraction = 1;
+                        Common->maxGpuMemFraction = max_fraction;
+                    }	  
+                }
+            }
+            else
+            {
+                /* CHOLMOD_USE_GPU environment variable not set, so no GPU
+                 * acceleration will be used */
+                Common->useGPU = 0;
+            }
+            /* fprintf (stderr, "useGPU queried: %d\n", Common->useGPU) ; */
+        }
+
+        /* Ensure that a GPU is present */
+        if ( Common->useGPU == 1 )
+        {
+            /* fprintf (stderr, "\nprobe GPU:\n") ; */
+            Common->useGPU = CHOLMOD(gpu_probe) (Common); 
+            /* fprintf (stderr, "\nprobe GPU: result %d\n", Common->useGPU) ; */
+        }
+
+        if ( Common->useGPU == 1 )
+        {
+            /* Cholesky + GPU, so allocate space */
+            /* fprintf (stderr, "allocate GPU:\n") ; */
+            CHOLMOD(gpu_allocate) ( Common );
+            /* fprintf (stderr, "allocate GPU done\n") ; */
+        }
+#else
+        /* GPU acceleration is only supported for long int version */
+        Common->useGPU = 0;
+#endif
+
+        /* Cache the fact that the symbolic factorization supports 
+         * GPU acceleration */
+        L->useGPU = Common->useGPU;
+
+    }
+
+#else
+    /* GPU module is not installed */
+    Common->useGPU = 0 ;
+#endif
+
+    /* ---------------------------------------------------------------------- */
     /* get inputs */
     /* ---------------------------------------------------------------------- */
 
@@ -304,7 +420,16 @@ int CHOLMOD(super_symbolic)
 	/* check if j starts new supernode, or in the same supernode as j-1 */
 	if (Parent [j-1] != j	    /* parent of j-1 is not j */
 	    || (ColCount [j-1] != ColCount [j] + 1) /* j-1 not subset of j*/
-	    || Wi [j] > 1)	    /* j has more than one child */
+	    || Wi [j] > 1	    /* j has more than one child */
+#ifdef GPU_BLAS
+	    /* Ensure that the supernode will fit in the GPU buffers */
+	    /* Data size of 16 bytes must be assumed for case of PATTERN */
+	    || (for_whom == CHOLMOD_ANALYZE_FOR_CHOLESKY && L->useGPU && 
+		 (j-Super[nfsuper-1]+1) * 
+		 ColCount[Super[nfsuper-1]] * sizeof(double) * 2 >= 
+		 Common->devBuffSize)
+#endif
+	    )
 	{
 	    /* j is the leading node of a supernode */
 	    Super [nfsuper++] = j ;
@@ -364,6 +489,8 @@ int CHOLMOD(super_symbolic)
 
     for (s = nfsuper-2 ; s >= 0 ; s--)
     {
+        double lnz1 ;
+
 	/* should supernodes s and s+1 merge into a new node s? */
 	PRINT1 (("\n========= Check relax of s "ID" and s+1 "ID"\n", s, s+1)) ;
 
@@ -399,6 +526,7 @@ int CHOLMOD(super_symbolic)
 	PRINT2 (("ns "ID" nscol0 "ID" nscol1 "ID"\n", ns, nscol0, nscol1)) ;
 
 	totzeros = Zeros [s+1] ;	/* current # of zeros in s+1 */
+	lnz1 = (double) (Snz [s+1]) ;	/* # entries in leading column of s+1 */
 
 	/* determine if supernodes s and s+1 should merge */
 	if (ns <= nrelax0)
@@ -410,7 +538,6 @@ int CHOLMOD(super_symbolic)
 	{
 	    /* use double to avoid integer overflow */
 	    double lnz0 = Snz [s] ;	/* # entries in leading column of s */
-	    double lnz1 = Snz [s+1] ;	/* # entries in leading column of s+1 */
 	    double xnewzeros = nscol0 * (lnz1 + nscol0 - lnz0) ;
 
 	    /* use Int for the final update of Zeros [s] below */
@@ -454,6 +581,18 @@ int CHOLMOD(super_symbolic)
 	    }
 	}
 
+#ifdef GPU_BLAS
+	if ( for_whom == CHOLMOD_ANALYZE_FOR_CHOLESKY && L->useGPU ) {
+	  /* Ensure that the aggregated supernode fits in the device 
+	     supernode buffers */
+	  double xns = (double) ns;
+	  if ( ((xns * xns) + xns * (lnz1 - nscol1))*sizeof(double)*2  >= 
+	       Common->devBuffSize ) {
+	    merge = FALSE;
+	  }
+	}
+#endif
+
 	if (merge)
 	{
 	    PRINT1 (("Merge node s ("ID") and s+1 ("ID")\n", s, s+1)) ;
@@ -522,23 +661,33 @@ int CHOLMOD(super_symbolic)
     ssize = 0 ;
     xsize = 0 ;
     xxsize = 0 ;
+    find_xsize = for_whom == CHOLMOD_ANALYZE_FOR_CHOLESKY ||
+                 for_whom == CHOLMOD_ANALYZE_FOR_SPQRGPU ;
     for (s = 0 ; s < nsuper ; s++)
     {
 	nscol = Super [s+1] - Super [s] ;
 	nsrow = Snz [s] ;
 	ASSERT (nscol > 0) ;
 	ssize += nsrow ;
-	xsize += nscol * nsrow ;
-	/* also compute xsize in double to guard against Int overflow */
-	xxsize += ((double) nscol) * ((double) nsrow) ;
-	if (xxsize > Int_max)
+        if (find_xsize)
+        {
+            xsize += nscol * nsrow ;
+            /* also compute xsize in double to guard against Int overflow */
+            xxsize += ((double) nscol) * ((double) nsrow) ;
+        }
+	if (ssize < 0 ||(find_xsize && xxsize > Int_max))
 	{
-	    /* Int overflow, clear workspace and return */
+	    /* Int overflow, clear workspace and return.
+               QR factorization will not use xxsize, so that error is ignored.
+               For Cholesky factorization, however, memory of space xxsize
+               will be allocated, so this is a failure.  Both QR and Cholesky
+               fail if ssize overflows. */
 	    ERROR (CHOLMOD_TOO_LARGE, "problem too large") ;
 	    FREE_WORKSPACE ;
 	    return (FALSE) ;
 	}
-	ASSERT (ssize > 0 && xsize > 0) ;
+	ASSERT (ssize > 0) ;
+        ASSERT (IMPLIES (find_xsize, xsize > 0)) ;
     }
     xsize = MAX (1, xsize) ;
     ssize = MAX (1, ssize) ;
@@ -599,16 +748,28 @@ int CHOLMOD(super_symbolic)
     /* construct pointers for supernodal values (L->px) */
     /* ---------------------------------------------------------------------- */
 
-    p = 0 ;
-    for (s = 0 ; s < nsuper ; s++)
+    if (for_whom == CHOLMOD_ANALYZE_FOR_CHOLESKY ||
+        for_whom == CHOLMOD_ANALYZE_FOR_SPQRGPU)
     {
-	nscol = Super [s+1] - Super [s] ;   /* number of columns in s */
-	nsrow = Snz [s] ;		    /* # of rows, incl triangular part*/
-	Lpx [s] = p ;			    /* pointer to numerical part of s */
-	p += nscol * nsrow ;
+        Lpx [0] = 0 ;
+        p = 0 ;
+        for (s = 0 ; s < nsuper ; s++)
+        {
+            nscol = Super [s+1] - Super [s] ;   /* number of columns in s */
+            nsrow = Snz [s] ;           /* # of rows, incl triangular part*/
+            Lpx [s] = p ;               /* pointer to numerical part of s */
+            p += nscol * nsrow ;
+        }
+        Lpx [s] = p ;
+        ASSERT ((Int) (L->xsize) == MAX (1,p)) ;
+    }
+    else
+    {
+        /* L->px is not needed for non-GPU accelerated QR factorization (it may
+         * lead to Int overflow, anyway, if xsize caused Int overflow above).
+         * Use a magic number to tell cholmod_check_factor to ignore Lpx. */
+        Lpx [0] = 123456 ;
     }
-    Lpx [s] = p ;
-    ASSERT ((Int) (L->xsize) == MAX (1,p)) ;
 
     /* Snz no longer needed ] */
 
@@ -622,6 +783,8 @@ int CHOLMOD(super_symbolic)
 	Lpi2 [s] = Lpi [s] ;
     }
 
+    Asorted = A->sorted ;
+
     for (s = 0 ; s < nsuper ; s++)
     {
 	/* sth supernode is in columns k1 to k2-1.
@@ -657,22 +820,21 @@ int CHOLMOD(super_symbolic)
 	    if (stype != 0)
 	    {
 		subtree (k, k, Ap, Ai, Anz, SuperMap, Sparent, mark,
-			Flag, Ls, Lpi2) ;
+                        Asorted, k1, Flag, Ls, Lpi2) ;
 	    }
 	    else
 	    {
-		/* for each nonzero in F (k,:) do */
+		/* for each j nonzero in F (:,k) do */
 		p = Fp [k] ;
 		pend = (packed) ? (Fp [k+1]) : (p + Fnz [k]) ;
 		for ( ; p < pend ; p++)
 		{
 		    subtree (Fj [p], k, Ap, Ai, Anz, SuperMap, Sparent, mark,
-			    Flag, Ls, Lpi2) ;
+			    Asorted, k1, Flag, Ls, Lpi2) ;
 		}
 	    }
 	}
     }
-
 #ifndef NDEBUG
     for (s = 0 ; s < nsuper ; s++)
     {
@@ -747,35 +909,40 @@ int CHOLMOD(super_symbolic)
     maxcsize = 1 ;
     maxesize = 1 ;
 
-    /* do not need to guard csize against Int overflow if xsize is OK */
+    /* Do not need to guard csize against Int overflow since xsize is OK. */
 
-    for (d = 0 ; d < nsuper ; d++)
+    if (for_whom == CHOLMOD_ANALYZE_FOR_CHOLESKY ||
+        for_whom == CHOLMOD_ANALYZE_FOR_SPQRGPU)
     {
-	nscol = Super [d+1] - Super [d] ;
-	p = Lpi [d] + nscol ;
-	plast = p ;
-	pend = Lpi [d+1] ;
-	esize = pend - p ;
-	maxesize = MAX (maxesize, esize) ;
-	slast = (p == pend) ? (EMPTY) : (SuperMap [Ls [p]]) ;
-	for ( ; p <= pend ; p++)
-	{
-	    s = (p == pend) ? (EMPTY) : (SuperMap [Ls [p]]) ;
-	    if (s != slast)
-	    {
-		/* row i is the start of a new supernode */
-		ndrow1 = p - plast ;
-		ndrow2 = pend - plast ;
-		csize = ndrow2 * ndrow1 ;
-		PRINT1 (("Supernode "ID" ancestor "ID" C: "ID"-by-"ID"  csize "
-			""ID"\n", d, slast, ndrow1, ndrow2, csize)) ;
-		maxcsize = MAX (maxcsize, csize) ;
-		plast = p ;
-		slast = s ;
-	    }
-	}
+        /* this is not needed for non-GPU accelerated QR factorization */
+        for (d = 0 ; d < nsuper ; d++)
+        {
+            nscol = Super [d+1] - Super [d] ;
+            p = Lpi [d] + nscol ;
+            plast = p ;
+            pend = Lpi [d+1] ;
+            esize = pend - p ;
+            maxesize = MAX (maxesize, esize) ;
+            slast = (p == pend) ? (EMPTY) : (SuperMap [Ls [p]]) ;
+            for ( ; p <= pend ; p++)
+            {
+                s = (p == pend) ? (EMPTY) : (SuperMap [Ls [p]]) ;
+                if (s != slast)
+                {
+                    /* row i is the start of a new supernode */
+                    ndrow1 = p - plast ;
+                    ndrow2 = pend - plast ;
+                    csize = ndrow2 * ndrow1 ;
+                    PRINT1 (("Supernode "ID" ancestor "ID" C: "ID"-by-"ID
+                        "  csize "ID"\n", d, slast, ndrow1, ndrow2, csize)) ;
+                    maxcsize = MAX (maxcsize, csize) ;
+                    plast = p ;
+                    slast = s ;
+                }
+            }
+        }
+        PRINT1 (("max csize "ID"\n", maxcsize)) ;
     }
-    PRINT1 (("max csize "ID"\n", maxcsize)) ;
 
     /* Wj no longer needed for SuperMap } */
 
@@ -791,4 +958,35 @@ int CHOLMOD(super_symbolic)
     FREE_WORKSPACE ;
     return (TRUE) ;
 }
+
+/* ========================================================================== */
+/* === cholmod_super_symbolic =============================================== */
+/* ========================================================================== */
+
+/* Analyzes A, AA', or A(:,f)*A(:,f)' in preparation for a supernodal numeric
+ * factorization.  The user need not call this directly; cholmod_analyze is
+ * a "simple" wrapper for this routine.
+ * 
+ * This function does all the analysis for a supernodal Cholesky factorization.
+ *
+ * workspace: Flag (nrow), Head (nrow), Iwork (2*nrow),
+ * and temporary space of size 3*nfsuper*sizeof(Int), where nfsuper <= n
+ * is the number of fundamental supernodes.
+ */
+
+int CHOLMOD(super_symbolic)
+(
+    /* ---- input ---- */
+    cholmod_sparse *A,	/* matrix to analyze */
+    cholmod_sparse *F,	/* F = A' or A(:,f)' */
+    Int *Parent,	/* elimination tree */
+    /* ---- in/out --- */
+    cholmod_factor *L,	/* simplicial symbolic on input,
+			 * supernodal symbolic on output */
+    /* --------------- */
+    cholmod_common *Common
+)
+{
+    return (CHOLMOD(super_symbolic2) (TRUE, A, F, Parent, L, Common)) ;
+}
 #endif
diff --git a/CHOLMOD/Supernodal/t_cholmod_super_numeric.c b/CHOLMOD/Supernodal/t_cholmod_super_numeric.c
index 4757721..3810046 100644
--- a/CHOLMOD/Supernodal/t_cholmod_super_numeric.c
+++ b/CHOLMOD/Supernodal/t_cholmod_super_numeric.c
@@ -3,11 +3,11 @@
 /* ========================================================================== */
 
 /* -----------------------------------------------------------------------------
- * CHOLMOD/Supernodal Module.  Copyright (C) 2005-2006, Timothy A. Davis
+ * CHOLMOD/Supernodal Module.  Copyright (C) 2005-2012, Timothy A. Davis
  * The CHOLMOD/Supernodal Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_super_numeric.  All xtypes supported, except
@@ -35,11 +35,11 @@
 /* -------------------------------------------------------------------------- */
 
 #define L_ENTRY 1
-#define L_CLEAR(Lx,p)		    Lx [p] = 0
-#define L_ASSIGN(Lx,q, Ax,Az,p)	    Lx [q] = Ax [p]
+#define L_CLEAR(Lx,p)               Lx [p] = 0
+#define L_ASSIGN(Lx,q, Ax,Az,p)     Lx [q] = Ax [p]
 #define L_MULTADD(Lx,q, Ax,Az,p, f) Lx [q] += Ax [p] * f [0]
-#define L_ASSEMBLE(Lx,q,b)	    Lx [q] += b [0]
-#define L_ASSEMBLESUB(Lx,q,C,p)	    Lx [q] -= C [p]
+#define L_ASSEMBLE(Lx,q,b)          Lx [q] += b [0]
+#define L_ASSEMBLESUB(Lx,q,C,p)     Lx [q] -= C [p]
 
 #else
 
@@ -48,10 +48,10 @@
 /* -------------------------------------------------------------------------- */
 
 #define L_ENTRY 2
-#define L_CLEAR(Lx,p)		    Lx [2*(p)] = 0 ; Lx [2*(p)+1] = 0
-#define L_ASSEMBLE(Lx,q,b)	    Lx [2*(q)] += b [0] ;
-#define L_ASSEMBLESUB(Lx,q,C,p)	\
-    Lx [2*(q)  ] -= C [2*(p)  ] ; \
+#define L_CLEAR(Lx,p)               Lx [2*(p)] = 0 ; Lx [2*(p)+1] = 0
+#define L_ASSEMBLE(Lx,q,b)          Lx [2*(q)] += b [0] ;
+#define L_ASSEMBLESUB(Lx,q,C,p)                 \
+    Lx [2*(q)  ] -= C [2*(p)  ] ;               \
     Lx [2*(q)+1] -= C [2*(p)+1] ;
 
 #ifdef COMPLEX
@@ -60,12 +60,12 @@
 /* A, F, L, and C are all complex */
 /* -------------------------------------------------------------------------- */
 
-#define L_ASSIGN(Lx,q, Ax,Az,p) \
-    Lx [2*(q)  ] = Ax [2*(p)  ] ; \
+#define L_ASSIGN(Lx,q, Ax,Az,p)                 \
+    Lx [2*(q)  ] = Ax [2*(p)  ] ;               \
     Lx [2*(q)+1] = Ax [2*(p)+1]
 
-#define L_MULTADD(Lx,q, Ax,Az,p, f) \
-    Lx [2*(q)  ] += Ax [2*(p)  ] * f [0] - Ax [2*(p)+1] * f [1] ; \
+#define L_MULTADD(Lx,q, Ax,Az,p, f)                                     \
+    Lx [2*(q)  ] += Ax [2*(p)  ] * f [0] - Ax [2*(p)+1] * f [1] ;       \
     Lx [2*(q)+1] += Ax [2*(p)+1] * f [0] + Ax [2*(p)  ] * f [1]
 
 #else
@@ -74,12 +74,12 @@
 /* A and F are zomplex, L and C is complex */
 /* -------------------------------------------------------------------------- */
 
-#define L_ASSIGN(Lx,q, Ax,Az,p)	\
-    Lx [2*(q)  ] = Ax [p] ; \
+#define L_ASSIGN(Lx,q, Ax,Az,p)                 \
+    Lx [2*(q)  ] = Ax [p] ;                     \
     Lx [2*(q)+1] = Az [p] ;
 
-#define L_MULTADD(Lx,q, Ax,Az,p, f) \
-    Lx [2*(q)  ] += Ax [p] * f [0] - Az [p] * f [1] ; \
+#define L_MULTADD(Lx,q, Ax,Az,p, f)                     \
+    Lx [2*(q)  ] += Ax [p] * f [0] - Az [p] * f [1] ;   \
     Lx [2*(q)+1] += Az [p] * f [0] + Ax [p] * f [1]
 
 #endif
@@ -96,30 +96,49 @@
 static int TEMPLATE (cholmod_super_numeric)
 (
     /* ---- input ---- */
-    cholmod_sparse *A,	/* matrix to factorize */
-    cholmod_sparse *F,	/* F = A' or A(:,f)' */
-    double beta [2],	/* beta*I is added to diagonal of matrix to factorize */
+    cholmod_sparse *A,  /* matrix to factorize */
+    cholmod_sparse *F,  /* F = A' or A(:,f)' */
+    double beta [2],    /* beta*I is added to diagonal of matrix to factorize */
     /* ---- in/out --- */
-    cholmod_factor *L,	/* factorization */
+    cholmod_factor *L,  /* factorization */
     /* -- workspace -- */
-    cholmod_dense *Cwork,	/* size (L->maxcsize)-by-1 */
+    cholmod_dense *Cwork,       /* size (L->maxcsize)-by-1 */
     /* --------------- */
     cholmod_common *Common
-)
+    )
 {
-    double one [2], zero [2], fjk [2] ;
+    double one [2], zero [2], tstart ;
     double *Lx, *Ax, *Fx, *Az, *Fz, *C ;
     Int *Super, *Head, *Ls, *Lpi, *Lpx, *Map, *SuperMap, *RelativeMap, *Next,
-	*Lpos, *Fp, *Fi, *Fnz, *Ap, *Ai, *Anz, *Iwork, *Next_save, *Lpos_save ;
+        *Lpos, *Fp, *Fi, *Fnz, *Ap, *Ai, *Anz, *Iwork, *Next_save, *Lpos_save,
+        *Previous;
     Int nsuper, n, j, i, k, s, p, pend, k1, k2, nscol, psi, psx, psend, nsrow,
-	pj, d, kd1, kd2, info, ndcol, ndrow, pdi, pdx, pdend, pdi1, pdi2, pdx1,
-	ndrow1, ndrow2, px, dancestor, sparent, dnext, nsrow2, ndrow3, pk, pf,
-	pfend, stype, Apacked, Fpacked, q, imap, repeat_supernode, nscol2, ss,
-	nscol_new = 0 ;
+        pj, d, kd1, kd2, info, ndcol, ndrow, pdi, pdx, pdend, pdi1, pdi2, pdx1,
+        ndrow1, ndrow2, px, dancestor, sparent, dnext, nsrow2, ndrow3, pk, pf,
+        pfend, stype, Apacked, Fpacked, q, imap, repeat_supernode, nscol2, ss,
+        tail, nscol_new = 0;
+
+    /* ---------------------------------------------------------------------- */
+    /* declarations for the GPU */
+    /* ---------------------------------------------------------------------- */
+
+    /* these variables are not used if the GPU module is not installed */
+
+#ifdef GPU_BLAS
+    Int ndescendants, mapCreatedOnGpu, supernodeUsedGPU,
+        idescendant, dlarge, dsmall, skips ;
+    int iHostBuff, iDevBuff, useGPU, GPUavailable ;
+    cholmod_gpu_pointers *gpu_p, gpu_pointer_struct ;
+    gpu_p = &gpu_pointer_struct ;
+#endif
+
+    /* ---------------------------------------------------------------------- */
+    /* guard against integer overflow in the BLAS */
+    /* ---------------------------------------------------------------------- */
 
     /* If integer overflow occurs in the BLAS, Common->status is set to
      * CHOLMOD_TOO_LARGE, and the contents of Lx are undefined. */
-    int blas_ok = TRUE ;
+    Common->blas_ok = TRUE ;
 
     /* ---------------------------------------------------------------------- */
     /* get inputs */
@@ -128,21 +147,25 @@ static int TEMPLATE (cholmod_super_numeric)
     nsuper = L->nsuper ;
     n = L->n ;
 
-    C = Cwork->x ;	/* workspace of size L->maxcsize */
-
-    one [0] = 1.0 ;	/* ALPHA for *syrk, *herk, *gemm, and *trsm */
-    one [1] = 0. ;
+    C = Cwork->x ;      /* workspace of size L->maxcsize */
 
-    zero [0] = 0. ;	/* BETA for *syrk, *herk, and *gemm */
+    one [0] =  1.0 ;    /* ALPHA for *syrk, *herk, *gemm, and *trsm */
+    one [1] =  0. ;
+    zero [0] = 0. ;     /* BETA for *syrk, *herk, and *gemm */
     zero [1] = 0. ;
 
+    /* ensure there is sufficient integer workspace */
+    CHOLMOD(allocate_work)(0, 2*n+5*nsuper, 0, Common);
+
+    /* allocate integer workspace */
     Iwork = Common->Iwork ;
-    SuperMap    = Iwork ;		    /* size n (i/i/l) */
-    RelativeMap = Iwork + n ;		    /* size n (i/i/l) */
-    Next        = Iwork + 2*((size_t) n) ;			/* size nsuper*/
-    Lpos        = Iwork + 2*((size_t) n) + nsuper ;		/* size nsuper*/
+    SuperMap    = Iwork ;                                   /* size n (i/i/l) */
+    RelativeMap = Iwork + n ;                               /* size n (i/i/l) */
+    Next        = Iwork + 2*((size_t) n) ;                  /* size nsuper*/
+    Lpos        = Iwork + 2*((size_t) n) + nsuper ;         /* size nsuper*/
     Next_save   = Iwork + 2*((size_t) n) + 2*((size_t) nsuper) ;/* size nsuper*/
     Lpos_save   = Iwork + 2*((size_t) n) + 3*((size_t) nsuper) ;/* size nsuper*/
+    Previous    = Iwork + 2*((size_t) n) + 4*((size_t) nsuper) ;/* size nsuper*/
 
     Map  = Common->Flag ;   /* size n, use Flag as workspace for Map array */
     Head = Common->Head ;   /* size n+1, only Head [0..nsuper-1] used */
@@ -155,26 +178,63 @@ static int TEMPLATE (cholmod_super_numeric)
 
     Lx = L->x ;
 
+#ifdef GPU_BLAS
+    /* local copy of useGPU */
+    if ( (Common->useGPU == 1) && L->useGPU)
+    {
+        /* Initialize the GPU.  If not found, don't use it. */
+        useGPU = TEMPLATE2 (CHOLMOD (gpu_init))
+            (C, L, Common, nsuper, n, Lpi[nsuper]-Lpi[0], gpu_p) ;
+    }
+    else
+    {
+        useGPU = 0;
+    }
+    /* fprintf (stderr, "local useGPU %d\n", useGPU) ; */
+#endif
+
+#ifndef NTIMER
+    /* clear GPU / CPU statistics */
+    Common->CHOLMOD_CPU_GEMM_CALLS  = 0 ;
+    Common->CHOLMOD_CPU_SYRK_CALLS  = 0 ;
+    Common->CHOLMOD_CPU_TRSM_CALLS  = 0 ;
+    Common->CHOLMOD_CPU_POTRF_CALLS = 0 ;
+    Common->CHOLMOD_GPU_GEMM_CALLS  = 0 ;
+    Common->CHOLMOD_GPU_SYRK_CALLS  = 0 ;
+    Common->CHOLMOD_GPU_TRSM_CALLS  = 0 ;
+    Common->CHOLMOD_GPU_POTRF_CALLS = 0 ;
+    Common->CHOLMOD_CPU_GEMM_TIME   = 0 ;
+    Common->CHOLMOD_CPU_SYRK_TIME   = 0 ;
+    Common->CHOLMOD_CPU_TRSM_TIME   = 0 ;
+    Common->CHOLMOD_CPU_POTRF_TIME  = 0 ;
+    Common->CHOLMOD_GPU_GEMM_TIME   = 0 ;
+    Common->CHOLMOD_GPU_SYRK_TIME   = 0 ;
+    Common->CHOLMOD_GPU_TRSM_TIME   = 0 ;
+    Common->CHOLMOD_GPU_POTRF_TIME  = 0 ;
+    Common->CHOLMOD_ASSEMBLE_TIME   = 0 ;
+    Common->CHOLMOD_ASSEMBLE_TIME2  = 0 ;
+#endif
+
     stype = A->stype ;
 
     if (stype != 0)
     {
-	/* F not accessed */
-	Fp = NULL ;
-	Fi = NULL ;
-	Fx = NULL ;
-	Fz = NULL ;
-	Fnz = NULL ;
-	Fpacked = TRUE ;
+        /* F not accessed */
+        Fp = NULL ;
+        Fi = NULL ;
+        Fx = NULL ;
+        Fz = NULL ;
+        Fnz = NULL ;
+        Fpacked = TRUE ;
     }
     else
     {
-	Fp = F->p ;
-	Fi = F->i ;
-	Fx = F->x ;
-	Fz = F->z ;
-	Fnz = F->nz ;
-	Fpacked = F->packed ;
+        Fp = F->p ;
+        Fi = F->i ;
+        Fx = F->x ;
+        Fz = F->z ;
+        Fnz = F->nz ;
+        Fpacked = F->packed ;
     }
 
     Ap = A->p ;
@@ -185,20 +245,33 @@ static int TEMPLATE (cholmod_super_numeric)
     Apacked = A->packed ;
 
     /* clear the Map so that changes in the pattern of A can be detected */
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS) \
+    if ( n > 128 ) schedule (static)
+
     for (i = 0 ; i < n ; i++)
     {
-	Map [i] = EMPTY ;
+        Map [i] = EMPTY ;
     }
 
     /* If the matrix is not positive definite, the supernode s containing the
      * first zero or negative diagonal entry of L is repeated (but factorized
      * only up to just before the problematic diagonal entry). The purpose is
      * to provide MATLAB with [R,p]=chol(A); columns 1 to p-1 of L=R' are
-     * required, where L(p,p) is the problematic diagonal entry.  The 
+     * required, where L(p,p) is the problematic diagonal entry.  The
      * repeat_supernode flag tells us whether this is the repeated supernode.
      * Once supernode s is repeated, the factorization is terminated. */
     repeat_supernode = FALSE ;
 
+#ifdef GPU_BLAS
+    if ( useGPU )
+    {
+        /* Case of GPU, zero all supernodes at one time for better performance*/
+        TEMPLATE2 (CHOLMOD (gpu_clear_memory))(Lx, L->xsize,
+            CHOLMOD_OMP_NUM_THREADS);
+    }
+#endif
+
     /* ---------------------------------------------------------------------- */
     /* supernodal numerical factorization */
     /* ---------------------------------------------------------------------- */
@@ -206,535 +279,805 @@ static int TEMPLATE (cholmod_super_numeric)
     for (s = 0 ; s < nsuper ; s++)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* get the size of supernode s */
-	/* ------------------------------------------------------------------ */
-
-	k1 = Super [s] ;	    /* s contains columns k1 to k2-1 of L */
-	k2 = Super [s+1] ;
-	nscol = k2 - k1 ;	    /* # of columns in all of s */
-	psi = Lpi [s] ;		    /* pointer to first row of s in Ls */
-	psx = Lpx [s] ;		    /* pointer to first row of s in Lx */
-	psend = Lpi [s+1] ;	    /* pointer just past last row of s in Ls */
-	nsrow = psend - psi ;	    /* # of rows in all of s */
-
-	PRINT1 (("====================================================\n"
-		"S "ID" k1 "ID" k2 "ID" nsrow "ID" nscol "ID" psi "ID" psend "
-		""ID" psx "ID"\n", s, k1, k2, nsrow, nscol, psi, psend, psx)) ;
-
-	/* ------------------------------------------------------------------ */
-	/* zero the supernode s */
-	/* ------------------------------------------------------------------ */
-
-	ASSERT ((size_t) (psx + nsrow*nscol) <= L->xsize) ;
-
-	pend = psx + nsrow * nscol ;	    /* s is nsrow-by-nscol */
-	for (p = psx ; p < pend ; p++)
-	{
-	    /* Lx [p] = 0 ; */
-	    L_CLEAR (Lx,p) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* construct the scattered Map for supernode s */
-	/* ------------------------------------------------------------------ */
-
-	/* If row i is the kth row in s, then Map [i] = k.  Similarly, if
-	 * column j is the kth column in s, then  Map [j] = k. */
-
-	for (k = 0 ; k < nsrow ; k++)
-	{
-	    PRINT1 (("  "ID" map "ID"\n", Ls [psi+k], k)) ;
-	    Map [Ls [psi + k]] = k ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* copy matrix into supernode s (lower triangular part only) */
-	/* ------------------------------------------------------------------ */
-
-	pk = psx ;
-	for (k = k1 ; k < k2 ; k++)
-	{
-	    if (stype != 0)
-	    {
-		/* copy the kth column of A into the supernode */
-		p = Ap [k] ;
-		pend = (Apacked) ? (Ap [k+1]) : (p + Anz [k]) ;
-		for ( ; p < pend ; p++)
-		{
-		    /* row i of L is located in row Map [i] of s */
-		    i = Ai [p] ;
-		    if (i >= k)
-		    {
-			/* This test is here simply to avoid a segfault.  If
-			 * the test is false, the numeric factorization of A
-			 * is undefined.  It does not detect all invalid
-			 * entries, only some of them (when debugging is
-			 * enabled, and Map is cleared after each step, then
-			 * all entries not in the pattern of L are detected). */
-			imap = Map [i] ;
-			if (imap >= 0 && imap < nsrow)
-			{
-			    /* Lx [Map [i] + pk] = Ax [p] ; */
-			    L_ASSIGN (Lx,(imap+pk), Ax,Az,p) ;
-			}
-		    }
-		}
-	    }
-	    else
-	    {
-		/* copy the kth column of A*F into the supernode */
-		pf = Fp [k] ;
-		pfend = (Fpacked) ? (Fp [k+1]) : (p + Fnz [k]) ;
-		for ( ; pf < pfend ; pf++)
-		{
-		    j = Fi [pf] ;
-
-		    /* fjk = Fx [pf] ; */
-		    L_ASSIGN (fjk,0, Fx,Fz,pf) ;
-
-		    p = Ap [j] ;
-		    pend = (Apacked) ? (Ap [j+1]) : (p + Anz [j]) ;
-		    for ( ; p < pend ; p++)
-		    {
-			i = Ai [p] ;
-			if (i >= k)
-			{
-			    /* See the discussion of imap above. */
-			    imap = Map [i] ;
-			    if (imap >= 0 && imap < nsrow)
-			    {
-				/* Lx [Map [i] + pk] += Ax [p] * fjk ; */
-				L_MULTADD (Lx,(imap+pk), Ax,Az,p, fjk) ;
-			    }
-			}
-		    }
-		}
-	    }
-	    pk += nsrow ;  /* advance to the next column of the supernode */
-	}
-
-	/* add beta to the diagonal of the supernode, if nonzero */
-	if (beta [0] != 0.0)
-	{
-	    /* note that only the real part of beta is used */
-	    pk = psx ;
-	    for (k = k1 ; k < k2 ; k++)
-	    {
-		/* Lx [pk] += beta [0] ; */
-		L_ASSEMBLE (Lx,pk, beta) ;
-		pk += nsrow + 1 ;	/* advance to the next diagonal entry */
-	    }
-	}
-
-	PRINT1 (("Supernode with just A: repeat: "ID"\n", repeat_supernode)) ;
-	DEBUG (CHOLMOD(dump_super) (s, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
-		    Common)) ;
-	PRINT1 (("\n\n")) ;
-
-	/* ------------------------------------------------------------------ */
-	/* save/restore the list of supernodes */
-	/* ------------------------------------------------------------------ */
-
-	if (!repeat_supernode)
-	{
-	    /* Save the list of pending descendants in case s is not positive
-	     * definite.  Also save Lpos for each descendant d, so that we can
-	     * find which part of d is used to update s. */
-	    for (d = Head [s] ; d != EMPTY ; d = Next [d])
-	    {
-		Lpos_save [d] = Lpos [d] ;
-		Next_save [d] = Next [d] ;
-	    }
-	}
-	else
-	{
-	    /* s is not positive definite, and is being repeated.  Restore
-	     * the list of supernodes.  This can be done with pointer assignment
-	     * because all 4 arrays are held within Common->Iwork. */
-	    Lpos = Lpos_save ;
-	    Next = Next_save ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* update supernode s with each pending descendant d */
-	/* ------------------------------------------------------------------ */
+        /* ------------------------------------------------------------------ */
+        /* get the size of supernode s */
+        /* ------------------------------------------------------------------ */
+
+        k1 = Super [s] ;            /* s contains columns k1 to k2-1 of L */
+        k2 = Super [s+1] ;
+        nscol = k2 - k1 ;           /* # of columns in all of s */
+        psi = Lpi [s] ;             /* pointer to first row of s in Ls */
+        psx = Lpx [s] ;             /* pointer to first row of s in Lx */
+        psend = Lpi [s+1] ;         /* pointer just past last row of s in Ls */
+        nsrow = psend - psi ;       /* # of rows in all of s */
+
+        PRINT1 (("====================================================\n"
+                 "S "ID" k1 "ID" k2 "ID" nsrow "ID" nscol "ID" psi "ID" psend "
+                 ""ID" psx "ID"\n", s, k1, k2, nsrow, nscol, psi, psend, psx)) ;
+        /* ------------------------------------------------------------------ */
+        /* zero the supernode s */
+        /* ------------------------------------------------------------------ */
+
+        ASSERT ((size_t) (psx + nsrow*nscol) <= L->xsize) ;
+
+        pend = psx + nsrow * nscol ;        /* s is nsrow-by-nscol */
+
+#ifdef GPU_BLAS
+        if ( !useGPU )
+#endif
+        {
+            /* Case of no GPU, zero individual supernodes */
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    schedule (static) if ( pend - psx > 1024 )
+
+            for (p = psx ; p < pend ; p++) {
+                L_CLEAR (Lx,p);
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* construct the scattered Map for supernode s */
+        /* ------------------------------------------------------------------ */
+
+        /* If row i is the kth row in s, then Map [i] = k.  Similarly, if
+         * column j is the kth column in s, then  Map [j] = k. */
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    if ( nsrow > 128 )
+
+        for (k = 0 ; k < nsrow ; k++)
+        {
+            PRINT1 (("  "ID" map "ID"\n", Ls [psi+k], k)) ;
+            Map [Ls [psi + k]] = k ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* when using GPU, reorder supernodes by levels.*/
+        /* (all supernodes in a level are independent) */
+        /* ------------------------------------------------------------------ */
+
+#ifdef GPU_BLAS
+        if ( useGPU )
+        {
+            TEMPLATE2 (CHOLMOD (gpu_reorder_descendants))
+                ( Common, Super, &s, Lpi, Lpos, Head, Next, Previous,
+                  &ndescendants, &tail, &mapCreatedOnGpu, gpu_p ) ;
+        }
+#endif
+
+        /* ------------------------------------------------------------------ */
+        /* copy matrix into supernode s (lower triangular part only) */
+        /* ------------------------------------------------------------------ */
+
+        pk = psx ;
+
+#pragma omp parallel for private ( p, pend, pfend, pf, i, j, imap, q )  \
+    num_threads(CHOLMOD_OMP_NUM_THREADS) if ( k2-k1 > 64 )
+
+        for (k = k1 ; k < k2 ; k++)
+        {
+            if (stype != 0)
+            {
+                /* copy the kth column of A into the supernode */
+                p = Ap [k] ;
+                pend = (Apacked) ? (Ap [k+1]) : (p + Anz [k]) ;
+                for ( ; p < pend ; p++)
+                {
+                    /* row i of L is located in row Map [i] of s */
+                    i = Ai [p] ;
+                    if (i >= k)
+                    {
+                        /* This test is here simply to avoid a segfault.  If
+                         * the test is false, the numeric factorization of A
+                         * is undefined.  It does not detect all invalid
+                         * entries, only some of them (when debugging is
+                         * enabled, and Map is cleared after each step, then
+                         * all entries not in the pattern of L are detected). */
+                        imap = Map [i] ;
+                        if (imap >= 0 && imap < nsrow)
+                        {
+                            /* Lx [Map [i] + pk] = Ax [p] ; */
+                            L_ASSIGN (Lx,(imap+(psx+(k-k1)*nsrow)), Ax,Az,p) ;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                double fjk[2];
+                /* copy the kth column of A*F into the supernode */
+                pf = Fp [k] ;
+                pfend = (Fpacked) ? (Fp [k+1]) : (p + Fnz [k]) ;
+                for ( ; pf < pfend ; pf++)
+                {
+                    j = Fi [pf] ;
+
+                    /* fjk = Fx [pf] ; */
+                    L_ASSIGN (fjk,0, Fx,Fz,pf) ;
+
+                    p = Ap [j] ;
+                    pend = (Apacked) ? (Ap [j+1]) : (p + Anz [j]) ;
+                    for ( ; p < pend ; p++)
+                    {
+                        i = Ai [p] ;
+                        if (i >= k)
+                        {
+                            /* See the discussion of imap above. */
+                            imap = Map [i] ;
+                            if (imap >= 0 && imap < nsrow)
+                            {
+                                /* Lx [Map [i] + pk] += Ax [p] * fjk ; */
+                                L_MULTADD (Lx,(imap+(psx+(k-k1)*nsrow)),
+                                           Ax,Az,p, fjk) ;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        /* add beta to the diagonal of the supernode, if nonzero */
+        if (beta [0] != 0.0)
+        {
+            /* note that only the real part of beta is used */
+            pk = psx ;
+            for (k = k1 ; k < k2 ; k++)
+            {
+                /* Lx [pk] += beta [0] ; */
+                L_ASSEMBLE (Lx,pk, beta) ;
+                pk += nsrow + 1 ;       /* advance to the next diagonal entry */
+            }
+        }
+
+        PRINT1 (("Supernode with just A: repeat: "ID"\n", repeat_supernode)) ;
+        DEBUG (CHOLMOD(dump_super) (s, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
+                                    Common)) ;
+        PRINT1 (("\n\n")) ;
+
+        /* ------------------------------------------------------------------ */
+        /* save/restore the list of supernodes */
+        /* ------------------------------------------------------------------ */
+
+        if (!repeat_supernode)
+        {
+            /* Save the list of pending descendants in case s is not positive
+             * definite.  Also save Lpos for each descendant d, so that we can
+             * find which part of d is used to update s. */
+            for (d = Head [s] ; d != EMPTY ; d = Next [d])
+            {
+                Lpos_save [d] = Lpos [d] ;
+                Next_save [d] = Next [d] ;
+            }
+        }
+        else
+        {
+            for (d = Head [s] ; d != EMPTY ; d = Next [d])
+            {
+                Lpos [d] = Lpos_save [d] ;
+                Next [d] = Next_save [d] ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* update supernode s with each pending descendant d */
+        /* ------------------------------------------------------------------ */
 
 #ifndef NDEBUG
-	for (d = Head [s] ; d != EMPTY ; d = Next [d])
-	{
-	    PRINT1 (("\nWill update "ID" with Child: "ID"\n", s, d)) ;
-	    DEBUG (CHOLMOD(dump_super) (d, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
-			Common)) ;
-	}
-	PRINT1 (("\nNow factorizing supernode "ID":\n", s)) ;
-#endif
-
-	for (d = Head [s] ; d != EMPTY ; d = dnext)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* get the size of supernode d */
-	    /* -------------------------------------------------------------- */
-
-	    kd1 = Super [d] ;	    /* d contains cols kd1 to kd2-1 of L */
-	    kd2 = Super [d+1] ;
-	    ndcol = kd2 - kd1 ;	    /* # of columns in all of d */
-	    pdi = Lpi [d] ;	    /* pointer to first row of d in Ls */
-	    pdx = Lpx [d] ;	    /* pointer to first row of d in Lx */
-	    pdend = Lpi [d+1] ;	    /* pointer just past last row of d in Ls */
-	    ndrow = pdend - pdi ;   /* # rows in all of d */
-
-	    PRINT1 (("Child: ")) ;
-	    DEBUG (CHOLMOD(dump_super) (d, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
-			Common)) ;
-
-	    /* -------------------------------------------------------------- */
-	    /* find the range of rows of d that affect rows k1 to k2-1 of s */
-	    /* -------------------------------------------------------------- */
-
-	    p = Lpos [d] ;	    /* offset of 1st row of d affecting s */
-	    pdi1 = pdi + p ;	    /* ptr to 1st row of d affecting s in Ls */
-	    pdx1 = pdx + p ;	    /* ptr to 1st row of d affecting s in Lx */
-
-	    /* there must be at least one row remaining in d to update s */
-	    ASSERT (pdi1 < pdend) ;
-	    PRINT1 (("Lpos[d] "ID" pdi1 "ID" Ls[pdi1] "ID"\n",
-			Lpos[d], pdi1, Ls [pdi1])) ;
-	    ASSERT (Ls [pdi1] >= k1 && Ls [pdi1] < k2) ;
-
-	    for (pdi2 = pdi1 ; pdi2 < pdend && Ls [pdi2] < k2 ; pdi2++) ;
-	    ndrow1 = pdi2 - pdi1 ;	    /* # rows in first part of d */
-	    ndrow2 = pdend - pdi1 ;	    /* # rows in remaining d */
-
-	    /* rows Ls [pdi1 ... pdi2-1] are in the range k1 to k2-1.  Since d
-	     * affects s, this set cannot be empty. */
-	    ASSERT (pdi1 < pdi2 && pdi2 <= pdend) ;
-	    PRINT1 (("ndrow1 "ID" ndrow2 "ID"\n", ndrow1, ndrow2)) ;
-	    DEBUG (for (p = pdi1 ; p < pdi2 ; p++)
-		    PRINT1 (("Ls["ID"] "ID"\n", p, Ls[p]))) ;
-
-	    /* -------------------------------------------------------------- */
-	    /* construct the update matrix C for this supernode d */
-	    /* -------------------------------------------------------------- */
-
-	    /* C = L (k1:n-1, kd1:kd2-1) * L (k1:k2-1, kd1:kd2-1)', except
-	     * that k1:n-1 refers to all of the rows in L, but many of the
-	     * rows are all zero.  Supernode d holds columns kd1 to kd2-1 of L.
-	     * Nonzero rows in the range k1:k2-1 are in the list
-	     * Ls [pdi1 ... pdi2-1], of size ndrow1.  Nonzero rows in the range
-	     * k2:n-1 are in the list Ls [pdi2 ... pdend], of size ndrow2.  Let
-	     * L1 = L (Ls [pdi1 ... pdi2-1], kd1:kd2-1), and let
-	     * L2 = L (Ls [pdi2 ... pdend],  kd1:kd2-1).  C is ndrow2-by-ndcol.
-	     * Let C1 be the first ndrow1 rows of C and let C2 be the last
-	     * ndrow2-ndrow1 rows of C.  Only the lower triangular part of C1
-	     * needs to be computed since C1 is symmetric.
-	     */
-
-	    /* maxcsize is the largest size of C for all pairs (d,s) */
-	    ASSERT (ndrow2 * ndrow1 <= ((Int) L->maxcsize)) ;
-
-	    /* compute leading ndrow1-by-ndrow1 lower triangular block of C,
-	     * C1 = L1*L1' */
+        for (d = Head [s] ; d != EMPTY ; d = Next [d])
+        {
+            PRINT1 (("\nWill update "ID" with Child: "ID"\n", s, d)) ;
+            DEBUG (CHOLMOD(dump_super) (d, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
+                                        Common)) ;
+        }
+        PRINT1 (("\nNow factorizing supernode "ID":\n", s)) ;
+#endif
 
-#ifdef REAL
-	    BLAS_dsyrk ("L", "N",
-		ndrow1, ndcol,			/* N, K: L1 is ndrow1-by-ndcol*/
-		one,				/* ALPHA:  1 */
-		Lx + L_ENTRY*pdx1, ndrow,	/* A, LDA: L1, ndrow */
-		zero,				/* BETA:   0 */
-		C, ndrow2) ;			/* C, LDC: C1 */
+#ifdef GPU_BLAS
+        /* initialize the buffer counter */
+        if ( useGPU ) {
+            Common->ibuffer = 0;
+            supernodeUsedGPU = 0;
+            idescendant = 0;
+            d = Head[s];
+            dnext = d;
+            dlarge = Next[d];
+            dsmall = tail;
+            GPUavailable = 1;
+            skips = 0;
+        }
+        else
+        {
+            dnext = Head[s];
+        }
 #else
-	    BLAS_zherk ("L", "N",
-		ndrow1, ndcol,			/* N, K: L1 is ndrow1-by-ndcol*/
-		one,				/* ALPHA:  1 */
-		Lx + L_ENTRY*pdx1, ndrow,	/* A, LDA: L1, ndrow */
-		zero,				/* BETA:   0 */
-		C, ndrow2) ;			/* C, LDC: C1 */
+        /* GPU module not installed */
+        dnext = Head[s];
 #endif
 
-	    /* compute remaining (ndrow3-ndrow1)-by-ndrow1 block of C,
-	     * C2 = L2*L1' */
-	    ndrow3 = ndrow2 - ndrow1 ;
-	    if (ndrow3 > 0)
-	    {
+        while
 
-#ifdef REAL
-		BLAS_dgemm ("N", "C",
-		    ndrow3, ndrow1, ndcol,	/* M, N, K */
-		    one,			/* ALPHA:  1 */
-		    Lx + L_ENTRY*(pdx1 + ndrow1),/* A, LDA: L2, ndrow */
-		    ndrow,	
-		    Lx + L_ENTRY*pdx1,		/* B, LDB: L1, ndrow */
-		    ndrow,
-		    zero,			/* BETA:   0 */
-		    C + L_ENTRY*ndrow1,		/* C, LDC: C2 */
-		    ndrow2) ;
+#ifdef GPU_BLAS
+            ( (!useGPU && (dnext != EMPTY))
+               || (useGPU && (idescendant < ndescendants)))
+#else
+
+            ( dnext != EMPTY )
+#endif
+        {
+
+#ifdef GPU_BLAS
+
+            if ( useGPU ) {
+
+                /* Conditionally select the next descendant supernode to
+                 *  assemble.
+                 *   + first, select the largest descendant
+                 *   + subsequently, if gpu host buffers are available, select
+                 *     the largest remaining descendant for assembly on the GPU
+                 *   + otherwise select the smallest remaining descendant for
+                 *     assembly on the CPU
+                 *
+                 * The objective is to keep the GPU busy assembling the largest
+                 * descendants, and simultaneously keep the CPU busy assembling
+                 * the smallest descendants.
+                 *
+                 * As this is called for every descendent supernode, moving
+                 * this code to t_cholmod_gpu incurs substantial overhead -
+                 * ~20 GF/s on audikw_1 - so it is being left here.
+                 */
+
+                iHostBuff =
+                    (Common->ibuffer) % CHOLMOD_HOST_SUPERNODE_BUFFERS;
+                cudaError_t cuErr;
+
+                if ( idescendant > 0 )  {
+                    if ( GPUavailable == -1 || skips > 0) {
+                        d = dsmall;
+                        dsmall = Previous[dsmall];
+                        skips--;
+                    }
+                    else {
+                        cuErr = cudaEventQuery
+                            ( Common->updateCBuffersFree[iHostBuff] );
+                        if ( cuErr == cudaSuccess ) {
+                            /* buffers are available, so assemble a large
+                             * descendant (anticipating that this will be
+                             * assembled on the GPU) */
+                            d = dlarge;
+                            dlarge = Next[dlarge];
+                            GPUavailable = 1;
+                            skips = 0;
+                        }
+                        else {
+                            /* buffers are not available, so the GPU is busy,
+                             * so assemble a small descendant (anticipating
+                             * that it will be assembled on the host) */
+                            d = dsmall;
+                            dsmall = Previous[dsmall];
+                            GPUavailable = 0;
+
+                            /* if the GPUs are busy, then do this many
+                             * supernodes on the CPU before querying GPUs
+                             * again. */
+                            skips = CHOLMOD_GPU_SKIP;
+                        }
+                    }
+                }
+
+                idescendant++;
+
+            }
+            else
+            {
+                d = dnext;
+            }
 #else
-		BLAS_zgemm ("N", "C",
-		    ndrow3, ndrow1, ndcol,	/* M, N, K */
-		    one,			/* ALPHA:  1 */
-		    Lx + L_ENTRY*(pdx1 + ndrow1),/* A, LDA: L2, ndrow */
-		    ndrow,	
-		    Lx + L_ENTRY*pdx1,		/* B, LDB: L1, ndrow */
-		    ndrow,
-		    zero,			/* BETA:   0 */
-		    C + L_ENTRY*ndrow1,		/* C, LDC: C2 */
-		    ndrow2) ;
-#endif
-
-	    }
-
-	    DEBUG (CHOLMOD(dump_real) ("C", C, ndrow2, ndrow1, TRUE, L_ENTRY,
-			Common)) ;
-
-	    /* -------------------------------------------------------------- */
-	    /* construct relative map to assemble d into s */
-	    /* -------------------------------------------------------------- */
-
-	    for (i = 0 ; i < ndrow2 ; i++)
-	    {
-		RelativeMap [i] = Map [Ls [pdi1 + i]] ;
-		ASSERT (RelativeMap [i] >= 0 && RelativeMap [i] < nsrow) ;
-	    }
-
-	    /* -------------------------------------------------------------- */
-	    /* assemble C into supernode s using the relative map */
-	    /* -------------------------------------------------------------- */
-
-	    pj = 0 ;
-	    for (j = 0 ; j < ndrow1 ; j++)		/* cols k1:k2-1 */
-	    {
-		ASSERT (RelativeMap [j] == Map [Ls [pdi1 + j]]) ;
-		ASSERT (RelativeMap [j] >= 0 && RelativeMap [j] < nscol) ;
-		px = psx + RelativeMap [j] * nsrow ;
-		for (i = j ; i < ndrow2 ; i++)		/* rows k1:n-1 */
-		{
-		    ASSERT (RelativeMap [i] == Map [Ls [pdi1 + i]]) ;
-		    ASSERT (RelativeMap [i] >= j && RelativeMap [i] < nsrow) ;
-		    /* Lx [px + RelativeMap [i]] -= C [i + pj] ; */
-		    q = px + RelativeMap [i] ;
-		    L_ASSEMBLESUB (Lx,q, C, i+pj) ;
-		}
-		pj += ndrow2 ;
-	    }
-
-	    /* -------------------------------------------------------------- */
-	    /* prepare this supernode d for its next ancestor */
-	    /* -------------------------------------------------------------- */
-
-	    dnext = Next [d] ;
-
-	    if (!repeat_supernode)
-	    {
-		/* If node s is being repeated, Head [dancestor] has already
-		 * been cleared (set to EMPTY).  It must remain EMPTY.  The
-		 * dancestor will not be factorized since the factorization
-		 * terminates at node s. */
-		Lpos [d] = pdi2 - pdi ;
-		if (Lpos [d] < ndrow)
-		{
-		    dancestor = SuperMap [Ls [pdi2]] ;
-		    ASSERT (dancestor > s && dancestor < nsuper) ;
-		    /* place d in the link list of its next ancestor */
-		    Next [d] = Head [dancestor] ;
-		    Head [dancestor] = d ;
-		}
-	    }
-	}
-
-	PRINT1 (("\nSupernode with contributions A: repeat: "ID"\n",
-		    repeat_supernode)) ;
-	DEBUG (CHOLMOD(dump_super) (s, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
-		    Common)) ;
-	PRINT1 (("\n\n")) ;
-
-	/* ------------------------------------------------------------------ */
-	/* factorize diagonal block of supernode s in LL' */
-	/* ------------------------------------------------------------------ */
-
-	/* The current supernode s is ready to factorize.  It has been updated
-	 * by all descendant supernodes.  Let S = the current supernode, which
-	 * holds rows k1:n-1 and columns k1:k2-1 of the updated matrix.   It
-	 * splits into two parts:  the square diagonal block S1, and the
-	 * rectangular part S2.  Here, S1 is factorized into L1*L1' and
-	 * overwritten by S1.
-	 *
-	 * If supernode s is being repeated, only factorize it up to but not
-	 * including the column containing the problematic entry.
-	 */
-
-	nscol2 = (repeat_supernode) ? (nscol_new) : (nscol) ;
+            /* GPU module not installed at compile time */
+            d = dnext ;
+#endif
+            /* -------------------------------------------------------------- */
+            /* get the size of supernode d */
+            /* -------------------------------------------------------------- */
+
+            kd1 = Super [d] ;       /* d contains cols kd1 to kd2-1 of L */
+            kd2 = Super [d+1] ;
+            ndcol = kd2 - kd1 ;     /* # of columns in all of d */
+            pdi = Lpi [d] ;         /* pointer to first row of d in Ls */
+            pdx = Lpx [d] ;         /* pointer to first row of d in Lx */
+            pdend = Lpi [d+1] ;     /* pointer just past last row of d in Ls */
+            ndrow = pdend - pdi ;   /* # rows in all of d */
+
+            PRINT1 (("Child: ")) ;
+            DEBUG (CHOLMOD(dump_super) (d, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
+                                        Common)) ;
+
+            /* -------------------------------------------------------------- */
+            /* find the range of rows of d that affect rows k1 to k2-1 of s */
+            /* -------------------------------------------------------------- */
+
+            p = Lpos [d] ;          /* offset of 1st row of d affecting s */
+            pdi1 = pdi + p ;        /* ptr to 1st row of d affecting s in Ls */
+            pdx1 = pdx + p ;        /* ptr to 1st row of d affecting s in Lx */
+
+            /* there must be at least one row remaining in d to update s */
+            ASSERT (pdi1 < pdend) ;
+            PRINT1 (("Lpos[d] "ID" pdi1 "ID" Ls[pdi1] "ID"\n",
+                     Lpos[d], pdi1, Ls [pdi1])) ;
+            ASSERT (Ls [pdi1] >= k1 && Ls [pdi1] < k2) ;
+
+            for (pdi2 = pdi1 ; pdi2 < pdend && Ls [pdi2] < k2 ; pdi2++) ;
+            ndrow1 = pdi2 - pdi1 ;      /* # rows in first part of d */
+            ndrow2 = pdend - pdi1 ;     /* # rows in remaining d */
+
+            /* rows Ls [pdi1 ... pdi2-1] are in the range k1 to k2-1.  Since d
+             * affects s, this set cannot be empty. */
+            ASSERT (pdi1 < pdi2 && pdi2 <= pdend) ;
+            PRINT1 (("ndrow1 "ID" ndrow2 "ID"\n", ndrow1, ndrow2)) ;
+            DEBUG (for (p = pdi1 ; p < pdi2 ; p++)
+                       PRINT1 (("Ls["ID"] "ID"\n", p, Ls[p]))) ;
+
+            /* -------------------------------------------------------------- */
+            /* construct the update matrix C for this supernode d */
+            /* -------------------------------------------------------------- */
+
+            /* C = L (k1:n-1, kd1:kd2-1) * L (k1:k2-1, kd1:kd2-1)', except
+             * that k1:n-1 refers to all of the rows in L, but many of the
+             * rows are all zero.  Supernode d holds columns kd1 to kd2-1 of L.
+             * Nonzero rows in the range k1:k2-1 are in the list
+             * Ls [pdi1 ... pdi2-1], of size ndrow1.  Nonzero rows in the range
+             * k2:n-1 are in the list Ls [pdi2 ... pdend], of size ndrow2.  Let
+             * L1 = L (Ls [pdi1 ... pdi2-1], kd1:kd2-1), and let
+             * L2 = L (Ls [pdi2 ... pdend],  kd1:kd2-1).  C is ndrow2-by-ndrow1.
+             * Let C1 be the first ndrow1 rows of C and let C2 be the last
+             * ndrow2-ndrow1 rows of C.  Only the lower triangular part of C1
+             * needs to be computed since C1 is symmetric.
+             */
+
+            /* maxcsize is the largest size of C for all pairs (d,s) */
+            ASSERT (ndrow2 * ndrow1 <= ((Int) L->maxcsize)) ;
+
+            /* compute leading ndrow1-by-ndrow1 lower triangular block of C,
+             * C1 = L1*L1' */
+
+            ndrow3 = ndrow2 - ndrow1 ;  /* number of rows of C2 */
+            ASSERT (ndrow3 >= 0) ;
+
+
+#ifdef GPU_BLAS
+            if ( useGPU ) {
+                /* set up GPU to assemble new supernode */
+                if ( GPUavailable == 1) {
+                    if ( ndrow2 * L_ENTRY >= CHOLMOD_ND_ROW_LIMIT &&
+                         ndcol * L_ENTRY >= CHOLMOD_ND_COL_LIMIT ) {
+                        if ( ! mapCreatedOnGpu ) {
+                            TEMPLATE2 ( CHOLMOD (gpu_initialize_supernode))
+                                ( Common, nscol, nsrow, psi, gpu_p );
+                            mapCreatedOnGpu = 1;
+                        }
+                    }
+                    else {
+                        /* we've reached the limit of GPU-eligible descendants
+                         * flag to stop stop performing cudaEventQueries */
+                        GPUavailable = -1;
+                    }
+                }
+            }
+#endif
 
+#ifdef GPU_BLAS
+            if ( !useGPU
+                || GPUavailable!=1
+                || !TEMPLATE2 (CHOLMOD (gpu_updateC)) (ndrow1, ndrow2, ndrow,
+                        ndcol, nsrow, pdx1, pdi1, Lx, C, Common, gpu_p))
+#endif
+            {
+                /* GPU not installed, or not used */
+#ifndef NTIMER
+
+                Common->CHOLMOD_CPU_SYRK_CALLS++ ;
+                tstart = SuiteSparse_time () ;
+#endif
+#ifdef REAL
+                BLAS_dsyrk ("L", "N",
+                    ndrow1, ndcol,              /* N, K: L1 is ndrow1-by-ndcol*/
+                    one,                        /* ALPHA:  1 */
+                    Lx + L_ENTRY*pdx1, ndrow,   /* A, LDA: L1, ndrow */
+                    zero,                       /* BETA:   0 */
+                    C, ndrow2) ;                /* C, LDC: C1 */
+#else
+                BLAS_zherk ("L", "N",
+                    ndrow1, ndcol,              /* N, K: L1 is ndrow1-by-ndcol*/
+                    one,                        /* ALPHA:  1 */
+                    Lx + L_ENTRY*pdx1, ndrow,   /* A, LDA: L1, ndrow */
+                    zero,                       /* BETA:   0 */
+                    C, ndrow2) ;                /* C, LDC: C1 */
+#endif
+#ifndef NTIMER
+                Common->CHOLMOD_CPU_SYRK_TIME += SuiteSparse_time () - tstart ;
+#endif
+                /* compute remaining (ndrow2-ndrow1)-by-ndrow1 block of C,
+                 * C2 = L2*L1' */
+                if (ndrow3 > 0)
+                {
+#ifndef NTIMER
+                    Common->CHOLMOD_CPU_GEMM_CALLS++ ;
+                    tstart = SuiteSparse_time () ;
+#endif
 #ifdef REAL
-	LAPACK_dpotrf ("L",
-	    nscol2,			    /* N: nscol2 */
-	    Lx + L_ENTRY*psx, nsrow,	    /* A, LDA: S1, nsrow */
-	    info) ;			    /* INFO */
+                    BLAS_dgemm ("N", "C",
+                        ndrow3, ndrow1, ndcol,          /* M, N, K */
+                        one,                            /* ALPHA:  1 */
+                        Lx + L_ENTRY*(pdx1 + ndrow1),   /* A, LDA: L2 */
+                        ndrow,                          /* ndrow */
+                        Lx + L_ENTRY*pdx1,              /* B, LDB: L1 */
+                        ndrow,                          /* ndrow */
+                        zero,                           /* BETA:   0 */
+                        C + L_ENTRY*ndrow1,             /* C, LDC: C2 */
+                        ndrow2) ;
 #else
-	LAPACK_zpotrf ("L",
-	    nscol2,			    /* N: nscol2 */
-	    Lx + L_ENTRY*psx, nsrow,	    /* A, LDA: S1, nsrow */
-	    info) ;			    /* INFO */
-#endif
-
-	/* ------------------------------------------------------------------ */
-	/* check if the matrix is not positive definite */
-	/* ------------------------------------------------------------------ */
-
-	if (repeat_supernode)
-	{
-	    /* the leading part has been refactorized; it must have succeeded */
-	    info = 0 ;
-
-	    /* zero out the rest of this supernode */
-	    p = psx + nsrow * nscol_new ;
-	    pend = psx + nsrow * nscol ;	    /* s is nsrow-by-nscol */
-	    for ( ; p < pend ; p++)
-	    {
-		/* Lx [p] = 0 ; */
-		L_CLEAR (Lx,p) ;
-	    }
-	}
-
-	/* info is set to one in LAPACK_*potrf if blas_ok is FALSE.  It is
-	 * set to zero in dpotrf/zpotrf if the factorization was successful. */
-	if (CHECK_BLAS_INT && !blas_ok)
-	{
-	    ERROR (CHOLMOD_TOO_LARGE, "problem too large for the BLAS") ;
-	}
-
-	if (info != 0)
-	{
-	    /* Matrix is not positive definite.  dpotrf/zpotrf do NOT report an
-	     * error if the diagonal of L has NaN's, only if it has a zero. */
-	    if (Common->status == CHOLMOD_OK)
-	    {
-		ERROR (CHOLMOD_NOT_POSDEF, "matrix not positive definite") ;
-	    }
-
-	    /* L->minor is the column of L that contains a zero or negative
-	     * diagonal term. */
-	    L->minor = k1 + info - 1 ;
-
-	    /* clear the link lists of all subsequent supernodes */
-	    for (ss = s+1 ; ss < nsuper ; ss++)
-	    {
-		Head [ss] = EMPTY ;
-	    }
-
-	    /* zero this supernode, and all remaining supernodes */
-	    pend = L->xsize ;
-	    for (p = psx ; p < pend ; p++)
-	    {
-		/* Lx [p] = 0. ; */
-		L_CLEAR (Lx,p) ;
-	    }
-
-	    /* If L is indefinite, it still contains useful information.
-	     * Supernodes 0 to s-1 are valid, similar to MATLAB [R,p]=chol(A),
-	     * where the 1-based p is identical to the 0-based L->minor.  Since
-	     * L->minor is in the current supernode s, it and any columns to the
-	     * left of it in supernode s are also all zero.  This differs from
-	     * [R,p]=chol(A), which contains nonzero rows 1 to p-1.  Fix this
-	     * by setting repeat_supernode to TRUE, and repeating supernode s.
-	     *
-	     * If Common->quick_return_if_not_posdef is true, then the entire
-	     * supernode s is not factorized; it is left as all zero.
-	     */
-
-	    if (info == 1 || Common->quick_return_if_not_posdef)
-	    {
-		/* If the first column of supernode s contains a zero or
-		 * negative diagonal entry, then it is already properly set to
-		 * zero.  Also, info will be 1 if integer overflow occured in
-		 * the BLAS. */
-		Head [s] = EMPTY ;
-		return (Common->status >= CHOLMOD_OK) ;
-	    }
-	    else
-	    {
-		/* Repeat supernode s, but only factorize it up to but not
-		 * including the column containing the problematic diagonal
-		 * entry. */
-		repeat_supernode = TRUE ;
-		s-- ;
-		nscol_new = info - 1 ;
-		continue ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* compute the subdiagonal block and prepare supernode for its parent */
-	/* ------------------------------------------------------------------ */
-
-	nsrow2 = nsrow - nscol2 ;
-	if (nsrow2 > 0)
-	{
-	    /* The current supernode is columns k1 to k2-1 of L.  Let L1 be the
-	     * diagonal block (factorized by dpotrf/zpotrf above; rows/cols
-	     * k1:k2-1), and L2 be rows k2:n-1 and columns k1:k2-1 of L.  The
-	     * triangular system to solve is L2*L1' = S2, where S2 is
-	     * overwritten with L2.  More precisely, L2 = S2 / L1' in MATLAB
-	     * notation.
-	     */
+                    BLAS_zgemm ("N", "C",
+                        ndrow3, ndrow1, ndcol,          /* M, N, K */
+                        one,                            /* ALPHA:  1 */
+                        Lx + L_ENTRY*(pdx1 + ndrow1),   /* A, LDA: L2 */
+                        ndrow,                          /* ndrow */
+                        Lx + L_ENTRY*pdx1,              /* B, LDB: L1, ndrow */
+                        ndrow,
+                        zero,                           /* BETA:   0 */
+                        C + L_ENTRY*ndrow1,             /* C, LDC: C2 */
+                        ndrow2) ;
+#endif
+#ifndef NTIMER
+                    Common->CHOLMOD_CPU_GEMM_TIME +=
+                        SuiteSparse_time () - tstart ;
+#endif
+                }
+
+                /* ---------------------------------------------------------- */
+                /* construct relative map to assemble d into s */
+                /* ---------------------------------------------------------- */
+
+                DEBUG (CHOLMOD(dump_real) ("C", C, ndrow2, ndrow1, TRUE,
+                                           L_ENTRY, Common)) ;
+
+#pragma omp parallel for num_threads(CHOLMOD_OMP_NUM_THREADS)   \
+    if ( ndrow2 > 64 )
+
+                for (i = 0 ; i < ndrow2 ; i++)
+                {
+                    RelativeMap [i] = Map [Ls [pdi1 + i]] ;
+                    ASSERT (RelativeMap [i] >= 0 && RelativeMap [i] < nsrow) ;
+                }
+
+                /* ---------------------------------------------------------- */
+                /* assemble C into supernode s using the relative map */
+                /* ---------------------------------------------------------- */
+
+#pragma omp parallel for private ( j, i, px, q )                \
+    num_threads(CHOLMOD_OMP_NUM_THREADS) if (ndrow1 > 64 )
+
+                for (j = 0 ; j < ndrow1 ; j++)              /* cols k1:k2-1 */
+                {
+                    ASSERT (RelativeMap [j] == Map [Ls [pdi1 + j]]) ;
+                    ASSERT (RelativeMap [j] >= 0 && RelativeMap [j] < nscol) ;
+                    px = psx + RelativeMap [j] * nsrow ;
+                    for (i = j ; i < ndrow2 ; i++)          /* rows k1:n-1 */
+                    {
+                        ASSERT (RelativeMap [i] == Map [Ls [pdi1 + i]]) ;
+                        ASSERT (RelativeMap [i] >= j && RelativeMap[i] < nsrow);
+                        /* Lx [px + RelativeMap [i]] -= C [i + pj] ; */
+                        q = px + RelativeMap [i] ;
+                        L_ASSEMBLESUB (Lx,q, C, i+ndrow2*j) ;
+                    }
+                }
+
+            }
+#ifdef GPU_BLAS
+            else
+            {
+                supernodeUsedGPU = 1;   /* GPU was used for this supernode*/
+                Common->ibuffer++;      /* gpu_updateC is asynchronous, so use
+                                         * the next host buffer for the next
+                                         * supernode */
+                Common->ibuffer = Common->ibuffer%
+                    (CHOLMOD_HOST_SUPERNODE_BUFFERS*CHOLMOD_DEVICE_STREAMS);
+            }
+#endif
+
+            /* -------------------------------------------------------------- */
+            /* prepare this supernode d for its next ancestor */
+            /* -------------------------------------------------------------- */
+
+            dnext = Next [d] ;
+
+            if (!repeat_supernode)
+            {
+                /* If node s is being repeated, Head [dancestor] has already
+                 * been cleared (set to EMPTY).  It must remain EMPTY.  The
+                 * dancestor will not be factorized since the factorization
+                 * terminates at node s. */
+                Lpos [d] = pdi2 - pdi ;
+                if (Lpos [d] < ndrow)
+                {
+                    dancestor = SuperMap [Ls [pdi2]] ;
+                    ASSERT (dancestor > s && dancestor < nsuper) ;
+                    /* place d in the link list of its next ancestor */
+                    Next [d] = Head [dancestor] ;
+                    Head [dancestor] = d ;
+                }
+            }
+
+        }  /* end of descendant supernode loop */
+
+#ifdef GPU_BLAS
+        if ( useGPU ) {
+            iHostBuff = (Common->ibuffer)%CHOLMOD_HOST_SUPERNODE_BUFFERS;
+            iDevBuff = (Common->ibuffer)%CHOLMOD_DEVICE_STREAMS;
+
+            /* combine updates assembled on the GPU with updates
+             * assembled on the CPU */
+            TEMPLATE2 ( CHOLMOD (gpu_final_assembly ))
+                ( Common, Lx, psx, nscol, nsrow, supernodeUsedGPU,
+                  &iHostBuff, &iDevBuff, gpu_p );
+        }
+#endif
 
+        PRINT1 (("\nSupernode with contributions A: repeat: "ID"\n",
+                 repeat_supernode)) ;
+        DEBUG (CHOLMOD(dump_super) (s, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
+                                    Common)) ;
+        PRINT1 (("\n\n")) ;
+
+        /* ------------------------------------------------------------------ */
+        /* factorize diagonal block of supernode s in LL' */
+        /* ------------------------------------------------------------------ */
+
+        /* The current supernode s is ready to factorize.  It has been updated
+         * by all descendant supernodes.  Let S = the current supernode, which
+         * holds rows k1:n-1 and columns k1:k2-1 of the updated matrix.   It
+         * splits into two parts:  the square diagonal block S1, and the
+         * rectangular part S2.  Here, S1 is factorized into L1*L1' and
+         * overwritten by L1.
+         *
+         * If supernode s is being repeated, only factorize it up to but not
+         * including the column containing the problematic entry.
+         */
+
+        nscol2 = (repeat_supernode) ? (nscol_new) : (nscol) ;
+
+#ifdef GPU_BLAS
+        if ( !useGPU
+            || !supernodeUsedGPU
+            || !TEMPLATE2 (CHOLMOD (gpu_lower_potrf))(nscol2, nsrow, psx, Lx,
+                                                   &info, Common, gpu_p))
+#endif
+        {
+            /* Note that the GPU will not be used for the triangular solve */
+#ifdef GPU_BLAS
+            supernodeUsedGPU = 0;
+#endif
+#ifndef NTIMER
+            Common->CHOLMOD_CPU_POTRF_CALLS++ ;
+            tstart = SuiteSparse_time () ;
+#endif
+#ifdef REAL
+            LAPACK_dpotrf ("L",
+                nscol2,                     /* N: nscol2 */
+                Lx + L_ENTRY*psx, nsrow,    /* A, LDA: S1, nsrow */
+                info) ;                     /* INFO */
+#else
+            LAPACK_zpotrf ("L",
+                nscol2,                     /* N: nscol2 */
+                Lx + L_ENTRY*psx, nsrow,    /* A, LDA: S1, nsrow */
+                info) ;                     /* INFO */
+#endif
+#ifndef NTIMER
+            Common->CHOLMOD_CPU_POTRF_TIME += SuiteSparse_time ()- tstart ;
+#endif
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* check if the matrix is not positive definite */
+        /* ------------------------------------------------------------------ */
+
+        if (repeat_supernode)
+        {
+            /* the leading part has been refactorized; it must have succeeded */
+            info = 0 ;
+
+            /* zero out the rest of this supernode */
+            p = psx + nsrow * nscol_new ;
+            pend = psx + nsrow * nscol ;            /* s is nsrow-by-nscol */
+            for ( ; p < pend ; p++)
+            {
+                /* Lx [p] = 0 ; */
+                L_CLEAR (Lx,p) ;
+            }
+        }
+
+        /* info is set to one in LAPACK_*potrf if blas_ok is FALSE.  It is
+         * set to zero in dpotrf/zpotrf if the factorization was successful. */
+        if (CHECK_BLAS_INT && !Common->blas_ok)
+        {
+            ERROR (CHOLMOD_TOO_LARGE, "problem too large for the BLAS") ;
+        }
+
+        if (info != 0)
+        {
+            /* Matrix is not positive definite.  dpotrf/zpotrf do NOT report an
+             * error if the diagonal of L has NaN's, only if it has a zero. */
+            if (Common->status == CHOLMOD_OK)
+            {
+                ERROR (CHOLMOD_NOT_POSDEF, "matrix not positive definite") ;
+            }
+
+            /* L->minor is the column of L that contains a zero or negative
+             * diagonal term. */
+            L->minor = k1 + info - 1 ;
+
+            /* clear the link lists of all subsequent supernodes */
+            for (ss = s+1 ; ss < nsuper ; ss++)
+            {
+                Head [ss] = EMPTY ;
+            }
+
+            /* zero this supernode, and all remaining supernodes */
+            pend = L->xsize ;
+            for (p = psx ; p < pend ; p++)
+            {
+                /* Lx [p] = 0. ; */
+                L_CLEAR (Lx,p) ;
+            }
+
+            /* If L is indefinite, it still contains useful information.
+             * Supernodes 0 to s-1 are valid, similar to MATLAB [R,p]=chol(A),
+             * where the 1-based p is identical to the 0-based L->minor.  Since
+             * L->minor is in the current supernode s, it and any columns to the
+             * left of it in supernode s are also all zero.  This differs from
+             * [R,p]=chol(A), which contains nonzero rows 1 to p-1.  Fix this
+             * by setting repeat_supernode to TRUE, and repeating supernode s.
+             *
+             * If Common->quick_return_if_not_posdef is true, then the entire
+             * supernode s is not factorized; it is left as all zero.
+             */
+
+            if (info == 1 || Common->quick_return_if_not_posdef)
+            {
+                /* If the first column of supernode s contains a zero or
+                 * negative diagonal entry, then it is already properly set to
+                 * zero.  Also, info will be 1 if integer overflow occured in
+                 * the BLAS. */
+                Head [s] = EMPTY ;
+#ifdef GPU_BLAS
+                if ( useGPU ) {
+                    CHOLMOD (gpu_end) (Common) ;
+                }
+#endif
+                return (Common->status >= CHOLMOD_OK) ;
+            }
+            else
+            {
+                /* Repeat supernode s, but only factorize it up to but not
+                 * including the column containing the problematic diagonal
+                 * entry. */
+                repeat_supernode = TRUE ;
+                s-- ;
+                nscol_new = info - 1 ;
+                continue ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* compute the subdiagonal block and prepare supernode for its parent */
+        /* ------------------------------------------------------------------ */
+
+        nsrow2 = nsrow - nscol2 ;
+        if (nsrow2 > 0)
+        {
+            /* The current supernode is columns k1 to k2-1 of L.  Let L1 be the
+             * diagonal block (factorized by dpotrf/zpotrf above; rows/cols
+             * k1:k2-1), and L2 be rows k2:n-1 and columns k1:k2-1 of L.  The
+             * triangular system to solve is L2*L1' = S2, where S2 is
+             * overwritten with L2.  More precisely, L2 = S2 / L1' in MATLAB
+             * notation.
+             */
+
+#ifdef GPU_BLAS
+            if ( !useGPU
+                || !supernodeUsedGPU
+                || !TEMPLATE2 (CHOLMOD(gpu_triangular_solve))
+                        (nsrow2, nscol2, nsrow, psx, Lx, Common, gpu_p))
+#endif
+            {
+#ifndef NTIMER
+                Common->CHOLMOD_CPU_TRSM_CALLS++ ;
+                tstart = SuiteSparse_time () ;
+#endif
 #ifdef REAL
-	    BLAS_dtrsm ("R", "L", "C", "N",
-		nsrow2, nscol2,			/* M, N */
-		one,				/* ALPHA: 1 */
-		Lx + L_ENTRY*psx, nsrow,	/* A, LDA: L1, nsrow */
-		Lx + L_ENTRY*(psx + nscol2),	/* B, LDB, L2, nsrow */
-		nsrow) ;
+                BLAS_dtrsm ("R", "L", "C", "N",
+                    nsrow2, nscol2,                 /* M, N */
+                    one,                            /* ALPHA: 1 */
+                    Lx + L_ENTRY*psx, nsrow,        /* A, LDA: L1, nsrow */
+                    Lx + L_ENTRY*(psx + nscol2),    /* B, LDB, L2, nsrow */
+                    nsrow) ;
 #else
-	    BLAS_ztrsm ("R", "L", "C", "N",
-		nsrow2, nscol2,			/* M, N */
-		one,				/* ALPHA: 1 */
-		Lx + L_ENTRY*psx, nsrow,	/* A, LDA: L1, nsrow */
-		Lx + L_ENTRY*(psx + nscol2),	/* B, LDB, L2, nsrow */
-		nsrow) ;
-#endif
-
-	    if (CHECK_BLAS_INT && !blas_ok)
-	    {
-		ERROR (CHOLMOD_TOO_LARGE, "problem too large for the BLAS") ;
-	    }
-
-	    if (!repeat_supernode)
-	    {
-		/* Lpos [s] is offset of first row of s affecting its parent */
-		Lpos [s] = nscol ;
-		sparent = SuperMap [Ls [psi + nscol]] ;
-		ASSERT (sparent != EMPTY) ;
-		ASSERT (Ls [psi + nscol] >= Super [sparent]) ;
-		ASSERT (Ls [psi + nscol] <  Super [sparent+1]) ;
-		ASSERT (SuperMap [Ls [psi + nscol]] == sparent) ;
-		ASSERT (sparent > s && sparent < nsuper) ;
-		/* place s in link list of its parent */
-		Next [s] = Head [sparent] ;
-		Head [sparent] = s ;
-	    }
-	}
-
-	Head [s] = EMPTY ;	/* link list for supernode s no longer needed */
-
-	/* clear the Map (debugging only, to detect changes in pattern of A) */
-	DEBUG (for (k = 0 ; k < nsrow ; k++) Map [Ls [psi + k]] = EMPTY) ;
-	DEBUG (CHOLMOD(dump_super) (s, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
-		    Common)) ;
-
-	if (repeat_supernode)
-	{
-	    /* matrix is not positive definite; finished clean-up for supernode
-	     * containing negative diagonal */
-	    return (Common->status >= CHOLMOD_OK) ;
-	}
+                BLAS_ztrsm ("R", "L", "C", "N",
+                    nsrow2, nscol2,                 /* M, N */
+                    one,                            /* ALPHA: 1 */
+                    Lx + L_ENTRY*psx, nsrow,        /* A, LDA: L1, nsrow */
+                    Lx + L_ENTRY*(psx + nscol2),    /* B, LDB, L2, nsrow */
+                    nsrow) ;
+#endif
+#ifndef NTIMER
+                Common->CHOLMOD_CPU_TRSM_TIME += SuiteSparse_time () - tstart ;
+#endif
+            }
+
+            if (CHECK_BLAS_INT && !Common->blas_ok)
+            {
+                ERROR (CHOLMOD_TOO_LARGE, "problem too large for the BLAS") ;
+            }
+
+            if (!repeat_supernode)
+            {
+                /* Lpos [s] is offset of first row of s affecting its parent */
+                Lpos [s] = nscol ;
+                sparent = SuperMap [Ls [psi + nscol]] ;
+                ASSERT (sparent != EMPTY) ;
+                ASSERT (Ls [psi + nscol] >= Super [sparent]) ;
+                ASSERT (Ls [psi + nscol] <  Super [sparent+1]) ;
+                ASSERT (SuperMap [Ls [psi + nscol]] == sparent) ;
+                ASSERT (sparent > s && sparent < nsuper) ;
+                /* place s in link list of its parent */
+                Next [s] = Head [sparent] ;
+                Head [sparent] = s ;
+            }
+        }
+        else
+        {
+#ifdef GPU_BLAS
+            TEMPLATE2 ( CHOLMOD (gpu_copy_supernode) )
+                ( Common, Lx, psx, nscol, nscol2, nsrow,
+                  supernodeUsedGPU, iHostBuff, gpu_p);
+#endif
+        }
+
+        Head [s] = EMPTY ;  /* link list for supernode s no longer needed */
+
+        /* clear the Map (debugging only, to detect changes in pattern of A) */
+        DEBUG (for (k = 0 ; k < nsrow ; k++) Map [Ls [psi + k]] = EMPTY) ;
+        DEBUG (CHOLMOD(dump_super) (s, Super, Lpi, Ls, Lpx, Lx, L_ENTRY,
+                                    Common)) ;
+
+        if (repeat_supernode)
+        {
+            /* matrix is not positive definite; finished clean-up for supernode
+             * containing negative diagonal */
+
+#ifdef GPU_BLAS
+            if ( useGPU )
+            {
+                CHOLMOD (gpu_end) (Common) ;
+            }
+#endif
+            return (Common->status >= CHOLMOD_OK) ;
+        }
     }
 
     /* success; matrix is positive definite */
     L->minor = n ;
+
+#ifdef GPU_BLAS
+    if ( useGPU )
+    {
+        CHOLMOD (gpu_end) (Common) ;
+    }
+#endif
+
     return (Common->status >= CHOLMOD_OK) ;
+
 }
+
 #undef PATTERN
 #undef REAL
 #undef COMPLEX
diff --git a/CHOLMOD/Supernodal/t_cholmod_super_solve.c b/CHOLMOD/Supernodal/t_cholmod_super_solve.c
index 2f5e792..3706d89 100644
--- a/CHOLMOD/Supernodal/t_cholmod_super_solve.c
+++ b/CHOLMOD/Supernodal/t_cholmod_super_solve.c
@@ -7,14 +7,14 @@
  * The CHOLMOD/Supernodal Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Template routine for cholmod_super_solve.  Supports real or complex L. */
 
 #include "cholmod_template.h"
 
-static int TEMPLATE (cholmod_super_lsolve)
+static void TEMPLATE (cholmod_super_lsolve)
 (
     /* ---- input ---- */
     cholmod_factor *L,	/* factor to use for the forward solve */
@@ -32,10 +32,6 @@ static int TEMPLATE (cholmod_super_lsolve)
     Int nsuper, k1, k2, psi, psend, psx, nsrow, nscol, ii, s,
 	nsrow2, n, ps2, j, i, d, nrhs ;
 
-    /* If integer overflow occurs in the BLAS, Common->status is set to
-     * CHOLMOD_TOO_LARGE in the caller, and the contents of X are undefined. */
-    int blas_ok = TRUE ;
-
     /* ---------------------------------------------------------------------- */
     /* get inputs */
     /* ---------------------------------------------------------------------- */
@@ -223,13 +219,10 @@ static int TEMPLATE (cholmod_super_lsolve)
 	    }
 	}
     }
-
-    Common->status = CHOLMOD_OK ;
-    return (blas_ok) ;
 }
 
 
-static int TEMPLATE (cholmod_super_ltsolve)
+static void TEMPLATE (cholmod_super_ltsolve)
 (
     /* ---- input ---- */
     cholmod_factor *L,	/* factor to use for the forward solve */
@@ -246,7 +239,6 @@ static int TEMPLATE (cholmod_super_ltsolve)
     Int *Lpi, *Lpx, *Ls, *Super ;
     Int nsuper, k1, k2, psi, psend, psx, nsrow, nscol, ii, s,
 	nsrow2, n, ps2, j, i, d, nrhs ;
-    int blas_ok = TRUE ;
 
     /* ---------------------------------------------------------------------- */
     /* get inputs */
@@ -419,9 +411,6 @@ static int TEMPLATE (cholmod_super_ltsolve)
 
 	}
     }
-
-    Common->status = CHOLMOD_OK ;
-    return (blas_ok) ;
 }
 
 #undef PATTERN
diff --git a/CHOLMOD/Tcov/License.txt b/CHOLMOD/Tcov/License.txt
index b2246d2..cbbcec4 100644
--- a/CHOLMOD/Tcov/License.txt
+++ b/CHOLMOD/Tcov/License.txt
@@ -1,6 +1,6 @@
 CHOLMOD/Tcov Module.  Copyright (C) 2005-2006, Timothy A. Davis
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Tcov module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Tcov/Make.inc b/CHOLMOD/Tcov/Make.inc
index 5e571e0..7a3792c 100644
--- a/CHOLMOD/Tcov/Make.inc
+++ b/CHOLMOD/Tcov/Make.inc
@@ -5,4 +5,4 @@ V =
 COVER = ./covall
 
 # with test coverage
-CFLAGS = -O0 -g --coverage
+CF = -O0 -g --coverage
diff --git a/CHOLMOD/Tcov/Makefile b/CHOLMOD/Tcov/Makefile
index 663697e..f85283f 100644
--- a/CHOLMOD/Tcov/Makefile
+++ b/CHOLMOD/Tcov/Makefile
@@ -3,37 +3,55 @@
 #===============================================================================
 
 # If you compile CHOLMOD with -DNPARTITION, then you do not need METIS,
-# CCOLAMD, or the Partition module.
+# CCOLAMD, or the Partition module, but by default this test requres METIS.
+#
+# To compile and run: use "make".
+#
+# This test only works in Linux.
 
-include ../../UFconfig/UFconfig.mk
+default: go
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 include Make.inc
 
 # Tcov requires gcc
 CC = gcc
 
-C = $(CC) $(CFLAGS) $(CHOLMOD_CONFIG) $(NANTESTS)
+# to test Tcov without METIS, but with CAMD, CCOLAMD, and CSYMAMD:
+# C = $(CC) $(CF) $(CHOLMOD_CONFIG) $(NANTESTS) -DNPARTITION
+
+# to test with everthing
+C = $(CC) $(CF) $(CHOLMOD_CONFIG) $(NANTESTS)
 
 # optimized LAPACK and BLAS
-# LIB = $(METIS) -lm $(LAPACK) $(BLAS) $(XERBLA)
+# LIB = $(METIS) -lm $(LAPACK) $(BLAS) $(XERBLA) -L/shared/apps/rhel-6.2/intel/ics-2013/lib/intel64 -liomp5
 
 # LAPACK and the Fortran reference BLAS, compiled with gfortran -g -O:
 # LIB = $(METIS) -lm -llapack_plain -lblas_plain -lg2c
-LIB = $(METIS) -lm -llapack_plain -lblas_plain -lgfortran -lgfortranbegin
-LIB = $(METIS) -lm -llapack -lblas -lgfortran -lgfortranbegin
+# LIB = $(METIS) -lm -llapack_plain -lblas_plain -lgfortran -lgfortranbegin
+# LIB = $(METIS) -lm -llapack -lblas -lgfortran -lgfortranbegin
+# Linux:
+  LIB = $(METIS) -lm -llapack_plain -lblas_plain -lgfortran -lgfortranbegin -lpthread -lrt
+# Mac:
+# LIB = $(METIS) -lm -llapack -lblas -lgfortran -lgfortranbegin -lpthread
 
 # Solaris
 # LIB = $(METIS) -xlic_lib=sunperf
 
-# Use "grep" only, if you do not have "indent"
-PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
-# PRETTY = grep -v "^\#" | ssh persimmon indent -bl -nce -ss -bli0 -i4 -sob -l120
-# PRETTY = grep -v "^\#"
+#-------------------------------------------------------------------------------
+# With the CUDA BLAS:
+ifneq ($(GPU_CONFIG),)
+LIB += $(CUDART_LIB) $(CUBLAS_LIB)
+endif
+#-------------------------------------------------------------------------------
 
 I = -I../../AMD/Include -I../../COLAMD/Include \
 	-I$(METIS_PATH)/Lib -I../../CCOLAMD/Include -I../../CAMD/Include \
-	-I../Include -I../../UFconfig
+	-I../Include -I../../SuiteSparse_config
 
-default: cm cl z_demo l_demo cmread clread
+I += $(GPU_CONFIG)
+
+ccode: cm cl zdemo ldemo cmread clread
 
 TEST = cm.c test_ops.c null.c null2.c lpdemo.c memory.c solve.c aug.c unpack.c \
 	raw_factor.c cctest.c ctest.c amdtest.c camdtest.c huge.c
@@ -57,7 +75,6 @@ AMDSRC = ../../AMD/Source/amd_1.c \
 	../../AMD/Source/amd_aat.c \
 	../../AMD/Source/amd_control.c \
 	../../AMD/Source/amd_defaults.c \
-	../../AMD/Source/amd_global.c \
 	../../AMD/Source/amd_info.c \
 	../../AMD/Source/amd_order.c \
 	../../AMD/Source/amd_postorder.c \
@@ -73,14 +90,14 @@ AMDOBJ = \
 	zz_amd_aat.o \
 	zz_amd_control.o \
 	zz_amd_defaults.o \
-	zz_amd_global.o \
 	zz_amd_info.o \
-	zz_amd_dump.o \
 	zz_amd_order.o \
 	zz_amd_postorder.o \
 	zz_amd_post_tree.o \
 	zz_amd_preprocess.o \
 	zz_amd_valid.o
+# add this to AMDOBJ if debugging is enabled
+#	zz_amd_dump.o \
 
 LAMDOBJ = \
 	zl_amd_1.o \
@@ -88,32 +105,31 @@ LAMDOBJ = \
 	zl_amd_aat.o \
 	zl_amd_control.o \
 	zl_amd_defaults.o \
-	zl_amd_global.o \
 	zl_amd_info.o \
-	zl_amd_dump.o \
 	zl_amd_order.o \
 	zl_amd_postorder.o \
 	zl_amd_post_tree.o \
 	zl_amd_preprocess.o \
 	zl_amd_valid.o
+# add this to LAMDOBJ if debugging is enabled
+#	zl_amd_dump.o \
 
-COLAMDSRC = ../../COLAMD/Source/colamd.c ../../COLAMD/Source/colamd_global.c
+COLAMDSRC = ../../COLAMD/Source/colamd.c
 
-COLAMDOBJ = zz_colamd.o yz_colamd_global.o
+COLAMDOBJ = zz_colamd.o
 
-LCOLAMDOBJ = zl_colamd.o yl_colamd_global.o
+LCOLAMDOBJ = zl_colamd.o
 
 #-------------------------------------------------------------------------------
 # When using the Partition Module:
 
 CCOLAMDSRC = \
 	../../CCOLAMD/Source/ccolamd.c \
-	../../CCOLAMD/Source/ccolamd_global.c \
 	../../CCOLAMD/Include/ccolamd.h
 
-CCOLAMDOBJ = zz_ccolamd.o yz_ccolamd_global.o
+CCOLAMDOBJ = zz_ccolamd.o
 
-LCCOLAMDOBJ = zl_ccolamd.o yl_ccolamd_global.o
+LCCOLAMDOBJ = zl_ccolamd.o
 
 $(CCOLAMDOBJ): $(CCOLAMDSRC)
 
@@ -138,7 +154,6 @@ CAMDSRC = ../../CAMD/Source/camd_1.c \
 	../../CAMD/Source/camd_aat.c \
 	../../CAMD/Source/camd_control.c \
 	../../CAMD/Source/camd_defaults.c \
-	../../CAMD/Source/camd_global.c \
 	../../CAMD/Source/camd_info.c \
 	../../CAMD/Source/camd_order.c \
 	../../CAMD/Source/camd_postorder.c \
@@ -153,13 +168,13 @@ CAMDOBJ = \
 	zz_camd_aat.o \
 	zz_camd_control.o \
 	zz_camd_defaults.o \
-	zz_camd_global.o \
 	zz_camd_info.o \
 	zz_camd_order.o \
 	zz_camd_postorder.o \
 	zz_camd_preprocess.o \
-	zz_camd_valid.o \
-	zz_camd_dump.o
+	zz_camd_valid.o
+# add this to CAMDOBJ if debugging is enabled
+#	zz_camd_dump.o \
 
 LCAMDOBJ = \
 	zl_camd_1.o \
@@ -167,13 +182,13 @@ LCAMDOBJ = \
 	zl_camd_aat.o \
 	zl_camd_control.o \
 	zl_camd_defaults.o \
-	zl_camd_global.o \
 	zl_camd_info.o \
 	zl_camd_order.o \
 	zl_camd_postorder.o \
 	zl_camd_preprocess.o \
-	zl_camd_valid.o \
-	zl_camd_dump.o
+	zl_camd_valid.o
+# add this to LCAMDOBJ if debugging is enabled
+#	zl_camd_dump.o \
 
 $(CAMDOBJ): $(CAMDSRC)
 
@@ -195,6 +210,7 @@ $(LCAMDOBJ): $(CAMDSRC)
 
 IOBJ = \
 	z_common.o \
+	z_version.o \
 	z_dense.o \
 	z_factor.o \
 	z_change_factor.o \
@@ -238,10 +254,13 @@ IOBJ = \
 	z_super_numeric.o \
 	z_super_solve.o \
 	z_super_symbolic.o \
+	z_gpu.o \
+	cholmod_gpu_kernels.o \
 	$(IPARTITION_OBJ)
 
 LOBJ = \
 	l_common.o \
+	l_version.o \
 	l_dense.o \
 	l_factor.o \
 	l_change_factor.o \
@@ -285,72 +304,82 @@ LOBJ = \
 	l_super_numeric.o \
 	l_super_solve.o \
 	l_super_symbolic.o \
+	l_gpu.o \
+	cholmod_gpu_kernels.o \
 	$(LPARTITION_OBJ)
 
-IALL = $(IOBJ) $(AMDOBJ)  $(COLAMDOBJ)  $(CCOLAMDOBJ)  $(CAMDOBJ)
+CONFIG = zz_SuiteSparse_config.o
+
+IALL = $(IOBJ) $(AMDOBJ)  $(COLAMDOBJ)  $(CCOLAMDOBJ)  $(CAMDOBJ)   $(CONFIG)
 
-LALL = $(LOBJ) $(LAMDOBJ) $(LCOLAMDOBJ) $(LCCOLAMDOBJ) $(LCAMDOBJ)
+LALL = $(LOBJ) $(LAMDOBJ) $(LCOLAMDOBJ) $(LCCOLAMDOBJ) $(LCAMDOBJ)  $(CONFIG)
 
 
-cm: $(IALL) $(TEST) cm.h Makefile
+cm: $(METIS) $(IALL) $(TEST) cm.h Makefile
 	$(C) $(I) $(TEST) -o cm $(IALL) $(LIB)
 
-cl: $(LALL) $(TEST) cm.h Makefile
+cl: $(METIS) $(LALL) $(TEST) cm.h Makefile
 	$(C) -DDLONG $(I) $(TEST) -o cl $(LALL) $(LIB)
 
-cmread: $(IALL) cmread.c Makefile
+cmread: $(METIS) $(IALL) cmread.c Makefile
 	$(C) $(I) cmread.c -o cmread $(IALL) $(LIB)
 
-clread: $(LALL) cmread.c Makefile
+clread: $(METIS) $(LALL) cmread.c Makefile
 	$(C) -DDLONG $(I) cmread.c -o clread $(LALL) $(LIB)
 
-z_demo: $(IALL) ../Demo/cholmod_demo.c cm.h Makefile \
+zdemo: $(METIS) $(IALL) ../Demo/cholmod_demo.c cm.h Makefile \
 	../Demo/cholmod_demo.h
-	cat ../Demo/cholmod_demo.c > z_demo.c
-	$(C) $(I) -I../Demo z_demo.c -o z_demo $(IALL) $(LIB)
+	cat ../Demo/cholmod_demo.c > zdemo.c
+	$(C) $(I) -I../Demo zdemo.c -o zdemo $(IALL) $(LIB)
 
-l_demo: $(LALL) ../Demo/cholmod_l_demo.c cm.h Makefile \
+ldemo: $(METIS) $(LALL) ../Demo/cholmod_l_demo.c cm.h Makefile \
 	../Demo/cholmod_demo.h
-	cat ../Demo/cholmod_l_demo.c > l_demo.c
-	$(C) -DDLONG $(I) -I../Demo l_demo.c -o l_demo $(LALL) $(LIB)
-
-go: z_demo l_demo cmread clread cm cl
-	$(V) ./z_demo   ../Demo/Matrix/bcsstk01.tri > tmp/demo_k1.out
-	$(V) ./z_demo   ../Demo/Matrix/bcsstk02.tri > tmp/demo_k2.out
-	$(V) ./z_demo < ../Demo/Matrix/lp_afiro.tri > tmp/demo_afiro.out
-	$(V) ./z_demo < ../Demo/Matrix/can___24.mtx > tmp/demo_can24.out
-	$(V) ./z_demo < ../Demo/Matrix/c.tri        > tmp/demo_c.out
-	$(V) ./z_demo < ../Demo/Matrix/d.tri        > tmp/demo_d.out
-	$(V) ./z_demo < ../Demo/Matrix/up.tri       > tmp/demo_up.out
-	$(V) ./z_demo < ../Demo/Matrix/c.mtx        > tmp/demo_c_mtx.out
-	$(V) ./z_demo < ../Demo/Matrix/0.tri        > tmp/demo_0.out
-	$(V) ./z_demo < Matrix/3_2                  > tmp/demo_3_2.out
-	$(V) ./z_demo < Matrix/c5lo                 > tmp/demo_c5lo.out
-	$(V) ./z_demo < Matrix/c10                  > tmp/demo_c10.out
-	$(V) ./z_demo no_such_file                  > tmp/demo_no_such_file.out
-	$(V) ./z_demo ../Demo/Matrix/mangle1.mtx    > tmp/demo_mangle1.out
-	$(V) ./z_demo ../Demo/Matrix/mangle2.mtx    > tmp/demo_mangle2.out
-	$(V) ./z_demo ../Demo/Matrix/mangle3.mtx    > tmp/demo_mangle3.out
-	$(V) ./z_demo ../Demo/Matrix/mangle4.mtx    > tmp/demo_mangle4.out
-	$(V) ./z_demo ../Demo/Matrix/pts5ldd03.mtx  >  tmp/demo_pts5ldd03.out
-	$(V) ./l_demo   ../Demo/Matrix/bcsstk01.tri > tmp/ldemo_k1.out
-	$(V) ./l_demo   ../Demo/Matrix/bcsstk02.tri > tmp/ldemo_k2.out
-	$(V) ./l_demo < ../Demo/Matrix/lp_afiro.tri > tmp/ldemo_afiro.out
-	$(V) ./l_demo < ../Demo/Matrix/can___24.mtx > tmp/ldemo_can24.out
-	$(V) ./l_demo < ../Demo/Matrix/c.tri        > tmp/ldemo_c.out
-	$(V) ./l_demo < ../Demo/Matrix/d.tri        > tmp/ldemo_d.out
-	$(V) ./l_demo < ../Demo/Matrix/up.tri       > tmp/ldemo_up.out
-	$(V) ./l_demo < ../Demo/Matrix/c.mtx        > tmp/ldemo_c_mtx.out
-	$(V) ./l_demo < ../Demo/Matrix/0.tri        > tmp/ldemo_0.out
-	$(V) ./l_demo < Matrix/3_2                  > tmp/ldemo_3_2.out
-	$(V) ./l_demo < Matrix/c5lo                 > tmp/ldemo_c5lo.out
-	$(V) ./l_demo < Matrix/c10                  > tmp/ldemo_c10.out
-	$(V) ./l_demo no_such_file                  > tmp/ldemo_no_such_file.out
-	$(V) ./l_demo ../Demo/Matrix/mangle1.mtx    > tmp/ldemo_mangle1.out
-	$(V) ./l_demo ../Demo/Matrix/mangle2.mtx    > tmp/ldemo_mangle2.out
-	$(V) ./l_demo ../Demo/Matrix/mangle3.mtx    > tmp/ldemo_mangle3.out
-	$(V) ./l_demo ../Demo/Matrix/mangle4.mtx    > tmp/ldemo_mangle4.out
-	$(V) ./l_demo ../Demo/Matrix/pts5ldd03.mtx  > tmp/ldemo_pts5ldd03.out
+	cat ../Demo/cholmod_l_demo.c > ldemo.c
+	$(C) -DDLONG $(I) -I../Demo ldemo.c -o ldemo $(LALL) $(LIB)
+
+go: zdemo ldemo cmread clread cm cl
+	$(V) ./cl    < Matrix/galenet               > tmp/l_galenet.out
+	$(V) ./cl -m < Matrix/z5lo                  > tmp/l_z5lo.out
+	$(V) ./zdemo   ../Demo/Matrix/bcsstk01.tri  > tmp/demo_k1.out
+	$(V) ./zdemo   ../Demo/Matrix/bcsstk02.tri  > tmp/demo_k2.out
+	$(V) ./zdemo < ../Demo/Matrix/lp_afiro.tri  > tmp/demo_afiro.out
+	$(V) ./zdemo < ../Demo/Matrix/can___24.mtx  > tmp/demo_can24.out
+	$(V) ./zdemo < ../Demo/Matrix/c.tri         > tmp/demo_c.out
+	$(V) ./zdemo < ../Demo/Matrix/d.tri         > tmp/demo_d.out
+	$(V) ./zdemo < ../Demo/Matrix/up.tri        > tmp/demo_up.out
+	$(V) ./zdemo < ../Demo/Matrix/c.mtx         > tmp/demo_c_mtx.out
+	$(V) ./zdemo < ../Demo/Matrix/0.tri         > tmp/demo_0.out
+	$(V) ./zdemo < Matrix/3_2                   > tmp/demo_3_2.out
+	$(V) ./zdemo < Matrix/c5lo                  > tmp/demo_c5lo.out
+	$(V) ./zdemo < Matrix/c10                   > tmp/demo_c10.out
+	$(V) ./zdemo no_such_file                   > tmp/demo_no_such_file.out
+	$(V) ./zdemo ../Demo/Matrix/mangle1.mtx     > tmp/demo_mangle1.out
+	$(V) ./zdemo ../Demo/Matrix/mangle2.mtx     > tmp/demo_mangle2.out
+	$(V) ./zdemo ../Demo/Matrix/mangle3.mtx     > tmp/demo_mangle3.out
+	$(V) ./zdemo ../Demo/Matrix/mangle4.mtx     > tmp/demo_mangle4.out
+	$(V) ./zdemo ../Demo/Matrix/pts5ldd03.mtx   > tmp/demo_pts5ldd03.out
+	$(V) ./ldemo   ../Demo/Matrix/bcsstk01.tri  > tmp/ldemo_k1.out
+	$(V) ./ldemo   ../Demo/Matrix/bcsstk02.tri  > tmp/ldemo_k2.out
+	$(V) ./ldemo < ../Demo/Matrix/lp_afiro.tri  > tmp/ldemo_afiro.out
+	$(V) ./ldemo < ../Demo/Matrix/can___24.mtx  > tmp/ldemo_can24.out
+	$(V) ./ldemo < ../Demo/Matrix/c.tri         > tmp/ldemo_c.out
+	$(V) ./ldemo   ../Demo/Matrix/c.tri 1       > tmp/ldemo_c_zomplex.out
+	$(V) ./ldemo < ../Demo/Matrix/d.tri         > tmp/ldemo_d.out
+	$(V) ./ldemo   ../Demo/Matrix/d.tri 1       > tmp/ldemo_d.out
+	$(V) ./ldemo < ../Demo/Matrix/up.tri        > tmp/ldemo_up.out
+	$(V) ./ldemo   ../Demo/Matrix/up.tri 1      > tmp/ldemo_up_zomplex.out
+	$(V) ./ldemo < ../Demo/Matrix/c.mtx         > tmp/ldemo_c_mtx.out
+	$(V) ./ldemo   ../Demo/Matrix/c.mtx 1      > tmp/ldemo_c_mtx_zomplex.out
+	$(V) ./ldemo < ../Demo/Matrix/0.tri         > tmp/ldemo_0.out
+	$(V) ./ldemo < Matrix/3_2                   > tmp/ldemo_3_2.out
+	$(V) ./ldemo < Matrix/c5lo                  > tmp/ldemo_c5lo.out
+	$(V) ./ldemo < Matrix/c10                   > tmp/ldemo_c10.out
+	$(V) ./ldemo no_such_file                   > tmp/ldemo_no_such_file.out
+	$(V) ./ldemo ../Demo/Matrix/mangle1.mtx     > tmp/ldemo_mangle1.out
+	$(V) ./ldemo ../Demo/Matrix/mangle2.mtx     > tmp/ldemo_mangle2.out
+	$(V) ./ldemo ../Demo/Matrix/mangle3.mtx     > tmp/ldemo_mangle3.out
+	$(V) ./ldemo ../Demo/Matrix/mangle4.mtx     > tmp/ldemo_mangle4.out
+	$(V) ./ldemo ../Demo/Matrix/pts5ldd03.mtx   > tmp/ldemo_pts5ldd03.out
 	- grep resid tmp/demo*
 	$(V) ./cmread no_such_file                  > tmp/no_such_file.out
 	$(V) ./cmread Matrix/crud1                  > tmp/crud1.out
@@ -364,9 +393,9 @@ go: z_demo l_demo cmread clread cm cl
 	$(V) ./cmread Matrix/fullcsa.mtx            > tmp/fullcsa.out
 	$(V) ./cmread Matrix/fullcza.mtx            > tmp/fullcza.out
 	$(V) ./cmread Matrix/fullcha.mtx            > tmp/fullcha.out
-	$(V) ./cmread Matrix/cha.mtx		       > tmp/cha.out
-	$(V) ./cmread Matrix/cza.mtx		       > tmp/cza.out
-	$(V) ./cmread Matrix/csa.mtx		       > tmp/csa.out
+	$(V) ./cmread Matrix/cha.mtx                > tmp/cha.out
+	$(V) ./cmread Matrix/cza.mtx                > tmp/cza.out
+	$(V) ./cmread Matrix/csa.mtx                > tmp/csa.out
 	$(V) ./cmread Matrix/one                    > tmp/one.out
 	$(V) ./cmread Matrix/rza.mtx                > tmp/rza.out
 	$(V) ./cmread ../Demo/Matrix/mangle5.tri    > tmp/mangle5.out
@@ -376,15 +405,15 @@ go: z_demo l_demo cmread clread cm cl
 	$(V) ./cmread ../Demo/Matrix/empty.tri      > tmp/empty.out
 	$(V) ./cmread ../Demo/Matrix/one.tri        > tmp/one.out
 	$(V) ./cmread Matrix/plskz362.mtx           > tmp/plskz363.out
-	$(V) ./cmread Matrix/2diag.tri	       > tmp/2diag.out
-	$(V) ./cmread Matrix/r5lo    	       > tmp/r5lo.out
-	$(V) ./cmread Matrix/r5lo2    	       > tmp/r5lo2.out
+	$(V) ./cmread Matrix/2diag.tri              > tmp/2diag.out
+	$(V) ./cmread Matrix/r5lo                   > tmp/r5lo.out
+	$(V) ./cmread Matrix/r5lo2                  > tmp/r5lo2.out
 	- diff tmp/r5lo.out tmp/r5lo2.out
-	$(V) ./cmread Matrix/cs.mtx	               > tmp/cs.out
-	$(V) ./cmread Matrix/2lo.tri	               > tmp/2lo.out
-	$(V) ./cmread Matrix/2.tri	               > tmp/2.out
-	$(V) ./cmread Matrix/2up.tri	               > tmp/2up.out
-	$(V) ./cmread Matrix/huge.tri	       > tmp/huge.out
+	$(V) ./cmread Matrix/cs.mtx                 > tmp/cs.out
+	$(V) ./cmread Matrix/2lo.tri                > tmp/2lo.out
+	$(V) ./cmread Matrix/2.tri                  > tmp/2.out
+	$(V) ./cmread Matrix/2up.tri                > tmp/2up.out
+	$(V) ./cmread Matrix/huge.tri               > tmp/huge.out
 	$(V) ./cmread Matrix/1e99                   > tmp/1e99.out
 	$(V) ./clread no_such_file                  > tmp/l_no_such_file.out
 	$(V) ./clread Matrix/crud1                  > tmp/l_crud1.out
@@ -398,10 +427,10 @@ go: z_demo l_demo cmread clread cm cl
 	$(V) ./clread Matrix/fullcsa.mtx            > tmp/l_fullcsa.out
 	$(V) ./clread Matrix/fullcza.mtx            > tmp/l_fullcza.out
 	$(V) ./clread Matrix/fullcha.mtx            > tmp/l_fullcha.out
-	$(V) ./clread Matrix/cha.mtx		       > tmp/l_cha.out
-	$(V) ./clread Matrix/cza.mtx		       > tmp/l_cza.out
-	$(V) ./clread Matrix/csa.mtx		       > tmp/l_csa.out
-	$(V) ./clread Matrix/one		       > tmp/l_one.out
+	$(V) ./clread Matrix/cha.mtx                > tmp/l_cha.out
+	$(V) ./clread Matrix/cza.mtx                > tmp/l_cza.out
+	$(V) ./clread Matrix/csa.mtx                > tmp/l_csa.out
+	$(V) ./clread Matrix/one                    > tmp/l_one.out
 	$(V) ./clread Matrix/rza.mtx                > tmp/l_rza.out
 	$(V) ./clread ../Demo/Matrix/mangle5.tri    > tmp/l_mangle5.out
 	$(V) ./clread ../Demo/Matrix/mangle6.tri    > tmp/l_mangle6.out
@@ -410,117 +439,128 @@ go: z_demo l_demo cmread clread cm cl
 	$(V) ./clread ../Demo/Matrix/empty.tri      > tmp/l_empty.out
 	$(V) ./clread ../Demo/Matrix/one.tri        > tmp/l_one.out
 	$(V) ./clread Matrix/plskz362.mtx           > tmp/l_plskz363.out
-	$(V) ./clread Matrix/2diag.tri	       > tmp/l_2diag.out
-	$(V) ./clread Matrix/r5lo    	       > tmp/l_r5lo.out
-	$(V) ./clread Matrix/r5lo2    	       > tmp/l_r5lo2.out
+	$(V) ./clread Matrix/2diag.tri              > tmp/l_2diag.out
+	$(V) ./clread Matrix/r5lo                   > tmp/l_r5lo.out
+	$(V) ./clread Matrix/r5lo2                  > tmp/l_r5lo2.out
 	- diff tmp/r5lo.out tmp/r5lo2.out
-	$(V) ./clread Matrix/cs.mtx	               > tmp/l_cs.out
-	$(V) ./clread Matrix/2lo.tri	               > tmp/l_l_2lo.out
-	$(V) ./clread Matrix/2.tri	               > tmp/l_2.out
-	$(V) ./clread Matrix/2up.tri	               > tmp/l_2up.out
+	$(V) ./clread Matrix/cs.mtx                 > tmp/l_cs.out
+	$(V) ./clread Matrix/2lo.tri                > tmp/l_l_2lo.out
+	$(V) ./clread Matrix/2.tri                  > tmp/l_2.out
+	$(V) ./clread Matrix/2up.tri                > tmp/l_2up.out
 	$(V) ./clread Matrix/huge.tri               > tmp/l_huge.out
 	$(V) ./clread Matrix/1e99                   > tmp/l_1e99.out
-	$(V) ./cm    < Matrix/galenet > tmp/galenet.out
-	$(V) ./cl    < Matrix/galenet > tmp/l_galenet.out
-	- $(COVER)
-	$(V) ./cm    < Matrix/5by50   > tmp/5by50.out
-	$(V) ./cl    < Matrix/5by50   > tmp/l_5by50.out
-	- $(COVER)
-	$(V) ./cm    < Matrix/r5lo    > tmp/r5lo.out 
-	$(V) ./cl    < Matrix/r5lo    > tmp/l_r5lo.out
-	$(V) ./cm    < Matrix/r5up    > tmp/r5up.out
-	$(V) ./cl    < Matrix/r5up    > tmp/l_r5up.out
-	$(V) ./cm    < Matrix/r5up2   > tmp/r5up2.out
-	$(V) ./cl    < Matrix/r5up2   > tmp/l_r5up2.out
-	$(V) ./cm    < Matrix/c5up2   > tmp/c5up2.out
-	$(V) ./cl    < Matrix/c5up2   > tmp/l_c5up2.out
-	$(V) ./cm    < Matrix/z5up2   > tmp/z5up2.out
-	$(V) ./cl    < Matrix/z5up2   > tmp/l_z5up2.out
-	$(V) ./cm -m < Matrix/z5lo    > tmp/z5lo.out
-	$(V) ./cl -m < Matrix/z5lo    > tmp/l_z5lo.out
-	$(V) ./cm    < Matrix/ibm32   > tmp/ibm.out
-	$(V) ./cl    < Matrix/ibm32   > tmp/l_ibm.out
+	$(V) ./cm    < Matrix/galenet               > tmp/galenet.out
 	- $(COVER)
-	$(V) ./cm -m < Matrix/c5lo    > tmp/c5lo.out
-	$(V) ./cl -m < Matrix/c5lo    > tmp/l_c5lo.out
-	$(V) ./cm -m < Matrix/z10     > tmp/z10.out
-	$(V) ./cl -m < Matrix/z10     > tmp/l_z10.out
-	$(V) ./cm -m < Matrix/z5up    > tmp/z5up.out
-	$(V) ./cl -m < Matrix/z5up    > tmp/l_z5up.out
+	$(V) ./cm    < Matrix/5by50                 > tmp/5by50.out
+	$(V) ./cl    < Matrix/5by50                 > tmp/l_5by50.out
 	- $(COVER)
-	$(V) ./cm -s < Matrix/3singular  > tmp/3singular.out
-	$(V) ./cl -s < Matrix/3singular  > tmp/l_3singular.out
-	$(V) ./cm -s < Matrix/z3singular > tmp/z3singular.out
-	$(V) ./cl -s < Matrix/z3singular > tmp/l_z3singular.out
-	$(V) ./cm -s < Matrix/c3singular > tmp/c3singular.out
-	$(V) ./cl -s < Matrix/c3singular > tmp/l_c3singular.out
-	$(V) ./cm -m < Matrix/0       > tmp/0.out
-	$(V) ./cl -m < Matrix/0       > tmp/l_0.out
-	$(V) ./cm -m < Matrix/afiro   > tmp/afiro.out
-	$(V) ./cl -m < Matrix/afiro   > tmp/l_afiro.out
+	$(V) ./cm    < Matrix/r5lo                  > tmp/r5lo.out 
+	$(V) ./cl    < Matrix/r5lo                  > tmp/l_r5lo.out
+	$(V) ./cm    < Matrix/r5up                  > tmp/r5up.out
+	$(V) ./cl    < Matrix/r5up                  > tmp/l_r5up.out
+	$(V) ./cm    < Matrix/r5up2                 > tmp/r5up2.out
+	$(V) ./cl    < Matrix/r5up2                 > tmp/l_r5up2.out
+	$(V) ./cm    < Matrix/c5up2                 > tmp/c5up2.out
+	$(V) ./cl    < Matrix/c5up2                 > tmp/l_c5up2.out
+	$(V) ./cm    < Matrix/z5up2                 > tmp/z5up2.out
+	$(V) ./cl    < Matrix/z5up2                 > tmp/l_z5up2.out
+	$(V) ./cm -m < Matrix/z5lo                  > tmp/z5lo.out
+	$(V) ./cm    < Matrix/ibm32                 > tmp/ibm.out
+	$(V) ./cl    < Matrix/ibm32                 > tmp/l_ibm.out
 	- $(COVER)
-	$(V) ./cm -m < Matrix/k01up   > tmp/k01up.out
-	$(V) ./cl -m < Matrix/k01up   > tmp/l_k01up.out
+	$(V) ./cm -m < Matrix/c5lo                  > tmp/c5lo.out
+	$(V) ./cl -m < Matrix/c5lo                  > tmp/l_c5lo.out
+	$(V) ./cm -m < Matrix/z10                   > tmp/z10.out
+	$(V) ./cl -m < Matrix/z10                   > tmp/l_z10.out
+	$(V) ./cm -m < Matrix/z5up                  > tmp/z5up.out
+	$(V) ./cl -m < Matrix/z5up                  > tmp/l_z5up.out
 	- $(COVER)
-	$(V) ./cm    < Matrix/diag    > tmp/diag.out
-	$(V) ./cl    < Matrix/diag    > tmp/l_diag.out
-	$(V) ./cm -m < Matrix/ex5lo   > tmp/ex5lo.out
-	$(V) ./cl -m < Matrix/ex5lo   > tmp/l_ex5lo.out
+	$(V) ./cm -s < Matrix/3singular             > tmp/3singular.out
+	$(V) ./cl -s < Matrix/3singular             > tmp/l_3singular.out
+	$(V) ./cm -s < Matrix/z3singular            > tmp/z3singular.out
+	$(V) ./cl -s < Matrix/z3singular            > tmp/l_z3singular.out
+	$(V) ./cm -s < Matrix/c3singular            > tmp/c3singular.out
+	$(V) ./cl -s < Matrix/c3singular            > tmp/l_c3singular.out
+	$(V) ./cm -m < Matrix/0                     > tmp/0.out
+	$(V) ./cl -m < Matrix/0                     > tmp/l_0.out
+	$(V) ./cm -m < Matrix/afiro                 > tmp/afiro.out
+	$(V) ./cl -m < Matrix/afiro                 > tmp/l_afiro.out
 	- $(COVER)
-	$(V) ./cm    < Matrix/20lo    > tmp/20lo.out
-	$(V) ./cl    < Matrix/20lo    > tmp/l_20lo.out
-	$(V) ./cm    < Matrix/z30lo   > tmp/z30lo.out
-	$(V) ./cl    < Matrix/z30lo   > tmp/l_z30lo.out
+	$(V) ./cm -m < Matrix/k01up                 > tmp/k01up.out
+	$(V) ./cl -m < Matrix/k01up                 > tmp/l_k01up.out
 	- $(COVER)
-	$(V) ./cm -m < Matrix/z30up   > tmp/z30up.out
-	$(V) ./cl -m < Matrix/z30up   > tmp/l_z30up.out
-	$(V) ./cm    < Matrix/c10     > tmp/c10.out
-	$(V) ./cl    < Matrix/c10     > tmp/l_c10.out
-	$(V) ./cm    < Matrix/c30lo   > tmp/c30lo.out
-	$(V) ./cl    < Matrix/c30lo   > tmp/l_c30lo.out
+	$(V) ./cm    < Matrix/diag                  > tmp/diag.out
+	$(V) ./cl    < Matrix/diag                  > tmp/l_diag.out
+	$(V) ./cm -m < Matrix/ex5lo                 > tmp/ex5lo.out
+	$(V) ./cl -m < Matrix/ex5lo                 > tmp/l_ex5lo.out
 	- $(COVER)
-	$(V) ./cm -m < Matrix/c30up   > tmp/c30up.out
-	$(V) ./cl -m < Matrix/c30up   > tmp/l_c30up.out
-	$(V) ./cm    < Matrix/pi      > tmp/pi.out
-	$(V) ./cl    < Matrix/pi      > tmp/l_pi.out
-	$(V) ./cm    < Matrix/cpi     > tmp/cpi.out
-	$(V) ./cl    < Matrix/cpi     > tmp/l_cpi.out
-	$(V) ./cm    < Matrix/1_0     > tmp/1_0.out
-	$(V) ./cl    < Matrix/1_0     > tmp/l_1_0.out
-	$(V) ./cm -s < Matrix/3b      > tmp/3b.out
-	$(V) ./cl -s < Matrix/3b      > tmp/l_3b.out
-	$(V) ./cm -s < Matrix/cza     > tmp/cza2.out
-	$(V) ./cl -s < Matrix/cza     > tmp/l_cza2.out
-	$(V) ./cm    < Matrix/0_1     > tmp/0_1.out
-	$(V) ./cl    < Matrix/0_1     > tmp/l_0_1.out
+	$(V) ./cm    < Matrix/20lo                  > tmp/20lo.out
+	$(V) ./cl    < Matrix/20lo                  > tmp/l_20lo.out
+	$(V) ./cm    < Matrix/z30lo                 > tmp/z30lo.out
+	$(V) ./cl    < Matrix/z30lo                 > tmp/l_z30lo.out
 	- $(COVER)
-	$(V) ./cm -n < Matrix/galenet > tmp/galenet_nan.out
+	$(V) ./cm -m < Matrix/z30up                 > tmp/z30up.out
+	$(V) ./cl -m < Matrix/z30up                 > tmp/l_z30up.out
+	$(V) ./cm    < Matrix/c10                   > tmp/c10.out
+	$(V) ./cl    < Matrix/c10                   > tmp/l_c10.out
+	$(V) ./cm    < Matrix/c30lo                 > tmp/c30lo.out
+	$(V) ./cl    < Matrix/c30lo                 > tmp/l_c30lo.out
 	- $(COVER)
-	$(V) ./cl -n < Matrix/galenet > tmp/l_galenet_nan.out
+	$(V) ./cm -m < Matrix/c30up                 > tmp/c30up.out
+	$(V) ./cl -m < Matrix/c30up                 > tmp/l_c30up.out
+	$(V) ./cm    < Matrix/pi                    > tmp/pi.out
+	$(V) ./cl    < Matrix/pi                    > tmp/l_pi.out
+	$(V) ./cm    < Matrix/cpi                   > tmp/cpi.out
+	$(V) ./cl    < Matrix/cpi                   > tmp/l_cpi.out
+	$(V) ./cm    < Matrix/1_0                   > tmp/1_0.out
+	$(V) ./cl    < Matrix/1_0                   > tmp/l_1_0.out
+	$(V) ./cm -s < Matrix/3b                    > tmp/3b.out
+	$(V) ./cl -s < Matrix/3b                    > tmp/l_3b.out
+	$(V) ./cm -s < Matrix/cza                   > tmp/cza2.out
+	$(V) ./cl -s < Matrix/cza                   > tmp/l_cza2.out
+	$(V) ./cm    < Matrix/0_1                   > tmp/0_1.out
+	$(V) ./cl    < Matrix/0_1                   > tmp/l_0_1.out
 	- $(COVER)
-	$(V) ./cm    < Matrix/a1      > tmp/a1.out
+	$(V) ./cm -n < Matrix/galenet               > tmp/galenet_nan.out
 	- $(COVER)
-	$(V) ./cl    < Matrix/a1      > tmp/l_a1.out
+	$(V) ./cl -n < Matrix/galenet               > tmp/l_galenet_nan.out
 	- $(COVER)
-	$(V) ./cm    < Matrix/zero    > tmp/zero.out
-	$(V) ./cl    < Matrix/zero    > tmp/zero.out
+	$(V) ./cm    < Matrix/zero                  > tmp/zero.out
+	$(V) ./cl    < Matrix/zero                  > tmp/zero.out
 	- $(COVER)
 
+# removed:
+# $(V) ./cm    < Matrix/a1                  > tmp/a1.out
+# - $(COVER)
+# $(V) ./cl    < Matrix/a1                  > tmp/l_a1.out
+# - $(COVER)
+
 cov:
 	- $(COVER)
 
+# This test exercises the GPU. Do the following:
+#       setenv CHOLMOD_USE_GPU 1
+#       make gpu
+#       setenv CHOLMOD_USE_GPU 0
+#       make gpu
+gpu: ldemo
+	./ldemo ../../../Matrix/nd6k.mtx
+	./ldemo ../../../Matrix/nd6k_complex.mtx
+	./ldemo ../../../Matrix/nd6k_complex.mtx 1
+	- $(COVER)
+
 purge: distclean
 
 distclean: clean
-	- $(RM) cm cl cmread clread *.c.gcov *.out tmp/*.out z_demo l_demo
-	- $(RM) leak zz_*.c z_*.c *.a l_*.c zl_*.c cov.sort yl_*.c yz_*.c
-	- $(RM) -r cm.profile cmread.profile z_demo.profile 
-	- $(RM) -r cl.profile clread.profile l_demo.profile 
+	- $(RM) cm cl cmread clread *.c.gcov *.out tmp/*.out zdemo ldemo
+	- $(RM) leak zz_*.c z_*.c *.a l_*.c zl_*.c cov.sort ldemo.c zdemo.c
+	- $(RM) -r cm.profile cmread.profile zdemo.profile 
+	- $(RM) -r cl.profile clread.profile ldemo.profile  *.dSYM
 	- $(RM) *.gcda *.gcno
-	- $(RM) temp*.mtx
+	- $(RM) temp*.mtx timelog.m
 
 clean:
-	- $(RM) $(CLEAN)
+	- $(RM) -r $(CLEAN)
 
 
 $(AMDOBJ): $(AMDSRC)
@@ -535,6 +575,15 @@ $(LOBJ): $(INC)
 	$(C) -c $(I) $*.c
 
 #-------------------------------------------------------------------------------
+# SUITESPARSE_CONFIG
+#-------------------------------------------------------------------------------
+
+zz_SuiteSparse_config.o: ../../SuiteSparse_config/SuiteSparse_config.c \
+    ../../SuiteSparse_config/SuiteSparse_config.h
+	$(C) -E $(I) $< | $(PRETTY) > zz_SuiteSparse_config.c
+	$(C) -c $(I) zz_SuiteSparse_config.c
+
+#-------------------------------------------------------------------------------
 # AMD
 #-------------------------------------------------------------------------------
 
@@ -558,10 +607,6 @@ zz_amd_defaults.o: ../../AMD/Source/amd_defaults.c
 	$(C) -E $(I) $< | $(PRETTY) > zz_amd_defaults.c
 	$(C) -c $(I) zz_amd_defaults.c
 
-zz_amd_global.o: ../../AMD/Source/amd_global.c
-	$(C) -E $(I) $< | $(PRETTY) > zz_amd_global.c
-	$(C) -c $(I) zz_amd_global.c
-
 zz_amd_dump.o: ../../AMD/Source/amd_dump.c
 	$(C) -E $(I) $< | $(PRETTY) > zz_amd_dump.c
 	$(C) -c $(I) zz_amd_dump.c
@@ -612,10 +657,6 @@ zl_amd_defaults.o: ../../AMD/Source/amd_defaults.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_amd_defaults.c
 	$(C) -c $(I) zl_amd_defaults.c
 
-zl_amd_global.o: ../../AMD/Source/amd_global.c
-	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_amd_global.c
-	$(C) -c $(I) zl_amd_global.c
-
 zl_amd_dump.o: ../../AMD/Source/amd_dump.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_amd_dump.c
 	$(C) -c $(I) zl_amd_dump.c
@@ -668,10 +709,6 @@ zz_camd_defaults.o: ../../CAMD/Source/camd_defaults.c
 	$(C) -E $(I) $< | $(PRETTY) > zz_camd_defaults.c
 	$(C) -c $(I) zz_camd_defaults.c
 
-zz_camd_global.o: ../../CAMD/Source/camd_global.c
-	$(C) -E $(I) $< | $(PRETTY) > zz_camd_global.c
-	$(C) -c $(I) zz_camd_global.c
-
 zz_camd_dump.o: ../../CAMD/Source/camd_dump.c
 	$(C) -E $(I) $< | $(PRETTY) > zz_camd_dump.c
 	$(C) -c $(I) zz_camd_dump.c
@@ -718,10 +755,6 @@ zl_camd_defaults.o: ../../CAMD/Source/camd_defaults.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_camd_defaults.c
 	$(C) -c $(I) zl_camd_defaults.c
 
-zl_camd_global.o: ../../CAMD/Source/camd_global.c
-	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_camd_global.c
-	$(C) -c $(I) zl_camd_global.c
-
 zl_camd_dump.o: ../../CAMD/Source/camd_dump.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_camd_dump.c
 	$(C) -c $(I) zl_camd_dump.c
@@ -752,36 +785,20 @@ zz_colamd.o: ../../COLAMD/Source/colamd.c
 	$(C) -E $(I) $< | $(PRETTY) > zz_colamd.c
 	$(C) -c $(I) zz_colamd.c
 
-yz_colamd_global.o: ../../COLAMD/Source/colamd_global.c
-	$(C) -E $(I) $< | $(PRETTY) > yz_colamd_global.c
-	$(C) -c $(I) yz_colamd_global.c
-
 zl_colamd.o: ../../COLAMD/Source/colamd.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_colamd.c
 	$(C) -c $(I) zl_colamd.c
 
-yl_colamd_global.o: ../../COLAMD/Source/colamd_global.c
-	$(C) -DDLONG -E $(I) $< | $(PRETTY) > yl_colamd_global.c
-	$(C) -c $(I) yl_colamd_global.c
-
 #-------------------------------------------------------------------------------
 
 zz_ccolamd.o: ../../CCOLAMD/Source/ccolamd.c
 	$(C) -E $(I) $< | $(PRETTY) > zz_ccolamd.c
 	$(C) -c $(I) zz_ccolamd.c
 
-yz_ccolamd_global.o: ../../CCOLAMD/Source/ccolamd_global.c
-	$(C) -E $(I) $< | $(PRETTY) > yz_ccolamd_global.c
-	$(C) -c $(I) yz_ccolamd_global.c
-
 zl_ccolamd.o: ../../CCOLAMD/Source/ccolamd.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > zl_ccolamd.c
 	$(C) -c $(I) zl_ccolamd.c
 
-yl_ccolamd_global.o: ../../CCOLAMD/Source/ccolamd_global.c
-	$(C) -DDLONG -E $(I) $< | $(PRETTY) > yl_ccolamd_global.c
-	$(C) -c $(I) yl_ccolamd_global.c
-
 #-------------------------------------------------------------------------------
 
 z_check.o: ../Check/cholmod_check.c
@@ -802,6 +819,10 @@ z_common.o: ../Core/cholmod_common.c
 	$(C) -E $(I) $< | $(PRETTY) > z_common.c
 	$(C) -c $(I) z_common.c
 
+z_version.o: ../Core/cholmod_version.c
+	$(C) -E $(I) $< | $(PRETTY) > z_version.c
+	$(C) -c $(I) z_version.c
+
 z_dense.o: ../Core/cholmod_dense.c ../Core/t_cholmod_dense.c
 	$(C) -E $(I) $< | $(PRETTY) > z_dense.c
 	$(C) -c $(I) z_dense.c
@@ -983,7 +1004,8 @@ z_updown.o: ../Modify/cholmod_updown.c \
 #-------------------------------------------------------------------------------
 
 z_super_numeric.o: ../Supernodal/cholmod_super_numeric.c \
-		../Supernodal/t_cholmod_super_numeric.c
+		../Supernodal/t_cholmod_super_numeric.c \
+		../GPU/t_cholmod_gpu.c
 	$(C) -E $(I) $< | $(PRETTY) > z_super_numeric.c
 	$(C) -c $(I) z_super_numeric.c
 
@@ -991,6 +1013,10 @@ z_super_symbolic.o: ../Supernodal/cholmod_super_symbolic.c
 	$(C) -E $(I) $< | $(PRETTY) > z_super_symbolic.c
 	$(C) -c $(I) z_super_symbolic.c
 
+z_gpu.o: ../GPU/cholmod_gpu.c
+	$(C) -E $(I) $< | $(PRETTY) > z_gpu.c
+	$(C) -c $(I) z_gpu.c
+
 z_super_solve.o: ../Supernodal/cholmod_super_solve.c
 	$(C) -E $(I) $< | $(PRETTY) > z_super_solve.c
 	$(C) -c $(I) z_super_solve.c
@@ -1016,6 +1042,10 @@ l_common.o: ../Core/cholmod_common.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > l_common.c
 	$(C) -c $(I) l_common.c
 
+l_version.o: ../Core/cholmod_version.c
+	$(C) -DDLONG -E $(I) $< | $(PRETTY) > l_version.c
+	$(C) -c $(I) l_version.c
+
 l_dense.o: ../Core/cholmod_dense.c ../Core/t_cholmod_dense.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > l_dense.c
 	$(C) -c $(I) l_dense.c
@@ -1197,7 +1227,8 @@ l_updown.o: ../Modify/cholmod_updown.c \
 #-------------------------------------------------------------------------------
 
 l_super_numeric.o: ../Supernodal/cholmod_super_numeric.c \
-		../Supernodal/t_cholmod_super_numeric.c
+		../Supernodal/t_cholmod_super_numeric.c \
+                ../GPU/t_cholmod_gpu.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > l_super_numeric.c
 	$(C) -c $(I) l_super_numeric.c
 
@@ -1205,8 +1236,20 @@ l_super_symbolic.o: ../Supernodal/cholmod_super_symbolic.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > l_super_symbolic.c
 	$(C) -c $(I) l_super_symbolic.c
 
+l_gpu.o: ../GPU/cholmod_gpu.c
+	$(C) -DDLONG -E $(I) $< | $(PRETTY) > l_gpu.c
+	$(C) -c $(I) l_gpu.c
+
 l_super_solve.o: ../Supernodal/cholmod_super_solve.c
 	$(C) -DDLONG -E $(I) $< | $(PRETTY) > l_super_solve.c
 	$(C) -c $(I) l_super_solve.c
 
+cholmod_gpu_kernels.o: ../GPU/cholmod_gpu_kernels.c \
+        ../GPU/cholmod_gpu_kernels.cu
+	$(C) -DDLONG -c $(I) $<
+	$(NVCC) -I../../SuiteSparse_config -Xcompiler -fPIC -O3  -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -c ../GPU/cholmod_gpu_kernels.cu
+
 #-------------------------------------------------------------------------------
+
+$(METIS):
+	( cd ../../metis-4.0/Lib && $(MAKE) )
diff --git a/CHOLMOD/Tcov/Matrix/rename.h b/CHOLMOD/Tcov/Matrix/rename.h
deleted file mode 100644
index bd8aace..0000000
--- a/CHOLMOD/Tcov/Matrix/rename.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* do not edit this file; generated by cholmod_make */
-#undef log2
-#include "../../metis-4.0/Lib/rename.h"
-#undef log2
-#define log2 METIS__log2
-#include "mex.h"
-#define malloc mxMalloc
-#define free mxFree
-#define calloc mxCalloc
-#define realloc mxRealloc
diff --git a/CHOLMOD/Tcov/README.txt b/CHOLMOD/Tcov/README.txt
index 5974f5c..6b9352e 100644
--- a/CHOLMOD/Tcov/README.txt
+++ b/CHOLMOD/Tcov/README.txt
@@ -1,4 +1,5 @@
 Tcov directory:  Torture test for CHOLMOD, with statement coverage.
+http://www.suitesparse.com
 --------------------------------------------------------------------------------
 
 This test suite is not required to compile and use CHOLMOD.  It is thus
@@ -44,3 +45,18 @@ this directory, type "make clean".  To remove all but the
 files in the original distribution, type "make distclean".
 
 The output of "make go" is in the "make_go.output" file.
+
+On the Mac (OSX 10.6.1, Snow Leopard), you may see errors like this:
+
+    cl(32662) malloc: *** mmap(size=121600000000000) failed (error code=12)
+    *** error: can't allocate region
+    *** set a breakpoint in malloc_error_break to debug
+
+    That is not an error.  The test code is rigorously testing the CHOLMOD
+    memory management wrappers, by trying to allocate a huge amount of space
+    with the expectation that it must fail.  This to ensure the memory
+    management routines properly handle that case.  For some reason unknown to
+    me, the Mac "malloc" function feels the need to print an error on stdout
+    when attempting to malloc something too big.  It should simply and quietly
+    return a NULL instead, as Linux does.  Thus, ignore these errors.
+
diff --git a/CHOLMOD/Tcov/amdtest.c b/CHOLMOD/Tcov/amdtest.c
index a11fa0d..892db16 100644
--- a/CHOLMOD/Tcov/amdtest.c
+++ b/CHOLMOD/Tcov/amdtest.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Test for amd v2.0 */
@@ -238,7 +238,7 @@ void amdtest (cholmod_sparse *A)
 	    {
 		Cp [n] = Int_max ;
 		ok = AMD_order (n, Cp, Ci, P, Control, Info) ;
-		printf ("AMD status is %d\n", ok) ;
+		printf ("AMD status is "ID"\n", ok) ;
 		OK (ok == AMD_OUT_OF_MEMORY) ;
 	    }
 
@@ -326,14 +326,14 @@ void amdtest (cholmod_sparse *A)
 
 	if (n > 0)
 	{
-	    amd_malloc = cm->malloc_memory ;
-	    amd_free = cm->free_memory ;
+
+	    normal_memory_handler ( ) ;
+
 	    ok = AMD_order (n, Cp, Ci, P, Control, Info) ;
 	    OK (sorted ? (ok == AMD_OK) : (ok >= AMD_OK)) ;
 
 	    test_memory_handler ( ) ;
-	    amd_malloc = cm->malloc_memory ;
-	    amd_free = cm->free_memory ;
+
 	    for (trial = 0 ; trial < 6 ; trial++)
 	    {
 		my_tries = trial ;
@@ -346,8 +346,6 @@ void amdtest (cholmod_sparse *A)
 	    normal_memory_handler ( ) ;
 	    OK (CHOLMOD(print_perm) (P, n, n, "AMD2 permutation", cm)) ;
 
-	    amd_malloc = cm->malloc_memory ;
-	    amd_free = cm->free_memory ;
 	}
 
 	CHOLMOD(free_sparse) (&E, cm) ;
diff --git a/CHOLMOD/Tcov/aug.c b/CHOLMOD/Tcov/aug.c
index 2680e1a..85bc9fa 100644
--- a/CHOLMOD/Tcov/aug.c
+++ b/CHOLMOD/Tcov/aug.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Create the augmented system S = [-I A' ; A alpha*I], solve Sx=b, and return
diff --git a/CHOLMOD/Tcov/camdtest.c b/CHOLMOD/Tcov/camdtest.c
index ae9e1ef..73f720e 100644
--- a/CHOLMOD/Tcov/camdtest.c
+++ b/CHOLMOD/Tcov/camdtest.c
@@ -7,14 +7,14 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Test for camd v2.0 */
 
 #include "cm.h"
 
-#ifndef NPARTITION
+#ifndef NCAMD
 #include "camd.h"
 
 /* ========================================================================== */
@@ -262,7 +262,7 @@ void camdtest (cholmod_sparse *A)
 	    {
 		Cp [n] = Int_max ;
 		ok = CAMD_order (n, Cp, Ci, P, Control, Info, NULL) ;
-		printf ("CAMD status is %d\n", ok) ;
+		printf ("CAMD status is "ID"\n", ok) ;
 		OK (ok == CAMD_OUT_OF_MEMORY) ;
 	    }
 
@@ -350,14 +350,14 @@ void camdtest (cholmod_sparse *A)
 
 	if (n > 0)
 	{
-	    camd_malloc = cm->malloc_memory ;
-	    camd_free = cm->free_memory ;
+
+	    normal_memory_handler ( ) ;
+
 	    ok = CAMD_order (n, Cp, Ci, P, Control, Info, NULL) ;
 	    OK (sorted ? (ok == CAMD_OK) : (ok >= CAMD_OK)) ;
 
 	    test_memory_handler ( ) ;
-	    camd_malloc = cm->malloc_memory ;
-	    camd_free = cm->free_memory ;
+
 	    for (trial = 0 ; trial < 6 ; trial++)
 	    {
 		my_tries = trial ;
@@ -370,8 +370,6 @@ void camdtest (cholmod_sparse *A)
 	    normal_memory_handler ( ) ;
 	    OK (CHOLMOD(print_perm) (P, n, n, "CAMD2 permutation", cm)) ;
 
-	    camd_malloc = cm->malloc_memory ;
-	    camd_free = cm->free_memory ;
 	}
 
 	CHOLMOD(free_sparse) (&E, cm) ;
diff --git a/CHOLMOD/Tcov/cctest.c b/CHOLMOD/Tcov/cctest.c
index 9e02c92..72c29b5 100644
--- a/CHOLMOD/Tcov/cctest.c
+++ b/CHOLMOD/Tcov/cctest.c
@@ -7,14 +7,14 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
-/* Test for ccolamd v1.0.  Not used if NPARTITION defined at compile time. */
+/* Test for ccolamd v1.0.  Not used if NCAMD defined at compile time. */
 
 #include "cm.h"
 
-#ifndef NPARTITION
+#ifndef NCAMD
 #include "ccolamd.h"
 
 /* ========================================================================== */
@@ -198,7 +198,9 @@ void cctest (cholmod_sparse *A)
 	Int n = nrow ;
 
 	ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
-		cm->calloc_memory, cm->free_memory, Cmember, A->stype) ;
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+                Cmember, A->stype) ;
 	OK (ok) ;
 	OK (check_constraints (P, Cmember, n)) ;
 	CSYMAMD_report (stats) ;
@@ -207,31 +209,43 @@ void cctest (cholmod_sparse *A)
 	/* csymamd errors */
 	/* ------------------------------------------------------------------ */
 
-	ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, NULL, cm->calloc_memory,
-		cm->free_memory, Cmember, A->stype) ;		       NOT (ok);
+	ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, NULL,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+                Cmember, A->stype) ;		       NOT (ok);
 
-	ok = CSYMAMD_MAIN (n, NULL, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory, Cmember, A->stype) ;		       NOT (ok);
+	ok = CSYMAMD_MAIN (n, NULL, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;		       NOT (ok);
 	CSYMAMD_report (stats) ;
 
-	ok = CSYMAMD_MAIN (n, Si, NULL, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory, Cmember, A->stype) ;		       NOT (ok);
+	ok = CSYMAMD_MAIN (n, Si, NULL, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;		       NOT (ok);
 	CSYMAMD_report (stats) ;
 
-	ok = CSYMAMD_MAIN (-1, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory, Cmember, A->stype) ;		       NOT (ok);
+	ok = CSYMAMD_MAIN (-1, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;		       NOT (ok);
 	CSYMAMD_report (stats) ;
 
 	p = Sp [n] ;
 	Sp [n] = -1 ;
-	ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory, Cmember, A->stype) ;		       NOT (ok);
+	ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;		       NOT (ok);
 	CSYMAMD_report (stats) ;
 	Sp [n] = p ;
 
 	Sp [0] = -1 ;
-	ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory, Cmember, A->stype) ;		       NOT (ok);
+	ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;		       NOT (ok);
 	CSYMAMD_report (stats) ;
 	Sp [0] = 0 ;
 
@@ -239,15 +253,19 @@ void cctest (cholmod_sparse *A)
 	{
 	    p = Sp [1] ;
 	    Sp [1] = -1 ;
-	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory, Cmember, A->stype) ;	       NOT (ok);
+	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;	       NOT (ok);
 	    CSYMAMD_report (stats) ;
 	    Sp [1] = p ;
 
 	    i = Si [0] ;
 	    Si [0] = -1 ;
-	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory, Cmember, A->stype) ;	       NOT (ok);
+	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;	       NOT (ok);
 	    CSYMAMD_report (stats) ;
 	    Si [0] = i ;
 
@@ -255,16 +273,20 @@ void cctest (cholmod_sparse *A)
 	    i = Si [0] ;
 	    Si [0] = Si [1] ;
 	    Si [1] = i ;
-	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory, Cmember, A->stype) ;	       OK (ok);
+	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;	       OK (ok);
 	    CSYMAMD_report (stats) ;
 	    i = Si [0] ;
 	    Si [0] = Si [1] ;
 	    Si [1] = i ;
 
 	    test_memory_handler ( ) ;
-	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory, Cmember, A->stype) ;	       NOT(ok);
+	    ok = CSYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func,
+		Cmember, A->stype) ;	       NOT(ok);
 	    CSYMAMD_report (stats) ;
 	    normal_memory_handler ( ) ;
 	}
diff --git a/CHOLMOD/Tcov/cm.c b/CHOLMOD/Tcov/cm.c
index 4873349..fbfc118 100644
--- a/CHOLMOD/Tcov/cm.c
+++ b/CHOLMOD/Tcov/cm.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* A program for exhaustive statement-coverage for CHOLMOD, AMD, COLAMD, and
@@ -127,7 +127,7 @@ void progress (Int force, char s)
 
 /* An error occurred that should not have occurred */
 
-void my_handler (int status, char *file, int line, char *msg)
+void my_handler (int status, const char *file, int line, const char *msg)
 {
     printf ("Error handler: file %s line %d status %d: %s\n", 
 	    file, line, status, msg) ;
@@ -1285,10 +1285,10 @@ double do_matrix (cholmod_sparse *A)
 
 	    printf ("test_solver (2)\n") ;
 	    cm->final_asis = TRUE ;
-	    cm->method [0].ordering = CHOLMOD_NATURAL ;
 	    for (nmethods = 0 ; nmethods < 7 ; nmethods++)
 	    {
 		cm->nmethods = nmethods ;
+	        cm->method [0].ordering = CHOLMOD_NATURAL ;
 		err = test_solver (A) ;				/* RAND reset */
 		MAXERR (maxerr, err, 1) ;
 	    }
@@ -1336,7 +1336,7 @@ double do_matrix (cholmod_sparse *A)
 	    /* -------------------------------------------------------------- */
 
 	    OK (CHOLMOD(print_common) ("cm", cm)) ;
-	    CHOLMOD(defaults) (cm) ;
+	    CHOLMOD(defaults) (cm) ; cm->useGPU = 0 ;
 	}
     }
 
@@ -1365,12 +1365,45 @@ int main (int argc, char **argv)
     char *s ;
     double err = 0, maxerr = 0 ;
     Int n = 0, nmin = 0, nrow = 0, ncol = 0, save ;
-    int singular, do_memory, i, do_nantests ;
-    double v = CHOLMOD_VERSION ;
-
-    printf ("Testing CHOLMOD (%g)\n", v) ;
+    int singular, do_memory, i, do_nantests, ok ;
+    double v = CHOLMOD_VERSION, tic [2], t ;
+    int version [3] ;
+    char *p ;
+    const char* env_use_gpu;
+
+    SuiteSparse_start ( ) ;
+    SuiteSparse_tic (tic) ;
+    printf ("Testing CHOLMOD (%g): %d ", v, CHOLMOD(version) (version)) ;
+    printf ("(%d.%d.%d)\n", version [0], version [1], version [2]) ;
+    v = SUITESPARSE_VERSION ;
+    printf ("for SuiteSparse (%g): %d ", v, SuiteSparse_version (version)) ;
+    printf ("(%d.%d.%d)\n", version [0], version [1], version [2]) ;
     printf ("%s: argc: %d\n", argv [0], argc) ;
     my_srand (42) ;						/* RAND */
+
+    /* Ignore floating point exceptions.  Infs and NaNs are generated
+       on purpose. */
+    signal (SIGFPE, SIG_IGN) ;
+
+    /* query the CHOLMOD_USE_GPU environment variable */
+    env_use_gpu = getenv ("CHOLMOD_USE_GPU") ;
+    if ( env_use_gpu )
+    {
+        /* CHOLMOD_USE_GPU environment variable is set to something */
+        if ( atoi ( env_use_gpu ) == 0 )
+        {
+            printf ("CHOLMOD_USE_GPU 0\n") ;
+        }
+        else
+        {
+            printf ("CHOLMOD_USE_GPU 1 (ignored for this test)\n") ;
+        }
+    }
+    else
+    {
+        printf ("CHOLMOD_USE_GPU not present\n") ;
+    }
+
     fflush (stdout) ;
 
     singular = FALSE ;
@@ -1387,11 +1420,39 @@ int main (int argc, char **argv)
     printf ("do_memory: %d singular: %d\n", do_memory, singular) ;
 
     /* ---------------------------------------------------------------------- */
+    /* test SuiteSparse malloc functions */
+    /* ---------------------------------------------------------------------- */
+
+    p = SuiteSparse_malloc (0, 0) ;
+    OKP (p) ;
+    p [0] = 'a' ;
+    SuiteSparse_free (p) ;
+    p = SuiteSparse_calloc (0, 0) ;
+    OKP (p) ;
+    p [0] = 'a' ;
+    p = SuiteSparse_realloc (0, 0, 0, p, &ok) ;
+    OK (ok) ;
+    OKP (p) ;
+    p [0] = 'a' ;
+    SuiteSparse_free (p) ;
+    p = SuiteSparse_malloc (SuiteSparse_long_max, 1024) ;
+    NOP (p) ;
+    p = SuiteSparse_calloc (SuiteSparse_long_max, 1024) ;
+    NOP (p) ;
+    p = SuiteSparse_realloc (0, 0, 0, NULL, &ok) ;
+    OK (ok) ;
+    OKP (p) ;
+    p [0] = 'a' ;
+    p = SuiteSparse_realloc (SuiteSparse_long_max, 0, 1024, NULL, &ok) ;
+    NOP (p) ;
+    NOT (ok) ;
+
+    /* ---------------------------------------------------------------------- */
     /* initialize CHOLMOD */
     /* ---------------------------------------------------------------------- */
 
     cm = &Common ;
-    OK (CHOLMOD(start) (cm)) ;
+    OK (CHOLMOD(start) (cm)) ; cm->useGPU = 0 ;
 
     /* ---------------------------------------------------------------------- */
     /* test all methods with NULL common */
@@ -1407,7 +1468,7 @@ int main (int argc, char **argv)
     null_test2 ( ) ;
     CHOLMOD(finish) (cm) ;
     OK (cm->malloc_count == 0) ;
-    OK (CHOLMOD(start) (cm)) ;
+    OK (CHOLMOD(start) (cm)) ; cm->useGPU = 0 ;
 
     /* ---------------------------------------------------------------------- */
     /* create basic scalars */
@@ -1438,14 +1499,17 @@ int main (int argc, char **argv)
 
 	if (T->nrow > 1000000)
 	{
-	    /* do huge-problem tests only */
-	    huge ( ) ;
+	    /* do huge-problem tests only, but only for 32-bit systems */
+            if (sizeof (Int) == sizeof (int))
+            {
+                huge ( ) ;
+            }
 	    CHOLMOD(free_triplet) (&T, cm) ;
 	    continue ;
 	}
 
 	maxerr = 0 ;
-	CHOLMOD(defaults) (cm) ;
+	CHOLMOD(defaults) (cm) ; cm->useGPU = 0 ;
 	cm->error_handler = my_handler ;
 	cm->print = 4 ;
 	cm->precise = FALSE ;
@@ -1686,14 +1750,17 @@ int main (int argc, char **argv)
 	    (Int) cm->memory_inuse) ;
     OK (cm->malloc_count == 0) ;
     OK (cm->memory_inuse == 0) ;
+    t = SuiteSparse_toc (tic) ;
     if (nrow > ncol)
     {
 	/* maxerr should be NaN, so don't print it */
-	printf ("All tests successful\n") ;
+	printf ("All tests successful: time %.1g\n", t) ;
     }
     else
     {
-	printf ("All tests successful: max error %.1g\n", maxerr) ;
+	printf ("All tests successful: max error %.1g time: %.1g\n", maxerr, t);
     }
+
+    SuiteSparse_finish ( ) ;
     return (0) ;
 }
diff --git a/CHOLMOD/Tcov/cm.h b/CHOLMOD/Tcov/cm.h
index 14e9da3..b61fca0 100644
--- a/CHOLMOD/Tcov/cm.h
+++ b/CHOLMOD/Tcov/cm.h
@@ -3,17 +3,18 @@
 #include <stdio.h>
 #include <limits.h>
 #include <math.h>
+#include <signal.h>
 
 #define Size_max ((size_t) (-1))
 
 /* -------------------------------------------------------------------------- */
-/* double, UF_long */
+/* double, SuiteSparse_long */
 /* -------------------------------------------------------------------------- */
 
 #ifdef DLONG
 #define Real double
-#define Int UF_long
-#define Int_max UF_long_max
+#define Int SuiteSparse_long
+#define Int_max SuiteSparse_long_max
 #define CHOLMOD(name) cholmod_l_ ## name
 #define LONG
 #define DOUBLE
@@ -43,6 +44,7 @@
 
 /* -------------------------------------------------------------------------- */
 
+#define BLAS_OK cm->blas_ok
 #include "cholmod_blas.h"
 
 #define EMPTY (-1)
@@ -129,8 +131,8 @@ void prune_row (cholmod_sparse *A, Int k) ;
 double pnorm (cholmod_dense *X, Int *P, cholmod_dense *B, Int inv) ;
 double test_solver (cholmod_sparse *A) ;
 Int *rand_set (Int len, Int n) ;
-void my_handler  (int status, char *file, int line, char *msg) ;
-void my_handler2 (int status, char *file, int line, char *msg) ;
+void my_handler  (int status, const char *file, int line, const char *msg) ;
+void my_handler2 (int status, const char *file, int line, const char *msg) ;
 double resid3 (cholmod_sparse *A1, cholmod_sparse *A2, cholmod_sparse *A3,
     cholmod_dense *X, cholmod_dense *B) ;
 double xrand (double range) ;
diff --git a/CHOLMOD/Tcov/cmread.c b/CHOLMOD/Tcov/cmread.c
index 6256fb6..7dc678d 100644
--- a/CHOLMOD/Tcov/cmread.c
+++ b/CHOLMOD/Tcov/cmread.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Read in a matrix from a file and print it out.
@@ -21,7 +21,7 @@
 
 #ifdef DLONG
 #define CHOLMOD(routine) cholmod_l_ ## routine
-#define Int UF_long
+#define Int SuiteSparse_long
 #else
 #define CHOLMOD(routine) cholmod_ ## routine
 #define Int int
diff --git a/CHOLMOD/Tcov/covs b/CHOLMOD/Tcov/covs
index 46bcb9a..2f79d7f 100755
--- a/CHOLMOD/Tcov/covs
+++ b/CHOLMOD/Tcov/covs
@@ -1,9 +1,9 @@
 #!/bin/csh
 # usage: covs
 echo '================================================================='
-foreach file (*.?cov)
+foreach file (*.c.?cov)
 	echo $file
-	grep "#####" $file | grep -v "__dev" | grep -v "__major" | \
-	    grep -v "#####:[ ]*[0-9]*:[{}]"
+	grep "#####" $file | grep -v "\<_" | grep -v "return 0;" | \
+            grep -v "#####:[ ]*[0-9]*:[{}]"
 	echo '================================================================='
 	end
diff --git a/CHOLMOD/Tcov/ctest.c b/CHOLMOD/Tcov/ctest.c
index 0daeefe..5f8be48 100644
--- a/CHOLMOD/Tcov/ctest.c
+++ b/CHOLMOD/Tcov/ctest.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Test for colamd v2.4 */
@@ -152,7 +152,8 @@ void ctest (cholmod_sparse *A)
 	Sp = S->p ;
 
 	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
-		cm->calloc_memory, cm->free_memory) ;
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
 	OK (ok) ;
 	OK (CHOLMOD(print_perm) (P, n, n, "symamd perm", cm)) ;
 	SYMAMD_report (stats) ;
@@ -166,40 +167,54 @@ void ctest (cholmod_sparse *A)
 	{
 	    my_tries = trial ;
 	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
-		    cm->calloc_memory, cm->free_memory) ;
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
 	    NOT (ok) ;
 	}
 	my_tries = 3 ;
 	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
-		    cm->calloc_memory, cm->free_memory) ;
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
 	OK (ok) ;
 	normal_memory_handler ( ) ;
 
-	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, NULL, cm->calloc_memory,
-		cm->free_memory) ;				NOT (ok);
+	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, NULL,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 
-	ok = SYMAMD_MAIN (n, NULL, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory) ;				NOT (ok);
+	ok = SYMAMD_MAIN (n, NULL, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	SYMAMD_report (stats) ;
 
-	ok = SYMAMD_MAIN (n, Si, NULL, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory) ;				NOT (ok);
+	ok = SYMAMD_MAIN (n, Si, NULL, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	SYMAMD_report (stats) ;
 
-	ok = SYMAMD_MAIN (-1, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory) ;				NOT (ok);
+	ok = SYMAMD_MAIN (-1, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	SYMAMD_report (stats) ;
 
 	p = Sp [n] ;
 	Sp [n] = -1 ;
-	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory) ;				NOT (ok);
+	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	SYMAMD_report (stats) ;
 	Sp [n] = p ;
 
 	Sp [0] = -1 ;
-	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		cm->free_memory) ;				NOT (ok);
+	ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	SYMAMD_report (stats) ;
 	Sp [0] = 0 ;
 
@@ -207,15 +222,19 @@ void ctest (cholmod_sparse *A)
 	{
 	    p = Sp [1] ;
 	    Sp [1] = -1 ;
-	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory) ;				NOT (ok);
+	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	    SYMAMD_report (stats) ;
 	    Sp [1] = p ;
 
 	    i = Si [0] ;
 	    Si [0] = -1 ;
-	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory) ;				NOT (ok);
+	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	    SYMAMD_report (stats) ;
 	    Si [0] = i ;
 
@@ -223,8 +242,10 @@ void ctest (cholmod_sparse *A)
 	    i = Si [0] ;
 	    Si [0] = Si [1] ;
 	    Si [1] = i ;
-	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory) ;				OK (ok);
+	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		OK (ok);
 	    SYMAMD_report (stats) ;
 	    OK (CHOLMOD(print_perm) (P, nrow, nrow, "symamd perm", cm)) ;
 	    i = Si [0] ;
@@ -232,8 +253,10 @@ void ctest (cholmod_sparse *A)
 	    Si [1] = i ;
 
 	    test_memory_handler ( ) ;
-	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats, cm->calloc_memory,
-		    cm->free_memory) ;				NOT (ok);
+	    ok = SYMAMD_MAIN (n, Si, Sp, P, NULL, stats,
+                SuiteSparse_config.calloc_func,
+                SuiteSparse_config.free_func) ;
+		NOT (ok);
 	    SYMAMD_report (stats) ;
 	    normal_memory_handler ( ) ;
 	}
diff --git a/CHOLMOD/Tcov/gcovs b/CHOLMOD/Tcov/gcovs
index ddebc9e..8fd7d2f 100755
--- a/CHOLMOD/Tcov/gcovs
+++ b/CHOLMOD/Tcov/gcovs
@@ -1,3 +1,4 @@
+#!/bin/csh
 # usage: gcovs files
 foreach file ($argv[1-])
 	gcov $file > /dev/null
diff --git a/CHOLMOD/Tcov/go b/CHOLMOD/Tcov/go
new file mode 100755
index 0000000..1c3b61c
--- /dev/null
+++ b/CHOLMOD/Tcov/go
@@ -0,0 +1,15 @@
+
+setenv CHOLMOD_USE_GPU 1
+printenv
+make
+make gpu
+
+unsetenv CHOLMOD_USE_GPU
+printenv
+make
+make gpu
+
+setenv CHOLMOD_USE_GPU 0
+printenv
+make
+make gpu
diff --git a/CHOLMOD/Tcov/huge.c b/CHOLMOD/Tcov/huge.c
index 7021029..c362c95 100644
--- a/CHOLMOD/Tcov/huge.c
+++ b/CHOLMOD/Tcov/huge.c
@@ -7,14 +7,14 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Tests on huge matrices */
 
 #include "cm.h"
 #include "amd.h"
-#ifndef NPARTITION
+#ifndef NCAMD
 #include "camd.h"
 #endif
 
@@ -143,7 +143,7 @@ void huge ( )
     OK (cm->status == CHOLMOD_TOO_LARGE) ;
     NOP (L) ;
 
-#ifndef NPARTITION
+#ifndef NCAMD
     CHOLMOD (camd) (A, NULL, 0, &junk, NULL, cm) ;
     OK (cm->status == CHOLMOD_TOO_LARGE) ;
 #endif
@@ -152,7 +152,7 @@ void huge ( )
     CHOLMOD (colamd) (A, NULL, 0, 0, &junk, cm) ;
     OK (cm->status == CHOLMOD_TOO_LARGE) ;
 
-#ifndef NPARTITION
+#ifndef NCAMD
     printf ("calling ccolamd\n") ;
     CHOLMOD (ccolamd) (A, NULL, 0, NULL, &junk, cm) ;
     OK (cm->status == CHOLMOD_TOO_LARGE) ;
diff --git a/CHOLMOD/Tcov/leak.c b/CHOLMOD/Tcov/leak.c
index 4b5f29a..e840b3e 100644
--- a/CHOLMOD/Tcov/leak.c
+++ b/CHOLMOD/Tcov/leak.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Look for CHOLMOD memory leaks.  Run cm with
diff --git a/CHOLMOD/Tcov/lpdemo.c b/CHOLMOD/Tcov/lpdemo.c
index de3dde9..c0ff1bc 100644
--- a/CHOLMOD/Tcov/lpdemo.c
+++ b/CHOLMOD/Tcov/lpdemo.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* A rectangular matrix is being tested (# nrows < # cols).  This is a
diff --git a/CHOLMOD/Tcov/memory.c b/CHOLMOD/Tcov/memory.c
index 0f468e6..60e0395 100644
--- a/CHOLMOD/Tcov/memory.c
+++ b/CHOLMOD/Tcov/memory.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Extensive memory-failure testing for CHOLMOD.
@@ -112,10 +112,12 @@ void my_free2 (void *p)
 
 void normal_memory_handler ( void )
 {
-    cm->malloc_memory = malloc ;
-    cm->calloc_memory = calloc ;
-    cm->realloc_memory = realloc ;
-    cm->free_memory = free ;
+
+    SuiteSparse_config.malloc_func = malloc ;
+    SuiteSparse_config.calloc_func = calloc ;
+    SuiteSparse_config.realloc_func = realloc ;
+    SuiteSparse_config.free_func = free ;
+
     cm->error_handler = my_handler ;
     CHOLMOD(free_work) (cm) ;
 }
@@ -127,10 +129,11 @@ void normal_memory_handler ( void )
 
 void test_memory_handler ( void )
 {
-    cm->malloc_memory = my_malloc2 ;
-    cm->calloc_memory = my_calloc2 ;
-    cm->realloc_memory = my_realloc2 ;
-    cm->free_memory = my_free2 ;
+    SuiteSparse_config.malloc_func = my_malloc2 ;
+    SuiteSparse_config.calloc_func = my_calloc2 ;
+    SuiteSparse_config.realloc_func = my_realloc2 ;
+    SuiteSparse_config.free_func = my_free2 ;
+
     cm->error_handler = NULL ;
     CHOLMOD(free_work) (cm) ;
     my_tries = 0 ;
@@ -268,7 +271,7 @@ void memory_tests (cholmod_triplet *T)
 	CHOLMOD(free_sparse) (&A, cm) ;
 	OK (CHOLMOD(print_common) ("cm", cm)) ;
 	CHOLMOD(free_work) (cm) ;
-	printf ("inuse "ID" "ID"\n", inuse, cm->memory_inuse) ;
+	printf ("inuse "ID" "ID"\n", (Int) inuse, (Int) (cm->memory_inuse)) ;
 	OK (count == cm->malloc_count) ;
 	OK (inuse == cm->memory_inuse) ;
     }
@@ -320,7 +323,7 @@ void memory_tests (cholmod_triplet *T)
     my_tries = -1 ;
     for (trial = 0 ; my_tries <= 0 ; trial++)
     {
-	CHOLMOD(defaults) (cm) ;
+	CHOLMOD(defaults) (cm) ; cm->useGPU = 0 ;
 	cm->supernodal = CHOLMOD_SUPERNODAL ;
 	cm->metis_memory = 2.0 ;
 	cm->nmethods = 4 ;
diff --git a/CHOLMOD/Tcov/null.c b/CHOLMOD/Tcov/null.c
index 943c549..88574cc 100644
--- a/CHOLMOD/Tcov/null.c
+++ b/CHOLMOD/Tcov/null.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Test CHOLMOD with NULL pointers, and other error cases. */
@@ -19,7 +19,7 @@
 /* === my_hander2 =========================================================== */
 /* ========================================================================== */
 
-void my_handler2 (int status, char *file, int line, char *msg)
+void my_handler2 (int status, const char *file, int line, const char *msg)
 {
     printf ("This ERROR is expected: file %s line %d\n%d: %s\n",
 	    file, line, status, msg) ;
@@ -51,18 +51,22 @@ void null_test (cholmod_common *cn)
 	to_xtype = 0, to_ll = 0, to_super = 0, to_packed = 0, to_monotonic = 0,
 	scale = 0, transpose = 0, option = 0, ordering = 0, prefer = 0,
 	mtype = 0, asym = 0 ;
-    UF_long lr = 0, k1 = 0, k2 = 0 ;
+    SuiteSparse_long lr = 0, k1 = 0, k2 = 0 ;
     size_t j = 0, need = 0, n = 0, mr = 0, nrow = 0, ncol = 0, iworksize = 0,
 	newsize = 0, fsize = 0, d = 0, nzmax = 0, nnew = 0, size = 0,
 	nold = 0, xwork = 0, kstart = 0, kend = 0, nr = 0, nc = 0, len = 0,
 	krow = 0, k = 0 ;
 
 #ifndef NPARTITION
-    Int *Anw = NULL, *Aew = NULL, *Partition = NULL,
-	*CParent = NULL, *Cmember = NULL ;
+    Int *Anw = NULL, *Aew = NULL, *Partition = NULL, *CParent = NULL,
+        *Cmember = NULL ;
     Int compress = 0 ;
 #endif
 
+#ifndef NCAMD
+    Int *Cmem2 = NULL ;
+#endif
+
     /* ---------------------------------------------------------------------- */
     /* Core */
     /* ---------------------------------------------------------------------- */
@@ -257,13 +261,16 @@ void null_test (cholmod_common *cn)
     lr = CHOLMOD(collapse_septree) (n, n, 1., 4,
 	    CParent, Cmember, cn) ;				NOT (lr >= 0) ;
     ok = CHOLMOD(metis)(A, fset, fsize, postorder, Perm, cn) ;	NOT (ok) ;
-    ok = CHOLMOD(ccolamd)(A, fset, fsize, Cmember, Perm, cn) ;	NOT (ok) ;
-    ok = CHOLMOD(csymamd)(A, Cmember, Perm, cn) ;		NOT (ok) ;
     lr = CHOLMOD(bisect)(A, fset, fsize, compress,
 	    Partition, cn) ;					NOT (lr >= 0) ;
     lr = CHOLMOD(metis_bisector)(A, Anw, Aew, Partition, cn) ;	NOT (lr >= 0) ;
 #endif
 
+#ifndef NCAMD
+    ok = CHOLMOD(ccolamd)(A, fset, fsize, Cmem2, Perm, cn) ;	NOT (ok) ;
+    ok = CHOLMOD(csymamd)(A, Cmem2, Perm, cn) ;		        NOT (ok) ;
+#endif
+
 }
 
 /* ========================================================================== */
diff --git a/CHOLMOD/Tcov/null2.c b/CHOLMOD/Tcov/null2.c
index 692e323..aa485e8 100644
--- a/CHOLMOD/Tcov/null2.c
+++ b/CHOLMOD/Tcov/null2.c
@@ -7,14 +7,14 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Null and error tests, continued. */
 
 #include "cm.h"
 #include "amd.h"
-#ifndef NPARTITION
+#ifndef NCAMD
 #include "camd.h"
 #endif
 
@@ -43,7 +43,7 @@ void null2 (cholmod_triplet *Tok, int do_nantests)
 	*R2p, *R2i ;
     double *Xwork, *Cx, *x, *Lx, *Tx, *Az, *R2x ;
     size_t size, nznew, gsave2 ;
-    UF_long lr ;
+    SuiteSparse_long lr ;
     void *pp, *ii, *jj, *xx ;
     Int p, i, j, d, nrhs, nrow, ncol, stype, fsizeok, nz, ok, n2, trial, anz,
 	nzmax, cset [CSETSIZE], Axbad_type, isreal, xtype, enz, Lxtype, Cxtype,
@@ -580,7 +580,7 @@ void null2 (cholmod_triplet *Tok, int do_nantests)
     /* camd */
     /* ---------------------------------------------------------------------- */
 
-#ifndef NPARTITION
+#ifndef NCAMD
     ok = CHOLMOD(camd)(NULL, NULL, 0, NULL, NULL, cm) ;		    NOT (ok) ;
     ok = CHOLMOD(camd)(A, NULL, 0, NULL, NULL, cm) ;		    NOT (ok) ;
     ok = CHOLMOD(camd)(NULL, NULL, 0, NULL, Pok, cm) ;		    NOT (ok) ;
@@ -611,9 +611,17 @@ void null2 (cholmod_triplet *Tok, int do_nantests)
 	    NULL, NULL, NULL, NULL, NULL, cm) ;			    NOT (ok) ;
     L = CHOLMOD(analyze)(NULL, cm) ;				    NOP (L) ;
     L = CHOLMOD(analyze)(Abad2, cm) ;				    NOP (L) ;
+    L = CHOLMOD(analyze)(A, cm) ;				    NOP (L) ;
+
+    /* test AMD backup strategy */
+    cm->nmethods = 2 ;
+    cm->method [0].ordering = -1 ;
+    cm->method [1].ordering = -1 ;
     L = CHOLMOD(analyze)(A, cm) ;				    OKP (L) ;
+
     cm->nmethods = 0 ;	/* restore defaults */
     cm->method [0].ordering = CHOLMOD_GIVEN ;
+    cm->method [1].ordering = CHOLMOD_AMD ;
     cm->print = 4 ;
     ok = CHOLMOD(print_common)("OKcm", cm) ;			    OK (ok) ;
     ok = CHOLMOD(print_factor)(L, "L symbolic", cm) ;		    OK (ok) ;
@@ -633,7 +641,7 @@ void null2 (cholmod_triplet *Tok, int do_nantests)
     /* ccolamd */
     /* ---------------------------------------------------------------------- */
 
-#ifndef NPARTITION
+#ifndef NCAMD
     ok = CHOLMOD(ccolamd)(NULL, fsetok, fsizeok, NULL, Pok, cm) ;   NOT (ok) ;
     ok = CHOLMOD(ccolamd)(A, fsetok, fsizeok, NULL, NULL, cm) ;   NOT (ok) ;
 
@@ -1170,7 +1178,7 @@ void null2 (cholmod_triplet *Tok, int do_nantests)
     OK (L->is_super) ;
 
     L->itype = CHOLMOD_INTLONG ;
-    ok = CHOLMOD(print_factor)(L, "L int/UF_long", cm) ;	    NOT (ok) ;
+    ok = CHOLMOD(print_factor)(L, "L int/long", cm) ;	            NOT (ok) ;
     L->itype = -1 ;
     ok = CHOLMOD(print_factor)(L, "L int unknown", cm) ;	    NOT (ok) ;
     L->itype = cm->itype ;
@@ -2117,7 +2125,8 @@ if (do_nantests)
 	cm->final_ll = FALSE ;
 	L6 = CHOLMOD(analyze)(C, cm) ;				    OKP (L6) ;
 	ok = CHOLMOD(factorize)(C, L6, cm) ;			    OK (ok) ;
-	ok1 = (cm->status == CHOLMOD_OK) ;
+        /* sometimes LAPACK says NaN is not pos.def, sometimes it doesn't...*/
+	ok1 = (cm->status == CHOLMOD_OK || cm->status == CHOLMOD_NOT_POSDEF) ;
 	ok = CHOLMOD(print_factor)(L6, "L6 supernan2", cm) ;	    OK (ok) ;
 	OK (ok1) ;
 	rcond = CHOLMOD(rcond) (L6, cm) ;		    OK (rcond == 0) ;
@@ -2151,7 +2160,8 @@ if (do_nantests)
 	cm->final_ll = FALSE ;
 	L6 = CHOLMOD(analyze)(C, cm) ;				    OKP (L6) ;
 	ok = CHOLMOD(factorize)(C, L6, cm) ;			    OK (ok) ;
-	ok1 = (cm->status == CHOLMOD_OK) ;
+        /* sometimes LAPACK says NaN is not pos.def, sometimes it doesn't...*/
+	ok1 = (cm->status == CHOLMOD_OK || cm->status == CHOLMOD_NOT_POSDEF) ;
 	ok = CHOLMOD(print_factor)(L6, "L6 supernan0", cm) ;	    OK (ok) ;
 	OK (ok1) ;
 	rcond = CHOLMOD(rcond) (L6, cm) ;		    OK (rcond == 0) ;
@@ -2215,7 +2225,11 @@ if (do_nantests)
 	ATp = AT->p ;
 	ATi = AT->i ;
 	fnz = ATp [i+1] - ATp [i] ;
-	ok = CHOLMOD(row_lsubtree)(A, ATi, fnz, i, L, C2, cm) ;	    OK (ok) ;
+	ok = CHOLMOD(row_lsubtree)(A, ATi, fnz, i, L, C2, cm) ;
+        /*
+        if (i < ncol) { OK (ok) ; } else { NOT (ok) ; }
+        */
+        OK (ok) ;
 
 	ok = CHOLMOD(row_lsubtree)(Abad2, ATi, fnz, i, L, C2, cm) ; NOT (ok) ;
 	ok = CHOLMOD(row_lsubtree)(A, NULL, fnz, i, L, C2, cm) ;    NOT (ok) ;
@@ -2229,16 +2243,32 @@ if (do_nantests)
 	ok = CHOLMOD(row_subtree)(A, NULL, i, Parent, C, cm) ;	    NOT (ok) ;
 	ok = CHOLMOD(row_subtree)(A, AT, nrow+1, Parent, C, cm) ;   NOT (ok) ;
     }
-    else if (A->stype == 1 && nrow > 0)
-    {
-	ok = CHOLMOD(row_subtree)(A, NULL, i, Parent, C, cm) ;	    OK (ok) ;
-	ok = CHOLMOD(row_lsubtree)(A, NULL, 0, i, L, C2, cm) ;	    OK (ok) ;
-    }
     else
     {
-	ok = CHOLMOD(row_subtree)(A, NULL, i, Parent, C, cm) ;	    NOT (ok) ;
-	ok = CHOLMOD(row_lsubtree)(A, NULL, 0, i, L, C2, cm) ;	    NOT (ok) ;
+	ok = CHOLMOD(row_subtree)(A, NULL, i, Parent, C, cm) ;
+        if (A->stype == 1 && nrow > 0)
+        {
+            OK (ok) ;
+        }
+        else
+        {
+            NOT (ok) ;
+        }
+        #if 0
+	ok = CHOLMOD(row_lsubtree)(A, NULL, 0, i, L, C2, cm) ;
+        printf ("%g %g %g\n", (double) A->stype, (double) nrow, (double) ok) ;
+        if (A->stype == 1 && nrow > 0 || (A->stype == 0 && nrow == 0 &&
+            A->ncol == 1))
+        {
+            OK (ok) ;
+        }
+        else
+        {
+            NOT (ok) ;
+        }
+        #endif
     }
+
     ok = CHOLMOD(row_subtree)(A, NULL, i, Parent, NULL, cm) ;	    NOT (ok) ;
     ok = CHOLMOD(row_subtree)(A, NULL, i, NULL, C, cm) ;	    NOT (ok) ;
     ok = CHOLMOD(row_lsubtree)(A, NULL, 0, i, L, NULL, cm) ;	    NOT (ok) ;
@@ -2622,7 +2652,7 @@ if (do_nantests)
     /* ccolamd/csymamd */
     /* ---------------------------------------------------------------------- */
 
-#ifndef NPARTITION
+#ifndef NCAMD
     ok = CHOLMOD(ccolamd)(A, fsetok, fsizeok, NULL, NULL, cm) ;	    NOT (ok) ;
     ok = CHOLMOD(ccolamd)(A, fsetok, fsizeok, NULL, Pok, cm) ;
     if (A->stype == 0)
@@ -3131,7 +3161,7 @@ if (do_nantests)
 	NOT (ok) ;
     }
 
-#ifndef NPARTITION
+#ifndef NCAMD
     ok = CHOLMOD(camd)(A, NULL, 0, NULL, Pok, cm) ;
     if (A->nrow == 0)
     {
@@ -3161,7 +3191,7 @@ if (do_nantests)
     }
 
 
-#ifndef NPARTITION
+#ifndef NCAMD
     test_memory_handler ( ) ;
     ok = CHOLMOD(ccolamd)(A, fsetok, fsizeok, NULL, Pok, cm) ;	    NOT (ok) ;
     ok = CHOLMOD(csymamd)(A, NULL, Pok, cm) ;			    NOT (ok) ;
diff --git a/CHOLMOD/Tcov/raw_factor.c b/CHOLMOD/Tcov/raw_factor.c
index edf8203..0192e3b 100644
--- a/CHOLMOD/Tcov/raw_factor.c
+++ b/CHOLMOD/Tcov/raw_factor.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Factorize A using cholmod_rowfac for the simplicial case, and the 
@@ -130,9 +130,9 @@ double raw_factor (cholmod_sparse *A, Int check_errors)
 	prefer_zomplex, Bxtype ;
     Int *Parent, *Post, *First, *Level, *Ri, *Rp, *LTp = NULL, *LTi = NULL, *P,
 	*mask, *RLinkUp ;
-    UF_long lr ;
+    SuiteSparse_long lr ;
     double beta [2] ;
-    unsigned UF_long save ;
+    unsigned SuiteSparse_long save ;
 
     /* ---------------------------------------------------------------------- */
     /* create the problem */
diff --git a/CHOLMOD/Tcov/solve.c b/CHOLMOD/Tcov/solve.c
index 380f304..fa601e4 100644
--- a/CHOLMOD/Tcov/solve.c
+++ b/CHOLMOD/Tcov/solve.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Test CHOLMOD for solving various systems of linear equations. */
@@ -179,16 +179,21 @@ double solve (cholmod_sparse *A)
     double r, enorm, snorm, maxerr = 0, gnorm, anorm, bnorm, xnorm, norm, rcond;
     cholmod_factor *L, *Lcopy, *L2 ;
     cholmod_sparse *Lmat, *Lo, *D, *Up, *S, *LD, *LDL, *E, *I, *C, *CC, *Ct,
-	*Ssym, *Cperm, *C2, *S2, *H, *F, *Lo1, *Aboth ;
+	*Ssym, *Cperm, *C2, *S2, *H, *F, *Lo1, *Aboth, *Bset ;
     cholmod_dense *X, *Cdense, *B, *Bcomplex, *Bzomplex, *Breal, *W, *R,
 	*A3, *C3, *E3 ;
+    cholmod_dense *B2, *B2complex, *B2zomplex, *B2real, *Ywork, *Ework ;
     cholmod_sparse *AFt, *AF, *G, *RowK, *Bsparse, *Xsparse ;
     double *Cx ;
+    double *B2x ;
     Int *P, *cset, *fset, *Parent, *Post, *RowCount, *ColCount,
 	     *First, *Level, *rcount, *ccount, *Lp, *Li ;
     Int p, i, j, k, n, nrhs, save, save2, csize, rank, nrow, ncol, is_ll,
 	xtype, isreal, prefer_zomplex, Lxtype, xtype2, save3 ;
-    int blas_ok = TRUE ;
+    cm->blas_ok = TRUE ;
+
+    Ywork = NULL ;
+    Ework = NULL ;
 
     if (cm->print > 1)
     {
@@ -220,6 +225,14 @@ double solve (cholmod_sparse *A)
     Bcomplex = CHOLMOD(copy_dense) (Bzomplex, cm) ;
     Breal = CHOLMOD(copy_dense) (Bzomplex, cm) ;
 
+    /* create another right-hand-side, slightly different */
+    B2 = CHOLMOD(copy_dense) (B, cm) ;
+    if (B2 != NULL)
+    {
+        B2x = (double *) B2->x ;
+        B2x [0] = 42 ;
+    }
+
     /* ---------------------------------------------------------------------- */
     /* analyze */
     /* ---------------------------------------------------------------------- */
@@ -273,6 +286,7 @@ double solve (cholmod_sparse *A)
 
     for (k = 0 ; k <= 1 ; k++)
     {
+
 	cm->prefer_zomplex = k ;
 
 	/* compute the residual, X complex if L or B not real */
@@ -281,6 +295,34 @@ double solve (cholmod_sparse *A)
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
+        /* now test the same thing, but with cholmod_solve2 */
+        CHOLMOD(solve2) (CHOLMOD_A, L, B, NULL, &X, NULL, &Ywork, &Ework, cm) ;
+	r = resid (A, X, B) ;
+	MAXERR (maxerr, r, 1) ;
+        CHOLMOD(solve2) (CHOLMOD_A, L, B2, NULL, &X, NULL, &Ywork, &Ework, cm) ;
+	r = resid (A, X, B2) ;
+	MAXERR (maxerr, r, 1) ;
+
+	CHOLMOD(free_dense) (&X, cm) ;
+	CHOLMOD(free_dense) (&Ywork, cm) ;
+	CHOLMOD(free_dense) (&Ework, cm) ;
+
+        /* see what happens if X has the wrong size or type on input.  This
+         * will free X on input, and reallocate it the right size and type */
+        X = CHOLMOD(ones) (1, 1, CHOLMOD_REAL, cm) ;
+        CHOLMOD(solve2) (CHOLMOD_A, L, B, NULL, &X, NULL, &Ywork, &Ework, cm) ;
+	r = resid (A, X, B) ;
+	MAXERR (maxerr, r, 1) ;
+	CHOLMOD(free_dense) (&Ywork, cm) ;
+
+        /* now X is OK, and so is E, but Y is null */
+        CHOLMOD(solve2) (CHOLMOD_A, L, B, NULL, &X, NULL, &Ywork, &Ework, cm) ;
+	r = resid (A, X, B) ;
+	MAXERR (maxerr, r, 1) ;
+	CHOLMOD(free_dense) (&X, cm) ;
+	CHOLMOD(free_dense) (&Ywork, cm) ;
+	CHOLMOD(free_dense) (&Ework, cm) ;
+
 	/* zomplex right-hand-side */
 	CHOLMOD(dense_xtype) (CHOLMOD_ZOMPLEX, Bzomplex, cm) ;
 	if (Bzomplex != NULL && B != NULL && B->xtype == CHOLMOD_REAL
@@ -301,6 +343,26 @@ double solve (cholmod_sparse *A)
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
+        B2zomplex = CHOLMOD(copy_dense) (Bzomplex, cm) ;
+        if (B2zomplex != NULL)
+        {
+            B2x = (double *) B2zomplex->x ;
+            B2x [0] = 99 ;
+        }
+
+        /* now test the same thing, but with cholmod_solve2 */
+        CHOLMOD(solve2) (CHOLMOD_A, L, Bzomplex, NULL, &X, NULL,
+            &Ywork, &Ework, cm) ;
+	r = resid (A, X, Bzomplex) ;
+	MAXERR (maxerr, r, 1) ;
+        CHOLMOD(solve2) (CHOLMOD_A, L, B2zomplex, NULL, &X, NULL,
+            &Ywork, &Ework, cm) ;
+	r = resid (A, X, B2zomplex) ;
+	MAXERR (maxerr, r, 1) ;
+	CHOLMOD(free_dense) (&X, cm) ;
+	CHOLMOD(free_dense) (&Ywork, cm) ;
+	CHOLMOD(free_dense) (&Ework, cm) ;
+
 	/* complex right-hand-side */
 	CHOLMOD(dense_xtype) (CHOLMOD_COMPLEX, Bcomplex, cm) ;
 	X = CHOLMOD(solve) (CHOLMOD_A, L, Bcomplex, cm) ;
@@ -308,6 +370,26 @@ double solve (cholmod_sparse *A)
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
+        B2complex = CHOLMOD(copy_dense) (Bcomplex, cm) ;
+        if (B2complex != NULL)
+        {
+            B2x = (double *) B2complex->x ;
+            B2x [0] = 777 ;
+        }
+
+        /* now test the same thing, but with cholmod_solve2 */
+        CHOLMOD(solve2) (CHOLMOD_A, L, Bcomplex, NULL, &X, NULL,
+            &Ywork, &Ework, cm) ;
+	r = resid (A, X, Bcomplex) ;
+	MAXERR (maxerr, r, 1) ;
+        CHOLMOD(solve2) (CHOLMOD_A, L, B2complex, NULL, &X, NULL,
+            &Ywork, &Ework, cm) ;
+	r = resid (A, X, B2complex) ;
+	MAXERR (maxerr, r, 1) ;
+	CHOLMOD(free_dense) (&X, cm) ;
+	CHOLMOD(free_dense) (&Ywork, cm) ;
+	CHOLMOD(free_dense) (&Ework, cm) ;
+
 	/* real right-hand-side */
 	CHOLMOD(dense_xtype) (CHOLMOD_REAL, Breal, cm) ;
 	X = CHOLMOD(solve) (CHOLMOD_A, L, Breal, cm) ;
@@ -315,6 +397,26 @@ double solve (cholmod_sparse *A)
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
+        B2real = CHOLMOD(copy_dense) (Breal, cm) ;
+        if (B2real != NULL)
+        {
+            B2x = (double *) B2real->x ;
+            B2x [0] = 1234 ;
+        }
+
+        /* now test the same thing, but with cholmod_solve2 */
+        CHOLMOD(solve2) (CHOLMOD_A, L, Breal, NULL, &X, NULL,
+            &Ywork, &Ework, cm) ;
+	r = resid (A, X, Breal) ;
+	MAXERR (maxerr, r, 1) ;
+        CHOLMOD(solve2) (CHOLMOD_A, L, B2real, NULL, &X, NULL,
+            &Ywork, &Ework, cm) ;
+	r = resid (A, X, B2real) ;
+	MAXERR (maxerr, r, 1) ;
+	CHOLMOD(free_dense) (&X, cm) ;
+	CHOLMOD(free_dense) (&Ywork, cm) ;
+	CHOLMOD(free_dense) (&Ework, cm) ;
+
 	/* sparse solve of Ax=b, b real */
 	Bsparse = CHOLMOD(dense_to_sparse) (Breal, TRUE, cm) ;
 	Xsparse = CHOLMOD(spsolve) (CHOLMOD_A, L, Bsparse, cm) ;
@@ -338,6 +440,10 @@ double solve (cholmod_sparse *A)
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_sparse) (&Bsparse, cm) ;
 	CHOLMOD(free_sparse) (&Xsparse, cm) ;
+
+        CHOLMOD(free_dense) (&B2zomplex, cm) ;
+        CHOLMOD(free_dense) (&B2complex, cm) ;
+        CHOLMOD(free_dense) (&B2real, cm) ;
     }
 
     cm->prefer_zomplex = FALSE ;
@@ -392,7 +498,7 @@ double solve (cholmod_sparse *A)
 		    BLAS_zgemm ("N", "N", n, n, n, one, A3->x, n, C3->x, n,
 			minusone, E3->x, n) ;
 		}
-		OK (blas_ok) ;
+		OK (cm->blas_ok) ;
 	    }
 	    r = CHOLMOD(norm_dense) (E3, 1, cm) ;
 	    CHOLMOD(free_dense) (&A3, cm) ;
@@ -735,6 +841,7 @@ double solve (cholmod_sparse *A)
 
     for (nrhs = 1 ; nrhs <= 4 ; nrhs++)	    /* reduced here (6 to 4) */
     {
+
 	if (B == NULL)
 	{
 	    break ;
@@ -742,42 +849,48 @@ double solve (cholmod_sparse *A)
 
 	B->ncol = nrhs ;
 
-	/* solve LDL'x=b */
+        /* solve Ax=b and compare with the sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_A, L, B, cm) ;
+	r = resid (A, X, B) ;
+	MAXERR (maxerr, r, 1) ;
+	CHOLMOD(free_dense) (&X, cm) ;
+
+	/* solve LDL'x=b and compare with sparse solve */
 	X = CHOLMOD(solve) (CHOLMOD_LDLt, L, B, cm) ;
 	/* printf ("LDL'x=b %p %p %p\n", Lo, X, B) ; */
 	r = resid3 (Lo, D, Up, X, B) ;
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
-	/* solve LDx=b */
+	/* solve LDx=b and compare with sparse solve */
 	X = CHOLMOD(solve) (CHOLMOD_LD, L, B, cm) ;
 	/* printf ("LDx=b %p %p %p\n", Lo, X, B) ; */
 	r = resid3 (Lo, D, NULL, X, B) ;
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
-	/* solve DL'x=b */
+	/* solve DL'x=b and compare with sparse solve */
 	X = CHOLMOD(solve) (CHOLMOD_DLt, L, B, cm) ;
 	/* printf ("DL'x=b %p %p %p\n", D, X, B) ; */
 	r = resid3 (D, Up, NULL, X, B) ;
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
-	/* solve Lx=b */
+	/* solve Lx=b and compare with sparse solve */
 	X = CHOLMOD(solve) (CHOLMOD_L, L, B, cm) ;
 	/* printf ("Lx=b %p %p %p\n", Lo, X, B) ; */
 	r = resid3 (Lo, NULL, NULL, X, B) ;
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
-	/* solve L'x=b */
+	/* solve L'x=b and compare with sparse solve */
 	X = CHOLMOD(solve) (CHOLMOD_Lt, L, B, cm) ;
 	/* printf ("L'x=b %p %p %p\n", Up, X, B) ; */
 	r = resid3 (Up, NULL, NULL, X, B) ;
 	MAXERR (maxerr, r, 1) ;
 	CHOLMOD(free_dense) (&X, cm) ;
 
-	/* solve Dx=b */
+	/* solve Dx=b and compare with sparse solve */
 	X = CHOLMOD(solve) (CHOLMOD_D, L, B, cm) ;
 	/* printf ("Dx=b %p %p %p\n", D, X, B) ; */
 	r = resid3 (D, NULL, NULL, X, B) ;
@@ -789,32 +902,285 @@ double solve (cholmod_sparse *A)
 	{
 	    cm->prefer_zomplex = k ;
 
-	    /* x=Pb */
+	    /* x=Pb and compare with sparse solve */
 	    X = CHOLMOD(solve) (CHOLMOD_P, L, B, cm) ;
 	    r = pnorm (X, P, B, FALSE) ;
 	    MAXERR (maxerr, r, 1) ;
 	    CHOLMOD(free_dense) (&X, cm) ;
 
-	    /* x=P'b */
+	    /* x=P'b and compare with sparse solve */
 	    X = CHOLMOD(solve) (CHOLMOD_Pt, L, B, cm) ;
 	    r = pnorm (X, P, B, TRUE) ;
 	    MAXERR (maxerr, r, 1) ;
 	    CHOLMOD(free_dense) (&X, cm) ;
 	}
 	cm->prefer_zomplex = save2 ;
-
     }
 
     /* turn memory tests back on, where we left off ] */
     my_tries = save3 ;
 
     CHOLMOD(free_dense) (&B, cm) ;
+    CHOLMOD(free_dense) (&B2, cm) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* test the sparse solve */
+    /* ---------------------------------------------------------------------- */
+
+    /* turn off memory tests [ */
+    save3 = my_tries ;
+    my_tries = -1 ;
+
+    /* get ready for sparse solve */
+    Bset = CHOLMOD(allocate_sparse) (n, 1, 1, FALSE, TRUE, 0,
+        CHOLMOD_PATTERN, cm) ;
+    B = CHOLMOD(zeros) (n, 1, Lxtype, cm) ;
+
+    printf ("testing sparse solve, maxerr so far %g\n", maxerr) ;
+
+    if (Bset != NULL && B != NULL && n > 0)
+    {
+        cholmod_sparse *Xset ;
+        cholmod_dense *X2 ;
+        Int *Bseti, *Bsetp, *Xseti ;
+        double *X2x, *X1x, *Bx, *Bz ;
+
+        Xset = NULL ;
+        X2 = NULL ;
+
+        Bseti = Bset->i ;
+        Bsetp = Bset->p ;
+        Bsetp [0] = 0 ;
+        Bsetp [1] = 1 ;
+        Bseti [0] = 0 ;   /* first entry in b is nonzero, all others zero */
+        Bx = B->x ;
+        Bz = B->z ;
+
+        if (B->xtype == CHOLMOD_REAL)
+        {
+            Bx [0] = 42 ;
+        }
+        else if (B->xtype == CHOLMOD_COMPLEX)
+        {
+            Bx [0] = -2 ;
+            Bx [1] = 1 ;
+        }
+        else
+        {
+            Bx [0] = 77 ;
+            Bz [0] = -2 ;
+        }
+
+        /* solve Ax=b and compare with the sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_A, L, B, cm) ;
+        if (X != NULL)
+        {
+            r = resid (A, X, B) ;
+            MAXERR (maxerr, r, 1) ;
+            CHOLMOD(solve2) (CHOLMOD_A, L, B, Bset, &X2, &Xset,
+                &Ywork, &Ework, cm) ;
+            if (X2 != NULL)
+            {
+                X2x = X2->x ;
+                X1x = X->x ;
+                r = fabs (X2x [0] - X1x [0]) ;
+                printf ("solve2 Ax=b err %g\n", r) ;
+                MAXERR (maxerr, r, 1) ;
+            }
+        }
+        CHOLMOD(free_dense) (&X, cm) ;
+
+	/* solve LDL'x=b and compare with sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_LDLt, L, B, cm) ;
+        if (X != NULL)
+        {
+            /* printf ("LDL'x=b %p %p %p\n", Lo, X, B) ; */
+            r = resid3 (Lo, D, Up, X, B) ;
+            MAXERR (maxerr, r, 1) ;
+            CHOLMOD(solve2) (CHOLMOD_LDLt, L, B, Bset, &X2, &Xset,
+                &Ywork, &Ework, cm) ;
+            if (X2 != NULL)
+            {
+                X2x = X2->x ;
+                X1x = X->x ;
+                r = fabs (X2x [0] - X1x [0]) ;
+                printf ("solve2 LDL'x=b err %g\n", r) ;
+                MAXERR (maxerr, r, 1) ;
+            }
+        }
+	CHOLMOD(free_dense) (&X, cm) ;
+
+	/* solve LDx=b and compare with sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_LD, L, B, cm) ;
+        if (X != NULL)
+        {
+            /* printf ("LDx=b %p %p %p\n", Lo, X, B) ; */
+            r = resid3 (Lo, D, NULL, X, B) ;
+            MAXERR (maxerr, r, 1) ;
+            CHOLMOD(solve2) (CHOLMOD_LD, L, B, Bset, &X2, &Xset,
+                &Ywork, &Ework, cm) ;
+            if (X2 != NULL)
+            {
+                X2x = X2->x ;
+                X1x = X->x ;
+                r = fabs (X2x [0] - X1x [0]) ;
+                printf ("solve2 LDx=b err %g\n", r) ;
+                MAXERR (maxerr, r, 1) ;
+            }
+        }
+        CHOLMOD(free_dense) (&X, cm) ;
+
+	/* solve DL'x=b and compare with sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_DLt, L, B, cm) ;
+        if (X != NULL)
+        {
+            /* printf ("DL'x=b %p %p %p\n", D, X, B) ; */
+            r = resid3 (D, Up, NULL, X, B) ;
+            MAXERR (maxerr, r, 1) ;
+            CHOLMOD(solve2) (CHOLMOD_DLt, L, B, Bset, &X2, &Xset,
+                &Ywork, &Ework, cm) ;
+            if (X2 != NULL)
+            {
+                X2x = X2->x ;
+                X1x = X->x ;
+                r = fabs (X2x [0] - X1x [0]) ;
+                printf ("solve2 DL'x=b err %g\n", r) ;
+                MAXERR (maxerr, r, 1) ;
+            }
+        }
+        CHOLMOD(free_dense) (&X, cm) ;
+
+	/* solve Lx=b and compare with sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_L, L, B, cm) ;
+        if (X != NULL)
+        {
+            /* printf ("Lx=b %p %p %p\n", Lo, X, B) ; */
+            r = resid3 (Lo, NULL, NULL, X, B) ;
+            MAXERR (maxerr, r, 1) ;
+            CHOLMOD(solve2) (CHOLMOD_L, L, B, Bset, &X2, &Xset,
+                &Ywork, &Ework, cm) ;
+            if (X2 != NULL)
+            {
+                X2x = X2->x ;
+                X1x = X->x ;
+                r = fabs (X2x [0] - X1x [0]) ;
+                printf ("solve2 Lx=b err %g\n", r) ;
+                MAXERR (maxerr, r, 1) ;
+            }
+        }
+        CHOLMOD(free_dense) (&X, cm) ;
+
+	/* solve L'x=b and compare with sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_Lt, L, B, cm) ;
+        if (X != NULL)
+        {
+            /* printf ("L'x=b %p %p %p\n", Up, X, B) ; */
+            r = resid3 (Up, NULL, NULL, X, B) ;
+            MAXERR (maxerr, r, 1) ;
+            CHOLMOD(solve2) (CHOLMOD_Lt, L, B, Bset, &X2, &Xset,
+                &Ywork, &Ework, cm) ;
+            if (X2 != NULL)
+            {
+                X2x = X2->x ;
+                X1x = X->x ;
+                r = fabs (X2x [0] - X1x [0]) ;
+                printf ("solve2 Ltx=b err %g\n", r) ;
+                MAXERR (maxerr, r, 1) ;
+            }
+        }
+        CHOLMOD(free_dense) (&X, cm) ;
+
+	/* solve Dx=b and compare with sparse solve */
+	X = CHOLMOD(solve) (CHOLMOD_D, L, B, cm) ;
+        if (X != NULL)
+        {
+            /* printf ("Dx=b %p %p %p\n", D, X, B) ; */
+            r = resid3 (D, NULL, NULL, X, B) ;
+            MAXERR (maxerr, r, 1) ;
+            CHOLMOD(solve2) (CHOLMOD_D, L, B, Bset, &X2, &Xset,
+                &Ywork, &Ework, cm) ;
+            if (X2 != NULL)
+            {
+                X2x = X2->x ;
+                X1x = X->x ;
+                r = fabs (X2x [0] - X1x [0]) ;
+                printf ("solve2 Dx=b err %g\n", r) ;
+                MAXERR (maxerr, r, 1) ;
+            }
+        }
+        CHOLMOD(free_dense) (&X, cm) ;
+
+#if 0
+	save2 = cm->prefer_zomplex ;
+	for (k = 0 ; k <= 1 ; k++)
+	{
+	    cm->prefer_zomplex = k ;
+
+	    /* x=Pb and compare with sparse solve */
+	    X = CHOLMOD(solve) (CHOLMOD_P, L, B, cm) ;
+            if (X != NULL)
+            {
+                r = pnorm (X, P, B, FALSE) ;
+                MAXERR (maxerr, r, 1) ;
+                CHOLMOD(solve2) (CHOLMOD_P, L, B, Bset, &X2, &Xset,
+                    &Ywork, &Ework, cm) ;
+                if (X2 != NULL && Xset != NULL)
+                {
+                    X2x = X2->x ;
+                    X1x = X->x ;
+                    Xseti = Xset->i ;
+                    i = Xseti [0] ;
+                    r = fabs (X2x [i] - X1x [i]) ;
+                    printf ("solve2 Px=b err %g\n", r) ;
+                    MAXERR (maxerr, r, 1) ;
+                }
+            }
+            CHOLMOD(free_dense) (&X, cm) ;
+
+	    /* x=P'b and compare with sparse solve */
+	    X = CHOLMOD(solve) (CHOLMOD_Pt, L, B, cm) ;
+            if (X != NULL)
+            {
+                r = pnorm (X, P, B, TRUE) ;
+                MAXERR (maxerr, r, 1) ;
+                CHOLMOD(solve2) (CHOLMOD_Pt, L, B, Bset, &X2, &Xset,
+                    &Ywork, &Ework, cm) ;
+                if (X2 != NULL && Xset != NULL)
+                {
+                    X2x = X2->x ;
+                    X1x = X->x ;
+                    Xseti = Xset->i ;
+                    i = Xseti [0] ;
+                    r = fabs (X2x [i] - X1x [i]) ;
+                    printf ("solve2 P'x=b err %g\n", r) ;
+                    MAXERR (maxerr, r, 1) ;
+                }
+            }
+	    CHOLMOD(free_dense) (&X, cm) ;
+	}
+	cm->prefer_zomplex = save2 ;
+#endif
+
+        CHOLMOD(free_sparse) (&Xset, cm) ;
+        CHOLMOD(free_dense) (&X2, cm) ;
+        CHOLMOD(free_dense) (&Ywork, cm) ;
+        CHOLMOD(free_dense) (&Ework, cm) ;
+    }
+
+    CHOLMOD(free_sparse) (&Bset, cm) ;
+    CHOLMOD(free_dense) (&B, cm) ;
+
+    /* turn memory tests back on, where we left off ] */
+    my_tries = save3 ;
+
     CHOLMOD(free_sparse) (&I, cm) ;
     CHOLMOD(free_sparse) (&D, cm) ;
     CHOLMOD(free_sparse) (&Lo, cm) ;
     CHOLMOD(free_sparse) (&Up, cm) ;
     CHOLMOD(free_sparse) (&Lmat, cm) ;
 
+    printf ("done testing sparse solve, maxerr so far %g\n", maxerr) ;
+
     /* ---------------------------------------------------------------------- */
     /* update the factorization */
     /* ---------------------------------------------------------------------- */
diff --git a/CHOLMOD/Tcov/test_ops.c b/CHOLMOD/Tcov/test_ops.c
index 2f1ece1..5b07eda 100644
--- a/CHOLMOD/Tcov/test_ops.c
+++ b/CHOLMOD/Tcov/test_ops.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Test CHOLMOD matrix operators. */
@@ -199,7 +199,7 @@ double test_ops (cholmod_sparse *A)
     Int n, kk, k, nrow, ncol, len, nz, ok, i, j, stype, nmin, mode, isreal,
 	xtype, xtype2, mtype, asym, xmatched, pmatched, nzoffdiag, nz_diag ;
     size_t nz1, nz2 ;
-    void (*save) (int, char *, int, char *) ;
+    void (*save) (int, const char *, int, const char *) ;
     double alpha [2], beta [2], *Xx ;
     FILE *f ;
     int option, save3 ;
@@ -298,7 +298,7 @@ double test_ops (cholmod_sparse *A)
     f = fopen ("temp1.mtx", "w") ;
     asym = CHOLMOD(write_sparse) (f, A, NULL, "comments.txt", cm) ;
     fclose (f) ;
-    printf ("write_sparse, asym: %d\n", asym) ;
+    printf ("write_sparse, asym: "ID"\n", asym) ;
     OK (IMPLIES (A != NULL, asym > EMPTY)) ;
 
     f = fopen ("temp1.mtx", "r") ;
@@ -313,7 +313,7 @@ double test_ops (cholmod_sparse *A)
     asym = CHOLMOD(write_sparse) (f, A, NULL, "comments.txt", cm) ;
     A->xtype = save3 ;
     fclose (f) ;
-    printf ("write_sparse3, asym: %d\n", asym) ;
+    printf ("write_sparse3, asym: "ID"\n", asym) ;
 
     f = fopen ("temp3.mtx", "r") ;
     C = CHOLMOD(read_sparse) (f, cm) ;
@@ -360,8 +360,9 @@ double test_ops (cholmod_sparse *A)
     {
 	asym = CHOLMOD(symmetry) (A, option, &xmatched, &pmatched, &nzoffdiag,
 	    &nz_diag, cm);
-	printf ("symmetry, asym: %d matched %d %d offdiag %d diag %d\n", asym,
-	    xmatched, pmatched, nzoffdiag, nz_diag) ;
+	printf
+        ("symmetry, asym: "ID" matched "ID" "ID" offdiag "ID" diag "ID"\n",
+            asym, xmatched, pmatched, nzoffdiag, nz_diag) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -830,7 +831,7 @@ double test_ops (cholmod_sparse *A)
 #ifndef NPARTITION
     if (A != NULL && A->nrow == A->ncol)
     {
-	UF_long nc, nc_new ;
+	SuiteSparse_long nc, nc_new ;
 	Int cnz, csep, save2 ;
 	Int *Cnw, *Cew, *Cmember, *CParent, *Perm ;
 	double save1 ;
diff --git a/CHOLMOD/Tcov/unpack.c b/CHOLMOD/Tcov/unpack.c
index 4f91348..c37ccc8 100644
--- a/CHOLMOD/Tcov/unpack.c
+++ b/CHOLMOD/Tcov/unpack.c
@@ -7,7 +7,7 @@
  * The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
  * General Public License.  See gpl.txt for a text of the license.
  * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
 /* Create an unpacked, unsorted version of a matrix, with random-sized gaps in
diff --git a/CHOLMOD/Valgrind/License.txt b/CHOLMOD/Valgrind/License.txt
index 86ecced..8248d6c 100644
--- a/CHOLMOD/Valgrind/License.txt
+++ b/CHOLMOD/Valgrind/License.txt
@@ -1,6 +1,6 @@
 CHOLMOD/Valgrind Module.  Copyright (C) 2005-2006, Timothy A. Davis.
 CHOLMOD is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Note that this license is for the CHOLMOD/Valgrind module only.
 All CHOLMOD modules are licensed separately.
diff --git a/CHOLMOD/Valgrind/Make.inc b/CHOLMOD/Valgrind/Make.inc
index 9cd75c7..622438a 100644
--- a/CHOLMOD/Valgrind/Make.inc
+++ b/CHOLMOD/Valgrind/Make.inc
@@ -5,4 +5,4 @@ V = valgrind --suppressions=suppress --quiet
 COVER =
 
 # no test coverage needed
-CFLAGS = -O0 -g
+CF = -O0 -g
diff --git a/CHOLMOD/Valgrind/README.txt b/CHOLMOD/Valgrind/README.txt
index 574640a..e4d5bca 100644
--- a/CHOLMOD/Valgrind/README.txt
+++ b/CHOLMOD/Valgrind/README.txt
@@ -1,4 +1,5 @@
 Torture test for CHOLMOD, using valgrind.  Requires Linux.
+http://www.suitesparse.com
 
 Type "make" to compile and run CHOLMOMD with valgrind.
 Every line of CHOLMOD will be exercised, and its results
diff --git a/COLAMD/Demo/Makefile b/COLAMD/Demo/Makefile
index f08df2a..a4ddbc0 100644
--- a/COLAMD/Demo/Makefile
+++ b/COLAMD/Demo/Makefile
@@ -4,13 +4,16 @@
 
 default: colamd_example colamd_l_example
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-I = -I../Include -I../../UFconfig
+I = -I../Include -I../../SuiteSparse_config
 
-C = $(CC) $(CFLAGS) $(I)
+C = $(CC) $(CF) $(I)
+
+LIB2 = ../../SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 library:
+	( cd ../../SuiteSparse_config ; $(MAKE) )
 	( cd ../Lib ; $(MAKE) )
 
 #------------------------------------------------------------------------------
@@ -20,14 +23,14 @@ library:
 dist:
 
 colamd_example: colamd_example.c library
-	$(C) -o colamd_example colamd_example.c ../Lib/libcolamd.a -lm
+	$(C) -o colamd_example colamd_example.c ../Lib/libcolamd.a $(LIB2)
 	- ./colamd_example > my_colamd_example.out
 	- diff colamd_example.out my_colamd_example.out
 
 colamd_l_example: colamd_l_example.c library
-	$(C) -o colamd_l_example colamd_l_example.c ../Lib/libcolamd.a -lm
+	$(C) -o colamd_l_example colamd_l_example.c ../Lib/libcolamd.a $(LIB2)
 	- ./colamd_l_example > my_colamd_l_example.out
-	- diff colamd_example.out my_colamd_example.out
+	- diff colamd_l_example.out my_colamd_l_example.out
 
 #------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
@@ -41,3 +44,4 @@ purge: distclean
 distclean: clean
 	- $(RM) colamd_example colamd_l_example
 	- $(RM) my_colamd_example.out my_colamd_l_example.out
+	- $(RM) -r *.dSYM
diff --git a/COLAMD/Demo/colamd_example.c b/COLAMD/Demo/colamd_example.c
index fe824d8..3295186 100644
--- a/COLAMD/Demo/colamd_example.c
+++ b/COLAMD/Demo/colamd_example.c
@@ -25,8 +25,7 @@
 
     (where x denotes a nonzero value).
 
-    See http://www.cise.ufl.edu/research/sparse/colamd/ (the colamd.c file)
-    for the routines this program calls, and for the License.
+    See the colamd.c for the routines this program calls, and for the License.
 */
 
 /* ========================================================================== */
diff --git a/COLAMD/Demo/colamd_example.out b/COLAMD/Demo/colamd_example.out
index 93d121d..305164c 100644
--- a/COLAMD/Demo/colamd_example.out
+++ b/COLAMD/Demo/colamd_example.out
@@ -15,7 +15,7 @@ Column 3, with 2 entries:
     row 1
     row 3
 
-colamd version 2.7, Nov 1, 2007: OK.  
+colamd version 2.9, Oct 10, 2014: OK.  
 colamd: number of dense or empty rows ignored:           0
 colamd: number of dense or empty columns ignored:        0
 colamd: number of garbage collections performed:         0
@@ -38,7 +38,7 @@ Column 3, with 1 entries:
     row 4
 Column 4, with 0 entries:
 
-symamd version 2.7, Nov 1, 2007: OK.  
+symamd version 2.9, Oct 10, 2014: OK.  
 symamd: number of dense or empty rows ignored:           0
 symamd: number of dense or empty columns ignored:        0
 symamd: number of garbage collections performed:         0
diff --git a/COLAMD/Demo/colamd_l_example.c b/COLAMD/Demo/colamd_l_example.c
index 9ff9aeb..e1345e9 100644
--- a/COLAMD/Demo/colamd_l_example.c
+++ b/COLAMD/Demo/colamd_l_example.c
@@ -26,14 +26,14 @@
     (where x denotes a nonzero value).
 
 
-    See http://www.cise.ufl.edu/research/sparse/colamd/ (the colamd.c file)
-    for the routines this program calls, and for the License.
+    See the colamd.c for the routines this program calls, and for the License.
 */
 
 /* ========================================================================== */
 
 #include <stdio.h>
 #include "colamd.h"
+#define Long SuiteSparse_long
 
 #define A_NNZ 11
 #define A_NROW 5
@@ -43,9 +43,6 @@
 #define B_NNZ 4
 #define B_N 5
 
-/* define UF_long */
-#include "UFconfig.h"
-
 int main (void)
 {
 
@@ -53,14 +50,14 @@ int main (void)
     /* input matrix A definition */
     /* ====================================================================== */
 
-    UF_long A [ALEN] = {
+    Long A [ALEN] = {
 
     	0, 1, 4,		/* row indices of nonzeros in column 0 */
 	2, 4,			/* row indices of nonzeros in column 1 */
 	0, 1, 2, 3,		/* row indices of nonzeros in column 2 */
 	1, 3} ;			/* row indices of nonzeros in column 3 */
 
-    UF_long p [ ] = {
+    Long p [ ] = {
 
     	0,			/* column 0 is in A [0..2] */
 	3,			/* column 1 is in A [3..4] */ 
@@ -72,7 +69,7 @@ int main (void)
     /* input matrix B definition */
     /* ====================================================================== */
 
-    UF_long B [ ] = {		/* Note: only strictly lower triangular part */
+    Long B [ ] = {              /* Note: only strictly lower triangular part */
     				/* is included, since symamd ignores the */
 				/* diagonal and upper triangular part of B. */
 
@@ -82,7 +79,7 @@ int main (void)
     	4			/* row indices of nonzeros in column 3 */
     	} ;			/* row indices of nonzeros in column 4 (none) */
 
-    UF_long q [ ] = {
+    Long q [ ] = {
 
     	0,			/* column 0 is in B [0] */
 	1,			/* column 1 is in B [1..2] */ 
@@ -95,10 +92,10 @@ int main (void)
     /* other variable definitions */
     /* ====================================================================== */
 
-    UF_long perm [B_N+1] ;	/* note the size is N+1 */
-    UF_long stats [COLAMD_STATS] ;/* for colamd and symamd output statistics */
+    Long perm [B_N+1] ;	        /* note the size is N+1 */
+    Long stats [COLAMD_STATS] ; /* for colamd and symamd output statistics */
 
-    UF_long row, col, pp, length, ok ;
+    Long row, col, pp, length, ok ;
 
     /* ====================================================================== */
     /* dump the input matrix A */
diff --git a/COLAMD/Demo/colamd_l_example.out b/COLAMD/Demo/colamd_l_example.out
index 3605229..2520a5f 100644
--- a/COLAMD/Demo/colamd_l_example.out
+++ b/COLAMD/Demo/colamd_l_example.out
@@ -15,7 +15,7 @@ Column 3, with 2 entries:
     row 1
     row 3
 
-colamd version 2.7, Nov 1, 2007: OK.  
+colamd version 2.9, Oct 10, 2014: OK.  
 colamd: number of dense or empty rows ignored:           0
 colamd: number of dense or empty columns ignored:        0
 colamd: number of garbage collections performed:         0
@@ -38,7 +38,7 @@ Column 3, with 1 entries:
     row 4
 Column 4, with 0 entries:
 
-symamd version 2.7, Nov 1, 2007: OK.  
+symamd version 2.9, Oct 10, 2014: OK.  
 symamd: number of dense or empty rows ignored:           0
 symamd: number of dense or empty columns ignored:        0
 symamd: number of garbage collections performed:         0
diff --git a/COLAMD/Doc/ChangeLog b/COLAMD/Doc/ChangeLog
index 29308e9..e95f157 100644
--- a/COLAMD/Doc/ChangeLog
+++ b/COLAMD/Doc/ChangeLog
@@ -1,3 +1,27 @@
+Oct 10, 2014: version 2.9.1
+
+    modified MATLAB/colamd_make.m.  No change to C code except version number.
+
+July 31, 2013: version 2.9.0
+
+    * changed malloc and printf pointers to use SuiteSparse_config
+
+Jun 1, 2012: version 2.8.0
+
+    * UFconfig replaced with SuiteSparse_config
+
+Dec 7, 2011: version 2.7.4
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+
+Jan 25, 2011: version 2.7.3
+
+    * minor fix to "make install"
+
+Nov 30, 2009: version 2.7.2
+
+    * added "make install" and "make uninstall"
+
 May 31, 2007: version 2.7.0
 
     * ported to 64-bit MATLAB
diff --git a/COLAMD/Include/colamd.h b/COLAMD/Include/colamd.h
index 26372d8..ee4f644 100644
--- a/COLAMD/Include/colamd.h
+++ b/COLAMD/Include/colamd.h
@@ -10,7 +10,7 @@
     Authors:
 
 	The authors of the code itself are Stefan I. Larimore and Timothy A.
-	Davis (davis at cise.ufl.edu), University of Florida.  The algorithm was
+	Davis (DrTimothyAldenDavis at gmail.com).  The algorithm was
 	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
 	Ng, Oak Ridge National Laboratory.
 
@@ -34,12 +34,8 @@
 
     Availability:
 
-	The colamd/symamd library is available at
-
-	    http://www.cise.ufl.edu/research/sparse/colamd/
-
-	This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.h
-	file.  It is required by the colamd.c, colamdmex.c, and symamdmex.c
+	The colamd/symamd library is available at http://www.suitesparse.com
+	This file is required by the colamd.c, colamdmex.c, and symamdmex.c
 	files, and by any C code that calls the routines whose prototypes are
 	listed below, or that uses the colamd/symamd definitions listed below.
 
@@ -81,10 +77,10 @@ extern "C" {
  * Versions 2.3 and earlier of COLAMD do not include a #define'd version number.
  */
 
-#define COLAMD_DATE "Nov 1, 2007"
+#define COLAMD_DATE "Oct 10, 2014"
 #define COLAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
 #define COLAMD_MAIN_VERSION 2
-#define COLAMD_SUB_VERSION 7
+#define COLAMD_SUB_VERSION 9
 #define COLAMD_SUBSUB_VERSION 1
 #define COLAMD_VERSION \
 	COLAMD_VERSION_CODE(COLAMD_MAIN_VERSION,COLAMD_SUB_VERSION)
@@ -139,8 +135,7 @@ extern "C" {
 /* === Prototypes of user-callable routines ================================= */
 /* ========================================================================== */
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
 size_t colamd_recommended	/* returns recommended value of Alen, */
 				/* or 0 if input arguments are erroneous */
@@ -153,9 +148,9 @@ size_t colamd_recommended	/* returns recommended value of Alen, */
 size_t colamd_l_recommended	/* returns recommended value of Alen, */
 				/* or 0 if input arguments are erroneous */
 (
-    UF_long nnz,		/* nonzeros in A */
-    UF_long n_row,		/* number of rows in A */
-    UF_long n_col		/* number of columns in A */
+    SuiteSparse_long nnz,       /* nonzeros in A */
+    SuiteSparse_long n_row,     /* number of rows in A */
+    SuiteSparse_long n_col      /* number of columns in A */
 ) ;
 
 void colamd_set_defaults	/* sets default parameters */
@@ -179,15 +174,16 @@ int colamd			/* returns (1) if successful, (0) otherwise*/
     int stats [COLAMD_STATS]	/* colamd output statistics and error codes */
 ) ;
 
-UF_long colamd_l		/* returns (1) if successful, (0) otherwise*/
+SuiteSparse_long colamd_l       /* returns (1) if successful, (0) otherwise*/
 (				/* A and p arguments are modified on output */
-    UF_long n_row,		/* number of rows in A */
-    UF_long n_col,		/* number of columns in A */
-    UF_long Alen,		/* size of the array A */
-    UF_long A [],		/* row indices of A, of size Alen */
-    UF_long p [],		/* column pointers of A, of size n_col+1 */
+    SuiteSparse_long n_row,     /* number of rows in A */
+    SuiteSparse_long n_col,     /* number of columns in A */
+    SuiteSparse_long Alen,      /* size of the array A */
+    SuiteSparse_long A [],      /* row indices of A, of size Alen */
+    SuiteSparse_long p [],      /* column pointers of A, of size n_col+1 */
     double knobs [COLAMD_KNOBS],/* parameter settings for colamd */
-    UF_long stats [COLAMD_STATS]/* colamd output statistics and error codes */
+    SuiteSparse_long stats [COLAMD_STATS]   /* colamd output statistics
+                                             * and error codes */
 ) ;
 
 int symamd				/* return (1) if OK, (0) otherwise */
@@ -206,14 +202,14 @@ int symamd				/* return (1) if OK, (0) otherwise */
     					/* mxFree (for MATLAB mexFunction) */
 ) ;
 
-UF_long symamd_l			/* return (1) if OK, (0) otherwise */
+SuiteSparse_long symamd_l               /* return (1) if OK, (0) otherwise */
 (
-    UF_long n,				/* number of rows and columns of A */
-    UF_long A [],			/* row indices of A */
-    UF_long p [],			/* column pointers of A */
-    UF_long perm [],			/* output permutation, size n_col+1 */
+    SuiteSparse_long n,                 /* number of rows and columns of A */
+    SuiteSparse_long A [],              /* row indices of A */
+    SuiteSparse_long p [],              /* column pointers of A */
+    SuiteSparse_long perm [],           /* output permutation, size n_col+1 */
     double knobs [COLAMD_KNOBS],	/* parameters (uses defaults if NULL) */
-    UF_long stats [COLAMD_STATS],	/* output statistics and error codes */
+    SuiteSparse_long stats [COLAMD_STATS],  /* output stats and error codes */
     void * (*allocate) (size_t, size_t),
     					/* pointer to calloc (ANSI C) or */
 					/* mxCalloc (for MATLAB mexFunction) */
@@ -229,7 +225,7 @@ void colamd_report
 
 void colamd_l_report
 (
-    UF_long stats [COLAMD_STATS]
+    SuiteSparse_long stats [COLAMD_STATS]
 ) ;
 
 void symamd_report
@@ -239,15 +235,9 @@ void symamd_report
 
 void symamd_l_report
 (
-    UF_long stats [COLAMD_STATS]
+    SuiteSparse_long stats [COLAMD_STATS]
 ) ;
 
-#ifndef EXTERN
-#define EXTERN extern
-#endif
-
-EXTERN int (*colamd_printf) (const char *, ...) ;
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/COLAMD/Lib/Makefile b/COLAMD/Lib/Makefile
index b1571ef..ea49720 100644
--- a/COLAMD/Lib/Makefile
+++ b/COLAMD/Lib/Makefile
@@ -4,20 +4,20 @@
 
 default: libcolamd.a
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-I = -I../Include -I../../UFconfig
+I = -I../Include -I../../SuiteSparse_config
 
-INC = ../Include/colamd.h ../../UFconfig/UFconfig.h
+INC = ../Include/colamd.h ../../SuiteSparse_config/SuiteSparse_config.h
 
-SRC = ../Source/colamd.c ../Source/colamd_global.c
+SRC = ../Source/colamd.c
 
 # creates libcolamd.a, a C-callable COLAMD library
 libcolamd.a:  $(SRC) $(INC)
-	$(CC) $(CFLAGS) $(I) -c ../Source/colamd_global.c
-	$(CC) $(CFLAGS) $(I) -c ../Source/colamd.c
-	$(CC) $(CFLAGS) $(I) -c ../Source/colamd.c -DDLONG -o colamd_l.o
-	$(AR) libcolamd.a colamd.o colamd_l.o colamd_global.o
+	$(CC) $(CF) $(I) -c ../Source/colamd.c
+	$(CC) $(CF) $(I) -c ../Source/colamd.c -DDLONG -o colamd_l.o
+	$(ARCHIVE)  libcolamd.a colamd.o colamd_l.o
+	- $(RANLIB) libcolamd.a
 
 ccode: libcolamd.a
 
diff --git a/COLAMD/MATLAB/Makefile b/COLAMD/MATLAB/Makefile
deleted file mode 100644
index ee9415f..0000000
--- a/COLAMD/MATLAB/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# COLAMD Makefile for MATLAB mexFunctions
-
-default: colamd2 symamd2
-
-include ../../UFconfig/UFconfig.mk
-
-I = -I../../UFconfig -I../Include
-
-INC = ../Include/colamd.h ../../UFconfig/UFconfig.h
-
-SRC = ../Source/colamd.c ../Source/colamd_global.c
-
-MX = $(MEX) -DDLONG $(I)
-
-# Compiles the MATLAB-callable routines
-mex: colamd2 symamd2
-
-symamd2: symamdmex.c $(INC) $(SRC)
-	$(MX) -output symamd2mex symamdmex.c $(SRC)
-
-colamd2: colamdmex.c $(INC) $(SRC)
-	$(MX) -output colamd2mex colamdmex.c $(SRC)
-
-# Compiles the extensive test code
-test: mex colamdtestmex.c symamdtestmex.c $(INC) $(SRC)
-	$(MX) colamdtestmex.c $(SRC)
-	$(MX) symamdtestmex.c $(SRC)
-
-clean:
-	- $(RM) $(CLEAN)
-
-purge: distclean
-
-distclean: clean
-	- $(RM) *.mex* *.dll
diff --git a/COLAMD/MATLAB/colamd_demo.m b/COLAMD/MATLAB/colamd_demo.m
index f2fd442..47176f4 100644
--- a/COLAMD/MATLAB/colamd_demo.m
+++ b/COLAMD/MATLAB/colamd_demo.m
@@ -16,8 +16,7 @@
 %                       Typical usage:  p = symamd (A) ;
 %
 % For a description of the methods used, see the colamd.c file.
-%
-% http://www.cise.ufl.edu/research/sparse/colamd/
+% http://www.suitesparse.com
 %
 % See also colamd, symamd
 
diff --git a/COLAMD/MATLAB/colamd_make.m b/COLAMD/MATLAB/colamd_make.m
index 1748f9d..1491cf1 100644
--- a/COLAMD/MATLAB/colamd_make.m
+++ b/COLAMD/MATLAB/colamd_make.m
@@ -14,14 +14,33 @@ d = '' ;
 if (~isempty (strfind (computer, '64')))
     d = '-largeArrayDims' ;
 end
-src = '../Source/colamd.c ../Source/colamd_global.c' ;
-cmd = sprintf ('mex -DDLONG -O %s -I../../UFconfig -I../Include -output ', d) ;
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    d = ['-silent ' d] ;
+end
+
+src = '../Source/colamd.c ../../SuiteSparse_config/SuiteSparse_config.c' ;
+cmd = sprintf ( ...
+    'mex -DDLONG -O %s -I../../SuiteSparse_config -I../Include -output ', d) ;
 s = [cmd 'colamd2mex colamdmex.c ' src] ;
+
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    s = [s ' -lrt'] ;
+end
+
 if (details)
     fprintf ('%s\n', s) ;
 end
 eval (s) ;
 s = [cmd 'symamd2mex symamdmex.c ' src] ;
+
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    s = [s ' -lrt'] ;
+end
+
 if (details)
     fprintf ('%s\n', s) ;
 end
diff --git a/COLAMD/MATLAB/colamd_test.m b/COLAMD/MATLAB/colamd_test.m
index 8addcb0..6c6dac5 100644
--- a/COLAMD/MATLAB/colamd_test.m
+++ b/COLAMD/MATLAB/colamd_test.m
@@ -27,8 +27,13 @@ help colamd_test
     if (~isempty (strfind (computer, '64')))
 	d = '-largeArrayDims' ;
     end
-    cmd = sprintf ('mex -DDLONG -O %s -I../../UFconfig -I../Include ', d) ;
-    src = '../Source/colamd.c ../Source/colamd_global.c' ;
+    cmd = sprintf (...
+        'mex -DDLONG -O %s -I../../SuiteSparse_config -I../Include ', d) ;
+    src = '../Source/colamd.c ../../SuiteSparse_config/SuiteSparse_config.c' ;
+    if (~(ispc || ismac))
+        % for POSIX timing routine
+        src = [src ' -lrt'] ;
+    end
     eval ([cmd 'colamdtestmex.c ' src]) ;
     eval ([cmd 'symamdtestmex.c ' src]) ;
     fprintf ('Done compiling.\n') ; 
diff --git a/COLAMD/MATLAB/colamdmex.c b/COLAMD/MATLAB/colamdmex.c
index 93f16d5..f6be92f 100644
--- a/COLAMD/MATLAB/colamdmex.c
+++ b/COLAMD/MATLAB/colamdmex.c
@@ -12,7 +12,7 @@
     Authors:
 
 	The authors of the code itself are Stefan I. Larimore and Timothy A.
-	Davis (davis at cise.ufl.edu), University of Florida.  The algorithm was
+	Davis (DrTimothyAldenDavis at gmail.com).  The algorithm was
 	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
 	Ng, Oak Ridge National Laboratory.
 
@@ -25,17 +25,9 @@
 
 	Copyright (c) 1998-2007, Timothy A. Davis, All Rights Reserved.
 
-	See http://www.cise.ufl.edu/research/sparse/colamd (the colamd.c
-	file) for the License.
-
     Availability:
 
-	The colamd/symamd library is available at
-
-	    http://www.cise.ufl.edu/research/sparse/colamd/
-
-	This is the http://www.cise.ufl.edu/research/sparse/colamd/colamdmex.c
-	file.  It requires the colamd.c and colamd.h files.
+	The colamd/symamd library is available at http://www.suitesparse.com
 
 */
 
@@ -48,7 +40,7 @@
 #include "matrix.h"
 #include <stdlib.h>
 #include <string.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 /* ========================================================================== */
 /* === colamd mexFunction =================================================== */
@@ -66,23 +58,21 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *A ;		/* colamd's copy of the matrix, and workspace */
-    UF_long *p ;		/* colamd's copy of the column pointers */
-    UF_long Alen ;		/* size of A */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long nnz ;		/* number of entries in A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *A ;                   /* colamd's copy of the matrix, and workspace */
+    Long *p ;                   /* colamd's copy of the column pointers */
+    Long Alen ;                 /* size of A */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long nnz ;                  /* number of entries in A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [COLAMD_KNOBS] ; /* colamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats [COLAMD_STATS] ;	/* stats for colamd */
-
-    colamd_printf = mexPrintf ;	/* COLAMD printf routine */
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats [COLAMD_STATS] ; /* stats for colamd */
 
     /* === Check inputs ===================================================== */
 
@@ -104,7 +94,7 @@ void mexFunction
 	i = mxGetNumberOfElements (prhs [1]) ;
 	if (i > 0) knobs [COLAMD_DENSE_ROW] = in_knobs [0] ;
 	if (i > 1) knobs [COLAMD_DENSE_COL] = in_knobs [1] ;
-	if (i > 2) spumoni = (UF_long) (in_knobs [2] != 0) ;
+	if (i > 2) spumoni = (Long) (in_knobs [2] != 0) ;
     }
 
     /* print knob settings if spumoni is set */
@@ -156,10 +146,10 @@ void mexFunction
     n_col = mxGetN (Ainput) ;
 
     /* get column pointer vector so we can find nnz */
-    p = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
-    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (UF_long)) ;
+    p = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
+    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (Long)) ;
     nnz = p [n_col] ;
-    Alen = (UF_long) colamd_l_recommended (nnz, n_row, n_col) ;
+    Alen = (Long) colamd_l_recommended (nnz, n_row, n_col) ;
     if (Alen == 0)
     {
     	mexErrMsgTxt ("colamd: problem too large") ;
@@ -167,8 +157,8 @@ void mexFunction
 
     /* === Copy input matrix into workspace ================================= */
 
-    A = (UF_long *) mxCalloc (Alen, sizeof (UF_long)) ;
-    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (UF_long)) ;
+    A = (Long *) mxCalloc (Alen, sizeof (Long)) ;
+    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (Long)) ;
 
     if (full)
     {
diff --git a/COLAMD/MATLAB/colamdtestmex.c b/COLAMD/MATLAB/colamdtestmex.c
index 9b90a46..8639979 100644
--- a/COLAMD/MATLAB/colamdtestmex.c
+++ b/COLAMD/MATLAB/colamdtestmex.c
@@ -26,7 +26,7 @@
     Authors:
 
 	The authors of the code itself are Stefan I. Larimore and Timothy A.
-	Davis (davis at cise.ufl.edu), University of Florida.  The algorithm was
+	Davis (DrTimothyAldenDavis at gmail.com).  The algorithm was
 	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
 	Ng, Oak Ridge National Laboratory.
 
@@ -38,19 +38,11 @@
     Notice:
 
 	Copyright (c) 1998-2007, Timothy A. Davis, All Rights Reserved.
-
-	See http://www.cise.ufl.edu/research/sparse/colamd (the colamd.c
-	file) for the License.
+	See the colamd.c file for the License.
 
     Availability:
 
-	The colamd/symamd library is available at
-
-	    http://www.cise.ufl.edu/research/sparse/colamd/
-
-	This is the
-	http://www.cise.ufl.edu/research/sparse/colamd/colamdtestmex.c
-       	file.  It requires the colamd.c and colamd.h files.
+	The colamd/symamd library is available at http://www.suitesparse.com
 
 */
 
@@ -63,16 +55,16 @@
 #include "matrix.h"
 #include <stdlib.h>
 #include <string.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 static void dump_matrix
 (
-    UF_long A [ ],
-    UF_long p [ ],
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long limit
+    Long A [ ],
+    Long p [ ],
+    Long n_row,
+    Long n_col,
+    Long Alen,
+    Long limit
 ) ;
 
 /* ========================================================================== */
@@ -91,28 +83,26 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *A ;		/* colamd's copy of the matrix, and workspace */
-    UF_long *p ;		/* colamd's copy of the column pointers */
-    UF_long Alen ;		/* size of A */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long nnz ;		/* number of entries in A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *A ;                   /* colamd's copy of the matrix, and workspace */
+    Long *p ;                   /* colamd's copy of the column pointers */
+    Long Alen ;                 /* size of A */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long nnz ;                  /* number of entries in A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [COLAMD_KNOBS] ; /* colamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats2 [COLAMD_STATS] ;	/* stats for colamd */
-
-    UF_long *cp, *cp_end, result, col, length ;
-    UF_long *stats ;
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats2 [COLAMD_STATS] ;/* stats for colamd */
+
+    Long *cp, *cp_end, result, col, length ;
+    Long *stats ;
     stats = stats2 ;
 
-    colamd_printf = mexPrintf ;	/* COLAMD printf routine */
-
     /* === Check inputs ===================================================== */
 
     if (nrhs < 1 || nrhs > 2 || nlhs < 0 || nlhs > 2)
@@ -143,7 +133,7 @@ void mexFunction
 	i = mxGetNumberOfElements (prhs [1]) ;
 	if (i > 0) knobs [COLAMD_DENSE_ROW] = in_knobs [0] ;
 	if (i > 1) knobs [COLAMD_DENSE_COL] = in_knobs [1] ;
-	if (i > 2) spumoni = (UF_long) in_knobs [2] ;
+	if (i > 2) spumoni = (Long) in_knobs [2] ;
     }
 
     /* print knob settings if spumoni is set */
@@ -195,10 +185,10 @@ void mexFunction
     n_col = mxGetN (Ainput) ;
 
     /* get column pointer vector so we can find nnz */
-    p = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
-    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (UF_long)) ;
+    p = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
+    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (Long)) ;
     nnz = p [n_col] ;
-    Alen = (UF_long) colamd_l_recommended (nnz, n_row, n_col) ;
+    Alen = (Long) colamd_l_recommended (nnz, n_row, n_col) ;
     if (Alen == 0)
     {
     	mexErrMsgTxt ("colamd: problem too large") ;
@@ -216,8 +206,8 @@ void mexFunction
 
 /* Here only for testing */
 /* size of the Col and Row structures */
-#define COLAMD_C(n_col) (((n_col) + 1) * 24 / sizeof (UF_long))
-#define COLAMD_R(n_row) (((n_row) + 1) * 16 / sizeof (UF_long))
+#define COLAMD_C(n_col) (((n_col) + 1) * 24 / sizeof (Long))
+#define COLAMD_R(n_row) (((n_row) + 1) * 16 / sizeof (Long))
 #ifdef MIN
 #undef MIN
 #endif
@@ -239,8 +229,8 @@ void mexFunction
 
     /* === Copy input matrix into workspace ================================= */
 
-    A = (UF_long *) mxCalloc (Alen, sizeof (UF_long)) ;
-    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (UF_long)) ;
+    A = (Long *) mxCalloc (Alen, sizeof (Long)) ;
+    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (Long)) ;
 
     if (full)
     {
@@ -270,7 +260,7 @@ void mexFunction
 */
 
     /* jumble appropriately */
-    switch ((UF_long) in_knobs [4])
+    switch ((Long) in_knobs [4])
     {
 
 	case 0 :
@@ -368,7 +358,7 @@ void mexFunction
 		mexPrintf ("colamdtest: A not present\n") ;
 	    }
 	    result = 0 ;		/* A not present */
-	    A = (UF_long *) NULL ;
+	    A = (Long *) NULL ;
 	    break ;
 
 	case 8 :
@@ -377,7 +367,7 @@ void mexFunction
 		mexPrintf ("colamdtest: p not present\n") ;
 	    }
 	    result = 0 ;		/* p not present */
-	    p = (UF_long *) NULL ;
+	    p = (Long *) NULL ;
 	    break ;
 
 	case 9 :
@@ -465,7 +455,7 @@ void mexFunction
 		mexPrintf ("colamdtest: stats not present\n") ;
 	    }
 	    result = 0 ;		/* stats not present */
-	    stats = (UF_long *) NULL ;
+	    stats = (Long *) NULL ;
 	    break ;
 
 	case 13 :
@@ -551,15 +541,15 @@ void mexFunction
 
 static void dump_matrix
 (
-    UF_long A [ ],
-    UF_long p [ ],
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long limit
+    Long A [ ],
+    Long p [ ],
+    Long n_row,
+    Long n_col,
+    Long Alen,
+    Long limit
 )
 {
-    UF_long col, k, row ;
+    Long col, k, row ;
 
     mexPrintf ("dump matrix: nrow %d ncol %d Alen %d\n", n_row, n_col, Alen) ;
 
diff --git a/COLAMD/MATLAB/symamdmex.c b/COLAMD/MATLAB/symamdmex.c
index 253366d..3fc5218 100644
--- a/COLAMD/MATLAB/symamdmex.c
+++ b/COLAMD/MATLAB/symamdmex.c
@@ -14,7 +14,7 @@
     Authors:
 
 	The authors of the code itself are Stefan I. Larimore and Timothy A.
-	Davis (davis at cise.ufl.edu), University of Florida.  The algorithm was
+	Davis (DrTimothyAldenDavis at gmail.com).  The algorithm was
 	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
 	Ng, Oak Ridge National Laboratory.
 
@@ -26,18 +26,11 @@
     Notice:
 
 	Copyright (c) 1998-2007, Timothy A. Davis.  All Rights Reserved.
-
-	See http://www.cise.ufl.edu/research/sparse/colamd (the colamd.c
-	file) for the License.
+	See the colamd.c file for the License.
 
     Availability:
 
-	The colamd/symamd library is available at
-
-	    http://www.cise.ufl.edu/research/sparse/colamd/
-
-	This is the http://www.cise.ufl.edu/research/sparse/colamd/symamdmex.c
-	file.  It requires the colamd.c and colamd.h files.
+	The colamd/symamd library is available at http://www.suitesparse.com
 
 */
 
@@ -49,7 +42,7 @@
 #include "mex.h"
 #include "matrix.h"
 #include <stdlib.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 /* ========================================================================== */
 /* === symamd mexFunction =================================================== */
@@ -67,22 +60,20 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *perm ;		/* column ordering of M and ordering of A */
-    UF_long *A ;		/* row indices of input matrix A */
-    UF_long *p ;		/* column pointers of input matrix A */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *perm ;                /* column ordering of M and ordering of A */
+    Long *A ;                   /* row indices of input matrix A */
+    Long *p ;                   /* column pointers of input matrix A */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [COLAMD_KNOBS] ; /* colamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats [COLAMD_STATS] ;	/* stats for symamd */
-
-    colamd_printf = mexPrintf ;	/* COLAMD printf routine */
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats [COLAMD_STATS] ; /* stats for symamd */
 
     /* === Check inputs ===================================================== */
 
@@ -103,7 +94,7 @@ void mexFunction
 	in_knobs = mxGetPr (prhs [1]) ;
 	i = mxGetNumberOfElements (prhs [1]) ;
 	if (i > 0) knobs [COLAMD_DENSE_ROW] = in_knobs [0] ;
-	if (i > 1) spumoni = (UF_long) (in_knobs [1] != 0) ;
+	if (i > 1) spumoni = (Long) (in_knobs [1] != 0) ;
     }
 
     /* print knob settings if spumoni is set */
@@ -148,9 +139,9 @@ void mexFunction
 	mexErrMsgTxt ("symamd: matrix must be square.") ;
     }
 
-    A = (UF_long *) mxGetIr (Ainput) ;
-    p = (UF_long *) mxGetJc (Ainput) ;
-    perm = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
+    A = (Long *) mxGetIr (Ainput) ;
+    p = (Long *) mxGetJc (Ainput) ;
+    perm = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
 
     /* === Order the rows and columns of A (does not destroy A) ============= */
 
diff --git a/COLAMD/MATLAB/symamdtestmex.c b/COLAMD/MATLAB/symamdtestmex.c
index c41101f..fcf8535 100644
--- a/COLAMD/MATLAB/symamdtestmex.c
+++ b/COLAMD/MATLAB/symamdtestmex.c
@@ -22,7 +22,7 @@
     Authors:
 
 	The authors of the code itself are Stefan I. Larimore and Timothy A.
-	Davis (davis at cise.ufl.edu), University of Florida.  The algorithm was
+	Davis (DrTimothyAldenDavis at gmail.com).  The algorithm was
 	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
 	Ng, Oak Ridge National Laboratory.
 
@@ -34,19 +34,11 @@
     Notice:
 
 	Copyright (c) 1998-2007, Timothy A. Davis.  All Rights Reserved.
-
-	See http://www.cise.ufl.edu/research/sparse/colamd (the colamd.c
-	file) for the License.
+	See the colamd.c file for the License.
 
     Availability:
 
-	The colamd/symamd library is available at
-
-	    http://www.cise.ufl.edu/research/sparse/colamd/
-
-	This is the
-	http://www.cise.ufl.edu/research/sparse/colamd/symamdtestmex.c
-       	file.  It requires the colamd.c and colamd.h files.
+	The colamd/symamd library is available at http://www.suitesparse.com
 
 */
 
@@ -59,16 +51,16 @@
 #include "matrix.h"
 #include <stdlib.h>
 #include <string.h>
-#include "UFconfig.h"
+#define Long SuiteSparse_long
 
 static void dump_matrix
 (
-    UF_long A [ ],
-    UF_long p [ ],
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long limit
+    Long A [ ],
+    Long p [ ],
+    Long n_row,
+    Long n_col,
+    Long Alen,
+    Long limit
 ) ;
 
 /* ========================================================================== */
@@ -87,27 +79,25 @@ void mexFunction
 {
     /* === Local variables ================================================== */
 
-    UF_long *perm ;		/* column ordering of M and ordering of A */
-    UF_long *A ;		/* row indices of input matrix A */
-    UF_long *p ;		/* column pointers of input matrix A */
-    UF_long n_col ;		/* number of columns of A */
-    UF_long n_row ;		/* number of rows of A */
-    UF_long full ;		/* TRUE if input matrix full, FALSE if sparse */
+    Long *perm ;                /* column ordering of M and ordering of A */
+    Long *A ;                   /* row indices of input matrix A */
+    Long *p ;                   /* column pointers of input matrix A */
+    Long n_col ;                /* number of columns of A */
+    Long n_row ;                /* number of rows of A */
+    Long full ;                 /* TRUE if input matrix full, FALSE if sparse */
     double knobs [COLAMD_KNOBS] ; /* colamd user-controllable parameters */
-    double *out_perm ;		/* output permutation vector */
-    double *out_stats ;		/* output stats vector */
-    double *in_knobs ;		/* input knobs vector */
-    UF_long i ;			/* loop counter */
-    mxArray *Ainput ;		/* input matrix handle */
-    UF_long spumoni ;		/* verbosity variable */
-    UF_long stats2 [COLAMD_STATS] ;	/* stats for symamd */
-
-    UF_long *cp, *cp_end, result, nnz, col, length ;
-    UF_long *stats ;
+    double *out_perm ;          /* output permutation vector */
+    double *out_stats ;         /* output stats vector */
+    double *in_knobs ;          /* input knobs vector */
+    Long i ;                    /* loop counter */
+    mxArray *Ainput ;           /* input matrix handle */
+    Long spumoni ;              /* verbosity variable */
+    Long stats2 [COLAMD_STATS] ;/* stats for symamd */
+
+    Long *cp, *cp_end, result, nnz, col, length ;
+    Long *stats ;
     stats = stats2 ;
 
-    colamd_printf = mexPrintf ;	/* COLAMD printf routine */
-
     /* === Check inputs ===================================================== */
 
     if (nrhs < 1 || nrhs > 2 || nlhs < 0 || nlhs > 2)
@@ -137,7 +127,7 @@ void mexFunction
 	in_knobs = mxGetPr (prhs [1]) ;
 	i = mxGetNumberOfElements (prhs [1]) ;
 	if (i > 0) knobs [COLAMD_DENSE_ROW] = in_knobs [0] ;
-	if (i > 1) spumoni = (UF_long) in_knobs [1] ;
+	if (i > 1) spumoni = (Long) in_knobs [1] ;
     }
 
     /* print knob settings if spumoni is set */
@@ -184,8 +174,8 @@ void mexFunction
     }
 
     /* p = mxGetJc (Ainput) ; */
-    p = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
-    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (UF_long)) ;
+    p = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
+    (void) memcpy (p, mxGetJc (Ainput), (n_col+1)*sizeof (Long)) ;
 
     nnz = p [n_col] ;
     if (spumoni > 0)
@@ -194,10 +184,10 @@ void mexFunction
     }
 
     /* A = mxGetIr (Ainput) ; */
-    A = (UF_long *) mxCalloc (nnz+1, sizeof (UF_long)) ;
-    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (UF_long)) ;
+    A = (Long *) mxCalloc (nnz+1, sizeof (Long)) ;
+    (void) memcpy (A, mxGetIr (Ainput), nnz*sizeof (Long)) ;
 
-    perm = (UF_long *) mxCalloc (n_col+1, sizeof (UF_long)) ;
+    perm = (Long *) mxCalloc (n_col+1, sizeof (Long)) ;
 
 /* === Jumble matrix ======================================================== */
 
@@ -222,7 +212,7 @@ void mexFunction
 */
 
     /* jumble appropriately */
-    switch ((UF_long) in_knobs [2])
+    switch ((Long) in_knobs [2])
     {
 
 	case 0 :
@@ -313,7 +303,7 @@ void mexFunction
 		mexPrintf ("symamdtest: A not present\n") ;
 	    }
 	    result = 0 ;		/* A not present */
-	    A = (UF_long *) NULL ;
+	    A = (Long *) NULL ;
 	    break ;
 
 	case 8 :
@@ -322,7 +312,7 @@ void mexFunction
 		mexPrintf ("symamdtest: p not present\n") ;
 	    }
 	    result = 0 ;		/* p not present */
-	    p = (UF_long *) NULL ;
+	    p = (Long *) NULL ;
 	    break ;
 
 	case 9 :
@@ -410,7 +400,7 @@ void mexFunction
 		mexPrintf ("symamdtest: stats not present\n") ;
 	    }
 	    result = 0 ;		/* stats not present */
-	    stats = (UF_long *) NULL ;
+	    stats = (Long *) NULL ;
 	    break ;
 
 	case 13 :
@@ -505,15 +495,15 @@ void mexFunction
 
 static void dump_matrix
 (
-    UF_long A [ ],
-    UF_long p [ ],
-    UF_long n_row,
-    UF_long n_col,
-    UF_long Alen,
-    UF_long limit
+    Long A [ ],
+    Long p [ ],
+    Long n_row,
+    Long n_col,
+    Long Alen,
+    Long limit
 )
 {
-    UF_long col, k, row ;
+    Long col, k, row ;
 
     mexPrintf ("dump matrix: nrow %d ncol %d Alen %d\n", n_row, n_col, Alen) ;
 
diff --git a/COLAMD/Makefile b/COLAMD/Makefile
index fd1397b..d253e56 100644
--- a/COLAMD/Makefile
+++ b/COLAMD/Makefile
@@ -2,23 +2,20 @@
 # COLAMD Makefile
 #------------------------------------------------------------------------------
 
-default: demo
+VERSION = 2.9.1
 
-include ../UFconfig/UFconfig.mk
+default: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
-# Do not the MATLAB interface.
-demo:
-	( cd Lib    ; $(MAKE) )
-	( cd Demo   ; $(MAKE) )
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+demos: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
+# Compile all C code
 all:
 	( cd Lib    ; $(MAKE) )
 	( cd Demo   ; $(MAKE) )
-	( cd MATLAB ; $(MAKE) )
 
-# compile just the C-callable libraries (not mexFunctions or Demos)
+# compile just the C-callable libraries (not Demos)
 library:
 	( cd Lib    ; $(MAKE) )
 
@@ -26,13 +23,13 @@ library:
 clean:
 	( cd Lib    ; $(MAKE) clean )
 	( cd Demo   ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) )
 
 # clean, and then remove compiled programs and library archives
 purge:
 	( cd Lib    ; $(MAKE) purge )
 	( cd Demo   ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) ; $(RM) *.mex* )
 
 distclean: purge
 
@@ -44,6 +41,16 @@ ccode: library
 
 lib: library
 
-# compile the MATLAB mexFunction
-mex:
-	( cd MATLAB ; $(MAKE) )
+# install COLAMD
+install:
+	$(CP) Lib/libcolamd.a $(INSTALL_LIB)/libcolamd.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libcolamd.$(VERSION).a libcolamd.a )
+	$(CP) Include/colamd.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libcolamd*.a
+	chmod 644 $(INSTALL_INCLUDE)/colamd.h
+
+# uninstall COLAMD
+uninstall:
+	$(RM) $(INSTALL_LIB)/libcolamd*.a
+	$(RM) $(INSTALL_INCLUDE)/colamd.h
+
diff --git a/COLAMD/README.txt b/COLAMD/README.txt
index 5ed81c7..e22ebd5 100644
--- a/COLAMD/README.txt
+++ b/COLAMD/README.txt
@@ -1,4 +1,4 @@
-The COLAMD ordering method - Version 2.7
+COLAMD, Copyright 1998-2013, Timothy A. Davis.  http://www.suitesparse.com
 -------------------------------------------------------------------------------
 
 The COLAMD column approximate minimum degree ordering algorithm computes
@@ -24,10 +24,6 @@ A short demo will run.  Optionally, type colamd_test to run an extensive tests.
 Type "make" in Unix in the COLAMD directory to compile the C-callable
 library and to run a short demo.
 
-If you have MATLAB 7.2 or earlier, you must first edit UFconfig/UFconfig.h to
-remove the "-largeArrayDims" option from the MEX command (or just use
-colamd_make.m inside MATLAB).
-
 Colamd is a built-in routine in MATLAB, available from The 
 Mathworks, Inc.  Under most cases, the compiled COLAMD from Versions 2.0 to the
 current version do not differ.  Colamd Versions 2.2 and 2.3 differ only in their
@@ -42,13 +38,10 @@ colamd.c, colamd_global.c, and colamd.h, which are the C-callable
 colamd/symamd codes.  See colamd.c for more information on how to call
 colamd from a C program.
 
-Requires UFconfig, in the ../UFconfig directory relative to this directory.
-
-	Copyright (c) 1998-2007, Timothy A. Davis, All Rights Reserved.
-
-	See http://www.cise.ufl.edu/research/sparse/colamd (the colamd.c
-	file) for the License.
+Requires SuiteSparse_config, in the ../SuiteSparse_config directory relative to
+this directory.
 
+See the colamd.c file or http://www.suitesparse.com for the license to COLAMD.
 
 Related papers:
 
@@ -64,17 +57,15 @@ Related papers:
 	"An approximate minimum degree column ordering algorithm",
 	S. I. Larimore, MS Thesis, Dept. of Computer and Information
 	Science and Engineering, University of Florida, Gainesville, FL,
-	1998.  CISE Tech Report TR-98-016.  Available at 
-	ftp://ftp.cise.ufl.edu/cis/tech-reports/tr98/tr98-016.ps
-	via anonymous ftp.
+	1998.  CISE Tech Report TR-98-016.
 
 	Approximate Deficiency for Ordering the Columns of a Matrix,
 	J. L. Kern, Senior Thesis, Dept. of Computer and Information
 	Science and Engineering, University of Florida, Gainesville, FL,
-	1999.  Available at http://www.cise.ufl.edu/~davis/Kern/kern.ps 
+	1999.
 
 
-Authors:  Stefan I. Larimore and Timothy A. Davis, University of Florida,
+Authors:  Stefan I. Larimore and Timothy A. Davis,
 in collaboration with John Gilbert, Xerox PARC (now at UC Santa Barbara),
 and Esmong Ng, Lawrence Berkeley National Laboratory (much of this work
 he did while at Oak Ridge National Laboratory). 
diff --git a/COLAMD/Source/colamd.c b/COLAMD/Source/colamd.c
index 5fe20d6..eb306a0 100644
--- a/COLAMD/Source/colamd.c
+++ b/COLAMD/Source/colamd.c
@@ -35,7 +35,7 @@
     Authors:
 
 	The authors of the code itself are Stefan I. Larimore and Timothy A.
-	Davis (davis at cise.ufl.edu), University of Florida.  The algorithm was
+	Davis (DrTimothyAldenDavis at gmail.com).  The algorithm was
 	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
 	Ng, Oak Ridge National Laboratory.
 
@@ -77,13 +77,7 @@
 
     Availability:
 
-	The colamd/symamd library is available at
-
-	    http://www.cise.ufl.edu/research/sparse/colamd/
-
-	This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.c
-	file.  It requires the colamd.h file.  It is required by the colamdmex.c
-	and symamdmex.c files, for the MATLAB interface to colamd and symamd.
+	The colamd/symamd library is available at http://www.suitesparse.com
 	Appears as ACM Algorithm 836.
 
     See the ChangeLog file for changes since Version 1.0.
@@ -105,9 +99,10 @@
 /* === Description of user-callable routines ================================ */
 /* ========================================================================== */
 
-/* COLAMD includes both int and UF_long versions of all its routines.  The
- * description below is for the int version.  For UF_long, all int arguments
- * become UF_long.  UF_long is normally defined as long, except for WIN64.
+/* COLAMD includes both int and SuiteSparse_long versions of all its routines.
+    The description below is for the int version.  For SuiteSparse_long, all
+    int arguments become SuiteSparse_long.  SuiteSparse_long is normally
+    defined as long, except for WIN64.
 
     ----------------------------------------------------------------------------
     colamd_recommended:
@@ -117,8 +112,8 @@
 
 	    #include "colamd.h"
 	    size_t colamd_recommended (int nnz, int n_row, int n_col) ;
-	    size_t colamd_l_recommended (UF_long nnz, UF_long n_row,
-		UF_long n_col) ;
+	    size_t colamd_l_recommended (SuiteSparse_long nnz,
+                SuiteSparse_long n_row, SuiteSparse_long n_col) ;
 
 	Purpose:
 
@@ -201,9 +196,10 @@
 	    #include "colamd.h"
 	    int colamd (int n_row, int n_col, int Alen, int *A, int *p,
 	    	double knobs [COLAMD_KNOBS], int stats [COLAMD_STATS]) ;
-	    UF_long colamd_l (UF_long n_row, UF_long n_col, UF_long Alen,
-		UF_long *A, UF_long *p, double knobs [COLAMD_KNOBS],
-		UF_long stats [COLAMD_STATS]) ;
+	    SuiteSparse_long colamd_l (SuiteSparse_long n_row,
+                SuiteSparse_long n_col, SuiteSparse_long Alen,
+                SuiteSparse_long *A, SuiteSparse_long *p, double knobs
+                [COLAMD_KNOBS], SuiteSparse_long stats [COLAMD_STATS]) ;
 
 	Purpose:
 
@@ -379,8 +375,7 @@
 
 	Example:
 	
-	    See http://www.cise.ufl.edu/research/sparse/colamd/example.c
-	    for a complete example.
+	    See colamd_example.c for a complete example.
 
 	    To order the columns of a 5-by-4 matrix with 11 nonzero entries in
 	    the following nonzero pattern
@@ -412,9 +407,10 @@
 	    int symamd (int n, int *A, int *p, int *perm,
 	    	double knobs [COLAMD_KNOBS], int stats [COLAMD_STATS],
 		void (*allocate) (size_t, size_t), void (*release) (void *)) ;
-	    UF_long symamd_l (UF_long n, UF_long *A, UF_long *p, UF_long *perm,
-	    	double knobs [COLAMD_KNOBS], UF_long stats [COLAMD_STATS],
-		void (*allocate) (size_t, size_t), void (*release) (void *)) ;
+	    SuiteSparse_long symamd_l (SuiteSparse_long n, SuiteSparse_long *A,
+                SuiteSparse_long *p, SuiteSparse_long *perm, double knobs
+                [COLAMD_KNOBS], SuiteSparse_long stats [COLAMD_STATS], void
+                (*allocate) (size_t, size_t), void (*release) (void *)) ;
 
 	Purpose:
 
@@ -581,7 +577,7 @@
 
 	    #include "colamd.h"
 	    colamd_report (int stats [COLAMD_STATS]) ;
-	    colamd_l_report (UF_long stats [COLAMD_STATS]) ;
+	    colamd_l_report (SuiteSparse_long stats [COLAMD_STATS]) ;
 
 	Purpose:
 
@@ -602,7 +598,7 @@
 
 	    #include "colamd.h"
 	    symamd_report (int stats [COLAMD_STATS]) ;
-	    symamd_l_report (UF_long stats [COLAMD_STATS]) ;
+	    symamd_l_report (SuiteSparse_long stats [COLAMD_STATS]) ;
 
 	Purpose:
 
@@ -681,17 +677,14 @@
 #endif
 
 /* ========================================================================== */
-/* === int or UF_long ======================================================= */
+/* === int or SuiteSparse_long ============================================== */
 /* ========================================================================== */
 
-/* define UF_long */
-#include "UFconfig.h"
-
 #ifdef DLONG
 
-#define Int UF_long
-#define ID  UF_long_id
-#define Int_MAX UF_long_max
+#define Int SuiteSparse_long
+#define ID  SuiteSparse_long_id
+#define Int_MAX SuiteSparse_long_max
 
 #define COLAMD_recommended colamd_l_recommended
 #define COLAMD_set_defaults colamd_l_set_defaults
@@ -835,9 +828,6 @@ typedef struct Colamd_Row_struct
 #define INDEX(i) (i)
 #endif
 
-/* All output goes through the PRINTF macro.  */
-#define PRINTF(params) { if (colamd_printf != NULL) (void) colamd_printf params ; }
-
 /* ========================================================================== */
 /* === Prototypes of PRIVATE routines ======================================= */
 /* ========================================================================== */
@@ -941,11 +931,11 @@ PRIVATE void print_report
 
 PRIVATE Int colamd_debug = 0 ;	/* debug print level */
 
-#define DEBUG0(params) { PRINTF (params) ; }
-#define DEBUG1(params) { if (colamd_debug >= 1) PRINTF (params) ; }
-#define DEBUG2(params) { if (colamd_debug >= 2) PRINTF (params) ; }
-#define DEBUG3(params) { if (colamd_debug >= 3) PRINTF (params) ; }
-#define DEBUG4(params) { if (colamd_debug >= 4) PRINTF (params) ; }
+#define DEBUG0(params) { SUITESPARSE_PRINTF (params) ; }
+#define DEBUG1(params) { if (colamd_debug >= 1) SUITESPARSE_PRINTF (params) ; }
+#define DEBUG2(params) { if (colamd_debug >= 2) SUITESPARSE_PRINTF (params) ; }
+#define DEBUG3(params) { if (colamd_debug >= 3) SUITESPARSE_PRINTF (params) ; }
+#define DEBUG4(params) { if (colamd_debug >= 4) SUITESPARSE_PRINTF (params) ; }
 
 #ifdef MATLAB_MEX_FILE
 #define ASSERT(expression) (mxAssert ((expression), ""))
@@ -3188,12 +3178,12 @@ PRIVATE void print_report
 
     Int i1, i2, i3 ;
 
-    PRINTF (("\n%s version %d.%d, %s: ", method,
-	    COLAMD_MAIN_VERSION, COLAMD_SUB_VERSION, COLAMD_DATE)) ;
+    SUITESPARSE_PRINTF (("\n%s version %d.%d, %s: ", method,
+            COLAMD_MAIN_VERSION, COLAMD_SUB_VERSION, COLAMD_DATE)) ;
 
     if (!stats)
     {
-    	PRINTF (("No statistics available.\n")) ;
+        SUITESPARSE_PRINTF (("No statistics available.\n")) ;
 	return ;
     }
 
@@ -3203,11 +3193,11 @@ PRIVATE void print_report
 
     if (stats [COLAMD_STATUS] >= 0)
     {
-    	PRINTF (("OK.  ")) ;
+        SUITESPARSE_PRINTF (("OK.  ")) ;
     }
     else
     {
-    	PRINTF (("ERROR.  ")) ;
+        SUITESPARSE_PRINTF (("ERROR.  ")) ;
     }
 
     switch (stats [COLAMD_STATUS])
@@ -3215,87 +3205,99 @@ PRIVATE void print_report
 
 	case COLAMD_OK_BUT_JUMBLED:
 
-	    PRINTF(("Matrix has unsorted or duplicate row indices.\n")) ;
+            SUITESPARSE_PRINTF((
+                    "Matrix has unsorted or duplicate row indices.\n")) ;
 
-	    PRINTF(("%s: number of duplicate or out-of-order row indices: %d\n",
-	    method, i3)) ;
+            SUITESPARSE_PRINTF((
+                    "%s: number of duplicate or out-of-order row indices: %d\n",
+                    method, i3)) ;
 
-	    PRINTF(("%s: last seen duplicate or out-of-order row index:   %d\n",
-	    method, INDEX (i2))) ;
+            SUITESPARSE_PRINTF((
+                    "%s: last seen duplicate or out-of-order row index:   %d\n",
+                    method, INDEX (i2))) ;
 
-	    PRINTF(("%s: last seen in column:                             %d",
-	    method, INDEX (i1))) ;
+            SUITESPARSE_PRINTF((
+                    "%s: last seen in column:                             %d",
+                    method, INDEX (i1))) ;
 
 	    /* no break - fall through to next case instead */
 
 	case COLAMD_OK:
 
-	    PRINTF(("\n")) ;
+            SUITESPARSE_PRINTF(("\n")) ;
 
- 	    PRINTF(("%s: number of dense or empty rows ignored:           %d\n",
-	    method, stats [COLAMD_DENSE_ROW])) ;
+            SUITESPARSE_PRINTF((
+                    "%s: number of dense or empty rows ignored:           %d\n",
+                    method, stats [COLAMD_DENSE_ROW])) ;
 
-	    PRINTF(("%s: number of dense or empty columns ignored:        %d\n",
-	    method, stats [COLAMD_DENSE_COL])) ;
+            SUITESPARSE_PRINTF((
+                    "%s: number of dense or empty columns ignored:        %d\n",
+                    method, stats [COLAMD_DENSE_COL])) ;
 
-	    PRINTF(("%s: number of garbage collections performed:         %d\n",
-	    method, stats [COLAMD_DEFRAG_COUNT])) ;
+            SUITESPARSE_PRINTF((
+                    "%s: number of garbage collections performed:         %d\n",
+                    method, stats [COLAMD_DEFRAG_COUNT])) ;
 	    break ;
 
 	case COLAMD_ERROR_A_not_present:
 
-	    PRINTF(("Array A (row indices of matrix) not present.\n")) ;
+	    SUITESPARSE_PRINTF((
+                    "Array A (row indices of matrix) not present.\n")) ;
 	    break ;
 
 	case COLAMD_ERROR_p_not_present:
 
-	    PRINTF(("Array p (column pointers for matrix) not present.\n")) ;
+            SUITESPARSE_PRINTF((
+                    "Array p (column pointers for matrix) not present.\n")) ;
 	    break ;
 
 	case COLAMD_ERROR_nrow_negative:
 
-	    PRINTF(("Invalid number of rows (%d).\n", i1)) ;
+            SUITESPARSE_PRINTF(("Invalid number of rows (%d).\n", i1)) ;
 	    break ;
 
 	case COLAMD_ERROR_ncol_negative:
 
-	    PRINTF(("Invalid number of columns (%d).\n", i1)) ;
+            SUITESPARSE_PRINTF(("Invalid number of columns (%d).\n", i1)) ;
 	    break ;
 
 	case COLAMD_ERROR_nnz_negative:
 
-	    PRINTF(("Invalid number of nonzero entries (%d).\n", i1)) ;
+            SUITESPARSE_PRINTF((
+                    "Invalid number of nonzero entries (%d).\n", i1)) ;
 	    break ;
 
 	case COLAMD_ERROR_p0_nonzero:
 
-	    PRINTF(("Invalid column pointer, p [0] = %d, must be zero.\n", i1));
+            SUITESPARSE_PRINTF((
+                    "Invalid column pointer, p [0] = %d, must be zero.\n", i1));
 	    break ;
 
 	case COLAMD_ERROR_A_too_small:
 
-	    PRINTF(("Array A too small.\n")) ;
-	    PRINTF(("        Need Alen >= %d, but given only Alen = %d.\n",
-	    i1, i2)) ;
+            SUITESPARSE_PRINTF(("Array A too small.\n")) ;
+            SUITESPARSE_PRINTF((
+                    "        Need Alen >= %d, but given only Alen = %d.\n",
+                    i1, i2)) ;
 	    break ;
 
 	case COLAMD_ERROR_col_length_negative:
 
-	    PRINTF
-	    (("Column %d has a negative number of nonzero entries (%d).\n",
-	    INDEX (i1), i2)) ;
+            SUITESPARSE_PRINTF
+            (("Column %d has a negative number of nonzero entries (%d).\n",
+            INDEX (i1), i2)) ;
 	    break ;
 
 	case COLAMD_ERROR_row_index_out_of_bounds:
 
-	    PRINTF
-	    (("Row index (row %d) out of bounds (%d to %d) in column %d.\n",
-	    INDEX (i2), INDEX (0), INDEX (i3-1), INDEX (i1))) ;
+            SUITESPARSE_PRINTF
+            (("Row index (row %d) out of bounds (%d to %d) in column %d.\n",
+            INDEX (i2), INDEX (0), INDEX (i3-1), INDEX (i1))) ;
 	    break ;
 
 	case COLAMD_ERROR_out_of_memory:
 
-	    PRINTF(("Out of memory.\n")) ;
+            SUITESPARSE_PRINTF(("Out of memory.\n")) ;
 	    break ;
 
 	/* v2.4: internal-error case deleted */
diff --git a/COLAMD/Source/colamd_global.c b/COLAMD/Source/colamd_global.c
index 4d1ae22..9bf3ce2 100644
--- a/COLAMD/Source/colamd_global.c
+++ b/COLAMD/Source/colamd_global.c
@@ -5,20 +5,8 @@
 /* ----------------------------------------------------------------------------
  * COLAMD, Copyright (C) 2007, Timothy A. Davis.
  * See License.txt for the Version 2.1 of the GNU Lesser General Public License
- * http://www.cise.ufl.edu/research/sparse
+ * http://www.suitesparse.com
  * -------------------------------------------------------------------------- */
 
-/* Global variables for COLAMD */
-
-#ifndef NPRINT
-#ifdef MATLAB_MEX_FILE
-#include "mex.h"
-int (*colamd_printf) (const char *, ...) = mexPrintf ;
-#else
-#include <stdio.h>
-int (*colamd_printf) (const char *, ...) = printf ;
-#endif
-#else
-int (*colamd_printf) (const char *, ...) = ((void *) 0) ;
-#endif
-
+/* Global variables for COLAMD : colamd_printf replaced with
+    a function in SuiteSparse_config. */
diff --git a/CSparse/Demo/Makefile b/CSparse/Demo/Makefile
index 742ed8a..ee46101 100644
--- a/CSparse/Demo/Makefile
+++ b/CSparse/Demo/Makefile
@@ -1,6 +1,4 @@
-CC = cc
-CFLAGS = -O
-
+CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O
 I = -I../Include
 
 CS = ../Lib/libcsparse.a
@@ -22,18 +20,18 @@ lib:
 	( cd ../Lib ; $(MAKE) )
 
 cs_demo1: lib cs_demo1.c Makefile
-	$(CC) $(CFLAGS) $(I) -o cs_demo1 cs_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo1 cs_demo1.c $(CS) -lm
 
 cs_demo2: lib cs_demo2.c cs_demo.c cs_demo.h Makefile
-	$(CC) $(CFLAGS) $(I) -o cs_demo2 cs_demo2.c cs_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo2 cs_demo2.c cs_demo.c $(CS) -lm
 
 cs_demo3: lib cs_demo3.c cs_demo.c cs_demo.h Makefile
-	$(CC) $(CFLAGS) $(I) -o cs_demo3 cs_demo3.c cs_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo3 cs_demo3.c cs_demo.c $(CS) -lm
 
 clean:
-	rm -f *.o
+	- $(RM) *.o
 
 purge: distclean
 
 distclean: clean
-	rm -f cs_demo1 cs_demo2 cs_demo3 *.a
+	- $(RM) -r cs_demo1 cs_demo2 cs_demo3 *.a *.dSYM *.obj *.dll
diff --git a/CSparse/Demo/README.txt b/CSparse/Demo/README.txt
index ea7385f..9bc9293 100644
--- a/CSparse/Demo/README.txt
+++ b/CSparse/Demo/README.txt
@@ -2,3 +2,5 @@ CSparse/Demo:  to compile a run the demos, just type "make" in this directory.
 The printed residuals should all be small, except for the mbeacxc matrix
 (which is numerically and structurally singular), and ash219 (which is a
 least-squares problem).  See cs_demo.out for the proper output of "make".
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CSparse/Demo/cs_demo.c b/CSparse/Demo/cs_demo.c
index 4e85757..f2937eb 100644
--- a/CSparse/Demo/cs_demo.c
+++ b/CSparse/Demo/cs_demo.c
@@ -1,105 +1,107 @@
 #include "cs_demo.h"
 #include <time.h>
 /* 1 if A is square & upper tri., -1 if square & lower tri., 0 otherwise */
-static int is_sym (cs *A)
+static csi is_sym (cs *A)
 {
-    int is_upper, is_lower, j, p, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i ;
+    csi is_upper, is_lower, j, p, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i ;
     if (m != n) return (0) ;
     is_upper = 1 ;
     is_lower = 1 ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    if (Ai [p] > j) is_upper = 0 ;
-	    if (Ai [p] < j) is_lower = 0 ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            if (Ai [p] > j) is_upper = 0 ;
+            if (Ai [p] < j) is_lower = 0 ;
+        }
     }
     return (is_upper ? 1 : (is_lower ? -1 : 0)) ;
 }
 
 /* true for off-diagonal entries */
-static int dropdiag (int i, int j, double aij, void *other) { return (i != j) ;}
+static csi dropdiag (csi i, csi j, double aij, void *other) { return (i != j) ;}
 
 /* C = A + triu(A,1)' */
 static cs *make_sym (cs *A)
 {
     cs *AT, *C ;
-    AT = cs_transpose (A, 1) ;		/* AT = A' */
-    cs_fkeep (AT, &dropdiag, NULL) ;	/* drop diagonal entries from AT */
-    C = cs_add (A, AT, 1, 1) ;		/* C = A+AT */
+    AT = cs_transpose (A, 1) ;          /* AT = A' */
+    cs_fkeep (AT, &dropdiag, NULL) ;    /* drop diagonal entries from AT */
+    C = cs_add (A, AT, 1, 1) ;          /* C = A+AT */
     cs_spfree (AT) ;
     return (C) ;
 }
 
 /* create a right-hand side */
-static void rhs (double *x, double *b, int m)
+static void rhs (double *x, double *b, csi m)
 {
-    int i ;
+    csi i ;
     for (i = 0 ; i < m ; i++) b [i] = 1 + ((double) i) / m ;
     for (i = 0 ; i < m ; i++) x [i] = b [i] ;
 }
 
 /* infinity-norm of x */
-static double norm (double *x, int n)
+static double norm (double *x, csi n)
 {
-    int i ;
+    csi i ;
     double normx = 0 ;
     for (i = 0 ; i < n ; i++) normx = CS_MAX (normx, fabs (x [i])) ;
     return (normx) ;
 }
 
 /* compute residual, norm(A*x-b,inf) / (norm(A,1)*norm(x,inf) + norm(b,inf)) */
-static void print_resid (int ok, cs *A, double *x, double *b, double *resid)
+static void print_resid (csi ok, cs *A, double *x, double *b, double *resid)
 {
-    int i, m, n ;
+    csi i, m, n ;
     if (!ok) { printf ("    (failed)\n") ; return ; }
     m = A->m ; n = A->n ;
     for (i = 0 ; i < m ; i++) resid [i] = -b [i] ;  /* resid = -b */
-    cs_gaxpy (A, x, resid) ;			    /* resid = resid + A*x  */
+    cs_gaxpy (A, x, resid) ;                        /* resid = resid + A*x  */
     printf ("resid: %8.2e\n", norm (resid,m) / ((n == 0) ? 1 :
-	(cs_norm (A) * norm (x,n) + norm (b,m)))) ;
+        (cs_norm (A) * norm (x,n) + norm (b,m)))) ;
 }
 
 static double tic (void) { return (clock () / (double) CLOCKS_PER_SEC) ; }
 static double toc (double t) { double s = tic () ; return (CS_MAX (0, s-t)) ; }
 
-static void print_order (int order)
+static void print_order (csi order)
 {
     switch (order)
     {
-	case 0: printf ("natural    ") ; break ;
-	case 1: printf ("amd(A+A')  ") ; break ;
-	case 2: printf ("amd(S'*S)  ") ; break ;
-	case 3: printf ("amd(A'*A)  ") ; break ;
+        case 0: printf ("natural    ") ; break ;
+        case 1: printf ("amd(A+A')  ") ; break ;
+        case 2: printf ("amd(S'*S)  ") ; break ;
+        case 3: printf ("amd(A'*A)  ") ; break ;
     }
 }
 
-/* read a problem from a file */
+/* read a problem from a file; use %g for integers to avoid csi conflicts */
 problem *get_problem (FILE *f, double tol)
 {
     cs *T, *A, *C ;
-    int sym, m, n, mn, nz1, nz2 ;
+    csi sym, m, n, mn, nz1, nz2 ;
     problem *Prob ;
     Prob = cs_calloc (1, sizeof (problem)) ;
     if (!Prob) return (NULL) ;
-    T = cs_load (f) ;			/* load triplet matrix T from a file */
-    Prob->A = A = cs_compress (T) ;	/* A = compressed-column form of T */
-    cs_spfree (T) ;			/* clear T */
+    T = cs_load (f) ;                   /* load triplet matrix T from a file */
+    Prob->A = A = cs_compress (T) ;     /* A = compressed-column form of T */
+    cs_spfree (T) ;                     /* clear T */
     if (!cs_dupl (A)) return (free_problem (Prob)) ; /* sum up duplicates */
-    Prob->sym = sym = is_sym (A) ;	/* determine if A is symmetric */
+    Prob->sym = sym = is_sym (A) ;      /* determine if A is symmetric */
     m = A->m ; n = A->n ;
     mn = CS_MAX (m,n) ;
     nz1 = A->p [n] ;
-    cs_dropzeros (A) ;			/* drop zero entries */
+    cs_dropzeros (A) ;                  /* drop zero entries */
     nz2 = A->p [n] ;
-    if (tol > 0) cs_droptol (A, tol) ;	/* drop tiny entries (just to test) */
+    if (tol > 0) cs_droptol (A, tol) ;  /* drop tiny entries (just to test) */
     Prob->C = C = sym ? make_sym (A) : A ;  /* C = A + triu(A,1)', or C=A */
     if (!C) return (free_problem (Prob)) ;
-    printf ("\n--- Matrix: %d-by-%d, nnz: %d (sym: %d: nnz %d), norm: %8.2e\n",
-	    m, n, A->p [n], sym, sym ? C->p [n] : 0, cs_norm (C)) ;
-    if (nz1 != nz2) printf ("zero entries dropped: %d\n", nz1 - nz2) ;
-    if (nz2 != A->p [n]) printf ("tiny entries dropped: %d\n", nz2 - A->p [n]) ;
+    printf ("\n--- Matrix: %g-by-%g, nnz: %g (sym: %g: nnz %g), norm: %8.2e\n",
+            (double) m, (double) n, (double) (A->p [n]), (double) sym,
+            (double) (sym ? C->p [n] : 0), cs_norm (C)) ;
+    if (nz1 != nz2) printf ("zero entries dropped: %g\n", (double) (nz1 - nz2));
+    if (nz2 != A->p [n]) printf ("tiny entries dropped: %g\n",
+            (double) (nz2 - A->p [n])) ;
     Prob->b = cs_malloc (mn, sizeof (double)) ;
     Prob->x = cs_malloc (mn, sizeof (double)) ;
     Prob->resid = cs_malloc (mn, sizeof (double)) ;
@@ -119,66 +121,67 @@ problem *free_problem (problem *Prob)
 }
 
 /* solve a linear system using Cholesky, LU, and QR, with various orderings */
-int demo2 (problem *Prob)
+csi demo2 (problem *Prob)
 {
     cs *A, *C ;
     double *b, *x, *resid,  t, tol ;
-    int k, m, n, ok, order, nb, ns, *r, *s, *rr, sprank ;
+    csi k, m, n, ok, order, nb, ns, *r, *s, *rr, sprank ;
     csd *D ;
     if (!Prob) return (0) ;
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     m = A->m ; n = A->n ;
-    tol = Prob->sym ? 0.001 : 1 ;		/* partial pivoting tolerance */
-    D = cs_dmperm (C, 1) ;			/* randomized dmperm analysis */
+    tol = Prob->sym ? 0.001 : 1 ;               /* partial pivoting tolerance */
+    D = cs_dmperm (C, 1) ;                      /* randomized dmperm analysis */
     if (!D) return (0) ;
     nb = D->nb ; r = D->r ; s = D->s ; rr = D->rr ;
     sprank = rr [3] ;
     for (ns = 0, k = 0 ; k < nb ; k++)
     {
-	ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
+        ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
     }
-    printf ("blocks: %d singletons: %d structural rank: %d\n", nb, ns, sprank) ;
+    printf ("blocks: %g singletons: %g structural rank: %g\n",
+        (double) nb, (double) ns, (double) sprank) ;
     cs_dfree (D) ;
-    for (order = 0 ; order <= 3 ; order += 3)	/* natural and amd(A'*A) */
+    for (order = 0 ; order <= 3 ; order += 3)   /* natural and amd(A'*A) */
     {
-	if (!order && m > 1000) continue ;
-	printf ("QR   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_qrsol (order, C, x) ;		/* min norm(Ax-b) with QR */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("QR   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_qrsol (order, C, x) ;           /* min norm(Ax-b) with QR */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
-    if (m != n || sprank < n) return (1) ;	/* return if rect. or singular*/
-    for (order = 0 ; order <= 3 ; order++)	/* try all orderings */
+    if (m != n || sprank < n) return (1) ;      /* return if rect. or singular*/
+    for (order = 0 ; order <= 3 ; order++)      /* try all orderings */
     {
-	if (!order && m > 1000) continue ;
-	printf ("LU   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_lusol (order, C, x, tol) ;	/* solve Ax=b with LU */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("LU   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_lusol (order, C, x, tol) ;      /* solve Ax=b with LU */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     if (!Prob->sym) return (1) ;
-    for (order = 0 ; order <= 1 ; order++)	/* natural and amd(A+A') */
+    for (order = 0 ; order <= 1 ; order++)      /* natural and amd(A+A') */
     {
-	if (!order && m > 1000) continue ;
-	printf ("Chol ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_cholsol (order, C, x) ;		/* solve Ax=b with Cholesky */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("Chol ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_cholsol (order, C, x) ;         /* solve Ax=b with Cholesky */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     return (1) ;
 } 
 
 /* free workspace for demo3 */
-static int done3 (int ok, css *S, csn *N, double *y, cs *W, cs *E, int *p)
+static csi done3 (csi ok, css *S, csn *N, double *y, cs *W, cs *E, csi *p)
 {
     cs_sfree (S) ;
     cs_nfree (N) ;
@@ -190,10 +193,10 @@ static int done3 (int ok, css *S, csn *N, double *y, cs *W, cs *E, int *p)
 }
 
 /* Cholesky update/downdate */
-int demo3 (problem *Prob)
+csi demo3 (problem *Prob)
 {
     cs *A, *C, *W = NULL, *WW, *WT, *E = NULL, *W2 ;
-    int n, k, *Li, *Lp, *Wi, *Wp, p1, p2, *p = NULL, ok ;
+    csi n, k, *Li, *Lp, *Wi, *Wp, p1, p2, *p = NULL, ok ;
     double *b, *x, *resid, *y = NULL, *Lx, *Wx, s,  t, t1 ;
     css *S = NULL ;
     csn *N = NULL ;
@@ -201,26 +204,26 @@ int demo3 (problem *Prob)
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     n = A->n ;
     if (!Prob->sym || n == 0) return (1) ;
-    rhs (x, b, n) ;				/* compute right-hand side */
+    rhs (x, b, n) ;                             /* compute right-hand side */
     printf ("\nchol then update/downdate ") ;
     print_order (1) ;
     y = cs_malloc (n, sizeof (double)) ;
     t = tic () ;
-    S = cs_schol (1, C) ;			/* symbolic Chol, amd(A+A') */
+    S = cs_schol (1, C) ;                       /* symbolic Chol, amd(A+A') */
     printf ("\nsymbolic chol time %8.2f\n", toc (t)) ;
     t = tic () ;
-    N = cs_chol (C, S) ;			/* numeric Cholesky */
+    N = cs_chol (C, S) ;                        /* numeric Cholesky */
     printf ("numeric  chol time %8.2f\n", toc (t)) ;
     if (!S || !N || !y) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     printf ("solve    chol time %8.2f\n", toc (t)) ;
     printf ("original: ") ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
-    k = n/2 ;					/* construct W  */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
+    k = n/2 ;                                   /* construct W  */
     W = cs_spalloc (n, 1, n, 1, 0) ;
     if (!W) return (done3 (0, S, N, y, W, E, p)) ;
     Lp = N->L->p ; Li = N->L->i ; Lx = N->L->x ;
@@ -232,23 +235,23 @@ int demo3 (problem *Prob)
     srand (1) ;
     for ( ; p1 < Lp [k+1] ; p1++)
     {
-	p2 = p1 - Lp [k] ;
-	Wi [p2] = Li [p1] ;
-	Wx [p2] = s * rand () / ((double) RAND_MAX) ;
+        p2 = p1 - Lp [k] ;
+        Wi [p2] = Li [p1] ;
+        Wx [p2] = s * rand () / ((double) RAND_MAX) ;
     }
     t = tic () ;
-    ok = cs_updown (N->L, +1, W, S->parent) ;	/* update: L*L'+W*W' */
+    ok = cs_updown (N->L, +1, W, S->parent) ;   /* update: L*L'+W*W' */
     t1 = toc (t) ;
     printf ("update:   time: %8.2f\n", t1) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     p = cs_pinv (S->pinv, n) ;
-    W2 = cs_permute (W, p, NULL, 1) ;		/* E = C + (P'W)*(P'W)' */
+    W2 = cs_permute (W, p, NULL, 1) ;           /* E = C + (P'W)*(P'W)' */
     WT = cs_transpose (W2,1) ;
     WW = cs_multiply (W2, WT) ;
     cs_spfree (WT) ;
@@ -257,30 +260,30 @@ int demo3 (problem *Prob)
     cs_spfree (WW) ;
     if (!E || !p) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("update:   time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
-    cs_nfree (N) ;				/* clear N */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
+    cs_nfree (N) ;                              /* clear N */
     t = tic () ;
-    N = cs_chol (E, S) ;			/* numeric Cholesky */
+    N = cs_chol (E, S) ;                        /* numeric Cholesky */
     if (!N) return (done3 (0, S, N, y, W, E, p)) ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("rechol:   time: %8.2f (incl solve) ", t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
     t = tic () ;
-    ok = cs_updown (N->L, -1, W, S->parent) ;	/* downdate: L*L'-W*W' */
+    ok = cs_updown (N->L, -1, W, S->parent) ;   /* downdate: L*L'-W*W' */
     t1 = toc (t) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("downdate: time: %8.2f\n", t1) ;
     t = tic () ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("downdate: time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
     return (done3 (1, S, N, y, W, E, p)) ;
 } 
diff --git a/CSparse/Demo/cs_demo.h b/CSparse/Demo/cs_demo.h
index a0e9e72..98f2acb 100644
--- a/CSparse/Demo/cs_demo.h
+++ b/CSparse/Demo/cs_demo.h
@@ -3,13 +3,13 @@ typedef struct problem_struct
 {
     cs *A ;
     cs *C ;
-    int sym ;
+    csi sym ;
     double *x ;
     double *b ;
     double *resid ;
 } problem ;
 
 problem *get_problem (FILE *f, double tol) ;
-int demo2 (problem *Prob) ;
-int demo3 (problem *Prob) ;
+csi demo2 (problem *Prob) ;
+csi demo3 (problem *Prob) ;
 problem *free_problem (problem *Prob) ;
diff --git a/CSparse/Demo/cs_demo.out b/CSparse/Demo/cs_demo.out
index c5771b4..5ad3087 100644
--- a/CSparse/Demo/cs_demo.out
+++ b/CSparse/Demo/cs_demo.out
@@ -1,6 +1,7 @@
+
 ./cs_demo1 < ../Matrix/t1
 T:
-CSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3
     1 0 : 3.1
@@ -13,7 +14,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     0 0 : 4.5
     2 1 : 1.7
 A:
-CSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : 3.1
@@ -30,7 +31,7 @@ CSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       3 : 1
       1 : 0.9
 AT:
-CSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 7.7
     col 0 : locations 0 to 1
       0 : 4.5
@@ -47,7 +48,7 @@ CSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 0.4
       3 : 1
 D:
-CSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 16 nnz: 16, 1-norm: 139.58
     col 0 : locations 0 to 3
       1 : 13.95
@@ -103,7 +104,7 @@ Chol amd(A+A')  time:     0.00 resid: 2.55e-19
 zero entries dropped: 71
 tiny entries dropped: 10
 blocks: 38 singletons: 37 structural rank: 183
-QR   natural    time:     0.01 resid: 6.84e-28
+QR   natural    time:     0.00 resid: 6.84e-28
 QR   amd(A'*A)  time:     0.00 resid: 9.38e-28
 LU   natural    time:     0.00 resid: 6.20e-28
 LU   amd(A+A')  time:     0.00 resid: 1.55e-27
@@ -113,8 +114,8 @@ LU   amd(A'*A)  time:     0.00 resid: 6.98e-28
 
 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01
 blocks: 10 singletons: 8 structural rank: 448
-QR   natural    time:     0.14 resid:      nan
-QR   amd(A'*A)  time:     0.18 resid:      nan
+QR   natural    time:     0.13 resid:      nan
+QR   amd(A'*A)  time:     0.19 resid:      nan
 ./cs_demo2 < ../Matrix/west0067
 
 --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.14e+00
@@ -135,11 +136,11 @@ QR   amd(A'*A)  time:     0.00 resid: 2.25e-16
 
 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09
 blocks: 75 singletons: 74 structural rank: 4884
-QR   amd(A'*A)  time:     1.88 resid: 1.39e-22
-LU   amd(A+A')  time:     1.16 resid: 1.10e-22
-LU   amd(S'*S)  time:     1.15 resid: 1.28e-22
-LU   amd(A'*A)  time:     1.20 resid: 1.78e-22
-Chol amd(A+A')  time:     0.37 resid: 1.19e-22
+QR   amd(A'*A)  time:     2.29 resid: 1.39e-22
+LU   amd(A+A')  time:     1.24 resid: 1.10e-22
+LU   amd(S'*S)  time:     1.11 resid: 1.28e-22
+LU   amd(A'*A)  time:     1.18 resid: 1.78e-22
+Chol amd(A+A')  time:     0.51 resid: 1.19e-22
 ./cs_demo3 < ../Matrix/bcsstk01
 
 --- Matrix: 48-by-48, nnz: 224 (sym: -1: nnz 400), norm: 3.57e+09
@@ -160,11 +161,11 @@ downdate: time:     0.00 (incl solve) resid: 3.74e-17
 
 chol then update/downdate amd(A+A')  
 symbolic chol time     0.02
-numeric  chol time     0.34
-solve    chol time     0.00
+numeric  chol time     0.36
+solve    chol time     0.01
 original: resid: 1.19e-22
 update:   time:     0.00
 update:   time:     0.01 (incl solve) resid: 1.12e-23
-rechol:   time:     0.34 (incl solve) resid: 1.17e-23
+rechol:   time:     0.39 (incl solve) resid: 1.17e-23
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 4.09e-22
+downdate: time:     0.02 (incl solve) resid: 4.09e-22
diff --git a/CSparse/Demo/cs_demo1.c b/CSparse/Demo/cs_demo1.c
index ea1a059..622cf1d 100644
--- a/CSparse/Demo/cs_demo1.c
+++ b/CSparse/Demo/cs_demo1.c
@@ -2,23 +2,23 @@
 int main (void)
 {
     cs *T, *A, *Eye, *AT, *C, *D ;
-    int i, m ;
-    T = cs_load (stdin) ;		/* load triplet matrix T from stdin */
-    printf ("T:\n") ; cs_print (T, 0) ;	/* print T */
-    A = cs_compress (T) ;		/* A = compressed-column form of T */
-    printf ("A:\n") ; cs_print (A, 0) ;	/* print A */
-    cs_spfree (T) ;			/* clear T */
-    AT = cs_transpose (A, 1) ;		/* AT = A' */
+    csi i, m ;
+    T = cs_load (stdin) ;               /* load triplet matrix T from stdin */
+    printf ("T:\n") ; cs_print (T, 0) ; /* print T */
+    A = cs_compress (T) ;               /* A = compressed-column form of T */
+    printf ("A:\n") ; cs_print (A, 0) ; /* print A */
+    cs_spfree (T) ;                     /* clear T */
+    AT = cs_transpose (A, 1) ;          /* AT = A' */
     printf ("AT:\n") ; cs_print (AT, 0) ; /* print AT */
-    m = A ? A->m : 0 ;			/* m = # of rows of A */
-    T = cs_spalloc (m, m, m, 1, 1) ;	/* create triplet identity matrix */
+    m = A ? A->m : 0 ;                  /* m = # of rows of A */
+    T = cs_spalloc (m, m, m, 1, 1) ;    /* create triplet identity matrix */
     for (i = 0 ; i < m ; i++) cs_entry (T, i, i, 1) ;
-    Eye = cs_compress (T) ;		/* Eye = speye (m) */
+    Eye = cs_compress (T) ;             /* Eye = speye (m) */
     cs_spfree (T) ;
-    C = cs_multiply (A, AT) ;		/* C = A*A' */
+    C = cs_multiply (A, AT) ;           /* C = A*A' */
     D = cs_add (C, Eye, 1, cs_norm (C)) ;   /* D = C + Eye*norm (C,1) */
-    printf ("D:\n") ; cs_print (D, 0) ;	/* print D */
-    cs_spfree (A) ;			/* clear A AT C D Eye */
+    printf ("D:\n") ; cs_print (D, 0) ; /* print D */
+    cs_spfree (A) ;                     /* clear A AT C D Eye */
     cs_spfree (AT) ;
     cs_spfree (C) ;
     cs_spfree (D) ;
diff --git a/CSparse/Doc/ChangeLog b/CSparse/Doc/ChangeLog
index ea1e3d0..bd56fcc 100644
--- a/CSparse/Doc/ChangeLog
+++ b/CSparse/Doc/ChangeLog
@@ -1,20 +1,77 @@
+Oct 10, 2014: version 3.1.4
+
+    modified cs_make.m.  No change to C code except version number.
+
+Mar 26, 2014: version 3.1.3
+
+    * minor update to UFget
+
+Apr 16, 2013: verison 3.1.2
+
+    * removed a useless line from cs_sqr.c (no integer overflow can
+        occur in S->lnz, S->unz at that point)
+
+Jun 20, 2012: verison 3.1.1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 3.1.0
+
+    * minor changes to enable the creation of CXSparse 3.1.0
+
+Dec 7, 2011: version 3.0.2
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * minor fix to MATLAB cs_install.m
+
+Jan 18, 2010: version 3.0.0
+
+    * changed "int" to "csi", which is normally "ptrdiff_t".  This way,
+        CSparse can be used on a 64-bit platform (and in 64-bit MATLAB
+        in particular), without the need to use CXSparse.  If you wish
+        to use "int", simply edit CSparse/Include/cs.h and change the
+        definition of csi, or compile with -Dcsi=int.
+
+Jan 25, 2011: version 2.2.5
+
+    * minor fix to "make install"
+    * minor change to cs_util.c, typecast return (cs_free (...))
+    * minor fixes to UFget: help file, UFsettings.txt
+
+Nov 30, 2009: version 2.2.4
+
+    * added "make install" and "make uninstall"
+    * minor change to cs_make.m
+
+Jan 20, 2009, v2.2.3
+
+    * all tabs expanded to 8 spaces (except for Makefiles)
+    * example corrected in cs_gaxpy.m
+    * minor change to cs_sparse to allow for i,j,x to be either
+        row or column vectors (or any mixture)
+
+Sept 8, 2008, v2.2.2
+
+    * minor change to cs_make.m, to change "/" to filesep ("/" on Unix, "\"
+        on Windows), to handle limitations in some Windows compilers
+
 Nov 1, 2007, v2.2.1
 
     * very minor change to Include/cs.h:  Changed name of 2nd argument of
-	cs_permute, to match the code.  This has no affect on the code itself,
-	since the type ("int *") is unchanged.  It's just a documentation issue.
+        cs_permute, to match the code.  This has no affect on the code itself,
+        since the type ("int *") is unchanged.  It's just a documentation issue.
 
     * minor lint cleanup in mexFunctions
 
 Mar 31, 2007, v2.2.0
 
     * few changes to primary Source/ files.  Changes mostly affect MATLAB
-	interface.
+        interface.
 
     * Source/cs_house.c: correction to comment
 
     * Souce/cs_updown.c: whitespace changed to reflect change in CXSparse,
-	no impact at all on CSparse itself.
+        no impact at all on CSparse itself.
 
     * Doc/, Lib/ and Include/ directories created.
 
@@ -25,7 +82,7 @@ Mar 31, 2007, v2.2.0
     * correction to help comments in cs_dmperm.m, cs_qr.m, cs_scc2.m, cs_scc.m
 
     * if complex matrix passed to CSparse in MATLAB, error message 
-	suggests using CXSparse instead
+        suggests using CXSparse instead
 
     * minor performance fix to cs_sparse_mex.c
 
@@ -50,7 +107,7 @@ Dec 12, 2006, v2.0.7
 Dec 6, 2006, v2.0.6
 
     * Update to UFget.  Now relies on the MATLAB urlwrite function instead of
-	my own Java code.
+        my own Java code.
 
 Nov 2006, v2.0.5
 
@@ -59,23 +116,23 @@ Nov 2006, v2.0.5
     * No changes to C Source code, except for version number and date.
 
     * Added two test matrices: ibm32a and ibm32b.  ibm32a is the Harwell/
-	Boeing matrix ibm32, but with the last column removed.  ibm32b
-	is the transpose of ibm32a.  With optimization enabled (-O),
-	2 lines in cs_maxtrans.c are not tested; these matrices correct
-	that problem.
+        Boeing matrix ibm32, but with the last column removed.  ibm32b
+        is the transpose of ibm32a.  With optimization enabled (-O),
+        2 lines in cs_maxtrans.c are not tested; these matrices correct
+        that problem.
 
     * Fixed UFget.  Earlier version could not download matrices larger than
-	32MB.
+        32MB.
 
     * Modified UFget/UFweb, to reflect changes in the UF Sparse Matrix
-	Collection.
+        Collection.
 
     * Added ccspy.m and cs_scc2.m MATLAB functions
 
     * Added examples to help info in each *.m MATLAB file
 
-    * modified cs_dmspy to speed up the plotting of large matrices with many	
-	singletons
+    * modified cs_dmspy to speed up the plotting of large matrices with many    
+        singletons
 
     * minor change to cspy: now draws a box around the matrix.
 
@@ -84,13 +141,13 @@ Nov 2006, v2.0.5
 Oct 13, 2006, v2.0.4
 
     * minor modification to cs_updown.c.  "n" was incorrectly declared "double".
-	It should be "int".  This was safe, just a little confusing (n was only
-	used in an argument to cs_malloc, and is thus typecast).
+        It should be "int".  This was safe, just a little confusing (n was only
+        used in an argument to cs_malloc, and is thus typecast).
 
 Sept 28, 2006, v2.0.3
 
     * minor modifications to MATLAB interface, to allow CSparse to be used
-	in MATLAB 6.5.
+        in MATLAB 6.5.
 
     * added examples to m-files, other minor m-file cleanup.
 
@@ -101,105 +158,105 @@ Aug 23, 2006: v2.0.2
     * change to cs_updown mexFunction, to handle multiple rank updates
 
     * symbolic links removed from Tcov/ directory in the distribution.
-	They are now created by Tcov/Makefile as needed.  This makes the
-	zip files cleaner.  Tcov/*test.c test files renamed.
+        They are now created by Tcov/Makefile as needed.  This makes the
+        zip files cleaner.  Tcov/*test.c test files renamed.
 
 July 19, 2006:
 
     * minor fix to cs_must_compile.m and cs_make.m, to allow CSparse to be
-	compiled in MATLAB 6.5 with cs_make.
+        compiled in MATLAB 6.5 with cs_make.
 
     * minor fix to cspy for complex matrices (imaginary part was ignored).
 
     * no change to version number or date, since there are no changes that
-	affect the appearance of CSparse in the book ("Direct Methods for
-	Sparse Linear Systems", SIAM, 2006).
+        affect the appearance of CSparse in the book ("Direct Methods for
+        Sparse Linear Systems", SIAM, 2006).
 
 June 24, 2006:
 
     * minor typos in comments corrected.  No change in code itself,
-	and no change in version number or date.
+        and no change in version number or date.
 
 May 27, 2006, v2.0.1: (this version is printed in the book)
 
     * minor bug fix.  cs_util.c modified, so that cs_sprealloc (T,0) works
-	properly for a triplet matrix T (setting T->nzmax equal to T->nz).
-	The line in v2.0.0:
+        properly for a triplet matrix T (setting T->nzmax equal to T->nz).
+        The line in v2.0.0:
 
-	    nzmax = (nzmax <= 0) ? (A->p [A->n]) : nzmax ;
+            nzmax = (nzmax <= 0) ? (A->p [A->n]) : nzmax ;
 
-	changes to the following in v2.0.1:
+        changes to the following in v2.0.1:
 
-	    if (nzmax <= 0) nzmax = (CS_CSC (A)) ? (A->p [A->n]) : A->nz ;
+            if (nzmax <= 0) nzmax = (CS_CSC (A)) ? (A->p [A->n]) : A->nz ;
 
     * minor typographical changes arising from the editting of the book.
 
 Apr 12, 2006, v2.0.0:
 
     * random permutation option added to cs_maxtrans and cs_dmperm, to help
-	avoid rare cases where the O(|A|n) time complexity is reached in
-	practice (GHS_indef/boyd2 in the UF sparse matrix collection, for
-	example).  New cs_randperm function added.
+        avoid rare cases where the O(|A|n) time complexity is reached in
+        practice (GHS_indef/boyd2 in the UF sparse matrix collection, for
+        example).  New cs_randperm function added.
 
 Apr 10, 2006:
 
     * stylistic changes for the book (except for the bug fix):
 
     * "int order" parameter of cs_amd, cs_lusol, cs_cholsol, cs_qrsol, cs_sqr,
-	cs_schol changed.  Now 0 means no ordering, 1 is A+A', 2 is S*S', and
-	3 is A*A'.  In v1.2 and earlier, "order" took on a value ranging from
-	-1 to 2.  "int n" parameter rearranged for cs_ipvec, cs_pvec, cs_post
-	(int n moved to the end).  cs_triplet renamed cs_compress.
-
-	To ensure that these changes are propagated into user code that calls
-	CSparse, the "order" parameter has been placed as the first parameter
-	in all these routines.  Your compiler will complain (gcc will halt) if
-	you upgrade from v1.2 to v2.0 without changing your code.  This is much
-	better than a silent error in which you get the wrong ordering by
-	mistake (with a huge penalty in run-time performance and no compiler
-	warnings).
-
-	New syntax (v2.0 and later):
-	----------------------------
-
-	    order = 0: natural ordering
-	    order = 1: amd (A+A')
-	    order = 2: amd (S'*S), where S=A except dense rows dropped
-	    order = 3: amd (A'*A)
-
-	    int cs_cholsol (int order, const cs *A, double *b) ;
-	    int cs_lusol (int order, const cs *A, double *b, double tol) ;
-	    int cs_qrsol (int order, const cs *A, double *b) ;
-	    int *cs_amd (int order, const cs *A) ;
-	    css *cs_schol (int order, const cs *A) ;
-	    css *cs_sqr (int order, const cs *A, int qr) ;
-
-	    int *cs_post (const int *parent, int n) ;
-	    int cs_ipvec (const int *p, const double *b, double *x, int n) ;
-	    int cs_pvec (const int *p, const double *b, double *x, int n) ;
-
-	    cs *cs_compress (const cs *T) ;
-
-	Old syntax (v1.2 and earlier):
-	------------------------------
-
-	    order = -1: natural ordering
-	    order = 0: amd (A+A')
-	    order = 1: amd (S'*S), where S=A except dense rows dropped
-	    order = 2: amd (A'*A)
-
-	    int cs_cholsol (const cs *A, double *b, int order) ;
-	    int cs_lusol (const cs *A, double *b, int order, double tol) ;
-	    int cs_qrsol (const cs *A, double *b, int order) ;
-	    int *cs_amd (const cs *A, int order) ;
-	    css *cs_schol (const cs *A, int order) ;
-	    css *cs_sqr (const cs *A, int order, int qr) ;
-
-	    int *cs_post (int n, const int *parent) ;
-	    int cs_ipvec (int n, const int *p, const double *b, double *x) ;
-	    int cs_pvec (int n, const int *p, const double *b, double *x) ;
-
-	    cs *cs_triplet (const cs *T) ;
+        cs_schol changed.  Now 0 means no ordering, 1 is A+A', 2 is S*S', and
+        3 is A*A'.  In v1.2 and earlier, "order" took on a value ranging from
+        -1 to 2.  "int n" parameter rearranged for cs_ipvec, cs_pvec, cs_post
+        (int n moved to the end).  cs_triplet renamed cs_compress.
+
+        To ensure that these changes are propagated into user code that calls
+        CSparse, the "order" parameter has been placed as the first parameter
+        in all these routines.  Your compiler will complain (gcc will halt) if
+        you upgrade from v1.2 to v2.0 without changing your code.  This is much
+        better than a silent error in which you get the wrong ordering by
+        mistake (with a huge penalty in run-time performance and no compiler
+        warnings).
+
+        New syntax (v2.0 and later):
+        ----------------------------
+
+            order = 0: natural ordering
+            order = 1: amd (A+A')
+            order = 2: amd (S'*S), where S=A except dense rows dropped
+            order = 3: amd (A'*A)
+
+            int cs_cholsol (int order, const cs *A, double *b) ;
+            int cs_lusol (int order, const cs *A, double *b, double tol) ;
+            int cs_qrsol (int order, const cs *A, double *b) ;
+            int *cs_amd (int order, const cs *A) ;
+            css *cs_schol (int order, const cs *A) ;
+            css *cs_sqr (int order, const cs *A, int qr) ;
+
+            int *cs_post (const int *parent, int n) ;
+            int cs_ipvec (const int *p, const double *b, double *x, int n) ;
+            int cs_pvec (const int *p, const double *b, double *x, int n) ;
+
+            cs *cs_compress (const cs *T) ;
+
+        Old syntax (v1.2 and earlier):
+        ------------------------------
+
+            order = -1: natural ordering
+            order = 0: amd (A+A')
+            order = 1: amd (S'*S), where S=A except dense rows dropped
+            order = 2: amd (A'*A)
+
+            int cs_cholsol (const cs *A, double *b, int order) ;
+            int cs_lusol (const cs *A, double *b, int order, double tol) ;
+            int cs_qrsol (const cs *A, double *b, int order) ;
+            int *cs_amd (const cs *A, int order) ;
+            css *cs_schol (const cs *A, int order) ;
+            css *cs_sqr (const cs *A, int order, int qr) ;
+
+            int *cs_post (int n, const int *parent) ;
+            int cs_ipvec (int n, const int *p, const double *b, double *x) ;
+            int cs_pvec (int n, const int *p, const double *b, double *x) ;
+
+            cs *cs_triplet (const cs *T) ;
 
     * CS_OVERFLOW macro removed (removed from cs_malloc.c; not needed).
 
@@ -210,7 +267,7 @@ Apr 10, 2006:
     * Pinv and Q components of css struct changed to pinv and q.
 
     * CS_CSC and CS_TRIPLET macros added, to clarify which CSparse functions
-	accept cs matrices in compressed column form, triplet form, or both.
+        accept cs matrices in compressed column form, triplet form, or both.
 
     * check for negative row/column indices added to cs_entry.
 
@@ -219,33 +276,33 @@ Apr 10, 2006:
     * call to cs_sprealloc added to cs_fkeep.
 
     * bug fixes in cs_counts and cs_amd (memory leak under rare out-of-memory
-	conditions).
+        conditions).
 
 Mar 15, 2006:
 
     * cs_scc modified so that the row and columns of each component are put in
-	their natural order.  cs_dmperm modified so that columns of each block
-	(instead of rows) are placed in their natural order.
+        their natural order.  cs_dmperm modified so that columns of each block
+        (instead of rows) are placed in their natural order.
 
     * cs_splsolve renamed cs_spsolve, generalized to handle both Lx=b and
-	Ux=b, and non-unit diagonal, and placed in its own file (cs_spsolve.c;
-	it was a static function in cs_lu.c).  cs_lsolve_mex.c and
-	cs_splsolve_mex.c merged (the latter was removed).  cs_spsolve.c file
-	added
+        Ux=b, and non-unit diagonal, and placed in its own file (cs_spsolve.c;
+        it was a static function in cs_lu.c).  cs_lsolve_mex.c and
+        cs_splsolve_mex.c merged (the latter was removed).  cs_spsolve.c file
+        added
 
     * cs_dmspy changed, so that block borders line up better with the matrix.
 
 Mar 6, 2006:
 
     * Makefile modified so that the Tcov tests (which may not be portable)
-	are not compiled and run by the default "make" in the CSparse directory.
-	To compile everything, including the Tcov tests, use "make all".
-	Trivial change to cs.h.
+        are not compiled and run by the default "make" in the CSparse directory.
+        To compile everything, including the Tcov tests, use "make all".
+        Trivial change to cs.h.
 
 Feb 27, 2006:
 
     * cs_reach, cs_dfs, cs_splsolve, cs_lu, and cs_scc changed to remove O(n)
-	initialized workspace.
+        initialized workspace.
     * cs_reach and cs_splsolve now user-callable (were static in cs_lu.c).
 
 Feb 20, 2006:
diff --git a/CSparse/Doc/License.txt b/CSparse/Doc/License.txt
index 55ff722..23d6f73 100644
--- a/CSparse/Doc/License.txt
+++ b/CSparse/Doc/License.txt
@@ -1,6 +1,6 @@
 CSparse: a Concise Sparse matrix package.
 Copyright (c) 2006, Timothy A. Davis.
-http://www.cise.ufl.edu/research/sparse/CSparse
+http://www.suitesparse.com
 
 --------------------------------------------------------------------------------
 
diff --git a/CSparse/Doc/lesser.txt b/CSparse/Doc/lesser.txt
index 8add30a..783bd5e 100644
--- a/CSparse/Doc/lesser.txt
+++ b/CSparse/Doc/lesser.txt
@@ -1,5 +1,5 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
 
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
      51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
@@ -10,7 +10,7 @@
  as the successor of the GNU Library Public License, version 2, hence
  the version number 2.1.]
 
-			    Preamble
+                            Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -112,7 +112,7 @@ modification follow.  Pay close attention to the difference between a
 former contains code derived from the library, whereas the latter must
 be combined with the library in order to run.
 

-		  GNU LESSER GENERAL PUBLIC LICENSE
+                  GNU LESSER GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License Agreement applies to any software library or other
@@ -432,7 +432,7 @@ decision will be guided by the two goals of preserving the free status
 of all derivatives of our free software and of promoting the sharing
 and reuse of software generally.
 
-			    NO WARRANTY
+                            NO WARRANTY
 
   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
@@ -455,7 +455,7 @@ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+                     END OF TERMS AND CONDITIONS
 

            How to Apply These Terms to Your New Libraries
 
diff --git a/CSparse/Include/cs.h b/CSparse/Include/cs.h
index 39b2a89..acc738a 100644
--- a/CSparse/Include/cs.h
+++ b/CSparse/Include/cs.h
@@ -4,133 +4,142 @@
 #include <limits.h>
 #include <math.h>
 #include <stdio.h>
+#include <stddef.h>
 #ifdef MATLAB_MEX_FILE
 #include "mex.h"
 #endif
-#define CS_VER 2		    /* CSparse Version 2.2.1 */
-#define CS_SUBVER 2
-#define CS_SUBSUB 1
-#define CS_DATE "Nov 1, 2007"	    /* CSparse release date */
-#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2007"
+#define CS_VER 3                    /* CSparse Version */
+#define CS_SUBVER 1
+#define CS_SUBSUB 4
+#define CS_DATE "Oct 10, 2014"    /* CSparse release date */
+#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2014"
+
+#ifdef MATLAB_MEX_FILE
+#undef csi
+#define csi mwSignedIndex
+#endif
+#ifndef csi
+#define csi ptrdiff_t
+#endif
 
 /* --- primary CSparse routines and data structures ------------------------- */
 typedef struct cs_sparse    /* matrix in compressed-column or triplet form */
 {
-    int nzmax ;	    /* maximum number of entries */
-    int m ;	    /* number of rows */
-    int n ;	    /* number of columns */
-    int *p ;	    /* column pointers (size n+1) or col indices (size nzmax) */
-    int *i ;	    /* row indices, size nzmax */
-    double *x ;	    /* numerical values, size nzmax */
-    int nz ;	    /* # of entries in triplet matrix, -1 for compressed-col */
+    csi nzmax ;     /* maximum number of entries */
+    csi m ;         /* number of rows */
+    csi n ;         /* number of columns */
+    csi *p ;        /* column pointers (size n+1) or col indices (size nzmax) */
+    csi *i ;        /* row indices, size nzmax */
+    double *x ;     /* numerical values, size nzmax */
+    csi nz ;        /* # of entries in triplet matrix, -1 for compressed-col */
 } cs ;
 
 cs *cs_add (const cs *A, const cs *B, double alpha, double beta) ;
-int cs_cholsol (int order, const cs *A, double *b) ;
+csi cs_cholsol (csi order, const cs *A, double *b) ;
 cs *cs_compress (const cs *T) ;
-int cs_dupl (cs *A) ;
-int cs_entry (cs *T, int i, int j, double x) ;
-int cs_gaxpy (const cs *A, const double *x, double *y) ;
+csi cs_dupl (cs *A) ;
+csi cs_entry (cs *T, csi i, csi j, double x) ;
+csi cs_gaxpy (const cs *A, const double *x, double *y) ;
 cs *cs_load (FILE *f) ;
-int cs_lusol (int order, const cs *A, double *b, double tol) ;
+csi cs_lusol (csi order, const cs *A, double *b, double tol) ;
 cs *cs_multiply (const cs *A, const cs *B) ;
 double cs_norm (const cs *A) ;
-int cs_print (const cs *A, int brief) ;
-int cs_qrsol (int order, const cs *A, double *b) ;
-cs *cs_transpose (const cs *A, int values) ;
+csi cs_print (const cs *A, csi brief) ;
+csi cs_qrsol (csi order, const cs *A, double *b) ;
+cs *cs_transpose (const cs *A, csi values) ;
 /* utilities */
-void *cs_calloc (int n, size_t size) ;
+void *cs_calloc (csi n, size_t size) ;
 void *cs_free (void *p) ;
-void *cs_realloc (void *p, int n, size_t size, int *ok) ;
-cs *cs_spalloc (int m, int n, int nzmax, int values, int triplet) ;
+void *cs_realloc (void *p, csi n, size_t size, csi *ok) ;
+cs *cs_spalloc (csi m, csi n, csi nzmax, csi values, csi triplet) ;
 cs *cs_spfree (cs *A) ;
-int cs_sprealloc (cs *A, int nzmax) ;
-void *cs_malloc (int n, size_t size) ;
+csi cs_sprealloc (cs *A, csi nzmax) ;
+void *cs_malloc (csi n, size_t size) ;
 
 /* --- secondary CSparse routines and data structures ----------------------- */
 typedef struct cs_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    int *pinv ;	    /* inverse row perm. for QR, fill red. perm for Chol */
-    int *q ;	    /* fill-reducing column permutation for LU and QR */
-    int *parent ;   /* elimination tree for Cholesky and QR */
-    int *cp ;	    /* column pointers for Cholesky, row counts for QR */
-    int *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
-    int m2 ;	    /* # of rows for QR, after adding fictitious rows */
+    csi *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    csi *q ;        /* fill-reducing column permutation for LU and QR */
+    csi *parent ;   /* elimination tree for Cholesky and QR */
+    csi *cp ;       /* column pointers for Cholesky, row counts for QR */
+    csi *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
+    csi m2 ;        /* # of rows for QR, after adding fictitious rows */
     double lnz ;    /* # entries in L for LU or Cholesky; in V for QR */
     double unz ;    /* # entries in U for LU; in R for QR */
 } css ;
 
 typedef struct cs_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs *L ;	    /* L for LU and Cholesky, V for QR */
-    cs *U ;	    /* U for LU, R for QR, not used for Cholesky */
-    int *pinv ;	    /* partial pivoting for LU */
-    double *B ;	    /* beta [0..n-1] for QR */
+    cs *L ;         /* L for LU and Cholesky, V for QR */
+    cs *U ;         /* U for LU, R for QR, not used for Cholesky */
+    csi *pinv ;     /* partial pivoting for LU */
+    double *B ;     /* beta [0..n-1] for QR */
 } csn ;
 
 typedef struct cs_dmperm_results    /* cs_dmperm or cs_scc output */
 {
-    int *p ;	    /* size m, row permutation */
-    int *q ;	    /* size n, column permutation */
-    int *r ;	    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    int *s ;	    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    int nb ;	    /* # of blocks in fine dmperm decomposition */
-    int rr [5] ;    /* coarse row decomposition */
-    int cc [5] ;    /* coarse column decomposition */
+    csi *p ;        /* size m, row permutation */
+    csi *q ;        /* size n, column permutation */
+    csi *r ;        /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    csi *s ;        /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    csi nb ;        /* # of blocks in fine dmperm decomposition */
+    csi rr [5] ;    /* coarse row decomposition */
+    csi cc [5] ;    /* coarse column decomposition */
 } csd ;
 
-int *cs_amd (int order, const cs *A) ;
+csi *cs_amd (csi order, const cs *A) ;
 csn *cs_chol (const cs *A, const css *S) ;
-csd *cs_dmperm (const cs *A, int seed) ;
-int cs_droptol (cs *A, double tol) ;
-int cs_dropzeros (cs *A) ;
-int cs_happly (const cs *V, int i, double beta, double *x) ;
-int cs_ipvec (const int *p, const double *b, double *x, int n) ;
-int cs_lsolve (const cs *L, double *x) ;
-int cs_ltsolve (const cs *L, double *x) ;
+csd *cs_dmperm (const cs *A, csi seed) ;
+csi cs_droptol (cs *A, double tol) ;
+csi cs_dropzeros (cs *A) ;
+csi cs_happly (const cs *V, csi i, double beta, double *x) ;
+csi cs_ipvec (const csi *p, const double *b, double *x, csi n) ;
+csi cs_lsolve (const cs *L, double *x) ;
+csi cs_ltsolve (const cs *L, double *x) ;
 csn *cs_lu (const cs *A, const css *S, double tol) ;
-cs *cs_permute (const cs *A, const int *pinv, const int *q, int values) ;
-int *cs_pinv (const int *p, int n) ;
-int cs_pvec (const int *p, const double *b, double *x, int n) ;
+cs *cs_permute (const cs *A, const csi *pinv, const csi *q, csi values) ;
+csi *cs_pinv (const csi *p, csi n) ;
+csi cs_pvec (const csi *p, const double *b, double *x, csi n) ;
 csn *cs_qr (const cs *A, const css *S) ;
-css *cs_schol (int order, const cs *A) ;
-css *cs_sqr (int order, const cs *A, int qr) ;
-cs *cs_symperm (const cs *A, const int *pinv, int values) ;
-int cs_updown (cs *L, int sigma, const cs *C, const int *parent) ;
-int cs_usolve (const cs *U, double *x) ;
-int cs_utsolve (const cs *U, double *x) ;
+css *cs_schol (csi order, const cs *A) ;
+css *cs_sqr (csi order, const cs *A, csi qr) ;
+cs *cs_symperm (const cs *A, const csi *pinv, csi values) ;
+csi cs_updown (cs *L, csi sigma, const cs *C, const csi *parent) ;
+csi cs_usolve (const cs *U, double *x) ;
+csi cs_utsolve (const cs *U, double *x) ;
 /* utilities */
 css *cs_sfree (css *S) ;
 csn *cs_nfree (csn *N) ;
 csd *cs_dfree (csd *D) ;
 
 /* --- tertiary CSparse routines -------------------------------------------- */
-int *cs_counts (const cs *A, const int *parent, const int *post, int ata) ;
-double cs_cumsum (int *p, int *c, int n) ;
-int cs_dfs (int j, cs *G, int top, int *xi, int *pstack, const int *pinv) ;
-int cs_ereach (const cs *A, int k, const int *parent, int *s, int *w) ;
-int *cs_etree (const cs *A, int ata) ;
-int cs_fkeep (cs *A, int (*fkeep) (int, int, double, void *), void *other) ;
-double cs_house (double *x, double *beta, int n) ;
-int cs_leaf (int i, int j, const int *first, int *maxfirst, int *prevleaf,
-    int *ancestor, int *jleaf) ;
-int *cs_maxtrans (const cs *A, int seed) ;
-int *cs_post (const int *parent, int n) ;
-int *cs_randperm (int n, int seed) ;
-int cs_reach (cs *G, const cs *B, int k, int *xi, const int *pinv) ;
-int cs_scatter (const cs *A, int j, double beta, int *w, double *x, int mark,
-    cs *C, int nz) ;
+csi *cs_counts (const cs *A, const csi *parent, const csi *post, csi ata) ;
+double cs_cumsum (csi *p, csi *c, csi n) ;
+csi cs_dfs (csi j, cs *G, csi top, csi *xi, csi *pstack, const csi *pinv) ;
+csi cs_ereach (const cs *A, csi k, const csi *parent, csi *s, csi *w) ;
+csi *cs_etree (const cs *A, csi ata) ;
+csi cs_fkeep (cs *A, csi (*fkeep) (csi, csi, double, void *), void *other) ;
+double cs_house (double *x, double *beta, csi n) ;
+csi cs_leaf (csi i, csi j, const csi *first, csi *maxfirst, csi *prevleaf,
+    csi *ancestor, csi *jleaf) ;
+csi *cs_maxtrans (const cs *A, csi seed) ;
+csi *cs_post (const csi *parent, csi n) ;
+csi *cs_randperm (csi n, csi seed) ;
+csi cs_reach (cs *G, const cs *B, csi k, csi *xi, const csi *pinv) ;
+csi cs_scatter (const cs *A, csi j, double beta, csi *w, double *x, csi mark,
+    cs *C, csi nz) ;
 csd *cs_scc (cs *A) ;
-int cs_spsolve (cs *G, const cs *B, int k, int *xi, double *x,
-    const int *pinv, int lo) ;
-int cs_tdfs (int j, int k, int *head, const int *next, int *post,
-    int *stack) ;
+csi cs_spsolve (cs *G, const cs *B, csi k, csi *xi, double *x,
+    const csi *pinv, csi lo) ;
+csi cs_tdfs (csi j, csi k, csi *head, const csi *next, csi *post,
+    csi *stack) ;
 /* utilities */
-csd *cs_dalloc (int m, int n) ;
-csd *cs_ddone (csd *D, cs *C, void *w, int ok) ;
-cs *cs_done (cs *C, void *w, void *x, int ok) ;
-int *cs_idone (int *p, cs *C, void *w, int ok) ;
-csn *cs_ndone (csn *N, cs *C, void *w, void *x, int ok) ;
+csd *cs_dalloc (csi m, csi n) ;
+csd *cs_ddone (csd *D, cs *C, void *w, csi ok) ;
+cs *cs_done (cs *C, void *w, void *x, csi ok) ;
+csi *cs_idone (csi *p, cs *C, void *w, csi ok) ;
+csn *cs_ndone (csn *N, cs *C, void *w, void *x, csi ok) ;
 
 #define CS_MAX(a,b) (((a) > (b)) ? (a) : (b))
 #define CS_MIN(a,b) (((a) < (b)) ? (a) : (b))
diff --git a/CSparse/Lib/Makefile b/CSparse/Lib/Makefile
index 435e15f..2a86ef4 100644
--- a/CSparse/Lib/Makefile
+++ b/CSparse/Lib/Makefile
@@ -1,9 +1,7 @@
-# Modify the "-O" optimization option for best performance (-O3 on Linux):
-CC = cc
-CFLAGS = -O -I../Include
-
-AR = ar cr
+CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O
+I = -I../Include
 RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
 
 all: libcsparse.a
 
@@ -20,16 +18,16 @@ CS = cs_add.o cs_amd.o cs_chol.o cs_cholsol.o cs_counts.o cs_cumsum.o \
 $(CS): ../Include/cs.h Makefile
 
 %.o: ../Source/%.c ../Include/cs.h
-	$(CC) $(CFLAGS) -c $<
+	$(CC) $(CF) $(I) -c $<
 
 libcsparse.a: $(CS)
-	$(AR) libcsparse.a $(CS)
-	$(RANLIB) libcsparse.a
+	$(ARCHIVE)  libcsparse.a $(CS)
+	- $(RANLIB) libcsparse.a
 
 clean:
-	rm -f *.o
+	- $(RM) *.o
 
 purge: distclean
 
 distclean: clean
-	rm -f *.a
+	- $(RM) *.a *.obj *.dll
diff --git a/CSparse/MATLAB/CSparse/Contents.m b/CSparse/MATLAB/CSparse/Contents.m
index e2d0b0e..d21f46d 100644
--- a/CSparse/MATLAB/CSparse/Contents.m
+++ b/CSparse/MATLAB/CSparse/Contents.m
@@ -46,8 +46,7 @@
 % Example:
 %   help cs_add
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 % helper function:
 %   cs_must_compile - return 1 if source code f must be compiled, 0 otherwise
diff --git a/CSparse/MATLAB/CSparse/Makefile b/CSparse/MATLAB/CSparse/Makefile
deleted file mode 100644
index 34c8301..0000000
--- a/CSparse/MATLAB/CSparse/Makefile
+++ /dev/null
@@ -1,259 +0,0 @@
-MEX = mex -O
-AR = ar cr
-RANLIB = ranlib
-
-I = -I../../Include
-
-all: mexcsparse.a cs_mex.h
-	$(MEX) cs_thumb_mex.c $(I) mexcsparse.a -output cs_thumb
-	$(MEX) cs_print_mex.c $(I) mexcsparse.a -output cs_print
-	$(MEX) cs_updown_mex.c $(I) mexcsparse.a -output cs_updown
-	$(MEX) cs_gaxpy_mex.c $(I) mexcsparse.a -output cs_gaxpy
-	$(MEX) cs_transpose_mex.c $(I) mexcsparse.a -output cs_transpose
-	$(MEX) cs_sparse_mex.c $(I) mexcsparse.a -output cs_sparse
-	$(MEX) cs_multiply_mex.c $(I) mexcsparse.a -output cs_multiply
-	$(MEX) cs_add_mex.c $(I) mexcsparse.a -output cs_add
-	$(MEX) cs_permute_mex.c $(I) mexcsparse.a -output cs_permute
-	$(MEX) cs_symperm_mex.c $(I) mexcsparse.a -output cs_symperm
-	$(MEX) cs_lsolve_mex.c $(I) mexcsparse.a -output cs_lsolve
-	$(MEX) cs_ltsolve_mex.c $(I) mexcsparse.a -output cs_ltsolve
-	$(MEX) cs_usolve_mex.c $(I) mexcsparse.a -output cs_usolve
-	$(MEX) cs_utsolve_mex.c $(I) mexcsparse.a -output cs_utsolve
-	$(MEX) cs_chol_mex.c $(I) mexcsparse.a -output cs_chol
-	$(MEX) cs_etree_mex.c $(I) mexcsparse.a -output cs_etree
-	$(MEX) cs_counts_mex.c $(I) mexcsparse.a -output cs_counts
-	$(MEX) cs_qr_mex.c $(I) mexcsparse.a -output cs_qr
-	$(MEX) cs_amd_mex.c $(I) mexcsparse.a -output cs_amd
-	$(MEX) cs_lu_mex.c $(I) mexcsparse.a -output cs_lu
-	$(MEX) cs_cholsol_mex.c $(I) mexcsparse.a -output cs_cholsol
-	$(MEX) cs_lusol_mex.c $(I) mexcsparse.a -output cs_lusol
-	$(MEX) cs_droptol_mex.c $(I) mexcsparse.a -output cs_droptol
-	$(MEX) cs_qrsol_mex.c $(I) mexcsparse.a -output cs_qrsol
-	$(MEX) cs_dmperm_mex.c $(I) mexcsparse.a -output cs_dmperm
-	$(MEX) cs_scc_mex.c $(I) mexcsparse.a -output cs_scc
-	$(MEX) cs_sqr_mex.c $(I) mexcsparse.a -output cs_sqr
-	$(MEX) cs_randperm_mex.c $(I) mexcsparse.a -output cs_randperm
-
-CS = cs_mex.o \
-	cs_amd.o \
-	cs_chol.o \
-	cs_counts.o \
-	cs_cumsum.o \
-	cs_fkeep.o \
-	cs_dfs.o \
-	cs_dmperm.o \
-	cs_droptol.o \
-	cs_dropzeros.o \
-	cs_dupl.o \
-	cs_entry.o \
-	cs_etree.o \
-	cs_gaxpy.o \
-	cs_ipvec.o \
-	cs_lsolve.o \
-	cs_ltsolve.o \
-	cs_lu.o \
-	cs_maxtrans.o \
-	cs_util.o \
-	cs_malloc.o \
-	cs_multiply.o \
-	cs_add.o \
-	cs_scatter.o \
-	cs_permute.o \
-	cs_pinv.o \
-	cs_post.o \
-	cs_tdfs.o \
-	cs_pvec.o \
-	cs_qr.o \
-	cs_happly.o \
-	cs_house.o \
-	cs_schol.o \
-	cs_scc.o \
-	cs_sqr.o \
-	cs_symperm.o \
-	cs_transpose.o \
-	cs_compress.o \
-	cs_usolve.o \
-	cs_utsolve.o \
-	cs_cholsol.o \
-	cs_lusol.o \
-	cs_qrsol.o \
-	cs_updown.o \
-	cs_norm.o \
-	cs_print.o \
-	cs_load.o \
-	cs_spsolve.o \
-	cs_reach.o \
-	cs_ereach.o \
-	cs_leaf.o \
-	cs_randperm.o
-
-mexcsparse.a: $(CS)
-	$(AR) mexcsparse.a $(CS)
-	$(RANLIB) mexcsparse.a
-
-$(CS): ../../Include/cs.h
-
-
-cs_mex.o: cs_mex.c cs_mex.h
-	$(MEX) -c $(I) $<
-
-cs_amd.o: ../../Source/cs_amd.c
-	$(MEX) -c $(I) $<
-
-cs_chol.o: ../../Source/cs_chol.c
-	$(MEX) -c $(I) $<
-
-cs_ereach.o: ../../Source/cs_ereach.c
-	$(MEX) -c $(I) $<
-
-cs_cholsol.o: ../../Source/cs_cholsol.c
-	$(MEX) -c $(I) $<
-
-cs_lusol.o: ../../Source/cs_lusol.c
-	$(MEX) -c $(I) $<
-
-cs_qrsol.o: ../../Source/cs_qrsol.c
-	$(MEX) -c $(I) $<
-
-cs_counts.o: ../../Source/cs_counts.c
-	$(MEX) -c $(I) $<
-
-cs_leaf.o: ../../Source/cs_leaf.c
-	$(MEX) -c $(I) $<
-
-cs_cumsum.o: ../../Source/cs_cumsum.c
-	$(MEX) -c $(I) $<
-
-cs_fkeep.o: ../../Source/cs_fkeep.c
-	$(MEX) -c $(I) $<
-
-cs_dfs.o: ../../Source/cs_dfs.c
-	$(MEX) -c $(I) $<
-
-cs_droptol.o: ../../Source/cs_droptol.c
-	$(MEX) -c $(I) $<
-
-cs_dropzeros.o: ../../Source/cs_dropzeros.c
-	$(MEX) -c $(I) $<
-
-cs_dupl.o: ../../Source/cs_dupl.c
-	$(MEX) -c $(I) $<
-
-cs_entry.o: ../../Source/cs_entry.c
-	$(MEX) -c $(I) $<
-
-cs_etree.o: ../../Source/cs_etree.c
-	$(MEX) -c $(I) $<
-
-cs_gaxpy.o: ../../Source/cs_gaxpy.c
-	$(MEX) -c $(I) $<
-
-cs_ipvec.o: ../../Source/cs_ipvec.c
-	$(MEX) -c $(I) $<
-
-cs_lsolve.o: ../../Source/cs_lsolve.c
-	$(MEX) -c $(I) $<
-
-cs_ltsolve.o: ../../Source/cs_ltsolve.c
-	$(MEX) -c $(I) $<
-
-cs_lu.o: ../../Source/cs_lu.c
-	$(MEX) -c $(I) $<
-
-cs_util.o: ../../Source/cs_util.c
-	$(MEX) -c $(I) $<
-
-cs_malloc.o: ../../Source/cs_malloc.c
-	$(MEX) -c $(I) $<
-
-cs_multiply.o: ../../Source/cs_multiply.c
-	$(MEX) -c $(I) $<
-
-cs_add.o: ../../Source/cs_add.c
-	$(MEX) -c $(I) $<
-
-cs_scatter.o: ../../Source/cs_scatter.c
-	$(MEX) -c $(I) $<
-
-cs_permute.o: ../../Source/cs_permute.c
-	$(MEX) -c $(I) $<
-
-cs_pinv.o: ../../Source/cs_pinv.c
-	$(MEX) -c $(I) $<
-
-cs_post.o: ../../Source/cs_post.c
-	$(MEX) -c $(I) $<
-
-cs_tdfs.o: ../../Source/cs_tdfs.c
-	$(MEX) -c $(I) $<
-
-cs_pvec.o: ../../Source/cs_pvec.c
-	$(MEX) -c $(I) $<
-
-cs_qr.o: ../../Source/cs_qr.c
-	$(MEX) -c $(I) $<
-
-cs_happly.o: ../../Source/cs_happly.c
-	$(MEX) -c $(I) $<
-
-cs_house.o: ../../Source/cs_house.c
-	$(MEX) -c $(I) $<
-
-cs_schol.o: ../../Source/cs_schol.c
-	$(MEX) -c $(I) $<
-
-cs_spsolve.o: ../../Source/cs_spsolve.c
-	$(MEX) -c $(I) $<
-
-cs_reach.o: ../../Source/cs_reach.c
-	$(MEX) -c $(I) $<
-
-cs_sqr.o: ../../Source/cs_sqr.c
-	$(MEX) -c $(I) $<
-
-cs_symperm.o: ../../Source/cs_symperm.c
-	$(MEX) -c $(I) $<
-
-cs_transpose.o: ../../Source/cs_transpose.c
-	$(MEX) -c $(I) $<
-
-cs_compress.o: ../../Source/cs_compress.c
-	$(MEX) -c $(I) $<
-
-cs_usolve.o: ../../Source/cs_usolve.c
-	$(MEX) -c $(I) $<
-
-cs_utsolve.o: ../../Source/cs_utsolve.c
-	$(MEX) -c $(I) $<
-
-cs_dmperm.o: ../../Source/cs_dmperm.c
-	$(MEX) -c $(I) $<
-
-cs_randperm.o: ../../Source/cs_randperm.c
-	$(MEX) -c $(I) $<
-
-cs_maxtrans.o: ../../Source/cs_maxtrans.c
-	$(MEX) -c $(I) $<
-
-cs_scc.o: ../../Source/cs_scc.c
-	$(MEX) -c $(I) $<
-
-cs_updown.o: ../../Source/cs_updown.c
-	$(MEX) -c $(I) $<
-
-cs_print.o: ../../Source/cs_print.c
-	$(MEX) -c $(I) $<
-
-cs_norm.o: ../../Source/cs_norm.c
-	$(MEX) -c $(I) $<
-
-cs_load.o: ../../Source/cs_load.c
-	$(MEX) -c $(I) $<
-
-clean:
-	rm -f *.o
-
-distclean: clean
-	rm -f *.mex* *.dll *.a
-
-purge: distclean
diff --git a/CSparse/MATLAB/CSparse/README.txt b/CSparse/MATLAB/CSparse/README.txt
index 7c97060..5d7172b 100644
--- a/CSparse/MATLAB/CSparse/README.txt
+++ b/CSparse/MATLAB/CSparse/README.txt
@@ -1 +1,3 @@
 MATLAB interface for CSparse.  See Contents.m for details.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CSparse/MATLAB/CSparse/ccspy.m b/CSparse/MATLAB/CSparse/ccspy.m
index 787eada..f7196dc 100644
--- a/CSparse/MATLAB/CSparse/ccspy.m
+++ b/CSparse/MATLAB/CSparse/ccspy.m
@@ -20,8 +20,7 @@ function [p, q, r, s] = ccspy (A, bipartite, res)
 %
 %   See also CSPY, CS_DMPERM, DMPERM, CS_SCC, CS_SCC2, CS_DMSPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (~issparse (A))
     A = sparse (A) ;
diff --git a/CSparse/MATLAB/CSparse/cs_add.m b/CSparse/MATLAB/CSparse/cs_add.m
index f85c562..21b4703 100644
--- a/CSparse/MATLAB/CSparse/cs_add.m
+++ b/CSparse/MATLAB/CSparse/cs_add.m
@@ -1,4 +1,4 @@
-function C = cs_add (A,B,alpha,beta)					    %#ok
+function C = cs_add (A,B,alpha,beta)                                        %#ok
 %CS_ADD sparse matrix addition.
 %   C = cs_add(A,B,alpha,beta) computes C = alpha*A+beta*B,
 %   where alpha and beta default to 1 if not present.
@@ -11,7 +11,6 @@ function C = cs_add (A,B,alpha,beta)					    %#ok
 %
 %   See also CS_MULTIPLY, CS_GAXPY, PLUS, MINUS.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_add mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_add_mex.c b/CSparse/MATLAB/CSparse/cs_add_mex.c
index 4bb778a..f4bac35 100644
--- a/CSparse/MATLAB/CSparse/cs_add_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_add_mex.c
@@ -12,17 +12,17 @@ void mexFunction
     cs Amatrix, Bmatrix, *A, *B, *C, *D ;
     if (nargout > 1 || nargin < 2 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: C = cs_add(A,B,alpha,beta)") ;
+        mexErrMsgTxt ("Usage: C = cs_add(A,B,alpha,beta)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
     B = cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;    /* get B */
     alpha = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;   /* get alpha */
     beta  = (nargin < 4) ? 1 : mxGetScalar (pargin [3]) ;   /* get beta */
-    C = cs_add (A,B,alpha,beta) ;	/* C = alpha*A + beta *B */
-    cs_dropzeros (C) ;			/* drop zeros */
-    D = cs_transpose (C, 1) ;		/* sort result via double transpose */
+    C = cs_add (A,B,alpha,beta) ;       /* C = alpha*A + beta *B */
+    cs_dropzeros (C) ;                  /* drop zeros */
+    D = cs_transpose (C, 1) ;           /* sort result via double transpose */
     cs_spfree (C) ;
     C = cs_transpose (D, 1) ;
     cs_spfree (D) ;
-    pargout [0] = cs_mex_put_sparse (&C) ;	/* return C */
+    pargout [0] = cs_mex_put_sparse (&C) ;      /* return C */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_amd.m b/CSparse/MATLAB/CSparse/cs_amd.m
index b8a3ec9..d3b9874 100644
--- a/CSparse/MATLAB/CSparse/cs_amd.m
+++ b/CSparse/MATLAB/CSparse/cs_amd.m
@@ -1,4 +1,4 @@
-function p = cs_amd (A,order)						    %#ok
+function p = cs_amd (A,order)                                               %#ok
 %CS_AMD approximate minimum degree ordering.
 %   p = cs_amd(A) finds a minimum degree ordering of A+A'
 %   p = cs_amd(A,order):
@@ -19,7 +19,6 @@ function p = cs_amd (A,order)						    %#ok
 %
 %   See also AMD, COLAMD, SYMAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_amd mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_amd_mex.c b/CSparse/MATLAB/CSparse/cs_amd_mex.c
index 896a4ca..136e646 100644
--- a/CSparse/MATLAB/CSparse/cs_amd_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_amd_mex.c
@@ -9,15 +9,15 @@ void mexFunction
 )
 {
     cs Amatrix, *A ;
-    int *P, order ;
+    csi *P, order ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: p = cs_amd(A,order)") ;
+        mexErrMsgTxt ("Usage: p = cs_amd(A,order)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;    /* get A */
     order = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;   /* get ordering */
     order = CS_MAX (order, 1) ;
     order = CS_MIN (order, 3) ;
-    P = cs_amd (order, A) ;			    /* min. degree ordering */
+    P = cs_amd (order, A) ;                         /* min. degree ordering */
     pargout [0] = cs_mex_put_int (P, A->n, 1, 1) ;  /* return P */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_chol.m b/CSparse/MATLAB/CSparse/cs_chol.m
index b31c003..2b4ff9a 100644
--- a/CSparse/MATLAB/CSparse/cs_chol.m
+++ b/CSparse/MATLAB/CSparse/cs_chol.m
@@ -1,4 +1,4 @@
-function [L,p] = cs_chol (A,drop)					    %#ok
+function [L,p] = cs_chol (A,drop)                                           %#ok
 %CS_CHOL sparse Cholesky factorization.
 %   L = cs_chol(A) is the same as L = chol(A)', using triu(A).
 %   [L,p] = cs_chol(A) first orders A with p=cs_amd(A), so that L*L' = A(p,p).
@@ -13,7 +13,6 @@ function [L,p] = cs_chol (A,drop)					    %#ok
 %
 %   See also CS_AMD, CS_UPDOWN, CHOL, AMD, SYMAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_chol mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_chol_mex.c b/CSparse/MATLAB/CSparse/cs_chol_mex.c
index 9f3d61c..6fe1797 100644
--- a/CSparse/MATLAB/CSparse/cs_chol_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_chol_mex.c
@@ -4,24 +4,24 @@ void mexFunction (int nargout, mxArray *pargout [ ], int nargin,
     const mxArray *pargin [ ])
 {
     cs Amatrix, *A ;
-    int order, n, drop, *p ;
+    csi order, n, drop, *p ;
     css *S ;
     csn *N ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
-	mexErrMsgTxt ("Usage: [L,p] = cs_chol(A,drop)") ;
-    A = cs_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
+        mexErrMsgTxt ("Usage: [L,p] = cs_chol(A,drop)") ;
+    A = cs_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;        /* get A */
     n = A->n ;
-    order = (nargout > 1) ? 1 : 0 ;		    /* determine ordering */
-    S = cs_schol (order, A) ;			    /* symbolic Cholesky */
-    N = cs_chol (A, S) ;			    /* numeric Cholesky */
+    order = (nargout > 1) ? 1 : 0 ;                 /* determine ordering */
+    S = cs_schol (order, A) ;                       /* symbolic Cholesky */
+    N = cs_chol (A, S) ;                            /* numeric Cholesky */
     if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
     drop = (nargin == 1) ? 1 : mxGetScalar (pargin [1]) ;
-    if (drop) cs_dropzeros (N->L) ;		    /* drop zeros if requested*/
-    pargout [0] = cs_mex_put_sparse (&(N->L)) ;	    /* return L */
+    if (drop) cs_dropzeros (N->L) ;                 /* drop zeros if requested*/
+    pargout [0] = cs_mex_put_sparse (&(N->L)) ;     /* return L */
     if (nargout > 1)
     {
-	p = cs_pinv (S->pinv, n) ;		    /* p=pinv' */
-	pargout [1] = cs_mex_put_int (p, n, 1, 1) ; /* return p */
+        p = cs_pinv (S->pinv, n) ;                  /* p=pinv' */
+        pargout [1] = cs_mex_put_int (p, n, 1, 1) ; /* return p */
     }
     cs_nfree (N) ;
     cs_sfree (S) ;
diff --git a/CSparse/MATLAB/CSparse/cs_cholsol.m b/CSparse/MATLAB/CSparse/cs_cholsol.m
index 7717222..84b6b6e 100644
--- a/CSparse/MATLAB/CSparse/cs_cholsol.m
+++ b/CSparse/MATLAB/CSparse/cs_cholsol.m
@@ -1,4 +1,4 @@
-function x = cs_cholsol (A,b,order)					    %#ok
+function x = cs_cholsol (A,b,order)                                         %#ok
 %CS_CHOLSOL solve A*x=b using a sparse Cholesky factorization.
 %   x = cs_cholsol(A,b) computes x = A\b, where A sparse symmetric positive
 %   definite, and b is a full vector.  A 3rd input parameter allows the
@@ -11,7 +11,6 @@ function x = cs_cholsol (A,b,order)					    %#ok
 %
 %   See also CS_CHOL, CS_AMD, CS_LUSOL, CS_QRSOL, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_cholsol mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_cholsol_mex.c b/CSparse/MATLAB/CSparse/cs_cholsol_mex.c
index a5360ef..4127254 100644
--- a/CSparse/MATLAB/CSparse/cs_cholsol_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_cholsol_mex.c
@@ -10,19 +10,19 @@ void mexFunction
 {
     cs *A, Amatrix ;
     double *x, *b ;
-    int order ;
+    csi order ;
     if (nargout > 1 || nargin < 2 || nargin > 3)
     {
-	mexErrMsgTxt ("Usage: x = cs_cholsol(A,b,order)") ;
+        mexErrMsgTxt ("Usage: x = cs_cholsol(A,b,order)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;    /* get A */
-    b = cs_mex_get_double (A->n, pargin [1]) ;		    /* get b */
-    x = cs_mex_put_double (A->n, b, &(pargout [0])) ;	    /* x = b */
+    b = cs_mex_get_double (A->n, pargin [1]) ;              /* get b */
+    x = cs_mex_put_double (A->n, b, &(pargout [0])) ;       /* x = b */
     order = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
     order = CS_MIN (order, 3) ;
-    if (!cs_cholsol (order, A, x))			    /* x = A\x */
+    if (!cs_cholsol (order, A, x))                          /* x = A\x */
     {
-	mexErrMsgTxt ("A not positive definite") ;
+        mexErrMsgTxt ("A not positive definite") ;
     }
 }
diff --git a/CSparse/MATLAB/CSparse/cs_counts.m b/CSparse/MATLAB/CSparse/cs_counts.m
index 6d6a879..e1f4f04 100644
--- a/CSparse/MATLAB/CSparse/cs_counts.m
+++ b/CSparse/MATLAB/CSparse/cs_counts.m
@@ -1,4 +1,4 @@
-function c = cs_counts (A,mode)						    %#ok
+function c = cs_counts (A,mode)                                             %#ok
 %CS_COUNTS column counts for sparse Cholesky factor L.
 %   c = cs_counts(A) returns a vector of the column counts of L, for the
 %   Cholesky factorization L*L' = A.  That is, c = sum(spones(chol(A)')),
@@ -13,7 +13,6 @@ function c = cs_counts (A,mode)						    %#ok
 %
 %   See also SYMBFACT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_counts mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_counts_mex.c b/CSparse/MATLAB/CSparse/cs_counts_mex.c
index 3dcef2c..5b1d745 100644
--- a/CSparse/MATLAB/CSparse/cs_counts_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_counts_mex.c
@@ -9,24 +9,24 @@ void mexFunction
 )
 {
     cs Amatrix, *A ;
-    int n, ata, *parent, *post, *c ;
+    csi n, ata, *parent, *post, *c ;
     char mode [20] ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: c = cs_counts(A,mode)") ;
+        mexErrMsgTxt ("Usage: c = cs_counts(A,mode)") ;
     }
-    ata = 0 ;						/* get mode */
+    ata = 0 ;                                           /* get mode */
     if (nargin > 1 && mxIsChar (pargin [1]))
     {
-	mxGetString (pargin [1], mode, 8) ;
-	ata = (mode [0] == 'c') ;
+        mxGetString (pargin [1], mode, 8) ;
+        ata = (mode [0] == 'c') ;
     }
-    A = cs_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;	/* get A */
+    A = cs_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;     /* get A */
     n = A->n ;
-    parent = cs_etree (A, ata) ;			/* compute etree */
-    post = cs_post (parent, n) ;			/* postorder the etree*/
-    c = cs_counts (A, parent, post, ata) ;		/* get column counts */
-    pargout [0] = cs_mex_put_int (c, n, 0, 1) ;		/* return counts */
+    parent = cs_etree (A, ata) ;                        /* compute etree */
+    post = cs_post (parent, n) ;                        /* postorder the etree*/
+    c = cs_counts (A, parent, post, ata) ;              /* get column counts */
+    pargout [0] = cs_mex_put_int (c, n, 0, 1) ;         /* return counts */
     cs_free (parent) ;
     cs_free (post) ;
 }
diff --git a/CSparse/MATLAB/CSparse/cs_dmperm.m b/CSparse/MATLAB/CSparse/cs_dmperm.m
index e281ec9..8f9420a 100644
--- a/CSparse/MATLAB/CSparse/cs_dmperm.m
+++ b/CSparse/MATLAB/CSparse/cs_dmperm.m
@@ -1,4 +1,4 @@
-function [p,q,r,s,cc,rr] = cs_dmperm (A,seed)				    %#ok
+function [p,q,r,s,cc,rr] = cs_dmperm (A,seed)                               %#ok
 %CS_DMPERM maximum matching or Dulmage-Mendelsohn permutation.
 %   p = cs_dmperm(A) finds a maximum matching p such that p(j) = i if column j
 %   is matched to row i, or 0 if column j is unmatched.  If A is square and
@@ -58,7 +58,6 @@ function [p,q,r,s,cc,rr] = cs_dmperm (A,seed)				    %#ok
 %
 %   See also CS_DMSPY, CS_DMSOL, DMPERM, SPRANK, CS_RANDPERM, RAND
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_dmperm mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_dmperm_mex.c b/CSparse/MATLAB/CSparse/cs_dmperm_mex.c
index 2719aec..f66d015 100644
--- a/CSparse/MATLAB/CSparse/cs_dmperm_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_dmperm_mex.c
@@ -11,31 +11,31 @@ void mexFunction
     double seed ;
     cs *A, Amatrix ;
     csd *D ;
-    int m, n, *jmatch, iseed ;
+    csi m, n, *jmatch, iseed ;
     if (nargin < 1 || nargin > 2 || nargout > 6)
     {
-	mexErrMsgTxt ("Usage: [p,q,r,s,cc,rr] = cs_dmperm (A,seed)") ;
+        mexErrMsgTxt ("Usage: [p,q,r,s,cc,rr] = cs_dmperm (A,seed)") ;
     }
-    seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 0 ;	/* get seed */
+    seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 0 ;        /* get seed */
     iseed = (seed > 0 && seed < 1) ? (seed * RAND_MAX) : seed ;
-    A = cs_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;	/* get A */
+    A = cs_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;        /* get A */
     n = A->n ;
     m = A->m ;
     if (nargout <= 1)
     {
-	jmatch = cs_maxtrans (A, iseed) ;		    /* max. matching */
-	pargout [0] = cs_mex_put_int (jmatch+m, n, 1, 0) ;  /* return imatch */
-	cs_free (jmatch) ;
+        jmatch = cs_maxtrans (A, iseed) ;                   /* max. matching */
+        pargout [0] = cs_mex_put_int (jmatch+m, n, 1, 0) ;  /* return imatch */
+        cs_free (jmatch) ;
     }
     else
     {
-	D = cs_dmperm (A, iseed) ;	/* Dulmage-Mendelsohn decomposition */
-	pargout [0] = cs_mex_put_int (D->p, m, 1, 0) ;
-	pargout [1] = cs_mex_put_int (D->q, n, 1, 0) ;
-	pargout [2] = cs_mex_put_int (D->r, D->nb+1, 1, 0) ;
-	pargout [3] = cs_mex_put_int (D->s, D->nb+1, 1, 0) ;
-	pargout [4] = cs_mex_put_int (D->cc, 5, 1, 0) ;
-	pargout [5] = cs_mex_put_int (D->rr, 5, 1, 0) ;
-	cs_dfree (D) ;
+        D = cs_dmperm (A, iseed) ;      /* Dulmage-Mendelsohn decomposition */
+        pargout [0] = cs_mex_put_int (D->p, m, 1, 0) ;
+        pargout [1] = cs_mex_put_int (D->q, n, 1, 0) ;
+        pargout [2] = cs_mex_put_int (D->r, D->nb+1, 1, 0) ;
+        pargout [3] = cs_mex_put_int (D->s, D->nb+1, 1, 0) ;
+        pargout [4] = cs_mex_put_int (D->cc, 5, 1, 0) ;
+        pargout [5] = cs_mex_put_int (D->rr, 5, 1, 0) ;
+        cs_dfree (D) ;
     }
 }
diff --git a/CSparse/MATLAB/CSparse/cs_dmsol.m b/CSparse/MATLAB/CSparse/cs_dmsol.m
index 32b4b63..cc567c2 100644
--- a/CSparse/MATLAB/CSparse/cs_dmsol.m
+++ b/CSparse/MATLAB/CSparse/cs_dmsol.m
@@ -9,25 +9,24 @@ function x = cs_dmsol (A,b)
 %
 %   See also CS_QRSOL, CS_LUSOL, CS_DMPERM, SPRANK, RANK.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 [p q r s cc rr] = cs_dmperm (A) ;
 C = A (p,q) ;
 b = b (p) ;
 x = zeros (n,1) ;
-if (rr(3) <= m & cc(4) <= n)						    %#ok
+if (rr(3) <= m & cc(4) <= n)                                                %#ok
     x (cc(4):n) = cs_qrsol (C (rr(3):m, cc(4):n), b (rr(3):m)) ;
     b (1:rr(3)-1) = b (1:rr(3)-1) - C (1:rr(3)-1, cc(4):n) * x (cc(4):n) ;
 end
-if (rr(2) < rr (3) & cc(3) < cc(4))					    %#ok
+if (rr(2) < rr (3) & cc(3) < cc(4))                                         %#ok
     x (cc(3):cc(4)-1) = ...
-	cs_lusol (C (rr(2):rr(3)-1, cc(3):cc(4)-1), b (rr(2):rr(3)-1)) ;
+        cs_lusol (C (rr(2):rr(3)-1, cc(3):cc(4)-1), b (rr(2):rr(3)-1)) ;
     b (1:rr(2)-1) = ...
-	b (1:rr(2)-1) - C (1:rr(2)-1, cc(3):cc(4)-1) * x (cc(3):cc(4)-1) ;
+        b (1:rr(2)-1) - C (1:rr(2)-1, cc(3):cc(4)-1) * x (cc(3):cc(4)-1) ;
 end
-if (rr(2) > 1 & cc(3) > 1)						    %#ok
+if (rr(2) > 1 & cc(3) > 1)                                                  %#ok
     x (1:cc(3)-1) = cs_qrsol (C (1:rr(2)-1, 1:cc(3)-1), b (1:rr(2)-1)) ;
 end
 x (q) = x ;
diff --git a/CSparse/MATLAB/CSparse/cs_dmspy.m b/CSparse/MATLAB/CSparse/cs_dmspy.m
index 5539cca..49bc420 100644
--- a/CSparse/MATLAB/CSparse/cs_dmspy.m
+++ b/CSparse/MATLAB/CSparse/cs_dmspy.m
@@ -15,8 +15,7 @@ function [p,q,r,s,cc,rr] = cs_dmspy (A,res,seed)
 %
 %   See also CS_DMPERM, CS_DMSOL, DMPERM, SPRANK, SPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (~issparse (A))
     A = sparse (A) ;
diff --git a/CSparse/MATLAB/CSparse/cs_droptol.m b/CSparse/MATLAB/CSparse/cs_droptol.m
index 83a97ab..1afd309 100644
--- a/CSparse/MATLAB/CSparse/cs_droptol.m
+++ b/CSparse/MATLAB/CSparse/cs_droptol.m
@@ -1,4 +1,4 @@
-function C = cs_droptol (A, tol)					    %#ok
+function C = cs_droptol (A, tol)                                            %#ok
 %CS_DROPTOL remove small entries from a sparse matrix.
 %   C = cs_droptol(A,tol) removes entries from A of magnitude less than or
 %   equal to tol.  Same as A = A .* (abs (A) >= tol).
@@ -11,8 +11,7 @@ function C = cs_droptol (A, tol)					    %#ok
 %
 %   See also: RELOP, ABS
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_droptol mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/CSparse/cs_droptol_mex.c b/CSparse/MATLAB/CSparse/cs_droptol_mex.c
index 580d47e..7b3c3ed 100644
--- a/CSparse/MATLAB/CSparse/cs_droptol_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_droptol_mex.c
@@ -9,18 +9,18 @@ void mexFunction
 )
 {
     cs Amatrix, *C, *A ;
-    int j, k ;
+    csi j, k ;
     double tol ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_droptol(A,tol)") ;
+        mexErrMsgTxt ("Usage: C = cs_droptol(A,tol)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-    tol = mxGetScalar (pargin [1]) ;			    /* get tol */
-    C = cs_spalloc (A->m, A->n, A->nzmax, 1, 0) ;	    /* C = A */
+    tol = mxGetScalar (pargin [1]) ;                        /* get tol */
+    C = cs_spalloc (A->m, A->n, A->nzmax, 1, 0) ;           /* C = A */
     for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
     for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
     for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
-    cs_droptol (C, tol) ;				    /* drop from C */
-    pargout [0] = cs_mex_put_sparse (&C) ;		    /* return C */
+    cs_droptol (C, tol) ;                                   /* drop from C */
+    pargout [0] = cs_mex_put_sparse (&C) ;                  /* return C */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_esep.m b/CSparse/MATLAB/CSparse/cs_esep.m
index db51fc1..24be424 100644
--- a/CSparse/MATLAB/CSparse/cs_esep.m
+++ b/CSparse/MATLAB/CSparse/cs_esep.m
@@ -11,8 +11,7 @@ function [a,b] = cs_esep (A)
 %
 %   See also CS_NSEP, CS_SEP, CS_ND, SYMRCM.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 p = symrcm (A) ;
 n2 = fix (size(A,1)/2) ;
diff --git a/CSparse/MATLAB/CSparse/cs_etree.m b/CSparse/MATLAB/CSparse/cs_etree.m
index 545e54c..56437e2 100644
--- a/CSparse/MATLAB/CSparse/cs_etree.m
+++ b/CSparse/MATLAB/CSparse/cs_etree.m
@@ -1,4 +1,4 @@
-function [parent, post] = cs_etree (A, mode)				    %#ok
+function [parent, post] = cs_etree (A, mode)                                %#ok
 %CS_ETREE elimination tree of A or A'*A.
 %   parent = cs_etree (A) returns the elimination tree of A.
 %   parent = cs_etree (A,'col') returns the elimination tree of A'*A.
@@ -13,7 +13,6 @@ function [parent, post] = cs_etree (A, mode)				    %#ok
 %
 %   See also ETREE, TREEPLOT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_etree mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_etree_mex.c b/CSparse/MATLAB/CSparse/cs_etree_mex.c
index d002ceb..b809035 100644
--- a/CSparse/MATLAB/CSparse/cs_etree_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_etree_mex.c
@@ -9,25 +9,25 @@ void mexFunction
 )
 {
     cs Amatrix, *A ;
-    int n, ata, *parent, *post ;
+    csi n, ata, *parent, *post ;
     char mode [20] ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: [parent,post] = cs_etree(A,mode)") ;
+        mexErrMsgTxt ("Usage: [parent,post] = cs_etree(A,mode)") ;
     }
-    ata = 0 ;						/* get mode */
+    ata = 0 ;                                           /* get mode */
     if (nargin > 1 && mxIsChar (pargin [1]))
     {
-	mxGetString (pargin [1], mode, 8) ;
-	ata = (mode [0] == 'c') ;
+        mxGetString (pargin [1], mode, 8) ;
+        ata = (mode [0] == 'c') ;
     }
-    A = cs_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;	/* get A */
+    A = cs_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;     /* get A */
     n = A->n ;
-    parent = cs_etree (A, ata) ;			/* compute etree */
+    parent = cs_etree (A, ata) ;                        /* compute etree */
     if (nargout > 1)
     {
-	post = cs_post (parent, n) ;			/* postorder the etree*/
-	pargout [1] = cs_mex_put_int (post, n, 1, 1) ;	/* return post */
+        post = cs_post (parent, n) ;                    /* postorder the etree*/
+        pargout [1] = cs_mex_put_int (post, n, 1, 1) ;  /* return post */
     }
-    pargout [0] = cs_mex_put_int (parent, n, 1, 1) ;	/* return parent */
+    pargout [0] = cs_mex_put_int (parent, n, 1, 1) ;    /* return parent */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_gaxpy.m b/CSparse/MATLAB/CSparse/cs_gaxpy.m
index 173223c..3f8210d 100644
--- a/CSparse/MATLAB/CSparse/cs_gaxpy.m
+++ b/CSparse/MATLAB/CSparse/cs_gaxpy.m
@@ -1,15 +1,14 @@
-function z = cs_gaxpy (A,x,y)						    %#ok
+function z = cs_gaxpy (A,x,y)                                               %#ok
 %CS_GAXPY sparse matrix times vector.
 %   z = cs_gaxpy(A,x,y) computes z = A*x+y where x and y are full vectors.
 %
 %   Example:
 %       Prob = UFget ('HB/arc130') ; A = Prob.A ; [m n] = size (A) ;
-%       x = rand (m,1) ; y = rand (n,1) ;
+%       x = rand (n,1) ; y = rand (m,1) ;
 %       z = cs_gaxpy (A, x, y) ;
 %       
 %   See also PLUS, MTIMES.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_gaxpy mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_gaxpy_mex.c b/CSparse/MATLAB/CSparse/cs_gaxpy_mex.c
index 24c78b5..1ac8209 100644
--- a/CSparse/MATLAB/CSparse/cs_gaxpy_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_gaxpy_mex.c
@@ -12,11 +12,11 @@ void mexFunction
     double *x, *y, *z ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: z = cs_gaxpy(A,x,y)") ;
+        mexErrMsgTxt ("Usage: z = cs_gaxpy(A,x,y)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-    x = cs_mex_get_double (A->n, pargin [1]) ;		    /* get x */
-    y = cs_mex_get_double (A->m, pargin [2]) ;		    /* get y */
-    z = cs_mex_put_double (A->m, y, &(pargout [0])) ;	    /* z = y */
-    cs_gaxpy (A, x, z) ;				    /* z = z + A*x */
+    x = cs_mex_get_double (A->n, pargin [1]) ;              /* get x */
+    y = cs_mex_get_double (A->m, pargin [2]) ;              /* get y */
+    z = cs_mex_put_double (A->m, y, &(pargout [0])) ;       /* z = y */
+    cs_gaxpy (A, x, z) ;                                    /* z = z + A*x */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_lsolve.m b/CSparse/MATLAB/CSparse/cs_lsolve.m
index 1e37600..8571a70 100644
--- a/CSparse/MATLAB/CSparse/cs_lsolve.m
+++ b/CSparse/MATLAB/CSparse/cs_lsolve.m
@@ -1,4 +1,4 @@
-function x = cs_lsolve (L,b)						    %#ok
+function x = cs_lsolve (L,b)                                                %#ok
 %CS_LSOLVE solve a sparse lower triangular system L*x=b.
 %   x = cs_lsolve(L,b) computes x = L\b, L must be lower triangular with a
 %   zero-free diagonal.  b must be a column vector.  x is full if b is full.
@@ -11,7 +11,6 @@ function x = cs_lsolve (L,b)						    %#ok
 %
 %   See also CS_LTSOLVE, CS_USOLVE, CS_UTSOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_lsolve mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_lsolve_mex.c b/CSparse/MATLAB/CSparse/cs_lsolve_mex.c
index 1f50c1c..7636db1 100644
--- a/CSparse/MATLAB/CSparse/cs_lsolve_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_lsolve_mex.c
@@ -24,36 +24,36 @@ void mexFunction
 {
     cs Lmatrix, Bmatrix, *L, *B, *X ;
     double *x, *b ;
-    int top, nz, p, *xi ;
+    csi top, nz, p, *xi ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_lsolve(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_lsolve(L,b)") ;
     }
     L = cs_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;    /* get L */
     if (mxIsSparse (pargin [1]))
     {
-	B = cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b */
-	cs_mex_check (0, L->n, 1, 0, 1, 1, pargin [1]) ;
-	xi = cs_malloc (2*L->n, sizeof (int)) ;		    /* get workspace */
-	x  = cs_malloc (L->n, sizeof (double)) ;
-	top = cs_spsolve (L, B, 0, xi, x, NULL, 1) ;	    /* x = L\b */
-	X = cs_spalloc (L->n, 1, L->n-top, 1, 0) ;	    /* create sparse x*/
-	X->p [0] = 0 ;
-	nz = 0 ;
-	for (p = top ; p < L->n ; p++)
-	{
-	    X->i [nz] = xi [p] ;
-	    X->x [nz++] = x [xi [p]] ;
-	}
-	X->p [1] = nz ;
-	pargout [0] = cs_mex_put_sparse (&X) ;
-	cs_free (x) ;
-	cs_free (xi) ;
+        B = cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b */
+        cs_mex_check (0, L->n, 1, 0, 1, 1, pargin [1]) ;
+        xi = cs_malloc (2*L->n, sizeof (csi)) ;             /* get workspace */
+        x  = cs_malloc (L->n, sizeof (double)) ;
+        top = cs_spsolve (L, B, 0, xi, x, NULL, 1) ;        /* x = L\b */
+        X = cs_spalloc (L->n, 1, L->n-top, 1, 0) ;          /* create sparse x*/
+        X->p [0] = 0 ;
+        nz = 0 ;
+        for (p = top ; p < L->n ; p++)
+        {
+            X->i [nz] = xi [p] ;
+            X->x [nz++] = x [xi [p]] ;
+        }
+        X->p [1] = nz ;
+        pargout [0] = cs_mex_put_sparse (&X) ;
+        cs_free (x) ;
+        cs_free (xi) ;
     }
     else
     {
-	b = cs_mex_get_double (L->n, pargin [1]) ;	    /* get full b */
-	x = cs_mex_put_double (L->n, b, &(pargout [0])) ;   /* x = b */
-	cs_lsolve (L, x) ;				    /* x = L\x */
+        b = cs_mex_get_double (L->n, pargin [1]) ;          /* get full b */
+        x = cs_mex_put_double (L->n, b, &(pargout [0])) ;   /* x = b */
+        cs_lsolve (L, x) ;                                  /* x = L\x */
     }
 }
diff --git a/CSparse/MATLAB/CSparse/cs_ltsolve.m b/CSparse/MATLAB/CSparse/cs_ltsolve.m
index 4e902b6..014f473 100644
--- a/CSparse/MATLAB/CSparse/cs_ltsolve.m
+++ b/CSparse/MATLAB/CSparse/cs_ltsolve.m
@@ -1,4 +1,4 @@
-function x = cs_ltsolve (L,b)						    %#ok
+function x = cs_ltsolve (L,b)                                               %#ok
 %CS_LTSOLVE solve a sparse upper triangular system L'*x=b.
 %   x = cs_ltsolve(L,b) computes x = L'\b, L must be lower triangular with a
 %   zero-free diagonal.  b must be a full vector.
@@ -9,7 +9,6 @@ function x = cs_ltsolve (L,b)						    %#ok
 %
 %   See also CS_LSOLVE, CS_USOLVE, CS_UTSOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_ltsolve mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_ltsolve_mex.c b/CSparse/MATLAB/CSparse/cs_ltsolve_mex.c
index aa10918..1a59340 100644
--- a/CSparse/MATLAB/CSparse/cs_ltsolve_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_ltsolve_mex.c
@@ -12,10 +12,10 @@ void mexFunction
     double *x, *b ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_ltsolve(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_ltsolve(L,b)") ;
     }
     L = cs_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;    /* get L */
-    b = cs_mex_get_double (L->n, pargin [1]) ;		    /* get b */
-    x = cs_mex_put_double (L->n, b, &(pargout [0])) ;	    /* x = b */
-    cs_ltsolve (L, x) ;					    /* x = L'\x */
+    b = cs_mex_get_double (L->n, pargin [1]) ;              /* get b */
+    x = cs_mex_put_double (L->n, b, &(pargout [0])) ;       /* x = b */
+    cs_ltsolve (L, x) ;                                     /* x = L'\x */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_lu.m b/CSparse/MATLAB/CSparse/cs_lu.m
index 4ff80fc..8c849a8 100644
--- a/CSparse/MATLAB/CSparse/cs_lu.m
+++ b/CSparse/MATLAB/CSparse/cs_lu.m
@@ -1,4 +1,4 @@
-function [L,U,p,q] = cs_lu (A,tol)					    %#ok
+function [L,U,p,q] = cs_lu (A,tol)                                          %#ok
 %CS_LU sparse LU factorization, with fill-reducing ordering.
 %   [L,U,p] = cs_lu(A) factorizes A(p,:) into L*U using no fill-reducing
 %   ordering.
@@ -23,7 +23,6 @@ function [L,U,p,q] = cs_lu (A,tol)					    %#ok
 %
 %   See also CS_AMD, LU, UMFPACK, AMD, COLAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_lu mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_lu_mex.c b/CSparse/MATLAB/CSparse/cs_lu_mex.c
index c17650d..6e82fb4 100644
--- a/CSparse/MATLAB/CSparse/cs_lu_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_lu_mex.c
@@ -11,41 +11,41 @@ void mexFunction
     css *S ;
     csn *N ;
     cs Amatrix, *A, *D ;
-    int n, order, *p ;
+    csi n, order, *p ;
     double tol ;
     if (nargout > 4 || nargin > 3 || nargin < 1)
     {
-	mexErrMsgTxt ("Usage: [L,U,p,q] = cs_lu (A,tol)") ;
+        mexErrMsgTxt ("Usage: [L,U,p,q] = cs_lu (A,tol)") ;
     }
-    A = cs_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
+    A = cs_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;        /* get A */
     n = A->n ;
-    if (nargin == 2)			    /* determine tol and ordering */
+    if (nargin == 2)                        /* determine tol and ordering */
     {
-	tol = mxGetScalar (pargin [1]) ;
-	order = (nargout == 4) ? 1 : 0 ;    /* amd (A+A'), or natural */
+        tol = mxGetScalar (pargin [1]) ;
+        order = (nargout == 4) ? 1 : 0 ;    /* amd (A+A'), or natural */
     }
     else
     {
-	tol = 1 ;
-	order = (nargout == 4) ? 2 : 0 ;    /* amd(S'*S) w/dense rows or I */
+        tol = 1 ;
+        order = (nargout == 4) ? 2 : 0 ;    /* amd(S'*S) w/dense rows or I */
     }
-    S = cs_sqr (order, A, 0) ;		    /* symbolic ordering, no QR bound */
-    N = cs_lu (A, S, tol) ;		    /* numeric factorization */
+    S = cs_sqr (order, A, 0) ;              /* symbolic ordering, no QR bound */
+    N = cs_lu (A, S, tol) ;                 /* numeric factorization */
     if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
-    cs_dropzeros (N->L) ;		    /* drop zeros from L and sort it */
+    cs_dropzeros (N->L) ;                   /* drop zeros from L and sort it */
     D = cs_transpose (N->L, 1) ;
     cs_spfree (N->L) ;
     N->L = cs_transpose (D, 1) ;
     cs_spfree (D) ;
-    cs_dropzeros (N->U) ;		    /* drop zeros from U and sort it */
+    cs_dropzeros (N->U) ;                   /* drop zeros from U and sort it */
     D = cs_transpose (N->U, 1) ;
     cs_spfree (N->U) ;
     N->U = cs_transpose (D, 1) ;
     cs_spfree (D) ;
-    p = cs_pinv (N->pinv, n) ;		    /* p=pinv' */
-    pargout [0] = cs_mex_put_sparse (&(N->L)) ;	    /* return L */
-    pargout [1] = cs_mex_put_sparse (&(N->U)) ;	    /* return U */
-    pargout [2] = cs_mex_put_int (p, n, 1, 1) ;	    /* return p */
+    p = cs_pinv (N->pinv, n) ;              /* p=pinv' */
+    pargout [0] = cs_mex_put_sparse (&(N->L)) ;     /* return L */
+    pargout [1] = cs_mex_put_sparse (&(N->U)) ;     /* return U */
+    pargout [2] = cs_mex_put_int (p, n, 1, 1) ;     /* return p */
     /* return Q */
     if (nargout == 4) pargout [3] = cs_mex_put_int (S->q, n, 1, 0) ;
     cs_nfree (N) ;
diff --git a/CSparse/MATLAB/CSparse/cs_lusol.m b/CSparse/MATLAB/CSparse/cs_lusol.m
index ff00f7a..0d5794c 100644
--- a/CSparse/MATLAB/CSparse/cs_lusol.m
+++ b/CSparse/MATLAB/CSparse/cs_lusol.m
@@ -1,4 +1,4 @@
-function x = cs_lusol (A,b,order,tol)					    %#ok
+function x = cs_lusol (A,b,order,tol)                                       %#ok
 %CS_LUSOL solve Ax=b using LU factorization.
 %   x = cs_lusol(A,b) computes x = A\b, where A is sparse and square, and b is a
 %   full vector.  The ordering cs_amd(A,2) is used.
@@ -17,7 +17,6 @@ function x = cs_lusol (A,b,order,tol)					    %#ok
 %
 %   See also CS_LU, CS_AMD, CS_CHOLSOL, CS_QRSOL, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_lusol mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_lusol_mex.c b/CSparse/MATLAB/CSparse/cs_lusol_mex.c
index c17778f..8ad660e 100644
--- a/CSparse/MATLAB/CSparse/cs_lusol_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_lusol_mex.c
@@ -9,32 +9,32 @@ void mexFunction
 )
 {
     cs *A, Amatrix ;
-    int order ;
+    csi order ;
     double *x, *b, tol ;
     if (nargout > 1 || nargin < 2 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: x = cs_lusol(A,b,order,tol)") ;
+        mexErrMsgTxt ("Usage: x = cs_lusol(A,b,order,tol)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;    /* get A */
-    b = cs_mex_get_double (A->n, pargin [1]) ;		    /* get b */
-    x = cs_mex_put_double (A->n, b, &(pargout [0])) ;	    /* x = b */
+    b = cs_mex_get_double (A->n, pargin [1]) ;              /* get b */
+    x = cs_mex_put_double (A->n, b, &(pargout [0])) ;       /* x = b */
     order = (nargin < 3) ? 2 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
     order = CS_MIN (order, 3) ;
     if (nargin == 2)
     {
-	tol = 1 ;			    /* normal partial pivoting */
+        tol = 1 ;                           /* normal partial pivoting */
     }
     else if (nargin == 3)
     {
-	tol = (order == 1) ? 0.001 : 1 ;    /* tol = 0.001 for amd(A+A') */
+        tol = (order == 1) ? 0.001 : 1 ;    /* tol = 0.001 for amd(A+A') */
     }
     else
     {
-	tol = mxGetScalar (pargin [3]) ;
+        tol = mxGetScalar (pargin [3]) ;
     }
-    if (!cs_lusol (order, A, x, tol))			    /* x = A\x */
+    if (!cs_lusol (order, A, x, tol))                       /* x = A\x */
     {
-	mexErrMsgTxt ("LU factorization failed (singular or out of memory)") ;
+        mexErrMsgTxt ("LU factorization failed (singular or out of memory)") ;
     }
 }
diff --git a/CSparse/MATLAB/CSparse/cs_make.m b/CSparse/MATLAB/CSparse/cs_make.m
index 0291919..e549418 100644
--- a/CSparse/MATLAB/CSparse/cs_make.m
+++ b/CSparse/MATLAB/CSparse/cs_make.m
@@ -39,10 +39,28 @@ function [objfiles, timestamp_out] = cs_make (f)
 %
 %   See also MEX.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-fprintf ('Compiling CSparse\n') ;
+try
+    % ispc does not appear in MATLAB 5.3
+    pc = ispc ;
+catch
+    % if ispc fails, assume we are on a Windows PC if it's not unix
+    pc = ~isunix ;
+end
+
+if (~isempty (strfind (computer, '64')))
+    fprintf ('Compiling CSparse (64-bit)\n') ;
+    mexcmd = 'mex -largeArrayDims' ;
+else
+    fprintf ('Compiling CSparse (32-bit)\n') ;
+    mexcmd = 'mex' ;
+end
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    mexcmd = [mexcmd ' -silent'] ;
+end
 
 % CSparse source files, in ../../Source, such as ../../Source/cs_add.c.
 % Note that not all CSparse source files have their own mexFunction.
@@ -58,7 +76,7 @@ cs = { 'cs_add', 'cs_amd', 'cs_chol', 'cs_cholsol', 'cs_counts', ...
     'cs_leaf', 'cs_randperm' } ;
     % add cs_mynewfunc to the above list
 
-details = 1 ;
+details = 0 ;
 kk = 0 ;
 csm = { } ;
 if (nargin == 0)
@@ -69,32 +87,24 @@ elseif (ischar (f))
     csm = {f} ;
 else
     force = f ;
-    details = details | (force > 1) ;					    %#ok
-    if (force & details)						    %#ok
-	fprintf ('cs_make: re-compiling everything\n') ;
+    details = details | (force > 1) ;                                       %#ok
+    if (force & details)                                                    %#ok
+        fprintf ('cs_make: re-compiling everything\n') ;
     end
 end
 if (force)
-    fprintf ('Compiling CSparse\n') ;
+    fprintf ('(compiling all of CSparse from scratch)\n') ;
 end
 
 if (isempty (csm))
     % mexFunctions, of the form cs_add_mex.c, etc, in this directory
     csm = { 'cs_add', 'cs_amd', 'cs_chol', 'cs_cholsol', 'cs_counts', ...
-	'cs_dmperm', 'cs_droptol', 'cs_etree', 'cs_gaxpy', 'cs_lsolve', ...
-	'cs_ltsolve', 'cs_lu', 'cs_lusol', 'cs_multiply', 'cs_permute', ...
-	'cs_print', 'cs_qr', 'cs_qrsol', 'cs_scc', 'cs_symperm', 'cs_thumb', ...
-	'cs_transpose', 'cs_sparse', 'cs_updown', 'cs_usolve', ...
-	'cs_utsolve', 'cs_randperm', 'cs_sqr' } ;
-	% add cs_mynewfunc to the above list
-end
-
-try
-    % ispc does not appear in MATLAB 5.3
-    pc = ispc ;
-catch
-    % if ispc fails, assume we are on a Windows PC if it's not unix
-    pc = ~isunix ;
+        'cs_dmperm', 'cs_droptol', 'cs_etree', 'cs_gaxpy', 'cs_lsolve', ...
+        'cs_ltsolve', 'cs_lu', 'cs_lusol', 'cs_multiply', 'cs_permute', ...
+        'cs_print', 'cs_qr', 'cs_qrsol', 'cs_scc', 'cs_symperm', 'cs_thumb', ...
+        'cs_transpose', 'cs_sparse', 'cs_updown', 'cs_usolve', ...
+        'cs_utsolve', 'cs_randperm', 'cs_sqr' } ;
+        % add cs_mynewfunc to the above list
 end
 
 if (pc)
@@ -106,20 +116,46 @@ end
 srcdir = '../../Source/' ;
 hfile = '../../Include/cs.h' ;
 
+%-------------------------------------------------------------------------------
+% With a current Microsoft compiler installed in the UF CISE lab, when CSparse
+% is located in a shared network folder, the -I../../Include option fails.  The
+% compiler -I or /I switch cannot use a relative path, even when using
+% /I..\..\Include.  Relative paths work fine in the same setup for the source
+% code files, which are in ../../Source/*.c.  This is very odd.  As a
+% work-around, absolute paths are now used in this version.
+
+% Change the following to 0 if relative paths work fine with /I on Windows:
+relative_paths_do_not_work = 1 ;
+
+if (pc & relative_paths_do_not_work)
+    % begin pain
+    here = pwd ;
+    cd ../../Include
+    % use quotes in case the path has spaces
+    mexcmd = [mexcmd ' -I"' pwd '"'] ;
+    cd (here)
+    % end pain
+else
+    % Linux, Unix, and Mac, are just fine.
+    mexcmd = [mexcmd ' -I../../Include'] ;
+end
+%-------------------------------------------------------------------------------
+
 % compile each CSparse source file
 [anysrc timestamp kk] = compile_source ('', 'cs_mex', obj, hfile, force, ...
-    kk, details) ;
+    kk, details, mexcmd) ;
 CS = ['cs_mex' obj] ;
 if (nargout > 0)
-    objfiles = ['..' filesep 'CSparse' filesep 'cs_mex' obj] ;
+    objfiles = ['../CSparse/cs_mex' obj] ;
 end
 for i = 1:length (cs)
-    [s t kk] = compile_source (srcdir, cs {i}, obj, hfile, force, kk, details) ;
+    [s t kk] = compile_source (srcdir, cs {i}, obj, hfile, force, ...
+        kk, details, mexcmd) ;
     timestamp = max (timestamp, t) ;
-    anysrc = anysrc | s ;						    %#ok
-    CS = [CS ' ' cs{i} obj] ;						    %#ok
+    anysrc = anysrc | s ;                                                   %#ok
+    CS = [CS ' ' cs{i} obj] ;                                               %#ok
     if (nargout > 0)
-	objfiles = [objfiles ' ..' filesep 'CSparse' filesep cs{i} obj] ;   %#ok
+        objfiles = [objfiles ' ../CSparse/' cs{i} obj] ;   %#ok
     end
 end
 
@@ -128,10 +164,10 @@ obj = ['.' mexext] ;
 for i = 1:length (csm)
     [s t] = cs_must_compile ('', csm{i}, '_mex', obj, hfile, force) ;
     timestamp = max (timestamp, t) ;
-    if (anysrc | s)							    %#ok
-	cmd = sprintf ('mex -O -I../../Include %s_mex.c %s -output %s', ...
-	    csm{i}, CS, csm{i}) ;
-	kk = do_cmd (cmd, kk, details) ;
+    if (anysrc | s)                                                         %#ok
+        cmd = sprintf ('%s -O %s_mex.c %s -output %s', ...
+            mexcmd, csm{i}, CS, csm{i}) ;
+        kk = do_cmd (cmd, kk, details) ;
     end
 end
 
@@ -145,12 +181,13 @@ if (force)
 end
 
 %-------------------------------------------------------------------------------
-function [s,t,kk] = compile_source (srcdir, f, obj, hfile, force, kk, details)
+function [s,t,kk] = compile_source (srcdir, f, obj, hfile, force, ...
+    kk, details, mexcmd)
 % compile a source code file in ../../Source, leaving object file in
 % this directory.
 [s t] = cs_must_compile (srcdir, f, '', obj, hfile, force) ;
 if (s)
-    cmd = sprintf ('mex -O -c -I../../Include %s%s.c', srcdir, f) ;
+    cmd = sprintf ('%s -O -c %s%s.c', mexcmd, srcdir, f) ;
     kk = do_cmd (cmd, kk, details) ;
 end
 
@@ -161,7 +198,7 @@ if (details)
     fprintf ('%s\n', s) ;
 else
     if (mod (kk, 60) == 0)
-	fprintf ('\n') ;
+        fprintf ('\n') ;
     end
     kk = kk + 1 ;
     fprintf ('.') ;
diff --git a/CSparse/MATLAB/CSparse/cs_mex.c b/CSparse/MATLAB/CSparse/cs_mex.c
index a88b529..fdb3364 100644
--- a/CSparse/MATLAB/CSparse/cs_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_mex.c
@@ -1,45 +1,45 @@
 #include "cs_mex.h"
 /* check MATLAB input argument */
-void cs_mex_check (int nel, int m, int n, int square, int sparse, int values,
+void cs_mex_check (csi nel, csi m, csi n, csi square, csi sparse, csi values,
     const mxArray *A)
 {
-    int nnel, mm = mxGetM (A), nn = mxGetN (A) ;
+    csi nnel, mm = mxGetM (A), nn = mxGetN (A) ;
     if (values)
     {
-	if (mxIsComplex (A))
-	{
-	    mexErrMsgTxt ("matrix must be real; try CXSparse instead") ;
-	}
+        if (mxIsComplex (A))
+        {
+            mexErrMsgTxt ("matrix must be real; try CXSparse instead") ;
+        }
     }
     if (sparse && !mxIsSparse (A)) mexErrMsgTxt ("matrix must be sparse") ;
     if (!sparse)
     {
-	if (mxIsSparse (A)) mexErrMsgTxt ("matrix must be full") ;
-	if (values && !mxIsDouble (A)) mexErrMsgTxt ("matrix must be double") ;
+        if (mxIsSparse (A)) mexErrMsgTxt ("matrix must be full") ;
+        if (values && !mxIsDouble (A)) mexErrMsgTxt ("matrix must be double") ;
     }
     if (nel)
     {
-	/* check number of elements */
-	nnel = mxGetNumberOfElements (A) ;
-	if (m >= 0 && n >= 0 && m*n != nnel) mexErrMsgTxt ("wrong length") ;
+        /* check number of elements */
+        nnel = mxGetNumberOfElements (A) ;
+        if (m >= 0 && n >= 0 && m*n != nnel) mexErrMsgTxt ("wrong length") ;
     }
     else
     {
-	/* check row and/or column dimensions */
-	if (m >= 0 && m != mm) mexErrMsgTxt ("wrong dimension") ;
-	if (n >= 0 && n != nn) mexErrMsgTxt ("wrong dimension") ;
+        /* check row and/or column dimensions */
+        if (m >= 0 && m != mm) mexErrMsgTxt ("wrong dimension") ;
+        if (n >= 0 && n != nn) mexErrMsgTxt ("wrong dimension") ;
     }
     if (square && mm != nn) mexErrMsgTxt ("matrix must be square") ;
 }
 
 /* get a MATLAB sparse matrix and convert to cs */
-cs *cs_mex_get_sparse (cs *A, int square, int values, const mxArray *Amatlab)
+cs *cs_mex_get_sparse (cs *A, csi square, csi values, const mxArray *Amatlab)
 {
     cs_mex_check (0, -1, -1, square, 1, values, Amatlab) ;
     A->m = mxGetM (Amatlab) ;
     A->n = mxGetN (Amatlab) ;
-    A->p = mxGetJc (Amatlab) ;
-    A->i = mxGetIr (Amatlab) ;
+    A->p = (csi *) mxGetJc (Amatlab) ;
+    A->i = (csi *) mxGetIr (Amatlab) ;
     A->x = values ? mxGetPr (Amatlab) : NULL ;
     A->nzmax = mxGetNzmax (Amatlab) ;
     A->nz = -1 ;    /* denotes a compressed-col matrix, instead of triplet */
@@ -59,59 +59,59 @@ mxArray *cs_mex_put_sparse (cs **Ahandle)
     cs_free (mxGetJc (Amatlab)) ;
     cs_free (mxGetIr (Amatlab)) ;
     cs_free (mxGetPr (Amatlab)) ;
-    mxSetJc (Amatlab, A->p) ;		/* assign A->p pointer to MATLAB A */
-    mxSetIr (Amatlab, A->i) ;
+    mxSetJc (Amatlab, (mwIndex *) A->p) ;  /* assign A->p pointer to MATLAB A */
+    mxSetIr (Amatlab, (mwIndex *) A->i) ;
     mxSetPr (Amatlab, A->x) ;
-    mexMakeMemoryPersistent (A->p) ;	/* ensure MATLAB does not free A->p */
+    mexMakeMemoryPersistent (A->p) ;    /* ensure MATLAB does not free A->p */
     mexMakeMemoryPersistent (A->i) ;
     mexMakeMemoryPersistent (A->x) ;
-    cs_free (A) ;			/* frees A struct only, not A->p, etc */
+    cs_free (A) ;                       /* frees A struct only, not A->p, etc */
     *Ahandle = NULL ;
     return (Amatlab) ;
 }
 
 /* get a MATLAB dense column vector */
-double *cs_mex_get_double (int n, const mxArray *X)
+double *cs_mex_get_double (csi n, const mxArray *X)
 {
     cs_mex_check (0, n, 1, 0, 0, 1, X) ;
     return (mxGetPr (X)) ;
 }
 
 /* return a double vector to MATLAB */
-double *cs_mex_put_double (int n, const double *b, mxArray **X)
+double *cs_mex_put_double (csi n, const double *b, mxArray **X)
 {
     double *x ;
-    int k ;
-    *X = mxCreateDoubleMatrix (n, 1, mxREAL) ;	    /* create x */
+    csi k ;
+    *X = mxCreateDoubleMatrix (n, 1, mxREAL) ;      /* create x */
     x = mxGetPr (*X) ;
-    for (k = 0 ; k < n ; k++) x [k] = b [k] ;	    /* copy x = b */
+    for (k = 0 ; k < n ; k++) x [k] = b [k] ;       /* copy x = b */
     return (x) ;
 }
 
-/* get a MATLAB flint array and convert to int */
-int *cs_mex_get_int (int n, const mxArray *Imatlab, int *imax, int lo)
+/* get a MATLAB flint array and convert to csi */
+csi *cs_mex_get_int (csi n, const mxArray *Imatlab, csi *imax, csi lo)
 {
     double *p ;
-    int i, k, *C = cs_malloc (n, sizeof (int)) ;
+    csi i, k, *C = cs_malloc (n, sizeof (csi)) ;
     cs_mex_check (1, n, 1, 0, 0, 1, Imatlab) ;
     p = mxGetPr (Imatlab) ;
     *imax = 0 ;
     for (k = 0 ; k < n ; k++)
     {
-	i = p [k] ;
-	C [k] = i - 1 ;
-	if (i < lo) mexErrMsgTxt ("index out of bounds") ;
-	*imax = CS_MAX (*imax, i) ;
+        i = p [k] ;
+        C [k] = i - 1 ;
+        if (i < lo) mexErrMsgTxt ("index out of bounds") ;
+        *imax = CS_MAX (*imax, i) ;
     }
     return (C) ;
 }
 
-/* return an int array to MATLAB as a flint row vector */
-mxArray *cs_mex_put_int (int *p, int n, int offset, int do_free)
+/* return an csi array to MATLAB as a flint row vector */
+mxArray *cs_mex_put_int (csi *p, csi n, csi offset, csi do_free)
 {
     mxArray *X = mxCreateDoubleMatrix (1, n, mxREAL) ;
     double *x = mxGetPr (X) ;
-    int k ;
+    csi k ;
     for (k = 0 ; k < n ; k++) x [k] = (p ? p [k] : k) + offset ;
     if (do_free) cs_free (p) ;
     return (X) ;
diff --git a/CSparse/MATLAB/CSparse/cs_mex.h b/CSparse/MATLAB/CSparse/cs_mex.h
index e238bdc..b63693f 100644
--- a/CSparse/MATLAB/CSparse/cs_mex.h
+++ b/CSparse/MATLAB/CSparse/cs_mex.h
@@ -1,10 +1,10 @@
 #include "cs.h"
 #include "mex.h"
-cs *cs_mex_get_sparse (cs *A, int square, int values, const mxArray *Amatlab) ;
+cs *cs_mex_get_sparse (cs *A, csi square, csi values, const mxArray *Amatlab) ;
 mxArray *cs_mex_put_sparse (cs **A) ;
-void cs_mex_check (int nel, int m, int n, int square, int sparse, int values,
+void cs_mex_check (csi nel, csi m, csi n, csi square, csi sparse, csi values,
     const mxArray *A) ;
-int *cs_mex_get_int (int n, const mxArray *Imatlab, int *imax, int lo) ;
-mxArray *cs_mex_put_int (int *p, int n, int offset, int do_free) ;
-double *cs_mex_get_double (int n, const mxArray *X) ;
-double *cs_mex_put_double (int n, const double *b, mxArray **X) ;
+csi *cs_mex_get_int (csi n, const mxArray *Imatlab, csi *imax, csi lo) ;
+mxArray *cs_mex_put_int (csi *p, csi n, csi offset, csi do_free) ;
+double *cs_mex_get_double (csi n, const mxArray *X) ;
+double *cs_mex_put_double (csi n, const double *b, mxArray **X) ;
diff --git a/CSparse/MATLAB/CSparse/cs_multiply.m b/CSparse/MATLAB/CSparse/cs_multiply.m
index 071b60e..dff6d93 100644
--- a/CSparse/MATLAB/CSparse/cs_multiply.m
+++ b/CSparse/MATLAB/CSparse/cs_multiply.m
@@ -1,4 +1,4 @@
-function C = cs_multiply (A,B)						    %#ok
+function C = cs_multiply (A,B)                                              %#ok
 %CS_MULTIPLY sparse matrix multiply.
 %   C = cs_multiply(A,B) computes C = A*B.
 %
@@ -10,7 +10,6 @@ function C = cs_multiply (A,B)						    %#ok
 %
 %   See also CS_GAXPY, CS_ADD, MTIMES.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_mult mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_multiply_mex.c b/CSparse/MATLAB/CSparse/cs_multiply_mex.c
index 8b61dbc..48eab3d 100644
--- a/CSparse/MATLAB/CSparse/cs_multiply_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_multiply_mex.c
@@ -11,15 +11,15 @@ void mexFunction
     cs Amatrix, Bmatrix, *A, *B, *C, *D ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_multiply(A,B)") ;
+        mexErrMsgTxt ("Usage: C = cs_multiply(A,B)") ;
     }
     A = cs_transpose (cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]), 1) ;
     B = cs_transpose (cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]), 1) ;
-    D = cs_multiply (B,A) ;		/* D = B'*A' */
+    D = cs_multiply (B,A) ;             /* D = B'*A' */
     cs_spfree (A) ;
     cs_spfree (B) ;
-    cs_dropzeros (D) ;			/* drop zeros from D */
-    C = cs_transpose (D, 1) ;		/* C = D', so that C is sorted */
+    cs_dropzeros (D) ;                  /* drop zeros from D */
+    C = cs_transpose (D, 1) ;           /* C = D', so that C is sorted */
     cs_spfree (D) ;
-    pargout [0] = cs_mex_put_sparse (&C) ;	/* return C */
+    pargout [0] = cs_mex_put_sparse (&C) ;      /* return C */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_must_compile.m b/CSparse/MATLAB/CSparse/cs_must_compile.m
index 1810a57..dfce61e 100644
--- a/CSparse/MATLAB/CSparse/cs_must_compile.m
+++ b/CSparse/MATLAB/CSparse/cs_must_compile.m
@@ -6,11 +6,10 @@ function [s, t, tobj] = cs_must_compile (srcdir, f, suffix, obj, hfile, force)
 %        none, not meant for end users.
 %   See also: CS_MAKE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 dobj = dir ([f obj]) ;
-if (force | isempty (dobj))						    %#ok
+if (force | isempty (dobj))                                                 %#ok
     s = 1 ;
     t = Inf ;
     tobj = -1 ;
diff --git a/CSparse/MATLAB/CSparse/cs_nd.m b/CSparse/MATLAB/CSparse/cs_nd.m
index 1afcbfc..99aa92c 100644
--- a/CSparse/MATLAB/CSparse/cs_nd.m
+++ b/CSparse/MATLAB/CSparse/cs_nd.m
@@ -11,17 +11,16 @@ function p = cs_nd (A)
 %
 %   See also CS_AMD, CS_SEP, CS_ESEP, CS_NSEP, AMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n == 1)
     p = 1 ;
 elseif (n < 500)
-    p = cs_amd (A) ;		    % use cs_amd on small graphs
+    p = cs_amd (A) ;                % use cs_amd on small graphs
 else
-    [s a b] = cs_nsep (A) ;	    % find a node separator
-    a = a (cs_nd (A (a,a))) ;	    % order A(a,a) recursively
-    b = b (cs_nd (A (b,b))) ;	    % order A(b,b) recursively
-    p = [a b s] ;		    % concatenate to obtain the final ordering
+    [s a b] = cs_nsep (A) ;         % find a node separator
+    a = a (cs_nd (A (a,a))) ;       % order A(a,a) recursively
+    b = b (cs_nd (A (b,b))) ;       % order A(b,b) recursively
+    p = [a b s] ;                   % concatenate to obtain the final ordering
 end
diff --git a/CSparse/MATLAB/CSparse/cs_nsep.m b/CSparse/MATLAB/CSparse/cs_nsep.m
index b7a22fc..6177864 100644
--- a/CSparse/MATLAB/CSparse/cs_nsep.m
+++ b/CSparse/MATLAB/CSparse/cs_nsep.m
@@ -11,8 +11,7 @@ function [s,a,b] = cs_nsep (A)
 %
 %   See also CS_SEP, CS_ESEP, CS_ND.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [a b] = cs_esep (A) ;
 [s a b] = cs_sep (A, a, b) ;
diff --git a/CSparse/MATLAB/CSparse/cs_permute.m b/CSparse/MATLAB/CSparse/cs_permute.m
index ac138b1..7b41ff6 100644
--- a/CSparse/MATLAB/CSparse/cs_permute.m
+++ b/CSparse/MATLAB/CSparse/cs_permute.m
@@ -1,4 +1,4 @@
-function C = cs_permute (A,p,q)						    %#ok
+function C = cs_permute (A,p,q)                                             %#ok
 %CS_PERMUTE permute a sparse matrix.
 %   C = cs_permute(A,p,q) computes C = A(p,q)
 %
@@ -9,7 +9,6 @@ function C = cs_permute (A,p,q)						    %#ok
 %
 %   See also CS_SYMPERM, SUBSREF.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_permute mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_permute_mex.c b/CSparse/MATLAB/CSparse/cs_permute_mex.c
index 3358442..55f63b4 100644
--- a/CSparse/MATLAB/CSparse/cs_permute_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_permute_mex.c
@@ -9,21 +9,21 @@ void mexFunction
 )
 {
     cs Amatrix, *A, *C, *D ;
-    int ignore, *P, *Q, *Pinv ;
+    csi ignore, *P, *Q, *Pinv ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: C = cs_permute(A,p,q)") ;
+        mexErrMsgTxt ("Usage: C = cs_permute(A,p,q)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-    P = cs_mex_get_int (A->m, pargin [1], &ignore, 1) ;	    /* get P */
-    Q = cs_mex_get_int (A->n, pargin [2], &ignore, 1) ;	    /* get Q */
-    Pinv = cs_pinv (P, A->m) ;		    /* P = Pinv' */
-    C = cs_permute (A, Pinv, Q, 1) ;	    /* C = A(p,q) */
-    D = cs_transpose (C, 1) ;		    /* sort C via double transpose */
+    P = cs_mex_get_int (A->m, pargin [1], &ignore, 1) ;     /* get P */
+    Q = cs_mex_get_int (A->n, pargin [2], &ignore, 1) ;     /* get Q */
+    Pinv = cs_pinv (P, A->m) ;              /* P = Pinv' */
+    C = cs_permute (A, Pinv, Q, 1) ;        /* C = A(p,q) */
+    D = cs_transpose (C, 1) ;               /* sort C via double transpose */
     cs_spfree (C) ;
     C = cs_transpose (D, 1) ;
     cs_spfree (D) ;
-    pargout [0] = cs_mex_put_sparse (&C) ;	    /* return C */
+    pargout [0] = cs_mex_put_sparse (&C) ;          /* return C */
     cs_free (Pinv) ;
     cs_free (P) ;
     cs_free (Q) ;
diff --git a/CSparse/MATLAB/CSparse/cs_print.m b/CSparse/MATLAB/CSparse/cs_print.m
index 90d4ed0..7b40553 100644
--- a/CSparse/MATLAB/CSparse/cs_print.m
+++ b/CSparse/MATLAB/CSparse/cs_print.m
@@ -1,4 +1,4 @@
-function cs_print (A,brief)						    %#ok
+function cs_print (A,brief)                                                 %#ok
 %CS_PRINT print the contents of a sparse matrix.
 %   cs_print(A) prints a sparse matrix. cs_print(A,1) prints just a few entries.
 %
@@ -8,7 +8,6 @@ function cs_print (A,brief)						    %#ok
 %
 %   See also: DISPLAY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_print mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_print_mex.c b/CSparse/MATLAB/CSparse/cs_print_mex.c
index e66f71f..41c7470 100644
--- a/CSparse/MATLAB/CSparse/cs_print_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_print_mex.c
@@ -9,12 +9,12 @@ void mexFunction
 )
 {
     cs Amatrix, *A ;
-    int brief ;
+    csi brief ;
     if (nargout > 0 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: cs_print(A,brief)") ;
+        mexErrMsgTxt ("Usage: cs_print(A,brief)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
     brief = (nargin < 2) ? 0 : mxGetScalar (pargin [1]) ;   /* get brief */
-    cs_print (A, brief) ;				    /* print A */
+    cs_print (A, brief) ;                                   /* print A */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_qleft.m b/CSparse/MATLAB/CSparse/cs_qleft.m
index 0762562..d6d89b7 100644
--- a/CSparse/MATLAB/CSparse/cs_qleft.m
+++ b/CSparse/MATLAB/CSparse/cs_qleft.m
@@ -15,17 +15,16 @@ function X = cs_qleft (V, Beta, p, Y)
 %      
 %   See also CS_QR, CS_QRIGHT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m2 n] = size (V) ;
 [m ny] = size (Y) ;
 X = Y ;
 if (m2 > m)
     if (issparse (Y))
-	X = [X ; sparse(m2-m,ny)] ;
+        X = [X ; sparse(m2-m,ny)] ;
     else
-	X = [X ; zeros(m2-m,ny)] ;
+        X = [X ; zeros(m2-m,ny)] ;
     end
 end
 if (~isempty (p))
diff --git a/CSparse/MATLAB/CSparse/cs_qr.m b/CSparse/MATLAB/CSparse/cs_qr.m
index 7c4767c..073fcbb 100644
--- a/CSparse/MATLAB/CSparse/cs_qr.m
+++ b/CSparse/MATLAB/CSparse/cs_qr.m
@@ -1,4 +1,4 @@
-function [V,beta,p,R,q] = cs_qr (A)					    %#ok
+function [V,beta,p,R,q] = cs_qr (A)                                         %#ok
 %CS_QR sparse QR factorization (Householder-based).
 %   [V,beta,p,R] = cs_qr(A) computes the QR factorization of A(p,:).
 %   [V,beta,p,R,q] = cs_qr(A) computes the QR factorization of A(p,q).
@@ -27,7 +27,6 @@ function [V,beta,p,R,q] = cs_qr (A)					    %#ok
 %
 %   See also CS_AMD, CS_QRIGHT, CS_QR, CS_DMPERM, QR, COLAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_qr mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_qr_mex.c b/CSparse/MATLAB/CSparse/cs_qr_mex.c
index 57cd8da..12b8d1e 100644
--- a/CSparse/MATLAB/CSparse/cs_qr_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_qr_mex.c
@@ -11,35 +11,35 @@ void mexFunction
     css *S ;
     csn *N ;
     cs Amatrix, *A, *D ;
-    int m, n, order, *p ;
+    csi m, n, order, *p ;
     if (nargout > 5 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [V,beta,p,R,q] = cs_qr(A)") ;
+        mexErrMsgTxt ("Usage: [V,beta,p,R,q] = cs_qr(A)") ;
     }
-    A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
+    A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;        /* get A */
     m = A->m ;
     n = A->n ;
     if (m < n) mexErrMsgTxt ("A must have # rows >= # columns") ;
-    order = (nargout == 5) ? 3 : 0 ;	    /* determine ordering */
-    S = cs_sqr (order, A, 1) ;		    /* symbolic QR ordering & analysis*/
-    N = cs_qr (A, S) ;			    /* numeric QR factorization */
+    order = (nargout == 5) ? 3 : 0 ;        /* determine ordering */
+    S = cs_sqr (order, A, 1) ;              /* symbolic QR ordering & analysis*/
+    N = cs_qr (A, S) ;                      /* numeric QR factorization */
     if (!N) mexErrMsgTxt ("qr failed") ;
-    cs_dropzeros (N->L) ;		    /* drop zeros from V and sort */
+    cs_dropzeros (N->L) ;                   /* drop zeros from V and sort */
     D = cs_transpose (N->L, 1) ;
     cs_spfree (N->L) ;
     N->L = cs_transpose (D, 1) ;
     cs_spfree (D) ;
-    cs_dropzeros (N->U) ;		    /* drop zeros from R and sort */
+    cs_dropzeros (N->U) ;                   /* drop zeros from R and sort */
     D = cs_transpose (N->U, 1) ;
     cs_spfree (N->U) ;
     N->U = cs_transpose (D, 1) ;
     cs_spfree (D) ;
-    m = N->L->m ;				    /* m may be larger now */
-    p = cs_pinv (S->pinv, m) ;			    /* p = pinv' */
-    pargout [0] = cs_mex_put_sparse (&(N->L)) ;	    /* return V */
+    m = N->L->m ;                                   /* m may be larger now */
+    p = cs_pinv (S->pinv, m) ;                      /* p = pinv' */
+    pargout [0] = cs_mex_put_sparse (&(N->L)) ;     /* return V */
     cs_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
-    pargout [2] = cs_mex_put_int (p, m, 1, 1) ;	    /* return p */
-    pargout [3] = cs_mex_put_sparse (&(N->U)) ;	    /* return R */
+    pargout [2] = cs_mex_put_int (p, m, 1, 1) ;     /* return p */
+    pargout [3] = cs_mex_put_sparse (&(N->U)) ;     /* return R */
     pargout [4] = cs_mex_put_int (S->q, n, 1, 0) ;  /* return q */
     cs_nfree (N) ;
     cs_sfree (S) ;
diff --git a/CSparse/MATLAB/CSparse/cs_qright.m b/CSparse/MATLAB/CSparse/cs_qright.m
index 951c60a..736615e 100644
--- a/CSparse/MATLAB/CSparse/cs_qright.m
+++ b/CSparse/MATLAB/CSparse/cs_qright.m
@@ -13,8 +13,7 @@ function X = cs_qright (V, Beta, p, Y)
 %
 %   See also CS_QR, CS_QLEFT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (V) ;
 X = Y ;
diff --git a/CSparse/MATLAB/CSparse/cs_qrsol.m b/CSparse/MATLAB/CSparse/cs_qrsol.m
index 3c49456..bcc5ec8 100644
--- a/CSparse/MATLAB/CSparse/cs_qrsol.m
+++ b/CSparse/MATLAB/CSparse/cs_qrsol.m
@@ -1,4 +1,4 @@
-function x = cs_qrsol (A,b,order)					    %#ok
+function x = cs_qrsol (A,b,order)                                           %#ok
 %CS_QRSOL solve a sparse least-squares problem.
 %   x = cs_qrsol(A,b) solves the over-determined least squares problem to
 %   find x that minimizes norm(A*x-b), where b is a full vector and
@@ -17,7 +17,6 @@ function x = cs_qrsol (A,b,order)					    %#ok
 %
 %   See also CS_QR, CS_AMD, CS_LUSOL, CS_CHOLSOL, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_qrsol mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_qrsol_mex.c b/CSparse/MATLAB/CSparse/cs_qrsol_mex.c
index 74222ee..a887cf1 100644
--- a/CSparse/MATLAB/CSparse/cs_qrsol_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_qrsol_mex.c
@@ -10,22 +10,22 @@ void mexFunction
 {
     cs *A, Amatrix ;
     double *x, *b ;
-    int k, order ;
+    csi k, order ;
     if (nargout > 1 || nargin < 2 || nargin > 3)
     {
-	mexErrMsgTxt ("Usage: x = cs_qrsol(A,b,order)") ;
+        mexErrMsgTxt ("Usage: x = cs_qrsol(A,b,order)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-    b = cs_mex_get_double (A->m, pargin [1]) ;		    /* get b */
+    b = cs_mex_get_double (A->m, pargin [1]) ;              /* get b */
     x = cs_calloc (CS_MAX (A->m, A->n), sizeof (double)) ;  /* x = b */
     for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;
     order = (nargin < 3) ? 3 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
     order = CS_MIN (order, 3) ;
-    if (!cs_qrsol (order, A, x))			    /* x = A\x */
+    if (!cs_qrsol (order, A, x))                            /* x = A\x */
     {
-	mexErrMsgTxt ("QR solve failed") ;
+        mexErrMsgTxt ("QR solve failed") ;
     }
-    cs_mex_put_double (A->n, x, &(pargout [0])) ;	    /* return x */
+    cs_mex_put_double (A->n, x, &(pargout [0])) ;           /* return x */
     cs_free (x) ;
 }
diff --git a/CSparse/MATLAB/CSparse/cs_randperm.m b/CSparse/MATLAB/CSparse/cs_randperm.m
index 845cce8..b065d4c 100644
--- a/CSparse/MATLAB/CSparse/cs_randperm.m
+++ b/CSparse/MATLAB/CSparse/cs_randperm.m
@@ -1,4 +1,4 @@
-function p = cs_randperm (n, seed)					    %#ok
+function p = cs_randperm (n, seed)                                          %#ok
 %CS_RANDPERM random permutation.
 %   p = cs_randperm (n) returns a repeatable random permutation of 1:n.
 %   p = cs_randperm (n,seed) returns the random permutation using the given
@@ -12,7 +12,6 @@ function p = cs_randperm (n, seed)					    %#ok
 %
 %   See also CS_DMPERM, RAND, RANDPERM
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_randperm mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_randperm_mex.c b/CSparse/MATLAB/CSparse/cs_randperm_mex.c
index 9df7b6a..a67ff45 100644
--- a/CSparse/MATLAB/CSparse/cs_randperm_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_randperm_mex.c
@@ -14,15 +14,15 @@ void mexFunction
 )
 {
     double seed ;
-    int iseed, n, *p ;
+    csi iseed, n, *p ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: p = cs_randperm(n,seed)") ;
+        mexErrMsgTxt ("Usage: p = cs_randperm(n,seed)") ;
     }
     seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;
     iseed = (seed > 0 && seed < 1) ? (seed * RAND_MAX) : seed ;
     n = mxGetScalar (pargin [0]) ;
     n = CS_MAX (n, 0) ;
     p = cs_randperm (n, iseed) ;
-    pargout [0] = cs_mex_put_int (p, n, 1, 1) ;	    /* return p */
+    pargout [0] = cs_mex_put_int (p, n, 1, 1) ;     /* return p */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_scc.m b/CSparse/MATLAB/CSparse/cs_scc.m
index 787b24f..c45494f 100644
--- a/CSparse/MATLAB/CSparse/cs_scc.m
+++ b/CSparse/MATLAB/CSparse/cs_scc.m
@@ -1,4 +1,4 @@
-function [p,r] = cs_scc (A)						    %#ok
+function [p,r] = cs_scc (A)                                                 %#ok
 %CS_SCC strongly-connected components of a square sparse matrix.
 %   [p,r] = cs_scc(A) finds a permutation p so that A(p,p) is permuted into
 %   block upper triangular form.  The diagonal of A is ignored.  The kth block
@@ -11,7 +11,6 @@ function [p,r] = cs_scc (A)						    %#ok
 %
 %   See also CS_DMPERM, DMPERM, CS_SCC2.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_scc mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_scc2.m b/CSparse/MATLAB/CSparse/cs_scc2.m
index a511235..e25f78a 100644
--- a/CSparse/MATLAB/CSparse/cs_scc2.m
+++ b/CSparse/MATLAB/CSparse/cs_scc2.m
@@ -19,33 +19,32 @@ function [p, q, r, s] = cs_scc2 (A, bipartite)
 %
 %   See also CS_DMPERM, DMPERM, CS_SCC, CCSPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 if (nargin < 2)
     bipartite = 0 ;
 end
 
-if (m ~= n | bipartite)							    %#ok
+if (m ~= n | bipartite)                                                     %#ok
 
     % find the connected components of [I A ; A' 0]
     S = spaugment (A) ;
     [psym,rsym] = cs_scc (S) ;
-    p = psym (find (psym <= m)) ;					    %#ok
-    q = psym (find (psym > m)) - m ;					    %#ok
+    p = psym (find (psym <= m)) ;                                           %#ok
+    q = psym (find (psym > m)) - m ;                                        %#ok
     nb = length (rsym) - 1 ;
     r = zeros (1,nb+1) ;
     s = zeros (1,nb+1) ;
     krow = 1 ;
     kcol = 1 ;
     for k = 1:nb
-	% find the rows and columns in the kth component
-	r (k) = krow ;
-	s (k) = kcol ;
-	ksym = psym (rsym (k):rsym (k+1)-1) ;
-	krow = krow + length (find (ksym <= m)) ;
-	kcol = kcol + length (find (ksym >  m)) ;
+        % find the rows and columns in the kth component
+        r (k) = krow ;
+        s (k) = kcol ;
+        ksym = psym (rsym (k):rsym (k+1)-1) ;
+        krow = krow + length (find (ksym <= m)) ;
+        kcol = kcol + length (find (ksym >  m)) ;
     end
     r (nb+1) = m+1 ;
     s (nb+1) = n+1 ;
diff --git a/CSparse/MATLAB/CSparse/cs_scc_mex.c b/CSparse/MATLAB/CSparse/cs_scc_mex.c
index 21da4e6..3e7aaab 100644
--- a/CSparse/MATLAB/CSparse/cs_scc_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_scc_mex.c
@@ -10,23 +10,23 @@ void mexFunction
 {
     cs Amatrix, *A ;
     csd *D ;
-    int n, j, *Ap2 ;
+    csi n, j, *Ap2 ;
     if (nargout > 2 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [p,r] = cs_scc(A)") ;
+        mexErrMsgTxt ("Usage: [p,r] = cs_scc(A)") ;
     }
-    A = cs_mex_get_sparse (&Amatrix, 1, 0, pargin [0]) ;	/* get A */
+    A = cs_mex_get_sparse (&Amatrix, 1, 0, pargin [0]) ;        /* get A */
     /* cs_scc modifies A->p and then restores it (in cs_dfs).  Avoid the issue
      * of a mexFunction modifying its input (even temporarily) by making a copy
      * of A->p.  This issue does not arise in cs_dmperm, because that function
      * applies cs_scc to a submatrix C, not to A directly. */
     n = A->n ;
-    Ap2 = cs_malloc (n+1, sizeof (int)) ;
+    Ap2 = cs_malloc (n+1, sizeof (csi)) ;
     for (j = 0 ; j <= n ; j++) Ap2 [j] = A->p [j] ;
     A->p = Ap2 ;
-    D = cs_scc (A) ;					/* find conn. comp. */
-    pargout [0] = cs_mex_put_int (D->p, n, 1, 0) ;		/* return p */
-    pargout [1] = cs_mex_put_int (D->r, D->nb+1, 1, 0) ;	/* return r */
+    D = cs_scc (A) ;                                    /* find conn. comp. */
+    pargout [0] = cs_mex_put_int (D->p, n, 1, 0) ;              /* return p */
+    pargout [1] = cs_mex_put_int (D->r, D->nb+1, 1, 0) ;        /* return r */
     cs_dfree (D) ;
-    cs_free (Ap2) ;	/* free the copy of A->p */
+    cs_free (Ap2) ;     /* free the copy of A->p */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_sep.m b/CSparse/MATLAB/CSparse/cs_sep.m
index 88ba1bb..ee5a0a4 100644
--- a/CSparse/MATLAB/CSparse/cs_sep.m
+++ b/CSparse/MATLAB/CSparse/cs_sep.m
@@ -10,12 +10,11 @@ function [s,as,bs] = cs_sep (A,a,b)
 %
 %   See also CS_DMPERM, CS_NSEP, CS_ESEP, CS_ND.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [p q r s cc rr] = cs_dmperm (A (a,b)) ;
 s = [(a (p (1:rr(2)-1))) (b (q (cc(3):(cc(5)-1))))] ;
 w = ones (1, size (A,1)) ;
 w (s) = 0 ;
-as = a (find (w (a))) ;							    %#ok
-bs = b (find (w (b))) ;							    %#ok
+as = a (find (w (a))) ;                                                     %#ok
+bs = b (find (w (b))) ;                                                     %#ok
diff --git a/CSparse/MATLAB/CSparse/cs_sparse.m b/CSparse/MATLAB/CSparse/cs_sparse.m
index cad6e30..9553fb3 100644
--- a/CSparse/MATLAB/CSparse/cs_sparse.m
+++ b/CSparse/MATLAB/CSparse/cs_sparse.m
@@ -1,4 +1,4 @@
-function A = cs_sparse (i,j,x)						    %#ok
+function A = cs_sparse (i,j,x)                                              %#ok
 %CS_SPARSE convert a triplet form into a sparse matrix.
 %   A = cs_sparse(i,j,x) is identical to A = sparse(i,j,x), except that x must
 %   be real, and the length of i, j, and x must be the same.
@@ -11,7 +11,6 @@ function A = cs_sparse (i,j,x)						    %#ok
 %
 %   See also FIND, SPARSE, SPCONVERT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_sparse mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_sparse_mex.c b/CSparse/MATLAB/CSparse/cs_sparse_mex.c
index 36652ef..4e637cb 100644
--- a/CSparse/MATLAB/CSparse/cs_sparse_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_sparse_mex.c
@@ -11,21 +11,21 @@ void mexFunction
     cs *A, *C, *T, Tmatrix ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: A = cs_sparse(i,j,x)") ;
+        mexErrMsgTxt ("Usage: A = cs_sparse(i,j,x)") ;
     }
-    T = &Tmatrix ;			/* get i,j,x and copy to triplet form */
-    T->nz = mxGetM (pargin [0]) ;
+    T = &Tmatrix ;                      /* get i,j,x and copy to triplet form */
+    T->nz = mxGetNumberOfElements (pargin [0]) ;
     T->p = cs_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
     T->i = cs_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
     cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
     T->x = mxGetPr (pargin [2]) ;
     T->nzmax = T->nz ;
-    C = cs_compress (T) ;		/* create sparse matrix C */
-    cs_dupl (C) ;			/* remove duplicates from C */
-    cs_dropzeros (C) ;			/* remove zeros from C */
-    A = cs_transpose (C, 1) ;		/* A=C' */
+    C = cs_compress (T) ;               /* create sparse matrix C */
+    cs_dupl (C) ;                       /* remove duplicates from C */
+    cs_dropzeros (C) ;                  /* remove zeros from C */
+    A = cs_transpose (C, 1) ;           /* A=C' */
     cs_spfree (C) ;
-    pargout [0] = cs_mex_put_sparse (&A) ;	/* return A */
+    pargout [0] = cs_mex_put_sparse (&A) ;      /* return A */
     cs_free (T->p) ;
     cs_free (T->i) ;
 }
diff --git a/CSparse/MATLAB/CSparse/cs_sqr.m b/CSparse/MATLAB/CSparse/cs_sqr.m
index cdb7d8c..5ede9f5 100644
--- a/CSparse/MATLAB/CSparse/cs_sqr.m
+++ b/CSparse/MATLAB/CSparse/cs_sqr.m
@@ -1,4 +1,4 @@
-function [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr (A)			    %#ok
+function [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr (A)                       %#ok
 %CS_SQR symbolic sparse QR factorization.
 %   [vnz,rnz,parent,c,leftmost,p] = cs_sqr(A): symbolic QR of A(p,:).
 %   [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A) computes the symbolic QR
@@ -18,8 +18,7 @@ function [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr (A)			    %#ok
 %       cspy (A (p,q)) ;
 %
 %   See also CS_AMD, CS_QR.
-%
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_sqr mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_sqr_mex.c b/CSparse/MATLAB/CSparse/cs_sqr_mex.c
index ba06174..4bd36c2 100644
--- a/CSparse/MATLAB/CSparse/cs_sqr_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_sqr_mex.c
@@ -11,30 +11,30 @@ void mexFunction
     double s ;
     css *S ;
     cs Amatrix, *A ;
-    int m, n, order, *p ;
+    csi m, n, order, *p ;
     if (nargout > 7 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A)") ;
+        mexErrMsgTxt ("Usage: [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A)") ;
     }
-    A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
+    A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;        /* get A */
     m = A->m ;
     n = A->n ;
     if (m < n) mexErrMsgTxt ("A must have # rows >= # columns") ;
-    order = (nargout == 7) ? 3 : 0 ;	    /* determine ordering */
-    S = cs_sqr (order, A, 1) ;		    /* symbolic QR ordering & analysis*/
+    order = (nargout == 7) ? 3 : 0 ;        /* determine ordering */
+    S = cs_sqr (order, A, 1) ;              /* symbolic QR ordering & analysis*/
     if (!S) mexErrMsgTxt ("cs_sqr failed") ;
     s = S->lnz ;
-    cs_mex_put_double (1, &s, &(pargout [0])) ; 	    /* return nnz(V) */
+    cs_mex_put_double (1, &s, &(pargout [0])) ;             /* return nnz(V) */
     s = S->unz ;
-    cs_mex_put_double (1, &s, &(pargout [1])) ; 	    /* return nnz(R) */
-    pargout [2] = cs_mex_put_int (S->parent, n, 1, 0) ;	    /* return parent */
-    pargout [3] = cs_mex_put_int (S->cp, n, 0, 0) ;	    /* return c */
+    cs_mex_put_double (1, &s, &(pargout [1])) ;             /* return nnz(R) */
+    pargout [2] = cs_mex_put_int (S->parent, n, 1, 0) ;     /* return parent */
+    pargout [3] = cs_mex_put_int (S->cp, n, 0, 0) ;         /* return c */
     pargout [4] = cs_mex_put_int (S->leftmost, m, 1, 0) ;   /* return leftmost*/
-    p = cs_pinv (S->pinv, S->m2) ;			    /* p = pinv' */
-    pargout [5] = cs_mex_put_int (p, S->m2, 1, 1) ;	    /* return p */
+    p = cs_pinv (S->pinv, S->m2) ;                          /* p = pinv' */
+    pargout [5] = cs_mex_put_int (p, S->m2, 1, 1) ;         /* return p */
     if (nargout > 6)
     {
-	pargout [6] = cs_mex_put_int (S->q, n, 1, 0) ;	    /* return q */
+        pargout [6] = cs_mex_put_int (S->q, n, 1, 0) ;      /* return q */
     }
     cs_sfree (S) ;
 }
diff --git a/CSparse/MATLAB/CSparse/cs_symperm.m b/CSparse/MATLAB/CSparse/cs_symperm.m
index a913553..64e96d3 100644
--- a/CSparse/MATLAB/CSparse/cs_symperm.m
+++ b/CSparse/MATLAB/CSparse/cs_symperm.m
@@ -1,4 +1,4 @@
-function C = cs_symperm (A,p)						    %#ok
+function C = cs_symperm (A,p)                                               %#ok
 %CS_SYMPERM symmetric permutation of a symmetric matrix.
 %   C = cs_symperm(A,p) computes C = A(p,p), but accesses only the
 %   upper triangular part of A, and returns C upper triangular (A and C are
@@ -14,7 +14,6 @@ function C = cs_symperm (A,p)						    %#ok
 %
 %   See also CS_PERMUTE, SUBSREF, TRIU.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_symperm mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_symperm_mex.c b/CSparse/MATLAB/CSparse/cs_symperm_mex.c
index c263eda..5bf4678 100644
--- a/CSparse/MATLAB/CSparse/cs_symperm_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_symperm_mex.c
@@ -9,21 +9,21 @@ void mexFunction
 )
 {
     cs Amatrix, *A, *C, *D ;
-    int ignore, n, *P, *Pinv ;
+    csi ignore, n, *P, *Pinv ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_symperm(A,p)") ;
+        mexErrMsgTxt ("Usage: C = cs_symperm(A,p)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;
     n = A->n ;
-    P = cs_mex_get_int (n, pargin [1], &ignore, 1) ;	/* get P */
-    Pinv = cs_pinv (P, n) ;				/* P=Pinv' */
-    C = cs_symperm (A, Pinv, 1) ;			/* C = A(p,p) */
-    D = cs_transpose (C, 1) ;				/* sort C */
+    P = cs_mex_get_int (n, pargin [1], &ignore, 1) ;    /* get P */
+    Pinv = cs_pinv (P, n) ;                             /* P=Pinv' */
+    C = cs_symperm (A, Pinv, 1) ;                       /* C = A(p,p) */
+    D = cs_transpose (C, 1) ;                           /* sort C */
     cs_spfree (C) ;
     C = cs_transpose (D, 1) ;
     cs_spfree (D) ;
-    pargout [0] = cs_mex_put_sparse (&C) ;		/* return C */
+    pargout [0] = cs_mex_put_sparse (&C) ;              /* return C */
     cs_free (P) ;
     cs_free (Pinv) ;
 }
diff --git a/CSparse/MATLAB/CSparse/cs_thumb_mex.c b/CSparse/MATLAB/CSparse/cs_thumb_mex.c
index 8a1b1d8..675b9e3 100644
--- a/CSparse/MATLAB/CSparse/cs_thumb_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_thumb_mex.c
@@ -19,11 +19,11 @@ void mexFunction
 )
 {
     cs Amatrix, *A ;
-    int m, n, mn, m2, n2, k, s, j, ij, sj, si, p, *Ap, *Ai ;
+    csi m, n, mn, m2, n2, k, s, j, ij, sj, si, p, *Ap, *Ai ;
     double aij, *S, *Ax ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: S = cs_thumb(A,k)") ;
+        mexErrMsgTxt ("Usage: S = cs_thumb(A,k)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
     m = A->m ;
@@ -31,9 +31,9 @@ void mexFunction
     mn = CS_MAX (m,n) ;
     k = (nargin == 1) ? 256 : mxGetScalar (pargin [1]) ;    /* get k */
     /* s = size of each submatrix; A(1:s,1:s) maps to S(1,1) */
-    s = (mn < k) ? 1 : (int) ceil ((double) mn / (double) k) ;
-    m2 = (int) ceil ((double) m / (double) s) ;
-    n2 = (int) ceil ((double) n / (double) s) ;
+    s = (mn < k) ? 1 : (csi) ceil ((double) mn / (double) k) ;
+    m2 = (csi) ceil ((double) m / (double) s) ;
+    n2 = (csi) ceil ((double) n / (double) s) ;
     /* create S */
     pargout [0] = mxCreateDoubleMatrix (m2, n2, mxREAL) ;
     S = mxGetPr (pargout [0]) ;
@@ -42,15 +42,15 @@ void mexFunction
     Ax = A->x ;
     for (j = 0 ; j < n ; j++)
     {
-	sj = j/s ;
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    si = Ai [p] / s ;
-	    ij = INDEX (si,sj,m2) ;
-	    aij = fabs (Ax [p]) ;
-	    if (ISNAN (aij)) aij = BIG_VALUE ;
-	    aij = CS_MIN (BIG_VALUE, aij) ;
-	    S [ij] = CS_MAX (S [ij], aij) ;
-	}
+        sj = j/s ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            si = Ai [p] / s ;
+            ij = INDEX (si,sj,m2) ;
+            aij = fabs (Ax [p]) ;
+            if (ISNAN (aij)) aij = BIG_VALUE ;
+            aij = CS_MIN (BIG_VALUE, aij) ;
+            S [ij] = CS_MAX (S [ij], aij) ;
+        }
     }
 }
diff --git a/CSparse/MATLAB/CSparse/cs_transpose.m b/CSparse/MATLAB/CSparse/cs_transpose.m
index 8cdb65f..a695bdd 100644
--- a/CSparse/MATLAB/CSparse/cs_transpose.m
+++ b/CSparse/MATLAB/CSparse/cs_transpose.m
@@ -1,4 +1,4 @@
-function C = cs_transpose (A)						    %#ok
+function C = cs_transpose (A)                                               %#ok
 %CS_TRANSPOSE transpose a real sparse matrix.
 %   C = cs_transpose(A), computes C = A' where A must be sparse and real.
 %
@@ -9,8 +9,7 @@ function C = cs_transpose (A)						    %#ok
 %
 %   See also TRANSPOSE, CTRANSPOSE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_transpose mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/CSparse/cs_transpose_mex.c b/CSparse/MATLAB/CSparse/cs_transpose_mex.c
index af6a88a..7ed3411 100644
--- a/CSparse/MATLAB/CSparse/cs_transpose_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_transpose_mex.c
@@ -11,9 +11,9 @@ void mexFunction
     cs Amatrix, *A, *C ;
     if (nargout > 1 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: C = cs_transpose(A)") ;
+        mexErrMsgTxt ("Usage: C = cs_transpose(A)") ;
     }
     A = cs_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-    C = cs_transpose (A, 1) ;				    /* C = A' */
-    pargout [0] = cs_mex_put_sparse (&C) ;		    /* return C */
+    C = cs_transpose (A, 1) ;                               /* C = A' */
+    pargout [0] = cs_mex_put_sparse (&C) ;                  /* return C */
 }
diff --git a/CSparse/MATLAB/CSparse/cs_updown.m b/CSparse/MATLAB/CSparse/cs_updown.m
index f4fa3cc..7906f22 100644
--- a/CSparse/MATLAB/CSparse/cs_updown.m
+++ b/CSparse/MATLAB/CSparse/cs_updown.m
@@ -1,4 +1,4 @@
-function L = cs_updown (L, c, parent, sigma)				    %#ok
+function L = cs_updown (L, c, parent, sigma)                                %#ok
 %CS_UPDOWN rank-1 update/downdate of a sparse Cholesky factorization.
 %   L = cs_updown(L,c,parent) computes the rank-1 update L = chol(L*L'+c*c')',
 %   where parent is the elimination tree of L.  c must be a sparse column
@@ -20,7 +20,6 @@ function L = cs_updown (L, c, parent, sigma)				    %#ok
 %
 %   See also CS_ETREE, CS_CHOL, ETREE, CHOLUPDATE, CHOL.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_updown mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_updown_mex.c b/CSparse/MATLAB/CSparse/cs_updown_mex.c
index c9d9b3a..cc94b05 100644
--- a/CSparse/MATLAB/CSparse/cs_updown_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_updown_mex.c
@@ -9,19 +9,19 @@ void mexFunction
 )
 {
     cs Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
-    int ignore, j, k, n, lnz, *parent, sigma = 1, cp [2] ;
+    csi ignore, j, k, n, lnz, *parent, sigma = 1, cp [2] ;
     char sigma_string [20] ;
 
     if (nargout > 1 || nargin < 3 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: L = cs_updown(L,C,parent,sigma)") ;
+        mexErrMsgTxt ("Usage: L = cs_updown(L,C,parent,sigma)") ;
     }
     Lin = cs_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;  /* get input L */
     n = Lin->n ;
     if (nargin > 3 && mxIsChar (pargin [3]))
     {
-	mxGetString (pargin [3], sigma_string, 8) ;
-	sigma = (sigma_string [0] == '-') ? (-1) : 1 ;
+        mxGetString (pargin [3], sigma_string, 8) ;
+        sigma = (sigma_string [0] == '-') ? (-1) : 1 ;
     }
     /* make a copy of L (this can take more work than updating L itself) */
     lnz = Lin->p [n] ;
@@ -29,7 +29,7 @@ void mexFunction
     for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
     for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
     for (k = 0 ; k < lnz ; k++) L->x [k] = Lin->x [k] ;
-    cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;	   /* get C */
+    cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;         /* get C */
     C = cs_mex_get_sparse (&Cmatrix, 0, 1, pargin [1]) ;
     parent = cs_mex_get_int (n, pargin [2], &ignore, 0) ;  /* get parent */
 
@@ -42,12 +42,12 @@ void mexFunction
     cp [0] = 0 ;
     for (k = 0 ; k < C->n ; k++)
     {
-	/* extract C(:,k) */ 
-	cp [1] = C->p [k+1] - C->p [k] ;
-	Cvec->nzmax = cp [1] ;
-	Cvec->i = C->i + C->p [k] ;
-	Cvec->x = C->x + C->p [k] ;
-	cs_updown (L, sigma, Cvec, parent) ;		   /* update/downdate */
+        /* extract C(:,k) */ 
+        cp [1] = C->p [k+1] - C->p [k] ;
+        Cvec->nzmax = cp [1] ;
+        Cvec->i = C->i + C->p [k] ;
+        Cvec->x = C->x + C->p [k] ;
+        cs_updown (L, sigma, Cvec, parent) ;               /* update/downdate */
     }
-    pargout [0] = cs_mex_put_sparse (&L) ;		   /* return new L */ 
+    pargout [0] = cs_mex_put_sparse (&L) ;                 /* return new L */ 
 }
diff --git a/CSparse/MATLAB/CSparse/cs_usolve.m b/CSparse/MATLAB/CSparse/cs_usolve.m
index 842dcfa..996531b 100644
--- a/CSparse/MATLAB/CSparse/cs_usolve.m
+++ b/CSparse/MATLAB/CSparse/cs_usolve.m
@@ -1,4 +1,4 @@
-function x = cs_usolve (U,b)						    %#ok
+function x = cs_usolve (U,b)                                                %#ok
 %CS_USOLVE solve a sparse upper triangular system U*x=b.
 %   x = cs_usolve(U,b) computes x = U\b, U must be lower triangular with a
 %   zero-free diagonal.  b must be a column vector.  x is full if b is full.
@@ -15,7 +15,6 @@ function x = cs_usolve (U,b)						    %#ok
 %
 %   See also CS_LSOLVE, CS_LTSOLVE, CS_UTSOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_usolve mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_usolve_mex.c b/CSparse/MATLAB/CSparse/cs_usolve_mex.c
index 7aad1ed..4bad76d 100644
--- a/CSparse/MATLAB/CSparse/cs_usolve_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_usolve_mex.c
@@ -24,36 +24,36 @@ void mexFunction
 {
     cs Umatrix, Bmatrix, *U, *B, *X ;
     double *x, *b ;
-    int top, nz, p, *xi ;
+    csi top, nz, p, *xi ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_usolve(U,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_usolve(U,b)") ;
     }
     U = cs_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;    /* get U */
     if (mxIsSparse (pargin [1]))
     {
-	B = cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b */
-	cs_mex_check (0, U->n, 1, 0, 1, 1, pargin [1]) ;
-	xi = cs_malloc (2*U->n, sizeof (int)) ;		    /* get workspace */
-	x  = cs_malloc (U->n, sizeof (double)) ;
-	top = cs_spsolve (U, B, 0, xi, x, NULL, 0) ;	    /* x = U\b */
-	X = cs_spalloc (U->n, 1, U->n-top, 1, 0) ;	    /* create sparse x*/
-	X->p [0] = 0 ;
-	nz = 0 ;
-	for (p = top ; p < U->n ; p++)
-	{
-	    X->i [nz] = xi [p] ;
-	    X->x [nz++] = x [xi [p]] ;
-	}
-	X->p [1] = nz ;
-	pargout [0] = cs_mex_put_sparse (&X) ;
-	cs_free (x) ;
-	cs_free (xi) ;
+        B = cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b */
+        cs_mex_check (0, U->n, 1, 0, 1, 1, pargin [1]) ;
+        xi = cs_malloc (2*U->n, sizeof (csi)) ;             /* get workspace */
+        x  = cs_malloc (U->n, sizeof (double)) ;
+        top = cs_spsolve (U, B, 0, xi, x, NULL, 0) ;        /* x = U\b */
+        X = cs_spalloc (U->n, 1, U->n-top, 1, 0) ;          /* create sparse x*/
+        X->p [0] = 0 ;
+        nz = 0 ;
+        for (p = top ; p < U->n ; p++)
+        {
+            X->i [nz] = xi [p] ;
+            X->x [nz++] = x [xi [p]] ;
+        }
+        X->p [1] = nz ;
+        pargout [0] = cs_mex_put_sparse (&X) ;
+        cs_free (x) ;
+        cs_free (xi) ;
     }
     else
     {
-	b = cs_mex_get_double (U->n, pargin [1]) ;	    /* get full b */
-	x = cs_mex_put_double (U->n, b, &(pargout [0])) ;   /* x = b */
-	cs_usolve (U, x) ;				    /* x = U\x */
+        b = cs_mex_get_double (U->n, pargin [1]) ;          /* get full b */
+        x = cs_mex_put_double (U->n, b, &(pargout [0])) ;   /* x = b */
+        cs_usolve (U, x) ;                                  /* x = U\x */
     }
 }
diff --git a/CSparse/MATLAB/CSparse/cs_utsolve.m b/CSparse/MATLAB/CSparse/cs_utsolve.m
index 05c8037..c90d30e 100644
--- a/CSparse/MATLAB/CSparse/cs_utsolve.m
+++ b/CSparse/MATLAB/CSparse/cs_utsolve.m
@@ -1,4 +1,4 @@
-function x = cs_utsolve (U,b)						    %#ok
+function x = cs_utsolve (U,b)                                               %#ok
 %CS_UTSOLVE solve a sparse lower triangular system U'*x=b.
 %   x = cs_utsolve(U,b) computes x = U'\b, U must be upper triangular with a
 %   zero-free diagonal.  b must be a full vector.
@@ -13,7 +13,6 @@ function x = cs_utsolve (U,b)						    %#ok
 %
 %   See also CS_LSOLVE, CS_LTSOLVE, CS_USOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_utsolve mexFunction not found') ;
diff --git a/CSparse/MATLAB/CSparse/cs_utsolve_mex.c b/CSparse/MATLAB/CSparse/cs_utsolve_mex.c
index 37fc147..8993f9e 100644
--- a/CSparse/MATLAB/CSparse/cs_utsolve_mex.c
+++ b/CSparse/MATLAB/CSparse/cs_utsolve_mex.c
@@ -12,10 +12,10 @@ void mexFunction
     double *x, *b ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_utsolve(U,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_utsolve(U,b)") ;
     }
     U = cs_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;    /* get U */
-    b = cs_mex_get_double (U->n, pargin [1]) ;		    /* get b */
-    x = cs_mex_put_double (U->n, b, &(pargout [0])) ;	    /* x = b */
-    cs_utsolve (U, x) ;					    /* x = U'\x */
+    b = cs_mex_get_double (U->n, pargin [1]) ;              /* get b */
+    x = cs_mex_put_double (U->n, b, &(pargout [0])) ;       /* x = b */
+    cs_utsolve (U, x) ;                                     /* x = U'\x */
 }
diff --git a/CSparse/MATLAB/CSparse/cspy.m b/CSparse/MATLAB/CSparse/cspy.m
index a86f01c..eaff82f 100644
--- a/CSparse/MATLAB/CSparse/cspy.m
+++ b/CSparse/MATLAB/CSparse/cspy.m
@@ -17,8 +17,7 @@ function [s,M,H] = cspy (A,res)
 %
 %   See also CS_DMSPY, SPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if nargin < 2
     res = 256 ;
@@ -29,9 +28,9 @@ h = h (64:-1:1,:) ;
 h = h (30:end,:) ;
 hmax = size (h,1) ;
 
-h (1,:)  = [1 1 1] ;	% white for zero
-h (2,:)  = [1 .9 .5] ;	% light orange for tiny entries
-h (hmax,:) = [0 0 0] ;	% black for very large entries
+h (1,:)  = [1 1 1] ;    % white for zero
+h (2,:)  = [1 .9 .5] ;  % light orange for tiny entries
+h (hmax,:) = [0 0 0] ;  % black for very large entries
 colormap (h) ;
 
 if (nargin == 0)
@@ -41,17 +40,17 @@ if (nargin == 0)
 end
 
 % convert complex, integers, and strings to real double
-if (~isreal (A) | ~isa (A, 'double') | ~issparse (A))			    %#ok
+if (~isreal (A) | ~isa (A, 'double') | ~issparse (A))                       %#ok
     A = sparse (abs (double (A))) ;
 end
 
 [m1 n1] = size (A) ;
-if (m1 == 0 | n1 == 0)							    %#ok
+if (m1 == 0 | n1 == 0)                                                      %#ok
     A (1,1) = 0 ;
 end
 [m1 n1] = size (A) ;
 
-S = cs_thumb (A,res) ;	    % get the thumbnail of the matrix
+S = cs_thumb (A,res) ;      % get the thumbnail of the matrix
 [m n] = size (S) ;
 [i j x] = find (S) ;
 x = log10 (x) ;
@@ -67,12 +66,12 @@ else
     itiny = find (x <= tiny) ;
     ibig = find (x >= big) ;
     x (imid) = 1 + ceil ((hmax-2) * (x (imid) - tiny) / (big - tiny)) ;
-    x (itiny) = 1 ;							    %#ok
-    x (ibig) = hmax-1 ;							    %#ok
+    x (itiny) = 1 ;                                                         %#ok
+    x (ibig) = hmax-1 ;                                                     %#ok
     S = full (1 + sparse (i,j,x,m,n)) ;
 
 %   title (sprintf ('tiny: %-8.2g   median: %-8.2g   big: %-8.2g\n', ...
-%	10^tiny, 10^med, 10^big)) ;
+%       10^tiny, 10^med, 10^big)) ;
 end
 
 % draw the matrix
@@ -82,7 +81,7 @@ axis ([-1 n+1 -1 m+1]) ;
 axis off
 
 % draw a box around the whole matrix
-e = ceil (max (m1,n1) / max (m,n)) ;	% scale factor
+e = ceil (max (m1,n1) / max (m,n)) ;    % scale factor
 hold on
 drawbox (1,m1+1,1,n1+1,'k',1,e) ;
 hold off
@@ -92,9 +91,9 @@ if (nargout > 0)
     s = e ;
 end
 if (nargout > 1)
-    M = S ;		% image
+    M = S ;             % image
 end
 if (nargout > 2)
-    H = h ;		% colormap
+    H = h ;             % colormap
 end
 
diff --git a/CSparse/MATLAB/CSparse/private/drawbox.m b/CSparse/MATLAB/CSparse/private/drawbox.m
index d46d5d7..b86c66d 100644
--- a/CSparse/MATLAB/CSparse/private/drawbox.m
+++ b/CSparse/MATLAB/CSparse/private/drawbox.m
@@ -5,10 +5,9 @@ function drawbox (r1,r2,c1,c2,color,w,e)
 %       drawbox (r1,r2,c1,c2,color,w,e)
 %   See also drawboxes, plot
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-if (r1 == r2 | c1 == c2)						    %#ok
+if (r1 == r2 | c1 == c2)                                                    %#ok
     return
 end
 
@@ -24,6 +23,6 @@ else
     c2 = ceil ((c2 - 1) / e) + .5 ;
 end
 
-if (c2 > c1 | r2 > r1)							    %#ok
+if (c2 > c1 | r2 > r1)                                                      %#ok
     plot ([c1 c2 c2 c1 c1], [r1 r1 r2 r2 r1], color, 'LineWidth', w) ;
 end
diff --git a/CSparse/MATLAB/CSparse/private/drawboxes.m b/CSparse/MATLAB/CSparse/private/drawboxes.m
index 86e3bb5..c80e1fe 100644
--- a/CSparse/MATLAB/CSparse/private/drawboxes.m
+++ b/CSparse/MATLAB/CSparse/private/drawboxes.m
@@ -4,26 +4,25 @@ function drawboxes (nb, e, r, s)
 %   drawboxes (nb, e, r, s)
 %   See also drawbox, plot
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nb > 1)
     if (e == 1)
-	r1 = r (1:nb) - .5 ;
-	r2 = r (2:nb+1) - .5 ;
-	c1 = s (1:nb) - .5 ;
-	c2 = s (2:nb+1) - .5 ;
+        r1 = r (1:nb) - .5 ;
+        r2 = r (2:nb+1) - .5 ;
+        c1 = s (1:nb) - .5 ;
+        c2 = s (2:nb+1) - .5 ;
     else
-	r1 = ceil (r (1:nb) / e) - .5 ;
-	r2 = ceil ((r (2:nb+1) - 1) / e) + .5 ;
-	c1 = ceil (s (1:nb) / e) - .5 ;
-	c2 = ceil ((s (2:nb+1) - 1) / e) + .5 ;
+        r1 = ceil (r (1:nb) / e) - .5 ;
+        r2 = ceil ((r (2:nb+1) - 1) / e) + .5 ;
+        c1 = ceil (s (1:nb) / e) - .5 ;
+        c2 = ceil ((s (2:nb+1) - 1) / e) + .5 ;
     end
     kk = find (diff (c1) > 0 | diff (c2) > 0 | diff (r1) > 0 | diff (r2) > 0) ;
     kk = [1 kk+1] ;
     for k = kk
-	plot ([c1(k) c2(k) c2(k) c1(k) c1(k)], ...
-	      [r1(k) r1(k) r2(k) r2(k) r1(k)], 'k', 'LineWidth', 1) ;
+        plot ([c1(k) c2(k) c2(k) c1(k) c1(k)], ...
+              [r1(k) r1(k) r2(k) r2(k) r1(k)], 'k', 'LineWidth', 1) ;
     end
 end
 
diff --git a/CSparse/MATLAB/Demo/README.txt b/CSparse/MATLAB/Demo/README.txt
index bcc9eec..4233231 100644
--- a/CSparse/MATLAB/Demo/README.txt
+++ b/CSparse/MATLAB/Demo/README.txt
@@ -1 +1,3 @@
 Demo for MATLAB interface for CSparse.  See Contents.m for details.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CSparse/MATLAB/Demo/cs_demo.m b/CSparse/MATLAB/Demo/cs_demo.m
index a9cee29..bfb8020 100644
--- a/CSparse/MATLAB/Demo/cs_demo.m
+++ b/CSparse/MATLAB/Demo/cs_demo.m
@@ -6,8 +6,7 @@ function cs_demo (do_pause, matrixpath)
 %   cs_demo
 % See also: cs_demo1, cs_demo2, cs_demo3
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 help cs_demo
 if (nargin < 1)
@@ -17,7 +16,6 @@ if (nargin < 2)
     matrixpath = [] ;
 end
 
-figure (1)
 clf
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
@@ -33,15 +31,15 @@ help cs_demo3
 cs_demo3 (do_pause, matrixpath) ;
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex_1
+help private/ex_1
 ex_1
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex2
+help private/ex2
 ex2
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex3
+help private/ex3
 ex3
 
 fprintf ('\nAll CSparse demos finished.\n') ;
diff --git a/CSparse/MATLAB/Demo/cs_demo1.m b/CSparse/MATLAB/Demo/cs_demo1.m
index cd023cd..a2c586b 100644
--- a/CSparse/MATLAB/Demo/cs_demo1.m
+++ b/CSparse/MATLAB/Demo/cs_demo1.m
@@ -7,8 +7,7 @@ function cs_demo1 (matrixpath)
 %   cs_demo1
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 1)
     matrixpath = [] ;
@@ -16,39 +15,39 @@ end
 
 if (isempty (matrixpath))
     try
-	% older versions of MATLAB do not have an input argument to mfilename
-	p = mfilename ('fullpath') ;
-	t = strfind (p, filesep) ;
-	matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
+        % older versions of MATLAB do not have an input argument to mfilename
+        p = mfilename ('fullpath') ;
+        t = strfind (p, '/') ;
+        matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
     catch
-	% assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
-	matrixpath = '../../Matrix' ;
+        % assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
+        matrixpath = '../../Matrix' ;
     end
 end
 
 t1 = load ([matrixpath '/t1']) ;
 
-T = t1									    %#ok
-A  = sparse    (T(:,1)+1, T(:,2)+1, T(:,3))				    %#ok
-A2 = cs_sparse (T(:,1)+1, T(:,2)+1, T(:,3))				    %#ok
+T = t1                                                                      %#ok
+A  = sparse    (T(:,1)+1, T(:,2)+1, T(:,3))                                 %#ok
+A2 = cs_sparse (T(:,1)+1, T(:,2)+1, T(:,3))                                 %#ok
 fprintf ('A difference: %g\n', norm (A-A2,1)) ;
 % CSparse/Demo/cs_demo1.c also clears the triplet matrix T at this point:
 % clear T 
 clf
 subplot (2,2,1) ; cspy (A) ; title ('A', 'FontSize', 16) ;
-AT = A'									    %#ok
-AT2 = cs_transpose (A)							    %#ok
+AT = A'                                                                     %#ok
+AT2 = cs_transpose (A)                                                      %#ok
 fprintf ('AT difference: %g\n', norm (AT-AT2,1)) ;
 subplot (2,2,2) ; cspy (AT) ; title ('A''', 'FontSize', 16) ;
 n = size (A,2) ;
 I = speye (n) ;
 C = A*AT ;
-C2 = cs_multiply (A, AT)						    %#ok
+C2 = cs_multiply (A, AT)                                                    %#ok
 fprintf ('C difference: %g\n', norm (C-C2,1)) ;
 subplot (2,2,3) ; cspy (C) ; title ('C=A*A''', 'FontSize', 16) ;
 cnorm = norm (C,1) ;
-D = C + I*cnorm								    %#ok
-D2 = cs_add (C, I, 1, cnorm)						    %#ok
+D = C + I*cnorm                                                             %#ok
+D2 = cs_add (C, I, 1, cnorm)                                                %#ok
 fprintf ('D difference: %g\n', norm (D-D2,1)) ;
 subplot (2,2,4) ; cspy (D) ; title ('D=C+I*norm(C,1)', 'FontSize', 16) ;
 % CSparse/Demo/cs_demo1.c clears all matrices at this point:
diff --git a/CSparse/MATLAB/Demo/cs_demo2.m b/CSparse/MATLAB/Demo/cs_demo2.m
index 98486fa..72ae2f5 100644
--- a/CSparse/MATLAB/Demo/cs_demo2.m
+++ b/CSparse/MATLAB/Demo/cs_demo2.m
@@ -6,8 +6,7 @@ function cs_demo2 (do_pause, matrixpath)
 %   cs_demo2
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 2)
     matrixpath = [] ;
@@ -15,13 +14,13 @@ end
 
 if (isempty (matrixpath))
     try
-	% older versions of MATLAB do not have an input argument to mfilename
-	p = mfilename ('fullpath') ;
-	t = strfind (p, filesep) ;
-	matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
+        % older versions of MATLAB do not have an input argument to mfilename
+        p = mfilename ('fullpath') ;
+        t = strfind (p, '/') ;
+        matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
     catch
-	% assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
-	matrixpath = '../../Matrix' ;
+        % assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
+        matrixpath = '../../Matrix' ;
     end
 end
 
@@ -37,6 +36,6 @@ for i = 1:length(matrices)
     [C sym] = get_problem (matrixpath, name, 1e-14) ;
     demo2 (C, sym, name) ;
     if (do_pause)
-	input ('Hit enter to continue: ') ;
+        input ('Hit enter to continue: ') ;
     end
 end
diff --git a/CSparse/MATLAB/Demo/cs_demo3.m b/CSparse/MATLAB/Demo/cs_demo3.m
index 2527884..a40c271 100644
--- a/CSparse/MATLAB/Demo/cs_demo3.m
+++ b/CSparse/MATLAB/Demo/cs_demo3.m
@@ -6,8 +6,7 @@ function cs_demo3 (do_pause, matrixpath)
 %   cs_demo3
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 2)
     matrixpath = [] ;
@@ -15,13 +14,13 @@ end
 
 if (isempty (matrixpath))
     try
-	% older versions of MATLAB do not have an input argument to mfilename
-	p = mfilename ('fullpath') ;
-	t = strfind (p, filesep) ;
-	matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
+        % older versions of MATLAB do not have an input argument to mfilename
+        p = mfilename ('fullpath') ;
+        t = strfind (p, '/') ;
+        matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
     catch
-	% assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
-	matrixpath = '../../Matrix' ;
+        % assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
+        matrixpath = '../../Matrix' ;
     end
 end
 
@@ -36,6 +35,6 @@ for i = 1:length(matrices)
     [C sym] = get_problem (matrixpath, name, 1e-14) ;
     demo3 (C, sym, name) ;
     if (do_pause)
-	input ('Hit enter to continue: ') ;
+        input ('Hit enter to continue: ') ;
     end
 end
diff --git a/CSparse/MATLAB/Demo/private/demo2.m b/CSparse/MATLAB/Demo/private/demo2.m
index 5b8e805..91b8b55 100644
--- a/CSparse/MATLAB/Demo/private/demo2.m
+++ b/CSparse/MATLAB/Demo/private/demo2.m
@@ -5,8 +5,7 @@ function demo2 (C, sym, name)
 %   demo2 (C, 1, 'name of system')
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clf
 subplot (2,2,1) ; cspy (C) ;
@@ -27,33 +26,33 @@ if (sprnk ~= sprank (C))
 end
 
 if (sprnk < min (m,n))
-    return ;		    % return if structurally singular
+    return ;                % return if structurally singular
 end
 
 
 % the following code is not in the C version of this demo:
 if (m == n)
     if (sym)
-	try
-	    [L,p] = cs_chol (C) ;		%#ok
-	    subplot (2,2,4) ;
-	    cspy (L+triu(L',1)) ; title ('L+L''') ;
-	catch
-	    % tol = 0.001 ;
-	    [L,U,p,q] = cs_lu (C,0.001) ;	%#ok
-	    subplot (2,2,4) ;
-	    cspy (L+U-speye(n)) ; title ('L+U') ;
-	end
+        try
+            [L,p] = cs_chol (C) ;               %#ok
+            subplot (2,2,4) ;
+            cspy (L+triu(L',1)) ; title ('L+L''') ;
+        catch
+            % tol = 0.001 ;
+            [L,U,p,q] = cs_lu (C,0.001) ;       %#ok
+            subplot (2,2,4) ;
+            cspy (L+U-speye(n)) ; title ('L+U') ;
+        end
     else
-	[L,U,p,q] = cs_lu (C) ;		%#ok
-	subplot (2,2,4) ;
-	cspy (L+U-speye(n)) ; title ('L+U') ;
+        [L,U,p,q] = cs_lu (C) ;         %#ok
+        subplot (2,2,4) ;
+        cspy (L+U-speye(n)) ; title ('L+U') ;
     end
 else
     if (m < n)
-	[V,beta,p,R,q] = cs_qr (C') ;		%#ok
+        [V,beta,p,R,q] = cs_qr (C') ;           %#ok
     else
-	[V,beta,p,R,q] = cs_qr (C) ;		%#ok
+        [V,beta,p,R,q] = cs_qr (C) ;            %#ok
     end
     subplot (2,2,4) ;
     cspy (V+R) ; title ('V+R') ;
@@ -62,12 +61,12 @@ drawnow
 
 % continue with the MATLAB equivalent of the C cs_demo2 program
 for order = [0 3]
-    if (order == 0 & m > 1000)						    %#ok
-	continue ;
+    if (order == 0 & m > 1000)                                              %#ok
+        continue ;
     end
     fprintf ('QR    ') ;
     print_order (order) ;
-    b = rhs (m) ;	    % compute right-hand-side
+    b = rhs (m) ;           % compute right-hand-side
     tic ;
     x = cs_qrsol (C, b, order) ;
     fprintf ('time %8.2f ', toc) ;
@@ -79,12 +78,12 @@ if (m ~= n)
 end
 
 for order = 0:3
-    if (order == 0 & m > 1000)						    %#ok
-	continue ;
+    if (order == 0 & m > 1000)                                              %#ok
+        continue ;
     end
     fprintf ('LU    ') ;
     print_order (order) ;
-    b = rhs (m) ;	    % compute right-hand-side
+    b = rhs (m) ;           % compute right-hand-side
     tic ;
     x = cs_lusol (C, b, order) ;
     fprintf ('time %8.2f ', toc) ;
@@ -96,12 +95,12 @@ if (sym == 0)
 end
 
 for order = 0:1
-    if (order == 0 & m > 1000)						    %#ok
-	continue ;
+    if (order == 0 & m > 1000)                                              %#ok
+        continue ;
     end
     fprintf ('Chol  ') ;
     print_order (order) ;
-    b = rhs (m) ;	    % compute right-hand-side
+    b = rhs (m) ;           % compute right-hand-side
     tic ;
     x = cs_cholsol (C, b, order) ;
     fprintf ('time %8.2f ', toc) ;
diff --git a/CSparse/MATLAB/Demo/private/demo3.m b/CSparse/MATLAB/Demo/private/demo3.m
index 3d627f8..8cfd77a 100644
--- a/CSparse/MATLAB/Demo/private/demo3.m
+++ b/CSparse/MATLAB/Demo/private/demo3.m
@@ -5,9 +5,7 @@ function demo3 (C, sym, name)
 %   demo3 (C, 1, 'name of system')
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clf
 subplot (2,2,1) ; cspy (C) ;
@@ -15,7 +13,7 @@ title (name, 'FontSize', 16, 'Interpreter', 'none') ;
 drawnow
 
 [m n] = size (C) ;
-if (m ~= n | ~sym)							    %#ok
+if (m ~= n | ~sym)                                                          %#ok
     return ;
 end
 
@@ -64,10 +62,10 @@ x (p) = x ;
 t = toc ;
 
 w2 = sparse (n,1) ;
-w2 (p) = w ;			% w2 = P'*w
+w2 (p) = w ;                    % w2 = P'*w
 wt = cs_transpose (w2) ;
 ww = cs_multiply (w2,wt) ;
-E = cs_add (C, ww, 1, 1) ;	% E = C + w2*w2' ;
+E = cs_add (C, ww, 1, 1) ;      % E = C + w2*w2' ;
 
 fprintf ('update:   time: %8.2f (incl solve) ', t1+t) ;
 print_resid (E, x, b) ;
diff --git a/CSparse/MATLAB/Demo/private/ex2.m b/CSparse/MATLAB/Demo/private/ex2.m
index 2b814c9..c241d59 100644
--- a/CSparse/MATLAB/Demo/private/ex2.m
+++ b/CSparse/MATLAB/Demo/private/ex2.m
@@ -5,8 +5,7 @@ function ex2 (n)
 %   ex2
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 1)
     n = 30 ;
@@ -22,11 +21,11 @@ xx = zeros (5*n^2, 1) ;
 k = 1 ;
 for j = 0:n-1
     for i = 0:n-1
-	s = j*n+i + 1 ;
-	ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
-	jj (k:k+4) = [s s s s s] ;
-	xx (k:k+4) = [-1 -1 4 -1 -1] ;
-	k = k + 5 ;
+        s = j*n+i + 1 ;
+        ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
+        jj (k:k+4) = [s s s s s] ;
+        xx (k:k+4) = [-1 -1 4 -1 -1] ;
+        k = k + 5 ;
     end
 end
 
diff --git a/CSparse/MATLAB/Demo/private/ex3.m b/CSparse/MATLAB/Demo/private/ex3.m
index b425900..07fa540 100644
--- a/CSparse/MATLAB/Demo/private/ex3.m
+++ b/CSparse/MATLAB/Demo/private/ex3.m
@@ -5,8 +5,7 @@ function ex3
 %   ex3
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 t1 = zeros (50,1) ;
 t2 = zeros (50,1) ;
diff --git a/CSparse/MATLAB/Demo/private/ex_1.m b/CSparse/MATLAB/Demo/private/ex_1.m
index 6a14818..90d41e7 100644
--- a/CSparse/MATLAB/Demo/private/ex_1.m
+++ b/CSparse/MATLAB/Demo/private/ex_1.m
@@ -6,8 +6,7 @@ function ex_1
 %   ex_1
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = 1000 ;
 nz = 1e5 ;
@@ -30,7 +29,7 @@ A1 = A ;
 tic
 % method 2: triplet form, one entry at a time
 rand ('state', 0) ;
-ii = zeros (nz, 1) ;	% preallocate ii, jj, and xx
+ii = zeros (nz, 1) ;    % preallocate ii, jj, and xx
 jj = zeros (nz, 1) ;
 xx = zeros (nz, 1) ;
 for k = 1:nz
@@ -55,11 +54,11 @@ xx = zeros (len, 1) ;
 for k = 1:nz
     % compute some arbitrary entry and add it into the matrix
     if (k > len)
-	% double the size of ii,jj,xx
-	len = 2*len ;
-	ii (len) = 0 ;
-	jj (len) = 0 ;
-	xx (len) = 0 ;
+        % double the size of ii,jj,xx
+        len = 2*len ;
+        ii (len) = 0 ;
+        jj (len) = 0 ;
+        xx (len) = 0 ;
     end
     ii (k) = 1 + fix (n * rand (1)) ;
     jj (k) = 1 + fix (n * rand (1)) ;
diff --git a/CSparse/MATLAB/Demo/private/frand.m b/CSparse/MATLAB/Demo/private/frand.m
index 4d3b16a..931c103 100644
--- a/CSparse/MATLAB/Demo/private/frand.m
+++ b/CSparse/MATLAB/Demo/private/frand.m
@@ -7,8 +7,8 @@ function A = frand (n,nel,s)
 %   A = frand (100, 100, 4) ; cspy (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
+
 ss = s^2 ;
 nz = nel*ss ;
 ii = zeros (nz,1) ;
diff --git a/CSparse/MATLAB/Demo/private/get_problem.m b/CSparse/MATLAB/Demo/private/get_problem.m
index a2dc3d6..32ac416 100644
--- a/CSparse/MATLAB/Demo/private/get_problem.m
+++ b/CSparse/MATLAB/Demo/private/get_problem.m
@@ -7,8 +7,7 @@ function [C, sym] = get_problem (prefix, name, tol)
 %    [C, sym] = get_problem ('', 'west0067') ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('\n------------------- Matrix: %s\n', name) ;
 
@@ -20,8 +19,6 @@ s = find (name == '/') ;
 if (isempty (s))
     s = 0 ;
 end
-% f = sprintf ('%s..%s..%sMatrix%s%s', ...
-%    prefix, filesep, filesep, filesep, name (s+1:end)) ;
 
 % load the triplet version of the matrix
 T = load ([ prefix '/' name(s+1:end) ]) ;
diff --git a/CSparse/MATLAB/Demo/private/is_sym.m b/CSparse/MATLAB/Demo/private/is_sym.m
index 6a84215..b7a2d01 100644
--- a/CSparse/MATLAB/Demo/private/is_sym.m
+++ b/CSparse/MATLAB/Demo/private/is_sym.m
@@ -6,8 +6,7 @@ function sym = is_sym (A)
 %   sym = is_sym (A) ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 sym = 0 ;
@@ -15,9 +14,9 @@ if (m == n)
     is_upper = nnz (tril (A,-1)) == 0 ;
     is_lower = nnz (triu (A,1)) == 0 ;
     if (is_upper)
-	sym = 1 ;
+        sym = 1 ;
     elseif (is_lower)
-	sym = -1 ;
+        sym = -1 ;
     end
 end
 
diff --git a/CSparse/MATLAB/Demo/private/mesh2d1.m b/CSparse/MATLAB/Demo/private/mesh2d1.m
index 39ca45f..23a2985 100644
--- a/CSparse/MATLAB/Demo/private/mesh2d1.m
+++ b/CSparse/MATLAB/Demo/private/mesh2d1.m
@@ -4,20 +4,19 @@ function A = mesh2d1 (n)
 %   A = mesh2d1 (30) ;  % a 30-by-30 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-ii = zeros (5*n^2, 1) ;	    % preallocate ii, jj, and xx
+ii = zeros (5*n^2, 1) ;     % preallocate ii, jj, and xx
 jj = zeros (5*n^2, 1) ;
 xx = zeros (5*n^2, 1) ;
 k = 1 ;
 for j = 0:n-1
     for i = 0:n-1
-	s = j*n+i + 1 ;
-	ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
-	jj (k:k+4) = [s s s s s] ;
-	xx (k:k+4) = [-1 -1 4 -1 -1] ;
-	k = k + 5 ;
+        s = j*n+i + 1 ;
+        ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
+        jj (k:k+4) = [s s s s s] ;
+        xx (k:k+4) = [-1 -1 4 -1 -1] ;
+        k = k + 5 ;
     end
 end
 % remove entries beyond the boundary
diff --git a/CSparse/MATLAB/Demo/private/mesh2d2.m b/CSparse/MATLAB/Demo/private/mesh2d2.m
index f3133bf..b3f3823 100644
--- a/CSparse/MATLAB/Demo/private/mesh2d2.m
+++ b/CSparse/MATLAB/Demo/private/mesh2d2.m
@@ -4,8 +4,7 @@ function A = mesh2d2 (n)
 %   A = mesh2d2 (30) ;  % a 30-by-30 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 nn = 1:n^2 ;
 ii = [nn-n ; nn-1 ; nn ; nn+1 ; nn+n] ;
diff --git a/CSparse/MATLAB/Demo/private/mesh3d1.m b/CSparse/MATLAB/Demo/private/mesh3d1.m
index 2c431d9..5a6c0ca 100644
--- a/CSparse/MATLAB/Demo/private/mesh3d1.m
+++ b/CSparse/MATLAB/Demo/private/mesh3d1.m
@@ -4,8 +4,7 @@ function [A, keep, ii, jj, xx] = mesh3d1 (n)
 %   A = mesh3d1 (10) ;  % a 10-by-10-by-10 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 ii = zeros (7*n^3, 1) ;
 jj = zeros (7*n^3, 1) ;
@@ -13,20 +12,20 @@ xx = zeros (7*n^3, 1) ;
 t = 1 ;
 for k = 0:n-1
     for j = 0:n-1
-	for i = 0:n-1
-	    s = k*n^2 + j*n+i + 1 ;
-	    ii (t:t+6) = [
-		    (k-1)*n^2 + j*n+i 
-		    k*n^2 + (j-1)*n+i 
-		    k*n^2 + j*n+(i-1)
-		    k*n^2 + j*n+i
-		    k*n^2 + j*n+(i+1)
-		    k*n^2 + (j+1)*n+i
-		    (k+1)*n^2 + j*n+i ]' + 1 ;
-	    jj (t:t+6) = [s s s s s s s] ;
-	    xx (t:t+6) = [-1 -1 -1 6 -1 -1 -1] ;
-	    t = t + 7 ;
-	end
+        for i = 0:n-1
+            s = k*n^2 + j*n+i + 1 ;
+            ii (t:t+6) = [
+                    (k-1)*n^2 + j*n+i 
+                    k*n^2 + (j-1)*n+i 
+                    k*n^2 + j*n+(i-1)
+                    k*n^2 + j*n+i
+                    k*n^2 + j*n+(i+1)
+                    k*n^2 + (j+1)*n+i
+                    (k+1)*n^2 + j*n+i ]' + 1 ;
+            jj (t:t+6) = [s s s s s s s] ;
+            xx (t:t+6) = [-1 -1 -1 6 -1 -1 -1] ;
+            t = t + 7 ;
+        end
     end
 end
 keep = find (ii >= 1 & ii <= n^3 & jj >= 1 & jj <= n^3) ;
diff --git a/CSparse/MATLAB/Demo/private/mesh3d2.m b/CSparse/MATLAB/Demo/private/mesh3d2.m
index 4a644f3..35365ee 100644
--- a/CSparse/MATLAB/Demo/private/mesh3d2.m
+++ b/CSparse/MATLAB/Demo/private/mesh3d2.m
@@ -4,8 +4,7 @@ function A = mesh3d2 (n)
 %   A = mesh3d2 (10) ;  % a 10-by-10-by-10 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 nn = 1:n^3 ;
 ii = [nn-n^2 ; nn-n ; nn-1 ; nn ; nn+1 ; nn+n ; nn+n^2] ;
diff --git a/CSparse/MATLAB/Demo/private/print_order.m b/CSparse/MATLAB/Demo/private/print_order.m
index 4f65d4b..b00138f 100644
--- a/CSparse/MATLAB/Demo/private/print_order.m
+++ b/CSparse/MATLAB/Demo/private/print_order.m
@@ -4,18 +4,17 @@ function print_order (order)
 %   print_order (0)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 switch (fix (order))
     case 0
-	fprintf ('natural    ') ;
+        fprintf ('natural    ') ;
     case 1
-	fprintf ('amd(A+A'')  ') ;
+        fprintf ('amd(A+A'')  ') ;
     case 2
-	fprintf ('amd(S''*S)  ') ;
+        fprintf ('amd(S''*S)  ') ;
     case 3
-	fprintf ('amd(A''*A)  ') ;
+        fprintf ('amd(A''*A)  ') ;
     otherwise
-	fprintf ('undefined  ') ;
+        fprintf ('undefined  ') ;
 end
diff --git a/CSparse/MATLAB/Demo/private/print_resid.m b/CSparse/MATLAB/Demo/private/print_resid.m
index 4b22047..c5676bd 100644
--- a/CSparse/MATLAB/Demo/private/print_resid.m
+++ b/CSparse/MATLAB/Demo/private/print_resid.m
@@ -5,8 +5,7 @@ function print_resid (A, x, b)
 %   print_resid (A, x, b) ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('resid: %8.2e\n', ...
     norm (A*x-b,inf) / (norm(A,1)*norm(x,inf) + norm(b,inf))) ;
diff --git a/CSparse/MATLAB/Demo/private/rhs.m b/CSparse/MATLAB/Demo/private/rhs.m
index f7bc531..8fb5fdd 100644
--- a/CSparse/MATLAB/Demo/private/rhs.m
+++ b/CSparse/MATLAB/Demo/private/rhs.m
@@ -4,7 +4,6 @@ function b = rhs (m)
 %   b = rhs (30) ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 b = ones (m,1) + (0:m-1)'/m ;
diff --git a/CSparse/MATLAB/Makefile b/CSparse/MATLAB/Makefile
deleted file mode 100644
index 4636246..0000000
--- a/CSparse/MATLAB/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-all:
-	( cd CSparse ; $(MAKE) )
-	( cd Test ; $(MAKE) )
-
-clean:
-	( cd CSparse ; $(MAKE) clean )
-	( cd Test ; $(MAKE) clean )
-
-purge:
-	( cd CSparse ; $(MAKE) purge )
-	( cd Test ; $(MAKE) purge )
-
-distclean: purge
-
diff --git a/CSparse/MATLAB/README.txt b/CSparse/MATLAB/README.txt
index 6153439..52cc200 100644
--- a/CSparse/MATLAB/README.txt
+++ b/CSparse/MATLAB/README.txt
@@ -16,3 +16,5 @@ permanently, for future MATLAB sessions).
 
 To run the MATLAB demo programs, run cs_demo in the Demo directory.
 To run the MATLAB test programs, run testall in the Test directory.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CSparse/MATLAB/Test/Makefile b/CSparse/MATLAB/Test/Makefile
deleted file mode 100644
index 94f345d..0000000
--- a/CSparse/MATLAB/Test/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-MEX = mex -O
-AR = ar cr
-RANLIB = ranlib
-
-all: cs_sparse2.mexglx \
-	cs_ipvec.mexglx \
-	cs_pvec.mexglx \
-	cs_reach.mexglx \
-	cs_maxtransr.mexglx \
-	cs_reachr.mexglx \
-	cs_rowcnt.mexglx \
-	cs_frand.mexglx
-
-mexcsparse:
-	( cd ../CSparse ; make mexcsparse.a )
-
-I = -I../../Include -I../CSparse
-
-cs_ipvec.mexglx: cs_ipvec_mex.c mexcsparse
-	$(MEX) -output cs_ipvec $< $(I) ../CSparse/mexcsparse.a
-
-cs_pvec.mexglx: cs_pvec_mex.c mexcsparse
-	$(MEX) -output cs_pvec $< $(I) ../CSparse/mexcsparse.a
-
-cs_reach.mexglx: cs_reach_mex.c mexcsparse
-	$(MEX) -output cs_reach $< $(I) ../CSparse/mexcsparse.a
-
-cs_sparse2.mexglx: cs_sparse2_mex.c mexcsparse
-	$(MEX) -output cs_sparse2 $< $(I) ../CSparse/mexcsparse.a
-
-cs_maxtransr.mexglx: cs_maxtransr_mex.c mexcsparse
-	$(MEX) -output cs_maxtransr $< $(I) ../CSparse/mexcsparse.a
-
-cs_reachr.mexglx: cs_reachr_mex.c mexcsparse
-	$(MEX) -output cs_reachr $< $(I) ../CSparse/mexcsparse.a
-
-cs_rowcnt.mexglx: cs_rowcnt_mex.c mexcsparse
-	$(MEX) -output cs_rowcnt $< $(I) ../CSparse/mexcsparse.a
-
-cs_frand.mexglx: cs_frand_mex.c mexcsparse
-	$(MEX) -output cs_frand $< $(I) ../CSparse/mexcsparse.a
-
-
-
-clean:
-	rm -f *.o
-
-distclean: clean
-	rm -f *.mex* *.dll *.a
-
-purge: distclean
diff --git a/CSparse/MATLAB/Test/README.txt b/CSparse/MATLAB/Test/README.txt
index d42da19..8764e0b 100644
--- a/CSparse/MATLAB/Test/README.txt
+++ b/CSparse/MATLAB/Test/README.txt
@@ -2,3 +2,5 @@ Test for MATLAB interface for CSparse.  Type "testall" to run all the tests.
 
 Also includes "textbook" codes for the book "Direct Methods for Sparse Linear
 Systems", which are not part of CSparse proper, but are used in the tests.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CSparse/MATLAB/Test/another_colormap.m b/CSparse/MATLAB/Test/another_colormap.m
index 50342e9..91dca13 100644
--- a/CSparse/MATLAB/Test/another_colormap.m
+++ b/CSparse/MATLAB/Test/another_colormap.m
@@ -5,9 +5,7 @@ function another_colormap
 %   another_colormap
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 j = jet (128) ;
 j = j (48:112, :) ;
@@ -19,7 +17,7 @@ j = j (48:112, :) ;
 
 
 % white = [1 1 1] ;
-% gray = [.5 .5 .5] ;							    %#ok
+% gray = [.5 .5 .5] ;                                                       %#ok
 
 % j = [white ; purple ; j ] ;
 disp ('j = ') ;
diff --git a/CSparse/MATLAB/Test/check_if_same.m b/CSparse/MATLAB/Test/check_if_same.m
index 9a81e92..d73306b 100644
--- a/CSparse/MATLAB/Test/check_if_same.m
+++ b/CSparse/MATLAB/Test/check_if_same.m
@@ -5,18 +5,17 @@ function check_if_same (p1,p2)
 %   check_if_same (1:5, 2:6)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
     if (isempty (p1))
-	if (~isempty (p2))
-	    p1		%#ok
-	    p2		%#ok
-	    error ('empty!') ;
-	end
+        if (~isempty (p2))
+            p1          %#ok
+            p2          %#ok
+            error ('empty!') ;
+        end
     elseif (any (p1 ~= p2))
-	p1		%#ok
-	p2		%#ok
-	error ('!') ;
+        p1              %#ok
+        p2              %#ok
+        error ('!') ;
     end
 
diff --git a/CSparse/MATLAB/Test/chol_downdate.m b/CSparse/MATLAB/Test/chol_downdate.m
index 8cf9794..b780fd5 100644
--- a/CSparse/MATLAB/Test/chol_downdate.m
+++ b/CSparse/MATLAB/Test/chol_downdate.m
@@ -4,8 +4,7 @@ function [L, w] = chol_downdate (L, w)
 %   [L, w] = chol_downdate (L, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -13,7 +12,7 @@ for j = 1:n
     alpha = w (j) / L (j,j) ;
     beta2 = sqrt (beta^2 - alpha^2) ;
     if (~isreal (beta2))
-	error ('not positive definite') ;
+        error ('not positive definite') ;
     end
     gamma = alpha / (beta2 * beta) ;
     delta = beta2 / beta ;
@@ -21,7 +20,7 @@ for j = 1:n
     w (j) = alpha ;
     beta = beta2 ;
     if (j == n)
-	return
+        return
     end
     w (j+1:n) = w (j+1:n) - alpha * L (j+1:n,j) ;
     L (j+1:n,j) = delta * L (j+1:n,j) - gamma * w (j+1:n) ;
diff --git a/CSparse/MATLAB/Test/chol_example.m b/CSparse/MATLAB/Test/chol_example.m
index f488f7d..ca9bfb3 100644
--- a/CSparse/MATLAB/Test/chol_example.m
+++ b/CSparse/MATLAB/Test/chol_example.m
@@ -4,9 +4,7 @@ function chol_example
 %   chol_example
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 D = 10 ;
 X = 1 ;
diff --git a/CSparse/MATLAB/Test/chol_left.m b/CSparse/MATLAB/Test/chol_left.m
index ec75416..e1e65f0 100644
--- a/CSparse/MATLAB/Test/chol_left.m
+++ b/CSparse/MATLAB/Test/chol_left.m
@@ -4,8 +4,7 @@ function L = chol_left (A)
 %   L = chol_left (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 L = zeros (n) ;
diff --git a/CSparse/MATLAB/Test/chol_left2.m b/CSparse/MATLAB/Test/chol_left2.m
index c809b9e..47626e0 100644
--- a/CSparse/MATLAB/Test/chol_left2.m
+++ b/CSparse/MATLAB/Test/chol_left2.m
@@ -4,8 +4,7 @@ function L = chol_left2 (A)
 %   L = chol_left2 (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 L = sparse (n,n) ;
@@ -13,7 +12,7 @@ a = sparse (n,1) ;
 for k = 1:n
     a (k:n) = A (k:n,k) ;
     for j = find (L (k,:))
-	a (k:n) = a (k:n) - L (k:n,j) * L (k,j) ;
+        a (k:n) = a (k:n) - L (k:n,j) * L (k,j) ;
     end
     L (k,k) = sqrt (a (k)) ;
     L (k+1:n,k) = a (k+1:n) / L (k,k) ;
diff --git a/CSparse/MATLAB/Test/chol_right.m b/CSparse/MATLAB/Test/chol_right.m
index 7aa60e1..85baed1 100644
--- a/CSparse/MATLAB/Test/chol_right.m
+++ b/CSparse/MATLAB/Test/chol_right.m
@@ -4,8 +4,7 @@ function L = chol_right (A)
 %   L = chol_right (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A) ;
 L = zeros (n) ;
diff --git a/CSparse/MATLAB/Test/chol_super.m b/CSparse/MATLAB/Test/chol_super.m
index 1744130..5212a2b 100644
--- a/CSparse/MATLAB/Test/chol_super.m
+++ b/CSparse/MATLAB/Test/chol_super.m
@@ -4,8 +4,7 @@ function L = chol_super (A,s)
 %   L = chol_super (A,s)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A) ;
 L = zeros (n) ;
diff --git a/CSparse/MATLAB/Test/chol_up.m b/CSparse/MATLAB/Test/chol_up.m
index 09d0218..9917c06 100644
--- a/CSparse/MATLAB/Test/chol_up.m
+++ b/CSparse/MATLAB/Test/chol_up.m
@@ -4,8 +4,7 @@ function L = chol_up (A)
 %   L = chol_up (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A) ;
 L = zeros (n) ;
diff --git a/CSparse/MATLAB/Test/chol_update.m b/CSparse/MATLAB/Test/chol_update.m
index 5d95152..3bf47a5 100644
--- a/CSparse/MATLAB/Test/chol_update.m
+++ b/CSparse/MATLAB/Test/chol_update.m
@@ -4,8 +4,7 @@ function [L, w] = chol_update (L, w)
 %   [L, w] = chol_update (L, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -18,7 +17,7 @@ for j = 1:n
     w (j) = alpha ;
     beta = beta2 ;
     if (j == n)
-	return
+        return
     end
     w1 = w (j+1:n) ;
     w (j+1:n) = w (j+1:n) - alpha * L (j+1:n,j) ;
diff --git a/CSparse/MATLAB/Test/chol_updown.m b/CSparse/MATLAB/Test/chol_updown.m
index 2f286c9..e26df2d 100644
--- a/CSparse/MATLAB/Test/chol_updown.m
+++ b/CSparse/MATLAB/Test/chol_updown.m
@@ -4,8 +4,7 @@ function [L, w] = chol_updown (L, sigma, w)
 %   [L, w] = chol_updown (L, sigma, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -18,18 +17,18 @@ for k = 1:n
     beta2 = sqrt (beta^2 + sigma*alpha^2) ;
     gamma = sigma * alpha / (beta2 * beta) ;
     if (sigma > 0)
-	% update
-	delta = beta / beta2 ;
-	L (k,k) = delta * L (k,k) + gamma * w (k) ;
-	w1 = w (k+1:n) ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w1 ;
+        % update
+        delta = beta / beta2 ;
+        L (k,k) = delta * L (k,k) + gamma * w (k) ;
+        w1 = w (k+1:n) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w1 ;
     else
-	% downdate
-	delta = beta2 / beta ;
-	L (k,k) = delta * L (k,k) ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w (k+1:n) ;
+        % downdate
+        delta = beta2 / beta ;
+        L (k,k) = delta * L (k,k) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w (k+1:n) ;
     end
     w (k) = alpha ;
     beta = beta2 ;
diff --git a/CSparse/MATLAB/Test/choldn.m b/CSparse/MATLAB/Test/choldn.m
index 10ea9d9..8c9fdcb 100644
--- a/CSparse/MATLAB/Test/choldn.m
+++ b/CSparse/MATLAB/Test/choldn.m
@@ -6,8 +6,7 @@ function L = choldn (Lold,w)
 %   L = cholnd (Lold,w)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (Lold,1) ;
 L = Lold ;
@@ -23,7 +22,7 @@ for i = 1:n
     a = w (i) / L(i,i) ;
     alpha = alpha - a^2 ;
     if (alpha <= 0)
-	error ('not pos def') ;
+        error ('not pos def') ;
     end
     beta_new = sqrt (alpha) ;
     b = beta_new / beta ;
@@ -35,8 +34,8 @@ for i = 1:n
     wnew (i) = a ;
 
     for k = i:n
-	w (k)   = w (k) - a * L (k,i) ;
-	L (k,i) = b * L (k,i) - c * w(k) ;
+        w (k)   = w (k) - a * L (k,i) ;
+        L (k,i) = b * L (k,i) - c * w(k) ;
     end
 
 end
diff --git a/CSparse/MATLAB/Test/cholup.m b/CSparse/MATLAB/Test/cholup.m
index e8f196c..af00aaf 100644
--- a/CSparse/MATLAB/Test/cholup.m
+++ b/CSparse/MATLAB/Test/cholup.m
@@ -5,8 +5,7 @@ function L = cholup (Lold,w)
 %   L = cholup (Lold,w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (Lold,1) ;
 L = [Lold w] ;
diff --git a/CSparse/MATLAB/Test/cholupdown.m b/CSparse/MATLAB/Test/cholupdown.m
index fe2eb0e..119fc02 100644
--- a/CSparse/MATLAB/Test/cholupdown.m
+++ b/CSparse/MATLAB/Test/cholupdown.m
@@ -4,9 +4,7 @@ function L = cholupdown (Lold, sigma, w)
 %   L = cholupdown (Lold, sigma, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (Lold,1) ;
@@ -22,30 +20,30 @@ for k = 1:n
 
     if (sigma < 0)
 
-	% downdate
-	bratio = beta_new / beta ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k,k) = bratio * L (k,k) ;
-	L (k+1:n,k) = bratio * L (k+1:n,k) - gamma*w(k+1:n) ;
+        % downdate
+        bratio = beta_new / beta ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k,k) = bratio * L (k,k) ;
+        L (k+1:n,k) = bratio * L (k+1:n,k) - gamma*w(k+1:n) ;
 
     else
 
-	% update
-	bratio = beta / beta_new ;
+        % update
+        bratio = beta / beta_new ;
 
-%	wold = w (k+1:n) ;
-%	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-%	L (k    ,k) = bratio * L (k    ,k) + gamma*w(k) ;
-%	L (k+1:n,k) = bratio * L (k+1:n,k) + gamma*wold ;
+%       wold = w (k+1:n) ;
+%       w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+%       L (k    ,k) = bratio * L (k    ,k) + gamma*w(k) ;
+%       L (k+1:n,k) = bratio * L (k+1:n,k) + gamma*wold ;
 
-	L (k,k) = bratio * L (k,k) + gamma*w(k) ;
-	for i = k+1:n 
+        L (k,k) = bratio * L (k,k) + gamma*w(k) ;
+        for i = k+1:n 
 
-	    wold = w (i) ;
-	    w (i) = w (i) - alpha * L (i,k) ;
-	    L (i,k) = bratio * L (i,k) + gamma*wold ;
+            wold = w (i) ;
+            w (i) = w (i) - alpha * L (i,k) ;
+            L (i,k) = bratio * L (i,k) + gamma*wold ;
 
-	end
+        end
 
     end
 
diff --git a/CSparse/MATLAB/Test/cond1est.m b/CSparse/MATLAB/Test/cond1est.m
index e634168..da16d80 100644
--- a/CSparse/MATLAB/Test/cond1est.m
+++ b/CSparse/MATLAB/Test/cond1est.m
@@ -4,11 +4,10 @@ function c = cond1est (A)
 %   c = cond1est(A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
-if (m ~= n | ~isreal (A))						    %#ok
+if (m ~= n | ~isreal (A))                                                   %#ok
     error ('A must be square and real') ;
 end
 if isempty(A)
@@ -16,7 +15,7 @@ if isempty(A)
     return ;
 end
 [L,U,P,Q] = lu (A) ;
-if (~isempty (find (abs (diag (U)) == 0)))				    %#ok
+if (~isempty (find (abs (diag (U)) == 0)))                                  %#ok
     c = Inf ;
 else
     c = norm (A,1) * norm1est (L,U,P,Q) ;
diff --git a/CSparse/MATLAB/Test/cs_fiedler.m b/CSparse/MATLAB/Test/cs_fiedler.m
index 75c2b6a..d196e6e 100644
--- a/CSparse/MATLAB/Test/cs_fiedler.m
+++ b/CSparse/MATLAB/Test/cs_fiedler.m
@@ -10,18 +10,17 @@ function [p,v,d] = cs_fiedler (A)
 %
 %   See also CS_SCC, EIGS, SYMRCM, UNMESH.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n < 2)
     p = 1 ; v = 1 ; d = 0 ; return ;
 end
-opt.disp = 0 ;			    % turn off printing in eigs
+opt.disp = 0 ;                      % turn off printing in eigs
 opt.tol = sqrt (eps) ;
-S = A | A' | speye (n) ;	    % compute the Laplacian of A
+S = A | A' | speye (n) ;            % compute the Laplacian of A
 S = diag (sum (S)) - S ;
 [v,d] = eigs (S, 2, 'SA', opt) ;    % find the Fiedler vector v
 v = v (:,2) ;
 d = d (2,2) ;
-[ignore p] = sort (v) ;		    % sort it to get p
+[ignore p] = sort (v) ;             % sort it to get p
diff --git a/CSparse/MATLAB/Test/cs_frand.m b/CSparse/MATLAB/Test/cs_frand.m
index c75069f..596449a 100644
--- a/CSparse/MATLAB/Test/cs_frand.m
+++ b/CSparse/MATLAB/Test/cs_frand.m
@@ -1,4 +1,4 @@
-function A = cs_frand (n,nel,s)						    %#ok
+function A = cs_frand (n,nel,s)                                             %#ok
 %CS_FRAND generate a random finite-element matrix
 % A = cs_frand (n,nel,s) creates an n-by-n sparse matrix consisting of nel
 % finite elements, each of which are of size s-by-s with random symmetric
@@ -8,8 +8,7 @@ function A = cs_frand (n,nel,s)						    %#ok
 %   A = cs_frand (100, 100, 3) ;
 % See also cs_demo.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_frand mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/Test/cs_frand_mex.c b/CSparse/MATLAB/Test/cs_frand_mex.c
index a801322..b7f1942 100644
--- a/CSparse/MATLAB/Test/cs_frand_mex.c
+++ b/CSparse/MATLAB/Test/cs_frand_mex.c
@@ -5,23 +5,23 @@
  * See also MATLAB/Demo/private/frand.m */
 
 static
-cs *cs_frand (int n, int nel, int s)
+cs *cs_frand (csi n, csi nel, csi s)
 {
-    int ss = s*s, nz = nel*ss, e, i, j, *P ;
+    csi ss = s*s, nz = nel*ss, e, i, j, *P ;
     cs *A, *T = cs_spalloc (n, n, nz, 1, 1) ;
     if (!T) return (NULL) ;
-    P = cs_malloc (s, sizeof (int)) ;
+    P = cs_malloc (s, sizeof (csi)) ;
     if (!P) return (cs_spfree (T)) ;
     for (e = 0 ; e < nel ; e++)
     {
-	for (i = 0 ; i < s ; i++) P [i] = rand () % n ;
-	for (j = 0 ; j < s ; j++)
-	{
-	    for (i = 0 ; i < s ; i++)
-	    {
-		cs_entry (T, P [i], P [j], rand () / (double) RAND_MAX) ;
-	    }
-	}
+        for (i = 0 ; i < s ; i++) P [i] = rand () % n ;
+        for (j = 0 ; j < s ; j++)
+        {
+            for (i = 0 ; i < s ; i++)
+            {
+                cs_entry (T, P [i], P [j], rand () / (double) RAND_MAX) ;
+            }
+        }
     }
     for (i = 0 ; i < n ; i++) cs_entry (T, i, i, 1) ;
     A = cs_compress (T) ;
@@ -37,11 +37,11 @@ void mexFunction
     const mxArray *pargin [ ]
 )
 {
-    int n, nel, s ;
+    csi n, nel, s ;
     cs *A, *AT ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: C = cs_frand(n,nel,s)") ;
+        mexErrMsgTxt ("Usage: C = cs_frand(n,nel,s)") ;
     }
     n = mxGetScalar (pargin [0]) ;
     nel = mxGetScalar (pargin [1]) ;
diff --git a/CSparse/MATLAB/Test/cs_ipvec.m b/CSparse/MATLAB/Test/cs_ipvec.m
index f86bab6..38b6f98 100644
--- a/CSparse/MATLAB/Test/cs_ipvec.m
+++ b/CSparse/MATLAB/Test/cs_ipvec.m
@@ -1,12 +1,11 @@
-function x = cs_ipvec (b,p)						    %#ok
+function x = cs_ipvec (b,p)                                                 %#ok
 %CS_IPVEC x(p)=b
 %
 % Example:
 %   x = cs_ipvec (b,p)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_ipvec mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/Test/cs_ipvec_mex.c b/CSparse/MATLAB/Test/cs_ipvec_mex.c
index 880972d..91879d4 100644
--- a/CSparse/MATLAB/Test/cs_ipvec_mex.c
+++ b/CSparse/MATLAB/Test/cs_ipvec_mex.c
@@ -8,12 +8,12 @@ void mexFunction
     const mxArray *pargin [ ]
 )
 {
-    int n, k, *p ;
+    csi n, k, *p ;
     double *x, *b, *xx ;
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_ipvec(b,p)") ;
+        mexErrMsgTxt ("Usage: x = cs_ipvec(b,p)") ;
     }
 
     b = mxGetPr (pargin [0]) ;
@@ -21,13 +21,13 @@ void mexFunction
 
     if (n != mxGetNumberOfElements (pargin [1]))
     {
-	mexErrMsgTxt ("b or p wrong size") ;
+        mexErrMsgTxt ("b or p wrong size") ;
     }
 
     pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
 
     xx = mxGetPr (pargin [1]) ;
-    p = cs_malloc (n, sizeof (int)) ;
+    p = cs_malloc (n, sizeof (csi)) ;
     for (k = 0 ; k < n ; k++) p [k] = xx [k] - 1 ;
 
     x = mxGetPr (pargout [0]) ;
diff --git a/CSparse/MATLAB/Test/cs_maxtransr.m b/CSparse/MATLAB/Test/cs_maxtransr.m
index df9bca9..979af9c 100644
--- a/CSparse/MATLAB/Test/cs_maxtransr.m
+++ b/CSparse/MATLAB/Test/cs_maxtransr.m
@@ -1,11 +1,10 @@
-function p = cs_maxtransr(A)						    %#ok
+function p = cs_maxtransr(A)                                                %#ok
 %CS_MAXTRANSR recursive maximum matching algorithm
 % Example:
 %   p = cs_maxtransr(A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_maxtransr mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/Test/cs_maxtransr_mex.c b/CSparse/MATLAB/Test/cs_maxtransr_mex.c
index 7aaef50..a6f4d7a 100644
--- a/CSparse/MATLAB/Test/cs_maxtransr_mex.c
+++ b/CSparse/MATLAB/Test/cs_maxtransr_mex.c
@@ -1,52 +1,52 @@
 #include "cs_mex.h"
 /* find an augmenting path starting at column j and extend the match if found */
 static
-int augment (int k, cs *A, int *jmatch, int *cheap, int *w, int j)
+csi augment (csi k, cs *A, csi *jmatch, csi *cheap, csi *w, csi j)
 {
-    int found = 0, p, i = -1, *Ap = A->p, *Ai = A->i ;
+    csi found = 0, p, i = -1, *Ap = A->p, *Ai = A->i ;
     /* --- Start depth-first-search at node j ------------------------------- */
-    w [j] = k ;				    /* mark j as visited for kth path */
+    w [j] = k ;                             /* mark j as visited for kth path */
     for (p = cheap [j] ; p < Ap [j+1] && !found ; p++)
     {
-	i = Ai [p] ;			    /* try a cheap assignment (i,j) */
-	found = (jmatch [i] == -1) ;
+        i = Ai [p] ;                        /* try a cheap assignment (i,j) */
+        found = (jmatch [i] == -1) ;
     }
-    cheap [j] = p ;			    /* start here next time for j */
+    cheap [j] = p ;                         /* start here next time for j */
     /* --- Depth-first-search of neighbors of j ----------------------------- */
     for (p = Ap [j] ; p < Ap [j+1] && !found ; p++)
     {
-	i = Ai [p] ;			    /* consider row i */
-	if (w [jmatch [i]] == k) continue ; /* skip col jmatch [i] if marked */
-	found = augment (k, A, jmatch, cheap, w, jmatch [i]) ;
+        i = Ai [p] ;                        /* consider row i */
+        if (w [jmatch [i]] == k) continue ; /* skip col jmatch [i] if marked */
+        found = augment (k, A, jmatch, cheap, w, jmatch [i]) ;
     }
-    if (found) jmatch [i] = j ;		    /* augment jmatch if path found */
+    if (found) jmatch [i] = j ;             /* augment jmatch if path found */
     return (found) ;
 }
 
 /* find a maximum transveral */
 static
-int *maxtrans (cs *A)   /* returns jmatch [0..m-1] */
+csi *maxtrans (cs *A)   /* returns jmatch [0..m-1] */
 {
-    int i, j, k, n, m, *Ap, *jmatch, *w, *cheap ;
-    if (!A) return (NULL) ;			    /* check inputs */
+    csi i, j, k, n, m, *Ap, *jmatch, *w, *cheap ;
+    if (!A) return (NULL) ;                         /* check inputs */
     n = A->n ; m = A->m ; Ap = A->p ;
-    jmatch = cs_malloc (m, sizeof (int)) ;	    /* allocate result */
-    w = cs_malloc (2*n, sizeof (int)) ;		    /* allocate workspace */
+    jmatch = cs_malloc (m, sizeof (csi)) ;          /* allocate result */
+    w = cs_malloc (2*n, sizeof (csi)) ;             /* allocate workspace */
     if (!w || !jmatch) return (cs_idone (jmatch, NULL, w, 0)) ;
     cheap = w + n ;
     for (j = 0 ; j < n ; j++) cheap [j] = Ap [j] ;  /* for cheap assignment */
-    for (j = 0 ; j < n ; j++) w [j] = -1 ;	    /* all columns unflagged */
-    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;	    /* no rows matched yet */
+    for (j = 0 ; j < n ; j++) w [j] = -1 ;          /* all columns unflagged */
+    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;     /* no rows matched yet */
     for (k = 0 ; k < n ; k++) augment (k, A, jmatch, cheap, w, k) ;
     return (cs_idone (jmatch, NULL, w, 1)) ;
 }
 
 /* invert a maximum matching */
-static int *invmatch (int *jmatch, int m, int n)
+static csi *invmatch (csi *jmatch, csi m, csi n)
 {
-    int i, j, *imatch ;
+    csi i, j, *imatch ;
     if (!jmatch) return (NULL) ;
-    imatch = cs_malloc (n, sizeof (int)) ;
+    imatch = cs_malloc (n, sizeof (csi)) ;
     if (!imatch) return (NULL) ;
     for (j = 0 ; j < n ; j++) imatch [j] = -1 ;
     for (i = 0 ; i < m ; i++) if (jmatch [i] >= 0) imatch [jmatch [i]] = i ;
@@ -63,11 +63,11 @@ void mexFunction
 {
     cs *A, Amatrix ;
     double *x ;
-    int i, m, n, *imatch, *jmatch ;
+    csi i, m, n, *imatch, *jmatch ;
 
     if (nargout > 1 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: p = cr_maxtransr(A)") ;
+        mexErrMsgTxt ("Usage: p = cr_maxtransr(A)") ;
     }
 
     /* get inputs */
@@ -76,7 +76,7 @@ void mexFunction
     n = A->n ;
 
     jmatch = maxtrans (A) ;
-    imatch = invmatch (jmatch, m, n) ;	/* imatch = inverse of jmatch */
+    imatch = invmatch (jmatch, m, n) ;  /* imatch = inverse of jmatch */
 
     pargout [0] = mxCreateDoubleMatrix (1, n, mxREAL) ;
     x = mxGetPr (pargout [0]) ;
diff --git a/CSparse/MATLAB/Test/cs_pvec.m b/CSparse/MATLAB/Test/cs_pvec.m
index bbd3a87..fc9a7c0 100644
--- a/CSparse/MATLAB/Test/cs_pvec.m
+++ b/CSparse/MATLAB/Test/cs_pvec.m
@@ -1,12 +1,11 @@
-function x = cs_pvec (b,p)						    %#ok
+function x = cs_pvec (b,p)                                                  %#ok
 %CS_PVEC x=b(p)
 %
 % Example:
 %   x = cs_pvec (b,p)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_pvec mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/Test/cs_pvec_mex.c b/CSparse/MATLAB/Test/cs_pvec_mex.c
index d72065b..5e9d3e9 100644
--- a/CSparse/MATLAB/Test/cs_pvec_mex.c
+++ b/CSparse/MATLAB/Test/cs_pvec_mex.c
@@ -8,12 +8,12 @@ void mexFunction
     const mxArray *pargin [ ]
 )
 {
-    int n, k, *p ;
+    csi n, k, *p ;
     double *x, *b, *xx ;
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_pvec(b,p)") ;
+        mexErrMsgTxt ("Usage: x = cs_pvec(b,p)") ;
     }
 
     b = mxGetPr (pargin [0]) ;
@@ -21,13 +21,13 @@ void mexFunction
 
     if (n != mxGetNumberOfElements (pargin [1]))
     {
-	mexErrMsgTxt ("b or p wrong size") ;
+        mexErrMsgTxt ("b or p wrong size") ;
     }
 
     pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
 
     xx = mxGetPr (pargin [1]) ;
-    p = cs_malloc (n, sizeof (int)) ;
+    p = cs_malloc (n, sizeof (csi)) ;
     for (k = 0 ; k < n ; k++) p [k] = xx [k] - 1 ;
 
     x = mxGetPr (pargout [0]) ;
diff --git a/CSparse/MATLAB/Test/cs_q1.m b/CSparse/MATLAB/Test/cs_q1.m
index 45a51ec..30e2fb4 100644
--- a/CSparse/MATLAB/Test/cs_q1.m
+++ b/CSparse/MATLAB/Test/cs_q1.m
@@ -4,8 +4,7 @@ function Q = cs_q1 (V, Beta, p)
 %   Q = cs_q1 (V, beta, p)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (V) ;
 Q = speye (m) ;
@@ -14,6 +13,6 @@ if (nargin > 2)
 end
 for i = 1:m
     for k = 1:n
-	Q (i,:) = Q (i,:) - ((Q(i,:) * V(:,k)) * Beta(k)) * V(:,k)' ;
+        Q (i,:) = Q (i,:) - ((Q(i,:) * V(:,k)) * Beta(k)) * V(:,k)' ;
     end
 end
diff --git a/CSparse/MATLAB/Test/cs_reach.m b/CSparse/MATLAB/Test/cs_reach.m
index 2e68e7a..2fdefce 100644
--- a/CSparse/MATLAB/Test/cs_reach.m
+++ b/CSparse/MATLAB/Test/cs_reach.m
@@ -1,4 +1,4 @@
-function x = cs_reach(L,b)						    %#ok
+function x = cs_reach(L,b)                                                  %#ok
 %CS_REACH non-recursive reach (interface to CSparse cs_reach)
 % find nonzero pattern of x=L\sparse(b).  L must be sparse, real, and lower
 % triangular.  b must be a real sparse vector.
@@ -7,8 +7,7 @@ function x = cs_reach(L,b)						    %#ok
 %   x = cs_reach(L,b)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_reach mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/Test/cs_reach_mex.c b/CSparse/MATLAB/Test/cs_reach_mex.c
index f180637..aa2109d 100644
--- a/CSparse/MATLAB/Test/cs_reach_mex.c
+++ b/CSparse/MATLAB/Test/cs_reach_mex.c
@@ -12,21 +12,21 @@ void mexFunction
 {
     cs Lmatrix, Bmatrix, *L, *B ;
     double *x ;
-    int k, i, j, top, *xi, *perm ;
+    csi k, i, j, top, *xi, *perm ;
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_reach(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_reach(L,b)") ;
     }
 
     /* get inputs */
     L = cs_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;
     B = cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;
     cs_mex_check (0, L->n, 1, 0, 1, 1, pargin [1]) ;
-    perm = cs_malloc (L->n, sizeof (int)) ;
+    perm = cs_malloc (L->n, sizeof (csi)) ;
     for (k = 0 ; k < L->n ; k++) perm [k] = k ;
 
-    xi = cs_calloc (3*L->n, sizeof (int)) ;
+    xi = cs_calloc (3*L->n, sizeof (csi)) ;
 
     top = cs_reach (L, B, 0, xi, perm) ;
 
diff --git a/CSparse/MATLAB/Test/cs_reachr.m b/CSparse/MATLAB/Test/cs_reachr.m
index d6bbfc7..d8f8f75 100644
--- a/CSparse/MATLAB/Test/cs_reachr.m
+++ b/CSparse/MATLAB/Test/cs_reachr.m
@@ -1,4 +1,4 @@
-function x = cs_reachr(L,b)						    %#ok
+function x = cs_reachr(L,b)                                                 %#ok
 %CS_REACHR recursive reach (interface to CSparse cs_reachr)
 % find nonzero pattern of x=L\sparse(b).  L must be sparse, real, and lower
 % triangular.  b must be a real sparse vector.
@@ -7,8 +7,7 @@ function x = cs_reachr(L,b)						    %#ok
 %   x = cs_reachr(L,b)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 
 error ('cs_reach mexFunction not found') ;
diff --git a/CSparse/MATLAB/Test/cs_reachr_mex.c b/CSparse/MATLAB/Test/cs_reachr_mex.c
index f5af2aa..38e4b0a 100644
--- a/CSparse/MATLAB/Test/cs_reachr_mex.c
+++ b/CSparse/MATLAB/Test/cs_reachr_mex.c
@@ -3,34 +3,34 @@
  * triangular.  b must be a real sparse vector. */
 
 static
-void dfsr (int j, const cs *L, int *top, int *xi, int *w)
+void dfsr (csi j, const cs *L, csi *top, csi *xi, csi *w)
 {
-    int p ;
-    w [j] = 1 ;					/* mark node j */
-    for (p = L->p [j] ; p < L->p [j+1] ; p++)	/* for each i in L(:,j) */
+    csi p ;
+    w [j] = 1 ;                                 /* mark node j */
+    for (p = L->p [j] ; p < L->p [j+1] ; p++)   /* for each i in L(:,j) */
     {
-	if (w [L->i [p]] != 1)			/* if i is unmarked */
-	{
-	    dfsr (L->i [p], L, top, xi, w) ;	/* start a dfs at i */
-	}
+        if (w [L->i [p]] != 1)                  /* if i is unmarked */
+        {
+            dfsr (L->i [p], L, top, xi, w) ;    /* start a dfs at i */
+        }
     }
-    xi [--(*top)] = j ;				/* push j onto the stack */
+    xi [--(*top)] = j ;                         /* push j onto the stack */
 }
 
 /* w [0..n-1] == 0 on input, <= 1 on output.  size n */
 static
-int reachr (const cs *L, const cs *B, int *xi, int *w)
+csi reachr (const cs *L, const cs *B, csi *xi, csi *w)
 {
-    int p, n = L->n ;
-    int top = n ;				/* stack is empty */
-    for (p = B->p [0] ; p < B->p [1] ; p++)	/* for each i in pattern of b */
+    csi p, n = L->n ;
+    csi top = n ;                               /* stack is empty */
+    for (p = B->p [0] ; p < B->p [1] ; p++)     /* for each i in pattern of b */
     {
-	if (w [B->i [p]] != 1)			/* if i is unmarked */
-	{
-	    dfsr (B->i [p], L, &top, xi, w) ;	/* start a dfs at i */
-	}
+        if (w [B->i [p]] != 1)                  /* if i is unmarked */
+        {
+            dfsr (B->i [p], L, &top, xi, w) ;   /* start a dfs at i */
+        }
     }
-    return (top) ;				/* return top of stack */
+    return (top) ;                              /* return top of stack */
 }
 
 void mexFunction
@@ -43,11 +43,11 @@ void mexFunction
 {
     cs Lmatrix, Bmatrix, *L, *B ;
     double *x ;
-    int i, j, top, *xi ;
+    csi i, j, top, *xi ;
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_reachr(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_reachr(L,b)") ;
     }
 
     /* get inputs */
@@ -55,7 +55,7 @@ void mexFunction
     B = cs_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;
     cs_mex_check (0, L->n, 1, 0, 1, 1, pargin [1]) ;
 
-    xi = cs_calloc (2*L->n, sizeof (int)) ;
+    xi = cs_calloc (2*L->n, sizeof (csi)) ;
 
     top = reachr (L, B, xi, xi + L->n) ;
 
diff --git a/CSparse/MATLAB/Test/cs_rowcnt.m b/CSparse/MATLAB/Test/cs_rowcnt.m
index d57d661..1c4f25f 100644
--- a/CSparse/MATLAB/Test/cs_rowcnt.m
+++ b/CSparse/MATLAB/Test/cs_rowcnt.m
@@ -1,4 +1,4 @@
-function r = cs_rowcnt(A,parent,post)					    %#ok
+function r = cs_rowcnt(A,parent,post)                                       %#ok
 %CS_ROWCNT row counts for sparse Cholesky
 % Compute the row counts of the Cholesky factor L of the matrix A.  Uses
 % the lower triangular part of A.
@@ -7,9 +7,7 @@ function r = cs_rowcnt(A,parent,post)					    %#ok
 %   r = cs_rowcnt(A,parent,post)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_rowcnt mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/Test/cs_rowcnt_mex.c b/CSparse/MATLAB/Test/cs_rowcnt_mex.c
index 9c1e710..3012182 100644
--- a/CSparse/MATLAB/Test/cs_rowcnt_mex.c
+++ b/CSparse/MATLAB/Test/cs_rowcnt_mex.c
@@ -4,49 +4,49 @@
 #include "cs_mex.h"
 
 static
-void firstdesc (int n, int *parent, int *post, int *first, int *level)
+void firstdesc (csi n, csi *parent, csi *post, csi *first, csi *level)
 {
-    int len, i, k, r, s ;
+    csi len, i, k, r, s ;
     for (i = 0 ; i < n ; i++) first [i] = -1 ;
     for (k = 0 ; k < n ; k++)
     {
-	i = post [k] ;	    /* node i of etree is kth postordered node */
-	len = 0 ;	    /* traverse from i towards the root */
-	for (r = i ; r != -1 && first [r] == -1 ; r = parent [r], len++)
-	    first [r] = k ;
-	len += (r == -1) ? (-1) : level [r] ;	/* root node or end of path */
-	for (s = i ; s != r ; s = parent [s]) level [s] = len-- ;
+        i = post [k] ;      /* node i of etree is kth postordered node */
+        len = 0 ;           /* traverse from i towards the root */
+        for (r = i ; r != -1 && first [r] == -1 ; r = parent [r], len++)
+            first [r] = k ;
+        len += (r == -1) ? (-1) : level [r] ;   /* root node or end of path */
+        for (s = i ; s != r ; s = parent [s]) level [s] = len-- ;
     }
 }
 
 static
-int *rowcnt (cs *A, int *parent, int *post) /* return rowcount [0..n-1] */
+csi *rowcnt (cs *A, csi *parent, csi *post) /* return rowcount [0..n-1] */
 {
-    int i, j, k, p, q, n, jleaf, *Ap, *Ai, *maxfirst,
-	*ancestor, *prevleaf, *w, *first, *level, *rowcount ;
-    n = A->n ; Ap = A->p ; Ai = A->i ;			/* get A */
-    w = cs_malloc (5*n, sizeof (int)) ;			/* get workspace */
+    csi i, j, k, p, q, n, jleaf, *Ap, *Ai, *maxfirst,
+        *ancestor, *prevleaf, *w, *first, *level, *rowcount ;
+    n = A->n ; Ap = A->p ; Ai = A->i ;                  /* get A */
+    w = cs_malloc (5*n, sizeof (csi)) ;                 /* get workspace */
     ancestor = w ; maxfirst = w+n ; prevleaf = w+2*n ; first = w+3*n ;
     level = w+4*n ;
-    rowcount = cs_malloc (n, sizeof (int)) ;	/* allocate result */
-    firstdesc (n, parent, post, first, level) ;	/* find first and level */
+    rowcount = cs_malloc (n, sizeof (csi)) ;    /* allocate result */
+    firstdesc (n, parent, post, first, level) ; /* find first and level */
     for (i = 0 ; i < n ; i++)
     {
-	rowcount [i] = 1 ;	/* count the diagonal of L */
-	prevleaf [i] = -1 ;	/* no previous leaf of the ith row subtree */
-	maxfirst [i] = -1 ;	/* max first[j] for node j in ith subtree */
-	ancestor [i] = i ;	/* every node is in its own set, by itself */
+        rowcount [i] = 1 ;      /* count the diagonal of L */
+        prevleaf [i] = -1 ;     /* no previous leaf of the ith row subtree */
+        maxfirst [i] = -1 ;     /* max first[j] for node j in ith subtree */
+        ancestor [i] = i ;      /* every node is in its own set, by itself */
     }
     for (k = 0 ; k < n ; k++)
     {
-	j = post [k] ;		/* j is the kth node in the postordered etree */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    q = cs_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf) ;
-	    if (jleaf) rowcount [i] += (level [j] - level [q]) ;
-	}
-	if (parent [j] != -1) ancestor [j] = parent [j] ;
+        j = post [k] ;          /* j is the kth node in the postordered etree */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            q = cs_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf) ;
+            if (jleaf) rowcount [i] += (level [j] - level [q]) ;
+        }
+        if (parent [j] != -1) ancestor [j] = parent [j] ;
     }
     cs_free (w) ;
     return (rowcount) ;
@@ -62,11 +62,11 @@ void mexFunction
 {
     cs *A, Amatrix ;
     double *x ;
-    int i, n, *parent, *post, *rowcount ;
+    csi i, n, *parent, *post, *rowcount ;
 
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: r = rowcnt(A,parent,post)") ;
+        mexErrMsgTxt ("Usage: r = rowcnt(A,parent,post)") ;
     }
 
     /* get inputs */
diff --git a/CSparse/MATLAB/Test/cs_sparse2.m b/CSparse/MATLAB/Test/cs_sparse2.m
index 32d9319..1bdb348 100644
--- a/CSparse/MATLAB/Test/cs_sparse2.m
+++ b/CSparse/MATLAB/Test/cs_sparse2.m
@@ -1,4 +1,4 @@
-function A = cs_sparse2 (i,j,x)						    %#ok
+function A = cs_sparse2 (i,j,x)                                             %#ok
 %CS_SPARSE2 same as cs_sparse, to test cs_entry function
 % A = cs_sparse2 (i,j,x), removing duplicates and numerically zero entries,
 % and returning A sorted (test cs_entry)
@@ -7,9 +7,7 @@ function A = cs_sparse2 (i,j,x)						    %#ok
 %   A = cs_sparse2 (i,j,x)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_sparse2 mexFunction not found') ;
 
diff --git a/CSparse/MATLAB/Test/cs_sparse2_mex.c b/CSparse/MATLAB/Test/cs_sparse2_mex.c
index 005102a..88c58ce 100644
--- a/CSparse/MATLAB/Test/cs_sparse2_mex.c
+++ b/CSparse/MATLAB/Test/cs_sparse2_mex.c
@@ -11,12 +11,12 @@ void mexFunction
 {
     double *Tx ;
     cs *A, *C, *T ;
-    int k, m, n, nz, *Ti, *Tj ;
+    csi k, m, n, nz, *Ti, *Tj ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: A = cs_sparse2(i,j,x)") ;
+        mexErrMsgTxt ("Usage: A = cs_sparse2(i,j,x)") ;
     }
-    nz = mxGetM (pargin [0]) ;
+    nz = mxGetNumberOfElements (pargin [0]) ;
     Ti = cs_mex_get_int (nz, pargin [0], &m, 1) ;
     Tj = cs_mex_get_int (nz, pargin [1], &n, 1) ;
     cs_mex_check (1, nz, 1, 0, 0, 1, pargin [2]) ;
@@ -25,7 +25,7 @@ void mexFunction
     T = cs_spalloc (n, m, 1, 1, 1) ;
     for (k = 0 ; k < nz ; k++)
     {
-	cs_entry (T, Tj [k], Ti [k], Tx [k]) ;
+        cs_entry (T, Tj [k], Ti [k], Tx [k]) ;
     }
 
     C = cs_compress (T) ;
diff --git a/CSparse/MATLAB/Test/cs_test_make.m b/CSparse/MATLAB/Test/cs_test_make.m
index 4908fcb..800505d 100644
--- a/CSparse/MATLAB/Test/cs_test_make.m
+++ b/CSparse/MATLAB/Test/cs_test_make.m
@@ -6,8 +6,35 @@ function cs_test_make (force)
 %   cs_test_make
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
+
+try
+    % ispc does not appear in MATLAB 5.3
+    pc = ispc ;
+catch
+    % if ispc fails, assume we are on a Windows PC if it's not unix
+    pc = ~isunix ;
+end
+
+if (~isempty (strfind (computer, '64')))
+    fprintf ('Compiling CSparse (64-bit)\n') ;
+    mexcmd = 'mex -largeArrayDims' ;
+else
+    fprintf ('Compiling CSparse (32-bit)\n') ;
+    mexcmd = 'mex' ;
+end
+
+if (pc)
+    here = pwd ;
+    cd ../../Include
+    mexcmd = [mexcmd ' -I' pwd] ;
+    cd (here)
+    cd ../CSparse
+    mexcmd = [mexcmd ' -I' pwd] ;
+    cd (here)
+else
+    mexcmd = [mexcmd ' -I../../Include -I../CSparse'] ;
+end
 
 if (nargin < 1)
     force = 0 ;
@@ -22,12 +49,11 @@ mexfunc = { 'cs_ipvec', 'cs_pvec', 'cs_sparse2', ...
 
 for i = 1:length(mexfunc)
     [s t tobj] = cs_must_compile ('', mexfunc{i}, '_mex', ...
- 	['.' mexext], 'cs_test_make.m', force) ;
-    if (s | tobj < timestamp)						    %#ok
-	cmd = ['mex -O -output ' mexfunc{i} ' ' mexfunc{i} '_mex.c -I..' ...
-	    filesep '..' filesep 'Include -I..' ...
-	    filesep 'CSparse ' object_files] ;
- 	fprintf ('%s\n', cmd) ;
- 	eval (cmd) ;
+        ['.' mexext], 'cs_test_make.m', force) ;
+    if (s | tobj < timestamp)                                               %#ok
+        cmd = [mexcmd ' -O -output ' mexfunc{i} ' ' mexfunc{i} '_mex.c ' ...
+            object_files] ;
+        fprintf ('%s\n', cmd) ;
+        eval (cmd) ;
      end
 end
diff --git a/CSparse/MATLAB/Test/cspy_test.m b/CSparse/MATLAB/Test/cspy_test.m
index 1312ca3..cab2b34 100644
--- a/CSparse/MATLAB/Test/cspy_test.m
+++ b/CSparse/MATLAB/Test/cspy_test.m
@@ -4,8 +4,7 @@ function cspy_test
 %   cspy_test
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 
@@ -22,28 +21,28 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     try
-	subplot (1,4,1) ; cspy (A) ;
-	drawnow
-	subplot (1,4,2) ; cspy (A,64) ;
-	drawnow
-	subplot (1,4,3) ; cs_dmspy (A) ;
-	drawnow
-	subplot (1,4,4) ; cs_dmspy (A,0) ;
-	drawnow
+        subplot (1,4,1) ; cspy (A) ;
+        drawnow
+        subplot (1,4,2) ; cspy (A,64) ;
+        drawnow
+        subplot (1,4,3) ; cs_dmspy (A) ;
+        drawnow
+        subplot (1,4,4) ; cs_dmspy (A,0) ;
+        drawnow
     catch
-	fprintf ('failed...\n') ;
+        fprintf ('failed...\n') ;
     end
 
     [m n] = size (A) ;
-    if (m == n & nnz (diag (A)) == n)					    %#ok
-	p = cs_dmperm (A) ;
-	if (any (p ~= 1:n))
-	    error ('!') ;
-	end
-	[p q r s cc rr] = cs_dmperm (A) ;				    %#ok
-	if (any (p ~= q))
-	    error ('not sym!') ;
-	end
+    if (m == n & nnz (diag (A)) == n)                                       %#ok
+        p = cs_dmperm (A) ;
+        if (any (p ~= 1:n))
+            error ('!') ;
+        end
+        [p q r s cc rr] = cs_dmperm (A) ;                                   %#ok
+        if (any (p ~= q))
+            error ('not sym!') ;
+        end
     end
 
     drawnow
diff --git a/CSparse/MATLAB/Test/dmperm_test.m b/CSparse/MATLAB/Test/dmperm_test.m
index 2f1fd38..7e5a707 100644
--- a/CSparse/MATLAB/Test/dmperm_test.m
+++ b/CSparse/MATLAB/Test/dmperm_test.m
@@ -5,8 +5,7 @@ function dmperm_test
 %   dmperm_test
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 
@@ -32,13 +31,13 @@ for k = 1:length(f)
     
     i = f(k) ;
 
-    Prob = UFget (i)							    %#ok
+    Prob = UFget (i)                                                        %#ok
 
     A = Prob.A ;
     [m n] = size (A) ;
     if (m > n)
-	% make sure A is short and fat
-	A = A' ;
+        % make sure A is short and fat
+        A = A' ;
     end
     % C is tall and thin
     C = A' ;
@@ -47,11 +46,11 @@ for k = 1:length(f)
     k1 = 0 ;
     t1 = 0 ;
     while (t1 < 1)
-	tic
-	p = cs_dmperm (A) ;
-	t = toc ;
-	t1 = t1 + t ;
-	k1 = k1 + 1 ;
+        tic
+        p = cs_dmperm (A) ;
+        t = toc ;
+        t1 = t1 + t ;
+        k1 = k1 + 1 ;
     end
     t1 = t1 / k1 ;
     s1 = sum (p > 0) ;
@@ -59,11 +58,11 @@ for k = 1:length(f)
     k2 = 0 ;
     t2 = 0 ;
     while (t2 < 1)
-	tic
-	p = cs_dmperm (C) ;
-	t = toc ;
-	t2 = t2 + t ;
-	k2 = k2 + 1 ;
+        tic
+        p = cs_dmperm (C) ;
+        t = toc ;
+        t2 = t2 + t ;
+        k2 = k2 + 1 ;
     end
     t2 = t2 / k2 ;
     s2 = sum (p > 0) ;
@@ -71,22 +70,22 @@ for k = 1:length(f)
     k3 = 0 ;
     t3 = 0 ;
     while (t3 < 1)
-	tic
-	p = cs_dmperm_orig (A) ;
-	t = toc ;
-	t3 = t3 + t ;
-	k3 = k3 + 1 ;
+        tic
+        p = cs_dmperm_orig (A) ;
+        t = toc ;
+        t3 = t3 + t ;
+        k3 = k3 + 1 ;
     end
     t3 = t3 / k3 ;
 
     k4 = 0 ;
     t4 = 0 ;
     while (t4 < 1)
-	tic
-	p = cs_dmperm_orig (A') ;
-	t = toc ;
-	t4 = t4 + t ;
-	k4 = k4 + 1 ;
+        tic
+        p = cs_dmperm_orig (A') ;
+        t = toc ;
+        t4 = t4 + t ;
+        k4 = k4 + 1 ;
     end
     t4 = t4 / k4 ;
 
@@ -96,15 +95,15 @@ for k = 1:length(f)
 
     fprintf ('[m %d:%d n %d:%d (%d)]:\n', m, mempty, n, nempty, sprnk) ;
     fprintf ('    A: t1 %10.6f (%6d)   C: t2 %10.6f (%6d) new\n', ...
-	t1, k1, t2, k2) ;
+        t1, k1, t2, k2) ;
     fprintf ('    A: t3 %10.6f (%6d)   C: t4 %10.6f (%6d) orig\n', ...
-	t3, k3, t4, k4) ;
+        t3, k3, t4, k4) ;
 
-    if (s1 ~= sprnk | s2 ~= sprnk)					    %#ok
-	s1								    %#ok
-	s2								    %#ok
-	sprnk								    %#ok
-	error ('!') ;
+    if (s1 ~= sprnk | s2 ~= sprnk)                                          %#ok
+        s1                                                                  %#ok
+        s2                                                                  %#ok
+        sprnk                                                               %#ok
+        error ('!') ;
     end
 
     tt1 (k) = t1 ;
@@ -120,7 +119,7 @@ for k = 1:length(f)
     clear A C
 
     semilogy (ss(1:k) ./ nn(1:k), tt1(1:k) ./ tt3(1:k), 'o', ...
-	[0 1], [1 1], 'r-') ;
+        [0 1], [1 1], 'r-') ;
     drawnow
 
 end
diff --git a/CSparse/MATLAB/Test/dmspy_test.m b/CSparse/MATLAB/Test/dmspy_test.m
index fff2057..8f13123 100644
--- a/CSparse/MATLAB/Test/dmspy_test.m
+++ b/CSparse/MATLAB/Test/dmspy_test.m
@@ -4,9 +4,7 @@ function dmspy_test
 %   dmspy_test
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 f = find (index.nblocks > 1) ;
@@ -21,7 +19,7 @@ for i = f
     clf
     subplot (2,2,1) ; cspy (Prob.A) ;
     subplot (2,2,2) ; cs_dmspy (Prob.A) ;
-    [p,q,r,s,cc,rr] = cs_dmperm (Prob.A) ;				    %#ok
+    [p,q,r,s,cc,rr] = cs_dmperm (Prob.A) ;                                  %#ok
     subplot (2,2,3) ; plot (p) ;
     subplot (2,2,4) ; plot (q) ;
     drawnow
diff --git a/CSparse/MATLAB/Test/etree_sample.m b/CSparse/MATLAB/Test/etree_sample.m
index 9a38f0a..0514508 100644
--- a/CSparse/MATLAB/Test/etree_sample.m
+++ b/CSparse/MATLAB/Test/etree_sample.m
@@ -5,8 +5,7 @@ function etree_sample
 %   etree_sample
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clf
 
@@ -55,7 +54,7 @@ title ('L, not postordered') ;
 n = size (A,1) ;
 for k = 1:n
     fprintf ('parent (%d) = %d  goal: %d   ok: %d\n', ...
-	k, parent (k), goal (k), goal (k) == parent(k)) ;
+        k, parent (k), goal (k), goal (k) == parent(k)) ;
 end
 
 
diff --git a/CSparse/MATLAB/Test/givens2.m b/CSparse/MATLAB/Test/givens2.m
index 5420101..62f83fe 100644
--- a/CSparse/MATLAB/Test/givens2.m
+++ b/CSparse/MATLAB/Test/givens2.m
@@ -4,8 +4,7 @@ function g = givens2(a,b)
 %   g = givens2(a,b)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (b == 0)
     c = 1 ; s = 0 ;
diff --git a/CSparse/MATLAB/Test/gqr3.m b/CSparse/MATLAB/Test/gqr3.m
index 9f31d09..3bfdae1 100644
--- a/CSparse/MATLAB/Test/gqr3.m
+++ b/CSparse/MATLAB/Test/gqr3.m
@@ -5,9 +5,7 @@ function R = gqr3 (A)
 %   R = gqr3 (A)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 
@@ -17,14 +15,14 @@ for i = 2:m
     % i
     for k = 1:min(i-1,n)
     % k
-	% Givens rotation to zero out A(i,k) using A(k,k)
-	G = givens2 (A(k,k), A(i,k)) ;
-	A ([k i],k:n) = G * A ([k i],k:n) ;
-	A (i,k) = 0 ;
-	% fprintf ('A(21,25)=%g\n', A(21,25)) ;
-	% if (A(21,25) ~= 0)
-	    % pause
-	% end
+        % Givens rotation to zero out A(i,k) using A(k,k)
+        G = givens2 (A(k,k), A(i,k)) ;
+        A ([k i],k:n) = G * A ([k i],k:n) ;
+        A (i,k) = 0 ;
+        % fprintf ('A(21,25)=%g\n', A(21,25)) ;
+        % if (A(21,25) ~= 0)
+            % pause
+        % end
     end
 end
 R = A ;
diff --git a/CSparse/MATLAB/Test/happly.m b/CSparse/MATLAB/Test/happly.m
index 770c5d9..cb56521 100644
--- a/CSparse/MATLAB/Test/happly.m
+++ b/CSparse/MATLAB/Test/happly.m
@@ -4,8 +4,6 @@ function hx = happly (v, beta, x)
 %   hx = happly (v,beta,x) ;        % computes hx = x - v * (beta * (v' *x)) ;
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 hx = x - v * (beta * (v' *x)) ;
diff --git a/CSparse/MATLAB/Test/hmake1.m b/CSparse/MATLAB/Test/hmake1.m
index 52f8c6c..92964fc 100644
--- a/CSparse/MATLAB/Test/hmake1.m
+++ b/CSparse/MATLAB/Test/hmake1.m
@@ -4,17 +4,16 @@ function [v,beta,xnorm] = hmake1 (x)
 %   [v,beta,xnorm] = hmake1 (x)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = length (x) ;
 if (n == 1)
     v = 1 ;
     xnorm = norm (x) ;
     if (x (1) < 0)
-	beta = 2 ;
+        beta = 2 ;
     else
-	beta = 0 ;
+        beta = 0 ;
     end
     return
 end
@@ -24,15 +23,15 @@ v = x ;
 if (sigma == 0)
     v (1) = 1 ;
     if (x (1) < 0)
-	beta = 2 ;
+        beta = 2 ;
     else
-	beta = 0 ;
+        beta = 0 ;
     end
 else
     if (x (1) <= 0)
-	v (1) = x(1) - xnorm ;
+        v (1) = x(1) - xnorm ;
     else
-	v (1) = -sigma / (x(1) + xnorm) ;
+        v (1) = -sigma / (x(1) + xnorm) ;
     end
     beta = (2*v(1)^2) / (sigma + v(1)^2) ;
     v = v / v(1) ;
diff --git a/CSparse/MATLAB/Test/house.m b/CSparse/MATLAB/Test/house.m
index 42f3e4c..a8a8ad8 100644
--- a/CSparse/MATLAB/Test/house.m
+++ b/CSparse/MATLAB/Test/house.m
@@ -4,8 +4,7 @@ function [v,beta,s] = house (x)
 %   [v,beta,s] = house (x)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = length (x) ;
 if (n == 1)
@@ -21,9 +20,9 @@ if (sigma == 0)
 else
     s = sqrt (x(1)^2 + sigma) ;
     if (x (1) <= 0)
-	v (1) = x (1) - s ;
+        v (1) = x (1) - s ;
     else
-	v (1) = -sigma / (x (1) + s) ;
+        v (1) = -sigma / (x (1) + s) ;
     end
     beta = -1 / (s * v(1)) ;
 end
diff --git a/CSparse/MATLAB/Test/lu_left.m b/CSparse/MATLAB/Test/lu_left.m
index 73723f6..b8196ef 100644
--- a/CSparse/MATLAB/Test/lu_left.m
+++ b/CSparse/MATLAB/Test/lu_left.m
@@ -4,8 +4,7 @@ function [L,U,P] = lu_left (A)
 %   [L,U,P] = lu_left (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 P = eye (n) ;
@@ -13,13 +12,13 @@ L = zeros (n) ;
 U = zeros (n) ;
 for k = 1:n
     x = [ L(:,1:k-1) [ zeros(k-1,n-k+1) ; eye(n-k+1) ]] \ (P * A (:,k)) ;
-    U (1:k-1,k) = x (1:k-1) ;		% the column of U
-    [a i] = max (abs (x (k:n))) ;	% find the pivot row i
+    U (1:k-1,k) = x (1:k-1) ;           % the column of U
+    [a i] = max (abs (x (k:n))) ;       % find the pivot row i
     i = i + k - 1 ;
-    L ([i k],:) = L ([k i], :) ;	% swap rows i and k of L, P, and x
+    L ([i k],:) = L ([k i], :) ;        % swap rows i and k of L, P, and x
     P ([i k],:) = P ([k i], :) ;
     x ([i k]) = x ([k i]) ;
     U (k,k) = x (k) ;
     L (k,k) = 1 ;
-    L (k+1:n,k) = x (k+1:n) / x (k) ;	% divide the pivot column by U(k,k)
+    L (k+1:n,k) = x (k+1:n) / x (k) ;   % divide the pivot column by U(k,k)
 end
diff --git a/CSparse/MATLAB/Test/lu_right.m b/CSparse/MATLAB/Test/lu_right.m
index 39b5ceb..7bde252 100644
--- a/CSparse/MATLAB/Test/lu_right.m
+++ b/CSparse/MATLAB/Test/lu_right.m
@@ -4,14 +4,13 @@ function [L,U] = lu_right (A)
 %   [L,U] = lu_right (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 L = eye (n) ;
 U = zeros (n) ;
 for k = 1:n
-    U (k,k:n) = A (k,k:n) ;				       % (6.4) and (6.5)
-    L (k+1:n,k) = A (k+1:n,k) / U (k,k) ;				 % (6.6)
-    A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - L (k+1:n,k) * U (k,k+1:n) ;	 % (6.7)
+    U (k,k:n) = A (k,k:n) ;                                    % (6.4) and (6.5)
+    L (k+1:n,k) = A (k+1:n,k) / U (k,k) ;                                % (6.6)
+    A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - L (k+1:n,k) * U (k,k+1:n) ;      % (6.7)
 end
diff --git a/CSparse/MATLAB/Test/lu_rightp.m b/CSparse/MATLAB/Test/lu_rightp.m
index 84bfbbb..11768a1 100644
--- a/CSparse/MATLAB/Test/lu_rightp.m
+++ b/CSparse/MATLAB/Test/lu_rightp.m
@@ -5,17 +5,16 @@ function [L,U,P] = lu_rightp (A)
 %   [L,U,P] = lu_rightp (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 P = eye (n) ;
 for k = 1:n
-    [x,i] = max (abs (A (k:n,k))) ;			      % partial pivoting
+    [x,i] = max (abs (A (k:n,k))) ;                           % partial pivoting
     i = i+k-1 ;
     P ([k i],:) = P ([i k], :) ;
-    A ([k i],:) = A ([i k], :) ;			      % (6.10), (6.11)
-    A (k+1:n,k) = A (k+1:n,k) / A (k,k) ;				% (6.12)
+    A ([k i],:) = A ([i k], :) ;                              % (6.10), (6.11)
+    A (k+1:n,k) = A (k+1:n,k) / A (k,k) ;                               % (6.12)
     A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - A (k+1:n,k) * A (k,k+1:n) ;     % (6.9)
 end
 L = tril (A,-1) + eye (n) ;
diff --git a/CSparse/MATLAB/Test/lu_rightpr.m b/CSparse/MATLAB/Test/lu_rightpr.m
index ee5ba84..8923538 100644
--- a/CSparse/MATLAB/Test/lu_rightpr.m
+++ b/CSparse/MATLAB/Test/lu_rightpr.m
@@ -5,8 +5,7 @@ function [L,U,P] = lu_rightpr (A)
 %   [L,U,P] = lu_rightpr (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n == 1)
@@ -14,16 +13,16 @@ if (n == 1)
     L = 1 ;
     U = A ;
 else
-    [x,i] = max (abs (A (1:n,1))) ;			      % partial pivoting
+    [x,i] = max (abs (A (1:n,1))) ;                           % partial pivoting
     P1 = eye (n) ;
     P1 ([1 i],:) = P1 ([i 1], :) ;
     A = P1*A ;
-    u11 = A (1,1) ;					      % (6.10)
-    u12 = A (1,2:n) ;					      % (6.11)
-    l21 = A (2:n,1) / u11 ;				      % (6.12)
-    [L22,U22,P2] = lu_rightpr (A (2:n,2:n) - l21*u12) ;	      % (6.9) or (6.13)
+    u11 = A (1,1) ;                                           % (6.10)
+    u12 = A (1,2:n) ;                                         % (6.11)
+    l21 = A (2:n,1) / u11 ;                                   % (6.12)
+    [L22,U22,P2] = lu_rightpr (A (2:n,2:n) - l21*u12) ;       % (6.9) or (6.13)
     o = zeros(1,n-1) ;
-    L = [ 1 o ; P2*l21 L22 ] ;				      % (6.14)
+    L = [ 1 o ; P2*l21 L22 ] ;                                % (6.14)
     U = [ u11 u12 ; o' U22 ] ;
     P = [ 1 o ; o' P2] * P1 ;
 end
diff --git a/CSparse/MATLAB/Test/lu_rightr.m b/CSparse/MATLAB/Test/lu_rightr.m
index 8f1e74a..5a88582 100644
--- a/CSparse/MATLAB/Test/lu_rightr.m
+++ b/CSparse/MATLAB/Test/lu_rightr.m
@@ -4,18 +4,17 @@ function [L,U] = lu_rightr (A)
 %   [L,U] = lu_rightr (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n == 1)
     L = 1 ;
     U = A ;
 else
-    u11 = A (1,1) ;							 % (6.4)
-    u12 = A (1,2:n) ;							 % (6.5)
-    l21 = A (2:n,1) / u11 ;						 % (6.6)
-    [L22,U22] = lu_rightr (A (2:n,2:n) - l21*u12) ;			 % (6.7)
+    u11 = A (1,1) ;                                                      % (6.4)
+    u12 = A (1,2:n) ;                                                    % (6.5)
+    l21 = A (2:n,1) / u11 ;                                              % (6.6)
+    [L22,U22] = lu_rightr (A (2:n,2:n) - l21*u12) ;                      % (6.7)
     L = [ 1 zeros(1,n-1) ; l21 L22 ] ;
     U = [ u11 u12 ; zeros(n-1,1) U22 ] ;
 end
diff --git a/CSparse/MATLAB/Test/mynormest1.m b/CSparse/MATLAB/Test/mynormest1.m
index 414f21b..ea94323 100644
--- a/CSparse/MATLAB/Test/mynormest1.m
+++ b/CSparse/MATLAB/Test/mynormest1.m
@@ -5,9 +5,7 @@ function est = mynormest1 (L, U, P, Q)
 %   est = mynormest1 (L, U, P, Q)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (L,1) ;
 est = 0 ;
@@ -16,15 +14,15 @@ S = zeros (n,1) ;
 for k = 1:5
 
     if k == 1
-	x = ones (n,1) / n ;
+        x = ones (n,1) / n ;
     else
 
-	j = find (abs (x) == max (abs (x))) ;
-	j = j (1) ;
-	x = zeros (n,1) ;
-	x (j) = 1 ;
+        j = find (abs (x) == max (abs (x))) ;
+        j = j (1) ;
+        x = zeros (n,1) ;
+        x (j) = 1 ;
 
-	% fprintf ('eka: k %d j %d est %g\n', k, j, est) ;
+        % fprintf ('eka: k %d j %d est %g\n', k, j, est) ;
     end
 
 
@@ -37,25 +35,25 @@ for k = 1:5
 
     unchanged = 1 ;
     for i = 1:n
-	if (x (i) >= 0)
-	    s = 1 ;
-	else
-	    s = -1 ;
-	end
-	if (s ~= S (i))
-	    S (i) = s ;
-	    unchanged = 0 ;
-	end
+        if (x (i) >= 0)
+            s = 1 ;
+        else
+            s = -1 ;
+        end
+        if (s ~= S (i))
+            S (i) = s ;
+            unchanged = 0 ;
+        end
     end
 
     if (any (S ~= signum (x)))
-	S'								    %#ok
-	signum(x)'							    %#ok
-	error ('Hey!') ;
+        S'                                                                  %#ok
+        signum(x)'                                                          %#ok
+        error ('Hey!') ;
     end
 
-    if k > 1 & (est <= est_old | unchanged)				    %#ok
-	break ;
+    if k > 1 & (est <= est_old | unchanged)                                 %#ok
+        break ;
     end
     x = S ;
 
@@ -63,10 +61,10 @@ for k = 1:5
     x = P' * (L' \ (U' \ (Q'*x))) ;
 
     if k > 1
-	jnew = find (abs (x) == max (abs (x))) ;
-	if (jnew == j)
-	    break ;
-	end
+        jnew = find (abs (x) == max (abs (x))) ;
+        if (jnew == j)
+            break ;
+        end
     end 
 
 end
@@ -89,4 +87,4 @@ end
 function s = signum (x)
 %SIGNUM compute sign of x
 s = ones (length (x),1) ;
-s (find (x < 0)) = -1 ;	    %#ok
+s (find (x < 0)) = -1 ;     %#ok
diff --git a/CSparse/MATLAB/Test/myqr.m b/CSparse/MATLAB/Test/myqr.m
index 451518a..c8370c6 100644
--- a/CSparse/MATLAB/Test/myqr.m
+++ b/CSparse/MATLAB/Test/myqr.m
@@ -7,9 +7,7 @@ function [H,R] = myqr (A)
 %   [H,R] = myqr (A)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 
@@ -22,19 +20,19 @@ for k = 1:n
     % fprintf ('\n-----------------init %d\n', k) ;
     x = A (:,k) ;
     for i = 1:k-1
-	v = H(((i+1):m),i) ;
-	v = [1 ; v] ;							    %#ok
-	beta = H (i,i) ;
-	% n1 = norm (x (i:m)) ;
-	x (i:m) = happly (v, beta, x (i:m)) ;
-	% n2 = norm (x (i:m)) ;
-	% fprintf ('=============== i %d %g %g\n', i, n1, n2) ;
-	% beta
-	% v'
-	% X = x'
-	% pause
-	% i
-	% x
+        v = H(((i+1):m),i) ;
+        v = [1 ; v] ;                                                       %#ok
+        beta = H (i,i) ;
+        % n1 = norm (x (i:m)) ;
+        x (i:m) = happly (v, beta, x (i:m)) ;
+        % n2 = norm (x (i:m)) ;
+        % fprintf ('=============== i %d %g %g\n', i, n1, n2) ;
+        % beta
+        % v'
+        % X = x'
+        % pause
+        % i
+        % x
     end
     % k
     % x
diff --git a/CSparse/MATLAB/Test/norm1est.m b/CSparse/MATLAB/Test/norm1est.m
index d1e7704..60c9202 100644
--- a/CSparse/MATLAB/Test/norm1est.m
+++ b/CSparse/MATLAB/Test/norm1est.m
@@ -4,31 +4,30 @@ function est = norm1est (L,U,P,Q)
 %   est = norm1est (L,U,P,Q)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (L,1) ;
 for k = 1:5
     if (k == 1)
-	est = 0 ;
-	x = ones (n,1) / n ;
-	jold = -1 ;
+        est = 0 ;
+        x = ones (n,1) / n ;
+        jold = -1 ;
     else
-	j = min (find (abs (x) == norm (x,inf))) ;			    %#ok
-	if (j == jold)
-	    break
-	end ;
-	x = zeros (n,1) ;
-	x (j) = 1 ;
-	jold = j ;
+        j = min (find (abs (x) == norm (x,inf))) ;                          %#ok
+        if (j == jold)
+            break
+        end ;
+        x = zeros (n,1) ;
+        x (j) = 1 ;
+        jold = j ;
     end
     x = Q * (U \ (L \ (P*x))) ;
     est_old = est ;
     est = norm (x,1) ;
-    if (k > 1 & est <= est_old)						    %#ok
-	break
+    if (k > 1 & est <= est_old)                                             %#ok
+        break
     end ;
     s = ones (n,1) ;
-    s (find (x < 0)) = -1 ;						    %#ok
+    s (find (x < 0)) = -1 ;                                                 %#ok
     x = P' * (L' \ (U' \ (Q'*s))) ;
 end
diff --git a/CSparse/MATLAB/Test/qr2.m b/CSparse/MATLAB/Test/qr2.m
index d9b19a5..c431259 100644
--- a/CSparse/MATLAB/Test/qr2.m
+++ b/CSparse/MATLAB/Test/qr2.m
@@ -5,8 +5,7 @@ function [V,Beta,R] = qr2 (A)
 %   [V,beta,R] = qr2 (A)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 V = zeros (m,n) ;
diff --git a/CSparse/MATLAB/Test/qr_givens.m b/CSparse/MATLAB/Test/qr_givens.m
index 1a59736..1b24376 100644
--- a/CSparse/MATLAB/Test/qr_givens.m
+++ b/CSparse/MATLAB/Test/qr_givens.m
@@ -4,21 +4,20 @@ function R = qr_givens (A)
 %   R = qr_givens (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 parent = cs_etree (sparse (A), 'col') ;
 A = full (A) ;
 for i = 2:m
-    k = min (find (A (i,:))) ;						    %#ok
+    k = min (find (A (i,:))) ;                                              %#ok
     if (isempty (k))
-	continue ;
+        continue ;
     end
-    while (k > 0 & k <= min (i-1,n))					    %#ok
-	A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
-	A (i,k) = 0 ;
-	k = parent (k) ;
+    while (k > 0 & k <= min (i-1,n))                                        %#ok
+        A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
+        A (i,k) = 0 ;
+        k = parent (k) ;
     end
 end
 R = sparse (A) ;
diff --git a/CSparse/MATLAB/Test/qr_givens_full.m b/CSparse/MATLAB/Test/qr_givens_full.m
index 5a57cb7..7690db0 100644
--- a/CSparse/MATLAB/Test/qr_givens_full.m
+++ b/CSparse/MATLAB/Test/qr_givens_full.m
@@ -4,14 +4,13 @@ function R = qr_givens_full (A)
 %   R = qr_givens_full (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 for i = 2:m
     for k = 1:min(i-1,n)
-	A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
-	A (i,k) = 0 ;
+        A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
+        A (i,k) = 0 ;
     end
 end
 R = A ;
diff --git a/CSparse/MATLAB/Test/qr_left.m b/CSparse/MATLAB/Test/qr_left.m
index 8b2a5d5..7248687 100644
--- a/CSparse/MATLAB/Test/qr_left.m
+++ b/CSparse/MATLAB/Test/qr_left.m
@@ -4,8 +4,7 @@ function [V,Beta,R] = qr_left (A)
 %  [V,Beta,R] = qr_left (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 V = zeros (m,n) ;
@@ -14,9 +13,9 @@ R = zeros (m,n) ;
 for k = 1:n
     x = A (:,k) ;
     for i = 1:k-1
-	v = V (i:m,i) ;
-	beta = Beta (i) ;
-	x (i:m) = x (i:m) - v * (beta * (v' * x (i:m))) ;
+        v = V (i:m,i) ;
+        beta = Beta (i) ;
+        x (i:m) = x (i:m) - v * (beta * (v' * x (i:m))) ;
     end
     [v,beta,s] = gallery ('house', x (k:m), 2) ;
     V (k:m,k) = v ;
diff --git a/CSparse/MATLAB/Test/qr_right.m b/CSparse/MATLAB/Test/qr_right.m
index 24de54c..e945055 100644
--- a/CSparse/MATLAB/Test/qr_right.m
+++ b/CSparse/MATLAB/Test/qr_right.m
@@ -4,8 +4,7 @@ function [V,Beta,R] = qr_right (A)
 %   [V,Beta,R] = qr_right (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 V = zeros (m,n) ;
diff --git a/CSparse/MATLAB/Test/sample_colormap.m b/CSparse/MATLAB/Test/sample_colormap.m
index 50ef089..8e22328 100644
--- a/CSparse/MATLAB/Test/sample_colormap.m
+++ b/CSparse/MATLAB/Test/sample_colormap.m
@@ -5,9 +5,7 @@ function sample_colormap
 %   sample_colormap
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 h = jet (64) ;
 h = h (64:-1:1,:) ;
@@ -20,8 +18,8 @@ h = h (20:end,:) ;
 % h (:,2) = h (:,2) ./ s ;
 % h (:,3) = h (:,3) ./ s ;
 
-h (1,:) = [1 1 1] ;	% white
-h (2,:) = [1 1 .8] ;	% light yellow
+h (1,:) = [1 1 1] ;     % white
+h (2,:) = [1 1 .8] ;    % light yellow
 
 % h
 colormap (h) ;
diff --git a/CSparse/MATLAB/Test/signum.m b/CSparse/MATLAB/Test/signum.m
index ec806bc..d7bf622 100644
--- a/CSparse/MATLAB/Test/signum.m
+++ b/CSparse/MATLAB/Test/signum.m
@@ -4,10 +4,9 @@ function s = signum (x)
 %   s = signum(x)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 s = ones (length (x),1) ;
-s (find (x < 0)) = -1 ;	    %#ok
+s (find (x < 0)) = -1 ;     %#ok
 disp ('s =') ;
 disp (s) ;
diff --git a/CSparse/MATLAB/Test/sqr_example.m b/CSparse/MATLAB/Test/sqr_example.m
index 9c07379..d09b014 100644
--- a/CSparse/MATLAB/Test/sqr_example.m
+++ b/CSparse/MATLAB/Test/sqr_example.m
@@ -4,8 +4,7 @@ function sqr_example
 %   sqr_example
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 Prob = UFget (706) ;
 
diff --git a/CSparse/MATLAB/Test/test1.m b/CSparse/MATLAB/Test/test1.m
index bbe7346..7a367e8 100644
--- a/CSparse/MATLAB/Test/test1.m
+++ b/CSparse/MATLAB/Test/test1.m
@@ -5,9 +5,7 @@ function test1
 %   test1
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -18,26 +16,26 @@ for ii = f
     disp (Prob) ;
     A = Prob.A ;
     if (~isreal (A))
-	continue
+        continue
     end
     B = A' ;
 
     C = cs_transpose (A) ;
     if (nnz (B-C) ~= 0)
-	error ('!')
+        error ('!')
     end
 
     [m n] = size (A) ;
     % if (m == n)
-	x = rand (n,1) ;
-	y = rand (m,1) ;
-	z = y+A*x ;
-	q = cs_gaxpy (A,x,y) ;
-	err = norm (z-q,1) / norm (z,1) ;
-	disp (err) ;
-	if (err > 1e-14)
-	    error ('!')
-	end
+        x = rand (n,1) ;
+        y = rand (m,1) ;
+        z = y+A*x ;
+        q = cs_gaxpy (A,x,y) ;
+        err = norm (z-q,1) / norm (z,1) ;
+        disp (err) ;
+        if (err > 1e-14)
+            error ('!')
+        end
     % end
 
 
@@ -46,15 +44,22 @@ for ii = f
     i = i (p) ;
     j = j (p) ;
     x = x (p) ;
+    if (m == 1)
+        % find returns rows vectors if A is 1-by-n,
+        % but cs_sparse requires column vectors
+        i = i (:) ;
+        j = j (:) ;
+        x = x (:) ;
+    end
     D = sparse (i,j,x) ;
     E = cs_sparse (i,j,x) ;
     % [i j x]
     F = cs_sparse2 (i,j,x) ;
     if (nnz (D-E) ~= 0)
-	error ('!')
+        error ('!')
     end
     if (nnz (F-E) ~= 0)
-	error ('!')
+        error ('!')
     end
 
     clear A B C D E F
diff --git a/CSparse/MATLAB/Test/test10.m b/CSparse/MATLAB/Test/test10.m
index 3a07778..9de2f54 100644
--- a/CSparse/MATLAB/Test/test10.m
+++ b/CSparse/MATLAB/Test/test10.m
@@ -5,13 +5,10 @@ function test10
 %   test10
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
-
 % f = 185 ;
 % f = 449 ;
 clf
@@ -24,12 +21,12 @@ for trials = 1:100
     A = sprandn (m, n, d) ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     sp = sprank (A) ;
     % if (sp < n)
-    %	continue ;
+    %   continue ;
     % end
 
     Aorig = A ;
@@ -44,8 +41,8 @@ for trials = 1:100
     % [Q,R] = qr (A) ;
     % t1 = toc ;
 
-    [c,h,parent] = symbfact (A, 'col') ;				    %#ok
-    rnz = sum (c) ;							    %#ok
+    [c,h,parent] = symbfact (A, 'col') ;                                    %#ok
+    rnz = sum (c) ;                                                         %#ok
     tic ;
     [V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
     t2 = toc ;
@@ -53,7 +50,7 @@ for trials = 1:100
     C = A ;
     m2 = size (V2,1) ;
     if (m2 > m)
-	C = [A ; sparse(m2-m, n)] ;
+        C = [A ; sparse(m2-m, n)] ;
     end
     C = C (p,:) ;
 
@@ -65,32 +62,32 @@ for trials = 1:100
     s1 = svd (full (A)) ;
     s2 = svd (full (R2)) ;
     if (n > 0)
-	err2 = norm (s1 - s2) / s1 (1)  ;
-	disp ('err2 = ') ;
-	disp (err2) ;
+        err2 = norm (s1 - s2) / s1 (1)  ;
+        disp ('err2 = ') ;
+        disp (err2) ;
     else
-	err2 = 0 ;
+        err2 = 0 ;
     end
     fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d vs %d\n', t1, t2, t1/t2, sp, n) ;
 
     % H2 = full (H2)
     % R2 = full (R2)
 
-    subplot (2,4,1) ; spy (A) ;		title ('A colamd') ;
-    subplot (2,4,4) ; spy (Aorig) ;	title ('Aorig') ;
-    subplot (2,4,2) ; spy (C) ;		title ('A rperm') ;
-    subplot (2,4,5) ; spy (abs(R2)>0) ;	title ('spqr R, no zeros') ;
-    subplot (2,4,6) ; spy (R) ;		title ('matlab R') ;
-    subplot (2,4,7) ; spy (R2) ;	title ('spqr R') ;
-    subplot (2,4,8) ; spy (V2) ;	title ('spqr H') ;
+    subplot (2,4,1) ; spy (A) ;         title ('A colamd') ;
+    subplot (2,4,4) ; spy (Aorig) ;     title ('Aorig') ;
+    subplot (2,4,2) ; spy (C) ;         title ('A rperm') ;
+    subplot (2,4,5) ; spy (abs(R2)>0) ; title ('spqr R, no zeros') ;
+    subplot (2,4,6) ; spy (R) ;         title ('matlab R') ;
+    subplot (2,4,7) ; spy (R2) ;        title ('spqr R') ;
+    subplot (2,4,8) ; spy (V2) ;        title ('spqr H') ;
     drawnow
 
     if (err2 > 1e-9)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (m2 > m)
-	fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
+        fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
     end
 end
 
diff --git a/CSparse/MATLAB/Test/test11.m b/CSparse/MATLAB/Test/test11.m
index 6c5c419..63131b1 100644
--- a/CSparse/MATLAB/Test/test11.m
+++ b/CSparse/MATLAB/Test/test11.m
@@ -5,8 +5,7 @@ function test11
 %   test11
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 index = UFget ;
@@ -18,8 +17,8 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     A = spones (A) ;
@@ -29,13 +28,13 @@ for i = f
     rc1 = full (sum (R)) ;
     rc2 = cs_rowcnt (A, pa, po) ;
     if (any (rc1 ~= rc2))
-	error ('!') ;
+        error ('!') ;
     end
 
     try
-	p = amd (A) ;
+        p = amd (A) ;
     catch
-	p = symamd (A) ;
+        p = symamd (A) ;
     end
     A = A (p,p) ;
 
@@ -43,7 +42,7 @@ for i = f
     rc1 = full (sum (R)) ;
     rc2 = cs_rowcnt (A, pa, po) ;
     if (any (rc1 ~= rc2))
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CSparse/MATLAB/Test/test12.m b/CSparse/MATLAB/Test/test12.m
index ef7e388..f4f8887 100644
--- a/CSparse/MATLAB/Test/test12.m
+++ b/CSparse/MATLAB/Test/test12.m
@@ -5,8 +5,7 @@ function test12
 %   test12
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('test 12\n') ;
 rand ('state',0) ;
@@ -19,10 +18,10 @@ for trial = 1:100
     A = sprandn (m,n,d) ;
     fprintf ('m %d n %d nnz %d\n', m, n, nnz(A)) ;
     if (m < n)
-	continue ;
+        continue ;
     end
-    if (m == 0 | n == 0)						    %#ok
-	continue ;
+    if (m == 0 | n == 0)                                                    %#ok
+        continue ;
     end
     % save A A
     fprintf ('[ ') ;
@@ -35,10 +34,10 @@ for trial = 1:100
     s2 = s2 (1:length(s1)) ;
     err = norm (s1-s2) ; 
     if (length (s1) > 1)
-	err = err / s1 (1) ;
+        err = err / s1 (1) ;
     end
     fprintf ('err %g\n', err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 end
diff --git a/CSparse/MATLAB/Test/test13.m b/CSparse/MATLAB/Test/test13.m
index f6d0196..694f45a 100644
--- a/CSparse/MATLAB/Test/test13.m
+++ b/CSparse/MATLAB/Test/test13.m
@@ -5,9 +5,7 @@ function test13
 %   test13
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 randn ('state',0) ;
@@ -46,27 +44,27 @@ for trial = 1:100
     % pause
 
     p0 = etree (A, 'col') ;
-    % p1 = etree2 (A, 'col') ;	% CHOLMOD
+    % p1 = etree2 (A, 'col') ;  % CHOLMOD
     p2 = cs_etree (A, 'col') ;
 
     if (~isempty (A))
-	check_if_same (p0,p2) ;
+        check_if_same (p0,p2) ;
     end
 
     p0 = etree (C, 'col') ;
-    % p1 = etree2 (C, 'col') ;	% CHOLMOD
+    % p1 = etree2 (C, 'col') ;  % CHOLMOD
     p2 = cs_etree (C, 'col') ;
 
     if (~isempty (C))
-	check_if_same (p0,p2) ;
+        check_if_same (p0,p2) ;
     end
 
     % find etree of A'A, and postorder it
-    [m n] = size (A) ;							    %#ok
+    [m n] = size (A) ;                                                      %#ok
     % full (A)
 
     [cp0 cpo0] = etree (A, 'col') ;
-    % [cp1 cpo1] = etree2 (A, 'col') ;	% CHOLMOD
+    % [cp1 cpo1] = etree2 (A, 'col') ;  % CHOLMOD
     [cp2 cpo2] = cs_etree (A, 'col') ;
     % cpo2 = cs_post (cp2) ;
 
diff --git a/CSparse/MATLAB/Test/test14.m b/CSparse/MATLAB/Test/test14.m
index 35d49e8..9f5889a 100644
--- a/CSparse/MATLAB/Test/test14.m
+++ b/CSparse/MATLAB/Test/test14.m
@@ -5,9 +5,7 @@ function test14
 %   test14
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -33,6 +31,6 @@ for trial = 1:100
 %    A = sparse (i, j, x, m, n) ;
 
     if (norm (A-B,1) > 0)
-	error ('!') ;
+        error ('!') ;
     end
 end
diff --git a/CSparse/MATLAB/Test/test15.m b/CSparse/MATLAB/Test/test15.m
index 2214dd8..98267f0 100644
--- a/CSparse/MATLAB/Test/test15.m
+++ b/CSparse/MATLAB/Test/test15.m
@@ -5,9 +5,7 @@ function test15
 %   test15
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 randn ('state', 0) ;
@@ -25,14 +23,14 @@ for trials = 1:100
     A (:,k) = 1 ;
 
     try
-	p0 = amd (A) ;
+        p0 = amd (A) ;
     catch
-	p0 = symamd (A) ;
+        p0 = symamd (A) ;
     end
     p1 = cs_amd (A) ;
 
     if (any (sort (p1) ~= 1:n))
-	error ('not perm!') ;
+        error ('not perm!') ;
     end
 
     C = A+A' + speye (n) ;
diff --git a/CSparse/MATLAB/Test/test16.m b/CSparse/MATLAB/Test/test16.m
index a57eee0..806e606 100644
--- a/CSparse/MATLAB/Test/test16.m
+++ b/CSparse/MATLAB/Test/test16.m
@@ -5,8 +5,7 @@ function test16
 %   test16
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 randn ('state', 0) ;
@@ -21,32 +20,32 @@ skip = 811 ;
 
 for i = f
     if (any (i == skip))
-	continue
+        continue
     end
     Prob = UFget (i) ;
     A = spones (Prob.A) ;
     Aorig = A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     if (m ~= n)
-	A = A'*A ;
+        A = A'*A ;
     end
 
     fprintf ('n %4d nz %d\n', n, nnz (A)) ;
 
     try
-	p0 = amd (A) ;
+        p0 = amd (A) ;
     catch
-	p0 = symamd (A) ;
+        p0 = symamd (A) ;
     end
     fprintf ('symmetric case:\n') ;
     p1 = cs_amd (A) ;
 
     if (any (sort (p1) ~= 1:n))
-	error ('not perm!') ;
+        error ('not perm!') ;
     end
 
     C = A+A' + speye (n) ;
@@ -58,32 +57,32 @@ for i = f
     drawnow
 
     if (lnz0 ~= lnz1)
-	fprintf ('----------------- lnz %d %d   %9.4f\n', ...
-	    lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
+        fprintf ('----------------- lnz %d %d   %9.4f\n', ...
+            lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
     end
 
     if (1)
 
-	p0 = colamd (Aorig) ;
-	[m n] = size (Aorig) ;
-	fprintf ('m %d n %d\n', m, n) ;
-
-	fprintf ('A''A case, no dense rows (for QR):\n') ;
-	p1 = cs_amd (Aorig, 3) ;
-	if (any (sort (p1) ~= 1:n))
-	    error ('not perm!') ;
-	end
-
-	subplot (2,3,4) ; spy (Aorig)
-	subplot (2,3,5) ; spy (Aorig (:,p0)) ; title ('colamd') ;
-	subplot (2,3,6) ; spy (Aorig (:,p1)) ; title ('cs amd(A''A)') ;
-	lnz0 = sum (symbfact (Aorig (:,p0), 'col')) ;
-	lnz1 = sum (symbfact (Aorig (:,p1), 'col')) ;
-	fprintf ('                    A''A: %7d %7d %9.4f\n', ...
-	    lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
-	drawnow
-
-	% pause
+        p0 = colamd (Aorig) ;
+        [m n] = size (Aorig) ;
+        fprintf ('m %d n %d\n', m, n) ;
+
+        fprintf ('A''A case, no dense rows (for QR):\n') ;
+        p1 = cs_amd (Aorig, 3) ;
+        if (any (sort (p1) ~= 1:n))
+            error ('not perm!') ;
+        end
+
+        subplot (2,3,4) ; spy (Aorig)
+        subplot (2,3,5) ; spy (Aorig (:,p0)) ; title ('colamd') ;
+        subplot (2,3,6) ; spy (Aorig (:,p1)) ; title ('cs amd(A''A)') ;
+        lnz0 = sum (symbfact (Aorig (:,p0), 'col')) ;
+        lnz1 = sum (symbfact (Aorig (:,p1), 'col')) ;
+        fprintf ('                    A''A: %7d %7d %9.4f\n', ...
+            lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
+        drawnow
+
+        % pause
 
     end
 end
diff --git a/CSparse/MATLAB/Test/test17.m b/CSparse/MATLAB/Test/test17.m
index ef2ff6c..3c63f03 100644
--- a/CSparse/MATLAB/Test/test17.m
+++ b/CSparse/MATLAB/Test/test17.m
@@ -5,9 +5,7 @@ function test17
 %   test17
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 clf
@@ -24,7 +22,7 @@ for trials = 1:100
 
     A = sprandn (m, n, d) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
 
@@ -38,7 +36,7 @@ for trials = 1:100
     disp ('err = ') ;
     disp (err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     m2 = size (Q1,1) ;
@@ -62,18 +60,18 @@ for trials = 1:100
     err3 = norm (Q3*R3 - A, 1) ;
 
     fprintf ('m %3d m2 %3d n %3d    ::: %3d     %6.2e %6.2e\n', ...
-	m, m2, n, m2-m, err1, err3) ;
+        m, m2, n, m2-m, err1, err3) ;
 
     if (err1 > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
 %    if (err2 > 1e-12)
-%	error ('!') ;
+%       error ('!') ;
 %    end
 
     if (err3 > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
 try
@@ -96,7 +94,7 @@ try
     r3 = norm (A(:,q1)*x3(1:n)-b) ;
 
     fprintf ('least sq:  %6.2e %6.2e %6.2e diff %6.2e %6.2e\n', ...
-	r1, r2, r3, r1-r2, r1-r3) ;
+        r1, r2, r3, r1-r2, r1-r3) ;
 
 catch
 end
diff --git a/CSparse/MATLAB/Test/test18.m b/CSparse/MATLAB/Test/test18.m
index b2d9339..3dc46d0 100644
--- a/CSparse/MATLAB/Test/test18.m
+++ b/CSparse/MATLAB/Test/test18.m
@@ -5,9 +5,7 @@ function test18
 %   test18
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -21,8 +19,8 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     b = rand (n,1) ;
diff --git a/CSparse/MATLAB/Test/test19.m b/CSparse/MATLAB/Test/test19.m
index 6644a7b..226e04c 100644
--- a/CSparse/MATLAB/Test/test19.m
+++ b/CSparse/MATLAB/Test/test19.m
@@ -5,9 +5,7 @@ function test19
 %   test19
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -35,13 +33,13 @@ for trials = 1:1000
     pp2 = cs_dmperm (A) ;
     spr2 = sum (pp2 > 0) ;
     if (spr2 ~= sprnk)
-	error ('!')
+        error ('!')
     end
 
     pp2 = cs_maxtransr (A) ;
     spr2 = sum (pp2 > 0) ;
     if (spr2 ~= sprnk)
-	error ('!')
+        error ('!')
     end
 
     [p,q,r,s] = dmperm (A) ;
@@ -59,41 +57,41 @@ for trials = 1:1000
     hold on
 
     for k = 1:nk
-	r1 = r(k) ;
-	r2 = r(k+1) ;
-	c1 = s(k)  ;
-	c2 = s(k+1) ;
-	plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        r1 = r(k) ;
+        r2 = r(k+1) ;
+        c1 = s(k)  ;
+        c2 = s(k+1) ;
+        plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
     end
 
     [p2,q2,rr2,ss2,cp,rp] = cs_dmperm (A) ;
 
     if (min (m,n) > 0)
-	if (length (rr2) ~= length (r))
-	    error ('# fine blocks!') ;
-	end
+        if (length (rr2) ~= length (r))
+            error ('# fine blocks!') ;
+        end
     end
 
     if (rp (4) - 1 ~= sprnk)
-	rp		%#ok
-	sprnk		%#ok
-	error ('!') ;
+        rp              %#ok
+        sprnk           %#ok
+        error ('!') ;
     end
 
     if (any (sort (p2) ~= 1:m))
-	error ('p2!') ;
+        error ('p2!') ;
     end
 
     if (any (sort (q2) ~= 1:n))
-	error ('q2!') ;
+        error ('q2!') ;
     end
 
     if (cp (5) ~= n+1)
-	error ('cp!') ;
+        error ('cp!') ;
     end
 
     if (rp (5) ~= m+1)
-	error ('rp!') ;
+        error ('rp!') ;
     end
 
     C = A (p2,q2) ;
@@ -118,7 +116,7 @@ for trials = 1:1000
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C1 diag!') ;
+        error ('C1 diag!') ;
     end
 
     r1 = rp(2) ;
@@ -129,7 +127,7 @@ for trials = 1:1000
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C2 diag!') ;
+        error ('C2 diag!') ;
     end
 
     r1 = rp(3) ;
@@ -140,52 +138,52 @@ for trials = 1:1000
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C3 diag!') ;
+        error ('C3 diag!') ;
     end
 
-    r1 = rp(4) ;							    %#ok
-    r2 = rp(5) ;							    %#ok
-    c1 = cp(4) ;							    %#ok
-    c2 = cp(5) ;							    %#ok
+    r1 = rp(4) ;                                                            %#ok
+    r2 = rp(5) ;                                                            %#ok
+    c1 = cp(4) ;                                                            %#ok
+    c2 = cp(5) ;                                                            %#ok
     % plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
 
     if (~isempty (S))
 
-	[p1,q1,r0,s0] = dmperm (S) ;
-	[p3,r3] = cs_scc (S) ;
-	if (length (r3) ~= length (r0))
-	    error ('scc size!') ;
-	end
-
-	if (any (sort (p3) ~= 1:m))
-	    error ('scc perm!') ;
-	end
-
-	nk = length (r0)-1 ;
-
-	subplot (2,3,4) ;
-	hold off
-	spy (S (p1,q1)) ;
-	hold on
-	for k = 1:nk
-	    r1 = r0(k) ;
-	    r2 = r0(k+1) ;
-	    c1 = s0(k)  ;
-	    c2 = s0(k+1) ;
-	    plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
-	end
-
-	subplot (2,3,5) ;
-	hold off
-	spy (S (p3,p3)) ;
-	hold on
-	for k = 1:nk
-	    r1 = r3(k) ;
-	    r2 = r3(k+1) ;
-	    c1 = r3(k)  ;
-	    c2 = r3(k+1) ;
-	    plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
-	end
+        [p1,q1,r0,s0] = dmperm (S) ;
+        [p3,r3] = cs_scc (S) ;
+        if (length (r3) ~= length (r0))
+            error ('scc size!') ;
+        end
+
+        if (any (sort (p3) ~= 1:m))
+            error ('scc perm!') ;
+        end
+
+        nk = length (r0)-1 ;
+
+        subplot (2,3,4) ;
+        hold off
+        spy (S (p1,q1)) ;
+        hold on
+        for k = 1:nk
+            r1 = r0(k) ;
+            r2 = r0(k+1) ;
+            c1 = s0(k)  ;
+            c2 = s0(k+1) ;
+            plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        end
+
+        subplot (2,3,5) ;
+        hold off
+        spy (S (p3,p3)) ;
+        hold on
+        for k = 1:nk
+            r1 = r3(k) ;
+            r2 = r3(k+1) ;
+            c1 = r3(k)  ;
+            c2 = r3(k+1) ;
+            plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        end
 
     end
 
diff --git a/CSparse/MATLAB/Test/test2.m b/CSparse/MATLAB/Test/test2.m
index 264bd2c..51c3ef4 100644
--- a/CSparse/MATLAB/Test/test2.m
+++ b/CSparse/MATLAB/Test/test2.m
@@ -5,8 +5,7 @@ function test2
 %   test2
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 % clf
@@ -24,29 +23,29 @@ for trial = 1:100
     B = cs_sparse (i,j,x) ;
     D = cs_sparse2 (i,j,x) ;
     fprintf ('%3d %3d %6d : %6d %6d : %d\n', ...
-	m, n, nz, nnz (A), nnz(B), nz-nnz(A)) ;
+        m, n, nz, nnz (A), nnz(B), nz-nnz(A)) ;
 
     err = norm (A-B,1) / norm (A,1) ;
     if (err > 0)
-	disp ('err = ') ;
-	disp (err) ;
+        disp ('err = ') ;
+        disp (err) ;
     end
     if (err > 1e-14)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (nnz (B-D) > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (nnz (A) ~= nnz (B))
-	error ('nz!') ;
+        error ('nz!') ;
     end
 
     if (max (1,nnz (B)) ~= max (1,nzmax (B)))
-	nnz (B)
-	nzmax (B)
-	error ('nzmax!') ;
+        nnz (B)
+        nzmax (B)
+        error ('nzmax!') ;
     end
     % pack
 
@@ -58,7 +57,7 @@ for trial = 1:100
     C2 = cs_permute (A,p,q) ;
     err = norm (C1-C2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
 %    subplot (1,2,1) ; spy (A)
@@ -71,12 +70,12 @@ for trial = 1:100
 
     err = norm (x1-x2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
     x1 = zeros (m,1) ;
-    x1 (p) = x ;							    %#ok
-    x2 = cs_ipvec (x, p) ;						    %#ok
+    x1 (p) = x ;                                                            %#ok
+    x2 = cs_ipvec (x, p) ;                                                  %#ok
 
     n = min (m,n) ;
     B = A (1:n, 1:n) ;
@@ -87,14 +86,14 @@ for trial = 1:100
     C2 = cs_symperm (B,p) ;
 
     try
-	pp = amd (C2) ;							    %#ok
+        pp = amd (C2) ;                                                     %#ok
     catch
-	pp = symamd (C2) ;						    %#ok
+        pp = symamd (C2) ;                                                  %#ok
     end
 
     err = norm (C1-C2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
 
diff --git a/CSparse/MATLAB/Test/test20.m b/CSparse/MATLAB/Test/test20.m
index 2fd8f58..994d5fa 100644
--- a/CSparse/MATLAB/Test/test20.m
+++ b/CSparse/MATLAB/Test/test20.m
@@ -5,9 +5,7 @@ function test20
 %   test20
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -20,9 +18,9 @@ for trials = 1:10
     A1 = A*A' + n*eye (n) ;
 
     try
-	L1 = chol (A1)' ;
+        L1 = chol (A1)' ;
     catch
-	continue ;
+        continue ;
     end
     err1 = norm (L1*L1'-A1) ;
 
@@ -38,7 +36,7 @@ for trials = 1:10
     err2b = norm (L2b*L2b'-A2) ;
 
     % try a downdate
-    L1b = cholupdown (L2, -1, w) ;					    %#ok
+    L1b = cholupdown (L2, -1, w) ;                                          %#ok
     err1b = norm (L2b*L2b'-A2) ;
 
 
diff --git a/CSparse/MATLAB/Test/test21.m b/CSparse/MATLAB/Test/test21.m
index a6158fb..cc1bf23 100644
--- a/CSparse/MATLAB/Test/test21.m
+++ b/CSparse/MATLAB/Test/test21.m
@@ -5,9 +5,7 @@ function test21
 %   test21
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 rand ('state', 0) ;
@@ -17,25 +15,25 @@ clf
 
 for trials = 1:10
     if (trials <= 1)
-	n = trials ;
+        n = trials ;
     else
-	n = 1+fix (100 * rand (1)) ;
+        n = 1+fix (100 * rand (1)) ;
     end
     fprintf ('n: %d\n', n) ;
     d = 0.1 * rand (1) ;
     A = sprandn (n,n,d) ;
     A = A+A' + 100 * speye (n) ;
     try
-	p = amd (A) ;
+        p = amd (A) ;
     catch
-	p = symamd (A) ;
+        p = symamd (A) ;
     end
     A = sparse (A (p,p)) ;
 
     try
-	L = chol (A)' ;
+        L = chol (A)' ;
     catch
-	continue ;
+        continue ;
     end
 
     parent = etree (A) ;
@@ -44,8 +42,8 @@ for trials = 1:10
     spy (A) ;
 
     if (n > 0)
-	subplot (1,3,2) ;
-	treeplot (parent) ;
+        subplot (1,3,2) ;
+        treeplot (parent) ;
     end
 
     subplot (1,3,3) ;
@@ -55,61 +53,61 @@ for trials = 1:10
 
     for trials2 = 1:10
 
-	k = 1+fix (n * rand (1)) ;
-	if (k <= 0 | k > n)						    %#ok
-	    k = 1 ;
-	end
+        k = 1+fix (n * rand (1)) ;
+        if (k <= 0 | k > n)                                                 %#ok
+            k = 1 ;
+        end
 
-	w = sprandn (L (:,k)) ;
-	Anew = A + w*w' ;
+        w = sprandn (L (:,k)) ;
+        Anew = A + w*w' ;
 
-	% Lnew = cs_update (L, w, parent) ;
-	% err1 = norm (Lnew*Lnew' - Anew, 1) ;
+        % Lnew = cs_update (L, w, parent) ;
+        % err1 = norm (Lnew*Lnew' - Anew, 1) ;
 
-	Lnew = cs_updown (L, w, parent) ;
-	err6 = norm (Lnew*Lnew' - Anew, 1) ;
+        Lnew = cs_updown (L, w, parent) ;
+        err6 = norm (Lnew*Lnew' - Anew, 1) ;
 
-	Lnew = cs_updown (L, w, parent, '+') ;
-	err7 = norm (Lnew*Lnew' - Anew, 1) ;
+        Lnew = cs_updown (L, w, parent, '+') ;
+        err7 = norm (Lnew*Lnew' - Anew, 1) ;
 
-	[Lnew, wnew] = chol_update (L, w) ;
-	err2 = norm (Lnew*Lnew' - Anew, 1) ;
-	err10 = norm (wnew - (L\w)) ;
+        [Lnew, wnew] = chol_update (L, w) ;
+        err2 = norm (Lnew*Lnew' - Anew, 1) ;
+        err10 = norm (wnew - (L\w)) ;
 
-	L3 = chol_updown (L, +1, w) ;
-	err9 = norm (L3*L3' - Anew, 1) ;
+        L3 = chol_updown (L, +1, w) ;
+        err9 = norm (L3*L3' - Anew, 1) ;
 
 
 
-	[L2, wnew] = chol_downdate (Lnew, w) ;
-	err3 = norm (L2*L2' - A, 1) ;
-	err11 = norm (wnew - (Lnew\w)) ;
+        [L2, wnew] = chol_downdate (Lnew, w) ;
+        err3 = norm (L2*L2' - A, 1) ;
+        err11 = norm (wnew - (Lnew\w)) ;
 
-	% L2 = cs_downdate (Lnew, w, parent) ;
-	% err4 = norm (L2*L2' - A, 1) ;
+        % L2 = cs_downdate (Lnew, w, parent) ;
+        % err4 = norm (L2*L2' - A, 1) ;
 
-	L2 = cs_updown (Lnew, w, parent, '-') ;
-	err5 = norm (L2*L2' - A, 1) ;
+        L2 = cs_updown (Lnew, w, parent, '-') ;
+        err5 = norm (L2*L2' - A, 1) ;
 
-	L2 = chol_updown (Lnew, -1, w) ;
-	err8 = norm (L2*L2' - A, 1) ;
+        L2 = chol_updown (Lnew, -1, w) ;
+        err8 = norm (L2*L2' - A, 1) ;
 
-	err = max ([err2 err3 err5 err6 err7 err9 err8 err10 err11]) ;
+        err = max ([err2 err3 err5 err6 err7 err9 err8 err10 err11]) ;
 
-	fprintf ('   k %3d  %6.2e\n', k, err) ;
+        fprintf ('   k %3d  %6.2e\n', k, err) ;
 
-	if (err > 1e-11)
-	    err2	%#ok
-	    err3	%#ok
-	    err5	%#ok
-	    err6	%#ok
-	    err7	%#ok
-	    err8	%#ok
-	    err9	%#ok
-	    err10	%#ok
-	    err11	%#ok
-	    pause
-	end
+        if (err > 1e-11)
+            err2        %#ok
+            err3        %#ok
+            err5        %#ok
+            err6        %#ok
+            err7        %#ok
+            err8        %#ok
+            err9        %#ok
+            err10       %#ok
+            err11       %#ok
+            pause
+        end
 
 
     end
diff --git a/CSparse/MATLAB/Test/test22.m b/CSparse/MATLAB/Test/test22.m
index 334dddf..479a766 100644
--- a/CSparse/MATLAB/Test/test22.m
+++ b/CSparse/MATLAB/Test/test22.m
@@ -5,9 +5,7 @@ function test22
 %   test22
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -29,16 +27,16 @@ for k = 1:length (f)
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     c1 = condest (A) ;
     c2 = cond1est (A) ;
     if (c1 == c2)
-	err = 0 ;
+        err = 0 ;
     else
-	err = (c1-c2)/max(1,c1) ;
+        err = (c1-c2)/max(1,c1) ;
     end
 
     c3 = cond (full (A), 1) ;
@@ -46,7 +44,7 @@ for k = 1:length (f)
     fprintf ('%10.4e %10.4e (%10.4e)  :    %10.4e\n', c1, c2, c3, err) ;
 
     if (err ~= 0)
-	% pause
+        % pause
     end
 
     C1 (k) = c1 ;
@@ -62,10 +60,10 @@ for k = 1:length (f)
     % pause
 
 %    if (c3 < c2)
-%	c3
-%	c2
-%	c2-c3
-%	pause
+%       c3
+%       c2
+%       c2-c3
+%       pause
 %    end
 
 end
diff --git a/CSparse/MATLAB/Test/test23.m b/CSparse/MATLAB/Test/test23.m
index e27f90c..10ae6c8 100644
--- a/CSparse/MATLAB/Test/test23.m
+++ b/CSparse/MATLAB/Test/test23.m
@@ -5,8 +5,7 @@ function test23
 %   test23
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
diff --git a/CSparse/MATLAB/Test/test24.m b/CSparse/MATLAB/Test/test24.m
index 638816f..03feb09 100644
--- a/CSparse/MATLAB/Test/test24.m
+++ b/CSparse/MATLAB/Test/test24.m
@@ -5,9 +5,7 @@ function test24
 %   test24
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length (f)
     A = real (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     tic
diff --git a/CSparse/MATLAB/Test/test25.m b/CSparse/MATLAB/Test/test25.m
index ce1e919..82375bf 100644
--- a/CSparse/MATLAB/Test/test25.m
+++ b/CSparse/MATLAB/Test/test25.m
@@ -5,9 +5,7 @@ function test25
 %   test25
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length (f)
     A = real (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     A = A|A' ;
@@ -39,7 +37,7 @@ for k = 1:length (f)
     p2 = cs_nd (sparse (1)) ;
     toc ;
     if (p2 ~= 1)
-	error ('!') ;
+        error ('!') ;
     end
 
     tic ;
@@ -47,7 +45,7 @@ for k = 1:length (f)
     t2 = toc ;
 
     if (any (sort (p2) ~= 1:n))
-	error ('!') ;
+        error ('!') ;
     end
 
     rel = t2 / max (t1,1e-6) ;
diff --git a/CSparse/MATLAB/Test/test26.m b/CSparse/MATLAB/Test/test26.m
index b48aae9..b64b4ea 100644
--- a/CSparse/MATLAB/Test/test26.m
+++ b/CSparse/MATLAB/Test/test26.m
@@ -5,9 +5,7 @@ function test26
 %   test26
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -44,17 +42,17 @@ for trials = 1:ntrials
     lerr2 = log10 (max (err2, eps)) ;
 
     fprintf ('rank: %3d %3d err %6.2e  %6.2e  :   %6.1f\n', ...
-	sprank(A), rank(full(A)), err1, err2, lerr1 - lerr2) ;
+        sprank(A), rank(full(A)), err1, err2, lerr1 - lerr2) ;
 
     if (isnan (err1))
-	lerr1 = 10 ;
+        lerr1 = 10 ;
     end
     if (isnan (err2))
-	lerr2 = 10 ;
+        lerr2 = 10 ;
     end
 
     if (lerr2 > lerr1 + 5)
-	% pause
+        % pause
     end
 
     e1 (trials) = lerr1 ;
diff --git a/CSparse/MATLAB/Test/test27.m b/CSparse/MATLAB/Test/test27.m
index 3c1418c..76dc202 100644
--- a/CSparse/MATLAB/Test/test27.m
+++ b/CSparse/MATLAB/Test/test27.m
@@ -5,10 +5,7 @@ function test27
 %   test27
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 rand ('state', 0) ;
diff --git a/CSparse/MATLAB/Test/test28.m b/CSparse/MATLAB/Test/test28.m
index 1e27270..0e1478a 100644
--- a/CSparse/MATLAB/Test/test28.m
+++ b/CSparse/MATLAB/Test/test28.m
@@ -5,20 +5,19 @@ function test28
 %   test28
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
 rand ('state', 0) ;
 for n = 1:100
     for trials = 1:1000
-	p = cs_randperm (n, rand) ;
-	if (any (sort (p) ~= 1:n))
-	    n		%#ok
-	    p		%#ok
-	    error ('!')
-	end
+        p = cs_randperm (n, rand) ;
+        if (any (sort (p) ~= 1:n))
+            n           %#ok
+            p           %#ok
+            error ('!')
+        end
     end
 end
 
@@ -65,48 +64,48 @@ for k = 1:nmat
     fprintf (' %8.2f', t3) ;
     T3 (k) = t3 ;
 
-    if (sprank1 ~= sprank2 | sprank1 ~= sprank3)			    %#ok
-	error ('!') ;
+    if (sprank1 ~= sprank2 | sprank1 ~= sprank3)                            %#ok
+        error ('!') ;
     end
 
     tic
-    [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ;				    %#ok
+    [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ;                                 %#ok
     d1 = toc ;
     fprintf (' %8.2f', d1) ;
     D1 (k) = d1 ;
 
     tic
-    [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ;				    %#ok
+    [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ;                               %#ok
     d2 = toc ;
     fprintf (' %8.2f', d2) ;
     D2 (k) = d2 ;
 
     tic
-    [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ;				    %#ok
+    [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ;                              %#ok
     d3 = toc ;
     fprintf (' %8.2f\n', d3) ;
     D3 (k) = d3 ;
 
     if (sprank1 == max (m,n))
-	nz1 = nnz (diag (A (p1,q1))) ;
-	nz2 = nnz (diag (A (p2,q2))) ;
-	nz3 = nnz (diag (A (p3,q3))) ;
+        nz1 = nnz (diag (A (p1,q1))) ;
+        nz2 = nnz (diag (A (p2,q2))) ;
+        nz3 = nnz (diag (A (p3,q3))) ;
 
-	if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3)		    %#ok
-	    error ('!')
-	end
+        if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3)               %#ok
+            error ('!')
+        end
     end
 
     subplot (1,2,1)
     loglog (T1 (1:k), T2 (1:k), 'x', ...
-	T1 (1:k), T3 (1:k), 'go', ...
-	[1e-5 1e3], [1e-5 1e3], 'r-') ; 
+        T1 (1:k), T3 (1:k), 'go', ...
+        [1e-5 1e3], [1e-5 1e3], 'r-') ; 
     axis equal
 
     subplot (1,2,2)
     loglog (D1 (1:k), D2 (1:k), 'x', ...
-	D1 (1:k), D3 (1:k), 'go', ...
-	[1e-5 1e3], [1e-5 1e3], 'r-') ; 
+        D1 (1:k), D3 (1:k), 'go', ...
+        [1e-5 1e3], [1e-5 1e3], 'r-') ; 
     axis equal
 
     drawnow
diff --git a/CSparse/MATLAB/Test/test3.m b/CSparse/MATLAB/Test/test3.m
index fd32454..aabc61d 100644
--- a/CSparse/MATLAB/Test/test3.m
+++ b/CSparse/MATLAB/Test/test3.m
@@ -5,8 +5,7 @@ function test3
 %   test3
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -20,20 +19,20 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     A = A*A' + 2*n*speye (n) ;
     try
-	p = amd (A) ;
+        p = amd (A) ;
     catch
-	p = symamd (A) ;
+        p = symamd (A) ;
     end
     try
-	L0 = chol (A)' ;
+        L0 = chol (A)' ;
     catch
-	continue
+        continue
     end
     b = rand (n,1) ;
 
@@ -45,14 +44,14 @@ for i = f
     x2 = cs_lsolve (L0,b) ;
     err = norm (x1-x2,1) ;
     if (err > 1e-12 * c)
-	error ('!') ;
+        error ('!') ;
     end
 
     x1 = L0'\b ;
     x2 = cs_ltsolve (L0,b) ;
     err = norm (x1-x2,1) ;
     if (err > 1e-10 * c)
-	error ('!') ;
+        error ('!') ;
     end
 
     U = L0' ;
@@ -61,7 +60,7 @@ for i = f
     x2 = cs_usolve (U,b) ;
     err = norm (x1-x2,1) ;
     if (err > 1e-10 * c)
-	error ('!') ;
+        error ('!') ;
     end
 
     L2 = cs_chol (A) ;
@@ -69,7 +68,7 @@ for i = f
     subplot (2,3,4) ; spy (L2) ;
     err = norm (L0-L2,1) ;
     if (err > 1e-8 * c)
-	error ('!') ;
+        error ('!') ;
     end
 
     L1 = chol (C)' ;
@@ -78,7 +77,7 @@ for i = f
     subplot (2,3,5) ; spy (L2) ;
     err = norm (L1-L2,1) ;
     if (err > 1e-8 * c)
-	error ('!') ;
+        error ('!') ;
     end
 
     [L3,p] = cs_chol (A) ;
@@ -88,7 +87,7 @@ for i = f
     subplot (2,3,6) ; spy (L3) ;
     err = norm (L4-L3,1) ;
     if (err > 1e-8 * c)
-	error ('!') ;
+        error ('!') ;
     end
 
     drawnow
diff --git a/CSparse/MATLAB/Test/test4.m b/CSparse/MATLAB/Test/test4.m
index da207b5..0d67b55 100644
--- a/CSparse/MATLAB/Test/test4.m
+++ b/CSparse/MATLAB/Test/test4.m
@@ -5,9 +5,7 @@ function test4
 %   test4
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -22,12 +20,12 @@ for trial = 1:100
     D = cs_multiply (A,B) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d k %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, k, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, k, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 end
diff --git a/CSparse/MATLAB/Test/test5.m b/CSparse/MATLAB/Test/test5.m
index 5be775e..7340bcb 100644
--- a/CSparse/MATLAB/Test/test5.m
+++ b/CSparse/MATLAB/Test/test5.m
@@ -5,9 +5,7 @@ function test5
 %   test5
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -22,39 +20,39 @@ for trial = 1:100
     D = cs_add (A,B) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     C = pi*A+B ;
     D = cs_add (A,B,pi) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     C = pi*A+3*B ;
     D = cs_add (A,B,pi,3) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CSparse/MATLAB/Test/test6.m b/CSparse/MATLAB/Test/test6.m
index 97b1cc8..d8dce80 100644
--- a/CSparse/MATLAB/Test/test6.m
+++ b/CSparse/MATLAB/Test/test6.m
@@ -5,8 +5,7 @@ function test6
 %   test6
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 maxerr = 0 ;
@@ -19,72 +18,75 @@ for trial = 1:201
 
     for uplo = 0:1
 
-	if (uplo == 1)
-	    % solve Ux=b instead ;
-	    L = L' ;
-	end
-
-	x = L\b ;
-	sr = 1 + cs_reachr (L,b) ;
-	sz = 1 + cs_reachr (L,b) ;
-
-	check_if_same (sr,sz) ;
-
-	s2 = 1 + cs_reach (L,b) ;
-
-	if (uplo == 0)
-	    x3 = cs_lsolve (L,b) ;
-	else
-	    x3 = cs_usolve (L,b) ;
-	end
-
-	spy ([L b x x3])
-	drawnow
-
-	s = sort (sr) ;
-	[i j xx] = find (x) ;						    %#ok
-	[i3 j3 xx3] = find (x3) ;					    %#ok
-
-	if (isempty (i))
-	    if (~isempty (s))
-		i	%#ok
-		s	%#ok
-		error ('!') ;
-	    end
-	elseif (any (s ~= i))
-	    i	    %#ok
-	    s	    %#ok
-	    error ('!') ;
-	end
-
-	if (isempty (i3))
-	    if (~isempty (s))
-		i3	%#ok
-		s	%#ok
-		error ('!') ;
-	    end
-	elseif (any (s ~= sort (i3)))
-	    s	    %#ok
-	    i3	    %#ok
-	    error ('!') ;
-	end
-
-	if (any (s2 ~= sr))
-	    s2	    %#ok
-	    sr	    %#ok
-	    error ('!') ;
-	end
-
-	err = norm (x-x3,1) ;
-	if (err > 1e-12)
-	    x	    %#ok
-	    x3	    %#ok
-	    uplo    %#ok
-	    err	    %#ok
-	    error ('!') 
-	end
-
-	maxerr = max (maxerr, err) ;
+        if (uplo == 1)
+            % solve Ux=b instead ;
+            L = L' ;
+        end
+
+        x = L\b ;
+        sr = 1 + cs_reachr (L,b) ;
+        sz = 1 + cs_reachr (L,b) ;
+
+        check_if_same (sr,sz) ;
+
+        s2 = 1 + cs_reach (L,b) ;
+
+        if (uplo == 0)
+            x3 = cs_lsolve (L,b) ;
+        else
+            x3 = cs_usolve (L,b) ;
+        end
+        % cs_lsolve and cs_usolve return sparse vectors with
+        % unsorted indices and possibly with explicit zeros.
+        x3 = 1 * x3'' ;
+
+        spy ([L b x x3])
+        drawnow
+
+        s = sort (sr) ;
+        [i j xx] = find (x) ;                                               %#ok
+        [i3 j3 xx3] = find (x3) ;                                           %#ok
+
+        if (isempty (i))
+            if (~isempty (s))
+                i       %#ok
+                s       %#ok
+                error ('!') ;
+            end
+        elseif (any (s ~= i))
+            i       %#ok
+            s       %#ok
+            error ('!') ;
+        end
+
+        if (isempty (i3))
+            if (~isempty (s))
+                i3      %#ok
+                s       %#ok
+                error ('!') ;
+            end
+        elseif (any (s ~= sort (i3)))
+            s       %#ok
+            i3      %#ok
+            error ('!') ;
+        end
+
+        if (any (s2 ~= sr))
+            s2      %#ok
+            sr      %#ok
+            error ('!') ;
+        end
+
+        err = norm (x-x3,1) ;
+        if (err > 1e-12)
+            x       %#ok
+            x3      %#ok
+            uplo    %#ok
+            err     %#ok
+            error ('!') 
+        end
+
+        maxerr = max (maxerr, err) ;
 
     end
 
diff --git a/CSparse/MATLAB/Test/test7.m b/CSparse/MATLAB/Test/test7.m
index 24fd0d5..c7ebf6a 100644
--- a/CSparse/MATLAB/Test/test7.m
+++ b/CSparse/MATLAB/Test/test7.m
@@ -5,8 +5,7 @@ function test7
 %   test7
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -19,11 +18,11 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     if (~isreal (A))
-	continue
+        continue
     end
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     [L,U,P] = lu (A) ;
@@ -34,16 +33,16 @@ for i = f
 
     if (umin > 1e-14)
 
-	[L2,U2,p] = cs_lu (A) ;
+        [L2,U2,p] = cs_lu (A) ;
 
-	subplot (3,4,1) ; spy (A) ;
-	subplot (3,4,2) ; spy (A(p,:)) ;
-	subplot (3,4,3) ; spy (L2) ;
-	subplot (3,4,4) ; spy (U2) ;
+        subplot (3,4,1) ; spy (A) ;
+        subplot (3,4,2) ; spy (A(p,:)) ;
+        subplot (3,4,3) ; spy (L2) ;
+        subplot (3,4,4) ; spy (U2) ;
 
-	err1 = norm (L*U-P*A,1) ;
-	err2 = norm (L2*U2-A(p,:),1) ;
-	fprintf ('err %g %g\n', err1, err2) ;
+        err1 = norm (L*U-P*A,1) ;
+        err2 = norm (L2*U2-A(p,:),1) ;
+        fprintf ('err %g %g\n', err1, err2) ;
     end
 
     q = colamd (A) ;
@@ -56,23 +55,23 @@ for i = f
 
     if (umin > 1e-14)
 
-	[L2,U2,p,q2] = cs_lu (A) ;
+        [L2,U2,p,q2] = cs_lu (A) ;
 
-	subplot (3,4,5) ; spy (A) ;
-	subplot (3,4,6) ; spy (A(p,q2)) ;
-	subplot (3,4,7) ; spy (L2) ;
-	subplot (3,4,8) ; spy (U2) ;
+        subplot (3,4,5) ; spy (A) ;
+        subplot (3,4,6) ; spy (A(p,q2)) ;
+        subplot (3,4,7) ; spy (L2) ;
+        subplot (3,4,8) ; spy (U2) ;
 
-	err1 = norm (L*U-P*A(:,q),1) ;
-	err2 = norm (L2*U2-A(p,q2),1) ;
-	fprintf ('err %g %g\n', err1, err2) ;
+        err1 = norm (L*U-P*A(:,q),1) ;
+        err2 = norm (L2*U2-A(p,q2),1) ;
+        fprintf ('err %g %g\n', err1, err2) ;
     end
 
 
     try
-	q = amd (A) ;
+        q = amd (A) ;
     catch
-	q = symamd (A) ;
+        q = symamd (A) ;
     end
 
     tol = 0.01 ;
@@ -85,20 +84,20 @@ for i = f
 
     if (umin > 1e-14)
 
-	[L2,U2,p,q2] = cs_lu (A,tol) ;
+        [L2,U2,p,q2] = cs_lu (A,tol) ;
 
-	subplot (3,4,9) ; spy (A) ;
-	subplot (3,4,10) ; spy (A(p,q2)) ;
-	subplot (3,4,11) ; spy (L2) ;
-	subplot (3,4,12) ; spy (U2) ;
+        subplot (3,4,9) ; spy (A) ;
+        subplot (3,4,10) ; spy (A(p,q2)) ;
+        subplot (3,4,11) ; spy (L2) ;
+        subplot (3,4,12) ; spy (U2) ;
 
-	err1 = norm (L*U-P*A(q,q),1) ;
-	err2 = norm (L2*U2-A(p,q2),1) ;
-	lbig = full (max (max (abs (L2)))) ;
-	fprintf ('err %g %g lbig %g\n', err1, err2, lbig) ;
-	if (lbig > 1/tol)
-	    error ('L!') ;
-	end
+        err1 = norm (L*U-P*A(q,q),1) ;
+        err2 = norm (L2*U2-A(p,q2),1) ;
+        lbig = full (max (max (abs (L2)))) ;
+        fprintf ('err %g %g lbig %g\n', err1, err2, lbig) ;
+        if (lbig > 1/tol)
+            error ('L!') ;
+        end
     end
 
     drawnow
diff --git a/CSparse/MATLAB/Test/test8.m b/CSparse/MATLAB/Test/test8.m
index 7922fc3..d1c78d3 100644
--- a/CSparse/MATLAB/Test/test8.m
+++ b/CSparse/MATLAB/Test/test8.m
@@ -1,11 +1,11 @@
+function test8
 %TEST8 test cs_cholsol, cs_lusol
 %
 % Example:
 %   test8
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -18,37 +18,37 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     spd = 0 ;
     if (m == n)
-	if (nnz (A-A') == 0)
-	    try
-		p = amd (A) ;
-	    catch
-		p = symamd (A) ;
-	    end
-	    [R,p] = chol (A (p,p)) ;
-	    spd = (p == 0) ;
-	end
+        if (nnz (A-A') == 0)
+            try
+                p = amd (A) ;
+            catch
+                p = symamd (A) ;
+            end
+            [R,p] = chol (A (p,p)) ;
+            spd = (p == 0) ;
+        end
     end
 
     if (spd)
-	C = A ;
+        C = A ;
     else
-	C = A*A' + n*speye (n) ;
-	try
-	    p = amd (C) ;
-	catch
-	    p = symamd (C) ;
-	end
-	try
-	    R = chol (C (p,p)) ;
-	catch
-	    continue
-	end
+        C = A*A' + n*speye (n) ;
+        try
+            p = amd (C) ;
+        catch
+            p = symamd (C) ;
+        end
+        try
+            R = chol (C (p,p)) ;
+        catch
+            continue
+        end
     end
 
     b = rand (n,1) ;
@@ -60,7 +60,7 @@ for i = f
     err = abs (r1-r2) ;
     fprintf ('err %g\n', err) ;
     if (err > 1e-10)
-	error ('!') ;
+        error ('!') ;
     end
 
     x2 = cs_lusol (C,b, 1, 0.001) ;
@@ -68,18 +68,18 @@ for i = f
     err = abs (r1-r2) ;
     fprintf ('err %g (lu with amd(A+A'')\n', err) ;
     if (err > 1e-10)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (m ~= n)
-	continue ;
+        continue ;
     end
 
     x1 = A\b ;
     r1 = norm (A*x1-b,1) / norm (A,1) ;
     if (r1 < 1e-6)
-	x2 = cs_lusol (A,b) ;
-	r2 = norm (A*x2-b,1) / norm (A,1) ;
-	fprintf ('lu resid %g %g\n', r1, r2) ;
+        x2 = cs_lusol (A,b) ;
+        r2 = norm (A*x2-b,1) / norm (A,1) ;
+        fprintf ('lu resid %g %g\n', r1, r2) ;
     end
 end
diff --git a/CSparse/MATLAB/Test/test9.m b/CSparse/MATLAB/Test/test9.m
index 17cecc7..a039aaa 100644
--- a/CSparse/MATLAB/Test/test9.m
+++ b/CSparse/MATLAB/Test/test9.m
@@ -5,8 +5,7 @@ function test9
 %   test9
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -25,12 +24,12 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     sp = sprank (A) ;
 %    if (sprank (A) < min (m,n))
-%	continue
+%       continue
 %    end
     Aorig = A ;
 
@@ -39,27 +38,27 @@ for i = f
 
     tic ;
     R = qr (A) ;
-    t1 = toc ;								    %#ok
+    t1 = toc ;                                                              %#ok
 
     % tic ;
     % [Q,R] = qr (A) ;
     % t1 = toc ;
 
     [c,h,parent] = symbfact (A, 'col') ;
-    rnz = sum (c) ;							    %#ok
+    rnz = sum (c) ;                                                         %#ok
     tic ;
     [V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
-    t2 = toc ;								    %#ok
+    t2 = toc ;                                                              %#ok
 
     v2 = full (V2) ;
     if (any (spones (v2) ~= spones (V2)))
-	error ('got zeros!') ;
+        error ('got zeros!') ;
     end
 
     C = A ;
     m2 = size (V2,1) ;
     if (m2 > m)
-	C = [A ; sparse(m2-m, n)] ;
+        C = [A ; sparse(m2-m, n)] ;
     end
     C = C (p,:) ;
 
@@ -69,45 +68,45 @@ for i = f
 %    s2 = svd (full (R2)) ;
 %    err2 = norm (s1 - s2) / s1 (1) 
 %    fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d n %d\n', ...
-%	t1, t2, t1/t2, sp, n) ;
+%       t1, t2, t1/t2, sp, n) ;
 %    err2
 
     % left-looking:
-    [V,Beta3,R3] = qr_left (C) ;					    %#ok
+    [V,Beta3,R3] = qr_left (C) ;                                            %#ok
     s3 = svd (full (R2)) ;
     err3 = norm (s1 - s3) / s1 (1) ;
     disp ('err3 = ') ; disp (err3) ;
     if (err3 > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     % right-looking:
-    [V,Beta4,R4] = qr_right (C) ;					    %#ok
+    [V,Beta4,R4] = qr_right (C) ;                                           %#ok
     s4 = svd (full (R2)) ;
     err4 = norm (s1 - s4) / s1 (1) ;
     disp ('err4 = ') ; disp (err4) ;
     if (err4 > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     % H2 = full (H2)
     % R2 = full (R2)
 
-    subplot (2,4,1) ; spy (A) ;		title ('A colamd') ;
-    subplot (2,4,2) ; spy (C) ;		title ('A rperm') ;
+    subplot (2,4,1) ; spy (A) ;         title ('A colamd') ;
+    subplot (2,4,2) ; spy (C) ;         title ('A rperm') ;
     subplot (2,4,3) ; treeplot (parent) ;
-    subplot (2,4,4) ; spy (Aorig) ;	title ('Aorig') ;
-    subplot (2,4,5) ; spy (abs(R2)>0) ;	title ('spqr R, no zeros') ;
-    subplot (2,4,6) ; spy (R) ;		title ('matlab R') ;
-    subplot (2,4,7) ; spy (R2) ;	title ('spqr R') ;
-    subplot (2,4,8) ; spy (V2) ;	title ('spqr V') ;
+    subplot (2,4,4) ; spy (Aorig) ;     title ('Aorig') ;
+    subplot (2,4,5) ; spy (abs(R2)>0) ; title ('spqr R, no zeros') ;
+    subplot (2,4,6) ; spy (R) ;         title ('matlab R') ;
+    subplot (2,4,7) ; spy (R2) ;        title ('spqr R') ;
+    subplot (2,4,8) ; spy (V2) ;        title ('spqr V') ;
     drawnow
 
 %    if (err2 > 1e-9)
-%	error ('!') ;
+%       error ('!') ;
 %    end
     if (m2 > m)
-	fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
+        fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
     end
     % pause
 end
diff --git a/CSparse/MATLAB/Test/test_qr.m b/CSparse/MATLAB/Test/test_qr.m
index 349960c..48a5a49 100644
--- a/CSparse/MATLAB/Test/test_qr.m
+++ b/CSparse/MATLAB/Test/test_qr.m
@@ -5,8 +5,7 @@ function test_qr
 %   test_qr
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows,index.ncols)) ;
@@ -23,16 +22,16 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
-    if (sprank (A) < n | ~isreal (A))					    %#ok
-	continue ;
+    if (sprank (A) < n | ~isreal (A))                                       %#ok
+        continue ;
     end
 
     [V,beta,p,R1,q] = cs_qr(A) ;
     A = A (p,q) ;
-    parent = etree (A, 'col') ;						    %#ok
+    parent = etree (A, 'col') ;                                             %#ok
 
     R0 = qr (A) ;
     R2 = qr_givens (full (A)) ;
@@ -49,7 +48,7 @@ for i = f
     e3 = norm (A'*A-R3'*R3,1) / norm (A,1) ;
     fprintf ('error %6.2e %6.2e %6.2e %6.2e\n', e0, e1, e2, e3) ;
     drawnow
-    if (e1 > e0*1e3 | e2 > e0*1e3)					    %#ok
-	pause
+    if (e1 > e0*1e3 | e2 > e0*1e3)                                          %#ok
+        pause
     end
 end
diff --git a/CSparse/MATLAB/Test/test_qr1.m b/CSparse/MATLAB/Test/test_qr1.m
index b2143a5..a41953e 100644
--- a/CSparse/MATLAB/Test/test_qr1.m
+++ b/CSparse/MATLAB/Test/test_qr1.m
@@ -5,9 +5,7 @@ function test_qr1
 %   test_qr1
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -16,41 +14,41 @@ for i = f
     Prob = UFget (i,index) ;
     A = Prob.A ;
     if (~isreal (A))
-	continue ;
+        continue ;
     end
 
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
 
     t0 = 0 ;
     k0 = 0 ;
     while (t0 < 0.1)
-	tic
-	q = colamd (A, [-1 10]) ;
-	% [Q,R] = qr (A (:,q)) ;
-	R = qr (A (:,q)) ;					    %#ok
-	t = toc ;
-	t0 = t0 + t ;
-	k0 = k0 + 1 ;
+        tic
+        q = colamd (A, [-1 10]) ;
+        % [Q,R] = qr (A (:,q)) ;
+        R = qr (A (:,q)) ;                                          %#ok
+        t = toc ;
+        t0 = t0 + t ;
+        k0 = k0 + 1 ;
     end
     t0 = t0 / k0 ;
 
     t1 = 0 ;
     k1 = 0 ;
     while (t1 < 0.1)
-	tic
-	[V,beta, p, R,q]  = cs_qr (A) ;					%#ok
-	t = toc ;
-	t1 = t1 + t ;
-	k1 = k1 + 1 ;
+        tic
+        [V,beta, p, R,q]  = cs_qr (A) ;                                 %#ok
+        t = toc ;
+        t1 = t1 + t ;
+        k1 = k1 + 1 ;
     end
     t1 = t1 / k1 ;
 
     fprintf (...
-	'%25s  MATLAB: %10.4f (%8d)   CS: %10.4f (%8d)  speedup: %8.2f\n', ...
-	Prob.name, t0, k0, t1, k1, t0/t1) ;
+        '%25s  MATLAB: %10.4f (%8d)   CS: %10.4f (%8d)  speedup: %8.2f\n', ...
+        Prob.name, t0, k0, t1, k1, t0/t1) ;
 
 
 
diff --git a/CSparse/MATLAB/Test/test_qrsol.m b/CSparse/MATLAB/Test/test_qrsol.m
index 22c4ade..4fedb4f 100644
--- a/CSparse/MATLAB/Test/test_qrsol.m
+++ b/CSparse/MATLAB/Test/test_qrsol.m
@@ -5,8 +5,7 @@ function test_qrsol
 %   test_qrsol
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -19,10 +18,10 @@ for i = f
     Prob = UFget (i,index) ;
     A = Prob.A ;
     if (~isreal (A))
-	continue ;
+        continue ;
     end
 
-    [m n] = size (A) ;							%#ok
+    [m n] = size (A) ;                                                  %#ok
     b = rand (m,1) ;
 
     x1 = A\b ;
diff --git a/CSparse/MATLAB/Test/test_randperms.m b/CSparse/MATLAB/Test/test_randperms.m
index 193cf9c..b564c46 100644
--- a/CSparse/MATLAB/Test/test_randperms.m
+++ b/CSparse/MATLAB/Test/test_randperms.m
@@ -4,8 +4,7 @@ function test_randperms
 %   test_randperms
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 
@@ -16,14 +15,14 @@ for trial = 1:100
     A = sprandn (m,n,d) ;
 
     if (m == 0)
-	p = [] ;
+        p = [] ;
     else
-	p = randperm (m) ;
+        p = randperm (m) ;
     end
     if (n == 0)
-	q = [] ;
+        q = [] ;
     else
-	q = randperm (n) ;
+        q = randperm (n) ;
     end
 
     C = A(p,q) ;
@@ -35,17 +34,17 @@ for trial = 1:100
 
     q2 = find (Q) ;
     if (any (q ~= q2'))
-	error ('!') 
+        error ('!') 
     end
 
     p2 = find (P') ;
     if (any (p ~= p2'))
-	error ('!') 
+        error ('!') 
     end
 
     E = P*A*Q ;
     if (norm (C-E,1) ~= 0)
-	error ('!') 
+        error ('!') 
     end
 
     P = sparse (1:m, p, 1) ;
@@ -53,7 +52,7 @@ for trial = 1:100
 
     E = P*A*Q ;
     if (norm (C-E,1) ~= 0)
-	error ('2!') 
+        error ('2!') 
     end
 
 end
diff --git a/CSparse/MATLAB/Test/test_sep.m b/CSparse/MATLAB/Test/test_sep.m
index 59213d2..9bc936e 100644
--- a/CSparse/MATLAB/Test/test_sep.m
+++ b/CSparse/MATLAB/Test/test_sep.m
@@ -7,9 +7,7 @@ function test_sep
 %
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length(f)
     A = spones (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	A = A'*A ;
+        A = A'*A ;
     end
 
     A = A|A' ;
@@ -50,7 +48,7 @@ for k = 1:length(f)
     subplot (2,3,3) ; spy (A (a,b)) ; title ('edge sep') ;
     subplot (2,3,6) ; cs_dmspy (A (a,b)) ; title ('node sep') ;
 
-    [s as bs] = vtxsep (A,a,b) ;					%#ok
+    [s as bs] = vtxsep (A,a,b) ;                                        %#ok
     [s2 a2 b2] = cs_sep (A,a,b) ;
 
     p2 = [a2 b2 s2] ;
@@ -60,14 +58,14 @@ for k = 1:length(f)
 
     px = [s2 a2 b2] ;
     if (any (sort (px) ~= 1:n))
-	px	%#ok
-	n	%#ok
-	error ('!') ;
+        px      %#ok
+        n       %#ok
+        error ('!') ;
     end
 
     na = length (a2) ;
     nb = length (b2) ;
-    ns = length (s2) ;							%#ok
+    ns = length (s2) ;                                                  %#ok
 
     nab = na + nb ;
 
@@ -81,18 +79,18 @@ for k = 1:length(f)
 
     nz1 = nnz (A (a2,b2)) ;
     if (nz1 ~= 0)
-	nz1	%#ok
-	error ('!') ;
+        nz1     %#ok
+        error ('!') ;
     end
 
     nz2 = nnz (A (a2,b2)) ;
     if (nz2 ~= 0)
-	nz2	%#ok
-	error ('!') ;
+        nz2     %#ok
+        error ('!') ;
     end
 
     if (length (s) ~= length (s2))
-	fprintf ('lengths differ: %d %d\n', length (s), length (s2)) ;
+        fprintf ('lengths differ: %d %d\n', length (s), length (s2)) ;
     end
 
     drawnow
diff --git a/CSparse/MATLAB/Test/testall.m b/CSparse/MATLAB/Test/testall.m
index 5fb720c..195e4e5 100644
--- a/CSparse/MATLAB/Test/testall.m
+++ b/CSparse/MATLAB/Test/testall.m
@@ -5,12 +5,11 @@ function testall
 %   testall
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 h = waitbar (0, 'CSparse') ;
 
-cs_test_make	    % compile all CSparse, Demo, Text, and Test mexFunctions
+cs_test_make        % compile all CSparse, Demo, Text, and Test mexFunctions
 
 ntests = 28 ;
 
@@ -44,6 +43,7 @@ testwait (27, ntests, h) ; test27 ;
 testwait (28, ntests, h) ; test28 ;
 
 close (h)
+fprintf ('All CSparse tests passed\n') ;
 
 function testwait (n,ntests,h)
 fprintf ('\n------------------------ test%d\n', n) ;
diff --git a/CSparse/MATLAB/Test/testh.m b/CSparse/MATLAB/Test/testh.m
index 9f32f27..e650fea 100644
--- a/CSparse/MATLAB/Test/testh.m
+++ b/CSparse/MATLAB/Test/testh.m
@@ -5,9 +5,7 @@ function testh
 %   testh
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 format long e
 fprintf ('-------------------------------------------------\n') ;
@@ -79,7 +77,7 @@ fprintf ('-------------------------------------------------\n') ;
 
 x = [1 0 0]' ;
 disp (x) ;
-[v, beta, s] = house (x) ;						    %#ok
+[v, beta, s] = house (x) ;                                                  %#ok
 x = x - v*(beta*(v'*x)) ;
 disp (x) ;
 fprintf ('-------------------------------------------------\n') ;
diff --git a/CSparse/MATLAB/UFget/Contents.m b/CSparse/MATLAB/UFget/Contents.m
index 398226a..fa07d67 100644
--- a/CSparse/MATLAB/UFget/Contents.m
+++ b/CSparse/MATLAB/UFget/Contents.m
@@ -3,6 +3,8 @@
 %   UFget             - loads a matrix from the UF Sparse Matrix Collection.
 %   UFweb             - opens the URL for a matrix.
 %   UFgrep            - search for matrices in the UF Sparse Matrix Collection.
+%   UFkinds           - get 'kind' of each problem in the UF collection.
+%   UFsvd             - singular values of a matrix in the UF collection.
 %
 % Helper functions:
 %
@@ -13,4 +15,4 @@
 % Example:
 %   help UFget
 
-% Copyright 2007, Timothy A. Davis
+% Copyright 2012, Timothy A. Davis
diff --git a/CSparse/MATLAB/UFget/Makefile b/CSparse/MATLAB/UFget/Makefile
new file mode 100644
index 0000000..54dab27
--- /dev/null
+++ b/CSparse/MATLAB/UFget/Makefile
@@ -0,0 +1,7 @@
+UFgui.jar:  UFgui.java UFhelp.html
+	javac UFgui.java
+	jar cfe UFgui.jar UFgui *.class UFhelp.html
+	- $(RM) *.class
+
+run: UFgui.jar
+	java -jar UFgui.jar
diff --git a/CSparse/MATLAB/UFget/README.txt b/CSparse/MATLAB/UFget/README.txt
index 0353409..83a882d 100644
--- a/CSparse/MATLAB/UFget/README.txt
+++ b/CSparse/MATLAB/UFget/README.txt
@@ -1,67 +1,124 @@
-UFget:  a MATLAB interface to the UF sparse matrix collection.
-MATLAB 7.0 or later is required.
+UFget:  MATLAB and Java interfaces to the UF sparse matrix collection.
+Copyright 2005-2012, Timothy A. Davis, http://www.suitesparse.com
 
-Date: May 31, 2007.
+REQUIREMENTS:
 
-Copyright 2005-2007, Tim Davis, University of Florida.
-Authors: Tim Davis and Erich Mirable.
-Availability: http://www.cise.ufl.edu/research/sparse/mat/UFget
+    Java JRE 1.6.0 or later is required for the UFgui Java program.
+    UFget requires MATLAB 7.0.  A few of the largest matrices require MATLAB
+    7.3 or later.
 
-See http://www.cise.ufl.edu/research/sparse/mat/UFget.tar.gz
-for a single archive file with all the files listed below.
+See http://www.suitesparse.com
+for a single archive file with all the files listed below:
 
-    UFget/Contents.m		help for UFget
-    UFget/README.txt		this file
+    UFget/README.txt            this file
+    UFget/UFsettings.txt        default settings for Java and MATLAB
 
-    UFget/UFget_defaults.m	default parameter settings for UFget
-    UFget/UFget_example.m	demo for UFget
-    UFget/UFget_lookup.m	get the group, name, and id of a matrix
-    UFget/UFget.m		primary user interface
+    for Java:
+    UFget/UFgui.java            a stand-alone Java interface to the collection
+    UFget/UFgui.jar             the compiled UFgui program
+    UFget/UFhelp.html           help for UFgui
+    UFget/Makefile              for compiling UFgui.java into UFgui.jar
+    UFget/matrices/UFstats.txt  matrix statistics file for UFgui.java
 
-    UFget/UFweb.m		opens the URL for a matrix or collection
+    for MATLAB:
+    UFget/Contents.m            help for UFget in MATLAB
+    UFget/UFget_defaults.m      default parameter settings for UFget
+    UFget/UFget_example.m       demo for UFget
+    UFget/UFget_lookup.m        get the group, name, and id of a matrix
+    UFget/UFget.m               primary user interface
+    UFget/UFgrep.m              searches for matrices by name
+    UFget/UFkinds.m             returns the 'kind' for all matrices
+    UFget/UFweb.m               opens the URL for a matrix or collection
+    UFget/mat/UF_Index.mat      index to the UF sparse matrix collection
 
-    UFget/mat			default download directory (can be changed)
-    UFget/mat/UF_Index.mat	index to the UF sparse matrix collection
+    download directories:
+    UFget/MM                    for Matrix Market files
+    UFget/RB                    for Rutherford/Boeing files
+    UFget/mat                   for *.mat files
+    UFget/matrices              for *.png icon images of the matrices
 
-To install the package, just add the path containing the UFget directory
-to your MATLAB path.  Type "pathtool" in MATLAB for more details.
+For the Java UFgui program:
 
-For a simple example of use, type this command in MATLAB:
+    To run the UFgui on Windows or Mac OS X, just double-click the UFgui.jar
+    file.  Or, on any platform, type the following command in your command
+    window:
 
-    UFget_example
+        java -jar UFgui.jar
 
-The MATLAB statement
+    If that doesn't work, then you need to install the Java JDK or JRE and add
+    it to your path.  See http://java.sun.com/javase/downloads/index.jsp and
+    http://java.sun.com/javase/6/webnotes/install/index.html for more
+    information.  For Ubuntu, you can install Java by running the Synaptics
+    package manager.
 
-    Problem = UFget ('HB/arc130')
+    The UFgui.jar file is the compiled version of UFgui.java.  If you modify
+    UFgui.java, you can recompile it (for Unix/Linux/Mac/Solaris) by typing
+    the command:
 
-(for example), will download a sparse matrix called HB/arc130 (a laser
-simulation problem) and load it into MATLAB.  You don't need to use your
-web browser to load the matrix.  The statement
+        make
 
-    Problem = UFget (6)
+    To run the UFgui in Linux/Solaris/Unix, your window manager might support
+    double-clicking the UFgui.jar file as well.  If not, type either of
+    the following commands:
 
-will also load same the HB/arc130 matrix.  Each matrix in the collection has
-a unique identifier, in the range 1 to the number of matrices.  As new
-matrices are added, the id's of existing matrices will not change.
+        java -jar UFgui.jar
 
-To view an index of the entire collection, just type
+    or
 
-    UFget
+        make run
+        
 
-in MATLAB.  To modify your download directory, edit the UFget_defaults.m file.
+For the UFget.m MATLAB interface:
 
-To open a URL of the entire collection, just type
+    To install the MATLAB package, just add the path containing the UFget
+    directory to your MATLAB path.  Type "pathtool" in MATLAB for more details.
 
-    UFweb
+    For a simple example of use, type this command in MATLAB:
 
-To open the URL of a group of matrices in the collection:
+        UFget_example
 
-    UFweb ('HB')
+    The MATLAB statement
 
-To open the web page for one matrix, use either of these formats:
+        Problem = UFget ('HB/arc130')
 
-    UFweb ('HB/arc130')
-    UFweb (6)
+    (for example), will download a sparse matrix called HB/arc130 (a laser
+    simulation problem) and load it into MATLAB.  You don't need to use your
+    web browser to load the matrix.  The statement
 
-For more information on how the index entries were created, see
-http://www.cise.ufl.edu/research/sparse/SuiteSparse.
+        Problem = UFget (6)
+
+    will also load same the HB/arc130 matrix.  Each matrix in the collection
+    has a unique identifier, in the range 1 to the number of matrices.  As new
+    matrices are added, the id's of existing matrices will not change.
+
+    To view an index of the entire collection, just type
+
+        UFget
+
+    in MATLAB.  To modify your download directory, edit the UFget_defaults.m
+    file (note that this will not modify the download directory for the
+    UFgui java program, however).
+
+    To open a URL of the entire collection, just type
+
+        UFweb
+
+    To open the URL of a group of matrices in the collection:
+
+        UFweb ('HB')
+
+    To open the web page for one matrix, use either of these formats:
+
+        UFweb ('HB/arc130')
+        UFweb (6)
+
+    To download a new index, to get access to new matrices:
+
+        UFget ('refresh')
+
+    (by default, using UFget downloads the index every 90 days anyway).
+
+    To search for matrices
+
+For more information on how the matrix statistics were created, see
+http://www.suitesparse.com.
diff --git a/CSparse/MATLAB/UFget/UFget.m b/CSparse/MATLAB/UFget/UFget.m
index 2ef17ed..afe49c0 100644
--- a/CSparse/MATLAB/UFget/UFget.m
+++ b/CSparse/MATLAB/UFget/UFget.m
@@ -5,51 +5,107 @@ function Problem = UFget (matrix, UF_Index)
 %   specified as either a number (1 to the # of matrices in the collection) or
 %   as a string (the name of the matrix).  With no input parameters, index=UFget
 %   returns an index of matrices in the collection.  A local copy of the matrix
-%   is saved (be aware that as of May 2007 the entire collection is over 8GB
-%   in size).  If no input or output arguments are provided, the index is
+%   is saved.  If no input or output arguments are provided, the index is
 %   printed.  With a 2nd parameter (Problem = UFget (matrix, index)), the index
 %   file is not loaded.  This is faster if you are loading lots of matrices.
 %
 %   Examples:
-%       index = UFget ;
-%       Problem = UFget (6)
+%       index = UFget ;                     % loads index
+%       index = UFget ('refresh') ;         % forces download of new index
+%       index = UFget ('update') ;          % same as 'refresh'
+%
+%       Problem = UFget (6)                 % 4 ways of loading the same Problem
 %       Problem = UFget ('HB/arc130')
 %       Problem = UFget (6, index)
 %       Problem = UFget ('HB/arc130', index)
 %
 %   See also UFgrep, UFweb, UFget_example, UFget_defaults, urlwrite.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 %-------------------------------------------------------------------------------
 % get the parameter settings
 %-------------------------------------------------------------------------------
 
 params = UFget_defaults ;
+
+% The UF_Index.mat file is used by UFget only, not by UFgui.java.
 indexfile = sprintf ('%sUF_Index.mat', params.dir) ;
-indexurl = sprintf ('%s/UF_Index.mat', params.url) ;
+indexurl  = sprintf ('%s/UF_Index.mat', params.url) ;
+
+% The UFstats.csv file is used by the UFgui.java program.  It is also used by
+% the UFkinds.m function, which reads the file to find the problem kind for
+% each matrix in the collection.
+statfile = sprintf ('%smatrices/UFstats.csv', params.topdir) ;
+staturl  = sprintf ('%s/matrices/UFstats.csv', params.topurl) ;
 
 %-------------------------------------------------------------------------------
 % get the index file (download a new one if necessary)
 %-------------------------------------------------------------------------------
 
-try
-    % load the existing index file
-    if (nargin < 2)
-	load (indexfile) ;
+refresh = 0 ;
+if nargin == 0
+    % if the user passed in a zero or no argument at all, return the index file
+    matrix = 0 ;
+else
+    % UFget ('refresh') downloads the latest index file from the web
+    if (ischar (matrix))
+        if (strcmp (matrix, 'refresh') || strcmp (matrix, 'update'))
+            matrix = 0 ;
+            refresh = 1 ;
+        end
     end
-    % see if the index file is old; if so, download a fresh copy
-    refresh = (UF_Index.DownloadTimeStamp + params.refresh < now) ;
-catch
-    % oops, no index file.  download it.
-    refresh = 1 ;
 end
 
+if (~refresh)
+    try
+        % load the existing index file
+        if (nargin < 2)
+            load (indexfile) ;
+        end
+        % see if the index file is old; if so, download a fresh copy
+        fileinfo = dir (indexfile) ;
+        refresh = (fileinfo.datenum + params.refresh < now) ;
+    catch
+        % oops, no index file, or a refresh is due.  download it.
+        refresh = 1 ;
+    end
+end
+
+err = '' ;      % to catch a download error, if any
+
 if (refresh)
     % a new UF_Index.mat file to get access to new matrices (if any)
-    fprintf ('downloading %s\n', indexurl) ;
-    fprintf ('to %s\n', indexfile) ;
-    urlwrite (indexurl, indexfile) ;
+    try
+        if (~exist (params.dir, 'dir'))
+            mkdir (params.dir) ;
+        end
+
+        % get a new UF_index.mat file
+        tmp = tempname ;                        % download to a temp file first
+        old = sprintf ('%sUF_Index_old.mat', params.dir) ;
+        urlwrite (indexurl, tmp) ;              % download the latest index file
+        try
+            movefile (indexfile, old, 'f') ;    % keep a backup of the old index
+        catch
+            % backup failed, continue anyway
+        end
+        movefile (tmp, indexfile, 'f') ;        % move the new index into place
+
+        % get a new UFstats.csv file
+        tmp = tempname ;                        % download to a temp file first
+        old = sprintf ('%smatrices/UFstats_old.csv', params.topdir) ;
+        urlwrite (staturl, tmp) ;               % download the latest stats file
+        try
+            movefile (statfile, old, 'f') ;     % keep a backup of the old stats
+        catch
+            % backup failed, continue anyway
+        end
+        movefile (tmp, statfile, 'f') ;         % move the new index into place
+
+    catch
+        err = lasterr ;
+    end
     load (indexfile) ;
     UF_Index.DownloadTimeStamp = now ;
     save (indexfile, 'UF_Index') ;
@@ -59,11 +115,6 @@ end
 % return the index file if requested
 %-------------------------------------------------------------------------------
 
-% if the user passed in a zero or no argument at all, return the index file
-if nargin == 0
-    matrix = 0 ;
-end
-
 if (matrix == 0)
     if (nargout == 0)
         % no output arguments have been passed, so print the index file
@@ -107,6 +158,11 @@ if (matrix == 0)
     else
         Problem = UF_Index ;
     end
+
+    if (~isempty (err))
+        fprintf ('\nUFget: unable to download latest index; using old one.\n') ;
+        disp (err) ;
+    end
     return ;
 end
 
@@ -128,15 +184,15 @@ matfile = sprintf ('%s%s%s.mat', matdir, filesep, matrix) ;
 maturl = sprintf ('%s/%s/%s.mat', params.url, group, matrix) ;
 
 if (~exist (matdir, 'dir'))
-    mkdir (matdir) ;
+    mkdir (matdir) ;                        % create the Group directory
 end
 
-if (exist (matfile, 'file'))
-    load (matfile)
-else
+if (~exist (matfile, 'file'))
     fprintf ('downloading %s\n', maturl) ;
     fprintf ('to %s\n', matfile) ;
-    urlwrite (maturl, matfile) ;
-    load (matfile)
-    save (matfile, 'Problem') ;
+    tmp = tempname ;                        % download to a temp file first
+    urlwrite (maturl, tmp) ;
+    movefile (tmp, matfile, 'f') ;          % move the new matrix into place
 end
+
+load (matfile) ;
diff --git a/CSparse/MATLAB/UFget/UFget_defaults.m b/CSparse/MATLAB/UFget/UFget_defaults.m
index 31425c4..71be200 100644
--- a/CSparse/MATLAB/UFget/UFget_defaults.m
+++ b/CSparse/MATLAB/UFget/UFget_defaults.m
@@ -1,43 +1,71 @@
 function params = UFget_defaults
 %UFGET_DEFAULTS returns default parameter settings for UFget.
 %   Usage:  params = UFget_defaults ; Returns the default parameter settings for
-%   UFget.  This file may be editted to change these settings:
+%   UFget.  Edit the UFget/UFsettings.txt file to change these settings.
 %
-%   params.url: UF sparse matrix web site
-%   params.dir: your local directory for downloaded sparse matrices.
+%   params.url: URL for *.mat files
+%   params.dir: your local directory for downloaded *.mat files
 %   params.refresh:  how many days should elapse before re-downloading the
 %       index file (for obtaining access to new matrices in the collection).
+%   params.topurl: URL for UF Sparse Matrix Collection
+%   params.topdir: your directory for mat/, matrices/, MM/ and RB/ directories
 %
 %   Example:
 %       params = UFget_defaults ;
 %
 %   See also UFget.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
-%-------------------------------------------------------------------------------
-% location of the UF sparse matrix collection
-params.url = 'http://www.cise.ufl.edu/research/sparse/mat' ;
-
-%-------------------------------------------------------------------------------
 % decode the current directory for this M-file
 s = which (mfilename) ;
 i = find (s == filesep) ;
-s = s (1:i(end)) ;
+this = s (1:i(end)) ;
+
+% defaults, if UFsettings.txt is not present
+params.topdir = '' ;
+params.topurl = 'http://www.cise.ufl.edu/research/sparse' ;
+params.refresh = 30 ;
+
+% open the UFsettings.txt file, if present, and read the default settings
+
+f = -1 ;
+try
+    f = fopen (sprintf ('%sUFsettings.txt', this), 'r') ;
+    if (f >= 0)
+        % get the location of the mat directory
+        s = fgetl (f) ;
+        if (ischar (s))
+            params.topdir = s ;
+        end
+        % get the default URL
+        s = fgetl (f) ;
+        if (ischar (s))
+            params.topurl = s ;
+        end
+        % get the refresh rate
+        s = fgetl (f) ;
+        if (ischar (s) && ~isempty (s))
+            params.refresh = str2double (s) ;
+        end
+    end
+catch
+end
 
-%-------------------------------------------------------------------------------
-% define the directory to download into.  Should end in file separator.
-% Some examples include:
-% params.dir = '/cise/research/sparse/public_html/mat/' ;   % if at UF
-% params.dir = 'your directory here/' ;
-% params.dir = 'c:\matlab\work\UFget\mat\' ;
+try
+    if (f >= 0)
+        fclose (f) ;
+    end
+catch
+end
 
-% Default: the directory containing this UFget_defaults function
-params.dir = sprintf ('%smat%s', s, filesep) ;
+if (isempty (params.topdir))
+    params.topdir = this ;
+end
 
-%-------------------------------------------------------------------------------
-% define how often to check for a new index file (in # of days)
-% inf will force the program to ignore the need to refresh
+if (params.topdir (end) ~= filesep)
+    params.topdir = [params.topdir filesep] ;
+end
 
-% params.refresh = Inf ;				    % if at UF
-params.refresh = 90 ;
+params.url = [params.topurl '/mat'] ;
+params.dir = sprintf ('%smat%s', params.topdir, filesep) ;
diff --git a/CSparse/MATLAB/UFget/UFget_example.m b/CSparse/MATLAB/UFget/UFget_example.m
index 7381c1a..be9c209 100644
--- a/CSparse/MATLAB/UFget/UFget_example.m
+++ b/CSparse/MATLAB/UFget/UFget_example.m
@@ -8,7 +8,7 @@
 %
 %   See also UFget, UFweb, UFgrep.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 type UFget_example ;
 
@@ -19,7 +19,7 @@ f = f (j) ;
 
 for i = f
     fprintf ('Loading %s%s%s, please wait ...\n', ...
-	index.Group {i}, filesep, index.Name {i}) ;
+        index.Group {i}, filesep, index.Name {i}) ;
     Problem = UFget (i,index) ;
     disp (Problem) ;
     spy (Problem.A) ;
diff --git a/CSparse/MATLAB/UFget/UFget_lookup.m b/CSparse/MATLAB/UFget/UFget_lookup.m
index bbc9055..6c8a815 100644
--- a/CSparse/MATLAB/UFget/UFget_lookup.m
+++ b/CSparse/MATLAB/UFget/UFget_lookup.m
@@ -6,7 +6,7 @@ function [group, name, id] = UFget_lookup (matrix, UF_Index)
 %
 %   See also UFget.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (isnumeric (matrix))
 
@@ -16,14 +16,14 @@ if (isnumeric (matrix))
 
     % if the index is less than one or bigger than the length of the array,
     % then no particular matrix is accessed
-    if (id > length (UF_Index.nrows) | id < 1)				    %#ok
-	id = 0 ;
-	group = '' ;
-	name = '' ;
+    if (id > length (UF_Index.nrows) | id < 1)                              %#ok
+        id = 0 ;
+        group = '' ;
+        name = '' ;
     else
-	% assign the group and name for the given id
-	group = UF_Index.Group {matrix} ;
-	name = UF_Index.Name {matrix} ;
+        % assign the group and name for the given id
+        group = UF_Index.Group {matrix} ;
+        name = UF_Index.Name {matrix} ;
     end
 
 elseif (ischar (matrix))
@@ -33,40 +33,40 @@ elseif (ischar (matrix))
     % find the group index for the file separator
     % check both types of slashes, and a colon
     gi = find (matrix == '/') ;
-    if (length (gi) == 0)						    %#ok
+    if (length (gi) == 0)                                                   %#ok
         gi = find (matrix == '\') ;
     end
-    if (length (gi) == 0)						    %#ok
+    if (length (gi) == 0)                                                   %#ok
         gi = find (matrix == ':') ;
     end
 
     % if no name divider is in the string, a whole group is specified
-    if (length (gi) == 0)						    %#ok
+    if (length (gi) == 0)                                                   %#ok
 
-	id = 0 ;
-	group = matrix ;
-	name = '' ;
+        id = 0 ;
+        group = matrix ;
+        name = '' ;
 
     else
 
-	% group equals the first part of the string up to the character before
-	% the last file separator
-	group = matrix (1:gi(end)-1) ;
-
-	% group equals the last section of the string after the last file
-	% separator
-	name = matrix (gi(end)+1:end) ;
-
-	% validate the given name and group by checking the index for a match
-	refName = strmatch (name, UF_Index.Name) ;
-	refGroup = strmatch (group, UF_Index.Group) ;
-	id = intersect (refName, refGroup) ;
-	if (length (id) >= 1)
-	    id = id (1) ;
-	else
-	    % the given group/matrix does not exist in the index file
-	    id = 0 ;
-	end
+        % group equals the first part of the string up to the character before
+        % the last file separator
+        group = matrix (1:gi(end)-1) ;
+
+        % group equals the last section of the string after the last file
+        % separator
+        name = matrix (gi(end)+1:end) ;
+
+        % validate the given name and group by checking the index for a match
+        refName = strmatch (name, UF_Index.Name) ;
+        refGroup = strmatch (group, UF_Index.Group) ;
+        id = intersect (refName, refGroup) ;
+        if (length (id) >= 1)
+            id = id (1) ;
+        else
+            % the given group/matrix does not exist in the index file
+            id = 0 ;
+        end
     end
 
 else
diff --git a/CSparse/MATLAB/UFget/UFgrep.m b/CSparse/MATLAB/UFget/UFgrep.m
index be7beff..6712139 100644
--- a/CSparse/MATLAB/UFget/UFgrep.m
+++ b/CSparse/MATLAB/UFget/UFgrep.m
@@ -20,7 +20,7 @@ function list = UFgrep (expression, index)
 %
 % See also regexp, UFget.
 
-% Copyright 2007, Timothy A. Davis
+% Copyright 2009, Timothy A. Davis
 
 if (nargin < 2)
     index = UFget ;
@@ -37,8 +37,8 @@ matched = 0 ;
 for id = 1:nmat
     name = [index.Group{id} '/' index.Name{id}] ;
     if (~isempty (regexp (name, expression, 'once')))
-	matched = matched + 1 ;
-	list1 (matched) = id ;
+        matched = matched + 1 ;
+        list1 (matched) = id ;
     end
 end
 
@@ -46,7 +46,7 @@ list1 = list1 (1,1:matched) ;
 
 if (nargout == 0)
     for id = list1
-	fprintf ('%4d: %s/%s\n', id, index.Group {id}, index.Name {id}) ;
+        fprintf ('%4d: %s/%s\n', id, index.Group {id}, index.Name {id}) ;
     end
 else
     list = list1 ;
diff --git a/CSparse/MATLAB/UFget/UFgui.jar b/CSparse/MATLAB/UFget/UFgui.jar
new file mode 100644
index 0000000..cbb3b40
Binary files /dev/null and b/CSparse/MATLAB/UFget/UFgui.jar differ
diff --git a/CSparse/MATLAB/UFget/UFgui.java b/CSparse/MATLAB/UFget/UFgui.java
new file mode 100644
index 0000000..d4f1136
--- /dev/null
+++ b/CSparse/MATLAB/UFget/UFgui.java
@@ -0,0 +1,2589 @@
+//------------------------------------------------------------------------------
+// UFgui: a Java GUI interface for viewing, selecting, and downloading matrices
+// from the University of Florida Sparse Matrix Collection.  To compile this
+// program, type the following in your OS command window:
+//
+//      javac UFgui.java
+//      jar cfe UFgui.jar UFgui *.class UFhelp.html
+//
+// You can then delete the *.class files.  To run the program, type:
+// 
+//      java -jar UFgui.jar
+//
+// In all platforms except Windows (Mac, Linux, Solaris, ...) compile with:
+//
+//      make
+//
+// and run with
+//
+//      make run
+//
+// Copyright (c) 2009, Timothy A. Davis.  See UFhelp.html for the license, and
+// for help on how to use this program, or click "Help" in the GUI.
+//------------------------------------------------------------------------------
+
+import java.io.* ;
+import java.util.* ;
+import java.text.* ;
+import java.net.* ;
+import javax.swing.* ;
+import javax.swing.table.* ;
+import javax.swing.event.* ;
+import java.awt.* ;
+import java.awt.event.* ;
+
+public class UFgui extends JFrame
+{
+
+    //--------------------------------------------------------------------------
+    // private variables, accessible to all methods in this class
+    //--------------------------------------------------------------------------
+
+    private static final String UFstats = "matrices/UFstats.csv",
+        UFindex = "mat/UF_Index.mat",
+        all_kinds = "(all kinds)", all_groups = "(all groups)" ;
+    private static final int K = 1024, M = K*K, BUFSIZE = K,
+        MSEC_PER_DAY = 86400000 ;
+
+    private static long INF = Long.MAX_VALUE ;
+
+    private long refresh = 90 ;
+    private int nselected ;
+    private int [ ] download_ids = null ;
+    private boolean gui_ready, downloading, cancel, get_icons,
+        new_matrices = false, debug = false ;
+    // private boolean get_UFstats ;
+
+    private matrix_Table_Model matrix_model = null ;
+
+    private File mat, MM, RB, iconDir ;
+    private String [ ] Kinds, Groups ;
+    private Object [ ][ ] Stats ;
+
+    private Date today, last_download ;
+
+    // files and input/output streams
+    private static String ftemp_name = null ;
+    private static BufferedOutputStream ftemp_out = null ;
+    private static BufferedInputStream url_in = null ;
+    private static BufferedReader in_reader = null ;
+    private static PrintWriter print_out = null ;
+    private static String UFsite, UFarchive, proxy_server, proxy_port ;
+
+    // Java Swing components available to all methods in this class:
+    private JTable matrix_Table ;
+    private JButton download_Button, cancel_Button ;
+    // private JButton update_Button ;
+    private JTextField minrow_Field, maxrow_Field, mincol_Field, maxcol_Field,
+        minnz_Field, maxnz_Field, minpsym_Field, maxpsym_Field, minnsym_Field,
+        maxnsym_Field ;
+    private JRadioButton posdef_yes_Button, posdef_no_Button,
+        posdef_either_Button, nd_yes_Button, nd_no_Button, nd_either_Button,
+        real_yes_Button, real_no_Button, real_either_Button,
+        shape_square_Button, shape_rect_Button, shape_either_Button ;
+    private JLabel nselected_Label, progress_size_Label, icon_Label ;
+    private JCheckBox format_mat_Button, format_mm_Button, format_rb_Button ;
+    private JProgressBar progress1_Bar, progress2_Bar ;
+    private JFileChooser chooser ;
+    private JList Group_List, Kind_List ;
+
+    //--------------------------------------------------------------------------
+    // create the GUI
+    //--------------------------------------------------------------------------
+
+    private String get_setting (String default_setting)
+    {
+        String s ;
+        try
+        {
+            s = in_reader.readLine ( ) ;
+        }
+        catch (Exception e)
+        {
+            // use defaults if file is not found
+            s = default_setting ;
+        }
+        return (s) ;
+    }
+
+    private UFgui ( )
+    {
+        gui_ready = false ;
+        downloading = false ;
+        cancel = false ;
+        final Font plain_Font = new Font ("SansSerif", Font.PLAIN, 12) ;
+        final Font small_Font = new Font ("SansSerif", Font.PLAIN, 10) ;
+        today = new Date ( ) ;
+        last_download = new Date ( ) ;
+
+        //----------------------------------------------------------------------
+        // get the settings 
+
+        try
+        {
+            in_reader = new BufferedReader (new FileReader ("UFsettings.txt")) ;
+        }
+        catch (Exception e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this,
+                "Settings file UFsettings.txt missing (using defaults).",
+                "Warning", JOptionPane.WARNING_MESSAGE) ;
+        }
+
+        // first line in UFsettings.txt is blank, or the path to the
+        // directory containing the mat, matrices, MM, and RB directories.
+        UFarchive = get_setting ("") ;
+
+        // second line is URL for the UF Sparse Matrix Collection
+        UFsite = get_setting ("http://www.cise.ufl.edu/research/sparse") ;
+
+        // third line is the refresh time, in days
+        String s = get_setting ("90") ;
+        try
+        {
+            if (s.equals ("inf") || s.equals ("Inf"))
+            {
+                refresh = INF ;                 // never refresh
+            }
+            else
+            {
+                refresh = Long.parseLong (s) ;
+            }
+        }
+        catch (Exception e)
+        {
+            refresh = 90 ;  // default: every 90 days
+        }
+
+        // fourth line, if non-empty, is the HTTP proxy server
+        // If none (default), then leave blank.
+        proxy_server = get_setting ("") ;
+
+        // fifth and final line is the proxy port (default is 80)
+        proxy_port = get_setting ("") ;
+
+        // sixth line, if present and starts with a 'd', enables debugging
+        s = get_setting ("") ;
+        debug = (s.length ( ) > 0 && s.charAt (0) == 'd') ;
+
+        close_reader (in_reader) ;
+
+        // set up the HTTP proxy
+        if (proxy_server.length ( ) > 0)
+        {
+            if (proxy_port.length ( ) == 0)
+            {
+                proxy_port = "80" ;
+            }
+            // set the proxy server and port
+            System.setProperty ("proxySet", "true" ) ;
+            System.setProperty ("http.proxyHost", proxy_server) ;
+            System.setProperty ("http.proxyPort", proxy_port) ;
+        }
+
+        // UFarchive defaults to current working directory, if empty
+        if (UFarchive.length ( ) == 0)
+        {
+            UFarchive = System.getProperty ("user.dir") ;
+        }
+        UFarchive = UFarchive.replace ('\\', File.separatorChar) ;
+        UFarchive = UFarchive.replace ('/', File.separatorChar) ;
+        char c = UFarchive.charAt (UFarchive.length ( ) - 1) ;
+        if (c != File.separatorChar)
+        {
+            UFarchive += File.separatorChar ;
+        }
+
+        if (debug)
+        {
+            System.out.println ("") ;
+            System.out.println ("UFgui, debugging enabled.") ;
+            System.out.println ("local archive: [" + UFarchive    + "]") ;
+            System.out.println ("UF url:        [" + UFsite       + "]") ;
+            System.out.println ("refresh:       [" + refresh      + "]") ;
+            System.out.println ("proxy server:  [" + proxy_server + "]") ;
+            System.out.println ("proxy port:    [" + proxy_port   + "]") ;
+        }
+
+        //----------------------------------------------------------------------
+        // make sure the top-level directories exist
+
+        mat = CheckDir ("mat") ;
+        MM = CheckDir ("MM") ;
+        RB = CheckDir ("RB") ;
+        iconDir = CheckDir ("matrices") ;
+
+        //----------------------------------------------------------------------
+        // read in the matrix statistics
+
+        Stats = load_UFstats ( ) ;
+
+        if (Stats == null ||
+            ((today.getTime ( ) - last_download.getTime ( )) / MSEC_PER_DAY
+            > refresh))
+        {
+            // UFstats file is missing, or old.  Download both
+            // matrices/UFstats.csv and mat/UF_Index.mat.
+            Stats = download_matrix_stats ( ) ;
+            if (debug) System.out.println ("downloading new UFstats.csv file") ;
+        }
+
+        if (Stats == null)
+        {
+            // display error dialog and quit
+            JOptionPane.showMessageDialog (this,
+                "Download of matrix statistics file failed.",
+                "Error", JOptionPane.ERROR_MESSAGE) ;
+            System.exit (-1) ;
+        }
+
+        //----------------------------------------------------------------------
+        // set the title, and close on [x]
+
+        setTitle ("UFgui: UF Sparse Matrix Collection") ;
+        setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE) ;
+
+        //----------------------------------------------------------------------
+        // selection buttons
+
+        JPanel select_Button_Panel = new JPanel ( ) ;
+
+        JButton select_Button = new JButton ("Select") ;
+        JButton unselect_Button = new JButton ("Deselect") ;
+        JButton reset_Button = new JButton ("Reset criteria") ;
+        JButton clear_Button = new JButton ("Clear selections") ;
+        JButton help_Button = new JButton ("Help") ;
+
+        select_Button_Panel.add (select_Button) ;
+        select_Button_Panel.add (unselect_Button) ;
+        select_Button_Panel.add (reset_Button) ;
+        select_Button_Panel.add (clear_Button) ;
+        select_Button_Panel.add (help_Button) ;
+
+        select_Button.setToolTipText
+        ("Click to add matrices that fit the criteria to your selection.") ;
+        unselect_Button.setToolTipText ("Click to remove matrices " +
+            "that fit the criteria from your selection.") ;
+        reset_Button.setToolTipText ("Click to reset criteria, above.  " +
+            "Prior selections, below, are not cleared.") ;
+        clear_Button.setToolTipText ("Click to clear selections, below.  " +
+            "Criteria, above, is not reset).") ;
+        help_Button.setToolTipText ("For help, click here") ;
+
+        select_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    make_selection (true) ;
+                }
+            }
+        ) ;
+
+        unselect_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    make_selection (false) ;
+                }
+            }
+        ) ;
+
+        reset_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    reset_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        clear_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    clear_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        help_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    help_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        //----------------------------------------------------------------------
+        // download button and format options
+
+        JPanel format_Panel = new JPanel ( ) ;
+
+        format_mat_Button = new JCheckBox ("MATLAB (mat)") ;
+        format_mm_Button = new JCheckBox ("Matrix Market (MM)") ;
+        format_rb_Button = new JCheckBox ("Rutherford/Boeing (RB)    ") ;
+
+        format_mat_Button.setSelected (true) ;
+
+        format_mat_Button.setToolTipText ("Download in MATLAB *.mat format.") ;
+        format_mm_Button.setToolTipText ("Download in Matrix Market.") ;
+        format_rb_Button.setToolTipText
+            ("Download in Rutherford/Boeing format.") ;
+
+        nselected = 0 ;
+        nselected_Label = new JLabel ( ) ;
+        download_Button = new JButton ("Download") ;
+        // update_Button = new JButton ("Update") ;
+        // update_Button_status (true) ;
+
+        format_Panel.add (download_Button) ;
+        format_Panel.add (format_mat_Button) ;
+        format_Panel.add (format_mm_Button) ;
+        format_Panel.add (format_rb_Button) ;
+        format_Panel.add (nselected_Label) ;
+        // format_Panel.add (update_Button) ;
+        format_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        // progress bar and cancel button
+        FlowLayout progress_Layout = new FlowLayout (FlowLayout.LEADING) ;
+        JPanel progress_Panel = new JPanel (progress_Layout) ;
+
+        cancel_Button = new JButton ("Cancel") ;
+        cancel_Button.setEnabled (false) ;
+        progress1_Bar = new JProgressBar ( ) ;
+        progress2_Bar = new JProgressBar ( ) ;
+        progress_size_Label = new JLabel ("") ;
+        progress1_Bar.setMinimumSize (new Dimension (200,16)) ;
+        progress2_Bar.setMinimumSize (new Dimension (200,16)) ;
+        progress_Panel.add (cancel_Button) ;
+        progress_Panel.add (new JLabel ("   Overall progress:")) ;
+        progress_Panel.add (progress1_Bar) ;
+        progress_Panel.add (new JLabel ("   Current file:")) ;
+        progress_Panel.add (progress2_Bar) ;
+        progress_Panel.add (progress_size_Label) ;
+        progress_Panel.setMaximumSize (new Dimension (0,0)) ;
+        cancel_Button.setToolTipText ("No downloads in progress.") ;
+
+        download_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    download_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        cancel_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    cancel_Button_action (e) ;
+                }
+            }
+        ) ;
+
+//      update_Button.addActionListener
+//      (
+//          new ActionListener ( )
+//          {
+//              public void actionPerformed (ActionEvent e)
+//              {
+//                  update_Button_action (e) ;
+//              }
+//          }
+//      ) ;
+
+        JPanel download_Panel = new JPanel ( ) ;
+        GroupLayout layout3 = new GroupLayout (download_Panel) ;
+        download_Panel.setLayout (layout3) ;
+
+        layout3.setAutoCreateGaps (true) ;
+        layout3.setAutoCreateContainerGaps (false) ;
+
+        layout3.setHorizontalGroup
+        (
+            layout3.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (format_Panel)
+                .addComponent (progress_Panel)
+        ) ;
+
+        layout3.setVerticalGroup
+        (
+            layout3.createSequentialGroup ( )
+                .addComponent (format_Panel)
+                .addComponent (progress_Panel)
+        ) ;
+
+        download_Panel.setBorder
+            (BorderFactory.createTitledBorder ("download")) ;
+        download_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // panel for m, n, nnz, psym, and nsym
+
+        // # of rows
+        minrow_Field = new JTextField ("") ;
+        JLabel rowlabel = new JLabel (" \u2264 number of rows \u2264 ") ;
+        maxrow_Field = new JTextField ("") ;
+        minrow_Field.setColumns (16) ;
+        maxrow_Field.setColumns (16) ;
+        minrow_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxrow_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        minrow_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxrow_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // # of columns
+        mincol_Field = new JTextField ("") ;
+        JLabel collabel = new JLabel (" \u2264 number of columns \u2264 ") ;
+        maxcol_Field = new JTextField ("") ;
+        mincol_Field.setColumns (16) ;
+        maxcol_Field.setColumns (16) ;
+        mincol_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxcol_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        mincol_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxcol_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // # of entries
+        minnz_Field = new JTextField ("") ;
+        JLabel nnzlabel = new JLabel (" \u2264 number of nonzeros \u2264 ") ;
+        maxnz_Field = new JTextField ("") ;
+        minnz_Field.setColumns (16) ;
+        maxnz_Field.setColumns (16) ;
+        minnz_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxnz_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        minnz_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxnz_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // pattern symmetry
+        minpsym_Field = new JTextField ("0.0") ;
+        JLabel psymlabel = new JLabel (" \u2264 pattern symmetry \u2264 ") ;
+        maxpsym_Field = new JTextField ("1.0") ;
+        minpsym_Field.setColumns (16) ;
+        maxpsym_Field.setColumns (16) ;
+        maxpsym_Field.setToolTipText (
+        "Refers to position of nonzeros, not their values.\n" +
+        "1 = perfectly symmetric pattern, 0 = perfectly unsymmetric pattern.") ;
+        minpsym_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxpsym_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // numerical symmetry
+        minnsym_Field = new JTextField ("0.0") ;
+        JLabel nsymlabel = new JLabel (" \u2264 numerical symmetry \u2264 ") ;
+        maxnsym_Field = new JTextField ("1.0") ;
+        minnsym_Field.setColumns (16) ;
+        maxnsym_Field.setColumns (16) ;
+        maxnsym_Field.setToolTipText (
+        "1 means A=A', 0 means no nonzero entry A(i,j) = A(j,i).") ;
+        minnsym_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxnsym_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        JPanel range_Panel = new JPanel ( ) ;
+        GroupLayout layout5 = new GroupLayout (range_Panel) ;
+        range_Panel.setLayout (layout5) ;
+        layout5.setAutoCreateGaps (false) ;
+        layout5.setAutoCreateContainerGaps (false) ;
+
+        layout5.setHorizontalGroup
+        (
+            layout5.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minrow_Field)
+                        .addComponent (mincol_Field)
+                        .addComponent (minnz_Field)
+                        .addComponent (minpsym_Field)
+                        .addComponent (minnsym_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (rowlabel)
+                        .addComponent (collabel)
+                        .addComponent (nnzlabel)
+                        .addComponent (psymlabel)
+                        .addComponent (nsymlabel)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (maxrow_Field)
+                        .addComponent (maxcol_Field)
+                        .addComponent (maxnz_Field)
+                        .addComponent (maxpsym_Field)
+                        .addComponent (maxnsym_Field)
+                )
+        ) ;
+
+        layout5.setVerticalGroup
+        (
+            layout5.createSequentialGroup ( )
+
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minrow_Field)
+                        .addComponent (rowlabel)
+                        .addComponent (maxrow_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (mincol_Field)
+                        .addComponent (collabel)
+                        .addComponent (maxcol_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minnz_Field)
+                        .addComponent (nnzlabel)
+                        .addComponent (maxnz_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minpsym_Field)
+                        .addComponent (psymlabel)
+                        .addComponent (maxpsym_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minnsym_Field)
+                        .addComponent (nsymlabel)
+                        .addComponent (maxnsym_Field)
+                )
+
+        ) ;
+
+        range_Panel.setMaximumSize (new Dimension (0,0)) ;
+        // range_Panel.setBorder (BorderFactory.createTitledBorder ("range")) ;
+
+        //----------------------------------------------------------------------
+        // checkbox panel for posdef, ND, real, and format
+
+        // square or rectangular
+        JLabel shape_label = new JLabel ("shape ") ;
+        shape_square_Button = new JRadioButton ("square   ") ;
+        shape_rect_Button = new JRadioButton ("rectangular   ") ;
+        shape_either_Button = new JRadioButton ("either   ") ;
+        shape_either_Button.setSelected (true) ;
+        ButtonGroup shape_group = new ButtonGroup ( ) ;
+        shape_group.add (shape_square_Button) ;
+        shape_group.add (shape_rect_Button) ;
+        shape_group.add (shape_either_Button) ;
+        shape_square_Button.setToolTipText
+            ("Select 'yes' for square matrices.") ;
+        shape_rect_Button.setToolTipText
+            ("Select 'no' for rectangular matrices only.") ;
+        shape_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        // positive definite
+        JLabel posdef_label = new JLabel ("positive definite? ") ;
+        posdef_yes_Button = new JRadioButton ("yes") ;
+        posdef_no_Button = new JRadioButton ("no") ;
+        posdef_either_Button = new JRadioButton ("either") ;
+        posdef_either_Button.setSelected (true) ;
+        ButtonGroup posdef_group = new ButtonGroup ( ) ;
+        posdef_group.add (posdef_yes_Button) ;
+        posdef_group.add (posdef_no_Button) ;
+        posdef_group.add (posdef_either_Button) ;
+
+        posdef_yes_Button.setToolTipText
+            ("Select 'yes' for symmetric positive definite matrices only.") ;
+        posdef_no_Button.setToolTipText
+            ("Select 'no' for non-positive definite matrices only.") ;
+        posdef_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        // 2D/3D
+        JLabel nd_label = new JLabel ("2D/3D discretization?    ") ;
+        nd_yes_Button = new JRadioButton ("yes") ;
+        nd_no_Button = new JRadioButton ("no") ;
+        nd_either_Button = new JRadioButton ("either") ;
+        nd_either_Button.setSelected (true) ;
+        ButtonGroup nd_group = new ButtonGroup ( ) ;
+        nd_group.add (nd_yes_Button) ;
+        nd_group.add (nd_no_Button) ;
+        nd_group.add (nd_either_Button) ;
+
+        nd_yes_Button.setToolTipText
+            ("Select 'yes' for matrices " +
+            "arising from 2D or 3D discretizations only.") ;
+        nd_no_Button.setToolTipText
+            ("Select 'no' to exclude matrices " +
+            "arising from 2D or 3D discretizations.") ;
+        nd_either_Button.setToolTipText ("Select 'either' for any matrix.") ;
+
+        // real or complex
+        JLabel real_label = new JLabel ("real or complex? ") ;
+        real_yes_Button = new JRadioButton ("real") ;
+        real_no_Button = new JRadioButton ("complex") ;
+        real_either_Button = new JRadioButton ("either") ;
+        real_either_Button.setSelected (true) ;
+        ButtonGroup real_group = new ButtonGroup ( ) ;
+        real_group.add (real_yes_Button) ;
+        real_group.add (real_no_Button) ;
+        real_group.add (real_either_Button) ;
+
+        real_yes_Button.setToolTipText
+            ("Select 'real' for real matrices only (includes integer and binary).") ;
+        real_no_Button.setToolTipText
+            ("Select 'complex' for complex matrices only.") ;
+        real_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        JPanel check_Panel = new JPanel ( ) ;
+        GroupLayout layout4 = new GroupLayout (check_Panel) ;
+        check_Panel.setLayout (layout4) ;
+        layout4.setAutoCreateGaps (false) ;
+        layout4.setAutoCreateContainerGaps (false) ;
+
+        layout4.setHorizontalGroup
+        (
+            layout4.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_label)
+                        .addComponent (posdef_label)
+                        .addComponent (nd_label)
+                        .addComponent (real_label)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_square_Button)
+                        .addComponent (posdef_yes_Button)
+                        .addComponent (nd_yes_Button)
+                        .addComponent (real_yes_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_rect_Button)
+                        .addComponent (posdef_no_Button)
+                        .addComponent (nd_no_Button)
+                        .addComponent (real_no_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_either_Button)
+                        .addComponent (posdef_either_Button)
+                        .addComponent (nd_either_Button)
+                        .addComponent (real_either_Button)
+                )
+        ) ;
+
+        layout4.setVerticalGroup
+        (
+            layout4.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_label)
+                        .addComponent (shape_square_Button)
+                        .addComponent (shape_rect_Button)
+                        .addComponent (shape_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (posdef_label)
+                        .addComponent (posdef_yes_Button)
+                        .addComponent (posdef_no_Button)
+                        .addComponent (posdef_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (nd_label)
+                        .addComponent (nd_yes_Button)
+                        .addComponent (nd_no_Button)
+                        .addComponent (nd_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (real_label)
+                        .addComponent (real_yes_Button)
+                        .addComponent (real_no_Button)
+                        .addComponent (real_either_Button)
+                )
+        ) ;
+
+        check_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // Group and Kind lists
+
+        Kinds = FindKinds ( ) ;
+        Groups = FindGroups ( ) ;
+
+        Group_List = new JList ((Object [ ]) Groups) ;
+        Kind_List = new JList ((Object [ ]) Kinds) ;
+
+        JScrollPane Group_Pane = new JScrollPane (Group_List) ;
+        JScrollPane Kind_Pane = new JScrollPane (Kind_List) ;
+
+        Kind_Pane.setBorder (BorderFactory.createTitledBorder ("kind")) ;
+        Group_Pane.setBorder (BorderFactory.createTitledBorder ("group")) ;
+
+        Group_List.setFont (plain_Font) ;
+        Kind_List.setFont (plain_Font) ;
+
+        Group_Pane.setVerticalScrollBarPolicy
+            (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
+        Kind_Pane.setVerticalScrollBarPolicy
+            (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
+
+        Group_List.setVisibleRowCount (5) ;
+        Kind_List.setVisibleRowCount (5) ;
+
+        // Group_List.setPreferredSize (new Dimension (200,100)) ;
+        // Kind_List.setPreferredSize (new Dimension (200,100)) ;
+
+        JPanel list_Panel = new JPanel ( ) ;
+        GroupLayout layout9 = new GroupLayout (list_Panel) ;
+        list_Panel.setLayout (layout9) ;
+
+        layout9.setAutoCreateGaps (true) ;
+        layout9.setAutoCreateContainerGaps (false) ;
+
+        layout9.setHorizontalGroup
+        (
+            layout9.createSequentialGroup ( )
+                .addComponent (Group_Pane)
+                .addComponent (Kind_Pane)
+        ) ;
+
+        layout9.setVerticalGroup
+        (
+            layout9.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (Group_Pane)
+                .addComponent (Kind_Pane)
+        ) ;
+
+        list_Panel.setMinimumSize (new Dimension (450,150)) ;
+
+        //----------------------------------------------------------------------
+        // selection panel
+        JPanel selection_Panel = new JPanel ( ) ;
+        GroupLayout layout2 = new GroupLayout (selection_Panel) ;
+        selection_Panel.setLayout (layout2) ;
+        layout2.setAutoCreateGaps (true) ;
+        layout2.setAutoCreateContainerGaps (false) ;
+        layout2.setHorizontalGroup
+        (
+            layout2.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (range_Panel)
+                .addComponent (check_Panel)
+                .addComponent (list_Panel)
+                .addComponent (select_Button_Panel)
+        ) ;
+        layout2.setVerticalGroup
+        (
+            layout2.createSequentialGroup ( )
+                .addComponent (range_Panel)
+                .addComponent (check_Panel)
+                .addComponent (list_Panel)
+                .addComponent (select_Button_Panel)
+        ) ;
+        selection_Panel.setBorder
+            (BorderFactory.createTitledBorder ("selection criteria")) ;
+        selection_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // create the table of matrices
+
+        matrix_model = new matrix_Table_Model ( ) ;
+        matrix_Table = new JTable (matrix_model)
+        {
+            // table header tool tips
+            protected JTableHeader createDefaultTableHeader ( )
+            {
+                return new JTableHeader (columnModel)
+                {
+                    public String getToolTipText (MouseEvent e)
+                    {
+                        String tip = null ;
+                        java.awt.Point p = e.getPoint ( ) ;
+                        int i = columnModel.getColumnIndexAtX (p.x) ;
+                        int j = columnModel.getColumn (i).getModelIndex ( ) ;
+                        return matrix_column_tooltips [j] ;
+                    }
+                } ;
+            }
+        } ;
+
+        JTableHeader header = matrix_Table.getTableHeader ( ) ;
+        final TableCellRenderer hr = header.getDefaultRenderer ( ) ;
+        header.setDefaultRenderer
+        (
+            new TableCellRenderer ( )
+            {
+                public Component getTableCellRendererComponent (JTable table,
+                    Object value, boolean isSelected, boolean hasFocus,
+                    int row, int column)
+                {
+                    Component co = hr.getTableCellRendererComponent (
+                        table, value, isSelected, hasFocus, row, column) ;
+                    co.setFont (small_Font) ;
+                    return (co) ;
+                }
+            }
+        ) ;
+
+        matrix_model.load_data (Stats) ;
+
+        //----------------------------------------------------------------------
+        // popup menu for the table
+
+        JPopupMenu popup = new JPopupMenu ( ) ;
+
+        JMenuItem select_menuItem =
+            new JMenuItem ("Select highlighted matrices") ;
+        select_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    popup_action (e, true) ;
+                }
+            }
+        ) ;
+
+        JMenuItem unselect_menuItem =
+            new JMenuItem ("Deselect highlighted matrices") ;
+        unselect_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    popup_action (e, false) ;
+                }
+            }
+        ) ;
+
+        JMenuItem exportcsv_menuItem =
+            new JMenuItem ("Export selected matrices as CSV file") ;
+        exportcsv_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    export_list_action (e, true) ;
+                }
+            }
+        ) ;
+
+        JMenuItem exportm_menuItem =
+            new JMenuItem ("Export selected matrices as MATLAB *.m file") ;
+        exportm_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    export_list_action (e, false) ;
+                }
+            }
+        ) ;
+
+        popup.add (select_menuItem) ;
+        popup.add (unselect_menuItem) ;
+        popup.add (exportcsv_menuItem) ;
+        popup.add (exportm_menuItem) ;
+
+        // Add listener to components that can bring up popup menus.
+        matrix_Table.addMouseListener (new matrix_Table_PopupListener (popup)) ;
+
+        //----------------------------------------------------------------------
+        // set default column widths
+
+        int [ ] columnwidth = {
+            40,     // 0:select
+            30,     // 1:mat
+            25,     // 2:MM
+            25,     // 3:RB
+            38,     // 4:id
+            110,    // 5:Group
+            150,    // 6:Name
+            70,     // 7:nrows
+            70,     // 8:ncols
+            70,     // 9:nnz
+            40,     // 10:isReal
+            40,     // 11:isBinary
+            40,     // 12:isND
+            40,     // 13:posdef
+            50,     // 14:psym
+            50,     // 15:nsym
+            200 } ; // 16:kind
+
+        TableColumn column = null ;
+        for (int col = 0 ; col < 17 ; col++)
+        {
+            column = matrix_Table.getColumnModel ( ).getColumn (col) ;
+            column.setPreferredWidth (columnwidth [col]) ;
+        }
+
+        //----------------------------------------------------------------------
+        // set the view size, sort by id, and add the table to a scroll pane
+
+        matrix_Table.setPreferredScrollableViewportSize
+            (new Dimension (500,70)) ;
+        matrix_Table.setFillsViewportHeight (true) ;
+        matrix_Table.setAutoCreateRowSorter (true) ;
+
+        matrix_Table.getSelectionModel ( )
+            .addListSelectionListener (new matrix_Table_RowListener ( )) ;
+
+        // sort by id
+        java.util.List <RowSorter.SortKey> sortKeys =
+            new ArrayList<RowSorter.SortKey> ( ) ;
+        sortKeys.add (new RowSorter.SortKey (4, SortOrder.ASCENDING)) ;
+        (matrix_Table.getRowSorter ( )).setSortKeys (sortKeys) ; 
+
+        matrix_Table.getTableHeader ( ).setReorderingAllowed (false) ;
+        JScrollPane scroll_Pane = new JScrollPane (matrix_Table) ;
+        scroll_Pane.setBorder (BorderFactory.createTitledBorder (UFarchive)) ;
+
+        //----------------------------------------------------------------------
+        // create the icon and display the default matrix
+
+        icon_Label = new JLabel ( ) ;
+        icon_Label.setFont (plain_Font) ;
+        icon_Label.setVerticalTextPosition (JLabel.BOTTOM) ;
+        icon_Label.setHorizontalTextPosition (JLabel.CENTER) ;
+        icon_Label.setBorder (BorderFactory.createTitledBorder ("matrix icon"));
+        update_icon ("HB/west0479") ;
+
+        //----------------------------------------------------------------------
+        // create the top panel (selection panel and icon)
+
+        JPanel top_Panel = new JPanel ( ) ;
+        GroupLayout layout8 = new GroupLayout (top_Panel) ;
+        top_Panel.setLayout (layout8) ;
+
+        layout8.setAutoCreateGaps (true) ;
+        layout8.setAutoCreateContainerGaps (false) ;
+
+        layout8.setHorizontalGroup
+        (
+            layout8.createSequentialGroup ( )
+                .addComponent (selection_Panel)
+                .addComponent (icon_Label)
+        ) ;
+
+        layout8.setVerticalGroup
+        (
+            layout8.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (selection_Panel)
+                .addComponent (icon_Label)
+        ) ;
+
+        top_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // create the root layout manager
+
+        Container pane = getContentPane ( ) ;
+        GroupLayout layout = new GroupLayout (pane) ;
+        pane.setLayout (layout) ;
+        layout.setAutoCreateGaps (true) ;
+        layout.setAutoCreateContainerGaps (false) ;
+
+        layout.setHorizontalGroup
+        (
+            layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (top_Panel)
+                .addComponent (scroll_Pane)
+                .addComponent (download_Panel)
+        ) ;
+
+        layout.setVerticalGroup
+        (
+            layout.createSequentialGroup ( )
+                .addComponent (top_Panel)
+                .addComponent (scroll_Pane)
+                .addComponent (download_Panel)
+        ) ;
+
+        setSize (1100,750) ;
+
+        //----------------------------------------------------------------------
+        // create the file chooser; not shown until "export" is chosen
+
+        chooser = new JFileChooser ( ) ;
+        chooser.setFileSelectionMode (JFileChooser.FILES_AND_DIRECTORIES) ;
+
+        gui_ready = true ;
+        set_selected_label (true) ;
+
+        //----------------------------------------------------------------------
+        // start a thread to download any icons not present
+
+        get_all_icons ( ) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // yes/no/unknown
+    //--------------------------------------------------------------------------
+
+    private String yes_no (int k)
+    {
+        if (k < 0)
+        {
+            return ("?") ;
+        }
+        else if (k == 0)
+        {
+            return ("no") ;
+        }
+        else
+        {
+            return ("yes") ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // ternary
+    //--------------------------------------------------------------------------
+
+    private int ternary (String s)
+    {
+        long k = Long.parseLong (s) ;
+        if (k < 0)
+        {
+            return (-1) ;
+        }
+        else if (k == 0)
+        {
+            return (0) ;
+        }
+        else
+        {
+            return (1) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // read the UFstats file
+    //--------------------------------------------------------------------------
+
+    private Object [ ][ ] load_UFstats ( )
+    {
+        if (debug) System.out.println ("reading UFstats.csv file") ;
+        Object [ ][ ] S = null ;
+        int nmatrices = 0 ;
+        in_reader = null ;
+        try
+        {
+            // get the number of matrices in the UF Sparse Matrix Collection
+            in_reader = new BufferedReader (new FileReader
+                (fix_name (UFstats))) ;
+            nmatrices = Integer.parseInt (in_reader.readLine ( )) ;
+            // skip past the creation date and time
+            String ignore = in_reader.readLine ( ) ;
+            // get the time of last download from the file modification time
+            last_download =
+                new Date (new File (fix_name (UFstats)).lastModified ( )) ;
+        }
+        catch (Exception e)
+        {
+            // this is OK, for now, since we can try to download a new one
+            if (debug) System.out.println ("reading UFstats.csv file failed") ;
+            return (null) ;
+        }
+        try
+        {
+            // read the rest of the file
+            S = new Object [nmatrices][13] ;
+            for (int id = 1 ; id <= nmatrices ; id++)
+            {
+                // split the tokens by comma
+                String [ ] r = (in_reader.readLine ( )).split (",") ;
+                S [id-1][0]  = id ;                             // id
+                S [id-1][1]  = r [0] ;                          // Group
+                S [id-1][2]  = r [1] ;                          // Name
+                S [id-1][3]  = Long.parseLong (r [2]) ;         // nrows
+                S [id-1][4]  = Long.parseLong (r [3]) ;         // ncols
+                S [id-1][5]  = Long.parseLong (r [4]) ;         // nnz
+
+                S [id-1][6]  = ternary (r [5]) ;                // isReal
+                S [id-1][7]  = ternary (r [6]) ;                // isBinary
+                S [id-1][8]  = ternary (r [7]) ;                // isND
+                S [id-1][9]  = ternary (r [8]) ;                // posdef
+
+                S [id-1][10] = Double.parseDouble (r [9]) ;     // psym
+                S [id-1][11] = Double.parseDouble (r [10]) ;    // nsym
+                S [id-1][12] = r [11] ;                         // kind
+            }
+        }
+        catch (Exception e)
+        {
+            // this is OK, for now, since we can try to download a new one
+            if (debug) System.out.println ("reading UFstats.csv file failed") ;
+            return (null) ;
+        }
+        finally
+        {
+            close_reader (in_reader) ;
+        }
+        return (S) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // tool tips for each column of the matrix table
+    //--------------------------------------------------------------------------
+
+    protected String [ ] matrix_column_tooltips =
+    {
+        // 0:select:
+        "Click to select a matrix.  This is the only column you can edit.",
+        "'x' if MAT format already downloaded",                 // 1:mat
+        "'x' if MM format already downloaded",                  // 2:MM
+        "'x' if RB format already downloaded",                  // 3:MM
+        "matrix id",                                        // 4:id
+        "matrix group (typically a person or organization)",// 5:Group
+        "matrix name (full name is Group/Name)",            // 6:Name
+        "# of rows in the matrix",                          // 7:nrows
+        "# of columns in the matrix",                       // 8:ncols
+        "# of nonzeros in the matrix",                      // 9:nnz
+        "if the matrix is real (not complex)",              // 10:isReal
+        "if the matrix is binary",                          // 11:isBinary
+        "if the matrix arises from a 2D/3D discretization", // 12:isND
+        "if the matrix is symmetric positive definite",     // 13:posdef
+        // 14:psym:
+        "symmetry of nonzero pattern (0: none, 1: pattern(A)=pattern(A')",
+        "symmetry of nonzero values (0: none, 1: A=A'",     // 15:nsym
+        // 16:kind:
+        "the matrix 'kind' is the problem domain from which it arises" 
+    } ;
+
+    //--------------------------------------------------------------------------
+    // control whether changes to the table cause updates to fire
+    //--------------------------------------------------------------------------
+
+    public boolean fire_status = true ;
+
+    public void fire_updates (boolean fire)
+    {
+        fire_status = fire ;
+        if (fire)
+        {
+            // touch the table to force a fire
+            set_table_value (get_table_value (1, 0), 1, 0) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // table of matrix statistics
+    //--------------------------------------------------------------------------
+
+    class matrix_Table_Model extends AbstractTableModel
+    {
+        private String [ ] columnNames =
+            {
+            "select", "mat", "MM", "RB",
+            "id", "Group", "Name", "# rows", "# cols", "# nonzeros", "real",
+            "binary", "2D/3D", "posdef", "psym", "nsym", "kind" } ;
+
+        private Object [ ][ ] data = null ;
+
+        public int getColumnCount ( )
+        {
+            return (columnNames.length) ;
+        }
+
+        public int getRowCount ( )
+        {
+            return (data.length) ;
+        }
+
+        public String getColumnName (int col)
+        {
+            return (columnNames [col]) ;
+        }
+
+        public Object getValueAt (int row, int col)
+        {
+            return (data [row][col]) ;
+        }
+
+        public boolean isCellEditable (int row, int col)
+        {
+            // only the "select" column is edittable
+            return (col == 0) ;
+        }
+
+        public void setValueAt (Object value, int row, int col)
+        {
+            if (col == 0 && gui_ready && ((Boolean) data [row][0]) != value)
+            {
+                if ((Boolean) value == false)
+                {
+                    // changing from selected to unselected
+                    nselected-- ;
+                }
+                else
+                {
+                    // changing from unselected to selected
+                    nselected++ ;
+                }
+                set_selected_label (download_Button.isEnabled ( )) ;
+            }
+            data [row][col] = value ;
+            if (fire_status) fireTableDataChanged ( ) ;
+        }
+
+        public Class getColumnClass (int col)
+        {
+            return (getValueAt (0, col).getClass ( )) ;
+        }
+
+        public void load_data (Object [ ][ ] newstats)
+        {
+            // load the matrix table with all matrix statistics
+            data = new Object [newstats.length][17] ;
+            nselected = 0 ;
+            for (int i = 0 ; i < newstats.length ; i++)
+            {
+                // i and j are in terms of the view, but the table is not yet
+                // sorted because it is not yet visible
+                data [i][0] = false ;   // select column is false
+                for (int j = 1 ; j < 4 ; j++)
+                {
+                    // mat, MM, and RB, which can change later:
+                    data [i][j] = "-" ;
+                }
+                for (int j = 0 ; j < 13 ; j++)
+                {
+                    // matrix stats, which do not change:
+                    // 4:id, 5:Group, 6:Name, 7:nrows, 8:ncols, 9:nnz,
+                    // 10:isreal, 11:isBinary, 12:isND, 13:posdef, 14: psym,
+                    // 15:nsym, 16:kind
+                    if (j >= 6 && j <= 9)
+                    {
+                        int k = (Integer) newstats [i][j] ;
+                        if (k < 0)
+                        {
+                            data [i][j+4] = " ?" ;
+                        }
+                        else if (k == 0)
+                        {
+                            data [i][j+4] = " no" ;
+                        }
+                        else
+                        {
+                            data [i][j+4] = " yes" ;
+                        }
+                    }
+                    else
+                    {
+                        data [i][j+4] = newstats [i][j] ;
+                    }
+                }
+            }
+            fireTableDataChanged ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // get a value from the matrix table
+    //--------------------------------------------------------------------------
+
+    private Object get_table_value (int id, int j)
+    {
+        // id is in the range 1 to Stats.length.  The model index is id-1.
+        // Convert this to the row index of the view and then get the data.
+        // j is in the range 0 to 16, and is the same in the view and the
+        // model, since column rearranging is never done.
+
+        int i = matrix_Table.convertRowIndexToView (id-1) ;
+        return (matrix_Table.getValueAt (i, j)) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // set a value in the matrix table
+    //--------------------------------------------------------------------------
+
+    private void set_table_value (Object value, int id, int j)
+    {
+        // just like get_table_value, setting the data instead of getting it
+
+        int i = matrix_Table.convertRowIndexToView (id-1) ;
+        matrix_Table.setValueAt (value, i, j) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // get ids of highlighted matrices
+    //--------------------------------------------------------------------------
+
+    private int [ ] get_highlighted_ids ( )
+    {
+        // return a list of highlighted matrix id's
+
+        // get the highlighted row indices in the current view
+        int [ ] highlighted = matrix_Table.getSelectedRows ( ) ;
+        // convert the row view indices to matrix id's
+        for (int k = 0 ; k < highlighted.length ; k++)
+        {
+            int i = highlighted [k] ;
+            int id = 1 + matrix_Table.convertRowIndexToModel (i) ;
+            highlighted [k] = id ;
+        }
+        return (highlighted) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // get ids of matrices selected for download
+    //--------------------------------------------------------------------------
+
+    private int [ ] get_download_ids ( )
+    {
+        // get the list of ids to download, in view order
+        nselected = 0 ;
+        for (int i = 0 ; i < Stats.length ; i++)
+        {
+            if ((Boolean) matrix_Table.getValueAt (i, 0))
+            {
+                nselected++ ;
+            }
+        }
+        int [ ] downloads = new int [nselected] ;
+        int k = 0 ;
+        for (int i = 0 ; i < Stats.length ; i++)
+        {
+            if ((Boolean) matrix_Table.getValueAt (i, 0))
+            {
+                int id = 1 + matrix_Table.convertRowIndexToModel (i) ;
+                downloads [k++] = id ;
+            }
+        }
+        return (downloads) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // set "Matrices selected:" label and download tool tip
+    //--------------------------------------------------------------------------
+
+    private void set_selected_label (boolean enabled)
+    {
+        if (gui_ready)
+        {
+            nselected_Label.setText
+                ("   Matrices selected: " + nselected + "   ") ;
+            download_Button.setEnabled (enabled) ;
+            if (enabled)
+            {
+                if (nselected == 0)
+                {
+                    download_Button.setToolTipText
+                        ("No matrices have been selected for download") ;
+                }
+                else if (nselected == 1)
+                {
+                    download_Button.setToolTipText
+                        ("Click to download the single selected matrix") ;
+                }
+                else
+                {
+                    download_Button.setToolTipText
+                        ("Click to download the " + nselected +
+                        " selected matrices") ;
+                }
+            }
+            else
+            {
+                download_Button.setToolTipText ("Download in progress.") ;
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // show matrix icon
+    //--------------------------------------------------------------------------
+
+    private void show_highlighted_icon ( )
+    {
+        // show icon of last entry in the highlighted list
+        int [ ] highlighted = get_highlighted_ids ( ) ;
+        int n = highlighted.length ;
+        if (n > 0)
+        {
+            int id = highlighted [n-1] ;
+            String Group = (String) Stats [id-1][1] ;
+            String Name  = (String) Stats [id-1][2] ;
+            update_icon (Group + "/" + Name) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // matrix table popup listener
+    //--------------------------------------------------------------------------
+
+    private class matrix_Table_PopupListener extends MouseAdapter
+    {
+        JPopupMenu pop ;
+
+        matrix_Table_PopupListener (JPopupMenu popupMenu)
+        {
+            pop = popupMenu ;
+        }
+
+        public void mousePressed (MouseEvent e)
+        {
+            maybeShowPopup (e) ;
+        }
+
+        public void mouseReleased (MouseEvent e)
+        {
+            maybeShowPopup (e) ;
+        }
+
+        private void maybeShowPopup (MouseEvent e)
+        {
+            if (e.isPopupTrigger ( ))
+            {
+                pop.show (e.getComponent ( ), e.getX ( ), e.getY ( )) ;
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // matrix table row listener
+    //--------------------------------------------------------------------------
+
+    private class matrix_Table_RowListener implements ListSelectionListener
+    {
+        public void valueChanged (ListSelectionEvent event)
+        {
+            if (event.getValueIsAdjusting ( ))
+            {
+                return ;
+            }
+            show_highlighted_icon ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // FindKinds:  determine the set of all Problem kinds
+    //--------------------------------------------------------------------------
+
+    private String [ ] FindKinds ( )
+    {
+        Set<String> KindSet = new TreeSet<String> ( ) ;
+        KindSet.add (all_kinds) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            KindSet.add (SimplifyKind ((String) Stats [id-1][12])) ;
+        }
+        return ((String [ ]) KindSet.toArray (new String [0])) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // FindGroups:  determine the set of all groups
+    //--------------------------------------------------------------------------
+
+    private String [ ] FindGroups ( )
+    {
+        Set<String> GroupSet = new TreeSet<String> ( ) ;
+        GroupSet.add (all_groups) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            GroupSet.add ((String) Stats [id-1][1]) ;
+        }
+        return ((String [ ]) GroupSet.toArray (new String [0])) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // SimplifyKind: remove extranneous terms from a string
+    //--------------------------------------------------------------------------
+
+    private String SimplifyKind (String kind)
+    {
+        // remove terms from a matrix-kind string
+        String result = null ;
+        String [ ] token = kind.split (" ") ;
+        for (int i = 0 ; i < token.length ; i++)
+        {
+            if (! (token [i].equals ("subsequent")
+                || token [i].equals ("sequence")
+                || token [i].equals ("problem")
+                || token [i].equals ("duplicate")))
+            {
+                if (result == null)
+                {
+                    result = token [i] ;
+                }
+                else
+                {
+                    result = result + " " + token [i] ;
+                }
+            }
+        }
+        return (result) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // CheckDir:  return a directory, creating it if it doesn't exist
+    //--------------------------------------------------------------------------
+
+    private File CheckDir (String directory_name)
+    {
+        File dir = new File (fix_name (directory_name)) ;
+        if (!dir.isDirectory ( ))
+        {
+            dir.mkdirs ( ) ;
+        }
+        return (dir) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // CheckExistence: determine which files exist in the local file system
+    //--------------------------------------------------------------------------
+
+    private void CheckExistence ( )
+    {
+        // check the existence all matrices in all 3 formats
+        fire_updates (false) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            CheckExistence (id) ;
+        }
+        fire_updates (true) ;
+    }
+
+    private boolean [ ] CheckExistence (int id)
+    {
+        // check the existence of a single file (in all 3 formats)
+        boolean [ ] exists = new boolean [4] ;
+        boolean [ ] etable = new boolean [3] ;
+
+        String Group = (String) Stats [id-1][1] ;
+        String Name  = (String) Stats [id-1][2] ;
+
+        for (int j = 0 ; j < 3 ; j++)
+        {
+            etable [j] = (((String) get_table_value (id, j+1)).charAt (0) == 'x') ;
+        }
+
+        for (int j = 0 ; j < 4 ; j++)
+        {
+            exists [j] = false ;
+        }
+
+        // check for mat/HB/west0067.mat
+        File G = new File (mat, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".mat")).exists ( ))
+        {
+            exists [0] = true ;
+        }
+
+        // check for MM/HB/west0067.tar.gz
+        G = new File (MM, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".tar.gz")).exists ( ))
+        {
+            exists [1] = true ;
+        }
+
+        // check for MM/HB/west0067.tar.gz
+        G = new File (RB, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".tar.gz")).exists ( ))
+        {
+            exists [2] = true ;
+        }
+
+        // check for matrices/HB/west0067.png
+        G = new File (iconDir, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".png")).exists ( ))
+        {
+            exists [3] = true ;
+        }
+
+        // update the matrix table (mat, MM, and RB columns)
+        for (int j = 0 ; j < 3 ; j++)
+        {
+            if (etable [j] != exists [j])
+            {
+                // only update the table if the existence status has changed
+                set_table_value (exists [j] ? "x" : "-", id, j+1) ;
+            }
+        }
+        return (exists) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get long from JTextField
+    //-------------------------------------------------------------------------
+
+    private long getLong (JTextField tfield, long Default)
+    {
+        String s = tfield.getText ( ) ;
+        long result = Default ;
+        if (s.length ( ) > 0)
+        {
+            try
+            {
+                result = Long.parseLong (s) ;
+            }
+            catch (Exception e)
+            {
+            }
+        }
+        return (result) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get double from JTextField
+    //-------------------------------------------------------------------------
+
+    private double getDouble (JTextField tfield, double Default)
+    {
+        String s = tfield.getText ( ) ;
+        double result = Default ;
+        if (s.length ( ) > 0)
+        {
+            try
+            {
+                result = Double.parseDouble (s) ;
+            }
+            catch (Exception e)
+            {
+            }
+        }
+        return (result) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // change to a wait cursor
+    //-------------------------------------------------------------------------
+
+    private void please_wait ( )
+    {
+        this.setCursor (Cursor.getPredefinedCursor (Cursor.WAIT_CURSOR)) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // change to a normal cursor
+    //-------------------------------------------------------------------------
+
+    private void the_long_wait_is_over ( )
+    {
+        this.setCursor (Cursor.getDefaultCursor ( )) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // make or clear a selection
+    //-------------------------------------------------------------------------
+
+    private void make_selection (boolean action)
+    {
+        // set selections according to controls
+        please_wait ( ) ;
+        fire_updates (false) ;
+
+        long minrow = getLong (minrow_Field, 0) ;
+        long maxrow = getLong (maxrow_Field, INF) ;
+
+        long mincol = getLong (mincol_Field, 0) ;
+        long maxcol = getLong (maxcol_Field, INF) ;
+
+        long minnz = getLong (minnz_Field, 0) ;
+        long maxnz = getLong (maxnz_Field, INF) ;
+
+        double minpsym = getDouble (minpsym_Field, 0) ;
+        double maxpsym = getDouble (maxpsym_Field, 1.0) ;
+
+        double minnsym = getDouble (minnsym_Field, 0) ;
+        double maxnsym = getDouble (maxnsym_Field, 1.0) ;
+
+        boolean shape_square = shape_square_Button.isSelected ( ) ;
+        boolean shape_rect   = shape_rect_Button.isSelected ( ) ;
+        boolean shape_either = shape_either_Button.isSelected ( ) ;
+
+        boolean posdef_yes    = posdef_yes_Button.isSelected ( ) ;
+        boolean posdef_no     = posdef_no_Button.isSelected ( ) ;
+        boolean posdef_either = posdef_either_Button.isSelected ( ) ;
+
+        boolean nd_yes    = nd_yes_Button.isSelected ( ) ;
+        boolean nd_no     = nd_no_Button.isSelected ( ) ;
+        boolean nd_either = nd_either_Button.isSelected ( ) ;
+
+        boolean real_yes    = real_yes_Button.isSelected ( ) ;
+        boolean real_no     = real_no_Button.isSelected ( ) ;
+        boolean real_either = real_either_Button.isSelected ( ) ;
+
+        // create HashSet for the selected groups
+        Set<String> Gset = null ;
+        Object [ ] Gsel = Group_List.getSelectedValues ( ) ;
+        int ngroups = Gsel.length ;
+        if (ngroups > 0)
+        {
+            for (int i = 0 ; i < ngroups ; i++)
+            {
+                if (((String) Gsel [i]).equals (all_groups)) ngroups = 0 ;
+            }
+            Gset = new HashSet<String> ( ) ;
+            for (int i = 0 ; i < ngroups ; i++)
+            {
+                Gset.add ((String) Gsel [i]) ;
+            }
+        }
+
+        // create HashSet for the selected kinds
+        Set<String> Kset = null ;
+        Object [ ] Ksel = Kind_List.getSelectedValues ( ) ;
+        int nkinds = Ksel.length ;
+        if (nkinds > 0)
+        {
+            for (int i = 0 ; i < nkinds ; i++)
+            {
+                if (((String) Ksel [i]).equals (all_kinds)) nkinds = 0 ;
+            }
+            Kset = new HashSet<String> ( ) ;
+            for (int i = 0 ; i < nkinds ; i++)
+            {
+                Kset.add ((String) Ksel [i]) ;
+            }
+        }
+
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+
+            // look at the matrix properties to see if it fits the selection
+            long nrows = (Long) Stats [id-1][3] ;
+            long ncols = (Long) Stats [id-1][4] ;
+            long nnz   = (Long) Stats [id-1][5] ;
+
+            int isReal   = (Integer) Stats [id-1][6] ;
+            int isBinary = (Integer) Stats [id-1][7] ;
+            int isND     = (Integer) Stats [id-1][8] ;
+            int posdef   = (Integer) Stats [id-1][9] ;
+
+            double psym = (Double) Stats [id-1][10] ;
+            double nsym = (Double) Stats [id-1][11] ;
+
+            boolean choose_group = true ;
+            if (ngroups > 0)
+            {
+                String group = (String) Stats [id-1][1] ;
+                choose_group = Gset.contains (group) ;
+            }
+
+            boolean choose_kind = true ;
+            if (nkinds > 0)
+            {
+                String kind = SimplifyKind ((String) Stats [id-1][12]) ;
+                choose_kind = Kset.contains (kind) ;
+            }
+
+            if ((minrow <= nrows && nrows <= maxrow) &&
+                (mincol <= ncols && ncols <= maxcol) &&
+                (minnz <= nnz && nnz <= maxnz) &&
+                (minpsym <= psym && psym <= maxpsym) &&
+                (minnsym <= nsym && nsym <= maxnsym) &&
+                (posdef_either ||
+                    (posdef_yes && posdef == 1) ||
+                    (posdef_no && posdef == 0)) &&
+                (nd_either ||
+                    (nd_yes && isND == 1) ||
+                    (nd_no && isND == 0)) &&
+                (real_either ||
+                    (real_yes && isReal == 1) ||
+                    (real_no && isReal == 0)) &&
+                (shape_either ||
+                    (shape_square && nrows == ncols) ||
+                    (shape_rect && nrows != ncols)) &&
+                choose_group && choose_kind)
+            {
+                // change the selection box for this matrix id
+                set_table_value (action, id, 0) ;
+            }
+        }
+        fire_updates (true) ;
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // reset button
+    //-------------------------------------------------------------------------
+
+    private void reset_Button_action (ActionEvent e)
+    {
+        // reset the selection criteria to the defaults
+        minrow_Field.setText ("") ;
+        maxrow_Field.setText ("") ;
+
+        mincol_Field.setText ("") ;
+        maxcol_Field.setText ("") ;
+
+        minnz_Field.setText ("") ;
+        maxnz_Field.setText ("") ;
+
+        minpsym_Field.setText ("0.0") ;
+        maxpsym_Field.setText ("1.0") ;
+
+        minnsym_Field.setText ("0.0") ;
+        maxnsym_Field.setText ("1.0") ;
+
+        shape_either_Button.setSelected (true) ;
+        posdef_either_Button.setSelected (true) ;
+        nd_either_Button.setSelected (true) ;
+        real_either_Button.setSelected (true) ;
+
+        Group_List.clearSelection ( ) ;
+        Kind_List.clearSelection ( ) ;
+
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // clear button
+    //-------------------------------------------------------------------------
+
+    private void clear_Button_action (ActionEvent e)
+    {
+        // set selections according to controls
+        please_wait ( ) ;
+        fire_updates (false) ;
+
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            // clear the selection box for this matrix id
+            set_table_value (false, id, 0) ;
+        }
+        fire_updates (true) ;
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // select popup menu item
+    //-------------------------------------------------------------------------
+
+    private void popup_action (ActionEvent e, boolean action)
+    {
+        // select or deselect the highlight matrices
+        please_wait ( ) ;
+        int [ ] highlighted = get_highlighted_ids ( ) ;
+        int n = highlighted.length ;
+        for (int k = 0 ; k < n ; k++)
+        {
+            set_table_value (action, highlighted [k], 0) ;
+        }
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // export popup menu item
+    //-------------------------------------------------------------------------
+
+    private void export_list_action (ActionEvent e, boolean csv)
+    {
+        // export the list in the order of the current view
+        if (chooser.showSaveDialog (UFgui.this) == JFileChooser.APPROVE_OPTION)
+        {
+            please_wait ( ) ;
+            print_out = null ;
+            try
+            {
+                print_out = new PrintWriter (chooser.getSelectedFile ( )) ;
+                int [ ] ids = get_download_ids ( ) ;
+                int n = ids.length ;
+
+                // print the header
+                if (csv)
+                {
+                    print_out.println ("mat, MM, RB, id, Group, Name, rows, " +
+                        "cols, nonzeros, real, binary, 2D/3D, posdef, psym, " +
+                        "nsym, kind") ;
+                }
+                else
+                {
+                    print_out.println ("%% Matrices selected from UFgui:") ;
+                    print_out.println ("% Example usage:") ;
+                    print_out.println ("% for k = 1:length(ids)") ;
+                    print_out.println ("%    Problem = UFget (ids (k))") ;
+                    print_out.println ("% end") ;
+                    print_out.println ("ids = [")  ;
+                }
+
+                for (int k = 0 ; k < n ; k++)
+                {
+                    // get the matrix id and stats
+                    int id = ids [k] ;
+                    boolean [ ] exists = CheckExistence (id) ;
+                    String Group       = (String)  Stats [id-1][1] ;
+                    String Name        = (String)  Stats [id-1][2] ;
+                    long nrows         = (Long)    Stats [id-1][3] ;
+                    long ncols         = (Long)    Stats [id-1][4] ;
+                    long nnz           = (Long)    Stats [id-1][5] ;
+                    int isReal         = (Integer) Stats [id-1][6] ;
+                    int isBinary       = (Integer) Stats [id-1][7] ;
+                    int isND           = (Integer) Stats [id-1][8] ;
+                    int posdef         = (Integer) Stats [id-1][9] ;
+                    double psym        = (Double)  Stats [id-1][10] ;
+                    double nsym        = (Double)  Stats [id-1][11] ;
+                    String kind        = (String)  Stats [id-1][12] ;
+
+                    if (csv)
+                    {
+                        // print the matrix stats in a single CSV line of text
+                        print_out.println (
+                            exists [0] + ", " + exists [1] + ", " +
+                            exists [2] + ", " + id + ", " + Group + ", " +
+                            Name + ", " + nrows + ", " + ncols + ", " +
+                            nnz + ", " + isReal + ", " + isBinary + ", " +
+                            isND + ", " + posdef + ", " + psym + ", " +
+                            nsym + ", " + kind) ;
+                    }
+                    else
+                    {
+                        // print the matrix id, with a comment for the name
+                        print_out.println (id + " % " + Group + "/" + Name) ;
+                    }
+                }
+                if (!csv)
+                {
+                    print_out.println ("] ;")  ;
+                }
+            }
+            catch (Exception err)
+            {
+                // display warning dialog
+                JOptionPane.showMessageDialog (this, "Export failed.",
+                    "Warning", JOptionPane.WARNING_MESSAGE) ;
+            }
+            finally
+            {
+                close_printer_stream (print_out) ;
+            }
+            the_long_wait_is_over ( ) ;
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // help button
+    //-------------------------------------------------------------------------
+
+    private void help_Button_action (ActionEvent e)
+    {
+        // create the Help window
+        please_wait ( ) ;
+        JFrame help_Frame = new JFrame ("Help: UF Sparse Matrix Collection") ;
+
+        // open the HTML help file and put it in an editor pane
+        JEditorPane editorPane = new JEditorPane ( ) ;
+        editorPane.setEditable (false) ;
+        URL helpURL = UFgui.class.getResource ("UFhelp.html") ;
+        if (helpURL != null)
+        {
+            try
+            {
+                editorPane.setPage (helpURL) ;
+            }
+            catch (IOException error)
+            {
+                // display warning dialog
+                JOptionPane.showMessageDialog (this,
+                    "Sorry, Help document UFhelp.html not found.",
+                    "Warning", JOptionPane.WARNING_MESSAGE) ;
+            }
+        }
+
+        // Put the editor pane in a scroll pane.
+        JScrollPane editorScrollPane = new JScrollPane (editorPane) ;
+
+        // Add the scroll pane to the Help window
+        help_Frame.getContentPane ( ).add (editorScrollPane) ;
+        help_Frame.setSize (800,600) ;
+        help_Frame.setVisible (true) ;
+
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get the icon filename
+    //-------------------------------------------------------------------------
+
+    private String icon_file (String fullname)
+    {
+        return ("matrices/" + fullname + ".png") ;
+    }
+
+    //-------------------------------------------------------------------------
+    // update the icon
+    //-------------------------------------------------------------------------
+
+    private void update_icon (String fullname)
+    {
+        // fullname is of the form Group/Name (HB/west0479, for example)
+        icon_Label.setText (fullname) ;
+        ImageIcon icon = new ImageIcon (fix_name (icon_file (fullname))) ;
+        if (icon.getIconWidth ( ) < 0)
+        {
+            // icon image failed to load; get the image from the web
+            icon = new ImageIcon (get_url (UFsite +"/"+ icon_file (fullname))) ;
+        }
+        icon_Label.setIcon (icon) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // cancel button
+    //--------------------------------------------------------------------------
+
+    private void cancel_Button_action (ActionEvent e)
+    {
+        if (downloading && !cancel)
+        {
+            cancel = true ;
+            cancel_Button.setEnabled (false) ;
+            cancel_Button.setToolTipText ("canceling...") ;
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // get all icons
+    //-------------------------------------------------------------------------
+
+    private void get_all_icons ( )
+    {
+        // get all icons
+        start_download_thread (0) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // update button
+    //-------------------------------------------------------------------------
+
+//  private void update_Button_action (ActionEvent e)
+//  {
+//      // get the latest UFstats file
+//      start_download_thread (1) ;
+//  }
+
+    //-------------------------------------------------------------------------
+    // download button
+    //-------------------------------------------------------------------------
+
+    private void download_Button_action (ActionEvent e)
+    {
+        // get the selected matrices
+        start_download_thread (2) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // enable/disable update button
+    //-------------------------------------------------------------------------
+
+/*
+    private void update_Button_status (boolean enable)
+    {
+        if (new_matrices)
+        {
+            update_Button.setEnabled (false) ;
+            update_Button.setToolTipText
+                ("New matrices available (restart required).") ;
+        }
+        else if (enable)
+        {
+            update_Button.setEnabled (true) ;
+            update_Button.setToolTipText ("Click to update matrix table.") ;
+        }
+        else
+        {
+            update_Button.setEnabled (false) ;
+            update_Button.setToolTipText ("Update in progress.") ;
+        }
+    }
+*/
+
+    //-------------------------------------------------------------------------
+    // start the downloader thread
+    //-------------------------------------------------------------------------
+
+    private void start_download_thread (int what)
+    {
+        if (!downloading)
+        {
+            // only allow one active download at a time
+            downloading = true ;
+            cancel = false ;
+
+            if (gui_ready)
+            {
+                cancel_Button.setEnabled (true) ;
+                cancel_Button.setToolTipText
+                    ("Click to cancel the current download.") ;
+                // update_Button_status (false) ;
+            }
+
+            if (what == 0)
+            {
+                // get all the icons
+                // get_UFstats = false ;
+                get_icons = true ;
+                download_ids = null ;
+            }
+//          else if (what == 1)
+//          {
+//              // download the UFstats file and then get all the new icons
+//              get_UFstats = true ;
+//              get_icons = true ;
+//              download_ids = null ;
+//          }
+            else
+            {
+                // download one or more matrices
+                // get_UFstats = false ;
+                get_icons = false ;
+                download_ids = get_download_ids ( ) ;
+            }
+            set_selected_label (false) ;
+            // start the downloader thread
+            UFdownload tt = new UFdownload ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // downloader thread
+    //--------------------------------------------------------------------------
+
+    private class UFdownload implements Runnable
+    {
+
+        // constructor starts the downloader thread
+        public UFdownload ( )
+        {
+            Thread thread = new Thread (this) ;
+            thread.start ( ) ;
+        }
+
+        // thread.start calls the run method
+        public void run ( )
+        {
+
+//          if (get_UFstats)
+//          {
+//              // get the UFstats file
+//              Object [ ][ ] S2 = download_matrix_stats ( ) ;
+//              if (S2 != null && S2.length > Stats.length)
+//              {
+//                  // new matrices available
+//                  new_matrices = true ;
+//              }
+//          }
+
+            if (get_icons)
+            {
+                // get all missing icons
+                progress1_Bar.setValue (1) ;
+                progress1_Bar.setMaximum (Stats.length) ;
+                icon_Label.setBorder (BorderFactory.createTitledBorder
+                    ("checking for new matrix icons")) ;
+                for (int id = 1 ; !cancel && id <= Stats.length ; id++)
+                {
+                    boolean [ ] exists = CheckExistence (id) ;
+                    if (!exists [3])
+                    {
+                        icon_Label.setBorder (BorderFactory.createTitledBorder
+                            ("downloading new matrix icons")) ;
+                        String Group = (String) Stats [id-1][1] ;
+                        String Name  = (String) Stats [id-1][2] ;
+                        String fullname = Group + "/" + Name ;
+                        CheckDir ("matrices/" + Group) ;
+                        download_file (icon_file (fullname)) ;
+                        update_icon (fullname) ;
+                    }
+                    progress1_Bar.setValue (id+2) ;
+                }
+                progress1_Bar.setValue (Stats.length) ;
+                icon_Label.setBorder (BorderFactory.createTitledBorder
+                    ("matrix icon")) ;
+            }
+
+            if (download_ids != null && download_ids.length > 0)
+            {
+                // download all selected matrices in the requested formats
+
+                // determine which formats to download
+                int barmax = download_ids.length + 2 ;
+
+                boolean format_mat = format_mat_Button.isSelected ( ) ;
+                boolean format_mm  = format_mm_Button.isSelected ( ) ;
+                boolean format_rb  = format_rb_Button.isSelected ( ) ;
+
+                // start the overall progress bar
+                progress1_Bar.setValue (1) ;
+                progress1_Bar.setMaximum (barmax) ;
+
+                // download all the files
+                for (int k = 0 ; !cancel && k < download_ids.length ; k++)
+                {
+                    int id = download_ids [k] ;
+
+                    // get matrxx
+                    String Group = (String) Stats [id-1][1] ;
+                    String Name  = (String) Stats [id-1][2] ;
+                    String fullname = Group + "/" + Name ;
+
+                    // recheck to see if the matrix exists in the 4 formats
+                    boolean [ ] exists = CheckExistence (id) ;
+
+                    if (!exists [3])
+                    {
+                        // always download the matrix icon if it doesn't exist
+                        CheckDir ("matrices/" + Group) ;
+                        download_file (icon_file (fullname)) ;
+                        update_icon (fullname) ;
+                    }
+
+                    if (!exists [0] && format_mat)
+                    {
+                        // download the matrix in MATLAB format
+                        update_icon (fullname) ;
+                        CheckDir ("mat/" + Group) ;
+                        download_file ("mat/" + fullname + ".mat") ;
+                    }
+
+                    if (!exists [1] && format_mm)
+                    {
+                        // download the matrix in Matrix Market format
+                        update_icon (fullname) ;
+                        CheckDir ("MM/" + Group) ;
+                        download_file ("MM/" + fullname + ".tar.gz") ;
+                    }
+
+                    if (!exists [2] && format_rb)
+                    {
+                        // download the matrix in Rutherford/Boeing format
+                        update_icon (fullname) ;
+                        CheckDir ("RB/" + Group) ;
+                        download_file ("RB/" + fullname + ".tar.gz") ;
+                    }
+
+                    progress1_Bar.setValue (k+2) ;
+                }
+
+                // update the mat/MM/RB check boxes
+                for (int k = 0 ; k < download_ids.length ; k++)
+                {
+                    int id = download_ids [k] ;
+                    CheckExistence (id) ;
+                }
+
+                // finish the overall progress bar
+                progress1_Bar.setValue (barmax) ;
+            }
+
+            // update_Button_status (true) ;
+            cancel_Button.setEnabled (false) ;
+            cancel_Button.setToolTipText ("No downloads in progress.") ;
+
+            set_selected_label (true) ;
+            cancel = false ;
+            downloading = false ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // get a URL
+    //--------------------------------------------------------------------------
+
+    private URL get_url (String urlstring)
+    {
+        try
+        {
+            return (new URL (urlstring)) ;
+        }
+        catch (MalformedURLException e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this, "Invalid URL: "
+                + urlstring, "Warning", JOptionPane.WARNING_MESSAGE) ;
+            return (null) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // download a file
+    //--------------------------------------------------------------------------
+
+    private void download_file (String filename)
+    {
+        boolean ok = true ;
+        if (cancel) return ;
+        String urlstring = UFsite + "/" + filename ;
+        if (debug) System.out.println ("downloading: " + urlstring) ;
+
+        // create the URL
+        URL url = get_url (urlstring) ;
+        if (url == null) return ;
+
+        // download the file
+        url_in = null ;
+        ftemp_out = null ;
+        ftemp_name = filename + "_IN_PROGRESS" ;
+        int barmax = 1 ;
+
+        try
+        {
+            // determine the file size (fails for files > 2GB)
+            int len = url.openConnection ( ).getContentLength ( ) ;
+
+            // start the progress bar
+            if (gui_ready)
+            {
+                if (len < 0)
+                {
+                    progress2_Bar.setIndeterminate (true) ;
+                    progress_size_Label.setText ("") ;
+                }
+                else
+                {
+                    progress2_Bar.setValue (0) ;
+                    // display the filesize to the right of the progress bar
+                    if (len < M)
+                    {
+                        barmax = 1 + len / K ;
+                        progress_size_Label.setText (((len+K/2) / K) + " KB") ;
+                    }
+                    else
+                    {
+                        barmax = 1 + len / M ;
+                        progress_size_Label.setText (((len+M/2) / M) + " MB") ;
+                    }
+                }
+                progress2_Bar.setMaximum (barmax) ;
+            }
+
+            // open the source and destination files
+            url_in = new BufferedInputStream (url.openStream ( )) ;
+            ftemp_out = new BufferedOutputStream (new FileOutputStream
+                (fix_name (ftemp_name)), BUFSIZE) ;
+
+            // transfer the data
+            byte buffer [ ] = new byte [BUFSIZE] ;
+            long bytes_read = 0 ;
+            int count = 0 ;
+            while (!cancel && (count = url_in.read (buffer, 0, BUFSIZE)) >= 0)
+            {
+                if (ftemp_out != null) ftemp_out.write (buffer, 0, count) ;
+                bytes_read += count ;
+                if (gui_ready && len > 0)
+                {
+                    if (len < M)
+                    {
+                        progress2_Bar.setValue ((int) (bytes_read / K)) ;
+                    }
+                    else
+                    {
+                        progress2_Bar.setValue ((int) (bytes_read / M)) ;
+                    }
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this, "Download failed: "
+                + urlstring, "Warning", JOptionPane.WARNING_MESSAGE) ;
+            ok = false ;
+        }
+
+        if (gui_ready)
+        {
+            progress2_Bar.setIndeterminate (false) ;
+            progress2_Bar.setValue (barmax) ;
+            progress_size_Label.setText ("") ;
+        }
+
+        // wrap-up
+        if (ok && !cancel)
+        {
+            // success:  rename the temp file to the permanent filename
+            cleanup (false) ;
+            File fsrc = new File (fix_name (ftemp_name)) ;
+            File fdst = new File (fix_name (filename)) ;
+            fsrc.renameTo (fdst) ;
+        }
+        else
+        {
+            // cancelled, or something failed:  delete the files if they exist
+            cleanup (true) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // download the latest matrix stats
+    //--------------------------------------------------------------------------
+
+    private Object [ ][ ] download_matrix_stats ( )
+    {
+        download_file (UFindex) ;       // download mat/UF_Index.mat for UFget.m
+        download_file (UFstats) ;       // download matrices/UFstats.csv
+        return (load_UFstats ( )) ;     // load the UFstats.csv file
+    }
+
+    //--------------------------------------------------------------------------
+    // prepend the UF archive directory and replace '/' with the file separator
+    //--------------------------------------------------------------------------
+
+    private static String fix_name (String s)
+    {
+        // file separator is '/' on Unix/Solaris/Linux/Mac, and '\' on Windows
+        String r = UFarchive ;
+        if (s != null)
+        {
+            r = r + s ;
+        }
+        return (r.replace ('/', File.separatorChar)) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // close an output stream
+    //--------------------------------------------------------------------------
+
+    private static void close_output (OutputStream out)
+    {
+        try
+        {
+            if (out != null) out.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // close an input stream
+    //--------------------------------------------------------------------------
+
+    private static void close_reader (Reader in)
+    {
+        try
+        {
+            if (in != null) in.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // close a printer stream
+    //--------------------------------------------------------------------------
+
+    private static void close_printer_stream (PrintWriter out)
+    {
+        if (out != null) out.close ( ) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // delete a file
+    //--------------------------------------------------------------------------
+
+    private static void delete_file (String filename)
+    {
+        if (filename != null)
+        {
+            File ff = new File (fix_name (filename)) ;
+            if (ff.exists ( )) ff.delete ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // cleanup
+    //--------------------------------------------------------------------------
+
+    private static void cleanup (boolean delete)
+    {
+        // close input streams, if any
+        try
+        {
+            if (url_in != null) url_in.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+        url_in = null ;
+
+        // close temporary file
+        close_output (ftemp_out) ;
+        ftemp_out = null ; 
+
+        if (delete)
+        {
+            // delete temporary file
+            delete_file (ftemp_name) ;
+            ftemp_name = null ;
+        }
+
+        // close the printer stream, if any
+        close_printer_stream (print_out) ;
+        
+        // close the reader stream, if any
+        close_reader (in_reader) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // main method
+    //--------------------------------------------------------------------------
+
+    public static void main (String args [ ])
+    {
+        // register a shutdown hook
+        Runtime.getRuntime ( ).addShutdownHook
+        (
+            new Thread ( )
+            {
+                public void run ( )
+                {
+                    // delete any temporary files when the UFgui shuts down,
+                    // and close any files
+                    cleanup (true) ;
+                }
+            }
+        ) ;
+
+        // start the GUI in its own thread
+        EventQueue.invokeLater
+        (
+            new Runnable ( )
+            {
+                public void run ( )
+                {
+                    new UFgui ( ).setVisible (true) ;
+                }
+            }
+        ) ;
+    }
+}
diff --git a/CSparse/MATLAB/UFget/UFhelp.html b/CSparse/MATLAB/UFget/UFhelp.html
new file mode 100644
index 0000000..55618f1
--- /dev/null
+++ b/CSparse/MATLAB/UFget/UFhelp.html
@@ -0,0 +1,545 @@
+<STYLE TYPE="text/css">
+<!--
+BODY
+   {
+      font-family:sans-serif;
+      font-size:16;
+    }
+-->
+</STYLE>
+
+<html>
+<body>
+<font family="sans-serif">
+<h1>The University of Florida Sparse Matrix Collection</h1>
+
+Tim Davis, http://www.suitesparse.com
+
+<h2>1. Overview</h2>
+
+UFgui is a Java GUI interface to the University of Florida Sparse Matrix
+Collection at http://www.cise.ufl.edu/research/sparse/matrices.  It provides an
+easy way to select matrices from the collection based on their matrix
+properties.  As of October 2010, there were 2328 matrices ranging in size
+from 1-by-2 (with a single nonzero entry) to a square matrix with nearly 28
+million rows and 760 million entries.  The total size of the collection in all
+three formats exceeds 47 GB, and is constantly growing in size.
+
+<h2>2. Quick Start</h2>
+
+First, download the UFget archive (tar.gz or zip file), and uncompress it.
+Open the UFget folder.
+
+<p>
+If your web browswer requires an HTTP proxy, or if you wish to change
+the download location, first see the <b>Customization</b> section below,
+to configure UFgui before you run it.
+
+<p>
+To run UFgui, double-click its icon or type the following command in your
+command window / terminal:
+
+<pre>
+        java -jar UFgui.jar
+</pre>
+
+If the above command fails, then you need to install Java.
+See <a href=http://www.java.com/en/download/manual.jsp>
+http://www.java.com/en/download/manual.jsp</a> for details.
+
+<p>
+You can skip reading this document by simply navigating the GUI itself.  Most
+of the buttons, check boxes, lists, and table columns have a short "tool tip"
+which is visible if you hover your mouse over the item.
+
+<p> When the UFgui starts, it checks for any missing matrix icons and
+downloads a new table if needed.  This might take a few minutes, so
+just sit back and enjoy the slideshow.  It will only happen occassionaly.
+
+<h2>3. A Sparse Matrix Problem</h2>
+
+The UF Sparse Matrix Collection is a simplified name.  It is actually a
+collection
+of sparse matrix <i>problems</i>, not just sparse matrices.  Each problem
+includes one primary sparse matrix and meta-data about that matrix.  Some
+problems include additional matrices and vectors (sparse or dense) such as
+right-hand-sides to a linear system <i>Ax=b</i>, or cost constraints for a
+linear programming problem.  As a short-hand, a "problem" in the collection is
+often called simply a "matrix", refering to the primary sparse matrix in the
+problem (<i>A</i>, below).
+
+<p>
+The following data is always present in any sparse matrix problem
+(not all fields are shown in the table in the UFgui program, however):
+
+    <ul>
+    <li> <b>name</b>: the full name of the problem, in the form
+        <i>Group/Name</i>, where <i>Group</i> indicates the source of the
+        problem (a person, organization, or other collection), and <i>Name</i>
+        is the name of the problem within that <i>Group</i>.  As of September
+        2009, there were 153 matrix Groups.
+
+    <li> <b>title</b>: a short descriptive title.
+
+    <li> <b>A</b>: the primary sparse matrix itself.
+        It is the properties of this matrix that determine
+        the selection criteria.
+
+    <li> <b>id</b>: a unique serial number ranging from 1 to the number of
+        matrices in the collection.  As new matrices are added to the
+        collection they are given higher id's, so new matrices are always
+        at the end of the table when sorted by id.
+
+    <li> <b>date</b>: the date the matrix was created, or the date it was
+        added to the UF Sparse Matrix Collection if the creation date is not
+        known.
+
+    <li> <b>author</b>: the person or persons who created the matrix.
+
+    <li> <b>ed</b>: the person or persons to acquired the matrix from the
+        author and placed it in a widely accessible collection (this
+        one or others such as the Rutherford/Boeing collection or
+        the Matrix Market collection).
+
+    <li> <b>kind</b>: the domain of the problem, such as "circuit simulation",
+        "chemical process simulation", "finite-element problem", and so on.
+        As of September 2009, there were 36 different matrix kinds.
+
+    </ul>
+
+The following data is present in some problems but not all:
+
+    <ul>
+    <li> <b>Zeros</b>: a binary matrix holding the pattern of 
+        entries explicitly provided by the matrix author which are equal to
+        zero.  These may represent entries that may become nonzero later on in
+        a simulation, but they are equal to zero in this instance of the
+        matrix.  Since they were provided by the matrix author(s), they are
+        preserved in this collection.  In the MATLAB format, this matrix is
+        held as a different sparse matrix, since MATLAB removes explicit zeros
+        from its sparse matrices.  In the Matrix Market and Rutherford/Boeing
+        collection, these entries are included in the primary sparse matrix
+        itself, as explicitly zero entries.
+
+    <li> <b>b</b>: the right-hand-side to a linear system or least-squares
+        problem.  This can be a vector or matrix, real or complex, and
+        sparse or dense.
+
+    <li> <b>x</b>: the solution to a linear system or least-squares problem.
+
+    <li> <b>notes</b>: text, with a discussion about the problem, in no
+        particular format.
+
+    <li> <b>aux</b>: Any number of matrices, vectors, or text.  For example, an
+        optimization problem may include a cost vector <i>c</i>, and vectors
+        that specify upper/lower bounds on the solution.  Details of how to
+        interpret this auxiliary data are normally given in the <i>notes</i>
+        field.  In the MATLAB format this is a struct containing each of the
+        items.  In the Matrix Market and Rutherford/Boeing formats, this data
+        resides alongsize the primary matrix in a single compressed folder.
+
+    </ul>
+
+<h2>4. Matrix Formats</h2>
+
+Each matrix in the collection appears in three different formats.  The data
+within each format is identical, down to the very last bit (if you find a
+discrepency between the same problem in different formats, please let me know).
+
+<ul>
+<li> <b>MATLAB™ *.mat file</b>.  This can be loaded into MATLAB directly,
+    or it can be accessed via the UFget.m MATLAB interface to the collection.
+    Type <i>help UFget</i> in MATLAB for more details.  The name of the MATLAB
+    file is of the form mat/Group/Name.mat (such as mat/HB/west0067.mat for the
+    west0067 matrix from the HB, or Harwell/Boeing, group).
+
+<li> <b>Matrix Market *.mtx file</b> and associated files.  Short meta-data
+    (name, title, id, date, author, ed, kind, and notes) is given as structured
+    comments in the primary *.mtx file.  This file and any associated files (b,
+    x, and any aux matrices) are in a single folder which is then archived into
+    a *.tar.gz file.  Windows users will need a 3rd-party program for handling
+    *.tar.gz files.  For example, the Matrix Market format for the HB/west0067
+    matrix is held in the MM/HB/west0067.tar.gz file. See
+    http://math.nist.gov/MatrixMarket/index.html for more information about the
+    Matrix Market format.
+
+<li> <b>Rutherford/Boeing *.rb file</b> and associated files.  Short meta-data
+    (name, title, id, date, author, ed, kind, and notes) is given as structured
+    comments in a separate text file.  The matrix file, the informational text
+    file, and any associated files (b, x, and any aux matrices) are in a single
+    folder which is then archived into a *.tar.gz file.  For example, the
+    Rutherford/Boeing format for the HB/west0067 file is held in the
+    RB/HB/west0067.tar.gz file.  See http://www.cse.scitech.ac.uk/nag/hb/ for
+    more information about the Rutherford/Boeing format.
+
+</ul>
+
+<h2>5. Selecting Matrices</h2>
+
+In the UFgui you are presented with four primary panels.
+
+<p> <b>Selection Criteria panel</b>:
+
+This is used for rule-based selections of matrix subsets.  A matrix must
+satisfy all properties in this panel to be selected.  With the default settings
+(available when the UFgui starts or after clicking <i>Reset criteria</i>) all
+matrices fit the criteria.  However, no matrix is selected until you press the
+<i>Select</i> button or select them individually in the table by clicking the
+checkbox in the <i>select</i> column.
+
+<p> The selection criteria are based on the matrices properties described in
+the matrix table (described below).  To select matrices from one or more groups
+and/or "kinds," click on the choices in the "group" and/or "kind" lists.
+Shift-click the list to select a range of groups or kinds, and control-click
+the list to add a single item to your highlighted choices.  To clear your
+choices, click the <i>Reset criteria</i> button, described below.
+
+<p> When you select/deselect matrices, the boxes to the left of each matrix in
+the Table of Matrices get checked/unchecked.  You still see all the matrices
+in the list, because you can then modify your selection by checking/unchecking
+matrices one at a time in the Table itself.
+
+<p>
+At the bottom of the Selection Criteria panel is a row of buttons:
+
+    <ul>
+    <li> <b>Select</b>: Click this to add matrices to your selection
+        that fit the criteria.  No matrix is removed from any prior selection.
+        For example, to select all square matrices with fewer than 1000 rows,
+        plus all complex matrices, do the following.  First enter 1000 in the
+        top-right text field, click the <i>square</i> radio button, and then
+        click <i>Select</i>.  Then click <i>Reset criteria</i>.  Next, click
+        <i>complex</i> and then <i>Select</i>.
+
+    <li> <b>Deselect</b>: Click this to remove matrices from your selection
+        that fit the criteria.  In general, if you want matrices that meet some
+        criteria (a) but not (b), then set the controls for (a) and click
+        <i>Select</i>.  Next, click <i>Reset criteria</i>, set the criteria
+        (b), and click <i>Deselect</i>.  For example, to select all square
+        matrices with fewer than 1000 rows that are not complex, you could just
+        do this with a single click of <i>Select</i> (click <i>square</i>,
+        <i>real</i>, and enter 1000 in the top-right text field, then click
+        <i>Select</i>).  Alternatively, you could click <i>square</i> and enter
+        1000 as the upper bound on the number of rows and click <i>Select</i>
+        then <i>Reset criteria</i>, select <i>complex</i>, and click
+        <i>Deselect</i>.
+
+    <li> <b>Reset criteria</b>:  This has no effect on your selection.  It
+        simply resets the criteria to the default (all matrices).  Thus, to
+        select all matrices, click <i>Reset criteria</i> and then
+        <i>Select</i>.  To deselect all matrices, click <i>Reset criteria</i>
+        and then <i>Deselect</i>.
+
+    <li> <b>Clear selections</b>:  This has no effect on your selection
+        criteria.  It simply clears all selections, deselecting all matrices by
+        unchecking the <i>select</i> column in the table.  This is useful if
+        you have a complex selection criteria and don't want to lose it by
+        clicking <i>Reset criteria</i>, but you wish to clear all your
+        selections anyway.
+
+    <li> <b>Help</b>: this button brings up the text you're reading.
+
+    </ul>
+
+<p> <b>Matrix icon panel</b>:
+
+To the right of the Selection Criteria panel is an icon of the most recent
+matrix highlighted, downloaded, or in the process of being downloaded.
+
+<p> <b>Table of matrices</b>:
+
+This is a list of all the matrices in the collection.  You can click on any
+column header to sort the table by that column.  Clicking a row (to the right
+of the select column) will highlight that row.  You can highlight a range of
+rows by shift-clicking another row.  Control-click will add individual rows.
+Next, right-clicking in the table will pull up a pop-up menu allowing you to
+select or deselect the highlighted matrices and to export your selection to a
+file.  You can export a list of your selected matrices to a comma-separarted
+file (*.csv) or to a MATLAB (*.m) file.  When you highlight a matrix, its icon
+is displayed.
+
+<p> The table contains the following columns (you can also hover your mouse
+over each column header for a short description):
+
+        <ul>
+        <li><b>select</b>: whether or not you have selected the matrix. 
+            You can click on the check boxes in this column to modify your
+            selection on a matrix-by-matrix basis.  This is the only column in
+            the table that you can edit.
+
+        <li><b>mat</b>: this box is checked if you have downloaded the matrix
+            in its MATLAB format.  The location of the HB/west0067.mat file
+            will be UFget/mat/HB/west0067.mat, for example.
+
+        <li><b>MM</b>: this is checked if you have already downloaded
+            the matrix in its Matrix Market format.
+
+        <li><b>RB</b>: this is checked if you have already downloaded
+            the matrix in its Rutherford/Boeing format.
+
+        <li><b>id</b>: the matrix id, in the range 1 to the number of
+            matrices in the collection.  When the UFgui starts,
+            the table is sorted in this order.
+
+        <li><b>Group</b>: the group the matrix belongs to.
+
+        <li><b>Name</b>: the (short) name of the matrix.  The full name of
+            a matrix is Group/Name.
+
+        <li><b># rows</b>: the number of rows of the matrix.
+
+        <li><b># cols</b>: the number of columns of the matrix.
+
+        <li><b># nonzeros</b>: the number of nonzeros in the matrix.
+
+        <li><b>real</b>: this box is checked if the matrix is real.
+            It is complex otherwise.
+            Note that <i>real</i> matrices include any matrix that is not
+            complex.  In particular, integer and binary matrices are
+            considered <i>real</i> in this search criterion.
+
+        <li><b>binary</b>: this box is checked if the matrix is binary.
+            It is non-binary otherwise (there are no binary complex matrices,
+            so any matrix that is binary is also marked as real).
+
+        <li><b>2D/3D</b>: this box is checked if the matrix comes
+            from a discretization of a 2D or 3D geometry.
+
+        <li> <b>posdef</b>: this box is checked if the matrix is
+            symmetric and positive definite.
+
+        <li><b>psym</b>: the symmetry of the nonzero pattern of the
+            matrix A (including the binary <i>Zeros</i> matrix as well).  Let
+            <i>S = pattern(pattern(A)+Zeros)</i> where <i>pattern(A)</i> is a
+            binary matrix with entries equal to 1 where <i>A(i,j)</i> is
+            nonzero, and zero elsewhere.  The <i>psym</i> metric is zero if the
+            pattern of <i>S</i> is completely unsymmetric, and 1.0 if the
+            pattern is exactly symmetric.  Let <i>pmatched</i> be the number of
+            off-diagonal entries <i>S(i,j)</i> for which <i>S(i,j)=S(j,i)</i>
+            and let <i>pnzoffdiag</i> be the total number off-diagonal entries
+            in <i>S</i>.  Then <i>psym</i> is the ratio
+            <i>pmatched/pnzoffdiag</i>.
+
+        <li><b>nsym</b>:  the symmetry of the numerical values of the
+            matrix.  This property ignores the <i>Zeros</i> matrix.  It is
+            equal to 0 for a perfectly unsymmetric matrix, and 1.0 for a
+            symmetric matrix.  Let <i>matched</i> be the number of nonzero
+            off-diagonal entries <i>A(i,j)</i> for which <i>A(i,j)=A(j,i)</i>
+            and let <i>nzoffdiag</i> be the total number off-diagonal nonzero
+            entries in <i>A</i>.  Then <i>psym</i> is the ratio
+            <i>matched/nzoffdiag</i>.
+
+        <li><b>kind</b>: the problem domain.  Note that this is typically
+            related to the problem group, since many matrix authors submit
+            matrices to the collection that arise from a single problem domain.
+            Some group have problems from many domains, however.
+
+        </ul>
+
+<p> <b>Download panel</b>:
+
+This panel controls the downloading of matrices, with
+three check boxes, three buttons, and informational items:
+
+    <ul>
+
+    <li> <b>Download</b>: click this to begin the download of the
+        selected matrices.  Matrices that are already downloaded are skipped
+        (thus, if one of your matrix files happens to get corrupted, simply
+        remove the file and restart the UFgui).  Matrices are downloaded into
+        the <i>mat</i>, <i>MM</i>, and <i>RB</i> folders inside the UFget
+        folder, in the same order as they appear in the table view.  For
+        example, if you click on the <i># nonzeros</i> column heading prior to
+        clicking <i>Download</i>, your selected matrices will be downloaded in
+        order of increasing number of nonzero entries.  If you hover your mouse
+        over the download button, a tool tip will tell you what it will do.
+
+    <li><b>MATLAB (mat)</b> format: click this to download the selected
+        matrices in MATLAB *.mat format.
+
+    <li><b>Matrix Market (MM)</b> format: click this to download the selected
+        matrices in Matrix Market format.
+
+    <li> <b>Rutherford/Boeing (RB)</b> format: click this to download the
+        selected matrices in Rutherford/Boeing format.
+
+    <li> <b>Matrices selected:</b> gives a running total of the number of
+        matrices selected in the table.
+
+    <li> <b>Cancel</b>: click to cancel the current download, deleting the
+        matrix currently being downloaded.  Matrices already fully downloaded
+        are never deleted by the UFgui program.
+
+    <li> <b>Overall progress</b>:  this progress bar advances after each
+        matrix is downloaded.
+
+    <li> <b>Current file</b>:  this progress bar advances as the current
+        matrix is downloaded.  The icon and name of the matrix currently
+        being downloaded is shown in the icon panel.
+
+    </ul>
+</ul>
+
+<p> The contents of the <i>mat</i>, <i>matrices</i>, <i>MM</i>, and <i>RB</i>
+    folders ("directories" for Unix users), and the UFstats.txt file itself,
+    maybe be deleted at will when the program is not running.  They will be
+    recreated when the program restarts.  If you delete the <i>matrices</i>
+    directory, for example, matrix icons are redownloaded, which makes for a
+    fun slide show.  Sit back and watch.
+
+<h2>6. Customization</h2>
+
+The <i>UFsettings.txt</i> includes six lines of text, each with parameters
+that you can modify.  If this file is missing, or shorter than 6 lines
+long, then defaults are used.
+
+<ul>
+<li> The first line is the default folder containing the <i>mat</i>,
+    <i>matrices</i>, <i>MM</i>, and <i>RB</i> directories.  It is displayed
+    on the GUI just above the table of matrices.  The line is blank
+    by default.  If left blank, these four folders are to be found in the
+    current working directory.  You can modify this first line to refer to
+    another folder.  For example, if I were to create my own folder called
+    <i>MyMatrices</i> in my home directory, I would use
+    <i>/home/davis/MyMatrices/</i> in Unix/Linux,
+    <i>/Users/davis/MyMatrices/</i> in Mac OS X, or <i>C:\Documents and
+    Settings\davis\My Documents\MyMatrices\</i> in Windows.  The trailing
+    file-separator is optional.  Both the slash (\) and backslash (/)
+    characters are interpretted as your system's file-separator ('\' for
+    Windows, '/' for everything else).
+
+<li> The second line is the root URL of the UF Sparse Matrix Collection,
+    http://www.cise.ufl.edu/research/sparse.  This only needs to change in the
+    event that the entire collection moves to a new URL.
+
+<li> The third line is the number of days after which a new list of matrices (in
+    <i>matrices/UFstats.csv</i> and <i>mat/UF_Index.mat</i>) should be
+    downloaded.  By default this is set to 30.  A value of <i>inf</i> means
+    that this <i>UFstats.csv</i> file is never downloaded automatically.  If
+    the <i>matrices/UFstats.csv</i> is missing or corrupted when UFgui starts,
+    it will download fresh copies of both files.  Thus, to force a refresh,
+    simply delete the <i>matrices/UFstats.csv</i> file and then start UFgui.
+    You may also download the files with the MATLAB command
+    <i>UFget('refresh')</i> prior to running UFgui.  The <i>UFsettings.txt</i>
+    is also used by the <i>UFget</i> MATLAB interface.
+
+<li> The fourth line gives the name of your HTTP proxy server, if you connect to
+    the internet via a proxy.  If left blank, no proxy is used.
+
+<li>The fifth line is the port number for your HTTP proxy.  If blank,
+    the default of 80 is used.
+
+<li>The sixth and final line controls debug diagnostics.  If this line is
+    "debug" (without the quotes), then diagnostics are printed on the standard
+    output (System.out).  You should also start the UFgui.jar via the
+    command line, otherwise the diagnostic output is not visible.
+
+</ul>
+
+<h2>7. Limitations and known issues</h2>
+
+<ul>
+
+<li> When a download is complete, the table order jitters slightly.  This is
+    because the <i>mat</i>, <i>MM</i>, and <i>RB</i> columns are updated. The
+    table sort order is temporarily modified, even if you have not currently
+    selected one of those columns to sort.  It then returns to the proper order
+    immediately.  This appears to be a limitation of the Java Swing library in
+    JDK 6.
+
+<li> When cancelling a download with the Cancel button, or terminating the
+    program normally (by clicking the [x] icon to close the UFgui window), any
+    partial file currently being downloaded is safely deleted.  These files
+    have the term _IN_PROGRESS appended to their name.  If the UFgui program
+    terminates abnormally and suddenly in the middle of a download, however, it
+    will leave behind files of this form.  You can safely delete any
+    *_IN_PROGRESS file when the UFgui program is not running.
+
+<li> Working through an HTTP proxy can be sluggish, and I have even seen
+    downloads stall completely.  I am currently investigating why this
+    occurs and how to work around a sluggish proxy.  If you are using a
+    proxy and the download stalls, try clicking <i>Cancel</i> and then
+    <i>Download</i>.  If that fails, terminate UFgui.  If you terminate it
+    abnormally (not by clicking the [x] in the window, but with "kill -9"
+    in Linux, or by forcing it to quit via your OS), you may need to
+    delete the *_IN_PROGRESS file.  Please let me know if this happens.
+
+</ul>
+
+<h2>8. Copyright and License</h2>
+
+Copyright (c) 2009-2012, Timothy A. Davis.  All rights reserved.
+
+<p> Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+<ul>
+    <li> Redistributions of source code must retain the above copyright 
+      notice, this list of conditions and the following disclaimer.
+    <li> Redistributions in binary form must reproduce the above copyright 
+      notice, this list of conditions and the following disclaimer in 
+      the documentation and/or other materials provided with the distribution
+    <li> Neither the name of the University of Florida nor the names 
+      of its contributors may be used to endorse or promote products derived 
+      from this software without specific prior written permission.
+</ul>
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+<h2>9. Version and Change-Log</h2>
+
+<ul>
+<li> Version 1.0.4, October 27, 2010.  Update to this help file only.
+
+<li> Version 1.0.3, October 9, 2009.  Removed the Update button which when
+    clicked would download a fresh copy of <i>matrices/UFstats.csv</i>.  UFgui
+    updates itself automatically every 30 days.  If you want to force a
+    refresh, just delete that file and restart UFgui.  Changed the appearence
+    of the mat, MM, RB columns. (from Iain Duff's comments). 
+
+<li> Version 1.0.2, October 8, 2009.  Added HTTP proxy option
+    (suggested by Iain Duff), and debug diagnostic option.
+
+<li> Version 1.0.1, October 7, 2009.  Added "Clear selections" button
+    (suggested by Xiangrui Meng).
+
+<li> UFgui Version 1.0, October 7, 2009, released.
+
+<li> When a new version of this software is available, simply move the
+    <i>mat</i>, <i>matrices</i>, <i>MM</i>, and <i>RB</i> folders from the old
+    <i>UFget</i> folder into the new one, to preserve the matrices you have
+    already downloaded.  Alternatively, you can edit the <i>UFsettings.txt</i>
+    file to reflect the folder containing your previous <i>mat</i>,
+    <i>matrices</i>, <i>MM</i>, and <i>RB</i> folders (see the
+    <b>Customization</b> section, above).
+
+</ul>
+
+<h2>10. For Further Help</h2>
+
+Contact the author of this UFgui program, and the maintainer of the UF Sparse
+Matrix Collection: Tim Davis
+(<a href=http://www.suitesparse.com>
+http://www.suitesparse.com</a>, email
+<a href=mailto:DrTimothyAldenDavis at gmail.com>DrTimothyAldenDavis at gmail.com</a>).
+To print this document,
+open the file <i>UFhelp.html</i> in your favorite web browser.
+
+<h2>11. Acknowledgements</h2>
+
+I would like to thank Iain Duff and Xiangrui Meng for their feedback,
+which has improved this package.  Designing a GUI is an art, and getting
+usability feedback from others is vital. 
+
+</font>
+</body>
+</html>
diff --git a/CSparse/MATLAB/UFget/UFkinds.m b/CSparse/MATLAB/UFget/UFkinds.m
new file mode 100644
index 0000000..6d87b77
--- /dev/null
+++ b/CSparse/MATLAB/UFget/UFkinds.m
@@ -0,0 +1,71 @@
+function kinds = UFkinds
+%UFKINDS: get 'kind' of each problem in the UF collection.
+%
+% A problem 'kind' is the domain from which the problem arises.  Examples
+% include 'circuit simulation', 'optimization', 'least squares', and 'robotics'.
+% See UFget/README.txt for a complete list.
+%
+% A 'kind' is related to the matrix 'Group'.  The latter is determined by
+% person, persons, or organization that created the matrix.  'Group' may also
+% refer to another matrix collection that has been included in this collection
+% (such as 'HB' for the Harwell/Boeing collection).
+%
+% kinds = UFkinds returns a cell array with one row per matrix.  kinds{id}
+% is the same as Problem.kind where Problem=UFget(id).  If an error occurs,
+% an empty cell array is returned.
+%
+% Example:
+%
+%   kinds = UFkinds ;
+%   Problem = UFget (42)
+%   kinds{42}
+%
+% results in the following output:
+%
+%   Problem = 
+%        title: 'SYMMETRIC STIFFNESS MATRIX - FRAME WITHIN A SUSPENSION BRIDGE'
+%            A: [485x485 double]
+%         name: 'HB/bcsstk20'
+%           id: 42
+%         date: '1984'
+%       author: 'J. Lewis'
+%           ed: 'I. Duff, R. Grimes, J. Lewis'
+%         kind: 'structural problem'
+%
+%   ans =
+%       'structural problem'
+%
+% To find a list t of the id's all matrices from material science:
+%
+%   kinds = UFkinds ;
+%   t = zeros (1, length (kinds)) ;
+%   for id = 1:length(kinds)
+%       t (id) = ~isempty (strfind (kinds {id}, 'material')) ;
+%   end
+%   t = find (t) ;
+%   for id = t
+%       Problem = UFget (id)
+%   end
+%
+% See also UFget.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+params = UFget_defaults ;
+statfile = sprintf ('%smatrices/UFstats.csv', params.topdir) ;
+
+try
+    f = fopen (statfile, 'r') ;
+    nmat = str2double (fgetl (f)) ;     % number of matrices
+    s = fgetl (f) ;                     % date the UFstats.csv file was created
+    kinds = cell (nmat,1) ;
+    for id = 1:nmat
+        s = fgetl (f) ;
+        t = find (s == ',', 1, 'last') ;
+        r = s ((t+1):end) ;
+        kinds {id} = r ;
+    end
+catch
+    kinds = cell (0,0) ;                % return empty string on error
+end
+
diff --git a/CSparse/MATLAB/UFget/UFsettings.txt b/CSparse/MATLAB/UFget/UFsettings.txt
new file mode 100644
index 0000000..7103fa7
--- /dev/null
+++ b/CSparse/MATLAB/UFget/UFsettings.txt
@@ -0,0 +1,6 @@
+
+http://www.cise.ufl.edu/research/sparse
+30
+
+
+no debug
diff --git a/CSparse/MATLAB/UFget/UFsvd.m b/CSparse/MATLAB/UFget/UFsvd.m
new file mode 100644
index 0000000..138097a
--- /dev/null
+++ b/CSparse/MATLAB/UFget/UFsvd.m
@@ -0,0 +1,54 @@
+function S = UFsvd (matrix, UF_Index)
+%UFsvd singular values of a matrix in the UF collection.
+%
+% As of Nov 2012, only matrices for which min(size(A)) <= 30401
+% have their singular values computed.
+%
+% Examples:
+%   S = UFsvd ('HB/arc130')
+%   S = UFsvd (6)
+%   index = UFget
+%   S = UFsvd (6, index)
+%
+% S is a struct containing:
+%   s       the singular values (a column vector of size min(size(A)))
+%   how     a string
+
+if (nargin < 2)
+    % load the UF index
+    UF_Index = UFget ;
+end
+
+% look up the matrix in the UF index
+[group matrix id] = UFget_lookup (matrix, UF_Index) ;
+if (id == 0)
+    error ('invalid matrix') ;
+end
+
+% determine where the files go
+params = UFget_defaults ;
+svddir = sprintf ('%ssvd%s%s', params.topdir, filesep, group) ;
+svdfile = sprintf ('%s%s%s_SVD.mat', svddir, filesep, matrix) ;
+svdurl = sprintf ('%s/svd/%s/%s_SVD.mat', params.topurl, group, matrix) ;
+
+% make sure the mat/Group directory exists
+if (~exist (svddir, 'dir'))
+    mkdir (svddir) ;
+end
+
+% download the *_SVD.mat file, if not already downloaded
+if (~exist (svdfile, 'file'))
+    fprintf ('downloading %s\n', svdurl) ;
+    fprintf ('to %s\n', svdfile) ;
+    tmp = tempname ;                        % download to a temp file first
+    try
+        urlwrite (svdurl, tmp) ;
+    catch me                                %#ok
+        error ('SVD not yet computed for this matrix (or URL not found)') ;
+    end
+    movefile (tmp, svdfile, 'f') ;          % move the new matrix into place
+end
+
+% load the SVD
+load (svdfile) ;
+
diff --git a/CSparse/MATLAB/UFget/UFweb.m b/CSparse/MATLAB/UFget/UFweb.m
index d91ea8a..4b2a0c1 100644
--- a/CSparse/MATLAB/UFget/UFweb.m
+++ b/CSparse/MATLAB/UFget/UFweb.m
@@ -33,7 +33,7 @@ function stats = UFweb (matrix, opts)
 %
 %   See also web, UFget, UFget_defaults.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 params = UFget_defaults ;
 UF_Index = UFget ;
@@ -58,9 +58,9 @@ end
 % open the web page for the matrix, group, or whole collection
 if (id == 0)
     if (isempty (group))
-	eval (['web ' url '/matrices/index.html ' opts])
+        eval (['web ' url '/matrices/index.html ' opts])
     else
-	eval (['web ' url '/matrices/' group '/index.html ' opts])
+        eval (['web ' url '/matrices/' group '/index.html ' opts])
     end
 else
     eval (['web ' url '/matrices/' group '/' name '.html ' opts])
@@ -71,65 +71,54 @@ if (nargout > 0)
 
     if (id == 0)
 
-	if (isempty (group))
+        if (isempty (group))
 
-	    % return stats about the whole collection
-	    stats.nmatrices = length (UF_Index.nrows) ;
-	    stats.LastRevisionDate = UF_Index.LastRevisionDate ;
-	    stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
+            % return stats about the whole collection
+            stats.nmatrices = length (UF_Index.nrows) ;
+            stats.LastRevisionDate = UF_Index.LastRevisionDate ;
+            stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
 
-	else
+        else
 
-	    % return stats about one matrix group
-	    nmat = length (UF_Index.nrows) ;
-	    ngroup = 0 ;
-	    for i = 1:nmat
-		if (strcmp (group, UF_Index.Group {i}))
-		    ngroup = ngroup + 1 ;
-		end
-	    end
-	    stats.nmatrices = ngroup ;
-	    stats.LastRevisionDate = UF_Index.LastRevisionDate ;
-	    stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
+            % return stats about one matrix group
+            nmat = length (UF_Index.nrows) ;
+            ngroup = 0 ;
+            for i = 1:nmat
+                if (strcmp (group, UF_Index.Group {i}))
+                    ngroup = ngroup + 1 ;
+                end
+            end
+            stats.nmatrices = ngroup ;
+            stats.LastRevisionDate = UF_Index.LastRevisionDate ;
+            stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
 
-	end
+        end
     else
 
-	% look up the matrix statistics
-	stats.Group = group ;
-	stats.Name = name ;
-	stats.nrows = UF_Index.nrows (id) ;
-	stats.ncols = UF_Index.ncols (id) ;
-	stats.nnz = UF_Index.nnz (id) ;
-	stats.nzero = UF_Index.nzero (id) ;
-	stats.pattern_symmetry = UF_Index.pattern_symmetry (id) ;
-	stats.numerical_symmetry = UF_Index.numerical_symmetry (id) ;
-	stats.isBinary = UF_Index.isBinary (id) ;
-	stats.isReal = UF_Index.isReal (id) ;
-
-	stats.nnzdiag = UF_Index.nnzdiag (id) ;
-	stats.posdef = UF_Index.posdef (id) ;
-
-	stats.amd_lnz = UF_Index.amd_lnz (id) ;
-	stats.amd_flops = UF_Index.amd_flops (id) ;
-	stats.amd_vnz = UF_Index.amd_vnz (id) ;
-	stats.amd_rnz = UF_Index.amd_rnz (id) ;
-	stats.metis_lnz = UF_Index.metis_lnz (id) ;
-	stats.metis_flops = UF_Index.metis_flops (id) ;
-	stats.metis_vnz = UF_Index.metis_vnz (id) ;
-	stats.metis_rnz = UF_Index.metis_rnz (id) ;
-	stats.nblocks = UF_Index.nblocks (id) ;
-	stats.sprank = UF_Index.sprank (id) ;
-	stats.nzoff = UF_Index.nzoff (id) ;
-	stats.dmperm_lnz = UF_Index.dmperm_lnz (id) ;
-	stats.dmperm_unz = UF_Index.dmperm_unz (id) ;
-	stats.dmperm_flops = UF_Index.dmperm_flops (id) ;
-	stats.dmperm_vnz = UF_Index.dmperm_vnz (id) ;
-	stats.dmperm_rnz = UF_Index.dmperm_rnz (id) ;
-
-	stats.RBtype = UF_Index.RBtype (id,:) ;
-	stats.cholcand = UF_Index.cholcand (id) ;
-	stats.ncc = UF_Index.ncc (id) ;
+        % look up the matrix statistics
+        stats.Group = group ;
+        stats.Name = name ;
+        stats.nrows = UF_Index.nrows (id) ;
+        stats.ncols = UF_Index.ncols (id) ;
+        stats.nnz = UF_Index.nnz (id) ;
+        stats.nzero = UF_Index.nzero (id) ;
+        stats.pattern_symmetry = UF_Index.pattern_symmetry (id) ;
+        stats.numerical_symmetry = UF_Index.numerical_symmetry (id) ;
+        stats.isBinary = UF_Index.isBinary (id) ;
+        stats.isReal = UF_Index.isReal (id) ;
+        stats.nnzdiag = UF_Index.nnzdiag (id) ;
+        stats.posdef = UF_Index.posdef (id) ;
+        stats.amd_lnz = UF_Index.amd_lnz (id) ;
+        stats.amd_flops = UF_Index.amd_flops (id) ;
+        stats.amd_vnz = UF_Index.amd_vnz (id) ;
+        stats.amd_rnz = UF_Index.amd_rnz (id) ;
+        stats.nblocks = UF_Index.nblocks (id) ;
+        stats.sprank = UF_Index.sprank (id) ;
+        stats.RBtype = UF_Index.RBtype (id,:) ;
+        stats.cholcand = UF_Index.cholcand (id) ;
+        stats.ncc = UF_Index.ncc (id) ;
+        stats.isND = UF_Index.isND (id) ;
+        stats.isGraph = UF_Index.isGraph (id) ;
 
     end
 end
diff --git a/CSparse/MATLAB/UFget/mat/UF_Index.mat b/CSparse/MATLAB/UFget/mat/UF_Index.mat
index d17778e..33213c8 100644
Binary files a/CSparse/MATLAB/UFget/mat/UF_Index.mat and b/CSparse/MATLAB/UFget/mat/UF_Index.mat differ
diff --git a/CSparse/MATLAB/UFget/matrices/UFstats.csv b/CSparse/MATLAB/UFget/matrices/UFstats.csv
new file mode 100644
index 0000000..6c42242
--- /dev/null
+++ b/CSparse/MATLAB/UFget/matrices/UFstats.csv
@@ -0,0 +1,2652 @@
+2650
+03-Dec-2012 16:02:06
+HB,1138_bus,1138,1138,4054,1,0,0,1,1,1,power network problem
+HB,494_bus,494,494,1666,1,0,0,1,1,1,power network problem
+HB,662_bus,662,662,2474,1,0,0,1,1,1,power network problem
+HB,685_bus,685,685,3249,1,0,0,1,1,1,power network problem
+HB,abb313,313,176,1557,1,1,0,0,0,0,least squares problem
+HB,arc130,130,130,1037,1,0,1,0,0.7586805555555556,0,materials problem
+HB,ash219,219,85,438,1,1,0,0,0,0,least squares problem
+HB,ash292,292,292,2208,1,1,0,0,1,1,least squares problem
+HB,ash331,331,104,662,1,1,0,0,0,0,least squares problem
+HB,ash608,608,188,1216,1,1,0,0,0,0,least squares problem
+HB,ash85,85,85,523,1,1,0,0,1,1,least squares problem
+HB,ash958,958,292,1916,1,1,0,0,0,0,least squares problem
+HB,bcspwr01,39,39,131,1,1,0,0,1,1,power network problem
+HB,bcspwr02,49,49,167,1,1,0,0,1,1,power network problem
+HB,bcspwr03,118,118,476,1,1,0,0,1,1,power network problem
+HB,bcspwr04,274,274,1612,1,1,0,0,1,1,power network problem
+HB,bcspwr05,443,443,1623,1,1,0,0,1,1,power network problem
+HB,bcspwr06,1454,1454,5300,1,1,0,0,1,1,power network problem
+HB,bcspwr07,1612,1612,5824,1,1,0,0,1,1,power network problem
+HB,bcspwr08,1624,1624,6050,1,1,0,0,1,1,power network problem
+HB,bcspwr09,1723,1723,6511,1,1,0,0,1,1,power network problem
+HB,bcspwr10,5300,5300,21842,1,1,0,0,1,1,power network problem
+HB,bcsstk01,48,48,400,1,0,1,1,1,1,structural problem
+HB,bcsstk02,66,66,4356,1,0,1,1,1,1,structural problem
+HB,bcsstk03,112,112,640,1,0,1,1,1,1,structural problem
+HB,bcsstk04,132,132,3648,1,0,1,1,1,1,structural problem
+HB,bcsstk05,153,153,2423,1,0,1,1,1,1,structural problem
+HB,bcsstk06,420,420,7860,1,0,1,1,1,1,structural problem
+HB,bcsstk07,420,420,7860,1,0,1,1,1,1,duplicate structural problem
+HB,bcsstk08,1074,1074,12960,1,0,1,1,1,1,structural problem
+HB,bcsstk09,1083,1083,18437,1,0,1,1,1,1,structural problem
+HB,bcsstk10,1086,1086,22070,1,0,1,1,1,1,structural problem
+HB,bcsstk11,1473,1473,34241,1,0,1,1,1,1,structural problem
+HB,bcsstk12,1473,1473,34241,1,0,1,1,1,1,duplicate structural problem
+HB,bcsstk13,2003,2003,83883,1,0,1,1,1,1,computational fluid dynamics problem
+HB,bcsstk14,1806,1806,63454,1,0,1,1,1,1,structural problem
+HB,bcsstk15,3948,3948,117816,1,0,1,1,1,1,structural problem
+HB,bcsstk16,4884,4884,290378,1,0,1,1,1,1,structural problem
+HB,bcsstk17,10974,10974,428650,1,0,1,1,1,1,structural problem
+HB,bcsstk18,11948,11948,149090,1,0,1,1,1,1,structural problem
+HB,bcsstk19,817,817,6853,1,0,1,1,1,1,structural problem
+HB,bcsstk20,485,485,3135,1,0,1,1,1,1,structural problem
+HB,bcsstk21,3600,3600,26600,1,0,1,1,1,1,structural problem
+HB,bcsstk22,138,138,696,1,0,1,1,1,1,structural problem
+HB,bcsstk23,3134,3134,45178,1,0,1,1,1,1,structural problem
+HB,bcsstk24,3562,3562,159910,1,0,1,1,1,1,structural problem
+HB,bcsstk25,15439,15439,252241,1,0,1,1,1,1,structural problem
+HB,bcsstk26,1922,1922,30336,1,0,1,1,1,1,structural problem
+HB,bcsstk27,1224,1224,56126,1,0,1,1,1,1,structural problem
+HB,bcsstk28,4410,4410,219024,1,0,1,1,1,1,structural problem
+HB,bcsstk29,13992,13992,619488,1,1,1,0,1,1,structural problem
+HB,bcsstk30,28924,28924,2043492,1,1,1,0,1,1,structural problem
+HB,bcsstk31,35588,35588,1181416,1,1,1,0,1,1,structural problem
+HB,bcsstk32,44609,44609,2014701,1,1,1,0,1,1,structural problem
+HB,bcsstk33,8738,8738,591904,1,1,1,0,1,1,structural problem
+HB,bcsstm01,48,48,24,1,0,1,0,1,1,structural problem
+HB,bcsstm02,66,66,66,1,0,1,1,1,1,structural problem
+HB,bcsstm03,112,112,72,1,0,1,0,1,1,structural problem
+HB,bcsstm04,132,132,66,1,0,1,0,1,1,structural problem
+HB,bcsstm05,153,153,153,1,0,1,1,1,1,structural problem
+HB,bcsstm06,420,420,420,1,0,1,1,1,1,structural problem
+HB,bcsstm07,420,420,7252,1,0,1,1,1,1,structural problem
+HB,bcsstm08,1074,1074,1074,1,0,1,1,1,1,structural problem
+HB,bcsstm09,1083,1083,1083,1,0,1,1,1,1,structural problem
+HB,bcsstm10,1086,1086,22092,1,0,1,0,1,1,structural problem
+HB,bcsstm11,1473,1473,1473,1,0,1,1,1,1,structural problem
+HB,bcsstm12,1473,1473,19659,1,0,1,1,1,1,structural problem
+HB,bcsstm13,2003,2003,21181,1,0,1,0,1,1,computational fluid dynamics problem
+HB,bcsstm19,817,817,817,1,0,1,1,1,1,structural problem
+HB,bcsstm20,485,485,485,1,0,1,1,1,1,structural problem
+HB,bcsstm21,3600,3600,3600,1,0,1,1,1,1,structural problem
+HB,bcsstm22,138,138,138,1,0,1,1,1,1,structural problem
+HB,bcsstm23,3134,3134,3134,1,0,1,1,1,1,structural problem
+HB,bcsstm24,3562,3562,3562,1,0,1,1,1,1,structural problem
+HB,bcsstm25,15439,15439,15439,1,0,1,1,1,1,structural problem
+HB,bcsstm26,1922,1922,1922,1,0,1,1,1,1,structural problem
+HB,bcsstm27,1224,1224,56126,1,0,1,0,1,1,structural problem
+HB,beacxc,497,506,50409,1,0,0,0,0,0,economic problem
+HB,beaflw,497,507,53403,1,0,0,0,0,0,economic problem
+HB,beause,497,507,44551,1,0,0,0,0,0,economic problem
+HB,blckhole,2132,2132,14872,1,1,1,0,1,1,structural problem
+HB,bp_0,822,822,3276,1,0,0,0,0.009160305343511451,0.001221374045801527,optimization problem sequence
+HB,bp_1000,822,822,4661,1,0,0,0,0.009448142581060769,0.0004294610264118531,subsequent optimization problem
+HB,bp_1200,822,822,4726,1,0,0,0,0.009322033898305085,0.000423728813559322,subsequent optimization problem
+HB,bp_1400,822,822,4790,1,0,0,0,0.01044932079414838,0.0004179728317659352,subsequent optimization problem
+HB,bp_1600,822,822,4841,1,0,0,0,0.01075491209927611,0.0004136504653567735,subsequent optimization problem
+HB,bp_200,822,822,3802,1,0,0,0,0.00631578947368421,0,subsequent optimization problem
+HB,bp_400,822,822,4028,1,0,0,0,0.00546448087431694,0.0004967709885742673,subsequent optimization problem
+HB,bp_600,822,822,4172,1,0,0,0,0.006235011990407674,0.0004796163069544365,subsequent optimization problem
+HB,bp_800,822,822,4534,1,0,0,0,0.005298013245033113,0.0004415011037527594,subsequent optimization problem
+HB,can_1054,1054,1054,12196,1,1,1,0,1,1,structural problem
+HB,can_1072,1072,1072,12444,1,1,1,0,1,1,structural problem
+HB,can_144,144,144,1296,1,1,1,0,1,1,structural problem
+HB,can_161,161,161,1377,1,1,1,0,1,1,structural problem
+HB,can_187,187,187,1491,1,1,1,0,1,1,structural problem
+HB,can_229,229,229,1777,1,1,1,0,1,1,structural problem
+HB,can_24,24,24,160,1,1,1,0,1,1,structural problem
+HB,can_256,256,256,2916,1,1,1,0,1,1,structural problem
+HB,can_268,268,268,3082,1,1,1,0,1,1,structural problem
+HB,can_292,292,292,2540,1,1,1,0,1,1,structural problem
+HB,can_445,445,445,3809,1,1,1,0,1,1,structural problem
+HB,can_61,61,61,557,1,1,1,0,1,1,structural problem
+HB,can_62,62,62,218,1,1,1,0,1,1,structural problem
+HB,can_634,634,634,7228,1,1,1,0,1,1,structural problem
+HB,can_715,715,715,6665,1,1,1,0,1,1,structural problem
+HB,can_73,73,73,377,1,1,1,0,1,1,structural problem
+HB,can_838,838,838,10010,1,1,1,0,1,1,structural problem
+HB,can_96,96,96,768,1,1,1,0,1,1,structural problem
+HB,curtis54,54,54,291,1,1,1,0,0.9535864978902954,0.9535864978902954,2D/3D problem
+HB,dwt_1005,1005,1005,8621,1,1,1,0,1,1,structural problem
+HB,dwt_1007,1007,1007,8575,1,1,1,0,1,1,structural problem
+HB,dwt_1242,1242,1242,10426,1,1,1,0,1,1,structural problem
+HB,dwt_162,162,162,1182,1,1,1,0,1,1,structural problem
+HB,dwt_193,193,193,3493,1,1,1,0,1,1,structural problem
+HB,dwt_198,198,198,1392,1,1,1,0,1,1,structural problem
+HB,dwt_209,209,209,1743,1,1,1,0,1,1,structural problem
+HB,dwt_221,221,221,1629,1,1,1,0,1,1,structural problem
+HB,dwt_234,234,234,834,1,1,1,0,1,1,structural problem
+HB,dwt_245,245,245,1461,1,1,1,0,1,1,structural problem
+HB,dwt_2680,2680,2680,25026,1,1,1,0,1,1,structural problem
+HB,dwt_307,307,307,2523,1,1,1,0,1,1,structural problem
+HB,dwt_310,310,310,2448,1,1,1,0,1,1,structural problem
+HB,dwt_346,346,346,3226,1,1,1,0,1,1,structural problem
+HB,dwt_361,361,361,2953,1,1,1,0,1,1,structural problem
+HB,dwt_419,419,419,3563,1,1,1,0,1,1,structural problem
+HB,dwt_492,492,492,3156,1,1,1,0,1,1,structural problem
+HB,dwt_503,503,503,6027,1,1,1,0,1,1,structural problem
+HB,dwt_512,512,512,3502,1,1,1,0,1,1,structural problem
+HB,dwt_59,59,59,267,1,1,1,0,1,1,structural problem
+HB,dwt_592,592,592,5104,1,1,1,0,1,1,structural problem
+HB,dwt_607,607,607,5131,1,1,1,0,1,1,structural problem
+HB,dwt_66,66,66,320,1,1,1,0,1,1,structural problem
+HB,dwt_72,72,72,222,1,1,1,0,1,1,structural problem
+HB,dwt_758,758,758,5994,1,1,1,0,1,1,structural problem
+HB,dwt_869,869,869,7285,1,1,1,0,1,1,structural problem
+HB,dwt_87,87,87,541,1,1,1,0,1,1,structural problem
+HB,dwt_878,878,878,7448,1,1,1,0,1,1,structural problem
+HB,dwt_918,918,918,7384,1,1,1,0,1,1,structural problem
+HB,dwt_992,992,992,16744,1,1,1,0,1,1,structural problem
+HB,eris1176,1176,1176,18552,1,1,0,0,1,1,power network problem
+HB,fs_183_1,183,183,998,1,0,1,0,0.417607223476298,0,2D/3D problem sequence
+HB,fs_183_3,183,183,1069,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_183_4,183,183,1069,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_183_6,183,183,1000,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_541_1,541,541,4282,1,0,1,0,0.6826923076923077,0,2D/3D problem sequence
+HB,fs_541_2,541,541,4282,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_541_3,541,541,4282,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_541_4,541,541,4273,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_680_1,680,680,2184,1,0,1,0,0.5106815869786369,0,2D/3D problem sequence
+HB,fs_680_2,680,680,2424,1,0,1,0,0.5106815869786369,0,subsequent 2D/3D problem
+HB,fs_680_3,680,680,2471,1,0,1,0,0.5106815869786369,0,subsequent 2D/3D problem
+HB,fs_760_1,760,760,5739,1,0,1,0,0.6510736196319018,0,2D/3D problem sequence
+HB,fs_760_2,760,760,5739,1,0,1,0,0.6510736196319018,0,subsequent 2D/3D problem
+HB,fs_760_3,760,760,5816,1,0,1,0,0.6510736196319018,0,subsequent 2D/3D problem
+HB,gemat1,4929,10595,46591,1,0,0,0,0,0,power network problem
+HB,gemat11,4929,4929,33108,1,0,0,0,0.001326419872181358,0,power network problem sequence
+HB,gemat12,4929,4929,33044,1,0,0,0,0.001450063440275512,0,subsequent power network problem
+HB,gent113,113,113,655,1,1,0,0,0.05663716814159292,0.05663716814159292,statistical/mathematical problem
+HB,gr_30_30,900,900,7744,1,0,1,1,1,1,2D/3D problem
+HB,gre_1107,1107,1107,5664,1,0,0,0,0,0,directed weighted graph
+HB,gre_115,115,115,421,1,0,0,0,0.2549019607843137,0,directed weighted graph
+HB,gre_185,185,185,975,1,0,0,0,0.4146341463414634,0,directed weighted graph
+HB,gre_216a,216,216,812,1,0,0,0,0,0,directed weighted graph
+HB,gre_216b,216,216,812,1,0,0,0,0,0,directed weighted graph
+HB,gre_343,343,343,1310,1,0,0,0,0,0,directed weighted graph
+HB,gre_512,512,512,1976,1,0,0,0,0,0,directed weighted graph
+HB,hor_131,434,434,4182,1,0,0,0,1,0.3740661686232657,directed weighted graph
+HB,ibm32,32,32,126,1,1,0,0,0.0851063829787234,0.0851063829787234,directed graph
+HB,illc1033,1033,320,4719,1,0,0,0,0,0,least squares problem
+HB,illc1850,1850,712,8636,1,0,0,0,0,0,least squares problem
+HB,impcol_a,207,207,572,1,0,0,0,0.02482269503546099,0.01063829787234043,chemical process simulation problem
+HB,impcol_b,59,59,271,1,0,0,0,0.09491525423728814,0,chemical process simulation problem
+HB,impcol_c,137,137,400,1,0,0,0,0.04444444444444445,0.01146131805157593,chemical process simulation problem
+HB,impcol_d,425,425,1255,1,0,0,0,0.05674846625766871,0.0228198859005705,chemical process simulation problem
+HB,impcol_e,225,225,1303,1,0,0,0,0.1038338658146965,0.001603849238171612,chemical process simulation problem
+HB,jagmesh1,936,936,6264,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh2,1009,1009,6865,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh3,1089,1089,7361,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh4,1440,1440,9504,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh5,1180,1180,7750,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh6,1377,1377,8993,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh7,1138,1138,7450,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh8,1141,1141,7465,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh9,1349,1349,9101,1,1,1,0,1,1,2D/3D problem
+HB,jgl009,9,9,50,1,1,0,0,0.4761904761904762,0.4761904761904762,counter-example problem
+HB,jgl011,11,11,76,1,1,0,0,0.5151515151515151,0.5151515151515151,counter-example problem
+HB,jpwh_991,991,991,6027,1,0,1,0,0.9364575059571089,0.9364575059571089,semiconductor device problem
+HB,lns_131,131,131,536,1,0,1,0,0.7028301886792453,0.01886792452830189,computational fluid dynamics problem
+HB,lns_3937,3937,3937,25407,1,0,1,0,0.849666726715907,0.001351107908484958,computational fluid dynamics problem
+HB,lns_511,511,511,2796,1,0,1,0,0.7994945240101096,0.02021903959561921,computational fluid dynamics problem
+HB,lnsp3937,3937,3937,25407,1,0,1,0,0.849666726715907,0.001351107908484958,computational fluid dynamics problem
+HB,lnsp_131,131,131,536,1,0,1,0,0.7028301886792453,0.01886792452830189,computational fluid dynamics problem
+HB,lnsp_511,511,511,2796,1,0,1,0,0.7994945240101096,0.02021903959561921,computational fluid dynamics problem
+HB,lshp1009,1009,1009,6865,1,1,1,0,1,1,duplicate thermal problem
+HB,lshp1270,1270,1270,8668,1,1,1,0,1,1,thermal problem
+HB,lshp1561,1561,1561,10681,1,1,1,0,1,1,thermal problem
+HB,lshp1882,1882,1882,12904,1,1,1,0,1,1,thermal problem
+HB,lshp2233,2233,2233,15337,1,1,1,0,1,1,thermal problem
+HB,lshp2614,2614,2614,17980,1,1,1,0,1,1,thermal problem
+HB,lshp3025,3025,3025,20833,1,1,1,0,1,1,thermal problem
+HB,lshp3466,3466,3466,23896,1,1,1,0,1,1,thermal problem
+HB,lshp_265,265,265,1753,1,1,1,0,1,1,thermal problem
+HB,lshp_406,406,406,2716,1,1,1,0,1,1,thermal problem
+HB,lshp_577,577,577,3889,1,1,1,0,1,1,thermal problem
+HB,lshp_778,778,778,5272,1,1,1,0,1,1,thermal problem
+HB,lund_a,147,147,2449,1,0,1,1,1,1,structural problem
+HB,lund_b,147,147,2441,1,0,1,1,1,1,structural problem
+HB,mahindas,1258,1258,7682,1,0,0,0,0.01663146779303062,0,economic problem
+HB,mbeacxc,496,496,49920,1,0,0,0,0.3162614104531868,0,economic problem
+HB,mbeaflw,496,496,49920,1,0,0,0,0.3162614104531868,0,economic problem
+HB,mbeause,496,496,41063,1,0,0,0,0.2190689324447286,0.007771192484568281,economic problem
+HB,mcca,180,180,2659,1,0,1,0,0.6446147640177491,0,2D/3D problem
+HB,mcfe,765,765,24382,1,0,1,0,0.699411440911208,0,2D/3D problem
+HB,nnc1374,1374,1374,8588,1,0,1,0,0.8169596690796277,0.5918631769888573,2D/3D problem
+HB,nnc261,261,261,1500,1,0,1,0,0.8237037037037037,0.6133333333333333,2D/3D problem
+HB,nnc666,666,666,4032,1,0,1,0,0.817831590533847,0.5919381557150746,2D/3D problem
+HB,nos1,237,237,1017,1,0,1,1,1,1,structural problem
+HB,nos2,957,957,4137,1,0,1,1,1,1,structural problem
+HB,nos3,960,960,15844,1,0,1,1,1,1,structural problem
+HB,nos4,100,100,594,1,0,1,1,1,1,structural problem
+HB,nos5,468,468,5172,1,0,1,1,1,1,structural problem
+HB,nos6,675,675,3255,1,0,1,1,1,1,2D/3D problem
+HB,nos7,729,729,4617,1,0,1,1,1,1,2D/3D problem
+HB,orani678,2529,2529,90158,1,0,0,0,0.07068607068607069,2.223531635296341e-05,economic problem
+HB,orsirr_1,1030,1030,6858,1,0,1,0,1,0.4094028826355525,computational fluid dynamics problem
+HB,orsirr_2,886,886,5970,1,0,1,0,1,0.4118804091266719,computational fluid dynamics problem
+HB,orsreg_1,2205,2205,14133,1,0,1,0,1,0.4119718309859155,computational fluid dynamics problem
+HB,plat1919,1919,1919,32399,1,0,1,1,1,1,2D/3D problem
+HB,plat362,362,362,5786,1,0,1,1,1,1,2D/3D problem
+HB,plsk1919,1919,1919,9662,1,0,1,0,1,0,2D/3D problem
+HB,plskz362,362,362,1760,1,0,1,0,1,0,2D/3D problem
+HB,pores_1,30,30,180,1,0,1,0,0.6266666666666667,0.2933333333333333,computational fluid dynamics problem
+HB,pores_2,1224,1224,9613,1,0,1,0,0.6119918941470974,0.3914650137084277,computational fluid dynamics problem
+HB,pores_3,532,532,3474,1,0,1,0,0.7423521414004078,0.3052345343303875,computational fluid dynamics problem
+HB,psmigr_1,3140,3140,543160,1,0,0,0,0.4786508697793794,0.01044772250019444,economic problem
+HB,psmigr_2,3140,3140,540022,1,0,0,0,0.4786508697793794,0,economic problem
+HB,psmigr_3,3140,3140,543160,1,0,0,0,0.4786508697793794,0,economic problem
+HB,rgg010,10,10,76,1,1,0,0,0.6363636363636364,0.6363636363636364,counter-example problem
+HB,saylr1,238,238,1128,1,0,1,0,1,0.647191011235955,computational fluid dynamics problem
+HB,saylr3,1000,1000,3750,1,0,1,0,1,1,computational fluid dynamics problem
+HB,saylr4,3564,3564,22316,1,0,1,0,1,1,computational fluid dynamics problem
+HB,sherman1,1000,1000,3750,1,0,1,0,1,1,computational fluid dynamics problem
+HB,sherman2,1080,1080,23094,1,0,1,0,0.6708458253838466,0.004905968928863451,computational fluid dynamics problem
+HB,sherman3,5005,5005,20033,1,0,1,0,1,0.4532871972318339,computational fluid dynamics problem
+HB,sherman4,1104,1104,3786,1,0,1,0,1,0,computational fluid dynamics problem
+HB,sherman5,3312,3312,20793,1,0,1,0,0.7386305131285396,0.1534237171786511,computational fluid dynamics problem
+HB,shl_0,663,663,1687,1,0,0,0,0,0,optimization problem sequence
+HB,shl_200,663,663,1726,1,0,0,0,0,0,subsequent optimization problem
+HB,shl_400,663,663,1712,1,0,0,0,0,0,subsequent optimization problem
+HB,sstmodel,3345,3345,22749,1,1,1,0,1,1,structural problem
+HB,steam1,240,240,2248,1,0,1,0,1,0.2729083665338645,computational fluid dynamics problem
+HB,steam2,600,600,5660,1,0,1,0,1,0.1877470355731225,computational fluid dynamics problem
+HB,steam3,80,80,314,1,0,1,0,1,0.3247863247863248,computational fluid dynamics problem
+HB,str_0,363,363,2454,1,0,0,0,0.004893964110929853,0,optimization problem sequence
+HB,str_200,363,363,3068,1,0,0,0,0.01108936725375081,0,subsequent optimization problem
+HB,str_400,363,363,3157,1,0,0,0,0.0196513470681458,0,subsequent optimization problem
+HB,str_600,363,363,3279,1,0,0,0,0.01893129770992366,0,subsequent optimization problem
+HB,watt_1,1856,1856,11360,1,0,1,0,0.9865319865319865,0.9865319865319865,computational fluid dynamics problem
+HB,watt_2,1856,1856,11550,1,0,1,0,0.9804002475758201,0.9671962038374252,computational fluid dynamics problem
+HB,well1033,1033,320,4732,1,0,0,0,0,0,least squares problem
+HB,well1850,1850,712,8755,1,0,0,0,0,0,least squares problem
+HB,west0067,67,67,294,1,0,0,0,0.03424657534246575,0,chemical process simulation problem
+HB,west0132,132,132,413,1,0,0,0,0.0196078431372549,0.004914004914004914,chemical process simulation problem
+HB,west0156,156,156,362,1,0,0,0,0,0,chemical process simulation problem
+HB,west0167,167,167,506,1,0,0,0,0.01622718052738337,0,chemical process simulation problem
+HB,west0381,381,381,2134,1,0,0,0,0.005565862708719851,0.0009376465072667605,chemical process simulation problem
+HB,west0479,479,479,1888,1,0,0,0,0.01366982124079916,0,chemical process simulation problem
+HB,west0497,497,497,1721,1,0,0,0,0.006972690296339338,0,chemical process simulation problem
+HB,west0655,655,655,2808,1,0,0,0,0.005616005616005616,0,chemical process simulation problem
+HB,west0989,989,989,3518,1,0,0,0,0.01812004530011325,0.003985197836606889,chemical process simulation problem
+HB,west1505,1505,1505,5414,1,0,0,0,0.001102941176470588,0,chemical process simulation problem
+HB,west2021,2021,2021,7310,1,0,0,0,0.00326619488296135,0,chemical process simulation problem
+HB,will199,199,199,701,1,1,1,0,0.05596465390279824,0.05596465390279824,structural problem
+HB,will57,57,57,281,1,1,1,0,0.8660714285714286,0.8660714285714286,semiconductor device problem
+HB,wm1,207,277,2909,1,0,0,0,0,0,economic problem
+HB,wm2,207,260,2942,1,0,0,0,0,0,economic problem
+HB,wm3,207,260,2948,1,0,0,0,0,0,economic problem
+HB,young1c,841,841,4089,0,0,1,0,1,0.8479064039408867,acoustics problem
+HB,young2c,841,841,4089,0,0,1,0,1,0.8479064039408867,duplicate acoustics problem
+HB,young3c,841,841,3988,1,0,1,0,0.9380362249761678,0.8071178900540197,acoustics problem
+HB,young4c,841,841,4089,0,0,1,0,1,0.8004926108374384,acoustics problem
+HB,zenios,2873,2873,1314,1,0,0,0,1,1,optimization problem
+ATandT,onetone1,36057,36057,335552,1,0,0,0,0.0742956282869174,0.04331285111284008,frequency-domain circuit simulation problem
+ATandT,onetone2,36057,36057,222596,1,0,0,0,0.1128682425939654,0.06622764699821082,frequency-domain circuit simulation problem
+ATandT,pre2,659033,659033,5834044,1,0,0,0,0.3317760910564062,0.06536187196755584,frequency-domain circuit simulation problem
+ATandT,twotone,120750,120750,1206265,1,0,0,0,0.2445668624008717,0.1058542372000797,frequency-domain circuit simulation problem
+Averous,epb0,1794,1794,7764,1,0,1,0,0.5008375209380235,0,thermal problem
+Averous,epb1,14734,14734,95053,1,0,1,0,0.7293915511896314,0,thermal problem
+Averous,epb2,25228,25228,175027,1,0,1,0,0.6705385216189694,0,thermal problem
+Averous,epb3,84617,84617,463625,1,0,1,0,0.6674107142857143,0.03155606214116852,thermal problem
+Bai,af23560,23560,23560,460598,1,0,1,0,0.9973084203031934,0,computational fluid dynamics problem
+Bai,bfwa398,398,398,3678,1,0,1,0,0.9890243902439024,0.9432926829268292,electromagnetics problem
+Bai,bfwa62,62,62,450,1,0,1,0,0.9690721649484536,0.8144329896907216,electromagnetics problem
+Bai,bfwa782,782,782,7514,1,0,1,0,0.9916815210932858,0.9604872251931076,electromagnetics problem
+Bai,bfwb398,398,398,2910,1,0,1,0,1,1,electromagnetics problem
+Bai,bfwb62,62,62,342,1,0,1,0,1,1,electromagnetics problem
+Bai,bfwb782,782,782,5982,1,0,1,0,1,1,electromagnetics problem
+Bai,bwm200,200,200,796,1,0,0,0,1,0.6644295302013423,chemical process simulation problem
+Bai,bwm2000,2000,2000,7996,1,0,0,0,1,0.6664442961974649,chemical process simulation problem
+Bai,cdde1,961,961,4681,1,0,1,0,1,0,computational fluid dynamics problem sequence
+Bai,cdde2,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde3,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde4,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde5,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde6,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,ck104,104,104,992,1,0,1,0,1,0,2D/3D problem
+Bai,ck400,400,400,2860,1,0,1,0,0.9886178861788618,0.001626016260162602,2D/3D problem
+Bai,ck656,656,656,3884,1,0,1,0,0.9913258983890955,0,2D/3D problem
+Bai,dw1024,2048,2048,10114,1,0,1,0,0.9848747830399207,0.9481775353334987,electromagnetics problem
+Bai,dw256A,512,512,2480,1,0,1,0,0.9796747967479674,0.9146341463414634,electromagnetics problem
+Bai,dw256B,512,512,2500,1,0,1,0,0.9698189134808853,0.8832997987927566,electromagnetics problem
+Bai,dw4096,8192,8192,41746,1,0,1,0,0.9626274065685164,0.9154199201287477,electromagnetics problem
+Bai,lop163,163,163,935,1,0,0,0,0.4507772020725389,0,statistical/mathematical problem
+Bai,mhda416,416,416,8562,1,0,1,0,0.7675276752767528,0.2675871920009523,electromagnetics problem
+Bai,mhdb416,416,416,2312,1,0,1,1,1,1,electromagnetics problem
+Bai,odepa400,400,400,1201,1,0,1,0,0.9962546816479401,0.9937578027465668,2D/3D problem
+Bai,odepb400,400,400,399,1,0,1,0,1,1,2D/3D problem
+Bai,olm100,100,100,396,1,0,1,0,0.668918918918919,0.3310810810810811,computational fluid dynamics problem
+Bai,olm1000,1000,1000,3996,1,0,1,0,0.6668891855807744,0.3331108144192256,computational fluid dynamics problem
+Bai,olm2000,2000,2000,7996,1,0,1,0,0.6667778519012675,0.3332221480987325,computational fluid dynamics problem
+Bai,olm500,500,500,1996,1,0,1,0,0.6671122994652406,0.3328877005347594,computational fluid dynamics problem
+Bai,olm5000,5000,5000,19996,1,0,1,0,0.6667111229661243,0.3332888770338757,computational fluid dynamics problem
+Bai,pde225,225,225,1065,1,0,1,0,1,0.5,2D/3D problem
+Bai,pde2961,2961,2961,14585,1,0,1,0,1,0.5013764624913971,2D/3D problem
+Bai,pde900,900,900,4380,1,0,1,0,1,0.5,2D/3D problem
+Bai,qc2534,2534,2534,463360,0,0,1,0,1,0,electromagnetics problem
+Bai,qc324,324,324,26730,0,0,1,0,1,0,electromagnetics problem
+Bai,qh882,882,882,3354,1,0,0,0,0.9264705882352942,0,power network problem
+Bai,rbsa480,480,480,17088,1,0,1,0,0.07485627126598615,0.0007039774727208729,robotics problem
+Bai,rbsb480,480,480,17088,1,0,1,0,0.07568201818715166,0.0008213552361396304,robotics problem
+Bai,rdb2048,2048,2048,12032,1,0,1,0,1,0.7948717948717948,computational fluid dynamics problem
+Bai,rdb5000,5000,5000,29600,1,0,1,0,1,0.7967479674796748,computational fluid dynamics problem
+Bai,rdb968,968,968,5632,1,0,1,0,1,0.7924528301886793,computational fluid dynamics problem
+Bai,rw136,136,136,479,1,0,0,0,0.44258872651357,0.02922755741127349,statistical/mathematical problem
+Bai,rw496,496,496,1859,1,0,0,0,0.4690693921463152,0,statistical/mathematical problem
+Bai,rw5151,5151,5151,20199,1,0,0,0,0.4902222882320907,0,statistical/mathematical problem
+Bai,tub100,100,100,396,1,0,1,0,1,0,computational fluid dynamics problem
+Bai,tub1000,1000,1000,3996,1,0,1,0,1,0,computational fluid dynamics problem
+Boeing,bcsstk34,588,588,21418,1,0,1,1,1,1,structural problem
+Boeing,bcsstk35,30237,30237,1450163,1,0,1,0,1,1,structural problem
+Boeing,bcsstk36,23052,23052,1143140,1,0,1,1,1,1,structural problem
+Boeing,bcsstk37,25503,25503,1140977,1,0,1,0,1,1,structural problem
+Boeing,bcsstk38,8032,8032,355460,1,0,1,1,1,1,structural problem
+Boeing,bcsstm34,588,588,24270,1,0,1,0,1,1,structural problem
+Boeing,bcsstm35,30237,30237,20619,1,0,1,0,1,1,structural problem
+Boeing,bcsstm36,23052,23052,320606,1,0,1,0,1,1,structural problem
+Boeing,bcsstm37,25503,25503,15525,1,0,1,0,1,1,structural problem
+Boeing,bcsstm38,8032,8032,10485,1,0,1,0,1,1,structural problem
+Boeing,bcsstm39,46772,46772,46772,1,0,1,1,1,1,structural problem
+Boeing,crystk01,4875,4875,315891,1,0,1,0,1,1,materials problem
+Boeing,crystk02,13965,13965,968583,1,0,1,0,1,1,materials problem
+Boeing,crystk03,24696,24696,1751178,1,0,1,0,1,1,materials problem
+Boeing,crystm01,4875,4875,105339,1,0,1,1,1,1,materials problem
+Boeing,crystm02,13965,13965,322905,1,0,1,1,1,1,materials problem
+Boeing,crystm03,24696,24696,583770,1,0,1,1,1,1,materials problem
+Boeing,ct20stif,52329,52329,2600295,1,0,1,1,1,1,structural problem
+Boeing,msc00726,726,726,34518,1,0,1,1,1,1,structural problem
+Boeing,msc01050,1050,1050,26198,1,0,1,1,1,1,structural problem
+Boeing,msc01440,1440,1440,44998,1,0,1,1,1,1,structural problem
+Boeing,msc04515,4515,4515,97707,1,0,1,1,1,1,structural problem
+Boeing,msc10848,10848,10848,1229776,1,0,1,1,1,1,structural problem
+Boeing,msc23052,23052,23052,1142686,1,0,1,1,1,1,structural problem
+Boeing,nasa1824,1824,1824,39208,1,0,1,0,1,1,duplicate structural problem
+Boeing,nasa2910,2910,2910,174296,1,1,1,0,1,1,duplicate structural problem
+Boeing,nasa4704,4704,4704,104756,1,1,1,0,1,1,duplicate structural problem
+Boeing,pcrystk02,13965,13965,968583,1,1,1,0,1,1,duplicate materials problem
+Boeing,pcrystk03,24696,24696,1751178,1,1,1,0,1,1,duplicate materials problem
+Boeing,pct20stif,52329,52329,2698463,1,1,1,0,1,1,structural problem
+Boeing,pwtk,217918,217918,11524432,1,0,1,1,1,1,structural problem
+Bomhof,circuit_1,2624,2624,35823,1,0,0,0,0.999548641410646,0.2060602413263924,circuit simulation problem
+Bomhof,circuit_2,4510,4510,21199,1,0,0,0,0.8065636603186011,0.4152593124925141,circuit simulation problem
+Bomhof,circuit_3,12127,12127,48137,1,0,0,0,0.7700717835450027,0.3001104362230811,circuit simulation problem
+Bomhof,circuit_4,80209,80209,307604,1,0,0,0,0.8292028705104302,0.3635452210926232,circuit simulation problem
+Bova,rma10,46835,46835,2329092,1,0,1,0,1,0.2355549300354827,computational fluid dynamics problem
+Brethour,coater1,1348,1348,19457,1,0,1,0,0.5922916666666667,0.395,computational fluid dynamics problem
+Brethour,coater2,9540,9540,207308,1,0,1,0,0.5941884735804569,0.1280874338061923,computational fluid dynamics problem
+Brunetiere,thermal,3456,3456,66528,1,0,1,0,1,0.0730593607305936,thermal problem
+Cote,mplate,5962,5962,142190,0,0,1,0,1,0.05311683354376486,acoustics problem
+Cote,vibrobox,12328,12328,301700,1,0,1,0,1,1,acoustics problem
+DRIVCAV,cavity01,317,317,7280,1,0,1,0,0.8037831733483908,0.5198237885462555,computational fluid dynamics problem sequence
+DRIVCAV,cavity02,317,317,5923,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity03,317,317,7311,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity04,317,317,5923,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity05,1182,1182,32632,1,0,1,0,0.9049083605322621,0.6103499322813317,computational fluid dynamics problem sequence
+DRIVCAV,cavity06,1182,1182,29675,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity07,1182,1182,32702,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity08,1182,1182,29675,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity09,1182,1182,32702,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity10,2597,2597,76171,1,0,1,0,0.9372682821986997,0.6400172395216033,computational fluid dynamics problem sequence
+DRIVCAV,cavity11,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity12,2597,2597,76258,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity13,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity14,2597,2597,76258,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity15,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity16,4562,4562,137887,1,0,1,0,0.9531982436361479,0.6542773036781541,computational fluid dynamics problem sequence
+DRIVCAV,cavity17,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity18,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity19,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity20,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity21,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity22,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity23,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity24,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity25,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity26,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+FIDAP,ex1,216,216,4317,1,0,1,0,1,0.9980657640232108,computational fluid dynamics problem
+FIDAP,ex10,2410,2410,54840,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex10hs,2548,2548,57308,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex11,16614,16614,1096948,1,0,1,0,1,0.9999981487206734,computational fluid dynamics problem
+FIDAP,ex12,3973,3973,79077,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex13,2568,2568,75628,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex14,3251,3251,65875,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex15,6867,6867,98671,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex18,5773,5773,71701,1,0,1,0,1,0.4973910933139182,computational fluid dynamics problem
+FIDAP,ex19,12005,12005,259577,1,0,1,0,1,0.4284006268883396,computational fluid dynamics problem
+FIDAP,ex2,441,441,26839,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex20,2203,2203,67830,1,0,1,0,1,0.9705407160221662,computational fluid dynamics problem
+FIDAP,ex21,656,656,18964,1,0,1,0,1,0.9422327996538296,computational fluid dynamics problem
+FIDAP,ex22,839,839,22460,1,0,1,0,1,0.88617551561714,computational fluid dynamics problem
+FIDAP,ex23,1409,1409,42760,1,0,1,0,1,0.9386855719486492,computational fluid dynamics problem
+FIDAP,ex24,2283,2283,47901,1,0,1,0,1,0.862361129122898,computational fluid dynamics problem
+FIDAP,ex25,848,848,24369,1,0,1,0,1,0.9755481671646816,computational fluid dynamics problem
+FIDAP,ex26,2163,2163,74464,1,0,1,0,1,0.7325380026938618,computational fluid dynamics problem
+FIDAP,ex27,974,974,37652,1,0,1,0,1,0.5304041225928939,computational fluid dynamics problem
+FIDAP,ex28,2603,2603,77031,1,0,1,0,1,0.9877623772912288,computational fluid dynamics problem
+FIDAP,ex29,2870,2870,23754,1,0,1,0,1,0.9963608504117986,computational fluid dynamics problem
+FIDAP,ex3,1821,1821,52685,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex31,3909,3909,91223,1,0,1,0,1,0.7266897116346767,computational fluid dynamics problem
+FIDAP,ex32,1159,1159,11047,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex33,1733,1733,22189,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex35,19716,19716,227872,1,0,1,0,1,0.4608754972232364,computational fluid dynamics problem
+FIDAP,ex36,3079,3079,53099,1,0,1,0,1,0.9952497822816879,computational fluid dynamics problem
+FIDAP,ex37,3565,3565,67591,1,0,1,0,1,0.9536750695030144,computational fluid dynamics problem
+FIDAP,ex4,1601,1601,31849,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex40,7740,7740,456188,1,0,1,0,1,0.7709917560940942,computational fluid dynamics problem
+FIDAP,ex5,27,27,279,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex6,1651,1651,49062,1,0,1,0,1,0.9792406332233408,computational fluid dynamics problem
+FIDAP,ex7,1633,1633,46626,1,0,1,0,1,0.8240392950014447,computational fluid dynamics problem
+FIDAP,ex8,3096,3096,90841,1,0,1,0,1,0.4310900906034532,computational fluid dynamics problem
+FIDAP,ex9,3363,3363,99471,1,0,1,1,1,1,computational fluid dynamics problem
+Gaertner,big,13209,13209,91465,1,0,0,0,1,0.999974442854222,directed weighted graph
+Gaertner,nopoly,10774,10774,70842,1,0,0,0,1,1,undirected weighted graph
+Gaertner,pesa,11738,11738,79566,1,0,0,0,1,0.999970513652179,directed weighted graph
+Garon,garon1,3175,3175,84723,1,0,1,0,1,0.6720847366622736,computational fluid dynamics problem
+Garon,garon2,13535,13535,373235,1,0,1,0,1,0.6726819817326322,computational fluid dynamics problem
+Goodwin,goodwin,7320,7320,324772,1,0,1,0,0.6353114022282706,0.001199255331506196,computational fluid dynamics problem
+Goodwin,rim,22560,22560,1014951,1,0,1,0,0.6390640220938991,0,computational fluid dynamics problem
+Graham,graham1,9035,9035,335472,1,0,1,0,0.718197839525901,0.0004322586733311619,computational fluid dynamics problem
+Grund,b1_ss,7,7,15,1,0,0,0,0,0,chemical process simulation problem
+Grund,b2_ss,1089,1089,3895,1,0,0,0,0.0146710837671557,0.0005136106831022085,chemical process simulation problem
+Grund,b_dyn,1089,1089,4144,1,0,0,0,0.01454716095729704,0.0004828585224529213,chemical process simulation problem
+Grund,bayer01,57735,57735,275094,1,0,0,0,0.0002304047924196823,2.908118011428904e-05,chemical process simulation problem
+Grund,bayer02,13935,13935,63307,1,0,0,0,0.001884570082449941,0.000284346713425904,chemical process simulation problem
+Grund,bayer03,6747,6747,29195,1,0,0,0,0.003132397173723459,0.0002740852405097985,chemical process simulation problem
+Grund,bayer04,20545,20545,85537,1,0,0,0,0.001584088708967702,0.0002104352502425851,chemical process simulation problem
+Grund,bayer05,3268,3268,20712,1,0,0,0,0.006682474671265359,0.00135200386286818,chemical process simulation problem
+Grund,bayer06,3008,3008,20715,1,0,0,0,0.006745484877058098,0.001351808043257857,chemical process simulation problem
+Grund,bayer07,3268,3268,20963,1,0,0,0,0.006682474671265359,0.0013358141310052,chemical process simulation problem
+Grund,bayer08,3008,3008,20698,1,0,0,0,0.006745484877058098,0.001352918438345574,chemical process simulation problem
+Grund,bayer09,3083,3083,11767,1,0,0,0,0.02112012068640392,0.0001700246535747683,chemical process simulation problem
+Grund,bayer10,13436,13436,71594,1,0,0,0,0.002528365095919851,0.0002234917796929782,chemical process simulation problem
+Grund,d_dyn,87,87,230,1,0,0,0,0.07692307692307693,0.01769911504424779,chemical process simulation problem
+Grund,d_dyn1,87,87,232,1,0,0,0,0.07692307692307693,0.01754385964912281,chemical process simulation problem
+Grund,d_ss,53,53,144,1,0,0,0,0.04137931034482759,0,chemical process simulation problem
+Grund,meg1,2904,2904,58142,1,0,0,0,0.002374602082078637,0.001996042329863202,circuit simulation problem
+Grund,meg4,5860,5860,25258,1,0,0,0,1,1,circuit simulation problem
+Grund,poli,4008,4008,8188,1,0,0,0,0.0291866028708134,0.002392344497607655,economic problem
+Grund,poli_large,15575,15575,33033,1,0,0,0,0.003543059603405909,0.0004582426394776034,economic problem
+Gset,G1,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G10,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G11,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G12,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G13,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G14,800,800,9388,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G15,800,800,9322,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G16,800,800,9344,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G17,800,800,9334,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G18,800,800,9388,1,0,0,0,1,1,undirected weighted random graph
+Gset,G19,800,800,9322,1,0,0,0,1,1,undirected weighted random graph
+Gset,G2,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G20,800,800,9344,1,0,0,0,1,1,undirected weighted random graph
+Gset,G21,800,800,9334,1,0,0,0,1,1,undirected weighted random graph
+Gset,G22,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G23,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G24,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G25,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G26,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G27,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G28,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G29,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G3,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G30,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G31,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G32,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G33,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G34,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G35,2000,2000,23556,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G36,2000,2000,23532,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G37,2000,2000,23570,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G38,2000,2000,23558,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G39,2000,2000,23556,1,0,0,0,1,1,undirected weighted random graph
+Gset,G4,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G40,2000,2000,23532,1,0,0,0,1,1,undirected weighted random graph
+Gset,G41,2000,2000,23570,1,0,0,0,1,1,undirected weighted random graph
+Gset,G42,2000,2000,23558,1,0,0,0,1,1,undirected weighted random graph
+Gset,G43,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G44,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G45,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G46,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G47,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G48,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G49,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G5,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G50,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G51,1000,1000,11818,1,1,0,0,1,1,undirected random graph
+Gset,G52,1000,1000,11832,1,1,0,0,1,1,undirected random graph
+Gset,G53,1000,1000,11828,1,1,0,0,1,1,undirected random graph
+Gset,G54,1000,1000,11832,1,1,0,0,1,1,undirected random graph
+Gset,G55,5000,5000,24996,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G56,5000,5000,24996,1,0,0,0,1,1,undirected weighted random graph
+Gset,G57,5000,5000,20000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G58,5000,5000,59140,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G59,5000,5000,59140,1,0,0,0,1,1,undirected weighted random graph
+Gset,G6,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G60,7000,7000,34296,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G61,7000,7000,34296,1,0,0,0,1,1,undirected weighted random graph
+Gset,G62,7000,7000,28000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G63,7000,7000,82918,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G64,7000,7000,82918,1,0,0,0,1,1,undirected weighted random graph
+Gset,G65,8000,8000,32000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G66,9000,9000,36000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G67,10000,10000,40000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G7,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G8,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G9,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gupta,gupta1,31802,31802,2164210,1,1,0,0,1,1,optimization problem
+Gupta,gupta2,62064,62064,4248286,1,1,0,0,1,1,optimization problem
+Gupta,gupta3,16783,16783,9323427,1,1,0,0,1,1,optimization problem
+Hamm,add20,2395,2395,13151,1,0,0,0,1,0.5265898103384158,circuit simulation problem
+Hamm,add32,4960,4960,19848,1,0,0,0,1,0.3052122514777001,circuit simulation problem
+Hamm,bcircuit,68902,68902,375558,1,0,0,0,1,0.9084315976207868,circuit simulation problem
+Hamm,hcircuit,105676,105676,513072,1,0,0,0,0.9999410961997232,0.1951139297670355,circuit simulation problem
+Hamm,memplus,17758,17758,99147,1,0,0,0,1,0.4962095614886533,circuit simulation problem
+Hamm,scircuit,170998,170998,958936,1,0,0,0,0.9999467019956295,0.8008355096685118,circuit simulation problem
+Hollinger,g7jac010,2880,2880,18229,1,0,0,0,0.07102357505222322,0,economic problem
+Hollinger,g7jac010sc,2880,2880,18229,1,0,0,0,0.07102357505222322,0,economic problem
+Hollinger,g7jac020,5850,5850,42568,1,0,0,0,0.06184526063359838,0,economic problem
+Hollinger,g7jac020sc,5850,5850,42568,1,0,0,0,0.06184526063359838,0,economic problem
+Hollinger,g7jac040,11790,11790,107383,1,0,0,0,0.04830823961664447,0,economic problem
+Hollinger,g7jac040sc,11790,11790,107383,1,0,0,0,0.04830823961664447,0,economic problem
+Hollinger,g7jac050sc,14760,14760,145157,1,0,0,0,0.04349647420233192,0,economic problem
+Hollinger,g7jac060,17730,17730,183325,1,0,0,0,0.04035864774282543,0,economic problem
+Hollinger,g7jac060sc,17730,17730,183325,1,0,0,0,0.04035864774282543,0,economic problem
+Hollinger,g7jac080,23670,23670,259648,1,0,0,0,0.03703210435580416,0,economic problem
+Hollinger,g7jac080sc,23670,23670,259648,1,0,0,0,0.03703210435580416,0,economic problem
+Hollinger,g7jac100,29610,29610,335972,1,0,0,0,0.03529318979455026,0,economic problem
+Hollinger,g7jac100sc,29610,29610,335972,1,0,0,0,0.03529318979455026,0,economic problem
+Hollinger,g7jac120,35550,35550,412306,1,0,0,0,0.0342243022108217,0,economic problem
+Hollinger,g7jac120sc,35550,35550,412306,1,0,0,0,0.0342243022108217,0,economic problem
+Hollinger,g7jac140,41490,41490,488633,1,0,0,0,0.03350074170680273,0,economic problem
+Hollinger,g7jac140sc,41490,41490,488633,1,0,0,0,0.03350074170680273,0,economic problem
+Hollinger,g7jac160,47430,47430,564952,1,0,0,0,0.03297843351620031,0,economic problem
+Hollinger,g7jac160sc,47430,47430,564952,1,0,0,0,0.03297843351620031,0,economic problem
+Hollinger,g7jac180,53370,53370,641290,1,0,0,0,0.03258366406977314,0,economic problem
+Hollinger,g7jac180sc,53370,53370,641290,1,0,0,0,0.03258366406977314,0,economic problem
+Hollinger,g7jac200,59310,59310,717620,1,0,0,0,0.03227480202305086,0,economic problem
+Hollinger,g7jac200sc,59310,59310,717620,1,0,0,0,0.03227480202305086,0,economic problem
+Hollinger,jan99jac020,6774,6774,33744,1,0,0,0,0.003759634062284604,0,economic problem
+Hollinger,jan99jac020sc,6774,6774,33744,1,0,0,0,0.003759634062284604,0,economic problem
+Hollinger,jan99jac040,13694,13694,72734,1,0,0,0,0.003470816220281136,0,economic problem
+Hollinger,jan99jac040sc,13694,13694,72734,1,0,0,0,0.003470816220281136,0,economic problem
+Hollinger,jan99jac060,20614,20614,111903,1,0,0,0,0.003378124765408002,0,economic problem
+Hollinger,jan99jac060sc,20614,20614,111903,1,0,0,0,0.003378124765408002,0,economic problem
+Hollinger,jan99jac080,27534,27534,151063,1,0,0,0,0.003333611134261188,0,economic problem
+Hollinger,jan99jac080sc,27534,27534,151063,1,0,0,0,0.003333611134261188,0,economic problem
+Hollinger,jan99jac100,34454,34454,190224,1,0,0,0,0.003307461633445052,0,economic problem
+Hollinger,jan99jac100sc,34454,34454,190224,1,0,0,0,0.003307461633445052,0,economic problem
+Hollinger,jan99jac120,41374,41374,229385,1,0,0,0,0.003290255360374358,0,economic problem
+Hollinger,jan99jac120sc,41374,41374,229385,1,0,0,0,0.003290255360374358,0,economic problem
+Hollinger,mark3jac020,9129,9129,52883,1,0,0,0,0.07363006419249245,0.01351166293878669,economic problem
+Hollinger,mark3jac020sc,9129,9129,52883,1,0,0,0,0.07363006419249245,0.007349249098461679,economic problem
+Hollinger,mark3jac040,18289,18289,106803,1,0,0,0,0.07382338721543732,0.01389985784236298,economic problem
+Hollinger,mark3jac040sc,18289,18289,106803,1,0,0,0,0.07382338721543732,0.01173364623056615,economic problem
+Hollinger,mark3jac060,27449,27449,160723,1,0,0,0,0.07388687991287715,0.01402730528871371,economic problem
+Hollinger,mark3jac060sc,27449,27449,160723,1,0,0,0,0.07388687991287715,0.0121839735039789,economic problem
+Hollinger,mark3jac080,36609,36609,214643,1,0,0,0,0.07391845139171971,0.01409066941898426,economic problem
+Hollinger,mark3jac080sc,36609,36609,214643,1,0,0,0,0.07391845139171971,0.0125985842018466,economic problem
+Hollinger,mark3jac100,45769,45769,268563,1,0,0,0,0.07393733869014309,0.01412857360574466,economic problem
+Hollinger,mark3jac100sc,45769,45769,268563,1,0,0,0,0.07393733869014309,0.01261351717213372,economic problem
+Hollinger,mark3jac120,54929,54929,322483,1,0,0,0,0.07394990714529154,0.01415379562098285,economic problem
+Hollinger,mark3jac120sc,54929,54929,322483,1,0,0,0,0.07394990714529154,0.01276529035436745,economic problem
+Hollinger,mark3jac140,64089,64089,376395,1,0,0,0,0.07395887333678935,0.01417215070061332,economic problem
+Hollinger,mark3jac140sc,64089,64089,376395,1,0,0,0,0.07395887333678935,0.0128291219789848,economic problem
+LPnetlib,lp_25fv47,821,1876,10705,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_80bau3b,2262,12061,23264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_adlittle,56,138,424,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_afiro,27,51,102,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg,488,615,2862,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg2,516,758,4740,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg3,516,758,4756,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bandm,305,472,2494,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_beaconfd,173,295,3408,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_blend,74,114,522,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bnl1,643,1586,5532,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bnl2,2324,4486,14996,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bore3d,233,334,1448,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_brandy,220,303,2202,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_capri,271,482,1896,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_a,3516,7248,18168,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_b,9648,77137,260785,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_c,3068,6411,15977,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_d,8926,73948,246614,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cycle,1903,3371,21234,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_czprob,929,3562,10708,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_d2q06c,2171,5831,33081,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_d6cube,415,6184,37704,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_degen2,444,757,4201,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_degen3,1503,2604,25432,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_dfl001,6071,12230,35632,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_e226,223,472,2768,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_etamacro,400,816,2537,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fffff800,524,1028,6401,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_finnis,497,1064,2760,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit1d,24,1049,13427,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit1p,627,1677,9868,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit2d,25,10524,129042,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit2p,3000,13525,50284,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ganges,1309,1706,6937,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_gfrd_pnc,616,1160,2445,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_greenbea,2392,5598,31070,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_greenbeb,2392,5598,31070,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow15,300,645,5620,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow22,440,946,8252,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow7,140,301,2612,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_israel,174,316,2443,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_kb2,43,68,313,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_07,2426,3602,8404,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_11,14694,21349,49058,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_13,28632,42659,97246,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_18,105127,154699,358171,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_lotfi,153,366,1136,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_maros,846,1966,10137,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_maros_r7,3136,9408,144848,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_modszk1,687,1620,3168,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_07,1118,25067,144812,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_14,2337,54797,317097,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_30,4350,104374,604488,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_60,10280,243246,1408073,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_02,2953,7716,16571,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_06,9881,29351,63220,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_10,16558,49932,107605,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_20,33874,108175,232647,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_perold,625,1506,6148,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot,1441,4860,44375,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot4,410,1123,5264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot87,2030,6680,74949,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot_ja,940,2267,14977,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot_we,722,2928,9265,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilotnov,975,2446,13331,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap12,3192,8856,38304,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap15,6330,22275,94950,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap8,912,1632,7296,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_recipe,91,204,687,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc105,105,163,340,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc205,205,317,665,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc50a,50,78,160,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc50b,50,78,148,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scagr25,471,671,1725,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scagr7,129,185,465,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm1,330,600,2732,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm2,660,1200,5469,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm3,990,1800,8206,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scorpion,388,466,1534,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scrs8,490,1275,3288,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd1,77,760,2388,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd6,147,1350,4316,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd8,397,2750,8584,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap1,300,660,1872,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap2,1090,2500,7334,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap3,1480,3340,9734,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_share1b,117,253,1179,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_share2b,96,162,777,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_shell,536,1777,3558,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship04l,402,2166,6380,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship04s,402,1506,4400,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship08l,778,4363,12882,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship08s,778,2467,7194,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship12l,1151,5533,16276,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship12s,1151,2869,8284,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sierra,1227,2735,8001,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stair,356,614,4003,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standata,359,1274,3230,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standgub,361,1383,3338,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standmps,467,1274,3878,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor1,117,165,501,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor2,2157,3045,9357,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor3,16675,23541,72721,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_truss,1000,8806,27836,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_tuff,333,628,4561,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_vtp_base,198,346,1051,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_wood1p,244,2595,70216,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_woodw,1098,8418,37487,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgdbg1,348,629,1662,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgetam,400,816,2537,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgindy,2671,10880,66266,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgprtr,20,40,70,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_box1,231,261,651,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ceria3d,3576,4400,21178,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_chemcom,288,744,1590,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_cplex1,3005,5224,10947,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_cplex2,224,378,1215,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ex72a,197,215,467,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ex73a,193,211,457,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_forest6,66,131,246,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_galenet,8,14,22,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_gosh,3792,13455,99953,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_gran,2658,2525,20111,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_greenbea,2393,5596,31074,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_itest2,9,13,26,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_itest6,11,17,29,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein1,54,108,750,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein2,477,531,5062,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein3,994,1082,13101,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_mondou2,312,604,1208,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_pang,361,741,2933,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_pilot4i,410,1123,5264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_qual,323,464,1646,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_reactor,318,808,2591,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_refinery,323,464,1626,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_vol1,323,464,1646,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_woodinfe,35,89,140,1,0,0,0,0,0,linear programming problem
+Li,li,22695,22695,1215181,1,0,1,0,1,0.8685670104303111,electromagnetics problem
+Li,pli,22695,22695,1350309,1,1,1,0,1,1,duplicate electromagnetics problem
+Mallya,lhr01,1477,1477,18427,1,0,0,0,0.007324823611784348,0,chemical process simulation problem
+Mallya,lhr02,2954,2954,36875,1,0,0,0,0.007320486597050275,0,chemical process simulation problem
+Mallya,lhr04,4101,4101,81057,1,0,0,0,0.01515885315769082,0,chemical process simulation problem
+Mallya,lhr04c,4101,4101,82682,1,0,0,0,0.01515885315769082,0,chemical process simulation problem
+Mallya,lhr07,7337,7337,154660,1,0,0,0,0.0173680609288971,0,chemical process simulation problem
+Mallya,lhr07c,7337,7337,156508,1,0,0,0,0.0173680609288971,0,chemical process simulation problem
+Mallya,lhr10,10672,10672,228395,1,0,0,0,0.008791586915847653,1.752395305332977e-05,chemical process simulation problem
+Mallya,lhr10c,10672,10672,232633,1,0,0,0,0.008791586915847653,1.720467106819501e-05,chemical process simulation problem
+Mallya,lhr11,10964,10964,231806,1,0,0,0,0.008200580375103791,3.452591601570929e-05,chemical process simulation problem
+Mallya,lhr11c,10964,10964,233741,1,0,0,0,0.008200580375103791,4.280052387841227e-05,chemical process simulation problem
+Mallya,lhr14,14270,14270,305750,1,0,0,0,0.006622946983926842,0,chemical process simulation problem
+Mallya,lhr14c,14270,14270,307858,1,0,0,0,0.006622946983926842,0,chemical process simulation problem
+Mallya,lhr17,17576,17576,379761,1,0,0,0,0.001513390098553639,0.0001527473453564807,chemical process simulation problem
+Mallya,lhr17c,17576,17576,381975,1,0,0,0,0.001513390098553639,5.236643939631969e-06,chemical process simulation problem
+Mallya,lhr34,35152,35152,746972,1,0,0,0,0.00151326330781556,0.0001553140154832006,chemical process simulation problem
+Mallya,lhr34c,35152,35152,764014,1,0,0,0,0.00151326330781556,5.236205217354879e-06,chemical process simulation problem
+Mallya,lhr71,70304,70304,1494006,1,0,0,0,0.001513199920413014,0.0001553075692357127,chemical process simulation problem
+Mallya,lhr71c,70304,70304,1528092,1,0,0,0,0.001513199920413014,5.235985883782057e-06,chemical process simulation problem
+Mulvey,finan512,74752,74752,596992,1,0,0,1,1,1,economic problem
+Mulvey,pfinan512,74752,74752,596992,1,1,0,0,1,1,duplicate economic problem
+Nasa,barth,6691,6691,26439,1,1,1,0,0,0,duplicate structural problem
+Nasa,barth4,6019,6019,23492,1,1,1,0,0,0,duplicate structural problem
+Nasa,barth5,15606,15606,61484,1,1,1,0,0,0,duplicate structural problem
+Nasa,nasa1824,1824,1824,39208,1,0,1,1,1,1,structural problem
+Nasa,nasa2146,2146,2146,72250,1,0,1,1,1,1,structural problem
+Nasa,nasa2910,2910,2910,174296,1,0,1,1,1,1,structural problem
+Nasa,nasa4704,4704,4704,104756,1,0,1,1,1,1,structural problem
+Nasa,nasasrb,54870,54870,2677324,1,0,1,1,1,1,structural problem
+Nasa,pwt,36519,36519,326107,1,1,1,0,1,1,duplicate structural problem
+Nasa,shuttle_eddy,10429,10429,103599,1,1,1,0,1,1,duplicate structural problem
+Nasa,skirt,12598,12598,196520,1,1,1,0,1,1,duplicate structural problem
+Nemeth,nemeth01,9506,9506,725054,1,0,0,0,1,1,theoretical/quantum chemistry problem sequence
+Nemeth,nemeth02,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth03,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth04,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth05,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth06,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth07,9506,9506,394812,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth08,9506,9506,394816,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth09,9506,9506,395506,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth10,9506,9506,401448,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth11,9506,9506,408264,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth12,9506,9506,446818,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth13,9506,9506,474472,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth14,9506,9506,496144,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth15,9506,9506,539802,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth16,9506,9506,587012,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth17,9506,9506,629620,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth18,9506,9506,695234,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth19,9506,9506,818302,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth20,9506,9506,971870,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth21,9506,9506,1173746,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth22,9506,9506,1358832,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth23,9506,9506,1506810,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth24,9506,9506,1506550,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth25,9506,9506,1511758,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth26,9506,9506,1511760,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Okunbor,aft01,8205,8205,125567,1,0,1,1,1,1,acoustics problem
+Okunbor,aft02,8184,8184,127762,0,0,1,0,1,0.9963538443526401,acoustics problem
+Qaplib,lp_nug05,210,225,1050,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug06,372,486,2232,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug07,602,931,4214,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug08,912,1632,7296,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug12,3192,8856,38304,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug15,6330,22275,94950,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug20,15240,72600,304800,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug30,52260,379350,1567800,1,0,0,0,0,0,linear programming problem
+Ronis,xenon1,48600,48600,1181120,1,0,1,0,1,0.775813230671423,materials problem
+Ronis,xenon2,157464,157464,3866688,1,0,1,0,1,0.7756792256277864,materials problem
+Rothberg,3dtube,45330,45330,3213618,1,1,1,0,1,1,computational fluid dynamics problem
+Rothberg,cfd1,70656,70656,1825580,1,0,1,1,1,1,computational fluid dynamics problem
+Rothberg,cfd2,123440,123440,3085406,1,0,1,1,1,1,computational fluid dynamics problem
+Rothberg,gearbox,153746,153746,9080404,1,1,1,0,1,1,structural problem
+Rothberg,struct3,53570,53570,1173694,1,1,1,0,1,1,structural problem
+Rothberg,struct4,4350,4350,237798,1,1,1,0,1,1,structural problem
+Shyy,shyy161,76480,76480,329762,1,0,1,0,0.7263358696509635,0.1824427535660244,computational fluid dynamics problem
+Shyy,shyy41,4720,4720,20042,1,0,1,0,0.7234369459874719,0.1843753693416854,computational fluid dynamics problem
+Simon,appu,14000,14000,1853104,1,0,0,0,1,0.9429754924136972,directed weighted random graph
+Simon,bbmat,38744,38744,1771722,1,0,1,0,0.5295358625441292,0.0005851199495896658,computational fluid dynamics problem
+Simon,olafu,16146,16146,1015156,1,0,1,1,1,1,structural problem
+Simon,raefsky1,3242,3242,293409,1,0,1,0,1,0.09040311269027836,computational fluid dynamics problem sequence
+Simon,raefsky2,3242,3242,293551,1,0,1,0,1,0.09753745147411895,subsequent computational fluid dynamics problem
+Simon,raefsky3,21200,21200,1488768,1,0,1,0,1,0.4763745189320018,computational fluid dynamics problem
+Simon,raefsky4,19779,19779,1316789,1,0,1,1,1,1,structural problem
+Simon,raefsky5,6316,6316,167178,1,0,1,0,0,0,structural problem
+Simon,raefsky6,3402,3402,130371,1,0,1,0,0,0,structural problem
+Simon,venkat01,62424,62424,1717792,1,0,1,0,1,0.05542936676316082,computational fluid dynamics problem sequence
+Simon,venkat25,62424,62424,1717763,1,0,1,0,1,0.05539650790563141,subsequent computational fluid dynamics problem
+Simon,venkat50,62424,62424,1717777,1,0,1,0,1,0.05539603939461855,subsequent computational fluid dynamics problem
+TOKAMAK,utm1700b,1700,1700,21509,1,0,1,0,0.5232974910394266,0,electromagnetics problem
+TOKAMAK,utm300,300,300,3155,1,0,1,0,0.4651488616462347,0,electromagnetics problem
+TOKAMAK,utm3060,3060,3060,42211,1,0,1,0,0.524686470332814,0,electromagnetics problem
+TOKAMAK,utm5940,5940,5940,83842,1,0,1,0,0.5290493183743677,0,electromagnetics problem
+Vavasis,av41092,41092,41092,1683902,1,0,1,0,0.0009359570219938022,0,2D/3D problem
+Wang,swang1,3169,3169,20841,1,0,1,0,1,0,semiconductor device problem sequence
+Wang,swang2,3169,3169,20841,1,0,1,0,1,0,subsequent semiconductor device problem
+Wang,wang1,2903,2903,19093,1,0,1,0,1,0.808153180975911,semiconductor device problem sequence
+Wang,wang2,2903,2903,19093,1,0,1,0,1,0.808153180975911,subsequent semiconductor device problem
+Wang,wang3,26064,26064,177168,1,0,1,0,1,0.9780019059720457,semiconductor device problem
+Wang,wang4,26068,26068,177196,1,0,1,0,1,0.04647715843523371,semiconductor device problem
+Zhao,Zhao1,33861,33861,166453,1,0,1,0,0.9224990949680222,0,electromagnetics problem
+Zhao,Zhao2,33861,33861,166453,1,0,1,0,0.9224990949680222,0,electromagnetics problem
+Zitney,extr1,2837,2837,10967,1,0,0,0,0.004209049456331112,0.000364797081623347,chemical process simulation problem
+Zitney,hydr1,5308,5308,22680,1,0,0,0,0.004126315789473685,0.0006173383896287151,chemical process simulation problem
+Zitney,radfr1,1048,1048,13299,1,0,0,0,0.05374309287714783,0,chemical process simulation problem
+Zitney,rdist1,4134,4134,94408,1,0,0,0,0.05878038669628716,0,chemical process simulation problem
+Zitney,rdist2,3198,3198,56834,1,0,0,0,0.04562603575332323,0,chemical process simulation problem
+Zitney,rdist3a,2398,2398,61896,1,0,0,0,0.1404154186743065,0,chemical process simulation problem
+Cunningham,k3plates,11107,11107,378927,1,0,1,0,1,0.999260507857104,acoustics problem
+Cunningham,m3plates,11107,11107,6639,1,0,1,0,1,1,acoustics problem
+Cunningham,qa8fk,66127,66127,1660579,1,0,1,0,1,1,acoustics problem
+Cunningham,qa8fm,66127,66127,1660579,1,0,1,1,1,1,acoustics problem
+Boeing,bcsstk39,46772,46772,2060662,1,0,1,0,1,1,structural problem
+Chen,pkustk01,22044,22044,979380,1,1,1,0,1,1,structural problem
+Chen,pkustk02,10800,10800,810000,1,1,1,0,1,1,structural problem
+Chen,pkustk03,63336,63336,3130416,1,1,1,0,1,1,structural problem
+Chen,pkustk04,55590,55590,4218660,1,1,1,0,1,1,structural problem
+Chen,pkustk05,37164,37164,2205144,1,1,1,0,1,1,structural problem
+Chen,pkustk06,43164,43164,2571768,1,1,1,0,1,1,structural problem
+Chen,pkustk07,16860,16860,2418804,1,1,1,0,1,1,structural problem
+Chen,pkustk08,22209,22209,3226671,1,1,1,0,1,1,structural problem
+Chen,pkustk09,33960,33960,1583640,1,1,1,0,1,1,structural problem
+Chen,pkustk10,80676,80676,4308984,1,1,1,0,1,1,structural problem
+Chen,pkustk11,87804,87804,5217912,1,1,1,0,1,1,structural problem
+Chen,pkustk12,94653,94653,7512317,1,1,1,0,1,1,structural problem
+Chen,pkustk13,94893,94893,6616827,1,1,1,0,1,1,structural problem
+Chen,pkustk14,151926,151926,14836504,1,1,1,0,1,1,structural problem
+MathWorks,pivtol,102,102,306,1,0,0,0,0.9901960784313726,0,statistical/mathematical problem
+Kim,kim1,38415,38415,933195,0,0,1,0,0.9897360244976419,0,2D/3D problem
+Kim,kim2,456976,456976,11330020,0,0,1,0,0.9970363405132914,0,2D/3D problem
+Langemyr,comsol,1500,1500,97645,1,0,1,0,0.9990327110094128,0.0008944822923708982,structural problem
+Pothen,barth,6691,6691,46187,1,1,1,0,1,1,structural problem
+Pothen,barth4,6019,6019,40965,1,1,1,0,1,1,structural problem
+Pothen,barth5,15606,15606,107362,1,1,1,0,1,1,structural problem
+Pothen,bodyy4,17546,17546,121550,1,0,1,1,1,1,structural problem
+Pothen,bodyy5,18589,18589,128853,1,0,1,1,1,1,structural problem
+Pothen,bodyy6,19366,19366,134208,1,0,1,1,1,1,structural problem
+Pothen,commanche_dual,7920,7920,31680,1,1,1,0,1,1,structural problem
+Pothen,mesh1e1,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh1em1,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh1em6,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh2e1,306,306,2018,1,0,1,1,1,1,structural problem
+Pothen,mesh2em5,306,306,2018,1,0,1,1,1,1,structural problem
+Pothen,mesh3e1,289,289,1377,1,0,1,1,1,1,structural problem
+Pothen,mesh3em5,289,289,1377,1,0,1,1,1,1,structural problem
+Pothen,onera_dual,85567,85567,419201,1,1,1,0,1,1,structural problem
+Pothen,pwt,36519,36519,326107,1,1,1,0,1,1,structural problem
+Pothen,shuttle_eddy,10429,10429,103599,1,1,1,0,1,1,structural problem
+Pothen,skirt,12598,12598,196520,1,1,1,0,1,1,structural problem
+Pothen,sphere2,66,66,450,1,1,1,0,1,1,structural problem
+Pothen,sphere3,258,258,1794,1,1,1,0,1,1,structural problem
+Pothen,tandem_dual,94069,94069,460493,1,1,1,0,1,1,structural problem
+Pothen,tandem_vtx,18454,18454,253350,1,1,1,0,1,1,structural problem
+Norris,fv1,9604,9604,85264,1,0,1,1,1,1,2D/3D problem
+Norris,fv2,9801,9801,87025,1,0,1,1,1,1,2D/3D problem
+Norris,fv3,9801,9801,87025,1,0,1,1,1,1,2D/3D problem
+Norris,heart1,3557,3557,1385317,1,0,1,0,1,0,2D/3D problem
+Norris,heart2,2339,2339,680341,1,0,1,0,1,0,2D/3D problem
+Norris,heart3,2339,2339,680341,1,0,1,0,1,0,2D/3D problem
+Norris,lung1,1650,1650,7419,1,0,1,0,0.5713295198474606,0,computational fluid dynamics problem
+Norris,lung2,109460,109460,492564,1,0,1,0,0.5714270798529903,0,computational fluid dynamics problem
+Norris,stomach,213360,213360,3021648,1,0,1,0,0.8474914253808726,0,2D/3D problem
+Norris,torso1,116158,116158,8516500,1,0,1,0,0.4243874832715144,0,2D/3D problem
+Norris,torso2,115967,115967,1033473,1,0,1,0,0.9916360219987662,0,2D/3D problem
+Norris,torso3,259156,259156,4429042,1,0,1,0,0.9513722917125312,0,2D/3D problem
+Shen,e40r0100,17281,17281,553562,1,0,1,0,0.3079877899832364,0.001965387548691824,2D/3D problem
+Shen,shermanACa,3432,3432,25220,1,0,1,0,0.163759867817147,0.02157150725169818,2D/3D problem
+Shen,shermanACb,18510,18510,145149,1,0,1,0,0.1493062958488302,0.02665845434660729,2D/3D problem
+Shen,shermanACd,6136,6136,53329,1,0,1,0,0.1520140698832454,0.01665501239590617,2D/3D problem
+Pereyra,landmark,71952,2704,1146848,1,0,0,0,0,0,least squares problem
+vanHeukelum,cage3,5,5,19,1,0,0,0,1,0,directed weighted graph
+vanHeukelum,cage4,9,9,49,1,0,0,0,1,0,directed weighted graph
+vanHeukelum,cage5,37,37,233,1,0,0,0,1,0.04081632653061224,directed weighted graph
+vanHeukelum,cage6,93,93,785,1,0,0,0,1,0.09248554913294797,directed weighted graph
+vanHeukelum,cage7,340,340,3084,1,0,0,0,1,0.1020408163265306,directed weighted graph
+vanHeukelum,cage8,1015,1015,11003,1,0,0,0,1,0.144973968762515,directed weighted graph
+vanHeukelum,cage9,3534,3534,41594,1,0,0,0,1,0.1535470310036784,directed weighted graph
+vanHeukelum,cage10,11397,11397,150645,1,0,0,0,1,0.1743077099850626,directed weighted graph
+vanHeukelum,cage11,39082,39082,559722,1,0,0,0,1,0.1821988322065151,directed weighted graph
+vanHeukelum,cage12,130228,130228,2032536,1,0,0,0,1,0.1935123018985359,directed weighted graph
+vanHeukelum,cage13,445315,445315,7479343,1,0,0,0,1,0.2004785878020389,directed weighted graph
+vanHeukelum,cage14,1505785,1505785,27130349,1,0,0,0,1,0.2073316837703073,directed weighted graph
+vanHeukelum,cage15,5154859,5154859,99199551,1,0,0,0,1,0.2131193964673732,directed weighted graph
+Hohn,fd12,7500,7500,28462,1,0,1,0,0.0002810765230834094,0,materials problem
+Hohn,fd15,11532,11532,44206,1,0,1,0,0,0,materials problem
+Hohn,fd18,16428,16428,63406,1,0,1,0,3.154275620603729e-05,0,materials problem
+Hohn,sinc12,7500,7500,283992,1,0,1,0,0.01755337541442645,0,materials problem
+Hohn,sinc15,11532,11532,551184,1,0,1,0,0.01378652867239141,0,materials problem
+Hohn,sinc18,16428,16428,948696,1,0,1,0,0.01157085557378834,0,materials problem
+Alemdar,Alemdar,6245,6245,42581,1,0,1,0,1,1,2D/3D problem
+Andrews,Andrews,60000,60000,760154,1,0,1,1,1,1,computer graphics/vision problem
+FEMLAB,ns3Da,20414,20414,1679599,1,0,1,0,0.9999825339398674,0,computational fluid dynamics problem
+FEMLAB,poisson2D,367,367,2417,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,poisson3Da,13514,13514,352762,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,poisson3Db,85623,85623,2374949,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,problem1,415,415,2779,1,0,1,0,1,0.6548223350253807,2D/3D problem
+FEMLAB,sme3Da,12504,12504,874887,1,0,1,0,0.9999710105602732,0.4370888572710733,structural problem
+FEMLAB,sme3Db,29067,29067,2081063,1,0,1,0,0.999978557463075,0.4406373111838425,structural problem
+FEMLAB,sme3Dc,42930,42930,3148656,1,0,1,0,0.9999793929020139,0.4391179389295772,structural problem
+FEMLAB,waveguide3D,21036,21036,303468,0,0,1,0,1,0,electromagnetics problem
+Lucifora,cell1,7055,7055,30082,1,0,0,0,0.9970503597122302,0,directed weighted graph
+Lucifora,cell2,7055,7055,30082,1,0,0,0,0.9970503597122302,0.004342728101793546,directed weighted graph
+ND,nd3k,9000,9000,3279690,1,0,1,1,1,1,2D/3D problem
+ND,nd6k,18000,18000,6897316,1,0,1,1,1,1,2D/3D problem
+ND,nd12k,36000,36000,14220946,1,0,1,1,1,1,2D/3D problem
+ND,nd24k,72000,72000,28715634,1,0,1,1,1,1,2D/3D problem
+Schenk_AFE,af_shell1,504855,504855,17562051,1,0,1,0,1,1,structural problem sequence
+Schenk_AFE,af_shell2,504855,504855,17562051,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell3,504855,504855,17562051,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell4,504855,504855,17562051,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell5,504855,504855,17579155,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell6,504855,504855,17579155,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell7,504855,504855,17579155,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell8,504855,504855,17579155,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell9,504855,504855,17588845,1,0,1,0,1,1,subsequent structural problem
+Schenk_IBMNA,c-62,41731,41731,559341,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-64,51035,51035,707985,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-66,49989,49989,444853,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-67,57975,57975,530229,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-73,169422,169422,1279274,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMSDS,2D_27628_bjtcai,27628,27628,206670,1,0,1,0,0.9995761793531919,0.2185967538342959,semiconductor device problem
+Schenk_IBMSDS,2D_54019_highK,54019,54019,486129,1,0,1,0,0.9980889117620531,0.189734095484946,semiconductor device problem
+Schenk_IBMSDS,3D_28984_Tetra,28984,28984,285092,1,0,1,0,0.9874041102377119,0.3613007012666531,semiconductor device problem
+Schenk_IBMSDS,3D_51448_3D,51448,51448,537038,1,0,1,0,0.9920908271502504,0.1870343293725159,semiconductor device problem
+Schenk_IBMSDS,ibm_matrix_2,51448,51448,537038,1,0,1,0,0.9920908271502504,0.185666920653226,semiconductor device problem
+Schenk_IBMSDS,matrix_9,103430,103430,1205518,1,0,1,0,0.9966503478484926,0.1744833443427385,semiconductor device problem
+Schenk_IBMSDS,matrix-new_3,125329,125329,893984,1,0,1,0,0.9871118002084263,0.2826079320371298,semiconductor device problem
+Schenk_ISEI,barrier2-10,115625,115625,2158759,1,0,1,0,1,0.1989334147759642,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-11,115625,115625,2158759,1,0,1,0,1,0.1988805553760946,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-12,115625,115625,2158759,1,0,1,0,1,0.1983617501551521,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-1,113076,113076,2129496,1,0,1,0,1,0.1972208170916773,semiconductor device problem sequence
+Schenk_ISEI,barrier2-2,113076,113076,2129496,1,0,1,0,1,0.1971642812509299,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-3,113076,113076,2129496,1,0,1,0,1,0.1980361234266671,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-4,113076,113076,2129496,1,0,1,0,1,0.189249263546285,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-9,115625,115625,2158759,1,0,1,0,1,0.2036036406422221,semiconductor device problem sequence
+Schenk_ISEI,igbt3,10938,10938,130500,1,0,1,0,1,0.1720279018417223,semiconductor device problem
+Schenk_ISEI,nmos3,18588,18588,237130,1,0,1,0,1,0.1670891636390259,semiconductor device problem
+Schenk_ISEI,ohne2,181343,181343,6869939,1,0,1,0,1,0.09493801090692276,semiconductor device problem
+Schenk_ISEI,para-10,155924,155924,2094873,1,0,1,0,1,0.1980866954210761,subsequent semiconductor device problem
+Schenk_ISEI,para-4,153226,153226,2930882,1,0,1,0,1,0.2900222345747638,semiconductor device problem
+Schenk_ISEI,para-5,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,semiconductor device problem sequence
+Schenk_ISEI,para-6,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,subsequent semiconductor device problem
+Schenk_ISEI,para-7,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,subsequent semiconductor device problem
+Schenk_ISEI,para-8,155924,155924,2094873,1,0,1,0,1,0.1779654854253516,subsequent semiconductor device problem
+Schenk_ISEI,para-9,155924,155924,2094873,1,0,1,0,1,0.1810599453621524,subsequent semiconductor device problem
+Kamvar,Stanford,281903,281903,2312497,1,1,0,0,0.2766368994208425,0.2766368994208425,directed graph
+Kamvar,Stanford_Berkeley,683446,683446,7583376,1,1,0,0,0.2502051856587356,0.2502051856587356,directed graph
+Sumner,graphics,29493,11822,117954,1,0,1,0,0,0,computer graphics/vision problem
+Tromble,language,399130,399130,1216334,1,0,0,0,0.05790231080611451,0,directed weighted graph
+Sanghavi,ecl32,51993,51993,380415,1,0,1,0,0.9219175329301935,0.6030290297239527,semiconductor device problem
+Sandia,adder_dcop_01,1813,1813,11156,1,0,0,0,0.6544094067343666,0.01582041688936398,subsequent circuit simulation problem
+Sandia,adder_dcop_02,1813,1813,11246,1,0,0,0,0.6481736368448915,0.02604552673372154,subsequent circuit simulation problem
+Sandia,adder_dcop_03,1813,1813,11148,1,0,0,0,0.6429870546699475,0.03509147319995721,subsequent circuit simulation problem
+Sandia,adder_dcop_04,1813,1813,11107,1,0,0,0,0.6505480335267569,0.003868471953578337,subsequent circuit simulation problem
+Sandia,adder_dcop_05,1813,1813,11097,1,0,0,0,0.6473752151462995,0.01333907056798623,subsequent circuit simulation problem
+Sandia,adder_dcop_06,1813,1813,11224,1,0,0,0,0.6486257030669638,0.01464501751034702,subsequent circuit simulation problem
+Sandia,adder_dcop_07,1813,1813,11226,1,0,0,0,0.6484880636604774,0.005941644562334218,subsequent circuit simulation problem
+Sandia,adder_dcop_08,1813,1813,11242,1,0,0,0,0.6478127317021501,0.005296049147336087,subsequent circuit simulation problem
+Sandia,adder_dcop_09,1813,1813,11239,1,0,0,0,0.6484424666242848,0.006145369781733418,subsequent circuit simulation problem
+Sandia,adder_dcop_10,1813,1813,11232,1,0,0,0,0.6478634291167427,0.00572579790054077,subsequent circuit simulation problem
+Sandia,adder_dcop_11,1813,1813,11243,1,0,0,0,0.6481677610675705,0.00487184918449481,subsequent circuit simulation problem
+Sandia,adder_dcop_12,1813,1813,11246,1,0,0,0,0.6481736368448915,0.004446797247220751,subsequent circuit simulation problem
+Sandia,adder_dcop_13,1813,1813,11245,1,0,0,0,0.6482422702244811,0.002753070732740364,subsequent circuit simulation problem
+Sandia,adder_dcop_14,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008258337744838539,subsequent circuit simulation problem
+Sandia,adder_dcop_15,1813,1813,11246,1,0,0,0,0.6481736368448915,0.005929062996294336,subsequent circuit simulation problem
+Sandia,adder_dcop_16,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008258337744838539,subsequent circuit simulation problem
+Sandia,adder_dcop_17,1813,1813,11246,1,0,0,0,0.6481736368448915,0.009105346744309158,subsequent circuit simulation problem
+Sandia,adder_dcop_18,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_19,1813,1813,11245,1,0,0,0,0.6482422702244811,0.007623888182973317,subsequent circuit simulation problem
+Sandia,adder_dcop_20,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_21,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_22,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_23,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_24,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_25,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_26,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_27,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_28,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_29,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_30,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008046585494970884,subsequent circuit simulation problem
+Sandia,adder_dcop_31,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_32,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_33,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_34,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_35,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_36,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_37,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_38,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_39,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_40,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_41,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_42,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_43,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_44,1813,1813,11245,1,0,0,0,0.6482422702244811,0.007623888182973317,subsequent circuit simulation problem
+Sandia,adder_dcop_45,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_46,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_47,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_48,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_49,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_50,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_51,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_52,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_53,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_54,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_55,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_56,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_57,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_58,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_59,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_60,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_61,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_62,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_63,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_64,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_65,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_66,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_67,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_68,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_69,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_trans_01,1814,1814,14579,1,0,0,0,1,0.03115703773289494,circuit simulation problem sequence
+Sandia,adder_trans_02,1814,1814,14579,1,0,0,0,1,0.03115703773289494,subsequent circuit simulation problem
+Sandia,fpga_dcop_01,1220,1220,5892,1,0,0,0,0.8183347350714887,0.2733389402859546,circuit simulation problem sequence
+Sandia,fpga_dcop_02,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3271656854499579,subsequent circuit simulation problem
+Sandia,fpga_dcop_03,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3448275862068966,subsequent circuit simulation problem
+Sandia,fpga_dcop_04,1220,1220,5884,1,0,0,0,0.818871103622578,0.3546756529064869,subsequent circuit simulation problem
+Sandia,fpga_dcop_05,1220,1220,5852,1,0,0,0,0.8210347752332485,0.359626802374894,subsequent circuit simulation problem
+Sandia,fpga_dcop_06,1220,1220,5860,1,0,0,0,0.8204911092294666,0.3539373412362405,subsequent circuit simulation problem
+Sandia,fpga_dcop_07,1220,1220,5855,1,0,0,0,0.8205128205128205,0.3432930705657978,subsequent circuit simulation problem
+Sandia,fpga_dcop_08,1220,1220,5888,1,0,0,0,0.8186026936026936,0.3425925925925926,subsequent circuit simulation problem
+Sandia,fpga_dcop_09,1220,1220,5888,1,0,0,0,0.8186026936026936,0.3337542087542087,subsequent circuit simulation problem
+Sandia,fpga_dcop_10,1220,1220,5884,1,0,0,0,0.818871103622578,0.3323504633529907,subsequent circuit simulation problem
+Sandia,fpga_dcop_11,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3301093355761144,subsequent circuit simulation problem
+Sandia,fpga_dcop_12,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_13,1220,1220,5892,1,0,0,0,0.8183347350714887,0.325063078216989,subsequent circuit simulation problem
+Sandia,fpga_dcop_14,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3187552565180824,subsequent circuit simulation problem
+Sandia,fpga_dcop_15,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3221194280908327,subsequent circuit simulation problem
+Sandia,fpga_dcop_16,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3221194280908327,subsequent circuit simulation problem
+Sandia,fpga_dcop_17,1220,1220,5892,1,0,0,0,0.8183347350714887,0.31959629941127,subsequent circuit simulation problem
+Sandia,fpga_dcop_18,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3191757779646762,subsequent circuit simulation problem
+Sandia,fpga_dcop_19,1220,1220,5892,1,0,0,0,0.8183347350714887,0.31959629941127,subsequent circuit simulation problem
+Sandia,fpga_dcop_20,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3212783851976451,subsequent circuit simulation problem
+Sandia,fpga_dcop_21,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_22,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3263246425567704,subsequent circuit simulation problem
+Sandia,fpga_dcop_23,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_24,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3254835996635829,subsequent circuit simulation problem
+Sandia,fpga_dcop_25,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3259041211101766,subsequent circuit simulation problem
+Sandia,fpga_dcop_26,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3254835996635829,subsequent circuit simulation problem
+Sandia,fpga_dcop_27,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3271656854499579,subsequent circuit simulation problem
+Sandia,fpga_dcop_28,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3284272497897393,subsequent circuit simulation problem
+Sandia,fpga_dcop_29,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_30,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3292682926829268,subsequent circuit simulation problem
+Sandia,fpga_dcop_31,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3284272497897393,subsequent circuit simulation problem
+Sandia,fpga_dcop_32,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_33,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_34,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3275862068965517,subsequent circuit simulation problem
+Sandia,fpga_dcop_35,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3288477712363331,subsequent circuit simulation problem
+Sandia,fpga_dcop_36,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3288477712363331,subsequent circuit simulation problem
+Sandia,fpga_dcop_37,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_38,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_39,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_40,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3313708999158957,subsequent circuit simulation problem
+Sandia,fpga_dcop_41,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3301093355761144,subsequent circuit simulation problem
+Sandia,fpga_dcop_42,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3313708999158957,subsequent circuit simulation problem
+Sandia,fpga_dcop_43,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_44,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_dcop_45,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_dcop_46,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_47,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_48,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_49,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_50,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_51,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_trans_01,1220,1220,7382,1,0,0,0,1,0.214193962748876,circuit simulation problem sequence
+Sandia,fpga_trans_02,1220,1220,7382,1,0,0,0,1,0.2138728323699422,subsequent circuit simulation problem
+Sandia,init_adder1,1813,1813,11156,1,0,0,0,0.6544094067343666,0.01582041688936398,circuit simulation problem sequence
+Sandia,mult_dcop_01,25187,25187,193276,1,0,0,0,0.6144759258929472,0.003383612629779353,circuit simulation problem sequence
+Sandia,mult_dcop_02,25187,25187,193276,1,0,0,0,0.6144759258929472,0.003383612629779353,subsequent circuit simulation problem
+Sandia,mult_dcop_03,25187,25187,193216,1,0,0,0,0.6142197994049846,0.01294544504421048,subsequent circuit simulation problem
+Sandia,oscil_dcop_01,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,circuit simulation problem sequence
+Sandia,oscil_dcop_02,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_03,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_04,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_05,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_06,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_07,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_08,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_09,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_10,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_11,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_12,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_13,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_14,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_15,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_16,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_17,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_18,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_19,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_20,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_21,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_22,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_23,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_24,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_25,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_26,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_27,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_28,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_29,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_30,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_31,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_32,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_33,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_34,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_35,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_36,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_37,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_38,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_39,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_40,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_41,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_42,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_43,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_44,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_45,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_46,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_47,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_48,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_49,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_50,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_51,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_52,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_53,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_54,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_55,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_56,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_57,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_trans_01,430,430,1614,1,0,0,0,0.9737274220032841,0.7175697865353038,circuit simulation problem
+MathWorks,Pd,8081,8081,13036,1,0,0,0,0,0,counter-example problem
+MathWorks,Pd_rhs,8081,12406,6323,1,0,0,0,0,0,counter-example problem
+MathWorks,Harvard500,500,500,2636,1,1,0,0,0.4057744830277019,0.4057744830277019,directed graph
+HB,cegb2802,2802,2802,277362,1,1,1,0,1,1,structural problem
+HB,cegb2919,2919,2919,321543,1,1,1,0,1,1,structural problem
+HB,cegb3024,3024,3024,79848,1,1,1,0,1,1,structural problem
+HB,cegb3306,3306,3306,74916,1,1,1,0,1,1,structural problem
+HB,lap_25,25,25,169,1,1,1,0,1,1,structural problem
+HB,lock1074,1074,1074,51588,1,1,1,0,1,1,structural problem
+HB,lock2232,2232,2232,80352,1,1,1,0,1,1,structural problem
+HB,lock3491,3491,3491,160444,1,1,1,0,1,1,structural problem
+HB,lock_700,700,700,22175,1,1,1,0,1,1,structural problem
+HB,man_5976,5976,5976,225046,1,1,1,0,1,1,structural problem
+IBM_Austin,coupled,11341,11341,97193,1,0,0,0,1,0.7823373235828404,circuit simulation problem
+ACUSIM,Pres_Poisson,14822,14822,715804,1,0,1,1,1,1,computational fluid dynamics problem
+Rajat,rajat01,6833,6833,43250,1,1,0,0,0.9957479284779764,0.9957479284779764,circuit simulation problem
+Rajat,rajat02,1960,1960,11187,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat03,7602,7602,32653,1,0,0,0,1,0.4024380527448012,circuit simulation problem
+Rajat,rajat04,1041,1041,8725,1,0,0,0,1,0.03991188285603214,circuit simulation problem
+Rajat,rajat05,301,301,1250,1,0,0,0,0.7697974217311234,0.7058823529411765,circuit simulation problem
+Rajat,rajat06,10922,10922,46983,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat07,14842,14842,63913,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat08,19362,19362,83443,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat09,24482,24482,105573,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat10,30202,30202,130303,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat11,135,135,665,1,0,0,0,0.8911764705882353,0.6303939962476548,circuit simulation problem
+Rajat,rajat12,1879,1879,12818,1,0,0,0,1,0.4548776032151991,circuit simulation problem
+Rajat,rajat13,7598,7598,48762,1,0,0,0,1,0.2965265970366772,circuit simulation problem
+Rajat,rajat14,180,180,1475,1,0,0,0,1,0.0245398773006135,circuit simulation problem
+Hamrle,Hamrle1,32,32,98,1,0,0,0,0.06451612903225806,0,circuit simulation problem
+Hamrle,Hamrle2,5952,5952,22162,1,0,0,0,0.0009930486593843098,0.0001805543017062382,circuit simulation problem
+Hamrle,Hamrle3,1447360,1447360,5514242,1,0,0,0,2.538882993038383e-06,0,circuit simulation problem
+Oberwolfach,gyro_k,17361,17361,1021159,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,gyro_m,17361,17361,340431,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t2dah_a,11445,11445,176117,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t2dah_e,11445,11445,176117,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t2dal_a,4257,4257,37465,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t2dal_e,4257,4257,4257,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t3dh_a,79171,79171,4352105,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dh_e,79171,79171,4352105,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dl_a,20360,20360,509866,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dl_e,20360,20360,20360,1,0,1,1,1,1,duplicate model reduction problem
+LiuWenzhuo,powersim,15838,15838,64424,1,0,0,0,0.5913695769855386,0.5337339974478245,power network problem
+Lin,Lin,256000,256000,1766400,1,0,1,0,1,1,structural problem
+Cannizzo,sts4098,4098,4098,72356,1,0,1,1,1,1,structural problem
+GHS_indef,aug2d,29008,29008,76832,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug2dc,30200,30200,80000,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug3d,24300,24300,69984,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug3dcqp,35543,35543,128115,1,0,1,0,1,1,2D/3D problem
+GHS_indef,bmw3_2,227362,227362,11288630,1,0,1,0,1,1,structural problem
+GHS_indef,c-55,32780,32780,403450,1,0,0,0,1,1,optimization problem
+GHS_indef,c-58,37595,37595,552551,1,0,0,0,1,1,optimization problem
+GHS_indef,c-59,41282,41282,480536,1,0,0,0,1,1,optimization problem
+GHS_indef,c-62ghs,41731,41731,559339,1,0,0,0,1,1,subsequent optimization problem
+GHS_indef,c-63,44234,44234,434704,1,0,0,0,1,1,optimization problem
+GHS_indef,c-68,64810,64810,565996,1,0,0,0,1,1,optimization problem
+GHS_indef,c-69,67458,67458,623914,1,0,0,0,1,1,optimization problem
+GHS_indef,c-70,68924,68924,658986,1,0,0,0,1,1,optimization problem
+GHS_indef,c-71,76638,76638,859520,1,0,0,0,1,1,optimization problem
+GHS_indef,c-72,84064,84064,707546,1,0,0,0,1,1,optimization problem
+GHS_indef,copter2,55476,55476,759952,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,d_pretok,182730,182730,1641672,1,0,1,0,1,1,2D/3D problem
+GHS_indef,darcy003,389874,389874,2097566,1,0,1,0,1,1,2D/3D problem
+GHS_indef,dawson5,51537,51537,1010777,1,0,1,0,1,1,structural problem
+GHS_indef,dtoc,24993,24993,69972,1,0,0,0,1,1,optimization problem
+GHS_indef,exdata_1,6001,6001,2269500,1,0,0,0,1,1,optimization problem
+GHS_indef,helm2d03,392257,392257,2741935,1,0,1,0,1,1,2D/3D problem
+GHS_indef,helm3d01,32226,32226,428444,1,0,1,0,1,1,2D/3D problem
+GHS_indef,k1_san,67759,67759,559774,1,0,1,0,1,1,2D/3D problem
+GHS_indef,laser,3002,3002,9000,1,0,1,0,1,1,materials problem
+GHS_indef,mario001,38434,38434,204912,1,0,1,0,1,1,2D/3D problem
+GHS_indef,mario002,389874,389874,2097566,1,0,1,0,1,1,duplicate 2D/3D problem
+GHS_indef,ncvxqp1,12111,12111,73963,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp9,16554,16554,54040,1,0,0,0,1,1,optimization problem
+GHS_indef,olesnik0,88263,88263,744216,1,0,1,0,1,1,2D/3D problem
+GHS_indef,sit100,10262,10262,61046,1,0,1,0,1,1,2D/3D problem
+GHS_indef,stokes128,49666,49666,558594,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,stokes64,12546,12546,140034,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,stokes64s,12546,12546,140034,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,tuma1,22967,22967,87760,1,0,1,0,1,1,2D/3D problem
+GHS_indef,tuma2,12992,12992,49365,1,0,1,0,1,1,2D/3D problem
+GHS_indef,turon_m,189924,189924,1690876,1,0,1,0,1,1,2D/3D problem
+GHS_psdef,audikw_1,943695,943695,77651847,1,0,1,1,1,1,structural problem
+GHS_psdef,bmw7st_1,141347,141347,7318399,1,0,1,1,1,1,structural problem
+GHS_psdef,bmwcra_1,148770,148770,10641602,1,0,1,1,1,1,structural problem
+GHS_psdef,copter1,17222,17222,211064,1,1,1,0,1,1,computational fluid dynamics problem
+GHS_psdef,copter2,55476,55476,759952,1,1,1,0,1,1,duplicate computational fluid dynamics problem
+GHS_psdef,crankseg_1,52804,52804,10614210,1,0,1,1,1,1,structural problem
+GHS_psdef,crankseg_2,63838,63838,14148858,1,0,1,1,1,1,structural problem
+DNVS,crplat2,18010,18010,960946,1,1,1,0,1,1,structural problem
+DNVS,fcondp2,201822,201822,11294316,1,1,1,0,1,1,structural problem
+GHS_psdef,finance256,37376,37376,298496,1,1,0,0,1,1,optimization problem
+GHS_psdef,ford1,18728,18728,101576,1,1,1,0,1,1,structural problem
+GHS_psdef,ford2,100196,100196,544688,1,1,1,0,1,1,structural problem
+DNVS,fullb,199187,199187,11708077,1,1,1,0,1,1,structural problem
+DNVS,halfb,224617,224617,12387821,1,1,1,0,1,1,structural problem
+GHS_psdef,hood,220542,220542,9895422,1,0,1,1,1,1,structural problem
+GHS_psdef,inline_1,503712,503712,36816170,1,0,1,1,1,1,structural problem
+GHS_psdef,ldoor,952203,952203,42493817,1,0,1,1,1,1,structural problem
+DNVS,m_t1,97578,97578,9753570,1,0,1,1,1,1,structural problem
+GHS_psdef,oilpan,73752,73752,2148558,1,0,1,1,1,1,structural problem
+GHS_psdef,opt1,15449,15449,1930655,1,1,1,0,1,1,structural problem
+GHS_psdef,pds10,16558,16558,149658,1,1,0,0,1,1,optimization problem
+GHS_psdef,pwt,36519,36519,326107,1,1,1,0,1,1,duplicate structural problem
+GHS_psdef,ramage02,16830,16830,2866352,1,1,1,0,1,1,computational fluid dynamics problem
+GHS_psdef,s3dkq4m2,90449,90449,4427725,1,0,1,1,1,1,structural problem
+GHS_psdef,s3dkt3m2,90449,90449,3686223,1,0,1,1,1,1,structural problem
+DNVS,ship_001,34920,34920,3896496,1,0,1,1,1,1,structural problem
+DNVS,ship_003,121728,121728,3777036,1,0,1,1,1,1,structural problem
+DNVS,shipsec1,140874,140874,3568176,1,0,1,1,1,1,structural problem
+DNVS,shipsec5,179860,179860,4598604,1,0,1,1,1,1,structural problem
+DNVS,shipsec8,114919,114919,3303553,1,0,1,1,1,1,structural problem
+GHS_psdef,srb1,54924,54924,2962152,1,1,1,0,1,1,structural problem
+DNVS,thread,29736,29736,4444880,1,0,1,1,1,1,structural problem
+DNVS,trdheim,22098,22098,1935324,1,1,1,0,1,1,structural problem
+DNVS,troll,213453,213453,11985111,1,1,1,0,1,1,structural problem
+DNVS,tsyl201,20685,20685,2454957,1,1,1,0,1,1,structural problem
+GHS_psdef,vanbody,47072,47072,2329056,1,0,1,1,1,1,structural problem
+GHS_psdef,wathen100,30401,30401,471601,1,0,1,1,1,1,random 2D/3D problem
+GHS_psdef,wathen120,36441,36441,565761,1,0,1,1,1,1,random 2D/3D problem
+DNVS,x104,108384,108384,8713602,1,0,1,1,1,1,structural problem
+GHS_indef,a0nsdsil,80016,80016,355034,1,0,0,0,1,1,optimization problem
+GHS_indef,a2nnsnsl,80016,80016,347222,1,0,0,0,1,1,optimization problem
+GHS_indef,a5esindl,60008,60008,255004,1,0,0,0,1,1,optimization problem
+GHS_indef,blockqp1,60012,60012,640033,1,0,0,0,1,1,optimization problem
+GHS_indef,bloweya,30004,30004,150009,1,0,1,0,1,1,materials problem
+GHS_indef,boyd1,93279,93279,1211231,1,0,0,0,1,1,optimization problem
+GHS_indef,boyd2,466316,466316,1500397,1,0,0,0,1,1,optimization problem
+GHS_indef,brainpc2,27607,27607,179395,1,0,0,0,1,1,optimization problem
+GHS_indef,bratu3d,27792,27792,173796,1,0,1,0,1,1,2D/3D problem
+GHS_indef,cont-201,80595,80595,438795,1,0,0,0,1,1,optimization problem
+GHS_indef,cont-300,180895,180895,988195,1,0,0,0,1,1,optimization problem
+GHS_indef,dixmaanl,60000,60000,299998,1,0,0,0,1,1,optimization problem
+GHS_indef,linverse,11999,11999,95977,1,0,0,0,1,1,statistical/mathematical problem
+GHS_indef,ncvxbqp1,50000,50000,349968,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp3,75000,75000,499964,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp5,62500,62500,424966,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp7,87500,87500,574962,1,0,0,0,1,1,optimization problem
+GHS_indef,sparsine,50000,50000,1548988,1,0,1,0,1,1,structural problem
+GHS_indef,spmsrtls,29995,29995,229947,1,0,0,0,1,1,statistical/mathematical problem
+GHS_psdef,cvxbqp1,50000,50000,349968,1,0,0,1,1,1,optimization problem
+GHS_psdef,gridgena,48962,48962,512084,1,0,0,1,1,1,optimization problem
+GHS_psdef,jnlbrng1,40000,40000,199200,1,0,0,1,1,1,optimization problem
+GHS_psdef,minsurfo,40806,40806,203622,1,0,0,1,1,1,optimization problem
+GHS_psdef,obstclae,40000,40000,197608,1,0,0,1,1,1,optimization problem
+GHS_psdef,torsion1,40000,40000,197608,1,0,0,1,1,1,duplicate optimization problem
+Rajat,rajat15,37261,37261,443573,1,0,0,0,1,0.943060217954145,circuit simulation problem
+Bydder,mri1,65536,147456,589824,1,0,1,0,0,0,computer graphics/vision problem
+Bydder,mri2,63240,147456,569160,1,0,1,0,0,0,computer graphics/vision problem
+Engwirda,airfoil_2d,14214,14214,259688,1,0,1,0,0.981668119637925,0,computational fluid dynamics problem
+IBM_EDA,dc1,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426284829292399,circuit simulation problem sequence
+IBM_EDA,dc2,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426284829292399,subsequent circuit simulation problem
+IBM_EDA,dc3,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426407989395915,subsequent circuit simulation problem
+IBM_EDA,trans4,116835,116835,749800,1,0,0,0,0.8542477149952045,0.3020988522272163,circuit simulation problem sequence
+IBM_EDA,trans5,116835,116835,749800,1,0,0,0,0.8542477149952045,0.3018997890878642,subsequent circuit simulation problem
+Morandini,robot,120,120,870,1,0,1,0,0.2177215189873418,0.05316455696202532,robotics problem
+Morandini,rotor1,100,100,708,1,0,1,0,0.514018691588785,0.07165109034267912,structural problem
+Morandini,rotor2,791,791,10685,1,0,1,0,0.2341063574570172,0.1155537784886046,structural problem
+MathWorks,tomography,500,500,28726,1,0,1,0,1,0.9331113158081201,computer graphics/vision problem
+Kemelmacher,Kemelmacher,28452,9693,100875,1,0,1,0,0,0,computer graphics/vision problem
+MathWorks,Kuu,7102,7102,340200,1,0,1,1,1,1,structural problem
+MathWorks,Muu,7102,7102,170134,1,0,1,1,1,1,structural problem
+Toledo,deltaX,68600,21961,247424,1,0,0,0,0,0,counter-example problem
+VanVelzen,std1_Jac2_db,21982,21982,498771,1,0,0,0,0.3261820218167785,8.389455293641422e-06,chemical process simulation problem
+VanVelzen,std1_Jac2,21982,21982,1248213,1,0,0,0,1.441471454060305e-05,0,chemical process simulation problem
+VanVelzen,std1_Jac3_db,21982,21982,531826,1,0,0,0,0.3593020610225873,7.84553706623987e-06,chemical process simulation problem
+VanVelzen,std1_Jac3,21982,21982,1455374,1,0,0,0,1.37377639453759e-05,0,chemical process simulation problem
+VanVelzen,Zd_Jac2_db,22835,22835,676439,1,0,0,0,0.3038965489807284,3.059956793410077e-06,chemical process simulation problem
+VanVelzen,Zd_Jac2,22835,22835,1642407,1,0,0,0,0.000249569948369456,0,chemical process simulation problem
+VanVelzen,Zd_Jac3_db,22835,22835,713907,1,0,0,0,0.3299540424152621,2.894054454528616e-06,chemical process simulation problem
+VanVelzen,Zd_Jac3,22835,22835,1915726,1,0,0,0,0.0002609405864378739,0,chemical process simulation problem
+VanVelzen,Zd_Jac6_db,22835,22835,663643,1,0,0,0,0.3245527521504101,3.121059662176502e-06,chemical process simulation problem
+VanVelzen,Zd_Jac6,22835,22835,1711557,1,0,0,0,0.0002161245251101651,0,chemical process simulation problem
+Rajat,rajat16,94294,94294,476766,1,0,0,0,0.9900237892855388,0.6363336955309653,circuit simulation problem
+Rajat,rajat17,94294,94294,479246,1,0,0,0,0.9900237892855388,0.2705152684049277,circuit simulation problem
+Rajat,rajat18,94294,94294,479151,1,0,0,0,0.626033640830624,0.2849580148146621,circuit simulation problem
+Rajat,rajat19,1157,1157,3699,1,0,0,0,0.9041281299345816,0.9193154034229829,circuit simulation problem
+Lourakis,bundle1,10581,10581,770811,1,0,1,1,1,1,computer graphics/vision problem
+PARSEC,benzene,8219,8219,242669,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,CO,221119,221119,7666057,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga10As10H30,113081,113081,6115633,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga19As19H42,133123,133123,8884839,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga3As3H12,61349,61349,5970947,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga41As41H72,268096,268096,18488476,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,GaAsH6,61349,61349,3381809,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ge87H76,112985,112985,7892195,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ge99H100,112985,112985,8451395,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,H2O,67024,67024,2216736,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Na5,5832,5832,305630,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si10H16,17077,17077,875923,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si2,769,769,17801,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si34H36,97569,97569,5156379,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si41Ge41H72,185639,185639,15011265,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si5H12,19896,19896,738598,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si87H76,240369,240369,10661631,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiH4,5041,5041,171903,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiNa,5743,5743,198787,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiO2,155331,155331,11283503,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiO,33401,33401,1317655,1,0,0,0,1,1,theoretical/quantum chemistry problem
+Rajat,rajat20,86916,86916,604299,1,0,0,0,0.9906228863063395,0.1122042623922186,circuit simulation problem
+Rajat,rajat21,411676,411676,1876011,1,0,0,0,0.7647530446640561,0.6145057622905241,circuit simulation problem
+Rajat,rajat22,39899,39899,195429,1,0,0,0,0.9800702079331211,0.3342735182643515,circuit simulation problem
+Rajat,rajat23,110355,110355,555441,1,0,0,0,0.9891581094231137,0.3324988529606978,circuit simulation problem
+Rajat,rajat24,358172,358172,1946979,1,0,0,0,0.996935347128458,0.2716106951495262,circuit simulation problem
+Rajat,rajat25,87190,87190,606489,1,0,0,0,0.9906572831072957,0.1118151951820715,circuit simulation problem
+Rajat,rajat26,51032,51032,247528,1,0,0,0,0.9853537517311467,0.3271800826884766,circuit simulation problem
+Rajat,rajat27,20640,20640,97353,1,0,0,0,0.9645908149382882,0.3035747337767303,circuit simulation problem
+Rajat,rajat28,87190,87190,606489,1,0,0,0,0.9906572831072957,0.1072533437604223,circuit simulation problem
+MathWorks,Sieber,2290,2290,14873,1,0,0,0,0.7272727272727273,0,counter-example problem
+Andrianov,ex3sta1,16782,16782,678998,1,1,0,0,1,1,optimization problem
+Andrianov,fxm3_6,5026,5026,94026,1,1,0,0,1,1,optimization problem
+Andrianov,fxm4_6,18892,18892,497844,1,1,0,0,1,1,optimization problem
+Andrianov,ins2,309412,309412,2751484,1,1,0,0,1,1,optimization problem
+Andrianov,lp1,534388,534388,1643420,1,1,0,0,1,1,optimization problem
+Andrianov,lpl1,32460,32460,328036,1,1,0,0,1,1,optimization problem
+Andrianov,mip1,66463,66463,10352819,1,1,0,0,1,1,optimization problem
+Andrianov,net100,29920,29920,2033200,1,1,0,0,1,1,optimization problem
+Andrianov,net125,36720,36720,2577200,1,1,0,0,1,1,optimization problem
+Andrianov,net150,43520,43520,3121200,1,1,0,0,1,1,optimization problem
+Andrianov,net25,9520,9520,401200,1,1,0,0,1,1,optimization problem
+Andrianov,net4-1,88343,88343,2441727,1,1,0,0,1,1,optimization problem
+Andrianov,net50,16320,16320,945200,1,1,0,0,1,1,optimization problem
+Andrianov,net75,23120,23120,1489200,1,1,0,0,1,1,optimization problem
+Andrianov,pattern1,19242,19242,9323432,1,1,0,0,1,1,optimization problem
+Andrianov,pf2177,9728,9728,725144,1,1,0,0,1,1,optimization problem
+MKS,fp,7548,7548,834222,1,0,1,0,0.7575174939506899,0.002912877385765126,electromagnetics problem
+Rajat,rajat29,643994,643994,3760246,1,0,0,0,0.6856406275660725,0.6910598008173955,circuit simulation problem
+Rajat,rajat30,643994,643994,6175244,1,0,0,0,0.9945912407336421,0.009194565053000587,circuit simulation problem
+Rajat,rajat31,4690002,4690002,20316253,1,0,0,0,1,0.4000960614178773,circuit simulation problem
+Raju,laminar_duct3D,67173,67173,3788857,1,0,1,0,0.9022908019592145,0.5518386226500883,computational fluid dynamics problem
+Bates,Chem97Zt,2541,31022,62044,1,1,0,0,0,0,statistical/mathematical problem
+Bates,Chem97ZtZ,2541,2541,7361,1,0,0,1,1,1,statistical/mathematical problem
+Schmid,thermal1,82654,82654,574458,1,0,1,1,1,1,thermal problem
+Schmid,thermal2,1228045,1228045,8580313,1,0,1,1,1,1,thermal problem
+MathWorks,Kaufhold,8765,8765,42471,1,0,0,0,1,0.778437073518068,counter-example problem
+Bindel,ted_A,10605,10605,424587,1,0,1,0,0.5657922767749357,0.1057079149564699,thermal problem
+Bindel,ted_B,10605,10605,144579,1,0,1,1,1,1,thermal problem
+Bindel,ted_AB,10605,10605,522387,0,0,1,0,0.6415700434950818,0,thermal problem
+Bindel,ted_A_unscaled,10605,10605,424587,1,0,1,0,0.5657922767749357,0.1057079149564699,thermal problem
+Bindel,ted_B_unscaled,10605,10605,144579,1,0,1,1,1,1,thermal problem
+Bindel,ted_AB_unscaled,10605,10605,522387,0,0,1,0,0.6415700434950818,0,thermal problem
+Koutsovasilis,F1,343791,343791,26837113,1,0,1,0,1,1,structural problem
+AMD,G2_circuit,150102,150102,726674,1,0,0,1,1,1,circuit simulation problem
+IBM_EDA,ckt11752_dc_1,49702,49702,333029,1,0,0,0,0.9838102263462359,0.7355387943965807,circuit simulation problem
+IBM_EDA,ckt11752_tr_0,49702,49702,332807,1,0,0,0,0.9838102263462359,0.7360237367761078,circuit simulation problem
+Sandia,ASIC_100k,99340,99340,940621,1,0,0,0,1,0.002631466347182405,circuit simulation problem
+Sandia,ASIC_100ks,99190,99190,578890,1,0,0,0,1,0.0007546383156139254,circuit simulation problem
+Sandia,ASIC_320k,321821,321821,1931828,1,0,0,0,1,0.3578041366837217,circuit simulation problem
+Sandia,ASIC_320ks,321671,321671,1316085,1,0,0,0,1,0.2891089626654492,circuit simulation problem
+Sandia,ASIC_680k,682862,682862,2638997,1,0,0,0,1,0.004444308126428144,circuit simulation problem
+Sandia,ASIC_680ks,682712,682712,1693767,1,0,0,0,1,0.005801860432914134,circuit simulation problem
+AMD,G3_circuit,1585478,1585478,7660826,1,0,0,1,1,1,circuit simulation problem
+GHS_psdef,apache1,80800,80800,542184,1,0,1,1,1,1,structural problem
+GHS_psdef,apache2,715176,715176,4817870,1,0,1,1,1,1,structural problem
+GHS_indef,bloweybl,30003,30003,109999,1,0,1,0,1,1,materials problem
+GHS_indef,bloweybq,10001,10001,49999,1,0,1,1,1,1,materials problem
+GHS_indef,cvxqp3,17500,17500,114962,1,0,0,0,1,1,optimization problem
+GHS_indef,qpband,20000,20000,45000,1,0,0,0,1,1,optimization problem
+Oberwolfach,chipcool0,20082,20082,281150,1,0,1,0,1,0.8688617524936032,model reduction problem
+Oberwolfach,chipcool1,20082,20082,281150,1,0,1,0,1,0.08556391438245974,model reduction problem
+Oberwolfach,filter2D,1668,1668,10750,1,0,1,0,1,1,model reduction problem
+Oberwolfach,filter3D,106437,106437,2707179,1,0,1,0,1,1,model reduction problem
+Oberwolfach,flowmeter0,9669,9669,67391,1,0,1,0,1,1,model reduction problem
+Oberwolfach,flowmeter5,9669,9669,67391,1,0,1,0,1,0.06222930598385364,model reduction problem
+Oberwolfach,gas_sensor,66917,66917,1703365,1,0,1,0,1,1,model reduction problem
+Oberwolfach,gyro,17361,17361,1021159,1,0,1,1,1,1,model reduction problem
+Oberwolfach,inlet,11730,11730,328323,1,0,1,0,0.6083330964361183,9.475888601453601e-05,model reduction problem
+Oberwolfach,LF10000,19998,19998,99982,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LF10,18,18,82,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LFAT5000,19994,19994,79966,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LFAT5,14,14,46,1,0,1,1,1,1,model reduction problem
+Oberwolfach,piston,2025,2025,100015,1,0,1,0,1,0.03275844473925911,model reduction problem
+Oberwolfach,rail_1357,1357,1357,8985,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_20209,20209,20209,139233,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_5177,5177,5177,35185,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_79841,79841,79841,553921,1,0,1,0,1,1,model reduction problem
+Oberwolfach,spiral,1434,1434,18228,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dah,11445,11445,176117,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dal_bci,4257,4257,37465,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dal,4257,4257,37465,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t3dh,79171,79171,4352105,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t3dl,20360,20360,509866,1,0,1,0,1,1,model reduction problem
+Oberwolfach,windscreen,22692,22692,1482390,0,0,1,0,1,0,model reduction problem
+Oberwolfach,bone010,986703,986703,47851783,1,0,1,1,1,1,model reduction problem
+Oberwolfach,boneS01,127224,127224,5516602,1,0,1,1,1,1,model reduction problem
+Oberwolfach,boneS10,914898,914898,40878708,1,0,1,1,1,1,model reduction problem
+Pajek,California,9664,9664,16150,1,1,0,0,0.02241486068111455,0.02241486068111455,directed graph
+Pajek,Cities,55,46,1342,1,0,0,0,0,0,weighted bipartite graph
+Pajek,CSphd,1882,1882,1740,1,1,0,0,0,0,directed graph
+Pajek,dictionary28,52652,52652,178076,1,1,0,0,1,1,undirected graph
+Pajek,divorce,50,9,225,1,1,0,0,0,0,bipartite graph
+Pajek,EAT_RS,23219,23219,325592,1,0,0,0,0.1236262721980876,0.03102501938294547,directed weighted graph
+Pajek,EAT_SR,23219,23219,325589,1,0,0,0,0.1236274132759018,0.03102530574571187,directed weighted graph
+Pajek,EPA,4772,4772,8965,1,1,0,0,0.01249302844394869,0.01249302844394869,directed graph
+Pajek,Erdos02,6927,6927,16944,1,1,0,0,1,1,undirected graph
+Pajek,Erdos971,472,472,2628,1,1,0,0,1,1,undirected graph
+Pajek,Erdos972,5488,5488,14170,1,1,0,0,1,1,undirected graph
+Pajek,Erdos981,485,485,2762,1,1,0,0,1,1,undirected graph
+Pajek,Erdos982,5822,5822,14750,1,1,0,0,1,1,undirected graph
+Pajek,Erdos991,492,492,2834,1,1,0,0,1,1,undirected graph
+Pajek,Erdos992,6100,6100,15030,1,1,0,0,1,1,undirected graph
+Pajek,EVA,8497,8497,6726,1,1,0,0,0.003866745984533016,0.003866745984533016,directed graph
+Pajek,FA,10617,10617,72176,1,0,0,0,0.232333869090506,0.005847142936318794,directed weighted graph
+Pajek,foldoc,13356,13356,120238,1,0,0,0,0.4785009730700777,0.459472047106572,directed weighted graph
+Pajek,football,35,35,118,1,0,0,0,0,0,directed weighted graph
+Pajek,GD00_a,352,352,458,1,1,0,0,0,0,directed graph
+Pajek,GD00_c,638,638,1041,1,0,0,0,0.02133850630455868,0.01551891367604268,directed multigraph
+Pajek,GD01_a,311,311,645,1,0,0,0,0.01550387596899225,0.01550387596899225,directed weighted graph
+Pajek,GD01_A,953,953,645,1,0,0,0,0.01550387596899225,0.01550387596899225,directed multigraph
+Pajek,GD01_b,18,18,37,1,1,0,0,0.5142857142857142,0.5142857142857142,directed graph
+Pajek,GD01_c,33,33,135,1,0,0,0,0,0,directed multigraph
+Pajek,GD02_a,23,23,87,1,1,0,0,0.6436781609195402,0.6436781609195402,directed graph
+Pajek,GD02_b,80,80,232,1,1,0,0,0,0,directed graph
+Pajek,GD06_Java,1538,1538,8032,1,1,0,0,0.05353585657370518,0.05353585657370518,directed graph
+Pajek,GD06_theory,101,101,380,1,1,0,0,1,1,undirected graph
+Pajek,GD95_a,36,36,57,1,1,0,0,0.03508771929824561,0.03508771929824561,directed graph
+Pajek,GD95_b,73,73,96,1,1,0,0,0,0,directed graph
+Pajek,GD95_c,62,62,287,1,1,0,0,0.9965156794425087,0.9965156794425087,directed graph
+Pajek,GD96_a,1096,1096,1677,1,0,0,0,0,0,directed multigraph
+Pajek,GD96_b,111,111,193,1,1,0,0,0,0,directed graph
+Pajek,GD96_c,65,65,250,1,1,0,0,1,1,undirected graph
+Pajek,GD96_d,180,180,229,1,1,0,0,0.008733624454148471,0.008733624454148471,directed graph
+Pajek,GD97_a,84,84,332,1,1,0,0,1,1,directed graph
+Pajek,GD97_b,47,47,264,1,0,0,0,1,1,undirected weighted graph
+Pajek,GD97_c,452,452,460,1,0,0,0,0,0,directed multigraph
+Pajek,GD98_a,38,38,50,1,1,0,0,0.16,0.16,directed graph
+Pajek,GD98_b,121,121,207,1,1,0,0,0.7246376811594203,0.7246376811594203,directed graph
+Pajek,GD98_c,112,112,336,1,1,0,0,1,1,undirected graph
+Pajek,GD99_b,64,64,252,1,0,0,0,1,1,undirected multigraph
+Pajek,GD99_c,105,105,149,1,1,0,0,0.3892617449664429,0.3892617449664429,directed graph
+Pajek,geom,7343,7343,23796,1,0,0,0,1,1,undirected weighted graph
+Pajek,GlossGT,72,72,122,1,1,0,0,0.06557377049180328,0.06557377049180328,directed graph
+Pajek,HEP-th,27240,27240,342437,1,1,0,0,0.002774548916757691,0.002774548916757691,directed graph
+Pajek,HEP-th-new,27770,27770,352807,1,1,0,0,0.002738343613933237,0.002738343613933237,directed graph
+Pajek,IMDB,428440,896308,3782463,1,1,0,0,0,0,bipartite graph
+Pajek,internet,124651,124651,207214,1,0,0,0,0.01444913320583093,0.002245819852432203,directed weighted graph
+Pajek,Journals,124,124,12068,1,0,0,1,1,1,undirected weighted graph
+Pajek,Kohonen,4470,4470,12731,1,1,0,0,0.001728336868567837,0.001728336868567837,directed graph
+Pajek,Lederberg,8843,8843,41601,1,0,0,0,0.003029210241615579,0.003029210241615579,directed multigraph
+Barabasi,NotreDame_actors,392400,127823,1470404,1,1,0,0,0,0,bipartite graph
+Barabasi,NotreDame_www,325729,325729,929849,1,1,0,0,0.3315875213545298,0.3315875213545298,directed graph
+Barabasi,NotreDame_yeast,2114,2114,4480,1,1,0,0,1,1,undirected graph
+Pajek,ODLIS,2909,2909,18246,1,0,0,0,0.2043747601556932,0.1997697494654898,directed multigraph
+Pajek,patents_main,240547,240547,560943,1,0,0,0,0,0,directed weighted graph
+Pajek,patents,3774768,3774768,14970767,1,1,0,0,0,0,directed graph
+Pajek,Ragusa16,24,24,81,1,0,0,0,0.3661971830985916,0.1971830985915493,directed weighted graph
+Pajek,Ragusa18,23,23,64,1,0,0,0,0.3278688524590164,0.1967213114754098,directed weighted graph
+Pajek,Reuters911,13332,13332,296076,1,0,0,0,1,1,undirected weighted graph sequence
+Pajek,Roget,1022,1022,5075,1,1,0,0,0.5620811982656682,0.5620811982656682,directed graph
+Pajek,Sandi_authors,86,86,248,1,0,0,0,1,1,undirected weighted graph
+Pajek,Sandi_sandi,314,360,613,1,1,0,0,0,0,bipartite graph
+Pajek,SciMet,3084,3084,10413,1,0,0,0,0.002497118709181713,0.002497118709181713,directed multigraph
+Pajek,SmaGri,1059,1059,4919,1,0,0,0,0.0008133387555917039,0.0008133387555917039,directed multigraph
+Pajek,SmallW,396,396,994,1,0,0,0,0,0,directed multigraph
+Pajek,Stranke94,10,10,90,1,0,0,0,1,1,undirected weighted graph
+Pajek,Tina_AskCal,11,11,29,1,1,0,0,0.2758620689655172,0.2758620689655172,directed graph
+Pajek,Tina_AskCog,11,11,36,1,1,0,0,0.5,0.5,directed graph
+Pajek,Tina_DisCal,11,11,41,1,1,0,0,0.4390243902439024,0.4390243902439024,directed graph
+Pajek,Tina_DisCog,11,11,48,1,1,0,0,0.5,0.5,directed graph
+Pajek,USAir97,332,332,4252,1,0,0,0,1,1,undirected weighted graph
+Pajek,USpowerGrid,4941,4941,13188,1,1,0,0,1,1,undirected graph
+Pajek,Wordnet3,82670,82670,132964,1,0,0,0,0.1765463136851033,0.1741230992912098,directed weighted graph
+Pajek,WorldCities,315,100,7518,1,0,0,0,0,0,weighted bipartite graph
+Pajek,yeast,2361,2361,13828,1,1,0,0,1,1,undirected graph
+Pajek,Zewail,6752,6752,54233,1,0,0,0,0.001843929783153858,0.001843929783153858,directed multigraph
+Zitney,extr1b,2836,2836,10965,1,0,0,0,0.003859310586790632,0,chemical process simulation problem sequence
+Zitney,hydr1c,5308,5308,22592,1,0,0,0,0.004126315789473685,0.0006197432492253209,chemical process simulation problem sequence
+Schenk_IBMNA,c-18,2169,2169,15145,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-19,2327,2327,21817,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-20,2921,2921,20445,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-21,3509,3509,32145,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-22,3792,3792,28870,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-23,3969,3969,31079,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-24,4119,4119,35699,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-25,3797,3797,49635,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-26,4307,4307,34537,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-27,4563,4563,30927,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-28,4598,4598,30590,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-29,5033,5033,43731,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-30,5321,5321,65693,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-31,5339,5339,78571,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-32,5975,5975,54471,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-33,6317,6317,56123,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-34,6611,6611,64333,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-35,6537,6537,62891,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-36,7479,7479,65941,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-37,8204,8204,74676,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-38,8127,8127,77689,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-39,9271,9271,116587,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-40,9941,9941,81501,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-41,9769,9769,101635,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-42,10471,10471,110285,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-43,11125,11125,123659,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-44,10728,10728,85000,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-45,13206,13206,174452,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-46,14913,14913,130397,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-47,15343,15343,211401,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-48,18354,18354,166080,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-49,21132,21132,157040,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-50,22401,22401,180245,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-51,23196,23196,203048,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-52,23948,23948,202708,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-53,30235,30235,355139,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-54,31793,31793,385987,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-56,35910,35910,380240,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-57,37833,37833,403373,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-60,43640,43640,298570,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-61,43618,43618,310016,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-65,48066,48066,360428,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-big,345241,345241,2340859,1,0,0,0,1,1,optimization problem
+Schenk_AFE,af_0_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_1_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_2_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_3_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_4_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_5_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_shell10,1508065,1508065,52259885,1,0,1,0,1,1,structural problem
+Schenk_IBMNA,c-64b,51035,51035,707601,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-66b,49989,49989,444851,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-67b,57975,57975,530583,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-73b,169422,169422,1279274,1,0,0,0,1,1,subsequent optimization problem
+QCD,conf5_0-4x4-10,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-14,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-18,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-22,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-26,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-4x4-20,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-4x4-30,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-05,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-10,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-15,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-20,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-20,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-30,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-80,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+Cylshell,s1rmq4m1,5489,5489,262411,1,0,1,1,1,1,structural problem
+Cylshell,s2rmq4m1,5489,5489,263351,1,0,1,1,1,1,structural problem
+Cylshell,s3rmq4m1,5489,5489,262943,1,0,1,1,1,1,structural problem
+Cylshell,s1rmt3m1,5489,5489,217651,1,0,1,1,1,1,structural problem
+Cylshell,s2rmt3m1,5489,5489,217681,1,0,1,1,1,1,structural problem
+Cylshell,s3rmt3m1,5489,5489,217669,1,0,1,1,1,1,structural problem
+Cylshell,s3rmt3m3,5357,5357,207123,1,0,1,1,1,1,structural problem
+Bai,cryg10000,10000,10000,49699,1,0,1,0,0.9974558553112169,0,materials problem
+Bai,cryg2500,2500,2500,12349,1,0,1,0,0.9948218093207433,0,materials problem
+Bai,dw2048,2048,2048,10114,1,0,1,0,0.9848747830399207,0.9481775353334987,electromagnetics problem
+Bai,dw8192,8192,8192,41746,1,0,1,0,0.9626274065685164,0.9154199201287477,electromagnetics problem
+Bai,dwa512,512,512,2480,1,0,1,0,0.9796747967479674,0.9146341463414634,electromagnetics problem
+Bai,dwb512,512,512,2500,1,0,1,0,0.9698189134808853,0.8832997987927566,electromagnetics problem
+Bai,dwg961a,961,961,3405,0,0,1,0,1,0.36,electromagnetics problem
+Bai,dwg961b,961,961,10591,0,0,1,0,1,0.3476635514018692,electromagnetics problem
+Bai,mhd1280a,1280,1280,47906,0,0,1,0,0.8978403914290535,0.3060992070187278,electromagnetics problem
+Bai,mhd1280b,1280,1280,22778,0,0,1,1,1,1,electromagnetics problem
+Bai,mhd3200a,3200,3200,68026,1,0,1,0,0.7676029990571827,0.2674009667619461,electromagnetics problem
+Bai,mhd3200b,3200,3200,18316,1,0,1,1,1,1,electromagnetics problem
+Bai,mhd4800a,4800,4800,102252,1,0,1,0,0.7677879876950033,0.2677033659541848,electromagnetics problem
+Bai,mhd4800b,4800,4800,27520,1,0,1,1,1,1,electromagnetics problem
+Bai,qh1484,1484,1484,6110,1,0,0,0,1,0.05377207062600321,power network problem
+Bai,qh768,768,768,2934,1,0,0,0,0.9347300564061241,0,power network problem
+Bai,rdb1250,1250,1250,7300,1,0,1,0,1,0.7933884297520661,computational fluid dynamics problem
+Bai,rdb1250l,1250,1250,7300,1,0,1,0,1,0.7933884297520661,computational fluid dynamics problem
+Bai,rdb200,200,200,1120,1,0,1,0,1,0.7826086956521739,computational fluid dynamics problem
+Bai,rdb200l,200,200,1120,1,0,1,0,1,0.7826086956521739,computational fluid dynamics problem
+Bai,rdb2048_noL,2048,2048,12032,1,0,1,0,1,0.7948717948717948,computational fluid dynamics problem
+Bai,rdb3200l,3200,3200,18880,1,0,1,0,1,0.7959183673469388,computational fluid dynamics problem
+Bai,rdb450,450,450,2580,1,0,1,0,1,0.7887323943661971,computational fluid dynamics problem
+Bai,rdb450l,450,450,2580,1,0,1,0,1,0.7887323943661971,computational fluid dynamics problem
+Bai,rdb800l,800,800,4640,1,0,1,0,1,0.7916666666666666,computational fluid dynamics problem
+Bai,tols1090,1090,1090,3546,1,0,1,0,0.3178758414360509,0,computational fluid dynamics problem
+Bai,tols2000,2000,2000,5184,1,0,1,0,0.3387276785714285,0,computational fluid dynamics problem
+Bai,tols340,340,340,2196,1,0,1,0,0.2858627858627859,0,computational fluid dynamics problem
+Bai,tols4000,4000,4000,8784,1,0,1,0,0.3606733524355301,0,computational fluid dynamics problem
+Bai,tols90,90,90,1746,1,0,1,0,0.2688172043010753,0,computational fluid dynamics problem
+POLYFLOW,invextr1_new,30412,30412,1793881,1,0,1,0,0.971442083756505,0.7213486599424203,computational fluid dynamics problem
+POLYFLOW,mixtank_new,29957,29957,1990919,1,0,1,0,1,0.9890905426943581,computational fluid dynamics problem
+INPRO,msdoor,415863,415863,19173163,1,0,1,1,1,1,structural problem
+Mittelmann,nug08-3rd,19728,29856,148416,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-30,49944,158489,340635,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-40,66844,217531,466800,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-50,83060,275814,590833,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-60,99431,336421,719557,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-70,114944,390005,833465,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-80,129181,434580,927826,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-90,142823,475448,1014136,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-100,156243,514577,1096002,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail507,507,63516,409856,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail516,516,47827,315412,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail582,582,56097,402290,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail2586,2586,923269,8011362,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail4284,4284,1096894,11284032,1,0,0,0,0,0,linear programming problem
+Mittelmann,sgpf5y6,246077,312540,831976,1,0,0,0,0,0,linear programming problem
+Mittelmann,stormG2_1000,528185,1377306,3459881,1,0,0,0,0,0,linear programming problem
+Mittelmann,watson_1,201155,386992,1055093,1,0,0,0,0,0,linear programming problem
+Mittelmann,watson_2,352013,677224,1846391,1,0,0,0,0,0,linear programming problem
+Mittelmann,cont11_l,1468599,1961394,5382999,1,0,0,0,0,0,linear programming problem
+Mittelmann,cont1_l,1918399,1921596,7031999,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome11,12142,24460,71264,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome12,24284,48920,142528,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome13,48568,97840,285056,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome20,33874,108175,232647,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome21,67748,216350,465294,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos,479119,515905,1526794,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos1,131581,133473,599590,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos2,132568,134128,685087,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos3,512209,518832,2055024,1,0,0,0,0,0,linear programming problem
+Mittelmann,spal_004,10203,321696,46168124,1,0,0,0,0,0,linear programming problem
+Meszaros,gams10am,114,171,407,1,0,0,0,0,0,linear programming problem
+Meszaros,gams30am,354,531,1287,1,0,0,0,0,0,linear programming problem
+Meszaros,gams60am,714,1071,2607,1,0,0,0,0,0,linear programming problem
+Meszaros,gas11,459,862,2166,1,0,0,0,0,0,linear programming problem
+Meszaros,aa01,823,8904,72965,1,1,0,0,0,0,linear programming problem
+Meszaros,aa03,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aa3,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aa4,426,7195,52121,1,1,0,0,0,0,linear programming problem
+Meszaros,aa5,801,8308,65953,1,1,0,0,0,0,linear programming problem
+Meszaros,aa6,646,7292,51728,1,1,0,0,0,0,linear programming problem
+Meszaros,air02,50,6774,61555,1,1,0,0,0,0,linear programming problem
+Meszaros,air03,124,10757,91028,1,1,0,0,0,0,linear programming problem
+Meszaros,air04,823,8904,72965,1,1,0,0,0,0,linear programming problem
+Meszaros,air05,426,7195,52121,1,1,0,0,0,0,linear programming problem
+Meszaros,air06,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aircraft,3754,7517,20267,1,0,0,0,0,0,linear programming problem
+Meszaros,bas1lp,5411,9825,587775,1,0,0,0,0,0,linear programming problem
+Meszaros,baxter,27441,30733,111576,1,0,0,0,0,0,linear programming problem
+Meszaros,car4,16384,33052,63724,1,0,0,0,0,0,linear programming problem
+Meszaros,cari,400,1200,152800,1,0,0,0,0,0,linear programming problem
+Meszaros,ch,3700,8291,24102,1,0,0,0,0,0,linear programming problem
+Meszaros,co5,5774,12325,57993,1,0,0,0,0,0,linear programming problem
+Meszaros,co9,10789,22924,109651,1,0,0,0,0,0,linear programming problem
+Meszaros,complex,1023,1408,46463,1,0,0,0,0,0,linear programming problem
+Meszaros,cq5,5048,11748,51571,1,0,0,0,0,0,linear programming problem
+Meszaros,cq9,9278,21534,96653,1,0,0,0,0,0,linear programming problem
+Meszaros,cr42,905,1513,6614,1,0,0,0,0,0,linear programming problem
+Meszaros,crew1,135,6469,46950,1,1,0,0,0,0,linear programming problem
+Meszaros,dano3mip,3202,15851,81633,1,0,0,0,0,0,linear programming problem
+Meszaros,dbic1,43200,226317,1081843,1,0,0,0,0,0,linear programming problem
+Meszaros,dbir1,18804,45775,1077025,1,0,0,0,0,0,linear programming problem
+Meszaros,dbir2,18906,45877,1158159,1,0,0,0,0,0,linear programming problem
+Meszaros,df2177,630,10358,22336,1,1,0,0,0,0,linear programming problem
+Meszaros,e18,24617,38602,156466,1,0,0,0,0,0,linear programming problem
+Meszaros,ex3sta1,17443,17516,68779,1,0,0,0,0,0,linear programming problem
+Meszaros,farm,7,17,41,1,0,0,0,0,0,linear programming problem
+Meszaros,gams10a,114,171,407,1,0,0,0,0,0,linear programming problem
+Meszaros,gams30a,354,531,1287,1,0,0,0,0,0,linear programming problem
+Meszaros,ge,10099,16369,44825,1,0,0,0,0,0,linear programming problem
+Meszaros,iiasa,669,3639,7317,1,0,0,0,0,0,linear programming problem
+Meszaros,jendrec1,2109,4228,89608,1,0,0,0,0,0,linear programming problem
+Meszaros,kl02,71,36699,212536,1,1,0,0,0,0,linear programming problem
+Meszaros,l9,244,1483,4659,1,0,0,0,0,0,linear programming problem
+Meszaros,lp22,2958,16392,68518,1,0,0,0,0,0,linear programming problem
+Meszaros,lpl2,3294,10881,32232,1,0,0,0,0,0,linear programming problem
+Meszaros,lpl3,10828,33686,100525,1,0,0,0,0,0,linear programming problem
+Meszaros,mod2,34774,66409,199810,1,0,0,0,0,0,linear programming problem
+Meszaros,model1,362,798,3028,1,0,0,0,0,0,linear programming problem
+Meszaros,model2,379,1321,7607,1,0,0,0,0,0,linear programming problem
+Meszaros,model3,1609,4578,23974,1,0,0,0,0,0,linear programming problem
+Meszaros,model4,1337,4962,45753,1,0,0,0,0,0,linear programming problem
+Meszaros,model5,1888,11802,89925,1,0,0,0,0,0,linear programming problem
+Meszaros,model6,2096,5289,27628,1,0,0,0,0,0,linear programming problem
+Meszaros,model7,3358,9582,51027,1,0,0,0,0,0,linear programming problem
+Meszaros,model8,2896,6464,25277,1,0,0,0,0,0,linear programming problem
+Meszaros,model9,2879,10939,55956,1,0,0,0,0,0,linear programming problem
+Meszaros,model10,4400,16819,150372,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsafm,334,2348,2826,1,0,0,0,0,0,linear programming problem
+Meszaros,nemscem,651,1712,3840,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsemm1,3945,75352,1053986,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsemm2,6943,48878,182012,1,0,0,0,0,0,linear programming problem
+Meszaros,nemspmm1,2372,8903,55867,1,0,0,0,0,0,linear programming problem
+Meszaros,nemspmm2,2301,8734,68225,1,0,0,0,0,0,linear programming problem
+Meszaros,nemswrld,7138,28550,192283,1,0,0,0,0,0,linear programming problem
+Meszaros,nl,7039,15325,47035,1,0,0,0,0,0,linear programming problem
+Meszaros,nw14,73,123409,904910,1,1,0,0,0,0,linear programming problem
+Meszaros,p0033,15,48,113,1,0,0,0,0,0,linear programming problem
+Meszaros,p0040,23,63,133,1,0,0,0,0,0,linear programming problem
+Meszaros,p010,10090,19090,118000,1,0,0,0,0,0,linear programming problem
+Meszaros,p0201,133,334,2056,1,0,0,0,0,0,linear programming problem
+Meszaros,p0282,241,523,2207,1,0,0,0,0,0,linear programming problem
+Meszaros,p0291,252,543,2283,1,0,0,0,0,0,linear programming problem
+Meszaros,p0548,176,724,1887,1,0,0,0,0,0,linear programming problem
+Meszaros,p05,5090,9590,59045,1,0,0,0,0,0,linear programming problem
+Meszaros,p2756,755,3511,9692,1,0,0,0,0,0,linear programming problem
+Meszaros,p6000,2095,7967,19826,1,0,0,0,0,0,linear programming problem
+Meszaros,pcb1000,1565,2820,20463,1,0,0,0,0,0,linear programming problem
+Meszaros,pcb3000,3960,7732,57479,1,0,0,0,0,0,linear programming problem
+Meszaros,pf2177,9728,10178,30984,1,1,0,0,0,0,linear programming problem
+Meszaros,primagaz,1554,10836,21665,1,0,0,0,0,0,linear programming problem
+Meszaros,problem,12,46,86,1,0,0,0,0,0,linear programming problem
+Meszaros,progas,1650,1900,8897,1,0,0,0,0,0,linear programming problem
+Meszaros,qiulp,1192,1900,4492,1,0,0,0,0,0,linear programming problem
+Meszaros,r05,5190,9690,104145,1,0,0,0,0,0,linear programming problem
+Meszaros,refine,29,62,153,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfddd,4050,61521,264627,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfdual,8052,74970,282031,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfprim,58866,62716,320591,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen1,520,1544,23794,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen2,1032,3080,47536,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen7,264,776,8034,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen8,520,1544,16058,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen10,2056,6152,64192,1,0,0,0,0,0,linear programming problem
+Meszaros,route,20894,43019,206782,1,0,0,0,0,0,linear programming problem
+Meszaros,seymourl,4944,6316,38493,1,0,0,0,0,0,linear programming problem
+Meszaros,slptsk,2861,3347,72465,1,0,0,0,0,0,linear programming problem
+Meszaros,south31,18425,36321,112398,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v1,5995,197472,588798,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v2,29089,957432,2852184,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v3,33841,1113780,3317736,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v4,3173,63076,491336,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v5,2307,75779,233921,1,0,0,0,0,0,linear programming problem
+Meszaros,t0331-4l,664,46915,430982,1,1,0,0,0,0,linear programming problem
+Meszaros,testbig,17613,31223,61639,1,0,0,0,0,0,linear programming problem
+Meszaros,ulevimin,6590,46937,164538,1,0,0,0,0,0,linear programming problem
+Meszaros,us04,163,28016,297538,1,1,0,0,0,0,linear programming problem
+Meszaros,world,34506,67147,198883,1,0,0,0,0,0,linear programming problem
+Meszaros,zed,116,142,666,1,0,0,0,0,0,linear programming problem
+Meszaros,de063155,852,1848,4913,1,0,0,0,0,0,linear programming problem
+Meszaros,de063157,936,1908,5119,1,0,0,0,0,0,linear programming problem
+Meszaros,de080285,936,1908,5082,1,0,0,0,0,0,linear programming problem
+Meszaros,gen1,769,2561,63086,1,0,0,0,0,0,linear programming problem
+Meszaros,gen2,1121,3264,81855,1,0,0,0,0,0,linear programming problem
+Meszaros,gen4,1537,4298,107103,1,0,0,0,0,0,linear programming problem
+Meszaros,gen,769,2561,63086,1,0,0,0,0,0,linear programming problem
+Meszaros,iprob,3001,3001,9000,1,0,0,0,1,0.5,linear programming problem
+Meszaros,l30,2701,16281,52070,1,0,0,0,0,0,linear programming problem
+Meszaros,stoch_aircraft,3754,7517,20267,1,0,0,0,0,0,linear programming problem
+Meszaros,cep1,1521,4769,8233,1,0,0,0,0,0,linear programming problem
+Meszaros,deter0,1923,5468,11173,1,0,0,0,0,0,linear programming problem
+Meszaros,deter1,5527,15737,32187,1,0,0,0,0,0,linear programming problem
+Meszaros,deter2,6095,17313,35731,1,0,0,0,0,0,linear programming problem
+Meszaros,deter3,7647,21777,44547,1,0,0,0,0,0,linear programming problem
+Meszaros,deter4,3235,9133,19231,1,0,0,0,0,0,linear programming problem
+Meszaros,deter5,5103,14529,29715,1,0,0,0,0,0,linear programming problem
+Meszaros,deter6,4255,12113,24771,1,0,0,0,0,0,linear programming problem
+Meszaros,deter7,6375,18153,37131,1,0,0,0,0,0,linear programming problem
+Meszaros,deter8,3831,10905,22299,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm2-6,1520,2845,12812,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm2-16,3900,7335,32972,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm3_6,6200,12625,57722,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm3_16,41340,85575,392252,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm4_6,22400,47185,265442,1,0,0,0,0,0,linear programming problem
+Meszaros,pgp2,4034,13254,22474,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-125,66185,172431,433256,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-27,14441,37485,94274,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-8,4409,11322,28553,1,0,0,0,0,0,linear programming problem
+Meszaros,degme,185501,659415,8127528,1,0,0,0,0,0,linear programming problem
+Meszaros,karted,46502,133115,1770349,1,0,0,0,0,0,linear programming problem
+Meszaros,tp-6,142752,1014301,11537419,1,0,0,0,0,0,linear programming problem
+Meszaros,ts-palko,22002,47235,1076903,1,0,0,0,0,0,linear programming problem
+Meszaros,delf,3170,6654,15397,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,kleemin,8,16,44,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,large,4282,8617,20635,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsct,23003,37563,697738,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsic,465,897,3449,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsir,4453,10057,154939,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,plddb,3069,5049,10839,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,rat,3136,9408,268908,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,small,677,1400,3207,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,pltexpa,26894,70364,143059,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sc205-2r,35213,62423,123239,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2b,9743,13847,35885,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2c,2447,3479,9005,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2r,32847,46679,120141,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scfxm1-2b,19036,33047,111052,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scfxm1-2r,37980,65943,221388,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2b,1820,3499,7367,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2c,1820,3499,7367,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2r,14364,27691,58439,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2b,5130,35910,112770,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2c,5130,35910,112770,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2r,8650,60550,190210,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2b,15390,33858,99454,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2c,3390,7458,21854,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2r,28830,63426,186366,1,0,0,0,0,0,linear programming problem sequence
+Gleich,wb-cs-stanford,9914,9914,36854,1,1,0,0,0.4572071438616228,0.4572071438616228,directed graph
+Gleich,wb-edu,9845725,9845725,57156537,1,1,0,0,0.3281596169311674,0.3281596169311674,directed graph
+Gleich,wikipedia-20051105,1634989,1634989,19753078,1,1,0,0,0.1211282592272251,0.1211282592272251,directed graph
+Gleich,wikipedia-20060925,2983494,2983494,37269096,1,1,0,0,0.1182841447575249,0.1182841447575249,directed graph
+Gleich,wikipedia-20061104,3148440,3148440,39383235,1,1,0,0,0.1179357318284389,0.1179357318284389,directed graph
+Gleich,wikipedia-20070206,3566907,3566907,45030389,1,1,0,0,0.1171832378930545,0.1171832378930545,directed graph
+UTEP,Dubcova1,16129,16129,253009,1,0,1,1,1,1,2D/3D problem
+UTEP,Dubcova2,65025,65025,1030225,1,0,1,1,1,1,2D/3D problem
+UTEP,Dubcova3,146689,146689,3636643,1,0,1,1,1,1,2D/3D problem
+BenElechi,BenElechi1,245874,245874,13150496,1,0,1,1,1,1,2D/3D problem
+Botonakis,FEM_3D_thermal1,17880,17880,430740,1,0,1,0,1,0.950733904955675,thermal problem
+Botonakis,FEM_3D_thermal2,147900,147900,3489300,1,0,1,0,1,0.9502082959238642,thermal problem
+Wissgott,parabolic_fem,525825,525825,3674625,1,0,1,1,1,1,computational fluid dynamics problem
+Watson,chem_master1,40401,40401,201201,1,0,1,0,1,0,2D/3D problem
+Watson,Baumann,112211,112211,748331,1,0,1,0,1,0,2D/3D problem
+Sinclair,3Dspectralwave,680943,680943,30290827,0,0,1,0,1,1,materials problem
+Sinclair,3Dspectralwave2,292008,292008,12935272,0,0,1,0,1,1,materials problem
+QLi,crashbasis,160000,160000,1750416,1,0,0,0,0.5503013048158469,0.0002439613283568576,optimization problem
+QLi,majorbasis,160000,160000,1750416,1,0,0,0,0.5503013048158469,0.0002376736652548767,optimization problem
+Springer,ESOC,327062,37830,6019939,1,0,0,0,0,0,least squares problem
+Koutsovasilis,F2,71505,71505,5294285,1,0,1,0,1,1,structural problem
+Szczerba,Ill_Stokes,20896,20896,191368,1,0,1,0,0.9897436481194791,0.3299904380293234,computational fluid dynamics problem
+Rajat,Raj1,263743,263743,1300261,1,0,0,0,0.998585875116119,0.5762090211971218,circuit simulation problem
+Muite,Chebyshev1,261,261,2319,1,0,1,0,0.5014577259475219,0,structural problem
+Muite,Chebyshev2,2053,2053,18447,1,0,1,0,0.5001829937782115,0,structural problem
+Muite,Chebyshev3,4101,4101,36879,1,0,1,0,0.5000915248032217,0,structural problem
+Muite,Chebyshev4,68121,68121,5377761,1,0,1,0,0.3020408163265306,0.0002369275506437348,structural problem
+Quaglino,viscoplastic1,4326,4326,61166,1,0,1,0,0.7408163265306122,0,materials problem
+Quaglino,viscoplastic2,32769,32769,381326,1,0,1,0,0.5699899872904575,0,materials problem
+YCheng,psse0,26722,11028,102432,1,0,0,0,0,0,power network problem
+YCheng,psse1,14318,11028,57376,1,0,0,0,0,0,power network problem
+YCheng,psse2,28634,11028,115262,1,0,0,0,0,0,power network problem
+Dehghani,light_in_tissue,29282,29282,406084,0,0,1,0,1,0,electromagnetics problem
+HVDC,hvdc1,24842,24842,158426,1,0,0,0,0.9817003233707516,0.09899271099935641,power network problem
+HVDC,hvdc2,189860,189860,1339638,1,0,0,0,0.9885955341075688,0.06323365458033522,power network problem
+Zaoui,kkt_power,2063494,2063494,12771361,1,0,0,0,1,1,optimization problem
+Rost,RFdevice,74104,74104,365580,0,0,1,0,0.0001203589980660497,0.0001148881345175929,semiconductor device problem
+Lee,fem_filter,74062,74062,1731206,0,0,1,0,1,0.6131971633123011,electromagnetics problem
+Mancktelow,viscorocks,37762,37762,1133641,1,0,1,0,1,0.279507135368047,materials problem
+Rudnyi,water_tank,60740,60740,2035281,1,0,1,0,0.9691204183655847,0.9180067671423384,computational fluid dynamics problem
+Rucci,Rucci1,1977885,109900,7791168,1,0,0,0,0,0,least squares problem
+McRae,ecology1,1000000,1000000,4996000,1,0,1,0,1,1,2D/3D problem
+McRae,ecology2,999999,999999,4995991,1,0,1,1,1,1,2D/3D problem
+NYPA,Maragal_1,32,14,234,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_2,555,350,4357,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_3,1690,860,18391,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_4,1964,1034,26719,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_5,4654,3320,93091,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_6,21255,10152,537694,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_7,46845,26564,1200537,1,0,0,0,0,0,least squares problem
+Marini,eurqsa,7245,7245,46142,1,0,0,0,1,1,economic problem
+Castrillon,denormal,89400,89400,1156224,1,0,0,1,1,1,counter-example problem
+QLi,largebasis,440020,440020,5240084,1,0,0,0,1,0,optimization problem
+MathWorks,QRpivot,660,749,3808,1,0,0,0,0,0,counter-example problem
+Luong,photogrammetry,1388,390,11816,1,0,1,0,0,0,computer graphics/vision problem
+YZhou,circuit204,1020,1020,5883,1,0,0,0,0.4379791625712601,0.3727147631216827,circuit simulation problem
+CEMW,t2em,921632,921632,4590832,1,0,1,0,0.9988182710127548,0.9988182710127548,electromagnetics problem
+CEMW,tmt_unsym,917825,917825,4584801,1,0,1,0,1,0,electromagnetics problem
+CEMW,tmt_sym,726713,726713,5080961,1,0,1,1,1,1,electromagnetics problem
+CEMW,vfem,93476,93476,1434636,0,0,1,0,1,0.8209624504160578,electromagnetics problem
+Schenk,nlpkkt80,1062400,1062400,28192672,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt120,3542400,3542400,95117792,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt160,8345600,8345600,225422112,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt200,16240000,16240000,440225632,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt240,27993600,27993600,760648352,1,0,0,0,1,1,optimization problem
+TKK,s4dkt3m2,90449,90449,3753461,1,1,1,0,1,1,structural problem
+TKK,g3rmt3m3,5357,5357,207695,1,1,1,0,1,1,structural problem
+TKK,t520,5563,5563,286341,1,0,1,0,1,1,structural problem
+TKK,smt,25710,25710,3749582,1,0,1,1,1,1,structural problem
+TKK,engine,143571,143571,4706073,1,0,1,0,1,1,structural problem
+TKK,plbuckle,1282,1282,30644,1,0,1,1,1,1,structural problem
+TKK,cbuckle,13681,13681,676515,1,0,1,1,1,1,structural problem
+TKK,cyl6,13681,13681,714241,1,0,1,0,1,1,structural problem
+TKK,tube1,21498,21498,897056,1,1,1,0,1,1,structural problem
+TKK,tube2,21498,21498,897056,1,0,1,0,1,1,structural problem
+TKK,t2d_q4,9801,9801,87025,1,0,1,0,1,0.6937221589143272,structural problem sequence
+TKK,t2d_q9,9801,9801,87025,1,0,1,0,1,0.6937221589143272,structural problem sequence
+Luong,photogrammetry2,4472,936,37056,1,0,1,0,0,0,computer graphics/vision problem
+Um,2cubes_sphere,101492,101492,1647264,1,0,1,1,1,1,electromagnetics problem
+JGD_BIBD,bibd_9_3,36,84,252,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_9_5,36,126,1260,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_11_5,55,462,4620,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_12_4,66,495,2970,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_12_5,66,792,7920,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_13_6,78,1716,25740,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_14_7,91,3432,72072,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_15_3,105,455,1365,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_15_7,105,6435,135135,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_16_8,120,12870,360360,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_3,136,680,2040,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_4b,136,2380,14280,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_4,136,2380,14280,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_8,136,24310,680680,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_18_9,153,48620,1750320,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_19_9,171,92378,3325608,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_20_10,190,184756,8314020,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_22_8,231,319770,8953560,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_49_3,1176,18424,55272,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_81_2,3240,3240,3240,1,1,0,1,1,1,combinatorial problem
+JGD_BIBD,bibd_81_3,3240,85320,255960,1,1,0,0,0,0,combinatorial problem
+JGD_CAG,CAG_mat1916,1916,1916,195985,1,0,0,0,0.3002540333592691,0.2119864584245809,combinatorial problem
+JGD_CAG,CAG_mat364,364,364,13585,1,0,0,0,0.4155510173209288,0.2804628999319265,combinatorial problem
+JGD_CAG,CAG_mat72,72,72,1012,1,0,0,0,0.5574468085106383,0.3340425531914893,combinatorial problem
+JGD_Forest,TF10,99,107,622,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF11,216,236,1607,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF12,488,552,4231,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF13,1121,1302,11185,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF14,2644,3160,29862,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF15,6334,7742,80057,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF16,15437,19321,216173,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF17,38132,48630,586218,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF18,95368,123867,1597545,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF19,241029,317955,4370721,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz1,2240,768,5120,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz2,4032,4480,21504,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz3,1280,2800,11520,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz4,6784,5252,46528,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz5,7382,2882,44056,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz6,7576,3016,45456,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz7,10164,1740,40424,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz8,16728,7176,100368,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz9,19588,4164,97508,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz10,19588,4164,97508,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz11,47104,30144,329728,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-6,30,77,251,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-7,62,150,549,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-8,156,292,1711,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-9,342,540,4570,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-10,652,976,10273,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-11,1227,1692,22110,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-12,2296,2875,46260,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-13,3994,4731,91209,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-14,6735,7621,173337,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-15,11369,11987,323509,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-16,18846,18485,588326,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-17,30162,27944,1035008,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-18,47894,41550,1790490,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_6,469,201,2526,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_7,636,470,5378,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_8,544,637,6153,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_9,340,545,4349,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_10,163,341,2053,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d10,1,60,8,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d11,1019,60,1513,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d12,8899,1019,37519,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d13,47271,8899,356232,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d14,171375,47271,1831183,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d15,460261,171375,6080381,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d16,955128,460261,14488881,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d17,1548650,955128,25978098,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d18,1955309,1548650,35590540,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d19,1911130,1955309,37322725,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d20,1437547,1911130,29893084,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d21,822922,1437547,18174775,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d22,349443,822922,8251000,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d23,105054,349443,2695430,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d24,21074,105054,593892,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d25,2798,21074,81671,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d26,305,2798,7412,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,c8_mat11,4562,5761,2462970,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,c8_mat11_I,4562,5761,2462970,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,f855_mat9,2456,2511,171214,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,f855_mat9_I,2456,2511,171214,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,HFE18_96_in,2372,4096,933343,1,1,0,0,0,0,combinatorial problem
+JGD_Groebner,rkat7_mat5,694,738,38114,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,robot24c1_mat5,404,302,15118,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,robot24c1_mat5_J,302,404,15118,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch3-3-b1,18,9,36,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch3-3-b2,6,18,18,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b1,72,16,144,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b2,96,72,288,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b3,24,96,96,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b1,200,25,400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b2,600,200,1800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b3,600,600,2400,1,0,0,0,0.02168473728106756,0.01417848206839033,combinatorial problem
+JGD_Homology,ch5-5-b4,120,600,600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b1,450,36,900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b2,2400,450,7200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b3,5400,2400,21600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b4,4320,5400,21600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b5,720,4320,4320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b1,630,42,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b2,4200,630,12600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b3,12600,4200,50400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b4,15120,12600,75600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b5,5040,15120,30240,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b1,882,49,1764,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b2,7350,882,22050,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b5,35280,52920,211680,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b1,1176,56,2352,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b2,11760,1176,35280,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b3,58800,11760,235200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b4,141120,58800,705600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b5,141120,141120,846720,1,0,0,0,0.0003732057190233348,0.0002054993516141147,combinatorial problem
+JGD_Homology,ch7-9-b1,1512,63,3024,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b2,17640,1512,52920,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b3,105840,17640,423360,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b4,317520,105840,1587600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b5,423360,317520,2540160,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b1,1568,64,3136,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b2,18816,1568,56448,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b3,117600,18816,470400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b4,376320,117600,1881600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b5,564480,376320,3386880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b1,210,21,420,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b13,6300,25605,88200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b14,920,6300,13800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b15,60,920,960,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b2,1330,210,3990,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b3,5970,1330,23880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b4,20058,5970,100290,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,D6-6,120576,23740,146520,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,klein-b1,30,10,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,klein-b2,20,30,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,lutz30-23-b6,1716,3003,12012,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,m133-b3,200200,200200,800800,1,0,0,0,4.495504495504496e-05,2.747252747252747e-05,combinatorial problem
+JGD_Homology,mk10-b1,630,45,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b2,3150,630,9450,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b3,4725,3150,18900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b4,945,4725,4725,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b1,990,55,1980,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b2,6930,990,20790,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b3,17325,6930,69300,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b4,10395,17325,51975,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b4b,9450,17325,47250,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b1,1485,66,2970,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b2,13860,1485,41580,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b3,51975,13860,207900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b4,62370,51975,311850,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b5,10395,62370,62370,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk13-b5,135135,270270,810810,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b1,378,36,756,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b2,1260,378,3780,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b3,945,1260,3780,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b10,30,306,330,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b1,105,15,210,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b3,1365,455,5460,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b4,3003,1365,15015,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b5,4945,3003,29670,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b6,5715,4945,40005,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b7,3990,5715,31920,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b8,1470,3990,13230,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b9,306,1470,3060,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b1,15,6,30,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b2,20,15,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b3,15,20,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b4,6,15,30,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b1,45,10,90,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b2,120,45,360,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b3,210,120,840,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b4,252,210,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b5,210,252,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b6,120,210,840,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b7,30,120,240,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b10,675,2511,7425,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b1,105,105,210,1,0,0,0,0.08571428571428572,0.0761904761904762,combinatorial problem
+JGD_Homology,n3c6-b11,60,675,720,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b3,1365,455,5460,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b4,3003,1365,15015,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b5,5005,3003,30030,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b6,6435,5005,45045,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b7,6435,6435,51480,1,0,0,0,1,0.5333333333333333,combinatorial problem
+JGD_Homology,n3c6-b8,4935,6435,44415,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b9,2511,4935,25110,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b10,120,630,1320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b1,105,15,210,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b11,10,120,120,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b3,1350,455,5400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b4,2852,1350,14260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b5,4340,2852,26040,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b6,4735,4340,33145,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b7,3635,4735,29080,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b8,1895,3635,17055,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b9,630,1895,6300,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b10,132402,186558,1456422,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b11,69235,132402,830820,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b1,210,21,420,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b12,25605,69235,332865,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b13,6300,25605,88200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b14,920,6300,13800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b15,60,920,960,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b2,1330,210,3990,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b3,5970,1330,23880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b4,20058,5970,100290,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b5,51813,20058,310878,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b6,104115,51813,728805,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b7,163215,104115,1305720,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b8,198895,163215,1790055,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b9,186558,198895,1865580,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b1,17160,286,34320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b2,200200,17160,600600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b3,200200,200200,800800,1,0,0,0,7.492516848797264e-05,2.997006739518906e-05,combinatorial problem
+QY,case39,40216,40216,1042160,1,0,0,0,1,1,power network problem sequence
+JGD_Kocay,Trec3,1,2,1,1,1,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec4,2,3,3,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec5,3,7,12,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec6,6,15,40,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec7,11,36,147,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec8,23,84,549,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec9,47,201,2147,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec10,106,478,8612,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec11,235,1138,35705,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec12,551,2726,151219,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec13,1301,6561,654517,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec14,3159,15905,2872265,1,0,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_2_1,85,85,254,1,1,0,0,0.03252032520325204,0.03252032520325204,combinatorial problem
+JGD_Margulies,cat_ears_2_4,1009,2689,7982,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_3_1,204,181,542,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_3_4,5226,13271,39592,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_4_1,377,313,938,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_4_4,19020,44448,132888,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_4_1,121,129,386,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_4_4,1837,5529,16466,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_5_1,211,201,602,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_5_4,5226,14721,43942,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_7_1,463,393,1178,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_7_4,27693,67593,202218,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_8_1,625,513,1538,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_8_4,55081,125361,375266,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_10_4_1,349651,330751,992252,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_6_2_1,601,676,2027,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_8_3_1,15737,15681,47042,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_3_1,21,25,74,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_4_1,36,41,122,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_5_1,57,61,182,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_601,902103,723605,2170814,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_6_1,83,85,254,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_7_1,114,113,338,1,1,0,0,0,0,combinatorial problem
+JGD_Relat,rel3,12,5,18,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel4,66,12,104,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel5,340,35,656,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel6,2340,157,5101,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel7,21924,1045,50636,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel8,345688,12347,821839,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel9,9888048,274669,23667183,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat3,12,5,24,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat4,66,12,172,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat5,340,35,1058,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat6,2340,157,8108,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat7b,21924,1045,81355,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat7,21924,1045,81355,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat8,345688,12347,1334038,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat9,12360060,549336,38955420,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_5,434,115,1832,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_6,970,435,6491,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_7,1270,971,12714,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_8,1132,1271,14966,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_9,815,1133,12395,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_10,460,816,7614,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_11,169,461,2952,1,0,0,0,0,0,combinatorial problem
+JGD_SPG,08blocks,300,300,592,1,0,0,0,0.0273972602739726,0,combinatorial problem
+JGD_SPG,EX1,560,560,8736,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX2,560,560,8736,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX3,2600,2600,71760,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX4,2600,2600,71760,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX5,6545,6545,295680,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX6,6545,6545,295680,1,1,0,0,1,1,combinatorial problem
+JGD_Taha,abtaha2,37932,331,137228,1,0,0,0,0,0,combinatorial problem
+JGD_Taha,abtaha1,14596,209,51307,1,0,0,0,0,0,combinatorial problem
+JGD_Trefethen,Trefethen_20b,19,19,147,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20,20,20,158,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_150,150,150,2040,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_200b,199,199,2873,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_200,200,200,2890,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_300,300,300,4678,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_500,500,500,8478,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_700,700,700,12654,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_2000,2000,2000,41906,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20000b,19999,19999,554435,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20000,20000,20000,554466,1,0,0,1,1,1,combinatorial problem
+QY,case9,14454,14454,147972,1,0,0,0,1,1,power network problem sequence
+FreeFieldTechnologies,mono_500Hz,169410,169410,5033796,0,0,1,0,1,0.820796293715178,acoustics problem
+Freescale,Freescale1,3428755,3428755,17052626,1,0,0,0,0.9061379876258038,0.3945743467477048,circuit simulation problem
+NYPA,Maragal_8,33212,75077,1308415,1,0,0,0,0,0,least squares problem
+Bates,sls,1748122,62729,6804304,1,0,0,0,0,0,least squares problem
+TSOPF,TSOPF_RS_b2383,38120,38120,16171169,1,0,0,0,0.002485718029041526,0.0003350401831305099,power network problem
+TSOPF,TSOPF_FS_b300,29214,29214,4400122,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c1,10798,10798,608540,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c3,30798,30798,1801300,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c4,40798,40798,2398220,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c1,29214,29214,4400122,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c2,56814,56814,8767466,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c3,84414,84414,13135930,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c19,76216,76216,1977600,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c30,120216,120216,3121160,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c7,28216,28216,730080,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b9_c1,2454,2454,25032,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b9_c6,14454,14454,147972,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_RS_b162_c1,5374,5374,205399,1,0,0,0,0.02981942459702805,0.002418331351367556,power network problem
+TSOPF,TSOPF_RS_b162_c3,15374,15374,610299,1,0,0,0,0.02683526094131803,0.0008133934303355415,power network problem
+TSOPF,TSOPF_RS_b162_c4,20374,20374,812749,1,0,0,0,0.02645844479664045,0.0006107347997698388,power network problem
+TSOPF,TSOPF_RS_b2052_c1,25626,25626,6761100,1,0,0,0,0.003886561090908282,0.0002050869579089441,power network problem
+TSOPF,TSOPF_RS_b2383_c1,38120,38120,16171169,1,0,0,0,0.002485718029041526,0.0003350401831305099,power network problem
+TSOPF,TSOPF_RS_b300_c1,14538,14538,1474325,1,0,0,0,0.01034334678703541,0.0003506683588241378,power network problem
+TSOPF,TSOPF_RS_b300_c2,28338,28338,2943887,1,0,0,0,0.00991209710027776,0.0001755931670937033,power network problem
+TSOPF,TSOPF_RS_b300_c3,42138,42138,4413449,1,0,0,0,0.009768063952888569,0.0001171197776188222,power network problem
+TSOPF,TSOPF_RS_b39_c19,38098,38098,684206,1,0,0,0,0.05914025923776359,0.0001300058038305281,power network problem
+TSOPF,TSOPF_RS_b39_c30,60098,60098,1079986,1,0,0,0,0.05903687108113011,8.236061201778597e-05,power network problem
+TSOPF,TSOPF_RS_b39_c7,14098,14098,252446,1,0,0,0,0.05962284731399325,0.0003524007299729407,power network problem
+TSOPF,TSOPF_RS_b678_c1,18696,18696,4396289,1,0,0,0,0.004448301852317109,0.0003256971884064591,power network problem
+TSOPF,TSOPF_RS_b678_c2,35696,35696,8781949,1,0,0,0,0.004170134538170976,0.0001630280691806068,power network problem
+TSOPF,TSOPF_RS_b9_c6,7224,7224,54082,1,0,0,0,0.1544436146377894,0.0002560546249866638,power network problem
+Lee,fem_hifreq_circuit,491100,491100,20239237,0,0,1,0,0.999999037883928,0.4990933575151925,electromagnetics problem
+Buss,connectus,512,394792,1127525,1,1,0,0,0,0,undirected bipartite graph
+Yoshiyasu,image_interp,240000,120000,711683,1,0,1,0,0,0,computer graphics/vision problem
+Yoshiyasu,mesh_deform,234023,9393,853829,1,0,1,0,0,0,computer graphics/vision problem
+Priebel,130bit,584,575,6120,1,1,0,0,0,0,combinatorial problem
+Priebel,145bit,1002,993,11315,1,1,0,0,0,0,combinatorial problem
+Priebel,162bit,3606,3597,37118,1,1,0,0,0,0,combinatorial problem
+Priebel,176bit,7441,7431,82270,1,1,0,0,0,0,combinatorial problem
+Priebel,192bit,13691,13682,154303,1,1,0,0,0,0,combinatorial problem
+Priebel,208bit,24430,24421,299756,1,1,0,0,0,0,combinatorial problem
+MathWorks,TS,2142,2142,45262,1,0,0,0,0.9525732031943213,0.04130434782608695,counter-example problem
+Botonakis,thermomech_TC,102158,102158,711558,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_TK,102158,102158,711558,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_dM,204316,204316,1423116,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_dK,204316,204316,2846228,1,0,1,0,1,0.6652727267221619,thermal problem
+MaxPlanck,shallow_water1,81920,81920,327680,1,0,1,1,1,1,computational fluid dynamics problem
+MaxPlanck,shallow_water2,81920,81920,327680,1,0,1,1,1,1,computational fluid dynamics problem
+Buss,12month1,12471,872622,22624727,1,1,0,0,0,0,undirected bipartite graph
+Clark,tomographic1,73159,59498,647495,1,0,1,0,0,0,computer graphics/vision problem
+Bourchtein,atmosmodd,1270432,1270432,8814880,1,0,1,0,1,0.6690207156308852,computational fluid dynamics problem
+Bourchtein,atmosmodj,1270432,1270432,8814880,1,0,1,0,1,0.6690207156308852,computational fluid dynamics problem
+Bourchtein,atmosmodl,1489752,1489752,10319760,1,0,1,0,1,0.6714503542918647,computational fluid dynamics problem
+Bourchtein,atmosmodm,1489752,1489752,10319760,1,0,1,0,1,0.6714503542918647,computational fluid dynamics problem
+Puri,ABACUS_shell_ud,23412,23412,218484,1,0,1,0,1,0.9753731955380578,model reduction problem
+Puri,ABACUS_shell_ld,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Puri,ABACUS_shell_md,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Puri,ABACUS_shell_hd,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Stevenson,LargeRegFile,2111154,801374,4944201,1,0,0,0,0,0,circuit simulation problem
+Freescale,memchip,2707524,2707524,13343948,1,0,0,0,0.9058013004223939,0.4015860962358702,circuit simulation problem
+Freescale,transient,178866,178866,961368,1,0,0,0,0.9996742983044353,0.243597788123496,circuit simulation problem
+Freescale,circuit5M,5558326,5558326,59524291,1,0,0,0,0.9999998517635799,0.4198865531852634,circuit simulation problem
+Freescale,circuit5M_dc,3523317,3523317,14865409,1,0,0,0,0.9072118240231114,0.7150571517141635,circuit simulation problem
+Grund,poli3,16955,16955,37849,1,0,0,0,0.00507322676366421,0.0005743275581506652,economic problem
+Grund,poli4,33833,33833,73249,1,0,0,0,0.003551857113862391,0.0002029632636492795,economic problem
+Belcastro,human_gene1,22283,22283,24669643,1,0,0,0,1,1,undirected weighted graph
+Belcastro,human_gene2,14340,14340,18068388,1,0,0,0,1,1,undirected weighted graph
+Belcastro,mouse_gene,45101,45101,28967291,1,0,0,0,1,1,undirected weighted graph
+Um,offshore,259789,259789,4242673,1,0,1,1,1,1,electromagnetics problem
+SNAP,soc-Epinions1,75888,75888,508837,1,1,0,0,0.405226035056413,0.405226035056413,directed graph
+SNAP,soc-LiveJournal1,4847571,4847571,68993773,1,1,0,0,0.7484193555024753,0.7484193555024753,directed graph
+SNAP,soc-Slashdot0811,77360,77360,905468,1,1,0,0,0.8669352939826918,0.8669352939826918,directed graph
+SNAP,soc-Slashdot0902,82168,82168,948464,1,1,0,0,0.8410650442849082,0.8410650442849082,directed graph
+SNAP,wiki-Vote,8297,8297,103689,1,1,0,0,0.0564572905515532,0.0564572905515532,directed graph
+SNAP,email-EuAll,265214,265214,420045,1,1,0,0,0.2600511748250413,0.2600511748250413,directed graph
+SNAP,email-Enron,36692,36692,367662,1,1,0,0,1,1,directed graph
+SNAP,wiki-Talk,2394385,2394385,5021410,1,1,0,0,0.1441208744157517,0.1441208744157517,directed graph
+SNAP,cit-HepPh,34546,34546,421578,1,1,0,0,0.003117186276789061,0.003117186276789061,directed graph
+SNAP,cit-HepTh,27770,27770,352807,1,1,0,0,0.002738343613933237,0.002738343613933237,directed graph
+SNAP,cit-Patents,3774768,3774768,16518948,1,1,0,0,0,0,directed graph
+SNAP,ca-AstroPh,18772,18772,396160,1,1,0,0,1,1,undirected graph
+SNAP,ca-CondMat,23133,23133,186936,1,1,0,0,1,1,undirected graph
+SNAP,ca-GrQc,5242,5242,28980,1,1,0,0,1,1,undirected graph
+SNAP,ca-HepPh,12008,12008,237010,1,1,0,0,1,1,undirected graph
+SNAP,ca-HepTh,9877,9877,51971,1,1,0,0,1,1,undirected graph
+SNAP,web-BerkStan,685230,685230,7600595,1,1,0,0,0.2502764586193581,0.2502764586193581,directed graph
+SNAP,web-Google,916428,916428,5105039,1,1,0,0,0.3067510355944391,0.3067510355944391,directed graph
+SNAP,web-NotreDame,325729,325729,1497134,1,1,0,0,0.5165359238309862,0.5165359238309862,directed graph
+SNAP,web-Stanford,281903,281903,2312497,1,1,0,0,0.2766368994208425,0.2766368994208425,directed graph
+SNAP,amazon0302,262111,262111,1234877,1,1,0,0,0.5427018237443891,0.5427018237443891,directed graph
+SNAP,amazon0312,400727,400727,3200440,1,1,0,0,0.5315337891039982,0.5315337891039982,directed graph
+SNAP,amazon0505,410236,410236,3356824,1,1,0,0,0.5465803390347542,0.5465803390347542,directed graph
+SNAP,amazon0601,403394,403394,3387388,1,1,0,0,0.5573497928197183,0.5573497928197183,directed graph
+SNAP,p2p-Gnutella04,10879,10879,39994,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella05,8846,8846,31839,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella06,8717,8717,31525,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella08,6301,6301,20777,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella09,8114,8114,26013,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella24,26518,26518,65369,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella25,22687,22687,54705,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella30,36682,36682,88328,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella31,62586,62586,147892,1,1,0,0,0,0,directed graph
+SNAP,roadNet-CA,1971281,1971281,5533214,1,1,0,0,1,1,undirected graph
+SNAP,roadNet-PA,1090920,1090920,3083796,1,1,0,0,1,1,undirected graph
+SNAP,roadNet-TX,1393383,1393383,3843320,1,1,0,0,1,1,undirected graph
+SNAP,as-735,7716,7716,26467,1,1,0,0,1,1,undirected graph sequence
+SNAP,as-Skitter,1696415,1696415,22190596,1,1,0,0,1,1,undirected graph
+SNAP,as-caida,31379,31379,106762,1,0,0,0,1,0.07869841329311927,directed weighted graph sequence
+SNAP,Oregon-1,11492,11492,46818,1,1,0,0,1,1,undirected graph sequence
+SNAP,Oregon-2,11806,11806,65460,1,1,0,0,1,1,undirected graph sequence
+SNAP,soc-sign-epinions,131828,131828,841372,1,0,0,0,0.3082520316984202,0.3018224331855771,directed weighted graph
+SNAP,soc-sign-Slashdot081106,77357,77357,516575,1,0,0,0,0.1859207278710739,0.1786110438948846,directed weighted graph
+SNAP,soc-sign-Slashdot090216,81871,81871,545671,1,0,0,0,0.175926519826049,0.168574104176326,directed weighted graph
+SNAP,soc-sign-Slashdot090221,82144,82144,549202,1,0,0,0,0.1774246998372184,0.1703271291801559,directed weighted graph
+Dziekonski,gsm_106857,589446,589446,21758924,1,0,1,0,1,1,electromagnetics problem
+Gleich,flickr,820878,820878,9837214,1,1,0,0,0.653017002578169,0.653017002578169,directed graph
+Gleich,minnesota,2642,2642,6606,1,1,0,0,1,1,undirected graph
+Gleich,usroads-48,126146,126146,323900,1,1,0,0,1,1,undirected graph
+Gleich,usroads,129164,129164,330870,1,1,0,0,1,1,undirected graph
+Fluorem,DK01R,903,903,11766,1,0,1,0,0.9614287029365737,0,computational fluid dynamics problem
+Fluorem,GT01R,7980,7980,430909,1,0,1,0,0.8811455350661695,9.457852263618717e-06,computational fluid dynamics problem
+Fluorem,PR02R,161070,161070,8185136,1,0,1,0,0.9476492341912441,0.0001697393815055858,computational fluid dynamics problem
+Fluorem,RM07R,381689,381689,37464962,1,0,1,0,0.9261667922354103,4.260681089287885e-06,computational fluid dynamics problem
+Rommes,ww_36_pmec_36,66,66,1194,1,0,1,0,0.3339191564147627,0,eigenvalue/model reduction problem
+Rommes,ww_vref_6405,13251,13251,48737,1,0,1,0,0.707540090603374,0.5856980072816208,eigenvalue/model reduction problem
+Rommes,xingo_afonso_itaipu,13250,13250,48735,1,0,1,0,0.7075597554196776,0.5857142857142857,eigenvalue/model reduction problem
+Rommes,mimo8x8_system,13309,13309,48872,1,0,1,0,0.7060291752177048,0.5844472793832159,eigenvalue/model reduction problem
+Rommes,mimo28x28_system,13251,13251,48737,1,0,1,0,0.707540090603374,0.5856980072816208,eigenvalue/model reduction problem
+Rommes,mimo46x46_system,13250,13250,48735,1,0,1,0,0.7075597554196776,0.5857142857142857,eigenvalue/model reduction problem
+Rommes,juba40k,40337,40337,144945,1,0,1,0,0.6934462083788981,0.5830536596402579,eigenvalue/model reduction problem
+Rommes,bauru5727,40366,40366,145019,1,0,1,0,0.6931521565005984,0.5828064190876452,eigenvalue/model reduction problem
+Rommes,zeros_nopss_13k,13296,13296,48827,1,0,1,0,0.7083056110002218,0.5842204479929031,eigenvalue/model reduction problem
+Rommes,descriptor_xingo6u,20738,20738,73916,1,0,1,0,0.6848202865775669,0.5745268504272713,eigenvalue/model reduction problem
+Rommes,nopss_11k,11685,11685,44941,1,0,1,0,0.7502077151335311,0.6233827893175075,eigenvalue/model reduction problem
+Rommes,xingo3012,20944,20944,74386,1,0,1,0,0.681002526603102,0.5712336093539642,eigenvalue/model reduction problem
+Rommes,bips98_606,7135,7135,34738,1,0,1,0,0.9086859688195991,0.7583878152166104,eigenvalue/model reduction problem
+Rommes,bips98_1142,9735,9735,40983,1,0,1,0,0.8020552507215579,0.6694154587839767,eigenvalue/model reduction problem
+Rommes,bips98_1450,11305,11305,44678,1,0,1,0,0.7593684272891549,0.6277809047012471,eigenvalue/model reduction problem
+Rommes,bips07_1693,13275,13275,49044,1,0,1,0,0.706761938919083,0.5845449278560985,eigenvalue/model reduction problem
+Rommes,bips07_1998,15066,15066,62198,1,0,1,0,0.7978660841804587,0.6687809795849786,eigenvalue/model reduction problem
+Rommes,bips07_2476,16861,16861,66498,1,0,1,0,0.7574573297176583,0.6349098739830914,eigenvalue/model reduction problem
+Rommes,bips07_3078,21128,21128,75729,1,0,1,0,0.6861363964744979,0.5750975292587777,eigenvalue/model reduction problem
+Rommes,M10PI_n1,528,528,1317,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M20PI_n1,1028,1028,2547,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M40PI_n1,2028,2028,5007,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M80PI_n1,4028,4028,9927,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M10PI_n,682,682,1633,1,0,1,0,1,0.1132075471698113,eigenvalue/model reduction problem
+Rommes,M20PI_n,1182,1182,2881,1,0,1,0,1,0.04173622704507512,eigenvalue/model reduction problem
+Rommes,M40PI_n,2182,2182,5341,1,0,1,0,1,0.02274795268425842,eigenvalue/model reduction problem
+Rommes,M80PI_n,4182,4182,10261,1,0,1,0,1,0.01191043353978085,eigenvalue/model reduction problem
+Rommes,S10PI_n1,528,528,1317,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S20PI_n1,1028,1028,2547,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S40PI_n1,2028,2028,5007,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S80PI_n1,4028,4028,9927,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S10PI_n,682,682,1633,1,0,1,0,1,0.1132075471698113,eigenvalue/model reduction problem
+Rommes,S20PI_n,1182,1182,2881,1,0,1,0,1,0.04173622704507512,eigenvalue/model reduction problem
+Rommes,S40PI_n,2182,2182,5341,1,0,1,0,1,0.02274795268425842,eigenvalue/model reduction problem
+Rommes,S80PI_n,4182,4182,10261,1,0,1,0,1,0.01191043353978085,eigenvalue/model reduction problem
+Williams,pdb1HYS,36417,36417,4344765,1,0,0,1,1,1,weighted undirected graph
+Williams,consph,83334,83334,6010480,1,0,1,1,1,1,2D/3D problem
+Williams,cant,62451,62451,4007383,1,0,1,1,1,1,2D/3D problem
+Williams,mac_econ_fwd500,206500,206500,1273389,1,0,0,0,0.05995735832675801,0.005599217836274841,economic problem
+Williams,mc2depi,525825,525825,2100225,1,0,1,0,0,0,2D/3D problem
+Williams,cop20k_A,121192,121192,2624331,1,0,1,0,1,1,2D/3D problem
+Williams,webbase-1M,1000005,1000005,3105536,1,0,0,0,0.09552554676231316,0.01588957844838191,weighted directed graph
+Freescale,FullChip,2987012,2987012,26621983,1,0,0,0,0.9999996192108144,0.005614865134161801,circuit simulation problem
+Dattorro,EternityII_E,11077,262144,1503732,1,0,0,0,0,0,optimization problem
+Dattorro,EternityII_Etilde,10054,204304,1170516,1,0,0,0,0,0,optimization problem
+Dattorro,EternityII_A,7362,150638,782087,1,0,0,0,0,0,optimization problem
+Fluorem,HV15R,2017169,2017169,283073458,1,0,1,0,0.8446615474952066,0.0007082780488857875,computational fluid dynamics problem
+Dziekonski,dielFilterV2clx,607232,607232,25309272,0,0,1,0,1,0.9712899015627859,electromagnetics problem
+Dziekonski,dielFilterV2real,1157456,1157456,48538952,1,0,1,0,1,1,electromagnetics problem
+Dziekonski,dielFilterV3clx,420408,420408,32886208,0,0,1,0,1,0.8873627016737613,electromagnetics problem
+Dziekonski,dielFilterV3real,1102824,1102824,89306020,1,0,1,0,1,1,electromagnetics problem
+Newman,adjnoun,112,112,850,1,1,0,0,1,1,undirected graph
+Newman,as-22july06,22963,22963,96872,1,1,0,0,1,1,undirected graph
+Newman,astro-ph,16706,16706,242502,1,0,0,0,1,1,undirected weighted graph
+Newman,celegansneural,297,297,2345,1,0,0,0,0.1680170575692964,0.04946695095948828,directed weighted graph
+Newman,cond-mat,16726,16726,95188,1,0,0,0,1,1,undirected weighted graph
+Newman,cond-mat-2003,31163,31163,240058,1,0,0,0,1,1,undirected weighted graph
+Newman,cond-mat-2005,40421,40421,351382,1,0,0,0,1,1,undirected weighted graph
+Newman,dolphins,62,62,318,1,1,0,0,1,1,undirected graph
+Newman,football,115,115,1226,1,0,0,0,1,1,undirected multigraph
+Newman,hep-th,8361,8361,31502,1,0,0,0,1,1,undirected weighted graph
+Newman,karate,34,34,156,1,1,0,0,1,1,undirected graph
+Newman,lesmis,77,77,508,1,0,0,0,1,1,undirected weighted graph
+Newman,netscience,1589,1589,5484,1,0,0,0,1,1,undirected weighted graph
+Newman,polblogs,1490,1490,19025,1,0,0,0,0.242561244874356,0.2414046893071181,directed multigraph
+Newman,polbooks,105,105,882,1,1,0,0,1,1,undirected graph
+Newman,power,4941,4941,13188,1,1,0,0,1,1,undirected graph
+Arenas,PGPgiantcompo,10680,10680,48632,1,0,0,0,1,1,undirected multigraph
+Arenas,jazz,198,198,5484,1,0,0,0,1,1,undirected multigraph
+Arenas,celegans_metabolic,453,453,4065,1,0,0,0,1,1,undirected multigraph
+Arenas,email,1133,1133,10902,1,1,0,0,1,1,undirected graph
+AG-Monien,3elt,4720,4720,27444,1,1,1,0,1,1,2D/3D problem
+AG-Monien,3elt_dual,9000,9000,26556,1,1,1,0,1,1,2D/3D problem
+AG-Monien,airfoil1,4253,4253,24578,1,1,1,0,1,1,2D/3D problem
+AG-Monien,airfoil1_dual,8034,8034,23626,1,1,1,0,1,1,2D/3D problem
+AG-Monien,big_dual,30269,30269,89858,1,1,1,0,1,1,2D/3D problem
+AG-Monien,crack,10240,10240,60760,1,1,1,0,1,1,2D/3D problem
+AG-Monien,crack_dual,20141,20141,60086,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid1,252,252,952,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid1_dual,224,224,840,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid2,3296,3296,12864,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid2_dual,3136,3136,12224,1,1,1,0,1,1,2D/3D problem
+AG-Monien,netz4504,1961,1961,5156,1,1,1,0,1,1,2D/3D problem
+AG-Monien,netz4504_dual,615,615,2342,1,1,1,0,1,1,2D/3D problem
+AG-Monien,ukerbe1,5981,5981,15704,1,1,1,0,1,1,2D/3D problem
+AG-Monien,ukerbe1_dual,1866,1866,7076,1,1,1,0,1,1,2D/3D problem
+AG-Monien,whitaker3,9800,9800,57978,1,1,1,0,1,1,2D/3D problem
+AG-Monien,whitaker3_dual,19190,19190,57162,1,1,1,0,1,1,2D/3D problem
+AG-Monien,brack2,62631,62631,733118,1,1,1,0,1,1,2D/3D problem
+AG-Monien,wave,156317,156317,2118662,1,1,1,0,1,1,2D/3D problem
+AG-Monien,diag,2559,2559,8184,1,1,1,0,1,1,2D/3D problem
+AG-Monien,L,956,956,3640,1,1,1,0,1,1,2D/3D problem
+AG-Monien,L-9,17983,17983,71192,1,1,1,0,1,1,2D/3D problem
+AG-Monien,stufe,1036,1036,3736,1,1,1,0,1,1,2D/3D problem
+AG-Monien,stufe-10,24010,24010,92828,1,1,1,0,1,1,2D/3D problem
+AG-Monien,biplane-9,21701,21701,84076,1,1,1,0,1,1,2D/3D problem
+AG-Monien,shock-9,36476,36476,142580,1,1,1,0,1,1,2D/3D problem
+AG-Monien,bfly,49152,49152,196608,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,cage,366,366,5124,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,cca,49152,49152,139264,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,ccc,49152,49152,147456,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,debr,1048576,1048576,4194298,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,se,32768,32768,98300,1,1,0,0,1,1,undirected graph sequence
+LAW,cnr-2000,325557,325557,3216152,1,1,0,0,0.2491384628169437,0.2491384628169437,directed graph
+LAW,in-2004,1382908,1382908,16917053,1,1,0,0,0.3564974165403691,0.3564974165403691,directed graph
+LAW,eu-2005,862664,862664,19235140,1,1,0,0,0.277066804642518,0.277066804642518,directed graph
+LAW,enron,69244,69244,276143,1,1,0,0,0.1468201946046729,0.1468201946046729,directed graph
+LAW,amazon-2008,735323,735323,5158388,1,1,0,0,0.6338864001699756,0.6338864001699756,directed graph
+LAW,ljournal-2008,5363260,5363260,79023142,1,1,0,0,0.7302651670539438,0.7302651670539438,directed graph
+LAW,hollywood-2009,1139905,1139905,113891327,1,1,0,0,1,1,undirected graph
+LAW,dblp-2010,326186,326186,1615400,1,1,0,0,1,1,undirected graph
+LAW,webbase-2001,118142155,118142155,1019903190,1,1,0,0,0.2780598082364509,0.2780598082364509,directed graph
+LAW,uk-2002,18520486,18520486,298113762,1,1,0,0,0.2084315853924949,0.2084315853924949,directed graph
+LAW,indochina-2004,7414866,7414866,194109311,1,1,0,0,0.4240142027924715,0.4240142027924715,directed graph
+LAW,it-2004,41291594,41291594,1150725436,1,1,0,0,0.1906175218924703,0.1906175218924703,directed graph
+LAW,arabic-2005,22744080,22744080,639999458,1,1,0,0,0.2447917196533005,0.2447917196533005,directed graph
+LAW,sk-2005,50636154,50636154,1949412601,1,1,0,0,0.1245713694644861,0.1245713694644861,directed graph
+LAW,uk-2005,39459925,39459925,936364282,1,1,0,0,0.3002522210250522,0.3002522210250522,directed graph
+DIMACS10,caidaRouterLevel,192244,192244,1218132,1,1,0,0,1,1,undirected graph
+DIMACS10,chesapeake,39,39,340,1,1,0,0,1,1,undirected graph
+DIMACS10,road_central,14081816,14081816,33866826,1,1,0,0,1,1,undirected graph
+DIMACS10,road_usa,23947347,23947347,57708624,1,1,0,0,1,1,undirected graph
+DIMACS10,citationCiteseer,268495,268495,2313294,1,1,0,0,1,1,undirected graph
+DIMACS10,coAuthorsCiteseer,227320,227320,1628268,1,1,0,0,1,1,undirected graph
+DIMACS10,coAuthorsDBLP,299067,299067,1955352,1,1,0,0,1,1,undirected graph
+DIMACS10,coPapersCiteseer,434102,434102,32073440,1,1,0,0,1,1,undirected graph
+DIMACS10,coPapersDBLP,540486,540486,30491458,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n10,1024,1024,6112,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n11,2048,2048,12254,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n12,4096,4096,24528,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n13,8192,8192,49094,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n14,16384,16384,98244,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n15,32768,32768,196548,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n16,65536,65536,393150,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n17,131072,131072,786352,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n18,262144,262144,1572792,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n19,524288,524288,3145646,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n20,1048576,1048576,6291372,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n21,2097152,2097152,12582816,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n22,4194304,4194304,25165738,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n23,8388608,8388608,50331568,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n24,16777216,16777216,100663202,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00000,18318143,18318143,54940162,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00010,19458087,19458087,58359528,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00020,21198119,21198119,63580358,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00000,4588484,4588484,13758266,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00010,12057441,12057441,36164358,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00020,16002413,16002413,47997626,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00000,5824554,5824554,17467046,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00010,6592765,6592765,19771708,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00020,7122792,7122792,21361554,1,1,0,0,1,1,undirected graph
+DIMACS10,kron_g500-logn16,65536,65536,4912469,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn17,131072,131072,10228360,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn18,262144,262144,21165908,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn19,524288,524288,43562265,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn20,1048576,1048576,89239674,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn21,2097152,2097152,182082942,1,0,0,0,1,1,undirected multigraph
+DIMACS10,adaptive,6815744,6815744,27248640,1,1,0,0,1,1,undirected graph
+DIMACS10,channel-500x100x100-b050,4802000,4802000,85362744,1,1,0,0,1,1,undirected graph
+DIMACS10,packing-500x100x100-b050,2145852,2145852,34976486,1,1,0,0,1,1,undirected graph
+DIMACS10,venturiLevel3,4026819,4026819,16108474,1,1,0,0,1,1,undirected graph
+DIMACS10,rgg_n_2_15_s0,32768,32768,320480,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_16_s0,65536,65536,684254,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_17_s0,131072,131072,1457506,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_18_s0,262144,262144,3094566,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_19_s0,524288,524288,6539532,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_20_s0,1048576,1048576,13783240,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_21_s0,2097152,2097152,28975990,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_22_s0,4194304,4194304,60718396,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_23_s0,8388608,8388608,127002786,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_24_s0,16777216,16777216,265114400,1,1,0,0,1,1,undirected random graph
+DIMACS10,asia_osm,11950757,11950757,25423206,1,1,0,0,1,1,undirected graph
+DIMACS10,belgium_osm,1441295,1441295,3099940,1,1,0,0,1,1,undirected graph
+DIMACS10,europe_osm,50912018,50912018,108109320,1,1,0,0,1,1,undirected graph
+DIMACS10,germany_osm,11548845,11548845,24738362,1,1,0,0,1,1,undirected graph
+DIMACS10,great-britain_osm,7733822,7733822,16313034,1,1,0,0,1,1,undirected graph
+DIMACS10,italy_osm,6686493,6686493,14027956,1,1,0,0,1,1,undirected graph
+DIMACS10,luxembourg_osm,114599,114599,239332,1,1,0,0,1,1,undirected graph
+DIMACS10,netherlands_osm,2216688,2216688,4882476,1,1,0,0,1,1,undirected graph
+DIMACS10,144,144649,144649,2148786,1,1,0,0,1,1,undirected graph
+DIMACS10,598a,110971,110971,1483868,1,1,0,0,1,1,undirected graph
+DIMACS10,auto,448695,448695,6629222,1,1,0,0,1,1,undirected graph
+DIMACS10,cs4,22499,22499,87716,1,1,0,0,1,1,undirected graph
+DIMACS10,cti,16840,16840,96464,1,1,0,0,1,1,undirected graph
+DIMACS10,data,2851,2851,30186,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_4elt2,11143,11143,65636,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_body,45087,45087,327468,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_ocean,143437,143437,819186,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_rotor,99617,99617,1324862,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_sphere,16386,16386,98304,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_tooth,78136,78136,905182,1,1,0,0,1,1,undirected graph
+DIMACS10,m14b,214765,214765,3358036,1,1,0,0,1,1,undirected graph
+DIMACS10,t60k,60005,60005,178880,1,1,0,0,1,1,undirected graph
+DIMACS10,uk,4824,4824,13674,1,1,0,0,1,1,undirected graph
+DIMACS10,wing,62032,62032,243088,1,1,0,0,1,1,undirected graph
+DIMACS10,wing_nodal,10937,10937,150976,1,1,0,0,1,1,undirected graph
+IPSO,HTC_336_4438,226340,226340,783496,1,0,0,0,1,1,power network problem
+IPSO,HTC_336_9129,226340,226340,762969,1,0,0,0,1,1,power network problem
+IPSO,OPF_10000,43887,43887,426898,1,0,0,0,1,1,power network problem
+IPSO,OPF_3754,15435,15435,141478,1,0,0,0,1,1,power network problem
+IPSO,OPF_6000,29902,29902,274697,1,0,0,0,1,1,power network problem
+IPSO,TSC_OPF_1047,8140,8140,2012833,1,0,0,0,1,1,power network problem
+IPSO,TSC_OPF_300,9774,9774,820783,1,0,0,0,1,1,power network problem
+Janna,Serena,1391349,1391349,64131971,1,0,1,1,1,1,structural problem
+Janna,Emilia_923,923136,923136,40373538,1,0,1,1,1,1,structural problem
+Janna,Fault_639,638802,638802,27245944,1,0,1,1,1,1,structural problem
+Janna,Flan_1565,1564794,1564794,114165372,1,0,1,1,1,1,structural problem
+Janna,Geo_1438,1437960,1437960,60236322,1,0,1,1,1,1,structural problem
+Janna,Hook_1498,1498023,1498023,59374451,1,0,1,1,1,1,structural problem
+Janna,StocF-1465,1465137,1465137,21005389,1,0,1,1,1,1,computational fluid dynamics problem
+Janna,Cube_Coup_dt0,2164760,2164760,124406070,1,0,1,0,1,1,structural problem
+Janna,Cube_Coup_dt6,2164760,2164760,124406070,1,0,1,0,1,1,structural problem
+Janna,Long_Coup_dt0,1470152,1470152,84422970,1,0,1,0,1,1,structural problem
+Janna,Long_Coup_dt6,1470152,1470152,84422970,1,0,1,0,1,1,structural problem
+Schulthess,N_biocarta,1922,1996,4335,1,0,0,0,0,0,biochemical network
+Schulthess,N_pid,3625,3923,8054,1,0,0,0,0,0,biochemical network
+Schulthess,N_reactome,10204,16559,43816,1,0,0,0,0,0,biochemical network
+Chevron,Chevron1,37365,37365,330633,0,0,0,0,0.994503321194266,0.7103673090824775,other problem
+Chevron,Chevron2,90249,90249,803173,0,0,0,0,0.9963698795383519,0.6400065084076283,other problem
+Chevron,Chevron3,381381,381381,3413113,0,0,0,0,0.998180577966654,0.5728441696033818,other problem
+Chevron,Chevron4,711450,711450,6376412,0,0,0,0,0.9986570077610406,0.5561276492234193,other problem
+CPM,cz148,148,148,1527,1,0,1,0,0.4263959390862944,0.2306018854242204,2D/3D problem
+CPM,cz308,308,308,3182,1,0,1,0,0.4342379958246347,0.2219902574808629,2D/3D problem
+CPM,cz628,628,628,6346,1,0,1,0,0.441413081497027,0.2308499475341028,2D/3D problem
+CPM,cz1268,1268,1268,12786,1,0,1,0,0.4386178155929849,0.2340684146553221,2D/3D problem
+CPM,cz2548,2548,2548,25674,1,0,1,0,0.4322407679667906,0.2349736227622589,2D/3D problem
+CPM,cz5108,5108,5108,51412,1,0,1,0,0.433914996544575,0.2362214927436075,2D/3D problem
+CPM,cz10228,10228,10228,102876,1,0,1,0,0.4358431914342458,0.2371988602020551,2D/3D problem
+CPM,cz20468,20468,20468,206076,1,0,1,0,0.4354769190983147,0.2377052713245119,2D/3D problem
+CPM,cz40948,40948,40948,412148,1,0,1,0,0.4349030172413793,0.2372683189655172,2D/3D problem
+Davis,FX_March2010,1319,9498,301899,1,0,0,0,0,0,term/document graph
+Bodendiek,CurlCurl_0,11083,11083,113343,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_1,226451,226451,2472071,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_2,806529,806529,8921789,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_3,1219574,1219574,13544618,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_4,2380515,2380515,26515867,1,0,1,0,1,1,model reduction problem
+DIMACS10,G_n_pin_pout,100000,100000,1002396,1,1,0,0,1,1,random undirected graph
+DIMACS10,preferentialAttachment,100000,100000,999970,1,1,0,0,1,1,random undirected graph
+DIMACS10,smallworld,100000,100000,999996,1,1,0,0,1,1,random undirected graph
+DIMACS10,333SP,3712815,3712815,22217266,1,1,0,0,1,1,undirected graph
+DIMACS10,AS365,3799275,3799275,22736152,1,1,0,0,1,1,undirected graph
+DIMACS10,M6,3501776,3501776,21003872,1,1,0,0,1,1,undirected graph
+DIMACS10,NACA0015,1039183,1039183,6229636,1,1,0,0,1,1,undirected graph
+DIMACS10,NLR,4163763,4163763,24975952,1,1,0,0,1,1,undirected graph
+DIMACS10,ak2010,45292,45292,217098,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,al2010,252266,252266,1230482,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ar2010,186211,186211,904310,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,az2010,241666,241666,1196094,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ca2010,710145,710145,3489366,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,co2010,201062,201062,974574,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ct2010,67578,67578,336352,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,de2010,24115,24115,116056,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,fl2010,484481,484481,2346294,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ga2010,291086,291086,1418056,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,hi2010,25016,25016,124126,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ia2010,216007,216007,1021170,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,id2010,149842,149842,728264,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,il2010,451554,451554,2164464,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,in2010,267071,267071,1281716,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ks2010,238600,238600,1121798,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ky2010,161672,161672,787778,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,la2010,204447,204447,980634,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ma2010,157508,157508,776610,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,md2010,145247,145247,700378,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,me2010,69518,69518,335476,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mi2010,329885,329885,1578090,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mn2010,259777,259777,1227102,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mo2010,343565,343565,1656568,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ms2010,171778,171778,839980,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mt2010,132288,132288,638668,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nc2010,288987,288987,1416620,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nd2010,133769,133769,625946,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ne2010,193352,193352,913854,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nh2010,48837,48837,234550,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nj2010,169588,169588,829912,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nm2010,168609,168609,830970,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nv2010,84538,84538,416998,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ny2010,350169,350169,1709544,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,oh2010,365344,365344,1768240,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ok2010,269118,269118,1274148,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,or2010,196621,196621,979512,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,pa2010,421545,421545,2058462,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ri2010,25181,25181,125750,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,sc2010,181908,181908,893160,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,sd2010,88360,88360,410722,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,tn2010,240116,240116,1193966,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,tx2010,914231,914231,4456272,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ut2010,115406,115406,572066,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,va2010,285762,285762,1402128,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,vt2010,32580,32580,155598,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wa2010,195574,195574,947432,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wi2010,253096,253096,1209404,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wv2010,135218,135218,662922,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wy2010,86204,86204,427586,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,vsp_barth5_1Ksep_50in_5Kout,32212,32212,203610,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_bcsstk30_500sep_10in_1Kout,58348,58348,4033156,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_befref_fxm_2_4_air02,14109,14109,196448,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_bump2_e18_aa01_model1_crew1,56438,56438,601602,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_c-30_data_data,11023,11023,124368,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_c-60_data_cti_cs4,85830,85830,482160,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_data_and_seymourl,9167,9167,111732,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_finan512_scagr7-2c_rlfddd,139752,139752,1104040,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_mod2_pgp2_slptsk,101364,101364,778736,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_model1_crew1_cr42_south31,45101,45101,379952,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_msc10848_300sep_100in_1Kout,21996,21996,2442056,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_p0291_seymourl_iiasa,10498,10498,107736,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_sctap1-2b_and_seymourl,40174,40174,281662,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_south31_slptsk,39668,39668,379828,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_vibrobox_scagr7-2c_rlfddd,77328,77328,871172,1,1,0,0,1,1,random unweighted graph
+Janna,CoupCons3D,416800,416800,17277420,1,0,1,0,1,0.008881642549324996,structural problem
+Janna,ML_Laplace,377002,377002,27582698,1,0,1,0,1,7.351401706466176e-08,structural problem
+Janna,Transport,1602111,1602111,23487281,1,0,1,0,1,0,structural problem
+Janna,ML_Geer,1504002,1504002,110686677,1,0,1,0,1,2.381330188145693e-07,structural problem
diff --git a/CSparse/MATLAB/cs_install.m b/CSparse/MATLAB/cs_install.m
index b8f387e..5c52e4f 100644
--- a/CSparse/MATLAB/cs_install.m
+++ b/CSparse/MATLAB/cs_install.m
@@ -23,38 +23,44 @@ function cs_install (do_pause)
 %
 %   See also: cs_demo
 %
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('Compiling and installing CSparse\n') ;
 if (nargin < 1)
     do_pause = 0 ;
 end
 
-if (~isempty (strfind (computer, '64')))
-    error ('64-bit version not supported; use CXSparse instead') ;
-end
-
 if (do_pause)
     input ('Hit enter to continue: ') ;
 end
-addpath ([pwd filesep 'CSparse']) ;
-addpath ([pwd filesep 'Demo']) ;
+addpath ([pwd '/CSparse']) ;
+addpath ([pwd '/Demo']) ;
 
-v = getversion ;
-if (v >= 7.0)
-    addpath ([pwd filesep 'UFget']) ;
-else
+if (verLessThan ('matlab', '7.0'))
     fprintf ('UFget not installed (MATLAB 7.0 or later required)\n') ;
+else
+    % install UFget, unless it's already in the path
+    try
+        % if this fails, then UFget is not yet installed
+        index = UFget ;
+        fprintf ('UFget already installed:\n') ;
+        which UFget
+    catch
+        index = [ ] ;
+    end
+    if (isempty (index))
+        % UFget is not installed.  Use ./UFget
+        fprintf ('Installing ./UFget\n') ;
+        try
+            addpath ([pwd '/UFget']) ;
+        catch me
+            disp (me.message) ;
+            fprintf ('UFget not installed\n') ;
+        end
+    end
 end
 
 cd ('CSparse') ;
 cs_make (1) ;
 cd ('../Demo') ;
 cs_demo (do_pause)
-
-%-------------------------------------------------------------------------------
-function v = getversion
-% determine the MATLAB version, and return it as a double.
-v = sscanf (version, '%d.%d.%d') ;
-v = 10.^(0:-1:-(length(v)-1)) * v ;
diff --git a/CSparse/Makefile b/CSparse/Makefile
index 5700dcb..dbee1d4 100644
--- a/CSparse/Makefile
+++ b/CSparse/Makefile
@@ -1,4 +1,8 @@
+#------------------------------------------------------------------------------
 # CSparse Makefile
+#------------------------------------------------------------------------------
+
+VERSION = 3.1.4
 
 C:
 	( cd Lib ; $(MAKE) )
@@ -12,19 +16,25 @@ library:
 cov:
 	( cd Tcov ; $(MAKE) )
 
-mex:
-	( cd MATLAB ; $(MAKE) )
-
 clean:
 	( cd Lib ; $(MAKE) clean )
 	( cd Demo ; $(MAKE) clean )
 	( cd Tcov ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
+	( cd MATLAB/CSparse ; $(RM) *.o )
+	( cd MATLAB/Test    ; $(RM) *.o )
 
 purge:
 	( cd Lib ; $(MAKE) purge )
 	( cd Demo ; $(MAKE) purge )
 	( cd Tcov ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
+	( cd MATLAB/CSparse ; $(RM) *.o *.mex* )
+	( cd MATLAB/Test    ; $(RM) *.o *.mex* )
 
 distclean: purge
+
+# do not install CSparse; use CXSparse instead
+install:
+
+# uninstall CSparse: do nothing
+uninstall:
+
diff --git a/CSparse/README.txt b/CSparse/README.txt
index ee99f19..04b29fa 100644
--- a/CSparse/README.txt
+++ b/CSparse/README.txt
@@ -1,5 +1,6 @@
 CSparse: a Concise Sparse Matrix package.
-Version 2.2.0, Copyright (c) 2006-2007, Timothy A. Davis, Mar 31, 2007.
+VERSION 3.1.4, Copyright (c) 2006-2014, Timothy A. Davis, Oct 10, 2014
+http://www.suitesparse.com
 
 Refer to "Direct Methods for Sparse Linear Systems," Timothy A. Davis,
 SIAM, Philadelphia, 2006.  No detailed user guide is included in this
@@ -29,7 +30,7 @@ competitive with UMFPACK or CHOLMOD, but the codes are much more concise and
 easy to understand (see the above goals).  Other methods are competitive.
 
 Some of the MATLAB tests require the AMD package.
-See http://www.cise.ufl.edu/research/sparse for CSparse and the AMD ordering
+See http://www.suitesparse.com for CSparse and the AMD ordering
 package.  See the Doc/License.txt file for the license (GNU LGPL).
 
 To compile the C-library (./Source) and C demo programs (./Demo) just type
@@ -50,229 +51,229 @@ details, see CSparse/MATLAB/README.txt.
 Contents:
 --------------------------------------------------------------------------------
 
-Demo/		demo C programs that use CSparse
-Doc/		license and change log
-Makefile	Makefile for the whole package
-MATLAB/		MATLAB interface, demos, and tests for CSparse
-Matrix/		sample matrices
-README.txt	this file
-Source/		primary CSparse source files (C only, no MATLAB)
-Tcov/		CSparse tests
+Demo/           demo C programs that use CSparse
+Doc/            license and change log
+Makefile        Makefile for the whole package
+MATLAB/         MATLAB interface, demos, and tests for CSparse
+Matrix/         sample matrices
+README.txt      this file
+Source/         primary CSparse source files (C only, no MATLAB)
+Tcov/           CSparse tests
 
 --------------------------------------------------------------------------------
-./Doc:		license and change log
+./Doc:          license and change log
 --------------------------------------------------------------------------------
 
-ChangeLog	changes in CSparse since first release
-lesser.txt	the GNU LGPL
-License.txt	license (GNU LGPL)
+ChangeLog       changes in CSparse since first release
+lesser.txt      the GNU LGPL
+License.txt     license (GNU LGPL)
 
 --------------------------------------------------------------------------------
-./Source:	Primary source code for CSparse
+./Source:       Primary source code for CSparse
 --------------------------------------------------------------------------------
 
-cs_add.c	add sparse matrices
-cs_amd.c	approximate minimum degree
-cs_chol.c	sparse Cholesky
-cs_cholsol.c	x=A\b using sparse Cholesky
-cs_compress.c	convert a triplet form to compressed-column form
-cs_counts.c	column counts for Cholesky and QR
-cs_cumsum.c	cumulative sum
-cs_dfs.c	depth-first-search
-cs_dmperm.c	Dulmage-Mendelsohn permutation
-cs_droptol.c	drop small entries from a sparse matrix
-cs_dropzeros.c	drop zeros from a sparse matrix
-cs_dupl.c	remove (and sum) duplicates
-cs_entry.c	add an entry to a triplet matrix
-cs_ereach.c	nonzero pattern of Cholesky L(k,:) from etree and triu(A(:,k))
-cs_etree.c	find elimination tree
-cs_fkeep.c	drop entries from a sparse matrix
-cs_gaxpy.c	sparse matrix times dense matrix
-cs.h		include file for CSparse
-cs_happly.c	apply Householder reflection
-cs_house.c	compute Householder reflection
-cs_ipvec.c	x(p)=b
-cs_leaf.c	determine if j is a leaf of the skeleton matrix and find lca
-cs_load.c	load a sparse matrix from a file
-cs_lsolve.c	x=L\b
-cs_ltsolve.c	x=L'\b
-cs_lu.c		sparse LU factorization
-cs_lusol.c	x=A\b using sparse LU factorization
-cs_malloc.c	memory manager
-cs_maxtrans.c	maximum transveral (permutation for zero-free diagonal)
-cs_multiply.c	sparse matrix multiply
-cs_norm.c	sparse matrix norm
-cs_permute.c	permute a sparse matrix
-cs_pinv.c	invert a permutation vector
-cs_post.c	postorder an elimination tree
-cs_print.c	print a sparse matrix
-cs_pvec.c	x=b(p)
-cs_qr.c		sparse QR
-cs_qrsol.c	solve a least-squares problem
-cs_randperm.c	random permutation
-cs_reach.c	find nonzero pattern of x=L\b for sparse L and b
-cs_scatter.c	scatter a sparse vector
-cs_scc.c	strongly-connected components
-cs_schol.c	symbolic Cholesky
-cs_spsolve.c	x=G\b where G, x, and b are sparse, and G upper/lower triangular
-cs_sqr.c	symbolic QR (also can be used for LU)
-cs_symperm.c	symmetric permutation of a sparse matrix
-cs_tdfs.c	depth-first-search of a tree
-cs_transpose.c	transpose a sparse matrix
-cs_updown.c	sparse rank-1 Cholesky update/downate
-cs_usolve.c	x=U\b
-cs_util.c	various utilities (allocate/free matrices, workspace, etc)
-cs_utsolve.c	x=U'\b
-Makefile	Makefile for CSparse
-README.txt	README file for CSparse
+cs_add.c        add sparse matrices
+cs_amd.c        approximate minimum degree
+cs_chol.c       sparse Cholesky
+cs_cholsol.c    x=A\b using sparse Cholesky
+cs_compress.c   convert a triplet form to compressed-column form
+cs_counts.c     column counts for Cholesky and QR
+cs_cumsum.c     cumulative sum
+cs_dfs.c        depth-first-search
+cs_dmperm.c     Dulmage-Mendelsohn permutation
+cs_droptol.c    drop small entries from a sparse matrix
+cs_dropzeros.c  drop zeros from a sparse matrix
+cs_dupl.c       remove (and sum) duplicates
+cs_entry.c      add an entry to a triplet matrix
+cs_ereach.c     nonzero pattern of Cholesky L(k,:) from etree and triu(A(:,k))
+cs_etree.c      find elimination tree
+cs_fkeep.c      drop entries from a sparse matrix
+cs_gaxpy.c      sparse matrix times dense matrix
+cs.h            include file for CSparse
+cs_happly.c     apply Householder reflection
+cs_house.c      compute Householder reflection
+cs_ipvec.c      x(p)=b
+cs_leaf.c       determine if j is a leaf of the skeleton matrix and find lca
+cs_load.c       load a sparse matrix from a file
+cs_lsolve.c     x=L\b
+cs_ltsolve.c    x=L'\b
+cs_lu.c         sparse LU factorization
+cs_lusol.c      x=A\b using sparse LU factorization
+cs_malloc.c     memory manager
+cs_maxtrans.c   maximum transveral (permutation for zero-free diagonal)
+cs_multiply.c   sparse matrix multiply
+cs_norm.c       sparse matrix norm
+cs_permute.c    permute a sparse matrix
+cs_pinv.c       invert a permutation vector
+cs_post.c       postorder an elimination tree
+cs_print.c      print a sparse matrix
+cs_pvec.c       x=b(p)
+cs_qr.c         sparse QR
+cs_qrsol.c      solve a least-squares problem
+cs_randperm.c   random permutation
+cs_reach.c      find nonzero pattern of x=L\b for sparse L and b
+cs_scatter.c    scatter a sparse vector
+cs_scc.c        strongly-connected components
+cs_schol.c      symbolic Cholesky
+cs_spsolve.c    x=G\b where G, x, and b are sparse, and G upper/lower triangular
+cs_sqr.c        symbolic QR (also can be used for LU)
+cs_symperm.c    symmetric permutation of a sparse matrix
+cs_tdfs.c       depth-first-search of a tree
+cs_transpose.c  transpose a sparse matrix
+cs_updown.c     sparse rank-1 Cholesky update/downate
+cs_usolve.c     x=U\b
+cs_util.c       various utilities (allocate/free matrices, workspace, etc)
+cs_utsolve.c    x=U'\b
+Makefile        Makefile for CSparse
+README.txt      README file for CSparse
 
 
 --------------------------------------------------------------------------------
-./Demo:		C program demos
+./Demo:         C program demos
 --------------------------------------------------------------------------------
 
-cs_demo1.c	read a matrix from a file and perform basic matrix operations
-cs_demo2.c	read a matrix from a file and solve a linear system
-cs_demo3.c	read a matrix, solve a linear system, update/downdate
-cs_demo.c	support routines for cs_demo*.c
-cs_demo.h	include file for demo programs
-cs_demo.out	output of "make", which runs the demos on some matrices
-Makefile	Makefile for Demo programs
-readhb.f	read a Rutherford-Boeing matrix
-README.txt	Demo README file
+cs_demo1.c      read a matrix from a file and perform basic matrix operations
+cs_demo2.c      read a matrix from a file and solve a linear system
+cs_demo3.c      read a matrix, solve a linear system, update/downdate
+cs_demo.c       support routines for cs_demo*.c
+cs_demo.h       include file for demo programs
+cs_demo.out     output of "make", which runs the demos on some matrices
+Makefile        Makefile for Demo programs
+readhb.f        read a Rutherford-Boeing matrix
+README.txt      Demo README file
 
 
 --------------------------------------------------------------------------------
-./MATLAB:	MATLAB interface, demos, and tests
+./MATLAB:       MATLAB interface, demos, and tests
 --------------------------------------------------------------------------------
 
-cs_install.m	MATLAB function for compiling and installing CSparse for MATLAB
-CSparse/	MATLAB interface for CSparse
-Demo/		MATLAB demos for CSparse
-Makefile	MATLAB interface Makefile
-README.txt	MATLAB README file
-Test/		MATLAB test for CSparse, and "textbook" routines
-UFget/		MATLAB interface to UF Sparse Matrix Collection
+cs_install.m    MATLAB function for compiling and installing CSparse for MATLAB
+CSparse/        MATLAB interface for CSparse
+Demo/           MATLAB demos for CSparse
+Makefile        MATLAB interface Makefile
+README.txt      MATLAB README file
+Test/           MATLAB test for CSparse, and "textbook" routines
+UFget/          MATLAB interface to UF Sparse Matrix Collection
 
 
 --------------------------------------------------------------------------------
 ./MATLAB/CSparse:   MATLAB interface for CSparse
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of MATLAB interface to CSparse
-cs_add.m	    add two sparse matrices
+Contents.m          Contents of MATLAB interface to CSparse
+cs_add.m            add two sparse matrices
 cs_add_mex.c
-cs_amd.m	    approximate minimum degree
+cs_amd.m            approximate minimum degree
 cs_amd_mex.c
-cs_chol.m	    sparse Cholesky
+cs_chol.m           sparse Cholesky
 cs_chol_mex.c
-cs_cholsol.m	    x=A\b using a sparse Cholesky
+cs_cholsol.m        x=A\b using a sparse Cholesky
 cs_cholsol_mex.c
-cs_counts.m	    column counts for Cholesky or QR (like "symbfact" in MATLAB)
+cs_counts.m         column counts for Cholesky or QR (like "symbfact" in MATLAB)
 cs_counts_mex.c
-cs_dmperm.m	    Dulmage-Mendelsohn permutation
+cs_dmperm.m         Dulmage-Mendelsohn permutation
 cs_dmperm_mex.c
-cs_dmsol.m	    x=A\b using dmperm
-cs_dmspy.m	    plot a picture of a dmperm-permuted matrix
-cs_droptol.m	    drop small entries
+cs_dmsol.m          x=A\b using dmperm
+cs_dmspy.m          plot a picture of a dmperm-permuted matrix
+cs_droptol.m        drop small entries
 cs_droptol_mex.c
-cs_esep.m	    find edge separator
-cs_etree.m	    compute elimination tree
+cs_esep.m           find edge separator
+cs_etree.m          compute elimination tree
 cs_etree_mex.c
-cs_gaxpy.m	    sparse matrix times dense vector
+cs_gaxpy.m          sparse matrix times dense vector
 cs_gaxpy_mex.c
-cs_lsolve.m	    x=L\b where L is lower triangular
+cs_lsolve.m         x=L\b where L is lower triangular
 cs_lsolve_mex.c
-cs_ltsolve.m	    x=L'\b where L is lower triangular
+cs_ltsolve.m        x=L'\b where L is lower triangular
 cs_ltsolve_mex.c
-cs_lu.m		    sparse LU factorization
+cs_lu.m             sparse LU factorization
 cs_lu_mex.c
-cs_lusol.m	    x=A\b using sparse LU factorization
+cs_lusol.m          x=A\b using sparse LU factorization
 cs_lusol_mex.c
-cs_make.m	    compiles CSparse for use in MATLAB
-cs_mex.c	    support routines for CSparse mexFunctions
+cs_make.m           compiles CSparse for use in MATLAB
+cs_mex.c            support routines for CSparse mexFunctions
 cs_mex.h
-cs_multiply.m	    sparse matrix multiply
+cs_multiply.m       sparse matrix multiply
 cs_multiply_mex.c
 cs_must_compile.m   determine if a source file needs to be compiled with mex
-cs_nd.m		    nested dissection
-cs_nsep.m	    find node separator
-cs_permute.m	    permute a sparse matrix
+cs_nd.m             nested dissection
+cs_nsep.m           find node separator
+cs_permute.m        permute a sparse matrix
 cs_permute_mex.c
-cs_print.m	    print a sparse matrix
+cs_print.m          print a sparse matrix
 cs_print_mex.c
-cs_qleft.m	    apply Householder vectors to the left
-cs_qright.m	    apply Householder vectors to the right
-cs_qr.m		    sparse QR factorization
+cs_qleft.m          apply Householder vectors to the left
+cs_qright.m         apply Householder vectors to the right
+cs_qr.m             sparse QR factorization
 cs_qr_mex.c
-cs_qrsol.m	    solve a sparse least squares problem
+cs_qrsol.m          solve a sparse least squares problem
 cs_qrsol_mex.c
-cs_randperm.m	    randdom permutation
+cs_randperm.m       randdom permutation
 cs_randperm_mex.c
-cs_scc.m	    strongly-connected components
+cs_scc.m            strongly-connected components
 cs_scc_mex.c
-cs_sep.m	    convert an edge separator into a node separator
-cs_sparse.m	    convert a triplet form matrix to a compress-column form
+cs_sep.m            convert an edge separator into a node separator
+cs_sparse.m         convert a triplet form matrix to a compress-column form
 cs_sparse_mex.c
-cs_symperm.m	    symmetric permutation of a sparse matrix
+cs_symperm.m        symmetric permutation of a sparse matrix
 cs_symperm_mex.c
-cs_sqr.m	    symbolic QR ordering and analysis
+cs_sqr.m            symbolic QR ordering and analysis
 cs_sqr_mex.c
-cs_thumb_mex.c	    compute small "thumbnail" of a sparse matrix (for cspy).
-cs_transpose.m	    transpose a sparse matrix
+cs_thumb_mex.c      compute small "thumbnail" of a sparse matrix (for cspy).
+cs_transpose.m      transpose a sparse matrix
 cs_transpose_mex.c
-cs_updown.m	    sparse Cholesky update/downdate
+cs_updown.m         sparse Cholesky update/downdate
 cs_updown_mex.c
-cs_usolve.m	    x=U\b where U is upper triangular 
+cs_usolve.m         x=U\b where U is upper triangular 
 cs_usolve_mex.c
-cs_utsolve.m	    x=U'\b where U is upper triangular 
+cs_utsolve.m        x=U'\b where U is upper triangular 
 cs_utsolve_mex.c
-cspy.m		    a color "spy"
-Makefile	    Makefile for CSparse MATLAB interface
-README.txt	    README file for CSparse MATLAB interface
+cspy.m              a color "spy"
+Makefile            Makefile for CSparse MATLAB interface
+README.txt          README file for CSparse MATLAB interface
 
 
 --------------------------------------------------------------------------------
-./MATLAB/Demo:	    MATLAB demos for CSparse
+./MATLAB/Demo:      MATLAB demos for CSparse
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of MATLAB demo for CSparse
-cs_demo.m	    run all MATLAB demos for CSparse
-cs_demo1.m	    MATLAB version of Demo/cs_demo1.c
-cs_demo2.m	    MATLAB version of Demo/cs_demo2.c
-cs_demo3.m	    MATLAB version of Demo/cs_demo3.c
-private/	    private functions for MATLAB demos
-README.txt	    README file for CSparse MATLAB demo
+Contents.m          Contents of MATLAB demo for CSparse
+cs_demo.m           run all MATLAB demos for CSparse
+cs_demo1.m          MATLAB version of Demo/cs_demo1.c
+cs_demo2.m          MATLAB version of Demo/cs_demo2.c
+cs_demo3.m          MATLAB version of Demo/cs_demo3.c
+private/            private functions for MATLAB demos
+README.txt          README file for CSparse MATLAB demo
 
 
 --------------------------------------------------------------------------------
 ./MATLAB/Demo/private: private functions for MATLAB demos
 --------------------------------------------------------------------------------
 
-demo2.m		    demo 2
-demo3.m		    demo 3
-ex_1.m		    example 1
-ex2.m		    example 2
-ex3.m		    example 3
-frand.m		    generate a random finite-element matrix
-get_problem.m	    get a matrix
-is_sym.m	    determine if a matrix is symmetric
-mesh2d1.m	    construct a 2D mesh (method 1)
-mesh2d2.m	    construct a 2D mesh (method 2)
-mesh3d1.m	    construct a 3D mesh (method 1)
-mesh3d2.m	    construct a 3D mesh (method 2)
-print_order.m	    print the ordering method used
-resid.m		    compute residual
-rhs.m		    create right-hand-side
+demo2.m             demo 2
+demo3.m             demo 3
+ex_1.m              example 1
+ex2.m               example 2
+ex3.m               example 3
+frand.m             generate a random finite-element matrix
+get_problem.m       get a matrix
+is_sym.m            determine if a matrix is symmetric
+mesh2d1.m           construct a 2D mesh (method 1)
+mesh2d2.m           construct a 2D mesh (method 2)
+mesh3d1.m           construct a 3D mesh (method 1)
+mesh3d2.m           construct a 3D mesh (method 2)
+print_order.m       print the ordering method used
+resid.m             compute residual
+rhs.m               create right-hand-side
 
 
 --------------------------------------------------------------------------------
-./MATLAB/Test:	    Extensive test of CSparse, in MATLAB
+./MATLAB/Test:      Extensive test of CSparse, in MATLAB
 --------------------------------------------------------------------------------
 
-Makefile	    Makefile for MATLAB Test directory
-README.txt	    README file for MATLAB/Test
-Contents.m	    Contents of MATLAB/Test, "textbook" files only
+Makefile            Makefile for MATLAB Test directory
+README.txt          README file for MATLAB/Test
+Contents.m          Contents of MATLAB/Test, "textbook" files only
 
 chol_downdate.m     downdate a Cholesky factorization.
 chol_left.m         left-looking Cholesky factorization.
@@ -296,7 +297,7 @@ qr_givens.m         Givens-rotation QR factorization.
 qr_givens_full.m    Givens-rotation QR factorization, for full matrices.
 qr_left.m           left-looking Householder QR factorization.
 qr_right.m          right-looking Householder QR factorization.
-cs_fiedler.m	    Fiedler vector
+cs_fiedler.m        Fiedler vector
 
 cs_frand.m          generate a random finite-element matrix
 cs_frand_mex.c
@@ -305,17 +306,17 @@ cs_ipvec_mex.c
 cs_maxtransr.m      recursive maximum matching algorithm
 cs_maxtransr_mex.c
 cs_pvec.m           x=b(p)
-cs_pvec_mex.c	    interface for cs_pvec
+cs_pvec_mex.c       interface for cs_pvec
 cs_reach.m          non-recursive reach (interface to CSparse cs_reach)
-cs_reach_mex.c	    non-recursive x=spones(L\sparse(b))
+cs_reach_mex.c      non-recursive x=spones(L\sparse(b))
 cs_reachr.m         recursive reach (interface to CSparse cs_reachr)
 cs_reachr_mex.c
 cs_rowcnt.m         row counts for sparse Cholesky
-cs_rowcnt_mex.c	    row counts for sparse Cholesky
+cs_rowcnt_mex.c     row counts for sparse Cholesky
 cs_sparse2.m        same as cs_sparse, to test cs_entry function
 cs_sparse2_mex.c    like cs_sparse, but for testing cs_entry
 
-cs_test_make.m	    compiles MATLAB tests
+cs_test_make.m      compiles MATLAB tests
 
 check_if_same.m     check if two inputs are identical or not
 choldn.m            Cholesky downdate
@@ -376,53 +377,53 @@ test28.m            test cs_randperm, cs_dmperm
 
 
 --------------------------------------------------------------------------------
-./MATLAB/UFget:	    MATLAB interface for the UF Sparse Matrix Collection
+./MATLAB/UFget:     MATLAB interface for the UF Sparse Matrix Collection
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of UFget
-mat/		    default directory where downloaded matrices will be put
-README.txt	    README file for UFget
+Contents.m          Contents of UFget
+mat/                default directory where downloaded matrices will be put
+README.txt          README file for UFget
 UFget_defaults.m    default parameter settings
-UFget_example.m	    example of use
-UFget_install.m	    installs UFget temporarily (for current session)
+UFget_example.m     example of use
+UFget_install.m     installs UFget temporarily (for current session)
 UFget_java.class    read a url and load it in into MATLAB (compiled Java code)
-UFget_java.java	    read a url and load it in into MATLAB (Java source code)
-UFget_lookup.m	    look up a matrix in the index
-UFget.m		    UFget itself (primary user interface)
-UFweb.m		    open url for a matrix or collection
+UFget_java.java     read a url and load it in into MATLAB (Java source code)
+UFget_lookup.m      look up a matrix in the index
+UFget.m             UFget itself (primary user interface)
+UFweb.m             open url for a matrix or collection
 mat/UF_Index.mat    index of matrices in UF Sparse Matrix Collection
 
 
 --------------------------------------------------------------------------------
-./Matrix:	    Sample matrices, most from Rutherford/Boeing collection
+./Matrix:           Sample matrices, most from Rutherford/Boeing collection
 --------------------------------------------------------------------------------
 
-ash219		    overdetermined pattern of Holland survey.  Ashkenazi, 1974.
-bcsstk01	    stiffness matrix for small generalized eigenvalue problem
-bcsstk16	    stiffness matrix, Corp of Engineers dam
-fs_183_1	    unsymmetric facsimile convergence matrix
-lp_afiro	    NETLIB afiro linear programming problem
-mbeacxc		    US economy, 1972.  Dan Szyld, while at NYU
-t1		    small example used in Chapter 2
-west0067	    Cavett problem with 5 components (chemical eng., Westerberg)
+ash219              overdetermined pattern of Holland survey.  Ashkenazi, 1974.
+bcsstk01            stiffness matrix for small generalized eigenvalue problem
+bcsstk16            stiffness matrix, Corp of Engineers dam
+fs_183_1            unsymmetric facsimile convergence matrix
+lp_afiro            NETLIB afiro linear programming problem
+mbeacxc             US economy, 1972.  Dan Szyld, while at NYU
+t1                  small example used in Chapter 2
+west0067            Cavett problem with 5 components (chemical eng., Westerberg)
 
 
 --------------------------------------------------------------------------------
-./Tcov:		    Exhaustive test coverage of CSparse
+./Tcov:             Exhaustive test coverage of CSparse
 --------------------------------------------------------------------------------
 
-covall		    same as covall.linux
-covall.linux	    find coverage (Linux)
-covall.sol	    find coverage (Solaris)
-cov.awk		    coverage summary
-cover		    print uncovered lines
-covs		    print uncovered lines
+covall              same as covall.linux
+covall.linux        find coverage (Linux)
+covall.sol          find coverage (Solaris)
+cov.awk             coverage summary
+cover               print uncovered lines
+covs                print uncovered lines
 cstcov_malloc_test.c    malloc test
 cstcov_malloc_test.h
-cstcov_test.c	    main program for Tcov tests
-gcovs		    run gcov (Linux)
-Makefile	    Makefile for Tcov tests
-nil		    an empty matrix
-zero		    a 1-by-1 zero matrix
-README.txt	    README file for Tcov directory
+cstcov_test.c       main program for Tcov tests
+gcovs               run gcov (Linux)
+Makefile            Makefile for Tcov tests
+nil                 an empty matrix
+zero                a 1-by-1 zero matrix
+README.txt          README file for Tcov directory
 
diff --git a/CSparse/Source/README.txt b/CSparse/Source/README.txt
index 9507521..fd33edf 100644
--- a/CSparse/Source/README.txt
+++ b/CSparse/Source/README.txt
@@ -1,3 +1,5 @@
 CSparse/Source directory: primary ANSI C source code files for CSparse.
 All of these files are printed verbatim in the book.  To compile the
 libcsparse.a C-callable library, just type "make" in this directory.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CSparse/Source/cs_add.c b/CSparse/Source/cs_add.c
index 2c3c146..19cbe2d 100644
--- a/CSparse/Source/cs_add.c
+++ b/CSparse/Source/cs_add.c
@@ -2,27 +2,27 @@
 /* C = alpha*A + beta*B */
 cs *cs_add (const cs *A, const cs *B, double alpha, double beta)
 {
-    int p, j, nz = 0, anz, *Cp, *Ci, *Bp, m, n, bnz, *w, values ;
+    csi p, j, nz = 0, anz, *Cp, *Ci, *Bp, m, n, bnz, *w, values ;
     double *x, *Bx, *Cx ;
     cs *C ;
-    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;         /* check inputs */
     if (A->m != B->m || A->n != B->n) return (NULL) ;
     m = A->m ; anz = A->p [A->n] ;
     n = B->n ; Bp = B->p ; Bx = B->x ; bnz = Bp [n] ;
-    w = cs_calloc (m, sizeof (int)) ;			    /* get workspace */
+    w = cs_calloc (m, sizeof (csi)) ;                       /* get workspace */
     values = (A->x != NULL) && (Bx != NULL) ;
     x = values ? cs_malloc (m, sizeof (double)) : NULL ;    /* get workspace */
-    C = cs_spalloc (m, n, anz + bnz, values, 0) ;	    /* allocate result*/
+    C = cs_spalloc (m, n, anz + bnz, values, 0) ;           /* allocate result*/
     if (!C || !w || (values && !x)) return (cs_done (C, w, x, 0)) ;
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
     for (j = 0 ; j < n ; j++)
     {
-	Cp [j] = nz ;			/* column j of C starts here */
-	nz = cs_scatter (A, j, alpha, w, x, j+1, C, nz) ;   /* alpha*A(:,j)*/
-	nz = cs_scatter (B, j, beta, w, x, j+1, C, nz) ;    /* beta*B(:,j) */
-	if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
+        Cp [j] = nz ;                   /* column j of C starts here */
+        nz = cs_scatter (A, j, alpha, w, x, j+1, C, nz) ;   /* alpha*A(:,j)*/
+        nz = cs_scatter (B, j, beta, w, x, j+1, C, nz) ;    /* beta*B(:,j) */
+        if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
     }
-    Cp [n] = nz ;			/* finalize the last column of C */
-    cs_sprealloc (C, 0) ;		/* remove extra space from C */
-    return (cs_done (C, w, x, 1)) ;	/* success; free workspace, return C */
+    Cp [n] = nz ;                       /* finalize the last column of C */
+    cs_sprealloc (C, 0) ;               /* remove extra space from C */
+    return (cs_done (C, w, x, 1)) ;     /* success; free workspace, return C */
 }
diff --git a/CSparse/Source/cs_amd.c b/CSparse/Source/cs_amd.c
index 58b5d0e..ce556fb 100644
--- a/CSparse/Source/cs_amd.c
+++ b/CSparse/Source/cs_amd.c
@@ -1,72 +1,72 @@
 #include "cs.h"
 /* clear w */
-static int cs_wclear (int mark, int lemax, int *w, int n)
+static csi cs_wclear (csi mark, csi lemax, csi *w, csi n)
 {
-    int k ;
+    csi k ;
     if (mark < 2 || (mark + lemax < 0))
     {
-	for (k = 0 ; k < n ; k++) if (w [k] != 0) w [k] = 1 ;
-	mark = 2 ;
+        for (k = 0 ; k < n ; k++) if (w [k] != 0) w [k] = 1 ;
+        mark = 2 ;
     }
-    return (mark) ;	/* at this point, w [0..n-1] < mark holds */
+    return (mark) ;     /* at this point, w [0..n-1] < mark holds */
 }
 
 /* keep off-diagonal entries; drop diagonal entries */
-static int cs_diag (int i, int j, double aij, void *other) { return (i != j) ; }
+static csi cs_diag (csi i, csi j, double aij, void *other) { return (i != j) ; }
 
 /* p = amd(A+A') if symmetric is true, or amd(A'A) otherwise */
-int *cs_amd (int order, const cs *A)  /* order 0:natural, 1:Chol, 2:LU, 3:QR */
+csi *cs_amd (csi order, const cs *A)  /* order 0:natural, 1:Chol, 2:LU, 3:QR */
 {
     cs *C, *A2, *AT ;
-    int *Cp, *Ci, *last, *W, *len, *nv, *next, *P, *head, *elen, *degree, *w,
-	*hhead, *ATp, *ATi, d, dk, dext, lemax = 0, e, elenk, eln, i, j, k, k1,
-	k2, k3, jlast, ln, dense, nzmax, mindeg = 0, nvi, nvj, nvk, mark, wnvi,
-	ok, cnz, nel = 0, p, p1, p2, p3, p4, pj, pk, pk1, pk2, pn, q, n, m, t ;
-    unsigned int h ;
+    csi *Cp, *Ci, *last, *W, *len, *nv, *next, *P, *head, *elen, *degree, *w,
+        *hhead, *ATp, *ATi, d, dk, dext, lemax = 0, e, elenk, eln, i, j, k, k1,
+        k2, k3, jlast, ln, dense, nzmax, mindeg = 0, nvi, nvj, nvk, mark, wnvi,
+        ok, cnz, nel = 0, p, p1, p2, p3, p4, pj, pk, pk1, pk2, pn, q, n, m, t ;
+    csi h ;
     /* --- Construct matrix C ----------------------------------------------- */
     if (!CS_CSC (A) || order <= 0 || order > 3) return (NULL) ; /* check */
-    AT = cs_transpose (A, 0) ;		    /* compute A' */
+    AT = cs_transpose (A, 0) ;              /* compute A' */
     if (!AT) return (NULL) ;
     m = A->m ; n = A->n ;
     dense = CS_MAX (16, 10 * sqrt ((double) n)) ;   /* find dense threshold */
     dense = CS_MIN (n-2, dense) ;
     if (order == 1 && n == m)
     {
-	C = cs_add (A, AT, 0, 0) ;	    /* C = A+A' */
+        C = cs_add (A, AT, 0, 0) ;          /* C = A+A' */
     }
     else if (order == 2)
     {
-	ATp = AT->p ;			    /* drop dense columns from AT */
-	ATi = AT->i ;
-	for (p2 = 0, j = 0 ; j < m ; j++)
-	{
-	    p = ATp [j] ;		    /* column j of AT starts here */
-	    ATp [j] = p2 ;		    /* new column j starts here */
-	    if (ATp [j+1] - p > dense) continue ;   /* skip dense col j */
-	    for ( ; p < ATp [j+1] ; p++) ATi [p2++] = ATi [p] ;
-	}
-	ATp [m] = p2 ;			    /* finalize AT */
-	A2 = cs_transpose (AT, 0) ;	    /* A2 = AT' */
-	C = A2 ? cs_multiply (AT, A2) : NULL ;	/* C=A'*A with no dense rows */
-	cs_spfree (A2) ;
+        ATp = AT->p ;                       /* drop dense columns from AT */
+        ATi = AT->i ;
+        for (p2 = 0, j = 0 ; j < m ; j++)
+        {
+            p = ATp [j] ;                   /* column j of AT starts here */
+            ATp [j] = p2 ;                  /* new column j starts here */
+            if (ATp [j+1] - p > dense) continue ;   /* skip dense col j */
+            for ( ; p < ATp [j+1] ; p++) ATi [p2++] = ATi [p] ;
+        }
+        ATp [m] = p2 ;                      /* finalize AT */
+        A2 = cs_transpose (AT, 0) ;         /* A2 = AT' */
+        C = A2 ? cs_multiply (AT, A2) : NULL ;  /* C=A'*A with no dense rows */
+        cs_spfree (A2) ;
     }
     else
     {
-	C = cs_multiply (AT, A) ;	    /* C=A'*A */
+        C = cs_multiply (AT, A) ;           /* C=A'*A */
     }
     cs_spfree (AT) ;
     if (!C) return (NULL) ;
-    cs_fkeep (C, &cs_diag, NULL) ;	    /* drop diagonal entries */
+    cs_fkeep (C, &cs_diag, NULL) ;          /* drop diagonal entries */
     Cp = C->p ;
     cnz = Cp [n] ;
-    P = cs_malloc (n+1, sizeof (int)) ;	    /* allocate result */
-    W = cs_malloc (8*(n+1), sizeof (int)) ; /* get workspace */
-    t = cnz + cnz/5 + 2*n ;		    /* add elbow room to C */
+    P = cs_malloc (n+1, sizeof (csi)) ;     /* allocate result */
+    W = cs_malloc (8*(n+1), sizeof (csi)) ; /* get workspace */
+    t = cnz + cnz/5 + 2*n ;                 /* add elbow room to C */
     if (!P || !W || !cs_sprealloc (C, t)) return (cs_idone (P, C, W, 0)) ;
     len  = W           ; nv     = W +   (n+1) ; next   = W + 2*(n+1) ;
     head = W + 3*(n+1) ; elen   = W + 4*(n+1) ; degree = W + 5*(n+1) ;
     w    = W + 6*(n+1) ; hhead  = W + 7*(n+1) ;
-    last = P ;				    /* use P as workspace for last */
+    last = P ;                              /* use P as workspace for last */
     /* --- Initialize quotient graph ---------------------------------------- */
     for (k = 0 ; k < n ; k++) len [k] = Cp [k+1] - Cp [k] ;
     len [n] = 0 ;
@@ -74,291 +74,291 @@ int *cs_amd (int order, const cs *A)  /* order 0:natural, 1:Chol, 2:LU, 3:QR */
     Ci = C->i ;
     for (i = 0 ; i <= n ; i++)
     {
-	head [i] = -1 ;			    /* degree list i is empty */
-	last [i] = -1 ;
-	next [i] = -1 ;
-	hhead [i] = -1 ;		    /* hash list i is empty */
-	nv [i] = 1 ;			    /* node i is just one node */
-	w [i] = 1 ;			    /* node i is alive */
-	elen [i] = 0 ;			    /* Ek of node i is empty */
-	degree [i] = len [i] ;		    /* degree of node i */
+        head [i] = -1 ;                     /* degree list i is empty */
+        last [i] = -1 ;
+        next [i] = -1 ;
+        hhead [i] = -1 ;                    /* hash list i is empty */
+        nv [i] = 1 ;                        /* node i is just one node */
+        w [i] = 1 ;                         /* node i is alive */
+        elen [i] = 0 ;                      /* Ek of node i is empty */
+        degree [i] = len [i] ;              /* degree of node i */
     }
-    mark = cs_wclear (0, 0, w, n) ;	    /* clear w */
-    elen [n] = -2 ;			    /* n is a dead element */
-    Cp [n] = -1 ;			    /* n is a root of assembly tree */
-    w [n] = 0 ;				    /* n is a dead element */
+    mark = cs_wclear (0, 0, w, n) ;         /* clear w */
+    elen [n] = -2 ;                         /* n is a dead element */
+    Cp [n] = -1 ;                           /* n is a root of assembly tree */
+    w [n] = 0 ;                             /* n is a dead element */
     /* --- Initialize degree lists ------------------------------------------ */
     for (i = 0 ; i < n ; i++)
     {
-	d = degree [i] ;
-	if (d == 0)			    /* node i is empty */
-	{
-	    elen [i] = -2 ;		    /* element i is dead */
-	    nel++ ;
-	    Cp [i] = -1 ;		    /* i is a root of assembly tree */
-	    w [i] = 0 ;
-	}
-	else if (d > dense)		    /* node i is dense */
-	{
-	    nv [i] = 0 ;		    /* absorb i into element n */
-	    elen [i] = -1 ;		    /* node i is dead */
-	    nel++ ;
-	    Cp [i] = CS_FLIP (n) ;
-	    nv [n]++ ;
-	}
-	else
-	{
-	    if (head [d] != -1) last [head [d]] = i ;
-	    next [i] = head [d] ;	    /* put node i in degree list d */
-	    head [d] = i ;
-	}
+        d = degree [i] ;
+        if (d == 0)                         /* node i is empty */
+        {
+            elen [i] = -2 ;                 /* element i is dead */
+            nel++ ;
+            Cp [i] = -1 ;                   /* i is a root of assembly tree */
+            w [i] = 0 ;
+        }
+        else if (d > dense)                 /* node i is dense */
+        {
+            nv [i] = 0 ;                    /* absorb i into element n */
+            elen [i] = -1 ;                 /* node i is dead */
+            nel++ ;
+            Cp [i] = CS_FLIP (n) ;
+            nv [n]++ ;
+        }
+        else
+        {
+            if (head [d] != -1) last [head [d]] = i ;
+            next [i] = head [d] ;           /* put node i in degree list d */
+            head [d] = i ;
+        }
     }
-    while (nel < n)			    /* while (selecting pivots) do */
+    while (nel < n)                         /* while (selecting pivots) do */
     {
-	/* --- Select node of minimum approximate degree -------------------- */
-	for (k = -1 ; mindeg < n && (k = head [mindeg]) == -1 ; mindeg++) ;
-	if (next [k] != -1) last [next [k]] = -1 ;
-	head [mindeg] = next [k] ;	    /* remove k from degree list */
-	elenk = elen [k] ;		    /* elenk = |Ek| */
-	nvk = nv [k] ;			    /* # of nodes k represents */
-	nel += nvk ;			    /* nv[k] nodes of A eliminated */
-	/* --- Garbage collection ------------------------------------------- */
-	if (elenk > 0 && cnz + mindeg >= nzmax)
-	{
-	    for (j = 0 ; j < n ; j++)
-	    {
-		if ((p = Cp [j]) >= 0)	    /* j is a live node or element */
-		{
-		    Cp [j] = Ci [p] ;	    /* save first entry of object */
-		    Ci [p] = CS_FLIP (j) ;  /* first entry is now CS_FLIP(j) */
-		}
-	    }
-	    for (q = 0, p = 0 ; p < cnz ; ) /* scan all of memory */
-	    {
-		if ((j = CS_FLIP (Ci [p++])) >= 0)  /* found object j */
-		{
-		    Ci [q] = Cp [j] ;	    /* restore first entry of object */
-		    Cp [j] = q++ ;	    /* new pointer to object j */
-		    for (k3 = 0 ; k3 < len [j]-1 ; k3++) Ci [q++] = Ci [p++] ;
-		}
-	    }
-	    cnz = q ;			    /* Ci [cnz...nzmax-1] now free */
-	}
-	/* --- Construct new element ---------------------------------------- */
-	dk = 0 ;
-	nv [k] = -nvk ;			    /* flag k as in Lk */
-	p = Cp [k] ;
-	pk1 = (elenk == 0) ? p : cnz ;	    /* do in place if elen[k] == 0 */
-	pk2 = pk1 ;
-	for (k1 = 1 ; k1 <= elenk + 1 ; k1++)
-	{
-	    if (k1 > elenk)
-	    {
-		e = k ;			    /* search the nodes in k */
-		pj = p ;		    /* list of nodes starts at Ci[pj]*/
-		ln = len [k] - elenk ;	    /* length of list of nodes in k */
-	    }
-	    else
-	    {
-		e = Ci [p++] ;		    /* search the nodes in e */
-		pj = Cp [e] ;
-		ln = len [e] ;		    /* length of list of nodes in e */
-	    }
-	    for (k2 = 1 ; k2 <= ln ; k2++)
-	    {
-		i = Ci [pj++] ;
-		if ((nvi = nv [i]) <= 0) continue ; /* node i dead, or seen */
-		dk += nvi ;		    /* degree[Lk] += size of node i */
-		nv [i] = -nvi ;		    /* negate nv[i] to denote i in Lk*/
-		Ci [pk2++] = i ;	    /* place i in Lk */
-		if (next [i] != -1) last [next [i]] = last [i] ;
-		if (last [i] != -1)	    /* remove i from degree list */
-		{
-		    next [last [i]] = next [i] ;
-		}
-		else
-		{
-		    head [degree [i]] = next [i] ;
-		}
-	    }
-	    if (e != k)
-	    {
-		Cp [e] = CS_FLIP (k) ;	    /* absorb e into k */
-		w [e] = 0 ;		    /* e is now a dead element */
-	    }
-	}
-	if (elenk != 0) cnz = pk2 ;	    /* Ci [cnz...nzmax] is free */
-	degree [k] = dk ;		    /* external degree of k - |Lk\i| */
-	Cp [k] = pk1 ;			    /* element k is in Ci[pk1..pk2-1] */
-	len [k] = pk2 - pk1 ;
-	elen [k] = -2 ;			    /* k is now an element */
-	/* --- Find set differences ----------------------------------------- */
-	mark = cs_wclear (mark, lemax, w, n) ;	/* clear w if necessary */
-	for (pk = pk1 ; pk < pk2 ; pk++)    /* scan 1: find |Le\Lk| */
-	{
-	    i = Ci [pk] ;
-	    if ((eln = elen [i]) <= 0) continue ;/* skip if elen[i] empty */
-	    nvi = -nv [i] ;			 /* nv [i] was negated */
-	    wnvi = mark - nvi ;
-	    for (p = Cp [i] ; p <= Cp [i] + eln - 1 ; p++)  /* scan Ei */
-	    {
-		e = Ci [p] ;
-		if (w [e] >= mark)
-		{
-		    w [e] -= nvi ;	    /* decrement |Le\Lk| */
-		}
-		else if (w [e] != 0)	    /* ensure e is a live element */
-		{
-		    w [e] = degree [e] + wnvi ;	/* 1st time e seen in scan 1 */
-		}
-	    }
-	}
-	/* --- Degree update ------------------------------------------------ */
-	for (pk = pk1 ; pk < pk2 ; pk++)    /* scan2: degree update */
-	{
-	    i = Ci [pk] ;		    /* consider node i in Lk */
-	    p1 = Cp [i] ;
-	    p2 = p1 + elen [i] - 1 ;
-	    pn = p1 ;
-	    for (h = 0, d = 0, p = p1 ; p <= p2 ; p++)    /* scan Ei */
-	    {
-		e = Ci [p] ;
-		if (w [e] != 0)		    /* e is an unabsorbed element */
-		{
-		    dext = w [e] - mark ;   /* dext = |Le\Lk| */
-		    if (dext > 0)
-		    {
-			d += dext ;	    /* sum up the set differences */
-			Ci [pn++] = e ;	    /* keep e in Ei */
-			h += e ;	    /* compute the hash of node i */
-		    }
-		    else
-		    {
-			Cp [e] = CS_FLIP (k) ;	/* aggressive absorb. e->k */
-			w [e] = 0 ;		/* e is a dead element */
-		    }
-		}
-	    }
-	    elen [i] = pn - p1 + 1 ;	    /* elen[i] = |Ei| */
-	    p3 = pn ;
-	    p4 = p1 + len [i] ;
-	    for (p = p2 + 1 ; p < p4 ; p++) /* prune edges in Ai */
-	    {
-		j = Ci [p] ;
-		if ((nvj = nv [j]) <= 0) continue ; /* node j dead or in Lk */
-		d += nvj ;		    /* degree(i) += |j| */
-		Ci [pn++] = j ;		    /* place j in node list of i */
-		h += j ;		    /* compute hash for node i */
-	    }
-	    if (d == 0)			    /* check for mass elimination */
-	    {
-		Cp [i] = CS_FLIP (k) ;	    /* absorb i into k */
-		nvi = -nv [i] ;
-		dk -= nvi ;		    /* |Lk| -= |i| */
-		nvk += nvi ;		    /* |k| += nv[i] */
-		nel += nvi ;
-		nv [i] = 0 ;
-		elen [i] = -1 ;		    /* node i is dead */
-	    }
-	    else
-	    {
-		degree [i] = CS_MIN (degree [i], d) ;	/* update degree(i) */
-		Ci [pn] = Ci [p3] ;	    /* move first node to end */
-		Ci [p3] = Ci [p1] ;	    /* move 1st el. to end of Ei */
-		Ci [p1] = k ;		    /* add k as 1st element in of Ei */
-		len [i] = pn - p1 + 1 ;	    /* new len of adj. list of node i */
-		h %= n ;		    /* finalize hash of i */
-		next [i] = hhead [h] ;	    /* place i in hash bucket */
-		hhead [h] = i ;
-		last [i] = h ;		    /* save hash of i in last[i] */
-	    }
-	}				    /* scan2 is done */
-	degree [k] = dk ;		    /* finalize |Lk| */
-	lemax = CS_MAX (lemax, dk) ;
-	mark = cs_wclear (mark+lemax, lemax, w, n) ;	/* clear w */
-	/* --- Supernode detection ------------------------------------------ */
-	for (pk = pk1 ; pk < pk2 ; pk++)
-	{
-	    i = Ci [pk] ;
-	    if (nv [i] >= 0) continue ;		/* skip if i is dead */
-	    h = last [i] ;			/* scan hash bucket of node i */
-	    i = hhead [h] ;
-	    hhead [h] = -1 ;			/* hash bucket will be empty */
-	    for ( ; i != -1 && next [i] != -1 ; i = next [i], mark++)
-	    {
-		ln = len [i] ;
-		eln = elen [i] ;
-		for (p = Cp [i]+1 ; p <= Cp [i] + ln-1 ; p++) w [Ci [p]] = mark;
-		jlast = i ;
-		for (j = next [i] ; j != -1 ; )	/* compare i with all j */
-		{
-		    ok = (len [j] == ln) && (elen [j] == eln) ;
-		    for (p = Cp [j] + 1 ; ok && p <= Cp [j] + ln - 1 ; p++)
-		    {
-			if (w [Ci [p]] != mark) ok = 0 ;    /* compare i and j*/
-		    }
-		    if (ok)			/* i and j are identical */
-		    {
-			Cp [j] = CS_FLIP (i) ;	/* absorb j into i */
-			nv [i] += nv [j] ;
-			nv [j] = 0 ;
-			elen [j] = -1 ;		/* node j is dead */
-			j = next [j] ;		/* delete j from hash bucket */
-			next [jlast] = j ;
-		    }
-		    else
-		    {
-			jlast = j ;		/* j and i are different */
-			j = next [j] ;
-		    }
-		}
-	    }
-	}
-	/* --- Finalize new element------------------------------------------ */
-	for (p = pk1, pk = pk1 ; pk < pk2 ; pk++)   /* finalize Lk */
-	{
-	    i = Ci [pk] ;
-	    if ((nvi = -nv [i]) <= 0) continue ;/* skip if i is dead */
-	    nv [i] = nvi ;			/* restore nv[i] */
-	    d = degree [i] + dk - nvi ;		/* compute external degree(i) */
-	    d = CS_MIN (d, n - nel - nvi) ;
-	    if (head [d] != -1) last [head [d]] = i ;
-	    next [i] = head [d] ;		/* put i back in degree list */
-	    last [i] = -1 ;
-	    head [d] = i ;
-	    mindeg = CS_MIN (mindeg, d) ;	/* find new minimum degree */
-	    degree [i] = d ;
-	    Ci [p++] = i ;			/* place i in Lk */
-	}
-	nv [k] = nvk ;			    /* # nodes absorbed into k */
-	if ((len [k] = p-pk1) == 0)	    /* length of adj list of element k*/
-	{
-	    Cp [k] = -1 ;		    /* k is a root of the tree */
-	    w [k] = 0 ;			    /* k is now a dead element */
-	}
-	if (elenk != 0) cnz = p ;	    /* free unused space in Lk */
+        /* --- Select node of minimum approximate degree -------------------- */
+        for (k = -1 ; mindeg < n && (k = head [mindeg]) == -1 ; mindeg++) ;
+        if (next [k] != -1) last [next [k]] = -1 ;
+        head [mindeg] = next [k] ;          /* remove k from degree list */
+        elenk = elen [k] ;                  /* elenk = |Ek| */
+        nvk = nv [k] ;                      /* # of nodes k represents */
+        nel += nvk ;                        /* nv[k] nodes of A eliminated */
+        /* --- Garbage collection ------------------------------------------- */
+        if (elenk > 0 && cnz + mindeg >= nzmax)
+        {
+            for (j = 0 ; j < n ; j++)
+            {
+                if ((p = Cp [j]) >= 0)      /* j is a live node or element */
+                {
+                    Cp [j] = Ci [p] ;       /* save first entry of object */
+                    Ci [p] = CS_FLIP (j) ;  /* first entry is now CS_FLIP(j) */
+                }
+            }
+            for (q = 0, p = 0 ; p < cnz ; ) /* scan all of memory */
+            {
+                if ((j = CS_FLIP (Ci [p++])) >= 0)  /* found object j */
+                {
+                    Ci [q] = Cp [j] ;       /* restore first entry of object */
+                    Cp [j] = q++ ;          /* new pointer to object j */
+                    for (k3 = 0 ; k3 < len [j]-1 ; k3++) Ci [q++] = Ci [p++] ;
+                }
+            }
+            cnz = q ;                       /* Ci [cnz...nzmax-1] now free */
+        }
+        /* --- Construct new element ---------------------------------------- */
+        dk = 0 ;
+        nv [k] = -nvk ;                     /* flag k as in Lk */
+        p = Cp [k] ;
+        pk1 = (elenk == 0) ? p : cnz ;      /* do in place if elen[k] == 0 */
+        pk2 = pk1 ;
+        for (k1 = 1 ; k1 <= elenk + 1 ; k1++)
+        {
+            if (k1 > elenk)
+            {
+                e = k ;                     /* search the nodes in k */
+                pj = p ;                    /* list of nodes starts at Ci[pj]*/
+                ln = len [k] - elenk ;      /* length of list of nodes in k */
+            }
+            else
+            {
+                e = Ci [p++] ;              /* search the nodes in e */
+                pj = Cp [e] ;
+                ln = len [e] ;              /* length of list of nodes in e */
+            }
+            for (k2 = 1 ; k2 <= ln ; k2++)
+            {
+                i = Ci [pj++] ;
+                if ((nvi = nv [i]) <= 0) continue ; /* node i dead, or seen */
+                dk += nvi ;                 /* degree[Lk] += size of node i */
+                nv [i] = -nvi ;             /* negate nv[i] to denote i in Lk*/
+                Ci [pk2++] = i ;            /* place i in Lk */
+                if (next [i] != -1) last [next [i]] = last [i] ;
+                if (last [i] != -1)         /* remove i from degree list */
+                {
+                    next [last [i]] = next [i] ;
+                }
+                else
+                {
+                    head [degree [i]] = next [i] ;
+                }
+            }
+            if (e != k)
+            {
+                Cp [e] = CS_FLIP (k) ;      /* absorb e into k */
+                w [e] = 0 ;                 /* e is now a dead element */
+            }
+        }
+        if (elenk != 0) cnz = pk2 ;         /* Ci [cnz...nzmax] is free */
+        degree [k] = dk ;                   /* external degree of k - |Lk\i| */
+        Cp [k] = pk1 ;                      /* element k is in Ci[pk1..pk2-1] */
+        len [k] = pk2 - pk1 ;
+        elen [k] = -2 ;                     /* k is now an element */
+        /* --- Find set differences ----------------------------------------- */
+        mark = cs_wclear (mark, lemax, w, n) ;  /* clear w if necessary */
+        for (pk = pk1 ; pk < pk2 ; pk++)    /* scan 1: find |Le\Lk| */
+        {
+            i = Ci [pk] ;
+            if ((eln = elen [i]) <= 0) continue ;/* skip if elen[i] empty */
+            nvi = -nv [i] ;                      /* nv [i] was negated */
+            wnvi = mark - nvi ;
+            for (p = Cp [i] ; p <= Cp [i] + eln - 1 ; p++)  /* scan Ei */
+            {
+                e = Ci [p] ;
+                if (w [e] >= mark)
+                {
+                    w [e] -= nvi ;          /* decrement |Le\Lk| */
+                }
+                else if (w [e] != 0)        /* ensure e is a live element */
+                {
+                    w [e] = degree [e] + wnvi ; /* 1st time e seen in scan 1 */
+                }
+            }
+        }
+        /* --- Degree update ------------------------------------------------ */
+        for (pk = pk1 ; pk < pk2 ; pk++)    /* scan2: degree update */
+        {
+            i = Ci [pk] ;                   /* consider node i in Lk */
+            p1 = Cp [i] ;
+            p2 = p1 + elen [i] - 1 ;
+            pn = p1 ;
+            for (h = 0, d = 0, p = p1 ; p <= p2 ; p++)    /* scan Ei */
+            {
+                e = Ci [p] ;
+                if (w [e] != 0)             /* e is an unabsorbed element */
+                {
+                    dext = w [e] - mark ;   /* dext = |Le\Lk| */
+                    if (dext > 0)
+                    {
+                        d += dext ;         /* sum up the set differences */
+                        Ci [pn++] = e ;     /* keep e in Ei */
+                        h += e ;            /* compute the hash of node i */
+                    }
+                    else
+                    {
+                        Cp [e] = CS_FLIP (k) ;  /* aggressive absorb. e->k */
+                        w [e] = 0 ;             /* e is a dead element */
+                    }
+                }
+            }
+            elen [i] = pn - p1 + 1 ;        /* elen[i] = |Ei| */
+            p3 = pn ;
+            p4 = p1 + len [i] ;
+            for (p = p2 + 1 ; p < p4 ; p++) /* prune edges in Ai */
+            {
+                j = Ci [p] ;
+                if ((nvj = nv [j]) <= 0) continue ; /* node j dead or in Lk */
+                d += nvj ;                  /* degree(i) += |j| */
+                Ci [pn++] = j ;             /* place j in node list of i */
+                h += j ;                    /* compute hash for node i */
+            }
+            if (d == 0)                     /* check for mass elimination */
+            {
+                Cp [i] = CS_FLIP (k) ;      /* absorb i into k */
+                nvi = -nv [i] ;
+                dk -= nvi ;                 /* |Lk| -= |i| */
+                nvk += nvi ;                /* |k| += nv[i] */
+                nel += nvi ;
+                nv [i] = 0 ;
+                elen [i] = -1 ;             /* node i is dead */
+            }
+            else
+            {
+                degree [i] = CS_MIN (degree [i], d) ;   /* update degree(i) */
+                Ci [pn] = Ci [p3] ;         /* move first node to end */
+                Ci [p3] = Ci [p1] ;         /* move 1st el. to end of Ei */
+                Ci [p1] = k ;               /* add k as 1st element in of Ei */
+                len [i] = pn - p1 + 1 ;     /* new len of adj. list of node i */
+                h = ((h<0) ? (-h):h) % n ;  /* finalize hash of i */
+                next [i] = hhead [h] ;      /* place i in hash bucket */
+                hhead [h] = i ;
+                last [i] = h ;              /* save hash of i in last[i] */
+            }
+        }                                   /* scan2 is done */
+        degree [k] = dk ;                   /* finalize |Lk| */
+        lemax = CS_MAX (lemax, dk) ;
+        mark = cs_wclear (mark+lemax, lemax, w, n) ;    /* clear w */
+        /* --- Supernode detection ------------------------------------------ */
+        for (pk = pk1 ; pk < pk2 ; pk++)
+        {
+            i = Ci [pk] ;
+            if (nv [i] >= 0) continue ;         /* skip if i is dead */
+            h = last [i] ;                      /* scan hash bucket of node i */
+            i = hhead [h] ;
+            hhead [h] = -1 ;                    /* hash bucket will be empty */
+            for ( ; i != -1 && next [i] != -1 ; i = next [i], mark++)
+            {
+                ln = len [i] ;
+                eln = elen [i] ;
+                for (p = Cp [i]+1 ; p <= Cp [i] + ln-1 ; p++) w [Ci [p]] = mark;
+                jlast = i ;
+                for (j = next [i] ; j != -1 ; ) /* compare i with all j */
+                {
+                    ok = (len [j] == ln) && (elen [j] == eln) ;
+                    for (p = Cp [j] + 1 ; ok && p <= Cp [j] + ln - 1 ; p++)
+                    {
+                        if (w [Ci [p]] != mark) ok = 0 ;    /* compare i and j*/
+                    }
+                    if (ok)                     /* i and j are identical */
+                    {
+                        Cp [j] = CS_FLIP (i) ;  /* absorb j into i */
+                        nv [i] += nv [j] ;
+                        nv [j] = 0 ;
+                        elen [j] = -1 ;         /* node j is dead */
+                        j = next [j] ;          /* delete j from hash bucket */
+                        next [jlast] = j ;
+                    }
+                    else
+                    {
+                        jlast = j ;             /* j and i are different */
+                        j = next [j] ;
+                    }
+                }
+            }
+        }
+        /* --- Finalize new element------------------------------------------ */
+        for (p = pk1, pk = pk1 ; pk < pk2 ; pk++)   /* finalize Lk */
+        {
+            i = Ci [pk] ;
+            if ((nvi = -nv [i]) <= 0) continue ;/* skip if i is dead */
+            nv [i] = nvi ;                      /* restore nv[i] */
+            d = degree [i] + dk - nvi ;         /* compute external degree(i) */
+            d = CS_MIN (d, n - nel - nvi) ;
+            if (head [d] != -1) last [head [d]] = i ;
+            next [i] = head [d] ;               /* put i back in degree list */
+            last [i] = -1 ;
+            head [d] = i ;
+            mindeg = CS_MIN (mindeg, d) ;       /* find new minimum degree */
+            degree [i] = d ;
+            Ci [p++] = i ;                      /* place i in Lk */
+        }
+        nv [k] = nvk ;                      /* # nodes absorbed into k */
+        if ((len [k] = p-pk1) == 0)         /* length of adj list of element k*/
+        {
+            Cp [k] = -1 ;                   /* k is a root of the tree */
+            w [k] = 0 ;                     /* k is now a dead element */
+        }
+        if (elenk != 0) cnz = p ;           /* free unused space in Lk */
     }
     /* --- Postordering ----------------------------------------------------- */
     for (i = 0 ; i < n ; i++) Cp [i] = CS_FLIP (Cp [i]) ;/* fix assembly tree */
     for (j = 0 ; j <= n ; j++) head [j] = -1 ;
-    for (j = n ; j >= 0 ; j--)		    /* place unordered nodes in lists */
+    for (j = n ; j >= 0 ; j--)              /* place unordered nodes in lists */
     {
-	if (nv [j] > 0) continue ;	    /* skip if j is an element */
-	next [j] = head [Cp [j]] ;	    /* place j in list of its parent */
-	head [Cp [j]] = j ;
+        if (nv [j] > 0) continue ;          /* skip if j is an element */
+        next [j] = head [Cp [j]] ;          /* place j in list of its parent */
+        head [Cp [j]] = j ;
     }
-    for (e = n ; e >= 0 ; e--)		    /* place elements in lists */
+    for (e = n ; e >= 0 ; e--)              /* place elements in lists */
     {
-	if (nv [e] <= 0) continue ;	    /* skip unless e is an element */
-	if (Cp [e] != -1)
-	{
-	    next [e] = head [Cp [e]] ;	    /* place e in list of its parent */
-	    head [Cp [e]] = e ;
-	}
+        if (nv [e] <= 0) continue ;         /* skip unless e is an element */
+        if (Cp [e] != -1)
+        {
+            next [e] = head [Cp [e]] ;      /* place e in list of its parent */
+            head [Cp [e]] = e ;
+        }
     }
-    for (k = 0, i = 0 ; i <= n ; i++)	    /* postorder the assembly tree */
+    for (k = 0, i = 0 ; i <= n ; i++)       /* postorder the assembly tree */
     {
-	if (Cp [i] == -1) k = cs_tdfs (i, k, head, next, P, w) ;
+        if (Cp [i] == -1) k = cs_tdfs (i, k, head, next, P, w) ;
     }
     return (cs_idone (P, C, W, 1)) ;
 }
diff --git a/CSparse/Source/cs_chol.c b/CSparse/Source/cs_chol.c
index 5eb12b3..8207a7c 100644
--- a/CSparse/Source/cs_chol.c
+++ b/CSparse/Source/cs_chol.c
@@ -3,17 +3,17 @@
 csn *cs_chol (const cs *A, const css *S)
 {
     double d, lki, *Lx, *x, *Cx ;
-    int top, i, p, k, n, *Li, *Lp, *cp, *pinv, *s, *c, *parent, *Cp, *Ci ;
+    csi top, i, p, k, n, *Li, *Lp, *cp, *pinv, *s, *c, *parent, *Cp, *Ci ;
     cs *L, *C, *E ;
     csn *N ;
     if (!CS_CSC (A) || !S || !S->cp || !S->parent) return (NULL) ;
     n = A->n ;
-    N = cs_calloc (1, sizeof (csn)) ;	    /* allocate result */
-    c = cs_malloc (2*n, sizeof (int)) ;	    /* get int workspace */
+    N = cs_calloc (1, sizeof (csn)) ;       /* allocate result */
+    c = cs_malloc (2*n, sizeof (csi)) ;     /* get csi workspace */
     x = cs_malloc (n, sizeof (double)) ;    /* get double workspace */
     cp = S->cp ; pinv = S->pinv ; parent = S->parent ;
     C = pinv ? cs_symperm (A, pinv, 1) : ((cs *) A) ;
-    E = pinv ? C : NULL ;	    /* E is alias for A, or a copy E=A(p,p) */
+    E = pinv ? C : NULL ;           /* E is alias for A, or a copy E=A(p,p) */
     if (!N || !c || !x || !C) return (cs_ndone (N, E, c, x, 0)) ;
     s = c + n ;
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
@@ -21,38 +21,38 @@ csn *cs_chol (const cs *A, const css *S)
     if (!L) return (cs_ndone (N, E, c, x, 0)) ;
     Lp = L->p ; Li = L->i ; Lx = L->x ;
     for (k = 0 ; k < n ; k++) Lp [k] = c [k] = cp [k] ;
-    for (k = 0 ; k < n ; k++)	    /* compute L(:,k) for L*L' = C */
+    for (k = 0 ; k < n ; k++)       /* compute L(k,:) for L*L' = C */
     {
-	/* --- Nonzero pattern of L(k,:) ------------------------------------ */
-	top = cs_ereach (C, k, parent, s, c) ;	    /* find pattern of L(k,:) */
-	x [k] = 0 ;				    /* x (0:k) is now zero */
-	for (p = Cp [k] ; p < Cp [k+1] ; p++)	    /* x = full(triu(C(:,k))) */
-	{
-	    if (Ci [p] <= k) x [Ci [p]] = Cx [p] ;
-	}
-	d = x [k] ;			/* d = C(k,k) */
-	x [k] = 0 ;			/* clear x for k+1st iteration */
-	/* --- Triangular solve --------------------------------------------- */
-	for ( ; top < n ; top++)    /* solve L(0:k-1,0:k-1) * x = C(:,k) */
-	{
-	    i = s [top] ;		/* s [top..n-1] is pattern of L(k,:) */
-	    lki = x [i] / Lx [Lp [i]] ; /* L(k,i) = x (i) / L(i,i) */
-	    x [i] = 0 ;			/* clear x for k+1st iteration */
-	    for (p = Lp [i] + 1 ; p < c [i] ; p++)
-	    {
-		x [Li [p]] -= Lx [p] * lki ;
-	    }
-	    d -= lki * lki ;		/* d = d - L(k,i)*L(k,i) */
-	    p = c [i]++ ;
-	    Li [p] = k ;		/* store L(k,i) in column i */
-	    Lx [p] = lki ;
-	}
-	/* --- Compute L(k,k) ----------------------------------------------- */
-	if (d <= 0) return (cs_ndone (N, E, c, x, 0)) ; /* not pos def */
-	p = c [k]++ ;
-	Li [p] = k ;		    /* store L(k,k) = sqrt (d) in column k */
-	Lx [p] = sqrt (d) ;
+        /* --- Nonzero pattern of L(k,:) ------------------------------------ */
+        top = cs_ereach (C, k, parent, s, c) ;      /* find pattern of L(k,:) */
+        x [k] = 0 ;                                 /* x (0:k) is now zero */
+        for (p = Cp [k] ; p < Cp [k+1] ; p++)       /* x = full(triu(C(:,k))) */
+        {
+            if (Ci [p] <= k) x [Ci [p]] = Cx [p] ;
+        }
+        d = x [k] ;                     /* d = C(k,k) */
+        x [k] = 0 ;                     /* clear x for k+1st iteration */
+        /* --- Triangular solve --------------------------------------------- */
+        for ( ; top < n ; top++)    /* solve L(0:k-1,0:k-1) * x = C(:,k) */
+        {
+            i = s [top] ;               /* s [top..n-1] is pattern of L(k,:) */
+            lki = x [i] / Lx [Lp [i]] ; /* L(k,i) = x (i) / L(i,i) */
+            x [i] = 0 ;                 /* clear x for k+1st iteration */
+            for (p = Lp [i] + 1 ; p < c [i] ; p++)
+            {
+                x [Li [p]] -= Lx [p] * lki ;
+            }
+            d -= lki * lki ;            /* d = d - L(k,i)*L(k,i) */
+            p = c [i]++ ;
+            Li [p] = k ;                /* store L(k,i) in column i */
+            Lx [p] = lki ;
+        }
+        /* --- Compute L(k,k) ----------------------------------------------- */
+        if (d <= 0) return (cs_ndone (N, E, c, x, 0)) ; /* not pos def */
+        p = c [k]++ ;
+        Li [p] = k ;                /* store L(k,k) = sqrt (d) in column k */
+        Lx [p] = sqrt (d) ;
     }
-    Lp [n] = cp [n] ;		    /* finalize L */
+    Lp [n] = cp [n] ;               /* finalize L */
     return (cs_ndone (N, E, c, x, 1)) ; /* success: free E,s,x; return N */
 }
diff --git a/CSparse/Source/cs_cholsol.c b/CSparse/Source/cs_cholsol.c
index f3cf414..b168b14 100644
--- a/CSparse/Source/cs_cholsol.c
+++ b/CSparse/Source/cs_cholsol.c
@@ -1,23 +1,23 @@
 #include "cs.h"
 /* x=A\b where A is symmetric positive definite; b overwritten with solution */
-int cs_cholsol (int order, const cs *A, double *b)
+csi cs_cholsol (csi order, const cs *A, double *b)
 {
     double *x ;
     css *S ;
     csn *N ;
-    int n, ok ;
-    if (!CS_CSC (A) || !b) return (0) ;	    /* check inputs */
+    csi n, ok ;
+    if (!CS_CSC (A) || !b) return (0) ;     /* check inputs */
     n = A->n ;
-    S = cs_schol (order, A) ;		    /* ordering and symbolic analysis */
-    N = cs_chol (A, S) ;		    /* numeric Cholesky factorization */
+    S = cs_schol (order, A) ;               /* ordering and symbolic analysis */
+    N = cs_chol (A, S) ;                    /* numeric Cholesky factorization */
     x = cs_malloc (n, sizeof (double)) ;    /* get workspace */
     ok = (S && N && x) ;
     if (ok)
     {
-	cs_ipvec (S->pinv, b, x, n) ;	/* x = P*b */
-	cs_lsolve (N->L, x) ;		/* x = L\x */
-	cs_ltsolve (N->L, x) ;		/* x = L'\x */
-	cs_pvec (S->pinv, x, b, n) ;	/* b = P'*x */
+        cs_ipvec (S->pinv, b, x, n) ;   /* x = P*b */
+        cs_lsolve (N->L, x) ;           /* x = L\x */
+        cs_ltsolve (N->L, x) ;          /* x = L'\x */
+        cs_pvec (S->pinv, x, b, n) ;    /* b = P'*x */
     }
     cs_free (x) ;
     cs_sfree (S) ;
diff --git a/CSparse/Source/cs_compress.c b/CSparse/Source/cs_compress.c
index d18e840..d193492 100644
--- a/CSparse/Source/cs_compress.c
+++ b/CSparse/Source/cs_compress.c
@@ -2,21 +2,21 @@
 /* C = compressed-column form of a triplet matrix T */
 cs *cs_compress (const cs *T)
 {
-    int m, n, nz, p, k, *Cp, *Ci, *w, *Ti, *Tj ;
+    csi m, n, nz, p, k, *Cp, *Ci, *w, *Ti, *Tj ;
     double *Cx, *Tx ;
     cs *C ;
-    if (!CS_TRIPLET (T)) return (NULL) ;		/* check inputs */
+    if (!CS_TRIPLET (T)) return (NULL) ;                /* check inputs */
     m = T->m ; n = T->n ; Ti = T->i ; Tj = T->p ; Tx = T->x ; nz = T->nz ;
-    C = cs_spalloc (m, n, nz, Tx != NULL, 0) ;		/* allocate result */
-    w = cs_calloc (n, sizeof (int)) ;			/* get workspace */
-    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;	/* out of memory */
+    C = cs_spalloc (m, n, nz, Tx != NULL, 0) ;          /* allocate result */
+    w = cs_calloc (n, sizeof (csi)) ;                   /* get workspace */
+    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;    /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    for (k = 0 ; k < nz ; k++) w [Tj [k]]++ ;		/* column counts */
-    cs_cumsum (Cp, w, n) ;				/* column pointers */
+    for (k = 0 ; k < nz ; k++) w [Tj [k]]++ ;           /* column counts */
+    cs_cumsum (Cp, w, n) ;                              /* column pointers */
     for (k = 0 ; k < nz ; k++)
     {
-	Ci [p = w [Tj [k]]++] = Ti [k] ;    /* A(i,j) is the pth entry in C */
-	if (Cx) Cx [p] = Tx [k] ;
+        Ci [p = w [Tj [k]]++] = Ti [k] ;    /* A(i,j) is the pth entry in C */
+        if (Cx) Cx [p] = Tx [k] ;
     }
-    return (cs_done (C, w, NULL, 1)) ;	    /* success; free w and return C */
+    return (cs_done (C, w, NULL, 1)) ;      /* success; free w and return C */
 }
diff --git a/CSparse/Source/cs_counts.c b/CSparse/Source/cs_counts.c
index ff32b6f..c9b7e80 100644
--- a/CSparse/Source/cs_counts.c
+++ b/CSparse/Source/cs_counts.c
@@ -2,60 +2,60 @@
 /* column counts of LL'=A or LL'=A'A, given parent & post ordering */
 #define HEAD(k,j) (ata ? head [k] : j)
 #define NEXT(J)   (ata ? next [J] : -1)
-static void init_ata (cs *AT, const int *post, int *w, int **head, int **next)
+static void init_ata (cs *AT, const csi *post, csi *w, csi **head, csi **next)
 {
-    int i, k, p, m = AT->n, n = AT->m, *ATp = AT->p, *ATi = AT->i ;
+    csi i, k, p, m = AT->n, n = AT->m, *ATp = AT->p, *ATi = AT->i ;
     *head = w+4*n, *next = w+5*n+1 ;
     for (k = 0 ; k < n ; k++) w [post [k]] = k ;    /* invert post */
     for (i = 0 ; i < m ; i++)
     {
-	for (k = n, p = ATp[i] ; p < ATp[i+1] ; p++) k = CS_MIN (k, w [ATi[p]]);
-	(*next) [i] = (*head) [k] ;	/* place row i in linked list k */
-	(*head) [k] = i ;
+        for (k = n, p = ATp[i] ; p < ATp[i+1] ; p++) k = CS_MIN (k, w [ATi[p]]);
+        (*next) [i] = (*head) [k] ;     /* place row i in linked list k */
+        (*head) [k] = i ;
     }
 }
-int *cs_counts (const cs *A, const int *parent, const int *post, int ata)
+csi *cs_counts (const cs *A, const csi *parent, const csi *post, csi ata)
 {
-    int i, j, k, n, m, J, s, p, q, jleaf, *ATp, *ATi, *maxfirst, *prevleaf,
-	*ancestor, *head = NULL, *next = NULL, *colcount, *w, *first, *delta ;
+    csi i, j, k, n, m, J, s, p, q, jleaf, *ATp, *ATi, *maxfirst, *prevleaf,
+        *ancestor, *head = NULL, *next = NULL, *colcount, *w, *first, *delta ;
     cs *AT ;
     if (!CS_CSC (A) || !parent || !post) return (NULL) ;    /* check inputs */
     m = A->m ; n = A->n ;
     s = 4*n + (ata ? (n+m+1) : 0) ;
-    delta = colcount = cs_malloc (n, sizeof (int)) ;	/* allocate result */
-    w = cs_malloc (s, sizeof (int)) ;			/* get workspace */
-    AT = cs_transpose (A, 0) ;				/* AT = A' */
+    delta = colcount = cs_malloc (n, sizeof (csi)) ;    /* allocate result */
+    w = cs_malloc (s, sizeof (csi)) ;                   /* get workspace */
+    AT = cs_transpose (A, 0) ;                          /* AT = A' */
     if (!AT || !colcount || !w) return (cs_idone (colcount, AT, w, 0)) ;
     ancestor = w ; maxfirst = w+n ; prevleaf = w+2*n ; first = w+3*n ;
-    for (k = 0 ; k < s ; k++) w [k] = -1 ;	/* clear workspace w [0..s-1] */
-    for (k = 0 ; k < n ; k++)			/* find first [j] */
+    for (k = 0 ; k < s ; k++) w [k] = -1 ;      /* clear workspace w [0..s-1] */
+    for (k = 0 ; k < n ; k++)                   /* find first [j] */
     {
-	j = post [k] ;
-	delta [j] = (first [j] == -1) ? 1 : 0 ;  /* delta[j]=1 if j is a leaf */
-	for ( ; j != -1 && first [j] == -1 ; j = parent [j]) first [j] = k ;
+        j = post [k] ;
+        delta [j] = (first [j] == -1) ? 1 : 0 ;  /* delta[j]=1 if j is a leaf */
+        for ( ; j != -1 && first [j] == -1 ; j = parent [j]) first [j] = k ;
     }
     ATp = AT->p ; ATi = AT->i ;
     if (ata) init_ata (AT, post, w, &head, &next) ;
     for (i = 0 ; i < n ; i++) ancestor [i] = i ; /* each node in its own set */
     for (k = 0 ; k < n ; k++)
     {
-	j = post [k] ;		/* j is the kth node in postordered etree */
-	if (parent [j] != -1) delta [parent [j]]-- ;	/* j is not a root */
-	for (J = HEAD (k,j) ; J != -1 ; J = NEXT (J))	/* J=j for LL'=A case */
-	{
-	    for (p = ATp [J] ; p < ATp [J+1] ; p++)
-	    {
-		i = ATi [p] ;
-		q = cs_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf);
-		if (jleaf >= 1) delta [j]++ ;   /* A(i,j) is in skeleton */
-		if (jleaf == 2) delta [q]-- ;	/* account for overlap in q */
-	    }
-	}
-	if (parent [j] != -1) ancestor [j] = parent [j] ;
+        j = post [k] ;          /* j is the kth node in postordered etree */
+        if (parent [j] != -1) delta [parent [j]]-- ;    /* j is not a root */
+        for (J = HEAD (k,j) ; J != -1 ; J = NEXT (J))   /* J=j for LL'=A case */
+        {
+            for (p = ATp [J] ; p < ATp [J+1] ; p++)
+            {
+                i = ATi [p] ;
+                q = cs_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf);
+                if (jleaf >= 1) delta [j]++ ;   /* A(i,j) is in skeleton */
+                if (jleaf == 2) delta [q]-- ;   /* account for overlap in q */
+            }
+        }
+        if (parent [j] != -1) ancestor [j] = parent [j] ;
     }
-    for (j = 0 ; j < n ; j++)		/* sum up delta's of each child */
+    for (j = 0 ; j < n ; j++)           /* sum up delta's of each child */
     {
-	if (parent [j] != -1) colcount [parent [j]] += colcount [j] ;
+        if (parent [j] != -1) colcount [parent [j]] += colcount [j] ;
     }
-    return (cs_idone (colcount, AT, w, 1)) ;	/* success: free workspace */
+    return (cs_idone (colcount, AT, w, 1)) ;    /* success: free workspace */
 } 
diff --git a/CSparse/Source/cs_cumsum.c b/CSparse/Source/cs_cumsum.c
index b8b7778..03c1795 100644
--- a/CSparse/Source/cs_cumsum.c
+++ b/CSparse/Source/cs_cumsum.c
@@ -1,17 +1,17 @@
 #include "cs.h"
 /* p [0..n] = cumulative sum of c [0..n-1], and then copy p [0..n-1] into c */
-double cs_cumsum (int *p, int *c, int n)
+double cs_cumsum (csi *p, csi *c, csi n)
 {
-    int i, nz = 0 ;
+    csi i, nz = 0 ;
     double nz2 = 0 ;
-    if (!p || !c) return (-1) ;	    /* check inputs */
+    if (!p || !c) return (-1) ;     /* check inputs */
     for (i = 0 ; i < n ; i++)
     {
-	p [i] = nz ;
-	nz += c [i] ;
-	nz2 += c [i] ;		    /* also in double to avoid int overflow */
-	c [i] = p [i] ;		    /* also copy p[0..n-1] back into c[0..n-1]*/
+        p [i] = nz ;
+        nz += c [i] ;
+        nz2 += c [i] ;              /* also in double to avoid csi overflow */
+        c [i] = p [i] ;             /* also copy p[0..n-1] back into c[0..n-1]*/
     }
     p [n] = nz ;
-    return (nz2) ;		    /* return sum (c [0..n-1]) */
+    return (nz2) ;                  /* return sum (c [0..n-1]) */
 }
diff --git a/CSparse/Source/cs_dfs.c b/CSparse/Source/cs_dfs.c
index 250dcf3..d398e3a 100644
--- a/CSparse/Source/cs_dfs.c
+++ b/CSparse/Source/cs_dfs.c
@@ -1,36 +1,36 @@
 #include "cs.h"
 /* depth-first-search of the graph of a matrix, starting at node j */
-int cs_dfs (int j, cs *G, int top, int *xi, int *pstack, const int *pinv)
+csi cs_dfs (csi j, cs *G, csi top, csi *xi, csi *pstack, const csi *pinv)
 {
-    int i, p, p2, done, jnew, head = 0, *Gp, *Gi ;
-    if (!CS_CSC (G) || !xi || !pstack) return (-1) ;	/* check inputs */
+    csi i, p, p2, done, jnew, head = 0, *Gp, *Gi ;
+    if (!CS_CSC (G) || !xi || !pstack) return (-1) ;    /* check inputs */
     Gp = G->p ; Gi = G->i ;
-    xi [0] = j ;		/* initialize the recursion stack */
+    xi [0] = j ;                /* initialize the recursion stack */
     while (head >= 0)
     {
-	j = xi [head] ;		/* get j from the top of the recursion stack */
-	jnew = pinv ? (pinv [j]) : j ;
-	if (!CS_MARKED (Gp, j))
-	{
-	    CS_MARK (Gp, j) ;	    /* mark node j as visited */
-	    pstack [head] = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew]) ;
-	}
-	done = 1 ;		    /* node j done if no unvisited neighbors */
-	p2 = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew+1]) ;
-	for (p = pstack [head] ; p < p2 ; p++)  /* examine all neighbors of j */
-	{
-	    i = Gi [p] ;	    /* consider neighbor node i */
-	    if (CS_MARKED (Gp, i)) continue ;	/* skip visited node i */
-	    pstack [head] = p ;	    /* pause depth-first search of node j */
-	    xi [++head] = i ;	    /* start dfs at node i */
-	    done = 0 ;		    /* node j is not done */
-	    break ;		    /* break, to start dfs (i) */
-	}
-	if (done)		/* depth-first search at node j is done */
-	{
-	    head-- ;		/* remove j from the recursion stack */
-	    xi [--top] = j ;	/* and place in the output stack */
-	}
+        j = xi [head] ;         /* get j from the top of the recursion stack */
+        jnew = pinv ? (pinv [j]) : j ;
+        if (!CS_MARKED (Gp, j))
+        {
+            CS_MARK (Gp, j) ;       /* mark node j as visited */
+            pstack [head] = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew]) ;
+        }
+        done = 1 ;                  /* node j done if no unvisited neighbors */
+        p2 = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew+1]) ;
+        for (p = pstack [head] ; p < p2 ; p++)  /* examine all neighbors of j */
+        {
+            i = Gi [p] ;            /* consider neighbor node i */
+            if (CS_MARKED (Gp, i)) continue ;   /* skip visited node i */
+            pstack [head] = p ;     /* pause depth-first search of node j */
+            xi [++head] = i ;       /* start dfs at node i */
+            done = 0 ;              /* node j is not done */
+            break ;                 /* break, to start dfs (i) */
+        }
+        if (done)               /* depth-first search at node j is done */
+        {
+            head-- ;            /* remove j from the recursion stack */
+            xi [--top] = j ;    /* and place in the output stack */
+        }
     }
     return (top) ;
 }
diff --git a/CSparse/Source/cs_dmperm.c b/CSparse/Source/cs_dmperm.c
index 29f72f6..d9b54a9 100644
--- a/CSparse/Source/cs_dmperm.c
+++ b/CSparse/Source/cs_dmperm.c
@@ -1,140 +1,140 @@
 #include "cs.h"
 /* breadth-first search for coarse decomposition (C0,C1,R1 or R0,R3,C3) */
-static int cs_bfs (const cs *A, int n, int *wi, int *wj, int *queue,
-    const int *imatch, const int *jmatch, int mark)
+static csi cs_bfs (const cs *A, csi n, csi *wi, csi *wj, csi *queue,
+    const csi *imatch, const csi *jmatch, csi mark)
 {
-    int *Ap, *Ai, head = 0, tail = 0, j, i, p, j2 ;
+    csi *Ap, *Ai, head = 0, tail = 0, j, i, p, j2 ;
     cs *C ;
-    for (j = 0 ; j < n ; j++)		/* place all unmatched nodes in queue */
+    for (j = 0 ; j < n ; j++)           /* place all unmatched nodes in queue */
     {
-	if (imatch [j] >= 0) continue ;	/* skip j if matched */
-	wj [j] = 0 ;			/* j in set C0 (R0 if transpose) */
-	queue [tail++] = j ;		/* place unmatched col j in queue */
+        if (imatch [j] >= 0) continue ; /* skip j if matched */
+        wj [j] = 0 ;                    /* j in set C0 (R0 if transpose) */
+        queue [tail++] = j ;            /* place unmatched col j in queue */
     }
-    if (tail == 0) return (1) ;		/* quick return if no unmatched nodes */
+    if (tail == 0) return (1) ;         /* quick return if no unmatched nodes */
     C = (mark == 1) ? ((cs *) A) : cs_transpose (A, 0) ;
-    if (!C) return (0) ;		/* bfs of C=A' to find R3,C3 from R0 */
+    if (!C) return (0) ;                /* bfs of C=A' to find R3,C3 from R0 */
     Ap = C->p ; Ai = C->i ;
-    while (head < tail)			/* while queue is not empty */
+    while (head < tail)                 /* while queue is not empty */
     {
-	j = queue [head++] ;		/* get the head of the queue */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    if (wi [i] >= 0) continue ;	/* skip if i is marked */
-	    wi [i] = mark ;		/* i in set R1 (C3 if transpose) */
-	    j2 = jmatch [i] ;		/* traverse alternating path to j2 */
-	    if (wj [j2] >= 0) continue ;/* skip j2 if it is marked */
-	    wj [j2] = mark ;		/* j2 in set C1 (R3 if transpose) */
-	    queue [tail++] = j2 ;	/* add j2 to queue */
-	}
+        j = queue [head++] ;            /* get the head of the queue */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (wi [i] >= 0) continue ; /* skip if i is marked */
+            wi [i] = mark ;             /* i in set R1 (C3 if transpose) */
+            j2 = jmatch [i] ;           /* traverse alternating path to j2 */
+            if (wj [j2] >= 0) continue ;/* skip j2 if it is marked */
+            wj [j2] = mark ;            /* j2 in set C1 (R3 if transpose) */
+            queue [tail++] = j2 ;       /* add j2 to queue */
+        }
     }
-    if (mark != 1) cs_spfree (C) ;	/* free A' if it was created */
+    if (mark != 1) cs_spfree (C) ;      /* free A' if it was created */
     return (1) ;
 }
 
 /* collect matched rows and columns into p and q */
-static void cs_matched (int n, const int *wj, const int *imatch, int *p, int *q,
-    int *cc, int *rr, int set, int mark)
+static void cs_matched (csi n, const csi *wj, const csi *imatch, csi *p, csi *q,
+    csi *cc, csi *rr, csi set, csi mark)
 {
-    int kc = cc [set], j ;
-    int kr = rr [set-1] ;
+    csi kc = cc [set], j ;
+    csi kr = rr [set-1] ;
     for (j = 0 ; j < n ; j++)
     {
-	if (wj [j] != mark) continue ;	    /* skip if j is not in C set */
-	p [kr++] = imatch [j] ;
-	q [kc++] = j ;
+        if (wj [j] != mark) continue ;      /* skip if j is not in C set */
+        p [kr++] = imatch [j] ;
+        q [kc++] = j ;
     }
     cc [set+1] = kc ;
     rr [set] = kr ;
 }
 
 /* collect unmatched rows into the permutation vector p */
-static void cs_unmatched (int m, const int *wi, int *p, int *rr, int set)
+static void cs_unmatched (csi m, const csi *wi, csi *p, csi *rr, csi set)
 {
-    int i, kr = rr [set] ;
+    csi i, kr = rr [set] ;
     for (i = 0 ; i < m ; i++) if (wi [i] == 0) p [kr++] = i ;
     rr [set+1] = kr ;
 }
 
 /* return 1 if row i is in R2 */
-static int cs_rprune (int i, int j, double aij, void *other)
+static csi cs_rprune (csi i, csi j, double aij, void *other)
 {
-    int *rr = (int *) other ;
+    csi *rr = (csi *) other ;
     return (i >= rr [1] && i < rr [2]) ;
 }
 
 /* Given A, compute coarse and then fine dmperm */
-csd *cs_dmperm (const cs *A, int seed)
+csd *cs_dmperm (const cs *A, csi seed)
 {
-    int m, n, i, j, k, cnz, nc, *jmatch, *imatch, *wi, *wj, *pinv, *Cp, *Ci,
-	*ps, *rs, nb1, nb2, *p, *q, *cc, *rr, *r, *s, ok ;
+    csi m, n, i, j, k, cnz, nc, *jmatch, *imatch, *wi, *wj, *pinv, *Cp, *Ci,
+        *ps, *rs, nb1, nb2, *p, *q, *cc, *rr, *r, *s, ok ;
     cs *C ;
     csd *D, *scc ;
     /* --- Maximum matching ------------------------------------------------- */
-    if (!CS_CSC (A)) return (NULL) ;		/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;            /* check inputs */
     m = A->m ; n = A->n ;
-    D = cs_dalloc (m, n) ;			/* allocate result */
+    D = cs_dalloc (m, n) ;                      /* allocate result */
     if (!D) return (NULL) ;
     p = D->p ; q = D->q ; r = D->r ; s = D->s ; cc = D->cc ; rr = D->rr ;
-    jmatch = cs_maxtrans (A, seed) ;		/* max transversal */
-    imatch = jmatch + m ;			/* imatch = inverse of jmatch */
+    jmatch = cs_maxtrans (A, seed) ;            /* max transversal */
+    imatch = jmatch + m ;                       /* imatch = inverse of jmatch */
     if (!jmatch) return (cs_ddone (D, NULL, jmatch, 0)) ;
     /* --- Coarse decomposition --------------------------------------------- */
-    wi = r ; wj = s ;				/* use r and s as workspace */
-    for (j = 0 ; j < n ; j++) wj [j] = -1 ;	/* unmark all cols for bfs */
-    for (i = 0 ; i < m ; i++) wi [i] = -1 ;	/* unmark all rows for bfs */
-    cs_bfs (A, n, wi, wj, q, imatch, jmatch, 1) ;	/* find C1, R1 from C0*/
-    ok = cs_bfs (A, m, wj, wi, p, jmatch, imatch, 3) ;	/* find R3, C3 from R0*/
+    wi = r ; wj = s ;                           /* use r and s as workspace */
+    for (j = 0 ; j < n ; j++) wj [j] = -1 ;     /* unmark all cols for bfs */
+    for (i = 0 ; i < m ; i++) wi [i] = -1 ;     /* unmark all rows for bfs */
+    cs_bfs (A, n, wi, wj, q, imatch, jmatch, 1) ;       /* find C1, R1 from C0*/
+    ok = cs_bfs (A, m, wj, wi, p, jmatch, imatch, 3) ;  /* find R3, C3 from R0*/
     if (!ok) return (cs_ddone (D, NULL, jmatch, 0)) ;
-    cs_unmatched (n, wj, q, cc, 0) ;			/* unmatched set C0 */
-    cs_matched (n, wj, imatch, p, q, cc, rr, 1, 1) ;	/* set R1 and C1 */
-    cs_matched (n, wj, imatch, p, q, cc, rr, 2, -1) ;	/* set R2 and C2 */
-    cs_matched (n, wj, imatch, p, q, cc, rr, 3, 3) ;	/* set R3 and C3 */
-    cs_unmatched (m, wi, p, rr, 3) ;			/* unmatched set R0 */
+    cs_unmatched (n, wj, q, cc, 0) ;                    /* unmatched set C0 */
+    cs_matched (n, wj, imatch, p, q, cc, rr, 1, 1) ;    /* set R1 and C1 */
+    cs_matched (n, wj, imatch, p, q, cc, rr, 2, -1) ;   /* set R2 and C2 */
+    cs_matched (n, wj, imatch, p, q, cc, rr, 3, 3) ;    /* set R3 and C3 */
+    cs_unmatched (m, wi, p, rr, 3) ;                    /* unmatched set R0 */
     cs_free (jmatch) ;
     /* --- Fine decomposition ----------------------------------------------- */
-    pinv = cs_pinv (p, m) ;	    /* pinv=p' */
+    pinv = cs_pinv (p, m) ;         /* pinv=p' */
     if (!pinv) return (cs_ddone (D, NULL, NULL, 0)) ;
     C = cs_permute (A, pinv, q, 0) ;/* C=A(p,q) (it will hold A(R2,C2)) */
     cs_free (pinv) ;
     if (!C) return (cs_ddone (D, NULL, NULL, 0)) ;
     Cp = C->p ;
-    nc = cc [3] - cc [2] ;	    /* delete cols C0, C1, and C3 from C */
+    nc = cc [3] - cc [2] ;          /* delete cols C0, C1, and C3 from C */
     if (cc [2] > 0) for (j = cc [2] ; j <= cc [3] ; j++) Cp [j-cc[2]] = Cp [j] ;
     C->n = nc ;
-    if (rr [2] - rr [1] < m)	    /* delete rows R0, R1, and R3 from C */
+    if (rr [2] - rr [1] < m)        /* delete rows R0, R1, and R3 from C */
     {
-	cs_fkeep (C, cs_rprune, rr) ;
-	cnz = Cp [nc] ;
-	Ci = C->i ;
-	if (rr [1] > 0) for (k = 0 ; k < cnz ; k++) Ci [k] -= rr [1] ;
+        cs_fkeep (C, cs_rprune, rr) ;
+        cnz = Cp [nc] ;
+        Ci = C->i ;
+        if (rr [1] > 0) for (k = 0 ; k < cnz ; k++) Ci [k] -= rr [1] ;
     }
     C->m = nc ;
-    scc = cs_scc (C) ;		    /* find strongly connected components of C*/
+    scc = cs_scc (C) ;              /* find strongly connected components of C*/
     if (!scc) return (cs_ddone (D, C, NULL, 0)) ;
     /* --- Combine coarse and fine decompositions --------------------------- */
-    ps = scc->p ;		    /* C(ps,ps) is the permuted matrix */
-    rs = scc->r ;		    /* kth block is rs[k]..rs[k+1]-1 */
-    nb1 = scc->nb  ;		    /* # of blocks of A(R2,C2) */
+    ps = scc->p ;                   /* C(ps,ps) is the permuted matrix */
+    rs = scc->r ;                   /* kth block is rs[k]..rs[k+1]-1 */
+    nb1 = scc->nb  ;                /* # of blocks of A(R2,C2) */
     for (k = 0 ; k < nc ; k++) wj [k] = q [ps [k] + cc [2]] ;
     for (k = 0 ; k < nc ; k++) q [k + cc [2]] = wj [k] ;
     for (k = 0 ; k < nc ; k++) wi [k] = p [ps [k] + rr [1]] ;
     for (k = 0 ; k < nc ; k++) p [k + rr [1]] = wi [k] ;
-    nb2 = 0 ;			    /* create the fine block partitions */
+    nb2 = 0 ;                       /* create the fine block partitions */
     r [0] = s [0] = 0 ;
-    if (cc [2] > 0) nb2++ ;	    /* leading coarse block A (R1, [C0 C1]) */
-    for (k = 0 ; k < nb1 ; k++)	    /* coarse block A (R2,C2) */
+    if (cc [2] > 0) nb2++ ;         /* leading coarse block A (R1, [C0 C1]) */
+    for (k = 0 ; k < nb1 ; k++)     /* coarse block A (R2,C2) */
     {
-	r [nb2] = rs [k] + rr [1] ; /* A (R2,C2) splits into nb1 fine blocks */
-	s [nb2] = rs [k] + cc [2] ;
-	nb2++ ;
+        r [nb2] = rs [k] + rr [1] ; /* A (R2,C2) splits into nb1 fine blocks */
+        s [nb2] = rs [k] + cc [2] ;
+        nb2++ ;
     }
     if (rr [2] < m)
     {
-	r [nb2] = rr [2] ;	    /* trailing coarse block A ([R3 R0], C3) */
-	s [nb2] = cc [3] ;
-	nb2++ ;
+        r [nb2] = rr [2] ;          /* trailing coarse block A ([R3 R0], C3) */
+        s [nb2] = cc [3] ;
+        nb2++ ;
     }
     r [nb2] = m ;
     s [nb2] = n ;
diff --git a/CSparse/Source/cs_droptol.c b/CSparse/Source/cs_droptol.c
index 2afb660..603b0d0 100644
--- a/CSparse/Source/cs_droptol.c
+++ b/CSparse/Source/cs_droptol.c
@@ -1,9 +1,9 @@
 #include "cs.h"
-static int cs_tol (int i, int j, double aij, void *tol)
+static csi cs_tol (csi i, csi j, double aij, void *tol)
 {
     return (fabs (aij) > *((double *) tol)) ;
 }
-int cs_droptol (cs *A, double tol)
+csi cs_droptol (cs *A, double tol)
 {
     return (cs_fkeep (A, &cs_tol, &tol)) ;    /* keep all large entries */
 }
diff --git a/CSparse/Source/cs_dropzeros.c b/CSparse/Source/cs_dropzeros.c
index 441e54d..7684a5c 100644
--- a/CSparse/Source/cs_dropzeros.c
+++ b/CSparse/Source/cs_dropzeros.c
@@ -1,9 +1,9 @@
 #include "cs.h"
-static int cs_nonzero (int i, int j, double aij, void *other)
+static csi cs_nonzero (csi i, csi j, double aij, void *other)
 {
     return (aij != 0) ;
 }
-int cs_dropzeros (cs *A)
+csi cs_dropzeros (cs *A)
 {
-    return (cs_fkeep (A, &cs_nonzero, NULL)) ;	/* keep all nonzero entries */
+    return (cs_fkeep (A, &cs_nonzero, NULL)) ;  /* keep all nonzero entries */
 } 
diff --git a/CSparse/Source/cs_dupl.c b/CSparse/Source/cs_dupl.c
index 7a60d63..1e61667 100644
--- a/CSparse/Source/cs_dupl.c
+++ b/CSparse/Source/cs_dupl.c
@@ -1,34 +1,34 @@
 #include "cs.h"
 /* remove duplicate entries from A */
-int cs_dupl (cs *A)
+csi cs_dupl (cs *A)
 {
-    int i, j, p, q, nz = 0, n, m, *Ap, *Ai, *w ;
+    csi i, j, p, q, nz = 0, n, m, *Ap, *Ai, *w ;
     double *Ax ;
-    if (!CS_CSC (A)) return (0) ;		/* check inputs */
+    if (!CS_CSC (A)) return (0) ;               /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    w = cs_malloc (m, sizeof (int)) ;		/* get workspace */
-    if (!w) return (0) ;			/* out of memory */
-    for (i = 0 ; i < m ; i++) w [i] = -1 ;	/* row i not yet seen */
+    w = cs_malloc (m, sizeof (csi)) ;           /* get workspace */
+    if (!w) return (0) ;                        /* out of memory */
+    for (i = 0 ; i < m ; i++) w [i] = -1 ;      /* row i not yet seen */
     for (j = 0 ; j < n ; j++)
     {
-	q = nz ;				/* column j will start at q */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;			/* A(i,j) is nonzero */
-	    if (w [i] >= q)
-	    {
-		Ax [w [i]] += Ax [p] ;		/* A(i,j) is a duplicate */
-	    }
-	    else
-	    {
-		w [i] = nz ;			/* record where row i occurs */
-		Ai [nz] = i ;			/* keep A(i,j) */
-		Ax [nz++] = Ax [p] ;
-	    }
-	}
-	Ap [j] = q ;				/* record start of column j */
+        q = nz ;                                /* column j will start at q */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;                        /* A(i,j) is nonzero */
+            if (w [i] >= q)
+            {
+                Ax [w [i]] += Ax [p] ;          /* A(i,j) is a duplicate */
+            }
+            else
+            {
+                w [i] = nz ;                    /* record where row i occurs */
+                Ai [nz] = i ;                   /* keep A(i,j) */
+                Ax [nz++] = Ax [p] ;
+            }
+        }
+        Ap [j] = q ;                            /* record start of column j */
     }
-    Ap [n] = nz ;				/* finalize A */
-    cs_free (w) ;				/* free workspace */
-    return (cs_sprealloc (A, 0)) ;		/* remove extra space from A */
+    Ap [n] = nz ;                               /* finalize A */
+    cs_free (w) ;                               /* free workspace */
+    return (cs_sprealloc (A, 0)) ;              /* remove extra space from A */
 }
diff --git a/CSparse/Source/cs_entry.c b/CSparse/Source/cs_entry.c
index 98f6788..c7d4cb6 100644
--- a/CSparse/Source/cs_entry.c
+++ b/CSparse/Source/cs_entry.c
@@ -1,8 +1,8 @@
 #include "cs.h"
 /* add an entry to a triplet matrix; return 1 if ok, 0 otherwise */
-int cs_entry (cs *T, int i, int j, double x)
+csi cs_entry (cs *T, csi i, csi j, double x)
 {
-    if (!CS_TRIPLET (T) || i < 0 || j < 0) return (0) ;	    /* check inputs */
+    if (!CS_TRIPLET (T) || i < 0 || j < 0) return (0) ;     /* check inputs */
     if (T->nz >= T->nzmax && !cs_sprealloc (T,2*(T->nzmax))) return (0) ;
     if (T->x) T->x [T->nz] = x ;
     T->i [T->nz] = i ;
diff --git a/CSparse/Source/cs_ereach.c b/CSparse/Source/cs_ereach.c
index c54213b..301ce84 100644
--- a/CSparse/Source/cs_ereach.c
+++ b/CSparse/Source/cs_ereach.c
@@ -1,23 +1,23 @@
 #include "cs.h"
 /* find nonzero pattern of Cholesky L(k,1:k-1) using etree and triu(A(:,k)) */
-int cs_ereach (const cs *A, int k, const int *parent, int *s, int *w)
+csi cs_ereach (const cs *A, csi k, const csi *parent, csi *s, csi *w)
 {
-    int i, p, n, len, top, *Ap, *Ai ;
+    csi i, p, n, len, top, *Ap, *Ai ;
     if (!CS_CSC (A) || !parent || !s || !w) return (-1) ;   /* check inputs */
     top = n = A->n ; Ap = A->p ; Ai = A->i ;
-    CS_MARK (w, k) ;		    /* mark node k as visited */
+    CS_MARK (w, k) ;                /* mark node k as visited */
     for (p = Ap [k] ; p < Ap [k+1] ; p++)
     {
-	i = Ai [p] ;		    /* A(i,k) is nonzero */
-	if (i > k) continue ;	    /* only use upper triangular part of A */
-	for (len = 0 ; !CS_MARKED (w,i) ; i = parent [i]) /* traverse up etree*/
-	{
-	    s [len++] = i ;	    /* L(k,i) is nonzero */
-	    CS_MARK (w, i) ;	    /* mark i as visited */
-	}
-	while (len > 0) s [--top] = s [--len] ; /* push path onto stack */
+        i = Ai [p] ;                /* A(i,k) is nonzero */
+        if (i > k) continue ;       /* only use upper triangular part of A */
+        for (len = 0 ; !CS_MARKED (w,i) ; i = parent [i]) /* traverse up etree*/
+        {
+            s [len++] = i ;         /* L(k,i) is nonzero */
+            CS_MARK (w, i) ;        /* mark i as visited */
+        }
+        while (len > 0) s [--top] = s [--len] ; /* push path onto stack */
     }
-    for (p = top ; p < n ; p++) CS_MARK (w, s [p]) ;	/* unmark all nodes */
-    CS_MARK (w, k) ;		    /* unmark node k */
-    return (top) ;		    /* s [top..n-1] contains pattern of L(k,:)*/
+    for (p = top ; p < n ; p++) CS_MARK (w, s [p]) ;    /* unmark all nodes */
+    CS_MARK (w, k) ;                /* unmark node k */
+    return (top) ;                  /* s [top..n-1] contains pattern of L(k,:)*/
 }
diff --git a/CSparse/Source/cs_etree.c b/CSparse/Source/cs_etree.c
index 30712bc..5310ef2 100644
--- a/CSparse/Source/cs_etree.c
+++ b/CSparse/Source/cs_etree.c
@@ -1,30 +1,30 @@
 #include "cs.h"
 /* compute the etree of A (using triu(A), or A'A without forming A'A */
-int *cs_etree (const cs *A, int ata)
+csi *cs_etree (const cs *A, csi ata)
 {
-    int i, k, p, m, n, inext, *Ap, *Ai, *w, *parent, *ancestor, *prev ;
-    if (!CS_CSC (A)) return (NULL) ;	    /* check inputs */
+    csi i, k, p, m, n, inext, *Ap, *Ai, *w, *parent, *ancestor, *prev ;
+    if (!CS_CSC (A)) return (NULL) ;        /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ;
-    parent = cs_malloc (n, sizeof (int)) ;		/* allocate result */
-    w = cs_malloc (n + (ata ? m : 0), sizeof (int)) ;	/* get workspace */
+    parent = cs_malloc (n, sizeof (csi)) ;              /* allocate result */
+    w = cs_malloc (n + (ata ? m : 0), sizeof (csi)) ;   /* get workspace */
     if (!w || !parent) return (cs_idone (parent, NULL, w, 0)) ;
     ancestor = w ; prev = w + n ;
     if (ata) for (i = 0 ; i < m ; i++) prev [i] = -1 ;
     for (k = 0 ; k < n ; k++)
     {
-	parent [k] = -1 ;		    /* node k has no parent yet */
-	ancestor [k] = -1 ;		    /* nor does k have an ancestor */
-	for (p = Ap [k] ; p < Ap [k+1] ; p++)
-	{
-	    i = ata ? (prev [Ai [p]]) : (Ai [p]) ;
-	    for ( ; i != -1 && i < k ; i = inext)   /* traverse from i to k */
-	    {
-		inext = ancestor [i] ;		    /* inext = ancestor of i */
-		ancestor [i] = k ;		    /* path compression */
-		if (inext == -1) parent [i] = k ;   /* no anc., parent is k */
-	    }
-	    if (ata) prev [Ai [p]] = k ;
-	}
+        parent [k] = -1 ;                   /* node k has no parent yet */
+        ancestor [k] = -1 ;                 /* nor does k have an ancestor */
+        for (p = Ap [k] ; p < Ap [k+1] ; p++)
+        {
+            i = ata ? (prev [Ai [p]]) : (Ai [p]) ;
+            for ( ; i != -1 && i < k ; i = inext)   /* traverse from i to k */
+            {
+                inext = ancestor [i] ;              /* inext = ancestor of i */
+                ancestor [i] = k ;                  /* path compression */
+                if (inext == -1) parent [i] = k ;   /* no anc., parent is k */
+            }
+            if (ata) prev [Ai [p]] = k ;
+        }
     }
     return (cs_idone (parent, NULL, w, 1)) ;
 }
diff --git a/CSparse/Source/cs_fkeep.c b/CSparse/Source/cs_fkeep.c
index 0e32051..77ef75a 100644
--- a/CSparse/Source/cs_fkeep.c
+++ b/CSparse/Source/cs_fkeep.c
@@ -1,25 +1,25 @@
 #include "cs.h"
 /* drop entries for which fkeep(A(i,j)) is false; return nz if OK, else -1 */
-int cs_fkeep (cs *A, int (*fkeep) (int, int, double, void *), void *other)
+csi cs_fkeep (cs *A, csi (*fkeep) (csi, csi, double, void *), void *other)
 {
-    int j, p, nz = 0, n, *Ap, *Ai ;
+    csi j, p, nz = 0, n, *Ap, *Ai ;
     double *Ax ;
-    if (!CS_CSC (A) || !fkeep) return (-1) ;	/* check inputs */
+    if (!CS_CSC (A) || !fkeep) return (-1) ;    /* check inputs */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     for (j = 0 ; j < n ; j++)
     {
-	p = Ap [j] ;			    /* get current location of col j */
-	Ap [j] = nz ;			    /* record new location of col j */
-	for ( ; p < Ap [j+1] ; p++)
-	{
-	    if (fkeep (Ai [p], j, Ax ? Ax [p] : 1, other))
-	    {
-		if (Ax) Ax [nz] = Ax [p] ;  /* keep A(i,j) */
-		Ai [nz++] = Ai [p] ;
-	    }
-	}
+        p = Ap [j] ;                        /* get current location of col j */
+        Ap [j] = nz ;                       /* record new location of col j */
+        for ( ; p < Ap [j+1] ; p++)
+        {
+            if (fkeep (Ai [p], j, Ax ? Ax [p] : 1, other))
+            {
+                if (Ax) Ax [nz] = Ax [p] ;  /* keep A(i,j) */
+                Ai [nz++] = Ai [p] ;
+            }
+        }
     }
-    Ap [n] = nz ;			    /* finalize A */
-    cs_sprealloc (A, 0) ;		    /* remove extra space from A */
+    Ap [n] = nz ;                           /* finalize A */
+    cs_sprealloc (A, 0) ;                   /* remove extra space from A */
     return (nz) ;
 }
diff --git a/CSparse/Source/cs_gaxpy.c b/CSparse/Source/cs_gaxpy.c
index 580f600..2978e87 100644
--- a/CSparse/Source/cs_gaxpy.c
+++ b/CSparse/Source/cs_gaxpy.c
@@ -1,17 +1,17 @@
 #include "cs.h"
 /* y = A*x+y */
-int cs_gaxpy (const cs *A, const double *x, double *y)
+csi cs_gaxpy (const cs *A, const double *x, double *y)
 {
-    int p, j, n, *Ap, *Ai ;
+    csi p, j, n, *Ap, *Ai ;
     double *Ax ;
-    if (!CS_CSC (A) || !x || !y) return (0) ;	    /* check inputs */
+    if (!CS_CSC (A) || !x || !y) return (0) ;       /* check inputs */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    y [Ai [p]] += Ax [p] * x [j] ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            y [Ai [p]] += Ax [p] * x [j] ;
+        }
     }
     return (1) ;
 }
diff --git a/CSparse/Source/cs_happly.c b/CSparse/Source/cs_happly.c
index b2d4346..2744ed9 100644
--- a/CSparse/Source/cs_happly.c
+++ b/CSparse/Source/cs_happly.c
@@ -1,19 +1,19 @@
 #include "cs.h"
 /* apply the ith Householder vector to x */
-int cs_happly (const cs *V, int i, double beta, double *x)
+csi cs_happly (const cs *V, csi i, double beta, double *x)
 {
-    int p, *Vp, *Vi ;
+    csi p, *Vp, *Vi ;
     double *Vx, tau = 0 ;
-    if (!CS_CSC (V) || !x) return (0) ;	    /* check inputs */
+    if (!CS_CSC (V) || !x) return (0) ;     /* check inputs */
     Vp = V->p ; Vi = V->i ; Vx = V->x ;
     for (p = Vp [i] ; p < Vp [i+1] ; p++)   /* tau = v'*x */
     {
-	tau += Vx [p] * x [Vi [p]] ;
+        tau += Vx [p] * x [Vi [p]] ;
     }
-    tau *= beta ;			    /* tau = beta*(v'*x) */
+    tau *= beta ;                           /* tau = beta*(v'*x) */
     for (p = Vp [i] ; p < Vp [i+1] ; p++)   /* x = x - v*tau */
     {
-	x [Vi [p]] -= Vx [p] * tau ;
+        x [Vi [p]] -= Vx [p] * tau ;
     }
     return (1) ;
 }
diff --git a/CSparse/Source/cs_house.c b/CSparse/Source/cs_house.c
index 5935f4c..fbd6be2 100644
--- a/CSparse/Source/cs_house.c
+++ b/CSparse/Source/cs_house.c
@@ -1,23 +1,23 @@
 #include "cs.h"
 /* create a Householder reflection [v,beta,s]=house(x), overwrite x with v,
  * where (I-beta*v*v')*x = s*e1.  See Algo 5.1.1, Golub & Van Loan, 3rd ed. */
-double cs_house (double *x, double *beta, int n)
+double cs_house (double *x, double *beta, csi n)
 {
     double s, sigma = 0 ;
-    int i ;
-    if (!x || !beta) return (-1) ;	    /* check inputs */
+    csi i ;
+    if (!x || !beta) return (-1) ;          /* check inputs */
     for (i = 1 ; i < n ; i++) sigma += x [i] * x [i] ;
     if (sigma == 0)
     {
-	s = fabs (x [0]) ;		    /* s = |x(0)| */
-	(*beta) = (x [0] <= 0) ? 2 : 0 ;
-	x [0] = 1 ;
+        s = fabs (x [0]) ;                  /* s = |x(0)| */
+        (*beta) = (x [0] <= 0) ? 2 : 0 ;
+        x [0] = 1 ;
     }
     else
     {
-	s = sqrt (x [0] * x [0] + sigma) ;  /* s = norm (x) */
-	x [0] = (x [0] <= 0) ? (x [0] - s) : (-sigma / (x [0] + s)) ;
-	(*beta) = -1. / (s * x [0]) ;
+        s = sqrt (x [0] * x [0] + sigma) ;  /* s = norm (x) */
+        x [0] = (x [0] <= 0) ? (x [0] - s) : (-sigma / (x [0] + s)) ;
+        (*beta) = -1. / (s * x [0]) ;
     }
     return (s) ;
 }
diff --git a/CSparse/Source/cs_ipvec.c b/CSparse/Source/cs_ipvec.c
index cb1e9a9..0cc6458 100644
--- a/CSparse/Source/cs_ipvec.c
+++ b/CSparse/Source/cs_ipvec.c
@@ -1,9 +1,9 @@
 #include "cs.h"
 /* x(p) = b, for dense vectors x and b; p=NULL denotes identity */
-int cs_ipvec (const int *p, const double *b, double *x, int n)
+csi cs_ipvec (const csi *p, const double *b, double *x, csi n)
 {
-    int k ;
-    if (!x || !b) return (0) ;				    /* check inputs */
+    csi k ;
+    if (!x || !b) return (0) ;                              /* check inputs */
     for (k = 0 ; k < n ; k++) x [p ? p [k] : k] = b [k] ;
     return (1) ;
 }
diff --git a/CSparse/Source/cs_leaf.c b/CSparse/Source/cs_leaf.c
index 1601cb9..23ac5a5 100644
--- a/CSparse/Source/cs_leaf.c
+++ b/CSparse/Source/cs_leaf.c
@@ -1,22 +1,22 @@
 #include "cs.h"
 /* consider A(i,j), node j in ith row subtree and return lca(jprev,j) */
-int cs_leaf (int i, int j, const int *first, int *maxfirst, int *prevleaf,
-    int *ancestor, int *jleaf)
+csi cs_leaf (csi i, csi j, const csi *first, csi *maxfirst, csi *prevleaf,
+    csi *ancestor, csi *jleaf)
 {
-    int q, s, sparent, jprev ;
+    csi q, s, sparent, jprev ;
     if (!first || !maxfirst || !prevleaf || !ancestor || !jleaf) return (-1) ;
     *jleaf = 0 ;
     if (i <= j || first [j] <= maxfirst [i]) return (-1) ;  /* j not a leaf */
-    maxfirst [i] = first [j] ;	    /* update max first[j] seen so far */
-    jprev = prevleaf [i] ;	    /* jprev = previous leaf of ith subtree */
+    maxfirst [i] = first [j] ;      /* update max first[j] seen so far */
+    jprev = prevleaf [i] ;          /* jprev = previous leaf of ith subtree */
     prevleaf [i] = j ;
     *jleaf = (jprev == -1) ? 1: 2 ; /* j is first or subsequent leaf */
     if (*jleaf == 1) return (i) ;   /* if 1st leaf, q = root of ith subtree */
     for (q = jprev ; q != ancestor [q] ; q = ancestor [q]) ;
     for (s = jprev ; s != q ; s = sparent)
     {
-	sparent = ancestor [s] ;    /* path compression */
-	ancestor [s] = q ;
+        sparent = ancestor [s] ;    /* path compression */
+        ancestor [s] = q ;
     }
-    return (q) ;		    /* q = least common ancester (jprev,j) */
+    return (q) ;                    /* q = least common ancester (jprev,j) */
 }
diff --git a/CSparse/Source/cs_load.c b/CSparse/Source/cs_load.c
index e1e8719..dd29076 100644
--- a/CSparse/Source/cs_load.c
+++ b/CSparse/Source/cs_load.c
@@ -2,14 +2,14 @@
 /* load a triplet matrix from a file */
 cs *cs_load (FILE *f)
 {
-    int i, j ;
+    double i, j ;   /* use double for integers to avoid csi conflicts */
     double x ;
     cs *T ;
-    if (!f) return (NULL) ;				/* check inputs */
-    T = cs_spalloc (0, 0, 1, 1, 1) ;			/* allocate result */
-    while (fscanf (f, "%d %d %lg\n", &i, &j, &x) == 3)
+    if (!f) return (NULL) ;                             /* check inputs */
+    T = cs_spalloc (0, 0, 1, 1, 1) ;                    /* allocate result */
+    while (fscanf (f, "%lg %lg %lg\n", &i, &j, &x) == 3)
     {
-	if (!cs_entry (T, i, j, x)) return (cs_spfree (T)) ;
+        if (!cs_entry (T, (csi) i, (csi) j, x)) return (cs_spfree (T)) ;
     }
     return (T) ;
 }
diff --git a/CSparse/Source/cs_lsolve.c b/CSparse/Source/cs_lsolve.c
index 69376ac..40deb20 100644
--- a/CSparse/Source/cs_lsolve.c
+++ b/CSparse/Source/cs_lsolve.c
@@ -1,18 +1,18 @@
 #include "cs.h"
 /* solve Lx=b where x and b are dense.  x=b on input, solution on output. */
-int cs_lsolve (const cs *L, double *x)
+csi cs_lsolve (const cs *L, double *x)
 {
-    int p, j, n, *Lp, *Li ;
+    csi p, j, n, *Lp, *Li ;
     double *Lx ;
-    if (!CS_CSC (L) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (L) || !x) return (0) ;                     /* check inputs */
     n = L->n ; Lp = L->p ; Li = L->i ; Lx = L->x ;
     for (j = 0 ; j < n ; j++)
     {
-	x [j] /= Lx [Lp [j]] ;
-	for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
-	{
-	    x [Li [p]] -= Lx [p] * x [j] ;
-	}
+        x [j] /= Lx [Lp [j]] ;
+        for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
+        {
+            x [Li [p]] -= Lx [p] * x [j] ;
+        }
     }
     return (1) ;
 }
diff --git a/CSparse/Source/cs_ltsolve.c b/CSparse/Source/cs_ltsolve.c
index fc2ee4f..05ceb9e 100644
--- a/CSparse/Source/cs_ltsolve.c
+++ b/CSparse/Source/cs_ltsolve.c
@@ -1,18 +1,18 @@
 #include "cs.h"
 /* solve L'x=b where x and b are dense.  x=b on input, solution on output. */
-int cs_ltsolve (const cs *L, double *x)
+csi cs_ltsolve (const cs *L, double *x)
 {
-    int p, j, n, *Lp, *Li ;
+    csi p, j, n, *Lp, *Li ;
     double *Lx ;
-    if (!CS_CSC (L) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (L) || !x) return (0) ;                     /* check inputs */
     n = L->n ; Lp = L->p ; Li = L->i ; Lx = L->x ;
     for (j = n-1 ; j >= 0 ; j--)
     {
-	for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
-	{
-	    x [j] -= Lx [p] * x [Li [p]] ;
-	}
-	x [j] /= Lx [Lp [j]] ;
+        for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
+        {
+            x [j] -= Lx [p] * x [Li [p]] ;
+        }
+        x [j] /= Lx [Lp [j]] ;
     }
     return (1) ;
 }
diff --git a/CSparse/Source/cs_lu.c b/CSparse/Source/cs_lu.c
index c8883c6..359e689 100644
--- a/CSparse/Source/cs_lu.c
+++ b/CSparse/Source/cs_lu.c
@@ -5,82 +5,82 @@ csn *cs_lu (const cs *A, const css *S, double tol)
     cs *L, *U ;
     csn *N ;
     double pivot, *Lx, *Ux, *x,  a, t ;
-    int *Lp, *Li, *Up, *Ui, *pinv, *xi, *q, n, ipiv, k, top, p, i, col, lnz,unz;
-    if (!CS_CSC (A) || !S) return (NULL) ;	    /* check inputs */
+    csi *Lp, *Li, *Up, *Ui, *pinv, *xi, *q, n, ipiv, k, top, p, i, col, lnz,unz;
+    if (!CS_CSC (A) || !S) return (NULL) ;          /* check inputs */
     n = A->n ;
     q = S->q ; lnz = S->lnz ; unz = S->unz ;
-    x = cs_malloc (n, sizeof (double)) ;	    /* get double workspace */
-    xi = cs_malloc (2*n, sizeof (int)) ;	    /* get int workspace */
-    N = cs_calloc (1, sizeof (csn)) ;		    /* allocate result */
+    x = cs_malloc (n, sizeof (double)) ;            /* get double workspace */
+    xi = cs_malloc (2*n, sizeof (csi)) ;            /* get csi workspace */
+    N = cs_calloc (1, sizeof (csn)) ;               /* allocate result */
     if (!x || !xi || !N) return (cs_ndone (N, NULL, xi, x, 0)) ;
-    N->L = L = cs_spalloc (n, n, lnz, 1, 0) ;	    /* allocate result L */
-    N->U = U = cs_spalloc (n, n, unz, 1, 0) ;	    /* allocate result U */
-    N->pinv = pinv = cs_malloc (n, sizeof (int)) ;  /* allocate result pinv */
+    N->L = L = cs_spalloc (n, n, lnz, 1, 0) ;       /* allocate result L */
+    N->U = U = cs_spalloc (n, n, unz, 1, 0) ;       /* allocate result U */
+    N->pinv = pinv = cs_malloc (n, sizeof (csi)) ;  /* allocate result pinv */
     if (!L || !U || !pinv) return (cs_ndone (N, NULL, xi, x, 0)) ;
     Lp = L->p ; Up = U->p ;
-    for (i = 0 ; i < n ; i++) x [i] = 0 ;	    /* clear workspace */
-    for (i = 0 ; i < n ; i++) pinv [i] = -1 ;	    /* no rows pivotal yet */
-    for (k = 0 ; k <= n ; k++) Lp [k] = 0 ;	    /* no cols of L yet */
+    for (i = 0 ; i < n ; i++) x [i] = 0 ;           /* clear workspace */
+    for (i = 0 ; i < n ; i++) pinv [i] = -1 ;       /* no rows pivotal yet */
+    for (k = 0 ; k <= n ; k++) Lp [k] = 0 ;         /* no cols of L yet */
     lnz = unz = 0 ;
-    for (k = 0 ; k < n ; k++)	    /* compute L(:,k) and U(:,k) */
+    for (k = 0 ; k < n ; k++)       /* compute L(:,k) and U(:,k) */
     {
-	/* --- Triangular solve --------------------------------------------- */
-	Lp [k] = lnz ;		    /* L(:,k) starts here */
-	Up [k] = unz ;		    /* U(:,k) starts here */
-	if ((lnz + n > L->nzmax && !cs_sprealloc (L, 2*L->nzmax + n)) ||
-	    (unz + n > U->nzmax && !cs_sprealloc (U, 2*U->nzmax + n)))
-	{
-	    return (cs_ndone (N, NULL, xi, x, 0)) ;
-	}
-	Li = L->i ; Lx = L->x ; Ui = U->i ; Ux = U->x ;
-	col = q ? (q [k]) : k ;
-	top = cs_spsolve (L, A, col, xi, x, pinv, 1) ;	/* x = L\A(:,col) */
-	/* --- Find pivot --------------------------------------------------- */
-	ipiv = -1 ;
-	a = -1 ;
-	for (p = top ; p < n ; p++)
-	{
-	    i = xi [p] ;	    /* x(i) is nonzero */
-	    if (pinv [i] < 0)	    /* row i is not yet pivotal */
-	    {
-		if ((t = fabs (x [i])) > a)
-		{
-		    a = t ;	    /* largest pivot candidate so far */
-		    ipiv = i ;
-		}
-	    }
-	    else		    /* x(i) is the entry U(pinv[i],k) */
-	    {
-		Ui [unz] = pinv [i] ;
-		Ux [unz++] = x [i] ;
-	    }
-	}
-	if (ipiv == -1 || a <= 0) return (cs_ndone (N, NULL, xi, x, 0)) ;
-	if (pinv [col] < 0 && fabs (x [col]) >= a*tol) ipiv = col ;
-	/* --- Divide by pivot ---------------------------------------------- */
-	pivot = x [ipiv] ;	    /* the chosen pivot */
-	Ui [unz] = k ;		    /* last entry in U(:,k) is U(k,k) */
-	Ux [unz++] = pivot ;
-	pinv [ipiv] = k ;	    /* ipiv is the kth pivot row */
-	Li [lnz] = ipiv ;	    /* first entry in L(:,k) is L(k,k) = 1 */
-	Lx [lnz++] = 1 ;
-	for (p = top ; p < n ; p++) /* L(k+1:n,k) = x / pivot */
-	{
-	    i = xi [p] ;
-	    if (pinv [i] < 0)	    /* x(i) is an entry in L(:,k) */
-	    {
-		Li [lnz] = i ;	    /* save unpermuted row in L */
-		Lx [lnz++] = x [i] / pivot ;	/* scale pivot column */
-	    }
-	    x [i] = 0 ;		    /* x [0..n-1] = 0 for next k */
-	}
+        /* --- Triangular solve --------------------------------------------- */
+        Lp [k] = lnz ;              /* L(:,k) starts here */
+        Up [k] = unz ;              /* U(:,k) starts here */
+        if ((lnz + n > L->nzmax && !cs_sprealloc (L, 2*L->nzmax + n)) ||
+            (unz + n > U->nzmax && !cs_sprealloc (U, 2*U->nzmax + n)))
+        {
+            return (cs_ndone (N, NULL, xi, x, 0)) ;
+        }
+        Li = L->i ; Lx = L->x ; Ui = U->i ; Ux = U->x ;
+        col = q ? (q [k]) : k ;
+        top = cs_spsolve (L, A, col, xi, x, pinv, 1) ;  /* x = L\A(:,col) */
+        /* --- Find pivot --------------------------------------------------- */
+        ipiv = -1 ;
+        a = -1 ;
+        for (p = top ; p < n ; p++)
+        {
+            i = xi [p] ;            /* x(i) is nonzero */
+            if (pinv [i] < 0)       /* row i is not yet pivotal */
+            {
+                if ((t = fabs (x [i])) > a)
+                {
+                    a = t ;         /* largest pivot candidate so far */
+                    ipiv = i ;
+                }
+            }
+            else                    /* x(i) is the entry U(pinv[i],k) */
+            {
+                Ui [unz] = pinv [i] ;
+                Ux [unz++] = x [i] ;
+            }
+        }
+        if (ipiv == -1 || a <= 0) return (cs_ndone (N, NULL, xi, x, 0)) ;
+        if (pinv [col] < 0 && fabs (x [col]) >= a*tol) ipiv = col ;
+        /* --- Divide by pivot ---------------------------------------------- */
+        pivot = x [ipiv] ;          /* the chosen pivot */
+        Ui [unz] = k ;              /* last entry in U(:,k) is U(k,k) */
+        Ux [unz++] = pivot ;
+        pinv [ipiv] = k ;           /* ipiv is the kth pivot row */
+        Li [lnz] = ipiv ;           /* first entry in L(:,k) is L(k,k) = 1 */
+        Lx [lnz++] = 1 ;
+        for (p = top ; p < n ; p++) /* L(k+1:n,k) = x / pivot */
+        {
+            i = xi [p] ;
+            if (pinv [i] < 0)       /* x(i) is an entry in L(:,k) */
+            {
+                Li [lnz] = i ;      /* save unpermuted row in L */
+                Lx [lnz++] = x [i] / pivot ;    /* scale pivot column */
+            }
+            x [i] = 0 ;             /* x [0..n-1] = 0 for next k */
+        }
     }
     /* --- Finalize L and U ------------------------------------------------- */
     Lp [n] = lnz ;
     Up [n] = unz ;
-    Li = L->i ;			    /* fix row indices of L for final pinv */
+    Li = L->i ;                     /* fix row indices of L for final pinv */
     for (p = 0 ; p < lnz ; p++) Li [p] = pinv [Li [p]] ;
-    cs_sprealloc (L, 0) ;	    /* remove extra space from L and U */
+    cs_sprealloc (L, 0) ;           /* remove extra space from L and U */
     cs_sprealloc (U, 0) ;
-    return (cs_ndone (N, NULL, xi, x, 1)) ;	/* success */
+    return (cs_ndone (N, NULL, xi, x, 1)) ;     /* success */
 }
diff --git a/CSparse/Source/cs_lusol.c b/CSparse/Source/cs_lusol.c
index e7d79a1..97cafd3 100644
--- a/CSparse/Source/cs_lusol.c
+++ b/CSparse/Source/cs_lusol.c
@@ -1,23 +1,23 @@
 #include "cs.h"
 /* x=A\b where A is unsymmetric; b overwritten with solution */
-int cs_lusol (int order, const cs *A, double *b, double tol)
+csi cs_lusol (csi order, const cs *A, double *b, double tol)
 {
     double *x ;
     css *S ;
     csn *N ;
-    int n, ok ;
-    if (!CS_CSC (A) || !b) return (0) ;	    /* check inputs */
+    csi n, ok ;
+    if (!CS_CSC (A) || !b) return (0) ;     /* check inputs */
     n = A->n ;
-    S = cs_sqr (order, A, 0) ;		    /* ordering and symbolic analysis */
-    N = cs_lu (A, S, tol) ;		    /* numeric LU factorization */
+    S = cs_sqr (order, A, 0) ;              /* ordering and symbolic analysis */
+    N = cs_lu (A, S, tol) ;                 /* numeric LU factorization */
     x = cs_malloc (n, sizeof (double)) ;    /* get workspace */
     ok = (S && N && x) ;
     if (ok)
     {
-	cs_ipvec (N->pinv, b, x, n) ;	    /* x = b(p) */
-	cs_lsolve (N->L, x) ;		    /* x = L\x */
-	cs_usolve (N->U, x) ;		    /* x = U\x */
-	cs_ipvec (S->q, x, b, n) ;	    /* b(q) = x */
+        cs_ipvec (N->pinv, b, x, n) ;       /* x = b(p) */
+        cs_lsolve (N->L, x) ;               /* x = L\x */
+        cs_usolve (N->U, x) ;               /* x = U\x */
+        cs_ipvec (S->q, x, b, n) ;          /* b(q) = x */
     }
     cs_free (x) ;
     cs_sfree (S) ;
diff --git a/CSparse/Source/cs_malloc.c b/CSparse/Source/cs_malloc.c
index 4d8e2e1..c8e085e 100644
--- a/CSparse/Source/cs_malloc.c
+++ b/CSparse/Source/cs_malloc.c
@@ -7,13 +7,13 @@
 #endif
 
 /* wrapper for malloc */
-void *cs_malloc (int n, size_t size)
+void *cs_malloc (csi n, size_t size)
 {
     return (malloc (CS_MAX (n,1) * size)) ;
 }
 
 /* wrapper for calloc */
-void *cs_calloc (int n, size_t size)
+void *cs_calloc (csi n, size_t size)
 {
     return (calloc (CS_MAX (n,1), size)) ;
 }
@@ -21,15 +21,15 @@ void *cs_calloc (int n, size_t size)
 /* wrapper for free */
 void *cs_free (void *p)
 {
-    if (p) free (p) ;	    /* free p if it is not already NULL */
-    return (NULL) ;	    /* return NULL to simplify the use of cs_free */
+    if (p) free (p) ;       /* free p if it is not already NULL */
+    return (NULL) ;         /* return NULL to simplify the use of cs_free */
 }
 
 /* wrapper for realloc */
-void *cs_realloc (void *p, int n, size_t size, int *ok)
+void *cs_realloc (void *p, csi n, size_t size, csi *ok)
 {
     void *pnew ;
     pnew = realloc (p, CS_MAX (n,1) * size) ; /* realloc the block */
-    *ok = (pnew != NULL) ;		    /* realloc fails if pnew is NULL */
-    return ((*ok) ? pnew : p) ;		    /* return original p if failure */
+    *ok = (pnew != NULL) ;                  /* realloc fails if pnew is NULL */
+    return ((*ok) ? pnew : p) ;             /* return original p if failure */
 }
diff --git a/CSparse/Source/cs_maxtrans.c b/CSparse/Source/cs_maxtrans.c
index 7c8ea65..7c91cbb 100644
--- a/CSparse/Source/cs_maxtrans.c
+++ b/CSparse/Source/cs_maxtrans.c
@@ -1,72 +1,72 @@
 #include "cs.h"
 /* find an augmenting path starting at column k and extend the match if found */
-static void cs_augment (int k, const cs *A, int *jmatch, int *cheap, int *w,
-	int *js, int *is, int *ps)
+static void cs_augment (csi k, const cs *A, csi *jmatch, csi *cheap, csi *w,
+        csi *js, csi *is, csi *ps)
 {
-    int found = 0, p, i = -1, *Ap = A->p, *Ai = A->i, head = 0, j ;
-    js [0] = k ;			/* start with just node k in jstack */
+    csi found = 0, p, i = -1, *Ap = A->p, *Ai = A->i, head = 0, j ;
+    js [0] = k ;                        /* start with just node k in jstack */
     while (head >= 0)
     {
-	/* --- Start (or continue) depth-first-search at node j ------------- */
-	j = js [head] ;			/* get j from top of jstack */
-	if (w [j] != k)			/* 1st time j visited for kth path */
-	{
-	    w [j] = k ;			/* mark j as visited for kth path */
-	    for (p = cheap [j] ; p < Ap [j+1] && !found ; p++)
-	    {
-		i = Ai [p] ;		/* try a cheap assignment (i,j) */
-		found = (jmatch [i] == -1) ;
-	    }
-	    cheap [j] = p ;		/* start here next time j is traversed*/
-	    if (found)
-	    {
-		is [head] = i ;		/* column j matched with row i */
-		break ;			/* end of augmenting path */
-	    }
-	    ps [head] = Ap [j] ;	/* no cheap match: start dfs for j */
-	}
-	/* --- Depth-first-search of neighbors of j ------------------------- */
-	for (p = ps [head] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;		/* consider row i */
-	    if (w [jmatch [i]] == k) continue ;	/* skip jmatch [i] if marked */
-	    ps [head] = p + 1 ;		/* pause dfs of node j */
-	    is [head] = i ;		/* i will be matched with j if found */
-	    js [++head] = jmatch [i] ;	/* start dfs at column jmatch [i] */
-	    break ;
-	}
-	if (p == Ap [j+1]) head-- ;	/* node j is done; pop from stack */
-    }					/* augment the match if path found: */
+        /* --- Start (or continue) depth-first-search at node j ------------- */
+        j = js [head] ;                 /* get j from top of jstack */
+        if (w [j] != k)                 /* 1st time j visited for kth path */
+        {
+            w [j] = k ;                 /* mark j as visited for kth path */
+            for (p = cheap [j] ; p < Ap [j+1] && !found ; p++)
+            {
+                i = Ai [p] ;            /* try a cheap assignment (i,j) */
+                found = (jmatch [i] == -1) ;
+            }
+            cheap [j] = p ;             /* start here next time j is traversed*/
+            if (found)
+            {
+                is [head] = i ;         /* column j matched with row i */
+                break ;                 /* end of augmenting path */
+            }
+            ps [head] = Ap [j] ;        /* no cheap match: start dfs for j */
+        }
+        /* --- Depth-first-search of neighbors of j ------------------------- */
+        for (p = ps [head] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;                /* consider row i */
+            if (w [jmatch [i]] == k) continue ; /* skip jmatch [i] if marked */
+            ps [head] = p + 1 ;         /* pause dfs of node j */
+            is [head] = i ;             /* i will be matched with j if found */
+            js [++head] = jmatch [i] ;  /* start dfs at column jmatch [i] */
+            break ;
+        }
+        if (p == Ap [j+1]) head-- ;     /* node j is done; pop from stack */
+    }                                   /* augment the match if path found: */
     if (found) for (p = head ; p >= 0 ; p--) jmatch [is [p]] = js [p] ;
 }
 
 /* find a maximum transveral */
-int *cs_maxtrans (const cs *A, int seed)  /*[jmatch [0..m-1]; imatch [0..n-1]]*/
+csi *cs_maxtrans (const cs *A, csi seed)  /*[jmatch [0..m-1]; imatch [0..n-1]]*/
 {
-    int i, j, k, n, m, p, n2 = 0, m2 = 0, *Ap, *jimatch, *w, *cheap, *js, *is,
-	*ps, *Ai, *Cp, *jmatch, *imatch, *q ;
+    csi i, j, k, n, m, p, n2 = 0, m2 = 0, *Ap, *jimatch, *w, *cheap, *js, *is,
+        *ps, *Ai, *Cp, *jmatch, *imatch, *q ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;		    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;                /* check inputs */
     n = A->n ; m = A->m ; Ap = A->p ; Ai = A->i ;
-    w = jimatch = cs_calloc (m+n, sizeof (int)) ;   /* allocate result */
+    w = jimatch = cs_calloc (m+n, sizeof (csi)) ;   /* allocate result */
     if (!jimatch) return (NULL) ;
-    for (k = 0, j = 0 ; j < n ; j++)	/* count nonempty rows and columns */
+    for (k = 0, j = 0 ; j < n ; j++)    /* count nonempty rows and columns */
     {
-	n2 += (Ap [j] < Ap [j+1]) ;
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    w [Ai [p]] = 1 ;
-	    k += (j == Ai [p]) ;	/* count entries already on diagonal */
-	}
+        n2 += (Ap [j] < Ap [j+1]) ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            w [Ai [p]] = 1 ;
+            k += (j == Ai [p]) ;        /* count entries already on diagonal */
+        }
     }
-    if (k == CS_MIN (m,n))		/* quick return if diagonal zero-free */
+    if (k == CS_MIN (m,n))              /* quick return if diagonal zero-free */
     {
-	jmatch = jimatch ; imatch = jimatch + m ;
-	for (i = 0 ; i < k ; i++) jmatch [i] = i ;
-	for (      ; i < m ; i++) jmatch [i] = -1 ;
-	for (j = 0 ; j < k ; j++) imatch [j] = j ;
-	for (      ; j < n ; j++) imatch [j] = -1 ;
-	return (cs_idone (jimatch, NULL, NULL, 1)) ;
+        jmatch = jimatch ; imatch = jimatch + m ;
+        for (i = 0 ; i < k ; i++) jmatch [i] = i ;
+        for (      ; i < m ; i++) jmatch [i] = -1 ;
+        for (j = 0 ; j < k ; j++) imatch [j] = j ;
+        for (      ; j < n ; j++) imatch [j] = -1 ;
+        return (cs_idone (jimatch, NULL, NULL, 1)) ;
     }
     for (i = 0 ; i < m ; i++) m2 += w [i] ;
     C = (m2 < n2) ? cs_transpose (A,0) : ((cs *) A) ; /* transpose if needed */
@@ -74,19 +74,19 @@ int *cs_maxtrans (const cs *A, int seed)  /*[jmatch [0..m-1]; imatch [0..n-1]]*/
     n = C->n ; m = C->m ; Cp = C->p ;
     jmatch = (m2 < n2) ? jimatch + n : jimatch ;
     imatch = (m2 < n2) ? jimatch : jimatch + m ;
-    w = cs_malloc (5*n, sizeof (int)) ;		    /* get workspace */
+    w = cs_malloc (5*n, sizeof (csi)) ;             /* get workspace */
     if (!w) return (cs_idone (jimatch, (m2 < n2) ? C : NULL, w, 0)) ;
     cheap = w + n ; js = w + 2*n ; is = w + 3*n ; ps = w + 4*n ;
     for (j = 0 ; j < n ; j++) cheap [j] = Cp [j] ;  /* for cheap assignment */
-    for (j = 0 ; j < n ; j++) w [j] = -1 ;	    /* all columns unflagged */
-    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;	    /* nothing matched yet */
-    q = cs_randperm (n, seed) ;			    /* q = random permutation */
-    for (k = 0 ; k < n ; k++)	/* augment, starting at column q[k] */
+    for (j = 0 ; j < n ; j++) w [j] = -1 ;          /* all columns unflagged */
+    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;     /* nothing matched yet */
+    q = cs_randperm (n, seed) ;                     /* q = random permutation */
+    for (k = 0 ; k < n ; k++)   /* augment, starting at column q[k] */
     {
-	cs_augment (q ? q [k]: k, C, jmatch, cheap, w, js, is, ps) ;
+        cs_augment (q ? q [k]: k, C, jmatch, cheap, w, js, is, ps) ;
     }
     cs_free (q) ;
-    for (j = 0 ; j < n ; j++) imatch [j] = -1 ;	    /* find row match */
+    for (j = 0 ; j < n ; j++) imatch [j] = -1 ;     /* find row match */
     for (i = 0 ; i < m ; i++) if (jmatch [i] >= 0) imatch [jmatch [i]] = i ;
     return (cs_idone (jimatch, (m2 < n2) ? C : NULL, w, 1)) ;
 }
diff --git a/CSparse/Source/cs_multiply.c b/CSparse/Source/cs_multiply.c
index c52ebea..6bc8d26 100644
--- a/CSparse/Source/cs_multiply.c
+++ b/CSparse/Source/cs_multiply.c
@@ -2,34 +2,34 @@
 /* C = A*B */
 cs *cs_multiply (const cs *A, const cs *B)
 {
-    int p, j, nz = 0, anz, *Cp, *Ci, *Bp, m, n, bnz, *w, values, *Bi ;
+    csi p, j, nz = 0, anz, *Cp, *Ci, *Bp, m, n, bnz, *w, values, *Bi ;
     double *x, *Bx, *Cx ;
     cs *C ;
-    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;	 /* check inputs */
+    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;      /* check inputs */
     if (A->n != B->m) return (NULL) ;
     m = A->m ; anz = A->p [A->n] ;
     n = B->n ; Bp = B->p ; Bi = B->i ; Bx = B->x ; bnz = Bp [n] ;
-    w = cs_calloc (m, sizeof (int)) ;			 /* get workspace */
+    w = cs_calloc (m, sizeof (csi)) ;                    /* get workspace */
     values = (A->x != NULL) && (Bx != NULL) ;
     x = values ? cs_malloc (m, sizeof (double)) : NULL ; /* get workspace */
-    C = cs_spalloc (m, n, anz + bnz, values, 0) ;	 /* allocate result */
+    C = cs_spalloc (m, n, anz + bnz, values, 0) ;        /* allocate result */
     if (!C || !w || (values && !x)) return (cs_done (C, w, x, 0)) ;
     Cp = C->p ;
     for (j = 0 ; j < n ; j++)
     {
-	if (nz + m > C->nzmax && !cs_sprealloc (C, 2*(C->nzmax)+m))
-	{
-	    return (cs_done (C, w, x, 0)) ;		/* out of memory */
-	} 
-	Ci = C->i ; Cx = C->x ;		/* C->i and C->x may be reallocated */
-	Cp [j] = nz ;			/* column j of C starts here */
-	for (p = Bp [j] ; p < Bp [j+1] ; p++)
-	{
-	    nz = cs_scatter (A, Bi [p], Bx ? Bx [p] : 1, w, x, j+1, C, nz) ;
-	}
-	if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
+        if (nz + m > C->nzmax && !cs_sprealloc (C, 2*(C->nzmax)+m))
+        {
+            return (cs_done (C, w, x, 0)) ;             /* out of memory */
+        } 
+        Ci = C->i ; Cx = C->x ;         /* C->i and C->x may be reallocated */
+        Cp [j] = nz ;                   /* column j of C starts here */
+        for (p = Bp [j] ; p < Bp [j+1] ; p++)
+        {
+            nz = cs_scatter (A, Bi [p], Bx ? Bx [p] : 1, w, x, j+1, C, nz) ;
+        }
+        if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
     }
-    Cp [n] = nz ;			/* finalize the last column of C */
-    cs_sprealloc (C, 0) ;		/* remove extra space from C */
-    return (cs_done (C, w, x, 1)) ;	/* success; free workspace, return C */
+    Cp [n] = nz ;                       /* finalize the last column of C */
+    cs_sprealloc (C, 0) ;               /* remove extra space from C */
+    return (cs_done (C, w, x, 1)) ;     /* success; free workspace, return C */
 }
diff --git a/CSparse/Source/cs_norm.c b/CSparse/Source/cs_norm.c
index 24f8a2e..e08f1b3 100644
--- a/CSparse/Source/cs_norm.c
+++ b/CSparse/Source/cs_norm.c
@@ -2,14 +2,14 @@
 /* 1-norm of a sparse matrix = max (sum (abs (A))), largest column sum */
 double cs_norm (const cs *A)
 {
-    int p, j, n, *Ap ;
+    csi p, j, n, *Ap ;
     double *Ax,  norm = 0, s ;
-    if (!CS_CSC (A) || !A->x) return (-1) ;		/* check inputs */
+    if (!CS_CSC (A) || !A->x) return (-1) ;             /* check inputs */
     n = A->n ; Ap = A->p ; Ax = A->x ;
     for (j = 0 ; j < n ; j++)
     {
-	for (s = 0, p = Ap [j] ; p < Ap [j+1] ; p++) s += fabs (Ax [p]) ;
-	norm = CS_MAX (norm, s) ;
+        for (s = 0, p = Ap [j] ; p < Ap [j+1] ; p++) s += fabs (Ax [p]) ;
+        norm = CS_MAX (norm, s) ;
     }
     return (norm) ;
 }
diff --git a/CSparse/Source/cs_permute.c b/CSparse/Source/cs_permute.c
index f08e4d1..20b824d 100644
--- a/CSparse/Source/cs_permute.c
+++ b/CSparse/Source/cs_permute.c
@@ -1,25 +1,25 @@
 #include "cs.h"
 /* C = A(p,q) where p and q are permutations of 0..m-1 and 0..n-1. */
-cs *cs_permute (const cs *A, const int *pinv, const int *q, int values)
+cs *cs_permute (const cs *A, const csi *pinv, const csi *q, csi values)
 {
-    int t, j, k, nz = 0, m, n, *Ap, *Ai, *Cp, *Ci ;
+    csi t, j, k, nz = 0, m, n, *Ap, *Ai, *Cp, *Ci ;
     double *Cx, *Ax ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;	/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;    /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     C = cs_spalloc (m, n, Ap [n], values && Ax != NULL, 0) ;  /* alloc result */
     if (!C) return (cs_done (C, NULL, NULL, 0)) ;   /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
     for (k = 0 ; k < n ; k++)
     {
-	Cp [k] = nz ;			/* column k of C is column q[k] of A */
-	j = q ? (q [k]) : k ;
-	for (t = Ap [j] ; t < Ap [j+1] ; t++)
-	{
-	    if (Cx) Cx [nz] = Ax [t] ;	/* row i of A is row pinv[i] of C */
-	    Ci [nz++] = pinv ? (pinv [Ai [t]]) : Ai [t] ;
-	}
+        Cp [k] = nz ;                   /* column k of C is column q[k] of A */
+        j = q ? (q [k]) : k ;
+        for (t = Ap [j] ; t < Ap [j+1] ; t++)
+        {
+            if (Cx) Cx [nz] = Ax [t] ;  /* row i of A is row pinv[i] of C */
+            Ci [nz++] = pinv ? (pinv [Ai [t]]) : Ai [t] ;
+        }
     }
-    Cp [n] = nz ;			/* finalize the last column of C */
+    Cp [n] = nz ;                       /* finalize the last column of C */
     return (cs_done (C, NULL, NULL, 1)) ;
 }
diff --git a/CSparse/Source/cs_pinv.c b/CSparse/Source/cs_pinv.c
index 0583e77..ae5fe00 100644
--- a/CSparse/Source/cs_pinv.c
+++ b/CSparse/Source/cs_pinv.c
@@ -1,11 +1,11 @@
 #include "cs.h"
 /* pinv = p', or p = pinv' */
-int *cs_pinv (int const *p, int n)
+csi *cs_pinv (csi const *p, csi n)
 {
-    int k, *pinv ;
-    if (!p) return (NULL) ;			/* p = NULL denotes identity */
-    pinv = cs_malloc (n, sizeof (int)) ;	/* allocate result */
-    if (!pinv) return (NULL) ;			/* out of memory */
+    csi k, *pinv ;
+    if (!p) return (NULL) ;                     /* p = NULL denotes identity */
+    pinv = cs_malloc (n, sizeof (csi)) ;        /* allocate result */
+    if (!pinv) return (NULL) ;                  /* out of memory */
     for (k = 0 ; k < n ; k++) pinv [p [k]] = k ;/* invert the permutation */
-    return (pinv) ;				/* return result */
+    return (pinv) ;                             /* return result */
 }
diff --git a/CSparse/Source/cs_post.c b/CSparse/Source/cs_post.c
index 80e66e6..faead43 100644
--- a/CSparse/Source/cs_post.c
+++ b/CSparse/Source/cs_post.c
@@ -1,24 +1,24 @@
 #include "cs.h"
 /* post order a forest */
-int *cs_post (const int *parent, int n)
+csi *cs_post (const csi *parent, csi n)
 {
-    int j, k = 0, *post, *w, *head, *next, *stack ;
-    if (!parent) return (NULL) ;			/* check inputs */
-    post = cs_malloc (n, sizeof (int)) ;		/* allocate result */
-    w = cs_malloc (3*n, sizeof (int)) ;			/* get workspace */
+    csi j, k = 0, *post, *w, *head, *next, *stack ;
+    if (!parent) return (NULL) ;                        /* check inputs */
+    post = cs_malloc (n, sizeof (csi)) ;                /* allocate result */
+    w = cs_malloc (3*n, sizeof (csi)) ;                 /* get workspace */
     if (!w || !post) return (cs_idone (post, NULL, w, 0)) ;
     head = w ; next = w + n ; stack = w + 2*n ;
-    for (j = 0 ; j < n ; j++) head [j] = -1 ;		/* empty linked lists */
-    for (j = n-1 ; j >= 0 ; j--)	    /* traverse nodes in reverse order*/
+    for (j = 0 ; j < n ; j++) head [j] = -1 ;           /* empty linked lists */
+    for (j = n-1 ; j >= 0 ; j--)            /* traverse nodes in reverse order*/
     {
-	if (parent [j] == -1) continue ;    /* j is a root */
-	next [j] = head [parent [j]] ;	    /* add j to list of its parent */
-	head [parent [j]] = j ;
+        if (parent [j] == -1) continue ;    /* j is a root */
+        next [j] = head [parent [j]] ;      /* add j to list of its parent */
+        head [parent [j]] = j ;
     }
     for (j = 0 ; j < n ; j++)
     {
-	if (parent [j] != -1) continue ;    /* skip j if it is not a root */
-	k = cs_tdfs (j, k, head, next, post, stack) ;
+        if (parent [j] != -1) continue ;    /* skip j if it is not a root */
+        k = cs_tdfs (j, k, head, next, post, stack) ;
     }
     return (cs_idone (post, NULL, w, 1)) ;  /* success; free w, return post */
 }
diff --git a/CSparse/Source/cs_print.c b/CSparse/Source/cs_print.c
index 8e3f33e..034b500 100644
--- a/CSparse/Source/cs_print.c
+++ b/CSparse/Source/cs_print.c
@@ -1,36 +1,39 @@
 #include "cs.h"
-/* print a sparse matrix */
-int cs_print (const cs *A, int brief)
+/* print a sparse matrix; use %g for integers to avoid differences with csi */
+csi cs_print (const cs *A, csi brief)
 {
-    int p, j, m, n, nzmax, nz, *Ap, *Ai ;
+    csi p, j, m, n, nzmax, nz, *Ap, *Ai ;
     double *Ax ;
     if (!A) { printf ("(null)\n") ; return (0) ; }
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     nzmax = A->nzmax ; nz = A->nz ;
     printf ("CSparse Version %d.%d.%d, %s.  %s\n", CS_VER, CS_SUBVER,
-	CS_SUBSUB, CS_DATE, CS_COPYRIGHT) ;
+        CS_SUBSUB, CS_DATE, CS_COPYRIGHT) ;
     if (nz < 0)
     {
-	printf ("%d-by-%d, nzmax: %d nnz: %d, 1-norm: %g\n", m, n, nzmax,
-		Ap [n], cs_norm (A)) ;
-	for (j = 0 ; j < n ; j++)
-	{
-	    printf ("    col %d : locations %d to %d\n", j, Ap [j], Ap [j+1]-1);
-	    for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	    {
-		printf ("      %d : %g\n", Ai [p], Ax ? Ax [p] : 1) ;
-		if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
-	    }
-	}
+        printf ("%g-by-%g, nzmax: %g nnz: %g, 1-norm: %g\n", (double) m,
+            (double) n, (double) nzmax, (double) (Ap [n]), cs_norm (A)) ;
+        for (j = 0 ; j < n ; j++)
+        {
+            printf ("    col %g : locations %g to %g\n", (double) j, 
+                (double) (Ap [j]), (double) (Ap [j+1]-1)) ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                printf ("      %g : %g\n", (double) (Ai [p]), Ax ? Ax [p] : 1) ;
+                if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
+            }
+        }
     }
     else
     {
-	printf ("triplet: %d-by-%d, nzmax: %d nnz: %d\n", m, n, nzmax, nz) ;
-	for (p = 0 ; p < nz ; p++)
-	{
-	    printf ("    %d %d : %g\n", Ai [p], Ap [p], Ax ? Ax [p] : 1) ;
-	    if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
-	}
+        printf ("triplet: %g-by-%g, nzmax: %g nnz: %g\n", (double) m,
+            (double) n, (double) nzmax, (double) nz) ;
+        for (p = 0 ; p < nz ; p++)
+        {
+            printf ("    %g %g : %g\n", (double) (Ai [p]), (double) (Ap [p]),
+                Ax ? Ax [p] : 1) ;
+            if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
+        }
     }
     return (1) ;
 }
diff --git a/CSparse/Source/cs_pvec.c b/CSparse/Source/cs_pvec.c
index 03c3cc6..399025f 100644
--- a/CSparse/Source/cs_pvec.c
+++ b/CSparse/Source/cs_pvec.c
@@ -1,9 +1,9 @@
 #include "cs.h"
 /* x = b(p), for dense vectors x and b; p=NULL denotes identity */
-int cs_pvec (const int *p, const double *b, double *x, int n)
+csi cs_pvec (const csi *p, const double *b, double *x, csi n)
 {
-    int k ;
-    if (!x || !b) return (0) ;				    /* check inputs */
+    csi k ;
+    if (!x || !b) return (0) ;                              /* check inputs */
     for (k = 0 ; k < n ; k++) x [k] = b [p ? p [k] : k] ;
     return (1) ;
 }
diff --git a/CSparse/Source/cs_qr.c b/CSparse/Source/cs_qr.c
index eb1774d..7eb81df 100644
--- a/CSparse/Source/cs_qr.c
+++ b/CSparse/Source/cs_qr.c
@@ -3,71 +3,71 @@
 csn *cs_qr (const cs *A, const css *S)
 {
     double *Rx, *Vx, *Ax, *x,  *Beta ;
-    int i, k, p, m, n, vnz, p1, top, m2, len, col, rnz, *s, *leftmost, *Ap, *Ai,
-	*parent, *Rp, *Ri, *Vp, *Vi, *w, *pinv, *q ;
+    csi i, k, p, m, n, vnz, p1, top, m2, len, col, rnz, *s, *leftmost, *Ap, *Ai,
+        *parent, *Rp, *Ri, *Vp, *Vi, *w, *pinv, *q ;
     cs *R, *V ;
     csn *N ;
     if (!CS_CSC (A) || !S) return (NULL) ;
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     q = S->q ; parent = S->parent ; pinv = S->pinv ; m2 = S->m2 ;
     vnz = S->lnz ; rnz = S->unz ; leftmost = S->leftmost ;
-    w = cs_malloc (m2+n, sizeof (int)) ;	    /* get int workspace */
-    x = cs_malloc (m2, sizeof (double)) ;	    /* get double workspace */
-    N = cs_calloc (1, sizeof (csn)) ;		    /* allocate result */
+    w = cs_malloc (m2+n, sizeof (csi)) ;            /* get csi workspace */
+    x = cs_malloc (m2, sizeof (double)) ;           /* get double workspace */
+    N = cs_calloc (1, sizeof (csn)) ;               /* allocate result */
     if (!w || !x || !N) return (cs_ndone (N, NULL, w, x, 0)) ;
-    s = w + m2 ;				    /* s is size n */
-    for (k = 0 ; k < m2 ; k++) x [k] = 0 ;	    /* clear workspace x */
-    N->L = V = cs_spalloc (m2, n, vnz, 1, 0) ;	    /* allocate result V */
-    N->U = R = cs_spalloc (m2, n, rnz, 1, 0) ;	    /* allocate result R */
+    s = w + m2 ;                                    /* s is size n */
+    for (k = 0 ; k < m2 ; k++) x [k] = 0 ;          /* clear workspace x */
+    N->L = V = cs_spalloc (m2, n, vnz, 1, 0) ;      /* allocate result V */
+    N->U = R = cs_spalloc (m2, n, rnz, 1, 0) ;      /* allocate result R */
     N->B = Beta = cs_malloc (n, sizeof (double)) ;  /* allocate result Beta */
     if (!R || !V || !Beta) return (cs_ndone (N, NULL, w, x, 0)) ;
     Rp = R->p ; Ri = R->i ; Rx = R->x ;
     Vp = V->p ; Vi = V->i ; Vx = V->x ;
     for (i = 0 ; i < m2 ; i++) w [i] = -1 ; /* clear w, to mark nodes */
     rnz = 0 ; vnz = 0 ;
-    for (k = 0 ; k < n ; k++)		    /* compute V and R */
+    for (k = 0 ; k < n ; k++)               /* compute V and R */
     {
-	Rp [k] = rnz ;			    /* R(:,k) starts here */
-	Vp [k] = p1 = vnz ;		    /* V(:,k) starts here */
-	w [k] = k ;			    /* add V(k,k) to pattern of V */
-	Vi [vnz++] = k ;
-	top = n ;
-	col = q ? q [k] : k ;
-	for (p = Ap [col] ; p < Ap [col+1] ; p++)   /* find R(:,k) pattern */
-	{
-	    i = leftmost [Ai [p]] ;	    /* i = min(find(A(i,q))) */
-	    for (len = 0 ; w [i] != k ; i = parent [i])	/* traverse up to k */
-	    {
-		s [len++] = i ;
-		w [i] = k ;
-	    }
-	    while (len > 0) s [--top] = s [--len] ; /* push path on stack */
-	    i = pinv [Ai [p]] ;		    /* i = permuted row of A(:,col) */
-	    x [i] = Ax [p] ;		    /* x (i) = A(:,col) */
-	    if (i > k && w [i] < k)	    /* pattern of V(:,k) = x (k+1:m) */
-	    {
-		Vi [vnz++] = i ;	    /* add i to pattern of V(:,k) */
-		w [i] = k ;
-	    }
-	}
-	for (p = top ; p < n ; p++) /* for each i in pattern of R(:,k) */
-	{
-	    i = s [p] ;			    /* R(i,k) is nonzero */
-	    cs_happly (V, i, Beta [i], x) ; /* apply (V(i),Beta(i)) to x */
-	    Ri [rnz] = i ;		    /* R(i,k) = x(i) */
-	    Rx [rnz++] = x [i] ;
-	    x [i] = 0 ;
-	    if (parent [i] == k) vnz = cs_scatter (V, i, 0, w, NULL, k, V, vnz);
-	}
-	for (p = p1 ; p < vnz ; p++)	    /* gather V(:,k) = x */
-	{
-	    Vx [p] = x [Vi [p]] ;
-	    x [Vi [p]] = 0 ;
-	}
-	Ri [rnz] = k ;			   /* R(k,k) = norm (x) */
-	Rx [rnz++] = cs_house (Vx+p1, Beta+k, vnz-p1) ;	/* [v,beta]=house(x) */
+        Rp [k] = rnz ;                      /* R(:,k) starts here */
+        Vp [k] = p1 = vnz ;                 /* V(:,k) starts here */
+        w [k] = k ;                         /* add V(k,k) to pattern of V */
+        Vi [vnz++] = k ;
+        top = n ;
+        col = q ? q [k] : k ;
+        for (p = Ap [col] ; p < Ap [col+1] ; p++)   /* find R(:,k) pattern */
+        {
+            i = leftmost [Ai [p]] ;         /* i = min(find(A(i,q))) */
+            for (len = 0 ; w [i] != k ; i = parent [i]) /* traverse up to k */
+            {
+                s [len++] = i ;
+                w [i] = k ;
+            }
+            while (len > 0) s [--top] = s [--len] ; /* push path on stack */
+            i = pinv [Ai [p]] ;             /* i = permuted row of A(:,col) */
+            x [i] = Ax [p] ;                /* x (i) = A(:,col) */
+            if (i > k && w [i] < k)         /* pattern of V(:,k) = x (k+1:m) */
+            {
+                Vi [vnz++] = i ;            /* add i to pattern of V(:,k) */
+                w [i] = k ;
+            }
+        }
+        for (p = top ; p < n ; p++) /* for each i in pattern of R(:,k) */
+        {
+            i = s [p] ;                     /* R(i,k) is nonzero */
+            cs_happly (V, i, Beta [i], x) ; /* apply (V(i),Beta(i)) to x */
+            Ri [rnz] = i ;                  /* R(i,k) = x(i) */
+            Rx [rnz++] = x [i] ;
+            x [i] = 0 ;
+            if (parent [i] == k) vnz = cs_scatter (V, i, 0, w, NULL, k, V, vnz);
+        }
+        for (p = p1 ; p < vnz ; p++)        /* gather V(:,k) = x */
+        {
+            Vx [p] = x [Vi [p]] ;
+            x [Vi [p]] = 0 ;
+        }
+        Ri [rnz] = k ;                     /* R(k,k) = norm (x) */
+        Rx [rnz++] = cs_house (Vx+p1, Beta+k, vnz-p1) ; /* [v,beta]=house(x) */
     }
-    Rp [n] = rnz ;			    /* finalize R */
-    Vp [n] = vnz ;			    /* finalize V */
+    Rp [n] = rnz ;                          /* finalize R */
+    Vp [n] = vnz ;                          /* finalize V */
     return (cs_ndone (N, NULL, w, x, 1)) ;  /* success */
 }
diff --git a/CSparse/Source/cs_qrsol.c b/CSparse/Source/cs_qrsol.c
index 7d07966..8b9f9ea 100644
--- a/CSparse/Source/cs_qrsol.c
+++ b/CSparse/Source/cs_qrsol.c
@@ -1,49 +1,49 @@
 #include "cs.h"
 /* x=A\b where A can be rectangular; b overwritten with solution */
-int cs_qrsol (int order, const cs *A, double *b)
+csi cs_qrsol (csi order, const cs *A, double *b)
 {
     double *x ;
     css *S ;
     csn *N ;
     cs *AT = NULL ;
-    int k, m, n, ok ;
-    if (!CS_CSC (A) || !b) return (0) ;	/* check inputs */
+    csi k, m, n, ok ;
+    if (!CS_CSC (A) || !b) return (0) ; /* check inputs */
     n = A->n ;
     m = A->m ;
     if (m >= n)
     {
-	S = cs_sqr (order, A, 1) ;	    /* ordering and symbolic analysis */
-	N = cs_qr (A, S) ;		    /* numeric QR factorization */
-	x = cs_calloc (S ? S->m2 : 1, sizeof (double)) ;    /* get workspace */
-	ok = (S && N && x) ;
-	if (ok)
-	{
-	    cs_ipvec (S->pinv, b, x, m) ;   /* x(0:m-1) = b(p(0:m-1) */
-	    for (k = 0 ; k < n ; k++)	    /* apply Householder refl. to x */
-	    {
-		cs_happly (N->L, k, N->B [k], x) ;
-	    }
-	    cs_usolve (N->U, x) ;	    /* x = R\x */
-	    cs_ipvec (S->q, x, b, n) ;	    /* b(q(0:n-1)) = x(0:n-1) */
-	}
+        S = cs_sqr (order, A, 1) ;          /* ordering and symbolic analysis */
+        N = cs_qr (A, S) ;                  /* numeric QR factorization */
+        x = cs_calloc (S ? S->m2 : 1, sizeof (double)) ;    /* get workspace */
+        ok = (S && N && x) ;
+        if (ok)
+        {
+            cs_ipvec (S->pinv, b, x, m) ;   /* x(0:m-1) = b(p(0:m-1) */
+            for (k = 0 ; k < n ; k++)       /* apply Householder refl. to x */
+            {
+                cs_happly (N->L, k, N->B [k], x) ;
+            }
+            cs_usolve (N->U, x) ;           /* x = R\x */
+            cs_ipvec (S->q, x, b, n) ;      /* b(q(0:n-1)) = x(0:n-1) */
+        }
     }
     else
     {
-	AT = cs_transpose (A, 1) ;	    /* Ax=b is underdetermined */
-	S = cs_sqr (order, AT, 1) ;	    /* ordering and symbolic analysis */
-	N = cs_qr (AT, S) ;		    /* numeric QR factorization of A' */
-	x = cs_calloc (S ? S->m2 : 1, sizeof (double)) ;    /* get workspace */
-	ok = (AT && S && N && x) ;
-	if (ok)
-	{
-	    cs_pvec (S->q, b, x, m) ;	    /* x(q(0:m-1)) = b(0:m-1) */
-	    cs_utsolve (N->U, x) ;	    /* x = R'\x */
-	    for (k = m-1 ; k >= 0 ; k--)    /* apply Householder refl. to x */
-	    {
-		cs_happly (N->L, k, N->B [k], x) ;
-	    }
-	    cs_pvec (S->pinv, x, b, n) ;    /* b(0:n-1) = x(p(0:n-1)) */
-	}
+        AT = cs_transpose (A, 1) ;          /* Ax=b is underdetermined */
+        S = cs_sqr (order, AT, 1) ;         /* ordering and symbolic analysis */
+        N = cs_qr (AT, S) ;                 /* numeric QR factorization of A' */
+        x = cs_calloc (S ? S->m2 : 1, sizeof (double)) ;    /* get workspace */
+        ok = (AT && S && N && x) ;
+        if (ok)
+        {
+            cs_pvec (S->q, b, x, m) ;       /* x(q(0:m-1)) = b(0:m-1) */
+            cs_utsolve (N->U, x) ;          /* x = R'\x */
+            for (k = m-1 ; k >= 0 ; k--)    /* apply Householder refl. to x */
+            {
+                cs_happly (N->L, k, N->B [k], x) ;
+            }
+            cs_pvec (S->pinv, x, b, n) ;    /* b(0:n-1) = x(p(0:n-1)) */
+        }
     }
     cs_free (x) ;
     cs_sfree (S) ;
diff --git a/CSparse/Source/cs_randperm.c b/CSparse/Source/cs_randperm.c
index de6b007..0580416 100644
--- a/CSparse/Source/cs_randperm.c
+++ b/CSparse/Source/cs_randperm.c
@@ -2,21 +2,21 @@
 /* return a random permutation vector, the identity perm, or p = n-1:-1:0.
  * seed = -1 means p = n-1:-1:0.  seed = 0 means p = identity.  otherwise
  * p = random permutation.  */
-int *cs_randperm (int n, int seed)
+csi *cs_randperm (csi n, csi seed)
 {
-    int *p, k, j, t ;
-    if (seed == 0) return (NULL) ;	/* return p = NULL (identity) */
-    p = cs_malloc (n, sizeof (int)) ;	/* allocate result */
-    if (!p) return (NULL) ;		/* out of memory */
+    csi *p, k, j, t ;
+    if (seed == 0) return (NULL) ;      /* return p = NULL (identity) */
+    p = cs_malloc (n, sizeof (csi)) ;   /* allocate result */
+    if (!p) return (NULL) ;             /* out of memory */
     for (k = 0 ; k < n ; k++) p [k] = n-k-1 ;
-    if (seed == -1) return (p) ;	/* return reverse permutation */
-    srand (seed) ;			/* get new random number seed */
+    if (seed == -1) return (p) ;        /* return reverse permutation */
+    srand (seed) ;                      /* get new random number seed */
     for (k = 0 ; k < n ; k++)
     {
-	j = k + (rand ( ) % (n-k)) ;    /* j = rand int in range k to n-1 */
-	t = p [j] ;			/* swap p[k] and p[j] */
-	p [j] = p [k] ;
-	p [k] = t ;
+        j = k + (rand ( ) % (n-k)) ;    /* j = rand integer in range k to n-1 */
+        t = p [j] ;                     /* swap p[k] and p[j] */
+        p [j] = p [k] ;
+        p [k] = t ;
     }
     return (p) ;
 }
diff --git a/CSparse/Source/cs_reach.c b/CSparse/Source/cs_reach.c
index 29e8ca5..1b5686d 100644
--- a/CSparse/Source/cs_reach.c
+++ b/CSparse/Source/cs_reach.c
@@ -1,19 +1,19 @@
 #include "cs.h"
 /* xi [top...n-1] = nodes reachable from graph of G*P' via nodes in B(:,k).
  * xi [n...2n-1] used as workspace */
-int cs_reach (cs *G, const cs *B, int k, int *xi, const int *pinv)
+csi cs_reach (cs *G, const cs *B, csi k, csi *xi, const csi *pinv)
 {
-    int p, n, top, *Bp, *Bi, *Gp ;
+    csi p, n, top, *Bp, *Bi, *Gp ;
     if (!CS_CSC (G) || !CS_CSC (B) || !xi) return (-1) ;    /* check inputs */
     n = G->n ; Bp = B->p ; Bi = B->i ; Gp = G->p ;
     top = n ;
     for (p = Bp [k] ; p < Bp [k+1] ; p++)
     {
-	if (!CS_MARKED (Gp, Bi [p]))	/* start a dfs at unmarked node i */
-	{
-	    top = cs_dfs (Bi [p], G, top, xi, xi+n, pinv) ;
-	}
+        if (!CS_MARKED (Gp, Bi [p]))    /* start a dfs at unmarked node i */
+        {
+            top = cs_dfs (Bi [p], G, top, xi, xi+n, pinv) ;
+        }
     }
-    for (p = top ; p < n ; p++) CS_MARK (Gp, xi [p]) ;	/* restore G */
+    for (p = top ; p < n ; p++) CS_MARK (Gp, xi [p]) ;  /* restore G */
     return (top) ;
 }
diff --git a/CSparse/Source/cs_scatter.c b/CSparse/Source/cs_scatter.c
index 0077826..b87bf94 100644
--- a/CSparse/Source/cs_scatter.c
+++ b/CSparse/Source/cs_scatter.c
@@ -1,22 +1,22 @@
 #include "cs.h"
 /* x = x + beta * A(:,j), where x is a dense vector and A(:,j) is sparse */
-int cs_scatter (const cs *A, int j, double beta, int *w, double *x, int mark,
-    cs *C, int nz)
+csi cs_scatter (const cs *A, csi j, double beta, csi *w, double *x, csi mark,
+    cs *C, csi nz)
 {
-    int i, p, *Ap, *Ai, *Ci ;
+    csi i, p, *Ap, *Ai, *Ci ;
     double *Ax ;
-    if (!CS_CSC (A) || !w || !CS_CSC (C)) return (-1) ;	    /* check inputs */
+    if (!CS_CSC (A) || !w || !CS_CSC (C)) return (-1) ;     /* check inputs */
     Ap = A->p ; Ai = A->i ; Ax = A->x ; Ci = C->i ;
     for (p = Ap [j] ; p < Ap [j+1] ; p++)
     {
-	i = Ai [p] ;				/* A(i,j) is nonzero */
-	if (w [i] < mark)
-	{
-	    w [i] = mark ;			/* i is new entry in column j */
-	    Ci [nz++] = i ;			/* add i to pattern of C(:,j) */
-	    if (x) x [i] = beta * Ax [p] ;	/* x(i) = beta*A(i,j) */
-	}
-	else if (x) x [i] += beta * Ax [p] ;	/* i exists in C(:,j) already */
+        i = Ai [p] ;                            /* A(i,j) is nonzero */
+        if (w [i] < mark)
+        {
+            w [i] = mark ;                      /* i is new entry in column j */
+            Ci [nz++] = i ;                     /* add i to pattern of C(:,j) */
+            if (x) x [i] = beta * Ax [p] ;      /* x(i) = beta*A(i,j) */
+        }
+        else if (x) x [i] += beta * Ax [p] ;    /* i exists in C(:,j) already */
     }
     return (nz) ;
 }
diff --git a/CSparse/Source/cs_scc.c b/CSparse/Source/cs_scc.c
index e56d086..353a67f 100644
--- a/CSparse/Source/cs_scc.c
+++ b/CSparse/Source/cs_scc.c
@@ -1,39 +1,39 @@
 #include "cs.h"
 /* find the strongly connected components of a square matrix */
-csd *cs_scc (cs *A)	/* matrix A temporarily modified, then restored */
+csd *cs_scc (cs *A)     /* matrix A temporarily modified, then restored */
 {
-    int n, i, k, b, nb = 0, top, *xi, *pstack, *p, *r, *Ap, *ATp, *rcopy, *Blk ;
+    csi n, i, k, b, nb = 0, top, *xi, *pstack, *p, *r, *Ap, *ATp, *rcopy, *Blk ;
     cs *AT ;
     csd *D ;
-    if (!CS_CSC (A)) return (NULL) ;		    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;                /* check inputs */
     n = A->n ; Ap = A->p ;
-    D = cs_dalloc (n, 0) ;			    /* allocate result */
-    AT = cs_transpose (A, 0) ;			    /* AT = A' */
-    xi = cs_malloc (2*n+1, sizeof (int)) ;	    /* get workspace */
+    D = cs_dalloc (n, 0) ;                          /* allocate result */
+    AT = cs_transpose (A, 0) ;                      /* AT = A' */
+    xi = cs_malloc (2*n+1, sizeof (csi)) ;          /* get workspace */
     if (!D || !AT || !xi) return (cs_ddone (D, AT, xi, 0)) ;
     Blk = xi ; rcopy = pstack = xi + n ;
     p = D->p ; r = D->r ; ATp = AT->p ;
     top = n ;
-    for (i = 0 ; i < n ; i++)	/* first dfs(A) to find finish times (xi) */
+    for (i = 0 ; i < n ; i++)   /* first dfs(A) to find finish times (xi) */
     {
-	if (!CS_MARKED (Ap, i)) top = cs_dfs (i, A, top, xi, pstack, NULL) ;
+        if (!CS_MARKED (Ap, i)) top = cs_dfs (i, A, top, xi, pstack, NULL) ;
     }
-    for (i = 0 ; i < n ; i++) CS_MARK (Ap, i) ;	/* restore A; unmark all nodes*/
+    for (i = 0 ; i < n ; i++) CS_MARK (Ap, i) ; /* restore A; unmark all nodes*/
     top = n ;
     nb = n ;
-    for (k = 0 ; k < n ; k++)	/* dfs(A') to find strongly connnected comp */
+    for (k = 0 ; k < n ; k++)   /* dfs(A') to find strongly connnected comp */
     {
-	i = xi [k] ;		/* get i in reverse order of finish times */
-	if (CS_MARKED (ATp, i)) continue ;  /* skip node i if already ordered */
-	r [nb--] = top ;	/* node i is the start of a component in p */
-	top = cs_dfs (i, AT, top, p, pstack, NULL) ;
+        i = xi [k] ;            /* get i in reverse order of finish times */
+        if (CS_MARKED (ATp, i)) continue ;  /* skip node i if already ordered */
+        r [nb--] = top ;        /* node i is the start of a component in p */
+        top = cs_dfs (i, AT, top, p, pstack, NULL) ;
     }
-    r [nb] = 0 ;		/* first block starts at zero; shift r up */
+    r [nb] = 0 ;                /* first block starts at zero; shift r up */
     for (k = nb ; k <= n ; k++) r [k-nb] = r [k] ;
-    D->nb = nb = n-nb ;		/* nb = # of strongly connected components */
-    for (b = 0 ; b < nb ; b++)	/* sort each block in natural order */
+    D->nb = nb = n-nb ;         /* nb = # of strongly connected components */
+    for (b = 0 ; b < nb ; b++)  /* sort each block in natural order */
     {
-	for (k = r [b] ; k < r [b+1] ; k++) Blk [p [k]] = b ;
+        for (k = r [b] ; k < r [b+1] ; k++) Blk [p [k]] = b ;
     }
     for (b = 0 ; b <= nb ; b++) rcopy [b] = r [b] ;
     for (i = 0 ; i < n ; i++) p [rcopy [Blk [i]]++] = i ;
diff --git a/CSparse/Source/cs_schol.c b/CSparse/Source/cs_schol.c
index 32c6734..80dab48 100644
--- a/CSparse/Source/cs_schol.c
+++ b/CSparse/Source/cs_schol.c
@@ -1,25 +1,25 @@
 #include "cs.h"
 /* ordering and symbolic analysis for a Cholesky factorization */
-css *cs_schol (int order, const cs *A)
+css *cs_schol (csi order, const cs *A)
 {
-    int n, *c, *post, *P ;
+    csi n, *c, *post, *P ;
     cs *C ;
     css *S ;
-    if (!CS_CSC (A)) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;        /* check inputs */
     n = A->n ;
-    S = cs_calloc (1, sizeof (css)) ;	    /* allocate result S */
-    if (!S) return (NULL) ;		    /* out of memory */
-    P = cs_amd (order, A) ;		    /* P = amd(A+A'), or natural */
-    S->pinv = cs_pinv (P, n) ;		    /* find inverse permutation */
+    S = cs_calloc (1, sizeof (css)) ;       /* allocate result S */
+    if (!S) return (NULL) ;                 /* out of memory */
+    P = cs_amd (order, A) ;                 /* P = amd(A+A'), or natural */
+    S->pinv = cs_pinv (P, n) ;              /* find inverse permutation */
     cs_free (P) ;
     if (order && !S->pinv) return (cs_sfree (S)) ;
-    C = cs_symperm (A, S->pinv, 0) ;	    /* C = spones(triu(A(P,P))) */
-    S->parent = cs_etree (C, 0) ;	    /* find etree of C */
-    post = cs_post (S->parent, n) ;	    /* postorder the etree */
+    C = cs_symperm (A, S->pinv, 0) ;        /* C = spones(triu(A(P,P))) */
+    S->parent = cs_etree (C, 0) ;           /* find etree of C */
+    post = cs_post (S->parent, n) ;         /* postorder the etree */
     c = cs_counts (C, S->parent, post, 0) ; /* find column counts of chol(C) */
     cs_free (post) ;
     cs_spfree (C) ;
-    S->cp = cs_malloc (n+1, sizeof (int)) ; /* allocate result S->cp */
+    S->cp = cs_malloc (n+1, sizeof (csi)) ; /* allocate result S->cp */
     S->unz = S->lnz = cs_cumsum (S->cp, c, n) ; /* find column pointers for L */
     cs_free (c) ;
     return ((S->lnz >= 0) ? S : cs_sfree (S)) ;
diff --git a/CSparse/Source/cs_spsolve.c b/CSparse/Source/cs_spsolve.c
index d004f9c..e7bcc00 100644
--- a/CSparse/Source/cs_spsolve.c
+++ b/CSparse/Source/cs_spsolve.c
@@ -1,28 +1,28 @@
 #include "cs.h"
 /* solve Gx=b(:,k), where G is either upper (lo=0) or lower (lo=1) triangular */
-int cs_spsolve (cs *G, const cs *B, int k, int *xi, double *x, const int *pinv,
-    int lo)
+csi cs_spsolve (cs *G, const cs *B, csi k, csi *xi, double *x, const csi *pinv,
+    csi lo)
 {
-    int j, J, p, q, px, top, n, *Gp, *Gi, *Bp, *Bi ;
+    csi j, J, p, q, px, top, n, *Gp, *Gi, *Bp, *Bi ;
     double *Gx, *Bx ;
     if (!CS_CSC (G) || !CS_CSC (B) || !xi || !x) return (-1) ;
     Gp = G->p ; Gi = G->i ; Gx = G->x ; n = G->n ;
     Bp = B->p ; Bi = B->i ; Bx = B->x ;
-    top = cs_reach (G, B, k, xi, pinv) ;	/* xi[top..n-1]=Reach(B(:,k)) */
+    top = cs_reach (G, B, k, xi, pinv) ;        /* xi[top..n-1]=Reach(B(:,k)) */
     for (p = top ; p < n ; p++) x [xi [p]] = 0 ;    /* clear x */
-    for (p = Bp [k] ; p < Bp [k+1] ; p++) x [Bi [p]] = Bx [p] ;	/* scatter B */
+    for (p = Bp [k] ; p < Bp [k+1] ; p++) x [Bi [p]] = Bx [p] ; /* scatter B */
     for (px = top ; px < n ; px++)
     {
-	j = xi [px] ;				    /* x(j) is nonzero */
-	J = pinv ? (pinv [j]) : j ;		    /* j maps to col J of G */
-	if (J < 0) continue ;			    /* column J is empty */
-	x [j] /= Gx [lo ? (Gp [J]) : (Gp [J+1]-1)] ;/* x(j) /= G(j,j) */
-	p = lo ? (Gp [J]+1) : (Gp [J]) ;	    /* lo: L(j,j) 1st entry */
-	q = lo ? (Gp [J+1]) : (Gp [J+1]-1) ;	    /* up: U(j,j) last entry */
-	for ( ; p < q ; p++)
-	{
-	    x [Gi [p]] -= Gx [p] * x [j] ;	    /* x(i) -= G(i,j) * x(j) */
-	}
+        j = xi [px] ;                               /* x(j) is nonzero */
+        J = pinv ? (pinv [j]) : j ;                 /* j maps to col J of G */
+        if (J < 0) continue ;                       /* column J is empty */
+        x [j] /= Gx [lo ? (Gp [J]) : (Gp [J+1]-1)] ;/* x(j) /= G(j,j) */
+        p = lo ? (Gp [J]+1) : (Gp [J]) ;            /* lo: L(j,j) 1st entry */
+        q = lo ? (Gp [J+1]) : (Gp [J+1]-1) ;        /* up: U(j,j) last entry */
+        for ( ; p < q ; p++)
+        {
+            x [Gi [p]] -= Gx [p] * x [j] ;          /* x(i) -= G(i,j) * x(j) */
+        }
     }
-    return (top) ;				    /* return top of stack */
+    return (top) ;                                  /* return top of stack */
 }
diff --git a/CSparse/Source/cs_sqr.c b/CSparse/Source/cs_sqr.c
index ad39bd2..d223c4a 100644
--- a/CSparse/Source/cs_sqr.c
+++ b/CSparse/Source/cs_sqr.c
@@ -1,55 +1,55 @@
 #include "cs.h"
 /* compute nnz(V) = S->lnz, S->pinv, S->leftmost, S->m2 from A and S->parent */
-static int cs_vcount (const cs *A, css *S)
+static csi cs_vcount (const cs *A, css *S)
 {
-    int i, k, p, pa, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i, *next, *head,
-	*tail, *nque, *pinv, *leftmost, *w, *parent = S->parent ;
-    S->pinv = pinv = cs_malloc (m+n, sizeof (int)) ;	    /* allocate pinv, */
-    S->leftmost = leftmost = cs_malloc (m, sizeof (int)) ;  /* and leftmost */
-    w = cs_malloc (m+3*n, sizeof (int)) ;   /* get workspace */
+    csi i, k, p, pa, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i, *next, *head,
+        *tail, *nque, *pinv, *leftmost, *w, *parent = S->parent ;
+    S->pinv = pinv = cs_malloc (m+n, sizeof (csi)) ;        /* allocate pinv, */
+    S->leftmost = leftmost = cs_malloc (m, sizeof (csi)) ;  /* and leftmost */
+    w = cs_malloc (m+3*n, sizeof (csi)) ;   /* get workspace */
     if (!pinv || !w || !leftmost)
     {
-	cs_free (w) ;			    /* pinv and leftmost freed later */
-	return (0) ;			    /* out of memory */
+        cs_free (w) ;                       /* pinv and leftmost freed later */
+        return (0) ;                        /* out of memory */
     }
     next = w ; head = w + m ; tail = w + m + n ; nque = w + m + 2*n ;
-    for (k = 0 ; k < n ; k++) head [k] = -1 ;	/* queue k is empty */
+    for (k = 0 ; k < n ; k++) head [k] = -1 ;   /* queue k is empty */
     for (k = 0 ; k < n ; k++) tail [k] = -1 ;
     for (k = 0 ; k < n ; k++) nque [k] = 0 ;
     for (i = 0 ; i < m ; i++) leftmost [i] = -1 ;
     for (k = n-1 ; k >= 0 ; k--)
     {
-	for (p = Ap [k] ; p < Ap [k+1] ; p++)
-	{
-	    leftmost [Ai [p]] = k ;	    /* leftmost[i] = min(find(A(i,:)))*/
-	}
+        for (p = Ap [k] ; p < Ap [k+1] ; p++)
+        {
+            leftmost [Ai [p]] = k ;         /* leftmost[i] = min(find(A(i,:)))*/
+        }
     }
-    for (i = m-1 ; i >= 0 ; i--)	    /* scan rows in reverse order */
+    for (i = m-1 ; i >= 0 ; i--)            /* scan rows in reverse order */
     {
-	pinv [i] = -1 ;			    /* row i is not yet ordered */
-	k = leftmost [i] ;
-	if (k == -1) continue ;		    /* row i is empty */
-	if (nque [k]++ == 0) tail [k] = i ; /* first row in queue k */
-	next [i] = head [k] ;		    /* put i at head of queue k */
-	head [k] = i ;
+        pinv [i] = -1 ;                     /* row i is not yet ordered */
+        k = leftmost [i] ;
+        if (k == -1) continue ;             /* row i is empty */
+        if (nque [k]++ == 0) tail [k] = i ; /* first row in queue k */
+        next [i] = head [k] ;               /* put i at head of queue k */
+        head [k] = i ;
     }
     S->lnz = 0 ;
     S->m2 = m ;
-    for (k = 0 ; k < n ; k++)		    /* find row permutation and nnz(V)*/
+    for (k = 0 ; k < n ; k++)               /* find row permutation and nnz(V)*/
     {
-	i = head [k] ;			    /* remove row i from queue k */
-	S->lnz++ ;			    /* count V(k,k) as nonzero */
-	if (i < 0) i = S->m2++ ;	    /* add a fictitious row */
-	pinv [i] = k ;			    /* associate row i with V(:,k) */
-	if (--nque [k] <= 0) continue ;	    /* skip if V(k+1:m,k) is empty */
-	S->lnz += nque [k] ;		    /* nque [k] is nnz (V(k+1:m,k)) */
-	if ((pa = parent [k]) != -1)	    /* move all rows to parent of k */
-	{
-	    if (nque [pa] == 0) tail [pa] = tail [k] ;
-	    next [tail [k]] = head [pa] ;
-	    head [pa] = next [i] ;
-	    nque [pa] += nque [k] ;
-	}
+        i = head [k] ;                      /* remove row i from queue k */
+        S->lnz++ ;                          /* count V(k,k) as nonzero */
+        if (i < 0) i = S->m2++ ;            /* add a fictitious row */
+        pinv [i] = k ;                      /* associate row i with V(:,k) */
+        if (--nque [k] <= 0) continue ;     /* skip if V(k+1:m,k) is empty */
+        S->lnz += nque [k] ;                /* nque [k] is nnz (V(k+1:m,k)) */
+        if ((pa = parent [k]) != -1)        /* move all rows to parent of k */
+        {
+            if (nque [pa] == 0) tail [pa] = tail [k] ;
+            next [tail [k]] = head [pa] ;
+            head [pa] = next [i] ;
+            nque [pa] += nque [k] ;
+        }
     }
     for (i = 0 ; i < m ; i++) if (pinv [i] < 0) pinv [i] = k++ ;
     cs_free (w) ;
@@ -57,32 +57,31 @@ static int cs_vcount (const cs *A, css *S)
 }
 
 /* symbolic ordering and analysis for QR or LU */
-css *cs_sqr (int order, const cs *A, int qr)
+css *cs_sqr (csi order, const cs *A, csi qr)
 {
-    int n, k, ok = 1, *post ;
+    csi n, k, ok = 1, *post ;
     css *S ;
-    if (!CS_CSC (A)) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;        /* check inputs */
     n = A->n ;
-    S = cs_calloc (1, sizeof (css)) ;	    /* allocate result S */
-    if (!S) return (NULL) ;		    /* out of memory */
-    S->q = cs_amd (order, A) ;		    /* fill-reducing ordering */
+    S = cs_calloc (1, sizeof (css)) ;       /* allocate result S */
+    if (!S) return (NULL) ;                 /* out of memory */
+    S->q = cs_amd (order, A) ;              /* fill-reducing ordering */
     if (order && !S->q) return (cs_sfree (S)) ;
-    if (qr)				    /* QR symbolic analysis */
+    if (qr)                                 /* QR symbolic analysis */
     {
-	cs *C = order ? cs_permute (A, NULL, S->q, 0) : ((cs *) A) ;
-	S->parent = cs_etree (C, 1) ;	    /* etree of C'*C, where C=A(:,q) */
-	post = cs_post (S->parent, n) ;
-	S->cp = cs_counts (C, S->parent, post, 1) ;  /* col counts chol(C'*C) */
-	cs_free (post) ;
-	ok = C && S->parent && S->cp && cs_vcount (C, S) ;
-	if (ok) for (S->unz = 0, k = 0 ; k < n ; k++) S->unz += S->cp [k] ;
-	ok = ok && S->lnz >= 0 && S->unz >= 0 ;	    /* int overflow guard */
-	if (order) cs_spfree (C) ;
+        cs *C = order ? cs_permute (A, NULL, S->q, 0) : ((cs *) A) ;
+        S->parent = cs_etree (C, 1) ;       /* etree of C'*C, where C=A(:,q) */
+        post = cs_post (S->parent, n) ;
+        S->cp = cs_counts (C, S->parent, post, 1) ;  /* col counts chol(C'*C) */
+        cs_free (post) ;
+        ok = C && S->parent && S->cp && cs_vcount (C, S) ;
+        if (ok) for (S->unz = 0, k = 0 ; k < n ; k++) S->unz += S->cp [k] ;
+        if (order) cs_spfree (C) ;
     }
     else
     {
-	S->unz = 4*(A->p [n]) + n ;	    /* for LU factorization only, */
-	S->lnz = S->unz ;		    /* guess nnz(L) and nnz(U) */
+        S->unz = 4*(A->p [n]) + n ;         /* for LU factorization only, */
+        S->lnz = S->unz ;                   /* guess nnz(L) and nnz(U) */
     }
-    return (ok ? S : cs_sfree (S)) ;	    /* return result S */
+    return (ok ? S : cs_sfree (S)) ;        /* return result S */
 }
diff --git a/CSparse/Source/cs_symperm.c b/CSparse/Source/cs_symperm.c
index 668526d..0925e31 100644
--- a/CSparse/Source/cs_symperm.c
+++ b/CSparse/Source/cs_symperm.c
@@ -1,39 +1,39 @@
 #include "cs.h"
 /* C = A(p,p) where A and C are symmetric the upper part stored; pinv not p */
-cs *cs_symperm (const cs *A, const int *pinv, int values)
+cs *cs_symperm (const cs *A, const csi *pinv, csi values)
 {
-    int i, j, p, q, i2, j2, n, *Ap, *Ai, *Cp, *Ci, *w ;
+    csi i, j, p, q, i2, j2, n, *Ap, *Ai, *Cp, *Ci, *w ;
     double *Cx, *Ax ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;			/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;                    /* check inputs */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     C = cs_spalloc (n, n, Ap [n], values && (Ax != NULL), 0) ; /* alloc result*/
-    w = cs_calloc (n, sizeof (int)) ;			/* get workspace */
-    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;	/* out of memory */
+    w = cs_calloc (n, sizeof (csi)) ;                   /* get workspace */
+    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;    /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    for (j = 0 ; j < n ; j++)		/* count entries in each column of C */
+    for (j = 0 ; j < n ; j++)           /* count entries in each column of C */
     {
-	j2 = pinv ? pinv [j] : j ;	/* column j of A is column j2 of C */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    if (i > j) continue ;	/* skip lower triangular part of A */
-	    i2 = pinv ? pinv [i] : i ;	/* row i of A is row i2 of C */
-	    w [CS_MAX (i2, j2)]++ ;	/* column count of C */
-	}
+        j2 = pinv ? pinv [j] : j ;      /* column j of A is column j2 of C */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i > j) continue ;       /* skip lower triangular part of A */
+            i2 = pinv ? pinv [i] : i ;  /* row i of A is row i2 of C */
+            w [CS_MAX (i2, j2)]++ ;     /* column count of C */
+        }
     }
-    cs_cumsum (Cp, w, n) ;		/* compute column pointers of C */
+    cs_cumsum (Cp, w, n) ;              /* compute column pointers of C */
     for (j = 0 ; j < n ; j++)
     {
-	j2 = pinv ? pinv [j] : j ;	/* column j of A is column j2 of C */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    if (i > j) continue ;	/* skip lower triangular part of A*/
-	    i2 = pinv ? pinv [i] : i ;	/* row i of A is row i2 of C */
-	    Ci [q = w [CS_MAX (i2, j2)]++] = CS_MIN (i2, j2) ;
-	    if (Cx) Cx [q] = Ax [p] ;
-	}
+        j2 = pinv ? pinv [j] : j ;      /* column j of A is column j2 of C */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i > j) continue ;       /* skip lower triangular part of A*/
+            i2 = pinv ? pinv [i] : i ;  /* row i of A is row i2 of C */
+            Ci [q = w [CS_MAX (i2, j2)]++] = CS_MIN (i2, j2) ;
+            if (Cx) Cx [q] = Ax [p] ;
+        }
     }
-    return (cs_done (C, w, NULL, 1)) ;	/* success; free workspace, return C */
+    return (cs_done (C, w, NULL, 1)) ;  /* success; free workspace, return C */
 }
diff --git a/CSparse/Source/cs_tdfs.c b/CSparse/Source/cs_tdfs.c
index ad19890..3e3047b 100644
--- a/CSparse/Source/cs_tdfs.c
+++ b/CSparse/Source/cs_tdfs.c
@@ -1,24 +1,24 @@
 #include "cs.h"
 /* depth-first search and postorder of a tree rooted at node j */
-int cs_tdfs (int j, int k, int *head, const int *next, int *post, int *stack)
+csi cs_tdfs (csi j, csi k, csi *head, const csi *next, csi *post, csi *stack)
 {
-    int i, p, top = 0 ;
+    csi i, p, top = 0 ;
     if (!head || !next || !post || !stack) return (-1) ;    /* check inputs */
-    stack [0] = j ;		    /* place j on the stack */
-    while (top >= 0)		    /* while (stack is not empty) */
+    stack [0] = j ;                 /* place j on the stack */
+    while (top >= 0)                /* while (stack is not empty) */
     {
-	p = stack [top] ;	    /* p = top of stack */
-	i = head [p] ;		    /* i = youngest child of p */
-	if (i == -1)
-	{
-	    top-- ;		    /* p has no unordered children left */
-	    post [k++] = p ;	    /* node p is the kth postordered node */
-	}
-	else
-	{
-	    head [p] = next [i] ;   /* remove i from children of p */
-	    stack [++top] = i ;	    /* start dfs on child node i */
-	}
+        p = stack [top] ;           /* p = top of stack */
+        i = head [p] ;              /* i = youngest child of p */
+        if (i == -1)
+        {
+            top-- ;                 /* p has no unordered children left */
+            post [k++] = p ;        /* node p is the kth postordered node */
+        }
+        else
+        {
+            head [p] = next [i] ;   /* remove i from children of p */
+            stack [++top] = i ;     /* start dfs on child node i */
+        }
     }
     return (k) ;
 }
diff --git a/CSparse/Source/cs_transpose.c b/CSparse/Source/cs_transpose.c
index 9daa84d..1caf02d 100644
--- a/CSparse/Source/cs_transpose.c
+++ b/CSparse/Source/cs_transpose.c
@@ -1,25 +1,25 @@
 #include "cs.h"
 /* C = A' */
-cs *cs_transpose (const cs *A, int values)
+cs *cs_transpose (const cs *A, csi values)
 {
-    int p, q, j, *Cp, *Ci, n, m, *Ap, *Ai, *w ;
+    csi p, q, j, *Cp, *Ci, n, m, *Ap, *Ai, *w ;
     double *Cx, *Ax ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;	/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;    /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    C = cs_spalloc (n, m, Ap [n], values && Ax, 0) ;	   /* allocate result */
-    w = cs_calloc (m, sizeof (int)) ;			   /* get workspace */
-    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;	   /* out of memory */
+    C = cs_spalloc (n, m, Ap [n], values && Ax, 0) ;       /* allocate result */
+    w = cs_calloc (m, sizeof (csi)) ;                      /* get workspace */
+    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;       /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    for (p = 0 ; p < Ap [n] ; p++) w [Ai [p]]++ ;	   /* row counts */
-    cs_cumsum (Cp, w, m) ;				   /* row pointers */
+    for (p = 0 ; p < Ap [n] ; p++) w [Ai [p]]++ ;          /* row counts */
+    cs_cumsum (Cp, w, m) ;                                 /* row pointers */
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    Ci [q = w [Ai [p]]++] = j ;	/* place A(i,j) as entry C(j,i) */
-	    if (Cx) Cx [q] = Ax [p] ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            Ci [q = w [Ai [p]]++] = j ; /* place A(i,j) as entry C(j,i) */
+            if (Cx) Cx [q] = Ax [p] ;
+        }
     }
-    return (cs_done (C, w, NULL, 1)) ;	/* success; free w and return C */
+    return (cs_done (C, w, NULL, 1)) ;  /* success; free w and return C */
 }
diff --git a/CSparse/Source/cs_updown.c b/CSparse/Source/cs_updown.c
index 90dc4cc..0aabba5 100644
--- a/CSparse/Source/cs_updown.c
+++ b/CSparse/Source/cs_updown.c
@@ -1,36 +1,36 @@
 #include "cs.h"
 /* sparse Cholesky update/downdate, L*L' + sigma*w*w' (sigma = +1 or -1) */
-int cs_updown (cs *L, int sigma, const cs *C, const int *parent)
+csi cs_updown (cs *L, csi sigma, const cs *C, const csi *parent)
 {
-    int n, p, f, j, *Lp, *Li, *Cp, *Ci ;
+    csi n, p, f, j, *Lp, *Li, *Cp, *Ci ;
     double *Lx, *Cx, alpha, beta = 1, delta, gamma, w1, w2, *w, beta2 = 1 ;
     if (!CS_CSC (L) || !CS_CSC (C) || !parent) return (0) ;  /* check inputs */
     Lp = L->p ; Li = L->i ; Lx = L->x ; n = L->n ;
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    if ((p = Cp [0]) >= Cp [1]) return (1) ;	    /* return if C empty */
-    w = cs_malloc (n, sizeof (double)) ;	    /* get workspace */
-    if (!w) return (0) ;			    /* out of memory */
+    if ((p = Cp [0]) >= Cp [1]) return (1) ;        /* return if C empty */
+    w = cs_malloc (n, sizeof (double)) ;            /* get workspace */
+    if (!w) return (0) ;                            /* out of memory */
     f = Ci [p] ;
-    for ( ; p < Cp [1] ; p++) f = CS_MIN (f, Ci [p]) ;	/* f = min (find (C)) */
-    for (j = f ; j != -1 ; j = parent [j]) w [j] = 0 ;	/* clear workspace w */
+    for ( ; p < Cp [1] ; p++) f = CS_MIN (f, Ci [p]) ;  /* f = min (find (C)) */
+    for (j = f ; j != -1 ; j = parent [j]) w [j] = 0 ;  /* clear workspace w */
     for (p = Cp [0] ; p < Cp [1] ; p++) w [Ci [p]] = Cx [p] ; /* w = C */
-    for (j = f ; j != -1 ; j = parent [j])	    /* walk path f up to root */
+    for (j = f ; j != -1 ; j = parent [j])          /* walk path f up to root */
     {
-	p = Lp [j] ;
-	alpha = w [j] / Lx [p] ;		    /* alpha = w(j) / L(j,j) */
-	beta2 = beta*beta + sigma*alpha*alpha ;
-	if (beta2 <= 0) break ;			    /* not positive definite */
-	beta2 = sqrt (beta2) ;
-	delta = (sigma > 0) ? (beta / beta2) : (beta2 / beta) ;
-	gamma = sigma * alpha / (beta2 * beta) ;
-	Lx [p] = delta * Lx [p] + ((sigma > 0) ? (gamma * w [j]) : 0) ;
-	beta = beta2 ;
-	for (p++ ; p < Lp [j+1] ; p++)
-	{
-	    w1 = w [Li [p]] ;
-	    w [Li [p]] = w2 = w1 - alpha * Lx [p] ;
-	    Lx [p] = delta * Lx [p] + gamma * ((sigma > 0) ? w1 : w2) ;
-	}
+        p = Lp [j] ;
+        alpha = w [j] / Lx [p] ;                    /* alpha = w(j) / L(j,j) */
+        beta2 = beta*beta + sigma*alpha*alpha ;
+        if (beta2 <= 0) break ;                     /* not positive definite */
+        beta2 = sqrt (beta2) ;
+        delta = (sigma > 0) ? (beta / beta2) : (beta2 / beta) ;
+        gamma = sigma * alpha / (beta2 * beta) ;
+        Lx [p] = delta * Lx [p] + ((sigma > 0) ? (gamma * w [j]) : 0) ;
+        beta = beta2 ;
+        for (p++ ; p < Lp [j+1] ; p++)
+        {
+            w1 = w [Li [p]] ;
+            w [Li [p]] = w2 = w1 - alpha * Lx [p] ;
+            Lx [p] = delta * Lx [p] + gamma * ((sigma > 0) ? w1 : w2) ;
+        }
     }
     cs_free (w) ;
     return (beta2 > 0) ;
diff --git a/CSparse/Source/cs_usolve.c b/CSparse/Source/cs_usolve.c
index 40e0892..ac100c0 100644
--- a/CSparse/Source/cs_usolve.c
+++ b/CSparse/Source/cs_usolve.c
@@ -1,18 +1,18 @@
 #include "cs.h"
 /* solve Ux=b where x and b are dense.  x=b on input, solution on output. */
-int cs_usolve (const cs *U, double *x)
+csi cs_usolve (const cs *U, double *x)
 {
-    int p, j, n, *Up, *Ui ;
+    csi p, j, n, *Up, *Ui ;
     double *Ux ;
-    if (!CS_CSC (U) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (U) || !x) return (0) ;                     /* check inputs */
     n = U->n ; Up = U->p ; Ui = U->i ; Ux = U->x ;
     for (j = n-1 ; j >= 0 ; j--)
     {
-	x [j] /= Ux [Up [j+1]-1] ;
-	for (p = Up [j] ; p < Up [j+1]-1 ; p++)
-	{
-	    x [Ui [p]] -= Ux [p] * x [j] ;
-	}
+        x [j] /= Ux [Up [j+1]-1] ;
+        for (p = Up [j] ; p < Up [j+1]-1 ; p++)
+        {
+            x [Ui [p]] -= Ux [p] * x [j] ;
+        }
     }
     return (1) ;
 }
diff --git a/CSparse/Source/cs_util.c b/CSparse/Source/cs_util.c
index 5684cd2..f553be2 100644
--- a/CSparse/Source/cs_util.c
+++ b/CSparse/Source/cs_util.c
@@ -1,27 +1,27 @@
 #include "cs.h"
 /* allocate a sparse matrix (triplet form or compressed-column form) */
-cs *cs_spalloc (int m, int n, int nzmax, int values, int triplet)
+cs *cs_spalloc (csi m, csi n, csi nzmax, csi values, csi triplet)
 {
     cs *A = cs_calloc (1, sizeof (cs)) ;    /* allocate the cs struct */
-    if (!A) return (NULL) ;		    /* out of memory */
-    A->m = m ;				    /* define dimensions and nzmax */
+    if (!A) return (NULL) ;                 /* out of memory */
+    A->m = m ;                              /* define dimensions and nzmax */
     A->n = n ;
     A->nzmax = nzmax = CS_MAX (nzmax, 1) ;
-    A->nz = triplet ? 0 : -1 ;		    /* allocate triplet or comp.col */
-    A->p = cs_malloc (triplet ? nzmax : n+1, sizeof (int)) ;
-    A->i = cs_malloc (nzmax, sizeof (int)) ;
+    A->nz = triplet ? 0 : -1 ;              /* allocate triplet or comp.col */
+    A->p = cs_malloc (triplet ? nzmax : n+1, sizeof (csi)) ;
+    A->i = cs_malloc (nzmax, sizeof (csi)) ;
     A->x = values ? cs_malloc (nzmax, sizeof (double)) : NULL ;
     return ((!A->p || !A->i || (values && !A->x)) ? cs_spfree (A) : A) ;
 }
 
 /* change the max # of entries sparse matrix */
-int cs_sprealloc (cs *A, int nzmax)
+csi cs_sprealloc (cs *A, csi nzmax)
 {
-    int ok, oki, okj = 1, okx = 1 ;
+    csi ok, oki, okj = 1, okx = 1 ;
     if (!A) return (0) ;
     if (nzmax <= 0) nzmax = (CS_CSC (A)) ? (A->p [A->n]) : A->nz ;
-    A->i = cs_realloc (A->i, nzmax, sizeof (int), &oki) ;
-    if (CS_TRIPLET (A)) A->p = cs_realloc (A->p, nzmax, sizeof (int), &okj) ;
+    A->i = cs_realloc (A->i, nzmax, sizeof (csi), &oki) ;
+    if (CS_TRIPLET (A)) A->p = cs_realloc (A->p, nzmax, sizeof (csi), &okj) ;
     if (A->x) A->x = cs_realloc (A->x, nzmax, sizeof (double), &okx) ;
     ok = (oki && okj && okx) ;
     if (ok) A->nzmax = nzmax ;
@@ -31,89 +31,89 @@ int cs_sprealloc (cs *A, int nzmax)
 /* free a sparse matrix */
 cs *cs_spfree (cs *A)
 {
-    if (!A) return (NULL) ;	/* do nothing if A already NULL */
+    if (!A) return (NULL) ;     /* do nothing if A already NULL */
     cs_free (A->p) ;
     cs_free (A->i) ;
     cs_free (A->x) ;
-    return (cs_free (A)) ;	/* free the cs struct and return NULL */
+    return ((cs *) cs_free (A)) ;   /* free the cs struct and return NULL */
 }
 
 /* free a numeric factorization */
 csn *cs_nfree (csn *N)
 {
-    if (!N) return (NULL) ;	/* do nothing if N already NULL */
+    if (!N) return (NULL) ;     /* do nothing if N already NULL */
     cs_spfree (N->L) ;
     cs_spfree (N->U) ;
     cs_free (N->pinv) ;
     cs_free (N->B) ;
-    return (cs_free (N)) ;	/* free the csn struct and return NULL */
+    return ((csn *) cs_free (N)) ;  /* free the csn struct and return NULL */
 }
 
 /* free a symbolic factorization */
 css *cs_sfree (css *S)
 {
-    if (!S) return (NULL) ;	/* do nothing if S already NULL */
+    if (!S) return (NULL) ;     /* do nothing if S already NULL */
     cs_free (S->pinv) ;
     cs_free (S->q) ;
     cs_free (S->parent) ;
     cs_free (S->cp) ;
     cs_free (S->leftmost) ;
-    return (cs_free (S)) ;	/* free the css struct and return NULL */
+    return ((css *) cs_free (S)) ;  /* free the css struct and return NULL */
 }
 
 /* allocate a cs_dmperm or cs_scc result */
-csd *cs_dalloc (int m, int n)
+csd *cs_dalloc (csi m, csi n)
 {
     csd *D ;
     D = cs_calloc (1, sizeof (csd)) ;
     if (!D) return (NULL) ;
-    D->p = cs_malloc (m, sizeof (int)) ;
-    D->r = cs_malloc (m+6, sizeof (int)) ;
-    D->q = cs_malloc (n, sizeof (int)) ;
-    D->s = cs_malloc (n+6, sizeof (int)) ;
+    D->p = cs_malloc (m, sizeof (csi)) ;
+    D->r = cs_malloc (m+6, sizeof (csi)) ;
+    D->q = cs_malloc (n, sizeof (csi)) ;
+    D->s = cs_malloc (n+6, sizeof (csi)) ;
     return ((!D->p || !D->r || !D->q || !D->s) ? cs_dfree (D) : D) ;
 }
 
 /* free a cs_dmperm or cs_scc result */
 csd *cs_dfree (csd *D)
 {
-    if (!D) return (NULL) ;	/* do nothing if D already NULL */
+    if (!D) return (NULL) ;     /* do nothing if D already NULL */
     cs_free (D->p) ;
     cs_free (D->q) ;
     cs_free (D->r) ;
     cs_free (D->s) ;
-    return (cs_free (D)) ;
+    return ((csd *) cs_free (D)) ;  /* free the csd struct and return NULL */
 }
 
 /* free workspace and return a sparse matrix result */
-cs *cs_done (cs *C, void *w, void *x, int ok)
+cs *cs_done (cs *C, void *w, void *x, csi ok)
 {
-    cs_free (w) ;			/* free workspace */
+    cs_free (w) ;                       /* free workspace */
     cs_free (x) ;
-    return (ok ? C : cs_spfree (C)) ;	/* return result if OK, else free it */
+    return (ok ? C : cs_spfree (C)) ;   /* return result if OK, else free it */
 }
 
-/* free workspace and return int array result */
-int *cs_idone (int *p, cs *C, void *w, int ok)
+/* free workspace and return csi array result */
+csi *cs_idone (csi *p, cs *C, void *w, csi ok)
 {
-    cs_spfree (C) ;			/* free temporary matrix */
-    cs_free (w) ;			/* free workspace */
-    return (ok ? p : cs_free (p)) ;	/* return result if OK, else free it */
+    cs_spfree (C) ;                     /* free temporary matrix */
+    cs_free (w) ;                       /* free workspace */
+    return (ok ? p : (csi *) cs_free (p)) ; /* return result, or free it */
 }
 
 /* free workspace and return a numeric factorization (Cholesky, LU, or QR) */
-csn *cs_ndone (csn *N, cs *C, void *w, void *x, int ok)
+csn *cs_ndone (csn *N, cs *C, void *w, void *x, csi ok)
 {
-    cs_spfree (C) ;			/* free temporary matrix */
-    cs_free (w) ;			/* free workspace */
+    cs_spfree (C) ;                     /* free temporary matrix */
+    cs_free (w) ;                       /* free workspace */
     cs_free (x) ;
-    return (ok ? N : cs_nfree (N)) ;	/* return result if OK, else free it */
+    return (ok ? N : cs_nfree (N)) ;    /* return result if OK, else free it */
 }
 
 /* free workspace and return a csd result */
-csd *cs_ddone (csd *D, cs *C, void *w, int ok)
+csd *cs_ddone (csd *D, cs *C, void *w, csi ok)
 {
-    cs_spfree (C) ;			/* free temporary matrix */
-    cs_free (w) ;			/* free workspace */
-    return (ok ? D : cs_dfree (D)) ;	/* return result if OK, else free it */
+    cs_spfree (C) ;                     /* free temporary matrix */
+    cs_free (w) ;                       /* free workspace */
+    return (ok ? D : cs_dfree (D)) ;    /* return result if OK, else free it */
 }
diff --git a/CSparse/Source/cs_utsolve.c b/CSparse/Source/cs_utsolve.c
index 9d6bf63..05ab70a 100644
--- a/CSparse/Source/cs_utsolve.c
+++ b/CSparse/Source/cs_utsolve.c
@@ -1,18 +1,18 @@
 #include "cs.h"
 /* solve U'x=b where x and b are dense.  x=b on input, solution on output. */
-int cs_utsolve (const cs *U, double *x)
+csi cs_utsolve (const cs *U, double *x)
 {
-    int p, j, n, *Up, *Ui ;
+    csi p, j, n, *Up, *Ui ;
     double *Ux ;
-    if (!CS_CSC (U) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (U) || !x) return (0) ;                     /* check inputs */
     n = U->n ; Up = U->p ; Ui = U->i ; Ux = U->x ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Up [j] ; p < Up [j+1]-1 ; p++)
-	{
-	    x [j] -= Ux [p] * x [Ui [p]] ;
-	}
-	x [j] /= Ux [Up [j+1]-1] ;
+        for (p = Up [j] ; p < Up [j+1]-1 ; p++)
+        {
+            x [j] -= Ux [p] * x [Ui [p]] ;
+        }
+        x [j] /= Ux [Up [j+1]-1] ;
     }
     return (1) ;
 }
diff --git a/CSparse/Tcov/Makefile b/CSparse/Tcov/Makefile
index 57ce844..7c82329 100644
--- a/CSparse/Tcov/Makefile
+++ b/CSparse/Tcov/Makefile
@@ -7,7 +7,7 @@ CC = gcc
 CFLAGS = -O -g -fprofile-arcs -ftest-coverage \
     	-Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
     	-Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
-	-Wno-unused-parameter -Werror -I../Include -I../Demo
+	-Wno-unused-parameter -I../Include -I../Demo
 
 run: all run1 runbook run3 runtest
 	./covall
@@ -92,11 +92,11 @@ readhb.f:
 	- ln -s readhb.f
 
 clean:
-	rm -f *.o *.bbg *.da *.gcov *.gcda *.gcno
+	- $(RM) *.o *.bbg *.da *.gcov *.gcda *.gcno
 
 purge: distclean
 
 # remove everything for distribution, including all symbolic links
 distclean: clean
-	rm -f cs_demo1 cs_demo2 readhb *.out *.a cs_demo3 cstcov_test cov.sort
-	rm -f cs_*.c
+	- $(RM) cs_demo1 cs_demo2 readhb *.out *.a cs_demo3 cstcov_test cov.sort
+	- $(RM) -r cs_*.c *.dSYM
diff --git a/CSparse/Tcov/README.txt b/CSparse/Tcov/README.txt
index 74df39d..3771cfb 100644
--- a/CSparse/Tcov/README.txt
+++ b/CSparse/Tcov/README.txt
@@ -11,3 +11,5 @@ Note that you will get warnings about unused parameters for some functions.
 These warnings can be safely ignored.  They are parameters for functions that
 are passed to cs_fkeep, and all functions used in this manner must have the
 same calling sequence, even if some of the parameters are not used.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CSparse/Tcov/cov.awk b/CSparse/Tcov/cov.awk
index 5744b40..23db564 100644
--- a/CSparse/Tcov/cov.awk
+++ b/CSparse/Tcov/cov.awk
@@ -11,7 +11,7 @@
 
     if ((p+0) != 100)
     {
-	printf "%8s %s\n", p, f
+        printf "%8s %s\n", p, f
     }
 }
 
diff --git a/CSparse/Tcov/covall b/CSparse/Tcov/covall
index 1751690..855c538 100755
--- a/CSparse/Tcov/covall
+++ b/CSparse/Tcov/covall
@@ -1,7 +1,7 @@
 #!/bin/csh
-	./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
-	sort -n cov.out > cov.sort
-	./covs > covs.out
-	echo -n "statments not yet tested: "
-	grep "#####" *gcov | wc -l
-	./cover *v > cover.out
+        ./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
+        sort -n cov.out > cov.sort
+        ./covs > covs.out
+        echo -n "statments not yet tested: "
+        grep "#####" *gcov | wc -l
+        ./cover *v > cover.out
diff --git a/CSparse/Tcov/covall.linux b/CSparse/Tcov/covall.linux
index 1751690..855c538 100755
--- a/CSparse/Tcov/covall.linux
+++ b/CSparse/Tcov/covall.linux
@@ -1,7 +1,7 @@
 #!/bin/csh
-	./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
-	sort -n cov.out > cov.sort
-	./covs > covs.out
-	echo -n "statments not yet tested: "
-	grep "#####" *gcov | wc -l
-	./cover *v > cover.out
+        ./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
+        sort -n cov.out > cov.sort
+        ./covs > covs.out
+        echo -n "statments not yet tested: "
+        grep "#####" *gcov | wc -l
+        ./cover *v > cover.out
diff --git a/CSparse/Tcov/covall.sol b/CSparse/Tcov/covall.sol
index 457ad63..0061ae4 100755
--- a/CSparse/Tcov/covall.sol
+++ b/CSparse/Tcov/covall.sol
@@ -1,5 +1,5 @@
 #!/bin/csh
-	tcov -x cm.profile cs*.c >& /dev/null
-	echo -n "statments not yet tested: "
-	./covs > covs.out
-	grep "#####" *tcov | wc -l
+        tcov -x cm.profile cs*.c >& /dev/null
+        echo -n "statments not yet tested: "
+        ./covs > covs.out
+        grep "#####" *tcov | wc -l
diff --git a/CSparse/Tcov/cover b/CSparse/Tcov/cover
index b3e685c..a9281dd 100755
--- a/CSparse/Tcov/cover
+++ b/CSparse/Tcov/cover
@@ -2,8 +2,8 @@
 # usage: cover files
 echo '================================================================='
 foreach file ($argv[1-])
-	echo $file
-	echo '================================================================='
-	grep "#####" -A5 -B5 $file
-	echo '================================================================='
-	end
+        echo $file
+        echo '================================================================='
+        grep "#####" -A5 -B5 $file
+        echo '================================================================='
+        end
diff --git a/CSparse/Tcov/covs b/CSparse/Tcov/covs
index 4171380..c184189 100755
--- a/CSparse/Tcov/covs
+++ b/CSparse/Tcov/covs
@@ -1,7 +1,7 @@
 #!/bin/csh
 echo '================================================================='
 foreach file (*.?cov)
-	echo $file
-	grep "#####" $file
-	echo '================================================================='
-	end
+        echo $file
+        grep "#####" $file
+        echo '================================================================='
+        end
diff --git a/CSparse/Tcov/cstcov_malloc_test.c b/CSparse/Tcov/cstcov_malloc_test.c
index 28269f9..f206e42 100644
--- a/CSparse/Tcov/cstcov_malloc_test.c
+++ b/CSparse/Tcov/cstcov_malloc_test.c
@@ -1,15 +1,15 @@
 #include "cstcov_malloc_test.h"
-int malloc_count = INT_MAX ;
+csi malloc_count = INT_MAX ;
 
 /* wrapper for malloc */
-void *cs_malloc (int n, size_t size)
+void *cs_malloc (csi n, size_t size)
 {
     if (--malloc_count < 0) return (NULL) ; /* pretend to fail */
     return (malloc (CS_MAX (n,1) * size)) ;
 }
 
 /* wrapper for calloc */
-void *cs_calloc (int n, size_t size)
+void *cs_calloc (csi n, size_t size)
 {
     if (--malloc_count < 0) return (NULL) ; /* pretend to fail */
     return (calloc (CS_MAX (n,1), size)) ;
@@ -18,17 +18,17 @@ void *cs_calloc (int n, size_t size)
 /* wrapper for free */
 void *cs_free (void *p)
 {
-    if (p) free (p) ;	    /* free p if it is not already NULL */
-    return (NULL) ;	    /* return NULL to simplify the use of cs_free */
+    if (p) free (p) ;       /* free p if it is not already NULL */
+    return (NULL) ;         /* return NULL to simplify the use of cs_free */
 }
 
 /* wrapper for realloc */
-void *cs_realloc (void *p, int n, size_t size, int *ok)
+void *cs_realloc (void *p, csi n, size_t size, csi *ok)
 {
     void *pnew ;
     *ok = 0 ;
     if (--malloc_count < 0) return (p) ;    /* pretend to fail */
     pnew = realloc (p, CS_MAX (n,1) * size) ; /* realloc the block */
     *ok = (pnew != NULL) ;
-    return ((*ok) ? pnew : p) ;		    /* return original p if failure */
+    return ((*ok) ? pnew : p) ;             /* return original p if failure */
 }
diff --git a/CSparse/Tcov/cstcov_malloc_test.h b/CSparse/Tcov/cstcov_malloc_test.h
index 5bf6d75..322d508 100644
--- a/CSparse/Tcov/cstcov_malloc_test.h
+++ b/CSparse/Tcov/cstcov_malloc_test.h
@@ -2,4 +2,4 @@
 #ifndef EXTERN
 #define EXTERN extern
 #endif
-EXTERN int malloc_count ;
+EXTERN csi malloc_count ;
diff --git a/CSparse/Tcov/cstcov_test.c b/CSparse/Tcov/cstcov_test.c
index 1626904..387613d 100644
--- a/CSparse/Tcov/cstcov_test.c
+++ b/CSparse/Tcov/cstcov_test.c
@@ -12,19 +12,19 @@ int main (int argc, char **argv)
     printf ("cs_test, file: %s\n", argv [1]) ;
     for (demo = 2 ; demo <= 3 ; demo++)
     {
-	printf ("demo: %d\n", demo) ;
-	for (trials = 0 ; trials < 4000 ; trials++)
-	{
-	    malloc_count = trials ;
-	    f = fopen (argv [1], "r") ;
-	    if (!f) return (-1) ;
-	    Prob = get_problem (f, (demo == 2) ? 1e-14 : 0) ;
-	    fclose (f) ;
-	    if (Prob) ok = (demo == 2) ? demo2 (Prob) : demo3 (Prob) ;
-	    free_problem (Prob) ;
-	    if (malloc_count > 0) break ;
-	}
-	printf ("demo %d # trials: %d\n", demo, trials) ;
+        printf ("demo: %g\n", (double) demo) ;
+        for (trials = 0 ; trials < 4000 ; trials++)
+        {
+            malloc_count = trials ;
+            f = fopen (argv [1], "r") ;
+            if (!f) return (-1) ;
+            Prob = get_problem (f, (demo == 2) ? 1e-14 : 0) ;
+            fclose (f) ;
+            if (Prob) ok = (demo == 2) ? demo2 (Prob) : demo3 (Prob) ;
+            free_problem (Prob) ;
+            if (malloc_count > 0) break ;
+        }
+        printf ("demo %g # trials: %g\n", (double) demo, (double) trials) ;
     }
     return (0) ;
 }
diff --git a/CSparse/Tcov/gcovs b/CSparse/Tcov/gcovs
index 9fddaf1..ea32176 100755
--- a/CSparse/Tcov/gcovs
+++ b/CSparse/Tcov/gcovs
@@ -1,6 +1,6 @@
 # usage: gcovs files
 echo '================================================================='
 foreach file ($argv[1-])
-	gcov -f $file
-	echo '================================================================='
-	end
+        gcov -f $file
+        echo '================================================================='
+        end
diff --git a/CSparse_to_CXSparse b/CSparse_to_CXSparse
index b3f45d6..21be29b 100755
--- a/CSparse_to_CXSparse
+++ b/CSparse_to_CXSparse
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # Constructs the CXSparse package from CSparse, adding four different sets of
-# functions (int/UF_long, and double/complex).  Backward compatible with
-# CSparse.  No MATLAB interface is provided for CXSparse, however.
+# functions (int/cs_long_t, and double/complex).  Backward compatible
+# with CSparse.  No MATLAB interface is provided for CXSparse, however.
 #
 # To create CXSparse from CSparse, the ./CXSparse directory should not (yet)
 # exist.  Use the following commands, where CSparse is the CSparse directory:
@@ -10,11 +10,11 @@
 #   cd CXSparse/Demo
 #   make > cs_demo.out
 #
-# Alternatively, use "make cx", using the UFsparse/Makefile, while in the
-# UFsparse directory.
+# Alternatively, use "make cx" in the SuiteSparse directory.
 #
-# Created by David Bateman, Feb. 2006, David dot Bateman atsign motorola
-# dot com.  Modified by Tim Davis, Aug 23, 2006.
+# Created by David Bateman, Feb. 2006, David dot Bateman atsign motorola dot
+# com, and released by him to Tim Davis' copyright.  Modified by Tim Davis,
+# 2006-2012, http://www.suitesparse.com.
 
 use strict;
 use Cwd;
@@ -52,16 +52,37 @@ my @demo_files = ('demo1.c', 'demo2.c', 'demo3.c', 'demo.c', 'demo.h') ;
 
 foreach my $fff ( @demo_files )
 {
-    my $infile  = sprintf ("%s/Demo/cs_%s", $out_dir, $fff) ;
+    my $infile  = sprintf ("%s/Demo/cs_%s", $in_dir, $fff) ;
+
+    # create the plain version
+    my $outfile = sprintf ("%s/Demo/cs_%s", $out_dir, $fff) ;
+    printf ("%s to %s\n", $infile, $outfile) ;
+    if (open (OUT, ">$outfile"))
+    {
+	if (open (IN, $infile))
+	{
+	    while (<IN>)
+	    {
+		# change csi to int
+		s/\bcsi\b/int/g;
+		print OUT $_;
+	    }
+	    close (IN);
+	}
+	close (OUT);
+    }
 
     # create di version
     my $outfile = sprintf ("%s/Demo/cs_di_%s", $out_dir, $fff) ;
+    printf ("%s to %s\n", $infile, $outfile) ;
     if (open (OUT, ">$outfile"))
     {
 	if (open (IN, $infile))
 	{
 	    while (<IN>)
 	    {
+		# change csi to int
+		s/\bcsi\b/int/g;
 		# change all "cs*" names to "cs_di*", except #include "cs.h"
 		s/\bcs/cs_di/g ;
 		s/cs_di\.h/cs.h/ ;
@@ -74,20 +95,19 @@ foreach my $fff ( @demo_files )
 
     # create dl version
     my $outfile = sprintf ("%s/Demo/cs_dl_%s", $out_dir, $fff) ;
+    printf ("%s to %s\n", $infile, $outfile) ;
     if (open (OUT, ">$outfile"))
     {
 	if (open (IN, $infile))
 	{
 	    while (<IN>)
 	    {
+		# change csi to cs_long_t
+		s/\bcsi\b/cs_long_t/g;
 		# change all "cs*" names to "cs_dl*", except #include "cs.h"
 		s/\bcs/cs_dl/g ;
+		s/cs_dl_long_t/cs_long_t/g;
 		s/cs_dl\.h/cs.h/ ;
-		# change int to UF_long, except for "int main"
-		s/\bint\b/UF_long/g;
-		s/UF_long main/int main/;
-		# change %d to %ld in printf and scanf
-		s/\%d/\%ld/g;
 		print OUT $_;
 	    }
 	    close (IN);
@@ -97,14 +117,18 @@ foreach my $fff ( @demo_files )
 
     # create ci version
     my $outfile = sprintf ("%s/Demo/cs_ci_%s", $out_dir, $fff) ;
+    printf ("%s to %s\n", $infile, $outfile) ;
     if (open (OUT, ">$outfile"))
     {
 	if (open (IN, $infile))
 	{
 	    while (<IN>)
 	    {
+		# change csi to int
+		s/\bcsi\b/int/g;
 		# change all "cs*" names to "cs_ci*", except #include "cs.h"
 		s/\bcs/cs_ci/g ;
+		s/cs_ci_long_t/cs_long_t/g;
 		s/cs_ci\.h/cs.h/ ;
 		# fabs becomes cabs
 		s/fabs/cabs/g;
@@ -133,20 +157,19 @@ foreach my $fff ( @demo_files )
 
     # create cl version
     my $outfile = sprintf ("%s/Demo/cs_cl_%s", $out_dir, $fff) ;
+    printf ("%s to %s\n", $infile, $outfile) ;
     if (open (OUT, ">$outfile"))
     {
 	if (open (IN, $infile))
 	{
 	    while (<IN>)
 	    {
+		# change csi to cs_long_t
+		s/\bcsi\b/cs_long_t/g;
 		# change all "cs*" names to "cs_cl*", except #include "cs.h"
 		s/\bcs/cs_cl/g ;
+		s/cs_cl_long_t/cs_long_t/g;
 		s/cs_cl\.h/cs.h/ ;
-		# change int to UF_long, except for "int main"
-		s/\bint\b/UF_long/g;
-		s/UF_long main/int main/;
-		# change %d to %ld in printf and scanf
-		s/\%d/\%ld/g;
 		# fabs becomes cabs
 		s/fabs/cabs/g;
 		# change double to cs_complex_t
@@ -174,7 +197,7 @@ foreach my $fff ( @demo_files )
 }
 
 #-------------------------------------------------------------------------------
-# Convert Source/*.c files (except cs_house.c)
+# Convert Source/*.c files (except cs_house.c, cs_print.c, and cs_load.c)
 #-------------------------------------------------------------------------------
 
 # note that cs.h, cs_house.c, cs_updown.c, ...
@@ -184,11 +207,11 @@ my @src_files = ('Source/cs_add.c', 'Source/cs_amd.c', 'Source/cs_chol.c',
     'Source/cs_dfs.c', 'Source/cs_dmperm.c', 'Source/cs_droptol.c',
     'Source/cs_dropzeros.c', 'Source/cs_dupl.c', 'Source/cs_entry.c',
     'Source/cs_etree.c', 'Source/cs_fkeep.c', 'Source/cs_gaxpy.c',
-    'Source/cs_happly.c', 'Source/cs_ipvec.c', 'Source/cs_load.c',
+    'Source/cs_happly.c', 'Source/cs_ipvec.c',
     'Source/cs_lsolve.c', 'Source/cs_ltsolve.c', 'Source/cs_lu.c',
     'Source/cs_lusol.c', 'Source/cs_malloc.c', 'Source/cs_maxtrans.c',
     'Source/cs_multiply.c', 'Source/cs_norm.c', 'Source/cs_permute.c',
-    'Source/cs_pinv.c', 'Source/cs_post.c', 'Source/cs_print.c',
+    'Source/cs_pinv.c', 'Source/cs_post.c',
     'Source/cs_pvec.c', 'Source/cs_qr.c', 'Source/cs_qrsol.c',
     'Source/cs_scatter.c', 'Source/cs_scc.c', 'Source/cs_schol.c',
     'Source/cs_sqr.c', 'Source/cs_symperm.c', 'Source/cs_tdfs.c',
@@ -217,12 +240,8 @@ foreach my $file ( @src_files )
 		# fabs becomes CS_ABS
 		s/fabs/CS_ABS/g;
 
-		# change int to CS_INT
-		s/\bint\b/CS_INT/g;
-
-		# change %d to "CS_ID" in printf and scanf (except version #'s)
-		s/\%d/"CS_ID"/g;
-		s/"CS_ID"\."CS_ID"\."CS_ID"/%d.%d.%d/;
+		# change csi to CS_INT
+		s/\bcsi\b/CS_INT/g;
 
 		# change double to CS_ENTRY
 		s/\bdouble\b/CS_ENTRY/g;
@@ -237,10 +256,6 @@ foreach my $file ( @src_files )
 		# local variable declarations that stay double
 		s/,  / ;\n    double / ;
 
-		# nargin and nargout stay "int" for MATLAB mexFunctions
-		s/CS_INT nargin/int nargin/;
-		s/CS_INT nargout/int nargout/;
-
 		#---------------------------------------------------------------
 		# Special cases.  Some undo changes made above.
 		#---------------------------------------------------------------
@@ -318,20 +333,6 @@ foreach my $file ( @src_files )
 		    s/(Ux \[.*?\])(\s+[\*;])/CS_CONJ ($1)$2/;
 		}
 
-		# cs_load
-		if ($fbase =~ /cs_load/)
-		{
-		    s/CS_ENTRY x ;/double x ;\n#ifdef CS_COMPLEX\n    double xi ;\n#endif/ ;
-		    s/^(\s*while.*)%lg(.*)&x\) == 3(.*)$/#ifdef CS_COMPLEX\n$1%lg %lg$2&x, &xi) == 4$3\n#else\n$1%lg$2&x) == 3$3\n#endif/;
-		    s/(.*cs_entry.*), x(.*)$/#ifdef CS_COMPLEX\n$1, x + xi*I$2\n#else\n$1, x$2\n#endif/
-		}
-
-		# cs_print
-		if ($fbase =~ /cs_print/)
-		{
-		    s/^(.*)%g(.*)Ax\s*\?\s*Ax\s*\[p\]\s*:\s*1(.*)/#ifdef CS_COMPLEX\n$1(%g, %g)$2\n\t\t    Ax ? CS_REAL (Ax [p]) : 1, Ax ? CS_IMAG (Ax [p]) : 0$3\n#else\n$1%g$2Ax ? Ax [p] : 1$3\n#endif/;
-		}
-
 		print OUT $_;
 	    }
 	    close (IN);
diff --git a/CXSparse/Demo/Makefile b/CXSparse/Demo/Makefile
index c1352f0..e7c6d65 100644
--- a/CXSparse/Demo/Makefile
+++ b/CXSparse/Demo/Makefile
@@ -1,7 +1,11 @@
-CC = cc
-CFLAGS = -O
+# CC = cc
+# CF = -O
 
-I = -I../Include -I../../UFconfig
+default: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+I = -I../Include -I../../SuiteSparse_config
 
 CS = ../Lib/libcxsparse.a
 
@@ -91,78 +95,78 @@ $(CS):
 	( cd ../Lib ; $(MAKE) )
 
 cs_demo1: $(CS) cs_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_demo1 cs_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo1 cs_demo1.c $(CS) -lm
 
 cs_demo2: $(CS) cs_demo2.c cs_demo.c cs_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_demo2 cs_demo2.c cs_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo2 cs_demo2.c cs_demo.c $(CS) -lm
 
 cs_demo3: $(CS) cs_demo3.c cs_demo.c cs_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_demo3 cs_demo3.c cs_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo3 cs_demo3.c cs_demo.c $(CS) -lm
 
 
 
 
 cs_di_demo1: $(CS) cs_di_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_di_demo1 cs_di_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_di_demo1 cs_di_demo1.c $(CS) -lm
 
 cs_di_demo2: $(CS) cs_di_demo2.c cs_di_demo.c cs_di_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_di_demo2 cs_di_demo2.c cs_di_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_di_demo2 cs_di_demo2.c cs_di_demo.c $(CS) -lm
 
 cs_di_demo3: $(CS) cs_di_demo3.c cs_di_demo.c cs_di_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_di_demo3 cs_di_demo3.c cs_di_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_di_demo3 cs_di_demo3.c cs_di_demo.c $(CS) -lm
 
 
 
 
 cs_ci_demo1: $(CS) cs_ci_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_ci_demo1 cs_ci_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_ci_demo1 cs_ci_demo1.c $(CS) -lm
 
 cs_ci_demo2: $(CS) cs_ci_demo2.c cs_ci_demo.c cs_ci_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_ci_demo2 cs_ci_demo2.c cs_ci_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_ci_demo2 cs_ci_demo2.c cs_ci_demo.c $(CS) -lm
 
 cs_ci_demo3: $(CS) cs_ci_demo3.c cs_ci_demo.c cs_ci_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_ci_demo3 cs_ci_demo3.c cs_ci_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_ci_demo3 cs_ci_demo3.c cs_ci_demo.c $(CS) -lm
 
 
 
 cs_dl_demo1: $(CS) cs_dl_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_dl_demo1 cs_dl_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_dl_demo1 cs_dl_demo1.c $(CS) -lm
 
 cs_dl_demo2: $(CS) cs_dl_demo2.c cs_dl_demo.c cs_dl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_dl_demo2 cs_dl_demo2.c cs_dl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_dl_demo2 cs_dl_demo2.c cs_dl_demo.c $(CS) -lm
 
 cs_dl_demo3: $(CS) cs_dl_demo3.c cs_dl_demo.c cs_dl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_dl_demo3 cs_dl_demo3.c cs_dl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_dl_demo3 cs_dl_demo3.c cs_dl_demo.c $(CS) -lm
 
 
 cs_cl_demo1: $(CS) cs_cl_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_cl_demo1 cs_cl_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_cl_demo1 cs_cl_demo1.c $(CS) -lm
 
 cs_cl_demo2: $(CS) cs_cl_demo2.c cs_cl_demo.c cs_cl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_cl_demo2 cs_cl_demo2.c cs_cl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_cl_demo2 cs_cl_demo2.c cs_cl_demo.c $(CS) -lm
 
 cs_cl_demo3: $(CS) cs_cl_demo3.c cs_cl_demo.c cs_cl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_cl_demo3 cs_cl_demo3.c cs_cl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_cl_demo3 cs_cl_demo3.c cs_cl_demo.c $(CS) -lm
 
 
 
 
 cs_idemo: $(CS) cs_idemo.c Makefile $(CS)
-	$(CC) $(I) -o cs_idemo cs_idemo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_idemo cs_idemo.c $(CS) -lm
 
 cs_ldemo: $(CS) cs_ldemo.c Makefile $(CS)
-	$(CC) $(I) -DCS_LONG -o cs_ldemo cs_ldemo.c $(CS) -lm
+	$(CC) $(CF) $(I) -DCS_LONG -o cs_ldemo cs_ldemo.c $(CS) -lm
 
 
 clean:
-	rm -f *.o
+	- $(RM) *.o
 
 purge: distclean
 
 distclean: clean
-	rm -f cs_demo1 cs_demo2 cs_demo3 *.a
-	rm -f cs_di_demo1 cs_di_demo2 cs_di_demo3
-	rm -f cs_dl_demo1 cs_dl_demo2 cs_dl_demo3
-	rm -f cs_ci_demo1 cs_ci_demo2 cs_ci_demo3
-	rm -f cs_cl_demo1 cs_cl_demo2 cs_cl_demo3
-	rm -f cs_idemo cs_ldemo
+	- $(RM) cs_demo1 cs_demo2 cs_demo3 *.a
+	- $(RM) cs_di_demo1 cs_di_demo2 cs_di_demo3
+	- $(RM) cs_dl_demo1 cs_dl_demo2 cs_dl_demo3
+	- $(RM) cs_ci_demo1 cs_ci_demo2 cs_ci_demo3
+	- $(RM) cs_cl_demo1 cs_cl_demo2 cs_cl_demo3
+	- $(RM) -r cs_idemo cs_ldemo *.dSYM
diff --git a/CXSparse/Demo/README.txt b/CXSparse/Demo/README.txt
index 93eeb3a..85f584c 100644
--- a/CXSparse/Demo/README.txt
+++ b/CXSparse/Demo/README.txt
@@ -2,3 +2,5 @@ CXSparse/Demo:  to compile a run the demos, just type "make" in this directory.
 The printed residuals should all be small, except for the mbeacxc matrix
 (which is numerically and structurally singular), and ash219 (which is a
 least-squares problem).  See cs_demo.out for the proper output of "make".
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse/Demo/cs_ci_demo.c b/CXSparse/Demo/cs_ci_demo.c
index 96b22a2..1b7a1a1 100644
--- a/CXSparse/Demo/cs_ci_demo.c
+++ b/CXSparse/Demo/cs_ci_demo.c
@@ -9,11 +9,11 @@ static int is_sym (cs_ci *A)
     is_lower = 1 ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    if (Ai [p] > j) is_upper = 0 ;
-	    if (Ai [p] < j) is_lower = 0 ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            if (Ai [p] > j) is_upper = 0 ;
+            if (Ai [p] < j) is_lower = 0 ;
+        }
     }
     return (is_upper ? 1 : (is_lower ? -1 : 0)) ;
 }
@@ -25,9 +25,9 @@ static int dropdiag (int i, int j, cs_complex_t aij, void *other) { return (i !=
 static cs_ci *make_sym (cs_ci *A)
 {
     cs_ci *AT, *C ;
-    AT = cs_ci_transpose (A, 1) ;		/* AT = A' */
-    cs_ci_fkeep (AT, &dropdiag, NULL) ;	/* drop diagonal entries from AT */
-    C = cs_ci_add (A, AT, 1, 1) ;		/* C = A+AT */
+    AT = cs_ci_transpose (A, 1) ;          /* AT = A' */
+    cs_ci_fkeep (AT, &dropdiag, NULL) ;    /* drop diagonal entries from AT */
+    C = cs_ci_add (A, AT, 1, 1) ;          /* C = A+AT */
     cs_ci_spfree (AT) ;
     return (C) ;
 }
@@ -56,9 +56,9 @@ static void print_resid (int ok, cs_ci *A, cs_complex_t *x, cs_complex_t *b, cs_
     if (!ok) { printf ("    (failed)\n") ; return ; }
     m = A->m ; n = A->n ;
     for (i = 0 ; i < m ; i++) resid [i] = -b [i] ;  /* resid = -b */
-    cs_ci_gaxpy (A, x, resid) ;			    /* resid = resid + A*x  */
+    cs_ci_gaxpy (A, x, resid) ;                        /* resid = resid + A*x  */
     printf ("resid: %8.2e\n", norm (resid,m) / ((n == 0) ? 1 :
-	(cs_ci_norm (A) * norm (x,n) + norm (b,m)))) ;
+        (cs_ci_norm (A) * norm (x,n) + norm (b,m)))) ;
 }
 
 static double tic (void) { return (clock () / (double) CLOCKS_PER_SEC) ; }
@@ -68,14 +68,14 @@ static void print_order (int order)
 {
     switch (order)
     {
-	case 0: printf ("natural    ") ; break ;
-	case 1: printf ("amd(A+A')  ") ; break ;
-	case 2: printf ("amd(S'*S)  ") ; break ;
-	case 3: printf ("amd(A'*A)  ") ; break ;
+        case 0: printf ("natural    ") ; break ;
+        case 1: printf ("amd(A+A')  ") ; break ;
+        case 2: printf ("amd(S'*S)  ") ; break ;
+        case 3: printf ("amd(A'*A)  ") ; break ;
     }
 }
 
-/* read a problem from a file */
+/* read a problem from a file; use %g for integers to avoid int conflicts */
 problem *get_problem (FILE *f, double tol)
 {
     cs_ci *T, *A, *C ;
@@ -83,23 +83,25 @@ problem *get_problem (FILE *f, double tol)
     problem *Prob ;
     Prob = cs_ci_calloc (1, sizeof (problem)) ;
     if (!Prob) return (NULL) ;
-    T = cs_ci_load (f) ;			/* load triplet matrix T from a file */
-    Prob->A = A = cs_ci_compress (T) ;	/* A = compressed-column form of T */
-    cs_ci_spfree (T) ;			/* clear T */
+    T = cs_ci_load (f) ;                   /* load triplet matrix T from a file */
+    Prob->A = A = cs_ci_compress (T) ;     /* A = compressed-column form of T */
+    cs_ci_spfree (T) ;                     /* clear T */
     if (!cs_ci_dupl (A)) return (free_problem (Prob)) ; /* sum up duplicates */
-    Prob->sym = sym = is_sym (A) ;	/* determine if A is symmetric */
+    Prob->sym = sym = is_sym (A) ;      /* determine if A is symmetric */
     m = A->m ; n = A->n ;
     mn = CS_MAX (m,n) ;
     nz1 = A->p [n] ;
-    cs_ci_dropzeros (A) ;			/* drop zero entries */
+    cs_ci_dropzeros (A) ;                  /* drop zero entries */
     nz2 = A->p [n] ;
-    if (tol > 0) cs_ci_droptol (A, tol) ;	/* drop tiny entries (just to test) */
+    if (tol > 0) cs_ci_droptol (A, tol) ;  /* drop tiny entries (just to test) */
     Prob->C = C = sym ? make_sym (A) : A ;  /* C = A + triu(A,1)', or C=A */
     if (!C) return (free_problem (Prob)) ;
-    printf ("\n--- Matrix: %d-by-%d, nnz: %d (sym: %d: nnz %d), norm: %8.2e\n",
-	    m, n, A->p [n], sym, sym ? C->p [n] : 0, cs_ci_norm (C)) ;
-    if (nz1 != nz2) printf ("zero entries dropped: %d\n", nz1 - nz2) ;
-    if (nz2 != A->p [n]) printf ("tiny entries dropped: %d\n", nz2 - A->p [n]) ;
+    printf ("\n--- Matrix: %g-by-%g, nnz: %g (sym: %g: nnz %g), norm: %8.2e\n",
+            (double) m, (double) n, (double) (A->p [n]), (double) sym,
+            (double) (sym ? C->p [n] : 0), cs_ci_norm (C)) ;
+    if (nz1 != nz2) printf ("zero entries dropped: %g\n", (double) (nz1 - nz2));
+    if (nz2 != A->p [n]) printf ("tiny entries dropped: %g\n",
+            (double) (nz2 - A->p [n])) ;
     Prob->b = cs_ci_malloc (mn, sizeof (cs_complex_t)) ;
     Prob->x = cs_ci_malloc (mn, sizeof (cs_complex_t)) ;
     Prob->resid = cs_ci_malloc (mn, sizeof (cs_complex_t)) ;
@@ -129,51 +131,52 @@ int demo2 (problem *Prob)
     if (!Prob) return (0) ;
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     m = A->m ; n = A->n ;
-    tol = Prob->sym ? 0.001 : 1 ;		/* partial pivoting tolerance */
-    D = cs_ci_dmperm (C, 1) ;			/* randomized dmperm analysis */
+    tol = Prob->sym ? 0.001 : 1 ;               /* partial pivoting tolerance */
+    D = cs_ci_dmperm (C, 1) ;                      /* randomized dmperm analysis */
     if (!D) return (0) ;
     nb = D->nb ; r = D->r ; s = D->s ; rr = D->rr ;
     sprank = rr [3] ;
     for (ns = 0, k = 0 ; k < nb ; k++)
     {
-	ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
+        ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
     }
-    printf ("blocks: %d singletons: %d structural rank: %d\n", nb, ns, sprank) ;
+    printf ("blocks: %g singletons: %g structural rank: %g\n",
+        (double) nb, (double) ns, (double) sprank) ;
     cs_ci_dfree (D) ;
-    for (order = 0 ; order <= 3 ; order += 3)	/* natural and amd(A'*A) */
+    for (order = 0 ; order <= 3 ; order += 3)   /* natural and amd(A'*A) */
     {
-	if (!order && m > 1000) continue ;
-	printf ("QR   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_ci_qrsol (order, C, x) ;		/* min norm(Ax-b) with QR */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("QR   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_ci_qrsol (order, C, x) ;           /* min norm(Ax-b) with QR */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
-    if (m != n || sprank < n) return (1) ;	/* return if rect. or singular*/
-    for (order = 0 ; order <= 3 ; order++)	/* try all orderings */
+    if (m != n || sprank < n) return (1) ;      /* return if rect. or singular*/
+    for (order = 0 ; order <= 3 ; order++)      /* try all orderings */
     {
-	if (!order && m > 1000) continue ;
-	printf ("LU   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_ci_lusol (order, C, x, tol) ;	/* solve Ax=b with LU */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("LU   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_ci_lusol (order, C, x, tol) ;      /* solve Ax=b with LU */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     if (!Prob->sym) return (1) ;
-    for (order = 0 ; order <= 1 ; order++)	/* natural and amd(A+A') */
+    for (order = 0 ; order <= 1 ; order++)      /* natural and amd(A+A') */
     {
-	if (!order && m > 1000) continue ;
-	printf ("Chol ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_ci_cholsol (order, C, x) ;		/* solve Ax=b with Cholesky */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("Chol ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_ci_cholsol (order, C, x) ;         /* solve Ax=b with Cholesky */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     return (1) ;
 } 
@@ -203,26 +206,26 @@ int demo3 (problem *Prob)
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     n = A->n ;
     if (!Prob->sym || n == 0) return (1) ;
-    rhs (x, b, n) ;				/* compute right-hand side */
+    rhs (x, b, n) ;                             /* compute right-hand side */
     printf ("\nchol then update/downdate ") ;
     print_order (1) ;
     y = cs_ci_malloc (n, sizeof (cs_complex_t)) ;
     t = tic () ;
-    S = cs_ci_schol (1, C) ;			/* symbolic Chol, amd(A+A') */
+    S = cs_ci_schol (1, C) ;                       /* symbolic Chol, amd(A+A') */
     printf ("\nsymbolic chol time %8.2f\n", toc (t)) ;
     t = tic () ;
-    N = cs_ci_chol (C, S) ;			/* numeric Cholesky */
+    N = cs_ci_chol (C, S) ;                        /* numeric Cholesky */
     printf ("numeric  chol time %8.2f\n", toc (t)) ;
     if (!S || !N || !y) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_ci_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_ci_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ci_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_ci_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ci_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_ci_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ci_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_ci_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     printf ("solve    chol time %8.2f\n", toc (t)) ;
     printf ("original: ") ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
-    k = n/2 ;					/* construct W  */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
+    k = n/2 ;                                   /* construct W  */
     W = cs_ci_spalloc (n, 1, n, 1, 0) ;
     if (!W) return (done3 (0, S, N, y, W, E, p)) ;
     Lp = N->L->p ; Li = N->L->i ; Lx = N->L->x ;
@@ -234,23 +237,23 @@ int demo3 (problem *Prob)
     srand (1) ;
     for ( ; p1 < Lp [k+1] ; p1++)
     {
-	p2 = p1 - Lp [k] ;
-	Wi [p2] = Li [p1] ;
-	Wx [p2] = s * rand () / ((double) RAND_MAX) ;
+        p2 = p1 - Lp [k] ;
+        Wi [p2] = Li [p1] ;
+        Wx [p2] = s * rand () / ((double) RAND_MAX) ;
     }
     t = tic () ;
-    ok = cs_ci_updown (N->L, +1, W, S->parent) ;	/* update: L*L'+W*W' */
+    ok = cs_ci_updown (N->L, +1, W, S->parent) ;   /* update: L*L'+W*W' */
     t1 = toc (t) ;
     printf ("update:   time: %8.2f\n", t1) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_ci_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_ci_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ci_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_ci_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ci_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_ci_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ci_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_ci_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     p = cs_ci_pinv (S->pinv, n) ;
-    W2 = cs_ci_permute (W, p, NULL, 1) ;		/* E = C + (P'W)*(P'W)' */
+    W2 = cs_ci_permute (W, p, NULL, 1) ;           /* E = C + (P'W)*(P'W)' */
     WT = cs_ci_transpose (W2,1) ;
     WW = cs_ci_multiply (W2, WT) ;
     cs_ci_spfree (WT) ;
@@ -259,30 +262,30 @@ int demo3 (problem *Prob)
     cs_ci_spfree (WW) ;
     if (!E || !p) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("update:   time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
-    cs_ci_nfree (N) ;				/* clear N */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
+    cs_ci_nfree (N) ;                              /* clear N */
     t = tic () ;
-    N = cs_ci_chol (E, S) ;			/* numeric Cholesky */
+    N = cs_ci_chol (E, S) ;                        /* numeric Cholesky */
     if (!N) return (done3 (0, S, N, y, W, E, p)) ;
-    cs_ci_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_ci_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ci_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_ci_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ci_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_ci_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ci_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_ci_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("rechol:   time: %8.2f (incl solve) ", t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
     t = tic () ;
-    ok = cs_ci_updown (N->L, -1, W, S->parent) ;	/* downdate: L*L'-W*W' */
+    ok = cs_ci_updown (N->L, -1, W, S->parent) ;   /* downdate: L*L'-W*W' */
     t1 = toc (t) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("downdate: time: %8.2f\n", t1) ;
     t = tic () ;
-    cs_ci_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_ci_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ci_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_ci_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ci_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_ci_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ci_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_ci_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("downdate: time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
     return (done3 (1, S, N, y, W, E, p)) ;
 } 
diff --git a/CXSparse/Demo/cs_ci_demo1.c b/CXSparse/Demo/cs_ci_demo1.c
index 7a0950a..8ddeda0 100644
--- a/CXSparse/Demo/cs_ci_demo1.c
+++ b/CXSparse/Demo/cs_ci_demo1.c
@@ -3,22 +3,22 @@ int main (void)
 {
     cs_ci *T, *A, *Eye, *AT, *C, *D ;
     int i, m ;
-    T = cs_ci_load (stdin) ;		/* load triplet matrix T from stdin */
-    printf ("T:\n") ; cs_ci_print (T, 0) ;	/* print T */
-    A = cs_ci_compress (T) ;		/* A = compressed-column form of T */
-    printf ("A:\n") ; cs_ci_print (A, 0) ;	/* print A */
-    cs_ci_spfree (T) ;			/* clear T */
-    AT = cs_ci_transpose (A, 1) ;		/* AT = A' */
+    T = cs_ci_load (stdin) ;               /* load triplet matrix T from stdin */
+    printf ("T:\n") ; cs_ci_print (T, 0) ; /* print T */
+    A = cs_ci_compress (T) ;               /* A = compressed-column form of T */
+    printf ("A:\n") ; cs_ci_print (A, 0) ; /* print A */
+    cs_ci_spfree (T) ;                     /* clear T */
+    AT = cs_ci_transpose (A, 1) ;          /* AT = A' */
     printf ("AT:\n") ; cs_ci_print (AT, 0) ; /* print AT */
-    m = A ? A->m : 0 ;			/* m = # of rows of A */
-    T = cs_ci_spalloc (m, m, m, 1, 1) ;	/* create triplet identity matrix */
+    m = A ? A->m : 0 ;                  /* m = # of rows of A */
+    T = cs_ci_spalloc (m, m, m, 1, 1) ;    /* create triplet identity matrix */
     for (i = 0 ; i < m ; i++) cs_ci_entry (T, i, i, 1) ;
-    Eye = cs_ci_compress (T) ;		/* Eye = speye (m) */
+    Eye = cs_ci_compress (T) ;             /* Eye = speye (m) */
     cs_ci_spfree (T) ;
-    C = cs_ci_multiply (A, AT) ;		/* C = A*A' */
+    C = cs_ci_multiply (A, AT) ;           /* C = A*A' */
     D = cs_ci_add (C, Eye, 1, cs_ci_norm (C)) ;   /* D = C + Eye*norm (C,1) */
-    printf ("D:\n") ; cs_ci_print (D, 0) ;	/* print D */
-    cs_ci_spfree (A) ;			/* clear A AT C D Eye */
+    printf ("D:\n") ; cs_ci_print (D, 0) ; /* print D */
+    cs_ci_spfree (A) ;                     /* clear A AT C D Eye */
     cs_ci_spfree (AT) ;
     cs_ci_spfree (C) ;
     cs_ci_spfree (D) ;
diff --git a/CXSparse/Demo/cs_cl_demo.c b/CXSparse/Demo/cs_cl_demo.c
index e294ef5..27146d5 100644
--- a/CXSparse/Demo/cs_cl_demo.c
+++ b/CXSparse/Demo/cs_cl_demo.c
@@ -1,105 +1,107 @@
 #include "cs_cl_demo.h"
 #include <time.h>
 /* 1 if A is square & upper tri., -1 if square & lower tri., 0 otherwise */
-static UF_long is_sym (cs_cl *A)
+static cs_long_t is_sym (cs_cl *A)
 {
-    UF_long is_upper, is_lower, j, p, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i ;
+    cs_long_t is_upper, is_lower, j, p, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i ;
     if (m != n) return (0) ;
     is_upper = 1 ;
     is_lower = 1 ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    if (Ai [p] > j) is_upper = 0 ;
-	    if (Ai [p] < j) is_lower = 0 ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            if (Ai [p] > j) is_upper = 0 ;
+            if (Ai [p] < j) is_lower = 0 ;
+        }
     }
     return (is_upper ? 1 : (is_lower ? -1 : 0)) ;
 }
 
 /* true for off-diagonal entries */
-static UF_long dropdiag (UF_long i, UF_long j, cs_complex_t aij, void *other) { return (i != j) ;}
+static cs_long_t dropdiag (cs_long_t i, cs_long_t j, cs_complex_t aij, void *other) { return (i != j) ;}
 
 /* C = A + triu(A,1)' */
 static cs_cl *make_sym (cs_cl *A)
 {
     cs_cl *AT, *C ;
-    AT = cs_cl_transpose (A, 1) ;		/* AT = A' */
-    cs_cl_fkeep (AT, &dropdiag, NULL) ;	/* drop diagonal entries from AT */
-    C = cs_cl_add (A, AT, 1, 1) ;		/* C = A+AT */
+    AT = cs_cl_transpose (A, 1) ;          /* AT = A' */
+    cs_cl_fkeep (AT, &dropdiag, NULL) ;    /* drop diagonal entries from AT */
+    C = cs_cl_add (A, AT, 1, 1) ;          /* C = A+AT */
     cs_cl_spfree (AT) ;
     return (C) ;
 }
 
 /* create a right-hand side */
-static void rhs (cs_complex_t *x, cs_complex_t *b, UF_long m)
+static void rhs (cs_complex_t *x, cs_complex_t *b, cs_long_t m)
 {
-    UF_long i ;
+    cs_long_t i ;
     for (i = 0 ; i < m ; i++) b [i] = 1 + ((double) i) / m ;
     for (i = 0 ; i < m ; i++) x [i] = b [i] ;
 }
 
 /* infinity-norm of x */
-static double norm (cs_complex_t *x, UF_long n)
+static double norm (cs_complex_t *x, cs_long_t n)
 {
-    UF_long i ;
+    cs_long_t i ;
     double normx = 0 ;
     for (i = 0 ; i < n ; i++) normx = CS_MAX (normx, cabs (x [i])) ;
     return (normx) ;
 }
 
 /* compute residual, norm(A*x-b,inf) / (norm(A,1)*norm(x,inf) + norm(b,inf)) */
-static void print_resid (UF_long ok, cs_cl *A, cs_complex_t *x, cs_complex_t *b, cs_complex_t *resid)
+static void print_resid (cs_long_t ok, cs_cl *A, cs_complex_t *x, cs_complex_t *b, cs_complex_t *resid)
 {
-    UF_long i, m, n ;
+    cs_long_t i, m, n ;
     if (!ok) { printf ("    (failed)\n") ; return ; }
     m = A->m ; n = A->n ;
     for (i = 0 ; i < m ; i++) resid [i] = -b [i] ;  /* resid = -b */
-    cs_cl_gaxpy (A, x, resid) ;			    /* resid = resid + A*x  */
+    cs_cl_gaxpy (A, x, resid) ;                        /* resid = resid + A*x  */
     printf ("resid: %8.2e\n", norm (resid,m) / ((n == 0) ? 1 :
-	(cs_cl_norm (A) * norm (x,n) + norm (b,m)))) ;
+        (cs_cl_norm (A) * norm (x,n) + norm (b,m)))) ;
 }
 
 static double tic (void) { return (clock () / (double) CLOCKS_PER_SEC) ; }
 static double toc (double t) { double s = tic () ; return (CS_MAX (0, s-t)) ; }
 
-static void print_order (UF_long order)
+static void print_order (cs_long_t order)
 {
     switch (order)
     {
-	case 0: printf ("natural    ") ; break ;
-	case 1: printf ("amd(A+A')  ") ; break ;
-	case 2: printf ("amd(S'*S)  ") ; break ;
-	case 3: printf ("amd(A'*A)  ") ; break ;
+        case 0: printf ("natural    ") ; break ;
+        case 1: printf ("amd(A+A')  ") ; break ;
+        case 2: printf ("amd(S'*S)  ") ; break ;
+        case 3: printf ("amd(A'*A)  ") ; break ;
     }
 }
 
-/* read a problem from a file */
+/* read a problem from a file; use %g for integers to avoid cs_long_t conflicts */
 problem *get_problem (FILE *f, double tol)
 {
     cs_cl *T, *A, *C ;
-    UF_long sym, m, n, mn, nz1, nz2 ;
+    cs_long_t sym, m, n, mn, nz1, nz2 ;
     problem *Prob ;
     Prob = cs_cl_calloc (1, sizeof (problem)) ;
     if (!Prob) return (NULL) ;
-    T = cs_cl_load (f) ;			/* load triplet matrix T from a file */
-    Prob->A = A = cs_cl_compress (T) ;	/* A = compressed-column form of T */
-    cs_cl_spfree (T) ;			/* clear T */
+    T = cs_cl_load (f) ;                   /* load triplet matrix T from a file */
+    Prob->A = A = cs_cl_compress (T) ;     /* A = compressed-column form of T */
+    cs_cl_spfree (T) ;                     /* clear T */
     if (!cs_cl_dupl (A)) return (free_problem (Prob)) ; /* sum up duplicates */
-    Prob->sym = sym = is_sym (A) ;	/* determine if A is symmetric */
+    Prob->sym = sym = is_sym (A) ;      /* determine if A is symmetric */
     m = A->m ; n = A->n ;
     mn = CS_MAX (m,n) ;
     nz1 = A->p [n] ;
-    cs_cl_dropzeros (A) ;			/* drop zero entries */
+    cs_cl_dropzeros (A) ;                  /* drop zero entries */
     nz2 = A->p [n] ;
-    if (tol > 0) cs_cl_droptol (A, tol) ;	/* drop tiny entries (just to test) */
+    if (tol > 0) cs_cl_droptol (A, tol) ;  /* drop tiny entries (just to test) */
     Prob->C = C = sym ? make_sym (A) : A ;  /* C = A + triu(A,1)', or C=A */
     if (!C) return (free_problem (Prob)) ;
-    printf ("\n--- Matrix: %ld-by-%ld, nnz: %ld (sym: %ld: nnz %ld), norm: %8.2e\n",
-	    m, n, A->p [n], sym, sym ? C->p [n] : 0, cs_cl_norm (C)) ;
-    if (nz1 != nz2) printf ("zero entries dropped: %ld\n", nz1 - nz2) ;
-    if (nz2 != A->p [n]) printf ("tiny entries dropped: %ld\n", nz2 - A->p [n]) ;
+    printf ("\n--- Matrix: %g-by-%g, nnz: %g (sym: %g: nnz %g), norm: %8.2e\n",
+            (double) m, (double) n, (double) (A->p [n]), (double) sym,
+            (double) (sym ? C->p [n] : 0), cs_cl_norm (C)) ;
+    if (nz1 != nz2) printf ("zero entries dropped: %g\n", (double) (nz1 - nz2));
+    if (nz2 != A->p [n]) printf ("tiny entries dropped: %g\n",
+            (double) (nz2 - A->p [n])) ;
     Prob->b = cs_cl_malloc (mn, sizeof (cs_complex_t)) ;
     Prob->x = cs_cl_malloc (mn, sizeof (cs_complex_t)) ;
     Prob->resid = cs_cl_malloc (mn, sizeof (cs_complex_t)) ;
@@ -119,67 +121,68 @@ problem *free_problem (problem *Prob)
 }
 
 /* solve a linear system using Cholesky, LU, and QR, with various orderings */
-UF_long demo2 (problem *Prob)
+cs_long_t demo2 (problem *Prob)
 {
     cs_cl *A, *C ;
     cs_complex_t *b, *x, *resid ;
     double t, tol ;
-    UF_long k, m, n, ok, order, nb, ns, *r, *s, *rr, sprank ;
+    cs_long_t k, m, n, ok, order, nb, ns, *r, *s, *rr, sprank ;
     cs_cld *D ;
     if (!Prob) return (0) ;
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     m = A->m ; n = A->n ;
-    tol = Prob->sym ? 0.001 : 1 ;		/* partial pivoting tolerance */
-    D = cs_cl_dmperm (C, 1) ;			/* randomized dmperm analysis */
+    tol = Prob->sym ? 0.001 : 1 ;               /* partial pivoting tolerance */
+    D = cs_cl_dmperm (C, 1) ;                      /* randomized dmperm analysis */
     if (!D) return (0) ;
     nb = D->nb ; r = D->r ; s = D->s ; rr = D->rr ;
     sprank = rr [3] ;
     for (ns = 0, k = 0 ; k < nb ; k++)
     {
-	ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
+        ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
     }
-    printf ("blocks: %ld singletons: %ld structural rank: %ld\n", nb, ns, sprank) ;
+    printf ("blocks: %g singletons: %g structural rank: %g\n",
+        (double) nb, (double) ns, (double) sprank) ;
     cs_cl_dfree (D) ;
-    for (order = 0 ; order <= 3 ; order += 3)	/* natural and amd(A'*A) */
+    for (order = 0 ; order <= 3 ; order += 3)   /* natural and amd(A'*A) */
     {
-	if (!order && m > 1000) continue ;
-	printf ("QR   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_cl_qrsol (order, C, x) ;		/* min norm(Ax-b) with QR */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("QR   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_cl_qrsol (order, C, x) ;           /* min norm(Ax-b) with QR */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
-    if (m != n || sprank < n) return (1) ;	/* return if rect. or singular*/
-    for (order = 0 ; order <= 3 ; order++)	/* try all orderings */
+    if (m != n || sprank < n) return (1) ;      /* return if rect. or singular*/
+    for (order = 0 ; order <= 3 ; order++)      /* try all orderings */
     {
-	if (!order && m > 1000) continue ;
-	printf ("LU   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_cl_lusol (order, C, x, tol) ;	/* solve Ax=b with LU */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("LU   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_cl_lusol (order, C, x, tol) ;      /* solve Ax=b with LU */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     if (!Prob->sym) return (1) ;
-    for (order = 0 ; order <= 1 ; order++)	/* natural and amd(A+A') */
+    for (order = 0 ; order <= 1 ; order++)      /* natural and amd(A+A') */
     {
-	if (!order && m > 1000) continue ;
-	printf ("Chol ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_cl_cholsol (order, C, x) ;		/* solve Ax=b with Cholesky */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("Chol ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_cl_cholsol (order, C, x) ;         /* solve Ax=b with Cholesky */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     return (1) ;
 } 
 
 /* free workspace for demo3 */
-static UF_long done3 (UF_long ok, cs_cls *S, cs_cln *N, cs_complex_t *y, cs_cl *W, cs_cl *E, UF_long *p)
+static cs_long_t done3 (cs_long_t ok, cs_cls *S, cs_cln *N, cs_complex_t *y, cs_cl *W, cs_cl *E, cs_long_t *p)
 {
     cs_cl_sfree (S) ;
     cs_cl_nfree (N) ;
@@ -191,10 +194,10 @@ static UF_long done3 (UF_long ok, cs_cls *S, cs_cln *N, cs_complex_t *y, cs_cl *
 }
 
 /* Cholesky update/downdate */
-UF_long demo3 (problem *Prob)
+cs_long_t demo3 (problem *Prob)
 {
     cs_cl *A, *C, *W = NULL, *WW, *WT, *E = NULL, *W2 ;
-    UF_long n, k, *Li, *Lp, *Wi, *Wp, p1, p2, *p = NULL, ok ;
+    cs_long_t n, k, *Li, *Lp, *Wi, *Wp, p1, p2, *p = NULL, ok ;
     cs_complex_t *b, *x, *resid, *y = NULL, *Lx, *Wx, s ;
     double t, t1 ;
     cs_cls *S = NULL ;
@@ -203,26 +206,26 @@ UF_long demo3 (problem *Prob)
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     n = A->n ;
     if (!Prob->sym || n == 0) return (1) ;
-    rhs (x, b, n) ;				/* compute right-hand side */
+    rhs (x, b, n) ;                             /* compute right-hand side */
     printf ("\nchol then update/downdate ") ;
     print_order (1) ;
     y = cs_cl_malloc (n, sizeof (cs_complex_t)) ;
     t = tic () ;
-    S = cs_cl_schol (1, C) ;			/* symbolic Chol, amd(A+A') */
+    S = cs_cl_schol (1, C) ;                       /* symbolic Chol, amd(A+A') */
     printf ("\nsymbolic chol time %8.2f\n", toc (t)) ;
     t = tic () ;
-    N = cs_cl_chol (C, S) ;			/* numeric Cholesky */
+    N = cs_cl_chol (C, S) ;                        /* numeric Cholesky */
     printf ("numeric  chol time %8.2f\n", toc (t)) ;
     if (!S || !N || !y) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_cl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_cl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_cl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_cl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_cl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_cl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_cl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_cl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     printf ("solve    chol time %8.2f\n", toc (t)) ;
     printf ("original: ") ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
-    k = n/2 ;					/* construct W  */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
+    k = n/2 ;                                   /* construct W  */
     W = cs_cl_spalloc (n, 1, n, 1, 0) ;
     if (!W) return (done3 (0, S, N, y, W, E, p)) ;
     Lp = N->L->p ; Li = N->L->i ; Lx = N->L->x ;
@@ -234,23 +237,23 @@ UF_long demo3 (problem *Prob)
     srand (1) ;
     for ( ; p1 < Lp [k+1] ; p1++)
     {
-	p2 = p1 - Lp [k] ;
-	Wi [p2] = Li [p1] ;
-	Wx [p2] = s * rand () / ((double) RAND_MAX) ;
+        p2 = p1 - Lp [k] ;
+        Wi [p2] = Li [p1] ;
+        Wx [p2] = s * rand () / ((double) RAND_MAX) ;
     }
     t = tic () ;
-    ok = cs_cl_updown (N->L, +1, W, S->parent) ;	/* update: L*L'+W*W' */
+    ok = cs_cl_updown (N->L, +1, W, S->parent) ;   /* update: L*L'+W*W' */
     t1 = toc (t) ;
     printf ("update:   time: %8.2f\n", t1) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_cl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_cl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_cl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_cl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_cl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_cl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_cl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_cl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     p = cs_cl_pinv (S->pinv, n) ;
-    W2 = cs_cl_permute (W, p, NULL, 1) ;		/* E = C + (P'W)*(P'W)' */
+    W2 = cs_cl_permute (W, p, NULL, 1) ;           /* E = C + (P'W)*(P'W)' */
     WT = cs_cl_transpose (W2,1) ;
     WW = cs_cl_multiply (W2, WT) ;
     cs_cl_spfree (WT) ;
@@ -259,30 +262,30 @@ UF_long demo3 (problem *Prob)
     cs_cl_spfree (WW) ;
     if (!E || !p) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("update:   time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
-    cs_cl_nfree (N) ;				/* clear N */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
+    cs_cl_nfree (N) ;                              /* clear N */
     t = tic () ;
-    N = cs_cl_chol (E, S) ;			/* numeric Cholesky */
+    N = cs_cl_chol (E, S) ;                        /* numeric Cholesky */
     if (!N) return (done3 (0, S, N, y, W, E, p)) ;
-    cs_cl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_cl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_cl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_cl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_cl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_cl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_cl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_cl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("rechol:   time: %8.2f (incl solve) ", t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
     t = tic () ;
-    ok = cs_cl_updown (N->L, -1, W, S->parent) ;	/* downdate: L*L'-W*W' */
+    ok = cs_cl_updown (N->L, -1, W, S->parent) ;   /* downdate: L*L'-W*W' */
     t1 = toc (t) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("downdate: time: %8.2f\n", t1) ;
     t = tic () ;
-    cs_cl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_cl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_cl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_cl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_cl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_cl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_cl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_cl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("downdate: time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
     return (done3 (1, S, N, y, W, E, p)) ;
 } 
diff --git a/CXSparse/Demo/cs_cl_demo.h b/CXSparse/Demo/cs_cl_demo.h
index 2ae9f82..9a10614 100644
--- a/CXSparse/Demo/cs_cl_demo.h
+++ b/CXSparse/Demo/cs_cl_demo.h
@@ -3,13 +3,13 @@ typedef struct problem_struct
 {
     cs_cl *A ;
     cs_cl *C ;
-    UF_long sym ;
+    cs_long_t sym ;
     cs_complex_t *x ;
     cs_complex_t *b ;
     cs_complex_t *resid ;
 } problem ;
 
 problem *get_problem (FILE *f, double tol) ;
-UF_long demo2 (problem *Prob) ;
-UF_long demo3 (problem *Prob) ;
+cs_long_t demo2 (problem *Prob) ;
+cs_long_t demo3 (problem *Prob) ;
 problem *free_problem (problem *Prob) ;
diff --git a/CXSparse/Demo/cs_cl_demo1.c b/CXSparse/Demo/cs_cl_demo1.c
index d0aaceb..10b00e2 100644
--- a/CXSparse/Demo/cs_cl_demo1.c
+++ b/CXSparse/Demo/cs_cl_demo1.c
@@ -2,23 +2,23 @@
 int main (void)
 {
     cs_cl *T, *A, *Eye, *AT, *C, *D ;
-    UF_long i, m ;
-    T = cs_cl_load (stdin) ;		/* load triplet matrix T from stdin */
-    printf ("T:\n") ; cs_cl_print (T, 0) ;	/* print T */
-    A = cs_cl_compress (T) ;		/* A = compressed-column form of T */
-    printf ("A:\n") ; cs_cl_print (A, 0) ;	/* print A */
-    cs_cl_spfree (T) ;			/* clear T */
-    AT = cs_cl_transpose (A, 1) ;		/* AT = A' */
+    cs_long_t i, m ;
+    T = cs_cl_load (stdin) ;               /* load triplet matrix T from stdin */
+    printf ("T:\n") ; cs_cl_print (T, 0) ; /* print T */
+    A = cs_cl_compress (T) ;               /* A = compressed-column form of T */
+    printf ("A:\n") ; cs_cl_print (A, 0) ; /* print A */
+    cs_cl_spfree (T) ;                     /* clear T */
+    AT = cs_cl_transpose (A, 1) ;          /* AT = A' */
     printf ("AT:\n") ; cs_cl_print (AT, 0) ; /* print AT */
-    m = A ? A->m : 0 ;			/* m = # of rows of A */
-    T = cs_cl_spalloc (m, m, m, 1, 1) ;	/* create triplet identity matrix */
+    m = A ? A->m : 0 ;                  /* m = # of rows of A */
+    T = cs_cl_spalloc (m, m, m, 1, 1) ;    /* create triplet identity matrix */
     for (i = 0 ; i < m ; i++) cs_cl_entry (T, i, i, 1) ;
-    Eye = cs_cl_compress (T) ;		/* Eye = speye (m) */
+    Eye = cs_cl_compress (T) ;             /* Eye = speye (m) */
     cs_cl_spfree (T) ;
-    C = cs_cl_multiply (A, AT) ;		/* C = A*A' */
+    C = cs_cl_multiply (A, AT) ;           /* C = A*A' */
     D = cs_cl_add (C, Eye, 1, cs_cl_norm (C)) ;   /* D = C + Eye*norm (C,1) */
-    printf ("D:\n") ; cs_cl_print (D, 0) ;	/* print D */
-    cs_cl_spfree (A) ;			/* clear A AT C D Eye */
+    printf ("D:\n") ; cs_cl_print (D, 0) ; /* print D */
+    cs_cl_spfree (A) ;                     /* clear A AT C D Eye */
     cs_cl_spfree (AT) ;
     cs_cl_spfree (C) ;
     cs_cl_spfree (D) ;
diff --git a/CXSparse/Demo/cs_demo.c b/CXSparse/Demo/cs_demo.c
index 4e85757..c45d7a6 100644
--- a/CXSparse/Demo/cs_demo.c
+++ b/CXSparse/Demo/cs_demo.c
@@ -9,11 +9,11 @@ static int is_sym (cs *A)
     is_lower = 1 ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    if (Ai [p] > j) is_upper = 0 ;
-	    if (Ai [p] < j) is_lower = 0 ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            if (Ai [p] > j) is_upper = 0 ;
+            if (Ai [p] < j) is_lower = 0 ;
+        }
     }
     return (is_upper ? 1 : (is_lower ? -1 : 0)) ;
 }
@@ -25,9 +25,9 @@ static int dropdiag (int i, int j, double aij, void *other) { return (i != j) ;}
 static cs *make_sym (cs *A)
 {
     cs *AT, *C ;
-    AT = cs_transpose (A, 1) ;		/* AT = A' */
-    cs_fkeep (AT, &dropdiag, NULL) ;	/* drop diagonal entries from AT */
-    C = cs_add (A, AT, 1, 1) ;		/* C = A+AT */
+    AT = cs_transpose (A, 1) ;          /* AT = A' */
+    cs_fkeep (AT, &dropdiag, NULL) ;    /* drop diagonal entries from AT */
+    C = cs_add (A, AT, 1, 1) ;          /* C = A+AT */
     cs_spfree (AT) ;
     return (C) ;
 }
@@ -56,9 +56,9 @@ static void print_resid (int ok, cs *A, double *x, double *b, double *resid)
     if (!ok) { printf ("    (failed)\n") ; return ; }
     m = A->m ; n = A->n ;
     for (i = 0 ; i < m ; i++) resid [i] = -b [i] ;  /* resid = -b */
-    cs_gaxpy (A, x, resid) ;			    /* resid = resid + A*x  */
+    cs_gaxpy (A, x, resid) ;                        /* resid = resid + A*x  */
     printf ("resid: %8.2e\n", norm (resid,m) / ((n == 0) ? 1 :
-	(cs_norm (A) * norm (x,n) + norm (b,m)))) ;
+        (cs_norm (A) * norm (x,n) + norm (b,m)))) ;
 }
 
 static double tic (void) { return (clock () / (double) CLOCKS_PER_SEC) ; }
@@ -68,14 +68,14 @@ static void print_order (int order)
 {
     switch (order)
     {
-	case 0: printf ("natural    ") ; break ;
-	case 1: printf ("amd(A+A')  ") ; break ;
-	case 2: printf ("amd(S'*S)  ") ; break ;
-	case 3: printf ("amd(A'*A)  ") ; break ;
+        case 0: printf ("natural    ") ; break ;
+        case 1: printf ("amd(A+A')  ") ; break ;
+        case 2: printf ("amd(S'*S)  ") ; break ;
+        case 3: printf ("amd(A'*A)  ") ; break ;
     }
 }
 
-/* read a problem from a file */
+/* read a problem from a file; use %g for integers to avoid int conflicts */
 problem *get_problem (FILE *f, double tol)
 {
     cs *T, *A, *C ;
@@ -83,23 +83,25 @@ problem *get_problem (FILE *f, double tol)
     problem *Prob ;
     Prob = cs_calloc (1, sizeof (problem)) ;
     if (!Prob) return (NULL) ;
-    T = cs_load (f) ;			/* load triplet matrix T from a file */
-    Prob->A = A = cs_compress (T) ;	/* A = compressed-column form of T */
-    cs_spfree (T) ;			/* clear T */
+    T = cs_load (f) ;                   /* load triplet matrix T from a file */
+    Prob->A = A = cs_compress (T) ;     /* A = compressed-column form of T */
+    cs_spfree (T) ;                     /* clear T */
     if (!cs_dupl (A)) return (free_problem (Prob)) ; /* sum up duplicates */
-    Prob->sym = sym = is_sym (A) ;	/* determine if A is symmetric */
+    Prob->sym = sym = is_sym (A) ;      /* determine if A is symmetric */
     m = A->m ; n = A->n ;
     mn = CS_MAX (m,n) ;
     nz1 = A->p [n] ;
-    cs_dropzeros (A) ;			/* drop zero entries */
+    cs_dropzeros (A) ;                  /* drop zero entries */
     nz2 = A->p [n] ;
-    if (tol > 0) cs_droptol (A, tol) ;	/* drop tiny entries (just to test) */
+    if (tol > 0) cs_droptol (A, tol) ;  /* drop tiny entries (just to test) */
     Prob->C = C = sym ? make_sym (A) : A ;  /* C = A + triu(A,1)', or C=A */
     if (!C) return (free_problem (Prob)) ;
-    printf ("\n--- Matrix: %d-by-%d, nnz: %d (sym: %d: nnz %d), norm: %8.2e\n",
-	    m, n, A->p [n], sym, sym ? C->p [n] : 0, cs_norm (C)) ;
-    if (nz1 != nz2) printf ("zero entries dropped: %d\n", nz1 - nz2) ;
-    if (nz2 != A->p [n]) printf ("tiny entries dropped: %d\n", nz2 - A->p [n]) ;
+    printf ("\n--- Matrix: %g-by-%g, nnz: %g (sym: %g: nnz %g), norm: %8.2e\n",
+            (double) m, (double) n, (double) (A->p [n]), (double) sym,
+            (double) (sym ? C->p [n] : 0), cs_norm (C)) ;
+    if (nz1 != nz2) printf ("zero entries dropped: %g\n", (double) (nz1 - nz2));
+    if (nz2 != A->p [n]) printf ("tiny entries dropped: %g\n",
+            (double) (nz2 - A->p [n])) ;
     Prob->b = cs_malloc (mn, sizeof (double)) ;
     Prob->x = cs_malloc (mn, sizeof (double)) ;
     Prob->resid = cs_malloc (mn, sizeof (double)) ;
@@ -128,51 +130,52 @@ int demo2 (problem *Prob)
     if (!Prob) return (0) ;
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     m = A->m ; n = A->n ;
-    tol = Prob->sym ? 0.001 : 1 ;		/* partial pivoting tolerance */
-    D = cs_dmperm (C, 1) ;			/* randomized dmperm analysis */
+    tol = Prob->sym ? 0.001 : 1 ;               /* partial pivoting tolerance */
+    D = cs_dmperm (C, 1) ;                      /* randomized dmperm analysis */
     if (!D) return (0) ;
     nb = D->nb ; r = D->r ; s = D->s ; rr = D->rr ;
     sprank = rr [3] ;
     for (ns = 0, k = 0 ; k < nb ; k++)
     {
-	ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
+        ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
     }
-    printf ("blocks: %d singletons: %d structural rank: %d\n", nb, ns, sprank) ;
+    printf ("blocks: %g singletons: %g structural rank: %g\n",
+        (double) nb, (double) ns, (double) sprank) ;
     cs_dfree (D) ;
-    for (order = 0 ; order <= 3 ; order += 3)	/* natural and amd(A'*A) */
+    for (order = 0 ; order <= 3 ; order += 3)   /* natural and amd(A'*A) */
     {
-	if (!order && m > 1000) continue ;
-	printf ("QR   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_qrsol (order, C, x) ;		/* min norm(Ax-b) with QR */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("QR   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_qrsol (order, C, x) ;           /* min norm(Ax-b) with QR */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
-    if (m != n || sprank < n) return (1) ;	/* return if rect. or singular*/
-    for (order = 0 ; order <= 3 ; order++)	/* try all orderings */
+    if (m != n || sprank < n) return (1) ;      /* return if rect. or singular*/
+    for (order = 0 ; order <= 3 ; order++)      /* try all orderings */
     {
-	if (!order && m > 1000) continue ;
-	printf ("LU   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_lusol (order, C, x, tol) ;	/* solve Ax=b with LU */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("LU   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_lusol (order, C, x, tol) ;      /* solve Ax=b with LU */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     if (!Prob->sym) return (1) ;
-    for (order = 0 ; order <= 1 ; order++)	/* natural and amd(A+A') */
+    for (order = 0 ; order <= 1 ; order++)      /* natural and amd(A+A') */
     {
-	if (!order && m > 1000) continue ;
-	printf ("Chol ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_cholsol (order, C, x) ;		/* solve Ax=b with Cholesky */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("Chol ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_cholsol (order, C, x) ;         /* solve Ax=b with Cholesky */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     return (1) ;
 } 
@@ -201,26 +204,26 @@ int demo3 (problem *Prob)
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     n = A->n ;
     if (!Prob->sym || n == 0) return (1) ;
-    rhs (x, b, n) ;				/* compute right-hand side */
+    rhs (x, b, n) ;                             /* compute right-hand side */
     printf ("\nchol then update/downdate ") ;
     print_order (1) ;
     y = cs_malloc (n, sizeof (double)) ;
     t = tic () ;
-    S = cs_schol (1, C) ;			/* symbolic Chol, amd(A+A') */
+    S = cs_schol (1, C) ;                       /* symbolic Chol, amd(A+A') */
     printf ("\nsymbolic chol time %8.2f\n", toc (t)) ;
     t = tic () ;
-    N = cs_chol (C, S) ;			/* numeric Cholesky */
+    N = cs_chol (C, S) ;                        /* numeric Cholesky */
     printf ("numeric  chol time %8.2f\n", toc (t)) ;
     if (!S || !N || !y) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     printf ("solve    chol time %8.2f\n", toc (t)) ;
     printf ("original: ") ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
-    k = n/2 ;					/* construct W  */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
+    k = n/2 ;                                   /* construct W  */
     W = cs_spalloc (n, 1, n, 1, 0) ;
     if (!W) return (done3 (0, S, N, y, W, E, p)) ;
     Lp = N->L->p ; Li = N->L->i ; Lx = N->L->x ;
@@ -232,23 +235,23 @@ int demo3 (problem *Prob)
     srand (1) ;
     for ( ; p1 < Lp [k+1] ; p1++)
     {
-	p2 = p1 - Lp [k] ;
-	Wi [p2] = Li [p1] ;
-	Wx [p2] = s * rand () / ((double) RAND_MAX) ;
+        p2 = p1 - Lp [k] ;
+        Wi [p2] = Li [p1] ;
+        Wx [p2] = s * rand () / ((double) RAND_MAX) ;
     }
     t = tic () ;
-    ok = cs_updown (N->L, +1, W, S->parent) ;	/* update: L*L'+W*W' */
+    ok = cs_updown (N->L, +1, W, S->parent) ;   /* update: L*L'+W*W' */
     t1 = toc (t) ;
     printf ("update:   time: %8.2f\n", t1) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     p = cs_pinv (S->pinv, n) ;
-    W2 = cs_permute (W, p, NULL, 1) ;		/* E = C + (P'W)*(P'W)' */
+    W2 = cs_permute (W, p, NULL, 1) ;           /* E = C + (P'W)*(P'W)' */
     WT = cs_transpose (W2,1) ;
     WW = cs_multiply (W2, WT) ;
     cs_spfree (WT) ;
@@ -257,30 +260,30 @@ int demo3 (problem *Prob)
     cs_spfree (WW) ;
     if (!E || !p) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("update:   time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
-    cs_nfree (N) ;				/* clear N */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
+    cs_nfree (N) ;                              /* clear N */
     t = tic () ;
-    N = cs_chol (E, S) ;			/* numeric Cholesky */
+    N = cs_chol (E, S) ;                        /* numeric Cholesky */
     if (!N) return (done3 (0, S, N, y, W, E, p)) ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("rechol:   time: %8.2f (incl solve) ", t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
     t = tic () ;
-    ok = cs_updown (N->L, -1, W, S->parent) ;	/* downdate: L*L'-W*W' */
+    ok = cs_updown (N->L, -1, W, S->parent) ;   /* downdate: L*L'-W*W' */
     t1 = toc (t) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("downdate: time: %8.2f\n", t1) ;
     t = tic () ;
-    cs_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_lsolve (N->L, y) ;			/* y = L\y */
-    cs_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("downdate: time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
     return (done3 (1, S, N, y, W, E, p)) ;
 } 
diff --git a/CXSparse/Demo/cs_demo.out b/CXSparse/Demo/cs_demo.out
index 7924f07..d6d599a 100644
--- a/CXSparse/Demo/cs_demo.out
+++ b/CXSparse/Demo/cs_demo.out
@@ -1,10 +1,9 @@
-make[1]: Entering directory `/amd/netapp3/vol/research0a/research18/sparse2/SuiteSparse/CXSparse/Demo'
 ./cs_idemo < ../Matrix/t2
 
 --- cs_idemo, size of CS_INT: 4
 
 T:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : (3, 3.14159)
     1 0 : (3.1, 42)
@@ -18,7 +17,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     2 1 : (1.7, 1)
 
 Treal:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3
     1 0 : 3.1
@@ -32,7 +31,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     2 1 : 1.7
 
 Timag:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3.14159
     1 0 : 42
@@ -46,7 +45,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     2 1 : 1
 
 A:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075
     col 0 : locations 0 to 2
       1 : (3.1, 42)
@@ -64,7 +63,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0.9, 99)
 
 C1 = real(A):
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : 3.1
@@ -82,7 +81,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 0.9
 
 C2 = imag(A):
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106
     col 0 : locations 0 to 2
       1 : 42
@@ -100,7 +99,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 99
 
 A1:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : (3.1, 0)
@@ -118,7 +117,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0.9, 0)
 
 A2:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106
     col 0 : locations 0 to 2
       1 : (0, 42)
@@ -136,7 +135,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0, 99)
 
 B = conj(A):
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075
     col 0 : locations 0 to 2
       1 : (3.1, -42)
@@ -157,7 +156,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
 --- cs_ldemo, size of CS_INT: 8
 
 T:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : (3, 3.14159)
     1 0 : (3.1, 42)
@@ -171,7 +170,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     2 1 : (1.7, 1)
 
 Treal:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3
     1 0 : 3.1
@@ -185,7 +184,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     2 1 : 1.7
 
 Timag:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3.14159
     1 0 : 42
@@ -199,7 +198,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     2 1 : 1
 
 A:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075
     col 0 : locations 0 to 2
       1 : (3.1, 42)
@@ -217,7 +216,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0.9, 99)
 
 C1 = real(A):
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : 3.1
@@ -235,7 +234,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 0.9
 
 C2 = imag(A):
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106
     col 0 : locations 0 to 2
       1 : 42
@@ -253,7 +252,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 99
 
 A1:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : (3.1, 0)
@@ -271,7 +270,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0.9, 0)
 
 A2:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106
     col 0 : locations 0 to 2
       1 : (0, 42)
@@ -289,7 +288,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0, 99)
 
 B = conj(A):
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075
     col 0 : locations 0 to 2
       1 : (3.1, -42)
@@ -307,7 +306,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0.9, -99)
 ./cs_demo1 < ../Matrix/t1
 T:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3
     1 0 : 3.1
@@ -320,7 +319,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     0 0 : 4.5
     2 1 : 1.7
 A:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : 3.1
@@ -337,7 +336,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       3 : 1
       1 : 0.9
 AT:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 7.7
     col 0 : locations 0 to 1
       0 : 4.5
@@ -354,7 +353,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 0.4
       3 : 1
 D:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 16 nnz: 16, 1-norm: 139.58
     col 0 : locations 0 to 3
       1 : 13.95
@@ -392,9 +391,9 @@ LU   amd(A'*A)  time:     0.00 resid: 1.53e-17
 zero entries dropped: 71
 tiny entries dropped: 10
 blocks: 38 singletons: 37 structural rank: 183
-QR   natural    time:     0.01 resid: 1.42e-27
+QR   natural    time:     0.00 resid: 1.42e-27
 QR   amd(A'*A)  time:     0.00 resid: 3.35e-28
-LU   natural    time:     0.01 resid: 6.20e-28
+LU   natural    time:     0.00 resid: 6.20e-28
 LU   amd(A+A')  time:     0.00 resid: 1.55e-27
 LU   amd(S'*S)  time:     0.00 resid: 6.98e-28
 LU   amd(A'*A)  time:     0.00 resid: 6.98e-28
@@ -424,8 +423,8 @@ QR   amd(A'*A)  time:     0.00 resid: 1.61e-02
 
 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01
 blocks: 10 singletons: 8 structural rank: 448
-QR   natural    time:     0.13 resid:      nan
-QR   amd(A'*A)  time:     0.19 resid:      nan
+QR   natural    time:     0.04 resid:      nan
+QR   amd(A'*A)  time:     0.05 resid:      nan
 ./cs_demo2 < ../Matrix/bcsstk01
 
 --- Matrix: 48-by-48, nnz: 224 (sym: -1: nnz 400), norm: 3.57e+09
@@ -448,36 +447,36 @@ numeric  chol time     0.00
 solve    chol time     0.00
 original: resid: 2.55e-19
 update:   time:     0.00
-update:   time:     0.00 (incl solve) resid: 9.66e-19
-rechol:   time:     0.00 (incl solve) resid: 1.55e-18
+update:   time:     0.00 (incl solve) resid: 3.52e-18
+rechol:   time:     0.00 (incl solve) resid: 2.93e-18
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 3.74e-17
+downdate: time:     0.00 (incl solve) resid: 4.32e-17
 ./cs_demo2 < ../Matrix/bcsstk16
 
 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09
 blocks: 75 singletons: 74 structural rank: 4884
-QR   amd(A'*A)  time:     2.13 resid: 2.01e-22
-LU   amd(A+A')  time:     1.19 resid: 1.10e-22
-LU   amd(S'*S)  time:     1.15 resid: 1.28e-22
-LU   amd(A'*A)  time:     1.22 resid: 1.78e-22
-Chol amd(A+A')  time:     0.37 resid: 1.19e-22
+QR   amd(A'*A)  time:     0.51 resid: 2.01e-22
+LU   amd(A+A')  time:     0.26 resid: 1.10e-22
+LU   amd(S'*S)  time:     0.26 resid: 1.28e-22
+LU   amd(A'*A)  time:     0.27 resid: 1.78e-22
+Chol amd(A+A')  time:     0.08 resid: 1.19e-22
 ./cs_demo3 < ../Matrix/bcsstk16
 
 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09
 
 chol then update/downdate amd(A+A')  
-symbolic chol time     0.02
-numeric  chol time     0.35
+symbolic chol time     0.01
+numeric  chol time     0.08
 solve    chol time     0.00
 original: resid: 1.19e-22
 update:   time:     0.00
-update:   time:     0.01 (incl solve) resid: 1.12e-23
-rechol:   time:     0.34 (incl solve) resid: 1.17e-23
+update:   time:     0.00 (incl solve) resid: 1.71e-23
+rechol:   time:     0.07 (incl solve) resid: 1.61e-23
 downdate: time:     0.00
-downdate: time:     0.01 (incl solve) resid: 4.09e-22
+downdate: time:     0.00 (incl solve) resid: 1.24e-21
 ./cs_di_demo1 < ../Matrix/t1
 T:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3
     1 0 : 3.1
@@ -490,7 +489,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     0 0 : 4.5
     2 1 : 1.7
 A:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : 3.1
@@ -507,7 +506,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       3 : 1
       1 : 0.9
 AT:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 7.7
     col 0 : locations 0 to 1
       0 : 4.5
@@ -524,7 +523,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 0.4
       3 : 1
 D:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 16 nnz: 16, 1-norm: 139.58
     col 0 : locations 0 to 3
       1 : 13.95
@@ -564,7 +563,7 @@ tiny entries dropped: 10
 blocks: 38 singletons: 37 structural rank: 183
 QR   natural    time:     0.00 resid: 1.42e-27
 QR   amd(A'*A)  time:     0.00 resid: 3.35e-28
-LU   natural    time:     0.01 resid: 6.20e-28
+LU   natural    time:     0.00 resid: 6.20e-28
 LU   amd(A+A')  time:     0.00 resid: 1.55e-27
 LU   amd(S'*S)  time:     0.00 resid: 6.98e-28
 LU   amd(A'*A)  time:     0.00 resid: 6.98e-28
@@ -594,8 +593,8 @@ QR   amd(A'*A)  time:     0.00 resid: 1.61e-02
 
 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01
 blocks: 10 singletons: 8 structural rank: 448
-QR   natural    time:     0.13 resid:      nan
-QR   amd(A'*A)  time:     0.19 resid:      nan
+QR   natural    time:     0.04 resid:      nan
+QR   amd(A'*A)  time:     0.05 resid:      nan
 ./cs_di_demo2 < ../Matrix/bcsstk01
 
 --- Matrix: 48-by-48, nnz: 224 (sym: -1: nnz 400), norm: 3.57e+09
@@ -618,36 +617,36 @@ numeric  chol time     0.00
 solve    chol time     0.00
 original: resid: 2.55e-19
 update:   time:     0.00
-update:   time:     0.00 (incl solve) resid: 9.66e-19
-rechol:   time:     0.00 (incl solve) resid: 1.55e-18
+update:   time:     0.00 (incl solve) resid: 3.52e-18
+rechol:   time:     0.00 (incl solve) resid: 2.93e-18
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 3.74e-17
+downdate: time:     0.00 (incl solve) resid: 4.32e-17
 ./cs_di_demo2 < ../Matrix/bcsstk16
 
 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09
 blocks: 75 singletons: 74 structural rank: 4884
-QR   amd(A'*A)  time:     2.17 resid: 2.01e-22
-LU   amd(A+A')  time:     1.23 resid: 1.10e-22
-LU   amd(S'*S)  time:     1.18 resid: 1.28e-22
-LU   amd(A'*A)  time:     1.23 resid: 1.78e-22
-Chol amd(A+A')  time:     0.39 resid: 1.19e-22
+QR   amd(A'*A)  time:     0.51 resid: 2.01e-22
+LU   amd(A+A')  time:     0.26 resid: 1.10e-22
+LU   amd(S'*S)  time:     0.26 resid: 1.28e-22
+LU   amd(A'*A)  time:     0.28 resid: 1.78e-22
+Chol amd(A+A')  time:     0.08 resid: 1.19e-22
 ./cs_di_demo3 < ../Matrix/bcsstk16
 
 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09
 
 chol then update/downdate amd(A+A')  
-symbolic chol time     0.03
-numeric  chol time     0.33
+symbolic chol time     0.01
+numeric  chol time     0.08
 solve    chol time     0.00
 original: resid: 1.19e-22
 update:   time:     0.00
-update:   time:     0.01 (incl solve) resid: 1.12e-23
-rechol:   time:     0.34 (incl solve) resid: 1.17e-23
+update:   time:     0.00 (incl solve) resid: 1.71e-23
+rechol:   time:     0.08 (incl solve) resid: 1.61e-23
 downdate: time:     0.00
-downdate: time:     0.01 (incl solve) resid: 4.09e-22
+downdate: time:     0.00 (incl solve) resid: 1.24e-21
 ./cs_dl_demo1 < ../Matrix/t1
 T:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : 3
     1 0 : 3.1
@@ -660,7 +659,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     0 0 : 4.5
     2 1 : 1.7
 A:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1
     col 0 : locations 0 to 2
       1 : 3.1
@@ -677,7 +676,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       3 : 1
       1 : 0.9
 AT:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 7.7
     col 0 : locations 0 to 1
       0 : 4.5
@@ -694,7 +693,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : 0.4
       3 : 1
 D:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 16 nnz: 16, 1-norm: 139.58
     col 0 : locations 0 to 3
       1 : 13.95
@@ -732,12 +731,12 @@ LU   amd(A'*A)  time:     0.00 resid: 1.53e-17
 zero entries dropped: 71
 tiny entries dropped: 10
 blocks: 38 singletons: 37 structural rank: 183
-QR   natural    time:     0.01 resid: 1.42e-27
+QR   natural    time:     0.00 resid: 1.42e-27
 QR   amd(A'*A)  time:     0.00 resid: 3.35e-28
 LU   natural    time:     0.00 resid: 6.20e-28
 LU   amd(A+A')  time:     0.00 resid: 1.55e-27
 LU   amd(S'*S)  time:     0.00 resid: 6.98e-28
-LU   amd(A'*A)  time:     0.01 resid: 6.98e-28
+LU   amd(A'*A)  time:     0.00 resid: 6.98e-28
 ./cs_dl_demo2 < ../Matrix/west0067
 
 --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.14e+00
@@ -764,8 +763,8 @@ QR   amd(A'*A)  time:     0.00 resid: 1.61e-02
 
 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01
 blocks: 10 singletons: 8 structural rank: 448
-QR   natural    time:     0.15 resid:      nan
-QR   amd(A'*A)  time:     0.20 resid:      nan
+QR   natural    time:     0.04 resid:      nan
+QR   amd(A'*A)  time:     0.05 resid:      nan
 ./cs_dl_demo2 < ../Matrix/bcsstk01
 
 --- Matrix: 48-by-48, nnz: 224 (sym: -1: nnz 400), norm: 3.57e+09
@@ -788,36 +787,36 @@ numeric  chol time     0.00
 solve    chol time     0.00
 original: resid: 2.55e-19
 update:   time:     0.00
-update:   time:     0.00 (incl solve) resid: 9.66e-19
-rechol:   time:     0.00 (incl solve) resid: 1.55e-18
+update:   time:     0.00 (incl solve) resid: 3.52e-18
+rechol:   time:     0.00 (incl solve) resid: 2.93e-18
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 3.74e-17
+downdate: time:     0.00 (incl solve) resid: 4.32e-17
 ./cs_dl_demo2 < ../Matrix/bcsstk16
 
 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09
 blocks: 75 singletons: 74 structural rank: 4884
-QR   amd(A'*A)  time:     2.62 resid: 2.01e-22
-LU   amd(A+A')  time:     1.43 resid: 1.10e-22
-LU   amd(S'*S)  time:     1.28 resid: 1.28e-22
-LU   amd(A'*A)  time:     1.35 resid: 1.78e-22
-Chol amd(A+A')  time:     0.49 resid: 1.19e-22
+QR   amd(A'*A)  time:     0.52 resid: 2.01e-22
+LU   amd(A+A')  time:     0.27 resid: 1.10e-22
+LU   amd(S'*S)  time:     0.27 resid: 1.28e-22
+LU   amd(A'*A)  time:     0.28 resid: 1.78e-22
+Chol amd(A+A')  time:     0.09 resid: 1.19e-22
 ./cs_dl_demo3 < ../Matrix/bcsstk16
 
 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09
 
 chol then update/downdate amd(A+A')  
-symbolic chol time     0.02
-numeric  chol time     0.46
-solve    chol time     0.02
+symbolic chol time     0.01
+numeric  chol time     0.08
+solve    chol time     0.00
 original: resid: 1.19e-22
 update:   time:     0.00
-update:   time:     0.01 (incl solve) resid: 1.12e-23
-rechol:   time:     0.52 (incl solve) resid: 1.17e-23
+update:   time:     0.00 (incl solve) resid: 1.71e-23
+rechol:   time:     0.08 (incl solve) resid: 1.61e-23
 downdate: time:     0.00
-downdate: time:     0.01 (incl solve) resid: 4.09e-22
+downdate: time:     0.00 (incl solve) resid: 1.24e-21
 ./cs_ci_demo1 < ../Matrix/t2
 T:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : (3, 3.14159)
     1 0 : (3.1, 42)
@@ -830,7 +829,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     0 0 : (4.5, 6)
     2 1 : (1.7, 1)
 A:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075
     col 0 : locations 0 to 2
       1 : (3.1, 42)
@@ -847,7 +846,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       3 : (1, 7)
       1 : (0.9, 99)
 AT:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 144.296
     col 0 : locations 0 to 1
       0 : (4.5, -6)
@@ -864,7 +863,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0.4, -2.71828)
       3 : (1, -7)
 D:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 16 nnz: 16, 1-norm: 25308.3
     col 0 : locations 0 to 3
       1 : (265.95, 170.4)
@@ -890,24 +889,24 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
 
 --- Matrix: 4-by-4, nnz: 10 (sym: 0: nnz 0), norm: 1.06e+02
 blocks: 1 singletons: 0 structural rank: 4
-QR   natural    time:     0.00 resid: 2.06e-17
-QR   amd(A'*A)  time:     0.00 resid: 6.36e-18
-LU   natural    time:     0.00 resid: 4.88e-18
-LU   amd(A+A')  time:     0.00 resid: 2.11e-18
-LU   amd(S'*S)  time:     0.00 resid: 6.36e-18
-LU   amd(A'*A)  time:     0.00 resid: 2.11e-18
+QR   natural    time:     0.00 resid: 3.42e-17
+QR   amd(A'*A)  time:     0.00 resid: 2.49e-17
+LU   natural    time:     0.00 resid: 7.38e-18
+LU   amd(A+A')  time:     0.00 resid: 5.40e-18
+LU   amd(S'*S)  time:     0.00 resid: 3.84e-18
+LU   amd(A'*A)  time:     0.00 resid: 5.40e-18
 ./cs_ci_demo2 < ../Matrix/t3
 
 --- Matrix: 3-by-4, nnz: 12 (sym: 0: nnz 0), norm: 3.06e+00
 blocks: 1 singletons: 0 structural rank: 3
-QR   natural    time:     0.00 resid: 1.05e-16
-QR   amd(A'*A)  time:     0.00 resid: 1.05e-16
+QR   natural    time:     0.00 resid: 1.27e-16
+QR   amd(A'*A)  time:     0.00 resid: 1.27e-16
 ./cs_ci_demo2 < ../Matrix/t4
 
 --- Matrix: 2-by-2, nnz: 3 (sym: 1: nnz 4), norm: 2.83e+00
 blocks: 1 singletons: 0 structural rank: 2
-QR   natural    time:     0.00 resid: 5.65e-17
-QR   amd(A'*A)  time:     0.00 resid: 5.65e-17
+QR   natural    time:     0.00 resid: 1.11e-16
+QR   amd(A'*A)  time:     0.00 resid: 1.11e-16
 LU   natural    time:     0.00 resid: 0.00e+00
 LU   amd(A+A')  time:     0.00 resid: 0.00e+00
 LU   amd(S'*S)  time:     0.00 resid: 0.00e+00
@@ -918,58 +917,58 @@ Chol amd(A+A')  time:     0.00     (failed)
 
 --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.17e+00
 blocks: 2 singletons: 1 structural rank: 67
-QR   natural    time:     0.00 resid: 8.16e-17
-QR   amd(A'*A)  time:     0.00 resid: 5.34e-17
-LU   natural    time:     0.00 resid: 4.54e-17
-LU   amd(A+A')  time:     0.00 resid: 5.90e-17
+QR   natural    time:     0.00 resid: 7.47e-17
+QR   amd(A'*A)  time:     0.00 resid: 7.73e-17
+LU   natural    time:     0.00 resid: 6.30e-17
+LU   amd(A+A')  time:     0.00 resid: 5.29e-17
 LU   amd(S'*S)  time:     0.00 resid: 5.28e-17
-LU   amd(A'*A)  time:     0.00 resid: 4.76e-17
+LU   amd(A'*A)  time:     0.00 resid: 4.33e-17
 ./cs_ci_demo2 < ../Matrix/c_mbeacxc
 
 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01
 blocks: 10 singletons: 8 structural rank: 448
-QR   natural    time:     0.32 resid:      nan
-QR   amd(A'*A)  time:     0.37 resid:      nan
+QR   natural    time:     0.11 resid:      nan
+QR   amd(A'*A)  time:     0.12 resid:      nan
 ./cs_ci_demo2 < ../Matrix/young1c
 
 --- Matrix: 841-by-841, nnz: 4089 (sym: 0: nnz 0), norm: 7.30e+02
 blocks: 1 singletons: 0 structural rank: 841
-QR   natural    time:     0.02 resid: 1.51e-16
-QR   amd(A'*A)  time:     0.00 resid: 1.53e-16
-LU   natural    time:     0.01 resid: 1.39e-16
-LU   amd(A+A')  time:     0.01 resid: 2.95e-16
-LU   amd(S'*S)  time:     0.01 resid: 3.37e-16
-LU   amd(A'*A)  time:     0.00 resid: 3.37e-16
+QR   natural    time:     0.01 resid: 1.56e-16
+QR   amd(A'*A)  time:     0.00 resid: 1.08e-16
+LU   natural    time:     0.00 resid: 1.56e-16
+LU   amd(A+A')  time:     0.00 resid: 3.55e-16
+LU   amd(S'*S)  time:     0.00 resid: 2.93e-16
+LU   amd(A'*A)  time:     0.00 resid: 2.93e-16
 ./cs_ci_demo2 < ../Matrix/qc324
 
 --- Matrix: 324-by-324, nnz: 26730 (sym: 0: nnz 0), norm: 1.71e+00
 blocks: 1 singletons: 0 structural rank: 324
-QR   natural    time:     0.04 resid: 9.08e-17
-QR   amd(A'*A)  time:     0.05 resid: 8.71e-17
-LU   natural    time:     0.02 resid: 6.01e-17
-LU   amd(A+A')  time:     0.02 resid: 4.05e-17
-LU   amd(S'*S)  time:     0.04 resid: 4.71e-17
-LU   amd(A'*A)  time:     0.03 resid: 4.71e-17
+QR   natural    time:     0.02 resid: 9.86e-17
+QR   amd(A'*A)  time:     0.02 resid: 1.14e-16
+LU   natural    time:     0.01 resid: 4.32e-17
+LU   amd(A+A')  time:     0.01 resid: 3.99e-17
+LU   amd(S'*S)  time:     0.01 resid: 4.00e-17
+LU   amd(A'*A)  time:     0.01 resid: 4.00e-17
 ./cs_ci_demo2 < ../Matrix/neumann
 
 --- Matrix: 1600-by-1600, nnz: 7840 (sym: 0: nnz 0), norm: 1.41e+01
 blocks: 1 singletons: 0 structural rank: 1600
-QR   amd(A'*A)  time:     0.03 resid: 1.04e-15
-LU   amd(A+A')  time:     0.00 resid: 3.55e-16
-LU   amd(S'*S)  time:     0.02 resid: 4.03e-16
-LU   amd(A'*A)  time:     0.02 resid: 4.03e-16
+QR   amd(A'*A)  time:     0.01 resid: 7.66e-16
+LU   amd(A+A')  time:     0.00 resid: 4.59e-16
+LU   amd(S'*S)  time:     0.01 resid: 4.56e-16
+LU   amd(A'*A)  time:     0.01 resid: 4.56e-16
 ./cs_ci_demo2 < ../Matrix/c4
 
 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01
 blocks: 1 singletons: 0 structural rank: 4
-QR   natural    time:     0.00 resid: 5.85e-17
-QR   amd(A'*A)  time:     0.00 resid: 5.85e-17
-LU   natural    time:     0.00 resid: 2.29e-17
-LU   amd(A+A')  time:     0.00 resid: 2.29e-17
-LU   amd(S'*S)  time:     0.00 resid: 2.29e-17
-LU   amd(A'*A)  time:     0.00 resid: 2.29e-17
-Chol natural    time:     0.00 resid: 6.88e-17
-Chol amd(A+A')  time:     0.00 resid: 6.88e-17
+QR   natural    time:     0.00 resid: 5.98e-17
+QR   amd(A'*A)  time:     0.00 resid: 5.98e-17
+LU   natural    time:     0.00 resid: 4.59e-17
+LU   amd(A+A')  time:     0.00 resid: 4.59e-17
+LU   amd(S'*S)  time:     0.00 resid: 4.59e-17
+LU   amd(A'*A)  time:     0.00 resid: 4.59e-17
+Chol natural    time:     0.00 resid: 9.17e-17
+Chol amd(A+A')  time:     0.00 resid: 9.17e-17
 ./cs_ci_demo3 < ../Matrix/c4
 
 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01
@@ -978,39 +977,39 @@ chol then update/downdate amd(A+A')
 symbolic chol time     0.00
 numeric  chol time     0.00
 solve    chol time     0.00
-original: resid: 6.88e-17
+original: resid: 9.17e-17
 update:   time:     0.00
-update:   time:     0.00 (incl solve) resid: 6.49e-17
-rechol:   time:     0.00 (incl solve) resid: 6.49e-17
+update:   time:     0.00 (incl solve) resid: 7.03e-17
+rechol:   time:     0.00 (incl solve) resid: 4.83e-17
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 5.85e-17
+downdate: time:     0.00 (incl solve) resid: 9.17e-17
 ./cs_ci_demo2 < ../Matrix/mhd1280b
 
 --- Matrix: 1280-by-1280, nnz: 11963 (sym: -1: nnz 22646), norm: 8.00e+01
 tiny entries dropped: 66
 blocks: 20 singletons: 14 structural rank: 1280
-QR   amd(A'*A)  time:     0.01 resid: 6.15e-25
-LU   amd(A+A')  time:     0.01 resid: 2.33e-25
-LU   amd(S'*S)  time:     0.01 resid: 3.96e-25
-LU   amd(A'*A)  time:     0.01 resid: 3.96e-25
+QR   amd(A'*A)  time:     0.00 resid: 5.96e-25
+LU   amd(A+A')  time:     0.00 resid: 2.33e-25
+LU   amd(S'*S)  time:     0.00 resid: 2.45e-25
+LU   amd(A'*A)  time:     0.00 resid: 2.45e-25
 Chol amd(A+A')  time:     0.00 resid: 1.58e-25
 ./cs_ci_demo3 < ../Matrix/mhd1280b
 
 --- Matrix: 1280-by-1280, nnz: 12029 (sym: -1: nnz 22778), norm: 8.00e+01
 
 chol then update/downdate amd(A+A')  
-symbolic chol time     0.01
+symbolic chol time     0.00
 numeric  chol time     0.00
 solve    chol time     0.00
-original: resid: 1.51e-25
+original: resid: 2.14e-25
 update:   time:     0.00
-update:   time:     0.00 (incl solve) resid: 1.75e-25
-rechol:   time:     0.00 (incl solve) resid: 1.71e-25
+update:   time:     0.00 (incl solve) resid: 2.14e-25
+rechol:   time:     0.00 (incl solve) resid: 2.14e-25
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 5.85e-25
+downdate: time:     0.00 (incl solve) resid: 1.05e-24
 ./cs_cl_demo1 < ../Matrix/t2
 T:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 triplet: 4-by-4, nzmax: 16 nnz: 10
     2 2 : (3, 3.14159)
     1 0 : (3.1, 42)
@@ -1023,7 +1022,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10
     0 0 : (4.5, 6)
     2 1 : (1.7, 1)
 A:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075
     col 0 : locations 0 to 2
       1 : (3.1, 42)
@@ -1040,7 +1039,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       3 : (1, 7)
       1 : (0.9, 99)
 AT:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 10 nnz: 10, 1-norm: 144.296
     col 0 : locations 0 to 1
       0 : (4.5, -6)
@@ -1057,7 +1056,7 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
       1 : (0.4, -2.71828)
       3 : (1, -7)
 D:
-CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
+CXSparse Version 3.1.4, Oct 10, 2014.  Copyright (c) Timothy A. Davis, 2006-2014
 4-by-4, nzmax: 16 nnz: 16, 1-norm: 25308.3
     col 0 : locations 0 to 3
       1 : (265.95, 170.4)
@@ -1083,24 +1082,24 @@ CXSparse Version 2.2.1, Nov 1, 2007.  Copyright (c) Timothy A. Davis, 2006-2007
 
 --- Matrix: 4-by-4, nnz: 10 (sym: 0: nnz 0), norm: 1.06e+02
 blocks: 1 singletons: 0 structural rank: 4
-QR   natural    time:     0.00 resid: 2.06e-17
-QR   amd(A'*A)  time:     0.00 resid: 6.36e-18
-LU   natural    time:     0.00 resid: 4.88e-18
-LU   amd(A+A')  time:     0.00 resid: 2.11e-18
-LU   amd(S'*S)  time:     0.00 resid: 6.36e-18
-LU   amd(A'*A)  time:     0.00 resid: 2.11e-18
+QR   natural    time:     0.00 resid: 3.42e-17
+QR   amd(A'*A)  time:     0.00 resid: 2.49e-17
+LU   natural    time:     0.00 resid: 7.38e-18
+LU   amd(A+A')  time:     0.00 resid: 5.40e-18
+LU   amd(S'*S)  time:     0.00 resid: 3.84e-18
+LU   amd(A'*A)  time:     0.00 resid: 5.40e-18
 ./cs_cl_demo2 < ../Matrix/t3
 
 --- Matrix: 3-by-4, nnz: 12 (sym: 0: nnz 0), norm: 3.06e+00
 blocks: 1 singletons: 0 structural rank: 3
-QR   natural    time:     0.00 resid: 1.05e-16
-QR   amd(A'*A)  time:     0.00 resid: 1.05e-16
+QR   natural    time:     0.00 resid: 1.27e-16
+QR   amd(A'*A)  time:     0.00 resid: 1.27e-16
 ./cs_cl_demo2 < ../Matrix/t4
 
 --- Matrix: 2-by-2, nnz: 3 (sym: 1: nnz 4), norm: 2.83e+00
 blocks: 1 singletons: 0 structural rank: 2
-QR   natural    time:     0.00 resid: 5.65e-17
-QR   amd(A'*A)  time:     0.00 resid: 5.65e-17
+QR   natural    time:     0.00 resid: 1.11e-16
+QR   amd(A'*A)  time:     0.00 resid: 1.11e-16
 LU   natural    time:     0.00 resid: 0.00e+00
 LU   amd(A+A')  time:     0.00 resid: 0.00e+00
 LU   amd(S'*S)  time:     0.00 resid: 0.00e+00
@@ -1111,58 +1110,58 @@ Chol amd(A+A')  time:     0.00     (failed)
 
 --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.17e+00
 blocks: 2 singletons: 1 structural rank: 67
-QR   natural    time:     0.00 resid: 8.16e-17
-QR   amd(A'*A)  time:     0.00 resid: 5.34e-17
-LU   natural    time:     0.00 resid: 4.54e-17
-LU   amd(A+A')  time:     0.00 resid: 5.90e-17
+QR   natural    time:     0.00 resid: 7.47e-17
+QR   amd(A'*A)  time:     0.00 resid: 7.73e-17
+LU   natural    time:     0.00 resid: 6.30e-17
+LU   amd(A+A')  time:     0.00 resid: 5.29e-17
 LU   amd(S'*S)  time:     0.00 resid: 5.28e-17
-LU   amd(A'*A)  time:     0.00 resid: 4.76e-17
+LU   amd(A'*A)  time:     0.00 resid: 4.33e-17
 ./cs_cl_demo2 < ../Matrix/c_mbeacxc
 
 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01
 blocks: 10 singletons: 8 structural rank: 448
-QR   natural    time:     0.29 resid:      nan
-QR   amd(A'*A)  time:     0.35 resid:      nan
+QR   natural    time:     0.11 resid:      nan
+QR   amd(A'*A)  time:     0.12 resid:      nan
 ./cs_cl_demo2 < ../Matrix/young1c
 
 --- Matrix: 841-by-841, nnz: 4089 (sym: 0: nnz 0), norm: 7.30e+02
 blocks: 1 singletons: 0 structural rank: 841
-QR   natural    time:     0.02 resid: 1.51e-16
-QR   amd(A'*A)  time:     0.01 resid: 1.53e-16
-LU   natural    time:     0.01 resid: 1.39e-16
-LU   amd(A+A')  time:     0.01 resid: 2.95e-16
-LU   amd(S'*S)  time:     0.01 resid: 3.37e-16
-LU   amd(A'*A)  time:     0.00 resid: 3.37e-16
+QR   natural    time:     0.01 resid: 1.56e-16
+QR   amd(A'*A)  time:     0.00 resid: 1.08e-16
+LU   natural    time:     0.00 resid: 1.56e-16
+LU   amd(A+A')  time:     0.00 resid: 3.55e-16
+LU   amd(S'*S)  time:     0.00 resid: 2.93e-16
+LU   amd(A'*A)  time:     0.00 resid: 2.93e-16
 ./cs_cl_demo2 < ../Matrix/qc324
 
 --- Matrix: 324-by-324, nnz: 26730 (sym: 0: nnz 0), norm: 1.71e+00
 blocks: 1 singletons: 0 structural rank: 324
-QR   natural    time:     0.04 resid: 9.08e-17
-QR   amd(A'*A)  time:     0.06 resid: 8.71e-17
-LU   natural    time:     0.02 resid: 6.01e-17
-LU   amd(A+A')  time:     0.03 resid: 4.05e-17
-LU   amd(S'*S)  time:     0.03 resid: 4.71e-17
-LU   amd(A'*A)  time:     0.03 resid: 4.71e-17
+QR   natural    time:     0.02 resid: 9.86e-17
+QR   amd(A'*A)  time:     0.02 resid: 1.14e-16
+LU   natural    time:     0.01 resid: 4.32e-17
+LU   amd(A+A')  time:     0.01 resid: 3.99e-17
+LU   amd(S'*S)  time:     0.01 resid: 4.00e-17
+LU   amd(A'*A)  time:     0.01 resid: 4.00e-17
 ./cs_cl_demo2 < ../Matrix/neumann
 
 --- Matrix: 1600-by-1600, nnz: 7840 (sym: 0: nnz 0), norm: 1.41e+01
 blocks: 1 singletons: 0 structural rank: 1600
-QR   amd(A'*A)  time:     0.03 resid: 1.04e-15
-LU   amd(A+A')  time:     0.01 resid: 3.55e-16
-LU   amd(S'*S)  time:     0.03 resid: 4.03e-16
-LU   amd(A'*A)  time:     0.01 resid: 4.03e-16
+QR   amd(A'*A)  time:     0.01 resid: 7.66e-16
+LU   amd(A+A')  time:     0.00 resid: 4.59e-16
+LU   amd(S'*S)  time:     0.01 resid: 4.56e-16
+LU   amd(A'*A)  time:     0.01 resid: 4.56e-16
 ./cs_cl_demo2 < ../Matrix/c4
 
 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01
 blocks: 1 singletons: 0 structural rank: 4
-QR   natural    time:     0.00 resid: 5.85e-17
-QR   amd(A'*A)  time:     0.00 resid: 5.85e-17
-LU   natural    time:     0.00 resid: 2.29e-17
-LU   amd(A+A')  time:     0.00 resid: 2.29e-17
-LU   amd(S'*S)  time:     0.00 resid: 2.29e-17
-LU   amd(A'*A)  time:     0.00 resid: 2.29e-17
-Chol natural    time:     0.00 resid: 6.88e-17
-Chol amd(A+A')  time:     0.00 resid: 6.88e-17
+QR   natural    time:     0.00 resid: 5.98e-17
+QR   amd(A'*A)  time:     0.00 resid: 5.98e-17
+LU   natural    time:     0.00 resid: 4.59e-17
+LU   amd(A+A')  time:     0.00 resid: 4.59e-17
+LU   amd(S'*S)  time:     0.00 resid: 4.59e-17
+LU   amd(A'*A)  time:     0.00 resid: 4.59e-17
+Chol natural    time:     0.00 resid: 9.17e-17
+Chol amd(A+A')  time:     0.00 resid: 9.17e-17
 ./cs_cl_demo3 < ../Matrix/c4
 
 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01
@@ -1171,34 +1170,33 @@ chol then update/downdate amd(A+A')
 symbolic chol time     0.00
 numeric  chol time     0.00
 solve    chol time     0.00
-original: resid: 6.88e-17
+original: resid: 9.17e-17
 update:   time:     0.00
-update:   time:     0.00 (incl solve) resid: 6.49e-17
-rechol:   time:     0.00 (incl solve) resid: 6.49e-17
+update:   time:     0.00 (incl solve) resid: 7.03e-17
+rechol:   time:     0.00 (incl solve) resid: 4.83e-17
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 5.85e-17
+downdate: time:     0.00 (incl solve) resid: 9.17e-17
 ./cs_cl_demo2 < ../Matrix/mhd1280b
 
 --- Matrix: 1280-by-1280, nnz: 11963 (sym: -1: nnz 22646), norm: 8.00e+01
 tiny entries dropped: 66
 blocks: 20 singletons: 14 structural rank: 1280
-QR   amd(A'*A)  time:     0.01 resid: 6.15e-25
+QR   amd(A'*A)  time:     0.00 resid: 5.96e-25
 LU   amd(A+A')  time:     0.00 resid: 2.33e-25
-LU   amd(S'*S)  time:     0.01 resid: 3.96e-25
-LU   amd(A'*A)  time:     0.00 resid: 3.96e-25
-Chol amd(A+A')  time:     0.01 resid: 1.58e-25
+LU   amd(S'*S)  time:     0.00 resid: 2.45e-25
+LU   amd(A'*A)  time:     0.00 resid: 2.45e-25
+Chol amd(A+A')  time:     0.00 resid: 1.58e-25
 ./cs_cl_demo3 < ../Matrix/mhd1280b
 
 --- Matrix: 1280-by-1280, nnz: 12029 (sym: -1: nnz 22778), norm: 8.00e+01
 
 chol then update/downdate amd(A+A')  
-symbolic chol time     0.01
+symbolic chol time     0.00
 numeric  chol time     0.00
 solve    chol time     0.00
-original: resid: 1.51e-25
+original: resid: 2.14e-25
 update:   time:     0.00
-update:   time:     0.00 (incl solve) resid: 1.75e-25
-rechol:   time:     0.00 (incl solve) resid: 1.71e-25
+update:   time:     0.00 (incl solve) resid: 2.14e-25
+rechol:   time:     0.00 (incl solve) resid: 2.14e-25
 downdate: time:     0.00
-downdate: time:     0.00 (incl solve) resid: 5.85e-25
-make[1]: Leaving directory `/amd/netapp3/vol/research0a/research18/sparse2/SuiteSparse/CXSparse/Demo'
+downdate: time:     0.00 (incl solve) resid: 1.05e-24
diff --git a/CXSparse/Demo/cs_demo1.c b/CXSparse/Demo/cs_demo1.c
index ea1a059..faf4743 100644
--- a/CXSparse/Demo/cs_demo1.c
+++ b/CXSparse/Demo/cs_demo1.c
@@ -3,22 +3,22 @@ int main (void)
 {
     cs *T, *A, *Eye, *AT, *C, *D ;
     int i, m ;
-    T = cs_load (stdin) ;		/* load triplet matrix T from stdin */
-    printf ("T:\n") ; cs_print (T, 0) ;	/* print T */
-    A = cs_compress (T) ;		/* A = compressed-column form of T */
-    printf ("A:\n") ; cs_print (A, 0) ;	/* print A */
-    cs_spfree (T) ;			/* clear T */
-    AT = cs_transpose (A, 1) ;		/* AT = A' */
+    T = cs_load (stdin) ;               /* load triplet matrix T from stdin */
+    printf ("T:\n") ; cs_print (T, 0) ; /* print T */
+    A = cs_compress (T) ;               /* A = compressed-column form of T */
+    printf ("A:\n") ; cs_print (A, 0) ; /* print A */
+    cs_spfree (T) ;                     /* clear T */
+    AT = cs_transpose (A, 1) ;          /* AT = A' */
     printf ("AT:\n") ; cs_print (AT, 0) ; /* print AT */
-    m = A ? A->m : 0 ;			/* m = # of rows of A */
-    T = cs_spalloc (m, m, m, 1, 1) ;	/* create triplet identity matrix */
+    m = A ? A->m : 0 ;                  /* m = # of rows of A */
+    T = cs_spalloc (m, m, m, 1, 1) ;    /* create triplet identity matrix */
     for (i = 0 ; i < m ; i++) cs_entry (T, i, i, 1) ;
-    Eye = cs_compress (T) ;		/* Eye = speye (m) */
+    Eye = cs_compress (T) ;             /* Eye = speye (m) */
     cs_spfree (T) ;
-    C = cs_multiply (A, AT) ;		/* C = A*A' */
+    C = cs_multiply (A, AT) ;           /* C = A*A' */
     D = cs_add (C, Eye, 1, cs_norm (C)) ;   /* D = C + Eye*norm (C,1) */
-    printf ("D:\n") ; cs_print (D, 0) ;	/* print D */
-    cs_spfree (A) ;			/* clear A AT C D Eye */
+    printf ("D:\n") ; cs_print (D, 0) ; /* print D */
+    cs_spfree (A) ;                     /* clear A AT C D Eye */
     cs_spfree (AT) ;
     cs_spfree (C) ;
     cs_spfree (D) ;
diff --git a/CXSparse/Demo/cs_di_demo.c b/CXSparse/Demo/cs_di_demo.c
index 78fa22a..11627f5 100644
--- a/CXSparse/Demo/cs_di_demo.c
+++ b/CXSparse/Demo/cs_di_demo.c
@@ -9,11 +9,11 @@ static int is_sym (cs_di *A)
     is_lower = 1 ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    if (Ai [p] > j) is_upper = 0 ;
-	    if (Ai [p] < j) is_lower = 0 ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            if (Ai [p] > j) is_upper = 0 ;
+            if (Ai [p] < j) is_lower = 0 ;
+        }
     }
     return (is_upper ? 1 : (is_lower ? -1 : 0)) ;
 }
@@ -25,9 +25,9 @@ static int dropdiag (int i, int j, double aij, void *other) { return (i != j) ;}
 static cs_di *make_sym (cs_di *A)
 {
     cs_di *AT, *C ;
-    AT = cs_di_transpose (A, 1) ;		/* AT = A' */
-    cs_di_fkeep (AT, &dropdiag, NULL) ;	/* drop diagonal entries from AT */
-    C = cs_di_add (A, AT, 1, 1) ;		/* C = A+AT */
+    AT = cs_di_transpose (A, 1) ;          /* AT = A' */
+    cs_di_fkeep (AT, &dropdiag, NULL) ;    /* drop diagonal entries from AT */
+    C = cs_di_add (A, AT, 1, 1) ;          /* C = A+AT */
     cs_di_spfree (AT) ;
     return (C) ;
 }
@@ -56,9 +56,9 @@ static void print_resid (int ok, cs_di *A, double *x, double *b, double *resid)
     if (!ok) { printf ("    (failed)\n") ; return ; }
     m = A->m ; n = A->n ;
     for (i = 0 ; i < m ; i++) resid [i] = -b [i] ;  /* resid = -b */
-    cs_di_gaxpy (A, x, resid) ;			    /* resid = resid + A*x  */
+    cs_di_gaxpy (A, x, resid) ;                        /* resid = resid + A*x  */
     printf ("resid: %8.2e\n", norm (resid,m) / ((n == 0) ? 1 :
-	(cs_di_norm (A) * norm (x,n) + norm (b,m)))) ;
+        (cs_di_norm (A) * norm (x,n) + norm (b,m)))) ;
 }
 
 static double tic (void) { return (clock () / (double) CLOCKS_PER_SEC) ; }
@@ -68,14 +68,14 @@ static void print_order (int order)
 {
     switch (order)
     {
-	case 0: printf ("natural    ") ; break ;
-	case 1: printf ("amd(A+A')  ") ; break ;
-	case 2: printf ("amd(S'*S)  ") ; break ;
-	case 3: printf ("amd(A'*A)  ") ; break ;
+        case 0: printf ("natural    ") ; break ;
+        case 1: printf ("amd(A+A')  ") ; break ;
+        case 2: printf ("amd(S'*S)  ") ; break ;
+        case 3: printf ("amd(A'*A)  ") ; break ;
     }
 }
 
-/* read a problem from a file */
+/* read a problem from a file; use %g for integers to avoid int conflicts */
 problem *get_problem (FILE *f, double tol)
 {
     cs_di *T, *A, *C ;
@@ -83,23 +83,25 @@ problem *get_problem (FILE *f, double tol)
     problem *Prob ;
     Prob = cs_di_calloc (1, sizeof (problem)) ;
     if (!Prob) return (NULL) ;
-    T = cs_di_load (f) ;			/* load triplet matrix T from a file */
-    Prob->A = A = cs_di_compress (T) ;	/* A = compressed-column form of T */
-    cs_di_spfree (T) ;			/* clear T */
+    T = cs_di_load (f) ;                   /* load triplet matrix T from a file */
+    Prob->A = A = cs_di_compress (T) ;     /* A = compressed-column form of T */
+    cs_di_spfree (T) ;                     /* clear T */
     if (!cs_di_dupl (A)) return (free_problem (Prob)) ; /* sum up duplicates */
-    Prob->sym = sym = is_sym (A) ;	/* determine if A is symmetric */
+    Prob->sym = sym = is_sym (A) ;      /* determine if A is symmetric */
     m = A->m ; n = A->n ;
     mn = CS_MAX (m,n) ;
     nz1 = A->p [n] ;
-    cs_di_dropzeros (A) ;			/* drop zero entries */
+    cs_di_dropzeros (A) ;                  /* drop zero entries */
     nz2 = A->p [n] ;
-    if (tol > 0) cs_di_droptol (A, tol) ;	/* drop tiny entries (just to test) */
+    if (tol > 0) cs_di_droptol (A, tol) ;  /* drop tiny entries (just to test) */
     Prob->C = C = sym ? make_sym (A) : A ;  /* C = A + triu(A,1)', or C=A */
     if (!C) return (free_problem (Prob)) ;
-    printf ("\n--- Matrix: %d-by-%d, nnz: %d (sym: %d: nnz %d), norm: %8.2e\n",
-	    m, n, A->p [n], sym, sym ? C->p [n] : 0, cs_di_norm (C)) ;
-    if (nz1 != nz2) printf ("zero entries dropped: %d\n", nz1 - nz2) ;
-    if (nz2 != A->p [n]) printf ("tiny entries dropped: %d\n", nz2 - A->p [n]) ;
+    printf ("\n--- Matrix: %g-by-%g, nnz: %g (sym: %g: nnz %g), norm: %8.2e\n",
+            (double) m, (double) n, (double) (A->p [n]), (double) sym,
+            (double) (sym ? C->p [n] : 0), cs_di_norm (C)) ;
+    if (nz1 != nz2) printf ("zero entries dropped: %g\n", (double) (nz1 - nz2));
+    if (nz2 != A->p [n]) printf ("tiny entries dropped: %g\n",
+            (double) (nz2 - A->p [n])) ;
     Prob->b = cs_di_malloc (mn, sizeof (double)) ;
     Prob->x = cs_di_malloc (mn, sizeof (double)) ;
     Prob->resid = cs_di_malloc (mn, sizeof (double)) ;
@@ -128,51 +130,52 @@ int demo2 (problem *Prob)
     if (!Prob) return (0) ;
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     m = A->m ; n = A->n ;
-    tol = Prob->sym ? 0.001 : 1 ;		/* partial pivoting tolerance */
-    D = cs_di_dmperm (C, 1) ;			/* randomized dmperm analysis */
+    tol = Prob->sym ? 0.001 : 1 ;               /* partial pivoting tolerance */
+    D = cs_di_dmperm (C, 1) ;                      /* randomized dmperm analysis */
     if (!D) return (0) ;
     nb = D->nb ; r = D->r ; s = D->s ; rr = D->rr ;
     sprank = rr [3] ;
     for (ns = 0, k = 0 ; k < nb ; k++)
     {
-	ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
+        ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
     }
-    printf ("blocks: %d singletons: %d structural rank: %d\n", nb, ns, sprank) ;
+    printf ("blocks: %g singletons: %g structural rank: %g\n",
+        (double) nb, (double) ns, (double) sprank) ;
     cs_di_dfree (D) ;
-    for (order = 0 ; order <= 3 ; order += 3)	/* natural and amd(A'*A) */
+    for (order = 0 ; order <= 3 ; order += 3)   /* natural and amd(A'*A) */
     {
-	if (!order && m > 1000) continue ;
-	printf ("QR   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_di_qrsol (order, C, x) ;		/* min norm(Ax-b) with QR */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("QR   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_di_qrsol (order, C, x) ;           /* min norm(Ax-b) with QR */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
-    if (m != n || sprank < n) return (1) ;	/* return if rect. or singular*/
-    for (order = 0 ; order <= 3 ; order++)	/* try all orderings */
+    if (m != n || sprank < n) return (1) ;      /* return if rect. or singular*/
+    for (order = 0 ; order <= 3 ; order++)      /* try all orderings */
     {
-	if (!order && m > 1000) continue ;
-	printf ("LU   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_di_lusol (order, C, x, tol) ;	/* solve Ax=b with LU */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("LU   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_di_lusol (order, C, x, tol) ;      /* solve Ax=b with LU */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     if (!Prob->sym) return (1) ;
-    for (order = 0 ; order <= 1 ; order++)	/* natural and amd(A+A') */
+    for (order = 0 ; order <= 1 ; order++)      /* natural and amd(A+A') */
     {
-	if (!order && m > 1000) continue ;
-	printf ("Chol ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_di_cholsol (order, C, x) ;		/* solve Ax=b with Cholesky */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("Chol ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_di_cholsol (order, C, x) ;         /* solve Ax=b with Cholesky */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     return (1) ;
 } 
@@ -201,26 +204,26 @@ int demo3 (problem *Prob)
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     n = A->n ;
     if (!Prob->sym || n == 0) return (1) ;
-    rhs (x, b, n) ;				/* compute right-hand side */
+    rhs (x, b, n) ;                             /* compute right-hand side */
     printf ("\nchol then update/downdate ") ;
     print_order (1) ;
     y = cs_di_malloc (n, sizeof (double)) ;
     t = tic () ;
-    S = cs_di_schol (1, C) ;			/* symbolic Chol, amd(A+A') */
+    S = cs_di_schol (1, C) ;                       /* symbolic Chol, amd(A+A') */
     printf ("\nsymbolic chol time %8.2f\n", toc (t)) ;
     t = tic () ;
-    N = cs_di_chol (C, S) ;			/* numeric Cholesky */
+    N = cs_di_chol (C, S) ;                        /* numeric Cholesky */
     printf ("numeric  chol time %8.2f\n", toc (t)) ;
     if (!S || !N || !y) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_di_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_di_lsolve (N->L, y) ;			/* y = L\y */
-    cs_di_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_di_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_di_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_di_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_di_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_di_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     printf ("solve    chol time %8.2f\n", toc (t)) ;
     printf ("original: ") ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
-    k = n/2 ;					/* construct W  */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
+    k = n/2 ;                                   /* construct W  */
     W = cs_di_spalloc (n, 1, n, 1, 0) ;
     if (!W) return (done3 (0, S, N, y, W, E, p)) ;
     Lp = N->L->p ; Li = N->L->i ; Lx = N->L->x ;
@@ -232,23 +235,23 @@ int demo3 (problem *Prob)
     srand (1) ;
     for ( ; p1 < Lp [k+1] ; p1++)
     {
-	p2 = p1 - Lp [k] ;
-	Wi [p2] = Li [p1] ;
-	Wx [p2] = s * rand () / ((double) RAND_MAX) ;
+        p2 = p1 - Lp [k] ;
+        Wi [p2] = Li [p1] ;
+        Wx [p2] = s * rand () / ((double) RAND_MAX) ;
     }
     t = tic () ;
-    ok = cs_di_updown (N->L, +1, W, S->parent) ;	/* update: L*L'+W*W' */
+    ok = cs_di_updown (N->L, +1, W, S->parent) ;   /* update: L*L'+W*W' */
     t1 = toc (t) ;
     printf ("update:   time: %8.2f\n", t1) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_di_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_di_lsolve (N->L, y) ;			/* y = L\y */
-    cs_di_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_di_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_di_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_di_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_di_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_di_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     p = cs_di_pinv (S->pinv, n) ;
-    W2 = cs_di_permute (W, p, NULL, 1) ;		/* E = C + (P'W)*(P'W)' */
+    W2 = cs_di_permute (W, p, NULL, 1) ;           /* E = C + (P'W)*(P'W)' */
     WT = cs_di_transpose (W2,1) ;
     WW = cs_di_multiply (W2, WT) ;
     cs_di_spfree (WT) ;
@@ -257,30 +260,30 @@ int demo3 (problem *Prob)
     cs_di_spfree (WW) ;
     if (!E || !p) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("update:   time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
-    cs_di_nfree (N) ;				/* clear N */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
+    cs_di_nfree (N) ;                              /* clear N */
     t = tic () ;
-    N = cs_di_chol (E, S) ;			/* numeric Cholesky */
+    N = cs_di_chol (E, S) ;                        /* numeric Cholesky */
     if (!N) return (done3 (0, S, N, y, W, E, p)) ;
-    cs_di_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_di_lsolve (N->L, y) ;			/* y = L\y */
-    cs_di_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_di_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_di_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_di_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_di_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_di_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("rechol:   time: %8.2f (incl solve) ", t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
     t = tic () ;
-    ok = cs_di_updown (N->L, -1, W, S->parent) ;	/* downdate: L*L'-W*W' */
+    ok = cs_di_updown (N->L, -1, W, S->parent) ;   /* downdate: L*L'-W*W' */
     t1 = toc (t) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("downdate: time: %8.2f\n", t1) ;
     t = tic () ;
-    cs_di_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_di_lsolve (N->L, y) ;			/* y = L\y */
-    cs_di_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_di_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_di_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_di_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_di_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_di_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("downdate: time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
     return (done3 (1, S, N, y, W, E, p)) ;
 } 
diff --git a/CXSparse/Demo/cs_di_demo1.c b/CXSparse/Demo/cs_di_demo1.c
index ad9d641..93d0511 100644
--- a/CXSparse/Demo/cs_di_demo1.c
+++ b/CXSparse/Demo/cs_di_demo1.c
@@ -3,22 +3,22 @@ int main (void)
 {
     cs_di *T, *A, *Eye, *AT, *C, *D ;
     int i, m ;
-    T = cs_di_load (stdin) ;		/* load triplet matrix T from stdin */
-    printf ("T:\n") ; cs_di_print (T, 0) ;	/* print T */
-    A = cs_di_compress (T) ;		/* A = compressed-column form of T */
-    printf ("A:\n") ; cs_di_print (A, 0) ;	/* print A */
-    cs_di_spfree (T) ;			/* clear T */
-    AT = cs_di_transpose (A, 1) ;		/* AT = A' */
+    T = cs_di_load (stdin) ;               /* load triplet matrix T from stdin */
+    printf ("T:\n") ; cs_di_print (T, 0) ; /* print T */
+    A = cs_di_compress (T) ;               /* A = compressed-column form of T */
+    printf ("A:\n") ; cs_di_print (A, 0) ; /* print A */
+    cs_di_spfree (T) ;                     /* clear T */
+    AT = cs_di_transpose (A, 1) ;          /* AT = A' */
     printf ("AT:\n") ; cs_di_print (AT, 0) ; /* print AT */
-    m = A ? A->m : 0 ;			/* m = # of rows of A */
-    T = cs_di_spalloc (m, m, m, 1, 1) ;	/* create triplet identity matrix */
+    m = A ? A->m : 0 ;                  /* m = # of rows of A */
+    T = cs_di_spalloc (m, m, m, 1, 1) ;    /* create triplet identity matrix */
     for (i = 0 ; i < m ; i++) cs_di_entry (T, i, i, 1) ;
-    Eye = cs_di_compress (T) ;		/* Eye = speye (m) */
+    Eye = cs_di_compress (T) ;             /* Eye = speye (m) */
     cs_di_spfree (T) ;
-    C = cs_di_multiply (A, AT) ;		/* C = A*A' */
+    C = cs_di_multiply (A, AT) ;           /* C = A*A' */
     D = cs_di_add (C, Eye, 1, cs_di_norm (C)) ;   /* D = C + Eye*norm (C,1) */
-    printf ("D:\n") ; cs_di_print (D, 0) ;	/* print D */
-    cs_di_spfree (A) ;			/* clear A AT C D Eye */
+    printf ("D:\n") ; cs_di_print (D, 0) ; /* print D */
+    cs_di_spfree (A) ;                     /* clear A AT C D Eye */
     cs_di_spfree (AT) ;
     cs_di_spfree (C) ;
     cs_di_spfree (D) ;
diff --git a/CXSparse/Demo/cs_dl_demo.c b/CXSparse/Demo/cs_dl_demo.c
index 3037366..aee938b 100644
--- a/CXSparse/Demo/cs_dl_demo.c
+++ b/CXSparse/Demo/cs_dl_demo.c
@@ -1,105 +1,107 @@
 #include "cs_dl_demo.h"
 #include <time.h>
 /* 1 if A is square & upper tri., -1 if square & lower tri., 0 otherwise */
-static UF_long is_sym (cs_dl *A)
+static cs_long_t is_sym (cs_dl *A)
 {
-    UF_long is_upper, is_lower, j, p, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i ;
+    cs_long_t is_upper, is_lower, j, p, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i ;
     if (m != n) return (0) ;
     is_upper = 1 ;
     is_lower = 1 ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    if (Ai [p] > j) is_upper = 0 ;
-	    if (Ai [p] < j) is_lower = 0 ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            if (Ai [p] > j) is_upper = 0 ;
+            if (Ai [p] < j) is_lower = 0 ;
+        }
     }
     return (is_upper ? 1 : (is_lower ? -1 : 0)) ;
 }
 
 /* true for off-diagonal entries */
-static UF_long dropdiag (UF_long i, UF_long j, double aij, void *other) { return (i != j) ;}
+static cs_long_t dropdiag (cs_long_t i, cs_long_t j, double aij, void *other) { return (i != j) ;}
 
 /* C = A + triu(A,1)' */
 static cs_dl *make_sym (cs_dl *A)
 {
     cs_dl *AT, *C ;
-    AT = cs_dl_transpose (A, 1) ;		/* AT = A' */
-    cs_dl_fkeep (AT, &dropdiag, NULL) ;	/* drop diagonal entries from AT */
-    C = cs_dl_add (A, AT, 1, 1) ;		/* C = A+AT */
+    AT = cs_dl_transpose (A, 1) ;          /* AT = A' */
+    cs_dl_fkeep (AT, &dropdiag, NULL) ;    /* drop diagonal entries from AT */
+    C = cs_dl_add (A, AT, 1, 1) ;          /* C = A+AT */
     cs_dl_spfree (AT) ;
     return (C) ;
 }
 
 /* create a right-hand side */
-static void rhs (double *x, double *b, UF_long m)
+static void rhs (double *x, double *b, cs_long_t m)
 {
-    UF_long i ;
+    cs_long_t i ;
     for (i = 0 ; i < m ; i++) b [i] = 1 + ((double) i) / m ;
     for (i = 0 ; i < m ; i++) x [i] = b [i] ;
 }
 
 /* infinity-norm of x */
-static double norm (double *x, UF_long n)
+static double norm (double *x, cs_long_t n)
 {
-    UF_long i ;
+    cs_long_t i ;
     double normx = 0 ;
     for (i = 0 ; i < n ; i++) normx = CS_MAX (normx, fabs (x [i])) ;
     return (normx) ;
 }
 
 /* compute residual, norm(A*x-b,inf) / (norm(A,1)*norm(x,inf) + norm(b,inf)) */
-static void print_resid (UF_long ok, cs_dl *A, double *x, double *b, double *resid)
+static void print_resid (cs_long_t ok, cs_dl *A, double *x, double *b, double *resid)
 {
-    UF_long i, m, n ;
+    cs_long_t i, m, n ;
     if (!ok) { printf ("    (failed)\n") ; return ; }
     m = A->m ; n = A->n ;
     for (i = 0 ; i < m ; i++) resid [i] = -b [i] ;  /* resid = -b */
-    cs_dl_gaxpy (A, x, resid) ;			    /* resid = resid + A*x  */
+    cs_dl_gaxpy (A, x, resid) ;                        /* resid = resid + A*x  */
     printf ("resid: %8.2e\n", norm (resid,m) / ((n == 0) ? 1 :
-	(cs_dl_norm (A) * norm (x,n) + norm (b,m)))) ;
+        (cs_dl_norm (A) * norm (x,n) + norm (b,m)))) ;
 }
 
 static double tic (void) { return (clock () / (double) CLOCKS_PER_SEC) ; }
 static double toc (double t) { double s = tic () ; return (CS_MAX (0, s-t)) ; }
 
-static void print_order (UF_long order)
+static void print_order (cs_long_t order)
 {
     switch (order)
     {
-	case 0: printf ("natural    ") ; break ;
-	case 1: printf ("amd(A+A')  ") ; break ;
-	case 2: printf ("amd(S'*S)  ") ; break ;
-	case 3: printf ("amd(A'*A)  ") ; break ;
+        case 0: printf ("natural    ") ; break ;
+        case 1: printf ("amd(A+A')  ") ; break ;
+        case 2: printf ("amd(S'*S)  ") ; break ;
+        case 3: printf ("amd(A'*A)  ") ; break ;
     }
 }
 
-/* read a problem from a file */
+/* read a problem from a file; use %g for integers to avoid cs_long_t conflicts */
 problem *get_problem (FILE *f, double tol)
 {
     cs_dl *T, *A, *C ;
-    UF_long sym, m, n, mn, nz1, nz2 ;
+    cs_long_t sym, m, n, mn, nz1, nz2 ;
     problem *Prob ;
     Prob = cs_dl_calloc (1, sizeof (problem)) ;
     if (!Prob) return (NULL) ;
-    T = cs_dl_load (f) ;			/* load triplet matrix T from a file */
-    Prob->A = A = cs_dl_compress (T) ;	/* A = compressed-column form of T */
-    cs_dl_spfree (T) ;			/* clear T */
+    T = cs_dl_load (f) ;                   /* load triplet matrix T from a file */
+    Prob->A = A = cs_dl_compress (T) ;     /* A = compressed-column form of T */
+    cs_dl_spfree (T) ;                     /* clear T */
     if (!cs_dl_dupl (A)) return (free_problem (Prob)) ; /* sum up duplicates */
-    Prob->sym = sym = is_sym (A) ;	/* determine if A is symmetric */
+    Prob->sym = sym = is_sym (A) ;      /* determine if A is symmetric */
     m = A->m ; n = A->n ;
     mn = CS_MAX (m,n) ;
     nz1 = A->p [n] ;
-    cs_dl_dropzeros (A) ;			/* drop zero entries */
+    cs_dl_dropzeros (A) ;                  /* drop zero entries */
     nz2 = A->p [n] ;
-    if (tol > 0) cs_dl_droptol (A, tol) ;	/* drop tiny entries (just to test) */
+    if (tol > 0) cs_dl_droptol (A, tol) ;  /* drop tiny entries (just to test) */
     Prob->C = C = sym ? make_sym (A) : A ;  /* C = A + triu(A,1)', or C=A */
     if (!C) return (free_problem (Prob)) ;
-    printf ("\n--- Matrix: %ld-by-%ld, nnz: %ld (sym: %ld: nnz %ld), norm: %8.2e\n",
-	    m, n, A->p [n], sym, sym ? C->p [n] : 0, cs_dl_norm (C)) ;
-    if (nz1 != nz2) printf ("zero entries dropped: %ld\n", nz1 - nz2) ;
-    if (nz2 != A->p [n]) printf ("tiny entries dropped: %ld\n", nz2 - A->p [n]) ;
+    printf ("\n--- Matrix: %g-by-%g, nnz: %g (sym: %g: nnz %g), norm: %8.2e\n",
+            (double) m, (double) n, (double) (A->p [n]), (double) sym,
+            (double) (sym ? C->p [n] : 0), cs_dl_norm (C)) ;
+    if (nz1 != nz2) printf ("zero entries dropped: %g\n", (double) (nz1 - nz2));
+    if (nz2 != A->p [n]) printf ("tiny entries dropped: %g\n",
+            (double) (nz2 - A->p [n])) ;
     Prob->b = cs_dl_malloc (mn, sizeof (double)) ;
     Prob->x = cs_dl_malloc (mn, sizeof (double)) ;
     Prob->resid = cs_dl_malloc (mn, sizeof (double)) ;
@@ -119,66 +121,67 @@ problem *free_problem (problem *Prob)
 }
 
 /* solve a linear system using Cholesky, LU, and QR, with various orderings */
-UF_long demo2 (problem *Prob)
+cs_long_t demo2 (problem *Prob)
 {
     cs_dl *A, *C ;
     double *b, *x, *resid,  t, tol ;
-    UF_long k, m, n, ok, order, nb, ns, *r, *s, *rr, sprank ;
+    cs_long_t k, m, n, ok, order, nb, ns, *r, *s, *rr, sprank ;
     cs_dld *D ;
     if (!Prob) return (0) ;
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     m = A->m ; n = A->n ;
-    tol = Prob->sym ? 0.001 : 1 ;		/* partial pivoting tolerance */
-    D = cs_dl_dmperm (C, 1) ;			/* randomized dmperm analysis */
+    tol = Prob->sym ? 0.001 : 1 ;               /* partial pivoting tolerance */
+    D = cs_dl_dmperm (C, 1) ;                      /* randomized dmperm analysis */
     if (!D) return (0) ;
     nb = D->nb ; r = D->r ; s = D->s ; rr = D->rr ;
     sprank = rr [3] ;
     for (ns = 0, k = 0 ; k < nb ; k++)
     {
-	ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
+        ns += ((r [k+1] == r [k]+1) && (s [k+1] == s [k]+1)) ;
     }
-    printf ("blocks: %ld singletons: %ld structural rank: %ld\n", nb, ns, sprank) ;
+    printf ("blocks: %g singletons: %g structural rank: %g\n",
+        (double) nb, (double) ns, (double) sprank) ;
     cs_dl_dfree (D) ;
-    for (order = 0 ; order <= 3 ; order += 3)	/* natural and amd(A'*A) */
+    for (order = 0 ; order <= 3 ; order += 3)   /* natural and amd(A'*A) */
     {
-	if (!order && m > 1000) continue ;
-	printf ("QR   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_dl_qrsol (order, C, x) ;		/* min norm(Ax-b) with QR */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("QR   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_dl_qrsol (order, C, x) ;           /* min norm(Ax-b) with QR */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
-    if (m != n || sprank < n) return (1) ;	/* return if rect. or singular*/
-    for (order = 0 ; order <= 3 ; order++)	/* try all orderings */
+    if (m != n || sprank < n) return (1) ;      /* return if rect. or singular*/
+    for (order = 0 ; order <= 3 ; order++)      /* try all orderings */
     {
-	if (!order && m > 1000) continue ;
-	printf ("LU   ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_dl_lusol (order, C, x, tol) ;	/* solve Ax=b with LU */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("LU   ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_dl_lusol (order, C, x, tol) ;      /* solve Ax=b with LU */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     if (!Prob->sym) return (1) ;
-    for (order = 0 ; order <= 1 ; order++)	/* natural and amd(A+A') */
+    for (order = 0 ; order <= 1 ; order++)      /* natural and amd(A+A') */
     {
-	if (!order && m > 1000) continue ;
-	printf ("Chol ") ;
-	print_order (order) ;
-	rhs (x, b, m) ;				/* compute right-hand side */
-	t = tic () ;
-	ok = cs_dl_cholsol (order, C, x) ;		/* solve Ax=b with Cholesky */
-	printf ("time: %8.2f ", toc (t)) ;
-	print_resid (ok, C, x, b, resid) ;	/* print residual */
+        if (!order && m > 1000) continue ;
+        printf ("Chol ") ;
+        print_order (order) ;
+        rhs (x, b, m) ;                         /* compute right-hand side */
+        t = tic () ;
+        ok = cs_dl_cholsol (order, C, x) ;         /* solve Ax=b with Cholesky */
+        printf ("time: %8.2f ", toc (t)) ;
+        print_resid (ok, C, x, b, resid) ;      /* print residual */
     }
     return (1) ;
 } 
 
 /* free workspace for demo3 */
-static UF_long done3 (UF_long ok, cs_dls *S, cs_dln *N, double *y, cs_dl *W, cs_dl *E, UF_long *p)
+static cs_long_t done3 (cs_long_t ok, cs_dls *S, cs_dln *N, double *y, cs_dl *W, cs_dl *E, cs_long_t *p)
 {
     cs_dl_sfree (S) ;
     cs_dl_nfree (N) ;
@@ -190,10 +193,10 @@ static UF_long done3 (UF_long ok, cs_dls *S, cs_dln *N, double *y, cs_dl *W, cs_
 }
 
 /* Cholesky update/downdate */
-UF_long demo3 (problem *Prob)
+cs_long_t demo3 (problem *Prob)
 {
     cs_dl *A, *C, *W = NULL, *WW, *WT, *E = NULL, *W2 ;
-    UF_long n, k, *Li, *Lp, *Wi, *Wp, p1, p2, *p = NULL, ok ;
+    cs_long_t n, k, *Li, *Lp, *Wi, *Wp, p1, p2, *p = NULL, ok ;
     double *b, *x, *resid, *y = NULL, *Lx, *Wx, s,  t, t1 ;
     cs_dls *S = NULL ;
     cs_dln *N = NULL ;
@@ -201,26 +204,26 @@ UF_long demo3 (problem *Prob)
     A = Prob->A ; C = Prob->C ; b = Prob->b ; x = Prob->x ; resid = Prob->resid;
     n = A->n ;
     if (!Prob->sym || n == 0) return (1) ;
-    rhs (x, b, n) ;				/* compute right-hand side */
+    rhs (x, b, n) ;                             /* compute right-hand side */
     printf ("\nchol then update/downdate ") ;
     print_order (1) ;
     y = cs_dl_malloc (n, sizeof (double)) ;
     t = tic () ;
-    S = cs_dl_schol (1, C) ;			/* symbolic Chol, amd(A+A') */
+    S = cs_dl_schol (1, C) ;                       /* symbolic Chol, amd(A+A') */
     printf ("\nsymbolic chol time %8.2f\n", toc (t)) ;
     t = tic () ;
-    N = cs_dl_chol (C, S) ;			/* numeric Cholesky */
+    N = cs_dl_chol (C, S) ;                        /* numeric Cholesky */
     printf ("numeric  chol time %8.2f\n", toc (t)) ;
     if (!S || !N || !y) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_dl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_dl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_dl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_dl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_dl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_dl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_dl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_dl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     printf ("solve    chol time %8.2f\n", toc (t)) ;
     printf ("original: ") ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
-    k = n/2 ;					/* construct W  */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
+    k = n/2 ;                                   /* construct W  */
     W = cs_dl_spalloc (n, 1, n, 1, 0) ;
     if (!W) return (done3 (0, S, N, y, W, E, p)) ;
     Lp = N->L->p ; Li = N->L->i ; Lx = N->L->x ;
@@ -232,23 +235,23 @@ UF_long demo3 (problem *Prob)
     srand (1) ;
     for ( ; p1 < Lp [k+1] ; p1++)
     {
-	p2 = p1 - Lp [k] ;
-	Wi [p2] = Li [p1] ;
-	Wx [p2] = s * rand () / ((double) RAND_MAX) ;
+        p2 = p1 - Lp [k] ;
+        Wi [p2] = Li [p1] ;
+        Wx [p2] = s * rand () / ((double) RAND_MAX) ;
     }
     t = tic () ;
-    ok = cs_dl_updown (N->L, +1, W, S->parent) ;	/* update: L*L'+W*W' */
+    ok = cs_dl_updown (N->L, +1, W, S->parent) ;   /* update: L*L'+W*W' */
     t1 = toc (t) ;
     printf ("update:   time: %8.2f\n", t1) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     t = tic () ;
-    cs_dl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_dl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_dl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_dl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_dl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_dl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_dl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_dl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     p = cs_dl_pinv (S->pinv, n) ;
-    W2 = cs_dl_permute (W, p, NULL, 1) ;		/* E = C + (P'W)*(P'W)' */
+    W2 = cs_dl_permute (W, p, NULL, 1) ;           /* E = C + (P'W)*(P'W)' */
     WT = cs_dl_transpose (W2,1) ;
     WW = cs_dl_multiply (W2, WT) ;
     cs_dl_spfree (WT) ;
@@ -257,30 +260,30 @@ UF_long demo3 (problem *Prob)
     cs_dl_spfree (WW) ;
     if (!E || !p) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("update:   time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
-    cs_dl_nfree (N) ;				/* clear N */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
+    cs_dl_nfree (N) ;                              /* clear N */
     t = tic () ;
-    N = cs_dl_chol (E, S) ;			/* numeric Cholesky */
+    N = cs_dl_chol (E, S) ;                        /* numeric Cholesky */
     if (!N) return (done3 (0, S, N, y, W, E, p)) ;
-    cs_dl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_dl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_dl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_dl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_dl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_dl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_dl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_dl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("rechol:   time: %8.2f (incl solve) ", t) ;
-    print_resid (1, E, x, b, resid) ;		/* print residual */
+    print_resid (1, E, x, b, resid) ;           /* print residual */
     t = tic () ;
-    ok = cs_dl_updown (N->L, -1, W, S->parent) ;	/* downdate: L*L'-W*W' */
+    ok = cs_dl_updown (N->L, -1, W, S->parent) ;   /* downdate: L*L'-W*W' */
     t1 = toc (t) ;
     if (!ok) return (done3 (0, S, N, y, W, E, p)) ;
     printf ("downdate: time: %8.2f\n", t1) ;
     t = tic () ;
-    cs_dl_ipvec (S->pinv, b, y, n) ;		/* y = P*b */
-    cs_dl_lsolve (N->L, y) ;			/* y = L\y */
-    cs_dl_ltsolve (N->L, y) ;			/* y = L'\y */
-    cs_dl_pvec (S->pinv, y, x, n) ;		/* x = P'*y */
+    cs_dl_ipvec (S->pinv, b, y, n) ;               /* y = P*b */
+    cs_dl_lsolve (N->L, y) ;                       /* y = L\y */
+    cs_dl_ltsolve (N->L, y) ;                      /* y = L'\y */
+    cs_dl_pvec (S->pinv, y, x, n) ;                /* x = P'*y */
     t = toc (t) ;
     printf ("downdate: time: %8.2f (incl solve) ", t1+t) ;
-    print_resid (1, C, x, b, resid) ;		/* print residual */
+    print_resid (1, C, x, b, resid) ;           /* print residual */
     return (done3 (1, S, N, y, W, E, p)) ;
 } 
diff --git a/CXSparse/Demo/cs_dl_demo.h b/CXSparse/Demo/cs_dl_demo.h
index 9539f63..dba2a59 100644
--- a/CXSparse/Demo/cs_dl_demo.h
+++ b/CXSparse/Demo/cs_dl_demo.h
@@ -3,13 +3,13 @@ typedef struct problem_struct
 {
     cs_dl *A ;
     cs_dl *C ;
-    UF_long sym ;
+    cs_long_t sym ;
     double *x ;
     double *b ;
     double *resid ;
 } problem ;
 
 problem *get_problem (FILE *f, double tol) ;
-UF_long demo2 (problem *Prob) ;
-UF_long demo3 (problem *Prob) ;
+cs_long_t demo2 (problem *Prob) ;
+cs_long_t demo3 (problem *Prob) ;
 problem *free_problem (problem *Prob) ;
diff --git a/CXSparse/Demo/cs_dl_demo1.c b/CXSparse/Demo/cs_dl_demo1.c
index 8a55e45..51894d5 100644
--- a/CXSparse/Demo/cs_dl_demo1.c
+++ b/CXSparse/Demo/cs_dl_demo1.c
@@ -2,23 +2,23 @@
 int main (void)
 {
     cs_dl *T, *A, *Eye, *AT, *C, *D ;
-    UF_long i, m ;
-    T = cs_dl_load (stdin) ;		/* load triplet matrix T from stdin */
-    printf ("T:\n") ; cs_dl_print (T, 0) ;	/* print T */
-    A = cs_dl_compress (T) ;		/* A = compressed-column form of T */
-    printf ("A:\n") ; cs_dl_print (A, 0) ;	/* print A */
-    cs_dl_spfree (T) ;			/* clear T */
-    AT = cs_dl_transpose (A, 1) ;		/* AT = A' */
+    cs_long_t i, m ;
+    T = cs_dl_load (stdin) ;               /* load triplet matrix T from stdin */
+    printf ("T:\n") ; cs_dl_print (T, 0) ; /* print T */
+    A = cs_dl_compress (T) ;               /* A = compressed-column form of T */
+    printf ("A:\n") ; cs_dl_print (A, 0) ; /* print A */
+    cs_dl_spfree (T) ;                     /* clear T */
+    AT = cs_dl_transpose (A, 1) ;          /* AT = A' */
     printf ("AT:\n") ; cs_dl_print (AT, 0) ; /* print AT */
-    m = A ? A->m : 0 ;			/* m = # of rows of A */
-    T = cs_dl_spalloc (m, m, m, 1, 1) ;	/* create triplet identity matrix */
+    m = A ? A->m : 0 ;                  /* m = # of rows of A */
+    T = cs_dl_spalloc (m, m, m, 1, 1) ;    /* create triplet identity matrix */
     for (i = 0 ; i < m ; i++) cs_dl_entry (T, i, i, 1) ;
-    Eye = cs_dl_compress (T) ;		/* Eye = speye (m) */
+    Eye = cs_dl_compress (T) ;             /* Eye = speye (m) */
     cs_dl_spfree (T) ;
-    C = cs_dl_multiply (A, AT) ;		/* C = A*A' */
+    C = cs_dl_multiply (A, AT) ;           /* C = A*A' */
     D = cs_dl_add (C, Eye, 1, cs_dl_norm (C)) ;   /* D = C + Eye*norm (C,1) */
-    printf ("D:\n") ; cs_dl_print (D, 0) ;	/* print D */
-    cs_dl_spfree (A) ;			/* clear A AT C D Eye */
+    printf ("D:\n") ; cs_dl_print (D, 0) ; /* print D */
+    cs_dl_spfree (A) ;                     /* clear A AT C D Eye */
     cs_dl_spfree (AT) ;
     cs_dl_spfree (C) ;
     cs_dl_spfree (D) ;
diff --git a/CXSparse/Demo/cs_idemo.c b/CXSparse/Demo/cs_idemo.c
index d2f962b..fce26d0 100644
--- a/CXSparse/Demo/cs_idemo.c
+++ b/CXSparse/Demo/cs_idemo.c
@@ -7,39 +7,39 @@ int main (void)
 
     printf ("\n--- cs_idemo, size of CS_INT: %d\n", (int) sizeof (CS_INT)) ;
 
-    T = cs_ci_load (stdin) ;		/* load a complex triplet matrix, T */
+    T = cs_ci_load (stdin) ;            /* load a complex triplet matrix, T */
     printf ("\nT:\n") ;
     cs_ci_print (T, 0) ;
 
-    Treal = cs_i_real (T, 1) ;		/* Treal = real part of T */
+    Treal = cs_i_real (T, 1) ;          /* Treal = real part of T */
     printf ("\nTreal:\n") ;
     cs_di_print (Treal, 0) ;
 
-    Timag = cs_i_real (T, 0) ;		/* Treal = imaginary part of T */
+    Timag = cs_i_real (T, 0) ;          /* Treal = imaginary part of T */
     printf ("\nTimag:\n") ;
     cs_di_print (Timag, 0) ;
 
-    A = cs_ci_compress (T) ;		/* A = compressed-column form of T */
+    A = cs_ci_compress (T) ;            /* A = compressed-column form of T */
     printf ("\nA:\n") ;
     cs_ci_print (A, 0) ;
 
-    C1 = cs_i_real (A, 1) ;		/* C1 = real (A) */
+    C1 = cs_i_real (A, 1) ;             /* C1 = real (A) */
     printf ("\nC1 = real(A):\n") ;
     cs_di_print (C1, 0) ;
 
-    C2 = cs_i_real (A, 0) ;		/* C2 = imag (A) */
+    C2 = cs_i_real (A, 0) ;             /* C2 = imag (A) */
     printf ("\nC2 = imag(A):\n") ;
     cs_di_print (C2, 0) ;
 
-    A1 = cs_i_complex (C1, 1) ;		/* A1 = complex version of C1 */
+    A1 = cs_i_complex (C1, 1) ;         /* A1 = complex version of C1 */
     printf ("\nA1:\n") ;
     cs_ci_print (A1, 0) ;
 
-    A2 = cs_i_complex (C2, 0) ;		/* A2 = complex version of C2 (imag.) */
+    A2 = cs_i_complex (C2, 0) ;         /* A2 = complex version of C2 (imag.) */
     printf ("\nA2:\n") ;
     cs_ci_print (A2, 0) ;
 
-    B = cs_ci_add (A1, A2, 1., -1.) ;	/* B = A1 - A2 */
+    B = cs_ci_add (A1, A2, 1., -1.) ;   /* B = A1 - A2 */
     printf ("\nB = conj(A):\n") ;
     cs_ci_print (B, 0) ;
 
diff --git a/CXSparse/Demo/cs_ldemo.c b/CXSparse/Demo/cs_ldemo.c
index 5c09795..9fbfec5 100644
--- a/CXSparse/Demo/cs_ldemo.c
+++ b/CXSparse/Demo/cs_ldemo.c
@@ -1,5 +1,5 @@
 #include "cs.h"
-/* test real/complex conversion routines (int version) */
+/* test real/complex conversion routines (cs_long_t version) */
 int main (void)
 {
     cs_cl *T, *A, *A1, *A2, *B ;
@@ -7,39 +7,39 @@ int main (void)
 
     printf ("\n--- cs_ldemo, size of CS_INT: %d\n", (int) sizeof (CS_INT)) ;
 
-    T = cs_cl_load (stdin) ;		/* load a complex triplet matrix, T */
+    T = cs_cl_load (stdin) ;            /* load a complex triplet matrix, T */
     printf ("\nT:\n") ;
     cs_cl_print (T, 0) ;
 
-    Treal = cs_l_real (T, 1) ;		/* Treal = real part of T */
+    Treal = cs_l_real (T, 1) ;          /* Treal = real part of T */
     printf ("\nTreal:\n") ;
     cs_dl_print (Treal, 0) ;
 
-    Timag = cs_l_real (T, 0) ;		/* Treal = imaginary part of T */
+    Timag = cs_l_real (T, 0) ;          /* Treal = imaginary part of T */
     printf ("\nTimag:\n") ;
     cs_dl_print (Timag, 0) ;
 
-    A = cs_cl_compress (T) ;		/* A = compressed-column form of T */
+    A = cs_cl_compress (T) ;            /* A = compressed-column form of T */
     printf ("\nA:\n") ;
     cs_cl_print (A, 0) ;
 
-    C1 = cs_l_real (A, 1) ;		/* C1 = real (A) */
+    C1 = cs_l_real (A, 1) ;             /* C1 = real (A) */
     printf ("\nC1 = real(A):\n") ;
     cs_dl_print (C1, 0) ;
 
-    C2 = cs_l_real (A, 0) ;		/* C2 = imag (A) */
+    C2 = cs_l_real (A, 0) ;             /* C2 = imag (A) */
     printf ("\nC2 = imag(A):\n") ;
     cs_dl_print (C2, 0) ;
 
-    A1 = cs_l_complex (C1, 1) ;		/* A1 = complex version of C1 */
+    A1 = cs_l_complex (C1, 1) ;         /* A1 = complex version of C1 */
     printf ("\nA1:\n") ;
     cs_cl_print (A1, 0) ;
 
-    A2 = cs_l_complex (C2, 0) ;		/* A2 = complex version of C2 (imag.) */
+    A2 = cs_l_complex (C2, 0) ;         /* A2 = complex version of C2 (imag.) */
     printf ("\nA2:\n") ;
     cs_cl_print (A2, 0) ;
 
-    B = cs_cl_add (A1, A2, 1., -1.) ;	/* B = A1 - A2 */
+    B = cs_cl_add (A1, A2, 1., -1.) ;   /* B = A1 - A2 */
     printf ("\nB = conj(A):\n") ;
     cs_cl_print (B, 0) ;
 
diff --git a/CXSparse/Doc/ChangeLog b/CXSparse/Doc/ChangeLog
index ea1e3d0..bd56fcc 100644
--- a/CXSparse/Doc/ChangeLog
+++ b/CXSparse/Doc/ChangeLog
@@ -1,20 +1,77 @@
+Oct 10, 2014: version 3.1.4
+
+    modified cs_make.m.  No change to C code except version number.
+
+Mar 26, 2014: version 3.1.3
+
+    * minor update to UFget
+
+Apr 16, 2013: verison 3.1.2
+
+    * removed a useless line from cs_sqr.c (no integer overflow can
+        occur in S->lnz, S->unz at that point)
+
+Jun 20, 2012: verison 3.1.1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 3.1.0
+
+    * minor changes to enable the creation of CXSparse 3.1.0
+
+Dec 7, 2011: version 3.0.2
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * minor fix to MATLAB cs_install.m
+
+Jan 18, 2010: version 3.0.0
+
+    * changed "int" to "csi", which is normally "ptrdiff_t".  This way,
+        CSparse can be used on a 64-bit platform (and in 64-bit MATLAB
+        in particular), without the need to use CXSparse.  If you wish
+        to use "int", simply edit CSparse/Include/cs.h and change the
+        definition of csi, or compile with -Dcsi=int.
+
+Jan 25, 2011: version 2.2.5
+
+    * minor fix to "make install"
+    * minor change to cs_util.c, typecast return (cs_free (...))
+    * minor fixes to UFget: help file, UFsettings.txt
+
+Nov 30, 2009: version 2.2.4
+
+    * added "make install" and "make uninstall"
+    * minor change to cs_make.m
+
+Jan 20, 2009, v2.2.3
+
+    * all tabs expanded to 8 spaces (except for Makefiles)
+    * example corrected in cs_gaxpy.m
+    * minor change to cs_sparse to allow for i,j,x to be either
+        row or column vectors (or any mixture)
+
+Sept 8, 2008, v2.2.2
+
+    * minor change to cs_make.m, to change "/" to filesep ("/" on Unix, "\"
+        on Windows), to handle limitations in some Windows compilers
+
 Nov 1, 2007, v2.2.1
 
     * very minor change to Include/cs.h:  Changed name of 2nd argument of
-	cs_permute, to match the code.  This has no affect on the code itself,
-	since the type ("int *") is unchanged.  It's just a documentation issue.
+        cs_permute, to match the code.  This has no affect on the code itself,
+        since the type ("int *") is unchanged.  It's just a documentation issue.
 
     * minor lint cleanup in mexFunctions
 
 Mar 31, 2007, v2.2.0
 
     * few changes to primary Source/ files.  Changes mostly affect MATLAB
-	interface.
+        interface.
 
     * Source/cs_house.c: correction to comment
 
     * Souce/cs_updown.c: whitespace changed to reflect change in CXSparse,
-	no impact at all on CSparse itself.
+        no impact at all on CSparse itself.
 
     * Doc/, Lib/ and Include/ directories created.
 
@@ -25,7 +82,7 @@ Mar 31, 2007, v2.2.0
     * correction to help comments in cs_dmperm.m, cs_qr.m, cs_scc2.m, cs_scc.m
 
     * if complex matrix passed to CSparse in MATLAB, error message 
-	suggests using CXSparse instead
+        suggests using CXSparse instead
 
     * minor performance fix to cs_sparse_mex.c
 
@@ -50,7 +107,7 @@ Dec 12, 2006, v2.0.7
 Dec 6, 2006, v2.0.6
 
     * Update to UFget.  Now relies on the MATLAB urlwrite function instead of
-	my own Java code.
+        my own Java code.
 
 Nov 2006, v2.0.5
 
@@ -59,23 +116,23 @@ Nov 2006, v2.0.5
     * No changes to C Source code, except for version number and date.
 
     * Added two test matrices: ibm32a and ibm32b.  ibm32a is the Harwell/
-	Boeing matrix ibm32, but with the last column removed.  ibm32b
-	is the transpose of ibm32a.  With optimization enabled (-O),
-	2 lines in cs_maxtrans.c are not tested; these matrices correct
-	that problem.
+        Boeing matrix ibm32, but with the last column removed.  ibm32b
+        is the transpose of ibm32a.  With optimization enabled (-O),
+        2 lines in cs_maxtrans.c are not tested; these matrices correct
+        that problem.
 
     * Fixed UFget.  Earlier version could not download matrices larger than
-	32MB.
+        32MB.
 
     * Modified UFget/UFweb, to reflect changes in the UF Sparse Matrix
-	Collection.
+        Collection.
 
     * Added ccspy.m and cs_scc2.m MATLAB functions
 
     * Added examples to help info in each *.m MATLAB file
 
-    * modified cs_dmspy to speed up the plotting of large matrices with many	
-	singletons
+    * modified cs_dmspy to speed up the plotting of large matrices with many    
+        singletons
 
     * minor change to cspy: now draws a box around the matrix.
 
@@ -84,13 +141,13 @@ Nov 2006, v2.0.5
 Oct 13, 2006, v2.0.4
 
     * minor modification to cs_updown.c.  "n" was incorrectly declared "double".
-	It should be "int".  This was safe, just a little confusing (n was only
-	used in an argument to cs_malloc, and is thus typecast).
+        It should be "int".  This was safe, just a little confusing (n was only
+        used in an argument to cs_malloc, and is thus typecast).
 
 Sept 28, 2006, v2.0.3
 
     * minor modifications to MATLAB interface, to allow CSparse to be used
-	in MATLAB 6.5.
+        in MATLAB 6.5.
 
     * added examples to m-files, other minor m-file cleanup.
 
@@ -101,105 +158,105 @@ Aug 23, 2006: v2.0.2
     * change to cs_updown mexFunction, to handle multiple rank updates
 
     * symbolic links removed from Tcov/ directory in the distribution.
-	They are now created by Tcov/Makefile as needed.  This makes the
-	zip files cleaner.  Tcov/*test.c test files renamed.
+        They are now created by Tcov/Makefile as needed.  This makes the
+        zip files cleaner.  Tcov/*test.c test files renamed.
 
 July 19, 2006:
 
     * minor fix to cs_must_compile.m and cs_make.m, to allow CSparse to be
-	compiled in MATLAB 6.5 with cs_make.
+        compiled in MATLAB 6.5 with cs_make.
 
     * minor fix to cspy for complex matrices (imaginary part was ignored).
 
     * no change to version number or date, since there are no changes that
-	affect the appearance of CSparse in the book ("Direct Methods for
-	Sparse Linear Systems", SIAM, 2006).
+        affect the appearance of CSparse in the book ("Direct Methods for
+        Sparse Linear Systems", SIAM, 2006).
 
 June 24, 2006:
 
     * minor typos in comments corrected.  No change in code itself,
-	and no change in version number or date.
+        and no change in version number or date.
 
 May 27, 2006, v2.0.1: (this version is printed in the book)
 
     * minor bug fix.  cs_util.c modified, so that cs_sprealloc (T,0) works
-	properly for a triplet matrix T (setting T->nzmax equal to T->nz).
-	The line in v2.0.0:
+        properly for a triplet matrix T (setting T->nzmax equal to T->nz).
+        The line in v2.0.0:
 
-	    nzmax = (nzmax <= 0) ? (A->p [A->n]) : nzmax ;
+            nzmax = (nzmax <= 0) ? (A->p [A->n]) : nzmax ;
 
-	changes to the following in v2.0.1:
+        changes to the following in v2.0.1:
 
-	    if (nzmax <= 0) nzmax = (CS_CSC (A)) ? (A->p [A->n]) : A->nz ;
+            if (nzmax <= 0) nzmax = (CS_CSC (A)) ? (A->p [A->n]) : A->nz ;
 
     * minor typographical changes arising from the editting of the book.
 
 Apr 12, 2006, v2.0.0:
 
     * random permutation option added to cs_maxtrans and cs_dmperm, to help
-	avoid rare cases where the O(|A|n) time complexity is reached in
-	practice (GHS_indef/boyd2 in the UF sparse matrix collection, for
-	example).  New cs_randperm function added.
+        avoid rare cases where the O(|A|n) time complexity is reached in
+        practice (GHS_indef/boyd2 in the UF sparse matrix collection, for
+        example).  New cs_randperm function added.
 
 Apr 10, 2006:
 
     * stylistic changes for the book (except for the bug fix):
 
     * "int order" parameter of cs_amd, cs_lusol, cs_cholsol, cs_qrsol, cs_sqr,
-	cs_schol changed.  Now 0 means no ordering, 1 is A+A', 2 is S*S', and
-	3 is A*A'.  In v1.2 and earlier, "order" took on a value ranging from
-	-1 to 2.  "int n" parameter rearranged for cs_ipvec, cs_pvec, cs_post
-	(int n moved to the end).  cs_triplet renamed cs_compress.
-
-	To ensure that these changes are propagated into user code that calls
-	CSparse, the "order" parameter has been placed as the first parameter
-	in all these routines.  Your compiler will complain (gcc will halt) if
-	you upgrade from v1.2 to v2.0 without changing your code.  This is much
-	better than a silent error in which you get the wrong ordering by
-	mistake (with a huge penalty in run-time performance and no compiler
-	warnings).
-
-	New syntax (v2.0 and later):
-	----------------------------
-
-	    order = 0: natural ordering
-	    order = 1: amd (A+A')
-	    order = 2: amd (S'*S), where S=A except dense rows dropped
-	    order = 3: amd (A'*A)
-
-	    int cs_cholsol (int order, const cs *A, double *b) ;
-	    int cs_lusol (int order, const cs *A, double *b, double tol) ;
-	    int cs_qrsol (int order, const cs *A, double *b) ;
-	    int *cs_amd (int order, const cs *A) ;
-	    css *cs_schol (int order, const cs *A) ;
-	    css *cs_sqr (int order, const cs *A, int qr) ;
-
-	    int *cs_post (const int *parent, int n) ;
-	    int cs_ipvec (const int *p, const double *b, double *x, int n) ;
-	    int cs_pvec (const int *p, const double *b, double *x, int n) ;
-
-	    cs *cs_compress (const cs *T) ;
-
-	Old syntax (v1.2 and earlier):
-	------------------------------
-
-	    order = -1: natural ordering
-	    order = 0: amd (A+A')
-	    order = 1: amd (S'*S), where S=A except dense rows dropped
-	    order = 2: amd (A'*A)
-
-	    int cs_cholsol (const cs *A, double *b, int order) ;
-	    int cs_lusol (const cs *A, double *b, int order, double tol) ;
-	    int cs_qrsol (const cs *A, double *b, int order) ;
-	    int *cs_amd (const cs *A, int order) ;
-	    css *cs_schol (const cs *A, int order) ;
-	    css *cs_sqr (const cs *A, int order, int qr) ;
-
-	    int *cs_post (int n, const int *parent) ;
-	    int cs_ipvec (int n, const int *p, const double *b, double *x) ;
-	    int cs_pvec (int n, const int *p, const double *b, double *x) ;
-
-	    cs *cs_triplet (const cs *T) ;
+        cs_schol changed.  Now 0 means no ordering, 1 is A+A', 2 is S*S', and
+        3 is A*A'.  In v1.2 and earlier, "order" took on a value ranging from
+        -1 to 2.  "int n" parameter rearranged for cs_ipvec, cs_pvec, cs_post
+        (int n moved to the end).  cs_triplet renamed cs_compress.
+
+        To ensure that these changes are propagated into user code that calls
+        CSparse, the "order" parameter has been placed as the first parameter
+        in all these routines.  Your compiler will complain (gcc will halt) if
+        you upgrade from v1.2 to v2.0 without changing your code.  This is much
+        better than a silent error in which you get the wrong ordering by
+        mistake (with a huge penalty in run-time performance and no compiler
+        warnings).
+
+        New syntax (v2.0 and later):
+        ----------------------------
+
+            order = 0: natural ordering
+            order = 1: amd (A+A')
+            order = 2: amd (S'*S), where S=A except dense rows dropped
+            order = 3: amd (A'*A)
+
+            int cs_cholsol (int order, const cs *A, double *b) ;
+            int cs_lusol (int order, const cs *A, double *b, double tol) ;
+            int cs_qrsol (int order, const cs *A, double *b) ;
+            int *cs_amd (int order, const cs *A) ;
+            css *cs_schol (int order, const cs *A) ;
+            css *cs_sqr (int order, const cs *A, int qr) ;
+
+            int *cs_post (const int *parent, int n) ;
+            int cs_ipvec (const int *p, const double *b, double *x, int n) ;
+            int cs_pvec (const int *p, const double *b, double *x, int n) ;
+
+            cs *cs_compress (const cs *T) ;
+
+        Old syntax (v1.2 and earlier):
+        ------------------------------
+
+            order = -1: natural ordering
+            order = 0: amd (A+A')
+            order = 1: amd (S'*S), where S=A except dense rows dropped
+            order = 2: amd (A'*A)
+
+            int cs_cholsol (const cs *A, double *b, int order) ;
+            int cs_lusol (const cs *A, double *b, int order, double tol) ;
+            int cs_qrsol (const cs *A, double *b, int order) ;
+            int *cs_amd (const cs *A, int order) ;
+            css *cs_schol (const cs *A, int order) ;
+            css *cs_sqr (const cs *A, int order, int qr) ;
+
+            int *cs_post (int n, const int *parent) ;
+            int cs_ipvec (int n, const int *p, const double *b, double *x) ;
+            int cs_pvec (int n, const int *p, const double *b, double *x) ;
+
+            cs *cs_triplet (const cs *T) ;
 
     * CS_OVERFLOW macro removed (removed from cs_malloc.c; not needed).
 
@@ -210,7 +267,7 @@ Apr 10, 2006:
     * Pinv and Q components of css struct changed to pinv and q.
 
     * CS_CSC and CS_TRIPLET macros added, to clarify which CSparse functions
-	accept cs matrices in compressed column form, triplet form, or both.
+        accept cs matrices in compressed column form, triplet form, or both.
 
     * check for negative row/column indices added to cs_entry.
 
@@ -219,33 +276,33 @@ Apr 10, 2006:
     * call to cs_sprealloc added to cs_fkeep.
 
     * bug fixes in cs_counts and cs_amd (memory leak under rare out-of-memory
-	conditions).
+        conditions).
 
 Mar 15, 2006:
 
     * cs_scc modified so that the row and columns of each component are put in
-	their natural order.  cs_dmperm modified so that columns of each block
-	(instead of rows) are placed in their natural order.
+        their natural order.  cs_dmperm modified so that columns of each block
+        (instead of rows) are placed in their natural order.
 
     * cs_splsolve renamed cs_spsolve, generalized to handle both Lx=b and
-	Ux=b, and non-unit diagonal, and placed in its own file (cs_spsolve.c;
-	it was a static function in cs_lu.c).  cs_lsolve_mex.c and
-	cs_splsolve_mex.c merged (the latter was removed).  cs_spsolve.c file
-	added
+        Ux=b, and non-unit diagonal, and placed in its own file (cs_spsolve.c;
+        it was a static function in cs_lu.c).  cs_lsolve_mex.c and
+        cs_splsolve_mex.c merged (the latter was removed).  cs_spsolve.c file
+        added
 
     * cs_dmspy changed, so that block borders line up better with the matrix.
 
 Mar 6, 2006:
 
     * Makefile modified so that the Tcov tests (which may not be portable)
-	are not compiled and run by the default "make" in the CSparse directory.
-	To compile everything, including the Tcov tests, use "make all".
-	Trivial change to cs.h.
+        are not compiled and run by the default "make" in the CSparse directory.
+        To compile everything, including the Tcov tests, use "make all".
+        Trivial change to cs.h.
 
 Feb 27, 2006:
 
     * cs_reach, cs_dfs, cs_splsolve, cs_lu, and cs_scc changed to remove O(n)
-	initialized workspace.
+        initialized workspace.
     * cs_reach and cs_splsolve now user-callable (were static in cs_lu.c).
 
 Feb 20, 2006:
diff --git a/CXSparse/Doc/License.txt b/CXSparse/Doc/License.txt
index 9fbb144..df6f425 100644
--- a/CXSparse/Doc/License.txt
+++ b/CXSparse/Doc/License.txt
@@ -1,6 +1,6 @@
 CXSparse: a Concise Sparse matrix package - Extended.
 Copyright (c) 2006, Timothy A. Davis.
-http://www.cise.ufl.edu/research/sparse/CSparse
+http://www.suitesparse.com
 
 --------------------------------------------------------------------------------
 
diff --git a/CXSparse/Doc/lesser.txt b/CXSparse/Doc/lesser.txt
index 8add30a..783bd5e 100644
--- a/CXSparse/Doc/lesser.txt
+++ b/CXSparse/Doc/lesser.txt
@@ -1,5 +1,5 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
 
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
      51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
@@ -10,7 +10,7 @@
  as the successor of the GNU Library Public License, version 2, hence
  the version number 2.1.]
 
-			    Preamble
+                            Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -112,7 +112,7 @@ modification follow.  Pay close attention to the difference between a
 former contains code derived from the library, whereas the latter must
 be combined with the library in order to run.
 

-		  GNU LESSER GENERAL PUBLIC LICENSE
+                  GNU LESSER GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License Agreement applies to any software library or other
@@ -432,7 +432,7 @@ decision will be guided by the two goals of preserving the free status
 of all derivatives of our free software and of promoting the sharing
 and reuse of software generally.
 
-			    NO WARRANTY
+                            NO WARRANTY
 
   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
@@ -455,7 +455,7 @@ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+                     END OF TERMS AND CONDITIONS
 

            How to Apply These Terms to Your New Libraries
 
diff --git a/CXSparse/Include/cs.h b/CXSparse/Include/cs.h
index a511d35..ffc6531 100644
--- a/CXSparse/Include/cs.h
+++ b/CXSparse/Include/cs.h
@@ -22,15 +22,17 @@ extern "C" {
 #endif
 #endif
 
-#define CS_VER 2		    /* CXSparse Version 2.2.1 */
-#define CS_SUBVER 2
-#define CS_SUBSUB 1
-#define CS_DATE "Nov 1, 2007"	    /* CXSparse release date */
-#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2007"
+#define CS_VER 3                    /* CXSparse Version */
+#define CS_SUBVER 1
+#define CS_SUBSUB 4
+#define CS_DATE "Oct 10, 2014"       /* CXSparse release date */
+#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2014"
 #define CXSPARSE
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
+#define cs_long_t       SuiteSparse_long
+#define cs_long_t_id    SuiteSparse_long_id
+#define cs_long_t_max   SuiteSparse_long_max
 
 /* -------------------------------------------------------------------------- */
 /* double/int version of CXSparse */
@@ -40,13 +42,13 @@ extern "C" {
 
 typedef struct cs_di_sparse  /* matrix in compressed-column or triplet form */
 {
-    int nzmax ;	    /* maximum number of entries */
-    int m ;	    /* number of rows */
-    int n ;	    /* number of columns */
-    int *p ;	    /* column pointers (size n+1) or col indices (size nzmax) */
-    int *i ;	    /* row indices, size nzmax */
-    double *x ;	    /* numerical values, size nzmax */
-    int nz ;	    /* # of entries in triplet matrix, -1 for compressed-col */
+    int nzmax ;     /* maximum number of entries */
+    int m ;         /* number of rows */
+    int n ;         /* number of columns */
+    int *p ;        /* column pointers (size n+1) or col indices (size nzmax) */
+    int *i ;        /* row indices, size nzmax */
+    double *x ;     /* numerical values, size nzmax */
+    int nz ;        /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_di ;
 
 cs_di *cs_di_add (const cs_di *A, const cs_di *B, double alpha, double beta) ;
@@ -76,31 +78,31 @@ void *cs_di_malloc (int n, size_t size) ;
 
 typedef struct cs_di_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    int *pinv ;	    /* inverse row perm. for QR, fill red. perm for Chol */
-    int *q ;	    /* fill-reducing column permutation for LU and QR */
+    int *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    int *q ;        /* fill-reducing column permutation for LU and QR */
     int *parent ;   /* elimination tree for Cholesky and QR */
-    int *cp ;	    /* column pointers for Cholesky, row counts for QR */
+    int *cp ;       /* column pointers for Cholesky, row counts for QR */
     int *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
-    int m2 ;	    /* # of rows for QR, after adding fictitious rows */
+    int m2 ;        /* # of rows for QR, after adding fictitious rows */
     double lnz ;    /* # entries in L for LU or Cholesky; in V for QR */
     double unz ;    /* # entries in U for LU; in R for QR */
 } cs_dis ;
 
 typedef struct cs_di_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_di *L ;	    /* L for LU and Cholesky, V for QR */
-    cs_di *U ;	    /* U for LU, r for QR, not used for Cholesky */
-    int *pinv ;	    /* partial pivoting for LU */
-    double *B ;	    /* beta [0..n-1] for QR */
+    cs_di *L ;      /* L for LU and Cholesky, V for QR */
+    cs_di *U ;      /* U for LU, r for QR, not used for Cholesky */
+    int *pinv ;     /* partial pivoting for LU */
+    double *B ;     /* beta [0..n-1] for QR */
 } cs_din ;
 
 typedef struct cs_di_dmperm_results    /* cs_di_dmperm or cs_di_scc output */
 {
-    int *p ;	    /* size m, row permutation */
-    int *q ;	    /* size n, column permutation */
-    int *r ;	    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    int *s ;	    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    int nb ;	    /* # of blocks in fine dmperm decomposition */
+    int *p ;        /* size m, row permutation */
+    int *q ;        /* size n, column permutation */
+    int *r ;        /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    int *s ;        /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    int nb ;        /* # of blocks in fine dmperm decomposition */
     int rr [5] ;    /* coarse row decomposition */
     int cc [5] ;    /* coarse column decomposition */
 } cs_did ;
@@ -167,101 +169,101 @@ cs_did *cs_di_ddone (cs_did *D, cs_di *C, void *w, int ok) ;
 
 
 /* -------------------------------------------------------------------------- */
-/* double/UF_long version of CXSparse */
+/* double/cs_long_t version of CXSparse */
 /* -------------------------------------------------------------------------- */
 
 /* --- primary CSparse routines and data structures ------------------------- */
 
 typedef struct cs_dl_sparse  /* matrix in compressed-column or triplet form */
 {
-    UF_long nzmax ; /* maximum number of entries */
-    UF_long m ;	    /* number of rows */
-    UF_long n ;	    /* number of columns */
-    UF_long *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
-    UF_long *i ;    /* row indices, size nzmax */
-    double *x ;	    /* numerical values, size nzmax */
-    UF_long nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
+    cs_long_t nzmax ; /* maximum number of entries */
+    cs_long_t m ;     /* number of rows */
+    cs_long_t n ;     /* number of columns */
+    cs_long_t *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
+    cs_long_t *i ;    /* row indices, size nzmax */
+    double *x ;     /* numerical values, size nzmax */
+    cs_long_t nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_dl ;
 
 cs_dl *cs_dl_add (const cs_dl *A, const cs_dl *B, double alpha, double beta) ;
-UF_long cs_dl_cholsol (UF_long order, const cs_dl *A, double *b) ;
-UF_long cs_dl_dupl (cs_dl *A) ;
-UF_long cs_dl_entry (cs_dl *T, UF_long i, UF_long j, double x) ;
-UF_long cs_dl_lusol (UF_long order, const cs_dl *A, double *b, double tol) ;
-UF_long cs_dl_gaxpy (const cs_dl *A, const double *x, double *y) ;
+cs_long_t cs_dl_cholsol (cs_long_t order, const cs_dl *A, double *b) ;
+cs_long_t cs_dl_dupl (cs_dl *A) ;
+cs_long_t cs_dl_entry (cs_dl *T, cs_long_t i, cs_long_t j, double x) ;
+cs_long_t cs_dl_lusol (cs_long_t order, const cs_dl *A, double *b, double tol) ;
+cs_long_t cs_dl_gaxpy (const cs_dl *A, const double *x, double *y) ;
 cs_dl *cs_dl_multiply (const cs_dl *A, const cs_dl *B) ;
-UF_long cs_dl_qrsol (UF_long order, const cs_dl *A, double *b) ;
-cs_dl *cs_dl_transpose (const cs_dl *A, UF_long values) ;
+cs_long_t cs_dl_qrsol (cs_long_t order, const cs_dl *A, double *b) ;
+cs_dl *cs_dl_transpose (const cs_dl *A, cs_long_t values) ;
 cs_dl *cs_dl_compress (const cs_dl *T) ;
 double cs_dl_norm (const cs_dl *A) ;
-UF_long cs_dl_print (const cs_dl *A, UF_long brief) ;
+cs_long_t cs_dl_print (const cs_dl *A, cs_long_t brief) ;
 cs_dl *cs_dl_load (FILE *f) ;
 
 /* utilities */
-void *cs_dl_calloc (UF_long n, size_t size) ;
+void *cs_dl_calloc (cs_long_t n, size_t size) ;
 void *cs_dl_free (void *p) ;
-void *cs_dl_realloc (void *p, UF_long n, size_t size, UF_long *ok) ;
-cs_dl *cs_dl_spalloc (UF_long m, UF_long n, UF_long nzmax, UF_long values,
-    UF_long t) ;
+void *cs_dl_realloc (void *p, cs_long_t n, size_t size, cs_long_t *ok) ;
+cs_dl *cs_dl_spalloc (cs_long_t m, cs_long_t n, cs_long_t nzmax, cs_long_t values,
+    cs_long_t t) ;
 cs_dl *cs_dl_spfree (cs_dl *A) ;
-UF_long cs_dl_sprealloc (cs_dl *A, UF_long nzmax) ;
-void *cs_dl_malloc (UF_long n, size_t size) ;
+cs_long_t cs_dl_sprealloc (cs_dl *A, cs_long_t nzmax) ;
+void *cs_dl_malloc (cs_long_t n, size_t size) ;
 
 /* --- secondary CSparse routines and data structures ----------------------- */
 
 typedef struct cs_dl_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    UF_long *pinv ;	/* inverse row perm. for QR, fill red. perm for Chol */
-    UF_long *q ;	/* fill-reducing column permutation for LU and QR */
-    UF_long *parent ;	/* elimination tree for Cholesky and QR */
-    UF_long *cp ;	/* column pointers for Cholesky, row counts for QR */
-    UF_long *leftmost ;	/* leftmost[i] = min(find(A(i,:))), for QR */
-    UF_long m2 ;	/* # of rows for QR, after adding fictitious rows */
-    double lnz ;	/* # entries in L for LU or Cholesky; in V for QR */
-    double unz ;	/* # entries in U for LU; in R for QR */
+    cs_long_t *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    cs_long_t *q ;        /* fill-reducing column permutation for LU and QR */
+    cs_long_t *parent ;   /* elimination tree for Cholesky and QR */
+    cs_long_t *cp ;       /* column pointers for Cholesky, row counts for QR */
+    cs_long_t *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
+    cs_long_t m2 ;        /* # of rows for QR, after adding fictitious rows */
+    double lnz ;        /* # entries in L for LU or Cholesky; in V for QR */
+    double unz ;        /* # entries in U for LU; in R for QR */
 } cs_dls ;
 
 typedef struct cs_dl_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_dl *L ;	    /* L for LU and Cholesky, V for QR */
-    cs_dl *U ;	    /* U for LU, r for QR, not used for Cholesky */
-    UF_long *pinv ; /* partial pivoting for LU */
-    double *B ;	    /* beta [0..n-1] for QR */
+    cs_dl *L ;      /* L for LU and Cholesky, V for QR */
+    cs_dl *U ;      /* U for LU, r for QR, not used for Cholesky */
+    cs_long_t *pinv ; /* partial pivoting for LU */
+    double *B ;     /* beta [0..n-1] for QR */
 } cs_dln ;
 
 typedef struct cs_dl_dmperm_results    /* cs_dl_dmperm or cs_dl_scc output */
 {
-    UF_long *p ;    /* size m, row permutation */
-    UF_long *q ;    /* size n, column permutation */
-    UF_long *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    UF_long *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    UF_long nb ;    /* # of blocks in fine dmperm decomposition */
-    UF_long rr [5] ;	/* coarse row decomposition */
-    UF_long cc [5] ;	/* coarse column decomposition */
+    cs_long_t *p ;    /* size m, row permutation */
+    cs_long_t *q ;    /* size n, column permutation */
+    cs_long_t *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    cs_long_t *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    cs_long_t nb ;    /* # of blocks in fine dmperm decomposition */
+    cs_long_t rr [5] ;    /* coarse row decomposition */
+    cs_long_t cc [5] ;    /* coarse column decomposition */
 } cs_dld ;
 
-UF_long *cs_dl_amd (UF_long order, const cs_dl *A) ;
+cs_long_t *cs_dl_amd (cs_long_t order, const cs_dl *A) ;
 cs_dln *cs_dl_chol (const cs_dl *A, const cs_dls *S) ;
-cs_dld *cs_dl_dmperm (const cs_dl *A, UF_long seed) ;
-UF_long cs_dl_droptol (cs_dl *A, double tol) ;
-UF_long cs_dl_dropzeros (cs_dl *A) ;
-UF_long cs_dl_happly (const cs_dl *V, UF_long i, double beta, double *x) ;
-UF_long cs_dl_ipvec (const UF_long *p, const double *b, double *x, UF_long n) ;
-UF_long cs_dl_lsolve (const cs_dl *L, double *x) ;
-UF_long cs_dl_ltsolve (const cs_dl *L, double *x) ;
+cs_dld *cs_dl_dmperm (const cs_dl *A, cs_long_t seed) ;
+cs_long_t cs_dl_droptol (cs_dl *A, double tol) ;
+cs_long_t cs_dl_dropzeros (cs_dl *A) ;
+cs_long_t cs_dl_happly (const cs_dl *V, cs_long_t i, double beta, double *x) ;
+cs_long_t cs_dl_ipvec (const cs_long_t *p, const double *b, double *x, cs_long_t n) ;
+cs_long_t cs_dl_lsolve (const cs_dl *L, double *x) ;
+cs_long_t cs_dl_ltsolve (const cs_dl *L, double *x) ;
 cs_dln *cs_dl_lu (const cs_dl *A, const cs_dls *S, double tol) ;
-cs_dl *cs_dl_permute (const cs_dl *A, const UF_long *pinv, const UF_long *q,
-    UF_long values) ;
-UF_long *cs_dl_pinv (const UF_long *p, UF_long n) ;
-UF_long cs_dl_pvec (const UF_long *p, const double *b, double *x, UF_long n) ;
+cs_dl *cs_dl_permute (const cs_dl *A, const cs_long_t *pinv, const cs_long_t *q,
+    cs_long_t values) ;
+cs_long_t *cs_dl_pinv (const cs_long_t *p, cs_long_t n) ;
+cs_long_t cs_dl_pvec (const cs_long_t *p, const double *b, double *x, cs_long_t n) ;
 cs_dln *cs_dl_qr (const cs_dl *A, const cs_dls *S) ;
-cs_dls *cs_dl_schol (UF_long order, const cs_dl *A) ;
-cs_dls *cs_dl_sqr (UF_long order, const cs_dl *A, UF_long qr) ;
-cs_dl *cs_dl_symperm (const cs_dl *A, const UF_long *pinv, UF_long values) ;
-UF_long cs_dl_usolve (const cs_dl *U, double *x) ;
-UF_long cs_dl_utsolve (const cs_dl *U, double *x) ;
-UF_long cs_dl_updown (cs_dl *L, UF_long sigma, const cs_dl *C,
-    const UF_long *parent) ;
+cs_dls *cs_dl_schol (cs_long_t order, const cs_dl *A) ;
+cs_dls *cs_dl_sqr (cs_long_t order, const cs_dl *A, cs_long_t qr) ;
+cs_dl *cs_dl_symperm (const cs_dl *A, const cs_long_t *pinv, cs_long_t values) ;
+cs_long_t cs_dl_usolve (const cs_dl *U, double *x) ;
+cs_long_t cs_dl_utsolve (const cs_dl *U, double *x) ;
+cs_long_t cs_dl_updown (cs_dl *L, cs_long_t sigma, const cs_dl *C,
+    const cs_long_t *parent) ;
 
 /* utilities */
 cs_dls *cs_dl_sfree (cs_dls *S) ;
@@ -270,38 +272,38 @@ cs_dld *cs_dl_dfree (cs_dld *D) ;
 
 /* --- tertiary CSparse routines -------------------------------------------- */
 
-UF_long *cs_dl_counts (const cs_dl *A, const UF_long *parent,
-    const UF_long *post, UF_long ata) ;
-double cs_dl_cumsum (UF_long *p, UF_long *c, UF_long n) ;
-UF_long cs_dl_dfs (UF_long j, cs_dl *G, UF_long top, UF_long *xi,
-    UF_long *pstack, const UF_long *pinv) ;
-UF_long *cs_dl_etree (const cs_dl *A, UF_long ata) ;
-UF_long cs_dl_fkeep (cs_dl *A,
-    UF_long (*fkeep) (UF_long, UF_long, double, void *), void *other) ;
-double cs_dl_house (double *x, double *beta, UF_long n) ;
-UF_long *cs_dl_maxtrans (const cs_dl *A, UF_long seed) ;
-UF_long *cs_dl_post (const UF_long *parent, UF_long n) ;
+cs_long_t *cs_dl_counts (const cs_dl *A, const cs_long_t *parent,
+    const cs_long_t *post, cs_long_t ata) ;
+double cs_dl_cumsum (cs_long_t *p, cs_long_t *c, cs_long_t n) ;
+cs_long_t cs_dl_dfs (cs_long_t j, cs_dl *G, cs_long_t top, cs_long_t *xi,
+    cs_long_t *pstack, const cs_long_t *pinv) ;
+cs_long_t *cs_dl_etree (const cs_dl *A, cs_long_t ata) ;
+cs_long_t cs_dl_fkeep (cs_dl *A,
+    cs_long_t (*fkeep) (cs_long_t, cs_long_t, double, void *), void *other) ;
+double cs_dl_house (double *x, double *beta, cs_long_t n) ;
+cs_long_t *cs_dl_maxtrans (const cs_dl *A, cs_long_t seed) ;
+cs_long_t *cs_dl_post (const cs_long_t *parent, cs_long_t n) ;
 cs_dld *cs_dl_scc (cs_dl *A) ;
-UF_long cs_dl_scatter (const cs_dl *A, UF_long j, double beta, UF_long *w,
-    double *x, UF_long mark,cs_dl *C, UF_long nz) ;
-UF_long cs_dl_tdfs (UF_long j, UF_long k, UF_long *head, const UF_long *next,
-    UF_long *post, UF_long *stack) ;
-UF_long cs_dl_leaf (UF_long i, UF_long j, const UF_long *first,
-    UF_long *maxfirst, UF_long *prevleaf, UF_long *ancestor, UF_long *jleaf) ;
-UF_long cs_dl_reach (cs_dl *G, const cs_dl *B, UF_long k, UF_long *xi,
-    const UF_long *pinv) ;
-UF_long cs_dl_spsolve (cs_dl *L, const cs_dl *B, UF_long k, UF_long *xi,
-    double *x, const UF_long *pinv, UF_long lo) ;
-UF_long cs_dl_ereach (const cs_dl *A, UF_long k, const UF_long *parent,
-    UF_long *s, UF_long *w) ;
-UF_long *cs_dl_randperm (UF_long n, UF_long seed) ;
+cs_long_t cs_dl_scatter (const cs_dl *A, cs_long_t j, double beta, cs_long_t *w,
+    double *x, cs_long_t mark,cs_dl *C, cs_long_t nz) ;
+cs_long_t cs_dl_tdfs (cs_long_t j, cs_long_t k, cs_long_t *head, const cs_long_t *next,
+    cs_long_t *post, cs_long_t *stack) ;
+cs_long_t cs_dl_leaf (cs_long_t i, cs_long_t j, const cs_long_t *first,
+    cs_long_t *maxfirst, cs_long_t *prevleaf, cs_long_t *ancestor, cs_long_t *jleaf) ;
+cs_long_t cs_dl_reach (cs_dl *G, const cs_dl *B, cs_long_t k, cs_long_t *xi,
+    const cs_long_t *pinv) ;
+cs_long_t cs_dl_spsolve (cs_dl *L, const cs_dl *B, cs_long_t k, cs_long_t *xi,
+    double *x, const cs_long_t *pinv, cs_long_t lo) ;
+cs_long_t cs_dl_ereach (const cs_dl *A, cs_long_t k, const cs_long_t *parent,
+    cs_long_t *s, cs_long_t *w) ;
+cs_long_t *cs_dl_randperm (cs_long_t n, cs_long_t seed) ;
 
 /* utilities */
-cs_dld *cs_dl_dalloc (UF_long m, UF_long n) ;
-cs_dl *cs_dl_done (cs_dl *C, void *w, void *x, UF_long ok) ;
-UF_long *cs_dl_idone (UF_long *p, cs_dl *C, void *w, UF_long ok) ;
-cs_dln *cs_dl_ndone (cs_dln *N, cs_dl *C, void *w, void *x, UF_long ok) ;
-cs_dld *cs_dl_ddone (cs_dld *D, cs_dl *C, void *w, UF_long ok) ;
+cs_dld *cs_dl_dalloc (cs_long_t m, cs_long_t n) ;
+cs_dl *cs_dl_done (cs_dl *C, void *w, void *x, cs_long_t ok) ;
+cs_long_t *cs_dl_idone (cs_long_t *p, cs_dl *C, void *w, cs_long_t ok) ;
+cs_dln *cs_dl_ndone (cs_dln *N, cs_dl *C, void *w, void *x, cs_long_t ok) ;
+cs_dld *cs_dl_ddone (cs_dld *D, cs_dl *C, void *w, cs_long_t ok) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -314,13 +316,13 @@ cs_dld *cs_dl_ddone (cs_dld *D, cs_dl *C, void *w, UF_long ok) ;
 
 typedef struct cs_ci_sparse  /* matrix in compressed-column or triplet form */
 {
-    int nzmax ;	    /* maximum number of entries */
-    int m ;	    /* number of rows */
-    int n ;	    /* number of columns */
-    int *p ;	    /* column pointers (size n+1) or col indices (size nzmax) */
-    int *i ;	    /* row indices, size nzmax */
+    int nzmax ;     /* maximum number of entries */
+    int m ;         /* number of rows */
+    int n ;         /* number of columns */
+    int *p ;        /* column pointers (size n+1) or col indices (size nzmax) */
+    int *i ;        /* row indices, size nzmax */
     cs_complex_t *x ;    /* numerical values, size nzmax */
-    int nz ;	    /* # of entries in triplet matrix, -1 for compressed-col */
+    int nz ;        /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_ci ;
 
 cs_ci *cs_ci_add (const cs_ci *A, const cs_ci *B, cs_complex_t alpha,
@@ -351,31 +353,31 @@ void *cs_ci_malloc (int n, size_t size) ;
 
 typedef struct cs_ci_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    int *pinv ;	    /* inverse row perm. for QR, fill red. perm for Chol */
-    int *q ;	    /* fill-reducing column permutation for LU and QR */
+    int *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    int *q ;        /* fill-reducing column permutation for LU and QR */
     int *parent ;   /* elimination tree for Cholesky and QR */
-    int *cp ;	    /* column pointers for Cholesky, row counts for QR */
+    int *cp ;       /* column pointers for Cholesky, row counts for QR */
     int *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
-    int m2 ;	    /* # of rows for QR, after adding fictitious rows */
+    int m2 ;        /* # of rows for QR, after adding fictitious rows */
     double lnz ;    /* # entries in L for LU or Cholesky; in V for QR */
     double unz ;    /* # entries in U for LU; in R for QR */
 } cs_cis ;
 
 typedef struct cs_ci_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_ci *L ;	    /* L for LU and Cholesky, V for QR */
-    cs_ci *U ;	    /* U for LU, r for QR, not used for Cholesky */
-    int *pinv ;	    /* partial pivoting for LU */
-    double *B ;	    /* beta [0..n-1] for QR */
+    cs_ci *L ;      /* L for LU and Cholesky, V for QR */
+    cs_ci *U ;      /* U for LU, r for QR, not used for Cholesky */
+    int *pinv ;     /* partial pivoting for LU */
+    double *B ;     /* beta [0..n-1] for QR */
 } cs_cin ;
 
 typedef struct cs_ci_dmperm_results    /* cs_ci_dmperm or cs_ci_scc output */
 {
-    int *p ;	    /* size m, row permutation */
-    int *q ;	    /* size n, column permutation */
-    int *r ;	    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    int *s ;	    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    int nb ;	    /* # of blocks in fine dmperm decomposition */
+    int *p ;        /* size m, row permutation */
+    int *q ;        /* size n, column permutation */
+    int *r ;        /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    int *s ;        /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    int nb ;        /* # of blocks in fine dmperm decomposition */
     int rr [5] ;    /* coarse row decomposition */
     int cc [5] ;    /* coarse column decomposition */
 } cs_cid ;
@@ -442,105 +444,105 @@ cs_cid *cs_ci_ddone (cs_cid *D, cs_ci *C, void *w, int ok) ;
 
 
 /* -------------------------------------------------------------------------- */
-/* complex/UF_long version of CXSparse */
+/* complex/cs_long_t version of CXSparse */
 /* -------------------------------------------------------------------------- */
 
 /* --- primary CSparse routines and data structures ------------------------- */
 
 typedef struct cs_cl_sparse  /* matrix in compressed-column or triplet form */
 {
-    UF_long nzmax ; /* maximum number of entries */
-    UF_long m ;	    /* number of rows */
-    UF_long n ;	    /* number of columns */
-    UF_long *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
-    UF_long *i ;    /* row indices, size nzmax */
+    cs_long_t nzmax ; /* maximum number of entries */
+    cs_long_t m ;     /* number of rows */
+    cs_long_t n ;     /* number of columns */
+    cs_long_t *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
+    cs_long_t *i ;    /* row indices, size nzmax */
     cs_complex_t *x ;    /* numerical values, size nzmax */
-    UF_long nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
+    cs_long_t nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_cl ;
 
 cs_cl *cs_cl_add (const cs_cl *A, const cs_cl *B, cs_complex_t alpha,
     cs_complex_t beta) ;
-UF_long cs_cl_cholsol (UF_long order, const cs_cl *A, cs_complex_t *b) ;
-UF_long cs_cl_dupl (cs_cl *A) ;
-UF_long cs_cl_entry (cs_cl *T, UF_long i, UF_long j, cs_complex_t x) ;
-UF_long cs_cl_lusol (UF_long order, const cs_cl *A, cs_complex_t *b,
+cs_long_t cs_cl_cholsol (cs_long_t order, const cs_cl *A, cs_complex_t *b) ;
+cs_long_t cs_cl_dupl (cs_cl *A) ;
+cs_long_t cs_cl_entry (cs_cl *T, cs_long_t i, cs_long_t j, cs_complex_t x) ;
+cs_long_t cs_cl_lusol (cs_long_t order, const cs_cl *A, cs_complex_t *b,
     double tol) ;
-UF_long cs_cl_gaxpy (const cs_cl *A, const cs_complex_t *x, cs_complex_t *y) ;
+cs_long_t cs_cl_gaxpy (const cs_cl *A, const cs_complex_t *x, cs_complex_t *y) ;
 cs_cl *cs_cl_multiply (const cs_cl *A, const cs_cl *B) ;
-UF_long cs_cl_qrsol (UF_long order, const cs_cl *A, cs_complex_t *b) ;
-cs_cl *cs_cl_transpose (const cs_cl *A, UF_long values) ;
+cs_long_t cs_cl_qrsol (cs_long_t order, const cs_cl *A, cs_complex_t *b) ;
+cs_cl *cs_cl_transpose (const cs_cl *A, cs_long_t values) ;
 cs_cl *cs_cl_compress (const cs_cl *T) ;
 double cs_cl_norm (const cs_cl *A) ;
-UF_long cs_cl_print (const cs_cl *A, UF_long brief) ;
+cs_long_t cs_cl_print (const cs_cl *A, cs_long_t brief) ;
 cs_cl *cs_cl_load (FILE *f) ;
 
 /* utilities */
-void *cs_cl_calloc (UF_long n, size_t size) ;
+void *cs_cl_calloc (cs_long_t n, size_t size) ;
 void *cs_cl_free (void *p) ;
-void *cs_cl_realloc (void *p, UF_long n, size_t size, UF_long *ok) ;
-cs_cl *cs_cl_spalloc (UF_long m, UF_long n, UF_long nzmax, UF_long values,
-    UF_long t) ;
+void *cs_cl_realloc (void *p, cs_long_t n, size_t size, cs_long_t *ok) ;
+cs_cl *cs_cl_spalloc (cs_long_t m, cs_long_t n, cs_long_t nzmax, cs_long_t values,
+    cs_long_t t) ;
 cs_cl *cs_cl_spfree (cs_cl *A) ;
-UF_long cs_cl_sprealloc (cs_cl *A, UF_long nzmax) ;
-void *cs_cl_malloc (UF_long n, size_t size) ;
+cs_long_t cs_cl_sprealloc (cs_cl *A, cs_long_t nzmax) ;
+void *cs_cl_malloc (cs_long_t n, size_t size) ;
 
 /* --- secondary CSparse routines and data structures ----------------------- */
 
 typedef struct cs_cl_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    UF_long *pinv ;	/* inverse row perm. for QR, fill red. perm for Chol */
-    UF_long *q ;	/* fill-reducing column permutation for LU and QR */
-    UF_long *parent ;	/* elimination tree for Cholesky and QR */
-    UF_long *cp ;	/* column pointers for Cholesky, row counts for QR */
-    UF_long *leftmost ;	/* leftmost[i] = min(find(A(i,:))), for QR */
-    UF_long m2 ;	/* # of rows for QR, after adding fictitious rows */
-    double lnz ;	/* # entries in L for LU or Cholesky; in V for QR */
-    double unz ;	/* # entries in U for LU; in R for QR */
+    cs_long_t *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    cs_long_t *q ;        /* fill-reducing column permutation for LU and QR */
+    cs_long_t *parent ;   /* elimination tree for Cholesky and QR */
+    cs_long_t *cp ;       /* column pointers for Cholesky, row counts for QR */
+    cs_long_t *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
+    cs_long_t m2 ;        /* # of rows for QR, after adding fictitious rows */
+    double lnz ;        /* # entries in L for LU or Cholesky; in V for QR */
+    double unz ;        /* # entries in U for LU; in R for QR */
 } cs_cls ;
 
 typedef struct cs_cl_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_cl *L ;		/* L for LU and Cholesky, V for QR */
-    cs_cl *U ;		/* U for LU, r for QR, not used for Cholesky */
-    UF_long *pinv ;	/* partial pivoting for LU */
-    double *B ;		/* beta [0..n-1] for QR */
+    cs_cl *L ;          /* L for LU and Cholesky, V for QR */
+    cs_cl *U ;          /* U for LU, r for QR, not used for Cholesky */
+    cs_long_t *pinv ;     /* partial pivoting for LU */
+    double *B ;         /* beta [0..n-1] for QR */
 } cs_cln ;
 
 typedef struct cs_cl_dmperm_results    /* cs_cl_dmperm or cs_cl_scc output */
 {
-    UF_long *p ;    /* size m, row permutation */
-    UF_long *q ;    /* size n, column permutation */
-    UF_long *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    UF_long *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    UF_long nb ;    /* # of blocks in fine dmperm decomposition */
-    UF_long rr [5] ;   /* coarse row decomposition */
-    UF_long cc [5] ;   /* coarse column decomposition */
+    cs_long_t *p ;    /* size m, row permutation */
+    cs_long_t *q ;    /* size n, column permutation */
+    cs_long_t *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    cs_long_t *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    cs_long_t nb ;    /* # of blocks in fine dmperm decomposition */
+    cs_long_t rr [5] ;   /* coarse row decomposition */
+    cs_long_t cc [5] ;   /* coarse column decomposition */
 } cs_cld ;
 
-UF_long *cs_cl_amd (UF_long order, const cs_cl *A) ;
+cs_long_t *cs_cl_amd (cs_long_t order, const cs_cl *A) ;
 cs_cln *cs_cl_chol (const cs_cl *A, const cs_cls *S) ;
-cs_cld *cs_cl_dmperm (const cs_cl *A, UF_long seed) ;
-UF_long cs_cl_droptol (cs_cl *A, double tol) ;
-UF_long cs_cl_dropzeros (cs_cl *A) ;
-UF_long cs_cl_happly (const cs_cl *V, UF_long i, double beta, cs_complex_t *x) ;
-UF_long cs_cl_ipvec (const UF_long *p, const cs_complex_t *b,
-    cs_complex_t *x, UF_long n) ;
-UF_long cs_cl_lsolve (const cs_cl *L, cs_complex_t *x) ;
-UF_long cs_cl_ltsolve (const cs_cl *L, cs_complex_t *x) ;
+cs_cld *cs_cl_dmperm (const cs_cl *A, cs_long_t seed) ;
+cs_long_t cs_cl_droptol (cs_cl *A, double tol) ;
+cs_long_t cs_cl_dropzeros (cs_cl *A) ;
+cs_long_t cs_cl_happly (const cs_cl *V, cs_long_t i, double beta, cs_complex_t *x) ;
+cs_long_t cs_cl_ipvec (const cs_long_t *p, const cs_complex_t *b,
+    cs_complex_t *x, cs_long_t n) ;
+cs_long_t cs_cl_lsolve (const cs_cl *L, cs_complex_t *x) ;
+cs_long_t cs_cl_ltsolve (const cs_cl *L, cs_complex_t *x) ;
 cs_cln *cs_cl_lu (const cs_cl *A, const cs_cls *S, double tol) ;
-cs_cl *cs_cl_permute (const cs_cl *A, const UF_long *pinv, const UF_long *q,
-    UF_long values) ;
-UF_long *cs_cl_pinv (const UF_long *p, UF_long n) ;
-UF_long cs_cl_pvec (const UF_long *p, const cs_complex_t *b,
-    cs_complex_t *x, UF_long n) ;
+cs_cl *cs_cl_permute (const cs_cl *A, const cs_long_t *pinv, const cs_long_t *q,
+    cs_long_t values) ;
+cs_long_t *cs_cl_pinv (const cs_long_t *p, cs_long_t n) ;
+cs_long_t cs_cl_pvec (const cs_long_t *p, const cs_complex_t *b,
+    cs_complex_t *x, cs_long_t n) ;
 cs_cln *cs_cl_qr (const cs_cl *A, const cs_cls *S) ;
-cs_cls *cs_cl_schol (UF_long order, const cs_cl *A) ;
-cs_cls *cs_cl_sqr (UF_long order, const cs_cl *A, UF_long qr) ;
-cs_cl *cs_cl_symperm (const cs_cl *A, const UF_long *pinv, UF_long values) ;
-UF_long cs_cl_usolve (const cs_cl *U, cs_complex_t *x) ;
-UF_long cs_cl_utsolve (const cs_cl *U, cs_complex_t *x) ;
-UF_long cs_cl_updown (cs_cl *L, UF_long sigma, const cs_cl *C,
-    const UF_long *parent) ;
+cs_cls *cs_cl_schol (cs_long_t order, const cs_cl *A) ;
+cs_cls *cs_cl_sqr (cs_long_t order, const cs_cl *A, cs_long_t qr) ;
+cs_cl *cs_cl_symperm (const cs_cl *A, const cs_long_t *pinv, cs_long_t values) ;
+cs_long_t cs_cl_usolve (const cs_cl *U, cs_complex_t *x) ;
+cs_long_t cs_cl_utsolve (const cs_cl *U, cs_complex_t *x) ;
+cs_long_t cs_cl_updown (cs_cl *L, cs_long_t sigma, const cs_cl *C,
+    const cs_long_t *parent) ;
 
 /* utilities */
 cs_cls *cs_cl_sfree (cs_cls *S) ;
@@ -549,38 +551,38 @@ cs_cld *cs_cl_dfree (cs_cld *D) ;
 
 /* --- tertiary CSparse routines -------------------------------------------- */
 
-UF_long *cs_cl_counts (const cs_cl *A, const UF_long *parent,
-    const UF_long *post, UF_long ata) ;
-double cs_cl_cumsum (UF_long *p, UF_long *c, UF_long n) ;
-UF_long cs_cl_dfs (UF_long j, cs_cl *G, UF_long top, UF_long *xi,
-    UF_long *pstack, const UF_long *pinv) ;
-UF_long *cs_cl_etree (const cs_cl *A, UF_long ata) ;
-UF_long cs_cl_fkeep (cs_cl *A,
-    UF_long (*fkeep) (UF_long, UF_long, cs_complex_t, void *), void *other) ;
-cs_complex_t cs_cl_house (cs_complex_t *x, double *beta, UF_long n) ;
-UF_long *cs_cl_maxtrans (const cs_cl *A, UF_long seed) ;
-UF_long *cs_cl_post (const UF_long *parent, UF_long n) ;
+cs_long_t *cs_cl_counts (const cs_cl *A, const cs_long_t *parent,
+    const cs_long_t *post, cs_long_t ata) ;
+double cs_cl_cumsum (cs_long_t *p, cs_long_t *c, cs_long_t n) ;
+cs_long_t cs_cl_dfs (cs_long_t j, cs_cl *G, cs_long_t top, cs_long_t *xi,
+    cs_long_t *pstack, const cs_long_t *pinv) ;
+cs_long_t *cs_cl_etree (const cs_cl *A, cs_long_t ata) ;
+cs_long_t cs_cl_fkeep (cs_cl *A,
+    cs_long_t (*fkeep) (cs_long_t, cs_long_t, cs_complex_t, void *), void *other) ;
+cs_complex_t cs_cl_house (cs_complex_t *x, double *beta, cs_long_t n) ;
+cs_long_t *cs_cl_maxtrans (const cs_cl *A, cs_long_t seed) ;
+cs_long_t *cs_cl_post (const cs_long_t *parent, cs_long_t n) ;
 cs_cld *cs_cl_scc (cs_cl *A) ;
-UF_long cs_cl_scatter (const cs_cl *A, UF_long j, cs_complex_t beta,
-    UF_long *w, cs_complex_t *x, UF_long mark,cs_cl *C, UF_long nz) ;
-UF_long cs_cl_tdfs (UF_long j, UF_long k, UF_long *head, const UF_long *next,
-    UF_long *post, UF_long *stack) ;
-UF_long cs_cl_leaf (UF_long i, UF_long j, const UF_long *first,
-    UF_long *maxfirst, UF_long *prevleaf, UF_long *ancestor, UF_long *jleaf) ;
-UF_long cs_cl_reach (cs_cl *G, const cs_cl *B, UF_long k, UF_long *xi,
-    const UF_long *pinv) ;
-UF_long cs_cl_spsolve (cs_cl *L, const cs_cl *B, UF_long k, UF_long *xi, 
-    cs_complex_t *x, const UF_long *pinv, UF_long lo) ;
-UF_long cs_cl_ereach (const cs_cl *A, UF_long k, const UF_long *parent,
-    UF_long *s, UF_long *w) ;
-UF_long *cs_cl_randperm (UF_long n, UF_long seed) ;
+cs_long_t cs_cl_scatter (const cs_cl *A, cs_long_t j, cs_complex_t beta,
+    cs_long_t *w, cs_complex_t *x, cs_long_t mark,cs_cl *C, cs_long_t nz) ;
+cs_long_t cs_cl_tdfs (cs_long_t j, cs_long_t k, cs_long_t *head, const cs_long_t *next,
+    cs_long_t *post, cs_long_t *stack) ;
+cs_long_t cs_cl_leaf (cs_long_t i, cs_long_t j, const cs_long_t *first,
+    cs_long_t *maxfirst, cs_long_t *prevleaf, cs_long_t *ancestor, cs_long_t *jleaf) ;
+cs_long_t cs_cl_reach (cs_cl *G, const cs_cl *B, cs_long_t k, cs_long_t *xi,
+    const cs_long_t *pinv) ;
+cs_long_t cs_cl_spsolve (cs_cl *L, const cs_cl *B, cs_long_t k, cs_long_t *xi, 
+    cs_complex_t *x, const cs_long_t *pinv, cs_long_t lo) ;
+cs_long_t cs_cl_ereach (const cs_cl *A, cs_long_t k, const cs_long_t *parent,
+    cs_long_t *s, cs_long_t *w) ;
+cs_long_t *cs_cl_randperm (cs_long_t n, cs_long_t seed) ;
 
 /* utilities */
-cs_cld *cs_cl_dalloc (UF_long m, UF_long n) ;
-cs_cl *cs_cl_done (cs_cl *C, void *w, void *x, UF_long ok) ;
-UF_long *cs_cl_idone (UF_long *p, cs_cl *C, void *w, UF_long ok) ;
-cs_cln *cs_cl_ndone (cs_cln *N, cs_cl *C, void *w, void *x, UF_long ok) ;
-cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, UF_long ok) ;
+cs_cld *cs_cl_dalloc (cs_long_t m, cs_long_t n) ;
+cs_cl *cs_cl_done (cs_cl *C, void *w, void *x, cs_long_t ok) ;
+cs_long_t *cs_cl_idone (cs_long_t *p, cs_cl *C, void *w, cs_long_t ok) ;
+cs_cln *cs_cl_ndone (cs_cln *N, cs_cl *C, void *w, void *x, cs_long_t ok) ;
+cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, cs_long_t ok) ;
 
 #endif
 
@@ -589,9 +591,9 @@ cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, UF_long ok) ;
 /* -------------------------------------------------------------------------- */
 
 #ifdef CS_LONG
-#define CS_INT UF_long
-#define CS_INT_MAX UF_long_max
-#define CS_ID UF_long_id
+#define CS_INT cs_long_t
+#define CS_INT_MAX cs_long_t_max
+#define CS_ID cs_long_t_id
 #ifdef CS_COMPLEX
 #define CS_ENTRY cs_complex_t
 #define CS_NAME(nm) cs_cl ## nm
@@ -726,8 +728,8 @@ cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, UF_long ok) ;
 #ifndef NCOMPLEX
 cs_di *cs_i_real (cs_ci *A, int real) ;
 cs_ci *cs_i_complex (cs_di *A, int real) ;
-cs_dl *cs_l_real (cs_cl *A, UF_long real) ;
-cs_cl *cs_l_complex (cs_dl *A, UF_long real) ;
+cs_dl *cs_l_real (cs_cl *A, cs_long_t real) ;
+cs_cl *cs_l_complex (cs_dl *A, cs_long_t real) ;
 #endif
 
 #ifdef __cplusplus
diff --git a/CXSparse/Lib/Makefile b/CXSparse/Lib/Makefile
index c937956..3c10cf2 100644
--- a/CXSparse/Lib/Makefile
+++ b/CXSparse/Lib/Makefile
@@ -1,10 +1,11 @@
-# Modify the "-O" optimization option for best performance (-O3 on Linux):
-CC = cc
-CFLAGS = -O
-I = -I../../UFconfig -I../Include
+# CC = cc
+# CF = -O
 
-AR = ar cr
-RANLIB = ranlib
+default: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+I = -I../../SuiteSparse_config -I../Include
 
 all: libcxsparse.a
 
@@ -71,28 +72,28 @@ CS = cs_convert.o $(CS_DI_OBJ) $(CS_DL_OBJ) $(CS_CI_OBJ) $(CS_CL_OBJ)
 $(CS): ../Include/cs.h Makefile
 
 cs_convert.o: ../Source/cs_convert.c
-	$(CC) $(CFLAGS) $(I) -c $< -o $@
+	$(CC) $(CF) $(I) -c $< -o $@
 
 %_di.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -c $< -o $@
+	$(CC) $(CF) $(I) -c $< -o $@
 
 %_dl.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -DCS_LONG -c $< -o $@
+	$(CC) $(CF) $(I) -DCS_LONG -c $< -o $@
 
 %_ci.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -DCS_COMPLEX -c $< -o $@
+	$(CC) $(CF) $(I) -DCS_COMPLEX -c $< -o $@
 
 %_cl.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -DCS_LONG -DCS_COMPLEX -c $< -o $@
+	$(CC) $(CF) $(I) -DCS_LONG -DCS_COMPLEX -c $< -o $@
 
 libcxsparse.a: $(CS)
-	$(AR) libcxsparse.a $(CS)
-	$(RANLIB) libcxsparse.a
+	$(ARCHIVE)  libcxsparse.a $(CS)
+	- $(RANLIB) libcxsparse.a
 
 clean:
-	rm -f *.o
+	- $(RM) *.o
 
 purge: distclean
 
 distclean: clean
-	rm -f *.a
+	- $(RM) *.a
diff --git a/CXSparse/MATLAB/CSparse/Contents.m b/CXSparse/MATLAB/CSparse/Contents.m
index 4af6293..36b4df6 100644
--- a/CXSparse/MATLAB/CSparse/Contents.m
+++ b/CXSparse/MATLAB/CSparse/Contents.m
@@ -47,8 +47,7 @@
 % Example:
 %   help cs_add
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 % helper function:
 %   cs_must_compile - return 1 if source code f must be compiled, 0 otherwise
diff --git a/CXSparse/MATLAB/CSparse/Makefile b/CXSparse/MATLAB/CSparse/Makefile
deleted file mode 100644
index 830e630..0000000
--- a/CXSparse/MATLAB/CSparse/Makefile
+++ /dev/null
@@ -1,171 +0,0 @@
-include ../../../UFconfig/UFconfig.mk
-
-MX = $(MEX) -DCS_LONG
-AR = ar cr
-RANLIB = ranlib
-
-I = -I../../Include -I../../../UFconfig
-
-all: mexcsparse.a cs_mex.h
-	$(MX) cs_thumb_mex.c $(I) mexcsparse.a -output cs_thumb
-	$(MX) cs_print_mex.c $(I) mexcsparse.a -output cs_print
-	$(MX) cs_updown_mex.c $(I) mexcsparse.a -output cs_updown
-	$(MX) cs_gaxpy_mex.c $(I) mexcsparse.a -output cs_gaxpy
-	$(MX) cs_transpose_mex.c $(I) mexcsparse.a -output cs_transpose
-	$(MX) cs_sparse_mex.c $(I) mexcsparse.a -output cs_sparse
-	$(MX) cs_multiply_mex.c $(I) mexcsparse.a -output cs_multiply
-	$(MX) cs_add_mex.c $(I) mexcsparse.a -output cs_add
-	$(MX) cs_permute_mex.c $(I) mexcsparse.a -output cs_permute
-	$(MX) cs_symperm_mex.c $(I) mexcsparse.a -output cs_symperm
-	$(MX) cs_lsolve_mex.c $(I) mexcsparse.a -output cs_lsolve
-	$(MX) cs_ltsolve_mex.c $(I) mexcsparse.a -output cs_ltsolve
-	$(MX) cs_usolve_mex.c $(I) mexcsparse.a -output cs_usolve
-	$(MX) cs_utsolve_mex.c $(I) mexcsparse.a -output cs_utsolve
-	$(MX) cs_chol_mex.c $(I) mexcsparse.a -output cs_chol
-	$(MX) cs_etree_mex.c $(I) mexcsparse.a -output cs_etree
-	$(MX) cs_counts_mex.c $(I) mexcsparse.a -output cs_counts
-	$(MX) cs_qr_mex.c $(I) mexcsparse.a -output cs_qr
-	$(MX) cs_amd_mex.c $(I) mexcsparse.a -output cs_amd
-	$(MX) cs_lu_mex.c $(I) mexcsparse.a -output cs_lu
-	$(MX) cs_cholsol_mex.c $(I) mexcsparse.a -output cs_cholsol
-	$(MX) cs_lusol_mex.c $(I) mexcsparse.a -output cs_lusol
-	$(MX) cs_droptol_mex.c $(I) mexcsparse.a -output cs_droptol
-	$(MX) cs_qrsol_mex.c $(I) mexcsparse.a -output cs_qrsol
-	$(MX) cs_dmperm_mex.c $(I) mexcsparse.a -output cs_dmperm
-	$(MX) cs_scc_mex.c $(I) mexcsparse.a -output cs_scc
-	$(MX) cs_sqr_mex.c $(I) mexcsparse.a -output cs_sqr
-	$(MX) cs_randperm_mex.c $(I) mexcsparse.a -output cs_randperm
-
-CSD = cs_mex.o \
-	cs_amd.o \
-	cs_chol.o \
-	cs_counts.o \
-	cs_cumsum.o \
-	cs_fkeep.o \
-	cs_dfs.o \
-	cs_dmperm.o \
-	cs_droptol.o \
-	cs_dropzeros.o \
-	cs_dupl.o \
-	cs_entry.o \
-	cs_etree.o \
-	cs_gaxpy.o \
-	cs_ipvec.o \
-	cs_lsolve.o \
-	cs_ltsolve.o \
-	cs_lu.o \
-	cs_maxtrans.o \
-	cs_util.o \
-	cs_malloc.o \
-	cs_multiply.o \
-	cs_add.o \
-	cs_scatter.o \
-	cs_permute.o \
-	cs_pinv.o \
-	cs_post.o \
-	cs_tdfs.o \
-	cs_pvec.o \
-	cs_qr.o \
-	cs_happly.o \
-	cs_house.o \
-	cs_schol.o \
-	cs_scc.o \
-	cs_sqr.o \
-	cs_symperm.o \
-	cs_transpose.o \
-	cs_compress.o \
-	cs_usolve.o \
-	cs_utsolve.o \
-	cs_cholsol.o \
-	cs_lusol.o \
-	cs_qrsol.o \
-	cs_updown.o \
-	cs_norm.o \
-	cs_print.o \
-	cs_load.o \
-	cs_spsolve.o \
-	cs_reach.o \
-	cs_ereach.o \
-	cs_leaf.o \
-	cs_randperm.o
-
-CSC = \
-	cs_cl_amd.o \
-	cs_cl_chol.o \
-	cs_cl_counts.o \
-	cs_cl_cumsum.o \
-	cs_cl_fkeep.o \
-	cs_cl_dfs.o \
-	cs_cl_dmperm.o \
-	cs_cl_droptol.o \
-	cs_cl_dropzeros.o \
-	cs_cl_dupl.o \
-	cs_cl_entry.o \
-	cs_cl_etree.o \
-	cs_cl_gaxpy.o \
-	cs_cl_ipvec.o \
-	cs_cl_lsolve.o \
-	cs_cl_ltsolve.o \
-	cs_cl_lu.o \
-	cs_cl_maxtrans.o \
-	cs_cl_util.o \
-	cs_cl_malloc.o \
-	cs_cl_multiply.o \
-	cs_cl_add.o \
-	cs_cl_scatter.o \
-	cs_cl_permute.o \
-	cs_cl_pinv.o \
-	cs_cl_post.o \
-	cs_cl_tdfs.o \
-	cs_cl_pvec.o \
-	cs_cl_qr.o \
-	cs_cl_happly.o \
-	cs_cl_house.o \
-	cs_cl_schol.o \
-	cs_cl_scc.o \
-	cs_cl_sqr.o \
-	cs_cl_symperm.o \
-	cs_cl_transpose.o \
-	cs_cl_compress.o \
-	cs_cl_usolve.o \
-	cs_cl_utsolve.o \
-	cs_cl_cholsol.o \
-	cs_cl_lusol.o \
-	cs_cl_qrsol.o \
-	cs_cl_updown.o \
-	cs_cl_norm.o \
-	cs_cl_print.o \
-	cs_cl_load.o \
-	cs_cl_spsolve.o \
-	cs_cl_reach.o \
-	cs_cl_ereach.o \
-	cs_cl_leaf.o \
-	cs_cl_randperm.o
-
-CS = $(CSD) $(CSC)
-
-mexcsparse.a: $(CS)
-	$(AR) mexcsparse.a $(CS)
-	$(RANLIB) mexcsparse.a
-
-$(CS): ../../Include/cs.h
-
-
-cs_mex.o: cs_mex.c cs_mex.h
-	$(MX) -c $(I) $<
-
-cs_cl_%.o: ../../Source/cs_%.c
-	cp -f $< cs_cl_$*.c
-	$(MX) -DCS_COMPLEX -c $(I) cs_cl_$*.c
-
-cs_%.o: ../../Source/cs_%.c
-	$(MX) -c $(I) $<
-
-
-clean:
-	- rm -f *.o
-
-distclean: clean
-	- rm -f *.mex* *.dll *.a cs_cl_*.c
-
-purge: distclean
diff --git a/CXSparse/MATLAB/CSparse/README.txt b/CXSparse/MATLAB/CSparse/README.txt
index e3a5aa1..732f160 100644
--- a/CXSparse/MATLAB/CSparse/README.txt
+++ b/CXSparse/MATLAB/CSparse/README.txt
@@ -1 +1,3 @@
 MATLAB interface for CXSparse.  See Contents.m for details.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse/MATLAB/CSparse/ccspy.m b/CXSparse/MATLAB/CSparse/ccspy.m
index 787eada..f7196dc 100644
--- a/CXSparse/MATLAB/CSparse/ccspy.m
+++ b/CXSparse/MATLAB/CSparse/ccspy.m
@@ -20,8 +20,7 @@ function [p, q, r, s] = ccspy (A, bipartite, res)
 %
 %   See also CSPY, CS_DMPERM, DMPERM, CS_SCC, CS_SCC2, CS_DMSPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (~issparse (A))
     A = sparse (A) ;
diff --git a/CXSparse/MATLAB/CSparse/cs_add.m b/CXSparse/MATLAB/CSparse/cs_add.m
index f85c562..21b4703 100644
--- a/CXSparse/MATLAB/CSparse/cs_add.m
+++ b/CXSparse/MATLAB/CSparse/cs_add.m
@@ -1,4 +1,4 @@
-function C = cs_add (A,B,alpha,beta)					    %#ok
+function C = cs_add (A,B,alpha,beta)                                        %#ok
 %CS_ADD sparse matrix addition.
 %   C = cs_add(A,B,alpha,beta) computes C = alpha*A+beta*B,
 %   where alpha and beta default to 1 if not present.
@@ -11,7 +11,6 @@ function C = cs_add (A,B,alpha,beta)					    %#ok
 %
 %   See also CS_MULTIPLY, CS_GAXPY, PLUS, MINUS.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_add mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_add_mex.c b/CXSparse/MATLAB/CSparse/cs_add_mex.c
index b8f4e70..cbd63a5 100644
--- a/CXSparse/MATLAB/CSparse/cs_add_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_add_mex.c
@@ -7,8 +7,8 @@ static cs_complex_t get_complex (const mxArray *a)
     cs_complex_t s = mxGetScalar (a) ;
     if (mxIsComplex (a))
     {
-	double *z = mxGetPi (a) ;
-	s += I * z [0] ;
+        double *z = mxGetPi (a) ;
+        s += I * z [0] ;
     }
     return (s) ;
 }
@@ -24,44 +24,44 @@ void mexFunction
 {
     if (nargout > 1 || nargin < 2 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: C = cs_add(A,B,alpha,beta)") ;
+        mexErrMsgTxt ("Usage: C = cs_add(A,B,alpha,beta)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1])
-	|| (nargin > 2 && mxIsComplex (pargin [2]))
-	|| (nargin > 3 && mxIsComplex (pargin [3])))
+        || (nargin > 2 && mxIsComplex (pargin [2]))
+        || (nargin > 3 && mxIsComplex (pargin [3])))
     {
 #ifndef NCOMPLEX
-	cs_complex_t alpha, beta ;
-	cs_cl Amatrix, Bmatrix, *A, *B, *C, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	B = cs_cl_mex_get_sparse (&Bmatrix, 0, pargin [1]) ;	/* get B */
-	alpha = (nargin < 3) ? 1 : get_complex (pargin [2]) ;   /* get alpha */
-	beta  = (nargin < 4) ? 1 : get_complex (pargin [3]) ;   /* get beta */
-	C = cs_cl_add (A,B,alpha,beta) ;    /* C = alpha*A + beta *B */
-	cs_cl_dropzeros (C) ;		/* drop zeros */
-	D = cs_cl_transpose (C, 1) ;	/* sort result via double transpose */
-	cs_cl_spfree (C) ;
-	C = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	/* return C */
+        cs_complex_t alpha, beta ;
+        cs_cl Amatrix, Bmatrix, *A, *B, *C, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        B = cs_cl_mex_get_sparse (&Bmatrix, 0, pargin [1]) ;    /* get B */
+        alpha = (nargin < 3) ? 1 : get_complex (pargin [2]) ;   /* get alpha */
+        beta  = (nargin < 4) ? 1 : get_complex (pargin [3]) ;   /* get beta */
+        C = cs_cl_add (A,B,alpha,beta) ;    /* C = alpha*A + beta *B */
+        cs_cl_dropzeros (C) ;           /* drop zeros */
+        D = cs_cl_transpose (C, 1) ;    /* sort result via double transpose */
+        cs_cl_spfree (C) ;
+        C = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;       /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	double alpha, beta ;
-	cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-	B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;    /* get B */
-	alpha = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;   /* get alpha */
-	beta  = (nargin < 4) ? 1 : mxGetScalar (pargin [3]) ;   /* get beta */
-	C = cs_dl_add (A,B,alpha,beta) ;	/* C = alpha*A + beta *B */
-	cs_dl_dropzeros (C) ;		/* drop zeros */
-	D = cs_dl_transpose (C, 1) ;	/* sort result via double transpose */
-	cs_dl_spfree (C) ;
-	C = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;	/* return C */
+        double alpha, beta ;
+        cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
+        B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;    /* get B */
+        alpha = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;   /* get alpha */
+        beta  = (nargin < 4) ? 1 : mxGetScalar (pargin [3]) ;   /* get beta */
+        C = cs_dl_add (A,B,alpha,beta) ;        /* C = alpha*A + beta *B */
+        cs_dl_dropzeros (C) ;           /* drop zeros */
+        D = cs_dl_transpose (C, 1) ;    /* sort result via double transpose */
+        cs_dl_spfree (C) ;
+        C = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;       /* return C */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_amd.m b/CXSparse/MATLAB/CSparse/cs_amd.m
index b8a3ec9..d3b9874 100644
--- a/CXSparse/MATLAB/CSparse/cs_amd.m
+++ b/CXSparse/MATLAB/CSparse/cs_amd.m
@@ -1,4 +1,4 @@
-function p = cs_amd (A,order)						    %#ok
+function p = cs_amd (A,order)                                               %#ok
 %CS_AMD approximate minimum degree ordering.
 %   p = cs_amd(A) finds a minimum degree ordering of A+A'
 %   p = cs_amd(A,order):
@@ -19,7 +19,6 @@ function p = cs_amd (A,order)						    %#ok
 %
 %   See also AMD, COLAMD, SYMAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_amd mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_amd_mex.c b/CXSparse/MATLAB/CSparse/cs_amd_mex.c
index 7d8ff09..3aa14f2 100644
--- a/CXSparse/MATLAB/CSparse/cs_amd_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_amd_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     CS_INT *P, order ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: p = cs_amd(A,order)") ;
+        mexErrMsgTxt ("Usage: p = cs_amd(A,order)") ;
     }
     A = cs_dl_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;    /* get A */
     order = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;   /* get ordering */
     order = CS_MAX (order, 1) ;
     order = CS_MIN (order, 3) ;
-    P = cs_dl_amd (order, A) ;			    /* min. degree ordering */
+    P = cs_dl_amd (order, A) ;                      /* min. degree ordering */
     pargout [0] = cs_dl_mex_put_int (P, A->n, 1, 1) ;  /* return P */
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_chol.m b/CXSparse/MATLAB/CSparse/cs_chol.m
index b31c003..2b4ff9a 100644
--- a/CXSparse/MATLAB/CSparse/cs_chol.m
+++ b/CXSparse/MATLAB/CSparse/cs_chol.m
@@ -1,4 +1,4 @@
-function [L,p] = cs_chol (A,drop)					    %#ok
+function [L,p] = cs_chol (A,drop)                                           %#ok
 %CS_CHOL sparse Cholesky factorization.
 %   L = cs_chol(A) is the same as L = chol(A)', using triu(A).
 %   [L,p] = cs_chol(A) first orders A with p=cs_amd(A), so that L*L' = A(p,p).
@@ -13,7 +13,6 @@ function [L,p] = cs_chol (A,drop)					    %#ok
 %
 %   See also CS_AMD, CS_UPDOWN, CHOL, AMD, SYMAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_chol mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_chol_mex.c b/CXSparse/MATLAB/CSparse/cs_chol_mex.c
index e3b1c5e..4ae63c3 100644
--- a/CXSparse/MATLAB/CSparse/cs_chol_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_chol_mex.c
@@ -6,53 +6,53 @@ void mexFunction (int nargout, mxArray *pargout [ ], int nargin,
     CS_INT order, n, drop, *p ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: [L,p] = cs_chol(A,drop)") ;
+        mexErrMsgTxt ("Usage: [L,p] = cs_chol(A,drop)") ;
     }
     drop = (nargin == 1) ? 1 : mxGetScalar (pargin [1]) ;
-    order = (nargout > 1) ? 1 : 0 ;		    /* determine ordering */
+    order = (nargout > 1) ? 1 : 0 ;                 /* determine ordering */
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A ;
-	cs_cls *S ;
-	cs_cln *N ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_cl_schol (order, A) ;		    /* symbolic Cholesky */
-	N = cs_cl_chol (A, S) ;			    /* numeric Cholesky */
-	if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
-	cs_free (A->x) ;
-	if (drop) cs_cl_dropzeros (N->L) ;	    /* drop zeros if requested*/
-	pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;	    /* return L */
-	if (nargout > 1)
-	{
-	    p = cs_cl_pinv (S->pinv, n) ;	    /* p=pinv' */
-	    pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
-	}
-	cs_cl_nfree (N) ;
-	cs_cl_sfree (S) ;
+        cs_cl Amatrix, *A ;
+        cs_cls *S ;
+        cs_cln *N ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        n = A->n ;
+        S = cs_cl_schol (order, A) ;                /* symbolic Cholesky */
+        N = cs_cl_chol (A, S) ;                     /* numeric Cholesky */
+        if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
+        cs_free (A->x) ;
+        if (drop) cs_cl_dropzeros (N->L) ;          /* drop zeros if requested*/
+        pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;      /* return L */
+        if (nargout > 1)
+        {
+            p = cs_cl_pinv (S->pinv, n) ;           /* p=pinv' */
+            pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
+        }
+        cs_cl_nfree (N) ;
+        cs_cl_sfree (S) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A ;
-	cs_dls *S ;
-	cs_dln *N ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_dl_schol (order, A) ;		    /* symbolic Cholesky */
-	N = cs_dl_chol (A, S) ;			    /* numeric Cholesky */
-	if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
-	if (drop) cs_dl_dropzeros (N->L) ;	    /* drop zeros if requested*/
-	pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ; /* return L */
-	if (nargout > 1)
-	{
-	    p = cs_dl_pinv (S->pinv, n) ;		    /* p=pinv' */
-	    pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
-	}
-	cs_dl_nfree (N) ;
-	cs_dl_sfree (S) ;
+        cs_dl Amatrix, *A ;
+        cs_dls *S ;
+        cs_dln *N ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ; /* get A */
+        n = A->n ;
+        S = cs_dl_schol (order, A) ;                /* symbolic Cholesky */
+        N = cs_dl_chol (A, S) ;                     /* numeric Cholesky */
+        if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
+        if (drop) cs_dl_dropzeros (N->L) ;          /* drop zeros if requested*/
+        pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ; /* return L */
+        if (nargout > 1)
+        {
+            p = cs_dl_pinv (S->pinv, n) ;                   /* p=pinv' */
+            pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
+        }
+        cs_dl_nfree (N) ;
+        cs_dl_sfree (S) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_cholsol.m b/CXSparse/MATLAB/CSparse/cs_cholsol.m
index 7717222..84b6b6e 100644
--- a/CXSparse/MATLAB/CSparse/cs_cholsol.m
+++ b/CXSparse/MATLAB/CSparse/cs_cholsol.m
@@ -1,4 +1,4 @@
-function x = cs_cholsol (A,b,order)					    %#ok
+function x = cs_cholsol (A,b,order)                                         %#ok
 %CS_CHOLSOL solve A*x=b using a sparse Cholesky factorization.
 %   x = cs_cholsol(A,b) computes x = A\b, where A sparse symmetric positive
 %   definite, and b is a full vector.  A 3rd input parameter allows the
@@ -11,7 +11,6 @@ function x = cs_cholsol (A,b,order)					    %#ok
 %
 %   See also CS_CHOL, CS_AMD, CS_LUSOL, CS_QRSOL, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_cholsol mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_cholsol_mex.c b/CXSparse/MATLAB/CSparse/cs_cholsol_mex.c
index 08b9f40..da5ce6c 100644
--- a/CXSparse/MATLAB/CSparse/cs_cholsol_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_cholsol_mex.c
@@ -11,7 +11,7 @@ void mexFunction
     CS_INT order ;
     if (nargout > 1 || nargin < 2 || nargin > 3)
     {
-	mexErrMsgTxt ("Usage: x = cs_cholsol(A,b,order)") ;
+        mexErrMsgTxt ("Usage: x = cs_cholsol(A,b,order)") ;
     }
     order = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
@@ -19,30 +19,30 @@ void mexFunction
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, Amatrix ;
-	cs_complex_t *x ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
-	x = cs_cl_mex_get_double (A->n, pargin [1]) ;		/* x = b */
-	if (!cs_cl_cholsol (order, A, x))			/* x = A\x */
-	{
-	    mexErrMsgTxt ("A not positive definite") ;
-	}
-	cs_free (A->x) ;
-	pargout [0] = cs_cl_mex_put_double (A->n, x) ;	    /* return x */
+        cs_cl *A, Amatrix ;
+        cs_complex_t *x ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        x = cs_cl_mex_get_double (A->n, pargin [1]) ;           /* x = b */
+        if (!cs_cl_cholsol (order, A, x))                       /* x = A\x */
+        {
+            mexErrMsgTxt ("A not positive definite") ;
+        }
+        cs_free (A->x) ;
+        pargout [0] = cs_cl_mex_put_double (A->n, x) ;      /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, Amatrix ;
-	double *x, *b ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
-	b = cs_dl_mex_get_double (A->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;	/* x = b */
-	if (!cs_dl_cholsol (order, A, x))		    /* x = A\x */
-	{
-	    mexErrMsgTxt ("A not positive definite") ;
-	}
+        cs_dl *A, Amatrix ;
+        double *x, *b ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ; /* get A */
+        b = cs_dl_mex_get_double (A->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;    /* x = b */
+        if (!cs_dl_cholsol (order, A, x))                   /* x = A\x */
+        {
+            mexErrMsgTxt ("A not positive definite") ;
+        }
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_counts.m b/CXSparse/MATLAB/CSparse/cs_counts.m
index 6d6a879..e1f4f04 100644
--- a/CXSparse/MATLAB/CSparse/cs_counts.m
+++ b/CXSparse/MATLAB/CSparse/cs_counts.m
@@ -1,4 +1,4 @@
-function c = cs_counts (A,mode)						    %#ok
+function c = cs_counts (A,mode)                                             %#ok
 %CS_COUNTS column counts for sparse Cholesky factor L.
 %   c = cs_counts(A) returns a vector of the column counts of L, for the
 %   Cholesky factorization L*L' = A.  That is, c = sum(spones(chol(A)')),
@@ -13,7 +13,6 @@ function c = cs_counts (A,mode)						    %#ok
 %
 %   See also SYMBFACT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_counts mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_counts_mex.c b/CXSparse/MATLAB/CSparse/cs_counts_mex.c
index 60e680b..aa58e2e 100644
--- a/CXSparse/MATLAB/CSparse/cs_counts_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_counts_mex.c
@@ -13,20 +13,20 @@ void mexFunction
     char mode [20] ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: c = cs_counts(A,mode)") ;
+        mexErrMsgTxt ("Usage: c = cs_counts(A,mode)") ;
     }
-    ata = 0 ;						/* get mode */
+    ata = 0 ;                                           /* get mode */
     if (nargin > 1 && mxIsChar (pargin [1]))
     {
-	mxGetString (pargin [1], mode, 8) ;
-	ata = (mode [0] == 'c') ;
+        mxGetString (pargin [1], mode, 8) ;
+        ata = (mode [0] == 'c') ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;  /* get A */
     n = A->n ;
-    parent = cs_dl_etree (A, ata) ;			/* compute etree */
-    post = cs_dl_post (parent, n) ;			/* postorder the etree*/
-    c = cs_dl_counts (A, parent, post, ata) ;		/* get column counts */
-    pargout [0] = cs_dl_mex_put_int (c, n, 0, 1) ;		/* return counts */
+    parent = cs_dl_etree (A, ata) ;                     /* compute etree */
+    post = cs_dl_post (parent, n) ;                     /* postorder the etree*/
+    c = cs_dl_counts (A, parent, post, ata) ;           /* get column counts */
+    pargout [0] = cs_dl_mex_put_int (c, n, 0, 1) ;              /* return counts */
     cs_free (parent) ;
     cs_free (post) ;
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_dmperm.m b/CXSparse/MATLAB/CSparse/cs_dmperm.m
index e281ec9..8f9420a 100644
--- a/CXSparse/MATLAB/CSparse/cs_dmperm.m
+++ b/CXSparse/MATLAB/CSparse/cs_dmperm.m
@@ -1,4 +1,4 @@
-function [p,q,r,s,cc,rr] = cs_dmperm (A,seed)				    %#ok
+function [p,q,r,s,cc,rr] = cs_dmperm (A,seed)                               %#ok
 %CS_DMPERM maximum matching or Dulmage-Mendelsohn permutation.
 %   p = cs_dmperm(A) finds a maximum matching p such that p(j) = i if column j
 %   is matched to row i, or 0 if column j is unmatched.  If A is square and
@@ -58,7 +58,6 @@ function [p,q,r,s,cc,rr] = cs_dmperm (A,seed)				    %#ok
 %
 %   See also CS_DMSPY, CS_DMSOL, DMPERM, SPRANK, CS_RANDPERM, RAND
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_dmperm mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_dmperm_mex.c b/CXSparse/MATLAB/CSparse/cs_dmperm_mex.c
index 7575493..6de9575 100644
--- a/CXSparse/MATLAB/CSparse/cs_dmperm_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_dmperm_mex.c
@@ -14,28 +14,28 @@ void mexFunction
     CS_INT m, n, *jmatch, iseed ;
     if (nargin < 1 || nargin > 2 || nargout > 6)
     {
-	mexErrMsgTxt ("Usage: [p,q,r,s,cc,rr] = cs_dmperm (A,seed)") ;
+        mexErrMsgTxt ("Usage: [p,q,r,s,cc,rr] = cs_dmperm (A,seed)") ;
     }
-    seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 0 ;	/* get seed */
+    seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 0 ;        /* get seed */
     iseed = (seed > 0 && seed < 1) ? (seed * RAND_MAX) : seed ;
-    A = cs_dl_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;     /* get A */
     n = A->n ;
     m = A->m ;
     if (nargout <= 1)
     {
-	jmatch = cs_dl_maxtrans (A, iseed) ;		    /* max. matching */
-	pargout [0] = cs_dl_mex_put_int (jmatch+m, n, 1, 0) ;  /* return imatch */
-	cs_free (jmatch) ;
+        jmatch = cs_dl_maxtrans (A, iseed) ;                /* max. matching */
+        pargout [0] = cs_dl_mex_put_int (jmatch+m, n, 1, 0) ;  /* return imatch */
+        cs_free (jmatch) ;
     }
     else
     {
-	D = cs_dl_dmperm (A, iseed) ;	/* Dulmage-Mendelsohn decomposition */
-	pargout [0] = cs_dl_mex_put_int (D->p, m, 1, 0) ;
-	pargout [1] = cs_dl_mex_put_int (D->q, n, 1, 0) ;
-	pargout [2] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;
-	pargout [3] = cs_dl_mex_put_int (D->s, D->nb+1, 1, 0) ;
-	pargout [4] = cs_dl_mex_put_int (D->cc, 5, 1, 0) ;
-	pargout [5] = cs_dl_mex_put_int (D->rr, 5, 1, 0) ;
-	cs_dl_dfree (D) ;
+        D = cs_dl_dmperm (A, iseed) ;   /* Dulmage-Mendelsohn decomposition */
+        pargout [0] = cs_dl_mex_put_int (D->p, m, 1, 0) ;
+        pargout [1] = cs_dl_mex_put_int (D->q, n, 1, 0) ;
+        pargout [2] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;
+        pargout [3] = cs_dl_mex_put_int (D->s, D->nb+1, 1, 0) ;
+        pargout [4] = cs_dl_mex_put_int (D->cc, 5, 1, 0) ;
+        pargout [5] = cs_dl_mex_put_int (D->rr, 5, 1, 0) ;
+        cs_dl_dfree (D) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_dmsol.m b/CXSparse/MATLAB/CSparse/cs_dmsol.m
index 32b4b63..cc567c2 100644
--- a/CXSparse/MATLAB/CSparse/cs_dmsol.m
+++ b/CXSparse/MATLAB/CSparse/cs_dmsol.m
@@ -9,25 +9,24 @@ function x = cs_dmsol (A,b)
 %
 %   See also CS_QRSOL, CS_LUSOL, CS_DMPERM, SPRANK, RANK.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 [p q r s cc rr] = cs_dmperm (A) ;
 C = A (p,q) ;
 b = b (p) ;
 x = zeros (n,1) ;
-if (rr(3) <= m & cc(4) <= n)						    %#ok
+if (rr(3) <= m & cc(4) <= n)                                                %#ok
     x (cc(4):n) = cs_qrsol (C (rr(3):m, cc(4):n), b (rr(3):m)) ;
     b (1:rr(3)-1) = b (1:rr(3)-1) - C (1:rr(3)-1, cc(4):n) * x (cc(4):n) ;
 end
-if (rr(2) < rr (3) & cc(3) < cc(4))					    %#ok
+if (rr(2) < rr (3) & cc(3) < cc(4))                                         %#ok
     x (cc(3):cc(4)-1) = ...
-	cs_lusol (C (rr(2):rr(3)-1, cc(3):cc(4)-1), b (rr(2):rr(3)-1)) ;
+        cs_lusol (C (rr(2):rr(3)-1, cc(3):cc(4)-1), b (rr(2):rr(3)-1)) ;
     b (1:rr(2)-1) = ...
-	b (1:rr(2)-1) - C (1:rr(2)-1, cc(3):cc(4)-1) * x (cc(3):cc(4)-1) ;
+        b (1:rr(2)-1) - C (1:rr(2)-1, cc(3):cc(4)-1) * x (cc(3):cc(4)-1) ;
 end
-if (rr(2) > 1 & cc(3) > 1)						    %#ok
+if (rr(2) > 1 & cc(3) > 1)                                                  %#ok
     x (1:cc(3)-1) = cs_qrsol (C (1:rr(2)-1, 1:cc(3)-1), b (1:rr(2)-1)) ;
 end
 x (q) = x ;
diff --git a/CXSparse/MATLAB/CSparse/cs_dmspy.m b/CXSparse/MATLAB/CSparse/cs_dmspy.m
index 5539cca..49bc420 100644
--- a/CXSparse/MATLAB/CSparse/cs_dmspy.m
+++ b/CXSparse/MATLAB/CSparse/cs_dmspy.m
@@ -15,8 +15,7 @@ function [p,q,r,s,cc,rr] = cs_dmspy (A,res,seed)
 %
 %   See also CS_DMPERM, CS_DMSOL, DMPERM, SPRANK, SPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (~issparse (A))
     A = sparse (A) ;
diff --git a/CXSparse/MATLAB/CSparse/cs_droptol.m b/CXSparse/MATLAB/CSparse/cs_droptol.m
index 83a97ab..1afd309 100644
--- a/CXSparse/MATLAB/CSparse/cs_droptol.m
+++ b/CXSparse/MATLAB/CSparse/cs_droptol.m
@@ -1,4 +1,4 @@
-function C = cs_droptol (A, tol)					    %#ok
+function C = cs_droptol (A, tol)                                            %#ok
 %CS_DROPTOL remove small entries from a sparse matrix.
 %   C = cs_droptol(A,tol) removes entries from A of magnitude less than or
 %   equal to tol.  Same as A = A .* (abs (A) >= tol).
@@ -11,8 +11,7 @@ function C = cs_droptol (A, tol)					    %#ok
 %
 %   See also: RELOP, ABS
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_droptol mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/CSparse/cs_droptol_mex.c b/CXSparse/MATLAB/CSparse/cs_droptol_mex.c
index 29117f0..8b5214a 100644
--- a/CXSparse/MATLAB/CSparse/cs_droptol_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_droptol_mex.c
@@ -12,34 +12,34 @@ void mexFunction
     double tol ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_droptol(A,tol)") ;
+        mexErrMsgTxt ("Usage: C = cs_droptol(A,tol)") ;
     }
-    tol = mxGetScalar (pargin [1]) ;			    /* get tol */
+    tol = mxGetScalar (pargin [1]) ;                        /* get tol */
 
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *C, *A ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
-	C = cs_cl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;	/* C = A */
-	for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
-	cs_cl_droptol (C, tol) ;			    /* drop from C */
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	    /* return C */
+        cs_cl Amatrix, *C, *A ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        C = cs_cl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;        /* C = A */
+        for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
+        cs_cl_droptol (C, tol) ;                            /* drop from C */
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;           /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *C, *A ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-	C = cs_dl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;	/* C = A */
-	for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
-	cs_dl_droptol (C, tol) ;			    /* drop from C */
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;		    /* return C */
+        cs_dl Amatrix, *C, *A ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
+        C = cs_dl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;        /* C = A */
+        for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
+        cs_dl_droptol (C, tol) ;                            /* drop from C */
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;                   /* return C */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_esep.m b/CXSparse/MATLAB/CSparse/cs_esep.m
index 8bb7d32..1fb231f 100644
--- a/CXSparse/MATLAB/CSparse/cs_esep.m
+++ b/CXSparse/MATLAB/CSparse/cs_esep.m
@@ -11,8 +11,7 @@ function [a,b] = cs_esep (A)
 %
 %   See also CS_NSEP, CS_SEP, CS_ND, SYMRCM.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (~isreal (A))
     A = spones (A) ;
diff --git a/CXSparse/MATLAB/CSparse/cs_etree.m b/CXSparse/MATLAB/CSparse/cs_etree.m
index 545e54c..56437e2 100644
--- a/CXSparse/MATLAB/CSparse/cs_etree.m
+++ b/CXSparse/MATLAB/CSparse/cs_etree.m
@@ -1,4 +1,4 @@
-function [parent, post] = cs_etree (A, mode)				    %#ok
+function [parent, post] = cs_etree (A, mode)                                %#ok
 %CS_ETREE elimination tree of A or A'*A.
 %   parent = cs_etree (A) returns the elimination tree of A.
 %   parent = cs_etree (A,'col') returns the elimination tree of A'*A.
@@ -13,7 +13,6 @@ function [parent, post] = cs_etree (A, mode)				    %#ok
 %
 %   See also ETREE, TREEPLOT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_etree mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_etree_mex.c b/CXSparse/MATLAB/CSparse/cs_etree_mex.c
index 99753fd..8a6cf74 100644
--- a/CXSparse/MATLAB/CSparse/cs_etree_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_etree_mex.c
@@ -14,21 +14,21 @@ void mexFunction
     char mode [20] ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: [parent,post] = cs_etree(A,mode)") ;
+        mexErrMsgTxt ("Usage: [parent,post] = cs_etree(A,mode)") ;
     }
-    ata = 0 ;						/* get mode */
+    ata = 0 ;                                           /* get mode */
     if (nargin > 1 && mxIsChar (pargin [1]))
     {
-	mxGetString (pargin [1], mode, 8) ;
-	ata = (mode [0] == 'c') ;
+        mxGetString (pargin [1], mode, 8) ;
+        ata = (mode [0] == 'c') ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;  /* get A */
     n = A->n ;
-    parent = cs_dl_etree (A, ata) ;			/* compute etree */
+    parent = cs_dl_etree (A, ata) ;                     /* compute etree */
     if (nargout > 1)
     {
-	post = cs_dl_post (parent, n) ;			/* postorder the etree*/
-	pargout [1] = cs_dl_mex_put_int (post, n, 1, 1) ;	/* return post */
+        post = cs_dl_post (parent, n) ;                 /* postorder the etree*/
+        pargout [1] = cs_dl_mex_put_int (post, n, 1, 1) ;       /* return post */
     }
-    pargout [0] = cs_dl_mex_put_int (parent, n, 1, 1) ;	/* return parent */
+    pargout [0] = cs_dl_mex_put_int (parent, n, 1, 1) ; /* return parent */
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_gaxpy.m b/CXSparse/MATLAB/CSparse/cs_gaxpy.m
index 173223c..3f8210d 100644
--- a/CXSparse/MATLAB/CSparse/cs_gaxpy.m
+++ b/CXSparse/MATLAB/CSparse/cs_gaxpy.m
@@ -1,15 +1,14 @@
-function z = cs_gaxpy (A,x,y)						    %#ok
+function z = cs_gaxpy (A,x,y)                                               %#ok
 %CS_GAXPY sparse matrix times vector.
 %   z = cs_gaxpy(A,x,y) computes z = A*x+y where x and y are full vectors.
 %
 %   Example:
 %       Prob = UFget ('HB/arc130') ; A = Prob.A ; [m n] = size (A) ;
-%       x = rand (m,1) ; y = rand (n,1) ;
+%       x = rand (n,1) ; y = rand (m,1) ;
 %       z = cs_gaxpy (A, x, y) ;
 %       
 %   See also PLUS, MTIMES.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_gaxpy mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_gaxpy_mex.c b/CXSparse/MATLAB/CSparse/cs_gaxpy_mex.c
index 13dc30a..4ffd985 100644
--- a/CXSparse/MATLAB/CSparse/cs_gaxpy_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_gaxpy_mex.c
@@ -10,33 +10,33 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: z = cs_gaxpy(A,x,y)") ;
+        mexErrMsgTxt ("Usage: z = cs_gaxpy(A,x,y)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1])
-	|| mxIsComplex (pargin [2]))
+        || mxIsComplex (pargin [2]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A ;
-	cs_complex_t *x, *z ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;/* get A */
-	x = cs_cl_mex_get_double (A->n, pargin [1]) ;	    /* get x */
-	z = cs_cl_mex_get_double (A->m, pargin [2]) ;	    /* z = y */
-	cs_cl_gaxpy (A, x, z) ;				    /* z = z + A*x */
-	cs_free (x) ;
-	cs_free (A->x) ;
-	pargout [0] = cs_cl_mex_put_double (A->m, z) ;	    /* return z */
+        cs_cl Amatrix, *A ;
+        cs_complex_t *x, *z ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;/* get A */
+        x = cs_cl_mex_get_double (A->n, pargin [1]) ;       /* get x */
+        z = cs_cl_mex_get_double (A->m, pargin [2]) ;       /* z = y */
+        cs_cl_gaxpy (A, x, z) ;                             /* z = z + A*x */
+        cs_free (x) ;
+        cs_free (A->x) ;
+        pargout [0] = cs_cl_mex_put_double (A->m, z) ;      /* return z */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A ;
-	double *x, *y, *z ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
-	x = cs_dl_mex_get_double (A->n, pargin [1]) ;	    /* get x */
-	y = cs_dl_mex_get_double (A->m, pargin [2]) ;	    /* get y */
-	z = cs_dl_mex_put_double (A->m, y, &(pargout [0])) ;   /* z = y */
-	cs_dl_gaxpy (A, x, z) ;				    /* z = z + A*x */
+        cs_dl Amatrix, *A ;
+        double *x, *y, *z ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
+        x = cs_dl_mex_get_double (A->n, pargin [1]) ;       /* get x */
+        y = cs_dl_mex_get_double (A->m, pargin [2]) ;       /* get y */
+        z = cs_dl_mex_put_double (A->m, y, &(pargout [0])) ;   /* z = y */
+        cs_dl_gaxpy (A, x, z) ;                             /* z = z + A*x */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_lsolve.m b/CXSparse/MATLAB/CSparse/cs_lsolve.m
index 1e37600..8571a70 100644
--- a/CXSparse/MATLAB/CSparse/cs_lsolve.m
+++ b/CXSparse/MATLAB/CSparse/cs_lsolve.m
@@ -1,4 +1,4 @@
-function x = cs_lsolve (L,b)						    %#ok
+function x = cs_lsolve (L,b)                                                %#ok
 %CS_LSOLVE solve a sparse lower triangular system L*x=b.
 %   x = cs_lsolve(L,b) computes x = L\b, L must be lower triangular with a
 %   zero-free diagonal.  b must be a column vector.  x is full if b is full.
@@ -11,7 +11,6 @@ function x = cs_lsolve (L,b)						    %#ok
 %
 %   See also CS_LTSOLVE, CS_USOLVE, CS_UTSOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_lsolve mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_lsolve_mex.c b/CXSparse/MATLAB/CSparse/cs_lsolve_mex.c
index 0153d6a..7740692 100644
--- a/CXSparse/MATLAB/CSparse/cs_lsolve_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_lsolve_mex.c
@@ -34,59 +34,59 @@ void mexFunction
     CS_INT top, nz, p, *xi, n ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_lsolve(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_lsolve(L,b)") ;
     }
     if (mxIsSparse (pargin [1]))
     {
-	cs_dl Lmatrix, Bmatrix, *L, *B, *X ;
-	double *x ;
-	if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
-	{
-	    mexErrMsgTxt ("sparse complex case not supported") ;
-	}
-	L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;/* get L */
-	n = L->n ;
-	B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
-	cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
-	xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;	    /* get workspace */
-	x  = cs_dl_malloc (n, sizeof (double)) ;
-	top = cs_dl_spsolve (L, B, 0, xi, x, NULL, 1) ;	    /* x = L\b */
-	X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;	    /* create sparse x*/
-	X->p [0] = 0 ;
-	nz = 0 ;
-	for (p = top ; p < n ; p++)
-	{
-	    X->i [nz] = xi [p] ;
-	    X->x [nz++] = x [xi [p]] ;
-	}
-	X->p [1] = nz ;
-	pargout [0] = cs_dl_mex_put_sparse (&X) ;
-	cs_free (x) ;
-	cs_free (xi) ;
+        cs_dl Lmatrix, Bmatrix, *L, *B, *X ;
+        double *x ;
+        if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
+        {
+            mexErrMsgTxt ("sparse complex case not supported") ;
+        }
+        L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;/* get L */
+        n = L->n ;
+        B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
+        cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
+        xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;          /* get workspace */
+        x  = cs_dl_malloc (n, sizeof (double)) ;
+        top = cs_dl_spsolve (L, B, 0, xi, x, NULL, 1) ;     /* x = L\b */
+        X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;     /* create sparse x*/
+        X->p [0] = 0 ;
+        nz = 0 ;
+        for (p = top ; p < n ; p++)
+        {
+            X->i [nz] = xi [p] ;
+            X->x [nz++] = x [xi [p]] ;
+        }
+        X->p [1] = nz ;
+        pargout [0] = cs_dl_mex_put_sparse (&X) ;
+        cs_free (x) ;
+        cs_free (xi) ;
     }
     else if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Lmatrix, *L ;
-	cs_complex_t *x ;
-	L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;	/* get L */
-	n = L->n ;
-	x = cs_cl_mex_get_double (n, pargin [1]) ;		/* x = b */
-	cs_cl_lsolve (L, x) ;					/* x = L\x */
-	cs_free (L->x) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;		/* return x */
+        cs_cl Lmatrix, *L ;
+        cs_complex_t *x ;
+        L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;    /* get L */
+        n = L->n ;
+        x = cs_cl_mex_get_double (n, pargin [1]) ;              /* x = b */
+        cs_cl_lsolve (L, x) ;                                   /* x = L\x */
+        cs_free (L->x) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;             /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Lmatrix, *L ;
-	double *x, *b ;
-	L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;	/* get L */
-	n = L->n ;
-	b = cs_dl_mex_get_double (n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_lsolve (L, x) ;					/* x = L\x */
+        cs_dl Lmatrix, *L ;
+        double *x, *b ;
+        L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ; /* get L */
+        n = L->n ;
+        b = cs_dl_mex_get_double (n, pargin [1]) ;              /* get b */
+        x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;       /* x = b */
+        cs_dl_lsolve (L, x) ;                                   /* x = L\x */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_ltsolve.m b/CXSparse/MATLAB/CSparse/cs_ltsolve.m
index 4e902b6..014f473 100644
--- a/CXSparse/MATLAB/CSparse/cs_ltsolve.m
+++ b/CXSparse/MATLAB/CSparse/cs_ltsolve.m
@@ -1,4 +1,4 @@
-function x = cs_ltsolve (L,b)						    %#ok
+function x = cs_ltsolve (L,b)                                               %#ok
 %CS_LTSOLVE solve a sparse upper triangular system L'*x=b.
 %   x = cs_ltsolve(L,b) computes x = L'\b, L must be lower triangular with a
 %   zero-free diagonal.  b must be a full vector.
@@ -9,7 +9,6 @@ function x = cs_ltsolve (L,b)						    %#ok
 %
 %   See also CS_LSOLVE, CS_USOLVE, CS_UTSOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_ltsolve mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_ltsolve_mex.c b/CXSparse/MATLAB/CSparse/cs_ltsolve_mex.c
index 63d4141..ef299dd 100644
--- a/CXSparse/MATLAB/CSparse/cs_ltsolve_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_ltsolve_mex.c
@@ -10,29 +10,29 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_ltsolve(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_ltsolve(L,b)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Lmatrix, *L ;
-	cs_complex_t *x ;
-	L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;	/* get L */
-	x = cs_cl_mex_get_double (L->n, pargin [1]) ;		/* x = b */
-	cs_cl_ltsolve (L, x) ;					/* x = L'\x */
-	cs_free (L->x) ;
-	pargout [0] = cs_cl_mex_put_double (L->n, x) ;		/* return x */
+        cs_cl Lmatrix, *L ;
+        cs_complex_t *x ;
+        L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;    /* get L */
+        x = cs_cl_mex_get_double (L->n, pargin [1]) ;           /* x = b */
+        cs_cl_ltsolve (L, x) ;                                  /* x = L'\x */
+        cs_free (L->x) ;
+        pargout [0] = cs_cl_mex_put_double (L->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Lmatrix, *L ;
-	double *x, *b ;
-	L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;	/* get L */
-	b = cs_dl_mex_get_double (L->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (L->n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_ltsolve (L, x) ;					/* x = L'\x */
+        cs_dl Lmatrix, *L ;
+        double *x, *b ;
+        L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ; /* get L */
+        b = cs_dl_mex_get_double (L->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (L->n, b, &(pargout [0])) ;    /* x = b */
+        cs_dl_ltsolve (L, x) ;                                  /* x = L'\x */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_lu.m b/CXSparse/MATLAB/CSparse/cs_lu.m
index 4ff80fc..8c849a8 100644
--- a/CXSparse/MATLAB/CSparse/cs_lu.m
+++ b/CXSparse/MATLAB/CSparse/cs_lu.m
@@ -1,4 +1,4 @@
-function [L,U,p,q] = cs_lu (A,tol)					    %#ok
+function [L,U,p,q] = cs_lu (A,tol)                                          %#ok
 %CS_LU sparse LU factorization, with fill-reducing ordering.
 %   [L,U,p] = cs_lu(A) factorizes A(p,:) into L*U using no fill-reducing
 %   ordering.
@@ -23,7 +23,6 @@ function [L,U,p,q] = cs_lu (A,tol)					    %#ok
 %
 %   See also CS_AMD, LU, UMFPACK, AMD, COLAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_lu mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_lu_mex.c b/CXSparse/MATLAB/CSparse/cs_lu_mex.c
index 31a5a59..6a9d99a 100644
--- a/CXSparse/MATLAB/CSparse/cs_lu_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_lu_mex.c
@@ -12,79 +12,79 @@ void mexFunction
     double tol ;
     if (nargout > 4 || nargin > 3 || nargin < 1)
     {
-	mexErrMsgTxt ("Usage: [L,U,p,q] = cs_lu (A,tol)") ;
+        mexErrMsgTxt ("Usage: [L,U,p,q] = cs_lu (A,tol)") ;
     }
-    if (nargin == 2)			    /* determine tol and ordering */
+    if (nargin == 2)                        /* determine tol and ordering */
     {
-	tol = mxGetScalar (pargin [1]) ;
-	order = (nargout == 4) ? 1 : 0 ;    /* amd (A+A'), or natural */
+        tol = mxGetScalar (pargin [1]) ;
+        order = (nargout == 4) ? 1 : 0 ;    /* amd (A+A'), or natural */
     }
     else
     {
-	tol = 1 ;
-	order = (nargout == 4) ? 2 : 0 ;    /* amd(S'*S) w/dense rows or I */
+        tol = 1 ;
+        order = (nargout == 4) ? 2 : 0 ;    /* amd(S'*S) w/dense rows or I */
     }
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cls *S ;
-	cs_cln *N ;
-	cs_cl Amatrix, *A, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_cl_sqr (order, A, 0) ;	    /* symbolic ordering, no QR bound */
-	N = cs_cl_lu (A, S, tol) ;	    /* numeric factorization */
-	if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
-	cs_cl_free (A->x) ;		    /* complex copy no longer needed */
-	cs_cl_dropzeros (N->L) ;	    /* drop zeros from L and sort it */
-	D = cs_cl_transpose (N->L, 1) ;
-	cs_cl_spfree (N->L) ;
-	N->L = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	cs_cl_dropzeros (N->U) ;	    /* drop zeros from U and sort it */
-	D = cs_cl_transpose (N->U, 1) ;
-	cs_cl_spfree (N->U) ;
-	N->U = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	p = cs_cl_pinv (N->pinv, n) ;			    /* p=pinv' */
-	pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;	    /* return L */
-	pargout [1] = cs_cl_mex_put_sparse (&(N->U)) ;	    /* return U */
-	pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;	    /* return p */
-	/* return Q */
-	if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
-	cs_cl_nfree (N) ;
-	cs_cl_sfree (S) ;
+        cs_cls *S ;
+        cs_cln *N ;
+        cs_cl Amatrix, *A, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        n = A->n ;
+        S = cs_cl_sqr (order, A, 0) ;       /* symbolic ordering, no QR bound */
+        N = cs_cl_lu (A, S, tol) ;          /* numeric factorization */
+        if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
+        cs_cl_free (A->x) ;                 /* complex copy no longer needed */
+        cs_cl_dropzeros (N->L) ;            /* drop zeros from L and sort it */
+        D = cs_cl_transpose (N->L, 1) ;
+        cs_cl_spfree (N->L) ;
+        N->L = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        cs_cl_dropzeros (N->U) ;            /* drop zeros from U and sort it */
+        D = cs_cl_transpose (N->U, 1) ;
+        cs_cl_spfree (N->U) ;
+        N->U = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        p = cs_cl_pinv (N->pinv, n) ;                       /* p=pinv' */
+        pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;      /* return L */
+        pargout [1] = cs_cl_mex_put_sparse (&(N->U)) ;      /* return U */
+        pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;      /* return p */
+        /* return Q */
+        if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
+        cs_cl_nfree (N) ;
+        cs_cl_sfree (S) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dls *S ;
-	cs_dln *N ;
-	cs_dl Amatrix, *A, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_dl_sqr (order, A, 0) ;	    /* symbolic ordering, no QR bound */
-	N = cs_dl_lu (A, S, tol) ;	    /* numeric factorization */
-	if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
-	cs_dl_dropzeros (N->L) ;	    /* drop zeros from L and sort it */
-	D = cs_dl_transpose (N->L, 1) ;
-	cs_dl_spfree (N->L) ;
-	N->L = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	cs_dl_dropzeros (N->U) ;	    /* drop zeros from U and sort it */
-	D = cs_dl_transpose (N->U, 1) ;
-	cs_dl_spfree (N->U) ;
-	N->U = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	p = cs_dl_pinv (N->pinv, n) ;			    /* p=pinv' */
-	pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;	    /* return L */
-	pargout [1] = cs_dl_mex_put_sparse (&(N->U)) ;	    /* return U */
-	pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;	    /* return p */
-	/* return Q */
-	if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
-	cs_dl_nfree (N) ;
-	cs_dl_sfree (S) ;
+        cs_dls *S ;
+        cs_dln *N ;
+        cs_dl Amatrix, *A, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ; /* get A */
+        n = A->n ;
+        S = cs_dl_sqr (order, A, 0) ;       /* symbolic ordering, no QR bound */
+        N = cs_dl_lu (A, S, tol) ;          /* numeric factorization */
+        if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
+        cs_dl_dropzeros (N->L) ;            /* drop zeros from L and sort it */
+        D = cs_dl_transpose (N->L, 1) ;
+        cs_dl_spfree (N->L) ;
+        N->L = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        cs_dl_dropzeros (N->U) ;            /* drop zeros from U and sort it */
+        D = cs_dl_transpose (N->U, 1) ;
+        cs_dl_spfree (N->U) ;
+        N->U = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        p = cs_dl_pinv (N->pinv, n) ;                       /* p=pinv' */
+        pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;      /* return L */
+        pargout [1] = cs_dl_mex_put_sparse (&(N->U)) ;      /* return U */
+        pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;      /* return p */
+        /* return Q */
+        if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
+        cs_dl_nfree (N) ;
+        cs_dl_sfree (S) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_lusol.m b/CXSparse/MATLAB/CSparse/cs_lusol.m
index ff00f7a..0d5794c 100644
--- a/CXSparse/MATLAB/CSparse/cs_lusol.m
+++ b/CXSparse/MATLAB/CSparse/cs_lusol.m
@@ -1,4 +1,4 @@
-function x = cs_lusol (A,b,order,tol)					    %#ok
+function x = cs_lusol (A,b,order,tol)                                       %#ok
 %CS_LUSOL solve Ax=b using LU factorization.
 %   x = cs_lusol(A,b) computes x = A\b, where A is sparse and square, and b is a
 %   full vector.  The ordering cs_amd(A,2) is used.
@@ -17,7 +17,6 @@ function x = cs_lusol (A,b,order,tol)					    %#ok
 %
 %   See also CS_LU, CS_AMD, CS_CHOLSOL, CS_QRSOL, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_lusol mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_lusol_mex.c b/CXSparse/MATLAB/CSparse/cs_lusol_mex.c
index be34770..a758a51 100644
--- a/CXSparse/MATLAB/CSparse/cs_lusol_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_lusol_mex.c
@@ -12,50 +12,50 @@ void mexFunction
     CS_INT order ;
     if (nargout > 1 || nargin < 2 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: x = cs_lusol(A,b,order,tol)") ;
+        mexErrMsgTxt ("Usage: x = cs_lusol(A,b,order,tol)") ;
     }
     order = (nargin < 3) ? 2 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
     order = CS_MIN (order, 3) ;
     if (nargin == 2)
     {
-	tol = 1 ;			    /* normal partial pivoting */
+        tol = 1 ;                           /* normal partial pivoting */
     }
     else if (nargin == 3)
     {
-	tol = (order == 1) ? 0.001 : 1 ;    /* tol = 0.001 for amd(A+A') */
+        tol = (order == 1) ? 0.001 : 1 ;    /* tol = 0.001 for amd(A+A') */
     }
     else
     {
-	tol = mxGetScalar (pargin [3]) ;
+        tol = mxGetScalar (pargin [3]) ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, Amatrix ;
-	cs_complex_t *x ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;	/* get A */
-	x = cs_cl_mex_get_double (A->n, pargin [1]) ;		/* x = b */
-	if (!cs_cl_lusol (order, A, x, tol))			/* x = A\x */
-	{
-	    mexErrMsgTxt ("failed (singular or out of memory)") ;
-	}
-	cs_cl_free (A->x) ;	/* complex copy no longer needed */
-	pargout [0] = cs_cl_mex_put_double (A->n, x) ;		/* return x */
+        cs_cl *A, Amatrix ;
+        cs_complex_t *x ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        x = cs_cl_mex_get_double (A->n, pargin [1]) ;           /* x = b */
+        if (!cs_cl_lusol (order, A, x, tol))                    /* x = A\x */
+        {
+            mexErrMsgTxt ("failed (singular or out of memory)") ;
+        }
+        cs_cl_free (A->x) ;     /* complex copy no longer needed */
+        pargout [0] = cs_cl_mex_put_double (A->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, Amatrix ;
-	double *x, *b ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;    /* get A */
-	b = cs_dl_mex_get_double (A->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;	/* x = b */
-	if (!cs_dl_lusol (order, A, x, tol))			/* x = A\x */
-	{
-	    mexErrMsgTxt ("failed (singular or out of memory)") ;
-	}
+        cs_dl *A, Amatrix ;
+        double *x, *b ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;    /* get A */
+        b = cs_dl_mex_get_double (A->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;    /* x = b */
+        if (!cs_dl_lusol (order, A, x, tol))                    /* x = A\x */
+        {
+            mexErrMsgTxt ("failed (singular or out of memory)") ;
+        }
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_make.m b/CXSparse/MATLAB/CSparse/cs_make.m
index 982403a..de62cbe 100644
--- a/CXSparse/MATLAB/CSparse/cs_make.m
+++ b/CXSparse/MATLAB/CSparse/cs_make.m
@@ -44,8 +44,7 @@ function [objfiles, timestamp] = cs_make (f, docomplex)
 %
 %   See also MEX.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 1)
     f = 0 ;
@@ -71,12 +70,13 @@ if (docomplex == 0)
     [objfiles, timestamp] = cs_make_helper (f, 0) ;
 else
     try
-	% try with complex support
-	[objfiles, timestamp] = cs_make_helper (f, 1) ;
-    catch
-	% oops - that failed, try without complex support
-	fprintf ('retrying without complex matrix support\n') ;
-	[objfiles, timestamp] = cs_make_helper (f, 0) ;
+        % try with complex support
+        [objfiles, timestamp] = cs_make_helper (f, 1) ;
+    catch me
+        % oops - that failed, try without complex support
+        disp (me.message)
+        fprintf ('retrying without complex matrix support\n') ;
+        [objfiles, timestamp] = cs_make_helper (f, 0) ;
     end
 end
 
diff --git a/CXSparse/MATLAB/CSparse/cs_mex.c b/CXSparse/MATLAB/CSparse/cs_mex.c
index 6b09a5f..9090c20 100644
--- a/CXSparse/MATLAB/CSparse/cs_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_mex.c
@@ -7,26 +7,26 @@ void cs_mex_check (CS_INT nel, CS_INT m, CS_INT n, int square, int sparse,
 #ifdef NCOMPLEX
     if (values)
     {
-	if (mxIsComplex (A)) mexErrMsgTxt ("complex matrices not supported") ;
+        if (mxIsComplex (A)) mexErrMsgTxt ("complex matrices not supported") ;
     }
 #endif
     if (sparse && !mxIsSparse (A)) mexErrMsgTxt ("matrix must be sparse") ;
     if (!sparse)
     {
-	if (mxIsSparse (A)) mexErrMsgTxt ("matrix must be full") ;
-	if (values && !mxIsDouble (A)) mexErrMsgTxt ("matrix must be double") ;
+        if (mxIsSparse (A)) mexErrMsgTxt ("matrix must be full") ;
+        if (values && !mxIsDouble (A)) mexErrMsgTxt ("matrix must be double") ;
     }
     if (nel)
     {
-	/* check number of elements */
-	nnel = mxGetNumberOfElements (A) ;
-	if (m >= 0 && n >= 0 && m*n != nnel) mexErrMsgTxt ("wrong length") ;
+        /* check number of elements */
+        nnel = mxGetNumberOfElements (A) ;
+        if (m >= 0 && n >= 0 && m*n != nnel) mexErrMsgTxt ("wrong length") ;
     }
     else
     {
-	/* check row and/or column dimensions */
-	if (m >= 0 && m != mm) mexErrMsgTxt ("wrong dimension") ;
-	if (n >= 0 && n != nn) mexErrMsgTxt ("wrong dimension") ;
+        /* check row and/or column dimensions */
+        if (m >= 0 && m != mm) mexErrMsgTxt ("wrong dimension") ;
+        if (n >= 0 && n != nn) mexErrMsgTxt ("wrong dimension") ;
     }
     if (square && mm != nn) mexErrMsgTxt ("matrix must be square") ;
 }
@@ -64,7 +64,7 @@ mxArray *cs_dl_mex_put_sparse (cs_dl **Ahandle)
     mxSetJc (Amatlab, (void *) (A->p)) ; /* assign A->p pointer to MATLAB A */
     mxSetIr (Amatlab, (void *) (A->i)) ;
     mxSetPr (Amatlab, A->x) ;
-    cs_free (A) ;			/* frees A struct only, not A->p, etc */
+    cs_free (A) ;                       /* frees A struct only, not A->p, etc */
     *Ahandle = NULL ;
     return (Amatlab) ;
 }
@@ -81,9 +81,9 @@ double *cs_dl_mex_put_double (CS_INT n, const double *b, mxArray **X)
 {
     double *x ;
     CS_INT k ;
-    *X = mxCreateDoubleMatrix (n, 1, mxREAL) ;	    /* create x */
+    *X = mxCreateDoubleMatrix (n, 1, mxREAL) ;      /* create x */
     x = mxGetPr (*X) ;
-    for (k = 0 ; k < n ; k++) x [k] = b [k] ;	    /* copy x = b */
+    for (k = 0 ; k < n ; k++) x [k] = b [k] ;       /* copy x = b */
     return (x) ;
 }
 
@@ -96,16 +96,16 @@ CS_INT *cs_dl_mex_get_int (CS_INT n, const mxArray *Imatlab, CS_INT *imax,
     cs_mex_check (1, n, 1, 0, 0, 1, Imatlab) ;
     if (mxIsComplex (Imatlab))
     {
-	mexErrMsgTxt ("integer input cannot be complex") ;
+        mexErrMsgTxt ("integer input cannot be complex") ;
     }
     p = mxGetPr (Imatlab) ;
     *imax = 0 ;
     for (k = 0 ; k < n ; k++)
     {
-	i = p [k] ;
-	C [k] = i - 1 ;
-	if (i < lo) mexErrMsgTxt ("index out of bounds") ;
-	*imax = CS_MAX (*imax, i) ;
+        i = p [k] ;
+        C [k] = i - 1 ;
+        if (i < lo) mexErrMsgTxt ("index out of bounds") ;
+        *imax = CS_MAX (*imax, i) ;
     }
     return (C) ;
 }
@@ -135,7 +135,7 @@ static cs_complex_t *cs_cl_get_vector (CS_INT n, CS_INT size,
     Y = cs_dl_malloc (size, sizeof (cs_complex_t)) ;
     for (p = 0 ; p < n ; p++)
     {
-	Y [p] = X [p] + I * (Z ? Z [p] : 0) ;
+        Y [p] = X [p] + I * (Z ? Z [p] : 0) ;
     }
     return (Y) ;
 }
@@ -178,13 +178,13 @@ mxArray *cs_cl_mex_put_sparse (cs_cl **Ahandle)
     z = cs_dl_malloc (A->nzmax, sizeof (double)) ;
     for (k = 0 ; k < A->nzmax ; k++)
     {
-	x [k] = creal (A->x [k]) ;	/* copy and split numerical values */
-	z [k] = cimag (A->x [k]) ;
+        x [k] = creal (A->x [k]) ;      /* copy and split numerical values */
+        z [k] = cimag (A->x [k]) ;
     }
-    cs_cl_free (A->x) ;			/* free copy of complex values */
+    cs_cl_free (A->x) ;                 /* free copy of complex values */
     mxSetPr (Amatlab, x) ;
     mxSetPi (Amatlab, z) ;
-    cs_cl_free (A) ;			/* frees A struct only, not A->p, etc */
+    cs_cl_free (A) ;                    /* frees A struct only, not A->p, etc */
     *Ahandle = NULL ;
     return (Amatlab) ;
 }
@@ -207,8 +207,8 @@ mxArray *cs_cl_mex_put_double (CS_INT n, cs_complex_t *b)
     z = mxGetPi (X) ;
     for (k = 0 ; k < n ; k++)
     {
-	x [k] = creal (b [k]) ;	    /* copy x = b */
-	z [k] = cimag (b [k]) ;
+        x [k] = creal (b [k]) ;     /* copy x = b */
+        z [k] = cimag (b [k]) ;
     }
     cs_cl_free (b) ;
     return (X) ;
diff --git a/CXSparse/MATLAB/CSparse/cs_multiply.m b/CXSparse/MATLAB/CSparse/cs_multiply.m
index 071b60e..dff6d93 100644
--- a/CXSparse/MATLAB/CSparse/cs_multiply.m
+++ b/CXSparse/MATLAB/CSparse/cs_multiply.m
@@ -1,4 +1,4 @@
-function C = cs_multiply (A,B)						    %#ok
+function C = cs_multiply (A,B)                                              %#ok
 %CS_MULTIPLY sparse matrix multiply.
 %   C = cs_multiply(A,B) computes C = A*B.
 %
@@ -10,7 +10,6 @@ function C = cs_multiply (A,B)						    %#ok
 %
 %   See also CS_GAXPY, CS_ADD, MTIMES.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_mult mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_multiply_mex.c b/CXSparse/MATLAB/CSparse/cs_multiply_mex.c
index 63b712e..7dc8f20 100644
--- a/CXSparse/MATLAB/CSparse/cs_multiply_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_multiply_mex.c
@@ -10,40 +10,40 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_multiply(A,B)") ;
+        mexErrMsgTxt ("Usage: C = cs_multiply(A,B)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl A1matrix, B1matrix, *A, *B, *C, *D, *A1, *B1 ;
-	A1 = cs_cl_mex_get_sparse (&A1matrix, 0, pargin [0]) ;
-	A = cs_cl_transpose (A1, 1) ;
-	cs_cl_free (A1->x) ;		/* complex copy no longer needed */
-	B1 = cs_cl_mex_get_sparse (&B1matrix, 0, pargin [1]) ;
-	B = cs_cl_transpose (B1, 1) ;
-	cs_cl_free (B1->x) ;		/* complex copy no longer needed */
-	D = cs_cl_multiply (B,A) ;		/* D = B'*A' */
-	cs_cl_spfree (A) ;
-	cs_cl_spfree (B) ;
-	cs_cl_dropzeros (D) ;			/* drop zeros from D */
-	C = cs_cl_transpose (D, 1) ;		/* C = D', so C is sorted */
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	/* return C */
+        cs_cl A1matrix, B1matrix, *A, *B, *C, *D, *A1, *B1 ;
+        A1 = cs_cl_mex_get_sparse (&A1matrix, 0, pargin [0]) ;
+        A = cs_cl_transpose (A1, 1) ;
+        cs_cl_free (A1->x) ;            /* complex copy no longer needed */
+        B1 = cs_cl_mex_get_sparse (&B1matrix, 0, pargin [1]) ;
+        B = cs_cl_transpose (B1, 1) ;
+        cs_cl_free (B1->x) ;            /* complex copy no longer needed */
+        D = cs_cl_multiply (B,A) ;              /* D = B'*A' */
+        cs_cl_spfree (A) ;
+        cs_cl_spfree (B) ;
+        cs_cl_dropzeros (D) ;                   /* drop zeros from D */
+        C = cs_cl_transpose (D, 1) ;            /* C = D', so C is sorted */
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;       /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
-	A = cs_dl_transpose (cs_dl_mex_get_sparse (&Amatrix, 0,1, pargin[0]),1);
-	B = cs_dl_transpose (cs_dl_mex_get_sparse (&Bmatrix, 0,1, pargin[1]),1);
-	D = cs_dl_multiply (B,A) ;		/* D = B'*A' */
-	cs_dl_spfree (A) ;
-	cs_dl_spfree (B) ;
-	cs_dl_dropzeros (D) ;			/* drop zeros from D */
-	C = cs_dl_transpose (D, 1) ;		/* C = D', so C is sorted */
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;	/* return C */
+        cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
+        A = cs_dl_transpose (cs_dl_mex_get_sparse (&Amatrix, 0,1, pargin[0]),1);
+        B = cs_dl_transpose (cs_dl_mex_get_sparse (&Bmatrix, 0,1, pargin[1]),1);
+        D = cs_dl_multiply (B,A) ;              /* D = B'*A' */
+        cs_dl_spfree (A) ;
+        cs_dl_spfree (B) ;
+        cs_dl_dropzeros (D) ;                   /* drop zeros from D */
+        C = cs_dl_transpose (D, 1) ;            /* C = D', so C is sorted */
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;       /* return C */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_must_compile.m b/CXSparse/MATLAB/CSparse/cs_must_compile.m
index 1810a57..dfce61e 100644
--- a/CXSparse/MATLAB/CSparse/cs_must_compile.m
+++ b/CXSparse/MATLAB/CSparse/cs_must_compile.m
@@ -6,11 +6,10 @@ function [s, t, tobj] = cs_must_compile (srcdir, f, suffix, obj, hfile, force)
 %        none, not meant for end users.
 %   See also: CS_MAKE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 dobj = dir ([f obj]) ;
-if (force | isempty (dobj))						    %#ok
+if (force | isempty (dobj))                                                 %#ok
     s = 1 ;
     t = Inf ;
     tobj = -1 ;
diff --git a/CXSparse/MATLAB/CSparse/cs_nd.m b/CXSparse/MATLAB/CSparse/cs_nd.m
index 1afcbfc..99aa92c 100644
--- a/CXSparse/MATLAB/CSparse/cs_nd.m
+++ b/CXSparse/MATLAB/CSparse/cs_nd.m
@@ -11,17 +11,16 @@ function p = cs_nd (A)
 %
 %   See also CS_AMD, CS_SEP, CS_ESEP, CS_NSEP, AMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n == 1)
     p = 1 ;
 elseif (n < 500)
-    p = cs_amd (A) ;		    % use cs_amd on small graphs
+    p = cs_amd (A) ;                % use cs_amd on small graphs
 else
-    [s a b] = cs_nsep (A) ;	    % find a node separator
-    a = a (cs_nd (A (a,a))) ;	    % order A(a,a) recursively
-    b = b (cs_nd (A (b,b))) ;	    % order A(b,b) recursively
-    p = [a b s] ;		    % concatenate to obtain the final ordering
+    [s a b] = cs_nsep (A) ;         % find a node separator
+    a = a (cs_nd (A (a,a))) ;       % order A(a,a) recursively
+    b = b (cs_nd (A (b,b))) ;       % order A(b,b) recursively
+    p = [a b s] ;                   % concatenate to obtain the final ordering
 end
diff --git a/CXSparse/MATLAB/CSparse/cs_nsep.m b/CXSparse/MATLAB/CSparse/cs_nsep.m
index b7a22fc..6177864 100644
--- a/CXSparse/MATLAB/CSparse/cs_nsep.m
+++ b/CXSparse/MATLAB/CSparse/cs_nsep.m
@@ -11,8 +11,7 @@ function [s,a,b] = cs_nsep (A)
 %
 %   See also CS_SEP, CS_ESEP, CS_ND.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [a b] = cs_esep (A) ;
 [s a b] = cs_sep (A, a, b) ;
diff --git a/CXSparse/MATLAB/CSparse/cs_permute.m b/CXSparse/MATLAB/CSparse/cs_permute.m
index ac138b1..7b41ff6 100644
--- a/CXSparse/MATLAB/CSparse/cs_permute.m
+++ b/CXSparse/MATLAB/CSparse/cs_permute.m
@@ -1,4 +1,4 @@
-function C = cs_permute (A,p,q)						    %#ok
+function C = cs_permute (A,p,q)                                             %#ok
 %CS_PERMUTE permute a sparse matrix.
 %   C = cs_permute(A,p,q) computes C = A(p,q)
 %
@@ -9,7 +9,6 @@ function C = cs_permute (A,p,q)						    %#ok
 %
 %   See also CS_SYMPERM, SUBSREF.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_permute mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_permute_mex.c b/CXSparse/MATLAB/CSparse/cs_permute_mex.c
index 1e6ad11..206bc94 100644
--- a/CXSparse/MATLAB/CSparse/cs_permute_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_permute_mex.c
@@ -11,39 +11,39 @@ void mexFunction
     CS_INT ignore, *P, *Q, *Pinv, m, n ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: C = cs_permute(A,p,q)") ;
+        mexErrMsgTxt ("Usage: C = cs_permute(A,p,q)") ;
     }
     m = mxGetM (pargin [0]) ;
     n = mxGetN (pargin [0]) ;
-    P = cs_dl_mex_get_int (m, pargin [1], &ignore, 1) ;	/* get P */
-    Q = cs_dl_mex_get_int (n, pargin [2], &ignore, 1) ;	/* get Q */
-    Pinv = cs_pinv (P, m) ;		    /* P = Pinv' */
+    P = cs_dl_mex_get_int (m, pargin [1], &ignore, 1) ; /* get P */
+    Q = cs_dl_mex_get_int (n, pargin [2], &ignore, 1) ; /* get Q */
+    Pinv = cs_pinv (P, m) ;                 /* P = Pinv' */
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A, *C, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
-	C = cs_cl_permute (A, Pinv, Q, 1) ;	    /* C = A(p,q) */
-	cs_cl_free (A->x) ;
-	D = cs_cl_transpose (C, 1) ;	/* sort C via double transpose */
-	cs_cl_spfree (C) ;
-	C = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	    /* return C */
+        cs_cl Amatrix, *A, *C, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        C = cs_cl_permute (A, Pinv, Q, 1) ;         /* C = A(p,q) */
+        cs_cl_free (A->x) ;
+        D = cs_cl_transpose (C, 1) ;    /* sort C via double transpose */
+        cs_cl_spfree (C) ;
+        C = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;           /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A, *C, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-	C = cs_dl_permute (A, Pinv, Q, 1) ;	    /* C = A(p,q) */
-	D = cs_dl_transpose (C, 1) ;	/* sort C via double transpose */
-	cs_dl_spfree (C) ;
-	C = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;	    /* return C */
+        cs_dl Amatrix, *A, *C, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
+        C = cs_dl_permute (A, Pinv, Q, 1) ;         /* C = A(p,q) */
+        D = cs_dl_transpose (C, 1) ;    /* sort C via double transpose */
+        cs_dl_spfree (C) ;
+        C = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;           /* return C */
     }
     cs_free (Pinv) ;
     cs_free (P) ;
diff --git a/CXSparse/MATLAB/CSparse/cs_print.m b/CXSparse/MATLAB/CSparse/cs_print.m
index 90d4ed0..7b40553 100644
--- a/CXSparse/MATLAB/CSparse/cs_print.m
+++ b/CXSparse/MATLAB/CSparse/cs_print.m
@@ -1,4 +1,4 @@
-function cs_print (A,brief)						    %#ok
+function cs_print (A,brief)                                                 %#ok
 %CS_PRINT print the contents of a sparse matrix.
 %   cs_print(A) prints a sparse matrix. cs_print(A,1) prints just a few entries.
 %
@@ -8,7 +8,6 @@ function cs_print (A,brief)						    %#ok
 %
 %   See also: DISPLAY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_print mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_print_mex.c b/CXSparse/MATLAB/CSparse/cs_print_mex.c
index 58864c2..ab0b302 100644
--- a/CXSparse/MATLAB/CSparse/cs_print_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_print_mex.c
@@ -11,24 +11,24 @@ void mexFunction
     CS_INT brief ;
     if (nargout > 0 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: cs_print(A,brief)") ;
+        mexErrMsgTxt ("Usage: cs_print(A,brief)") ;
     }
     brief = (nargin < 2) ? 0 : mxGetScalar (pargin [1]) ;   /* get brief */
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
-	cs_cl_print (A, brief) ;			    /* print A */
-	cs_free (A->x) ;
+        cs_cl Amatrix, *A ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        cs_cl_print (A, brief) ;                            /* print A */
+        cs_free (A->x) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
-	cs_print (A, brief) ;				    /* print A */
+        cs_dl Amatrix, *A ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
+        cs_print (A, brief) ;                               /* print A */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_qleft.m b/CXSparse/MATLAB/CSparse/cs_qleft.m
index 0762562..d6d89b7 100644
--- a/CXSparse/MATLAB/CSparse/cs_qleft.m
+++ b/CXSparse/MATLAB/CSparse/cs_qleft.m
@@ -15,17 +15,16 @@ function X = cs_qleft (V, Beta, p, Y)
 %      
 %   See also CS_QR, CS_QRIGHT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m2 n] = size (V) ;
 [m ny] = size (Y) ;
 X = Y ;
 if (m2 > m)
     if (issparse (Y))
-	X = [X ; sparse(m2-m,ny)] ;
+        X = [X ; sparse(m2-m,ny)] ;
     else
-	X = [X ; zeros(m2-m,ny)] ;
+        X = [X ; zeros(m2-m,ny)] ;
     end
 end
 if (~isempty (p))
diff --git a/CXSparse/MATLAB/CSparse/cs_qr.m b/CXSparse/MATLAB/CSparse/cs_qr.m
index 7c4767c..073fcbb 100644
--- a/CXSparse/MATLAB/CSparse/cs_qr.m
+++ b/CXSparse/MATLAB/CSparse/cs_qr.m
@@ -1,4 +1,4 @@
-function [V,beta,p,R,q] = cs_qr (A)					    %#ok
+function [V,beta,p,R,q] = cs_qr (A)                                         %#ok
 %CS_QR sparse QR factorization (Householder-based).
 %   [V,beta,p,R] = cs_qr(A) computes the QR factorization of A(p,:).
 %   [V,beta,p,R,q] = cs_qr(A) computes the QR factorization of A(p,q).
@@ -27,7 +27,6 @@ function [V,beta,p,R,q] = cs_qr (A)					    %#ok
 %
 %   See also CS_AMD, CS_QRIGHT, CS_QR, CS_DMPERM, QR, COLAMD.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_qr mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_qr_mex.c b/CXSparse/MATLAB/CSparse/cs_qr_mex.c
index 9d31207..eb1682d 100644
--- a/CXSparse/MATLAB/CSparse/cs_qr_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_qr_mex.c
@@ -11,73 +11,73 @@ void mexFunction
     CS_INT m, n, order, *p ;
     if (nargout > 5 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [V,beta,p,R,q] = cs_qr(A)") ;
+        mexErrMsgTxt ("Usage: [V,beta,p,R,q] = cs_qr(A)") ;
     }
-    order = (nargout == 5) ? 3 : 0 ;	    /* determine ordering */
+    order = (nargout == 5) ? 3 : 0 ;        /* determine ordering */
     m = mxGetM (pargin [0]) ;
     n = mxGetN (pargin [0]) ;
     if (m < n) mexErrMsgTxt ("A must have # rows >= # columns") ;
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cls *S ;
-	cs_cln *N ;
-	cs_cl Amatrix, *A, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	S = cs_cl_sqr (order, A, 1) ;	    /* symbolic QR ordering & analysis*/
-	N = cs_cl_qr (A, S) ;		    /* numeric QR factorization */
-	cs_free (A->x) ;
-	if (!N) mexErrMsgTxt ("qr failed") ;
-	cs_cl_dropzeros (N->L) ;	    /* drop zeros from V and sort */
-	D = cs_cl_transpose (N->L, 1) ;
-	cs_cl_spfree (N->L) ;
-	N->L = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	cs_cl_dropzeros (N->U) ;	    /* drop zeros from R and sort */
-	D = cs_cl_transpose (N->U, 1) ;
-	cs_cl_spfree (N->U) ;
-	N->U = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	m = N->L->m ;				    /* m may be larger now */
-	p = cs_cl_pinv (S->pinv, m) ;			/* p = pinv' */
-	pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;	/* return V */
-	cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
-	pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;	/* return p */
-	pargout [3] = cs_cl_mex_put_sparse (&(N->U)) ;	/* return R */
-	pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
-	cs_cl_nfree (N) ;
-	cs_cl_sfree (S) ;
+        cs_cls *S ;
+        cs_cln *N ;
+        cs_cl Amatrix, *A, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        S = cs_cl_sqr (order, A, 1) ;       /* symbolic QR ordering & analysis*/
+        N = cs_cl_qr (A, S) ;               /* numeric QR factorization */
+        cs_free (A->x) ;
+        if (!N) mexErrMsgTxt ("qr failed") ;
+        cs_cl_dropzeros (N->L) ;            /* drop zeros from V and sort */
+        D = cs_cl_transpose (N->L, 1) ;
+        cs_cl_spfree (N->L) ;
+        N->L = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        cs_cl_dropzeros (N->U) ;            /* drop zeros from R and sort */
+        D = cs_cl_transpose (N->U, 1) ;
+        cs_cl_spfree (N->U) ;
+        N->U = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        m = N->L->m ;                               /* m may be larger now */
+        p = cs_cl_pinv (S->pinv, m) ;                   /* p = pinv' */
+        pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;  /* return V */
+        cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
+        pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;  /* return p */
+        pargout [3] = cs_cl_mex_put_sparse (&(N->U)) ;  /* return R */
+        pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
+        cs_cl_nfree (N) ;
+        cs_cl_sfree (S) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dls *S ;
-	cs_dln *N ;
-	cs_dl Amatrix, *A, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
-	S = cs_dl_sqr (order, A, 1) ;	    /* symbolic QR ordering & analysis*/
-	N = cs_dl_qr (A, S) ;		    /* numeric QR factorization */
-	if (!N) mexErrMsgTxt ("qr failed") ;
-	cs_dl_dropzeros (N->L) ;	    /* drop zeros from V and sort */
-	D = cs_dl_transpose (N->L, 1) ;
-	cs_dl_spfree (N->L) ;
-	N->L = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	cs_dl_dropzeros (N->U) ;	    /* drop zeros from R and sort */
-	D = cs_dl_transpose (N->U, 1) ;
-	cs_dl_spfree (N->U) ;
-	N->U = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	m = N->L->m ;				    /* m may be larger now */
-	p = cs_dl_pinv (S->pinv, m) ;			/* p = pinv' */
-	pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;	/* return V */
-	cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
-	pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;	/* return p */
-	pargout [3] = cs_dl_mex_put_sparse (&(N->U)) ;	/* return R */
-	pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
-	cs_dl_nfree (N) ;
-	cs_dl_sfree (S) ;
+        cs_dls *S ;
+        cs_dln *N ;
+        cs_dl Amatrix, *A, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ; /* get A */
+        S = cs_dl_sqr (order, A, 1) ;       /* symbolic QR ordering & analysis*/
+        N = cs_dl_qr (A, S) ;               /* numeric QR factorization */
+        if (!N) mexErrMsgTxt ("qr failed") ;
+        cs_dl_dropzeros (N->L) ;            /* drop zeros from V and sort */
+        D = cs_dl_transpose (N->L, 1) ;
+        cs_dl_spfree (N->L) ;
+        N->L = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        cs_dl_dropzeros (N->U) ;            /* drop zeros from R and sort */
+        D = cs_dl_transpose (N->U, 1) ;
+        cs_dl_spfree (N->U) ;
+        N->U = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        m = N->L->m ;                               /* m may be larger now */
+        p = cs_dl_pinv (S->pinv, m) ;                   /* p = pinv' */
+        pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;  /* return V */
+        cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
+        pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;  /* return p */
+        pargout [3] = cs_dl_mex_put_sparse (&(N->U)) ;  /* return R */
+        pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
+        cs_dl_nfree (N) ;
+        cs_dl_sfree (S) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_qright.m b/CXSparse/MATLAB/CSparse/cs_qright.m
index 951c60a..736615e 100644
--- a/CXSparse/MATLAB/CSparse/cs_qright.m
+++ b/CXSparse/MATLAB/CSparse/cs_qright.m
@@ -13,8 +13,7 @@ function X = cs_qright (V, Beta, p, Y)
 %
 %   See also CS_QR, CS_QLEFT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (V) ;
 X = Y ;
diff --git a/CXSparse/MATLAB/CSparse/cs_qrsol.m b/CXSparse/MATLAB/CSparse/cs_qrsol.m
index 3c49456..bcc5ec8 100644
--- a/CXSparse/MATLAB/CSparse/cs_qrsol.m
+++ b/CXSparse/MATLAB/CSparse/cs_qrsol.m
@@ -1,4 +1,4 @@
-function x = cs_qrsol (A,b,order)					    %#ok
+function x = cs_qrsol (A,b,order)                                           %#ok
 %CS_QRSOL solve a sparse least-squares problem.
 %   x = cs_qrsol(A,b) solves the over-determined least squares problem to
 %   find x that minimizes norm(A*x-b), where b is a full vector and
@@ -17,7 +17,6 @@ function x = cs_qrsol (A,b,order)					    %#ok
 %
 %   See also CS_QR, CS_AMD, CS_LUSOL, CS_CHOLSOL, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_qrsol mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_qrsol_mex.c b/CXSparse/MATLAB/CSparse/cs_qrsol_mex.c
index 18af03d..bc5330a 100644
--- a/CXSparse/MATLAB/CSparse/cs_qrsol_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_qrsol_mex.c
@@ -11,7 +11,7 @@ void mexFunction
     CS_INT k, order ;
     if (nargout > 1 || nargin < 2 || nargin > 3)
     {
-	mexErrMsgTxt ("Usage: x = cs_qrsol(A,b,order)") ;
+        mexErrMsgTxt ("Usage: x = cs_qrsol(A,b,order)") ;
     }
     order = (nargin < 3) ? 3 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
@@ -20,35 +20,35 @@ void mexFunction
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, Amatrix ;
-	cs_complex_t *x, *b ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	b = cs_cl_mex_get_double (A->m, pargin [1]) ;		/* get b */
-	x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (cs_complex_t)) ;
-	for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;		/* x = b */
-	cs_free (b) ;
-	if (!cs_cl_qrsol (order, A, x))				/* x = A\x */
-	{
-	    mexErrMsgTxt ("QR solve failed") ;
-	}
-	pargout [0] = cs_cl_mex_put_double (A->n, x) ;		/* return x */
+        cs_cl *A, Amatrix ;
+        cs_complex_t *x, *b ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        b = cs_cl_mex_get_double (A->m, pargin [1]) ;           /* get b */
+        x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (cs_complex_t)) ;
+        for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;            /* x = b */
+        cs_free (b) ;
+        if (!cs_cl_qrsol (order, A, x))                         /* x = A\x */
+        {
+            mexErrMsgTxt ("QR solve failed") ;
+        }
+        pargout [0] = cs_cl_mex_put_double (A->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, Amatrix ;
-	double *x, *b ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	    /* get A */
-	b = cs_dl_mex_get_double (A->m, pargin [1]) ;		    /* get b */
-	x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (double)) ;   /* x = b */
-	for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;
-	if (!cs_dl_qrsol (order, A, x))				/* x = A\x */
-	{
-	    mexErrMsgTxt ("QR solve failed") ;
-	}
-	cs_dl_mex_put_double (A->n, x, &(pargout [0])) ;	/* return x */
-	cs_free (x) ;
+        cs_dl *A, Amatrix ;
+        double *x, *b ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;     /* get A */
+        b = cs_dl_mex_get_double (A->m, pargin [1]) ;               /* get b */
+        x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (double)) ;   /* x = b */
+        for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;
+        if (!cs_dl_qrsol (order, A, x))                         /* x = A\x */
+        {
+            mexErrMsgTxt ("QR solve failed") ;
+        }
+        cs_dl_mex_put_double (A->n, x, &(pargout [0])) ;        /* return x */
+        cs_free (x) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_randperm.m b/CXSparse/MATLAB/CSparse/cs_randperm.m
index 845cce8..b065d4c 100644
--- a/CXSparse/MATLAB/CSparse/cs_randperm.m
+++ b/CXSparse/MATLAB/CSparse/cs_randperm.m
@@ -1,4 +1,4 @@
-function p = cs_randperm (n, seed)					    %#ok
+function p = cs_randperm (n, seed)                                          %#ok
 %CS_RANDPERM random permutation.
 %   p = cs_randperm (n) returns a repeatable random permutation of 1:n.
 %   p = cs_randperm (n,seed) returns the random permutation using the given
@@ -12,7 +12,6 @@ function p = cs_randperm (n, seed)					    %#ok
 %
 %   See also CS_DMPERM, RAND, RANDPERM
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_randperm mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_randperm_mex.c b/CXSparse/MATLAB/CSparse/cs_randperm_mex.c
index 0398ede..1d534c6 100644
--- a/CXSparse/MATLAB/CSparse/cs_randperm_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_randperm_mex.c
@@ -17,12 +17,12 @@ void mexFunction
     CS_INT iseed, n, *p ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: p = cs_randperm(n,seed)") ;
+        mexErrMsgTxt ("Usage: p = cs_randperm(n,seed)") ;
     }
     seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;
     iseed = (seed > 0 && seed < 1) ? (seed * RAND_MAX) : seed ;
     n = mxGetScalar (pargin [0]) ;
     n = CS_MAX (n, 0) ;
     p = cs_dl_randperm (n, iseed) ;
-    pargout [0] = cs_dl_mex_put_int (p, n, 1, 1) ;	    /* return p */
+    pargout [0] = cs_dl_mex_put_int (p, n, 1, 1) ;          /* return p */
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_scc.m b/CXSparse/MATLAB/CSparse/cs_scc.m
index 787b24f..c45494f 100644
--- a/CXSparse/MATLAB/CSparse/cs_scc.m
+++ b/CXSparse/MATLAB/CSparse/cs_scc.m
@@ -1,4 +1,4 @@
-function [p,r] = cs_scc (A)						    %#ok
+function [p,r] = cs_scc (A)                                                 %#ok
 %CS_SCC strongly-connected components of a square sparse matrix.
 %   [p,r] = cs_scc(A) finds a permutation p so that A(p,p) is permuted into
 %   block upper triangular form.  The diagonal of A is ignored.  The kth block
@@ -11,7 +11,6 @@ function [p,r] = cs_scc (A)						    %#ok
 %
 %   See also CS_DMPERM, DMPERM, CS_SCC2.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_scc mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_scc2.m b/CXSparse/MATLAB/CSparse/cs_scc2.m
index a511235..e25f78a 100644
--- a/CXSparse/MATLAB/CSparse/cs_scc2.m
+++ b/CXSparse/MATLAB/CSparse/cs_scc2.m
@@ -19,33 +19,32 @@ function [p, q, r, s] = cs_scc2 (A, bipartite)
 %
 %   See also CS_DMPERM, DMPERM, CS_SCC, CCSPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 if (nargin < 2)
     bipartite = 0 ;
 end
 
-if (m ~= n | bipartite)							    %#ok
+if (m ~= n | bipartite)                                                     %#ok
 
     % find the connected components of [I A ; A' 0]
     S = spaugment (A) ;
     [psym,rsym] = cs_scc (S) ;
-    p = psym (find (psym <= m)) ;					    %#ok
-    q = psym (find (psym > m)) - m ;					    %#ok
+    p = psym (find (psym <= m)) ;                                           %#ok
+    q = psym (find (psym > m)) - m ;                                        %#ok
     nb = length (rsym) - 1 ;
     r = zeros (1,nb+1) ;
     s = zeros (1,nb+1) ;
     krow = 1 ;
     kcol = 1 ;
     for k = 1:nb
-	% find the rows and columns in the kth component
-	r (k) = krow ;
-	s (k) = kcol ;
-	ksym = psym (rsym (k):rsym (k+1)-1) ;
-	krow = krow + length (find (ksym <= m)) ;
-	kcol = kcol + length (find (ksym >  m)) ;
+        % find the rows and columns in the kth component
+        r (k) = krow ;
+        s (k) = kcol ;
+        ksym = psym (rsym (k):rsym (k+1)-1) ;
+        krow = krow + length (find (ksym <= m)) ;
+        kcol = kcol + length (find (ksym >  m)) ;
     end
     r (nb+1) = m+1 ;
     s (nb+1) = n+1 ;
diff --git a/CXSparse/MATLAB/CSparse/cs_scc_mex.c b/CXSparse/MATLAB/CSparse/cs_scc_mex.c
index 28ad3f2..568d440 100644
--- a/CXSparse/MATLAB/CSparse/cs_scc_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_scc_mex.c
@@ -13,9 +13,9 @@ void mexFunction
     CS_INT n, j, *Ap2 ;
     if (nargout > 2 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [p,r] = cs_scc(A)") ;
+        mexErrMsgTxt ("Usage: [p,r] = cs_scc(A)") ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, 1, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, 1, 0, pargin [0]) ;     /* get A */
     /* cs_scc modifies A->p and then restores it (in cs_dfs).  Avoid the issue
      * of a mexFunction modifying its input (even temporarily) by making a copy
      * of A->p.  This issue does not arise in cs_dmperm, because that function
@@ -24,9 +24,9 @@ void mexFunction
     Ap2 = cs_dl_malloc (n+1, sizeof (CS_INT)) ;
     for (j = 0 ; j <= n ; j++) Ap2 [j] = A->p [j] ;
     A->p = Ap2 ;
-    D = cs_dl_scc (A) ;					/* find conn. comp. */
-    pargout [0] = cs_dl_mex_put_int (D->p, n, 1, 0) ;		/* return p */
-    pargout [1] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;	/* return r */
+    D = cs_dl_scc (A) ;                                 /* find conn. comp. */
+    pargout [0] = cs_dl_mex_put_int (D->p, n, 1, 0) ;           /* return p */
+    pargout [1] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;     /* return r */
     cs_dl_dfree (D) ;
-    cs_free (Ap2) ;	/* free the copy of A->p */
+    cs_free (Ap2) ;     /* free the copy of A->p */
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_sep.m b/CXSparse/MATLAB/CSparse/cs_sep.m
index 88ba1bb..ee5a0a4 100644
--- a/CXSparse/MATLAB/CSparse/cs_sep.m
+++ b/CXSparse/MATLAB/CSparse/cs_sep.m
@@ -10,12 +10,11 @@ function [s,as,bs] = cs_sep (A,a,b)
 %
 %   See also CS_DMPERM, CS_NSEP, CS_ESEP, CS_ND.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [p q r s cc rr] = cs_dmperm (A (a,b)) ;
 s = [(a (p (1:rr(2)-1))) (b (q (cc(3):(cc(5)-1))))] ;
 w = ones (1, size (A,1)) ;
 w (s) = 0 ;
-as = a (find (w (a))) ;							    %#ok
-bs = b (find (w (b))) ;							    %#ok
+as = a (find (w (a))) ;                                                     %#ok
+bs = b (find (w (b))) ;                                                     %#ok
diff --git a/CXSparse/MATLAB/CSparse/cs_sparse.m b/CXSparse/MATLAB/CSparse/cs_sparse.m
index cad6e30..9553fb3 100644
--- a/CXSparse/MATLAB/CSparse/cs_sparse.m
+++ b/CXSparse/MATLAB/CSparse/cs_sparse.m
@@ -1,4 +1,4 @@
-function A = cs_sparse (i,j,x)						    %#ok
+function A = cs_sparse (i,j,x)                                              %#ok
 %CS_SPARSE convert a triplet form into a sparse matrix.
 %   A = cs_sparse(i,j,x) is identical to A = sparse(i,j,x), except that x must
 %   be real, and the length of i, j, and x must be the same.
@@ -11,7 +11,6 @@ function A = cs_sparse (i,j,x)						    %#ok
 %
 %   See also FIND, SPARSE, SPCONVERT.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_sparse mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_sparse_mex.c b/CXSparse/MATLAB/CSparse/cs_sparse_mex.c
index 4c22b71..80d19d7 100644
--- a/CXSparse/MATLAB/CSparse/cs_sparse_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_sparse_mex.c
@@ -10,49 +10,49 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: A = cs_sparse(i,j,x)") ;
+        mexErrMsgTxt ("Usage: A = cs_sparse(i,j,x)") ;
     }
     if (mxIsComplex (pargin [2]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, *C, *T, Tmatrix ;
-	T = &Tmatrix ;			/* get i,j,x and copy to triplet form */
-	T->nz = mxGetM (pargin [0]) ;
-	T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
-	T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
-	cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
-	T->x = cs_cl_mex_get_double (T->nz, pargin [2]) ;
-	T->nzmax = T->nz ;
-	C = cs_cl_compress (T) ;		/* create sparse matrix C */
-	cs_cl_dupl (C) ;			/* remove duplicates from C */
-	cs_cl_dropzeros (C) ;			/* remove zeros from C */
-	A = cs_cl_transpose (C, -1) ;		/* A=C.' */
-	cs_cl_spfree (C) ;
-	pargout [0] = cs_cl_mex_put_sparse (&A) ;	/* return A */
-	cs_free (T->p) ;
-	cs_free (T->i) ;
-	cs_free (T->x) ;			/* free copy of complex values*/
+        cs_cl *A, *C, *T, Tmatrix ;
+        T = &Tmatrix ;                  /* get i,j,x and copy to triplet form */
+        T->nz = mxGetM (pargin [0]) ;
+        T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
+        T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
+        cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
+        T->x = cs_cl_mex_get_double (T->nz, pargin [2]) ;
+        T->nzmax = T->nz ;
+        C = cs_cl_compress (T) ;                /* create sparse matrix C */
+        cs_cl_dupl (C) ;                        /* remove duplicates from C */
+        cs_cl_dropzeros (C) ;                   /* remove zeros from C */
+        A = cs_cl_transpose (C, -1) ;           /* A=C.' */
+        cs_cl_spfree (C) ;
+        pargout [0] = cs_cl_mex_put_sparse (&A) ;       /* return A */
+        cs_free (T->p) ;
+        cs_free (T->i) ;
+        cs_free (T->x) ;                        /* free copy of complex values*/
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, *C, *T, Tmatrix ;
-	T = &Tmatrix ;			/* get i,j,x and copy to triplet form */
-	T->nz = mxGetM (pargin [0]) ;
-	T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
-	T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
-	cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
-	T->x = mxGetPr (pargin [2]) ;
-	T->nzmax = T->nz ;
-	C = cs_dl_compress (T) ;		/* create sparse matrix C */
-	cs_dl_dupl (C) ;			/* remove duplicates from C */
-	cs_dl_dropzeros (C) ;			/* remove zeros from C */
-	A = cs_dl_transpose (C, 1) ;		/* A=C' */
-	cs_dl_spfree (C) ;
-	pargout [0] = cs_dl_mex_put_sparse (&A) ;	/* return A */
-	cs_free (T->p) ;
-	cs_free (T->i) ;
+        cs_dl *A, *C, *T, Tmatrix ;
+        T = &Tmatrix ;                  /* get i,j,x and copy to triplet form */
+        T->nz = mxGetM (pargin [0]) ;
+        T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
+        T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
+        cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
+        T->x = mxGetPr (pargin [2]) ;
+        T->nzmax = T->nz ;
+        C = cs_dl_compress (T) ;                /* create sparse matrix C */
+        cs_dl_dupl (C) ;                        /* remove duplicates from C */
+        cs_dl_dropzeros (C) ;                   /* remove zeros from C */
+        A = cs_dl_transpose (C, 1) ;            /* A=C' */
+        cs_dl_spfree (C) ;
+        pargout [0] = cs_dl_mex_put_sparse (&A) ;       /* return A */
+        cs_free (T->p) ;
+        cs_free (T->i) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_sqr.m b/CXSparse/MATLAB/CSparse/cs_sqr.m
index cdb7d8c..5ede9f5 100644
--- a/CXSparse/MATLAB/CSparse/cs_sqr.m
+++ b/CXSparse/MATLAB/CSparse/cs_sqr.m
@@ -1,4 +1,4 @@
-function [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr (A)			    %#ok
+function [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr (A)                       %#ok
 %CS_SQR symbolic sparse QR factorization.
 %   [vnz,rnz,parent,c,leftmost,p] = cs_sqr(A): symbolic QR of A(p,:).
 %   [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A) computes the symbolic QR
@@ -18,8 +18,7 @@ function [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr (A)			    %#ok
 %       cspy (A (p,q)) ;
 %
 %   See also CS_AMD, CS_QR.
-%
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_sqr mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_sqr_mex.c b/CXSparse/MATLAB/CSparse/cs_sqr_mex.c
index 6c6f75f..3f0364b 100644
--- a/CXSparse/MATLAB/CSparse/cs_sqr_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_sqr_mex.c
@@ -14,27 +14,27 @@ void mexFunction
     CS_INT m, n, order, *p ;
     if (nargout > 7 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A)") ;
+        mexErrMsgTxt ("Usage: [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A)") ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;     /* get A */
     m = A->m ;
     n = A->n ;
     if (m < n) mexErrMsgTxt ("A must have # rows >= # columns") ;
-    order = (nargout == 7) ? 3 : 0 ;	    /* determine ordering */
-    S = cs_dl_sqr (order, A, 1) ;	    /* symbolic QR ordering & analysis*/
+    order = (nargout == 7) ? 3 : 0 ;        /* determine ordering */
+    S = cs_dl_sqr (order, A, 1) ;           /* symbolic QR ordering & analysis*/
     if (!S) mexErrMsgTxt ("cs_sqr failed") ;
     s = S->lnz ;
-    cs_dl_mex_put_double (1, &s, &(pargout [0])) ;	    /* return nnz(V) */
+    cs_dl_mex_put_double (1, &s, &(pargout [0])) ;          /* return nnz(V) */
     s = S->unz ;
-    cs_dl_mex_put_double (1, &s, &(pargout [1])) ;	    /* return nnz(R) */
+    cs_dl_mex_put_double (1, &s, &(pargout [1])) ;          /* return nnz(R) */
     pargout [2] = cs_dl_mex_put_int (S->parent, n, 1, 0) ;  /* return parent */
-    pargout [3] = cs_dl_mex_put_int (S->cp, n, 0, 0) ;	    /* return c */
+    pargout [3] = cs_dl_mex_put_int (S->cp, n, 0, 0) ;      /* return c */
     pargout [4] = cs_dl_mex_put_int (S->leftmost, m, 1, 0) ;/* return leftmost*/
-    p = cs_dl_pinv (S->pinv, S->m2) ;			    /* p = pinv' */
-    pargout [5] = cs_dl_mex_put_int (p, S->m2, 1, 1) ;	    /* return p */
+    p = cs_dl_pinv (S->pinv, S->m2) ;                       /* p = pinv' */
+    pargout [5] = cs_dl_mex_put_int (p, S->m2, 1, 1) ;      /* return p */
     if (nargout > 6)
     {
-	pargout [6] = cs_dl_mex_put_int (S->q, n, 1, 0) ;   /* return q */
+        pargout [6] = cs_dl_mex_put_int (S->q, n, 1, 0) ;   /* return q */
     }
     cs_dl_sfree (S) ;
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_symperm.m b/CXSparse/MATLAB/CSparse/cs_symperm.m
index a913553..64e96d3 100644
--- a/CXSparse/MATLAB/CSparse/cs_symperm.m
+++ b/CXSparse/MATLAB/CSparse/cs_symperm.m
@@ -1,4 +1,4 @@
-function C = cs_symperm (A,p)						    %#ok
+function C = cs_symperm (A,p)                                               %#ok
 %CS_SYMPERM symmetric permutation of a symmetric matrix.
 %   C = cs_symperm(A,p) computes C = A(p,p), but accesses only the
 %   upper triangular part of A, and returns C upper triangular (A and C are
@@ -14,7 +14,6 @@ function C = cs_symperm (A,p)						    %#ok
 %
 %   See also CS_PERMUTE, SUBSREF, TRIU.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_symperm mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_symperm_mex.c b/CXSparse/MATLAB/CSparse/cs_symperm_mex.c
index d6c90b5..62b06e0 100644
--- a/CXSparse/MATLAB/CSparse/cs_symperm_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_symperm_mex.c
@@ -11,42 +11,42 @@ void mexFunction
     CS_INT ignore, n, *P, *Pinv ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_symperm(A,p)") ;
+        mexErrMsgTxt ("Usage: C = cs_symperm(A,p)") ;
     }
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A, *C, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;
-	n = A->n ;
-	P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;	/* get P */
-	Pinv = cs_cl_pinv (P, n) ;				/* P=Pinv' */
-	C = cs_cl_symperm (A, Pinv, 1) ;			/* C = A(p,p) */
-	D = cs_cl_transpose (C, 1) ;				/* sort C */
-	cs_cl_spfree (C) ;
-	C = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;		/* return C */
-	cs_free (P) ;
-	cs_free (Pinv) ;
+        cs_cl Amatrix, *A, *C, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;
+        n = A->n ;
+        P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;     /* get P */
+        Pinv = cs_cl_pinv (P, n) ;                              /* P=Pinv' */
+        C = cs_cl_symperm (A, Pinv, 1) ;                        /* C = A(p,p) */
+        D = cs_cl_transpose (C, 1) ;                            /* sort C */
+        cs_cl_spfree (C) ;
+        C = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;               /* return C */
+        cs_free (P) ;
+        cs_free (Pinv) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A, *C, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;
-	n = A->n ;
-	P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;	/* get P */
-	Pinv = cs_dl_pinv (P, n) ;				/* P=Pinv' */
-	C = cs_dl_symperm (A, Pinv, 1) ;			/* C = A(p,p) */
-	D = cs_dl_transpose (C, 1) ;				/* sort C */
-	cs_dl_spfree (C) ;
-	C = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;		/* return C */
-	cs_free (P) ;
-	cs_free (Pinv) ;
+        cs_dl Amatrix, *A, *C, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;
+        n = A->n ;
+        P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;     /* get P */
+        Pinv = cs_dl_pinv (P, n) ;                              /* P=Pinv' */
+        C = cs_dl_symperm (A, Pinv, 1) ;                        /* C = A(p,p) */
+        D = cs_dl_transpose (C, 1) ;                            /* sort C */
+        cs_dl_spfree (C) ;
+        C = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;               /* return C */
+        cs_free (P) ;
+        cs_free (Pinv) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_thumb_mex.c b/CXSparse/MATLAB/CSparse/cs_thumb_mex.c
index f1ce68b..f453eb5 100644
--- a/CXSparse/MATLAB/CSparse/cs_thumb_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_thumb_mex.c
@@ -22,7 +22,7 @@ void mexFunction
     double aij, ax, az, *S, *Ax, *Az ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: S = cs_thumb(A,k)") ;
+        mexErrMsgTxt ("Usage: S = cs_thumb(A,k)") ;
     }
     cs_mex_check (0, -1, -1, 0, 1, 1, pargin [0]) ;
     m = mxGetM (pargin [0]) ;
@@ -42,24 +42,24 @@ void mexFunction
     Az = (mxIsComplex (pargin [0])) ? mxGetPi (pargin [0]) : NULL ;
     for (j = 0 ; j < n ; j++)
     {
-	sj = j/s ;
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    si = Ai [p] / s ;
-	    ij = INDEX (si,sj,m2) ;
-	    ax = Ax [p] ;
-	    az = Az ? Az [p] : 0 ;
-	    if (az == 0)
-	    {
-		aij = fabs (ax) ;
-	    }
-	    else
-	    {
-		aij = sqrt (ax*ax + az*az) ;
-	    }
-	    if (ISNAN (aij)) aij = BIG_VALUE ;
-	    aij = CS_MIN (BIG_VALUE, aij) ;
-	    S [ij] = CS_MAX (S [ij], aij) ;
-	}
+        sj = j/s ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            si = Ai [p] / s ;
+            ij = INDEX (si,sj,m2) ;
+            ax = Ax [p] ;
+            az = Az ? Az [p] : 0 ;
+            if (az == 0)
+            {
+                aij = fabs (ax) ;
+            }
+            else
+            {
+                aij = sqrt (ax*ax + az*az) ;
+            }
+            if (ISNAN (aij)) aij = BIG_VALUE ;
+            aij = CS_MIN (BIG_VALUE, aij) ;
+            S [ij] = CS_MAX (S [ij], aij) ;
+        }
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_transpose.m b/CXSparse/MATLAB/CSparse/cs_transpose.m
index d94ae6c..f47cbf3 100644
--- a/CXSparse/MATLAB/CSparse/cs_transpose.m
+++ b/CXSparse/MATLAB/CSparse/cs_transpose.m
@@ -1,4 +1,4 @@
-function C = cs_transpose (A)						    %#ok
+function C = cs_transpose (A)                                               %#ok
 %CS_TRANSPOSE transpose a sparse matrix.
 %   C = cs_transpose(A), computes C = A'
 %   C = cs_transpose(A,-1) computes C=A.'
@@ -11,8 +11,7 @@ function C = cs_transpose (A)						    %#ok
 %
 %   See also TRANSPOSE, CTRANSPOSE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_transpose mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/CSparse/cs_transpose_mex.c b/CXSparse/MATLAB/CSparse/cs_transpose_mex.c
index c36803a..8688c4f 100644
--- a/CXSparse/MATLAB/CSparse/cs_transpose_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_transpose_mex.c
@@ -12,26 +12,26 @@ void mexFunction
     CS_INT values ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_transpose(A,kind)") ;
+        mexErrMsgTxt ("Usage: C = cs_transpose(A,kind)") ;
     }
     values = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;
     values = (values <= 0) ? -1 : 1 ;
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A, *C ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	C = cs_cl_transpose (A, values) ;			/* C = A' */
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;		/* return C */
+        cs_cl Amatrix, *A, *C ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        C = cs_cl_transpose (A, values) ;                       /* C = A' */
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;               /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A, *C ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
-	C = cs_dl_transpose (A, values) ;			/* C = A' */
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;		/* return C */
+        cs_dl Amatrix, *A, *C ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ; /* get A */
+        C = cs_dl_transpose (A, values) ;                       /* C = A' */
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;               /* return C */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_updown.m b/CXSparse/MATLAB/CSparse/cs_updown.m
index f4fa3cc..7906f22 100644
--- a/CXSparse/MATLAB/CSparse/cs_updown.m
+++ b/CXSparse/MATLAB/CSparse/cs_updown.m
@@ -1,4 +1,4 @@
-function L = cs_updown (L, c, parent, sigma)				    %#ok
+function L = cs_updown (L, c, parent, sigma)                                %#ok
 %CS_UPDOWN rank-1 update/downdate of a sparse Cholesky factorization.
 %   L = cs_updown(L,c,parent) computes the rank-1 update L = chol(L*L'+c*c')',
 %   where parent is the elimination tree of L.  c must be a sparse column
@@ -20,7 +20,6 @@ function L = cs_updown (L, c, parent, sigma)				    %#ok
 %
 %   See also CS_ETREE, CS_CHOL, ETREE, CHOLUPDATE, CHOL.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_updown mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_updown_mex.c b/CXSparse/MATLAB/CSparse/cs_updown_mex.c
index c42769b..e9f058e 100644
--- a/CXSparse/MATLAB/CSparse/cs_updown_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_updown_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     char sigma_string [20] ;
     if (nargout > 1 || nargin < 3 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: L = cs_updown(L,C,parent,sigma)") ;
+        mexErrMsgTxt ("Usage: L = cs_updown(L,C,parent,sigma)") ;
     }
     if (nargin > 3 && mxIsChar (pargin [3]))
     {
-	mxGetString (pargin [3], sigma_string, 8) ;
-	sigma = (sigma_string [0] == '-') ? (-1) : 1 ;
+        mxGetString (pargin [3], sigma_string, 8) ;
+        sigma = (sigma_string [0] == '-') ? (-1) : 1 ;
     }
     n = mxGetN (pargin [0]) ;
     parent = cs_dl_mex_get_int (n, pargin [2], &ignore, 0) ; /* get parent*/
@@ -26,83 +26,83 @@ void mexFunction
     {
 
 #ifndef NCOMPLEX
-	cs_cl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
-	/* get input L, and copy MATLAB complex to C complex type */
-	Lin = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;
+        cs_cl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
+        /* get input L, and copy MATLAB complex to C complex type */
+        Lin = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;
 
-	/* make a copy of L (this can take more work than updating L itself) */
-	lnz = Lin->p [n] ;
-	L = cs_cl_spalloc (n, n, lnz, 0, 0) ;
-	for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
-	for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
+        /* make a copy of L (this can take more work than updating L itself) */
+        lnz = Lin->p [n] ;
+        L = cs_cl_spalloc (n, n, lnz, 0, 0) ;
+        for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
+        for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
 
-	/* complex values already copied into Lin->x, use shallow copy for L */
-	L->x = Lin->x ;
+        /* complex values already copied into Lin->x, use shallow copy for L */
+        L->x = Lin->x ;
 
-	cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;	   /* get C */
-	C = cs_cl_mex_get_sparse (&Cmatrix, 0, pargin [1]) ;
+        cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;     /* get C */
+        C = cs_cl_mex_get_sparse (&Cmatrix, 0, pargin [1]) ;
 
-	/* do the update one column at a time */
-	Cvec = &Cvector ;
-	Cvec->m = n ;
-	Cvec->n = 1 ;
-	Cvec->p = cp ;
-	Cvec->nz = -1 ;
-	cp [0] = 0 ;
-	for (k = 0 ; k < C->n ; k++)
-	{
-	    /* extract C(:,k) */ 
-	    cp [1] = C->p [k+1] - C->p [k] ;
-	    Cvec->nzmax = cp [1] ;
-	    Cvec->i = C->i + C->p [k] ;
-	    Cvec->x = C->x + C->p [k] ;
-	    /* update/downdate */
-	    ok = cs_cl_updown (L, sigma, Cvec, parent) ;
-	    if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
-	}
-	/* return new L */ 
-	pargout [0] = cs_cl_mex_put_sparse (&L) ;
+        /* do the update one column at a time */
+        Cvec = &Cvector ;
+        Cvec->m = n ;
+        Cvec->n = 1 ;
+        Cvec->p = cp ;
+        Cvec->nz = -1 ;
+        cp [0] = 0 ;
+        for (k = 0 ; k < C->n ; k++)
+        {
+            /* extract C(:,k) */ 
+            cp [1] = C->p [k+1] - C->p [k] ;
+            Cvec->nzmax = cp [1] ;
+            Cvec->i = C->i + C->p [k] ;
+            Cvec->x = C->x + C->p [k] ;
+            /* update/downdate */
+            ok = cs_cl_updown (L, sigma, Cvec, parent) ;
+            if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
+        }
+        /* return new L */ 
+        pargout [0] = cs_cl_mex_put_sparse (&L) ;
 
-	cs_free (C->x) ;	/* free complex copy of C */
+        cs_free (C->x) ;        /* free complex copy of C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
 
     }
     else
     {
 
-	cs_dl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
-	/* get input L */
-	Lin = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;
-	/* make a copy of L (this can take more work than updating L itself) */
-	lnz = Lin->p [n] ;
-	L = cs_dl_spalloc (n, n, lnz, 1, 0) ;
-	for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
-	for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
-	for (k = 0 ; k < lnz ; k++) L->x [k] = Lin->x [k] ;
-	cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;	   /* get C */
-	C = cs_dl_mex_get_sparse (&Cmatrix, 0, 1, pargin [1]) ;
+        cs_dl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
+        /* get input L */
+        Lin = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;
+        /* make a copy of L (this can take more work than updating L itself) */
+        lnz = Lin->p [n] ;
+        L = cs_dl_spalloc (n, n, lnz, 1, 0) ;
+        for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
+        for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
+        for (k = 0 ; k < lnz ; k++) L->x [k] = Lin->x [k] ;
+        cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;     /* get C */
+        C = cs_dl_mex_get_sparse (&Cmatrix, 0, 1, pargin [1]) ;
 
-	/* do the update one column at a time */
-	Cvec = &Cvector ;
-	Cvec->m = n ;
-	Cvec->n = 1 ;
-	Cvec->p = cp ;
-	Cvec->nz = -1 ;
-	cp [0] = 0 ;
-	for (k = 0 ; k < C->n ; k++)
-	{
-	    /* extract C(:,k) */ 
-	    cp [1] = C->p [k+1] - C->p [k] ;
-	    Cvec->nzmax = cp [1] ;
-	    Cvec->i = C->i + C->p [k] ;
-	    Cvec->x = C->x + C->p [k] ;
-	    /* update/downdate */
-	    ok = cs_dl_updown (L, sigma, Cvec, parent) ;
-	    if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
-	}
-	/* return new L */ 
-	pargout [0] = cs_dl_mex_put_sparse (&L) ;
+        /* do the update one column at a time */
+        Cvec = &Cvector ;
+        Cvec->m = n ;
+        Cvec->n = 1 ;
+        Cvec->p = cp ;
+        Cvec->nz = -1 ;
+        cp [0] = 0 ;
+        for (k = 0 ; k < C->n ; k++)
+        {
+            /* extract C(:,k) */ 
+            cp [1] = C->p [k+1] - C->p [k] ;
+            Cvec->nzmax = cp [1] ;
+            Cvec->i = C->i + C->p [k] ;
+            Cvec->x = C->x + C->p [k] ;
+            /* update/downdate */
+            ok = cs_dl_updown (L, sigma, Cvec, parent) ;
+            if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
+        }
+        /* return new L */ 
+        pargout [0] = cs_dl_mex_put_sparse (&L) ;
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_usolve.m b/CXSparse/MATLAB/CSparse/cs_usolve.m
index 842dcfa..996531b 100644
--- a/CXSparse/MATLAB/CSparse/cs_usolve.m
+++ b/CXSparse/MATLAB/CSparse/cs_usolve.m
@@ -1,4 +1,4 @@
-function x = cs_usolve (U,b)						    %#ok
+function x = cs_usolve (U,b)                                                %#ok
 %CS_USOLVE solve a sparse upper triangular system U*x=b.
 %   x = cs_usolve(U,b) computes x = U\b, U must be lower triangular with a
 %   zero-free diagonal.  b must be a column vector.  x is full if b is full.
@@ -15,7 +15,6 @@ function x = cs_usolve (U,b)						    %#ok
 %
 %   See also CS_LSOLVE, CS_LTSOLVE, CS_UTSOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_usolve mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_usolve_mex.c b/CXSparse/MATLAB/CSparse/cs_usolve_mex.c
index b1bb32c..4f297e6 100644
--- a/CXSparse/MATLAB/CSparse/cs_usolve_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_usolve_mex.c
@@ -34,59 +34,59 @@ void mexFunction
     CS_INT top, nz, p, *xi, n ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_usolve(U,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_usolve(U,b)") ;
     }
     if (mxIsSparse (pargin [1]))
     {
-	cs_dl Umatrix, Bmatrix, *U, *B, *X ;
-	double *x ;
-	if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
-	{
-	    mexErrMsgTxt ("sparse complex case not supported") ;
-	}
-	U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;/* get U */
-	n = U->n ;
-	B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
-	cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
-	xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;	    /* get workspace */
-	x  = cs_dl_malloc (n, sizeof (double)) ;
-	top = cs_dl_spsolve (U, B, 0, xi, x, NULL, 0) ;	    /* x = U\b */
-	X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;	    /* create sparse x*/
-	X->p [0] = 0 ;
-	nz = 0 ;
-	for (p = top ; p < n ; p++)
-	{
-	    X->i [nz] = xi [p] ;
-	    X->x [nz++] = x [xi [p]] ;
-	}
-	X->p [1] = nz ;
-	pargout [0] = cs_dl_mex_put_sparse (&X) ;
-	cs_free (x) ;
-	cs_free (xi) ;
+        cs_dl Umatrix, Bmatrix, *U, *B, *X ;
+        double *x ;
+        if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
+        {
+            mexErrMsgTxt ("sparse complex case not supported") ;
+        }
+        U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;/* get U */
+        n = U->n ;
+        B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
+        cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
+        xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;          /* get workspace */
+        x  = cs_dl_malloc (n, sizeof (double)) ;
+        top = cs_dl_spsolve (U, B, 0, xi, x, NULL, 0) ;     /* x = U\b */
+        X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;     /* create sparse x*/
+        X->p [0] = 0 ;
+        nz = 0 ;
+        for (p = top ; p < n ; p++)
+        {
+            X->i [nz] = xi [p] ;
+            X->x [nz++] = x [xi [p]] ;
+        }
+        X->p [1] = nz ;
+        pargout [0] = cs_dl_mex_put_sparse (&X) ;
+        cs_free (x) ;
+        cs_free (xi) ;
     }
     else if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Umatrix, *U ;
-	cs_complex_t *x ;
-	U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;	/* get U */
-	n = U->n ;
-	x = cs_cl_mex_get_double (n, pargin [1]) ;		/* x = b */
-	cs_cl_usolve (U, x) ;					/* x = U\x */
-	cs_free (U->x) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;		/* return x */
+        cs_cl Umatrix, *U ;
+        cs_complex_t *x ;
+        U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;    /* get U */
+        n = U->n ;
+        x = cs_cl_mex_get_double (n, pargin [1]) ;              /* x = b */
+        cs_cl_usolve (U, x) ;                                   /* x = U\x */
+        cs_free (U->x) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;             /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Umatrix, *U ;
-	double *x, *b ;
-	U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;	/* get U */
-	n = U->n ;
-	b = cs_dl_mex_get_double (n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_usolve (U, x) ;					/* x = U\x */
+        cs_dl Umatrix, *U ;
+        double *x, *b ;
+        U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ; /* get U */
+        n = U->n ;
+        b = cs_dl_mex_get_double (n, pargin [1]) ;              /* get b */
+        x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;       /* x = b */
+        cs_dl_usolve (U, x) ;                                   /* x = U\x */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cs_utsolve.m b/CXSparse/MATLAB/CSparse/cs_utsolve.m
index 05c8037..c90d30e 100644
--- a/CXSparse/MATLAB/CSparse/cs_utsolve.m
+++ b/CXSparse/MATLAB/CSparse/cs_utsolve.m
@@ -1,4 +1,4 @@
-function x = cs_utsolve (U,b)						    %#ok
+function x = cs_utsolve (U,b)                                               %#ok
 %CS_UTSOLVE solve a sparse lower triangular system U'*x=b.
 %   x = cs_utsolve(U,b) computes x = U'\b, U must be upper triangular with a
 %   zero-free diagonal.  b must be a full vector.
@@ -13,7 +13,6 @@ function x = cs_utsolve (U,b)						    %#ok
 %
 %   See also CS_LSOLVE, CS_LTSOLVE, CS_USOLVE, MLDIVIDE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_utsolve mexFunction not found') ;
diff --git a/CXSparse/MATLAB/CSparse/cs_utsolve_mex.c b/CXSparse/MATLAB/CSparse/cs_utsolve_mex.c
index f4913bd..d5018ff 100644
--- a/CXSparse/MATLAB/CSparse/cs_utsolve_mex.c
+++ b/CXSparse/MATLAB/CSparse/cs_utsolve_mex.c
@@ -10,29 +10,29 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_utsolve(U,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_utsolve(U,b)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Umatrix, *U ;
-	cs_complex_t *x ;
-	U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;	/* get U */
-	x = cs_cl_mex_get_double (U->n, pargin [1]) ;		/* x = b */
-	cs_cl_utsolve (U, x) ;					/* x = U'\x */
-	cs_free (U->x) ;
-	pargout [0] = cs_cl_mex_put_double (U->n, x) ;		/* return x */
+        cs_cl Umatrix, *U ;
+        cs_complex_t *x ;
+        U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;    /* get U */
+        x = cs_cl_mex_get_double (U->n, pargin [1]) ;           /* x = b */
+        cs_cl_utsolve (U, x) ;                                  /* x = U'\x */
+        cs_free (U->x) ;
+        pargout [0] = cs_cl_mex_put_double (U->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Umatrix, *U ;
-	double *x, *b ;
-	U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;	/* get U */
-	b = cs_dl_mex_get_double (U->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (U->n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_utsolve (U, x) ;					/* x = U'\x */
+        cs_dl Umatrix, *U ;
+        double *x, *b ;
+        U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ; /* get U */
+        b = cs_dl_mex_get_double (U->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (U->n, b, &(pargout [0])) ;    /* x = b */
+        cs_dl_utsolve (U, x) ;                                  /* x = U'\x */
     }
 }
diff --git a/CXSparse/MATLAB/CSparse/cspy.m b/CXSparse/MATLAB/CSparse/cspy.m
index a86f01c..eaff82f 100644
--- a/CXSparse/MATLAB/CSparse/cspy.m
+++ b/CXSparse/MATLAB/CSparse/cspy.m
@@ -17,8 +17,7 @@ function [s,M,H] = cspy (A,res)
 %
 %   See also CS_DMSPY, SPY.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if nargin < 2
     res = 256 ;
@@ -29,9 +28,9 @@ h = h (64:-1:1,:) ;
 h = h (30:end,:) ;
 hmax = size (h,1) ;
 
-h (1,:)  = [1 1 1] ;	% white for zero
-h (2,:)  = [1 .9 .5] ;	% light orange for tiny entries
-h (hmax,:) = [0 0 0] ;	% black for very large entries
+h (1,:)  = [1 1 1] ;    % white for zero
+h (2,:)  = [1 .9 .5] ;  % light orange for tiny entries
+h (hmax,:) = [0 0 0] ;  % black for very large entries
 colormap (h) ;
 
 if (nargin == 0)
@@ -41,17 +40,17 @@ if (nargin == 0)
 end
 
 % convert complex, integers, and strings to real double
-if (~isreal (A) | ~isa (A, 'double') | ~issparse (A))			    %#ok
+if (~isreal (A) | ~isa (A, 'double') | ~issparse (A))                       %#ok
     A = sparse (abs (double (A))) ;
 end
 
 [m1 n1] = size (A) ;
-if (m1 == 0 | n1 == 0)							    %#ok
+if (m1 == 0 | n1 == 0)                                                      %#ok
     A (1,1) = 0 ;
 end
 [m1 n1] = size (A) ;
 
-S = cs_thumb (A,res) ;	    % get the thumbnail of the matrix
+S = cs_thumb (A,res) ;      % get the thumbnail of the matrix
 [m n] = size (S) ;
 [i j x] = find (S) ;
 x = log10 (x) ;
@@ -67,12 +66,12 @@ else
     itiny = find (x <= tiny) ;
     ibig = find (x >= big) ;
     x (imid) = 1 + ceil ((hmax-2) * (x (imid) - tiny) / (big - tiny)) ;
-    x (itiny) = 1 ;							    %#ok
-    x (ibig) = hmax-1 ;							    %#ok
+    x (itiny) = 1 ;                                                         %#ok
+    x (ibig) = hmax-1 ;                                                     %#ok
     S = full (1 + sparse (i,j,x,m,n)) ;
 
 %   title (sprintf ('tiny: %-8.2g   median: %-8.2g   big: %-8.2g\n', ...
-%	10^tiny, 10^med, 10^big)) ;
+%       10^tiny, 10^med, 10^big)) ;
 end
 
 % draw the matrix
@@ -82,7 +81,7 @@ axis ([-1 n+1 -1 m+1]) ;
 axis off
 
 % draw a box around the whole matrix
-e = ceil (max (m1,n1) / max (m,n)) ;	% scale factor
+e = ceil (max (m1,n1) / max (m,n)) ;    % scale factor
 hold on
 drawbox (1,m1+1,1,n1+1,'k',1,e) ;
 hold off
@@ -92,9 +91,9 @@ if (nargout > 0)
     s = e ;
 end
 if (nargout > 1)
-    M = S ;		% image
+    M = S ;             % image
 end
 if (nargout > 2)
-    H = h ;		% colormap
+    H = h ;             % colormap
 end
 
diff --git a/CXSparse/MATLAB/CSparse/private/cs_make_helper.m b/CXSparse/MATLAB/CSparse/private/cs_make_helper.m
index 99a9c35..3d30086 100644
--- a/CXSparse/MATLAB/CSparse/private/cs_make_helper.m
+++ b/CXSparse/MATLAB/CSparse/private/cs_make_helper.m
@@ -41,14 +41,18 @@ function [objfiles, timestamp_out] = cs_make_helper (f, docomplex)
 %
 %   See also MEX.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-mexcmd = 'mex -DCS_LONG -I../../../UFconfig' ;
+mexcmd = 'mex -DCS_LONG -I../../../SuiteSparse_config' ;
 if (~isempty (strfind (computer, '64')))
     mexcmd = [mexcmd ' -largeArrayDims'] ;
 end
 
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    mexcmd = [mexcmd ' -silent'] ;
+end
+
 if (nargin < 2)
     docomplex = 1 ;
 end
@@ -71,7 +75,7 @@ cs = { 'cs_add', 'cs_amd', 'cs_chol', 'cs_cholsol', 'cs_counts', ...
     'cs_leaf', 'cs_randperm' } ;
     % add cs_mynewfunc to the above list
 
-details = 1 ;
+details = 0 ;
 kk = 0 ;
 csm = { } ;
 if (nargin == 0)
@@ -82,21 +86,21 @@ elseif (ischar (f))
     csm = {f} ;
 else
     force = f ;
-    details = details | (force > 1) ;					    %#ok
-    if (force & details)						    %#ok
-	fprintf ('cs_make: re-compiling everything\n') ;
+    details = details | (force > 1) ;                                       %#ok
+    if (force & details)                                                    %#ok
+        fprintf ('cs_make: re-compiling everything\n') ;
     end
 end
 
 if (isempty (csm))
     % mexFunctions, of the form cs_add_mex.c, etc, in this directory
     csm = { 'cs_add', 'cs_amd', 'cs_chol', 'cs_cholsol', 'cs_counts', ...
-	'cs_dmperm', 'cs_droptol', 'cs_etree', 'cs_gaxpy', 'cs_lsolve', ...
-	'cs_ltsolve', 'cs_lu', 'cs_lusol', 'cs_multiply', 'cs_permute', ...
-	'cs_print', 'cs_qr', 'cs_qrsol', 'cs_scc', 'cs_symperm', 'cs_thumb', ...
-	'cs_transpose', 'cs_sparse', 'cs_updown', 'cs_usolve', ...
-	'cs_utsolve', 'cs_randperm', 'cs_sqr' } ;
-	% add cs_mynewfunc to the above list
+        'cs_dmperm', 'cs_droptol', 'cs_etree', 'cs_gaxpy', 'cs_lsolve', ...
+        'cs_ltsolve', 'cs_lu', 'cs_lusol', 'cs_multiply', 'cs_permute', ...
+        'cs_print', 'cs_qr', 'cs_qrsol', 'cs_scc', 'cs_symperm', 'cs_thumb', ...
+        'cs_transpose', 'cs_sparse', 'cs_updown', 'cs_usolve', ...
+        'cs_utsolve', 'cs_randperm', 'cs_sqr' } ;
+        % add cs_mynewfunc to the above list
 end
 
 
@@ -122,36 +126,36 @@ hfile = '../../Include/cs.h' ;
     mexcmd, kk, details) ;
 CS = ['cs_mex' obj] ;
 if (nargout > 0)
-    objfiles = ['..' filesep 'CSparse' filesep 'cs_mex' obj] ;
+    objfiles = ['../CSparse/cs_mex' obj] ;
 end
 for i = 1:length (cs)
 
     [s t kk] = compile_source (srcdir, cs{i}, obj, hfile, force, mexcmd, ...
-	kk, details) ;
+        kk, details) ;
     timestamp = max (timestamp, t) ;
-    anysrc = anysrc | s ;						    %#ok
-    CS = [CS ' ' cs{i} obj] ;						    %#ok
+    anysrc = anysrc | s ;                                                   %#ok
+    CS = [CS ' ' cs{i} obj] ;                                               %#ok
     if (nargout > 0)
-	objfiles = [objfiles ' ..' filesep 'CSparse' filesep cs{i} obj] ;   %#ok
+        objfiles = [objfiles ' ../CSparse/' cs{i} obj] ;   %#ok
     end
 
     % complex version:
     if (docomplex)
-	csrc = cs {i} ;
-	csrc = [ 'cs_cl_' csrc(4:end) ] ;
-	CS = [CS ' ' csrc obj] ;	    %#ok
-	if (nargout > 0)
-	    objfiles = [objfiles ' ..' filesep 'CSparse' filesep csrc obj] ;%#ok
-	end
-	if (s)
-	    copyfile (['../../Source/' cs{i} '.c'], [csrc '.c'], 'f') ;
-	    if (details)
-		fprintf ('%s\n', ['cp -f ../../Source/' cs{i} '.c ' csrc '.c']);
-	    end
-	    cmd = sprintf ('%s -DCS_COMPLEX -O -c -I../../Include %s.c\n', ...
-		mexcmd, csrc) ;
-	    kk = do_cmd (cmd, kk, details) ;
-	end
+        csrc = cs {i} ;
+        csrc = [ 'cs_cl_' csrc(4:end) ] ;
+        CS = [CS ' ' csrc obj] ;            %#ok
+        if (nargout > 0)
+            objfiles = [objfiles ' ../CSparse/' csrc obj] ;%#ok
+        end
+        if (s)
+            cpfile (['../../Source/' cs{i} '.c'], [csrc '.c']) ;
+            if (details)
+                fprintf ('%s\n', ['cp -f ../../Source/' cs{i} '.c ' csrc '.c']);
+            end
+            cmd = sprintf ('%s -DCS_COMPLEX -O -c -I../../Include %s.c\n', ...
+                mexcmd, csrc) ;
+            kk = do_cmd (cmd, kk, details) ;
+        end
     end
 
 end
@@ -161,10 +165,10 @@ obj = ['.' mexext] ;
 for i = 1:length (csm)
     [s t] = cs_must_compile ('', csm{i}, '_mex', obj, hfile, force) ;
     timestamp = max (timestamp, t) ;
-    if (anysrc | s)							    %#ok
-	cmd = sprintf ('%s -O -I../../Include %s_mex.c %s -output %s\n', ...
-	    mexcmd, csm{i}, CS, csm{i}) ;
-	kk = do_cmd (cmd, kk, details) ;
+    if (anysrc | s)                                                         %#ok
+        cmd = sprintf ('%s -O -I../../Include %s_mex.c %s -output %s\n', ...
+            mexcmd, csm{i}, CS, csm{i}) ;
+        kk = do_cmd (cmd, kk, details) ;
     end
 end
 
@@ -192,9 +196,35 @@ if (details)
     fprintf ('%s', s) ;
 else
     if (mod (kk, 60) == 0)
-	fprintf ('\n') ;
+        fprintf ('\n') ;
     end
     kk = kk + 1 ;
     fprintf ('.') ;
 end
 eval (s) ;
+
+%-------------------------------------------------------------------------------
+function rmfile (file)
+% rmfile:  delete a file, but only if it exists
+if (length (dir (file)) > 0)                                                %#ok
+    delete (file) ;
+end
+
+%-------------------------------------------------------------------------------
+function cpfile (src, dst)
+% cpfile:  copy the src file to the filename dst, overwriting dst if it exists
+%% fprintf ('cp %s %s\n', src, dst) ; return ;
+rmfile (dst)
+if (length (dir (src)) == 0)	%#ok
+    fprintf ('File does not exist: %s\n', src) ;
+    error ('File does not exist') ;
+end
+try
+    copyfile (src, dst) ;
+catch ME
+    % ignore errors of the form "cp: preserving permissions: ...
+    % Operation not supported".  rethrow all other errors.
+    if (isempty (strfind (ME.message, 'Operation not supported')))
+        rethrow (ME) ;
+    end
+end
diff --git a/CXSparse/MATLAB/CSparse/private/drawbox.m b/CXSparse/MATLAB/CSparse/private/drawbox.m
index d46d5d7..b86c66d 100644
--- a/CXSparse/MATLAB/CSparse/private/drawbox.m
+++ b/CXSparse/MATLAB/CSparse/private/drawbox.m
@@ -5,10 +5,9 @@ function drawbox (r1,r2,c1,c2,color,w,e)
 %       drawbox (r1,r2,c1,c2,color,w,e)
 %   See also drawboxes, plot
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-if (r1 == r2 | c1 == c2)						    %#ok
+if (r1 == r2 | c1 == c2)                                                    %#ok
     return
 end
 
@@ -24,6 +23,6 @@ else
     c2 = ceil ((c2 - 1) / e) + .5 ;
 end
 
-if (c2 > c1 | r2 > r1)							    %#ok
+if (c2 > c1 | r2 > r1)                                                      %#ok
     plot ([c1 c2 c2 c1 c1], [r1 r1 r2 r2 r1], color, 'LineWidth', w) ;
 end
diff --git a/CXSparse/MATLAB/CSparse/private/drawboxes.m b/CXSparse/MATLAB/CSparse/private/drawboxes.m
index 86e3bb5..c80e1fe 100644
--- a/CXSparse/MATLAB/CSparse/private/drawboxes.m
+++ b/CXSparse/MATLAB/CSparse/private/drawboxes.m
@@ -4,26 +4,25 @@ function drawboxes (nb, e, r, s)
 %   drawboxes (nb, e, r, s)
 %   See also drawbox, plot
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nb > 1)
     if (e == 1)
-	r1 = r (1:nb) - .5 ;
-	r2 = r (2:nb+1) - .5 ;
-	c1 = s (1:nb) - .5 ;
-	c2 = s (2:nb+1) - .5 ;
+        r1 = r (1:nb) - .5 ;
+        r2 = r (2:nb+1) - .5 ;
+        c1 = s (1:nb) - .5 ;
+        c2 = s (2:nb+1) - .5 ;
     else
-	r1 = ceil (r (1:nb) / e) - .5 ;
-	r2 = ceil ((r (2:nb+1) - 1) / e) + .5 ;
-	c1 = ceil (s (1:nb) / e) - .5 ;
-	c2 = ceil ((s (2:nb+1) - 1) / e) + .5 ;
+        r1 = ceil (r (1:nb) / e) - .5 ;
+        r2 = ceil ((r (2:nb+1) - 1) / e) + .5 ;
+        c1 = ceil (s (1:nb) / e) - .5 ;
+        c2 = ceil ((s (2:nb+1) - 1) / e) + .5 ;
     end
     kk = find (diff (c1) > 0 | diff (c2) > 0 | diff (r1) > 0 | diff (r2) > 0) ;
     kk = [1 kk+1] ;
     for k = kk
-	plot ([c1(k) c2(k) c2(k) c1(k) c1(k)], ...
-	      [r1(k) r1(k) r2(k) r2(k) r1(k)], 'k', 'LineWidth', 1) ;
+        plot ([c1(k) c2(k) c2(k) c1(k) c1(k)], ...
+              [r1(k) r1(k) r2(k) r2(k) r1(k)], 'k', 'LineWidth', 1) ;
     end
 end
 
diff --git a/CXSparse/MATLAB/Demo/README.txt b/CXSparse/MATLAB/Demo/README.txt
index 36b4e08..d8a5732 100644
--- a/CXSparse/MATLAB/Demo/README.txt
+++ b/CXSparse/MATLAB/Demo/README.txt
@@ -1 +1,3 @@
 Demo for MATLAB interface for CXSparse.  See Contents.m for details.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse/MATLAB/Demo/cs_demo.m b/CXSparse/MATLAB/Demo/cs_demo.m
index d01135d..c4741e7 100644
--- a/CXSparse/MATLAB/Demo/cs_demo.m
+++ b/CXSparse/MATLAB/Demo/cs_demo.m
@@ -6,8 +6,7 @@ function cs_demo (do_pause, matrixpath)
 %   cs_demo
 % See also: cs_demo1, cs_demo2, cs_demo3
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 help cs_demo
 if (nargin < 1)
@@ -17,7 +16,6 @@ if (nargin < 2)
     matrixpath = [] ;
 end
 
-figure (1)
 clf
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
@@ -33,15 +31,15 @@ help cs_demo3
 cs_demo3 (do_pause, matrixpath) ;
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex_1
+help private/ex_1
 ex_1
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex2
+help private/ex2
 ex2
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex3
+help private/ex3
 ex3
 
 fprintf ('\nAll CXSparse demos finished.\n') ;
diff --git a/CXSparse/MATLAB/Demo/cs_demo1.m b/CXSparse/MATLAB/Demo/cs_demo1.m
index cd023cd..a2c586b 100644
--- a/CXSparse/MATLAB/Demo/cs_demo1.m
+++ b/CXSparse/MATLAB/Demo/cs_demo1.m
@@ -7,8 +7,7 @@ function cs_demo1 (matrixpath)
 %   cs_demo1
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 1)
     matrixpath = [] ;
@@ -16,39 +15,39 @@ end
 
 if (isempty (matrixpath))
     try
-	% older versions of MATLAB do not have an input argument to mfilename
-	p = mfilename ('fullpath') ;
-	t = strfind (p, filesep) ;
-	matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
+        % older versions of MATLAB do not have an input argument to mfilename
+        p = mfilename ('fullpath') ;
+        t = strfind (p, '/') ;
+        matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
     catch
-	% assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
-	matrixpath = '../../Matrix' ;
+        % assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
+        matrixpath = '../../Matrix' ;
     end
 end
 
 t1 = load ([matrixpath '/t1']) ;
 
-T = t1									    %#ok
-A  = sparse    (T(:,1)+1, T(:,2)+1, T(:,3))				    %#ok
-A2 = cs_sparse (T(:,1)+1, T(:,2)+1, T(:,3))				    %#ok
+T = t1                                                                      %#ok
+A  = sparse    (T(:,1)+1, T(:,2)+1, T(:,3))                                 %#ok
+A2 = cs_sparse (T(:,1)+1, T(:,2)+1, T(:,3))                                 %#ok
 fprintf ('A difference: %g\n', norm (A-A2,1)) ;
 % CSparse/Demo/cs_demo1.c also clears the triplet matrix T at this point:
 % clear T 
 clf
 subplot (2,2,1) ; cspy (A) ; title ('A', 'FontSize', 16) ;
-AT = A'									    %#ok
-AT2 = cs_transpose (A)							    %#ok
+AT = A'                                                                     %#ok
+AT2 = cs_transpose (A)                                                      %#ok
 fprintf ('AT difference: %g\n', norm (AT-AT2,1)) ;
 subplot (2,2,2) ; cspy (AT) ; title ('A''', 'FontSize', 16) ;
 n = size (A,2) ;
 I = speye (n) ;
 C = A*AT ;
-C2 = cs_multiply (A, AT)						    %#ok
+C2 = cs_multiply (A, AT)                                                    %#ok
 fprintf ('C difference: %g\n', norm (C-C2,1)) ;
 subplot (2,2,3) ; cspy (C) ; title ('C=A*A''', 'FontSize', 16) ;
 cnorm = norm (C,1) ;
-D = C + I*cnorm								    %#ok
-D2 = cs_add (C, I, 1, cnorm)						    %#ok
+D = C + I*cnorm                                                             %#ok
+D2 = cs_add (C, I, 1, cnorm)                                                %#ok
 fprintf ('D difference: %g\n', norm (D-D2,1)) ;
 subplot (2,2,4) ; cspy (D) ; title ('D=C+I*norm(C,1)', 'FontSize', 16) ;
 % CSparse/Demo/cs_demo1.c clears all matrices at this point:
diff --git a/CXSparse/MATLAB/Demo/cs_demo2.m b/CXSparse/MATLAB/Demo/cs_demo2.m
index 98486fa..72ae2f5 100644
--- a/CXSparse/MATLAB/Demo/cs_demo2.m
+++ b/CXSparse/MATLAB/Demo/cs_demo2.m
@@ -6,8 +6,7 @@ function cs_demo2 (do_pause, matrixpath)
 %   cs_demo2
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 2)
     matrixpath = [] ;
@@ -15,13 +14,13 @@ end
 
 if (isempty (matrixpath))
     try
-	% older versions of MATLAB do not have an input argument to mfilename
-	p = mfilename ('fullpath') ;
-	t = strfind (p, filesep) ;
-	matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
+        % older versions of MATLAB do not have an input argument to mfilename
+        p = mfilename ('fullpath') ;
+        t = strfind (p, '/') ;
+        matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
     catch
-	% assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
-	matrixpath = '../../Matrix' ;
+        % assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
+        matrixpath = '../../Matrix' ;
     end
 end
 
@@ -37,6 +36,6 @@ for i = 1:length(matrices)
     [C sym] = get_problem (matrixpath, name, 1e-14) ;
     demo2 (C, sym, name) ;
     if (do_pause)
-	input ('Hit enter to continue: ') ;
+        input ('Hit enter to continue: ') ;
     end
 end
diff --git a/CXSparse/MATLAB/Demo/cs_demo3.m b/CXSparse/MATLAB/Demo/cs_demo3.m
index 2527884..a40c271 100644
--- a/CXSparse/MATLAB/Demo/cs_demo3.m
+++ b/CXSparse/MATLAB/Demo/cs_demo3.m
@@ -6,8 +6,7 @@ function cs_demo3 (do_pause, matrixpath)
 %   cs_demo3
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 2)
     matrixpath = [] ;
@@ -15,13 +14,13 @@ end
 
 if (isempty (matrixpath))
     try
-	% older versions of MATLAB do not have an input argument to mfilename
-	p = mfilename ('fullpath') ;
-	t = strfind (p, filesep) ;
-	matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
+        % older versions of MATLAB do not have an input argument to mfilename
+        p = mfilename ('fullpath') ;
+        t = strfind (p, '/') ;
+        matrixpath = [ p(1:t(end)) '../../Matrix' ] ;
     catch
-	% assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
-	matrixpath = '../../Matrix' ;
+        % assume we are in the C*Sparse/MATLAB/CSparse/Demo directory
+        matrixpath = '../../Matrix' ;
     end
 end
 
@@ -36,6 +35,6 @@ for i = 1:length(matrices)
     [C sym] = get_problem (matrixpath, name, 1e-14) ;
     demo3 (C, sym, name) ;
     if (do_pause)
-	input ('Hit enter to continue: ') ;
+        input ('Hit enter to continue: ') ;
     end
 end
diff --git a/CXSparse/MATLAB/Demo/private/demo2.m b/CXSparse/MATLAB/Demo/private/demo2.m
index 5b8e805..91b8b55 100644
--- a/CXSparse/MATLAB/Demo/private/demo2.m
+++ b/CXSparse/MATLAB/Demo/private/demo2.m
@@ -5,8 +5,7 @@ function demo2 (C, sym, name)
 %   demo2 (C, 1, 'name of system')
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clf
 subplot (2,2,1) ; cspy (C) ;
@@ -27,33 +26,33 @@ if (sprnk ~= sprank (C))
 end
 
 if (sprnk < min (m,n))
-    return ;		    % return if structurally singular
+    return ;                % return if structurally singular
 end
 
 
 % the following code is not in the C version of this demo:
 if (m == n)
     if (sym)
-	try
-	    [L,p] = cs_chol (C) ;		%#ok
-	    subplot (2,2,4) ;
-	    cspy (L+triu(L',1)) ; title ('L+L''') ;
-	catch
-	    % tol = 0.001 ;
-	    [L,U,p,q] = cs_lu (C,0.001) ;	%#ok
-	    subplot (2,2,4) ;
-	    cspy (L+U-speye(n)) ; title ('L+U') ;
-	end
+        try
+            [L,p] = cs_chol (C) ;               %#ok
+            subplot (2,2,4) ;
+            cspy (L+triu(L',1)) ; title ('L+L''') ;
+        catch
+            % tol = 0.001 ;
+            [L,U,p,q] = cs_lu (C,0.001) ;       %#ok
+            subplot (2,2,4) ;
+            cspy (L+U-speye(n)) ; title ('L+U') ;
+        end
     else
-	[L,U,p,q] = cs_lu (C) ;		%#ok
-	subplot (2,2,4) ;
-	cspy (L+U-speye(n)) ; title ('L+U') ;
+        [L,U,p,q] = cs_lu (C) ;         %#ok
+        subplot (2,2,4) ;
+        cspy (L+U-speye(n)) ; title ('L+U') ;
     end
 else
     if (m < n)
-	[V,beta,p,R,q] = cs_qr (C') ;		%#ok
+        [V,beta,p,R,q] = cs_qr (C') ;           %#ok
     else
-	[V,beta,p,R,q] = cs_qr (C) ;		%#ok
+        [V,beta,p,R,q] = cs_qr (C) ;            %#ok
     end
     subplot (2,2,4) ;
     cspy (V+R) ; title ('V+R') ;
@@ -62,12 +61,12 @@ drawnow
 
 % continue with the MATLAB equivalent of the C cs_demo2 program
 for order = [0 3]
-    if (order == 0 & m > 1000)						    %#ok
-	continue ;
+    if (order == 0 & m > 1000)                                              %#ok
+        continue ;
     end
     fprintf ('QR    ') ;
     print_order (order) ;
-    b = rhs (m) ;	    % compute right-hand-side
+    b = rhs (m) ;           % compute right-hand-side
     tic ;
     x = cs_qrsol (C, b, order) ;
     fprintf ('time %8.2f ', toc) ;
@@ -79,12 +78,12 @@ if (m ~= n)
 end
 
 for order = 0:3
-    if (order == 0 & m > 1000)						    %#ok
-	continue ;
+    if (order == 0 & m > 1000)                                              %#ok
+        continue ;
     end
     fprintf ('LU    ') ;
     print_order (order) ;
-    b = rhs (m) ;	    % compute right-hand-side
+    b = rhs (m) ;           % compute right-hand-side
     tic ;
     x = cs_lusol (C, b, order) ;
     fprintf ('time %8.2f ', toc) ;
@@ -96,12 +95,12 @@ if (sym == 0)
 end
 
 for order = 0:1
-    if (order == 0 & m > 1000)						    %#ok
-	continue ;
+    if (order == 0 & m > 1000)                                              %#ok
+        continue ;
     end
     fprintf ('Chol  ') ;
     print_order (order) ;
-    b = rhs (m) ;	    % compute right-hand-side
+    b = rhs (m) ;           % compute right-hand-side
     tic ;
     x = cs_cholsol (C, b, order) ;
     fprintf ('time %8.2f ', toc) ;
diff --git a/CXSparse/MATLAB/Demo/private/demo3.m b/CXSparse/MATLAB/Demo/private/demo3.m
index 3d627f8..8cfd77a 100644
--- a/CXSparse/MATLAB/Demo/private/demo3.m
+++ b/CXSparse/MATLAB/Demo/private/demo3.m
@@ -5,9 +5,7 @@ function demo3 (C, sym, name)
 %   demo3 (C, 1, 'name of system')
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clf
 subplot (2,2,1) ; cspy (C) ;
@@ -15,7 +13,7 @@ title (name, 'FontSize', 16, 'Interpreter', 'none') ;
 drawnow
 
 [m n] = size (C) ;
-if (m ~= n | ~sym)							    %#ok
+if (m ~= n | ~sym)                                                          %#ok
     return ;
 end
 
@@ -64,10 +62,10 @@ x (p) = x ;
 t = toc ;
 
 w2 = sparse (n,1) ;
-w2 (p) = w ;			% w2 = P'*w
+w2 (p) = w ;                    % w2 = P'*w
 wt = cs_transpose (w2) ;
 ww = cs_multiply (w2,wt) ;
-E = cs_add (C, ww, 1, 1) ;	% E = C + w2*w2' ;
+E = cs_add (C, ww, 1, 1) ;      % E = C + w2*w2' ;
 
 fprintf ('update:   time: %8.2f (incl solve) ', t1+t) ;
 print_resid (E, x, b) ;
diff --git a/CXSparse/MATLAB/Demo/private/ex2.m b/CXSparse/MATLAB/Demo/private/ex2.m
index 2b814c9..c241d59 100644
--- a/CXSparse/MATLAB/Demo/private/ex2.m
+++ b/CXSparse/MATLAB/Demo/private/ex2.m
@@ -5,8 +5,7 @@ function ex2 (n)
 %   ex2
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 1)
     n = 30 ;
@@ -22,11 +21,11 @@ xx = zeros (5*n^2, 1) ;
 k = 1 ;
 for j = 0:n-1
     for i = 0:n-1
-	s = j*n+i + 1 ;
-	ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
-	jj (k:k+4) = [s s s s s] ;
-	xx (k:k+4) = [-1 -1 4 -1 -1] ;
-	k = k + 5 ;
+        s = j*n+i + 1 ;
+        ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
+        jj (k:k+4) = [s s s s s] ;
+        xx (k:k+4) = [-1 -1 4 -1 -1] ;
+        k = k + 5 ;
     end
 end
 
diff --git a/CXSparse/MATLAB/Demo/private/ex3.m b/CXSparse/MATLAB/Demo/private/ex3.m
index b425900..07fa540 100644
--- a/CXSparse/MATLAB/Demo/private/ex3.m
+++ b/CXSparse/MATLAB/Demo/private/ex3.m
@@ -5,8 +5,7 @@ function ex3
 %   ex3
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 t1 = zeros (50,1) ;
 t2 = zeros (50,1) ;
diff --git a/CXSparse/MATLAB/Demo/private/ex_1.m b/CXSparse/MATLAB/Demo/private/ex_1.m
index 6a14818..90d41e7 100644
--- a/CXSparse/MATLAB/Demo/private/ex_1.m
+++ b/CXSparse/MATLAB/Demo/private/ex_1.m
@@ -6,8 +6,7 @@ function ex_1
 %   ex_1
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = 1000 ;
 nz = 1e5 ;
@@ -30,7 +29,7 @@ A1 = A ;
 tic
 % method 2: triplet form, one entry at a time
 rand ('state', 0) ;
-ii = zeros (nz, 1) ;	% preallocate ii, jj, and xx
+ii = zeros (nz, 1) ;    % preallocate ii, jj, and xx
 jj = zeros (nz, 1) ;
 xx = zeros (nz, 1) ;
 for k = 1:nz
@@ -55,11 +54,11 @@ xx = zeros (len, 1) ;
 for k = 1:nz
     % compute some arbitrary entry and add it into the matrix
     if (k > len)
-	% double the size of ii,jj,xx
-	len = 2*len ;
-	ii (len) = 0 ;
-	jj (len) = 0 ;
-	xx (len) = 0 ;
+        % double the size of ii,jj,xx
+        len = 2*len ;
+        ii (len) = 0 ;
+        jj (len) = 0 ;
+        xx (len) = 0 ;
     end
     ii (k) = 1 + fix (n * rand (1)) ;
     jj (k) = 1 + fix (n * rand (1)) ;
diff --git a/CXSparse/MATLAB/Demo/private/frand.m b/CXSparse/MATLAB/Demo/private/frand.m
index 4d3b16a..931c103 100644
--- a/CXSparse/MATLAB/Demo/private/frand.m
+++ b/CXSparse/MATLAB/Demo/private/frand.m
@@ -7,8 +7,8 @@ function A = frand (n,nel,s)
 %   A = frand (100, 100, 4) ; cspy (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
+
 ss = s^2 ;
 nz = nel*ss ;
 ii = zeros (nz,1) ;
diff --git a/CXSparse/MATLAB/Demo/private/get_problem.m b/CXSparse/MATLAB/Demo/private/get_problem.m
index a2dc3d6..32ac416 100644
--- a/CXSparse/MATLAB/Demo/private/get_problem.m
+++ b/CXSparse/MATLAB/Demo/private/get_problem.m
@@ -7,8 +7,7 @@ function [C, sym] = get_problem (prefix, name, tol)
 %    [C, sym] = get_problem ('', 'west0067') ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('\n------------------- Matrix: %s\n', name) ;
 
@@ -20,8 +19,6 @@ s = find (name == '/') ;
 if (isempty (s))
     s = 0 ;
 end
-% f = sprintf ('%s..%s..%sMatrix%s%s', ...
-%    prefix, filesep, filesep, filesep, name (s+1:end)) ;
 
 % load the triplet version of the matrix
 T = load ([ prefix '/' name(s+1:end) ]) ;
diff --git a/CXSparse/MATLAB/Demo/private/is_sym.m b/CXSparse/MATLAB/Demo/private/is_sym.m
index 6a84215..b7a2d01 100644
--- a/CXSparse/MATLAB/Demo/private/is_sym.m
+++ b/CXSparse/MATLAB/Demo/private/is_sym.m
@@ -6,8 +6,7 @@ function sym = is_sym (A)
 %   sym = is_sym (A) ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 sym = 0 ;
@@ -15,9 +14,9 @@ if (m == n)
     is_upper = nnz (tril (A,-1)) == 0 ;
     is_lower = nnz (triu (A,1)) == 0 ;
     if (is_upper)
-	sym = 1 ;
+        sym = 1 ;
     elseif (is_lower)
-	sym = -1 ;
+        sym = -1 ;
     end
 end
 
diff --git a/CXSparse/MATLAB/Demo/private/mesh2d1.m b/CXSparse/MATLAB/Demo/private/mesh2d1.m
index 39ca45f..23a2985 100644
--- a/CXSparse/MATLAB/Demo/private/mesh2d1.m
+++ b/CXSparse/MATLAB/Demo/private/mesh2d1.m
@@ -4,20 +4,19 @@ function A = mesh2d1 (n)
 %   A = mesh2d1 (30) ;  % a 30-by-30 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-ii = zeros (5*n^2, 1) ;	    % preallocate ii, jj, and xx
+ii = zeros (5*n^2, 1) ;     % preallocate ii, jj, and xx
 jj = zeros (5*n^2, 1) ;
 xx = zeros (5*n^2, 1) ;
 k = 1 ;
 for j = 0:n-1
     for i = 0:n-1
-	s = j*n+i + 1 ;
-	ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
-	jj (k:k+4) = [s s s s s] ;
-	xx (k:k+4) = [-1 -1 4 -1 -1] ;
-	k = k + 5 ;
+        s = j*n+i + 1 ;
+        ii (k:k+4) = [(j-1)*n+i j*n+(i-1) j*n+i j*n+(i+1) (j+1)*n+i ] + 1 ;
+        jj (k:k+4) = [s s s s s] ;
+        xx (k:k+4) = [-1 -1 4 -1 -1] ;
+        k = k + 5 ;
     end
 end
 % remove entries beyond the boundary
diff --git a/CXSparse/MATLAB/Demo/private/mesh2d2.m b/CXSparse/MATLAB/Demo/private/mesh2d2.m
index f3133bf..b3f3823 100644
--- a/CXSparse/MATLAB/Demo/private/mesh2d2.m
+++ b/CXSparse/MATLAB/Demo/private/mesh2d2.m
@@ -4,8 +4,7 @@ function A = mesh2d2 (n)
 %   A = mesh2d2 (30) ;  % a 30-by-30 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 nn = 1:n^2 ;
 ii = [nn-n ; nn-1 ; nn ; nn+1 ; nn+n] ;
diff --git a/CXSparse/MATLAB/Demo/private/mesh3d1.m b/CXSparse/MATLAB/Demo/private/mesh3d1.m
index 2c431d9..5a6c0ca 100644
--- a/CXSparse/MATLAB/Demo/private/mesh3d1.m
+++ b/CXSparse/MATLAB/Demo/private/mesh3d1.m
@@ -4,8 +4,7 @@ function [A, keep, ii, jj, xx] = mesh3d1 (n)
 %   A = mesh3d1 (10) ;  % a 10-by-10-by-10 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 ii = zeros (7*n^3, 1) ;
 jj = zeros (7*n^3, 1) ;
@@ -13,20 +12,20 @@ xx = zeros (7*n^3, 1) ;
 t = 1 ;
 for k = 0:n-1
     for j = 0:n-1
-	for i = 0:n-1
-	    s = k*n^2 + j*n+i + 1 ;
-	    ii (t:t+6) = [
-		    (k-1)*n^2 + j*n+i 
-		    k*n^2 + (j-1)*n+i 
-		    k*n^2 + j*n+(i-1)
-		    k*n^2 + j*n+i
-		    k*n^2 + j*n+(i+1)
-		    k*n^2 + (j+1)*n+i
-		    (k+1)*n^2 + j*n+i ]' + 1 ;
-	    jj (t:t+6) = [s s s s s s s] ;
-	    xx (t:t+6) = [-1 -1 -1 6 -1 -1 -1] ;
-	    t = t + 7 ;
-	end
+        for i = 0:n-1
+            s = k*n^2 + j*n+i + 1 ;
+            ii (t:t+6) = [
+                    (k-1)*n^2 + j*n+i 
+                    k*n^2 + (j-1)*n+i 
+                    k*n^2 + j*n+(i-1)
+                    k*n^2 + j*n+i
+                    k*n^2 + j*n+(i+1)
+                    k*n^2 + (j+1)*n+i
+                    (k+1)*n^2 + j*n+i ]' + 1 ;
+            jj (t:t+6) = [s s s s s s s] ;
+            xx (t:t+6) = [-1 -1 -1 6 -1 -1 -1] ;
+            t = t + 7 ;
+        end
     end
 end
 keep = find (ii >= 1 & ii <= n^3 & jj >= 1 & jj <= n^3) ;
diff --git a/CXSparse/MATLAB/Demo/private/mesh3d2.m b/CXSparse/MATLAB/Demo/private/mesh3d2.m
index 4a644f3..35365ee 100644
--- a/CXSparse/MATLAB/Demo/private/mesh3d2.m
+++ b/CXSparse/MATLAB/Demo/private/mesh3d2.m
@@ -4,8 +4,7 @@ function A = mesh3d2 (n)
 %   A = mesh3d2 (10) ;  % a 10-by-10-by-10 mesh
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 nn = 1:n^3 ;
 ii = [nn-n^2 ; nn-n ; nn-1 ; nn ; nn+1 ; nn+n ; nn+n^2] ;
diff --git a/CXSparse/MATLAB/Demo/private/print_order.m b/CXSparse/MATLAB/Demo/private/print_order.m
index 4f65d4b..b00138f 100644
--- a/CXSparse/MATLAB/Demo/private/print_order.m
+++ b/CXSparse/MATLAB/Demo/private/print_order.m
@@ -4,18 +4,17 @@ function print_order (order)
 %   print_order (0)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 switch (fix (order))
     case 0
-	fprintf ('natural    ') ;
+        fprintf ('natural    ') ;
     case 1
-	fprintf ('amd(A+A'')  ') ;
+        fprintf ('amd(A+A'')  ') ;
     case 2
-	fprintf ('amd(S''*S)  ') ;
+        fprintf ('amd(S''*S)  ') ;
     case 3
-	fprintf ('amd(A''*A)  ') ;
+        fprintf ('amd(A''*A)  ') ;
     otherwise
-	fprintf ('undefined  ') ;
+        fprintf ('undefined  ') ;
 end
diff --git a/CXSparse/MATLAB/Demo/private/print_resid.m b/CXSparse/MATLAB/Demo/private/print_resid.m
index 4b22047..c5676bd 100644
--- a/CXSparse/MATLAB/Demo/private/print_resid.m
+++ b/CXSparse/MATLAB/Demo/private/print_resid.m
@@ -5,8 +5,7 @@ function print_resid (A, x, b)
 %   print_resid (A, x, b) ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('resid: %8.2e\n', ...
     norm (A*x-b,inf) / (norm(A,1)*norm(x,inf) + norm(b,inf))) ;
diff --git a/CXSparse/MATLAB/Demo/private/rhs.m b/CXSparse/MATLAB/Demo/private/rhs.m
index f7bc531..8fb5fdd 100644
--- a/CXSparse/MATLAB/Demo/private/rhs.m
+++ b/CXSparse/MATLAB/Demo/private/rhs.m
@@ -4,7 +4,6 @@ function b = rhs (m)
 %   b = rhs (30) ;
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 b = ones (m,1) + (0:m-1)'/m ;
diff --git a/CXSparse/MATLAB/Makefile b/CXSparse/MATLAB/Makefile
deleted file mode 100644
index 4636246..0000000
--- a/CXSparse/MATLAB/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-all:
-	( cd CSparse ; $(MAKE) )
-	( cd Test ; $(MAKE) )
-
-clean:
-	( cd CSparse ; $(MAKE) clean )
-	( cd Test ; $(MAKE) clean )
-
-purge:
-	( cd CSparse ; $(MAKE) purge )
-	( cd Test ; $(MAKE) purge )
-
-distclean: purge
-
diff --git a/CXSparse/MATLAB/README.txt b/CXSparse/MATLAB/README.txt
index 8ece299..59b160e 100644
--- a/CXSparse/MATLAB/README.txt
+++ b/CXSparse/MATLAB/README.txt
@@ -22,3 +22,5 @@ However, you may run the tests in the Test directory only if your compiler
 supports the ANSI C99 complex type.  If it does not support the ANSI C99
 complex type, the tests in the Test directory will fail, since the codes there
 test both the real and complex cases in CXSparse.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse/MATLAB/Test/Makefile b/CXSparse/MATLAB/Test/Makefile
deleted file mode 100644
index 3b4e4ef..0000000
--- a/CXSparse/MATLAB/Test/Makefile
+++ /dev/null
@@ -1,53 +0,0 @@
-include ../../../UFconfig/UFconfig.mk
-
-MX = $(MEX) -DCS_LONG
-AR = ar cr
-RANLIB = ranlib
-
-I = -I../../Include -I../../../UFconfig -I../CSparse
-
-all: cs_sparse2.mexglx \
-	cs_ipvec.mexglx \
-	cs_pvec.mexglx \
-	cs_reach.mexglx \
-	cs_maxtransr.mexglx \
-	cs_reachr.mexglx \
-	cs_rowcnt.mexglx \
-	cs_frand.mexglx
-
-mexcsparse:
-	( cd ../CSparse ; make mexcsparse.a )
-
-cs_ipvec.mexglx: cs_ipvec_mex.c mexcsparse
-	$(MX) -output cs_ipvec $< $(I) ../CSparse/mexcsparse.a
-
-cs_pvec.mexglx: cs_pvec_mex.c mexcsparse
-	$(MX) -output cs_pvec $< $(I) ../CSparse/mexcsparse.a
-
-cs_reach.mexglx: cs_reach_mex.c mexcsparse
-	$(MX) -output cs_reach $< $(I) ../CSparse/mexcsparse.a
-
-cs_sparse2.mexglx: cs_sparse2_mex.c mexcsparse
-	$(MX) -output cs_sparse2 $< $(I) ../CSparse/mexcsparse.a
-
-cs_maxtransr.mexglx: cs_maxtransr_mex.c mexcsparse
-	$(MX) -output cs_maxtransr $< $(I) ../CSparse/mexcsparse.a
-
-cs_reachr.mexglx: cs_reachr_mex.c mexcsparse
-	$(MX) -output cs_reachr $< $(I) ../CSparse/mexcsparse.a
-
-cs_rowcnt.mexglx: cs_rowcnt_mex.c mexcsparse
-	$(MX) -output cs_rowcnt $< $(I) ../CSparse/mexcsparse.a
-
-cs_frand.mexglx: cs_frand_mex.c mexcsparse
-	$(MX) -output cs_frand $< $(I) ../CSparse/mexcsparse.a
-
-
-
-clean:
-	rm -f *.o
-
-distclean: clean
-	rm -f *.mex* *.a cs_cl_*.c
-
-purge: distclean
diff --git a/CXSparse/MATLAB/Test/README.txt b/CXSparse/MATLAB/Test/README.txt
index e075bac..0547f79 100644
--- a/CXSparse/MATLAB/Test/README.txt
+++ b/CXSparse/MATLAB/Test/README.txt
@@ -2,3 +2,5 @@ Test for MATLAB interface for CXSparse.  Type "testall" to run all the tests.
 
 Also includes "textbook" codes for the book "Direct Methods for Sparse Linear
 Systems", which are not part of CXSparse proper, but are used in the tests.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse/MATLAB/Test/another_colormap.m b/CXSparse/MATLAB/Test/another_colormap.m
index 50342e9..91dca13 100644
--- a/CXSparse/MATLAB/Test/another_colormap.m
+++ b/CXSparse/MATLAB/Test/another_colormap.m
@@ -5,9 +5,7 @@ function another_colormap
 %   another_colormap
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 j = jet (128) ;
 j = j (48:112, :) ;
@@ -19,7 +17,7 @@ j = j (48:112, :) ;
 
 
 % white = [1 1 1] ;
-% gray = [.5 .5 .5] ;							    %#ok
+% gray = [.5 .5 .5] ;                                                       %#ok
 
 % j = [white ; purple ; j ] ;
 disp ('j = ') ;
diff --git a/CXSparse/MATLAB/Test/check_if_same.m b/CXSparse/MATLAB/Test/check_if_same.m
index 9a81e92..d73306b 100644
--- a/CXSparse/MATLAB/Test/check_if_same.m
+++ b/CXSparse/MATLAB/Test/check_if_same.m
@@ -5,18 +5,17 @@ function check_if_same (p1,p2)
 %   check_if_same (1:5, 2:6)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
     if (isempty (p1))
-	if (~isempty (p2))
-	    p1		%#ok
-	    p2		%#ok
-	    error ('empty!') ;
-	end
+        if (~isempty (p2))
+            p1          %#ok
+            p2          %#ok
+            error ('empty!') ;
+        end
     elseif (any (p1 ~= p2))
-	p1		%#ok
-	p2		%#ok
-	error ('!') ;
+        p1              %#ok
+        p2              %#ok
+        error ('!') ;
     end
 
diff --git a/CXSparse/MATLAB/Test/chol_downdate.m b/CXSparse/MATLAB/Test/chol_downdate.m
index 8cf9794..b780fd5 100644
--- a/CXSparse/MATLAB/Test/chol_downdate.m
+++ b/CXSparse/MATLAB/Test/chol_downdate.m
@@ -4,8 +4,7 @@ function [L, w] = chol_downdate (L, w)
 %   [L, w] = chol_downdate (L, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -13,7 +12,7 @@ for j = 1:n
     alpha = w (j) / L (j,j) ;
     beta2 = sqrt (beta^2 - alpha^2) ;
     if (~isreal (beta2))
-	error ('not positive definite') ;
+        error ('not positive definite') ;
     end
     gamma = alpha / (beta2 * beta) ;
     delta = beta2 / beta ;
@@ -21,7 +20,7 @@ for j = 1:n
     w (j) = alpha ;
     beta = beta2 ;
     if (j == n)
-	return
+        return
     end
     w (j+1:n) = w (j+1:n) - alpha * L (j+1:n,j) ;
     L (j+1:n,j) = delta * L (j+1:n,j) - gamma * w (j+1:n) ;
diff --git a/CXSparse/MATLAB/Test/chol_example.m b/CXSparse/MATLAB/Test/chol_example.m
index f488f7d..ca9bfb3 100644
--- a/CXSparse/MATLAB/Test/chol_example.m
+++ b/CXSparse/MATLAB/Test/chol_example.m
@@ -4,9 +4,7 @@ function chol_example
 %   chol_example
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 D = 10 ;
 X = 1 ;
diff --git a/CXSparse/MATLAB/Test/chol_left.m b/CXSparse/MATLAB/Test/chol_left.m
index ec75416..e1e65f0 100644
--- a/CXSparse/MATLAB/Test/chol_left.m
+++ b/CXSparse/MATLAB/Test/chol_left.m
@@ -4,8 +4,7 @@ function L = chol_left (A)
 %   L = chol_left (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 L = zeros (n) ;
diff --git a/CXSparse/MATLAB/Test/chol_left2.m b/CXSparse/MATLAB/Test/chol_left2.m
index c809b9e..47626e0 100644
--- a/CXSparse/MATLAB/Test/chol_left2.m
+++ b/CXSparse/MATLAB/Test/chol_left2.m
@@ -4,8 +4,7 @@ function L = chol_left2 (A)
 %   L = chol_left2 (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 L = sparse (n,n) ;
@@ -13,7 +12,7 @@ a = sparse (n,1) ;
 for k = 1:n
     a (k:n) = A (k:n,k) ;
     for j = find (L (k,:))
-	a (k:n) = a (k:n) - L (k:n,j) * L (k,j) ;
+        a (k:n) = a (k:n) - L (k:n,j) * L (k,j) ;
     end
     L (k,k) = sqrt (a (k)) ;
     L (k+1:n,k) = a (k+1:n) / L (k,k) ;
diff --git a/CXSparse/MATLAB/Test/chol_right.m b/CXSparse/MATLAB/Test/chol_right.m
index 7aa60e1..85baed1 100644
--- a/CXSparse/MATLAB/Test/chol_right.m
+++ b/CXSparse/MATLAB/Test/chol_right.m
@@ -4,8 +4,7 @@ function L = chol_right (A)
 %   L = chol_right (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A) ;
 L = zeros (n) ;
diff --git a/CXSparse/MATLAB/Test/chol_super.m b/CXSparse/MATLAB/Test/chol_super.m
index 1744130..5212a2b 100644
--- a/CXSparse/MATLAB/Test/chol_super.m
+++ b/CXSparse/MATLAB/Test/chol_super.m
@@ -4,8 +4,7 @@ function L = chol_super (A,s)
 %   L = chol_super (A,s)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A) ;
 L = zeros (n) ;
diff --git a/CXSparse/MATLAB/Test/chol_up.m b/CXSparse/MATLAB/Test/chol_up.m
index 09d0218..9917c06 100644
--- a/CXSparse/MATLAB/Test/chol_up.m
+++ b/CXSparse/MATLAB/Test/chol_up.m
@@ -4,8 +4,7 @@ function L = chol_up (A)
 %   L = chol_up (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A) ;
 L = zeros (n) ;
diff --git a/CXSparse/MATLAB/Test/chol_update.m b/CXSparse/MATLAB/Test/chol_update.m
index 5d95152..3bf47a5 100644
--- a/CXSparse/MATLAB/Test/chol_update.m
+++ b/CXSparse/MATLAB/Test/chol_update.m
@@ -4,8 +4,7 @@ function [L, w] = chol_update (L, w)
 %   [L, w] = chol_update (L, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -18,7 +17,7 @@ for j = 1:n
     w (j) = alpha ;
     beta = beta2 ;
     if (j == n)
-	return
+        return
     end
     w1 = w (j+1:n) ;
     w (j+1:n) = w (j+1:n) - alpha * L (j+1:n,j) ;
diff --git a/CXSparse/MATLAB/Test/chol_updown.m b/CXSparse/MATLAB/Test/chol_updown.m
index 2f286c9..e26df2d 100644
--- a/CXSparse/MATLAB/Test/chol_updown.m
+++ b/CXSparse/MATLAB/Test/chol_updown.m
@@ -4,8 +4,7 @@ function [L, w] = chol_updown (L, sigma, w)
 %   [L, w] = chol_updown (L, sigma, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -18,18 +17,18 @@ for k = 1:n
     beta2 = sqrt (beta^2 + sigma*alpha^2) ;
     gamma = sigma * alpha / (beta2 * beta) ;
     if (sigma > 0)
-	% update
-	delta = beta / beta2 ;
-	L (k,k) = delta * L (k,k) + gamma * w (k) ;
-	w1 = w (k+1:n) ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w1 ;
+        % update
+        delta = beta / beta2 ;
+        L (k,k) = delta * L (k,k) + gamma * w (k) ;
+        w1 = w (k+1:n) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w1 ;
     else
-	% downdate
-	delta = beta2 / beta ;
-	L (k,k) = delta * L (k,k) ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w (k+1:n) ;
+        % downdate
+        delta = beta2 / beta ;
+        L (k,k) = delta * L (k,k) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w (k+1:n) ;
     end
     w (k) = alpha ;
     beta = beta2 ;
diff --git a/CXSparse/MATLAB/Test/chol_updown2.m b/CXSparse/MATLAB/Test/chol_updown2.m
index 5cc844e..37b9e37 100644
--- a/CXSparse/MATLAB/Test/chol_updown2.m
+++ b/CXSparse/MATLAB/Test/chol_updown2.m
@@ -5,8 +5,7 @@ function [L, w] = chol_updown2 (L, sigma, w)
 %   [L, w] = chol_updown2 (L, sigma, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis, William W. Hager
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -21,25 +20,25 @@ for k = 1:n
     beta2 = sqrt (beta*beta + sigma*alpha*conj(alpha)) ;
     gamma = sigma * conj(alpha) / (beta2 * beta) ;
     if (sigma > 0)
-	% update
-	delta = beta / beta2 ;
-	L (k,k) = delta * L (k,k) + gamma * w (k) ;
-	phase = abs (L (k, k))/L (k, k) ;
-	L (k, k) = phase*L (k, k) ;
+        % update
+        delta = beta / beta2 ;
+        L (k,k) = delta * L (k,k) + gamma * w (k) ;
+        phase = abs (L (k, k))/L (k, k) ;
+        L (k, k) = phase*L (k, k) ;
 
-	w1 = w (k+1:n) ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w1) ;
+        w1 = w (k+1:n) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w1) ;
 
     else
-	% downdate
-	delta = beta2 / beta ;
-	L (k,k) = delta * L (k,k) ;
-	phase = abs (L (k, k))/L (k, k) ;
-	L (k, k) = phase*L (k, k) ;
+        % downdate
+        delta = beta2 / beta ;
+        L (k,k) = delta * L (k,k) ;
+        phase = abs (L (k, k))/L (k, k) ;
+        L (k, k) = phase*L (k, k) ;
 
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w (k+1:n)) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w (k+1:n)) ;
 
     end
     w (k) = alpha ;
diff --git a/CXSparse/MATLAB/Test/choldn.m b/CXSparse/MATLAB/Test/choldn.m
index 10ea9d9..8c9fdcb 100644
--- a/CXSparse/MATLAB/Test/choldn.m
+++ b/CXSparse/MATLAB/Test/choldn.m
@@ -6,8 +6,7 @@ function L = choldn (Lold,w)
 %   L = cholnd (Lold,w)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (Lold,1) ;
 L = Lold ;
@@ -23,7 +22,7 @@ for i = 1:n
     a = w (i) / L(i,i) ;
     alpha = alpha - a^2 ;
     if (alpha <= 0)
-	error ('not pos def') ;
+        error ('not pos def') ;
     end
     beta_new = sqrt (alpha) ;
     b = beta_new / beta ;
@@ -35,8 +34,8 @@ for i = 1:n
     wnew (i) = a ;
 
     for k = i:n
-	w (k)   = w (k) - a * L (k,i) ;
-	L (k,i) = b * L (k,i) - c * w(k) ;
+        w (k)   = w (k) - a * L (k,i) ;
+        L (k,i) = b * L (k,i) - c * w(k) ;
     end
 
 end
diff --git a/CXSparse/MATLAB/Test/cholup.m b/CXSparse/MATLAB/Test/cholup.m
index e8f196c..af00aaf 100644
--- a/CXSparse/MATLAB/Test/cholup.m
+++ b/CXSparse/MATLAB/Test/cholup.m
@@ -5,8 +5,7 @@ function L = cholup (Lold,w)
 %   L = cholup (Lold,w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (Lold,1) ;
 L = [Lold w] ;
diff --git a/CXSparse/MATLAB/Test/cholupdown.m b/CXSparse/MATLAB/Test/cholupdown.m
index e450347..53f0d51 100644
--- a/CXSparse/MATLAB/Test/cholupdown.m
+++ b/CXSparse/MATLAB/Test/cholupdown.m
@@ -6,9 +6,7 @@ function L = cholupdown (Lold, sigma, w)
 %   L = cholupdown (Lold, sigma, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (Lold,1) ;
@@ -24,30 +22,30 @@ for k = 1:n
 
     if (sigma < 0)
 
-	% downdate
-	bratio = beta_new / beta ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k,k) = bratio * L (k,k) ;
-	L (k+1:n,k) = bratio * L (k+1:n,k) - gamma*w(k+1:n) ;
+        % downdate
+        bratio = beta_new / beta ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k,k) = bratio * L (k,k) ;
+        L (k+1:n,k) = bratio * L (k+1:n,k) - gamma*w(k+1:n) ;
 
     else
 
-	% update
-	bratio = beta / beta_new ;
+        % update
+        bratio = beta / beta_new ;
 
-%	wold = w (k+1:n) ;
-%	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-%	L (k    ,k) = bratio * L (k    ,k) + gamma*w(k) ;
-%	L (k+1:n,k) = bratio * L (k+1:n,k) + gamma*wold ;
+%       wold = w (k+1:n) ;
+%       w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+%       L (k    ,k) = bratio * L (k    ,k) + gamma*w(k) ;
+%       L (k+1:n,k) = bratio * L (k+1:n,k) + gamma*wold ;
 
-	L (k,k) = bratio * L (k,k) + gamma*w(k) ;
-	for i = k+1:n 
+        L (k,k) = bratio * L (k,k) + gamma*w(k) ;
+        for i = k+1:n 
 
-	    wold = w (i) ;
-	    w (i) = w (i) - alpha * L (i,k) ;
-	    L (i,k) = bratio * L (i,k) + gamma*wold ;
+            wold = w (i) ;
+            w (i) = w (i) - alpha * L (i,k) ;
+            L (i,k) = bratio * L (i,k) + gamma*wold ;
 
-	end
+        end
 
     end
 
diff --git a/CXSparse/MATLAB/Test/cond1est.m b/CXSparse/MATLAB/Test/cond1est.m
index e634168..da16d80 100644
--- a/CXSparse/MATLAB/Test/cond1est.m
+++ b/CXSparse/MATLAB/Test/cond1est.m
@@ -4,11 +4,10 @@ function c = cond1est (A)
 %   c = cond1est(A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
-if (m ~= n | ~isreal (A))						    %#ok
+if (m ~= n | ~isreal (A))                                                   %#ok
     error ('A must be square and real') ;
 end
 if isempty(A)
@@ -16,7 +15,7 @@ if isempty(A)
     return ;
 end
 [L,U,P,Q] = lu (A) ;
-if (~isempty (find (abs (diag (U)) == 0)))				    %#ok
+if (~isempty (find (abs (diag (U)) == 0)))                                  %#ok
     c = Inf ;
 else
     c = norm (A,1) * norm1est (L,U,P,Q) ;
diff --git a/CXSparse/MATLAB/Test/cs_fiedler.m b/CXSparse/MATLAB/Test/cs_fiedler.m
index 35db8dc..7ffc287 100644
--- a/CXSparse/MATLAB/Test/cs_fiedler.m
+++ b/CXSparse/MATLAB/Test/cs_fiedler.m
@@ -10,21 +10,20 @@ function [p,v,d] = cs_fiedler (A)
 %
 %   See also CS_SCC, EIGS, SYMRCM, UNMESH.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n < 2)
     p = 1 ; v = 1 ; d = 0 ; return ;
 end
-opt.disp = 0 ;			    % turn off printing in eigs
+opt.disp = 0 ;                      % turn off printing in eigs
 opt.tol = sqrt (eps) ;
 if (~isreal (A))
     A = spones (A) ;
 end
-S = A | A' | speye (n) ;	    % compute the Laplacian of A
+S = A | A' | speye (n) ;            % compute the Laplacian of A
 S = diag (sum (S)) - S ;
 [v,d] = eigs (S, 2, 'SA', opt) ;    % find the Fiedler vector v
 v = v (:,2) ;
 d = d (2,2) ;
-[ignore p] = sort (v) ;		    % sort it to get p
+[ignore p] = sort (v) ;             % sort it to get p
diff --git a/CXSparse/MATLAB/Test/cs_frand.m b/CXSparse/MATLAB/Test/cs_frand.m
index c75069f..596449a 100644
--- a/CXSparse/MATLAB/Test/cs_frand.m
+++ b/CXSparse/MATLAB/Test/cs_frand.m
@@ -1,4 +1,4 @@
-function A = cs_frand (n,nel,s)						    %#ok
+function A = cs_frand (n,nel,s)                                             %#ok
 %CS_FRAND generate a random finite-element matrix
 % A = cs_frand (n,nel,s) creates an n-by-n sparse matrix consisting of nel
 % finite elements, each of which are of size s-by-s with random symmetric
@@ -8,8 +8,7 @@ function A = cs_frand (n,nel,s)						    %#ok
 %   A = cs_frand (100, 100, 3) ;
 % See also cs_demo.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_frand mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/Test/cs_frand_mex.c b/CXSparse/MATLAB/Test/cs_frand_mex.c
index 9768797..02aba94 100644
--- a/CXSparse/MATLAB/Test/cs_frand_mex.c
+++ b/CXSparse/MATLAB/Test/cs_frand_mex.c
@@ -13,14 +13,14 @@ cs_dl *cs_dl_frand (CS_INT n, CS_INT nel, CS_INT s)
     if (!P) return (cs_dl_spfree (T)) ;
     for (e = 0 ; e < nel ; e++)
     {
-	for (i = 0 ; i < s ; i++) P [i] = rand () % n ;
-	for (j = 0 ; j < s ; j++)
-	{
-	    for (i = 0 ; i < s ; i++)
-	    {
-		cs_dl_entry (T, P [i], P [j], rand () / (double) RAND_MAX) ;
-	    }
-	}
+        for (i = 0 ; i < s ; i++) P [i] = rand () % n ;
+        for (j = 0 ; j < s ; j++)
+        {
+            for (i = 0 ; i < s ; i++)
+            {
+                cs_dl_entry (T, P [i], P [j], rand () / (double) RAND_MAX) ;
+            }
+        }
     }
     for (i = 0 ; i < n ; i++) cs_dl_entry (T, i, i, 1) ;
     A = cs_dl_compress (T) ;
@@ -40,7 +40,7 @@ void mexFunction
     cs *A, *AT ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: C = cs_frand(n,nel,s)") ;
+        mexErrMsgTxt ("Usage: C = cs_frand(n,nel,s)") ;
     }
     n = mxGetScalar (pargin [0]) ;
     nel = mxGetScalar (pargin [1]) ;
diff --git a/CXSparse/MATLAB/Test/cs_ipvec.m b/CXSparse/MATLAB/Test/cs_ipvec.m
index f86bab6..38b6f98 100644
--- a/CXSparse/MATLAB/Test/cs_ipvec.m
+++ b/CXSparse/MATLAB/Test/cs_ipvec.m
@@ -1,12 +1,11 @@
-function x = cs_ipvec (b,p)						    %#ok
+function x = cs_ipvec (b,p)                                                 %#ok
 %CS_IPVEC x(p)=b
 %
 % Example:
 %   x = cs_ipvec (b,p)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_ipvec mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/Test/cs_ipvec_mex.c b/CXSparse/MATLAB/Test/cs_ipvec_mex.c
index 974af01..5c7bdbf 100644
--- a/CXSparse/MATLAB/Test/cs_ipvec_mex.c
+++ b/CXSparse/MATLAB/Test/cs_ipvec_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     double *xx ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_ipvec(b,p)") ;
+        mexErrMsgTxt ("Usage: x = cs_ipvec(b,p)") ;
     }
     n = mxGetNumberOfElements (pargin [0]) ;
     if (n != mxGetNumberOfElements (pargin [1]))
     {
-	mexErrMsgTxt ("b or p wrong size") ;
+        mexErrMsgTxt ("b or p wrong size") ;
     }
 
     xx = mxGetPr (pargin [1]) ;
@@ -29,21 +29,21 @@ void mexFunction
 #ifdef NCOMPLEX
         mexErrMsgTxt ("complex case not supported") ;
 #else
-	cs_complex_t *x, *b ;
-	b = cs_cl_mex_get_double (n, pargin [0]) ;
-	x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
-	cs_cl_ipvec (p, b, x, n) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;
-	cs_free (b) ;	    /* free copy of complex values */
+        cs_complex_t *x, *b ;
+        b = cs_cl_mex_get_double (n, pargin [0]) ;
+        x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
+        cs_cl_ipvec (p, b, x, n) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;
+        cs_free (b) ;       /* free copy of complex values */
 #endif
     }
     else
     {
-	double *x, *b ;
-	b = cs_dl_mex_get_double (n, pargin [0]) ;
-	pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
-	x = mxGetPr (pargout [0]) ;
-	cs_dl_ipvec (p, b, x, n) ;
+        double *x, *b ;
+        b = cs_dl_mex_get_double (n, pargin [0]) ;
+        pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
+        x = mxGetPr (pargout [0]) ;
+        cs_dl_ipvec (p, b, x, n) ;
     }
     cs_free (p) ;
 }
diff --git a/CXSparse/MATLAB/Test/cs_maxtransr.m b/CXSparse/MATLAB/Test/cs_maxtransr.m
index df9bca9..979af9c 100644
--- a/CXSparse/MATLAB/Test/cs_maxtransr.m
+++ b/CXSparse/MATLAB/Test/cs_maxtransr.m
@@ -1,11 +1,10 @@
-function p = cs_maxtransr(A)						    %#ok
+function p = cs_maxtransr(A)                                                %#ok
 %CS_MAXTRANSR recursive maximum matching algorithm
 % Example:
 %   p = cs_maxtransr(A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_maxtransr mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/Test/cs_maxtransr_mex.c b/CXSparse/MATLAB/Test/cs_maxtransr_mex.c
index e97cec6..d94012b 100644
--- a/CXSparse/MATLAB/Test/cs_maxtransr_mex.c
+++ b/CXSparse/MATLAB/Test/cs_maxtransr_mex.c
@@ -6,21 +6,21 @@ CS_INT augment (CS_INT k, cs_dl *A, CS_INT *jmatch, CS_INT *cheap, CS_INT *w,
 {
     CS_INT found = 0, p, i = -1, *Ap = A->p, *Ai = A->i ;
     /* --- Start depth-first-search at node j ------------------------------- */
-    w [j] = k ;				    /* mark j as visited for kth path */
+    w [j] = k ;                             /* mark j as visited for kth path */
     for (p = cheap [j] ; p < Ap [j+1] && !found ; p++)
     {
-	i = Ai [p] ;			    /* try a cheap assignment (i,j) */
-	found = (jmatch [i] == -1) ;
+        i = Ai [p] ;                        /* try a cheap assignment (i,j) */
+        found = (jmatch [i] == -1) ;
     }
-    cheap [j] = p ;			    /* start here next time for j */
+    cheap [j] = p ;                         /* start here next time for j */
     /* --- Depth-first-search of neighbors of j ----------------------------- */
     for (p = Ap [j] ; p < Ap [j+1] && !found ; p++)
     {
-	i = Ai [p] ;			    /* consider row i */
-	if (w [jmatch [i]] == k) continue ; /* skip col jmatch [i] if marked */
-	found = augment (k, A, jmatch, cheap, w, jmatch [i]) ;
+        i = Ai [p] ;                        /* consider row i */
+        if (w [jmatch [i]] == k) continue ; /* skip col jmatch [i] if marked */
+        found = augment (k, A, jmatch, cheap, w, jmatch [i]) ;
     }
-    if (found) jmatch [i] = j ;		    /* augment jmatch if path found */
+    if (found) jmatch [i] = j ;             /* augment jmatch if path found */
     return (found) ;
 }
 
@@ -29,15 +29,15 @@ static
 CS_INT *maxtrans (cs_dl *A)   /* returns jmatch [0..m-1] */
 {
     CS_INT i, j, k, n, m, *Ap, *jmatch, *w, *cheap ;
-    if (!A) return (NULL) ;			    /* check inputs */
+    if (!A) return (NULL) ;                         /* check inputs */
     n = A->n ; m = A->m ; Ap = A->p ;
     jmatch = cs_dl_malloc (m, sizeof (CS_INT)) ;    /* allocate result */
-    w = cs_dl_malloc (2*n, sizeof (CS_INT)) ;	    /* allocate workspace */
+    w = cs_dl_malloc (2*n, sizeof (CS_INT)) ;       /* allocate workspace */
     if (!w || !jmatch) return (cs_dl_idone (jmatch, NULL, w, 0)) ;
     cheap = w + n ;
     for (j = 0 ; j < n ; j++) cheap [j] = Ap [j] ;  /* for cheap assignment */
-    for (j = 0 ; j < n ; j++) w [j] = -1 ;	    /* all columns unflagged */
-    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;	    /* no rows matched yet */
+    for (j = 0 ; j < n ; j++) w [j] = -1 ;          /* all columns unflagged */
+    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;     /* no rows matched yet */
     for (k = 0 ; k < n ; k++) augment (k, A, jmatch, cheap, w, k) ;
     return (cs_dl_idone (jmatch, NULL, w, 1)) ;
 }
@@ -68,7 +68,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: p = cr_maxtransr(A)") ;
+        mexErrMsgTxt ("Usage: p = cr_maxtransr(A)") ;
     }
 
     /* get inputs */
@@ -77,7 +77,7 @@ void mexFunction
     n = A->n ;
 
     jmatch = maxtrans (A) ;
-    imatch = invmatch (jmatch, m, n) ;	/* imatch = inverse of jmatch */
+    imatch = invmatch (jmatch, m, n) ;  /* imatch = inverse of jmatch */
 
     pargout [0] = mxCreateDoubleMatrix (1, n, mxREAL) ;
     x = mxGetPr (pargout [0]) ;
diff --git a/CXSparse/MATLAB/Test/cs_pvec.m b/CXSparse/MATLAB/Test/cs_pvec.m
index bbd3a87..fc9a7c0 100644
--- a/CXSparse/MATLAB/Test/cs_pvec.m
+++ b/CXSparse/MATLAB/Test/cs_pvec.m
@@ -1,12 +1,11 @@
-function x = cs_pvec (b,p)						    %#ok
+function x = cs_pvec (b,p)                                                  %#ok
 %CS_PVEC x=b(p)
 %
 % Example:
 %   x = cs_pvec (b,p)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_pvec mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/Test/cs_pvec_mex.c b/CXSparse/MATLAB/Test/cs_pvec_mex.c
index d8505fa..97b0063 100644
--- a/CXSparse/MATLAB/Test/cs_pvec_mex.c
+++ b/CXSparse/MATLAB/Test/cs_pvec_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     double *xx ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_pvec(b,p)") ;
+        mexErrMsgTxt ("Usage: x = cs_pvec(b,p)") ;
     }
     n = mxGetNumberOfElements (pargin [0]) ;
     if (n != mxGetNumberOfElements (pargin [1]))
     {
-	mexErrMsgTxt ("b or p wrong size") ;
+        mexErrMsgTxt ("b or p wrong size") ;
     }
 
     xx = mxGetPr (pargin [1]) ;
@@ -29,21 +29,21 @@ void mexFunction
 #ifdef NCOMPLEX
         mexErrMsgTxt ("complex case not supported") ;
 #else
-	cs_complex_t *x, *b ;
-	b = cs_cl_mex_get_double (n, pargin [0]) ;
-	x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
-	cs_cl_pvec (p, b, x, n) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;
-	cs_free (b) ;	    /* free copy of complex values */
+        cs_complex_t *x, *b ;
+        b = cs_cl_mex_get_double (n, pargin [0]) ;
+        x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
+        cs_cl_pvec (p, b, x, n) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;
+        cs_free (b) ;       /* free copy of complex values */
 #endif
     }
     else
     {
-	double *x, *b ;
-	b = cs_dl_mex_get_double (n, pargin [0]) ;
-	pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
-	x = mxGetPr (pargout [0]) ;
-	cs_dl_pvec (p, b, x, n) ;
+        double *x, *b ;
+        b = cs_dl_mex_get_double (n, pargin [0]) ;
+        pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
+        x = mxGetPr (pargout [0]) ;
+        cs_dl_pvec (p, b, x, n) ;
     }
     cs_free (p) ;
 }
diff --git a/CXSparse/MATLAB/Test/cs_q1.m b/CXSparse/MATLAB/Test/cs_q1.m
index 45a51ec..30e2fb4 100644
--- a/CXSparse/MATLAB/Test/cs_q1.m
+++ b/CXSparse/MATLAB/Test/cs_q1.m
@@ -4,8 +4,7 @@ function Q = cs_q1 (V, Beta, p)
 %   Q = cs_q1 (V, beta, p)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (V) ;
 Q = speye (m) ;
@@ -14,6 +13,6 @@ if (nargin > 2)
 end
 for i = 1:m
     for k = 1:n
-	Q (i,:) = Q (i,:) - ((Q(i,:) * V(:,k)) * Beta(k)) * V(:,k)' ;
+        Q (i,:) = Q (i,:) - ((Q(i,:) * V(:,k)) * Beta(k)) * V(:,k)' ;
     end
 end
diff --git a/CXSparse/MATLAB/Test/cs_reach.m b/CXSparse/MATLAB/Test/cs_reach.m
index 2e68e7a..2fdefce 100644
--- a/CXSparse/MATLAB/Test/cs_reach.m
+++ b/CXSparse/MATLAB/Test/cs_reach.m
@@ -1,4 +1,4 @@
-function x = cs_reach(L,b)						    %#ok
+function x = cs_reach(L,b)                                                  %#ok
 %CS_REACH non-recursive reach (interface to CSparse cs_reach)
 % find nonzero pattern of x=L\sparse(b).  L must be sparse, real, and lower
 % triangular.  b must be a real sparse vector.
@@ -7,8 +7,7 @@ function x = cs_reach(L,b)						    %#ok
 %   x = cs_reach(L,b)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_reach mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/Test/cs_reach_mex.c b/CXSparse/MATLAB/Test/cs_reach_mex.c
index ec72443..bd94815 100644
--- a/CXSparse/MATLAB/Test/cs_reach_mex.c
+++ b/CXSparse/MATLAB/Test/cs_reach_mex.c
@@ -16,7 +16,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_reach(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_reach(L,b)") ;
     }
 
     /* get inputs */
diff --git a/CXSparse/MATLAB/Test/cs_reachr.m b/CXSparse/MATLAB/Test/cs_reachr.m
index d6bbfc7..d8f8f75 100644
--- a/CXSparse/MATLAB/Test/cs_reachr.m
+++ b/CXSparse/MATLAB/Test/cs_reachr.m
@@ -1,4 +1,4 @@
-function x = cs_reachr(L,b)						    %#ok
+function x = cs_reachr(L,b)                                                 %#ok
 %CS_REACHR recursive reach (interface to CSparse cs_reachr)
 % find nonzero pattern of x=L\sparse(b).  L must be sparse, real, and lower
 % triangular.  b must be a real sparse vector.
@@ -7,8 +7,7 @@ function x = cs_reachr(L,b)						    %#ok
 %   x = cs_reachr(L,b)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 
 error ('cs_reach mexFunction not found') ;
diff --git a/CXSparse/MATLAB/Test/cs_reachr_mex.c b/CXSparse/MATLAB/Test/cs_reachr_mex.c
index ca7e009..b458ba8 100644
--- a/CXSparse/MATLAB/Test/cs_reachr_mex.c
+++ b/CXSparse/MATLAB/Test/cs_reachr_mex.c
@@ -6,15 +6,15 @@ static
 void dfsr (CS_INT j, const cs *L, CS_INT *top, CS_INT *xi, CS_INT *w)
 {
     CS_INT p ;
-    w [j] = 1 ;					/* mark node j */
-    for (p = L->p [j] ; p < L->p [j+1] ; p++)	/* for each i in L(:,j) */
+    w [j] = 1 ;                                 /* mark node j */
+    for (p = L->p [j] ; p < L->p [j+1] ; p++)   /* for each i in L(:,j) */
     {
-	if (w [L->i [p]] != 1)			/* if i is unmarked */
-	{
-	    dfsr (L->i [p], L, top, xi, w) ;	/* start a dfs at i */
-	}
+        if (w [L->i [p]] != 1)                  /* if i is unmarked */
+        {
+            dfsr (L->i [p], L, top, xi, w) ;    /* start a dfs at i */
+        }
     }
-    xi [--(*top)] = j ;				/* push j onto the stack */
+    xi [--(*top)] = j ;                         /* push j onto the stack */
 }
 
 /* w [0..n-1] == 0 on input, <= 1 on output.  size n */
@@ -22,15 +22,15 @@ static
 CS_INT reachr (const cs *L, const cs *B, CS_INT *xi, CS_INT *w)
 {
     CS_INT p, n = L->n ;
-    CS_INT top = n ;				/* stack is empty */
-    for (p = B->p [0] ; p < B->p [1] ; p++)	/* for each i in pattern of b */
+    CS_INT top = n ;                            /* stack is empty */
+    for (p = B->p [0] ; p < B->p [1] ; p++)     /* for each i in pattern of b */
     {
-	if (w [B->i [p]] != 1)			/* if i is unmarked */
-	{
-	    dfsr (B->i [p], L, &top, xi, w) ;	/* start a dfs at i */
-	}
+        if (w [B->i [p]] != 1)                  /* if i is unmarked */
+        {
+            dfsr (B->i [p], L, &top, xi, w) ;   /* start a dfs at i */
+        }
     }
-    return (top) ;				/* return top of stack */
+    return (top) ;                              /* return top of stack */
 }
 
 void mexFunction
@@ -47,7 +47,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_reachr(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_reachr(L,b)") ;
     }
 
     /* get inputs */
diff --git a/CXSparse/MATLAB/Test/cs_rowcnt.m b/CXSparse/MATLAB/Test/cs_rowcnt.m
index d57d661..1c4f25f 100644
--- a/CXSparse/MATLAB/Test/cs_rowcnt.m
+++ b/CXSparse/MATLAB/Test/cs_rowcnt.m
@@ -1,4 +1,4 @@
-function r = cs_rowcnt(A,parent,post)					    %#ok
+function r = cs_rowcnt(A,parent,post)                                       %#ok
 %CS_ROWCNT row counts for sparse Cholesky
 % Compute the row counts of the Cholesky factor L of the matrix A.  Uses
 % the lower triangular part of A.
@@ -7,9 +7,7 @@ function r = cs_rowcnt(A,parent,post)					    %#ok
 %   r = cs_rowcnt(A,parent,post)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_rowcnt mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/Test/cs_rowcnt_mex.c b/CXSparse/MATLAB/Test/cs_rowcnt_mex.c
index 7ba9a30..ec9aade 100644
--- a/CXSparse/MATLAB/Test/cs_rowcnt_mex.c
+++ b/CXSparse/MATLAB/Test/cs_rowcnt_mex.c
@@ -11,12 +11,12 @@ void firstdesc (CS_INT n, CS_INT *parent, CS_INT *post, CS_INT *first,
     for (i = 0 ; i < n ; i++) first [i] = -1 ;
     for (k = 0 ; k < n ; k++)
     {
-	i = post [k] ;	    /* node i of etree is kth postordered node */
-	len = 0 ;	    /* traverse from i towards the root */
-	for (r = i ; r != -1 && first [r] == -1 ; r = parent [r], len++)
-	    first [r] = k ;
-	len += (r == -1) ? (-1) : level [r] ;	/* root node or end of path */
-	for (s = i ; s != r ; s = parent [s]) level [s] = len-- ;
+        i = post [k] ;      /* node i of etree is kth postordered node */
+        len = 0 ;           /* traverse from i towards the root */
+        for (r = i ; r != -1 && first [r] == -1 ; r = parent [r], len++)
+            first [r] = k ;
+        len += (r == -1) ? (-1) : level [r] ;   /* root node or end of path */
+        for (s = i ; s != r ; s = parent [s]) level [s] = len-- ;
     }
 }
 
@@ -25,30 +25,30 @@ static
 CS_INT *rowcnt (cs_dl *A, CS_INT *parent, CS_INT *post)
 {
     CS_INT i, j, k, len, s, p, jprev, q, n, sparent, jleaf, *Ap, *Ai, *maxfirst,
-	*ancestor, *prevleaf, *w, *first, *level, *rowcount ;
-    n = A->n ; Ap = A->p ; Ai = A->i ;			/* get A */
-    w = cs_dl_malloc (5*n, sizeof (CS_INT)) ;		/* get workspace */
+        *ancestor, *prevleaf, *w, *first, *level, *rowcount ;
+    n = A->n ; Ap = A->p ; Ai = A->i ;                  /* get A */
+    w = cs_dl_malloc (5*n, sizeof (CS_INT)) ;           /* get workspace */
     ancestor = w ; maxfirst = w+n ; prevleaf = w+2*n ; first = w+3*n ;
     level = w+4*n ;
-    rowcount = cs_dl_malloc (n, sizeof (CS_INT)) ;	/* allocate result */
-    firstdesc (n, parent, post, first, level) ;	/* find first and level */
+    rowcount = cs_dl_malloc (n, sizeof (CS_INT)) ;      /* allocate result */
+    firstdesc (n, parent, post, first, level) ; /* find first and level */
     for (i = 0 ; i < n ; i++)
     {
-	rowcount [i] = 1 ;	/* count the diagonal of L */
-	prevleaf [i] = -1 ;	/* no previous leaf of the ith row subtree */
-	maxfirst [i] = -1 ;	/* max first[j] for node j in ith subtree */
-	ancestor [i] = i ;	/* every node is in its own set, by itself */
+        rowcount [i] = 1 ;      /* count the diagonal of L */
+        prevleaf [i] = -1 ;     /* no previous leaf of the ith row subtree */
+        maxfirst [i] = -1 ;     /* max first[j] for node j in ith subtree */
+        ancestor [i] = i ;      /* every node is in its own set, by itself */
     }
     for (k = 0 ; k < n ; k++)
     {
-	j = post [k] ;		/* j is the kth node in the postordered etree */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    q = cs_dl_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf) ;
-	    if (jleaf) rowcount [i] += (level [j] - level [q]) ;
-	}
-	if (parent [j] != -1) ancestor [j] = parent [j] ;
+        j = post [k] ;          /* j is the kth node in the postordered etree */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            q = cs_dl_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf) ;
+            if (jleaf) rowcount [i] += (level [j] - level [q]) ;
+        }
+        if (parent [j] != -1) ancestor [j] = parent [j] ;
     }
     cs_dl_free (w) ;
     return (rowcount) ;
@@ -68,7 +68,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: r = cs_rowcnt(A,parent,post)") ;
+        mexErrMsgTxt ("Usage: r = cs_rowcnt(A,parent,post)") ;
     }
 
     /* get inputs */
diff --git a/CXSparse/MATLAB/Test/cs_sparse2.m b/CXSparse/MATLAB/Test/cs_sparse2.m
index 32d9319..1bdb348 100644
--- a/CXSparse/MATLAB/Test/cs_sparse2.m
+++ b/CXSparse/MATLAB/Test/cs_sparse2.m
@@ -1,4 +1,4 @@
-function A = cs_sparse2 (i,j,x)						    %#ok
+function A = cs_sparse2 (i,j,x)                                             %#ok
 %CS_SPARSE2 same as cs_sparse, to test cs_entry function
 % A = cs_sparse2 (i,j,x), removing duplicates and numerically zero entries,
 % and returning A sorted (test cs_entry)
@@ -7,9 +7,7 @@ function A = cs_sparse2 (i,j,x)						    %#ok
 %   A = cs_sparse2 (i,j,x)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_sparse2 mexFunction not found') ;
 
diff --git a/CXSparse/MATLAB/Test/cs_sparse2_mex.c b/CXSparse/MATLAB/Test/cs_sparse2_mex.c
index dddcad9..6d3ea38 100644
--- a/CXSparse/MATLAB/Test/cs_sparse2_mex.c
+++ b/CXSparse/MATLAB/Test/cs_sparse2_mex.c
@@ -12,7 +12,7 @@ void mexFunction
     CS_INT k, m, n, nz, *Ti, *Tj ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: A = cs_sparse2(i,j,x)") ;
+        mexErrMsgTxt ("Usage: A = cs_sparse2(i,j,x)") ;
     }
     nz = mxGetM (pargin [0]) ;
     Ti = cs_dl_mex_get_int (nz, pargin [0], &m, 1) ;
@@ -23,41 +23,41 @@ void mexFunction
 #ifdef NCOMPLEX
         mexErrMsgTxt ("complex case not supported") ;
 #else
-	cs_complex_t *Tx ;
-	cs_cl *A, *C, *T ;
-	Tx = cs_cl_mex_get_double (nz, pargin [2]) ;
-	T = cs_cl_spalloc (n, m, 1, 1, 1) ;
-	for (k = 0 ; k < nz ; k++)
-	{
-	    cs_cl_entry (T, Tj [k], Ti [k], Tx [k]) ;
-	}
-	C = cs_cl_compress (T) ;
-	cs_cl_spfree (T) ;
-	cs_cl_dupl (C) ;
-	cs_cl_dropzeros (C) ;
-	A = cs_cl_transpose (C, -1) ;
-	cs_cl_spfree (C) ;
-	pargout [0] = cs_cl_mex_put_sparse (&A) ;
-	cs_free (Tx) ;
+        cs_complex_t *Tx ;
+        cs_cl *A, *C, *T ;
+        Tx = cs_cl_mex_get_double (nz, pargin [2]) ;
+        T = cs_cl_spalloc (n, m, 1, 1, 1) ;
+        for (k = 0 ; k < nz ; k++)
+        {
+            cs_cl_entry (T, Tj [k], Ti [k], Tx [k]) ;
+        }
+        C = cs_cl_compress (T) ;
+        cs_cl_spfree (T) ;
+        cs_cl_dupl (C) ;
+        cs_cl_dropzeros (C) ;
+        A = cs_cl_transpose (C, -1) ;
+        cs_cl_spfree (C) ;
+        pargout [0] = cs_cl_mex_put_sparse (&A) ;
+        cs_free (Tx) ;
 #endif
     }
     else
     {
-	double *Tx ;
-	cs_dl *A, *C, *T ;
-	Tx = mxGetPr (pargin [2]) ;
-	T = cs_dl_spalloc (n, m, 1, 1, 1) ;
-	for (k = 0 ; k < nz ; k++)
-	{
-	    cs_dl_entry (T, Tj [k], Ti [k], Tx [k]) ;
-	}
-	C = cs_dl_compress (T) ;
-	cs_dl_spfree (T) ;
-	cs_dl_dupl (C) ;
-	cs_dl_dropzeros (C) ;
-	A = cs_dl_transpose (C, 1) ;
-	cs_dl_spfree (C) ;
-	pargout [0] = cs_dl_mex_put_sparse (&A) ;
+        double *Tx ;
+        cs_dl *A, *C, *T ;
+        Tx = mxGetPr (pargin [2]) ;
+        T = cs_dl_spalloc (n, m, 1, 1, 1) ;
+        for (k = 0 ; k < nz ; k++)
+        {
+            cs_dl_entry (T, Tj [k], Ti [k], Tx [k]) ;
+        }
+        C = cs_dl_compress (T) ;
+        cs_dl_spfree (T) ;
+        cs_dl_dupl (C) ;
+        cs_dl_dropzeros (C) ;
+        A = cs_dl_transpose (C, 1) ;
+        cs_dl_spfree (C) ;
+        pargout [0] = cs_dl_mex_put_sparse (&A) ;
     }
     cs_free (Ti) ;
     cs_free (Tj) ;
diff --git a/CXSparse/MATLAB/Test/cs_test_make.m b/CXSparse/MATLAB/Test/cs_test_make.m
index 60303b6..a2a4aa3 100644
--- a/CXSparse/MATLAB/Test/cs_test_make.m
+++ b/CXSparse/MATLAB/Test/cs_test_make.m
@@ -6,10 +6,9 @@ function cs_test_make (force)
 %   cs_test_make
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-mexcmd = 'mex -DCS_LONG -I../../../UFconfig' ;
+mexcmd = 'mex -DCS_LONG -I../../../SuiteSparse_config' ;
 if (~isempty (strfind (computer, '64')))
     mexcmd = [mexcmd ' -largeArrayDims'] ;
 end
@@ -32,12 +31,11 @@ end
 
 for i = 1:length(mexfunc)
     [s t tobj] = cs_must_compile ('', mexfunc{i}, '_mex', ...
- 	['.' mexext], 'cs_test_make.m', force) ;
-    if (s | tobj < timestamp)						    %#ok
-	cmd = [mexcmd ' -O -output ' mexfunc{i} ' ' mexfunc{i} '_mex.c -I..' ...
-	    filesep '..' filesep 'Include -I..' ...
-	    filesep 'CSparse ' object_files] ;
- 	fprintf ('%s\n', cmd) ;
- 	eval (cmd) ;
+        ['.' mexext], 'cs_test_make.m', force) ;
+    if (s | tobj < timestamp)                                               %#ok
+        cmd = [mexcmd ' -O -output ' mexfunc{i} ' ' mexfunc{i} '_mex.c' ...
+            ' -I../../Include -I../CSparse ' object_files] ;
+        fprintf ('%s\n', cmd) ;
+        eval (cmd) ;
      end
 end
diff --git a/CXSparse/MATLAB/Test/cspy_test.m b/CXSparse/MATLAB/Test/cspy_test.m
index 1312ca3..cab2b34 100644
--- a/CXSparse/MATLAB/Test/cspy_test.m
+++ b/CXSparse/MATLAB/Test/cspy_test.m
@@ -4,8 +4,7 @@ function cspy_test
 %   cspy_test
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 
@@ -22,28 +21,28 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     try
-	subplot (1,4,1) ; cspy (A) ;
-	drawnow
-	subplot (1,4,2) ; cspy (A,64) ;
-	drawnow
-	subplot (1,4,3) ; cs_dmspy (A) ;
-	drawnow
-	subplot (1,4,4) ; cs_dmspy (A,0) ;
-	drawnow
+        subplot (1,4,1) ; cspy (A) ;
+        drawnow
+        subplot (1,4,2) ; cspy (A,64) ;
+        drawnow
+        subplot (1,4,3) ; cs_dmspy (A) ;
+        drawnow
+        subplot (1,4,4) ; cs_dmspy (A,0) ;
+        drawnow
     catch
-	fprintf ('failed...\n') ;
+        fprintf ('failed...\n') ;
     end
 
     [m n] = size (A) ;
-    if (m == n & nnz (diag (A)) == n)					    %#ok
-	p = cs_dmperm (A) ;
-	if (any (p ~= 1:n))
-	    error ('!') ;
-	end
-	[p q r s cc rr] = cs_dmperm (A) ;				    %#ok
-	if (any (p ~= q))
-	    error ('not sym!') ;
-	end
+    if (m == n & nnz (diag (A)) == n)                                       %#ok
+        p = cs_dmperm (A) ;
+        if (any (p ~= 1:n))
+            error ('!') ;
+        end
+        [p q r s cc rr] = cs_dmperm (A) ;                                   %#ok
+        if (any (p ~= q))
+            error ('not sym!') ;
+        end
     end
 
     drawnow
diff --git a/CXSparse/MATLAB/Test/dmperm_test.m b/CXSparse/MATLAB/Test/dmperm_test.m
index 2f1fd38..7e5a707 100644
--- a/CXSparse/MATLAB/Test/dmperm_test.m
+++ b/CXSparse/MATLAB/Test/dmperm_test.m
@@ -5,8 +5,7 @@ function dmperm_test
 %   dmperm_test
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 
@@ -32,13 +31,13 @@ for k = 1:length(f)
     
     i = f(k) ;
 
-    Prob = UFget (i)							    %#ok
+    Prob = UFget (i)                                                        %#ok
 
     A = Prob.A ;
     [m n] = size (A) ;
     if (m > n)
-	% make sure A is short and fat
-	A = A' ;
+        % make sure A is short and fat
+        A = A' ;
     end
     % C is tall and thin
     C = A' ;
@@ -47,11 +46,11 @@ for k = 1:length(f)
     k1 = 0 ;
     t1 = 0 ;
     while (t1 < 1)
-	tic
-	p = cs_dmperm (A) ;
-	t = toc ;
-	t1 = t1 + t ;
-	k1 = k1 + 1 ;
+        tic
+        p = cs_dmperm (A) ;
+        t = toc ;
+        t1 = t1 + t ;
+        k1 = k1 + 1 ;
     end
     t1 = t1 / k1 ;
     s1 = sum (p > 0) ;
@@ -59,11 +58,11 @@ for k = 1:length(f)
     k2 = 0 ;
     t2 = 0 ;
     while (t2 < 1)
-	tic
-	p = cs_dmperm (C) ;
-	t = toc ;
-	t2 = t2 + t ;
-	k2 = k2 + 1 ;
+        tic
+        p = cs_dmperm (C) ;
+        t = toc ;
+        t2 = t2 + t ;
+        k2 = k2 + 1 ;
     end
     t2 = t2 / k2 ;
     s2 = sum (p > 0) ;
@@ -71,22 +70,22 @@ for k = 1:length(f)
     k3 = 0 ;
     t3 = 0 ;
     while (t3 < 1)
-	tic
-	p = cs_dmperm_orig (A) ;
-	t = toc ;
-	t3 = t3 + t ;
-	k3 = k3 + 1 ;
+        tic
+        p = cs_dmperm_orig (A) ;
+        t = toc ;
+        t3 = t3 + t ;
+        k3 = k3 + 1 ;
     end
     t3 = t3 / k3 ;
 
     k4 = 0 ;
     t4 = 0 ;
     while (t4 < 1)
-	tic
-	p = cs_dmperm_orig (A') ;
-	t = toc ;
-	t4 = t4 + t ;
-	k4 = k4 + 1 ;
+        tic
+        p = cs_dmperm_orig (A') ;
+        t = toc ;
+        t4 = t4 + t ;
+        k4 = k4 + 1 ;
     end
     t4 = t4 / k4 ;
 
@@ -96,15 +95,15 @@ for k = 1:length(f)
 
     fprintf ('[m %d:%d n %d:%d (%d)]:\n', m, mempty, n, nempty, sprnk) ;
     fprintf ('    A: t1 %10.6f (%6d)   C: t2 %10.6f (%6d) new\n', ...
-	t1, k1, t2, k2) ;
+        t1, k1, t2, k2) ;
     fprintf ('    A: t3 %10.6f (%6d)   C: t4 %10.6f (%6d) orig\n', ...
-	t3, k3, t4, k4) ;
+        t3, k3, t4, k4) ;
 
-    if (s1 ~= sprnk | s2 ~= sprnk)					    %#ok
-	s1								    %#ok
-	s2								    %#ok
-	sprnk								    %#ok
-	error ('!') ;
+    if (s1 ~= sprnk | s2 ~= sprnk)                                          %#ok
+        s1                                                                  %#ok
+        s2                                                                  %#ok
+        sprnk                                                               %#ok
+        error ('!') ;
     end
 
     tt1 (k) = t1 ;
@@ -120,7 +119,7 @@ for k = 1:length(f)
     clear A C
 
     semilogy (ss(1:k) ./ nn(1:k), tt1(1:k) ./ tt3(1:k), 'o', ...
-	[0 1], [1 1], 'r-') ;
+        [0 1], [1 1], 'r-') ;
     drawnow
 
 end
diff --git a/CXSparse/MATLAB/Test/dmspy_test.m b/CXSparse/MATLAB/Test/dmspy_test.m
index fff2057..8f13123 100644
--- a/CXSparse/MATLAB/Test/dmspy_test.m
+++ b/CXSparse/MATLAB/Test/dmspy_test.m
@@ -4,9 +4,7 @@ function dmspy_test
 %   dmspy_test
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 f = find (index.nblocks > 1) ;
@@ -21,7 +19,7 @@ for i = f
     clf
     subplot (2,2,1) ; cspy (Prob.A) ;
     subplot (2,2,2) ; cs_dmspy (Prob.A) ;
-    [p,q,r,s,cc,rr] = cs_dmperm (Prob.A) ;				    %#ok
+    [p,q,r,s,cc,rr] = cs_dmperm (Prob.A) ;                                  %#ok
     subplot (2,2,3) ; plot (p) ;
     subplot (2,2,4) ; plot (q) ;
     drawnow
diff --git a/CXSparse/MATLAB/Test/etree_sample.m b/CXSparse/MATLAB/Test/etree_sample.m
index 9a38f0a..0514508 100644
--- a/CXSparse/MATLAB/Test/etree_sample.m
+++ b/CXSparse/MATLAB/Test/etree_sample.m
@@ -5,8 +5,7 @@ function etree_sample
 %   etree_sample
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clf
 
@@ -55,7 +54,7 @@ title ('L, not postordered') ;
 n = size (A,1) ;
 for k = 1:n
     fprintf ('parent (%d) = %d  goal: %d   ok: %d\n', ...
-	k, parent (k), goal (k), goal (k) == parent(k)) ;
+        k, parent (k), goal (k), goal (k) == parent(k)) ;
 end
 
 
diff --git a/CXSparse/MATLAB/Test/givens2.m b/CXSparse/MATLAB/Test/givens2.m
index 5420101..62f83fe 100644
--- a/CXSparse/MATLAB/Test/givens2.m
+++ b/CXSparse/MATLAB/Test/givens2.m
@@ -4,8 +4,7 @@ function g = givens2(a,b)
 %   g = givens2(a,b)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (b == 0)
     c = 1 ; s = 0 ;
diff --git a/CXSparse/MATLAB/Test/gqr3.m b/CXSparse/MATLAB/Test/gqr3.m
index 9f31d09..3bfdae1 100644
--- a/CXSparse/MATLAB/Test/gqr3.m
+++ b/CXSparse/MATLAB/Test/gqr3.m
@@ -5,9 +5,7 @@ function R = gqr3 (A)
 %   R = gqr3 (A)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 
@@ -17,14 +15,14 @@ for i = 2:m
     % i
     for k = 1:min(i-1,n)
     % k
-	% Givens rotation to zero out A(i,k) using A(k,k)
-	G = givens2 (A(k,k), A(i,k)) ;
-	A ([k i],k:n) = G * A ([k i],k:n) ;
-	A (i,k) = 0 ;
-	% fprintf ('A(21,25)=%g\n', A(21,25)) ;
-	% if (A(21,25) ~= 0)
-	    % pause
-	% end
+        % Givens rotation to zero out A(i,k) using A(k,k)
+        G = givens2 (A(k,k), A(i,k)) ;
+        A ([k i],k:n) = G * A ([k i],k:n) ;
+        A (i,k) = 0 ;
+        % fprintf ('A(21,25)=%g\n', A(21,25)) ;
+        % if (A(21,25) ~= 0)
+            % pause
+        % end
     end
 end
 R = A ;
diff --git a/CXSparse/MATLAB/Test/happly.m b/CXSparse/MATLAB/Test/happly.m
index 770c5d9..cb56521 100644
--- a/CXSparse/MATLAB/Test/happly.m
+++ b/CXSparse/MATLAB/Test/happly.m
@@ -4,8 +4,6 @@ function hx = happly (v, beta, x)
 %   hx = happly (v,beta,x) ;        % computes hx = x - v * (beta * (v' *x)) ;
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 hx = x - v * (beta * (v' *x)) ;
diff --git a/CXSparse/MATLAB/Test/hmake1.m b/CXSparse/MATLAB/Test/hmake1.m
index 52f8c6c..92964fc 100644
--- a/CXSparse/MATLAB/Test/hmake1.m
+++ b/CXSparse/MATLAB/Test/hmake1.m
@@ -4,17 +4,16 @@ function [v,beta,xnorm] = hmake1 (x)
 %   [v,beta,xnorm] = hmake1 (x)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = length (x) ;
 if (n == 1)
     v = 1 ;
     xnorm = norm (x) ;
     if (x (1) < 0)
-	beta = 2 ;
+        beta = 2 ;
     else
-	beta = 0 ;
+        beta = 0 ;
     end
     return
 end
@@ -24,15 +23,15 @@ v = x ;
 if (sigma == 0)
     v (1) = 1 ;
     if (x (1) < 0)
-	beta = 2 ;
+        beta = 2 ;
     else
-	beta = 0 ;
+        beta = 0 ;
     end
 else
     if (x (1) <= 0)
-	v (1) = x(1) - xnorm ;
+        v (1) = x(1) - xnorm ;
     else
-	v (1) = -sigma / (x(1) + xnorm) ;
+        v (1) = -sigma / (x(1) + xnorm) ;
     end
     beta = (2*v(1)^2) / (sigma + v(1)^2) ;
     v = v / v(1) ;
diff --git a/CXSparse/MATLAB/Test/house.m b/CXSparse/MATLAB/Test/house.m
index 6c6c589..0c32118 100644
--- a/CXSparse/MATLAB/Test/house.m
+++ b/CXSparse/MATLAB/Test/house.m
@@ -5,8 +5,7 @@ function [v,beta,s] = house (x)
 %   [v,beta,s] = house (x)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 v = x ;
 s = norm (x) ;
@@ -15,7 +14,7 @@ if (s == 0)
     v (1) = 1 ;
 else
     if (x (1) ~= 0)
-	s = sign (x (1)) * s ;
+        s = sign (x (1)) * s ;
     end
     v (1) = v (1) + s ;
     beta = 1 / real (conj (s) * v (1)) ;
diff --git a/CXSparse/MATLAB/Test/lu_left.m b/CXSparse/MATLAB/Test/lu_left.m
index 73723f6..b8196ef 100644
--- a/CXSparse/MATLAB/Test/lu_left.m
+++ b/CXSparse/MATLAB/Test/lu_left.m
@@ -4,8 +4,7 @@ function [L,U,P] = lu_left (A)
 %   [L,U,P] = lu_left (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 P = eye (n) ;
@@ -13,13 +12,13 @@ L = zeros (n) ;
 U = zeros (n) ;
 for k = 1:n
     x = [ L(:,1:k-1) [ zeros(k-1,n-k+1) ; eye(n-k+1) ]] \ (P * A (:,k)) ;
-    U (1:k-1,k) = x (1:k-1) ;		% the column of U
-    [a i] = max (abs (x (k:n))) ;	% find the pivot row i
+    U (1:k-1,k) = x (1:k-1) ;           % the column of U
+    [a i] = max (abs (x (k:n))) ;       % find the pivot row i
     i = i + k - 1 ;
-    L ([i k],:) = L ([k i], :) ;	% swap rows i and k of L, P, and x
+    L ([i k],:) = L ([k i], :) ;        % swap rows i and k of L, P, and x
     P ([i k],:) = P ([k i], :) ;
     x ([i k]) = x ([k i]) ;
     U (k,k) = x (k) ;
     L (k,k) = 1 ;
-    L (k+1:n,k) = x (k+1:n) / x (k) ;	% divide the pivot column by U(k,k)
+    L (k+1:n,k) = x (k+1:n) / x (k) ;   % divide the pivot column by U(k,k)
 end
diff --git a/CXSparse/MATLAB/Test/lu_right.m b/CXSparse/MATLAB/Test/lu_right.m
index 39b5ceb..7bde252 100644
--- a/CXSparse/MATLAB/Test/lu_right.m
+++ b/CXSparse/MATLAB/Test/lu_right.m
@@ -4,14 +4,13 @@ function [L,U] = lu_right (A)
 %   [L,U] = lu_right (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 L = eye (n) ;
 U = zeros (n) ;
 for k = 1:n
-    U (k,k:n) = A (k,k:n) ;				       % (6.4) and (6.5)
-    L (k+1:n,k) = A (k+1:n,k) / U (k,k) ;				 % (6.6)
-    A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - L (k+1:n,k) * U (k,k+1:n) ;	 % (6.7)
+    U (k,k:n) = A (k,k:n) ;                                    % (6.4) and (6.5)
+    L (k+1:n,k) = A (k+1:n,k) / U (k,k) ;                                % (6.6)
+    A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - L (k+1:n,k) * U (k,k+1:n) ;      % (6.7)
 end
diff --git a/CXSparse/MATLAB/Test/lu_rightp.m b/CXSparse/MATLAB/Test/lu_rightp.m
index 84bfbbb..11768a1 100644
--- a/CXSparse/MATLAB/Test/lu_rightp.m
+++ b/CXSparse/MATLAB/Test/lu_rightp.m
@@ -5,17 +5,16 @@ function [L,U,P] = lu_rightp (A)
 %   [L,U,P] = lu_rightp (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 P = eye (n) ;
 for k = 1:n
-    [x,i] = max (abs (A (k:n,k))) ;			      % partial pivoting
+    [x,i] = max (abs (A (k:n,k))) ;                           % partial pivoting
     i = i+k-1 ;
     P ([k i],:) = P ([i k], :) ;
-    A ([k i],:) = A ([i k], :) ;			      % (6.10), (6.11)
-    A (k+1:n,k) = A (k+1:n,k) / A (k,k) ;				% (6.12)
+    A ([k i],:) = A ([i k], :) ;                              % (6.10), (6.11)
+    A (k+1:n,k) = A (k+1:n,k) / A (k,k) ;                               % (6.12)
     A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - A (k+1:n,k) * A (k,k+1:n) ;     % (6.9)
 end
 L = tril (A,-1) + eye (n) ;
diff --git a/CXSparse/MATLAB/Test/lu_rightpr.m b/CXSparse/MATLAB/Test/lu_rightpr.m
index ee5ba84..8923538 100644
--- a/CXSparse/MATLAB/Test/lu_rightpr.m
+++ b/CXSparse/MATLAB/Test/lu_rightpr.m
@@ -5,8 +5,7 @@ function [L,U,P] = lu_rightpr (A)
 %   [L,U,P] = lu_rightpr (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n == 1)
@@ -14,16 +13,16 @@ if (n == 1)
     L = 1 ;
     U = A ;
 else
-    [x,i] = max (abs (A (1:n,1))) ;			      % partial pivoting
+    [x,i] = max (abs (A (1:n,1))) ;                           % partial pivoting
     P1 = eye (n) ;
     P1 ([1 i],:) = P1 ([i 1], :) ;
     A = P1*A ;
-    u11 = A (1,1) ;					      % (6.10)
-    u12 = A (1,2:n) ;					      % (6.11)
-    l21 = A (2:n,1) / u11 ;				      % (6.12)
-    [L22,U22,P2] = lu_rightpr (A (2:n,2:n) - l21*u12) ;	      % (6.9) or (6.13)
+    u11 = A (1,1) ;                                           % (6.10)
+    u12 = A (1,2:n) ;                                         % (6.11)
+    l21 = A (2:n,1) / u11 ;                                   % (6.12)
+    [L22,U22,P2] = lu_rightpr (A (2:n,2:n) - l21*u12) ;       % (6.9) or (6.13)
     o = zeros(1,n-1) ;
-    L = [ 1 o ; P2*l21 L22 ] ;				      % (6.14)
+    L = [ 1 o ; P2*l21 L22 ] ;                                % (6.14)
     U = [ u11 u12 ; o' U22 ] ;
     P = [ 1 o ; o' P2] * P1 ;
 end
diff --git a/CXSparse/MATLAB/Test/lu_rightr.m b/CXSparse/MATLAB/Test/lu_rightr.m
index 8f1e74a..5a88582 100644
--- a/CXSparse/MATLAB/Test/lu_rightr.m
+++ b/CXSparse/MATLAB/Test/lu_rightr.m
@@ -4,18 +4,17 @@ function [L,U] = lu_rightr (A)
 %   [L,U] = lu_rightr (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n == 1)
     L = 1 ;
     U = A ;
 else
-    u11 = A (1,1) ;							 % (6.4)
-    u12 = A (1,2:n) ;							 % (6.5)
-    l21 = A (2:n,1) / u11 ;						 % (6.6)
-    [L22,U22] = lu_rightr (A (2:n,2:n) - l21*u12) ;			 % (6.7)
+    u11 = A (1,1) ;                                                      % (6.4)
+    u12 = A (1,2:n) ;                                                    % (6.5)
+    l21 = A (2:n,1) / u11 ;                                              % (6.6)
+    [L22,U22] = lu_rightr (A (2:n,2:n) - l21*u12) ;                      % (6.7)
     L = [ 1 zeros(1,n-1) ; l21 L22 ] ;
     U = [ u11 u12 ; zeros(n-1,1) U22 ] ;
 end
diff --git a/CXSparse/MATLAB/Test/mynormest1.m b/CXSparse/MATLAB/Test/mynormest1.m
index 414f21b..ea94323 100644
--- a/CXSparse/MATLAB/Test/mynormest1.m
+++ b/CXSparse/MATLAB/Test/mynormest1.m
@@ -5,9 +5,7 @@ function est = mynormest1 (L, U, P, Q)
 %   est = mynormest1 (L, U, P, Q)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (L,1) ;
 est = 0 ;
@@ -16,15 +14,15 @@ S = zeros (n,1) ;
 for k = 1:5
 
     if k == 1
-	x = ones (n,1) / n ;
+        x = ones (n,1) / n ;
     else
 
-	j = find (abs (x) == max (abs (x))) ;
-	j = j (1) ;
-	x = zeros (n,1) ;
-	x (j) = 1 ;
+        j = find (abs (x) == max (abs (x))) ;
+        j = j (1) ;
+        x = zeros (n,1) ;
+        x (j) = 1 ;
 
-	% fprintf ('eka: k %d j %d est %g\n', k, j, est) ;
+        % fprintf ('eka: k %d j %d est %g\n', k, j, est) ;
     end
 
 
@@ -37,25 +35,25 @@ for k = 1:5
 
     unchanged = 1 ;
     for i = 1:n
-	if (x (i) >= 0)
-	    s = 1 ;
-	else
-	    s = -1 ;
-	end
-	if (s ~= S (i))
-	    S (i) = s ;
-	    unchanged = 0 ;
-	end
+        if (x (i) >= 0)
+            s = 1 ;
+        else
+            s = -1 ;
+        end
+        if (s ~= S (i))
+            S (i) = s ;
+            unchanged = 0 ;
+        end
     end
 
     if (any (S ~= signum (x)))
-	S'								    %#ok
-	signum(x)'							    %#ok
-	error ('Hey!') ;
+        S'                                                                  %#ok
+        signum(x)'                                                          %#ok
+        error ('Hey!') ;
     end
 
-    if k > 1 & (est <= est_old | unchanged)				    %#ok
-	break ;
+    if k > 1 & (est <= est_old | unchanged)                                 %#ok
+        break ;
     end
     x = S ;
 
@@ -63,10 +61,10 @@ for k = 1:5
     x = P' * (L' \ (U' \ (Q'*x))) ;
 
     if k > 1
-	jnew = find (abs (x) == max (abs (x))) ;
-	if (jnew == j)
-	    break ;
-	end
+        jnew = find (abs (x) == max (abs (x))) ;
+        if (jnew == j)
+            break ;
+        end
     end 
 
 end
@@ -89,4 +87,4 @@ end
 function s = signum (x)
 %SIGNUM compute sign of x
 s = ones (length (x),1) ;
-s (find (x < 0)) = -1 ;	    %#ok
+s (find (x < 0)) = -1 ;     %#ok
diff --git a/CXSparse/MATLAB/Test/myqr.m b/CXSparse/MATLAB/Test/myqr.m
index 451518a..c8370c6 100644
--- a/CXSparse/MATLAB/Test/myqr.m
+++ b/CXSparse/MATLAB/Test/myqr.m
@@ -7,9 +7,7 @@ function [H,R] = myqr (A)
 %   [H,R] = myqr (A)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 
@@ -22,19 +20,19 @@ for k = 1:n
     % fprintf ('\n-----------------init %d\n', k) ;
     x = A (:,k) ;
     for i = 1:k-1
-	v = H(((i+1):m),i) ;
-	v = [1 ; v] ;							    %#ok
-	beta = H (i,i) ;
-	% n1 = norm (x (i:m)) ;
-	x (i:m) = happly (v, beta, x (i:m)) ;
-	% n2 = norm (x (i:m)) ;
-	% fprintf ('=============== i %d %g %g\n', i, n1, n2) ;
-	% beta
-	% v'
-	% X = x'
-	% pause
-	% i
-	% x
+        v = H(((i+1):m),i) ;
+        v = [1 ; v] ;                                                       %#ok
+        beta = H (i,i) ;
+        % n1 = norm (x (i:m)) ;
+        x (i:m) = happly (v, beta, x (i:m)) ;
+        % n2 = norm (x (i:m)) ;
+        % fprintf ('=============== i %d %g %g\n', i, n1, n2) ;
+        % beta
+        % v'
+        % X = x'
+        % pause
+        % i
+        % x
     end
     % k
     % x
diff --git a/CXSparse/MATLAB/Test/norm1est.m b/CXSparse/MATLAB/Test/norm1est.m
index edd5d09..428c7d9 100644
--- a/CXSparse/MATLAB/Test/norm1est.m
+++ b/CXSparse/MATLAB/Test/norm1est.m
@@ -5,31 +5,30 @@ function est = norm1est (L,U,P,Q)
 %   est = norm1est (L,U,P,Q)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (L,1) ;
 for k = 1:5
     if (k == 1)
-	est = 0 ;
-	x = ones (n,1) / n ;
-	jold = -1 ;
+        est = 0 ;
+        x = ones (n,1) / n ;
+        jold = -1 ;
     else
-	j = min (find (abs (x) == norm (x,inf))) ;			    %#ok
-	if (j == jold)
-	    break
-	end ;
-	x = zeros (n,1) ;
-	x (j) = 1 ;
-	jold = j ;
+        j = min (find (abs (x) == norm (x,inf))) ;                          %#ok
+        if (j == jold)
+            break
+        end ;
+        x = zeros (n,1) ;
+        x (j) = 1 ;
+        jold = j ;
     end
     x = Q * (U \ (L \ (P*x))) ;
     est_old = est ;
     est = norm (x,1) ;
-    if (k > 1 & est <= est_old)						    %#ok
-	break
+    if (k > 1 & est <= est_old)                                             %#ok
+        break
     end ;
     s = ones (n,1) ;
-    s (find (x < 0)) = -1 ;						    %#ok
+    s (find (x < 0)) = -1 ;                                                 %#ok
     x = P' * (L' \ (U' \ (Q'*s))) ;
 end
diff --git a/CXSparse/MATLAB/Test/qr2.m b/CXSparse/MATLAB/Test/qr2.m
index d9b19a5..c431259 100644
--- a/CXSparse/MATLAB/Test/qr2.m
+++ b/CXSparse/MATLAB/Test/qr2.m
@@ -5,8 +5,7 @@ function [V,Beta,R] = qr2 (A)
 %   [V,beta,R] = qr2 (A)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 V = zeros (m,n) ;
diff --git a/CXSparse/MATLAB/Test/qr_givens.m b/CXSparse/MATLAB/Test/qr_givens.m
index 1a59736..1b24376 100644
--- a/CXSparse/MATLAB/Test/qr_givens.m
+++ b/CXSparse/MATLAB/Test/qr_givens.m
@@ -4,21 +4,20 @@ function R = qr_givens (A)
 %   R = qr_givens (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 parent = cs_etree (sparse (A), 'col') ;
 A = full (A) ;
 for i = 2:m
-    k = min (find (A (i,:))) ;						    %#ok
+    k = min (find (A (i,:))) ;                                              %#ok
     if (isempty (k))
-	continue ;
+        continue ;
     end
-    while (k > 0 & k <= min (i-1,n))					    %#ok
-	A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
-	A (i,k) = 0 ;
-	k = parent (k) ;
+    while (k > 0 & k <= min (i-1,n))                                        %#ok
+        A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
+        A (i,k) = 0 ;
+        k = parent (k) ;
     end
 end
 R = sparse (A) ;
diff --git a/CXSparse/MATLAB/Test/qr_givens_full.m b/CXSparse/MATLAB/Test/qr_givens_full.m
index 5a57cb7..7690db0 100644
--- a/CXSparse/MATLAB/Test/qr_givens_full.m
+++ b/CXSparse/MATLAB/Test/qr_givens_full.m
@@ -4,14 +4,13 @@ function R = qr_givens_full (A)
 %   R = qr_givens_full (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 for i = 2:m
     for k = 1:min(i-1,n)
-	A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
-	A (i,k) = 0 ;
+        A ([k i],k:n) = givens2 (A(k,k), A(i,k)) * A ([k i],k:n) ;
+        A (i,k) = 0 ;
     end
 end
 R = A ;
diff --git a/CXSparse/MATLAB/Test/qr_left.m b/CXSparse/MATLAB/Test/qr_left.m
index 8b2a5d5..7248687 100644
--- a/CXSparse/MATLAB/Test/qr_left.m
+++ b/CXSparse/MATLAB/Test/qr_left.m
@@ -4,8 +4,7 @@ function [V,Beta,R] = qr_left (A)
 %  [V,Beta,R] = qr_left (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 V = zeros (m,n) ;
@@ -14,9 +13,9 @@ R = zeros (m,n) ;
 for k = 1:n
     x = A (:,k) ;
     for i = 1:k-1
-	v = V (i:m,i) ;
-	beta = Beta (i) ;
-	x (i:m) = x (i:m) - v * (beta * (v' * x (i:m))) ;
+        v = V (i:m,i) ;
+        beta = Beta (i) ;
+        x (i:m) = x (i:m) - v * (beta * (v' * x (i:m))) ;
     end
     [v,beta,s] = gallery ('house', x (k:m), 2) ;
     V (k:m,k) = v ;
diff --git a/CXSparse/MATLAB/Test/qr_right.m b/CXSparse/MATLAB/Test/qr_right.m
index 24de54c..e945055 100644
--- a/CXSparse/MATLAB/Test/qr_right.m
+++ b/CXSparse/MATLAB/Test/qr_right.m
@@ -4,8 +4,7 @@ function [V,Beta,R] = qr_right (A)
 %   [V,Beta,R] = qr_right (A)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 V = zeros (m,n) ;
diff --git a/CXSparse/MATLAB/Test/sample_colormap.m b/CXSparse/MATLAB/Test/sample_colormap.m
index 50ef089..8e22328 100644
--- a/CXSparse/MATLAB/Test/sample_colormap.m
+++ b/CXSparse/MATLAB/Test/sample_colormap.m
@@ -5,9 +5,7 @@ function sample_colormap
 %   sample_colormap
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 h = jet (64) ;
 h = h (64:-1:1,:) ;
@@ -20,8 +18,8 @@ h = h (20:end,:) ;
 % h (:,2) = h (:,2) ./ s ;
 % h (:,3) = h (:,3) ./ s ;
 
-h (1,:) = [1 1 1] ;	% white
-h (2,:) = [1 1 .8] ;	% light yellow
+h (1,:) = [1 1 1] ;     % white
+h (2,:) = [1 1 .8] ;    % light yellow
 
 % h
 colormap (h) ;
diff --git a/CXSparse/MATLAB/Test/signum.m b/CXSparse/MATLAB/Test/signum.m
index ec806bc..d7bf622 100644
--- a/CXSparse/MATLAB/Test/signum.m
+++ b/CXSparse/MATLAB/Test/signum.m
@@ -4,10 +4,9 @@ function s = signum (x)
 %   s = signum(x)
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 s = ones (length (x),1) ;
-s (find (x < 0)) = -1 ;	    %#ok
+s (find (x < 0)) = -1 ;     %#ok
 disp ('s =') ;
 disp (s) ;
diff --git a/CXSparse/MATLAB/Test/sqr_example.m b/CXSparse/MATLAB/Test/sqr_example.m
index 9c07379..d09b014 100644
--- a/CXSparse/MATLAB/Test/sqr_example.m
+++ b/CXSparse/MATLAB/Test/sqr_example.m
@@ -4,8 +4,7 @@ function sqr_example
 %   sqr_example
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 Prob = UFget (706) ;
 
diff --git a/CXSparse/MATLAB/Test/test1.m b/CXSparse/MATLAB/Test/test1.m
index d5c2196..4e5d802 100644
--- a/CXSparse/MATLAB/Test/test1.m
+++ b/CXSparse/MATLAB/Test/test1.m
@@ -5,9 +5,7 @@ function test1
 %   test1
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -19,39 +17,39 @@ for ii = f
     disp (Prob) ;
     for cmplex = 0:double(~ispc)
 
-	A = Prob.A ;
-	if (cmplex)
-	    A = A + 1i*sprand(A) ;
-	end
+        A = Prob.A ;
+        if (cmplex)
+            A = A + 1i*sprand(A) ;
+        end
 
-	B = A' ;
-	C = cs_transpose (A) ;
-	if (nnz (B-C) ~= 0)
-	    error ('!')
-	end
+        B = A' ;
+        C = cs_transpose (A) ;
+        if (nnz (B-C) ~= 0)
+            error ('!')
+        end
 
-	C = cs_transpose (A,0) ;
-	if (nnz (A.'-C) ~= 0)
-	    error ('!')
-	end
+        C = cs_transpose (A,0) ;
+        if (nnz (A.'-C) ~= 0)
+            error ('!')
+        end
 
-	C = cs_transpose (A,1) ;
-	if (nnz (A'-C) ~= 0)
-	    error ('!')
-	end
+        C = cs_transpose (A,1) ;
+        if (nnz (A'-C) ~= 0)
+            error ('!')
+        end
 
-	[m n] = size (A) ;
-	% if (m == n)
-	    x = rand (n,1) ;
-	    y = rand (m,1) ;
-	    z = y+A*x ;
-	    q = cs_gaxpy (A,x,y) ;
-	    err = norm (z-q,1) / norm (z,1) ;
-	    disp (err) ;
-	    if (err > 1e-14)
-		error ('!')
-	    end
-	% end
+        [m n] = size (A) ;
+        % if (m == n)
+            x = rand (n,1) ;
+            y = rand (m,1) ;
+            z = y+A*x ;
+            q = cs_gaxpy (A,x,y) ;
+            err = norm (z-q,1) / norm (z,1) ;
+            disp (err) ;
+            if (err > 1e-14)
+                error ('!')
+            end
+        % end
 
         if (~ispc)
             x = x + 1i*rand (n,1) ;
@@ -65,24 +63,31 @@ for ii = f
             end
         end
 
-	[i j x] = find (A) ;
-	p = randperm (length (i)) ;
-	i = i (p) ;
-	j = j (p) ;
-	x = x (p) ;
-	D = sparse (i,j,x) ;
-	E = cs_sparse (i,j,x) ;
-	% [i j x]
-	F = cs_sparse2 (i,j,x) ;
-	if (nnz (D-E) ~= 0)
-	    error ('!')
-	end
-	if (nnz (F-E) ~= 0)
-	    error ('!')
-	end
+        [i j x] = find (A) ;
+        p = randperm (length (i)) ;
+        i = i (p) ;
+        j = j (p) ;
+        x = x (p) ;
+        if (m <= 1)
+            % The find function returns row vectors i,j,x when size(A,1) is 1.
+            % This is fine for the MATLAB 'sparse', but not for cs_sparse.
+            i = i (:) ;
+            j = j (:) ;
+            x = x (:) ;
+        end
+        D = sparse (i,j,x) ;
+        E = cs_sparse (i,j,x) ;
+        % [i j x]
+        F = cs_sparse2 (i,j,x) ;
+        if (nnz (D-E) ~= 0)
+            error ('!')
+        end
+        if (nnz (F-E) ~= 0)
+            error ('!')
+        end
 
-	clear A B C D E F
-	% pause
+        clear A B C D E F
+        % pause
 
     end
 end
diff --git a/CXSparse/MATLAB/Test/test10.m b/CXSparse/MATLAB/Test/test10.m
index f33fe9e..5f363eb 100644
--- a/CXSparse/MATLAB/Test/test10.m
+++ b/CXSparse/MATLAB/Test/test10.m
@@ -5,13 +5,10 @@ function test10
 %   test10
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
-
 % f = 185 ;
 % f = 449 ;
 clf
@@ -24,85 +21,85 @@ for trials = 1:100
     A = sprandn (m, n, d) ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     sp = sprank (A) ;
     % if (sp < n)
-    %	continue ;
+    %   continue ;
     % end
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 1i * sprand (A) * norm (A,1) / 10 ;
-	end
-
-	Aorig = A ;
-
-	% A = A (:, colamd (A)) ;
-
-	if (cmplex)
-	    tic ;
-	    R = chol (A'*A + speye (n)) ;
-	    t1 = toc ;
-	else
-	    tic ;
-	    R = qr (A) ;
-	    t1 = toc ;
-	end
-
-	% tic ;
-	% [Q,R] = qr (A) ;
-	% t1 = toc ;
-
-	[c,h,parent] = symbfact (A, 'col') ;				    %#ok
-	rnz = sum (c) ;							    %#ok
-	tic ;
-	[V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
-	t2 = toc ;
-
-	C = A ;
-	m2 = size (V2,1) ;
-	if (m2 > m)
-	    C = [A ; sparse(m2-m, n)] ;
-	end
-	C = C (p,:) ;
-
-	[H1,R1] = myqr (C) ;
-	err1 = norm (R1-R2,1) / norm (R1) ;
-	disp ('err1 = ') ;
-	disp (err1) ;
-	% [svd(A) svd(R1) svd(full(R2))]
-	s1 = svd (full (A)) ;
-	s2 = svd (full (R2)) ;
-	if (n > 0)
-	    err2 = norm (s1 - s2) / s1 (1)  ;
-	    disp ('err2 = ') ;
-	    disp (err2) ;
-	else
-	    err2 = 0 ;
-	end
-	fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d vs %d\n', t1, t2, t1/t2, sp, n) ;
-
-	% H2 = full (H2)
-	% R2 = full (R2)
-
-	subplot (2,4,1) ; spy (A) ;		title ('A colamd') ;
-	subplot (2,4,4) ; spy (Aorig) ;	title ('Aorig') ;
-	subplot (2,4,2) ; spy (C) ;		title ('A rperm') ;
-	subplot (2,4,5) ; spy (abs(R2)>0) ;	title ('spqr R, no zeros') ;
-	subplot (2,4,6) ; spy (R) ;		title ('matlab R') ;
-	subplot (2,4,7) ; spy (R2) ;	title ('spqr R') ;
-	subplot (2,4,8) ; spy (V2) ;	title ('spqr H') ;
-	drawnow
-
-	if (err2 > 1e-9)
-	    error ('!') ;
-	end
-
-	if (m2 > m)
-	    fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
-	end
+        if (cmplex)
+            A = A + 1i * sprand (A) * norm (A,1) / 10 ;
+        end
+
+        Aorig = A ;
+
+        % A = A (:, colamd (A)) ;
+
+        if (cmplex)
+            tic ;
+            R = chol (A'*A + speye (n)) ;
+            t1 = toc ;
+        else
+            tic ;
+            R = qr (A) ;
+            t1 = toc ;
+        end
+
+        % tic ;
+        % [Q,R] = qr (A) ;
+        % t1 = toc ;
+
+        [c,h,parent] = symbfact (A, 'col') ;                                %#ok
+        rnz = sum (c) ;                                                     %#ok
+        tic ;
+        [V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
+        t2 = toc ;
+
+        C = A ;
+        m2 = size (V2,1) ;
+        if (m2 > m)
+            C = [A ; sparse(m2-m, n)] ;
+        end
+        C = C (p,:) ;
+
+        [H1,R1] = myqr (C) ;
+        err1 = norm (R1-R2,1) / norm (R1) ;
+        disp ('err1 = ') ;
+        disp (err1) ;
+        % [svd(A) svd(R1) svd(full(R2))]
+        s1 = svd (full (A)) ;
+        s2 = svd (full (R2)) ;
+        if (n > 0)
+            err2 = norm (s1 - s2) / s1 (1)  ;
+            disp ('err2 = ') ;
+            disp (err2) ;
+        else
+            err2 = 0 ;
+        end
+        fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d vs %d\n', t1, t2, t1/t2, sp, n) ;
+
+        % H2 = full (H2)
+        % R2 = full (R2)
+
+        subplot (2,4,1) ; spy (A) ;             title ('A colamd') ;
+        subplot (2,4,4) ; spy (Aorig) ; title ('Aorig') ;
+        subplot (2,4,2) ; spy (C) ;             title ('A rperm') ;
+        subplot (2,4,5) ; spy (abs(R2)>0) ;     title ('spqr R, no zeros') ;
+        subplot (2,4,6) ; spy (R) ;             title ('matlab R') ;
+        subplot (2,4,7) ; spy (R2) ;    title ('spqr R') ;
+        subplot (2,4,8) ; spy (V2) ;    title ('spqr H') ;
+        drawnow
+
+        if (err2 > 1e-9)
+            error ('!') ;
+        end
+
+        if (m2 > m)
+            fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
+        end
     end
 end
diff --git a/CXSparse/MATLAB/Test/test11.m b/CXSparse/MATLAB/Test/test11.m
index 2e86baa..48f2faa 100644
--- a/CXSparse/MATLAB/Test/test11.m
+++ b/CXSparse/MATLAB/Test/test11.m
@@ -5,8 +5,7 @@ function test11
 %   test11
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -18,7 +17,7 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     A = spones (A) ;
@@ -34,13 +33,13 @@ for i = f
     rc1 = full (sum (R)) ;
     rc2 = cs_rowcnt (A, pa, po) ;
     if (any (rc1 ~= rc2))
-	error ('!') ;
+        error ('!') ;
     end
 
     try
-	p = amd (A) ;
+        p = amd (A) ;
     catch
-	p = symamd (A) ;
+        p = symamd (A) ;
     end
     A = A (p,p) ;
 
@@ -48,7 +47,7 @@ for i = f
     rc1 = full (sum (R)) ;
     rc2 = cs_rowcnt (A, pa, po) ;
     if (any (rc1 ~= rc2))
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CXSparse/MATLAB/Test/test12.m b/CXSparse/MATLAB/Test/test12.m
index e4c3b49..4d95a5a 100644
--- a/CXSparse/MATLAB/Test/test12.m
+++ b/CXSparse/MATLAB/Test/test12.m
@@ -5,8 +5,7 @@ function test12
 %   test12
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('test 12\n') ;
 rand ('state',0) ;
@@ -18,30 +17,30 @@ for trial = 1:100
     d = .1 * rand (1) ;
     A = sprandn (m,n,d) ;
     if (m < n)
-	continue ;
+        continue ;
     end
-    if (m == 0 | n == 0)						    %#ok
-	continue ;
+    if (m == 0 | n == 0)                                                    %#ok
+        continue ;
     end
 
     for cmplex = 0:double(~ispc)
-	if (cmplex)
-	    A = A + 1i * sprand (A) ;
-	end
+        if (cmplex)
+            A = A + 1i * sprand (A) ;
+        end
 
-	fprintf ('m %d n %d nnz %d\n', m, n, nnz(A)) ;
-	[V,Beta,p,R] = cs_qr (A) ;
+        fprintf ('m %d n %d nnz %d\n', m, n, nnz(A)) ;
+        [V,Beta,p,R] = cs_qr (A) ;
 
-	s1 = svd (full (A)) ;
-	s2 = svd (full (R)) ;
-	s2 = s2 (1:length(s1)) ;
-	err = norm (s1-s2) ; 
-	if (length (s1) > 1)
-	    err = err / s1 (1) ;
-	end
-	fprintf ('err %g\n', err) ;
-	if (err > 1e-12)
-	    error ('!') ;
-	end
+        s1 = svd (full (A)) ;
+        s2 = svd (full (R)) ;
+        s2 = s2 (1:length(s1)) ;
+        err = norm (s1-s2) ; 
+        if (length (s1) > 1)
+            err = err / s1 (1) ;
+        end
+        fprintf ('err %g\n', err) ;
+        if (err > 1e-12)
+            error ('!') ;
+        end
     end
 end
diff --git a/CXSparse/MATLAB/Test/test13.m b/CXSparse/MATLAB/Test/test13.m
index fd3b2e5..afb7bf5 100644
--- a/CXSparse/MATLAB/Test/test13.m
+++ b/CXSparse/MATLAB/Test/test13.m
@@ -5,9 +5,7 @@ function test13
 %   test13
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 randn ('state',0) ;
@@ -52,27 +50,27 @@ for trial = 1:100
     % pause
 
     p0 = etree (A, 'col') ;
-    % p1 = etree2 (A, 'col') ;	% CHOLMOD
+    % p1 = etree2 (A, 'col') ;  % CHOLMOD
     p2 = cs_etree (A, 'col') ;
 
     if (~isempty (A))
-	check_if_same (p0,p2) ;
+        check_if_same (p0,p2) ;
     end
 
     p0 = etree (C, 'col') ;
-    % p1 = etree2 (C, 'col') ;	% CHOLMOD
+    % p1 = etree2 (C, 'col') ;  % CHOLMOD
     p2 = cs_etree (C, 'col') ;
 
     if (~isempty (C))
-	check_if_same (p0,p2) ;
+        check_if_same (p0,p2) ;
     end
 
     % find etree of A'A, and postorder it
-    [m n] = size (A) ;							    %#ok
+    [m n] = size (A) ;                                                      %#ok
     % full (A)
 
     [cp0 cpo0] = etree (A, 'col') ;
-    % [cp1 cpo1] = etree2 (A, 'col') ;	% CHOLMOD
+    % [cp1 cpo1] = etree2 (A, 'col') ;  % CHOLMOD
     [cp2 cpo2] = cs_etree (A, 'col') ;
     % cpo2 = cs_post (cp2) ;
 
diff --git a/CXSparse/MATLAB/Test/test14.m b/CXSparse/MATLAB/Test/test14.m
index 4de44a1..8d1b21c 100644
--- a/CXSparse/MATLAB/Test/test14.m
+++ b/CXSparse/MATLAB/Test/test14.m
@@ -5,9 +5,7 @@ function test14
 %   test14
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -22,24 +20,24 @@ for trial = 1:100
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 1i * sparse (i,j,2*rand(size(x))-1) ;
-	end
+        if (cmplex)
+            A = A + 1i * sparse (i,j,2*rand(size(x))-1) ;
+        end
 
-	% using CSparse
-	tol = 0.5 ;
-	B = cs_droptol (A, tol) ;
+        % using CSparse
+        tol = 0.5 ;
+        B = cs_droptol (A, tol) ;
 
-	% using MATLAB
-	C = A .* (abs (A) > tol) ;
+        % using MATLAB
+        C = A .* (abs (A) > tol) ;
     %    [m n] = size (A) ;
     %    s = abs (A) > tol ;
     %    [i j] = find (s) ;
     %    x = A (find (s)) ;
     %    A = sparse (i, j, x, m, n) ;
 
-	if (norm (C-B,1) > 0)
-	    error ('!') ;
-	end
+        if (norm (C-B,1) > 0)
+            error ('!') ;
+        end
     end
 end
diff --git a/CXSparse/MATLAB/Test/test15.m b/CXSparse/MATLAB/Test/test15.m
index 9269d36..967cf2e 100644
--- a/CXSparse/MATLAB/Test/test15.m
+++ b/CXSparse/MATLAB/Test/test15.m
@@ -5,9 +5,7 @@ function test15
 %   test15
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 randn ('state', 0) ;
@@ -23,7 +21,7 @@ for trials = 1:100
     k = max (1, k) ;
     k = min (n, k) ;
     if (n > 0)
-	A (:,k) = 1 ;
+        A (:,k) = 1 ;
     end
 
     if (~ispc)
@@ -33,14 +31,14 @@ for trials = 1:100
     end
 
     try
-	p0 = amd (A) ;
+        p0 = amd (A) ;
     catch
-	p0 = symamd (A) ;
+        p0 = symamd (A) ;
     end
     p1 = cs_amd (A) ;
 
     if (any (sort (p1) ~= 1:n))
-	error ('not perm!') ;
+        error ('not perm!') ;
     end
 
     C = A+A' + speye (n) ;
diff --git a/CXSparse/MATLAB/Test/test16.m b/CXSparse/MATLAB/Test/test16.m
index fe7529c..d96e268 100644
--- a/CXSparse/MATLAB/Test/test16.m
+++ b/CXSparse/MATLAB/Test/test16.m
@@ -5,8 +5,7 @@ function test16
 %   test16
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 randn ('state', 0) ;
@@ -21,18 +20,18 @@ skip = 811 ;
 
 for i = f
     if (any (i == skip))
-	continue
+        continue
     end
     Prob = UFget (i) ;
     A = spones (Prob.A) ;
     Aorig = A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     if (m ~= n)
-	A = A'*A ;
+        A = A'*A ;
     end
 
     if (~ispc)
@@ -44,15 +43,15 @@ for i = f
     fprintf ('n %4d nz %d\n', n, nnz (A)) ;
 
     try
-	p0 = amd (A) ;
+        p0 = amd (A) ;
     catch
-	p0 = symamd (A) ;
+        p0 = symamd (A) ;
     end
     fprintf ('symmetric case:\n') ;
     p1 = cs_amd (A) ;
 
     if (any (sort (p1) ~= 1:n))
-	error ('not perm!') ;
+        error ('not perm!') ;
     end
 
     C = A+A' + speye (n) ;
@@ -64,32 +63,32 @@ for i = f
     drawnow
 
     if (lnz0 ~= lnz1)
-	fprintf ('----------------- lnz %d %d   %9.4f\n', ...
-	    lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
+        fprintf ('----------------- lnz %d %d   %9.4f\n', ...
+            lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
     end
 
     if (1)
 
-	p0 = colamd (Aorig) ;
-	[m n] = size (Aorig) ;
-	fprintf ('m %d n %d\n', m, n) ;
-
-	fprintf ('A''A case, no dense rows (for QR):\n') ;
-	p1 = cs_amd (Aorig, 3) ;
-	if (any (sort (p1) ~= 1:n))
-	    error ('not perm!') ;
-	end
-
-	subplot (2,3,4) ; spy (Aorig)
-	subplot (2,3,5) ; spy (Aorig (:,p0)) ; title ('colamd') ;
-	subplot (2,3,6) ; spy (Aorig (:,p1)) ; title ('cs amd(A''A)') ;
-	lnz0 = sum (symbfact (Aorig (:,p0), 'col')) ;
-	lnz1 = sum (symbfact (Aorig (:,p1), 'col')) ;
-	fprintf ('                    A''A: %7d %7d %9.4f\n', ...
-	    lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
-	drawnow
-
-	% pause
+        p0 = colamd (Aorig) ;
+        [m n] = size (Aorig) ;
+        fprintf ('m %d n %d\n', m, n) ;
+
+        fprintf ('A''A case, no dense rows (for QR):\n') ;
+        p1 = cs_amd (Aorig, 3) ;
+        if (any (sort (p1) ~= 1:n))
+            error ('not perm!') ;
+        end
+
+        subplot (2,3,4) ; spy (Aorig)
+        subplot (2,3,5) ; spy (Aorig (:,p0)) ; title ('colamd') ;
+        subplot (2,3,6) ; spy (Aorig (:,p1)) ; title ('cs amd(A''A)') ;
+        lnz0 = sum (symbfact (Aorig (:,p0), 'col')) ;
+        lnz1 = sum (symbfact (Aorig (:,p1), 'col')) ;
+        fprintf ('                    A''A: %7d %7d %9.4f\n', ...
+            lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
+        drawnow
+
+        % pause
 
     end
 end
diff --git a/CXSparse/MATLAB/Test/test17.m b/CXSparse/MATLAB/Test/test17.m
index 1ab9406..99e5327 100644
--- a/CXSparse/MATLAB/Test/test17.m
+++ b/CXSparse/MATLAB/Test/test17.m
@@ -5,9 +5,7 @@ function test17
 %   test17
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 clf
@@ -24,7 +22,7 @@ for trials = 1:100
 
     A = sprandn (m, n, d) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
 
@@ -44,7 +42,7 @@ for trials = 1:100
     disp ('err = ') ;
     disp (err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     m2 = size (Q1,1) ;
@@ -68,18 +66,18 @@ for trials = 1:100
     err3 = norm (Q3*R3 - A, 1) ;
 
     fprintf ('m %3d m2 %3d n %3d    ::: %3d     %6.2e %6.2e\n', ...
-	m, m2, n, m2-m, err1, err3) ;
+        m, m2, n, m2-m, err1, err3) ;
 
     if (err1 > 1e-12)
-	error ('2!') ;
+        error ('2!') ;
     end
 
 %    if (err2 > 1e-12)
-%	error ('!') ;
+%       error ('!') ;
 %    end
 
     if (err3 > 1e-12)
-	error ('3!') ;
+        error ('3!') ;
     end
 
 try
@@ -103,7 +101,7 @@ try
     r3 = norm (A(:,q1)*x3(1:n)-b) ;
 
     fprintf ('least sq:  %6.2e %6.2e %6.2e diff %6.2e %6.2e\n', ...
-	r1, r2, r3, r1-r2, r1-r3) ;
+        r1, r2, r3, r1-r2, r1-r3) ;
 
 catch
 end
diff --git a/CXSparse/MATLAB/Test/test18.m b/CXSparse/MATLAB/Test/test18.m
index b2d9339..3dc46d0 100644
--- a/CXSparse/MATLAB/Test/test18.m
+++ b/CXSparse/MATLAB/Test/test18.m
@@ -5,9 +5,7 @@ function test18
 %   test18
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -21,8 +19,8 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     b = rand (n,1) ;
diff --git a/CXSparse/MATLAB/Test/test19.m b/CXSparse/MATLAB/Test/test19.m
index 6143241..bdad84b 100644
--- a/CXSparse/MATLAB/Test/test19.m
+++ b/CXSparse/MATLAB/Test/test19.m
@@ -5,9 +5,7 @@ function test19
 %   test19
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -44,13 +42,13 @@ for trials = 1:100
     pp2 = cs_dmperm (A) ;
     spr2 = sum (pp2 > 0) ;
     if (spr2 ~= sprnk)
-	error ('!')
+        error ('!')
     end
 
     pp2 = cs_maxtransr (A) ;
     spr2 = sum (pp2 > 0) ;
     if (spr2 ~= sprnk)
-	error ('!')
+        error ('!')
     end
 
     [p,q,r,s] = dmperm (A) ;
@@ -68,41 +66,41 @@ for trials = 1:100
     hold on
 
     for k = 1:nk
-	r1 = r(k) ;
-	r2 = r(k+1) ;
-	c1 = s(k)  ;
-	c2 = s(k+1) ;
-	plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        r1 = r(k) ;
+        r2 = r(k+1) ;
+        c1 = s(k)  ;
+        c2 = s(k+1) ;
+        plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
     end
 
     [p2,q2,rr2,ss2,cp,rp] = cs_dmperm (A) ;
 
     if (min (m,n) > 0)
-	if (length (rr2) ~= length (r))
-	    error ('# fine blocks!') ;
-	end
+        if (length (rr2) ~= length (r))
+            error ('# fine blocks!') ;
+        end
     end
 
     if (rp (4) - 1 ~= sprnk)
-	rp		%#ok
-	sprnk		%#ok
-	error ('!') ;
+        rp              %#ok
+        sprnk           %#ok
+        error ('!') ;
     end
 
     if (any (sort (p2) ~= 1:m))
-	error ('p2!') ;
+        error ('p2!') ;
     end
 
     if (any (sort (q2) ~= 1:n))
-	error ('q2!') ;
+        error ('q2!') ;
     end
 
     if (cp (5) ~= n+1)
-	error ('cp!') ;
+        error ('cp!') ;
     end
 
     if (rp (5) ~= m+1)
-	error ('rp!') ;
+        error ('rp!') ;
     end
 
     C = A (p2,q2) ;
@@ -127,7 +125,7 @@ for trials = 1:100
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C1 diag!') ;
+        error ('C1 diag!') ;
     end
 
     r1 = rp(2) ;
@@ -138,7 +136,7 @@ for trials = 1:100
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C2 diag!') ;
+        error ('C2 diag!') ;
     end
 
     r1 = rp(3) ;
@@ -149,52 +147,52 @@ for trials = 1:100
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C3 diag!') ;
+        error ('C3 diag!') ;
     end
 
-    r1 = rp(4) ;							    %#ok
-    r2 = rp(5) ;							    %#ok
-    c1 = cp(4) ;							    %#ok
-    c2 = cp(5) ;							    %#ok
+    r1 = rp(4) ;                                                            %#ok
+    r2 = rp(5) ;                                                            %#ok
+    c1 = cp(4) ;                                                            %#ok
+    c2 = cp(5) ;                                                            %#ok
     % plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
 
     if (~isempty (S))
 
-	[p1,q1,r0,s0] = dmperm (S) ;
-	[p3,r3] = cs_scc (S) ;
-	if (length (r3) ~= length (r0))
-	    error ('scc size!') ;
-	end
-
-	if (any (sort (p3) ~= 1:m))
-	    error ('scc perm!') ;
-	end
-
-	nk = length (r0)-1 ;
-
-	subplot (2,3,4) ;
-	hold off
-	spy (S (p1,q1)) ;
-	hold on
-	for k = 1:nk
-	    r1 = r0(k) ;
-	    r2 = r0(k+1) ;
-	    c1 = s0(k)  ;
-	    c2 = s0(k+1) ;
-	    plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
-	end
-
-	subplot (2,3,5) ;
-	hold off
-	spy (S (p3,p3)) ;
-	hold on
-	for k = 1:nk
-	    r1 = r3(k) ;
-	    r2 = r3(k+1) ;
-	    c1 = r3(k)  ;
-	    c2 = r3(k+1) ;
-	    plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
-	end
+        [p1,q1,r0,s0] = dmperm (S) ;
+        [p3,r3] = cs_scc (S) ;
+        if (length (r3) ~= length (r0))
+            error ('scc size!') ;
+        end
+
+        if (any (sort (p3) ~= 1:m))
+            error ('scc perm!') ;
+        end
+
+        nk = length (r0)-1 ;
+
+        subplot (2,3,4) ;
+        hold off
+        spy (S (p1,q1)) ;
+        hold on
+        for k = 1:nk
+            r1 = r0(k) ;
+            r2 = r0(k+1) ;
+            c1 = s0(k)  ;
+            c2 = s0(k+1) ;
+            plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        end
+
+        subplot (2,3,5) ;
+        hold off
+        spy (S (p3,p3)) ;
+        hold on
+        for k = 1:nk
+            r1 = r3(k) ;
+            r2 = r3(k+1) ;
+            c1 = r3(k)  ;
+            c2 = r3(k+1) ;
+            plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        end
 
     end
 
diff --git a/CXSparse/MATLAB/Test/test2.m b/CXSparse/MATLAB/Test/test2.m
index 6d603fa..ee40429 100644
--- a/CXSparse/MATLAB/Test/test2.m
+++ b/CXSparse/MATLAB/Test/test2.m
@@ -5,8 +5,7 @@ function test2
 %   test2
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 % clf
@@ -30,29 +29,29 @@ for trial = 1:100
     B = cs_sparse (i,j,x) ;
     D = cs_sparse2 (i,j,x) ;
     fprintf ('%3d %3d %6d : %6d %6d : %d\n', ...
-	m, n, nz, nnz (A), nnz(B), nz-nnz(A)) ;
+        m, n, nz, nnz (A), nnz(B), nz-nnz(A)) ;
 
     err = norm (A-B,1) / max (1, norm (A,1)) ;
     if (err > 0)
-	disp ('err = ') ;
-	disp (err) ;
+        disp ('err = ') ;
+        disp (err) ;
     end
     if (err > 1e-14)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (nnz (B-D) > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (nnz (A) ~= nnz (B))
-	error ('nz!') ;
+        error ('nz!') ;
     end
 
     if (max (1,nnz (B)) ~= max (1,nzmax (B)))
-	nnz (B)
-	nzmax (B)
-	error ('nzmax!') ;
+        nnz (B)
+        nzmax (B)
+        error ('nzmax!') ;
     end
     % pack
 
@@ -64,7 +63,7 @@ for trial = 1:100
     C2 = cs_permute (A,p,q) ;
     err = norm (C1-C2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
 %    subplot (1,2,1) ; spy (A)
@@ -84,12 +83,12 @@ for trial = 1:100
 
     err = norm (x1-x2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
     x1 = zeros (m,1) ;
-    x1 (p) = x ;							    %#ok
-    x2 = cs_ipvec (x, p) ;						    %#ok
+    x1 (p) = x ;                                                            %#ok
+    x2 = cs_ipvec (x, p) ;                                                  %#ok
 
     n = min (m,n) ;
     B = A (1:n, 1:n) ;
@@ -100,14 +99,14 @@ for trial = 1:100
     C2 = cs_symperm (B,p) ;
 
     try
-	pp = amd (C2) ;							    %#ok
+        pp = amd (C2) ;                                                     %#ok
     catch
-	pp = symamd (C2) ;						    %#ok
+        pp = symamd (C2) ;                                                  %#ok
     end
 
     err = norm (C1-C2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CXSparse/MATLAB/Test/test20.m b/CXSparse/MATLAB/Test/test20.m
index d2264ae..8d6dac7 100644
--- a/CXSparse/MATLAB/Test/test20.m
+++ b/CXSparse/MATLAB/Test/test20.m
@@ -5,9 +5,7 @@ function test20
 %   test20
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -28,9 +26,9 @@ for trials = 1:100
     A1 = A*A' + n*eye (n) ;
 
     try
-	L1 = chol (A1)' ;
+        L1 = chol (A1)' ;
     catch
-	continue ;
+        continue ;
     end
     err1 = norm (L1*L1'-A1) ;
 
@@ -46,7 +44,7 @@ for trials = 1:100
     err2b = norm (L2b*L2b'-A2) ;
 
     % try a downdate
-    L1b = chol_updown2 (L2, -1, w) ;					    %#ok
+    L1b = chol_updown2 (L2, -1, w) ;                                        %#ok
     err1b = norm (L1b*L1b'-A1) ;
 
 
diff --git a/CXSparse/MATLAB/Test/test21.m b/CXSparse/MATLAB/Test/test21.m
index 37ce99b..1f6f47c 100644
--- a/CXSparse/MATLAB/Test/test21.m
+++ b/CXSparse/MATLAB/Test/test21.m
@@ -5,9 +5,7 @@ function test21
 %   test21
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 rand ('state', 0) ;
@@ -17,9 +15,9 @@ clf
 
 for trials = 1:100
     if (trials <= 1)
-	n = trials ;
+        n = trials ;
     else
-	n = 1+fix (100 * rand (1)) ;
+        n = 1+fix (100 * rand (1)) ;
     end
     fprintf ('n: %d\n', n) ;
     d = 0.1 * rand (1) ;
@@ -33,16 +31,16 @@ for trials = 1:100
 
     A = A+A' + 100 * speye (n) ;
     try
-	p = amd (A) ;
+        p = amd (A) ;
     catch
-	p = symamd (A) ;
+        p = symamd (A) ;
     end
     A = sparse (A (p,p)) ;
 
     try
-	L = chol (A)' ;
+        L = chol (A)' ;
     catch
-	continue ;
+        continue ;
     end
 
     parent = etree (A) ;
@@ -51,8 +49,8 @@ for trials = 1:100
     spy (A) ;
 
     if (n > 0)
-	subplot (1,3,2) ;
-	treeplot (parent) ;
+        subplot (1,3,2) ;
+        treeplot (parent) ;
     end
 
     subplot (1,3,3) ;
@@ -62,55 +60,55 @@ for trials = 1:100
 
     for trials2 = 1:10
 
-	k = 1+fix (n * rand (1)) ;
-	if (k <= 0 | k > n)						    %#ok
-	    k = 1 ;
-	end
+        k = 1+fix (n * rand (1)) ;
+        if (k <= 0 | k > n)                                                 %#ok
+            k = 1 ;
+        end
 
-	w = sprandn (L (:,k)) ;
-	Anew = A + w*w' ;
+        w = sprandn (L (:,k)) ;
+        Anew = A + w*w' ;
 
-	Lnew = cs_updown (L, w, parent) ;
-	err6 = norm (Lnew*Lnew' - Anew, 1) ;
+        Lnew = cs_updown (L, w, parent) ;
+        err6 = norm (Lnew*Lnew' - Anew, 1) ;
 
-	Lnew = cs_updown (L, w, parent, '+') ;
-	err7 = norm (Lnew*Lnew' - Anew, 1) ;
+        Lnew = cs_updown (L, w, parent, '+') ;
+        err7 = norm (Lnew*Lnew' - Anew, 1) ;
 
-	[Lnew, wnew] = chol_updown2 (L, 1, w) ;
-	err2 = norm (Lnew*Lnew' - Anew, 1) ;
-	err10 = norm (wnew - (L\w)) ;
+        [Lnew, wnew] = chol_updown2 (L, 1, w) ;
+        err2 = norm (Lnew*Lnew' - Anew, 1) ;
+        err10 = norm (wnew - (L\w)) ;
 
-	L3 = chol_updown2 (L, +1, w) ;
-	err9 = norm (L3*L3' - Anew, 1) ;
+        L3 = chol_updown2 (L, +1, w) ;
+        err9 = norm (L3*L3' - Anew, 1) ;
 
 
 
-	[L2, wnew] = chol_updown2 (Lnew, -1, w) ;
-	err3 = norm (L2*L2' - A, 1) ;
-	err11 = norm (wnew - (Lnew\w)) ;
+        [L2, wnew] = chol_updown2 (Lnew, -1, w) ;
+        err3 = norm (L2*L2' - A, 1) ;
+        err11 = norm (wnew - (Lnew\w)) ;
 
-	L2 = cs_updown (Lnew, w, parent, '-') ;
-	err5 = norm (L2*L2' - A, 1) ;
+        L2 = cs_updown (Lnew, w, parent, '-') ;
+        err5 = norm (L2*L2' - A, 1) ;
 
-	L2 = chol_updown2 (Lnew, -1, w) ;
-	err8 = norm (L2*L2' - A, 1) ;
+        L2 = chol_updown2 (Lnew, -1, w) ;
+        err8 = norm (L2*L2' - A, 1) ;
 
-	err = max ([err2 err3 err5 err6 err7 err9 err8 err10 err11]) ;
+        err = max ([err2 err3 err5 err6 err7 err9 err8 err10 err11]) ;
 
-	fprintf ('   k %3d  %6.2e\n', k, err) ;
+        fprintf ('   k %3d  %6.2e\n', k, err) ;
 
-	if (err > 1e-11)
-	    err2	%#ok
-	    err3	%#ok
-	    err5	%#ok
-	    err6	%#ok
-	    err7	%#ok
-	    err8	%#ok
-	    err9	%#ok
-	    err10	%#ok
-	    err11	%#ok
-	    pause
-	end
+        if (err > 1e-11)
+            err2        %#ok
+            err3        %#ok
+            err5        %#ok
+            err6        %#ok
+            err7        %#ok
+            err8        %#ok
+            err9        %#ok
+            err10       %#ok
+            err11       %#ok
+            pause
+        end
 
 
     end
diff --git a/CXSparse/MATLAB/Test/test22.m b/CXSparse/MATLAB/Test/test22.m
index ab32370..13df834 100644
--- a/CXSparse/MATLAB/Test/test22.m
+++ b/CXSparse/MATLAB/Test/test22.m
@@ -5,9 +5,7 @@ function test22
 %   test22
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -29,16 +27,16 @@ for k = 1:length (f)
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     c1 = condest (A) ;
     c2 = cond1est (A) ;
     if (c1 == c2)
-	err = 0 ;
+        err = 0 ;
     else
-	err = (c1-c2)/max(1,c1) ;
+        err = (c1-c2)/max(1,c1) ;
     end
 
     c3 = cond (full (A), 1) ;
diff --git a/CXSparse/MATLAB/Test/test23.m b/CXSparse/MATLAB/Test/test23.m
index d4c12e6..d12d6ab 100644
--- a/CXSparse/MATLAB/Test/test23.m
+++ b/CXSparse/MATLAB/Test/test23.m
@@ -5,8 +5,7 @@ function test23
 %   test23
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
diff --git a/CXSparse/MATLAB/Test/test24.m b/CXSparse/MATLAB/Test/test24.m
index 0134224..c5a6843 100644
--- a/CXSparse/MATLAB/Test/test24.m
+++ b/CXSparse/MATLAB/Test/test24.m
@@ -5,9 +5,7 @@ function test24
 %   test24
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length (f)
     A = real (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     S = A ;
diff --git a/CXSparse/MATLAB/Test/test25.m b/CXSparse/MATLAB/Test/test25.m
index 26c488d..dfa0efc 100644
--- a/CXSparse/MATLAB/Test/test25.m
+++ b/CXSparse/MATLAB/Test/test25.m
@@ -5,9 +5,7 @@ function test25
 %   test25
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length (f)
     A = real (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     A = A|A' ;
@@ -46,7 +44,7 @@ for k = 1:length (f)
     p2 = cs_nd (sparse (1)) ;
     toc ;
     if (p2 ~= 1)
-	error ('!') ;
+        error ('!') ;
     end
 
     tic ;
@@ -54,7 +52,7 @@ for k = 1:length (f)
     t2 = toc ;
 
     if (any (sort (p2) ~= 1:n))
-	error ('!') ;
+        error ('!') ;
     end
 
     rel = t2 / max (t1,1e-6) ;
diff --git a/CXSparse/MATLAB/Test/test26.m b/CXSparse/MATLAB/Test/test26.m
index 7e3ddb2..8d274f0 100644
--- a/CXSparse/MATLAB/Test/test26.m
+++ b/CXSparse/MATLAB/Test/test26.m
@@ -5,9 +5,7 @@ function test26
 %   test26
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -47,14 +45,14 @@ for trials = 1:ntrials
     end
     % MATLAB cannot do A\b when A is sparse and rectangular and either
     % A or b are complex
-    if (m ~= n & isreal (A) & ~isreal (b))				    %#ok
-	x1 = (A\real(b)) + 1i * (A\imag(b)) ;
-	err1 = norm (A*x1-b) ;
-    elseif ((m ~= n) & ~isreal (A))					    %#ok
-	err1 = 1 ;
+    if (m ~= n & isreal (A) & ~isreal (b))                                  %#ok
+        x1 = (A\real(b)) + 1i * (A\imag(b)) ;
+        err1 = norm (A*x1-b) ;
+    elseif ((m ~= n) & ~isreal (A))                                         %#ok
+        err1 = 1 ;
     else
-	x1 = A\b ;
-	err1 = norm (A*x1-b) ;
+        x1 = A\b ;
+        err1 = norm (A*x1-b) ;
     end
 
     x2 = cs_dmsol (A,b) ; 
@@ -65,17 +63,17 @@ for trials = 1:ntrials
     lerr2 = log10 (max (err2, eps)) ;
 
     fprintf ('rank: %3d %3d err %6.2e  %6.2e  :   %6.1f\n', ...
-	sprank(A), rank(full(A)), err1, err2, lerr1 - lerr2) ;
+        sprank(A), rank(full(A)), err1, err2, lerr1 - lerr2) ;
 
     if (isnan (err1))
-	lerr1 = 10 ;
+        lerr1 = 10 ;
     end
     if (isnan (err2))
-	lerr2 = 10 ;
+        lerr2 = 10 ;
     end
 
     if (lerr2 > lerr1 + 5)
-	% pause
+        % pause
     end
 
     e1 (trials) = lerr1 ;
diff --git a/CXSparse/MATLAB/Test/test27.m b/CXSparse/MATLAB/Test/test27.m
index 3c1418c..76dc202 100644
--- a/CXSparse/MATLAB/Test/test27.m
+++ b/CXSparse/MATLAB/Test/test27.m
@@ -5,10 +5,7 @@ function test27
 %   test27
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 rand ('state', 0) ;
diff --git a/CXSparse/MATLAB/Test/test28.m b/CXSparse/MATLAB/Test/test28.m
index a64c5ce..4b9a277 100644
--- a/CXSparse/MATLAB/Test/test28.m
+++ b/CXSparse/MATLAB/Test/test28.m
@@ -5,20 +5,19 @@ function test28
 %   test28
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
 rand ('state', 0) ;
 for n = 1:100
     for trials = 1:1000
-	p = cs_randperm (n, rand) ;
-	if (any (sort (p) ~= 1:n))
-	    n		%#ok
-	    p		%#ok
-	    error ('!')
-	end
+        p = cs_randperm (n, rand) ;
+        if (any (sort (p) ~= 1:n))
+            n           %#ok
+            p           %#ok
+            error ('!')
+        end
     end
 end
 
@@ -72,48 +71,48 @@ for k = 1:nmat
     fprintf (' %8.2f', t3) ;
     T3 (k) = t3 ;
 
-    if (sprank1 ~= sprank2 | sprank1 ~= sprank3)			    %#ok
-	error ('!') ;
+    if (sprank1 ~= sprank2 | sprank1 ~= sprank3)                            %#ok
+        error ('!') ;
     end
 
     tic
-    [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ;				    %#ok
+    [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ;                                 %#ok
     d1 = toc ;
     fprintf (' %8.2f', d1) ;
     D1 (k) = d1 ;
 
     tic
-    [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ;				    %#ok
+    [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ;                               %#ok
     d2 = toc ;
     fprintf (' %8.2f', d2) ;
     D2 (k) = d2 ;
 
     tic
-    [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ;				    %#ok
+    [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ;                              %#ok
     d3 = toc ;
     fprintf (' %8.2f\n', d3) ;
     D3 (k) = d3 ;
 
     if (sprank1 == max (m,n))
-	nz1 = nnz (diag (A (p1,q1))) ;
-	nz2 = nnz (diag (A (p2,q2))) ;
-	nz3 = nnz (diag (A (p3,q3))) ;
+        nz1 = nnz (diag (A (p1,q1))) ;
+        nz2 = nnz (diag (A (p2,q2))) ;
+        nz3 = nnz (diag (A (p3,q3))) ;
 
-	if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3)		    %#ok
-	    error ('!')
-	end
+        if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3)               %#ok
+            error ('!')
+        end
     end
 
     subplot (1,2,1)
     loglog (T1 (1:k), T2 (1:k), 'x', ...
-	T1 (1:k), T3 (1:k), 'go', ...
-	[1e-5 1e3], [1e-5 1e3], 'r-') ; 
+        T1 (1:k), T3 (1:k), 'go', ...
+        [1e-5 1e3], [1e-5 1e3], 'r-') ; 
     axis equal
 
     subplot (1,2,2)
     loglog (D1 (1:k), D2 (1:k), 'x', ...
-	D1 (1:k), D3 (1:k), 'go', ...
-	[1e-5 1e3], [1e-5 1e3], 'r-') ; 
+        D1 (1:k), D3 (1:k), 'go', ...
+        [1e-5 1e3], [1e-5 1e3], 'r-') ; 
     axis equal
 
     drawnow
diff --git a/CXSparse/MATLAB/Test/test3.m b/CXSparse/MATLAB/Test/test3.m
index de3037d..f4e47ea 100644
--- a/CXSparse/MATLAB/Test/test3.m
+++ b/CXSparse/MATLAB/Test/test3.m
@@ -5,8 +5,7 @@ function test3
 %   test3
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear
 index = UFget ;
@@ -23,28 +22,28 @@ for i = f
 
     for cmplex = 0:double(~ispc)
 
-	A = Prob.A ;
-	[m n] = size (A) ;
-	if (m ~= n)
-	    continue
-	end
-
-	if (cmplex)
-	    A = A + 1i*sprand(A) ;
-	end
-
-	A = A*A' + 2*n*speye (n) ;
-	try
-	    p = amd (A) ;
-	catch
-	    p = symamd (A) ;
-	end
-	try
-	    L0 = chol (A)' ;
-	catch
-	    continue
-	end
-	b = rand (n,1) ;
+        A = Prob.A ;
+        [m n] = size (A) ;
+        if (m ~= n)
+            continue
+        end
+
+        if (cmplex)
+            A = A + 1i*sprand(A) ;
+        end
+
+        A = A*A' + 2*n*speye (n) ;
+        try
+            p = amd (A) ;
+        catch
+            p = symamd (A) ;
+        end
+        try
+            L0 = chol (A)' ;
+        catch
+            continue
+        end
+        b = rand (n,1) ;
 
         if (~ispc)
             if (mod (i,2) == 1)
@@ -52,61 +51,61 @@ for i = f
             end
         end
 
-	C = A(p,p) ;
-	c = condest (C) ;
-	fprintf ('condest: %g\n', c) ;
-
-	x1 = L0\b ;
-	x2 = cs_lsolve (L0,b) ;
-	err = norm (x1-x2,1) ;
-	if (err > 1e-12 * c)
-	    error ('!') ;
-	end
-
-	x1 = L0'\b ;
-	x2 = cs_ltsolve (L0,b) ;
-	err = norm (x1-x2,1) ;
-	if (err > 1e-10 * c)
-	    error ('!') ;
-	end
-
-	U = L0' ;
-
-	x1 = U\b ;
-	x2 = cs_usolve (U,b) ;
-	err = norm (x1-x2,1) ;
-	if (err > 1e-10 * c)
-	    error ('!') ;
-	end
-
-	L2 = cs_chol (A) ;
-	subplot (2,3,1) ; spy (L0) ;
-	subplot (2,3,4) ; spy (L2) ;
-	err = norm (L0-L2,1) ;
-	if (err > 1e-8 * c)
-	    error ('!') ;
-	end
-
-	L1 = chol (C)' ;
-	L2 = cs_chol (C) ;
-	subplot (2,3,2) ; spy (L1) ;
-	subplot (2,3,5) ; spy (L2) ;
-	err = norm (L1-L2,1) ;
-	if (err > 1e-8 * c)
-	    error ('!') ;
-	end
-
-	[L3,p] = cs_chol (A) ;
-	C = A(p,p) ;
-	L4 = chol (C)' ;
-	subplot (2,3,3) ; spy (L4) ;
-	subplot (2,3,6) ; spy (L3) ;
-	err = norm (L4-L3,1) ;
-	if (err > 1e-8 * c)
-	    error ('!') ;
-	end
-
-	drawnow
+        C = A(p,p) ;
+        c = condest (C) ;
+        fprintf ('condest: %g\n', c) ;
+
+        x1 = L0\b ;
+        x2 = cs_lsolve (L0,b) ;
+        err = norm (x1-x2,1) ;
+        if (err > 1e-12 * c)
+            error ('!') ;
+        end
+
+        x1 = L0'\b ;
+        x2 = cs_ltsolve (L0,b) ;
+        err = norm (x1-x2,1) ;
+        if (err > 1e-10 * c)
+            error ('!') ;
+        end
+
+        U = L0' ;
+
+        x1 = U\b ;
+        x2 = cs_usolve (U,b) ;
+        err = norm (x1-x2,1) ;
+        if (err > 1e-10 * c)
+            error ('!') ;
+        end
+
+        L2 = cs_chol (A) ;
+        subplot (2,3,1) ; spy (L0) ;
+        subplot (2,3,4) ; spy (L2) ;
+        err = norm (L0-L2,1) ;
+        if (err > 1e-8 * c)
+            error ('!') ;
+        end
+
+        L1 = chol (C)' ;
+        L2 = cs_chol (C) ;
+        subplot (2,3,2) ; spy (L1) ;
+        subplot (2,3,5) ; spy (L2) ;
+        err = norm (L1-L2,1) ;
+        if (err > 1e-8 * c)
+            error ('!') ;
+        end
+
+        [L3,p] = cs_chol (A) ;
+        C = A(p,p) ;
+        L4 = chol (C)' ;
+        subplot (2,3,3) ; spy (L4) ;
+        subplot (2,3,6) ; spy (L3) ;
+        err = norm (L4-L3,1) ;
+        if (err > 1e-8 * c)
+            error ('!') ;
+        end
+
+        drawnow
 
     end
 end
diff --git a/CXSparse/MATLAB/Test/test4.m b/CXSparse/MATLAB/Test/test4.m
index 7e884bc..83c7d3a 100644
--- a/CXSparse/MATLAB/Test/test4.m
+++ b/CXSparse/MATLAB/Test/test4.m
@@ -5,9 +5,7 @@ function test4
 %   test4
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -32,12 +30,12 @@ for trial = 1:100
     D = cs_multiply (A,B) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d k %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, k, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, k, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 end
diff --git a/CXSparse/MATLAB/Test/test5.m b/CXSparse/MATLAB/Test/test5.m
index 60f0081..bc34a12 100644
--- a/CXSparse/MATLAB/Test/test5.m
+++ b/CXSparse/MATLAB/Test/test5.m
@@ -5,9 +5,7 @@ function test5
 %   test5
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -31,13 +29,13 @@ for trial = 1:200
     D = cs_add (A,B) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     alpha = pi ;
@@ -56,26 +54,26 @@ for trial = 1:200
     D = cs_add (A,B,alpha) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     C = alpha*A + beta*B ;
     D = cs_add (A,B,alpha,beta) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CXSparse/MATLAB/Test/test6.m b/CXSparse/MATLAB/Test/test6.m
index 9c89a74..acaeff5 100644
--- a/CXSparse/MATLAB/Test/test6.m
+++ b/CXSparse/MATLAB/Test/test6.m
@@ -5,8 +5,7 @@ function test6
 %   test6
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 maxerr = 0 ;
@@ -28,81 +27,86 @@ for trial = 1:201
 
     for uplo = 0:1
 
-	if (uplo == 1)
-	    % solve Ux=b instead ;
-	    L = L' ;
-	end
-
-	x = L\b ;
-	sr = 1 + cs_reachr (L,b) ;
-	sz = 1 + cs_reachr (L,b) ;
-
-	check_if_same (sr,sz) ;
-
-	s2 = 1 + cs_reach (L,b) ;
-
-	try
-	    if (uplo == 0)
-		x3 = cs_lsolve (L,b) ;
-	    else
-		x3 = cs_usolve (L,b) ;
-	    end
-	catch
-	    if (isreal (L) & isreal (b))				    %#ok
-		lasterr
-		error ('!') ;
-	    end
-	    % punt: sparse(L)\sparse(b) not handled by cs_lsolve or cs_usolve
-	    x3 = L\b ;
-	end
-
-	spy ([L b x x3])
-	drawnow
-
-	s = sort (sr) ;
-	[i j xx] = find (x) ;						    %#ok
-	[i3 j3 xx3] = find (x3) ;					    %#ok
-
-	if (isempty (i))
-	    if (~isempty (s))
-		i	%#ok
-		s	%#ok
-		error ('!') ;
-	    end
-	elseif (any (s ~= i))
-	    i	    %#ok
-	    s	    %#ok
-	    error ('!') ;
-	end
-
-	if (isempty (i3))
-	    if (~isempty (s))
-		i3	%#ok
-		s	%#ok
-		error ('!') ;
-	    end
-	elseif (any (s ~= sort (i3)))
-	    s	    %#ok
-	    i3	    %#ok
-	    error ('!') ;
-	end
-
-	if (any (s2 ~= sr))
-	    s2	    %#ok
-	    sr	    %#ok
-	    error ('!') ;
-	end
-
-	err = norm (x-x3,1) ;
-	if (err > 1e-12)
-	    x	    %#ok
-	    x3	    %#ok
-	    uplo    %#ok
-	    err	    %#ok
-	    error ('!') 
-	end
-
-	maxerr = max (maxerr, err) ;
+        if (uplo == 1)
+            % solve Ux=b instead ;
+            L = L' ;
+        end
+
+        x = L\b ;
+        sr = 1 + cs_reachr (L,b) ;
+        sz = 1 + cs_reachr (L,b) ;
+
+        check_if_same (sr,sz) ;
+
+        s2 = 1 + cs_reach (L,b) ;
+
+        try
+            if (uplo == 0)
+                x3 = cs_lsolve (L,b) ;
+            else
+                x3 = cs_usolve (L,b) ;
+            end
+        catch
+            if (isreal (L) & isreal (b))                                    %#ok
+                lasterr
+                error ('!') ;
+            end
+            % punt: sparse(L)\sparse(b) not handled by cs_lsolve or cs_usolve
+            x3 = L\b ;
+        end
+
+        % x3 is NOT returned in sorted order, so it is not a valid MATLAB
+        % sparse matrix.  It might also have explicit zeros.  Double-transpose
+        % it to sort it, and multiply one to remove explicit zeros.
+        x3 = 1 * (x3')' ;
+
+        spy ([L b x x3])
+        drawnow
+
+        s = sort (sr) ;
+        [i j xx] = find (x) ;                                               %#ok
+        [i3 j3 xx3] = find (x3) ;                                           %#ok
+
+        if (isempty (i))
+            if (~isempty (s))
+                i       %#ok
+                s       %#ok
+                error ('!') ;
+            end
+        elseif (any (s ~= i))
+            i       %#ok
+            s       %#ok
+            error ('!') ;
+        end
+
+        if (isempty (i3))
+            if (~isempty (s))
+                i3      %#ok
+                s       %#ok
+                error ('!') ;
+            end
+        elseif (any (s ~= sort (i3)))
+            s       %#ok
+            i3      %#ok
+            error ('!') ;
+        end
+
+        if (any (s2 ~= sr))
+            s2      %#ok
+            sr      %#ok
+            error ('!') ;
+        end
+
+        err = norm (x-x3,1) ;
+        if (err > 1e-12)
+            x       %#ok
+            x3      %#ok
+            uplo    %#ok
+            err     %#ok
+            error ('!') 
+        end
+
+        maxerr = max (maxerr, err) ;
 
     end
 
diff --git a/CXSparse/MATLAB/Test/test7.m b/CXSparse/MATLAB/Test/test7.m
index 219ed21..37c8f45 100644
--- a/CXSparse/MATLAB/Test/test7.m
+++ b/CXSparse/MATLAB/Test/test7.m
@@ -5,8 +5,7 @@ function test7
 %   test7
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -24,111 +23,111 @@ for i = f
 
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     for cmplex = 0:1
 
-	if (cmplex)
-	    A = A + norm(A,1) * sprand (A) / 3 ;
-	end
+        if (cmplex)
+            A = A + norm(A,1) * sprand (A) / 3 ;
+        end
 
-	[L,U,P] = lu (A) ;
+        [L,U,P] = lu (A) ;
 
-	udiag = full (diag (U)) ;
-	umin = min (abs (udiag)) ;
-	fprintf ('umin %g\n', umin) ;
+        udiag = full (diag (U)) ;
+        umin = min (abs (udiag)) ;
+        fprintf ('umin %g\n', umin) ;
 
-	if (umin > 1e-14)
+        if (umin > 1e-14)
 
-	    [L2,U2,p] = cs_lu (A) ;
+            [L2,U2,p] = cs_lu (A) ;
 
-	    subplot (3,4,1) ; spy (A) ;
-	    subplot (3,4,2) ; spy (A(p,:)) ;
-	    subplot (3,4,3) ; spy (L2) ;
-	    subplot (3,4,4) ; spy (U2) ;
+            subplot (3,4,1) ; spy (A) ;
+            subplot (3,4,2) ; spy (A(p,:)) ;
+            subplot (3,4,3) ; spy (L2) ;
+            subplot (3,4,4) ; spy (U2) ;
 
-	    err1 = norm (L*U-P*A,1) / norm (A,1) ;
-	    err2 = norm (L2*U2-A(p,:),1) / norm (A,1) ;
-	    fprintf ('err %g %g\n', err1, err2) ;
+            err1 = norm (L*U-P*A,1) / norm (A,1) ;
+            err2 = norm (L2*U2-A(p,:),1) / norm (A,1) ;
+            fprintf ('err %g %g\n', err1, err2) ;
 
-	    if (err1 > 1e-10 | err2 > 1e-10)				    %#ok
-		error ('!') ;
-	    end
-	    maxerr1 = max (maxerr1, err1) ;
-	    maxerr2 = max (maxerr2, err2) ;
+            if (err1 > 1e-10 | err2 > 1e-10)                                %#ok
+                error ('!') ;
+            end
+            maxerr1 = max (maxerr1, err1) ;
+            maxerr2 = max (maxerr2, err2) ;
 
-	end
+        end
 
-	q = colamd (A) ;
+        q = colamd (A) ;
 
-	[L,U,P] = lu (A (:,q)) ;
+        [L,U,P] = lu (A (:,q)) ;
 
-	udiag = full (diag (U)) ;
-	umin = min (abs (udiag)) ;
-	fprintf ('umin %g with q\n', umin) ;
+        udiag = full (diag (U)) ;
+        umin = min (abs (udiag)) ;
+        fprintf ('umin %g with q\n', umin) ;
 
-	if (umin > 1e-14)
+        if (umin > 1e-14)
 
-	    [L2,U2,p,q2] = cs_lu (A) ;
+            [L2,U2,p,q2] = cs_lu (A) ;
 
-	    subplot (3,4,5) ; spy (A) ;
-	    subplot (3,4,6) ; spy (A(p,q2)) ;
-	    subplot (3,4,7) ; spy (L2) ;
-	    subplot (3,4,8) ; spy (U2) ;
+            subplot (3,4,5) ; spy (A) ;
+            subplot (3,4,6) ; spy (A(p,q2)) ;
+            subplot (3,4,7) ; spy (L2) ;
+            subplot (3,4,8) ; spy (U2) ;
 
-	    err1 = norm (L*U-P*A(:,q),1) / norm (A,1) ;
-	    err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
-	    fprintf ('err %g %g\n', err1, err2) ;
+            err1 = norm (L*U-P*A(:,q),1) / norm (A,1) ;
+            err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
+            fprintf ('err %g %g\n', err1, err2) ;
 
-	    if (err1 > 1e-10 | err2 > 1e-10)				    %#ok
-		error ('!') ;
-	    end
-	    maxerr1 = max (maxerr1, err1) ;
-	    maxerr2 = max (maxerr2, err2) ;
-	end
+            if (err1 > 1e-10 | err2 > 1e-10)                                %#ok
+                error ('!') ;
+            end
+            maxerr1 = max (maxerr1, err1) ;
+            maxerr2 = max (maxerr2, err2) ;
+        end
 
 
-	try
-	    q = amd (A) ;
-	catch
-	    q = symamd (A) ;
-	end
+        try
+            q = amd (A) ;
+        catch
+            q = symamd (A) ;
+        end
 
-	tol = 0.01 ;
+        tol = 0.01 ;
 
-	[L,U,P] = lu (A (q,q), tol) ;
+        [L,U,P] = lu (A (q,q), tol) ;
 
-	udiag = full (diag (U)) ;
-	umin = min (abs (udiag)) ;
-	fprintf ('umin %g with amd q\n', umin) ;
+        udiag = full (diag (U)) ;
+        umin = min (abs (udiag)) ;
+        fprintf ('umin %g with amd q\n', umin) ;
 
-	if (umin > 1e-14)
+        if (umin > 1e-14)
 
-	    [L2,U2,p,q2] = cs_lu (A,tol) ;
+            [L2,U2,p,q2] = cs_lu (A,tol) ;
 
-	    subplot (3,4,9) ; spy (A) ;
-	    subplot (3,4,10) ; spy (A(p,q2)) ;
-	    subplot (3,4,11) ; spy (L2) ;
-	    subplot (3,4,12) ; spy (U2) ;
+            subplot (3,4,9) ; spy (A) ;
+            subplot (3,4,10) ; spy (A(p,q2)) ;
+            subplot (3,4,11) ; spy (L2) ;
+            subplot (3,4,12) ; spy (U2) ;
 
-	    err1 = norm (L*U-P*A(q,q),1) / norm (A,1) ;
-	    err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
-	    lbig = full (max (max (abs (L2)))) ;
-	    fprintf ('err %g %g lbig %g\n', err1, err2, lbig) ;
-	    if (lbig > 1/tol)
-		error ('L!') ;
-	    end
+            err1 = norm (L*U-P*A(q,q),1) / norm (A,1) ;
+            err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
+            lbig = full (max (max (abs (L2)))) ;
+            fprintf ('err %g %g lbig %g\n', err1, err2, lbig) ;
+            if (lbig > 1/tol)
+                error ('L!') ;
+            end
 
-	    if (err1 > 1e-10 | err2 > 1e-10)				    %#ok
-		error ('!') ;
-	    end
-	    maxerr1 = max (maxerr1, err1) ;
-	    maxerr2 = max (maxerr2, err2) ;
-	end
+            if (err1 > 1e-10 | err2 > 1e-10)                                %#ok
+                error ('!') ;
+            end
+            maxerr1 = max (maxerr1, err1) ;
+            maxerr2 = max (maxerr2, err2) ;
+        end
 
-	drawnow
-	% pause
+        drawnow
+        % pause
 
     end
 end
diff --git a/CXSparse/MATLAB/Test/test8.m b/CXSparse/MATLAB/Test/test8.m
index 42806ed..211d3d9 100644
--- a/CXSparse/MATLAB/Test/test8.m
+++ b/CXSparse/MATLAB/Test/test8.m
@@ -5,8 +5,7 @@ function test8
 %   test8
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -20,74 +19,74 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 0.1i * (sprand (tril (A,-1) + triu (A,1))) ;
-	end
+        if (cmplex)
+            A = A + 0.1i * (sprand (tril (A,-1) + triu (A,1))) ;
+        end
 
-	spd = 0 ;
-	if (m == n)
-	    if (nnz (A-A') == 0)
-		try
-		    p = amd (A) ;
-		catch
-		    p = symamd (A) ;
-		end
-		[R,p] = chol (A (p,p)) ;
-		spd = (p == 0) ;
-	    end
-	end
+        spd = 0 ;
+        if (m == n)
+            if (nnz (A-A') == 0)
+                try
+                    p = amd (A) ;
+                catch
+                    p = symamd (A) ;
+                end
+                [R,p] = chol (A (p,p)) ;
+                spd = (p == 0) ;
+            end
+        end
 
-	if (spd)
-	    C = A ;
-	else
-	    C = A*A' + n*speye (n) ;
-	    try
-		p = amd (C) ;
-	    catch
-		p = symamd (C) ;
-	    end
-	    try
-		R = chol (C (p,p)) ;					    %#ok
-	    catch
-		continue
-	    end
-	end
+        if (spd)
+            C = A ;
+        else
+            C = A*A' + n*speye (n) ;
+            try
+                p = amd (C) ;
+            catch
+                p = symamd (C) ;
+            end
+            try
+                R = chol (C (p,p)) ;                                        %#ok
+            catch
+                continue
+            end
+        end
 
-	b = rand (n,1) ;
+        b = rand (n,1) ;
 
-	x1 = C\b ;
-	x2 = cs_cholsol (C,b) ;
-	r1 = norm (C*x1-b,1) / norm (C,1) ;
-	r2 = norm (C*x2-b,1) / norm (C,1) ;
-	err = abs (r1-r2) ;
-	fprintf ('err %g\n', err) ;
-	if (err > 1e-10)
-	    error ('!') ;
-	end
+        x1 = C\b ;
+        x2 = cs_cholsol (C,b) ;
+        r1 = norm (C*x1-b,1) / norm (C,1) ;
+        r2 = norm (C*x2-b,1) / norm (C,1) ;
+        err = abs (r1-r2) ;
+        fprintf ('err %g\n', err) ;
+        if (err > 1e-10)
+            error ('!') ;
+        end
 
-	x2 = cs_lusol (C,b, 1, 0.001) ;
-	r2 = norm (C*x2-b,1) / norm (C,1) ;
-	err = abs (r1-r2) ;
-	fprintf ('err %g (lu with amd(A+A'')\n', err) ;
-	if (err > 1e-10)
-	    error ('!') ;
-	end
+        x2 = cs_lusol (C,b, 1, 0.001) ;
+        r2 = norm (C*x2-b,1) / norm (C,1) ;
+        err = abs (r1-r2) ;
+        fprintf ('err %g (lu with amd(A+A'')\n', err) ;
+        if (err > 1e-10)
+            error ('!') ;
+        end
 
-	if (m ~= n)
-	    continue ;
-	end
+        if (m ~= n)
+            continue ;
+        end
 
-	x1 = A\b ;
-	r1 = norm (A*x1-b,1) / norm (A,1) ;
-	if (r1 < 1e-6)
-	    x2 = cs_lusol (A,b) ;
-	    r2 = norm (A*x2-b,1) / norm (A,1) ;
-	    fprintf ('lu resid %g %g\n', r1, r2) ;
-	end
+        x1 = A\b ;
+        r1 = norm (A*x1-b,1) / norm (A,1) ;
+        if (r1 < 1e-6)
+            x2 = cs_lusol (A,b) ;
+            r2 = norm (A*x2-b,1) / norm (A,1) ;
+            fprintf ('lu resid %g %g\n', r1, r2) ;
+        end
     end
 end
diff --git a/CXSparse/MATLAB/Test/test9.m b/CXSparse/MATLAB/Test/test9.m
index 2b0293a..d618860 100644
--- a/CXSparse/MATLAB/Test/test9.m
+++ b/CXSparse/MATLAB/Test/test9.m
@@ -5,8 +5,7 @@ function test9
 %   test9
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -25,62 +24,62 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     sp = sprank (A) ;
 %    if (sprank (A) < min (m,n))
-%	continue
+%       continue
 %    end
 
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 1i * sprand (A) ;
-	end
-
-	Aorig = A ;
-
-	A = A (:, colamd (A)) ;
-	s1 = svd (full (A)) ;
-
-	if (cmplex)
-	    try
-		tic ;
-		R = chol (A'*A) ;
-		t1 = toc ;						    %#ok
-	    catch
-		fprintf ('chol (A''*A) failed\n') ;
-		R = [ ] ;
-	    end
-	else
-	    tic ;
-	    R = qr (A) ;
-	    t1 = toc ;							    %#ok
-	end
-
-	% tic ;
-	% [Q,R] = qr (A) ;
-	% t1 = toc ;
-
-	[c,h,parent] = symbfact (A, 'col') ;
-	rnz = sum (c) ;							    %#ok
-	tic ;
-	[V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
-	t2 = toc ;							    %#ok
-
-	v2 = full (V2) ;
-	if (any (spones (v2) ~= spones (V2)))
-	    error ('got zeros!') ;
-	end
-
-	C = A ;
-	m2 = size (V2,1) ;
-	if (m2 > m)
-	    C = [A ; sparse(m2-m, n)] ;
-	end
-	C = C (p,:) ;
+        if (cmplex)
+            A = A + 1i * sprand (A) ;
+        end
+
+        Aorig = A ;
+
+        A = A (:, colamd (A)) ;
+        s1 = svd (full (A)) ;
+
+        if (cmplex)
+            try
+                tic ;
+                R = chol (A'*A) ;
+                t1 = toc ;                                                  %#ok
+            catch
+                fprintf ('chol (A''*A) failed\n') ;
+                R = [ ] ;
+            end
+        else
+            tic ;
+            R = qr (A) ;
+            t1 = toc ;                                                      %#ok
+        end
+
+        % tic ;
+        % [Q,R] = qr (A) ;
+        % t1 = toc ;
+
+        [c,h,parent] = symbfact (A, 'col') ;
+        rnz = sum (c) ;                                                     %#ok
+        tic ;
+        [V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
+        t2 = toc ;                                                          %#ok
+
+        v2 = full (V2) ;
+        if (any (spones (v2) ~= spones (V2)))
+            error ('got zeros!') ;
+        end
+
+        C = A ;
+        m2 = size (V2,1) ;
+        if (m2 > m)
+            C = [A ; sparse(m2-m, n)] ;
+        end
+        C = C (p,:) ;
 
     %    [H1,R1] = myqr (C) ;
     %    err1 = norm (R1-R2,1) / norm (R1)
@@ -88,47 +87,47 @@ for i = f
     %    s2 = svd (full (R2)) ;
     %    err2 = norm (s1 - s2) / s1 (1) 
     %    fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d n %d\n', ...
-    %	t1, t2, t1/t2, sp, n) ;
+    %   t1, t2, t1/t2, sp, n) ;
     %    err2
 
-	% left-looking:
-	[V,Beta3,R3] = qr_left (C) ;					    %#ok
-	s3 = svd (full (R2)) ;
-	err3 = norm (s1 - s3) / s1 (1) ;
-	disp ('err3 = ') ; disp (err3) ;
-	if (err3 > 1e-12)
-	    error ('!') ;
-	end
-
-	% right-looking:
-	[V,Beta4,R4] = qr_right (C) ;					    %#ok
-	s4 = svd (full (R2)) ;
-	err4 = norm (s1 - s4) / s1 (1) ;
-	disp ('err4 = ') ; disp (err4) ;
-	if (err4 > 1e-12)
-	    error ('!') ;
-	end
-
-	% H2 = full (H2)
-	% R2 = full (R2)
-
-	subplot (2,4,1) ; spy (A) ;		title ('A colamd') ;
-	subplot (2,4,2) ; spy (C) ;		title ('A rperm') ;
-	subplot (2,4,3) ; treeplot (parent) ;
-	subplot (2,4,4) ; spy (Aorig) ;	title ('Aorig') ;
-	subplot (2,4,5) ; spy (abs(R2)>0) ;	title ('spqr R, no zeros') ;
-	subplot (2,4,6) ; spy (R) ;		title ('matlab R') ;
-	subplot (2,4,7) ; spy (R2) ;	title ('spqr R') ;
-	subplot (2,4,8) ; spy (V2) ;	title ('spqr V') ;
-	drawnow
+        % left-looking:
+        [V,Beta3,R3] = qr_left (C) ;                                        %#ok
+        s3 = svd (full (R2)) ;
+        err3 = norm (s1 - s3) / s1 (1) ;
+        disp ('err3 = ') ; disp (err3) ;
+        if (err3 > 1e-12)
+            error ('!') ;
+        end
+
+        % right-looking:
+        [V,Beta4,R4] = qr_right (C) ;                                       %#ok
+        s4 = svd (full (R2)) ;
+        err4 = norm (s1 - s4) / s1 (1) ;
+        disp ('err4 = ') ; disp (err4) ;
+        if (err4 > 1e-12)
+            error ('!') ;
+        end
+
+        % H2 = full (H2)
+        % R2 = full (R2)
+
+        subplot (2,4,1) ; spy (A) ;             title ('A colamd') ;
+        subplot (2,4,2) ; spy (C) ;             title ('A rperm') ;
+        subplot (2,4,3) ; treeplot (parent) ;
+        subplot (2,4,4) ; spy (Aorig) ; title ('Aorig') ;
+        subplot (2,4,5) ; spy (abs(R2)>0) ;     title ('spqr R, no zeros') ;
+        subplot (2,4,6) ; spy (R) ;             title ('matlab R') ;
+        subplot (2,4,7) ; spy (R2) ;    title ('spqr R') ;
+        subplot (2,4,8) ; spy (V2) ;    title ('spqr V') ;
+        drawnow
 
     %    if (err2 > 1e-9)
-    %	error ('!') ;
+    %   error ('!') ;
     %    end
-	if (m2 > m)
-	    fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
-	end
-	% pause
+        if (m2 > m)
+            fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
+        end
+        % pause
     end
 
 end
diff --git a/CXSparse/MATLAB/Test/test_qr.m b/CXSparse/MATLAB/Test/test_qr.m
index 349960c..48a5a49 100644
--- a/CXSparse/MATLAB/Test/test_qr.m
+++ b/CXSparse/MATLAB/Test/test_qr.m
@@ -5,8 +5,7 @@ function test_qr
 %   test_qr
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows,index.ncols)) ;
@@ -23,16 +22,16 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
-    if (sprank (A) < n | ~isreal (A))					    %#ok
-	continue ;
+    if (sprank (A) < n | ~isreal (A))                                       %#ok
+        continue ;
     end
 
     [V,beta,p,R1,q] = cs_qr(A) ;
     A = A (p,q) ;
-    parent = etree (A, 'col') ;						    %#ok
+    parent = etree (A, 'col') ;                                             %#ok
 
     R0 = qr (A) ;
     R2 = qr_givens (full (A)) ;
@@ -49,7 +48,7 @@ for i = f
     e3 = norm (A'*A-R3'*R3,1) / norm (A,1) ;
     fprintf ('error %6.2e %6.2e %6.2e %6.2e\n', e0, e1, e2, e3) ;
     drawnow
-    if (e1 > e0*1e3 | e2 > e0*1e3)					    %#ok
-	pause
+    if (e1 > e0*1e3 | e2 > e0*1e3)                                          %#ok
+        pause
     end
 end
diff --git a/CXSparse/MATLAB/Test/test_qr1.m b/CXSparse/MATLAB/Test/test_qr1.m
index b2143a5..a41953e 100644
--- a/CXSparse/MATLAB/Test/test_qr1.m
+++ b/CXSparse/MATLAB/Test/test_qr1.m
@@ -5,9 +5,7 @@ function test_qr1
 %   test_qr1
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -16,41 +14,41 @@ for i = f
     Prob = UFget (i,index) ;
     A = Prob.A ;
     if (~isreal (A))
-	continue ;
+        continue ;
     end
 
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
 
     t0 = 0 ;
     k0 = 0 ;
     while (t0 < 0.1)
-	tic
-	q = colamd (A, [-1 10]) ;
-	% [Q,R] = qr (A (:,q)) ;
-	R = qr (A (:,q)) ;					    %#ok
-	t = toc ;
-	t0 = t0 + t ;
-	k0 = k0 + 1 ;
+        tic
+        q = colamd (A, [-1 10]) ;
+        % [Q,R] = qr (A (:,q)) ;
+        R = qr (A (:,q)) ;                                          %#ok
+        t = toc ;
+        t0 = t0 + t ;
+        k0 = k0 + 1 ;
     end
     t0 = t0 / k0 ;
 
     t1 = 0 ;
     k1 = 0 ;
     while (t1 < 0.1)
-	tic
-	[V,beta, p, R,q]  = cs_qr (A) ;					%#ok
-	t = toc ;
-	t1 = t1 + t ;
-	k1 = k1 + 1 ;
+        tic
+        [V,beta, p, R,q]  = cs_qr (A) ;                                 %#ok
+        t = toc ;
+        t1 = t1 + t ;
+        k1 = k1 + 1 ;
     end
     t1 = t1 / k1 ;
 
     fprintf (...
-	'%25s  MATLAB: %10.4f (%8d)   CS: %10.4f (%8d)  speedup: %8.2f\n', ...
-	Prob.name, t0, k0, t1, k1, t0/t1) ;
+        '%25s  MATLAB: %10.4f (%8d)   CS: %10.4f (%8d)  speedup: %8.2f\n', ...
+        Prob.name, t0, k0, t1, k1, t0/t1) ;
 
 
 
diff --git a/CXSparse/MATLAB/Test/test_qrsol.m b/CXSparse/MATLAB/Test/test_qrsol.m
index 22c4ade..4fedb4f 100644
--- a/CXSparse/MATLAB/Test/test_qrsol.m
+++ b/CXSparse/MATLAB/Test/test_qrsol.m
@@ -5,8 +5,7 @@ function test_qrsol
 %   test_qrsol
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -19,10 +18,10 @@ for i = f
     Prob = UFget (i,index) ;
     A = Prob.A ;
     if (~isreal (A))
-	continue ;
+        continue ;
     end
 
-    [m n] = size (A) ;							%#ok
+    [m n] = size (A) ;                                                  %#ok
     b = rand (m,1) ;
 
     x1 = A\b ;
diff --git a/CXSparse/MATLAB/Test/test_randperms.m b/CXSparse/MATLAB/Test/test_randperms.m
index 193cf9c..b564c46 100644
--- a/CXSparse/MATLAB/Test/test_randperms.m
+++ b/CXSparse/MATLAB/Test/test_randperms.m
@@ -4,8 +4,7 @@ function test_randperms
 %   test_randperms
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 
@@ -16,14 +15,14 @@ for trial = 1:100
     A = sprandn (m,n,d) ;
 
     if (m == 0)
-	p = [] ;
+        p = [] ;
     else
-	p = randperm (m) ;
+        p = randperm (m) ;
     end
     if (n == 0)
-	q = [] ;
+        q = [] ;
     else
-	q = randperm (n) ;
+        q = randperm (n) ;
     end
 
     C = A(p,q) ;
@@ -35,17 +34,17 @@ for trial = 1:100
 
     q2 = find (Q) ;
     if (any (q ~= q2'))
-	error ('!') 
+        error ('!') 
     end
 
     p2 = find (P') ;
     if (any (p ~= p2'))
-	error ('!') 
+        error ('!') 
     end
 
     E = P*A*Q ;
     if (norm (C-E,1) ~= 0)
-	error ('!') 
+        error ('!') 
     end
 
     P = sparse (1:m, p, 1) ;
@@ -53,7 +52,7 @@ for trial = 1:100
 
     E = P*A*Q ;
     if (norm (C-E,1) ~= 0)
-	error ('2!') 
+        error ('2!') 
     end
 
 end
diff --git a/CXSparse/MATLAB/Test/test_sep.m b/CXSparse/MATLAB/Test/test_sep.m
index 59213d2..9bc936e 100644
--- a/CXSparse/MATLAB/Test/test_sep.m
+++ b/CXSparse/MATLAB/Test/test_sep.m
@@ -7,9 +7,7 @@ function test_sep
 %
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length(f)
     A = spones (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	A = A'*A ;
+        A = A'*A ;
     end
 
     A = A|A' ;
@@ -50,7 +48,7 @@ for k = 1:length(f)
     subplot (2,3,3) ; spy (A (a,b)) ; title ('edge sep') ;
     subplot (2,3,6) ; cs_dmspy (A (a,b)) ; title ('node sep') ;
 
-    [s as bs] = vtxsep (A,a,b) ;					%#ok
+    [s as bs] = vtxsep (A,a,b) ;                                        %#ok
     [s2 a2 b2] = cs_sep (A,a,b) ;
 
     p2 = [a2 b2 s2] ;
@@ -60,14 +58,14 @@ for k = 1:length(f)
 
     px = [s2 a2 b2] ;
     if (any (sort (px) ~= 1:n))
-	px	%#ok
-	n	%#ok
-	error ('!') ;
+        px      %#ok
+        n       %#ok
+        error ('!') ;
     end
 
     na = length (a2) ;
     nb = length (b2) ;
-    ns = length (s2) ;							%#ok
+    ns = length (s2) ;                                                  %#ok
 
     nab = na + nb ;
 
@@ -81,18 +79,18 @@ for k = 1:length(f)
 
     nz1 = nnz (A (a2,b2)) ;
     if (nz1 ~= 0)
-	nz1	%#ok
-	error ('!') ;
+        nz1     %#ok
+        error ('!') ;
     end
 
     nz2 = nnz (A (a2,b2)) ;
     if (nz2 ~= 0)
-	nz2	%#ok
-	error ('!') ;
+        nz2     %#ok
+        error ('!') ;
     end
 
     if (length (s) ~= length (s2))
-	fprintf ('lengths differ: %d %d\n', length (s), length (s2)) ;
+        fprintf ('lengths differ: %d %d\n', length (s), length (s2)) ;
     end
 
     drawnow
diff --git a/CXSparse/MATLAB/Test/testall.m b/CXSparse/MATLAB/Test/testall.m
index a3d3534..90de8da 100644
--- a/CXSparse/MATLAB/Test/testall.m
+++ b/CXSparse/MATLAB/Test/testall.m
@@ -5,12 +5,11 @@ function testall
 %   testall
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 h = waitbar (0, 'CXSparse') ;
 
-cs_test_make	    % compile all CSparse, Demo, Text, and Test mexFunctions
+cs_test_make        % compile all CSparse, Demo, Text, and Test mexFunctions
 
 ntests = 29 ;
 
@@ -45,6 +44,7 @@ testwait (28, ntests, h) ; test28 ;
 testwait (29, ntests, h) ; test_qr ;
 
 close (h)
+fprintf ('\nCXSparse: all tests passed\n') ;
 
 function testwait (n,ntests,h)
 fprintf ('\n------------------------ test%d\n', n) ;
diff --git a/CXSparse/MATLAB/Test/testh.m b/CXSparse/MATLAB/Test/testh.m
index 9f32f27..e650fea 100644
--- a/CXSparse/MATLAB/Test/testh.m
+++ b/CXSparse/MATLAB/Test/testh.m
@@ -5,9 +5,7 @@ function testh
 %   testh
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 format long e
 fprintf ('-------------------------------------------------\n') ;
@@ -79,7 +77,7 @@ fprintf ('-------------------------------------------------\n') ;
 
 x = [1 0 0]' ;
 disp (x) ;
-[v, beta, s] = house (x) ;						    %#ok
+[v, beta, s] = house (x) ;                                                  %#ok
 x = x - v*(beta*(v'*x)) ;
 disp (x) ;
 fprintf ('-------------------------------------------------\n') ;
diff --git a/CXSparse/MATLAB/UFget/Contents.m b/CXSparse/MATLAB/UFget/Contents.m
index 398226a..fa07d67 100644
--- a/CXSparse/MATLAB/UFget/Contents.m
+++ b/CXSparse/MATLAB/UFget/Contents.m
@@ -3,6 +3,8 @@
 %   UFget             - loads a matrix from the UF Sparse Matrix Collection.
 %   UFweb             - opens the URL for a matrix.
 %   UFgrep            - search for matrices in the UF Sparse Matrix Collection.
+%   UFkinds           - get 'kind' of each problem in the UF collection.
+%   UFsvd             - singular values of a matrix in the UF collection.
 %
 % Helper functions:
 %
@@ -13,4 +15,4 @@
 % Example:
 %   help UFget
 
-% Copyright 2007, Timothy A. Davis
+% Copyright 2012, Timothy A. Davis
diff --git a/CXSparse/MATLAB/UFget/Makefile b/CXSparse/MATLAB/UFget/Makefile
new file mode 100644
index 0000000..54dab27
--- /dev/null
+++ b/CXSparse/MATLAB/UFget/Makefile
@@ -0,0 +1,7 @@
+UFgui.jar:  UFgui.java UFhelp.html
+	javac UFgui.java
+	jar cfe UFgui.jar UFgui *.class UFhelp.html
+	- $(RM) *.class
+
+run: UFgui.jar
+	java -jar UFgui.jar
diff --git a/CXSparse/MATLAB/UFget/README.txt b/CXSparse/MATLAB/UFget/README.txt
index 0353409..83a882d 100644
--- a/CXSparse/MATLAB/UFget/README.txt
+++ b/CXSparse/MATLAB/UFget/README.txt
@@ -1,67 +1,124 @@
-UFget:  a MATLAB interface to the UF sparse matrix collection.
-MATLAB 7.0 or later is required.
+UFget:  MATLAB and Java interfaces to the UF sparse matrix collection.
+Copyright 2005-2012, Timothy A. Davis, http://www.suitesparse.com
 
-Date: May 31, 2007.
+REQUIREMENTS:
 
-Copyright 2005-2007, Tim Davis, University of Florida.
-Authors: Tim Davis and Erich Mirable.
-Availability: http://www.cise.ufl.edu/research/sparse/mat/UFget
+    Java JRE 1.6.0 or later is required for the UFgui Java program.
+    UFget requires MATLAB 7.0.  A few of the largest matrices require MATLAB
+    7.3 or later.
 
-See http://www.cise.ufl.edu/research/sparse/mat/UFget.tar.gz
-for a single archive file with all the files listed below.
+See http://www.suitesparse.com
+for a single archive file with all the files listed below:
 
-    UFget/Contents.m		help for UFget
-    UFget/README.txt		this file
+    UFget/README.txt            this file
+    UFget/UFsettings.txt        default settings for Java and MATLAB
 
-    UFget/UFget_defaults.m	default parameter settings for UFget
-    UFget/UFget_example.m	demo for UFget
-    UFget/UFget_lookup.m	get the group, name, and id of a matrix
-    UFget/UFget.m		primary user interface
+    for Java:
+    UFget/UFgui.java            a stand-alone Java interface to the collection
+    UFget/UFgui.jar             the compiled UFgui program
+    UFget/UFhelp.html           help for UFgui
+    UFget/Makefile              for compiling UFgui.java into UFgui.jar
+    UFget/matrices/UFstats.txt  matrix statistics file for UFgui.java
 
-    UFget/UFweb.m		opens the URL for a matrix or collection
+    for MATLAB:
+    UFget/Contents.m            help for UFget in MATLAB
+    UFget/UFget_defaults.m      default parameter settings for UFget
+    UFget/UFget_example.m       demo for UFget
+    UFget/UFget_lookup.m        get the group, name, and id of a matrix
+    UFget/UFget.m               primary user interface
+    UFget/UFgrep.m              searches for matrices by name
+    UFget/UFkinds.m             returns the 'kind' for all matrices
+    UFget/UFweb.m               opens the URL for a matrix or collection
+    UFget/mat/UF_Index.mat      index to the UF sparse matrix collection
 
-    UFget/mat			default download directory (can be changed)
-    UFget/mat/UF_Index.mat	index to the UF sparse matrix collection
+    download directories:
+    UFget/MM                    for Matrix Market files
+    UFget/RB                    for Rutherford/Boeing files
+    UFget/mat                   for *.mat files
+    UFget/matrices              for *.png icon images of the matrices
 
-To install the package, just add the path containing the UFget directory
-to your MATLAB path.  Type "pathtool" in MATLAB for more details.
+For the Java UFgui program:
 
-For a simple example of use, type this command in MATLAB:
+    To run the UFgui on Windows or Mac OS X, just double-click the UFgui.jar
+    file.  Or, on any platform, type the following command in your command
+    window:
 
-    UFget_example
+        java -jar UFgui.jar
 
-The MATLAB statement
+    If that doesn't work, then you need to install the Java JDK or JRE and add
+    it to your path.  See http://java.sun.com/javase/downloads/index.jsp and
+    http://java.sun.com/javase/6/webnotes/install/index.html for more
+    information.  For Ubuntu, you can install Java by running the Synaptics
+    package manager.
 
-    Problem = UFget ('HB/arc130')
+    The UFgui.jar file is the compiled version of UFgui.java.  If you modify
+    UFgui.java, you can recompile it (for Unix/Linux/Mac/Solaris) by typing
+    the command:
 
-(for example), will download a sparse matrix called HB/arc130 (a laser
-simulation problem) and load it into MATLAB.  You don't need to use your
-web browser to load the matrix.  The statement
+        make
 
-    Problem = UFget (6)
+    To run the UFgui in Linux/Solaris/Unix, your window manager might support
+    double-clicking the UFgui.jar file as well.  If not, type either of
+    the following commands:
 
-will also load same the HB/arc130 matrix.  Each matrix in the collection has
-a unique identifier, in the range 1 to the number of matrices.  As new
-matrices are added, the id's of existing matrices will not change.
+        java -jar UFgui.jar
 
-To view an index of the entire collection, just type
+    or
 
-    UFget
+        make run
+        
 
-in MATLAB.  To modify your download directory, edit the UFget_defaults.m file.
+For the UFget.m MATLAB interface:
 
-To open a URL of the entire collection, just type
+    To install the MATLAB package, just add the path containing the UFget
+    directory to your MATLAB path.  Type "pathtool" in MATLAB for more details.
 
-    UFweb
+    For a simple example of use, type this command in MATLAB:
 
-To open the URL of a group of matrices in the collection:
+        UFget_example
 
-    UFweb ('HB')
+    The MATLAB statement
 
-To open the web page for one matrix, use either of these formats:
+        Problem = UFget ('HB/arc130')
 
-    UFweb ('HB/arc130')
-    UFweb (6)
+    (for example), will download a sparse matrix called HB/arc130 (a laser
+    simulation problem) and load it into MATLAB.  You don't need to use your
+    web browser to load the matrix.  The statement
 
-For more information on how the index entries were created, see
-http://www.cise.ufl.edu/research/sparse/SuiteSparse.
+        Problem = UFget (6)
+
+    will also load same the HB/arc130 matrix.  Each matrix in the collection
+    has a unique identifier, in the range 1 to the number of matrices.  As new
+    matrices are added, the id's of existing matrices will not change.
+
+    To view an index of the entire collection, just type
+
+        UFget
+
+    in MATLAB.  To modify your download directory, edit the UFget_defaults.m
+    file (note that this will not modify the download directory for the
+    UFgui java program, however).
+
+    To open a URL of the entire collection, just type
+
+        UFweb
+
+    To open the URL of a group of matrices in the collection:
+
+        UFweb ('HB')
+
+    To open the web page for one matrix, use either of these formats:
+
+        UFweb ('HB/arc130')
+        UFweb (6)
+
+    To download a new index, to get access to new matrices:
+
+        UFget ('refresh')
+
+    (by default, using UFget downloads the index every 90 days anyway).
+
+    To search for matrices
+
+For more information on how the matrix statistics were created, see
+http://www.suitesparse.com.
diff --git a/CXSparse/MATLAB/UFget/UFget.m b/CXSparse/MATLAB/UFget/UFget.m
index 2ef17ed..afe49c0 100644
--- a/CXSparse/MATLAB/UFget/UFget.m
+++ b/CXSparse/MATLAB/UFget/UFget.m
@@ -5,51 +5,107 @@ function Problem = UFget (matrix, UF_Index)
 %   specified as either a number (1 to the # of matrices in the collection) or
 %   as a string (the name of the matrix).  With no input parameters, index=UFget
 %   returns an index of matrices in the collection.  A local copy of the matrix
-%   is saved (be aware that as of May 2007 the entire collection is over 8GB
-%   in size).  If no input or output arguments are provided, the index is
+%   is saved.  If no input or output arguments are provided, the index is
 %   printed.  With a 2nd parameter (Problem = UFget (matrix, index)), the index
 %   file is not loaded.  This is faster if you are loading lots of matrices.
 %
 %   Examples:
-%       index = UFget ;
-%       Problem = UFget (6)
+%       index = UFget ;                     % loads index
+%       index = UFget ('refresh') ;         % forces download of new index
+%       index = UFget ('update') ;          % same as 'refresh'
+%
+%       Problem = UFget (6)                 % 4 ways of loading the same Problem
 %       Problem = UFget ('HB/arc130')
 %       Problem = UFget (6, index)
 %       Problem = UFget ('HB/arc130', index)
 %
 %   See also UFgrep, UFweb, UFget_example, UFget_defaults, urlwrite.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 %-------------------------------------------------------------------------------
 % get the parameter settings
 %-------------------------------------------------------------------------------
 
 params = UFget_defaults ;
+
+% The UF_Index.mat file is used by UFget only, not by UFgui.java.
 indexfile = sprintf ('%sUF_Index.mat', params.dir) ;
-indexurl = sprintf ('%s/UF_Index.mat', params.url) ;
+indexurl  = sprintf ('%s/UF_Index.mat', params.url) ;
+
+% The UFstats.csv file is used by the UFgui.java program.  It is also used by
+% the UFkinds.m function, which reads the file to find the problem kind for
+% each matrix in the collection.
+statfile = sprintf ('%smatrices/UFstats.csv', params.topdir) ;
+staturl  = sprintf ('%s/matrices/UFstats.csv', params.topurl) ;
 
 %-------------------------------------------------------------------------------
 % get the index file (download a new one if necessary)
 %-------------------------------------------------------------------------------
 
-try
-    % load the existing index file
-    if (nargin < 2)
-	load (indexfile) ;
+refresh = 0 ;
+if nargin == 0
+    % if the user passed in a zero or no argument at all, return the index file
+    matrix = 0 ;
+else
+    % UFget ('refresh') downloads the latest index file from the web
+    if (ischar (matrix))
+        if (strcmp (matrix, 'refresh') || strcmp (matrix, 'update'))
+            matrix = 0 ;
+            refresh = 1 ;
+        end
     end
-    % see if the index file is old; if so, download a fresh copy
-    refresh = (UF_Index.DownloadTimeStamp + params.refresh < now) ;
-catch
-    % oops, no index file.  download it.
-    refresh = 1 ;
 end
 
+if (~refresh)
+    try
+        % load the existing index file
+        if (nargin < 2)
+            load (indexfile) ;
+        end
+        % see if the index file is old; if so, download a fresh copy
+        fileinfo = dir (indexfile) ;
+        refresh = (fileinfo.datenum + params.refresh < now) ;
+    catch
+        % oops, no index file, or a refresh is due.  download it.
+        refresh = 1 ;
+    end
+end
+
+err = '' ;      % to catch a download error, if any
+
 if (refresh)
     % a new UF_Index.mat file to get access to new matrices (if any)
-    fprintf ('downloading %s\n', indexurl) ;
-    fprintf ('to %s\n', indexfile) ;
-    urlwrite (indexurl, indexfile) ;
+    try
+        if (~exist (params.dir, 'dir'))
+            mkdir (params.dir) ;
+        end
+
+        % get a new UF_index.mat file
+        tmp = tempname ;                        % download to a temp file first
+        old = sprintf ('%sUF_Index_old.mat', params.dir) ;
+        urlwrite (indexurl, tmp) ;              % download the latest index file
+        try
+            movefile (indexfile, old, 'f') ;    % keep a backup of the old index
+        catch
+            % backup failed, continue anyway
+        end
+        movefile (tmp, indexfile, 'f') ;        % move the new index into place
+
+        % get a new UFstats.csv file
+        tmp = tempname ;                        % download to a temp file first
+        old = sprintf ('%smatrices/UFstats_old.csv', params.topdir) ;
+        urlwrite (staturl, tmp) ;               % download the latest stats file
+        try
+            movefile (statfile, old, 'f') ;     % keep a backup of the old stats
+        catch
+            % backup failed, continue anyway
+        end
+        movefile (tmp, statfile, 'f') ;         % move the new index into place
+
+    catch
+        err = lasterr ;
+    end
     load (indexfile) ;
     UF_Index.DownloadTimeStamp = now ;
     save (indexfile, 'UF_Index') ;
@@ -59,11 +115,6 @@ end
 % return the index file if requested
 %-------------------------------------------------------------------------------
 
-% if the user passed in a zero or no argument at all, return the index file
-if nargin == 0
-    matrix = 0 ;
-end
-
 if (matrix == 0)
     if (nargout == 0)
         % no output arguments have been passed, so print the index file
@@ -107,6 +158,11 @@ if (matrix == 0)
     else
         Problem = UF_Index ;
     end
+
+    if (~isempty (err))
+        fprintf ('\nUFget: unable to download latest index; using old one.\n') ;
+        disp (err) ;
+    end
     return ;
 end
 
@@ -128,15 +184,15 @@ matfile = sprintf ('%s%s%s.mat', matdir, filesep, matrix) ;
 maturl = sprintf ('%s/%s/%s.mat', params.url, group, matrix) ;
 
 if (~exist (matdir, 'dir'))
-    mkdir (matdir) ;
+    mkdir (matdir) ;                        % create the Group directory
 end
 
-if (exist (matfile, 'file'))
-    load (matfile)
-else
+if (~exist (matfile, 'file'))
     fprintf ('downloading %s\n', maturl) ;
     fprintf ('to %s\n', matfile) ;
-    urlwrite (maturl, matfile) ;
-    load (matfile)
-    save (matfile, 'Problem') ;
+    tmp = tempname ;                        % download to a temp file first
+    urlwrite (maturl, tmp) ;
+    movefile (tmp, matfile, 'f') ;          % move the new matrix into place
 end
+
+load (matfile) ;
diff --git a/CXSparse/MATLAB/UFget/UFget_defaults.m b/CXSparse/MATLAB/UFget/UFget_defaults.m
index 31425c4..71be200 100644
--- a/CXSparse/MATLAB/UFget/UFget_defaults.m
+++ b/CXSparse/MATLAB/UFget/UFget_defaults.m
@@ -1,43 +1,71 @@
 function params = UFget_defaults
 %UFGET_DEFAULTS returns default parameter settings for UFget.
 %   Usage:  params = UFget_defaults ; Returns the default parameter settings for
-%   UFget.  This file may be editted to change these settings:
+%   UFget.  Edit the UFget/UFsettings.txt file to change these settings.
 %
-%   params.url: UF sparse matrix web site
-%   params.dir: your local directory for downloaded sparse matrices.
+%   params.url: URL for *.mat files
+%   params.dir: your local directory for downloaded *.mat files
 %   params.refresh:  how many days should elapse before re-downloading the
 %       index file (for obtaining access to new matrices in the collection).
+%   params.topurl: URL for UF Sparse Matrix Collection
+%   params.topdir: your directory for mat/, matrices/, MM/ and RB/ directories
 %
 %   Example:
 %       params = UFget_defaults ;
 %
 %   See also UFget.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
-%-------------------------------------------------------------------------------
-% location of the UF sparse matrix collection
-params.url = 'http://www.cise.ufl.edu/research/sparse/mat' ;
-
-%-------------------------------------------------------------------------------
 % decode the current directory for this M-file
 s = which (mfilename) ;
 i = find (s == filesep) ;
-s = s (1:i(end)) ;
+this = s (1:i(end)) ;
+
+% defaults, if UFsettings.txt is not present
+params.topdir = '' ;
+params.topurl = 'http://www.cise.ufl.edu/research/sparse' ;
+params.refresh = 30 ;
+
+% open the UFsettings.txt file, if present, and read the default settings
+
+f = -1 ;
+try
+    f = fopen (sprintf ('%sUFsettings.txt', this), 'r') ;
+    if (f >= 0)
+        % get the location of the mat directory
+        s = fgetl (f) ;
+        if (ischar (s))
+            params.topdir = s ;
+        end
+        % get the default URL
+        s = fgetl (f) ;
+        if (ischar (s))
+            params.topurl = s ;
+        end
+        % get the refresh rate
+        s = fgetl (f) ;
+        if (ischar (s) && ~isempty (s))
+            params.refresh = str2double (s) ;
+        end
+    end
+catch
+end
 
-%-------------------------------------------------------------------------------
-% define the directory to download into.  Should end in file separator.
-% Some examples include:
-% params.dir = '/cise/research/sparse/public_html/mat/' ;   % if at UF
-% params.dir = 'your directory here/' ;
-% params.dir = 'c:\matlab\work\UFget\mat\' ;
+try
+    if (f >= 0)
+        fclose (f) ;
+    end
+catch
+end
 
-% Default: the directory containing this UFget_defaults function
-params.dir = sprintf ('%smat%s', s, filesep) ;
+if (isempty (params.topdir))
+    params.topdir = this ;
+end
 
-%-------------------------------------------------------------------------------
-% define how often to check for a new index file (in # of days)
-% inf will force the program to ignore the need to refresh
+if (params.topdir (end) ~= filesep)
+    params.topdir = [params.topdir filesep] ;
+end
 
-% params.refresh = Inf ;				    % if at UF
-params.refresh = 90 ;
+params.url = [params.topurl '/mat'] ;
+params.dir = sprintf ('%smat%s', params.topdir, filesep) ;
diff --git a/CXSparse/MATLAB/UFget/UFget_example.m b/CXSparse/MATLAB/UFget/UFget_example.m
index 7381c1a..be9c209 100644
--- a/CXSparse/MATLAB/UFget/UFget_example.m
+++ b/CXSparse/MATLAB/UFget/UFget_example.m
@@ -8,7 +8,7 @@
 %
 %   See also UFget, UFweb, UFgrep.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 type UFget_example ;
 
@@ -19,7 +19,7 @@ f = f (j) ;
 
 for i = f
     fprintf ('Loading %s%s%s, please wait ...\n', ...
-	index.Group {i}, filesep, index.Name {i}) ;
+        index.Group {i}, filesep, index.Name {i}) ;
     Problem = UFget (i,index) ;
     disp (Problem) ;
     spy (Problem.A) ;
diff --git a/CXSparse/MATLAB/UFget/UFget_lookup.m b/CXSparse/MATLAB/UFget/UFget_lookup.m
index bbc9055..6c8a815 100644
--- a/CXSparse/MATLAB/UFget/UFget_lookup.m
+++ b/CXSparse/MATLAB/UFget/UFget_lookup.m
@@ -6,7 +6,7 @@ function [group, name, id] = UFget_lookup (matrix, UF_Index)
 %
 %   See also UFget.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (isnumeric (matrix))
 
@@ -16,14 +16,14 @@ if (isnumeric (matrix))
 
     % if the index is less than one or bigger than the length of the array,
     % then no particular matrix is accessed
-    if (id > length (UF_Index.nrows) | id < 1)				    %#ok
-	id = 0 ;
-	group = '' ;
-	name = '' ;
+    if (id > length (UF_Index.nrows) | id < 1)                              %#ok
+        id = 0 ;
+        group = '' ;
+        name = '' ;
     else
-	% assign the group and name for the given id
-	group = UF_Index.Group {matrix} ;
-	name = UF_Index.Name {matrix} ;
+        % assign the group and name for the given id
+        group = UF_Index.Group {matrix} ;
+        name = UF_Index.Name {matrix} ;
     end
 
 elseif (ischar (matrix))
@@ -33,40 +33,40 @@ elseif (ischar (matrix))
     % find the group index for the file separator
     % check both types of slashes, and a colon
     gi = find (matrix == '/') ;
-    if (length (gi) == 0)						    %#ok
+    if (length (gi) == 0)                                                   %#ok
         gi = find (matrix == '\') ;
     end
-    if (length (gi) == 0)						    %#ok
+    if (length (gi) == 0)                                                   %#ok
         gi = find (matrix == ':') ;
     end
 
     % if no name divider is in the string, a whole group is specified
-    if (length (gi) == 0)						    %#ok
+    if (length (gi) == 0)                                                   %#ok
 
-	id = 0 ;
-	group = matrix ;
-	name = '' ;
+        id = 0 ;
+        group = matrix ;
+        name = '' ;
 
     else
 
-	% group equals the first part of the string up to the character before
-	% the last file separator
-	group = matrix (1:gi(end)-1) ;
-
-	% group equals the last section of the string after the last file
-	% separator
-	name = matrix (gi(end)+1:end) ;
-
-	% validate the given name and group by checking the index for a match
-	refName = strmatch (name, UF_Index.Name) ;
-	refGroup = strmatch (group, UF_Index.Group) ;
-	id = intersect (refName, refGroup) ;
-	if (length (id) >= 1)
-	    id = id (1) ;
-	else
-	    % the given group/matrix does not exist in the index file
-	    id = 0 ;
-	end
+        % group equals the first part of the string up to the character before
+        % the last file separator
+        group = matrix (1:gi(end)-1) ;
+
+        % group equals the last section of the string after the last file
+        % separator
+        name = matrix (gi(end)+1:end) ;
+
+        % validate the given name and group by checking the index for a match
+        refName = strmatch (name, UF_Index.Name) ;
+        refGroup = strmatch (group, UF_Index.Group) ;
+        id = intersect (refName, refGroup) ;
+        if (length (id) >= 1)
+            id = id (1) ;
+        else
+            % the given group/matrix does not exist in the index file
+            id = 0 ;
+        end
     end
 
 else
diff --git a/CXSparse/MATLAB/UFget/UFgrep.m b/CXSparse/MATLAB/UFget/UFgrep.m
index be7beff..6712139 100644
--- a/CXSparse/MATLAB/UFget/UFgrep.m
+++ b/CXSparse/MATLAB/UFget/UFgrep.m
@@ -20,7 +20,7 @@ function list = UFgrep (expression, index)
 %
 % See also regexp, UFget.
 
-% Copyright 2007, Timothy A. Davis
+% Copyright 2009, Timothy A. Davis
 
 if (nargin < 2)
     index = UFget ;
@@ -37,8 +37,8 @@ matched = 0 ;
 for id = 1:nmat
     name = [index.Group{id} '/' index.Name{id}] ;
     if (~isempty (regexp (name, expression, 'once')))
-	matched = matched + 1 ;
-	list1 (matched) = id ;
+        matched = matched + 1 ;
+        list1 (matched) = id ;
     end
 end
 
@@ -46,7 +46,7 @@ list1 = list1 (1,1:matched) ;
 
 if (nargout == 0)
     for id = list1
-	fprintf ('%4d: %s/%s\n', id, index.Group {id}, index.Name {id}) ;
+        fprintf ('%4d: %s/%s\n', id, index.Group {id}, index.Name {id}) ;
     end
 else
     list = list1 ;
diff --git a/CXSparse/MATLAB/UFget/UFgui.jar b/CXSparse/MATLAB/UFget/UFgui.jar
new file mode 100644
index 0000000..cbb3b40
Binary files /dev/null and b/CXSparse/MATLAB/UFget/UFgui.jar differ
diff --git a/CXSparse/MATLAB/UFget/UFgui.java b/CXSparse/MATLAB/UFget/UFgui.java
new file mode 100644
index 0000000..d4f1136
--- /dev/null
+++ b/CXSparse/MATLAB/UFget/UFgui.java
@@ -0,0 +1,2589 @@
+//------------------------------------------------------------------------------
+// UFgui: a Java GUI interface for viewing, selecting, and downloading matrices
+// from the University of Florida Sparse Matrix Collection.  To compile this
+// program, type the following in your OS command window:
+//
+//      javac UFgui.java
+//      jar cfe UFgui.jar UFgui *.class UFhelp.html
+//
+// You can then delete the *.class files.  To run the program, type:
+// 
+//      java -jar UFgui.jar
+//
+// In all platforms except Windows (Mac, Linux, Solaris, ...) compile with:
+//
+//      make
+//
+// and run with
+//
+//      make run
+//
+// Copyright (c) 2009, Timothy A. Davis.  See UFhelp.html for the license, and
+// for help on how to use this program, or click "Help" in the GUI.
+//------------------------------------------------------------------------------
+
+import java.io.* ;
+import java.util.* ;
+import java.text.* ;
+import java.net.* ;
+import javax.swing.* ;
+import javax.swing.table.* ;
+import javax.swing.event.* ;
+import java.awt.* ;
+import java.awt.event.* ;
+
+public class UFgui extends JFrame
+{
+
+    //--------------------------------------------------------------------------
+    // private variables, accessible to all methods in this class
+    //--------------------------------------------------------------------------
+
+    private static final String UFstats = "matrices/UFstats.csv",
+        UFindex = "mat/UF_Index.mat",
+        all_kinds = "(all kinds)", all_groups = "(all groups)" ;
+    private static final int K = 1024, M = K*K, BUFSIZE = K,
+        MSEC_PER_DAY = 86400000 ;
+
+    private static long INF = Long.MAX_VALUE ;
+
+    private long refresh = 90 ;
+    private int nselected ;
+    private int [ ] download_ids = null ;
+    private boolean gui_ready, downloading, cancel, get_icons,
+        new_matrices = false, debug = false ;
+    // private boolean get_UFstats ;
+
+    private matrix_Table_Model matrix_model = null ;
+
+    private File mat, MM, RB, iconDir ;
+    private String [ ] Kinds, Groups ;
+    private Object [ ][ ] Stats ;
+
+    private Date today, last_download ;
+
+    // files and input/output streams
+    private static String ftemp_name = null ;
+    private static BufferedOutputStream ftemp_out = null ;
+    private static BufferedInputStream url_in = null ;
+    private static BufferedReader in_reader = null ;
+    private static PrintWriter print_out = null ;
+    private static String UFsite, UFarchive, proxy_server, proxy_port ;
+
+    // Java Swing components available to all methods in this class:
+    private JTable matrix_Table ;
+    private JButton download_Button, cancel_Button ;
+    // private JButton update_Button ;
+    private JTextField minrow_Field, maxrow_Field, mincol_Field, maxcol_Field,
+        minnz_Field, maxnz_Field, minpsym_Field, maxpsym_Field, minnsym_Field,
+        maxnsym_Field ;
+    private JRadioButton posdef_yes_Button, posdef_no_Button,
+        posdef_either_Button, nd_yes_Button, nd_no_Button, nd_either_Button,
+        real_yes_Button, real_no_Button, real_either_Button,
+        shape_square_Button, shape_rect_Button, shape_either_Button ;
+    private JLabel nselected_Label, progress_size_Label, icon_Label ;
+    private JCheckBox format_mat_Button, format_mm_Button, format_rb_Button ;
+    private JProgressBar progress1_Bar, progress2_Bar ;
+    private JFileChooser chooser ;
+    private JList Group_List, Kind_List ;
+
+    //--------------------------------------------------------------------------
+    // create the GUI
+    //--------------------------------------------------------------------------
+
+    private String get_setting (String default_setting)
+    {
+        String s ;
+        try
+        {
+            s = in_reader.readLine ( ) ;
+        }
+        catch (Exception e)
+        {
+            // use defaults if file is not found
+            s = default_setting ;
+        }
+        return (s) ;
+    }
+
+    private UFgui ( )
+    {
+        gui_ready = false ;
+        downloading = false ;
+        cancel = false ;
+        final Font plain_Font = new Font ("SansSerif", Font.PLAIN, 12) ;
+        final Font small_Font = new Font ("SansSerif", Font.PLAIN, 10) ;
+        today = new Date ( ) ;
+        last_download = new Date ( ) ;
+
+        //----------------------------------------------------------------------
+        // get the settings 
+
+        try
+        {
+            in_reader = new BufferedReader (new FileReader ("UFsettings.txt")) ;
+        }
+        catch (Exception e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this,
+                "Settings file UFsettings.txt missing (using defaults).",
+                "Warning", JOptionPane.WARNING_MESSAGE) ;
+        }
+
+        // first line in UFsettings.txt is blank, or the path to the
+        // directory containing the mat, matrices, MM, and RB directories.
+        UFarchive = get_setting ("") ;
+
+        // second line is URL for the UF Sparse Matrix Collection
+        UFsite = get_setting ("http://www.cise.ufl.edu/research/sparse") ;
+
+        // third line is the refresh time, in days
+        String s = get_setting ("90") ;
+        try
+        {
+            if (s.equals ("inf") || s.equals ("Inf"))
+            {
+                refresh = INF ;                 // never refresh
+            }
+            else
+            {
+                refresh = Long.parseLong (s) ;
+            }
+        }
+        catch (Exception e)
+        {
+            refresh = 90 ;  // default: every 90 days
+        }
+
+        // fourth line, if non-empty, is the HTTP proxy server
+        // If none (default), then leave blank.
+        proxy_server = get_setting ("") ;
+
+        // fifth and final line is the proxy port (default is 80)
+        proxy_port = get_setting ("") ;
+
+        // sixth line, if present and starts with a 'd', enables debugging
+        s = get_setting ("") ;
+        debug = (s.length ( ) > 0 && s.charAt (0) == 'd') ;
+
+        close_reader (in_reader) ;
+
+        // set up the HTTP proxy
+        if (proxy_server.length ( ) > 0)
+        {
+            if (proxy_port.length ( ) == 0)
+            {
+                proxy_port = "80" ;
+            }
+            // set the proxy server and port
+            System.setProperty ("proxySet", "true" ) ;
+            System.setProperty ("http.proxyHost", proxy_server) ;
+            System.setProperty ("http.proxyPort", proxy_port) ;
+        }
+
+        // UFarchive defaults to current working directory, if empty
+        if (UFarchive.length ( ) == 0)
+        {
+            UFarchive = System.getProperty ("user.dir") ;
+        }
+        UFarchive = UFarchive.replace ('\\', File.separatorChar) ;
+        UFarchive = UFarchive.replace ('/', File.separatorChar) ;
+        char c = UFarchive.charAt (UFarchive.length ( ) - 1) ;
+        if (c != File.separatorChar)
+        {
+            UFarchive += File.separatorChar ;
+        }
+
+        if (debug)
+        {
+            System.out.println ("") ;
+            System.out.println ("UFgui, debugging enabled.") ;
+            System.out.println ("local archive: [" + UFarchive    + "]") ;
+            System.out.println ("UF url:        [" + UFsite       + "]") ;
+            System.out.println ("refresh:       [" + refresh      + "]") ;
+            System.out.println ("proxy server:  [" + proxy_server + "]") ;
+            System.out.println ("proxy port:    [" + proxy_port   + "]") ;
+        }
+
+        //----------------------------------------------------------------------
+        // make sure the top-level directories exist
+
+        mat = CheckDir ("mat") ;
+        MM = CheckDir ("MM") ;
+        RB = CheckDir ("RB") ;
+        iconDir = CheckDir ("matrices") ;
+
+        //----------------------------------------------------------------------
+        // read in the matrix statistics
+
+        Stats = load_UFstats ( ) ;
+
+        if (Stats == null ||
+            ((today.getTime ( ) - last_download.getTime ( )) / MSEC_PER_DAY
+            > refresh))
+        {
+            // UFstats file is missing, or old.  Download both
+            // matrices/UFstats.csv and mat/UF_Index.mat.
+            Stats = download_matrix_stats ( ) ;
+            if (debug) System.out.println ("downloading new UFstats.csv file") ;
+        }
+
+        if (Stats == null)
+        {
+            // display error dialog and quit
+            JOptionPane.showMessageDialog (this,
+                "Download of matrix statistics file failed.",
+                "Error", JOptionPane.ERROR_MESSAGE) ;
+            System.exit (-1) ;
+        }
+
+        //----------------------------------------------------------------------
+        // set the title, and close on [x]
+
+        setTitle ("UFgui: UF Sparse Matrix Collection") ;
+        setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE) ;
+
+        //----------------------------------------------------------------------
+        // selection buttons
+
+        JPanel select_Button_Panel = new JPanel ( ) ;
+
+        JButton select_Button = new JButton ("Select") ;
+        JButton unselect_Button = new JButton ("Deselect") ;
+        JButton reset_Button = new JButton ("Reset criteria") ;
+        JButton clear_Button = new JButton ("Clear selections") ;
+        JButton help_Button = new JButton ("Help") ;
+
+        select_Button_Panel.add (select_Button) ;
+        select_Button_Panel.add (unselect_Button) ;
+        select_Button_Panel.add (reset_Button) ;
+        select_Button_Panel.add (clear_Button) ;
+        select_Button_Panel.add (help_Button) ;
+
+        select_Button.setToolTipText
+        ("Click to add matrices that fit the criteria to your selection.") ;
+        unselect_Button.setToolTipText ("Click to remove matrices " +
+            "that fit the criteria from your selection.") ;
+        reset_Button.setToolTipText ("Click to reset criteria, above.  " +
+            "Prior selections, below, are not cleared.") ;
+        clear_Button.setToolTipText ("Click to clear selections, below.  " +
+            "Criteria, above, is not reset).") ;
+        help_Button.setToolTipText ("For help, click here") ;
+
+        select_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    make_selection (true) ;
+                }
+            }
+        ) ;
+
+        unselect_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    make_selection (false) ;
+                }
+            }
+        ) ;
+
+        reset_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    reset_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        clear_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    clear_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        help_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    help_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        //----------------------------------------------------------------------
+        // download button and format options
+
+        JPanel format_Panel = new JPanel ( ) ;
+
+        format_mat_Button = new JCheckBox ("MATLAB (mat)") ;
+        format_mm_Button = new JCheckBox ("Matrix Market (MM)") ;
+        format_rb_Button = new JCheckBox ("Rutherford/Boeing (RB)    ") ;
+
+        format_mat_Button.setSelected (true) ;
+
+        format_mat_Button.setToolTipText ("Download in MATLAB *.mat format.") ;
+        format_mm_Button.setToolTipText ("Download in Matrix Market.") ;
+        format_rb_Button.setToolTipText
+            ("Download in Rutherford/Boeing format.") ;
+
+        nselected = 0 ;
+        nselected_Label = new JLabel ( ) ;
+        download_Button = new JButton ("Download") ;
+        // update_Button = new JButton ("Update") ;
+        // update_Button_status (true) ;
+
+        format_Panel.add (download_Button) ;
+        format_Panel.add (format_mat_Button) ;
+        format_Panel.add (format_mm_Button) ;
+        format_Panel.add (format_rb_Button) ;
+        format_Panel.add (nselected_Label) ;
+        // format_Panel.add (update_Button) ;
+        format_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        // progress bar and cancel button
+        FlowLayout progress_Layout = new FlowLayout (FlowLayout.LEADING) ;
+        JPanel progress_Panel = new JPanel (progress_Layout) ;
+
+        cancel_Button = new JButton ("Cancel") ;
+        cancel_Button.setEnabled (false) ;
+        progress1_Bar = new JProgressBar ( ) ;
+        progress2_Bar = new JProgressBar ( ) ;
+        progress_size_Label = new JLabel ("") ;
+        progress1_Bar.setMinimumSize (new Dimension (200,16)) ;
+        progress2_Bar.setMinimumSize (new Dimension (200,16)) ;
+        progress_Panel.add (cancel_Button) ;
+        progress_Panel.add (new JLabel ("   Overall progress:")) ;
+        progress_Panel.add (progress1_Bar) ;
+        progress_Panel.add (new JLabel ("   Current file:")) ;
+        progress_Panel.add (progress2_Bar) ;
+        progress_Panel.add (progress_size_Label) ;
+        progress_Panel.setMaximumSize (new Dimension (0,0)) ;
+        cancel_Button.setToolTipText ("No downloads in progress.") ;
+
+        download_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    download_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        cancel_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    cancel_Button_action (e) ;
+                }
+            }
+        ) ;
+
+//      update_Button.addActionListener
+//      (
+//          new ActionListener ( )
+//          {
+//              public void actionPerformed (ActionEvent e)
+//              {
+//                  update_Button_action (e) ;
+//              }
+//          }
+//      ) ;
+
+        JPanel download_Panel = new JPanel ( ) ;
+        GroupLayout layout3 = new GroupLayout (download_Panel) ;
+        download_Panel.setLayout (layout3) ;
+
+        layout3.setAutoCreateGaps (true) ;
+        layout3.setAutoCreateContainerGaps (false) ;
+
+        layout3.setHorizontalGroup
+        (
+            layout3.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (format_Panel)
+                .addComponent (progress_Panel)
+        ) ;
+
+        layout3.setVerticalGroup
+        (
+            layout3.createSequentialGroup ( )
+                .addComponent (format_Panel)
+                .addComponent (progress_Panel)
+        ) ;
+
+        download_Panel.setBorder
+            (BorderFactory.createTitledBorder ("download")) ;
+        download_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // panel for m, n, nnz, psym, and nsym
+
+        // # of rows
+        minrow_Field = new JTextField ("") ;
+        JLabel rowlabel = new JLabel (" \u2264 number of rows \u2264 ") ;
+        maxrow_Field = new JTextField ("") ;
+        minrow_Field.setColumns (16) ;
+        maxrow_Field.setColumns (16) ;
+        minrow_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxrow_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        minrow_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxrow_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // # of columns
+        mincol_Field = new JTextField ("") ;
+        JLabel collabel = new JLabel (" \u2264 number of columns \u2264 ") ;
+        maxcol_Field = new JTextField ("") ;
+        mincol_Field.setColumns (16) ;
+        maxcol_Field.setColumns (16) ;
+        mincol_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxcol_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        mincol_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxcol_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // # of entries
+        minnz_Field = new JTextField ("") ;
+        JLabel nnzlabel = new JLabel (" \u2264 number of nonzeros \u2264 ") ;
+        maxnz_Field = new JTextField ("") ;
+        minnz_Field.setColumns (16) ;
+        maxnz_Field.setColumns (16) ;
+        minnz_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxnz_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        minnz_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxnz_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // pattern symmetry
+        minpsym_Field = new JTextField ("0.0") ;
+        JLabel psymlabel = new JLabel (" \u2264 pattern symmetry \u2264 ") ;
+        maxpsym_Field = new JTextField ("1.0") ;
+        minpsym_Field.setColumns (16) ;
+        maxpsym_Field.setColumns (16) ;
+        maxpsym_Field.setToolTipText (
+        "Refers to position of nonzeros, not their values.\n" +
+        "1 = perfectly symmetric pattern, 0 = perfectly unsymmetric pattern.") ;
+        minpsym_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxpsym_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // numerical symmetry
+        minnsym_Field = new JTextField ("0.0") ;
+        JLabel nsymlabel = new JLabel (" \u2264 numerical symmetry \u2264 ") ;
+        maxnsym_Field = new JTextField ("1.0") ;
+        minnsym_Field.setColumns (16) ;
+        maxnsym_Field.setColumns (16) ;
+        maxnsym_Field.setToolTipText (
+        "1 means A=A', 0 means no nonzero entry A(i,j) = A(j,i).") ;
+        minnsym_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxnsym_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        JPanel range_Panel = new JPanel ( ) ;
+        GroupLayout layout5 = new GroupLayout (range_Panel) ;
+        range_Panel.setLayout (layout5) ;
+        layout5.setAutoCreateGaps (false) ;
+        layout5.setAutoCreateContainerGaps (false) ;
+
+        layout5.setHorizontalGroup
+        (
+            layout5.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minrow_Field)
+                        .addComponent (mincol_Field)
+                        .addComponent (minnz_Field)
+                        .addComponent (minpsym_Field)
+                        .addComponent (minnsym_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (rowlabel)
+                        .addComponent (collabel)
+                        .addComponent (nnzlabel)
+                        .addComponent (psymlabel)
+                        .addComponent (nsymlabel)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (maxrow_Field)
+                        .addComponent (maxcol_Field)
+                        .addComponent (maxnz_Field)
+                        .addComponent (maxpsym_Field)
+                        .addComponent (maxnsym_Field)
+                )
+        ) ;
+
+        layout5.setVerticalGroup
+        (
+            layout5.createSequentialGroup ( )
+
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minrow_Field)
+                        .addComponent (rowlabel)
+                        .addComponent (maxrow_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (mincol_Field)
+                        .addComponent (collabel)
+                        .addComponent (maxcol_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minnz_Field)
+                        .addComponent (nnzlabel)
+                        .addComponent (maxnz_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minpsym_Field)
+                        .addComponent (psymlabel)
+                        .addComponent (maxpsym_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minnsym_Field)
+                        .addComponent (nsymlabel)
+                        .addComponent (maxnsym_Field)
+                )
+
+        ) ;
+
+        range_Panel.setMaximumSize (new Dimension (0,0)) ;
+        // range_Panel.setBorder (BorderFactory.createTitledBorder ("range")) ;
+
+        //----------------------------------------------------------------------
+        // checkbox panel for posdef, ND, real, and format
+
+        // square or rectangular
+        JLabel shape_label = new JLabel ("shape ") ;
+        shape_square_Button = new JRadioButton ("square   ") ;
+        shape_rect_Button = new JRadioButton ("rectangular   ") ;
+        shape_either_Button = new JRadioButton ("either   ") ;
+        shape_either_Button.setSelected (true) ;
+        ButtonGroup shape_group = new ButtonGroup ( ) ;
+        shape_group.add (shape_square_Button) ;
+        shape_group.add (shape_rect_Button) ;
+        shape_group.add (shape_either_Button) ;
+        shape_square_Button.setToolTipText
+            ("Select 'yes' for square matrices.") ;
+        shape_rect_Button.setToolTipText
+            ("Select 'no' for rectangular matrices only.") ;
+        shape_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        // positive definite
+        JLabel posdef_label = new JLabel ("positive definite? ") ;
+        posdef_yes_Button = new JRadioButton ("yes") ;
+        posdef_no_Button = new JRadioButton ("no") ;
+        posdef_either_Button = new JRadioButton ("either") ;
+        posdef_either_Button.setSelected (true) ;
+        ButtonGroup posdef_group = new ButtonGroup ( ) ;
+        posdef_group.add (posdef_yes_Button) ;
+        posdef_group.add (posdef_no_Button) ;
+        posdef_group.add (posdef_either_Button) ;
+
+        posdef_yes_Button.setToolTipText
+            ("Select 'yes' for symmetric positive definite matrices only.") ;
+        posdef_no_Button.setToolTipText
+            ("Select 'no' for non-positive definite matrices only.") ;
+        posdef_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        // 2D/3D
+        JLabel nd_label = new JLabel ("2D/3D discretization?    ") ;
+        nd_yes_Button = new JRadioButton ("yes") ;
+        nd_no_Button = new JRadioButton ("no") ;
+        nd_either_Button = new JRadioButton ("either") ;
+        nd_either_Button.setSelected (true) ;
+        ButtonGroup nd_group = new ButtonGroup ( ) ;
+        nd_group.add (nd_yes_Button) ;
+        nd_group.add (nd_no_Button) ;
+        nd_group.add (nd_either_Button) ;
+
+        nd_yes_Button.setToolTipText
+            ("Select 'yes' for matrices " +
+            "arising from 2D or 3D discretizations only.") ;
+        nd_no_Button.setToolTipText
+            ("Select 'no' to exclude matrices " +
+            "arising from 2D or 3D discretizations.") ;
+        nd_either_Button.setToolTipText ("Select 'either' for any matrix.") ;
+
+        // real or complex
+        JLabel real_label = new JLabel ("real or complex? ") ;
+        real_yes_Button = new JRadioButton ("real") ;
+        real_no_Button = new JRadioButton ("complex") ;
+        real_either_Button = new JRadioButton ("either") ;
+        real_either_Button.setSelected (true) ;
+        ButtonGroup real_group = new ButtonGroup ( ) ;
+        real_group.add (real_yes_Button) ;
+        real_group.add (real_no_Button) ;
+        real_group.add (real_either_Button) ;
+
+        real_yes_Button.setToolTipText
+            ("Select 'real' for real matrices only (includes integer and binary).") ;
+        real_no_Button.setToolTipText
+            ("Select 'complex' for complex matrices only.") ;
+        real_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        JPanel check_Panel = new JPanel ( ) ;
+        GroupLayout layout4 = new GroupLayout (check_Panel) ;
+        check_Panel.setLayout (layout4) ;
+        layout4.setAutoCreateGaps (false) ;
+        layout4.setAutoCreateContainerGaps (false) ;
+
+        layout4.setHorizontalGroup
+        (
+            layout4.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_label)
+                        .addComponent (posdef_label)
+                        .addComponent (nd_label)
+                        .addComponent (real_label)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_square_Button)
+                        .addComponent (posdef_yes_Button)
+                        .addComponent (nd_yes_Button)
+                        .addComponent (real_yes_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_rect_Button)
+                        .addComponent (posdef_no_Button)
+                        .addComponent (nd_no_Button)
+                        .addComponent (real_no_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_either_Button)
+                        .addComponent (posdef_either_Button)
+                        .addComponent (nd_either_Button)
+                        .addComponent (real_either_Button)
+                )
+        ) ;
+
+        layout4.setVerticalGroup
+        (
+            layout4.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_label)
+                        .addComponent (shape_square_Button)
+                        .addComponent (shape_rect_Button)
+                        .addComponent (shape_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (posdef_label)
+                        .addComponent (posdef_yes_Button)
+                        .addComponent (posdef_no_Button)
+                        .addComponent (posdef_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (nd_label)
+                        .addComponent (nd_yes_Button)
+                        .addComponent (nd_no_Button)
+                        .addComponent (nd_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (real_label)
+                        .addComponent (real_yes_Button)
+                        .addComponent (real_no_Button)
+                        .addComponent (real_either_Button)
+                )
+        ) ;
+
+        check_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // Group and Kind lists
+
+        Kinds = FindKinds ( ) ;
+        Groups = FindGroups ( ) ;
+
+        Group_List = new JList ((Object [ ]) Groups) ;
+        Kind_List = new JList ((Object [ ]) Kinds) ;
+
+        JScrollPane Group_Pane = new JScrollPane (Group_List) ;
+        JScrollPane Kind_Pane = new JScrollPane (Kind_List) ;
+
+        Kind_Pane.setBorder (BorderFactory.createTitledBorder ("kind")) ;
+        Group_Pane.setBorder (BorderFactory.createTitledBorder ("group")) ;
+
+        Group_List.setFont (plain_Font) ;
+        Kind_List.setFont (plain_Font) ;
+
+        Group_Pane.setVerticalScrollBarPolicy
+            (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
+        Kind_Pane.setVerticalScrollBarPolicy
+            (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
+
+        Group_List.setVisibleRowCount (5) ;
+        Kind_List.setVisibleRowCount (5) ;
+
+        // Group_List.setPreferredSize (new Dimension (200,100)) ;
+        // Kind_List.setPreferredSize (new Dimension (200,100)) ;
+
+        JPanel list_Panel = new JPanel ( ) ;
+        GroupLayout layout9 = new GroupLayout (list_Panel) ;
+        list_Panel.setLayout (layout9) ;
+
+        layout9.setAutoCreateGaps (true) ;
+        layout9.setAutoCreateContainerGaps (false) ;
+
+        layout9.setHorizontalGroup
+        (
+            layout9.createSequentialGroup ( )
+                .addComponent (Group_Pane)
+                .addComponent (Kind_Pane)
+        ) ;
+
+        layout9.setVerticalGroup
+        (
+            layout9.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (Group_Pane)
+                .addComponent (Kind_Pane)
+        ) ;
+
+        list_Panel.setMinimumSize (new Dimension (450,150)) ;
+
+        //----------------------------------------------------------------------
+        // selection panel
+        JPanel selection_Panel = new JPanel ( ) ;
+        GroupLayout layout2 = new GroupLayout (selection_Panel) ;
+        selection_Panel.setLayout (layout2) ;
+        layout2.setAutoCreateGaps (true) ;
+        layout2.setAutoCreateContainerGaps (false) ;
+        layout2.setHorizontalGroup
+        (
+            layout2.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (range_Panel)
+                .addComponent (check_Panel)
+                .addComponent (list_Panel)
+                .addComponent (select_Button_Panel)
+        ) ;
+        layout2.setVerticalGroup
+        (
+            layout2.createSequentialGroup ( )
+                .addComponent (range_Panel)
+                .addComponent (check_Panel)
+                .addComponent (list_Panel)
+                .addComponent (select_Button_Panel)
+        ) ;
+        selection_Panel.setBorder
+            (BorderFactory.createTitledBorder ("selection criteria")) ;
+        selection_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // create the table of matrices
+
+        matrix_model = new matrix_Table_Model ( ) ;
+        matrix_Table = new JTable (matrix_model)
+        {
+            // table header tool tips
+            protected JTableHeader createDefaultTableHeader ( )
+            {
+                return new JTableHeader (columnModel)
+                {
+                    public String getToolTipText (MouseEvent e)
+                    {
+                        String tip = null ;
+                        java.awt.Point p = e.getPoint ( ) ;
+                        int i = columnModel.getColumnIndexAtX (p.x) ;
+                        int j = columnModel.getColumn (i).getModelIndex ( ) ;
+                        return matrix_column_tooltips [j] ;
+                    }
+                } ;
+            }
+        } ;
+
+        JTableHeader header = matrix_Table.getTableHeader ( ) ;
+        final TableCellRenderer hr = header.getDefaultRenderer ( ) ;
+        header.setDefaultRenderer
+        (
+            new TableCellRenderer ( )
+            {
+                public Component getTableCellRendererComponent (JTable table,
+                    Object value, boolean isSelected, boolean hasFocus,
+                    int row, int column)
+                {
+                    Component co = hr.getTableCellRendererComponent (
+                        table, value, isSelected, hasFocus, row, column) ;
+                    co.setFont (small_Font) ;
+                    return (co) ;
+                }
+            }
+        ) ;
+
+        matrix_model.load_data (Stats) ;
+
+        //----------------------------------------------------------------------
+        // popup menu for the table
+
+        JPopupMenu popup = new JPopupMenu ( ) ;
+
+        JMenuItem select_menuItem =
+            new JMenuItem ("Select highlighted matrices") ;
+        select_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    popup_action (e, true) ;
+                }
+            }
+        ) ;
+
+        JMenuItem unselect_menuItem =
+            new JMenuItem ("Deselect highlighted matrices") ;
+        unselect_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    popup_action (e, false) ;
+                }
+            }
+        ) ;
+
+        JMenuItem exportcsv_menuItem =
+            new JMenuItem ("Export selected matrices as CSV file") ;
+        exportcsv_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    export_list_action (e, true) ;
+                }
+            }
+        ) ;
+
+        JMenuItem exportm_menuItem =
+            new JMenuItem ("Export selected matrices as MATLAB *.m file") ;
+        exportm_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    export_list_action (e, false) ;
+                }
+            }
+        ) ;
+
+        popup.add (select_menuItem) ;
+        popup.add (unselect_menuItem) ;
+        popup.add (exportcsv_menuItem) ;
+        popup.add (exportm_menuItem) ;
+
+        // Add listener to components that can bring up popup menus.
+        matrix_Table.addMouseListener (new matrix_Table_PopupListener (popup)) ;
+
+        //----------------------------------------------------------------------
+        // set default column widths
+
+        int [ ] columnwidth = {
+            40,     // 0:select
+            30,     // 1:mat
+            25,     // 2:MM
+            25,     // 3:RB
+            38,     // 4:id
+            110,    // 5:Group
+            150,    // 6:Name
+            70,     // 7:nrows
+            70,     // 8:ncols
+            70,     // 9:nnz
+            40,     // 10:isReal
+            40,     // 11:isBinary
+            40,     // 12:isND
+            40,     // 13:posdef
+            50,     // 14:psym
+            50,     // 15:nsym
+            200 } ; // 16:kind
+
+        TableColumn column = null ;
+        for (int col = 0 ; col < 17 ; col++)
+        {
+            column = matrix_Table.getColumnModel ( ).getColumn (col) ;
+            column.setPreferredWidth (columnwidth [col]) ;
+        }
+
+        //----------------------------------------------------------------------
+        // set the view size, sort by id, and add the table to a scroll pane
+
+        matrix_Table.setPreferredScrollableViewportSize
+            (new Dimension (500,70)) ;
+        matrix_Table.setFillsViewportHeight (true) ;
+        matrix_Table.setAutoCreateRowSorter (true) ;
+
+        matrix_Table.getSelectionModel ( )
+            .addListSelectionListener (new matrix_Table_RowListener ( )) ;
+
+        // sort by id
+        java.util.List <RowSorter.SortKey> sortKeys =
+            new ArrayList<RowSorter.SortKey> ( ) ;
+        sortKeys.add (new RowSorter.SortKey (4, SortOrder.ASCENDING)) ;
+        (matrix_Table.getRowSorter ( )).setSortKeys (sortKeys) ; 
+
+        matrix_Table.getTableHeader ( ).setReorderingAllowed (false) ;
+        JScrollPane scroll_Pane = new JScrollPane (matrix_Table) ;
+        scroll_Pane.setBorder (BorderFactory.createTitledBorder (UFarchive)) ;
+
+        //----------------------------------------------------------------------
+        // create the icon and display the default matrix
+
+        icon_Label = new JLabel ( ) ;
+        icon_Label.setFont (plain_Font) ;
+        icon_Label.setVerticalTextPosition (JLabel.BOTTOM) ;
+        icon_Label.setHorizontalTextPosition (JLabel.CENTER) ;
+        icon_Label.setBorder (BorderFactory.createTitledBorder ("matrix icon"));
+        update_icon ("HB/west0479") ;
+
+        //----------------------------------------------------------------------
+        // create the top panel (selection panel and icon)
+
+        JPanel top_Panel = new JPanel ( ) ;
+        GroupLayout layout8 = new GroupLayout (top_Panel) ;
+        top_Panel.setLayout (layout8) ;
+
+        layout8.setAutoCreateGaps (true) ;
+        layout8.setAutoCreateContainerGaps (false) ;
+
+        layout8.setHorizontalGroup
+        (
+            layout8.createSequentialGroup ( )
+                .addComponent (selection_Panel)
+                .addComponent (icon_Label)
+        ) ;
+
+        layout8.setVerticalGroup
+        (
+            layout8.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (selection_Panel)
+                .addComponent (icon_Label)
+        ) ;
+
+        top_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // create the root layout manager
+
+        Container pane = getContentPane ( ) ;
+        GroupLayout layout = new GroupLayout (pane) ;
+        pane.setLayout (layout) ;
+        layout.setAutoCreateGaps (true) ;
+        layout.setAutoCreateContainerGaps (false) ;
+
+        layout.setHorizontalGroup
+        (
+            layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (top_Panel)
+                .addComponent (scroll_Pane)
+                .addComponent (download_Panel)
+        ) ;
+
+        layout.setVerticalGroup
+        (
+            layout.createSequentialGroup ( )
+                .addComponent (top_Panel)
+                .addComponent (scroll_Pane)
+                .addComponent (download_Panel)
+        ) ;
+
+        setSize (1100,750) ;
+
+        //----------------------------------------------------------------------
+        // create the file chooser; not shown until "export" is chosen
+
+        chooser = new JFileChooser ( ) ;
+        chooser.setFileSelectionMode (JFileChooser.FILES_AND_DIRECTORIES) ;
+
+        gui_ready = true ;
+        set_selected_label (true) ;
+
+        //----------------------------------------------------------------------
+        // start a thread to download any icons not present
+
+        get_all_icons ( ) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // yes/no/unknown
+    //--------------------------------------------------------------------------
+
+    private String yes_no (int k)
+    {
+        if (k < 0)
+        {
+            return ("?") ;
+        }
+        else if (k == 0)
+        {
+            return ("no") ;
+        }
+        else
+        {
+            return ("yes") ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // ternary
+    //--------------------------------------------------------------------------
+
+    private int ternary (String s)
+    {
+        long k = Long.parseLong (s) ;
+        if (k < 0)
+        {
+            return (-1) ;
+        }
+        else if (k == 0)
+        {
+            return (0) ;
+        }
+        else
+        {
+            return (1) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // read the UFstats file
+    //--------------------------------------------------------------------------
+
+    private Object [ ][ ] load_UFstats ( )
+    {
+        if (debug) System.out.println ("reading UFstats.csv file") ;
+        Object [ ][ ] S = null ;
+        int nmatrices = 0 ;
+        in_reader = null ;
+        try
+        {
+            // get the number of matrices in the UF Sparse Matrix Collection
+            in_reader = new BufferedReader (new FileReader
+                (fix_name (UFstats))) ;
+            nmatrices = Integer.parseInt (in_reader.readLine ( )) ;
+            // skip past the creation date and time
+            String ignore = in_reader.readLine ( ) ;
+            // get the time of last download from the file modification time
+            last_download =
+                new Date (new File (fix_name (UFstats)).lastModified ( )) ;
+        }
+        catch (Exception e)
+        {
+            // this is OK, for now, since we can try to download a new one
+            if (debug) System.out.println ("reading UFstats.csv file failed") ;
+            return (null) ;
+        }
+        try
+        {
+            // read the rest of the file
+            S = new Object [nmatrices][13] ;
+            for (int id = 1 ; id <= nmatrices ; id++)
+            {
+                // split the tokens by comma
+                String [ ] r = (in_reader.readLine ( )).split (",") ;
+                S [id-1][0]  = id ;                             // id
+                S [id-1][1]  = r [0] ;                          // Group
+                S [id-1][2]  = r [1] ;                          // Name
+                S [id-1][3]  = Long.parseLong (r [2]) ;         // nrows
+                S [id-1][4]  = Long.parseLong (r [3]) ;         // ncols
+                S [id-1][5]  = Long.parseLong (r [4]) ;         // nnz
+
+                S [id-1][6]  = ternary (r [5]) ;                // isReal
+                S [id-1][7]  = ternary (r [6]) ;                // isBinary
+                S [id-1][8]  = ternary (r [7]) ;                // isND
+                S [id-1][9]  = ternary (r [8]) ;                // posdef
+
+                S [id-1][10] = Double.parseDouble (r [9]) ;     // psym
+                S [id-1][11] = Double.parseDouble (r [10]) ;    // nsym
+                S [id-1][12] = r [11] ;                         // kind
+            }
+        }
+        catch (Exception e)
+        {
+            // this is OK, for now, since we can try to download a new one
+            if (debug) System.out.println ("reading UFstats.csv file failed") ;
+            return (null) ;
+        }
+        finally
+        {
+            close_reader (in_reader) ;
+        }
+        return (S) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // tool tips for each column of the matrix table
+    //--------------------------------------------------------------------------
+
+    protected String [ ] matrix_column_tooltips =
+    {
+        // 0:select:
+        "Click to select a matrix.  This is the only column you can edit.",
+        "'x' if MAT format already downloaded",                 // 1:mat
+        "'x' if MM format already downloaded",                  // 2:MM
+        "'x' if RB format already downloaded",                  // 3:MM
+        "matrix id",                                        // 4:id
+        "matrix group (typically a person or organization)",// 5:Group
+        "matrix name (full name is Group/Name)",            // 6:Name
+        "# of rows in the matrix",                          // 7:nrows
+        "# of columns in the matrix",                       // 8:ncols
+        "# of nonzeros in the matrix",                      // 9:nnz
+        "if the matrix is real (not complex)",              // 10:isReal
+        "if the matrix is binary",                          // 11:isBinary
+        "if the matrix arises from a 2D/3D discretization", // 12:isND
+        "if the matrix is symmetric positive definite",     // 13:posdef
+        // 14:psym:
+        "symmetry of nonzero pattern (0: none, 1: pattern(A)=pattern(A')",
+        "symmetry of nonzero values (0: none, 1: A=A'",     // 15:nsym
+        // 16:kind:
+        "the matrix 'kind' is the problem domain from which it arises" 
+    } ;
+
+    //--------------------------------------------------------------------------
+    // control whether changes to the table cause updates to fire
+    //--------------------------------------------------------------------------
+
+    public boolean fire_status = true ;
+
+    public void fire_updates (boolean fire)
+    {
+        fire_status = fire ;
+        if (fire)
+        {
+            // touch the table to force a fire
+            set_table_value (get_table_value (1, 0), 1, 0) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // table of matrix statistics
+    //--------------------------------------------------------------------------
+
+    class matrix_Table_Model extends AbstractTableModel
+    {
+        private String [ ] columnNames =
+            {
+            "select", "mat", "MM", "RB",
+            "id", "Group", "Name", "# rows", "# cols", "# nonzeros", "real",
+            "binary", "2D/3D", "posdef", "psym", "nsym", "kind" } ;
+
+        private Object [ ][ ] data = null ;
+
+        public int getColumnCount ( )
+        {
+            return (columnNames.length) ;
+        }
+
+        public int getRowCount ( )
+        {
+            return (data.length) ;
+        }
+
+        public String getColumnName (int col)
+        {
+            return (columnNames [col]) ;
+        }
+
+        public Object getValueAt (int row, int col)
+        {
+            return (data [row][col]) ;
+        }
+
+        public boolean isCellEditable (int row, int col)
+        {
+            // only the "select" column is edittable
+            return (col == 0) ;
+        }
+
+        public void setValueAt (Object value, int row, int col)
+        {
+            if (col == 0 && gui_ready && ((Boolean) data [row][0]) != value)
+            {
+                if ((Boolean) value == false)
+                {
+                    // changing from selected to unselected
+                    nselected-- ;
+                }
+                else
+                {
+                    // changing from unselected to selected
+                    nselected++ ;
+                }
+                set_selected_label (download_Button.isEnabled ( )) ;
+            }
+            data [row][col] = value ;
+            if (fire_status) fireTableDataChanged ( ) ;
+        }
+
+        public Class getColumnClass (int col)
+        {
+            return (getValueAt (0, col).getClass ( )) ;
+        }
+
+        public void load_data (Object [ ][ ] newstats)
+        {
+            // load the matrix table with all matrix statistics
+            data = new Object [newstats.length][17] ;
+            nselected = 0 ;
+            for (int i = 0 ; i < newstats.length ; i++)
+            {
+                // i and j are in terms of the view, but the table is not yet
+                // sorted because it is not yet visible
+                data [i][0] = false ;   // select column is false
+                for (int j = 1 ; j < 4 ; j++)
+                {
+                    // mat, MM, and RB, which can change later:
+                    data [i][j] = "-" ;
+                }
+                for (int j = 0 ; j < 13 ; j++)
+                {
+                    // matrix stats, which do not change:
+                    // 4:id, 5:Group, 6:Name, 7:nrows, 8:ncols, 9:nnz,
+                    // 10:isreal, 11:isBinary, 12:isND, 13:posdef, 14: psym,
+                    // 15:nsym, 16:kind
+                    if (j >= 6 && j <= 9)
+                    {
+                        int k = (Integer) newstats [i][j] ;
+                        if (k < 0)
+                        {
+                            data [i][j+4] = " ?" ;
+                        }
+                        else if (k == 0)
+                        {
+                            data [i][j+4] = " no" ;
+                        }
+                        else
+                        {
+                            data [i][j+4] = " yes" ;
+                        }
+                    }
+                    else
+                    {
+                        data [i][j+4] = newstats [i][j] ;
+                    }
+                }
+            }
+            fireTableDataChanged ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // get a value from the matrix table
+    //--------------------------------------------------------------------------
+
+    private Object get_table_value (int id, int j)
+    {
+        // id is in the range 1 to Stats.length.  The model index is id-1.
+        // Convert this to the row index of the view and then get the data.
+        // j is in the range 0 to 16, and is the same in the view and the
+        // model, since column rearranging is never done.
+
+        int i = matrix_Table.convertRowIndexToView (id-1) ;
+        return (matrix_Table.getValueAt (i, j)) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // set a value in the matrix table
+    //--------------------------------------------------------------------------
+
+    private void set_table_value (Object value, int id, int j)
+    {
+        // just like get_table_value, setting the data instead of getting it
+
+        int i = matrix_Table.convertRowIndexToView (id-1) ;
+        matrix_Table.setValueAt (value, i, j) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // get ids of highlighted matrices
+    //--------------------------------------------------------------------------
+
+    private int [ ] get_highlighted_ids ( )
+    {
+        // return a list of highlighted matrix id's
+
+        // get the highlighted row indices in the current view
+        int [ ] highlighted = matrix_Table.getSelectedRows ( ) ;
+        // convert the row view indices to matrix id's
+        for (int k = 0 ; k < highlighted.length ; k++)
+        {
+            int i = highlighted [k] ;
+            int id = 1 + matrix_Table.convertRowIndexToModel (i) ;
+            highlighted [k] = id ;
+        }
+        return (highlighted) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // get ids of matrices selected for download
+    //--------------------------------------------------------------------------
+
+    private int [ ] get_download_ids ( )
+    {
+        // get the list of ids to download, in view order
+        nselected = 0 ;
+        for (int i = 0 ; i < Stats.length ; i++)
+        {
+            if ((Boolean) matrix_Table.getValueAt (i, 0))
+            {
+                nselected++ ;
+            }
+        }
+        int [ ] downloads = new int [nselected] ;
+        int k = 0 ;
+        for (int i = 0 ; i < Stats.length ; i++)
+        {
+            if ((Boolean) matrix_Table.getValueAt (i, 0))
+            {
+                int id = 1 + matrix_Table.convertRowIndexToModel (i) ;
+                downloads [k++] = id ;
+            }
+        }
+        return (downloads) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // set "Matrices selected:" label and download tool tip
+    //--------------------------------------------------------------------------
+
+    private void set_selected_label (boolean enabled)
+    {
+        if (gui_ready)
+        {
+            nselected_Label.setText
+                ("   Matrices selected: " + nselected + "   ") ;
+            download_Button.setEnabled (enabled) ;
+            if (enabled)
+            {
+                if (nselected == 0)
+                {
+                    download_Button.setToolTipText
+                        ("No matrices have been selected for download") ;
+                }
+                else if (nselected == 1)
+                {
+                    download_Button.setToolTipText
+                        ("Click to download the single selected matrix") ;
+                }
+                else
+                {
+                    download_Button.setToolTipText
+                        ("Click to download the " + nselected +
+                        " selected matrices") ;
+                }
+            }
+            else
+            {
+                download_Button.setToolTipText ("Download in progress.") ;
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // show matrix icon
+    //--------------------------------------------------------------------------
+
+    private void show_highlighted_icon ( )
+    {
+        // show icon of last entry in the highlighted list
+        int [ ] highlighted = get_highlighted_ids ( ) ;
+        int n = highlighted.length ;
+        if (n > 0)
+        {
+            int id = highlighted [n-1] ;
+            String Group = (String) Stats [id-1][1] ;
+            String Name  = (String) Stats [id-1][2] ;
+            update_icon (Group + "/" + Name) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // matrix table popup listener
+    //--------------------------------------------------------------------------
+
+    private class matrix_Table_PopupListener extends MouseAdapter
+    {
+        JPopupMenu pop ;
+
+        matrix_Table_PopupListener (JPopupMenu popupMenu)
+        {
+            pop = popupMenu ;
+        }
+
+        public void mousePressed (MouseEvent e)
+        {
+            maybeShowPopup (e) ;
+        }
+
+        public void mouseReleased (MouseEvent e)
+        {
+            maybeShowPopup (e) ;
+        }
+
+        private void maybeShowPopup (MouseEvent e)
+        {
+            if (e.isPopupTrigger ( ))
+            {
+                pop.show (e.getComponent ( ), e.getX ( ), e.getY ( )) ;
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // matrix table row listener
+    //--------------------------------------------------------------------------
+
+    private class matrix_Table_RowListener implements ListSelectionListener
+    {
+        public void valueChanged (ListSelectionEvent event)
+        {
+            if (event.getValueIsAdjusting ( ))
+            {
+                return ;
+            }
+            show_highlighted_icon ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // FindKinds:  determine the set of all Problem kinds
+    //--------------------------------------------------------------------------
+
+    private String [ ] FindKinds ( )
+    {
+        Set<String> KindSet = new TreeSet<String> ( ) ;
+        KindSet.add (all_kinds) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            KindSet.add (SimplifyKind ((String) Stats [id-1][12])) ;
+        }
+        return ((String [ ]) KindSet.toArray (new String [0])) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // FindGroups:  determine the set of all groups
+    //--------------------------------------------------------------------------
+
+    private String [ ] FindGroups ( )
+    {
+        Set<String> GroupSet = new TreeSet<String> ( ) ;
+        GroupSet.add (all_groups) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            GroupSet.add ((String) Stats [id-1][1]) ;
+        }
+        return ((String [ ]) GroupSet.toArray (new String [0])) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // SimplifyKind: remove extranneous terms from a string
+    //--------------------------------------------------------------------------
+
+    private String SimplifyKind (String kind)
+    {
+        // remove terms from a matrix-kind string
+        String result = null ;
+        String [ ] token = kind.split (" ") ;
+        for (int i = 0 ; i < token.length ; i++)
+        {
+            if (! (token [i].equals ("subsequent")
+                || token [i].equals ("sequence")
+                || token [i].equals ("problem")
+                || token [i].equals ("duplicate")))
+            {
+                if (result == null)
+                {
+                    result = token [i] ;
+                }
+                else
+                {
+                    result = result + " " + token [i] ;
+                }
+            }
+        }
+        return (result) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // CheckDir:  return a directory, creating it if it doesn't exist
+    //--------------------------------------------------------------------------
+
+    private File CheckDir (String directory_name)
+    {
+        File dir = new File (fix_name (directory_name)) ;
+        if (!dir.isDirectory ( ))
+        {
+            dir.mkdirs ( ) ;
+        }
+        return (dir) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // CheckExistence: determine which files exist in the local file system
+    //--------------------------------------------------------------------------
+
+    private void CheckExistence ( )
+    {
+        // check the existence all matrices in all 3 formats
+        fire_updates (false) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            CheckExistence (id) ;
+        }
+        fire_updates (true) ;
+    }
+
+    private boolean [ ] CheckExistence (int id)
+    {
+        // check the existence of a single file (in all 3 formats)
+        boolean [ ] exists = new boolean [4] ;
+        boolean [ ] etable = new boolean [3] ;
+
+        String Group = (String) Stats [id-1][1] ;
+        String Name  = (String) Stats [id-1][2] ;
+
+        for (int j = 0 ; j < 3 ; j++)
+        {
+            etable [j] = (((String) get_table_value (id, j+1)).charAt (0) == 'x') ;
+        }
+
+        for (int j = 0 ; j < 4 ; j++)
+        {
+            exists [j] = false ;
+        }
+
+        // check for mat/HB/west0067.mat
+        File G = new File (mat, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".mat")).exists ( ))
+        {
+            exists [0] = true ;
+        }
+
+        // check for MM/HB/west0067.tar.gz
+        G = new File (MM, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".tar.gz")).exists ( ))
+        {
+            exists [1] = true ;
+        }
+
+        // check for MM/HB/west0067.tar.gz
+        G = new File (RB, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".tar.gz")).exists ( ))
+        {
+            exists [2] = true ;
+        }
+
+        // check for matrices/HB/west0067.png
+        G = new File (iconDir, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".png")).exists ( ))
+        {
+            exists [3] = true ;
+        }
+
+        // update the matrix table (mat, MM, and RB columns)
+        for (int j = 0 ; j < 3 ; j++)
+        {
+            if (etable [j] != exists [j])
+            {
+                // only update the table if the existence status has changed
+                set_table_value (exists [j] ? "x" : "-", id, j+1) ;
+            }
+        }
+        return (exists) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get long from JTextField
+    //-------------------------------------------------------------------------
+
+    private long getLong (JTextField tfield, long Default)
+    {
+        String s = tfield.getText ( ) ;
+        long result = Default ;
+        if (s.length ( ) > 0)
+        {
+            try
+            {
+                result = Long.parseLong (s) ;
+            }
+            catch (Exception e)
+            {
+            }
+        }
+        return (result) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get double from JTextField
+    //-------------------------------------------------------------------------
+
+    private double getDouble (JTextField tfield, double Default)
+    {
+        String s = tfield.getText ( ) ;
+        double result = Default ;
+        if (s.length ( ) > 0)
+        {
+            try
+            {
+                result = Double.parseDouble (s) ;
+            }
+            catch (Exception e)
+            {
+            }
+        }
+        return (result) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // change to a wait cursor
+    //-------------------------------------------------------------------------
+
+    private void please_wait ( )
+    {
+        this.setCursor (Cursor.getPredefinedCursor (Cursor.WAIT_CURSOR)) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // change to a normal cursor
+    //-------------------------------------------------------------------------
+
+    private void the_long_wait_is_over ( )
+    {
+        this.setCursor (Cursor.getDefaultCursor ( )) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // make or clear a selection
+    //-------------------------------------------------------------------------
+
+    private void make_selection (boolean action)
+    {
+        // set selections according to controls
+        please_wait ( ) ;
+        fire_updates (false) ;
+
+        long minrow = getLong (minrow_Field, 0) ;
+        long maxrow = getLong (maxrow_Field, INF) ;
+
+        long mincol = getLong (mincol_Field, 0) ;
+        long maxcol = getLong (maxcol_Field, INF) ;
+
+        long minnz = getLong (minnz_Field, 0) ;
+        long maxnz = getLong (maxnz_Field, INF) ;
+
+        double minpsym = getDouble (minpsym_Field, 0) ;
+        double maxpsym = getDouble (maxpsym_Field, 1.0) ;
+
+        double minnsym = getDouble (minnsym_Field, 0) ;
+        double maxnsym = getDouble (maxnsym_Field, 1.0) ;
+
+        boolean shape_square = shape_square_Button.isSelected ( ) ;
+        boolean shape_rect   = shape_rect_Button.isSelected ( ) ;
+        boolean shape_either = shape_either_Button.isSelected ( ) ;
+
+        boolean posdef_yes    = posdef_yes_Button.isSelected ( ) ;
+        boolean posdef_no     = posdef_no_Button.isSelected ( ) ;
+        boolean posdef_either = posdef_either_Button.isSelected ( ) ;
+
+        boolean nd_yes    = nd_yes_Button.isSelected ( ) ;
+        boolean nd_no     = nd_no_Button.isSelected ( ) ;
+        boolean nd_either = nd_either_Button.isSelected ( ) ;
+
+        boolean real_yes    = real_yes_Button.isSelected ( ) ;
+        boolean real_no     = real_no_Button.isSelected ( ) ;
+        boolean real_either = real_either_Button.isSelected ( ) ;
+
+        // create HashSet for the selected groups
+        Set<String> Gset = null ;
+        Object [ ] Gsel = Group_List.getSelectedValues ( ) ;
+        int ngroups = Gsel.length ;
+        if (ngroups > 0)
+        {
+            for (int i = 0 ; i < ngroups ; i++)
+            {
+                if (((String) Gsel [i]).equals (all_groups)) ngroups = 0 ;
+            }
+            Gset = new HashSet<String> ( ) ;
+            for (int i = 0 ; i < ngroups ; i++)
+            {
+                Gset.add ((String) Gsel [i]) ;
+            }
+        }
+
+        // create HashSet for the selected kinds
+        Set<String> Kset = null ;
+        Object [ ] Ksel = Kind_List.getSelectedValues ( ) ;
+        int nkinds = Ksel.length ;
+        if (nkinds > 0)
+        {
+            for (int i = 0 ; i < nkinds ; i++)
+            {
+                if (((String) Ksel [i]).equals (all_kinds)) nkinds = 0 ;
+            }
+            Kset = new HashSet<String> ( ) ;
+            for (int i = 0 ; i < nkinds ; i++)
+            {
+                Kset.add ((String) Ksel [i]) ;
+            }
+        }
+
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+
+            // look at the matrix properties to see if it fits the selection
+            long nrows = (Long) Stats [id-1][3] ;
+            long ncols = (Long) Stats [id-1][4] ;
+            long nnz   = (Long) Stats [id-1][5] ;
+
+            int isReal   = (Integer) Stats [id-1][6] ;
+            int isBinary = (Integer) Stats [id-1][7] ;
+            int isND     = (Integer) Stats [id-1][8] ;
+            int posdef   = (Integer) Stats [id-1][9] ;
+
+            double psym = (Double) Stats [id-1][10] ;
+            double nsym = (Double) Stats [id-1][11] ;
+
+            boolean choose_group = true ;
+            if (ngroups > 0)
+            {
+                String group = (String) Stats [id-1][1] ;
+                choose_group = Gset.contains (group) ;
+            }
+
+            boolean choose_kind = true ;
+            if (nkinds > 0)
+            {
+                String kind = SimplifyKind ((String) Stats [id-1][12]) ;
+                choose_kind = Kset.contains (kind) ;
+            }
+
+            if ((minrow <= nrows && nrows <= maxrow) &&
+                (mincol <= ncols && ncols <= maxcol) &&
+                (minnz <= nnz && nnz <= maxnz) &&
+                (minpsym <= psym && psym <= maxpsym) &&
+                (minnsym <= nsym && nsym <= maxnsym) &&
+                (posdef_either ||
+                    (posdef_yes && posdef == 1) ||
+                    (posdef_no && posdef == 0)) &&
+                (nd_either ||
+                    (nd_yes && isND == 1) ||
+                    (nd_no && isND == 0)) &&
+                (real_either ||
+                    (real_yes && isReal == 1) ||
+                    (real_no && isReal == 0)) &&
+                (shape_either ||
+                    (shape_square && nrows == ncols) ||
+                    (shape_rect && nrows != ncols)) &&
+                choose_group && choose_kind)
+            {
+                // change the selection box for this matrix id
+                set_table_value (action, id, 0) ;
+            }
+        }
+        fire_updates (true) ;
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // reset button
+    //-------------------------------------------------------------------------
+
+    private void reset_Button_action (ActionEvent e)
+    {
+        // reset the selection criteria to the defaults
+        minrow_Field.setText ("") ;
+        maxrow_Field.setText ("") ;
+
+        mincol_Field.setText ("") ;
+        maxcol_Field.setText ("") ;
+
+        minnz_Field.setText ("") ;
+        maxnz_Field.setText ("") ;
+
+        minpsym_Field.setText ("0.0") ;
+        maxpsym_Field.setText ("1.0") ;
+
+        minnsym_Field.setText ("0.0") ;
+        maxnsym_Field.setText ("1.0") ;
+
+        shape_either_Button.setSelected (true) ;
+        posdef_either_Button.setSelected (true) ;
+        nd_either_Button.setSelected (true) ;
+        real_either_Button.setSelected (true) ;
+
+        Group_List.clearSelection ( ) ;
+        Kind_List.clearSelection ( ) ;
+
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // clear button
+    //-------------------------------------------------------------------------
+
+    private void clear_Button_action (ActionEvent e)
+    {
+        // set selections according to controls
+        please_wait ( ) ;
+        fire_updates (false) ;
+
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            // clear the selection box for this matrix id
+            set_table_value (false, id, 0) ;
+        }
+        fire_updates (true) ;
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // select popup menu item
+    //-------------------------------------------------------------------------
+
+    private void popup_action (ActionEvent e, boolean action)
+    {
+        // select or deselect the highlight matrices
+        please_wait ( ) ;
+        int [ ] highlighted = get_highlighted_ids ( ) ;
+        int n = highlighted.length ;
+        for (int k = 0 ; k < n ; k++)
+        {
+            set_table_value (action, highlighted [k], 0) ;
+        }
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // export popup menu item
+    //-------------------------------------------------------------------------
+
+    private void export_list_action (ActionEvent e, boolean csv)
+    {
+        // export the list in the order of the current view
+        if (chooser.showSaveDialog (UFgui.this) == JFileChooser.APPROVE_OPTION)
+        {
+            please_wait ( ) ;
+            print_out = null ;
+            try
+            {
+                print_out = new PrintWriter (chooser.getSelectedFile ( )) ;
+                int [ ] ids = get_download_ids ( ) ;
+                int n = ids.length ;
+
+                // print the header
+                if (csv)
+                {
+                    print_out.println ("mat, MM, RB, id, Group, Name, rows, " +
+                        "cols, nonzeros, real, binary, 2D/3D, posdef, psym, " +
+                        "nsym, kind") ;
+                }
+                else
+                {
+                    print_out.println ("%% Matrices selected from UFgui:") ;
+                    print_out.println ("% Example usage:") ;
+                    print_out.println ("% for k = 1:length(ids)") ;
+                    print_out.println ("%    Problem = UFget (ids (k))") ;
+                    print_out.println ("% end") ;
+                    print_out.println ("ids = [")  ;
+                }
+
+                for (int k = 0 ; k < n ; k++)
+                {
+                    // get the matrix id and stats
+                    int id = ids [k] ;
+                    boolean [ ] exists = CheckExistence (id) ;
+                    String Group       = (String)  Stats [id-1][1] ;
+                    String Name        = (String)  Stats [id-1][2] ;
+                    long nrows         = (Long)    Stats [id-1][3] ;
+                    long ncols         = (Long)    Stats [id-1][4] ;
+                    long nnz           = (Long)    Stats [id-1][5] ;
+                    int isReal         = (Integer) Stats [id-1][6] ;
+                    int isBinary       = (Integer) Stats [id-1][7] ;
+                    int isND           = (Integer) Stats [id-1][8] ;
+                    int posdef         = (Integer) Stats [id-1][9] ;
+                    double psym        = (Double)  Stats [id-1][10] ;
+                    double nsym        = (Double)  Stats [id-1][11] ;
+                    String kind        = (String)  Stats [id-1][12] ;
+
+                    if (csv)
+                    {
+                        // print the matrix stats in a single CSV line of text
+                        print_out.println (
+                            exists [0] + ", " + exists [1] + ", " +
+                            exists [2] + ", " + id + ", " + Group + ", " +
+                            Name + ", " + nrows + ", " + ncols + ", " +
+                            nnz + ", " + isReal + ", " + isBinary + ", " +
+                            isND + ", " + posdef + ", " + psym + ", " +
+                            nsym + ", " + kind) ;
+                    }
+                    else
+                    {
+                        // print the matrix id, with a comment for the name
+                        print_out.println (id + " % " + Group + "/" + Name) ;
+                    }
+                }
+                if (!csv)
+                {
+                    print_out.println ("] ;")  ;
+                }
+            }
+            catch (Exception err)
+            {
+                // display warning dialog
+                JOptionPane.showMessageDialog (this, "Export failed.",
+                    "Warning", JOptionPane.WARNING_MESSAGE) ;
+            }
+            finally
+            {
+                close_printer_stream (print_out) ;
+            }
+            the_long_wait_is_over ( ) ;
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // help button
+    //-------------------------------------------------------------------------
+
+    private void help_Button_action (ActionEvent e)
+    {
+        // create the Help window
+        please_wait ( ) ;
+        JFrame help_Frame = new JFrame ("Help: UF Sparse Matrix Collection") ;
+
+        // open the HTML help file and put it in an editor pane
+        JEditorPane editorPane = new JEditorPane ( ) ;
+        editorPane.setEditable (false) ;
+        URL helpURL = UFgui.class.getResource ("UFhelp.html") ;
+        if (helpURL != null)
+        {
+            try
+            {
+                editorPane.setPage (helpURL) ;
+            }
+            catch (IOException error)
+            {
+                // display warning dialog
+                JOptionPane.showMessageDialog (this,
+                    "Sorry, Help document UFhelp.html not found.",
+                    "Warning", JOptionPane.WARNING_MESSAGE) ;
+            }
+        }
+
+        // Put the editor pane in a scroll pane.
+        JScrollPane editorScrollPane = new JScrollPane (editorPane) ;
+
+        // Add the scroll pane to the Help window
+        help_Frame.getContentPane ( ).add (editorScrollPane) ;
+        help_Frame.setSize (800,600) ;
+        help_Frame.setVisible (true) ;
+
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get the icon filename
+    //-------------------------------------------------------------------------
+
+    private String icon_file (String fullname)
+    {
+        return ("matrices/" + fullname + ".png") ;
+    }
+
+    //-------------------------------------------------------------------------
+    // update the icon
+    //-------------------------------------------------------------------------
+
+    private void update_icon (String fullname)
+    {
+        // fullname is of the form Group/Name (HB/west0479, for example)
+        icon_Label.setText (fullname) ;
+        ImageIcon icon = new ImageIcon (fix_name (icon_file (fullname))) ;
+        if (icon.getIconWidth ( ) < 0)
+        {
+            // icon image failed to load; get the image from the web
+            icon = new ImageIcon (get_url (UFsite +"/"+ icon_file (fullname))) ;
+        }
+        icon_Label.setIcon (icon) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // cancel button
+    //--------------------------------------------------------------------------
+
+    private void cancel_Button_action (ActionEvent e)
+    {
+        if (downloading && !cancel)
+        {
+            cancel = true ;
+            cancel_Button.setEnabled (false) ;
+            cancel_Button.setToolTipText ("canceling...") ;
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // get all icons
+    //-------------------------------------------------------------------------
+
+    private void get_all_icons ( )
+    {
+        // get all icons
+        start_download_thread (0) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // update button
+    //-------------------------------------------------------------------------
+
+//  private void update_Button_action (ActionEvent e)
+//  {
+//      // get the latest UFstats file
+//      start_download_thread (1) ;
+//  }
+
+    //-------------------------------------------------------------------------
+    // download button
+    //-------------------------------------------------------------------------
+
+    private void download_Button_action (ActionEvent e)
+    {
+        // get the selected matrices
+        start_download_thread (2) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // enable/disable update button
+    //-------------------------------------------------------------------------
+
+/*
+    private void update_Button_status (boolean enable)
+    {
+        if (new_matrices)
+        {
+            update_Button.setEnabled (false) ;
+            update_Button.setToolTipText
+                ("New matrices available (restart required).") ;
+        }
+        else if (enable)
+        {
+            update_Button.setEnabled (true) ;
+            update_Button.setToolTipText ("Click to update matrix table.") ;
+        }
+        else
+        {
+            update_Button.setEnabled (false) ;
+            update_Button.setToolTipText ("Update in progress.") ;
+        }
+    }
+*/
+
+    //-------------------------------------------------------------------------
+    // start the downloader thread
+    //-------------------------------------------------------------------------
+
+    private void start_download_thread (int what)
+    {
+        if (!downloading)
+        {
+            // only allow one active download at a time
+            downloading = true ;
+            cancel = false ;
+
+            if (gui_ready)
+            {
+                cancel_Button.setEnabled (true) ;
+                cancel_Button.setToolTipText
+                    ("Click to cancel the current download.") ;
+                // update_Button_status (false) ;
+            }
+
+            if (what == 0)
+            {
+                // get all the icons
+                // get_UFstats = false ;
+                get_icons = true ;
+                download_ids = null ;
+            }
+//          else if (what == 1)
+//          {
+//              // download the UFstats file and then get all the new icons
+//              get_UFstats = true ;
+//              get_icons = true ;
+//              download_ids = null ;
+//          }
+            else
+            {
+                // download one or more matrices
+                // get_UFstats = false ;
+                get_icons = false ;
+                download_ids = get_download_ids ( ) ;
+            }
+            set_selected_label (false) ;
+            // start the downloader thread
+            UFdownload tt = new UFdownload ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // downloader thread
+    //--------------------------------------------------------------------------
+
+    private class UFdownload implements Runnable
+    {
+
+        // constructor starts the downloader thread
+        public UFdownload ( )
+        {
+            Thread thread = new Thread (this) ;
+            thread.start ( ) ;
+        }
+
+        // thread.start calls the run method
+        public void run ( )
+        {
+
+//          if (get_UFstats)
+//          {
+//              // get the UFstats file
+//              Object [ ][ ] S2 = download_matrix_stats ( ) ;
+//              if (S2 != null && S2.length > Stats.length)
+//              {
+//                  // new matrices available
+//                  new_matrices = true ;
+//              }
+//          }
+
+            if (get_icons)
+            {
+                // get all missing icons
+                progress1_Bar.setValue (1) ;
+                progress1_Bar.setMaximum (Stats.length) ;
+                icon_Label.setBorder (BorderFactory.createTitledBorder
+                    ("checking for new matrix icons")) ;
+                for (int id = 1 ; !cancel && id <= Stats.length ; id++)
+                {
+                    boolean [ ] exists = CheckExistence (id) ;
+                    if (!exists [3])
+                    {
+                        icon_Label.setBorder (BorderFactory.createTitledBorder
+                            ("downloading new matrix icons")) ;
+                        String Group = (String) Stats [id-1][1] ;
+                        String Name  = (String) Stats [id-1][2] ;
+                        String fullname = Group + "/" + Name ;
+                        CheckDir ("matrices/" + Group) ;
+                        download_file (icon_file (fullname)) ;
+                        update_icon (fullname) ;
+                    }
+                    progress1_Bar.setValue (id+2) ;
+                }
+                progress1_Bar.setValue (Stats.length) ;
+                icon_Label.setBorder (BorderFactory.createTitledBorder
+                    ("matrix icon")) ;
+            }
+
+            if (download_ids != null && download_ids.length > 0)
+            {
+                // download all selected matrices in the requested formats
+
+                // determine which formats to download
+                int barmax = download_ids.length + 2 ;
+
+                boolean format_mat = format_mat_Button.isSelected ( ) ;
+                boolean format_mm  = format_mm_Button.isSelected ( ) ;
+                boolean format_rb  = format_rb_Button.isSelected ( ) ;
+
+                // start the overall progress bar
+                progress1_Bar.setValue (1) ;
+                progress1_Bar.setMaximum (barmax) ;
+
+                // download all the files
+                for (int k = 0 ; !cancel && k < download_ids.length ; k++)
+                {
+                    int id = download_ids [k] ;
+
+                    // get matrxx
+                    String Group = (String) Stats [id-1][1] ;
+                    String Name  = (String) Stats [id-1][2] ;
+                    String fullname = Group + "/" + Name ;
+
+                    // recheck to see if the matrix exists in the 4 formats
+                    boolean [ ] exists = CheckExistence (id) ;
+
+                    if (!exists [3])
+                    {
+                        // always download the matrix icon if it doesn't exist
+                        CheckDir ("matrices/" + Group) ;
+                        download_file (icon_file (fullname)) ;
+                        update_icon (fullname) ;
+                    }
+
+                    if (!exists [0] && format_mat)
+                    {
+                        // download the matrix in MATLAB format
+                        update_icon (fullname) ;
+                        CheckDir ("mat/" + Group) ;
+                        download_file ("mat/" + fullname + ".mat") ;
+                    }
+
+                    if (!exists [1] && format_mm)
+                    {
+                        // download the matrix in Matrix Market format
+                        update_icon (fullname) ;
+                        CheckDir ("MM/" + Group) ;
+                        download_file ("MM/" + fullname + ".tar.gz") ;
+                    }
+
+                    if (!exists [2] && format_rb)
+                    {
+                        // download the matrix in Rutherford/Boeing format
+                        update_icon (fullname) ;
+                        CheckDir ("RB/" + Group) ;
+                        download_file ("RB/" + fullname + ".tar.gz") ;
+                    }
+
+                    progress1_Bar.setValue (k+2) ;
+                }
+
+                // update the mat/MM/RB check boxes
+                for (int k = 0 ; k < download_ids.length ; k++)
+                {
+                    int id = download_ids [k] ;
+                    CheckExistence (id) ;
+                }
+
+                // finish the overall progress bar
+                progress1_Bar.setValue (barmax) ;
+            }
+
+            // update_Button_status (true) ;
+            cancel_Button.setEnabled (false) ;
+            cancel_Button.setToolTipText ("No downloads in progress.") ;
+
+            set_selected_label (true) ;
+            cancel = false ;
+            downloading = false ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // get a URL
+    //--------------------------------------------------------------------------
+
+    private URL get_url (String urlstring)
+    {
+        try
+        {
+            return (new URL (urlstring)) ;
+        }
+        catch (MalformedURLException e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this, "Invalid URL: "
+                + urlstring, "Warning", JOptionPane.WARNING_MESSAGE) ;
+            return (null) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // download a file
+    //--------------------------------------------------------------------------
+
+    private void download_file (String filename)
+    {
+        boolean ok = true ;
+        if (cancel) return ;
+        String urlstring = UFsite + "/" + filename ;
+        if (debug) System.out.println ("downloading: " + urlstring) ;
+
+        // create the URL
+        URL url = get_url (urlstring) ;
+        if (url == null) return ;
+
+        // download the file
+        url_in = null ;
+        ftemp_out = null ;
+        ftemp_name = filename + "_IN_PROGRESS" ;
+        int barmax = 1 ;
+
+        try
+        {
+            // determine the file size (fails for files > 2GB)
+            int len = url.openConnection ( ).getContentLength ( ) ;
+
+            // start the progress bar
+            if (gui_ready)
+            {
+                if (len < 0)
+                {
+                    progress2_Bar.setIndeterminate (true) ;
+                    progress_size_Label.setText ("") ;
+                }
+                else
+                {
+                    progress2_Bar.setValue (0) ;
+                    // display the filesize to the right of the progress bar
+                    if (len < M)
+                    {
+                        barmax = 1 + len / K ;
+                        progress_size_Label.setText (((len+K/2) / K) + " KB") ;
+                    }
+                    else
+                    {
+                        barmax = 1 + len / M ;
+                        progress_size_Label.setText (((len+M/2) / M) + " MB") ;
+                    }
+                }
+                progress2_Bar.setMaximum (barmax) ;
+            }
+
+            // open the source and destination files
+            url_in = new BufferedInputStream (url.openStream ( )) ;
+            ftemp_out = new BufferedOutputStream (new FileOutputStream
+                (fix_name (ftemp_name)), BUFSIZE) ;
+
+            // transfer the data
+            byte buffer [ ] = new byte [BUFSIZE] ;
+            long bytes_read = 0 ;
+            int count = 0 ;
+            while (!cancel && (count = url_in.read (buffer, 0, BUFSIZE)) >= 0)
+            {
+                if (ftemp_out != null) ftemp_out.write (buffer, 0, count) ;
+                bytes_read += count ;
+                if (gui_ready && len > 0)
+                {
+                    if (len < M)
+                    {
+                        progress2_Bar.setValue ((int) (bytes_read / K)) ;
+                    }
+                    else
+                    {
+                        progress2_Bar.setValue ((int) (bytes_read / M)) ;
+                    }
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this, "Download failed: "
+                + urlstring, "Warning", JOptionPane.WARNING_MESSAGE) ;
+            ok = false ;
+        }
+
+        if (gui_ready)
+        {
+            progress2_Bar.setIndeterminate (false) ;
+            progress2_Bar.setValue (barmax) ;
+            progress_size_Label.setText ("") ;
+        }
+
+        // wrap-up
+        if (ok && !cancel)
+        {
+            // success:  rename the temp file to the permanent filename
+            cleanup (false) ;
+            File fsrc = new File (fix_name (ftemp_name)) ;
+            File fdst = new File (fix_name (filename)) ;
+            fsrc.renameTo (fdst) ;
+        }
+        else
+        {
+            // cancelled, or something failed:  delete the files if they exist
+            cleanup (true) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // download the latest matrix stats
+    //--------------------------------------------------------------------------
+
+    private Object [ ][ ] download_matrix_stats ( )
+    {
+        download_file (UFindex) ;       // download mat/UF_Index.mat for UFget.m
+        download_file (UFstats) ;       // download matrices/UFstats.csv
+        return (load_UFstats ( )) ;     // load the UFstats.csv file
+    }
+
+    //--------------------------------------------------------------------------
+    // prepend the UF archive directory and replace '/' with the file separator
+    //--------------------------------------------------------------------------
+
+    private static String fix_name (String s)
+    {
+        // file separator is '/' on Unix/Solaris/Linux/Mac, and '\' on Windows
+        String r = UFarchive ;
+        if (s != null)
+        {
+            r = r + s ;
+        }
+        return (r.replace ('/', File.separatorChar)) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // close an output stream
+    //--------------------------------------------------------------------------
+
+    private static void close_output (OutputStream out)
+    {
+        try
+        {
+            if (out != null) out.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // close an input stream
+    //--------------------------------------------------------------------------
+
+    private static void close_reader (Reader in)
+    {
+        try
+        {
+            if (in != null) in.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // close a printer stream
+    //--------------------------------------------------------------------------
+
+    private static void close_printer_stream (PrintWriter out)
+    {
+        if (out != null) out.close ( ) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // delete a file
+    //--------------------------------------------------------------------------
+
+    private static void delete_file (String filename)
+    {
+        if (filename != null)
+        {
+            File ff = new File (fix_name (filename)) ;
+            if (ff.exists ( )) ff.delete ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // cleanup
+    //--------------------------------------------------------------------------
+
+    private static void cleanup (boolean delete)
+    {
+        // close input streams, if any
+        try
+        {
+            if (url_in != null) url_in.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+        url_in = null ;
+
+        // close temporary file
+        close_output (ftemp_out) ;
+        ftemp_out = null ; 
+
+        if (delete)
+        {
+            // delete temporary file
+            delete_file (ftemp_name) ;
+            ftemp_name = null ;
+        }
+
+        // close the printer stream, if any
+        close_printer_stream (print_out) ;
+        
+        // close the reader stream, if any
+        close_reader (in_reader) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // main method
+    //--------------------------------------------------------------------------
+
+    public static void main (String args [ ])
+    {
+        // register a shutdown hook
+        Runtime.getRuntime ( ).addShutdownHook
+        (
+            new Thread ( )
+            {
+                public void run ( )
+                {
+                    // delete any temporary files when the UFgui shuts down,
+                    // and close any files
+                    cleanup (true) ;
+                }
+            }
+        ) ;
+
+        // start the GUI in its own thread
+        EventQueue.invokeLater
+        (
+            new Runnable ( )
+            {
+                public void run ( )
+                {
+                    new UFgui ( ).setVisible (true) ;
+                }
+            }
+        ) ;
+    }
+}
diff --git a/CXSparse/MATLAB/UFget/UFhelp.html b/CXSparse/MATLAB/UFget/UFhelp.html
new file mode 100644
index 0000000..55618f1
--- /dev/null
+++ b/CXSparse/MATLAB/UFget/UFhelp.html
@@ -0,0 +1,545 @@
+<STYLE TYPE="text/css">
+<!--
+BODY
+   {
+      font-family:sans-serif;
+      font-size:16;
+    }
+-->
+</STYLE>
+
+<html>
+<body>
+<font family="sans-serif">
+<h1>The University of Florida Sparse Matrix Collection</h1>
+
+Tim Davis, http://www.suitesparse.com
+
+<h2>1. Overview</h2>
+
+UFgui is a Java GUI interface to the University of Florida Sparse Matrix
+Collection at http://www.cise.ufl.edu/research/sparse/matrices.  It provides an
+easy way to select matrices from the collection based on their matrix
+properties.  As of October 2010, there were 2328 matrices ranging in size
+from 1-by-2 (with a single nonzero entry) to a square matrix with nearly 28
+million rows and 760 million entries.  The total size of the collection in all
+three formats exceeds 47 GB, and is constantly growing in size.
+
+<h2>2. Quick Start</h2>
+
+First, download the UFget archive (tar.gz or zip file), and uncompress it.
+Open the UFget folder.
+
+<p>
+If your web browswer requires an HTTP proxy, or if you wish to change
+the download location, first see the <b>Customization</b> section below,
+to configure UFgui before you run it.
+
+<p>
+To run UFgui, double-click its icon or type the following command in your
+command window / terminal:
+
+<pre>
+        java -jar UFgui.jar
+</pre>
+
+If the above command fails, then you need to install Java.
+See <a href=http://www.java.com/en/download/manual.jsp>
+http://www.java.com/en/download/manual.jsp</a> for details.
+
+<p>
+You can skip reading this document by simply navigating the GUI itself.  Most
+of the buttons, check boxes, lists, and table columns have a short "tool tip"
+which is visible if you hover your mouse over the item.
+
+<p> When the UFgui starts, it checks for any missing matrix icons and
+downloads a new table if needed.  This might take a few minutes, so
+just sit back and enjoy the slideshow.  It will only happen occassionaly.
+
+<h2>3. A Sparse Matrix Problem</h2>
+
+The UF Sparse Matrix Collection is a simplified name.  It is actually a
+collection
+of sparse matrix <i>problems</i>, not just sparse matrices.  Each problem
+includes one primary sparse matrix and meta-data about that matrix.  Some
+problems include additional matrices and vectors (sparse or dense) such as
+right-hand-sides to a linear system <i>Ax=b</i>, or cost constraints for a
+linear programming problem.  As a short-hand, a "problem" in the collection is
+often called simply a "matrix", refering to the primary sparse matrix in the
+problem (<i>A</i>, below).
+
+<p>
+The following data is always present in any sparse matrix problem
+(not all fields are shown in the table in the UFgui program, however):
+
+    <ul>
+    <li> <b>name</b>: the full name of the problem, in the form
+        <i>Group/Name</i>, where <i>Group</i> indicates the source of the
+        problem (a person, organization, or other collection), and <i>Name</i>
+        is the name of the problem within that <i>Group</i>.  As of September
+        2009, there were 153 matrix Groups.
+
+    <li> <b>title</b>: a short descriptive title.
+
+    <li> <b>A</b>: the primary sparse matrix itself.
+        It is the properties of this matrix that determine
+        the selection criteria.
+
+    <li> <b>id</b>: a unique serial number ranging from 1 to the number of
+        matrices in the collection.  As new matrices are added to the
+        collection they are given higher id's, so new matrices are always
+        at the end of the table when sorted by id.
+
+    <li> <b>date</b>: the date the matrix was created, or the date it was
+        added to the UF Sparse Matrix Collection if the creation date is not
+        known.
+
+    <li> <b>author</b>: the person or persons who created the matrix.
+
+    <li> <b>ed</b>: the person or persons to acquired the matrix from the
+        author and placed it in a widely accessible collection (this
+        one or others such as the Rutherford/Boeing collection or
+        the Matrix Market collection).
+
+    <li> <b>kind</b>: the domain of the problem, such as "circuit simulation",
+        "chemical process simulation", "finite-element problem", and so on.
+        As of September 2009, there were 36 different matrix kinds.
+
+    </ul>
+
+The following data is present in some problems but not all:
+
+    <ul>
+    <li> <b>Zeros</b>: a binary matrix holding the pattern of 
+        entries explicitly provided by the matrix author which are equal to
+        zero.  These may represent entries that may become nonzero later on in
+        a simulation, but they are equal to zero in this instance of the
+        matrix.  Since they were provided by the matrix author(s), they are
+        preserved in this collection.  In the MATLAB format, this matrix is
+        held as a different sparse matrix, since MATLAB removes explicit zeros
+        from its sparse matrices.  In the Matrix Market and Rutherford/Boeing
+        collection, these entries are included in the primary sparse matrix
+        itself, as explicitly zero entries.
+
+    <li> <b>b</b>: the right-hand-side to a linear system or least-squares
+        problem.  This can be a vector or matrix, real or complex, and
+        sparse or dense.
+
+    <li> <b>x</b>: the solution to a linear system or least-squares problem.
+
+    <li> <b>notes</b>: text, with a discussion about the problem, in no
+        particular format.
+
+    <li> <b>aux</b>: Any number of matrices, vectors, or text.  For example, an
+        optimization problem may include a cost vector <i>c</i>, and vectors
+        that specify upper/lower bounds on the solution.  Details of how to
+        interpret this auxiliary data are normally given in the <i>notes</i>
+        field.  In the MATLAB format this is a struct containing each of the
+        items.  In the Matrix Market and Rutherford/Boeing formats, this data
+        resides alongsize the primary matrix in a single compressed folder.
+
+    </ul>
+
+<h2>4. Matrix Formats</h2>
+
+Each matrix in the collection appears in three different formats.  The data
+within each format is identical, down to the very last bit (if you find a
+discrepency between the same problem in different formats, please let me know).
+
+<ul>
+<li> <b>MATLAB™ *.mat file</b>.  This can be loaded into MATLAB directly,
+    or it can be accessed via the UFget.m MATLAB interface to the collection.
+    Type <i>help UFget</i> in MATLAB for more details.  The name of the MATLAB
+    file is of the form mat/Group/Name.mat (such as mat/HB/west0067.mat for the
+    west0067 matrix from the HB, or Harwell/Boeing, group).
+
+<li> <b>Matrix Market *.mtx file</b> and associated files.  Short meta-data
+    (name, title, id, date, author, ed, kind, and notes) is given as structured
+    comments in the primary *.mtx file.  This file and any associated files (b,
+    x, and any aux matrices) are in a single folder which is then archived into
+    a *.tar.gz file.  Windows users will need a 3rd-party program for handling
+    *.tar.gz files.  For example, the Matrix Market format for the HB/west0067
+    matrix is held in the MM/HB/west0067.tar.gz file. See
+    http://math.nist.gov/MatrixMarket/index.html for more information about the
+    Matrix Market format.
+
+<li> <b>Rutherford/Boeing *.rb file</b> and associated files.  Short meta-data
+    (name, title, id, date, author, ed, kind, and notes) is given as structured
+    comments in a separate text file.  The matrix file, the informational text
+    file, and any associated files (b, x, and any aux matrices) are in a single
+    folder which is then archived into a *.tar.gz file.  For example, the
+    Rutherford/Boeing format for the HB/west0067 file is held in the
+    RB/HB/west0067.tar.gz file.  See http://www.cse.scitech.ac.uk/nag/hb/ for
+    more information about the Rutherford/Boeing format.
+
+</ul>
+
+<h2>5. Selecting Matrices</h2>
+
+In the UFgui you are presented with four primary panels.
+
+<p> <b>Selection Criteria panel</b>:
+
+This is used for rule-based selections of matrix subsets.  A matrix must
+satisfy all properties in this panel to be selected.  With the default settings
+(available when the UFgui starts or after clicking <i>Reset criteria</i>) all
+matrices fit the criteria.  However, no matrix is selected until you press the
+<i>Select</i> button or select them individually in the table by clicking the
+checkbox in the <i>select</i> column.
+
+<p> The selection criteria are based on the matrices properties described in
+the matrix table (described below).  To select matrices from one or more groups
+and/or "kinds," click on the choices in the "group" and/or "kind" lists.
+Shift-click the list to select a range of groups or kinds, and control-click
+the list to add a single item to your highlighted choices.  To clear your
+choices, click the <i>Reset criteria</i> button, described below.
+
+<p> When you select/deselect matrices, the boxes to the left of each matrix in
+the Table of Matrices get checked/unchecked.  You still see all the matrices
+in the list, because you can then modify your selection by checking/unchecking
+matrices one at a time in the Table itself.
+
+<p>
+At the bottom of the Selection Criteria panel is a row of buttons:
+
+    <ul>
+    <li> <b>Select</b>: Click this to add matrices to your selection
+        that fit the criteria.  No matrix is removed from any prior selection.
+        For example, to select all square matrices with fewer than 1000 rows,
+        plus all complex matrices, do the following.  First enter 1000 in the
+        top-right text field, click the <i>square</i> radio button, and then
+        click <i>Select</i>.  Then click <i>Reset criteria</i>.  Next, click
+        <i>complex</i> and then <i>Select</i>.
+
+    <li> <b>Deselect</b>: Click this to remove matrices from your selection
+        that fit the criteria.  In general, if you want matrices that meet some
+        criteria (a) but not (b), then set the controls for (a) and click
+        <i>Select</i>.  Next, click <i>Reset criteria</i>, set the criteria
+        (b), and click <i>Deselect</i>.  For example, to select all square
+        matrices with fewer than 1000 rows that are not complex, you could just
+        do this with a single click of <i>Select</i> (click <i>square</i>,
+        <i>real</i>, and enter 1000 in the top-right text field, then click
+        <i>Select</i>).  Alternatively, you could click <i>square</i> and enter
+        1000 as the upper bound on the number of rows and click <i>Select</i>
+        then <i>Reset criteria</i>, select <i>complex</i>, and click
+        <i>Deselect</i>.
+
+    <li> <b>Reset criteria</b>:  This has no effect on your selection.  It
+        simply resets the criteria to the default (all matrices).  Thus, to
+        select all matrices, click <i>Reset criteria</i> and then
+        <i>Select</i>.  To deselect all matrices, click <i>Reset criteria</i>
+        and then <i>Deselect</i>.
+
+    <li> <b>Clear selections</b>:  This has no effect on your selection
+        criteria.  It simply clears all selections, deselecting all matrices by
+        unchecking the <i>select</i> column in the table.  This is useful if
+        you have a complex selection criteria and don't want to lose it by
+        clicking <i>Reset criteria</i>, but you wish to clear all your
+        selections anyway.
+
+    <li> <b>Help</b>: this button brings up the text you're reading.
+
+    </ul>
+
+<p> <b>Matrix icon panel</b>:
+
+To the right of the Selection Criteria panel is an icon of the most recent
+matrix highlighted, downloaded, or in the process of being downloaded.
+
+<p> <b>Table of matrices</b>:
+
+This is a list of all the matrices in the collection.  You can click on any
+column header to sort the table by that column.  Clicking a row (to the right
+of the select column) will highlight that row.  You can highlight a range of
+rows by shift-clicking another row.  Control-click will add individual rows.
+Next, right-clicking in the table will pull up a pop-up menu allowing you to
+select or deselect the highlighted matrices and to export your selection to a
+file.  You can export a list of your selected matrices to a comma-separarted
+file (*.csv) or to a MATLAB (*.m) file.  When you highlight a matrix, its icon
+is displayed.
+
+<p> The table contains the following columns (you can also hover your mouse
+over each column header for a short description):
+
+        <ul>
+        <li><b>select</b>: whether or not you have selected the matrix. 
+            You can click on the check boxes in this column to modify your
+            selection on a matrix-by-matrix basis.  This is the only column in
+            the table that you can edit.
+
+        <li><b>mat</b>: this box is checked if you have downloaded the matrix
+            in its MATLAB format.  The location of the HB/west0067.mat file
+            will be UFget/mat/HB/west0067.mat, for example.
+
+        <li><b>MM</b>: this is checked if you have already downloaded
+            the matrix in its Matrix Market format.
+
+        <li><b>RB</b>: this is checked if you have already downloaded
+            the matrix in its Rutherford/Boeing format.
+
+        <li><b>id</b>: the matrix id, in the range 1 to the number of
+            matrices in the collection.  When the UFgui starts,
+            the table is sorted in this order.
+
+        <li><b>Group</b>: the group the matrix belongs to.
+
+        <li><b>Name</b>: the (short) name of the matrix.  The full name of
+            a matrix is Group/Name.
+
+        <li><b># rows</b>: the number of rows of the matrix.
+
+        <li><b># cols</b>: the number of columns of the matrix.
+
+        <li><b># nonzeros</b>: the number of nonzeros in the matrix.
+
+        <li><b>real</b>: this box is checked if the matrix is real.
+            It is complex otherwise.
+            Note that <i>real</i> matrices include any matrix that is not
+            complex.  In particular, integer and binary matrices are
+            considered <i>real</i> in this search criterion.
+
+        <li><b>binary</b>: this box is checked if the matrix is binary.
+            It is non-binary otherwise (there are no binary complex matrices,
+            so any matrix that is binary is also marked as real).
+
+        <li><b>2D/3D</b>: this box is checked if the matrix comes
+            from a discretization of a 2D or 3D geometry.
+
+        <li> <b>posdef</b>: this box is checked if the matrix is
+            symmetric and positive definite.
+
+        <li><b>psym</b>: the symmetry of the nonzero pattern of the
+            matrix A (including the binary <i>Zeros</i> matrix as well).  Let
+            <i>S = pattern(pattern(A)+Zeros)</i> where <i>pattern(A)</i> is a
+            binary matrix with entries equal to 1 where <i>A(i,j)</i> is
+            nonzero, and zero elsewhere.  The <i>psym</i> metric is zero if the
+            pattern of <i>S</i> is completely unsymmetric, and 1.0 if the
+            pattern is exactly symmetric.  Let <i>pmatched</i> be the number of
+            off-diagonal entries <i>S(i,j)</i> for which <i>S(i,j)=S(j,i)</i>
+            and let <i>pnzoffdiag</i> be the total number off-diagonal entries
+            in <i>S</i>.  Then <i>psym</i> is the ratio
+            <i>pmatched/pnzoffdiag</i>.
+
+        <li><b>nsym</b>:  the symmetry of the numerical values of the
+            matrix.  This property ignores the <i>Zeros</i> matrix.  It is
+            equal to 0 for a perfectly unsymmetric matrix, and 1.0 for a
+            symmetric matrix.  Let <i>matched</i> be the number of nonzero
+            off-diagonal entries <i>A(i,j)</i> for which <i>A(i,j)=A(j,i)</i>
+            and let <i>nzoffdiag</i> be the total number off-diagonal nonzero
+            entries in <i>A</i>.  Then <i>psym</i> is the ratio
+            <i>matched/nzoffdiag</i>.
+
+        <li><b>kind</b>: the problem domain.  Note that this is typically
+            related to the problem group, since many matrix authors submit
+            matrices to the collection that arise from a single problem domain.
+            Some group have problems from many domains, however.
+
+        </ul>
+
+<p> <b>Download panel</b>:
+
+This panel controls the downloading of matrices, with
+three check boxes, three buttons, and informational items:
+
+    <ul>
+
+    <li> <b>Download</b>: click this to begin the download of the
+        selected matrices.  Matrices that are already downloaded are skipped
+        (thus, if one of your matrix files happens to get corrupted, simply
+        remove the file and restart the UFgui).  Matrices are downloaded into
+        the <i>mat</i>, <i>MM</i>, and <i>RB</i> folders inside the UFget
+        folder, in the same order as they appear in the table view.  For
+        example, if you click on the <i># nonzeros</i> column heading prior to
+        clicking <i>Download</i>, your selected matrices will be downloaded in
+        order of increasing number of nonzero entries.  If you hover your mouse
+        over the download button, a tool tip will tell you what it will do.
+
+    <li><b>MATLAB (mat)</b> format: click this to download the selected
+        matrices in MATLAB *.mat format.
+
+    <li><b>Matrix Market (MM)</b> format: click this to download the selected
+        matrices in Matrix Market format.
+
+    <li> <b>Rutherford/Boeing (RB)</b> format: click this to download the
+        selected matrices in Rutherford/Boeing format.
+
+    <li> <b>Matrices selected:</b> gives a running total of the number of
+        matrices selected in the table.
+
+    <li> <b>Cancel</b>: click to cancel the current download, deleting the
+        matrix currently being downloaded.  Matrices already fully downloaded
+        are never deleted by the UFgui program.
+
+    <li> <b>Overall progress</b>:  this progress bar advances after each
+        matrix is downloaded.
+
+    <li> <b>Current file</b>:  this progress bar advances as the current
+        matrix is downloaded.  The icon and name of the matrix currently
+        being downloaded is shown in the icon panel.
+
+    </ul>
+</ul>
+
+<p> The contents of the <i>mat</i>, <i>matrices</i>, <i>MM</i>, and <i>RB</i>
+    folders ("directories" for Unix users), and the UFstats.txt file itself,
+    maybe be deleted at will when the program is not running.  They will be
+    recreated when the program restarts.  If you delete the <i>matrices</i>
+    directory, for example, matrix icons are redownloaded, which makes for a
+    fun slide show.  Sit back and watch.
+
+<h2>6. Customization</h2>
+
+The <i>UFsettings.txt</i> includes six lines of text, each with parameters
+that you can modify.  If this file is missing, or shorter than 6 lines
+long, then defaults are used.
+
+<ul>
+<li> The first line is the default folder containing the <i>mat</i>,
+    <i>matrices</i>, <i>MM</i>, and <i>RB</i> directories.  It is displayed
+    on the GUI just above the table of matrices.  The line is blank
+    by default.  If left blank, these four folders are to be found in the
+    current working directory.  You can modify this first line to refer to
+    another folder.  For example, if I were to create my own folder called
+    <i>MyMatrices</i> in my home directory, I would use
+    <i>/home/davis/MyMatrices/</i> in Unix/Linux,
+    <i>/Users/davis/MyMatrices/</i> in Mac OS X, or <i>C:\Documents and
+    Settings\davis\My Documents\MyMatrices\</i> in Windows.  The trailing
+    file-separator is optional.  Both the slash (\) and backslash (/)
+    characters are interpretted as your system's file-separator ('\' for
+    Windows, '/' for everything else).
+
+<li> The second line is the root URL of the UF Sparse Matrix Collection,
+    http://www.cise.ufl.edu/research/sparse.  This only needs to change in the
+    event that the entire collection moves to a new URL.
+
+<li> The third line is the number of days after which a new list of matrices (in
+    <i>matrices/UFstats.csv</i> and <i>mat/UF_Index.mat</i>) should be
+    downloaded.  By default this is set to 30.  A value of <i>inf</i> means
+    that this <i>UFstats.csv</i> file is never downloaded automatically.  If
+    the <i>matrices/UFstats.csv</i> is missing or corrupted when UFgui starts,
+    it will download fresh copies of both files.  Thus, to force a refresh,
+    simply delete the <i>matrices/UFstats.csv</i> file and then start UFgui.
+    You may also download the files with the MATLAB command
+    <i>UFget('refresh')</i> prior to running UFgui.  The <i>UFsettings.txt</i>
+    is also used by the <i>UFget</i> MATLAB interface.
+
+<li> The fourth line gives the name of your HTTP proxy server, if you connect to
+    the internet via a proxy.  If left blank, no proxy is used.
+
+<li>The fifth line is the port number for your HTTP proxy.  If blank,
+    the default of 80 is used.
+
+<li>The sixth and final line controls debug diagnostics.  If this line is
+    "debug" (without the quotes), then diagnostics are printed on the standard
+    output (System.out).  You should also start the UFgui.jar via the
+    command line, otherwise the diagnostic output is not visible.
+
+</ul>
+
+<h2>7. Limitations and known issues</h2>
+
+<ul>
+
+<li> When a download is complete, the table order jitters slightly.  This is
+    because the <i>mat</i>, <i>MM</i>, and <i>RB</i> columns are updated. The
+    table sort order is temporarily modified, even if you have not currently
+    selected one of those columns to sort.  It then returns to the proper order
+    immediately.  This appears to be a limitation of the Java Swing library in
+    JDK 6.
+
+<li> When cancelling a download with the Cancel button, or terminating the
+    program normally (by clicking the [x] icon to close the UFgui window), any
+    partial file currently being downloaded is safely deleted.  These files
+    have the term _IN_PROGRESS appended to their name.  If the UFgui program
+    terminates abnormally and suddenly in the middle of a download, however, it
+    will leave behind files of this form.  You can safely delete any
+    *_IN_PROGRESS file when the UFgui program is not running.
+
+<li> Working through an HTTP proxy can be sluggish, and I have even seen
+    downloads stall completely.  I am currently investigating why this
+    occurs and how to work around a sluggish proxy.  If you are using a
+    proxy and the download stalls, try clicking <i>Cancel</i> and then
+    <i>Download</i>.  If that fails, terminate UFgui.  If you terminate it
+    abnormally (not by clicking the [x] in the window, but with "kill -9"
+    in Linux, or by forcing it to quit via your OS), you may need to
+    delete the *_IN_PROGRESS file.  Please let me know if this happens.
+
+</ul>
+
+<h2>8. Copyright and License</h2>
+
+Copyright (c) 2009-2012, Timothy A. Davis.  All rights reserved.
+
+<p> Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+<ul>
+    <li> Redistributions of source code must retain the above copyright 
+      notice, this list of conditions and the following disclaimer.
+    <li> Redistributions in binary form must reproduce the above copyright 
+      notice, this list of conditions and the following disclaimer in 
+      the documentation and/or other materials provided with the distribution
+    <li> Neither the name of the University of Florida nor the names 
+      of its contributors may be used to endorse or promote products derived 
+      from this software without specific prior written permission.
+</ul>
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+<h2>9. Version and Change-Log</h2>
+
+<ul>
+<li> Version 1.0.4, October 27, 2010.  Update to this help file only.
+
+<li> Version 1.0.3, October 9, 2009.  Removed the Update button which when
+    clicked would download a fresh copy of <i>matrices/UFstats.csv</i>.  UFgui
+    updates itself automatically every 30 days.  If you want to force a
+    refresh, just delete that file and restart UFgui.  Changed the appearence
+    of the mat, MM, RB columns. (from Iain Duff's comments). 
+
+<li> Version 1.0.2, October 8, 2009.  Added HTTP proxy option
+    (suggested by Iain Duff), and debug diagnostic option.
+
+<li> Version 1.0.1, October 7, 2009.  Added "Clear selections" button
+    (suggested by Xiangrui Meng).
+
+<li> UFgui Version 1.0, October 7, 2009, released.
+
+<li> When a new version of this software is available, simply move the
+    <i>mat</i>, <i>matrices</i>, <i>MM</i>, and <i>RB</i> folders from the old
+    <i>UFget</i> folder into the new one, to preserve the matrices you have
+    already downloaded.  Alternatively, you can edit the <i>UFsettings.txt</i>
+    file to reflect the folder containing your previous <i>mat</i>,
+    <i>matrices</i>, <i>MM</i>, and <i>RB</i> folders (see the
+    <b>Customization</b> section, above).
+
+</ul>
+
+<h2>10. For Further Help</h2>
+
+Contact the author of this UFgui program, and the maintainer of the UF Sparse
+Matrix Collection: Tim Davis
+(<a href=http://www.suitesparse.com>
+http://www.suitesparse.com</a>, email
+<a href=mailto:DrTimothyAldenDavis at gmail.com>DrTimothyAldenDavis at gmail.com</a>).
+To print this document,
+open the file <i>UFhelp.html</i> in your favorite web browser.
+
+<h2>11. Acknowledgements</h2>
+
+I would like to thank Iain Duff and Xiangrui Meng for their feedback,
+which has improved this package.  Designing a GUI is an art, and getting
+usability feedback from others is vital. 
+
+</font>
+</body>
+</html>
diff --git a/CXSparse/MATLAB/UFget/UFkinds.m b/CXSparse/MATLAB/UFget/UFkinds.m
new file mode 100644
index 0000000..6d87b77
--- /dev/null
+++ b/CXSparse/MATLAB/UFget/UFkinds.m
@@ -0,0 +1,71 @@
+function kinds = UFkinds
+%UFKINDS: get 'kind' of each problem in the UF collection.
+%
+% A problem 'kind' is the domain from which the problem arises.  Examples
+% include 'circuit simulation', 'optimization', 'least squares', and 'robotics'.
+% See UFget/README.txt for a complete list.
+%
+% A 'kind' is related to the matrix 'Group'.  The latter is determined by
+% person, persons, or organization that created the matrix.  'Group' may also
+% refer to another matrix collection that has been included in this collection
+% (such as 'HB' for the Harwell/Boeing collection).
+%
+% kinds = UFkinds returns a cell array with one row per matrix.  kinds{id}
+% is the same as Problem.kind where Problem=UFget(id).  If an error occurs,
+% an empty cell array is returned.
+%
+% Example:
+%
+%   kinds = UFkinds ;
+%   Problem = UFget (42)
+%   kinds{42}
+%
+% results in the following output:
+%
+%   Problem = 
+%        title: 'SYMMETRIC STIFFNESS MATRIX - FRAME WITHIN A SUSPENSION BRIDGE'
+%            A: [485x485 double]
+%         name: 'HB/bcsstk20'
+%           id: 42
+%         date: '1984'
+%       author: 'J. Lewis'
+%           ed: 'I. Duff, R. Grimes, J. Lewis'
+%         kind: 'structural problem'
+%
+%   ans =
+%       'structural problem'
+%
+% To find a list t of the id's all matrices from material science:
+%
+%   kinds = UFkinds ;
+%   t = zeros (1, length (kinds)) ;
+%   for id = 1:length(kinds)
+%       t (id) = ~isempty (strfind (kinds {id}, 'material')) ;
+%   end
+%   t = find (t) ;
+%   for id = t
+%       Problem = UFget (id)
+%   end
+%
+% See also UFget.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+params = UFget_defaults ;
+statfile = sprintf ('%smatrices/UFstats.csv', params.topdir) ;
+
+try
+    f = fopen (statfile, 'r') ;
+    nmat = str2double (fgetl (f)) ;     % number of matrices
+    s = fgetl (f) ;                     % date the UFstats.csv file was created
+    kinds = cell (nmat,1) ;
+    for id = 1:nmat
+        s = fgetl (f) ;
+        t = find (s == ',', 1, 'last') ;
+        r = s ((t+1):end) ;
+        kinds {id} = r ;
+    end
+catch
+    kinds = cell (0,0) ;                % return empty string on error
+end
+
diff --git a/CXSparse/MATLAB/UFget/UFsettings.txt b/CXSparse/MATLAB/UFget/UFsettings.txt
new file mode 100644
index 0000000..7103fa7
--- /dev/null
+++ b/CXSparse/MATLAB/UFget/UFsettings.txt
@@ -0,0 +1,6 @@
+
+http://www.cise.ufl.edu/research/sparse
+30
+
+
+no debug
diff --git a/CXSparse/MATLAB/UFget/UFsvd.m b/CXSparse/MATLAB/UFget/UFsvd.m
new file mode 100644
index 0000000..138097a
--- /dev/null
+++ b/CXSparse/MATLAB/UFget/UFsvd.m
@@ -0,0 +1,54 @@
+function S = UFsvd (matrix, UF_Index)
+%UFsvd singular values of a matrix in the UF collection.
+%
+% As of Nov 2012, only matrices for which min(size(A)) <= 30401
+% have their singular values computed.
+%
+% Examples:
+%   S = UFsvd ('HB/arc130')
+%   S = UFsvd (6)
+%   index = UFget
+%   S = UFsvd (6, index)
+%
+% S is a struct containing:
+%   s       the singular values (a column vector of size min(size(A)))
+%   how     a string
+
+if (nargin < 2)
+    % load the UF index
+    UF_Index = UFget ;
+end
+
+% look up the matrix in the UF index
+[group matrix id] = UFget_lookup (matrix, UF_Index) ;
+if (id == 0)
+    error ('invalid matrix') ;
+end
+
+% determine where the files go
+params = UFget_defaults ;
+svddir = sprintf ('%ssvd%s%s', params.topdir, filesep, group) ;
+svdfile = sprintf ('%s%s%s_SVD.mat', svddir, filesep, matrix) ;
+svdurl = sprintf ('%s/svd/%s/%s_SVD.mat', params.topurl, group, matrix) ;
+
+% make sure the mat/Group directory exists
+if (~exist (svddir, 'dir'))
+    mkdir (svddir) ;
+end
+
+% download the *_SVD.mat file, if not already downloaded
+if (~exist (svdfile, 'file'))
+    fprintf ('downloading %s\n', svdurl) ;
+    fprintf ('to %s\n', svdfile) ;
+    tmp = tempname ;                        % download to a temp file first
+    try
+        urlwrite (svdurl, tmp) ;
+    catch me                                %#ok
+        error ('SVD not yet computed for this matrix (or URL not found)') ;
+    end
+    movefile (tmp, svdfile, 'f') ;          % move the new matrix into place
+end
+
+% load the SVD
+load (svdfile) ;
+
diff --git a/CXSparse/MATLAB/UFget/UFweb.m b/CXSparse/MATLAB/UFget/UFweb.m
index d91ea8a..4b2a0c1 100644
--- a/CXSparse/MATLAB/UFget/UFweb.m
+++ b/CXSparse/MATLAB/UFget/UFweb.m
@@ -33,7 +33,7 @@ function stats = UFweb (matrix, opts)
 %
 %   See also web, UFget, UFget_defaults.
 
-%   Copyright 2007, Tim Davis, University of Florida.
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
 
 params = UFget_defaults ;
 UF_Index = UFget ;
@@ -58,9 +58,9 @@ end
 % open the web page for the matrix, group, or whole collection
 if (id == 0)
     if (isempty (group))
-	eval (['web ' url '/matrices/index.html ' opts])
+        eval (['web ' url '/matrices/index.html ' opts])
     else
-	eval (['web ' url '/matrices/' group '/index.html ' opts])
+        eval (['web ' url '/matrices/' group '/index.html ' opts])
     end
 else
     eval (['web ' url '/matrices/' group '/' name '.html ' opts])
@@ -71,65 +71,54 @@ if (nargout > 0)
 
     if (id == 0)
 
-	if (isempty (group))
+        if (isempty (group))
 
-	    % return stats about the whole collection
-	    stats.nmatrices = length (UF_Index.nrows) ;
-	    stats.LastRevisionDate = UF_Index.LastRevisionDate ;
-	    stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
+            % return stats about the whole collection
+            stats.nmatrices = length (UF_Index.nrows) ;
+            stats.LastRevisionDate = UF_Index.LastRevisionDate ;
+            stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
 
-	else
+        else
 
-	    % return stats about one matrix group
-	    nmat = length (UF_Index.nrows) ;
-	    ngroup = 0 ;
-	    for i = 1:nmat
-		if (strcmp (group, UF_Index.Group {i}))
-		    ngroup = ngroup + 1 ;
-		end
-	    end
-	    stats.nmatrices = ngroup ;
-	    stats.LastRevisionDate = UF_Index.LastRevisionDate ;
-	    stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
+            % return stats about one matrix group
+            nmat = length (UF_Index.nrows) ;
+            ngroup = 0 ;
+            for i = 1:nmat
+                if (strcmp (group, UF_Index.Group {i}))
+                    ngroup = ngroup + 1 ;
+                end
+            end
+            stats.nmatrices = ngroup ;
+            stats.LastRevisionDate = UF_Index.LastRevisionDate ;
+            stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
 
-	end
+        end
     else
 
-	% look up the matrix statistics
-	stats.Group = group ;
-	stats.Name = name ;
-	stats.nrows = UF_Index.nrows (id) ;
-	stats.ncols = UF_Index.ncols (id) ;
-	stats.nnz = UF_Index.nnz (id) ;
-	stats.nzero = UF_Index.nzero (id) ;
-	stats.pattern_symmetry = UF_Index.pattern_symmetry (id) ;
-	stats.numerical_symmetry = UF_Index.numerical_symmetry (id) ;
-	stats.isBinary = UF_Index.isBinary (id) ;
-	stats.isReal = UF_Index.isReal (id) ;
-
-	stats.nnzdiag = UF_Index.nnzdiag (id) ;
-	stats.posdef = UF_Index.posdef (id) ;
-
-	stats.amd_lnz = UF_Index.amd_lnz (id) ;
-	stats.amd_flops = UF_Index.amd_flops (id) ;
-	stats.amd_vnz = UF_Index.amd_vnz (id) ;
-	stats.amd_rnz = UF_Index.amd_rnz (id) ;
-	stats.metis_lnz = UF_Index.metis_lnz (id) ;
-	stats.metis_flops = UF_Index.metis_flops (id) ;
-	stats.metis_vnz = UF_Index.metis_vnz (id) ;
-	stats.metis_rnz = UF_Index.metis_rnz (id) ;
-	stats.nblocks = UF_Index.nblocks (id) ;
-	stats.sprank = UF_Index.sprank (id) ;
-	stats.nzoff = UF_Index.nzoff (id) ;
-	stats.dmperm_lnz = UF_Index.dmperm_lnz (id) ;
-	stats.dmperm_unz = UF_Index.dmperm_unz (id) ;
-	stats.dmperm_flops = UF_Index.dmperm_flops (id) ;
-	stats.dmperm_vnz = UF_Index.dmperm_vnz (id) ;
-	stats.dmperm_rnz = UF_Index.dmperm_rnz (id) ;
-
-	stats.RBtype = UF_Index.RBtype (id,:) ;
-	stats.cholcand = UF_Index.cholcand (id) ;
-	stats.ncc = UF_Index.ncc (id) ;
+        % look up the matrix statistics
+        stats.Group = group ;
+        stats.Name = name ;
+        stats.nrows = UF_Index.nrows (id) ;
+        stats.ncols = UF_Index.ncols (id) ;
+        stats.nnz = UF_Index.nnz (id) ;
+        stats.nzero = UF_Index.nzero (id) ;
+        stats.pattern_symmetry = UF_Index.pattern_symmetry (id) ;
+        stats.numerical_symmetry = UF_Index.numerical_symmetry (id) ;
+        stats.isBinary = UF_Index.isBinary (id) ;
+        stats.isReal = UF_Index.isReal (id) ;
+        stats.nnzdiag = UF_Index.nnzdiag (id) ;
+        stats.posdef = UF_Index.posdef (id) ;
+        stats.amd_lnz = UF_Index.amd_lnz (id) ;
+        stats.amd_flops = UF_Index.amd_flops (id) ;
+        stats.amd_vnz = UF_Index.amd_vnz (id) ;
+        stats.amd_rnz = UF_Index.amd_rnz (id) ;
+        stats.nblocks = UF_Index.nblocks (id) ;
+        stats.sprank = UF_Index.sprank (id) ;
+        stats.RBtype = UF_Index.RBtype (id,:) ;
+        stats.cholcand = UF_Index.cholcand (id) ;
+        stats.ncc = UF_Index.ncc (id) ;
+        stats.isND = UF_Index.isND (id) ;
+        stats.isGraph = UF_Index.isGraph (id) ;
 
     end
 end
diff --git a/CXSparse/MATLAB/UFget/mat/UF_Index.mat b/CXSparse/MATLAB/UFget/mat/UF_Index.mat
index d17778e..33213c8 100644
Binary files a/CXSparse/MATLAB/UFget/mat/UF_Index.mat and b/CXSparse/MATLAB/UFget/mat/UF_Index.mat differ
diff --git a/CXSparse/MATLAB/UFget/matrices/UFstats.csv b/CXSparse/MATLAB/UFget/matrices/UFstats.csv
new file mode 100644
index 0000000..6c42242
--- /dev/null
+++ b/CXSparse/MATLAB/UFget/matrices/UFstats.csv
@@ -0,0 +1,2652 @@
+2650
+03-Dec-2012 16:02:06
+HB,1138_bus,1138,1138,4054,1,0,0,1,1,1,power network problem
+HB,494_bus,494,494,1666,1,0,0,1,1,1,power network problem
+HB,662_bus,662,662,2474,1,0,0,1,1,1,power network problem
+HB,685_bus,685,685,3249,1,0,0,1,1,1,power network problem
+HB,abb313,313,176,1557,1,1,0,0,0,0,least squares problem
+HB,arc130,130,130,1037,1,0,1,0,0.7586805555555556,0,materials problem
+HB,ash219,219,85,438,1,1,0,0,0,0,least squares problem
+HB,ash292,292,292,2208,1,1,0,0,1,1,least squares problem
+HB,ash331,331,104,662,1,1,0,0,0,0,least squares problem
+HB,ash608,608,188,1216,1,1,0,0,0,0,least squares problem
+HB,ash85,85,85,523,1,1,0,0,1,1,least squares problem
+HB,ash958,958,292,1916,1,1,0,0,0,0,least squares problem
+HB,bcspwr01,39,39,131,1,1,0,0,1,1,power network problem
+HB,bcspwr02,49,49,167,1,1,0,0,1,1,power network problem
+HB,bcspwr03,118,118,476,1,1,0,0,1,1,power network problem
+HB,bcspwr04,274,274,1612,1,1,0,0,1,1,power network problem
+HB,bcspwr05,443,443,1623,1,1,0,0,1,1,power network problem
+HB,bcspwr06,1454,1454,5300,1,1,0,0,1,1,power network problem
+HB,bcspwr07,1612,1612,5824,1,1,0,0,1,1,power network problem
+HB,bcspwr08,1624,1624,6050,1,1,0,0,1,1,power network problem
+HB,bcspwr09,1723,1723,6511,1,1,0,0,1,1,power network problem
+HB,bcspwr10,5300,5300,21842,1,1,0,0,1,1,power network problem
+HB,bcsstk01,48,48,400,1,0,1,1,1,1,structural problem
+HB,bcsstk02,66,66,4356,1,0,1,1,1,1,structural problem
+HB,bcsstk03,112,112,640,1,0,1,1,1,1,structural problem
+HB,bcsstk04,132,132,3648,1,0,1,1,1,1,structural problem
+HB,bcsstk05,153,153,2423,1,0,1,1,1,1,structural problem
+HB,bcsstk06,420,420,7860,1,0,1,1,1,1,structural problem
+HB,bcsstk07,420,420,7860,1,0,1,1,1,1,duplicate structural problem
+HB,bcsstk08,1074,1074,12960,1,0,1,1,1,1,structural problem
+HB,bcsstk09,1083,1083,18437,1,0,1,1,1,1,structural problem
+HB,bcsstk10,1086,1086,22070,1,0,1,1,1,1,structural problem
+HB,bcsstk11,1473,1473,34241,1,0,1,1,1,1,structural problem
+HB,bcsstk12,1473,1473,34241,1,0,1,1,1,1,duplicate structural problem
+HB,bcsstk13,2003,2003,83883,1,0,1,1,1,1,computational fluid dynamics problem
+HB,bcsstk14,1806,1806,63454,1,0,1,1,1,1,structural problem
+HB,bcsstk15,3948,3948,117816,1,0,1,1,1,1,structural problem
+HB,bcsstk16,4884,4884,290378,1,0,1,1,1,1,structural problem
+HB,bcsstk17,10974,10974,428650,1,0,1,1,1,1,structural problem
+HB,bcsstk18,11948,11948,149090,1,0,1,1,1,1,structural problem
+HB,bcsstk19,817,817,6853,1,0,1,1,1,1,structural problem
+HB,bcsstk20,485,485,3135,1,0,1,1,1,1,structural problem
+HB,bcsstk21,3600,3600,26600,1,0,1,1,1,1,structural problem
+HB,bcsstk22,138,138,696,1,0,1,1,1,1,structural problem
+HB,bcsstk23,3134,3134,45178,1,0,1,1,1,1,structural problem
+HB,bcsstk24,3562,3562,159910,1,0,1,1,1,1,structural problem
+HB,bcsstk25,15439,15439,252241,1,0,1,1,1,1,structural problem
+HB,bcsstk26,1922,1922,30336,1,0,1,1,1,1,structural problem
+HB,bcsstk27,1224,1224,56126,1,0,1,1,1,1,structural problem
+HB,bcsstk28,4410,4410,219024,1,0,1,1,1,1,structural problem
+HB,bcsstk29,13992,13992,619488,1,1,1,0,1,1,structural problem
+HB,bcsstk30,28924,28924,2043492,1,1,1,0,1,1,structural problem
+HB,bcsstk31,35588,35588,1181416,1,1,1,0,1,1,structural problem
+HB,bcsstk32,44609,44609,2014701,1,1,1,0,1,1,structural problem
+HB,bcsstk33,8738,8738,591904,1,1,1,0,1,1,structural problem
+HB,bcsstm01,48,48,24,1,0,1,0,1,1,structural problem
+HB,bcsstm02,66,66,66,1,0,1,1,1,1,structural problem
+HB,bcsstm03,112,112,72,1,0,1,0,1,1,structural problem
+HB,bcsstm04,132,132,66,1,0,1,0,1,1,structural problem
+HB,bcsstm05,153,153,153,1,0,1,1,1,1,structural problem
+HB,bcsstm06,420,420,420,1,0,1,1,1,1,structural problem
+HB,bcsstm07,420,420,7252,1,0,1,1,1,1,structural problem
+HB,bcsstm08,1074,1074,1074,1,0,1,1,1,1,structural problem
+HB,bcsstm09,1083,1083,1083,1,0,1,1,1,1,structural problem
+HB,bcsstm10,1086,1086,22092,1,0,1,0,1,1,structural problem
+HB,bcsstm11,1473,1473,1473,1,0,1,1,1,1,structural problem
+HB,bcsstm12,1473,1473,19659,1,0,1,1,1,1,structural problem
+HB,bcsstm13,2003,2003,21181,1,0,1,0,1,1,computational fluid dynamics problem
+HB,bcsstm19,817,817,817,1,0,1,1,1,1,structural problem
+HB,bcsstm20,485,485,485,1,0,1,1,1,1,structural problem
+HB,bcsstm21,3600,3600,3600,1,0,1,1,1,1,structural problem
+HB,bcsstm22,138,138,138,1,0,1,1,1,1,structural problem
+HB,bcsstm23,3134,3134,3134,1,0,1,1,1,1,structural problem
+HB,bcsstm24,3562,3562,3562,1,0,1,1,1,1,structural problem
+HB,bcsstm25,15439,15439,15439,1,0,1,1,1,1,structural problem
+HB,bcsstm26,1922,1922,1922,1,0,1,1,1,1,structural problem
+HB,bcsstm27,1224,1224,56126,1,0,1,0,1,1,structural problem
+HB,beacxc,497,506,50409,1,0,0,0,0,0,economic problem
+HB,beaflw,497,507,53403,1,0,0,0,0,0,economic problem
+HB,beause,497,507,44551,1,0,0,0,0,0,economic problem
+HB,blckhole,2132,2132,14872,1,1,1,0,1,1,structural problem
+HB,bp_0,822,822,3276,1,0,0,0,0.009160305343511451,0.001221374045801527,optimization problem sequence
+HB,bp_1000,822,822,4661,1,0,0,0,0.009448142581060769,0.0004294610264118531,subsequent optimization problem
+HB,bp_1200,822,822,4726,1,0,0,0,0.009322033898305085,0.000423728813559322,subsequent optimization problem
+HB,bp_1400,822,822,4790,1,0,0,0,0.01044932079414838,0.0004179728317659352,subsequent optimization problem
+HB,bp_1600,822,822,4841,1,0,0,0,0.01075491209927611,0.0004136504653567735,subsequent optimization problem
+HB,bp_200,822,822,3802,1,0,0,0,0.00631578947368421,0,subsequent optimization problem
+HB,bp_400,822,822,4028,1,0,0,0,0.00546448087431694,0.0004967709885742673,subsequent optimization problem
+HB,bp_600,822,822,4172,1,0,0,0,0.006235011990407674,0.0004796163069544365,subsequent optimization problem
+HB,bp_800,822,822,4534,1,0,0,0,0.005298013245033113,0.0004415011037527594,subsequent optimization problem
+HB,can_1054,1054,1054,12196,1,1,1,0,1,1,structural problem
+HB,can_1072,1072,1072,12444,1,1,1,0,1,1,structural problem
+HB,can_144,144,144,1296,1,1,1,0,1,1,structural problem
+HB,can_161,161,161,1377,1,1,1,0,1,1,structural problem
+HB,can_187,187,187,1491,1,1,1,0,1,1,structural problem
+HB,can_229,229,229,1777,1,1,1,0,1,1,structural problem
+HB,can_24,24,24,160,1,1,1,0,1,1,structural problem
+HB,can_256,256,256,2916,1,1,1,0,1,1,structural problem
+HB,can_268,268,268,3082,1,1,1,0,1,1,structural problem
+HB,can_292,292,292,2540,1,1,1,0,1,1,structural problem
+HB,can_445,445,445,3809,1,1,1,0,1,1,structural problem
+HB,can_61,61,61,557,1,1,1,0,1,1,structural problem
+HB,can_62,62,62,218,1,1,1,0,1,1,structural problem
+HB,can_634,634,634,7228,1,1,1,0,1,1,structural problem
+HB,can_715,715,715,6665,1,1,1,0,1,1,structural problem
+HB,can_73,73,73,377,1,1,1,0,1,1,structural problem
+HB,can_838,838,838,10010,1,1,1,0,1,1,structural problem
+HB,can_96,96,96,768,1,1,1,0,1,1,structural problem
+HB,curtis54,54,54,291,1,1,1,0,0.9535864978902954,0.9535864978902954,2D/3D problem
+HB,dwt_1005,1005,1005,8621,1,1,1,0,1,1,structural problem
+HB,dwt_1007,1007,1007,8575,1,1,1,0,1,1,structural problem
+HB,dwt_1242,1242,1242,10426,1,1,1,0,1,1,structural problem
+HB,dwt_162,162,162,1182,1,1,1,0,1,1,structural problem
+HB,dwt_193,193,193,3493,1,1,1,0,1,1,structural problem
+HB,dwt_198,198,198,1392,1,1,1,0,1,1,structural problem
+HB,dwt_209,209,209,1743,1,1,1,0,1,1,structural problem
+HB,dwt_221,221,221,1629,1,1,1,0,1,1,structural problem
+HB,dwt_234,234,234,834,1,1,1,0,1,1,structural problem
+HB,dwt_245,245,245,1461,1,1,1,0,1,1,structural problem
+HB,dwt_2680,2680,2680,25026,1,1,1,0,1,1,structural problem
+HB,dwt_307,307,307,2523,1,1,1,0,1,1,structural problem
+HB,dwt_310,310,310,2448,1,1,1,0,1,1,structural problem
+HB,dwt_346,346,346,3226,1,1,1,0,1,1,structural problem
+HB,dwt_361,361,361,2953,1,1,1,0,1,1,structural problem
+HB,dwt_419,419,419,3563,1,1,1,0,1,1,structural problem
+HB,dwt_492,492,492,3156,1,1,1,0,1,1,structural problem
+HB,dwt_503,503,503,6027,1,1,1,0,1,1,structural problem
+HB,dwt_512,512,512,3502,1,1,1,0,1,1,structural problem
+HB,dwt_59,59,59,267,1,1,1,0,1,1,structural problem
+HB,dwt_592,592,592,5104,1,1,1,0,1,1,structural problem
+HB,dwt_607,607,607,5131,1,1,1,0,1,1,structural problem
+HB,dwt_66,66,66,320,1,1,1,0,1,1,structural problem
+HB,dwt_72,72,72,222,1,1,1,0,1,1,structural problem
+HB,dwt_758,758,758,5994,1,1,1,0,1,1,structural problem
+HB,dwt_869,869,869,7285,1,1,1,0,1,1,structural problem
+HB,dwt_87,87,87,541,1,1,1,0,1,1,structural problem
+HB,dwt_878,878,878,7448,1,1,1,0,1,1,structural problem
+HB,dwt_918,918,918,7384,1,1,1,0,1,1,structural problem
+HB,dwt_992,992,992,16744,1,1,1,0,1,1,structural problem
+HB,eris1176,1176,1176,18552,1,1,0,0,1,1,power network problem
+HB,fs_183_1,183,183,998,1,0,1,0,0.417607223476298,0,2D/3D problem sequence
+HB,fs_183_3,183,183,1069,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_183_4,183,183,1069,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_183_6,183,183,1000,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_541_1,541,541,4282,1,0,1,0,0.6826923076923077,0,2D/3D problem sequence
+HB,fs_541_2,541,541,4282,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_541_3,541,541,4282,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_541_4,541,541,4273,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_680_1,680,680,2184,1,0,1,0,0.5106815869786369,0,2D/3D problem sequence
+HB,fs_680_2,680,680,2424,1,0,1,0,0.5106815869786369,0,subsequent 2D/3D problem
+HB,fs_680_3,680,680,2471,1,0,1,0,0.5106815869786369,0,subsequent 2D/3D problem
+HB,fs_760_1,760,760,5739,1,0,1,0,0.6510736196319018,0,2D/3D problem sequence
+HB,fs_760_2,760,760,5739,1,0,1,0,0.6510736196319018,0,subsequent 2D/3D problem
+HB,fs_760_3,760,760,5816,1,0,1,0,0.6510736196319018,0,subsequent 2D/3D problem
+HB,gemat1,4929,10595,46591,1,0,0,0,0,0,power network problem
+HB,gemat11,4929,4929,33108,1,0,0,0,0.001326419872181358,0,power network problem sequence
+HB,gemat12,4929,4929,33044,1,0,0,0,0.001450063440275512,0,subsequent power network problem
+HB,gent113,113,113,655,1,1,0,0,0.05663716814159292,0.05663716814159292,statistical/mathematical problem
+HB,gr_30_30,900,900,7744,1,0,1,1,1,1,2D/3D problem
+HB,gre_1107,1107,1107,5664,1,0,0,0,0,0,directed weighted graph
+HB,gre_115,115,115,421,1,0,0,0,0.2549019607843137,0,directed weighted graph
+HB,gre_185,185,185,975,1,0,0,0,0.4146341463414634,0,directed weighted graph
+HB,gre_216a,216,216,812,1,0,0,0,0,0,directed weighted graph
+HB,gre_216b,216,216,812,1,0,0,0,0,0,directed weighted graph
+HB,gre_343,343,343,1310,1,0,0,0,0,0,directed weighted graph
+HB,gre_512,512,512,1976,1,0,0,0,0,0,directed weighted graph
+HB,hor_131,434,434,4182,1,0,0,0,1,0.3740661686232657,directed weighted graph
+HB,ibm32,32,32,126,1,1,0,0,0.0851063829787234,0.0851063829787234,directed graph
+HB,illc1033,1033,320,4719,1,0,0,0,0,0,least squares problem
+HB,illc1850,1850,712,8636,1,0,0,0,0,0,least squares problem
+HB,impcol_a,207,207,572,1,0,0,0,0.02482269503546099,0.01063829787234043,chemical process simulation problem
+HB,impcol_b,59,59,271,1,0,0,0,0.09491525423728814,0,chemical process simulation problem
+HB,impcol_c,137,137,400,1,0,0,0,0.04444444444444445,0.01146131805157593,chemical process simulation problem
+HB,impcol_d,425,425,1255,1,0,0,0,0.05674846625766871,0.0228198859005705,chemical process simulation problem
+HB,impcol_e,225,225,1303,1,0,0,0,0.1038338658146965,0.001603849238171612,chemical process simulation problem
+HB,jagmesh1,936,936,6264,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh2,1009,1009,6865,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh3,1089,1089,7361,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh4,1440,1440,9504,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh5,1180,1180,7750,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh6,1377,1377,8993,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh7,1138,1138,7450,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh8,1141,1141,7465,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh9,1349,1349,9101,1,1,1,0,1,1,2D/3D problem
+HB,jgl009,9,9,50,1,1,0,0,0.4761904761904762,0.4761904761904762,counter-example problem
+HB,jgl011,11,11,76,1,1,0,0,0.5151515151515151,0.5151515151515151,counter-example problem
+HB,jpwh_991,991,991,6027,1,0,1,0,0.9364575059571089,0.9364575059571089,semiconductor device problem
+HB,lns_131,131,131,536,1,0,1,0,0.7028301886792453,0.01886792452830189,computational fluid dynamics problem
+HB,lns_3937,3937,3937,25407,1,0,1,0,0.849666726715907,0.001351107908484958,computational fluid dynamics problem
+HB,lns_511,511,511,2796,1,0,1,0,0.7994945240101096,0.02021903959561921,computational fluid dynamics problem
+HB,lnsp3937,3937,3937,25407,1,0,1,0,0.849666726715907,0.001351107908484958,computational fluid dynamics problem
+HB,lnsp_131,131,131,536,1,0,1,0,0.7028301886792453,0.01886792452830189,computational fluid dynamics problem
+HB,lnsp_511,511,511,2796,1,0,1,0,0.7994945240101096,0.02021903959561921,computational fluid dynamics problem
+HB,lshp1009,1009,1009,6865,1,1,1,0,1,1,duplicate thermal problem
+HB,lshp1270,1270,1270,8668,1,1,1,0,1,1,thermal problem
+HB,lshp1561,1561,1561,10681,1,1,1,0,1,1,thermal problem
+HB,lshp1882,1882,1882,12904,1,1,1,0,1,1,thermal problem
+HB,lshp2233,2233,2233,15337,1,1,1,0,1,1,thermal problem
+HB,lshp2614,2614,2614,17980,1,1,1,0,1,1,thermal problem
+HB,lshp3025,3025,3025,20833,1,1,1,0,1,1,thermal problem
+HB,lshp3466,3466,3466,23896,1,1,1,0,1,1,thermal problem
+HB,lshp_265,265,265,1753,1,1,1,0,1,1,thermal problem
+HB,lshp_406,406,406,2716,1,1,1,0,1,1,thermal problem
+HB,lshp_577,577,577,3889,1,1,1,0,1,1,thermal problem
+HB,lshp_778,778,778,5272,1,1,1,0,1,1,thermal problem
+HB,lund_a,147,147,2449,1,0,1,1,1,1,structural problem
+HB,lund_b,147,147,2441,1,0,1,1,1,1,structural problem
+HB,mahindas,1258,1258,7682,1,0,0,0,0.01663146779303062,0,economic problem
+HB,mbeacxc,496,496,49920,1,0,0,0,0.3162614104531868,0,economic problem
+HB,mbeaflw,496,496,49920,1,0,0,0,0.3162614104531868,0,economic problem
+HB,mbeause,496,496,41063,1,0,0,0,0.2190689324447286,0.007771192484568281,economic problem
+HB,mcca,180,180,2659,1,0,1,0,0.6446147640177491,0,2D/3D problem
+HB,mcfe,765,765,24382,1,0,1,0,0.699411440911208,0,2D/3D problem
+HB,nnc1374,1374,1374,8588,1,0,1,0,0.8169596690796277,0.5918631769888573,2D/3D problem
+HB,nnc261,261,261,1500,1,0,1,0,0.8237037037037037,0.6133333333333333,2D/3D problem
+HB,nnc666,666,666,4032,1,0,1,0,0.817831590533847,0.5919381557150746,2D/3D problem
+HB,nos1,237,237,1017,1,0,1,1,1,1,structural problem
+HB,nos2,957,957,4137,1,0,1,1,1,1,structural problem
+HB,nos3,960,960,15844,1,0,1,1,1,1,structural problem
+HB,nos4,100,100,594,1,0,1,1,1,1,structural problem
+HB,nos5,468,468,5172,1,0,1,1,1,1,structural problem
+HB,nos6,675,675,3255,1,0,1,1,1,1,2D/3D problem
+HB,nos7,729,729,4617,1,0,1,1,1,1,2D/3D problem
+HB,orani678,2529,2529,90158,1,0,0,0,0.07068607068607069,2.223531635296341e-05,economic problem
+HB,orsirr_1,1030,1030,6858,1,0,1,0,1,0.4094028826355525,computational fluid dynamics problem
+HB,orsirr_2,886,886,5970,1,0,1,0,1,0.4118804091266719,computational fluid dynamics problem
+HB,orsreg_1,2205,2205,14133,1,0,1,0,1,0.4119718309859155,computational fluid dynamics problem
+HB,plat1919,1919,1919,32399,1,0,1,1,1,1,2D/3D problem
+HB,plat362,362,362,5786,1,0,1,1,1,1,2D/3D problem
+HB,plsk1919,1919,1919,9662,1,0,1,0,1,0,2D/3D problem
+HB,plskz362,362,362,1760,1,0,1,0,1,0,2D/3D problem
+HB,pores_1,30,30,180,1,0,1,0,0.6266666666666667,0.2933333333333333,computational fluid dynamics problem
+HB,pores_2,1224,1224,9613,1,0,1,0,0.6119918941470974,0.3914650137084277,computational fluid dynamics problem
+HB,pores_3,532,532,3474,1,0,1,0,0.7423521414004078,0.3052345343303875,computational fluid dynamics problem
+HB,psmigr_1,3140,3140,543160,1,0,0,0,0.4786508697793794,0.01044772250019444,economic problem
+HB,psmigr_2,3140,3140,540022,1,0,0,0,0.4786508697793794,0,economic problem
+HB,psmigr_3,3140,3140,543160,1,0,0,0,0.4786508697793794,0,economic problem
+HB,rgg010,10,10,76,1,1,0,0,0.6363636363636364,0.6363636363636364,counter-example problem
+HB,saylr1,238,238,1128,1,0,1,0,1,0.647191011235955,computational fluid dynamics problem
+HB,saylr3,1000,1000,3750,1,0,1,0,1,1,computational fluid dynamics problem
+HB,saylr4,3564,3564,22316,1,0,1,0,1,1,computational fluid dynamics problem
+HB,sherman1,1000,1000,3750,1,0,1,0,1,1,computational fluid dynamics problem
+HB,sherman2,1080,1080,23094,1,0,1,0,0.6708458253838466,0.004905968928863451,computational fluid dynamics problem
+HB,sherman3,5005,5005,20033,1,0,1,0,1,0.4532871972318339,computational fluid dynamics problem
+HB,sherman4,1104,1104,3786,1,0,1,0,1,0,computational fluid dynamics problem
+HB,sherman5,3312,3312,20793,1,0,1,0,0.7386305131285396,0.1534237171786511,computational fluid dynamics problem
+HB,shl_0,663,663,1687,1,0,0,0,0,0,optimization problem sequence
+HB,shl_200,663,663,1726,1,0,0,0,0,0,subsequent optimization problem
+HB,shl_400,663,663,1712,1,0,0,0,0,0,subsequent optimization problem
+HB,sstmodel,3345,3345,22749,1,1,1,0,1,1,structural problem
+HB,steam1,240,240,2248,1,0,1,0,1,0.2729083665338645,computational fluid dynamics problem
+HB,steam2,600,600,5660,1,0,1,0,1,0.1877470355731225,computational fluid dynamics problem
+HB,steam3,80,80,314,1,0,1,0,1,0.3247863247863248,computational fluid dynamics problem
+HB,str_0,363,363,2454,1,0,0,0,0.004893964110929853,0,optimization problem sequence
+HB,str_200,363,363,3068,1,0,0,0,0.01108936725375081,0,subsequent optimization problem
+HB,str_400,363,363,3157,1,0,0,0,0.0196513470681458,0,subsequent optimization problem
+HB,str_600,363,363,3279,1,0,0,0,0.01893129770992366,0,subsequent optimization problem
+HB,watt_1,1856,1856,11360,1,0,1,0,0.9865319865319865,0.9865319865319865,computational fluid dynamics problem
+HB,watt_2,1856,1856,11550,1,0,1,0,0.9804002475758201,0.9671962038374252,computational fluid dynamics problem
+HB,well1033,1033,320,4732,1,0,0,0,0,0,least squares problem
+HB,well1850,1850,712,8755,1,0,0,0,0,0,least squares problem
+HB,west0067,67,67,294,1,0,0,0,0.03424657534246575,0,chemical process simulation problem
+HB,west0132,132,132,413,1,0,0,0,0.0196078431372549,0.004914004914004914,chemical process simulation problem
+HB,west0156,156,156,362,1,0,0,0,0,0,chemical process simulation problem
+HB,west0167,167,167,506,1,0,0,0,0.01622718052738337,0,chemical process simulation problem
+HB,west0381,381,381,2134,1,0,0,0,0.005565862708719851,0.0009376465072667605,chemical process simulation problem
+HB,west0479,479,479,1888,1,0,0,0,0.01366982124079916,0,chemical process simulation problem
+HB,west0497,497,497,1721,1,0,0,0,0.006972690296339338,0,chemical process simulation problem
+HB,west0655,655,655,2808,1,0,0,0,0.005616005616005616,0,chemical process simulation problem
+HB,west0989,989,989,3518,1,0,0,0,0.01812004530011325,0.003985197836606889,chemical process simulation problem
+HB,west1505,1505,1505,5414,1,0,0,0,0.001102941176470588,0,chemical process simulation problem
+HB,west2021,2021,2021,7310,1,0,0,0,0.00326619488296135,0,chemical process simulation problem
+HB,will199,199,199,701,1,1,1,0,0.05596465390279824,0.05596465390279824,structural problem
+HB,will57,57,57,281,1,1,1,0,0.8660714285714286,0.8660714285714286,semiconductor device problem
+HB,wm1,207,277,2909,1,0,0,0,0,0,economic problem
+HB,wm2,207,260,2942,1,0,0,0,0,0,economic problem
+HB,wm3,207,260,2948,1,0,0,0,0,0,economic problem
+HB,young1c,841,841,4089,0,0,1,0,1,0.8479064039408867,acoustics problem
+HB,young2c,841,841,4089,0,0,1,0,1,0.8479064039408867,duplicate acoustics problem
+HB,young3c,841,841,3988,1,0,1,0,0.9380362249761678,0.8071178900540197,acoustics problem
+HB,young4c,841,841,4089,0,0,1,0,1,0.8004926108374384,acoustics problem
+HB,zenios,2873,2873,1314,1,0,0,0,1,1,optimization problem
+ATandT,onetone1,36057,36057,335552,1,0,0,0,0.0742956282869174,0.04331285111284008,frequency-domain circuit simulation problem
+ATandT,onetone2,36057,36057,222596,1,0,0,0,0.1128682425939654,0.06622764699821082,frequency-domain circuit simulation problem
+ATandT,pre2,659033,659033,5834044,1,0,0,0,0.3317760910564062,0.06536187196755584,frequency-domain circuit simulation problem
+ATandT,twotone,120750,120750,1206265,1,0,0,0,0.2445668624008717,0.1058542372000797,frequency-domain circuit simulation problem
+Averous,epb0,1794,1794,7764,1,0,1,0,0.5008375209380235,0,thermal problem
+Averous,epb1,14734,14734,95053,1,0,1,0,0.7293915511896314,0,thermal problem
+Averous,epb2,25228,25228,175027,1,0,1,0,0.6705385216189694,0,thermal problem
+Averous,epb3,84617,84617,463625,1,0,1,0,0.6674107142857143,0.03155606214116852,thermal problem
+Bai,af23560,23560,23560,460598,1,0,1,0,0.9973084203031934,0,computational fluid dynamics problem
+Bai,bfwa398,398,398,3678,1,0,1,0,0.9890243902439024,0.9432926829268292,electromagnetics problem
+Bai,bfwa62,62,62,450,1,0,1,0,0.9690721649484536,0.8144329896907216,electromagnetics problem
+Bai,bfwa782,782,782,7514,1,0,1,0,0.9916815210932858,0.9604872251931076,electromagnetics problem
+Bai,bfwb398,398,398,2910,1,0,1,0,1,1,electromagnetics problem
+Bai,bfwb62,62,62,342,1,0,1,0,1,1,electromagnetics problem
+Bai,bfwb782,782,782,5982,1,0,1,0,1,1,electromagnetics problem
+Bai,bwm200,200,200,796,1,0,0,0,1,0.6644295302013423,chemical process simulation problem
+Bai,bwm2000,2000,2000,7996,1,0,0,0,1,0.6664442961974649,chemical process simulation problem
+Bai,cdde1,961,961,4681,1,0,1,0,1,0,computational fluid dynamics problem sequence
+Bai,cdde2,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde3,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde4,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde5,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde6,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,ck104,104,104,992,1,0,1,0,1,0,2D/3D problem
+Bai,ck400,400,400,2860,1,0,1,0,0.9886178861788618,0.001626016260162602,2D/3D problem
+Bai,ck656,656,656,3884,1,0,1,0,0.9913258983890955,0,2D/3D problem
+Bai,dw1024,2048,2048,10114,1,0,1,0,0.9848747830399207,0.9481775353334987,electromagnetics problem
+Bai,dw256A,512,512,2480,1,0,1,0,0.9796747967479674,0.9146341463414634,electromagnetics problem
+Bai,dw256B,512,512,2500,1,0,1,0,0.9698189134808853,0.8832997987927566,electromagnetics problem
+Bai,dw4096,8192,8192,41746,1,0,1,0,0.9626274065685164,0.9154199201287477,electromagnetics problem
+Bai,lop163,163,163,935,1,0,0,0,0.4507772020725389,0,statistical/mathematical problem
+Bai,mhda416,416,416,8562,1,0,1,0,0.7675276752767528,0.2675871920009523,electromagnetics problem
+Bai,mhdb416,416,416,2312,1,0,1,1,1,1,electromagnetics problem
+Bai,odepa400,400,400,1201,1,0,1,0,0.9962546816479401,0.9937578027465668,2D/3D problem
+Bai,odepb400,400,400,399,1,0,1,0,1,1,2D/3D problem
+Bai,olm100,100,100,396,1,0,1,0,0.668918918918919,0.3310810810810811,computational fluid dynamics problem
+Bai,olm1000,1000,1000,3996,1,0,1,0,0.6668891855807744,0.3331108144192256,computational fluid dynamics problem
+Bai,olm2000,2000,2000,7996,1,0,1,0,0.6667778519012675,0.3332221480987325,computational fluid dynamics problem
+Bai,olm500,500,500,1996,1,0,1,0,0.6671122994652406,0.3328877005347594,computational fluid dynamics problem
+Bai,olm5000,5000,5000,19996,1,0,1,0,0.6667111229661243,0.3332888770338757,computational fluid dynamics problem
+Bai,pde225,225,225,1065,1,0,1,0,1,0.5,2D/3D problem
+Bai,pde2961,2961,2961,14585,1,0,1,0,1,0.5013764624913971,2D/3D problem
+Bai,pde900,900,900,4380,1,0,1,0,1,0.5,2D/3D problem
+Bai,qc2534,2534,2534,463360,0,0,1,0,1,0,electromagnetics problem
+Bai,qc324,324,324,26730,0,0,1,0,1,0,electromagnetics problem
+Bai,qh882,882,882,3354,1,0,0,0,0.9264705882352942,0,power network problem
+Bai,rbsa480,480,480,17088,1,0,1,0,0.07485627126598615,0.0007039774727208729,robotics problem
+Bai,rbsb480,480,480,17088,1,0,1,0,0.07568201818715166,0.0008213552361396304,robotics problem
+Bai,rdb2048,2048,2048,12032,1,0,1,0,1,0.7948717948717948,computational fluid dynamics problem
+Bai,rdb5000,5000,5000,29600,1,0,1,0,1,0.7967479674796748,computational fluid dynamics problem
+Bai,rdb968,968,968,5632,1,0,1,0,1,0.7924528301886793,computational fluid dynamics problem
+Bai,rw136,136,136,479,1,0,0,0,0.44258872651357,0.02922755741127349,statistical/mathematical problem
+Bai,rw496,496,496,1859,1,0,0,0,0.4690693921463152,0,statistical/mathematical problem
+Bai,rw5151,5151,5151,20199,1,0,0,0,0.4902222882320907,0,statistical/mathematical problem
+Bai,tub100,100,100,396,1,0,1,0,1,0,computational fluid dynamics problem
+Bai,tub1000,1000,1000,3996,1,0,1,0,1,0,computational fluid dynamics problem
+Boeing,bcsstk34,588,588,21418,1,0,1,1,1,1,structural problem
+Boeing,bcsstk35,30237,30237,1450163,1,0,1,0,1,1,structural problem
+Boeing,bcsstk36,23052,23052,1143140,1,0,1,1,1,1,structural problem
+Boeing,bcsstk37,25503,25503,1140977,1,0,1,0,1,1,structural problem
+Boeing,bcsstk38,8032,8032,355460,1,0,1,1,1,1,structural problem
+Boeing,bcsstm34,588,588,24270,1,0,1,0,1,1,structural problem
+Boeing,bcsstm35,30237,30237,20619,1,0,1,0,1,1,structural problem
+Boeing,bcsstm36,23052,23052,320606,1,0,1,0,1,1,structural problem
+Boeing,bcsstm37,25503,25503,15525,1,0,1,0,1,1,structural problem
+Boeing,bcsstm38,8032,8032,10485,1,0,1,0,1,1,structural problem
+Boeing,bcsstm39,46772,46772,46772,1,0,1,1,1,1,structural problem
+Boeing,crystk01,4875,4875,315891,1,0,1,0,1,1,materials problem
+Boeing,crystk02,13965,13965,968583,1,0,1,0,1,1,materials problem
+Boeing,crystk03,24696,24696,1751178,1,0,1,0,1,1,materials problem
+Boeing,crystm01,4875,4875,105339,1,0,1,1,1,1,materials problem
+Boeing,crystm02,13965,13965,322905,1,0,1,1,1,1,materials problem
+Boeing,crystm03,24696,24696,583770,1,0,1,1,1,1,materials problem
+Boeing,ct20stif,52329,52329,2600295,1,0,1,1,1,1,structural problem
+Boeing,msc00726,726,726,34518,1,0,1,1,1,1,structural problem
+Boeing,msc01050,1050,1050,26198,1,0,1,1,1,1,structural problem
+Boeing,msc01440,1440,1440,44998,1,0,1,1,1,1,structural problem
+Boeing,msc04515,4515,4515,97707,1,0,1,1,1,1,structural problem
+Boeing,msc10848,10848,10848,1229776,1,0,1,1,1,1,structural problem
+Boeing,msc23052,23052,23052,1142686,1,0,1,1,1,1,structural problem
+Boeing,nasa1824,1824,1824,39208,1,0,1,0,1,1,duplicate structural problem
+Boeing,nasa2910,2910,2910,174296,1,1,1,0,1,1,duplicate structural problem
+Boeing,nasa4704,4704,4704,104756,1,1,1,0,1,1,duplicate structural problem
+Boeing,pcrystk02,13965,13965,968583,1,1,1,0,1,1,duplicate materials problem
+Boeing,pcrystk03,24696,24696,1751178,1,1,1,0,1,1,duplicate materials problem
+Boeing,pct20stif,52329,52329,2698463,1,1,1,0,1,1,structural problem
+Boeing,pwtk,217918,217918,11524432,1,0,1,1,1,1,structural problem
+Bomhof,circuit_1,2624,2624,35823,1,0,0,0,0.999548641410646,0.2060602413263924,circuit simulation problem
+Bomhof,circuit_2,4510,4510,21199,1,0,0,0,0.8065636603186011,0.4152593124925141,circuit simulation problem
+Bomhof,circuit_3,12127,12127,48137,1,0,0,0,0.7700717835450027,0.3001104362230811,circuit simulation problem
+Bomhof,circuit_4,80209,80209,307604,1,0,0,0,0.8292028705104302,0.3635452210926232,circuit simulation problem
+Bova,rma10,46835,46835,2329092,1,0,1,0,1,0.2355549300354827,computational fluid dynamics problem
+Brethour,coater1,1348,1348,19457,1,0,1,0,0.5922916666666667,0.395,computational fluid dynamics problem
+Brethour,coater2,9540,9540,207308,1,0,1,0,0.5941884735804569,0.1280874338061923,computational fluid dynamics problem
+Brunetiere,thermal,3456,3456,66528,1,0,1,0,1,0.0730593607305936,thermal problem
+Cote,mplate,5962,5962,142190,0,0,1,0,1,0.05311683354376486,acoustics problem
+Cote,vibrobox,12328,12328,301700,1,0,1,0,1,1,acoustics problem
+DRIVCAV,cavity01,317,317,7280,1,0,1,0,0.8037831733483908,0.5198237885462555,computational fluid dynamics problem sequence
+DRIVCAV,cavity02,317,317,5923,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity03,317,317,7311,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity04,317,317,5923,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity05,1182,1182,32632,1,0,1,0,0.9049083605322621,0.6103499322813317,computational fluid dynamics problem sequence
+DRIVCAV,cavity06,1182,1182,29675,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity07,1182,1182,32702,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity08,1182,1182,29675,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity09,1182,1182,32702,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity10,2597,2597,76171,1,0,1,0,0.9372682821986997,0.6400172395216033,computational fluid dynamics problem sequence
+DRIVCAV,cavity11,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity12,2597,2597,76258,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity13,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity14,2597,2597,76258,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity15,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity16,4562,4562,137887,1,0,1,0,0.9531982436361479,0.6542773036781541,computational fluid dynamics problem sequence
+DRIVCAV,cavity17,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity18,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity19,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity20,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity21,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity22,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity23,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity24,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity25,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity26,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+FIDAP,ex1,216,216,4317,1,0,1,0,1,0.9980657640232108,computational fluid dynamics problem
+FIDAP,ex10,2410,2410,54840,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex10hs,2548,2548,57308,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex11,16614,16614,1096948,1,0,1,0,1,0.9999981487206734,computational fluid dynamics problem
+FIDAP,ex12,3973,3973,79077,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex13,2568,2568,75628,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex14,3251,3251,65875,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex15,6867,6867,98671,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex18,5773,5773,71701,1,0,1,0,1,0.4973910933139182,computational fluid dynamics problem
+FIDAP,ex19,12005,12005,259577,1,0,1,0,1,0.4284006268883396,computational fluid dynamics problem
+FIDAP,ex2,441,441,26839,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex20,2203,2203,67830,1,0,1,0,1,0.9705407160221662,computational fluid dynamics problem
+FIDAP,ex21,656,656,18964,1,0,1,0,1,0.9422327996538296,computational fluid dynamics problem
+FIDAP,ex22,839,839,22460,1,0,1,0,1,0.88617551561714,computational fluid dynamics problem
+FIDAP,ex23,1409,1409,42760,1,0,1,0,1,0.9386855719486492,computational fluid dynamics problem
+FIDAP,ex24,2283,2283,47901,1,0,1,0,1,0.862361129122898,computational fluid dynamics problem
+FIDAP,ex25,848,848,24369,1,0,1,0,1,0.9755481671646816,computational fluid dynamics problem
+FIDAP,ex26,2163,2163,74464,1,0,1,0,1,0.7325380026938618,computational fluid dynamics problem
+FIDAP,ex27,974,974,37652,1,0,1,0,1,0.5304041225928939,computational fluid dynamics problem
+FIDAP,ex28,2603,2603,77031,1,0,1,0,1,0.9877623772912288,computational fluid dynamics problem
+FIDAP,ex29,2870,2870,23754,1,0,1,0,1,0.9963608504117986,computational fluid dynamics problem
+FIDAP,ex3,1821,1821,52685,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex31,3909,3909,91223,1,0,1,0,1,0.7266897116346767,computational fluid dynamics problem
+FIDAP,ex32,1159,1159,11047,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex33,1733,1733,22189,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex35,19716,19716,227872,1,0,1,0,1,0.4608754972232364,computational fluid dynamics problem
+FIDAP,ex36,3079,3079,53099,1,0,1,0,1,0.9952497822816879,computational fluid dynamics problem
+FIDAP,ex37,3565,3565,67591,1,0,1,0,1,0.9536750695030144,computational fluid dynamics problem
+FIDAP,ex4,1601,1601,31849,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex40,7740,7740,456188,1,0,1,0,1,0.7709917560940942,computational fluid dynamics problem
+FIDAP,ex5,27,27,279,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex6,1651,1651,49062,1,0,1,0,1,0.9792406332233408,computational fluid dynamics problem
+FIDAP,ex7,1633,1633,46626,1,0,1,0,1,0.8240392950014447,computational fluid dynamics problem
+FIDAP,ex8,3096,3096,90841,1,0,1,0,1,0.4310900906034532,computational fluid dynamics problem
+FIDAP,ex9,3363,3363,99471,1,0,1,1,1,1,computational fluid dynamics problem
+Gaertner,big,13209,13209,91465,1,0,0,0,1,0.999974442854222,directed weighted graph
+Gaertner,nopoly,10774,10774,70842,1,0,0,0,1,1,undirected weighted graph
+Gaertner,pesa,11738,11738,79566,1,0,0,0,1,0.999970513652179,directed weighted graph
+Garon,garon1,3175,3175,84723,1,0,1,0,1,0.6720847366622736,computational fluid dynamics problem
+Garon,garon2,13535,13535,373235,1,0,1,0,1,0.6726819817326322,computational fluid dynamics problem
+Goodwin,goodwin,7320,7320,324772,1,0,1,0,0.6353114022282706,0.001199255331506196,computational fluid dynamics problem
+Goodwin,rim,22560,22560,1014951,1,0,1,0,0.6390640220938991,0,computational fluid dynamics problem
+Graham,graham1,9035,9035,335472,1,0,1,0,0.718197839525901,0.0004322586733311619,computational fluid dynamics problem
+Grund,b1_ss,7,7,15,1,0,0,0,0,0,chemical process simulation problem
+Grund,b2_ss,1089,1089,3895,1,0,0,0,0.0146710837671557,0.0005136106831022085,chemical process simulation problem
+Grund,b_dyn,1089,1089,4144,1,0,0,0,0.01454716095729704,0.0004828585224529213,chemical process simulation problem
+Grund,bayer01,57735,57735,275094,1,0,0,0,0.0002304047924196823,2.908118011428904e-05,chemical process simulation problem
+Grund,bayer02,13935,13935,63307,1,0,0,0,0.001884570082449941,0.000284346713425904,chemical process simulation problem
+Grund,bayer03,6747,6747,29195,1,0,0,0,0.003132397173723459,0.0002740852405097985,chemical process simulation problem
+Grund,bayer04,20545,20545,85537,1,0,0,0,0.001584088708967702,0.0002104352502425851,chemical process simulation problem
+Grund,bayer05,3268,3268,20712,1,0,0,0,0.006682474671265359,0.00135200386286818,chemical process simulation problem
+Grund,bayer06,3008,3008,20715,1,0,0,0,0.006745484877058098,0.001351808043257857,chemical process simulation problem
+Grund,bayer07,3268,3268,20963,1,0,0,0,0.006682474671265359,0.0013358141310052,chemical process simulation problem
+Grund,bayer08,3008,3008,20698,1,0,0,0,0.006745484877058098,0.001352918438345574,chemical process simulation problem
+Grund,bayer09,3083,3083,11767,1,0,0,0,0.02112012068640392,0.0001700246535747683,chemical process simulation problem
+Grund,bayer10,13436,13436,71594,1,0,0,0,0.002528365095919851,0.0002234917796929782,chemical process simulation problem
+Grund,d_dyn,87,87,230,1,0,0,0,0.07692307692307693,0.01769911504424779,chemical process simulation problem
+Grund,d_dyn1,87,87,232,1,0,0,0,0.07692307692307693,0.01754385964912281,chemical process simulation problem
+Grund,d_ss,53,53,144,1,0,0,0,0.04137931034482759,0,chemical process simulation problem
+Grund,meg1,2904,2904,58142,1,0,0,0,0.002374602082078637,0.001996042329863202,circuit simulation problem
+Grund,meg4,5860,5860,25258,1,0,0,0,1,1,circuit simulation problem
+Grund,poli,4008,4008,8188,1,0,0,0,0.0291866028708134,0.002392344497607655,economic problem
+Grund,poli_large,15575,15575,33033,1,0,0,0,0.003543059603405909,0.0004582426394776034,economic problem
+Gset,G1,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G10,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G11,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G12,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G13,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G14,800,800,9388,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G15,800,800,9322,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G16,800,800,9344,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G17,800,800,9334,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G18,800,800,9388,1,0,0,0,1,1,undirected weighted random graph
+Gset,G19,800,800,9322,1,0,0,0,1,1,undirected weighted random graph
+Gset,G2,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G20,800,800,9344,1,0,0,0,1,1,undirected weighted random graph
+Gset,G21,800,800,9334,1,0,0,0,1,1,undirected weighted random graph
+Gset,G22,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G23,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G24,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G25,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G26,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G27,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G28,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G29,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G3,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G30,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G31,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G32,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G33,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G34,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G35,2000,2000,23556,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G36,2000,2000,23532,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G37,2000,2000,23570,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G38,2000,2000,23558,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G39,2000,2000,23556,1,0,0,0,1,1,undirected weighted random graph
+Gset,G4,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G40,2000,2000,23532,1,0,0,0,1,1,undirected weighted random graph
+Gset,G41,2000,2000,23570,1,0,0,0,1,1,undirected weighted random graph
+Gset,G42,2000,2000,23558,1,0,0,0,1,1,undirected weighted random graph
+Gset,G43,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G44,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G45,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G46,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G47,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G48,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G49,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G5,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G50,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G51,1000,1000,11818,1,1,0,0,1,1,undirected random graph
+Gset,G52,1000,1000,11832,1,1,0,0,1,1,undirected random graph
+Gset,G53,1000,1000,11828,1,1,0,0,1,1,undirected random graph
+Gset,G54,1000,1000,11832,1,1,0,0,1,1,undirected random graph
+Gset,G55,5000,5000,24996,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G56,5000,5000,24996,1,0,0,0,1,1,undirected weighted random graph
+Gset,G57,5000,5000,20000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G58,5000,5000,59140,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G59,5000,5000,59140,1,0,0,0,1,1,undirected weighted random graph
+Gset,G6,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G60,7000,7000,34296,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G61,7000,7000,34296,1,0,0,0,1,1,undirected weighted random graph
+Gset,G62,7000,7000,28000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G63,7000,7000,82918,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G64,7000,7000,82918,1,0,0,0,1,1,undirected weighted random graph
+Gset,G65,8000,8000,32000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G66,9000,9000,36000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G67,10000,10000,40000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G7,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G8,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G9,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gupta,gupta1,31802,31802,2164210,1,1,0,0,1,1,optimization problem
+Gupta,gupta2,62064,62064,4248286,1,1,0,0,1,1,optimization problem
+Gupta,gupta3,16783,16783,9323427,1,1,0,0,1,1,optimization problem
+Hamm,add20,2395,2395,13151,1,0,0,0,1,0.5265898103384158,circuit simulation problem
+Hamm,add32,4960,4960,19848,1,0,0,0,1,0.3052122514777001,circuit simulation problem
+Hamm,bcircuit,68902,68902,375558,1,0,0,0,1,0.9084315976207868,circuit simulation problem
+Hamm,hcircuit,105676,105676,513072,1,0,0,0,0.9999410961997232,0.1951139297670355,circuit simulation problem
+Hamm,memplus,17758,17758,99147,1,0,0,0,1,0.4962095614886533,circuit simulation problem
+Hamm,scircuit,170998,170998,958936,1,0,0,0,0.9999467019956295,0.8008355096685118,circuit simulation problem
+Hollinger,g7jac010,2880,2880,18229,1,0,0,0,0.07102357505222322,0,economic problem
+Hollinger,g7jac010sc,2880,2880,18229,1,0,0,0,0.07102357505222322,0,economic problem
+Hollinger,g7jac020,5850,5850,42568,1,0,0,0,0.06184526063359838,0,economic problem
+Hollinger,g7jac020sc,5850,5850,42568,1,0,0,0,0.06184526063359838,0,economic problem
+Hollinger,g7jac040,11790,11790,107383,1,0,0,0,0.04830823961664447,0,economic problem
+Hollinger,g7jac040sc,11790,11790,107383,1,0,0,0,0.04830823961664447,0,economic problem
+Hollinger,g7jac050sc,14760,14760,145157,1,0,0,0,0.04349647420233192,0,economic problem
+Hollinger,g7jac060,17730,17730,183325,1,0,0,0,0.04035864774282543,0,economic problem
+Hollinger,g7jac060sc,17730,17730,183325,1,0,0,0,0.04035864774282543,0,economic problem
+Hollinger,g7jac080,23670,23670,259648,1,0,0,0,0.03703210435580416,0,economic problem
+Hollinger,g7jac080sc,23670,23670,259648,1,0,0,0,0.03703210435580416,0,economic problem
+Hollinger,g7jac100,29610,29610,335972,1,0,0,0,0.03529318979455026,0,economic problem
+Hollinger,g7jac100sc,29610,29610,335972,1,0,0,0,0.03529318979455026,0,economic problem
+Hollinger,g7jac120,35550,35550,412306,1,0,0,0,0.0342243022108217,0,economic problem
+Hollinger,g7jac120sc,35550,35550,412306,1,0,0,0,0.0342243022108217,0,economic problem
+Hollinger,g7jac140,41490,41490,488633,1,0,0,0,0.03350074170680273,0,economic problem
+Hollinger,g7jac140sc,41490,41490,488633,1,0,0,0,0.03350074170680273,0,economic problem
+Hollinger,g7jac160,47430,47430,564952,1,0,0,0,0.03297843351620031,0,economic problem
+Hollinger,g7jac160sc,47430,47430,564952,1,0,0,0,0.03297843351620031,0,economic problem
+Hollinger,g7jac180,53370,53370,641290,1,0,0,0,0.03258366406977314,0,economic problem
+Hollinger,g7jac180sc,53370,53370,641290,1,0,0,0,0.03258366406977314,0,economic problem
+Hollinger,g7jac200,59310,59310,717620,1,0,0,0,0.03227480202305086,0,economic problem
+Hollinger,g7jac200sc,59310,59310,717620,1,0,0,0,0.03227480202305086,0,economic problem
+Hollinger,jan99jac020,6774,6774,33744,1,0,0,0,0.003759634062284604,0,economic problem
+Hollinger,jan99jac020sc,6774,6774,33744,1,0,0,0,0.003759634062284604,0,economic problem
+Hollinger,jan99jac040,13694,13694,72734,1,0,0,0,0.003470816220281136,0,economic problem
+Hollinger,jan99jac040sc,13694,13694,72734,1,0,0,0,0.003470816220281136,0,economic problem
+Hollinger,jan99jac060,20614,20614,111903,1,0,0,0,0.003378124765408002,0,economic problem
+Hollinger,jan99jac060sc,20614,20614,111903,1,0,0,0,0.003378124765408002,0,economic problem
+Hollinger,jan99jac080,27534,27534,151063,1,0,0,0,0.003333611134261188,0,economic problem
+Hollinger,jan99jac080sc,27534,27534,151063,1,0,0,0,0.003333611134261188,0,economic problem
+Hollinger,jan99jac100,34454,34454,190224,1,0,0,0,0.003307461633445052,0,economic problem
+Hollinger,jan99jac100sc,34454,34454,190224,1,0,0,0,0.003307461633445052,0,economic problem
+Hollinger,jan99jac120,41374,41374,229385,1,0,0,0,0.003290255360374358,0,economic problem
+Hollinger,jan99jac120sc,41374,41374,229385,1,0,0,0,0.003290255360374358,0,economic problem
+Hollinger,mark3jac020,9129,9129,52883,1,0,0,0,0.07363006419249245,0.01351166293878669,economic problem
+Hollinger,mark3jac020sc,9129,9129,52883,1,0,0,0,0.07363006419249245,0.007349249098461679,economic problem
+Hollinger,mark3jac040,18289,18289,106803,1,0,0,0,0.07382338721543732,0.01389985784236298,economic problem
+Hollinger,mark3jac040sc,18289,18289,106803,1,0,0,0,0.07382338721543732,0.01173364623056615,economic problem
+Hollinger,mark3jac060,27449,27449,160723,1,0,0,0,0.07388687991287715,0.01402730528871371,economic problem
+Hollinger,mark3jac060sc,27449,27449,160723,1,0,0,0,0.07388687991287715,0.0121839735039789,economic problem
+Hollinger,mark3jac080,36609,36609,214643,1,0,0,0,0.07391845139171971,0.01409066941898426,economic problem
+Hollinger,mark3jac080sc,36609,36609,214643,1,0,0,0,0.07391845139171971,0.0125985842018466,economic problem
+Hollinger,mark3jac100,45769,45769,268563,1,0,0,0,0.07393733869014309,0.01412857360574466,economic problem
+Hollinger,mark3jac100sc,45769,45769,268563,1,0,0,0,0.07393733869014309,0.01261351717213372,economic problem
+Hollinger,mark3jac120,54929,54929,322483,1,0,0,0,0.07394990714529154,0.01415379562098285,economic problem
+Hollinger,mark3jac120sc,54929,54929,322483,1,0,0,0,0.07394990714529154,0.01276529035436745,economic problem
+Hollinger,mark3jac140,64089,64089,376395,1,0,0,0,0.07395887333678935,0.01417215070061332,economic problem
+Hollinger,mark3jac140sc,64089,64089,376395,1,0,0,0,0.07395887333678935,0.0128291219789848,economic problem
+LPnetlib,lp_25fv47,821,1876,10705,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_80bau3b,2262,12061,23264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_adlittle,56,138,424,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_afiro,27,51,102,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg,488,615,2862,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg2,516,758,4740,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg3,516,758,4756,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bandm,305,472,2494,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_beaconfd,173,295,3408,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_blend,74,114,522,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bnl1,643,1586,5532,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bnl2,2324,4486,14996,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bore3d,233,334,1448,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_brandy,220,303,2202,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_capri,271,482,1896,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_a,3516,7248,18168,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_b,9648,77137,260785,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_c,3068,6411,15977,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_d,8926,73948,246614,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cycle,1903,3371,21234,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_czprob,929,3562,10708,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_d2q06c,2171,5831,33081,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_d6cube,415,6184,37704,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_degen2,444,757,4201,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_degen3,1503,2604,25432,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_dfl001,6071,12230,35632,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_e226,223,472,2768,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_etamacro,400,816,2537,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fffff800,524,1028,6401,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_finnis,497,1064,2760,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit1d,24,1049,13427,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit1p,627,1677,9868,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit2d,25,10524,129042,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit2p,3000,13525,50284,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ganges,1309,1706,6937,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_gfrd_pnc,616,1160,2445,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_greenbea,2392,5598,31070,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_greenbeb,2392,5598,31070,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow15,300,645,5620,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow22,440,946,8252,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow7,140,301,2612,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_israel,174,316,2443,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_kb2,43,68,313,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_07,2426,3602,8404,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_11,14694,21349,49058,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_13,28632,42659,97246,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_18,105127,154699,358171,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_lotfi,153,366,1136,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_maros,846,1966,10137,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_maros_r7,3136,9408,144848,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_modszk1,687,1620,3168,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_07,1118,25067,144812,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_14,2337,54797,317097,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_30,4350,104374,604488,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_60,10280,243246,1408073,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_02,2953,7716,16571,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_06,9881,29351,63220,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_10,16558,49932,107605,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_20,33874,108175,232647,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_perold,625,1506,6148,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot,1441,4860,44375,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot4,410,1123,5264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot87,2030,6680,74949,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot_ja,940,2267,14977,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot_we,722,2928,9265,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilotnov,975,2446,13331,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap12,3192,8856,38304,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap15,6330,22275,94950,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap8,912,1632,7296,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_recipe,91,204,687,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc105,105,163,340,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc205,205,317,665,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc50a,50,78,160,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc50b,50,78,148,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scagr25,471,671,1725,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scagr7,129,185,465,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm1,330,600,2732,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm2,660,1200,5469,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm3,990,1800,8206,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scorpion,388,466,1534,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scrs8,490,1275,3288,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd1,77,760,2388,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd6,147,1350,4316,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd8,397,2750,8584,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap1,300,660,1872,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap2,1090,2500,7334,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap3,1480,3340,9734,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_share1b,117,253,1179,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_share2b,96,162,777,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_shell,536,1777,3558,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship04l,402,2166,6380,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship04s,402,1506,4400,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship08l,778,4363,12882,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship08s,778,2467,7194,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship12l,1151,5533,16276,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship12s,1151,2869,8284,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sierra,1227,2735,8001,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stair,356,614,4003,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standata,359,1274,3230,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standgub,361,1383,3338,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standmps,467,1274,3878,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor1,117,165,501,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor2,2157,3045,9357,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor3,16675,23541,72721,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_truss,1000,8806,27836,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_tuff,333,628,4561,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_vtp_base,198,346,1051,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_wood1p,244,2595,70216,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_woodw,1098,8418,37487,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgdbg1,348,629,1662,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgetam,400,816,2537,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgindy,2671,10880,66266,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgprtr,20,40,70,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_box1,231,261,651,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ceria3d,3576,4400,21178,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_chemcom,288,744,1590,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_cplex1,3005,5224,10947,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_cplex2,224,378,1215,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ex72a,197,215,467,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ex73a,193,211,457,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_forest6,66,131,246,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_galenet,8,14,22,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_gosh,3792,13455,99953,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_gran,2658,2525,20111,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_greenbea,2393,5596,31074,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_itest2,9,13,26,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_itest6,11,17,29,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein1,54,108,750,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein2,477,531,5062,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein3,994,1082,13101,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_mondou2,312,604,1208,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_pang,361,741,2933,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_pilot4i,410,1123,5264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_qual,323,464,1646,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_reactor,318,808,2591,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_refinery,323,464,1626,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_vol1,323,464,1646,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_woodinfe,35,89,140,1,0,0,0,0,0,linear programming problem
+Li,li,22695,22695,1215181,1,0,1,0,1,0.8685670104303111,electromagnetics problem
+Li,pli,22695,22695,1350309,1,1,1,0,1,1,duplicate electromagnetics problem
+Mallya,lhr01,1477,1477,18427,1,0,0,0,0.007324823611784348,0,chemical process simulation problem
+Mallya,lhr02,2954,2954,36875,1,0,0,0,0.007320486597050275,0,chemical process simulation problem
+Mallya,lhr04,4101,4101,81057,1,0,0,0,0.01515885315769082,0,chemical process simulation problem
+Mallya,lhr04c,4101,4101,82682,1,0,0,0,0.01515885315769082,0,chemical process simulation problem
+Mallya,lhr07,7337,7337,154660,1,0,0,0,0.0173680609288971,0,chemical process simulation problem
+Mallya,lhr07c,7337,7337,156508,1,0,0,0,0.0173680609288971,0,chemical process simulation problem
+Mallya,lhr10,10672,10672,228395,1,0,0,0,0.008791586915847653,1.752395305332977e-05,chemical process simulation problem
+Mallya,lhr10c,10672,10672,232633,1,0,0,0,0.008791586915847653,1.720467106819501e-05,chemical process simulation problem
+Mallya,lhr11,10964,10964,231806,1,0,0,0,0.008200580375103791,3.452591601570929e-05,chemical process simulation problem
+Mallya,lhr11c,10964,10964,233741,1,0,0,0,0.008200580375103791,4.280052387841227e-05,chemical process simulation problem
+Mallya,lhr14,14270,14270,305750,1,0,0,0,0.006622946983926842,0,chemical process simulation problem
+Mallya,lhr14c,14270,14270,307858,1,0,0,0,0.006622946983926842,0,chemical process simulation problem
+Mallya,lhr17,17576,17576,379761,1,0,0,0,0.001513390098553639,0.0001527473453564807,chemical process simulation problem
+Mallya,lhr17c,17576,17576,381975,1,0,0,0,0.001513390098553639,5.236643939631969e-06,chemical process simulation problem
+Mallya,lhr34,35152,35152,746972,1,0,0,0,0.00151326330781556,0.0001553140154832006,chemical process simulation problem
+Mallya,lhr34c,35152,35152,764014,1,0,0,0,0.00151326330781556,5.236205217354879e-06,chemical process simulation problem
+Mallya,lhr71,70304,70304,1494006,1,0,0,0,0.001513199920413014,0.0001553075692357127,chemical process simulation problem
+Mallya,lhr71c,70304,70304,1528092,1,0,0,0,0.001513199920413014,5.235985883782057e-06,chemical process simulation problem
+Mulvey,finan512,74752,74752,596992,1,0,0,1,1,1,economic problem
+Mulvey,pfinan512,74752,74752,596992,1,1,0,0,1,1,duplicate economic problem
+Nasa,barth,6691,6691,26439,1,1,1,0,0,0,duplicate structural problem
+Nasa,barth4,6019,6019,23492,1,1,1,0,0,0,duplicate structural problem
+Nasa,barth5,15606,15606,61484,1,1,1,0,0,0,duplicate structural problem
+Nasa,nasa1824,1824,1824,39208,1,0,1,1,1,1,structural problem
+Nasa,nasa2146,2146,2146,72250,1,0,1,1,1,1,structural problem
+Nasa,nasa2910,2910,2910,174296,1,0,1,1,1,1,structural problem
+Nasa,nasa4704,4704,4704,104756,1,0,1,1,1,1,structural problem
+Nasa,nasasrb,54870,54870,2677324,1,0,1,1,1,1,structural problem
+Nasa,pwt,36519,36519,326107,1,1,1,0,1,1,duplicate structural problem
+Nasa,shuttle_eddy,10429,10429,103599,1,1,1,0,1,1,duplicate structural problem
+Nasa,skirt,12598,12598,196520,1,1,1,0,1,1,duplicate structural problem
+Nemeth,nemeth01,9506,9506,725054,1,0,0,0,1,1,theoretical/quantum chemistry problem sequence
+Nemeth,nemeth02,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth03,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth04,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth05,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth06,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth07,9506,9506,394812,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth08,9506,9506,394816,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth09,9506,9506,395506,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth10,9506,9506,401448,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth11,9506,9506,408264,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth12,9506,9506,446818,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth13,9506,9506,474472,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth14,9506,9506,496144,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth15,9506,9506,539802,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth16,9506,9506,587012,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth17,9506,9506,629620,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth18,9506,9506,695234,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth19,9506,9506,818302,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth20,9506,9506,971870,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth21,9506,9506,1173746,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth22,9506,9506,1358832,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth23,9506,9506,1506810,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth24,9506,9506,1506550,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth25,9506,9506,1511758,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth26,9506,9506,1511760,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Okunbor,aft01,8205,8205,125567,1,0,1,1,1,1,acoustics problem
+Okunbor,aft02,8184,8184,127762,0,0,1,0,1,0.9963538443526401,acoustics problem
+Qaplib,lp_nug05,210,225,1050,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug06,372,486,2232,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug07,602,931,4214,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug08,912,1632,7296,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug12,3192,8856,38304,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug15,6330,22275,94950,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug20,15240,72600,304800,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug30,52260,379350,1567800,1,0,0,0,0,0,linear programming problem
+Ronis,xenon1,48600,48600,1181120,1,0,1,0,1,0.775813230671423,materials problem
+Ronis,xenon2,157464,157464,3866688,1,0,1,0,1,0.7756792256277864,materials problem
+Rothberg,3dtube,45330,45330,3213618,1,1,1,0,1,1,computational fluid dynamics problem
+Rothberg,cfd1,70656,70656,1825580,1,0,1,1,1,1,computational fluid dynamics problem
+Rothberg,cfd2,123440,123440,3085406,1,0,1,1,1,1,computational fluid dynamics problem
+Rothberg,gearbox,153746,153746,9080404,1,1,1,0,1,1,structural problem
+Rothberg,struct3,53570,53570,1173694,1,1,1,0,1,1,structural problem
+Rothberg,struct4,4350,4350,237798,1,1,1,0,1,1,structural problem
+Shyy,shyy161,76480,76480,329762,1,0,1,0,0.7263358696509635,0.1824427535660244,computational fluid dynamics problem
+Shyy,shyy41,4720,4720,20042,1,0,1,0,0.7234369459874719,0.1843753693416854,computational fluid dynamics problem
+Simon,appu,14000,14000,1853104,1,0,0,0,1,0.9429754924136972,directed weighted random graph
+Simon,bbmat,38744,38744,1771722,1,0,1,0,0.5295358625441292,0.0005851199495896658,computational fluid dynamics problem
+Simon,olafu,16146,16146,1015156,1,0,1,1,1,1,structural problem
+Simon,raefsky1,3242,3242,293409,1,0,1,0,1,0.09040311269027836,computational fluid dynamics problem sequence
+Simon,raefsky2,3242,3242,293551,1,0,1,0,1,0.09753745147411895,subsequent computational fluid dynamics problem
+Simon,raefsky3,21200,21200,1488768,1,0,1,0,1,0.4763745189320018,computational fluid dynamics problem
+Simon,raefsky4,19779,19779,1316789,1,0,1,1,1,1,structural problem
+Simon,raefsky5,6316,6316,167178,1,0,1,0,0,0,structural problem
+Simon,raefsky6,3402,3402,130371,1,0,1,0,0,0,structural problem
+Simon,venkat01,62424,62424,1717792,1,0,1,0,1,0.05542936676316082,computational fluid dynamics problem sequence
+Simon,venkat25,62424,62424,1717763,1,0,1,0,1,0.05539650790563141,subsequent computational fluid dynamics problem
+Simon,venkat50,62424,62424,1717777,1,0,1,0,1,0.05539603939461855,subsequent computational fluid dynamics problem
+TOKAMAK,utm1700b,1700,1700,21509,1,0,1,0,0.5232974910394266,0,electromagnetics problem
+TOKAMAK,utm300,300,300,3155,1,0,1,0,0.4651488616462347,0,electromagnetics problem
+TOKAMAK,utm3060,3060,3060,42211,1,0,1,0,0.524686470332814,0,electromagnetics problem
+TOKAMAK,utm5940,5940,5940,83842,1,0,1,0,0.5290493183743677,0,electromagnetics problem
+Vavasis,av41092,41092,41092,1683902,1,0,1,0,0.0009359570219938022,0,2D/3D problem
+Wang,swang1,3169,3169,20841,1,0,1,0,1,0,semiconductor device problem sequence
+Wang,swang2,3169,3169,20841,1,0,1,0,1,0,subsequent semiconductor device problem
+Wang,wang1,2903,2903,19093,1,0,1,0,1,0.808153180975911,semiconductor device problem sequence
+Wang,wang2,2903,2903,19093,1,0,1,0,1,0.808153180975911,subsequent semiconductor device problem
+Wang,wang3,26064,26064,177168,1,0,1,0,1,0.9780019059720457,semiconductor device problem
+Wang,wang4,26068,26068,177196,1,0,1,0,1,0.04647715843523371,semiconductor device problem
+Zhao,Zhao1,33861,33861,166453,1,0,1,0,0.9224990949680222,0,electromagnetics problem
+Zhao,Zhao2,33861,33861,166453,1,0,1,0,0.9224990949680222,0,electromagnetics problem
+Zitney,extr1,2837,2837,10967,1,0,0,0,0.004209049456331112,0.000364797081623347,chemical process simulation problem
+Zitney,hydr1,5308,5308,22680,1,0,0,0,0.004126315789473685,0.0006173383896287151,chemical process simulation problem
+Zitney,radfr1,1048,1048,13299,1,0,0,0,0.05374309287714783,0,chemical process simulation problem
+Zitney,rdist1,4134,4134,94408,1,0,0,0,0.05878038669628716,0,chemical process simulation problem
+Zitney,rdist2,3198,3198,56834,1,0,0,0,0.04562603575332323,0,chemical process simulation problem
+Zitney,rdist3a,2398,2398,61896,1,0,0,0,0.1404154186743065,0,chemical process simulation problem
+Cunningham,k3plates,11107,11107,378927,1,0,1,0,1,0.999260507857104,acoustics problem
+Cunningham,m3plates,11107,11107,6639,1,0,1,0,1,1,acoustics problem
+Cunningham,qa8fk,66127,66127,1660579,1,0,1,0,1,1,acoustics problem
+Cunningham,qa8fm,66127,66127,1660579,1,0,1,1,1,1,acoustics problem
+Boeing,bcsstk39,46772,46772,2060662,1,0,1,0,1,1,structural problem
+Chen,pkustk01,22044,22044,979380,1,1,1,0,1,1,structural problem
+Chen,pkustk02,10800,10800,810000,1,1,1,0,1,1,structural problem
+Chen,pkustk03,63336,63336,3130416,1,1,1,0,1,1,structural problem
+Chen,pkustk04,55590,55590,4218660,1,1,1,0,1,1,structural problem
+Chen,pkustk05,37164,37164,2205144,1,1,1,0,1,1,structural problem
+Chen,pkustk06,43164,43164,2571768,1,1,1,0,1,1,structural problem
+Chen,pkustk07,16860,16860,2418804,1,1,1,0,1,1,structural problem
+Chen,pkustk08,22209,22209,3226671,1,1,1,0,1,1,structural problem
+Chen,pkustk09,33960,33960,1583640,1,1,1,0,1,1,structural problem
+Chen,pkustk10,80676,80676,4308984,1,1,1,0,1,1,structural problem
+Chen,pkustk11,87804,87804,5217912,1,1,1,0,1,1,structural problem
+Chen,pkustk12,94653,94653,7512317,1,1,1,0,1,1,structural problem
+Chen,pkustk13,94893,94893,6616827,1,1,1,0,1,1,structural problem
+Chen,pkustk14,151926,151926,14836504,1,1,1,0,1,1,structural problem
+MathWorks,pivtol,102,102,306,1,0,0,0,0.9901960784313726,0,statistical/mathematical problem
+Kim,kim1,38415,38415,933195,0,0,1,0,0.9897360244976419,0,2D/3D problem
+Kim,kim2,456976,456976,11330020,0,0,1,0,0.9970363405132914,0,2D/3D problem
+Langemyr,comsol,1500,1500,97645,1,0,1,0,0.9990327110094128,0.0008944822923708982,structural problem
+Pothen,barth,6691,6691,46187,1,1,1,0,1,1,structural problem
+Pothen,barth4,6019,6019,40965,1,1,1,0,1,1,structural problem
+Pothen,barth5,15606,15606,107362,1,1,1,0,1,1,structural problem
+Pothen,bodyy4,17546,17546,121550,1,0,1,1,1,1,structural problem
+Pothen,bodyy5,18589,18589,128853,1,0,1,1,1,1,structural problem
+Pothen,bodyy6,19366,19366,134208,1,0,1,1,1,1,structural problem
+Pothen,commanche_dual,7920,7920,31680,1,1,1,0,1,1,structural problem
+Pothen,mesh1e1,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh1em1,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh1em6,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh2e1,306,306,2018,1,0,1,1,1,1,structural problem
+Pothen,mesh2em5,306,306,2018,1,0,1,1,1,1,structural problem
+Pothen,mesh3e1,289,289,1377,1,0,1,1,1,1,structural problem
+Pothen,mesh3em5,289,289,1377,1,0,1,1,1,1,structural problem
+Pothen,onera_dual,85567,85567,419201,1,1,1,0,1,1,structural problem
+Pothen,pwt,36519,36519,326107,1,1,1,0,1,1,structural problem
+Pothen,shuttle_eddy,10429,10429,103599,1,1,1,0,1,1,structural problem
+Pothen,skirt,12598,12598,196520,1,1,1,0,1,1,structural problem
+Pothen,sphere2,66,66,450,1,1,1,0,1,1,structural problem
+Pothen,sphere3,258,258,1794,1,1,1,0,1,1,structural problem
+Pothen,tandem_dual,94069,94069,460493,1,1,1,0,1,1,structural problem
+Pothen,tandem_vtx,18454,18454,253350,1,1,1,0,1,1,structural problem
+Norris,fv1,9604,9604,85264,1,0,1,1,1,1,2D/3D problem
+Norris,fv2,9801,9801,87025,1,0,1,1,1,1,2D/3D problem
+Norris,fv3,9801,9801,87025,1,0,1,1,1,1,2D/3D problem
+Norris,heart1,3557,3557,1385317,1,0,1,0,1,0,2D/3D problem
+Norris,heart2,2339,2339,680341,1,0,1,0,1,0,2D/3D problem
+Norris,heart3,2339,2339,680341,1,0,1,0,1,0,2D/3D problem
+Norris,lung1,1650,1650,7419,1,0,1,0,0.5713295198474606,0,computational fluid dynamics problem
+Norris,lung2,109460,109460,492564,1,0,1,0,0.5714270798529903,0,computational fluid dynamics problem
+Norris,stomach,213360,213360,3021648,1,0,1,0,0.8474914253808726,0,2D/3D problem
+Norris,torso1,116158,116158,8516500,1,0,1,0,0.4243874832715144,0,2D/3D problem
+Norris,torso2,115967,115967,1033473,1,0,1,0,0.9916360219987662,0,2D/3D problem
+Norris,torso3,259156,259156,4429042,1,0,1,0,0.9513722917125312,0,2D/3D problem
+Shen,e40r0100,17281,17281,553562,1,0,1,0,0.3079877899832364,0.001965387548691824,2D/3D problem
+Shen,shermanACa,3432,3432,25220,1,0,1,0,0.163759867817147,0.02157150725169818,2D/3D problem
+Shen,shermanACb,18510,18510,145149,1,0,1,0,0.1493062958488302,0.02665845434660729,2D/3D problem
+Shen,shermanACd,6136,6136,53329,1,0,1,0,0.1520140698832454,0.01665501239590617,2D/3D problem
+Pereyra,landmark,71952,2704,1146848,1,0,0,0,0,0,least squares problem
+vanHeukelum,cage3,5,5,19,1,0,0,0,1,0,directed weighted graph
+vanHeukelum,cage4,9,9,49,1,0,0,0,1,0,directed weighted graph
+vanHeukelum,cage5,37,37,233,1,0,0,0,1,0.04081632653061224,directed weighted graph
+vanHeukelum,cage6,93,93,785,1,0,0,0,1,0.09248554913294797,directed weighted graph
+vanHeukelum,cage7,340,340,3084,1,0,0,0,1,0.1020408163265306,directed weighted graph
+vanHeukelum,cage8,1015,1015,11003,1,0,0,0,1,0.144973968762515,directed weighted graph
+vanHeukelum,cage9,3534,3534,41594,1,0,0,0,1,0.1535470310036784,directed weighted graph
+vanHeukelum,cage10,11397,11397,150645,1,0,0,0,1,0.1743077099850626,directed weighted graph
+vanHeukelum,cage11,39082,39082,559722,1,0,0,0,1,0.1821988322065151,directed weighted graph
+vanHeukelum,cage12,130228,130228,2032536,1,0,0,0,1,0.1935123018985359,directed weighted graph
+vanHeukelum,cage13,445315,445315,7479343,1,0,0,0,1,0.2004785878020389,directed weighted graph
+vanHeukelum,cage14,1505785,1505785,27130349,1,0,0,0,1,0.2073316837703073,directed weighted graph
+vanHeukelum,cage15,5154859,5154859,99199551,1,0,0,0,1,0.2131193964673732,directed weighted graph
+Hohn,fd12,7500,7500,28462,1,0,1,0,0.0002810765230834094,0,materials problem
+Hohn,fd15,11532,11532,44206,1,0,1,0,0,0,materials problem
+Hohn,fd18,16428,16428,63406,1,0,1,0,3.154275620603729e-05,0,materials problem
+Hohn,sinc12,7500,7500,283992,1,0,1,0,0.01755337541442645,0,materials problem
+Hohn,sinc15,11532,11532,551184,1,0,1,0,0.01378652867239141,0,materials problem
+Hohn,sinc18,16428,16428,948696,1,0,1,0,0.01157085557378834,0,materials problem
+Alemdar,Alemdar,6245,6245,42581,1,0,1,0,1,1,2D/3D problem
+Andrews,Andrews,60000,60000,760154,1,0,1,1,1,1,computer graphics/vision problem
+FEMLAB,ns3Da,20414,20414,1679599,1,0,1,0,0.9999825339398674,0,computational fluid dynamics problem
+FEMLAB,poisson2D,367,367,2417,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,poisson3Da,13514,13514,352762,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,poisson3Db,85623,85623,2374949,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,problem1,415,415,2779,1,0,1,0,1,0.6548223350253807,2D/3D problem
+FEMLAB,sme3Da,12504,12504,874887,1,0,1,0,0.9999710105602732,0.4370888572710733,structural problem
+FEMLAB,sme3Db,29067,29067,2081063,1,0,1,0,0.999978557463075,0.4406373111838425,structural problem
+FEMLAB,sme3Dc,42930,42930,3148656,1,0,1,0,0.9999793929020139,0.4391179389295772,structural problem
+FEMLAB,waveguide3D,21036,21036,303468,0,0,1,0,1,0,electromagnetics problem
+Lucifora,cell1,7055,7055,30082,1,0,0,0,0.9970503597122302,0,directed weighted graph
+Lucifora,cell2,7055,7055,30082,1,0,0,0,0.9970503597122302,0.004342728101793546,directed weighted graph
+ND,nd3k,9000,9000,3279690,1,0,1,1,1,1,2D/3D problem
+ND,nd6k,18000,18000,6897316,1,0,1,1,1,1,2D/3D problem
+ND,nd12k,36000,36000,14220946,1,0,1,1,1,1,2D/3D problem
+ND,nd24k,72000,72000,28715634,1,0,1,1,1,1,2D/3D problem
+Schenk_AFE,af_shell1,504855,504855,17562051,1,0,1,0,1,1,structural problem sequence
+Schenk_AFE,af_shell2,504855,504855,17562051,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell3,504855,504855,17562051,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell4,504855,504855,17562051,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell5,504855,504855,17579155,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell6,504855,504855,17579155,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell7,504855,504855,17579155,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell8,504855,504855,17579155,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell9,504855,504855,17588845,1,0,1,0,1,1,subsequent structural problem
+Schenk_IBMNA,c-62,41731,41731,559341,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-64,51035,51035,707985,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-66,49989,49989,444853,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-67,57975,57975,530229,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-73,169422,169422,1279274,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMSDS,2D_27628_bjtcai,27628,27628,206670,1,0,1,0,0.9995761793531919,0.2185967538342959,semiconductor device problem
+Schenk_IBMSDS,2D_54019_highK,54019,54019,486129,1,0,1,0,0.9980889117620531,0.189734095484946,semiconductor device problem
+Schenk_IBMSDS,3D_28984_Tetra,28984,28984,285092,1,0,1,0,0.9874041102377119,0.3613007012666531,semiconductor device problem
+Schenk_IBMSDS,3D_51448_3D,51448,51448,537038,1,0,1,0,0.9920908271502504,0.1870343293725159,semiconductor device problem
+Schenk_IBMSDS,ibm_matrix_2,51448,51448,537038,1,0,1,0,0.9920908271502504,0.185666920653226,semiconductor device problem
+Schenk_IBMSDS,matrix_9,103430,103430,1205518,1,0,1,0,0.9966503478484926,0.1744833443427385,semiconductor device problem
+Schenk_IBMSDS,matrix-new_3,125329,125329,893984,1,0,1,0,0.9871118002084263,0.2826079320371298,semiconductor device problem
+Schenk_ISEI,barrier2-10,115625,115625,2158759,1,0,1,0,1,0.1989334147759642,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-11,115625,115625,2158759,1,0,1,0,1,0.1988805553760946,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-12,115625,115625,2158759,1,0,1,0,1,0.1983617501551521,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-1,113076,113076,2129496,1,0,1,0,1,0.1972208170916773,semiconductor device problem sequence
+Schenk_ISEI,barrier2-2,113076,113076,2129496,1,0,1,0,1,0.1971642812509299,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-3,113076,113076,2129496,1,0,1,0,1,0.1980361234266671,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-4,113076,113076,2129496,1,0,1,0,1,0.189249263546285,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-9,115625,115625,2158759,1,0,1,0,1,0.2036036406422221,semiconductor device problem sequence
+Schenk_ISEI,igbt3,10938,10938,130500,1,0,1,0,1,0.1720279018417223,semiconductor device problem
+Schenk_ISEI,nmos3,18588,18588,237130,1,0,1,0,1,0.1670891636390259,semiconductor device problem
+Schenk_ISEI,ohne2,181343,181343,6869939,1,0,1,0,1,0.09493801090692276,semiconductor device problem
+Schenk_ISEI,para-10,155924,155924,2094873,1,0,1,0,1,0.1980866954210761,subsequent semiconductor device problem
+Schenk_ISEI,para-4,153226,153226,2930882,1,0,1,0,1,0.2900222345747638,semiconductor device problem
+Schenk_ISEI,para-5,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,semiconductor device problem sequence
+Schenk_ISEI,para-6,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,subsequent semiconductor device problem
+Schenk_ISEI,para-7,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,subsequent semiconductor device problem
+Schenk_ISEI,para-8,155924,155924,2094873,1,0,1,0,1,0.1779654854253516,subsequent semiconductor device problem
+Schenk_ISEI,para-9,155924,155924,2094873,1,0,1,0,1,0.1810599453621524,subsequent semiconductor device problem
+Kamvar,Stanford,281903,281903,2312497,1,1,0,0,0.2766368994208425,0.2766368994208425,directed graph
+Kamvar,Stanford_Berkeley,683446,683446,7583376,1,1,0,0,0.2502051856587356,0.2502051856587356,directed graph
+Sumner,graphics,29493,11822,117954,1,0,1,0,0,0,computer graphics/vision problem
+Tromble,language,399130,399130,1216334,1,0,0,0,0.05790231080611451,0,directed weighted graph
+Sanghavi,ecl32,51993,51993,380415,1,0,1,0,0.9219175329301935,0.6030290297239527,semiconductor device problem
+Sandia,adder_dcop_01,1813,1813,11156,1,0,0,0,0.6544094067343666,0.01582041688936398,subsequent circuit simulation problem
+Sandia,adder_dcop_02,1813,1813,11246,1,0,0,0,0.6481736368448915,0.02604552673372154,subsequent circuit simulation problem
+Sandia,adder_dcop_03,1813,1813,11148,1,0,0,0,0.6429870546699475,0.03509147319995721,subsequent circuit simulation problem
+Sandia,adder_dcop_04,1813,1813,11107,1,0,0,0,0.6505480335267569,0.003868471953578337,subsequent circuit simulation problem
+Sandia,adder_dcop_05,1813,1813,11097,1,0,0,0,0.6473752151462995,0.01333907056798623,subsequent circuit simulation problem
+Sandia,adder_dcop_06,1813,1813,11224,1,0,0,0,0.6486257030669638,0.01464501751034702,subsequent circuit simulation problem
+Sandia,adder_dcop_07,1813,1813,11226,1,0,0,0,0.6484880636604774,0.005941644562334218,subsequent circuit simulation problem
+Sandia,adder_dcop_08,1813,1813,11242,1,0,0,0,0.6478127317021501,0.005296049147336087,subsequent circuit simulation problem
+Sandia,adder_dcop_09,1813,1813,11239,1,0,0,0,0.6484424666242848,0.006145369781733418,subsequent circuit simulation problem
+Sandia,adder_dcop_10,1813,1813,11232,1,0,0,0,0.6478634291167427,0.00572579790054077,subsequent circuit simulation problem
+Sandia,adder_dcop_11,1813,1813,11243,1,0,0,0,0.6481677610675705,0.00487184918449481,subsequent circuit simulation problem
+Sandia,adder_dcop_12,1813,1813,11246,1,0,0,0,0.6481736368448915,0.004446797247220751,subsequent circuit simulation problem
+Sandia,adder_dcop_13,1813,1813,11245,1,0,0,0,0.6482422702244811,0.002753070732740364,subsequent circuit simulation problem
+Sandia,adder_dcop_14,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008258337744838539,subsequent circuit simulation problem
+Sandia,adder_dcop_15,1813,1813,11246,1,0,0,0,0.6481736368448915,0.005929062996294336,subsequent circuit simulation problem
+Sandia,adder_dcop_16,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008258337744838539,subsequent circuit simulation problem
+Sandia,adder_dcop_17,1813,1813,11246,1,0,0,0,0.6481736368448915,0.009105346744309158,subsequent circuit simulation problem
+Sandia,adder_dcop_18,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_19,1813,1813,11245,1,0,0,0,0.6482422702244811,0.007623888182973317,subsequent circuit simulation problem
+Sandia,adder_dcop_20,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_21,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_22,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_23,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_24,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_25,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_26,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_27,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_28,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_29,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_30,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008046585494970884,subsequent circuit simulation problem
+Sandia,adder_dcop_31,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_32,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_33,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_34,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_35,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_36,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_37,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_38,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_39,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_40,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_41,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_42,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_43,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_44,1813,1813,11245,1,0,0,0,0.6482422702244811,0.007623888182973317,subsequent circuit simulation problem
+Sandia,adder_dcop_45,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_46,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_47,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_48,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_49,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_50,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_51,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_52,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_53,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_54,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_55,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_56,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_57,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_58,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_59,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_60,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_61,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_62,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_63,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_64,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_65,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_66,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_67,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_68,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_69,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_trans_01,1814,1814,14579,1,0,0,0,1,0.03115703773289494,circuit simulation problem sequence
+Sandia,adder_trans_02,1814,1814,14579,1,0,0,0,1,0.03115703773289494,subsequent circuit simulation problem
+Sandia,fpga_dcop_01,1220,1220,5892,1,0,0,0,0.8183347350714887,0.2733389402859546,circuit simulation problem sequence
+Sandia,fpga_dcop_02,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3271656854499579,subsequent circuit simulation problem
+Sandia,fpga_dcop_03,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3448275862068966,subsequent circuit simulation problem
+Sandia,fpga_dcop_04,1220,1220,5884,1,0,0,0,0.818871103622578,0.3546756529064869,subsequent circuit simulation problem
+Sandia,fpga_dcop_05,1220,1220,5852,1,0,0,0,0.8210347752332485,0.359626802374894,subsequent circuit simulation problem
+Sandia,fpga_dcop_06,1220,1220,5860,1,0,0,0,0.8204911092294666,0.3539373412362405,subsequent circuit simulation problem
+Sandia,fpga_dcop_07,1220,1220,5855,1,0,0,0,0.8205128205128205,0.3432930705657978,subsequent circuit simulation problem
+Sandia,fpga_dcop_08,1220,1220,5888,1,0,0,0,0.8186026936026936,0.3425925925925926,subsequent circuit simulation problem
+Sandia,fpga_dcop_09,1220,1220,5888,1,0,0,0,0.8186026936026936,0.3337542087542087,subsequent circuit simulation problem
+Sandia,fpga_dcop_10,1220,1220,5884,1,0,0,0,0.818871103622578,0.3323504633529907,subsequent circuit simulation problem
+Sandia,fpga_dcop_11,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3301093355761144,subsequent circuit simulation problem
+Sandia,fpga_dcop_12,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_13,1220,1220,5892,1,0,0,0,0.8183347350714887,0.325063078216989,subsequent circuit simulation problem
+Sandia,fpga_dcop_14,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3187552565180824,subsequent circuit simulation problem
+Sandia,fpga_dcop_15,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3221194280908327,subsequent circuit simulation problem
+Sandia,fpga_dcop_16,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3221194280908327,subsequent circuit simulation problem
+Sandia,fpga_dcop_17,1220,1220,5892,1,0,0,0,0.8183347350714887,0.31959629941127,subsequent circuit simulation problem
+Sandia,fpga_dcop_18,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3191757779646762,subsequent circuit simulation problem
+Sandia,fpga_dcop_19,1220,1220,5892,1,0,0,0,0.8183347350714887,0.31959629941127,subsequent circuit simulation problem
+Sandia,fpga_dcop_20,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3212783851976451,subsequent circuit simulation problem
+Sandia,fpga_dcop_21,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_22,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3263246425567704,subsequent circuit simulation problem
+Sandia,fpga_dcop_23,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_24,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3254835996635829,subsequent circuit simulation problem
+Sandia,fpga_dcop_25,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3259041211101766,subsequent circuit simulation problem
+Sandia,fpga_dcop_26,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3254835996635829,subsequent circuit simulation problem
+Sandia,fpga_dcop_27,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3271656854499579,subsequent circuit simulation problem
+Sandia,fpga_dcop_28,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3284272497897393,subsequent circuit simulation problem
+Sandia,fpga_dcop_29,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_30,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3292682926829268,subsequent circuit simulation problem
+Sandia,fpga_dcop_31,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3284272497897393,subsequent circuit simulation problem
+Sandia,fpga_dcop_32,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_33,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_34,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3275862068965517,subsequent circuit simulation problem
+Sandia,fpga_dcop_35,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3288477712363331,subsequent circuit simulation problem
+Sandia,fpga_dcop_36,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3288477712363331,subsequent circuit simulation problem
+Sandia,fpga_dcop_37,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_38,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_39,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_40,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3313708999158957,subsequent circuit simulation problem
+Sandia,fpga_dcop_41,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3301093355761144,subsequent circuit simulation problem
+Sandia,fpga_dcop_42,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3313708999158957,subsequent circuit simulation problem
+Sandia,fpga_dcop_43,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_44,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_dcop_45,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_dcop_46,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_47,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_48,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_49,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_50,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_51,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_trans_01,1220,1220,7382,1,0,0,0,1,0.214193962748876,circuit simulation problem sequence
+Sandia,fpga_trans_02,1220,1220,7382,1,0,0,0,1,0.2138728323699422,subsequent circuit simulation problem
+Sandia,init_adder1,1813,1813,11156,1,0,0,0,0.6544094067343666,0.01582041688936398,circuit simulation problem sequence
+Sandia,mult_dcop_01,25187,25187,193276,1,0,0,0,0.6144759258929472,0.003383612629779353,circuit simulation problem sequence
+Sandia,mult_dcop_02,25187,25187,193276,1,0,0,0,0.6144759258929472,0.003383612629779353,subsequent circuit simulation problem
+Sandia,mult_dcop_03,25187,25187,193216,1,0,0,0,0.6142197994049846,0.01294544504421048,subsequent circuit simulation problem
+Sandia,oscil_dcop_01,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,circuit simulation problem sequence
+Sandia,oscil_dcop_02,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_03,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_04,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_05,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_06,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_07,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_08,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_09,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_10,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_11,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_12,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_13,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_14,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_15,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_16,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_17,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_18,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_19,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_20,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_21,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_22,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_23,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_24,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_25,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_26,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_27,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_28,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_29,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_30,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_31,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_32,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_33,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_34,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_35,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_36,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_37,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_38,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_39,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_40,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_41,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_42,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_43,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_44,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_45,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_46,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_47,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_48,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_49,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_50,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_51,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_52,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_53,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_54,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_55,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_56,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_57,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_trans_01,430,430,1614,1,0,0,0,0.9737274220032841,0.7175697865353038,circuit simulation problem
+MathWorks,Pd,8081,8081,13036,1,0,0,0,0,0,counter-example problem
+MathWorks,Pd_rhs,8081,12406,6323,1,0,0,0,0,0,counter-example problem
+MathWorks,Harvard500,500,500,2636,1,1,0,0,0.4057744830277019,0.4057744830277019,directed graph
+HB,cegb2802,2802,2802,277362,1,1,1,0,1,1,structural problem
+HB,cegb2919,2919,2919,321543,1,1,1,0,1,1,structural problem
+HB,cegb3024,3024,3024,79848,1,1,1,0,1,1,structural problem
+HB,cegb3306,3306,3306,74916,1,1,1,0,1,1,structural problem
+HB,lap_25,25,25,169,1,1,1,0,1,1,structural problem
+HB,lock1074,1074,1074,51588,1,1,1,0,1,1,structural problem
+HB,lock2232,2232,2232,80352,1,1,1,0,1,1,structural problem
+HB,lock3491,3491,3491,160444,1,1,1,0,1,1,structural problem
+HB,lock_700,700,700,22175,1,1,1,0,1,1,structural problem
+HB,man_5976,5976,5976,225046,1,1,1,0,1,1,structural problem
+IBM_Austin,coupled,11341,11341,97193,1,0,0,0,1,0.7823373235828404,circuit simulation problem
+ACUSIM,Pres_Poisson,14822,14822,715804,1,0,1,1,1,1,computational fluid dynamics problem
+Rajat,rajat01,6833,6833,43250,1,1,0,0,0.9957479284779764,0.9957479284779764,circuit simulation problem
+Rajat,rajat02,1960,1960,11187,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat03,7602,7602,32653,1,0,0,0,1,0.4024380527448012,circuit simulation problem
+Rajat,rajat04,1041,1041,8725,1,0,0,0,1,0.03991188285603214,circuit simulation problem
+Rajat,rajat05,301,301,1250,1,0,0,0,0.7697974217311234,0.7058823529411765,circuit simulation problem
+Rajat,rajat06,10922,10922,46983,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat07,14842,14842,63913,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat08,19362,19362,83443,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat09,24482,24482,105573,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat10,30202,30202,130303,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat11,135,135,665,1,0,0,0,0.8911764705882353,0.6303939962476548,circuit simulation problem
+Rajat,rajat12,1879,1879,12818,1,0,0,0,1,0.4548776032151991,circuit simulation problem
+Rajat,rajat13,7598,7598,48762,1,0,0,0,1,0.2965265970366772,circuit simulation problem
+Rajat,rajat14,180,180,1475,1,0,0,0,1,0.0245398773006135,circuit simulation problem
+Hamrle,Hamrle1,32,32,98,1,0,0,0,0.06451612903225806,0,circuit simulation problem
+Hamrle,Hamrle2,5952,5952,22162,1,0,0,0,0.0009930486593843098,0.0001805543017062382,circuit simulation problem
+Hamrle,Hamrle3,1447360,1447360,5514242,1,0,0,0,2.538882993038383e-06,0,circuit simulation problem
+Oberwolfach,gyro_k,17361,17361,1021159,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,gyro_m,17361,17361,340431,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t2dah_a,11445,11445,176117,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t2dah_e,11445,11445,176117,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t2dal_a,4257,4257,37465,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t2dal_e,4257,4257,4257,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t3dh_a,79171,79171,4352105,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dh_e,79171,79171,4352105,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dl_a,20360,20360,509866,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dl_e,20360,20360,20360,1,0,1,1,1,1,duplicate model reduction problem
+LiuWenzhuo,powersim,15838,15838,64424,1,0,0,0,0.5913695769855386,0.5337339974478245,power network problem
+Lin,Lin,256000,256000,1766400,1,0,1,0,1,1,structural problem
+Cannizzo,sts4098,4098,4098,72356,1,0,1,1,1,1,structural problem
+GHS_indef,aug2d,29008,29008,76832,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug2dc,30200,30200,80000,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug3d,24300,24300,69984,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug3dcqp,35543,35543,128115,1,0,1,0,1,1,2D/3D problem
+GHS_indef,bmw3_2,227362,227362,11288630,1,0,1,0,1,1,structural problem
+GHS_indef,c-55,32780,32780,403450,1,0,0,0,1,1,optimization problem
+GHS_indef,c-58,37595,37595,552551,1,0,0,0,1,1,optimization problem
+GHS_indef,c-59,41282,41282,480536,1,0,0,0,1,1,optimization problem
+GHS_indef,c-62ghs,41731,41731,559339,1,0,0,0,1,1,subsequent optimization problem
+GHS_indef,c-63,44234,44234,434704,1,0,0,0,1,1,optimization problem
+GHS_indef,c-68,64810,64810,565996,1,0,0,0,1,1,optimization problem
+GHS_indef,c-69,67458,67458,623914,1,0,0,0,1,1,optimization problem
+GHS_indef,c-70,68924,68924,658986,1,0,0,0,1,1,optimization problem
+GHS_indef,c-71,76638,76638,859520,1,0,0,0,1,1,optimization problem
+GHS_indef,c-72,84064,84064,707546,1,0,0,0,1,1,optimization problem
+GHS_indef,copter2,55476,55476,759952,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,d_pretok,182730,182730,1641672,1,0,1,0,1,1,2D/3D problem
+GHS_indef,darcy003,389874,389874,2097566,1,0,1,0,1,1,2D/3D problem
+GHS_indef,dawson5,51537,51537,1010777,1,0,1,0,1,1,structural problem
+GHS_indef,dtoc,24993,24993,69972,1,0,0,0,1,1,optimization problem
+GHS_indef,exdata_1,6001,6001,2269500,1,0,0,0,1,1,optimization problem
+GHS_indef,helm2d03,392257,392257,2741935,1,0,1,0,1,1,2D/3D problem
+GHS_indef,helm3d01,32226,32226,428444,1,0,1,0,1,1,2D/3D problem
+GHS_indef,k1_san,67759,67759,559774,1,0,1,0,1,1,2D/3D problem
+GHS_indef,laser,3002,3002,9000,1,0,1,0,1,1,materials problem
+GHS_indef,mario001,38434,38434,204912,1,0,1,0,1,1,2D/3D problem
+GHS_indef,mario002,389874,389874,2097566,1,0,1,0,1,1,duplicate 2D/3D problem
+GHS_indef,ncvxqp1,12111,12111,73963,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp9,16554,16554,54040,1,0,0,0,1,1,optimization problem
+GHS_indef,olesnik0,88263,88263,744216,1,0,1,0,1,1,2D/3D problem
+GHS_indef,sit100,10262,10262,61046,1,0,1,0,1,1,2D/3D problem
+GHS_indef,stokes128,49666,49666,558594,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,stokes64,12546,12546,140034,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,stokes64s,12546,12546,140034,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,tuma1,22967,22967,87760,1,0,1,0,1,1,2D/3D problem
+GHS_indef,tuma2,12992,12992,49365,1,0,1,0,1,1,2D/3D problem
+GHS_indef,turon_m,189924,189924,1690876,1,0,1,0,1,1,2D/3D problem
+GHS_psdef,audikw_1,943695,943695,77651847,1,0,1,1,1,1,structural problem
+GHS_psdef,bmw7st_1,141347,141347,7318399,1,0,1,1,1,1,structural problem
+GHS_psdef,bmwcra_1,148770,148770,10641602,1,0,1,1,1,1,structural problem
+GHS_psdef,copter1,17222,17222,211064,1,1,1,0,1,1,computational fluid dynamics problem
+GHS_psdef,copter2,55476,55476,759952,1,1,1,0,1,1,duplicate computational fluid dynamics problem
+GHS_psdef,crankseg_1,52804,52804,10614210,1,0,1,1,1,1,structural problem
+GHS_psdef,crankseg_2,63838,63838,14148858,1,0,1,1,1,1,structural problem
+DNVS,crplat2,18010,18010,960946,1,1,1,0,1,1,structural problem
+DNVS,fcondp2,201822,201822,11294316,1,1,1,0,1,1,structural problem
+GHS_psdef,finance256,37376,37376,298496,1,1,0,0,1,1,optimization problem
+GHS_psdef,ford1,18728,18728,101576,1,1,1,0,1,1,structural problem
+GHS_psdef,ford2,100196,100196,544688,1,1,1,0,1,1,structural problem
+DNVS,fullb,199187,199187,11708077,1,1,1,0,1,1,structural problem
+DNVS,halfb,224617,224617,12387821,1,1,1,0,1,1,structural problem
+GHS_psdef,hood,220542,220542,9895422,1,0,1,1,1,1,structural problem
+GHS_psdef,inline_1,503712,503712,36816170,1,0,1,1,1,1,structural problem
+GHS_psdef,ldoor,952203,952203,42493817,1,0,1,1,1,1,structural problem
+DNVS,m_t1,97578,97578,9753570,1,0,1,1,1,1,structural problem
+GHS_psdef,oilpan,73752,73752,2148558,1,0,1,1,1,1,structural problem
+GHS_psdef,opt1,15449,15449,1930655,1,1,1,0,1,1,structural problem
+GHS_psdef,pds10,16558,16558,149658,1,1,0,0,1,1,optimization problem
+GHS_psdef,pwt,36519,36519,326107,1,1,1,0,1,1,duplicate structural problem
+GHS_psdef,ramage02,16830,16830,2866352,1,1,1,0,1,1,computational fluid dynamics problem
+GHS_psdef,s3dkq4m2,90449,90449,4427725,1,0,1,1,1,1,structural problem
+GHS_psdef,s3dkt3m2,90449,90449,3686223,1,0,1,1,1,1,structural problem
+DNVS,ship_001,34920,34920,3896496,1,0,1,1,1,1,structural problem
+DNVS,ship_003,121728,121728,3777036,1,0,1,1,1,1,structural problem
+DNVS,shipsec1,140874,140874,3568176,1,0,1,1,1,1,structural problem
+DNVS,shipsec5,179860,179860,4598604,1,0,1,1,1,1,structural problem
+DNVS,shipsec8,114919,114919,3303553,1,0,1,1,1,1,structural problem
+GHS_psdef,srb1,54924,54924,2962152,1,1,1,0,1,1,structural problem
+DNVS,thread,29736,29736,4444880,1,0,1,1,1,1,structural problem
+DNVS,trdheim,22098,22098,1935324,1,1,1,0,1,1,structural problem
+DNVS,troll,213453,213453,11985111,1,1,1,0,1,1,structural problem
+DNVS,tsyl201,20685,20685,2454957,1,1,1,0,1,1,structural problem
+GHS_psdef,vanbody,47072,47072,2329056,1,0,1,1,1,1,structural problem
+GHS_psdef,wathen100,30401,30401,471601,1,0,1,1,1,1,random 2D/3D problem
+GHS_psdef,wathen120,36441,36441,565761,1,0,1,1,1,1,random 2D/3D problem
+DNVS,x104,108384,108384,8713602,1,0,1,1,1,1,structural problem
+GHS_indef,a0nsdsil,80016,80016,355034,1,0,0,0,1,1,optimization problem
+GHS_indef,a2nnsnsl,80016,80016,347222,1,0,0,0,1,1,optimization problem
+GHS_indef,a5esindl,60008,60008,255004,1,0,0,0,1,1,optimization problem
+GHS_indef,blockqp1,60012,60012,640033,1,0,0,0,1,1,optimization problem
+GHS_indef,bloweya,30004,30004,150009,1,0,1,0,1,1,materials problem
+GHS_indef,boyd1,93279,93279,1211231,1,0,0,0,1,1,optimization problem
+GHS_indef,boyd2,466316,466316,1500397,1,0,0,0,1,1,optimization problem
+GHS_indef,brainpc2,27607,27607,179395,1,0,0,0,1,1,optimization problem
+GHS_indef,bratu3d,27792,27792,173796,1,0,1,0,1,1,2D/3D problem
+GHS_indef,cont-201,80595,80595,438795,1,0,0,0,1,1,optimization problem
+GHS_indef,cont-300,180895,180895,988195,1,0,0,0,1,1,optimization problem
+GHS_indef,dixmaanl,60000,60000,299998,1,0,0,0,1,1,optimization problem
+GHS_indef,linverse,11999,11999,95977,1,0,0,0,1,1,statistical/mathematical problem
+GHS_indef,ncvxbqp1,50000,50000,349968,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp3,75000,75000,499964,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp5,62500,62500,424966,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp7,87500,87500,574962,1,0,0,0,1,1,optimization problem
+GHS_indef,sparsine,50000,50000,1548988,1,0,1,0,1,1,structural problem
+GHS_indef,spmsrtls,29995,29995,229947,1,0,0,0,1,1,statistical/mathematical problem
+GHS_psdef,cvxbqp1,50000,50000,349968,1,0,0,1,1,1,optimization problem
+GHS_psdef,gridgena,48962,48962,512084,1,0,0,1,1,1,optimization problem
+GHS_psdef,jnlbrng1,40000,40000,199200,1,0,0,1,1,1,optimization problem
+GHS_psdef,minsurfo,40806,40806,203622,1,0,0,1,1,1,optimization problem
+GHS_psdef,obstclae,40000,40000,197608,1,0,0,1,1,1,optimization problem
+GHS_psdef,torsion1,40000,40000,197608,1,0,0,1,1,1,duplicate optimization problem
+Rajat,rajat15,37261,37261,443573,1,0,0,0,1,0.943060217954145,circuit simulation problem
+Bydder,mri1,65536,147456,589824,1,0,1,0,0,0,computer graphics/vision problem
+Bydder,mri2,63240,147456,569160,1,0,1,0,0,0,computer graphics/vision problem
+Engwirda,airfoil_2d,14214,14214,259688,1,0,1,0,0.981668119637925,0,computational fluid dynamics problem
+IBM_EDA,dc1,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426284829292399,circuit simulation problem sequence
+IBM_EDA,dc2,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426284829292399,subsequent circuit simulation problem
+IBM_EDA,dc3,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426407989395915,subsequent circuit simulation problem
+IBM_EDA,trans4,116835,116835,749800,1,0,0,0,0.8542477149952045,0.3020988522272163,circuit simulation problem sequence
+IBM_EDA,trans5,116835,116835,749800,1,0,0,0,0.8542477149952045,0.3018997890878642,subsequent circuit simulation problem
+Morandini,robot,120,120,870,1,0,1,0,0.2177215189873418,0.05316455696202532,robotics problem
+Morandini,rotor1,100,100,708,1,0,1,0,0.514018691588785,0.07165109034267912,structural problem
+Morandini,rotor2,791,791,10685,1,0,1,0,0.2341063574570172,0.1155537784886046,structural problem
+MathWorks,tomography,500,500,28726,1,0,1,0,1,0.9331113158081201,computer graphics/vision problem
+Kemelmacher,Kemelmacher,28452,9693,100875,1,0,1,0,0,0,computer graphics/vision problem
+MathWorks,Kuu,7102,7102,340200,1,0,1,1,1,1,structural problem
+MathWorks,Muu,7102,7102,170134,1,0,1,1,1,1,structural problem
+Toledo,deltaX,68600,21961,247424,1,0,0,0,0,0,counter-example problem
+VanVelzen,std1_Jac2_db,21982,21982,498771,1,0,0,0,0.3261820218167785,8.389455293641422e-06,chemical process simulation problem
+VanVelzen,std1_Jac2,21982,21982,1248213,1,0,0,0,1.441471454060305e-05,0,chemical process simulation problem
+VanVelzen,std1_Jac3_db,21982,21982,531826,1,0,0,0,0.3593020610225873,7.84553706623987e-06,chemical process simulation problem
+VanVelzen,std1_Jac3,21982,21982,1455374,1,0,0,0,1.37377639453759e-05,0,chemical process simulation problem
+VanVelzen,Zd_Jac2_db,22835,22835,676439,1,0,0,0,0.3038965489807284,3.059956793410077e-06,chemical process simulation problem
+VanVelzen,Zd_Jac2,22835,22835,1642407,1,0,0,0,0.000249569948369456,0,chemical process simulation problem
+VanVelzen,Zd_Jac3_db,22835,22835,713907,1,0,0,0,0.3299540424152621,2.894054454528616e-06,chemical process simulation problem
+VanVelzen,Zd_Jac3,22835,22835,1915726,1,0,0,0,0.0002609405864378739,0,chemical process simulation problem
+VanVelzen,Zd_Jac6_db,22835,22835,663643,1,0,0,0,0.3245527521504101,3.121059662176502e-06,chemical process simulation problem
+VanVelzen,Zd_Jac6,22835,22835,1711557,1,0,0,0,0.0002161245251101651,0,chemical process simulation problem
+Rajat,rajat16,94294,94294,476766,1,0,0,0,0.9900237892855388,0.6363336955309653,circuit simulation problem
+Rajat,rajat17,94294,94294,479246,1,0,0,0,0.9900237892855388,0.2705152684049277,circuit simulation problem
+Rajat,rajat18,94294,94294,479151,1,0,0,0,0.626033640830624,0.2849580148146621,circuit simulation problem
+Rajat,rajat19,1157,1157,3699,1,0,0,0,0.9041281299345816,0.9193154034229829,circuit simulation problem
+Lourakis,bundle1,10581,10581,770811,1,0,1,1,1,1,computer graphics/vision problem
+PARSEC,benzene,8219,8219,242669,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,CO,221119,221119,7666057,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga10As10H30,113081,113081,6115633,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga19As19H42,133123,133123,8884839,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga3As3H12,61349,61349,5970947,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga41As41H72,268096,268096,18488476,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,GaAsH6,61349,61349,3381809,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ge87H76,112985,112985,7892195,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ge99H100,112985,112985,8451395,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,H2O,67024,67024,2216736,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Na5,5832,5832,305630,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si10H16,17077,17077,875923,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si2,769,769,17801,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si34H36,97569,97569,5156379,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si41Ge41H72,185639,185639,15011265,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si5H12,19896,19896,738598,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si87H76,240369,240369,10661631,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiH4,5041,5041,171903,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiNa,5743,5743,198787,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiO2,155331,155331,11283503,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiO,33401,33401,1317655,1,0,0,0,1,1,theoretical/quantum chemistry problem
+Rajat,rajat20,86916,86916,604299,1,0,0,0,0.9906228863063395,0.1122042623922186,circuit simulation problem
+Rajat,rajat21,411676,411676,1876011,1,0,0,0,0.7647530446640561,0.6145057622905241,circuit simulation problem
+Rajat,rajat22,39899,39899,195429,1,0,0,0,0.9800702079331211,0.3342735182643515,circuit simulation problem
+Rajat,rajat23,110355,110355,555441,1,0,0,0,0.9891581094231137,0.3324988529606978,circuit simulation problem
+Rajat,rajat24,358172,358172,1946979,1,0,0,0,0.996935347128458,0.2716106951495262,circuit simulation problem
+Rajat,rajat25,87190,87190,606489,1,0,0,0,0.9906572831072957,0.1118151951820715,circuit simulation problem
+Rajat,rajat26,51032,51032,247528,1,0,0,0,0.9853537517311467,0.3271800826884766,circuit simulation problem
+Rajat,rajat27,20640,20640,97353,1,0,0,0,0.9645908149382882,0.3035747337767303,circuit simulation problem
+Rajat,rajat28,87190,87190,606489,1,0,0,0,0.9906572831072957,0.1072533437604223,circuit simulation problem
+MathWorks,Sieber,2290,2290,14873,1,0,0,0,0.7272727272727273,0,counter-example problem
+Andrianov,ex3sta1,16782,16782,678998,1,1,0,0,1,1,optimization problem
+Andrianov,fxm3_6,5026,5026,94026,1,1,0,0,1,1,optimization problem
+Andrianov,fxm4_6,18892,18892,497844,1,1,0,0,1,1,optimization problem
+Andrianov,ins2,309412,309412,2751484,1,1,0,0,1,1,optimization problem
+Andrianov,lp1,534388,534388,1643420,1,1,0,0,1,1,optimization problem
+Andrianov,lpl1,32460,32460,328036,1,1,0,0,1,1,optimization problem
+Andrianov,mip1,66463,66463,10352819,1,1,0,0,1,1,optimization problem
+Andrianov,net100,29920,29920,2033200,1,1,0,0,1,1,optimization problem
+Andrianov,net125,36720,36720,2577200,1,1,0,0,1,1,optimization problem
+Andrianov,net150,43520,43520,3121200,1,1,0,0,1,1,optimization problem
+Andrianov,net25,9520,9520,401200,1,1,0,0,1,1,optimization problem
+Andrianov,net4-1,88343,88343,2441727,1,1,0,0,1,1,optimization problem
+Andrianov,net50,16320,16320,945200,1,1,0,0,1,1,optimization problem
+Andrianov,net75,23120,23120,1489200,1,1,0,0,1,1,optimization problem
+Andrianov,pattern1,19242,19242,9323432,1,1,0,0,1,1,optimization problem
+Andrianov,pf2177,9728,9728,725144,1,1,0,0,1,1,optimization problem
+MKS,fp,7548,7548,834222,1,0,1,0,0.7575174939506899,0.002912877385765126,electromagnetics problem
+Rajat,rajat29,643994,643994,3760246,1,0,0,0,0.6856406275660725,0.6910598008173955,circuit simulation problem
+Rajat,rajat30,643994,643994,6175244,1,0,0,0,0.9945912407336421,0.009194565053000587,circuit simulation problem
+Rajat,rajat31,4690002,4690002,20316253,1,0,0,0,1,0.4000960614178773,circuit simulation problem
+Raju,laminar_duct3D,67173,67173,3788857,1,0,1,0,0.9022908019592145,0.5518386226500883,computational fluid dynamics problem
+Bates,Chem97Zt,2541,31022,62044,1,1,0,0,0,0,statistical/mathematical problem
+Bates,Chem97ZtZ,2541,2541,7361,1,0,0,1,1,1,statistical/mathematical problem
+Schmid,thermal1,82654,82654,574458,1,0,1,1,1,1,thermal problem
+Schmid,thermal2,1228045,1228045,8580313,1,0,1,1,1,1,thermal problem
+MathWorks,Kaufhold,8765,8765,42471,1,0,0,0,1,0.778437073518068,counter-example problem
+Bindel,ted_A,10605,10605,424587,1,0,1,0,0.5657922767749357,0.1057079149564699,thermal problem
+Bindel,ted_B,10605,10605,144579,1,0,1,1,1,1,thermal problem
+Bindel,ted_AB,10605,10605,522387,0,0,1,0,0.6415700434950818,0,thermal problem
+Bindel,ted_A_unscaled,10605,10605,424587,1,0,1,0,0.5657922767749357,0.1057079149564699,thermal problem
+Bindel,ted_B_unscaled,10605,10605,144579,1,0,1,1,1,1,thermal problem
+Bindel,ted_AB_unscaled,10605,10605,522387,0,0,1,0,0.6415700434950818,0,thermal problem
+Koutsovasilis,F1,343791,343791,26837113,1,0,1,0,1,1,structural problem
+AMD,G2_circuit,150102,150102,726674,1,0,0,1,1,1,circuit simulation problem
+IBM_EDA,ckt11752_dc_1,49702,49702,333029,1,0,0,0,0.9838102263462359,0.7355387943965807,circuit simulation problem
+IBM_EDA,ckt11752_tr_0,49702,49702,332807,1,0,0,0,0.9838102263462359,0.7360237367761078,circuit simulation problem
+Sandia,ASIC_100k,99340,99340,940621,1,0,0,0,1,0.002631466347182405,circuit simulation problem
+Sandia,ASIC_100ks,99190,99190,578890,1,0,0,0,1,0.0007546383156139254,circuit simulation problem
+Sandia,ASIC_320k,321821,321821,1931828,1,0,0,0,1,0.3578041366837217,circuit simulation problem
+Sandia,ASIC_320ks,321671,321671,1316085,1,0,0,0,1,0.2891089626654492,circuit simulation problem
+Sandia,ASIC_680k,682862,682862,2638997,1,0,0,0,1,0.004444308126428144,circuit simulation problem
+Sandia,ASIC_680ks,682712,682712,1693767,1,0,0,0,1,0.005801860432914134,circuit simulation problem
+AMD,G3_circuit,1585478,1585478,7660826,1,0,0,1,1,1,circuit simulation problem
+GHS_psdef,apache1,80800,80800,542184,1,0,1,1,1,1,structural problem
+GHS_psdef,apache2,715176,715176,4817870,1,0,1,1,1,1,structural problem
+GHS_indef,bloweybl,30003,30003,109999,1,0,1,0,1,1,materials problem
+GHS_indef,bloweybq,10001,10001,49999,1,0,1,1,1,1,materials problem
+GHS_indef,cvxqp3,17500,17500,114962,1,0,0,0,1,1,optimization problem
+GHS_indef,qpband,20000,20000,45000,1,0,0,0,1,1,optimization problem
+Oberwolfach,chipcool0,20082,20082,281150,1,0,1,0,1,0.8688617524936032,model reduction problem
+Oberwolfach,chipcool1,20082,20082,281150,1,0,1,0,1,0.08556391438245974,model reduction problem
+Oberwolfach,filter2D,1668,1668,10750,1,0,1,0,1,1,model reduction problem
+Oberwolfach,filter3D,106437,106437,2707179,1,0,1,0,1,1,model reduction problem
+Oberwolfach,flowmeter0,9669,9669,67391,1,0,1,0,1,1,model reduction problem
+Oberwolfach,flowmeter5,9669,9669,67391,1,0,1,0,1,0.06222930598385364,model reduction problem
+Oberwolfach,gas_sensor,66917,66917,1703365,1,0,1,0,1,1,model reduction problem
+Oberwolfach,gyro,17361,17361,1021159,1,0,1,1,1,1,model reduction problem
+Oberwolfach,inlet,11730,11730,328323,1,0,1,0,0.6083330964361183,9.475888601453601e-05,model reduction problem
+Oberwolfach,LF10000,19998,19998,99982,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LF10,18,18,82,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LFAT5000,19994,19994,79966,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LFAT5,14,14,46,1,0,1,1,1,1,model reduction problem
+Oberwolfach,piston,2025,2025,100015,1,0,1,0,1,0.03275844473925911,model reduction problem
+Oberwolfach,rail_1357,1357,1357,8985,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_20209,20209,20209,139233,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_5177,5177,5177,35185,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_79841,79841,79841,553921,1,0,1,0,1,1,model reduction problem
+Oberwolfach,spiral,1434,1434,18228,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dah,11445,11445,176117,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dal_bci,4257,4257,37465,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dal,4257,4257,37465,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t3dh,79171,79171,4352105,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t3dl,20360,20360,509866,1,0,1,0,1,1,model reduction problem
+Oberwolfach,windscreen,22692,22692,1482390,0,0,1,0,1,0,model reduction problem
+Oberwolfach,bone010,986703,986703,47851783,1,0,1,1,1,1,model reduction problem
+Oberwolfach,boneS01,127224,127224,5516602,1,0,1,1,1,1,model reduction problem
+Oberwolfach,boneS10,914898,914898,40878708,1,0,1,1,1,1,model reduction problem
+Pajek,California,9664,9664,16150,1,1,0,0,0.02241486068111455,0.02241486068111455,directed graph
+Pajek,Cities,55,46,1342,1,0,0,0,0,0,weighted bipartite graph
+Pajek,CSphd,1882,1882,1740,1,1,0,0,0,0,directed graph
+Pajek,dictionary28,52652,52652,178076,1,1,0,0,1,1,undirected graph
+Pajek,divorce,50,9,225,1,1,0,0,0,0,bipartite graph
+Pajek,EAT_RS,23219,23219,325592,1,0,0,0,0.1236262721980876,0.03102501938294547,directed weighted graph
+Pajek,EAT_SR,23219,23219,325589,1,0,0,0,0.1236274132759018,0.03102530574571187,directed weighted graph
+Pajek,EPA,4772,4772,8965,1,1,0,0,0.01249302844394869,0.01249302844394869,directed graph
+Pajek,Erdos02,6927,6927,16944,1,1,0,0,1,1,undirected graph
+Pajek,Erdos971,472,472,2628,1,1,0,0,1,1,undirected graph
+Pajek,Erdos972,5488,5488,14170,1,1,0,0,1,1,undirected graph
+Pajek,Erdos981,485,485,2762,1,1,0,0,1,1,undirected graph
+Pajek,Erdos982,5822,5822,14750,1,1,0,0,1,1,undirected graph
+Pajek,Erdos991,492,492,2834,1,1,0,0,1,1,undirected graph
+Pajek,Erdos992,6100,6100,15030,1,1,0,0,1,1,undirected graph
+Pajek,EVA,8497,8497,6726,1,1,0,0,0.003866745984533016,0.003866745984533016,directed graph
+Pajek,FA,10617,10617,72176,1,0,0,0,0.232333869090506,0.005847142936318794,directed weighted graph
+Pajek,foldoc,13356,13356,120238,1,0,0,0,0.4785009730700777,0.459472047106572,directed weighted graph
+Pajek,football,35,35,118,1,0,0,0,0,0,directed weighted graph
+Pajek,GD00_a,352,352,458,1,1,0,0,0,0,directed graph
+Pajek,GD00_c,638,638,1041,1,0,0,0,0.02133850630455868,0.01551891367604268,directed multigraph
+Pajek,GD01_a,311,311,645,1,0,0,0,0.01550387596899225,0.01550387596899225,directed weighted graph
+Pajek,GD01_A,953,953,645,1,0,0,0,0.01550387596899225,0.01550387596899225,directed multigraph
+Pajek,GD01_b,18,18,37,1,1,0,0,0.5142857142857142,0.5142857142857142,directed graph
+Pajek,GD01_c,33,33,135,1,0,0,0,0,0,directed multigraph
+Pajek,GD02_a,23,23,87,1,1,0,0,0.6436781609195402,0.6436781609195402,directed graph
+Pajek,GD02_b,80,80,232,1,1,0,0,0,0,directed graph
+Pajek,GD06_Java,1538,1538,8032,1,1,0,0,0.05353585657370518,0.05353585657370518,directed graph
+Pajek,GD06_theory,101,101,380,1,1,0,0,1,1,undirected graph
+Pajek,GD95_a,36,36,57,1,1,0,0,0.03508771929824561,0.03508771929824561,directed graph
+Pajek,GD95_b,73,73,96,1,1,0,0,0,0,directed graph
+Pajek,GD95_c,62,62,287,1,1,0,0,0.9965156794425087,0.9965156794425087,directed graph
+Pajek,GD96_a,1096,1096,1677,1,0,0,0,0,0,directed multigraph
+Pajek,GD96_b,111,111,193,1,1,0,0,0,0,directed graph
+Pajek,GD96_c,65,65,250,1,1,0,0,1,1,undirected graph
+Pajek,GD96_d,180,180,229,1,1,0,0,0.008733624454148471,0.008733624454148471,directed graph
+Pajek,GD97_a,84,84,332,1,1,0,0,1,1,directed graph
+Pajek,GD97_b,47,47,264,1,0,0,0,1,1,undirected weighted graph
+Pajek,GD97_c,452,452,460,1,0,0,0,0,0,directed multigraph
+Pajek,GD98_a,38,38,50,1,1,0,0,0.16,0.16,directed graph
+Pajek,GD98_b,121,121,207,1,1,0,0,0.7246376811594203,0.7246376811594203,directed graph
+Pajek,GD98_c,112,112,336,1,1,0,0,1,1,undirected graph
+Pajek,GD99_b,64,64,252,1,0,0,0,1,1,undirected multigraph
+Pajek,GD99_c,105,105,149,1,1,0,0,0.3892617449664429,0.3892617449664429,directed graph
+Pajek,geom,7343,7343,23796,1,0,0,0,1,1,undirected weighted graph
+Pajek,GlossGT,72,72,122,1,1,0,0,0.06557377049180328,0.06557377049180328,directed graph
+Pajek,HEP-th,27240,27240,342437,1,1,0,0,0.002774548916757691,0.002774548916757691,directed graph
+Pajek,HEP-th-new,27770,27770,352807,1,1,0,0,0.002738343613933237,0.002738343613933237,directed graph
+Pajek,IMDB,428440,896308,3782463,1,1,0,0,0,0,bipartite graph
+Pajek,internet,124651,124651,207214,1,0,0,0,0.01444913320583093,0.002245819852432203,directed weighted graph
+Pajek,Journals,124,124,12068,1,0,0,1,1,1,undirected weighted graph
+Pajek,Kohonen,4470,4470,12731,1,1,0,0,0.001728336868567837,0.001728336868567837,directed graph
+Pajek,Lederberg,8843,8843,41601,1,0,0,0,0.003029210241615579,0.003029210241615579,directed multigraph
+Barabasi,NotreDame_actors,392400,127823,1470404,1,1,0,0,0,0,bipartite graph
+Barabasi,NotreDame_www,325729,325729,929849,1,1,0,0,0.3315875213545298,0.3315875213545298,directed graph
+Barabasi,NotreDame_yeast,2114,2114,4480,1,1,0,0,1,1,undirected graph
+Pajek,ODLIS,2909,2909,18246,1,0,0,0,0.2043747601556932,0.1997697494654898,directed multigraph
+Pajek,patents_main,240547,240547,560943,1,0,0,0,0,0,directed weighted graph
+Pajek,patents,3774768,3774768,14970767,1,1,0,0,0,0,directed graph
+Pajek,Ragusa16,24,24,81,1,0,0,0,0.3661971830985916,0.1971830985915493,directed weighted graph
+Pajek,Ragusa18,23,23,64,1,0,0,0,0.3278688524590164,0.1967213114754098,directed weighted graph
+Pajek,Reuters911,13332,13332,296076,1,0,0,0,1,1,undirected weighted graph sequence
+Pajek,Roget,1022,1022,5075,1,1,0,0,0.5620811982656682,0.5620811982656682,directed graph
+Pajek,Sandi_authors,86,86,248,1,0,0,0,1,1,undirected weighted graph
+Pajek,Sandi_sandi,314,360,613,1,1,0,0,0,0,bipartite graph
+Pajek,SciMet,3084,3084,10413,1,0,0,0,0.002497118709181713,0.002497118709181713,directed multigraph
+Pajek,SmaGri,1059,1059,4919,1,0,0,0,0.0008133387555917039,0.0008133387555917039,directed multigraph
+Pajek,SmallW,396,396,994,1,0,0,0,0,0,directed multigraph
+Pajek,Stranke94,10,10,90,1,0,0,0,1,1,undirected weighted graph
+Pajek,Tina_AskCal,11,11,29,1,1,0,0,0.2758620689655172,0.2758620689655172,directed graph
+Pajek,Tina_AskCog,11,11,36,1,1,0,0,0.5,0.5,directed graph
+Pajek,Tina_DisCal,11,11,41,1,1,0,0,0.4390243902439024,0.4390243902439024,directed graph
+Pajek,Tina_DisCog,11,11,48,1,1,0,0,0.5,0.5,directed graph
+Pajek,USAir97,332,332,4252,1,0,0,0,1,1,undirected weighted graph
+Pajek,USpowerGrid,4941,4941,13188,1,1,0,0,1,1,undirected graph
+Pajek,Wordnet3,82670,82670,132964,1,0,0,0,0.1765463136851033,0.1741230992912098,directed weighted graph
+Pajek,WorldCities,315,100,7518,1,0,0,0,0,0,weighted bipartite graph
+Pajek,yeast,2361,2361,13828,1,1,0,0,1,1,undirected graph
+Pajek,Zewail,6752,6752,54233,1,0,0,0,0.001843929783153858,0.001843929783153858,directed multigraph
+Zitney,extr1b,2836,2836,10965,1,0,0,0,0.003859310586790632,0,chemical process simulation problem sequence
+Zitney,hydr1c,5308,5308,22592,1,0,0,0,0.004126315789473685,0.0006197432492253209,chemical process simulation problem sequence
+Schenk_IBMNA,c-18,2169,2169,15145,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-19,2327,2327,21817,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-20,2921,2921,20445,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-21,3509,3509,32145,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-22,3792,3792,28870,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-23,3969,3969,31079,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-24,4119,4119,35699,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-25,3797,3797,49635,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-26,4307,4307,34537,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-27,4563,4563,30927,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-28,4598,4598,30590,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-29,5033,5033,43731,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-30,5321,5321,65693,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-31,5339,5339,78571,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-32,5975,5975,54471,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-33,6317,6317,56123,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-34,6611,6611,64333,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-35,6537,6537,62891,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-36,7479,7479,65941,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-37,8204,8204,74676,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-38,8127,8127,77689,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-39,9271,9271,116587,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-40,9941,9941,81501,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-41,9769,9769,101635,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-42,10471,10471,110285,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-43,11125,11125,123659,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-44,10728,10728,85000,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-45,13206,13206,174452,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-46,14913,14913,130397,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-47,15343,15343,211401,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-48,18354,18354,166080,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-49,21132,21132,157040,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-50,22401,22401,180245,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-51,23196,23196,203048,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-52,23948,23948,202708,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-53,30235,30235,355139,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-54,31793,31793,385987,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-56,35910,35910,380240,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-57,37833,37833,403373,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-60,43640,43640,298570,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-61,43618,43618,310016,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-65,48066,48066,360428,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-big,345241,345241,2340859,1,0,0,0,1,1,optimization problem
+Schenk_AFE,af_0_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_1_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_2_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_3_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_4_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_5_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_shell10,1508065,1508065,52259885,1,0,1,0,1,1,structural problem
+Schenk_IBMNA,c-64b,51035,51035,707601,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-66b,49989,49989,444851,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-67b,57975,57975,530583,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-73b,169422,169422,1279274,1,0,0,0,1,1,subsequent optimization problem
+QCD,conf5_0-4x4-10,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-14,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-18,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-22,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-26,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-4x4-20,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-4x4-30,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-05,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-10,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-15,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-20,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-20,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-30,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-80,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+Cylshell,s1rmq4m1,5489,5489,262411,1,0,1,1,1,1,structural problem
+Cylshell,s2rmq4m1,5489,5489,263351,1,0,1,1,1,1,structural problem
+Cylshell,s3rmq4m1,5489,5489,262943,1,0,1,1,1,1,structural problem
+Cylshell,s1rmt3m1,5489,5489,217651,1,0,1,1,1,1,structural problem
+Cylshell,s2rmt3m1,5489,5489,217681,1,0,1,1,1,1,structural problem
+Cylshell,s3rmt3m1,5489,5489,217669,1,0,1,1,1,1,structural problem
+Cylshell,s3rmt3m3,5357,5357,207123,1,0,1,1,1,1,structural problem
+Bai,cryg10000,10000,10000,49699,1,0,1,0,0.9974558553112169,0,materials problem
+Bai,cryg2500,2500,2500,12349,1,0,1,0,0.9948218093207433,0,materials problem
+Bai,dw2048,2048,2048,10114,1,0,1,0,0.9848747830399207,0.9481775353334987,electromagnetics problem
+Bai,dw8192,8192,8192,41746,1,0,1,0,0.9626274065685164,0.9154199201287477,electromagnetics problem
+Bai,dwa512,512,512,2480,1,0,1,0,0.9796747967479674,0.9146341463414634,electromagnetics problem
+Bai,dwb512,512,512,2500,1,0,1,0,0.9698189134808853,0.8832997987927566,electromagnetics problem
+Bai,dwg961a,961,961,3405,0,0,1,0,1,0.36,electromagnetics problem
+Bai,dwg961b,961,961,10591,0,0,1,0,1,0.3476635514018692,electromagnetics problem
+Bai,mhd1280a,1280,1280,47906,0,0,1,0,0.8978403914290535,0.3060992070187278,electromagnetics problem
+Bai,mhd1280b,1280,1280,22778,0,0,1,1,1,1,electromagnetics problem
+Bai,mhd3200a,3200,3200,68026,1,0,1,0,0.7676029990571827,0.2674009667619461,electromagnetics problem
+Bai,mhd3200b,3200,3200,18316,1,0,1,1,1,1,electromagnetics problem
+Bai,mhd4800a,4800,4800,102252,1,0,1,0,0.7677879876950033,0.2677033659541848,electromagnetics problem
+Bai,mhd4800b,4800,4800,27520,1,0,1,1,1,1,electromagnetics problem
+Bai,qh1484,1484,1484,6110,1,0,0,0,1,0.05377207062600321,power network problem
+Bai,qh768,768,768,2934,1,0,0,0,0.9347300564061241,0,power network problem
+Bai,rdb1250,1250,1250,7300,1,0,1,0,1,0.7933884297520661,computational fluid dynamics problem
+Bai,rdb1250l,1250,1250,7300,1,0,1,0,1,0.7933884297520661,computational fluid dynamics problem
+Bai,rdb200,200,200,1120,1,0,1,0,1,0.7826086956521739,computational fluid dynamics problem
+Bai,rdb200l,200,200,1120,1,0,1,0,1,0.7826086956521739,computational fluid dynamics problem
+Bai,rdb2048_noL,2048,2048,12032,1,0,1,0,1,0.7948717948717948,computational fluid dynamics problem
+Bai,rdb3200l,3200,3200,18880,1,0,1,0,1,0.7959183673469388,computational fluid dynamics problem
+Bai,rdb450,450,450,2580,1,0,1,0,1,0.7887323943661971,computational fluid dynamics problem
+Bai,rdb450l,450,450,2580,1,0,1,0,1,0.7887323943661971,computational fluid dynamics problem
+Bai,rdb800l,800,800,4640,1,0,1,0,1,0.7916666666666666,computational fluid dynamics problem
+Bai,tols1090,1090,1090,3546,1,0,1,0,0.3178758414360509,0,computational fluid dynamics problem
+Bai,tols2000,2000,2000,5184,1,0,1,0,0.3387276785714285,0,computational fluid dynamics problem
+Bai,tols340,340,340,2196,1,0,1,0,0.2858627858627859,0,computational fluid dynamics problem
+Bai,tols4000,4000,4000,8784,1,0,1,0,0.3606733524355301,0,computational fluid dynamics problem
+Bai,tols90,90,90,1746,1,0,1,0,0.2688172043010753,0,computational fluid dynamics problem
+POLYFLOW,invextr1_new,30412,30412,1793881,1,0,1,0,0.971442083756505,0.7213486599424203,computational fluid dynamics problem
+POLYFLOW,mixtank_new,29957,29957,1990919,1,0,1,0,1,0.9890905426943581,computational fluid dynamics problem
+INPRO,msdoor,415863,415863,19173163,1,0,1,1,1,1,structural problem
+Mittelmann,nug08-3rd,19728,29856,148416,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-30,49944,158489,340635,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-40,66844,217531,466800,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-50,83060,275814,590833,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-60,99431,336421,719557,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-70,114944,390005,833465,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-80,129181,434580,927826,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-90,142823,475448,1014136,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-100,156243,514577,1096002,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail507,507,63516,409856,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail516,516,47827,315412,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail582,582,56097,402290,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail2586,2586,923269,8011362,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail4284,4284,1096894,11284032,1,0,0,0,0,0,linear programming problem
+Mittelmann,sgpf5y6,246077,312540,831976,1,0,0,0,0,0,linear programming problem
+Mittelmann,stormG2_1000,528185,1377306,3459881,1,0,0,0,0,0,linear programming problem
+Mittelmann,watson_1,201155,386992,1055093,1,0,0,0,0,0,linear programming problem
+Mittelmann,watson_2,352013,677224,1846391,1,0,0,0,0,0,linear programming problem
+Mittelmann,cont11_l,1468599,1961394,5382999,1,0,0,0,0,0,linear programming problem
+Mittelmann,cont1_l,1918399,1921596,7031999,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome11,12142,24460,71264,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome12,24284,48920,142528,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome13,48568,97840,285056,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome20,33874,108175,232647,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome21,67748,216350,465294,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos,479119,515905,1526794,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos1,131581,133473,599590,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos2,132568,134128,685087,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos3,512209,518832,2055024,1,0,0,0,0,0,linear programming problem
+Mittelmann,spal_004,10203,321696,46168124,1,0,0,0,0,0,linear programming problem
+Meszaros,gams10am,114,171,407,1,0,0,0,0,0,linear programming problem
+Meszaros,gams30am,354,531,1287,1,0,0,0,0,0,linear programming problem
+Meszaros,gams60am,714,1071,2607,1,0,0,0,0,0,linear programming problem
+Meszaros,gas11,459,862,2166,1,0,0,0,0,0,linear programming problem
+Meszaros,aa01,823,8904,72965,1,1,0,0,0,0,linear programming problem
+Meszaros,aa03,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aa3,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aa4,426,7195,52121,1,1,0,0,0,0,linear programming problem
+Meszaros,aa5,801,8308,65953,1,1,0,0,0,0,linear programming problem
+Meszaros,aa6,646,7292,51728,1,1,0,0,0,0,linear programming problem
+Meszaros,air02,50,6774,61555,1,1,0,0,0,0,linear programming problem
+Meszaros,air03,124,10757,91028,1,1,0,0,0,0,linear programming problem
+Meszaros,air04,823,8904,72965,1,1,0,0,0,0,linear programming problem
+Meszaros,air05,426,7195,52121,1,1,0,0,0,0,linear programming problem
+Meszaros,air06,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aircraft,3754,7517,20267,1,0,0,0,0,0,linear programming problem
+Meszaros,bas1lp,5411,9825,587775,1,0,0,0,0,0,linear programming problem
+Meszaros,baxter,27441,30733,111576,1,0,0,0,0,0,linear programming problem
+Meszaros,car4,16384,33052,63724,1,0,0,0,0,0,linear programming problem
+Meszaros,cari,400,1200,152800,1,0,0,0,0,0,linear programming problem
+Meszaros,ch,3700,8291,24102,1,0,0,0,0,0,linear programming problem
+Meszaros,co5,5774,12325,57993,1,0,0,0,0,0,linear programming problem
+Meszaros,co9,10789,22924,109651,1,0,0,0,0,0,linear programming problem
+Meszaros,complex,1023,1408,46463,1,0,0,0,0,0,linear programming problem
+Meszaros,cq5,5048,11748,51571,1,0,0,0,0,0,linear programming problem
+Meszaros,cq9,9278,21534,96653,1,0,0,0,0,0,linear programming problem
+Meszaros,cr42,905,1513,6614,1,0,0,0,0,0,linear programming problem
+Meszaros,crew1,135,6469,46950,1,1,0,0,0,0,linear programming problem
+Meszaros,dano3mip,3202,15851,81633,1,0,0,0,0,0,linear programming problem
+Meszaros,dbic1,43200,226317,1081843,1,0,0,0,0,0,linear programming problem
+Meszaros,dbir1,18804,45775,1077025,1,0,0,0,0,0,linear programming problem
+Meszaros,dbir2,18906,45877,1158159,1,0,0,0,0,0,linear programming problem
+Meszaros,df2177,630,10358,22336,1,1,0,0,0,0,linear programming problem
+Meszaros,e18,24617,38602,156466,1,0,0,0,0,0,linear programming problem
+Meszaros,ex3sta1,17443,17516,68779,1,0,0,0,0,0,linear programming problem
+Meszaros,farm,7,17,41,1,0,0,0,0,0,linear programming problem
+Meszaros,gams10a,114,171,407,1,0,0,0,0,0,linear programming problem
+Meszaros,gams30a,354,531,1287,1,0,0,0,0,0,linear programming problem
+Meszaros,ge,10099,16369,44825,1,0,0,0,0,0,linear programming problem
+Meszaros,iiasa,669,3639,7317,1,0,0,0,0,0,linear programming problem
+Meszaros,jendrec1,2109,4228,89608,1,0,0,0,0,0,linear programming problem
+Meszaros,kl02,71,36699,212536,1,1,0,0,0,0,linear programming problem
+Meszaros,l9,244,1483,4659,1,0,0,0,0,0,linear programming problem
+Meszaros,lp22,2958,16392,68518,1,0,0,0,0,0,linear programming problem
+Meszaros,lpl2,3294,10881,32232,1,0,0,0,0,0,linear programming problem
+Meszaros,lpl3,10828,33686,100525,1,0,0,0,0,0,linear programming problem
+Meszaros,mod2,34774,66409,199810,1,0,0,0,0,0,linear programming problem
+Meszaros,model1,362,798,3028,1,0,0,0,0,0,linear programming problem
+Meszaros,model2,379,1321,7607,1,0,0,0,0,0,linear programming problem
+Meszaros,model3,1609,4578,23974,1,0,0,0,0,0,linear programming problem
+Meszaros,model4,1337,4962,45753,1,0,0,0,0,0,linear programming problem
+Meszaros,model5,1888,11802,89925,1,0,0,0,0,0,linear programming problem
+Meszaros,model6,2096,5289,27628,1,0,0,0,0,0,linear programming problem
+Meszaros,model7,3358,9582,51027,1,0,0,0,0,0,linear programming problem
+Meszaros,model8,2896,6464,25277,1,0,0,0,0,0,linear programming problem
+Meszaros,model9,2879,10939,55956,1,0,0,0,0,0,linear programming problem
+Meszaros,model10,4400,16819,150372,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsafm,334,2348,2826,1,0,0,0,0,0,linear programming problem
+Meszaros,nemscem,651,1712,3840,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsemm1,3945,75352,1053986,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsemm2,6943,48878,182012,1,0,0,0,0,0,linear programming problem
+Meszaros,nemspmm1,2372,8903,55867,1,0,0,0,0,0,linear programming problem
+Meszaros,nemspmm2,2301,8734,68225,1,0,0,0,0,0,linear programming problem
+Meszaros,nemswrld,7138,28550,192283,1,0,0,0,0,0,linear programming problem
+Meszaros,nl,7039,15325,47035,1,0,0,0,0,0,linear programming problem
+Meszaros,nw14,73,123409,904910,1,1,0,0,0,0,linear programming problem
+Meszaros,p0033,15,48,113,1,0,0,0,0,0,linear programming problem
+Meszaros,p0040,23,63,133,1,0,0,0,0,0,linear programming problem
+Meszaros,p010,10090,19090,118000,1,0,0,0,0,0,linear programming problem
+Meszaros,p0201,133,334,2056,1,0,0,0,0,0,linear programming problem
+Meszaros,p0282,241,523,2207,1,0,0,0,0,0,linear programming problem
+Meszaros,p0291,252,543,2283,1,0,0,0,0,0,linear programming problem
+Meszaros,p0548,176,724,1887,1,0,0,0,0,0,linear programming problem
+Meszaros,p05,5090,9590,59045,1,0,0,0,0,0,linear programming problem
+Meszaros,p2756,755,3511,9692,1,0,0,0,0,0,linear programming problem
+Meszaros,p6000,2095,7967,19826,1,0,0,0,0,0,linear programming problem
+Meszaros,pcb1000,1565,2820,20463,1,0,0,0,0,0,linear programming problem
+Meszaros,pcb3000,3960,7732,57479,1,0,0,0,0,0,linear programming problem
+Meszaros,pf2177,9728,10178,30984,1,1,0,0,0,0,linear programming problem
+Meszaros,primagaz,1554,10836,21665,1,0,0,0,0,0,linear programming problem
+Meszaros,problem,12,46,86,1,0,0,0,0,0,linear programming problem
+Meszaros,progas,1650,1900,8897,1,0,0,0,0,0,linear programming problem
+Meszaros,qiulp,1192,1900,4492,1,0,0,0,0,0,linear programming problem
+Meszaros,r05,5190,9690,104145,1,0,0,0,0,0,linear programming problem
+Meszaros,refine,29,62,153,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfddd,4050,61521,264627,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfdual,8052,74970,282031,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfprim,58866,62716,320591,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen1,520,1544,23794,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen2,1032,3080,47536,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen7,264,776,8034,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen8,520,1544,16058,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen10,2056,6152,64192,1,0,0,0,0,0,linear programming problem
+Meszaros,route,20894,43019,206782,1,0,0,0,0,0,linear programming problem
+Meszaros,seymourl,4944,6316,38493,1,0,0,0,0,0,linear programming problem
+Meszaros,slptsk,2861,3347,72465,1,0,0,0,0,0,linear programming problem
+Meszaros,south31,18425,36321,112398,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v1,5995,197472,588798,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v2,29089,957432,2852184,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v3,33841,1113780,3317736,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v4,3173,63076,491336,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v5,2307,75779,233921,1,0,0,0,0,0,linear programming problem
+Meszaros,t0331-4l,664,46915,430982,1,1,0,0,0,0,linear programming problem
+Meszaros,testbig,17613,31223,61639,1,0,0,0,0,0,linear programming problem
+Meszaros,ulevimin,6590,46937,164538,1,0,0,0,0,0,linear programming problem
+Meszaros,us04,163,28016,297538,1,1,0,0,0,0,linear programming problem
+Meszaros,world,34506,67147,198883,1,0,0,0,0,0,linear programming problem
+Meszaros,zed,116,142,666,1,0,0,0,0,0,linear programming problem
+Meszaros,de063155,852,1848,4913,1,0,0,0,0,0,linear programming problem
+Meszaros,de063157,936,1908,5119,1,0,0,0,0,0,linear programming problem
+Meszaros,de080285,936,1908,5082,1,0,0,0,0,0,linear programming problem
+Meszaros,gen1,769,2561,63086,1,0,0,0,0,0,linear programming problem
+Meszaros,gen2,1121,3264,81855,1,0,0,0,0,0,linear programming problem
+Meszaros,gen4,1537,4298,107103,1,0,0,0,0,0,linear programming problem
+Meszaros,gen,769,2561,63086,1,0,0,0,0,0,linear programming problem
+Meszaros,iprob,3001,3001,9000,1,0,0,0,1,0.5,linear programming problem
+Meszaros,l30,2701,16281,52070,1,0,0,0,0,0,linear programming problem
+Meszaros,stoch_aircraft,3754,7517,20267,1,0,0,0,0,0,linear programming problem
+Meszaros,cep1,1521,4769,8233,1,0,0,0,0,0,linear programming problem
+Meszaros,deter0,1923,5468,11173,1,0,0,0,0,0,linear programming problem
+Meszaros,deter1,5527,15737,32187,1,0,0,0,0,0,linear programming problem
+Meszaros,deter2,6095,17313,35731,1,0,0,0,0,0,linear programming problem
+Meszaros,deter3,7647,21777,44547,1,0,0,0,0,0,linear programming problem
+Meszaros,deter4,3235,9133,19231,1,0,0,0,0,0,linear programming problem
+Meszaros,deter5,5103,14529,29715,1,0,0,0,0,0,linear programming problem
+Meszaros,deter6,4255,12113,24771,1,0,0,0,0,0,linear programming problem
+Meszaros,deter7,6375,18153,37131,1,0,0,0,0,0,linear programming problem
+Meszaros,deter8,3831,10905,22299,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm2-6,1520,2845,12812,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm2-16,3900,7335,32972,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm3_6,6200,12625,57722,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm3_16,41340,85575,392252,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm4_6,22400,47185,265442,1,0,0,0,0,0,linear programming problem
+Meszaros,pgp2,4034,13254,22474,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-125,66185,172431,433256,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-27,14441,37485,94274,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-8,4409,11322,28553,1,0,0,0,0,0,linear programming problem
+Meszaros,degme,185501,659415,8127528,1,0,0,0,0,0,linear programming problem
+Meszaros,karted,46502,133115,1770349,1,0,0,0,0,0,linear programming problem
+Meszaros,tp-6,142752,1014301,11537419,1,0,0,0,0,0,linear programming problem
+Meszaros,ts-palko,22002,47235,1076903,1,0,0,0,0,0,linear programming problem
+Meszaros,delf,3170,6654,15397,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,kleemin,8,16,44,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,large,4282,8617,20635,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsct,23003,37563,697738,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsic,465,897,3449,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsir,4453,10057,154939,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,plddb,3069,5049,10839,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,rat,3136,9408,268908,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,small,677,1400,3207,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,pltexpa,26894,70364,143059,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sc205-2r,35213,62423,123239,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2b,9743,13847,35885,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2c,2447,3479,9005,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2r,32847,46679,120141,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scfxm1-2b,19036,33047,111052,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scfxm1-2r,37980,65943,221388,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2b,1820,3499,7367,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2c,1820,3499,7367,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2r,14364,27691,58439,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2b,5130,35910,112770,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2c,5130,35910,112770,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2r,8650,60550,190210,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2b,15390,33858,99454,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2c,3390,7458,21854,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2r,28830,63426,186366,1,0,0,0,0,0,linear programming problem sequence
+Gleich,wb-cs-stanford,9914,9914,36854,1,1,0,0,0.4572071438616228,0.4572071438616228,directed graph
+Gleich,wb-edu,9845725,9845725,57156537,1,1,0,0,0.3281596169311674,0.3281596169311674,directed graph
+Gleich,wikipedia-20051105,1634989,1634989,19753078,1,1,0,0,0.1211282592272251,0.1211282592272251,directed graph
+Gleich,wikipedia-20060925,2983494,2983494,37269096,1,1,0,0,0.1182841447575249,0.1182841447575249,directed graph
+Gleich,wikipedia-20061104,3148440,3148440,39383235,1,1,0,0,0.1179357318284389,0.1179357318284389,directed graph
+Gleich,wikipedia-20070206,3566907,3566907,45030389,1,1,0,0,0.1171832378930545,0.1171832378930545,directed graph
+UTEP,Dubcova1,16129,16129,253009,1,0,1,1,1,1,2D/3D problem
+UTEP,Dubcova2,65025,65025,1030225,1,0,1,1,1,1,2D/3D problem
+UTEP,Dubcova3,146689,146689,3636643,1,0,1,1,1,1,2D/3D problem
+BenElechi,BenElechi1,245874,245874,13150496,1,0,1,1,1,1,2D/3D problem
+Botonakis,FEM_3D_thermal1,17880,17880,430740,1,0,1,0,1,0.950733904955675,thermal problem
+Botonakis,FEM_3D_thermal2,147900,147900,3489300,1,0,1,0,1,0.9502082959238642,thermal problem
+Wissgott,parabolic_fem,525825,525825,3674625,1,0,1,1,1,1,computational fluid dynamics problem
+Watson,chem_master1,40401,40401,201201,1,0,1,0,1,0,2D/3D problem
+Watson,Baumann,112211,112211,748331,1,0,1,0,1,0,2D/3D problem
+Sinclair,3Dspectralwave,680943,680943,30290827,0,0,1,0,1,1,materials problem
+Sinclair,3Dspectralwave2,292008,292008,12935272,0,0,1,0,1,1,materials problem
+QLi,crashbasis,160000,160000,1750416,1,0,0,0,0.5503013048158469,0.0002439613283568576,optimization problem
+QLi,majorbasis,160000,160000,1750416,1,0,0,0,0.5503013048158469,0.0002376736652548767,optimization problem
+Springer,ESOC,327062,37830,6019939,1,0,0,0,0,0,least squares problem
+Koutsovasilis,F2,71505,71505,5294285,1,0,1,0,1,1,structural problem
+Szczerba,Ill_Stokes,20896,20896,191368,1,0,1,0,0.9897436481194791,0.3299904380293234,computational fluid dynamics problem
+Rajat,Raj1,263743,263743,1300261,1,0,0,0,0.998585875116119,0.5762090211971218,circuit simulation problem
+Muite,Chebyshev1,261,261,2319,1,0,1,0,0.5014577259475219,0,structural problem
+Muite,Chebyshev2,2053,2053,18447,1,0,1,0,0.5001829937782115,0,structural problem
+Muite,Chebyshev3,4101,4101,36879,1,0,1,0,0.5000915248032217,0,structural problem
+Muite,Chebyshev4,68121,68121,5377761,1,0,1,0,0.3020408163265306,0.0002369275506437348,structural problem
+Quaglino,viscoplastic1,4326,4326,61166,1,0,1,0,0.7408163265306122,0,materials problem
+Quaglino,viscoplastic2,32769,32769,381326,1,0,1,0,0.5699899872904575,0,materials problem
+YCheng,psse0,26722,11028,102432,1,0,0,0,0,0,power network problem
+YCheng,psse1,14318,11028,57376,1,0,0,0,0,0,power network problem
+YCheng,psse2,28634,11028,115262,1,0,0,0,0,0,power network problem
+Dehghani,light_in_tissue,29282,29282,406084,0,0,1,0,1,0,electromagnetics problem
+HVDC,hvdc1,24842,24842,158426,1,0,0,0,0.9817003233707516,0.09899271099935641,power network problem
+HVDC,hvdc2,189860,189860,1339638,1,0,0,0,0.9885955341075688,0.06323365458033522,power network problem
+Zaoui,kkt_power,2063494,2063494,12771361,1,0,0,0,1,1,optimization problem
+Rost,RFdevice,74104,74104,365580,0,0,1,0,0.0001203589980660497,0.0001148881345175929,semiconductor device problem
+Lee,fem_filter,74062,74062,1731206,0,0,1,0,1,0.6131971633123011,electromagnetics problem
+Mancktelow,viscorocks,37762,37762,1133641,1,0,1,0,1,0.279507135368047,materials problem
+Rudnyi,water_tank,60740,60740,2035281,1,0,1,0,0.9691204183655847,0.9180067671423384,computational fluid dynamics problem
+Rucci,Rucci1,1977885,109900,7791168,1,0,0,0,0,0,least squares problem
+McRae,ecology1,1000000,1000000,4996000,1,0,1,0,1,1,2D/3D problem
+McRae,ecology2,999999,999999,4995991,1,0,1,1,1,1,2D/3D problem
+NYPA,Maragal_1,32,14,234,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_2,555,350,4357,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_3,1690,860,18391,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_4,1964,1034,26719,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_5,4654,3320,93091,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_6,21255,10152,537694,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_7,46845,26564,1200537,1,0,0,0,0,0,least squares problem
+Marini,eurqsa,7245,7245,46142,1,0,0,0,1,1,economic problem
+Castrillon,denormal,89400,89400,1156224,1,0,0,1,1,1,counter-example problem
+QLi,largebasis,440020,440020,5240084,1,0,0,0,1,0,optimization problem
+MathWorks,QRpivot,660,749,3808,1,0,0,0,0,0,counter-example problem
+Luong,photogrammetry,1388,390,11816,1,0,1,0,0,0,computer graphics/vision problem
+YZhou,circuit204,1020,1020,5883,1,0,0,0,0.4379791625712601,0.3727147631216827,circuit simulation problem
+CEMW,t2em,921632,921632,4590832,1,0,1,0,0.9988182710127548,0.9988182710127548,electromagnetics problem
+CEMW,tmt_unsym,917825,917825,4584801,1,0,1,0,1,0,electromagnetics problem
+CEMW,tmt_sym,726713,726713,5080961,1,0,1,1,1,1,electromagnetics problem
+CEMW,vfem,93476,93476,1434636,0,0,1,0,1,0.8209624504160578,electromagnetics problem
+Schenk,nlpkkt80,1062400,1062400,28192672,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt120,3542400,3542400,95117792,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt160,8345600,8345600,225422112,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt200,16240000,16240000,440225632,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt240,27993600,27993600,760648352,1,0,0,0,1,1,optimization problem
+TKK,s4dkt3m2,90449,90449,3753461,1,1,1,0,1,1,structural problem
+TKK,g3rmt3m3,5357,5357,207695,1,1,1,0,1,1,structural problem
+TKK,t520,5563,5563,286341,1,0,1,0,1,1,structural problem
+TKK,smt,25710,25710,3749582,1,0,1,1,1,1,structural problem
+TKK,engine,143571,143571,4706073,1,0,1,0,1,1,structural problem
+TKK,plbuckle,1282,1282,30644,1,0,1,1,1,1,structural problem
+TKK,cbuckle,13681,13681,676515,1,0,1,1,1,1,structural problem
+TKK,cyl6,13681,13681,714241,1,0,1,0,1,1,structural problem
+TKK,tube1,21498,21498,897056,1,1,1,0,1,1,structural problem
+TKK,tube2,21498,21498,897056,1,0,1,0,1,1,structural problem
+TKK,t2d_q4,9801,9801,87025,1,0,1,0,1,0.6937221589143272,structural problem sequence
+TKK,t2d_q9,9801,9801,87025,1,0,1,0,1,0.6937221589143272,structural problem sequence
+Luong,photogrammetry2,4472,936,37056,1,0,1,0,0,0,computer graphics/vision problem
+Um,2cubes_sphere,101492,101492,1647264,1,0,1,1,1,1,electromagnetics problem
+JGD_BIBD,bibd_9_3,36,84,252,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_9_5,36,126,1260,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_11_5,55,462,4620,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_12_4,66,495,2970,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_12_5,66,792,7920,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_13_6,78,1716,25740,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_14_7,91,3432,72072,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_15_3,105,455,1365,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_15_7,105,6435,135135,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_16_8,120,12870,360360,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_3,136,680,2040,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_4b,136,2380,14280,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_4,136,2380,14280,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_8,136,24310,680680,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_18_9,153,48620,1750320,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_19_9,171,92378,3325608,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_20_10,190,184756,8314020,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_22_8,231,319770,8953560,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_49_3,1176,18424,55272,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_81_2,3240,3240,3240,1,1,0,1,1,1,combinatorial problem
+JGD_BIBD,bibd_81_3,3240,85320,255960,1,1,0,0,0,0,combinatorial problem
+JGD_CAG,CAG_mat1916,1916,1916,195985,1,0,0,0,0.3002540333592691,0.2119864584245809,combinatorial problem
+JGD_CAG,CAG_mat364,364,364,13585,1,0,0,0,0.4155510173209288,0.2804628999319265,combinatorial problem
+JGD_CAG,CAG_mat72,72,72,1012,1,0,0,0,0.5574468085106383,0.3340425531914893,combinatorial problem
+JGD_Forest,TF10,99,107,622,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF11,216,236,1607,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF12,488,552,4231,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF13,1121,1302,11185,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF14,2644,3160,29862,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF15,6334,7742,80057,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF16,15437,19321,216173,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF17,38132,48630,586218,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF18,95368,123867,1597545,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF19,241029,317955,4370721,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz1,2240,768,5120,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz2,4032,4480,21504,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz3,1280,2800,11520,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz4,6784,5252,46528,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz5,7382,2882,44056,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz6,7576,3016,45456,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz7,10164,1740,40424,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz8,16728,7176,100368,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz9,19588,4164,97508,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz10,19588,4164,97508,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz11,47104,30144,329728,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-6,30,77,251,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-7,62,150,549,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-8,156,292,1711,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-9,342,540,4570,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-10,652,976,10273,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-11,1227,1692,22110,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-12,2296,2875,46260,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-13,3994,4731,91209,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-14,6735,7621,173337,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-15,11369,11987,323509,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-16,18846,18485,588326,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-17,30162,27944,1035008,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-18,47894,41550,1790490,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_6,469,201,2526,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_7,636,470,5378,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_8,544,637,6153,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_9,340,545,4349,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_10,163,341,2053,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d10,1,60,8,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d11,1019,60,1513,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d12,8899,1019,37519,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d13,47271,8899,356232,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d14,171375,47271,1831183,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d15,460261,171375,6080381,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d16,955128,460261,14488881,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d17,1548650,955128,25978098,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d18,1955309,1548650,35590540,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d19,1911130,1955309,37322725,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d20,1437547,1911130,29893084,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d21,822922,1437547,18174775,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d22,349443,822922,8251000,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d23,105054,349443,2695430,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d24,21074,105054,593892,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d25,2798,21074,81671,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d26,305,2798,7412,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,c8_mat11,4562,5761,2462970,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,c8_mat11_I,4562,5761,2462970,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,f855_mat9,2456,2511,171214,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,f855_mat9_I,2456,2511,171214,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,HFE18_96_in,2372,4096,933343,1,1,0,0,0,0,combinatorial problem
+JGD_Groebner,rkat7_mat5,694,738,38114,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,robot24c1_mat5,404,302,15118,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,robot24c1_mat5_J,302,404,15118,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch3-3-b1,18,9,36,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch3-3-b2,6,18,18,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b1,72,16,144,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b2,96,72,288,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b3,24,96,96,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b1,200,25,400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b2,600,200,1800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b3,600,600,2400,1,0,0,0,0.02168473728106756,0.01417848206839033,combinatorial problem
+JGD_Homology,ch5-5-b4,120,600,600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b1,450,36,900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b2,2400,450,7200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b3,5400,2400,21600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b4,4320,5400,21600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b5,720,4320,4320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b1,630,42,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b2,4200,630,12600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b3,12600,4200,50400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b4,15120,12600,75600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b5,5040,15120,30240,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b1,882,49,1764,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b2,7350,882,22050,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b5,35280,52920,211680,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b1,1176,56,2352,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b2,11760,1176,35280,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b3,58800,11760,235200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b4,141120,58800,705600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b5,141120,141120,846720,1,0,0,0,0.0003732057190233348,0.0002054993516141147,combinatorial problem
+JGD_Homology,ch7-9-b1,1512,63,3024,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b2,17640,1512,52920,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b3,105840,17640,423360,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b4,317520,105840,1587600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b5,423360,317520,2540160,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b1,1568,64,3136,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b2,18816,1568,56448,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b3,117600,18816,470400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b4,376320,117600,1881600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b5,564480,376320,3386880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b1,210,21,420,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b13,6300,25605,88200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b14,920,6300,13800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b15,60,920,960,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b2,1330,210,3990,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b3,5970,1330,23880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b4,20058,5970,100290,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,D6-6,120576,23740,146520,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,klein-b1,30,10,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,klein-b2,20,30,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,lutz30-23-b6,1716,3003,12012,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,m133-b3,200200,200200,800800,1,0,0,0,4.495504495504496e-05,2.747252747252747e-05,combinatorial problem
+JGD_Homology,mk10-b1,630,45,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b2,3150,630,9450,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b3,4725,3150,18900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b4,945,4725,4725,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b1,990,55,1980,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b2,6930,990,20790,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b3,17325,6930,69300,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b4,10395,17325,51975,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b4b,9450,17325,47250,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b1,1485,66,2970,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b2,13860,1485,41580,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b3,51975,13860,207900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b4,62370,51975,311850,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b5,10395,62370,62370,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk13-b5,135135,270270,810810,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b1,378,36,756,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b2,1260,378,3780,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b3,945,1260,3780,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b10,30,306,330,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b1,105,15,210,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b3,1365,455,5460,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b4,3003,1365,15015,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b5,4945,3003,29670,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b6,5715,4945,40005,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b7,3990,5715,31920,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b8,1470,3990,13230,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b9,306,1470,3060,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b1,15,6,30,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b2,20,15,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b3,15,20,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b4,6,15,30,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b1,45,10,90,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b2,120,45,360,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b3,210,120,840,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b4,252,210,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b5,210,252,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b6,120,210,840,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b7,30,120,240,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b10,675,2511,7425,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b1,105,105,210,1,0,0,0,0.08571428571428572,0.0761904761904762,combinatorial problem
+JGD_Homology,n3c6-b11,60,675,720,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b3,1365,455,5460,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b4,3003,1365,15015,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b5,5005,3003,30030,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b6,6435,5005,45045,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b7,6435,6435,51480,1,0,0,0,1,0.5333333333333333,combinatorial problem
+JGD_Homology,n3c6-b8,4935,6435,44415,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b9,2511,4935,25110,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b10,120,630,1320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b1,105,15,210,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b11,10,120,120,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b3,1350,455,5400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b4,2852,1350,14260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b5,4340,2852,26040,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b6,4735,4340,33145,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b7,3635,4735,29080,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b8,1895,3635,17055,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b9,630,1895,6300,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b10,132402,186558,1456422,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b11,69235,132402,830820,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b1,210,21,420,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b12,25605,69235,332865,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b13,6300,25605,88200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b14,920,6300,13800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b15,60,920,960,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b2,1330,210,3990,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b3,5970,1330,23880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b4,20058,5970,100290,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b5,51813,20058,310878,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b6,104115,51813,728805,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b7,163215,104115,1305720,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b8,198895,163215,1790055,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b9,186558,198895,1865580,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b1,17160,286,34320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b2,200200,17160,600600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b3,200200,200200,800800,1,0,0,0,7.492516848797264e-05,2.997006739518906e-05,combinatorial problem
+QY,case39,40216,40216,1042160,1,0,0,0,1,1,power network problem sequence
+JGD_Kocay,Trec3,1,2,1,1,1,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec4,2,3,3,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec5,3,7,12,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec6,6,15,40,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec7,11,36,147,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec8,23,84,549,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec9,47,201,2147,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec10,106,478,8612,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec11,235,1138,35705,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec12,551,2726,151219,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec13,1301,6561,654517,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec14,3159,15905,2872265,1,0,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_2_1,85,85,254,1,1,0,0,0.03252032520325204,0.03252032520325204,combinatorial problem
+JGD_Margulies,cat_ears_2_4,1009,2689,7982,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_3_1,204,181,542,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_3_4,5226,13271,39592,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_4_1,377,313,938,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_4_4,19020,44448,132888,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_4_1,121,129,386,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_4_4,1837,5529,16466,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_5_1,211,201,602,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_5_4,5226,14721,43942,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_7_1,463,393,1178,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_7_4,27693,67593,202218,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_8_1,625,513,1538,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_8_4,55081,125361,375266,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_10_4_1,349651,330751,992252,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_6_2_1,601,676,2027,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_8_3_1,15737,15681,47042,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_3_1,21,25,74,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_4_1,36,41,122,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_5_1,57,61,182,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_601,902103,723605,2170814,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_6_1,83,85,254,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_7_1,114,113,338,1,1,0,0,0,0,combinatorial problem
+JGD_Relat,rel3,12,5,18,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel4,66,12,104,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel5,340,35,656,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel6,2340,157,5101,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel7,21924,1045,50636,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel8,345688,12347,821839,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel9,9888048,274669,23667183,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat3,12,5,24,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat4,66,12,172,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat5,340,35,1058,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat6,2340,157,8108,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat7b,21924,1045,81355,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat7,21924,1045,81355,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat8,345688,12347,1334038,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat9,12360060,549336,38955420,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_5,434,115,1832,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_6,970,435,6491,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_7,1270,971,12714,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_8,1132,1271,14966,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_9,815,1133,12395,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_10,460,816,7614,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_11,169,461,2952,1,0,0,0,0,0,combinatorial problem
+JGD_SPG,08blocks,300,300,592,1,0,0,0,0.0273972602739726,0,combinatorial problem
+JGD_SPG,EX1,560,560,8736,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX2,560,560,8736,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX3,2600,2600,71760,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX4,2600,2600,71760,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX5,6545,6545,295680,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX6,6545,6545,295680,1,1,0,0,1,1,combinatorial problem
+JGD_Taha,abtaha2,37932,331,137228,1,0,0,0,0,0,combinatorial problem
+JGD_Taha,abtaha1,14596,209,51307,1,0,0,0,0,0,combinatorial problem
+JGD_Trefethen,Trefethen_20b,19,19,147,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20,20,20,158,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_150,150,150,2040,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_200b,199,199,2873,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_200,200,200,2890,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_300,300,300,4678,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_500,500,500,8478,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_700,700,700,12654,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_2000,2000,2000,41906,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20000b,19999,19999,554435,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20000,20000,20000,554466,1,0,0,1,1,1,combinatorial problem
+QY,case9,14454,14454,147972,1,0,0,0,1,1,power network problem sequence
+FreeFieldTechnologies,mono_500Hz,169410,169410,5033796,0,0,1,0,1,0.820796293715178,acoustics problem
+Freescale,Freescale1,3428755,3428755,17052626,1,0,0,0,0.9061379876258038,0.3945743467477048,circuit simulation problem
+NYPA,Maragal_8,33212,75077,1308415,1,0,0,0,0,0,least squares problem
+Bates,sls,1748122,62729,6804304,1,0,0,0,0,0,least squares problem
+TSOPF,TSOPF_RS_b2383,38120,38120,16171169,1,0,0,0,0.002485718029041526,0.0003350401831305099,power network problem
+TSOPF,TSOPF_FS_b300,29214,29214,4400122,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c1,10798,10798,608540,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c3,30798,30798,1801300,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c4,40798,40798,2398220,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c1,29214,29214,4400122,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c2,56814,56814,8767466,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c3,84414,84414,13135930,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c19,76216,76216,1977600,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c30,120216,120216,3121160,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c7,28216,28216,730080,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b9_c1,2454,2454,25032,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b9_c6,14454,14454,147972,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_RS_b162_c1,5374,5374,205399,1,0,0,0,0.02981942459702805,0.002418331351367556,power network problem
+TSOPF,TSOPF_RS_b162_c3,15374,15374,610299,1,0,0,0,0.02683526094131803,0.0008133934303355415,power network problem
+TSOPF,TSOPF_RS_b162_c4,20374,20374,812749,1,0,0,0,0.02645844479664045,0.0006107347997698388,power network problem
+TSOPF,TSOPF_RS_b2052_c1,25626,25626,6761100,1,0,0,0,0.003886561090908282,0.0002050869579089441,power network problem
+TSOPF,TSOPF_RS_b2383_c1,38120,38120,16171169,1,0,0,0,0.002485718029041526,0.0003350401831305099,power network problem
+TSOPF,TSOPF_RS_b300_c1,14538,14538,1474325,1,0,0,0,0.01034334678703541,0.0003506683588241378,power network problem
+TSOPF,TSOPF_RS_b300_c2,28338,28338,2943887,1,0,0,0,0.00991209710027776,0.0001755931670937033,power network problem
+TSOPF,TSOPF_RS_b300_c3,42138,42138,4413449,1,0,0,0,0.009768063952888569,0.0001171197776188222,power network problem
+TSOPF,TSOPF_RS_b39_c19,38098,38098,684206,1,0,0,0,0.05914025923776359,0.0001300058038305281,power network problem
+TSOPF,TSOPF_RS_b39_c30,60098,60098,1079986,1,0,0,0,0.05903687108113011,8.236061201778597e-05,power network problem
+TSOPF,TSOPF_RS_b39_c7,14098,14098,252446,1,0,0,0,0.05962284731399325,0.0003524007299729407,power network problem
+TSOPF,TSOPF_RS_b678_c1,18696,18696,4396289,1,0,0,0,0.004448301852317109,0.0003256971884064591,power network problem
+TSOPF,TSOPF_RS_b678_c2,35696,35696,8781949,1,0,0,0,0.004170134538170976,0.0001630280691806068,power network problem
+TSOPF,TSOPF_RS_b9_c6,7224,7224,54082,1,0,0,0,0.1544436146377894,0.0002560546249866638,power network problem
+Lee,fem_hifreq_circuit,491100,491100,20239237,0,0,1,0,0.999999037883928,0.4990933575151925,electromagnetics problem
+Buss,connectus,512,394792,1127525,1,1,0,0,0,0,undirected bipartite graph
+Yoshiyasu,image_interp,240000,120000,711683,1,0,1,0,0,0,computer graphics/vision problem
+Yoshiyasu,mesh_deform,234023,9393,853829,1,0,1,0,0,0,computer graphics/vision problem
+Priebel,130bit,584,575,6120,1,1,0,0,0,0,combinatorial problem
+Priebel,145bit,1002,993,11315,1,1,0,0,0,0,combinatorial problem
+Priebel,162bit,3606,3597,37118,1,1,0,0,0,0,combinatorial problem
+Priebel,176bit,7441,7431,82270,1,1,0,0,0,0,combinatorial problem
+Priebel,192bit,13691,13682,154303,1,1,0,0,0,0,combinatorial problem
+Priebel,208bit,24430,24421,299756,1,1,0,0,0,0,combinatorial problem
+MathWorks,TS,2142,2142,45262,1,0,0,0,0.9525732031943213,0.04130434782608695,counter-example problem
+Botonakis,thermomech_TC,102158,102158,711558,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_TK,102158,102158,711558,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_dM,204316,204316,1423116,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_dK,204316,204316,2846228,1,0,1,0,1,0.6652727267221619,thermal problem
+MaxPlanck,shallow_water1,81920,81920,327680,1,0,1,1,1,1,computational fluid dynamics problem
+MaxPlanck,shallow_water2,81920,81920,327680,1,0,1,1,1,1,computational fluid dynamics problem
+Buss,12month1,12471,872622,22624727,1,1,0,0,0,0,undirected bipartite graph
+Clark,tomographic1,73159,59498,647495,1,0,1,0,0,0,computer graphics/vision problem
+Bourchtein,atmosmodd,1270432,1270432,8814880,1,0,1,0,1,0.6690207156308852,computational fluid dynamics problem
+Bourchtein,atmosmodj,1270432,1270432,8814880,1,0,1,0,1,0.6690207156308852,computational fluid dynamics problem
+Bourchtein,atmosmodl,1489752,1489752,10319760,1,0,1,0,1,0.6714503542918647,computational fluid dynamics problem
+Bourchtein,atmosmodm,1489752,1489752,10319760,1,0,1,0,1,0.6714503542918647,computational fluid dynamics problem
+Puri,ABACUS_shell_ud,23412,23412,218484,1,0,1,0,1,0.9753731955380578,model reduction problem
+Puri,ABACUS_shell_ld,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Puri,ABACUS_shell_md,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Puri,ABACUS_shell_hd,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Stevenson,LargeRegFile,2111154,801374,4944201,1,0,0,0,0,0,circuit simulation problem
+Freescale,memchip,2707524,2707524,13343948,1,0,0,0,0.9058013004223939,0.4015860962358702,circuit simulation problem
+Freescale,transient,178866,178866,961368,1,0,0,0,0.9996742983044353,0.243597788123496,circuit simulation problem
+Freescale,circuit5M,5558326,5558326,59524291,1,0,0,0,0.9999998517635799,0.4198865531852634,circuit simulation problem
+Freescale,circuit5M_dc,3523317,3523317,14865409,1,0,0,0,0.9072118240231114,0.7150571517141635,circuit simulation problem
+Grund,poli3,16955,16955,37849,1,0,0,0,0.00507322676366421,0.0005743275581506652,economic problem
+Grund,poli4,33833,33833,73249,1,0,0,0,0.003551857113862391,0.0002029632636492795,economic problem
+Belcastro,human_gene1,22283,22283,24669643,1,0,0,0,1,1,undirected weighted graph
+Belcastro,human_gene2,14340,14340,18068388,1,0,0,0,1,1,undirected weighted graph
+Belcastro,mouse_gene,45101,45101,28967291,1,0,0,0,1,1,undirected weighted graph
+Um,offshore,259789,259789,4242673,1,0,1,1,1,1,electromagnetics problem
+SNAP,soc-Epinions1,75888,75888,508837,1,1,0,0,0.405226035056413,0.405226035056413,directed graph
+SNAP,soc-LiveJournal1,4847571,4847571,68993773,1,1,0,0,0.7484193555024753,0.7484193555024753,directed graph
+SNAP,soc-Slashdot0811,77360,77360,905468,1,1,0,0,0.8669352939826918,0.8669352939826918,directed graph
+SNAP,soc-Slashdot0902,82168,82168,948464,1,1,0,0,0.8410650442849082,0.8410650442849082,directed graph
+SNAP,wiki-Vote,8297,8297,103689,1,1,0,0,0.0564572905515532,0.0564572905515532,directed graph
+SNAP,email-EuAll,265214,265214,420045,1,1,0,0,0.2600511748250413,0.2600511748250413,directed graph
+SNAP,email-Enron,36692,36692,367662,1,1,0,0,1,1,directed graph
+SNAP,wiki-Talk,2394385,2394385,5021410,1,1,0,0,0.1441208744157517,0.1441208744157517,directed graph
+SNAP,cit-HepPh,34546,34546,421578,1,1,0,0,0.003117186276789061,0.003117186276789061,directed graph
+SNAP,cit-HepTh,27770,27770,352807,1,1,0,0,0.002738343613933237,0.002738343613933237,directed graph
+SNAP,cit-Patents,3774768,3774768,16518948,1,1,0,0,0,0,directed graph
+SNAP,ca-AstroPh,18772,18772,396160,1,1,0,0,1,1,undirected graph
+SNAP,ca-CondMat,23133,23133,186936,1,1,0,0,1,1,undirected graph
+SNAP,ca-GrQc,5242,5242,28980,1,1,0,0,1,1,undirected graph
+SNAP,ca-HepPh,12008,12008,237010,1,1,0,0,1,1,undirected graph
+SNAP,ca-HepTh,9877,9877,51971,1,1,0,0,1,1,undirected graph
+SNAP,web-BerkStan,685230,685230,7600595,1,1,0,0,0.2502764586193581,0.2502764586193581,directed graph
+SNAP,web-Google,916428,916428,5105039,1,1,0,0,0.3067510355944391,0.3067510355944391,directed graph
+SNAP,web-NotreDame,325729,325729,1497134,1,1,0,0,0.5165359238309862,0.5165359238309862,directed graph
+SNAP,web-Stanford,281903,281903,2312497,1,1,0,0,0.2766368994208425,0.2766368994208425,directed graph
+SNAP,amazon0302,262111,262111,1234877,1,1,0,0,0.5427018237443891,0.5427018237443891,directed graph
+SNAP,amazon0312,400727,400727,3200440,1,1,0,0,0.5315337891039982,0.5315337891039982,directed graph
+SNAP,amazon0505,410236,410236,3356824,1,1,0,0,0.5465803390347542,0.5465803390347542,directed graph
+SNAP,amazon0601,403394,403394,3387388,1,1,0,0,0.5573497928197183,0.5573497928197183,directed graph
+SNAP,p2p-Gnutella04,10879,10879,39994,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella05,8846,8846,31839,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella06,8717,8717,31525,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella08,6301,6301,20777,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella09,8114,8114,26013,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella24,26518,26518,65369,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella25,22687,22687,54705,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella30,36682,36682,88328,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella31,62586,62586,147892,1,1,0,0,0,0,directed graph
+SNAP,roadNet-CA,1971281,1971281,5533214,1,1,0,0,1,1,undirected graph
+SNAP,roadNet-PA,1090920,1090920,3083796,1,1,0,0,1,1,undirected graph
+SNAP,roadNet-TX,1393383,1393383,3843320,1,1,0,0,1,1,undirected graph
+SNAP,as-735,7716,7716,26467,1,1,0,0,1,1,undirected graph sequence
+SNAP,as-Skitter,1696415,1696415,22190596,1,1,0,0,1,1,undirected graph
+SNAP,as-caida,31379,31379,106762,1,0,0,0,1,0.07869841329311927,directed weighted graph sequence
+SNAP,Oregon-1,11492,11492,46818,1,1,0,0,1,1,undirected graph sequence
+SNAP,Oregon-2,11806,11806,65460,1,1,0,0,1,1,undirected graph sequence
+SNAP,soc-sign-epinions,131828,131828,841372,1,0,0,0,0.3082520316984202,0.3018224331855771,directed weighted graph
+SNAP,soc-sign-Slashdot081106,77357,77357,516575,1,0,0,0,0.1859207278710739,0.1786110438948846,directed weighted graph
+SNAP,soc-sign-Slashdot090216,81871,81871,545671,1,0,0,0,0.175926519826049,0.168574104176326,directed weighted graph
+SNAP,soc-sign-Slashdot090221,82144,82144,549202,1,0,0,0,0.1774246998372184,0.1703271291801559,directed weighted graph
+Dziekonski,gsm_106857,589446,589446,21758924,1,0,1,0,1,1,electromagnetics problem
+Gleich,flickr,820878,820878,9837214,1,1,0,0,0.653017002578169,0.653017002578169,directed graph
+Gleich,minnesota,2642,2642,6606,1,1,0,0,1,1,undirected graph
+Gleich,usroads-48,126146,126146,323900,1,1,0,0,1,1,undirected graph
+Gleich,usroads,129164,129164,330870,1,1,0,0,1,1,undirected graph
+Fluorem,DK01R,903,903,11766,1,0,1,0,0.9614287029365737,0,computational fluid dynamics problem
+Fluorem,GT01R,7980,7980,430909,1,0,1,0,0.8811455350661695,9.457852263618717e-06,computational fluid dynamics problem
+Fluorem,PR02R,161070,161070,8185136,1,0,1,0,0.9476492341912441,0.0001697393815055858,computational fluid dynamics problem
+Fluorem,RM07R,381689,381689,37464962,1,0,1,0,0.9261667922354103,4.260681089287885e-06,computational fluid dynamics problem
+Rommes,ww_36_pmec_36,66,66,1194,1,0,1,0,0.3339191564147627,0,eigenvalue/model reduction problem
+Rommes,ww_vref_6405,13251,13251,48737,1,0,1,0,0.707540090603374,0.5856980072816208,eigenvalue/model reduction problem
+Rommes,xingo_afonso_itaipu,13250,13250,48735,1,0,1,0,0.7075597554196776,0.5857142857142857,eigenvalue/model reduction problem
+Rommes,mimo8x8_system,13309,13309,48872,1,0,1,0,0.7060291752177048,0.5844472793832159,eigenvalue/model reduction problem
+Rommes,mimo28x28_system,13251,13251,48737,1,0,1,0,0.707540090603374,0.5856980072816208,eigenvalue/model reduction problem
+Rommes,mimo46x46_system,13250,13250,48735,1,0,1,0,0.7075597554196776,0.5857142857142857,eigenvalue/model reduction problem
+Rommes,juba40k,40337,40337,144945,1,0,1,0,0.6934462083788981,0.5830536596402579,eigenvalue/model reduction problem
+Rommes,bauru5727,40366,40366,145019,1,0,1,0,0.6931521565005984,0.5828064190876452,eigenvalue/model reduction problem
+Rommes,zeros_nopss_13k,13296,13296,48827,1,0,1,0,0.7083056110002218,0.5842204479929031,eigenvalue/model reduction problem
+Rommes,descriptor_xingo6u,20738,20738,73916,1,0,1,0,0.6848202865775669,0.5745268504272713,eigenvalue/model reduction problem
+Rommes,nopss_11k,11685,11685,44941,1,0,1,0,0.7502077151335311,0.6233827893175075,eigenvalue/model reduction problem
+Rommes,xingo3012,20944,20944,74386,1,0,1,0,0.681002526603102,0.5712336093539642,eigenvalue/model reduction problem
+Rommes,bips98_606,7135,7135,34738,1,0,1,0,0.9086859688195991,0.7583878152166104,eigenvalue/model reduction problem
+Rommes,bips98_1142,9735,9735,40983,1,0,1,0,0.8020552507215579,0.6694154587839767,eigenvalue/model reduction problem
+Rommes,bips98_1450,11305,11305,44678,1,0,1,0,0.7593684272891549,0.6277809047012471,eigenvalue/model reduction problem
+Rommes,bips07_1693,13275,13275,49044,1,0,1,0,0.706761938919083,0.5845449278560985,eigenvalue/model reduction problem
+Rommes,bips07_1998,15066,15066,62198,1,0,1,0,0.7978660841804587,0.6687809795849786,eigenvalue/model reduction problem
+Rommes,bips07_2476,16861,16861,66498,1,0,1,0,0.7574573297176583,0.6349098739830914,eigenvalue/model reduction problem
+Rommes,bips07_3078,21128,21128,75729,1,0,1,0,0.6861363964744979,0.5750975292587777,eigenvalue/model reduction problem
+Rommes,M10PI_n1,528,528,1317,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M20PI_n1,1028,1028,2547,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M40PI_n1,2028,2028,5007,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M80PI_n1,4028,4028,9927,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M10PI_n,682,682,1633,1,0,1,0,1,0.1132075471698113,eigenvalue/model reduction problem
+Rommes,M20PI_n,1182,1182,2881,1,0,1,0,1,0.04173622704507512,eigenvalue/model reduction problem
+Rommes,M40PI_n,2182,2182,5341,1,0,1,0,1,0.02274795268425842,eigenvalue/model reduction problem
+Rommes,M80PI_n,4182,4182,10261,1,0,1,0,1,0.01191043353978085,eigenvalue/model reduction problem
+Rommes,S10PI_n1,528,528,1317,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S20PI_n1,1028,1028,2547,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S40PI_n1,2028,2028,5007,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S80PI_n1,4028,4028,9927,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S10PI_n,682,682,1633,1,0,1,0,1,0.1132075471698113,eigenvalue/model reduction problem
+Rommes,S20PI_n,1182,1182,2881,1,0,1,0,1,0.04173622704507512,eigenvalue/model reduction problem
+Rommes,S40PI_n,2182,2182,5341,1,0,1,0,1,0.02274795268425842,eigenvalue/model reduction problem
+Rommes,S80PI_n,4182,4182,10261,1,0,1,0,1,0.01191043353978085,eigenvalue/model reduction problem
+Williams,pdb1HYS,36417,36417,4344765,1,0,0,1,1,1,weighted undirected graph
+Williams,consph,83334,83334,6010480,1,0,1,1,1,1,2D/3D problem
+Williams,cant,62451,62451,4007383,1,0,1,1,1,1,2D/3D problem
+Williams,mac_econ_fwd500,206500,206500,1273389,1,0,0,0,0.05995735832675801,0.005599217836274841,economic problem
+Williams,mc2depi,525825,525825,2100225,1,0,1,0,0,0,2D/3D problem
+Williams,cop20k_A,121192,121192,2624331,1,0,1,0,1,1,2D/3D problem
+Williams,webbase-1M,1000005,1000005,3105536,1,0,0,0,0.09552554676231316,0.01588957844838191,weighted directed graph
+Freescale,FullChip,2987012,2987012,26621983,1,0,0,0,0.9999996192108144,0.005614865134161801,circuit simulation problem
+Dattorro,EternityII_E,11077,262144,1503732,1,0,0,0,0,0,optimization problem
+Dattorro,EternityII_Etilde,10054,204304,1170516,1,0,0,0,0,0,optimization problem
+Dattorro,EternityII_A,7362,150638,782087,1,0,0,0,0,0,optimization problem
+Fluorem,HV15R,2017169,2017169,283073458,1,0,1,0,0.8446615474952066,0.0007082780488857875,computational fluid dynamics problem
+Dziekonski,dielFilterV2clx,607232,607232,25309272,0,0,1,0,1,0.9712899015627859,electromagnetics problem
+Dziekonski,dielFilterV2real,1157456,1157456,48538952,1,0,1,0,1,1,electromagnetics problem
+Dziekonski,dielFilterV3clx,420408,420408,32886208,0,0,1,0,1,0.8873627016737613,electromagnetics problem
+Dziekonski,dielFilterV3real,1102824,1102824,89306020,1,0,1,0,1,1,electromagnetics problem
+Newman,adjnoun,112,112,850,1,1,0,0,1,1,undirected graph
+Newman,as-22july06,22963,22963,96872,1,1,0,0,1,1,undirected graph
+Newman,astro-ph,16706,16706,242502,1,0,0,0,1,1,undirected weighted graph
+Newman,celegansneural,297,297,2345,1,0,0,0,0.1680170575692964,0.04946695095948828,directed weighted graph
+Newman,cond-mat,16726,16726,95188,1,0,0,0,1,1,undirected weighted graph
+Newman,cond-mat-2003,31163,31163,240058,1,0,0,0,1,1,undirected weighted graph
+Newman,cond-mat-2005,40421,40421,351382,1,0,0,0,1,1,undirected weighted graph
+Newman,dolphins,62,62,318,1,1,0,0,1,1,undirected graph
+Newman,football,115,115,1226,1,0,0,0,1,1,undirected multigraph
+Newman,hep-th,8361,8361,31502,1,0,0,0,1,1,undirected weighted graph
+Newman,karate,34,34,156,1,1,0,0,1,1,undirected graph
+Newman,lesmis,77,77,508,1,0,0,0,1,1,undirected weighted graph
+Newman,netscience,1589,1589,5484,1,0,0,0,1,1,undirected weighted graph
+Newman,polblogs,1490,1490,19025,1,0,0,0,0.242561244874356,0.2414046893071181,directed multigraph
+Newman,polbooks,105,105,882,1,1,0,0,1,1,undirected graph
+Newman,power,4941,4941,13188,1,1,0,0,1,1,undirected graph
+Arenas,PGPgiantcompo,10680,10680,48632,1,0,0,0,1,1,undirected multigraph
+Arenas,jazz,198,198,5484,1,0,0,0,1,1,undirected multigraph
+Arenas,celegans_metabolic,453,453,4065,1,0,0,0,1,1,undirected multigraph
+Arenas,email,1133,1133,10902,1,1,0,0,1,1,undirected graph
+AG-Monien,3elt,4720,4720,27444,1,1,1,0,1,1,2D/3D problem
+AG-Monien,3elt_dual,9000,9000,26556,1,1,1,0,1,1,2D/3D problem
+AG-Monien,airfoil1,4253,4253,24578,1,1,1,0,1,1,2D/3D problem
+AG-Monien,airfoil1_dual,8034,8034,23626,1,1,1,0,1,1,2D/3D problem
+AG-Monien,big_dual,30269,30269,89858,1,1,1,0,1,1,2D/3D problem
+AG-Monien,crack,10240,10240,60760,1,1,1,0,1,1,2D/3D problem
+AG-Monien,crack_dual,20141,20141,60086,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid1,252,252,952,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid1_dual,224,224,840,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid2,3296,3296,12864,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid2_dual,3136,3136,12224,1,1,1,0,1,1,2D/3D problem
+AG-Monien,netz4504,1961,1961,5156,1,1,1,0,1,1,2D/3D problem
+AG-Monien,netz4504_dual,615,615,2342,1,1,1,0,1,1,2D/3D problem
+AG-Monien,ukerbe1,5981,5981,15704,1,1,1,0,1,1,2D/3D problem
+AG-Monien,ukerbe1_dual,1866,1866,7076,1,1,1,0,1,1,2D/3D problem
+AG-Monien,whitaker3,9800,9800,57978,1,1,1,0,1,1,2D/3D problem
+AG-Monien,whitaker3_dual,19190,19190,57162,1,1,1,0,1,1,2D/3D problem
+AG-Monien,brack2,62631,62631,733118,1,1,1,0,1,1,2D/3D problem
+AG-Monien,wave,156317,156317,2118662,1,1,1,0,1,1,2D/3D problem
+AG-Monien,diag,2559,2559,8184,1,1,1,0,1,1,2D/3D problem
+AG-Monien,L,956,956,3640,1,1,1,0,1,1,2D/3D problem
+AG-Monien,L-9,17983,17983,71192,1,1,1,0,1,1,2D/3D problem
+AG-Monien,stufe,1036,1036,3736,1,1,1,0,1,1,2D/3D problem
+AG-Monien,stufe-10,24010,24010,92828,1,1,1,0,1,1,2D/3D problem
+AG-Monien,biplane-9,21701,21701,84076,1,1,1,0,1,1,2D/3D problem
+AG-Monien,shock-9,36476,36476,142580,1,1,1,0,1,1,2D/3D problem
+AG-Monien,bfly,49152,49152,196608,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,cage,366,366,5124,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,cca,49152,49152,139264,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,ccc,49152,49152,147456,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,debr,1048576,1048576,4194298,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,se,32768,32768,98300,1,1,0,0,1,1,undirected graph sequence
+LAW,cnr-2000,325557,325557,3216152,1,1,0,0,0.2491384628169437,0.2491384628169437,directed graph
+LAW,in-2004,1382908,1382908,16917053,1,1,0,0,0.3564974165403691,0.3564974165403691,directed graph
+LAW,eu-2005,862664,862664,19235140,1,1,0,0,0.277066804642518,0.277066804642518,directed graph
+LAW,enron,69244,69244,276143,1,1,0,0,0.1468201946046729,0.1468201946046729,directed graph
+LAW,amazon-2008,735323,735323,5158388,1,1,0,0,0.6338864001699756,0.6338864001699756,directed graph
+LAW,ljournal-2008,5363260,5363260,79023142,1,1,0,0,0.7302651670539438,0.7302651670539438,directed graph
+LAW,hollywood-2009,1139905,1139905,113891327,1,1,0,0,1,1,undirected graph
+LAW,dblp-2010,326186,326186,1615400,1,1,0,0,1,1,undirected graph
+LAW,webbase-2001,118142155,118142155,1019903190,1,1,0,0,0.2780598082364509,0.2780598082364509,directed graph
+LAW,uk-2002,18520486,18520486,298113762,1,1,0,0,0.2084315853924949,0.2084315853924949,directed graph
+LAW,indochina-2004,7414866,7414866,194109311,1,1,0,0,0.4240142027924715,0.4240142027924715,directed graph
+LAW,it-2004,41291594,41291594,1150725436,1,1,0,0,0.1906175218924703,0.1906175218924703,directed graph
+LAW,arabic-2005,22744080,22744080,639999458,1,1,0,0,0.2447917196533005,0.2447917196533005,directed graph
+LAW,sk-2005,50636154,50636154,1949412601,1,1,0,0,0.1245713694644861,0.1245713694644861,directed graph
+LAW,uk-2005,39459925,39459925,936364282,1,1,0,0,0.3002522210250522,0.3002522210250522,directed graph
+DIMACS10,caidaRouterLevel,192244,192244,1218132,1,1,0,0,1,1,undirected graph
+DIMACS10,chesapeake,39,39,340,1,1,0,0,1,1,undirected graph
+DIMACS10,road_central,14081816,14081816,33866826,1,1,0,0,1,1,undirected graph
+DIMACS10,road_usa,23947347,23947347,57708624,1,1,0,0,1,1,undirected graph
+DIMACS10,citationCiteseer,268495,268495,2313294,1,1,0,0,1,1,undirected graph
+DIMACS10,coAuthorsCiteseer,227320,227320,1628268,1,1,0,0,1,1,undirected graph
+DIMACS10,coAuthorsDBLP,299067,299067,1955352,1,1,0,0,1,1,undirected graph
+DIMACS10,coPapersCiteseer,434102,434102,32073440,1,1,0,0,1,1,undirected graph
+DIMACS10,coPapersDBLP,540486,540486,30491458,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n10,1024,1024,6112,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n11,2048,2048,12254,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n12,4096,4096,24528,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n13,8192,8192,49094,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n14,16384,16384,98244,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n15,32768,32768,196548,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n16,65536,65536,393150,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n17,131072,131072,786352,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n18,262144,262144,1572792,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n19,524288,524288,3145646,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n20,1048576,1048576,6291372,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n21,2097152,2097152,12582816,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n22,4194304,4194304,25165738,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n23,8388608,8388608,50331568,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n24,16777216,16777216,100663202,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00000,18318143,18318143,54940162,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00010,19458087,19458087,58359528,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00020,21198119,21198119,63580358,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00000,4588484,4588484,13758266,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00010,12057441,12057441,36164358,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00020,16002413,16002413,47997626,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00000,5824554,5824554,17467046,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00010,6592765,6592765,19771708,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00020,7122792,7122792,21361554,1,1,0,0,1,1,undirected graph
+DIMACS10,kron_g500-logn16,65536,65536,4912469,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn17,131072,131072,10228360,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn18,262144,262144,21165908,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn19,524288,524288,43562265,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn20,1048576,1048576,89239674,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn21,2097152,2097152,182082942,1,0,0,0,1,1,undirected multigraph
+DIMACS10,adaptive,6815744,6815744,27248640,1,1,0,0,1,1,undirected graph
+DIMACS10,channel-500x100x100-b050,4802000,4802000,85362744,1,1,0,0,1,1,undirected graph
+DIMACS10,packing-500x100x100-b050,2145852,2145852,34976486,1,1,0,0,1,1,undirected graph
+DIMACS10,venturiLevel3,4026819,4026819,16108474,1,1,0,0,1,1,undirected graph
+DIMACS10,rgg_n_2_15_s0,32768,32768,320480,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_16_s0,65536,65536,684254,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_17_s0,131072,131072,1457506,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_18_s0,262144,262144,3094566,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_19_s0,524288,524288,6539532,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_20_s0,1048576,1048576,13783240,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_21_s0,2097152,2097152,28975990,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_22_s0,4194304,4194304,60718396,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_23_s0,8388608,8388608,127002786,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_24_s0,16777216,16777216,265114400,1,1,0,0,1,1,undirected random graph
+DIMACS10,asia_osm,11950757,11950757,25423206,1,1,0,0,1,1,undirected graph
+DIMACS10,belgium_osm,1441295,1441295,3099940,1,1,0,0,1,1,undirected graph
+DIMACS10,europe_osm,50912018,50912018,108109320,1,1,0,0,1,1,undirected graph
+DIMACS10,germany_osm,11548845,11548845,24738362,1,1,0,0,1,1,undirected graph
+DIMACS10,great-britain_osm,7733822,7733822,16313034,1,1,0,0,1,1,undirected graph
+DIMACS10,italy_osm,6686493,6686493,14027956,1,1,0,0,1,1,undirected graph
+DIMACS10,luxembourg_osm,114599,114599,239332,1,1,0,0,1,1,undirected graph
+DIMACS10,netherlands_osm,2216688,2216688,4882476,1,1,0,0,1,1,undirected graph
+DIMACS10,144,144649,144649,2148786,1,1,0,0,1,1,undirected graph
+DIMACS10,598a,110971,110971,1483868,1,1,0,0,1,1,undirected graph
+DIMACS10,auto,448695,448695,6629222,1,1,0,0,1,1,undirected graph
+DIMACS10,cs4,22499,22499,87716,1,1,0,0,1,1,undirected graph
+DIMACS10,cti,16840,16840,96464,1,1,0,0,1,1,undirected graph
+DIMACS10,data,2851,2851,30186,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_4elt2,11143,11143,65636,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_body,45087,45087,327468,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_ocean,143437,143437,819186,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_rotor,99617,99617,1324862,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_sphere,16386,16386,98304,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_tooth,78136,78136,905182,1,1,0,0,1,1,undirected graph
+DIMACS10,m14b,214765,214765,3358036,1,1,0,0,1,1,undirected graph
+DIMACS10,t60k,60005,60005,178880,1,1,0,0,1,1,undirected graph
+DIMACS10,uk,4824,4824,13674,1,1,0,0,1,1,undirected graph
+DIMACS10,wing,62032,62032,243088,1,1,0,0,1,1,undirected graph
+DIMACS10,wing_nodal,10937,10937,150976,1,1,0,0,1,1,undirected graph
+IPSO,HTC_336_4438,226340,226340,783496,1,0,0,0,1,1,power network problem
+IPSO,HTC_336_9129,226340,226340,762969,1,0,0,0,1,1,power network problem
+IPSO,OPF_10000,43887,43887,426898,1,0,0,0,1,1,power network problem
+IPSO,OPF_3754,15435,15435,141478,1,0,0,0,1,1,power network problem
+IPSO,OPF_6000,29902,29902,274697,1,0,0,0,1,1,power network problem
+IPSO,TSC_OPF_1047,8140,8140,2012833,1,0,0,0,1,1,power network problem
+IPSO,TSC_OPF_300,9774,9774,820783,1,0,0,0,1,1,power network problem
+Janna,Serena,1391349,1391349,64131971,1,0,1,1,1,1,structural problem
+Janna,Emilia_923,923136,923136,40373538,1,0,1,1,1,1,structural problem
+Janna,Fault_639,638802,638802,27245944,1,0,1,1,1,1,structural problem
+Janna,Flan_1565,1564794,1564794,114165372,1,0,1,1,1,1,structural problem
+Janna,Geo_1438,1437960,1437960,60236322,1,0,1,1,1,1,structural problem
+Janna,Hook_1498,1498023,1498023,59374451,1,0,1,1,1,1,structural problem
+Janna,StocF-1465,1465137,1465137,21005389,1,0,1,1,1,1,computational fluid dynamics problem
+Janna,Cube_Coup_dt0,2164760,2164760,124406070,1,0,1,0,1,1,structural problem
+Janna,Cube_Coup_dt6,2164760,2164760,124406070,1,0,1,0,1,1,structural problem
+Janna,Long_Coup_dt0,1470152,1470152,84422970,1,0,1,0,1,1,structural problem
+Janna,Long_Coup_dt6,1470152,1470152,84422970,1,0,1,0,1,1,structural problem
+Schulthess,N_biocarta,1922,1996,4335,1,0,0,0,0,0,biochemical network
+Schulthess,N_pid,3625,3923,8054,1,0,0,0,0,0,biochemical network
+Schulthess,N_reactome,10204,16559,43816,1,0,0,0,0,0,biochemical network
+Chevron,Chevron1,37365,37365,330633,0,0,0,0,0.994503321194266,0.7103673090824775,other problem
+Chevron,Chevron2,90249,90249,803173,0,0,0,0,0.9963698795383519,0.6400065084076283,other problem
+Chevron,Chevron3,381381,381381,3413113,0,0,0,0,0.998180577966654,0.5728441696033818,other problem
+Chevron,Chevron4,711450,711450,6376412,0,0,0,0,0.9986570077610406,0.5561276492234193,other problem
+CPM,cz148,148,148,1527,1,0,1,0,0.4263959390862944,0.2306018854242204,2D/3D problem
+CPM,cz308,308,308,3182,1,0,1,0,0.4342379958246347,0.2219902574808629,2D/3D problem
+CPM,cz628,628,628,6346,1,0,1,0,0.441413081497027,0.2308499475341028,2D/3D problem
+CPM,cz1268,1268,1268,12786,1,0,1,0,0.4386178155929849,0.2340684146553221,2D/3D problem
+CPM,cz2548,2548,2548,25674,1,0,1,0,0.4322407679667906,0.2349736227622589,2D/3D problem
+CPM,cz5108,5108,5108,51412,1,0,1,0,0.433914996544575,0.2362214927436075,2D/3D problem
+CPM,cz10228,10228,10228,102876,1,0,1,0,0.4358431914342458,0.2371988602020551,2D/3D problem
+CPM,cz20468,20468,20468,206076,1,0,1,0,0.4354769190983147,0.2377052713245119,2D/3D problem
+CPM,cz40948,40948,40948,412148,1,0,1,0,0.4349030172413793,0.2372683189655172,2D/3D problem
+Davis,FX_March2010,1319,9498,301899,1,0,0,0,0,0,term/document graph
+Bodendiek,CurlCurl_0,11083,11083,113343,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_1,226451,226451,2472071,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_2,806529,806529,8921789,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_3,1219574,1219574,13544618,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_4,2380515,2380515,26515867,1,0,1,0,1,1,model reduction problem
+DIMACS10,G_n_pin_pout,100000,100000,1002396,1,1,0,0,1,1,random undirected graph
+DIMACS10,preferentialAttachment,100000,100000,999970,1,1,0,0,1,1,random undirected graph
+DIMACS10,smallworld,100000,100000,999996,1,1,0,0,1,1,random undirected graph
+DIMACS10,333SP,3712815,3712815,22217266,1,1,0,0,1,1,undirected graph
+DIMACS10,AS365,3799275,3799275,22736152,1,1,0,0,1,1,undirected graph
+DIMACS10,M6,3501776,3501776,21003872,1,1,0,0,1,1,undirected graph
+DIMACS10,NACA0015,1039183,1039183,6229636,1,1,0,0,1,1,undirected graph
+DIMACS10,NLR,4163763,4163763,24975952,1,1,0,0,1,1,undirected graph
+DIMACS10,ak2010,45292,45292,217098,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,al2010,252266,252266,1230482,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ar2010,186211,186211,904310,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,az2010,241666,241666,1196094,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ca2010,710145,710145,3489366,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,co2010,201062,201062,974574,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ct2010,67578,67578,336352,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,de2010,24115,24115,116056,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,fl2010,484481,484481,2346294,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ga2010,291086,291086,1418056,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,hi2010,25016,25016,124126,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ia2010,216007,216007,1021170,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,id2010,149842,149842,728264,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,il2010,451554,451554,2164464,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,in2010,267071,267071,1281716,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ks2010,238600,238600,1121798,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ky2010,161672,161672,787778,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,la2010,204447,204447,980634,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ma2010,157508,157508,776610,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,md2010,145247,145247,700378,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,me2010,69518,69518,335476,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mi2010,329885,329885,1578090,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mn2010,259777,259777,1227102,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mo2010,343565,343565,1656568,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ms2010,171778,171778,839980,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mt2010,132288,132288,638668,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nc2010,288987,288987,1416620,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nd2010,133769,133769,625946,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ne2010,193352,193352,913854,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nh2010,48837,48837,234550,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nj2010,169588,169588,829912,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nm2010,168609,168609,830970,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nv2010,84538,84538,416998,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ny2010,350169,350169,1709544,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,oh2010,365344,365344,1768240,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ok2010,269118,269118,1274148,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,or2010,196621,196621,979512,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,pa2010,421545,421545,2058462,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ri2010,25181,25181,125750,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,sc2010,181908,181908,893160,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,sd2010,88360,88360,410722,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,tn2010,240116,240116,1193966,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,tx2010,914231,914231,4456272,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ut2010,115406,115406,572066,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,va2010,285762,285762,1402128,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,vt2010,32580,32580,155598,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wa2010,195574,195574,947432,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wi2010,253096,253096,1209404,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wv2010,135218,135218,662922,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wy2010,86204,86204,427586,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,vsp_barth5_1Ksep_50in_5Kout,32212,32212,203610,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_bcsstk30_500sep_10in_1Kout,58348,58348,4033156,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_befref_fxm_2_4_air02,14109,14109,196448,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_bump2_e18_aa01_model1_crew1,56438,56438,601602,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_c-30_data_data,11023,11023,124368,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_c-60_data_cti_cs4,85830,85830,482160,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_data_and_seymourl,9167,9167,111732,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_finan512_scagr7-2c_rlfddd,139752,139752,1104040,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_mod2_pgp2_slptsk,101364,101364,778736,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_model1_crew1_cr42_south31,45101,45101,379952,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_msc10848_300sep_100in_1Kout,21996,21996,2442056,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_p0291_seymourl_iiasa,10498,10498,107736,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_sctap1-2b_and_seymourl,40174,40174,281662,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_south31_slptsk,39668,39668,379828,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_vibrobox_scagr7-2c_rlfddd,77328,77328,871172,1,1,0,0,1,1,random unweighted graph
+Janna,CoupCons3D,416800,416800,17277420,1,0,1,0,1,0.008881642549324996,structural problem
+Janna,ML_Laplace,377002,377002,27582698,1,0,1,0,1,7.351401706466176e-08,structural problem
+Janna,Transport,1602111,1602111,23487281,1,0,1,0,1,0,structural problem
+Janna,ML_Geer,1504002,1504002,110686677,1,0,1,0,1,2.381330188145693e-07,structural problem
diff --git a/CXSparse/MATLAB/cs_install.m b/CXSparse/MATLAB/cs_install.m
index 526821b..7b78090 100644
--- a/CXSparse/MATLAB/cs_install.m
+++ b/CXSparse/MATLAB/cs_install.m
@@ -23,8 +23,7 @@ function cs_install (do_pause)
 %
 %   See also: cs_demo
 %
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('Compiling and installing CXSparse\n') ;
 if (nargin < 1)
@@ -34,23 +33,34 @@ end
 if (do_pause)
     input ('Hit enter to continue: ') ;
 end
-addpath ([pwd filesep 'CSparse']) ;
-addpath ([pwd filesep 'Demo']) ;
+addpath ([pwd '/CSparse']) ;
+addpath ([pwd '/Demo']) ;
 
-v = getversion ;
-if (v >= 7.0)
-    addpath ([pwd filesep 'UFget']) ;
-else
+if (verLessThan ('matlab', '7.0'))
     fprintf ('UFget not installed (MATLAB 7.0 or later required)\n') ;
+else
+    % install UFget, unless it's already in the path
+    try
+        % if this fails, then UFget is not yet installed
+        index = UFget ;
+        fprintf ('UFget already installed:\n') ;
+        which UFget
+    catch
+        index = [ ] ;
+    end
+    if (isempty (index))
+        % UFget is not installed.  Use ./UFget
+        fprintf ('Installing ./UFget\n') ;
+        try
+            addpath ([pwd '/UFget']) ;
+        catch me
+            disp (me.message) ;
+            fprintf ('UFget not installed\n') ;
+        end
+    end
 end
 
 cd ('CSparse') ;
 cs_make (1) ;
 cd ('../Demo') ;
 cs_demo (do_pause)
-
-%-------------------------------------------------------------------------------
-function v = getversion
-% determine the MATLAB version, and return it as a double.
-v = sscanf (version, '%d.%d.%d') ;
-v = 10.^(0:-1:-(length(v)-1)) * v ;
diff --git a/CXSparse/Makefile b/CXSparse/Makefile
index 5700dcb..d59dea4 100644
--- a/CXSparse/Makefile
+++ b/CXSparse/Makefile
@@ -1,4 +1,12 @@
-# CSparse Makefile
+#------------------------------------------------------------------------------
+# CXSparse Makefile
+#------------------------------------------------------------------------------
+
+VERSION = 3.1.4
+
+default: C
+
+include ../SuiteSparse_config/SuiteSparse_config.mk
 
 C:
 	( cd Lib ; $(MAKE) )
@@ -12,19 +20,32 @@ library:
 cov:
 	( cd Tcov ; $(MAKE) )
 
-mex:
-	( cd MATLAB ; $(MAKE) )
-
 clean:
 	( cd Lib ; $(MAKE) clean )
 	( cd Demo ; $(MAKE) clean )
 	( cd Tcov ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
+	( cd MATLAB/CSparse ; $(RM) *.o cs_cl_*.c )
+	( cd MATLAB/Test    ; $(RM) *.o cs_cl_*.c )
 
 purge:
 	( cd Lib ; $(MAKE) purge )
 	( cd Demo ; $(MAKE) purge )
 	( cd Tcov ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
+	( cd MATLAB/CSparse ; $(RM) *.o cs_cl_*.c *.mex* )
+	( cd MATLAB/Test    ; $(RM) *.o cs_cl_*.c *.mex* )
 
 distclean: purge
+
+# install CSparse
+install:
+	$(CP) Lib/libcxsparse.a $(INSTALL_LIB)/libcxsparse.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libcxsparse.$(VERSION).a libcxsparse.a )
+	$(CP) Include/cs.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libcxsparse*.a
+	chmod 644 $(INSTALL_INCLUDE)/cs.h
+
+# uninstall CSparse
+uninstall:
+	$(RM) $(INSTALL_LIB)/libcxsparse*.a
+	$(RM) $(INSTALL_INCLUDE)/cs.h
+
diff --git a/CXSparse/README.txt b/CXSparse/README.txt
index b108f66..f1f55bb 100644
--- a/CXSparse/README.txt
+++ b/CXSparse/README.txt
@@ -1,15 +1,16 @@
-CXSparse: a Concise Sparse Matrix package - Extended.
-Version 2.2.0, Copyright (c) 2006-2007, Timothy A. Davis.
+CXSparse: Copyright (c) 2006-2012, Timothy A. Davis.
+http://www.suitesparse.com
+
 Derived from CSparse.  Conversion originally by David Bateman, Motorola,
 and then modified by Tim Davis.  ANSI C99 is required, with support for
 the _Complex data type.
 (if you use a C++ compiler, the C++ complex type is used instead).
 
 CXSparse is a version of CSparse that operates on both real and complex
-matrices, using either int or UF_long integers.  A UF_long is normally
-just a long on most platforms, but becomes __int64 on WIN64.
-It now includes a MATLAB interface, enabling the use of CXSparse functions on
-both 32-bit and 64-bit platforms.
+matrices, using either int or SuiteSparse_long integers.  A SuiteSparse_long is
+normally just a long on most platforms, but becomes __int64 on WIN64.  It now
+includes a MATLAB interface, enabling the use of CXSparse functions on both
+32-bit and 64-bit platforms.
 
 To install for use in MATLAB, simply type "cs_install" in the MATLAB Command
 Window, while in the CXSparse/MATLAB directory.  (NOTE: Windows users cannot
@@ -39,33 +40,36 @@ uses CSparse may switch to using CXSparse without any changes to the user code.
 Each CXSparse function has a generic version with the same name as the CSparse
 function, and four type-specific versions.  For example:
 
-    cs_add	same as cs_add_di by default, but can be changed to use UF_long
-		integers if user code is compiled with -DCS_LONG, and/or can
-		be changed to operate on complex matrices with -DCS_COMPLEX.
+    cs_add      same as cs_add_di by default, but can be changed to use
+                SuiteSparse_long
+                integers if user code is compiled with -DCS_LONG, and/or can
+                be changed to operate on complex matrices with -DCS_COMPLEX.
 
-    cs_di_add	double/int version of cs_add
-    cs_dl_add	double/UF_long version of cs_add
-    cs_ci_add	complex/int version of cs_add
-    cs_cl_add	complex/UF_long version of cs_add
+    cs_di_add   double/int version of cs_add
+    cs_dl_add   double/SuiteSparse_long version of cs_add
+    cs_ci_add   complex/int version of cs_add
+    cs_cl_add   complex/SuiteSparse_long version of cs_add
 
 The sparse matrix data structures are treated in the same way:  cs, css,
 csn, and csd become cs_di, cs_dis, cs_din, and cs_did for the double/int case,
-cs_cl, cs_cls, cs_cln, and cs_cld for the complex/UF_long case, and so on.
+cs_cl, cs_cls, cs_cln, and cs_cld for the complex/SuiteSparse_long case, and so
+on.
 
 See cs_demo.c for a type-generic user program, and cs_cl_demo.c for a
-type-specific version of the same program (complex/UF_long).
+type-specific version of the same program (complex/SuiteSparse_long).
 
 Several macros are available in CXSparse (but not in CSparse) to allow user
 code to be written in a type-generic manner:
 
-    CS_INT	int by default, UF_long if -DCS_LONG compiler flag is used
-    CS_ENTRY	double by default, double complex if -DCS_COMPLEX flag is used.
-    CS_ID	"%d" or "%ld", for printf and scanf of the CS_INT type.
-    CS_INT_MAX	INT_MAX or LONG_MAX, the largest possible value of CS_INT.
-    CS_REAL(x)	x or creal(x)
-    CS_IMAG(x)	0 or cimag(x)
-    CS_CONJ(x)	x or conj(x)
-    CS_ABS(x)	fabs(x) or cabs(x)
+    CS_INT      int by default, SuiteSparse_long if -DCS_LONG compiler flag
+                is used
+    CS_ENTRY    double by default, double complex if -DCS_COMPLEX flag is used.
+    CS_ID       "%d" or "%ld", for printf and scanf of the CS_INT type.
+    CS_INT_MAX  INT_MAX or LONG_MAX, the largest possible value of CS_INT.
+    CS_REAL(x)  x or creal(x)
+    CS_IMAG(x)  0 or cimag(x)
+    CS_CONJ(x)  x or conj(x)
+    CS_ABS(x)   fabs(x) or cabs(x)
 
 Even the name of the include file (cs.h) is the same.  To use CXSparse instead
 of CSparse, simply compile with -ICXSparse/Source instead of -ICSparse/Source,
@@ -74,14 +78,14 @@ and link against libcxsparse.a instead of the CSparse libcsparse.a library.
 To determine at compile time if CXSparse or CSparse is being used:
 
     #ifdef CXSPARSE
-	CXSparse is in use.  The generic functions equivalent to CSparse may
-	be used (cs_add, etc).  These generic functions can use different
-	types, depending on the -DCS_LONG and -DCS_COMPLEX compile flags, with
-	the default being double/int.  The type-specific functions and data
-	types (cs_di_add, cs_di, CS_INT, etc.) can be used.
+        CXSparse is in use.  The generic functions equivalent to CSparse may
+        be used (cs_add, etc).  These generic functions can use different
+        types, depending on the -DCS_LONG and -DCS_COMPLEX compile flags, with
+        the default being double/int.  The type-specific functions and data
+        types (cs_di_add, cs_di, CS_INT, etc.) can be used.
     #else
-	CSparse is in use.  Only the generic functions "cs_add", etc., are
-	available, and they are of type double/int.
+        CSparse is in use.  Only the generic functions "cs_add", etc., are
+        available, and they are of type double/int.
     #endif
 
 See cs.h for the prototypes of each function, and the book "Direct Methods
@@ -96,263 +100,263 @@ The Householder reflection constructed by cs_house.c also differs slightly, to
 accomodate both the real and complex cases properly.
 
 CXSparse is generated automatically from CSparse.  Refer to
-http://www.cise.ufl.edu/research/sparse/CSparse for details.
+http://www.suitesparse.com for details.
 
 --------------------------------------------------------------------------------
 Contents:
 --------------------------------------------------------------------------------
 
-Demo/		demo C programs that use CXSparse
-Doc/		license and change log
-Makefile	Makefile for the whole package
-MATLAB/		MATLAB interface, demos, and tests for CXSparse
-Matrix/		sample matrices (with extra complex matrices for CXSparse)
-README.txt	this file
-Source/		primary CXSparse source files
-Tcov/		CXSparse tests
+Demo/           demo C programs that use CXSparse
+Doc/            license and change log
+Makefile        Makefile for the whole package
+MATLAB/         MATLAB interface, demos, and tests for CXSparse
+Matrix/         sample matrices (with extra complex matrices for CXSparse)
+README.txt      this file
+Source/         primary CXSparse source files
+Tcov/           CXSparse tests
 
 --------------------------------------------------------------------------------
-./Doc:		license and change log
+./Doc:          license and change log
 --------------------------------------------------------------------------------
 
-ChangeLog	changes in CSparse since first release
-lesser.txt	the GNU LGPL
-License.txt	license (GNU LGPL)
+ChangeLog       changes in CSparse since first release
+lesser.txt      the GNU LGPL
+License.txt     license (GNU LGPL)
 
 --------------------------------------------------------------------------------
-./Source:	Primary source code for CXSparse
+./Source:       Primary source code for CXSparse
 --------------------------------------------------------------------------------
 
-cs_add.c	add sparse matrices
-cs_amd.c	approximate minimum degree
-cs_chol.c	sparse Cholesky
-cs_cholsol.c	x=A\b using sparse Cholesky
-cs_compress.c	convert a compress form to compressed-column form
-cs_counts.c	column counts for Cholesky and QR
-cs_convert.c	convert real to complex and complex to real (not in CSparse)
-cs_cumsum.c	cumulative sum
-cs_dfs.c	depth-first-search
-cs_dmperm.c	Dulmage-Mendelsohn permutation
-cs_droptol.c	drop small entries from a sparse matrix
-cs_dropzeros.c	drop zeros from a sparse matrix
-cs_dupl.c	remove (and sum) duplicates
-cs_entry.c	add an entry to a triplet matrix
-cs_ereach.c	nonzero pattern of Cholesky L(k,:) from etree and triu(A(:,k))
-cs_etree.c	find elimination tree
-cs_fkeep.c	drop entries from a sparse matrix
-cs_gaxpy.c	sparse matrix times dense matrix
-cs.h		include file for CXSparse
-cs_happly.c	apply Householder reflection
-cs_house.c	Householder reflection (*** NOTE: different algo. from CSparse)
-cs_ipvec.c	x(p)=b
-cs_leaf.c	determine if j is a leaf of the skeleton matrix and find lca
-cs_load.c	load a sparse matrix from a file
-cs_lsolve.c	x=L\b
-cs_ltsolve.c	x=L'\b
-cs_lu.c		sparse LU factorization
-cs_lusol.c	x=A\b using sparse LU factorization
-cs_malloc.c	memory manager
-cs_maxtrans.c	maximum transveral (permutation for zero-free diagonal)
-cs_multiply.c	sparse matrix multiply
-cs_norm.c	sparse matrix norm
-cs_permute.c	permute a sparse matrix
-cs_pinv.c	invert a permutation vector
-cs_post.c	postorder an elimination tree
-cs_print.c	print a sparse matrix
-cs_pvec.c	x=b(p)
-cs_qr.c		sparse QR
-cs_qrsol.c	solve a least-squares problem
-cs_randperm.c	random permutation
-cs_reach.c	find nonzero pattern of x=L\b for sparse L and b
-cs_scatter.c	scatter a sparse vector
-cs_scc.c	strongly-connected components
-cs_schol.c	symbolic Cholesky
-cs_spsolve.c	x=Z\b where Z, x, and b are sparse, and Z upper/lower triangular
-cs_sqr.c	symbolic QR (also can be used for LU)
-cs_symperm.c	symmetric permutation of a sparse matrix
-cs_tdfs.c	depth-first-search of a tree
-cs_transpose.c	transpose a sparse matrix
-cs_updown.c	sparse rank-1 Cholesky update/downate
-cs_usolve.c	x=U\b
-cs_util.c	various utilities (allocate/free matrices, workspace, etc)
-cs_utsolve.c	x=U'\b
-Makefile	Makefile for CXSparse
-README.txt	README file for CXSparse
+cs_add.c        add sparse matrices
+cs_amd.c        approximate minimum degree
+cs_chol.c       sparse Cholesky
+cs_cholsol.c    x=A\b using sparse Cholesky
+cs_compress.c   convert a compress form to compressed-column form
+cs_counts.c     column counts for Cholesky and QR
+cs_convert.c    convert real to complex and complex to real (not in CSparse)
+cs_cumsum.c     cumulative sum
+cs_dfs.c        depth-first-search
+cs_dmperm.c     Dulmage-Mendelsohn permutation
+cs_droptol.c    drop small entries from a sparse matrix
+cs_dropzeros.c  drop zeros from a sparse matrix
+cs_dupl.c       remove (and sum) duplicates
+cs_entry.c      add an entry to a triplet matrix
+cs_ereach.c     nonzero pattern of Cholesky L(k,:) from etree and triu(A(:,k))
+cs_etree.c      find elimination tree
+cs_fkeep.c      drop entries from a sparse matrix
+cs_gaxpy.c      sparse matrix times dense matrix
+cs.h            include file for CXSparse
+cs_happly.c     apply Householder reflection
+cs_house.c      Householder reflection (*** NOTE: different algo. from CSparse)
+cs_ipvec.c      x(p)=b
+cs_leaf.c       determine if j is a leaf of the skeleton matrix and find lca
+cs_load.c       load a sparse matrix from a file
+cs_lsolve.c     x=L\b
+cs_ltsolve.c    x=L'\b
+cs_lu.c         sparse LU factorization
+cs_lusol.c      x=A\b using sparse LU factorization
+cs_malloc.c     memory manager
+cs_maxtrans.c   maximum transveral (permutation for zero-free diagonal)
+cs_multiply.c   sparse matrix multiply
+cs_norm.c       sparse matrix norm
+cs_permute.c    permute a sparse matrix
+cs_pinv.c       invert a permutation vector
+cs_post.c       postorder an elimination tree
+cs_print.c      print a sparse matrix
+cs_pvec.c       x=b(p)
+cs_qr.c         sparse QR
+cs_qrsol.c      solve a least-squares problem
+cs_randperm.c   random permutation
+cs_reach.c      find nonzero pattern of x=L\b for sparse L and b
+cs_scatter.c    scatter a sparse vector
+cs_scc.c        strongly-connected components
+cs_schol.c      symbolic Cholesky
+cs_spsolve.c    x=Z\b where Z, x, and b are sparse, and Z upper/lower triangular
+cs_sqr.c        symbolic QR (also can be used for LU)
+cs_symperm.c    symmetric permutation of a sparse matrix
+cs_tdfs.c       depth-first-search of a tree
+cs_transpose.c  transpose a sparse matrix
+cs_updown.c     sparse rank-1 Cholesky update/downate
+cs_usolve.c     x=U\b
+cs_util.c       various utilities (allocate/free matrices, workspace, etc)
+cs_utsolve.c    x=U'\b
+Makefile        Makefile for CXSparse
+README.txt      README file for CXSparse
 
 --------------------------------------------------------------------------------
-./Demo:		C program demos
+./Demo:         C program demos
 --------------------------------------------------------------------------------
 
-cs_ci_demo1.c	complex/int version of cs_demo1.c
-cs_ci_demo2.c	complex/int version of cs_demo2.c
-cs_ci_demo3.c	complex/int version of cs_demo3.c
-cs_ci_demo.c	complex/int version of cs_demo.c
-cs_ci_demo.h	complex/int version of cs_demo.h
-
-cs_cl_demo1.c	complex/UF_long version of cs_demo1.c
-cs_cl_demo2.c	complex/UF_long version of cs_demo2.c
-cs_cl_demo3.c	complex/UF_long version of cs_demo3.c
-cs_cl_demo.c	complex/UF_long version of cs_demo.c
-cs_cl_demo.h	complex/UF_long version of cs_demo.h
-
-cs_demo1.c	read a matrix from a file and perform basic matrix operations
-cs_demo2.c	read a matrix from a file and solve a linear system
-cs_demo3.c	read a matrix, solve a linear system, update/downdate
-cs_demo.c	support routines for cs_demo*.c
-cs_demo.h	include file for demo programs
-
-cs_demo.out	output of "make", which runs the demos on some matrices
-
-cs_di_demo1.c	double/int version of cs_demo1.c
-cs_di_demo2.c	double/int version of cs_demo2.c
-cs_di_demo3.c	double/int version of cs_demo3.c
-cs_di_demo.c	double/int version of cs_demo.c
-cs_di_demo.h	double/int version of cs_demo.h
-
-cs_dl_demo1.c	double/UF_long version of cs_demo1.c
-cs_dl_demo2.c	double/UF_long version of cs_demo2.c
-cs_dl_demo3.c	double/UF_long version of cs_demo3.c
-cs_dl_demo.c	double/UF_long version of cs_demo.c
-cs_dl_demo.h	double/UF_long version of cs_demo.h
-
-cs_idemo.c	convert real matrices to/from complex (int version)
-cs_ldemo.c	convert real matrices to/from complex (UF_long version)
-
-Makefile	Makefile for Demo programs
-readhb.f	read a Rutherford-Boeing matrix (real matrices only)
-README.txt	Demo README file
+cs_ci_demo1.c   complex/int version of cs_demo1.c
+cs_ci_demo2.c   complex/int version of cs_demo2.c
+cs_ci_demo3.c   complex/int version of cs_demo3.c
+cs_ci_demo.c    complex/int version of cs_demo.c
+cs_ci_demo.h    complex/int version of cs_demo.h
+
+cs_cl_demo1.c   complex/SuiteSparse_long version of cs_demo1.c
+cs_cl_demo2.c   complex/SuiteSparse_long version of cs_demo2.c
+cs_cl_demo3.c   complex/SuiteSparse_long version of cs_demo3.c
+cs_cl_demo.c    complex/SuiteSparse_long version of cs_demo.c
+cs_cl_demo.h    complex/SuiteSparse_long version of cs_demo.h
+
+cs_demo1.c      read a matrix from a file and perform basic matrix operations
+cs_demo2.c      read a matrix from a file and solve a linear system
+cs_demo3.c      read a matrix, solve a linear system, update/downdate
+cs_demo.c       support routines for cs_demo*.c
+cs_demo.h       include file for demo programs
+
+cs_demo.out     output of "make", which runs the demos on some matrices
+
+cs_di_demo1.c   double/int version of cs_demo1.c
+cs_di_demo2.c   double/int version of cs_demo2.c
+cs_di_demo3.c   double/int version of cs_demo3.c
+cs_di_demo.c    double/int version of cs_demo.c
+cs_di_demo.h    double/int version of cs_demo.h
+
+cs_dl_demo1.c   double/SuiteSparse_long version of cs_demo1.c
+cs_dl_demo2.c   double/SuiteSparse_long version of cs_demo2.c
+cs_dl_demo3.c   double/SuiteSparse_long version of cs_demo3.c
+cs_dl_demo.c    double/SuiteSparse_long version of cs_demo.c
+cs_dl_demo.h    double/SuiteSparse_long version of cs_demo.h
+
+cs_idemo.c      convert real matrices to/from complex (int version)
+cs_ldemo.c      convert real matrices to/from complex (SuiteSparse_long version)
+
+Makefile        Makefile for Demo programs
+readhb.f        read a Rutherford-Boeing matrix (real matrices only)
+README.txt      Demo README file
 
 --------------------------------------------------------------------------------
-./MATLAB:	MATLAB interface, demos, and tests
+./MATLAB:       MATLAB interface, demos, and tests
 --------------------------------------------------------------------------------
 
-cs_install.m	MATLAB function for compiling and installing CSparse for MATLAB
-CSparse/	MATLAB interface for CSparse
-Demo/		MATLAB demos for CSparse
-Makefile	MATLAB interface Makefile
-README.txt	MATLAB README file
-Test/		MATLAB test for CSparse, and "textbook" routines
-UFget/		MATLAB interface to UF Sparse Matrix Collection
+cs_install.m    MATLAB function for compiling and installing CSparse for MATLAB
+CSparse/        MATLAB interface for CSparse
+Demo/           MATLAB demos for CSparse
+Makefile        MATLAB interface Makefile
+README.txt      MATLAB README file
+Test/           MATLAB test for CSparse, and "textbook" routines
+UFget/          MATLAB interface to UF Sparse Matrix Collection
 
 
 --------------------------------------------------------------------------------
 ./MATLAB/CSparse:   MATLAB interface for CSparse
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of MATLAB interface to CSparse
-cs_add.m	    add two sparse matrices
+Contents.m          Contents of MATLAB interface to CSparse
+cs_add.m            add two sparse matrices
 cs_add_mex.c
-cs_amd.m	    approximate minimum degree
+cs_amd.m            approximate minimum degree
 cs_amd_mex.c
-cs_chol.m	    sparse Cholesky
+cs_chol.m           sparse Cholesky
 cs_chol_mex.c
-cs_cholsol.m	    x=A\b using a sparse Cholesky
+cs_cholsol.m        x=A\b using a sparse Cholesky
 cs_cholsol_mex.c
-cs_counts.m	    column counts for Cholesky or QR (like "symbfact" in MATLAB)
+cs_counts.m         column counts for Cholesky or QR (like "symbfact" in MATLAB)
 cs_counts_mex.c
-cs_dmperm.m	    Dulmage-Mendelsohn permutation
+cs_dmperm.m         Dulmage-Mendelsohn permutation
 cs_dmperm_mex.c
-cs_dmsol.m	    x=A\b using dmperm
-cs_dmspy.m	    plot a picture of a dmperm-permuted matrix
-cs_droptol.m	    drop small entries
+cs_dmsol.m          x=A\b using dmperm
+cs_dmspy.m          plot a picture of a dmperm-permuted matrix
+cs_droptol.m        drop small entries
 cs_droptol_mex.c
-cs_esep.m	    find edge separator
-cs_etree.m	    compute elimination tree
+cs_esep.m           find edge separator
+cs_etree.m          compute elimination tree
 cs_etree_mex.c
-cs_gaxpy.m	    sparse matrix times dense vector
+cs_gaxpy.m          sparse matrix times dense vector
 cs_gaxpy_mex.c
-cs_lsolve.m	    x=L\b where L is lower triangular
+cs_lsolve.m         x=L\b where L is lower triangular
 cs_lsolve_mex.c
-cs_ltsolve.m	    x=L'\b where L is lower triangular
+cs_ltsolve.m        x=L'\b where L is lower triangular
 cs_ltsolve_mex.c
-cs_lu.m		    sparse LU factorization
+cs_lu.m             sparse LU factorization
 cs_lu_mex.c
-cs_lusol.m	    x=A\b using sparse LU factorization
+cs_lusol.m          x=A\b using sparse LU factorization
 cs_lusol_mex.c
-cs_make.m	    compiles CSparse for use in MATLAB
-cs_mex.c	    support routines for CSparse mexFunctions
+cs_make.m           compiles CSparse for use in MATLAB
+cs_mex.c            support routines for CSparse mexFunctions
 cs_mex.h
-cs_multiply.m	    sparse matrix multiply
+cs_multiply.m       sparse matrix multiply
 cs_multiply_mex.c
 cs_must_compile.m   determine if a source file needs to be compiled with mex
-cs_nd.m		    nested dissection
-cs_nsep.m	    find node separator
-cs_permute.m	    permute a sparse matrix
+cs_nd.m             nested dissection
+cs_nsep.m           find node separator
+cs_permute.m        permute a sparse matrix
 cs_permute_mex.c
-cs_print.m	    print a sparse matrix
+cs_print.m          print a sparse matrix
 cs_print_mex.c
-cs_qleft.m	    apply Householder vectors to the left
-cs_qright.m	    apply Householder vectors to the right
-cs_qr.m		    sparse QR factorization
+cs_qleft.m          apply Householder vectors to the left
+cs_qright.m         apply Householder vectors to the right
+cs_qr.m             sparse QR factorization
 cs_qr_mex.c
-cs_qrsol.m	    solve a sparse least squares problem
+cs_qrsol.m          solve a sparse least squares problem
 cs_qrsol_mex.c
-cs_randperm.m	    randdom permutation
+cs_randperm.m       randdom permutation
 cs_randperm_mex.c
-cs_scc.m	    strongly-connected components
+cs_scc.m            strongly-connected components
 cs_scc_mex.c
-cs_sep.m	    convert an edge separator into a node separator
-cs_sparse.m	    convert a triplet form matrix to a compress-column form
+cs_sep.m            convert an edge separator into a node separator
+cs_sparse.m         convert a triplet form matrix to a compress-column form
 cs_sparse_mex.c
-cs_symperm.m	    symmetric permutation of a sparse matrix
+cs_symperm.m        symmetric permutation of a sparse matrix
 cs_symperm_mex.c
-cs_sqr.m	    symbolic QR ordering and analysis
+cs_sqr.m            symbolic QR ordering and analysis
 cs_sqr_mex.c
-cs_thumb_mex.c	    compute small "thumbnail" of a sparse matrix (for cspy).
-cs_transpose.m	    transpose a sparse matrix
+cs_thumb_mex.c      compute small "thumbnail" of a sparse matrix (for cspy).
+cs_transpose.m      transpose a sparse matrix
 cs_transpose_mex.c
-cs_updown.m	    sparse Cholesky update/downdate
+cs_updown.m         sparse Cholesky update/downdate
 cs_updown_mex.c
-cs_usolve.m	    x=U\b where U is upper triangular 
+cs_usolve.m         x=U\b where U is upper triangular 
 cs_usolve_mex.c
-cs_utsolve.m	    x=U'\b where U is upper triangular 
+cs_utsolve.m        x=U'\b where U is upper triangular 
 cs_utsolve_mex.c
-cspy.m		    a color "spy"
-Makefile	    Makefile for CSparse MATLAB interface
-README.txt	    README file for CSparse MATLAB interface
+cspy.m              a color "spy"
+Makefile            Makefile for CSparse MATLAB interface
+README.txt          README file for CSparse MATLAB interface
 
 
 --------------------------------------------------------------------------------
-./MATLAB/Demo:	    MATLAB demos for CSparse
+./MATLAB/Demo:      MATLAB demos for CSparse
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of MATLAB demo for CSparse
-cs_demo.m	    run all MATLAB demos for CSparse
-cs_demo1.m	    MATLAB version of Demo/cs_demo1.c
-cs_demo2.m	    MATLAB version of Demo/cs_demo2.c
-cs_demo3.m	    MATLAB version of Demo/cs_demo3.c
-private/	    private functions for MATLAB demos
-README.txt	    README file for CSparse MATLAB demo
+Contents.m          Contents of MATLAB demo for CSparse
+cs_demo.m           run all MATLAB demos for CSparse
+cs_demo1.m          MATLAB version of Demo/cs_demo1.c
+cs_demo2.m          MATLAB version of Demo/cs_demo2.c
+cs_demo3.m          MATLAB version of Demo/cs_demo3.c
+private/            private functions for MATLAB demos
+README.txt          README file for CSparse MATLAB demo
 
 
 --------------------------------------------------------------------------------
 ./MATLAB/Demo/private: private functions for MATLAB demos
 --------------------------------------------------------------------------------
 
-demo2.m		    demo 2
-demo3.m		    demo 3
-ex_1.m		    example 1
-ex2.m		    example 2
-ex3.m		    example 3
-frand.m		    generate a random finite-element matrix
-get_problem.m	    get a matrix
-is_sym.m	    determine if a matrix is symmetric
-mesh2d1.m	    construct a 2D mesh (method 1)
-mesh2d2.m	    construct a 2D mesh (method 2)
-mesh3d1.m	    construct a 3D mesh (method 1)
-mesh3d2.m	    construct a 3D mesh (method 2)
-print_order.m	    print the ordering method used
-resid.m		    compute residual
-rhs.m		    create right-hand-side
+demo2.m             demo 2
+demo3.m             demo 3
+ex_1.m              example 1
+ex2.m               example 2
+ex3.m               example 3
+frand.m             generate a random finite-element matrix
+get_problem.m       get a matrix
+is_sym.m            determine if a matrix is symmetric
+mesh2d1.m           construct a 2D mesh (method 1)
+mesh2d2.m           construct a 2D mesh (method 2)
+mesh3d1.m           construct a 3D mesh (method 1)
+mesh3d2.m           construct a 3D mesh (method 2)
+print_order.m       print the ordering method used
+resid.m             compute residual
+rhs.m               create right-hand-side
 
 
 --------------------------------------------------------------------------------
-./MATLAB/Test:	    Extensive test of CSparse, in MATLAB
+./MATLAB/Test:      Extensive test of CSparse, in MATLAB
 --------------------------------------------------------------------------------
 
-Makefile	    Makefile for MATLAB Test directory
-README.txt	    README file for MATLAB/Test
-Contents.m	    Contents of MATLAB/Test, "textbook" files only
+Makefile            Makefile for MATLAB Test directory
+README.txt          README file for MATLAB/Test
+Contents.m          Contents of MATLAB/Test, "textbook" files only
 
 chol_downdate.m     downdate a Cholesky factorization.
 chol_left.m         left-looking Cholesky factorization.
@@ -376,7 +380,7 @@ qr_givens.m         Givens-rotation QR factorization.
 qr_givens_full.m    Givens-rotation QR factorization, for full matrices.
 qr_left.m           left-looking Householder QR factorization.
 qr_right.m          right-looking Householder QR factorization.
-cs_fiedler.m	    Fiedler vector
+cs_fiedler.m        Fiedler vector
 
 cs_frand.m          generate a random finite-element matrix
 cs_frand_mex.c
@@ -385,17 +389,17 @@ cs_ipvec_mex.c
 cs_maxtransr.m      recursive maximum matching algorithm
 cs_maxtransr_mex.c
 cs_pvec.m           x=b(p)
-cs_pvec_mex.c	    interface for cs_pvec
+cs_pvec_mex.c       interface for cs_pvec
 cs_reach.m          non-recursive reach (interface to CSparse cs_reach)
-cs_reach_mex.c	    non-recursive x=spones(L\sparse(b))
+cs_reach_mex.c      non-recursive x=spones(L\sparse(b))
 cs_reachr.m         recursive reach (interface to CSparse cs_reachr)
 cs_reachr_mex.c
 cs_rowcnt.m         row counts for sparse Cholesky
-cs_rowcnt_mex.c	    row counts for sparse Cholesky
+cs_rowcnt_mex.c     row counts for sparse Cholesky
 cs_sparse2.m        same as cs_sparse, to test cs_entry function
 cs_sparse2_mex.c    like cs_sparse, but for testing cs_entry
 
-cs_test_make.m	    compiles MATLAB tests
+cs_test_make.m      compiles MATLAB tests
 
 check_if_same.m     check if two inputs are identical or not
 choldn.m            Cholesky downdate
@@ -456,66 +460,66 @@ test28.m            test cs_randperm, cs_dmperm
 
 
 --------------------------------------------------------------------------------
-./MATLAB/UFget:	    MATLAB interface for the UF Sparse Matrix Collection
+./MATLAB/UFget:     MATLAB interface for the UF Sparse Matrix Collection
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of UFget
-mat/		    default directory where downloaded matrices will be put
-README.txt	    README file for UFget
+Contents.m          Contents of UFget
+mat/                default directory where downloaded matrices will be put
+README.txt          README file for UFget
 UFget_defaults.m    default parameter settings
-UFget_example.m	    example of use
-UFget_install.m	    installs UFget temporarily (for current session)
+UFget_example.m     example of use
+UFget_install.m     installs UFget temporarily (for current session)
 UFget_java.class    read a url and load it in into MATLAB (compiled Java code)
-UFget_java.java	    read a url and load it in into MATLAB (Java source code)
-UFget_lookup.m	    look up a matrix in the index
-UFget.m		    UFget itself (primary user interface)
-UFweb.m		    open url for a matrix or collection
+UFget_java.java     read a url and load it in into MATLAB (Java source code)
+UFget_lookup.m      look up a matrix in the index
+UFget.m             UFget itself (primary user interface)
+UFweb.m             open url for a matrix or collection
 mat/UF_Index.mat    index of matrices in UF Sparse Matrix Collection
 
 
 --------------------------------------------------------------------------------
-./Matrix:	    Sample matrices, most from Rutherford/Boeing collection
+./Matrix:           Sample matrices, most from Rutherford/Boeing collection
 --------------------------------------------------------------------------------
 
-ash219		    overdetermined pattern of Holland survey.  Ashkenazi, 1974.
-bcsstk01	    stiffness matrix for small generalized eigenvalue problem
-bcsstk16	    stiffness matrix, Corp of Engineers dam
-fs_183_1	    unsymmetric facsimile convergence matrix
-lp_afiro	    NETLIB afiro linear programming problem
-mbeacxc		    US economy, 1972.  Dan Szyld, while at NYU
-t1		    small example used in Chapter 2
-west0067	    Cavett problem with 5 components (chemical eng., Westerberg)
-
-c_mbeacxc	    complex version of mbeacxc
-c_west0067	    complex version of west0067
-mhd1280b	    Alfven spectra in magnetohydrodynamics (complex)
-neumann		    complex matrix
-qc324		    model of H+ in an electromagnetic field (complex)
-t2		    small complex matrix
-t3		    small complex matrix
-t4		    small complex matrix
-c4		    small complex matrix
-young1c		    aeronautical problem (complex matrix)
+ash219              overdetermined pattern of Holland survey.  Ashkenazi, 1974.
+bcsstk01            stiffness matrix for small generalized eigenvalue problem
+bcsstk16            stiffness matrix, Corp of Engineers dam
+fs_183_1            unsymmetric facsimile convergence matrix
+lp_afiro            NETLIB afiro linear programming problem
+mbeacxc             US economy, 1972.  Dan Szyld, while at NYU
+t1                  small example used in Chapter 2
+west0067            Cavett problem with 5 components (chemical eng., Westerberg)
+
+c_mbeacxc           complex version of mbeacxc
+c_west0067          complex version of west0067
+mhd1280b            Alfven spectra in magnetohydrodynamics (complex)
+neumann             complex matrix
+qc324               model of H+ in an electromagnetic field (complex)
+t2                  small complex matrix
+t3                  small complex matrix
+t4                  small complex matrix
+c4                  small complex matrix
+young1c             aeronautical problem (complex matrix)
 
 --------------------------------------------------------------------------------
-./Tcov:		    Exhaustive test coverage of CXSparse
+./Tcov:             Exhaustive test coverage of CXSparse
 --------------------------------------------------------------------------------
 
-covall		    same as covall.linux
-covall.linux	    find coverage (Linux)
-covall.sol	    find coverage (Solaris)
-cov.awk		    coverage summary
-cover		    print uncovered lines
-covs		    print uncovered lines
+covall              same as covall.linux
+covall.linux        find coverage (Linux)
+covall.sol          find coverage (Solaris)
+cov.awk             coverage summary
+cover               print uncovered lines
+covs                print uncovered lines
 cstcov_malloc_test.c    malloc test
 cstcov_malloc_test.h
-cstcov_test.c	    main program for Tcov tests
-gcovs		    run gcov (Linux)
-Makefile	    Makefile for Tcov tests
-nil		    an empty matrix
-zero		    a 1-by-1 zero matrix
-czero		    a 1-by-1 complex zero matrix
-README.txt	    README file for Tcov directory
+cstcov_test.c       main program for Tcov tests
+gcovs               run gcov (Linux)
+Makefile            Makefile for Tcov tests
+nil                 an empty matrix
+zero                a 1-by-1 zero matrix
+czero               a 1-by-1 complex zero matrix
+README.txt          README file for Tcov directory
 
 
 --------------------------------------------------------------------------------
@@ -525,6 +529,16 @@ Change Log:
 Refer to CSparse for changes in CSparse, which are immediately propagated
 into CXSparse (those Change Log entries are not repeated here).
 
+Jun 1, 2012.  version 3.1.0
+
+    * now based on CSparse v3.1.0
+    * This version of CXSparse changes the 'long' integer from UF_long to
+        cs_long_t.  UF_long is still available to user codes, however, so this
+        change is backward compatible with user codes.  Future user codes
+        should use cs_long_t instead of UF_long.
+    * changed unsigned integer in cs_amd.c to signed, for hash code.
+    * in Source, only changes are to cs_demo*.c, cs_print.c
+
 Nov 1, 2007.  version 2.2.1
 
     CXSparse/MATLAB/Test ported to Windows
@@ -535,7 +549,7 @@ May 31, 2007.  version 2.2.0
     * back-port to MATLAB 7.2 and earlier (which does not have mwIndex).
 
     * more graceful failure in cs_make when attempting complex matrix support
-	(Windows, in particular)
+        (Windows, in particular)
 
     * correction to CXSparse/Demo/Makefile
 
@@ -546,8 +560,8 @@ Mar 14, 2007.  Version 2.1.0.
     * MATLAB interface added for CXSparse.
 
     * cs_complex_t type added (a #define for "double _Complex", which is the
-	complex type used in CXSparse 2.0.x).  When compiling with a C++ 
-	compiler, the std::compex<double> type is used for the complex case.
+        complex type used in CXSparse 2.0.x).  When compiling with a C++ 
+        compiler, the std::compex<double> type is used for the complex case.
 
     * bug fix in complex sparse Cholesky (cs_chol.c).
 
@@ -556,15 +570,15 @@ Mar 14, 2007.  Version 2.1.0.
     * bug fix in cs_symperm for the complex case.
 
     * "beta" changed from complex to real, in sparse QR (cs_house.c,
-	cs_happly.c, cs_qr.c), (a performance/memory improvement, not a
-	bug fix).  Similar change to "nz2" in cs_cumsum.c.
+        cs_happly.c, cs_qr.c), (a performance/memory improvement, not a
+        bug fix).  Similar change to "nz2" in cs_cumsum.c.
 
 May 5, 2006.  Version 2.0.1 released.
 
     * long changed to UF_long, dependency in ../UFconfig/UFconfig.h added.
-	"UF_long" is a #define'd term in UFconfig.h.  It is normally defined
-	as "long", but can be redefined as something else if desired.
-	On Windows-64, it becomes __int64.
+        "UF_long" is a #define'd term in UFconfig.h.  It is normally defined
+        as "long", but can be redefined as something else if desired.
+        On Windows-64, it becomes __int64.
 
 Mar 6, 2006
 
diff --git a/CXSparse/Source/README.txt b/CXSparse/Source/README.txt
index 5f39716..c378868 100644
--- a/CXSparse/Source/README.txt
+++ b/CXSparse/Source/README.txt
@@ -1,3 +1,5 @@
 CXSparse/Source directory: primary ANSI C source code files for CXSparse.
 To compile the libcxsparse.a C-callable library, just type "make" in this
 directory.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse/Source/cs_add.c b/CXSparse/Source/cs_add.c
index 134fee5..44b0d3f 100644
--- a/CXSparse/Source/cs_add.c
+++ b/CXSparse/Source/cs_add.c
@@ -5,24 +5,24 @@ cs *cs_add (const cs *A, const cs *B, CS_ENTRY alpha, CS_ENTRY beta)
     CS_INT p, j, nz = 0, anz, *Cp, *Ci, *Bp, m, n, bnz, *w, values ;
     CS_ENTRY *x, *Bx, *Cx ;
     cs *C ;
-    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;         /* check inputs */
     if (A->m != B->m || A->n != B->n) return (NULL) ;
     m = A->m ; anz = A->p [A->n] ;
     n = B->n ; Bp = B->p ; Bx = B->x ; bnz = Bp [n] ;
-    w = cs_calloc (m, sizeof (CS_INT)) ;			    /* get workspace */
+    w = cs_calloc (m, sizeof (CS_INT)) ;                       /* get workspace */
     values = (A->x != NULL) && (Bx != NULL) ;
     x = values ? cs_malloc (m, sizeof (CS_ENTRY)) : NULL ;    /* get workspace */
-    C = cs_spalloc (m, n, anz + bnz, values, 0) ;	    /* allocate result*/
+    C = cs_spalloc (m, n, anz + bnz, values, 0) ;           /* allocate result*/
     if (!C || !w || (values && !x)) return (cs_done (C, w, x, 0)) ;
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
     for (j = 0 ; j < n ; j++)
     {
-	Cp [j] = nz ;			/* column j of C starts here */
-	nz = cs_scatter (A, j, alpha, w, x, j+1, C, nz) ;   /* alpha*A(:,j)*/
-	nz = cs_scatter (B, j, beta, w, x, j+1, C, nz) ;    /* beta*B(:,j) */
-	if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
+        Cp [j] = nz ;                   /* column j of C starts here */
+        nz = cs_scatter (A, j, alpha, w, x, j+1, C, nz) ;   /* alpha*A(:,j)*/
+        nz = cs_scatter (B, j, beta, w, x, j+1, C, nz) ;    /* beta*B(:,j) */
+        if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
     }
-    Cp [n] = nz ;			/* finalize the last column of C */
-    cs_sprealloc (C, 0) ;		/* remove extra space from C */
-    return (cs_done (C, w, x, 1)) ;	/* success; free workspace, return C */
+    Cp [n] = nz ;                       /* finalize the last column of C */
+    cs_sprealloc (C, 0) ;               /* remove extra space from C */
+    return (cs_done (C, w, x, 1)) ;     /* success; free workspace, return C */
 }
diff --git a/CXSparse/Source/cs_amd.c b/CXSparse/Source/cs_amd.c
index ec430ee..3f5c702 100644
--- a/CXSparse/Source/cs_amd.c
+++ b/CXSparse/Source/cs_amd.c
@@ -5,10 +5,10 @@ static CS_INT cs_wclear (CS_INT mark, CS_INT lemax, CS_INT *w, CS_INT n)
     CS_INT k ;
     if (mark < 2 || (mark + lemax < 0))
     {
-	for (k = 0 ; k < n ; k++) if (w [k] != 0) w [k] = 1 ;
-	mark = 2 ;
+        for (k = 0 ; k < n ; k++) if (w [k] != 0) w [k] = 1 ;
+        mark = 2 ;
     }
-    return (mark) ;	/* at this point, w [0..n-1] < mark holds */
+    return (mark) ;     /* at this point, w [0..n-1] < mark holds */
 }
 
 /* keep off-diagonal entries; drop diagonal entries */
@@ -19,54 +19,54 @@ CS_INT *cs_amd (CS_INT order, const cs *A)  /* order 0:natural, 1:Chol, 2:LU, 3:
 {
     cs *C, *A2, *AT ;
     CS_INT *Cp, *Ci, *last, *W, *len, *nv, *next, *P, *head, *elen, *degree, *w,
-	*hhead, *ATp, *ATi, d, dk, dext, lemax = 0, e, elenk, eln, i, j, k, k1,
-	k2, k3, jlast, ln, dense, nzmax, mindeg = 0, nvi, nvj, nvk, mark, wnvi,
-	ok, cnz, nel = 0, p, p1, p2, p3, p4, pj, pk, pk1, pk2, pn, q, n, m, t ;
-    unsigned CS_INT h ;
+        *hhead, *ATp, *ATi, d, dk, dext, lemax = 0, e, elenk, eln, i, j, k, k1,
+        k2, k3, jlast, ln, dense, nzmax, mindeg = 0, nvi, nvj, nvk, mark, wnvi,
+        ok, cnz, nel = 0, p, p1, p2, p3, p4, pj, pk, pk1, pk2, pn, q, n, m, t ;
+    CS_INT h ;
     /* --- Construct matrix C ----------------------------------------------- */
     if (!CS_CSC (A) || order <= 0 || order > 3) return (NULL) ; /* check */
-    AT = cs_transpose (A, 0) ;		    /* compute A' */
+    AT = cs_transpose (A, 0) ;              /* compute A' */
     if (!AT) return (NULL) ;
     m = A->m ; n = A->n ;
     dense = CS_MAX (16, 10 * sqrt ((double) n)) ;   /* find dense threshold */
     dense = CS_MIN (n-2, dense) ;
     if (order == 1 && n == m)
     {
-	C = cs_add (A, AT, 0, 0) ;	    /* C = A+A' */
+        C = cs_add (A, AT, 0, 0) ;          /* C = A+A' */
     }
     else if (order == 2)
     {
-	ATp = AT->p ;			    /* drop dense columns from AT */
-	ATi = AT->i ;
-	for (p2 = 0, j = 0 ; j < m ; j++)
-	{
-	    p = ATp [j] ;		    /* column j of AT starts here */
-	    ATp [j] = p2 ;		    /* new column j starts here */
-	    if (ATp [j+1] - p > dense) continue ;   /* skip dense col j */
-	    for ( ; p < ATp [j+1] ; p++) ATi [p2++] = ATi [p] ;
-	}
-	ATp [m] = p2 ;			    /* finalize AT */
-	A2 = cs_transpose (AT, 0) ;	    /* A2 = AT' */
-	C = A2 ? cs_multiply (AT, A2) : NULL ;	/* C=A'*A with no dense rows */
-	cs_spfree (A2) ;
+        ATp = AT->p ;                       /* drop dense columns from AT */
+        ATi = AT->i ;
+        for (p2 = 0, j = 0 ; j < m ; j++)
+        {
+            p = ATp [j] ;                   /* column j of AT starts here */
+            ATp [j] = p2 ;                  /* new column j starts here */
+            if (ATp [j+1] - p > dense) continue ;   /* skip dense col j */
+            for ( ; p < ATp [j+1] ; p++) ATi [p2++] = ATi [p] ;
+        }
+        ATp [m] = p2 ;                      /* finalize AT */
+        A2 = cs_transpose (AT, 0) ;         /* A2 = AT' */
+        C = A2 ? cs_multiply (AT, A2) : NULL ;  /* C=A'*A with no dense rows */
+        cs_spfree (A2) ;
     }
     else
     {
-	C = cs_multiply (AT, A) ;	    /* C=A'*A */
+        C = cs_multiply (AT, A) ;           /* C=A'*A */
     }
     cs_spfree (AT) ;
     if (!C) return (NULL) ;
-    cs_fkeep (C, &cs_diag, NULL) ;	    /* drop diagonal entries */
+    cs_fkeep (C, &cs_diag, NULL) ;          /* drop diagonal entries */
     Cp = C->p ;
     cnz = Cp [n] ;
-    P = cs_malloc (n+1, sizeof (CS_INT)) ;	    /* allocate result */
+    P = cs_malloc (n+1, sizeof (CS_INT)) ;     /* allocate result */
     W = cs_malloc (8*(n+1), sizeof (CS_INT)) ; /* get workspace */
-    t = cnz + cnz/5 + 2*n ;		    /* add elbow room to C */
+    t = cnz + cnz/5 + 2*n ;                 /* add elbow room to C */
     if (!P || !W || !cs_sprealloc (C, t)) return (cs_idone (P, C, W, 0)) ;
     len  = W           ; nv     = W +   (n+1) ; next   = W + 2*(n+1) ;
     head = W + 3*(n+1) ; elen   = W + 4*(n+1) ; degree = W + 5*(n+1) ;
     w    = W + 6*(n+1) ; hhead  = W + 7*(n+1) ;
-    last = P ;				    /* use P as workspace for last */
+    last = P ;                              /* use P as workspace for last */
     /* --- Initialize quotient graph ---------------------------------------- */
     for (k = 0 ; k < n ; k++) len [k] = Cp [k+1] - Cp [k] ;
     len [n] = 0 ;
@@ -74,291 +74,291 @@ CS_INT *cs_amd (CS_INT order, const cs *A)  /* order 0:natural, 1:Chol, 2:LU, 3:
     Ci = C->i ;
     for (i = 0 ; i <= n ; i++)
     {
-	head [i] = -1 ;			    /* degree list i is empty */
-	last [i] = -1 ;
-	next [i] = -1 ;
-	hhead [i] = -1 ;		    /* hash list i is empty */
-	nv [i] = 1 ;			    /* node i is just one node */
-	w [i] = 1 ;			    /* node i is alive */
-	elen [i] = 0 ;			    /* Ek of node i is empty */
-	degree [i] = len [i] ;		    /* degree of node i */
+        head [i] = -1 ;                     /* degree list i is empty */
+        last [i] = -1 ;
+        next [i] = -1 ;
+        hhead [i] = -1 ;                    /* hash list i is empty */
+        nv [i] = 1 ;                        /* node i is just one node */
+        w [i] = 1 ;                         /* node i is alive */
+        elen [i] = 0 ;                      /* Ek of node i is empty */
+        degree [i] = len [i] ;              /* degree of node i */
     }
-    mark = cs_wclear (0, 0, w, n) ;	    /* clear w */
-    elen [n] = -2 ;			    /* n is a dead element */
-    Cp [n] = -1 ;			    /* n is a root of assembly tree */
-    w [n] = 0 ;				    /* n is a dead element */
+    mark = cs_wclear (0, 0, w, n) ;         /* clear w */
+    elen [n] = -2 ;                         /* n is a dead element */
+    Cp [n] = -1 ;                           /* n is a root of assembly tree */
+    w [n] = 0 ;                             /* n is a dead element */
     /* --- Initialize degree lists ------------------------------------------ */
     for (i = 0 ; i < n ; i++)
     {
-	d = degree [i] ;
-	if (d == 0)			    /* node i is empty */
-	{
-	    elen [i] = -2 ;		    /* element i is dead */
-	    nel++ ;
-	    Cp [i] = -1 ;		    /* i is a root of assembly tree */
-	    w [i] = 0 ;
-	}
-	else if (d > dense)		    /* node i is dense */
-	{
-	    nv [i] = 0 ;		    /* absorb i into element n */
-	    elen [i] = -1 ;		    /* node i is dead */
-	    nel++ ;
-	    Cp [i] = CS_FLIP (n) ;
-	    nv [n]++ ;
-	}
-	else
-	{
-	    if (head [d] != -1) last [head [d]] = i ;
-	    next [i] = head [d] ;	    /* put node i in degree list d */
-	    head [d] = i ;
-	}
+        d = degree [i] ;
+        if (d == 0)                         /* node i is empty */
+        {
+            elen [i] = -2 ;                 /* element i is dead */
+            nel++ ;
+            Cp [i] = -1 ;                   /* i is a root of assembly tree */
+            w [i] = 0 ;
+        }
+        else if (d > dense)                 /* node i is dense */
+        {
+            nv [i] = 0 ;                    /* absorb i into element n */
+            elen [i] = -1 ;                 /* node i is dead */
+            nel++ ;
+            Cp [i] = CS_FLIP (n) ;
+            nv [n]++ ;
+        }
+        else
+        {
+            if (head [d] != -1) last [head [d]] = i ;
+            next [i] = head [d] ;           /* put node i in degree list d */
+            head [d] = i ;
+        }
     }
-    while (nel < n)			    /* while (selecting pivots) do */
+    while (nel < n)                         /* while (selecting pivots) do */
     {
-	/* --- Select node of minimum approximate degree -------------------- */
-	for (k = -1 ; mindeg < n && (k = head [mindeg]) == -1 ; mindeg++) ;
-	if (next [k] != -1) last [next [k]] = -1 ;
-	head [mindeg] = next [k] ;	    /* remove k from degree list */
-	elenk = elen [k] ;		    /* elenk = |Ek| */
-	nvk = nv [k] ;			    /* # of nodes k represents */
-	nel += nvk ;			    /* nv[k] nodes of A eliminated */
-	/* --- Garbage collection ------------------------------------------- */
-	if (elenk > 0 && cnz + mindeg >= nzmax)
-	{
-	    for (j = 0 ; j < n ; j++)
-	    {
-		if ((p = Cp [j]) >= 0)	    /* j is a live node or element */
-		{
-		    Cp [j] = Ci [p] ;	    /* save first entry of object */
-		    Ci [p] = CS_FLIP (j) ;  /* first entry is now CS_FLIP(j) */
-		}
-	    }
-	    for (q = 0, p = 0 ; p < cnz ; ) /* scan all of memory */
-	    {
-		if ((j = CS_FLIP (Ci [p++])) >= 0)  /* found object j */
-		{
-		    Ci [q] = Cp [j] ;	    /* restore first entry of object */
-		    Cp [j] = q++ ;	    /* new pointer to object j */
-		    for (k3 = 0 ; k3 < len [j]-1 ; k3++) Ci [q++] = Ci [p++] ;
-		}
-	    }
-	    cnz = q ;			    /* Ci [cnz...nzmax-1] now free */
-	}
-	/* --- Construct new element ---------------------------------------- */
-	dk = 0 ;
-	nv [k] = -nvk ;			    /* flag k as in Lk */
-	p = Cp [k] ;
-	pk1 = (elenk == 0) ? p : cnz ;	    /* do in place if elen[k] == 0 */
-	pk2 = pk1 ;
-	for (k1 = 1 ; k1 <= elenk + 1 ; k1++)
-	{
-	    if (k1 > elenk)
-	    {
-		e = k ;			    /* search the nodes in k */
-		pj = p ;		    /* list of nodes starts at Ci[pj]*/
-		ln = len [k] - elenk ;	    /* length of list of nodes in k */
-	    }
-	    else
-	    {
-		e = Ci [p++] ;		    /* search the nodes in e */
-		pj = Cp [e] ;
-		ln = len [e] ;		    /* length of list of nodes in e */
-	    }
-	    for (k2 = 1 ; k2 <= ln ; k2++)
-	    {
-		i = Ci [pj++] ;
-		if ((nvi = nv [i]) <= 0) continue ; /* node i dead, or seen */
-		dk += nvi ;		    /* degree[Lk] += size of node i */
-		nv [i] = -nvi ;		    /* negate nv[i] to denote i in Lk*/
-		Ci [pk2++] = i ;	    /* place i in Lk */
-		if (next [i] != -1) last [next [i]] = last [i] ;
-		if (last [i] != -1)	    /* remove i from degree list */
-		{
-		    next [last [i]] = next [i] ;
-		}
-		else
-		{
-		    head [degree [i]] = next [i] ;
-		}
-	    }
-	    if (e != k)
-	    {
-		Cp [e] = CS_FLIP (k) ;	    /* absorb e into k */
-		w [e] = 0 ;		    /* e is now a dead element */
-	    }
-	}
-	if (elenk != 0) cnz = pk2 ;	    /* Ci [cnz...nzmax] is free */
-	degree [k] = dk ;		    /* external degree of k - |Lk\i| */
-	Cp [k] = pk1 ;			    /* element k is in Ci[pk1..pk2-1] */
-	len [k] = pk2 - pk1 ;
-	elen [k] = -2 ;			    /* k is now an element */
-	/* --- Find set differences ----------------------------------------- */
-	mark = cs_wclear (mark, lemax, w, n) ;	/* clear w if necessary */
-	for (pk = pk1 ; pk < pk2 ; pk++)    /* scan 1: find |Le\Lk| */
-	{
-	    i = Ci [pk] ;
-	    if ((eln = elen [i]) <= 0) continue ;/* skip if elen[i] empty */
-	    nvi = -nv [i] ;			 /* nv [i] was negated */
-	    wnvi = mark - nvi ;
-	    for (p = Cp [i] ; p <= Cp [i] + eln - 1 ; p++)  /* scan Ei */
-	    {
-		e = Ci [p] ;
-		if (w [e] >= mark)
-		{
-		    w [e] -= nvi ;	    /* decrement |Le\Lk| */
-		}
-		else if (w [e] != 0)	    /* ensure e is a live element */
-		{
-		    w [e] = degree [e] + wnvi ;	/* 1st time e seen in scan 1 */
-		}
-	    }
-	}
-	/* --- Degree update ------------------------------------------------ */
-	for (pk = pk1 ; pk < pk2 ; pk++)    /* scan2: degree update */
-	{
-	    i = Ci [pk] ;		    /* consider node i in Lk */
-	    p1 = Cp [i] ;
-	    p2 = p1 + elen [i] - 1 ;
-	    pn = p1 ;
-	    for (h = 0, d = 0, p = p1 ; p <= p2 ; p++)    /* scan Ei */
-	    {
-		e = Ci [p] ;
-		if (w [e] != 0)		    /* e is an unabsorbed element */
-		{
-		    dext = w [e] - mark ;   /* dext = |Le\Lk| */
-		    if (dext > 0)
-		    {
-			d += dext ;	    /* sum up the set differences */
-			Ci [pn++] = e ;	    /* keep e in Ei */
-			h += e ;	    /* compute the hash of node i */
-		    }
-		    else
-		    {
-			Cp [e] = CS_FLIP (k) ;	/* aggressive absorb. e->k */
-			w [e] = 0 ;		/* e is a dead element */
-		    }
-		}
-	    }
-	    elen [i] = pn - p1 + 1 ;	    /* elen[i] = |Ei| */
-	    p3 = pn ;
-	    p4 = p1 + len [i] ;
-	    for (p = p2 + 1 ; p < p4 ; p++) /* prune edges in Ai */
-	    {
-		j = Ci [p] ;
-		if ((nvj = nv [j]) <= 0) continue ; /* node j dead or in Lk */
-		d += nvj ;		    /* degree(i) += |j| */
-		Ci [pn++] = j ;		    /* place j in node list of i */
-		h += j ;		    /* compute hash for node i */
-	    }
-	    if (d == 0)			    /* check for mass elimination */
-	    {
-		Cp [i] = CS_FLIP (k) ;	    /* absorb i into k */
-		nvi = -nv [i] ;
-		dk -= nvi ;		    /* |Lk| -= |i| */
-		nvk += nvi ;		    /* |k| += nv[i] */
-		nel += nvi ;
-		nv [i] = 0 ;
-		elen [i] = -1 ;		    /* node i is dead */
-	    }
-	    else
-	    {
-		degree [i] = CS_MIN (degree [i], d) ;	/* update degree(i) */
-		Ci [pn] = Ci [p3] ;	    /* move first node to end */
-		Ci [p3] = Ci [p1] ;	    /* move 1st el. to end of Ei */
-		Ci [p1] = k ;		    /* add k as 1st element in of Ei */
-		len [i] = pn - p1 + 1 ;	    /* new len of adj. list of node i */
-		h %= n ;		    /* finalize hash of i */
-		next [i] = hhead [h] ;	    /* place i in hash bucket */
-		hhead [h] = i ;
-		last [i] = h ;		    /* save hash of i in last[i] */
-	    }
-	}				    /* scan2 is done */
-	degree [k] = dk ;		    /* finalize |Lk| */
-	lemax = CS_MAX (lemax, dk) ;
-	mark = cs_wclear (mark+lemax, lemax, w, n) ;	/* clear w */
-	/* --- Supernode detection ------------------------------------------ */
-	for (pk = pk1 ; pk < pk2 ; pk++)
-	{
-	    i = Ci [pk] ;
-	    if (nv [i] >= 0) continue ;		/* skip if i is dead */
-	    h = last [i] ;			/* scan hash bucket of node i */
-	    i = hhead [h] ;
-	    hhead [h] = -1 ;			/* hash bucket will be empty */
-	    for ( ; i != -1 && next [i] != -1 ; i = next [i], mark++)
-	    {
-		ln = len [i] ;
-		eln = elen [i] ;
-		for (p = Cp [i]+1 ; p <= Cp [i] + ln-1 ; p++) w [Ci [p]] = mark;
-		jlast = i ;
-		for (j = next [i] ; j != -1 ; )	/* compare i with all j */
-		{
-		    ok = (len [j] == ln) && (elen [j] == eln) ;
-		    for (p = Cp [j] + 1 ; ok && p <= Cp [j] + ln - 1 ; p++)
-		    {
-			if (w [Ci [p]] != mark) ok = 0 ;    /* compare i and j*/
-		    }
-		    if (ok)			/* i and j are identical */
-		    {
-			Cp [j] = CS_FLIP (i) ;	/* absorb j into i */
-			nv [i] += nv [j] ;
-			nv [j] = 0 ;
-			elen [j] = -1 ;		/* node j is dead */
-			j = next [j] ;		/* delete j from hash bucket */
-			next [jlast] = j ;
-		    }
-		    else
-		    {
-			jlast = j ;		/* j and i are different */
-			j = next [j] ;
-		    }
-		}
-	    }
-	}
-	/* --- Finalize new element------------------------------------------ */
-	for (p = pk1, pk = pk1 ; pk < pk2 ; pk++)   /* finalize Lk */
-	{
-	    i = Ci [pk] ;
-	    if ((nvi = -nv [i]) <= 0) continue ;/* skip if i is dead */
-	    nv [i] = nvi ;			/* restore nv[i] */
-	    d = degree [i] + dk - nvi ;		/* compute external degree(i) */
-	    d = CS_MIN (d, n - nel - nvi) ;
-	    if (head [d] != -1) last [head [d]] = i ;
-	    next [i] = head [d] ;		/* put i back in degree list */
-	    last [i] = -1 ;
-	    head [d] = i ;
-	    mindeg = CS_MIN (mindeg, d) ;	/* find new minimum degree */
-	    degree [i] = d ;
-	    Ci [p++] = i ;			/* place i in Lk */
-	}
-	nv [k] = nvk ;			    /* # nodes absorbed into k */
-	if ((len [k] = p-pk1) == 0)	    /* length of adj list of element k*/
-	{
-	    Cp [k] = -1 ;		    /* k is a root of the tree */
-	    w [k] = 0 ;			    /* k is now a dead element */
-	}
-	if (elenk != 0) cnz = p ;	    /* free unused space in Lk */
+        /* --- Select node of minimum approximate degree -------------------- */
+        for (k = -1 ; mindeg < n && (k = head [mindeg]) == -1 ; mindeg++) ;
+        if (next [k] != -1) last [next [k]] = -1 ;
+        head [mindeg] = next [k] ;          /* remove k from degree list */
+        elenk = elen [k] ;                  /* elenk = |Ek| */
+        nvk = nv [k] ;                      /* # of nodes k represents */
+        nel += nvk ;                        /* nv[k] nodes of A eliminated */
+        /* --- Garbage collection ------------------------------------------- */
+        if (elenk > 0 && cnz + mindeg >= nzmax)
+        {
+            for (j = 0 ; j < n ; j++)
+            {
+                if ((p = Cp [j]) >= 0)      /* j is a live node or element */
+                {
+                    Cp [j] = Ci [p] ;       /* save first entry of object */
+                    Ci [p] = CS_FLIP (j) ;  /* first entry is now CS_FLIP(j) */
+                }
+            }
+            for (q = 0, p = 0 ; p < cnz ; ) /* scan all of memory */
+            {
+                if ((j = CS_FLIP (Ci [p++])) >= 0)  /* found object j */
+                {
+                    Ci [q] = Cp [j] ;       /* restore first entry of object */
+                    Cp [j] = q++ ;          /* new pointer to object j */
+                    for (k3 = 0 ; k3 < len [j]-1 ; k3++) Ci [q++] = Ci [p++] ;
+                }
+            }
+            cnz = q ;                       /* Ci [cnz...nzmax-1] now free */
+        }
+        /* --- Construct new element ---------------------------------------- */
+        dk = 0 ;
+        nv [k] = -nvk ;                     /* flag k as in Lk */
+        p = Cp [k] ;
+        pk1 = (elenk == 0) ? p : cnz ;      /* do in place if elen[k] == 0 */
+        pk2 = pk1 ;
+        for (k1 = 1 ; k1 <= elenk + 1 ; k1++)
+        {
+            if (k1 > elenk)
+            {
+                e = k ;                     /* search the nodes in k */
+                pj = p ;                    /* list of nodes starts at Ci[pj]*/
+                ln = len [k] - elenk ;      /* length of list of nodes in k */
+            }
+            else
+            {
+                e = Ci [p++] ;              /* search the nodes in e */
+                pj = Cp [e] ;
+                ln = len [e] ;              /* length of list of nodes in e */
+            }
+            for (k2 = 1 ; k2 <= ln ; k2++)
+            {
+                i = Ci [pj++] ;
+                if ((nvi = nv [i]) <= 0) continue ; /* node i dead, or seen */
+                dk += nvi ;                 /* degree[Lk] += size of node i */
+                nv [i] = -nvi ;             /* negate nv[i] to denote i in Lk*/
+                Ci [pk2++] = i ;            /* place i in Lk */
+                if (next [i] != -1) last [next [i]] = last [i] ;
+                if (last [i] != -1)         /* remove i from degree list */
+                {
+                    next [last [i]] = next [i] ;
+                }
+                else
+                {
+                    head [degree [i]] = next [i] ;
+                }
+            }
+            if (e != k)
+            {
+                Cp [e] = CS_FLIP (k) ;      /* absorb e into k */
+                w [e] = 0 ;                 /* e is now a dead element */
+            }
+        }
+        if (elenk != 0) cnz = pk2 ;         /* Ci [cnz...nzmax] is free */
+        degree [k] = dk ;                   /* external degree of k - |Lk\i| */
+        Cp [k] = pk1 ;                      /* element k is in Ci[pk1..pk2-1] */
+        len [k] = pk2 - pk1 ;
+        elen [k] = -2 ;                     /* k is now an element */
+        /* --- Find set differences ----------------------------------------- */
+        mark = cs_wclear (mark, lemax, w, n) ;  /* clear w if necessary */
+        for (pk = pk1 ; pk < pk2 ; pk++)    /* scan 1: find |Le\Lk| */
+        {
+            i = Ci [pk] ;
+            if ((eln = elen [i]) <= 0) continue ;/* skip if elen[i] empty */
+            nvi = -nv [i] ;                      /* nv [i] was negated */
+            wnvi = mark - nvi ;
+            for (p = Cp [i] ; p <= Cp [i] + eln - 1 ; p++)  /* scan Ei */
+            {
+                e = Ci [p] ;
+                if (w [e] >= mark)
+                {
+                    w [e] -= nvi ;          /* decrement |Le\Lk| */
+                }
+                else if (w [e] != 0)        /* ensure e is a live element */
+                {
+                    w [e] = degree [e] + wnvi ; /* 1st time e seen in scan 1 */
+                }
+            }
+        }
+        /* --- Degree update ------------------------------------------------ */
+        for (pk = pk1 ; pk < pk2 ; pk++)    /* scan2: degree update */
+        {
+            i = Ci [pk] ;                   /* consider node i in Lk */
+            p1 = Cp [i] ;
+            p2 = p1 + elen [i] - 1 ;
+            pn = p1 ;
+            for (h = 0, d = 0, p = p1 ; p <= p2 ; p++)    /* scan Ei */
+            {
+                e = Ci [p] ;
+                if (w [e] != 0)             /* e is an unabsorbed element */
+                {
+                    dext = w [e] - mark ;   /* dext = |Le\Lk| */
+                    if (dext > 0)
+                    {
+                        d += dext ;         /* sum up the set differences */
+                        Ci [pn++] = e ;     /* keep e in Ei */
+                        h += e ;            /* compute the hash of node i */
+                    }
+                    else
+                    {
+                        Cp [e] = CS_FLIP (k) ;  /* aggressive absorb. e->k */
+                        w [e] = 0 ;             /* e is a dead element */
+                    }
+                }
+            }
+            elen [i] = pn - p1 + 1 ;        /* elen[i] = |Ei| */
+            p3 = pn ;
+            p4 = p1 + len [i] ;
+            for (p = p2 + 1 ; p < p4 ; p++) /* prune edges in Ai */
+            {
+                j = Ci [p] ;
+                if ((nvj = nv [j]) <= 0) continue ; /* node j dead or in Lk */
+                d += nvj ;                  /* degree(i) += |j| */
+                Ci [pn++] = j ;             /* place j in node list of i */
+                h += j ;                    /* compute hash for node i */
+            }
+            if (d == 0)                     /* check for mass elimination */
+            {
+                Cp [i] = CS_FLIP (k) ;      /* absorb i into k */
+                nvi = -nv [i] ;
+                dk -= nvi ;                 /* |Lk| -= |i| */
+                nvk += nvi ;                /* |k| += nv[i] */
+                nel += nvi ;
+                nv [i] = 0 ;
+                elen [i] = -1 ;             /* node i is dead */
+            }
+            else
+            {
+                degree [i] = CS_MIN (degree [i], d) ;   /* update degree(i) */
+                Ci [pn] = Ci [p3] ;         /* move first node to end */
+                Ci [p3] = Ci [p1] ;         /* move 1st el. to end of Ei */
+                Ci [p1] = k ;               /* add k as 1st element in of Ei */
+                len [i] = pn - p1 + 1 ;     /* new len of adj. list of node i */
+                h = ((h<0) ? (-h):h) % n ;  /* finalize hash of i */
+                next [i] = hhead [h] ;      /* place i in hash bucket */
+                hhead [h] = i ;
+                last [i] = h ;              /* save hash of i in last[i] */
+            }
+        }                                   /* scan2 is done */
+        degree [k] = dk ;                   /* finalize |Lk| */
+        lemax = CS_MAX (lemax, dk) ;
+        mark = cs_wclear (mark+lemax, lemax, w, n) ;    /* clear w */
+        /* --- Supernode detection ------------------------------------------ */
+        for (pk = pk1 ; pk < pk2 ; pk++)
+        {
+            i = Ci [pk] ;
+            if (nv [i] >= 0) continue ;         /* skip if i is dead */
+            h = last [i] ;                      /* scan hash bucket of node i */
+            i = hhead [h] ;
+            hhead [h] = -1 ;                    /* hash bucket will be empty */
+            for ( ; i != -1 && next [i] != -1 ; i = next [i], mark++)
+            {
+                ln = len [i] ;
+                eln = elen [i] ;
+                for (p = Cp [i]+1 ; p <= Cp [i] + ln-1 ; p++) w [Ci [p]] = mark;
+                jlast = i ;
+                for (j = next [i] ; j != -1 ; ) /* compare i with all j */
+                {
+                    ok = (len [j] == ln) && (elen [j] == eln) ;
+                    for (p = Cp [j] + 1 ; ok && p <= Cp [j] + ln - 1 ; p++)
+                    {
+                        if (w [Ci [p]] != mark) ok = 0 ;    /* compare i and j*/
+                    }
+                    if (ok)                     /* i and j are identical */
+                    {
+                        Cp [j] = CS_FLIP (i) ;  /* absorb j into i */
+                        nv [i] += nv [j] ;
+                        nv [j] = 0 ;
+                        elen [j] = -1 ;         /* node j is dead */
+                        j = next [j] ;          /* delete j from hash bucket */
+                        next [jlast] = j ;
+                    }
+                    else
+                    {
+                        jlast = j ;             /* j and i are different */
+                        j = next [j] ;
+                    }
+                }
+            }
+        }
+        /* --- Finalize new element------------------------------------------ */
+        for (p = pk1, pk = pk1 ; pk < pk2 ; pk++)   /* finalize Lk */
+        {
+            i = Ci [pk] ;
+            if ((nvi = -nv [i]) <= 0) continue ;/* skip if i is dead */
+            nv [i] = nvi ;                      /* restore nv[i] */
+            d = degree [i] + dk - nvi ;         /* compute external degree(i) */
+            d = CS_MIN (d, n - nel - nvi) ;
+            if (head [d] != -1) last [head [d]] = i ;
+            next [i] = head [d] ;               /* put i back in degree list */
+            last [i] = -1 ;
+            head [d] = i ;
+            mindeg = CS_MIN (mindeg, d) ;       /* find new minimum degree */
+            degree [i] = d ;
+            Ci [p++] = i ;                      /* place i in Lk */
+        }
+        nv [k] = nvk ;                      /* # nodes absorbed into k */
+        if ((len [k] = p-pk1) == 0)         /* length of adj list of element k*/
+        {
+            Cp [k] = -1 ;                   /* k is a root of the tree */
+            w [k] = 0 ;                     /* k is now a dead element */
+        }
+        if (elenk != 0) cnz = p ;           /* free unused space in Lk */
     }
     /* --- Postordering ----------------------------------------------------- */
     for (i = 0 ; i < n ; i++) Cp [i] = CS_FLIP (Cp [i]) ;/* fix assembly tree */
     for (j = 0 ; j <= n ; j++) head [j] = -1 ;
-    for (j = n ; j >= 0 ; j--)		    /* place unordered nodes in lists */
+    for (j = n ; j >= 0 ; j--)              /* place unordered nodes in lists */
     {
-	if (nv [j] > 0) continue ;	    /* skip if j is an element */
-	next [j] = head [Cp [j]] ;	    /* place j in list of its parent */
-	head [Cp [j]] = j ;
+        if (nv [j] > 0) continue ;          /* skip if j is an element */
+        next [j] = head [Cp [j]] ;          /* place j in list of its parent */
+        head [Cp [j]] = j ;
     }
-    for (e = n ; e >= 0 ; e--)		    /* place elements in lists */
+    for (e = n ; e >= 0 ; e--)              /* place elements in lists */
     {
-	if (nv [e] <= 0) continue ;	    /* skip unless e is an element */
-	if (Cp [e] != -1)
-	{
-	    next [e] = head [Cp [e]] ;	    /* place e in list of its parent */
-	    head [Cp [e]] = e ;
-	}
+        if (nv [e] <= 0) continue ;         /* skip unless e is an element */
+        if (Cp [e] != -1)
+        {
+            next [e] = head [Cp [e]] ;      /* place e in list of its parent */
+            head [Cp [e]] = e ;
+        }
     }
-    for (k = 0, i = 0 ; i <= n ; i++)	    /* postorder the assembly tree */
+    for (k = 0, i = 0 ; i <= n ; i++)       /* postorder the assembly tree */
     {
-	if (Cp [i] == -1) k = cs_tdfs (i, k, head, next, P, w) ;
+        if (Cp [i] == -1) k = cs_tdfs (i, k, head, next, P, w) ;
     }
     return (cs_idone (P, C, W, 1)) ;
 }
diff --git a/CXSparse/Source/cs_chol.c b/CXSparse/Source/cs_chol.c
index a5e2912..535809a 100644
--- a/CXSparse/Source/cs_chol.c
+++ b/CXSparse/Source/cs_chol.c
@@ -8,12 +8,12 @@ csn *cs_chol (const cs *A, const css *S)
     csn *N ;
     if (!CS_CSC (A) || !S || !S->cp || !S->parent) return (NULL) ;
     n = A->n ;
-    N = cs_calloc (1, sizeof (csn)) ;	    /* allocate result */
-    c = cs_malloc (2*n, sizeof (CS_INT)) ;	    /* get CS_INT workspace */
+    N = cs_calloc (1, sizeof (csn)) ;       /* allocate result */
+    c = cs_malloc (2*n, sizeof (CS_INT)) ;     /* get CS_INT workspace */
     x = cs_malloc (n, sizeof (CS_ENTRY)) ;    /* get CS_ENTRY workspace */
     cp = S->cp ; pinv = S->pinv ; parent = S->parent ;
     C = pinv ? cs_symperm (A, pinv, 1) : ((cs *) A) ;
-    E = pinv ? C : NULL ;	    /* E is alias for A, or a copy E=A(p,p) */
+    E = pinv ? C : NULL ;           /* E is alias for A, or a copy E=A(p,p) */
     if (!N || !c || !x || !C) return (cs_ndone (N, E, c, x, 0)) ;
     s = c + n ;
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
@@ -21,39 +21,39 @@ csn *cs_chol (const cs *A, const css *S)
     if (!L) return (cs_ndone (N, E, c, x, 0)) ;
     Lp = L->p ; Li = L->i ; Lx = L->x ;
     for (k = 0 ; k < n ; k++) Lp [k] = c [k] = cp [k] ;
-    for (k = 0 ; k < n ; k++)	    /* compute L(:,k) for L*L' = C */
+    for (k = 0 ; k < n ; k++)       /* compute L(k,:) for L*L' = C */
     {
-	/* --- Nonzero pattern of L(k,:) ------------------------------------ */
-	top = cs_ereach (C, k, parent, s, c) ;	    /* find pattern of L(k,:) */
-	x [k] = 0 ;				    /* x (0:k) is now zero */
-	for (p = Cp [k] ; p < Cp [k+1] ; p++)	    /* x = full(triu(C(:,k))) */
-	{
-	    if (Ci [p] <= k) x [Ci [p]] = Cx [p] ;
-	}
-	d = x [k] ;			/* d = C(k,k) */
-	x [k] = 0 ;			/* clear x for k+1st iteration */
-	/* --- Triangular solve --------------------------------------------- */
-	for ( ; top < n ; top++)    /* solve L(0:k-1,0:k-1) * x = C(:,k) */
-	{
-	    i = s [top] ;		/* s [top..n-1] is pattern of L(k,:) */
-	    lki = x [i] / Lx [Lp [i]] ; /* L(k,i) = x (i) / L(i,i) */
-	    x [i] = 0 ;			/* clear x for k+1st iteration */
-	    for (p = Lp [i] + 1 ; p < c [i] ; p++)
-	    {
-		x [Li [p]] -= Lx [p] * lki ;
-	    }
-	    d -= lki * CS_CONJ (lki) ;		/* d = d - L(k,i)*L(k,i) */
-	    p = c [i]++ ;
-	    Li [p] = k ;		/* store L(k,i) in column i */
-	    Lx [p] = CS_CONJ (lki) ;
-	}
-	/* --- Compute L(k,k) ----------------------------------------------- */
-	if (CS_REAL (d) <= 0 || CS_IMAG (d) != 0)
+        /* --- Nonzero pattern of L(k,:) ------------------------------------ */
+        top = cs_ereach (C, k, parent, s, c) ;      /* find pattern of L(k,:) */
+        x [k] = 0 ;                                 /* x (0:k) is now zero */
+        for (p = Cp [k] ; p < Cp [k+1] ; p++)       /* x = full(triu(C(:,k))) */
+        {
+            if (Ci [p] <= k) x [Ci [p]] = Cx [p] ;
+        }
+        d = x [k] ;                     /* d = C(k,k) */
+        x [k] = 0 ;                     /* clear x for k+1st iteration */
+        /* --- Triangular solve --------------------------------------------- */
+        for ( ; top < n ; top++)    /* solve L(0:k-1,0:k-1) * x = C(:,k) */
+        {
+            i = s [top] ;               /* s [top..n-1] is pattern of L(k,:) */
+            lki = x [i] / Lx [Lp [i]] ; /* L(k,i) = x (i) / L(i,i) */
+            x [i] = 0 ;                 /* clear x for k+1st iteration */
+            for (p = Lp [i] + 1 ; p < c [i] ; p++)
+            {
+                x [Li [p]] -= Lx [p] * lki ;
+            }
+            d -= lki * CS_CONJ (lki) ;            /* d = d - L(k,i)*L(k,i) */
+            p = c [i]++ ;
+            Li [p] = k ;                /* store L(k,i) in column i */
+            Lx [p] = CS_CONJ (lki) ;
+        }
+        /* --- Compute L(k,k) ----------------------------------------------- */
+        if (CS_REAL (d) <= 0 || CS_IMAG (d) != 0)
 	    return (cs_ndone (N, E, c, x, 0)) ; /* not pos def */
-	p = c [k]++ ;
-	Li [p] = k ;		    /* store L(k,k) = sqrt (d) in column k */
-	Lx [p] = sqrt (d) ;
+        p = c [k]++ ;
+        Li [p] = k ;                /* store L(k,k) = sqrt (d) in column k */
+        Lx [p] = sqrt (d) ;
     }
-    Lp [n] = cp [n] ;		    /* finalize L */
+    Lp [n] = cp [n] ;               /* finalize L */
     return (cs_ndone (N, E, c, x, 1)) ; /* success: free E,s,x; return N */
 }
diff --git a/CXSparse/Source/cs_cholsol.c b/CXSparse/Source/cs_cholsol.c
index 3646981..6e7dc4f 100644
--- a/CXSparse/Source/cs_cholsol.c
+++ b/CXSparse/Source/cs_cholsol.c
@@ -6,18 +6,18 @@ CS_INT cs_cholsol (CS_INT order, const cs *A, CS_ENTRY *b)
     css *S ;
     csn *N ;
     CS_INT n, ok ;
-    if (!CS_CSC (A) || !b) return (0) ;	    /* check inputs */
+    if (!CS_CSC (A) || !b) return (0) ;     /* check inputs */
     n = A->n ;
-    S = cs_schol (order, A) ;		    /* ordering and symbolic analysis */
-    N = cs_chol (A, S) ;		    /* numeric Cholesky factorization */
+    S = cs_schol (order, A) ;               /* ordering and symbolic analysis */
+    N = cs_chol (A, S) ;                    /* numeric Cholesky factorization */
     x = cs_malloc (n, sizeof (CS_ENTRY)) ;    /* get workspace */
     ok = (S && N && x) ;
     if (ok)
     {
-	cs_ipvec (S->pinv, b, x, n) ;	/* x = P*b */
-	cs_lsolve (N->L, x) ;		/* x = L\x */
-	cs_ltsolve (N->L, x) ;		/* x = L'\x */
-	cs_pvec (S->pinv, x, b, n) ;	/* b = P'*x */
+        cs_ipvec (S->pinv, b, x, n) ;   /* x = P*b */
+        cs_lsolve (N->L, x) ;           /* x = L\x */
+        cs_ltsolve (N->L, x) ;          /* x = L'\x */
+        cs_pvec (S->pinv, x, b, n) ;    /* b = P'*x */
     }
     cs_free (x) ;
     cs_sfree (S) ;
diff --git a/CXSparse/Source/cs_compress.c b/CXSparse/Source/cs_compress.c
index 4162bd9..dc62eba 100644
--- a/CXSparse/Source/cs_compress.c
+++ b/CXSparse/Source/cs_compress.c
@@ -5,18 +5,18 @@ cs *cs_compress (const cs *T)
     CS_INT m, n, nz, p, k, *Cp, *Ci, *w, *Ti, *Tj ;
     CS_ENTRY *Cx, *Tx ;
     cs *C ;
-    if (!CS_TRIPLET (T)) return (NULL) ;		/* check inputs */
+    if (!CS_TRIPLET (T)) return (NULL) ;                /* check inputs */
     m = T->m ; n = T->n ; Ti = T->i ; Tj = T->p ; Tx = T->x ; nz = T->nz ;
-    C = cs_spalloc (m, n, nz, Tx != NULL, 0) ;		/* allocate result */
-    w = cs_calloc (n, sizeof (CS_INT)) ;			/* get workspace */
-    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;	/* out of memory */
+    C = cs_spalloc (m, n, nz, Tx != NULL, 0) ;          /* allocate result */
+    w = cs_calloc (n, sizeof (CS_INT)) ;                   /* get workspace */
+    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;    /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    for (k = 0 ; k < nz ; k++) w [Tj [k]]++ ;		/* column counts */
-    cs_cumsum (Cp, w, n) ;				/* column pointers */
+    for (k = 0 ; k < nz ; k++) w [Tj [k]]++ ;           /* column counts */
+    cs_cumsum (Cp, w, n) ;                              /* column pointers */
     for (k = 0 ; k < nz ; k++)
     {
-	Ci [p = w [Tj [k]]++] = Ti [k] ;    /* A(i,j) is the pth entry in C */
-	if (Cx) Cx [p] = Tx [k] ;
+        Ci [p = w [Tj [k]]++] = Ti [k] ;    /* A(i,j) is the pth entry in C */
+        if (Cx) Cx [p] = Tx [k] ;
     }
-    return (cs_done (C, w, NULL, 1)) ;	    /* success; free w and return C */
+    return (cs_done (C, w, NULL, 1)) ;      /* success; free w and return C */
 }
diff --git a/CXSparse/Source/cs_convert.c b/CXSparse/Source/cs_convert.c
index 2d6607f..7be9780 100644
--- a/CXSparse/Source/cs_convert.c
+++ b/CXSparse/Source/cs_convert.c
@@ -8,9 +8,9 @@ cs_di *cs_i_real (cs_ci *A, int real)
     int n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     cs_complex_t *Ax ;
     double *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_di_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
@@ -31,9 +31,9 @@ cs_ci *cs_i_complex (cs_di *A, int real)
     int n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     double *Ax ;
     cs_complex_t *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_ci_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
@@ -46,17 +46,17 @@ cs_ci *cs_i_complex (cs_di *A, int real)
     return (C) ;
 }
 
-/* convert from complex to real (UF_long version) */
+/* convert from complex to real (cs_long_t version) */
 /* C = real(A) if real is true, imag(A) otherwise */
-cs_dl *cs_l_real (cs_cl *A, UF_long real)
+cs_dl *cs_l_real (cs_cl *A, cs_long_t real)
 {
     cs_dl *C ;
-    UF_long n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
+    cs_long_t n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     cs_complex_t *Ax ;
     double *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_dl_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
@@ -69,17 +69,17 @@ cs_dl *cs_l_real (cs_cl *A, UF_long real)
     return (C) ;
 }
 
-/* convert from real to complex (UF_long version) */
+/* convert from real to complex (cs_long_t version) */
 /* C = A if real is true, or C = i*A otherwise */
-cs_cl *cs_l_complex (cs_dl *A, UF_long real)
+cs_cl *cs_l_complex (cs_dl *A, cs_long_t real)
 {
     cs_cl *C ;
-    UF_long n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
+    cs_long_t n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     double *Ax ;
     cs_complex_t *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_cl_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
diff --git a/CXSparse/Source/cs_counts.c b/CXSparse/Source/cs_counts.c
index de97b96..a1b3de0 100644
--- a/CXSparse/Source/cs_counts.c
+++ b/CXSparse/Source/cs_counts.c
@@ -9,53 +9,53 @@ static void init_ata (cs *AT, const CS_INT *post, CS_INT *w, CS_INT **head, CS_I
     for (k = 0 ; k < n ; k++) w [post [k]] = k ;    /* invert post */
     for (i = 0 ; i < m ; i++)
     {
-	for (k = n, p = ATp[i] ; p < ATp[i+1] ; p++) k = CS_MIN (k, w [ATi[p]]);
-	(*next) [i] = (*head) [k] ;	/* place row i in linked list k */
-	(*head) [k] = i ;
+        for (k = n, p = ATp[i] ; p < ATp[i+1] ; p++) k = CS_MIN (k, w [ATi[p]]);
+        (*next) [i] = (*head) [k] ;     /* place row i in linked list k */
+        (*head) [k] = i ;
     }
 }
 CS_INT *cs_counts (const cs *A, const CS_INT *parent, const CS_INT *post, CS_INT ata)
 {
     CS_INT i, j, k, n, m, J, s, p, q, jleaf, *ATp, *ATi, *maxfirst, *prevleaf,
-	*ancestor, *head = NULL, *next = NULL, *colcount, *w, *first, *delta ;
+        *ancestor, *head = NULL, *next = NULL, *colcount, *w, *first, *delta ;
     cs *AT ;
     if (!CS_CSC (A) || !parent || !post) return (NULL) ;    /* check inputs */
     m = A->m ; n = A->n ;
     s = 4*n + (ata ? (n+m+1) : 0) ;
-    delta = colcount = cs_malloc (n, sizeof (CS_INT)) ;	/* allocate result */
-    w = cs_malloc (s, sizeof (CS_INT)) ;			/* get workspace */
-    AT = cs_transpose (A, 0) ;				/* AT = A' */
+    delta = colcount = cs_malloc (n, sizeof (CS_INT)) ;    /* allocate result */
+    w = cs_malloc (s, sizeof (CS_INT)) ;                   /* get workspace */
+    AT = cs_transpose (A, 0) ;                          /* AT = A' */
     if (!AT || !colcount || !w) return (cs_idone (colcount, AT, w, 0)) ;
     ancestor = w ; maxfirst = w+n ; prevleaf = w+2*n ; first = w+3*n ;
-    for (k = 0 ; k < s ; k++) w [k] = -1 ;	/* clear workspace w [0..s-1] */
-    for (k = 0 ; k < n ; k++)			/* find first [j] */
+    for (k = 0 ; k < s ; k++) w [k] = -1 ;      /* clear workspace w [0..s-1] */
+    for (k = 0 ; k < n ; k++)                   /* find first [j] */
     {
-	j = post [k] ;
-	delta [j] = (first [j] == -1) ? 1 : 0 ;  /* delta[j]=1 if j is a leaf */
-	for ( ; j != -1 && first [j] == -1 ; j = parent [j]) first [j] = k ;
+        j = post [k] ;
+        delta [j] = (first [j] == -1) ? 1 : 0 ;  /* delta[j]=1 if j is a leaf */
+        for ( ; j != -1 && first [j] == -1 ; j = parent [j]) first [j] = k ;
     }
     ATp = AT->p ; ATi = AT->i ;
     if (ata) init_ata (AT, post, w, &head, &next) ;
     for (i = 0 ; i < n ; i++) ancestor [i] = i ; /* each node in its own set */
     for (k = 0 ; k < n ; k++)
     {
-	j = post [k] ;		/* j is the kth node in postordered etree */
-	if (parent [j] != -1) delta [parent [j]]-- ;	/* j is not a root */
-	for (J = HEAD (k,j) ; J != -1 ; J = NEXT (J))	/* J=j for LL'=A case */
-	{
-	    for (p = ATp [J] ; p < ATp [J+1] ; p++)
-	    {
-		i = ATi [p] ;
-		q = cs_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf);
-		if (jleaf >= 1) delta [j]++ ;   /* A(i,j) is in skeleton */
-		if (jleaf == 2) delta [q]-- ;	/* account for overlap in q */
-	    }
-	}
-	if (parent [j] != -1) ancestor [j] = parent [j] ;
+        j = post [k] ;          /* j is the kth node in postordered etree */
+        if (parent [j] != -1) delta [parent [j]]-- ;    /* j is not a root */
+        for (J = HEAD (k,j) ; J != -1 ; J = NEXT (J))   /* J=j for LL'=A case */
+        {
+            for (p = ATp [J] ; p < ATp [J+1] ; p++)
+            {
+                i = ATi [p] ;
+                q = cs_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf);
+                if (jleaf >= 1) delta [j]++ ;   /* A(i,j) is in skeleton */
+                if (jleaf == 2) delta [q]-- ;   /* account for overlap in q */
+            }
+        }
+        if (parent [j] != -1) ancestor [j] = parent [j] ;
     }
-    for (j = 0 ; j < n ; j++)		/* sum up delta's of each child */
+    for (j = 0 ; j < n ; j++)           /* sum up delta's of each child */
     {
-	if (parent [j] != -1) colcount [parent [j]] += colcount [j] ;
+        if (parent [j] != -1) colcount [parent [j]] += colcount [j] ;
     }
-    return (cs_idone (colcount, AT, w, 1)) ;	/* success: free workspace */
+    return (cs_idone (colcount, AT, w, 1)) ;    /* success: free workspace */
 } 
diff --git a/CXSparse/Source/cs_cumsum.c b/CXSparse/Source/cs_cumsum.c
index 780dde6..e839497 100644
--- a/CXSparse/Source/cs_cumsum.c
+++ b/CXSparse/Source/cs_cumsum.c
@@ -4,14 +4,14 @@ double cs_cumsum (CS_INT *p, CS_INT *c, CS_INT n)
 {
     CS_INT i, nz = 0 ;
     double nz2 = 0 ;
-    if (!p || !c) return (-1) ;	    /* check inputs */
+    if (!p || !c) return (-1) ;     /* check inputs */
     for (i = 0 ; i < n ; i++)
     {
-	p [i] = nz ;
-	nz += c [i] ;
-	nz2 += c [i] ;		    /* also in double to avoid CS_INT overflow */
-	c [i] = p [i] ;		    /* also copy p[0..n-1] back into c[0..n-1]*/
+        p [i] = nz ;
+        nz += c [i] ;
+        nz2 += c [i] ;              /* also in double to avoid CS_INT overflow */
+        c [i] = p [i] ;             /* also copy p[0..n-1] back into c[0..n-1]*/
     }
     p [n] = nz ;
-    return (nz2) ;		    /* return sum (c [0..n-1]) */
+    return (nz2) ;                  /* return sum (c [0..n-1]) */
 }
diff --git a/CXSparse/Source/cs_dfs.c b/CXSparse/Source/cs_dfs.c
index 6886b10..6c7115d 100644
--- a/CXSparse/Source/cs_dfs.c
+++ b/CXSparse/Source/cs_dfs.c
@@ -3,34 +3,34 @@
 CS_INT cs_dfs (CS_INT j, cs *G, CS_INT top, CS_INT *xi, CS_INT *pstack, const CS_INT *pinv)
 {
     CS_INT i, p, p2, done, jnew, head = 0, *Gp, *Gi ;
-    if (!CS_CSC (G) || !xi || !pstack) return (-1) ;	/* check inputs */
+    if (!CS_CSC (G) || !xi || !pstack) return (-1) ;    /* check inputs */
     Gp = G->p ; Gi = G->i ;
-    xi [0] = j ;		/* initialize the recursion stack */
+    xi [0] = j ;                /* initialize the recursion stack */
     while (head >= 0)
     {
-	j = xi [head] ;		/* get j from the top of the recursion stack */
-	jnew = pinv ? (pinv [j]) : j ;
-	if (!CS_MARKED (Gp, j))
-	{
-	    CS_MARK (Gp, j) ;	    /* mark node j as visited */
-	    pstack [head] = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew]) ;
-	}
-	done = 1 ;		    /* node j done if no unvisited neighbors */
-	p2 = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew+1]) ;
-	for (p = pstack [head] ; p < p2 ; p++)  /* examine all neighbors of j */
-	{
-	    i = Gi [p] ;	    /* consider neighbor node i */
-	    if (CS_MARKED (Gp, i)) continue ;	/* skip visited node i */
-	    pstack [head] = p ;	    /* pause depth-first search of node j */
-	    xi [++head] = i ;	    /* start dfs at node i */
-	    done = 0 ;		    /* node j is not done */
-	    break ;		    /* break, to start dfs (i) */
-	}
-	if (done)		/* depth-first search at node j is done */
-	{
-	    head-- ;		/* remove j from the recursion stack */
-	    xi [--top] = j ;	/* and place in the output stack */
-	}
+        j = xi [head] ;         /* get j from the top of the recursion stack */
+        jnew = pinv ? (pinv [j]) : j ;
+        if (!CS_MARKED (Gp, j))
+        {
+            CS_MARK (Gp, j) ;       /* mark node j as visited */
+            pstack [head] = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew]) ;
+        }
+        done = 1 ;                  /* node j done if no unvisited neighbors */
+        p2 = (jnew < 0) ? 0 : CS_UNFLIP (Gp [jnew+1]) ;
+        for (p = pstack [head] ; p < p2 ; p++)  /* examine all neighbors of j */
+        {
+            i = Gi [p] ;            /* consider neighbor node i */
+            if (CS_MARKED (Gp, i)) continue ;   /* skip visited node i */
+            pstack [head] = p ;     /* pause depth-first search of node j */
+            xi [++head] = i ;       /* start dfs at node i */
+            done = 0 ;              /* node j is not done */
+            break ;                 /* break, to start dfs (i) */
+        }
+        if (done)               /* depth-first search at node j is done */
+        {
+            head-- ;            /* remove j from the recursion stack */
+            xi [--top] = j ;    /* and place in the output stack */
+        }
     }
     return (top) ;
 }
diff --git a/CXSparse/Source/cs_dmperm.c b/CXSparse/Source/cs_dmperm.c
index c9807d8..e213845 100644
--- a/CXSparse/Source/cs_dmperm.c
+++ b/CXSparse/Source/cs_dmperm.c
@@ -5,31 +5,31 @@ static CS_INT cs_bfs (const cs *A, CS_INT n, CS_INT *wi, CS_INT *wj, CS_INT *que
 {
     CS_INT *Ap, *Ai, head = 0, tail = 0, j, i, p, j2 ;
     cs *C ;
-    for (j = 0 ; j < n ; j++)		/* place all unmatched nodes in queue */
+    for (j = 0 ; j < n ; j++)           /* place all unmatched nodes in queue */
     {
-	if (imatch [j] >= 0) continue ;	/* skip j if matched */
-	wj [j] = 0 ;			/* j in set C0 (R0 if transpose) */
-	queue [tail++] = j ;		/* place unmatched col j in queue */
+        if (imatch [j] >= 0) continue ; /* skip j if matched */
+        wj [j] = 0 ;                    /* j in set C0 (R0 if transpose) */
+        queue [tail++] = j ;            /* place unmatched col j in queue */
     }
-    if (tail == 0) return (1) ;		/* quick return if no unmatched nodes */
+    if (tail == 0) return (1) ;         /* quick return if no unmatched nodes */
     C = (mark == 1) ? ((cs *) A) : cs_transpose (A, 0) ;
-    if (!C) return (0) ;		/* bfs of C=A' to find R3,C3 from R0 */
+    if (!C) return (0) ;                /* bfs of C=A' to find R3,C3 from R0 */
     Ap = C->p ; Ai = C->i ;
-    while (head < tail)			/* while queue is not empty */
+    while (head < tail)                 /* while queue is not empty */
     {
-	j = queue [head++] ;		/* get the head of the queue */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    if (wi [i] >= 0) continue ;	/* skip if i is marked */
-	    wi [i] = mark ;		/* i in set R1 (C3 if transpose) */
-	    j2 = jmatch [i] ;		/* traverse alternating path to j2 */
-	    if (wj [j2] >= 0) continue ;/* skip j2 if it is marked */
-	    wj [j2] = mark ;		/* j2 in set C1 (R3 if transpose) */
-	    queue [tail++] = j2 ;	/* add j2 to queue */
-	}
+        j = queue [head++] ;            /* get the head of the queue */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (wi [i] >= 0) continue ; /* skip if i is marked */
+            wi [i] = mark ;             /* i in set R1 (C3 if transpose) */
+            j2 = jmatch [i] ;           /* traverse alternating path to j2 */
+            if (wj [j2] >= 0) continue ;/* skip j2 if it is marked */
+            wj [j2] = mark ;            /* j2 in set C1 (R3 if transpose) */
+            queue [tail++] = j2 ;       /* add j2 to queue */
+        }
     }
-    if (mark != 1) cs_spfree (C) ;	/* free A' if it was created */
+    if (mark != 1) cs_spfree (C) ;      /* free A' if it was created */
     return (1) ;
 }
 
@@ -41,9 +41,9 @@ static void cs_matched (CS_INT n, const CS_INT *wj, const CS_INT *imatch, CS_INT
     CS_INT kr = rr [set-1] ;
     for (j = 0 ; j < n ; j++)
     {
-	if (wj [j] != mark) continue ;	    /* skip if j is not in C set */
-	p [kr++] = imatch [j] ;
-	q [kc++] = j ;
+        if (wj [j] != mark) continue ;      /* skip if j is not in C set */
+        p [kr++] = imatch [j] ;
+        q [kc++] = j ;
     }
     cc [set+1] = kc ;
     rr [set] = kr ;
@@ -68,73 +68,73 @@ static CS_INT cs_rprune (CS_INT i, CS_INT j, CS_ENTRY aij, void *other)
 csd *cs_dmperm (const cs *A, CS_INT seed)
 {
     CS_INT m, n, i, j, k, cnz, nc, *jmatch, *imatch, *wi, *wj, *pinv, *Cp, *Ci,
-	*ps, *rs, nb1, nb2, *p, *q, *cc, *rr, *r, *s, ok ;
+        *ps, *rs, nb1, nb2, *p, *q, *cc, *rr, *r, *s, ok ;
     cs *C ;
     csd *D, *scc ;
     /* --- Maximum matching ------------------------------------------------- */
-    if (!CS_CSC (A)) return (NULL) ;		/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;            /* check inputs */
     m = A->m ; n = A->n ;
-    D = cs_dalloc (m, n) ;			/* allocate result */
+    D = cs_dalloc (m, n) ;                      /* allocate result */
     if (!D) return (NULL) ;
     p = D->p ; q = D->q ; r = D->r ; s = D->s ; cc = D->cc ; rr = D->rr ;
-    jmatch = cs_maxtrans (A, seed) ;		/* max transversal */
-    imatch = jmatch + m ;			/* imatch = inverse of jmatch */
+    jmatch = cs_maxtrans (A, seed) ;            /* max transversal */
+    imatch = jmatch + m ;                       /* imatch = inverse of jmatch */
     if (!jmatch) return (cs_ddone (D, NULL, jmatch, 0)) ;
     /* --- Coarse decomposition --------------------------------------------- */
-    wi = r ; wj = s ;				/* use r and s as workspace */
-    for (j = 0 ; j < n ; j++) wj [j] = -1 ;	/* unmark all cols for bfs */
-    for (i = 0 ; i < m ; i++) wi [i] = -1 ;	/* unmark all rows for bfs */
-    cs_bfs (A, n, wi, wj, q, imatch, jmatch, 1) ;	/* find C1, R1 from C0*/
-    ok = cs_bfs (A, m, wj, wi, p, jmatch, imatch, 3) ;	/* find R3, C3 from R0*/
+    wi = r ; wj = s ;                           /* use r and s as workspace */
+    for (j = 0 ; j < n ; j++) wj [j] = -1 ;     /* unmark all cols for bfs */
+    for (i = 0 ; i < m ; i++) wi [i] = -1 ;     /* unmark all rows for bfs */
+    cs_bfs (A, n, wi, wj, q, imatch, jmatch, 1) ;       /* find C1, R1 from C0*/
+    ok = cs_bfs (A, m, wj, wi, p, jmatch, imatch, 3) ;  /* find R3, C3 from R0*/
     if (!ok) return (cs_ddone (D, NULL, jmatch, 0)) ;
-    cs_unmatched (n, wj, q, cc, 0) ;			/* unmatched set C0 */
-    cs_matched (n, wj, imatch, p, q, cc, rr, 1, 1) ;	/* set R1 and C1 */
-    cs_matched (n, wj, imatch, p, q, cc, rr, 2, -1) ;	/* set R2 and C2 */
-    cs_matched (n, wj, imatch, p, q, cc, rr, 3, 3) ;	/* set R3 and C3 */
-    cs_unmatched (m, wi, p, rr, 3) ;			/* unmatched set R0 */
+    cs_unmatched (n, wj, q, cc, 0) ;                    /* unmatched set C0 */
+    cs_matched (n, wj, imatch, p, q, cc, rr, 1, 1) ;    /* set R1 and C1 */
+    cs_matched (n, wj, imatch, p, q, cc, rr, 2, -1) ;   /* set R2 and C2 */
+    cs_matched (n, wj, imatch, p, q, cc, rr, 3, 3) ;    /* set R3 and C3 */
+    cs_unmatched (m, wi, p, rr, 3) ;                    /* unmatched set R0 */
     cs_free (jmatch) ;
     /* --- Fine decomposition ----------------------------------------------- */
-    pinv = cs_pinv (p, m) ;	    /* pinv=p' */
+    pinv = cs_pinv (p, m) ;         /* pinv=p' */
     if (!pinv) return (cs_ddone (D, NULL, NULL, 0)) ;
     C = cs_permute (A, pinv, q, 0) ;/* C=A(p,q) (it will hold A(R2,C2)) */
     cs_free (pinv) ;
     if (!C) return (cs_ddone (D, NULL, NULL, 0)) ;
     Cp = C->p ;
-    nc = cc [3] - cc [2] ;	    /* delete cols C0, C1, and C3 from C */
+    nc = cc [3] - cc [2] ;          /* delete cols C0, C1, and C3 from C */
     if (cc [2] > 0) for (j = cc [2] ; j <= cc [3] ; j++) Cp [j-cc[2]] = Cp [j] ;
     C->n = nc ;
-    if (rr [2] - rr [1] < m)	    /* delete rows R0, R1, and R3 from C */
+    if (rr [2] - rr [1] < m)        /* delete rows R0, R1, and R3 from C */
     {
-	cs_fkeep (C, cs_rprune, rr) ;
-	cnz = Cp [nc] ;
-	Ci = C->i ;
-	if (rr [1] > 0) for (k = 0 ; k < cnz ; k++) Ci [k] -= rr [1] ;
+        cs_fkeep (C, cs_rprune, rr) ;
+        cnz = Cp [nc] ;
+        Ci = C->i ;
+        if (rr [1] > 0) for (k = 0 ; k < cnz ; k++) Ci [k] -= rr [1] ;
     }
     C->m = nc ;
-    scc = cs_scc (C) ;		    /* find strongly connected components of C*/
+    scc = cs_scc (C) ;              /* find strongly connected components of C*/
     if (!scc) return (cs_ddone (D, C, NULL, 0)) ;
     /* --- Combine coarse and fine decompositions --------------------------- */
-    ps = scc->p ;		    /* C(ps,ps) is the permuted matrix */
-    rs = scc->r ;		    /* kth block is rs[k]..rs[k+1]-1 */
-    nb1 = scc->nb  ;		    /* # of blocks of A(R2,C2) */
+    ps = scc->p ;                   /* C(ps,ps) is the permuted matrix */
+    rs = scc->r ;                   /* kth block is rs[k]..rs[k+1]-1 */
+    nb1 = scc->nb  ;                /* # of blocks of A(R2,C2) */
     for (k = 0 ; k < nc ; k++) wj [k] = q [ps [k] + cc [2]] ;
     for (k = 0 ; k < nc ; k++) q [k + cc [2]] = wj [k] ;
     for (k = 0 ; k < nc ; k++) wi [k] = p [ps [k] + rr [1]] ;
     for (k = 0 ; k < nc ; k++) p [k + rr [1]] = wi [k] ;
-    nb2 = 0 ;			    /* create the fine block partitions */
+    nb2 = 0 ;                       /* create the fine block partitions */
     r [0] = s [0] = 0 ;
-    if (cc [2] > 0) nb2++ ;	    /* leading coarse block A (R1, [C0 C1]) */
-    for (k = 0 ; k < nb1 ; k++)	    /* coarse block A (R2,C2) */
+    if (cc [2] > 0) nb2++ ;         /* leading coarse block A (R1, [C0 C1]) */
+    for (k = 0 ; k < nb1 ; k++)     /* coarse block A (R2,C2) */
     {
-	r [nb2] = rs [k] + rr [1] ; /* A (R2,C2) splits into nb1 fine blocks */
-	s [nb2] = rs [k] + cc [2] ;
-	nb2++ ;
+        r [nb2] = rs [k] + rr [1] ; /* A (R2,C2) splits into nb1 fine blocks */
+        s [nb2] = rs [k] + cc [2] ;
+        nb2++ ;
     }
     if (rr [2] < m)
     {
-	r [nb2] = rr [2] ;	    /* trailing coarse block A ([R3 R0], C3) */
-	s [nb2] = cc [3] ;
-	nb2++ ;
+        r [nb2] = rr [2] ;          /* trailing coarse block A ([R3 R0], C3) */
+        s [nb2] = cc [3] ;
+        nb2++ ;
     }
     r [nb2] = m ;
     s [nb2] = n ;
diff --git a/CXSparse/Source/cs_dropzeros.c b/CXSparse/Source/cs_dropzeros.c
index 0e77aad..d93f605 100644
--- a/CXSparse/Source/cs_dropzeros.c
+++ b/CXSparse/Source/cs_dropzeros.c
@@ -5,5 +5,5 @@ static CS_INT cs_nonzero (CS_INT i, CS_INT j, CS_ENTRY aij, void *other)
 }
 CS_INT cs_dropzeros (cs *A)
 {
-    return (cs_fkeep (A, &cs_nonzero, NULL)) ;	/* keep all nonzero entries */
+    return (cs_fkeep (A, &cs_nonzero, NULL)) ;  /* keep all nonzero entries */
 } 
diff --git a/CXSparse/Source/cs_dupl.c b/CXSparse/Source/cs_dupl.c
index f5aec44..fdf2e1e 100644
--- a/CXSparse/Source/cs_dupl.c
+++ b/CXSparse/Source/cs_dupl.c
@@ -4,31 +4,31 @@ CS_INT cs_dupl (cs *A)
 {
     CS_INT i, j, p, q, nz = 0, n, m, *Ap, *Ai, *w ;
     CS_ENTRY *Ax ;
-    if (!CS_CSC (A)) return (0) ;		/* check inputs */
+    if (!CS_CSC (A)) return (0) ;               /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    w = cs_malloc (m, sizeof (CS_INT)) ;		/* get workspace */
-    if (!w) return (0) ;			/* out of memory */
-    for (i = 0 ; i < m ; i++) w [i] = -1 ;	/* row i not yet seen */
+    w = cs_malloc (m, sizeof (CS_INT)) ;           /* get workspace */
+    if (!w) return (0) ;                        /* out of memory */
+    for (i = 0 ; i < m ; i++) w [i] = -1 ;      /* row i not yet seen */
     for (j = 0 ; j < n ; j++)
     {
-	q = nz ;				/* column j will start at q */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;			/* A(i,j) is nonzero */
-	    if (w [i] >= q)
-	    {
-		Ax [w [i]] += Ax [p] ;		/* A(i,j) is a duplicate */
-	    }
-	    else
-	    {
-		w [i] = nz ;			/* record where row i occurs */
-		Ai [nz] = i ;			/* keep A(i,j) */
-		Ax [nz++] = Ax [p] ;
-	    }
-	}
-	Ap [j] = q ;				/* record start of column j */
+        q = nz ;                                /* column j will start at q */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;                        /* A(i,j) is nonzero */
+            if (w [i] >= q)
+            {
+                Ax [w [i]] += Ax [p] ;          /* A(i,j) is a duplicate */
+            }
+            else
+            {
+                w [i] = nz ;                    /* record where row i occurs */
+                Ai [nz] = i ;                   /* keep A(i,j) */
+                Ax [nz++] = Ax [p] ;
+            }
+        }
+        Ap [j] = q ;                            /* record start of column j */
     }
-    Ap [n] = nz ;				/* finalize A */
-    cs_free (w) ;				/* free workspace */
-    return (cs_sprealloc (A, 0)) ;		/* remove extra space from A */
+    Ap [n] = nz ;                               /* finalize A */
+    cs_free (w) ;                               /* free workspace */
+    return (cs_sprealloc (A, 0)) ;              /* remove extra space from A */
 }
diff --git a/CXSparse/Source/cs_entry.c b/CXSparse/Source/cs_entry.c
index 0b1b94a..f712ba7 100644
--- a/CXSparse/Source/cs_entry.c
+++ b/CXSparse/Source/cs_entry.c
@@ -2,7 +2,7 @@
 /* add an entry to a triplet matrix; return 1 if ok, 0 otherwise */
 CS_INT cs_entry (cs *T, CS_INT i, CS_INT j, CS_ENTRY x)
 {
-    if (!CS_TRIPLET (T) || i < 0 || j < 0) return (0) ;	    /* check inputs */
+    if (!CS_TRIPLET (T) || i < 0 || j < 0) return (0) ;     /* check inputs */
     if (T->nz >= T->nzmax && !cs_sprealloc (T,2*(T->nzmax))) return (0) ;
     if (T->x) T->x [T->nz] = x ;
     T->i [T->nz] = i ;
diff --git a/CXSparse/Source/cs_ereach.c b/CXSparse/Source/cs_ereach.c
index 14d68e0..9edad52 100644
--- a/CXSparse/Source/cs_ereach.c
+++ b/CXSparse/Source/cs_ereach.c
@@ -5,19 +5,19 @@ CS_INT cs_ereach (const cs *A, CS_INT k, const CS_INT *parent, CS_INT *s, CS_INT
     CS_INT i, p, n, len, top, *Ap, *Ai ;
     if (!CS_CSC (A) || !parent || !s || !w) return (-1) ;   /* check inputs */
     top = n = A->n ; Ap = A->p ; Ai = A->i ;
-    CS_MARK (w, k) ;		    /* mark node k as visited */
+    CS_MARK (w, k) ;                /* mark node k as visited */
     for (p = Ap [k] ; p < Ap [k+1] ; p++)
     {
-	i = Ai [p] ;		    /* A(i,k) is nonzero */
-	if (i > k) continue ;	    /* only use upper triangular part of A */
-	for (len = 0 ; !CS_MARKED (w,i) ; i = parent [i]) /* traverse up etree*/
-	{
-	    s [len++] = i ;	    /* L(k,i) is nonzero */
-	    CS_MARK (w, i) ;	    /* mark i as visited */
-	}
-	while (len > 0) s [--top] = s [--len] ; /* push path onto stack */
+        i = Ai [p] ;                /* A(i,k) is nonzero */
+        if (i > k) continue ;       /* only use upper triangular part of A */
+        for (len = 0 ; !CS_MARKED (w,i) ; i = parent [i]) /* traverse up etree*/
+        {
+            s [len++] = i ;         /* L(k,i) is nonzero */
+            CS_MARK (w, i) ;        /* mark i as visited */
+        }
+        while (len > 0) s [--top] = s [--len] ; /* push path onto stack */
     }
-    for (p = top ; p < n ; p++) CS_MARK (w, s [p]) ;	/* unmark all nodes */
-    CS_MARK (w, k) ;		    /* unmark node k */
-    return (top) ;		    /* s [top..n-1] contains pattern of L(k,:)*/
+    for (p = top ; p < n ; p++) CS_MARK (w, s [p]) ;    /* unmark all nodes */
+    CS_MARK (w, k) ;                /* unmark node k */
+    return (top) ;                  /* s [top..n-1] contains pattern of L(k,:)*/
 }
diff --git a/CXSparse/Source/cs_etree.c b/CXSparse/Source/cs_etree.c
index 6f275d2..5620928 100644
--- a/CXSparse/Source/cs_etree.c
+++ b/CXSparse/Source/cs_etree.c
@@ -3,28 +3,28 @@
 CS_INT *cs_etree (const cs *A, CS_INT ata)
 {
     CS_INT i, k, p, m, n, inext, *Ap, *Ai, *w, *parent, *ancestor, *prev ;
-    if (!CS_CSC (A)) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;        /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ;
-    parent = cs_malloc (n, sizeof (CS_INT)) ;		/* allocate result */
-    w = cs_malloc (n + (ata ? m : 0), sizeof (CS_INT)) ;	/* get workspace */
+    parent = cs_malloc (n, sizeof (CS_INT)) ;              /* allocate result */
+    w = cs_malloc (n + (ata ? m : 0), sizeof (CS_INT)) ;   /* get workspace */
     if (!w || !parent) return (cs_idone (parent, NULL, w, 0)) ;
     ancestor = w ; prev = w + n ;
     if (ata) for (i = 0 ; i < m ; i++) prev [i] = -1 ;
     for (k = 0 ; k < n ; k++)
     {
-	parent [k] = -1 ;		    /* node k has no parent yet */
-	ancestor [k] = -1 ;		    /* nor does k have an ancestor */
-	for (p = Ap [k] ; p < Ap [k+1] ; p++)
-	{
-	    i = ata ? (prev [Ai [p]]) : (Ai [p]) ;
-	    for ( ; i != -1 && i < k ; i = inext)   /* traverse from i to k */
-	    {
-		inext = ancestor [i] ;		    /* inext = ancestor of i */
-		ancestor [i] = k ;		    /* path compression */
-		if (inext == -1) parent [i] = k ;   /* no anc., parent is k */
-	    }
-	    if (ata) prev [Ai [p]] = k ;
-	}
+        parent [k] = -1 ;                   /* node k has no parent yet */
+        ancestor [k] = -1 ;                 /* nor does k have an ancestor */
+        for (p = Ap [k] ; p < Ap [k+1] ; p++)
+        {
+            i = ata ? (prev [Ai [p]]) : (Ai [p]) ;
+            for ( ; i != -1 && i < k ; i = inext)   /* traverse from i to k */
+            {
+                inext = ancestor [i] ;              /* inext = ancestor of i */
+                ancestor [i] = k ;                  /* path compression */
+                if (inext == -1) parent [i] = k ;   /* no anc., parent is k */
+            }
+            if (ata) prev [Ai [p]] = k ;
+        }
     }
     return (cs_idone (parent, NULL, w, 1)) ;
 }
diff --git a/CXSparse/Source/cs_fkeep.c b/CXSparse/Source/cs_fkeep.c
index c1b05d0..09219e8 100644
--- a/CXSparse/Source/cs_fkeep.c
+++ b/CXSparse/Source/cs_fkeep.c
@@ -4,22 +4,22 @@ CS_INT cs_fkeep (cs *A, CS_INT (*fkeep) (CS_INT, CS_INT, CS_ENTRY, void *), void
 {
     CS_INT j, p, nz = 0, n, *Ap, *Ai ;
     CS_ENTRY *Ax ;
-    if (!CS_CSC (A) || !fkeep) return (-1) ;	/* check inputs */
+    if (!CS_CSC (A) || !fkeep) return (-1) ;    /* check inputs */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     for (j = 0 ; j < n ; j++)
     {
-	p = Ap [j] ;			    /* get current location of col j */
-	Ap [j] = nz ;			    /* record new location of col j */
-	for ( ; p < Ap [j+1] ; p++)
-	{
-	    if (fkeep (Ai [p], j, Ax ? Ax [p] : 1, other))
-	    {
-		if (Ax) Ax [nz] = Ax [p] ;  /* keep A(i,j) */
-		Ai [nz++] = Ai [p] ;
-	    }
-	}
+        p = Ap [j] ;                        /* get current location of col j */
+        Ap [j] = nz ;                       /* record new location of col j */
+        for ( ; p < Ap [j+1] ; p++)
+        {
+            if (fkeep (Ai [p], j, Ax ? Ax [p] : 1, other))
+            {
+                if (Ax) Ax [nz] = Ax [p] ;  /* keep A(i,j) */
+                Ai [nz++] = Ai [p] ;
+            }
+        }
     }
-    Ap [n] = nz ;			    /* finalize A */
-    cs_sprealloc (A, 0) ;		    /* remove extra space from A */
+    Ap [n] = nz ;                           /* finalize A */
+    cs_sprealloc (A, 0) ;                   /* remove extra space from A */
     return (nz) ;
 }
diff --git a/CXSparse/Source/cs_gaxpy.c b/CXSparse/Source/cs_gaxpy.c
index 93944de..db93cbc 100644
--- a/CXSparse/Source/cs_gaxpy.c
+++ b/CXSparse/Source/cs_gaxpy.c
@@ -4,14 +4,14 @@ CS_INT cs_gaxpy (const cs *A, const CS_ENTRY *x, CS_ENTRY *y)
 {
     CS_INT p, j, n, *Ap, *Ai ;
     CS_ENTRY *Ax ;
-    if (!CS_CSC (A) || !x || !y) return (0) ;	    /* check inputs */
+    if (!CS_CSC (A) || !x || !y) return (0) ;       /* check inputs */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    y [Ai [p]] += Ax [p] * x [j] ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            y [Ai [p]] += Ax [p] * x [j] ;
+        }
     }
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_happly.c b/CXSparse/Source/cs_happly.c
index 6793645..98a306c 100644
--- a/CXSparse/Source/cs_happly.c
+++ b/CXSparse/Source/cs_happly.c
@@ -4,16 +4,16 @@ CS_INT cs_happly (const cs *V, CS_INT i, double beta, CS_ENTRY *x)
 {
     CS_INT p, *Vp, *Vi ;
     CS_ENTRY *Vx, tau = 0 ;
-    if (!CS_CSC (V) || !x) return (0) ;	    /* check inputs */
+    if (!CS_CSC (V) || !x) return (0) ;     /* check inputs */
     Vp = V->p ; Vi = V->i ; Vx = V->x ;
     for (p = Vp [i] ; p < Vp [i+1] ; p++)   /* tau = v'*x */
     {
-	tau += CS_CONJ (Vx [p]) * x [Vi [p]] ;
+        tau += CS_CONJ (Vx [p]) * x [Vi [p]] ;
     }
-    tau *= beta ;			    /* tau = beta*(v'*x) */
+    tau *= beta ;                           /* tau = beta*(v'*x) */
     for (p = Vp [i] ; p < Vp [i+1] ; p++)   /* x = x - v*tau */
     {
-	x [Vi [p]] -= Vx [p] * tau ;
+        x [Vi [p]] -= Vx [p] * tau ;
     }
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_house.c b/CXSparse/Source/cs_house.c
index baf4082..e825c89 100644
--- a/CXSparse/Source/cs_house.c
+++ b/CXSparse/Source/cs_house.c
@@ -7,24 +7,24 @@ CS_ENTRY cs_house (CS_ENTRY *x, double *beta, CS_INT n)
 {
     CS_ENTRY s = 0 ;
     CS_INT i ;
-    if (!x || !beta) return (-1) ;	    /* check inputs */
+    if (!x || !beta) return (-1) ;          /* check inputs */
     /* s = norm(x) */
     for (i = 0 ; i < n ; i++) s += x [i] * CS_CONJ (x [i]) ;
     s = sqrt (s) ;
     if (s == 0)
     {
-	(*beta) = 0 ;
-	x [0] = 1 ;
+        (*beta) = 0 ;
+        x [0] = 1 ;
     }
     else
     {
-	/* s = sign(x[0]) * norm (x) ; */
-	if (x [0] != 0)
-	{
-	    s *= x [0] / CS_ABS (x [0]) ;
-	}
-	x [0] += s ;
-	(*beta) = 1. / CS_REAL (CS_CONJ (s) * x [0]) ;
+        /* s = sign(x[0]) * norm (x) ; */
+        if (x [0] != 0)
+        {
+            s *= x [0] / CS_ABS (x [0]) ;
+        }
+        x [0] += s ;
+        (*beta) = 1. / CS_REAL (CS_CONJ (s) * x [0]) ;
     }
     return (-s) ;
 }
diff --git a/CXSparse/Source/cs_ipvec.c b/CXSparse/Source/cs_ipvec.c
index d87fe29..4935ace 100644
--- a/CXSparse/Source/cs_ipvec.c
+++ b/CXSparse/Source/cs_ipvec.c
@@ -3,7 +3,7 @@
 CS_INT cs_ipvec (const CS_INT *p, const CS_ENTRY *b, CS_ENTRY *x, CS_INT n)
 {
     CS_INT k ;
-    if (!x || !b) return (0) ;				    /* check inputs */
+    if (!x || !b) return (0) ;                              /* check inputs */
     for (k = 0 ; k < n ; k++) x [p ? p [k] : k] = b [k] ;
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_leaf.c b/CXSparse/Source/cs_leaf.c
index 57307a4..bd93bda 100644
--- a/CXSparse/Source/cs_leaf.c
+++ b/CXSparse/Source/cs_leaf.c
@@ -7,16 +7,16 @@ CS_INT cs_leaf (CS_INT i, CS_INT j, const CS_INT *first, CS_INT *maxfirst, CS_IN
     if (!first || !maxfirst || !prevleaf || !ancestor || !jleaf) return (-1) ;
     *jleaf = 0 ;
     if (i <= j || first [j] <= maxfirst [i]) return (-1) ;  /* j not a leaf */
-    maxfirst [i] = first [j] ;	    /* update max first[j] seen so far */
-    jprev = prevleaf [i] ;	    /* jprev = previous leaf of ith subtree */
+    maxfirst [i] = first [j] ;      /* update max first[j] seen so far */
+    jprev = prevleaf [i] ;          /* jprev = previous leaf of ith subtree */
     prevleaf [i] = j ;
     *jleaf = (jprev == -1) ? 1: 2 ; /* j is first or subsequent leaf */
     if (*jleaf == 1) return (i) ;   /* if 1st leaf, q = root of ith subtree */
     for (q = jprev ; q != ancestor [q] ; q = ancestor [q]) ;
     for (s = jprev ; s != q ; s = sparent)
     {
-	sparent = ancestor [s] ;    /* path compression */
-	ancestor [s] = q ;
+        sparent = ancestor [s] ;    /* path compression */
+        ancestor [s] = q ;
     }
-    return (q) ;		    /* q = least common ancester (jprev,j) */
+    return (q) ;                    /* q = least common ancester (jprev,j) */
 }
diff --git a/CXSparse/Source/cs_load.c b/CXSparse/Source/cs_load.c
index 16c94cb..91e1f37 100644
--- a/CXSparse/Source/cs_load.c
+++ b/CXSparse/Source/cs_load.c
@@ -2,24 +2,24 @@
 /* load a triplet matrix from a file */
 cs *cs_load (FILE *f)
 {
-    CS_INT i, j ;
+    double i, j ;   /* use double for integers to avoid csi conflicts */
     double x ;
 #ifdef CS_COMPLEX
     double xi ;
 #endif
     cs *T ;
-    if (!f) return (NULL) ;				/* check inputs */
-    T = cs_spalloc (0, 0, 1, 1, 1) ;			/* allocate result */
+    if (!f) return (NULL) ;                             /* check inputs */
+    T = cs_spalloc (0, 0, 1, 1, 1) ;                    /* allocate result */
 #ifdef CS_COMPLEX
-    while (fscanf (f, ""CS_ID" "CS_ID" %lg %lg\n", &i, &j, &x, &xi) == 4)
+    while (fscanf (f, "%lg %lg %lg %lg\n", &i, &j, &x, &xi) == 4)
 #else
-    while (fscanf (f, ""CS_ID" "CS_ID" %lg\n", &i, &j, &x) == 3)
+    while (fscanf (f, "%lg %lg %lg\n", &i, &j, &x) == 3)
 #endif
     {
 #ifdef CS_COMPLEX
-	if (!cs_entry (T, i, j, x + xi*I)) return (cs_spfree (T)) ;
+        if (!cs_entry (T, (CS_INT) i, (CS_INT) j, x + xi*I)) return (cs_spfree (T)) ;
 #else
-	if (!cs_entry (T, i, j, x)) return (cs_spfree (T)) ;
+        if (!cs_entry (T, (CS_INT) i, (CS_INT) j, x)) return (cs_spfree (T)) ;
 #endif
     }
     return (T) ;
diff --git a/CXSparse/Source/cs_lsolve.c b/CXSparse/Source/cs_lsolve.c
index 1daa028..099b0c5 100644
--- a/CXSparse/Source/cs_lsolve.c
+++ b/CXSparse/Source/cs_lsolve.c
@@ -4,15 +4,15 @@ CS_INT cs_lsolve (const cs *L, CS_ENTRY *x)
 {
     CS_INT p, j, n, *Lp, *Li ;
     CS_ENTRY *Lx ;
-    if (!CS_CSC (L) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (L) || !x) return (0) ;                     /* check inputs */
     n = L->n ; Lp = L->p ; Li = L->i ; Lx = L->x ;
     for (j = 0 ; j < n ; j++)
     {
-	x [j] /= Lx [Lp [j]] ;
-	for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
-	{
-	    x [Li [p]] -= Lx [p] * x [j] ;
-	}
+        x [j] /= Lx [Lp [j]] ;
+        for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
+        {
+            x [Li [p]] -= Lx [p] * x [j] ;
+        }
     }
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_ltsolve.c b/CXSparse/Source/cs_ltsolve.c
index a818b07..29b1ca2 100644
--- a/CXSparse/Source/cs_ltsolve.c
+++ b/CXSparse/Source/cs_ltsolve.c
@@ -4,15 +4,15 @@ CS_INT cs_ltsolve (const cs *L, CS_ENTRY *x)
 {
     CS_INT p, j, n, *Lp, *Li ;
     CS_ENTRY *Lx ;
-    if (!CS_CSC (L) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (L) || !x) return (0) ;                     /* check inputs */
     n = L->n ; Lp = L->p ; Li = L->i ; Lx = L->x ;
     for (j = n-1 ; j >= 0 ; j--)
     {
-	for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
-	{
-	    x [j] -= CS_CONJ (Lx [p]) * x [Li [p]] ;
-	}
-	x [j] /= CS_CONJ (Lx [Lp [j]]) ;
+        for (p = Lp [j]+1 ; p < Lp [j+1] ; p++)
+        {
+            x [j] -= CS_CONJ (Lx [p]) * x [Li [p]] ;
+        }
+        x [j] /= CS_CONJ (Lx [Lp [j]]) ;
     }
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_lu.c b/CXSparse/Source/cs_lu.c
index f53f804..fcef39c 100644
--- a/CXSparse/Source/cs_lu.c
+++ b/CXSparse/Source/cs_lu.c
@@ -7,81 +7,81 @@ csn *cs_lu (const cs *A, const css *S, double tol)
     CS_ENTRY pivot, *Lx, *Ux, *x ;
     double a, t ;
     CS_INT *Lp, *Li, *Up, *Ui, *pinv, *xi, *q, n, ipiv, k, top, p, i, col, lnz,unz;
-    if (!CS_CSC (A) || !S) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A) || !S) return (NULL) ;          /* check inputs */
     n = A->n ;
     q = S->q ; lnz = S->lnz ; unz = S->unz ;
-    x = cs_malloc (n, sizeof (CS_ENTRY)) ;	    /* get CS_ENTRY workspace */
-    xi = cs_malloc (2*n, sizeof (CS_INT)) ;	    /* get CS_INT workspace */
-    N = cs_calloc (1, sizeof (csn)) ;		    /* allocate result */
+    x = cs_malloc (n, sizeof (CS_ENTRY)) ;            /* get CS_ENTRY workspace */
+    xi = cs_malloc (2*n, sizeof (CS_INT)) ;            /* get CS_INT workspace */
+    N = cs_calloc (1, sizeof (csn)) ;               /* allocate result */
     if (!x || !xi || !N) return (cs_ndone (N, NULL, xi, x, 0)) ;
-    N->L = L = cs_spalloc (n, n, lnz, 1, 0) ;	    /* allocate result L */
-    N->U = U = cs_spalloc (n, n, unz, 1, 0) ;	    /* allocate result U */
+    N->L = L = cs_spalloc (n, n, lnz, 1, 0) ;       /* allocate result L */
+    N->U = U = cs_spalloc (n, n, unz, 1, 0) ;       /* allocate result U */
     N->pinv = pinv = cs_malloc (n, sizeof (CS_INT)) ;  /* allocate result pinv */
     if (!L || !U || !pinv) return (cs_ndone (N, NULL, xi, x, 0)) ;
     Lp = L->p ; Up = U->p ;
-    for (i = 0 ; i < n ; i++) x [i] = 0 ;	    /* clear workspace */
-    for (i = 0 ; i < n ; i++) pinv [i] = -1 ;	    /* no rows pivotal yet */
-    for (k = 0 ; k <= n ; k++) Lp [k] = 0 ;	    /* no cols of L yet */
+    for (i = 0 ; i < n ; i++) x [i] = 0 ;           /* clear workspace */
+    for (i = 0 ; i < n ; i++) pinv [i] = -1 ;       /* no rows pivotal yet */
+    for (k = 0 ; k <= n ; k++) Lp [k] = 0 ;         /* no cols of L yet */
     lnz = unz = 0 ;
-    for (k = 0 ; k < n ; k++)	    /* compute L(:,k) and U(:,k) */
+    for (k = 0 ; k < n ; k++)       /* compute L(:,k) and U(:,k) */
     {
-	/* --- Triangular solve --------------------------------------------- */
-	Lp [k] = lnz ;		    /* L(:,k) starts here */
-	Up [k] = unz ;		    /* U(:,k) starts here */
-	if ((lnz + n > L->nzmax && !cs_sprealloc (L, 2*L->nzmax + n)) ||
-	    (unz + n > U->nzmax && !cs_sprealloc (U, 2*U->nzmax + n)))
-	{
-	    return (cs_ndone (N, NULL, xi, x, 0)) ;
-	}
-	Li = L->i ; Lx = L->x ; Ui = U->i ; Ux = U->x ;
-	col = q ? (q [k]) : k ;
-	top = cs_spsolve (L, A, col, xi, x, pinv, 1) ;	/* x = L\A(:,col) */
-	/* --- Find pivot --------------------------------------------------- */
-	ipiv = -1 ;
-	a = -1 ;
-	for (p = top ; p < n ; p++)
-	{
-	    i = xi [p] ;	    /* x(i) is nonzero */
-	    if (pinv [i] < 0)	    /* row i is not yet pivotal */
-	    {
-		if ((t = CS_ABS (x [i])) > a)
-		{
-		    a = t ;	    /* largest pivot candidate so far */
-		    ipiv = i ;
-		}
-	    }
-	    else		    /* x(i) is the entry U(pinv[i],k) */
-	    {
-		Ui [unz] = pinv [i] ;
-		Ux [unz++] = x [i] ;
-	    }
-	}
-	if (ipiv == -1 || a <= 0) return (cs_ndone (N, NULL, xi, x, 0)) ;
-	if (pinv [col] < 0 && CS_ABS (x [col]) >= a*tol) ipiv = col ;
-	/* --- Divide by pivot ---------------------------------------------- */
-	pivot = x [ipiv] ;	    /* the chosen pivot */
-	Ui [unz] = k ;		    /* last entry in U(:,k) is U(k,k) */
-	Ux [unz++] = pivot ;
-	pinv [ipiv] = k ;	    /* ipiv is the kth pivot row */
-	Li [lnz] = ipiv ;	    /* first entry in L(:,k) is L(k,k) = 1 */
-	Lx [lnz++] = 1 ;
-	for (p = top ; p < n ; p++) /* L(k+1:n,k) = x / pivot */
-	{
-	    i = xi [p] ;
-	    if (pinv [i] < 0)	    /* x(i) is an entry in L(:,k) */
-	    {
-		Li [lnz] = i ;	    /* save unpermuted row in L */
-		Lx [lnz++] = x [i] / pivot ;	/* scale pivot column */
-	    }
-	    x [i] = 0 ;		    /* x [0..n-1] = 0 for next k */
-	}
+        /* --- Triangular solve --------------------------------------------- */
+        Lp [k] = lnz ;              /* L(:,k) starts here */
+        Up [k] = unz ;              /* U(:,k) starts here */
+        if ((lnz + n > L->nzmax && !cs_sprealloc (L, 2*L->nzmax + n)) ||
+            (unz + n > U->nzmax && !cs_sprealloc (U, 2*U->nzmax + n)))
+        {
+            return (cs_ndone (N, NULL, xi, x, 0)) ;
+        }
+        Li = L->i ; Lx = L->x ; Ui = U->i ; Ux = U->x ;
+        col = q ? (q [k]) : k ;
+        top = cs_spsolve (L, A, col, xi, x, pinv, 1) ;  /* x = L\A(:,col) */
+        /* --- Find pivot --------------------------------------------------- */
+        ipiv = -1 ;
+        a = -1 ;
+        for (p = top ; p < n ; p++)
+        {
+            i = xi [p] ;            /* x(i) is nonzero */
+            if (pinv [i] < 0)       /* row i is not yet pivotal */
+            {
+                if ((t = CS_ABS (x [i])) > a)
+                {
+                    a = t ;         /* largest pivot candidate so far */
+                    ipiv = i ;
+                }
+            }
+            else                    /* x(i) is the entry U(pinv[i],k) */
+            {
+                Ui [unz] = pinv [i] ;
+                Ux [unz++] = x [i] ;
+            }
+        }
+        if (ipiv == -1 || a <= 0) return (cs_ndone (N, NULL, xi, x, 0)) ;
+        if (pinv [col] < 0 && CS_ABS (x [col]) >= a*tol) ipiv = col ;
+        /* --- Divide by pivot ---------------------------------------------- */
+        pivot = x [ipiv] ;          /* the chosen pivot */
+        Ui [unz] = k ;              /* last entry in U(:,k) is U(k,k) */
+        Ux [unz++] = pivot ;
+        pinv [ipiv] = k ;           /* ipiv is the kth pivot row */
+        Li [lnz] = ipiv ;           /* first entry in L(:,k) is L(k,k) = 1 */
+        Lx [lnz++] = 1 ;
+        for (p = top ; p < n ; p++) /* L(k+1:n,k) = x / pivot */
+        {
+            i = xi [p] ;
+            if (pinv [i] < 0)       /* x(i) is an entry in L(:,k) */
+            {
+                Li [lnz] = i ;      /* save unpermuted row in L */
+                Lx [lnz++] = x [i] / pivot ;    /* scale pivot column */
+            }
+            x [i] = 0 ;             /* x [0..n-1] = 0 for next k */
+        }
     }
     /* --- Finalize L and U ------------------------------------------------- */
     Lp [n] = lnz ;
     Up [n] = unz ;
-    Li = L->i ;			    /* fix row indices of L for final pinv */
+    Li = L->i ;                     /* fix row indices of L for final pinv */
     for (p = 0 ; p < lnz ; p++) Li [p] = pinv [Li [p]] ;
-    cs_sprealloc (L, 0) ;	    /* remove extra space from L and U */
+    cs_sprealloc (L, 0) ;           /* remove extra space from L and U */
     cs_sprealloc (U, 0) ;
-    return (cs_ndone (N, NULL, xi, x, 1)) ;	/* success */
+    return (cs_ndone (N, NULL, xi, x, 1)) ;     /* success */
 }
diff --git a/CXSparse/Source/cs_lusol.c b/CXSparse/Source/cs_lusol.c
index affe754..e0727e2 100644
--- a/CXSparse/Source/cs_lusol.c
+++ b/CXSparse/Source/cs_lusol.c
@@ -6,18 +6,18 @@ CS_INT cs_lusol (CS_INT order, const cs *A, CS_ENTRY *b, double tol)
     css *S ;
     csn *N ;
     CS_INT n, ok ;
-    if (!CS_CSC (A) || !b) return (0) ;	    /* check inputs */
+    if (!CS_CSC (A) || !b) return (0) ;     /* check inputs */
     n = A->n ;
-    S = cs_sqr (order, A, 0) ;		    /* ordering and symbolic analysis */
-    N = cs_lu (A, S, tol) ;		    /* numeric LU factorization */
+    S = cs_sqr (order, A, 0) ;              /* ordering and symbolic analysis */
+    N = cs_lu (A, S, tol) ;                 /* numeric LU factorization */
     x = cs_malloc (n, sizeof (CS_ENTRY)) ;    /* get workspace */
     ok = (S && N && x) ;
     if (ok)
     {
-	cs_ipvec (N->pinv, b, x, n) ;	    /* x = b(p) */
-	cs_lsolve (N->L, x) ;		    /* x = L\x */
-	cs_usolve (N->U, x) ;		    /* x = U\x */
-	cs_ipvec (S->q, x, b, n) ;	    /* b(q) = x */
+        cs_ipvec (N->pinv, b, x, n) ;       /* x = b(p) */
+        cs_lsolve (N->L, x) ;               /* x = L\x */
+        cs_usolve (N->U, x) ;               /* x = U\x */
+        cs_ipvec (S->q, x, b, n) ;          /* b(q) = x */
     }
     cs_free (x) ;
     cs_sfree (S) ;
diff --git a/CXSparse/Source/cs_malloc.c b/CXSparse/Source/cs_malloc.c
index c442ab7..2a3f6da 100644
--- a/CXSparse/Source/cs_malloc.c
+++ b/CXSparse/Source/cs_malloc.c
@@ -21,8 +21,8 @@ void *cs_calloc (CS_INT n, size_t size)
 /* wrapper for free */
 void *cs_free (void *p)
 {
-    if (p) free (p) ;	    /* free p if it is not already NULL */
-    return (NULL) ;	    /* return NULL to simplify the use of cs_free */
+    if (p) free (p) ;       /* free p if it is not already NULL */
+    return (NULL) ;         /* return NULL to simplify the use of cs_free */
 }
 
 /* wrapper for realloc */
@@ -30,6 +30,6 @@ void *cs_realloc (void *p, CS_INT n, size_t size, CS_INT *ok)
 {
     void *pnew ;
     pnew = realloc (p, CS_MAX (n,1) * size) ; /* realloc the block */
-    *ok = (pnew != NULL) ;		    /* realloc fails if pnew is NULL */
-    return ((*ok) ? pnew : p) ;		    /* return original p if failure */
+    *ok = (pnew != NULL) ;                  /* realloc fails if pnew is NULL */
+    return ((*ok) ? pnew : p) ;             /* return original p if failure */
 }
diff --git a/CXSparse/Source/cs_maxtrans.c b/CXSparse/Source/cs_maxtrans.c
index bf4421e..4947cee 100644
--- a/CXSparse/Source/cs_maxtrans.c
+++ b/CXSparse/Source/cs_maxtrans.c
@@ -1,42 +1,42 @@
 #include "cs.h"
 /* find an augmenting path starting at column k and extend the match if found */
 static void cs_augment (CS_INT k, const cs *A, CS_INT *jmatch, CS_INT *cheap, CS_INT *w,
-	CS_INT *js, CS_INT *is, CS_INT *ps)
+        CS_INT *js, CS_INT *is, CS_INT *ps)
 {
     CS_INT found = 0, p, i = -1, *Ap = A->p, *Ai = A->i, head = 0, j ;
-    js [0] = k ;			/* start with just node k in jstack */
+    js [0] = k ;                        /* start with just node k in jstack */
     while (head >= 0)
     {
-	/* --- Start (or continue) depth-first-search at node j ------------- */
-	j = js [head] ;			/* get j from top of jstack */
-	if (w [j] != k)			/* 1st time j visited for kth path */
-	{
-	    w [j] = k ;			/* mark j as visited for kth path */
-	    for (p = cheap [j] ; p < Ap [j+1] && !found ; p++)
-	    {
-		i = Ai [p] ;		/* try a cheap assignment (i,j) */
-		found = (jmatch [i] == -1) ;
-	    }
-	    cheap [j] = p ;		/* start here next time j is traversed*/
-	    if (found)
-	    {
-		is [head] = i ;		/* column j matched with row i */
-		break ;			/* end of augmenting path */
-	    }
-	    ps [head] = Ap [j] ;	/* no cheap match: start dfs for j */
-	}
-	/* --- Depth-first-search of neighbors of j ------------------------- */
-	for (p = ps [head] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;		/* consider row i */
-	    if (w [jmatch [i]] == k) continue ;	/* skip jmatch [i] if marked */
-	    ps [head] = p + 1 ;		/* pause dfs of node j */
-	    is [head] = i ;		/* i will be matched with j if found */
-	    js [++head] = jmatch [i] ;	/* start dfs at column jmatch [i] */
-	    break ;
-	}
-	if (p == Ap [j+1]) head-- ;	/* node j is done; pop from stack */
-    }					/* augment the match if path found: */
+        /* --- Start (or continue) depth-first-search at node j ------------- */
+        j = js [head] ;                 /* get j from top of jstack */
+        if (w [j] != k)                 /* 1st time j visited for kth path */
+        {
+            w [j] = k ;                 /* mark j as visited for kth path */
+            for (p = cheap [j] ; p < Ap [j+1] && !found ; p++)
+            {
+                i = Ai [p] ;            /* try a cheap assignment (i,j) */
+                found = (jmatch [i] == -1) ;
+            }
+            cheap [j] = p ;             /* start here next time j is traversed*/
+            if (found)
+            {
+                is [head] = i ;         /* column j matched with row i */
+                break ;                 /* end of augmenting path */
+            }
+            ps [head] = Ap [j] ;        /* no cheap match: start dfs for j */
+        }
+        /* --- Depth-first-search of neighbors of j ------------------------- */
+        for (p = ps [head] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;                /* consider row i */
+            if (w [jmatch [i]] == k) continue ; /* skip jmatch [i] if marked */
+            ps [head] = p + 1 ;         /* pause dfs of node j */
+            is [head] = i ;             /* i will be matched with j if found */
+            js [++head] = jmatch [i] ;  /* start dfs at column jmatch [i] */
+            break ;
+        }
+        if (p == Ap [j+1]) head-- ;     /* node j is done; pop from stack */
+    }                                   /* augment the match if path found: */
     if (found) for (p = head ; p >= 0 ; p--) jmatch [is [p]] = js [p] ;
 }
 
@@ -44,29 +44,29 @@ static void cs_augment (CS_INT k, const cs *A, CS_INT *jmatch, CS_INT *cheap, CS
 CS_INT *cs_maxtrans (const cs *A, CS_INT seed)  /*[jmatch [0..m-1]; imatch [0..n-1]]*/
 {
     CS_INT i, j, k, n, m, p, n2 = 0, m2 = 0, *Ap, *jimatch, *w, *cheap, *js, *is,
-	*ps, *Ai, *Cp, *jmatch, *imatch, *q ;
+        *ps, *Ai, *Cp, *jmatch, *imatch, *q ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;		    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;                /* check inputs */
     n = A->n ; m = A->m ; Ap = A->p ; Ai = A->i ;
     w = jimatch = cs_calloc (m+n, sizeof (CS_INT)) ;   /* allocate result */
     if (!jimatch) return (NULL) ;
-    for (k = 0, j = 0 ; j < n ; j++)	/* count nonempty rows and columns */
+    for (k = 0, j = 0 ; j < n ; j++)    /* count nonempty rows and columns */
     {
-	n2 += (Ap [j] < Ap [j+1]) ;
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    w [Ai [p]] = 1 ;
-	    k += (j == Ai [p]) ;	/* count entries already on diagonal */
-	}
+        n2 += (Ap [j] < Ap [j+1]) ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            w [Ai [p]] = 1 ;
+            k += (j == Ai [p]) ;        /* count entries already on diagonal */
+        }
     }
-    if (k == CS_MIN (m,n))		/* quick return if diagonal zero-free */
+    if (k == CS_MIN (m,n))              /* quick return if diagonal zero-free */
     {
-	jmatch = jimatch ; imatch = jimatch + m ;
-	for (i = 0 ; i < k ; i++) jmatch [i] = i ;
-	for (      ; i < m ; i++) jmatch [i] = -1 ;
-	for (j = 0 ; j < k ; j++) imatch [j] = j ;
-	for (      ; j < n ; j++) imatch [j] = -1 ;
-	return (cs_idone (jimatch, NULL, NULL, 1)) ;
+        jmatch = jimatch ; imatch = jimatch + m ;
+        for (i = 0 ; i < k ; i++) jmatch [i] = i ;
+        for (      ; i < m ; i++) jmatch [i] = -1 ;
+        for (j = 0 ; j < k ; j++) imatch [j] = j ;
+        for (      ; j < n ; j++) imatch [j] = -1 ;
+        return (cs_idone (jimatch, NULL, NULL, 1)) ;
     }
     for (i = 0 ; i < m ; i++) m2 += w [i] ;
     C = (m2 < n2) ? cs_transpose (A,0) : ((cs *) A) ; /* transpose if needed */
@@ -74,19 +74,19 @@ CS_INT *cs_maxtrans (const cs *A, CS_INT seed)  /*[jmatch [0..m-1]; imatch [0..n
     n = C->n ; m = C->m ; Cp = C->p ;
     jmatch = (m2 < n2) ? jimatch + n : jimatch ;
     imatch = (m2 < n2) ? jimatch : jimatch + m ;
-    w = cs_malloc (5*n, sizeof (CS_INT)) ;		    /* get workspace */
+    w = cs_malloc (5*n, sizeof (CS_INT)) ;             /* get workspace */
     if (!w) return (cs_idone (jimatch, (m2 < n2) ? C : NULL, w, 0)) ;
     cheap = w + n ; js = w + 2*n ; is = w + 3*n ; ps = w + 4*n ;
     for (j = 0 ; j < n ; j++) cheap [j] = Cp [j] ;  /* for cheap assignment */
-    for (j = 0 ; j < n ; j++) w [j] = -1 ;	    /* all columns unflagged */
-    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;	    /* nothing matched yet */
-    q = cs_randperm (n, seed) ;			    /* q = random permutation */
-    for (k = 0 ; k < n ; k++)	/* augment, starting at column q[k] */
+    for (j = 0 ; j < n ; j++) w [j] = -1 ;          /* all columns unflagged */
+    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;     /* nothing matched yet */
+    q = cs_randperm (n, seed) ;                     /* q = random permutation */
+    for (k = 0 ; k < n ; k++)   /* augment, starting at column q[k] */
     {
-	cs_augment (q ? q [k]: k, C, jmatch, cheap, w, js, is, ps) ;
+        cs_augment (q ? q [k]: k, C, jmatch, cheap, w, js, is, ps) ;
     }
     cs_free (q) ;
-    for (j = 0 ; j < n ; j++) imatch [j] = -1 ;	    /* find row match */
+    for (j = 0 ; j < n ; j++) imatch [j] = -1 ;     /* find row match */
     for (i = 0 ; i < m ; i++) if (jmatch [i] >= 0) imatch [jmatch [i]] = i ;
     return (cs_idone (jimatch, (m2 < n2) ? C : NULL, w, 1)) ;
 }
diff --git a/CXSparse/Source/cs_multiply.c b/CXSparse/Source/cs_multiply.c
index 74255e1..34e3a36 100644
--- a/CXSparse/Source/cs_multiply.c
+++ b/CXSparse/Source/cs_multiply.c
@@ -5,31 +5,31 @@ cs *cs_multiply (const cs *A, const cs *B)
     CS_INT p, j, nz = 0, anz, *Cp, *Ci, *Bp, m, n, bnz, *w, values, *Bi ;
     CS_ENTRY *x, *Bx, *Cx ;
     cs *C ;
-    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;	 /* check inputs */
+    if (!CS_CSC (A) || !CS_CSC (B)) return (NULL) ;      /* check inputs */
     if (A->n != B->m) return (NULL) ;
     m = A->m ; anz = A->p [A->n] ;
     n = B->n ; Bp = B->p ; Bi = B->i ; Bx = B->x ; bnz = Bp [n] ;
-    w = cs_calloc (m, sizeof (CS_INT)) ;			 /* get workspace */
+    w = cs_calloc (m, sizeof (CS_INT)) ;                    /* get workspace */
     values = (A->x != NULL) && (Bx != NULL) ;
     x = values ? cs_malloc (m, sizeof (CS_ENTRY)) : NULL ; /* get workspace */
-    C = cs_spalloc (m, n, anz + bnz, values, 0) ;	 /* allocate result */
+    C = cs_spalloc (m, n, anz + bnz, values, 0) ;        /* allocate result */
     if (!C || !w || (values && !x)) return (cs_done (C, w, x, 0)) ;
     Cp = C->p ;
     for (j = 0 ; j < n ; j++)
     {
-	if (nz + m > C->nzmax && !cs_sprealloc (C, 2*(C->nzmax)+m))
-	{
-	    return (cs_done (C, w, x, 0)) ;		/* out of memory */
-	} 
-	Ci = C->i ; Cx = C->x ;		/* C->i and C->x may be reallocated */
-	Cp [j] = nz ;			/* column j of C starts here */
-	for (p = Bp [j] ; p < Bp [j+1] ; p++)
-	{
-	    nz = cs_scatter (A, Bi [p], Bx ? Bx [p] : 1, w, x, j+1, C, nz) ;
-	}
-	if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
+        if (nz + m > C->nzmax && !cs_sprealloc (C, 2*(C->nzmax)+m))
+        {
+            return (cs_done (C, w, x, 0)) ;             /* out of memory */
+        } 
+        Ci = C->i ; Cx = C->x ;         /* C->i and C->x may be reallocated */
+        Cp [j] = nz ;                   /* column j of C starts here */
+        for (p = Bp [j] ; p < Bp [j+1] ; p++)
+        {
+            nz = cs_scatter (A, Bi [p], Bx ? Bx [p] : 1, w, x, j+1, C, nz) ;
+        }
+        if (values) for (p = Cp [j] ; p < nz ; p++) Cx [p] = x [Ci [p]] ;
     }
-    Cp [n] = nz ;			/* finalize the last column of C */
-    cs_sprealloc (C, 0) ;		/* remove extra space from C */
-    return (cs_done (C, w, x, 1)) ;	/* success; free workspace, return C */
+    Cp [n] = nz ;                       /* finalize the last column of C */
+    cs_sprealloc (C, 0) ;               /* remove extra space from C */
+    return (cs_done (C, w, x, 1)) ;     /* success; free workspace, return C */
 }
diff --git a/CXSparse/Source/cs_norm.c b/CXSparse/Source/cs_norm.c
index 115c15a..0e7b3c6 100644
--- a/CXSparse/Source/cs_norm.c
+++ b/CXSparse/Source/cs_norm.c
@@ -5,12 +5,12 @@ double cs_norm (const cs *A)
     CS_INT p, j, n, *Ap ;
     CS_ENTRY *Ax ;
     double norm = 0, s ;
-    if (!CS_CSC (A) || !A->x) return (-1) ;		/* check inputs */
+    if (!CS_CSC (A) || !A->x) return (-1) ;             /* check inputs */
     n = A->n ; Ap = A->p ; Ax = A->x ;
     for (j = 0 ; j < n ; j++)
     {
-	for (s = 0, p = Ap [j] ; p < Ap [j+1] ; p++) s += CS_ABS (Ax [p]) ;
-	norm = CS_MAX (norm, s) ;
+        for (s = 0, p = Ap [j] ; p < Ap [j+1] ; p++) s += CS_ABS (Ax [p]) ;
+        norm = CS_MAX (norm, s) ;
     }
     return (norm) ;
 }
diff --git a/CXSparse/Source/cs_permute.c b/CXSparse/Source/cs_permute.c
index 8ab5966..9adae45 100644
--- a/CXSparse/Source/cs_permute.c
+++ b/CXSparse/Source/cs_permute.c
@@ -5,21 +5,21 @@ cs *cs_permute (const cs *A, const CS_INT *pinv, const CS_INT *q, CS_INT values)
     CS_INT t, j, k, nz = 0, m, n, *Ap, *Ai, *Cp, *Ci ;
     CS_ENTRY *Cx, *Ax ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;	/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;    /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     C = cs_spalloc (m, n, Ap [n], values && Ax != NULL, 0) ;  /* alloc result */
     if (!C) return (cs_done (C, NULL, NULL, 0)) ;   /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
     for (k = 0 ; k < n ; k++)
     {
-	Cp [k] = nz ;			/* column k of C is column q[k] of A */
-	j = q ? (q [k]) : k ;
-	for (t = Ap [j] ; t < Ap [j+1] ; t++)
-	{
-	    if (Cx) Cx [nz] = Ax [t] ;	/* row i of A is row pinv[i] of C */
-	    Ci [nz++] = pinv ? (pinv [Ai [t]]) : Ai [t] ;
-	}
+        Cp [k] = nz ;                   /* column k of C is column q[k] of A */
+        j = q ? (q [k]) : k ;
+        for (t = Ap [j] ; t < Ap [j+1] ; t++)
+        {
+            if (Cx) Cx [nz] = Ax [t] ;  /* row i of A is row pinv[i] of C */
+            Ci [nz++] = pinv ? (pinv [Ai [t]]) : Ai [t] ;
+        }
     }
-    Cp [n] = nz ;			/* finalize the last column of C */
+    Cp [n] = nz ;                       /* finalize the last column of C */
     return (cs_done (C, NULL, NULL, 1)) ;
 }
diff --git a/CXSparse/Source/cs_pinv.c b/CXSparse/Source/cs_pinv.c
index 4bcd0f0..de0660e 100644
--- a/CXSparse/Source/cs_pinv.c
+++ b/CXSparse/Source/cs_pinv.c
@@ -3,9 +3,9 @@
 CS_INT *cs_pinv (CS_INT const *p, CS_INT n)
 {
     CS_INT k, *pinv ;
-    if (!p) return (NULL) ;			/* p = NULL denotes identity */
-    pinv = cs_malloc (n, sizeof (CS_INT)) ;	/* allocate result */
-    if (!pinv) return (NULL) ;			/* out of memory */
+    if (!p) return (NULL) ;                     /* p = NULL denotes identity */
+    pinv = cs_malloc (n, sizeof (CS_INT)) ;        /* allocate result */
+    if (!pinv) return (NULL) ;                  /* out of memory */
     for (k = 0 ; k < n ; k++) pinv [p [k]] = k ;/* invert the permutation */
-    return (pinv) ;				/* return result */
+    return (pinv) ;                             /* return result */
 }
diff --git a/CXSparse/Source/cs_post.c b/CXSparse/Source/cs_post.c
index bf3a69c..0f61203 100644
--- a/CXSparse/Source/cs_post.c
+++ b/CXSparse/Source/cs_post.c
@@ -3,22 +3,22 @@
 CS_INT *cs_post (const CS_INT *parent, CS_INT n)
 {
     CS_INT j, k = 0, *post, *w, *head, *next, *stack ;
-    if (!parent) return (NULL) ;			/* check inputs */
-    post = cs_malloc (n, sizeof (CS_INT)) ;		/* allocate result */
-    w = cs_malloc (3*n, sizeof (CS_INT)) ;			/* get workspace */
+    if (!parent) return (NULL) ;                        /* check inputs */
+    post = cs_malloc (n, sizeof (CS_INT)) ;                /* allocate result */
+    w = cs_malloc (3*n, sizeof (CS_INT)) ;                 /* get workspace */
     if (!w || !post) return (cs_idone (post, NULL, w, 0)) ;
     head = w ; next = w + n ; stack = w + 2*n ;
-    for (j = 0 ; j < n ; j++) head [j] = -1 ;		/* empty linked lists */
-    for (j = n-1 ; j >= 0 ; j--)	    /* traverse nodes in reverse order*/
+    for (j = 0 ; j < n ; j++) head [j] = -1 ;           /* empty linked lists */
+    for (j = n-1 ; j >= 0 ; j--)            /* traverse nodes in reverse order*/
     {
-	if (parent [j] == -1) continue ;    /* j is a root */
-	next [j] = head [parent [j]] ;	    /* add j to list of its parent */
-	head [parent [j]] = j ;
+        if (parent [j] == -1) continue ;    /* j is a root */
+        next [j] = head [parent [j]] ;      /* add j to list of its parent */
+        head [parent [j]] = j ;
     }
     for (j = 0 ; j < n ; j++)
     {
-	if (parent [j] != -1) continue ;    /* skip j if it is not a root */
-	k = cs_tdfs (j, k, head, next, post, stack) ;
+        if (parent [j] != -1) continue ;    /* skip j if it is not a root */
+        k = cs_tdfs (j, k, head, next, post, stack) ;
     }
     return (cs_idone (post, NULL, w, 1)) ;  /* success; free w, return post */
 }
diff --git a/CXSparse/Source/cs_print.c b/CXSparse/Source/cs_print.c
index aa4830c..0767607 100644
--- a/CXSparse/Source/cs_print.c
+++ b/CXSparse/Source/cs_print.c
@@ -1,5 +1,5 @@
 #include "cs.h"
-/* print a sparse matrix */
+/* print a sparse matrix; use %g for integers to avoid differences with CS_INT */
 CS_INT cs_print (const cs *A, CS_INT brief)
 {
     CS_INT p, j, m, n, nzmax, nz, *Ap, *Ai ;
@@ -8,39 +8,44 @@ CS_INT cs_print (const cs *A, CS_INT brief)
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     nzmax = A->nzmax ; nz = A->nz ;
     printf ("CXSparse Version %d.%d.%d, %s.  %s\n", CS_VER, CS_SUBVER,
-	CS_SUBSUB, CS_DATE, CS_COPYRIGHT) ;
+        CS_SUBSUB, CS_DATE, CS_COPYRIGHT) ;
     if (nz < 0)
     {
-	printf (""CS_ID"-by-"CS_ID", nzmax: "CS_ID" nnz: "CS_ID", 1-norm: %g\n", m, n, nzmax,
-		Ap [n], cs_norm (A)) ;
-	for (j = 0 ; j < n ; j++)
-	{
-	    printf ("    col "CS_ID" : locations "CS_ID" to "CS_ID"\n", j, Ap [j], Ap [j+1]-1);
-	    for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	    {
+        printf ("%g-by-%g, nzmax: %g nnz: %g, 1-norm: %g\n", (double) m,
+            (double) n, (double) nzmax, (double) (Ap [n]), cs_norm (A)) ;
+        for (j = 0 ; j < n ; j++)
+        {
+            printf ("    col %g : locations %g to %g\n", (double) j, 
+                (double) (Ap [j]), (double) (Ap [j+1]-1)) ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                printf ("      %g : ", (double) (Ai [p])) ;
 #ifdef CS_COMPLEX
-		printf ("      "CS_ID" : (%g, %g)\n", Ai [p], 
-		    Ax ? CS_REAL (Ax [p]) : 1, Ax ? CS_IMAG (Ax [p]) : 0) ;
+                printf ("(%g, %g)\n",
+                    Ax ? CS_REAL (Ax [p]) : 1, Ax ? CS_IMAG (Ax [p]) : 0) ;
 #else
-		printf ("      "CS_ID" : %g\n", Ai [p], Ax ? Ax [p] : 1) ;
+                printf ("%g\n", Ax ? Ax [p] : 1) ;
 #endif
-		if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
-	    }
-	}
+                if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
+            }
+        }
     }
     else
     {
-	printf ("triplet: "CS_ID"-by-"CS_ID", nzmax: "CS_ID" nnz: "CS_ID"\n", m, n, nzmax, nz) ;
-	for (p = 0 ; p < nz ; p++)
-	{
+        printf ("triplet: %g-by-%g, nzmax: %g nnz: %g\n", (double) m,
+            (double) n, (double) nzmax, (double) nz) ;
+        for (p = 0 ; p < nz ; p++)
+        {
+
+            printf ("    %g %g : ", (double) (Ai [p]), (double) (Ap [p])) ;
 #ifdef CS_COMPLEX
-	    printf ("    "CS_ID" "CS_ID" : (%g, %g)\n", Ai [p], Ap [p], 
-		    Ax ? CS_REAL (Ax [p]) : 1, Ax ? CS_IMAG (Ax [p]) : 0) ;
+            printf ("(%g, %g)\n",
+                Ax ? CS_REAL (Ax [p]) : 1, Ax ? CS_IMAG (Ax [p]) : 0) ;
 #else
-	    printf ("    "CS_ID" "CS_ID" : %g\n", Ai [p], Ap [p], Ax ? Ax [p] : 1) ;
+            printf ("%g\n", Ax ? Ax [p] : 1) ;
 #endif
-	    if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
-	}
+            if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
+        }
     }
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_pvec.c b/CXSparse/Source/cs_pvec.c
index 3d8da3e..1254c2a 100644
--- a/CXSparse/Source/cs_pvec.c
+++ b/CXSparse/Source/cs_pvec.c
@@ -3,7 +3,7 @@
 CS_INT cs_pvec (const CS_INT *p, const CS_ENTRY *b, CS_ENTRY *x, CS_INT n)
 {
     CS_INT k ;
-    if (!x || !b) return (0) ;				    /* check inputs */
+    if (!x || !b) return (0) ;                              /* check inputs */
     for (k = 0 ; k < n ; k++) x [k] = b [p ? p [k] : k] ;
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_qr.c b/CXSparse/Source/cs_qr.c
index 609b471..9c8df3f 100644
--- a/CXSparse/Source/cs_qr.c
+++ b/CXSparse/Source/cs_qr.c
@@ -5,70 +5,70 @@ csn *cs_qr (const cs *A, const css *S)
     CS_ENTRY *Rx, *Vx, *Ax, *x ;
     double *Beta ;
     CS_INT i, k, p, m, n, vnz, p1, top, m2, len, col, rnz, *s, *leftmost, *Ap, *Ai,
-	*parent, *Rp, *Ri, *Vp, *Vi, *w, *pinv, *q ;
+        *parent, *Rp, *Ri, *Vp, *Vi, *w, *pinv, *q ;
     cs *R, *V ;
     csn *N ;
     if (!CS_CSC (A) || !S) return (NULL) ;
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     q = S->q ; parent = S->parent ; pinv = S->pinv ; m2 = S->m2 ;
     vnz = S->lnz ; rnz = S->unz ; leftmost = S->leftmost ;
-    w = cs_malloc (m2+n, sizeof (CS_INT)) ;	    /* get CS_INT workspace */
-    x = cs_malloc (m2, sizeof (CS_ENTRY)) ;	    /* get CS_ENTRY workspace */
-    N = cs_calloc (1, sizeof (csn)) ;		    /* allocate result */
+    w = cs_malloc (m2+n, sizeof (CS_INT)) ;            /* get CS_INT workspace */
+    x = cs_malloc (m2, sizeof (CS_ENTRY)) ;           /* get CS_ENTRY workspace */
+    N = cs_calloc (1, sizeof (csn)) ;               /* allocate result */
     if (!w || !x || !N) return (cs_ndone (N, NULL, w, x, 0)) ;
-    s = w + m2 ;				    /* s is size n */
-    for (k = 0 ; k < m2 ; k++) x [k] = 0 ;	    /* clear workspace x */
-    N->L = V = cs_spalloc (m2, n, vnz, 1, 0) ;	    /* allocate result V */
-    N->U = R = cs_spalloc (m2, n, rnz, 1, 0) ;	    /* allocate result R */
+    s = w + m2 ;                                    /* s is size n */
+    for (k = 0 ; k < m2 ; k++) x [k] = 0 ;          /* clear workspace x */
+    N->L = V = cs_spalloc (m2, n, vnz, 1, 0) ;      /* allocate result V */
+    N->U = R = cs_spalloc (m2, n, rnz, 1, 0) ;      /* allocate result R */
     N->B = Beta = cs_malloc (n, sizeof (double)) ;  /* allocate result Beta */
     if (!R || !V || !Beta) return (cs_ndone (N, NULL, w, x, 0)) ;
     Rp = R->p ; Ri = R->i ; Rx = R->x ;
     Vp = V->p ; Vi = V->i ; Vx = V->x ;
     for (i = 0 ; i < m2 ; i++) w [i] = -1 ; /* clear w, to mark nodes */
     rnz = 0 ; vnz = 0 ;
-    for (k = 0 ; k < n ; k++)		    /* compute V and R */
+    for (k = 0 ; k < n ; k++)               /* compute V and R */
     {
-	Rp [k] = rnz ;			    /* R(:,k) starts here */
-	Vp [k] = p1 = vnz ;		    /* V(:,k) starts here */
-	w [k] = k ;			    /* add V(k,k) to pattern of V */
-	Vi [vnz++] = k ;
-	top = n ;
-	col = q ? q [k] : k ;
-	for (p = Ap [col] ; p < Ap [col+1] ; p++)   /* find R(:,k) pattern */
-	{
-	    i = leftmost [Ai [p]] ;	    /* i = min(find(A(i,q))) */
-	    for (len = 0 ; w [i] != k ; i = parent [i])	/* traverse up to k */
-	    {
-		s [len++] = i ;
-		w [i] = k ;
-	    }
-	    while (len > 0) s [--top] = s [--len] ; /* push path on stack */
-	    i = pinv [Ai [p]] ;		    /* i = permuted row of A(:,col) */
-	    x [i] = Ax [p] ;		    /* x (i) = A(:,col) */
-	    if (i > k && w [i] < k)	    /* pattern of V(:,k) = x (k+1:m) */
-	    {
-		Vi [vnz++] = i ;	    /* add i to pattern of V(:,k) */
-		w [i] = k ;
-	    }
-	}
-	for (p = top ; p < n ; p++) /* for each i in pattern of R(:,k) */
-	{
-	    i = s [p] ;			    /* R(i,k) is nonzero */
-	    cs_happly (V, i, Beta [i], x) ; /* apply (V(i),Beta(i)) to x */
-	    Ri [rnz] = i ;		    /* R(i,k) = x(i) */
-	    Rx [rnz++] = x [i] ;
-	    x [i] = 0 ;
-	    if (parent [i] == k) vnz = cs_scatter (V, i, 0, w, NULL, k, V, vnz);
-	}
-	for (p = p1 ; p < vnz ; p++)	    /* gather V(:,k) = x */
-	{
-	    Vx [p] = x [Vi [p]] ;
-	    x [Vi [p]] = 0 ;
-	}
-	Ri [rnz] = k ;			   /* R(k,k) = norm (x) */
-	Rx [rnz++] = cs_house (Vx+p1, Beta+k, vnz-p1) ;	/* [v,beta]=house(x) */
+        Rp [k] = rnz ;                      /* R(:,k) starts here */
+        Vp [k] = p1 = vnz ;                 /* V(:,k) starts here */
+        w [k] = k ;                         /* add V(k,k) to pattern of V */
+        Vi [vnz++] = k ;
+        top = n ;
+        col = q ? q [k] : k ;
+        for (p = Ap [col] ; p < Ap [col+1] ; p++)   /* find R(:,k) pattern */
+        {
+            i = leftmost [Ai [p]] ;         /* i = min(find(A(i,q))) */
+            for (len = 0 ; w [i] != k ; i = parent [i]) /* traverse up to k */
+            {
+                s [len++] = i ;
+                w [i] = k ;
+            }
+            while (len > 0) s [--top] = s [--len] ; /* push path on stack */
+            i = pinv [Ai [p]] ;             /* i = permuted row of A(:,col) */
+            x [i] = Ax [p] ;                /* x (i) = A(:,col) */
+            if (i > k && w [i] < k)         /* pattern of V(:,k) = x (k+1:m) */
+            {
+                Vi [vnz++] = i ;            /* add i to pattern of V(:,k) */
+                w [i] = k ;
+            }
+        }
+        for (p = top ; p < n ; p++) /* for each i in pattern of R(:,k) */
+        {
+            i = s [p] ;                     /* R(i,k) is nonzero */
+            cs_happly (V, i, Beta [i], x) ; /* apply (V(i),Beta(i)) to x */
+            Ri [rnz] = i ;                  /* R(i,k) = x(i) */
+            Rx [rnz++] = x [i] ;
+            x [i] = 0 ;
+            if (parent [i] == k) vnz = cs_scatter (V, i, 0, w, NULL, k, V, vnz);
+        }
+        for (p = p1 ; p < vnz ; p++)        /* gather V(:,k) = x */
+        {
+            Vx [p] = x [Vi [p]] ;
+            x [Vi [p]] = 0 ;
+        }
+        Ri [rnz] = k ;                     /* R(k,k) = norm (x) */
+        Rx [rnz++] = cs_house (Vx+p1, Beta+k, vnz-p1) ; /* [v,beta]=house(x) */
     }
-    Rp [n] = rnz ;			    /* finalize R */
-    Vp [n] = vnz ;			    /* finalize V */
+    Rp [n] = rnz ;                          /* finalize R */
+    Vp [n] = vnz ;                          /* finalize V */
     return (cs_ndone (N, NULL, w, x, 1)) ;  /* success */
 }
diff --git a/CXSparse/Source/cs_qrsol.c b/CXSparse/Source/cs_qrsol.c
index b759178..d817ef2 100644
--- a/CXSparse/Source/cs_qrsol.c
+++ b/CXSparse/Source/cs_qrsol.c
@@ -7,43 +7,43 @@ CS_INT cs_qrsol (CS_INT order, const cs *A, CS_ENTRY *b)
     csn *N ;
     cs *AT = NULL ;
     CS_INT k, m, n, ok ;
-    if (!CS_CSC (A) || !b) return (0) ;	/* check inputs */
+    if (!CS_CSC (A) || !b) return (0) ; /* check inputs */
     n = A->n ;
     m = A->m ;
     if (m >= n)
     {
-	S = cs_sqr (order, A, 1) ;	    /* ordering and symbolic analysis */
-	N = cs_qr (A, S) ;		    /* numeric QR factorization */
-	x = cs_calloc (S ? S->m2 : 1, sizeof (CS_ENTRY)) ;    /* get workspace */
-	ok = (S && N && x) ;
-	if (ok)
-	{
-	    cs_ipvec (S->pinv, b, x, m) ;   /* x(0:m-1) = b(p(0:m-1) */
-	    for (k = 0 ; k < n ; k++)	    /* apply Householder refl. to x */
-	    {
-		cs_happly (N->L, k, N->B [k], x) ;
-	    }
-	    cs_usolve (N->U, x) ;	    /* x = R\x */
-	    cs_ipvec (S->q, x, b, n) ;	    /* b(q(0:n-1)) = x(0:n-1) */
-	}
+        S = cs_sqr (order, A, 1) ;          /* ordering and symbolic analysis */
+        N = cs_qr (A, S) ;                  /* numeric QR factorization */
+        x = cs_calloc (S ? S->m2 : 1, sizeof (CS_ENTRY)) ;    /* get workspace */
+        ok = (S && N && x) ;
+        if (ok)
+        {
+            cs_ipvec (S->pinv, b, x, m) ;   /* x(0:m-1) = b(p(0:m-1) */
+            for (k = 0 ; k < n ; k++)       /* apply Householder refl. to x */
+            {
+                cs_happly (N->L, k, N->B [k], x) ;
+            }
+            cs_usolve (N->U, x) ;           /* x = R\x */
+            cs_ipvec (S->q, x, b, n) ;      /* b(q(0:n-1)) = x(0:n-1) */
+        }
     }
     else
     {
-	AT = cs_transpose (A, 1) ;	    /* Ax=b is underdetermined */
-	S = cs_sqr (order, AT, 1) ;	    /* ordering and symbolic analysis */
-	N = cs_qr (AT, S) ;		    /* numeric QR factorization of A' */
-	x = cs_calloc (S ? S->m2 : 1, sizeof (CS_ENTRY)) ;    /* get workspace */
-	ok = (AT && S && N && x) ;
-	if (ok)
-	{
-	    cs_pvec (S->q, b, x, m) ;	    /* x(q(0:m-1)) = b(0:m-1) */
-	    cs_utsolve (N->U, x) ;	    /* x = R'\x */
-	    for (k = m-1 ; k >= 0 ; k--)    /* apply Householder refl. to x */
-	    {
-		cs_happly (N->L, k, N->B [k], x) ;
-	    }
-	    cs_pvec (S->pinv, x, b, n) ;    /* b(0:n-1) = x(p(0:n-1)) */
-	}
+        AT = cs_transpose (A, 1) ;          /* Ax=b is underdetermined */
+        S = cs_sqr (order, AT, 1) ;         /* ordering and symbolic analysis */
+        N = cs_qr (AT, S) ;                 /* numeric QR factorization of A' */
+        x = cs_calloc (S ? S->m2 : 1, sizeof (CS_ENTRY)) ;    /* get workspace */
+        ok = (AT && S && N && x) ;
+        if (ok)
+        {
+            cs_pvec (S->q, b, x, m) ;       /* x(q(0:m-1)) = b(0:m-1) */
+            cs_utsolve (N->U, x) ;          /* x = R'\x */
+            for (k = m-1 ; k >= 0 ; k--)    /* apply Householder refl. to x */
+            {
+                cs_happly (N->L, k, N->B [k], x) ;
+            }
+            cs_pvec (S->pinv, x, b, n) ;    /* b(0:n-1) = x(p(0:n-1)) */
+        }
     }
     cs_free (x) ;
     cs_sfree (S) ;
diff --git a/CXSparse/Source/cs_randperm.c b/CXSparse/Source/cs_randperm.c
index fe5110a..a3d8944 100644
--- a/CXSparse/Source/cs_randperm.c
+++ b/CXSparse/Source/cs_randperm.c
@@ -5,18 +5,18 @@
 CS_INT *cs_randperm (CS_INT n, CS_INT seed)
 {
     CS_INT *p, k, j, t ;
-    if (seed == 0) return (NULL) ;	/* return p = NULL (identity) */
-    p = cs_malloc (n, sizeof (CS_INT)) ;	/* allocate result */
-    if (!p) return (NULL) ;		/* out of memory */
+    if (seed == 0) return (NULL) ;      /* return p = NULL (identity) */
+    p = cs_malloc (n, sizeof (CS_INT)) ;   /* allocate result */
+    if (!p) return (NULL) ;             /* out of memory */
     for (k = 0 ; k < n ; k++) p [k] = n-k-1 ;
-    if (seed == -1) return (p) ;	/* return reverse permutation */
-    srand (seed) ;			/* get new random number seed */
+    if (seed == -1) return (p) ;        /* return reverse permutation */
+    srand (seed) ;                      /* get new random number seed */
     for (k = 0 ; k < n ; k++)
     {
-	j = k + (rand ( ) % (n-k)) ;    /* j = rand CS_INT in range k to n-1 */
-	t = p [j] ;			/* swap p[k] and p[j] */
-	p [j] = p [k] ;
-	p [k] = t ;
+        j = k + (rand ( ) % (n-k)) ;    /* j = rand integer in range k to n-1 */
+        t = p [j] ;                     /* swap p[k] and p[j] */
+        p [j] = p [k] ;
+        p [k] = t ;
     }
     return (p) ;
 }
diff --git a/CXSparse/Source/cs_reach.c b/CXSparse/Source/cs_reach.c
index d6c7f21..0efb342 100644
--- a/CXSparse/Source/cs_reach.c
+++ b/CXSparse/Source/cs_reach.c
@@ -9,11 +9,11 @@ CS_INT cs_reach (cs *G, const cs *B, CS_INT k, CS_INT *xi, const CS_INT *pinv)
     top = n ;
     for (p = Bp [k] ; p < Bp [k+1] ; p++)
     {
-	if (!CS_MARKED (Gp, Bi [p]))	/* start a dfs at unmarked node i */
-	{
-	    top = cs_dfs (Bi [p], G, top, xi, xi+n, pinv) ;
-	}
+        if (!CS_MARKED (Gp, Bi [p]))    /* start a dfs at unmarked node i */
+        {
+            top = cs_dfs (Bi [p], G, top, xi, xi+n, pinv) ;
+        }
     }
-    for (p = top ; p < n ; p++) CS_MARK (Gp, xi [p]) ;	/* restore G */
+    for (p = top ; p < n ; p++) CS_MARK (Gp, xi [p]) ;  /* restore G */
     return (top) ;
 }
diff --git a/CXSparse/Source/cs_scatter.c b/CXSparse/Source/cs_scatter.c
index fd499f3..734fdb2 100644
--- a/CXSparse/Source/cs_scatter.c
+++ b/CXSparse/Source/cs_scatter.c
@@ -5,18 +5,18 @@ CS_INT cs_scatter (const cs *A, CS_INT j, CS_ENTRY beta, CS_INT *w, CS_ENTRY *x,
 {
     CS_INT i, p, *Ap, *Ai, *Ci ;
     CS_ENTRY *Ax ;
-    if (!CS_CSC (A) || !w || !CS_CSC (C)) return (-1) ;	    /* check inputs */
+    if (!CS_CSC (A) || !w || !CS_CSC (C)) return (-1) ;     /* check inputs */
     Ap = A->p ; Ai = A->i ; Ax = A->x ; Ci = C->i ;
     for (p = Ap [j] ; p < Ap [j+1] ; p++)
     {
-	i = Ai [p] ;				/* A(i,j) is nonzero */
-	if (w [i] < mark)
-	{
-	    w [i] = mark ;			/* i is new entry in column j */
-	    Ci [nz++] = i ;			/* add i to pattern of C(:,j) */
-	    if (x) x [i] = beta * Ax [p] ;	/* x(i) = beta*A(i,j) */
-	}
-	else if (x) x [i] += beta * Ax [p] ;	/* i exists in C(:,j) already */
+        i = Ai [p] ;                            /* A(i,j) is nonzero */
+        if (w [i] < mark)
+        {
+            w [i] = mark ;                      /* i is new entry in column j */
+            Ci [nz++] = i ;                     /* add i to pattern of C(:,j) */
+            if (x) x [i] = beta * Ax [p] ;      /* x(i) = beta*A(i,j) */
+        }
+        else if (x) x [i] += beta * Ax [p] ;    /* i exists in C(:,j) already */
     }
     return (nz) ;
 }
diff --git a/CXSparse/Source/cs_scc.c b/CXSparse/Source/cs_scc.c
index c090736..cc6d805 100644
--- a/CXSparse/Source/cs_scc.c
+++ b/CXSparse/Source/cs_scc.c
@@ -1,39 +1,39 @@
 #include "cs.h"
 /* find the strongly connected components of a square matrix */
-csd *cs_scc (cs *A)	/* matrix A temporarily modified, then restored */
+csd *cs_scc (cs *A)     /* matrix A temporarily modified, then restored */
 {
     CS_INT n, i, k, b, nb = 0, top, *xi, *pstack, *p, *r, *Ap, *ATp, *rcopy, *Blk ;
     cs *AT ;
     csd *D ;
-    if (!CS_CSC (A)) return (NULL) ;		    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;                /* check inputs */
     n = A->n ; Ap = A->p ;
-    D = cs_dalloc (n, 0) ;			    /* allocate result */
-    AT = cs_transpose (A, 0) ;			    /* AT = A' */
-    xi = cs_malloc (2*n+1, sizeof (CS_INT)) ;	    /* get workspace */
+    D = cs_dalloc (n, 0) ;                          /* allocate result */
+    AT = cs_transpose (A, 0) ;                      /* AT = A' */
+    xi = cs_malloc (2*n+1, sizeof (CS_INT)) ;          /* get workspace */
     if (!D || !AT || !xi) return (cs_ddone (D, AT, xi, 0)) ;
     Blk = xi ; rcopy = pstack = xi + n ;
     p = D->p ; r = D->r ; ATp = AT->p ;
     top = n ;
-    for (i = 0 ; i < n ; i++)	/* first dfs(A) to find finish times (xi) */
+    for (i = 0 ; i < n ; i++)   /* first dfs(A) to find finish times (xi) */
     {
-	if (!CS_MARKED (Ap, i)) top = cs_dfs (i, A, top, xi, pstack, NULL) ;
+        if (!CS_MARKED (Ap, i)) top = cs_dfs (i, A, top, xi, pstack, NULL) ;
     }
-    for (i = 0 ; i < n ; i++) CS_MARK (Ap, i) ;	/* restore A; unmark all nodes*/
+    for (i = 0 ; i < n ; i++) CS_MARK (Ap, i) ; /* restore A; unmark all nodes*/
     top = n ;
     nb = n ;
-    for (k = 0 ; k < n ; k++)	/* dfs(A') to find strongly connnected comp */
+    for (k = 0 ; k < n ; k++)   /* dfs(A') to find strongly connnected comp */
     {
-	i = xi [k] ;		/* get i in reverse order of finish times */
-	if (CS_MARKED (ATp, i)) continue ;  /* skip node i if already ordered */
-	r [nb--] = top ;	/* node i is the start of a component in p */
-	top = cs_dfs (i, AT, top, p, pstack, NULL) ;
+        i = xi [k] ;            /* get i in reverse order of finish times */
+        if (CS_MARKED (ATp, i)) continue ;  /* skip node i if already ordered */
+        r [nb--] = top ;        /* node i is the start of a component in p */
+        top = cs_dfs (i, AT, top, p, pstack, NULL) ;
     }
-    r [nb] = 0 ;		/* first block starts at zero; shift r up */
+    r [nb] = 0 ;                /* first block starts at zero; shift r up */
     for (k = nb ; k <= n ; k++) r [k-nb] = r [k] ;
-    D->nb = nb = n-nb ;		/* nb = # of strongly connected components */
-    for (b = 0 ; b < nb ; b++)	/* sort each block in natural order */
+    D->nb = nb = n-nb ;         /* nb = # of strongly connected components */
+    for (b = 0 ; b < nb ; b++)  /* sort each block in natural order */
     {
-	for (k = r [b] ; k < r [b+1] ; k++) Blk [p [k]] = b ;
+        for (k = r [b] ; k < r [b+1] ; k++) Blk [p [k]] = b ;
     }
     for (b = 0 ; b <= nb ; b++) rcopy [b] = r [b] ;
     for (i = 0 ; i < n ; i++) p [rcopy [Blk [i]]++] = i ;
diff --git a/CXSparse/Source/cs_schol.c b/CXSparse/Source/cs_schol.c
index 4179b8f..7da2a57 100644
--- a/CXSparse/Source/cs_schol.c
+++ b/CXSparse/Source/cs_schol.c
@@ -5,17 +5,17 @@ css *cs_schol (CS_INT order, const cs *A)
     CS_INT n, *c, *post, *P ;
     cs *C ;
     css *S ;
-    if (!CS_CSC (A)) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;        /* check inputs */
     n = A->n ;
-    S = cs_calloc (1, sizeof (css)) ;	    /* allocate result S */
-    if (!S) return (NULL) ;		    /* out of memory */
-    P = cs_amd (order, A) ;		    /* P = amd(A+A'), or natural */
-    S->pinv = cs_pinv (P, n) ;		    /* find inverse permutation */
+    S = cs_calloc (1, sizeof (css)) ;       /* allocate result S */
+    if (!S) return (NULL) ;                 /* out of memory */
+    P = cs_amd (order, A) ;                 /* P = amd(A+A'), or natural */
+    S->pinv = cs_pinv (P, n) ;              /* find inverse permutation */
     cs_free (P) ;
     if (order && !S->pinv) return (cs_sfree (S)) ;
-    C = cs_symperm (A, S->pinv, 0) ;	    /* C = spones(triu(A(P,P))) */
-    S->parent = cs_etree (C, 0) ;	    /* find etree of C */
-    post = cs_post (S->parent, n) ;	    /* postorder the etree */
+    C = cs_symperm (A, S->pinv, 0) ;        /* C = spones(triu(A(P,P))) */
+    S->parent = cs_etree (C, 0) ;           /* find etree of C */
+    post = cs_post (S->parent, n) ;         /* postorder the etree */
     c = cs_counts (C, S->parent, post, 0) ; /* find column counts of chol(C) */
     cs_free (post) ;
     cs_spfree (C) ;
diff --git a/CXSparse/Source/cs_spsolve.c b/CXSparse/Source/cs_spsolve.c
index 91594cb..8c6ecce 100644
--- a/CXSparse/Source/cs_spsolve.c
+++ b/CXSparse/Source/cs_spsolve.c
@@ -8,21 +8,21 @@ CS_INT cs_spsolve (cs *G, const cs *B, CS_INT k, CS_INT *xi, CS_ENTRY *x, const
     if (!CS_CSC (G) || !CS_CSC (B) || !xi || !x) return (-1) ;
     Gp = G->p ; Gi = G->i ; Gx = G->x ; n = G->n ;
     Bp = B->p ; Bi = B->i ; Bx = B->x ;
-    top = cs_reach (G, B, k, xi, pinv) ;	/* xi[top..n-1]=Reach(B(:,k)) */
+    top = cs_reach (G, B, k, xi, pinv) ;        /* xi[top..n-1]=Reach(B(:,k)) */
     for (p = top ; p < n ; p++) x [xi [p]] = 0 ;    /* clear x */
-    for (p = Bp [k] ; p < Bp [k+1] ; p++) x [Bi [p]] = Bx [p] ;	/* scatter B */
+    for (p = Bp [k] ; p < Bp [k+1] ; p++) x [Bi [p]] = Bx [p] ; /* scatter B */
     for (px = top ; px < n ; px++)
     {
-	j = xi [px] ;				    /* x(j) is nonzero */
-	J = pinv ? (pinv [j]) : j ;		    /* j maps to col J of G */
-	if (J < 0) continue ;			    /* column J is empty */
-	x [j] /= Gx [lo ? (Gp [J]) : (Gp [J+1]-1)] ;/* x(j) /= G(j,j) */
-	p = lo ? (Gp [J]+1) : (Gp [J]) ;	    /* lo: L(j,j) 1st entry */
-	q = lo ? (Gp [J+1]) : (Gp [J+1]-1) ;	    /* up: U(j,j) last entry */
-	for ( ; p < q ; p++)
-	{
-	    x [Gi [p]] -= Gx [p] * x [j] ;	    /* x(i) -= G(i,j) * x(j) */
-	}
+        j = xi [px] ;                               /* x(j) is nonzero */
+        J = pinv ? (pinv [j]) : j ;                 /* j maps to col J of G */
+        if (J < 0) continue ;                       /* column J is empty */
+        x [j] /= Gx [lo ? (Gp [J]) : (Gp [J+1]-1)] ;/* x(j) /= G(j,j) */
+        p = lo ? (Gp [J]+1) : (Gp [J]) ;            /* lo: L(j,j) 1st entry */
+        q = lo ? (Gp [J+1]) : (Gp [J+1]-1) ;        /* up: U(j,j) last entry */
+        for ( ; p < q ; p++)
+        {
+            x [Gi [p]] -= Gx [p] * x [j] ;          /* x(i) -= G(i,j) * x(j) */
+        }
     }
-    return (top) ;				    /* return top of stack */
+    return (top) ;                                  /* return top of stack */
 }
diff --git a/CXSparse/Source/cs_sqr.c b/CXSparse/Source/cs_sqr.c
index f0bfb08..1b14ca4 100644
--- a/CXSparse/Source/cs_sqr.c
+++ b/CXSparse/Source/cs_sqr.c
@@ -3,53 +3,53 @@
 static CS_INT cs_vcount (const cs *A, css *S)
 {
     CS_INT i, k, p, pa, n = A->n, m = A->m, *Ap = A->p, *Ai = A->i, *next, *head,
-	*tail, *nque, *pinv, *leftmost, *w, *parent = S->parent ;
-    S->pinv = pinv = cs_malloc (m+n, sizeof (CS_INT)) ;	    /* allocate pinv, */
+        *tail, *nque, *pinv, *leftmost, *w, *parent = S->parent ;
+    S->pinv = pinv = cs_malloc (m+n, sizeof (CS_INT)) ;        /* allocate pinv, */
     S->leftmost = leftmost = cs_malloc (m, sizeof (CS_INT)) ;  /* and leftmost */
     w = cs_malloc (m+3*n, sizeof (CS_INT)) ;   /* get workspace */
     if (!pinv || !w || !leftmost)
     {
-	cs_free (w) ;			    /* pinv and leftmost freed later */
-	return (0) ;			    /* out of memory */
+        cs_free (w) ;                       /* pinv and leftmost freed later */
+        return (0) ;                        /* out of memory */
     }
     next = w ; head = w + m ; tail = w + m + n ; nque = w + m + 2*n ;
-    for (k = 0 ; k < n ; k++) head [k] = -1 ;	/* queue k is empty */
+    for (k = 0 ; k < n ; k++) head [k] = -1 ;   /* queue k is empty */
     for (k = 0 ; k < n ; k++) tail [k] = -1 ;
     for (k = 0 ; k < n ; k++) nque [k] = 0 ;
     for (i = 0 ; i < m ; i++) leftmost [i] = -1 ;
     for (k = n-1 ; k >= 0 ; k--)
     {
-	for (p = Ap [k] ; p < Ap [k+1] ; p++)
-	{
-	    leftmost [Ai [p]] = k ;	    /* leftmost[i] = min(find(A(i,:)))*/
-	}
+        for (p = Ap [k] ; p < Ap [k+1] ; p++)
+        {
+            leftmost [Ai [p]] = k ;         /* leftmost[i] = min(find(A(i,:)))*/
+        }
     }
-    for (i = m-1 ; i >= 0 ; i--)	    /* scan rows in reverse order */
+    for (i = m-1 ; i >= 0 ; i--)            /* scan rows in reverse order */
     {
-	pinv [i] = -1 ;			    /* row i is not yet ordered */
-	k = leftmost [i] ;
-	if (k == -1) continue ;		    /* row i is empty */
-	if (nque [k]++ == 0) tail [k] = i ; /* first row in queue k */
-	next [i] = head [k] ;		    /* put i at head of queue k */
-	head [k] = i ;
+        pinv [i] = -1 ;                     /* row i is not yet ordered */
+        k = leftmost [i] ;
+        if (k == -1) continue ;             /* row i is empty */
+        if (nque [k]++ == 0) tail [k] = i ; /* first row in queue k */
+        next [i] = head [k] ;               /* put i at head of queue k */
+        head [k] = i ;
     }
     S->lnz = 0 ;
     S->m2 = m ;
-    for (k = 0 ; k < n ; k++)		    /* find row permutation and nnz(V)*/
+    for (k = 0 ; k < n ; k++)               /* find row permutation and nnz(V)*/
     {
-	i = head [k] ;			    /* remove row i from queue k */
-	S->lnz++ ;			    /* count V(k,k) as nonzero */
-	if (i < 0) i = S->m2++ ;	    /* add a fictitious row */
-	pinv [i] = k ;			    /* associate row i with V(:,k) */
-	if (--nque [k] <= 0) continue ;	    /* skip if V(k+1:m,k) is empty */
-	S->lnz += nque [k] ;		    /* nque [k] is nnz (V(k+1:m,k)) */
-	if ((pa = parent [k]) != -1)	    /* move all rows to parent of k */
-	{
-	    if (nque [pa] == 0) tail [pa] = tail [k] ;
-	    next [tail [k]] = head [pa] ;
-	    head [pa] = next [i] ;
-	    nque [pa] += nque [k] ;
-	}
+        i = head [k] ;                      /* remove row i from queue k */
+        S->lnz++ ;                          /* count V(k,k) as nonzero */
+        if (i < 0) i = S->m2++ ;            /* add a fictitious row */
+        pinv [i] = k ;                      /* associate row i with V(:,k) */
+        if (--nque [k] <= 0) continue ;     /* skip if V(k+1:m,k) is empty */
+        S->lnz += nque [k] ;                /* nque [k] is nnz (V(k+1:m,k)) */
+        if ((pa = parent [k]) != -1)        /* move all rows to parent of k */
+        {
+            if (nque [pa] == 0) tail [pa] = tail [k] ;
+            next [tail [k]] = head [pa] ;
+            head [pa] = next [i] ;
+            nque [pa] += nque [k] ;
+        }
     }
     for (i = 0 ; i < m ; i++) if (pinv [i] < 0) pinv [i] = k++ ;
     cs_free (w) ;
@@ -61,28 +61,27 @@ css *cs_sqr (CS_INT order, const cs *A, CS_INT qr)
 {
     CS_INT n, k, ok = 1, *post ;
     css *S ;
-    if (!CS_CSC (A)) return (NULL) ;	    /* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;        /* check inputs */
     n = A->n ;
-    S = cs_calloc (1, sizeof (css)) ;	    /* allocate result S */
-    if (!S) return (NULL) ;		    /* out of memory */
-    S->q = cs_amd (order, A) ;		    /* fill-reducing ordering */
+    S = cs_calloc (1, sizeof (css)) ;       /* allocate result S */
+    if (!S) return (NULL) ;                 /* out of memory */
+    S->q = cs_amd (order, A) ;              /* fill-reducing ordering */
     if (order && !S->q) return (cs_sfree (S)) ;
-    if (qr)				    /* QR symbolic analysis */
+    if (qr)                                 /* QR symbolic analysis */
     {
-	cs *C = order ? cs_permute (A, NULL, S->q, 0) : ((cs *) A) ;
-	S->parent = cs_etree (C, 1) ;	    /* etree of C'*C, where C=A(:,q) */
-	post = cs_post (S->parent, n) ;
-	S->cp = cs_counts (C, S->parent, post, 1) ;  /* col counts chol(C'*C) */
-	cs_free (post) ;
-	ok = C && S->parent && S->cp && cs_vcount (C, S) ;
-	if (ok) for (S->unz = 0, k = 0 ; k < n ; k++) S->unz += S->cp [k] ;
-	ok = ok && S->lnz >= 0 && S->unz >= 0 ;	    /* CS_INT overflow guard */
-	if (order) cs_spfree (C) ;
+        cs *C = order ? cs_permute (A, NULL, S->q, 0) : ((cs *) A) ;
+        S->parent = cs_etree (C, 1) ;       /* etree of C'*C, where C=A(:,q) */
+        post = cs_post (S->parent, n) ;
+        S->cp = cs_counts (C, S->parent, post, 1) ;  /* col counts chol(C'*C) */
+        cs_free (post) ;
+        ok = C && S->parent && S->cp && cs_vcount (C, S) ;
+        if (ok) for (S->unz = 0, k = 0 ; k < n ; k++) S->unz += S->cp [k] ;
+        if (order) cs_spfree (C) ;
     }
     else
     {
-	S->unz = 4*(A->p [n]) + n ;	    /* for LU factorization only, */
-	S->lnz = S->unz ;		    /* guess nnz(L) and nnz(U) */
+        S->unz = 4*(A->p [n]) + n ;         /* for LU factorization only, */
+        S->lnz = S->unz ;                   /* guess nnz(L) and nnz(U) */
     }
-    return (ok ? S : cs_sfree (S)) ;	    /* return result S */
+    return (ok ? S : cs_sfree (S)) ;        /* return result S */
 }
diff --git a/CXSparse/Source/cs_symperm.c b/CXSparse/Source/cs_symperm.c
index 79fa121..7bbd6fe 100644
--- a/CXSparse/Source/cs_symperm.c
+++ b/CXSparse/Source/cs_symperm.c
@@ -5,35 +5,35 @@ cs *cs_symperm (const cs *A, const CS_INT *pinv, CS_INT values)
     CS_INT i, j, p, q, i2, j2, n, *Ap, *Ai, *Cp, *Ci, *w ;
     CS_ENTRY *Cx, *Ax ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;			/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;                    /* check inputs */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
     C = cs_spalloc (n, n, Ap [n], values && (Ax != NULL), 0) ; /* alloc result*/
-    w = cs_calloc (n, sizeof (CS_INT)) ;			/* get workspace */
-    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;	/* out of memory */
+    w = cs_calloc (n, sizeof (CS_INT)) ;                   /* get workspace */
+    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;    /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    for (j = 0 ; j < n ; j++)		/* count entries in each column of C */
+    for (j = 0 ; j < n ; j++)           /* count entries in each column of C */
     {
-	j2 = pinv ? pinv [j] : j ;	/* column j of A is column j2 of C */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    if (i > j) continue ;	/* skip lower triangular part of A */
-	    i2 = pinv ? pinv [i] : i ;	/* row i of A is row i2 of C */
-	    w [CS_MAX (i2, j2)]++ ;	/* column count of C */
-	}
+        j2 = pinv ? pinv [j] : j ;      /* column j of A is column j2 of C */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i > j) continue ;       /* skip lower triangular part of A */
+            i2 = pinv ? pinv [i] : i ;  /* row i of A is row i2 of C */
+            w [CS_MAX (i2, j2)]++ ;     /* column count of C */
+        }
     }
-    cs_cumsum (Cp, w, n) ;		/* compute column pointers of C */
+    cs_cumsum (Cp, w, n) ;              /* compute column pointers of C */
     for (j = 0 ; j < n ; j++)
     {
-	j2 = pinv ? pinv [j] : j ;	/* column j of A is column j2 of C */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    if (i > j) continue ;	/* skip lower triangular part of A*/
-	    i2 = pinv ? pinv [i] : i ;	/* row i of A is row i2 of C */
-	    Ci [q = w [CS_MAX (i2, j2)]++] = CS_MIN (i2, j2) ;
-	    if (Cx) Cx [q] = (i2 <= j2) ? Ax [p] : CS_CONJ (Ax [p]) ;
-	}
+        j2 = pinv ? pinv [j] : j ;      /* column j of A is column j2 of C */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i > j) continue ;       /* skip lower triangular part of A*/
+            i2 = pinv ? pinv [i] : i ;  /* row i of A is row i2 of C */
+            Ci [q = w [CS_MAX (i2, j2)]++] = CS_MIN (i2, j2) ;
+            if (Cx) Cx [q] = (i2 <= j2) ? Ax [p] : CS_CONJ (Ax [p]) ;
+        }
     }
-    return (cs_done (C, w, NULL, 1)) ;	/* success; free workspace, return C */
+    return (cs_done (C, w, NULL, 1)) ;  /* success; free workspace, return C */
 }
diff --git a/CXSparse/Source/cs_tdfs.c b/CXSparse/Source/cs_tdfs.c
index 3d48e6e..f32077b 100644
--- a/CXSparse/Source/cs_tdfs.c
+++ b/CXSparse/Source/cs_tdfs.c
@@ -4,21 +4,21 @@ CS_INT cs_tdfs (CS_INT j, CS_INT k, CS_INT *head, const CS_INT *next, CS_INT *po
 {
     CS_INT i, p, top = 0 ;
     if (!head || !next || !post || !stack) return (-1) ;    /* check inputs */
-    stack [0] = j ;		    /* place j on the stack */
-    while (top >= 0)		    /* while (stack is not empty) */
+    stack [0] = j ;                 /* place j on the stack */
+    while (top >= 0)                /* while (stack is not empty) */
     {
-	p = stack [top] ;	    /* p = top of stack */
-	i = head [p] ;		    /* i = youngest child of p */
-	if (i == -1)
-	{
-	    top-- ;		    /* p has no unordered children left */
-	    post [k++] = p ;	    /* node p is the kth postordered node */
-	}
-	else
-	{
-	    head [p] = next [i] ;   /* remove i from children of p */
-	    stack [++top] = i ;	    /* start dfs on child node i */
-	}
+        p = stack [top] ;           /* p = top of stack */
+        i = head [p] ;              /* i = youngest child of p */
+        if (i == -1)
+        {
+            top-- ;                 /* p has no unordered children left */
+            post [k++] = p ;        /* node p is the kth postordered node */
+        }
+        else
+        {
+            head [p] = next [i] ;   /* remove i from children of p */
+            stack [++top] = i ;     /* start dfs on child node i */
+        }
     }
     return (k) ;
 }
diff --git a/CXSparse/Source/cs_transpose.c b/CXSparse/Source/cs_transpose.c
index 0f10c12..15a6c00 100644
--- a/CXSparse/Source/cs_transpose.c
+++ b/CXSparse/Source/cs_transpose.c
@@ -5,21 +5,21 @@ cs *cs_transpose (const cs *A, CS_INT values)
     CS_INT p, q, j, *Cp, *Ci, n, m, *Ap, *Ai, *w ;
     CS_ENTRY *Cx, *Ax ;
     cs *C ;
-    if (!CS_CSC (A)) return (NULL) ;	/* check inputs */
+    if (!CS_CSC (A)) return (NULL) ;    /* check inputs */
     m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    C = cs_spalloc (n, m, Ap [n], values && Ax, 0) ;	   /* allocate result */
-    w = cs_calloc (m, sizeof (CS_INT)) ;			   /* get workspace */
-    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;	   /* out of memory */
+    C = cs_spalloc (n, m, Ap [n], values && Ax, 0) ;       /* allocate result */
+    w = cs_calloc (m, sizeof (CS_INT)) ;                      /* get workspace */
+    if (!C || !w) return (cs_done (C, w, NULL, 0)) ;       /* out of memory */
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    for (p = 0 ; p < Ap [n] ; p++) w [Ai [p]]++ ;	   /* row counts */
-    cs_cumsum (Cp, w, m) ;				   /* row pointers */
+    for (p = 0 ; p < Ap [n] ; p++) w [Ai [p]]++ ;          /* row counts */
+    cs_cumsum (Cp, w, m) ;                                 /* row pointers */
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    Ci [q = w [Ai [p]]++] = j ;	/* place A(i,j) as entry C(j,i) */
-	    if (Cx) Cx [q] = (values > 0) ? CS_CONJ (Ax [p]) : Ax [p] ;
-	}
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            Ci [q = w [Ai [p]]++] = j ; /* place A(i,j) as entry C(j,i) */
+            if (Cx) Cx [q] = (values > 0) ? CS_CONJ (Ax [p]) : Ax [p] ;
+        }
     }
-    return (cs_done (C, w, NULL, 1)) ;	/* success; free w and return C */
+    return (cs_done (C, w, NULL, 1)) ;  /* success; free w and return C */
 }
diff --git a/CXSparse/Source/cs_updown.c b/CXSparse/Source/cs_updown.c
index 1584dff..e49af83 100644
--- a/CXSparse/Source/cs_updown.c
+++ b/CXSparse/Source/cs_updown.c
@@ -11,37 +11,37 @@ CS_INT cs_updown (cs *L, CS_INT sigma, const cs *C, const CS_INT *parent)
     if (!CS_CSC (L) || !CS_CSC (C) || !parent) return (0) ;  /* check inputs */
     Lp = L->p ; Li = L->i ; Lx = L->x ; n = L->n ;
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    if ((p = Cp [0]) >= Cp [1]) return (1) ;	    /* return if C empty */
-    w = cs_malloc (n, sizeof (CS_ENTRY)) ;	    /* get workspace */
-    if (!w) return (0) ;			    /* out of memory */
+    if ((p = Cp [0]) >= Cp [1]) return (1) ;        /* return if C empty */
+    w = cs_malloc (n, sizeof (CS_ENTRY)) ;          /* get workspace */
+    if (!w) return (0) ;                            /* out of memory */
     f = Ci [p] ;
-    for ( ; p < Cp [1] ; p++) f = CS_MIN (f, Ci [p]) ;	/* f = min (find (C)) */
-    for (j = f ; j != -1 ; j = parent [j]) w [j] = 0 ;	/* clear workspace w */
+    for ( ; p < Cp [1] ; p++) f = CS_MIN (f, Ci [p]) ;  /* f = min (find (C)) */
+    for (j = f ; j != -1 ; j = parent [j]) w [j] = 0 ;  /* clear workspace w */
     for (p = Cp [0] ; p < Cp [1] ; p++) w [Ci [p]] = Cx [p] ; /* w = C */
-    for (j = f ; j != -1 ; j = parent [j])	    /* walk path f up to root */
+    for (j = f ; j != -1 ; j = parent [j])          /* walk path f up to root */
     {
-	p = Lp [j] ;
-	alpha = w [j] / Lx [p] ;		    /* alpha = w(j) / L(j,j) */
-	beta2 = beta*beta + sigma*alpha*CS_CONJ(alpha) ;
-	if (beta2 <= 0) break ;			    /* not positive definite */
-	beta2 = sqrt (beta2) ;
-	delta = (sigma > 0) ? (beta / beta2) : (beta2 / beta) ;
-	gamma = sigma * CS_CONJ(alpha) / (beta2 * beta) ;
-	Lx [p] = delta * Lx [p] + ((sigma > 0) ? (gamma * w [j]) : 0) ;
-	beta = beta2 ;
+        p = Lp [j] ;
+        alpha = w [j] / Lx [p] ;                    /* alpha = w(j) / L(j,j) */
+        beta2 = beta*beta + sigma*alpha*CS_CONJ(alpha) ;
+        if (beta2 <= 0) break ;                     /* not positive definite */
+        beta2 = sqrt (beta2) ;
+        delta = (sigma > 0) ? (beta / beta2) : (beta2 / beta) ;
+        gamma = sigma * CS_CONJ(alpha) / (beta2 * beta) ;
+        Lx [p] = delta * Lx [p] + ((sigma > 0) ? (gamma * w [j]) : 0) ;
+        beta = beta2 ;
 #ifdef CS_COMPLEX
-	phase = CS_ABS (Lx [p]) / Lx [p] ;  /* phase = abs(L(j,j))/L(j,j)*/
-	Lx [p] *= phase ;		    /* L(j,j) = L(j,j) * phase */
+        phase = CS_ABS (Lx [p]) / Lx [p] ;  /* phase = abs(L(j,j))/L(j,j)*/
+        Lx [p] *= phase ;                   /* L(j,j) = L(j,j) * phase */
 #endif
-	for (p++ ; p < Lp [j+1] ; p++)
-	{
-	    w1 = w [Li [p]] ;
-	    w [Li [p]] = w2 = w1 - alpha * Lx [p] ;
-	    Lx [p] = delta * Lx [p] + gamma * ((sigma > 0) ? w1 : w2) ;
+        for (p++ ; p < Lp [j+1] ; p++)
+        {
+            w1 = w [Li [p]] ;
+            w [Li [p]] = w2 = w1 - alpha * Lx [p] ;
+            Lx [p] = delta * Lx [p] + gamma * ((sigma > 0) ? w1 : w2) ;
 #ifdef CS_COMPLEX
-	    Lx [p] *= phase ;		    /* L(i,j) = L(i,j) * phase */
+            Lx [p] *= phase ;               /* L(i,j) = L(i,j) * phase */
 #endif
-	}
+        }
     }
     cs_free (w) ;
     return (beta2 > 0) ;
diff --git a/CXSparse/Source/cs_usolve.c b/CXSparse/Source/cs_usolve.c
index 58bc3a8..6e89c83 100644
--- a/CXSparse/Source/cs_usolve.c
+++ b/CXSparse/Source/cs_usolve.c
@@ -4,15 +4,15 @@ CS_INT cs_usolve (const cs *U, CS_ENTRY *x)
 {
     CS_INT p, j, n, *Up, *Ui ;
     CS_ENTRY *Ux ;
-    if (!CS_CSC (U) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (U) || !x) return (0) ;                     /* check inputs */
     n = U->n ; Up = U->p ; Ui = U->i ; Ux = U->x ;
     for (j = n-1 ; j >= 0 ; j--)
     {
-	x [j] /= Ux [Up [j+1]-1] ;
-	for (p = Up [j] ; p < Up [j+1]-1 ; p++)
-	{
-	    x [Ui [p]] -= Ux [p] * x [j] ;
-	}
+        x [j] /= Ux [Up [j+1]-1] ;
+        for (p = Up [j] ; p < Up [j+1]-1 ; p++)
+        {
+            x [Ui [p]] -= Ux [p] * x [j] ;
+        }
     }
     return (1) ;
 }
diff --git a/CXSparse/Source/cs_util.c b/CXSparse/Source/cs_util.c
index 800b7dc..5a62942 100644
--- a/CXSparse/Source/cs_util.c
+++ b/CXSparse/Source/cs_util.c
@@ -3,11 +3,11 @@
 cs *cs_spalloc (CS_INT m, CS_INT n, CS_INT nzmax, CS_INT values, CS_INT triplet)
 {
     cs *A = cs_calloc (1, sizeof (cs)) ;    /* allocate the cs struct */
-    if (!A) return (NULL) ;		    /* out of memory */
-    A->m = m ;				    /* define dimensions and nzmax */
+    if (!A) return (NULL) ;                 /* out of memory */
+    A->m = m ;                              /* define dimensions and nzmax */
     A->n = n ;
     A->nzmax = nzmax = CS_MAX (nzmax, 1) ;
-    A->nz = triplet ? 0 : -1 ;		    /* allocate triplet or comp.col */
+    A->nz = triplet ? 0 : -1 ;              /* allocate triplet or comp.col */
     A->p = cs_malloc (triplet ? nzmax : n+1, sizeof (CS_INT)) ;
     A->i = cs_malloc (nzmax, sizeof (CS_INT)) ;
     A->x = values ? cs_malloc (nzmax, sizeof (CS_ENTRY)) : NULL ;
@@ -31,34 +31,34 @@ CS_INT cs_sprealloc (cs *A, CS_INT nzmax)
 /* free a sparse matrix */
 cs *cs_spfree (cs *A)
 {
-    if (!A) return (NULL) ;	/* do nothing if A already NULL */
+    if (!A) return (NULL) ;     /* do nothing if A already NULL */
     cs_free (A->p) ;
     cs_free (A->i) ;
     cs_free (A->x) ;
-    return (cs_free (A)) ;	/* free the cs struct and return NULL */
+    return ((cs *) cs_free (A)) ;   /* free the cs struct and return NULL */
 }
 
 /* free a numeric factorization */
 csn *cs_nfree (csn *N)
 {
-    if (!N) return (NULL) ;	/* do nothing if N already NULL */
+    if (!N) return (NULL) ;     /* do nothing if N already NULL */
     cs_spfree (N->L) ;
     cs_spfree (N->U) ;
     cs_free (N->pinv) ;
     cs_free (N->B) ;
-    return (cs_free (N)) ;	/* free the csn struct and return NULL */
+    return ((csn *) cs_free (N)) ;  /* free the csn struct and return NULL */
 }
 
 /* free a symbolic factorization */
 css *cs_sfree (css *S)
 {
-    if (!S) return (NULL) ;	/* do nothing if S already NULL */
+    if (!S) return (NULL) ;     /* do nothing if S already NULL */
     cs_free (S->pinv) ;
     cs_free (S->q) ;
     cs_free (S->parent) ;
     cs_free (S->cp) ;
     cs_free (S->leftmost) ;
-    return (cs_free (S)) ;	/* free the css struct and return NULL */
+    return ((css *) cs_free (S)) ;  /* free the css struct and return NULL */
 }
 
 /* allocate a cs_dmperm or cs_scc result */
@@ -77,43 +77,43 @@ csd *cs_dalloc (CS_INT m, CS_INT n)
 /* free a cs_dmperm or cs_scc result */
 csd *cs_dfree (csd *D)
 {
-    if (!D) return (NULL) ;	/* do nothing if D already NULL */
+    if (!D) return (NULL) ;     /* do nothing if D already NULL */
     cs_free (D->p) ;
     cs_free (D->q) ;
     cs_free (D->r) ;
     cs_free (D->s) ;
-    return (cs_free (D)) ;
+    return ((csd *) cs_free (D)) ;  /* free the csd struct and return NULL */
 }
 
 /* free workspace and return a sparse matrix result */
 cs *cs_done (cs *C, void *w, void *x, CS_INT ok)
 {
-    cs_free (w) ;			/* free workspace */
+    cs_free (w) ;                       /* free workspace */
     cs_free (x) ;
-    return (ok ? C : cs_spfree (C)) ;	/* return result if OK, else free it */
+    return (ok ? C : cs_spfree (C)) ;   /* return result if OK, else free it */
 }
 
 /* free workspace and return CS_INT array result */
 CS_INT *cs_idone (CS_INT *p, cs *C, void *w, CS_INT ok)
 {
-    cs_spfree (C) ;			/* free temporary matrix */
-    cs_free (w) ;			/* free workspace */
-    return (ok ? p : cs_free (p)) ;	/* return result if OK, else free it */
+    cs_spfree (C) ;                     /* free temporary matrix */
+    cs_free (w) ;                       /* free workspace */
+    return (ok ? p : (CS_INT *) cs_free (p)) ; /* return result, or free it */
 }
 
 /* free workspace and return a numeric factorization (Cholesky, LU, or QR) */
 csn *cs_ndone (csn *N, cs *C, void *w, void *x, CS_INT ok)
 {
-    cs_spfree (C) ;			/* free temporary matrix */
-    cs_free (w) ;			/* free workspace */
+    cs_spfree (C) ;                     /* free temporary matrix */
+    cs_free (w) ;                       /* free workspace */
     cs_free (x) ;
-    return (ok ? N : cs_nfree (N)) ;	/* return result if OK, else free it */
+    return (ok ? N : cs_nfree (N)) ;    /* return result if OK, else free it */
 }
 
 /* free workspace and return a csd result */
 csd *cs_ddone (csd *D, cs *C, void *w, CS_INT ok)
 {
-    cs_spfree (C) ;			/* free temporary matrix */
-    cs_free (w) ;			/* free workspace */
-    return (ok ? D : cs_dfree (D)) ;	/* return result if OK, else free it */
+    cs_spfree (C) ;                     /* free temporary matrix */
+    cs_free (w) ;                       /* free workspace */
+    return (ok ? D : cs_dfree (D)) ;    /* return result if OK, else free it */
 }
diff --git a/CXSparse/Source/cs_utsolve.c b/CXSparse/Source/cs_utsolve.c
index bcfc3f1..d879fae 100644
--- a/CXSparse/Source/cs_utsolve.c
+++ b/CXSparse/Source/cs_utsolve.c
@@ -4,15 +4,15 @@ CS_INT cs_utsolve (const cs *U, CS_ENTRY *x)
 {
     CS_INT p, j, n, *Up, *Ui ;
     CS_ENTRY *Ux ;
-    if (!CS_CSC (U) || !x) return (0) ;			    /* check inputs */
+    if (!CS_CSC (U) || !x) return (0) ;                     /* check inputs */
     n = U->n ; Up = U->p ; Ui = U->i ; Ux = U->x ;
     for (j = 0 ; j < n ; j++)
     {
-	for (p = Up [j] ; p < Up [j+1]-1 ; p++)
-	{
-	    x [j] -= CS_CONJ (Ux [p]) * x [Ui [p]] ;
-	}
-	x [j] /= CS_CONJ (Ux [Up [j+1]-1]) ;
+        for (p = Up [j] ; p < Up [j+1]-1 ; p++)
+        {
+            x [j] -= CS_CONJ (Ux [p]) * x [Ui [p]] ;
+        }
+        x [j] /= CS_CONJ (Ux [Up [j+1]-1]) ;
     }
     return (1) ;
 }
diff --git a/CXSparse/Tcov/Makefile b/CXSparse/Tcov/Makefile
index 04609af..d64ade8 100644
--- a/CXSparse/Tcov/Makefile
+++ b/CXSparse/Tcov/Makefile
@@ -8,7 +8,10 @@ CC = gcc
 CFLAGS = -O -g -fprofile-arcs -ftest-coverage \
     	-Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
     	-Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
-	-Wno-unused-parameter -Werror -I../Include -I../Demo -I../../UFconfig
+	-Wno-unused-parameter -I../Include \
+        -I../Demo -I../../SuiteSparse_config
+
+C = $(CC) $(CFLAGS)
 
 run: all run_convert run_di run_dl run_ci run_cl
 	./covall
@@ -112,75 +115,75 @@ cs_%_cl.c:
 
 
 %_di.o: %_di.c
-	$(CC) $(CFLAGS) -c $<
+	$(C) -c $<
 
 %_dl.o: %_dl.c
-	$(CC) $(CFLAGS) -DCS_LONG -c $<
+	$(C) -DCS_LONG -c $<
 
 %_ci.o: %_ci.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -c $<
+	$(C) -DCS_COMPLEX -c $<
 
 %_cl.o: %_cl.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -c $<
+	$(C) -DCS_LONG -DCS_COMPLEX -c $<
 
 
 cs_idemo: $(OBJ) cs_idemo.c
-	$(CC) $(CFLAGS) -o cs_idemo cs_idemo.c $(OBJ) -lm
+	$(C) -o cs_idemo cs_idemo.c $(OBJ) -lm
 
 cs_ldemo: $(OBJ) cs_ldemo.c
-	$(CC) $(CFLAGS) -o cs_ldemo cs_ldemo.c $(OBJ) -lm
+	$(C) -o cs_ldemo cs_ldemo.c $(OBJ) -lm
 
 
 cs_demo1_di: $(CS_DI) cs_di_demo1.c
-	$(CC) $(CFLAGS) -o cs_demo1_di cs_di_demo1.c $(CS_DI) -lm
+	$(C) -o cs_demo1_di cs_di_demo1.c $(CS_DI) -lm
 
 cs_demo2_di: $(CS_DI) cs_di_demo2.c cs_di_demo.c
-	$(CC) $(CFLAGS) -o cs_demo2_di cs_di_demo2.c cs_di_demo.c $(CS_DI) -lm
+	$(C) -o cs_demo2_di cs_di_demo2.c cs_di_demo.c $(CS_DI) -lm
 
 cs_demo3_di: $(CS_DI) cs_di_demo3.c cs_di_demo.c
-	$(CC) $(CFLAGS) -o cs_demo3_di cs_di_demo3.c cs_di_demo.c $(CS_DI) -lm
+	$(C) -o cs_demo3_di cs_di_demo3.c cs_di_demo.c $(CS_DI) -lm
 
 cstcov_test_di: $(CS_DI) cstcov_test.c cs_di_demo.c
-	$(CC) $(CFLAGS) -o cstcov_test_di cstcov_test.c cs_di_demo.c $(CS_DI) -lm
+	$(C) -o cstcov_test_di cstcov_test.c cs_di_demo.c $(CS_DI) -lm
 
 
 cs_demo1_dl: $(CS_DL) cs_dl_demo1.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cs_demo1_dl cs_dl_demo1.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cs_demo1_dl cs_dl_demo1.c $(CS_DL) -lm
 
 cs_demo2_dl: $(CS_DL) cs_dl_demo2.c cs_dl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cs_demo2_dl cs_dl_demo2.c cs_dl_demo.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cs_demo2_dl cs_dl_demo2.c cs_dl_demo.c $(CS_DL) -lm
 
 cs_demo3_dl: $(CS_DL) cs_dl_demo3.c cs_dl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cs_demo3_dl cs_dl_demo3.c cs_dl_demo.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cs_demo3_dl cs_dl_demo3.c cs_dl_demo.c $(CS_DL) -lm
 
 cstcov_test_dl: $(CS_DL) cstcov_test.c cs_dl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cstcov_test_dl cstcov_test.c cs_dl_demo.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cstcov_test_dl cstcov_test.c cs_dl_demo.c $(CS_DL) -lm
 
 
 cs_demo1_ci: $(CS_CI) cs_ci_demo1.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cs_demo1_ci cs_ci_demo1.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cs_demo1_ci cs_ci_demo1.c $(CS_CI) -lm
 
 cs_demo2_ci: $(CS_CI) cs_ci_demo2.c cs_ci_demo.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cs_demo2_ci cs_ci_demo2.c cs_ci_demo.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cs_demo2_ci cs_ci_demo2.c cs_ci_demo.c $(CS_CI) -lm
 
 cs_demo3_ci: $(CS_CI) cs_ci_demo3.c cs_ci_demo.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cs_demo3_ci cs_ci_demo3.c cs_ci_demo.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cs_demo3_ci cs_ci_demo3.c cs_ci_demo.c $(CS_CI) -lm
 
 cstcov_test_ci: $(CS_CI) cstcov_test.c cs_ci_demo.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cstcov_test_ci cstcov_test.c cs_ci_demo.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cstcov_test_ci cstcov_test.c cs_ci_demo.c $(CS_CI) -lm
 
 
 cs_demo1_cl: $(CS_CL) cs_cl_demo1.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cs_demo1_cl cs_cl_demo1.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cs_demo1_cl cs_cl_demo1.c $(CS_CL) -lm
 
 cs_demo2_cl: $(CS_CL) cs_cl_demo2.c cs_cl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cs_demo2_cl cs_cl_demo2.c cs_cl_demo.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cs_demo2_cl cs_cl_demo2.c cs_cl_demo.c $(CS_CL) -lm
 
 cs_demo3_cl: $(CS_CL) cs_cl_demo3.c cs_cl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cs_demo3_cl cs_cl_demo3.c cs_cl_demo.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cs_demo3_cl cs_cl_demo3.c cs_cl_demo.c $(CS_CL) -lm
 
 cstcov_test_cl: $(CS_CL) cstcov_test.c cs_cl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cstcov_test_cl cstcov_test.c cs_cl_demo.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cstcov_test_cl cstcov_test.c cs_cl_demo.c $(CS_CL) -lm
 
 
 run_convert: cs_idemo cs_ldemo
@@ -303,16 +306,17 @@ readhb.f:
 	- ln -s ../Demo/readhb.f
 
 clean:
-	rm -f *.o *.bbg *.da *.gcov *.gcda *.gcno
+	- $(RM) *.o *.bbg *.da *.gcov *.gcda *.gcno
 
 purge: distclean
 
 distclean: clean
-	rm -f readhb *.out *.a cov.sort
-	rm -f cs_demo1_di cs_demo2_di cs_demo3_di cstcov_test_di
-	rm -f cs_demo1_dl cs_demo2_dl cs_demo3_dl cstcov_test_dl
-	rm -f cs_demo1_ci cs_demo2_ci cs_demo3_ci cstcov_test_ci
-	rm -f cs_demo1_cl cs_demo2_cl cs_demo3_cl cstcov_test_cl
-	rm -f cs_idemo cs_ldemo
-	rm -f cs_*.c
-	rm -f cs*_di.c cs*_dl.c cs*_ci.c cs*_cl.c
+	- $(RM) readhb *.out *.a cov.sort
+	- $(RM) cs_demo1_di cs_demo2_di cs_demo3_di cstcov_test_di
+	- $(RM) cs_demo1_dl cs_demo2_dl cs_demo3_dl cstcov_test_dl
+	- $(RM) cs_demo1_ci cs_demo2_ci cs_demo3_ci cstcov_test_ci
+	- $(RM) cs_demo1_cl cs_demo2_cl cs_demo3_cl cstcov_test_cl
+	- $(RM) cs_idemo cs_ldemo
+	- $(RM) cs_*.c
+	- $(RM) cs*_di.c cs*_dl.c cs*_ci.c cs*_cl.c
+	- $(RM) -r *.dSYM
diff --git a/CXSparse/Tcov/README.txt b/CXSparse/Tcov/README.txt
index caae525..340592a 100644
--- a/CXSparse/Tcov/README.txt
+++ b/CXSparse/Tcov/README.txt
@@ -11,3 +11,5 @@ Note that you will get warnings about unused parameters for some functions.
 These warnings can be safely ignored.  They are parameters for functions that
 are passed to cs_fkeep, and all functions used in this manner must have the
 same calling sequence, even if some of the parameters are not used.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse/Tcov/cov.awk b/CXSparse/Tcov/cov.awk
index 5744b40..23db564 100644
--- a/CXSparse/Tcov/cov.awk
+++ b/CXSparse/Tcov/cov.awk
@@ -11,7 +11,7 @@
 
     if ((p+0) != 100)
     {
-	printf "%8s %s\n", p, f
+        printf "%8s %s\n", p, f
     }
 }
 
diff --git a/CXSparse/Tcov/covall b/CXSparse/Tcov/covall
index 1751690..855c538 100755
--- a/CXSparse/Tcov/covall
+++ b/CXSparse/Tcov/covall
@@ -1,7 +1,7 @@
 #!/bin/csh
-	./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
-	sort -n cov.out > cov.sort
-	./covs > covs.out
-	echo -n "statments not yet tested: "
-	grep "#####" *gcov | wc -l
-	./cover *v > cover.out
+        ./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
+        sort -n cov.out > cov.sort
+        ./covs > covs.out
+        echo -n "statments not yet tested: "
+        grep "#####" *gcov | wc -l
+        ./cover *v > cover.out
diff --git a/CXSparse/Tcov/covall.linux b/CXSparse/Tcov/covall.linux
index 1751690..855c538 100755
--- a/CXSparse/Tcov/covall.linux
+++ b/CXSparse/Tcov/covall.linux
@@ -1,7 +1,7 @@
 #!/bin/csh
-	./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
-	sort -n cov.out > cov.sort
-	./covs > covs.out
-	echo -n "statments not yet tested: "
-	grep "#####" *gcov | wc -l
-	./cover *v > cover.out
+        ./gcovs cs*.c |& awk -f cov.awk | sort -n > cov.out
+        sort -n cov.out > cov.sort
+        ./covs > covs.out
+        echo -n "statments not yet tested: "
+        grep "#####" *gcov | wc -l
+        ./cover *v > cover.out
diff --git a/CXSparse/Tcov/covall.sol b/CXSparse/Tcov/covall.sol
index 457ad63..0061ae4 100755
--- a/CXSparse/Tcov/covall.sol
+++ b/CXSparse/Tcov/covall.sol
@@ -1,5 +1,5 @@
 #!/bin/csh
-	tcov -x cm.profile cs*.c >& /dev/null
-	echo -n "statments not yet tested: "
-	./covs > covs.out
-	grep "#####" *tcov | wc -l
+        tcov -x cm.profile cs*.c >& /dev/null
+        echo -n "statments not yet tested: "
+        ./covs > covs.out
+        grep "#####" *tcov | wc -l
diff --git a/CXSparse/Tcov/cover b/CXSparse/Tcov/cover
index b3e685c..a9281dd 100755
--- a/CXSparse/Tcov/cover
+++ b/CXSparse/Tcov/cover
@@ -2,8 +2,8 @@
 # usage: cover files
 echo '================================================================='
 foreach file ($argv[1-])
-	echo $file
-	echo '================================================================='
-	grep "#####" -A5 -B5 $file
-	echo '================================================================='
-	end
+        echo $file
+        echo '================================================================='
+        grep "#####" -A5 -B5 $file
+        echo '================================================================='
+        end
diff --git a/CXSparse/Tcov/covs b/CXSparse/Tcov/covs
index 4171380..c184189 100755
--- a/CXSparse/Tcov/covs
+++ b/CXSparse/Tcov/covs
@@ -1,7 +1,7 @@
 #!/bin/csh
 echo '================================================================='
 foreach file (*.?cov)
-	echo $file
-	grep "#####" $file
-	echo '================================================================='
-	end
+        echo $file
+        grep "#####" $file
+        echo '================================================================='
+        end
diff --git a/CXSparse/Tcov/cstcov_malloc_test.c b/CXSparse/Tcov/cstcov_malloc_test.c
index e72878d..b0dba59 100644
--- a/CXSparse/Tcov/cstcov_malloc_test.c
+++ b/CXSparse/Tcov/cstcov_malloc_test.c
@@ -18,8 +18,8 @@ void *cs_calloc (CS_INT n, size_t size)
 /* wrapper for free */
 void *cs_free (void *p)
 {
-    if (p) free (p) ;	    /* free p if it is not already NULL */
-    return (NULL) ;	    /* return NULL to simplify the use of cs_free */
+    if (p) free (p) ;       /* free p if it is not already NULL */
+    return (NULL) ;         /* return NULL to simplify the use of cs_free */
 }
 
 /* wrapper for realloc */
@@ -30,5 +30,5 @@ void *cs_realloc (void *p, CS_INT n, size_t size, CS_INT *ok)
     if (--malloc_count < 0) return (p) ;    /* pretend to fail */
     pnew = realloc (p, CS_MAX (n,1) * size) ; /* realloc the block */
     *ok = (pnew != NULL) ;
-    return ((*ok) ? pnew : p) ;		    /* return original p if failure */
+    return ((*ok) ? pnew : p) ;             /* return original p if failure */
 }
diff --git a/CXSparse/Tcov/cstcov_test.c b/CXSparse/Tcov/cstcov_test.c
index 1626904..387613d 100644
--- a/CXSparse/Tcov/cstcov_test.c
+++ b/CXSparse/Tcov/cstcov_test.c
@@ -12,19 +12,19 @@ int main (int argc, char **argv)
     printf ("cs_test, file: %s\n", argv [1]) ;
     for (demo = 2 ; demo <= 3 ; demo++)
     {
-	printf ("demo: %d\n", demo) ;
-	for (trials = 0 ; trials < 4000 ; trials++)
-	{
-	    malloc_count = trials ;
-	    f = fopen (argv [1], "r") ;
-	    if (!f) return (-1) ;
-	    Prob = get_problem (f, (demo == 2) ? 1e-14 : 0) ;
-	    fclose (f) ;
-	    if (Prob) ok = (demo == 2) ? demo2 (Prob) : demo3 (Prob) ;
-	    free_problem (Prob) ;
-	    if (malloc_count > 0) break ;
-	}
-	printf ("demo %d # trials: %d\n", demo, trials) ;
+        printf ("demo: %g\n", (double) demo) ;
+        for (trials = 0 ; trials < 4000 ; trials++)
+        {
+            malloc_count = trials ;
+            f = fopen (argv [1], "r") ;
+            if (!f) return (-1) ;
+            Prob = get_problem (f, (demo == 2) ? 1e-14 : 0) ;
+            fclose (f) ;
+            if (Prob) ok = (demo == 2) ? demo2 (Prob) : demo3 (Prob) ;
+            free_problem (Prob) ;
+            if (malloc_count > 0) break ;
+        }
+        printf ("demo %g # trials: %g\n", (double) demo, (double) trials) ;
     }
     return (0) ;
 }
diff --git a/CXSparse/Tcov/gcovs b/CXSparse/Tcov/gcovs
index 9fddaf1..ea32176 100755
--- a/CXSparse/Tcov/gcovs
+++ b/CXSparse/Tcov/gcovs
@@ -1,6 +1,6 @@
 # usage: gcovs files
 echo '================================================================='
 foreach file ($argv[1-])
-	gcov -f $file
-	echo '================================================================='
-	end
+        gcov -f $file
+        echo '================================================================='
+        end
diff --git a/CXSparse_newfiles.tar.gz b/CXSparse_newfiles.tar.gz
deleted file mode 100644
index 9704691..0000000
Binary files a/CXSparse_newfiles.tar.gz and /dev/null differ
diff --git a/CXSparse_newfiles/Demo/Makefile b/CXSparse_newfiles/Demo/Makefile
index c1352f0..e7c6d65 100644
--- a/CXSparse_newfiles/Demo/Makefile
+++ b/CXSparse_newfiles/Demo/Makefile
@@ -1,7 +1,11 @@
-CC = cc
-CFLAGS = -O
+# CC = cc
+# CF = -O
 
-I = -I../Include -I../../UFconfig
+default: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+I = -I../Include -I../../SuiteSparse_config
 
 CS = ../Lib/libcxsparse.a
 
@@ -91,78 +95,78 @@ $(CS):
 	( cd ../Lib ; $(MAKE) )
 
 cs_demo1: $(CS) cs_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_demo1 cs_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo1 cs_demo1.c $(CS) -lm
 
 cs_demo2: $(CS) cs_demo2.c cs_demo.c cs_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_demo2 cs_demo2.c cs_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo2 cs_demo2.c cs_demo.c $(CS) -lm
 
 cs_demo3: $(CS) cs_demo3.c cs_demo.c cs_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_demo3 cs_demo3.c cs_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_demo3 cs_demo3.c cs_demo.c $(CS) -lm
 
 
 
 
 cs_di_demo1: $(CS) cs_di_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_di_demo1 cs_di_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_di_demo1 cs_di_demo1.c $(CS) -lm
 
 cs_di_demo2: $(CS) cs_di_demo2.c cs_di_demo.c cs_di_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_di_demo2 cs_di_demo2.c cs_di_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_di_demo2 cs_di_demo2.c cs_di_demo.c $(CS) -lm
 
 cs_di_demo3: $(CS) cs_di_demo3.c cs_di_demo.c cs_di_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_di_demo3 cs_di_demo3.c cs_di_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_di_demo3 cs_di_demo3.c cs_di_demo.c $(CS) -lm
 
 
 
 
 cs_ci_demo1: $(CS) cs_ci_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_ci_demo1 cs_ci_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_ci_demo1 cs_ci_demo1.c $(CS) -lm
 
 cs_ci_demo2: $(CS) cs_ci_demo2.c cs_ci_demo.c cs_ci_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_ci_demo2 cs_ci_demo2.c cs_ci_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_ci_demo2 cs_ci_demo2.c cs_ci_demo.c $(CS) -lm
 
 cs_ci_demo3: $(CS) cs_ci_demo3.c cs_ci_demo.c cs_ci_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_ci_demo3 cs_ci_demo3.c cs_ci_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_ci_demo3 cs_ci_demo3.c cs_ci_demo.c $(CS) -lm
 
 
 
 cs_dl_demo1: $(CS) cs_dl_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_dl_demo1 cs_dl_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_dl_demo1 cs_dl_demo1.c $(CS) -lm
 
 cs_dl_demo2: $(CS) cs_dl_demo2.c cs_dl_demo.c cs_dl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_dl_demo2 cs_dl_demo2.c cs_dl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_dl_demo2 cs_dl_demo2.c cs_dl_demo.c $(CS) -lm
 
 cs_dl_demo3: $(CS) cs_dl_demo3.c cs_dl_demo.c cs_dl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_dl_demo3 cs_dl_demo3.c cs_dl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_dl_demo3 cs_dl_demo3.c cs_dl_demo.c $(CS) -lm
 
 
 cs_cl_demo1: $(CS) cs_cl_demo1.c Makefile $(CS)
-	$(CC) $(I) -o cs_cl_demo1 cs_cl_demo1.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_cl_demo1 cs_cl_demo1.c $(CS) -lm
 
 cs_cl_demo2: $(CS) cs_cl_demo2.c cs_cl_demo.c cs_cl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_cl_demo2 cs_cl_demo2.c cs_cl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_cl_demo2 cs_cl_demo2.c cs_cl_demo.c $(CS) -lm
 
 cs_cl_demo3: $(CS) cs_cl_demo3.c cs_cl_demo.c cs_cl_demo.h Makefile $(CS)
-	$(CC) $(I) -o cs_cl_demo3 cs_cl_demo3.c cs_cl_demo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_cl_demo3 cs_cl_demo3.c cs_cl_demo.c $(CS) -lm
 
 
 
 
 cs_idemo: $(CS) cs_idemo.c Makefile $(CS)
-	$(CC) $(I) -o cs_idemo cs_idemo.c $(CS) -lm
+	$(CC) $(CF) $(I) -o cs_idemo cs_idemo.c $(CS) -lm
 
 cs_ldemo: $(CS) cs_ldemo.c Makefile $(CS)
-	$(CC) $(I) -DCS_LONG -o cs_ldemo cs_ldemo.c $(CS) -lm
+	$(CC) $(CF) $(I) -DCS_LONG -o cs_ldemo cs_ldemo.c $(CS) -lm
 
 
 clean:
-	rm -f *.o
+	- $(RM) *.o
 
 purge: distclean
 
 distclean: clean
-	rm -f cs_demo1 cs_demo2 cs_demo3 *.a
-	rm -f cs_di_demo1 cs_di_demo2 cs_di_demo3
-	rm -f cs_dl_demo1 cs_dl_demo2 cs_dl_demo3
-	rm -f cs_ci_demo1 cs_ci_demo2 cs_ci_demo3
-	rm -f cs_cl_demo1 cs_cl_demo2 cs_cl_demo3
-	rm -f cs_idemo cs_ldemo
+	- $(RM) cs_demo1 cs_demo2 cs_demo3 *.a
+	- $(RM) cs_di_demo1 cs_di_demo2 cs_di_demo3
+	- $(RM) cs_dl_demo1 cs_dl_demo2 cs_dl_demo3
+	- $(RM) cs_ci_demo1 cs_ci_demo2 cs_ci_demo3
+	- $(RM) cs_cl_demo1 cs_cl_demo2 cs_cl_demo3
+	- $(RM) -r cs_idemo cs_ldemo *.dSYM
diff --git a/CXSparse_newfiles/Demo/README.txt b/CXSparse_newfiles/Demo/README.txt
index 93eeb3a..85f584c 100644
--- a/CXSparse_newfiles/Demo/README.txt
+++ b/CXSparse_newfiles/Demo/README.txt
@@ -2,3 +2,5 @@ CXSparse/Demo:  to compile a run the demos, just type "make" in this directory.
 The printed residuals should all be small, except for the mbeacxc matrix
 (which is numerically and structurally singular), and ash219 (which is a
 least-squares problem).  See cs_demo.out for the proper output of "make".
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse_newfiles/Demo/cs_idemo.c b/CXSparse_newfiles/Demo/cs_idemo.c
index d2f962b..fce26d0 100644
--- a/CXSparse_newfiles/Demo/cs_idemo.c
+++ b/CXSparse_newfiles/Demo/cs_idemo.c
@@ -7,39 +7,39 @@ int main (void)
 
     printf ("\n--- cs_idemo, size of CS_INT: %d\n", (int) sizeof (CS_INT)) ;
 
-    T = cs_ci_load (stdin) ;		/* load a complex triplet matrix, T */
+    T = cs_ci_load (stdin) ;            /* load a complex triplet matrix, T */
     printf ("\nT:\n") ;
     cs_ci_print (T, 0) ;
 
-    Treal = cs_i_real (T, 1) ;		/* Treal = real part of T */
+    Treal = cs_i_real (T, 1) ;          /* Treal = real part of T */
     printf ("\nTreal:\n") ;
     cs_di_print (Treal, 0) ;
 
-    Timag = cs_i_real (T, 0) ;		/* Treal = imaginary part of T */
+    Timag = cs_i_real (T, 0) ;          /* Treal = imaginary part of T */
     printf ("\nTimag:\n") ;
     cs_di_print (Timag, 0) ;
 
-    A = cs_ci_compress (T) ;		/* A = compressed-column form of T */
+    A = cs_ci_compress (T) ;            /* A = compressed-column form of T */
     printf ("\nA:\n") ;
     cs_ci_print (A, 0) ;
 
-    C1 = cs_i_real (A, 1) ;		/* C1 = real (A) */
+    C1 = cs_i_real (A, 1) ;             /* C1 = real (A) */
     printf ("\nC1 = real(A):\n") ;
     cs_di_print (C1, 0) ;
 
-    C2 = cs_i_real (A, 0) ;		/* C2 = imag (A) */
+    C2 = cs_i_real (A, 0) ;             /* C2 = imag (A) */
     printf ("\nC2 = imag(A):\n") ;
     cs_di_print (C2, 0) ;
 
-    A1 = cs_i_complex (C1, 1) ;		/* A1 = complex version of C1 */
+    A1 = cs_i_complex (C1, 1) ;         /* A1 = complex version of C1 */
     printf ("\nA1:\n") ;
     cs_ci_print (A1, 0) ;
 
-    A2 = cs_i_complex (C2, 0) ;		/* A2 = complex version of C2 (imag.) */
+    A2 = cs_i_complex (C2, 0) ;         /* A2 = complex version of C2 (imag.) */
     printf ("\nA2:\n") ;
     cs_ci_print (A2, 0) ;
 
-    B = cs_ci_add (A1, A2, 1., -1.) ;	/* B = A1 - A2 */
+    B = cs_ci_add (A1, A2, 1., -1.) ;   /* B = A1 - A2 */
     printf ("\nB = conj(A):\n") ;
     cs_ci_print (B, 0) ;
 
diff --git a/CXSparse_newfiles/Demo/cs_ldemo.c b/CXSparse_newfiles/Demo/cs_ldemo.c
index 5c09795..9fbfec5 100644
--- a/CXSparse_newfiles/Demo/cs_ldemo.c
+++ b/CXSparse_newfiles/Demo/cs_ldemo.c
@@ -1,5 +1,5 @@
 #include "cs.h"
-/* test real/complex conversion routines (int version) */
+/* test real/complex conversion routines (cs_long_t version) */
 int main (void)
 {
     cs_cl *T, *A, *A1, *A2, *B ;
@@ -7,39 +7,39 @@ int main (void)
 
     printf ("\n--- cs_ldemo, size of CS_INT: %d\n", (int) sizeof (CS_INT)) ;
 
-    T = cs_cl_load (stdin) ;		/* load a complex triplet matrix, T */
+    T = cs_cl_load (stdin) ;            /* load a complex triplet matrix, T */
     printf ("\nT:\n") ;
     cs_cl_print (T, 0) ;
 
-    Treal = cs_l_real (T, 1) ;		/* Treal = real part of T */
+    Treal = cs_l_real (T, 1) ;          /* Treal = real part of T */
     printf ("\nTreal:\n") ;
     cs_dl_print (Treal, 0) ;
 
-    Timag = cs_l_real (T, 0) ;		/* Treal = imaginary part of T */
+    Timag = cs_l_real (T, 0) ;          /* Treal = imaginary part of T */
     printf ("\nTimag:\n") ;
     cs_dl_print (Timag, 0) ;
 
-    A = cs_cl_compress (T) ;		/* A = compressed-column form of T */
+    A = cs_cl_compress (T) ;            /* A = compressed-column form of T */
     printf ("\nA:\n") ;
     cs_cl_print (A, 0) ;
 
-    C1 = cs_l_real (A, 1) ;		/* C1 = real (A) */
+    C1 = cs_l_real (A, 1) ;             /* C1 = real (A) */
     printf ("\nC1 = real(A):\n") ;
     cs_dl_print (C1, 0) ;
 
-    C2 = cs_l_real (A, 0) ;		/* C2 = imag (A) */
+    C2 = cs_l_real (A, 0) ;             /* C2 = imag (A) */
     printf ("\nC2 = imag(A):\n") ;
     cs_dl_print (C2, 0) ;
 
-    A1 = cs_l_complex (C1, 1) ;		/* A1 = complex version of C1 */
+    A1 = cs_l_complex (C1, 1) ;         /* A1 = complex version of C1 */
     printf ("\nA1:\n") ;
     cs_cl_print (A1, 0) ;
 
-    A2 = cs_l_complex (C2, 0) ;		/* A2 = complex version of C2 (imag.) */
+    A2 = cs_l_complex (C2, 0) ;         /* A2 = complex version of C2 (imag.) */
     printf ("\nA2:\n") ;
     cs_cl_print (A2, 0) ;
 
-    B = cs_cl_add (A1, A2, 1., -1.) ;	/* B = A1 - A2 */
+    B = cs_cl_add (A1, A2, 1., -1.) ;   /* B = A1 - A2 */
     printf ("\nB = conj(A):\n") ;
     cs_cl_print (B, 0) ;
 
diff --git a/CXSparse_newfiles/Doc/License.txt b/CXSparse_newfiles/Doc/License.txt
index 9fbb144..df6f425 100644
--- a/CXSparse_newfiles/Doc/License.txt
+++ b/CXSparse_newfiles/Doc/License.txt
@@ -1,6 +1,6 @@
 CXSparse: a Concise Sparse matrix package - Extended.
 Copyright (c) 2006, Timothy A. Davis.
-http://www.cise.ufl.edu/research/sparse/CSparse
+http://www.suitesparse.com
 
 --------------------------------------------------------------------------------
 
diff --git a/CXSparse_newfiles/Include/cs.h b/CXSparse_newfiles/Include/cs.h
index a511d35..ffc6531 100644
--- a/CXSparse_newfiles/Include/cs.h
+++ b/CXSparse_newfiles/Include/cs.h
@@ -22,15 +22,17 @@ extern "C" {
 #endif
 #endif
 
-#define CS_VER 2		    /* CXSparse Version 2.2.1 */
-#define CS_SUBVER 2
-#define CS_SUBSUB 1
-#define CS_DATE "Nov 1, 2007"	    /* CXSparse release date */
-#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2007"
+#define CS_VER 3                    /* CXSparse Version */
+#define CS_SUBVER 1
+#define CS_SUBSUB 4
+#define CS_DATE "Oct 10, 2014"       /* CXSparse release date */
+#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2014"
 #define CXSPARSE
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
+#define cs_long_t       SuiteSparse_long
+#define cs_long_t_id    SuiteSparse_long_id
+#define cs_long_t_max   SuiteSparse_long_max
 
 /* -------------------------------------------------------------------------- */
 /* double/int version of CXSparse */
@@ -40,13 +42,13 @@ extern "C" {
 
 typedef struct cs_di_sparse  /* matrix in compressed-column or triplet form */
 {
-    int nzmax ;	    /* maximum number of entries */
-    int m ;	    /* number of rows */
-    int n ;	    /* number of columns */
-    int *p ;	    /* column pointers (size n+1) or col indices (size nzmax) */
-    int *i ;	    /* row indices, size nzmax */
-    double *x ;	    /* numerical values, size nzmax */
-    int nz ;	    /* # of entries in triplet matrix, -1 for compressed-col */
+    int nzmax ;     /* maximum number of entries */
+    int m ;         /* number of rows */
+    int n ;         /* number of columns */
+    int *p ;        /* column pointers (size n+1) or col indices (size nzmax) */
+    int *i ;        /* row indices, size nzmax */
+    double *x ;     /* numerical values, size nzmax */
+    int nz ;        /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_di ;
 
 cs_di *cs_di_add (const cs_di *A, const cs_di *B, double alpha, double beta) ;
@@ -76,31 +78,31 @@ void *cs_di_malloc (int n, size_t size) ;
 
 typedef struct cs_di_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    int *pinv ;	    /* inverse row perm. for QR, fill red. perm for Chol */
-    int *q ;	    /* fill-reducing column permutation for LU and QR */
+    int *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    int *q ;        /* fill-reducing column permutation for LU and QR */
     int *parent ;   /* elimination tree for Cholesky and QR */
-    int *cp ;	    /* column pointers for Cholesky, row counts for QR */
+    int *cp ;       /* column pointers for Cholesky, row counts for QR */
     int *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
-    int m2 ;	    /* # of rows for QR, after adding fictitious rows */
+    int m2 ;        /* # of rows for QR, after adding fictitious rows */
     double lnz ;    /* # entries in L for LU or Cholesky; in V for QR */
     double unz ;    /* # entries in U for LU; in R for QR */
 } cs_dis ;
 
 typedef struct cs_di_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_di *L ;	    /* L for LU and Cholesky, V for QR */
-    cs_di *U ;	    /* U for LU, r for QR, not used for Cholesky */
-    int *pinv ;	    /* partial pivoting for LU */
-    double *B ;	    /* beta [0..n-1] for QR */
+    cs_di *L ;      /* L for LU and Cholesky, V for QR */
+    cs_di *U ;      /* U for LU, r for QR, not used for Cholesky */
+    int *pinv ;     /* partial pivoting for LU */
+    double *B ;     /* beta [0..n-1] for QR */
 } cs_din ;
 
 typedef struct cs_di_dmperm_results    /* cs_di_dmperm or cs_di_scc output */
 {
-    int *p ;	    /* size m, row permutation */
-    int *q ;	    /* size n, column permutation */
-    int *r ;	    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    int *s ;	    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    int nb ;	    /* # of blocks in fine dmperm decomposition */
+    int *p ;        /* size m, row permutation */
+    int *q ;        /* size n, column permutation */
+    int *r ;        /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    int *s ;        /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    int nb ;        /* # of blocks in fine dmperm decomposition */
     int rr [5] ;    /* coarse row decomposition */
     int cc [5] ;    /* coarse column decomposition */
 } cs_did ;
@@ -167,101 +169,101 @@ cs_did *cs_di_ddone (cs_did *D, cs_di *C, void *w, int ok) ;
 
 
 /* -------------------------------------------------------------------------- */
-/* double/UF_long version of CXSparse */
+/* double/cs_long_t version of CXSparse */
 /* -------------------------------------------------------------------------- */
 
 /* --- primary CSparse routines and data structures ------------------------- */
 
 typedef struct cs_dl_sparse  /* matrix in compressed-column or triplet form */
 {
-    UF_long nzmax ; /* maximum number of entries */
-    UF_long m ;	    /* number of rows */
-    UF_long n ;	    /* number of columns */
-    UF_long *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
-    UF_long *i ;    /* row indices, size nzmax */
-    double *x ;	    /* numerical values, size nzmax */
-    UF_long nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
+    cs_long_t nzmax ; /* maximum number of entries */
+    cs_long_t m ;     /* number of rows */
+    cs_long_t n ;     /* number of columns */
+    cs_long_t *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
+    cs_long_t *i ;    /* row indices, size nzmax */
+    double *x ;     /* numerical values, size nzmax */
+    cs_long_t nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_dl ;
 
 cs_dl *cs_dl_add (const cs_dl *A, const cs_dl *B, double alpha, double beta) ;
-UF_long cs_dl_cholsol (UF_long order, const cs_dl *A, double *b) ;
-UF_long cs_dl_dupl (cs_dl *A) ;
-UF_long cs_dl_entry (cs_dl *T, UF_long i, UF_long j, double x) ;
-UF_long cs_dl_lusol (UF_long order, const cs_dl *A, double *b, double tol) ;
-UF_long cs_dl_gaxpy (const cs_dl *A, const double *x, double *y) ;
+cs_long_t cs_dl_cholsol (cs_long_t order, const cs_dl *A, double *b) ;
+cs_long_t cs_dl_dupl (cs_dl *A) ;
+cs_long_t cs_dl_entry (cs_dl *T, cs_long_t i, cs_long_t j, double x) ;
+cs_long_t cs_dl_lusol (cs_long_t order, const cs_dl *A, double *b, double tol) ;
+cs_long_t cs_dl_gaxpy (const cs_dl *A, const double *x, double *y) ;
 cs_dl *cs_dl_multiply (const cs_dl *A, const cs_dl *B) ;
-UF_long cs_dl_qrsol (UF_long order, const cs_dl *A, double *b) ;
-cs_dl *cs_dl_transpose (const cs_dl *A, UF_long values) ;
+cs_long_t cs_dl_qrsol (cs_long_t order, const cs_dl *A, double *b) ;
+cs_dl *cs_dl_transpose (const cs_dl *A, cs_long_t values) ;
 cs_dl *cs_dl_compress (const cs_dl *T) ;
 double cs_dl_norm (const cs_dl *A) ;
-UF_long cs_dl_print (const cs_dl *A, UF_long brief) ;
+cs_long_t cs_dl_print (const cs_dl *A, cs_long_t brief) ;
 cs_dl *cs_dl_load (FILE *f) ;
 
 /* utilities */
-void *cs_dl_calloc (UF_long n, size_t size) ;
+void *cs_dl_calloc (cs_long_t n, size_t size) ;
 void *cs_dl_free (void *p) ;
-void *cs_dl_realloc (void *p, UF_long n, size_t size, UF_long *ok) ;
-cs_dl *cs_dl_spalloc (UF_long m, UF_long n, UF_long nzmax, UF_long values,
-    UF_long t) ;
+void *cs_dl_realloc (void *p, cs_long_t n, size_t size, cs_long_t *ok) ;
+cs_dl *cs_dl_spalloc (cs_long_t m, cs_long_t n, cs_long_t nzmax, cs_long_t values,
+    cs_long_t t) ;
 cs_dl *cs_dl_spfree (cs_dl *A) ;
-UF_long cs_dl_sprealloc (cs_dl *A, UF_long nzmax) ;
-void *cs_dl_malloc (UF_long n, size_t size) ;
+cs_long_t cs_dl_sprealloc (cs_dl *A, cs_long_t nzmax) ;
+void *cs_dl_malloc (cs_long_t n, size_t size) ;
 
 /* --- secondary CSparse routines and data structures ----------------------- */
 
 typedef struct cs_dl_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    UF_long *pinv ;	/* inverse row perm. for QR, fill red. perm for Chol */
-    UF_long *q ;	/* fill-reducing column permutation for LU and QR */
-    UF_long *parent ;	/* elimination tree for Cholesky and QR */
-    UF_long *cp ;	/* column pointers for Cholesky, row counts for QR */
-    UF_long *leftmost ;	/* leftmost[i] = min(find(A(i,:))), for QR */
-    UF_long m2 ;	/* # of rows for QR, after adding fictitious rows */
-    double lnz ;	/* # entries in L for LU or Cholesky; in V for QR */
-    double unz ;	/* # entries in U for LU; in R for QR */
+    cs_long_t *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    cs_long_t *q ;        /* fill-reducing column permutation for LU and QR */
+    cs_long_t *parent ;   /* elimination tree for Cholesky and QR */
+    cs_long_t *cp ;       /* column pointers for Cholesky, row counts for QR */
+    cs_long_t *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
+    cs_long_t m2 ;        /* # of rows for QR, after adding fictitious rows */
+    double lnz ;        /* # entries in L for LU or Cholesky; in V for QR */
+    double unz ;        /* # entries in U for LU; in R for QR */
 } cs_dls ;
 
 typedef struct cs_dl_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_dl *L ;	    /* L for LU and Cholesky, V for QR */
-    cs_dl *U ;	    /* U for LU, r for QR, not used for Cholesky */
-    UF_long *pinv ; /* partial pivoting for LU */
-    double *B ;	    /* beta [0..n-1] for QR */
+    cs_dl *L ;      /* L for LU and Cholesky, V for QR */
+    cs_dl *U ;      /* U for LU, r for QR, not used for Cholesky */
+    cs_long_t *pinv ; /* partial pivoting for LU */
+    double *B ;     /* beta [0..n-1] for QR */
 } cs_dln ;
 
 typedef struct cs_dl_dmperm_results    /* cs_dl_dmperm or cs_dl_scc output */
 {
-    UF_long *p ;    /* size m, row permutation */
-    UF_long *q ;    /* size n, column permutation */
-    UF_long *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    UF_long *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    UF_long nb ;    /* # of blocks in fine dmperm decomposition */
-    UF_long rr [5] ;	/* coarse row decomposition */
-    UF_long cc [5] ;	/* coarse column decomposition */
+    cs_long_t *p ;    /* size m, row permutation */
+    cs_long_t *q ;    /* size n, column permutation */
+    cs_long_t *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    cs_long_t *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    cs_long_t nb ;    /* # of blocks in fine dmperm decomposition */
+    cs_long_t rr [5] ;    /* coarse row decomposition */
+    cs_long_t cc [5] ;    /* coarse column decomposition */
 } cs_dld ;
 
-UF_long *cs_dl_amd (UF_long order, const cs_dl *A) ;
+cs_long_t *cs_dl_amd (cs_long_t order, const cs_dl *A) ;
 cs_dln *cs_dl_chol (const cs_dl *A, const cs_dls *S) ;
-cs_dld *cs_dl_dmperm (const cs_dl *A, UF_long seed) ;
-UF_long cs_dl_droptol (cs_dl *A, double tol) ;
-UF_long cs_dl_dropzeros (cs_dl *A) ;
-UF_long cs_dl_happly (const cs_dl *V, UF_long i, double beta, double *x) ;
-UF_long cs_dl_ipvec (const UF_long *p, const double *b, double *x, UF_long n) ;
-UF_long cs_dl_lsolve (const cs_dl *L, double *x) ;
-UF_long cs_dl_ltsolve (const cs_dl *L, double *x) ;
+cs_dld *cs_dl_dmperm (const cs_dl *A, cs_long_t seed) ;
+cs_long_t cs_dl_droptol (cs_dl *A, double tol) ;
+cs_long_t cs_dl_dropzeros (cs_dl *A) ;
+cs_long_t cs_dl_happly (const cs_dl *V, cs_long_t i, double beta, double *x) ;
+cs_long_t cs_dl_ipvec (const cs_long_t *p, const double *b, double *x, cs_long_t n) ;
+cs_long_t cs_dl_lsolve (const cs_dl *L, double *x) ;
+cs_long_t cs_dl_ltsolve (const cs_dl *L, double *x) ;
 cs_dln *cs_dl_lu (const cs_dl *A, const cs_dls *S, double tol) ;
-cs_dl *cs_dl_permute (const cs_dl *A, const UF_long *pinv, const UF_long *q,
-    UF_long values) ;
-UF_long *cs_dl_pinv (const UF_long *p, UF_long n) ;
-UF_long cs_dl_pvec (const UF_long *p, const double *b, double *x, UF_long n) ;
+cs_dl *cs_dl_permute (const cs_dl *A, const cs_long_t *pinv, const cs_long_t *q,
+    cs_long_t values) ;
+cs_long_t *cs_dl_pinv (const cs_long_t *p, cs_long_t n) ;
+cs_long_t cs_dl_pvec (const cs_long_t *p, const double *b, double *x, cs_long_t n) ;
 cs_dln *cs_dl_qr (const cs_dl *A, const cs_dls *S) ;
-cs_dls *cs_dl_schol (UF_long order, const cs_dl *A) ;
-cs_dls *cs_dl_sqr (UF_long order, const cs_dl *A, UF_long qr) ;
-cs_dl *cs_dl_symperm (const cs_dl *A, const UF_long *pinv, UF_long values) ;
-UF_long cs_dl_usolve (const cs_dl *U, double *x) ;
-UF_long cs_dl_utsolve (const cs_dl *U, double *x) ;
-UF_long cs_dl_updown (cs_dl *L, UF_long sigma, const cs_dl *C,
-    const UF_long *parent) ;
+cs_dls *cs_dl_schol (cs_long_t order, const cs_dl *A) ;
+cs_dls *cs_dl_sqr (cs_long_t order, const cs_dl *A, cs_long_t qr) ;
+cs_dl *cs_dl_symperm (const cs_dl *A, const cs_long_t *pinv, cs_long_t values) ;
+cs_long_t cs_dl_usolve (const cs_dl *U, double *x) ;
+cs_long_t cs_dl_utsolve (const cs_dl *U, double *x) ;
+cs_long_t cs_dl_updown (cs_dl *L, cs_long_t sigma, const cs_dl *C,
+    const cs_long_t *parent) ;
 
 /* utilities */
 cs_dls *cs_dl_sfree (cs_dls *S) ;
@@ -270,38 +272,38 @@ cs_dld *cs_dl_dfree (cs_dld *D) ;
 
 /* --- tertiary CSparse routines -------------------------------------------- */
 
-UF_long *cs_dl_counts (const cs_dl *A, const UF_long *parent,
-    const UF_long *post, UF_long ata) ;
-double cs_dl_cumsum (UF_long *p, UF_long *c, UF_long n) ;
-UF_long cs_dl_dfs (UF_long j, cs_dl *G, UF_long top, UF_long *xi,
-    UF_long *pstack, const UF_long *pinv) ;
-UF_long *cs_dl_etree (const cs_dl *A, UF_long ata) ;
-UF_long cs_dl_fkeep (cs_dl *A,
-    UF_long (*fkeep) (UF_long, UF_long, double, void *), void *other) ;
-double cs_dl_house (double *x, double *beta, UF_long n) ;
-UF_long *cs_dl_maxtrans (const cs_dl *A, UF_long seed) ;
-UF_long *cs_dl_post (const UF_long *parent, UF_long n) ;
+cs_long_t *cs_dl_counts (const cs_dl *A, const cs_long_t *parent,
+    const cs_long_t *post, cs_long_t ata) ;
+double cs_dl_cumsum (cs_long_t *p, cs_long_t *c, cs_long_t n) ;
+cs_long_t cs_dl_dfs (cs_long_t j, cs_dl *G, cs_long_t top, cs_long_t *xi,
+    cs_long_t *pstack, const cs_long_t *pinv) ;
+cs_long_t *cs_dl_etree (const cs_dl *A, cs_long_t ata) ;
+cs_long_t cs_dl_fkeep (cs_dl *A,
+    cs_long_t (*fkeep) (cs_long_t, cs_long_t, double, void *), void *other) ;
+double cs_dl_house (double *x, double *beta, cs_long_t n) ;
+cs_long_t *cs_dl_maxtrans (const cs_dl *A, cs_long_t seed) ;
+cs_long_t *cs_dl_post (const cs_long_t *parent, cs_long_t n) ;
 cs_dld *cs_dl_scc (cs_dl *A) ;
-UF_long cs_dl_scatter (const cs_dl *A, UF_long j, double beta, UF_long *w,
-    double *x, UF_long mark,cs_dl *C, UF_long nz) ;
-UF_long cs_dl_tdfs (UF_long j, UF_long k, UF_long *head, const UF_long *next,
-    UF_long *post, UF_long *stack) ;
-UF_long cs_dl_leaf (UF_long i, UF_long j, const UF_long *first,
-    UF_long *maxfirst, UF_long *prevleaf, UF_long *ancestor, UF_long *jleaf) ;
-UF_long cs_dl_reach (cs_dl *G, const cs_dl *B, UF_long k, UF_long *xi,
-    const UF_long *pinv) ;
-UF_long cs_dl_spsolve (cs_dl *L, const cs_dl *B, UF_long k, UF_long *xi,
-    double *x, const UF_long *pinv, UF_long lo) ;
-UF_long cs_dl_ereach (const cs_dl *A, UF_long k, const UF_long *parent,
-    UF_long *s, UF_long *w) ;
-UF_long *cs_dl_randperm (UF_long n, UF_long seed) ;
+cs_long_t cs_dl_scatter (const cs_dl *A, cs_long_t j, double beta, cs_long_t *w,
+    double *x, cs_long_t mark,cs_dl *C, cs_long_t nz) ;
+cs_long_t cs_dl_tdfs (cs_long_t j, cs_long_t k, cs_long_t *head, const cs_long_t *next,
+    cs_long_t *post, cs_long_t *stack) ;
+cs_long_t cs_dl_leaf (cs_long_t i, cs_long_t j, const cs_long_t *first,
+    cs_long_t *maxfirst, cs_long_t *prevleaf, cs_long_t *ancestor, cs_long_t *jleaf) ;
+cs_long_t cs_dl_reach (cs_dl *G, const cs_dl *B, cs_long_t k, cs_long_t *xi,
+    const cs_long_t *pinv) ;
+cs_long_t cs_dl_spsolve (cs_dl *L, const cs_dl *B, cs_long_t k, cs_long_t *xi,
+    double *x, const cs_long_t *pinv, cs_long_t lo) ;
+cs_long_t cs_dl_ereach (const cs_dl *A, cs_long_t k, const cs_long_t *parent,
+    cs_long_t *s, cs_long_t *w) ;
+cs_long_t *cs_dl_randperm (cs_long_t n, cs_long_t seed) ;
 
 /* utilities */
-cs_dld *cs_dl_dalloc (UF_long m, UF_long n) ;
-cs_dl *cs_dl_done (cs_dl *C, void *w, void *x, UF_long ok) ;
-UF_long *cs_dl_idone (UF_long *p, cs_dl *C, void *w, UF_long ok) ;
-cs_dln *cs_dl_ndone (cs_dln *N, cs_dl *C, void *w, void *x, UF_long ok) ;
-cs_dld *cs_dl_ddone (cs_dld *D, cs_dl *C, void *w, UF_long ok) ;
+cs_dld *cs_dl_dalloc (cs_long_t m, cs_long_t n) ;
+cs_dl *cs_dl_done (cs_dl *C, void *w, void *x, cs_long_t ok) ;
+cs_long_t *cs_dl_idone (cs_long_t *p, cs_dl *C, void *w, cs_long_t ok) ;
+cs_dln *cs_dl_ndone (cs_dln *N, cs_dl *C, void *w, void *x, cs_long_t ok) ;
+cs_dld *cs_dl_ddone (cs_dld *D, cs_dl *C, void *w, cs_long_t ok) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -314,13 +316,13 @@ cs_dld *cs_dl_ddone (cs_dld *D, cs_dl *C, void *w, UF_long ok) ;
 
 typedef struct cs_ci_sparse  /* matrix in compressed-column or triplet form */
 {
-    int nzmax ;	    /* maximum number of entries */
-    int m ;	    /* number of rows */
-    int n ;	    /* number of columns */
-    int *p ;	    /* column pointers (size n+1) or col indices (size nzmax) */
-    int *i ;	    /* row indices, size nzmax */
+    int nzmax ;     /* maximum number of entries */
+    int m ;         /* number of rows */
+    int n ;         /* number of columns */
+    int *p ;        /* column pointers (size n+1) or col indices (size nzmax) */
+    int *i ;        /* row indices, size nzmax */
     cs_complex_t *x ;    /* numerical values, size nzmax */
-    int nz ;	    /* # of entries in triplet matrix, -1 for compressed-col */
+    int nz ;        /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_ci ;
 
 cs_ci *cs_ci_add (const cs_ci *A, const cs_ci *B, cs_complex_t alpha,
@@ -351,31 +353,31 @@ void *cs_ci_malloc (int n, size_t size) ;
 
 typedef struct cs_ci_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    int *pinv ;	    /* inverse row perm. for QR, fill red. perm for Chol */
-    int *q ;	    /* fill-reducing column permutation for LU and QR */
+    int *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    int *q ;        /* fill-reducing column permutation for LU and QR */
     int *parent ;   /* elimination tree for Cholesky and QR */
-    int *cp ;	    /* column pointers for Cholesky, row counts for QR */
+    int *cp ;       /* column pointers for Cholesky, row counts for QR */
     int *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
-    int m2 ;	    /* # of rows for QR, after adding fictitious rows */
+    int m2 ;        /* # of rows for QR, after adding fictitious rows */
     double lnz ;    /* # entries in L for LU or Cholesky; in V for QR */
     double unz ;    /* # entries in U for LU; in R for QR */
 } cs_cis ;
 
 typedef struct cs_ci_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_ci *L ;	    /* L for LU and Cholesky, V for QR */
-    cs_ci *U ;	    /* U for LU, r for QR, not used for Cholesky */
-    int *pinv ;	    /* partial pivoting for LU */
-    double *B ;	    /* beta [0..n-1] for QR */
+    cs_ci *L ;      /* L for LU and Cholesky, V for QR */
+    cs_ci *U ;      /* U for LU, r for QR, not used for Cholesky */
+    int *pinv ;     /* partial pivoting for LU */
+    double *B ;     /* beta [0..n-1] for QR */
 } cs_cin ;
 
 typedef struct cs_ci_dmperm_results    /* cs_ci_dmperm or cs_ci_scc output */
 {
-    int *p ;	    /* size m, row permutation */
-    int *q ;	    /* size n, column permutation */
-    int *r ;	    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    int *s ;	    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    int nb ;	    /* # of blocks in fine dmperm decomposition */
+    int *p ;        /* size m, row permutation */
+    int *q ;        /* size n, column permutation */
+    int *r ;        /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    int *s ;        /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    int nb ;        /* # of blocks in fine dmperm decomposition */
     int rr [5] ;    /* coarse row decomposition */
     int cc [5] ;    /* coarse column decomposition */
 } cs_cid ;
@@ -442,105 +444,105 @@ cs_cid *cs_ci_ddone (cs_cid *D, cs_ci *C, void *w, int ok) ;
 
 
 /* -------------------------------------------------------------------------- */
-/* complex/UF_long version of CXSparse */
+/* complex/cs_long_t version of CXSparse */
 /* -------------------------------------------------------------------------- */
 
 /* --- primary CSparse routines and data structures ------------------------- */
 
 typedef struct cs_cl_sparse  /* matrix in compressed-column or triplet form */
 {
-    UF_long nzmax ; /* maximum number of entries */
-    UF_long m ;	    /* number of rows */
-    UF_long n ;	    /* number of columns */
-    UF_long *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
-    UF_long *i ;    /* row indices, size nzmax */
+    cs_long_t nzmax ; /* maximum number of entries */
+    cs_long_t m ;     /* number of rows */
+    cs_long_t n ;     /* number of columns */
+    cs_long_t *p ;    /* column pointers (size n+1) or col indlces (size nzmax) */
+    cs_long_t *i ;    /* row indices, size nzmax */
     cs_complex_t *x ;    /* numerical values, size nzmax */
-    UF_long nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
+    cs_long_t nz ;    /* # of entries in triplet matrix, -1 for compressed-col */
 } cs_cl ;
 
 cs_cl *cs_cl_add (const cs_cl *A, const cs_cl *B, cs_complex_t alpha,
     cs_complex_t beta) ;
-UF_long cs_cl_cholsol (UF_long order, const cs_cl *A, cs_complex_t *b) ;
-UF_long cs_cl_dupl (cs_cl *A) ;
-UF_long cs_cl_entry (cs_cl *T, UF_long i, UF_long j, cs_complex_t x) ;
-UF_long cs_cl_lusol (UF_long order, const cs_cl *A, cs_complex_t *b,
+cs_long_t cs_cl_cholsol (cs_long_t order, const cs_cl *A, cs_complex_t *b) ;
+cs_long_t cs_cl_dupl (cs_cl *A) ;
+cs_long_t cs_cl_entry (cs_cl *T, cs_long_t i, cs_long_t j, cs_complex_t x) ;
+cs_long_t cs_cl_lusol (cs_long_t order, const cs_cl *A, cs_complex_t *b,
     double tol) ;
-UF_long cs_cl_gaxpy (const cs_cl *A, const cs_complex_t *x, cs_complex_t *y) ;
+cs_long_t cs_cl_gaxpy (const cs_cl *A, const cs_complex_t *x, cs_complex_t *y) ;
 cs_cl *cs_cl_multiply (const cs_cl *A, const cs_cl *B) ;
-UF_long cs_cl_qrsol (UF_long order, const cs_cl *A, cs_complex_t *b) ;
-cs_cl *cs_cl_transpose (const cs_cl *A, UF_long values) ;
+cs_long_t cs_cl_qrsol (cs_long_t order, const cs_cl *A, cs_complex_t *b) ;
+cs_cl *cs_cl_transpose (const cs_cl *A, cs_long_t values) ;
 cs_cl *cs_cl_compress (const cs_cl *T) ;
 double cs_cl_norm (const cs_cl *A) ;
-UF_long cs_cl_print (const cs_cl *A, UF_long brief) ;
+cs_long_t cs_cl_print (const cs_cl *A, cs_long_t brief) ;
 cs_cl *cs_cl_load (FILE *f) ;
 
 /* utilities */
-void *cs_cl_calloc (UF_long n, size_t size) ;
+void *cs_cl_calloc (cs_long_t n, size_t size) ;
 void *cs_cl_free (void *p) ;
-void *cs_cl_realloc (void *p, UF_long n, size_t size, UF_long *ok) ;
-cs_cl *cs_cl_spalloc (UF_long m, UF_long n, UF_long nzmax, UF_long values,
-    UF_long t) ;
+void *cs_cl_realloc (void *p, cs_long_t n, size_t size, cs_long_t *ok) ;
+cs_cl *cs_cl_spalloc (cs_long_t m, cs_long_t n, cs_long_t nzmax, cs_long_t values,
+    cs_long_t t) ;
 cs_cl *cs_cl_spfree (cs_cl *A) ;
-UF_long cs_cl_sprealloc (cs_cl *A, UF_long nzmax) ;
-void *cs_cl_malloc (UF_long n, size_t size) ;
+cs_long_t cs_cl_sprealloc (cs_cl *A, cs_long_t nzmax) ;
+void *cs_cl_malloc (cs_long_t n, size_t size) ;
 
 /* --- secondary CSparse routines and data structures ----------------------- */
 
 typedef struct cs_cl_symbolic  /* symbolic Cholesky, LU, or QR analysis */
 {
-    UF_long *pinv ;	/* inverse row perm. for QR, fill red. perm for Chol */
-    UF_long *q ;	/* fill-reducing column permutation for LU and QR */
-    UF_long *parent ;	/* elimination tree for Cholesky and QR */
-    UF_long *cp ;	/* column pointers for Cholesky, row counts for QR */
-    UF_long *leftmost ;	/* leftmost[i] = min(find(A(i,:))), for QR */
-    UF_long m2 ;	/* # of rows for QR, after adding fictitious rows */
-    double lnz ;	/* # entries in L for LU or Cholesky; in V for QR */
-    double unz ;	/* # entries in U for LU; in R for QR */
+    cs_long_t *pinv ;     /* inverse row perm. for QR, fill red. perm for Chol */
+    cs_long_t *q ;        /* fill-reducing column permutation for LU and QR */
+    cs_long_t *parent ;   /* elimination tree for Cholesky and QR */
+    cs_long_t *cp ;       /* column pointers for Cholesky, row counts for QR */
+    cs_long_t *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */
+    cs_long_t m2 ;        /* # of rows for QR, after adding fictitious rows */
+    double lnz ;        /* # entries in L for LU or Cholesky; in V for QR */
+    double unz ;        /* # entries in U for LU; in R for QR */
 } cs_cls ;
 
 typedef struct cs_cl_numeric   /* numeric Cholesky, LU, or QR factorization */
 {
-    cs_cl *L ;		/* L for LU and Cholesky, V for QR */
-    cs_cl *U ;		/* U for LU, r for QR, not used for Cholesky */
-    UF_long *pinv ;	/* partial pivoting for LU */
-    double *B ;		/* beta [0..n-1] for QR */
+    cs_cl *L ;          /* L for LU and Cholesky, V for QR */
+    cs_cl *U ;          /* U for LU, r for QR, not used for Cholesky */
+    cs_long_t *pinv ;     /* partial pivoting for LU */
+    double *B ;         /* beta [0..n-1] for QR */
 } cs_cln ;
 
 typedef struct cs_cl_dmperm_results    /* cs_cl_dmperm or cs_cl_scc output */
 {
-    UF_long *p ;    /* size m, row permutation */
-    UF_long *q ;    /* size n, column permutation */
-    UF_long *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
-    UF_long *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
-    UF_long nb ;    /* # of blocks in fine dmperm decomposition */
-    UF_long rr [5] ;   /* coarse row decomposition */
-    UF_long cc [5] ;   /* coarse column decomposition */
+    cs_long_t *p ;    /* size m, row permutation */
+    cs_long_t *q ;    /* size n, column permutation */
+    cs_long_t *r ;    /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */
+    cs_long_t *s ;    /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */
+    cs_long_t nb ;    /* # of blocks in fine dmperm decomposition */
+    cs_long_t rr [5] ;   /* coarse row decomposition */
+    cs_long_t cc [5] ;   /* coarse column decomposition */
 } cs_cld ;
 
-UF_long *cs_cl_amd (UF_long order, const cs_cl *A) ;
+cs_long_t *cs_cl_amd (cs_long_t order, const cs_cl *A) ;
 cs_cln *cs_cl_chol (const cs_cl *A, const cs_cls *S) ;
-cs_cld *cs_cl_dmperm (const cs_cl *A, UF_long seed) ;
-UF_long cs_cl_droptol (cs_cl *A, double tol) ;
-UF_long cs_cl_dropzeros (cs_cl *A) ;
-UF_long cs_cl_happly (const cs_cl *V, UF_long i, double beta, cs_complex_t *x) ;
-UF_long cs_cl_ipvec (const UF_long *p, const cs_complex_t *b,
-    cs_complex_t *x, UF_long n) ;
-UF_long cs_cl_lsolve (const cs_cl *L, cs_complex_t *x) ;
-UF_long cs_cl_ltsolve (const cs_cl *L, cs_complex_t *x) ;
+cs_cld *cs_cl_dmperm (const cs_cl *A, cs_long_t seed) ;
+cs_long_t cs_cl_droptol (cs_cl *A, double tol) ;
+cs_long_t cs_cl_dropzeros (cs_cl *A) ;
+cs_long_t cs_cl_happly (const cs_cl *V, cs_long_t i, double beta, cs_complex_t *x) ;
+cs_long_t cs_cl_ipvec (const cs_long_t *p, const cs_complex_t *b,
+    cs_complex_t *x, cs_long_t n) ;
+cs_long_t cs_cl_lsolve (const cs_cl *L, cs_complex_t *x) ;
+cs_long_t cs_cl_ltsolve (const cs_cl *L, cs_complex_t *x) ;
 cs_cln *cs_cl_lu (const cs_cl *A, const cs_cls *S, double tol) ;
-cs_cl *cs_cl_permute (const cs_cl *A, const UF_long *pinv, const UF_long *q,
-    UF_long values) ;
-UF_long *cs_cl_pinv (const UF_long *p, UF_long n) ;
-UF_long cs_cl_pvec (const UF_long *p, const cs_complex_t *b,
-    cs_complex_t *x, UF_long n) ;
+cs_cl *cs_cl_permute (const cs_cl *A, const cs_long_t *pinv, const cs_long_t *q,
+    cs_long_t values) ;
+cs_long_t *cs_cl_pinv (const cs_long_t *p, cs_long_t n) ;
+cs_long_t cs_cl_pvec (const cs_long_t *p, const cs_complex_t *b,
+    cs_complex_t *x, cs_long_t n) ;
 cs_cln *cs_cl_qr (const cs_cl *A, const cs_cls *S) ;
-cs_cls *cs_cl_schol (UF_long order, const cs_cl *A) ;
-cs_cls *cs_cl_sqr (UF_long order, const cs_cl *A, UF_long qr) ;
-cs_cl *cs_cl_symperm (const cs_cl *A, const UF_long *pinv, UF_long values) ;
-UF_long cs_cl_usolve (const cs_cl *U, cs_complex_t *x) ;
-UF_long cs_cl_utsolve (const cs_cl *U, cs_complex_t *x) ;
-UF_long cs_cl_updown (cs_cl *L, UF_long sigma, const cs_cl *C,
-    const UF_long *parent) ;
+cs_cls *cs_cl_schol (cs_long_t order, const cs_cl *A) ;
+cs_cls *cs_cl_sqr (cs_long_t order, const cs_cl *A, cs_long_t qr) ;
+cs_cl *cs_cl_symperm (const cs_cl *A, const cs_long_t *pinv, cs_long_t values) ;
+cs_long_t cs_cl_usolve (const cs_cl *U, cs_complex_t *x) ;
+cs_long_t cs_cl_utsolve (const cs_cl *U, cs_complex_t *x) ;
+cs_long_t cs_cl_updown (cs_cl *L, cs_long_t sigma, const cs_cl *C,
+    const cs_long_t *parent) ;
 
 /* utilities */
 cs_cls *cs_cl_sfree (cs_cls *S) ;
@@ -549,38 +551,38 @@ cs_cld *cs_cl_dfree (cs_cld *D) ;
 
 /* --- tertiary CSparse routines -------------------------------------------- */
 
-UF_long *cs_cl_counts (const cs_cl *A, const UF_long *parent,
-    const UF_long *post, UF_long ata) ;
-double cs_cl_cumsum (UF_long *p, UF_long *c, UF_long n) ;
-UF_long cs_cl_dfs (UF_long j, cs_cl *G, UF_long top, UF_long *xi,
-    UF_long *pstack, const UF_long *pinv) ;
-UF_long *cs_cl_etree (const cs_cl *A, UF_long ata) ;
-UF_long cs_cl_fkeep (cs_cl *A,
-    UF_long (*fkeep) (UF_long, UF_long, cs_complex_t, void *), void *other) ;
-cs_complex_t cs_cl_house (cs_complex_t *x, double *beta, UF_long n) ;
-UF_long *cs_cl_maxtrans (const cs_cl *A, UF_long seed) ;
-UF_long *cs_cl_post (const UF_long *parent, UF_long n) ;
+cs_long_t *cs_cl_counts (const cs_cl *A, const cs_long_t *parent,
+    const cs_long_t *post, cs_long_t ata) ;
+double cs_cl_cumsum (cs_long_t *p, cs_long_t *c, cs_long_t n) ;
+cs_long_t cs_cl_dfs (cs_long_t j, cs_cl *G, cs_long_t top, cs_long_t *xi,
+    cs_long_t *pstack, const cs_long_t *pinv) ;
+cs_long_t *cs_cl_etree (const cs_cl *A, cs_long_t ata) ;
+cs_long_t cs_cl_fkeep (cs_cl *A,
+    cs_long_t (*fkeep) (cs_long_t, cs_long_t, cs_complex_t, void *), void *other) ;
+cs_complex_t cs_cl_house (cs_complex_t *x, double *beta, cs_long_t n) ;
+cs_long_t *cs_cl_maxtrans (const cs_cl *A, cs_long_t seed) ;
+cs_long_t *cs_cl_post (const cs_long_t *parent, cs_long_t n) ;
 cs_cld *cs_cl_scc (cs_cl *A) ;
-UF_long cs_cl_scatter (const cs_cl *A, UF_long j, cs_complex_t beta,
-    UF_long *w, cs_complex_t *x, UF_long mark,cs_cl *C, UF_long nz) ;
-UF_long cs_cl_tdfs (UF_long j, UF_long k, UF_long *head, const UF_long *next,
-    UF_long *post, UF_long *stack) ;
-UF_long cs_cl_leaf (UF_long i, UF_long j, const UF_long *first,
-    UF_long *maxfirst, UF_long *prevleaf, UF_long *ancestor, UF_long *jleaf) ;
-UF_long cs_cl_reach (cs_cl *G, const cs_cl *B, UF_long k, UF_long *xi,
-    const UF_long *pinv) ;
-UF_long cs_cl_spsolve (cs_cl *L, const cs_cl *B, UF_long k, UF_long *xi, 
-    cs_complex_t *x, const UF_long *pinv, UF_long lo) ;
-UF_long cs_cl_ereach (const cs_cl *A, UF_long k, const UF_long *parent,
-    UF_long *s, UF_long *w) ;
-UF_long *cs_cl_randperm (UF_long n, UF_long seed) ;
+cs_long_t cs_cl_scatter (const cs_cl *A, cs_long_t j, cs_complex_t beta,
+    cs_long_t *w, cs_complex_t *x, cs_long_t mark,cs_cl *C, cs_long_t nz) ;
+cs_long_t cs_cl_tdfs (cs_long_t j, cs_long_t k, cs_long_t *head, const cs_long_t *next,
+    cs_long_t *post, cs_long_t *stack) ;
+cs_long_t cs_cl_leaf (cs_long_t i, cs_long_t j, const cs_long_t *first,
+    cs_long_t *maxfirst, cs_long_t *prevleaf, cs_long_t *ancestor, cs_long_t *jleaf) ;
+cs_long_t cs_cl_reach (cs_cl *G, const cs_cl *B, cs_long_t k, cs_long_t *xi,
+    const cs_long_t *pinv) ;
+cs_long_t cs_cl_spsolve (cs_cl *L, const cs_cl *B, cs_long_t k, cs_long_t *xi, 
+    cs_complex_t *x, const cs_long_t *pinv, cs_long_t lo) ;
+cs_long_t cs_cl_ereach (const cs_cl *A, cs_long_t k, const cs_long_t *parent,
+    cs_long_t *s, cs_long_t *w) ;
+cs_long_t *cs_cl_randperm (cs_long_t n, cs_long_t seed) ;
 
 /* utilities */
-cs_cld *cs_cl_dalloc (UF_long m, UF_long n) ;
-cs_cl *cs_cl_done (cs_cl *C, void *w, void *x, UF_long ok) ;
-UF_long *cs_cl_idone (UF_long *p, cs_cl *C, void *w, UF_long ok) ;
-cs_cln *cs_cl_ndone (cs_cln *N, cs_cl *C, void *w, void *x, UF_long ok) ;
-cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, UF_long ok) ;
+cs_cld *cs_cl_dalloc (cs_long_t m, cs_long_t n) ;
+cs_cl *cs_cl_done (cs_cl *C, void *w, void *x, cs_long_t ok) ;
+cs_long_t *cs_cl_idone (cs_long_t *p, cs_cl *C, void *w, cs_long_t ok) ;
+cs_cln *cs_cl_ndone (cs_cln *N, cs_cl *C, void *w, void *x, cs_long_t ok) ;
+cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, cs_long_t ok) ;
 
 #endif
 
@@ -589,9 +591,9 @@ cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, UF_long ok) ;
 /* -------------------------------------------------------------------------- */
 
 #ifdef CS_LONG
-#define CS_INT UF_long
-#define CS_INT_MAX UF_long_max
-#define CS_ID UF_long_id
+#define CS_INT cs_long_t
+#define CS_INT_MAX cs_long_t_max
+#define CS_ID cs_long_t_id
 #ifdef CS_COMPLEX
 #define CS_ENTRY cs_complex_t
 #define CS_NAME(nm) cs_cl ## nm
@@ -726,8 +728,8 @@ cs_cld *cs_cl_ddone (cs_cld *D, cs_cl *C, void *w, UF_long ok) ;
 #ifndef NCOMPLEX
 cs_di *cs_i_real (cs_ci *A, int real) ;
 cs_ci *cs_i_complex (cs_di *A, int real) ;
-cs_dl *cs_l_real (cs_cl *A, UF_long real) ;
-cs_cl *cs_l_complex (cs_dl *A, UF_long real) ;
+cs_dl *cs_l_real (cs_cl *A, cs_long_t real) ;
+cs_cl *cs_l_complex (cs_dl *A, cs_long_t real) ;
 #endif
 
 #ifdef __cplusplus
diff --git a/CXSparse_newfiles/Lib/Makefile b/CXSparse_newfiles/Lib/Makefile
index c937956..3c10cf2 100644
--- a/CXSparse_newfiles/Lib/Makefile
+++ b/CXSparse_newfiles/Lib/Makefile
@@ -1,10 +1,11 @@
-# Modify the "-O" optimization option for best performance (-O3 on Linux):
-CC = cc
-CFLAGS = -O
-I = -I../../UFconfig -I../Include
+# CC = cc
+# CF = -O
 
-AR = ar cr
-RANLIB = ranlib
+default: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+I = -I../../SuiteSparse_config -I../Include
 
 all: libcxsparse.a
 
@@ -71,28 +72,28 @@ CS = cs_convert.o $(CS_DI_OBJ) $(CS_DL_OBJ) $(CS_CI_OBJ) $(CS_CL_OBJ)
 $(CS): ../Include/cs.h Makefile
 
 cs_convert.o: ../Source/cs_convert.c
-	$(CC) $(CFLAGS) $(I) -c $< -o $@
+	$(CC) $(CF) $(I) -c $< -o $@
 
 %_di.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -c $< -o $@
+	$(CC) $(CF) $(I) -c $< -o $@
 
 %_dl.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -DCS_LONG -c $< -o $@
+	$(CC) $(CF) $(I) -DCS_LONG -c $< -o $@
 
 %_ci.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -DCS_COMPLEX -c $< -o $@
+	$(CC) $(CF) $(I) -DCS_COMPLEX -c $< -o $@
 
 %_cl.o : ../Source/%.c
-	$(CC) $(CFLAGS) $(I) -DCS_LONG -DCS_COMPLEX -c $< -o $@
+	$(CC) $(CF) $(I) -DCS_LONG -DCS_COMPLEX -c $< -o $@
 
 libcxsparse.a: $(CS)
-	$(AR) libcxsparse.a $(CS)
-	$(RANLIB) libcxsparse.a
+	$(ARCHIVE)  libcxsparse.a $(CS)
+	- $(RANLIB) libcxsparse.a
 
 clean:
-	rm -f *.o
+	- $(RM) *.o
 
 purge: distclean
 
 distclean: clean
-	rm -f *.a
+	- $(RM) *.a
diff --git a/CXSparse_newfiles/MATLAB/CSparse/Contents.m b/CXSparse_newfiles/MATLAB/CSparse/Contents.m
index 4af6293..36b4df6 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/Contents.m
+++ b/CXSparse_newfiles/MATLAB/CSparse/Contents.m
@@ -47,8 +47,7 @@
 % Example:
 %   help cs_add
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 % helper function:
 %   cs_must_compile - return 1 if source code f must be compiled, 0 otherwise
diff --git a/CXSparse_newfiles/MATLAB/CSparse/Makefile b/CXSparse_newfiles/MATLAB/CSparse/Makefile
deleted file mode 100644
index 830e630..0000000
--- a/CXSparse_newfiles/MATLAB/CSparse/Makefile
+++ /dev/null
@@ -1,171 +0,0 @@
-include ../../../UFconfig/UFconfig.mk
-
-MX = $(MEX) -DCS_LONG
-AR = ar cr
-RANLIB = ranlib
-
-I = -I../../Include -I../../../UFconfig
-
-all: mexcsparse.a cs_mex.h
-	$(MX) cs_thumb_mex.c $(I) mexcsparse.a -output cs_thumb
-	$(MX) cs_print_mex.c $(I) mexcsparse.a -output cs_print
-	$(MX) cs_updown_mex.c $(I) mexcsparse.a -output cs_updown
-	$(MX) cs_gaxpy_mex.c $(I) mexcsparse.a -output cs_gaxpy
-	$(MX) cs_transpose_mex.c $(I) mexcsparse.a -output cs_transpose
-	$(MX) cs_sparse_mex.c $(I) mexcsparse.a -output cs_sparse
-	$(MX) cs_multiply_mex.c $(I) mexcsparse.a -output cs_multiply
-	$(MX) cs_add_mex.c $(I) mexcsparse.a -output cs_add
-	$(MX) cs_permute_mex.c $(I) mexcsparse.a -output cs_permute
-	$(MX) cs_symperm_mex.c $(I) mexcsparse.a -output cs_symperm
-	$(MX) cs_lsolve_mex.c $(I) mexcsparse.a -output cs_lsolve
-	$(MX) cs_ltsolve_mex.c $(I) mexcsparse.a -output cs_ltsolve
-	$(MX) cs_usolve_mex.c $(I) mexcsparse.a -output cs_usolve
-	$(MX) cs_utsolve_mex.c $(I) mexcsparse.a -output cs_utsolve
-	$(MX) cs_chol_mex.c $(I) mexcsparse.a -output cs_chol
-	$(MX) cs_etree_mex.c $(I) mexcsparse.a -output cs_etree
-	$(MX) cs_counts_mex.c $(I) mexcsparse.a -output cs_counts
-	$(MX) cs_qr_mex.c $(I) mexcsparse.a -output cs_qr
-	$(MX) cs_amd_mex.c $(I) mexcsparse.a -output cs_amd
-	$(MX) cs_lu_mex.c $(I) mexcsparse.a -output cs_lu
-	$(MX) cs_cholsol_mex.c $(I) mexcsparse.a -output cs_cholsol
-	$(MX) cs_lusol_mex.c $(I) mexcsparse.a -output cs_lusol
-	$(MX) cs_droptol_mex.c $(I) mexcsparse.a -output cs_droptol
-	$(MX) cs_qrsol_mex.c $(I) mexcsparse.a -output cs_qrsol
-	$(MX) cs_dmperm_mex.c $(I) mexcsparse.a -output cs_dmperm
-	$(MX) cs_scc_mex.c $(I) mexcsparse.a -output cs_scc
-	$(MX) cs_sqr_mex.c $(I) mexcsparse.a -output cs_sqr
-	$(MX) cs_randperm_mex.c $(I) mexcsparse.a -output cs_randperm
-
-CSD = cs_mex.o \
-	cs_amd.o \
-	cs_chol.o \
-	cs_counts.o \
-	cs_cumsum.o \
-	cs_fkeep.o \
-	cs_dfs.o \
-	cs_dmperm.o \
-	cs_droptol.o \
-	cs_dropzeros.o \
-	cs_dupl.o \
-	cs_entry.o \
-	cs_etree.o \
-	cs_gaxpy.o \
-	cs_ipvec.o \
-	cs_lsolve.o \
-	cs_ltsolve.o \
-	cs_lu.o \
-	cs_maxtrans.o \
-	cs_util.o \
-	cs_malloc.o \
-	cs_multiply.o \
-	cs_add.o \
-	cs_scatter.o \
-	cs_permute.o \
-	cs_pinv.o \
-	cs_post.o \
-	cs_tdfs.o \
-	cs_pvec.o \
-	cs_qr.o \
-	cs_happly.o \
-	cs_house.o \
-	cs_schol.o \
-	cs_scc.o \
-	cs_sqr.o \
-	cs_symperm.o \
-	cs_transpose.o \
-	cs_compress.o \
-	cs_usolve.o \
-	cs_utsolve.o \
-	cs_cholsol.o \
-	cs_lusol.o \
-	cs_qrsol.o \
-	cs_updown.o \
-	cs_norm.o \
-	cs_print.o \
-	cs_load.o \
-	cs_spsolve.o \
-	cs_reach.o \
-	cs_ereach.o \
-	cs_leaf.o \
-	cs_randperm.o
-
-CSC = \
-	cs_cl_amd.o \
-	cs_cl_chol.o \
-	cs_cl_counts.o \
-	cs_cl_cumsum.o \
-	cs_cl_fkeep.o \
-	cs_cl_dfs.o \
-	cs_cl_dmperm.o \
-	cs_cl_droptol.o \
-	cs_cl_dropzeros.o \
-	cs_cl_dupl.o \
-	cs_cl_entry.o \
-	cs_cl_etree.o \
-	cs_cl_gaxpy.o \
-	cs_cl_ipvec.o \
-	cs_cl_lsolve.o \
-	cs_cl_ltsolve.o \
-	cs_cl_lu.o \
-	cs_cl_maxtrans.o \
-	cs_cl_util.o \
-	cs_cl_malloc.o \
-	cs_cl_multiply.o \
-	cs_cl_add.o \
-	cs_cl_scatter.o \
-	cs_cl_permute.o \
-	cs_cl_pinv.o \
-	cs_cl_post.o \
-	cs_cl_tdfs.o \
-	cs_cl_pvec.o \
-	cs_cl_qr.o \
-	cs_cl_happly.o \
-	cs_cl_house.o \
-	cs_cl_schol.o \
-	cs_cl_scc.o \
-	cs_cl_sqr.o \
-	cs_cl_symperm.o \
-	cs_cl_transpose.o \
-	cs_cl_compress.o \
-	cs_cl_usolve.o \
-	cs_cl_utsolve.o \
-	cs_cl_cholsol.o \
-	cs_cl_lusol.o \
-	cs_cl_qrsol.o \
-	cs_cl_updown.o \
-	cs_cl_norm.o \
-	cs_cl_print.o \
-	cs_cl_load.o \
-	cs_cl_spsolve.o \
-	cs_cl_reach.o \
-	cs_cl_ereach.o \
-	cs_cl_leaf.o \
-	cs_cl_randperm.o
-
-CS = $(CSD) $(CSC)
-
-mexcsparse.a: $(CS)
-	$(AR) mexcsparse.a $(CS)
-	$(RANLIB) mexcsparse.a
-
-$(CS): ../../Include/cs.h
-
-
-cs_mex.o: cs_mex.c cs_mex.h
-	$(MX) -c $(I) $<
-
-cs_cl_%.o: ../../Source/cs_%.c
-	cp -f $< cs_cl_$*.c
-	$(MX) -DCS_COMPLEX -c $(I) cs_cl_$*.c
-
-cs_%.o: ../../Source/cs_%.c
-	$(MX) -c $(I) $<
-
-
-clean:
-	- rm -f *.o
-
-distclean: clean
-	- rm -f *.mex* *.dll *.a cs_cl_*.c
-
-purge: distclean
diff --git a/CXSparse_newfiles/MATLAB/CSparse/README.txt b/CXSparse_newfiles/MATLAB/CSparse/README.txt
index e3a5aa1..732f160 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/README.txt
+++ b/CXSparse_newfiles/MATLAB/CSparse/README.txt
@@ -1 +1,3 @@
 MATLAB interface for CXSparse.  See Contents.m for details.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_add_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_add_mex.c
index b8f4e70..cbd63a5 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_add_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_add_mex.c
@@ -7,8 +7,8 @@ static cs_complex_t get_complex (const mxArray *a)
     cs_complex_t s = mxGetScalar (a) ;
     if (mxIsComplex (a))
     {
-	double *z = mxGetPi (a) ;
-	s += I * z [0] ;
+        double *z = mxGetPi (a) ;
+        s += I * z [0] ;
     }
     return (s) ;
 }
@@ -24,44 +24,44 @@ void mexFunction
 {
     if (nargout > 1 || nargin < 2 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: C = cs_add(A,B,alpha,beta)") ;
+        mexErrMsgTxt ("Usage: C = cs_add(A,B,alpha,beta)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1])
-	|| (nargin > 2 && mxIsComplex (pargin [2]))
-	|| (nargin > 3 && mxIsComplex (pargin [3])))
+        || (nargin > 2 && mxIsComplex (pargin [2]))
+        || (nargin > 3 && mxIsComplex (pargin [3])))
     {
 #ifndef NCOMPLEX
-	cs_complex_t alpha, beta ;
-	cs_cl Amatrix, Bmatrix, *A, *B, *C, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	B = cs_cl_mex_get_sparse (&Bmatrix, 0, pargin [1]) ;	/* get B */
-	alpha = (nargin < 3) ? 1 : get_complex (pargin [2]) ;   /* get alpha */
-	beta  = (nargin < 4) ? 1 : get_complex (pargin [3]) ;   /* get beta */
-	C = cs_cl_add (A,B,alpha,beta) ;    /* C = alpha*A + beta *B */
-	cs_cl_dropzeros (C) ;		/* drop zeros */
-	D = cs_cl_transpose (C, 1) ;	/* sort result via double transpose */
-	cs_cl_spfree (C) ;
-	C = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	/* return C */
+        cs_complex_t alpha, beta ;
+        cs_cl Amatrix, Bmatrix, *A, *B, *C, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        B = cs_cl_mex_get_sparse (&Bmatrix, 0, pargin [1]) ;    /* get B */
+        alpha = (nargin < 3) ? 1 : get_complex (pargin [2]) ;   /* get alpha */
+        beta  = (nargin < 4) ? 1 : get_complex (pargin [3]) ;   /* get beta */
+        C = cs_cl_add (A,B,alpha,beta) ;    /* C = alpha*A + beta *B */
+        cs_cl_dropzeros (C) ;           /* drop zeros */
+        D = cs_cl_transpose (C, 1) ;    /* sort result via double transpose */
+        cs_cl_spfree (C) ;
+        C = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;       /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	double alpha, beta ;
-	cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-	B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;    /* get B */
-	alpha = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;   /* get alpha */
-	beta  = (nargin < 4) ? 1 : mxGetScalar (pargin [3]) ;   /* get beta */
-	C = cs_dl_add (A,B,alpha,beta) ;	/* C = alpha*A + beta *B */
-	cs_dl_dropzeros (C) ;		/* drop zeros */
-	D = cs_dl_transpose (C, 1) ;	/* sort result via double transpose */
-	cs_dl_spfree (C) ;
-	C = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;	/* return C */
+        double alpha, beta ;
+        cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
+        B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;    /* get B */
+        alpha = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;   /* get alpha */
+        beta  = (nargin < 4) ? 1 : mxGetScalar (pargin [3]) ;   /* get beta */
+        C = cs_dl_add (A,B,alpha,beta) ;        /* C = alpha*A + beta *B */
+        cs_dl_dropzeros (C) ;           /* drop zeros */
+        D = cs_dl_transpose (C, 1) ;    /* sort result via double transpose */
+        cs_dl_spfree (C) ;
+        C = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;       /* return C */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_amd_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_amd_mex.c
index 7d8ff09..3aa14f2 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_amd_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_amd_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     CS_INT *P, order ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: p = cs_amd(A,order)") ;
+        mexErrMsgTxt ("Usage: p = cs_amd(A,order)") ;
     }
     A = cs_dl_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;    /* get A */
     order = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;   /* get ordering */
     order = CS_MAX (order, 1) ;
     order = CS_MIN (order, 3) ;
-    P = cs_dl_amd (order, A) ;			    /* min. degree ordering */
+    P = cs_dl_amd (order, A) ;                      /* min. degree ordering */
     pargout [0] = cs_dl_mex_put_int (P, A->n, 1, 1) ;  /* return P */
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_chol_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_chol_mex.c
index e3b1c5e..4ae63c3 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_chol_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_chol_mex.c
@@ -6,53 +6,53 @@ void mexFunction (int nargout, mxArray *pargout [ ], int nargin,
     CS_INT order, n, drop, *p ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: [L,p] = cs_chol(A,drop)") ;
+        mexErrMsgTxt ("Usage: [L,p] = cs_chol(A,drop)") ;
     }
     drop = (nargin == 1) ? 1 : mxGetScalar (pargin [1]) ;
-    order = (nargout > 1) ? 1 : 0 ;		    /* determine ordering */
+    order = (nargout > 1) ? 1 : 0 ;                 /* determine ordering */
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A ;
-	cs_cls *S ;
-	cs_cln *N ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_cl_schol (order, A) ;		    /* symbolic Cholesky */
-	N = cs_cl_chol (A, S) ;			    /* numeric Cholesky */
-	if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
-	cs_free (A->x) ;
-	if (drop) cs_cl_dropzeros (N->L) ;	    /* drop zeros if requested*/
-	pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;	    /* return L */
-	if (nargout > 1)
-	{
-	    p = cs_cl_pinv (S->pinv, n) ;	    /* p=pinv' */
-	    pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
-	}
-	cs_cl_nfree (N) ;
-	cs_cl_sfree (S) ;
+        cs_cl Amatrix, *A ;
+        cs_cls *S ;
+        cs_cln *N ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        n = A->n ;
+        S = cs_cl_schol (order, A) ;                /* symbolic Cholesky */
+        N = cs_cl_chol (A, S) ;                     /* numeric Cholesky */
+        if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
+        cs_free (A->x) ;
+        if (drop) cs_cl_dropzeros (N->L) ;          /* drop zeros if requested*/
+        pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;      /* return L */
+        if (nargout > 1)
+        {
+            p = cs_cl_pinv (S->pinv, n) ;           /* p=pinv' */
+            pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
+        }
+        cs_cl_nfree (N) ;
+        cs_cl_sfree (S) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A ;
-	cs_dls *S ;
-	cs_dln *N ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_dl_schol (order, A) ;		    /* symbolic Cholesky */
-	N = cs_dl_chol (A, S) ;			    /* numeric Cholesky */
-	if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
-	if (drop) cs_dl_dropzeros (N->L) ;	    /* drop zeros if requested*/
-	pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ; /* return L */
-	if (nargout > 1)
-	{
-	    p = cs_dl_pinv (S->pinv, n) ;		    /* p=pinv' */
-	    pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
-	}
-	cs_dl_nfree (N) ;
-	cs_dl_sfree (S) ;
+        cs_dl Amatrix, *A ;
+        cs_dls *S ;
+        cs_dln *N ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ; /* get A */
+        n = A->n ;
+        S = cs_dl_schol (order, A) ;                /* symbolic Cholesky */
+        N = cs_dl_chol (A, S) ;                     /* numeric Cholesky */
+        if (!N) mexErrMsgTxt ("cs_chol failed: not positive definite\n") ;
+        if (drop) cs_dl_dropzeros (N->L) ;          /* drop zeros if requested*/
+        pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ; /* return L */
+        if (nargout > 1)
+        {
+            p = cs_dl_pinv (S->pinv, n) ;                   /* p=pinv' */
+            pargout [1] = cs_dl_mex_put_int (p, n, 1, 1) ; /* return p */
+        }
+        cs_dl_nfree (N) ;
+        cs_dl_sfree (S) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_cholsol_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_cholsol_mex.c
index 08b9f40..da5ce6c 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_cholsol_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_cholsol_mex.c
@@ -11,7 +11,7 @@ void mexFunction
     CS_INT order ;
     if (nargout > 1 || nargin < 2 || nargin > 3)
     {
-	mexErrMsgTxt ("Usage: x = cs_cholsol(A,b,order)") ;
+        mexErrMsgTxt ("Usage: x = cs_cholsol(A,b,order)") ;
     }
     order = (nargin < 3) ? 1 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
@@ -19,30 +19,30 @@ void mexFunction
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, Amatrix ;
-	cs_complex_t *x ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
-	x = cs_cl_mex_get_double (A->n, pargin [1]) ;		/* x = b */
-	if (!cs_cl_cholsol (order, A, x))			/* x = A\x */
-	{
-	    mexErrMsgTxt ("A not positive definite") ;
-	}
-	cs_free (A->x) ;
-	pargout [0] = cs_cl_mex_put_double (A->n, x) ;	    /* return x */
+        cs_cl *A, Amatrix ;
+        cs_complex_t *x ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        x = cs_cl_mex_get_double (A->n, pargin [1]) ;           /* x = b */
+        if (!cs_cl_cholsol (order, A, x))                       /* x = A\x */
+        {
+            mexErrMsgTxt ("A not positive definite") ;
+        }
+        cs_free (A->x) ;
+        pargout [0] = cs_cl_mex_put_double (A->n, x) ;      /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, Amatrix ;
-	double *x, *b ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
-	b = cs_dl_mex_get_double (A->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;	/* x = b */
-	if (!cs_dl_cholsol (order, A, x))		    /* x = A\x */
-	{
-	    mexErrMsgTxt ("A not positive definite") ;
-	}
+        cs_dl *A, Amatrix ;
+        double *x, *b ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ; /* get A */
+        b = cs_dl_mex_get_double (A->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;    /* x = b */
+        if (!cs_dl_cholsol (order, A, x))                   /* x = A\x */
+        {
+            mexErrMsgTxt ("A not positive definite") ;
+        }
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_counts_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_counts_mex.c
index 60e680b..aa58e2e 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_counts_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_counts_mex.c
@@ -13,20 +13,20 @@ void mexFunction
     char mode [20] ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: c = cs_counts(A,mode)") ;
+        mexErrMsgTxt ("Usage: c = cs_counts(A,mode)") ;
     }
-    ata = 0 ;						/* get mode */
+    ata = 0 ;                                           /* get mode */
     if (nargin > 1 && mxIsChar (pargin [1]))
     {
-	mxGetString (pargin [1], mode, 8) ;
-	ata = (mode [0] == 'c') ;
+        mxGetString (pargin [1], mode, 8) ;
+        ata = (mode [0] == 'c') ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;  /* get A */
     n = A->n ;
-    parent = cs_dl_etree (A, ata) ;			/* compute etree */
-    post = cs_dl_post (parent, n) ;			/* postorder the etree*/
-    c = cs_dl_counts (A, parent, post, ata) ;		/* get column counts */
-    pargout [0] = cs_dl_mex_put_int (c, n, 0, 1) ;		/* return counts */
+    parent = cs_dl_etree (A, ata) ;                     /* compute etree */
+    post = cs_dl_post (parent, n) ;                     /* postorder the etree*/
+    c = cs_dl_counts (A, parent, post, ata) ;           /* get column counts */
+    pargout [0] = cs_dl_mex_put_int (c, n, 0, 1) ;              /* return counts */
     cs_free (parent) ;
     cs_free (post) ;
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_dmperm_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_dmperm_mex.c
index 7575493..6de9575 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_dmperm_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_dmperm_mex.c
@@ -14,28 +14,28 @@ void mexFunction
     CS_INT m, n, *jmatch, iseed ;
     if (nargin < 1 || nargin > 2 || nargout > 6)
     {
-	mexErrMsgTxt ("Usage: [p,q,r,s,cc,rr] = cs_dmperm (A,seed)") ;
+        mexErrMsgTxt ("Usage: [p,q,r,s,cc,rr] = cs_dmperm (A,seed)") ;
     }
-    seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 0 ;	/* get seed */
+    seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 0 ;        /* get seed */
     iseed = (seed > 0 && seed < 1) ? (seed * RAND_MAX) : seed ;
-    A = cs_dl_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, 0, 0, pargin [0]) ;     /* get A */
     n = A->n ;
     m = A->m ;
     if (nargout <= 1)
     {
-	jmatch = cs_dl_maxtrans (A, iseed) ;		    /* max. matching */
-	pargout [0] = cs_dl_mex_put_int (jmatch+m, n, 1, 0) ;  /* return imatch */
-	cs_free (jmatch) ;
+        jmatch = cs_dl_maxtrans (A, iseed) ;                /* max. matching */
+        pargout [0] = cs_dl_mex_put_int (jmatch+m, n, 1, 0) ;  /* return imatch */
+        cs_free (jmatch) ;
     }
     else
     {
-	D = cs_dl_dmperm (A, iseed) ;	/* Dulmage-Mendelsohn decomposition */
-	pargout [0] = cs_dl_mex_put_int (D->p, m, 1, 0) ;
-	pargout [1] = cs_dl_mex_put_int (D->q, n, 1, 0) ;
-	pargout [2] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;
-	pargout [3] = cs_dl_mex_put_int (D->s, D->nb+1, 1, 0) ;
-	pargout [4] = cs_dl_mex_put_int (D->cc, 5, 1, 0) ;
-	pargout [5] = cs_dl_mex_put_int (D->rr, 5, 1, 0) ;
-	cs_dl_dfree (D) ;
+        D = cs_dl_dmperm (A, iseed) ;   /* Dulmage-Mendelsohn decomposition */
+        pargout [0] = cs_dl_mex_put_int (D->p, m, 1, 0) ;
+        pargout [1] = cs_dl_mex_put_int (D->q, n, 1, 0) ;
+        pargout [2] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;
+        pargout [3] = cs_dl_mex_put_int (D->s, D->nb+1, 1, 0) ;
+        pargout [4] = cs_dl_mex_put_int (D->cc, 5, 1, 0) ;
+        pargout [5] = cs_dl_mex_put_int (D->rr, 5, 1, 0) ;
+        cs_dl_dfree (D) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_droptol_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_droptol_mex.c
index 29117f0..8b5214a 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_droptol_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_droptol_mex.c
@@ -12,34 +12,34 @@ void mexFunction
     double tol ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_droptol(A,tol)") ;
+        mexErrMsgTxt ("Usage: C = cs_droptol(A,tol)") ;
     }
-    tol = mxGetScalar (pargin [1]) ;			    /* get tol */
+    tol = mxGetScalar (pargin [1]) ;                        /* get tol */
 
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *C, *A ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
-	C = cs_cl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;	/* C = A */
-	for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
-	cs_cl_droptol (C, tol) ;			    /* drop from C */
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	    /* return C */
+        cs_cl Amatrix, *C, *A ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        C = cs_cl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;        /* C = A */
+        for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
+        cs_cl_droptol (C, tol) ;                            /* drop from C */
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;           /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *C, *A ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-	C = cs_dl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;	/* C = A */
-	for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
-	for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
-	cs_dl_droptol (C, tol) ;			    /* drop from C */
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;		    /* return C */
+        cs_dl Amatrix, *C, *A ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
+        C = cs_dl_spalloc (A->m, A->n, A->nzmax, 1, 0) ;        /* C = A */
+        for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
+        for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
+        cs_dl_droptol (C, tol) ;                            /* drop from C */
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;                   /* return C */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_esep.m b/CXSparse_newfiles/MATLAB/CSparse/cs_esep.m
index 8bb7d32..1fb231f 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_esep.m
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_esep.m
@@ -11,8 +11,7 @@ function [a,b] = cs_esep (A)
 %
 %   See also CS_NSEP, CS_SEP, CS_ND, SYMRCM.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (~isreal (A))
     A = spones (A) ;
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_etree_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_etree_mex.c
index 99753fd..8a6cf74 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_etree_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_etree_mex.c
@@ -14,21 +14,21 @@ void mexFunction
     char mode [20] ;
     if (nargout > 2 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: [parent,post] = cs_etree(A,mode)") ;
+        mexErrMsgTxt ("Usage: [parent,post] = cs_etree(A,mode)") ;
     }
-    ata = 0 ;						/* get mode */
+    ata = 0 ;                                           /* get mode */
     if (nargin > 1 && mxIsChar (pargin [1]))
     {
-	mxGetString (pargin [1], mode, 8) ;
-	ata = (mode [0] == 'c') ;
+        mxGetString (pargin [1], mode, 8) ;
+        ata = (mode [0] == 'c') ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, !ata, 0, pargin [0]) ;  /* get A */
     n = A->n ;
-    parent = cs_dl_etree (A, ata) ;			/* compute etree */
+    parent = cs_dl_etree (A, ata) ;                     /* compute etree */
     if (nargout > 1)
     {
-	post = cs_dl_post (parent, n) ;			/* postorder the etree*/
-	pargout [1] = cs_dl_mex_put_int (post, n, 1, 1) ;	/* return post */
+        post = cs_dl_post (parent, n) ;                 /* postorder the etree*/
+        pargout [1] = cs_dl_mex_put_int (post, n, 1, 1) ;       /* return post */
     }
-    pargout [0] = cs_dl_mex_put_int (parent, n, 1, 1) ;	/* return parent */
+    pargout [0] = cs_dl_mex_put_int (parent, n, 1, 1) ; /* return parent */
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_gaxpy_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_gaxpy_mex.c
index 13dc30a..4ffd985 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_gaxpy_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_gaxpy_mex.c
@@ -10,33 +10,33 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: z = cs_gaxpy(A,x,y)") ;
+        mexErrMsgTxt ("Usage: z = cs_gaxpy(A,x,y)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1])
-	|| mxIsComplex (pargin [2]))
+        || mxIsComplex (pargin [2]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A ;
-	cs_complex_t *x, *z ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;/* get A */
-	x = cs_cl_mex_get_double (A->n, pargin [1]) ;	    /* get x */
-	z = cs_cl_mex_get_double (A->m, pargin [2]) ;	    /* z = y */
-	cs_cl_gaxpy (A, x, z) ;				    /* z = z + A*x */
-	cs_free (x) ;
-	cs_free (A->x) ;
-	pargout [0] = cs_cl_mex_put_double (A->m, z) ;	    /* return z */
+        cs_cl Amatrix, *A ;
+        cs_complex_t *x, *z ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;/* get A */
+        x = cs_cl_mex_get_double (A->n, pargin [1]) ;       /* get x */
+        z = cs_cl_mex_get_double (A->m, pargin [2]) ;       /* z = y */
+        cs_cl_gaxpy (A, x, z) ;                             /* z = z + A*x */
+        cs_free (x) ;
+        cs_free (A->x) ;
+        pargout [0] = cs_cl_mex_put_double (A->m, z) ;      /* return z */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A ;
-	double *x, *y, *z ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
-	x = cs_dl_mex_get_double (A->n, pargin [1]) ;	    /* get x */
-	y = cs_dl_mex_get_double (A->m, pargin [2]) ;	    /* get y */
-	z = cs_dl_mex_put_double (A->m, y, &(pargout [0])) ;   /* z = y */
-	cs_dl_gaxpy (A, x, z) ;				    /* z = z + A*x */
+        cs_dl Amatrix, *A ;
+        double *x, *y, *z ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
+        x = cs_dl_mex_get_double (A->n, pargin [1]) ;       /* get x */
+        y = cs_dl_mex_get_double (A->m, pargin [2]) ;       /* get y */
+        z = cs_dl_mex_put_double (A->m, y, &(pargout [0])) ;   /* z = y */
+        cs_dl_gaxpy (A, x, z) ;                             /* z = z + A*x */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_lsolve_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_lsolve_mex.c
index 0153d6a..7740692 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_lsolve_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_lsolve_mex.c
@@ -34,59 +34,59 @@ void mexFunction
     CS_INT top, nz, p, *xi, n ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_lsolve(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_lsolve(L,b)") ;
     }
     if (mxIsSparse (pargin [1]))
     {
-	cs_dl Lmatrix, Bmatrix, *L, *B, *X ;
-	double *x ;
-	if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
-	{
-	    mexErrMsgTxt ("sparse complex case not supported") ;
-	}
-	L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;/* get L */
-	n = L->n ;
-	B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
-	cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
-	xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;	    /* get workspace */
-	x  = cs_dl_malloc (n, sizeof (double)) ;
-	top = cs_dl_spsolve (L, B, 0, xi, x, NULL, 1) ;	    /* x = L\b */
-	X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;	    /* create sparse x*/
-	X->p [0] = 0 ;
-	nz = 0 ;
-	for (p = top ; p < n ; p++)
-	{
-	    X->i [nz] = xi [p] ;
-	    X->x [nz++] = x [xi [p]] ;
-	}
-	X->p [1] = nz ;
-	pargout [0] = cs_dl_mex_put_sparse (&X) ;
-	cs_free (x) ;
-	cs_free (xi) ;
+        cs_dl Lmatrix, Bmatrix, *L, *B, *X ;
+        double *x ;
+        if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
+        {
+            mexErrMsgTxt ("sparse complex case not supported") ;
+        }
+        L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;/* get L */
+        n = L->n ;
+        B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
+        cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
+        xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;          /* get workspace */
+        x  = cs_dl_malloc (n, sizeof (double)) ;
+        top = cs_dl_spsolve (L, B, 0, xi, x, NULL, 1) ;     /* x = L\b */
+        X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;     /* create sparse x*/
+        X->p [0] = 0 ;
+        nz = 0 ;
+        for (p = top ; p < n ; p++)
+        {
+            X->i [nz] = xi [p] ;
+            X->x [nz++] = x [xi [p]] ;
+        }
+        X->p [1] = nz ;
+        pargout [0] = cs_dl_mex_put_sparse (&X) ;
+        cs_free (x) ;
+        cs_free (xi) ;
     }
     else if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Lmatrix, *L ;
-	cs_complex_t *x ;
-	L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;	/* get L */
-	n = L->n ;
-	x = cs_cl_mex_get_double (n, pargin [1]) ;		/* x = b */
-	cs_cl_lsolve (L, x) ;					/* x = L\x */
-	cs_free (L->x) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;		/* return x */
+        cs_cl Lmatrix, *L ;
+        cs_complex_t *x ;
+        L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;    /* get L */
+        n = L->n ;
+        x = cs_cl_mex_get_double (n, pargin [1]) ;              /* x = b */
+        cs_cl_lsolve (L, x) ;                                   /* x = L\x */
+        cs_free (L->x) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;             /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Lmatrix, *L ;
-	double *x, *b ;
-	L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;	/* get L */
-	n = L->n ;
-	b = cs_dl_mex_get_double (n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_lsolve (L, x) ;					/* x = L\x */
+        cs_dl Lmatrix, *L ;
+        double *x, *b ;
+        L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ; /* get L */
+        n = L->n ;
+        b = cs_dl_mex_get_double (n, pargin [1]) ;              /* get b */
+        x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;       /* x = b */
+        cs_dl_lsolve (L, x) ;                                   /* x = L\x */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_ltsolve_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_ltsolve_mex.c
index 63d4141..ef299dd 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_ltsolve_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_ltsolve_mex.c
@@ -10,29 +10,29 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_ltsolve(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_ltsolve(L,b)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Lmatrix, *L ;
-	cs_complex_t *x ;
-	L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;	/* get L */
-	x = cs_cl_mex_get_double (L->n, pargin [1]) ;		/* x = b */
-	cs_cl_ltsolve (L, x) ;					/* x = L'\x */
-	cs_free (L->x) ;
-	pargout [0] = cs_cl_mex_put_double (L->n, x) ;		/* return x */
+        cs_cl Lmatrix, *L ;
+        cs_complex_t *x ;
+        L = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;    /* get L */
+        x = cs_cl_mex_get_double (L->n, pargin [1]) ;           /* x = b */
+        cs_cl_ltsolve (L, x) ;                                  /* x = L'\x */
+        cs_free (L->x) ;
+        pargout [0] = cs_cl_mex_put_double (L->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Lmatrix, *L ;
-	double *x, *b ;
-	L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;	/* get L */
-	b = cs_dl_mex_get_double (L->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (L->n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_ltsolve (L, x) ;					/* x = L'\x */
+        cs_dl Lmatrix, *L ;
+        double *x, *b ;
+        L = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ; /* get L */
+        b = cs_dl_mex_get_double (L->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (L->n, b, &(pargout [0])) ;    /* x = b */
+        cs_dl_ltsolve (L, x) ;                                  /* x = L'\x */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_lu_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_lu_mex.c
index 31a5a59..6a9d99a 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_lu_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_lu_mex.c
@@ -12,79 +12,79 @@ void mexFunction
     double tol ;
     if (nargout > 4 || nargin > 3 || nargin < 1)
     {
-	mexErrMsgTxt ("Usage: [L,U,p,q] = cs_lu (A,tol)") ;
+        mexErrMsgTxt ("Usage: [L,U,p,q] = cs_lu (A,tol)") ;
     }
-    if (nargin == 2)			    /* determine tol and ordering */
+    if (nargin == 2)                        /* determine tol and ordering */
     {
-	tol = mxGetScalar (pargin [1]) ;
-	order = (nargout == 4) ? 1 : 0 ;    /* amd (A+A'), or natural */
+        tol = mxGetScalar (pargin [1]) ;
+        order = (nargout == 4) ? 1 : 0 ;    /* amd (A+A'), or natural */
     }
     else
     {
-	tol = 1 ;
-	order = (nargout == 4) ? 2 : 0 ;    /* amd(S'*S) w/dense rows or I */
+        tol = 1 ;
+        order = (nargout == 4) ? 2 : 0 ;    /* amd(S'*S) w/dense rows or I */
     }
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cls *S ;
-	cs_cln *N ;
-	cs_cl Amatrix, *A, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_cl_sqr (order, A, 0) ;	    /* symbolic ordering, no QR bound */
-	N = cs_cl_lu (A, S, tol) ;	    /* numeric factorization */
-	if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
-	cs_cl_free (A->x) ;		    /* complex copy no longer needed */
-	cs_cl_dropzeros (N->L) ;	    /* drop zeros from L and sort it */
-	D = cs_cl_transpose (N->L, 1) ;
-	cs_cl_spfree (N->L) ;
-	N->L = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	cs_cl_dropzeros (N->U) ;	    /* drop zeros from U and sort it */
-	D = cs_cl_transpose (N->U, 1) ;
-	cs_cl_spfree (N->U) ;
-	N->U = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	p = cs_cl_pinv (N->pinv, n) ;			    /* p=pinv' */
-	pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;	    /* return L */
-	pargout [1] = cs_cl_mex_put_sparse (&(N->U)) ;	    /* return U */
-	pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;	    /* return p */
-	/* return Q */
-	if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
-	cs_cl_nfree (N) ;
-	cs_cl_sfree (S) ;
+        cs_cls *S ;
+        cs_cln *N ;
+        cs_cl Amatrix, *A, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        n = A->n ;
+        S = cs_cl_sqr (order, A, 0) ;       /* symbolic ordering, no QR bound */
+        N = cs_cl_lu (A, S, tol) ;          /* numeric factorization */
+        if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
+        cs_cl_free (A->x) ;                 /* complex copy no longer needed */
+        cs_cl_dropzeros (N->L) ;            /* drop zeros from L and sort it */
+        D = cs_cl_transpose (N->L, 1) ;
+        cs_cl_spfree (N->L) ;
+        N->L = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        cs_cl_dropzeros (N->U) ;            /* drop zeros from U and sort it */
+        D = cs_cl_transpose (N->U, 1) ;
+        cs_cl_spfree (N->U) ;
+        N->U = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        p = cs_cl_pinv (N->pinv, n) ;                       /* p=pinv' */
+        pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;      /* return L */
+        pargout [1] = cs_cl_mex_put_sparse (&(N->U)) ;      /* return U */
+        pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;      /* return p */
+        /* return Q */
+        if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
+        cs_cl_nfree (N) ;
+        cs_cl_sfree (S) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dls *S ;
-	cs_dln *N ;
-	cs_dl Amatrix, *A, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;	/* get A */
-	n = A->n ;
-	S = cs_dl_sqr (order, A, 0) ;	    /* symbolic ordering, no QR bound */
-	N = cs_dl_lu (A, S, tol) ;	    /* numeric factorization */
-	if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
-	cs_dl_dropzeros (N->L) ;	    /* drop zeros from L and sort it */
-	D = cs_dl_transpose (N->L, 1) ;
-	cs_dl_spfree (N->L) ;
-	N->L = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	cs_dl_dropzeros (N->U) ;	    /* drop zeros from U and sort it */
-	D = cs_dl_transpose (N->U, 1) ;
-	cs_dl_spfree (N->U) ;
-	N->U = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	p = cs_dl_pinv (N->pinv, n) ;			    /* p=pinv' */
-	pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;	    /* return L */
-	pargout [1] = cs_dl_mex_put_sparse (&(N->U)) ;	    /* return U */
-	pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;	    /* return p */
-	/* return Q */
-	if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
-	cs_dl_nfree (N) ;
-	cs_dl_sfree (S) ;
+        cs_dls *S ;
+        cs_dln *N ;
+        cs_dl Amatrix, *A, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ; /* get A */
+        n = A->n ;
+        S = cs_dl_sqr (order, A, 0) ;       /* symbolic ordering, no QR bound */
+        N = cs_dl_lu (A, S, tol) ;          /* numeric factorization */
+        if (!N) mexErrMsgTxt ("cs_lu failed (singular, or out of memory)") ;
+        cs_dl_dropzeros (N->L) ;            /* drop zeros from L and sort it */
+        D = cs_dl_transpose (N->L, 1) ;
+        cs_dl_spfree (N->L) ;
+        N->L = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        cs_dl_dropzeros (N->U) ;            /* drop zeros from U and sort it */
+        D = cs_dl_transpose (N->U, 1) ;
+        cs_dl_spfree (N->U) ;
+        N->U = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        p = cs_dl_pinv (N->pinv, n) ;                       /* p=pinv' */
+        pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;      /* return L */
+        pargout [1] = cs_dl_mex_put_sparse (&(N->U)) ;      /* return U */
+        pargout [2] = cs_dl_mex_put_int (p, n, 1, 1) ;      /* return p */
+        /* return Q */
+        if (nargout == 4) pargout [3] = cs_dl_mex_put_int (S->q, n, 1, 0) ;
+        cs_dl_nfree (N) ;
+        cs_dl_sfree (S) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_lusol_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_lusol_mex.c
index be34770..a758a51 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_lusol_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_lusol_mex.c
@@ -12,50 +12,50 @@ void mexFunction
     CS_INT order ;
     if (nargout > 1 || nargin < 2 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: x = cs_lusol(A,b,order,tol)") ;
+        mexErrMsgTxt ("Usage: x = cs_lusol(A,b,order,tol)") ;
     }
     order = (nargin < 3) ? 2 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
     order = CS_MIN (order, 3) ;
     if (nargin == 2)
     {
-	tol = 1 ;			    /* normal partial pivoting */
+        tol = 1 ;                           /* normal partial pivoting */
     }
     else if (nargin == 3)
     {
-	tol = (order == 1) ? 0.001 : 1 ;    /* tol = 0.001 for amd(A+A') */
+        tol = (order == 1) ? 0.001 : 1 ;    /* tol = 0.001 for amd(A+A') */
     }
     else
     {
-	tol = mxGetScalar (pargin [3]) ;
+        tol = mxGetScalar (pargin [3]) ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, Amatrix ;
-	cs_complex_t *x ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;	/* get A */
-	x = cs_cl_mex_get_double (A->n, pargin [1]) ;		/* x = b */
-	if (!cs_cl_lusol (order, A, x, tol))			/* x = A\x */
-	{
-	    mexErrMsgTxt ("failed (singular or out of memory)") ;
-	}
-	cs_cl_free (A->x) ;	/* complex copy no longer needed */
-	pargout [0] = cs_cl_mex_put_double (A->n, x) ;		/* return x */
+        cs_cl *A, Amatrix ;
+        cs_complex_t *x ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;    /* get A */
+        x = cs_cl_mex_get_double (A->n, pargin [1]) ;           /* x = b */
+        if (!cs_cl_lusol (order, A, x, tol))                    /* x = A\x */
+        {
+            mexErrMsgTxt ("failed (singular or out of memory)") ;
+        }
+        cs_cl_free (A->x) ;     /* complex copy no longer needed */
+        pargout [0] = cs_cl_mex_put_double (A->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, Amatrix ;
-	double *x, *b ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;    /* get A */
-	b = cs_dl_mex_get_double (A->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;	/* x = b */
-	if (!cs_dl_lusol (order, A, x, tol))			/* x = A\x */
-	{
-	    mexErrMsgTxt ("failed (singular or out of memory)") ;
-	}
+        cs_dl *A, Amatrix ;
+        double *x, *b ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;    /* get A */
+        b = cs_dl_mex_get_double (A->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (A->n, b, &(pargout [0])) ;    /* x = b */
+        if (!cs_dl_lusol (order, A, x, tol))                    /* x = A\x */
+        {
+            mexErrMsgTxt ("failed (singular or out of memory)") ;
+        }
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_make.m b/CXSparse_newfiles/MATLAB/CSparse/cs_make.m
index 982403a..de62cbe 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_make.m
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_make.m
@@ -44,8 +44,7 @@ function [objfiles, timestamp] = cs_make (f, docomplex)
 %
 %   See also MEX.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 if (nargin < 1)
     f = 0 ;
@@ -71,12 +70,13 @@ if (docomplex == 0)
     [objfiles, timestamp] = cs_make_helper (f, 0) ;
 else
     try
-	% try with complex support
-	[objfiles, timestamp] = cs_make_helper (f, 1) ;
-    catch
-	% oops - that failed, try without complex support
-	fprintf ('retrying without complex matrix support\n') ;
-	[objfiles, timestamp] = cs_make_helper (f, 0) ;
+        % try with complex support
+        [objfiles, timestamp] = cs_make_helper (f, 1) ;
+    catch me
+        % oops - that failed, try without complex support
+        disp (me.message)
+        fprintf ('retrying without complex matrix support\n') ;
+        [objfiles, timestamp] = cs_make_helper (f, 0) ;
     end
 end
 
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_mex.c
index 6b09a5f..9090c20 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_mex.c
@@ -7,26 +7,26 @@ void cs_mex_check (CS_INT nel, CS_INT m, CS_INT n, int square, int sparse,
 #ifdef NCOMPLEX
     if (values)
     {
-	if (mxIsComplex (A)) mexErrMsgTxt ("complex matrices not supported") ;
+        if (mxIsComplex (A)) mexErrMsgTxt ("complex matrices not supported") ;
     }
 #endif
     if (sparse && !mxIsSparse (A)) mexErrMsgTxt ("matrix must be sparse") ;
     if (!sparse)
     {
-	if (mxIsSparse (A)) mexErrMsgTxt ("matrix must be full") ;
-	if (values && !mxIsDouble (A)) mexErrMsgTxt ("matrix must be double") ;
+        if (mxIsSparse (A)) mexErrMsgTxt ("matrix must be full") ;
+        if (values && !mxIsDouble (A)) mexErrMsgTxt ("matrix must be double") ;
     }
     if (nel)
     {
-	/* check number of elements */
-	nnel = mxGetNumberOfElements (A) ;
-	if (m >= 0 && n >= 0 && m*n != nnel) mexErrMsgTxt ("wrong length") ;
+        /* check number of elements */
+        nnel = mxGetNumberOfElements (A) ;
+        if (m >= 0 && n >= 0 && m*n != nnel) mexErrMsgTxt ("wrong length") ;
     }
     else
     {
-	/* check row and/or column dimensions */
-	if (m >= 0 && m != mm) mexErrMsgTxt ("wrong dimension") ;
-	if (n >= 0 && n != nn) mexErrMsgTxt ("wrong dimension") ;
+        /* check row and/or column dimensions */
+        if (m >= 0 && m != mm) mexErrMsgTxt ("wrong dimension") ;
+        if (n >= 0 && n != nn) mexErrMsgTxt ("wrong dimension") ;
     }
     if (square && mm != nn) mexErrMsgTxt ("matrix must be square") ;
 }
@@ -64,7 +64,7 @@ mxArray *cs_dl_mex_put_sparse (cs_dl **Ahandle)
     mxSetJc (Amatlab, (void *) (A->p)) ; /* assign A->p pointer to MATLAB A */
     mxSetIr (Amatlab, (void *) (A->i)) ;
     mxSetPr (Amatlab, A->x) ;
-    cs_free (A) ;			/* frees A struct only, not A->p, etc */
+    cs_free (A) ;                       /* frees A struct only, not A->p, etc */
     *Ahandle = NULL ;
     return (Amatlab) ;
 }
@@ -81,9 +81,9 @@ double *cs_dl_mex_put_double (CS_INT n, const double *b, mxArray **X)
 {
     double *x ;
     CS_INT k ;
-    *X = mxCreateDoubleMatrix (n, 1, mxREAL) ;	    /* create x */
+    *X = mxCreateDoubleMatrix (n, 1, mxREAL) ;      /* create x */
     x = mxGetPr (*X) ;
-    for (k = 0 ; k < n ; k++) x [k] = b [k] ;	    /* copy x = b */
+    for (k = 0 ; k < n ; k++) x [k] = b [k] ;       /* copy x = b */
     return (x) ;
 }
 
@@ -96,16 +96,16 @@ CS_INT *cs_dl_mex_get_int (CS_INT n, const mxArray *Imatlab, CS_INT *imax,
     cs_mex_check (1, n, 1, 0, 0, 1, Imatlab) ;
     if (mxIsComplex (Imatlab))
     {
-	mexErrMsgTxt ("integer input cannot be complex") ;
+        mexErrMsgTxt ("integer input cannot be complex") ;
     }
     p = mxGetPr (Imatlab) ;
     *imax = 0 ;
     for (k = 0 ; k < n ; k++)
     {
-	i = p [k] ;
-	C [k] = i - 1 ;
-	if (i < lo) mexErrMsgTxt ("index out of bounds") ;
-	*imax = CS_MAX (*imax, i) ;
+        i = p [k] ;
+        C [k] = i - 1 ;
+        if (i < lo) mexErrMsgTxt ("index out of bounds") ;
+        *imax = CS_MAX (*imax, i) ;
     }
     return (C) ;
 }
@@ -135,7 +135,7 @@ static cs_complex_t *cs_cl_get_vector (CS_INT n, CS_INT size,
     Y = cs_dl_malloc (size, sizeof (cs_complex_t)) ;
     for (p = 0 ; p < n ; p++)
     {
-	Y [p] = X [p] + I * (Z ? Z [p] : 0) ;
+        Y [p] = X [p] + I * (Z ? Z [p] : 0) ;
     }
     return (Y) ;
 }
@@ -178,13 +178,13 @@ mxArray *cs_cl_mex_put_sparse (cs_cl **Ahandle)
     z = cs_dl_malloc (A->nzmax, sizeof (double)) ;
     for (k = 0 ; k < A->nzmax ; k++)
     {
-	x [k] = creal (A->x [k]) ;	/* copy and split numerical values */
-	z [k] = cimag (A->x [k]) ;
+        x [k] = creal (A->x [k]) ;      /* copy and split numerical values */
+        z [k] = cimag (A->x [k]) ;
     }
-    cs_cl_free (A->x) ;			/* free copy of complex values */
+    cs_cl_free (A->x) ;                 /* free copy of complex values */
     mxSetPr (Amatlab, x) ;
     mxSetPi (Amatlab, z) ;
-    cs_cl_free (A) ;			/* frees A struct only, not A->p, etc */
+    cs_cl_free (A) ;                    /* frees A struct only, not A->p, etc */
     *Ahandle = NULL ;
     return (Amatlab) ;
 }
@@ -207,8 +207,8 @@ mxArray *cs_cl_mex_put_double (CS_INT n, cs_complex_t *b)
     z = mxGetPi (X) ;
     for (k = 0 ; k < n ; k++)
     {
-	x [k] = creal (b [k]) ;	    /* copy x = b */
-	z [k] = cimag (b [k]) ;
+        x [k] = creal (b [k]) ;     /* copy x = b */
+        z [k] = cimag (b [k]) ;
     }
     cs_cl_free (b) ;
     return (X) ;
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_multiply_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_multiply_mex.c
index 63b712e..7dc8f20 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_multiply_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_multiply_mex.c
@@ -10,40 +10,40 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_multiply(A,B)") ;
+        mexErrMsgTxt ("Usage: C = cs_multiply(A,B)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl A1matrix, B1matrix, *A, *B, *C, *D, *A1, *B1 ;
-	A1 = cs_cl_mex_get_sparse (&A1matrix, 0, pargin [0]) ;
-	A = cs_cl_transpose (A1, 1) ;
-	cs_cl_free (A1->x) ;		/* complex copy no longer needed */
-	B1 = cs_cl_mex_get_sparse (&B1matrix, 0, pargin [1]) ;
-	B = cs_cl_transpose (B1, 1) ;
-	cs_cl_free (B1->x) ;		/* complex copy no longer needed */
-	D = cs_cl_multiply (B,A) ;		/* D = B'*A' */
-	cs_cl_spfree (A) ;
-	cs_cl_spfree (B) ;
-	cs_cl_dropzeros (D) ;			/* drop zeros from D */
-	C = cs_cl_transpose (D, 1) ;		/* C = D', so C is sorted */
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	/* return C */
+        cs_cl A1matrix, B1matrix, *A, *B, *C, *D, *A1, *B1 ;
+        A1 = cs_cl_mex_get_sparse (&A1matrix, 0, pargin [0]) ;
+        A = cs_cl_transpose (A1, 1) ;
+        cs_cl_free (A1->x) ;            /* complex copy no longer needed */
+        B1 = cs_cl_mex_get_sparse (&B1matrix, 0, pargin [1]) ;
+        B = cs_cl_transpose (B1, 1) ;
+        cs_cl_free (B1->x) ;            /* complex copy no longer needed */
+        D = cs_cl_multiply (B,A) ;              /* D = B'*A' */
+        cs_cl_spfree (A) ;
+        cs_cl_spfree (B) ;
+        cs_cl_dropzeros (D) ;                   /* drop zeros from D */
+        C = cs_cl_transpose (D, 1) ;            /* C = D', so C is sorted */
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;       /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
-	A = cs_dl_transpose (cs_dl_mex_get_sparse (&Amatrix, 0,1, pargin[0]),1);
-	B = cs_dl_transpose (cs_dl_mex_get_sparse (&Bmatrix, 0,1, pargin[1]),1);
-	D = cs_dl_multiply (B,A) ;		/* D = B'*A' */
-	cs_dl_spfree (A) ;
-	cs_dl_spfree (B) ;
-	cs_dl_dropzeros (D) ;			/* drop zeros from D */
-	C = cs_dl_transpose (D, 1) ;		/* C = D', so C is sorted */
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;	/* return C */
+        cs_dl Amatrix, Bmatrix, *A, *B, *C, *D ;
+        A = cs_dl_transpose (cs_dl_mex_get_sparse (&Amatrix, 0,1, pargin[0]),1);
+        B = cs_dl_transpose (cs_dl_mex_get_sparse (&Bmatrix, 0,1, pargin[1]),1);
+        D = cs_dl_multiply (B,A) ;              /* D = B'*A' */
+        cs_dl_spfree (A) ;
+        cs_dl_spfree (B) ;
+        cs_dl_dropzeros (D) ;                   /* drop zeros from D */
+        C = cs_dl_transpose (D, 1) ;            /* C = D', so C is sorted */
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;       /* return C */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_permute_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_permute_mex.c
index 1e6ad11..206bc94 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_permute_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_permute_mex.c
@@ -11,39 +11,39 @@ void mexFunction
     CS_INT ignore, *P, *Q, *Pinv, m, n ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: C = cs_permute(A,p,q)") ;
+        mexErrMsgTxt ("Usage: C = cs_permute(A,p,q)") ;
     }
     m = mxGetM (pargin [0]) ;
     n = mxGetN (pargin [0]) ;
-    P = cs_dl_mex_get_int (m, pargin [1], &ignore, 1) ;	/* get P */
-    Q = cs_dl_mex_get_int (n, pargin [2], &ignore, 1) ;	/* get Q */
-    Pinv = cs_pinv (P, m) ;		    /* P = Pinv' */
+    P = cs_dl_mex_get_int (m, pargin [1], &ignore, 1) ; /* get P */
+    Q = cs_dl_mex_get_int (n, pargin [2], &ignore, 1) ; /* get Q */
+    Pinv = cs_pinv (P, m) ;                 /* P = Pinv' */
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A, *C, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
-	C = cs_cl_permute (A, Pinv, Q, 1) ;	    /* C = A(p,q) */
-	cs_cl_free (A->x) ;
-	D = cs_cl_transpose (C, 1) ;	/* sort C via double transpose */
-	cs_cl_spfree (C) ;
-	C = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;	    /* return C */
+        cs_cl Amatrix, *A, *C, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        C = cs_cl_permute (A, Pinv, Q, 1) ;         /* C = A(p,q) */
+        cs_cl_free (A->x) ;
+        D = cs_cl_transpose (C, 1) ;    /* sort C via double transpose */
+        cs_cl_spfree (C) ;
+        C = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;           /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A, *C, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
-	C = cs_dl_permute (A, Pinv, Q, 1) ;	    /* C = A(p,q) */
-	D = cs_dl_transpose (C, 1) ;	/* sort C via double transpose */
-	cs_dl_spfree (C) ;
-	C = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;	    /* return C */
+        cs_dl Amatrix, *A, *C, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;    /* get A */
+        C = cs_dl_permute (A, Pinv, Q, 1) ;         /* C = A(p,q) */
+        D = cs_dl_transpose (C, 1) ;    /* sort C via double transpose */
+        cs_dl_spfree (C) ;
+        C = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;           /* return C */
     }
     cs_free (Pinv) ;
     cs_free (P) ;
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_print_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_print_mex.c
index 58864c2..ab0b302 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_print_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_print_mex.c
@@ -11,24 +11,24 @@ void mexFunction
     CS_INT brief ;
     if (nargout > 0 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: cs_print(A,brief)") ;
+        mexErrMsgTxt ("Usage: cs_print(A,brief)") ;
     }
     brief = (nargin < 2) ? 0 : mxGetScalar (pargin [1]) ;   /* get brief */
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
-	cs_cl_print (A, brief) ;			    /* print A */
-	cs_free (A->x) ;
+        cs_cl Amatrix, *A ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        cs_cl_print (A, brief) ;                            /* print A */
+        cs_free (A->x) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
-	cs_print (A, brief) ;				    /* print A */
+        cs_dl Amatrix, *A ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;/* get A */
+        cs_print (A, brief) ;                               /* print A */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_qr_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_qr_mex.c
index 9d31207..eb1682d 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_qr_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_qr_mex.c
@@ -11,73 +11,73 @@ void mexFunction
     CS_INT m, n, order, *p ;
     if (nargout > 5 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [V,beta,p,R,q] = cs_qr(A)") ;
+        mexErrMsgTxt ("Usage: [V,beta,p,R,q] = cs_qr(A)") ;
     }
-    order = (nargout == 5) ? 3 : 0 ;	    /* determine ordering */
+    order = (nargout == 5) ? 3 : 0 ;        /* determine ordering */
     m = mxGetM (pargin [0]) ;
     n = mxGetN (pargin [0]) ;
     if (m < n) mexErrMsgTxt ("A must have # rows >= # columns") ;
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cls *S ;
-	cs_cln *N ;
-	cs_cl Amatrix, *A, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	S = cs_cl_sqr (order, A, 1) ;	    /* symbolic QR ordering & analysis*/
-	N = cs_cl_qr (A, S) ;		    /* numeric QR factorization */
-	cs_free (A->x) ;
-	if (!N) mexErrMsgTxt ("qr failed") ;
-	cs_cl_dropzeros (N->L) ;	    /* drop zeros from V and sort */
-	D = cs_cl_transpose (N->L, 1) ;
-	cs_cl_spfree (N->L) ;
-	N->L = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	cs_cl_dropzeros (N->U) ;	    /* drop zeros from R and sort */
-	D = cs_cl_transpose (N->U, 1) ;
-	cs_cl_spfree (N->U) ;
-	N->U = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	m = N->L->m ;				    /* m may be larger now */
-	p = cs_cl_pinv (S->pinv, m) ;			/* p = pinv' */
-	pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;	/* return V */
-	cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
-	pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;	/* return p */
-	pargout [3] = cs_cl_mex_put_sparse (&(N->U)) ;	/* return R */
-	pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
-	cs_cl_nfree (N) ;
-	cs_cl_sfree (S) ;
+        cs_cls *S ;
+        cs_cln *N ;
+        cs_cl Amatrix, *A, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        S = cs_cl_sqr (order, A, 1) ;       /* symbolic QR ordering & analysis*/
+        N = cs_cl_qr (A, S) ;               /* numeric QR factorization */
+        cs_free (A->x) ;
+        if (!N) mexErrMsgTxt ("qr failed") ;
+        cs_cl_dropzeros (N->L) ;            /* drop zeros from V and sort */
+        D = cs_cl_transpose (N->L, 1) ;
+        cs_cl_spfree (N->L) ;
+        N->L = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        cs_cl_dropzeros (N->U) ;            /* drop zeros from R and sort */
+        D = cs_cl_transpose (N->U, 1) ;
+        cs_cl_spfree (N->U) ;
+        N->U = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        m = N->L->m ;                               /* m may be larger now */
+        p = cs_cl_pinv (S->pinv, m) ;                   /* p = pinv' */
+        pargout [0] = cs_cl_mex_put_sparse (&(N->L)) ;  /* return V */
+        cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
+        pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;  /* return p */
+        pargout [3] = cs_cl_mex_put_sparse (&(N->U)) ;  /* return R */
+        pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
+        cs_cl_nfree (N) ;
+        cs_cl_sfree (S) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dls *S ;
-	cs_dln *N ;
-	cs_dl Amatrix, *A, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
-	S = cs_dl_sqr (order, A, 1) ;	    /* symbolic QR ordering & analysis*/
-	N = cs_dl_qr (A, S) ;		    /* numeric QR factorization */
-	if (!N) mexErrMsgTxt ("qr failed") ;
-	cs_dl_dropzeros (N->L) ;	    /* drop zeros from V and sort */
-	D = cs_dl_transpose (N->L, 1) ;
-	cs_dl_spfree (N->L) ;
-	N->L = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	cs_dl_dropzeros (N->U) ;	    /* drop zeros from R and sort */
-	D = cs_dl_transpose (N->U, 1) ;
-	cs_dl_spfree (N->U) ;
-	N->U = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	m = N->L->m ;				    /* m may be larger now */
-	p = cs_dl_pinv (S->pinv, m) ;			/* p = pinv' */
-	pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;	/* return V */
-	cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
-	pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;	/* return p */
-	pargout [3] = cs_dl_mex_put_sparse (&(N->U)) ;	/* return R */
-	pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
-	cs_dl_nfree (N) ;
-	cs_dl_sfree (S) ;
+        cs_dls *S ;
+        cs_dln *N ;
+        cs_dl Amatrix, *A, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ; /* get A */
+        S = cs_dl_sqr (order, A, 1) ;       /* symbolic QR ordering & analysis*/
+        N = cs_dl_qr (A, S) ;               /* numeric QR factorization */
+        if (!N) mexErrMsgTxt ("qr failed") ;
+        cs_dl_dropzeros (N->L) ;            /* drop zeros from V and sort */
+        D = cs_dl_transpose (N->L, 1) ;
+        cs_dl_spfree (N->L) ;
+        N->L = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        cs_dl_dropzeros (N->U) ;            /* drop zeros from R and sort */
+        D = cs_dl_transpose (N->U, 1) ;
+        cs_dl_spfree (N->U) ;
+        N->U = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        m = N->L->m ;                               /* m may be larger now */
+        p = cs_dl_pinv (S->pinv, m) ;                   /* p = pinv' */
+        pargout [0] = cs_dl_mex_put_sparse (&(N->L)) ;  /* return V */
+        cs_dl_mex_put_double (n, N->B, &(pargout [1])) ;   /* return beta */
+        pargout [2] = cs_dl_mex_put_int (p, m, 1, 1) ;  /* return p */
+        pargout [3] = cs_dl_mex_put_sparse (&(N->U)) ;  /* return R */
+        pargout [4] = cs_dl_mex_put_int (S->q, n, 1, 0) ;  /* return q */
+        cs_dl_nfree (N) ;
+        cs_dl_sfree (S) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_qrsol_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_qrsol_mex.c
index 18af03d..bc5330a 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_qrsol_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_qrsol_mex.c
@@ -11,7 +11,7 @@ void mexFunction
     CS_INT k, order ;
     if (nargout > 1 || nargin < 2 || nargin > 3)
     {
-	mexErrMsgTxt ("Usage: x = cs_qrsol(A,b,order)") ;
+        mexErrMsgTxt ("Usage: x = cs_qrsol(A,b,order)") ;
     }
     order = (nargin < 3) ? 3 : mxGetScalar (pargin [2]) ;
     order = CS_MAX (order, 0) ;
@@ -20,35 +20,35 @@ void mexFunction
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, Amatrix ;
-	cs_complex_t *x, *b ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	b = cs_cl_mex_get_double (A->m, pargin [1]) ;		/* get b */
-	x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (cs_complex_t)) ;
-	for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;		/* x = b */
-	cs_free (b) ;
-	if (!cs_cl_qrsol (order, A, x))				/* x = A\x */
-	{
-	    mexErrMsgTxt ("QR solve failed") ;
-	}
-	pargout [0] = cs_cl_mex_put_double (A->n, x) ;		/* return x */
+        cs_cl *A, Amatrix ;
+        cs_complex_t *x, *b ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        b = cs_cl_mex_get_double (A->m, pargin [1]) ;           /* get b */
+        x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (cs_complex_t)) ;
+        for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;            /* x = b */
+        cs_free (b) ;
+        if (!cs_cl_qrsol (order, A, x))                         /* x = A\x */
+        {
+            mexErrMsgTxt ("QR solve failed") ;
+        }
+        pargout [0] = cs_cl_mex_put_double (A->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, Amatrix ;
-	double *x, *b ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	    /* get A */
-	b = cs_dl_mex_get_double (A->m, pargin [1]) ;		    /* get b */
-	x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (double)) ;   /* x = b */
-	for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;
-	if (!cs_dl_qrsol (order, A, x))				/* x = A\x */
-	{
-	    mexErrMsgTxt ("QR solve failed") ;
-	}
-	cs_dl_mex_put_double (A->n, x, &(pargout [0])) ;	/* return x */
-	cs_free (x) ;
+        cs_dl *A, Amatrix ;
+        double *x, *b ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;     /* get A */
+        b = cs_dl_mex_get_double (A->m, pargin [1]) ;               /* get b */
+        x = cs_dl_calloc (CS_MAX (A->m, A->n), sizeof (double)) ;   /* x = b */
+        for (k = 0 ; k < A->m ; k++) x [k] = b [k] ;
+        if (!cs_dl_qrsol (order, A, x))                         /* x = A\x */
+        {
+            mexErrMsgTxt ("QR solve failed") ;
+        }
+        cs_dl_mex_put_double (A->n, x, &(pargout [0])) ;        /* return x */
+        cs_free (x) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_randperm_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_randperm_mex.c
index 0398ede..1d534c6 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_randperm_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_randperm_mex.c
@@ -17,12 +17,12 @@ void mexFunction
     CS_INT iseed, n, *p ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: p = cs_randperm(n,seed)") ;
+        mexErrMsgTxt ("Usage: p = cs_randperm(n,seed)") ;
     }
     seed = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;
     iseed = (seed > 0 && seed < 1) ? (seed * RAND_MAX) : seed ;
     n = mxGetScalar (pargin [0]) ;
     n = CS_MAX (n, 0) ;
     p = cs_dl_randperm (n, iseed) ;
-    pargout [0] = cs_dl_mex_put_int (p, n, 1, 1) ;	    /* return p */
+    pargout [0] = cs_dl_mex_put_int (p, n, 1, 1) ;          /* return p */
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_scc_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_scc_mex.c
index 28ad3f2..568d440 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_scc_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_scc_mex.c
@@ -13,9 +13,9 @@ void mexFunction
     CS_INT n, j, *Ap2 ;
     if (nargout > 2 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [p,r] = cs_scc(A)") ;
+        mexErrMsgTxt ("Usage: [p,r] = cs_scc(A)") ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, 1, 0, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, 1, 0, pargin [0]) ;     /* get A */
     /* cs_scc modifies A->p and then restores it (in cs_dfs).  Avoid the issue
      * of a mexFunction modifying its input (even temporarily) by making a copy
      * of A->p.  This issue does not arise in cs_dmperm, because that function
@@ -24,9 +24,9 @@ void mexFunction
     Ap2 = cs_dl_malloc (n+1, sizeof (CS_INT)) ;
     for (j = 0 ; j <= n ; j++) Ap2 [j] = A->p [j] ;
     A->p = Ap2 ;
-    D = cs_dl_scc (A) ;					/* find conn. comp. */
-    pargout [0] = cs_dl_mex_put_int (D->p, n, 1, 0) ;		/* return p */
-    pargout [1] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;	/* return r */
+    D = cs_dl_scc (A) ;                                 /* find conn. comp. */
+    pargout [0] = cs_dl_mex_put_int (D->p, n, 1, 0) ;           /* return p */
+    pargout [1] = cs_dl_mex_put_int (D->r, D->nb+1, 1, 0) ;     /* return r */
     cs_dl_dfree (D) ;
-    cs_free (Ap2) ;	/* free the copy of A->p */
+    cs_free (Ap2) ;     /* free the copy of A->p */
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_sparse_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_sparse_mex.c
index 4c22b71..80d19d7 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_sparse_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_sparse_mex.c
@@ -10,49 +10,49 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: A = cs_sparse(i,j,x)") ;
+        mexErrMsgTxt ("Usage: A = cs_sparse(i,j,x)") ;
     }
     if (mxIsComplex (pargin [2]))
     {
 #ifndef NCOMPLEX
-	cs_cl *A, *C, *T, Tmatrix ;
-	T = &Tmatrix ;			/* get i,j,x and copy to triplet form */
-	T->nz = mxGetM (pargin [0]) ;
-	T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
-	T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
-	cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
-	T->x = cs_cl_mex_get_double (T->nz, pargin [2]) ;
-	T->nzmax = T->nz ;
-	C = cs_cl_compress (T) ;		/* create sparse matrix C */
-	cs_cl_dupl (C) ;			/* remove duplicates from C */
-	cs_cl_dropzeros (C) ;			/* remove zeros from C */
-	A = cs_cl_transpose (C, -1) ;		/* A=C.' */
-	cs_cl_spfree (C) ;
-	pargout [0] = cs_cl_mex_put_sparse (&A) ;	/* return A */
-	cs_free (T->p) ;
-	cs_free (T->i) ;
-	cs_free (T->x) ;			/* free copy of complex values*/
+        cs_cl *A, *C, *T, Tmatrix ;
+        T = &Tmatrix ;                  /* get i,j,x and copy to triplet form */
+        T->nz = mxGetM (pargin [0]) ;
+        T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
+        T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
+        cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
+        T->x = cs_cl_mex_get_double (T->nz, pargin [2]) ;
+        T->nzmax = T->nz ;
+        C = cs_cl_compress (T) ;                /* create sparse matrix C */
+        cs_cl_dupl (C) ;                        /* remove duplicates from C */
+        cs_cl_dropzeros (C) ;                   /* remove zeros from C */
+        A = cs_cl_transpose (C, -1) ;           /* A=C.' */
+        cs_cl_spfree (C) ;
+        pargout [0] = cs_cl_mex_put_sparse (&A) ;       /* return A */
+        cs_free (T->p) ;
+        cs_free (T->i) ;
+        cs_free (T->x) ;                        /* free copy of complex values*/
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl *A, *C, *T, Tmatrix ;
-	T = &Tmatrix ;			/* get i,j,x and copy to triplet form */
-	T->nz = mxGetM (pargin [0]) ;
-	T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
-	T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
-	cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
-	T->x = mxGetPr (pargin [2]) ;
-	T->nzmax = T->nz ;
-	C = cs_dl_compress (T) ;		/* create sparse matrix C */
-	cs_dl_dupl (C) ;			/* remove duplicates from C */
-	cs_dl_dropzeros (C) ;			/* remove zeros from C */
-	A = cs_dl_transpose (C, 1) ;		/* A=C' */
-	cs_dl_spfree (C) ;
-	pargout [0] = cs_dl_mex_put_sparse (&A) ;	/* return A */
-	cs_free (T->p) ;
-	cs_free (T->i) ;
+        cs_dl *A, *C, *T, Tmatrix ;
+        T = &Tmatrix ;                  /* get i,j,x and copy to triplet form */
+        T->nz = mxGetM (pargin [0]) ;
+        T->p = cs_dl_mex_get_int (T->nz, pargin [0], &(T->n), 1) ;
+        T->i = cs_dl_mex_get_int (T->nz, pargin [1], &(T->m), 1) ;
+        cs_mex_check (1, T->nz, 1, 0, 0, 1, pargin [2]) ;
+        T->x = mxGetPr (pargin [2]) ;
+        T->nzmax = T->nz ;
+        C = cs_dl_compress (T) ;                /* create sparse matrix C */
+        cs_dl_dupl (C) ;                        /* remove duplicates from C */
+        cs_dl_dropzeros (C) ;                   /* remove zeros from C */
+        A = cs_dl_transpose (C, 1) ;            /* A=C' */
+        cs_dl_spfree (C) ;
+        pargout [0] = cs_dl_mex_put_sparse (&A) ;       /* return A */
+        cs_free (T->p) ;
+        cs_free (T->i) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_sqr_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_sqr_mex.c
index 6c6f75f..3f0364b 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_sqr_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_sqr_mex.c
@@ -14,27 +14,27 @@ void mexFunction
     CS_INT m, n, order, *p ;
     if (nargout > 7 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A)") ;
+        mexErrMsgTxt ("Usage: [vnz,rnz,parent,c,leftmost,p,q] = cs_sqr(A)") ;
     }
-    A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
+    A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;     /* get A */
     m = A->m ;
     n = A->n ;
     if (m < n) mexErrMsgTxt ("A must have # rows >= # columns") ;
-    order = (nargout == 7) ? 3 : 0 ;	    /* determine ordering */
-    S = cs_dl_sqr (order, A, 1) ;	    /* symbolic QR ordering & analysis*/
+    order = (nargout == 7) ? 3 : 0 ;        /* determine ordering */
+    S = cs_dl_sqr (order, A, 1) ;           /* symbolic QR ordering & analysis*/
     if (!S) mexErrMsgTxt ("cs_sqr failed") ;
     s = S->lnz ;
-    cs_dl_mex_put_double (1, &s, &(pargout [0])) ;	    /* return nnz(V) */
+    cs_dl_mex_put_double (1, &s, &(pargout [0])) ;          /* return nnz(V) */
     s = S->unz ;
-    cs_dl_mex_put_double (1, &s, &(pargout [1])) ;	    /* return nnz(R) */
+    cs_dl_mex_put_double (1, &s, &(pargout [1])) ;          /* return nnz(R) */
     pargout [2] = cs_dl_mex_put_int (S->parent, n, 1, 0) ;  /* return parent */
-    pargout [3] = cs_dl_mex_put_int (S->cp, n, 0, 0) ;	    /* return c */
+    pargout [3] = cs_dl_mex_put_int (S->cp, n, 0, 0) ;      /* return c */
     pargout [4] = cs_dl_mex_put_int (S->leftmost, m, 1, 0) ;/* return leftmost*/
-    p = cs_dl_pinv (S->pinv, S->m2) ;			    /* p = pinv' */
-    pargout [5] = cs_dl_mex_put_int (p, S->m2, 1, 1) ;	    /* return p */
+    p = cs_dl_pinv (S->pinv, S->m2) ;                       /* p = pinv' */
+    pargout [5] = cs_dl_mex_put_int (p, S->m2, 1, 1) ;      /* return p */
     if (nargout > 6)
     {
-	pargout [6] = cs_dl_mex_put_int (S->q, n, 1, 0) ;   /* return q */
+        pargout [6] = cs_dl_mex_put_int (S->q, n, 1, 0) ;   /* return q */
     }
     cs_dl_sfree (S) ;
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_symperm_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_symperm_mex.c
index d6c90b5..62b06e0 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_symperm_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_symperm_mex.c
@@ -11,42 +11,42 @@ void mexFunction
     CS_INT ignore, n, *P, *Pinv ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_symperm(A,p)") ;
+        mexErrMsgTxt ("Usage: C = cs_symperm(A,p)") ;
     }
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A, *C, *D ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;
-	n = A->n ;
-	P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;	/* get P */
-	Pinv = cs_cl_pinv (P, n) ;				/* P=Pinv' */
-	C = cs_cl_symperm (A, Pinv, 1) ;			/* C = A(p,p) */
-	D = cs_cl_transpose (C, 1) ;				/* sort C */
-	cs_cl_spfree (C) ;
-	C = cs_cl_transpose (D, 1) ;
-	cs_cl_spfree (D) ;
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;		/* return C */
-	cs_free (P) ;
-	cs_free (Pinv) ;
+        cs_cl Amatrix, *A, *C, *D ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 1, pargin [0]) ;
+        n = A->n ;
+        P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;     /* get P */
+        Pinv = cs_cl_pinv (P, n) ;                              /* P=Pinv' */
+        C = cs_cl_symperm (A, Pinv, 1) ;                        /* C = A(p,p) */
+        D = cs_cl_transpose (C, 1) ;                            /* sort C */
+        cs_cl_spfree (C) ;
+        C = cs_cl_transpose (D, 1) ;
+        cs_cl_spfree (D) ;
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;               /* return C */
+        cs_free (P) ;
+        cs_free (Pinv) ;
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A, *C, *D ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;
-	n = A->n ;
-	P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;	/* get P */
-	Pinv = cs_dl_pinv (P, n) ;				/* P=Pinv' */
-	C = cs_dl_symperm (A, Pinv, 1) ;			/* C = A(p,p) */
-	D = cs_dl_transpose (C, 1) ;				/* sort C */
-	cs_dl_spfree (C) ;
-	C = cs_dl_transpose (D, 1) ;
-	cs_dl_spfree (D) ;
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;		/* return C */
-	cs_free (P) ;
-	cs_free (Pinv) ;
+        cs_dl Amatrix, *A, *C, *D ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 1, 1, pargin [0]) ;
+        n = A->n ;
+        P = cs_dl_mex_get_int (n, pargin [1], &ignore, 1) ;     /* get P */
+        Pinv = cs_dl_pinv (P, n) ;                              /* P=Pinv' */
+        C = cs_dl_symperm (A, Pinv, 1) ;                        /* C = A(p,p) */
+        D = cs_dl_transpose (C, 1) ;                            /* sort C */
+        cs_dl_spfree (C) ;
+        C = cs_dl_transpose (D, 1) ;
+        cs_dl_spfree (D) ;
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;               /* return C */
+        cs_free (P) ;
+        cs_free (Pinv) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_thumb_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_thumb_mex.c
index f1ce68b..f453eb5 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_thumb_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_thumb_mex.c
@@ -22,7 +22,7 @@ void mexFunction
     double aij, ax, az, *S, *Ax, *Az ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: S = cs_thumb(A,k)") ;
+        mexErrMsgTxt ("Usage: S = cs_thumb(A,k)") ;
     }
     cs_mex_check (0, -1, -1, 0, 1, 1, pargin [0]) ;
     m = mxGetM (pargin [0]) ;
@@ -42,24 +42,24 @@ void mexFunction
     Az = (mxIsComplex (pargin [0])) ? mxGetPi (pargin [0]) : NULL ;
     for (j = 0 ; j < n ; j++)
     {
-	sj = j/s ;
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    si = Ai [p] / s ;
-	    ij = INDEX (si,sj,m2) ;
-	    ax = Ax [p] ;
-	    az = Az ? Az [p] : 0 ;
-	    if (az == 0)
-	    {
-		aij = fabs (ax) ;
-	    }
-	    else
-	    {
-		aij = sqrt (ax*ax + az*az) ;
-	    }
-	    if (ISNAN (aij)) aij = BIG_VALUE ;
-	    aij = CS_MIN (BIG_VALUE, aij) ;
-	    S [ij] = CS_MAX (S [ij], aij) ;
-	}
+        sj = j/s ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            si = Ai [p] / s ;
+            ij = INDEX (si,sj,m2) ;
+            ax = Ax [p] ;
+            az = Az ? Az [p] : 0 ;
+            if (az == 0)
+            {
+                aij = fabs (ax) ;
+            }
+            else
+            {
+                aij = sqrt (ax*ax + az*az) ;
+            }
+            if (ISNAN (aij)) aij = BIG_VALUE ;
+            aij = CS_MIN (BIG_VALUE, aij) ;
+            S [ij] = CS_MAX (S [ij], aij) ;
+        }
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_transpose.m b/CXSparse_newfiles/MATLAB/CSparse/cs_transpose.m
index d94ae6c..f47cbf3 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_transpose.m
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_transpose.m
@@ -1,4 +1,4 @@
-function C = cs_transpose (A)						    %#ok
+function C = cs_transpose (A)                                               %#ok
 %CS_TRANSPOSE transpose a sparse matrix.
 %   C = cs_transpose(A), computes C = A'
 %   C = cs_transpose(A,-1) computes C=A.'
@@ -11,8 +11,7 @@ function C = cs_transpose (A)						    %#ok
 %
 %   See also TRANSPOSE, CTRANSPOSE.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 error ('cs_transpose mexFunction not found') ;
 
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_transpose_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_transpose_mex.c
index c36803a..8688c4f 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_transpose_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_transpose_mex.c
@@ -12,26 +12,26 @@ void mexFunction
     CS_INT values ;
     if (nargout > 1 || nargin < 1 || nargin > 2)
     {
-	mexErrMsgTxt ("Usage: C = cs_transpose(A,kind)") ;
+        mexErrMsgTxt ("Usage: C = cs_transpose(A,kind)") ;
     }
     values = (nargin > 1) ? mxGetScalar (pargin [1]) : 1 ;
     values = (values <= 0) ? -1 : 1 ;
     if (mxIsComplex (pargin [0]))
     {
 #ifndef NCOMPLEX
-	cs_cl Amatrix, *A, *C ;
-	A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;	/* get A */
-	C = cs_cl_transpose (A, values) ;			/* C = A' */
-	pargout [0] = cs_cl_mex_put_sparse (&C) ;		/* return C */
+        cs_cl Amatrix, *A, *C ;
+        A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ;    /* get A */
+        C = cs_cl_transpose (A, values) ;                       /* C = A' */
+        pargout [0] = cs_cl_mex_put_sparse (&C) ;               /* return C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Amatrix, *A, *C ;
-	A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ;	/* get A */
-	C = cs_dl_transpose (A, values) ;			/* C = A' */
-	pargout [0] = cs_dl_mex_put_sparse (&C) ;		/* return C */
+        cs_dl Amatrix, *A, *C ;
+        A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ; /* get A */
+        C = cs_dl_transpose (A, values) ;                       /* C = A' */
+        pargout [0] = cs_dl_mex_put_sparse (&C) ;               /* return C */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_updown_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_updown_mex.c
index c42769b..e9f058e 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_updown_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_updown_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     char sigma_string [20] ;
     if (nargout > 1 || nargin < 3 || nargin > 4)
     {
-	mexErrMsgTxt ("Usage: L = cs_updown(L,C,parent,sigma)") ;
+        mexErrMsgTxt ("Usage: L = cs_updown(L,C,parent,sigma)") ;
     }
     if (nargin > 3 && mxIsChar (pargin [3]))
     {
-	mxGetString (pargin [3], sigma_string, 8) ;
-	sigma = (sigma_string [0] == '-') ? (-1) : 1 ;
+        mxGetString (pargin [3], sigma_string, 8) ;
+        sigma = (sigma_string [0] == '-') ? (-1) : 1 ;
     }
     n = mxGetN (pargin [0]) ;
     parent = cs_dl_mex_get_int (n, pargin [2], &ignore, 0) ; /* get parent*/
@@ -26,83 +26,83 @@ void mexFunction
     {
 
 #ifndef NCOMPLEX
-	cs_cl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
-	/* get input L, and copy MATLAB complex to C complex type */
-	Lin = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;
+        cs_cl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
+        /* get input L, and copy MATLAB complex to C complex type */
+        Lin = cs_cl_mex_get_sparse (&Lmatrix, 1, pargin [0]) ;
 
-	/* make a copy of L (this can take more work than updating L itself) */
-	lnz = Lin->p [n] ;
-	L = cs_cl_spalloc (n, n, lnz, 0, 0) ;
-	for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
-	for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
+        /* make a copy of L (this can take more work than updating L itself) */
+        lnz = Lin->p [n] ;
+        L = cs_cl_spalloc (n, n, lnz, 0, 0) ;
+        for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
+        for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
 
-	/* complex values already copied into Lin->x, use shallow copy for L */
-	L->x = Lin->x ;
+        /* complex values already copied into Lin->x, use shallow copy for L */
+        L->x = Lin->x ;
 
-	cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;	   /* get C */
-	C = cs_cl_mex_get_sparse (&Cmatrix, 0, pargin [1]) ;
+        cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;     /* get C */
+        C = cs_cl_mex_get_sparse (&Cmatrix, 0, pargin [1]) ;
 
-	/* do the update one column at a time */
-	Cvec = &Cvector ;
-	Cvec->m = n ;
-	Cvec->n = 1 ;
-	Cvec->p = cp ;
-	Cvec->nz = -1 ;
-	cp [0] = 0 ;
-	for (k = 0 ; k < C->n ; k++)
-	{
-	    /* extract C(:,k) */ 
-	    cp [1] = C->p [k+1] - C->p [k] ;
-	    Cvec->nzmax = cp [1] ;
-	    Cvec->i = C->i + C->p [k] ;
-	    Cvec->x = C->x + C->p [k] ;
-	    /* update/downdate */
-	    ok = cs_cl_updown (L, sigma, Cvec, parent) ;
-	    if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
-	}
-	/* return new L */ 
-	pargout [0] = cs_cl_mex_put_sparse (&L) ;
+        /* do the update one column at a time */
+        Cvec = &Cvector ;
+        Cvec->m = n ;
+        Cvec->n = 1 ;
+        Cvec->p = cp ;
+        Cvec->nz = -1 ;
+        cp [0] = 0 ;
+        for (k = 0 ; k < C->n ; k++)
+        {
+            /* extract C(:,k) */ 
+            cp [1] = C->p [k+1] - C->p [k] ;
+            Cvec->nzmax = cp [1] ;
+            Cvec->i = C->i + C->p [k] ;
+            Cvec->x = C->x + C->p [k] ;
+            /* update/downdate */
+            ok = cs_cl_updown (L, sigma, Cvec, parent) ;
+            if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
+        }
+        /* return new L */ 
+        pargout [0] = cs_cl_mex_put_sparse (&L) ;
 
-	cs_free (C->x) ;	/* free complex copy of C */
+        cs_free (C->x) ;        /* free complex copy of C */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
 
     }
     else
     {
 
-	cs_dl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
-	/* get input L */
-	Lin = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;
-	/* make a copy of L (this can take more work than updating L itself) */
-	lnz = Lin->p [n] ;
-	L = cs_dl_spalloc (n, n, lnz, 1, 0) ;
-	for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
-	for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
-	for (k = 0 ; k < lnz ; k++) L->x [k] = Lin->x [k] ;
-	cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;	   /* get C */
-	C = cs_dl_mex_get_sparse (&Cmatrix, 0, 1, pargin [1]) ;
+        cs_dl Lmatrix, *Lin, Cmatrix, *C, *L, Cvector, *Cvec ;
+        /* get input L */
+        Lin = cs_dl_mex_get_sparse (&Lmatrix, 1, 1, pargin [0]) ;
+        /* make a copy of L (this can take more work than updating L itself) */
+        lnz = Lin->p [n] ;
+        L = cs_dl_spalloc (n, n, lnz, 1, 0) ;
+        for (j = 0 ; j <= n ; j++) L->p [j] = Lin->p [j] ;
+        for (k = 0 ; k < lnz ; k++) L->i [k] = Lin->i [k] ;
+        for (k = 0 ; k < lnz ; k++) L->x [k] = Lin->x [k] ;
+        cs_mex_check (0, n, -1, 0, 1, 1, pargin [1]) ;     /* get C */
+        C = cs_dl_mex_get_sparse (&Cmatrix, 0, 1, pargin [1]) ;
 
-	/* do the update one column at a time */
-	Cvec = &Cvector ;
-	Cvec->m = n ;
-	Cvec->n = 1 ;
-	Cvec->p = cp ;
-	Cvec->nz = -1 ;
-	cp [0] = 0 ;
-	for (k = 0 ; k < C->n ; k++)
-	{
-	    /* extract C(:,k) */ 
-	    cp [1] = C->p [k+1] - C->p [k] ;
-	    Cvec->nzmax = cp [1] ;
-	    Cvec->i = C->i + C->p [k] ;
-	    Cvec->x = C->x + C->p [k] ;
-	    /* update/downdate */
-	    ok = cs_dl_updown (L, sigma, Cvec, parent) ;
-	    if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
-	}
-	/* return new L */ 
-	pargout [0] = cs_dl_mex_put_sparse (&L) ;
+        /* do the update one column at a time */
+        Cvec = &Cvector ;
+        Cvec->m = n ;
+        Cvec->n = 1 ;
+        Cvec->p = cp ;
+        Cvec->nz = -1 ;
+        cp [0] = 0 ;
+        for (k = 0 ; k < C->n ; k++)
+        {
+            /* extract C(:,k) */ 
+            cp [1] = C->p [k+1] - C->p [k] ;
+            Cvec->nzmax = cp [1] ;
+            Cvec->i = C->i + C->p [k] ;
+            Cvec->x = C->x + C->p [k] ;
+            /* update/downdate */
+            ok = cs_dl_updown (L, sigma, Cvec, parent) ;
+            if (!ok) mexErrMsgTxt ("matrix is not positive definite") ;
+        }
+        /* return new L */ 
+        pargout [0] = cs_dl_mex_put_sparse (&L) ;
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_usolve_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_usolve_mex.c
index b1bb32c..4f297e6 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_usolve_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_usolve_mex.c
@@ -34,59 +34,59 @@ void mexFunction
     CS_INT top, nz, p, *xi, n ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_usolve(U,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_usolve(U,b)") ;
     }
     if (mxIsSparse (pargin [1]))
     {
-	cs_dl Umatrix, Bmatrix, *U, *B, *X ;
-	double *x ;
-	if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
-	{
-	    mexErrMsgTxt ("sparse complex case not supported") ;
-	}
-	U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;/* get U */
-	n = U->n ;
-	B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
-	cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
-	xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;	    /* get workspace */
-	x  = cs_dl_malloc (n, sizeof (double)) ;
-	top = cs_dl_spsolve (U, B, 0, xi, x, NULL, 0) ;	    /* x = U\b */
-	X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;	    /* create sparse x*/
-	X->p [0] = 0 ;
-	nz = 0 ;
-	for (p = top ; p < n ; p++)
-	{
-	    X->i [nz] = xi [p] ;
-	    X->x [nz++] = x [xi [p]] ;
-	}
-	X->p [1] = nz ;
-	pargout [0] = cs_dl_mex_put_sparse (&X) ;
-	cs_free (x) ;
-	cs_free (xi) ;
+        cs_dl Umatrix, Bmatrix, *U, *B, *X ;
+        double *x ;
+        if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
+        {
+            mexErrMsgTxt ("sparse complex case not supported") ;
+        }
+        U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;/* get U */
+        n = U->n ;
+        B = cs_dl_mex_get_sparse (&Bmatrix, 0, 1, pargin [1]) ;/* get sparse b*/
+        cs_mex_check (0, n, 1, 0, 1, 1, pargin [1]) ;
+        xi = cs_dl_malloc (2*n, sizeof (CS_INT)) ;          /* get workspace */
+        x  = cs_dl_malloc (n, sizeof (double)) ;
+        top = cs_dl_spsolve (U, B, 0, xi, x, NULL, 0) ;     /* x = U\b */
+        X = cs_dl_spalloc (n, 1, n-top, 1, 0) ;     /* create sparse x*/
+        X->p [0] = 0 ;
+        nz = 0 ;
+        for (p = top ; p < n ; p++)
+        {
+            X->i [nz] = xi [p] ;
+            X->x [nz++] = x [xi [p]] ;
+        }
+        X->p [1] = nz ;
+        pargout [0] = cs_dl_mex_put_sparse (&X) ;
+        cs_free (x) ;
+        cs_free (xi) ;
     }
     else if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Umatrix, *U ;
-	cs_complex_t *x ;
-	U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;	/* get U */
-	n = U->n ;
-	x = cs_cl_mex_get_double (n, pargin [1]) ;		/* x = b */
-	cs_cl_usolve (U, x) ;					/* x = U\x */
-	cs_free (U->x) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;		/* return x */
+        cs_cl Umatrix, *U ;
+        cs_complex_t *x ;
+        U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;    /* get U */
+        n = U->n ;
+        x = cs_cl_mex_get_double (n, pargin [1]) ;              /* x = b */
+        cs_cl_usolve (U, x) ;                                   /* x = U\x */
+        cs_free (U->x) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;             /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Umatrix, *U ;
-	double *x, *b ;
-	U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;	/* get U */
-	n = U->n ;
-	b = cs_dl_mex_get_double (n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_usolve (U, x) ;					/* x = U\x */
+        cs_dl Umatrix, *U ;
+        double *x, *b ;
+        U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ; /* get U */
+        n = U->n ;
+        b = cs_dl_mex_get_double (n, pargin [1]) ;              /* get b */
+        x = cs_dl_mex_put_double (n, b, &(pargout [0])) ;       /* x = b */
+        cs_dl_usolve (U, x) ;                                   /* x = U\x */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/cs_utsolve_mex.c b/CXSparse_newfiles/MATLAB/CSparse/cs_utsolve_mex.c
index f4913bd..d5018ff 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/cs_utsolve_mex.c
+++ b/CXSparse_newfiles/MATLAB/CSparse/cs_utsolve_mex.c
@@ -10,29 +10,29 @@ void mexFunction
 {
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_utsolve(U,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_utsolve(U,b)") ;
     }
     if (mxIsComplex (pargin [0]) || mxIsComplex (pargin [1]))
     {
 #ifndef NCOMPLEX
-	cs_cl Umatrix, *U ;
-	cs_complex_t *x ;
-	U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;	/* get U */
-	x = cs_cl_mex_get_double (U->n, pargin [1]) ;		/* x = b */
-	cs_cl_utsolve (U, x) ;					/* x = U'\x */
-	cs_free (U->x) ;
-	pargout [0] = cs_cl_mex_put_double (U->n, x) ;		/* return x */
+        cs_cl Umatrix, *U ;
+        cs_complex_t *x ;
+        U = cs_cl_mex_get_sparse (&Umatrix, 1, pargin [0]) ;    /* get U */
+        x = cs_cl_mex_get_double (U->n, pargin [1]) ;           /* x = b */
+        cs_cl_utsolve (U, x) ;                                  /* x = U'\x */
+        cs_free (U->x) ;
+        pargout [0] = cs_cl_mex_put_double (U->n, x) ;          /* return x */
 #else
-	mexErrMsgTxt ("complex matrices not supported") ;
+        mexErrMsgTxt ("complex matrices not supported") ;
 #endif
     }
     else
     {
-	cs_dl Umatrix, *U ;
-	double *x, *b ;
-	U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ;	/* get U */
-	b = cs_dl_mex_get_double (U->n, pargin [1]) ;		/* get b */
-	x = cs_dl_mex_put_double (U->n, b, &(pargout [0])) ;	/* x = b */
-	cs_dl_utsolve (U, x) ;					/* x = U'\x */
+        cs_dl Umatrix, *U ;
+        double *x, *b ;
+        U = cs_dl_mex_get_sparse (&Umatrix, 1, 1, pargin [0]) ; /* get U */
+        b = cs_dl_mex_get_double (U->n, pargin [1]) ;           /* get b */
+        x = cs_dl_mex_put_double (U->n, b, &(pargout [0])) ;    /* x = b */
+        cs_dl_utsolve (U, x) ;                                  /* x = U'\x */
     }
 }
diff --git a/CXSparse_newfiles/MATLAB/CSparse/private/cs_make_helper.m b/CXSparse_newfiles/MATLAB/CSparse/private/cs_make_helper.m
index 99a9c35..3d30086 100644
--- a/CXSparse_newfiles/MATLAB/CSparse/private/cs_make_helper.m
+++ b/CXSparse_newfiles/MATLAB/CSparse/private/cs_make_helper.m
@@ -41,14 +41,18 @@ function [objfiles, timestamp_out] = cs_make_helper (f, docomplex)
 %
 %   See also MEX.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-mexcmd = 'mex -DCS_LONG -I../../../UFconfig' ;
+mexcmd = 'mex -DCS_LONG -I../../../SuiteSparse_config' ;
 if (~isempty (strfind (computer, '64')))
     mexcmd = [mexcmd ' -largeArrayDims'] ;
 end
 
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    mexcmd = [mexcmd ' -silent'] ;
+end
+
 if (nargin < 2)
     docomplex = 1 ;
 end
@@ -71,7 +75,7 @@ cs = { 'cs_add', 'cs_amd', 'cs_chol', 'cs_cholsol', 'cs_counts', ...
     'cs_leaf', 'cs_randperm' } ;
     % add cs_mynewfunc to the above list
 
-details = 1 ;
+details = 0 ;
 kk = 0 ;
 csm = { } ;
 if (nargin == 0)
@@ -82,21 +86,21 @@ elseif (ischar (f))
     csm = {f} ;
 else
     force = f ;
-    details = details | (force > 1) ;					    %#ok
-    if (force & details)						    %#ok
-	fprintf ('cs_make: re-compiling everything\n') ;
+    details = details | (force > 1) ;                                       %#ok
+    if (force & details)                                                    %#ok
+        fprintf ('cs_make: re-compiling everything\n') ;
     end
 end
 
 if (isempty (csm))
     % mexFunctions, of the form cs_add_mex.c, etc, in this directory
     csm = { 'cs_add', 'cs_amd', 'cs_chol', 'cs_cholsol', 'cs_counts', ...
-	'cs_dmperm', 'cs_droptol', 'cs_etree', 'cs_gaxpy', 'cs_lsolve', ...
-	'cs_ltsolve', 'cs_lu', 'cs_lusol', 'cs_multiply', 'cs_permute', ...
-	'cs_print', 'cs_qr', 'cs_qrsol', 'cs_scc', 'cs_symperm', 'cs_thumb', ...
-	'cs_transpose', 'cs_sparse', 'cs_updown', 'cs_usolve', ...
-	'cs_utsolve', 'cs_randperm', 'cs_sqr' } ;
-	% add cs_mynewfunc to the above list
+        'cs_dmperm', 'cs_droptol', 'cs_etree', 'cs_gaxpy', 'cs_lsolve', ...
+        'cs_ltsolve', 'cs_lu', 'cs_lusol', 'cs_multiply', 'cs_permute', ...
+        'cs_print', 'cs_qr', 'cs_qrsol', 'cs_scc', 'cs_symperm', 'cs_thumb', ...
+        'cs_transpose', 'cs_sparse', 'cs_updown', 'cs_usolve', ...
+        'cs_utsolve', 'cs_randperm', 'cs_sqr' } ;
+        % add cs_mynewfunc to the above list
 end
 
 
@@ -122,36 +126,36 @@ hfile = '../../Include/cs.h' ;
     mexcmd, kk, details) ;
 CS = ['cs_mex' obj] ;
 if (nargout > 0)
-    objfiles = ['..' filesep 'CSparse' filesep 'cs_mex' obj] ;
+    objfiles = ['../CSparse/cs_mex' obj] ;
 end
 for i = 1:length (cs)
 
     [s t kk] = compile_source (srcdir, cs{i}, obj, hfile, force, mexcmd, ...
-	kk, details) ;
+        kk, details) ;
     timestamp = max (timestamp, t) ;
-    anysrc = anysrc | s ;						    %#ok
-    CS = [CS ' ' cs{i} obj] ;						    %#ok
+    anysrc = anysrc | s ;                                                   %#ok
+    CS = [CS ' ' cs{i} obj] ;                                               %#ok
     if (nargout > 0)
-	objfiles = [objfiles ' ..' filesep 'CSparse' filesep cs{i} obj] ;   %#ok
+        objfiles = [objfiles ' ../CSparse/' cs{i} obj] ;   %#ok
     end
 
     % complex version:
     if (docomplex)
-	csrc = cs {i} ;
-	csrc = [ 'cs_cl_' csrc(4:end) ] ;
-	CS = [CS ' ' csrc obj] ;	    %#ok
-	if (nargout > 0)
-	    objfiles = [objfiles ' ..' filesep 'CSparse' filesep csrc obj] ;%#ok
-	end
-	if (s)
-	    copyfile (['../../Source/' cs{i} '.c'], [csrc '.c'], 'f') ;
-	    if (details)
-		fprintf ('%s\n', ['cp -f ../../Source/' cs{i} '.c ' csrc '.c']);
-	    end
-	    cmd = sprintf ('%s -DCS_COMPLEX -O -c -I../../Include %s.c\n', ...
-		mexcmd, csrc) ;
-	    kk = do_cmd (cmd, kk, details) ;
-	end
+        csrc = cs {i} ;
+        csrc = [ 'cs_cl_' csrc(4:end) ] ;
+        CS = [CS ' ' csrc obj] ;            %#ok
+        if (nargout > 0)
+            objfiles = [objfiles ' ../CSparse/' csrc obj] ;%#ok
+        end
+        if (s)
+            cpfile (['../../Source/' cs{i} '.c'], [csrc '.c']) ;
+            if (details)
+                fprintf ('%s\n', ['cp -f ../../Source/' cs{i} '.c ' csrc '.c']);
+            end
+            cmd = sprintf ('%s -DCS_COMPLEX -O -c -I../../Include %s.c\n', ...
+                mexcmd, csrc) ;
+            kk = do_cmd (cmd, kk, details) ;
+        end
     end
 
 end
@@ -161,10 +165,10 @@ obj = ['.' mexext] ;
 for i = 1:length (csm)
     [s t] = cs_must_compile ('', csm{i}, '_mex', obj, hfile, force) ;
     timestamp = max (timestamp, t) ;
-    if (anysrc | s)							    %#ok
-	cmd = sprintf ('%s -O -I../../Include %s_mex.c %s -output %s\n', ...
-	    mexcmd, csm{i}, CS, csm{i}) ;
-	kk = do_cmd (cmd, kk, details) ;
+    if (anysrc | s)                                                         %#ok
+        cmd = sprintf ('%s -O -I../../Include %s_mex.c %s -output %s\n', ...
+            mexcmd, csm{i}, CS, csm{i}) ;
+        kk = do_cmd (cmd, kk, details) ;
     end
 end
 
@@ -192,9 +196,35 @@ if (details)
     fprintf ('%s', s) ;
 else
     if (mod (kk, 60) == 0)
-	fprintf ('\n') ;
+        fprintf ('\n') ;
     end
     kk = kk + 1 ;
     fprintf ('.') ;
 end
 eval (s) ;
+
+%-------------------------------------------------------------------------------
+function rmfile (file)
+% rmfile:  delete a file, but only if it exists
+if (length (dir (file)) > 0)                                                %#ok
+    delete (file) ;
+end
+
+%-------------------------------------------------------------------------------
+function cpfile (src, dst)
+% cpfile:  copy the src file to the filename dst, overwriting dst if it exists
+%% fprintf ('cp %s %s\n', src, dst) ; return ;
+rmfile (dst)
+if (length (dir (src)) == 0)	%#ok
+    fprintf ('File does not exist: %s\n', src) ;
+    error ('File does not exist') ;
+end
+try
+    copyfile (src, dst) ;
+catch ME
+    % ignore errors of the form "cp: preserving permissions: ...
+    % Operation not supported".  rethrow all other errors.
+    if (isempty (strfind (ME.message, 'Operation not supported')))
+        rethrow (ME) ;
+    end
+end
diff --git a/CXSparse_newfiles/MATLAB/Demo/README.txt b/CXSparse_newfiles/MATLAB/Demo/README.txt
index 36b4e08..d8a5732 100644
--- a/CXSparse_newfiles/MATLAB/Demo/README.txt
+++ b/CXSparse_newfiles/MATLAB/Demo/README.txt
@@ -1 +1,3 @@
 Demo for MATLAB interface for CXSparse.  See Contents.m for details.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse_newfiles/MATLAB/Demo/cs_demo.m b/CXSparse_newfiles/MATLAB/Demo/cs_demo.m
index d01135d..c4741e7 100644
--- a/CXSparse_newfiles/MATLAB/Demo/cs_demo.m
+++ b/CXSparse_newfiles/MATLAB/Demo/cs_demo.m
@@ -6,8 +6,7 @@ function cs_demo (do_pause, matrixpath)
 %   cs_demo
 % See also: cs_demo1, cs_demo2, cs_demo3
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 help cs_demo
 if (nargin < 1)
@@ -17,7 +16,6 @@ if (nargin < 2)
     matrixpath = [] ;
 end
 
-figure (1)
 clf
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
@@ -33,15 +31,15 @@ help cs_demo3
 cs_demo3 (do_pause, matrixpath) ;
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex_1
+help private/ex_1
 ex_1
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex2
+help private/ex2
 ex2
 
 fprintf ('\n\n-------------------------------------------------------\n') ;
-help ex3
+help private/ex3
 ex3
 
 fprintf ('\nAll CXSparse demos finished.\n') ;
diff --git a/CXSparse_newfiles/MATLAB/README.txt b/CXSparse_newfiles/MATLAB/README.txt
index 8ece299..59b160e 100644
--- a/CXSparse_newfiles/MATLAB/README.txt
+++ b/CXSparse_newfiles/MATLAB/README.txt
@@ -22,3 +22,5 @@ However, you may run the tests in the Test directory only if your compiler
 supports the ANSI C99 complex type.  If it does not support the ANSI C99
 complex type, the tests in the Test directory will fail, since the codes there
 test both the real and complex cases in CXSparse.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse_newfiles/MATLAB/Test/Makefile b/CXSparse_newfiles/MATLAB/Test/Makefile
deleted file mode 100644
index 3b4e4ef..0000000
--- a/CXSparse_newfiles/MATLAB/Test/Makefile
+++ /dev/null
@@ -1,53 +0,0 @@
-include ../../../UFconfig/UFconfig.mk
-
-MX = $(MEX) -DCS_LONG
-AR = ar cr
-RANLIB = ranlib
-
-I = -I../../Include -I../../../UFconfig -I../CSparse
-
-all: cs_sparse2.mexglx \
-	cs_ipvec.mexglx \
-	cs_pvec.mexglx \
-	cs_reach.mexglx \
-	cs_maxtransr.mexglx \
-	cs_reachr.mexglx \
-	cs_rowcnt.mexglx \
-	cs_frand.mexglx
-
-mexcsparse:
-	( cd ../CSparse ; make mexcsparse.a )
-
-cs_ipvec.mexglx: cs_ipvec_mex.c mexcsparse
-	$(MX) -output cs_ipvec $< $(I) ../CSparse/mexcsparse.a
-
-cs_pvec.mexglx: cs_pvec_mex.c mexcsparse
-	$(MX) -output cs_pvec $< $(I) ../CSparse/mexcsparse.a
-
-cs_reach.mexglx: cs_reach_mex.c mexcsparse
-	$(MX) -output cs_reach $< $(I) ../CSparse/mexcsparse.a
-
-cs_sparse2.mexglx: cs_sparse2_mex.c mexcsparse
-	$(MX) -output cs_sparse2 $< $(I) ../CSparse/mexcsparse.a
-
-cs_maxtransr.mexglx: cs_maxtransr_mex.c mexcsparse
-	$(MX) -output cs_maxtransr $< $(I) ../CSparse/mexcsparse.a
-
-cs_reachr.mexglx: cs_reachr_mex.c mexcsparse
-	$(MX) -output cs_reachr $< $(I) ../CSparse/mexcsparse.a
-
-cs_rowcnt.mexglx: cs_rowcnt_mex.c mexcsparse
-	$(MX) -output cs_rowcnt $< $(I) ../CSparse/mexcsparse.a
-
-cs_frand.mexglx: cs_frand_mex.c mexcsparse
-	$(MX) -output cs_frand $< $(I) ../CSparse/mexcsparse.a
-
-
-
-clean:
-	rm -f *.o
-
-distclean: clean
-	rm -f *.mex* *.a cs_cl_*.c
-
-purge: distclean
diff --git a/CXSparse_newfiles/MATLAB/Test/README.txt b/CXSparse_newfiles/MATLAB/Test/README.txt
index e075bac..0547f79 100644
--- a/CXSparse_newfiles/MATLAB/Test/README.txt
+++ b/CXSparse_newfiles/MATLAB/Test/README.txt
@@ -2,3 +2,5 @@ Test for MATLAB interface for CXSparse.  Type "testall" to run all the tests.
 
 Also includes "textbook" codes for the book "Direct Methods for Sparse Linear
 Systems", which are not part of CXSparse proper, but are used in the tests.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse_newfiles/MATLAB/Test/chol_updown2.m b/CXSparse_newfiles/MATLAB/Test/chol_updown2.m
index 5cc844e..37b9e37 100644
--- a/CXSparse_newfiles/MATLAB/Test/chol_updown2.m
+++ b/CXSparse_newfiles/MATLAB/Test/chol_updown2.m
@@ -5,8 +5,7 @@ function [L, w] = chol_updown2 (L, sigma, w)
 %   [L, w] = chol_updown2 (L, sigma, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis, William W. Hager
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (L,1) ;
@@ -21,25 +20,25 @@ for k = 1:n
     beta2 = sqrt (beta*beta + sigma*alpha*conj(alpha)) ;
     gamma = sigma * conj(alpha) / (beta2 * beta) ;
     if (sigma > 0)
-	% update
-	delta = beta / beta2 ;
-	L (k,k) = delta * L (k,k) + gamma * w (k) ;
-	phase = abs (L (k, k))/L (k, k) ;
-	L (k, k) = phase*L (k, k) ;
+        % update
+        delta = beta / beta2 ;
+        L (k,k) = delta * L (k,k) + gamma * w (k) ;
+        phase = abs (L (k, k))/L (k, k) ;
+        L (k, k) = phase*L (k, k) ;
 
-	w1 = w (k+1:n) ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w1) ;
+        w1 = w (k+1:n) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w1) ;
 
     else
-	% downdate
-	delta = beta2 / beta ;
-	L (k,k) = delta * L (k,k) ;
-	phase = abs (L (k, k))/L (k, k) ;
-	L (k, k) = phase*L (k, k) ;
+        % downdate
+        delta = beta2 / beta ;
+        L (k,k) = delta * L (k,k) ;
+        phase = abs (L (k, k))/L (k, k) ;
+        L (k, k) = phase*L (k, k) ;
 
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w (k+1:n)) ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k+1:n,k) = phase * (delta * L (k+1:n,k) + gamma * w (k+1:n)) ;
 
     end
     w (k) = alpha ;
diff --git a/CXSparse_newfiles/MATLAB/Test/cholupdown.m b/CXSparse_newfiles/MATLAB/Test/cholupdown.m
index e450347..53f0d51 100644
--- a/CXSparse_newfiles/MATLAB/Test/cholupdown.m
+++ b/CXSparse_newfiles/MATLAB/Test/cholupdown.m
@@ -6,9 +6,7 @@ function L = cholupdown (Lold, sigma, w)
 %   L = cholupdown (Lold, sigma, w)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 beta = 1 ;
 n = size (Lold,1) ;
@@ -24,30 +22,30 @@ for k = 1:n
 
     if (sigma < 0)
 
-	% downdate
-	bratio = beta_new / beta ;
-	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-	L (k,k) = bratio * L (k,k) ;
-	L (k+1:n,k) = bratio * L (k+1:n,k) - gamma*w(k+1:n) ;
+        % downdate
+        bratio = beta_new / beta ;
+        w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+        L (k,k) = bratio * L (k,k) ;
+        L (k+1:n,k) = bratio * L (k+1:n,k) - gamma*w(k+1:n) ;
 
     else
 
-	% update
-	bratio = beta / beta_new ;
+        % update
+        bratio = beta / beta_new ;
 
-%	wold = w (k+1:n) ;
-%	w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
-%	L (k    ,k) = bratio * L (k    ,k) + gamma*w(k) ;
-%	L (k+1:n,k) = bratio * L (k+1:n,k) + gamma*wold ;
+%       wold = w (k+1:n) ;
+%       w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ;
+%       L (k    ,k) = bratio * L (k    ,k) + gamma*w(k) ;
+%       L (k+1:n,k) = bratio * L (k+1:n,k) + gamma*wold ;
 
-	L (k,k) = bratio * L (k,k) + gamma*w(k) ;
-	for i = k+1:n 
+        L (k,k) = bratio * L (k,k) + gamma*w(k) ;
+        for i = k+1:n 
 
-	    wold = w (i) ;
-	    w (i) = w (i) - alpha * L (i,k) ;
-	    L (i,k) = bratio * L (i,k) + gamma*wold ;
+            wold = w (i) ;
+            w (i) = w (i) - alpha * L (i,k) ;
+            L (i,k) = bratio * L (i,k) + gamma*wold ;
 
-	end
+        end
 
     end
 
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_fiedler.m b/CXSparse_newfiles/MATLAB/Test/cs_fiedler.m
index 35db8dc..7ffc287 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_fiedler.m
+++ b/CXSparse_newfiles/MATLAB/Test/cs_fiedler.m
@@ -10,21 +10,20 @@ function [p,v,d] = cs_fiedler (A)
 %
 %   See also CS_SCC, EIGS, SYMRCM, UNMESH.
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (A,1) ;
 if (n < 2)
     p = 1 ; v = 1 ; d = 0 ; return ;
 end
-opt.disp = 0 ;			    % turn off printing in eigs
+opt.disp = 0 ;                      % turn off printing in eigs
 opt.tol = sqrt (eps) ;
 if (~isreal (A))
     A = spones (A) ;
 end
-S = A | A' | speye (n) ;	    % compute the Laplacian of A
+S = A | A' | speye (n) ;            % compute the Laplacian of A
 S = diag (sum (S)) - S ;
 [v,d] = eigs (S, 2, 'SA', opt) ;    % find the Fiedler vector v
 v = v (:,2) ;
 d = d (2,2) ;
-[ignore p] = sort (v) ;		    % sort it to get p
+[ignore p] = sort (v) ;             % sort it to get p
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_frand_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_frand_mex.c
index 9768797..02aba94 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_frand_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_frand_mex.c
@@ -13,14 +13,14 @@ cs_dl *cs_dl_frand (CS_INT n, CS_INT nel, CS_INT s)
     if (!P) return (cs_dl_spfree (T)) ;
     for (e = 0 ; e < nel ; e++)
     {
-	for (i = 0 ; i < s ; i++) P [i] = rand () % n ;
-	for (j = 0 ; j < s ; j++)
-	{
-	    for (i = 0 ; i < s ; i++)
-	    {
-		cs_dl_entry (T, P [i], P [j], rand () / (double) RAND_MAX) ;
-	    }
-	}
+        for (i = 0 ; i < s ; i++) P [i] = rand () % n ;
+        for (j = 0 ; j < s ; j++)
+        {
+            for (i = 0 ; i < s ; i++)
+            {
+                cs_dl_entry (T, P [i], P [j], rand () / (double) RAND_MAX) ;
+            }
+        }
     }
     for (i = 0 ; i < n ; i++) cs_dl_entry (T, i, i, 1) ;
     A = cs_dl_compress (T) ;
@@ -40,7 +40,7 @@ void mexFunction
     cs *A, *AT ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: C = cs_frand(n,nel,s)") ;
+        mexErrMsgTxt ("Usage: C = cs_frand(n,nel,s)") ;
     }
     n = mxGetScalar (pargin [0]) ;
     nel = mxGetScalar (pargin [1]) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_ipvec_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_ipvec_mex.c
index 974af01..5c7bdbf 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_ipvec_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_ipvec_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     double *xx ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_ipvec(b,p)") ;
+        mexErrMsgTxt ("Usage: x = cs_ipvec(b,p)") ;
     }
     n = mxGetNumberOfElements (pargin [0]) ;
     if (n != mxGetNumberOfElements (pargin [1]))
     {
-	mexErrMsgTxt ("b or p wrong size") ;
+        mexErrMsgTxt ("b or p wrong size") ;
     }
 
     xx = mxGetPr (pargin [1]) ;
@@ -29,21 +29,21 @@ void mexFunction
 #ifdef NCOMPLEX
         mexErrMsgTxt ("complex case not supported") ;
 #else
-	cs_complex_t *x, *b ;
-	b = cs_cl_mex_get_double (n, pargin [0]) ;
-	x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
-	cs_cl_ipvec (p, b, x, n) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;
-	cs_free (b) ;	    /* free copy of complex values */
+        cs_complex_t *x, *b ;
+        b = cs_cl_mex_get_double (n, pargin [0]) ;
+        x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
+        cs_cl_ipvec (p, b, x, n) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;
+        cs_free (b) ;       /* free copy of complex values */
 #endif
     }
     else
     {
-	double *x, *b ;
-	b = cs_dl_mex_get_double (n, pargin [0]) ;
-	pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
-	x = mxGetPr (pargout [0]) ;
-	cs_dl_ipvec (p, b, x, n) ;
+        double *x, *b ;
+        b = cs_dl_mex_get_double (n, pargin [0]) ;
+        pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
+        x = mxGetPr (pargout [0]) ;
+        cs_dl_ipvec (p, b, x, n) ;
     }
     cs_free (p) ;
 }
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_maxtransr_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_maxtransr_mex.c
index e97cec6..d94012b 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_maxtransr_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_maxtransr_mex.c
@@ -6,21 +6,21 @@ CS_INT augment (CS_INT k, cs_dl *A, CS_INT *jmatch, CS_INT *cheap, CS_INT *w,
 {
     CS_INT found = 0, p, i = -1, *Ap = A->p, *Ai = A->i ;
     /* --- Start depth-first-search at node j ------------------------------- */
-    w [j] = k ;				    /* mark j as visited for kth path */
+    w [j] = k ;                             /* mark j as visited for kth path */
     for (p = cheap [j] ; p < Ap [j+1] && !found ; p++)
     {
-	i = Ai [p] ;			    /* try a cheap assignment (i,j) */
-	found = (jmatch [i] == -1) ;
+        i = Ai [p] ;                        /* try a cheap assignment (i,j) */
+        found = (jmatch [i] == -1) ;
     }
-    cheap [j] = p ;			    /* start here next time for j */
+    cheap [j] = p ;                         /* start here next time for j */
     /* --- Depth-first-search of neighbors of j ----------------------------- */
     for (p = Ap [j] ; p < Ap [j+1] && !found ; p++)
     {
-	i = Ai [p] ;			    /* consider row i */
-	if (w [jmatch [i]] == k) continue ; /* skip col jmatch [i] if marked */
-	found = augment (k, A, jmatch, cheap, w, jmatch [i]) ;
+        i = Ai [p] ;                        /* consider row i */
+        if (w [jmatch [i]] == k) continue ; /* skip col jmatch [i] if marked */
+        found = augment (k, A, jmatch, cheap, w, jmatch [i]) ;
     }
-    if (found) jmatch [i] = j ;		    /* augment jmatch if path found */
+    if (found) jmatch [i] = j ;             /* augment jmatch if path found */
     return (found) ;
 }
 
@@ -29,15 +29,15 @@ static
 CS_INT *maxtrans (cs_dl *A)   /* returns jmatch [0..m-1] */
 {
     CS_INT i, j, k, n, m, *Ap, *jmatch, *w, *cheap ;
-    if (!A) return (NULL) ;			    /* check inputs */
+    if (!A) return (NULL) ;                         /* check inputs */
     n = A->n ; m = A->m ; Ap = A->p ;
     jmatch = cs_dl_malloc (m, sizeof (CS_INT)) ;    /* allocate result */
-    w = cs_dl_malloc (2*n, sizeof (CS_INT)) ;	    /* allocate workspace */
+    w = cs_dl_malloc (2*n, sizeof (CS_INT)) ;       /* allocate workspace */
     if (!w || !jmatch) return (cs_dl_idone (jmatch, NULL, w, 0)) ;
     cheap = w + n ;
     for (j = 0 ; j < n ; j++) cheap [j] = Ap [j] ;  /* for cheap assignment */
-    for (j = 0 ; j < n ; j++) w [j] = -1 ;	    /* all columns unflagged */
-    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;	    /* no rows matched yet */
+    for (j = 0 ; j < n ; j++) w [j] = -1 ;          /* all columns unflagged */
+    for (i = 0 ; i < m ; i++) jmatch [i] = -1 ;     /* no rows matched yet */
     for (k = 0 ; k < n ; k++) augment (k, A, jmatch, cheap, w, k) ;
     return (cs_dl_idone (jmatch, NULL, w, 1)) ;
 }
@@ -68,7 +68,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 1)
     {
-	mexErrMsgTxt ("Usage: p = cr_maxtransr(A)") ;
+        mexErrMsgTxt ("Usage: p = cr_maxtransr(A)") ;
     }
 
     /* get inputs */
@@ -77,7 +77,7 @@ void mexFunction
     n = A->n ;
 
     jmatch = maxtrans (A) ;
-    imatch = invmatch (jmatch, m, n) ;	/* imatch = inverse of jmatch */
+    imatch = invmatch (jmatch, m, n) ;  /* imatch = inverse of jmatch */
 
     pargout [0] = mxCreateDoubleMatrix (1, n, mxREAL) ;
     x = mxGetPr (pargout [0]) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_pvec_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_pvec_mex.c
index d8505fa..97b0063 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_pvec_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_pvec_mex.c
@@ -12,12 +12,12 @@ void mexFunction
     double *xx ;
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_pvec(b,p)") ;
+        mexErrMsgTxt ("Usage: x = cs_pvec(b,p)") ;
     }
     n = mxGetNumberOfElements (pargin [0]) ;
     if (n != mxGetNumberOfElements (pargin [1]))
     {
-	mexErrMsgTxt ("b or p wrong size") ;
+        mexErrMsgTxt ("b or p wrong size") ;
     }
 
     xx = mxGetPr (pargin [1]) ;
@@ -29,21 +29,21 @@ void mexFunction
 #ifdef NCOMPLEX
         mexErrMsgTxt ("complex case not supported") ;
 #else
-	cs_complex_t *x, *b ;
-	b = cs_cl_mex_get_double (n, pargin [0]) ;
-	x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
-	cs_cl_pvec (p, b, x, n) ;
-	pargout [0] = cs_cl_mex_put_double (n, x) ;
-	cs_free (b) ;	    /* free copy of complex values */
+        cs_complex_t *x, *b ;
+        b = cs_cl_mex_get_double (n, pargin [0]) ;
+        x = cs_dl_malloc (n, sizeof (cs_complex_t)) ;
+        cs_cl_pvec (p, b, x, n) ;
+        pargout [0] = cs_cl_mex_put_double (n, x) ;
+        cs_free (b) ;       /* free copy of complex values */
 #endif
     }
     else
     {
-	double *x, *b ;
-	b = cs_dl_mex_get_double (n, pargin [0]) ;
-	pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
-	x = mxGetPr (pargout [0]) ;
-	cs_dl_pvec (p, b, x, n) ;
+        double *x, *b ;
+        b = cs_dl_mex_get_double (n, pargin [0]) ;
+        pargout [0] = mxCreateDoubleMatrix (n, 1, mxREAL) ;
+        x = mxGetPr (pargout [0]) ;
+        cs_dl_pvec (p, b, x, n) ;
     }
     cs_free (p) ;
 }
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_reach_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_reach_mex.c
index ec72443..bd94815 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_reach_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_reach_mex.c
@@ -16,7 +16,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_reach(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_reach(L,b)") ;
     }
 
     /* get inputs */
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_reachr_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_reachr_mex.c
index ca7e009..b458ba8 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_reachr_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_reachr_mex.c
@@ -6,15 +6,15 @@ static
 void dfsr (CS_INT j, const cs *L, CS_INT *top, CS_INT *xi, CS_INT *w)
 {
     CS_INT p ;
-    w [j] = 1 ;					/* mark node j */
-    for (p = L->p [j] ; p < L->p [j+1] ; p++)	/* for each i in L(:,j) */
+    w [j] = 1 ;                                 /* mark node j */
+    for (p = L->p [j] ; p < L->p [j+1] ; p++)   /* for each i in L(:,j) */
     {
-	if (w [L->i [p]] != 1)			/* if i is unmarked */
-	{
-	    dfsr (L->i [p], L, top, xi, w) ;	/* start a dfs at i */
-	}
+        if (w [L->i [p]] != 1)                  /* if i is unmarked */
+        {
+            dfsr (L->i [p], L, top, xi, w) ;    /* start a dfs at i */
+        }
     }
-    xi [--(*top)] = j ;				/* push j onto the stack */
+    xi [--(*top)] = j ;                         /* push j onto the stack */
 }
 
 /* w [0..n-1] == 0 on input, <= 1 on output.  size n */
@@ -22,15 +22,15 @@ static
 CS_INT reachr (const cs *L, const cs *B, CS_INT *xi, CS_INT *w)
 {
     CS_INT p, n = L->n ;
-    CS_INT top = n ;				/* stack is empty */
-    for (p = B->p [0] ; p < B->p [1] ; p++)	/* for each i in pattern of b */
+    CS_INT top = n ;                            /* stack is empty */
+    for (p = B->p [0] ; p < B->p [1] ; p++)     /* for each i in pattern of b */
     {
-	if (w [B->i [p]] != 1)			/* if i is unmarked */
-	{
-	    dfsr (B->i [p], L, &top, xi, w) ;	/* start a dfs at i */
-	}
+        if (w [B->i [p]] != 1)                  /* if i is unmarked */
+        {
+            dfsr (B->i [p], L, &top, xi, w) ;   /* start a dfs at i */
+        }
     }
-    return (top) ;				/* return top of stack */
+    return (top) ;                              /* return top of stack */
 }
 
 void mexFunction
@@ -47,7 +47,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 2)
     {
-	mexErrMsgTxt ("Usage: x = cs_reachr(L,b)") ;
+        mexErrMsgTxt ("Usage: x = cs_reachr(L,b)") ;
     }
 
     /* get inputs */
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_rowcnt_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_rowcnt_mex.c
index 7ba9a30..ec9aade 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_rowcnt_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_rowcnt_mex.c
@@ -11,12 +11,12 @@ void firstdesc (CS_INT n, CS_INT *parent, CS_INT *post, CS_INT *first,
     for (i = 0 ; i < n ; i++) first [i] = -1 ;
     for (k = 0 ; k < n ; k++)
     {
-	i = post [k] ;	    /* node i of etree is kth postordered node */
-	len = 0 ;	    /* traverse from i towards the root */
-	for (r = i ; r != -1 && first [r] == -1 ; r = parent [r], len++)
-	    first [r] = k ;
-	len += (r == -1) ? (-1) : level [r] ;	/* root node or end of path */
-	for (s = i ; s != r ; s = parent [s]) level [s] = len-- ;
+        i = post [k] ;      /* node i of etree is kth postordered node */
+        len = 0 ;           /* traverse from i towards the root */
+        for (r = i ; r != -1 && first [r] == -1 ; r = parent [r], len++)
+            first [r] = k ;
+        len += (r == -1) ? (-1) : level [r] ;   /* root node or end of path */
+        for (s = i ; s != r ; s = parent [s]) level [s] = len-- ;
     }
 }
 
@@ -25,30 +25,30 @@ static
 CS_INT *rowcnt (cs_dl *A, CS_INT *parent, CS_INT *post)
 {
     CS_INT i, j, k, len, s, p, jprev, q, n, sparent, jleaf, *Ap, *Ai, *maxfirst,
-	*ancestor, *prevleaf, *w, *first, *level, *rowcount ;
-    n = A->n ; Ap = A->p ; Ai = A->i ;			/* get A */
-    w = cs_dl_malloc (5*n, sizeof (CS_INT)) ;		/* get workspace */
+        *ancestor, *prevleaf, *w, *first, *level, *rowcount ;
+    n = A->n ; Ap = A->p ; Ai = A->i ;                  /* get A */
+    w = cs_dl_malloc (5*n, sizeof (CS_INT)) ;           /* get workspace */
     ancestor = w ; maxfirst = w+n ; prevleaf = w+2*n ; first = w+3*n ;
     level = w+4*n ;
-    rowcount = cs_dl_malloc (n, sizeof (CS_INT)) ;	/* allocate result */
-    firstdesc (n, parent, post, first, level) ;	/* find first and level */
+    rowcount = cs_dl_malloc (n, sizeof (CS_INT)) ;      /* allocate result */
+    firstdesc (n, parent, post, first, level) ; /* find first and level */
     for (i = 0 ; i < n ; i++)
     {
-	rowcount [i] = 1 ;	/* count the diagonal of L */
-	prevleaf [i] = -1 ;	/* no previous leaf of the ith row subtree */
-	maxfirst [i] = -1 ;	/* max first[j] for node j in ith subtree */
-	ancestor [i] = i ;	/* every node is in its own set, by itself */
+        rowcount [i] = 1 ;      /* count the diagonal of L */
+        prevleaf [i] = -1 ;     /* no previous leaf of the ith row subtree */
+        maxfirst [i] = -1 ;     /* max first[j] for node j in ith subtree */
+        ancestor [i] = i ;      /* every node is in its own set, by itself */
     }
     for (k = 0 ; k < n ; k++)
     {
-	j = post [k] ;		/* j is the kth node in the postordered etree */
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    q = cs_dl_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf) ;
-	    if (jleaf) rowcount [i] += (level [j] - level [q]) ;
-	}
-	if (parent [j] != -1) ancestor [j] = parent [j] ;
+        j = post [k] ;          /* j is the kth node in the postordered etree */
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            q = cs_dl_leaf (i, j, first, maxfirst, prevleaf, ancestor, &jleaf) ;
+            if (jleaf) rowcount [i] += (level [j] - level [q]) ;
+        }
+        if (parent [j] != -1) ancestor [j] = parent [j] ;
     }
     cs_dl_free (w) ;
     return (rowcount) ;
@@ -68,7 +68,7 @@ void mexFunction
 
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: r = cs_rowcnt(A,parent,post)") ;
+        mexErrMsgTxt ("Usage: r = cs_rowcnt(A,parent,post)") ;
     }
 
     /* get inputs */
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_sparse2_mex.c b/CXSparse_newfiles/MATLAB/Test/cs_sparse2_mex.c
index dddcad9..6d3ea38 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_sparse2_mex.c
+++ b/CXSparse_newfiles/MATLAB/Test/cs_sparse2_mex.c
@@ -12,7 +12,7 @@ void mexFunction
     CS_INT k, m, n, nz, *Ti, *Tj ;
     if (nargout > 1 || nargin != 3)
     {
-	mexErrMsgTxt ("Usage: A = cs_sparse2(i,j,x)") ;
+        mexErrMsgTxt ("Usage: A = cs_sparse2(i,j,x)") ;
     }
     nz = mxGetM (pargin [0]) ;
     Ti = cs_dl_mex_get_int (nz, pargin [0], &m, 1) ;
@@ -23,41 +23,41 @@ void mexFunction
 #ifdef NCOMPLEX
         mexErrMsgTxt ("complex case not supported") ;
 #else
-	cs_complex_t *Tx ;
-	cs_cl *A, *C, *T ;
-	Tx = cs_cl_mex_get_double (nz, pargin [2]) ;
-	T = cs_cl_spalloc (n, m, 1, 1, 1) ;
-	for (k = 0 ; k < nz ; k++)
-	{
-	    cs_cl_entry (T, Tj [k], Ti [k], Tx [k]) ;
-	}
-	C = cs_cl_compress (T) ;
-	cs_cl_spfree (T) ;
-	cs_cl_dupl (C) ;
-	cs_cl_dropzeros (C) ;
-	A = cs_cl_transpose (C, -1) ;
-	cs_cl_spfree (C) ;
-	pargout [0] = cs_cl_mex_put_sparse (&A) ;
-	cs_free (Tx) ;
+        cs_complex_t *Tx ;
+        cs_cl *A, *C, *T ;
+        Tx = cs_cl_mex_get_double (nz, pargin [2]) ;
+        T = cs_cl_spalloc (n, m, 1, 1, 1) ;
+        for (k = 0 ; k < nz ; k++)
+        {
+            cs_cl_entry (T, Tj [k], Ti [k], Tx [k]) ;
+        }
+        C = cs_cl_compress (T) ;
+        cs_cl_spfree (T) ;
+        cs_cl_dupl (C) ;
+        cs_cl_dropzeros (C) ;
+        A = cs_cl_transpose (C, -1) ;
+        cs_cl_spfree (C) ;
+        pargout [0] = cs_cl_mex_put_sparse (&A) ;
+        cs_free (Tx) ;
 #endif
     }
     else
     {
-	double *Tx ;
-	cs_dl *A, *C, *T ;
-	Tx = mxGetPr (pargin [2]) ;
-	T = cs_dl_spalloc (n, m, 1, 1, 1) ;
-	for (k = 0 ; k < nz ; k++)
-	{
-	    cs_dl_entry (T, Tj [k], Ti [k], Tx [k]) ;
-	}
-	C = cs_dl_compress (T) ;
-	cs_dl_spfree (T) ;
-	cs_dl_dupl (C) ;
-	cs_dl_dropzeros (C) ;
-	A = cs_dl_transpose (C, 1) ;
-	cs_dl_spfree (C) ;
-	pargout [0] = cs_dl_mex_put_sparse (&A) ;
+        double *Tx ;
+        cs_dl *A, *C, *T ;
+        Tx = mxGetPr (pargin [2]) ;
+        T = cs_dl_spalloc (n, m, 1, 1, 1) ;
+        for (k = 0 ; k < nz ; k++)
+        {
+            cs_dl_entry (T, Tj [k], Ti [k], Tx [k]) ;
+        }
+        C = cs_dl_compress (T) ;
+        cs_dl_spfree (T) ;
+        cs_dl_dupl (C) ;
+        cs_dl_dropzeros (C) ;
+        A = cs_dl_transpose (C, 1) ;
+        cs_dl_spfree (C) ;
+        pargout [0] = cs_dl_mex_put_sparse (&A) ;
     }
     cs_free (Ti) ;
     cs_free (Tj) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/cs_test_make.m b/CXSparse_newfiles/MATLAB/Test/cs_test_make.m
index 60303b6..a2a4aa3 100644
--- a/CXSparse_newfiles/MATLAB/Test/cs_test_make.m
+++ b/CXSparse_newfiles/MATLAB/Test/cs_test_make.m
@@ -6,10 +6,9 @@ function cs_test_make (force)
 %   cs_test_make
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
-mexcmd = 'mex -DCS_LONG -I../../../UFconfig' ;
+mexcmd = 'mex -DCS_LONG -I../../../SuiteSparse_config' ;
 if (~isempty (strfind (computer, '64')))
     mexcmd = [mexcmd ' -largeArrayDims'] ;
 end
@@ -32,12 +31,11 @@ end
 
 for i = 1:length(mexfunc)
     [s t tobj] = cs_must_compile ('', mexfunc{i}, '_mex', ...
- 	['.' mexext], 'cs_test_make.m', force) ;
-    if (s | tobj < timestamp)						    %#ok
-	cmd = [mexcmd ' -O -output ' mexfunc{i} ' ' mexfunc{i} '_mex.c -I..' ...
-	    filesep '..' filesep 'Include -I..' ...
-	    filesep 'CSparse ' object_files] ;
- 	fprintf ('%s\n', cmd) ;
- 	eval (cmd) ;
+        ['.' mexext], 'cs_test_make.m', force) ;
+    if (s | tobj < timestamp)                                               %#ok
+        cmd = [mexcmd ' -O -output ' mexfunc{i} ' ' mexfunc{i} '_mex.c' ...
+            ' -I../../Include -I../CSparse ' object_files] ;
+        fprintf ('%s\n', cmd) ;
+        eval (cmd) ;
      end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/house.m b/CXSparse_newfiles/MATLAB/Test/house.m
index 6c6c589..0c32118 100644
--- a/CXSparse_newfiles/MATLAB/Test/house.m
+++ b/CXSparse_newfiles/MATLAB/Test/house.m
@@ -5,8 +5,7 @@ function [v,beta,s] = house (x)
 %   [v,beta,s] = house (x)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 v = x ;
 s = norm (x) ;
@@ -15,7 +14,7 @@ if (s == 0)
     v (1) = 1 ;
 else
     if (x (1) ~= 0)
-	s = sign (x (1)) * s ;
+        s = sign (x (1)) * s ;
     end
     v (1) = v (1) + s ;
     beta = 1 / real (conj (s) * v (1)) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/norm1est.m b/CXSparse_newfiles/MATLAB/Test/norm1est.m
index edd5d09..428c7d9 100644
--- a/CXSparse_newfiles/MATLAB/Test/norm1est.m
+++ b/CXSparse_newfiles/MATLAB/Test/norm1est.m
@@ -5,31 +5,30 @@ function est = norm1est (L,U,P,Q)
 %   est = norm1est (L,U,P,Q)
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 n = size (L,1) ;
 for k = 1:5
     if (k == 1)
-	est = 0 ;
-	x = ones (n,1) / n ;
-	jold = -1 ;
+        est = 0 ;
+        x = ones (n,1) / n ;
+        jold = -1 ;
     else
-	j = min (find (abs (x) == norm (x,inf))) ;			    %#ok
-	if (j == jold)
-	    break
-	end ;
-	x = zeros (n,1) ;
-	x (j) = 1 ;
-	jold = j ;
+        j = min (find (abs (x) == norm (x,inf))) ;                          %#ok
+        if (j == jold)
+            break
+        end ;
+        x = zeros (n,1) ;
+        x (j) = 1 ;
+        jold = j ;
     end
     x = Q * (U \ (L \ (P*x))) ;
     est_old = est ;
     est = norm (x,1) ;
-    if (k > 1 & est <= est_old)						    %#ok
-	break
+    if (k > 1 & est <= est_old)                                             %#ok
+        break
     end ;
     s = ones (n,1) ;
-    s (find (x < 0)) = -1 ;						    %#ok
+    s (find (x < 0)) = -1 ;                                                 %#ok
     x = P' * (L' \ (U' \ (Q'*s))) ;
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test1.m b/CXSparse_newfiles/MATLAB/Test/test1.m
index d5c2196..4e5d802 100644
--- a/CXSparse_newfiles/MATLAB/Test/test1.m
+++ b/CXSparse_newfiles/MATLAB/Test/test1.m
@@ -5,9 +5,7 @@ function test1
 %   test1
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -19,39 +17,39 @@ for ii = f
     disp (Prob) ;
     for cmplex = 0:double(~ispc)
 
-	A = Prob.A ;
-	if (cmplex)
-	    A = A + 1i*sprand(A) ;
-	end
+        A = Prob.A ;
+        if (cmplex)
+            A = A + 1i*sprand(A) ;
+        end
 
-	B = A' ;
-	C = cs_transpose (A) ;
-	if (nnz (B-C) ~= 0)
-	    error ('!')
-	end
+        B = A' ;
+        C = cs_transpose (A) ;
+        if (nnz (B-C) ~= 0)
+            error ('!')
+        end
 
-	C = cs_transpose (A,0) ;
-	if (nnz (A.'-C) ~= 0)
-	    error ('!')
-	end
+        C = cs_transpose (A,0) ;
+        if (nnz (A.'-C) ~= 0)
+            error ('!')
+        end
 
-	C = cs_transpose (A,1) ;
-	if (nnz (A'-C) ~= 0)
-	    error ('!')
-	end
+        C = cs_transpose (A,1) ;
+        if (nnz (A'-C) ~= 0)
+            error ('!')
+        end
 
-	[m n] = size (A) ;
-	% if (m == n)
-	    x = rand (n,1) ;
-	    y = rand (m,1) ;
-	    z = y+A*x ;
-	    q = cs_gaxpy (A,x,y) ;
-	    err = norm (z-q,1) / norm (z,1) ;
-	    disp (err) ;
-	    if (err > 1e-14)
-		error ('!')
-	    end
-	% end
+        [m n] = size (A) ;
+        % if (m == n)
+            x = rand (n,1) ;
+            y = rand (m,1) ;
+            z = y+A*x ;
+            q = cs_gaxpy (A,x,y) ;
+            err = norm (z-q,1) / norm (z,1) ;
+            disp (err) ;
+            if (err > 1e-14)
+                error ('!')
+            end
+        % end
 
         if (~ispc)
             x = x + 1i*rand (n,1) ;
@@ -65,24 +63,31 @@ for ii = f
             end
         end
 
-	[i j x] = find (A) ;
-	p = randperm (length (i)) ;
-	i = i (p) ;
-	j = j (p) ;
-	x = x (p) ;
-	D = sparse (i,j,x) ;
-	E = cs_sparse (i,j,x) ;
-	% [i j x]
-	F = cs_sparse2 (i,j,x) ;
-	if (nnz (D-E) ~= 0)
-	    error ('!')
-	end
-	if (nnz (F-E) ~= 0)
-	    error ('!')
-	end
+        [i j x] = find (A) ;
+        p = randperm (length (i)) ;
+        i = i (p) ;
+        j = j (p) ;
+        x = x (p) ;
+        if (m <= 1)
+            % The find function returns row vectors i,j,x when size(A,1) is 1.
+            % This is fine for the MATLAB 'sparse', but not for cs_sparse.
+            i = i (:) ;
+            j = j (:) ;
+            x = x (:) ;
+        end
+        D = sparse (i,j,x) ;
+        E = cs_sparse (i,j,x) ;
+        % [i j x]
+        F = cs_sparse2 (i,j,x) ;
+        if (nnz (D-E) ~= 0)
+            error ('!')
+        end
+        if (nnz (F-E) ~= 0)
+            error ('!')
+        end
 
-	clear A B C D E F
-	% pause
+        clear A B C D E F
+        % pause
 
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test10.m b/CXSparse_newfiles/MATLAB/Test/test10.m
index f33fe9e..5f363eb 100644
--- a/CXSparse_newfiles/MATLAB/Test/test10.m
+++ b/CXSparse_newfiles/MATLAB/Test/test10.m
@@ -5,13 +5,10 @@ function test10
 %   test10
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
-
 % f = 185 ;
 % f = 449 ;
 clf
@@ -24,85 +21,85 @@ for trials = 1:100
     A = sprandn (m, n, d) ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     sp = sprank (A) ;
     % if (sp < n)
-    %	continue ;
+    %   continue ;
     % end
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 1i * sprand (A) * norm (A,1) / 10 ;
-	end
-
-	Aorig = A ;
-
-	% A = A (:, colamd (A)) ;
-
-	if (cmplex)
-	    tic ;
-	    R = chol (A'*A + speye (n)) ;
-	    t1 = toc ;
-	else
-	    tic ;
-	    R = qr (A) ;
-	    t1 = toc ;
-	end
-
-	% tic ;
-	% [Q,R] = qr (A) ;
-	% t1 = toc ;
-
-	[c,h,parent] = symbfact (A, 'col') ;				    %#ok
-	rnz = sum (c) ;							    %#ok
-	tic ;
-	[V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
-	t2 = toc ;
-
-	C = A ;
-	m2 = size (V2,1) ;
-	if (m2 > m)
-	    C = [A ; sparse(m2-m, n)] ;
-	end
-	C = C (p,:) ;
-
-	[H1,R1] = myqr (C) ;
-	err1 = norm (R1-R2,1) / norm (R1) ;
-	disp ('err1 = ') ;
-	disp (err1) ;
-	% [svd(A) svd(R1) svd(full(R2))]
-	s1 = svd (full (A)) ;
-	s2 = svd (full (R2)) ;
-	if (n > 0)
-	    err2 = norm (s1 - s2) / s1 (1)  ;
-	    disp ('err2 = ') ;
-	    disp (err2) ;
-	else
-	    err2 = 0 ;
-	end
-	fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d vs %d\n', t1, t2, t1/t2, sp, n) ;
-
-	% H2 = full (H2)
-	% R2 = full (R2)
-
-	subplot (2,4,1) ; spy (A) ;		title ('A colamd') ;
-	subplot (2,4,4) ; spy (Aorig) ;	title ('Aorig') ;
-	subplot (2,4,2) ; spy (C) ;		title ('A rperm') ;
-	subplot (2,4,5) ; spy (abs(R2)>0) ;	title ('spqr R, no zeros') ;
-	subplot (2,4,6) ; spy (R) ;		title ('matlab R') ;
-	subplot (2,4,7) ; spy (R2) ;	title ('spqr R') ;
-	subplot (2,4,8) ; spy (V2) ;	title ('spqr H') ;
-	drawnow
-
-	if (err2 > 1e-9)
-	    error ('!') ;
-	end
-
-	if (m2 > m)
-	    fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
-	end
+        if (cmplex)
+            A = A + 1i * sprand (A) * norm (A,1) / 10 ;
+        end
+
+        Aorig = A ;
+
+        % A = A (:, colamd (A)) ;
+
+        if (cmplex)
+            tic ;
+            R = chol (A'*A + speye (n)) ;
+            t1 = toc ;
+        else
+            tic ;
+            R = qr (A) ;
+            t1 = toc ;
+        end
+
+        % tic ;
+        % [Q,R] = qr (A) ;
+        % t1 = toc ;
+
+        [c,h,parent] = symbfact (A, 'col') ;                                %#ok
+        rnz = sum (c) ;                                                     %#ok
+        tic ;
+        [V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
+        t2 = toc ;
+
+        C = A ;
+        m2 = size (V2,1) ;
+        if (m2 > m)
+            C = [A ; sparse(m2-m, n)] ;
+        end
+        C = C (p,:) ;
+
+        [H1,R1] = myqr (C) ;
+        err1 = norm (R1-R2,1) / norm (R1) ;
+        disp ('err1 = ') ;
+        disp (err1) ;
+        % [svd(A) svd(R1) svd(full(R2))]
+        s1 = svd (full (A)) ;
+        s2 = svd (full (R2)) ;
+        if (n > 0)
+            err2 = norm (s1 - s2) / s1 (1)  ;
+            disp ('err2 = ') ;
+            disp (err2) ;
+        else
+            err2 = 0 ;
+        end
+        fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d vs %d\n', t1, t2, t1/t2, sp, n) ;
+
+        % H2 = full (H2)
+        % R2 = full (R2)
+
+        subplot (2,4,1) ; spy (A) ;             title ('A colamd') ;
+        subplot (2,4,4) ; spy (Aorig) ; title ('Aorig') ;
+        subplot (2,4,2) ; spy (C) ;             title ('A rperm') ;
+        subplot (2,4,5) ; spy (abs(R2)>0) ;     title ('spqr R, no zeros') ;
+        subplot (2,4,6) ; spy (R) ;             title ('matlab R') ;
+        subplot (2,4,7) ; spy (R2) ;    title ('spqr R') ;
+        subplot (2,4,8) ; spy (V2) ;    title ('spqr H') ;
+        drawnow
+
+        if (err2 > 1e-9)
+            error ('!') ;
+        end
+
+        if (m2 > m)
+            fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
+        end
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test11.m b/CXSparse_newfiles/MATLAB/Test/test11.m
index 2e86baa..48f2faa 100644
--- a/CXSparse_newfiles/MATLAB/Test/test11.m
+++ b/CXSparse_newfiles/MATLAB/Test/test11.m
@@ -5,8 +5,7 @@ function test11
 %   test11
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -18,7 +17,7 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     A = spones (A) ;
@@ -34,13 +33,13 @@ for i = f
     rc1 = full (sum (R)) ;
     rc2 = cs_rowcnt (A, pa, po) ;
     if (any (rc1 ~= rc2))
-	error ('!') ;
+        error ('!') ;
     end
 
     try
-	p = amd (A) ;
+        p = amd (A) ;
     catch
-	p = symamd (A) ;
+        p = symamd (A) ;
     end
     A = A (p,p) ;
 
@@ -48,7 +47,7 @@ for i = f
     rc1 = full (sum (R)) ;
     rc2 = cs_rowcnt (A, pa, po) ;
     if (any (rc1 ~= rc2))
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test12.m b/CXSparse_newfiles/MATLAB/Test/test12.m
index e4c3b49..4d95a5a 100644
--- a/CXSparse_newfiles/MATLAB/Test/test12.m
+++ b/CXSparse_newfiles/MATLAB/Test/test12.m
@@ -5,8 +5,7 @@ function test12
 %   test12
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('test 12\n') ;
 rand ('state',0) ;
@@ -18,30 +17,30 @@ for trial = 1:100
     d = .1 * rand (1) ;
     A = sprandn (m,n,d) ;
     if (m < n)
-	continue ;
+        continue ;
     end
-    if (m == 0 | n == 0)						    %#ok
-	continue ;
+    if (m == 0 | n == 0)                                                    %#ok
+        continue ;
     end
 
     for cmplex = 0:double(~ispc)
-	if (cmplex)
-	    A = A + 1i * sprand (A) ;
-	end
+        if (cmplex)
+            A = A + 1i * sprand (A) ;
+        end
 
-	fprintf ('m %d n %d nnz %d\n', m, n, nnz(A)) ;
-	[V,Beta,p,R] = cs_qr (A) ;
+        fprintf ('m %d n %d nnz %d\n', m, n, nnz(A)) ;
+        [V,Beta,p,R] = cs_qr (A) ;
 
-	s1 = svd (full (A)) ;
-	s2 = svd (full (R)) ;
-	s2 = s2 (1:length(s1)) ;
-	err = norm (s1-s2) ; 
-	if (length (s1) > 1)
-	    err = err / s1 (1) ;
-	end
-	fprintf ('err %g\n', err) ;
-	if (err > 1e-12)
-	    error ('!') ;
-	end
+        s1 = svd (full (A)) ;
+        s2 = svd (full (R)) ;
+        s2 = s2 (1:length(s1)) ;
+        err = norm (s1-s2) ; 
+        if (length (s1) > 1)
+            err = err / s1 (1) ;
+        end
+        fprintf ('err %g\n', err) ;
+        if (err > 1e-12)
+            error ('!') ;
+        end
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test13.m b/CXSparse_newfiles/MATLAB/Test/test13.m
index fd3b2e5..afb7bf5 100644
--- a/CXSparse_newfiles/MATLAB/Test/test13.m
+++ b/CXSparse_newfiles/MATLAB/Test/test13.m
@@ -5,9 +5,7 @@ function test13
 %   test13
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 randn ('state',0) ;
@@ -52,27 +50,27 @@ for trial = 1:100
     % pause
 
     p0 = etree (A, 'col') ;
-    % p1 = etree2 (A, 'col') ;	% CHOLMOD
+    % p1 = etree2 (A, 'col') ;  % CHOLMOD
     p2 = cs_etree (A, 'col') ;
 
     if (~isempty (A))
-	check_if_same (p0,p2) ;
+        check_if_same (p0,p2) ;
     end
 
     p0 = etree (C, 'col') ;
-    % p1 = etree2 (C, 'col') ;	% CHOLMOD
+    % p1 = etree2 (C, 'col') ;  % CHOLMOD
     p2 = cs_etree (C, 'col') ;
 
     if (~isempty (C))
-	check_if_same (p0,p2) ;
+        check_if_same (p0,p2) ;
     end
 
     % find etree of A'A, and postorder it
-    [m n] = size (A) ;							    %#ok
+    [m n] = size (A) ;                                                      %#ok
     % full (A)
 
     [cp0 cpo0] = etree (A, 'col') ;
-    % [cp1 cpo1] = etree2 (A, 'col') ;	% CHOLMOD
+    % [cp1 cpo1] = etree2 (A, 'col') ;  % CHOLMOD
     [cp2 cpo2] = cs_etree (A, 'col') ;
     % cpo2 = cs_post (cp2) ;
 
diff --git a/CXSparse_newfiles/MATLAB/Test/test14.m b/CXSparse_newfiles/MATLAB/Test/test14.m
index 4de44a1..8d1b21c 100644
--- a/CXSparse_newfiles/MATLAB/Test/test14.m
+++ b/CXSparse_newfiles/MATLAB/Test/test14.m
@@ -5,9 +5,7 @@ function test14
 %   test14
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -22,24 +20,24 @@ for trial = 1:100
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 1i * sparse (i,j,2*rand(size(x))-1) ;
-	end
+        if (cmplex)
+            A = A + 1i * sparse (i,j,2*rand(size(x))-1) ;
+        end
 
-	% using CSparse
-	tol = 0.5 ;
-	B = cs_droptol (A, tol) ;
+        % using CSparse
+        tol = 0.5 ;
+        B = cs_droptol (A, tol) ;
 
-	% using MATLAB
-	C = A .* (abs (A) > tol) ;
+        % using MATLAB
+        C = A .* (abs (A) > tol) ;
     %    [m n] = size (A) ;
     %    s = abs (A) > tol ;
     %    [i j] = find (s) ;
     %    x = A (find (s)) ;
     %    A = sparse (i, j, x, m, n) ;
 
-	if (norm (C-B,1) > 0)
-	    error ('!') ;
-	end
+        if (norm (C-B,1) > 0)
+            error ('!') ;
+        end
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test15.m b/CXSparse_newfiles/MATLAB/Test/test15.m
index 9269d36..967cf2e 100644
--- a/CXSparse_newfiles/MATLAB/Test/test15.m
+++ b/CXSparse_newfiles/MATLAB/Test/test15.m
@@ -5,9 +5,7 @@ function test15
 %   test15
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 randn ('state', 0) ;
@@ -23,7 +21,7 @@ for trials = 1:100
     k = max (1, k) ;
     k = min (n, k) ;
     if (n > 0)
-	A (:,k) = 1 ;
+        A (:,k) = 1 ;
     end
 
     if (~ispc)
@@ -33,14 +31,14 @@ for trials = 1:100
     end
 
     try
-	p0 = amd (A) ;
+        p0 = amd (A) ;
     catch
-	p0 = symamd (A) ;
+        p0 = symamd (A) ;
     end
     p1 = cs_amd (A) ;
 
     if (any (sort (p1) ~= 1:n))
-	error ('not perm!') ;
+        error ('not perm!') ;
     end
 
     C = A+A' + speye (n) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/test16.m b/CXSparse_newfiles/MATLAB/Test/test16.m
index fe7529c..d96e268 100644
--- a/CXSparse_newfiles/MATLAB/Test/test16.m
+++ b/CXSparse_newfiles/MATLAB/Test/test16.m
@@ -5,8 +5,7 @@ function test16
 %   test16
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 randn ('state', 0) ;
@@ -21,18 +20,18 @@ skip = 811 ;
 
 for i = f
     if (any (i == skip))
-	continue
+        continue
     end
     Prob = UFget (i) ;
     A = spones (Prob.A) ;
     Aorig = A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     if (m ~= n)
-	A = A'*A ;
+        A = A'*A ;
     end
 
     if (~ispc)
@@ -44,15 +43,15 @@ for i = f
     fprintf ('n %4d nz %d\n', n, nnz (A)) ;
 
     try
-	p0 = amd (A) ;
+        p0 = amd (A) ;
     catch
-	p0 = symamd (A) ;
+        p0 = symamd (A) ;
     end
     fprintf ('symmetric case:\n') ;
     p1 = cs_amd (A) ;
 
     if (any (sort (p1) ~= 1:n))
-	error ('not perm!') ;
+        error ('not perm!') ;
     end
 
     C = A+A' + speye (n) ;
@@ -64,32 +63,32 @@ for i = f
     drawnow
 
     if (lnz0 ~= lnz1)
-	fprintf ('----------------- lnz %d %d   %9.4f\n', ...
-	    lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
+        fprintf ('----------------- lnz %d %d   %9.4f\n', ...
+            lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
     end
 
     if (1)
 
-	p0 = colamd (Aorig) ;
-	[m n] = size (Aorig) ;
-	fprintf ('m %d n %d\n', m, n) ;
-
-	fprintf ('A''A case, no dense rows (for QR):\n') ;
-	p1 = cs_amd (Aorig, 3) ;
-	if (any (sort (p1) ~= 1:n))
-	    error ('not perm!') ;
-	end
-
-	subplot (2,3,4) ; spy (Aorig)
-	subplot (2,3,5) ; spy (Aorig (:,p0)) ; title ('colamd') ;
-	subplot (2,3,6) ; spy (Aorig (:,p1)) ; title ('cs amd(A''A)') ;
-	lnz0 = sum (symbfact (Aorig (:,p0), 'col')) ;
-	lnz1 = sum (symbfact (Aorig (:,p1), 'col')) ;
-	fprintf ('                    A''A: %7d %7d %9.4f\n', ...
-	    lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
-	drawnow
-
-	% pause
+        p0 = colamd (Aorig) ;
+        [m n] = size (Aorig) ;
+        fprintf ('m %d n %d\n', m, n) ;
+
+        fprintf ('A''A case, no dense rows (for QR):\n') ;
+        p1 = cs_amd (Aorig, 3) ;
+        if (any (sort (p1) ~= 1:n))
+            error ('not perm!') ;
+        end
+
+        subplot (2,3,4) ; spy (Aorig)
+        subplot (2,3,5) ; spy (Aorig (:,p0)) ; title ('colamd') ;
+        subplot (2,3,6) ; spy (Aorig (:,p1)) ; title ('cs amd(A''A)') ;
+        lnz0 = sum (symbfact (Aorig (:,p0), 'col')) ;
+        lnz1 = sum (symbfact (Aorig (:,p1), 'col')) ;
+        fprintf ('                    A''A: %7d %7d %9.4f\n', ...
+            lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ;
+        drawnow
+
+        % pause
 
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test17.m b/CXSparse_newfiles/MATLAB/Test/test17.m
index 1ab9406..99e5327 100644
--- a/CXSparse_newfiles/MATLAB/Test/test17.m
+++ b/CXSparse_newfiles/MATLAB/Test/test17.m
@@ -5,9 +5,7 @@ function test17
 %   test17
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 clf
@@ -24,7 +22,7 @@ for trials = 1:100
 
     A = sprandn (m, n, d) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
 
@@ -44,7 +42,7 @@ for trials = 1:100
     disp ('err = ') ;
     disp (err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     m2 = size (Q1,1) ;
@@ -68,18 +66,18 @@ for trials = 1:100
     err3 = norm (Q3*R3 - A, 1) ;
 
     fprintf ('m %3d m2 %3d n %3d    ::: %3d     %6.2e %6.2e\n', ...
-	m, m2, n, m2-m, err1, err3) ;
+        m, m2, n, m2-m, err1, err3) ;
 
     if (err1 > 1e-12)
-	error ('2!') ;
+        error ('2!') ;
     end
 
 %    if (err2 > 1e-12)
-%	error ('!') ;
+%       error ('!') ;
 %    end
 
     if (err3 > 1e-12)
-	error ('3!') ;
+        error ('3!') ;
     end
 
 try
@@ -103,7 +101,7 @@ try
     r3 = norm (A(:,q1)*x3(1:n)-b) ;
 
     fprintf ('least sq:  %6.2e %6.2e %6.2e diff %6.2e %6.2e\n', ...
-	r1, r2, r3, r1-r2, r1-r3) ;
+        r1, r2, r3, r1-r2, r1-r3) ;
 
 catch
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test18.m b/CXSparse_newfiles/MATLAB/Test/test18.m
index b2d9339..3dc46d0 100644
--- a/CXSparse_newfiles/MATLAB/Test/test18.m
+++ b/CXSparse_newfiles/MATLAB/Test/test18.m
@@ -5,9 +5,7 @@ function test18
 %   test18
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -21,8 +19,8 @@ for i = f
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     b = rand (n,1) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/test19.m b/CXSparse_newfiles/MATLAB/Test/test19.m
index 6143241..bdad84b 100644
--- a/CXSparse_newfiles/MATLAB/Test/test19.m
+++ b/CXSparse_newfiles/MATLAB/Test/test19.m
@@ -5,9 +5,7 @@ function test19
 %   test19
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -44,13 +42,13 @@ for trials = 1:100
     pp2 = cs_dmperm (A) ;
     spr2 = sum (pp2 > 0) ;
     if (spr2 ~= sprnk)
-	error ('!')
+        error ('!')
     end
 
     pp2 = cs_maxtransr (A) ;
     spr2 = sum (pp2 > 0) ;
     if (spr2 ~= sprnk)
-	error ('!')
+        error ('!')
     end
 
     [p,q,r,s] = dmperm (A) ;
@@ -68,41 +66,41 @@ for trials = 1:100
     hold on
 
     for k = 1:nk
-	r1 = r(k) ;
-	r2 = r(k+1) ;
-	c1 = s(k)  ;
-	c2 = s(k+1) ;
-	plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        r1 = r(k) ;
+        r2 = r(k+1) ;
+        c1 = s(k)  ;
+        c2 = s(k+1) ;
+        plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
     end
 
     [p2,q2,rr2,ss2,cp,rp] = cs_dmperm (A) ;
 
     if (min (m,n) > 0)
-	if (length (rr2) ~= length (r))
-	    error ('# fine blocks!') ;
-	end
+        if (length (rr2) ~= length (r))
+            error ('# fine blocks!') ;
+        end
     end
 
     if (rp (4) - 1 ~= sprnk)
-	rp		%#ok
-	sprnk		%#ok
-	error ('!') ;
+        rp              %#ok
+        sprnk           %#ok
+        error ('!') ;
     end
 
     if (any (sort (p2) ~= 1:m))
-	error ('p2!') ;
+        error ('p2!') ;
     end
 
     if (any (sort (q2) ~= 1:n))
-	error ('q2!') ;
+        error ('q2!') ;
     end
 
     if (cp (5) ~= n+1)
-	error ('cp!') ;
+        error ('cp!') ;
     end
 
     if (rp (5) ~= m+1)
-	error ('rp!') ;
+        error ('rp!') ;
     end
 
     C = A (p2,q2) ;
@@ -127,7 +125,7 @@ for trials = 1:100
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C1 diag!') ;
+        error ('C1 diag!') ;
     end
 
     r1 = rp(2) ;
@@ -138,7 +136,7 @@ for trials = 1:100
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C2 diag!') ;
+        error ('C2 diag!') ;
     end
 
     r1 = rp(3) ;
@@ -149,52 +147,52 @@ for trials = 1:100
 
     B = C (r1:r2-1, c1:c2-1) ;
     if (nnz (diag (B)) ~= size (B,1))
-	error ('C3 diag!') ;
+        error ('C3 diag!') ;
     end
 
-    r1 = rp(4) ;							    %#ok
-    r2 = rp(5) ;							    %#ok
-    c1 = cp(4) ;							    %#ok
-    c2 = cp(5) ;							    %#ok
+    r1 = rp(4) ;                                                            %#ok
+    r2 = rp(5) ;                                                            %#ok
+    c1 = cp(4) ;                                                            %#ok
+    c2 = cp(5) ;                                                            %#ok
     % plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
 
     if (~isempty (S))
 
-	[p1,q1,r0,s0] = dmperm (S) ;
-	[p3,r3] = cs_scc (S) ;
-	if (length (r3) ~= length (r0))
-	    error ('scc size!') ;
-	end
-
-	if (any (sort (p3) ~= 1:m))
-	    error ('scc perm!') ;
-	end
-
-	nk = length (r0)-1 ;
-
-	subplot (2,3,4) ;
-	hold off
-	spy (S (p1,q1)) ;
-	hold on
-	for k = 1:nk
-	    r1 = r0(k) ;
-	    r2 = r0(k+1) ;
-	    c1 = s0(k)  ;
-	    c2 = s0(k+1) ;
-	    plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
-	end
-
-	subplot (2,3,5) ;
-	hold off
-	spy (S (p3,p3)) ;
-	hold on
-	for k = 1:nk
-	    r1 = r3(k) ;
-	    r2 = r3(k+1) ;
-	    c1 = r3(k)  ;
-	    c2 = r3(k+1) ;
-	    plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
-	end
+        [p1,q1,r0,s0] = dmperm (S) ;
+        [p3,r3] = cs_scc (S) ;
+        if (length (r3) ~= length (r0))
+            error ('scc size!') ;
+        end
+
+        if (any (sort (p3) ~= 1:m))
+            error ('scc perm!') ;
+        end
+
+        nk = length (r0)-1 ;
+
+        subplot (2,3,4) ;
+        hold off
+        spy (S (p1,q1)) ;
+        hold on
+        for k = 1:nk
+            r1 = r0(k) ;
+            r2 = r0(k+1) ;
+            c1 = s0(k)  ;
+            c2 = s0(k+1) ;
+            plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        end
+
+        subplot (2,3,5) ;
+        hold off
+        spy (S (p3,p3)) ;
+        hold on
+        for k = 1:nk
+            r1 = r3(k) ;
+            r2 = r3(k+1) ;
+            c1 = r3(k)  ;
+            c2 = r3(k+1) ;
+            plot ([c1 c2 c2 c1 c1]-.5, [r1 r1 r2 r2 r1]-.5, 'g') ;
+        end
 
     end
 
diff --git a/CXSparse_newfiles/MATLAB/Test/test2.m b/CXSparse_newfiles/MATLAB/Test/test2.m
index 6d603fa..ee40429 100644
--- a/CXSparse_newfiles/MATLAB/Test/test2.m
+++ b/CXSparse_newfiles/MATLAB/Test/test2.m
@@ -5,8 +5,7 @@ function test2
 %   test2
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 % clf
@@ -30,29 +29,29 @@ for trial = 1:100
     B = cs_sparse (i,j,x) ;
     D = cs_sparse2 (i,j,x) ;
     fprintf ('%3d %3d %6d : %6d %6d : %d\n', ...
-	m, n, nz, nnz (A), nnz(B), nz-nnz(A)) ;
+        m, n, nz, nnz (A), nnz(B), nz-nnz(A)) ;
 
     err = norm (A-B,1) / max (1, norm (A,1)) ;
     if (err > 0)
-	disp ('err = ') ;
-	disp (err) ;
+        disp ('err = ') ;
+        disp (err) ;
     end
     if (err > 1e-14)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (nnz (B-D) > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
     if (nnz (A) ~= nnz (B))
-	error ('nz!') ;
+        error ('nz!') ;
     end
 
     if (max (1,nnz (B)) ~= max (1,nzmax (B)))
-	nnz (B)
-	nzmax (B)
-	error ('nzmax!') ;
+        nnz (B)
+        nzmax (B)
+        error ('nzmax!') ;
     end
     % pack
 
@@ -64,7 +63,7 @@ for trial = 1:100
     C2 = cs_permute (A,p,q) ;
     err = norm (C1-C2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
 %    subplot (1,2,1) ; spy (A)
@@ -84,12 +83,12 @@ for trial = 1:100
 
     err = norm (x1-x2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
     x1 = zeros (m,1) ;
-    x1 (p) = x ;							    %#ok
-    x2 = cs_ipvec (x, p) ;						    %#ok
+    x1 (p) = x ;                                                            %#ok
+    x2 = cs_ipvec (x, p) ;                                                  %#ok
 
     n = min (m,n) ;
     B = A (1:n, 1:n) ;
@@ -100,14 +99,14 @@ for trial = 1:100
     C2 = cs_symperm (B,p) ;
 
     try
-	pp = amd (C2) ;							    %#ok
+        pp = amd (C2) ;                                                     %#ok
     catch
-	pp = symamd (C2) ;						    %#ok
+        pp = symamd (C2) ;                                                  %#ok
     end
 
     err = norm (C1-C2,1) ;
     if (err > 0)
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test20.m b/CXSparse_newfiles/MATLAB/Test/test20.m
index d2264ae..8d6dac7 100644
--- a/CXSparse_newfiles/MATLAB/Test/test20.m
+++ b/CXSparse_newfiles/MATLAB/Test/test20.m
@@ -5,9 +5,7 @@ function test20
 %   test20
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -28,9 +26,9 @@ for trials = 1:100
     A1 = A*A' + n*eye (n) ;
 
     try
-	L1 = chol (A1)' ;
+        L1 = chol (A1)' ;
     catch
-	continue ;
+        continue ;
     end
     err1 = norm (L1*L1'-A1) ;
 
@@ -46,7 +44,7 @@ for trials = 1:100
     err2b = norm (L2b*L2b'-A2) ;
 
     % try a downdate
-    L1b = chol_updown2 (L2, -1, w) ;					    %#ok
+    L1b = chol_updown2 (L2, -1, w) ;                                        %#ok
     err1b = norm (L1b*L1b'-A1) ;
 
 
diff --git a/CXSparse_newfiles/MATLAB/Test/test21.m b/CXSparse_newfiles/MATLAB/Test/test21.m
index 37ce99b..1f6f47c 100644
--- a/CXSparse_newfiles/MATLAB/Test/test21.m
+++ b/CXSparse_newfiles/MATLAB/Test/test21.m
@@ -5,9 +5,7 @@ function test21
 %   test21
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 rand ('state', 0) ;
@@ -17,9 +15,9 @@ clf
 
 for trials = 1:100
     if (trials <= 1)
-	n = trials ;
+        n = trials ;
     else
-	n = 1+fix (100 * rand (1)) ;
+        n = 1+fix (100 * rand (1)) ;
     end
     fprintf ('n: %d\n', n) ;
     d = 0.1 * rand (1) ;
@@ -33,16 +31,16 @@ for trials = 1:100
 
     A = A+A' + 100 * speye (n) ;
     try
-	p = amd (A) ;
+        p = amd (A) ;
     catch
-	p = symamd (A) ;
+        p = symamd (A) ;
     end
     A = sparse (A (p,p)) ;
 
     try
-	L = chol (A)' ;
+        L = chol (A)' ;
     catch
-	continue ;
+        continue ;
     end
 
     parent = etree (A) ;
@@ -51,8 +49,8 @@ for trials = 1:100
     spy (A) ;
 
     if (n > 0)
-	subplot (1,3,2) ;
-	treeplot (parent) ;
+        subplot (1,3,2) ;
+        treeplot (parent) ;
     end
 
     subplot (1,3,3) ;
@@ -62,55 +60,55 @@ for trials = 1:100
 
     for trials2 = 1:10
 
-	k = 1+fix (n * rand (1)) ;
-	if (k <= 0 | k > n)						    %#ok
-	    k = 1 ;
-	end
+        k = 1+fix (n * rand (1)) ;
+        if (k <= 0 | k > n)                                                 %#ok
+            k = 1 ;
+        end
 
-	w = sprandn (L (:,k)) ;
-	Anew = A + w*w' ;
+        w = sprandn (L (:,k)) ;
+        Anew = A + w*w' ;
 
-	Lnew = cs_updown (L, w, parent) ;
-	err6 = norm (Lnew*Lnew' - Anew, 1) ;
+        Lnew = cs_updown (L, w, parent) ;
+        err6 = norm (Lnew*Lnew' - Anew, 1) ;
 
-	Lnew = cs_updown (L, w, parent, '+') ;
-	err7 = norm (Lnew*Lnew' - Anew, 1) ;
+        Lnew = cs_updown (L, w, parent, '+') ;
+        err7 = norm (Lnew*Lnew' - Anew, 1) ;
 
-	[Lnew, wnew] = chol_updown2 (L, 1, w) ;
-	err2 = norm (Lnew*Lnew' - Anew, 1) ;
-	err10 = norm (wnew - (L\w)) ;
+        [Lnew, wnew] = chol_updown2 (L, 1, w) ;
+        err2 = norm (Lnew*Lnew' - Anew, 1) ;
+        err10 = norm (wnew - (L\w)) ;
 
-	L3 = chol_updown2 (L, +1, w) ;
-	err9 = norm (L3*L3' - Anew, 1) ;
+        L3 = chol_updown2 (L, +1, w) ;
+        err9 = norm (L3*L3' - Anew, 1) ;
 
 
 
-	[L2, wnew] = chol_updown2 (Lnew, -1, w) ;
-	err3 = norm (L2*L2' - A, 1) ;
-	err11 = norm (wnew - (Lnew\w)) ;
+        [L2, wnew] = chol_updown2 (Lnew, -1, w) ;
+        err3 = norm (L2*L2' - A, 1) ;
+        err11 = norm (wnew - (Lnew\w)) ;
 
-	L2 = cs_updown (Lnew, w, parent, '-') ;
-	err5 = norm (L2*L2' - A, 1) ;
+        L2 = cs_updown (Lnew, w, parent, '-') ;
+        err5 = norm (L2*L2' - A, 1) ;
 
-	L2 = chol_updown2 (Lnew, -1, w) ;
-	err8 = norm (L2*L2' - A, 1) ;
+        L2 = chol_updown2 (Lnew, -1, w) ;
+        err8 = norm (L2*L2' - A, 1) ;
 
-	err = max ([err2 err3 err5 err6 err7 err9 err8 err10 err11]) ;
+        err = max ([err2 err3 err5 err6 err7 err9 err8 err10 err11]) ;
 
-	fprintf ('   k %3d  %6.2e\n', k, err) ;
+        fprintf ('   k %3d  %6.2e\n', k, err) ;
 
-	if (err > 1e-11)
-	    err2	%#ok
-	    err3	%#ok
-	    err5	%#ok
-	    err6	%#ok
-	    err7	%#ok
-	    err8	%#ok
-	    err9	%#ok
-	    err10	%#ok
-	    err11	%#ok
-	    pause
-	end
+        if (err > 1e-11)
+            err2        %#ok
+            err3        %#ok
+            err5        %#ok
+            err6        %#ok
+            err7        %#ok
+            err8        %#ok
+            err9        %#ok
+            err10       %#ok
+            err11       %#ok
+            pause
+        end
 
 
     end
diff --git a/CXSparse_newfiles/MATLAB/Test/test22.m b/CXSparse_newfiles/MATLAB/Test/test22.m
index ab32370..13df834 100644
--- a/CXSparse_newfiles/MATLAB/Test/test22.m
+++ b/CXSparse_newfiles/MATLAB/Test/test22.m
@@ -5,9 +5,7 @@ function test22
 %   test22
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -29,16 +27,16 @@ for k = 1:length (f)
     disp (Prob) ;
     A = Prob.A ;
     [m n] = size (A) ;
-    if (~isreal (A) | m ~= n)						    %#ok
-	continue
+    if (~isreal (A) | m ~= n)                                               %#ok
+        continue
     end
 
     c1 = condest (A) ;
     c2 = cond1est (A) ;
     if (c1 == c2)
-	err = 0 ;
+        err = 0 ;
     else
-	err = (c1-c2)/max(1,c1) ;
+        err = (c1-c2)/max(1,c1) ;
     end
 
     c3 = cond (full (A), 1) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/test23.m b/CXSparse_newfiles/MATLAB/Test/test23.m
index d4c12e6..d12d6ab 100644
--- a/CXSparse_newfiles/MATLAB/Test/test23.m
+++ b/CXSparse_newfiles/MATLAB/Test/test23.m
@@ -5,8 +5,7 @@ function test23
 %   test23
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
diff --git a/CXSparse_newfiles/MATLAB/Test/test24.m b/CXSparse_newfiles/MATLAB/Test/test24.m
index 0134224..c5a6843 100644
--- a/CXSparse_newfiles/MATLAB/Test/test24.m
+++ b/CXSparse_newfiles/MATLAB/Test/test24.m
@@ -5,9 +5,7 @@ function test24
 %   test24
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length (f)
     A = real (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     S = A ;
diff --git a/CXSparse_newfiles/MATLAB/Test/test25.m b/CXSparse_newfiles/MATLAB/Test/test25.m
index 26c488d..dfa0efc 100644
--- a/CXSparse_newfiles/MATLAB/Test/test25.m
+++ b/CXSparse_newfiles/MATLAB/Test/test25.m
@@ -5,9 +5,7 @@ function test25
 %   test25
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -26,7 +24,7 @@ for k = 1:length (f)
     A = real (Prob.A) ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     A = A|A' ;
@@ -46,7 +44,7 @@ for k = 1:length (f)
     p2 = cs_nd (sparse (1)) ;
     toc ;
     if (p2 ~= 1)
-	error ('!') ;
+        error ('!') ;
     end
 
     tic ;
@@ -54,7 +52,7 @@ for k = 1:length (f)
     t2 = toc ;
 
     if (any (sort (p2) ~= 1:n))
-	error ('!') ;
+        error ('!') ;
     end
 
     rel = t2 / max (t1,1e-6) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/test26.m b/CXSparse_newfiles/MATLAB/Test/test26.m
index 7e3ddb2..8d274f0 100644
--- a/CXSparse_newfiles/MATLAB/Test/test26.m
+++ b/CXSparse_newfiles/MATLAB/Test/test26.m
@@ -5,9 +5,7 @@ function test26
 %   test26
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
@@ -47,14 +45,14 @@ for trials = 1:ntrials
     end
     % MATLAB cannot do A\b when A is sparse and rectangular and either
     % A or b are complex
-    if (m ~= n & isreal (A) & ~isreal (b))				    %#ok
-	x1 = (A\real(b)) + 1i * (A\imag(b)) ;
-	err1 = norm (A*x1-b) ;
-    elseif ((m ~= n) & ~isreal (A))					    %#ok
-	err1 = 1 ;
+    if (m ~= n & isreal (A) & ~isreal (b))                                  %#ok
+        x1 = (A\real(b)) + 1i * (A\imag(b)) ;
+        err1 = norm (A*x1-b) ;
+    elseif ((m ~= n) & ~isreal (A))                                         %#ok
+        err1 = 1 ;
     else
-	x1 = A\b ;
-	err1 = norm (A*x1-b) ;
+        x1 = A\b ;
+        err1 = norm (A*x1-b) ;
     end
 
     x2 = cs_dmsol (A,b) ; 
@@ -65,17 +63,17 @@ for trials = 1:ntrials
     lerr2 = log10 (max (err2, eps)) ;
 
     fprintf ('rank: %3d %3d err %6.2e  %6.2e  :   %6.1f\n', ...
-	sprank(A), rank(full(A)), err1, err2, lerr1 - lerr2) ;
+        sprank(A), rank(full(A)), err1, err2, lerr1 - lerr2) ;
 
     if (isnan (err1))
-	lerr1 = 10 ;
+        lerr1 = 10 ;
     end
     if (isnan (err2))
-	lerr2 = 10 ;
+        lerr2 = 10 ;
     end
 
     if (lerr2 > lerr1 + 5)
-	% pause
+        % pause
     end
 
     e1 (trials) = lerr1 ;
diff --git a/CXSparse_newfiles/MATLAB/Test/test27.m b/CXSparse_newfiles/MATLAB/Test/test27.m
index 3c1418c..76dc202 100644
--- a/CXSparse_newfiles/MATLAB/Test/test27.m
+++ b/CXSparse_newfiles/MATLAB/Test/test27.m
@@ -5,10 +5,7 @@ function test27
 %   test27
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 rand ('state', 0) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/test28.m b/CXSparse_newfiles/MATLAB/Test/test28.m
index a64c5ce..4b9a277 100644
--- a/CXSparse_newfiles/MATLAB/Test/test28.m
+++ b/CXSparse_newfiles/MATLAB/Test/test28.m
@@ -5,20 +5,19 @@ function test28
 %   test28
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear functions
 
 rand ('state', 0) ;
 for n = 1:100
     for trials = 1:1000
-	p = cs_randperm (n, rand) ;
-	if (any (sort (p) ~= 1:n))
-	    n		%#ok
-	    p		%#ok
-	    error ('!')
-	end
+        p = cs_randperm (n, rand) ;
+        if (any (sort (p) ~= 1:n))
+            n           %#ok
+            p           %#ok
+            error ('!')
+        end
     end
 end
 
@@ -72,48 +71,48 @@ for k = 1:nmat
     fprintf (' %8.2f', t3) ;
     T3 (k) = t3 ;
 
-    if (sprank1 ~= sprank2 | sprank1 ~= sprank3)			    %#ok
-	error ('!') ;
+    if (sprank1 ~= sprank2 | sprank1 ~= sprank3)                            %#ok
+        error ('!') ;
     end
 
     tic
-    [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ;				    %#ok
+    [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ;                                 %#ok
     d1 = toc ;
     fprintf (' %8.2f', d1) ;
     D1 (k) = d1 ;
 
     tic
-    [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ;				    %#ok
+    [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ;                               %#ok
     d2 = toc ;
     fprintf (' %8.2f', d2) ;
     D2 (k) = d2 ;
 
     tic
-    [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ;				    %#ok
+    [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ;                              %#ok
     d3 = toc ;
     fprintf (' %8.2f\n', d3) ;
     D3 (k) = d3 ;
 
     if (sprank1 == max (m,n))
-	nz1 = nnz (diag (A (p1,q1))) ;
-	nz2 = nnz (diag (A (p2,q2))) ;
-	nz3 = nnz (diag (A (p3,q3))) ;
+        nz1 = nnz (diag (A (p1,q1))) ;
+        nz2 = nnz (diag (A (p2,q2))) ;
+        nz3 = nnz (diag (A (p3,q3))) ;
 
-	if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3)		    %#ok
-	    error ('!')
-	end
+        if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3)               %#ok
+            error ('!')
+        end
     end
 
     subplot (1,2,1)
     loglog (T1 (1:k), T2 (1:k), 'x', ...
-	T1 (1:k), T3 (1:k), 'go', ...
-	[1e-5 1e3], [1e-5 1e3], 'r-') ; 
+        T1 (1:k), T3 (1:k), 'go', ...
+        [1e-5 1e3], [1e-5 1e3], 'r-') ; 
     axis equal
 
     subplot (1,2,2)
     loglog (D1 (1:k), D2 (1:k), 'x', ...
-	D1 (1:k), D3 (1:k), 'go', ...
-	[1e-5 1e3], [1e-5 1e3], 'r-') ; 
+        D1 (1:k), D3 (1:k), 'go', ...
+        [1e-5 1e3], [1e-5 1e3], 'r-') ; 
     axis equal
 
     drawnow
diff --git a/CXSparse_newfiles/MATLAB/Test/test3.m b/CXSparse_newfiles/MATLAB/Test/test3.m
index de3037d..f4e47ea 100644
--- a/CXSparse_newfiles/MATLAB/Test/test3.m
+++ b/CXSparse_newfiles/MATLAB/Test/test3.m
@@ -5,8 +5,7 @@ function test3
 %   test3
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 clear
 index = UFget ;
@@ -23,28 +22,28 @@ for i = f
 
     for cmplex = 0:double(~ispc)
 
-	A = Prob.A ;
-	[m n] = size (A) ;
-	if (m ~= n)
-	    continue
-	end
-
-	if (cmplex)
-	    A = A + 1i*sprand(A) ;
-	end
-
-	A = A*A' + 2*n*speye (n) ;
-	try
-	    p = amd (A) ;
-	catch
-	    p = symamd (A) ;
-	end
-	try
-	    L0 = chol (A)' ;
-	catch
-	    continue
-	end
-	b = rand (n,1) ;
+        A = Prob.A ;
+        [m n] = size (A) ;
+        if (m ~= n)
+            continue
+        end
+
+        if (cmplex)
+            A = A + 1i*sprand(A) ;
+        end
+
+        A = A*A' + 2*n*speye (n) ;
+        try
+            p = amd (A) ;
+        catch
+            p = symamd (A) ;
+        end
+        try
+            L0 = chol (A)' ;
+        catch
+            continue
+        end
+        b = rand (n,1) ;
 
         if (~ispc)
             if (mod (i,2) == 1)
@@ -52,61 +51,61 @@ for i = f
             end
         end
 
-	C = A(p,p) ;
-	c = condest (C) ;
-	fprintf ('condest: %g\n', c) ;
-
-	x1 = L0\b ;
-	x2 = cs_lsolve (L0,b) ;
-	err = norm (x1-x2,1) ;
-	if (err > 1e-12 * c)
-	    error ('!') ;
-	end
-
-	x1 = L0'\b ;
-	x2 = cs_ltsolve (L0,b) ;
-	err = norm (x1-x2,1) ;
-	if (err > 1e-10 * c)
-	    error ('!') ;
-	end
-
-	U = L0' ;
-
-	x1 = U\b ;
-	x2 = cs_usolve (U,b) ;
-	err = norm (x1-x2,1) ;
-	if (err > 1e-10 * c)
-	    error ('!') ;
-	end
-
-	L2 = cs_chol (A) ;
-	subplot (2,3,1) ; spy (L0) ;
-	subplot (2,3,4) ; spy (L2) ;
-	err = norm (L0-L2,1) ;
-	if (err > 1e-8 * c)
-	    error ('!') ;
-	end
-
-	L1 = chol (C)' ;
-	L2 = cs_chol (C) ;
-	subplot (2,3,2) ; spy (L1) ;
-	subplot (2,3,5) ; spy (L2) ;
-	err = norm (L1-L2,1) ;
-	if (err > 1e-8 * c)
-	    error ('!') ;
-	end
-
-	[L3,p] = cs_chol (A) ;
-	C = A(p,p) ;
-	L4 = chol (C)' ;
-	subplot (2,3,3) ; spy (L4) ;
-	subplot (2,3,6) ; spy (L3) ;
-	err = norm (L4-L3,1) ;
-	if (err > 1e-8 * c)
-	    error ('!') ;
-	end
-
-	drawnow
+        C = A(p,p) ;
+        c = condest (C) ;
+        fprintf ('condest: %g\n', c) ;
+
+        x1 = L0\b ;
+        x2 = cs_lsolve (L0,b) ;
+        err = norm (x1-x2,1) ;
+        if (err > 1e-12 * c)
+            error ('!') ;
+        end
+
+        x1 = L0'\b ;
+        x2 = cs_ltsolve (L0,b) ;
+        err = norm (x1-x2,1) ;
+        if (err > 1e-10 * c)
+            error ('!') ;
+        end
+
+        U = L0' ;
+
+        x1 = U\b ;
+        x2 = cs_usolve (U,b) ;
+        err = norm (x1-x2,1) ;
+        if (err > 1e-10 * c)
+            error ('!') ;
+        end
+
+        L2 = cs_chol (A) ;
+        subplot (2,3,1) ; spy (L0) ;
+        subplot (2,3,4) ; spy (L2) ;
+        err = norm (L0-L2,1) ;
+        if (err > 1e-8 * c)
+            error ('!') ;
+        end
+
+        L1 = chol (C)' ;
+        L2 = cs_chol (C) ;
+        subplot (2,3,2) ; spy (L1) ;
+        subplot (2,3,5) ; spy (L2) ;
+        err = norm (L1-L2,1) ;
+        if (err > 1e-8 * c)
+            error ('!') ;
+        end
+
+        [L3,p] = cs_chol (A) ;
+        C = A(p,p) ;
+        L4 = chol (C)' ;
+        subplot (2,3,3) ; spy (L4) ;
+        subplot (2,3,6) ; spy (L3) ;
+        err = norm (L4-L3,1) ;
+        if (err > 1e-8 * c)
+            error ('!') ;
+        end
+
+        drawnow
 
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test4.m b/CXSparse_newfiles/MATLAB/Test/test4.m
index 7e884bc..83c7d3a 100644
--- a/CXSparse_newfiles/MATLAB/Test/test4.m
+++ b/CXSparse_newfiles/MATLAB/Test/test4.m
@@ -5,9 +5,7 @@ function test4
 %   test4
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -32,12 +30,12 @@ for trial = 1:100
     D = cs_multiply (A,B) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d k %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, k, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, k, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test5.m b/CXSparse_newfiles/MATLAB/Test/test5.m
index 60f0081..bc34a12 100644
--- a/CXSparse_newfiles/MATLAB/Test/test5.m
+++ b/CXSparse_newfiles/MATLAB/Test/test5.m
@@ -5,9 +5,7 @@ function test5
 %   test5
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -31,13 +29,13 @@ for trial = 1:200
     D = cs_add (A,B) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     alpha = pi ;
@@ -56,26 +54,26 @@ for trial = 1:200
     D = cs_add (A,B,alpha) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
     C = alpha*A + beta*B ;
     D = cs_add (A,B,alpha,beta) ;
     err = nnz (spones (C) - spones (D)) ;
     if (err > 0)
-	error ('nz!') ;
+        error ('nz!') ;
     end
     err = norm (C-D,1) ;
     fprintf ('m %3d n %3d nnz(A) %6d nnz(B) %6d nnz(C) %6d err %g\n', ...
-	m, n, nnz(A), nnz(B), nnz(C), err) ;
+        m, n, nnz(A), nnz(B), nnz(C), err) ;
     if (err > 1e-12)
-	error ('!') ;
+        error ('!') ;
     end
 
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test6.m b/CXSparse_newfiles/MATLAB/Test/test6.m
index 9c89a74..acaeff5 100644
--- a/CXSparse_newfiles/MATLAB/Test/test6.m
+++ b/CXSparse_newfiles/MATLAB/Test/test6.m
@@ -5,8 +5,7 @@ function test6
 %   test6
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0)
 maxerr = 0 ;
@@ -28,81 +27,86 @@ for trial = 1:201
 
     for uplo = 0:1
 
-	if (uplo == 1)
-	    % solve Ux=b instead ;
-	    L = L' ;
-	end
-
-	x = L\b ;
-	sr = 1 + cs_reachr (L,b) ;
-	sz = 1 + cs_reachr (L,b) ;
-
-	check_if_same (sr,sz) ;
-
-	s2 = 1 + cs_reach (L,b) ;
-
-	try
-	    if (uplo == 0)
-		x3 = cs_lsolve (L,b) ;
-	    else
-		x3 = cs_usolve (L,b) ;
-	    end
-	catch
-	    if (isreal (L) & isreal (b))				    %#ok
-		lasterr
-		error ('!') ;
-	    end
-	    % punt: sparse(L)\sparse(b) not handled by cs_lsolve or cs_usolve
-	    x3 = L\b ;
-	end
-
-	spy ([L b x x3])
-	drawnow
-
-	s = sort (sr) ;
-	[i j xx] = find (x) ;						    %#ok
-	[i3 j3 xx3] = find (x3) ;					    %#ok
-
-	if (isempty (i))
-	    if (~isempty (s))
-		i	%#ok
-		s	%#ok
-		error ('!') ;
-	    end
-	elseif (any (s ~= i))
-	    i	    %#ok
-	    s	    %#ok
-	    error ('!') ;
-	end
-
-	if (isempty (i3))
-	    if (~isempty (s))
-		i3	%#ok
-		s	%#ok
-		error ('!') ;
-	    end
-	elseif (any (s ~= sort (i3)))
-	    s	    %#ok
-	    i3	    %#ok
-	    error ('!') ;
-	end
-
-	if (any (s2 ~= sr))
-	    s2	    %#ok
-	    sr	    %#ok
-	    error ('!') ;
-	end
-
-	err = norm (x-x3,1) ;
-	if (err > 1e-12)
-	    x	    %#ok
-	    x3	    %#ok
-	    uplo    %#ok
-	    err	    %#ok
-	    error ('!') 
-	end
-
-	maxerr = max (maxerr, err) ;
+        if (uplo == 1)
+            % solve Ux=b instead ;
+            L = L' ;
+        end
+
+        x = L\b ;
+        sr = 1 + cs_reachr (L,b) ;
+        sz = 1 + cs_reachr (L,b) ;
+
+        check_if_same (sr,sz) ;
+
+        s2 = 1 + cs_reach (L,b) ;
+
+        try
+            if (uplo == 0)
+                x3 = cs_lsolve (L,b) ;
+            else
+                x3 = cs_usolve (L,b) ;
+            end
+        catch
+            if (isreal (L) & isreal (b))                                    %#ok
+                lasterr
+                error ('!') ;
+            end
+            % punt: sparse(L)\sparse(b) not handled by cs_lsolve or cs_usolve
+            x3 = L\b ;
+        end
+
+        % x3 is NOT returned in sorted order, so it is not a valid MATLAB
+        % sparse matrix.  It might also have explicit zeros.  Double-transpose
+        % it to sort it, and multiply one to remove explicit zeros.
+        x3 = 1 * (x3')' ;
+
+        spy ([L b x x3])
+        drawnow
+
+        s = sort (sr) ;
+        [i j xx] = find (x) ;                                               %#ok
+        [i3 j3 xx3] = find (x3) ;                                           %#ok
+
+        if (isempty (i))
+            if (~isempty (s))
+                i       %#ok
+                s       %#ok
+                error ('!') ;
+            end
+        elseif (any (s ~= i))
+            i       %#ok
+            s       %#ok
+            error ('!') ;
+        end
+
+        if (isempty (i3))
+            if (~isempty (s))
+                i3      %#ok
+                s       %#ok
+                error ('!') ;
+            end
+        elseif (any (s ~= sort (i3)))
+            s       %#ok
+            i3      %#ok
+            error ('!') ;
+        end
+
+        if (any (s2 ~= sr))
+            s2      %#ok
+            sr      %#ok
+            error ('!') ;
+        end
+
+        err = norm (x-x3,1) ;
+        if (err > 1e-12)
+            x       %#ok
+            x3      %#ok
+            uplo    %#ok
+            err     %#ok
+            error ('!') 
+        end
+
+        maxerr = max (maxerr, err) ;
 
     end
 
diff --git a/CXSparse_newfiles/MATLAB/Test/test7.m b/CXSparse_newfiles/MATLAB/Test/test7.m
index 219ed21..37c8f45 100644
--- a/CXSparse_newfiles/MATLAB/Test/test7.m
+++ b/CXSparse_newfiles/MATLAB/Test/test7.m
@@ -5,8 +5,7 @@ function test7
 %   test7
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -24,111 +23,111 @@ for i = f
 
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     for cmplex = 0:1
 
-	if (cmplex)
-	    A = A + norm(A,1) * sprand (A) / 3 ;
-	end
+        if (cmplex)
+            A = A + norm(A,1) * sprand (A) / 3 ;
+        end
 
-	[L,U,P] = lu (A) ;
+        [L,U,P] = lu (A) ;
 
-	udiag = full (diag (U)) ;
-	umin = min (abs (udiag)) ;
-	fprintf ('umin %g\n', umin) ;
+        udiag = full (diag (U)) ;
+        umin = min (abs (udiag)) ;
+        fprintf ('umin %g\n', umin) ;
 
-	if (umin > 1e-14)
+        if (umin > 1e-14)
 
-	    [L2,U2,p] = cs_lu (A) ;
+            [L2,U2,p] = cs_lu (A) ;
 
-	    subplot (3,4,1) ; spy (A) ;
-	    subplot (3,4,2) ; spy (A(p,:)) ;
-	    subplot (3,4,3) ; spy (L2) ;
-	    subplot (3,4,4) ; spy (U2) ;
+            subplot (3,4,1) ; spy (A) ;
+            subplot (3,4,2) ; spy (A(p,:)) ;
+            subplot (3,4,3) ; spy (L2) ;
+            subplot (3,4,4) ; spy (U2) ;
 
-	    err1 = norm (L*U-P*A,1) / norm (A,1) ;
-	    err2 = norm (L2*U2-A(p,:),1) / norm (A,1) ;
-	    fprintf ('err %g %g\n', err1, err2) ;
+            err1 = norm (L*U-P*A,1) / norm (A,1) ;
+            err2 = norm (L2*U2-A(p,:),1) / norm (A,1) ;
+            fprintf ('err %g %g\n', err1, err2) ;
 
-	    if (err1 > 1e-10 | err2 > 1e-10)				    %#ok
-		error ('!') ;
-	    end
-	    maxerr1 = max (maxerr1, err1) ;
-	    maxerr2 = max (maxerr2, err2) ;
+            if (err1 > 1e-10 | err2 > 1e-10)                                %#ok
+                error ('!') ;
+            end
+            maxerr1 = max (maxerr1, err1) ;
+            maxerr2 = max (maxerr2, err2) ;
 
-	end
+        end
 
-	q = colamd (A) ;
+        q = colamd (A) ;
 
-	[L,U,P] = lu (A (:,q)) ;
+        [L,U,P] = lu (A (:,q)) ;
 
-	udiag = full (diag (U)) ;
-	umin = min (abs (udiag)) ;
-	fprintf ('umin %g with q\n', umin) ;
+        udiag = full (diag (U)) ;
+        umin = min (abs (udiag)) ;
+        fprintf ('umin %g with q\n', umin) ;
 
-	if (umin > 1e-14)
+        if (umin > 1e-14)
 
-	    [L2,U2,p,q2] = cs_lu (A) ;
+            [L2,U2,p,q2] = cs_lu (A) ;
 
-	    subplot (3,4,5) ; spy (A) ;
-	    subplot (3,4,6) ; spy (A(p,q2)) ;
-	    subplot (3,4,7) ; spy (L2) ;
-	    subplot (3,4,8) ; spy (U2) ;
+            subplot (3,4,5) ; spy (A) ;
+            subplot (3,4,6) ; spy (A(p,q2)) ;
+            subplot (3,4,7) ; spy (L2) ;
+            subplot (3,4,8) ; spy (U2) ;
 
-	    err1 = norm (L*U-P*A(:,q),1) / norm (A,1) ;
-	    err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
-	    fprintf ('err %g %g\n', err1, err2) ;
+            err1 = norm (L*U-P*A(:,q),1) / norm (A,1) ;
+            err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
+            fprintf ('err %g %g\n', err1, err2) ;
 
-	    if (err1 > 1e-10 | err2 > 1e-10)				    %#ok
-		error ('!') ;
-	    end
-	    maxerr1 = max (maxerr1, err1) ;
-	    maxerr2 = max (maxerr2, err2) ;
-	end
+            if (err1 > 1e-10 | err2 > 1e-10)                                %#ok
+                error ('!') ;
+            end
+            maxerr1 = max (maxerr1, err1) ;
+            maxerr2 = max (maxerr2, err2) ;
+        end
 
 
-	try
-	    q = amd (A) ;
-	catch
-	    q = symamd (A) ;
-	end
+        try
+            q = amd (A) ;
+        catch
+            q = symamd (A) ;
+        end
 
-	tol = 0.01 ;
+        tol = 0.01 ;
 
-	[L,U,P] = lu (A (q,q), tol) ;
+        [L,U,P] = lu (A (q,q), tol) ;
 
-	udiag = full (diag (U)) ;
-	umin = min (abs (udiag)) ;
-	fprintf ('umin %g with amd q\n', umin) ;
+        udiag = full (diag (U)) ;
+        umin = min (abs (udiag)) ;
+        fprintf ('umin %g with amd q\n', umin) ;
 
-	if (umin > 1e-14)
+        if (umin > 1e-14)
 
-	    [L2,U2,p,q2] = cs_lu (A,tol) ;
+            [L2,U2,p,q2] = cs_lu (A,tol) ;
 
-	    subplot (3,4,9) ; spy (A) ;
-	    subplot (3,4,10) ; spy (A(p,q2)) ;
-	    subplot (3,4,11) ; spy (L2) ;
-	    subplot (3,4,12) ; spy (U2) ;
+            subplot (3,4,9) ; spy (A) ;
+            subplot (3,4,10) ; spy (A(p,q2)) ;
+            subplot (3,4,11) ; spy (L2) ;
+            subplot (3,4,12) ; spy (U2) ;
 
-	    err1 = norm (L*U-P*A(q,q),1) / norm (A,1) ;
-	    err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
-	    lbig = full (max (max (abs (L2)))) ;
-	    fprintf ('err %g %g lbig %g\n', err1, err2, lbig) ;
-	    if (lbig > 1/tol)
-		error ('L!') ;
-	    end
+            err1 = norm (L*U-P*A(q,q),1) / norm (A,1) ;
+            err2 = norm (L2*U2-A(p,q2),1) / norm (A,1) ;
+            lbig = full (max (max (abs (L2)))) ;
+            fprintf ('err %g %g lbig %g\n', err1, err2, lbig) ;
+            if (lbig > 1/tol)
+                error ('L!') ;
+            end
 
-	    if (err1 > 1e-10 | err2 > 1e-10)				    %#ok
-		error ('!') ;
-	    end
-	    maxerr1 = max (maxerr1, err1) ;
-	    maxerr2 = max (maxerr2, err2) ;
-	end
+            if (err1 > 1e-10 | err2 > 1e-10)                                %#ok
+                error ('!') ;
+            end
+            maxerr1 = max (maxerr1, err1) ;
+            maxerr2 = max (maxerr2, err2) ;
+        end
 
-	drawnow
-	% pause
+        drawnow
+        % pause
 
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test8.m b/CXSparse_newfiles/MATLAB/Test/test8.m
index 42806ed..211d3d9 100644
--- a/CXSparse_newfiles/MATLAB/Test/test8.m
+++ b/CXSparse_newfiles/MATLAB/Test/test8.m
@@ -5,8 +5,7 @@ function test8
 %   test8
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 index = UFget ;
 [ignore f] = sort (max (index.nrows, index.ncols)) ;
@@ -20,74 +19,74 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m ~= n)
-	continue
+        continue
     end
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 0.1i * (sprand (tril (A,-1) + triu (A,1))) ;
-	end
+        if (cmplex)
+            A = A + 0.1i * (sprand (tril (A,-1) + triu (A,1))) ;
+        end
 
-	spd = 0 ;
-	if (m == n)
-	    if (nnz (A-A') == 0)
-		try
-		    p = amd (A) ;
-		catch
-		    p = symamd (A) ;
-		end
-		[R,p] = chol (A (p,p)) ;
-		spd = (p == 0) ;
-	    end
-	end
+        spd = 0 ;
+        if (m == n)
+            if (nnz (A-A') == 0)
+                try
+                    p = amd (A) ;
+                catch
+                    p = symamd (A) ;
+                end
+                [R,p] = chol (A (p,p)) ;
+                spd = (p == 0) ;
+            end
+        end
 
-	if (spd)
-	    C = A ;
-	else
-	    C = A*A' + n*speye (n) ;
-	    try
-		p = amd (C) ;
-	    catch
-		p = symamd (C) ;
-	    end
-	    try
-		R = chol (C (p,p)) ;					    %#ok
-	    catch
-		continue
-	    end
-	end
+        if (spd)
+            C = A ;
+        else
+            C = A*A' + n*speye (n) ;
+            try
+                p = amd (C) ;
+            catch
+                p = symamd (C) ;
+            end
+            try
+                R = chol (C (p,p)) ;                                        %#ok
+            catch
+                continue
+            end
+        end
 
-	b = rand (n,1) ;
+        b = rand (n,1) ;
 
-	x1 = C\b ;
-	x2 = cs_cholsol (C,b) ;
-	r1 = norm (C*x1-b,1) / norm (C,1) ;
-	r2 = norm (C*x2-b,1) / norm (C,1) ;
-	err = abs (r1-r2) ;
-	fprintf ('err %g\n', err) ;
-	if (err > 1e-10)
-	    error ('!') ;
-	end
+        x1 = C\b ;
+        x2 = cs_cholsol (C,b) ;
+        r1 = norm (C*x1-b,1) / norm (C,1) ;
+        r2 = norm (C*x2-b,1) / norm (C,1) ;
+        err = abs (r1-r2) ;
+        fprintf ('err %g\n', err) ;
+        if (err > 1e-10)
+            error ('!') ;
+        end
 
-	x2 = cs_lusol (C,b, 1, 0.001) ;
-	r2 = norm (C*x2-b,1) / norm (C,1) ;
-	err = abs (r1-r2) ;
-	fprintf ('err %g (lu with amd(A+A'')\n', err) ;
-	if (err > 1e-10)
-	    error ('!') ;
-	end
+        x2 = cs_lusol (C,b, 1, 0.001) ;
+        r2 = norm (C*x2-b,1) / norm (C,1) ;
+        err = abs (r1-r2) ;
+        fprintf ('err %g (lu with amd(A+A'')\n', err) ;
+        if (err > 1e-10)
+            error ('!') ;
+        end
 
-	if (m ~= n)
-	    continue ;
-	end
+        if (m ~= n)
+            continue ;
+        end
 
-	x1 = A\b ;
-	r1 = norm (A*x1-b,1) / norm (A,1) ;
-	if (r1 < 1e-6)
-	    x2 = cs_lusol (A,b) ;
-	    r2 = norm (A*x2-b,1) / norm (A,1) ;
-	    fprintf ('lu resid %g %g\n', r1, r2) ;
-	end
+        x1 = A\b ;
+        r1 = norm (A*x1-b,1) / norm (A,1) ;
+        if (r1 < 1e-6)
+            x2 = cs_lusol (A,b) ;
+            r2 = norm (A*x2-b,1) / norm (A,1) ;
+            fprintf ('lu resid %g %g\n', r1, r2) ;
+        end
     end
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/test9.m b/CXSparse_newfiles/MATLAB/Test/test9.m
index 2b0293a..d618860 100644
--- a/CXSparse_newfiles/MATLAB/Test/test9.m
+++ b/CXSparse_newfiles/MATLAB/Test/test9.m
@@ -5,8 +5,7 @@ function test9
 %   test9
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 rand ('state', 0) ;
 
@@ -25,62 +24,62 @@ for i = f
     A = Prob.A ;
     [m n] = size (A) ;
     if (m < n)
-	A = A' ;
+        A = A' ;
     end
     [m n] = size (A) ;
     sp = sprank (A) ;
 %    if (sprank (A) < min (m,n))
-%	continue
+%       continue
 %    end
 
 
     for cmplex = 0:double(~ispc)
 
-	if (cmplex)
-	    A = A + 1i * sprand (A) ;
-	end
-
-	Aorig = A ;
-
-	A = A (:, colamd (A)) ;
-	s1 = svd (full (A)) ;
-
-	if (cmplex)
-	    try
-		tic ;
-		R = chol (A'*A) ;
-		t1 = toc ;						    %#ok
-	    catch
-		fprintf ('chol (A''*A) failed\n') ;
-		R = [ ] ;
-	    end
-	else
-	    tic ;
-	    R = qr (A) ;
-	    t1 = toc ;							    %#ok
-	end
-
-	% tic ;
-	% [Q,R] = qr (A) ;
-	% t1 = toc ;
-
-	[c,h,parent] = symbfact (A, 'col') ;
-	rnz = sum (c) ;							    %#ok
-	tic ;
-	[V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
-	t2 = toc ;							    %#ok
-
-	v2 = full (V2) ;
-	if (any (spones (v2) ~= spones (V2)))
-	    error ('got zeros!') ;
-	end
-
-	C = A ;
-	m2 = size (V2,1) ;
-	if (m2 > m)
-	    C = [A ; sparse(m2-m, n)] ;
-	end
-	C = C (p,:) ;
+        if (cmplex)
+            A = A + 1i * sprand (A) ;
+        end
+
+        Aorig = A ;
+
+        A = A (:, colamd (A)) ;
+        s1 = svd (full (A)) ;
+
+        if (cmplex)
+            try
+                tic ;
+                R = chol (A'*A) ;
+                t1 = toc ;                                                  %#ok
+            catch
+                fprintf ('chol (A''*A) failed\n') ;
+                R = [ ] ;
+            end
+        else
+            tic ;
+            R = qr (A) ;
+            t1 = toc ;                                                      %#ok
+        end
+
+        % tic ;
+        % [Q,R] = qr (A) ;
+        % t1 = toc ;
+
+        [c,h,parent] = symbfact (A, 'col') ;
+        rnz = sum (c) ;                                                     %#ok
+        tic ;
+        [V2,Beta2,p,R2] = cs_qr (sparse(A)) ;
+        t2 = toc ;                                                          %#ok
+
+        v2 = full (V2) ;
+        if (any (spones (v2) ~= spones (V2)))
+            error ('got zeros!') ;
+        end
+
+        C = A ;
+        m2 = size (V2,1) ;
+        if (m2 > m)
+            C = [A ; sparse(m2-m, n)] ;
+        end
+        C = C (p,:) ;
 
     %    [H1,R1] = myqr (C) ;
     %    err1 = norm (R1-R2,1) / norm (R1)
@@ -88,47 +87,47 @@ for i = f
     %    s2 = svd (full (R2)) ;
     %    err2 = norm (s1 - s2) / s1 (1) 
     %    fprintf ('%10.6f %10.6f  cs speedup %8.3f sprank %d n %d\n', ...
-    %	t1, t2, t1/t2, sp, n) ;
+    %   t1, t2, t1/t2, sp, n) ;
     %    err2
 
-	% left-looking:
-	[V,Beta3,R3] = qr_left (C) ;					    %#ok
-	s3 = svd (full (R2)) ;
-	err3 = norm (s1 - s3) / s1 (1) ;
-	disp ('err3 = ') ; disp (err3) ;
-	if (err3 > 1e-12)
-	    error ('!') ;
-	end
-
-	% right-looking:
-	[V,Beta4,R4] = qr_right (C) ;					    %#ok
-	s4 = svd (full (R2)) ;
-	err4 = norm (s1 - s4) / s1 (1) ;
-	disp ('err4 = ') ; disp (err4) ;
-	if (err4 > 1e-12)
-	    error ('!') ;
-	end
-
-	% H2 = full (H2)
-	% R2 = full (R2)
-
-	subplot (2,4,1) ; spy (A) ;		title ('A colamd') ;
-	subplot (2,4,2) ; spy (C) ;		title ('A rperm') ;
-	subplot (2,4,3) ; treeplot (parent) ;
-	subplot (2,4,4) ; spy (Aorig) ;	title ('Aorig') ;
-	subplot (2,4,5) ; spy (abs(R2)>0) ;	title ('spqr R, no zeros') ;
-	subplot (2,4,6) ; spy (R) ;		title ('matlab R') ;
-	subplot (2,4,7) ; spy (R2) ;	title ('spqr R') ;
-	subplot (2,4,8) ; spy (V2) ;	title ('spqr V') ;
-	drawnow
+        % left-looking:
+        [V,Beta3,R3] = qr_left (C) ;                                        %#ok
+        s3 = svd (full (R2)) ;
+        err3 = norm (s1 - s3) / s1 (1) ;
+        disp ('err3 = ') ; disp (err3) ;
+        if (err3 > 1e-12)
+            error ('!') ;
+        end
+
+        % right-looking:
+        [V,Beta4,R4] = qr_right (C) ;                                       %#ok
+        s4 = svd (full (R2)) ;
+        err4 = norm (s1 - s4) / s1 (1) ;
+        disp ('err4 = ') ; disp (err4) ;
+        if (err4 > 1e-12)
+            error ('!') ;
+        end
+
+        % H2 = full (H2)
+        % R2 = full (R2)
+
+        subplot (2,4,1) ; spy (A) ;             title ('A colamd') ;
+        subplot (2,4,2) ; spy (C) ;             title ('A rperm') ;
+        subplot (2,4,3) ; treeplot (parent) ;
+        subplot (2,4,4) ; spy (Aorig) ; title ('Aorig') ;
+        subplot (2,4,5) ; spy (abs(R2)>0) ;     title ('spqr R, no zeros') ;
+        subplot (2,4,6) ; spy (R) ;             title ('matlab R') ;
+        subplot (2,4,7) ; spy (R2) ;    title ('spqr R') ;
+        subplot (2,4,8) ; spy (V2) ;    title ('spqr V') ;
+        drawnow
 
     %    if (err2 > 1e-9)
-    %	error ('!') ;
+    %   error ('!') ;
     %    end
-	if (m2 > m)
-	    fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
-	end
-	% pause
+        if (m2 > m)
+            fprintf ('added %d rows, sprank %d n %d\n', m2-m, sp, n) ;
+        end
+        % pause
     end
 
 end
diff --git a/CXSparse_newfiles/MATLAB/Test/testall.m b/CXSparse_newfiles/MATLAB/Test/testall.m
index a3d3534..90de8da 100644
--- a/CXSparse_newfiles/MATLAB/Test/testall.m
+++ b/CXSparse_newfiles/MATLAB/Test/testall.m
@@ -5,12 +5,11 @@ function testall
 %   testall
 % See also: cs_demo
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 h = waitbar (0, 'CXSparse') ;
 
-cs_test_make	    % compile all CSparse, Demo, Text, and Test mexFunctions
+cs_test_make        % compile all CSparse, Demo, Text, and Test mexFunctions
 
 ntests = 29 ;
 
@@ -45,6 +44,7 @@ testwait (28, ntests, h) ; test28 ;
 testwait (29, ntests, h) ; test_qr ;
 
 close (h)
+fprintf ('\nCXSparse: all tests passed\n') ;
 
 function testwait (n,ntests,h)
 fprintf ('\n------------------------ test%d\n', n) ;
diff --git a/CXSparse_newfiles/MATLAB/Test/testh.m b/CXSparse_newfiles/MATLAB/Test/testh.m
index 9f32f27..e650fea 100644
--- a/CXSparse_newfiles/MATLAB/Test/testh.m
+++ b/CXSparse_newfiles/MATLAB/Test/testh.m
@@ -5,9 +5,7 @@ function testh
 %   testh
 % See also: testall
 
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
-
+% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 format long e
 fprintf ('-------------------------------------------------\n') ;
@@ -79,7 +77,7 @@ fprintf ('-------------------------------------------------\n') ;
 
 x = [1 0 0]' ;
 disp (x) ;
-[v, beta, s] = house (x) ;						    %#ok
+[v, beta, s] = house (x) ;                                                  %#ok
 x = x - v*(beta*(v'*x)) ;
 disp (x) ;
 fprintf ('-------------------------------------------------\n') ;
diff --git a/CXSparse_newfiles/MATLAB/cs_install.m b/CXSparse_newfiles/MATLAB/cs_install.m
index 526821b..7b78090 100644
--- a/CXSparse_newfiles/MATLAB/cs_install.m
+++ b/CXSparse_newfiles/MATLAB/cs_install.m
@@ -23,8 +23,7 @@ function cs_install (do_pause)
 %
 %   See also: cs_demo
 %
-%   Copyright 2006-2007, Timothy A. Davis.
-%   http://www.cise.ufl.edu/research/sparse
+%   Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
 
 fprintf ('Compiling and installing CXSparse\n') ;
 if (nargin < 1)
@@ -34,23 +33,34 @@ end
 if (do_pause)
     input ('Hit enter to continue: ') ;
 end
-addpath ([pwd filesep 'CSparse']) ;
-addpath ([pwd filesep 'Demo']) ;
+addpath ([pwd '/CSparse']) ;
+addpath ([pwd '/Demo']) ;
 
-v = getversion ;
-if (v >= 7.0)
-    addpath ([pwd filesep 'UFget']) ;
-else
+if (verLessThan ('matlab', '7.0'))
     fprintf ('UFget not installed (MATLAB 7.0 or later required)\n') ;
+else
+    % install UFget, unless it's already in the path
+    try
+        % if this fails, then UFget is not yet installed
+        index = UFget ;
+        fprintf ('UFget already installed:\n') ;
+        which UFget
+    catch
+        index = [ ] ;
+    end
+    if (isempty (index))
+        % UFget is not installed.  Use ./UFget
+        fprintf ('Installing ./UFget\n') ;
+        try
+            addpath ([pwd '/UFget']) ;
+        catch me
+            disp (me.message) ;
+            fprintf ('UFget not installed\n') ;
+        end
+    end
 end
 
 cd ('CSparse') ;
 cs_make (1) ;
 cd ('../Demo') ;
 cs_demo (do_pause)
-
-%-------------------------------------------------------------------------------
-function v = getversion
-% determine the MATLAB version, and return it as a double.
-v = sscanf (version, '%d.%d.%d') ;
-v = 10.^(0:-1:-(length(v)-1)) * v ;
diff --git a/CXSparse_newfiles/Makefile b/CXSparse_newfiles/Makefile
new file mode 100644
index 0000000..d59dea4
--- /dev/null
+++ b/CXSparse_newfiles/Makefile
@@ -0,0 +1,51 @@
+#------------------------------------------------------------------------------
+# CXSparse Makefile
+#------------------------------------------------------------------------------
+
+VERSION = 3.1.4
+
+default: C
+
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+C:
+	( cd Lib ; $(MAKE) )
+	( cd Demo ; $(MAKE) )
+
+all: C cov
+
+library:
+	( cd Lib ; $(MAKE) )
+
+cov:
+	( cd Tcov ; $(MAKE) )
+
+clean:
+	( cd Lib ; $(MAKE) clean )
+	( cd Demo ; $(MAKE) clean )
+	( cd Tcov ; $(MAKE) clean )
+	( cd MATLAB/CSparse ; $(RM) *.o cs_cl_*.c )
+	( cd MATLAB/Test    ; $(RM) *.o cs_cl_*.c )
+
+purge:
+	( cd Lib ; $(MAKE) purge )
+	( cd Demo ; $(MAKE) purge )
+	( cd Tcov ; $(MAKE) purge )
+	( cd MATLAB/CSparse ; $(RM) *.o cs_cl_*.c *.mex* )
+	( cd MATLAB/Test    ; $(RM) *.o cs_cl_*.c *.mex* )
+
+distclean: purge
+
+# install CSparse
+install:
+	$(CP) Lib/libcxsparse.a $(INSTALL_LIB)/libcxsparse.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libcxsparse.$(VERSION).a libcxsparse.a )
+	$(CP) Include/cs.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libcxsparse*.a
+	chmod 644 $(INSTALL_INCLUDE)/cs.h
+
+# uninstall CSparse
+uninstall:
+	$(RM) $(INSTALL_LIB)/libcxsparse*.a
+	$(RM) $(INSTALL_INCLUDE)/cs.h
+
diff --git a/CXSparse_newfiles/README.txt b/CXSparse_newfiles/README.txt
index b108f66..f1f55bb 100644
--- a/CXSparse_newfiles/README.txt
+++ b/CXSparse_newfiles/README.txt
@@ -1,15 +1,16 @@
-CXSparse: a Concise Sparse Matrix package - Extended.
-Version 2.2.0, Copyright (c) 2006-2007, Timothy A. Davis.
+CXSparse: Copyright (c) 2006-2012, Timothy A. Davis.
+http://www.suitesparse.com
+
 Derived from CSparse.  Conversion originally by David Bateman, Motorola,
 and then modified by Tim Davis.  ANSI C99 is required, with support for
 the _Complex data type.
 (if you use a C++ compiler, the C++ complex type is used instead).
 
 CXSparse is a version of CSparse that operates on both real and complex
-matrices, using either int or UF_long integers.  A UF_long is normally
-just a long on most platforms, but becomes __int64 on WIN64.
-It now includes a MATLAB interface, enabling the use of CXSparse functions on
-both 32-bit and 64-bit platforms.
+matrices, using either int or SuiteSparse_long integers.  A SuiteSparse_long is
+normally just a long on most platforms, but becomes __int64 on WIN64.  It now
+includes a MATLAB interface, enabling the use of CXSparse functions on both
+32-bit and 64-bit platforms.
 
 To install for use in MATLAB, simply type "cs_install" in the MATLAB Command
 Window, while in the CXSparse/MATLAB directory.  (NOTE: Windows users cannot
@@ -39,33 +40,36 @@ uses CSparse may switch to using CXSparse without any changes to the user code.
 Each CXSparse function has a generic version with the same name as the CSparse
 function, and four type-specific versions.  For example:
 
-    cs_add	same as cs_add_di by default, but can be changed to use UF_long
-		integers if user code is compiled with -DCS_LONG, and/or can
-		be changed to operate on complex matrices with -DCS_COMPLEX.
+    cs_add      same as cs_add_di by default, but can be changed to use
+                SuiteSparse_long
+                integers if user code is compiled with -DCS_LONG, and/or can
+                be changed to operate on complex matrices with -DCS_COMPLEX.
 
-    cs_di_add	double/int version of cs_add
-    cs_dl_add	double/UF_long version of cs_add
-    cs_ci_add	complex/int version of cs_add
-    cs_cl_add	complex/UF_long version of cs_add
+    cs_di_add   double/int version of cs_add
+    cs_dl_add   double/SuiteSparse_long version of cs_add
+    cs_ci_add   complex/int version of cs_add
+    cs_cl_add   complex/SuiteSparse_long version of cs_add
 
 The sparse matrix data structures are treated in the same way:  cs, css,
 csn, and csd become cs_di, cs_dis, cs_din, and cs_did for the double/int case,
-cs_cl, cs_cls, cs_cln, and cs_cld for the complex/UF_long case, and so on.
+cs_cl, cs_cls, cs_cln, and cs_cld for the complex/SuiteSparse_long case, and so
+on.
 
 See cs_demo.c for a type-generic user program, and cs_cl_demo.c for a
-type-specific version of the same program (complex/UF_long).
+type-specific version of the same program (complex/SuiteSparse_long).
 
 Several macros are available in CXSparse (but not in CSparse) to allow user
 code to be written in a type-generic manner:
 
-    CS_INT	int by default, UF_long if -DCS_LONG compiler flag is used
-    CS_ENTRY	double by default, double complex if -DCS_COMPLEX flag is used.
-    CS_ID	"%d" or "%ld", for printf and scanf of the CS_INT type.
-    CS_INT_MAX	INT_MAX or LONG_MAX, the largest possible value of CS_INT.
-    CS_REAL(x)	x or creal(x)
-    CS_IMAG(x)	0 or cimag(x)
-    CS_CONJ(x)	x or conj(x)
-    CS_ABS(x)	fabs(x) or cabs(x)
+    CS_INT      int by default, SuiteSparse_long if -DCS_LONG compiler flag
+                is used
+    CS_ENTRY    double by default, double complex if -DCS_COMPLEX flag is used.
+    CS_ID       "%d" or "%ld", for printf and scanf of the CS_INT type.
+    CS_INT_MAX  INT_MAX or LONG_MAX, the largest possible value of CS_INT.
+    CS_REAL(x)  x or creal(x)
+    CS_IMAG(x)  0 or cimag(x)
+    CS_CONJ(x)  x or conj(x)
+    CS_ABS(x)   fabs(x) or cabs(x)
 
 Even the name of the include file (cs.h) is the same.  To use CXSparse instead
 of CSparse, simply compile with -ICXSparse/Source instead of -ICSparse/Source,
@@ -74,14 +78,14 @@ and link against libcxsparse.a instead of the CSparse libcsparse.a library.
 To determine at compile time if CXSparse or CSparse is being used:
 
     #ifdef CXSPARSE
-	CXSparse is in use.  The generic functions equivalent to CSparse may
-	be used (cs_add, etc).  These generic functions can use different
-	types, depending on the -DCS_LONG and -DCS_COMPLEX compile flags, with
-	the default being double/int.  The type-specific functions and data
-	types (cs_di_add, cs_di, CS_INT, etc.) can be used.
+        CXSparse is in use.  The generic functions equivalent to CSparse may
+        be used (cs_add, etc).  These generic functions can use different
+        types, depending on the -DCS_LONG and -DCS_COMPLEX compile flags, with
+        the default being double/int.  The type-specific functions and data
+        types (cs_di_add, cs_di, CS_INT, etc.) can be used.
     #else
-	CSparse is in use.  Only the generic functions "cs_add", etc., are
-	available, and they are of type double/int.
+        CSparse is in use.  Only the generic functions "cs_add", etc., are
+        available, and they are of type double/int.
     #endif
 
 See cs.h for the prototypes of each function, and the book "Direct Methods
@@ -96,263 +100,263 @@ The Householder reflection constructed by cs_house.c also differs slightly, to
 accomodate both the real and complex cases properly.
 
 CXSparse is generated automatically from CSparse.  Refer to
-http://www.cise.ufl.edu/research/sparse/CSparse for details.
+http://www.suitesparse.com for details.
 
 --------------------------------------------------------------------------------
 Contents:
 --------------------------------------------------------------------------------
 
-Demo/		demo C programs that use CXSparse
-Doc/		license and change log
-Makefile	Makefile for the whole package
-MATLAB/		MATLAB interface, demos, and tests for CXSparse
-Matrix/		sample matrices (with extra complex matrices for CXSparse)
-README.txt	this file
-Source/		primary CXSparse source files
-Tcov/		CXSparse tests
+Demo/           demo C programs that use CXSparse
+Doc/            license and change log
+Makefile        Makefile for the whole package
+MATLAB/         MATLAB interface, demos, and tests for CXSparse
+Matrix/         sample matrices (with extra complex matrices for CXSparse)
+README.txt      this file
+Source/         primary CXSparse source files
+Tcov/           CXSparse tests
 
 --------------------------------------------------------------------------------
-./Doc:		license and change log
+./Doc:          license and change log
 --------------------------------------------------------------------------------
 
-ChangeLog	changes in CSparse since first release
-lesser.txt	the GNU LGPL
-License.txt	license (GNU LGPL)
+ChangeLog       changes in CSparse since first release
+lesser.txt      the GNU LGPL
+License.txt     license (GNU LGPL)
 
 --------------------------------------------------------------------------------
-./Source:	Primary source code for CXSparse
+./Source:       Primary source code for CXSparse
 --------------------------------------------------------------------------------
 
-cs_add.c	add sparse matrices
-cs_amd.c	approximate minimum degree
-cs_chol.c	sparse Cholesky
-cs_cholsol.c	x=A\b using sparse Cholesky
-cs_compress.c	convert a compress form to compressed-column form
-cs_counts.c	column counts for Cholesky and QR
-cs_convert.c	convert real to complex and complex to real (not in CSparse)
-cs_cumsum.c	cumulative sum
-cs_dfs.c	depth-first-search
-cs_dmperm.c	Dulmage-Mendelsohn permutation
-cs_droptol.c	drop small entries from a sparse matrix
-cs_dropzeros.c	drop zeros from a sparse matrix
-cs_dupl.c	remove (and sum) duplicates
-cs_entry.c	add an entry to a triplet matrix
-cs_ereach.c	nonzero pattern of Cholesky L(k,:) from etree and triu(A(:,k))
-cs_etree.c	find elimination tree
-cs_fkeep.c	drop entries from a sparse matrix
-cs_gaxpy.c	sparse matrix times dense matrix
-cs.h		include file for CXSparse
-cs_happly.c	apply Householder reflection
-cs_house.c	Householder reflection (*** NOTE: different algo. from CSparse)
-cs_ipvec.c	x(p)=b
-cs_leaf.c	determine if j is a leaf of the skeleton matrix and find lca
-cs_load.c	load a sparse matrix from a file
-cs_lsolve.c	x=L\b
-cs_ltsolve.c	x=L'\b
-cs_lu.c		sparse LU factorization
-cs_lusol.c	x=A\b using sparse LU factorization
-cs_malloc.c	memory manager
-cs_maxtrans.c	maximum transveral (permutation for zero-free diagonal)
-cs_multiply.c	sparse matrix multiply
-cs_norm.c	sparse matrix norm
-cs_permute.c	permute a sparse matrix
-cs_pinv.c	invert a permutation vector
-cs_post.c	postorder an elimination tree
-cs_print.c	print a sparse matrix
-cs_pvec.c	x=b(p)
-cs_qr.c		sparse QR
-cs_qrsol.c	solve a least-squares problem
-cs_randperm.c	random permutation
-cs_reach.c	find nonzero pattern of x=L\b for sparse L and b
-cs_scatter.c	scatter a sparse vector
-cs_scc.c	strongly-connected components
-cs_schol.c	symbolic Cholesky
-cs_spsolve.c	x=Z\b where Z, x, and b are sparse, and Z upper/lower triangular
-cs_sqr.c	symbolic QR (also can be used for LU)
-cs_symperm.c	symmetric permutation of a sparse matrix
-cs_tdfs.c	depth-first-search of a tree
-cs_transpose.c	transpose a sparse matrix
-cs_updown.c	sparse rank-1 Cholesky update/downate
-cs_usolve.c	x=U\b
-cs_util.c	various utilities (allocate/free matrices, workspace, etc)
-cs_utsolve.c	x=U'\b
-Makefile	Makefile for CXSparse
-README.txt	README file for CXSparse
+cs_add.c        add sparse matrices
+cs_amd.c        approximate minimum degree
+cs_chol.c       sparse Cholesky
+cs_cholsol.c    x=A\b using sparse Cholesky
+cs_compress.c   convert a compress form to compressed-column form
+cs_counts.c     column counts for Cholesky and QR
+cs_convert.c    convert real to complex and complex to real (not in CSparse)
+cs_cumsum.c     cumulative sum
+cs_dfs.c        depth-first-search
+cs_dmperm.c     Dulmage-Mendelsohn permutation
+cs_droptol.c    drop small entries from a sparse matrix
+cs_dropzeros.c  drop zeros from a sparse matrix
+cs_dupl.c       remove (and sum) duplicates
+cs_entry.c      add an entry to a triplet matrix
+cs_ereach.c     nonzero pattern of Cholesky L(k,:) from etree and triu(A(:,k))
+cs_etree.c      find elimination tree
+cs_fkeep.c      drop entries from a sparse matrix
+cs_gaxpy.c      sparse matrix times dense matrix
+cs.h            include file for CXSparse
+cs_happly.c     apply Householder reflection
+cs_house.c      Householder reflection (*** NOTE: different algo. from CSparse)
+cs_ipvec.c      x(p)=b
+cs_leaf.c       determine if j is a leaf of the skeleton matrix and find lca
+cs_load.c       load a sparse matrix from a file
+cs_lsolve.c     x=L\b
+cs_ltsolve.c    x=L'\b
+cs_lu.c         sparse LU factorization
+cs_lusol.c      x=A\b using sparse LU factorization
+cs_malloc.c     memory manager
+cs_maxtrans.c   maximum transveral (permutation for zero-free diagonal)
+cs_multiply.c   sparse matrix multiply
+cs_norm.c       sparse matrix norm
+cs_permute.c    permute a sparse matrix
+cs_pinv.c       invert a permutation vector
+cs_post.c       postorder an elimination tree
+cs_print.c      print a sparse matrix
+cs_pvec.c       x=b(p)
+cs_qr.c         sparse QR
+cs_qrsol.c      solve a least-squares problem
+cs_randperm.c   random permutation
+cs_reach.c      find nonzero pattern of x=L\b for sparse L and b
+cs_scatter.c    scatter a sparse vector
+cs_scc.c        strongly-connected components
+cs_schol.c      symbolic Cholesky
+cs_spsolve.c    x=Z\b where Z, x, and b are sparse, and Z upper/lower triangular
+cs_sqr.c        symbolic QR (also can be used for LU)
+cs_symperm.c    symmetric permutation of a sparse matrix
+cs_tdfs.c       depth-first-search of a tree
+cs_transpose.c  transpose a sparse matrix
+cs_updown.c     sparse rank-1 Cholesky update/downate
+cs_usolve.c     x=U\b
+cs_util.c       various utilities (allocate/free matrices, workspace, etc)
+cs_utsolve.c    x=U'\b
+Makefile        Makefile for CXSparse
+README.txt      README file for CXSparse
 
 --------------------------------------------------------------------------------
-./Demo:		C program demos
+./Demo:         C program demos
 --------------------------------------------------------------------------------
 
-cs_ci_demo1.c	complex/int version of cs_demo1.c
-cs_ci_demo2.c	complex/int version of cs_demo2.c
-cs_ci_demo3.c	complex/int version of cs_demo3.c
-cs_ci_demo.c	complex/int version of cs_demo.c
-cs_ci_demo.h	complex/int version of cs_demo.h
-
-cs_cl_demo1.c	complex/UF_long version of cs_demo1.c
-cs_cl_demo2.c	complex/UF_long version of cs_demo2.c
-cs_cl_demo3.c	complex/UF_long version of cs_demo3.c
-cs_cl_demo.c	complex/UF_long version of cs_demo.c
-cs_cl_demo.h	complex/UF_long version of cs_demo.h
-
-cs_demo1.c	read a matrix from a file and perform basic matrix operations
-cs_demo2.c	read a matrix from a file and solve a linear system
-cs_demo3.c	read a matrix, solve a linear system, update/downdate
-cs_demo.c	support routines for cs_demo*.c
-cs_demo.h	include file for demo programs
-
-cs_demo.out	output of "make", which runs the demos on some matrices
-
-cs_di_demo1.c	double/int version of cs_demo1.c
-cs_di_demo2.c	double/int version of cs_demo2.c
-cs_di_demo3.c	double/int version of cs_demo3.c
-cs_di_demo.c	double/int version of cs_demo.c
-cs_di_demo.h	double/int version of cs_demo.h
-
-cs_dl_demo1.c	double/UF_long version of cs_demo1.c
-cs_dl_demo2.c	double/UF_long version of cs_demo2.c
-cs_dl_demo3.c	double/UF_long version of cs_demo3.c
-cs_dl_demo.c	double/UF_long version of cs_demo.c
-cs_dl_demo.h	double/UF_long version of cs_demo.h
-
-cs_idemo.c	convert real matrices to/from complex (int version)
-cs_ldemo.c	convert real matrices to/from complex (UF_long version)
-
-Makefile	Makefile for Demo programs
-readhb.f	read a Rutherford-Boeing matrix (real matrices only)
-README.txt	Demo README file
+cs_ci_demo1.c   complex/int version of cs_demo1.c
+cs_ci_demo2.c   complex/int version of cs_demo2.c
+cs_ci_demo3.c   complex/int version of cs_demo3.c
+cs_ci_demo.c    complex/int version of cs_demo.c
+cs_ci_demo.h    complex/int version of cs_demo.h
+
+cs_cl_demo1.c   complex/SuiteSparse_long version of cs_demo1.c
+cs_cl_demo2.c   complex/SuiteSparse_long version of cs_demo2.c
+cs_cl_demo3.c   complex/SuiteSparse_long version of cs_demo3.c
+cs_cl_demo.c    complex/SuiteSparse_long version of cs_demo.c
+cs_cl_demo.h    complex/SuiteSparse_long version of cs_demo.h
+
+cs_demo1.c      read a matrix from a file and perform basic matrix operations
+cs_demo2.c      read a matrix from a file and solve a linear system
+cs_demo3.c      read a matrix, solve a linear system, update/downdate
+cs_demo.c       support routines for cs_demo*.c
+cs_demo.h       include file for demo programs
+
+cs_demo.out     output of "make", which runs the demos on some matrices
+
+cs_di_demo1.c   double/int version of cs_demo1.c
+cs_di_demo2.c   double/int version of cs_demo2.c
+cs_di_demo3.c   double/int version of cs_demo3.c
+cs_di_demo.c    double/int version of cs_demo.c
+cs_di_demo.h    double/int version of cs_demo.h
+
+cs_dl_demo1.c   double/SuiteSparse_long version of cs_demo1.c
+cs_dl_demo2.c   double/SuiteSparse_long version of cs_demo2.c
+cs_dl_demo3.c   double/SuiteSparse_long version of cs_demo3.c
+cs_dl_demo.c    double/SuiteSparse_long version of cs_demo.c
+cs_dl_demo.h    double/SuiteSparse_long version of cs_demo.h
+
+cs_idemo.c      convert real matrices to/from complex (int version)
+cs_ldemo.c      convert real matrices to/from complex (SuiteSparse_long version)
+
+Makefile        Makefile for Demo programs
+readhb.f        read a Rutherford-Boeing matrix (real matrices only)
+README.txt      Demo README file
 
 --------------------------------------------------------------------------------
-./MATLAB:	MATLAB interface, demos, and tests
+./MATLAB:       MATLAB interface, demos, and tests
 --------------------------------------------------------------------------------
 
-cs_install.m	MATLAB function for compiling and installing CSparse for MATLAB
-CSparse/	MATLAB interface for CSparse
-Demo/		MATLAB demos for CSparse
-Makefile	MATLAB interface Makefile
-README.txt	MATLAB README file
-Test/		MATLAB test for CSparse, and "textbook" routines
-UFget/		MATLAB interface to UF Sparse Matrix Collection
+cs_install.m    MATLAB function for compiling and installing CSparse for MATLAB
+CSparse/        MATLAB interface for CSparse
+Demo/           MATLAB demos for CSparse
+Makefile        MATLAB interface Makefile
+README.txt      MATLAB README file
+Test/           MATLAB test for CSparse, and "textbook" routines
+UFget/          MATLAB interface to UF Sparse Matrix Collection
 
 
 --------------------------------------------------------------------------------
 ./MATLAB/CSparse:   MATLAB interface for CSparse
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of MATLAB interface to CSparse
-cs_add.m	    add two sparse matrices
+Contents.m          Contents of MATLAB interface to CSparse
+cs_add.m            add two sparse matrices
 cs_add_mex.c
-cs_amd.m	    approximate minimum degree
+cs_amd.m            approximate minimum degree
 cs_amd_mex.c
-cs_chol.m	    sparse Cholesky
+cs_chol.m           sparse Cholesky
 cs_chol_mex.c
-cs_cholsol.m	    x=A\b using a sparse Cholesky
+cs_cholsol.m        x=A\b using a sparse Cholesky
 cs_cholsol_mex.c
-cs_counts.m	    column counts for Cholesky or QR (like "symbfact" in MATLAB)
+cs_counts.m         column counts for Cholesky or QR (like "symbfact" in MATLAB)
 cs_counts_mex.c
-cs_dmperm.m	    Dulmage-Mendelsohn permutation
+cs_dmperm.m         Dulmage-Mendelsohn permutation
 cs_dmperm_mex.c
-cs_dmsol.m	    x=A\b using dmperm
-cs_dmspy.m	    plot a picture of a dmperm-permuted matrix
-cs_droptol.m	    drop small entries
+cs_dmsol.m          x=A\b using dmperm
+cs_dmspy.m          plot a picture of a dmperm-permuted matrix
+cs_droptol.m        drop small entries
 cs_droptol_mex.c
-cs_esep.m	    find edge separator
-cs_etree.m	    compute elimination tree
+cs_esep.m           find edge separator
+cs_etree.m          compute elimination tree
 cs_etree_mex.c
-cs_gaxpy.m	    sparse matrix times dense vector
+cs_gaxpy.m          sparse matrix times dense vector
 cs_gaxpy_mex.c
-cs_lsolve.m	    x=L\b where L is lower triangular
+cs_lsolve.m         x=L\b where L is lower triangular
 cs_lsolve_mex.c
-cs_ltsolve.m	    x=L'\b where L is lower triangular
+cs_ltsolve.m        x=L'\b where L is lower triangular
 cs_ltsolve_mex.c
-cs_lu.m		    sparse LU factorization
+cs_lu.m             sparse LU factorization
 cs_lu_mex.c
-cs_lusol.m	    x=A\b using sparse LU factorization
+cs_lusol.m          x=A\b using sparse LU factorization
 cs_lusol_mex.c
-cs_make.m	    compiles CSparse for use in MATLAB
-cs_mex.c	    support routines for CSparse mexFunctions
+cs_make.m           compiles CSparse for use in MATLAB
+cs_mex.c            support routines for CSparse mexFunctions
 cs_mex.h
-cs_multiply.m	    sparse matrix multiply
+cs_multiply.m       sparse matrix multiply
 cs_multiply_mex.c
 cs_must_compile.m   determine if a source file needs to be compiled with mex
-cs_nd.m		    nested dissection
-cs_nsep.m	    find node separator
-cs_permute.m	    permute a sparse matrix
+cs_nd.m             nested dissection
+cs_nsep.m           find node separator
+cs_permute.m        permute a sparse matrix
 cs_permute_mex.c
-cs_print.m	    print a sparse matrix
+cs_print.m          print a sparse matrix
 cs_print_mex.c
-cs_qleft.m	    apply Householder vectors to the left
-cs_qright.m	    apply Householder vectors to the right
-cs_qr.m		    sparse QR factorization
+cs_qleft.m          apply Householder vectors to the left
+cs_qright.m         apply Householder vectors to the right
+cs_qr.m             sparse QR factorization
 cs_qr_mex.c
-cs_qrsol.m	    solve a sparse least squares problem
+cs_qrsol.m          solve a sparse least squares problem
 cs_qrsol_mex.c
-cs_randperm.m	    randdom permutation
+cs_randperm.m       randdom permutation
 cs_randperm_mex.c
-cs_scc.m	    strongly-connected components
+cs_scc.m            strongly-connected components
 cs_scc_mex.c
-cs_sep.m	    convert an edge separator into a node separator
-cs_sparse.m	    convert a triplet form matrix to a compress-column form
+cs_sep.m            convert an edge separator into a node separator
+cs_sparse.m         convert a triplet form matrix to a compress-column form
 cs_sparse_mex.c
-cs_symperm.m	    symmetric permutation of a sparse matrix
+cs_symperm.m        symmetric permutation of a sparse matrix
 cs_symperm_mex.c
-cs_sqr.m	    symbolic QR ordering and analysis
+cs_sqr.m            symbolic QR ordering and analysis
 cs_sqr_mex.c
-cs_thumb_mex.c	    compute small "thumbnail" of a sparse matrix (for cspy).
-cs_transpose.m	    transpose a sparse matrix
+cs_thumb_mex.c      compute small "thumbnail" of a sparse matrix (for cspy).
+cs_transpose.m      transpose a sparse matrix
 cs_transpose_mex.c
-cs_updown.m	    sparse Cholesky update/downdate
+cs_updown.m         sparse Cholesky update/downdate
 cs_updown_mex.c
-cs_usolve.m	    x=U\b where U is upper triangular 
+cs_usolve.m         x=U\b where U is upper triangular 
 cs_usolve_mex.c
-cs_utsolve.m	    x=U'\b where U is upper triangular 
+cs_utsolve.m        x=U'\b where U is upper triangular 
 cs_utsolve_mex.c
-cspy.m		    a color "spy"
-Makefile	    Makefile for CSparse MATLAB interface
-README.txt	    README file for CSparse MATLAB interface
+cspy.m              a color "spy"
+Makefile            Makefile for CSparse MATLAB interface
+README.txt          README file for CSparse MATLAB interface
 
 
 --------------------------------------------------------------------------------
-./MATLAB/Demo:	    MATLAB demos for CSparse
+./MATLAB/Demo:      MATLAB demos for CSparse
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of MATLAB demo for CSparse
-cs_demo.m	    run all MATLAB demos for CSparse
-cs_demo1.m	    MATLAB version of Demo/cs_demo1.c
-cs_demo2.m	    MATLAB version of Demo/cs_demo2.c
-cs_demo3.m	    MATLAB version of Demo/cs_demo3.c
-private/	    private functions for MATLAB demos
-README.txt	    README file for CSparse MATLAB demo
+Contents.m          Contents of MATLAB demo for CSparse
+cs_demo.m           run all MATLAB demos for CSparse
+cs_demo1.m          MATLAB version of Demo/cs_demo1.c
+cs_demo2.m          MATLAB version of Demo/cs_demo2.c
+cs_demo3.m          MATLAB version of Demo/cs_demo3.c
+private/            private functions for MATLAB demos
+README.txt          README file for CSparse MATLAB demo
 
 
 --------------------------------------------------------------------------------
 ./MATLAB/Demo/private: private functions for MATLAB demos
 --------------------------------------------------------------------------------
 
-demo2.m		    demo 2
-demo3.m		    demo 3
-ex_1.m		    example 1
-ex2.m		    example 2
-ex3.m		    example 3
-frand.m		    generate a random finite-element matrix
-get_problem.m	    get a matrix
-is_sym.m	    determine if a matrix is symmetric
-mesh2d1.m	    construct a 2D mesh (method 1)
-mesh2d2.m	    construct a 2D mesh (method 2)
-mesh3d1.m	    construct a 3D mesh (method 1)
-mesh3d2.m	    construct a 3D mesh (method 2)
-print_order.m	    print the ordering method used
-resid.m		    compute residual
-rhs.m		    create right-hand-side
+demo2.m             demo 2
+demo3.m             demo 3
+ex_1.m              example 1
+ex2.m               example 2
+ex3.m               example 3
+frand.m             generate a random finite-element matrix
+get_problem.m       get a matrix
+is_sym.m            determine if a matrix is symmetric
+mesh2d1.m           construct a 2D mesh (method 1)
+mesh2d2.m           construct a 2D mesh (method 2)
+mesh3d1.m           construct a 3D mesh (method 1)
+mesh3d2.m           construct a 3D mesh (method 2)
+print_order.m       print the ordering method used
+resid.m             compute residual
+rhs.m               create right-hand-side
 
 
 --------------------------------------------------------------------------------
-./MATLAB/Test:	    Extensive test of CSparse, in MATLAB
+./MATLAB/Test:      Extensive test of CSparse, in MATLAB
 --------------------------------------------------------------------------------
 
-Makefile	    Makefile for MATLAB Test directory
-README.txt	    README file for MATLAB/Test
-Contents.m	    Contents of MATLAB/Test, "textbook" files only
+Makefile            Makefile for MATLAB Test directory
+README.txt          README file for MATLAB/Test
+Contents.m          Contents of MATLAB/Test, "textbook" files only
 
 chol_downdate.m     downdate a Cholesky factorization.
 chol_left.m         left-looking Cholesky factorization.
@@ -376,7 +380,7 @@ qr_givens.m         Givens-rotation QR factorization.
 qr_givens_full.m    Givens-rotation QR factorization, for full matrices.
 qr_left.m           left-looking Householder QR factorization.
 qr_right.m          right-looking Householder QR factorization.
-cs_fiedler.m	    Fiedler vector
+cs_fiedler.m        Fiedler vector
 
 cs_frand.m          generate a random finite-element matrix
 cs_frand_mex.c
@@ -385,17 +389,17 @@ cs_ipvec_mex.c
 cs_maxtransr.m      recursive maximum matching algorithm
 cs_maxtransr_mex.c
 cs_pvec.m           x=b(p)
-cs_pvec_mex.c	    interface for cs_pvec
+cs_pvec_mex.c       interface for cs_pvec
 cs_reach.m          non-recursive reach (interface to CSparse cs_reach)
-cs_reach_mex.c	    non-recursive x=spones(L\sparse(b))
+cs_reach_mex.c      non-recursive x=spones(L\sparse(b))
 cs_reachr.m         recursive reach (interface to CSparse cs_reachr)
 cs_reachr_mex.c
 cs_rowcnt.m         row counts for sparse Cholesky
-cs_rowcnt_mex.c	    row counts for sparse Cholesky
+cs_rowcnt_mex.c     row counts for sparse Cholesky
 cs_sparse2.m        same as cs_sparse, to test cs_entry function
 cs_sparse2_mex.c    like cs_sparse, but for testing cs_entry
 
-cs_test_make.m	    compiles MATLAB tests
+cs_test_make.m      compiles MATLAB tests
 
 check_if_same.m     check if two inputs are identical or not
 choldn.m            Cholesky downdate
@@ -456,66 +460,66 @@ test28.m            test cs_randperm, cs_dmperm
 
 
 --------------------------------------------------------------------------------
-./MATLAB/UFget:	    MATLAB interface for the UF Sparse Matrix Collection
+./MATLAB/UFget:     MATLAB interface for the UF Sparse Matrix Collection
 --------------------------------------------------------------------------------
 
-Contents.m	    Contents of UFget
-mat/		    default directory where downloaded matrices will be put
-README.txt	    README file for UFget
+Contents.m          Contents of UFget
+mat/                default directory where downloaded matrices will be put
+README.txt          README file for UFget
 UFget_defaults.m    default parameter settings
-UFget_example.m	    example of use
-UFget_install.m	    installs UFget temporarily (for current session)
+UFget_example.m     example of use
+UFget_install.m     installs UFget temporarily (for current session)
 UFget_java.class    read a url and load it in into MATLAB (compiled Java code)
-UFget_java.java	    read a url and load it in into MATLAB (Java source code)
-UFget_lookup.m	    look up a matrix in the index
-UFget.m		    UFget itself (primary user interface)
-UFweb.m		    open url for a matrix or collection
+UFget_java.java     read a url and load it in into MATLAB (Java source code)
+UFget_lookup.m      look up a matrix in the index
+UFget.m             UFget itself (primary user interface)
+UFweb.m             open url for a matrix or collection
 mat/UF_Index.mat    index of matrices in UF Sparse Matrix Collection
 
 
 --------------------------------------------------------------------------------
-./Matrix:	    Sample matrices, most from Rutherford/Boeing collection
+./Matrix:           Sample matrices, most from Rutherford/Boeing collection
 --------------------------------------------------------------------------------
 
-ash219		    overdetermined pattern of Holland survey.  Ashkenazi, 1974.
-bcsstk01	    stiffness matrix for small generalized eigenvalue problem
-bcsstk16	    stiffness matrix, Corp of Engineers dam
-fs_183_1	    unsymmetric facsimile convergence matrix
-lp_afiro	    NETLIB afiro linear programming problem
-mbeacxc		    US economy, 1972.  Dan Szyld, while at NYU
-t1		    small example used in Chapter 2
-west0067	    Cavett problem with 5 components (chemical eng., Westerberg)
-
-c_mbeacxc	    complex version of mbeacxc
-c_west0067	    complex version of west0067
-mhd1280b	    Alfven spectra in magnetohydrodynamics (complex)
-neumann		    complex matrix
-qc324		    model of H+ in an electromagnetic field (complex)
-t2		    small complex matrix
-t3		    small complex matrix
-t4		    small complex matrix
-c4		    small complex matrix
-young1c		    aeronautical problem (complex matrix)
+ash219              overdetermined pattern of Holland survey.  Ashkenazi, 1974.
+bcsstk01            stiffness matrix for small generalized eigenvalue problem
+bcsstk16            stiffness matrix, Corp of Engineers dam
+fs_183_1            unsymmetric facsimile convergence matrix
+lp_afiro            NETLIB afiro linear programming problem
+mbeacxc             US economy, 1972.  Dan Szyld, while at NYU
+t1                  small example used in Chapter 2
+west0067            Cavett problem with 5 components (chemical eng., Westerberg)
+
+c_mbeacxc           complex version of mbeacxc
+c_west0067          complex version of west0067
+mhd1280b            Alfven spectra in magnetohydrodynamics (complex)
+neumann             complex matrix
+qc324               model of H+ in an electromagnetic field (complex)
+t2                  small complex matrix
+t3                  small complex matrix
+t4                  small complex matrix
+c4                  small complex matrix
+young1c             aeronautical problem (complex matrix)
 
 --------------------------------------------------------------------------------
-./Tcov:		    Exhaustive test coverage of CXSparse
+./Tcov:             Exhaustive test coverage of CXSparse
 --------------------------------------------------------------------------------
 
-covall		    same as covall.linux
-covall.linux	    find coverage (Linux)
-covall.sol	    find coverage (Solaris)
-cov.awk		    coverage summary
-cover		    print uncovered lines
-covs		    print uncovered lines
+covall              same as covall.linux
+covall.linux        find coverage (Linux)
+covall.sol          find coverage (Solaris)
+cov.awk             coverage summary
+cover               print uncovered lines
+covs                print uncovered lines
 cstcov_malloc_test.c    malloc test
 cstcov_malloc_test.h
-cstcov_test.c	    main program for Tcov tests
-gcovs		    run gcov (Linux)
-Makefile	    Makefile for Tcov tests
-nil		    an empty matrix
-zero		    a 1-by-1 zero matrix
-czero		    a 1-by-1 complex zero matrix
-README.txt	    README file for Tcov directory
+cstcov_test.c       main program for Tcov tests
+gcovs               run gcov (Linux)
+Makefile            Makefile for Tcov tests
+nil                 an empty matrix
+zero                a 1-by-1 zero matrix
+czero               a 1-by-1 complex zero matrix
+README.txt          README file for Tcov directory
 
 
 --------------------------------------------------------------------------------
@@ -525,6 +529,16 @@ Change Log:
 Refer to CSparse for changes in CSparse, which are immediately propagated
 into CXSparse (those Change Log entries are not repeated here).
 
+Jun 1, 2012.  version 3.1.0
+
+    * now based on CSparse v3.1.0
+    * This version of CXSparse changes the 'long' integer from UF_long to
+        cs_long_t.  UF_long is still available to user codes, however, so this
+        change is backward compatible with user codes.  Future user codes
+        should use cs_long_t instead of UF_long.
+    * changed unsigned integer in cs_amd.c to signed, for hash code.
+    * in Source, only changes are to cs_demo*.c, cs_print.c
+
 Nov 1, 2007.  version 2.2.1
 
     CXSparse/MATLAB/Test ported to Windows
@@ -535,7 +549,7 @@ May 31, 2007.  version 2.2.0
     * back-port to MATLAB 7.2 and earlier (which does not have mwIndex).
 
     * more graceful failure in cs_make when attempting complex matrix support
-	(Windows, in particular)
+        (Windows, in particular)
 
     * correction to CXSparse/Demo/Makefile
 
@@ -546,8 +560,8 @@ Mar 14, 2007.  Version 2.1.0.
     * MATLAB interface added for CXSparse.
 
     * cs_complex_t type added (a #define for "double _Complex", which is the
-	complex type used in CXSparse 2.0.x).  When compiling with a C++ 
-	compiler, the std::compex<double> type is used for the complex case.
+        complex type used in CXSparse 2.0.x).  When compiling with a C++ 
+        compiler, the std::compex<double> type is used for the complex case.
 
     * bug fix in complex sparse Cholesky (cs_chol.c).
 
@@ -556,15 +570,15 @@ Mar 14, 2007.  Version 2.1.0.
     * bug fix in cs_symperm for the complex case.
 
     * "beta" changed from complex to real, in sparse QR (cs_house.c,
-	cs_happly.c, cs_qr.c), (a performance/memory improvement, not a
-	bug fix).  Similar change to "nz2" in cs_cumsum.c.
+        cs_happly.c, cs_qr.c), (a performance/memory improvement, not a
+        bug fix).  Similar change to "nz2" in cs_cumsum.c.
 
 May 5, 2006.  Version 2.0.1 released.
 
     * long changed to UF_long, dependency in ../UFconfig/UFconfig.h added.
-	"UF_long" is a #define'd term in UFconfig.h.  It is normally defined
-	as "long", but can be redefined as something else if desired.
-	On Windows-64, it becomes __int64.
+        "UF_long" is a #define'd term in UFconfig.h.  It is normally defined
+        as "long", but can be redefined as something else if desired.
+        On Windows-64, it becomes __int64.
 
 Mar 6, 2006
 
diff --git a/CXSparse_newfiles/Source/README.txt b/CXSparse_newfiles/Source/README.txt
index 5f39716..c378868 100644
--- a/CXSparse_newfiles/Source/README.txt
+++ b/CXSparse_newfiles/Source/README.txt
@@ -1,3 +1,5 @@
 CXSparse/Source directory: primary ANSI C source code files for CXSparse.
 To compile the libcxsparse.a C-callable library, just type "make" in this
 directory.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse_newfiles/Source/cs_convert.c b/CXSparse_newfiles/Source/cs_convert.c
index 2d6607f..7be9780 100644
--- a/CXSparse_newfiles/Source/cs_convert.c
+++ b/CXSparse_newfiles/Source/cs_convert.c
@@ -8,9 +8,9 @@ cs_di *cs_i_real (cs_ci *A, int real)
     int n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     cs_complex_t *Ax ;
     double *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_di_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
@@ -31,9 +31,9 @@ cs_ci *cs_i_complex (cs_di *A, int real)
     int n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     double *Ax ;
     cs_complex_t *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_ci_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
@@ -46,17 +46,17 @@ cs_ci *cs_i_complex (cs_di *A, int real)
     return (C) ;
 }
 
-/* convert from complex to real (UF_long version) */
+/* convert from complex to real (cs_long_t version) */
 /* C = real(A) if real is true, imag(A) otherwise */
-cs_dl *cs_l_real (cs_cl *A, UF_long real)
+cs_dl *cs_l_real (cs_cl *A, cs_long_t real)
 {
     cs_dl *C ;
-    UF_long n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
+    cs_long_t n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     cs_complex_t *Ax ;
     double *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_dl_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
@@ -69,17 +69,17 @@ cs_dl *cs_l_real (cs_cl *A, UF_long real)
     return (C) ;
 }
 
-/* convert from real to complex (UF_long version) */
+/* convert from real to complex (cs_long_t version) */
 /* C = A if real is true, or C = i*A otherwise */
-cs_cl *cs_l_complex (cs_dl *A, UF_long real)
+cs_cl *cs_l_complex (cs_dl *A, cs_long_t real)
 {
     cs_cl *C ;
-    UF_long n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
+    cs_long_t n, triplet, nn, p, nz, *Ap, *Ai, *Cp, *Ci ;
     double *Ax ;
     cs_complex_t *Cx ;
-    if (!A || !A->x) return (NULL) ;	/* return if A NULL or pattern-only */
+    if (!A || !A->x) return (NULL) ;    /* return if A NULL or pattern-only */
     n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
-    triplet = (A->nz >= 0) ;		/* true if A is a triplet matrix */
+    triplet = (A->nz >= 0) ;            /* true if A is a triplet matrix */
     nz = triplet ? A->nz : Ap [n] ;
     C = cs_cl_spalloc (A->m, n, A->nzmax, 1, triplet) ;
     if (!C) return (NULL) ;
diff --git a/CXSparse_newfiles/Source/cs_house.c b/CXSparse_newfiles/Source/cs_house.c
index baf4082..e825c89 100644
--- a/CXSparse_newfiles/Source/cs_house.c
+++ b/CXSparse_newfiles/Source/cs_house.c
@@ -7,24 +7,24 @@ CS_ENTRY cs_house (CS_ENTRY *x, double *beta, CS_INT n)
 {
     CS_ENTRY s = 0 ;
     CS_INT i ;
-    if (!x || !beta) return (-1) ;	    /* check inputs */
+    if (!x || !beta) return (-1) ;          /* check inputs */
     /* s = norm(x) */
     for (i = 0 ; i < n ; i++) s += x [i] * CS_CONJ (x [i]) ;
     s = sqrt (s) ;
     if (s == 0)
     {
-	(*beta) = 0 ;
-	x [0] = 1 ;
+        (*beta) = 0 ;
+        x [0] = 1 ;
     }
     else
     {
-	/* s = sign(x[0]) * norm (x) ; */
-	if (x [0] != 0)
-	{
-	    s *= x [0] / CS_ABS (x [0]) ;
-	}
-	x [0] += s ;
-	(*beta) = 1. / CS_REAL (CS_CONJ (s) * x [0]) ;
+        /* s = sign(x[0]) * norm (x) ; */
+        if (x [0] != 0)
+        {
+            s *= x [0] / CS_ABS (x [0]) ;
+        }
+        x [0] += s ;
+        (*beta) = 1. / CS_REAL (CS_CONJ (s) * x [0]) ;
     }
     return (-s) ;
 }
diff --git a/CXSparse_newfiles/Source/cs_load.c b/CXSparse_newfiles/Source/cs_load.c
new file mode 100644
index 0000000..91e1f37
--- /dev/null
+++ b/CXSparse_newfiles/Source/cs_load.c
@@ -0,0 +1,26 @@
+#include "cs.h"
+/* load a triplet matrix from a file */
+cs *cs_load (FILE *f)
+{
+    double i, j ;   /* use double for integers to avoid csi conflicts */
+    double x ;
+#ifdef CS_COMPLEX
+    double xi ;
+#endif
+    cs *T ;
+    if (!f) return (NULL) ;                             /* check inputs */
+    T = cs_spalloc (0, 0, 1, 1, 1) ;                    /* allocate result */
+#ifdef CS_COMPLEX
+    while (fscanf (f, "%lg %lg %lg %lg\n", &i, &j, &x, &xi) == 4)
+#else
+    while (fscanf (f, "%lg %lg %lg\n", &i, &j, &x) == 3)
+#endif
+    {
+#ifdef CS_COMPLEX
+        if (!cs_entry (T, (CS_INT) i, (CS_INT) j, x + xi*I)) return (cs_spfree (T)) ;
+#else
+        if (!cs_entry (T, (CS_INT) i, (CS_INT) j, x)) return (cs_spfree (T)) ;
+#endif
+    }
+    return (T) ;
+}
diff --git a/CXSparse_newfiles/Source/cs_print.c b/CXSparse_newfiles/Source/cs_print.c
new file mode 100644
index 0000000..0767607
--- /dev/null
+++ b/CXSparse_newfiles/Source/cs_print.c
@@ -0,0 +1,51 @@
+#include "cs.h"
+/* print a sparse matrix; use %g for integers to avoid differences with CS_INT */
+CS_INT cs_print (const cs *A, CS_INT brief)
+{
+    CS_INT p, j, m, n, nzmax, nz, *Ap, *Ai ;
+    CS_ENTRY *Ax ;
+    if (!A) { printf ("(null)\n") ; return (0) ; }
+    m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
+    nzmax = A->nzmax ; nz = A->nz ;
+    printf ("CXSparse Version %d.%d.%d, %s.  %s\n", CS_VER, CS_SUBVER,
+        CS_SUBSUB, CS_DATE, CS_COPYRIGHT) ;
+    if (nz < 0)
+    {
+        printf ("%g-by-%g, nzmax: %g nnz: %g, 1-norm: %g\n", (double) m,
+            (double) n, (double) nzmax, (double) (Ap [n]), cs_norm (A)) ;
+        for (j = 0 ; j < n ; j++)
+        {
+            printf ("    col %g : locations %g to %g\n", (double) j, 
+                (double) (Ap [j]), (double) (Ap [j+1]-1)) ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                printf ("      %g : ", (double) (Ai [p])) ;
+#ifdef CS_COMPLEX
+                printf ("(%g, %g)\n",
+                    Ax ? CS_REAL (Ax [p]) : 1, Ax ? CS_IMAG (Ax [p]) : 0) ;
+#else
+                printf ("%g\n", Ax ? Ax [p] : 1) ;
+#endif
+                if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
+            }
+        }
+    }
+    else
+    {
+        printf ("triplet: %g-by-%g, nzmax: %g nnz: %g\n", (double) m,
+            (double) n, (double) nzmax, (double) nz) ;
+        for (p = 0 ; p < nz ; p++)
+        {
+
+            printf ("    %g %g : ", (double) (Ai [p]), (double) (Ap [p])) ;
+#ifdef CS_COMPLEX
+            printf ("(%g, %g)\n",
+                Ax ? CS_REAL (Ax [p]) : 1, Ax ? CS_IMAG (Ax [p]) : 0) ;
+#else
+            printf ("%g\n", Ax ? Ax [p] : 1) ;
+#endif
+            if (brief && p > 20) { printf ("  ...\n") ; return (1) ; }
+        }
+    }
+    return (1) ;
+}
diff --git a/CXSparse_newfiles/Source/cs_updown.c b/CXSparse_newfiles/Source/cs_updown.c
index 1584dff..e49af83 100644
--- a/CXSparse_newfiles/Source/cs_updown.c
+++ b/CXSparse_newfiles/Source/cs_updown.c
@@ -11,37 +11,37 @@ CS_INT cs_updown (cs *L, CS_INT sigma, const cs *C, const CS_INT *parent)
     if (!CS_CSC (L) || !CS_CSC (C) || !parent) return (0) ;  /* check inputs */
     Lp = L->p ; Li = L->i ; Lx = L->x ; n = L->n ;
     Cp = C->p ; Ci = C->i ; Cx = C->x ;
-    if ((p = Cp [0]) >= Cp [1]) return (1) ;	    /* return if C empty */
-    w = cs_malloc (n, sizeof (CS_ENTRY)) ;	    /* get workspace */
-    if (!w) return (0) ;			    /* out of memory */
+    if ((p = Cp [0]) >= Cp [1]) return (1) ;        /* return if C empty */
+    w = cs_malloc (n, sizeof (CS_ENTRY)) ;          /* get workspace */
+    if (!w) return (0) ;                            /* out of memory */
     f = Ci [p] ;
-    for ( ; p < Cp [1] ; p++) f = CS_MIN (f, Ci [p]) ;	/* f = min (find (C)) */
-    for (j = f ; j != -1 ; j = parent [j]) w [j] = 0 ;	/* clear workspace w */
+    for ( ; p < Cp [1] ; p++) f = CS_MIN (f, Ci [p]) ;  /* f = min (find (C)) */
+    for (j = f ; j != -1 ; j = parent [j]) w [j] = 0 ;  /* clear workspace w */
     for (p = Cp [0] ; p < Cp [1] ; p++) w [Ci [p]] = Cx [p] ; /* w = C */
-    for (j = f ; j != -1 ; j = parent [j])	    /* walk path f up to root */
+    for (j = f ; j != -1 ; j = parent [j])          /* walk path f up to root */
     {
-	p = Lp [j] ;
-	alpha = w [j] / Lx [p] ;		    /* alpha = w(j) / L(j,j) */
-	beta2 = beta*beta + sigma*alpha*CS_CONJ(alpha) ;
-	if (beta2 <= 0) break ;			    /* not positive definite */
-	beta2 = sqrt (beta2) ;
-	delta = (sigma > 0) ? (beta / beta2) : (beta2 / beta) ;
-	gamma = sigma * CS_CONJ(alpha) / (beta2 * beta) ;
-	Lx [p] = delta * Lx [p] + ((sigma > 0) ? (gamma * w [j]) : 0) ;
-	beta = beta2 ;
+        p = Lp [j] ;
+        alpha = w [j] / Lx [p] ;                    /* alpha = w(j) / L(j,j) */
+        beta2 = beta*beta + sigma*alpha*CS_CONJ(alpha) ;
+        if (beta2 <= 0) break ;                     /* not positive definite */
+        beta2 = sqrt (beta2) ;
+        delta = (sigma > 0) ? (beta / beta2) : (beta2 / beta) ;
+        gamma = sigma * CS_CONJ(alpha) / (beta2 * beta) ;
+        Lx [p] = delta * Lx [p] + ((sigma > 0) ? (gamma * w [j]) : 0) ;
+        beta = beta2 ;
 #ifdef CS_COMPLEX
-	phase = CS_ABS (Lx [p]) / Lx [p] ;  /* phase = abs(L(j,j))/L(j,j)*/
-	Lx [p] *= phase ;		    /* L(j,j) = L(j,j) * phase */
+        phase = CS_ABS (Lx [p]) / Lx [p] ;  /* phase = abs(L(j,j))/L(j,j)*/
+        Lx [p] *= phase ;                   /* L(j,j) = L(j,j) * phase */
 #endif
-	for (p++ ; p < Lp [j+1] ; p++)
-	{
-	    w1 = w [Li [p]] ;
-	    w [Li [p]] = w2 = w1 - alpha * Lx [p] ;
-	    Lx [p] = delta * Lx [p] + gamma * ((sigma > 0) ? w1 : w2) ;
+        for (p++ ; p < Lp [j+1] ; p++)
+        {
+            w1 = w [Li [p]] ;
+            w [Li [p]] = w2 = w1 - alpha * Lx [p] ;
+            Lx [p] = delta * Lx [p] + gamma * ((sigma > 0) ? w1 : w2) ;
 #ifdef CS_COMPLEX
-	    Lx [p] *= phase ;		    /* L(i,j) = L(i,j) * phase */
+            Lx [p] *= phase ;               /* L(i,j) = L(i,j) * phase */
 #endif
-	}
+        }
     }
     cs_free (w) ;
     return (beta2 > 0) ;
diff --git a/CXSparse_newfiles/Tcov/Makefile b/CXSparse_newfiles/Tcov/Makefile
index 04609af..d64ade8 100644
--- a/CXSparse_newfiles/Tcov/Makefile
+++ b/CXSparse_newfiles/Tcov/Makefile
@@ -8,7 +8,10 @@ CC = gcc
 CFLAGS = -O -g -fprofile-arcs -ftest-coverage \
     	-Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
     	-Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
-	-Wno-unused-parameter -Werror -I../Include -I../Demo -I../../UFconfig
+	-Wno-unused-parameter -I../Include \
+        -I../Demo -I../../SuiteSparse_config
+
+C = $(CC) $(CFLAGS)
 
 run: all run_convert run_di run_dl run_ci run_cl
 	./covall
@@ -112,75 +115,75 @@ cs_%_cl.c:
 
 
 %_di.o: %_di.c
-	$(CC) $(CFLAGS) -c $<
+	$(C) -c $<
 
 %_dl.o: %_dl.c
-	$(CC) $(CFLAGS) -DCS_LONG -c $<
+	$(C) -DCS_LONG -c $<
 
 %_ci.o: %_ci.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -c $<
+	$(C) -DCS_COMPLEX -c $<
 
 %_cl.o: %_cl.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -c $<
+	$(C) -DCS_LONG -DCS_COMPLEX -c $<
 
 
 cs_idemo: $(OBJ) cs_idemo.c
-	$(CC) $(CFLAGS) -o cs_idemo cs_idemo.c $(OBJ) -lm
+	$(C) -o cs_idemo cs_idemo.c $(OBJ) -lm
 
 cs_ldemo: $(OBJ) cs_ldemo.c
-	$(CC) $(CFLAGS) -o cs_ldemo cs_ldemo.c $(OBJ) -lm
+	$(C) -o cs_ldemo cs_ldemo.c $(OBJ) -lm
 
 
 cs_demo1_di: $(CS_DI) cs_di_demo1.c
-	$(CC) $(CFLAGS) -o cs_demo1_di cs_di_demo1.c $(CS_DI) -lm
+	$(C) -o cs_demo1_di cs_di_demo1.c $(CS_DI) -lm
 
 cs_demo2_di: $(CS_DI) cs_di_demo2.c cs_di_demo.c
-	$(CC) $(CFLAGS) -o cs_demo2_di cs_di_demo2.c cs_di_demo.c $(CS_DI) -lm
+	$(C) -o cs_demo2_di cs_di_demo2.c cs_di_demo.c $(CS_DI) -lm
 
 cs_demo3_di: $(CS_DI) cs_di_demo3.c cs_di_demo.c
-	$(CC) $(CFLAGS) -o cs_demo3_di cs_di_demo3.c cs_di_demo.c $(CS_DI) -lm
+	$(C) -o cs_demo3_di cs_di_demo3.c cs_di_demo.c $(CS_DI) -lm
 
 cstcov_test_di: $(CS_DI) cstcov_test.c cs_di_demo.c
-	$(CC) $(CFLAGS) -o cstcov_test_di cstcov_test.c cs_di_demo.c $(CS_DI) -lm
+	$(C) -o cstcov_test_di cstcov_test.c cs_di_demo.c $(CS_DI) -lm
 
 
 cs_demo1_dl: $(CS_DL) cs_dl_demo1.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cs_demo1_dl cs_dl_demo1.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cs_demo1_dl cs_dl_demo1.c $(CS_DL) -lm
 
 cs_demo2_dl: $(CS_DL) cs_dl_demo2.c cs_dl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cs_demo2_dl cs_dl_demo2.c cs_dl_demo.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cs_demo2_dl cs_dl_demo2.c cs_dl_demo.c $(CS_DL) -lm
 
 cs_demo3_dl: $(CS_DL) cs_dl_demo3.c cs_dl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cs_demo3_dl cs_dl_demo3.c cs_dl_demo.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cs_demo3_dl cs_dl_demo3.c cs_dl_demo.c $(CS_DL) -lm
 
 cstcov_test_dl: $(CS_DL) cstcov_test.c cs_dl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -o cstcov_test_dl cstcov_test.c cs_dl_demo.c $(CS_DL) -lm
+	$(C) -DCS_LONG -o cstcov_test_dl cstcov_test.c cs_dl_demo.c $(CS_DL) -lm
 
 
 cs_demo1_ci: $(CS_CI) cs_ci_demo1.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cs_demo1_ci cs_ci_demo1.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cs_demo1_ci cs_ci_demo1.c $(CS_CI) -lm
 
 cs_demo2_ci: $(CS_CI) cs_ci_demo2.c cs_ci_demo.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cs_demo2_ci cs_ci_demo2.c cs_ci_demo.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cs_demo2_ci cs_ci_demo2.c cs_ci_demo.c $(CS_CI) -lm
 
 cs_demo3_ci: $(CS_CI) cs_ci_demo3.c cs_ci_demo.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cs_demo3_ci cs_ci_demo3.c cs_ci_demo.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cs_demo3_ci cs_ci_demo3.c cs_ci_demo.c $(CS_CI) -lm
 
 cstcov_test_ci: $(CS_CI) cstcov_test.c cs_ci_demo.c
-	$(CC) $(CFLAGS) -DCS_COMPLEX -o cstcov_test_ci cstcov_test.c cs_ci_demo.c $(CS_CI) -lm
+	$(C) -DCS_COMPLEX -o cstcov_test_ci cstcov_test.c cs_ci_demo.c $(CS_CI) -lm
 
 
 cs_demo1_cl: $(CS_CL) cs_cl_demo1.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cs_demo1_cl cs_cl_demo1.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cs_demo1_cl cs_cl_demo1.c $(CS_CL) -lm
 
 cs_demo2_cl: $(CS_CL) cs_cl_demo2.c cs_cl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cs_demo2_cl cs_cl_demo2.c cs_cl_demo.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cs_demo2_cl cs_cl_demo2.c cs_cl_demo.c $(CS_CL) -lm
 
 cs_demo3_cl: $(CS_CL) cs_cl_demo3.c cs_cl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cs_demo3_cl cs_cl_demo3.c cs_cl_demo.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cs_demo3_cl cs_cl_demo3.c cs_cl_demo.c $(CS_CL) -lm
 
 cstcov_test_cl: $(CS_CL) cstcov_test.c cs_cl_demo.c
-	$(CC) $(CFLAGS) -DCS_LONG -DCS_COMPLEX -o cstcov_test_cl cstcov_test.c cs_cl_demo.c $(CS_CL) -lm
+	$(C) -DCS_LONG -DCS_COMPLEX -o cstcov_test_cl cstcov_test.c cs_cl_demo.c $(CS_CL) -lm
 
 
 run_convert: cs_idemo cs_ldemo
@@ -303,16 +306,17 @@ readhb.f:
 	- ln -s ../Demo/readhb.f
 
 clean:
-	rm -f *.o *.bbg *.da *.gcov *.gcda *.gcno
+	- $(RM) *.o *.bbg *.da *.gcov *.gcda *.gcno
 
 purge: distclean
 
 distclean: clean
-	rm -f readhb *.out *.a cov.sort
-	rm -f cs_demo1_di cs_demo2_di cs_demo3_di cstcov_test_di
-	rm -f cs_demo1_dl cs_demo2_dl cs_demo3_dl cstcov_test_dl
-	rm -f cs_demo1_ci cs_demo2_ci cs_demo3_ci cstcov_test_ci
-	rm -f cs_demo1_cl cs_demo2_cl cs_demo3_cl cstcov_test_cl
-	rm -f cs_idemo cs_ldemo
-	rm -f cs_*.c
-	rm -f cs*_di.c cs*_dl.c cs*_ci.c cs*_cl.c
+	- $(RM) readhb *.out *.a cov.sort
+	- $(RM) cs_demo1_di cs_demo2_di cs_demo3_di cstcov_test_di
+	- $(RM) cs_demo1_dl cs_demo2_dl cs_demo3_dl cstcov_test_dl
+	- $(RM) cs_demo1_ci cs_demo2_ci cs_demo3_ci cstcov_test_ci
+	- $(RM) cs_demo1_cl cs_demo2_cl cs_demo3_cl cstcov_test_cl
+	- $(RM) cs_idemo cs_ldemo
+	- $(RM) cs_*.c
+	- $(RM) cs*_di.c cs*_dl.c cs*_ci.c cs*_cl.c
+	- $(RM) -r *.dSYM
diff --git a/CXSparse_newfiles/Tcov/README.txt b/CXSparse_newfiles/Tcov/README.txt
index caae525..340592a 100644
--- a/CXSparse_newfiles/Tcov/README.txt
+++ b/CXSparse_newfiles/Tcov/README.txt
@@ -11,3 +11,5 @@ Note that you will get warnings about unused parameters for some functions.
 These warnings can be safely ignored.  They are parameters for functions that
 are passed to cs_fkeep, and all functions used in this manner must have the
 same calling sequence, even if some of the parameters are not used.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/CXSparse_newfiles/Tcov/cstcov_malloc_test.c b/CXSparse_newfiles/Tcov/cstcov_malloc_test.c
index e72878d..b0dba59 100644
--- a/CXSparse_newfiles/Tcov/cstcov_malloc_test.c
+++ b/CXSparse_newfiles/Tcov/cstcov_malloc_test.c
@@ -18,8 +18,8 @@ void *cs_calloc (CS_INT n, size_t size)
 /* wrapper for free */
 void *cs_free (void *p)
 {
-    if (p) free (p) ;	    /* free p if it is not already NULL */
-    return (NULL) ;	    /* return NULL to simplify the use of cs_free */
+    if (p) free (p) ;       /* free p if it is not already NULL */
+    return (NULL) ;         /* return NULL to simplify the use of cs_free */
 }
 
 /* wrapper for realloc */
@@ -30,5 +30,5 @@ void *cs_realloc (void *p, CS_INT n, size_t size, CS_INT *ok)
     if (--malloc_count < 0) return (p) ;    /* pretend to fail */
     pnew = realloc (p, CS_MAX (n,1) * size) ; /* realloc the block */
     *ok = (pnew != NULL) ;
-    return ((*ok) ? pnew : p) ;		    /* return original p if failure */
+    return ((*ok) ? pnew : p) ;             /* return original p if failure */
 }
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..e1429a0
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,477 @@
+Oct 23, 2014: SuiteSparse version 4.4.1
+    Minor update:  two bug fixes (affecting Windows only)
+
+    * CHOLMOD 3.0.3:
+        minor update to CHOLMOD (non-ANSI C usage in one *.c file, affects
+        Windows only)
+    * KLU 1.3.2:
+        minor fix to MATLAB install; no change to C except version nubmer
+
+
+Oct 10, 2014: SuiteSparse version 4.4.0
+    MAJOR UPDATE:  new GPU-acceleration for SPQR
+
+    * AMD 2.4.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * BTF 1.2.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CAMD 2.4.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CCOLAMD 2.9.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CHOLMOD 3.0.2:
+        update to accomodate GPU-accelerated SPQR
+        added CHOLMOD/Include/cholmod_function.h
+    * COLAMD 2.9.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CSparse 3.1.4:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CXSparse 3.1.4:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * GPUQREngine 1.0.0:
+        FIRST RELEASE.  Used by SPQR 2.0.0
+    * KLU 1.3.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+        update to KLU/Tcov/Makefile
+    * LDL 2.2.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * RBio 2.2.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * SPQR 2.0.0:
+        MAJOR UPDATE.  added GPU support.  Up to 11x faster than on CPU
+    * SuiteSparse_GPURuntime 1.0.0:
+        FIRST RELEASE.  Used by SPQR 2.0.0
+    * UMFPACK 5.7.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * MATLAB_Tools:
+        modified SSMULT/ssmult_install.m.  No change to C code
+
+
+July 18, 2014: SuiteSparse version 4.3.1
+    Minor update:  added cholmod_rowfac_mask2 function to CHOLMOD
+
+    * CHOLMOD 3.0.1:
+        added cholmod_rowfac_mask2 function.  Minor fix to build process
+    * SPQR 1.3.3:
+        minor fix to build process
+
+
+March 26, 2014: SuiteSparse version 4.3.0
+    MAJOR UPDATE: first release of CHOLMOD GPU acceleration
+    minor update: modified all packages to use SuiteSparse_config for
+        malloc/calloc/realloc/free, printf, hypot, and divcomplex
+        function pointers.
+
+    * AMD 2.4.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * CAMD 2.4.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * CCOLAMD 2.9.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * CHOLMOD 3.0.0:
+        MAJOR UPDATE to GPU acceleration.  Released at GTC 2014.
+    * COLAMD 2.9.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * CSparse 3.1.3:
+        minor update to UFget
+    * CXSparse 3.1.3:
+        minor update to UFget
+    * KLU 1.3.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * LDL 2.2.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * RBio 2.2.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * SPQR 1.3.2:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * UMFPACK 5.7.0:
+        changed malloc/printf pointers to use SuiteSparse_config
+    * MATLAB_Tools:
+        added stats to UFcollection, revised commends in SFMULT,
+        minor update to spok
+
+
+April 25, 2013: SuiteSpasre version 4.2.1
+    minor update
+
+    * CHOLMOD 2.1.2:
+        minor update to Cholesky/*solve*c (for Windows compiler)
+    * UMFPACK 5.6.2:
+        bug fix in Demo/Makefile for Fortran interface
+    * MATLAB_Tools:
+        minor update to sparseinv
+
+
+April 16, 2013: SuiteSpasre version 4.2.0
+    minor update and bug fix
+
+    * CHOLMOD 2.1.1:
+        minor changes to GPU accelerated version, fixed GPU memory leak
+    * CSparse 3.1.2:
+        minor update to cs_sqr.c; no affect on functionality
+    * CXSparse 3.1.2:
+        minor update to cs_sqr.c; no affect on functionality
+
+March 27, 2013: SuiteSparse version 4.1.0
+    new features added to CHOLMOD
+
+    * CHOLMOD 2.1.0:
+        added new features and functions to forward/backsolve:
+        cholmod_lsolve_pattern, cholmod_solve2, cholmod_ensure_dense.
+    * MATLAB_Tools:
+        added SFMULT.  minor update to Factorize, problems added to dimacs10
+
+July 17, 2012: SuiteSparse version 4.0.2
+    major update to MATLAB_Tools/Factorize.  No change to any C code.
+
+    * MATLAB_Tools:
+        major update to Factorize, minor update to sparseinv
+
+
+June 20, 2012: SuiteSparse version 4.0.1
+
+    * AMD 2.3.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CAMD 2.3.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CHOLMOD 2.0.1:
+        bug fix for GPU code, when the matrix is singular
+        minor fix to MATLAB install
+    * CSparse 3.1.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * CXSparse 3.1.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * KLU 1.2.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * RBio 2.1.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * SPQR 1.3.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * UMFPACK 5.6.1:
+        minor fix to MATLAB install; no change to C except version nubmer
+    * MATLAB_Tools:
+        update to UFcollection (filesep) 
+
+
+June 1, 2012: SuiteSparse version 4.0.0
+    MAJOR UPDATE: First GPU version for CHOLMOD.
+    UFconfig renamed to SuiteSparse_config.
+
+    * AMD 2.3.0:
+        replaced UFconfig with SuiteSparse_config
+    * BTF 1.2.0:
+        replaced UFconfig with SuiteSparse_config
+    * CAMD 2.3.0:
+        replaced UFconfig with SuiteSparse_config
+    * CCOLAMD 2.8.0:
+        replaced UFconfig with SuiteSparse_config
+    * CHOLMOD 2.0.0:
+        replaced UFconfig with SuiteSparse_config
+        first GPU-accelerated version.
+    * COLAMD 2.8.0:
+        replaced UFconfig with SuiteSparse_config
+    * CSparse 3.1.0:
+        minor changes to enable creation of CXSparse 3.1.0
+    * CXSparse 3.1.0:
+        replaced UFconfig with SuiteSparse_config
+    * KLU 1.2.0:
+        replaced UFconfig with SuiteSparse_config
+    * LDL 2.1.0:
+        replaced UFconfig with SuiteSparse_config
+    * RBio 2.1.0:
+        replaced UFconfig with SuiteSparse_config
+    * SPQR 1.3.0:
+        replaced UFconfig with SuiteSparse_config
+        removed spqr_time; using SuiteSparse timing routines instead
+    * UMFPACK 5.6.0:
+        replaced UFconfig with SuiteSparse_config
+    * MATLAB_Tools:
+        update to documentation for Factorize, update to UFcollection
+
+May 15, 2012: SuiteSparse version 3.7.1
+    minor update
+
+    * AMD 2.2.4:
+        minor compiler workaround
+    * CAMD 2.2.4:
+        minor compiler workaround
+    * KLU 1.1.4:
+        bug fix in the case of Int overflow
+    * MATLAB_Tools:
+        minor update to spqr_rank and UFcollection
+
+Dec 15, 2011: SuiteSparse version 3.7.0
+    MAJOR UPDATE: added spqr_rank and sparseinv to MATLAB_Tools
+    major update to Factorize package in MATLAB_Tools
+    minor update to Makefiles for C code.
+
+    * AMD 2.2.3:
+        Makefile updated
+    * BTF 1.1.3:
+        Makefile updated
+    * CAMD 2.2.3:
+        Makefile updated
+    * CCOLAMD 2.7.4:
+        Makefile updated
+    * CHOLMOD 1.7.4:
+        Makefile updated
+    * COLAMD 2.7.4:
+        Makefile updated
+    * CSparse 3.0.2:
+        Makefile updated.  Fix to MATLAB install.  Now as CSparse (not CSparse3)
+    * KLU 1.1.3:
+        Makefile updated.  minor fix to MATLAB mexFunction
+    * LDL 2.0.4:
+        Makefile updated.  Update to demo program
+    * RBio 2.0.2:
+        Makefile updated.  Update to MATLAB mexFunction
+    * SPQR 1.2.3
+        Makefile updated.  Update to MATLAB install
+    * UMFPACK 5.5.2:
+        Makefile updated.  Update to MATLAB install
+    * MATLAB_Tools:
+        added spqr_rank and sparseinv.  Major update to Factorize, dimacs10
+
+
+
+May 10, 2011: SuiteSparse version 3.6.1
+    minor update
+
+    * SPQR 1.2.2:
+        minor fix, compiler workaround
+    * CSparse 3.0.1:
+        Added as the CSparse3 directory (original date Jan 19, 2010;
+        added to SuiteSparse on May 10, 2011.  Note that CSparse v2.x.x.
+        was also distributed)
+    * MATLAB_Tools:
+        added dimacs10.  Minor update to spok.
+
+
+Jan 25, 2011: SuiteSparse version 3.6.0
+    minor update
+
+    * AMD 2.2.2:
+        Makefile updated.
+    * BTF 1.1.2:
+        Makefile updated.
+    * CAMD 2.2.2:
+        Makefile updated.
+    * CCOLAMD 2.7.3:
+        Makefile updated.  Minor fix to stats printout
+    * CHOLMOD 1.7.3:
+        Makefile updated.  Minor fix, compiler workaround
+    * COLAMD 2.7.3:
+        Makefile updated
+    * CSparse 2.2.5:
+        Makefile updated.  minor fixes to UFget, cs_util.c.
+    * KLU 1.1.2:
+        Makefile updated.  ported Tcov to Mac.
+    * LDL 2.0.3:
+        Makefile updated.
+    * RBio 2.0.1:
+        Makefile updated.
+    * SPQR 1.2.1:
+        Makefile updated.  Added examples.  Fixed error handling.
+    * UMFPACK 5.5.1:
+        Makefile updated.
+    * MATLAB_Tools:
+        minor update to spok
+
+Nov 30, 2009: SuiteSparse version 3.5.0
+    major update to SPQR and RBio; minor updates to Makefiles.
+
+    * AMD 2.2.1:
+        Makefile updated.
+    * BTF 1.1.1
+        Makefile updated.
+    * CAMD 2.2.1:
+        Makefile updated.
+    * CCOLAMD 2.7.2:
+        Makefile updated.
+    * CHOLMOD 1.7.2:
+        Makefile updated.  Fixed 64-bit BLAS for MATLAB 7.8.
+    * COLAMD 2.7.2:
+        Makefile updated.
+    * CSparse 2.2.4
+        Makefile updated.  MATLAB install updated.
+    * KLU 1.1.1:
+        Makefile updated.
+    * LDL 2.0.2:
+        Makefile updated.
+    * RBio 2.0.0:
+        major update: rewritten in C.  No longer in Fortran.
+        Makefile updated.
+    * SPQR 1.2.0:
+        major update: added features required by MATLAB package spqr_rank,
+        changed default ordering to COLAMD.
+        Makefile updated.
+    * UMFPACK 5.5.0:
+        major update.  Added user-ordering function, interface to CHOLMOD
+        orderings, option to disable singleton search to allow L to be
+        well-conditioned.
+        Makefile updated.
+    * MATLAB_Tools:
+        major update to Factorize.  Minor updates to GEE, getversion, spok.
+
+
+May 20, 2009: SuiteSparse version 3.4.0
+    MAJOR UPDATE: added Factorize package to MATLAB_TOols
+    major update to UMFPACK (removed 2-by-2 strategy)
+
+    * RBio 1.1.2:
+        update to MATLAB install
+    * SPQR 1.1.2:
+        added more examples.  Mac compiler workaround.
+    * UMFPACK 5.4.0:
+        removed 2-by-2 strategy.  update to MATLAB install.
+    * MATLAB_Tools:
+        added Factorize
+
+
+March 24, 2009: SuiteSparse version 3.3.0
+    minor update
+
+    * BTF 1.1.0:
+        minor update.
+    * CHOLMOD 1.7.1:
+        bug fix for cholmod_symmetry
+    * CSparse 2.2.3:
+        cs_gaxpy example fixed.  Minor change to MATLAB cs_sparse interface
+    * CXSparse 2.2.3:
+        cs_gaxpy example fixed.  Minor change to MATLAB cs_sparse interface
+    * KLU 1.1.0:
+        minor update.
+    * SPQR 1.1.1:
+        minor update (compiler workaround)
+    * UMFPACK 5.3.0:
+        compiler workaround.  added timer options.
+        bug fix for 2-by-2 strategy (subsequently removed in v5.4.0)
+
+Sept 20, 2008: SuiteSparse version 3.2.0
+    MAJOR UPDATE: first release of SPQR
+
+    * CHOLMOD 1.7.0:
+        major update for SPQR.
+    * CXSparse 2.2.2:
+        update to MATLAB install
+    * CSparse 2.2.2:
+        update to MATLAB install
+    * SPQR 1.1.0:
+        FIRST RELEASE in SuiteSparse.
+    * MATLAB_TOOLS:
+        added: GEE, find_components, spok
+
+Nov 1, 2007: SuiteSparse version 3.1.0
+    minor update
+
+    * BTF 1.0.1:
+        minor update.
+    * CCOLAMD 2.7.1:
+        minor changes to MATLAB test code.
+    * CHOLMOD 1.6.0:
+        bug fix to cholmod_symmetry.  Performance fix for cholmod_nesdis.
+        port to MATLAB 7.5 and many minor changes in MATLAB interface.
+    * COLAMD 2.7.1:
+        minor changes to MATLAB test code.
+    * CSparse 2.2.1:
+        minor update.
+    * CXSparse 2.2.1:
+    * KLU 1.0.1:
+        minor lint cleanup.
+    * RBio 1.1.1:
+        minor lint cleanup.
+        minor update.
+    * UMFPACK 5.2.0:
+        change of license from LGPL to GPL.  minor lint cleanup.
+        port to MATLAB 7.5.
+    * MATLAB_Tools:
+        added: LINFACTOR, MESHND, SSMULT, getversion, gipper, hprintf,
+            pagerankdemo, shellgui, and waitmex
+
+May 31, 2007: SuiteSparse version 3.0.0
+    MAJOR UPDATE: first stable release of KLU and BTF
+    other packages ported to 64-bit MATLAB.
+
+    * AMD 2.2.0:
+        port to 64-bit MATLAB.  minor changes in printing.
+    * BTF 1.0.0:
+        FIRST STABLE RELEASE
+    * CAMD 2.2.0:
+        port to 64-bit MATLAB.  minor changes in printing.
+    * CCOLAMD 2.7.0:
+        port to 64-bit MATLAB.  restructured directories
+    * CHOLMOD 1.5.0:
+        port to 64-bit MATLAB.  update to Makefile.
+        bug fix for BLAS int, update to cholmod_updown.
+    * COLAMD 2.7.0:
+        port to 64-bit MATLAB.  restructured directories
+    * CSparse 2.2.0:
+        update to MATLAB interface.  restructured directories
+    * LDL 2.0.0:
+        major update:  added 64bit version, restructured directories
+    * RBio 1.1.0:
+        port to 64-bit MATLAB.
+    * UMFPACK 5.1.0:
+        port to 64-bit MATLAB.  minor changes in printing.
+
+Dec 13, 2006: SuiteSparse version 2.4.0
+    minor update
+
+    * AMD 2.0.4:
+        minor MATLAB cleanup
+    * CAMD 2.1.2:
+        minor MATLAB cleanup
+    * CCOLAMD 2.5.2
+        minor MATLAB cleanup
+    * CHOLMOD 1.4.0:
+        added support for large files.  Renamed MATLAB interface to cholmod2.
+        minor MATLAB cleanup.
+    * COLAMD 2.5.2:
+        minor MATLAB cleanup
+    * CSparse 2.0.7:
+        minor MATLAB cleanup
+    * CXSparse 2.0.7:
+        minor MATLAB cleanup
+    * LDL 1.3.4:
+        minor MATLAB cleanup
+    * UMFPACK 5.0.3:
+        minor MATLAB cleanup
+
+Dec 7, 2006: SuiteSparse version 2.3.1
+    minor update
+
+    * CSparse 2.0.6:
+        update to UFget
+    * CXSparse 2.0.6:
+        update to UFget
+
+Dec 2, 2006: SuiteSparse version 2.3.0
+    MAJOR UPDATE
+
+    * CHOLMOD 1.3.0:
+        major update to file IO functions, added cholmod_symmetry,
+        minor fix to cholmod_analyze_odering and cholmod_dense.c.
+    * MATLAB_Tools:
+        added UFcollection
+
+Sept 11, 2006: SuiteSparse version 2.1.1
+
+    * AMD 2.0.1:
+        minor update
+    * CAMD 2.1.1:
+        minor update
+    * CHOLMOD 1.2.0:
+        performance improvements.  Added ordering options to MATLAB interface
+    * COLAMD 2.5.1:
+        minor update
+    * CCOLAMD 2.5.1:
+        minor update
+    * CSparse 2.0.2:
+        minor update to MATLAB interface
+    * CXSparse 2.0.2:
+        minor update to MATLAB interface
+    * LDL 1.3.1:
+        minor update to MATLAB interface
+    * UMFPACK 5.0.1:
+        minor update
+
diff --git a/Contents.m b/Contents.m
index 5f6f306..8d2902b 100644
--- a/Contents.m
+++ b/Contents.m
@@ -16,7 +16,6 @@
 %   camd         - constrained amd.
 %   ccolamd      - constrained colamd.
 %   csymamd      - constrained symamd.
-%   meshnd       - nested dissection of regular 2D and 3D meshes
 %
 %-------------------------------------------------------------------------------
 % CHOLMOD: a sparse supernodal Cholesky update/downdate package:
@@ -114,21 +113,37 @@
 %   luflop            - given L and U, computes # of flops required
 %
 %-------------------------------------------------------------------------------
+% SuiteSparseQR: multifrontal rank-revealing sparse QR
+%-------------------------------------------------------------------------------
+%
+%   spqr            - sparse QR
+%   spqr_solve      - x=A\b using SuiteSparseQR
+%   spqr_qmult      - y=Q*x, Q'*x, x*Q, or x*Q' using Q in Householder form
+%
+%-------------------------------------------------------------------------------
 % Other packages:
 %-------------------------------------------------------------------------------
 %
-%   UFGET           MATLAB interface to the UF Sparse Matrix Collection
-%   MATLAB_Tools    various simple m-files
-%   SSMULT          sparse matrix times sparse matrix
-%   LINFACTOR       solve Ax=b using LU or CHOL
+%   MATLAB_Tools    various MATLAB tools, most in M, some as C mexFunctions:
+%
+%       ssmult          sparse matrix times sparse matrix
+%       meshnd          nested dissection of regular 2D and 3D meshes
+%       linfactor       solve Ax=b using LU or CHOL
+%       dimacs10        MATLAB interface for the DIMACS10 collection
+%       factorize       object-oriented system solver
+%       sparseinv       sparse inverse subset
+%       spqr_rank       toolbox for sparse rank-deficient matrices
+%
+%   UFcollection    for managing the UF Sparse Matrix Collection
+%   RBio            for reading/writing Rutherford/Boeing sparse matrices
+%   UFget           MATLAB interface to the UF Sparse Matrix Collection,
+%                   located in C*Sparse*/MATLAB
 %
 %-------------------------------------------------------------------------------
 %
 % For help on compiling SuiteSparse or the demos, testing functions, etc.,
-% please see the help for each individual package.   UFcollection and RBio
-% are two additional toolboxes, for managing the UF Sparse Matrix Collection.
+% please see the help for each individual package.
 %
-% Copyright 2007, Timothy A. Davis
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2014, Timothy A. Davis, http://www.suitesparse.com.
 
 help SuiteSparse
diff --git a/GPUQREngine/Demo/Makefile b/GPUQREngine/Demo/Makefile
new file mode 100644
index 0000000..ca363a0
--- /dev/null
+++ b/GPUQREngine/Demo/Makefile
@@ -0,0 +1,40 @@
+#-------------------------------------------------------------------------------
+# GPUQREngine/Demo Makefile
+#-------------------------------------------------------------------------------
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+LIBS = $(CUDART_LIB) ../Lib/libGPUQREngine.a \
+    ../../SuiteSparse_GPURuntime/Lib/libSuiteSparse_GPURuntime.a \
+    ../../CHOLMOD/Lib/libcholmod.a \
+    ../../SuiteSparse_config/libsuitesparseconfig.a \
+    $(CUDART_LIB) $(CUBLAS_LIB) -lm -lrt
+
+INC  = -I../../SuiteSparse_GPURuntime/Include -I../Include \
+       -I../../SuiteSparse_config -I../../CHOLMOD/Include
+
+#-------------------------------------------------------------------------------
+
+all: lib demo
+
+library: lib
+
+clean:
+	$(RM) *.o
+
+purge: clean
+	$(RM) gpuqrengine_demo troll.m
+ 
+lib:
+	( cd ../Lib ; $(MAKE) library )
+	( cd ../../CHOLMOD ; $(MAKE) library )
+	( cd ../../SuiteSparse_config ; $(MAKE) library )
+	( cd ../../SuiteSparse_GPURuntime/Lib ; $(MAKE) library )
+
+demo: gpuqrengine_demo
+	./gpuqrengine_demo
+
+gpuqrengine_demo: lib
+	$(NVCC) $(INC) -o gpuqrengine_demo gpuqrengine_demo.cpp $(LIBS)
+
+
diff --git a/GPUQREngine/Demo/README.txt b/GPUQREngine/Demo/README.txt
new file mode 100644
index 0000000..f3a567d
--- /dev/null
+++ b/GPUQREngine/Demo/README.txt
@@ -0,0 +1,12 @@
+This GPUQREngine/Demo directory contains a simple demo of the GPUQREngine
+package.  "make" will compile and run the demo on a set of randomly constructed
+dense matrices.  The output is placed in the troll.m file, and to check the
+results, run the troll.m script in MATLAB.
+
+Files:
+
+    README.txt              this file
+    Makefile                for compiling and running the C++ demos
+    gpuqrengine_demo.cpp    the C++ demo
+
+Timothy A. Davis and Nuri Yeralan, http://www.suitesparse.com
diff --git a/GPUQREngine/Demo/gpuqrengine_demo.cpp b/GPUQREngine/Demo/gpuqrengine_demo.cpp
new file mode 100644
index 0000000..ec845f7
--- /dev/null
+++ b/GPUQREngine/Demo/gpuqrengine_demo.cpp
@@ -0,0 +1,337 @@
+// =============================================================================
+// === GPUQREngine/Demo/dense_demo.cpp =========================================
+// =============================================================================
+
+// GPUQREngine can be used to factorize a set of dense matrices of
+// various sizes.  This is the demo for this 'dense' usage case.
+// The 'sparse' case is exercised by SuiteSparseQR.
+
+#ifndef GPU_BLAS
+#define GPU_BLAS
+#endif
+
+#include "GPUQREngine.hpp"
+#include "cholmod.h"
+#include <time.h>
+#include <stdio.h>
+#include "GPUQREngine_Timing.hpp"
+
+//------------------------------------------------------------------------------
+
+void randfill(double *x, Int m, Int n)
+{
+    for(int i=0; i<m; i++) {
+        for(int j=0; j<n; j++) {
+            x[i*n+j] = rand() / 1e8;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void randfill_stair(double *x, Int m, Int n, Int aggression)
+{
+    int i = 0;
+    for(int j=0; j<n; j++)
+    {
+        int iend = MIN(i + (rand() % aggression) + 1, m);
+        for(i=0; i<m; i++)
+        {
+            x[i*n+j] = (i < iend ? rand() / 1e8 : 0.0);
+        }
+        i = iend;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void randfill_blocktriu(double *x, Int m, Int n)
+{
+    int ybmax = CEIL(m, TILESIZE);
+    int xbmax = CEIL(n, TILESIZE);
+
+    for(int yb=0; yb<ybmax; yb++)
+    {
+        for(int xb=0; xb<xbmax; xb++)
+        {
+            if(yb > xb) continue;
+
+            int imax = MIN(m, TILESIZE*(yb+1));
+            for(int i=TILESIZE*yb; i<imax; i++)
+            {
+                int jmax = MIN(n, TILESIZE*(xb+1));
+                for(int j=TILESIZE*xb; j<jmax; j++)
+                {
+                    x[i*n+j] = rand() / 1e8;
+                }
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void printMatrix(FILE *troll, const char *name,
+    int which, int f, double *inM, int m, int n)
+{
+
+    double (*M)[n] = (double (*)[n]) inM;
+
+    fprintf(troll, "%s%d {%d} = [\n", name, which, 1+f);
+    for(int i=0; i<m; i++)
+    {
+        for(int j=0; j<n; j++)
+        {
+            fprintf(troll, "%30.16e ", M[i][j]);
+        }
+        fprintf(troll, "\n");
+    }
+    fprintf(troll, "];\n");
+}
+
+//------------------------------------------------------------------------------
+
+void printQRScript (FILE *troll)
+{
+
+    fprintf (troll, "format compact;\n");
+    fprintf (troll, "res = norm(triu(R)'*triu(R)-A'*A) / norm(A'*A)\n");
+    fprintf (troll, "if isnan(res), error ('failure'); end\n");
+    fprintf (troll, "if res > 1e-12, error ('failure'); end\n");
+
+//  fprintf (troll, "[%d %d] = size (A) ;\n") ;
+//  int rank = MIN(m, n);
+//  fprintf (troll, "[Davis_R V1 T] = qrsigma_concise(A);\n");
+//  fprintf (troll, "norm(triu(Davis_R) - triu(R))\n");
+//  fprintf (troll, "norm(Davis_R(%d:end,:)-R(%d:end,:))\n", rank+1, rank+1);
+
+    fprintf (troll, "MR = qr(A);\n");
+    fprintf (troll, "tR = triu(abs(R));");
+    fprintf (troll, "tMR = triu(abs(MR));");
+    fprintf (troll, "norm(tMR - tR)\n");
+}
+
+//------------------------------------------------------------------------------
+
+void driver
+(
+    cholmod_common *cc,
+    const char *filename,
+    Front *fronts,
+    int numFronts,
+    QREngineStats *stats,
+    int which
+)
+{
+    FILE *troll = NULL ;
+
+    if (filename != NULL)
+    {
+        troll = fopen(filename, "a");
+    }
+    if (troll != NULL)
+    {
+        fprintf (troll, "clear ;\n") ;
+        fprintf (troll, "A_%d = cell (1,%d) ;\n", which, numFronts) ;
+        fprintf (troll, "R_%d = cell (1,%d) ;\n", which, numFronts) ;
+    }
+
+    for(int f=0; f<numFronts; f++)
+    {
+        Front *front = (&fronts[f]);
+        int m = front->fm;
+        int n = front->fn;
+
+        /* Attach the front data. */
+        double *F = front->cpuR = front->F = (double*)
+            SuiteSparse_calloc(m*n, sizeof(double));
+        randfill(F, m, n);
+
+        /* Print the A matrix. */
+        if (troll != NULL)
+        {
+            printMatrix (troll, "A_", which, f, F, m, n);
+        }
+    }
+
+    /* Run the QREngine code */
+    QREngineResultCode result = GPUQREngine (cc->gpuMemorySize,
+        fronts, numFronts, stats);
+    if (result != QRENGINE_SUCCESS)
+    {
+        printf ("test failure!\n'") ;
+        exit (0) ;
+    }
+
+    /* Do something with R factors. */
+    for(int f=0; f<numFronts; f++)
+    {
+        Front *front = (&fronts[f]);
+        int m = front->fm;
+        int n = front->fn;
+        double *R = front->cpuR;
+
+        /* Print the R matrix. */
+        if (troll != NULL)
+        {
+            printMatrix(troll, "R_", which, f, R, m, n);
+            fprintf (troll, "R = R_%d {%d} ; A = A_%d {%d} ;\n", 
+                which, 1+f, which, 1+f) ;
+            printQRScript (troll) ;
+        }
+
+        /* Detach the front data. */
+        SuiteSparse_free(front->F);
+        front->F = NULL;
+    }
+
+    if (troll != NULL)
+    {
+        fprintf (troll, "disp ('all tests passed') ;\n") ;
+        fclose (troll) ;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void printStats(QREngineStats stats, int numFronts, double m, double n)
+{
+    float kernelTime = stats.kernelTime;
+    Int numLaunches = stats.numLaunches;
+    Int gpuFlops = stats.flopsActual;
+
+    /* Compute & Print FLOPS */
+    double time = (double) kernelTime;
+    double flops;
+    if(m >= n)
+    {
+        flops = 2.0 * n*n * (m - (n/3));
+    }
+    else
+    {
+        flops = 2.0 * m*m * (n - (m/3));
+    }
+
+    flops *= (double) numFronts;
+    flops /= (time / 1e3);
+    double gflops = flops / 1e9;
+    double gpugflops = (gpuFlops / (time / 1e3)) / 1e9;
+    printf("m: %.0f, n: %.0f, nf: %d, nl: %ld, gpuFlops: %ld, t: %fms, gflops: %f, gpugflops: %f\n", m, n, numFronts, numLaunches, gpuFlops, time, gflops, gpugflops);
+}
+
+//------------------------------------------------------------------------------
+
+void experiment1(cholmod_common *cc, int which, int numFronts, int m, int n)
+{
+    /* Configure problem set. */
+    Front *fronts = (Front*) SuiteSparse_calloc(numFronts, sizeof(Front));
+    for(int f=0; f<numFronts; f++)
+    {
+        new (&fronts[f]) Front(f, EMPTY, m, n);
+    }
+
+    /* Run the driver code. */
+    QREngineStats stats;
+    driver(cc, "troll.m", fronts, numFronts, &stats, which);
+//  driver(cc, NULL,      fronts, numFronts, &stats, which);
+    printStats(stats, numFronts, m, n);
+
+    /* Cleanup resources. */
+    for(int f=0; f<numFronts; f++) (&fronts[f])->~Front();
+    SuiteSparse_free(fronts);
+}
+
+//------------------------------------------------------------------------------
+
+void experiment2(cholmod_common *cc, int m, int n, int numFronts)
+{
+    /* See if this experiment would blow out the memory. */
+    size_t threshold = 3.50 * 1024 * 1024 * 1024;
+    size_t memoryReq = (size_t) (numFronts * (CEIL(m, 32) * 32 * 33 + m * n)) ;
+    if(memoryReq * sizeof(double) > threshold) return;
+
+    /* Configure problem set. */
+    Front *fronts = (Front*) SuiteSparse_calloc(numFronts, sizeof(Front));
+    for(int f=0; f<numFronts; f++)
+    {
+        new (&fronts[f]) Front(f, EMPTY, m, n);
+    }
+
+    /* Run the driver code if we won't run out of memory. */
+    QREngineStats stats;
+    driver(cc, NULL,      fronts, numFronts, &stats, 0);   // no troll.m output
+    printStats(stats, numFronts, m, n);
+
+    /* Cleanup resources. */
+    for(int f=0; f<numFronts; f++) (&fronts[f])->~Front();
+    SuiteSparse_free(fronts);
+}
+
+
+//------------------------------------------------------------------------------
+
+int main(int argn, char **argv)
+{
+    double t ;
+    size_t total_mem, available_mem ;
+
+    /* Clear the troll file. */
+    FILE *troll;
+    troll = fopen("troll.m", "w");
+    fclose(troll);
+
+    srand(1);
+
+    // start CHOLMOD
+    cholmod_common *cc, Common ;
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    // warmup the GPU.  This can take some time, but only needs
+    // to be done once
+    cc->useGPU = true ;
+    t = SuiteSparse_time ( ) ;
+    cholmod_l_gpu_memorysize (&total_mem, &available_mem, cc) ;
+    cc->gpuMemorySize = available_mem ;
+    t = SuiteSparse_time ( ) - t ;
+    if (cc->gpuMemorySize <= 1)
+    {
+        printf ("no GPU available\n") ;
+        return (0) ;
+    }
+    printf ("available GPU memory: %g MB, warmup time: %g\n",
+        (double) (cc->gpuMemorySize) / (1024 * 1024), t) ;
+
+    experiment1(cc, 1, 2, 8, 8);
+    experiment1(cc, 2, 2, 12, 8);
+    experiment1(cc, 3, 2, 64, 32);
+    experiment1(cc, 4, 1, 100, 200);
+
+    printf ("to check results, run 'troll.m' in MATLAB\n") ;
+
+#if 0
+    for(int numFronts=1; numFronts<=128; numFronts*=2)
+    {
+        for(int dim=128; dim<=6144; dim+=128)
+        {
+            experiment2(cc, dim, dim, numFronts);
+        }
+    }
+#endif
+#if 0
+    for(int numFronts=1; numFronts<=128; numFronts*=2)
+    {
+        for(int smdim=128; smdim<=6144/4; smdim+=128)
+        {
+            experiment2(cc, smdim, 4*smdim, numFronts);
+            experiment2(cc, 4*smdim, smdim, numFronts);
+        }
+        for(int smdim=128; smdim<=6144/16; smdim+=128)
+        {
+            experiment2(cc, smdim, 16*smdim, numFronts);
+            experiment2(cc, 16*smdim, smdim, numFronts);
+        }
+    }
+#endif
+}
+
diff --git a/GPUQREngine/Doc/ChangeLog b/GPUQREngine/Doc/ChangeLog
new file mode 100644
index 0000000..2e15935
--- /dev/null
+++ b/GPUQREngine/Doc/ChangeLog
@@ -0,0 +1,3 @@
+Oct 17, 2014: version 1.0.0
+
+    * first stable release
diff --git a/SSMULT/gpl.txt b/GPUQREngine/Doc/gpl.txt
similarity index 100%
copy from SSMULT/gpl.txt
copy to GPUQREngine/Doc/gpl.txt
diff --git a/GPUQREngine/Include/GPUQREngine.hpp b/GPUQREngine/Include/GPUQREngine.hpp
new file mode 100644
index 0000000..ca236bd
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine.hpp
@@ -0,0 +1,58 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine.hpp =====================================
+// =============================================================================
+//
+// This is the main user-level include file.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_HPP
+#define GPUQRENGINE_HPP
+
+#include "SuiteSparseGPU_Runtime.hpp"
+#include "GPUQREngine_Front.hpp"
+#include "GPUQREngine_Stats.hpp"
+
+enum QREngineResultCode
+{
+    QRENGINE_SUCCESS,           // GPU QR was successfull
+    QRENGINE_OUTOFMEMORY,       // GPU QR ran out of memory
+    QRENGINE_GPUERROR           // failed to communicated with the GPU
+};
+
+// Use C++ Polymorphism to provide many different function signatures and
+// call patterns.
+QREngineResultCode GPUQREngine
+(
+    size_t gpuMemorySize,
+    Front *userFronts,
+    Int numFronts,
+    QREngineStats *stats = NULL
+);
+
+QREngineResultCode GPUQREngine
+(
+    size_t gpuMemorySize,
+    Front *userFronts,
+    Int numFronts,
+    Int *Parent,
+    Int *Childp,
+    Int *Child,
+    QREngineStats *stats = NULL
+);
+
+Int *GPUQREngine_FindStaircase
+(
+    Front *front                // The front whose staircase we are computing
+);
+
+// Version information:
+#define GPUQRENGINE_DATE "Oct 17, 2014"
+#define GPUQRENGINE_VER_CODE(main,sub) ((main) * 1000 + (sub))
+#define GPUQRENGINE_MAIN_VERSION 1
+#define GPUQRENGINE_SUB_VERSION 0
+#define GPUQRENGINE_SUBSUB_VERSION 0
+#define GPUQRENGINE_VERSION \
+    GPUQRENGINE_VER_CODE(GPUQRENGINE_MAIN_VERSION,GPUQRENGINE_SUB_VERSION)
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_BucketList.hpp b/GPUQREngine/Include/GPUQREngine_BucketList.hpp
new file mode 100644
index 0000000..f37e3ec
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_BucketList.hpp
@@ -0,0 +1,168 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_BucketList.hpp ==========================
+// =============================================================================
+//
+// The BucketList is a principal class in the GPUQREngine.
+//
+// The BucketList manages a set of LLBundle structures in a doubly-linked list.
+// During factorization, the BucketList logically manipulates the LLBundles,
+// and depending on the configuration of each, generates GPU tasks to be added
+// to the GPU work queue.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_BUCKETLIST_HPP
+#define GPUQRENGINE_BUCKETLIST_HPP
+
+#include "GPUQREngine_Common.hpp"
+#include "GPUQREngine_TaskDescriptor.hpp"
+#include "GPUQREngine_LLBundle.hpp"
+#include "GPUQREngine_Front.hpp"
+
+struct TaskDescriptor;
+class LLBundle;
+
+class BucketList
+{
+public:
+    bool useFlag;            // A flag indicating whether to use this
+    bool memory_ok;          // A flag indicating whether the object
+                             // was constructed properly
+
+    double *gpuF;            // The gpu front pointer
+
+    Int *head;               // The head idle tile index in the bucket
+    Int *next;               // The next idle tile index in the bucket
+    Int *prev;               // The prev idle tile index in the bucket
+    bool *triu;              // Flag indicating whether the tile index
+                             // is upper triangular
+
+    Int *bundleCount;        // The # of bundles native to bucket index
+    Int *idleTileCount;      // The # of idle tiles in bucket index
+
+    Front *front;
+    Int numRowTiles;         // # row tiles of F
+    Int numColTiles;         // # col tiles of F
+    Int numBuckets;          // min(numRowTiles, numColTiles)
+    Int numIdleTiles;        // Total # of idle tiles stored in buckets
+    Int PanelSize;           // Max # of rowtiles that can fit in one bundle
+    Int TileSize;            // Dimensions of tiles
+    Int Wavefront;           // Index of first non-completed colBucket
+    Int LastBucket;          // Index of last colBucket with idleTiles
+                             // or bundles
+
+    Int ApplyGranularity;    // The desired granularity (in col tiles)
+                             // for applies
+
+    LLBundle *Bundles;       // The bundles maintained by this scheduler
+    Int numBundles;          // Total # of bundles
+
+    Workspace *wsMongoVT;    // The VT blocks this bucket list scheduler owns
+    double **gpuVT;          // Array of available VT slots within the VT struct
+    int VThead;              // Index of the first available entry in VTlist
+
+    // Constructors
+    void *operator new(long unsigned int, BucketList* p)
+    {
+        return p;
+    }
+    BucketList(Front *f, Int minApplyGranularity);
+    ~BucketList();
+
+    // Bundle management functions
+    void Insert(Int tile, Int bucket, bool upperTriangular = false);
+    void Remove(Int tile, Int bucket);
+    #ifdef GPUQRENGINE_PIPELINING
+    Int RemoveHead(Int bucket);
+    #endif
+
+    // VT management functions
+    double *allocateVT();
+    double *freeVT(double *gpuVT);
+
+    bool IsDone()
+    {
+        // We're done if we have no bundles left with tasks.
+        return (numBundles == 0);
+    }
+
+//  // IsRReadyEarly experimental feature : not available in production use.
+//  bool IsRReadyEarly()
+//  {
+//      // If we're doing a dense factorization, we're never done early.
+//      if(front->isDense()) return false;
+//
+//      // We can't pull the R factor early if we also need the CBlock.
+//      if(front->isStaged()) return false;
+//
+//      // If we're doing a sparse factorization, we're done early if we're
+//      // past the pivot row.
+//      return (TILESIZE * (Wavefront-1) > front->sparseMeta.fp);
+//  }
+
+    // Initialize takes the BucketList and adds rowtiles in positions
+    // appropriate for the staircase of the problem.
+    void Initialize
+    (
+        void
+    );
+
+    // AdvanceBundles advances existing bundles, leaving the First tile behind
+    // and keeping a Shadow copy to support subsequent Apply tasks.
+    void AdvanceBundles
+    (
+        void
+    );
+
+    #ifdef GPUQRENGINE_PIPELINING
+    // GrowBundles looks for row tiles (or bundles) involved in a factorization
+    // and attempts to add those bundles or row tiles to a task currently set
+    // for a series of Apply tasks. This is also known as Pipelining.
+    void GrowBundles
+    (
+        void
+    );
+    #endif
+
+    // CreateBundles selects rowtiles up to PANELSIZE and creates a new bundle
+    // ready for factorization.
+    void CreateBundles
+    (
+        void
+    );
+
+    // PostProcess handles any cleanup operations following a kernel invocation
+    // including merging delta tiles with the main bundle and other fixups.
+    void PostProcess
+    (
+        void
+    );
+
+    // SkipBundleCreation determines whether we should skip creating a new
+    // bundle for the specified tile in the specified column bucket.
+    bool SkipBundleCreation
+    (
+        Int tile,
+        Int colBucket
+    );
+
+    // IsInternal determines whether a tile is completely within the bounds
+    // of the front because if it isn't then we will need to use the special
+    // edge case kernels.
+    bool IsInternal
+    (
+        LLBundle& bundle,
+        int jLast
+    );
+
+    // FillWorkQueue is responsible for filling the work queue with items and
+    // resolving generic TaskType entries on the bundles into concrete tasks
+    // to be performed by the GPU.
+    Int FillWorkQueue
+    (
+        TaskDescriptor *queue,  // The list of work items for the GPU
+        Int *queueIndex         // The current index into the queue
+    );
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_Common.hpp b/GPUQREngine/Include/GPUQREngine_Common.hpp
new file mode 100644
index 0000000..8c52fb7
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_Common.hpp
@@ -0,0 +1,82 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_Common.hpp ==============================
+// =============================================================================
+//
+// This include file contains
+//    - Thread geometry and related manifest constants
+//    - Common macros and definitions
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_COMMON_HPP
+#define GPUQRENGINE_COMMON_HPP
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "SuiteSparseGPU_Runtime.hpp"
+
+
+/*** GPU Parameters **********************************************************/
+
+//
+// PANELSIZE  refers to the number of tiles that we can accomodate in
+//            an apply or factorize tasks
+// TILESIZE   refers to the square dimension of dense front data composed
+//            as blocks into panels
+// HALFTILE   refers to half the TILESIZE square dimension. This is used in
+//            some kernels to optimize
+// PADDING    refers to the amount of padding required to prevent shared memory
+//            bank conflicts. In reality, our "tiles" are TILESIZE+PADDING in
+//            square dimension size.
+// NUMTHREADS refers to the number of threads with which we launch each kernel
+// PACKASSEMBLY_SHMEM_MAPINTS
+//            refers to the number of RiMap and RjMap integers that we can
+//            keep in shared memory for pack assembly tasks. This value is
+//            used in the decomposition of contribution blocks and the
+//            subsequent construction of PackAssembly tasks.
+#define PANELSIZE           (3)
+#define TILESIZE            (32)
+#define HALFTILE            (TILESIZE / 2)
+#define PADDING             (1)
+
+#define NUMTHREADS                     384
+#define PACKASSEMBLY_SHMEM_MAPINTS     2024
+
+
+/*** Common Macros ***********************************************************/
+
+// ceiling of a/b for two integers a and b
+#ifndef CEIL
+#define CEIL(a,b)   (((a) + (b) - 1) / (b))
+#endif
+
+#ifndef MIN
+#define MIN(x,y)    ((x) < (y) ? (x) : (y))
+#endif
+
+#ifndef MAX
+#define MAX(x,y)    ((x) > (y) ? (x) : (y))
+#endif
+
+#define EMPTY       (-1)
+#define Int         SuiteSparse_long
+
+// To render the buckets for visualization in graphvis, uncomment this next
+// line, or compile the code with -DGPUQRENGINE_RENDER
+// #define GPUQRENGINE_RENDER
+
+// deprecated:
+// and also enable one or both of these, as true:
+// #define RENDER_DENSE_FACTORIZATION       false
+// #define RENDER_SPARSE_FACTORIZATION      false
+
+// To enable pipelining (combined apply-factorize tasks), uncomment this
+// next 3 lines, or compile with -DGPUQRENGINE_PIPELINING
+//  #ifndef GPUQRENGINE_PIPELINING
+//  #define GPUQRENGINE_PIPELINING
+//  #endif
+// This is an experimental feature that is not fully tested.
+// It should not be used in production use.
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_Front.hpp b/GPUQREngine/Include/GPUQREngine_Front.hpp
new file mode 100644
index 0000000..02d4208
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_Front.hpp
@@ -0,0 +1,167 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_Front.hpp ===============================
+// =============================================================================
+//
+// The Front is a principal class in the GPUQREngine.
+//
+// Fronts wrap all metadata required to complete its factorization.
+// When involved in a sparse factorization, additional metadata is present in
+// the SparseMeta member, "sparseMeta."
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_FRONT_HPP
+#define GPUQRENGINE_FRONT_HPP
+
+#include "GPUQREngine_Common.hpp"
+#include "GPUQREngine_SparseMeta.hpp"
+#include "GPUQREngine_FrontState.hpp"
+
+class Front
+{
+public:
+    Int fids;           // Front id within a stage
+    Int pids;           // Parent front id within a stage
+    Int fidg;           // Front id global to problem
+    Int pidg;           // Parent id global to problem
+
+    Int fm;             // # rows
+    Int fn;             // # cols
+    Int rank;           // (derived) MIN(fm, fn)
+
+    // adv layout options
+    bool isColMajor;    // default:F
+    Int ldn;            // user-specified desired leading dim
+
+    double *F;          // Front data
+    double *gpuF;       // The frontal matrix on the GPU.
+    double *cpuR;       // The cpu location of the R factor.
+
+    FrontState state;   // The front factorization state
+
+    Int *Stair;         // The staircase allows us to exploit block zeroes.
+
+    /* Extension to support sparse factorization. */
+    SparseMeta sparseMeta;
+
+    /* Debug Fields */
+    bool printMe;
+
+    void* operator new(long unsigned int reqMem, Front* ptr){ return ptr; }
+
+    Front(
+        Int fids_arg,                   // the front identifier
+        Int pids_arg,                   // the parent identifier
+        Int fm_arg,                     // the # of rows in the front
+        Int fn_arg,                     // the # of cols in the front
+        bool isColMajor_arg=false,      // whether the front is col-major
+        Int ldn_arg=EMPTY)              // the leading dimension
+    {
+        fids = fids_arg ;
+        pids = pids_arg ;
+        fidg = EMPTY;
+        pidg = EMPTY;
+
+        fm = fm_arg ;
+        fn = fn_arg ;
+        rank = MIN(fm, fn);
+
+        isColMajor = isColMajor_arg ;
+        ldn = (ldn_arg == EMPTY ? fn : ldn_arg) ;
+
+        F = NULL;
+        gpuF = NULL;
+        cpuR = NULL;
+
+        state = ALLOCATE_WAIT;
+
+        Stair = NULL;
+
+        sparseMeta = SparseMeta();
+
+        printMe = false;
+    }
+
+    ~Front()
+    {
+        // for the sparse case, F is NULL on the CPU
+        F = (double *) SuiteSparse_free (F) ;
+    }
+
+    bool isAllocated
+    (
+        void
+    )
+    {
+        return gpuF != NULL;
+    }
+
+    bool isDense
+    (
+        void
+    )
+    {
+        // NOTE: this code is tested by the SPQR/Tcov test, but that test does
+        // not flag this line as being tested in the coverage output.  This is
+        // determined by commenting out the following line, and seeing it
+        // trigger under 'make' in SPQR/Tcov:
+        //      { fprintf (stderr, "statement tested!\n") ; exit (0) ; }
+        // This same problem occurs elsewhere in GPUQREngine/Include/*
+        // and thus only affects *.hpp files #include'd in other files.
+        // The optimizer must be getting in the way, or some related effect.
+        return (!sparseMeta.isSparse);
+    }
+
+    bool isSparse
+    (
+        void
+    )
+    {
+        // NOTE: also tested by SPQR/Tcov, but not flagged as such in cov output
+        return (sparseMeta.isSparse);
+    }
+
+    bool isStaged
+    (
+        void
+    )
+    {
+        // NOTE: also tested by SPQR/Tcov, but not flagged as such in cov output
+        return (isSparse() && sparseMeta.isStaged);
+    }
+
+    bool isPushOnly
+    (
+        void
+    )
+    {
+        return (isSparse() && sparseMeta.pushOnly);
+    }
+
+    size_t getNumFrontValues
+    (
+        void
+    )
+    {
+        return fm * fn;
+    }
+
+    size_t getNumRValues
+    (
+        void
+    )
+    {
+        return rank * fn;
+    }
+
+    bool isTooBigForSmallQR
+    (
+        void
+    )
+    {
+        return (fm > 96 || fn > 32);
+    }
+
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_FrontState.hpp b/GPUQREngine/Include/GPUQREngine_FrontState.hpp
new file mode 100644
index 0000000..8a5030c
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_FrontState.hpp
@@ -0,0 +1,30 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_FrontState.hpp ==========================
+// =============================================================================
+//
+// The front state refers to the finite state machine model for factorizing
+// fronts using GPUQREngine.
+//
+// A front will progress through these fronts, as dictated by
+//  FillWorkQueue and PostProcessing codes.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_FRONTSTATE_HPP
+#define GPUQRENGINE_FRONTSTATE_HPP
+
+enum FrontState
+{
+    ALLOCATE_WAIT = 0,      // Front not allocated yet
+    ASSEMBLE_S = 1,         // Assembling rows of S
+    CHILD_WAIT = 2,         // Waiting for children to be finished
+    FACTORIZE = 3,          // Factorization under way
+    FACTORIZE_COMPLETE = 4, // Records an event to mark the end of the
+                            // factorize
+    PARENT_WAIT = 5,        // Waits for the parent to be allocated
+    PUSH_ASSEMBLE = 6,      // Pushes contribution blocks to the parent
+    CLEANUP = 7,            // Frees the front
+    DONE = 8                // Front totally finished
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_GraphVizHelper.hpp b/GPUQREngine/Include/GPUQREngine_GraphVizHelper.hpp
new file mode 100644
index 0000000..1e3a1a8
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_GraphVizHelper.hpp
@@ -0,0 +1,19 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_GraphVisHelper.hpp ======================
+// =============================================================================
+//
+// GraphVisHelper wraps logic to render the contents of a bucket list.
+//   This is used primarilly in debugging efforts.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_GRAPHVIZHELPER_HPP
+#define GPUQRENGINE_GRAPHVIZHELPER_HPP
+
+#ifdef GPUQRENGINE_RENDER
+#include "GPUQREngine_BucketList.hpp"
+
+void GPUQREngine_RenderBuckets(BucketList *buckets);
+
+#endif
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_Internal.hpp b/GPUQREngine/Include/GPUQREngine_Internal.hpp
new file mode 100644
index 0000000..bddb440
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_Internal.hpp
@@ -0,0 +1,37 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_internal.hpp ============================
+// =============================================================================
+//
+// The GPUQREngine_internal is an internal global include file.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_INTERNAL_HPP
+#define GPUQRENGINE_INTERNAL_HPP
+
+#include "GPUQREngine_Common.hpp"
+#include "GPUQREngine_TaskDescriptor.hpp"
+#include "GPUQREngine_Front.hpp"
+#include "GPUQREngine_Stats.hpp"
+#include "GPUQREngine.hpp"
+
+void GPUQREngine_UberKernel
+(
+    cudaStream_t kernelStream,      // The stream on which to launch the kernel
+    TaskDescriptor *gpuWorkQueue,   // The list of work items for the GPU
+    int numTasks                    // The # of items in the work list
+);
+
+QREngineResultCode GPUQREngine_Internal
+(
+    size_t gpuMemorySize,           // The total size of the GPU memory
+    Front *fronts,                  // The list of fronts to factorize
+    Int numFronts,                  // The number of fronts in the list
+    Int *Parent = NULL,             // Map from front to its Parent
+    Int *Childp = NULL,             // Child[Childp[f]] to Child[Childp[f+1]]
+    Int *Child  = NULL,             // has all the children of front f.
+    QREngineStats *stats = NULL     // An optional in-out parameter to capture
+                                    // statistics
+);
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_LLBundle.hpp b/GPUQREngine/Include/GPUQREngine_LLBundle.hpp
new file mode 100644
index 0000000..93bd321
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_LLBundle.hpp
@@ -0,0 +1,96 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_LLBundle.hpp ============================
+// =============================================================================
+//
+// LLBundle is a principal class in the GPUQREngine.
+//
+// This class is responsible for maintaining the CPU's view of state information
+// during the factorization process.
+//
+// LLBundles are manipulated by its hosting BucketList and are:
+//   1) Advanced
+//   2) Created
+//   3) Grown       (in the context of pipelining)
+//   4) Operated on (participating in Apply, Factorize, or ApplyFactorize tasks)
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_LLBUNDLE_HPP
+#define GPUQRENGINE_LLBUNDLE_HPP
+
+#include "GPUQREngine_Common.hpp"
+#include "GPUQREngine_TaskDescriptor.hpp"
+
+struct TaskDescriptor;
+class BucketList;
+
+class LLBundle
+{
+public:
+    BucketList *Buckets; // A back pointer to the hosting BucketList
+
+    Int NativeBucket;   // The column bucket the bundle belongs "is native" to
+
+    Int Shadow;         // A memento for the factorized First tile.
+                        // The CPU needs to know
+
+    Int First;          // The tile with the smallest rowtile index.
+                        // For factorize tasks, this tile is made upper
+                        // triangular.
+
+    Int Last;           // The index of the last filled slot in the bundle.
+
+    Int Delta;          // The index of where the Delta starts
+                        // Delta is used in pipelining when we attach a
+                        // factorize task to a finishing apply.
+
+    Int SecondMin;      // The index of where First's replacement is
+
+    Int Max;            // The index of the largest element (by rowtile)
+
+    Int PanelSize;
+    Int ApplyCount; // # tiles participating in an APPLY, including the Shadow.
+    Int Count;      // # tiles in the Bundle (Slots+Delta), but not the Shadow.
+
+    double *VT[2];  // Pointers to VT tiles.
+                    // When performing a pipelined task (ApplyFactorize),
+                    // memory must be reserved for two separate VT tiles:
+                    //   1) For the HH vectors involved in the Apply
+                    //   2) For the HH vectors resulting from the factorization
+
+    bool IsFull
+    (
+        void
+    )
+    {
+        return (Count == PanelSize);
+    }
+
+    TaskType CurrentTask;
+
+    void *operator new(long unsigned int, LLBundle* p){ return p; }
+    LLBundle(BucketList *buckets, Int panelSize, Int nativeBucket);
+
+    // empty LLBundle constructor (currently used, kept for possible future use
+    // LLBundle();
+
+    // LLBundle destructor:
+    ~LLBundle();
+
+    #ifdef GPUQRENGINE_PIPELINING
+    void AddTileToDelta(Int rowTile);
+    #endif
+
+    void AddTileToSlots(Int rowTile);
+
+    // Advance: returns T/F if the bundle is still around after being advanced.
+    bool Advance();
+
+    void PipelinedRearrange();
+    void UpdateSecondMinIndex();
+    void UpdateMax();
+
+    void gpuPack(TaskDescriptor *cpuTask);
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_SEntry.hpp b/GPUQREngine/Include/GPUQREngine_SEntry.hpp
new file mode 100644
index 0000000..ec60119
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_SEntry.hpp
@@ -0,0 +1,25 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_Sentry.hpp ==============================
+// =============================================================================
+//
+// The SEntry struct is a tuple which is used to place the numeric values from
+// the input problem into the dense representation of the fronts on the GPU.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_SENTRY_HPP
+#define GPUQRENGINE_SENTRY_HPP
+
+struct SEntry
+{
+    long findex;        // Index into the front where the value belongs
+    double value;       // The numeric value to be placed
+
+    SEntry()
+    {
+        findex = 0;
+        value = 0.0;
+    }
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_Scheduler.hpp b/GPUQREngine/Include/GPUQREngine_Scheduler.hpp
new file mode 100644
index 0000000..aa3781d
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_Scheduler.hpp
@@ -0,0 +1,168 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_Scheduler.hpp ===========================
+// =============================================================================
+//
+// The Scheduler is a principal class in the GPUQREngine.
+//
+// This class manages the input set of Fronts, creates BucketLists when
+// necessary for factorization, and contains all logic required to coordinate
+// the factorization and assembly tasks with the GPU.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_SCHEDULER_HPP
+#define GPUQRENGINE_SCHEDULER_HPP
+
+#include "GPUQREngine_Common.hpp"
+#include "GPUQREngine_FrontState.hpp"
+#include "GPUQREngine_TaskDescriptor.hpp"
+#include "GPUQREngine_BucketList.hpp"
+#include "GPUQREngine_LLBundle.hpp"
+#include "GPUQREngine_Front.hpp"
+
+#define SSGPU_MINAPPLYGRANULARITY 16
+
+size_t ssgpu_maxQueueSize       // return size of scheduler queue
+(
+    size_t gpuMemorySize        // size of GPU memory, in bytes
+) ;
+
+class Scheduler
+{
+private:
+    /* Scheduler.cpp */
+    bool initialize(size_t gpuMemorySize);
+
+    /* Scheduler_Front.cpp */
+    bool pullFrontData(Int f);
+
+    /* Scheduler_FillWorkQueue.cpp */
+    void fillTasks
+    (
+        Int f,                          // INPUT: Current front
+        TaskDescriptor *queue,          // INPUT: CPU Task entries
+        Int *queueIndex                 // IN/OUT: The index of the current entry
+    );
+
+public:
+    bool memory_ok;                     // Flag for the creating function to
+                                        // determine whether we had enough
+                                        // memory to initialize the Scheduler.
+    bool cuda_ok;                       // Flag for the creating function to
+                                        // determine whether we could
+                                        // successfully invoke the cuda
+                                        // initialization calls.
+
+    Front *frontList;
+    Int numFronts;
+    Int numFrontsCompleted;
+
+    int activeSet;
+
+    BucketList *bucketLists;
+
+    Int *afPerm;                        // Permutation of "active" fronts
+    Int *afPinv;                        // Inverse permutation of "active" fronts
+    Int numActiveFronts;
+
+    Int maxQueueSize;
+    Workspace *workQueues[2];
+    Int numTasks[2];
+    Int minApplyGranularity;            // The minimum number of tiles for which
+                                        // we will group apply tasks
+
+    bool *FrontDataPulled;              // A set of flags indicating whether R has
+                                        // been pulled off the GPU.
+    cudaEvent_t *eventFrontDataReady;   // A list of cudaEvents that are used to
+                                        // coordinate when the R factor is ready
+                                        // to be pulled from the GPU.
+    cudaEvent_t *eventFrontDataPulled;  // A list of cudaEvents that are used to
+                                        // coordinate when the R factor is finally
+                                        // finished transfering off the GPU.
+
+    // Use multiple CUDA streams to coordinate kernel launches and asynchronous
+    // memory transfers between the host and the device:
+    //   kernelStreams : Launch kernels on alternating streams
+    //   H2D           : Asynchronous memory transfer stream (Host-to-Device)
+    //   D2H           : Asynchronous memory transfer stream (Device-to-Host)
+    cudaStream_t kernelStreams[2];
+    cudaStream_t memoryStreamH2D;
+    cudaStream_t memoryStreamD2H;
+
+    /* Scheduler.cpp */
+    void *operator new(long unsigned int, Scheduler* p){ return p; }
+    Scheduler(Front *fronts, Int numFronts, size_t gpuMemorySize);
+    ~Scheduler();
+
+    /* Scheduler_Front.cpp */
+    void activateFront
+    (
+        Int f                   // The index of the front to operate on
+    );
+
+    bool finishFront
+    (
+        Int f                   // The index of the front to operate on
+    );
+
+    void initializeBucketList
+    (
+        Int f                   // The index of the front to operate on
+    )
+    {
+        // NOTE: tested by SPQR/Tcov, but not flagged as such in cov results
+        BucketList *dlbl = (&bucketLists[f]);
+        if(dlbl->useFlag) dlbl->Initialize();
+    }
+
+    /* Scheduler_TransferData.cpp */
+    void transferData
+    (
+        void
+    );
+
+    /* Scheduler_FillWorkQueue.cpp */
+    void fillWorkQueue
+    (
+        void
+    );
+
+    /* Scheduler_LaunchKernel.cpp */
+    void launchKernel
+    (
+        void
+    );
+
+    /* Scheduler_PostProcess.cpp */
+    bool postProcess
+    (
+        void
+    );
+
+    void toggleQueue
+    (
+        void
+    )
+    {
+        activeSet ^= 1;
+    }
+
+    /* Stats */
+    float kernelTime;
+    Int numKernelLaunches;
+    Int gpuFlops;
+
+#ifdef GPUQRENGINE_RENDER
+    /* Debug stuff */
+    const char *TaskNames[21];
+    const char *StateNames[9];
+    int renderCount;
+    void render();
+#endif
+
+#if 1
+    void debugDumpFront(Front *front);
+#endif
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_SparseMeta.hpp b/GPUQREngine/Include/GPUQREngine_SparseMeta.hpp
new file mode 100644
index 0000000..5cf6ca2
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_SparseMeta.hpp
@@ -0,0 +1,82 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_SparseMeta.hpp ==========================
+// =============================================================================
+//
+// The SparseMeta class further wraps metadata required to perform a sparse
+// factorization. SparseMeta sits within the Front class.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_SPARSEMETA_HPP
+#define GPUQRENGINE_SPARSEMETA_HPP
+
+#include "GPUQREngine_SEntry.hpp"
+
+// Using int instead of Int or Long since we need to know the exact
+// sizes on the CPU and GPU.
+
+/* Has more stuff to support sparse multifrontal factorization */
+class SparseMeta
+{
+public:
+    int fp;               // # of pivotal columns in the front
+    int nc;               // # of remaining children for the front
+    bool isStaged;        // T/F indicating whether this front's
+                          // parent is in a future stage
+    bool pushOnly;        // Related to isStaged, pushOnly signals
+                          // whether the front should only push its
+                          // data to its parent
+    bool isSparse;        // T/F indicating sparsiy
+
+    /* Metadata for S Assembly */
+    int lastSIndex;
+    SEntry *cpuS;         // Packed S - pointer into scheduler's cpuS
+    SEntry *gpuS;         // Packed S - pointer into scheduler's gpuS
+    int Scount;           // # S entries to ship to GPU.
+
+    /* Metadata for Pack Assembly */
+    int cm;               // # rows of the contribution block
+    int cn;               // # cols of the contribution block
+    int csize;            // total size of the contribution block
+                          //   (rows*cols)
+    int pn;               // # of columns in the parent
+    int pc;               // the p start for the contribution block
+    int lastCiStart;      // Last contribution block row where we added a task
+    int lastCjStart;      // Last contribution block col where we added a task
+    int *gpuRjmap;        // The gpu location of the Rjmap
+    int *gpuRimap;        // The gpu location of the Rimap
+    double *gpuC;         // location of the front's contribution block
+    double *gpuP;         // The location of the front's parent
+
+    SparseMeta()
+    {
+        fp = 0;
+        nc = 0;
+        isStaged = false;
+        pushOnly = false;
+        isSparse = false;
+
+        lastSIndex = 0;
+        cpuS = NULL;
+        gpuS = NULL;
+        Scount = 0;
+
+        cm = 0;
+        cn = 0;
+        csize = 0;
+        pn = 0;
+        pc = 0;
+        lastCiStart = 0;
+        lastCjStart = 0;
+        gpuRjmap = NULL;
+        gpuRimap = NULL;
+        gpuC = NULL;
+        gpuP = NULL;
+    }
+
+    ~SparseMeta()
+    {
+    }
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_Stats.hpp b/GPUQREngine/Include/GPUQREngine_Stats.hpp
new file mode 100644
index 0000000..405ea2a
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_Stats.hpp
@@ -0,0 +1,31 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_Stats.hpp ===============================
+// =============================================================================
+//
+// The QREngineStats structure wraps data members responsible for capturing
+// runtime characteristics of the factorization.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_STATS_HPP
+#define GPUQRENGINE_STATS_HPP
+
+struct QREngineStats
+{
+    float kernelTime;           // The total time spent in the kernel.
+                                // This time is accumulated across multiple
+                                // kernel invocations.
+
+    Int numLaunches;            // The total number of kernel launches.
+
+    Int flopsActual;            // The total number of flops performed.
+
+    QREngineStats()
+    {
+        kernelTime = 0.0;
+        numLaunches = 0;
+        flopsActual = 0;
+    }
+};
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_TaskDescriptor.hpp b/GPUQREngine/Include/GPUQREngine_TaskDescriptor.hpp
new file mode 100644
index 0000000..932a451
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_TaskDescriptor.hpp
@@ -0,0 +1,117 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_TaskDescriptor.hpp ======================
+// =============================================================================
+//
+// The TaskType enum is used by the GPU UberKernel to determine which subkernel
+// functionality to invoke.
+//
+// The TaskDescriptor struct wraps all metadata necessary to describe to the
+// GPU how to perform one logical task.
+//
+// =============================================================================
+
+#ifndef GPUQRENGINE_TASKDESCRIPTOR_HPP
+#define GPUQRENGINE_TASKDESCRIPTOR_HPP
+
+enum TaskType
+{
+    // Dummy Method (1 total)
+    TASKTYPE_Dummy,                     // Used only for initializing a task
+
+    // Factorize Methods (8 total)
+    TASKTYPE_GenericFactorize,          // An uncategorized Factorize.
+    TASKTYPE_FactorizeVT_3x1,           //   Factorize tasks are resolved
+    TASKTYPE_FactorizeVT_2x1,           //   when the work queue is filled
+    TASKTYPE_FactorizeVT_1x1,           //   based on the problem geometry,
+    TASKTYPE_FactorizeVT_3x1e,          //   factorization state, and whether
+    TASKTYPE_FactorizeVT_2x1e,          //   the factorization is at an
+    TASKTYPE_FactorizeVT_1x1e,          //   "edge case."
+    TASKTYPE_FactorizeVT_3x1w,
+
+    // Apply Methods (4 total)
+    TASKTYPE_GenericApply,              // An uncategorized Apply.
+    TASKTYPE_Apply3,                    //   These tasks are likewise resolved
+    TASKTYPE_Apply2,                    //   into their concrete types as the
+    TASKTYPE_Apply1,                    //   work queue is filled.
+
+    #ifdef GPUQRENGINE_PIPELINING
+    // ApplyFactorize Methods (6 total)
+    TASKTYPE_GenericApplyFactorize,     // An uncategorized Apply-Factorize.
+    TASKTYPE_Apply3_Factorize3,         //   These tasks are likewise resolved
+    TASKTYPE_Apply3_Factorize2,         //   into their concrete types as the
+    TASKTYPE_Apply2_Factorize3,         //   work queue is filled.
+    TASKTYPE_Apply2_Factorize2,
+    TASKTYPE_Apply2_Factorize1,
+    #endif
+
+    // Assembly Methods (2 total)
+    TASKTYPE_SAssembly,                 // Input matrix assembly
+    TASKTYPE_PackAssembly               // Push assembly (child to parent)
+};
+
+class Scheduler;
+
+struct TaskDescriptor
+{
+    /* Put pointers up front to guarantee word-alignment. */
+    double *F;                          // Pointer to the frontal matrix
+    double *AuxAddress[4];              // Usage Notes
+                                        //   SAssembly:
+                                        //     AuxAddress[0]    is SEntry*
+                                        //   PackAssembly:
+                                        //     AuxAddress[0]    is *C
+                                        //     AuxAddress[1]    is *P
+                                        //     AuxAddress[2]    is *Rjmap
+                                        //     AuxAddress[3]    is *Rimap
+                                        //   Apply, Factorize:
+                                        //     AuxAddress[0]    is VT
+                                        //   ApplyFactorize:
+                                        //     AuxAddress[0:1] are VT
+
+    TaskType Type;                      // The TaskType enum described above
+    int fm;                             // # Rows in the front
+    int fn;                             // # Cols in the front
+
+    int extra[10];                      // Usage Notes
+                                        //   SAssembly:
+                                        //     extra[0]    is Scount    (unused)
+                                        //     extra[1]    is pstart
+                                        //     extra[2]    is pend
+                                        //   PackAssembly:
+                                        //     extra[0]    is pn
+                                        //     extra[1]    is cm        (unused)
+                                        //     extra[2]    is cn        (unused)
+                                        //     extra[3]    is cTileSize
+                                        //     extra[4]    is cistart
+                                        //     extra[5]    is ciend
+                                        //     extra[6]    is cjstart
+                                        //     extra[7]    is cjend
+                                        //   Apply:
+                                        //     extra[0:2] are rowTiles
+                                        //     extra[4:7] are colTiles
+                                        //   Factorize:
+                                        //     extra[0:2] are rowTiles
+                                        //     extra[4]    is colTiles
+                                        //   ApplyFactorize:
+                                        //     extra[0:3] are rowTiles
+                                        //     extra[4:7] are colTiles
+                                        //     extra[8]    is delta
+                                        //     extra[9]    is secondMin
+                                        //
+};
+
+
+// These two methods are implemented in TaskDescriptor_flops.cpp.
+// They are used to rearrange tasks in the WorkQueue to promote a
+// uniform distribution of work items in the queue.
+Int getFlops
+(
+    TaskDescriptor *task                // Task for which to compute the flops
+);
+
+Int getWeightedFlops
+(
+    TaskDescriptor *task                // Task for which to compute the flops
+);
+
+#endif
diff --git a/GPUQREngine/Include/GPUQREngine_Timing.hpp b/GPUQREngine/Include/GPUQREngine_Timing.hpp
new file mode 100644
index 0000000..3972efb
--- /dev/null
+++ b/GPUQREngine/Include/GPUQREngine_Timing.hpp
@@ -0,0 +1,46 @@
+// =============================================================================
+// === GPUQREngine/Include/GPUQREngine_timing.hpp ==============================
+// =============================================================================
+//
+// Contains timing macros that wrap GPU timing logic, using cudaEvents.
+//
+// =============================================================================
+
+
+#ifndef GPUQRENGINE_TIMING_HPP
+#define GPUQRENGINE_TIMING_HPP
+
+#ifdef TIMING
+
+// create the timer
+#define TIMER_INIT()                            \
+cudaEvent_t start, stop ;                       \
+cudaEventCreate(&start) ;                       \
+cudaEventCreate(&stop) ;                        \
+
+// start the timer
+#define TIMER_START()                           \
+cudaEventRecord(start, 0);                      \
+
+// stop the timer and get the time since the last tic
+// t is the time since the last TIMER_START()
+#define TIMER_STOP(t)                           \
+cudaEventRecord(stop, 0);                       \
+cudaThreadSynchronize();                        \
+cudaEventElapsedTime(&(t), start, stop);        \
+
+// destroy the timer
+#define TIMER_FINISH()                          \
+cudaEventDestroy(start);                        \
+cudaEventDestroy(stop);                         \
+
+#else
+
+// compile with no timing
+#define TIMER_INIT() ;
+#define TIMER_START() ;
+#define TIMER_STOP(t) ;
+#define TIMER_FINISH() ;
+
+#endif
+#endif
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply.cu b/GPUQREngine/Include/Kernel/Apply/block_apply.cu
new file mode 100644
index 0000000..21acfab
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply.cu
@@ -0,0 +1,219 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply.cu =========================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply.cu: generic device function to apply a block Householder
+//------------------------------------------------------------------------------
+//
+// Computes C = V'*A ; C = T'*C ; A = A-V*C ; where:
+// T is upper triangular of size M-by-M (a single tile, where M = TILESIZE)
+// V is lower triangular of size K-by-M,
+// C is rectangular of size M-by-N, and
+// A is rectangular of size K-by-n, operated on blocks of N = 2*M or M columns
+// at a time.
+//
+// V and T are stored in the same matrix in shared memory, of size K+1-by-M
+// (since both have a non-trivial diagonal).  The first M+1 rows of this
+// combined [V T] matrix are held outside the frontal matrix.  The remainder
+// of V is held in the frontal matrix.
+//
+// The C matrix resides in shared memory, and exists only within this function.
+//
+// The A matrix resides in the frontal matrix, in global memory.  It is
+// temporarily loaded into shared memory for C=V'*A, one halftile at a time. 
+//
+// All data starts and ends in global memory.  Shared memory is used to hold T,
+// C and V during the computation.  All of A and all but the first 32 rows of V
+// are held in the frontal matrix.  The V1 matrix (the first 32 rows of V) and
+// all of T are held in a 33-by-32 matrix (VT), where V is lower triangular and
+// T is upper triangular.
+//
+// All threads are used to load data from global memory.  Only CTHREADS threads
+// are used to compute C=T'*V'*A.  ATHREADS threads compute A=A-V*C.
+//
+// The A matrix and V2 are held in the frontal matrix F, of size fm-by-fn. 
+// All matrices are in row-major form.  Suppose F is 8-by-9 tiles:
+//
+//        0 1 2 3 4 5 6 7 8
+//      0 . . . . . . . . .
+//      1 . . . . . . . . .
+//      2 . o . a a a a a .
+//      3 . . . . . . . . .
+//      4 . v . a a a a a .
+//      5 . . . . . . . . .
+//      6 . v . a a a a a .
+//      7 . . . . . . . . .
+//
+// The "o", above, is not stored in the front, but in a 33-by-32 VT array in
+// global memory outside the front.  It contains all of T, and the triangular
+// part of V (V1).  The "v" holds the rectangular part of V (V2), and it is in
+// the front.  The "a" entries are tiles that must be updated via A =
+// A-V*T'*V'*A.
+//
+// In this example, the row tiles in the bundle are [2 4 6].  The rowTile vector
+// holds [2 4 6]*32.  The column tiles are 1 (for V) and 3:7 for A, so jTile
+// contains [1 3 7]*32.
+//
+// This code skips the load/store of entries in tiles that extend past the edge
+// of the front.  However, jTile and rowTile must always be multiples of the
+// tilesize (32), since the edge cases are only triggered by the edge of the
+// frontal matrix.
+//
+// The task is defined by the following parameters:
+//      double *F       pointer to frontal matrix in GPU global memory
+//      double *VT[0]   pointer to [V1 T] matrix in GPU global memory
+//      int fm          # of rows in the front (not # of tiles);
+//                      only needed for edge cases.
+//      int fn          # of columns in the front.  F is fm-by-fn,
+//                      and takes space for fm*fn entries (each 8 bytes)
+//                      in global memory.  F is stored in row major form.
+//      rowTiles [3]    assuming the panel size is 3
+//      jTile [3]       size is 3, regardless of panel size
+//      Type            defines which variant of this kernel to call
+//
+// Future: the pipeline task, which will will do:
+//      1) apply to a col tile
+//          C = V'*A
+//          C = T'*C
+//          A2 = A-V*C       overwrite memory space V with the updated A2.
+//      2) load growth tiles
+//      3) factorize the target, A2, then save [V1 T] in its own space,
+//         and save V1 and R in the front
+
+//------------------------------------------------------------------------------
+
+#define M TILESIZE
+
+__device__ void BLOCK_APPLY ( )
+{
+
+    //--------------------------------------------------------------------------
+    // grab my task from the queue
+    //--------------------------------------------------------------------------
+
+    double *glF = myTask.F ;
+    int fn = myTask.fn ;
+    int fm = myTask.fm ;
+
+    //--------------------------------------------------------------------------
+    // load V and T, using all threads
+    //--------------------------------------------------------------------------
+
+    {
+        double (*glVT)[M] = (double (*)[M]) myTask.AuxAddress[0] ;
+        // load the first row of T from the VT block, using one warp
+        if (threadIdx.x < M)
+        {
+            SHV (0, -1, jv) = GLVT (-1, jv) ;
+        }
+
+        // load the first tile of V and T from the VT block
+        for (int ii = 0 ; ii < NVCHUNKS ; ii++)
+        {
+            int i = ii * VCHUNKSIZE + iv ;
+            if (ii < NVCHUNKS-1 || i < M)
+            {
+                SHV (0, i, jv) = GLVT (i, jv) ;
+            }
+        }
+    }
+
+    // load subsequent tiles of V from the frontal matrix
+    {
+        int j0 = myTask.extra [4] ;
+        for (int t = 1 ; t < ROW_PANELSIZE ; t++)
+        {
+            // For the edge case, only check if the row is inside the front.
+            // The column is always in the front because V always has M columns.
+            for (int ii = 0 ; ii < NVCHUNKS ; ii++)
+            {
+                int i = ii * VCHUNKSIZE + iv ;
+                if (ii < NVCHUNKS-1 || i < M)
+                {
+                    int fi = IFRONT (t,i) ;
+                    SHV (t, i, jv) = (fi < fm) ? glF [fi * fn + (j0+jv)] : 0.0 ;
+                }
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // do the block apply:  A = A - V*T'*V'*A
+    //--------------------------------------------------------------------------
+
+    int j1 = myTask.extra [5] ;
+
+    #if (COL_PANELSIZE == 1)
+
+        // Apply the update to a single column tile.  jTile [2] is ignored.
+        // Handle both row and column edge cases.
+        #define ROW_EDGE_CASE
+        #define COL_EDGE_CASE
+        #include "block_apply_chunk.cu"
+
+        // Do the rearrange for pipelined factorization.
+
+        #include "pipelined_rearrange.cu"        
+
+
+    #else
+
+        // When COL_PANELSIZE is 2, this function iterates across all column
+        // tiles in chunks of 2 column tiles at a time.
+
+        #ifdef FANCY
+
+            // This first operates on pairs of column tiles that fully fit into
+            // the front, with no handling of the column edge case.  This is
+            // followed by a cleanup phase that handles the last columns, with
+            // the column edge case enabled.  This is slightly faster than the
+            // simple code below.  (Fermi: 188 vs 185 Gflops, Kepler: 263 vs
+            // 259).  However, the code doubles in length with this version.
+
+            int jend = myTask.extra [6] - 2*M ;
+            for ( ; j1 <= jend ; j1 += 2*M)
+            {
+                // Apply the update to columns j1 through j1+2*M-1.  Check for
+                // rows outside the front.  All columns reside in the front.
+                #define ROW_EDGE_CASE
+                #include "block_apply_chunk.cu"
+            }
+
+            if (j1 < myTask.extra [6])
+            {
+                // Apply the update to columns j1 through the end of the front.
+                // Check for both rows and columns outside the front
+                #define ROW_EDGE_CASE
+                #define COL_EDGE_CASE
+                #include "block_apply_chunk.cu"
+            }
+
+        #else
+
+            // Simple version:  always use the edge-handling code.
+
+            int jend = myTask.extra [6] ;
+            for ( ; j1 < jend ; j1 += 2*M)
+            {
+                // Apply the update to columns j1 through j1+2*M-1.
+                // Check for both rows and columns outside the front
+                #define ROW_EDGE_CASE
+                #define COL_EDGE_CASE
+                #include "block_apply_chunk.cu"
+            }
+
+        #endif
+
+    #endif
+
+}
+
+//------------------------------------------------------------------------------
+// #undefines of terms defined in the parent function
+//------------------------------------------------------------------------------
+
+#undef BLOCK_APPLY
+#undef ROW_PANELSIZE
+#undef COL_PANELSIZE
+#undef M
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply_1.cu b/GPUQREngine/Include/Kernel/Apply/block_apply_1.cu
new file mode 100644
index 0000000..85c055b
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply_1.cu
@@ -0,0 +1,12 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply_1.cu =======================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply_1: handles all edge cases and any number of column tiles
+//------------------------------------------------------------------------------
+
+#define BLOCK_APPLY block_apply_1
+#define ROW_PANELSIZE 1
+#define COL_PANELSIZE 2
+#include "block_apply.cu"
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply_1_by_1.cu b/GPUQREngine/Include/Kernel/Apply/block_apply_1_by_1.cu
new file mode 100644
index 0000000..419c446
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply_1_by_1.cu
@@ -0,0 +1,12 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply_1_by_1.cu ==================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply_1_by_1: handles all edge cases, but just a single column tile
+//------------------------------------------------------------------------------
+
+#define BLOCK_APPLY block_apply_1_by_1
+#define ROW_PANELSIZE 1
+#define COL_PANELSIZE 1
+#include "block_apply.cu"
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply_2.cu b/GPUQREngine/Include/Kernel/Apply/block_apply_2.cu
new file mode 100644
index 0000000..fdbebe4
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply_2.cu
@@ -0,0 +1,12 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply_2.cu =======================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply_2: handles all edge cases and any number of column tiles
+//------------------------------------------------------------------------------
+
+#define BLOCK_APPLY block_apply_2
+#define ROW_PANELSIZE 2
+#define COL_PANELSIZE 2
+#include "block_apply.cu"
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply_2_by_1.cu b/GPUQREngine/Include/Kernel/Apply/block_apply_2_by_1.cu
new file mode 100644
index 0000000..3cdebfe
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply_2_by_1.cu
@@ -0,0 +1,12 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply_2_by_1.cu ==================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply_2_by_1: handles all edge cases, but just a single column tile
+//------------------------------------------------------------------------------
+
+#define BLOCK_APPLY block_apply_2_by_1
+#define ROW_PANELSIZE 2
+#define COL_PANELSIZE 1
+#include "block_apply.cu"
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply_3.cu b/GPUQREngine/Include/Kernel/Apply/block_apply_3.cu
new file mode 100644
index 0000000..93da927
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply_3.cu
@@ -0,0 +1,12 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply_3.cu =======================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply_3: handles all edge cases and any number of column tiles
+//------------------------------------------------------------------------------
+
+#define BLOCK_APPLY block_apply_3
+#define ROW_PANELSIZE 3
+#define COL_PANELSIZE 2
+#include "block_apply.cu"
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply_3_by_1.cu b/GPUQREngine/Include/Kernel/Apply/block_apply_3_by_1.cu
new file mode 100644
index 0000000..cb9d229
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply_3_by_1.cu
@@ -0,0 +1,12 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply_3_by_1.cu ==================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply_3_by_1: handles all edge cases, but just a single column tile
+//------------------------------------------------------------------------------
+
+#define BLOCK_APPLY block_apply_3_by_1
+#define ROW_PANELSIZE 3
+#define COL_PANELSIZE 1
+#include "block_apply.cu"
diff --git a/GPUQREngine/Include/Kernel/Apply/block_apply_chunk.cu b/GPUQREngine/Include/Kernel/Apply/block_apply_chunk.cu
new file mode 100644
index 0000000..a06fd9c
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/block_apply_chunk.cu
@@ -0,0 +1,529 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/block_apply_chunk.cu ===================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// block_apply_chunk macro
+//------------------------------------------------------------------------------
+
+// A = A - V*T'*V'*A, for a single chunk of N columns of A, starting at column
+// j1 and ending at j1+N-1.
+//
+// This function uses fixed thread geometry and loop unrolling, which requires
+// the geometry to be known at compile time for best efficiency.  It is then
+// #include'd by the block_apply_x function (block_apply.cu).  The following
+// terms are #define'd by each specific version:
+//
+//      ROW_PANELSIZE    # of row tiles in V and A
+//      COL_PANELSIZE    # of column tiles in C and A
+//      CBITTYROWS       # of rows in the C bitty block
+//      CBITTYCOLS       # of cols in the C bitty block
+//      ABITTYROWS       # of rows in the A bitty block
+//      ABITTYCOLS       # of cols in the A bitty block
+//
+// The C bitty must cannot be larger than the A bitty block, since additional
+// registers are used to buffer the A matrix while the C bitty block is being
+// computed.  These buffer registers are not used while computing with the A
+// bitty block, so for some variants of this kernel, they can be overlapped
+// with the A bitty block.
+//
+// The ROW_PANELSIZE, COL_PANELSIZE, ROW_EDGE_CASE, and COL_EDGE_CASE are
+// #define'd by the parent file(s) that include this file.  The *_EDGE_CASE
+// macros are then #undefined here.  The bitty block dimensions are defined
+// below.  This file is #include'd into block_apply.cu.  It is not a standalone
+// function.
+
+{
+
+    //--------------------------------------------------------------------------
+    // bitty block sizes
+    //--------------------------------------------------------------------------
+
+    #if (ROW_PANELSIZE == 3)
+
+        #if (COL_PANELSIZE == 2)
+
+            //------------------------------------------------------------------
+            // 3-by-2 block apply
+            //------------------------------------------------------------------
+
+            // V is 3-by-1, C is 1-by-2, A is 3-by-2 (in # tiles)
+            // 256 threads, each does a 4-by-2 block of C = T'*V'*A
+            #define CBITTYROWS      4
+            #define CBITTYCOLS      2
+            // 384 threads, each does a 4-by-4 block of A = A-V*C
+            #define ABITTYROWS      4
+            #define ABITTYCOLS      4
+
+        #else
+
+            //------------------------------------------------------------------
+            // 3-by-1 block apply
+            //------------------------------------------------------------------
+
+            // V is 3-by-1, C is 1-by-1, A is 3-by-1 (in # tiles)
+            // 256 threads, each does a 2-by-2 block of C = T'*V'*A
+            #define CBITTYROWS      2
+            #define CBITTYCOLS      2
+            // 384 threads, each does a 2-by-4 block of A = A-V*C
+            #define ABITTYROWS      2
+            #define ABITTYCOLS      4
+
+        #endif
+
+    #elif (ROW_PANELSIZE == 2)
+
+        #if (COL_PANELSIZE == 2)
+
+            //------------------------------------------------------------------
+            // block_apply_2_by_2
+            //------------------------------------------------------------------
+
+            // V is 2-by-1, C is 1-by-2, A is 2-by-2 (in # tiles)
+            // 256 threads, each does a 4-by-2 block of C = T'*V'*A
+            #define CBITTYROWS      4
+            #define CBITTYCOLS      2
+            // 256 threads, each does a 4-by-4 block of A = A-V*C
+            #define ABITTYROWS      4
+            #define ABITTYCOLS      4
+
+        #else
+
+            //------------------------------------------------------------------
+            // block_apply_2_by_1
+            //------------------------------------------------------------------
+
+            // V is 2-by-1, C is 1-by-1, A is 2-by-1 (in # tiles)
+            // 256 threads, each does a 2-by-2 block of C = T'*V'*A
+            #define CBITTYROWS      2
+            #define CBITTYCOLS      2
+            // 256 threads, each does a 2-by-4 block of A = A-V*C
+            #define ABITTYROWS      2
+            #define ABITTYCOLS      4
+
+
+        #endif
+
+    #else
+
+        #if (COL_PANELSIZE == 2)
+
+            //------------------------------------------------------------------
+            // block_apply_1_by_2
+            //------------------------------------------------------------------
+
+            // V is 1-by-1, C is 1-by-2, A is 1-by-2 (in # tiles)
+            // 256 threads, each does a 4-by-2 block of C = T'*V'*A
+            #define CBITTYROWS      2
+            #define CBITTYCOLS      4
+            // 256 threads, each does a 4-by-2 block of A = A-V*C
+            #define ABITTYROWS      2
+            #define ABITTYCOLS      4
+
+        #else
+
+            //------------------------------------------------------------------
+            // block_apply_1_by_1
+            //------------------------------------------------------------------
+
+            // V is 1-by-1, C is 1-by-1, A is 1-by-1 (in # tiles)
+            // 256 threads, each does a 2-by-2 block of C = T'*V'*A
+            #define CBITTYROWS      2
+            #define CBITTYCOLS      2
+            // 256 threads, each does a 2-by-2 block of A = A-V*C
+            #define ABITTYROWS      2
+            #define ABITTYCOLS      2
+
+        #endif
+
+    #endif
+
+    //--------------------------------------------------------------------------
+    // matrix sizes and thread geometry
+    //--------------------------------------------------------------------------
+
+    // For each outer iteration, C is M-by-N, V is (K+1)-by-M (with an extra
+    // row for T), and A is K-by-N.
+    #define K           (ROW_PANELSIZE * M)
+    #define N           (COL_PANELSIZE * M)
+
+    // threads to use for C=T'*(V'*A)
+    #define CTHREADS    ((M * N) / (CBITTYROWS * CBITTYCOLS))
+
+    // threads to use for A=A-V*C
+    #define ATHREADS    ((K * N) / (ABITTYROWS * ABITTYCOLS))
+
+    //--------------------------------------------------------------------------
+    // bitty blocks for the computation
+    //--------------------------------------------------------------------------
+
+    // Each thread owns a bitty block of C for C=T'*V'*A.  The top left entry
+    // owned by a thread is C(ic,jc).  Thread 0 does C(0,0), thread 1 does
+    // C(1,0) ...
+    #define ic          (threadIdx.x % (M/CBITTYROWS))
+    #define jc          (threadIdx.x / (M/CBITTYROWS))
+    #define MYCBITTYROW(ii) (ii * (M/CBITTYROWS) + ic)
+    #define MYCBITTYCOL(jj) (jj * (N/CBITTYCOLS) + jc)
+
+    // Each thread owns a bitty block of A for A=A-V*C, with top left entry
+    // A(ia,ja).  Thread 0 does A(0,0), thread 1 does A(0,1), thread 2 does
+    // A(0,2), ... so that global memory loads/stores are coallesced across a
+    // warp.
+    #define ia          (threadIdx.x / (N/ABITTYCOLS))
+    #define ja          (threadIdx.x % (N/ABITTYCOLS))
+    #define MYABITTYROW(ii) (ii * (K/ABITTYROWS) + ia)
+    #define MYABITTYCOL(jj) (jj * (N/ABITTYCOLS) + ja)
+
+    //--------------------------------------------------------------------------
+    // loading the A matrix
+    //--------------------------------------------------------------------------
+
+    // Each thread loads a set of entries of A defined by iaload and jaload.
+    // The first entry loaded by a thread is A(iaload,jaload), and then it
+    // loads entries every ACHUNKSIZE rows after that (in the same column
+    // jaload).
+    #define iaload      (threadIdx.x / N)
+    #define jaload      (threadIdx.x % N)
+    #define ACHUNKSIZE  (NUMTHREADS / N)
+    #define NACHUNKS    CEIL (HALFTILE*N, NUMTHREADS)
+
+    int fjload = j1 + jaload ;
+
+    //--------------------------------------------------------------------------
+    // register allocation
+    //--------------------------------------------------------------------------
+
+    // C bitty block is no larger than the A bitty block, in both dimensions.
+    double rbit [ABITTYROWS][ABITTYCOLS] ;
+    double rrow [ABITTYROWS] ;
+    double rcol [ABITTYCOLS] ;
+
+    #if (CBITTYCOLS == ABITTYCOLS)
+        // the A bitty block is too small to hold the A buffer
+        double abuffer [NACHUNKS] ;
+        #define rbitA(i) abuffer [i]
+    #else
+        // use the last column of the A bitty block for the A buffer
+        #define rbitA(i) (rbit [i][ABITTYCOLS-1])
+    #endif
+
+    //--------------------------------------------------------------------------
+    // edge case
+    //--------------------------------------------------------------------------
+
+    #ifdef ROW_EDGE_CASE
+        // check if a row is inside the front.
+        #define INSIDE_ROW(test) (test)
+    #else
+        // the row is guaranteed to reside inside the frontal matrix.
+        #define INSIDE_ROW(test) (1)
+    #endif
+
+    #ifdef COL_EDGE_CASE
+        // check if a column is inside the front.
+        #define INSIDE_COL(test) (test)
+    #else
+        // the column is guaranteed to reside inside the frontal matrix.
+        #define INSIDE_COL(test) (1)
+    #endif
+
+    bool aloader = INSIDE_COL (fjload < fn) ;
+
+    //--------------------------------------------------------------------------
+    // C = V'*A, where V is now in shared, and A is loaded from global
+    //--------------------------------------------------------------------------
+
+    // prefetch the first halftile of A from global to register
+    #pragma unroll
+    for (int ii = 0 ; ii < NACHUNKS ; ii++)
+    {
+        rbitA (ii) = 0 ;
+    }
+    #pragma unroll
+    for (int ii = 0 ; ii < NACHUNKS ; ii++)
+    {
+        int i = ii * ACHUNKSIZE + iaload ;
+        if (ii < NACHUNKS-1 || i < HALFTILE)
+        {
+            int fi = IFRONT (0, i) ;
+            if (aloader && INSIDE_ROW (fi < fm))
+            {
+                rbitA (ii) = glF [fi * fn + fjload] ;
+            }
+        }
+    }
+
+    // The X=V*C computation in the prior iteration reads shC, but the same
+    // space is used to load A from the frontal matrix in this iteration.
+    __syncthreads ( ) ;
+
+    // clear the C bitty block
+    #pragma unroll
+    for (int ii = 0 ; ii < CBITTYROWS ; ii++)
+    {
+        #pragma unroll
+        for (int jj = 0 ; jj < CBITTYCOLS ; jj++)
+        {
+            rbit [ii][jj] = 0 ;
+        }
+    }
+
+    // C=V'*A for the first tile of V, which is lower triangular
+    #define FIRST_TILE
+    #include "cevta_tile.cu"
+    
+    // Subsequent tiles of V are square.  Result is in C bitty block.
+    for (int t = 1 ; t < ROW_PANELSIZE ; t++)
+    {
+        #include "cevta_tile.cu"
+    }
+
+    //--------------------------------------------------------------------------
+    // write result of C=V'*A into shared, and clear the C bitty block
+    //--------------------------------------------------------------------------
+
+    if (CTHREADS == NUMTHREADS || threadIdx.x < CTHREADS)
+    {
+        #pragma unroll
+        for (int ii = 0 ; ii < CBITTYROWS ; ii++)
+        {
+            int i = MYCBITTYROW (ii) ;
+            #pragma unroll
+            for (int jj = 0 ; jj < CBITTYCOLS ; jj++)
+            {
+                int j = MYCBITTYCOL (jj) ;
+                shC [i][j] = rbit [ii][jj] ;
+                rbit [ii][jj] = 0 ;
+            }
+        }
+    }
+
+    // make sure all of shC is available to all threads
+    __syncthreads ( ) ;
+
+    //--------------------------------------------------------------------------
+    // C = triu(T)'*C, leaving the result in the C bitty block
+    //--------------------------------------------------------------------------
+
+    if (CTHREADS == NUMTHREADS || threadIdx.x < CTHREADS)
+    {
+        #pragma unroll
+        for (int i = 0 ; i < M ; i++)
+        {
+            #pragma unroll
+            for (int ii = 0 ; ii < CBITTYROWS ; ii++)
+            {
+                int j = MYCBITTYROW (ii) ;
+                if (i <= j)
+                {
+                    rrow [ii] = ST (i,j) ;
+                }
+            }
+            #pragma unroll
+            for (int jj = 0 ; jj < CBITTYCOLS ; jj++)
+            {
+                int j = MYCBITTYCOL (jj) ;
+                rcol [jj] = shC [i][j] ;
+            }
+            #pragma unroll
+            for (int ii = 0 ; ii < CBITTYROWS ; ii++)
+            {
+                int j = MYCBITTYROW (ii) ;
+                if (i <= j)
+                {
+                    #pragma unroll
+                    for (int jj = 0 ; jj < CBITTYCOLS ; jj++)
+                    {
+                        rbit [ii][jj] += rrow [ii] * rcol [jj] ;
+                    }
+                }                
+            }
+        }
+    }
+
+    // We need syncthreads here because of the write-after-read hazard.  Each
+    // thread reads the old C, above, and then C is modified below with the new
+    // C, where newC = triu(T)'*oldC.
+    __syncthreads ( ) ;
+
+    //--------------------------------------------------------------------------
+    // write the result of C = T'*C to shared memory
+    //--------------------------------------------------------------------------
+
+    if (CTHREADS == NUMTHREADS || threadIdx.x < CTHREADS)
+    {
+        #pragma unroll
+        for (int ii = 0 ; ii < CBITTYROWS ; ii++)
+        {
+            int i = MYCBITTYROW (ii) ;
+            #pragma unroll
+            for (int jj = 0 ; jj < CBITTYCOLS ; jj++)
+            {
+                int j = MYCBITTYCOL (jj) ;
+                shC [i][j] = rbit [ii][jj] ;
+            }
+        }
+    }
+
+    // All threads come here.  We need a syncthreads because
+    // shC has been written above and must be read below in A=A-V*C.
+    __syncthreads ( ) ;
+
+    //--------------------------------------------------------------------------
+    // A = A - V*C
+    //--------------------------------------------------------------------------
+
+    if (ATHREADS == NUMTHREADS || threadIdx.x < ATHREADS)
+    {
+
+        //----------------------------------------------------------------------
+        // clear the A bitty block
+        //----------------------------------------------------------------------
+
+        #pragma unroll
+        for (int ii = 0 ; ii < ABITTYROWS ; ii++)
+        {
+            #pragma unroll
+            for (int jj = 0 ; jj < ABITTYCOLS ; jj++)
+            {
+                rbit [ii][jj] = 0 ;
+            }
+        }
+
+        //----------------------------------------------------------------------
+        // X = tril(V)*C, store result into register (rbit)
+        //----------------------------------------------------------------------
+
+        #pragma unroll
+        for (int p = 0 ; p < M ; p++)
+        {
+            #pragma unroll
+            for (int ii = 0 ; ii < ABITTYROWS ; ii++)
+            {
+                int i = MYABITTYROW (ii) ;
+                if (i >= p)
+                {
+                    rrow [ii] = shV [1+i][p] ;
+                }
+            }
+            #pragma unroll
+            for (int jj = 0 ; jj < ABITTYCOLS ; jj++)
+            {
+                int j = MYABITTYCOL (jj) ;
+                rcol [jj] = shC [p][j] ;
+            }
+            #pragma unroll
+            for (int ii = 0 ; ii < ABITTYROWS ; ii++)
+            {
+                int i = MYABITTYROW (ii) ;
+                if (i >= p)
+                {
+                    #pragma unroll
+                    for (int jj = 0 ; jj < ABITTYCOLS ; jj++)
+                    {
+                        rbit [ii][jj] += rrow [ii] * rcol [jj] ;
+                    }
+                }
+            }
+        }
+
+        //----------------------------------------------------------------------
+        // A = A - X, which finalizes the computation A = A - V*(T'*(V'*A))
+        //----------------------------------------------------------------------
+        
+        #if (COL_PANELSIZE == 2)
+        
+            #pragma unroll
+            for (int ii = 0 ; ii < ABITTYROWS ; ii++)
+            {
+                int i = MYABITTYROW (ii) ;
+                int fi = IFRONT (i / M, i % M) ;
+                #pragma unroll
+                for (int jj = 0 ; jj < ABITTYCOLS ; jj++)
+                {
+                    int fj = j1 + MYABITTYCOL (jj) ;
+                    if (INSIDE_ROW (fi < fm) && INSIDE_COL (fj < fn))
+                    {
+                        glF [fi * fn + fj] -= rbit [ii][jj] ;
+                    }
+                }
+            }
+
+        #else
+        
+            #pragma unroll
+            for (int ii = 0 ; ii < ABITTYROWS ; ii++)
+            {
+                int i = MYABITTYROW (ii) ;
+                int fi = IFRONT (i / M, i % M) ;
+                #pragma unroll
+                for (int jj = 0 ; jj < ABITTYCOLS ; jj++)
+                {
+                    int fj = j1 + MYABITTYCOL (jj) ;
+                    if (INSIDE_ROW (fi < fm) && INSIDE_COL (fj < fn))
+                    {
+                        shV[i][MYABITTYCOL(jj)] = glF[fi*fn+fj] - rbit[ii][jj];
+                    }
+                    else
+                    {
+                        shV[i][MYABITTYCOL(jj)] = 0.0;
+                    }
+                }
+            }
+    
+        #endif
+    }
+
+    //--------------------------------------------------------------------------
+    // sync
+    //--------------------------------------------------------------------------
+
+    // The X=V*C computation in this iteration reads shC, but the same space is
+    // used to load A from the frontal matrix in C=V'*A in the next iteration.
+    // This final sync also ensures that all threads finish the block_apply
+    // at the same time.  Thus, no syncthreads is needed at the start of a
+    // subsequent function (the pipelined apply+factorize, for example).
+
+    __syncthreads ( ) ;
+}
+
+//------------------------------------------------------------------------------
+// undef's
+//------------------------------------------------------------------------------
+
+// The following #define's appear above.  Note that FIRST_TILE is not #undef'd
+// since that is done by cevta_tile.cu.
+#undef CBITTYROWS
+#undef CBITTYCOLS
+#undef ABITTYROWS
+#undef ABITTYCOLS
+
+#undef K
+#undef N
+
+#undef CTHREADS
+#undef ATHREADS
+
+#undef ic
+#undef jc
+#undef MYCBITTYROW
+#undef MYCBITTYCOL
+
+#undef ia
+#undef ja
+#undef MYABITTYROW
+#undef MYABITTYCOL
+
+#undef iaload
+#undef jaload
+#undef ACHUNKSIZE
+#undef NACHUNKS
+
+#undef rbitA
+#undef INSIDE_ROW
+#undef INSIDE_COL
+
+// Defined in the parent file that includes this one.  Note that ROW_PANELSIZE
+// is not #undef'd, since that is done in the parent.
+#undef ROW_EDGE_CASE
+#undef COL_EDGE_CASE
diff --git a/GPUQREngine/Include/Kernel/Apply/cevta_tile.cu b/GPUQREngine/Include/Kernel/Apply/cevta_tile.cu
new file mode 100644
index 0000000..b33f1e8
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/cevta_tile.cu
@@ -0,0 +1,152 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/cevta_tile.cu ==========================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// cevta_tile macro
+//------------------------------------------------------------------------------
+
+// C=V'*A for a single tile, computed in two chunks of HALFTILE each.  Also
+// loads in the A matrix into the SHA buffer.  The first tile is lower
+// triangular (selected by defining FIRST_TILE in the caller).  Subsequent
+// tiles are square (and FIRST_TILE is not defined).  This file is #include'd
+// into block_apply_chunk.cu.  It is not a stand-alone function.
+
+#ifdef FIRST_TILE
+#define this_tile 0
+#define TRIL(test) (test)
+#else
+#define this_tile t
+#define TRIL(test) (1)
+#endif
+
+{
+    #pragma unroll
+    for (int p = 0 ; p < 2 ; p++)
+    {
+
+        //----------------------------------------------------------------------
+        // move the prefetched A from register into shared for this halftile
+        //----------------------------------------------------------------------
+
+        // Write next halftile of 16 rows of A from register to shared, for
+        // _this_ iteration of p.  The abuffer was read from global to register
+        // in the prior iteration of p (the prefetch below), or in the prefetch
+        // in block_apply_chunk.cu.  If column fjload is outside the front,
+        // rbitA is all zero, which safely clears SHA.
+
+        #pragma unroll
+        for (int ii = 0 ; ii < NACHUNKS ; ii++)
+        {
+            int i = ii * ACHUNKSIZE + iaload ;
+            if (ii < NACHUNKS-1 || i < HALFTILE)
+            {
+                SHA (p*HALFTILE+i, jaload) = rbitA (ii) ;
+            }
+        }
+
+        // V and A for this iteration of p are now loaded into shared
+        __syncthreads ( ) ;
+
+        //----------------------------------------------------------------------
+        // prefetch the next halftile of A from global into register
+        //----------------------------------------------------------------------
+
+        // Load the next halftile of A from global memory to register,
+        // not for this iteration of p, but the next.
+
+        if (p == 0)
+        {
+            // Read the next halftile of A for this row tile.
+            #pragma unroll
+            for (int ii = 0 ; ii < NACHUNKS ; ii++)
+            {
+                rbitA (ii) = 0 ;
+            }
+            #pragma unroll
+            for (int ii = 0 ; ii < NACHUNKS ; ii++)
+            {
+                int i = ii * ACHUNKSIZE + iaload ;
+                if (ii < NACHUNKS-1 || i < HALFTILE)
+                {
+                    int fi = IFRONT (this_tile, HALFTILE+i) ;
+                    if (aloader && INSIDE_ROW (fi < fm))
+                    {
+                        rbitA (ii) = glF [fi * fn + fjload] ;
+                    }
+                }
+            }
+        }
+        else if (this_tile+1 < ROW_PANELSIZE)       // p is 1 for this case
+        {
+            // Read the first halftile of V and A for the next row tile,
+            // but not if we are computing with the very last tile.
+            #pragma unroll
+            for (int ii = 0 ; ii < NACHUNKS ; ii++)
+            {
+                rbitA (ii) = 0 ;
+            }
+            #pragma unroll
+            for (int ii = 0 ; ii < NACHUNKS ; ii++)
+            {
+                int i = ii * ACHUNKSIZE + iaload ;
+                if (ii < NACHUNKS-1 || i < HALFTILE)
+                {
+                    int fi = IFRONT (this_tile+1, i) ;
+                    if (aloader && INSIDE_ROW (fi < fm))
+                    {
+                        rbitA (ii) = glF [fi * fn + fjload] ;
+                    }
+                }
+            }
+        }
+
+        //----------------------------------------------------------------------
+        // C = tril (V)'*A for this halffile
+        //----------------------------------------------------------------------
+
+        // For square tiles (all but the first tile of V), TRIL is always
+        // true, and this code is simpler and faster as a result.
+
+        if (CTHREADS == NUMTHREADS || threadIdx.x < CTHREADS)
+        {
+            // C=tril(V)'*A, compute with a halftile of A and V
+            #pragma unroll
+            for (int pp = 0 ; pp < HALFTILE ; pp++)
+            {
+                int i = p * HALFTILE + pp ;
+                #pragma unroll
+                for (int ii = 0 ; ii < CBITTYROWS ; ii++)
+                {
+                    int j = MYCBITTYROW (ii) ;
+                    if (TRIL (i >= j))
+                    {
+                        rrow [ii] = SHV (this_tile, i, j) ;
+                    }
+                }
+                #pragma unroll
+                for (int jj = 0 ; jj < CBITTYCOLS ; jj++)
+                {
+                    int j = MYCBITTYCOL (jj) ;
+                    rcol [jj] = SHA (i, j) ;
+                }
+                #pragma unroll
+                for (int ii = 0 ; ii < CBITTYROWS ; ii++)
+                {
+                    if (TRIL (i >= MYCBITTYROW (ii)))
+                    {
+                        #pragma unroll
+                        for (int jj = 0 ; jj < CBITTYCOLS ; jj++)
+                        {
+                            rbit [ii][jj] += rrow [ii] * rcol [jj] ;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+#undef FIRST_TILE
+#undef this_tile
+#undef TRIL
diff --git a/GPUQREngine/Include/Kernel/Apply/params_apply.hpp b/GPUQREngine/Include/Kernel/Apply/params_apply.hpp
new file mode 100644
index 0000000..3b65549
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/params_apply.hpp
@@ -0,0 +1,63 @@
+
+#ifndef PARAMS_APPLY_HPP_
+#define PARAMS_APPLY_HPP_
+
+//------------------------------------------------------------------------------
+// definitions for all variants of block_apply
+//------------------------------------------------------------------------------
+
+// maximum number of row and column tiles in a panel
+#define MAX_ROW_TILES 3
+#define MAX_COL_TILES 2
+
+#define shV shMemory.apply.V
+#define shC shMemory.apply.C
+
+// each tile is 32-by-32, which is always M, for all variants
+// (M is defined inside block_apply.cu, and then #undef'd there also)
+// #define M TILESIZE
+
+// V1 is held in the lower triangular part of the glVT array, including the
+// diagonal.  Thg glVT array is of size (M+1)-by-M.  The upper triangular part
+// holds T, (also including a diagonal)
+#define GLVT(i,j)   (glVT [1+(i)][j])
+
+// The shared array V is K-by-M (1 to 3 tiles of size M-by-M), with an
+// extra column for padding.  It is indexed first by the t-th row tile, and
+// then (i,j) within that t-th tile.  V is lower triangular, and shares its
+// space with the upper triangular T matrix.
+#define SHV(t,i,j)  (shV [1+ (t)*TILESIZE + (i)][j])
+
+// Macros for accessing entries in a frontal matrix.  The A matrix and most of
+// the V matrix reside in the frontal matrix as a set of tiles.  The row index
+// of GLF(t,i,j) is defined by row tile t and by a row index i within that tile
+// (i is in the range 0 to the tilesize-1).  Column j refers to the global
+// column index in F.  fi = IFRONT(t,i) translates the tile t and row i inside
+// that tile to an index fi which is in the range 0 to fm-1, which is an index
+// into the front in global memory.
+#define IFRONT(t,i) ((i) + myTask.extra [t])
+#define GLF(t,i,j)  glF [IFRONT(t,i) * fn + (j)]
+
+// C is used to buffer A, when computing C=V'*A
+#define SHA(i,j)    (shC [i][j])
+
+// T is upper triangular of size M-by-M, and shares its space with V
+#define ST(i,j)     (shV [i][j])
+
+// Each thread loads V(iv,jv) from global, and then iv+chunksize,
+// iv+2*chunksize, etc.  With M = 32 and 384 threads, the chunksize is 12,
+// and the number of chunks is 3.
+#define iv          (threadIdx.x / TILESIZE)
+#define jv          (threadIdx.x % TILESIZE)
+#define VCHUNKSIZE  (NUMTHREADS / TILESIZE)
+#define NVCHUNKS    CEIL (TILESIZE*TILESIZE, NUMTHREADS)
+
+// device functions block_apply, one for each variant
+__device__ void block_apply_3 ( ) ;
+__device__ void block_apply_2 ( ) ;
+__device__ void block_apply_1 ( ) ;
+__device__ void block_apply_3_by_1 ( ) ;
+__device__ void block_apply_2_by_1_( ) ;
+__device__ void block_apply_1_by_1 ( ) ;
+
+#endif
diff --git a/GPUQREngine/Include/Kernel/Apply/pipelined_rearrange.cu b/GPUQREngine/Include/Kernel/Apply/pipelined_rearrange.cu
new file mode 100644
index 0000000..960c33e
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Apply/pipelined_rearrange.cu
@@ -0,0 +1,195 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Apply/pipelined_rearrange.cu =================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// pipelined_rearrange
+//------------------------------------------------------------------------------
+
+/*
+    PSEUDO #define MACROS (copied from vt_factorize.cu)
+        N
+            The # of columns to operate on (should always be TILESIZE).
+        INSIDE
+            Substitute in a condition depending on compilation options.
+            For this code, we always assume we need to check edge cases.
+        NACHUNKS
+            A chunking scheme used in the factorization kernel. We use
+            the same layout and thread dimension for our tile load/stores.
+        glA
+            Shorthand for the index computation into the global A.
+        shA
+            Shorthand for accessing the shared memory tiles of A in the union.
+        it
+            Row indices of a tile owned by a thread.
+        jt
+            Col indices of a tile owned by a thread.
+        ACHUNKSIZE
+            The amount of A do load in a chunk
+*/
+
+#define N               (TILESIZE)
+
+#define INSIDE(COND)    (COND)
+
+// when all threads work on a tile.
+// (N*N / NUMTHREADS) does not have to be an integer.  With a tile
+// size of N=32, and NUMTHREADS=384, it isn't.  So compute the ceiling,
+// and handle the clean up by testing i < N below.
+#define NACHUNKS        CEIL (N*N, NUMTHREADS)
+
+#define glA(i,j)        (myTask.F[((i)*fn + (j))])
+#define shA             shMemory.factorize.A
+
+// ACHUNKSIZE must be an integer
+#define it              (threadIdx.x / N)
+#define jt              (threadIdx.x % N)
+#define ACHUNKSIZE      (NUMTHREADS / N)
+    
+/*
+    NEW #define MACROS
+        SAFELOAD
+            Loads a tile from global memory. Checks edge cases.
+        SH_TRANSFER
+            Moves a tile within shared memory
+        SAFESTORE
+            Stores a tile back to global memory. Checks edge cases.
+*/
+
+#define SAFELOAD(SLOT, ROWTILE)                                             \
+{                                                                           \
+    int rowTile = (ROWTILE);                                                \
+    if (INSIDE (rowTile != EMPTY))                                          \
+    {                                                                       \
+        /* load the tile of A from global memory */                         \
+        for (int ii = 0 ; ii < NACHUNKS ; ii++)                             \
+        {                                                                   \
+            int i = ii * ACHUNKSIZE + it ;                                  \
+            if (ii < NACHUNKS-1 || i < N)                                   \
+            {                                                               \
+                shA [i + (SLOT)*TILESIZE][jt] =                             \
+                    (INSIDE (i+rowTile < fm) && INSIDE (jt+j1 < fn)) ?      \
+                    glA (i+rowTile, jt+j1) : 0 ;                            \
+            }                                                               \
+        }                                                                   \
+    }                                                                       \
+    else                                                                    \
+    {                                                                       \
+        /* clear the tile of A */                                           \
+        for (int ii = 0 ; ii < NACHUNKS ; ii++)                             \
+        {                                                                   \
+            int i = ii * ACHUNKSIZE + it ;                                  \
+            if (ii < NACHUNKS-1 || i < N)                                   \
+            {                                                               \
+                shA [i + SLOT*TILESIZE][jt] = 0 ;                           \
+            }                                                               \
+        }                                                                   \
+    }                                                                       \
+}                                                                           \
+
+
+#define SH_TRANSFER(TO, FROM)                                               \
+{                                                                           \
+    for (int th=threadIdx.x; th<TILESIZE*TILESIZE; th+=blockDim.x)          \
+    {                                                                       \
+        int ito = (TILESIZE*(TO))   + (th / TILESIZE);                      \
+        int ifr = (TILESIZE*(FROM)) + (th / TILESIZE);                      \
+        int  j  =                     (th % TILESIZE);                      \
+        shA[ito][j] = shA[ifr][j];                                          \
+    }                                                                       \
+}                                                                           \
+
+
+#define SAFESTORE(SLOT, ROWTILE)                                            \
+{                                                                           \
+    int rowTile = ROWTILE;                                                  \
+    if (INSIDE (rowTile != EMPTY))                                          \
+    {                                                                       \
+        for (int ii = 0 ; ii < NACHUNKS ; ii++)                             \
+        {                                                                   \
+            int i = ii * ACHUNKSIZE + it ;                                  \
+            if (ii < NACHUNKS-1 || i < N)                                   \
+            {                                                               \
+                if (INSIDE (i+rowTile < fm) && INSIDE (jt+j1 < fn))         \
+                {                                                           \
+                    glA (i+rowTile, jt+j1) = shA [i + (SLOT)*TILESIZE][jt]; \
+                }                                                           \
+            }                                                               \
+        }                                                                   \
+    }                                                                       \
+}                                                                           \
+
+
+/* ALL THREADS PARTICIPATE */
+{
+        
+    int delta     = myTask.extra[8];
+    int secondMin = myTask.extra[9];
+    int fc        = IsApplyFactorize;
+    int j1        = myTask.extra[4] + TILESIZE;
+    
+    /*** DO MEMORY SHUFFLES ***/
+
+    SAFESTORE(0, myTask.extra[0]);
+
+    /* 0 <-- secondMin */
+    if(delta != EMPTY && secondMin == delta)
+    {
+        SAFELOAD(0, myTask.extra[secondMin]);
+    }
+    else
+    {
+        SH_TRANSFER(0, secondMin);
+    }
+
+    /* secondMin <-- fc */
+    if(fc != secondMin)
+    {
+        if(delta != EMPTY && fc >= delta)
+        {
+            SAFELOAD(secondMin, myTask.extra[fc]);
+        }
+        else
+        {
+            SH_TRANSFER(secondMin, fc);
+        }
+    }
+
+    /* Hard-load D from global in the 2-3 case where [1] is secondMin. */
+    if(fc == 3 && delta == 2 && secondMin == 1)
+    {
+        SAFELOAD(2, myTask.extra[2]);
+    }
+
+    /* Rearrange tiles so the tile store at the end doesn't explode.
+       This is non-essential until the very end, so we can easilly justify
+       piggybacking this integer shuffle to the next natural __syncthreads
+       that we encounter. */
+    __syncthreads();
+    if(threadIdx.x == 0)
+    {
+        myTask.extra[4] = j1;
+        myTask.AuxAddress[0] = myTask.AuxAddress[1];
+        myTask.AuxAddress[1] = NULL;
+        
+        myTask.extra[0] = myTask.extra[secondMin];
+        if(fc != secondMin)
+        {
+            myTask.extra[secondMin] = myTask.extra[fc];
+        }
+    }  
+    __syncthreads();
+}
+
+#undef N
+#undef INSIDE
+#undef NACHUNKS
+#undef glA
+#undef shA
+#undef it
+#undef jt
+#undef ACHUNKSIZE
+
+#undef SAFELOAD
+#undef SH_TRANSFER
+#undef SAFESTORE
diff --git a/GPUQREngine/Include/Kernel/Assemble/packAssemble.cu b/GPUQREngine/Include/Kernel/Assemble/packAssemble.cu
new file mode 100644
index 0000000..9294025
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Assemble/packAssemble.cu
@@ -0,0 +1,57 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Assemble/packAssemble.cu =====================
+// =============================================================================
+
+__device__ void packassemble ( )
+{
+    // Use shared memory for Rjmap and Rimap.
+    int *shRimap = shMemory.packassemble.Rimap;
+    int *shRjmap = shMemory.packassemble.Rjmap;
+
+    double *C     = myTask.AuxAddress[0];
+    double *P     = myTask.AuxAddress[1];
+    int *Rjmap    = (int*) myTask.AuxAddress[2];
+    int *Rimap    = (int*) myTask.AuxAddress[3];
+//  int fm        = myTask.fm;
+    int fn        = myTask.fn;
+    int pn        = myTask.extra[0];
+//  int cm        = myTask.extra[1];
+//  int cn        = myTask.extra[2];
+    int cTileSize = myTask.extra[3];
+    int cistart   = myTask.extra[4];
+    int ciend     = myTask.extra[5];
+    int cjstart   = myTask.extra[6];
+    int cjend     = myTask.extra[7];
+
+    // Fill Rjmap and Rimaps.
+    int ctm = ciend - cistart;      // # cell tile rows
+    int ctn = cjend - cjstart;      // # cell tile cols
+    for(int p=threadIdx.x; p<ctm; p+=blockDim.x)
+    {
+        shRimap[p] = Rimap[cistart+p];
+    }
+    for(int p=threadIdx.x; p<ctn; p+=blockDim.x)
+    {
+        shRjmap[p] = Rjmap[cjstart+p]; 
+    }
+    __syncthreads();
+
+    for(int p=threadIdx.x; p<cTileSize; p+=blockDim.x)
+    {
+        // Translate local tile coordinates to contribution block ci, cj.
+        int cil = p / ctn;          // ci local to the tile
+        int cjl = p % ctn;          // cj local to the tile
+        int ci = cistart + cil;     // ci is really the start plus local ci
+        int cj = cjstart + cjl;     // cj is really the start plus local cj
+
+        // Avoid copying the zeroes by only copying the upper-triangular bits.
+        if(cj >= ci)
+        {
+            int fi = shRimap[cil];
+            int fj = shRjmap[cjl];
+            int cindex = fn*ci+cj;
+            int pindex = pn*fi+fj;            
+            P[pindex] = C[cindex];
+        }
+    }
+}
diff --git a/GPUQREngine/Include/Kernel/Assemble/sAssemble.cu b/GPUQREngine/Include/Kernel/Assemble/sAssemble.cu
new file mode 100644
index 0000000..f26a03a
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Assemble/sAssemble.cu
@@ -0,0 +1,19 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Assemble/sAssemble.cu ========================
+// =============================================================================
+
+__device__ void sassemble ( )
+{
+    double *F = myTask.F;
+    SEntry *S = (SEntry*) myTask.AuxAddress[0];
+//  int Scount = myTask.extra[0];
+    int pstart = myTask.extra[1];
+    int pend = myTask.extra[2];
+
+    /* Unpack the S entries and shove into their proper locations. */
+    for(int p=pstart+threadIdx.x; p<pend; p+=blockDim.x)
+    {
+        SEntry e = S[p];
+        F[e.findex] = e.value;
+    }
+}
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_3_by_1.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_3_by_1.cu
new file mode 100644
index 0000000..e13948e
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_3_by_1.cu
@@ -0,0 +1,14 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_3_by_1.cu ================
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// 96-by-32 factorize, no VT or tiles, edge case.  384 threads   WHOLE FRONT
+//------------------------------------------------------------------------------
+
+#define FACTORIZE   factorize_96_by_32
+#define M           (96)
+#define N           (32)
+#define BITTYROWS   (8)
+#define WHOLE_FRONT
+#include "Kernel/Factorize/factorize_vt.cu"
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_vt.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_vt.cu
new file mode 100644
index 0000000..939f273
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_vt.cu
@@ -0,0 +1,568 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_vt.cu ====================
+// =============================================================================
+
+//  Constraints:
+//      MCHUNK = M / BITTYROWS must be an integer
+//      MCHUNK * N must be <= NUMTHREADS
+
+#ifdef FACTORIZE
+
+// TODO allow EPSILON to be defined by the caller
+#define EPSILON (1e-90)
+
+__device__ void FACTORIZE ( )
+{
+
+    //--------------------------------------------------------------------------
+    // The bitty block
+    //--------------------------------------------------------------------------
+
+    // The matrix A is M by N, T is N by N (if present)
+
+    // Each thread owns an r-by-1 bitty column of A.  If its first entry is
+    // A(ia,ja), and then it owns entries in every mchunk rows after that
+    // [A(ia,ja), A(ia+mchunk,ja), ... ].
+    // Each column is operated on by mchunk threads.
+
+    #define MCHUNK          (M / BITTYROWS)
+    #define MYBITTYROW(ii)  (ii*MCHUNK + (threadIdx.x % MCHUNK))
+    #define MYBITTYCOL      (threadIdx.x / MCHUNK)
+    #define ATHREADS        (MCHUNK * N)
+    #define WORKER          (ATHREADS == NUMTHREADS || threadIdx.x < ATHREADS)
+
+    double rbitA [BITTYROWS] ;     // bitty block for A
+    double rbitV [BITTYROWS] ;     // bitty block for V
+    double sigma ;                 // only used by thread zero
+
+    //--------------------------------------------------------------------------
+    // shared memory usage
+    //--------------------------------------------------------------------------
+
+    #define shA         shMemory.factorize.A
+    #define shZ         shMemory.factorize.Z
+    #define shRdiag     shMemory.factorize.A1
+    #define RSIGMA(i)   shMemory.factorize.V1 [i]
+
+    #ifdef WHOLE_FRONT
+        // T is not computed, and there is no list of tiles
+        #define TAU     shMemory.factorize.tau
+    #else
+        // T is computed and saved in the VT tile, work on a set of tiles
+        #define TAU     shT [k][k] 
+        #define shT     shMemory.factorize.T
+        #define shV1    shMemory.factorize.V1
+    #endif
+
+
+    //--------------------------------------------------------------------------
+    // Grab my task from the queue.
+    //--------------------------------------------------------------------------
+
+    int fn = myTask.fn ;
+
+    #ifdef WHOLE_FRONT
+
+        int fm = myTask.fm ;
+        int nv = MIN (fm, fn) ;
+        // If nv is a constant, it allows the outer loop to be unrolled:
+        // #define nv N
+        #define j1 0
+        // The whole front always considers the edge case
+        #ifndef EDGE_CASE
+        #define EDGE_CASE
+        #endif
+
+    #else
+
+        int j1 = myTask.extra[4] ;
+        #ifdef EDGE_CASE
+        int fm = myTask.fm ;
+        int nv = MIN (fm, fn) - j1 ;
+        nv = MIN (nv, N) ;
+        nv = MIN (nv, M) ;
+        #else
+        #define nv N
+        #endif
+        double (*glVT)[TILESIZE] = (double (*)[TILESIZE]) myTask.AuxAddress[0] ;
+
+    #endif
+
+    #ifdef EDGE_CASE
+        // Check if an entry is inside the front.
+        #define INSIDE(test) (test)
+    #else
+        // The entry is guaranteed to reside inside the frontal matrix.
+        #define INSIDE(test) (1)
+    #endif
+
+    // bool is_false = (fn < 0) ;
+
+    #define glA(i,j)        (myTask.F[((i)*fn + (j))])
+
+    //--------------------------------------------------------------------------
+    // Load A into shared memory
+    //--------------------------------------------------------------------------
+
+    // ACHUNKSIZE must be an integer
+    #define it              (threadIdx.x / N)
+    #define jt              (threadIdx.x % N)
+    #define ACHUNKSIZE      (NUMTHREADS / N)
+
+    #ifdef WHOLE_FRONT
+
+        // all threads load the entire front (no tiles).
+        // always check the edge case.
+        // M / ACHUNKSIZE must be an integer.
+        #define NACHUNKS    (M / ACHUNKSIZE)
+        for (int ii = 0 ; ii < NACHUNKS ; ii++)
+        {
+            int i = ii * ACHUNKSIZE + it ;
+            shA [i][jt] = (i < fm && jt < fn) ?  glA (i, jt) : 0 ;
+        }
+
+    #else
+
+        // when all threads work on a tile.
+        // (N*N / NUMTHREADS) does not have to be an integer.  With a tile
+        // size of N=32, and NUMTHREADS=384, it isn't.  So compute the ceiling,
+        // and handle the clean up by testing i < N below.
+        #define NACHUNKS    CEIL (N*N, NUMTHREADS)
+
+        /* If we're not coming from an apply-factorize, load from F. */
+        if(IsApplyFactorize == 0)
+        {
+            // Load tiles from the frontal matrix
+            // accounts for 25% of the total time on Kepler, 13% on Fermi
+            for (int t = 0 ; t < ROW_PANELSIZE ; t++)
+            {
+                int rowTile = myTask.extra[t];
+                if (INSIDE (rowTile != EMPTY))
+                {
+                    /* load the tile of A from global memory */
+                    for (int ii = 0 ; ii < NACHUNKS ; ii++)
+                    {
+                        int i = ii * ACHUNKSIZE + it ;
+                        if (ii < NACHUNKS-1 || i < N)
+                        {
+                            shA [i + t*TILESIZE][jt] =
+                              (INSIDE (i+rowTile < fm) && INSIDE (jt+j1 < fn)) ?
+                              glA (i+rowTile, jt+j1) : 0 ;
+                        }
+                    }
+                }
+                else
+                {
+                    /* clear the tile of A */
+                    for (int ii = 0 ; ii < NACHUNKS ; ii++)
+                    {
+                        int i = ii * ACHUNKSIZE + it ;
+                        if (ii < NACHUNKS-1 || i < N)
+                        {
+                            shA [i + t*TILESIZE][jt] = 0 ;
+                        }
+                    }
+                }
+            }
+        }
+
+        // clear the tile T
+        for (int ii = 0 ; ii < NACHUNKS ; ii++)
+        {
+            int i = ii * ACHUNKSIZE + it ;
+            if (ii < NACHUNKS-1 || i < N)
+            {
+                shT [i][jt] = 0 ;
+            }
+        }
+    #endif
+
+    /* We need all of A to be loaded and T to be cleared before proceeding. */
+    __syncthreads();
+
+    //--------------------------------------------------------------------------
+    // load A into the bitty block
+    //--------------------------------------------------------------------------
+
+    if (WORKER)
+    {
+        #pragma unroll
+        for (int ii = 0 ; ii < BITTYROWS ; ii++)
+        {
+            int i = MYBITTYROW (ii) ;
+            rbitA [ii] = shA [i][MYBITTYCOL] ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // compute the first sigma = sum (A (1:m,1).^2)
+    //--------------------------------------------------------------------------
+
+    if (WORKER && MYBITTYCOL == 0)
+    {
+        // each thread that owns column 0 computes sigma for its
+        // own bitty block
+        double s = 0 ;
+        #pragma unroll
+        for (int ii = 0 ; ii < BITTYROWS ; ii++)
+        {
+            int i = MYBITTYROW (ii) ;
+            if (i >= 1)
+            {
+                s += rbitA [ii] * rbitA [ii] ;
+            }
+        }
+        RSIGMA (threadIdx.x) = s ;
+    }
+
+    // thread zero must wait for RSIGMA
+    __syncthreads ( ) ;
+
+    if (threadIdx.x == 0)
+    {
+        sigma = 0 ;
+        #pragma unroll
+        for (int ii = 0 ; ii < MCHUNK ; ii++)
+        {
+            sigma += RSIGMA (ii) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // Do the block householder factorization
+    //--------------------------------------------------------------------------
+
+    // loop unrolling has no effect on the edge case (it is not unrolled),
+    // but greatly speeds up the non-edge case.
+    #pragma unroll
+    for (int k = 0 ; k < nv ; k++)
+    {
+
+        //----------------------------------------------------------------------
+        // write the kth column of A back into shared memory
+        //----------------------------------------------------------------------
+
+        if (WORKER && MYBITTYCOL == k && k > 0)
+        {
+            // the bitty block for threads that own column k contains
+            // the kth column of R and the kth column of v.
+            #pragma unroll
+            for (int ii = 0 ; ii < BITTYROWS ; ii++)
+            {
+                int i = MYBITTYROW (ii) ;
+                shA [i][k] = rbitA [ii] ;
+            }
+        }
+
+        __syncthreads ( ) ;
+
+        // At this point, A (:,k) is held in both shared memory, and in the
+        // threads that own that column.  A (:,k) is not yet the kth
+        // Householder vector, except for the diagnal (which is computed
+        // below).  A (0:k-1,k) is now the kth column of R (above the
+        // diagonal).
+
+        //----------------------------------------------------------------------
+        // compute the Householder coefficients
+        //----------------------------------------------------------------------
+
+        // This is costly, accounting for about 25% of the total time on
+        // Kepler, and 22% on Fermi, when A is loaded from global memory.  This
+        // means the work here is even a higher fraction when A is in shared.
+        if (threadIdx.x == 0)
+        {
+            double x1 = shA [k][k] ;            // the diagonal A (k,k)
+            double s, v1, tau ;
+
+            if (sigma <= EPSILON)
+            {
+                // printf ("hit eps %g\n", sigma) ;
+                s = x1 ;
+                v1 = 0 ;
+                tau = 0 ;
+            }
+            else
+            {
+                s = sqrt (x1*x1 + sigma) ;
+                v1 = (x1 <= 0) ? (x1 - s) : (-sigma / (x1 + s)) ;
+                tau = -1 / (s * v1) ;
+            }
+            shRdiag [k] = s ;       // the diagonal entry of R
+            shA [k][k] = v1 ;       // the topmost entry of the vector v
+            TAU = tau ;             // tile case: T (k,k) = tau
+        }
+
+        // All threads need v1, and later on they need tau
+        __syncthreads ( ) ;
+
+        // A (0:k-1,k) now holds the kth column of R (excluding the diagonal).
+        // A (k:m-1,k) holds the kth Householder vector (incl. the diagonal).
+
+        //----------------------------------------------------------------------
+        // z = (-tau) * v' * A (k:m-1,:), where v is A (k:m-1,k)
+        //----------------------------------------------------------------------
+
+        if (WORKER) // && (COMPUTE_T || MYBITTYCOL > k))
+        {
+            // Load the vector v from A (k:m-1,k) into the V bitty block.
+            // If T is not computed and MYBITTYCOL <= k, then this code can
+            // be skipped, but the code is slower when that test is made.
+            #pragma unroll
+            for (int ii = 0 ; ii < BITTYROWS ; ii++)
+            {
+                int i = MYBITTYROW (ii) ;
+                // only i >= k is needed, but it's faster to load it all
+                rbitV [ii] = shA [i][k] ;
+            }
+
+            // compute v' * A (k:m-1,:), each thread in its own column
+            {
+                double z = 0.0 ;
+                #pragma unroll
+                for (int ii = 0 ; ii < BITTYROWS ; ii++)
+                {
+                    int i = MYBITTYROW (ii) ;
+                    if (i >= k)
+                    {
+                        z += rbitV [ii] * rbitA [ii] ;
+                    }
+                }
+                // store z into the reduction space in shared memory
+                shZ [MYBITTYROW(0)][MYBITTYCOL] = z ;
+            }
+        }
+
+        // All threads need to see the reduction space for Z
+        __syncthreads ( ) ;
+
+        // Reduce Z into a single row vector z, using the first warp only
+        if (threadIdx.x < N) // && (COMPUTE_T || threadIdx.x > k))
+        {
+            double z = 0 ;
+            #pragma unroll
+            for (int ii = 0 ; ii < MCHUNK ; ii++)
+            {
+                z += shZ [ii][threadIdx.x] ;
+            }
+            shZ [0][threadIdx.x] = - z * TAU ;
+        }
+
+        // All threads need to see the z vector
+        __syncthreads ( ) ;
+
+        //----------------------------------------------------------------------
+        // update A (in register) and compute the next sigma
+        //----------------------------------------------------------------------
+
+        if (WORKER && MYBITTYCOL > k)
+        {
+            // A (k:m,k+1:n) = A (k:,k+1:n) + v * z (k+1:n) ;
+            // only threads that own a column MYBITTYCOL > k do any work
+            {
+                double z = shZ [0][MYBITTYCOL] ;
+                #pragma unroll
+                for (int ii = 0 ; ii < BITTYROWS ; ii++)
+                {
+                    int i = MYBITTYROW (ii) ;
+                    if (i >= k)
+                    {
+                        rbitA [ii] += rbitV [ii] * z ;
+                    }
+                }
+            }
+
+            // sigma = sum (A ((k+2):m,k+1).^2), except for the reduction
+            if (MYBITTYCOL == k+1)
+            {
+                // each thread that owns column k+1 computes sigma for its
+                // own bitty block
+                double s = 0 ;
+                #pragma unroll
+                for (int ii = 0 ; ii < BITTYROWS ; ii++)
+                {
+                    int i = MYBITTYROW (ii) ;
+                    if (i >= k+2)
+                    {
+                        s += rbitA [ii] * rbitA [ii] ;
+                    }
+                }
+                RSIGMA (MYBITTYROW(0)) = s ;
+            }
+        }
+
+        //----------------------------------------------------------------------
+        // construct the kth column of T
+        //----------------------------------------------------------------------
+
+        #ifndef WHOLE_FRONT
+
+            // T (0:k-1,k) = T (0:k-1,0:k-1) * z (0:k-1)'
+            if (threadIdx.x < k)
+            {
+                double t_ik = 0 ;
+                for (int jj = 0 ; jj < k ; jj++)
+                {
+                    t_ik += shT [threadIdx.x][jj] * shZ [0][jj] ;
+                }
+                shT [threadIdx.x][k] = t_ik ;
+            }
+
+        #endif
+
+        //----------------------------------------------------------------------
+        // reduce sigma into a single scalar for the next iteration
+        //----------------------------------------------------------------------
+
+        // Thread zero must wait for RSIGMA
+        __syncthreads ( ) ;
+
+        if (threadIdx.x == 0)
+        {
+            sigma = 0 ;
+            #pragma unroll
+            for (int ii = 0 ; ii < MCHUNK ; ii++)
+            {
+                sigma += RSIGMA (ii) ;
+            }
+        }
+    }
+
+    // tril (A) now holds all the Householder vectors, including the diagonal.
+    // triu (A,1) now holds R, excluding the diagonal.
+    // shRdiag holds the diagonal of R.
+
+    //--------------------------------------------------------------------------
+    // write out the remaining columns of R, if any
+    //--------------------------------------------------------------------------
+
+    if (WORKER && MYBITTYCOL >= nv)
+    {
+        for (int ii = 0 ; ii < BITTYROWS ; ii++)
+        {
+            int i = MYBITTYROW (ii) ;
+            shA [i][MYBITTYCOL] = rbitA [ii] ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+
+    /* Have a warp shuffle memory around. */
+    if (threadIdx.x < N)
+    {
+        #ifndef WHOLE_FRONT
+        shV1 [threadIdx.x] = shA [threadIdx.x][threadIdx.x];
+        #endif
+        shA [threadIdx.x][threadIdx.x] = shRdiag [threadIdx.x];
+    }
+
+    // Wait for the memory shuffle to finish before saving A to global memory
+    __syncthreads();
+
+    //--------------------------------------------------------------------------
+    // save results back to global memory
+    //--------------------------------------------------------------------------
+
+    #ifdef WHOLE_FRONT
+
+        if (jt < fn)
+        {
+            for (int ii = 0 ; ii < NACHUNKS ; ii++)
+            {
+                int i = ii * ACHUNKSIZE + it ;
+                if (i < fm) glA (i, jt) = shA [i][jt] ;
+            }
+        }
+
+    #else
+
+        // Save VT back to global memory & clear out
+        // lower-triangular part of the first tile (leaving R).
+        for (int th=threadIdx.x; th<TILESIZE*TILESIZE; th+=blockDim.x)
+        {
+            int i = th / 32;
+            int j = th % 32;
+
+            /* The upper triangular part (including diagonal) is T. */
+            if(i <= j)
+            {
+                glVT[i][j] = shT[i][j];
+            }
+            /* The lower triangular part is V.
+             * Note we clear the tril part leaving only R in this tile. */
+            else
+            {
+                glVT[i+1][j] = shA[i][j];
+                shA[i][j] = 0.0;
+            }
+        }
+
+        // Save the diagonal
+        if (threadIdx.x < N)
+        {
+            glVT[threadIdx.x+1][threadIdx.x] = shV1[threadIdx.x];
+        }
+
+        // Wait for this operation to complete before saving A back to global
+        // memory
+        __syncthreads();
+
+        // save the tiles in A back into the front in global memory
+        for (int t = 0 ; t < ROW_PANELSIZE ; t++)
+        {
+            int rowTile = myTask.extra[t];
+            if (INSIDE (rowTile != EMPTY))
+            {
+                for (int ii = 0 ; ii < NACHUNKS ; ii++)
+                {
+                    int i = ii * ACHUNKSIZE + it ;
+                    if (ii < NACHUNKS-1 || i < N)
+                    {
+                        if (INSIDE (i+rowTile < fm) && INSIDE (jt+j1 < fn))
+                        {
+                            glA (i+rowTile, jt+j1) = shA [i + t*TILESIZE][jt];
+                        }
+                    }
+                }
+            }
+        }
+    #endif
+}
+
+//------------------------------------------------------------------------------
+// undefine macros
+//------------------------------------------------------------------------------
+
+#undef EPSILON
+#undef FACTORIZE
+#undef M
+#undef N
+#undef glA
+
+#undef WORKER
+#undef ATHREADS
+#undef MCHUNK
+
+#undef BITTYROWS
+#undef MYBITTYROW
+#undef MYBITTYCOL
+#undef shA
+#undef shT
+#undef shZ
+#undef shRdiag
+#undef shV1
+#undef RSIGMA
+#undef TAU
+#undef INSIDE
+#undef INSIDE
+#undef nv
+#undef it
+#undef jt
+#undef j1
+#undef ACHUNKSIZE
+#undef SAFELOAD
+#undef NACHUNKS
+
+#undef EDGE_CASE
+#undef WHOLE_FRONT
+#undef ROW_PANELSIZE
+#endif
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1.cu
new file mode 100644
index 0000000..a6b14c8
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1.cu
@@ -0,0 +1,14 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1.cu =============
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// 1-by-1 factorize, with VT and tiles, no edge case.  256 threads
+//------------------------------------------------------------------------------
+
+#define FACTORIZE       factorize_1_by_1_tile_vt
+#define ROW_PANELSIZE   (1)
+#define M               (ROW_PANELSIZE * TILESIZE)
+#define N               (TILESIZE)
+#define BITTYROWS       (4)
+#include "Kernel/Factorize/factorize_vt.cu"
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1_edge.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1_edge.cu
new file mode 100644
index 0000000..e72448e
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1_edge.cu
@@ -0,0 +1,15 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_vt_1_by_1_edge.cu ========
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// 1-by-1 factorize, with VT and tiles, edge case.  256 threads
+//------------------------------------------------------------------------------
+
+#define FACTORIZE       factorize_1_by_1_tile_vt_edge
+#define EDGE_CASE
+#define ROW_PANELSIZE   (1)
+#define M               (ROW_PANELSIZE * TILESIZE)
+#define N               (TILESIZE)
+#define BITTYROWS       (4)
+#include "Kernel/Factorize/factorize_vt.cu"
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1.cu
new file mode 100644
index 0000000..09f2259
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1.cu
@@ -0,0 +1,14 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1.cu =============
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// 2-by-1 factorize, with VT and tiles, no edge case.  256 threads
+//------------------------------------------------------------------------------
+
+#define FACTORIZE       factorize_2_by_1_tile_vt
+#define ROW_PANELSIZE   (2)
+#define M               (ROW_PANELSIZE * TILESIZE)
+#define N               (TILESIZE)
+#define BITTYROWS       (8)
+#include "Kernel/Factorize/factorize_vt.cu"
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1_edge.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1_edge.cu
new file mode 100644
index 0000000..a546ccf
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1_edge.cu
@@ -0,0 +1,15 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_vt_2_by_1_edge.cu ========
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// 2-by-1 factorize, with VT and tiles, edge case.  256 threads
+//------------------------------------------------------------------------------
+
+#define FACTORIZE       factorize_2_by_1_tile_vt_edge
+#define EDGE_CASE
+#define ROW_PANELSIZE   (2)
+#define M               (ROW_PANELSIZE * TILESIZE)
+#define N               (TILESIZE)
+#define BITTYROWS       (8)
+#include "Kernel/Factorize/factorize_vt.cu"
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1.cu
new file mode 100644
index 0000000..4062877
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1.cu
@@ -0,0 +1,14 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1.cu =============
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// 3-by-1 factorize, with VT and tiles, no edge case.  384 threads
+//------------------------------------------------------------------------------
+
+#define FACTORIZE       factorize_3_by_1_tile_vt
+#define ROW_PANELSIZE   (3)
+#define M               (ROW_PANELSIZE * TILESIZE)
+#define N               (TILESIZE)
+#define BITTYROWS       (8)
+#include "Kernel/Factorize/factorize_vt.cu"
diff --git a/GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1_edge.cu b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1_edge.cu
new file mode 100644
index 0000000..2491450
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1_edge.cu
@@ -0,0 +1,15 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/Factorize/factorize_vt_3_by_1_edge.cu ========
+// =============================================================================
+
+//------------------------------------------------------------------------------
+// 3-by-1 factorize, with VT and tiles, edge case.  384 threads
+//------------------------------------------------------------------------------
+
+#define FACTORIZE       factorize_3_by_1_tile_vt_edge
+#define EDGE_CASE
+#define ROW_PANELSIZE   (3)
+#define M               (ROW_PANELSIZE * TILESIZE)
+#define N               (TILESIZE)
+#define BITTYROWS       (8)
+#include "Kernel/Factorize/factorize_vt.cu"
diff --git a/GPUQREngine/Include/Kernel/qrKernel.cu b/GPUQREngine/Include/Kernel/qrKernel.cu
new file mode 100644
index 0000000..97a4360
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/qrKernel.cu
@@ -0,0 +1,74 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/qrKernel.cu ==================================
+// =============================================================================
+
+__global__ void qrKernel
+(
+    TaskDescriptor* Queue,
+    int QueueLength
+)
+{
+    /* Copy the task details to shared memory. */
+    if(threadIdx.x == 0)
+    {
+        IsApplyFactorize = 0;
+        myTask = Queue[blockIdx.x];
+    }
+    __syncthreads();
+
+    switch(myTask.Type)
+    {
+        case TASKTYPE_SAssembly:    sassemble();    return;
+        case TASKTYPE_PackAssembly: packassemble(); return;
+
+        case TASKTYPE_FactorizeVT_3x1:  factorize_3_by_1_tile_vt();      return;
+        case TASKTYPE_FactorizeVT_2x1:  factorize_2_by_1_tile_vt();      return;
+        case TASKTYPE_FactorizeVT_1x1:  factorize_1_by_1_tile_vt();      return;
+        case TASKTYPE_FactorizeVT_3x1e: factorize_3_by_1_tile_vt_edge(); return;
+        case TASKTYPE_FactorizeVT_2x1e: factorize_2_by_1_tile_vt_edge(); return;
+        case TASKTYPE_FactorizeVT_1x1e: factorize_1_by_1_tile_vt_edge(); return;
+        case TASKTYPE_FactorizeVT_3x1w: factorize_96_by_32();            return;
+
+        case TASKTYPE_Apply3: block_apply_3(); return;
+        case TASKTYPE_Apply2: block_apply_2(); return;
+        case TASKTYPE_Apply1: block_apply_1(); return;
+
+        #ifdef GPUQRENGINE_PIPELINING
+        // Apply3_Factorize[3 or 2]: (note fallthrough to next case)
+        case TASKTYPE_Apply3_Factorize3:
+            if(threadIdx.x == 0 && !IsApplyFactorize) IsApplyFactorize = 3;
+
+        case TASKTYPE_Apply3_Factorize2:
+            if(threadIdx.x == 0 && !IsApplyFactorize) IsApplyFactorize = 2;
+            block_apply_3_by_1();
+            break;
+
+        // Apply2_Factorize[3, 2, or 1]: (note fallthrough to next case)
+        case TASKTYPE_Apply2_Factorize3:
+            if(threadIdx.x == 0 && !IsApplyFactorize) IsApplyFactorize = 3;
+
+        case TASKTYPE_Apply2_Factorize2:
+            if(threadIdx.x == 0 && !IsApplyFactorize) IsApplyFactorize = 2;
+
+        case TASKTYPE_Apply2_Factorize1:
+            if(threadIdx.x == 0 && !IsApplyFactorize) IsApplyFactorize = 1;
+            block_apply_2_by_1();
+            break;
+        #endif
+
+        default: break;
+    }
+
+    #ifdef GPUQRENGINE_PIPELINING
+    /* Tasks that get to this point are Apply-Factorize tasks
+       because all other should have returned in the switch above. */
+    switch(myTask.Type)
+    {
+        case TASKTYPE_Apply3_Factorize3: 
+        case TASKTYPE_Apply2_Factorize3: factorize_3_by_1_tile_vt_edge(); break;
+        case TASKTYPE_Apply3_Factorize2: 
+        case TASKTYPE_Apply2_Factorize2: factorize_2_by_1_tile_vt_edge(); break;
+        case TASKTYPE_Apply2_Factorize1: factorize_1_by_1_tile_vt_edge(); break;
+    }
+    #endif
+}
diff --git a/GPUQREngine/Include/Kernel/sharedMemory.hpp b/GPUQREngine/Include/Kernel/sharedMemory.hpp
new file mode 100644
index 0000000..2fc1f62
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/sharedMemory.hpp
@@ -0,0 +1,51 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/sharedMemory.cu ==============================
+// =============================================================================
+
+#ifndef GPUQRENGINE_SHAREDMEMORY_HPP
+#define GPUQRENGINE_SHAREDMEMORY_HPP
+
+typedef union sharedMemory
+{
+    struct
+    {
+        #define MAX_MCHUNK 12
+
+        // shared memory for factorize kernel (tile case)
+        // size of A must match size of V in apply, below.
+        double A [PANELSIZE * TILESIZE + 1][TILESIZE + PADDING] ;
+        double T [TILESIZE + 1][TILESIZE + PADDING] ;
+        double Z [MAX_MCHUNK][TILESIZE+1] ;
+        double A1 [TILESIZE] ;
+        double V1 [TILESIZE] ;
+        double tau ;
+
+        #undef MAX_MCHUNK
+    } factorize ;
+
+    struct
+    {
+        #define MAX_COL_TILES 2
+
+        // shared memory for block_apply kernels
+        // size of V must match size of A in factorize, above.
+        double V [PANELSIZE * TILESIZE + 1][TILESIZE + PADDING] ;
+        double C [TILESIZE][MAX_COL_TILES * TILESIZE + PADDING] ;
+
+        #undef MAX_COL_TILES
+    } apply ;
+
+    struct
+    {
+        int Rimap[PACKASSEMBLY_SHMEM_MAPINTS];
+        int Rjmap[PACKASSEMBLY_SHMEM_MAPINTS];
+    } packassemble ;
+
+} SharedMemory ;
+
+/* Shared memory for all kernels is defined globally and allocated here. */
+__shared__ SharedMemory shMemory;
+__shared__ TaskDescriptor myTask;
+__shared__ int IsApplyFactorize;
+
+#endif
diff --git a/GPUQREngine/Include/Kernel/uberKernel.cu b/GPUQREngine/Include/Kernel/uberKernel.cu
new file mode 100644
index 0000000..a7e0da2
--- /dev/null
+++ b/GPUQREngine/Include/Kernel/uberKernel.cu
@@ -0,0 +1,45 @@
+// =============================================================================
+// === GPUQREngine/Include/Kernel/uberKernel.cu ================================
+// =============================================================================
+
+#include "GPUQREngine_Common.hpp"
+#include "GPUQREngine_SEntry.hpp"
+#include "GPUQREngine_TaskDescriptor.hpp"
+
+/*** Shared Memory Allocation ************************************************/
+
+#include "sharedMemory.hpp"
+
+
+/*** Assembly Device Functions ***********************************************/
+
+#include "Kernel/Assemble/sAssemble.cu"
+#include "Kernel/Assemble/packAssemble.cu"
+
+
+/*** Apply Device Functions **************************************************/
+
+#include "Kernel/Apply/params_apply.hpp"
+
+#include "Kernel/Apply/block_apply_3.cu"
+#include "Kernel/Apply/block_apply_2.cu"
+#include "Kernel/Apply/block_apply_1.cu"
+
+#ifdef GPUQRENGINE_PIPELINING
+#include "Kernel/Apply/block_apply_3_by_1.cu"
+#include "Kernel/Apply/block_apply_2_by_1.cu"
+#endif
+
+/*** Factorize Device Functions **********************************************/
+
+#include "Kernel/Factorize/factorize_vt_3_by_1.cu"
+#include "Kernel/Factorize/factorize_vt_2_by_1.cu"
+#include "Kernel/Factorize/factorize_vt_1_by_1.cu"
+#include "Kernel/Factorize/factorize_vt_3_by_1_edge.cu"
+#include "Kernel/Factorize/factorize_vt_2_by_1_edge.cu"
+#include "Kernel/Factorize/factorize_vt_1_by_1_edge.cu"
+#include "Kernel/Factorize/factorize_3_by_1.cu"
+
+/*** Main Uberkernel Global Function *****************************************/
+
+#include "Kernel/qrKernel.cu"
diff --git a/GPUQREngine/Lib/Makefile b/GPUQREngine/Lib/Makefile
new file mode 100644
index 0000000..e50b8c6
--- /dev/null
+++ b/GPUQREngine/Lib/Makefile
@@ -0,0 +1,204 @@
+#-------------------------------------------------------------------------------
+# GPUQREngine/Lib/Makefile: for compiling the GPUQREngine library
+#-------------------------------------------------------------------------------
+
+default: all
+
+ccode: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+OBJS = GPUQREngine_GraphVizHelper.o                        \
+       GPUQREngine_Internal.o                              \
+       GPUQREngine_ExpertDense.o                           \
+       GPUQREngine_ExpertSparse.o                          \
+       BucketList.o                                        \
+       BucketList_AdvanceBundles.o                         \
+       BucketList_CreateBundles.o                          \
+       BucketList_FillWorkQueue.o                          \
+       BucketList_GrowBundles.o                            \
+       BucketList_Manage.o                                 \
+       BucketList_PostProcessing.o                         \
+       LLBundle.o                                          \
+       LLBundle_AddTiles.o                                 \
+       LLBundle_Advance.o                                  \
+       LLBundle_GPUPack.o                                  \
+       LLBundle_PipelinedRearrange.o                       \
+       LLBundle_UpdateSecondMinIndex.o                     \
+       Scheduler.o                                         \
+       Scheduler_FillWorkQueue.o                           \
+       Scheduler_Front.o                                   \
+       Scheduler_LaunchKernel.o                            \
+       Scheduler_PostProcess.o                             \
+       Scheduler_Render.o                                  \
+       Scheduler_TransferData.o                            \
+       ssgpu_maxQueueSize.o                                \
+       TaskDescriptor_flops.o                              \
+       GPUQREngine_UberKernel.o
+
+LIBS = $(CUDART_LIB) \
+    ../../SuiteSparse_GPURuntime/Lib/libSuiteSparse_GPURuntime.a
+
+INC  = -I../../SuiteSparse_GPURuntime/Include -I../Include \
+    -I../../SuiteSparse_config
+
+# general include file dependencies
+H =   ../Include/GPUQREngine_Common.hpp                       \
+      ../Include/GPUQREngine_BucketList.hpp                   \
+      ../Include/GPUQREngine_Front.hpp                        \
+      ../Include/GPUQREngine_FrontState.hpp                   \
+      ../Include/GPUQREngine.hpp                              \
+      ../Include/GPUQREngine_Internal.hpp                     \
+      ../Include/GPUQREngine_GraphVizHelper.hpp               \
+      ../Include/GPUQREngine_LLBundle.hpp                     \
+      ../Include/GPUQREngine_Stats.hpp                        \
+      ../Include/GPUQREngine_Scheduler.hpp                    \
+      ../Include/GPUQREngine_SEntry.hpp                       \
+      ../Include/GPUQREngine_SparseMeta.hpp                   \
+      ../Include/GPUQREngine_TaskDescriptor.hpp               \
+      ../Include/GPUQREngine_Timing.hpp
+
+# dependencies only for the CUDA kernel:
+H2 = \
+      ../Include/GPUQREngine_Common.hpp                       \
+      ../Include/GPUQREngine_SEntry.hpp                       \
+      ../Include/GPUQREngine_TaskDescriptor.hpp               \
+      ../Include/Kernel/Apply/block_apply_1_by_1.cu           \
+      ../Include/Kernel/Apply/block_apply_1.cu                \
+      ../Include/Kernel/Apply/block_apply_2_by_1.cu           \
+      ../Include/Kernel/Apply/block_apply_2.cu                \
+      ../Include/Kernel/Apply/block_apply_3_by_1.cu           \
+      ../Include/Kernel/Apply/block_apply_3.cu                \
+      ../Include/Kernel/Apply/block_apply_chunk.cu            \
+      ../Include/Kernel/Apply/block_apply.cu                  \
+      ../Include/Kernel/Apply/cevta_tile.cu                   \
+      ../Include/Kernel/Apply/params_apply.hpp                \
+      ../Include/Kernel/Apply/pipelined_rearrange.cu          \
+      ../Include/Kernel/Assemble/packAssemble.cu              \
+      ../Include/Kernel/Assemble/sAssemble.cu                 \
+      ../Include/Kernel/Factorize/factorize_3_by_1.cu         \
+      ../Include/Kernel/Factorize/factorize_vt_1_by_1.cu      \
+      ../Include/Kernel/Factorize/factorize_vt_1_by_1_edge.cu \
+      ../Include/Kernel/Factorize/factorize_vt_2_by_1.cu      \
+      ../Include/Kernel/Factorize/factorize_vt_2_by_1_edge.cu \
+      ../Include/Kernel/Factorize/factorize_vt_3_by_1.cu      \
+      ../Include/Kernel/Factorize/factorize_vt_3_by_1_edge.cu \
+      ../Include/Kernel/Factorize/factorize_vt.cu             \
+      ../Include/Kernel/qrKernel.cu                           \
+      ../Include/Kernel/sharedMemory.hpp                      \
+      ../Include/Kernel/uberKernel.cu
+
+H3 = \
+    ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_debug.hpp \
+    ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_macros.hpp \
+    ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp \
+    ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Workspace.hpp \
+    ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_workspace_macros.hpp \
+    Makefile
+
+H  += $(H3)
+H2 += $(H3)
+
+#-------------------------------------------------------------------------------
+
+C = $(NVCC) $(NVCCFLAGS) $(INC)
+
+all: libGPUQREngine.a
+
+library: libGPUQREngine.a
+
+clean:
+	$(RM) *.o
+
+purge: distclean
+
+distclean: clean
+	$(RM) libGPUQREngine.a
+
+libGPUQREngine.a: $(OBJS)
+	$(ARCHIVE) libGPUQREngine.a $(OBJS)
+	- $(RANLIB) libGPUQREngine.a
+
+#-------------------------------------------------------------------------------
+
+GPUQREngine_GraphVizHelper.o: ../Source/GPUQREngine_GraphVizHelper.cpp $(H)
+	$(C) -c $<
+
+GPUQREngine_Internal.o: ../Source/GPUQREngine_Internal.cpp $(H)
+	$(C) -c $<
+
+GPUQREngine_ExpertDense.o: ../Source/GPUQREngine_ExpertDense.cpp $(H)
+	$(C) -c $<
+
+GPUQREngine_ExpertSparse.o: ../Source/GPUQREngine_ExpertSparse.cpp $(H)
+	$(C) -c $<
+
+BucketList.o: ../Source/BucketList/BucketList.cpp $(H)
+	$(C) -c $<
+
+BucketList_AdvanceBundles.o: ../Source/BucketList/BucketList_AdvanceBundles.cpp $(H)
+	$(C) -c $<
+
+BucketList_CreateBundles.o: ../Source/BucketList/BucketList_CreateBundles.cpp $(H)
+	$(C) -c $<
+
+BucketList_FillWorkQueue.o: ../Source/BucketList/BucketList_FillWorkQueue.cpp $(H)
+	$(C) -c $<
+
+BucketList_GrowBundles.o: ../Source/BucketList/BucketList_GrowBundles.cpp $(H)
+	$(C) -c $<
+
+BucketList_Manage.o: ../Source/BucketList/BucketList_Manage.cpp $(H)
+	$(C) -c $<
+
+BucketList_PostProcessing.o: ../Source/BucketList/BucketList_PostProcessing.cpp $(H)
+	$(C) -c $<
+
+LLBundle.o: ../Source/LLBundle/LLBundle.cpp $(H)
+	$(C) -c $<
+
+LLBundle_AddTiles.o: ../Source/LLBundle/LLBundle_AddTiles.cpp $(H)
+	$(C) -c $<
+
+LLBundle_Advance.o: ../Source/LLBundle/LLBundle_Advance.cpp $(H)
+	$(C) -c $<
+
+LLBundle_GPUPack.o: ../Source/LLBundle/LLBundle_GPUPack.cpp $(H)
+	$(C) -c $<
+
+LLBundle_PipelinedRearrange.o: ../Source/LLBundle/LLBundle_PipelinedRearrange.cpp $(H)
+	$(C) -c $<
+
+LLBundle_UpdateSecondMinIndex.o: ../Source/LLBundle/LLBundle_UpdateSecondMinIndex.cpp $(H)
+	$(C) -c $<
+
+Scheduler.o: ../Source/Scheduler/Scheduler.cpp $(H)
+	$(C) -c $<
+
+Scheduler_FillWorkQueue.o: ../Source/Scheduler/Scheduler_FillWorkQueue.cpp $(H)
+	$(C) -c $<
+
+Scheduler_Front.o: ../Source/Scheduler/Scheduler_Front.cpp $(H)
+	$(C) -c $<
+
+Scheduler_LaunchKernel.o: ../Source/Scheduler/Scheduler_LaunchKernel.cpp $(H)
+	$(C) -c $<
+
+Scheduler_PostProcess.o: ../Source/Scheduler/Scheduler_PostProcess.cpp $(H)
+	$(C) -c $<
+
+Scheduler_Render.o: ../Source/Scheduler/Scheduler_Render.cpp $(H)
+	$(C) -c $<
+
+Scheduler_TransferData.o: ../Source/Scheduler/Scheduler_TransferData.cpp $(H)
+	$(C) -c $<
+
+ssgpu_maxQueueSize.o: ../Source/Scheduler/ssgpu_maxQueueSize.cpp $(H)
+	$(C) -c $<
+
+TaskDescriptor_flops.o: ../Source/TaskDescriptor/TaskDescriptor_flops.cpp $(H)
+	$(C) -c $<
+	
+GPUQREngine_UberKernel.o: ../Source/GPUQREngine_UberKernel.cu $(H2)
+	$(C) -c $<
+
diff --git a/GPUQREngine/Makefile b/GPUQREngine/Makefile
new file mode 100644
index 0000000..5a9bc81
--- /dev/null
+++ b/GPUQREngine/Makefile
@@ -0,0 +1,41 @@
+#-------------------------------------------------------------------------------
+# GPUQREngine Makefile
+#-------------------------------------------------------------------------------
+
+VERSION = 1.0.0
+
+# default is 'library' since there is no demo program
+default: library
+
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+# Compile the C-callable libraries
+all: library
+
+# Compile the C-callable libraries only.
+library:
+	( cd Lib ; $(MAKE) )
+
+# Remove all files not in the original distribution
+purge:
+	( cd Lib ; $(MAKE) purge )
+
+# Remove all files not in the original distribution, except keep the 
+# compiled libraries.
+clean:
+	( cd Lib ; $(MAKE) clean )
+
+distclean: purge
+
+ccode: all
+
+# install GPUQREngine.  Note that the include files are not installed.
+install:
+	$(CP) Lib/libGPUQREngine.a $(INSTALL_LIB)/libGPUQREngine.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libGPUQREngine.$(VERSION).a libGPUQREngine.a )
+	chmod 644 $(INSTALL_LIB)/libGPUQREngine*.a
+
+# uninstall GPUQREngine
+uninstall:
+	$(RM) $(INSTALL_LIB)/libGPUQREngine*.a
+
diff --git a/GPUQREngine/README.txt b/GPUQREngine/README.txt
new file mode 100644
index 0000000..c42d4e4
--- /dev/null
+++ b/GPUQREngine/README.txt
@@ -0,0 +1,36 @@
+GPUQREngine Copyright (c) 2013, Timothy A. Davis, Sencer Nuri Yeralan,
+and Sanjay Ranka.
+http://www.suitesparse.com
+
+NOTE: this is version 0.1.0, an alpha release.  Some changes to the API
+may occur in the 1.0.0 release.
+
+GPUQREngine is a gpu-accelerated QR factorization engine supporting
+SuiteSparseQR.
+
+FOR LINUX/UNIX/Mac USERS who want to use the C++ callable library:
+
+    To compile the GPUQREngine C++ library, in the Unix shell, do:
+
+        make
+
+    Compilation options in SuiteSparse_config/SuiteSparse_config.mk or
+    GPUQREngine/*/Makefile
+
+        -DTIMING        to compile with timing and exact flop counts enabled
+                        (default is to not compile with timing and flop counts)
+
+--------------------------------------------------------------------------------
+
+GPUQREngine is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+GPUQREngine is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this Module; if not, write to the Free Software Foundation, Inc., 51 Franklin
+Street, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/GPUQREngine/Source/BucketList/BucketList.cpp b/GPUQREngine/Source/BucketList/BucketList.cpp
new file mode 100644
index 0000000..489282a
--- /dev/null
+++ b/GPUQREngine/Source/BucketList/BucketList.cpp
@@ -0,0 +1,129 @@
+// =============================================================================
+// === GPUQREngine/Source/BucketList.cpp =======================================
+// =============================================================================
+//
+// This file contains logic to construct and destroy a BucketList.
+//
+// To support debugging and code coverage tests, we use placement new in order
+// to trap and exercise out-of-memory conditions within the operating system
+// memory manager.
+//
+// =============================================================================
+// The pattern in use in this file is the memory allocation self-contained
+// within the constructor with concrete initialization codes appearing in the
+// initializer.This practice is common in OO languages, such as Java in which
+// the constructor is responsible for memory management AND initialization.
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+#define FREE_EVERYTHING \
+    head = (Int *) SuiteSparse_free(head); \
+    idleTileCount = (Int *) SuiteSparse_free(idleTileCount); \
+    bundleCount = (Int *) SuiteSparse_free(bundleCount); \
+    prev = (Int *) SuiteSparse_free(prev); \
+    next = (Int *) SuiteSparse_free(next); \
+    triu = (bool *) SuiteSparse_free(triu); \
+    Bundles = (LLBundle *) SuiteSparse_free(Bundles); \
+    gpuVT = (double **) SuiteSparse_free(gpuVT); \
+    wsMongoVT = Workspace::destroy(wsMongoVT);
+
+BucketList::BucketList
+(
+    Front *F,
+    Int minApplyGranularity
+)
+{
+    this->useFlag = true;
+    this->memory_ok = true;
+
+    this->front = F;
+    int fm = front->fm;
+    int fn = front->fn;
+    Int *Stair = front->Stair;
+
+    numRowTiles = CEIL(fm, TILESIZE);
+    numColTiles = CEIL(fn, TILESIZE);
+    numBuckets = numColTiles;
+    numIdleTiles = numBundles = 0;
+    PanelSize = PANELSIZE;
+    TileSize = TILESIZE;
+    Wavefront = LastBucket = 0;
+    VThead = 0;
+    ApplyGranularity = minApplyGranularity;
+
+    // FUTURE: malloc space once for all fronts in a stage
+
+    /* Allocate Memory */
+    head = (Int*) SuiteSparse_calloc(numBuckets, sizeof(Int));
+    idleTileCount = (Int*) SuiteSparse_calloc(numBuckets, sizeof(Int));
+    bundleCount = (Int*) SuiteSparse_calloc(numBuckets, sizeof(Int));
+    next = (Int*) SuiteSparse_calloc(numRowTiles, sizeof(Int));
+    prev = (Int*) SuiteSparse_calloc(numRowTiles, sizeof(Int));
+    triu = (bool*) SuiteSparse_calloc(numRowTiles, sizeof(bool));
+    Bundles = (LLBundle*) SuiteSparse_calloc(numRowTiles, sizeof(LLBundle));
+    gpuVT = (double**) SuiteSparse_calloc(numRowTiles, sizeof(double*));
+
+    // malloc wsMongoVT on the GPU
+    wsMongoVT = Workspace::allocate (numRowTiles*(TILESIZE+1)*TILESIZE, // GPU
+        sizeof(double), false, false, true, false) ;
+
+    /* If we failed to allocate memory, return. */
+    if(!head || !idleTileCount || !bundleCount || !next || !prev || !triu
+       || !Bundles || !gpuVT || !wsMongoVT)
+    {
+        FREE_EVERYTHING ;
+        memory_ok = false ;
+        return;
+    }
+
+    /* Initialize data structures */
+
+    /* Initialize buckets */
+    for (int i = 0; i < numBuckets; i++)
+    {
+        head[i] = EMPTY;
+        idleTileCount[i] = bundleCount[i] = 0;
+    }
+    for (int i = 0; i < numRowTiles; i++)
+    {
+        next[i] = prev[i] = EMPTY;
+        triu[i] = false;
+    }
+
+    /* Initialize VT structure */
+    for(int i=0; i<numRowTiles; i++)
+    {
+        gpuVT[i] = (double*) wsMongoVT->gpu() + 33*32*i; // base + offset
+    }
+}
+
+BucketList::~BucketList()
+{
+    FREE_EVERYTHING ;
+
+}
+
+void BucketList::Initialize()
+{
+    int fm = front->fm;
+    int fn = front->fn;
+    Int *Stair = front->Stair;
+
+    int rowtile = 0;
+    for (int colBucket = 0;
+        colBucket < numBuckets && numIdleTiles < numRowTiles; colBucket++)
+    {
+        int lastcol = MIN(fn - 1, colBucket * TileSize + (TileSize - 1));
+        int row = MIN(Stair[lastcol], fm - 1);
+        row = MAX(row, lastcol); // Handle structural rank deficiency.
+
+        int itile = row / TileSize;
+        if (itile >= rowtile)
+        {
+            for (int i = itile; i >= rowtile; i--) { Insert(i, colBucket); }
+            rowtile = itile + 1;
+        }
+    }
+}
diff --git a/GPUQREngine/Source/BucketList/BucketList_AdvanceBundles.cpp b/GPUQREngine/Source/BucketList/BucketList_AdvanceBundles.cpp
new file mode 100644
index 0000000..0934967
--- /dev/null
+++ b/GPUQREngine/Source/BucketList/BucketList_AdvanceBundles.cpp
@@ -0,0 +1,41 @@
+// =============================================================================
+// === GPUQREngine/Source/BucketList_AdvanceBundles.cpp ========================
+// =============================================================================
+//
+// AdvanceBundles advances existing bundles, leaving the First tile behind
+// and keeping a Shadow copy to support subsequent Apply tasks.
+//
+// =============================================================================
+
+
+#include "GPUQREngine_BucketList.hpp"
+
+void BucketList::AdvanceBundles()
+{
+    for (int i = 0; i < numBundles; i++)
+    {
+        LLBundle& bundle = Bundles[i];
+
+        /* An advancing bundle is removed from its native bucket. */
+        bundleCount[bundle.NativeBucket]--;
+
+        /* Advance the bundle and check if it's still around (not evaporated) */
+        bool stillAround = bundle.Advance();
+
+        /* If the bundle didn't evaporate: */
+        if (stillAround)
+        {
+            /* The advancing bundle arrives at the next bucket. */
+            bundleCount[bundle.NativeBucket]++;
+
+            /* Keep track of the last bucket. */
+            LastBucket = MAX(LastBucket, bundle.NativeBucket);
+        }
+        /* Else the bundle evaporated. */
+        else
+        {
+            Bundles[i] = Bundles[--numBundles];
+            i--;
+        }
+    }
+}
diff --git a/GPUQREngine/Source/BucketList/BucketList_CreateBundles.cpp b/GPUQREngine/Source/BucketList/BucketList_CreateBundles.cpp
new file mode 100644
index 0000000..960bca0
--- /dev/null
+++ b/GPUQREngine/Source/BucketList/BucketList_CreateBundles.cpp
@@ -0,0 +1,108 @@
+// =============================================================================
+// === GPUQREngine/Source/BucketList_CreateBundles.cpp =========================
+// =============================================================================
+//
+// CreateBundles selects rowtiles up to PANELSIZE and creates a new bundle
+// ready for factorization.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+// CreateBundles selects rowtiles up to PANELSIZE and creates a new bundle
+// ready for factorization.
+void BucketList::CreateBundles
+(
+    void
+)
+{
+    /* Look for idle tiles to extract into fresh bundles. */
+    int colBucket = Wavefront;
+    while (colBucket <= LastBucket)
+    {
+        // Get the tile from the bucket and skip this colBucket if it's empty.
+        int tile = head[colBucket];
+        if (SkipBundleCreation(tile, colBucket)){ colBucket++; continue; }
+
+        /* At this point we know we're going to add a bundle. */
+        LLBundle candidate(this, PanelSize, colBucket);
+        for (int i=0; i<PanelSize && tile != EMPTY; i++)
+        {
+            /* Remove the node from the bucket lists. */
+            Int nextNode = next[tile];
+            Remove(tile, colBucket);
+
+            /* Add the tile to the bundle and go to the next tile. */
+            candidate.AddTileToSlots(tile);
+            tile = nextNode;
+        }
+
+        Bundles[numBundles++] = candidate;
+        bundleCount[colBucket]++;
+
+        /* If we're at the wavefront: */
+        if(Wavefront == colBucket)
+        {
+            /* If we have one bundle with one tile, advance the wavefront. */
+            if(bundleCount[colBucket] == 1 && candidate.Count == 1)
+            {
+                Wavefront++;
+            }
+        }
+    }
+}
+
+// SkipBundleCreation determines whether we should skip creating a new
+// bundle for the specified tile in the specified column bucket.
+bool BucketList::SkipBundleCreation
+(
+    Int tile,           // The tile to consider
+    Int colBucket       // The column bucket it sits in
+)
+{
+    if (tile == EMPTY) return true;
+
+    /* We can skip creating the bundle if there's only one tile
+       in the bucket and it either isn't native to the bucket or
+       if it's already upper triangular
+       (in which case don't refactorize it). */
+    bool onlyOneTile = (next[tile] == EMPTY);
+    bool isNative = (tile == colBucket);
+    bool isTriu = triu[tile];
+    if(onlyOneTile)
+    {
+        if(!isNative || isTriu) return true;
+    }
+
+    return false;
+}
+
+// IsInternal determines whether a tile is completely within the bounds
+// of the front because if it isn't then we will need to use the special
+// edge case kernels.
+bool BucketList::IsInternal
+(
+    LLBundle& Bundle,
+    int jLast
+)
+{
+    /* Find the last row for the bundle. */
+#if 0
+    // We can play it safe and find the max on every call
+    Int iTile = Bundle.Shadow;
+    for(Int tile = Bundle.First; tile != EMPTY; tile = next[tile])
+    {
+        iTile = MAX(iTile, tile);
+    }
+    if(iTile != Bundle.Max) printf("%d vs %d\n", iTile, Bundle.Max);
+    assert(iTile == Bundle.Max);
+#else
+    // We find the max as we construct the bundles
+    Int iTile = Bundle.Max;
+#endif
+
+    /* We're internal if the last row and column is in bounds. */
+    Int iLast = TILESIZE * (iTile+1) - 1;
+    return(iLast < front->fm && jLast < front->fn);
+}
diff --git a/GPUQREngine/Source/BucketList/BucketList_FillWorkQueue.cpp b/GPUQREngine/Source/BucketList/BucketList_FillWorkQueue.cpp
new file mode 100644
index 0000000..8b8b391
--- /dev/null
+++ b/GPUQREngine/Source/BucketList/BucketList_FillWorkQueue.cpp
@@ -0,0 +1,198 @@
+// =============================================================================
+// === GPUQREngine/Source/BucketList_FillWorkQueue.cpp =========================
+// =============================================================================
+//
+// FillWorkQueue is responsible for filling the work queue with items and
+// resolving generic TaskType entries on the bundles into concrete tasks
+// to be performed by the GPU.
+//
+// This function should not be called for a particular front if we are at
+// risk of exceeding the work queue.  The caller is responsible for this.
+// The maximum number of tasks that can be placed in the queue is equal
+// to (# row tiles) * (# col tiles) / applyGranularity, for any one front.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+// FillWorkQueue is responsible for filling the work queue with items and
+// resolving generic TaskType entries on the bundles into concrete tasks
+// to be performed by the GPU.
+Int BucketList::FillWorkQueue
+(
+    TaskDescriptor *queue,  // The list of work items for the GPU
+    Int *queueIndex         // The current index into the queue
+)
+{
+    // Copy-in the current index
+    Int qindex = *queueIndex;
+
+    // Create and typecast object members to local variables.
+    int fm          = (int) front->fm;
+    int fn          = (int) front->fn;
+    int numColTiles = (int) this->numColTiles;
+
+    // For all bundles the bucket list is currently tracking:
+    for (int i = 0; i < numBundles; i++)
+    {
+        LLBundle& bundle = Bundles[i];
+        TaskType type = bundle.CurrentTask;
+        int nativeBucket = (int) bundle.NativeBucket;
+
+        // Configure for block task construction.
+        int start = nativeBucket;
+
+        // If the task type is a factorize:
+        switch(type)
+        {
+            case TASKTYPE_GenericFactorize:
+            {
+                // General task configuration.
+                TaskDescriptor task;
+                bundle.gpuPack(&task);
+                task.F = gpuF;
+                task.fn = fn;
+                task.fm = fm;
+
+                // Set launch characteristics.
+                int vtOwner = nativeBucket;
+                task.extra[4] = TILESIZE * vtOwner;
+
+                // Resolve the generic type to a specific type.
+
+                // See if we need to consider edge cases.
+                int lastColumn = (TILESIZE * vtOwner) + 31;
+                bool isInternal = IsInternal(bundle, lastColumn);
+
+                switch(bundle.Count)
+                {
+                    case 3:
+                        task.Type = (isInternal ? TASKTYPE_FactorizeVT_3x1
+                                                : TASKTYPE_FactorizeVT_3x1e);
+                        break;
+                    case 2:
+                        task.Type = (isInternal ? TASKTYPE_FactorizeVT_2x1
+                                                : TASKTYPE_FactorizeVT_2x1e);
+                        break;
+                    case 1:
+                        task.Type = (isInternal ? TASKTYPE_FactorizeVT_1x1
+                                                : TASKTYPE_FactorizeVT_1x1e);
+                        break;
+                }
+
+                // Add the task to the queue.
+                queue[qindex++] = task;
+
+                break;
+            }
+
+            #ifdef GPUQRENGINE_PIPELINING
+            case TASKTYPE_GenericApplyFactorize:
+            {
+                // General task configuration.
+                TaskDescriptor task;
+                bundle.gpuPack(&task);
+                task.F = gpuF;
+                task.fn = fn;
+                task.fm = fm;
+
+                // Set launch characteristics.
+                int vtOwner = nativeBucket - 1;
+                int from    = nativeBucket;
+                int to      = MIN(nativeBucket + 1, numColTiles);
+                task.extra[4] = TILESIZE * vtOwner;
+                task.extra[5] = TILESIZE * from;
+                task.extra[6] = TILESIZE * to;
+
+                // Resolve the generic type to a specific type.
+                int factorizeCount = bundle.Count;
+                switch(bundle.ApplyCount)
+                {
+                    case 3:
+                        switch(factorizeCount)
+                        {
+                            case 3:
+                                task.Type = TASKTYPE_Apply3_Factorize3;
+                                break;
+                            case 2:
+                                task.Type = TASKTYPE_Apply3_Factorize2;
+                                break;
+                            // case 1: never happens
+                        }
+                        break;
+                    case 2:
+                        switch(factorizeCount)
+                        {
+                            case 3:
+                                task.Type = TASKTYPE_Apply2_Factorize3;
+                                break;
+                            case 2:
+                                task.Type = TASKTYPE_Apply2_Factorize2;
+                                break;
+                            case 1:
+                                task.Type = TASKTYPE_Apply2_Factorize1;
+                                break;
+                        }
+                        break;
+                    // case 1: never happens.  We never have an apply-factorize
+                    // with one tile. A one-tile apply is considered a phantom
+                    // bundle. We avoid the bogus rearrange.
+                }
+
+                // Add the task to the queue.
+                queue[qindex++] = task;
+
+                // Configure parameters to build the rest of the applies.
+                start++;
+                type = TASKTYPE_GenericApply;
+
+                // INTENTIONALLY FALL THROUGH TO BUILD THE APPLIES
+            }
+            #endif
+
+            case TASKTYPE_GenericApply:
+            {
+                for( ; start < numBuckets; start += ApplyGranularity)
+                {
+                    // General task configuration.
+                    TaskDescriptor task;
+                    bundle.gpuPack(&task);
+                    task.F = gpuF;
+                    task.fn = fn;
+                    task.fm = fm;
+
+                    // Set launch characteristics.
+                    int vtOwner = nativeBucket - 1;
+                    int from    = start;
+                    int to      = MIN(start + ApplyGranularity, numColTiles);
+                    task.extra[4] = TILESIZE * vtOwner;
+                    task.extra[5] = TILESIZE * from;
+                    task.extra[6] = TILESIZE * to;
+
+                    // Resolve the generic type to a specific type.
+                    switch(bundle.ApplyCount)
+                    {
+                        case 3: task.Type = TASKTYPE_Apply3; break;
+                        case 2: task.Type = TASKTYPE_Apply2; break;
+                        case 1: task.Type = TASKTYPE_Apply1; break;
+                    }
+
+                    // Add the task to the queue.
+                    queue[qindex++] = task;
+                }
+
+                break;
+            }
+            default: break; // DEAD: no default case is ever used.
+        }
+    }
+
+    // Compute the number of tasks we just built.
+    Int numTasks = qindex - *queueIndex;
+
+    // Copy-out the current index
+    *queueIndex = qindex;
+
+    return numTasks;
+}
diff --git a/GPUQREngine/Source/BucketList/BucketList_GrowBundles.cpp b/GPUQREngine/Source/BucketList/BucketList_GrowBundles.cpp
new file mode 100644
index 0000000..6854116
--- /dev/null
+++ b/GPUQREngine/Source/BucketList/BucketList_GrowBundles.cpp
@@ -0,0 +1,70 @@
+// =============================================================================
+// === GPUQREngine/Source/BucketList_GrowBundles.cpp ===========================
+// =============================================================================
+//
+// GrowBundles looks for row tiles (or bundles) involved in a factorization
+// and attempts to add those bundles or row tiles to a task currently set
+// for a series of Apply tasks. This is also known as Pipelining.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+#ifdef GPUQRENGINE_PIPELINING
+
+/* Grow existing bundles and advance the task type to APPLY_FACTORIZE. */
+void BucketList::GrowBundles
+(
+    void
+)
+{
+    //Console.WriteLine("=== GrowBundles");
+    for (int i = 0; i < numBundles; i++ )
+    {
+        LLBundle& bundle = Bundles[i];
+
+        /* The bundle is a phantom bundle if it only has a shadow entry.
+         * In this case, we choose not to grow the bundle. */
+        if(bundle.First == EMPTY) continue;
+
+        /* Absorb any idle tiles from the bucket. */
+        int nativeBucket = bundle.NativeBucket;
+        bool hasIdleTiles = (head[nativeBucket] != EMPTY);
+
+        //Console.WriteLine("Bundle " + bundle + "
+        //  has NativeBucket " + nativeBucket);
+
+        /* If there are idle tiles in the bucket, try to grow the bundle. */
+        if (hasIdleTiles)
+        {
+            //Console.WriteLine("  Detected Idle Tiles:" + head[nativeBucket]);
+
+            /* Set up the task to be an apply factorize. */
+            bundle.CurrentTask = TASKTYPE_GenericApplyFactorize;
+
+            /* Grow the bundle. */
+            while (head[nativeBucket] != EMPTY && !bundle.IsFull())
+            {
+                int newTile = RemoveHead(nativeBucket);
+                triu[newTile] = false;
+                bundle.AddTileToDelta(newTile);
+            }
+        }
+        /* Else upgrade the task if pipelining gives us an edge. */
+        else if (bundle.Count > 1)
+        {
+            bundle.CurrentTask = TASKTYPE_GenericApplyFactorize;
+        }
+        else if (bundleCount[nativeBucket] == 1 && Wavefront == nativeBucket-1)
+        {
+            bundle.CurrentTask = TASKTYPE_GenericApplyFactorize;
+        }
+
+        /* If we upgraded to apply-factorize, we need another VT block. */
+        if(bundle.CurrentTask == TASKTYPE_GenericApplyFactorize)
+        {
+            bundle.VT[1] = allocateVT();
+        }
+    }
+}
+
+#endif
diff --git a/GPUQREngine/Source/BucketList/BucketList_Manage.cpp b/GPUQREngine/Source/BucketList/BucketList_Manage.cpp
new file mode 100644
index 0000000..fdf5037
--- /dev/null
+++ b/GPUQREngine/Source/BucketList/BucketList_Manage.cpp
@@ -0,0 +1,90 @@
+// =============================================================================
+// === GPUQREngine/Source/BucketList_Manage.cpp ================================
+// =============================================================================
+//
+// This file contains management logic for the BucketList data structure.
+// Constant time insertions and removals are possible because of the
+// doubly-linked nature of the BucketList. Additional routines include
+// allocating and releasing VT tiles and removing a head tile, for use in
+// pipelined factorization.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+void BucketList::Insert
+(
+    Int tile,
+    Int bucket,
+    bool upperTriangular
+)
+{
+    Int temp = head[bucket];
+    head[bucket] = tile;
+    next[tile] = temp;
+    if (temp != EMPTY) prev[temp] = tile;
+    prev[tile] = EMPTY;
+
+    /* Set whether this tile is upper triangular. */
+    triu[tile] = upperTriangular;
+
+    idleTileCount[bucket]++;
+    numIdleTiles++;
+
+    /* Keep track of the last bucket. */
+    LastBucket = MAX(LastBucket, bucket);
+}
+
+void BucketList::Remove
+(
+    Int tile,
+    Int bucket
+)
+{
+    if (tile == EMPTY) return;
+
+    Int ptile = prev[tile];
+    Int ntile = next[tile];
+    if (ptile != EMPTY) next[ptile] = ntile;
+    if (ntile != EMPTY) prev[ntile] = ptile;
+
+    /* If we removed the head entry, update head. */
+    if (ptile == EMPTY) head[bucket] = ntile;
+
+    /* "tile" isn't in a bucket, so there's no pinv to keep track of. */
+    prev[tile] = EMPTY;
+    next[tile] = EMPTY;
+
+    idleTileCount[bucket]--;
+    numIdleTiles--;
+}
+
+#ifdef GPUQRENGINE_PIPELINING
+Int BucketList::RemoveHead
+(
+    Int bucket                  // The bucket number
+)
+{
+    Int tile = head[bucket];
+    Remove(tile, bucket);
+    return tile;
+}
+#endif
+
+double *BucketList::allocateVT
+(
+    void
+)
+{
+    return gpuVT[VThead++];
+}
+
+double *BucketList::freeVT
+(
+    double *doneVT              // The GPU pointer of a released VT tile
+)
+{
+    gpuVT[--VThead] = doneVT;
+    return NULL;
+}
diff --git a/GPUQREngine/Source/BucketList/BucketList_PostProcessing.cpp b/GPUQREngine/Source/BucketList/BucketList_PostProcessing.cpp
new file mode 100644
index 0000000..6937742
--- /dev/null
+++ b/GPUQREngine/Source/BucketList/BucketList_PostProcessing.cpp
@@ -0,0 +1,44 @@
+// =============================================================================
+// === GPUQREngine/Source/BucketList_PostProcessing.cpp ========================
+// =============================================================================
+//
+// PostProcess handles any cleanup operations following a kernel invocation
+// including merging delta tiles with the main bundle and other fixups.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+void BucketList::PostProcess
+(
+    void
+)
+{
+    for(int b=0; b<numBundles; b++)
+    {
+        LLBundle& bundle = Bundles[b];
+
+        /* Get details about the task type. */
+        TaskType type = bundle.CurrentTask;
+        bool wasApply = (type == TASKTYPE_GenericApply);
+        #ifdef GPUQRENGINE_PIPELINING
+        wasApply = wasApply || (type == TASKTYPE_GenericApplyFactorize);
+        #endif
+
+        /* If the task was an apply or an apply-factorize: */
+        if(wasApply)
+        {
+            /* Do the rearrange and find the index of the second min entry. */
+            bundle.PipelinedRearrange();
+            bundle.UpdateSecondMinIndex();
+            bundle.UpdateMax();
+
+            /* We're finished with VT[0], but we need to shuffle VT[0] <- VT[1]
+             * so we can further pipeline apply-factorize tasks. */
+            freeVT(bundle.VT[0]);
+            bundle.VT[0] = bundle.VT[1];
+            bundle.VT[1] = NULL;
+        }
+    }
+}
diff --git a/GPUQREngine/Source/GPUQREngine_ExpertDense.cpp b/GPUQREngine/Source/GPUQREngine_ExpertDense.cpp
new file mode 100644
index 0000000..8c43af4
--- /dev/null
+++ b/GPUQREngine/Source/GPUQREngine_ExpertDense.cpp
@@ -0,0 +1,217 @@
+// =============================================================================
+// === GPUQREngine/Source/GPUQREngine_ExpertDense.cpp ==========================
+// =============================================================================
+//
+// This file contains the dense GPUQREngine wrapper that finds the staircase,
+// makes a copy of the user's front data, then calls down into the Internal
+// GPUQREngine factorization routine.
+//
+// Other functions include:
+//  - GPUQREngine_Cleanup:       Cleans up relevant workspaces in the dense
+//                               factorization depending on how we're exiting.
+//  - GPUQREngine_FindStaircase: Finds the staircase for a front and returns
+//                               the staircase as an Int* list
+// =============================================================================
+
+#include "GPUQREngine_Internal.hpp"
+
+
+QREngineResultCode GPUQREngine_Cleanup
+(
+    QREngineResultCode code,    // The result code that we're exiting with
+    Front *userFronts,          // The user-provided list of fronts
+    Front *fronts,              // The internal copy of the user's fronts
+    Int numFronts,              // The number of fronts to be factorized
+    Workspace *wsMongoF,        // Pointer to the total GPU Front workspace
+    Workspace *wsMongoR         // Pointer to the total CPU R workspace
+);
+
+QREngineResultCode GPUQREngine
+(
+    size_t gpuMemorySize,   // The total available GPU memory size in bytes
+    Front *userFronts,      // The list of fronts to factorize
+    Int numFronts,          // The number of fronts to factorize
+    QREngineStats *stats    // An optional parameter. If present, statistics
+                            // are collected and passed back to the caller
+                            // via this struct
+)
+{
+    /* Allocate workspaces */
+    Front *fronts = (Front*) SuiteSparse_calloc(numFronts, sizeof(Front));
+    if(!fronts)
+    {
+        return QRENGINE_OUTOFMEMORY;
+    }
+
+    size_t FSize, RSize;
+    FSize = RSize = 0;
+    for(int f=0; f<numFronts; f++)
+    {
+        /* Configure the front */
+        Front *userFront = &(userFronts[f]);
+        Int m = userFront->fm;
+        Int n = userFront->fn;
+        Front *front = new (&fronts[f]) Front(f, EMPTY, m, n);
+        FSize += front->getNumFrontValues();
+        RSize += front->getNumRValues();
+    }
+
+    // We have to allocate page-locked CPU-GPU space to leverage asynchronous
+    // memory transfers.  This has to be done in a way that the CUDA driver is
+    // aware of, which unfortunately means making a copy of the user input.
+
+    // calloc pagelocked space on CPU, and calloc space on the GPU
+    Workspace *wsMongoF = Workspace::allocate(FSize,    // CPU and GPU
+        sizeof(double), true, true, true, true);
+
+    // calloc pagelocked space on the CPU.  Nothing on the GPU
+    Workspace *wsMongoR = Workspace::allocate(RSize,    // CPU
+        sizeof(double), true, true, false, true);
+
+    /* Cleanup and return if we ran out of memory. */
+    if(!wsMongoF || !wsMongoR)
+    {
+        return GPUQREngine_Cleanup (QRENGINE_OUTOFMEMORY,
+            userFronts, fronts, numFronts, wsMongoF, wsMongoR);
+    }
+
+    /* Prepare the fronts for GPU execution. */
+    size_t FOffset, ROffset;
+    FOffset = ROffset = 0;
+    for(int f=0; f<numFronts; f++)
+    {
+        // Set the front pointers; make the copy from user data into front data.
+        Front *front = &(fronts[f]);
+        front->F    = CPU_REFERENCE(wsMongoF, double*) + FOffset;
+        front->gpuF = GPU_REFERENCE(wsMongoF, double*) + FOffset;
+        front->cpuR = CPU_REFERENCE(wsMongoR, double*) + ROffset;
+        FOffset += front->getNumFrontValues();
+        ROffset += front->getNumRValues();
+
+        /* COPY USER DATA (user's F to our F) */
+        Front *userFront = &(userFronts[f]);
+        double *userF = userFront->F;
+        double *F = front->F;
+        Int m = userFront->fm;
+        Int n = userFront->fn;
+        bool isColMajor = userFront->isColMajor;
+        Int ldn = userFront->ldn;
+        for(Int i=0; i<m; i++)
+        {
+            for(Int j=0; j<n; j++)
+            {
+                F[i*n+j] = (isColMajor ? userF[j*ldn+i] : userF[i*ldn+j]);
+            }
+        }
+
+        /* Attach either the user-specified Stair, or compute it. */
+        front->Stair = userFront->Stair;
+        if(!front->Stair) front->Stair = GPUQREngine_FindStaircase(front);
+
+        /* Cleanup and return if we ran out of memory building the staircase */
+        if(!front->Stair)
+        {
+            return GPUQREngine_Cleanup (QRENGINE_OUTOFMEMORY,
+                userFronts, fronts, numFronts, wsMongoF, wsMongoR);
+        }
+    }
+
+    /* Transfer the fronts to the GPU. */
+    if(!wsMongoF->transfer(cudaMemcpyHostToDevice))
+    {
+        return GPUQREngine_Cleanup (QRENGINE_GPUERROR,
+            userFronts, fronts, numFronts, wsMongoF, wsMongoR);
+    }
+
+    /* Do the factorization for this set of fronts. */
+    QREngineResultCode result = GPUQREngine_Internal(gpuMemorySize, fronts,
+        numFronts, NULL, NULL, NULL, stats);
+    if(result != QRENGINE_SUCCESS)
+    {
+        return GPUQREngine_Cleanup (result,
+            userFronts, fronts, numFronts, wsMongoF, wsMongoR);
+    }
+
+    /* COPY USER DATA (our R back to user's R) */
+    for(int f=0; f<numFronts; f++)
+    {
+        Front *userFront = &(userFronts[f]);
+        double *R = (&fronts[f])->cpuR;
+        double *userR = userFront->cpuR;
+        Int m = userFront->fm;
+        Int n = userFront->fn;
+        Int rank = userFront->rank;
+        bool isColMajor = userFront->isColMajor;
+        Int ldn = userFront->ldn;
+        for(Int i=0; i<rank; i++)
+        {
+            for(Int j=0; j<n; j++)
+            {
+                userR[i*ldn+j] = (isColMajor ? R[j*n+i] : R[i*n+j]);
+            }
+        }
+    }
+
+    /* Return that the factorization was successful. */
+    return GPUQREngine_Cleanup (QRENGINE_SUCCESS,
+        userFronts, fronts, numFronts, wsMongoF, wsMongoR);
+}
+
+QREngineResultCode GPUQREngine_Cleanup
+(
+    QREngineResultCode code,    // The result code that we're exiting with
+    Front *userFronts,          // The user-provided list of fronts
+    Front *fronts,              // The internal copy of the user's fronts
+    Int numFronts,              // The number of fronts to be factorized
+    Workspace *wsMongoF,        // Pointer to the total GPU Front workspace
+    Workspace *wsMongoR         // Pointer to the total CPU R workspace
+)
+{
+    /* Cleanup fronts. */
+    for(int f=0; f<numFronts; f++)
+    {
+        Front *userFront = (&userFronts[f]);
+        Front *front = &(fronts[f]);
+        if(front != NULL)
+        {
+            /* If we had to attach our own stair, clean it up. */
+            if(userFront->Stair == NULL && front->Stair != NULL)
+            {
+                front->Stair = (Int *) SuiteSparse_free(front->Stair);
+            }
+
+            /* Detach front data since it's managed by the mongo. */
+            front->F = NULL;
+        }
+    }
+    fronts = (Front *) SuiteSparse_free(fronts);
+
+    /* Free the mongo structures. Note that Workspace checks for NULL. */
+    wsMongoF = Workspace::destroy(wsMongoF);
+    wsMongoR = Workspace::destroy(wsMongoR);
+
+    return code;
+}
+
+Int *GPUQREngine_FindStaircase
+(
+    Front *front                // The front whose staircase we are computing
+)
+{
+    Int fm = front->fm;
+    Int fn = front->fn;
+
+    double *F = front->F;
+    Int *Stair = (Int*) SuiteSparse_malloc(fn, sizeof(Int));
+    if(!F || !Stair) return NULL;
+
+    Int lastStair = 0;
+    for(int j=0; j<fn; j++)
+    {
+        int i;
+        for(i=fm-1; i>lastStair && F[i*fn+j] == 0.0; i--);
+        Stair[j] = lastStair = i;
+    }
+
+    return Stair;
+}
diff --git a/GPUQREngine/Source/GPUQREngine_ExpertSparse.cpp b/GPUQREngine/Source/GPUQREngine_ExpertSparse.cpp
new file mode 100644
index 0000000..91a9c36
--- /dev/null
+++ b/GPUQREngine/Source/GPUQREngine_ExpertSparse.cpp
@@ -0,0 +1,30 @@
+// =============================================================================
+// === GPUQREngine/Source/GPUQREngine_ExpertSparse.cpp =========================
+// =============================================================================
+//
+// This file contains the sparse GPUQREngine wrapper that simply calls down into
+// the Internal GPUQREngine factorization routine.
+//
+// =============================================================================
+
+#include "GPUQREngine_Internal.hpp"
+
+
+QREngineResultCode GPUQREngine
+(
+    size_t gpuMemorySize,   // The total available GPU memory size in bytes
+    Front *userFronts,      // The list of fronts to factorize
+    Int numFronts,          // The number of fronts to factorize
+    Int *Parent,            // The front-to-parent mapping
+    Int *Childp,            // Front-to-child column pointers
+    Int *Child,             // Child permutation
+                            // (Child[Childp[f]] to Child[Childp[f+1]] are all
+                            // the front identifiers for front "f"'s children.
+    QREngineStats *stats    // An optional parameter. If present, statistics
+                            // are collected and passed back to the caller
+                            // via this struct
+)
+{
+    return (GPUQREngine_Internal (gpuMemorySize, userFronts, numFronts, Parent,
+        Childp, Child, stats)) ;
+}
diff --git a/GPUQREngine/Source/GPUQREngine_GraphVizHelper.cpp b/GPUQREngine/Source/GPUQREngine_GraphVizHelper.cpp
new file mode 100644
index 0000000..b1ab65b
--- /dev/null
+++ b/GPUQREngine/Source/GPUQREngine_GraphVizHelper.cpp
@@ -0,0 +1,216 @@
+// =============================================================================
+// === GPUQREngine/Source/GPUQREngine_GraphVisHelper.cpp =======================
+// =============================================================================
+// === This is used for development and debugging only. ========================
+// =============================================================================
+//
+// This file contains logic to render the current state of the BucketList data
+// structure, including the current arrangement of row tiles into column
+// buckets and bundles. The output language is DOT for use with either
+// GraphViz's dot or sfdp package.
+//
+// Bundles are colored by task type:
+//   Apply         : Yellow
+//   Factorize     : Red
+//   ApplyFactorize: Orange
+//
+// =============================================================================
+
+#include "GPUQREngine_Internal.hpp"
+
+#ifdef GPUQRENGINE_RENDER
+
+#include "GPUQREngine_BucketList.hpp"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+void GraphVizHelper_ComputeBundleLabel
+(
+    LLBundle& bundle,   // C++ Reference to the bundle
+    char *label         // (output) The label to use for the bundle
+);
+
+static int DotSID = 1;
+
+void GPUQREngine_RenderBuckets(BucketList *buckets)
+{
+    // if(!RENDER_DENSE_FACTORIZATION) return;
+
+    LLBundle *bundles = buckets->Bundles;
+
+    int numBundles = buckets->numBundles;
+    char bundleNames[numBundles][64];
+    char bundleLabel[numBundles][64];
+
+    Int *head = buckets->head;
+    Int *next = buckets->next;
+
+    char filename[64];
+    sprintf(filename, "out_%d.dot", DotSID++);
+
+    FILE *output = fopen(filename, "w");
+
+    bool RenderOutline = false;
+    bool UseFancyRendering = false;
+
+    /* If we want to render the outline, do it first. */
+    if (RenderOutline)
+    {
+        fprintf(output, "graph O\n");
+        fprintf(output, "{\n");
+        fprintf(output, "node [shape=circle, style=filled, color=black];\n");
+        for (int colBucket = 0; colBucket < buckets->numBuckets; colBucket++)
+        {
+            /* Shade the point depending on the region. */
+            const char *fillColor = "gray";
+            if (colBucket < buckets->Wavefront) fillColor = "green";
+            else if (colBucket <= buckets->LastBucket) fillColor = "red";
+            fprintf(output, "O_%d [fillcolor=%s];\n", colBucket, fillColor);
+        }
+        fprintf(output, "}\n");
+    }
+
+    fprintf(output, "digraph D\n");
+    fprintf(output, "{\n");
+    fprintf(output, "node [shape=record, style=filled];\n");
+
+    int start = (UseFancyRendering ? MAX(0, buckets->Wavefront - 1) : 0);
+    int end = (UseFancyRendering ?
+        MIN(buckets->numBuckets, buckets->LastBucket + 1)
+        : buckets->numBuckets);
+
+    for (int colBucket = start; colBucket < end; colBucket++)
+    {
+//      const char *colBucketName = "CB_" + colBucket;
+//      const char *colBucketLabel = "ColBucket" + colBucket;
+            // +" (" + buckets->bundleCount[colBucket] + " bundles)";
+//      const char *colBucketEmptyName = "CBE_" + colBucket;
+//      const char *colBucketEmptyLabel = "Empty";
+        const char *wavefrontColor = (colBucket < buckets->Wavefront ?
+            "green" : "gray");
+
+        fprintf(output, "CB_%d [label=\"ColBucket%d\", fillcolor=%s];\n",
+            colBucket, colBucket, wavefrontColor);
+        fprintf(output, "CBE_%d [label=\"Empty\"];\n", colBucket);
+
+        /* Render the idle tiles. */
+        int node;
+        char lastTile[32]; strcpy(lastTile, "");
+        if ((node = head[colBucket]) != EMPTY)
+        {
+            sprintf(lastTile, "IdleTile_%d", node);
+
+            const char *nodeShape = (buckets->triu[node] ?
+                "triangle" : "ellipse");
+            fprintf(output,
+                "IdleTile_%d [shape=%s, fillcolor=%s, label=\"%d\"];\n",
+                node, nodeShape, wavefrontColor, node);
+            fprintf(output, "CB_%d -> IdleTile_%d;\n", colBucket, node);
+            int last = node;
+            while ((node = next[node]) != EMPTY)
+            {
+                sprintf(lastTile, "IdleTile_%d", node);
+
+                nodeShape = (buckets->triu[node] ? "triangle" : "ellipse");
+                fprintf(output, "IdleTile_%d [shape=%s, label=\"%d\"];\n",
+                    node, nodeShape, node);
+                fprintf(output, "IdleTile_%d -> IdleTile_%d;\n", last, node);
+                last = node;
+            }
+        }
+
+        /* Now render the bundles native to this bucket. */
+
+        /* Write the nodes */
+        int bbc = 0;
+        for(int i=0; i<numBundles; i++)
+        {
+            strcpy(bundleNames[i], "");
+            strcpy(bundleLabel[i], "");
+        }
+        for(int i=0; i<numBundles; i++)
+        {
+            LLBundle& bundle = bundles[i];
+            if (bundle.NativeBucket == colBucket)
+            {
+                sprintf(bundleNames[bbc], "CB_%d_HB_%d", colBucket, bbc);
+
+                const char *taskColor = "white";
+                bool isApply = (bundle.CurrentTask == TASKTYPE_GenericApply);
+                bool isFactorize =
+                    (bundle.CurrentTask == TASKTYPE_GenericFactorize);
+                taskColor =
+                    (isApply ? "yellow" : isFactorize ? "red" : "orange");
+
+                GraphVizHelper_ComputeBundleLabel(bundle, bundleLabel[bbc]);
+                fprintf(output, "%s [fillcolor=\"%s\", label=\"%s\"];\n",
+                    bundleNames[bbc], taskColor, bundleLabel[bbc]);
+                bbc++;
+            }
+        }
+
+        /* Print connectivity. */
+        if (bbc > 0)
+        {
+            if(!strcmp(lastTile, ""))
+            {
+                fprintf(output, "CB_%d -> %s;\n", colBucket, bundleNames[0]);
+            }
+            else
+            {
+                fprintf(output, "%s -> %s;\n", lastTile, bundleNames[0]);
+            }
+
+            for (int i = 1; i < bbc; i++)
+            {
+                fprintf(output, "%s -> %s;\n",
+                    bundleNames[i-1], bundleNames[i]);
+            }
+            fprintf(output, "%s -> CBE_%d;\n", bundleNames[bbc-1], colBucket);
+        }
+        else if (head[colBucket] != EMPTY)
+        {
+            fprintf(output, "%s -> CBE_%d;\n", lastTile, colBucket);
+        }
+        else
+        {
+            fprintf(output, "CB_%d -> CBE_%d;\n", colBucket, colBucket);
+        }
+    }
+
+    fprintf(output, "}\n");
+    fclose(output);
+}
+
+void GraphVizHelper_ComputeBundleLabel
+(
+    LLBundle& bundle,   // C++ Reference to the bundle
+    char *label         // (output) The label to use for the bundle
+)
+{
+    Int *next = bundle.Buckets->next;
+
+    char temp[16];
+    strcpy(temp, "");
+
+    strcpy(label, "");
+    if (bundle.Shadow != EMPTY)
+    {
+        sprintf(temp, "s%ld%s", bundle.Shadow,
+            (bundle.First != EMPTY ? "|" : ""));
+        strcat(label, temp);
+    }
+
+    for (int i = bundle.First; i!=EMPTY; i=next[i])
+    {
+        sprintf(temp, "%d%s", i, (next[i] != EMPTY ? "|" : ""));
+        strcat(label, temp);
+    }
+    for (int i = bundle.Delta; i!=EMPTY; i=next[i])
+    {
+        sprintf(temp, "|%s%d", (i == bundle.Delta ? "D" : "d"), i);
+        strcat(label, temp);
+    }
+}
+#endif
diff --git a/GPUQREngine/Source/GPUQREngine_Internal.cpp b/GPUQREngine/Source/GPUQREngine_Internal.cpp
new file mode 100644
index 0000000..46ce2b8
--- /dev/null
+++ b/GPUQREngine/Source/GPUQREngine_Internal.cpp
@@ -0,0 +1,88 @@
+// =============================================================================
+// === GPUQREngine/Source/GPUQREngine_Internal.cpp =============================
+// =============================================================================
+//
+// GPUQREngine_Internal is the call-down from the dense and sparse polymorphic
+// wrappers. This code is responsible for maintaining the Scheduler and
+// coordinating the factorization in a main loop.
+//
+// =============================================================================
+
+#include "GPUQREngine_Internal.hpp"
+#include "GPUQREngine_Scheduler.hpp"
+#include "GPUQREngine_Stats.hpp"
+
+
+QREngineResultCode GPUQREngine_Internal
+(
+    size_t gpuMemorySize,   // The total available GPU memory size in bytes
+    Front *fronts,          // The list of fronts to factorize
+    Int numFronts,          // The number of fronts to factorize
+    Int *Parent,            // The front-to-parent mapping
+    Int *Childp,            // Front-to-child column pointers
+    Int *Child,             // Child permutation
+                            // (Child[Childp[f]] to Child[Childp[f+1]] are all
+                            // the front identifiers for front "f"'s children.
+    QREngineStats *stats    // An optional parameter. If present, statistics
+                            // are collected and passed back to the caller
+                            // via this struct
+)
+{
+    bool ok = true;
+
+    /* Create the scheduler. */
+    Scheduler *scheduler = (Scheduler*) SuiteSparse_calloc(1,sizeof(Scheduler));
+    if (scheduler == NULL)
+    {
+        return QRENGINE_OUTOFMEMORY;
+    }
+
+    new (scheduler) Scheduler(fronts, numFronts, gpuMemorySize);
+    ok = scheduler->memory_ok && scheduler->cuda_ok;
+
+    /* If we encountered problems initializing the scheduler: */
+    if(!ok)
+    {
+        bool memory_ok = scheduler->memory_ok ;
+        bool cuda_ok = scheduler->cuda_ok ;
+        if(scheduler)
+        {
+            scheduler->~Scheduler();
+            scheduler = (Scheduler*) SuiteSparse_free (scheduler) ;
+        }
+        if(!memory_ok) return QRENGINE_OUTOFMEMORY;
+        if(!cuda_ok) return QRENGINE_GPUERROR;
+    }
+
+    bool completed = false;
+    while(!completed)
+    {
+//      #ifdef GPUQRENGINE_RENDER
+//      scheduler->render();
+//      #endif
+        scheduler->fillWorkQueue();
+        scheduler->transferData();
+
+        // Launch the kernel and break out of the loop if we encountered
+        // a cuda error.
+        scheduler->launchKernel();
+        if(!scheduler->cuda_ok) break;
+
+        completed = scheduler->postProcess();
+        scheduler->toggleQueue();
+    }
+
+    /* Report metrics back to the caller. */
+    if(stats)
+    {
+        stats->kernelTime = scheduler->kernelTime;
+        stats->numLaunches = scheduler->numKernelLaunches;
+        stats->flopsActual = scheduler->gpuFlops;
+    }
+
+    /* Explicitly invoke the destructor */
+    scheduler->~Scheduler();
+    scheduler = (Scheduler*) SuiteSparse_free(scheduler);
+
+    return QRENGINE_SUCCESS;
+}
diff --git a/GPUQREngine/Source/GPUQREngine_UberKernel.cu b/GPUQREngine/Source/GPUQREngine_UberKernel.cu
new file mode 100644
index 0000000..e5454c0
--- /dev/null
+++ b/GPUQREngine/Source/GPUQREngine_UberKernel.cu
@@ -0,0 +1,30 @@
+// =============================================================================
+// === GPUQREngine/Source/GPUQREngine_UberKernel.cu ============================
+// =============================================================================
+// 
+// This is the actual concrete kernel invocation, transfering control flow to
+// the GPU accelerator briefly. We actually launch kernels using alternating
+// streams to overlap communication with computation, so the launch is actually
+// asynchronous in nature. We use the CUDA events and streams model througout
+// the Scheduler to coordinate asynchronous launch behavior.
+// 
+// =============================================================================
+
+#define CUDA_INCLUDE
+#include "Kernel/uberKernel.cu"
+
+
+void GPUQREngine_UberKernel
+(
+    cudaStream_t kernelStream,      // The stream on which to launch the kernel
+    TaskDescriptor *gpuWorkQueue,   // The list of work items for the GPU
+    int numTasks                    // The # of items in the work list
+)
+{
+    /* Set the standard launch configuration. */
+    dim3 threads(NUMTHREADS, 1);
+    dim3 grid(numTasks, 1);
+
+    /* Launch the kernel */
+    qrKernel<<<grid, threads, 0, kernelStream>>>(gpuWorkQueue, numTasks);    
+}
diff --git a/GPUQREngine/Source/LLBundle/LLBundle.cpp b/GPUQREngine/Source/LLBundle/LLBundle.cpp
new file mode 100644
index 0000000..9ec09a0
--- /dev/null
+++ b/GPUQREngine/Source/LLBundle/LLBundle.cpp
@@ -0,0 +1,35 @@
+// =============================================================================
+// === GPUQREngine/Source/LLBundle.cpp =========================================
+// =============================================================================
+//
+// This file contains the constructor and destructor for the LLBundle class.
+// The constructor will attempt to reserve a VT tile automatically, since newly
+// created bundles are immediately slated for factorization.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+LLBundle::LLBundle
+(
+    BucketList *buckets,
+    Int panelSize,
+    Int nativeBucket
+)
+{
+    Buckets = buckets;
+    PanelSize = panelSize;
+    NativeBucket = nativeBucket;
+    SecondMin = Shadow = First = Delta = Max = EMPTY;
+    Count = ApplyCount = 0;
+    VT[0] = VT[1] = NULL;
+
+    /* Create the factorize task and allocate a VT block. */
+    CurrentTask = TASKTYPE_GenericFactorize;
+    VT[0] = buckets->allocateVT();
+}
+
+LLBundle::~LLBundle()
+{
+}
diff --git a/GPUQREngine/Source/LLBundle/LLBundle_AddTiles.cpp b/GPUQREngine/Source/LLBundle/LLBundle_AddTiles.cpp
new file mode 100644
index 0000000..f367cb8
--- /dev/null
+++ b/GPUQREngine/Source/LLBundle/LLBundle_AddTiles.cpp
@@ -0,0 +1,114 @@
+// =============================================================================
+// === GPUQREngine/Source/LLBundle_AddTiles.cpp ================================
+// =============================================================================
+//
+// This file contains two codes that add a rowtile to either the main bundle
+// or to the bundle's delta (if pipelined factorization is enabled).
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+#ifdef GPUQRENGINE_PIPELINING
+
+void LLBundle::AddTileToDelta
+(
+    Int rowTile
+)
+{
+    Count++;
+
+    Int *prev = Buckets->prev;
+    Int *next = Buckets->next;
+
+    /* Add the first delta entry. */
+    if (Delta == EMPTY)
+    {
+        Delta = rowTile;
+        next[Delta] = EMPTY;
+        prev[Delta] = EMPTY;
+        SecondMin = MIN(SecondMin, Delta);
+        return;
+    }
+
+    /* Add additional entries */
+    int min = MIN(Delta, rowTile);
+    int max = MAX(Delta, rowTile);
+
+    /* If the Delta is still the best: */
+    if (Delta == min)
+    {
+        int fnext = next[Delta];
+        if (fnext != EMPTY) prev[fnext] = max;
+        next[Delta] = max;
+        prev[max] = Delta;
+        next[max] = fnext;
+    }
+    /* Else the added guy is smaller than the first delta entry. */
+    else
+    {
+        next[min] = Delta;
+        prev[Delta] = min;
+        prev[min] = EMPTY;
+        Delta = min;
+    }
+
+    /* Keep track of SecondMin. */
+    SecondMin = (SecondMin == EMPTY ? Delta : MIN(SecondMin, Delta));
+}
+
+#endif
+
+void LLBundle::AddTileToSlots
+(
+    Int rowTile
+)
+{
+    Count++;
+
+    Int *prev = Buckets->prev;
+    Int *next = Buckets->next;
+
+    /* Keep track of the Max. */
+    Max = MAX(Max, rowTile);
+
+    /* Add the first entry. */
+    if (First == EMPTY)
+    {
+        First = rowTile;
+        Last = rowTile;
+        next[First] = EMPTY;
+        prev[First] = EMPTY;
+        SecondMin = EMPTY;
+        return;
+    }
+
+    /* Add additional entries */
+    int min = MIN(First, rowTile);
+    int max = MAX(First, rowTile);
+
+    /* If the first is still the best: */
+    if (First == min)
+    {
+        int fnext = next[First];
+        if (fnext != EMPTY) prev[fnext] = max;
+        next[First] = max;
+        prev[max] = First;
+        next[max] = fnext;
+    }
+    /* Else the added guy is smaller than First. */
+    else
+    {
+        next[min] = First;
+        prev[First] = min;
+        prev[min] = EMPTY;
+        First = min;
+    }
+
+    /* Keep track of SecondMin. */
+    SecondMin = (SecondMin == EMPTY ? max : MIN(SecondMin, max));
+
+    /* Update last, if needed. */
+    if (next[Last] != EMPTY) Last = next[Last];
+}
diff --git a/GPUQREngine/Source/LLBundle/LLBundle_Advance.cpp b/GPUQREngine/Source/LLBundle/LLBundle_Advance.cpp
new file mode 100644
index 0000000..b9c131d
--- /dev/null
+++ b/GPUQREngine/Source/LLBundle/LLBundle_Advance.cpp
@@ -0,0 +1,80 @@
+// =============================================================================
+// === GPUQREngine/Source/LLBundle_Advance.cpp =================================
+// =============================================================================
+//
+// The LLBundle Advance member function advances the bundle, leaving behind the
+// min tile (which becomes the bundle's Shadow). On advance, the bundle is
+// scheduled for at least an Apply (it may be upgraded to ApplyFactorize if
+// we're using pipelining).
+//
+// Advance returns a flag indicating whether or not the bundle evaporated as
+// it advanced. This may happen if the bundle advances past the # of pivotal
+// columns in the front (tall & skinny case) or if the bundle only had one
+// front in it to begin with.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+bool LLBundle::Advance
+(
+    void
+)
+{
+    Int *prev = Buckets->prev;
+    Int *next = Buckets->next;
+
+    bool stillAround;
+
+    /* If the task was an apply, evaporate the bundle and
+     * put everyone back into the native bucket. */
+    if(CurrentTask == TASKTYPE_GenericApply)
+    {
+        bool triu = false;
+        stillAround = false;
+        int tile = First;
+        First = EMPTY;
+        while(tile != EMPTY)
+        {
+            int nextTile = next[tile];
+            next[tile] = EMPTY;
+            prev[tile] = EMPTY;
+            Buckets->Insert(tile, NativeBucket, triu);
+            tile = nextTile;
+            Count--;
+        }
+    }
+    /* Else if the task was a factorize or an apply-factorize: */
+    else
+    {
+        bool triu = true;
+
+        /* The bundle evaporated if we don't have a first tile.. */
+        stillAround = (First != EMPTY);
+        if(stillAround)
+        {
+            /* Put the leading tile back into its native bucket. */
+            int tile = First;
+            Shadow = tile;
+            First = next[tile];
+            Buckets->Insert(tile, NativeBucket, triu);
+            Count--;
+
+            /* By definition, the First doesn't have a previous element. */
+            if(First != EMPTY) prev[First] = EMPTY;
+
+            /* Advance the HouseholderBundle to the next colBucket. */
+            NativeBucket++;
+
+            /* See if we dropped off the ends of the earth. */
+            stillAround = (NativeBucket < Buckets->numBuckets);
+
+            /* Schedule the apply. */
+            CurrentTask = TASKTYPE_GenericApply;
+            ApplyCount = Count + 1; // The apply count considers the shadow.
+        }
+    }
+
+    return stillAround;
+}
diff --git a/GPUQREngine/Source/LLBundle/LLBundle_GPUPack.cpp b/GPUQREngine/Source/LLBundle/LLBundle_GPUPack.cpp
new file mode 100644
index 0000000..bdf2461
--- /dev/null
+++ b/GPUQREngine/Source/LLBundle/LLBundle_GPUPack.cpp
@@ -0,0 +1,56 @@
+// =============================================================================
+// === GPUQREngine/Source/LLBundle_GPUPack.cpp =================================
+// =============================================================================
+//
+// The GPUPack code converts the logical CPU representation of the Bundle and
+// its state into a packet of metadata information that the GPU can act on.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+void LLBundle::gpuPack
+(
+    TaskDescriptor* cpuTask
+)
+{
+    Int *next = Buckets->next;
+    int i = 0;
+
+    int delta = EMPTY;
+    int secondMin = EMPTY;
+
+    /* Pack the standard rowTiles... */
+    int rowTile = (int) (Shadow != EMPTY ? Shadow : First);
+    while(rowTile != EMPTY)
+    {
+        cpuTask->extra[i] = TILESIZE * rowTile;
+        if(rowTile == SecondMin) secondMin = i;
+        i++;
+
+        rowTile = (int) (rowTile == Shadow ? First : next[rowTile]);
+    }
+    /* Pack the delta rowTiles... */
+    rowTile = (int) Delta;
+    delta = i;
+    while(rowTile != EMPTY)
+    {
+        // NOTE: only used when GPUQRENGINE_PIPELINING #define'd
+        cpuTask->extra[i] = TILESIZE * rowTile;
+        if(rowTile == SecondMin) secondMin = i;
+        i++;
+
+        rowTile = (int) next[rowTile];
+    }
+    /* Clear the remaining rowtiles. */
+    for( ; i<PANELSIZE+1; i++) cpuTask->extra[i] = EMPTY;
+
+    /* Transfer ApplyFactorize members */
+    cpuTask->extra[8] = delta;
+    cpuTask->extra[9] = secondMin;
+
+    /* Transfer VT assignments. */
+    cpuTask->AuxAddress[0] = VT[0];
+    cpuTask->AuxAddress[1] = VT[1];
+}
diff --git a/GPUQREngine/Source/LLBundle/LLBundle_PipelinedRearrange.cpp b/GPUQREngine/Source/LLBundle/LLBundle_PipelinedRearrange.cpp
new file mode 100644
index 0000000..1905ecd
--- /dev/null
+++ b/GPUQREngine/Source/LLBundle/LLBundle_PipelinedRearrange.cpp
@@ -0,0 +1,106 @@
+// =============================================================================
+// === GPUQREngine/Source/LLBundle_PipelinedRearrange.cpp ======================
+// =============================================================================
+//
+// PipelinedRearrange reconfigures an LLBundle instance by swapping the
+// SecondMin row tile to the top position, overwriting the Shadow. Any remaining
+// delta tiles are merged into the bundle, and delta metadata is removed,
+// allowing additional deltas to participate in future sweeps through the
+// data structure.
+//
+// =============================================================================
+
+#include "GPUQREngine_BucketList.hpp"
+
+
+void LLBundle::PipelinedRearrange
+(
+    void
+)
+{
+    Int *prev = Buckets->prev;
+    Int *next = Buckets->next;
+
+    /*** Move the min to the top. ***/
+    if (First != SecondMin)
+    {
+        /* Remove second min */
+        int smnext = next[SecondMin];
+        int smprev = prev[SecondMin];
+        if (smnext != EMPTY) prev[smnext] = smprev;
+        if (smprev != EMPTY) next[smprev] = smnext;
+
+        /* Add second min to the front of the list. */
+        prev[First] = SecondMin;
+        next[SecondMin] = First;
+        prev[SecondMin] = EMPTY;
+        First = SecondMin;
+
+        /* If second min was the first of delta, update Delta. */
+        if (SecondMin == Delta)
+        {
+            // NOTE: only used when GPUQRENGINE_PIPELINING #define'd
+            Delta = smnext;     // PIPELINE
+        }
+        /* Else If the second min was somewhere in the original list. */
+        else if(SecondMin != Last)
+        {
+            // NOTE: only used when GPUQRENGINE_PIPELINING #define'd
+
+            /* If we have a delta, fill the gap using Delta. */
+            if (Delta != EMPTY)
+            {
+                // Take a snapshot of Delta's state so we can update it later.
+                int dnext = next[Delta];
+
+                /* Insert the delta entry */
+                if (smprev != EMPTY) next[smprev] = Delta;
+                if (smnext != EMPTY) prev[smnext] = Delta;
+                prev[Delta] = smprev;
+                next[Delta] = smnext;
+
+                /* Update Delta */
+                Delta = dnext;
+                if (Delta != EMPTY) prev[Delta] = EMPTY;
+            }
+            // Else if second min wasn't second from the last then we need to
+            // actually swap in the last because it isn't automatically ordered
+            // correctly.
+            else if(smnext != Last)
+            {
+                /* Take a snapshot of Last's state so we can update it later. */
+                int lprev = prev[Last];
+
+                /* Insert the last entry */
+                prev[Last] = smprev;
+                next[Last] = (Last != smnext ? smnext : EMPTY);
+                if (smprev != EMPTY) next[smprev] = Last;
+                if (smnext != EMPTY) prev[smnext] = Last;
+
+                /* Update Last */
+                Last = lprev;
+                next[Last] = EMPTY;
+            }
+        }
+        /* Else SecondMin was the last entry, so update last. */
+        else
+        {
+            Last = smprev;
+            if(Last != EMPTY) next[Last] = EMPTY;
+        }
+    }
+    SecondMin = EMPTY;
+
+    // If we still have a delta component, glue it to the end of the list.
+
+    if (Delta != EMPTY)
+    {
+        // NOTE: only used when GPUQRENGINE_PIPELINING #define'd
+        next[Last] = Delta;     // PIPELINE
+        prev[Delta] = Last;
+        Delta = EMPTY;
+
+        /* Move Last all the way to the last entry in Delta. */
+        while (next[Last] != EMPTY) Last = next[Last];
+    }
+}
diff --git a/GPUQREngine/Source/LLBundle/LLBundle_UpdateSecondMinIndex.cpp b/GPUQREngine/Source/LLBundle/LLBundle_UpdateSecondMinIndex.cpp
new file mode 100644
index 0000000..9dcf187
--- /dev/null
+++ b/GPUQREngine/Source/LLBundle/LLBundle_UpdateSecondMinIndex.cpp
@@ -0,0 +1,50 @@
+// =============================================================================
+// === GPUQREngine/Source/LLBundle_UpdateSecondMinIndex.cpp ====================
+// =============================================================================
+//
+// This file contains two functions that perform a scan through an LLBundle
+// instance to discover the SecondMin rowtile and the Max, respectively.
+//
+// =============================================================================
+
+
+#include "GPUQREngine_BucketList.hpp"
+
+// -----------------------------------------------------------------------------
+// LLBundle::UpdateSecondMinIndex
+// -----------------------------------------------------------------------------
+
+void LLBundle::UpdateSecondMinIndex
+(
+    void
+)
+{
+    /* If we don't have a First, return early. */
+    if(First == EMPTY) return;
+
+    Int *next = Buckets->next;
+
+    /* Scan to find the next second min index. */
+    int inspect = SecondMin = next[First];
+    while (inspect != EMPTY)
+    {
+        SecondMin = MIN(SecondMin, inspect);
+        inspect = next[inspect];
+    }
+}
+
+// -----------------------------------------------------------------------------
+// LLBundle::UpdateMax
+// -----------------------------------------------------------------------------
+
+void LLBundle::UpdateMax
+(
+    void
+)
+{
+    Int *next = Buckets->next;
+
+    /* Scan to find the max. */
+    Max = Shadow;
+    for(Int tile=First; tile!=EMPTY; tile=next[tile]) Max = MAX(Max, tile);
+}
diff --git a/GPUQREngine/Source/Scheduler/Scheduler.cpp b/GPUQREngine/Source/Scheduler/Scheduler.cpp
new file mode 100644
index 0000000..fcda957
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/Scheduler.cpp
@@ -0,0 +1,254 @@
+// =============================================================================
+// === GPUQREngine/Source/Scheduler.cpp ========================================
+// =============================================================================
+//
+// This file contains code to construct, initialize, and destroy the Scheduler.
+//
+// To support debugging and code coverage tests, we use placement new in order
+// to trap and exercise out-of-memory conditions within the operating system
+// memory manager.
+//
+// =============================================================================
+// The pattern in use in this file is the memory allocation self-contained
+// within the constructor with concrete initialization codes appearing in the
+// initializer.This practice is common in OO languages, such as Java in which
+// the constructor is responsible for memory management AND initialization.
+// =============================================================================
+
+#include "GPUQREngine_Scheduler.hpp"
+
+// -----------------------------------------------------------------------------
+// Macro destructor
+// -----------------------------------------------------------------------------
+
+#define FREE_EVERYTHING \
+    afPerm = (Int *) SuiteSparse_free(afPerm); \
+    afPinv = (Int *) SuiteSparse_free(afPinv); \
+    if(bucketLists) \
+    { \
+        for(Int f=0; f<numFronts; f++) \
+        { \
+            BucketList *dlbl = (&bucketLists[f]); \
+            dlbl->~BucketList(); \
+        } \
+    } \
+    bucketLists = (BucketList*) SuiteSparse_free(bucketLists); \
+    FrontDataPulled = (bool *) SuiteSparse_free(FrontDataPulled); \
+    eventFrontDataReady =(cudaEvent_t*) SuiteSparse_free(eventFrontDataReady); \
+    eventFrontDataPulled=(cudaEvent_t*) SuiteSparse_free(eventFrontDataPulled);\
+    for(int q=0; q<2; q++) workQueues[q] = Workspace::destroy(workQueues[q]); \
+    if (kernelStreams[0] != NULL) cudaStreamDestroy(kernelStreams[0]); \
+    if (kernelStreams[1] != NULL) cudaStreamDestroy(kernelStreams[1]); \
+    if (memoryStreamH2D  != NULL) cudaStreamDestroy(memoryStreamH2D); \
+    if (memoryStreamD2H  != NULL) cudaStreamDestroy(memoryStreamD2H); \
+    kernelStreams[0] = NULL ; \
+    kernelStreams[1] = NULL ; \
+    memoryStreamH2D = NULL ; \
+    memoryStreamD2H = NULL ;
+
+// -----------------------------------------------------------------------------
+// Scheduler constructor
+// -----------------------------------------------------------------------------
+
+Scheduler::Scheduler
+(
+    Front *fronts,
+    Int numFronts,
+    size_t gpuMemorySize
+)
+{
+    frontList = fronts;
+    this->numFronts = numFronts;
+    numFrontsCompleted = 0;
+
+    kernelStreams[0] = NULL ;
+    kernelStreams[1] = NULL ;
+    memoryStreamH2D = NULL ;
+    memoryStreamD2H = NULL ;
+
+    workQueues[0] = NULL ;
+    workQueues[1] = NULL ;
+
+    /* Allocate scheduler memory, checking for out of memory frequently.
+     *  Remark: SuiteSparse_calloc is important to use here for "mongo" memory
+     *          initializations because the objects have been designed
+     *          using flags that trigger only if set to true.
+     *          In other words, using malloc here could accidentally
+     *          trigger unexpected behavior.
+     */
+    memory_ok = true;
+    cuda_ok = true;
+
+    afPerm = (Int*) SuiteSparse_calloc(numFronts, sizeof(Int));
+    afPinv = (Int*) SuiteSparse_calloc(numFronts, sizeof(Int));
+    bucketLists = (BucketList*)
+        SuiteSparse_calloc(numFronts, sizeof(BucketList));
+    FrontDataPulled = (bool*) SuiteSparse_calloc(numFronts, sizeof(bool));
+    eventFrontDataReady =
+        (cudaEvent_t*) SuiteSparse_calloc(numFronts, sizeof(cudaEvent_t));
+    eventFrontDataPulled =
+        (cudaEvent_t*) SuiteSparse_calloc(numFronts, sizeof(cudaEvent_t));
+
+    if(!afPerm || !afPinv || !bucketLists || !FrontDataPulled
+       || !eventFrontDataReady || !eventFrontDataPulled)
+    {
+        FREE_EVERYTHING ;
+        memory_ok = false;
+        return;
+    }
+
+    /* Scheduler memory has all been allocated by this point,
+       or we have exited the constructor. */
+
+    /* Initialize the scheduler and allocate memory for doubly-linked
+       bucket lists.
+       If this fails, we have either cuda_ok = false or memory_ok = false. */
+    if(!initialize(gpuMemorySize))
+    {
+        FREE_EVERYTHING;
+        // If cuda_ok is still true then we ran out of memory.
+        // Else we had enough memory but failed the cuda calls.
+        if(cuda_ok) memory_ok = false;
+        return;
+    }
+
+    /* Stats fields */
+    kernelTime = 0.0;
+    numKernelLaunches = 0;
+    gpuFlops = 0;
+
+    #ifdef GPUQRENGINE_RENDER
+    /* Debug fields */
+    TaskNames[0] = "TASKTYPE_Nothing";
+    TaskNames[1] = "TASKTYPE_GenericFactorize";
+    TaskNames[2] = "TASKTYPE_FactorizeVT_3x1";
+    TaskNames[3] = "TASKTYPE_FactorizeVT_2x1";
+    TaskNames[4] = "TASKTYPE_FactorizeVT_1x1";
+    TaskNames[5] = "TASKTYPE_FactorizeVT_3x1e";
+    TaskNames[6] = "TASKTYPE_FactorizeVT_2x1e";
+    TaskNames[7] = "TASKTYPE_FactorizeVT_1x1e";
+    TaskNames[8] = "TASKTYPE_FactorizeVT_3x1w";
+    TaskNames[9] = "TASKTYPE_GenericApply";
+    TaskNames[10] = "TASKTYPE_Apply3";
+    TaskNames[11] = "TASKTYPE_Apply2";
+    TaskNames[12] = "TASKTYPE_Apply1";
+    TaskNames[13] = "TASKTYPE_GenericApplyFactorize";
+    TaskNames[14] = "TASKTYPE_Apply3_Factorize3";
+    TaskNames[15] = "TASKTYPE_Apply3_Factorize2";
+    TaskNames[16] = "TASKTYPE_Apply2_Factorize3";
+    TaskNames[17] = "TASKTYPE_Apply2_Factorize2";
+    TaskNames[18] = "TASKTYPE_Apply2_Factorize1";
+    TaskNames[19] = "TASKTYPE_SAssembly";
+    TaskNames[20] = "TASKTYPE_PackAssembly";
+
+    StateNames[0] = "ALLOCATE_WAIT";
+    StateNames[1] = "ASSEMBLE_S";
+    StateNames[2] = "CHILD_WAIT";
+    StateNames[3] = "FACTORIZE";
+    StateNames[4] = "FACTORIZE_COMPLETE";
+    StateNames[5] = "PARENT_WAIT";
+    StateNames[6] = "PUSH_ASSEMBLE";
+    StateNames[7] = "CLEANUP";
+    StateNames[8] = "DONE";
+
+    renderCount = 0;
+    #endif
+}
+
+// -----------------------------------------------------------------------------
+// Scheduler destructor
+// -----------------------------------------------------------------------------
+
+Scheduler::~Scheduler()
+{
+    FREE_EVERYTHING ;
+}
+
+// -----------------------------------------------------------------------------
+// Scheduler::initialize
+// -----------------------------------------------------------------------------
+// Returns true if OK, false if out of memory or cuda initialization failed.
+// -----------------------------------------------------------------------------
+bool Scheduler::initialize
+(
+    size_t gpuMemorySize
+)
+{
+    activeSet = 0;
+    numActiveFronts = 0;
+    minApplyGranularity = SSGPU_MINAPPLYGRANULARITY ;
+
+    for(int pf=0; pf<numFronts; pf++)
+    {
+        /* Extract the front details from the frontListing. */
+        Front *front = &(frontList[pf]);
+        SparseMeta *meta = &(front->sparseMeta);
+        Int f = front->fids;
+        bool isDense = front->isDense();
+        bool pushOnly = front->isPushOnly();
+
+        /* Configure active front inverse permutation. */
+        afPinv[f] = EMPTY;
+
+        /* Configure the bucket list for each front. */
+        BucketList *dlbl = (&bucketLists[f]);
+        dlbl->useFlag = false;
+        if(front->isTooBigForSmallQR())
+        {
+            /* Only allocate and initialize a bucketlist scheduler
+               if we're doing more than a push assembly. */
+            if(!pushOnly)
+            {
+                new (dlbl) BucketList(front, minApplyGranularity);
+                if(!dlbl->memory_ok) return false;
+                dlbl->gpuF = (&frontList[f])->gpuF;
+            }
+        }
+
+        eventFrontDataReady[f] = NULL;
+        eventFrontDataPulled[f] = NULL;
+        FrontDataPulled[f] = false;
+
+        /* If the front is dense, activate it immediately. */
+        if(isDense)
+        {
+            /* Activate the front for factorization. */
+            activateFront(f);
+            initializeBucketList(f);
+        }
+        /* Else the front is sparse: */
+        else
+        {
+            /* If the front has no children: */
+            if(meta->nc == 0)
+            {
+                /* Activate the front. */
+                activateFront(f);
+
+                /* Initialize the bucket list for front f.
+                   If we're only doing a push, bucketLists[f] will be NULL,
+                   and this function does nothing. */
+                initializeBucketList(f);
+            }
+        }
+    }
+
+    // determine the size of the work queue
+    maxQueueSize = (Int) ssgpu_maxQueueSize (gpuMemorySize) ;
+
+    for(int q=0; q<2; q++)
+    {
+        // malloc on both CPU (pagelocked) and GPU
+        workQueues[q] = Workspace::allocate (maxQueueSize,  // CPU and GPU
+            sizeof(TaskDescriptor), false, true, true, true) ;
+        if(!workQueues[q]) return false;
+        numTasks[q] = 0;
+    }
+
+    cuda_ok = cuda_ok && (cudaSuccess == cudaStreamCreate(&kernelStreams[0]));
+    cuda_ok = cuda_ok && (cudaSuccess == cudaStreamCreate(&kernelStreams[1]));
+    cuda_ok = cuda_ok && (cudaSuccess == cudaStreamCreate(&memoryStreamH2D));
+    cuda_ok = cuda_ok && (cudaSuccess == cudaStreamCreate(&memoryStreamD2H));
+
+    return cuda_ok;
+}
diff --git a/GPUQREngine/Source/Scheduler/Scheduler_FillWorkQueue.cpp b/GPUQREngine/Source/Scheduler/Scheduler_FillWorkQueue.cpp
new file mode 100644
index 0000000..c9463e0
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/Scheduler_FillWorkQueue.cpp
@@ -0,0 +1,463 @@
+// =============================================================================
+// === GPUQREngine/Source/Scheduler_FillWorkQueue.cpp ==========================
+// =============================================================================
+//
+// This file contains logic to run through the factorization state machine.
+// At each stage, different operations are performed:
+//
+//   - ALLOCATE_WAIT
+//     If a front is in ALLOCATE_WAIT then we are waiting for the memory to be
+//     available on the gpu. This is a holding state and the front has no work
+//     to do at this stage. A front is advanced out of this state by a child
+//     front's PARENT_WAIT postprocessor code.
+//
+//   - ASSEMBLE_S
+//     Fronts in ASSEMBLE_S build S Assembly tasks with a granularity specified
+//     by the number of data movements we can tolerate on the GPU (for now this
+//     value is hardcoded to 4).
+//
+//     If a front has no values, or if it has created all of its S Assembly
+//     tasks then it is advanced to CHILD_WAIT
+//
+//   - CHILD_WAIT
+//     A front in CHILD_WAIT must wait until all of its children's contribution
+//     block data are pushed into it before it may proceed to FACTORIZE.
+//     Fronts are advanced out of CHILD_WAIT by the postprocessor.
+//
+//   - FACTORIZE
+//     Fronts in FACTORIZE either use the BucketList sub scheduler to manage
+//     their factorization or they are small enough to simply use the SmallQR
+//     GPU kernel to complete their factorization.
+//     Once a front has added all of its factorize tasks and the BucketList
+//     scheduler determines that the front has been factorized, the front is
+//     advanced to FACTORIZE_COMPLETE, signalling that the set of tasks is the
+//     last set of tasks to perform before the front is considered factorized.
+//
+//   - FACTORIZE_COMPLETE
+//     Fronts in FACTORIZE_COMPLETE wait for a cuda event remarking that front
+//     data (R factor) is ready to be transfered off of the GPU.
+//     The postprocessor advances fronts out of FACTORIZE_COMPLETE into
+//     PARENT_WAIT (if not staged) or CLEANUP (if staged).
+//
+//   - PARENT_WAIT
+//     Fronts in PARENT_WAIT are waiting for their parent to be allocated in
+//     postprocessing. Postprocessing advances these fronts to PUSH_ASSEMBLE
+//     once the parent is ready for push assembly on the GPU. Alternatively
+//     if the front has no parent, the postprocessor will advance the front to
+//     CLEANUP.
+//
+//   - PUSH_ASSEMBLE
+//     Fronts in PUSH_ASSEMBLE build PackAssemble tasks that move data from
+//     the child's memory space into the parent's memory space on the GPU.
+//     The granularity of these memory moves is dictated by the available
+//     amount of shared memory. Once a front has added all of its PUSH_ASSEMBLE
+//     tasks to the work queue, it is advanced to CLEANUP.
+//
+//   - CLEANUP
+//     Fronts in CLEANUP are managed by the postprocessor. In general, fronts
+//     in CLEANUP are waiting for their corresponding R factors to be transfered
+//     off of the GPU.
+//
+//   - DONE
+//     Fronts in DONE have no more work nor additional state transitions.
+//     When all fronts are in the DONE state then the QREngine's work is done.
+//
+// =============================================================================
+
+#include "GPUQREngine_Scheduler.hpp"
+#include "GPUQREngine_GraphVizHelper.hpp"
+
+
+// -----------------------------------------------------------------------------
+// prototypes for local functions
+// -----------------------------------------------------------------------------
+
+TaskDescriptor buildSAssemblyTask
+(
+    Front *front,
+    int pstart,
+    int pend
+);
+
+TaskDescriptor buildPackAssemblyTask
+(
+    Front *front,
+    int cistart,
+    int ciend,
+    int cjstart,
+    int cjend
+);
+
+TaskDescriptor buildSmallQRTask
+(
+    Front *front
+);
+
+// -----------------------------------------------------------------------------
+// Scheduler::fillWorkQueue
+// -----------------------------------------------------------------------------
+
+void Scheduler::fillWorkQueue
+(
+    void
+)
+{
+    /* Get the queue that we want to fill. */
+    TaskDescriptor *queue = (TaskDescriptor*) workQueues[activeSet]->cpu();
+
+    Int taskIndex = 0;
+    bool queueFull = (taskIndex == maxQueueSize);
+    for(Int p=0; p<numActiveFronts && !queueFull; p++)
+    {
+        /* Get the front from the active fronts permutation. */
+        Int f = afPerm[p];
+
+        /* Fill the queue with tasks from f. */
+        fillTasks(f, queue, &taskIndex);
+
+        /* See if the queue is full. */
+        queueFull = (taskIndex == maxQueueSize);
+    }
+
+    /* Save the number of tasks & bundles in this run. */
+    numTasks[activeSet] = taskIndex;
+
+#if 0
+#define MORE_DETAIL
+    /* Debug prints */
+    if(numTasks[activeSet] > 0)
+    {
+//    printf("numTasks[%d] = %ld\n", activeSet, taskIndex);
+#ifdef MORE_DETAIL
+        for(Int t=0; t<numTasks[activeSet]; t++)
+        {
+            bool valid = false;
+            for(Int p=0; p<numActiveFronts && !valid; p++)
+            {
+                Int f = afPerm[p];
+                Front *front = (&frontList[f]);
+                valid = (front->gpuF == queue[t].F && front->printMe);
+            }
+            if(!valid) continue;
+
+            printf("Task %ld: \"%s\" JT0 %d JT1 %d JT2 %d JT3 %d\n",
+              t, TaskNames[queue[t].Type],
+              queue[t].extra[4], queue[t].extra[5], queue[t].extra[6],
+              queue[t].extra[7]
+            );
+            printf("      : dim %d %d\n", queue[t].fm, queue[t].fn);
+            printf("      : rowTiles %d %d %d %d\n",
+              queue[t].extra[0], queue[t].extra[1], queue[t].extra[2],
+              queue[t].extra[3]
+            );
+            printf("      : VT[0] %ld\n", queue[t].AuxAddress[0]);
+            printf("      : VT[1] %ld\n", queue[t].AuxAddress[1]);
+            printf("      : AA[2] %ld\n", queue[t].AuxAddress[2]);
+            printf("      : AA[3] %ld\n", queue[t].AuxAddress[3]);
+        }
+#undef MORE_DETAIL
+    }
+#endif
+    else
+    {
+    //    printf("  R factors are in flight from GPU.\n");
+    }
+#endif
+}
+
+// -----------------------------------------------------------------------------
+// Scheduler::fillTasks
+// -----------------------------------------------------------------------------
+
+void Scheduler::fillTasks
+(
+    Int f,                      // INPUT: Current front
+    TaskDescriptor *queue,      // INPUT: CPU Task entries
+    Int *queueIndex             // IN/OUT: The index of the current entry
+)
+{
+    Front *front = (&frontList[f]);
+    SparseMeta *sparseMeta = &(front->sparseMeta);
+    bool isDense = front->isDense();
+
+    /* Maintain state transitions through the FSM. */
+    FrontState state = front->state;
+    FrontState nextState = state;
+
+    /* Copy-in the currentIndex. */
+    Int qindex = *queueIndex;
+
+    /* Begin the finite state machine switch statement: */
+    switch(state)
+    {
+        /* There's nothing to do if you're waiting to be allocated. */
+        case ALLOCATE_WAIT:
+            break;
+
+        /* ASSEMBLE_S assumes that Scount > 0.
+         * For fronts with no rows of S, the allocateFront member function
+         * bypasses this state by setting the state to CHILD_WAIT. */
+        case ASSEMBLE_S:
+        {
+            /* If we got here, we MUST be sparse. */
+            // assert(!isDense);
+
+            /* If we don't have any S entries, advance to the next state. */
+            if(sparseMeta->Scount == 0)
+            {
+                nextState = CHILD_WAIT;
+                break;
+            }
+
+            /* Unpack S assembly members. */
+            int lastSIndex = sparseMeta->lastSIndex;
+
+            /* Determine the iteration bounds for this task. */
+            int movesPerThread = 4;
+            int threadCount = NUMTHREADS;
+            int Scount = sparseMeta->Scount;
+
+            int pstart = lastSIndex;
+            int pend = MIN(pstart + movesPerThread*threadCount, Scount);
+            while(pstart != pend)
+            {
+                /* Build the S Assembly task. */
+                queue[qindex++] = buildSAssemblyTask(front, pstart, pend);
+
+                /* Save-through the lastSIndex then update pend */
+                pstart = sparseMeta->lastSIndex = pend;
+                pend = MIN(pstart + movesPerThread*threadCount, Scount);
+
+                // If we just build the last task we can do in this run, break.
+                if(qindex == maxQueueSize) break;
+            }
+
+            // If we finished building all of the S Assembly tasks, move to
+            // child wait.
+            if(pstart == pend) nextState = CHILD_WAIT;
+
+            break;
+        }
+
+        // We cannot begin the factorization until all the children are pushed
+        // into the current front.  Postprocessing handles this.
+        case CHILD_WAIT:
+            // assert(!isDense);
+            break;
+
+        case FACTORIZE:
+        {
+            /* If we have to schedule the fronts via the scheduler: */
+            BucketList *Buckets = (&bucketLists[f]);
+            if(Buckets->useFlag)
+            {
+                /* Only invoke the bucket scheduler if we have enough space in
+                   the queue for the tasks it may spawn. The number of tasks
+                   that might be spawned by a FillWorkQueue is bounded by the
+                   number of rowTiles * (colTiles / ApplyGranularity) */
+                Int numRowTiles = Buckets->numRowTiles;
+                Int numColTiles = Buckets->numColTiles;
+                Int applyGranularity = Buckets->ApplyGranularity;
+                Int maxNumTasks = numRowTiles * numColTiles / applyGranularity;
+                if(maxNumTasks < (maxQueueSize - qindex))
+                {
+                    /* Advance, Grow, and Create fresh bundles. */
+                    Buckets->AdvanceBundles();
+                    #ifdef GPUQRENGINE_PIPELINING
+                    Buckets->GrowBundles();
+                    #endif
+                    Buckets->CreateBundles();
+                    Buckets->FillWorkQueue(queue, &qindex);
+//                  #ifdef GPUQRENGINE_RENDER
+//                  // for development, debuging, to visualize the buckets
+//                  GPUQREngine_RenderBuckets(Buckets);
+//                  #endif
+                    Buckets->PostProcess();
+                }
+
+                // If this was the last batch of factorize tasks,
+                // remark that we're done.
+                if(Buckets->IsDone()) nextState = FACTORIZE_COMPLETE;
+            }
+            /* Else this is a front that can be handled by SmallQR: */
+            else
+            {
+                queue[qindex++] = buildSmallQRTask(front);
+                nextState = FACTORIZE_COMPLETE;
+            }
+
+            break;
+        }
+
+        // Postprocessing records the eventFrontDataReady event and advances to
+        // PARENT_WAIT.
+        case FACTORIZE_COMPLETE:
+            break;
+
+        /* Wait for the parent to be allocated.
+         * Postprocessing will advance this to PUSH_ASSEMBLE. */
+        case PARENT_WAIT: break;
+
+        case PUSH_ASSEMBLE:
+        {
+            bool iterDone = false;
+            while(!iterDone)
+            {
+                /* Compute the iteration bounds for the task. */
+                Int cm = sparseMeta->cm;
+                Int cn = sparseMeta->cn;
+                int cistart = sparseMeta->lastCiStart;
+                int cjstart = sparseMeta->lastCjStart;
+                int ciend = MIN(cistart+PACKASSEMBLY_SHMEM_MAPINTS, cm);
+                int cjend = MIN(cjstart+PACKASSEMBLY_SHMEM_MAPINTS, cn);
+
+                /* Build the pack assembly task */
+                sparseMeta->gpuP = (&frontList[front->pids])->gpuF;
+                queue[qindex++] = buildPackAssemblyTask(front, cistart,
+                    ciend, cjstart, cjend);
+
+                /* Encode the iteration pattern of (left-right, top-bottom). */
+                bool endOfRow = (cjend == cn);
+                bool moreRows = (ciend != cm);
+                iterDone = (endOfRow && !moreRows);
+                if(!endOfRow)
+                {
+                    // This is a rare occurence.  It is triggered by only a
+                    // handful of matrices.  In particular, SPQR/Tcov triggers
+                    // it with the SPQR/Matrix/Groebner_id2003_aug.mtx, when
+                    // using METIS with the SPQR/Demo/qrdemo_gpu program.
+                    cjstart = cjend;
+                    // cistart = cistart; // no change to row
+                }
+                else if(endOfRow && moreRows)
+                {
+                    // This is also rare.  It is trigged by the Franz6 matrix,
+                    // augmented by identity, when using METIS with the
+                    // SPQR/Demo/qrdemo_gpu program.
+                    cjstart = 0;
+                    cistart = ciend;
+                }
+                else
+                {
+                    // assert(iterDone);
+                    // assert(cjend == cn);
+                    // assert(ciend == cm);
+                }
+
+                /* Save factorization state. */
+                sparseMeta->lastCiStart = cistart;
+                sparseMeta->lastCjStart = cjstart;
+
+                // If we just built the last task we can do in this run, break.
+                if(qindex == maxQueueSize) break;
+            }
+
+            // If we've built all of the packAssembly tasks, advance to CLEANUP.
+            if(iterDone) nextState = CLEANUP;
+            break;
+        }
+
+        /* Post-processing advances CLEANUP to DONE. */
+        case CLEANUP: break;
+
+        /* At this point, the data for the front can be freed.
+         * When all fronts are freed, the factorization is complete. */
+        case DONE:
+            break;
+    }
+
+// #ifdef GPUQRENGINE_RENDER
+#if 0
+    if (f == 40) // (front->printMe)
+    {
+        printf("[FillWorkQueue] %g : %d -> %d\n", (double) f,
+            state, nextState) ;
+            // StateNames[state], StateNames[nextState]);
+        debugDumpFront(front);
+    }
+#endif
+
+    /* Save the factorization state. */
+    front->state = nextState;
+
+    /* Copy-out the indexes. */
+    *queueIndex = qindex;
+}
+
+// -----------------------------------------------------------------------------
+// buildSAssemblyTask
+// -----------------------------------------------------------------------------
+
+TaskDescriptor buildSAssemblyTask
+(
+    Front *front,
+    int pstart,
+    int pend
+)
+{
+    SparseMeta *meta = &(front->sparseMeta);
+
+    TaskDescriptor returner;
+    returner.Type = TASKTYPE_SAssembly;
+    returner.F = front->gpuF;
+    returner.AuxAddress[0] = (double*) meta->gpuS;
+    returner.fm = front->fm;
+    returner.fn = front->fn;
+    returner.extra[0] = meta->Scount;
+    returner.extra[1] = pstart;
+    returner.extra[2] = pend;
+    return returner;
+}
+
+// -----------------------------------------------------------------------------
+// buildPackAssemblyTask
+// -----------------------------------------------------------------------------
+
+TaskDescriptor buildPackAssemblyTask
+(
+    Front *front,
+    int cistart,
+    int ciend,
+    int cjstart,
+    int cjend
+)
+{
+    SparseMeta *meta = &(front->sparseMeta);
+
+    TaskDescriptor returner;
+    returner.Type = TASKTYPE_PackAssembly;
+    returner.fm = front->fm;
+    returner.fn = front->fn;
+    returner.F = front->gpuF;
+    returner.AuxAddress[0] = meta->gpuC;
+    returner.AuxAddress[1] = meta->gpuP;
+    returner.AuxAddress[2] = (double*) meta->gpuRjmap;
+    returner.AuxAddress[3] = (double*) meta->gpuRimap;
+    returner.extra[0] = meta->pn;
+    returner.extra[1] = meta->cm;
+    returner.extra[2] = meta->cn;
+    returner.extra[3] = (ciend-cistart) * (cjend-cjstart);
+        // cTileSize, at most 1024x1024
+    returner.extra[4] = cistart;
+    returner.extra[5] = ciend;
+    returner.extra[6] = cjstart;
+    returner.extra[7] = cjend;
+    return returner;
+}
+
+// -----------------------------------------------------------------------------
+// buildSmallQRTask
+// -----------------------------------------------------------------------------
+
+TaskDescriptor buildSmallQRTask
+(
+    Front *front
+)
+{
+    TaskDescriptor returner;
+    returner.Type = TASKTYPE_FactorizeVT_3x1w;
+    returner.F = front->gpuF;
+    returner.fm = (int) front->fm;
+    returner.fn = (int) front->fn;
+    return returner;
+}
diff --git a/GPUQREngine/Source/Scheduler/Scheduler_Front.cpp b/GPUQREngine/Source/Scheduler/Scheduler_Front.cpp
new file mode 100644
index 0000000..9acf54d
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/Scheduler_Front.cpp
@@ -0,0 +1,209 @@
+// =============================================================================
+// === GPUQREngine/Source/Scheduler_Front.cpp ==================================
+// =============================================================================
+//
+// This file contains code to manage fronts within the scheduler.
+//
+// The following functions are implemented:
+//
+//  - activateFront
+//    This function adds the front to the permutation of active fronts,
+//    configures the inverse permutation for O(1) lookups, and sets the
+//    initial factorization state of the front.
+//
+//  - pullFrontData
+//    This function coordinates the asynchronous pull of the R factor off of
+//    the GPU as soon as it is available. This function uses the cuda events
+//    and streams model
+//
+//  - finishFront
+//    This function is the inverse of activateFront. It removes the front from
+//    the list of active fronts. The call is idempotent and coordinates with
+//    the cuda events and streams responsible for pulling the R factor in order
+//    to not accidentally free a front whose R factor is still in transit.
+//
+// =============================================================================
+
+#include "GPUQREngine_Scheduler.hpp"
+
+
+// -----------------------------------------------------------------------------
+// Scheduler::activateFront
+// -----------------------------------------------------------------------------
+
+void Scheduler::activateFront
+(
+    Int f                                          // The front id to manipulate
+)
+{
+    /* If the front has already been activated, exit early. */
+    if(afPinv[f] != EMPTY) return;
+
+    Front *front = (&frontList[f]);
+
+    /* Add this front to the list of active fronts. */
+    afPerm[numActiveFronts] = f;
+    afPinv[f] = numActiveFronts;
+    numActiveFronts++;
+
+    /* If the front is dense then there are no rows of S to assemble. */
+    if(front->isDense())
+    {
+        front->state = FACTORIZE ;
+    }
+    /* Else the front is sparse: */
+    else
+    {
+        /* If we're only doing a push assembly, jump to parent wait. */
+        if(front->sparseMeta.pushOnly)
+        {
+            front->state = PARENT_WAIT;
+        }
+        /* Else we are doing a full factorization of this front; assemble S. */
+        else
+        {
+            front->state = ASSEMBLE_S;
+        }
+    }
+}
+
+// -----------------------------------------------------------------------------
+// Scheduler::pullFrontData
+// -----------------------------------------------------------------------------
+
+bool Scheduler::pullFrontData
+(
+    Int f                                          // The front id to manipulate
+)
+{
+    /* Grab the front descriptor. */
+    Front *front = (&frontList[f]);
+
+    /* If we're only doing a push assembly then there's nothing to pull. */
+    if(front->isPushOnly()) return true;
+
+    /* If we already pulled the R factor, return early. */
+    if(FrontDataPulled[f]) return true;
+
+    /* If the R factor isn't actually ready yet, return false.
+     * This can happen if the kernel responsible for finishing the factorization
+     * is running while we're trying to execute this subroutine. */
+    // assert(eventFrontDataReady[f] != NULL);
+    if(cudaEventQuery(eventFrontDataReady[f]) != cudaSuccess){ return false; }
+    cudaEventDestroy(eventFrontDataReady[f]);
+
+    /* Use an event to signal when the R factor is off the GPU. */
+    cudaEventCreate(&eventFrontDataPulled[f]);
+
+    /* Determine how many values to pull back from the GPU: */
+
+    /* We always pull R. */
+    Int numValuesToPull = front->getNumRValues();
+
+    /* If we're doing a sparse factorization and this front is staged,
+       we also need to pull the contribution block rows. */
+    if(front->isStaged())
+    {
+        SparseMeta *meta = &(front->sparseMeta);
+        numValuesToPull += meta->cm * front->fn;
+    }
+
+    /* Surgically transfer the data across the D2H stream. */
+    Workspace wsR = Workspace(numValuesToPull, sizeof(double));
+    wsR.assign(front->cpuR, front->gpuF);
+    wsR.transfer(cudaMemcpyDeviceToHost, false, memoryStreamD2H);
+    wsR.assign(NULL, NULL);
+
+    /* Record the event to signal when R is off the GPU. */
+    cudaEventRecord(eventFrontDataPulled[f]);
+
+    /* Save and return that we've initiated the R factor pull. */
+    return (FrontDataPulled[f] = true);
+}
+
+// -----------------------------------------------------------------------------
+// Scheduler::finishFront
+// -----------------------------------------------------------------------------
+
+bool Scheduler::finishFront
+(
+    Int f                                          // The front id to manipulate
+)
+{
+    /* If we've already freed the front, return early. */
+    if(afPinv[f] == EMPTY) return true;
+
+    Front *front = (&frontList[f]);
+
+    /* If we're doing more than a push, we need to get the data off the GPU. */
+    if(!front->isPushOnly())
+    {
+        /* Non-blocking guard to make sure front data is off the GPU. */
+        if(cudaEventQuery(eventFrontDataPulled[f]) != cudaSuccess)
+        {
+            return false;
+        }
+        cudaEventDestroy(eventFrontDataPulled[f]);
+    }
+
+    /* Remove the front from the active fronts. */
+    numActiveFronts--;
+    if(numActiveFronts > 0)
+    {
+        /* Replace the active front slot with the last front in the list. */
+        Int replacer = afPerm[numActiveFronts];
+        Int position = afPinv[f];
+        afPerm[position] = replacer;
+        afPinv[replacer] = position;
+    }
+    afPinv[f] = EMPTY;
+
+    /* If we got through this method, we have successfully freed the front. */
+    return true;
+}
+
+// -----------------------------------------------------------------------------
+// debugDumpFront
+// -----------------------------------------------------------------------------
+
+#if 1
+void Scheduler::debugDumpFront(Front *front)
+{
+    Workspace *wsFront =
+        Workspace::allocate (front->getNumFrontValues(),     // CPU, DEBUG ONLY
+        sizeof(double), false, true, false, false);
+    double *F = CPU_REFERENCE(wsFront, double*);
+    Int fm = front->fm;
+    Int fn = front->fn;
+    wsFront->assign(wsFront->cpu(), front->gpuF);
+    wsFront->transfer(cudaMemcpyDeviceToHost);
+    printf("--- %g ---\n", (double) (front->fidg));
+
+//  for(Int i=0; i<fm; i++)
+//  {
+//      for(Int j=0; j<fn; j++)
+//      {
+//          printf("%16.8e ", F[i*fn+j]);
+//      }
+//      printf("\n");
+//  }
+
+    for (Int j = 0 ; j < fn ; j++)
+    {
+        printf ("   --- column %ld of %ld\n", j, fn) ;
+        for (Int i = 0 ; i < fm ; i++)
+        {
+            if (i == j) printf ("      [ diag:     ") ;
+            else        printf ("      row %4ld    ", i) ;
+            printf (" %10.4g", F [fn*i+j]) ;
+            if (i == j) printf (" ]\n") ;
+            else        printf ("\n") ;
+        }
+        printf ("\n") ;
+    }
+
+    printf("----------\n", front->fidg);
+    wsFront->assign(wsFront->cpu(), NULL);
+    wsFront = Workspace::destroy(wsFront);
+}
+#endif
diff --git a/GPUQREngine/Source/Scheduler/Scheduler_LaunchKernel.cpp b/GPUQREngine/Source/Scheduler/Scheduler_LaunchKernel.cpp
new file mode 100644
index 0000000..566ecca
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/Scheduler_LaunchKernel.cpp
@@ -0,0 +1,63 @@
+// =============================================================================
+// === GPUQREngine/Source/Scheduler_LaunchKernel.cpp ===========================
+// =============================================================================
+//
+// This file wraps logic to launch the GPU kernel on alternating kernel streams
+// coordinated by the Scheduler. The work lists also alternate to facilitate
+// overlapping communication with computation. We use the CUDA events and
+// streams model througout the Scheduler to coordinate asynchronous launches.
+//
+// =============================================================================
+
+#include "GPUQREngine_Scheduler.hpp"
+#include "GPUQREngine_Internal.hpp"
+#include "GPUQREngine_Timing.hpp"
+
+
+void Scheduler::launchKernel
+(
+    void
+)
+{
+    /* Get the gpu pointer for the work queue. */
+    Workspace *wsWorkQueue = workQueues[activeSet];
+    TaskDescriptor *gpuWorkQueue = GPU_REFERENCE(wsWorkQueue, TaskDescriptor*);
+
+    /* Get the kernel streams */
+    cudaStream_t thisKernel = kernelStreams[activeSet];
+    cudaStream_t lastKernel = kernelStreams[activeSet^1];
+
+    /* Wait for the last kernel and all H2D memory transfers to finish. */
+    cudaStreamSynchronize(lastKernel);
+    cudaStreamSynchronize(memoryStreamH2D);
+
+    /* Launch the kernel if we have valid tasks to do. */
+    if(numTasks[activeSet] > 0)
+    {
+        /* Keep track of the number of launches. */
+        numKernelLaunches++;
+
+#ifdef TIMING
+        float totalTime = 0.0;
+        TIMER_INIT();
+        TIMER_START();
+#endif
+
+        /* Launch the kernel. */
+        GPUQREngine_UberKernel(thisKernel, gpuWorkQueue, numTasks[activeSet]);
+
+#ifdef FORCE_SYNCHRONIZE
+        cudaDeviceSynchronize();
+        cuda_ok = cuda_ok && (cudaGetLastError() == cudaSuccess);
+#endif
+
+#ifdef TIMING
+        TIMER_STOP(totalTime);
+        TIMER_FINISH();
+        kernelTime += totalTime;
+#endif
+    }
+
+    /* Clear the number of tasks. */
+    numTasks[activeSet] = 0;
+}
diff --git a/GPUQREngine/Source/Scheduler/Scheduler_PostProcess.cpp b/GPUQREngine/Source/Scheduler/Scheduler_PostProcess.cpp
new file mode 100644
index 0000000..3224b23
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/Scheduler_PostProcess.cpp
@@ -0,0 +1,241 @@
+// =============================================================================
+// === GPUQREngine/Source/Scheduler_PostProcess.cpp ============================
+// =============================================================================
+//
+// This file contains logic to run through the factorization state machine.
+// At each stage, different operations are performed:
+//
+//   - ALLOCATE_WAIT
+//     If a front is in ALLOCATE_WAIT then we are waiting for the memory to be
+//     available on the gpu. This is a holding state and the front has no work
+//     to do at this stage. A front is advanced out of this state by a child
+//     front's PARENT_WAIT postprocessor code.
+//
+//   - ASSEMBLE_S
+//     Fronts in ASSEMBLE_S build S Assembly tasks with a granularity specified
+//     by the number of data movements we can tolerate on the GPU (for now this
+//     value is hardcoded to 4). A front remains in ASSEMBLE_S during
+//     postprocessing only if the FillWorkQueue code was unable to add all of
+//     the relevant tasks to the GPU work list.
+//
+//   - CHILD_WAIT
+//     The postprocessor checks the number of pending children. When all the
+//     children have pushed their data into the current front,
+//     the postprocessor advances the front into the FACTORIZE state.
+//
+//   - FACTORIZE
+//     Fronts in FACTORIZE are continuing their factorization as usual.
+//     It is very possible that factorization has proceeded to the point where
+//     the R factor is ready before the front has finished being factorized.
+//     When this happens, the postprocessor kicks off an early async R transfer.
+//
+//   - FACTORIZE_COMPLETE
+//     Fronts in FACTORIZE_COMPLETE initiate an async R transfer. The transfer
+//     is idempotent, such that there is only one pending transfer request in
+//     flight at any time. This allows for an early R pull in FACTORIZE as well
+//     as large R factors to take multiple kernel launches before the transfer
+//     completes. The asynchronous transfer uses the cuda events and streams
+//     model.
+//
+//   - PARENT_WAIT
+//     A front in PARENT_WAIT attempts to continue transfering the R factor
+//     from the GPU to the CPU. Additionally, this code activates the parent
+//     front, moving the parent from ALLOCATE_WAIT to its initial state.
+//
+//   - PUSH_ASSEMBLE
+//     Fronts in PUSH_ASSEMBLE build PackAssemble tasks that move data from
+//     the child's memory space into the parent's memory space on the GPU.
+//     A front only stays in PUSH_ASSEMBLE if the FillWorkQueue code couldn't
+//     add all of the required PackAssembly tasks to the GPU queue.
+//
+//   - CLEANUP
+//     Fronts in CLEANUP wait for their corresponding R factors to be
+//     transfered off of the GPU.
+//
+//   - DONE
+//     Fronts in DONE have no more work nor additional state transitions.
+//     When all fronts are in the DONE state then the QREngine's work is done.
+//
+// =============================================================================
+
+#include "GPUQREngine_Scheduler.hpp"
+
+
+bool Scheduler::postProcess
+(
+    void
+)
+{
+    /* Post-process all active fronts. */
+    for(Int p=0; p<numActiveFronts; p++)
+    {
+        /* Get the front from the "active fronts" permutation. */
+        Int f = afPerm[p];
+
+        Front *front = (&frontList[f]);
+        SparseMeta *meta = &(front->sparseMeta);
+        bool isDense = front->isDense();
+        bool isSparse = front->isSparse();
+        FrontState state = front->state;
+        FrontState nextState = state;
+
+        /* The post-processing we do depends on the state: */
+        switch(state)
+        {
+            /* There's nothing to do if you're waiting to be allocated. */
+            case ALLOCATE_WAIT:
+                break;
+
+            /* The only time we stay in ASSEMBLE_S is if we can't get to
+             * adding the task to the work queue in a particular pass.
+             * This happens when we have a ton of other work to do. */
+            case ASSEMBLE_S: break;
+
+            /* If we're in CHILD_WAIT, see if all of the children are ready. */
+            case CHILD_WAIT:
+            {
+                // assert(isSparse);
+
+                /* If all the children are ready then we can proceed. */
+                int nc = meta->nc;
+                if(nc == 0)
+                {
+                    initializeBucketList(f);
+                    nextState = FACTORIZE;
+                }
+                break;
+            }
+
+            /* If we're in the middle of a factorization: */
+            case FACTORIZE:
+
+//              // IsRReadyEarly experimental feature : pulls R from the GPU
+//              // R is computed but the contribution block is not.  This
+//              // method is under development and not yet available for
+//              // production use.
+//              if(isSparse && (&bucketLists[f])->IsRReadyEarly()) {
+//                  /* If we haven't created the event yet, create it. */
+//                  if(eventFrontDataReady[f] == NULL) {
+//                      // Piggyback the synchronization on the next kernel
+//                      // launch.
+//                      cudaEventCreate(&eventFrontDataReady[f]);
+//                      cudaEventRecord(eventFrontDataReady[f],
+//                      kernelStreams[activeSet^1]); }
+//                  /* We must have created the event on the last kernel
+//                     launch so try to pull R off the GPU. */ else {
+//                     pullFrontData(f); } }
+
+                break;
+
+            // At this point, the R factor is ready to be pulled from the GPU.
+            case FACTORIZE_COMPLETE:
+            {
+                /* If we haven't created the event yet, create it. */
+                if(eventFrontDataReady[f] == NULL)
+                {
+                    // Piggyback the synchronization on the next kernel launch.
+                    cudaEventCreate(&eventFrontDataReady[f]);
+                    cudaEventRecord(eventFrontDataReady[f],
+                        kernelStreams[activeSet^1]);
+                }
+                /* We must have created the event already during factorize,
+                   so instead try to pull R off the GPU. */
+                else
+                {
+                    pullFrontData(f);
+                }
+
+                /* If the front is dense or staged, then we can't assemble
+                   into the parent, so just cleanup. */
+                if(isDense || meta->isStaged)
+                {
+                    nextState = CLEANUP;
+                }
+                /* Else we're sparse and not staged so it means we have memory
+                   to assemble into the parent. */
+                else
+                {
+                    nextState = PARENT_WAIT;
+                }
+                break;
+            }
+
+            /* If we're waiting on the parent to be allocated: */
+            case PARENT_WAIT:
+            {
+                // assert(isSparse);
+
+                /* Make sure we're trying to pull the R factor off the GPU. */
+                pullFrontData(f);
+
+                // If we have a parent, allocate it and proceed to PUSH_ASSEMBLE
+                Int pids = front->pids;
+                if(pids != EMPTY)
+                {
+                    activateFront(pids);
+                    nextState = PUSH_ASSEMBLE;
+                }
+                /* Else the parent is the dummy, so cleanup and move to done. */
+                else
+                {
+                    nextState = CLEANUP;
+                }
+
+                break;
+            }
+
+            /* The only time we stay in PUSH_ASSEMBLE is if we can't get to
+             * adding the task to the work queue in a particular pass.
+             * This happens when we have a ton of other work to do. */
+            case PUSH_ASSEMBLE:
+                // assert(isSparse);
+                break;
+
+            /* If we're in CLEANUP then we need to free the front. */
+            case CLEANUP:
+            {
+                /* If we were able to get the R factor and free the front. */
+                if(pullFrontData(f) && finishFront(f))
+                {
+                    /* Update the parent's child count. */
+                    Int pid = front->pids;
+                    if(pid != EMPTY) (&frontList[pid])->sparseMeta.nc--;
+
+                    /* Move to DONE. */
+                    nextState = DONE;
+
+                    /* Keep track of the # completed. */
+                    numFrontsCompleted++;
+
+                    /* Revisit the same position again since a front was
+                     * swapped to the current location. */
+                    p--;
+                }
+                break;
+            }
+
+            /* This is the done state with nothing to do. */
+            case DONE:
+                break;
+        }
+
+#if 0
+        if(front->printMe)
+        {
+            printf("[PostProcessing] %g : %d -> %d\n", (double) (front->fidg),
+                state, nextState);
+                // StateNames[state], StateNames[nextState]);
+            debugDumpFront(front);
+        }
+#endif
+
+        /* Save the next state back to the frontDescriptor. */
+        front->state = nextState;
+    }
+
+    // printf("%2.2f completed.\n", 100 * (double) numCompleted / (double)
+    // numFronts);
+
+    /* Return whether all the fronts are DONE. */
+    return (numFronts == numFrontsCompleted);
+}
diff --git a/GPUQREngine/Source/Scheduler/Scheduler_Render.cpp b/GPUQREngine/Source/Scheduler/Scheduler_Render.cpp
new file mode 100644
index 0000000..5b1e048
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/Scheduler_Render.cpp
@@ -0,0 +1,96 @@
+// =============================================================================
+// === GPUQREngine/Source/Scheduler_Render.cpp =================================
+// =============================================================================
+// === This code is used only for internal development and debugging ===========
+// =============================================================================
+//
+// This file contains logic to render the current state of the scheduler.
+// It colors each front in the frontal elimination tree according to its
+// factorization state:
+//
+//    ALLOCATE_WAIT:      white
+//    ASSEMBLE_S:         lightblue
+//    CHILD_WAIT:         orange
+//    FACTORIZE:          red
+//    FACTORIZE_COMPLETE: maroon
+//    PARENT_WAIT:        yellow
+//    PUSH_ASSEMBLE:      blue
+//    CLEANUP:            green
+//    DONE:               green
+//
+// =============================================================================
+
+#include "GPUQREngine_Internal.hpp"
+
+#ifdef GPUQRENGINE_RENDER
+
+#include "GPUQREngine_Scheduler.hpp"
+#include <stdio.h>
+#include <string.h>
+
+
+void Scheduler::render
+(
+    void
+)
+{
+    // if(!RENDER_SPARSE_FACTORIZATION) return;
+
+    char filename[64];
+    sprintf(filename, "state_%d.dot", renderCount++);
+    FILE *output = fopen(filename, "w");
+
+    fprintf(output, "digraph G {\n");
+    fprintf(output, "rankdir=BT;");
+    // fprintf(output, "edge [arrowhead=none];\n");
+    // fprintf(output, "node [shape=point,style=filled];\n");
+    fprintf(output, "node [shape=record,style=filled];\n");
+
+    Int fnMax = 0;
+    Int fmMax = 0;
+    for(Int pf=0; pf<numFronts; pf++)
+    {
+        Front *front = (&frontList[pf]);
+        fmMax = MAX(front->fm, fmMax);
+        fnMax = MAX(front->fn, fnMax);
+    }
+    for(Int pf=0; pf<numFronts; pf++)
+    {
+        Front *front = (&frontList[pf]);
+        Int fg = front->fidg;
+
+        char fillcolor[16];
+        switch(front->state)
+        {
+            case ALLOCATE_WAIT:      strcpy(fillcolor,"\"white\""); break;
+            case ASSEMBLE_S:         strcpy(fillcolor,"\"lightblue\""); break;
+            case CHILD_WAIT:         strcpy(fillcolor,"\"orange\""); break;
+            case FACTORIZE:          strcpy(fillcolor,"\"red\""); break;
+            case FACTORIZE_COMPLETE: strcpy(fillcolor,"\"maroon\""); break;
+            case PARENT_WAIT:        strcpy(fillcolor,"\"yellow\""); break;
+            case PUSH_ASSEMBLE:      strcpy(fillcolor,"\"blue\""); break;
+            case CLEANUP:            strcpy(fillcolor,"\"green\""); break;
+            case DONE:               strcpy(fillcolor,"\"green\""); break;
+        }
+
+        double height = MAX(0.10, 2.0 * ((double) front->fm / (double) fmMax));
+        double width = MAX(0.10, 2.0 * ((double) front->fn / (double) fnMax));
+        fprintf(output, "%ld [fillcolor=%s,width=%f,height=%f];\n",
+            fg, fillcolor, width, height);
+    }
+
+    for(Int pf=0; pf<numFronts; pf++)
+    {
+        Front *front = (&frontList[pf]);
+        Int fg = front->fidg;
+        Int pg = front->pidg;
+        if(pg != EMPTY)
+        {
+            fprintf(output, "%ld->%ld;\n", fg, pg);
+        }
+    }
+    fprintf(output, "};\n");
+
+    fclose(output);
+}
+#endif
diff --git a/GPUQREngine/Source/Scheduler/Scheduler_TransferData.cpp b/GPUQREngine/Source/Scheduler/Scheduler_TransferData.cpp
new file mode 100644
index 0000000..5ad8d87
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/Scheduler_TransferData.cpp
@@ -0,0 +1,59 @@
+// =============================================================================
+// === GPUQREngine/Source/Scheduler_TransferData.cpp ===========================
+// =============================================================================
+//
+// This file wraps logic surrounding the asynchronous transfer of data between
+// the host and device. We transfer the workspace "surgically" meaning that
+// the memory actually involved in the transfer is some subset of the full
+// memory space allocated to the base pointer address. This results in less
+// physical memory being transfered in any single transfer operation.
+//
+// We qsort the tasks by approximate amount of time required to perform the
+// flops. We weigh certain tasks more than others in an effort to keep a more
+// uniform distribution of task load on the GPU for each item in the work queue.
+//   compareTaskTime is the comparator.
+//
+// =============================================================================
+
+#include "GPUQREngine_Scheduler.hpp"
+#include "GPUQREngine_TaskDescriptor.hpp"
+
+
+int compareTaskTime (const void * a, const void * b)
+{
+    TaskDescriptor *ta = (TaskDescriptor*) a;
+    TaskDescriptor *tb = (TaskDescriptor*) b;
+
+    Int aFlops = getWeightedFlops(ta);
+    Int bFlops = getWeightedFlops(tb);
+
+    return bFlops - aFlops;
+}
+
+void Scheduler::transferData
+(
+    void
+)
+{
+    /* Get the workspace */
+    Workspace *wsWorkQueue = workQueues[activeSet];
+    TaskDescriptor *queue = (TaskDescriptor*) wsWorkQueue->cpu();
+
+    /* Accumulate the flops in this kernel launch. */
+    for(Int t=0; t<numTasks[activeSet]; t++)
+    {
+        TaskDescriptor *task = &(queue[t]);
+        Int flops = getFlops(task);
+        gpuFlops += flops;
+    }
+
+    /* Sort the tasks in decreasing order by task time. */
+    qsort (wsWorkQueue->cpu(), numTasks[activeSet], sizeof(TaskDescriptor),
+        compareTaskTime);
+
+    /* Surgically transfer the queue data from the scheduler onto the GPU: */
+    Workspace wsQueueSurgical(numTasks[activeSet], sizeof(TaskDescriptor));
+    wsQueueSurgical.assign(wsWorkQueue->cpu(), wsWorkQueue->gpu());
+    wsQueueSurgical.transfer(cudaMemcpyHostToDevice, false, memoryStreamH2D);
+    wsQueueSurgical.assign(NULL, NULL);
+}
diff --git a/GPUQREngine/Source/Scheduler/ssgpu_maxQueueSize.cpp b/GPUQREngine/Source/Scheduler/ssgpu_maxQueueSize.cpp
new file mode 100644
index 0000000..353dc8a
--- /dev/null
+++ b/GPUQREngine/Source/Scheduler/ssgpu_maxQueueSize.cpp
@@ -0,0 +1,28 @@
+
+#include "GPUQREngine_Scheduler.hpp"
+
+#define MIN_QUEUE_SIZE 50000
+
+size_t ssgpu_maxQueueSize       // return size of scheduler queue
+(
+    size_t gpuMemorySize        // size of GPU memory, in bytes
+)
+{
+    size_t maxQueueSize ;
+    size_t tileSizeBytes = TILESIZE * TILESIZE * sizeof(double);
+    if (gpuMemorySize <= 1)
+    {
+        // GPU memory size not specified, use minimal amount.
+        // This case is for testing with small matrices.
+        maxQueueSize = MIN_QUEUE_SIZE ;
+    }
+    else
+    {
+        maxQueueSize = 2 * (gpuMemorySize/tileSizeBytes) / SSGPU_MINAPPLYGRANULARITY ;
+    }
+
+    // ensure the queue size is reasonably large enough
+    maxQueueSize = MAX (maxQueueSize, MIN_QUEUE_SIZE) ;
+    return (maxQueueSize) ;
+}
+
diff --git a/GPUQREngine/Source/TaskDescriptor/TaskDescriptor_flops.cpp b/GPUQREngine/Source/TaskDescriptor/TaskDescriptor_flops.cpp
new file mode 100644
index 0000000..404ca39
--- /dev/null
+++ b/GPUQREngine/Source/TaskDescriptor/TaskDescriptor_flops.cpp
@@ -0,0 +1,140 @@
+// =============================================================================
+// === GPUQREngine/Source/TaskDescriptor_flops.cpp =============================
+// =============================================================================
+//
+// This file contains functions that are responsible for computing the actual
+// flops performed by various GPU tasks in the GPUQREngine.
+//
+// =============================================================================
+
+#include "GPUQREngine_Common.hpp"
+#include "GPUQREngine_TaskDescriptor.hpp"
+
+
+// -----------------------------------------------------------------------------
+// flopsFactorizeVT
+// -----------------------------------------------------------------------------
+
+Int flopsFactorizeVT(int numTiles)
+{
+    Int m = TILESIZE * numTiles;
+    Int n = TILESIZE;
+    Int v = TILESIZE;
+    return 2 * (m-1)                       +
+           v * (6 + 4*m*n + 5*n + 2*m)     +
+           ((-4*n -2*m -5) * (v*(v+1)/2))  +
+           3 * (v*(v+1)*(2*v+1)/6)         +
+           (- 2*(m-v+1)*(n-v) - 2*(m-v-1)) ;
+}
+
+// -----------------------------------------------------------------------------
+// flopsFactorize
+// -----------------------------------------------------------------------------
+
+Int flopsFactorize(int m, int n)
+{
+    Int v = MIN(m, n);
+    return 2 * (m-1)                    +
+           v * (6 + 4*m*n + 5*n + 2*m)  +
+           ((-4*n -2*m -4) * v*(v+1)/2) +
+           2 * v*(v+1)*(2*v+1)/6        +
+           (- 2*(m-v+1)*(n-v) - 2*(m-v-1)) ;
+}
+
+// -----------------------------------------------------------------------------
+// flopsApply
+// -----------------------------------------------------------------------------
+
+Int flopsApply(int numTiles, int n)
+{
+    Int m = TILESIZE * numTiles;
+    Int k = TILESIZE;
+    return k*n*(4*m - k + 3);
+}
+
+// -----------------------------------------------------------------------------
+// flopsApplyFactorize
+// -----------------------------------------------------------------------------
+
+#ifdef GPUQRENGINE_PIPELINING
+Int flopsApplyFactorize(int applyTiles, int factorizeTiles)
+{
+    return flopsApply(applyTiles, TILESIZE) + flopsFactorizeVT(factorizeTiles);
+}
+#endif
+
+// -----------------------------------------------------------------------------
+// getFlops
+// -----------------------------------------------------------------------------
+
+Int getFlops(TaskDescriptor *task)
+{
+    switch(task->Type)
+    {
+        case TASKTYPE_FactorizeVT_3x1:
+        case TASKTYPE_FactorizeVT_3x1e:  return flopsFactorizeVT(3);
+        case TASKTYPE_FactorizeVT_2x1:
+        case TASKTYPE_FactorizeVT_2x1e:  return flopsFactorizeVT(2);
+        case TASKTYPE_FactorizeVT_1x1:
+        case TASKTYPE_FactorizeVT_1x1e:  return flopsFactorizeVT(1);
+
+        case TASKTYPE_FactorizeVT_3x1w:
+            return flopsFactorize(task->fm, task->fn);
+
+        case TASKTYPE_Apply3:
+            return flopsApply(3, task->extra[6] - task->extra[5]);
+
+        case TASKTYPE_Apply2:
+            return flopsApply(2, task->extra[6] - task->extra[5]);
+
+        case TASKTYPE_Apply1:
+            return flopsApply(1, task->extra[6] - task->extra[5]);
+
+        #ifdef GPUQRENGINE_PIPELINING
+        case TASKTYPE_Apply3_Factorize3: return flopsApplyFactorize(3, 3);
+        case TASKTYPE_Apply3_Factorize2: return flopsApplyFactorize(3, 2);
+        case TASKTYPE_Apply2_Factorize3: return flopsApplyFactorize(2, 3);
+        case TASKTYPE_Apply2_Factorize2: return flopsApplyFactorize(2, 2);
+        case TASKTYPE_Apply2_Factorize1: return flopsApplyFactorize(2, 1);
+        #endif
+
+        case TASKTYPE_SAssembly:         return 0;
+        case TASKTYPE_PackAssembly:      return 0;
+    }
+}
+
+// -----------------------------------------------------------------------------
+// getWeightedFlops
+// -----------------------------------------------------------------------------
+
+Int getWeightedFlops(TaskDescriptor *task)
+{
+    Int flops = getFlops(task);
+    switch(task->Type)
+    {
+        case TASKTYPE_FactorizeVT_3x1:
+        case TASKTYPE_FactorizeVT_3x1e:  flops *= 1; break;
+        case TASKTYPE_FactorizeVT_2x1:
+        case TASKTYPE_FactorizeVT_2x1e:  flops *= 1; break;
+        case TASKTYPE_FactorizeVT_1x1:
+        case TASKTYPE_FactorizeVT_1x1e:  flops *= 1; break;
+
+        case TASKTYPE_FactorizeVT_3x1w:  flops *= 1; break;
+
+        case TASKTYPE_Apply3:            flops *= 0.5; break;
+        case TASKTYPE_Apply2:            flops *= 0.5; break;
+        case TASKTYPE_Apply1:            flops *= 0.5; break;
+
+        #ifdef GPUQRENGINE_PIPELINING
+        case TASKTYPE_Apply3_Factorize3: flops *= 10; break;
+        case TASKTYPE_Apply3_Factorize2: flops *= 10; break;
+        case TASKTYPE_Apply2_Factorize3: flops *= 10; break;
+        case TASKTYPE_Apply2_Factorize2: flops *= 10; break;
+        case TASKTYPE_Apply2_Factorize1: flops *= 10; break;
+        #endif
+
+        case TASKTYPE_SAssembly:         break;
+        case TASKTYPE_PackAssembly:      break;
+    }
+    return flops;
+}
diff --git a/KLU/Demo/Makefile b/KLU/Demo/Makefile
index 734be48..0bf97af 100644
--- a/KLU/Demo/Makefile
+++ b/KLU/Demo/Makefile
@@ -3,17 +3,23 @@
 
 default: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-LIB = ../Lib/libklu.a  ../../BTF/Lib/libbtf.a \
-	../../AMD/Lib/libamd.a ../../COLAMD/Lib/libcolamd.a
+CLIB = ../Lib/libklu.a  ../../BTF/Lib/libbtf.a \
+	../../AMD/Lib/libamd.a ../../COLAMD/Lib/libcolamd.a \
+        ../../SuiteSparse_config/libsuitesparseconfig.a
 
-CHOLMOD = ../../CHOLMOD/Lib/libcholmod.a
+CHOLMOD_LIB = ../../CHOLMOD/Lib/libcholmod.a
+CHOLMOD = $(CHOLMOD_LIB) $(LAPACK) $(BLAS) $(XERBLA)
 
-I = -I../../UFconfig -I../../AMD/Include -I../../COLAMD/Include \
+ifneq ($(GPU_CONFIG),)
+CHOLMOD += $(CUDART_LIB) $(CUBLAS_LIB) 
+endif
+
+I = -I../../SuiteSparse_config -I../../AMD/Include -I../../COLAMD/Include \
 	-I../../BTF/Include -I../Include -I../../CHOLMOD/Include
 
-all: $(LIB) klu_simple $(CHOLMOD) kludemo kluldemo
+all: $(CLIB) klu_simple $(CHOLMOD_LIB) kludemo kluldemo
 	- ./klu_simple
 	- ./kludemo < ../Matrix/1c.mtx
 	- ./kludemo < ../Matrix/arrowc.mtx
@@ -46,20 +52,24 @@ all: $(LIB) klu_simple $(CHOLMOD) kludemo kluldemo
 #	( cd ../../CCOLAMD ; $(MAKE) )
 #	( cd ../../metis-4.0 ; $(MAKE) )
 
+../../SuiteSparse_config/libsuitesparseconfig.a:
+	( cd ../../SuiteSparse_config ; $(MAKE) )
+
 purge: distclean
 
 distclean: clean
 	- $(RM) kludemo kluldemo klu_simple
+	- $(RM) -r *.dSYM
 
 clean:
 	- $(RM) $(CLEAN)
 
-kludemo: kludemo.c Makefile $(LIB)
-	$(CC) $(CFLAGS) $(I) kludemo.c -o kludemo $(LIB) $(CHOLMOD) -lm
+kludemo: kludemo.c Makefile $(CLIB)
+	$(CC) $(CF) $(I) kludemo.c -o kludemo $(CLIB) $(CHOLMOD) $(LIB)
 
-kluldemo: kludemo.c Makefile $(LIB)
-	$(CC) $(CFLAGS) $(I) kluldemo.c -o kluldemo $(LIB) $(CHOLMOD) -lm
+kluldemo: kludemo.c Makefile $(CLIB)
+	$(CC) $(CF) $(I) kluldemo.c -o kluldemo $(CLIB) $(CHOLMOD) $(LIB)
 
-klu_simple: klu_simple.c Makefile $(LIB)
-	$(CC) $(CFLAGS) $(I) klu_simple.c -o klu_simple $(LIB) -lm
+klu_simple: klu_simple.c Makefile $(CLIB)
+	$(CC) $(CF) $(I) klu_simple.c -o klu_simple $(CLIB) $(LIB)
 	- ./klu_simple
diff --git a/KLU/Demo/klu_simple.c b/KLU/Demo/klu_simple.c
index 72c4379..7530d40 100644
--- a/KLU/Demo/klu_simple.c
+++ b/KLU/Demo/klu_simple.c
@@ -1,4 +1,4 @@
-/* klu_simple: a simple KLU demo */
+/* klu_simple: a simple KLU demo; solution is x = (1,2,3,4,5) */
 
 #include <stdio.h>
 #include "klu.h"
diff --git a/KLU/Demo/klu_simple.out b/KLU/Demo/klu_simple.out
new file mode 100644
index 0000000..3090650
--- /dev/null
+++ b/KLU/Demo/klu_simple.out
@@ -0,0 +1,5 @@
+x [0] = 1
+x [1] = 2
+x [2] = 3
+x [3] = 4
+x [4] = 5
diff --git a/KLU/Demo/kludemo.c b/KLU/Demo/kludemo.c
index 1efa47d..b6b2295 100644
--- a/KLU/Demo/kludemo.c
+++ b/KLU/Demo/kludemo.c
@@ -22,24 +22,24 @@
 static int klu_backslash    /* return 1 if successful, 0 otherwise */
 (
     /* --- input ---- */
-    int n,		/* A is n-by-n */
-    int *Ap,		/* size n+1, column pointers */
-    int *Ai,		/* size nz = Ap [n], row indices */
-    double *Ax,		/* size nz, numerical values */
-    int isreal,		/* nonzero if A is real, 0 otherwise */
-    double *B,		/* size n, right-hand-side */
+    int n,              /* A is n-by-n */
+    int *Ap,            /* size n+1, column pointers */
+    int *Ai,            /* size nz = Ap [n], row indices */
+    double *Ax,         /* size nz, numerical values */
+    int isreal,         /* nonzero if A is real, 0 otherwise */
+    double *B,          /* size n, right-hand-side */
 
     /* --- output ---- */
-    double *X,		/* size n, solution to Ax=b */
-    double *R,		/* size n, residual r = b-A*x */
+    double *X,          /* size n, solution to Ax=b */
+    double *R,          /* size n, residual r = b-A*x */
 
     /* --- scalar output --- */
-    int *lunz,		/* nnz (L+U+F) */
-    double *rnorm,	/* norm (b-A*x,1) / norm (A,1) */
+    int *lunz,          /* nnz (L+U+F) */
+    double *rnorm,      /* norm (b-A*x,1) / norm (A,1) */
 
     /* --- workspace - */
 
-    klu_common *Common	/* default parameters and statistics */
+    klu_common *Common  /* default parameters and statistics */
 )
 {
     double anorm = 0, asum ;
@@ -59,137 +59,137 @@ static int klu_backslash    /* return 1 if successful, 0 otherwise */
     if (isreal)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* factorization */
-	/* ------------------------------------------------------------------ */
-
-	Numeric = klu_factor (Ap, Ai, Ax, Symbolic, Common) ;
-	if (!Numeric)
-	{
-	    klu_free_symbolic (&Symbolic, Common) ;
-	    return (0) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* statistics (not required to solve Ax=b) */
-	/* ------------------------------------------------------------------ */
-
-	klu_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
-	klu_condest (Ap, Ax, Symbolic, Numeric, Common) ;
-	klu_rcond (Symbolic, Numeric, Common) ;
-	klu_flops (Symbolic, Numeric, Common) ;
-	*lunz = Numeric->lnz + Numeric->unz - n + 
-	    ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
-
-	/* ------------------------------------------------------------------ */
-	/* solve Ax=b */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < n ; i++)
-	{
-	    X [i] = B [i] ;
-	}
-	klu_solve (Symbolic, Numeric, n, 1, X, Common) ;
-
-	/* ------------------------------------------------------------------ */
-	/* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < n ; i++)
-	{
-	    R [i] = B [i] ;
-	}
-	for (j = 0 ; j < n ; j++)
-	{
-	    asum = 0 ;
-	    for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	    {
-		/* R (i) -= A (i,j) * X (j) */
-		R [Ai [p]] -= Ax [p] * X [j] ;
-		asum += fabs (Ax [p]) ;
-	    }
-	    anorm = MAX (anorm, asum) ;
-	}
-	*rnorm = 0 ;
-	for (i = 0 ; i < n ; i++)
-	{
-	    *rnorm = MAX (*rnorm, fabs (R [i])) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* free numeric factorization */
-	/* ------------------------------------------------------------------ */
-
-	klu_free_numeric (&Numeric, Common) ;
+        /* ------------------------------------------------------------------ */
+        /* factorization */
+        /* ------------------------------------------------------------------ */
+
+        Numeric = klu_factor (Ap, Ai, Ax, Symbolic, Common) ;
+        if (!Numeric)
+        {
+            klu_free_symbolic (&Symbolic, Common) ;
+            return (0) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* statistics (not required to solve Ax=b) */
+        /* ------------------------------------------------------------------ */
+
+        klu_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
+        klu_condest (Ap, Ax, Symbolic, Numeric, Common) ;
+        klu_rcond (Symbolic, Numeric, Common) ;
+        klu_flops (Symbolic, Numeric, Common) ;
+        *lunz = Numeric->lnz + Numeric->unz - n + 
+            ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
+
+        /* ------------------------------------------------------------------ */
+        /* solve Ax=b */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < n ; i++)
+        {
+            X [i] = B [i] ;
+        }
+        klu_solve (Symbolic, Numeric, n, 1, X, Common) ;
+
+        /* ------------------------------------------------------------------ */
+        /* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < n ; i++)
+        {
+            R [i] = B [i] ;
+        }
+        for (j = 0 ; j < n ; j++)
+        {
+            asum = 0 ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                /* R (i) -= A (i,j) * X (j) */
+                R [Ai [p]] -= Ax [p] * X [j] ;
+                asum += fabs (Ax [p]) ;
+            }
+            anorm = MAX (anorm, asum) ;
+        }
+        *rnorm = 0 ;
+        for (i = 0 ; i < n ; i++)
+        {
+            *rnorm = MAX (*rnorm, fabs (R [i])) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* free numeric factorization */
+        /* ------------------------------------------------------------------ */
+
+        klu_free_numeric (&Numeric, Common) ;
 
     }
     else
     {
 
-	/* ------------------------------------------------------------------ */
-	/* statistics (not required to solve Ax=b) */
-	/* ------------------------------------------------------------------ */
-
-	Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, Common) ;
-	if (!Numeric)
-	{
-	    klu_free_symbolic (&Symbolic, Common) ;
-	    return (0) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* statistics */
-	/* ------------------------------------------------------------------ */
-
-	klu_z_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
-	klu_z_condest (Ap, Ax, Symbolic, Numeric, Common) ;
-	klu_z_rcond (Symbolic, Numeric, Common) ;
-	klu_z_flops (Symbolic, Numeric, Common) ;
-	*lunz = Numeric->lnz + Numeric->unz - n + 
-	    ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
-
-	/* ------------------------------------------------------------------ */
-	/* solve Ax=b */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < 2*n ; i++)
-	{
-	    X [i] = B [i] ;
-	}
-	klu_z_solve (Symbolic, Numeric, n, 1, X, Common) ;
-
-	/* ------------------------------------------------------------------ */
-	/* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < 2*n ; i++)
-	{
-	    R [i] = B [i] ;
-	}
-	for (j = 0 ; j < n ; j++)
-	{
-	    asum = 0 ;
-	    for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	    {
-		/* R (i) -= A (i,j) * X (j) */
-		i = Ai [p] ;
-		REAL (R,i) -= REAL(Ax,p) * REAL(X,j) - IMAG(Ax,p) * IMAG(X,j) ;
-		IMAG (R,i) -= IMAG(Ax,p) * REAL(X,j) + REAL(Ax,p) * IMAG(X,j) ;
-		asum += CABS (Ax, p) ;
-	    }
-	    anorm = MAX (anorm, asum) ;
-	}
-	*rnorm = 0 ;
-	for (i = 0 ; i < n ; i++)
-	{
-	    *rnorm = MAX (*rnorm, CABS (R, i)) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* free numeric factorization */
-	/* ------------------------------------------------------------------ */
-
-	klu_z_free_numeric (&Numeric, Common) ;
+        /* ------------------------------------------------------------------ */
+        /* statistics (not required to solve Ax=b) */
+        /* ------------------------------------------------------------------ */
+
+        Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, Common) ;
+        if (!Numeric)
+        {
+            klu_free_symbolic (&Symbolic, Common) ;
+            return (0) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* statistics */
+        /* ------------------------------------------------------------------ */
+
+        klu_z_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
+        klu_z_condest (Ap, Ax, Symbolic, Numeric, Common) ;
+        klu_z_rcond (Symbolic, Numeric, Common) ;
+        klu_z_flops (Symbolic, Numeric, Common) ;
+        *lunz = Numeric->lnz + Numeric->unz - n + 
+            ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
+
+        /* ------------------------------------------------------------------ */
+        /* solve Ax=b */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < 2*n ; i++)
+        {
+            X [i] = B [i] ;
+        }
+        klu_z_solve (Symbolic, Numeric, n, 1, X, Common) ;
+
+        /* ------------------------------------------------------------------ */
+        /* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < 2*n ; i++)
+        {
+            R [i] = B [i] ;
+        }
+        for (j = 0 ; j < n ; j++)
+        {
+            asum = 0 ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                /* R (i) -= A (i,j) * X (j) */
+                i = Ai [p] ;
+                REAL (R,i) -= REAL(Ax,p) * REAL(X,j) - IMAG(Ax,p) * IMAG(X,j) ;
+                IMAG (R,i) -= IMAG(Ax,p) * REAL(X,j) + REAL(Ax,p) * IMAG(X,j) ;
+                asum += CABS (Ax, p) ;
+            }
+            anorm = MAX (anorm, asum) ;
+        }
+        *rnorm = 0 ;
+        for (i = 0 ; i < n ; i++)
+        {
+            *rnorm = MAX (*rnorm, CABS (R, i)) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* free numeric factorization */
+        /* ------------------------------------------------------------------ */
+
+        klu_z_free_numeric (&Numeric, Common) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -215,7 +215,7 @@ static void klu_demo (int n, int *Ap, int *Ai, double *Ax, int isreal)
     int i, lunz ;
 
     printf ("KLU: %s, version: %d.%d.%d\n", KLU_DATE, KLU_MAIN_VERSION,
-	KLU_SUB_VERSION, KLU_SUBSUB_VERSION) ;
+        KLU_SUB_VERSION, KLU_SUBSUB_VERSION) ;
 
     /* ---------------------------------------------------------------------- */
     /* set defaults */
@@ -229,32 +229,32 @@ static void klu_demo (int n, int *Ap, int *Ai, double *Ax, int isreal)
 
     if (isreal)
     {
-	/* B = 1 + (1:n)/n */
-	B = klu_malloc (n, sizeof (double), &Common) ;
-	X = klu_malloc (n, sizeof (double), &Common) ;
-	R = klu_malloc (n, sizeof (double), &Common) ;
-	if (B)
-	{
-	    for (i = 0 ; i < n ; i++)
-	    {
-		B [i] = 1 + ((double) i+1) / ((double) n) ;
-	    }
-	}
+        /* B = 1 + (1:n)/n */
+        B = klu_malloc (n, sizeof (double), &Common) ;
+        X = klu_malloc (n, sizeof (double), &Common) ;
+        R = klu_malloc (n, sizeof (double), &Common) ;
+        if (B)
+        {
+            for (i = 0 ; i < n ; i++)
+            {
+                B [i] = 1 + ((double) i+1) / ((double) n) ;
+            }
+        }
     }
     else
     {
-	/* real (B) = 1 + (1:n)/n, imag(B) = (n:-1:1)/n */
-	B = klu_malloc (n, 2 * sizeof (double), &Common) ;
-	X = klu_malloc (n, 2 * sizeof (double), &Common) ;
-	R = klu_malloc (n, 2 * sizeof (double), &Common) ;
-	if (B)
-	{
-	    for (i = 0 ; i < n ; i++)
-	    {
-		REAL (B, i) = 1 + ((double) i+1) / ((double) n) ;
-		IMAG (B, i) = ((double) n-i) / ((double) n) ;
-	    }
-	}
+        /* real (B) = 1 + (1:n)/n, imag(B) = (n:-1:1)/n */
+        B = klu_malloc (n, 2 * sizeof (double), &Common) ;
+        X = klu_malloc (n, 2 * sizeof (double), &Common) ;
+        R = klu_malloc (n, 2 * sizeof (double), &Common) ;
+        if (B)
+        {
+            for (i = 0 ; i < n ; i++)
+            {
+                REAL (B, i) = 1 + ((double) i+1) / ((double) n) ;
+                IMAG (B, i) = ((double) n-i) / ((double) n) ;
+            }
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -263,14 +263,14 @@ static void klu_demo (int n, int *Ap, int *Ai, double *Ax, int isreal)
 
     if (!klu_backslash (n, Ap, Ai, Ax, isreal, B, X, R, &lunz, &rnorm, &Common))
     {
-	printf ("KLU failed\n") ;
+        printf ("KLU failed\n") ;
     }
     else
     {
-	printf ("n %d nnz(A) %d nnz(L+U+F) %d resid %g\n"
-	    "recip growth %g condest %g rcond %g flops %g\n",
-	    n, Ap [n], lunz, rnorm, Common.rgrowth, Common.condest,
-	    Common.rcond, Common.flops) ;
+        printf ("n %d nnz(A) %d nnz(L+U+F) %d resid %g\n"
+            "recip growth %g condest %g rcond %g flops %g\n",
+            n, Ap [n], lunz, rnorm, Common.rgrowth, Common.condest,
+            Common.rcond, Common.flops) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -279,15 +279,15 @@ static void klu_demo (int n, int *Ap, int *Ai, double *Ax, int isreal)
 
     if (isreal)
     {
-	klu_free (B, n, sizeof (double), &Common) ;
-	klu_free (X, n, sizeof (double), &Common) ;
-	klu_free (R, n, sizeof (double), &Common) ;
+        klu_free (B, n, sizeof (double), &Common) ;
+        klu_free (X, n, sizeof (double), &Common) ;
+        klu_free (R, n, sizeof (double), &Common) ;
     }
     else
     {
-	klu_free (B, 2*n, sizeof (double), &Common) ;
-	klu_free (X, 2*n, sizeof (double), &Common) ;
-	klu_free (R, 2*n, sizeof (double), &Common) ;
+        klu_free (B, 2*n, sizeof (double), &Common) ;
+        klu_free (X, 2*n, sizeof (double), &Common) ;
+        klu_free (R, 2*n, sizeof (double), &Common) ;
     }
     printf ("peak memory usage: %g bytes\n\n", (double) (Common.mempeak)) ;
 }
@@ -310,16 +310,16 @@ int main (void)
     A = cholmod_read_sparse (stdin, &ch) ;
     if (A)
     {
-	if (A->nrow != A->ncol || A->stype != 0
-	    || (!(A->xtype == CHOLMOD_REAL || A->xtype == CHOLMOD_COMPLEX)))
-	{
-	    printf ("invalid matrix\n") ;
-	}
-	else
-	{
-	    klu_demo (A->nrow, A->p, A->i, A->x, A->xtype == CHOLMOD_REAL) ;
-	}
-	cholmod_free_sparse (&A, &ch) ;
+        if (A->nrow != A->ncol || A->stype != 0
+            || (!(A->xtype == CHOLMOD_REAL || A->xtype == CHOLMOD_COMPLEX)))
+        {
+            printf ("invalid matrix\n") ;
+        }
+        else
+        {
+            klu_demo (A->nrow, A->p, A->i, A->x, A->xtype == CHOLMOD_REAL) ;
+        }
+        cholmod_free_sparse (&A, &ch) ;
     }
     cholmod_finish (&ch) ;
     return (0) ;
diff --git a/KLU/Demo/kludemo.out b/KLU/Demo/kludemo.out
index c619e86..e810819 100644
--- a/KLU/Demo/kludemo.out
+++ b/KLU/Demo/kludemo.out
@@ -5,73 +5,73 @@ x [2] = 3
 x [3] = 4
 x [4] = 5
 ./kludemo < ../Matrix/1c.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 1 nnz(A) 1 nnz(L+U+F) 1 resid 0
 recip growth 1 condest 1 rcond 1 flops 0
 peak memory usage: 492 bytes
 
 ./kludemo < ../Matrix/arrowc.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 100 nnz(A) 298 nnz(L+U+F) 298 resid 1.68007e-14
 recip growth 0.019999 condest 295.99 rcond 0.019999 flops 297
 peak memory usage: 32244 bytes
 
 ./kludemo < ../Matrix/arrow.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 100 nnz(A) 298 nnz(L+U+F) 298 resid 1.77636e-15
 recip growth 0.0204082 condest 303 rcond 0.0204082 flops 297
 peak memory usage: 20412 bytes
 
 ./kludemo < ../Matrix/impcol_a.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 207 nnz(A) 572 nnz(L+U+F) 615 resid 6.98492e-10
 recip growth 0.00957447 condest 4.35093e+07 rcond 4.5277e-05 flops 259
 peak memory usage: 34276 bytes
 
 ./kludemo < ../Matrix/w156.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 156 nnz(A) 362 nnz(L+U+F) 396 resid 6.23816e-08
 recip growth 0.00889922 condest 1.79787e+09 rcond 0.000124785 flops 175
 peak memory usage: 39516 bytes
 
 ./kludemo < ../Matrix/ctina.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 11 nnz(A) 36 nnz(L+U+F) 45 resid 4.44089e-16
 recip growth 1 condest 56 rcond 1 flops 73
 peak memory usage: 4268 bytes
 
 ./kluldemo < ../Matrix/1c.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 1 nnz(A) 1 nnz(L+U+F) 1 resid 0
 recip growth 1 condest 1 rcond 1 flops 0
 peak memory usage: 600 bytes
 
 ./kluldemo < ../Matrix/arrowc.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 100 nnz(A) 298 nnz(L+U+F) 298 resid 1.68007e-14
 recip growth 0.019999 condest 295.99 rcond 0.019999 flops 297
 peak memory usage: 39000 bytes
 
 ./kluldemo < ../Matrix/arrow.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 100 nnz(A) 298 nnz(L+U+F) 298 resid 1.77636e-15
 recip growth 0.0204082 condest 303 rcond 0.0204082 flops 297
 peak memory usage: 29584 bytes
 
 ./kluldemo < ../Matrix/impcol_a.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 207 nnz(A) 572 nnz(L+U+F) 615 resid 6.98492e-10
 recip growth 0.00957447 condest 4.35093e+07 rcond 4.5277e-05 flops 259
 peak memory usage: 44800 bytes
 
 ./kluldemo < ../Matrix/w156.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 156 nnz(A) 362 nnz(L+U+F) 396 resid 6.23816e-08
 recip growth 0.00889922 condest 1.79787e+09 rcond 0.000124785 flops 175
 peak memory usage: 47480 bytes
 
 ./kluldemo < ../Matrix/ctina.mtx
-KLU: Nov 1, 2007, version: 1.0.1
+KLU: Oct 23, 2014, version: 1.3.2
 n 11 nnz(A) 36 nnz(L+U+F) 45 resid 4.44089e-16
 recip growth 1 condest 56 rcond 1 flops 73
 peak memory usage: 5144 bytes
diff --git a/KLU/Demo/kluldemo.c b/KLU/Demo/kluldemo.c
index 69d9ebb..ccf0644 100644
--- a/KLU/Demo/kluldemo.c
+++ b/KLU/Demo/kluldemo.c
@@ -3,11 +3,12 @@
 /* ========================================================================== */
 
 /* Read in a Matrix Market matrix (using CHOLMOD) and solve a linear system.
- * UF_long is normally a "long", but it becomes "_int64" on Windows 64. */
+ * SuiteSparse_long is normally a "long", but it becomes "_int64" on Windows 64. */
 
 #include <math.h>
 #include <stdio.h>
 #include "klu.h"
+#define Long SuiteSparse_long
 
 /* for handling complex matrices */
 #define REAL(X,i) (X [2*(i)])
@@ -20,33 +21,33 @@
 /* === klu_l_backslash ====================================================== */
 /* ========================================================================== */
 
-static UF_long klu_l_backslash    /* return 1 if successful, 0 otherwise */
+static Long klu_l_backslash    /* return 1 if successful, 0 otherwise */
 (
     /* --- input ---- */
-    UF_long n,		/* A is n-by-n */
-    UF_long *Ap,		/* size n+1, column pointers */
-    UF_long *Ai,		/* size nz = Ap [n], row indices */
-    double *Ax,		/* size nz, numerical values */
-    UF_long isreal,		/* nonzero if A is real, 0 otherwise */
-    double *B,		/* size n, right-hand-side */
+    Long n,             /* A is n-by-n */
+    Long *Ap,           /* size n+1, column pointers */
+    Long *Ai,           /* size nz = Ap [n], row indices */
+    double *Ax,         /* size nz, numerical values */
+    Long isreal,        /* nonzero if A is real, 0 otherwise */
+    double *B,          /* size n, right-hand-side */
 
     /* --- output ---- */
-    double *X,		/* size n, solution to Ax=b */
-    double *R,		/* size n, residual r = b-A*x */
+    double *X,          /* size n, solution to Ax=b */
+    double *R,          /* size n, residual r = b-A*x */
 
     /* --- scalar output --- */
-    UF_long *lunz,		/* nnz (L+U+F) */
-    double *rnorm,	/* norm (b-A*x,1) / norm (A,1) */
+    Long *lunz,         /* nnz (L+U+F) */
+    double *rnorm,      /* norm (b-A*x,1) / norm (A,1) */
 
     /* --- workspace - */
 
-    klu_l_common *Common	/* default parameters and statistics */
+    klu_l_common *Common    /* default parameters and statistics */
 )
 {
     double anorm = 0, asum ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
-    UF_long i, j, p ;
+    Long i, j, p ;
 
     if (!Ap || !Ai || !Ax || !B || !X || !B) return (0) ;
 
@@ -60,137 +61,137 @@ static UF_long klu_l_backslash    /* return 1 if successful, 0 otherwise */
     if (isreal)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* factorization */
-	/* ------------------------------------------------------------------ */
-
-	Numeric = klu_l_factor (Ap, Ai, Ax, Symbolic, Common) ;
-	if (!Numeric)
-	{
-	    klu_l_free_symbolic (&Symbolic, Common) ;
-	    return (0) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* statistics (not required to solve Ax=b) */
-	/* ------------------------------------------------------------------ */
-
-	klu_l_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
-	klu_l_condest (Ap, Ax, Symbolic, Numeric, Common) ;
-	klu_l_rcond (Symbolic, Numeric, Common) ;
-	klu_l_flops (Symbolic, Numeric, Common) ;
-	*lunz = Numeric->lnz + Numeric->unz - n + 
-	    ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
-
-	/* ------------------------------------------------------------------ */
-	/* solve Ax=b */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < n ; i++)
-	{
-	    X [i] = B [i] ;
-	}
-	klu_l_solve (Symbolic, Numeric, n, 1, X, Common) ;
-
-	/* ------------------------------------------------------------------ */
-	/* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < n ; i++)
-	{
-	    R [i] = B [i] ;
-	}
-	for (j = 0 ; j < n ; j++)
-	{
-	    asum = 0 ;
-	    for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	    {
-		/* R (i) -= A (i,j) * X (j) */
-		R [Ai [p]] -= Ax [p] * X [j] ;
-		asum += fabs (Ax [p]) ;
-	    }
-	    anorm = MAX (anorm, asum) ;
-	}
-	*rnorm = 0 ;
-	for (i = 0 ; i < n ; i++)
-	{
-	    *rnorm = MAX (*rnorm, fabs (R [i])) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* free numeric factorization */
-	/* ------------------------------------------------------------------ */
-
-	klu_l_free_numeric (&Numeric, Common) ;
+        /* ------------------------------------------------------------------ */
+        /* factorization */
+        /* ------------------------------------------------------------------ */
+
+        Numeric = klu_l_factor (Ap, Ai, Ax, Symbolic, Common) ;
+        if (!Numeric)
+        {
+            klu_l_free_symbolic (&Symbolic, Common) ;
+            return (0) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* statistics (not required to solve Ax=b) */
+        /* ------------------------------------------------------------------ */
+
+        klu_l_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
+        klu_l_condest (Ap, Ax, Symbolic, Numeric, Common) ;
+        klu_l_rcond (Symbolic, Numeric, Common) ;
+        klu_l_flops (Symbolic, Numeric, Common) ;
+        *lunz = Numeric->lnz + Numeric->unz - n + 
+            ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
+
+        /* ------------------------------------------------------------------ */
+        /* solve Ax=b */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < n ; i++)
+        {
+            X [i] = B [i] ;
+        }
+        klu_l_solve (Symbolic, Numeric, n, 1, X, Common) ;
+
+        /* ------------------------------------------------------------------ */
+        /* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < n ; i++)
+        {
+            R [i] = B [i] ;
+        }
+        for (j = 0 ; j < n ; j++)
+        {
+            asum = 0 ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                /* R (i) -= A (i,j) * X (j) */
+                R [Ai [p]] -= Ax [p] * X [j] ;
+                asum += fabs (Ax [p]) ;
+            }
+            anorm = MAX (anorm, asum) ;
+        }
+        *rnorm = 0 ;
+        for (i = 0 ; i < n ; i++)
+        {
+            *rnorm = MAX (*rnorm, fabs (R [i])) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* free numeric factorization */
+        /* ------------------------------------------------------------------ */
+
+        klu_l_free_numeric (&Numeric, Common) ;
 
     }
     else
     {
 
-	/* ------------------------------------------------------------------ */
-	/* statistics (not required to solve Ax=b) */
-	/* ------------------------------------------------------------------ */
-
-	Numeric = klu_zl_factor (Ap, Ai, Ax, Symbolic, Common) ;
-	if (!Numeric)
-	{
-	    klu_l_free_symbolic (&Symbolic, Common) ;
-	    return (0) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* statistics */
-	/* ------------------------------------------------------------------ */
-
-	klu_zl_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
-	klu_zl_condest (Ap, Ax, Symbolic, Numeric, Common) ;
-	klu_zl_rcond (Symbolic, Numeric, Common) ;
-	klu_zl_flops (Symbolic, Numeric, Common) ;
-	*lunz = Numeric->lnz + Numeric->unz - n + 
-	    ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
-
-	/* ------------------------------------------------------------------ */
-	/* solve Ax=b */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < 2*n ; i++)
-	{
-	    X [i] = B [i] ;
-	}
-	klu_zl_solve (Symbolic, Numeric, n, 1, X, Common) ;
-
-	/* ------------------------------------------------------------------ */
-	/* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < 2*n ; i++)
-	{
-	    R [i] = B [i] ;
-	}
-	for (j = 0 ; j < n ; j++)
-	{
-	    asum = 0 ;
-	    for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	    {
-		/* R (i) -= A (i,j) * X (j) */
-		i = Ai [p] ;
-		REAL (R,i) -= REAL(Ax,p) * REAL(X,j) - IMAG(Ax,p) * IMAG(X,j) ;
-		IMAG (R,i) -= IMAG(Ax,p) * REAL(X,j) + REAL(Ax,p) * IMAG(X,j) ;
-		asum += CABS (Ax, p) ;
-	    }
-	    anorm = MAX (anorm, asum) ;
-	}
-	*rnorm = 0 ;
-	for (i = 0 ; i < n ; i++)
-	{
-	    *rnorm = MAX (*rnorm, CABS (R, i)) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* free numeric factorization */
-	/* ------------------------------------------------------------------ */
-
-	klu_zl_free_numeric (&Numeric, Common) ;
+        /* ------------------------------------------------------------------ */
+        /* statistics (not required to solve Ax=b) */
+        /* ------------------------------------------------------------------ */
+
+        Numeric = klu_zl_factor (Ap, Ai, Ax, Symbolic, Common) ;
+        if (!Numeric)
+        {
+            klu_l_free_symbolic (&Symbolic, Common) ;
+            return (0) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* statistics */
+        /* ------------------------------------------------------------------ */
+
+        klu_zl_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
+        klu_zl_condest (Ap, Ax, Symbolic, Numeric, Common) ;
+        klu_zl_rcond (Symbolic, Numeric, Common) ;
+        klu_zl_flops (Symbolic, Numeric, Common) ;
+        *lunz = Numeric->lnz + Numeric->unz - n + 
+            ((Numeric->Offp) ? (Numeric->Offp [n]) : 0) ;
+
+        /* ------------------------------------------------------------------ */
+        /* solve Ax=b */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < 2*n ; i++)
+        {
+            X [i] = B [i] ;
+        }
+        klu_zl_solve (Symbolic, Numeric, n, 1, X, Common) ;
+
+        /* ------------------------------------------------------------------ */
+        /* compute residual, rnorm = norm(b-Ax,1) / norm(A,1) */
+        /* ------------------------------------------------------------------ */
+
+        for (i = 0 ; i < 2*n ; i++)
+        {
+            R [i] = B [i] ;
+        }
+        for (j = 0 ; j < n ; j++)
+        {
+            asum = 0 ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                /* R (i) -= A (i,j) * X (j) */
+                i = Ai [p] ;
+                REAL (R,i) -= REAL(Ax,p) * REAL(X,j) - IMAG(Ax,p) * IMAG(X,j) ;
+                IMAG (R,i) -= IMAG(Ax,p) * REAL(X,j) + REAL(Ax,p) * IMAG(X,j) ;
+                asum += CABS (Ax, p) ;
+            }
+            anorm = MAX (anorm, asum) ;
+        }
+        *rnorm = 0 ;
+        for (i = 0 ; i < n ; i++)
+        {
+            *rnorm = MAX (*rnorm, CABS (R, i)) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* free numeric factorization */
+        /* ------------------------------------------------------------------ */
+
+        klu_zl_free_numeric (&Numeric, Common) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -208,16 +209,15 @@ static UF_long klu_l_backslash    /* return 1 if successful, 0 otherwise */
 
 /* Given a sparse matrix A, set up a right-hand-side and solve X = A\b */
 
-static void klu_l_demo (UF_long n, UF_long *Ap, UF_long *Ai, double *Ax,
-    UF_long isreal)
+static void klu_l_demo (Long n, Long *Ap, Long *Ai, double *Ax, Long isreal)
 {
     double rnorm ;
     klu_l_common Common ;
     double *B, *X, *R ;
-    UF_long i, lunz ;
+    Long i, lunz ;
 
     printf ("KLU: %s, version: %d.%d.%d\n", KLU_DATE, KLU_MAIN_VERSION,
-	KLU_SUB_VERSION, KLU_SUBSUB_VERSION) ;
+        KLU_SUB_VERSION, KLU_SUBSUB_VERSION) ;
 
     /* ---------------------------------------------------------------------- */
     /* set defaults */
@@ -231,32 +231,32 @@ static void klu_l_demo (UF_long n, UF_long *Ap, UF_long *Ai, double *Ax,
 
     if (isreal)
     {
-	/* B = 1 + (1:n)/n */
-	B = klu_l_malloc (n, sizeof (double), &Common) ;
-	X = klu_l_malloc (n, sizeof (double), &Common) ;
-	R = klu_l_malloc (n, sizeof (double), &Common) ;
-	if (B)
-	{
-	    for (i = 0 ; i < n ; i++)
-	    {
-		B [i] = 1 + ((double) i+1) / ((double) n) ;
-	    }
-	}
+        /* B = 1 + (1:n)/n */
+        B = klu_l_malloc (n, sizeof (double), &Common) ;
+        X = klu_l_malloc (n, sizeof (double), &Common) ;
+        R = klu_l_malloc (n, sizeof (double), &Common) ;
+        if (B)
+        {
+            for (i = 0 ; i < n ; i++)
+            {
+                B [i] = 1 + ((double) i+1) / ((double) n) ;
+            }
+        }
     }
     else
     {
-	/* real (B) = 1 + (1:n)/n, imag(B) = (n:-1:1)/n */
-	B = klu_l_malloc (n, 2 * sizeof (double), &Common) ;
-	X = klu_l_malloc (n, 2 * sizeof (double), &Common) ;
-	R = klu_l_malloc (n, 2 * sizeof (double), &Common) ;
-	if (B)
-	{
-	    for (i = 0 ; i < n ; i++)
-	    {
-		REAL (B, i) = 1 + ((double) i+1) / ((double) n) ;
-		IMAG (B, i) = ((double) n-i) / ((double) n) ;
-	    }
-	}
+        /* real (B) = 1 + (1:n)/n, imag(B) = (n:-1:1)/n */
+        B = klu_l_malloc (n, 2 * sizeof (double), &Common) ;
+        X = klu_l_malloc (n, 2 * sizeof (double), &Common) ;
+        R = klu_l_malloc (n, 2 * sizeof (double), &Common) ;
+        if (B)
+        {
+            for (i = 0 ; i < n ; i++)
+            {
+                REAL (B, i) = 1 + ((double) i+1) / ((double) n) ;
+                IMAG (B, i) = ((double) n-i) / ((double) n) ;
+            }
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -264,16 +264,16 @@ static void klu_l_demo (UF_long n, UF_long *Ap, UF_long *Ai, double *Ax,
     /* ---------------------------------------------------------------------- */
 
     if (!klu_l_backslash (n, Ap, Ai, Ax, isreal, B, X, R, &lunz, &rnorm,
-	&Common))
+        &Common))
     {
-	printf ("KLU failed\n") ;
+        printf ("KLU failed\n") ;
     }
     else
     {
-	printf ("n %d nnz(A) %d nnz(L+U+F) %d resid %g\n"
-	    "recip growth %g condest %g rcond %g flops %g\n",
-	    n, Ap [n], lunz, rnorm, Common.rgrowth, Common.condest,
-	    Common.rcond, Common.flops) ;
+        printf ("n %ld nnz(A) %ld nnz(L+U+F) %ld resid %g\n"
+            "recip growth %g condest %g rcond %g flops %g\n",
+            n, Ap [n], lunz, rnorm, Common.rgrowth, Common.condest,
+            Common.rcond, Common.flops) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -282,15 +282,15 @@ static void klu_l_demo (UF_long n, UF_long *Ap, UF_long *Ai, double *Ax,
 
     if (isreal)
     {
-	klu_l_free (B, n, sizeof (double), &Common) ;
-	klu_l_free (X, n, sizeof (double), &Common) ;
-	klu_l_free (R, n, sizeof (double), &Common) ;
+        klu_l_free (B, n, sizeof (double), &Common) ;
+        klu_l_free (X, n, sizeof (double), &Common) ;
+        klu_l_free (R, n, sizeof (double), &Common) ;
     }
     else
     {
-	klu_l_free (B, 2*n, sizeof (double), &Common) ;
-	klu_l_free (X, 2*n, sizeof (double), &Common) ;
-	klu_l_free (R, 2*n, sizeof (double), &Common) ;
+        klu_l_free (B, 2*n, sizeof (double), &Common) ;
+        klu_l_free (X, 2*n, sizeof (double), &Common) ;
+        klu_l_free (R, 2*n, sizeof (double), &Common) ;
     }
     printf ("peak memory usage: %g bytes\n\n", (double) (Common.mempeak)) ;
 }
@@ -313,16 +313,16 @@ int main (void)
     A = cholmod_l_read_sparse (stdin, &ch) ;
     if (A)
     {
-	if (A->nrow != A->ncol || A->stype != 0
-	    || (!(A->xtype == CHOLMOD_REAL || A->xtype == CHOLMOD_COMPLEX)))
-	{
-	    printf ("invalid matrix\n") ;
-	}
-	else
-	{
-	    klu_l_demo (A->nrow, A->p, A->i, A->x, A->xtype == CHOLMOD_REAL) ;
-	}
-	cholmod_l_free_sparse (&A, &ch) ;
+        if (A->nrow != A->ncol || A->stype != 0
+            || (!(A->xtype == CHOLMOD_REAL || A->xtype == CHOLMOD_COMPLEX)))
+        {
+            printf ("invalid matrix\n") ;
+        }
+        else
+        {
+            klu_l_demo (A->nrow, A->p, A->i, A->x, A->xtype == CHOLMOD_REAL) ;
+        }
+        cholmod_l_free_sparse (&A, &ch) ;
     }
     cholmod_l_finish (&ch) ;
     return (0) ;
diff --git a/KLU/Doc/ChangeLog b/KLU/Doc/ChangeLog
index 26ab332..c14a1bf 100644
--- a/KLU/Doc/ChangeLog
+++ b/KLU/Doc/ChangeLog
@@ -1,3 +1,49 @@
+Oct 23, 2014: version 1.3.2
+
+    * modified MATLAB/klu_make.m.  No change to C source code.
+
+Oct 10, 2014: version 1.3.1
+
+    * modified MATLAB/klu_make.m.
+    * trivial change to Tcov/Makefile to allow the Tcov test to work when
+        CHOLMOD is compiled with GPU acceleration.  No change to source
+        code of KLU proper (except for the version number).
+
+July 31, 2013: version 1.3.0
+
+    * changed malloc and printf pointers to use SuiteSparse_config
+
+Jun 20, 2012: verison 1,2,1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 1.2.0
+
+    * changed from UFconfig to SuiteSparse_config
+
+Jan 20, 2012: version 1.1.4
+
+    * bug fix:  INT_MAX changed to Int_MAX (used for checking Int overflow).
+
+Dec 7, 2011: version 1.1.3
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * minor fix to KLU mexFunction
+
+Jan 25, 2011: version 1.1.2
+
+    * minor fix to "make install"
+    * port of Tcov to Mac OSX 10.6.6
+
+Nov 30, 2009: version 1.1.1
+
+    * added "make install" and "make uninstall"
+
+March 24, 2009, version 1.1.0
+
+    * updates to documentation
+    * tabs expanded to spaces in all source code files
+
 Nov 1, 2007, version 1.0.1
 
     * minor lint cleanup
diff --git a/KLU/Doc/KLU_UserGuide.bib b/KLU/Doc/KLU_UserGuide.bib
index e69f199..123d88e 100644
--- a/KLU/Doc/KLU_UserGuide.bib
+++ b/KLU/Doc/KLU_UserGuide.bib
@@ -86,8 +86,8 @@
 
 @article{ChenDavisHagerRajamanickam06,
 	author={Chen, Y. and Davis, T. A. and Hager, W. W. and Rajamanickam, S.},
-	title={Algorithm 8xx: {CHOLMOD}, supernodal sparse {Cholesky} factorization and update/downdate},
-	journal=TOMS, note={(submitted)}, year={2006}}
+	title={Algorithm 887: {CHOLMOD}, supernodal sparse {Cholesky} factorization and update/downdate},
+	journal=TOMS, year={2009}, volume={35}, number={3}}
 
 @article{KarypisKumar98e,
 	author={Karypis, G. and Kumar, V.},
@@ -130,3 +130,23 @@
 	    circuit simulation problems},
 	note={M.S. Thesis},
 	address={CISE Department, Univ. of Florida}}
+
+ at article{DavisNatarajan10,
+    author = {Davis, Timothy A. and Palamadai Natarajan, Ekanathan},
+    title = {Algorithm 907: {KLU}, A Direct Sparse Solver for Circuit Simulation Problems},
+    journal = {ACM Trans. Math. Softw.},
+    volume = {37},
+    issue = {3},
+    month = {September},
+    year = {2010},
+    issn = {0098-3500},
+    pages = {36:1--36:17},
+    articleno = {36},
+    numpages = {17},
+    url = {http://doi.acm.org/10.1145/1824801.1824814},
+    doi = {http://doi.acm.org/10.1145/1824801.1824814},
+    acmid = {1824814},
+    publisher = {ACM},
+    address = {New York, NY, USA},
+    keywords = {LU factorization, circuit simulation, sparse matrices},
+}
diff --git a/KLU/Doc/KLU_UserGuide.pdf b/KLU/Doc/KLU_UserGuide.pdf
index 8d98c23..f5c509d 100644
Binary files a/KLU/Doc/KLU_UserGuide.pdf and b/KLU/Doc/KLU_UserGuide.pdf differ
diff --git a/KLU/Doc/KLU_UserGuide.tex b/KLU/Doc/KLU_UserGuide.tex
index 9a70a8c..6ad491a 100644
--- a/KLU/Doc/KLU_UserGuide.tex
+++ b/KLU/Doc/KLU_UserGuide.tex
@@ -13,22 +13,20 @@
 \begin{document}
 %------------------------------------------------------------------------------
 
-\title{User Guide for KLU Version 1.0.1 and BTF Version 1.0.1}
+\title{User Guide for KLU and BTF}
 \author{
 Timothy A. Davis\thanks{
-Dept.~of Computer and Information Science and Engineering,
-Univ.~of Florida, Gainesville, FL, USA.
-email: davis at cise.ufl.edu.
-http://www.cise.ufl.edu/$\sim$davis.
+DrTimothyAldenDavis at gmail.com,
+http://www.suitesparse.com.
 This work was supported by Sandia National Labs, and the National
 Science Foundation.
 Portions of the work were done while on sabbatical at Stanford University
 and Lawrence Berkeley National Laboratory (with funding from Stanford
 University and the SciDAC program).
 }
-\and Eka Palamadai}
+\and Eka Palamadai Natarajan}
 
-\date{Nov 1, 2007}
+\date{VERSION 1.3.2, Oct 23, 2014}
 \maketitle
 
 %------------------------------------------------------------------------------
@@ -40,6 +38,7 @@ It relies on a permutation to block triangular form (BTF), several methods
 for finding a fill-reducing ordering (variants of approximate minimum degree,
 and nested dissection), and a sparse left-looking LU factorization method
 to factorize each block.  A MATLAB interface is included.
+KLU appears as Collected Algorithm 907 of the ACM \cite{DavisNatarajan10}.
 \end{abstract}
 %------------------------------------------------------------------------------
 
@@ -51,7 +50,7 @@ to factorize each block.  A MATLAB interface is included.
 \section{License and Copyright}
 %------------------------------------------------------------------------------
 
-KLU Version 1.0.1, Copyright\copyright 2007 University of Florida.
+KLU, Copyright\copyright 2004-2011 University of Florida.
 All Rights Reserved.
 KLU is available under alternate licenses; contact T. Davis for details.
 
@@ -84,11 +83,7 @@ KLU is available under alternate licenses; contact T. Davis for details.
     Copyright, this License, and the Availability note are retained,
     and a notice that the code was modified is included.
 
-{\bf Availability:}
-
-    {\tt http://www.cise.ufl.edu/research/sparse/klu}
-
-    {\tt http://www.cise.ufl.edu/research/sparse/btf}
+{\bf Availability:} {\tt http://www.suitesparse.com}
 
 {\bf Acknowledgments:}
 
@@ -233,18 +228,24 @@ SuperLU was before it became Super).
 For details of the permutation to block triangular form, left-looking sparse
 LU factorization, and approximate minimum degree, refer to \cite{Davis06book}.
 Concise versions of these methods can be found in the CSparse package.  KLU is
-also the topic of a Master's thesis by Palamadai \cite{Palamadai05}; a copy of
+also the topic of a Master's thesis by Palamadai Natarajan \cite{Palamadai05};
+a copy of
 the thesis can be found in the {\tt KLU/Doc} directory.  It includes a
 description of an earlier version of KLU; some of the function names and
 parameter lists have changed in this version.  The descriptions of the methods
 used still applies to the current version of KLU, however.
 
+KLU appears as {\em Algorithm 907: KLU, a direct sparse solver for circuit
+simulation problems}, ACM Transactions on Mathematical Software, vol 37, no 3,
+2010.
+
 %------------------------------------------------------------------------------
 \section{Availability}
 %------------------------------------------------------------------------------
 
-KLU and its required ordering packages (BTF, COLAMD, AMD, and UFconfig) are
-available at \newline {\tt http://www.cise.ufl.edu/research/sparse.}  In
+KLU and its required ordering packages (BTF, COLAMD, AMD, and
+SuiteSparse\_config) are
+available at \newline {\tt http://www.suitesparse.com.}  In
 addition, KLU can make use of any user-provided ordering function.  One such
 function is included, which provides KLU with an interface to the ordering
 methods used in CHOLMOD \cite{ChenDavisHagerRajamanickam06}, such as METIS, a
@@ -255,9 +256,10 @@ time to compute than the AMD ordering, but if the ordering is reused many times
 (typical in circuit simulation) the better-quality ordering can pay off in
 lower total simulation time. 
 
-To use KLU, you must obtain the KLU, BTF, UFconfig, AMD, and COLAMD packages
+To use KLU, you must obtain the KLU, BTF, SuiteSparse\_config,
+AMD, and COLAMD packages
 in the SuiteSparse suite of sparse matrix libraries.  See 
-{\tt http://www.cise.ufl.edu/research/sparse} for each of these packages.
+{\tt http://www.suitesparse.com} for each of these packages.
 They are also all contained within the single {\tt SuiteSparse.zip} or
 {\tt SuiteSparse.tar.gz} distribution.
 
@@ -339,18 +341,18 @@ permissions, edit your {\tt startup.m} by adding {\tt addpath} commands (type
 KLU and BTF include the following C-callable functions.  Each function is
 available in two or four versions: with {\tt int} or {\tt long} integers, and
 (for functions that deal with numerical values), with {\tt double} or complex
-{\tt double} values.  The {\tt long} integer is actually a {\tt UF\_long},
+{\tt double} values.  The {\tt long} integer is actually a {\tt SuiteSparse\_long},
 which is typically a {\tt long}, defined with a {\tt \#define} statement.  It
 becomes an {\tt \_\_int64} on Microsoft Windows 64, however.
 
-The usage of real and complex, and {\tt int} and {\tt UF\_long}, must not be
+The usage of real and complex, and {\tt int} and {\tt SuiteSparse\_long}, must not be
 mixed, except that some functions can be used for both real and complex cases.
 
 %------------------------------------------------------------------------------
 \subsection{KLU Common object}
 %------------------------------------------------------------------------------
 
-The {\tt klu\_common} object ({\tt klu\_l\_common} for the {\tt UF\_long}
+The {\tt klu\_common} object ({\tt klu\_l\_common} for the {\tt SuiteSparse\_long}
 version) contains user-definable parameters and statistics returned from
 KLU functions.  This object appears in every KLU function as the last
 parameter.  Details are given in the {\tt klu.h} include file, which also
@@ -395,7 +397,7 @@ Default: 0.
 
 \item {\tt user\_order}: a pointer to a function that can be provided by the
 application that uses KLU, to redefine the fill-reducing ordering used by KLU
-for each diagonal block.  The {\tt int} and {\tt UF\_long} prototypes must be
+for each diagonal block.  The {\tt int} and {\tt SuiteSparse\_long} prototypes must be
 as follows:
 
 {\footnotesize
@@ -403,8 +405,9 @@ as follows:
 int my_ordering_function (int n, int Ap [ ], int Ai [ ], int Perm [ ], klu_common *Common) ;
 
 
-UF_long my_long_ordering_function (UF_long n, UF_long Ap [ ], UF_long Ai [ ],
-    UF_long Perm [ ], klu_l_common *Common);
+SuiteSparse_long my_long_ordering_function (SuiteSparse_long n,
+    SuiteSparse_long Ap [ ], SuiteSparse_long Ai [ ],
+    SuiteSparse_long Perm [ ], klu_l_common *Common);
 \end{verbatim}
 }
 
@@ -444,7 +447,7 @@ provides an interface to the ordering method in CHOLMOD.
 
 KLU performs its sparse LU factorization in two steps.  The first is purely
 symbolic, and does not depend on the numerical values.  This analysis returns a
-{\tt klu\_symbolic} object ({\tt klu\_l\_symbolic} in the {\tt UF\_long}
+{\tt klu\_symbolic} object ({\tt klu\_l\_symbolic} in the {\tt SuiteSparse\_long}
 version).  The {\tt Symbolic} object contains a pre-ordering which combines the
 block triangular form with the fill-reducing ordering, and an estimate of the
 number of nonzeros in the factors of each block.  Its size is thus modest, only
@@ -465,11 +468,11 @@ and {\tt Numeric} objects are required.
 \subsection{A sparse matrix in KLU}
 %------------------------------------------------------------------------------
 
-% From here on, only the {\tt int} version is described.  In the {\tt UF\_long}
+% From here on, only the {\tt int} version is described.  In the {\tt SuiteSparse\_long}
 % version, the function names change slightly ({\tt klu\_factor} becomes
 % {\tt klu\_l\_factor}, and the {\tt int}/complex version {\tt klu\_z\_factor}
 % becomes {\tt klu\_zl\_factor}, for example).  For more details on the
-% {\tt UF\_long} version, refer to Section~\ref{klu_include}.
+% {\tt SuiteSparse\_long} version, refer to Section~\ref{klu_include}.
 
 The input matrix provided to KLU is in sparse compressed-column form, which is
 the same data structure used internally in MATLAB, except that the version used
@@ -527,7 +530,7 @@ any other KLU function can be called.
 
 
     #include "klu.h"
-    UF_long ok ;
+    SuiteSparse_long ok ;
     klu_l_common Common ;
     ok = klu_l_defaults (&Common) ;                                           /* real or complex */
 \end{verbatim}
@@ -555,7 +558,7 @@ the user-provided {\tt Common.user\_ordering} is used if it is 3.
 
 
     #include "klu.h"
-    UF_long n, Ap [n+1], Ai [nz] ;
+    SuiteSparse_long n, Ap [n+1], Ai [nz] ;
     klu_l_symbolic *Symbolic ;
     klu_l_common Common ;
     Symbolic = klu_l_analyze (n, Ap, Ai, &Common) ;                           /* real or complex */
@@ -583,7 +586,7 @@ error occurs.  These functions may be used for both real and complex cases.
 
 
     #include "klu.h"
-    UF_long n, Ap [n+1], Ai [nz], P [n], Q [n] ;
+    SuiteSparse_long n, Ap [n+1], Ai [nz], P [n], Q [n] ;
     klu_l_symbolic *Symbolic ;
     klu_l_common Common ;
     Symbolic = klu_l_analyze_given (n, Ap, Ai, P, Q, &Common) ;               /* real or complex */
@@ -612,7 +615,7 @@ Symbolic} object.  A NULL pointer is returned if an error occurs.
 
 
     #include "klu.h"
-    UF_long Ap [n+1], Ai [nz] ;
+    SuiteSparse_long Ap [n+1], Ai [nz] ;
     double Ax [nz], Az [2*nz] ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
@@ -648,7 +651,7 @@ entry $b_{ij}$ is stored in {\tt B [2*(i+j*ldim)]} and {\tt B [2*(i+j*ldim)+1]}
 
 
     #include "klu.h"
-    UF_long ldim, nrhs, ok ;
+    SuiteSparse_long ldim, nrhs, ok ;
     double B [ldim*nrhs], Bz [2*ldim*nrhs] ;
     klu_symbolic *Symbolic ;
     klu_numeric *Numeric ;
@@ -680,7 +683,7 @@ identical to {\tt klu\_solve}.
 
 
     #include "klu.h"
-    UF_long ldim, nrhs, ok ;
+    SuiteSparse_long ldim, nrhs, ok ;
     double B [ldim*nrhs], Bz [2*ldim*nrhs] ;
     klu_symbolic *Symbolic ;
     klu_numeric *Numeric ;
@@ -719,7 +722,7 @@ and requires no dynamic memory allocation.
 
 
     #include "klu.h"
-    UF_long ok, Ap [n+1], Ai [nz] ;
+    SuiteSparse_long ok, Ap [n+1], Ai [nz] ;
     double Ax [nz], Az [2*nz] ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
@@ -804,7 +807,7 @@ of this function is optional.
 
 
     #include "klu.h"
-    UF_long ok ;
+    SuiteSparse_long ok ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
     klu_l_common Common ;
@@ -834,7 +837,7 @@ The result is returned in {\tt Common.flops}.
 
 
     #include "klu.h"
-    UF_long ok ;
+    SuiteSparse_long ok ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
     klu_l_common Common ;
@@ -874,7 +877,7 @@ result is returned in {\tt Common.rgrowth}.
 
 
     #include "klu.h"
-    UF_long ok, Ap [n+1], Ai [nz] ;
+    SuiteSparse_long ok, Ap [n+1], Ai [nz] ;
     double Ax [nz], Az [2*nz] ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
@@ -908,7 +911,7 @@ complex case) must be unchanged since the last call to {\tt klu\_factor} or
 
 
     #include "klu.h"
-    UF_long ok, Ap [n+1] ;
+    SuiteSparse_long ok, Ap [n+1] ;
     double Ax [nz], Az [2*nz] ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
@@ -943,7 +946,7 @@ in {\tt Common.rcond}.
 
 
     #include "klu.h"
-    UF_long ok ;
+    SuiteSparse_long ok ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
     klu_l_common Common ;
@@ -988,7 +991,7 @@ NULL on input, the check for duplicate entries is skipped.
 
 
     #include "klu.h"
-    UF_long scale, ok, n, Ap [n+1], Ai [nz], W [n] ;
+    SuiteSparse_long scale, ok, n, Ap [n+1], Ai [nz], W [n] ;
     double Ax [nz], Az [2*nz], Rs [n] ;
     klu_l_common Common ;
     ok = klu_l_scale (scale, n, Ap, Ai, Ax, Symbolic, Numeric, &Common) ;             /* real */
@@ -1033,7 +1036,8 @@ use to the end user who wishes to examine the contents of the LU factors.
 
 
     #include "klu.h"
-    UF_long ok, Lp [n+1], Li [lnz], Up [n+1], Ui [unz], Fp [n+1], Fi [nzoff], P [n], Q [n], R [n] ;
+    SuiteSparse_long ok, Lp [n+1], Li [lnz], Up [n+1], Ui [unz], Fp [n+1],
+        Fi [nzoff], P [n], Q [n], R [n] ;
     double Lx [lnz], Lz [lnz], Ux [unz], Uz [unz], Fx [nzoff], Fz [nzoff], Rs [n] ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
@@ -1091,7 +1095,7 @@ Common.status}.
 %-------------------------------------------------------------------------------
 
 The BTF package includes three user-callable functions (each with {\tt int}
-and {\tt UF\_long} versions).  They do not need to be called directly by an
+and {\tt SuiteSparse\_long} versions).  They do not need to be called directly by an
 application that uses KLU.  KLU will call these functions to perform the
 permutation into upper block triangular form.
 
@@ -1122,7 +1126,7 @@ are undefined on input and output.
     nmatch = btf_maxtrans (nrow, ncol, Ap, Ai, maxwork, &work, Match, Work) ;
 
 
-    UF_long nrow, ncol, Ap [ncol+1], Ai [nz], Match [nrow], Work [5*ncol], nmatch ;
+    SuiteSparse_long nrow, ncol, Ap [ncol+1], Ai [nz], Match [nrow], Work [5*ncol], nmatch ;
     double maxwork, work ;
     nmatch = btf_l_maxtrans (nrow, ncol, Ap, Ai, maxwork, &work, Match, Work) ;
 \end{verbatim}
@@ -1149,7 +1153,7 @@ The function returns the number of strongly connected components found
     ncomp = btf_strongcomp (n, Ap, Ai, Q, P, R, Work) ;
 
 
-    UF_long n, Ap [n+1], Ai [nz], Q [n], P [n], R [n+1], Work [4*n], ncomp ;
+    SuiteSparse_long n, Ap [n+1], Ai [nz], Q [n], P [n], R [n+1], Work [4*n], ncomp ;
     ncomp = btf_l_strongcomp (n, Ap, Ai, Q, P, R, Work) ;
 \end{verbatim}
 }
@@ -1178,7 +1182,7 @@ are the same as {\tt btf\_strongcomp}.
     ncomp = btf_order (n, Ap, Ai, maxwork, &work, P, Q, R, &nfound, Work) ;
 
 
-    UF_long n, Ap [n+1], Ai [nz], P [n], Q [n], R [n+1], nfound, Work [5*n], ncomp, nfound ;
+    SuiteSparse_long n, Ap [n+1], Ai [nz], P [n], Q [n], R [n+1], nfound, Work [5*n], ncomp, nfound ;
     double maxwork, work ;
     ncomp = btf_l_order (n, Ap, Ai, maxwork, &work, P, Q, R, &nfound, Work) ;
 \end{verbatim}
@@ -1240,7 +1244,7 @@ matrix).
 
 For a more complete program that uses KLU, see {\tt KLU/Demo/kludemo.c} for an
 {\tt int} version, and {\tt KLU/Demo/kluldemo.c} for a version that uses {\tt
-UF\_long} instead.  The top-level main routine uses CHOLMOD to read in a
+SuiteSparse\_long} instead.  The top-level main routine uses CHOLMOD to read in a
 compressed-column sparse matrix from a Matrix Market file, because KLU does not
 include such a function.  Otherwise, no CHOLMOD functions are used.  Unlike
 {\tt klu\_simple.c}, CHOLMOD is required to run the {\tt kludemo.c} and {\tt
@@ -1257,7 +1261,8 @@ The MATLAB installation in any platform, including Windows is simple; just
 type {\tt klu\_install} to compile and install KLU, BTF, AMD, and COLAMD.
 
 For {\tt make}, system-dependent configurations are in the {\tt
-../UFconfig/UFconfig.mk} file.  You can edit that file to customize the
+../SuiteSparse\_config/SuiteSparse\_config.mk} file.
+You can edit that file to customize the
 compilation.  The default settings will work on most systems.  Sample
 configuration files are provided for Linux, Sun Solaris, SGI IRIX, IBM AIX, and
 the DEC/Compaq Alpha.
@@ -1272,7 +1277,8 @@ kludemo.out}.
 Typing {\tt make clean} will remove all but the final compiled libraries and
 demo programs.  Typing {\tt make purge} or {\tt make distclean} removes all
 files not in the original distribution.  If you compile KLU or BTF and then
-later change the {\tt ../UFconfig/UFconfig.mk} file then you should type {\tt
+later change the {\tt ../SuiteSparse\_config/SuiteSparse\_config.mk}
+file then you should type {\tt
 make purge} and then {\tt make} to recompile.
 
 When you compile your program that uses the C-callable KLU library, you need to
@@ -1287,11 +1293,6 @@ MATLAB command window while in the {\tt KLU/MATLAB} directory.  This works on
 any system with MATLAB, including Windows.  Alternately, type {\tt make} in the
 {\tt KLU/MATLAB} directory.
 
-If you have MATLAB 7.2 or earlier, you must first edit UFconfig/UFconfig.h to
-remove the {\tt -largeArrayDims} option from the {\tt MEX} command, prior to
-{\tt make mex} or {\tt make} in the MATLAB directory (or just use {\tt
-klu\_install.m} inside MATLAB, which handles this case).
-
 %------------------------------------------------------------------------------
 \newpage
 \section{The KLU routines}
diff --git a/KLU/Doc/Makefile b/KLU/Doc/Makefile
index daa0c1e..afa0942 100644
--- a/KLU/Doc/Makefile
+++ b/KLU/Doc/Makefile
@@ -4,14 +4,14 @@
 
 default: dist
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 #------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
 #------------------------------------------------------------------------------
 
 clean:
-	- $(RM) $(CLEAN)
+	- $(RM) -r $(CLEAN)
 
 purge: distclean
 
@@ -23,14 +23,14 @@ distclean: clean
 #------------------------------------------------------------------------------
 
 KLU_UserGuide.pdf: KLU_UserGuide.tex KLU_UserGuide.bib \
-    ../Include/klu.h ../../BTF/Include/btf.h
-	echo '\begin{verbatim}' > klu_h.tex
+    ../Include/klu.h ../../BTF/Include/btf.h Makefile
+	echo '\\begin{verbatim}' > klu_h.tex
 	expand -8 ../Include/klu.h >> klu_h.tex
 	echo '\end{verbatim}' >> klu_h.tex
-	echo '\begin{verbatim}' > btf_h.tex
+	echo '\\begin{verbatim}' > btf_h.tex
 	expand -8 ../../BTF/Include/btf.h >> btf_h.tex
 	echo '\end{verbatim}' >> btf_h.tex
-	echo '\begin{verbatim}' > klu_simple_c.tex
+	echo '\\begin{verbatim}' > klu_simple_c.tex
 	expand -8 ../Demo/klu_simple.c >> klu_simple_c.tex
 	echo '\end{verbatim}' >> klu_simple_c.tex
 	pdflatex KLU_UserGuide
diff --git a/KLU/Include/klu.h b/KLU/Include/klu.h
index 867ed42..efbc523 100644
--- a/KLU/Include/klu.h
+++ b/KLU/Include/klu.h
@@ -28,37 +28,37 @@ typedef struct
      */
 
     /* only computed if the AMD ordering is chosen: */
-    double symmetry ;	/* symmetry of largest block */
-    double est_flops ;	/* est. factorization flop count */
-    double lnz, unz ;	/* estimated nz in L and U, including diagonals */
-    double *Lnz ;	/* size n, but only Lnz [0..nblocks-1] is used */
+    double symmetry ;   /* symmetry of largest block */
+    double est_flops ;  /* est. factorization flop count */
+    double lnz, unz ;   /* estimated nz in L and U, including diagonals */
+    double *Lnz ;       /* size n, but only Lnz [0..nblocks-1] is used */
 
     /* computed for all orderings: */
     int
-	n,		/* input matrix A is n-by-n */
-	nz,		/* # entries in input matrix */
-	*P, 		/* size n */
-	*Q,		/* size n */
-	*R,		/* size n+1, but only R [0..nblocks] is used */
-	nzoff,		/* nz in off-diagonal blocks */
-	nblocks,	/* number of blocks */
-	maxblock,	/* size of largest block */
-	ordering,	/* ordering used (AMD, COLAMD, or GIVEN) */
-	do_btf ;	/* whether or not BTF preordering was requested */
+        n,              /* input matrix A is n-by-n */
+        nz,             /* # entries in input matrix */
+        *P,             /* size n */
+        *Q,             /* size n */
+        *R,             /* size n+1, but only R [0..nblocks] is used */
+        nzoff,          /* nz in off-diagonal blocks */
+        nblocks,        /* number of blocks */
+        maxblock,       /* size of largest block */
+        ordering,       /* ordering used (AMD, COLAMD, or GIVEN) */
+        do_btf ;        /* whether or not BTF preordering was requested */
 
     /* only computed if BTF preordering requested */
     int structural_rank ;   /* 0 to n-1 if the matrix is structurally rank
-			* deficient.  -1 if not computed.  n if the matrix has
-			* full structural rank */
+                        * deficient.  -1 if not computed.  n if the matrix has
+                        * full structural rank */
 
 } klu_symbolic ;
 
-typedef struct		/* 64-bit version (otherwise same as above) */
+typedef struct          /* 64-bit version (otherwise same as above) */
 {
     double symmetry, est_flops, lnz, unz ;
     double *Lnz ;
-    UF_long n, nz, *P, *Q, *R, nzoff, nblocks, maxblock, ordering, do_btf,
-	structural_rank ;
+    SuiteSparse_long n, nz, *P, *Q, *R, nzoff, nblocks, maxblock, ordering,
+        do_btf, structural_rank ;
 
 } klu_l_symbolic ;
 
@@ -71,55 +71,55 @@ typedef struct
     /* LU factors of each block, the pivot row permutation, and the
      * entries in the off-diagonal blocks */
 
-    int n ;		/* A is n-by-n */
-    int nblocks ;	/* number of diagonal blocks */
-    int lnz ;		/* actual nz in L, including diagonal */
-    int unz ;		/* actual nz in U, including diagonal */
-    int max_lnz_block ;	/* max actual nz in L in any one block, incl. diag */
-    int max_unz_block ;	/* max actual nz in U in any one block, incl. diag */
-    int *Pnum ;		/* size n. final pivot permutation */
-    int *Pinv ;		/* size n. inverse of final pivot permutation */
+    int n ;             /* A is n-by-n */
+    int nblocks ;       /* number of diagonal blocks */
+    int lnz ;           /* actual nz in L, including diagonal */
+    int unz ;           /* actual nz in U, including diagonal */
+    int max_lnz_block ; /* max actual nz in L in any one block, incl. diag */
+    int max_unz_block ; /* max actual nz in U in any one block, incl. diag */
+    int *Pnum ;         /* size n. final pivot permutation */
+    int *Pinv ;         /* size n. inverse of final pivot permutation */
 
     /* LU factors of each block */
-    int *Lip ;		/* size n. pointers into LUbx[block] for L */
-    int *Uip ;		/* size n. pointers into LUbx[block] for U */
-    int *Llen ;		/* size n. Llen [k] = # of entries in kth column of L */
-    int *Ulen ;		/* size n. Ulen [k] = # of entries in kth column of U */
-    void **LUbx ;	/* L and U indices and entries (excl. diagonal of U) */
-    size_t *LUsize ;	/* size of each LUbx [block], in sizeof (Unit) */
-    void *Udiag ;	/* diagonal of U */
+    int *Lip ;          /* size n. pointers into LUbx[block] for L */
+    int *Uip ;          /* size n. pointers into LUbx[block] for U */
+    int *Llen ;         /* size n. Llen [k] = # of entries in kth column of L */
+    int *Ulen ;         /* size n. Ulen [k] = # of entries in kth column of U */
+    void **LUbx ;       /* L and U indices and entries (excl. diagonal of U) */
+    size_t *LUsize ;    /* size of each LUbx [block], in sizeof (Unit) */
+    void *Udiag ;       /* diagonal of U */
 
     /* scale factors; can be NULL if no scaling */
-    double *Rs ;	/* size n. Rs [i] is scale factor for row i */
+    double *Rs ;        /* size n. Rs [i] is scale factor for row i */
 
     /* permanent workspace for factorization and solve */
-    size_t worksize ;	/* size (in bytes) of Work */
-    void *Work ;	/* workspace */
-    void *Xwork ;	/* alias into Numeric->Work */
-    int *Iwork ;	/* alias into Numeric->Work */
+    size_t worksize ;   /* size (in bytes) of Work */
+    void *Work ;        /* workspace */
+    void *Xwork ;       /* alias into Numeric->Work */
+    int *Iwork ;        /* alias into Numeric->Work */
 
     /* off-diagonal entries in a conventional compressed-column sparse matrix */
-    int *Offp ;		/* size n+1, column pointers */
-    int *Offi ;		/* size nzoff, row indices */
-    void *Offx ;	/* size nzoff, numerical values */
+    int *Offp ;         /* size n+1, column pointers */
+    int *Offi ;         /* size nzoff, row indices */
+    void *Offx ;        /* size nzoff, numerical values */
     int nzoff ;
 
 } klu_numeric ;
 
-typedef struct		/* 64-bit version (otherwise same as above) */
+typedef struct          /* 64-bit version (otherwise same as above) */
 {
-    UF_long n, nblocks, lnz, unz, max_lnz_block, max_unz_block, *Pnum, *Pinv,
-	*Lip, *Uip, *Llen, *Ulen ;
+    SuiteSparse_long n, nblocks, lnz, unz, max_lnz_block, max_unz_block, *Pnum,
+        *Pinv, *Lip, *Uip, *Llen, *Ulen ;
     void **LUbx ;
     size_t *LUsize ;
     void *Udiag ;
     double *Rs ;
     size_t worksize ;
     void *Work, *Xwork ;
-    UF_long *Iwork ;
-    UF_long *Offp, *Offi ;
+    SuiteSparse_long *Iwork ;
+    SuiteSparse_long *Offp, *Offi ;
     void *Offx ;
-    UF_long nzoff ;
+    SuiteSparse_long nzoff ;
 
 } klu_l_numeric ;
 
@@ -129,10 +129,10 @@ typedef struct		/* 64-bit version (otherwise same as above) */
 
 /* Common->status values */
 #define KLU_OK 0
-#define KLU_SINGULAR (1)	    /* status > 0 is a warning, not an error */
+#define KLU_SINGULAR (1)            /* status > 0 is a warning, not an error */
 #define KLU_OUT_OF_MEMORY (-2)
 #define KLU_INVALID (-3)
-#define KLU_TOO_LARGE (-4)	    /* integer overflow has occured */
+#define KLU_TOO_LARGE (-4)          /* integer overflow has occured */
 
 typedef struct klu_common_struct
 {
@@ -141,23 +141,17 @@ typedef struct klu_common_struct
     /* parameters */
     /* ---------------------------------------------------------------------- */
 
-    double tol ;	    /* pivot tolerance for diagonal preference */
-    double memgrow ;	    /* realloc memory growth size for LU factors */
+    double tol ;            /* pivot tolerance for diagonal preference */
+    double memgrow ;        /* realloc memory growth size for LU factors */
     double initmem_amd ;    /* init. memory size with AMD: c*nnz(L) + n */
-    double initmem ;	    /* init. memory size: c*nnz(A) + n */
-    double maxwork ;	    /* maxwork for BTF, <= 0 if no limit */
+    double initmem ;        /* init. memory size: c*nnz(A) + n */
+    double maxwork ;        /* maxwork for BTF, <= 0 if no limit */
 
-    int btf ;		    /* use BTF pre-ordering, or not */
-    int ordering ;	    /* 0: AMD, 1: COLAMD, 2: user P and Q,
-			     * 3: user function */
-    int scale ;		    /* row scaling: -1: none (and no error check),
-			     * 0: none, 1: sum, 2: max */
-
-    /* memory management routines */
-    void *(*malloc_memory) (size_t) ;		/* pointer to malloc */
-    void *(*realloc_memory) (void *, size_t) ;  /* pointer to realloc */
-    void (*free_memory) (void *) ;		/* pointer to free */
-    void *(*calloc_memory) (size_t, size_t) ;	/* pointer to calloc */
+    int btf ;               /* use BTF pre-ordering, or not */
+    int ordering ;          /* 0: AMD, 1: COLAMD, 2: user P and Q,
+                             * 3: user function */
+    int scale ;             /* row scaling: -1: none (and no error check),
+                             * 0: none, 1: sum, 2: max */
 
     /* pointer to user ordering function */
     int (*user_order) (int, int *, int *, int *, struct klu_common_struct *) ;
@@ -167,48 +161,48 @@ typedef struct klu_common_struct
      * information). */
     void *user_data ;
 
-    int halt_if_singular ;	/* how to handle a singular matrix:
-	* FALSE: keep going.  Return a Numeric object with a zero U(k,k).  A
-	*   divide-by-zero may occur when computing L(:,k).  The Numeric object
-	*   can be passed to klu_solve (a divide-by-zero will occur).  It can
-	*   also be safely passed to klu_refactor.
-	* TRUE: stop quickly.  klu_factor will free the partially-constructed
-	*   Numeric object.  klu_refactor will not free it, but will leave the
-	*   numerical values only partially defined.  This is the default. */
+    int halt_if_singular ;      /* how to handle a singular matrix:
+        * FALSE: keep going.  Return a Numeric object with a zero U(k,k).  A
+        *   divide-by-zero may occur when computing L(:,k).  The Numeric object
+        *   can be passed to klu_solve (a divide-by-zero will occur).  It can
+        *   also be safely passed to klu_refactor.
+        * TRUE: stop quickly.  klu_factor will free the partially-constructed
+        *   Numeric object.  klu_refactor will not free it, but will leave the
+        *   numerical values only partially defined.  This is the default. */
 
     /* ---------------------------------------------------------------------- */
     /* statistics */
     /* ---------------------------------------------------------------------- */
 
-    int status ;	        /* KLU_OK if OK, < 0 if error */
-    int nrealloc ;		/* # of reallocations of L and U */
+    int status ;                /* KLU_OK if OK, < 0 if error */
+    int nrealloc ;              /* # of reallocations of L and U */
 
-    int structural_rank ;	/* 0 to n-1 if the matrix is structurally rank
-	* deficient (as determined by maxtrans).  -1 if not computed.  n if the
-	* matrix has full structural rank.  This is computed by klu_analyze
-	* if a BTF preordering is requested. */
+    int structural_rank ;       /* 0 to n-1 if the matrix is structurally rank
+        * deficient (as determined by maxtrans).  -1 if not computed.  n if the
+        * matrix has full structural rank.  This is computed by klu_analyze
+        * if a BTF preordering is requested. */
 
-    int numerical_rank ;	/* First k for which a zero U(k,k) was found,
-	* if the matrix was singular (in the range 0 to n-1).  n if the matrix
-	* has full rank. This is not a true rank-estimation.  It just reports
-	* where the first zero pivot was found.  -1 if not computed.
-	* Computed by klu_factor and klu_refactor. */
+    int numerical_rank ;        /* First k for which a zero U(k,k) was found,
+        * if the matrix was singular (in the range 0 to n-1).  n if the matrix
+        * has full rank. This is not a true rank-estimation.  It just reports
+        * where the first zero pivot was found.  -1 if not computed.
+        * Computed by klu_factor and klu_refactor. */
 
-    int singular_col ;		/* n if the matrix is not singular.  If in the
-	* range 0 to n-1, this is the column index of the original matrix A that
-	* corresponds to the column of U that contains a zero diagonal entry.
-	* -1 if not computed.  Computed by klu_factor and klu_refactor. */
+    int singular_col ;          /* n if the matrix is not singular.  If in the
+        * range 0 to n-1, this is the column index of the original matrix A that
+        * corresponds to the column of U that contains a zero diagonal entry.
+        * -1 if not computed.  Computed by klu_factor and klu_refactor. */
 
-    int noffdiag ;	/* # of off-diagonal pivots, -1 if not computed */
+    int noffdiag ;      /* # of off-diagonal pivots, -1 if not computed */
 
-    double flops ;	/* actual factorization flop count, from klu_flops */
-    double rcond ;	/* crude reciprocal condition est., from klu_rcond */
-    double condest ;	/* accurate condition est., from klu_condest */
-    double rgrowth ;	/* reciprocal pivot rgrowth, from klu_rgrowth */
-    double work ;	/* actual work done in BTF, in klu_analyze */
+    double flops ;      /* actual factorization flop count, from klu_flops */
+    double rcond ;      /* crude reciprocal condition est., from klu_rcond */
+    double condest ;    /* accurate condition est., from klu_condest */
+    double rgrowth ;    /* reciprocal pivot rgrowth, from klu_rgrowth */
+    double work ;       /* actual work done in BTF, in klu_analyze */
 
-    size_t memusage ;	/* current memory usage, in bytes */
-    size_t mempeak ;	/* peak memory usage, in bytes */
+    size_t memusage ;   /* current memory usage, in bytes */
+    size_t mempeak ;    /* peak memory usage, in bytes */
 
 } klu_common ;
 
@@ -216,17 +210,14 @@ typedef struct klu_l_common_struct /* 64-bit version (otherwise same as above)*/
 {
 
     double tol, memgrow, initmem_amd, initmem, maxwork ;
-    UF_long btf, ordering, scale ;
-    void *(*malloc_memory) (size_t) ;
-    void *(*realloc_memory) (void *, size_t) ;
-    void (*free_memory) (void *) ;
-    void *(*calloc_memory) (size_t, size_t) ;
-    UF_long (*user_order) (UF_long, UF_long *, UF_long *, UF_long *,
-	struct klu_l_common_struct *) ;
+    SuiteSparse_long btf, ordering, scale ;
+    SuiteSparse_long (*user_order) (SuiteSparse_long, SuiteSparse_long *,
+        SuiteSparse_long *, SuiteSparse_long *,
+        struct klu_l_common_struct *) ;
     void *user_data ;
-    UF_long halt_if_singular ;
-    UF_long status, nrealloc, structural_rank, numerical_rank, singular_col,
-	noffdiag ;
+    SuiteSparse_long halt_if_singular ;
+    SuiteSparse_long status, nrealloc, structural_rank, numerical_rank,
+        singular_col, noffdiag ;
     double flops, rcond, condest, rgrowth, work ;
     size_t memusage, mempeak ;
 
@@ -241,7 +232,7 @@ int klu_defaults
     klu_common *Common
 ) ;
 
-UF_long klu_l_defaults (klu_l_common *Common) ;
+SuiteSparse_long klu_l_defaults (klu_l_common *Common) ;
 
 /* -------------------------------------------------------------------------- */
 /* klu_analyze:  orders and analyzes a matrix */
@@ -253,14 +244,14 @@ UF_long klu_l_defaults (klu_l_common *Common) ;
 klu_symbolic *klu_analyze
 (
     /* inputs, not modified */
-    int n,		/* A is n-by-n */
-    int Ap [ ],		/* size n+1, column pointers */
-    int Ai [ ],		/* size nz, row indices */
+    int n,              /* A is n-by-n */
+    int Ap [ ],         /* size n+1, column pointers */
+    int Ai [ ],         /* size nz, row indices */
     klu_common *Common
 ) ;
 
-klu_l_symbolic *klu_l_analyze (UF_long, UF_long *, UF_long *,
-    klu_l_common *Common) ;
+klu_l_symbolic *klu_l_analyze (SuiteSparse_long, SuiteSparse_long *,
+    SuiteSparse_long *, klu_l_common *Common) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -274,28 +265,29 @@ klu_l_symbolic *klu_l_analyze (UF_long, UF_long *, UF_long *,
 klu_symbolic *klu_analyze_given
 (
     /* inputs, not modified */
-    int n,		/* A is n-by-n */
-    int Ap [ ],		/* size n+1, column pointers */
-    int Ai [ ],		/* size nz, row indices */
-    int P [ ],		/* size n, user's row permutation (may be NULL) */
-    int Q [ ],		/* size n, user's column permutation (may be NULL) */
+    int n,              /* A is n-by-n */
+    int Ap [ ],         /* size n+1, column pointers */
+    int Ai [ ],         /* size nz, row indices */
+    int P [ ],          /* size n, user's row permutation (may be NULL) */
+    int Q [ ],          /* size n, user's column permutation (may be NULL) */
     klu_common *Common
 ) ;
 
-klu_l_symbolic *klu_l_analyze_given (UF_long, UF_long *, UF_long *, UF_long *,
-    UF_long *, klu_l_common *) ;
+klu_l_symbolic *klu_l_analyze_given (SuiteSparse_long, SuiteSparse_long *,
+    SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *,
+    klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
 /* klu_factor:  factors a matrix using the klu_analyze results */
 /* -------------------------------------------------------------------------- */
 
-klu_numeric *klu_factor	/* returns KLU_OK if OK, < 0 if error */
+klu_numeric *klu_factor /* returns KLU_OK if OK, < 0 if error */
 (
     /* inputs, not modified */
-    int Ap [ ],		/* size n+1, column pointers */
-    int Ai [ ],		/* size nz, row indices */
-    double Ax [ ],	/* size nz, numerical values */
+    int Ap [ ],         /* size n+1, column pointers */
+    int Ai [ ],         /* size nz, row indices */
+    double Ax [ ],      /* size nz, numerical values */
     klu_symbolic *Symbolic,
     klu_common *Common
 ) ;
@@ -305,18 +297,18 @@ klu_numeric *klu_z_factor      /* returns KLU_OK if OK, < 0 if error */
      /* inputs, not modified */
      int Ap [ ],        /* size n+1, column pointers */
      int Ai [ ],        /* size nz, row indices */
-     double Ax [ ],	/* size 2*nz, numerical values (real,imag pairs) */
+     double Ax [ ],     /* size 2*nz, numerical values (real,imag pairs) */
      klu_symbolic *Symbolic,
      klu_common *Common
 ) ;
 
 /* long / real version */
-klu_l_numeric *klu_l_factor (UF_long *, UF_long *, double *, klu_l_symbolic *,
-    klu_l_common *) ;
+klu_l_numeric *klu_l_factor (SuiteSparse_long *, SuiteSparse_long *, double *,
+    klu_l_symbolic *, klu_l_common *) ;
 
 /* long / complex version */
-klu_l_numeric *klu_zl_factor (UF_long *, UF_long *, double *, klu_l_symbolic *,
-    klu_l_common *) ;
+klu_l_numeric *klu_zl_factor (SuiteSparse_long *, SuiteSparse_long *, double *,
+    klu_l_symbolic *, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -328,11 +320,11 @@ int klu_solve
     /* inputs, not modified */
     klu_symbolic *Symbolic,
     klu_numeric *Numeric,
-    int ldim,		    /* leading dimension of B */
-    int nrhs,		    /* number of right-hand-sides */
+    int ldim,               /* leading dimension of B */
+    int nrhs,               /* number of right-hand-sides */
 
     /* right-hand-side on input, overwritten with solution to Ax=b on output */
-    double B [ ],	    /* size ldim*nrhs */
+    double B [ ],           /* size ldim*nrhs */
     klu_common *Common
 ) ;
 
@@ -345,15 +337,15 @@ int klu_z_solve
      int nrhs,               /* number of right-hand-sides */
 
      /* right-hand-side on input, overwritten with solution to Ax=b on output */
-     double B [ ],	    /* size 2*ldim*nrhs */
+     double B [ ],          /* size 2*ldim*nrhs */
      klu_common *Common
 ) ;
 
-UF_long klu_l_solve (klu_l_symbolic *, klu_l_numeric *, UF_long, UF_long,
-    double *, klu_l_common *) ;
+SuiteSparse_long klu_l_solve (klu_l_symbolic *, klu_l_numeric *,
+    SuiteSparse_long, SuiteSparse_long, double *, klu_l_common *) ;
 
-UF_long klu_zl_solve (klu_l_symbolic *, klu_l_numeric *, UF_long, UF_long,
-    double *, klu_l_common *) ;
+SuiteSparse_long klu_zl_solve (klu_l_symbolic *, klu_l_numeric *,
+    SuiteSparse_long, SuiteSparse_long, double *, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -365,11 +357,11 @@ int klu_tsolve
     /* inputs, not modified */
     klu_symbolic *Symbolic,
     klu_numeric *Numeric,
-    int ldim,		    /* leading dimension of B */
-    int nrhs,		    /* number of right-hand-sides */
+    int ldim,               /* leading dimension of B */
+    int nrhs,               /* number of right-hand-sides */
 
     /* right-hand-side on input, overwritten with solution to Ax=b on output */
-    double B [ ],	    /* size ldim*nrhs */
+    double B [ ],           /* size ldim*nrhs */
     klu_common *Common
 ) ;
 
@@ -378,56 +370,57 @@ int klu_z_tsolve
     /* inputs, not modified */
     klu_symbolic *Symbolic,
     klu_numeric *Numeric,
-    int ldim,		    /* leading dimension of B */
-    int nrhs,		    /* number of right-hand-sides */
+    int ldim,               /* leading dimension of B */
+    int nrhs,               /* number of right-hand-sides */
 
     /* right-hand-side on input, overwritten with solution to Ax=b on output */
-    double B [ ],	    /* size 2*ldim*nrhs */
-    int conj_solve,	    /* TRUE: conjugate solve, FALSE: solve A.'x=b */
+    double B [ ],           /* size 2*ldim*nrhs */
+    int conj_solve,         /* TRUE: conjugate solve, FALSE: solve A.'x=b */
     klu_common *Common
      
 ) ;
 
-UF_long klu_l_tsolve (klu_l_symbolic *, klu_l_numeric *, UF_long, UF_long,
-    double *, klu_l_common *) ;
+SuiteSparse_long klu_l_tsolve (klu_l_symbolic *, klu_l_numeric *,
+    SuiteSparse_long, SuiteSparse_long, double *, klu_l_common *) ;
 
-UF_long klu_zl_tsolve (klu_l_symbolic *, klu_l_numeric *, UF_long, UF_long,
-    double *, UF_long, klu_l_common * ) ;
+SuiteSparse_long klu_zl_tsolve (klu_l_symbolic *, klu_l_numeric *,
+    SuiteSparse_long, SuiteSparse_long, double *, SuiteSparse_long,
+    klu_l_common * ) ;
 
 
 /* -------------------------------------------------------------------------- */
 /* klu_refactor: refactorizes matrix with same ordering as klu_factor */
 /* -------------------------------------------------------------------------- */
 
-int klu_refactor	    /* return TRUE if successful, FALSE otherwise */
+int klu_refactor            /* return TRUE if successful, FALSE otherwise */
 (
     /* inputs, not modified */
-    int Ap [ ],		/* size n+1, column pointers */
-    int Ai [ ],		/* size nz, row indices */
-    double Ax [ ],	/* size nz, numerical values */
+    int Ap [ ],         /* size n+1, column pointers */
+    int Ai [ ],         /* size nz, row indices */
+    double Ax [ ],      /* size nz, numerical values */
     klu_symbolic *Symbolic,
     /* input, and numerical values modified on output */
     klu_numeric *Numeric,
     klu_common *Common
 ) ;
 
-int klu_z_refactor	    /* return TRUE if successful, FALSE otherwise */
+int klu_z_refactor          /* return TRUE if successful, FALSE otherwise */
 (
      /* inputs, not modified */
-     int Ap [ ],	/* size n+1, column pointers */
-     int Ai [ ],	/* size nz, row indices */
-     double Ax [ ],	/* size 2*nz, numerical values */
+     int Ap [ ],        /* size n+1, column pointers */
+     int Ai [ ],        /* size nz, row indices */
+     double Ax [ ],     /* size 2*nz, numerical values */
      klu_symbolic *Symbolic,
      /* input, and numerical values modified on output */
      klu_numeric *Numeric,
      klu_common *Common
 ) ;
 
-UF_long klu_l_refactor (UF_long *, UF_long *, double *, klu_l_symbolic *,
-    klu_l_numeric *, klu_l_common *) ;
+SuiteSparse_long klu_l_refactor (SuiteSparse_long *, SuiteSparse_long *,
+    double *, klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
 
-UF_long klu_zl_refactor (UF_long *, UF_long *, double *, klu_l_symbolic *,
-    klu_l_numeric *, klu_l_common *) ;
+SuiteSparse_long klu_zl_refactor (SuiteSparse_long *, SuiteSparse_long *,
+    double *, klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -440,7 +433,7 @@ int klu_free_symbolic
     klu_common *Common
 ) ;
 
-UF_long klu_l_free_symbolic (klu_l_symbolic **, klu_l_common *) ;
+SuiteSparse_long klu_l_free_symbolic (klu_l_symbolic **, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -462,8 +455,8 @@ int klu_z_free_numeric
      klu_common *Common
 ) ;
 
-UF_long klu_l_free_numeric (klu_l_numeric **, klu_l_common *) ;
-UF_long klu_zl_free_numeric (klu_l_numeric **, klu_l_common *) ;
+SuiteSparse_long klu_l_free_numeric (klu_l_numeric **, klu_l_common *) ;
+SuiteSparse_long klu_zl_free_numeric (klu_l_numeric **, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -490,8 +483,10 @@ int klu_z_sort
     klu_common *Common
 ) ;
 
-UF_long klu_l_sort (klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
-UF_long klu_zl_sort (klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
+SuiteSparse_long klu_l_sort (klu_l_symbolic *, klu_l_numeric *,
+    klu_l_common *) ;
+SuiteSparse_long klu_zl_sort (klu_l_symbolic *, klu_l_numeric *,
+    klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -516,9 +511,10 @@ int klu_z_flops
     klu_common *Common
 ) ;
 
-UF_long klu_l_flops (klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
-UF_long klu_zl_flops (klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
-
+SuiteSparse_long klu_l_flops (klu_l_symbolic *, klu_l_numeric *,
+    klu_l_common *) ;
+SuiteSparse_long klu_zl_flops (klu_l_symbolic *, klu_l_numeric *,
+    klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -545,7 +541,7 @@ int klu_rgrowth
     double Ax [ ],
     klu_symbolic *Symbolic,
     klu_numeric *Numeric,
-    klu_common *Common		/* Common->rgrowth = reciprocal pivot growth */
+    klu_common *Common          /* Common->rgrowth = reciprocal pivot growth */
 ) ;
 
 int klu_z_rgrowth
@@ -555,14 +551,14 @@ int klu_z_rgrowth
     double Ax [ ],
     klu_symbolic *Symbolic,
     klu_numeric *Numeric,
-    klu_common *Common		/* Common->rgrowth = reciprocal pivot growth */
+    klu_common *Common          /* Common->rgrowth = reciprocal pivot growth */
 ) ;
 
-UF_long klu_l_rgrowth (UF_long *, UF_long *, double *, klu_l_symbolic *,
-    klu_l_numeric *, klu_l_common *) ;
+SuiteSparse_long klu_l_rgrowth (SuiteSparse_long *, SuiteSparse_long *,
+    double *, klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
 
-UF_long klu_zl_rgrowth (UF_long *, UF_long *, double *, klu_l_symbolic *,
-    klu_l_numeric *, klu_l_common *) ;
+SuiteSparse_long klu_zl_rgrowth (SuiteSparse_long *, SuiteSparse_long *,
+    double *, klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -575,27 +571,27 @@ UF_long klu_zl_rgrowth (UF_long *, UF_long *, double *, klu_l_symbolic *,
 
 int klu_condest
 (
-    int Ap [ ],		    /* size n+1, column pointers, not modified */
-    double Ax [ ],	    /* size nz = Ap[n], numerical values, not modified*/
+    int Ap [ ],             /* size n+1, column pointers, not modified */
+    double Ax [ ],          /* size nz = Ap[n], numerical values, not modified*/
     klu_symbolic *Symbolic, /* symbolic analysis, not modified */
     klu_numeric *Numeric,   /* numeric factorization, not modified */
-    klu_common *Common	    /* result returned in Common->condest */
+    klu_common *Common      /* result returned in Common->condest */
 ) ;
 
 int klu_z_condest
 (
     int Ap [ ],
-    double Ax [ ],	    /* size 2*nz */
+    double Ax [ ],          /* size 2*nz */
     klu_symbolic *Symbolic,
     klu_numeric *Numeric,
-    klu_common *Common	    /* result returned in Common->condest */
+    klu_common *Common      /* result returned in Common->condest */
 ) ;
 
-UF_long klu_l_condest (UF_long *, double *, klu_l_symbolic *, klu_l_numeric *,
-    klu_l_common *) ;
+SuiteSparse_long klu_l_condest (SuiteSparse_long *, double *, klu_l_symbolic *,
+    klu_l_numeric *, klu_l_common *) ;
 
-UF_long klu_zl_condest (UF_long *, double *, klu_l_symbolic *, klu_l_numeric *,
-    klu_l_common *) ;
+SuiteSparse_long klu_zl_condest (SuiteSparse_long *, double *, klu_l_symbolic *,
+    klu_l_numeric *, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
@@ -604,70 +600,73 @@ UF_long klu_zl_condest (UF_long *, double *, klu_l_symbolic *, klu_l_numeric *,
 
 int klu_rcond
 (
-    klu_symbolic *Symbolic,	    /* input, not modified */
-    klu_numeric *Numeric,	    /* input, not modified */
-    klu_common *Common		    /* result in Common->rcond */
+    klu_symbolic *Symbolic,         /* input, not modified */
+    klu_numeric *Numeric,           /* input, not modified */
+    klu_common *Common              /* result in Common->rcond */
 ) ;
 
 int klu_z_rcond
 (
-    klu_symbolic *Symbolic,	    /* input, not modified */
-    klu_numeric *Numeric,	    /* input, not modified */
-    klu_common *Common		    /* result in Common->rcond */
+    klu_symbolic *Symbolic,         /* input, not modified */
+    klu_numeric *Numeric,           /* input, not modified */
+    klu_common *Common              /* result in Common->rcond */
 ) ;
 
-UF_long klu_l_rcond (klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
-
-UF_long klu_zl_rcond (klu_l_symbolic *, klu_l_numeric *, klu_l_common *) ;
+SuiteSparse_long klu_l_rcond (klu_l_symbolic *, klu_l_numeric *,
+    klu_l_common *) ;
 
+SuiteSparse_long klu_zl_rcond (klu_l_symbolic *, klu_l_numeric *,
+    klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
 /* klu_scale */
 /* -------------------------------------------------------------------------- */
 
-int klu_scale		/* return TRUE if successful, FALSE otherwise */
+int klu_scale           /* return TRUE if successful, FALSE otherwise */
 (
     /* inputs, not modified */
-    int scale,		/* <0: none, no error check; 0: none, 1: sum, 2: max */
+    int scale,          /* <0: none, no error check; 0: none, 1: sum, 2: max */
     int n,
-    int Ap [ ],		/* size n+1, column pointers */
-    int Ai [ ],		/* size nz, row indices */
+    int Ap [ ],         /* size n+1, column pointers */
+    int Ai [ ],         /* size nz, row indices */
     double Ax [ ],
     /* outputs, not defined on input */
     double Rs [ ],
     /* workspace, not defined on input or output */
-    int W [ ],		/* size n, can be NULL */
+    int W [ ],          /* size n, can be NULL */
     klu_common *Common
 ) ;
 
-int klu_z_scale		/* return TRUE if successful, FALSE otherwise */
+int klu_z_scale         /* return TRUE if successful, FALSE otherwise */
 (
     /* inputs, not modified */
-    int scale,		/* <0: none, no error check; 0: none, 1: sum, 2: max */
+    int scale,          /* <0: none, no error check; 0: none, 1: sum, 2: max */
     int n,
-    int Ap [ ],		/* size n+1, column pointers */
-    int Ai [ ],		/* size nz, row indices */
+    int Ap [ ],         /* size n+1, column pointers */
+    int Ai [ ],         /* size nz, row indices */
     double Ax [ ],
     /* outputs, not defined on input */
     double Rs [ ],
     /* workspace, not defined on input or output */
-    int W [ ],		/* size n, can be NULL */
+    int W [ ],          /* size n, can be NULL */
     klu_common *Common
 ) ;
 
-UF_long klu_l_scale (UF_long, UF_long, UF_long *, UF_long *, double *,
-    double *, UF_long *, klu_l_common *) ;
+SuiteSparse_long klu_l_scale (SuiteSparse_long, SuiteSparse_long,
+    SuiteSparse_long *, SuiteSparse_long *, double *,
+    double *, SuiteSparse_long *, klu_l_common *) ;
 
-UF_long klu_zl_scale (UF_long, UF_long, UF_long *, UF_long *, double *,
-    double *, UF_long *, klu_l_common *) ;
+SuiteSparse_long klu_zl_scale (SuiteSparse_long, SuiteSparse_long,
+    SuiteSparse_long *, SuiteSparse_long *, double *,
+    double *, SuiteSparse_long *, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
 /* klu_extract  */
 /* -------------------------------------------------------------------------- */
 
-int klu_extract	    /* returns TRUE if successful, FALSE otherwise */
+int klu_extract     /* returns TRUE if successful, FALSE otherwise */
 (
     /* inputs: */
     klu_numeric *Numeric,
@@ -676,37 +675,37 @@ int klu_extract	    /* returns TRUE if successful, FALSE otherwise */
     /* outputs, either allocated on input, or ignored otherwise */
 
     /* L */
-    int *Lp,	    /* size n+1 */
-    int *Li,	    /* size Numeric->lnz */
-    double *Lx,	    /* size Numeric->lnz */
+    int *Lp,        /* size n+1 */
+    int *Li,        /* size Numeric->lnz */
+    double *Lx,     /* size Numeric->lnz */
 
     /* U */
-    int *Up,	    /* size n+1 */
-    int *Ui,	    /* size Numeric->unz */
-    double *Ux,	    /* size Numeric->unz */
+    int *Up,        /* size n+1 */
+    int *Ui,        /* size Numeric->unz */
+    double *Ux,     /* size Numeric->unz */
 
     /* F */
-    int *Fp,	    /* size n+1 */
-    int *Fi,	    /* size Numeric->nzoff */
-    double *Fx,	    /* size Numeric->nzoff */
+    int *Fp,        /* size n+1 */
+    int *Fi,        /* size Numeric->nzoff */
+    double *Fx,     /* size Numeric->nzoff */
 
     /* P, row permutation */
-    int *P,	    /* size n */
+    int *P,         /* size n */
 
     /* Q, column permutation */
-    int *Q,	    /* size n */
+    int *Q,         /* size n */
 
     /* Rs, scale factors */
-    double *Rs,	    /* size n */
+    double *Rs,     /* size n */
 
     /* R, block boundaries */
-    int *R,	    /* size Symbolic->nblocks+1 (nblocks is at most n) */
+    int *R,         /* size Symbolic->nblocks+1 (nblocks is at most n) */
 
     klu_common *Common
 ) ;
 
 
-int klu_z_extract	    /* returns TRUE if successful, FALSE otherwise */
+int klu_z_extract           /* returns TRUE if successful, FALSE otherwise */
 (
     /* inputs: */
     klu_numeric *Numeric,
@@ -715,82 +714,84 @@ int klu_z_extract	    /* returns TRUE if successful, FALSE otherwise */
     /* outputs, all of which must be allocated on input */
 
     /* L */
-    int *Lp,	    /* size n+1 */
-    int *Li,	    /* size nnz(L) */
-    double *Lx,	    /* size nnz(L) */
-    double *Lz,	    /* size nnz(L) for the complex case, ignored if real */
+    int *Lp,        /* size n+1 */
+    int *Li,        /* size nnz(L) */
+    double *Lx,     /* size nnz(L) */
+    double *Lz,     /* size nnz(L) for the complex case, ignored if real */
 
     /* U */
-    int *Up,	    /* size n+1 */
-    int *Ui,	    /* size nnz(U) */
-    double *Ux,	    /* size nnz(U) */
-    double *Uz,	    /* size nnz(U) for the complex case, ignored if real */
+    int *Up,        /* size n+1 */
+    int *Ui,        /* size nnz(U) */
+    double *Ux,     /* size nnz(U) */
+    double *Uz,     /* size nnz(U) for the complex case, ignored if real */
 
     /* F */
-    int *Fp,	    /* size n+1 */
-    int *Fi,	    /* size nnz(F) */
-    double *Fx,	    /* size nnz(F) */
-    double *Fz,	    /* size nnz(F) for the complex case, ignored if real */
+    int *Fp,        /* size n+1 */
+    int *Fi,        /* size nnz(F) */
+    double *Fx,     /* size nnz(F) */
+    double *Fz,     /* size nnz(F) for the complex case, ignored if real */
 
     /* P, row permutation */
-    int *P,	    /* size n */
+    int *P,         /* size n */
 
     /* Q, column permutation */
-    int *Q,	    /* size n */
+    int *Q,         /* size n */
 
     /* Rs, scale factors */
-    double *Rs,	    /* size n */
+    double *Rs,     /* size n */
 
     /* R, block boundaries */
-    int *R,	    /* size Symbolic->nblocks+1 (nblocks is at most n) */
+    int *R,         /* size Symbolic->nblocks+1 (nblocks is at most n) */
 
     klu_common *Common
 ) ;
 
-UF_long klu_l_extract (klu_l_numeric *, klu_l_symbolic *,
-    UF_long *, UF_long *, double *,
-    UF_long *, UF_long *, double *,
-    UF_long *, UF_long *, double *,
-    UF_long *, UF_long *, double *, UF_long *, klu_l_common *) ;
+SuiteSparse_long klu_l_extract (klu_l_numeric *, klu_l_symbolic *,
+    SuiteSparse_long *, SuiteSparse_long *, double *,
+    SuiteSparse_long *, SuiteSparse_long *, double *,
+    SuiteSparse_long *, SuiteSparse_long *, double *,
+    SuiteSparse_long *, SuiteSparse_long *, double *,
+    SuiteSparse_long *, klu_l_common *) ;
 
-UF_long klu_zl_extract (klu_l_numeric *, klu_l_symbolic *,
-    UF_long *, UF_long *, double *, double *,
-    UF_long *, UF_long *, double *, double *,
-    UF_long *, UF_long *, double *, double *,
-    UF_long *, UF_long *, double *, UF_long *, klu_l_common *) ;
+SuiteSparse_long klu_zl_extract (klu_l_numeric *, klu_l_symbolic *,
+    SuiteSparse_long *, SuiteSparse_long *, double *, double *,
+    SuiteSparse_long *, SuiteSparse_long *, double *, double *,
+    SuiteSparse_long *, SuiteSparse_long *, double *, double *,
+    SuiteSparse_long *, SuiteSparse_long *, double *,
+    SuiteSparse_long *, klu_l_common *) ;
 
 
 /* -------------------------------------------------------------------------- */
 /* KLU memory management routines */
 /* -------------------------------------------------------------------------- */
 
-void *klu_malloc	/* returns pointer to the newly malloc'd block */
+void *klu_malloc        /* returns pointer to the newly malloc'd block */
 (
     /* ---- input ---- */
-    size_t n,		/* number of items */
-    size_t size,	/* size of each item */
+    size_t n,           /* number of items */
+    size_t size,        /* size of each item */
     /* --------------- */
     klu_common *Common
 ) ;
 
-void *klu_free		/* always returns NULL */
+void *klu_free          /* always returns NULL */
 (
     /* ---- in/out --- */
-    void *p,		/* block of memory to free */
-    size_t n,		/* number of items */
-    size_t size,	/* size of each item */
+    void *p,            /* block of memory to free */
+    size_t n,           /* number of items */
+    size_t size,        /* size of each item */
     /* --------------- */
     klu_common *Common
 ) ;
 
-void *klu_realloc	/* returns pointer to reallocated block */
+void *klu_realloc       /* returns pointer to reallocated block */
 (
     /* ---- input ---- */
-    size_t nnew,	/* requested # of items in reallocated block */
-    size_t nold,	/* current size of block, in # of items */
-    size_t size,	/* size of each item */
+    size_t nnew,        /* requested # of items in reallocated block */
+    size_t nold,        /* current size of block, in # of items */
+    size_t size,        /* size of each item */
     /* ---- in/out --- */
-    void *p,		/* block of memory to realloc */
+    void *p,            /* block of memory to realloc */
     /* --------------- */
     klu_common *Common
 ) ;
@@ -807,22 +808,22 @@ void *klu_l_realloc (size_t, size_t, size_t, void *, klu_l_common *) ;
 /* All versions of KLU include these definitions.
  * As an example, to test if the version you are using is 1.2 or later:
  *
- *	if (KLU_VERSION >= KLU_VERSION_CODE (1,2)) ...
+ *      if (KLU_VERSION >= KLU_VERSION_CODE (1,2)) ...
  *
  * This also works during compile-time:
  *
- *	#if (KLU >= KLU_VERSION_CODE (1,2))
- *	    printf ("This is version 1.2 or later\n") ;
- *	#else
- *	    printf ("This is an early version\n") ;
- *	#endif
+ *      #if (KLU >= KLU_VERSION_CODE (1,2))
+ *          printf ("This is version 1.2 or later\n") ;
+ *      #else
+ *          printf ("This is an early version\n") ;
+ *      #endif
  */
 
-#define KLU_DATE "Nov 1, 2007"
+#define KLU_DATE "Oct 23, 2014"
 #define KLU_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
 #define KLU_MAIN_VERSION 1
-#define KLU_SUB_VERSION 0
-#define KLU_SUBSUB_VERSION 1
+#define KLU_SUB_VERSION 3
+#define KLU_SUBSUB_VERSION 2
 #define KLU_VERSION KLU_VERSION_CODE(KLU_MAIN_VERSION,KLU_SUB_VERSION)
 
 #ifdef __cplusplus
diff --git a/KLU/Include/klu_internal.h b/KLU/Include/klu_internal.h
index da73bc4..f3d63c8 100644
--- a/KLU/Include/klu_internal.h
+++ b/KLU/Include/klu_internal.h
@@ -47,8 +47,8 @@
 #define SCALAR_IS_NAN(x) ((x) != (x))
 
 /* true if an integer (stored in double x) would overflow (or if x is NaN) */
-#define INT_OVERFLOW(x) ((!((x) * (1.0+1e-8) <= (double) INT_MAX)) \
-			|| SCALAR_IS_NAN (x))
+#define INT_OVERFLOW(x) ((!((x) * (1.0+1e-8) <= (double) Int_MAX)) \
+                        || SCALAR_IS_NAN (x))
 
 #undef TRUE
 #undef FALSE
@@ -58,7 +58,7 @@
 #undef FLIP
 
 #ifndef NPRINT
-#define PRINTF(s) { printf s ; } ;
+#define PRINTF(s) SUITESPARSE_PRINTF (s)
 #else
 #define PRINTF(s)
 #endif
@@ -80,24 +80,24 @@
 size_t KLU_kernel   /* final size of LU on output */
 (
     /* input, not modified */
-    Int n,		/* A is n-by-n */
-    Int Ap [ ],		/* size n+1, column pointers for A */
-    Int Ai [ ],		/* size nz = Ap [n], row indices for A */
-    Entry Ax [ ],	/* size nz, values of A */
-    Int Q [ ],		/* size n, optional input permutation */
-    size_t lusize,	/* initial size of LU */
+    Int n,              /* A is n-by-n */
+    Int Ap [ ],         /* size n+1, column pointers for A */
+    Int Ai [ ],         /* size nz = Ap [n], row indices for A */
+    Entry Ax [ ],       /* size nz, values of A */
+    Int Q [ ],          /* size n, optional input permutation */
+    size_t lusize,      /* initial size of LU */
 
     /* output, not defined on input */
-    Int Pinv [ ],	/* size n */
-    Int P [ ],		/* size n */
-    Unit **p_LU,	/* size lusize on input, size Uxp[n] on output*/
-    Entry Udiag [ ],	/* size n, diagonal of U */
-    Int Llen [ ],	/* size n, column length of L */
-    Int Ulen [ ],	/* size n, column length of U */
-    Int Lip [ ],	/* size n+1 */
-    Int Uip [ ],	/* size n+1 */
-    Int *lnz,		/* size of L */
-    Int *unz,		/* size of U */
+    Int Pinv [ ],       /* size n */
+    Int P [ ],          /* size n */
+    Unit **p_LU,        /* size lusize on input, size Uxp[n] on output*/
+    Entry Udiag [ ],    /* size n, diagonal of U */
+    Int Llen [ ],       /* size n, column length of L */
+    Int Ulen [ ],       /* size n, column length of U */
+    Int Lip [ ],        /* size n+1 */
+    Int Uip [ ],        /* size n+1 */
+    Int *lnz,           /* size of L */
+    Int *unz,           /* size of U */
 
     /* workspace, not defined on input */
     Entry X [ ],   /* size n, zero on output */
@@ -105,59 +105,59 @@ size_t KLU_kernel   /* final size of LU on output */
     /* workspace, not defined on input or output */
     Int Stack [ ],  /* size n */
     Int Flag [ ],   /* size n */
-    Int adj_pos [ ],	/* size n */
+    Int adj_pos [ ],    /* size n */
     
     /* workspace for pruning only */
-    Int Lpend [ ],	/* size n workspace */
+    Int Lpend [ ],      /* size n workspace */
 
     /* inputs, not modified on output */
-    Int k1,	    	/* the block of A is from k1 to k2-1 */
-    Int PSinv [ ],  	/* inverse of P from symbolic factorization */
-    double Rs [ ],  	/* scale factors for A */
+    Int k1,             /* the block of A is from k1 to k2-1 */
+    Int PSinv [ ],      /* inverse of P from symbolic factorization */
+    double Rs [ ],      /* scale factors for A */
 
     /* inputs, modified on output */
     Int Offp [ ],   /* off-diagonal matrix (modified by this routine) */
     Int Offi [ ],
     Entry Offx [ ],
-    KLU_common *Common	/* the control input/output structure */
+    KLU_common *Common  /* the control input/output structure */
 ) ;
 
 
-size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
+size_t KLU_kernel_factor            /* 0 if failure, size of LU if OK */
 (
     /* inputs, not modified */
-    Int n,	    /* A is n-by-n. n must be > 0. */
-    Int Ap [ ],	    /* size n+1, column pointers for A */
-    Int Ai [ ],	    /* size nz = Ap [n], row indices for A */
+    Int n,          /* A is n-by-n. n must be > 0. */
+    Int Ap [ ],     /* size n+1, column pointers for A */
+    Int Ai [ ],     /* size nz = Ap [n], row indices for A */
     Entry Ax [ ],   /* size nz, values of A */
-    Int Q [ ],	    /* size n, optional column permutation */
+    Int Q [ ],      /* size n, optional column permutation */
     double Lsize,   /* initial size of L and U */
 
     /* outputs, not defined on input */
-    Unit **p_LU,	/* row indices and values of L and U */
-    Entry Udiag [ ],	/* size n, diagonal of U */
-    Int Llen [ ],	/* size n, column length of L */
-    Int Ulen [ ],	/* size n, column length of U */
-    Int Lip [ ],	/* size n+1, column pointers of L */
-    Int Uip [ ],	/* size n+1, column pointers of U */
-    Int P [ ],	        /* row permutation, size n */
-    Int *lnz,	   	/* size of L */
-    Int *unz,	    	/* size of U */
+    Unit **p_LU,        /* row indices and values of L and U */
+    Entry Udiag [ ],    /* size n, diagonal of U */
+    Int Llen [ ],       /* size n, column length of L */
+    Int Ulen [ ],       /* size n, column length of U */
+    Int Lip [ ],        /* size n+1, column pointers of L */
+    Int Uip [ ],        /* size n+1, column pointers of U */
+    Int P [ ],          /* row permutation, size n */
+    Int *lnz,           /* size of L */
+    Int *unz,           /* size of U */
 
     /* workspace, undefined on input */
-    Entry *X,	    /* size n entries.  Zero on output */
-    Int *Work,	    /* size 5n Int's */
+    Entry *X,       /* size n entries.  Zero on output */
+    Int *Work,      /* size 5n Int's */
 
     /* inputs, not modified on output */
-    Int k1,	    	/* the block of A is from k1 to k2-1 */
-    Int PSinv [ ],  	/* inverse of P from symbolic factorization */
-    double Rs [ ],  	/* scale factors for A */
+    Int k1,             /* the block of A is from k1 to k2-1 */
+    Int PSinv [ ],      /* inverse of P from symbolic factorization */
+    double Rs [ ],      /* scale factors for A */
 
     /* inputs, modified on output */
     Int Offp [ ],   /* off-diagonal matrix (modified by this routine) */
     Int Offi [ ],
     Entry Offx [ ],
-    KLU_common *Common	/* the control input/output structure */
+    KLU_common *Common  /* the control input/output structure */
 ) ;
 
 void KLU_lsolve
diff --git a/KLU/Include/klu_version.h b/KLU/Include/klu_version.h
index 13fde51..e762a43 100644
--- a/KLU/Include/klu_version.h
+++ b/KLU/Include/klu_version.h
@@ -2,9 +2,9 @@
 #define _KLU_VERSION_H
 
 #ifdef DLONG
-#define Int UF_long
-#define Int_id UF_long_id
-#define Int_MAX UF_long_max
+#define Int SuiteSparse_long
+#define Int_id SuiteSparse_long_id
+#define Int_MAX SuiteSparse_long_max
 #else
 #define Int int
 #define Int_id "%d"
@@ -218,10 +218,10 @@ SCALAR_IS_LTZERO(x):
 
 /* These all work properly, according to the IEEE 754 standard ... except on */
 /* a PC with windows.  Works fine in Linux on the same PC... */
-#define SCALAR_IS_NAN(x)	((x) != (x))
-#define SCALAR_IS_ZERO(x)	((x) == 0.)
-#define SCALAR_IS_NONZERO(x)	((x) != 0.)
-#define SCALAR_IS_LTZERO(x)	((x) < 0.)
+#define SCALAR_IS_NAN(x)        ((x) != (x))
+#define SCALAR_IS_ZERO(x)       ((x) == 0.)
+#define SCALAR_IS_NONZERO(x)    ((x) != 0.)
+#define SCALAR_IS_LTZERO(x)     ((x) < 0.)
 
 
 /* scalar absolute value macro. If x is NaN, the result is NaN: */
@@ -235,11 +235,11 @@ SCALAR_IS_LTZERO(x):
 { \
     if (SCALAR_IS_NONZERO (a)) \
     { \
-	PRINTF ((" (%g)", (a))) ; \
+        PRINTF ((" (%g)", (a))) ; \
     } \
     else \
     { \
-	PRINTF ((" (0)")) ; \
+        PRINTF ((" (0)")) ; \
     } \
 }
 #endif
@@ -253,41 +253,41 @@ SCALAR_IS_LTZERO(x):
 typedef double Unit ;
 #define Entry double
 
-#define SPLIT(s)    		    (1)
-#define REAL(c)			    (c)
-#define IMAG(c)			    (0.)
-#define ASSIGN(c,s1,s2,p,split)	    { (c) = (s1)[p] ; }
-#define CLEAR(c)		    { (c) = 0. ; }
-#define CLEAR_AND_INCREMENT(p)	    { *p++ = 0. ; }
-#define IS_NAN(a)		    SCALAR_IS_NAN (a)
-#define IS_ZERO(a)		    SCALAR_IS_ZERO (a)
-#define IS_NONZERO(a)		    SCALAR_IS_NONZERO (a)
-#define SCALE_DIV(c,s)		    { (c) /= (s) ; }
-#define SCALE_DIV_ASSIGN(a,c,s)	    { a = c / s ; }
-#define SCALE(c,s)		    { (c) *= (s) ; }
-#define ASSEMBLE(c,a)		    { (c) += (a) ; }
+#define SPLIT(s)                    (1)
+#define REAL(c)                     (c)
+#define IMAG(c)                     (0.)
+#define ASSIGN(c,s1,s2,p,split)     { (c) = (s1)[p] ; }
+#define CLEAR(c)                    { (c) = 0. ; }
+#define CLEAR_AND_INCREMENT(p)      { *p++ = 0. ; }
+#define IS_NAN(a)                   SCALAR_IS_NAN (a)
+#define IS_ZERO(a)                  SCALAR_IS_ZERO (a)
+#define IS_NONZERO(a)               SCALAR_IS_NONZERO (a)
+#define SCALE_DIV(c,s)              { (c) /= (s) ; }
+#define SCALE_DIV_ASSIGN(a,c,s)     { a = c / s ; }
+#define SCALE(c,s)                  { (c) *= (s) ; }
+#define ASSEMBLE(c,a)               { (c) += (a) ; }
 #define ASSEMBLE_AND_INCREMENT(c,p) { (c) += *p++ ; }
-#define DECREMENT(c,a)		    { (c) -= (a) ; }
-#define MULT(c,a,b)		    { (c) = (a) * (b) ; }
-#define MULT_CONJ(c,a,b)	    { (c) = (a) * (b) ; }
-#define MULT_SUB(c,a,b)		    { (c) -= (a) * (b) ; }
-#define MULT_SUB_CONJ(c,a,b)	    { (c) -= (a) * (b) ; }
-#define DIV(c,a,b)		    { (c) = (a) / (b) ; }
-#define RECIPROCAL(c)		    { (c) = 1.0 / (c) ; }
-#define DIV_CONJ(c,a,b)		    { (c) = (a) / (b) ; }
-#define APPROX_ABS(s,a)		    { (s) = SCALAR_ABS (a) ; }
-#define ABS(s,a)		    { (s) = SCALAR_ABS (a) ; }
-#define PRINT_ENTRY(a)		    PRINT_SCALAR (a)
-#define CONJ(a,x)		    a = x
+#define DECREMENT(c,a)              { (c) -= (a) ; }
+#define MULT(c,a,b)                 { (c) = (a) * (b) ; }
+#define MULT_CONJ(c,a,b)            { (c) = (a) * (b) ; }
+#define MULT_SUB(c,a,b)             { (c) -= (a) * (b) ; }
+#define MULT_SUB_CONJ(c,a,b)        { (c) -= (a) * (b) ; }
+#define DIV(c,a,b)                  { (c) = (a) / (b) ; }
+#define RECIPROCAL(c)               { (c) = 1.0 / (c) ; }
+#define DIV_CONJ(c,a,b)             { (c) = (a) / (b) ; }
+#define APPROX_ABS(s,a)             { (s) = SCALAR_ABS (a) ; }
+#define ABS(s,a)                    { (s) = SCALAR_ABS (a) ; }
+#define PRINT_ENTRY(a)              PRINT_SCALAR (a)
+#define CONJ(a,x)                   a = x
 
 /* for flop counts */
-#define MULTSUB_FLOPS	2.	/* c -= a*b */
-#define DIV_FLOPS	1.	/* c = a/b */
-#define ABS_FLOPS	0.	/* c = abs (a) */
-#define ASSEMBLE_FLOPS	1.	/* c += a */
-#define DECREMENT_FLOPS	1.	/* c -= a */
-#define MULT_FLOPS	1.	/* c = a*b */
-#define SCALE_FLOPS	1.	/* c = a/s */
+#define MULTSUB_FLOPS   2.      /* c -= a*b */
+#define DIV_FLOPS       1.      /* c = a/b */
+#define ABS_FLOPS       0.      /* c = abs (a) */
+#define ASSEMBLE_FLOPS  1.      /* c += a */
+#define DECREMENT_FLOPS 1.      /* c -= a */
+#define MULT_FLOPS      1.      /* c = a*b */
+#define SCALE_FLOPS     1.      /* c = a/s */
 
 #else
 
@@ -321,7 +321,7 @@ typedef double Unit ;
 
 typedef struct
 {
-    double component [2] ;	/* real and imaginary parts */
+    double component [2] ;      /* real and imaginary parts */
 
 } Double_Complex ;
 
@@ -331,13 +331,13 @@ typedef Double_Complex Unit ;
 #define Imag component [1]
 
 /* for flop counts */
-#define MULTSUB_FLOPS	8.	/* c -= a*b */
-#define DIV_FLOPS	9.	/* c = a/b */
-#define ABS_FLOPS	6.	/* c = abs (a), count sqrt as one flop */
-#define ASSEMBLE_FLOPS	2.	/* c += a */
-#define DECREMENT_FLOPS	2.	/* c -= a */
-#define MULT_FLOPS	6.	/* c = a*b */
-#define SCALE_FLOPS	2.	/* c = a/s or c = a*s */
+#define MULTSUB_FLOPS   8.      /* c -= a*b */
+#define DIV_FLOPS       9.      /* c = a/b */
+#define ABS_FLOPS       6.      /* c = abs (a), count sqrt as one flop */
+#define ASSEMBLE_FLOPS  2.      /* c += a */
+#define DECREMENT_FLOPS 2.      /* c -= a */
+#define MULT_FLOPS      6.      /* c = a*b */
+#define SCALE_FLOPS     2.      /* c = a/s or c = a*s */
 
 /* -------------------------------------------------------------------------- */
 
@@ -356,7 +356,7 @@ typedef Double_Complex Unit ;
 
 /* c = (s1) + (s2)*i, if s2 is null, then X is in "packed" format (compatible
  * with Entry and ANSI C99 double _Complex type).  */
-/*#define ASSIGN(c,s1,s2,p,split)	\
+/*#define ASSIGN(c,s1,s2,p,split)       \
 { \
     if (split) \
     { \
@@ -365,7 +365,7 @@ typedef Double_Complex Unit ;
     }  \
     else \
     { \
- 	(c) = ((Entry *)(s1))[p] ; \
+        (c) = ((Entry *)(s1))[p] ; \
     }  \
 }*/
 
@@ -511,7 +511,7 @@ typedef Double_Complex Unit ;
 #define DIV(c,a,b) \
 { \
     (void) utDivideComplex ((a).Real, (a).Imag, (b).Real, (b).Imag, \
-	&((c).Real), &((c).Imag)) ; \
+        &((c).Real), &((c).Imag)) ; \
 }
 #else
 /* This uses ACM Algo 116, by R. L. Smith, 1962. */
@@ -526,17 +526,17 @@ typedef Double_Complex Unit ;
     ai = (a).Imag ; \
     if (SCALAR_ABS (br) >= SCALAR_ABS (bi)) \
     { \
-	r = bi / br ; \
-	den = br + r * bi ; \
-	(c).Real = (ar + ai * r) / den ; \
-	(c).Imag = (ai - ar * r) / den ; \
+        r = bi / br ; \
+        den = br + r * bi ; \
+        (c).Real = (ar + ai * r) / den ; \
+        (c).Imag = (ai - ar * r) / den ; \
     } \
     else \
     { \
-	r = br / bi ; \
-	den = r * br + bi ; \
-	(c).Real = (ar * r + ai) / den ; \
-	(c).Imag = (ai * r - ar) / den ; \
+        r = br / bi ; \
+        den = r * br + bi ; \
+        (c).Real = (ar * r + ai) / den ; \
+        (c).Imag = (ai * r - ar) / den ; \
     } \
 }
 #endif
@@ -554,17 +554,17 @@ typedef Double_Complex Unit ;
     ci = (c).Imag ; \
     if (SCALAR_ABS (cr) >= SCALAR_ABS (ci)) \
     { \
-	r = ci / cr ; \
-	den = cr + r * ci ; \
-	(c).Real = 1.0 / den ; \
-	(c).Imag = - r / den ; \
+        r = ci / cr ; \
+        den = cr + r * ci ; \
+        (c).Real = 1.0 / den ; \
+        (c).Imag = - r / den ; \
     } \
     else \
     { \
-	r = cr / ci ; \
-	den = r * cr + ci ; \
-	(c).Real = r / den ; \
-	(c).Imag = - 1.0 / den ; \
+        r = cr / ci ; \
+        den = r * cr + ci ; \
+        (c).Real = r / den ; \
+        (c).Imag = - 1.0 / den ; \
     } \
 }
 
@@ -576,7 +576,7 @@ typedef Double_Complex Unit ;
 #define DIV_CONJ(c,a,b) \
 { \
     (void) utDivideComplex ((a).Real, (a).Imag, (b).Real, (-(b).Imag), \
-	&((c).Real), &((c).Imag)) ; \
+        &((c).Real), &((c).Imag)) ; \
 }
 #else
 /* This uses ACM Algo 116, by R. L. Smith, 1962. */
@@ -591,17 +591,17 @@ typedef Double_Complex Unit ;
     ai = (a).Imag ; \
     if (SCALAR_ABS (br) >= SCALAR_ABS (bi)) \
     { \
-	r = (-bi) / br ; \
-	den = br - r * bi ; \
-	(c).Real = (ar + ai * r) / den ; \
-	(c).Imag = (ai - ar * r) / den ; \
+        r = (-bi) / br ; \
+        den = br - r * bi ; \
+        (c).Real = (ar + ai * r) / den ; \
+        (c).Imag = (ai - ar * r) / den ; \
     } \
     else \
     { \
-	r = br / (-bi) ; \
-	den =  r * br - bi; \
-	(c).Real = (ar * r + ai) / den ; \
-	(c).Imag = (ai * r - ar) / den ; \
+        r = br / (-bi) ; \
+        den =  r * br - bi; \
+        (c).Real = (ar * r + ai) / den ; \
+        (c).Imag = (ai * r - ar) / den ; \
     } \
 }
 #endif
@@ -631,27 +631,27 @@ typedef Double_Complex Unit ;
     ai = SCALAR_ABS ((a).Imag) ; \
     if (ar >= ai) \
     { \
-	if (ar + ai == ar) \
-	{ \
-	    (s) = ar ; \
-	} \
-	else \
-	{ \
-	    r = ai / ar ; \
-	    (s) = ar * sqrt (1.0 + r*r) ; \
-	} \
+        if (ar + ai == ar) \
+        { \
+            (s) = ar ; \
+        } \
+        else \
+        { \
+            r = ai / ar ; \
+            (s) = ar * sqrt (1.0 + r*r) ; \
+        } \
     } \
     else \
     { \
-	if (ai + ar == ai) \
-	{ \
-	    (s) = ai ; \
-	} \
-	else \
-	{ \
-	    r = ar / ai ; \
-	    (s) = ai * sqrt (1.0 + r*r) ; \
-	} \
+        if (ai + ar == ai) \
+        { \
+            (s) = ai ; \
+        } \
+        else \
+        { \
+            r = ar / ai ; \
+            (s) = ai * sqrt (1.0 + r*r) ; \
+        } \
     } \
 }
 #endif
@@ -666,29 +666,29 @@ typedef Double_Complex Unit ;
 { \
     if (SCALAR_IS_NONZERO ((a).Real)) \
     { \
-	PRINTF ((" (%g", (a).Real)) ; \
+        PRINTF ((" (%g", (a).Real)) ; \
     } \
     else \
     { \
-	PRINTF ((" (0")) ; \
+        PRINTF ((" (0")) ; \
     } \
     if (SCALAR_IS_LTZERO ((a).Imag)) \
     { \
-	PRINTF ((" - %gi)", -(a).Imag)) ; \
+        PRINTF ((" - %gi)", -(a).Imag)) ; \
     } \
     else if (SCALAR_IS_ZERO ((a).Imag)) \
     { \
-	PRINTF ((" + 0i)")) ; \
+        PRINTF ((" + 0i)")) ; \
     } \
     else \
     { \
-	PRINTF ((" + %gi)", (a).Imag)) ; \
+        PRINTF ((" + %gi)", (a).Imag)) ; \
     } \
 }
 #endif
 
 /* -------------------------------------------------------------------------- */
 
-#endif	/* #ifndef COMPLEX */
+#endif  /* #ifndef COMPLEX */
 
 #endif
diff --git a/KLU/Lib/Makefile b/KLU/Lib/Makefile
index 8b0fdfc..7dc44b6 100644
--- a/KLU/Lib/Makefile
+++ b/KLU/Lib/Makefile
@@ -2,18 +2,18 @@ default: all
 
 ccode: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 # for testing only:
 # TEST = -DTESTING
 
-C = $(CC) $(CFLAGS)
+C = $(CC) $(CF)
 
 INC = ../Include/klu.h ../Include/klu_internal.h ../Include/klu_version.h \
-    ../../UFconfig/UFconfig.h Makefile
+    ../../SuiteSparse_config/SuiteSparse_config.h Makefile
 
 I = -I../../AMD/Include -I../../COLAMD/Include -I../../BTF/Include \
-    -I../Include -I../../UFconfig
+    -I../Include -I../../SuiteSparse_config
 
 all: library
 
@@ -48,8 +48,8 @@ COMMON = \
 OBJ = $(COMMON) $(KLU_D) $(KLU_Z) $(KLU_L) $(KLU_ZL)
 
 libklu.a: $(OBJ)
-	$(AR) libklu.a $(OBJ)
-	$(RANLIB) libklu.a
+	$(ARCHIVE)  libklu.a $(OBJ)
+	- $(RANLIB) libklu.a
 
 $(OBJ): $(INC)
 
diff --git a/KLU/MATLAB/Contents.m b/KLU/MATLAB/Contents.m
index e8dcfd9..ee6c180 100644
--- a/KLU/MATLAB/Contents.m
+++ b/KLU/MATLAB/Contents.m
@@ -11,6 +11,6 @@
 %   x = klu (A, '\', b) ;
 %   x = klu (LU, '\', b) ;
 %
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
+% Copyright 2004-2009, Univ. of Florida
 % KLU Version 1.0.
 
diff --git a/KLU/MATLAB/Makefile b/KLU/MATLAB/Makefile
deleted file mode 100644
index 0be69ca..0000000
--- a/KLU/MATLAB/Makefile
+++ /dev/null
@@ -1,699 +0,0 @@
-#===============================================================================
-# KLU/MATLAB/Makefile
-#===============================================================================
-
-default: all
-
-include ../../UFconfig/UFconfig.mk
-
-# with CHOLMOD and supporting functions (CAMD, CCOLAMD, METIS)
-I = -I. -I../../AMD/Include -I../../COLAMD/Include \
-    -I../Include -I../../UFconfig -I../../BTF/Include -I../User \
-    -I../../CCOLAMD/Include -I../../CAMD/Include \
-    -I$(METIS_PATH)/Lib -I../../CHOLMOD/Include
-
-all: klu
-
-MX = $(MEX) -DDLONG -DNLARGEFILE $(I)
-
-distclean: purge
-
-purge: clean
-	- $(RM) *.mex* rename.h
-
-clean:
-	- $(RM) $(CLEAN)
-
-#===============================================================================
-
-AMD_INC = ../../AMD/Include/amd.h ../../AMD/Include/amd_internal.h
-
-AMD = \
-	amd_1.o \
-	amd_2.o \
-	amd_aat.o \
-	amd_control.o \
-	amd_defaults.o \
-	amd_dump.o \
-	amd_global.o \
-	amd_info.o \
-	amd_order.o \
-	amd_postorder.o \
-	amd_post_tree.o \
-	amd_preprocess.o \
-	amd_valid.o
-
-$(AMD): $(AMD_INC)
-amd_1.o: ../../AMD/Source/amd_1.c
-	$(MX) -c $<
-
-amd_2.o: ../../AMD/Source/amd_2.c
-	$(MX) -c $<
-
-amd_aat.o: ../../AMD/Source/amd_aat.c
-	$(MX) -c $<
-
-amd_control.o: ../../AMD/Source/amd_control.c
-	$(MX) -c $<
-
-amd_defaults.o: ../../AMD/Source/amd_defaults.c
-	$(MX) -c $<
-
-amd_dump.o: ../../AMD/Source/amd_dump.c
-	$(MX) -c $<
-
-amd_global.o: ../../AMD/Source/amd_global.c
-	$(MX) -c $<
-
-amd_info.o: ../../AMD/Source/amd_info.c
-	$(MX) -c $<
-
-amd_order.o: ../../AMD/Source/amd_order.c
-	$(MX) -c $<
-
-amd_postorder.o: ../../AMD/Source/amd_postorder.c
-	$(MX) -c $<
-
-amd_post_tree.o: ../../AMD/Source/amd_post_tree.c
-	$(MX) -c $<
-
-amd_preprocess.o: ../../AMD/Source/amd_preprocess.c
-	$(MX) -c $<
-
-amd_valid.o: ../../AMD/Source/amd_valid.c
-	$(MX) -c $<
-
-#===============================================================================
-
-CAMD_INC = ../../CAMD/Include/camd.h ../../CAMD/Include/camd_internal.h
-
-CAMD = \
-	camd_1.o \
-	camd_2.o \
-	camd_aat.o \
-	camd_control.o \
-	camd_defaults.o \
-	camd_dump.o \
-	camd_global.o \
-	camd_info.o \
-	camd_order.o \
-	camd_postorder.o \
-	camd_preprocess.o \
-	camd_valid.o
-
-$(CAMD): $(CAMD_INC)
-
-camd_1.o: ../../CAMD/Source/camd_1.c
-	$(MX) -c $<
-
-camd_2.o: ../../CAMD/Source/camd_2.c
-	$(MX) -c $<
-
-camd_aat.o: ../../CAMD/Source/camd_aat.c
-	$(MX) -c $<
-
-camd_control.o: ../../CAMD/Source/camd_control.c
-	$(MX) -c $<
-
-camd_defaults.o: ../../CAMD/Source/camd_defaults.c
-	$(MX) -c $<
-
-camd_dump.o: ../../CAMD/Source/camd_dump.c
-	$(MX) -c $<
-
-camd_global.o: ../../CAMD/Source/camd_global.c
-	$(MX) -c $<
-
-camd_info.o: ../../CAMD/Source/camd_info.c
-	$(MX) -c $<
-
-camd_order.o: ../../CAMD/Source/camd_order.c
-	$(MX) -c $<
-
-camd_postorder.o: ../../CAMD/Source/camd_postorder.c
-	$(MX) -c $<
-
-camd_post_tree.o: ../../CAMD/Source/camd_post_tree.c
-	$(MX) -c $<
-
-camd_preprocess.o: ../../CAMD/Source/camd_preprocess.c
-	$(MX) -c $<
-
-camd_valid.o: ../../CAMD/Source/camd_valid.c
-	$(MX) -c $<
-
-#===============================================================================
-
-COLAMD_INC = ../../COLAMD/Include/colamd.h
-
-COLAMD = colamd.o colamd_global.o
-
-$(COLAMD): $(COLAMD_INC)
-
-colamd.o: ../../COLAMD/Source/colamd.c
-	$(MX) -c $<
-
-colamd_global.o: ../../COLAMD/Source/colamd_global.c
-	$(MX) -c $<
-
-#===============================================================================
-
-CCOLAMD_INC = ../../CCOLAMD/Include/ccolamd.h
-
-CCOLAMD = ccolamd.o ccolamd_global.o
-
-$(CCOLAMD): $(CCOLAMD_INC)
-
-ccolamd.o: ../../CCOLAMD/Source/ccolamd.c
-	$(MX) -c $<
-
-ccolamd_global.o: ../../CCOLAMD/Source/ccolamd_global.c
-	$(MX) -c $<
-
-#===============================================================================
-
-# patch METIS 4.0.1
-rename.h: $(METIS_PATH)/Lib/rename.h
-	echo '/* do not edit this file; generated by KLU/MATLAB/Makefile */' > rename.h
-	echo '#undef log2' >> rename.h
-	echo '#include "$(METIS_PATH)/Lib/rename.h"' >> rename.h
-	echo '#undef log2' >> rename.h
-	echo '#define log2 METIS__log2' >> rename.h
-	echo '#include "mex.h"' >> rename.h
-	echo '#define malloc mxMalloc' >> rename.h
-	echo '#define free mxFree' >> rename.h
-	echo '#define calloc mxCalloc' >> rename.h
-	echo '#define realloc mxRealloc' >> rename.h
-
-METIS_INC = rename.h \
-	$(METIS_PATH)/Lib/defs.h \
-	$(METIS_PATH)/Lib/macros.h \
-	$(METIS_PATH)/Lib/metis.h \
-	$(METIS_PATH)/Lib/proto.h \
-	$(METIS_PATH)/Lib/rename.h \
-	$(METIS_PATH)/Lib/struct.h 
-
-METIS = \
-	balance.o \
-	bucketsort.o \
-	ccgraph.o \
-	coarsen.o \
-	compress.o \
-	debug.o \
-	estmem.o \
-	fm.o \
-	fortran.o \
-	frename.o \
-	graph.o \
-	initpart.o \
-	kmetis.o \
-	kvmetis.o \
-	kwayfm.o \
-	kwayrefine.o \
-	kwayvolfm.o \
-	kwayvolrefine.o \
-	match.o \
-	mbalance2.o \
-	mbalance.o \
-	mcoarsen.o \
-	memory.o \
-	mesh.o \
-	meshpart.o \
-	mfm2.o \
-	mfm.o \
-	mincover.o \
-	minitpart2.o \
-	minitpart.o \
-	mkmetis.o \
-	mkwayfmh.o \
-	mkwayrefine.o \
-	mmatch.o \
-	mmd.o \
-	mpmetis.o \
-	mrefine2.o \
-	mrefine.o \
-	mutil.o \
-	myqsort.o \
-	ometis.o \
-	parmetis.o \
-	pmetis.o \
-	pqueue.o \
-	refine.o \
-	separator.o \
-	sfm.o \
-	srefine.o \
-	stat.o \
-	subdomains.o \
-	timing.o \
-	util.o
-
-$(METIS): $(METIS_INC)
-
-balance.o: $(METIS_PATH)/Lib/balance.c
-	$(MX) -c $<
-
-bucketsort.o: $(METIS_PATH)/Lib/bucketsort.c
-	$(MX) -c $<
-
-ccgraph.o: $(METIS_PATH)/Lib/ccgraph.c
-	$(MX) -c $<
-
-coarsen.o: $(METIS_PATH)/Lib/coarsen.c
-	$(MX) -c $<
-
-compress.o: $(METIS_PATH)/Lib/compress.c
-	$(MX) -c $<
-
-debug.o: $(METIS_PATH)/Lib/debug.c
-	$(MX) -c $<
-
-estmem.o: $(METIS_PATH)/Lib/estmem.c
-	$(MX) -c $<
-
-fm.o: $(METIS_PATH)/Lib/fm.c
-	$(MX) -c $<
-
-fortran.o: $(METIS_PATH)/Lib/fortran.c
-	$(MX) -c $<
-
-frename.o: $(METIS_PATH)/Lib/frename.c
-	$(MX) -c $<
-
-graph.o: $(METIS_PATH)/Lib/graph.c
-	$(MX) -c $<
-
-initpart.o: $(METIS_PATH)/Lib/initpart.c
-	$(MX) -c $<
-
-kmetis.o: $(METIS_PATH)/Lib/kmetis.c
-	$(MX) -c $<
-
-kvmetis.o: $(METIS_PATH)/Lib/kvmetis.c
-	$(MX) -c $<
-
-kwayfm.o: $(METIS_PATH)/Lib/kwayfm.c
-	$(MX) -c $<
-
-kwayrefine.o: $(METIS_PATH)/Lib/kwayrefine.c
-	$(MX) -c $<
-
-kwayvolfm.o: $(METIS_PATH)/Lib/kwayvolfm.c
-	$(MX) -c $<
-
-kwayvolrefine.o: $(METIS_PATH)/Lib/kwayvolrefine.c
-	$(MX) -c $<
-
-match.o: $(METIS_PATH)/Lib/match.c
-	$(MX) -c $<
-
-mbalance2.o: $(METIS_PATH)/Lib/mbalance2.c
-	$(MX) -c $<
-
-mbalance.o: $(METIS_PATH)/Lib/mbalance.c
-	$(MX) -c $<
-
-mcoarsen.o: $(METIS_PATH)/Lib/mcoarsen.c
-	$(MX) -c $<
-
-memory.o: $(METIS_PATH)/Lib/memory.c
-	$(MX) -c $<
-
-mesh.o: $(METIS_PATH)/Lib/mesh.c
-	$(MX) -c $<
-
-meshpart.o: $(METIS_PATH)/Lib/meshpart.c
-	$(MX) -c $<
-
-mfm2.o: $(METIS_PATH)/Lib/mfm2.c
-	$(MX) -c $<
-
-mfm.o: $(METIS_PATH)/Lib/mfm.c
-	$(MX) -c $<
-
-mincover.o: $(METIS_PATH)/Lib/mincover.c
-	$(MX) -c $<
-
-minitpart2.o: $(METIS_PATH)/Lib/minitpart2.c
-	$(MX) -c $<
-
-minitpart.o: $(METIS_PATH)/Lib/minitpart.c
-	$(MX) -c $<
-
-mkmetis.o: $(METIS_PATH)/Lib/mkmetis.c
-	$(MX) -c $<
-
-mkwayfmh.o: $(METIS_PATH)/Lib/mkwayfmh.c
-	$(MX) -c $<
-
-mkwayrefine.o: $(METIS_PATH)/Lib/mkwayrefine.c
-	$(MX) -c $<
-
-mmatch.o: $(METIS_PATH)/Lib/mmatch.c
-	$(MX) -c $<
-
-mmd.o: $(METIS_PATH)/Lib/mmd.c
-	$(MX) -c $<
-
-mpmetis.o: $(METIS_PATH)/Lib/mpmetis.c
-	$(MX) -c $<
-
-mrefine2.o: $(METIS_PATH)/Lib/mrefine2.c
-	$(MX) -c $<
-
-mrefine.o: $(METIS_PATH)/Lib/mrefine.c
-	$(MX) -c $<
-
-mutil.o: $(METIS_PATH)/Lib/mutil.c
-	$(MX) -c $<
-
-myqsort.o: $(METIS_PATH)/Lib/myqsort.c
-	$(MX) -c $<
-
-ometis.o: $(METIS_PATH)/Lib/ometis.c
-	$(MX) -c $<
-
-parmetis.o: $(METIS_PATH)/Lib/parmetis.c
-	$(MX) -c $<
-
-pmetis.o: $(METIS_PATH)/Lib/pmetis.c
-	$(MX) -c $<
-
-pqueue.o: $(METIS_PATH)/Lib/pqueue.c
-	$(MX) -c $<
-
-refine.o: $(METIS_PATH)/Lib/refine.c
-	$(MX) -c $<
-
-separator.o: $(METIS_PATH)/Lib/separator.c
-	$(MX) -c $<
-
-sfm.o: $(METIS_PATH)/Lib/sfm.c
-	$(MX) -c $<
-
-srefine.o: $(METIS_PATH)/Lib/srefine.c
-	$(MX) -c $<
-
-stat.o: $(METIS_PATH)/Lib/stat.c
-	$(MX) -c $<
-
-subdomains.o: $(METIS_PATH)/Lib/subdomains.c
-	$(MX) -c $<
-
-timing.o: $(METIS_PATH)/Lib/timing.c
-	$(MX) -c $<
-
-util.o: $(METIS_PATH)/Lib/util.c
-	$(MX) -c $<
-
-#===============================================================================
-
-CHOLMOD_INC = \
-	../../CHOLMOD/Include/cholmod_blas.h \
-	../../CHOLMOD/Include/cholmod_cholesky.h \
-	../../CHOLMOD/Include/cholmod_complexity.h \
-	../../CHOLMOD/Include/cholmod_config.h \
-	../../CHOLMOD/Include/cholmod_core.h \
-	../../CHOLMOD/Include/cholmod.h \
-	../../CHOLMOD/Include/cholmod_internal.h \
-	../../CHOLMOD/Include/cholmod_io64.h \
-	../../CHOLMOD/Include/cholmod_partition.h \
-	../../CHOLMOD/Include/cholmod_template.h
-
-CHOLMOD = \
-	cholmod_amd.o \
-	cholmod_analyze.o \
-	cholmod_colamd.o \
-	cholmod_etree.o \
-	cholmod_postorder.o \
-	cholmod_rowcolcounts.o \
-	cholmod_aat.o \
-	cholmod_add.o \
-	cholmod_band.o \
-	cholmod_change_factor.o \
-	cholmod_common.o \
-	cholmod_complex.o \
-	cholmod_copy.o \
-	cholmod_dense.o \
-	cholmod_error.o \
-	cholmod_factor.o \
-	cholmod_memory.o \
-	cholmod_sparse.o \
-	cholmod_transpose.o \
-	cholmod_triplet.o \
-	cholmod_camd.o \
-	cholmod_ccolamd.o \
-	cholmod_csymamd.o \
-	cholmod_metis.o \
-	cholmod_nesdis.o
-
-$(CHOLMOD): $(CHOLMOD_INC)
-
-CH = -DNSUPERNODAL -DNMODIFY -DNMATRIXOPS -DNCHECK
-
-cholmod_amd.o: ../../CHOLMOD/Cholesky/cholmod_amd.c
-	$(MX) $(CH) -c $<
-
-cholmod_analyze.o: ../../CHOLMOD/Cholesky/cholmod_analyze.c
-	$(MX) $(CH) -c $<
-
-cholmod_colamd.o: ../../CHOLMOD/Cholesky/cholmod_colamd.c
-	$(MX) $(CH) -c $<
-
-cholmod_etree.o: ../../CHOLMOD/Cholesky/cholmod_etree.c
-	$(MX) $(CH) -c $<
-
-cholmod_postorder.o: ../../CHOLMOD/Cholesky/cholmod_postorder.c
-	$(MX) $(CH) -c $<
-
-cholmod_rowcolcounts.o: ../../CHOLMOD/Cholesky/cholmod_rowcolcounts.c
-	$(MX) $(CH) -c $<
-
-cholmod_aat.o: ../../CHOLMOD/Core/cholmod_aat.c
-	$(MX) $(CH) -c $<
-
-cholmod_add.o: ../../CHOLMOD/Core/cholmod_add.c
-	$(MX) $(CH) -c $<
-
-cholmod_band.o: ../../CHOLMOD/Core/cholmod_band.c
-	$(MX) $(CH) -c $<
-
-cholmod_change_factor.o: ../../CHOLMOD/Core/cholmod_change_factor.c \
-	../../CHOLMOD/Core/t_cholmod_change_factor.c
-	$(MX) $(CH) -c $<
-
-cholmod_common.o: ../../CHOLMOD/Core/cholmod_common.c
-	$(MX) $(CH) -c $<
-
-cholmod_complex.o: ../../CHOLMOD/Core/cholmod_complex.c
-	$(MX) $(CH) -c $<
-
-cholmod_copy.o: ../../CHOLMOD/Core/cholmod_copy.c
-	$(MX) $(CH) -c $<
-
-cholmod_dense.o: ../../CHOLMOD/Core/cholmod_dense.c \
-	../../CHOLMOD/Core/t_cholmod_dense.c
-	$(MX) $(CH) -c $<
-
-cholmod_error.o: ../../CHOLMOD/Core/cholmod_error.c
-	$(MX) $(CH) -c $<
-
-cholmod_factor.o: ../../CHOLMOD/Core/cholmod_factor.c
-	$(MX) $(CH) -c $<
-
-cholmod_memory.o: ../../CHOLMOD/Core/cholmod_memory.c
-	$(MX) $(CH) -c $<
-
-cholmod_sparse.o: ../../CHOLMOD/Core/cholmod_sparse.c
-	$(MX) $(CH) -c $<
-
-cholmod_transpose.o: ../../CHOLMOD/Core/cholmod_transpose.c \
-	../../CHOLMOD/Core/t_cholmod_transpose.c
-	$(MX) $(CH) -c $<
-
-cholmod_triplet.o: ../../CHOLMOD/Core/cholmod_triplet.c \
-	../../CHOLMOD/Core/t_cholmod_triplet.c
-	$(MX) $(CH) -c $<
-
-cholmod_camd.o: ../../CHOLMOD/Partition/cholmod_camd.c
-	$(MX) $(CH) -c $<
-
-cholmod_ccolamd.o: ../../CHOLMOD/Partition/cholmod_ccolamd.c
-	$(MX) $(CH) -c $<
-
-cholmod_csymamd.o: ../../CHOLMOD/Partition/cholmod_csymamd.c
-	$(MX) $(CH) -c $<
-
-cholmod_metis.o: ../../CHOLMOD/Partition/cholmod_metis.c
-	$(MX) $(CH) -c $<
-
-cholmod_nesdis.o: ../../CHOLMOD/Partition/cholmod_nesdis.c
-	$(MX) $(CH) -c $<
-
-#===============================================================================
-
-BTF_INC = ../../BTF/Include/btf.h ../../BTF/Include/btf_internal.h
-
-BTF = btf_maxtrans.o btf_order.o btf_strongcomp.o
-
-$(BTF): $(BTF_INC)
-
-btf_maxtrans.o: ../../BTF/Source/btf_maxtrans.c
-	$(MX) -c $<
-
-btf_order.o: ../../BTF/Source/btf_order.c
-	$(MX) -c $<
-
-btf_strongcomp.o: ../../BTF/Source/btf_strongcomp.c
-	$(MX) -c $<
-
-#===============================================================================
-
-KLU_INC = ../Include/klu.h ../Include/klu_internal.h ../Include/klu_version.h \
-	../User/klu_cholmod.h
-
-KLU_L = klu_l.o klu_l_kernel.o klu_l_dump.o \
-    klu_l_factor.o klu_l_free_numeric.o klu_l_solve.o \
-    klu_l_scale.o klu_l_refactor.o \
-    klu_l_tsolve.o klu_l_diagnostics.o klu_l_sort.o klu_l_extract.o
-
-KLU_ZL = klu_zl.o klu_zl_kernel.o klu_zl_dump.o \
-    klu_zl_factor.o klu_zl_free_numeric.o klu_zl_solve.o \
-    klu_zl_scale.o klu_zl_refactor.o \
-    klu_zl_tsolve.o klu_zl_diagnostics.o klu_zl_sort.o klu_zl_extract.o
-
-COMMON = klu_free_symbolic.o klu_defaults.o klu_analyze_given.o \
-    klu_analyze.o klu_memory.o
-    
-USER = klu_l_cholmod.o
-
-KLU = $(COMMON) $(KLU_L) $(KLU_ZL) $(USER)
-
-$(KLU): $(KLU_INC)
-
-#-------------------------------------------------------------------------------
-
-klu_l.o: ../Source/klu.c
-	$(MX) -c $<
-	$(MV) klu.o $@
-
-klu_zl.o: ../Source/klu.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu.o $@
-
-klu_l_kernel.o: ../Source/klu_kernel.c
-	$(MX) -c $<
-	$(MV) klu_kernel.o $@
-
-klu_zl_kernel.o: ../Source/klu_kernel.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_kernel.o $@
-
-klu_l_sort.o: ../Source/klu_sort.c
-	$(MX) -c $<
-	$(MV) klu_sort.o $@
-
-klu_zl_sort.o: ../Source/klu_sort.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_sort.o $@
-
-klu_l_diagnostics.o: ../Source/klu_diagnostics.c
-	$(MX) -c $<
-	$(MV) klu_diagnostics.o $@
-
-klu_zl_diagnostics.o: ../Source/klu_diagnostics.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_diagnostics.o $@
-
-klu_l_dump.o: ../Source/klu_dump.c
-	$(MX) -c $<
-	$(MV) klu_dump.o $@
-
-klu_zl_dump.o: ../Source/klu_dump.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_dump.o $@
-
-klu_l_factor.o: ../Source/klu_factor.c
-	$(MX) -c $<
-	$(MV) klu_factor.o $@
-
-klu_zl_factor.o: ../Source/klu_factor.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_factor.o $@
-
-klu_l_free_numeric.o: ../Source/klu_free_numeric.c
-	$(MX) -c $<
-	$(MV) klu_free_numeric.o $@
-
-klu_zl_free_numeric.o: ../Source/klu_free_numeric.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_free_numeric.o $@
-
-klu_l_extract.o: ../Source/klu_extract.c
-	$(MX) -c $<
-	$(MV) klu_extract.o $@
-
-klu_zl_extract.o: ../Source/klu_extract.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_extract.o $@
-
-klu_l_refactor.o: ../Source/klu_refactor.c
-	$(MX) -c $<
-	$(MV) klu_refactor.o $@
-
-klu_zl_refactor.o: ../Source/klu_refactor.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_refactor.o $@
-
-klu_l_scale.o: ../Source/klu_scale.c
-	$(MX) -c $<
-	$(MV) klu_scale.o $@
-
-klu_zl_scale.o: ../Source/klu_scale.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_scale.o $@
-
-klu_l_solve.o: ../Source/klu_solve.c
-	$(MX) -c $<
-	$(MV) klu_solve.o $@
-
-klu_zl_solve.o: ../Source/klu_solve.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_solve.o $@
-
-klu_l_tsolve.o: ../Source/klu_tsolve.c
-	$(MX) -c $<
-	$(MV) klu_tsolve.o $@
-
-klu_zl_tsolve.o: ../Source/klu_tsolve.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_tsolve.o $@
-
-#-------------------------------------------------------------------------------
-
-klu_analyze.o: ../Source/klu_analyze.c
-	$(MX) -c $<
-
-klu_analyze_given.o: ../Source/klu_analyze_given.c
-	$(MX) -c $<
-
-klu_defaults.o: ../Source/klu_defaults.c
-	$(MX) -c $<
-
-klu_free_symbolic.o: ../Source/klu_free_symbolic.c
-	$(MX) -c $<
-
-klu_memory.o: ../Source/klu_memory.c
-	$(MX) -c $<
-
-#-------------------------------------------------------------------------------
-
-klu_l_cholmod.o: ../User/klu_l_cholmod.c
-	$(MX) $(CH) -c $<
-
-#===============================================================================
-
-OBJ = $(AMD) $(CAMD) $(COLAMD) $(CCOLAMD) $(METIS) $(CHOLMOD) $(KLU) $(BTF)
-
-klu: klu_mex.c $(OBJ)
-	$(MX) -output klu klu_mex.c $(OBJ)
-
diff --git a/KLU/MATLAB/Makefile_no_CHOLMOD b/KLU/MATLAB/Makefile_no_CHOLMOD
deleted file mode 100644
index 9e30248..0000000
--- a/KLU/MATLAB/Makefile_no_CHOLMOD
+++ /dev/null
@@ -1,263 +0,0 @@
-#===============================================================================
-# KLU/MATLAB/Makefile_no_CHOLMOD
-#===============================================================================
-
-# Makefile for klu mexFunction, without the use of CHOLMOD.  Ordering options
-# 3 and 4 for klu will not be available.  See "help klu" in MATLAB for more
-# details.  Usage:
-#
-# make -f Makefile_no_CHOLMOD
-
-default: all
-
-include ../../UFconfig/UFconfig.mk
-
-# without CHOLMOD
-I = -I. -I../../AMD/Include -I../../AMD/Source -I../../COLAMD/Include \
-    -I../Include -I../../UFconfig -I../../BTF/Include
-
-all: klu
-
-MX = $(MEX) -DDLONG -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE $(I)
-
-distclean: purge
-
-purge: clean
-	- $(RM) *.mex* rename.h
-
-clean:
-	- $(RM) $(CLEAN)
-
-#===============================================================================
-
-AMD_INC = ../../AMD/Include/amd.h ../../AMD/Include/amd_internal.h
-
-AMD = \
-	amd_1.o \
-	amd_2.o \
-	amd_aat.o \
-	amd_control.o \
-	amd_defaults.o \
-	amd_dump.o \
-	amd_global.o \
-	amd_info.o \
-	amd_order.o \
-	amd_postorder.o \
-	amd_post_tree.o \
-	amd_preprocess.o \
-	amd_valid.o
-
-$(AMD): $(AMD_INC)
-amd_1.o: ../../AMD/Source/amd_1.c
-	$(MX) -c $<
-
-amd_2.o: ../../AMD/Source/amd_2.c
-	$(MX) -c $<
-
-amd_aat.o: ../../AMD/Source/amd_aat.c
-	$(MX) -c $<
-
-amd_control.o: ../../AMD/Source/amd_control.c
-	$(MX) -c $<
-
-amd_defaults.o: ../../AMD/Source/amd_defaults.c
-	$(MX) -c $<
-
-amd_dump.o: ../../AMD/Source/amd_dump.c
-	$(MX) -c $<
-
-amd_global.o: ../../AMD/Source/amd_global.c
-	$(MX) -c $<
-
-amd_info.o: ../../AMD/Source/amd_info.c
-	$(MX) -c $<
-
-amd_order.o: ../../AMD/Source/amd_order.c
-	$(MX) -c $<
-
-amd_postorder.o: ../../AMD/Source/amd_postorder.c
-	$(MX) -c $<
-
-amd_post_tree.o: ../../AMD/Source/amd_post_tree.c
-	$(MX) -c $<
-
-amd_preprocess.o: ../../AMD/Source/amd_preprocess.c
-	$(MX) -c $<
-
-amd_valid.o: ../../AMD/Source/amd_valid.c
-	$(MX) -c $<
-
-#===============================================================================
-
-COLAMD_INC = ../../COLAMD/Include/colamd.h
-
-COLAMD = colamd.o colamd_global.o
-
-$(COLAMD): $(COLAMD_INC)
-
-colamd.o: ../../COLAMD/Source/colamd.c
-	$(MX) -c $<
-
-colamd_global.o: ../../COLAMD/Source/colamd_global.c
-	$(MX) -c $<
-
-#===============================================================================
-
-BTF_INC = ../../BTF/Include/btf.h ../../BTF/Include/btf_internal.h
-
-BTF = btf_maxtrans.o btf_order.o btf_strongcomp.o
-
-$(BTF): $(BTF_INC)
-
-btf_maxtrans.o: ../../BTF/Source/btf_maxtrans.c
-	$(MX) -c $<
-
-btf_order.o: ../../BTF/Source/btf_order.c
-	$(MX) -c $<
-
-btf_strongcomp.o: ../../BTF/Source/btf_strongcomp.c
-	$(MX) -c $<
-
-#===============================================================================
-
-KLU_INC = ../Include/klu.h ../Include/klu_internal.h ../Include/klu_version.h
-
-KLU_L = klu_l.o klu_l_kernel.o klu_l_dump.o \
-    klu_l_factor.o klu_l_free_numeric.o klu_l_solve.o \
-    klu_l_scale.o klu_l_refactor.o \
-    klu_l_tsolve.o klu_l_diagnostics.o klu_l_sort.o klu_l_extract.o
-
-KLU_ZL = klu_zl.o klu_zl_kernel.o klu_zl_dump.o \
-    klu_zl_factor.o klu_zl_free_numeric.o klu_zl_solve.o \
-    klu_zl_scale.o klu_zl_refactor.o \
-    klu_zl_tsolve.o klu_zl_diagnostics.o klu_zl_sort.o klu_zl_extract.o
-
-COMMON = klu_free_symbolic.o klu_defaults.o klu_analyze_given.o \
-    klu_analyze.o klu_memory.o
-
-KLU = $(COMMON) $(KLU_L) $(KLU_ZL)
-
-$(KLU): $(KLU_INC)
-
-#-------------------------------------------------------------------------------
-
-klu_l.o: ../Source/klu.c
-	$(MX) -c $<
-	$(MV) klu.o $@
-
-klu_zl.o: ../Source/klu.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu.o $@
-
-klu_l_kernel.o: ../Source/klu_kernel.c
-	$(MX) -c $<
-	$(MV) klu_kernel.o $@
-
-klu_zl_kernel.o: ../Source/klu_kernel.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_kernel.o $@
-
-klu_l_sort.o: ../Source/klu_sort.c
-	$(MX) -c $<
-	$(MV) klu_sort.o $@
-
-klu_zl_sort.o: ../Source/klu_sort.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_sort.o $@
-
-klu_l_diagnostics.o: ../Source/klu_diagnostics.c
-	$(MX) -c $<
-	$(MV) klu_diagnostics.o $@
-
-klu_zl_diagnostics.o: ../Source/klu_diagnostics.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_diagnostics.o $@
-
-klu_l_dump.o: ../Source/klu_dump.c
-	$(MX) -c $<
-	$(MV) klu_dump.o $@
-
-klu_zl_dump.o: ../Source/klu_dump.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_dump.o $@
-
-klu_l_factor.o: ../Source/klu_factor.c
-	$(MX) -c $<
-	$(MV) klu_factor.o $@
-
-klu_zl_factor.o: ../Source/klu_factor.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_factor.o $@
-
-klu_l_free_numeric.o: ../Source/klu_free_numeric.c
-	$(MX) -c $<
-	$(MV) klu_free_numeric.o $@
-
-klu_zl_free_numeric.o: ../Source/klu_free_numeric.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_free_numeric.o $@
-
-klu_l_extract.o: ../Source/klu_extract.c
-	$(MX) -c $<
-	$(MV) klu_extract.o $@
-
-klu_zl_extract.o: ../Source/klu_extract.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_extract.o $@
-
-klu_l_refactor.o: ../Source/klu_refactor.c
-	$(MX) -c $<
-	$(MV) klu_refactor.o $@
-
-klu_zl_refactor.o: ../Source/klu_refactor.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_refactor.o $@
-
-klu_l_scale.o: ../Source/klu_scale.c
-	$(MX) -c $<
-	$(MV) klu_scale.o $@
-
-klu_zl_scale.o: ../Source/klu_scale.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_scale.o $@
-
-klu_l_solve.o: ../Source/klu_solve.c
-	$(MX) -c $<
-	$(MV) klu_solve.o $@
-
-klu_zl_solve.o: ../Source/klu_solve.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_solve.o $@
-
-klu_l_tsolve.o: ../Source/klu_tsolve.c
-	$(MX) -c $<
-	$(MV) klu_tsolve.o $@
-
-klu_zl_tsolve.o: ../Source/klu_tsolve.c
-	$(MX) -c -DCOMPLEX $<
-	$(MV) klu_tsolve.o $@
-
-#-------------------------------------------------------------------------------
-
-klu_analyze.o: ../Source/klu_analyze.c
-	$(MX) -c $<
-
-klu_analyze_given.o: ../Source/klu_analyze_given.c
-	$(MX) -c $<
-
-klu_defaults.o: ../Source/klu_defaults.c
-	$(MX) -c $<
-
-klu_free_symbolic.o: ../Source/klu_free_symbolic.c
-	$(MX) -c $<
-
-klu_memory.o: ../Source/klu_memory.c
-	$(MX) -c $<
-
-#===============================================================================
-
-OBJ = $(AMD) $(COLAMD) $(KLU) $(BTF)
-
-klu: klu_mex.c $(OBJ)
-	$(MX) -DNCHOLMOD -output klu klu_mex.c $(OBJ)
-
diff --git a/KLU/MATLAB/Test/klu_test.m b/KLU/MATLAB/Test/klu_test.m
index 0574ed5..f6f0ceb 100644
--- a/KLU/MATLAB/Test/klu_test.m
+++ b/KLU/MATLAB/Test/klu_test.m
@@ -5,11 +5,10 @@ function klu_test (nmat)
 %
 % See also klu
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2012, University of Florida
 
 if (nargin < 1)
-    nmat = 500 ;
+    nmat = 200 ;
 end
 
 test1 (nmat) ;
diff --git a/KLU/MATLAB/Test/test1.m b/KLU/MATLAB/Test/test1.m
index ce3cf1b..8c8e493 100644
--- a/KLU/MATLAB/Test/test1.m
+++ b/KLU/MATLAB/Test/test1.m
@@ -5,15 +5,14 @@ function test1 (nmat)
 %
 % See also klu
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2012, University of Florida
 
 clear functions
-rand ('state', 0) ;
+% rand ('state', 0) ;
 
 index = UFget ;
 f = find (index.nrows == index.ncols & index.isReal) ;
-[ignore i] = sort (index.nnz (f)) ;
+[ignore i] = sort (index.nnz (f)) ;                                         %#ok
 f = f (i) ;
 
 h = waitbar (0, 'KLU test 1 of 5') ;
@@ -29,24 +28,23 @@ nmat = min (nmat, 100) ;
 f = f (1:nmat) ;
 
 % f = 274
-% f = 101	; % MATLAB condest is poor
+% f = 101       ; % MATLAB condest is poor
 
 nmat = length (f) ;
 
 conds_klu = ones (1,nmat) ;
 conds_matlab = ones (1,nmat) ;
 
-figure (1)
 clf
 
-try
+% try
 
     for k = 1:nmat
 
         waitbar (k/nmat, h) ;
 
         i = f (k) ;
-        try
+%       try
             c = -1 ;
             blocks = 0 ;
             rho = 0 ;
@@ -58,6 +56,11 @@ try
             Prob = UFget (i,index) ;
             A = Prob.A ;
             c = condest (A) ;
+            fprintf ('condest %8.2e :', c) ;
+            if (c > 1e20)
+                fprintf ('skipped\n') ;
+                continue
+            end
             % klu (A)
             % [L,U,p,q,R,F,r,info] = klu (A) ;
 
@@ -90,13 +93,13 @@ try
             conds_klu (k) = c2 ;
             conds_matlab (k) = c ;
 
-        catch
-            disp (lasterr) ;
-        end
+%       catch me
+%           disp (me.message) ;
+%       end
 
         fprintf (...
-        'blocks %6d err %8.2e condest %8.2e %8.2e rcond %8.2e %8.2e err %8.2e\n', ...
-        blocks, rho, c2, c, r1, r2, err) ;
+        'blocks %6d err %8.2e %8.2e rcond %8.2e %8.2e err %8.2e\n', ...
+        blocks, rho, c2, r1, r2, err) ;
 
     end
 
@@ -104,14 +107,8 @@ try
     plot (1:k, log10 (conds_klu (1:k) ./ conds_matlab (1:k)), 'o') ;
     drawnow
 
-catch
-    % out-of-memory is OK, other errors are not
-    disp (lasterr) ;
-    if (isempty (strfind (lasterr, 'Out of memory')))
-        error (lasterr) ;                                                   %#ok
-    else
-        fprintf ('test terminated early, but otherwise OK\n') ;
-    end
-end
+% catch me
+%     disp (me.message) ;
+% end
 
 close (h) ;
diff --git a/KLU/MATLAB/Test/test2.m b/KLU/MATLAB/Test/test2.m
index 83cdd54..aad5122 100644
--- a/KLU/MATLAB/Test/test2.m
+++ b/KLU/MATLAB/Test/test2.m
@@ -4,18 +4,17 @@ function test2 (nmat)
 %   test2
 % See also klu
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2012, University of Florida
 
 clear functions
-rand ('state', 0) ;
+% rand ('state', 0) ;
 % warning ('off', 'MATLAB:singularMatrix') ;
 % warning ('off', 'MATLAB:nearlySingularMatrix') ;
 % warning ('off', 'MATLAB:divideByZero') ;
 
 index = UFget ;
 f = find (index.nrows == index.ncols) ;
-[ignore i] = sort (index.nnz (f)) ;
+[ignore i] = sort (index.nnz (f)) ;                                         %#ok
 f = f (i) ;
 
 if (nargin < 1)
@@ -38,10 +37,9 @@ k = 0 ;
 
 h = waitbar (0, 'KLU test 2 of 5') ;
 
-figure (1)
 clf
 
-try
+% try
 
     for kk = 1:nmat
 
@@ -67,11 +65,11 @@ try
 
             try
                 [L,U,p,q] = lu (A, 'vector') ;
-            catch
+            catch                                                           %#ok
                 % older version of MATLAB, which doesn't have 'vector' option
                 [L,U,P,Q] = lu (A) ;
-                [p ignore1 ignore2] = find (P') ;
-                [q ignore1 ignore2] = find (Q) ;
+                [p ignore1 ignore2] = find (P') ;                           %#ok
+                [q ignore1 ignore2] = find (Q) ;                            %#ok
                 clear ignore1 ignore2 P Q
             end
 
@@ -84,7 +82,6 @@ try
                 LU.p = int32 (p) ;
                 LU.q = int32 (q) ;
             end
-            C = A (p,q) ;
             LUnz (k) = nnz (L) + nnz (U) ;
 
             n = size (A,1) ;
@@ -154,8 +151,6 @@ try
             else
                 err = Inf ;
                 er2 = Inf ;
-                er3 = Inf ;
-                er4 = Inf ;
                 erc = Inf ;
             end
 
@@ -171,14 +166,8 @@ try
         end
     end
 
-catch
-    % out-of-memory is OK, other errors are not
-    disp (lasterr) ;
-    if (isempty (strfind (lasterr, 'Out of memory')))
-        error (lasterr) ;                                                   %#ok
-    else
-        fprintf ('test terminated early, but otherwise OK\n') ;
-    end
-end
+% catch me
+%     disp (me.message) ;
+% end
 
 close (h) ;
diff --git a/KLU/MATLAB/Test/test3.m b/KLU/MATLAB/Test/test3.m
index a8edbbb..f0a4821 100644
--- a/KLU/MATLAB/Test/test3.m
+++ b/KLU/MATLAB/Test/test3.m
@@ -4,12 +4,11 @@ function test3
 %   test3
 % See also klu
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2012, University of Florida
 
 h = waitbar (1/12, 'KLU test 3 of 5') ;
 
-rand ('state', 0) ;
+% rand ('state', 0) ;
 
 load west0479
 A = west0479 ;
@@ -36,26 +35,27 @@ for nrhs = 1:10
     b = rand (n,nrhs) ;
     x = klu (LU,'\',b) ;
     fprintf ('nrhs: %d resid: %g\n', ...
-	nrhs, norm (A*x-b,1) / norm (A,1)) ;
+        nrhs, norm (A*x-b,1) / norm (A,1)) ;
 end
 
-[x,info,cond_estimate] = klu (A, '\', b) ;
+[x,info,cond_estimate] = klu (A, '\', b) ;                                  %#ok
 fprintf ('\ninfo = \n') ; disp (info) ;
 fprintf ('KLU cond_estimate %g\n', cond_estimate) ;
 
 waitbar (11/12, h) ;
 
-[x,info] = klu (A, '\', b, struct ('ordering',1)) ;
+[x,info] = klu (A, '\', b, struct ('ordering',1)) ;                         %#ok
 fprintf ('\ninfo = \n') ; disp (info) ;
-[x,info,cond_estimate] = klu (A, '\', b, struct ('ordering',2)) ;
+[x,info,cond_estimate] = klu (A, '\', b, struct ('ordering',2)) ;           %#ok
 fprintf ('\ninfo = \n') ; disp (info) ;
 try
-    [x,info,cond_estimate] = klu (A, '\', b, struct ('ordering',3)) ;
+    [x,info,cond_estimate] = klu (A, '\', b, struct ('ordering',3)) ;       %#ok
     fprintf ('\ninfo = \n') ; disp (info) ;
-    [x,info,cond_estimate] = klu (A, '\', b, struct ('ordering',4)) ;
+    [x,info,cond_estimate] = klu (A, '\', b, struct ('ordering',4)) ;       %#ok
     fprintf ('\ninfo = \n') ; disp (info) ;
-catch
-    fprintf ('KLU test with CHOLMOD skipped (CHOLMOD not installed)\n') ;
+catch me
+    disp (me.message) ;
+    fprintf ('test with CHOLMOD skipped (CHOLMOD or METIS not installed)\n') ;
 end
 
 close (h) ;
diff --git a/KLU/MATLAB/Test/test4.m b/KLU/MATLAB/Test/test4.m
index 9ae5388..5534de2 100644
--- a/KLU/MATLAB/Test/test4.m
+++ b/KLU/MATLAB/Test/test4.m
@@ -4,8 +4,7 @@ function test4 (nmat)
 %   test4
 % See also klu
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2012, University of Florida
 
 % rand ('state', 0) ;
 % warning ('off', 'MATLAB:singularMatrix') ;
@@ -15,7 +14,7 @@ function test4 (nmat)
 
 index = UFget ;
 f = find (index.nrows == index.ncols & index.isReal & index.amd_lnz > 0) ;
-[ignore i] = sort (index.amd_lnz (f)) ;
+[ignore i] = sort (index.amd_lnz (f)) ;                                     %#ok
 f = f (i) ;
 % f = f (1:100) ;
 
@@ -43,10 +42,9 @@ end
 
 h = waitbar (0, 'KLU test 4 of 5') ;
 
-figure (1)
 clf
 
-try
+% try
 
     for kk = 1:nmat
 
@@ -86,13 +84,13 @@ try
                 tic
                 [L,U,p,q,R1] = lu (A, 'vector') ;
                 t1 = max (1e-6, toc) ;
-            catch
+            catch                                                           %#ok
                 % older version of MATLAB, which doesn't have 'vector' option
                 tic
                 [L,U,P,Q] = lu (A) ;
                 t1 = max (1e-6, toc) ;
-                [p ignore1 ignore2] = find (P') ;
-                [q ignore1 ignore2] = find (Q) ;
+                [p ignore1 ignore2] = find (P') ;                           %#ok
+                [q ignore1 ignore2] = find (Q) ;                            %#ok
                 clear ignore1 ignore2 P Q
                 R1 = speye (n) ;
             end
@@ -190,12 +188,12 @@ try
         end
 
         fprintf ('err %g %g %g\n', err1, err2, err4) ;
-        if (err1 > 1e4*err2 | err4 > 1e4*err2)				    %#ok
+        if (err1 > 1e4*err2 | err4 > 1e4*err2)                              %#ok
             fprintf ('warning: KLU inaccurate!\n')
         end
 
         fprintf ('terr %g %g %g\n', terr1, terr2, terr4) ;
-        if (terr1 > 1e4*terr2 | terr4 > 1e4*terr2)			    %#ok
+        if (terr1 > 1e4*terr2 | terr4 > 1e4*terr2)                          %#ok
             fprintf ('warning: KLU T inaccurate!\n')
         end
 
@@ -208,14 +206,8 @@ try
 
     end
 
-catch
-    % out-of-memory is OK, other errors are not
-    disp (lasterr) ;
-    if (isempty (strfind (lasterr, 'Out of memory')))
-        error (lasterr) ;                                                   %#ok
-    else
-        fprintf ('test terminated early, but otherwise OK\n') ;
-    end
-end
+% catch me
+%     disp (me.message) ;
+% end
 
 close (h) ;
diff --git a/KLU/MATLAB/Test/test5.m b/KLU/MATLAB/Test/test5.m
index e6aa618..9457c4c 100644
--- a/KLU/MATLAB/Test/test5.m
+++ b/KLU/MATLAB/Test/test5.m
@@ -7,8 +7,7 @@ function test5
 %
 % See also klu
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2012, University of Florida
 
 do_diary = 0 ;
 
@@ -21,77 +20,78 @@ if (do_diary)
 end
 
 % ATandT frequency-domain circuits, exclude these:
-freq = [ 283     284     285     286      ] ;
+% freq = [ 283     284     285     286      ] ;
 
 % sorted in order of MATLAB 7.3 x=A\b time on storm
 % (AMD Opteron, 64-bit, 8GB mem, 2 cores)
 circ = [
-1195	% Rajat/rajat11 n: 135 nz 665
-1198	% Rajat/rajat14 n: 180 nz 1475
-1189	% Rajat/rajat05 n: 301 nz 1250
-1169	% Sandia/oscil_trans_01 n: 430 nz 1614
-1112	% Sandia/oscil_dcop_01 n: 430 nz 1544
-1346	% Rajat/rajat19 n: 1157 nz 3699
-1199	% Hamrle/Hamrle1 n: 32 nz 98
-1106	% Sandia/fpga_trans_01 n: 1220 nz 7382
-1188	% Rajat/rajat04 n: 1041 nz 8725
-1055	% Sandia/fpga_dcop_01 n: 1220 nz 5892
-1108	% Sandia/init_adder1 n: 1813 nz 11156
-1196	% Rajat/rajat12 n: 1879 nz 12818
-1053	% Sandia/adder_trans_01 n: 1814 nz 14579
-539	% Hamm/add20 n: 2395 nz 13151
-371	% Bomhof/circuit_2 n: 4510 nz 21199
-540	% Hamm/add32 n: 4960 nz 19848
-1186	% Rajat/rajat02 n: 1960 nz 11187
-466	% Grund/meg4 n: 5860 nz 25258
-465	% Grund/meg1 n: 2904 nz 58142
-370	% Bomhof/circuit_1 n: 2624 nz 35823
-1200	% Hamrle/Hamrle2 n: 5952 nz 22162
-1197	% Rajat/rajat13 n: 7598 nz 48762
-1187	% Rajat/rajat03 n: 7602 nz 32653
-372	% Bomhof/circuit_3 n: 12127 nz 48137
-1185	% Rajat/rajat01 n: 6833 nz 43250
-1183	% IBM_Austin/coupled n: 11341 nz 97193
-1376	% Rajat/rajat27 n: 20640 nz 97353
-543	% Hamm/memplus n: 17758 nz 99147
-1109	% Sandia/mult_dcop_01 n: 25187 nz 193276
-1371	% Rajat/rajat22 n: 39899 nz 195429
-1375	% Rajat/rajat26 n: 51032 nz 247528
-1414	% IBM_EDA/ckt11752_tr_0 n: 49702 nz 332807
-541	% Hamm/bcircuit n: 68902 nz 375558
-1413	% IBM_EDA/ckt11752_dc_1 n: 49702 nz 333029
-542	% Hamm/hcircuit n: 105676 nz 513072
-1316	% Rajat/rajat15 n: 37261 nz 443573
-1190	% Rajat/rajat06 n: 10922 nz 46983
-1191	% Rajat/rajat07 n: 14842 nz 63913
-1372	% Rajat/rajat23 n: 110355 nz 555441
-373	% Bomhof/circuit_4 n: 80209 nz 307604
-544	% Hamm/scircuit n: 170998 nz 958936
-1412	% AMD/G2_circuit n: 150102 nz 726674	is this solid state device?
-1415	% Sandia/ASIC_100k n: 99340 nz 940621
-1416	% Sandia/ASIC_100ks n: 99190 nz 578890
-1420	% Sandia/ASIC_680ks n: 682712 nz 1693767
-1192	% Rajat/rajat08 n: 19362 nz 83443
-1193	% Rajat/rajat09 n: 24482 nz 105573
-1323	% IBM_EDA/trans4 n: 116835 nz 749800
-1320	% IBM_EDA/dc1 n: 116835 nz 766396
-1194	% Rajat/rajat10 n: 30202 nz 130303
-1418	% Sandia/ASIC_320ks n: 321671 nz 1316085
-1417	% Sandia/ASIC_320k n: 321821 nz 1931828
-1343	% Rajat/rajat16 n: 94294 nz 476766
-1345	% Rajat/rajat18 n: 94294 nz 479151
-1344	% Rajat/rajat17 n: 94294 nz 479246
-1377	% Rajat/rajat28 n: 87190 nz 606489
-1369	% Rajat/rajat20 n: 86916 nz 604299
-1374	% Rajat/rajat25 n: 87190 nz 606489
-1370	% Rajat/rajat21 n: 411676 nz 1876011
-1419
-1396
-1201
-1397
-1421
-1398
-1373	% Rajat/rajat24 n: 358172 nz 1946979
+1195    % Rajat/rajat11 n: 135 nz 665
+1198    % Rajat/rajat14 n: 180 nz 1475
+1189    % Rajat/rajat05 n: 301 nz 1250
+1169    % Sandia/oscil_trans_01 n: 430 nz 1614
+1112    % Sandia/oscil_dcop_01 n: 430 nz 1544
+1346    % Rajat/rajat19 n: 1157 nz 3699
+1199    % Hamrle/Hamrle1 n: 32 nz 98
+1106    % Sandia/fpga_trans_01 n: 1220 nz 7382
+1188    % Rajat/rajat04 n: 1041 nz 8725
+1055    % Sandia/fpga_dcop_01 n: 1220 nz 5892
+1108    % Sandia/init_adder1 n: 1813 nz 11156
+1196    % Rajat/rajat12 n: 1879 nz 12818
+1053    % Sandia/adder_trans_01 n: 1814 nz 14579
+539     % Hamm/add20 n: 2395 nz 13151
+371     % Bomhof/circuit_2 n: 4510 nz 21199
+540     % Hamm/add32 n: 4960 nz 19848
+1186    % Rajat/rajat02 n: 1960 nz 11187
+466     % Grund/meg4 n: 5860 nz 25258
+465     % Grund/meg1 n: 2904 nz 58142
+370     % Bomhof/circuit_1 n: 2624 nz 35823
+1200    % Hamrle/Hamrle2 n: 5952 nz 22162
+1197    % Rajat/rajat13 n: 7598 nz 48762
+1187    % Rajat/rajat03 n: 7602 nz 32653
+372     % Bomhof/circuit_3 n: 12127 nz 48137
+1185    % Rajat/rajat01 n: 6833 nz 43250
+1183    % IBM_Austin/coupled n: 11341 nz 97193
+1376    % Rajat/rajat27 n: 20640 nz 97353
+543     % Hamm/memplus n: 17758 nz 99147
+1109    % Sandia/mult_dcop_01 n: 25187 nz 193276
+1371    % Rajat/rajat22 n: 39899 nz 195429
+1375    % Rajat/rajat26 n: 51032 nz 247528
+1414    % IBM_EDA/ckt11752_tr_0 n: 49702 nz 332807
+541     % Hamm/bcircuit n: 68902 nz 375558
+1413    % IBM_EDA/ckt11752_dc_1 n: 49702 nz 333029
+542     % Hamm/hcircuit n: 105676 nz 513072
+1316    % Rajat/rajat15 n: 37261 nz 443573
+1190    % Rajat/rajat06 n: 10922 nz 46983
+1191    % Rajat/rajat07 n: 14842 nz 63913
+1372    % Rajat/rajat23 n: 110355 nz 555441
+373     % Bomhof/circuit_4 n: 80209 nz 307604
+544     % Hamm/scircuit n: 170998 nz 958936
+1412    % AMD/G2_circuit n: 150102 nz 726674    is this solid state device?
+1415    % Sandia/ASIC_100k n: 99340 nz 940621
+1416    % Sandia/ASIC_100ks n: 99190 nz 578890
+1420    % Sandia/ASIC_680ks n: 682712 nz 1693767
+1192    % Rajat/rajat08 n: 19362 nz 83443
+1193    % Rajat/rajat09 n: 24482 nz 105573
+1323    % IBM_EDA/trans4 n: 116835 nz 749800
+1320    % IBM_EDA/dc1 n: 116835 nz 766396
+1194    % Rajat/rajat10 n: 30202 nz 130303
+1418    % Sandia/ASIC_320ks n: 321671 nz 1316085
+1417    % Sandia/ASIC_320k n: 321821 nz 1931828
+1343    % Rajat/rajat16 n: 94294 nz 476766
+1345    % Rajat/rajat18 n: 94294 nz 479151
+1344    % Rajat/rajat17 n: 94294 nz 479246
+1377    % Rajat/rajat28 n: 87190 nz 606489
+1369    % Rajat/rajat20 n: 86916 nz 604299
+1374    % Rajat/rajat25 n: 87190 nz 606489
+1370    % Rajat/rajat21 n: 411676 nz 1876011
+1419    % Sandia/ASIC_680k n: 682862 nz 2638997
+% these are large, so are skipped for this test:
+% 1396    % Rajat/rajat29 n: 643994 nz 3760246
+% 1201    % Hamrle/Hamrle3 n: 1447360 nz 5514242
+% 1397    % Rajat/rajat30 n: 643994 nz 6175244
+% 1421    % AMD/G3_circuit n: 1585478 nz 7660826
+% 1398    % Rajat/rajat31 n: 4690002 nz 20316253
+% 1373    % Rajat/rajat24 n: 358172 nz 1946979
 ]' ;
 
 fprintf ('Running KLU on %d circuits.\n', length (circ)) ;
@@ -100,7 +100,7 @@ index = UFget ;
 
 opts_noscale.scale = -1 ;
 opts_sum.scale = 1 ;
-opts_max.scale = 2 ;		% default scaling
+opts_max.scale = 2 ;            % default scaling
 
 h = waitbar (0, 'KLU test 5 of 5') ;
 nmat = length (circ) ;
@@ -124,9 +124,9 @@ try
             x2 = klu (A, '\', b, opts_noscale) ;
             t2 = toc ;
             e2 = norm (A*x2-b) ;
-        catch
-            t2 = 0 ;
-            e2 = 0 ;
+        catch                                                               %#ok
+            t2 = inf ;
+            e2 = inf ;
         end
         fprintf ('KLU no scale:  err %8.2e t: %8.4f\n', e2, t2) ;
 
@@ -135,9 +135,9 @@ try
             x4 = klu (A, '\', b, opts_max) ;
             t4 = toc ;
             e4 = norm (A*x4-b) ;
-        catch
-            t4 = 0 ;
-            e4 = 0 ;
+        catch                                                               %#ok
+            t4 = inf ;
+            e4 = inf ;
         end
         fprintf ('KLU max scale: err %8.2e t: %8.4f\n', e4, t4) ;
 
@@ -146,9 +146,9 @@ try
             x3 = klu (A, '\', b, opts_sum) ;
             t3 = toc ;
             e3 = norm (A*x3-b) ;
-        catch
-            t3 = 0 ;
-            e3 = 0 ;
+        catch                                                               %#ok
+            t3 = inf ;
+            e3 = inf ;
         end
         fprintf ('KLU sum scale: err %8.2e t: %8.4f\n', e3, t3) ;
 
@@ -167,14 +167,8 @@ try
         end
     end
 
-catch
-    % out-of-memory is OK, other errors are not
-    disp (lasterr) ;
-    if (isempty (strfind (lasterr, 'Out of memory')))
-        error (lasterr) ;                                                   %#ok
-    else
-        fprintf ('test terminated early, but otherwise OK\n') ;
-    end
+catch me
+    disp (me.message) ;
 end
 
 close (h) ;
diff --git a/KLU/MATLAB/klu.m b/KLU/MATLAB/klu.m
index 547c2bf..73794fd 100644
--- a/KLU/MATLAB/klu.m
+++ b/KLU/MATLAB/klu.m
@@ -24,13 +24,14 @@ function [LU_or_x,info,c] = klu (A,operation,b,opts)                        %#ok
 %   opts is an optional input struct which appears as the last input argument.
 %   Entries not present are set to their defaults:
 %
+%                       default
 %       opts.tol        0.001   partial pivoting tolerance; valid range 0 to 1.
 %       opts.btf        1       use block triangular form (BTF) if nonzero
 %       opts.ordering   0       how each block is ordered:
 %                               0: AMD, 1: COLAMD, 2: natural,
 %                               3: CHOLMOD's ordering of (A'*A),
 %                               4: CHOLMOD's ordering of (A+A')
-%       opts.scale      -1      1: R = diag(sum(abs(A)')), row-sum
+%       opts.scale      2       1: R = diag(sum(abs(A)')), row-sum
 %                               2: R = diag(max(abs(A)')), max in each row
 %                               otherwise: none (R=I)
 %       opts.maxwork    0       if > 0, limit work in BTF ordering to
@@ -65,7 +66,7 @@ function [LU_or_x,info,c] = klu (A,operation,b,opts)                        %#ok
 %
 %   See also BTF, LU, DMPERM, CONDEST, CHOLMOD, AMD, COLAMD, CAMD, CCOLAMD.
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2009, Univ. of Florida
+% http://www.suitesparse.com
 
 error ('klu mexFunction not found') ;
diff --git a/KLU/MATLAB/klu_demo.m b/KLU/MATLAB/klu_demo.m
index 6fdce1e..9c5c912 100644
--- a/KLU/MATLAB/klu_demo.m
+++ b/KLU/MATLAB/klu_demo.m
@@ -6,7 +6,7 @@ function klu_demo
 %
 % See also klu, btf
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
+% Copyright 2004-2009, Univ. of Florida
 
 load west0479
 A = west0479 ;
diff --git a/KLU/MATLAB/klu_demo.m.out b/KLU/MATLAB/klu_demo.m.out
index c591adf..20991b5 100644
--- a/KLU/MATLAB/klu_demo.m.out
+++ b/KLU/MATLAB/klu_demo.m.out
@@ -2,7 +2,7 @@ klu_demo
 MATLAB condest: 1.42443e+12 KLU condest: 1.42443e+12 cond: 3.25816e+11
 
 KLU with scaling, AMD ordering and condition number estimate:
-resid: 3.88932e-13 KLU condest: 1.42443e+12 rgrowth: 1.85769e-05
+resid: 7.8484e-13 KLU condest: 1.42443e+12 rgrowth: 1.85769e-05
     noffdiag: 12
     nrealloc: 0
        rcond: 7.1253e-09
@@ -19,7 +19,7 @@ resid: 3.88932e-13 KLU condest: 1.42443e+12 rgrowth: 1.85769e-05
 
 
 KLU with COLAMD ordering
-resid: 1.00707e-11
+resid: 3.91883e-11
     noffdiag: 14
     nrealloc: 0
        rcond: 9.1888e-10
@@ -36,7 +36,7 @@ resid: 1.00707e-11
 
 
 KLU with natural ordering (lots of fillin)
-resid: 3.13025e-13
+resid: 2.42321e-11
     noffdiag: 437
     nrealloc: 0
        rcond: 6.4525e-08
@@ -53,7 +53,7 @@ resid: 3.13025e-13
 
 
 KLU with CHOLMOD(A'*A) ordering
-resid: 1.7568e-13
+resid: 2.22827e-13
     noffdiag: 24
     nrealloc: 0
        rcond: 4.1814e-09
@@ -70,7 +70,7 @@ resid: 1.7568e-13
 
 
 KLU with CHOLMOD(A+A') ordering
-resid: 5.1045e-13
+resid: 1.45166e-12
     noffdiag: 13
     nrealloc: 0
        rcond: 3.9046e-11
diff --git a/KLU/MATLAB/klu_install.m b/KLU/MATLAB/klu_install.m
index 779c36d..09e7a14 100644
--- a/KLU/MATLAB/klu_install.m
+++ b/KLU/MATLAB/klu_install.m
@@ -1,9 +1,8 @@
-function klu_install (with_cholmod)
+function klu_install (metis_path)
 %KLU_INSTALL compiles and installs the KLU, BTF, AMD, and COLAMD mexFunctions
 %
 % Example:
-%   klu_install         % compiles KLU without CHOLMOD
-%   klu_install (1)     % with CHOLMOD, CCAMD, CCOLAMD, and METIS
+%   klu_install
 %
 % KLU relies on AMD, COLAMD, and BTF for its ordering options, and can
 % optionally use CHOLMOD, CCOLAMD, CAMD, and METIS as well.  By default,
@@ -15,14 +14,14 @@ function klu_install (with_cholmod)
 %
 % See also klu, btf
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
+% Copyright 2004-2009, Univ. of Florida
 
 if (nargin < 1)
-    with_cholmod = 0 ;
+    metis_path = ['no metis'] ;
 end
 
 % compile KLU and add to the path
-klu_make (with_cholmod) ;
+klu_make (metis_path) ;
 klu_path = pwd ;
 addpath (klu_path)
 
diff --git a/KLU/MATLAB/klu_make.m b/KLU/MATLAB/klu_make.m
index 1afd42c..ab2fb68 100644
--- a/KLU/MATLAB/klu_make.m
+++ b/KLU/MATLAB/klu_make.m
@@ -1,31 +1,26 @@
-function klu_make (with_cholmod)
+function klu_make (metis_path)
 %KLU_MAKE compiles the KLU mexFunctions
 %
 % Example:
-%   klu_make            % compiles KLU without CHOLMOD
-%   klu_make (1)        % with CHOLMOD, CCAMD, CCOLAMD, and METIS
+%   klu_make
 %
 % KLU relies on AMD, COLAMD, and BTF for its ordering options, and can
-% optionally use CHOLMOD, CCOLAMD, CAMD, and METIS as well.  By default,
-% CHOLMOD, CCOLAMD, CAMD, and METIS are not used.
-%
+% optionally use CHOLMOD, CCOLAMD, CAMD, and METIS as well.  METIS must
+% be placed in ../../metis-4.0 alongside KLU, or it will not be used.
 % See http://www-users.cs.umn.edu/~karypis/metis for a copy of METIS 4.0.1.
 %
 % You must type the klu_make command while in the KLU/MATLAB directory.
 %
-% See also klu
+% See also klu.
 
-% Copyright 2004-2007 Timothy A. Davis, Univ. of Florida
-% http://www.cise.ufl.edu/research/sparse
+% Copyright 2004-2009, Univ. of Florida
 
 if (nargin < 1)
-    with_cholmod = 0 ;
+    metis_path = '../../metis-4.0' ;
 end
+with_cholmod = exist ([metis_path '/Lib'], 'dir') ;
 
-details = 0 ;	    % if 1, print details of each command
-
-% modify this if your copy of METIS is not in SuiteSparse/metis-4.0:
-metis_path = '../../metis-4.0' ;
+details = 0 ;       % if 1, print details of each command
 
 d = '' ;
 if (~isempty (strfind (computer, '64')))
@@ -33,13 +28,18 @@ if (~isempty (strfind (computer, '64')))
     d = '-largeArrayDims' ;
 end
 
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    d = ['-silent ' d] ;
+end
+
 fprintf ('Compiling KLU ') ;
 kk = 0 ; 
 
-include = '-I. -I../../AMD/Include -I../../COLAMD/Include -I../Include -I../../UFconfig -I../../BTF/Include' ;
+include = '-I. -I../../AMD/Include -I../../COLAMD/Include -I../Include -I../../SuiteSparse_config -I../../BTF/Include' ;
 
 if (with_cholmod)
-    include = [include ' -I../../CCOLAMD/Include -I../../CAMD/Include -I../../CHOLMOD/Include -I../../UFconfig -I' metis_path '/Lib -I../User'] ;
+    include = [include ' -I../../CCOLAMD/Include -I../../CAMD/Include -I../../CHOLMOD/Include -I../../SuiteSparse_config -I' metis_path '/Lib -I../User'] ;
 end
 
 % do not attempt to compile CHOLMOD with large file support (not needed)
@@ -47,7 +47,7 @@ include = [include ' -DNLARGEFILE'] ;
 
 % fix the METIS 4.0.1 rename.h file
 if (with_cholmod)
-    fprintf ('with CHOLMOD, CCAMD, CCOLAMD, and METIS\n') ;
+    fprintf ('with CHOLMOD, CAMD, CCOLAMD, and METIS\n') ;
     f = fopen ('rename.h', 'w') ;
     if (f == -1)
         error ('unable to create rename.h in current directory') ;
@@ -65,11 +65,11 @@ if (with_cholmod)
     fclose (f) ;
     include = ['-DNSUPERNODAL -DNMODIFY -DNMATRIXOPS -DNCHECK ' include] ;
 else
-    fprintf ('without CHOLMOD, CCAMD, CCOLAMD, and METIS\n') ;
+    fprintf ('without CHOLMOD, CAMD, CCOLAMD, and METIS\n') ;
     include = ['-DNCHOLMOD ' include] ;
 end
 
-include = strrep (include, '/', filesep) ;
+suitesparse_src = { '../../SuiteSparse_config/SuiteSparse_config' } ;
 
 amd_src = { ...
     '../../AMD/Source/amd_1', ...
@@ -86,112 +86,121 @@ amd_src = { ...
     '../../AMD/Source/amd_preprocess', ...
     '../../AMD/Source/amd_valid' } ;
 
-camd_src = { ...
-    '../../CAMD/Source/camd_1', ...
-    '../../CAMD/Source/camd_2', ...
-    '../../CAMD/Source/camd_aat', ...
-    '../../CAMD/Source/camd_control', ...
-    '../../CAMD/Source/camd_defaults', ...
-    '../../CAMD/Source/camd_dump', ...
-    '../../CAMD/Source/camd_global', ...
-    '../../CAMD/Source/camd_info', ...
-    '../../CAMD/Source/camd_order', ...
-    '../../CAMD/Source/camd_postorder', ...
-    '../../CAMD/Source/camd_preprocess', ...
-    '../../CAMD/Source/camd_valid' } ;
-
 colamd_src = {
     '../../COLAMD/Source/colamd', ...
     '../../COLAMD/Source/colamd_global' } ;
 
-ccolamd_src = {
-    '../../CCOLAMD/Source/ccolamd', ...
-    '../../CCOLAMD/Source/ccolamd_global' } ;
-
-metis_src = {
-    'Lib/balance', ...
-    'Lib/bucketsort', ...
-    'Lib/ccgraph', ...
-    'Lib/coarsen', ...
-    'Lib/compress', ...
-    'Lib/debug', ...
-    'Lib/estmem', ...
-    'Lib/fm', ...
-    'Lib/fortran', ...
-    'Lib/frename', ...
-    'Lib/graph', ...
-    'Lib/initpart', ...
-    'Lib/kmetis', ...
-    'Lib/kvmetis', ...
-    'Lib/kwayfm', ...
-    'Lib/kwayrefine', ...
-    'Lib/kwayvolfm', ...
-    'Lib/kwayvolrefine', ...
-    'Lib/match', ...
-    'Lib/mbalance2', ...
-    'Lib/mbalance', ...
-    'Lib/mcoarsen', ...
-    'Lib/memory', ...
-    'Lib/mesh', ...
-    'Lib/meshpart', ...
-    'Lib/mfm2', ...
-    'Lib/mfm', ...
-    'Lib/mincover', ...
-    'Lib/minitpart2', ...
-    'Lib/minitpart', ...
-    'Lib/mkmetis', ...
-    'Lib/mkwayfmh', ...
-    'Lib/mkwayrefine', ...
-    'Lib/mmatch', ...
-    'Lib/mmd', ...
-    'Lib/mpmetis', ...
-    'Lib/mrefine2', ...
-    'Lib/mrefine', ...
-    'Lib/mutil', ...
-    'Lib/myqsort', ...
-    'Lib/ometis', ...
-    'Lib/parmetis', ...
-    'Lib/pmetis', ...
-    'Lib/pqueue', ...
-    'Lib/refine', ...
-    'Lib/separator', ...
-    'Lib/sfm', ...
-    'Lib/srefine', ...
-    'Lib/stat', ...
-    'Lib/subdomains', ...
-    'Lib/timing', ...
-    'Lib/util' } ;
-
-for i = 1:length (metis_src)
-    metis_src {i} = [metis_path '/' metis_src{i}] ;
-end
+if (with_cholmod)
+
+    camd_src = { ...
+        '../../CAMD/Source/camd_1', ...
+        '../../CAMD/Source/camd_2', ...
+        '../../CAMD/Source/camd_aat', ...
+        '../../CAMD/Source/camd_control', ...
+        '../../CAMD/Source/camd_defaults', ...
+        '../../CAMD/Source/camd_dump', ...
+        '../../CAMD/Source/camd_global', ...
+        '../../CAMD/Source/camd_info', ...
+        '../../CAMD/Source/camd_order', ...
+        '../../CAMD/Source/camd_postorder', ...
+        '../../CAMD/Source/camd_preprocess', ...
+        '../../CAMD/Source/camd_valid' } ;
+
+    ccolamd_src = {
+        '../../CCOLAMD/Source/ccolamd', ...
+        '../../CCOLAMD/Source/ccolamd_global' } ;
+
+    metis_src = {
+        'Lib/balance', ...
+        'Lib/bucketsort', ...
+        'Lib/ccgraph', ...
+        'Lib/coarsen', ...
+        'Lib/compress', ...
+        'Lib/debug', ...
+        'Lib/estmem', ...
+        'Lib/fm', ...
+        'Lib/fortran', ...
+        'Lib/frename', ...
+        'Lib/graph', ...
+        'Lib/initpart', ...
+        'Lib/kmetis', ...
+        'Lib/kvmetis', ...
+        'Lib/kwayfm', ...
+        'Lib/kwayrefine', ...
+        'Lib/kwayvolfm', ...
+        'Lib/kwayvolrefine', ...
+        'Lib/match', ...
+        'Lib/mbalance2', ...
+        'Lib/mbalance', ...
+        'Lib/mcoarsen', ...
+        'Lib/memory', ...
+        'Lib/mesh', ...
+        'Lib/meshpart', ...
+        'Lib/mfm2', ...
+        'Lib/mfm', ...
+        'Lib/mincover', ...
+        'Lib/minitpart2', ...
+        'Lib/minitpart', ...
+        'Lib/mkmetis', ...
+        'Lib/mkwayfmh', ...
+        'Lib/mkwayrefine', ...
+        'Lib/mmatch', ...
+        'Lib/mmd', ...
+        'Lib/mpmetis', ...
+        'Lib/mrefine2', ...
+        'Lib/mrefine', ...
+        'Lib/mutil', ...
+        'Lib/myqsort', ...
+        'Lib/ometis', ...
+        'Lib/parmetis', ...
+        'Lib/pmetis', ...
+        'Lib/pqueue', ...
+        'Lib/refine', ...
+        'Lib/separator', ...
+        'Lib/sfm', ...
+        'Lib/srefine', ...
+        'Lib/stat', ...
+        'Lib/subdomains', ...
+        'Lib/timing', ...
+        'Lib/util' } ;
+
+    for i = 1:length (metis_src)
+        metis_src {i} = [metis_path '/' metis_src{i}] ;
+    end
 
-cholmod_src = {
-    '../../CHOLMOD/Core/cholmod_aat', ...
-    '../../CHOLMOD/Core/cholmod_add', ...
-    '../../CHOLMOD/Core/cholmod_band', ...
-    '../../CHOLMOD/Core/cholmod_change_factor', ...
-    '../../CHOLMOD/Core/cholmod_common', ...
-    '../../CHOLMOD/Core/cholmod_complex', ...
-    '../../CHOLMOD/Core/cholmod_copy', ...
-    '../../CHOLMOD/Core/cholmod_dense', ...
-    '../../CHOLMOD/Core/cholmod_error', ...
-    '../../CHOLMOD/Core/cholmod_factor', ...
-    '../../CHOLMOD/Core/cholmod_memory', ...
-    '../../CHOLMOD/Core/cholmod_sparse', ...
-    '../../CHOLMOD/Core/cholmod_transpose', ...
-    '../../CHOLMOD/Core/cholmod_triplet', ...
-    '../../CHOLMOD/Cholesky/cholmod_amd', ...
-    '../../CHOLMOD/Cholesky/cholmod_analyze', ...
-    '../../CHOLMOD/Cholesky/cholmod_colamd', ...
-    '../../CHOLMOD/Cholesky/cholmod_etree', ...
-    '../../CHOLMOD/Cholesky/cholmod_postorder', ...
-    '../../CHOLMOD/Cholesky/cholmod_rowcolcounts', ...
-    '../../CHOLMOD/Partition/cholmod_ccolamd', ...
-    '../../CHOLMOD/Partition/cholmod_csymamd', ...
-    '../../CHOLMOD/Partition/cholmod_camd', ...
-    '../../CHOLMOD/Partition/cholmod_metis', ...
-    '../../CHOLMOD/Partition/cholmod_nesdis' } ;
+    cholmod_src = {
+        '../../CHOLMOD/Core/cholmod_aat', ...
+        '../../CHOLMOD/Core/cholmod_add', ...
+        '../../CHOLMOD/Core/cholmod_band', ...
+        '../../CHOLMOD/Core/cholmod_change_factor', ...
+        '../../CHOLMOD/Core/cholmod_common', ...
+        '../../CHOLMOD/Core/cholmod_complex', ...
+        '../../CHOLMOD/Core/cholmod_copy', ...
+        '../../CHOLMOD/Core/cholmod_dense', ...
+        '../../CHOLMOD/Core/cholmod_error', ...
+        '../../CHOLMOD/Core/cholmod_factor', ...
+        '../../CHOLMOD/Core/cholmod_memory', ...
+        '../../CHOLMOD/Core/cholmod_sparse', ...
+        '../../CHOLMOD/Core/cholmod_transpose', ...
+        '../../CHOLMOD/Core/cholmod_triplet', ...
+        '../../CHOLMOD/Cholesky/cholmod_amd', ...
+        '../../CHOLMOD/Cholesky/cholmod_analyze', ...
+        '../../CHOLMOD/Cholesky/cholmod_colamd', ...
+        '../../CHOLMOD/Cholesky/cholmod_etree', ...
+        '../../CHOLMOD/Cholesky/cholmod_postorder', ...
+        '../../CHOLMOD/Cholesky/cholmod_rowcolcounts', ...
+        '../../CHOLMOD/Partition/cholmod_ccolamd', ...
+        '../../CHOLMOD/Partition/cholmod_csymamd', ...
+        '../../CHOLMOD/Partition/cholmod_camd', ...
+        '../../CHOLMOD/Partition/cholmod_metis', ...
+        '../../CHOLMOD/Partition/cholmod_nesdis' } ;
+
+else
+    camd_src = { } ;
+    ccolamd_src = { } ;
+    metis_src = { } ;
+    cholmod_src = { } ;
+end
 
 btf_src = {
     '../../BTF/Source/btf_maxtrans', ...
@@ -206,7 +215,7 @@ klu_src = {
     '../Source/klu_memory' } ;
 
 if (with_cholmod)
-    klu_src = [klu_src { '../User/klu_l_cholmod' }] ;			    %#ok
+    klu_src = [klu_src { '../User/klu_l_cholmod' }] ;                       %#ok
 end
 
 klu_zlsrc = {
@@ -275,28 +284,28 @@ end
 % compile each library source file
 obj = ' ' ;
 
-source = [amd_src btf_src klu_src colamd_src] ;
+source = [suitesparse_src amd_src btf_src klu_src colamd_src] ;
 if (with_cholmod)
     source = [metis_src ccolamd_src camd_src cholmod_src source] ;
 end
 
 for f = source
-    fs = strrep (f {1}, '/', filesep) ;
-    slash = strfind (fs, filesep) ;
+    fs = f {1} ;
+    slash = strfind (fs, '/') ;
     if (isempty (slash))
         slash = 1 ;
     else
         slash = slash (end) + 1 ;
     end
     o = fs (slash:end) ;
-    obj = [obj  ' ' o obj_extension] ;					    %#ok
+    obj = [obj  ' ' o obj_extension] ;                                      %#ok
     s = sprintf ('mex %s -DDLONG -O %s -c %s.c', d, include, fs) ;
     kk = do_cmd (s, kk, details) ;
 end
 
 for k = 1:length(klu_zlsrc)
-    ff = strrep (klu_zlsrc {k}, '/', filesep) ;
-    slash = strfind (ff, filesep) ;
+    ff = klu_zlsrc {k} ;
+    slash = strfind (ff, '/') ;
     if (isempty (slash))
         slash = 1 ;
     else
@@ -306,18 +315,24 @@ for k = 1:length(klu_zlsrc)
     s = sprintf ('mex %s -DDLONG -O %s -c %s.c', d, include, ff) ;
     kk = do_cmd (s, kk, details) ;
     lobj = klu_lobj {k} ;
-    obj = [obj  ' ' lobj obj_extension] ;				    %#ok
+    obj = [obj  ' ' lobj obj_extension] ;                                   %#ok
     mvfile ([o obj_extension], [lobj obj_extension]) ;
     s = sprintf ('mex %s -DDLONG -DCOMPLEX -O %s -c %s.c', d, include, ff) ;
     kk = do_cmd (s, kk, details) ;
     zlobj = klu_zlobj {k} ;
-    obj = [obj  ' ' zlobj obj_extension] ;				    %#ok
+    obj = [obj  ' ' zlobj obj_extension] ;                                  %#ok
     mvfile ([o obj_extension], [zlobj obj_extension]) ;
 end
 
 % compile the KLU mexFunction
 s = sprintf ('mex %s -DDLONG -O %s -output klu klu_mex.c', d, include) ;
-s = [s obj] ;								    %#ok
+s = [s obj] ;                                                               %#ok
+
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    s = [s ' -lrt'] ;
+end
+
 kk = do_cmd (s, kk, details) ;
 
 % clean up
@@ -330,7 +345,7 @@ fprintf ('\nKLU successfully compiled\n') ;
 
 function rmfile (file)
 % rmfile:  delete a file, but only if it exists
-if (length (dir (file)) > 0)						    %#ok
+if (length (dir (file)) > 0)                                                %#ok
     delete (file) ;
 end
 
@@ -339,11 +354,19 @@ end
 function cpfile (src, dst)
 % cpfile:  copy the src file to the filename dst, overwriting dst if it exists
 rmfile (dst)
-if (length (dir (src)) == 0)	%#ok
+if (length (dir (src)) == 0)    %#ok
     fprintf ('File does not exist: %s\n', src) ;
     error ('File does not exist') ;
 end
-copyfile (src, dst) ;
+try
+    copyfile (src, dst) ;
+catch ME
+    % ignore errors of the form "cp: preserving permissions: ...
+    % Operation not supported".  rethrow all other errors.
+    if (isempty (strfind (ME.message, 'Operation not supported')))
+        rethrow (ME) ;
+    end
+end
 
 %-------------------------------------------------------------------------------
 
@@ -359,7 +382,7 @@ if (details)
     fprintf ('%s\n', s) ;
 else
     if (mod (kk, 60) == 0)
-	fprintf ('\n') ;
+        fprintf ('\n') ;
     end
     kk = kk + 1 ;
     fprintf ('.') ;
diff --git a/KLU/MATLAB/klu_mex.c b/KLU/MATLAB/klu_mex.c
index 89864ac..f19f8a3 100644
--- a/KLU/MATLAB/klu_mex.c
+++ b/KLU/MATLAB/klu_mex.c
@@ -6,17 +6,17 @@
 
     3 or 4 input arguments: factorize and solve, returning the solution:
 
-	x = klu (A, '\', b)
-	x = klu (A, '\', b, opts)
-	x = klu (b, '/', A)
-	x = klu (b, '/', A, opts)
+        x = klu (A, '\', b)
+        x = klu (A, '\', b, opts)
+        x = klu (b, '/', A)
+        x = klu (b, '/', A, opts)
 
     A can be the LU struct, instead:
 
-	x = klu (LU, '\', b)
-	x = klu (LU, '\', b, opts)
-	x = klu (b, '/', LU)
-	x = klu (b, '/', LU, opts)
+        x = klu (LU, '\', b)
+        x = klu (LU, '\', b, opts)
+        x = klu (b, '/', LU)
+        x = klu (b, '/', LU, opts)
 
     where LU is a struct containing members: L, U, p, q, R, F, and r.  Only L
     and U are required.  The factorization is L*U+F = R\A(p,q), where r defines
@@ -25,8 +25,8 @@
 
     with 1 or 2 input arguments: factorize, returning the LU struct:
 
-	LU = klu (A)
-	LU = klu (A, opts)
+        LU = klu (A)
+        LU = klu (A, opts)
 
     2nd optional output: info, which is only meaningful if A was factorized.
 
@@ -34,20 +34,21 @@
 
     Obscure options, mainly for testing:
 
-	opts.memgrow	1.2	when L and U need to grow, inc. by this ratio.
-				valid range: 1 or more.
-	opts.imemamd	1.2	initial size of L and U with AMD or other
-				symmetric ordering is 1.2*nnz(L)+n;
-				valid range 1 or more.
-	opts.imem	10	initial size of L and U is 10*nnz(A)+n if a
-				symmetric ordering not used; valid range 1 or
-				more
+        opts.memgrow    1.2     when L and U need to grow, inc. by this ratio.
+                                valid range: 1 or more.
+        opts.imemamd    1.2     initial size of L and U with AMD or other
+                                symmetric ordering is 1.2*nnz(L)+n;
+                                valid range 1 or more.
+        opts.imem       10      initial size of L and U is 10*nnz(A)+n if a
+                                symmetric ordering not used; valid range 1 or
+                                more
 */
 
 /* ========================================================================== */
 
 #include "klu.h"
 #include <string.h>
+#define Long SuiteSparse_long
 
 #ifndef NCHOLMOD
 #include "klu_cholmod.h"
@@ -66,17 +67,17 @@
     double r, den ; \
     if (ABS (bx) >= ABS (bz)) \
     { \
-	r = bz / bx ; \
-	den = bx + r * bz ; \
-	cx = (ax + az * r) / den ; \
-	cz = (az - ax * r) / den ; \
+        r = bz / bx ; \
+        den = bx + r * bz ; \
+        cx = (ax + az * r) / den ; \
+        cz = (az - ax * r) / den ; \
     } \
     else \
     { \
-	r = bx / bz ; \
-	den = r * bx + bz ; \
-	cx = (ax * r + az) / den ; \
-	cz = (az * r - ax) / den ; \
+        r = bx / bz ; \
+        den = r * bx + bz ; \
+        cx = (ax * r + az) / den ; \
+        cz = (az * r - ax) / den ; \
     } \
 }
 
@@ -102,43 +103,43 @@
 
 void mexFunction
 (
-    int	nargout,
+    int nargout,
     mxArray *pargout [ ],
-    int	nargin,
+    int nargin,
     const mxArray *pargin [ ]
 )
 {
     double ukk, lkk, rs, s, lik, uik, x [4], offik, z, ukkz, lkkz, sz, wx, wz ;
     double *X, *B, *Xz, *Xx, *Bx, *Bz, *A, *Ax, *Az, *Lx, *Ux, *Rs, *Offx, *Wx,
-	*Uz, *Lz, *Offz, *Wz, *W, *Xi, *Bi ;
-    UF_long *Ap, *Ai, *Lp, *Li, *Up, *Ui, *P, *Q, *R, *Rp, *Ri, *Offp, *Offi ;
+        *Uz, *Lz, *Offz, *Wz, *W, *Xi, *Bi ;
+    Long *Ap, *Ai, *Lp, *Li, *Up, *Ui, *P, *Q, *R, *Rp, *Ri, *Offp, *Offi ;
     char *operator ;
     mxArray *L_matlab, *U_matlab, *p_matlab, *q_matlab, *R_matlab, *F_matlab,
-	*r_matlab, *field ;
+        *r_matlab, *field ;
     const mxArray *A_matlab = NULL, *LU_matlab, *B_matlab = NULL, *opts_matlab ;
     klu_l_symbolic *Symbolic ;
     klu_l_numeric *Numeric ;
     klu_l_common Common ;
-    UF_long n = 0, k, nrhs = 0, do_solve, do_factorize, symmetric,
-	A_complex = 0, B_complex, nz, do_transpose = 0, p, pend, nblocks,
-	R1 [2], chunk, nr, i, j, block, k1, k2, nk, bn = 0, ordering ;
+    Long n = 0, k, nrhs = 0, do_solve, do_factorize, symmetric,
+        A_complex = 0, B_complex, nz, do_transpose = 0, p, pend, nblocks,
+        R1 [2], chunk, nr, i, j, block, k1, k2, nk, bn = 0, ordering ;
     int mx_int ;
     static const char *fnames [ ] = {
-	"noffdiag",	/* # of off-diagonal pivots */
-	"nrealloc",	/* # of memory reallocations */
-	"rcond",	/* cheap reciprocal number estimate */
-	"rgrowth",	/* reciprocal pivot growth */
-	"flops",	/* flop count */
-	"nblocks",	/* # of blocks in BTF form (1 if not computed) */
-	"ordering",	/* AMD, COLAMD, natural, cholmod(AA'), cholmod(A+A') */
-	"scale",	/* scaling (<=0: none, 1: sum, 2: max */
-	"lnz",		/* nnz(L), including diagonal */
-	"unz",		/* nnz(U), including diagonal */
-	"offnz",	/* nnz(F), including diagonal */
-	"tol",		/* pivot tolerance used */
-	"memory"	/* peak memory usage */
-	},
-	*LUnames [ ] = { "L", "U", "p", "q", "R", "F", "r" } ;
+        "noffdiag",     /* # of off-diagonal pivots */
+        "nrealloc",     /* # of memory reallocations */
+        "rcond",        /* cheap reciprocal number estimate */
+        "rgrowth",      /* reciprocal pivot growth */
+        "flops",        /* flop count */
+        "nblocks",      /* # of blocks in BTF form (1 if not computed) */
+        "ordering",     /* AMD, COLAMD, natural, cholmod(AA'), cholmod(A+A') */
+        "scale",        /* scaling (<=0: none, 1: sum, 2: max */
+        "lnz",          /* nnz(L), including diagonal */
+        "unz",          /* nnz(U), including diagonal */
+        "offnz",        /* nnz(F), including diagonal */
+        "tol",          /* pivot tolerance used */
+        "memory"        /* peak memory usage */
+        },
+        *LUnames [ ] = { "L", "U", "p", "q", "R", "F", "r" } ;
 
     /* ---------------------------------------------------------------------- */
     /* get inputs */
@@ -146,104 +147,104 @@ void mexFunction
 
     if (nargin < 1 || nargin > 4 || nargout > 3)
     {
-	mexErrMsgTxt (
-	    "Usage: x = klu(A,'\',b), x = klu(A,'/',b) or LU = klu(A)") ;
+        mexErrMsgTxt (
+            "Usage: x = klu(A,'\',b), x = klu(A,'/',b) or LU = klu(A)") ;
     }
 
     /* return the solution x, or just do LU factorization */
     do_solve = (nargin > 2) ;
 
     /* determine size of the MATLAB integer */
-    if (sizeof (UF_long) == sizeof (INT32_T))
+    if (sizeof (Long) == sizeof (INT32_T))
     {
-	mx_int = mxINT32_CLASS ;
+        mx_int = mxINT32_CLASS ;
     }
     else
     {
-	mx_int = mxINT64_CLASS ;
+        mx_int = mxINT64_CLASS ;
     }
 
     if (do_solve)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* slash or backslash */
-	/* ------------------------------------------------------------------ */
-
-	/* usage, where opts is the optional 4th input argument:
-	    x = klu (A,  '\', b)
-	    x = klu (LU, '\', b)
-	    x = klu (b,  '/', A)
-	    x = klu (b,  '/', LU)
-	 */
-
-	/* determine the operator, slash (/) or backslash (\) */
-	if (!mxIsChar (pargin [1]))
-	{
-	    mexErrMsgTxt ("invalid operator") ;
-	}
-	operator = mxArrayToString (pargin [1]) ;
-	if (STRING_MATCH (operator, "\\"))
-	{
-	    do_transpose = 0 ;
-	    A_matlab = pargin [0] ;
-	    B_matlab = pargin [2] ;
-	    nrhs = mxGetN (B_matlab) ;
-	    bn = mxGetM (B_matlab) ;
-	}
-	else if (STRING_MATCH (operator, "/"))
-	{
-	    do_transpose = 1 ;
-	    A_matlab = pargin [2] ;
-	    B_matlab = pargin [0] ;
-	    nrhs = mxGetM (B_matlab) ;
-	    bn = mxGetN (B_matlab) ;
-	}
-	else
-	{
-	    mexErrMsgTxt ("invalid operator") ;
-	}
-
-	if (mxIsSparse (B_matlab))
-	{
-	    mexErrMsgTxt ("B cannot be sparse") ;
-	}
-
-	opts_matlab = (nargin > 3) ? pargin [3] : NULL ;
-
-	/* determine if the factorization needs to be performed */
-	do_factorize = !mxIsStruct (A_matlab) ;
-	if (do_factorize)
-	{
-	    LU_matlab = NULL ;
-	}
-	else
-	{
-	    LU_matlab = A_matlab ;
-	    A_matlab = NULL ;
-	}
+        /* ------------------------------------------------------------------ */
+        /* slash or backslash */
+        /* ------------------------------------------------------------------ */
+
+        /* usage, where opts is the optional 4th input argument:
+            x = klu (A,  '\', b)
+            x = klu (LU, '\', b)
+            x = klu (b,  '/', A)
+            x = klu (b,  '/', LU)
+         */
+
+        /* determine the operator, slash (/) or backslash (\) */
+        if (!mxIsChar (pargin [1]))
+        {
+            mexErrMsgTxt ("invalid operator") ;
+        }
+        operator = mxArrayToString (pargin [1]) ;
+        if (STRING_MATCH (operator, "\\"))
+        {
+            do_transpose = 0 ;
+            A_matlab = pargin [0] ;
+            B_matlab = pargin [2] ;
+            nrhs = mxGetN (B_matlab) ;
+            bn = mxGetM (B_matlab) ;
+        }
+        else if (STRING_MATCH (operator, "/"))
+        {
+            do_transpose = 1 ;
+            A_matlab = pargin [2] ;
+            B_matlab = pargin [0] ;
+            nrhs = mxGetM (B_matlab) ;
+            bn = mxGetN (B_matlab) ;
+        }
+        else
+        {
+            mexErrMsgTxt ("invalid operator") ;
+        }
+
+        if (mxIsSparse (B_matlab))
+        {
+            mexErrMsgTxt ("B cannot be sparse") ;
+        }
+
+        opts_matlab = (nargin > 3) ? pargin [3] : NULL ;
+
+        /* determine if the factorization needs to be performed */
+        do_factorize = !mxIsStruct (A_matlab) ;
+        if (do_factorize)
+        {
+            LU_matlab = NULL ;
+        }
+        else
+        {
+            LU_matlab = A_matlab ;
+            A_matlab = NULL ;
+        }
 
     }
     else
     {
 
-	/* ------------------------------------------------------------------ */
-	/* factorize A and return LU factorization */
-	/* ------------------------------------------------------------------ */
-
-	/* usage, where opts in the optional 2nd input argument:
-	    LU = klu (A)
-	 */
-
-	LU_matlab = NULL ;
-	A_matlab = pargin [0] ;
-	B_matlab = NULL ;
-	opts_matlab = (nargin > 1) ? pargin [1] : NULL ;
-	do_factorize = 1 ;
-	if (mxIsStruct (A_matlab))
-	{
-	    mexErrMsgTxt ("invalid input, A must be a sparse matrix") ;
-	}
+        /* ------------------------------------------------------------------ */
+        /* factorize A and return LU factorization */
+        /* ------------------------------------------------------------------ */
+
+        /* usage, where opts in the optional 2nd input argument:
+            LU = klu (A)
+         */
+
+        LU_matlab = NULL ;
+        A_matlab = pargin [0] ;
+        B_matlab = NULL ;
+        opts_matlab = (nargin > 1) ? pargin [1] : NULL ;
+        do_factorize = 1 ;
+        if (mxIsStruct (A_matlab))
+        {
+            mexErrMsgTxt ("invalid input, A must be a sparse matrix") ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -252,52 +253,46 @@ void mexFunction
 
     klu_l_defaults (&Common) ;
 
-    /* memory management routines */
-    Common.malloc_memory  = mxMalloc ;
-    Common.calloc_memory  = mxCalloc ;
-    Common.free_memory    = mxFree ;
-    Common.realloc_memory = mxRealloc ;
-
     /* factorization options */
     if (opts_matlab != NULL && mxIsStruct (opts_matlab))
     {
-	if ((field = mxGetField (opts_matlab, 0, "tol")) != NULL)
-	{
-	    Common.tol = mxGetScalar (field) ;
-	}
-	if ((field = mxGetField (opts_matlab, 0, "memgrow")) != NULL)
-	{
-	    Common.memgrow = mxGetScalar (field) ;
-	}
-	if ((field = mxGetField (opts_matlab, 0, "imemamd")) != NULL)
-	{
-	    Common.initmem_amd = mxGetScalar (field) ;
-	}
-	if ((field = mxGetField (opts_matlab, 0, "imem")) != NULL)
-	{
-	    Common.initmem = mxGetScalar (field) ;
-	}
-	if ((field = mxGetField (opts_matlab, 0, "btf")) != NULL)
-	{
-	    Common.btf = mxGetScalar (field) ;
-	}
-	if ((field = mxGetField (opts_matlab, 0, "ordering")) != NULL)
-	{
-	    Common.ordering = mxGetScalar (field) ;
-	}
-	if ((field = mxGetField (opts_matlab, 0, "scale")) != NULL)
-	{
-	    Common.scale = mxGetScalar (field) ;
-	}
-	if ((field = mxGetField (opts_matlab, 0, "maxwork")) != NULL)
-	{
-	    Common.maxwork = mxGetScalar (field) ;
-	}
+        if ((field = mxGetField (opts_matlab, 0, "tol")) != NULL)
+        {
+            Common.tol = mxGetScalar (field) ;
+        }
+        if ((field = mxGetField (opts_matlab, 0, "memgrow")) != NULL)
+        {
+            Common.memgrow = mxGetScalar (field) ;
+        }
+        if ((field = mxGetField (opts_matlab, 0, "imemamd")) != NULL)
+        {
+            Common.initmem_amd = mxGetScalar (field) ;
+        }
+        if ((field = mxGetField (opts_matlab, 0, "imem")) != NULL)
+        {
+            Common.initmem = mxGetScalar (field) ;
+        }
+        if ((field = mxGetField (opts_matlab, 0, "btf")) != NULL)
+        {
+            Common.btf = mxGetScalar (field) ;
+        }
+        if ((field = mxGetField (opts_matlab, 0, "ordering")) != NULL)
+        {
+            Common.ordering = mxGetScalar (field) ;
+        }
+        if ((field = mxGetField (opts_matlab, 0, "scale")) != NULL)
+        {
+            Common.scale = mxGetScalar (field) ;
+        }
+        if ((field = mxGetField (opts_matlab, 0, "maxwork")) != NULL)
+        {
+            Common.maxwork = mxGetScalar (field) ;
+        }
     }
 
     if (Common.ordering < 0 || Common.ordering > 4)
     {
-	mexErrMsgTxt ("invalid ordering option") ;
+        mexErrMsgTxt ("invalid ordering option") ;
     }
     ordering = Common.ordering ;
 
@@ -311,13 +306,13 @@ void mexFunction
     /* CHOLMOD, METIS, CAMD, CCOLAMD, not available */
     if (Common.ordering > 2)
     {
-	mexErrMsgTxt ("invalid ordering option") ;
+        mexErrMsgTxt ("invalid ordering option") ;
     }
 #endif
 
     if (Common.scale < 1 || Common.scale > 2)
     {
-	Common.scale = -1 ; /* no scaling, and no error checking either */
+        Common.scale = -1 ; /* no scaling, and no error checking either */
     }
 
     /* ---------------------------------------------------------------------- */
@@ -327,131 +322,131 @@ void mexFunction
     if (do_factorize)
     {
 
-	/* get input matrix A to factorize */
-	n = mxGetN (A_matlab) ;
-	if (!mxIsSparse (A_matlab) || n != mxGetM (A_matlab) || n == 0)
-	{
-	    mexErrMsgTxt ("A must be sparse, square, and non-empty") ;
-	}
-
-	Ap = (UF_long *) mxGetJc (A_matlab) ;
-	Ai = (UF_long *) mxGetIr (A_matlab) ;
-	Ax = mxGetPr (A_matlab) ;
-	Az = mxGetPi (A_matlab) ;
-	nz = Ap [n] ;
-	A_complex = mxIsComplex (A_matlab) ;
-
-	if (do_solve && (n != bn || nrhs == 0))
-	{
-	    mexErrMsgTxt ("B must be non-empty with same number of rows as A") ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* analyze */
-	/* ------------------------------------------------------------------ */
-
-	Symbolic = klu_l_analyze (n, Ap, Ai, &Common) ;
-	if (Symbolic == (klu_l_symbolic *) NULL)
-	{
-	    mexErrMsgTxt ("klu symbolic analysis failed") ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* factorize */
-	/* ------------------------------------------------------------------ */
-
-	if (A_complex)
-	{
-	    /* A is complex */
-	    A = mxMalloc (nz * 2 * sizeof (double)) ;
-	    for (k = 0 ; k < nz ; k++)
-	    {
-		A [2*k  ] = Ax [k] ;	    /* real part */
-		A [2*k+1] = Az [k] ;	    /* imaginary part */
-	    }
-	    Numeric = klu_zl_factor (Ap, Ai, A, Symbolic, &Common) ;
-	    if (nargout > 1)
-	    {
-		/* flops and rgrowth, if requested */
-		klu_zl_flops (Symbolic, Numeric, &Common) ;
-		klu_zl_rgrowth (Ap, Ai, A, Symbolic, Numeric, &Common) ;
-	    }
-	    mxFree (A) ;
-	}
-	else
-	{
-	    /* A is real */
-	    Numeric = klu_l_factor (Ap, Ai, Ax, Symbolic, &Common) ;
-	    if (nargout > 1)
-	    {
-		/* flops, if requested */
-		klu_l_flops (Symbolic, Numeric, &Common) ;
-		klu_l_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, &Common) ;
-	    }
-	}
-	if (Common.status != KLU_OK)
-	{
-	    mexErrMsgTxt ("klu numeric factorization failed") ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* compute cheap condition number estimate */
-	/* ------------------------------------------------------------------ */
-
-	if (A_complex)
-	{
-	    klu_zl_rcond (Symbolic, Numeric, &Common) ;
-	}
-	else
-	{
-	    klu_l_rcond (Symbolic, Numeric, &Common) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* return info, if requested */
-	/* ------------------------------------------------------------------ */
+        /* get input matrix A to factorize */
+        n = mxGetN (A_matlab) ;
+        if (!mxIsSparse (A_matlab) || n != mxGetM (A_matlab) || n == 0)
+        {
+            mexErrMsgTxt ("A must be sparse, square, and non-empty") ;
+        }
+
+        Ap = (Long *) mxGetJc (A_matlab) ;
+        Ai = (Long *) mxGetIr (A_matlab) ;
+        Ax = mxGetPr (A_matlab) ;
+        Az = mxGetPi (A_matlab) ;
+        nz = Ap [n] ;
+        A_complex = mxIsComplex (A_matlab) ;
+
+        if (do_solve && (n != bn || nrhs == 0))
+        {
+            mexErrMsgTxt ("B must be non-empty with same number of rows as A") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* analyze */
+        /* ------------------------------------------------------------------ */
+
+        Symbolic = klu_l_analyze (n, Ap, Ai, &Common) ;
+        if (Symbolic == (klu_l_symbolic *) NULL)
+        {
+            mexErrMsgTxt ("klu symbolic analysis failed") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* factorize */
+        /* ------------------------------------------------------------------ */
+
+        if (A_complex)
+        {
+            /* A is complex */
+            A = mxMalloc (nz * 2 * sizeof (double)) ;
+            for (k = 0 ; k < nz ; k++)
+            {
+                A [2*k  ] = Ax [k] ;        /* real part */
+                A [2*k+1] = Az [k] ;        /* imaginary part */
+            }
+            Numeric = klu_zl_factor (Ap, Ai, A, Symbolic, &Common) ;
+            if (nargout > 1)
+            {
+                /* flops and rgrowth, if requested */
+                klu_zl_flops (Symbolic, Numeric, &Common) ;
+                klu_zl_rgrowth (Ap, Ai, A, Symbolic, Numeric, &Common) ;
+            }
+            mxFree (A) ;
+        }
+        else
+        {
+            /* A is real */
+            Numeric = klu_l_factor (Ap, Ai, Ax, Symbolic, &Common) ;
+            if (nargout > 1)
+            {
+                /* flops, if requested */
+                klu_l_flops (Symbolic, Numeric, &Common) ;
+                klu_l_rgrowth (Ap, Ai, Ax, Symbolic, Numeric, &Common) ;
+            }
+        }
+        if (Common.status != KLU_OK)
+        {
+            mexErrMsgTxt ("klu numeric factorization failed") ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* compute cheap condition number estimate */
+        /* ------------------------------------------------------------------ */
+
+        if (A_complex)
+        {
+            klu_zl_rcond (Symbolic, Numeric, &Common) ;
+        }
+        else
+        {
+            klu_l_rcond (Symbolic, Numeric, &Common) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* return info, if requested */
+        /* ------------------------------------------------------------------ */
 
 #define INFO(i,x) \
-	mxSetFieldByNumber (pargout [1], 0, i, mxCreateScalarDouble (x))
-
-	if (nargout > 1)
-	{
-	    pargout [1] = mxCreateStructMatrix (1, 1, 13, fnames) ;
-	    INFO (0, Common.noffdiag) ;
-	    INFO (1, Common.nrealloc) ;
-	    INFO (2, Common.rcond) ;
-	    INFO (3, Common.rgrowth) ;
-	    INFO (4, Common.flops) ;
-	    INFO (5, Symbolic->nblocks) ;
-	    INFO (6, ordering) ;
-	    INFO (7, Common.scale) ;
-	    INFO (8, Numeric->lnz) ;
-	    INFO (9, Numeric->unz) ;
-	    INFO (10, Numeric->nzoff) ;
-	    INFO (11, Common.tol) ;
-	    INFO (12, Common.mempeak) ;
-	}
-	if (nargout > 2)
-	{
-	    /* this is done separately, since it's costly */
-	    klu_l_condest (Ap, Ax, Symbolic, Numeric, &Common) ;
-	    pargout [2] = mxCreateDoubleMatrix (1, 1, mxREAL) ;
-	    Wx = mxGetPr (pargout [2]) ;
-	    Wx [0] = Common.condest ;
-	}
+        mxSetFieldByNumber (pargout [1], 0, i, mxCreateDoubleScalar (x))
+
+        if (nargout > 1)
+        {
+            pargout [1] = mxCreateStructMatrix (1, 1, 13, fnames) ;
+            INFO (0, Common.noffdiag) ;
+            INFO (1, Common.nrealloc) ;
+            INFO (2, Common.rcond) ;
+            INFO (3, Common.rgrowth) ;
+            INFO (4, Common.flops) ;
+            INFO (5, Symbolic->nblocks) ;
+            INFO (6, ordering) ;
+            INFO (7, Common.scale) ;
+            INFO (8, Numeric->lnz) ;
+            INFO (9, Numeric->unz) ;
+            INFO (10, Numeric->nzoff) ;
+            INFO (11, Common.tol) ;
+            INFO (12, Common.mempeak) ;
+        }
+        if (nargout > 2)
+        {
+            /* this is done separately, since it's costly */
+            klu_l_condest (Ap, Ax, Symbolic, Numeric, &Common) ;
+            pargout [2] = mxCreateDoubleMatrix (1, 1, mxREAL) ;
+            Wx = mxGetPr (pargout [2]) ;
+            Wx [0] = Common.condest ;
+        }
 
     }
     else
     {
-	/* create an empty "info" and "condest" output */
-	if (nargout > 1)
-	{
-	    pargout [1] = mxCreateDoubleMatrix (0, 0, mxREAL) ;
-	}
-	if (nargout > 2)
-	{
-	    pargout [2] = mxCreateDoubleMatrix (0, 0, mxREAL) ;
-	}
+        /* create an empty "info" and "condest" output */
+        if (nargout > 1)
+        {
+            pargout [1] = mxCreateDoubleMatrix (0, 0, mxREAL) ;
+        }
+        if (nargout > 2)
+        {
+            pargout [2] = mxCreateDoubleMatrix (0, 0, mxREAL) ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -461,1519 +456,1519 @@ void mexFunction
     if (do_solve)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* solve, x = klu ( ... ) usage */
-	/* ------------------------------------------------------------------ */
-
-	B_complex = mxIsComplex (B_matlab) ;
-
-	if (do_factorize)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* solve using KLU factors computed above */
-	    /* -------------------------------------------------------------- */
-
-	    /* klu (A,'\',b) or klu (b,'/',A) usage */
-
-	    /* create X */
-	    if (do_transpose)
-	    {
-		pargout [0] = mxCreateDoubleMatrix (nrhs, n,
-		    (A_complex || B_complex) ?  mxCOMPLEX : mxREAL) ;
-	    }
-	    else
-	    {
-		pargout [0] = mxCreateDoubleMatrix (n, nrhs,
-		    (A_complex || B_complex) ?  mxCOMPLEX : mxREAL) ;
-	    }
-
-	    if (A_complex)
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* A is complex, but B might be real */
-		/* ---------------------------------------------------------- */
-
-		X = mxMalloc (n * nrhs * 2 * sizeof (double)) ;
-		Bx = mxGetPr (B_matlab) ;
-		Bz = mxGetPi (B_matlab) ;
-
-		if (do_transpose)
-		{
-
-		    /* X = B', merge and transpose B */
-		    for (j = 0 ; j < nrhs ; j++)
-		    {
-			for (i = 0 ; i < n ; i++)
-			{
-			    X [2*(i+j*n)  ] = Bx [j+i*nrhs] ;	/* real */
-			    X [2*(i+j*n)+1] = Bz ? (-Bz [j+i*nrhs]) : 0 ;
-			}
-		    }
-
-		    /* solve A'x=b (complex conjugate) */
-		    klu_zl_tsolve (Symbolic, Numeric, n, nrhs, X, 1, &Common) ;
-
-		    /* split and transpose the solution */
-		    Xx = mxGetPr (pargout [0]) ;
-		    Xz = mxGetPi (pargout [0]) ;
-		    for (j = 0 ; j < nrhs ; j++)
-		    {
-			for (i = 0 ; i < n ; i++)
-			{
-			    Xx [j+i*nrhs] = X [2*(i+j*n)  ] ;  /* real part */
-			    Xz [j+i*nrhs] = -X [2*(i+j*n)+1] ; /* imag part */
-			}
-		    }
-
-		}
-		else
-		{
-
-		    /* X = B, but create merged X from a split B */
-		    for (k = 0 ; k < n*nrhs ; k++)
-		    {
-			X [2*k  ] = Bx [k] ;		    /* real part */
-			X [2*k+1] = Bz ? (Bz [k]) : 0 ;	    /* imaginary part */
-		    }
-
-		    /* solve Ax=b */
-		    klu_zl_solve (Symbolic, Numeric, n, nrhs, X, &Common) ;
-
-		    /* split the solution into real and imaginary parts */
-		    Xx = mxGetPr (pargout [0]) ;
-		    Xz = mxGetPi (pargout [0]) ;
-		    for (k = 0 ; k < n*nrhs ; k++)
-		    {
-			Xx [k] = X [2*k  ] ;	    /* real part */
-			Xz [k] = X [2*k+1] ;	    /* imaginary part */
-		    }
-		}
-
-		mxFree (X) ;
-	    }
-	    else
-	    {
-
-		if (do_transpose)
-		{
-
-		    /* solve in chunks of 4 columns at a time */
-		    W = mxMalloc (n * MAX (nrhs,4) * sizeof (double)) ;
-		    X = mxGetPr (pargout [0]) ;
-		    B = mxGetPr (B_matlab) ;
-		    Xi = mxGetPi (pargout [0]) ;
-		    Bi = mxGetPi (B_matlab) ;
-
-		    for (chunk = 0 ; chunk < nrhs ; chunk += 4)
-		    {
-
-			/* A is real: real(X) = real(b) / real(A) */
-			UF_long chunksize = MIN (nrhs - chunk, 4) ;
-			for (j = 0 ; j < chunksize ; j++)
-			{
-			    for (i = 0 ; i < n ; i++)
-			    {
-				W [i+j*n] = B [i*nrhs+j] ;
-			    }
-			}
-			klu_l_tsolve (Symbolic, Numeric, n, chunksize, W,
-				&Common) ;
-			for (j = 0 ; j < chunksize ; j++)
-			{
-			    for (i = 0 ; i < n ; i++)
-			    {
-				X [i*nrhs+j] = W [i+j*n] ;
-			    }
-			}
-			X += 4 ;
-			B += 4 ;
-
-			if (B_complex)
-			{
-			    /* B is complex: imag(X) = imag(B) / real(A) */
-
-			    for (j = 0 ; j < chunksize ; j++)
-			    {
-				for (i = 0 ; i < n ; i++)
-				{
-				    W [i+j*n] = Bi [i*nrhs+j] ;
-				}
-			    }
-			    klu_l_tsolve (Symbolic, Numeric, n, chunksize, W,
-				&Common) ;
-			    for (j = 0 ; j < chunksize ; j++)
-			    {
-				for (i = 0 ; i < n ; i++)
-				{
-				    Xi [i*nrhs+j] = W [i+j*n] ;
-				}
-			    }
-			    Xi += 4 ;
-			    Bi += 4 ;
-			}
-
-		    }
-		    mxFree (W) ;
-
-		}
-		else
-		{
-
-		    /* A is real: real(X) = real(A) \ real(b) */
-		    X = mxGetPr (pargout [0]) ;
-		    B = mxGetPr (B_matlab) ;
-		    for (k = 0 ; k < n*nrhs ; k++)
-		    {
-			X [k] = B [k] ;	    
-		    }
-		    klu_l_solve (Symbolic, Numeric, n, nrhs, X, &Common) ;
-		    if (B_complex)
-		    {
-			/* B is complex: imag(X) = real(A) \ imag(B) */
-			X = mxGetPi (pargout [0]) ;
-			B = mxGetPi (B_matlab) ;
-			for (k = 0 ; k < n*nrhs ; k++)
-			{
-			    X [k] = B [k] ;	    
-			}
-			klu_l_solve (Symbolic, Numeric, n, nrhs, X, &Common) ;
-		    }
-		}
-	    }
-
-	    /* -------------------------------------------------------------- */
-	    /* free Symbolic and Numeric objects */
-	    /* -------------------------------------------------------------- */
-
-	    klu_l_free_symbolic (&Symbolic, &Common) ;
-	    if (A_complex)
-	    {
-		klu_zl_free_numeric (&Numeric, &Common) ;
-	    }
-	    else
-	    {
-		klu_l_free_numeric (&Numeric, &Common) ;
-	    }
-
-	}
-	else
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* solve using LU struct given on input */
-	    /* -------------------------------------------------------------- */
-
-	    /* the factorization is L*U+F = R\A(p,q), where L*U is block
-	       diagonal, and F contains the entries in the upper block
-	       triangular part */
-
-	    L_matlab = mxGetField (LU_matlab, 0, "L") ;
-	    U_matlab = mxGetField (LU_matlab, 0, "U") ;
-	    p_matlab = mxGetField (LU_matlab, 0, "p") ;
-	    q_matlab = mxGetField (LU_matlab, 0, "q") ;
-	    R_matlab = mxGetField (LU_matlab, 0, "R") ;
-	    F_matlab = mxGetField (LU_matlab, 0, "F") ;
-	    r_matlab = mxGetField (LU_matlab, 0, "r") ;
-
-	    if (!L_matlab || !U_matlab || !mxIsSparse (L_matlab) ||
-		!mxIsSparse (U_matlab))
-	    {
-		mexErrMsgTxt ("invalid LU struct") ;
-	    }
-
-	    n = mxGetM (L_matlab) ;
-	    if (n != mxGetN (L_matlab) ||
-		n != mxGetM (U_matlab) || n != mxGetN (U_matlab)
-		/* ... */
-		)
-	    {
-		mexErrMsgTxt ("invalid LU struct") ;
-	    }
-
-	    if (n != bn || nrhs == 0)
-	    {
-		mexErrMsgTxt (
-		    "B must be non-empty with same number of rows as L and U") ;
-	    }
-
-	    /* get L */
-	    if (!mxIsSparse (L_matlab) ||
-		n != mxGetM (L_matlab) || n != mxGetN (L_matlab))
-	    {
-		mexErrMsgTxt ("LU.L must be sparse and same size as A") ;
-	    }
-
-	    Lp = (UF_long *) mxGetJc (L_matlab) ;
-	    Li = (UF_long *) mxGetIr (L_matlab) ;
-	    Lx = mxGetPr (L_matlab) ;
-	    Lz = mxGetPi (L_matlab) ;
-
-	    /* get U */
-	    if (!mxIsSparse (U_matlab) ||
-		n != mxGetM (U_matlab) || n != mxGetN (U_matlab))
-	    {
-		mexErrMsgTxt ("LU.U must be sparse and same size as A") ;
-	    }
-	    Up = (UF_long *) mxGetJc (U_matlab) ;
-	    Ui = (UF_long *) mxGetIr (U_matlab) ;
-	    Ux = mxGetPr (U_matlab) ;
-	    Uz = mxGetPi (U_matlab) ;
-
-	    /* get p */
-	    if (p_matlab)
-	    {
-		if (mxGetNumberOfElements (p_matlab) != n
-		    || mxIsSparse (p_matlab)
-		    || mxGetClassID (p_matlab) != mx_int)
-		{
-		    mexErrMsgTxt ("P invalid") ;
-		}
-		P = (UF_long *) mxGetData (p_matlab) ;
-		for (k = 0 ; k < n ; k++)
-		{
-		    if (P [k] < 1 || P [k] > n) mexErrMsgTxt ("P invalid") ;
-		}
-	    }
-	    else
-	    {
-		/* no P, use identity instead */
-		P = NULL ;
-	    }
-
-	    /* get q */
-	    if (q_matlab)
-	    {
-		if (mxGetNumberOfElements (q_matlab) != n
-		    || mxIsSparse (q_matlab)
-		    || mxGetClassID (q_matlab) != mx_int)
-		{
-		    mexErrMsgTxt ("Q invalid") ;
-		}
-		Q = (UF_long *) mxGetData (q_matlab) ;
-		for (k = 0 ; k < n ; k++)
-		{
-		    if (Q [k] < 1 || Q [k] > n) mexErrMsgTxt ("Q invalid.") ;
-		}
-	    }
-	    else
-	    {
-		/* no Q, use identity instead */
-		Q = NULL ;
-	    }
-
-	    /* get r */
-	    R1 [0] = 1 ;
-	    R1 [1] = n+1 ;
-	    if (r_matlab)
-	    {
-		nblocks = mxGetNumberOfElements (r_matlab) - 1 ;
-		if (nblocks < 1 || nblocks > n || mxIsSparse (r_matlab)
-		    || mxGetClassID (r_matlab) != mx_int)
-		{
-		    mexErrMsgTxt ("r invalid") ;
-		}
-		R = (UF_long *) mxGetData (r_matlab) ;
-		if (R [0] != 1) mexErrMsgTxt ("r invalid") ;
-		for (k = 1 ; k <= nblocks ; k++)
-		{
-		    if (R [k] <= R [k-1] || R [k] > n+1)
-		    {
-			mexErrMsgTxt ("rinvalid") ;
-		    }
-		}
-		if (R [nblocks] != n+1) mexErrMsgTxt ("r invalid") ;
-	    }
-	    else
-	    {
-		/* no r */
-		nblocks = 1 ;
-		R = R1 ;
-	    }
-
-	    /* get R, scale factors */
-	    if (R_matlab)
-	    {
-		/* ensure R is sparse, real, and has the right size */
-		if (!mxIsSparse (R_matlab) ||
-		    n != mxGetM (R_matlab) || n != mxGetN (R_matlab))
-		{
-		    mexErrMsgTxt ("LU.R must be sparse and same size as A") ;
-		}
-		Rp = (UF_long *) mxGetJc (R_matlab) ;
-		Rs = mxGetPr (R_matlab) ;
-		if (Rp [n] != n)
-		{
-		    mexErrMsgTxt ("LU.R invalid, must be diagonal") ;
-		}
-	    }
-	    else
-	    {
-		/* no scale factors */
-		Rs = NULL ;
-	    }
-
-	    /* get F, off diagonal entries */
-	    if (F_matlab)
-	    {
-		if (!mxIsSparse (F_matlab) ||
-		    n != mxGetM (F_matlab) || n != mxGetN (F_matlab))
-		{
-		    mexErrMsgTxt ("LU.F must be sparse and same size as A") ;
-		}
-		Offp = (UF_long *) mxGetJc (F_matlab) ;
-		Offi = (UF_long *) mxGetIr (F_matlab) ;
-		Offx = mxGetPr (F_matlab) ;
-		Offz = mxGetPi (F_matlab) ;
-	    }
-	    else
-	    {
-		/* no off-diagonal entries */
-		Offp = NULL ;
-		Offi = NULL ;
-		Offx = NULL ;
-		Offz = NULL ;
-	    }
-
-	    /* -------------------------------------------------------------- */
-	    /* solve */
-	    /* -------------------------------------------------------------- */
-
-	    if (mxIsComplex (L_matlab) || mxIsComplex (U_matlab) ||
-		(F_matlab && mxIsComplex (F_matlab)) || B_complex)
-	    {
-
-		/* ========================================================== */
-		/* === complex case ========================================= */
-		/* ========================================================== */
-
-		/* create X */
-		if (do_transpose)
-		{
-		    pargout [0] = mxCreateDoubleMatrix (nrhs, n, mxCOMPLEX) ;
-		}
-		else
-		{
-		    pargout [0] = mxCreateDoubleMatrix (n, nrhs, mxCOMPLEX) ;
-		}
-		Xx = mxGetPr (pargout [0]) ;
-		Xz = mxGetPi (pargout [0]) ;
-
-		Bx = mxGetPr (B_matlab) ;
-		Bz = mxGetPi (B_matlab) ;
-
-		/* get workspace */
-		Wx = mxMalloc (n * sizeof (double)) ;
-		Wz = mxMalloc (n * sizeof (double)) ;
-
-		/* ---------------------------------------------------------- */
-		/* do just one row/column of the right-hand-side at a time */
-		/* ---------------------------------------------------------- */
-
-		if (do_transpose)
-		{
-
-		    for (chunk = 0 ; chunk < nrhs ; chunk++)
-		    {
-
-			/* -------------------------------------------------- */
-			/* transpose and permute right hand side, W = Q'*B' */
-			/* -------------------------------------------------- */
-
-			for (k = 0 ; k < n ; k++)
-			{
-			    i = Q ? (Q [k] - 1) : k ;
-			    Wx [k] = Bx [i*nrhs] ;
-			    Wz [k] = Bz ? (-Bz [i*nrhs]) : 0 ;
-			}
-
-			/* -------------------------------------------------- */
-			/* solve W = (L*U + Off)'\W */
-			/* -------------------------------------------------- */
-
-			for (block = 0 ; block < nblocks ; block++)
-			{
-
-			    /* ---------------------------------------------- */
-			    /* block of size nk, rows/columns k1 to k2-1 */
-			    /* ---------------------------------------------- */
-
-			    k1 = R [block] - 1 ;	/* R is 1-based */
-			    k2 = R [block+1] - 1 ;
-			    nk = k2 - k1 ;
-
-			    /* ---------------------------------------------- */
-			    /* block back-substitution for off-diagonal-block */
-			    /* ---------------------------------------------- */
-
-			    if (block > 0 && Offp != NULL)
-			    {
-				for (k = k1 ; k < k2 ; k++)
-				{
-				    pend = Offp [k+1] ;
-				    for (p = Offp [k] ; p < pend ; p++)
-				    {
-					i = Offi [p] ;
-					/* W [k] -= W [i] * conj(Off [p]) ; */
-					z = Offz ? Offz [p] : 0 ;
-					MULT_SUB_CONJ (Wx [k], Wz [k],
-					    Wx [i], Wz [i], Offx [p], z) ;
-				    }
-				}
-			    }
-
-
-			    /* solve the block system */
-			    if (nk == 1)
-			    {
-
-				/* W [k1] /= conj (L(k1,k1)) ; */
-				p = Lp [k1] ;
-				s = Lx [p] ;
-				sz = Lz ? (-Lz [p]) : 0 ;
-				DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
-				Wx [k1] = wx ;
-				Wz [k1] = wz ;
-
-				/* W [k1] /= conj (U(k1,k1)) ; */
-				p = Up [k1] ;
-				s = Ux [p] ;
-				sz = Uz ? (-Uz [p]) : 0 ;
-				DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
-				Wx [k1] = wx ;
-				Wz [k1] = wz ;
-
-			    }
-			    else
-			    {
-
-				/* ------------------------------------------ */
-				/* W = U'\W and then W=L'\W */
-				/* ------------------------------------------ */
-
-				/* W = U'\W */
-				for (k = k1 ; k < k2 ; k++)
-				{
-				    pend = Up [k+1] - 1 ;
-				    /* w = W [k] */
-				    wx = Wx [k] ;
-				    wz = Wz [k] ;
-				    for (p = Up [k] ; p < pend ; p++)
-				    {
-					i = Ui [p] ;
-					/* w -= W [i] * conj(U [p]) */
-					z = Uz ? Uz [p] : 0 ;
-					MULT_SUB_CONJ (wx, wz,
-					    Wx [i], Wz [i], Ux [p], z) ;
-				    }
-				    /* W [k] = w / conj(ukk) ; */
-				    ukk = Ux [pend] ;
-				    ukkz = Uz ? (-Uz [pend]) : 0 ;
-				    DIV (Wx [k], Wz [k], wx, wz, ukk, ukkz) ;
-				}
-
-				/* W = L'\W */
-				for (k = k2-1 ; k >= k1 ; k--)
-				{
-				    p = Lp [k] ;
-				    pend = Lp [k+1] ;
-				    /* w = W [k] */
-				    wx = Wx [k] ;
-				    wz = Wz [k] ;
-				    lkk = Lx [p] ;
-				    lkkz = Lz ? (-Lz [p]) : 0 ;
-				    for (p++ ; p < pend ; p++)
-				    {
-					i = Li [p] ;
-					/* w -= W [i] * conj (Lx [p]) ; */
-					z = Lz ? Lz [p] : 0 ;
-					MULT_SUB_CONJ (wx, wz,
-					    Wx [i], Wz [i], Lx [p], z) ;
-				    }
-				    /* W [k] = w / conj(lkk) ; */
-				    DIV (Wx [k], Wz [k], wx, wz, lkk, lkkz) ;
-				}
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* scale, permute, and tranpose: X = (P*(R\W))' */
-			/* -------------------------------------------------- */
-
-			if (Rs == NULL)
-			{
-			    /* no scaling */
-			    for (k = 0 ; k < n ; k++)
-			    {
-				i = P ? (P [k] - 1) : k ;
-				Xx [i*nrhs] = Wx [k] ;
-				Xz [i*nrhs] = Wz ? (-Wz [k]) : 0 ;
-			    }
-			}
-			else
-			{
-			    /* with scaling */
-			    for (k = 0 ; k < n ; k++)
-			    {
-				i = P ? (P [k] - 1) : k ;
-				rs = Rs [k] ;
-				Xx [i*nrhs] = Wx [k] / rs ;
-				Xz [i*nrhs] = Wz ? (-Wz [k] / rs) : 0 ;
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* go to the next row of B and X */
-			/* -------------------------------------------------- */
-
-			Xx++ ;
-			Xz++ ;
-			Bx++ ;
-			if (Bz) Bz++ ;
-		    }
-
-		}
-		else
-		{
-
-		    for (chunk = 0 ; chunk < nrhs ; chunk++)
-		    {
-
-			/* -------------------------------------------------- */
-			/* scale and permute the right hand side, W = P*(R\B) */
-			/* -------------------------------------------------- */
-
-			if (Rs == NULL)
-			{
-			    /* no scaling */
-			    for (k = 0 ; k < n ; k++)
-			    {
-				i = P ? (P [k] - 1) : k ;
-				Wx [k] = Bx [i] ;
-				Wz [k] = Bz ? Bz [i] : 0 ;
-			    }
-			}
-			else
-			{
-			    /* with scaling */
-			    for (k = 0 ; k < n ; k++)
-			    {
-				i = P ? (P [k] - 1) : k ;
-				rs = Rs [k] ;
-				Wx [k] = Bx [i] / rs ;
-				Wz [k] = Bz ? (Bz [i] / rs) : 0 ;
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* solve W = (L*U + Off)\W */
-			/* -------------------------------------------------- */
-
-			for (block = nblocks-1 ; block >= 0 ; block--)
-			{
-
-			    /* ---------------------------------------------- */
-			    /* block of size nk, rows/columns k1 to k2-1 */
-			    /* ---------------------------------------------- */
-
-			    k1 = R [block] - 1 ;	/* R is 1-based */
-			    k2 = R [block+1] - 1 ;
-			    nk = k2 - k1 ;
-
-			    /* solve the block system */
-			    if (nk == 1)
-			    {
-
-				/* W [k1] /= L(k1,k1) ; */
-				p = Lp [k1] ;
-				s = Lx [p] ;
-				sz = Lz ? Lz [p] : 0 ;
-				DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
-				Wx [k1] = wx ;
-				Wz [k1] = wz ;
-
-				/* W [k1] /= U(k1,k1) ; */
-				p = Up [k1] ;
-				s = Ux [p] ;
-				sz = Uz ? Uz [p] : 0 ;
-				DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
-				Wx [k1] = wx ;
-				Wz [k1] = wz ;
-
-			    }
-			    else
-			    {
-
-				/* ------------------------------------------ */
-				/* W = L\W and then W=U\W */
-				/* ------------------------------------------ */
-
-				/* W = L\W */
-				for (k = k1 ; k < k2 ; k++)
-				{
-				    p = Lp [k] ;
-				    pend = Lp [k+1] ;
-				    lkk = Lx [p] ;
-				    lkkz = Lz ? Lz [p] : 0 ;
-				    /* w = W [k] / lkk ; */
-				    DIV (wx, wz, Wx [k], Wz [k], lkk, lkkz) ;
-				    Wx [k] = wx ;
-				    Wz [k] = wz ;
-				    for (p++ ; p < pend ; p++)
-				    {
-					i = Li [p] ;
-					/* W [i] -= Lx [p] * w ; */
-					z = Lz ? Lz [p] : 0 ;
-					MULT_SUB (Wx [i], Wz [i], Lx [p], z,
-					    wx, wz) ;
-				    }
-				}
-
-				/* W = U\W */
-				for (k = k2-1 ; k >= k1 ; k--)
-				{
-				    pend = Up [k+1] - 1 ;
-				    ukk = Ux [pend] ;
-				    ukkz = Uz ? Uz [pend] : 0 ;
-				    /* w = W [k] / ukk ; */
-				    DIV (wx, wz, Wx [k], Wz [k], ukk, ukkz) ;
-				    Wx [k] = wx ;
-				    Wz [k] = wz ;
-				    for (p = Up [k] ; p < pend ; p++)
-				    {
-					i = Ui [p] ;
-					/* W [i] -= U [p] * w ; */
-					z = Uz ? Uz [p] : 0 ;
-					MULT_SUB (Wx [i], Wz [i], Ux [p], z,
-					    wx, wz) ;
-				    }
-				}
-			    }
-
-			    /* ---------------------------------------------- */
-			    /* block back-substitution for off-diagonal-block */
-			    /* ---------------------------------------------- */
-
-			    if (block > 0 && Offp != NULL)
-			    {
-				for (k = k1 ; k < k2 ; k++)
-				{
-				    pend = Offp [k+1] ;
-				    wx = Wx [k] ;
-				    wz = Wz [k] ;
-				    for (p = Offp [k] ; p < pend ; p++)
-				    {
-					i = Offi [p] ;
-					/* W [Offi [p]] -= Offx [p] * w ; */
-					z = Offz ? Offz [p] : 0 ;
-					MULT_SUB (Wx [i], Wz [i], Offx [p], z,
-					    wx, wz) ;
-				    }
-				}
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* permute the result, X = Q*W */
-			/* -------------------------------------------------- */
-
-			for (k = 0 ; k < n ; k++)
-			{
-			    i = Q ? (Q [k] - 1) : k ;
-			    Xx [i] = Wx [k] ;
-			    Xz [i] = Wz [k] ;
-			}
-
-			/* -------------------------------------------------- */
-			/* go to the next column of B and X */
-			/* -------------------------------------------------- */
-
-			Xx += n ;
-			Xz += n ;
-			Bx += n ;
-			if (Bz) Bz += n ;
-		    }
-		}
-
-		/* free workspace */
-		mxFree (Wx) ;
-		mxFree (Wz) ;
-
-	    }
-	    else
-	    {
-
-		/* ========================================================== */
-		/* === real case ============================================ */
-		/* ========================================================== */
-
-		/* create X */
-		if (do_transpose)
-		{
-		    pargout [0] = mxCreateDoubleMatrix (nrhs, n, mxREAL) ;
-		}
-		else
-		{
-		    pargout [0] = mxCreateDoubleMatrix (n, nrhs, mxREAL) ;
-		}
-
-		Xx = mxGetPr (pargout [0]) ;
-		Bx = mxGetPr (B_matlab) ;
-
-		if (do_transpose)
-		{
-
-		    /* ------------------------------------------------------ */
-		    /* solve in chunks of one row at a time */
-		    /* ------------------------------------------------------ */
-
-		    /* get workspace */
-		    Wx = mxMalloc (n * sizeof (double)) ;
-
-		    for (chunk = 0 ; chunk < nrhs ; chunk++)
-		    {
-
-			/* -------------------------------------------------- */
-			/* transpose and permute right hand side, W = Q'*B' */
-			/* -------------------------------------------------- */
-
-			for (k = 0 ; k < n ; k++)
-			{
-			    i = Q ? (Q [k] - 1) : k ;
-			    Wx [k] = Bx [i*nrhs] ;
-			}
-
-			/* -------------------------------------------------- */
-			/* solve W = (L*U + Off)'\W */
-			/* -------------------------------------------------- */
-
-			for (block = 0 ; block < nblocks ; block++)
-			{
-		    
-			    /* ---------------------------------------------- */
-			    /* block of size nk, rows/columns k1 to k2-1 */
-			    /* ---------------------------------------------- */
-
-			    k1 = R [block] - 1 ;	/* R is 1-based */
-			    k2 = R [block+1] - 1 ;
-			    nk = k2 - k1 ;
-
-			    /* ---------------------------------------------- */
-			    /* block back-substitution for off-diagonal-block */
-			    /* ---------------------------------------------- */
-
-			    if (block > 0 && Offp != NULL)
-			    {
-				for (k = k1 ; k < k2 ; k++)
-				{
-				    pend = Offp [k+1] ;
-				    for (p = Offp [k] ; p < pend ; p++)
-				    {
-					Wx [k] -= Wx [Offi [p]] * Offx [p] ;
-				    }
-				}
-			    }
-
-			    /* solve the block system */
-			    if (nk == 1)
-			    {
-				Wx [k1] /= Lx [Lp [k1]] ;
-				Wx [k1] /= Ux [Up [k1]] ;
-			    }
-			    else
-			    {
-
-				/* ------------------------------------------ */
-				/* W = U'\W and then W=L'\W */
-				/* ------------------------------------------ */
-
-				/* W = U'\W */
-				for (k = k1 ; k < k2 ; k++)
-				{
-				    pend = Up [k+1] - 1 ;
-				    for (p = Up [k] ; p < pend ; p++)
-				    {
-					Wx [k] -= Wx [Ui [p]] * Ux [p] ;
-				    }
-				    Wx [k] /= Ux [pend] ;
-				}
-
-				/* W = L'\W */
-				for (k = k2-1 ; k >= k1 ; k--)
-				{
-				    p = Lp [k] ;
-				    pend = Lp [k+1] ;
-				    lkk = Lx [p] ;
-				    for (p++ ; p < pend ; p++)
-				    {
-					Wx [k] -= Wx [Li [p]] * Lx [p] ;
-				    }
-				    Wx [k] /= lkk ;
-				}
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* scale, permute, and tranpose: X = (P*(R\W))' */
-			/* -------------------------------------------------- */
-
-			if (Rs == NULL)
-			{
-			    /* no scaling */
-			    for (k = 0 ; k < n ; k++)
-			    {
-				i = P ? (P [k] - 1) : k ;
-				Xx [i*nrhs] = Wx [k] ;
-			    }
-			}
-			else
-			{
-			    /* with scaling */
-			    for (k = 0 ; k < n ; k++)
-			    {
-				i = P ? (P [k] - 1) : k ;
-				rs = Rs [k] ;
-				Xx [i*nrhs] = Wx [k] / rs ;
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* go to the next row of B and X */
-			/* -------------------------------------------------- */
-
-			Xx++ ;
-			Bx++ ;
-		    }
-
-		}
-		else
-		{
-
-		    /* ------------------------------------------------------ */
-		    /* solve in chunks of 4 columns at a time */
-		    /* ------------------------------------------------------ */
-
-		    /* get workspace */
-		    Wx = mxMalloc (n * MAX (4, nrhs) * sizeof (double)) ;
-
-		    for (chunk = 0 ; chunk < nrhs ; chunk += 4)
-		    {
-			/* -------------------------------------------------- */
-			/* get the size of the current chunk */
-			/* -------------------------------------------------- */
-
-			nr = MIN (nrhs - chunk, 4) ;
-
-			/* -------------------------------------------------- */
-			/* scale and permute the right hand side, W = P*(R\B) */
-			/* -------------------------------------------------- */
-
-			if (Rs == NULL)
-			{
-
-			    /* no scaling */
-			    switch (nr)
-			    {
-
-				case 1:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					Wx [k] = Bx [i] ;
-				    }
-				    break ;
-
-				case 2:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					Wx [2*k    ] = Bx [i      ] ;
-					Wx [2*k + 1] = Bx [i + n  ] ;
-				    }
-				    break ;
-
-				case 3:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					Wx [3*k    ] = Bx [i      ] ;
-					Wx [3*k + 1] = Bx [i + n  ] ;
-					Wx [3*k + 2] = Bx [i + n*2] ;
-				    }
-				    break ;
-
-				case 4:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					Wx [4*k    ] = Bx [i      ] ;
-					Wx [4*k + 1] = Bx [i + n  ] ;
-					Wx [4*k + 2] = Bx [i + n*2] ;
-					Wx [4*k + 3] = Bx [i + n*3] ;
-				    }
-				    break ;
-			    }
-
-			}
-			else
-			{
-
-			    switch (nr)
-			    {
-
-				case 1:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					rs = Rs [k] ;
-					Wx [k] = Bx [i] / rs ;
-				    }
-				    break ;
-
-				case 2:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					rs = Rs [k] ;
-					Wx [2*k    ] = Bx [i      ] / rs ;
-					Wx [2*k + 1] = Bx [i + n  ] / rs ;
-				    }
-				    break ;
-
-				case 3:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					rs = Rs [k] ;
-					Wx [3*k    ] = Bx [i      ] / rs ;
-					Wx [3*k + 1] = Bx [i + n  ] / rs ;
-					Wx [3*k + 2] = Bx [i + n*2] / rs ;
-				    }
-				    break ;
-
-				case 4:
-
-				    for (k = 0 ; k < n ; k++)
-				    {
-					i = P ? (P [k] - 1) : k ;
-					rs = Rs [k] ;
-					Wx [4*k    ] = Bx [i      ] / rs ;
-					Wx [4*k + 1] = Bx [i + n  ] / rs ;
-					Wx [4*k + 2] = Bx [i + n*2] / rs ;
-					Wx [4*k + 3] = Bx [i + n*3] / rs ;
-				    }
-				    break ;
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* solve W = (L*U + Off)\W */
-			/* -------------------------------------------------- */
-
-			for (block = nblocks-1 ; block >= 0 ; block--)
-			{
-
-			    /* ---------------------------------------------- */
-			    /* block of size nk is rows/columns k1 to k2-1 */
-			    /* ---------------------------------------------- */
-
-			    k1 = R [block] - 1 ;	    /* R is 1-based */
-			    k2 = R [block+1] - 1 ;
-			    nk = k2 - k1 ;
-
-			    /* solve the block system */
-			    if (nk == 1)
-			    {
-
-				/* this is not done if L comes from KLU, since
-				   in that case, L is unit lower triangular */
-				s = Lx [Lp [k1]] ;
-				if (s != 1.0) switch (nr)
-				{
-				    case 1:
-					Wx [k1] /= s ;
-					break ;
-				    case 2:
-					Wx [2*k1] /= s ;
-					Wx [2*k1 + 1] /= s ;
-					break ;
-				    case 3:
-					Wx [3*k1] /= s ;
-					Wx [3*k1 + 1] /= s ;
-					Wx [3*k1 + 2] /= s ;
-					break ;
-				    case 4:
-					Wx [4*k1] /= s ;
-					Wx [4*k1 + 1] /= s ;
-					Wx [4*k1 + 2] /= s ;
-					Wx [4*k1 + 3] /= s ;
-					break ;
-				}
-
-				s = Ux [Up [k1]] ;
-				if (s != 1.0) switch (nr)
-				{
-				    case 1:
-					Wx [k1] /= s ;
-					break ;
-				    case 2:
-					Wx [2*k1] /= s ;
-					Wx [2*k1 + 1] /= s ;
-					break ;
-				    case 3:
-					Wx [3*k1] /= s ;
-					Wx [3*k1 + 1] /= s ;
-					Wx [3*k1 + 2] /= s ;
-					break ;
-				    case 4:
-					Wx [4*k1] /= s ;
-					Wx [4*k1 + 1] /= s ;
-					Wx [4*k1 + 2] /= s ;
-					Wx [4*k1 + 3] /= s ;
-					break ;
-				}
-
-			    }
-			    else
-			    {
-
-				/* ------------------------------------------ */
-				/* W = L\W and then W=U\W */
-				/* ------------------------------------------ */
-
-				switch (nr)
-				{
-
-				    case 1:
-					/* W = L\W */
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    p = Lp [k] ;
-					    pend = Lp [k+1] ;
-					    lkk = Lx [p++] ;
-					    x [0] = Wx [k] / lkk ;
-					    Wx [k] = x [0] ;
-					    for ( ; p < pend ; p++)
-					    {
-						Wx [Li [p]] -= Lx [p] * x [0] ;
-					    }
-					}
-
-					/* W = U\W */
-					for (k = k2-1 ; k >= k1 ; k--)
-					{
-					    pend = Up [k+1] - 1 ;
-					    ukk = Ux [pend] ;
-					    x [0] = Wx [k] / ukk ;
-					    Wx [k] = x [0] ;
-					    for (p = Up [k] ; p < pend ; p++)
-					    {
-						Wx [Ui [p]] -= Ux [p] * x [0] ;
-					    }
-					}
-					break ;
-
-				    case 2:
-
-					/* W = L\W */
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    p = Lp [k] ;
-					    pend = Lp [k+1] ;
-					    lkk = Lx [p++] ;
-					    x [0] = Wx [2*k    ] / lkk ;
-					    x [1] = Wx [2*k + 1] / lkk ;
-					    Wx [2*k    ] = x [0] ;
-					    Wx [2*k + 1] = x [1] ;
-					    for ( ; p < pend ; p++)
-					    {
-						i = Li [p] ;
-						lik = Lx [p] ;
-						Wx [2*i    ] -= lik * x [0] ;
-						Wx [2*i + 1] -= lik * x [1] ;
-					    }
-					}
-
-					/* W = U\W */
-					for (k = k2-1 ; k >= k1 ; k--)
-					{
-					    pend = Up [k+1] - 1 ;
-					    ukk = Ux [pend] ;
-					    x [0] = Wx [2*k    ] / ukk ;
-					    x [1] = Wx [2*k + 1] / ukk ;
-					    Wx [2*k    ] = x [0] ;
-					    Wx [2*k + 1] = x [1] ;
-					    for (p = Up [k] ; p < pend ; p++)
-					    {
-						i = Ui [p] ;
-						uik = Ux [p] ;
-						Wx [2*i    ] -= uik * x [0] ;
-						Wx [2*i + 1] -= uik * x [1] ;
-					    }
-					}
-					break ;
-
-				    case 3:
-
-					/* W = L\W */
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    p = Lp [k] ;
-					    pend = Lp [k+1] ;
-					    lkk = Lx [p++] ;
-					    x [0] = Wx [3*k    ] / lkk ;
-					    x [1] = Wx [3*k + 1] / lkk ;
-					    x [2] = Wx [3*k + 2] / lkk ;
-					    Wx [3*k    ] = x [0] ;
-					    Wx [3*k + 1] = x [1] ;
-					    Wx [3*k + 2] = x [2] ;
-					    for ( ; p < pend ; p++)
-					    {
-						i = Li [p] ;
-						lik = Lx [p] ;
-						Wx [3*i    ] -= lik * x [0] ;
-						Wx [3*i + 1] -= lik * x [1] ;
-						Wx [3*i + 2] -= lik * x [2] ;
-					    }
-					}
-
-					/* W = U\W */
-					for (k = k2-1 ; k >= k1 ; k--)
-					{
-					    pend = Up [k+1] - 1 ;
-					    ukk = Ux [pend] ;
-					    x [0] = Wx [3*k    ] / ukk ;
-					    x [1] = Wx [3*k + 1] / ukk ;
-					    x [2] = Wx [3*k + 2] / ukk ;
-					    Wx [3*k    ] = x [0] ;
-					    Wx [3*k + 1] = x [1] ;
-					    Wx [3*k + 2] = x [2] ;
-					    for (p = Up [k] ; p < pend ; p++)
-					    {
-						i = Ui [p] ;
-						uik = Ux [p] ;
-						Wx [3*i    ] -= uik * x [0] ;
-						Wx [3*i + 1] -= uik * x [1] ;
-						Wx [3*i + 2] -= uik * x [2] ;
-					    }
-					}
-					break ;
-
-				    case 4:
-
-					/* W = L\W */
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    p = Lp [k] ;
-					    pend = Lp [k+1] ;
-					    lkk = Lx [p++] ;
-					    x [0] = Wx [4*k    ] / lkk ;
-					    x [1] = Wx [4*k + 1] / lkk ;
-					    x [2] = Wx [4*k + 2] / lkk ;
-					    x [3] = Wx [4*k + 3] / lkk ;
-					    Wx [4*k    ] = x [0] ;
-					    Wx [4*k + 1] = x [1] ;
-					    Wx [4*k + 2] = x [2] ;
-					    Wx [4*k + 3] = x [3] ;
-					    for ( ; p < pend ; p++)
-					    {
-						i = Li [p] ;
-						lik = Lx [p] ;
-						Wx [4*i    ] -= lik * x [0] ;
-						Wx [4*i + 1] -= lik * x [1] ;
-						Wx [4*i + 2] -= lik * x [2] ;
-						Wx [4*i + 3] -= lik * x [3] ;
-					    }
-					}
-
-					/* Wx = U\Wx */
-					for (k = k2-1 ; k >= k1 ; k--)
-					{
-					    pend = Up [k+1] - 1 ;
-					    ukk = Ux [pend] ;
-					    x [0] = Wx [4*k    ] / ukk ;
-					    x [1] = Wx [4*k + 1] / ukk ;
-					    x [2] = Wx [4*k + 2] / ukk ;
-					    x [3] = Wx [4*k + 3] / ukk ;
-					    Wx [4*k    ] = x [0] ;
-					    Wx [4*k + 1] = x [1] ;
-					    Wx [4*k + 2] = x [2] ;
-					    Wx [4*k + 3] = x [3] ;
-					    for (p = Up [k] ; p < pend ; p++)
-					    {
-						i = Ui [p] ;
-						uik = Ux [p] ;
-						Wx [4*i    ] -= uik * x [0] ;
-						Wx [4*i + 1] -= uik * x [1] ;
-						Wx [4*i + 2] -= uik * x [2] ;
-						Wx [4*i + 3] -= uik * x [3] ;
-					    }
-					}
-					break ;
-				}
-			    }
-
-			    /* ---------------------------------------------- */
-			    /* block back-substitution for off-diagonal-block */
-			    /* ---------------------------------------------- */
-
-			    if (block > 0 && Offp != NULL)
-			    {
-				switch (nr)
-				{
-
-				    case 1:
-
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    pend = Offp [k+1] ;
-					    x [0] = Wx [k] ;
-					    for (p = Offp [k] ; p < pend ; p++)
-					    {
-						Wx [Offi [p]] -= Offx[p] * x[0];
-					    }
-					}
-					break ;
-
-				    case 2:
-
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    pend = Offp [k+1] ;
-					    x [0] = Wx [2*k    ] ;
-					    x [1] = Wx [2*k + 1] ;
-					    for (p = Offp [k] ; p < pend ; p++)
-					    {
-						i = Offi [p] ;
-						offik = Offx [p] ;
-						Wx [2*i    ] -= offik * x [0] ;
-						Wx [2*i + 1] -= offik * x [1] ;
-					    }
-					}
-					break ;
-
-				    case 3:
-
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    pend = Offp [k+1] ;
-					    x [0] = Wx [3*k    ] ;
-					    x [1] = Wx [3*k + 1] ;
-					    x [2] = Wx [3*k + 2] ;
-					    for (p = Offp [k] ; p < pend ; p++)
-					    {
-						i = Offi [p] ;
-						offik = Offx [p] ;
-						Wx [3*i    ] -= offik * x [0] ;
-						Wx [3*i + 1] -= offik * x [1] ;
-						Wx [3*i + 2] -= offik * x [2] ;
-					    }
-					}
-					break ;
-
-				    case 4:
-
-					for (k = k1 ; k < k2 ; k++)
-					{
-					    pend = Offp [k+1] ;
-					    x [0] = Wx [4*k    ] ;
-					    x [1] = Wx [4*k + 1] ;
-					    x [2] = Wx [4*k + 2] ;
-					    x [3] = Wx [4*k + 3] ;
-					    for (p = Offp [k] ; p < pend ; p++)
-					    {
-						i = Offi [p] ;
-						offik = Offx [p] ;
-						Wx [4*i    ] -= offik * x [0] ;
-						Wx [4*i + 1] -= offik * x [1] ;
-						Wx [4*i + 2] -= offik * x [2] ;
-						Wx [4*i + 3] -= offik * x [3] ;
-					    }
-					}
-					break ;
-				}
-			    }
-			}
-
-			/* -------------------------------------------------- */
-			/* permute the result, X = Q*W */
-			/* -------------------------------------------------- */
-
-			switch (nr)
-			{
-
-			    case 1:
-
-				for (k = 0 ; k < n ; k++)
-				{
-				    i = Q ? (Q [k] - 1) : k ;
-				    Xx [i] = Wx [k] ;
-				}
-				break ;
-
-			    case 2:
-
-				for (k = 0 ; k < n ; k++)
-				{
-				    i = Q ? (Q [k] - 1) : k ;
-				    Xx [i      ] = Wx [2*k    ] ;
-				    Xx [i + n  ] = Wx [2*k + 1] ;
-				}
-				break ;
-
-			    case 3:
-
-				for (k = 0 ; k < n ; k++)
-				{
-				    i = Q ? (Q [k] - 1) : k ;
-				    Xx [i      ] = Wx [3*k    ] ;
-				    Xx [i + n  ] = Wx [3*k + 1] ;
-				    Xx [i + n*2] = Wx [3*k + 2] ;
-				}
-				break ;
-
-			    case 4:
-
-				for (k = 0 ; k < n ; k++)
-				{
-				    i = Q ? (Q [k] - 1) : k ;
-				    Xx [i      ] = Wx [4*k    ] ;
-				    Xx [i + n  ] = Wx [4*k + 1] ;
-				    Xx [i + n*2] = Wx [4*k + 2] ;
-				    Xx [i + n*3] = Wx [4*k + 3] ;
-				}
-				break ;
-			}
-
-			/* -------------------------------------------------- */
-			/* go to the next chunk of B and X */
-			/* -------------------------------------------------- */
-
-			Xx += n*4 ;
-			Bx += n*4 ;
-		    }
-		}
-
-		/* free workspace */
-		mxFree (Wx) ;
-	    }
-
-	}
+        /* ------------------------------------------------------------------ */
+        /* solve, x = klu ( ... ) usage */
+        /* ------------------------------------------------------------------ */
+
+        B_complex = mxIsComplex (B_matlab) ;
+
+        if (do_factorize)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* solve using KLU factors computed above */
+            /* -------------------------------------------------------------- */
+
+            /* klu (A,'\',b) or klu (b,'/',A) usage */
+
+            /* create X */
+            if (do_transpose)
+            {
+                pargout [0] = mxCreateDoubleMatrix (nrhs, n,
+                    (A_complex || B_complex) ?  mxCOMPLEX : mxREAL) ;
+            }
+            else
+            {
+                pargout [0] = mxCreateDoubleMatrix (n, nrhs,
+                    (A_complex || B_complex) ?  mxCOMPLEX : mxREAL) ;
+            }
+
+            if (A_complex)
+            {
+
+                /* ---------------------------------------------------------- */
+                /* A is complex, but B might be real */
+                /* ---------------------------------------------------------- */
+
+                X = mxMalloc (n * nrhs * 2 * sizeof (double)) ;
+                Bx = mxGetPr (B_matlab) ;
+                Bz = mxGetPi (B_matlab) ;
+
+                if (do_transpose)
+                {
+
+                    /* X = B', merge and transpose B */
+                    for (j = 0 ; j < nrhs ; j++)
+                    {
+                        for (i = 0 ; i < n ; i++)
+                        {
+                            X [2*(i+j*n)  ] = Bx [j+i*nrhs] ;   /* real */
+                            X [2*(i+j*n)+1] = Bz ? (-Bz [j+i*nrhs]) : 0 ;
+                        }
+                    }
+
+                    /* solve A'x=b (complex conjugate) */
+                    klu_zl_tsolve (Symbolic, Numeric, n, nrhs, X, 1, &Common) ;
+
+                    /* split and transpose the solution */
+                    Xx = mxGetPr (pargout [0]) ;
+                    Xz = mxGetPi (pargout [0]) ;
+                    for (j = 0 ; j < nrhs ; j++)
+                    {
+                        for (i = 0 ; i < n ; i++)
+                        {
+                            Xx [j+i*nrhs] = X [2*(i+j*n)  ] ;  /* real part */
+                            Xz [j+i*nrhs] = -X [2*(i+j*n)+1] ; /* imag part */
+                        }
+                    }
+
+                }
+                else
+                {
+
+                    /* X = B, but create merged X from a split B */
+                    for (k = 0 ; k < n*nrhs ; k++)
+                    {
+                        X [2*k  ] = Bx [k] ;                /* real part */
+                        X [2*k+1] = Bz ? (Bz [k]) : 0 ;     /* imaginary part */
+                    }
+
+                    /* solve Ax=b */
+                    klu_zl_solve (Symbolic, Numeric, n, nrhs, X, &Common) ;
+
+                    /* split the solution into real and imaginary parts */
+                    Xx = mxGetPr (pargout [0]) ;
+                    Xz = mxGetPi (pargout [0]) ;
+                    for (k = 0 ; k < n*nrhs ; k++)
+                    {
+                        Xx [k] = X [2*k  ] ;        /* real part */
+                        Xz [k] = X [2*k+1] ;        /* imaginary part */
+                    }
+                }
+
+                mxFree (X) ;
+            }
+            else
+            {
+
+                if (do_transpose)
+                {
+
+                    /* solve in chunks of 4 columns at a time */
+                    W = mxMalloc (n * MAX (nrhs,4) * sizeof (double)) ;
+                    X = mxGetPr (pargout [0]) ;
+                    B = mxGetPr (B_matlab) ;
+                    Xi = mxGetPi (pargout [0]) ;
+                    Bi = mxGetPi (B_matlab) ;
+
+                    for (chunk = 0 ; chunk < nrhs ; chunk += 4)
+                    {
+
+                        /* A is real: real(X) = real(b) / real(A) */
+                        Long chunksize = MIN (nrhs - chunk, 4) ;
+                        for (j = 0 ; j < chunksize ; j++)
+                        {
+                            for (i = 0 ; i < n ; i++)
+                            {
+                                W [i+j*n] = B [i*nrhs+j] ;
+                            }
+                        }
+                        klu_l_tsolve (Symbolic, Numeric, n, chunksize, W,
+                                &Common) ;
+                        for (j = 0 ; j < chunksize ; j++)
+                        {
+                            for (i = 0 ; i < n ; i++)
+                            {
+                                X [i*nrhs+j] = W [i+j*n] ;
+                            }
+                        }
+                        X += 4 ;
+                        B += 4 ;
+
+                        if (B_complex)
+                        {
+                            /* B is complex: imag(X) = imag(B) / real(A) */
+
+                            for (j = 0 ; j < chunksize ; j++)
+                            {
+                                for (i = 0 ; i < n ; i++)
+                                {
+                                    W [i+j*n] = Bi [i*nrhs+j] ;
+                                }
+                            }
+                            klu_l_tsolve (Symbolic, Numeric, n, chunksize, W,
+                                &Common) ;
+                            for (j = 0 ; j < chunksize ; j++)
+                            {
+                                for (i = 0 ; i < n ; i++)
+                                {
+                                    Xi [i*nrhs+j] = W [i+j*n] ;
+                                }
+                            }
+                            Xi += 4 ;
+                            Bi += 4 ;
+                        }
+
+                    }
+                    mxFree (W) ;
+
+                }
+                else
+                {
+
+                    /* A is real: real(X) = real(A) \ real(b) */
+                    X = mxGetPr (pargout [0]) ;
+                    B = mxGetPr (B_matlab) ;
+                    for (k = 0 ; k < n*nrhs ; k++)
+                    {
+                        X [k] = B [k] ;     
+                    }
+                    klu_l_solve (Symbolic, Numeric, n, nrhs, X, &Common) ;
+                    if (B_complex)
+                    {
+                        /* B is complex: imag(X) = real(A) \ imag(B) */
+                        X = mxGetPi (pargout [0]) ;
+                        B = mxGetPi (B_matlab) ;
+                        for (k = 0 ; k < n*nrhs ; k++)
+                        {
+                            X [k] = B [k] ;         
+                        }
+                        klu_l_solve (Symbolic, Numeric, n, nrhs, X, &Common) ;
+                    }
+                }
+            }
+
+            /* -------------------------------------------------------------- */
+            /* free Symbolic and Numeric objects */
+            /* -------------------------------------------------------------- */
+
+            klu_l_free_symbolic (&Symbolic, &Common) ;
+            if (A_complex)
+            {
+                klu_zl_free_numeric (&Numeric, &Common) ;
+            }
+            else
+            {
+                klu_l_free_numeric (&Numeric, &Common) ;
+            }
+
+        }
+        else
+        {
+
+            /* -------------------------------------------------------------- */
+            /* solve using LU struct given on input */
+            /* -------------------------------------------------------------- */
+
+            /* the factorization is L*U+F = R\A(p,q), where L*U is block
+               diagonal, and F contains the entries in the upper block
+               triangular part */
+
+            L_matlab = mxGetField (LU_matlab, 0, "L") ;
+            U_matlab = mxGetField (LU_matlab, 0, "U") ;
+            p_matlab = mxGetField (LU_matlab, 0, "p") ;
+            q_matlab = mxGetField (LU_matlab, 0, "q") ;
+            R_matlab = mxGetField (LU_matlab, 0, "R") ;
+            F_matlab = mxGetField (LU_matlab, 0, "F") ;
+            r_matlab = mxGetField (LU_matlab, 0, "r") ;
+
+            if (!L_matlab || !U_matlab || !mxIsSparse (L_matlab) ||
+                !mxIsSparse (U_matlab))
+            {
+                mexErrMsgTxt ("invalid LU struct") ;
+            }
+
+            n = mxGetM (L_matlab) ;
+            if (n != mxGetN (L_matlab) ||
+                n != mxGetM (U_matlab) || n != mxGetN (U_matlab)
+                /* ... */
+                )
+            {
+                mexErrMsgTxt ("invalid LU struct") ;
+            }
+
+            if (n != bn || nrhs == 0)
+            {
+                mexErrMsgTxt (
+                    "B must be non-empty with same number of rows as L and U") ;
+            }
+
+            /* get L */
+            if (!mxIsSparse (L_matlab) ||
+                n != mxGetM (L_matlab) || n != mxGetN (L_matlab))
+            {
+                mexErrMsgTxt ("LU.L must be sparse and same size as A") ;
+            }
+
+            Lp = (Long *) mxGetJc (L_matlab) ;
+            Li = (Long *) mxGetIr (L_matlab) ;
+            Lx = mxGetPr (L_matlab) ;
+            Lz = mxGetPi (L_matlab) ;
+
+            /* get U */
+            if (!mxIsSparse (U_matlab) ||
+                n != mxGetM (U_matlab) || n != mxGetN (U_matlab))
+            {
+                mexErrMsgTxt ("LU.U must be sparse and same size as A") ;
+            }
+            Up = (Long *) mxGetJc (U_matlab) ;
+            Ui = (Long *) mxGetIr (U_matlab) ;
+            Ux = mxGetPr (U_matlab) ;
+            Uz = mxGetPi (U_matlab) ;
+
+            /* get p */
+            if (p_matlab)
+            {
+                if (mxGetNumberOfElements (p_matlab) != n
+                    || mxIsSparse (p_matlab)
+                    || mxGetClassID (p_matlab) != mx_int)
+                {
+                    mexErrMsgTxt ("P invalid") ;
+                }
+                P = (Long *) mxGetData (p_matlab) ;
+                for (k = 0 ; k < n ; k++)
+                {
+                    if (P [k] < 1 || P [k] > n) mexErrMsgTxt ("P invalid") ;
+                }
+            }
+            else
+            {
+                /* no P, use identity instead */
+                P = NULL ;
+            }
+
+            /* get q */
+            if (q_matlab)
+            {
+                if (mxGetNumberOfElements (q_matlab) != n
+                    || mxIsSparse (q_matlab)
+                    || mxGetClassID (q_matlab) != mx_int)
+                {
+                    mexErrMsgTxt ("Q invalid") ;
+                }
+                Q = (Long *) mxGetData (q_matlab) ;
+                for (k = 0 ; k < n ; k++)
+                {
+                    if (Q [k] < 1 || Q [k] > n) mexErrMsgTxt ("Q invalid.") ;
+                }
+            }
+            else
+            {
+                /* no Q, use identity instead */
+                Q = NULL ;
+            }
+
+            /* get r */
+            R1 [0] = 1 ;
+            R1 [1] = n+1 ;
+            if (r_matlab)
+            {
+                nblocks = mxGetNumberOfElements (r_matlab) - 1 ;
+                if (nblocks < 1 || nblocks > n || mxIsSparse (r_matlab)
+                    || mxGetClassID (r_matlab) != mx_int)
+                {
+                    mexErrMsgTxt ("r invalid") ;
+                }
+                R = (Long *) mxGetData (r_matlab) ;
+                if (R [0] != 1) mexErrMsgTxt ("r invalid") ;
+                for (k = 1 ; k <= nblocks ; k++)
+                {
+                    if (R [k] <= R [k-1] || R [k] > n+1)
+                    {
+                        mexErrMsgTxt ("rinvalid") ;
+                    }
+                }
+                if (R [nblocks] != n+1) mexErrMsgTxt ("r invalid") ;
+            }
+            else
+            {
+                /* no r */
+                nblocks = 1 ;
+                R = R1 ;
+            }
+
+            /* get R, scale factors */
+            if (R_matlab)
+            {
+                /* ensure R is sparse, real, and has the right size */
+                if (!mxIsSparse (R_matlab) ||
+                    n != mxGetM (R_matlab) || n != mxGetN (R_matlab))
+                {
+                    mexErrMsgTxt ("LU.R must be sparse and same size as A") ;
+                }
+                Rp = (Long *) mxGetJc (R_matlab) ;
+                Rs = mxGetPr (R_matlab) ;
+                if (Rp [n] != n)
+                {
+                    mexErrMsgTxt ("LU.R invalid, must be diagonal") ;
+                }
+            }
+            else
+            {
+                /* no scale factors */
+                Rs = NULL ;
+            }
+
+            /* get F, off diagonal entries */
+            if (F_matlab)
+            {
+                if (!mxIsSparse (F_matlab) ||
+                    n != mxGetM (F_matlab) || n != mxGetN (F_matlab))
+                {
+                    mexErrMsgTxt ("LU.F must be sparse and same size as A") ;
+                }
+                Offp = (Long *) mxGetJc (F_matlab) ;
+                Offi = (Long *) mxGetIr (F_matlab) ;
+                Offx = mxGetPr (F_matlab) ;
+                Offz = mxGetPi (F_matlab) ;
+            }
+            else
+            {
+                /* no off-diagonal entries */
+                Offp = NULL ;
+                Offi = NULL ;
+                Offx = NULL ;
+                Offz = NULL ;
+            }
+
+            /* -------------------------------------------------------------- */
+            /* solve */
+            /* -------------------------------------------------------------- */
+
+            if (mxIsComplex (L_matlab) || mxIsComplex (U_matlab) ||
+                (F_matlab && mxIsComplex (F_matlab)) || B_complex)
+            {
+
+                /* ========================================================== */
+                /* === complex case ========================================= */
+                /* ========================================================== */
+
+                /* create X */
+                if (do_transpose)
+                {
+                    pargout [0] = mxCreateDoubleMatrix (nrhs, n, mxCOMPLEX) ;
+                }
+                else
+                {
+                    pargout [0] = mxCreateDoubleMatrix (n, nrhs, mxCOMPLEX) ;
+                }
+                Xx = mxGetPr (pargout [0]) ;
+                Xz = mxGetPi (pargout [0]) ;
+
+                Bx = mxGetPr (B_matlab) ;
+                Bz = mxGetPi (B_matlab) ;
+
+                /* get workspace */
+                Wx = mxMalloc (n * sizeof (double)) ;
+                Wz = mxMalloc (n * sizeof (double)) ;
+
+                /* ---------------------------------------------------------- */
+                /* do just one row/column of the right-hand-side at a time */
+                /* ---------------------------------------------------------- */
+
+                if (do_transpose)
+                {
+
+                    for (chunk = 0 ; chunk < nrhs ; chunk++)
+                    {
+
+                        /* -------------------------------------------------- */
+                        /* transpose and permute right hand side, W = Q'*B' */
+                        /* -------------------------------------------------- */
+
+                        for (k = 0 ; k < n ; k++)
+                        {
+                            i = Q ? (Q [k] - 1) : k ;
+                            Wx [k] = Bx [i*nrhs] ;
+                            Wz [k] = Bz ? (-Bz [i*nrhs]) : 0 ;
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* solve W = (L*U + Off)'\W */
+                        /* -------------------------------------------------- */
+
+                        for (block = 0 ; block < nblocks ; block++)
+                        {
+
+                            /* ---------------------------------------------- */
+                            /* block of size nk, rows/columns k1 to k2-1 */
+                            /* ---------------------------------------------- */
+
+                            k1 = R [block] - 1 ;        /* R is 1-based */
+                            k2 = R [block+1] - 1 ;
+                            nk = k2 - k1 ;
+
+                            /* ---------------------------------------------- */
+                            /* block back-substitution for off-diagonal-block */
+                            /* ---------------------------------------------- */
+
+                            if (block > 0 && Offp != NULL)
+                            {
+                                for (k = k1 ; k < k2 ; k++)
+                                {
+                                    pend = Offp [k+1] ;
+                                    for (p = Offp [k] ; p < pend ; p++)
+                                    {
+                                        i = Offi [p] ;
+                                        /* W [k] -= W [i] * conj(Off [p]) ; */
+                                        z = Offz ? Offz [p] : 0 ;
+                                        MULT_SUB_CONJ (Wx [k], Wz [k],
+                                            Wx [i], Wz [i], Offx [p], z) ;
+                                    }
+                                }
+                            }
+
+
+                            /* solve the block system */
+                            if (nk == 1)
+                            {
+
+                                /* W [k1] /= conj (L(k1,k1)) ; */
+                                p = Lp [k1] ;
+                                s = Lx [p] ;
+                                sz = Lz ? (-Lz [p]) : 0 ;
+                                DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
+                                Wx [k1] = wx ;
+                                Wz [k1] = wz ;
+
+                                /* W [k1] /= conj (U(k1,k1)) ; */
+                                p = Up [k1] ;
+                                s = Ux [p] ;
+                                sz = Uz ? (-Uz [p]) : 0 ;
+                                DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
+                                Wx [k1] = wx ;
+                                Wz [k1] = wz ;
+
+                            }
+                            else
+                            {
+
+                                /* ------------------------------------------ */
+                                /* W = U'\W and then W=L'\W */
+                                /* ------------------------------------------ */
+
+                                /* W = U'\W */
+                                for (k = k1 ; k < k2 ; k++)
+                                {
+                                    pend = Up [k+1] - 1 ;
+                                    /* w = W [k] */
+                                    wx = Wx [k] ;
+                                    wz = Wz [k] ;
+                                    for (p = Up [k] ; p < pend ; p++)
+                                    {
+                                        i = Ui [p] ;
+                                        /* w -= W [i] * conj(U [p]) */
+                                        z = Uz ? Uz [p] : 0 ;
+                                        MULT_SUB_CONJ (wx, wz,
+                                            Wx [i], Wz [i], Ux [p], z) ;
+                                    }
+                                    /* W [k] = w / conj(ukk) ; */
+                                    ukk = Ux [pend] ;
+                                    ukkz = Uz ? (-Uz [pend]) : 0 ;
+                                    DIV (Wx [k], Wz [k], wx, wz, ukk, ukkz) ;
+                                }
+
+                                /* W = L'\W */
+                                for (k = k2-1 ; k >= k1 ; k--)
+                                {
+                                    p = Lp [k] ;
+                                    pend = Lp [k+1] ;
+                                    /* w = W [k] */
+                                    wx = Wx [k] ;
+                                    wz = Wz [k] ;
+                                    lkk = Lx [p] ;
+                                    lkkz = Lz ? (-Lz [p]) : 0 ;
+                                    for (p++ ; p < pend ; p++)
+                                    {
+                                        i = Li [p] ;
+                                        /* w -= W [i] * conj (Lx [p]) ; */
+                                        z = Lz ? Lz [p] : 0 ;
+                                        MULT_SUB_CONJ (wx, wz,
+                                            Wx [i], Wz [i], Lx [p], z) ;
+                                    }
+                                    /* W [k] = w / conj(lkk) ; */
+                                    DIV (Wx [k], Wz [k], wx, wz, lkk, lkkz) ;
+                                }
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* scale, permute, and tranpose: X = (P*(R\W))' */
+                        /* -------------------------------------------------- */
+
+                        if (Rs == NULL)
+                        {
+                            /* no scaling */
+                            for (k = 0 ; k < n ; k++)
+                            {
+                                i = P ? (P [k] - 1) : k ;
+                                Xx [i*nrhs] = Wx [k] ;
+                                Xz [i*nrhs] = Wz ? (-Wz [k]) : 0 ;
+                            }
+                        }
+                        else
+                        {
+                            /* with scaling */
+                            for (k = 0 ; k < n ; k++)
+                            {
+                                i = P ? (P [k] - 1) : k ;
+                                rs = Rs [k] ;
+                                Xx [i*nrhs] = Wx [k] / rs ;
+                                Xz [i*nrhs] = Wz ? (-Wz [k] / rs) : 0 ;
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* go to the next row of B and X */
+                        /* -------------------------------------------------- */
+
+                        Xx++ ;
+                        Xz++ ;
+                        Bx++ ;
+                        if (Bz) Bz++ ;
+                    }
+
+                }
+                else
+                {
+
+                    for (chunk = 0 ; chunk < nrhs ; chunk++)
+                    {
+
+                        /* -------------------------------------------------- */
+                        /* scale and permute the right hand side, W = P*(R\B) */
+                        /* -------------------------------------------------- */
+
+                        if (Rs == NULL)
+                        {
+                            /* no scaling */
+                            for (k = 0 ; k < n ; k++)
+                            {
+                                i = P ? (P [k] - 1) : k ;
+                                Wx [k] = Bx [i] ;
+                                Wz [k] = Bz ? Bz [i] : 0 ;
+                            }
+                        }
+                        else
+                        {
+                            /* with scaling */
+                            for (k = 0 ; k < n ; k++)
+                            {
+                                i = P ? (P [k] - 1) : k ;
+                                rs = Rs [k] ;
+                                Wx [k] = Bx [i] / rs ;
+                                Wz [k] = Bz ? (Bz [i] / rs) : 0 ;
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* solve W = (L*U + Off)\W */
+                        /* -------------------------------------------------- */
+
+                        for (block = nblocks-1 ; block >= 0 ; block--)
+                        {
+
+                            /* ---------------------------------------------- */
+                            /* block of size nk, rows/columns k1 to k2-1 */
+                            /* ---------------------------------------------- */
+
+                            k1 = R [block] - 1 ;        /* R is 1-based */
+                            k2 = R [block+1] - 1 ;
+                            nk = k2 - k1 ;
+
+                            /* solve the block system */
+                            if (nk == 1)
+                            {
+
+                                /* W [k1] /= L(k1,k1) ; */
+                                p = Lp [k1] ;
+                                s = Lx [p] ;
+                                sz = Lz ? Lz [p] : 0 ;
+                                DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
+                                Wx [k1] = wx ;
+                                Wz [k1] = wz ;
+
+                                /* W [k1] /= U(k1,k1) ; */
+                                p = Up [k1] ;
+                                s = Ux [p] ;
+                                sz = Uz ? Uz [p] : 0 ;
+                                DIV (wx, wz, Wx [k1], Wz [k1], s, sz) ;
+                                Wx [k1] = wx ;
+                                Wz [k1] = wz ;
+
+                            }
+                            else
+                            {
+
+                                /* ------------------------------------------ */
+                                /* W = L\W and then W=U\W */
+                                /* ------------------------------------------ */
+
+                                /* W = L\W */
+                                for (k = k1 ; k < k2 ; k++)
+                                {
+                                    p = Lp [k] ;
+                                    pend = Lp [k+1] ;
+                                    lkk = Lx [p] ;
+                                    lkkz = Lz ? Lz [p] : 0 ;
+                                    /* w = W [k] / lkk ; */
+                                    DIV (wx, wz, Wx [k], Wz [k], lkk, lkkz) ;
+                                    Wx [k] = wx ;
+                                    Wz [k] = wz ;
+                                    for (p++ ; p < pend ; p++)
+                                    {
+                                        i = Li [p] ;
+                                        /* W [i] -= Lx [p] * w ; */
+                                        z = Lz ? Lz [p] : 0 ;
+                                        MULT_SUB (Wx [i], Wz [i], Lx [p], z,
+                                            wx, wz) ;
+                                    }
+                                }
+
+                                /* W = U\W */
+                                for (k = k2-1 ; k >= k1 ; k--)
+                                {
+                                    pend = Up [k+1] - 1 ;
+                                    ukk = Ux [pend] ;
+                                    ukkz = Uz ? Uz [pend] : 0 ;
+                                    /* w = W [k] / ukk ; */
+                                    DIV (wx, wz, Wx [k], Wz [k], ukk, ukkz) ;
+                                    Wx [k] = wx ;
+                                    Wz [k] = wz ;
+                                    for (p = Up [k] ; p < pend ; p++)
+                                    {
+                                        i = Ui [p] ;
+                                        /* W [i] -= U [p] * w ; */
+                                        z = Uz ? Uz [p] : 0 ;
+                                        MULT_SUB (Wx [i], Wz [i], Ux [p], z,
+                                            wx, wz) ;
+                                    }
+                                }
+                            }
+
+                            /* ---------------------------------------------- */
+                            /* block back-substitution for off-diagonal-block */
+                            /* ---------------------------------------------- */
+
+                            if (block > 0 && Offp != NULL)
+                            {
+                                for (k = k1 ; k < k2 ; k++)
+                                {
+                                    pend = Offp [k+1] ;
+                                    wx = Wx [k] ;
+                                    wz = Wz [k] ;
+                                    for (p = Offp [k] ; p < pend ; p++)
+                                    {
+                                        i = Offi [p] ;
+                                        /* W [Offi [p]] -= Offx [p] * w ; */
+                                        z = Offz ? Offz [p] : 0 ;
+                                        MULT_SUB (Wx [i], Wz [i], Offx [p], z,
+                                            wx, wz) ;
+                                    }
+                                }
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* permute the result, X = Q*W */
+                        /* -------------------------------------------------- */
+
+                        for (k = 0 ; k < n ; k++)
+                        {
+                            i = Q ? (Q [k] - 1) : k ;
+                            Xx [i] = Wx [k] ;
+                            Xz [i] = Wz [k] ;
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* go to the next column of B and X */
+                        /* -------------------------------------------------- */
+
+                        Xx += n ;
+                        Xz += n ;
+                        Bx += n ;
+                        if (Bz) Bz += n ;
+                    }
+                }
+
+                /* free workspace */
+                mxFree (Wx) ;
+                mxFree (Wz) ;
+
+            }
+            else
+            {
+
+                /* ========================================================== */
+                /* === real case ============================================ */
+                /* ========================================================== */
+
+                /* create X */
+                if (do_transpose)
+                {
+                    pargout [0] = mxCreateDoubleMatrix (nrhs, n, mxREAL) ;
+                }
+                else
+                {
+                    pargout [0] = mxCreateDoubleMatrix (n, nrhs, mxREAL) ;
+                }
+
+                Xx = mxGetPr (pargout [0]) ;
+                Bx = mxGetPr (B_matlab) ;
+
+                if (do_transpose)
+                {
+
+                    /* ------------------------------------------------------ */
+                    /* solve in chunks of one row at a time */
+                    /* ------------------------------------------------------ */
+
+                    /* get workspace */
+                    Wx = mxMalloc (n * sizeof (double)) ;
+
+                    for (chunk = 0 ; chunk < nrhs ; chunk++)
+                    {
+
+                        /* -------------------------------------------------- */
+                        /* transpose and permute right hand side, W = Q'*B' */
+                        /* -------------------------------------------------- */
+
+                        for (k = 0 ; k < n ; k++)
+                        {
+                            i = Q ? (Q [k] - 1) : k ;
+                            Wx [k] = Bx [i*nrhs] ;
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* solve W = (L*U + Off)'\W */
+                        /* -------------------------------------------------- */
+
+                        for (block = 0 ; block < nblocks ; block++)
+                        {
+                    
+                            /* ---------------------------------------------- */
+                            /* block of size nk, rows/columns k1 to k2-1 */
+                            /* ---------------------------------------------- */
+
+                            k1 = R [block] - 1 ;        /* R is 1-based */
+                            k2 = R [block+1] - 1 ;
+                            nk = k2 - k1 ;
+
+                            /* ---------------------------------------------- */
+                            /* block back-substitution for off-diagonal-block */
+                            /* ---------------------------------------------- */
+
+                            if (block > 0 && Offp != NULL)
+                            {
+                                for (k = k1 ; k < k2 ; k++)
+                                {
+                                    pend = Offp [k+1] ;
+                                    for (p = Offp [k] ; p < pend ; p++)
+                                    {
+                                        Wx [k] -= Wx [Offi [p]] * Offx [p] ;
+                                    }
+                                }
+                            }
+
+                            /* solve the block system */
+                            if (nk == 1)
+                            {
+                                Wx [k1] /= Lx [Lp [k1]] ;
+                                Wx [k1] /= Ux [Up [k1]] ;
+                            }
+                            else
+                            {
+
+                                /* ------------------------------------------ */
+                                /* W = U'\W and then W=L'\W */
+                                /* ------------------------------------------ */
+
+                                /* W = U'\W */
+                                for (k = k1 ; k < k2 ; k++)
+                                {
+                                    pend = Up [k+1] - 1 ;
+                                    for (p = Up [k] ; p < pend ; p++)
+                                    {
+                                        Wx [k] -= Wx [Ui [p]] * Ux [p] ;
+                                    }
+                                    Wx [k] /= Ux [pend] ;
+                                }
+
+                                /* W = L'\W */
+                                for (k = k2-1 ; k >= k1 ; k--)
+                                {
+                                    p = Lp [k] ;
+                                    pend = Lp [k+1] ;
+                                    lkk = Lx [p] ;
+                                    for (p++ ; p < pend ; p++)
+                                    {
+                                        Wx [k] -= Wx [Li [p]] * Lx [p] ;
+                                    }
+                                    Wx [k] /= lkk ;
+                                }
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* scale, permute, and tranpose: X = (P*(R\W))' */
+                        /* -------------------------------------------------- */
+
+                        if (Rs == NULL)
+                        {
+                            /* no scaling */
+                            for (k = 0 ; k < n ; k++)
+                            {
+                                i = P ? (P [k] - 1) : k ;
+                                Xx [i*nrhs] = Wx [k] ;
+                            }
+                        }
+                        else
+                        {
+                            /* with scaling */
+                            for (k = 0 ; k < n ; k++)
+                            {
+                                i = P ? (P [k] - 1) : k ;
+                                rs = Rs [k] ;
+                                Xx [i*nrhs] = Wx [k] / rs ;
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* go to the next row of B and X */
+                        /* -------------------------------------------------- */
+
+                        Xx++ ;
+                        Bx++ ;
+                    }
+
+                }
+                else
+                {
+
+                    /* ------------------------------------------------------ */
+                    /* solve in chunks of 4 columns at a time */
+                    /* ------------------------------------------------------ */
+
+                    /* get workspace */
+                    Wx = mxMalloc (n * MAX (4, nrhs) * sizeof (double)) ;
+
+                    for (chunk = 0 ; chunk < nrhs ; chunk += 4)
+                    {
+                        /* -------------------------------------------------- */
+                        /* get the size of the current chunk */
+                        /* -------------------------------------------------- */
+
+                        nr = MIN (nrhs - chunk, 4) ;
+
+                        /* -------------------------------------------------- */
+                        /* scale and permute the right hand side, W = P*(R\B) */
+                        /* -------------------------------------------------- */
+
+                        if (Rs == NULL)
+                        {
+
+                            /* no scaling */
+                            switch (nr)
+                            {
+
+                                case 1:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        Wx [k] = Bx [i] ;
+                                    }
+                                    break ;
+
+                                case 2:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        Wx [2*k    ] = Bx [i      ] ;
+                                        Wx [2*k + 1] = Bx [i + n  ] ;
+                                    }
+                                    break ;
+
+                                case 3:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        Wx [3*k    ] = Bx [i      ] ;
+                                        Wx [3*k + 1] = Bx [i + n  ] ;
+                                        Wx [3*k + 2] = Bx [i + n*2] ;
+                                    }
+                                    break ;
+
+                                case 4:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        Wx [4*k    ] = Bx [i      ] ;
+                                        Wx [4*k + 1] = Bx [i + n  ] ;
+                                        Wx [4*k + 2] = Bx [i + n*2] ;
+                                        Wx [4*k + 3] = Bx [i + n*3] ;
+                                    }
+                                    break ;
+                            }
+
+                        }
+                        else
+                        {
+
+                            switch (nr)
+                            {
+
+                                case 1:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        rs = Rs [k] ;
+                                        Wx [k] = Bx [i] / rs ;
+                                    }
+                                    break ;
+
+                                case 2:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        rs = Rs [k] ;
+                                        Wx [2*k    ] = Bx [i      ] / rs ;
+                                        Wx [2*k + 1] = Bx [i + n  ] / rs ;
+                                    }
+                                    break ;
+
+                                case 3:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        rs = Rs [k] ;
+                                        Wx [3*k    ] = Bx [i      ] / rs ;
+                                        Wx [3*k + 1] = Bx [i + n  ] / rs ;
+                                        Wx [3*k + 2] = Bx [i + n*2] / rs ;
+                                    }
+                                    break ;
+
+                                case 4:
+
+                                    for (k = 0 ; k < n ; k++)
+                                    {
+                                        i = P ? (P [k] - 1) : k ;
+                                        rs = Rs [k] ;
+                                        Wx [4*k    ] = Bx [i      ] / rs ;
+                                        Wx [4*k + 1] = Bx [i + n  ] / rs ;
+                                        Wx [4*k + 2] = Bx [i + n*2] / rs ;
+                                        Wx [4*k + 3] = Bx [i + n*3] / rs ;
+                                    }
+                                    break ;
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* solve W = (L*U + Off)\W */
+                        /* -------------------------------------------------- */
+
+                        for (block = nblocks-1 ; block >= 0 ; block--)
+                        {
+
+                            /* ---------------------------------------------- */
+                            /* block of size nk is rows/columns k1 to k2-1 */
+                            /* ---------------------------------------------- */
+
+                            k1 = R [block] - 1 ;            /* R is 1-based */
+                            k2 = R [block+1] - 1 ;
+                            nk = k2 - k1 ;
+
+                            /* solve the block system */
+                            if (nk == 1)
+                            {
+
+                                /* this is not done if L comes from KLU, since
+                                   in that case, L is unit lower triangular */
+                                s = Lx [Lp [k1]] ;
+                                if (s != 1.0) switch (nr)
+                                {
+                                    case 1:
+                                        Wx [k1] /= s ;
+                                        break ;
+                                    case 2:
+                                        Wx [2*k1] /= s ;
+                                        Wx [2*k1 + 1] /= s ;
+                                        break ;
+                                    case 3:
+                                        Wx [3*k1] /= s ;
+                                        Wx [3*k1 + 1] /= s ;
+                                        Wx [3*k1 + 2] /= s ;
+                                        break ;
+                                    case 4:
+                                        Wx [4*k1] /= s ;
+                                        Wx [4*k1 + 1] /= s ;
+                                        Wx [4*k1 + 2] /= s ;
+                                        Wx [4*k1 + 3] /= s ;
+                                        break ;
+                                }
+
+                                s = Ux [Up [k1]] ;
+                                if (s != 1.0) switch (nr)
+                                {
+                                    case 1:
+                                        Wx [k1] /= s ;
+                                        break ;
+                                    case 2:
+                                        Wx [2*k1] /= s ;
+                                        Wx [2*k1 + 1] /= s ;
+                                        break ;
+                                    case 3:
+                                        Wx [3*k1] /= s ;
+                                        Wx [3*k1 + 1] /= s ;
+                                        Wx [3*k1 + 2] /= s ;
+                                        break ;
+                                    case 4:
+                                        Wx [4*k1] /= s ;
+                                        Wx [4*k1 + 1] /= s ;
+                                        Wx [4*k1 + 2] /= s ;
+                                        Wx [4*k1 + 3] /= s ;
+                                        break ;
+                                }
+
+                            }
+                            else
+                            {
+
+                                /* ------------------------------------------ */
+                                /* W = L\W and then W=U\W */
+                                /* ------------------------------------------ */
+
+                                switch (nr)
+                                {
+
+                                    case 1:
+                                        /* W = L\W */
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            p = Lp [k] ;
+                                            pend = Lp [k+1] ;
+                                            lkk = Lx [p++] ;
+                                            x [0] = Wx [k] / lkk ;
+                                            Wx [k] = x [0] ;
+                                            for ( ; p < pend ; p++)
+                                            {
+                                                Wx [Li [p]] -= Lx [p] * x [0] ;
+                                            }
+                                        }
+
+                                        /* W = U\W */
+                                        for (k = k2-1 ; k >= k1 ; k--)
+                                        {
+                                            pend = Up [k+1] - 1 ;
+                                            ukk = Ux [pend] ;
+                                            x [0] = Wx [k] / ukk ;
+                                            Wx [k] = x [0] ;
+                                            for (p = Up [k] ; p < pend ; p++)
+                                            {
+                                                Wx [Ui [p]] -= Ux [p] * x [0] ;
+                                            }
+                                        }
+                                        break ;
+
+                                    case 2:
+
+                                        /* W = L\W */
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            p = Lp [k] ;
+                                            pend = Lp [k+1] ;
+                                            lkk = Lx [p++] ;
+                                            x [0] = Wx [2*k    ] / lkk ;
+                                            x [1] = Wx [2*k + 1] / lkk ;
+                                            Wx [2*k    ] = x [0] ;
+                                            Wx [2*k + 1] = x [1] ;
+                                            for ( ; p < pend ; p++)
+                                            {
+                                                i = Li [p] ;
+                                                lik = Lx [p] ;
+                                                Wx [2*i    ] -= lik * x [0] ;
+                                                Wx [2*i + 1] -= lik * x [1] ;
+                                            }
+                                        }
+
+                                        /* W = U\W */
+                                        for (k = k2-1 ; k >= k1 ; k--)
+                                        {
+                                            pend = Up [k+1] - 1 ;
+                                            ukk = Ux [pend] ;
+                                            x [0] = Wx [2*k    ] / ukk ;
+                                            x [1] = Wx [2*k + 1] / ukk ;
+                                            Wx [2*k    ] = x [0] ;
+                                            Wx [2*k + 1] = x [1] ;
+                                            for (p = Up [k] ; p < pend ; p++)
+                                            {
+                                                i = Ui [p] ;
+                                                uik = Ux [p] ;
+                                                Wx [2*i    ] -= uik * x [0] ;
+                                                Wx [2*i + 1] -= uik * x [1] ;
+                                            }
+                                        }
+                                        break ;
+
+                                    case 3:
+
+                                        /* W = L\W */
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            p = Lp [k] ;
+                                            pend = Lp [k+1] ;
+                                            lkk = Lx [p++] ;
+                                            x [0] = Wx [3*k    ] / lkk ;
+                                            x [1] = Wx [3*k + 1] / lkk ;
+                                            x [2] = Wx [3*k + 2] / lkk ;
+                                            Wx [3*k    ] = x [0] ;
+                                            Wx [3*k + 1] = x [1] ;
+                                            Wx [3*k + 2] = x [2] ;
+                                            for ( ; p < pend ; p++)
+                                            {
+                                                i = Li [p] ;
+                                                lik = Lx [p] ;
+                                                Wx [3*i    ] -= lik * x [0] ;
+                                                Wx [3*i + 1] -= lik * x [1] ;
+                                                Wx [3*i + 2] -= lik * x [2] ;
+                                            }
+                                        }
+
+                                        /* W = U\W */
+                                        for (k = k2-1 ; k >= k1 ; k--)
+                                        {
+                                            pend = Up [k+1] - 1 ;
+                                            ukk = Ux [pend] ;
+                                            x [0] = Wx [3*k    ] / ukk ;
+                                            x [1] = Wx [3*k + 1] / ukk ;
+                                            x [2] = Wx [3*k + 2] / ukk ;
+                                            Wx [3*k    ] = x [0] ;
+                                            Wx [3*k + 1] = x [1] ;
+                                            Wx [3*k + 2] = x [2] ;
+                                            for (p = Up [k] ; p < pend ; p++)
+                                            {
+                                                i = Ui [p] ;
+                                                uik = Ux [p] ;
+                                                Wx [3*i    ] -= uik * x [0] ;
+                                                Wx [3*i + 1] -= uik * x [1] ;
+                                                Wx [3*i + 2] -= uik * x [2] ;
+                                            }
+                                        }
+                                        break ;
+
+                                    case 4:
+
+                                        /* W = L\W */
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            p = Lp [k] ;
+                                            pend = Lp [k+1] ;
+                                            lkk = Lx [p++] ;
+                                            x [0] = Wx [4*k    ] / lkk ;
+                                            x [1] = Wx [4*k + 1] / lkk ;
+                                            x [2] = Wx [4*k + 2] / lkk ;
+                                            x [3] = Wx [4*k + 3] / lkk ;
+                                            Wx [4*k    ] = x [0] ;
+                                            Wx [4*k + 1] = x [1] ;
+                                            Wx [4*k + 2] = x [2] ;
+                                            Wx [4*k + 3] = x [3] ;
+                                            for ( ; p < pend ; p++)
+                                            {
+                                                i = Li [p] ;
+                                                lik = Lx [p] ;
+                                                Wx [4*i    ] -= lik * x [0] ;
+                                                Wx [4*i + 1] -= lik * x [1] ;
+                                                Wx [4*i + 2] -= lik * x [2] ;
+                                                Wx [4*i + 3] -= lik * x [3] ;
+                                            }
+                                        }
+
+                                        /* Wx = U\Wx */
+                                        for (k = k2-1 ; k >= k1 ; k--)
+                                        {
+                                            pend = Up [k+1] - 1 ;
+                                            ukk = Ux [pend] ;
+                                            x [0] = Wx [4*k    ] / ukk ;
+                                            x [1] = Wx [4*k + 1] / ukk ;
+                                            x [2] = Wx [4*k + 2] / ukk ;
+                                            x [3] = Wx [4*k + 3] / ukk ;
+                                            Wx [4*k    ] = x [0] ;
+                                            Wx [4*k + 1] = x [1] ;
+                                            Wx [4*k + 2] = x [2] ;
+                                            Wx [4*k + 3] = x [3] ;
+                                            for (p = Up [k] ; p < pend ; p++)
+                                            {
+                                                i = Ui [p] ;
+                                                uik = Ux [p] ;
+                                                Wx [4*i    ] -= uik * x [0] ;
+                                                Wx [4*i + 1] -= uik * x [1] ;
+                                                Wx [4*i + 2] -= uik * x [2] ;
+                                                Wx [4*i + 3] -= uik * x [3] ;
+                                            }
+                                        }
+                                        break ;
+                                }
+                            }
+
+                            /* ---------------------------------------------- */
+                            /* block back-substitution for off-diagonal-block */
+                            /* ---------------------------------------------- */
+
+                            if (block > 0 && Offp != NULL)
+                            {
+                                switch (nr)
+                                {
+
+                                    case 1:
+
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            pend = Offp [k+1] ;
+                                            x [0] = Wx [k] ;
+                                            for (p = Offp [k] ; p < pend ; p++)
+                                            {
+                                                Wx [Offi [p]] -= Offx[p] * x[0];
+                                            }
+                                        }
+                                        break ;
+
+                                    case 2:
+
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            pend = Offp [k+1] ;
+                                            x [0] = Wx [2*k    ] ;
+                                            x [1] = Wx [2*k + 1] ;
+                                            for (p = Offp [k] ; p < pend ; p++)
+                                            {
+                                                i = Offi [p] ;
+                                                offik = Offx [p] ;
+                                                Wx [2*i    ] -= offik * x [0] ;
+                                                Wx [2*i + 1] -= offik * x [1] ;
+                                            }
+                                        }
+                                        break ;
+
+                                    case 3:
+
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            pend = Offp [k+1] ;
+                                            x [0] = Wx [3*k    ] ;
+                                            x [1] = Wx [3*k + 1] ;
+                                            x [2] = Wx [3*k + 2] ;
+                                            for (p = Offp [k] ; p < pend ; p++)
+                                            {
+                                                i = Offi [p] ;
+                                                offik = Offx [p] ;
+                                                Wx [3*i    ] -= offik * x [0] ;
+                                                Wx [3*i + 1] -= offik * x [1] ;
+                                                Wx [3*i + 2] -= offik * x [2] ;
+                                            }
+                                        }
+                                        break ;
+
+                                    case 4:
+
+                                        for (k = k1 ; k < k2 ; k++)
+                                        {
+                                            pend = Offp [k+1] ;
+                                            x [0] = Wx [4*k    ] ;
+                                            x [1] = Wx [4*k + 1] ;
+                                            x [2] = Wx [4*k + 2] ;
+                                            x [3] = Wx [4*k + 3] ;
+                                            for (p = Offp [k] ; p < pend ; p++)
+                                            {
+                                                i = Offi [p] ;
+                                                offik = Offx [p] ;
+                                                Wx [4*i    ] -= offik * x [0] ;
+                                                Wx [4*i + 1] -= offik * x [1] ;
+                                                Wx [4*i + 2] -= offik * x [2] ;
+                                                Wx [4*i + 3] -= offik * x [3] ;
+                                            }
+                                        }
+                                        break ;
+                                }
+                            }
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* permute the result, X = Q*W */
+                        /* -------------------------------------------------- */
+
+                        switch (nr)
+                        {
+
+                            case 1:
+
+                                for (k = 0 ; k < n ; k++)
+                                {
+                                    i = Q ? (Q [k] - 1) : k ;
+                                    Xx [i] = Wx [k] ;
+                                }
+                                break ;
+
+                            case 2:
+
+                                for (k = 0 ; k < n ; k++)
+                                {
+                                    i = Q ? (Q [k] - 1) : k ;
+                                    Xx [i      ] = Wx [2*k    ] ;
+                                    Xx [i + n  ] = Wx [2*k + 1] ;
+                                }
+                                break ;
+
+                            case 3:
+
+                                for (k = 0 ; k < n ; k++)
+                                {
+                                    i = Q ? (Q [k] - 1) : k ;
+                                    Xx [i      ] = Wx [3*k    ] ;
+                                    Xx [i + n  ] = Wx [3*k + 1] ;
+                                    Xx [i + n*2] = Wx [3*k + 2] ;
+                                }
+                                break ;
+
+                            case 4:
+
+                                for (k = 0 ; k < n ; k++)
+                                {
+                                    i = Q ? (Q [k] - 1) : k ;
+                                    Xx [i      ] = Wx [4*k    ] ;
+                                    Xx [i + n  ] = Wx [4*k + 1] ;
+                                    Xx [i + n*2] = Wx [4*k + 2] ;
+                                    Xx [i + n*3] = Wx [4*k + 3] ;
+                                }
+                                break ;
+                        }
+
+                        /* -------------------------------------------------- */
+                        /* go to the next chunk of B and X */
+                        /* -------------------------------------------------- */
+
+                        Xx += n*4 ;
+                        Bx += n*4 ;
+                    }
+                }
+
+                /* free workspace */
+                mxFree (Wx) ;
+            }
+
+        }
 
     }
     else
     {
 
-	/* ------------------------------------------------------------------ */
-	/* LU = klu (A) usage; extract factorization */
-	/* ------------------------------------------------------------------ */
-
-	/* sort the row indices in each column of L and U */
-	if (A_complex)
-	{
-	    klu_zl_sort (Symbolic, Numeric, &Common) ;
-	}
-	else
-	{
-	    klu_l_sort (Symbolic, Numeric, &Common) ;
-	}
-
-	/* L */
-	L_matlab = mxCreateSparse (n, n, Numeric->lnz,
-	    A_complex ? mxCOMPLEX: mxREAL) ;
-	Lp = (UF_long *) mxGetJc (L_matlab) ;
-	Li = (UF_long *) mxGetIr (L_matlab) ;
-	Lx = mxGetPr (L_matlab) ;
-	Lz = mxGetPi (L_matlab) ;
-
-	/* U */
-	U_matlab = mxCreateSparse (n, n, Numeric->unz,
-	    A_complex ? mxCOMPLEX: mxREAL) ;
-	Up = (UF_long *) mxGetJc (U_matlab) ;
-	Ui = (UF_long *) mxGetIr (U_matlab) ;
-	Ux = mxGetPr (U_matlab) ;
-	Uz = mxGetPi (U_matlab) ;
-
-	/* p */
-	p_matlab = mxCreateNumericMatrix (1, n, mx_int, mxREAL) ;
-	P = (UF_long *) mxGetData (p_matlab) ;
-
-	/* q */
-	q_matlab = mxCreateNumericMatrix (1, n, mx_int, mxREAL) ;
-	Q = (UF_long *) mxGetData (q_matlab) ;
-
-	/* R, as a sparse diagonal matrix */
-	R_matlab = mxCreateSparse (n, n, n+1, mxREAL) ;
-	Rp = (UF_long *) mxGetJc (R_matlab) ;
-	Ri = (UF_long *) mxGetIr (R_matlab) ;
-	Rs = mxGetPr (R_matlab) ;
-	for (k = 0 ; k <= n ; k++)
-	{
-	    Rp [k] = k ;
-	    Ri [k] = k ;
-	}
-
-	/* F, off diagonal blocks */
-	F_matlab = mxCreateSparse (n, n, Numeric->nzoff,
-	    A_complex ? mxCOMPLEX: mxREAL) ;
-	Offp = (UF_long *) mxGetJc (F_matlab) ;
-	Offi = (UF_long *) mxGetIr (F_matlab) ;
-	Offx = mxGetPr (F_matlab) ;
-	Offz = mxGetPi (F_matlab) ;
-
-	/* r, block boundaries */
-	nblocks = Symbolic->nblocks ;
-	r_matlab = mxCreateNumericMatrix (1, nblocks+1, mx_int, mxREAL) ;
-	R = (UF_long *) mxGetData (r_matlab) ;
-
-	/* extract the LU factorization from KLU Numeric and Symbolic objects */
-	if (A_complex)
-	{
-	    klu_zl_extract (Numeric, Symbolic, Lp, Li, Lx, Lz, Up, Ui, Ux, Uz,
-		Offp, Offi, Offx, Offz, P, Q, Rs, R, &Common) ;
-	}
-	else
-	{
-	    klu_l_extract (Numeric, Symbolic, Lp, Li, Lx, Up, Ui, Ux,
-		Offp, Offi, Offx, P, Q, Rs, R, &Common) ;
-	}
-
-	/* fix p and q for 1-based indexing */
-	for (k = 0 ; k < n ; k++)
-	{
-	    P [k]++ ;
-	    Q [k]++ ;
-	}
-
-	/* fix r for 1-based indexing */
-	for (k = 0 ; k <= nblocks ; k++)
-	{
-	    R [k]++ ;
-	}
-
-	/* create output LU struct */
-	pargout [0] = mxCreateStructMatrix (1, 1, 7, LUnames) ;
-	mxSetFieldByNumber (pargout [0], 0, 0, L_matlab) ;
-	mxSetFieldByNumber (pargout [0], 0, 1, U_matlab) ;
-	mxSetFieldByNumber (pargout [0], 0, 2, p_matlab) ;
-	mxSetFieldByNumber (pargout [0], 0, 3, q_matlab) ;
-	mxSetFieldByNumber (pargout [0], 0, 4, R_matlab) ;
-	mxSetFieldByNumber (pargout [0], 0, 5, F_matlab) ;
-	mxSetFieldByNumber (pargout [0], 0, 6, r_matlab) ;
-
-	/* ------------------------------------------------------------------ */
-	/* free Symbolic and Numeric objects */
-	/* ------------------------------------------------------------------ */
-
-	klu_l_free_symbolic (&Symbolic, &Common) ;
-	klu_l_free_numeric (&Numeric, &Common) ;
+        /* ------------------------------------------------------------------ */
+        /* LU = klu (A) usage; extract factorization */
+        /* ------------------------------------------------------------------ */
+
+        /* sort the row indices in each column of L and U */
+        if (A_complex)
+        {
+            klu_zl_sort (Symbolic, Numeric, &Common) ;
+        }
+        else
+        {
+            klu_l_sort (Symbolic, Numeric, &Common) ;
+        }
+
+        /* L */
+        L_matlab = mxCreateSparse (n, n, Numeric->lnz,
+            A_complex ? mxCOMPLEX: mxREAL) ;
+        Lp = (Long *) mxGetJc (L_matlab) ;
+        Li = (Long *) mxGetIr (L_matlab) ;
+        Lx = mxGetPr (L_matlab) ;
+        Lz = mxGetPi (L_matlab) ;
+
+        /* U */
+        U_matlab = mxCreateSparse (n, n, Numeric->unz,
+            A_complex ? mxCOMPLEX: mxREAL) ;
+        Up = (Long *) mxGetJc (U_matlab) ;
+        Ui = (Long *) mxGetIr (U_matlab) ;
+        Ux = mxGetPr (U_matlab) ;
+        Uz = mxGetPi (U_matlab) ;
+
+        /* p */
+        p_matlab = mxCreateNumericMatrix (1, n, mx_int, mxREAL) ;
+        P = (Long *) mxGetData (p_matlab) ;
+
+        /* q */
+        q_matlab = mxCreateNumericMatrix (1, n, mx_int, mxREAL) ;
+        Q = (Long *) mxGetData (q_matlab) ;
+
+        /* R, as a sparse diagonal matrix */
+        R_matlab = mxCreateSparse (n, n, n+1, mxREAL) ;
+        Rp = (Long *) mxGetJc (R_matlab) ;
+        Ri = (Long *) mxGetIr (R_matlab) ;
+        Rs = mxGetPr (R_matlab) ;
+        for (k = 0 ; k <= n ; k++)
+        {
+            Rp [k] = k ;
+            Ri [k] = k ;
+        }
+
+        /* F, off diagonal blocks */
+        F_matlab = mxCreateSparse (n, n, Numeric->nzoff,
+            A_complex ? mxCOMPLEX: mxREAL) ;
+        Offp = (Long *) mxGetJc (F_matlab) ;
+        Offi = (Long *) mxGetIr (F_matlab) ;
+        Offx = mxGetPr (F_matlab) ;
+        Offz = mxGetPi (F_matlab) ;
+
+        /* r, block boundaries */
+        nblocks = Symbolic->nblocks ;
+        r_matlab = mxCreateNumericMatrix (1, nblocks+1, mx_int, mxREAL) ;
+        R = (Long *) mxGetData (r_matlab) ;
+
+        /* extract the LU factorization from KLU Numeric and Symbolic objects */
+        if (A_complex)
+        {
+            klu_zl_extract (Numeric, Symbolic, Lp, Li, Lx, Lz, Up, Ui, Ux, Uz,
+                Offp, Offi, Offx, Offz, P, Q, Rs, R, &Common) ;
+        }
+        else
+        {
+            klu_l_extract (Numeric, Symbolic, Lp, Li, Lx, Up, Ui, Ux,
+                Offp, Offi, Offx, P, Q, Rs, R, &Common) ;
+        }
+
+        /* fix p and q for 1-based indexing */
+        for (k = 0 ; k < n ; k++)
+        {
+            P [k]++ ;
+            Q [k]++ ;
+        }
+
+        /* fix r for 1-based indexing */
+        for (k = 0 ; k <= nblocks ; k++)
+        {
+            R [k]++ ;
+        }
+
+        /* create output LU struct */
+        pargout [0] = mxCreateStructMatrix (1, 1, 7, LUnames) ;
+        mxSetFieldByNumber (pargout [0], 0, 0, L_matlab) ;
+        mxSetFieldByNumber (pargout [0], 0, 1, U_matlab) ;
+        mxSetFieldByNumber (pargout [0], 0, 2, p_matlab) ;
+        mxSetFieldByNumber (pargout [0], 0, 3, q_matlab) ;
+        mxSetFieldByNumber (pargout [0], 0, 4, R_matlab) ;
+        mxSetFieldByNumber (pargout [0], 0, 5, F_matlab) ;
+        mxSetFieldByNumber (pargout [0], 0, 6, r_matlab) ;
+
+        /* ------------------------------------------------------------------ */
+        /* free Symbolic and Numeric objects */
+        /* ------------------------------------------------------------------ */
+
+        klu_l_free_symbolic (&Symbolic, &Common) ;
+        klu_l_free_numeric (&Numeric, &Common) ;
     }
 }
diff --git a/KLU/Makefile b/KLU/Makefile
index 7f5a62e..1ca71fd 100644
--- a/KLU/Makefile
+++ b/KLU/Makefile
@@ -1,27 +1,54 @@
-default: library
+#------------------------------------------------------------------------------
+# KLU Makefile
+#------------------------------------------------------------------------------
 
-include ../UFconfig/UFconfig.mk
+VERSION = 1.3.2
 
-library:
+default: all
+
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+demos: all
+
+all:
 	( cd Lib ; $(MAKE) )
 	( cd Demo ; $(MAKE) )
 
+library:
+	( cd Lib ; $(MAKE) )
+
 clean:
 	( cd Demo ; $(MAKE) clean )
 	( cd Lib ; $(MAKE) clean )
 	( cd Tcov ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) rename.h )
 
 distclean:
 	( cd Demo ; $(MAKE) distclean )
 	( cd Lib ; $(MAKE) distclean )
 	( cd Tcov ; $(MAKE) distclean )
 	( cd User ; $(MAKE) distclean )
-	( cd MATLAB ; $(MAKE) distclean )
-
-mex:
-	( cd MATLAB ; $(MAKE) )
+	( cd MATLAB ; $(RM) $(CLEAN) rename.h *.mex* )
 
 purge: distclean
 
 cov: library
 	( cd Tcov ; $(MAKE) )
+
+# create PDF documents for the original distribution
+docs:
+	( cd Doc    ; $(MAKE) )
+
+# install KLU
+install:
+	$(CP) Lib/libklu.a $(INSTALL_LIB)/libklu.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libklu.$(VERSION).a libklu.a )
+	$(CP) Include/klu.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libklu*.a
+	chmod 644 $(INSTALL_INCLUDE)/klu.h
+
+# uninstall KLU
+uninstall:
+	$(RM) $(INSTALL_LIB)/libklu*.a
+	$(RM) $(INSTALL_INCLUDE)/klu.h
+
diff --git a/KLU/README.txt b/KLU/README.txt
index 510a439..5f2f8f2 100644
--- a/KLU/README.txt
+++ b/KLU/README.txt
@@ -1,15 +1,17 @@
-KLU Version 1.0, May 31, 2007, by Timothy A. Davis and Ekanathan Palamadai.
-Copyright (C) 2004-2007, University of Florida
+KLU, Copyright (C) 2004-2013, University of Florida
+by Timothy A. Davis and Ekanathan Palamadai.
 KLU is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 Requires the AMD, COLAMD, and BTF libraries, in ../AMD, ../COLAMD, and ../BTF,
-respectively.  Requires the ../UFconfig/UFconfig.mk configuration file.
-Optionally uses CHOLMOD (KLU/User example ordering).  The Tcov tests and
-the Demo both require CHOLMOD.
+respectively.  Requires the ../SuiteSparse_config/SuiteSparse_config.mk
+configuration file.  Optionally uses CHOLMOD (KLU/User example ordering).  The
+Tcov tests and the one of the programs in the Demo require CHOLMOD.
 
 To compile the libklu.a library, type "make".  The compiled library is located
 in KLU/Lib/libklu.a.  Compile code that uses KLU with -IKLU/Include.
+To compile a simple demo (without CHOLMOD), cd to the Demo directory and
+type "make klu_simple".
 
 Type "make clean" to remove all but the compiled library, and "make distclean"
 to remove all files not in the original distribution.
@@ -36,61 +38,65 @@ A full text of the license is in Doc/lesser.txt.
 
 Files in this distribution:
 
-    Demo		example programs that use KLU (requires CHOLMOD)
-    Doc			documentation
-    Include		include files
-    Lib			compiled library
-    Makefile		top-level Makefile
-    MATLAB		MATLAB interface
-    Matrix		test matrices
-    README.txt		this file
-    Source		source code
-    Tcov		exhaustive test of KLU and BTF
-    User		example user ordering function (interface to CHOLMOD)
+    Demo                example programs that use KLU (requires CHOLMOD)
+    Doc                 documentation
+    Include             include files
+    Lib                 compiled library
+    Makefile            top-level Makefile
+    MATLAB              MATLAB interface
+    Matrix              test matrices
+    README.txt          this file
+    Source              source code
+    Tcov                exhaustive test of KLU and BTF
+    User                example user ordering function (interface to CHOLMOD)
 
 ./Demo:
-    kludemo.c		KLU demo (int version)
-    kludemo.out		output of "make" in this directory
-    kluldemo.c		KLU demo (UF_long version)
-    Makefile		Makefile for compiling the demo
+    klu_simple.c        a simple demo (does not require CHOLMOD)
+                        compile with "make klu_simple"
+    klu_simple.out      output of klu_simple
+    kludemo.c           KLU demo (int version)
+    kludemo.out         output of "make" in this directory
+    kluldemo.c          KLU demo (SuiteSparse_long version)
+    Makefile            Makefile for compiling the demo
 
 ./Doc:
     ChangeLog
-    KLU_UserGuide.bib	Bibiography
-    KLU_UserGuide.pdf	PDF version of KLU User Guide
-    KLU_UserGuide.tex	TEX source of KLU User Guide
-    lesser.txt		license (LGPL)
-    Makefile		Makefile for creating the User Guide
-    palamadai_e.pdf	Eka Palamadai's MS thesis
+    KLU_UserGuide.bib   Bibiography
+    KLU_UserGuide.pdf   PDF version of KLU User Guide
+    KLU_UserGuide.tex   TEX source of KLU User Guide
+    lesser.txt          license (LGPL)
+    Makefile            Makefile for creating the User Guide
+    palamadai_e.pdf     Eka Palamadai's MS thesis
 
 ./Include:
-    klu.h		user include file
-    klu_internal.h	internal include file, not needed by the user
-    klu_version.h	internal include file, not needed by the user
+    klu.h               user include file
+    klu_internal.h      internal include file, not needed by the user
+    klu_version.h       internal include file, not needed by the user
 
 ./Lib:
-    Makefile		Makefile for compiling the KLU C-callable library
+    Makefile            Makefile for compiling the KLU C-callable library
+                        (with or without CHOLMOD)
 
 ./MATLAB:
-    Contents.m		list of MATLAB functions in KLU
-    klu_demo.m		MATLAB demo
-    klu_demo.m.out	output of MATLAB demo
-    klu_install.m	compiles and installs KLU for use in MATLAB, runs demo
-    klu.m		MATLAB help for KLU
-    klu_make.m		compiles KLU for use in MATLAB
-    klu_mex.c		MATLAB mexFunction interface for KLU
-    Makefile		Makefile for KLU mexFunction, with CHOLMOD
-    Makefile_no_CHOLMOD	Makefile for KLU mexFunction, without CHOLMOD
-    Test		MATLAB tests
-
-./MATLAB/Test:		KLU tests, requires UFget
-    test1.m		
+    Contents.m          list of MATLAB functions in KLU
+    klu_demo.m          MATLAB demo
+    klu_demo.m.out      output of MATLAB demo (with CHOLMOD)
+    klu_install.m       compiles and installs KLU for use in MATLAB, runs demo
+    klu.m               MATLAB help for KLU
+    klu_make.m          compiles KLU for use in MATLAB
+    klu_mex.c           MATLAB mexFunction interface for KLU
+    Makefile            Makefile for KLU mexFunction, with CHOLMOD
+    Makefile_no_CHOLMOD Makefile for KLU mexFunction, without CHOLMOD
+    Test                MATLAB tests
+
+./MATLAB/Test:          KLU tests, requires UFget
+    test1.m             
     test2.m
     test3.m
     test4.m
     test5.m
 
-./Matrix:		test matrices for programs in ./Demo and ./Tcov
+./Matrix:               test matrices for programs in ./Demo and ./Tcov
     1c.mtx
     arrowc.mtx
     arrow.mtx
@@ -103,37 +109,37 @@ Files in this distribution:
     w156.mtx
 
 ./Source:
-    klu_analyze.c	klu_analyze and supporting functions
-    klu_analyze_given.c	klu_analyze_given and supporting functions
-    klu.c		kernel factor/solve functions, not user-callable
-    klu_defaults.c	klu_defaults function
-    klu_diagnostics.c	klu_rcond, klu_condest, klu_rgrowth, kluflops
-    klu_dump.c		debugging functions
-    klu_extract.c	klu_extract
-    klu_factor.c	klu_factor and supporting functions
-    klu_free_numeric.c	klu_free_numeric function
-    klu_free_symbolic.c	klu_free_symbolic function
-    klu_kernel.c	kernel factor functions, not user-callable
-    klu_memory.c	klu_malloc, klu_free, klu_realloc, and supporing func.
-    klu_refactor.c	klu_refactor function
-    klu_scale.c		klu_scale function
-    klu_solve.c		klu_solve function
-    klu_sort.c		klu_sort and supporting functions
-    klu_tsolve.c	klu_tsovle function
-
-./Tcov:			exhaustive test suite; requires Linux/Unix
-    coverage		determine statement coverage
-    klultests		KLU UF_long tests
-    klutest.c		KLU test program
-    klutests		KLU int tests
-    Makefile		Makefile for compiling and running the tests
-    README.txt		README file for Tcov
-    vklutests		KLU int tests, using valgrind
-    vklultests		KLU UF_long tests, using valgrind
+    klu_analyze.c       klu_analyze and supporting functions
+    klu_analyze_given.c klu_analyze_given and supporting functions
+    klu.c               kernel factor/solve functions, not user-callable
+    klu_defaults.c      klu_defaults function
+    klu_diagnostics.c   klu_rcond, klu_condest, klu_rgrowth, kluflops
+    klu_dump.c          debugging functions
+    klu_extract.c       klu_extract
+    klu_factor.c        klu_factor and supporting functions
+    klu_free_numeric.c  klu_free_numeric function
+    klu_free_symbolic.c klu_free_symbolic function
+    klu_kernel.c        kernel factor functions, not user-callable
+    klu_memory.c        klu_malloc, klu_free, klu_realloc, and supporing func.
+    klu_refactor.c      klu_refactor function
+    klu_scale.c         klu_scale function
+    klu_solve.c         klu_solve function
+    klu_sort.c          klu_sort and supporting functions
+    klu_tsolve.c        klu_tsovle function
+
+./Tcov:                 exhaustive test suite; requires Linux/Unix
+    coverage            determine statement coverage
+    klultests           KLU SuiteSparse_long tests
+    klutest.c           KLU test program
+    klutests            KLU int tests
+    Makefile            Makefile for compiling and running the tests
+    README.txt          README file for Tcov
+    vklutests           KLU int tests, using valgrind
+    vklultests          KLU SuiteSparse_long tests, using valgrind
 
 ./User:
-    klu_cholmod.c	sample KLU user ordering function (int version)
-    klu_cholmod.h	include file for klu_cholmod and klu_l_cholmod
-    klu_l_cholmod.c	sample KLU user ordering function (UF_long version) 
-    Makefile		Makefile for compiling the user ordering functions
-    README.txt		README for User directory
+    klu_cholmod.c       sample KLU user ordering function (int version)
+    klu_cholmod.h       include file for klu_cholmod and klu_l_cholmod
+    klu_l_cholmod.c     sample KLU user ordering function (SuiteSparse_long) 
+    Makefile            Makefile for compiling the user ordering functions
+    README.txt          README for User directory
diff --git a/KLU/Source/klu.c b/KLU/Source/klu.c
index 8b58008..6042fcd 100644
--- a/KLU/Source/klu.c
+++ b/KLU/Source/klu.c
@@ -33,7 +33,7 @@
  * Ai [Ap [j] ... Ap [j+1]-1] and the same range of indices in Ax holds the
  * numerical values.  No duplicate entries are allowed.
  *
- * Copyright 2004-2007, Tim Davis.  All rights reserved.  See the README
+ * Copyright 2004-2009, Tim Davis.  All rights reserved.  See the README
  * file for details on permitted use.  Note that no code from The MathWorks,
  * Inc, or from SuperLU, or from any other source appears here.  The code is
  * written from scratch, from the algorithmic description in Gilbert & Peierls'
@@ -49,46 +49,46 @@
  * permutation.  Q is not modified.
  *
  * [1] Gilbert, J. R. and Peierls, T., "Sparse Partial Pivoting in Time
- *	Proportional to Arithmetic Operations," SIAM J. Sci. Stat. Comp.,
- *	vol 9, pp.  862-874, 1988.
+ *      Proportional to Arithmetic Operations," SIAM J. Sci. Stat. Comp.,
+ *      vol 9, pp.  862-874, 1988.
  * [2] Eisenstat, S. C. and Liu, J. W. H., "Exploiting Structural Symmetry in
- *	Unsymmetric Sparse Symbolic Factorization," SIAM J. Matrix Analysis &
- *	Applic., vol 13, pp.  202-211, 1992.
+ *      Unsymmetric Sparse Symbolic Factorization," SIAM J. Matrix Analysis &
+ *      Applic., vol 13, pp.  202-211, 1992.
  */
 
 /* ========================================================================== */
 
 #include "klu_internal.h"
 
-size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
+size_t KLU_kernel_factor            /* 0 if failure, size of LU if OK */
 (
     /* inputs, not modified */
-    Int n,	    /* A is n-by-n. n must be > 0. */
-    Int Ap [ ],	    /* size n+1, column pointers for A */
-    Int Ai [ ],	    /* size nz = Ap [n], row indices for A */
+    Int n,          /* A is n-by-n. n must be > 0. */
+    Int Ap [ ],     /* size n+1, column pointers for A */
+    Int Ai [ ],     /* size nz = Ap [n], row indices for A */
     Entry Ax [ ],   /* size nz, values of A */
-    Int Q [ ],	    /* size n, optional column permutation */
+    Int Q [ ],      /* size n, optional column permutation */
     double Lsize,   /* estimate of number of nonzeros in L */
 
     /* outputs, not defined on input */
-    Unit **p_LU,	/* row indices and values of L and U */
-    Entry Udiag [ ],	/* size n, diagonal of U */
-    Int Llen [ ],	/* size n, column length of L */
-    Int Ulen [ ],	/* size n, column length of U */
-    Int Lip [ ],	/* size n, column pointers for L */
-    Int Uip [ ],	/* size n, column pointers for U */
-    Int P [ ],		/* row permutation, size n */
-    Int *lnz,		/* size of L */
-    Int *unz,		/* size of U */
+    Unit **p_LU,        /* row indices and values of L and U */
+    Entry Udiag [ ],    /* size n, diagonal of U */
+    Int Llen [ ],       /* size n, column length of L */
+    Int Ulen [ ],       /* size n, column length of U */
+    Int Lip [ ],        /* size n, column pointers for L */
+    Int Uip [ ],        /* size n, column pointers for U */
+    Int P [ ],          /* row permutation, size n */
+    Int *lnz,           /* size of L */
+    Int *unz,           /* size of U */
 
     /* workspace, undefined on input */
-    Entry *X,	    /* size n double's, zero on output */
-    Int *Work,	    /* size 5n Int's */
+    Entry *X,       /* size n double's, zero on output */
+    Int *Work,      /* size 5n Int's */
 
     /* inputs, not modified on output */
-    Int k1,		/* the block of A is from k1 to k2-1 */
-    Int PSinv [ ],  	/* inverse of P from symbolic factorization */
-    double Rs [ ],  	/* scale factors for A */
+    Int k1,             /* the block of A is from k1 to k2-1 */
+    Int PSinv [ ],      /* inverse of P from symbolic factorization */
+    double Rs [ ],      /* scale factors for A */
 
     /* inputs, modified on output */
     Int Offp [ ],   /* off-diagonal matrix (modified by this routine) */
@@ -114,13 +114,13 @@ size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
 
     if (Lsize <= 0)
     {
-	Lsize = -Lsize ;
-	Lsize = MAX (Lsize, 1.0) ;
-	lsize = Lsize * anz + n ;
+        Lsize = -Lsize ;
+        Lsize = MAX (Lsize, 1.0) ;
+        lsize = Lsize * anz + n ;
     }
     else
     {
-	lsize = Lsize ;
+        lsize = Lsize ;
     }
 
     usize = lsize ;
@@ -129,12 +129,12 @@ size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
     usize  = MAX (n+1, usize) ;
 
     maxlnz = (((double) n) * ((double) n) + ((double) n)) / 2. ;
-    maxlnz = MIN (maxlnz, ((double) INT_MAX)) ;
+    maxlnz = MIN (maxlnz, ((double) Int_MAX)) ;
     lsize  = MIN (maxlnz, lsize) ;
     usize  = MIN (maxlnz, usize) ;
 
     PRINTF (("Welcome to klu: n %d anz %d k1 %d lsize %d usize %d maxlnz %g\n",
-	n, anz, k1, lsize, usize, maxlnz)) ;
+        n, anz, k1, lsize, usize, maxlnz)) ;
 
     /* ---------------------------------------------------------------------- */
     /* allocate workspace and outputs */
@@ -145,10 +145,10 @@ size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
 
     /* these computations are safe from size_t overflow */
     W = Work ;
-    Pinv = (Int *) W ;	    W += n ;
-    Stack = (Int *) W ;	    W += n ;
-    Flag = (Int *) W ;	    W += n ;
-    Lpend = (Int *) W ;	    W += n ;
+    Pinv = (Int *) W ;      W += n ;
+    Stack = (Int *) W ;     W += n ;
+    Flag = (Int *) W ;      W += n ;
+    Lpend = (Int *) W ;     W += n ;
     Ap_pos = (Int *) W ;    W += n ;
 
     dunits = DUNITS (Int, lsize) + DUNITS (Entry, lsize) +
@@ -158,10 +158,10 @@ size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
     LU = ok ? KLU_malloc (lusize, sizeof (Unit), Common) : NULL ;
     if (LU == NULL)
     {
-	/* out of memory, or problem too large */
-	Common->status = KLU_OUT_OF_MEMORY ;
-	lusize = 0 ;
-	return (lusize) ;
+        /* out of memory, or problem too large */
+        Common->status = KLU_OUT_OF_MEMORY ;
+        lusize = 0 ;
+        return (lusize) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -170,9 +170,9 @@ size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
 
     /* with pruning, and non-recursive depth-first-search */
     lusize = KLU_kernel (n, Ap, Ai, Ax, Q, lusize,
-	    Pinv, P, &LU, Udiag, Llen, Ulen, Lip, Uip, lnz, unz,
-	    X, Stack, Flag, Ap_pos, Lpend,
-	    k1, PSinv, Rs, Offp, Offi, Offx, Common) ;
+            Pinv, P, &LU, Udiag, Llen, Ulen, Lip, Uip, lnz, unz,
+            X, Stack, Flag, Ap_pos, Lpend,
+            k1, PSinv, Rs, Offp, Offi, Offx, Common) ;
 
     /* ---------------------------------------------------------------------- */
     /* return LU factors, or return nothing if an error occurred */
@@ -180,8 +180,8 @@ size_t KLU_kernel_factor	    /* 0 if failure, size of LU if OK */
 
     if (Common->status < KLU_OK)
     {
-	LU = KLU_free (LU, lusize, sizeof (Unit), Common) ;
-	lusize = 0 ;
+        LU = KLU_free (LU, lusize, sizeof (Unit), Common) ;
+        lusize = 0 ;
     }
     *p_LU = LU ;
     PRINTF ((" in klu noffdiag %d\n", Common->noffdiag)) ;
@@ -218,76 +218,76 @@ void KLU_lsolve
     switch (nrhs)
     {
 
-	case 1:
-	    for (k = 0 ; k < n ; k++)
-	    {
-		x [0] = X [k] ;
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		/* unit diagonal of L is not stored*/
-		for (p = 0 ; p < len ; p++)
-		{
-		    /* X [Li [p]] -= Lx [p] * x [0] ; */
-		    MULT_SUB (X [Li [p]], Lx [p], x [0]) ;
-		}
-	    }
-	    break ;
-
-	case 2:
-
-	    for (k = 0 ; k < n ; k++)
-	    {
-		x [0] = X [2*k    ] ;
-		x [1] = X [2*k + 1] ;
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Li [p] ;
-		    lik = Lx [p] ;
-		    MULT_SUB (X [2*i], lik, x [0]) ;
-		    MULT_SUB (X [2*i + 1], lik, x [1]) ;
-		}
-	    }
-	    break ;
-
-	case 3:
-
-	    for (k = 0 ; k < n ; k++)
-	    {
-		x [0] = X [3*k    ] ;
-		x [1] = X [3*k + 1] ;
-		x [2] = X [3*k + 2] ;
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Li [p] ;
-		    lik = Lx [p] ;
-		    MULT_SUB (X [3*i], lik, x [0]) ;
-		    MULT_SUB (X [3*i + 1], lik, x [1]) ;
-		    MULT_SUB (X [3*i + 2], lik, x [2]) ;
-		}
-	    }
-	    break ;
-
-	case 4:
-
-	    for (k = 0 ; k < n ; k++)
-	    {
-		x [0] = X [4*k    ] ;
-		x [1] = X [4*k + 1] ;
-		x [2] = X [4*k + 2] ;
-		x [3] = X [4*k + 3] ;
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Li [p] ;
-		    lik = Lx [p] ;
-		    MULT_SUB (X [4*i], lik, x [0]) ;
-		    MULT_SUB (X [4*i + 1], lik, x [1]) ;
-		    MULT_SUB (X [4*i + 2], lik, x [2]) ;
-		    MULT_SUB (X [4*i + 3], lik, x [3]) ;
-		}
-	    }
-	    break ;
+        case 1:
+            for (k = 0 ; k < n ; k++)
+            {
+                x [0] = X [k] ;
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                /* unit diagonal of L is not stored*/
+                for (p = 0 ; p < len ; p++)
+                {
+                    /* X [Li [p]] -= Lx [p] * x [0] ; */
+                    MULT_SUB (X [Li [p]], Lx [p], x [0]) ;
+                }
+            }
+            break ;
+
+        case 2:
+
+            for (k = 0 ; k < n ; k++)
+            {
+                x [0] = X [2*k    ] ;
+                x [1] = X [2*k + 1] ;
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Li [p] ;
+                    lik = Lx [p] ;
+                    MULT_SUB (X [2*i], lik, x [0]) ;
+                    MULT_SUB (X [2*i + 1], lik, x [1]) ;
+                }
+            }
+            break ;
+
+        case 3:
+
+            for (k = 0 ; k < n ; k++)
+            {
+                x [0] = X [3*k    ] ;
+                x [1] = X [3*k + 1] ;
+                x [2] = X [3*k + 2] ;
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Li [p] ;
+                    lik = Lx [p] ;
+                    MULT_SUB (X [3*i], lik, x [0]) ;
+                    MULT_SUB (X [3*i + 1], lik, x [1]) ;
+                    MULT_SUB (X [3*i + 2], lik, x [2]) ;
+                }
+            }
+            break ;
+
+        case 4:
+
+            for (k = 0 ; k < n ; k++)
+            {
+                x [0] = X [4*k    ] ;
+                x [1] = X [4*k + 1] ;
+                x [2] = X [4*k + 2] ;
+                x [3] = X [4*k + 3] ;
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Li [p] ;
+                    lik = Lx [p] ;
+                    MULT_SUB (X [4*i], lik, x [0]) ;
+                    MULT_SUB (X [4*i + 1], lik, x [1]) ;
+                    MULT_SUB (X [4*i + 2], lik, x [2]) ;
+                    MULT_SUB (X [4*i + 3], lik, x [3]) ;
+                }
+            }
+            break ;
 
     }
 }
@@ -322,105 +322,105 @@ void KLU_usolve
     switch (nrhs)
     {
 
-	case 1:
-
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		/* x [0] = X [k] / Udiag [k] ; */
-		DIV (x [0], X [k], Udiag [k]) ;
-		X [k] = x [0] ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    /* X [Ui [p]] -= Ux [p] * x [0] ; */
-		    MULT_SUB (X [Ui [p]], Ux [p], x [0]) ;
-
-		}
-	    }
-
-	    break ;
-
-	case 2:
-
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		ukk = Udiag [k] ;
-		/* x [0] = X [2*k    ] / ukk ;
-		x [1] = X [2*k + 1] / ukk ; */
-		DIV (x [0], X [2*k], ukk) ;
-		DIV (x [1], X [2*k + 1], ukk) ;
-
-		X [2*k    ] = x [0] ;
-		X [2*k + 1] = x [1] ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Ui [p] ;
-		    uik = Ux [p] ;
-		    /* X [2*i    ] -= uik * x [0] ;
-		    X [2*i + 1] -= uik * x [1] ; */
-		    MULT_SUB (X [2*i], uik, x [0]) ;
-		    MULT_SUB (X [2*i + 1], uik, x [1]) ;
-		}
-	    }
-
-	    break ;
-
-	case 3:
-
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		ukk = Udiag [k] ;
-
-		DIV (x [0], X [3*k], ukk) ;
-		DIV (x [1], X [3*k + 1], ukk) ;
-		DIV (x [2], X [3*k + 2], ukk) ;
-
-		X [3*k    ] = x [0] ;
-		X [3*k + 1] = x [1] ;
-		X [3*k + 2] = x [2] ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Ui [p] ;
-		    uik = Ux [p] ;
-		    MULT_SUB (X [3*i], uik, x [0]) ;
-		    MULT_SUB (X [3*i + 1], uik, x [1]) ;
-		    MULT_SUB (X [3*i + 2], uik, x [2]) ;
-		}
-	    }
-
-	    break ;
-
-	case 4:
-
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		ukk = Udiag [k] ;
-
-		DIV (x [0], X [4*k], ukk) ;
-		DIV (x [1], X [4*k + 1], ukk) ;
-		DIV (x [2], X [4*k + 2], ukk) ;
-		DIV (x [3], X [4*k + 3], ukk) ;
-
-		X [4*k    ] = x [0] ;
-		X [4*k + 1] = x [1] ;
-		X [4*k + 2] = x [2] ;
-		X [4*k + 3] = x [3] ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Ui [p] ;
-		    uik = Ux [p] ;
-
-		    MULT_SUB (X [4*i], uik, x [0]) ;
-		    MULT_SUB (X [4*i + 1], uik, x [1]) ;
-		    MULT_SUB (X [4*i + 2], uik, x [2]) ;
-		    MULT_SUB (X [4*i + 3], uik, x [3]) ;
-		}
-	    }
-
-	    break ;
+        case 1:
+
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                /* x [0] = X [k] / Udiag [k] ; */
+                DIV (x [0], X [k], Udiag [k]) ;
+                X [k] = x [0] ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    /* X [Ui [p]] -= Ux [p] * x [0] ; */
+                    MULT_SUB (X [Ui [p]], Ux [p], x [0]) ;
+
+                }
+            }
+
+            break ;
+
+        case 2:
+
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                ukk = Udiag [k] ;
+                /* x [0] = X [2*k    ] / ukk ;
+                x [1] = X [2*k + 1] / ukk ; */
+                DIV (x [0], X [2*k], ukk) ;
+                DIV (x [1], X [2*k + 1], ukk) ;
+
+                X [2*k    ] = x [0] ;
+                X [2*k + 1] = x [1] ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Ui [p] ;
+                    uik = Ux [p] ;
+                    /* X [2*i    ] -= uik * x [0] ;
+                    X [2*i + 1] -= uik * x [1] ; */
+                    MULT_SUB (X [2*i], uik, x [0]) ;
+                    MULT_SUB (X [2*i + 1], uik, x [1]) ;
+                }
+            }
+
+            break ;
+
+        case 3:
+
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                ukk = Udiag [k] ;
+
+                DIV (x [0], X [3*k], ukk) ;
+                DIV (x [1], X [3*k + 1], ukk) ;
+                DIV (x [2], X [3*k + 2], ukk) ;
+
+                X [3*k    ] = x [0] ;
+                X [3*k + 1] = x [1] ;
+                X [3*k + 2] = x [2] ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Ui [p] ;
+                    uik = Ux [p] ;
+                    MULT_SUB (X [3*i], uik, x [0]) ;
+                    MULT_SUB (X [3*i + 1], uik, x [1]) ;
+                    MULT_SUB (X [3*i + 2], uik, x [2]) ;
+                }
+            }
+
+            break ;
+
+        case 4:
+
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                ukk = Udiag [k] ;
+
+                DIV (x [0], X [4*k], ukk) ;
+                DIV (x [1], X [4*k + 1], ukk) ;
+                DIV (x [2], X [4*k + 2], ukk) ;
+                DIV (x [3], X [4*k + 3], ukk) ;
+
+                X [4*k    ] = x [0] ;
+                X [4*k + 1] = x [1] ;
+                X [4*k + 2] = x [2] ;
+                X [4*k + 3] = x [3] ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Ui [p] ;
+                    uik = Ux [p] ;
+
+                    MULT_SUB (X [4*i], uik, x [0]) ;
+                    MULT_SUB (X [4*i + 1], uik, x [1]) ;
+                    MULT_SUB (X [4*i + 2], uik, x [2]) ;
+                    MULT_SUB (X [4*i + 3], uik, x [3]) ;
+                }
+            }
+
+            break ;
 
     }
 }
@@ -458,123 +458,123 @@ void KLU_ltsolve
     switch (nrhs)
     {
 
-	case 1:
+        case 1:
 
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		x [0] = X [k] ;
-		for (p = 0 ; p < len ; p++)
-		{
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                x [0] = X [k] ;
+                for (p = 0 ; p < len ; p++)
+                {
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			/* x [0] -= CONJ (Lx [p]) * X [Li [p]] ; */
-			MULT_SUB_CONJ (x [0], X [Li [p]], Lx [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        /* x [0] -= CONJ (Lx [p]) * X [Li [p]] ; */
+                        MULT_SUB_CONJ (x [0], X [Li [p]], Lx [p]) ;
+                    }
+                    else
 #endif
-		    {
-			/*x [0] -= Lx [p] * X [Li [p]] ;*/
-			MULT_SUB (x [0], Lx [p], X [Li [p]]) ;
-		    }
-		}
-		X [k] = x [0] ;
-	    }
-	    break ;
-
-	case 2:
-
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		x [0] = X [2*k    ] ;
-		x [1] = X [2*k + 1] ;
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Li [p] ;
+                    {
+                        /*x [0] -= Lx [p] * X [Li [p]] ;*/
+                        MULT_SUB (x [0], Lx [p], X [Li [p]]) ;
+                    }
+                }
+                X [k] = x [0] ;
+            }
+            break ;
+
+        case 2:
+
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                x [0] = X [2*k    ] ;
+                x [1] = X [2*k + 1] ;
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Li [p] ;
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			CONJ (lik, Lx [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        CONJ (lik, Lx [p]) ;
+                    }
+                    else
 #endif
-		    {
-			lik = Lx [p] ;
-		    }
-		    MULT_SUB (x [0], lik, X [2*i]) ;
-		    MULT_SUB (x [1], lik, X [2*i + 1]) ;
-		}
-		X [2*k    ] = x [0] ;
-		X [2*k + 1] = x [1] ;
-	    }
-	    break ;
-
-	case 3:
-
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		x [0] = X [3*k    ] ;
-		x [1] = X [3*k + 1] ;
-		x [2] = X [3*k + 2] ;
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Li [p] ;
+                    {
+                        lik = Lx [p] ;
+                    }
+                    MULT_SUB (x [0], lik, X [2*i]) ;
+                    MULT_SUB (x [1], lik, X [2*i + 1]) ;
+                }
+                X [2*k    ] = x [0] ;
+                X [2*k + 1] = x [1] ;
+            }
+            break ;
+
+        case 3:
+
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                x [0] = X [3*k    ] ;
+                x [1] = X [3*k + 1] ;
+                x [2] = X [3*k + 2] ;
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Li [p] ;
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			CONJ (lik, Lx [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        CONJ (lik, Lx [p]) ;
+                    }
+                    else
 #endif
-		    {
-			lik = Lx [p] ;
-		    }
-		    MULT_SUB (x [0], lik, X [3*i]) ;
-		    MULT_SUB (x [1], lik, X [3*i + 1]) ;
-		    MULT_SUB (x [2], lik, X [3*i + 2]) ;
-		}
-		X [3*k    ] = x [0] ;
-		X [3*k + 1] = x [1] ;
-		X [3*k + 2] = x [2] ;
-	    }
-	    break ;
-
-	case 4:
-
-	    for (k = n-1 ; k >= 0 ; k--)
-	    {
-		x [0] = X [4*k    ] ;
-		x [1] = X [4*k + 1] ;
-		x [2] = X [4*k + 2] ;
-		x [3] = X [4*k + 3] ;
-		GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Li [p] ;
+                    {
+                        lik = Lx [p] ;
+                    }
+                    MULT_SUB (x [0], lik, X [3*i]) ;
+                    MULT_SUB (x [1], lik, X [3*i + 1]) ;
+                    MULT_SUB (x [2], lik, X [3*i + 2]) ;
+                }
+                X [3*k    ] = x [0] ;
+                X [3*k + 1] = x [1] ;
+                X [3*k + 2] = x [2] ;
+            }
+            break ;
+
+        case 4:
+
+            for (k = n-1 ; k >= 0 ; k--)
+            {
+                x [0] = X [4*k    ] ;
+                x [1] = X [4*k + 1] ;
+                x [2] = X [4*k + 2] ;
+                x [3] = X [4*k + 3] ;
+                GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Li [p] ;
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			CONJ (lik, Lx [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        CONJ (lik, Lx [p]) ;
+                    }
+                    else
 #endif
-		    {
-			lik = Lx [p] ;
-		    }
-		    MULT_SUB (x [0], lik, X [4*i]) ;
-		    MULT_SUB (x [1], lik, X [4*i + 1]) ;
-		    MULT_SUB (x [2], lik, X [4*i + 2]) ;
-		    MULT_SUB (x [3], lik, X [4*i + 3]) ;
-		}
-		X [4*k    ] = x [0] ;
-		X [4*k + 1] = x [1] ;
-		X [4*k + 2] = x [2] ;
-		X [4*k + 3] = x [3] ;
-	    }
-	    break ;
+                    {
+                        lik = Lx [p] ;
+                    }
+                    MULT_SUB (x [0], lik, X [4*i]) ;
+                    MULT_SUB (x [1], lik, X [4*i + 1]) ;
+                    MULT_SUB (x [2], lik, X [4*i + 2]) ;
+                    MULT_SUB (x [3], lik, X [4*i + 3]) ;
+                }
+                X [4*k    ] = x [0] ;
+                X [4*k + 1] = x [1] ;
+                X [4*k + 2] = x [2] ;
+                X [4*k + 3] = x [3] ;
+            }
+            break ;
     }
 }
 
@@ -612,162 +612,162 @@ void KLU_utsolve
     switch (nrhs)
     {
 
-	case 1:
+        case 1:
 
-	    for (k = 0 ; k < n ; k++)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		x [0] = X [k] ;
-		for (p = 0 ; p < len ; p++)
-		{
+            for (k = 0 ; k < n ; k++)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                x [0] = X [k] ;
+                for (p = 0 ; p < len ; p++)
+                {
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			/* x [0] -= CONJ (Ux [p]) * X [Ui [p]] ; */
-			MULT_SUB_CONJ (x [0], X [Ui [p]], Ux [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        /* x [0] -= CONJ (Ux [p]) * X [Ui [p]] ; */
+                        MULT_SUB_CONJ (x [0], X [Ui [p]], Ux [p]) ;
+                    }
+                    else
 #endif
-		    {
-			/* x [0] -= Ux [p] * X [Ui [p]] ; */
-			MULT_SUB (x [0], Ux [p], X [Ui [p]]) ;
-		    }
-		}
+                    {
+                        /* x [0] -= Ux [p] * X [Ui [p]] ; */
+                        MULT_SUB (x [0], Ux [p], X [Ui [p]]) ;
+                    }
+                }
 #ifdef COMPLEX
-		if (conj_solve)
-		{
-		    CONJ (ukk, Udiag [k]) ;
-		}
-		else
+                if (conj_solve)
+                {
+                    CONJ (ukk, Udiag [k]) ;
+                }
+                else
 #endif
-		{
-		    ukk = Udiag [k] ;
-		}
-		DIV (X [k], x [0], ukk) ;
-	    }
-	    break ;
-
-	case 2:
-
-	    for (k = 0 ; k < n ; k++)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		x [0] = X [2*k    ] ;
-		x [1] = X [2*k + 1] ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Ui [p] ;
+                {
+                    ukk = Udiag [k] ;
+                }
+                DIV (X [k], x [0], ukk) ;
+            }
+            break ;
+
+        case 2:
+
+            for (k = 0 ; k < n ; k++)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                x [0] = X [2*k    ] ;
+                x [1] = X [2*k + 1] ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Ui [p] ;
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			CONJ (uik, Ux [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        CONJ (uik, Ux [p]) ;
+                    }
+                    else
 #endif
-		    {
-			uik = Ux [p] ;
-		    }
-		    MULT_SUB (x [0], uik, X [2*i]) ;
-		    MULT_SUB (x [1], uik, X [2*i + 1]) ;
-		}
+                    {
+                        uik = Ux [p] ;
+                    }
+                    MULT_SUB (x [0], uik, X [2*i]) ;
+                    MULT_SUB (x [1], uik, X [2*i + 1]) ;
+                }
 #ifdef COMPLEX
-		if (conj_solve)
-		{
-		    CONJ (ukk, Udiag [k]) ;
-		}
-		else
+                if (conj_solve)
+                {
+                    CONJ (ukk, Udiag [k]) ;
+                }
+                else
 #endif
-		{
-		    ukk = Udiag [k] ;
-		}
-		DIV (X [2*k], x [0], ukk) ;
-		DIV (X [2*k + 1], x [1], ukk) ;
-	    }
-	    break ;
-
-	case 3:
-
-	    for (k = 0 ; k < n ; k++)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		x [0] = X [3*k    ] ;
-		x [1] = X [3*k + 1] ;
-		x [2] = X [3*k + 2] ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Ui [p] ;
+                {
+                    ukk = Udiag [k] ;
+                }
+                DIV (X [2*k], x [0], ukk) ;
+                DIV (X [2*k + 1], x [1], ukk) ;
+            }
+            break ;
+
+        case 3:
+
+            for (k = 0 ; k < n ; k++)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                x [0] = X [3*k    ] ;
+                x [1] = X [3*k + 1] ;
+                x [2] = X [3*k + 2] ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Ui [p] ;
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			CONJ (uik, Ux [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        CONJ (uik, Ux [p]) ;
+                    }
+                    else
 #endif
-		    {
-			uik = Ux [p] ;
-		    }
-		    MULT_SUB (x [0], uik, X [3*i]) ;
-		    MULT_SUB (x [1], uik, X [3*i + 1]) ;
-		    MULT_SUB (x [2], uik, X [3*i + 2]) ;
-		}
+                    {
+                        uik = Ux [p] ;
+                    }
+                    MULT_SUB (x [0], uik, X [3*i]) ;
+                    MULT_SUB (x [1], uik, X [3*i + 1]) ;
+                    MULT_SUB (x [2], uik, X [3*i + 2]) ;
+                }
 #ifdef COMPLEX
-		if (conj_solve)
-		{
-		    CONJ (ukk, Udiag [k]) ;
-		}
-		else
+                if (conj_solve)
+                {
+                    CONJ (ukk, Udiag [k]) ;
+                }
+                else
 #endif
-		{
-		    ukk = Udiag [k] ;
-		}
-		DIV (X [3*k], x [0], ukk) ;
-		DIV (X [3*k + 1], x [1], ukk) ;
-		DIV (X [3*k + 2], x [2], ukk) ;
-	    }
-	    break ;
-
-	case 4:
-
-	    for (k = 0 ; k < n ; k++)
-	    {
-		GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-		x [0] = X [4*k    ] ;
-		x [1] = X [4*k + 1] ;
-		x [2] = X [4*k + 2] ;
-		x [3] = X [4*k + 3] ;
-		for (p = 0 ; p < len ; p++)
-		{
-		    i = Ui [p] ;
+                {
+                    ukk = Udiag [k] ;
+                }
+                DIV (X [3*k], x [0], ukk) ;
+                DIV (X [3*k + 1], x [1], ukk) ;
+                DIV (X [3*k + 2], x [2], ukk) ;
+            }
+            break ;
+
+        case 4:
+
+            for (k = 0 ; k < n ; k++)
+            {
+                GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+                x [0] = X [4*k    ] ;
+                x [1] = X [4*k + 1] ;
+                x [2] = X [4*k + 2] ;
+                x [3] = X [4*k + 3] ;
+                for (p = 0 ; p < len ; p++)
+                {
+                    i = Ui [p] ;
 #ifdef COMPLEX
-		    if (conj_solve)
-		    {
-			CONJ (uik, Ux [p]) ;
-		    }
-		    else
+                    if (conj_solve)
+                    {
+                        CONJ (uik, Ux [p]) ;
+                    }
+                    else
 #endif
-		    {
-			uik = Ux [p] ;
-		    }
-		    MULT_SUB (x [0], uik, X [4*i]) ;
-		    MULT_SUB (x [1], uik, X [4*i + 1]) ;
-		    MULT_SUB (x [2], uik, X [4*i + 2]) ;
-		    MULT_SUB (x [3], uik, X [4*i + 3]) ;
-		}
+                    {
+                        uik = Ux [p] ;
+                    }
+                    MULT_SUB (x [0], uik, X [4*i]) ;
+                    MULT_SUB (x [1], uik, X [4*i + 1]) ;
+                    MULT_SUB (x [2], uik, X [4*i + 2]) ;
+                    MULT_SUB (x [3], uik, X [4*i + 3]) ;
+                }
 #ifdef COMPLEX
-		if (conj_solve)
-		{
-		    CONJ (ukk, Udiag [k]) ;
-		}
-		else
+                if (conj_solve)
+                {
+                    CONJ (ukk, Udiag [k]) ;
+                }
+                else
 #endif
-		{
-		    ukk = Udiag [k] ;
-		}
-		DIV (X [4*k], x [0], ukk) ;
-		DIV (X [4*k + 1], x [1], ukk) ;
-		DIV (X [4*k + 2], x [2], ukk) ;
-		DIV (X [4*k + 3], x [3], ukk) ;
-	    }
-	    break ;
+                {
+                    ukk = Udiag [k] ;
+                }
+                DIV (X [4*k], x [0], ukk) ;
+                DIV (X [4*k + 1], x [1], ukk) ;
+                DIV (X [4*k + 2], x [2], ukk) ;
+                DIV (X [4*k + 3], x [3], ukk) ;
+            }
+            break ;
     }
 }
diff --git a/KLU/Source/klu_analyze.c b/KLU/Source/klu_analyze.c
index ecc715b..2fe81c1 100644
--- a/KLU/Source/klu_analyze.c
+++ b/KLU/Source/klu_analyze.c
@@ -12,29 +12,29 @@
 /* === analyze_worker ======================================================= */
 /* ========================================================================== */
 
-static Int analyze_worker	/* returns KLU_OK or < 0 if error */
+static Int analyze_worker       /* returns KLU_OK or < 0 if error */
 (
     /* inputs, not modified */
-    Int n,		/* A is n-by-n */
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
-    Int nblocks,	/* # of blocks */
-    Int Pbtf [ ],	/* BTF row permutation */
-    Int Qbtf [ ],	/* BTF col permutation */
-    Int R [ ],		/* size n+1, but only Rbtf [0..nblocks] is used */
-    Int ordering,	/* what ordering to use (0, 1, or 3 for this routine) */
+    Int n,              /* A is n-by-n */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
+    Int nblocks,        /* # of blocks */
+    Int Pbtf [ ],       /* BTF row permutation */
+    Int Qbtf [ ],       /* BTF col permutation */
+    Int R [ ],          /* size n+1, but only Rbtf [0..nblocks] is used */
+    Int ordering,       /* what ordering to use (0, 1, or 3 for this routine) */
 
     /* output only, not defined on input */
-    Int P [ ],		/* size n */
-    Int Q [ ],		/* size n */
-    double Lnz [ ],	/* size n, but only Lnz [0..nblocks-1] is used */
+    Int P [ ],          /* size n */
+    Int Q [ ],          /* size n */
+    double Lnz [ ],     /* size n, but only Lnz [0..nblocks-1] is used */
 
     /* workspace, not defined on input or output */
-    Int Pblk [ ],	/* size maxblock */
-    Int Cp [ ],		/* size maxblock+1 */
-    Int Ci [ ],		/* size MAX (nz+1, Cilen) */
-    Int Cilen,		/* nz+1, or COLAMD_recommend(nz,n,n) for COLAMD */
-    Int Pinv [ ],	/* size maxblock */
+    Int Pblk [ ],       /* size maxblock */
+    Int Cp [ ],         /* size maxblock+1 */
+    Int Ci [ ],         /* size MAX (nz+1, Cilen) */
+    Int Cilen,          /* nz+1, or COLAMD_recommend(nz,n,n) for COLAMD */
+    Int Pinv [ ],       /* size maxblock */
 
     /* input/output */
     KLU_symbolic *Symbolic,
@@ -43,7 +43,7 @@ static Int analyze_worker	/* returns KLU_OK or < 0 if error */
 {
     double amd_Info [AMD_INFO], lnz, lnz1, flops, flops1 ;
     Int k1, k2, nk, k, block, oldcol, pend, newcol, result, pc, p, newrow,
-	maxnz, nzoff, cstats [COLAMD_STATS], ok, err = KLU_INVALID ;
+        maxnz, nzoff, cstats [COLAMD_STATS], ok, err = KLU_INVALID ;
 
     /* ---------------------------------------------------------------------- */
     /* initializations */
@@ -53,15 +53,15 @@ static Int analyze_worker	/* returns KLU_OK or < 0 if error */
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++)
     {
-	P [k] = EMPTY ;
-	Q [k] = EMPTY ;
-	Pinv [k] = EMPTY ;
+        P [k] = EMPTY ;
+        Q [k] = EMPTY ;
+        Pinv [k] = EMPTY ;
     }
 #endif
     for (k = 0 ; k < n ; k++)
     {
-	ASSERT (Pbtf [k] >= 0 && Pbtf [k] < n) ;
-	Pinv [Pbtf [k]] = k ;
+        ASSERT (Pbtf [k] >= 0 && Pbtf [k] < n) ;
+        Pinv [Pbtf [k]] = k ;
     }
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++) ASSERT (Pinv [k] != EMPTY) ;
@@ -70,7 +70,7 @@ static Int analyze_worker	/* returns KLU_OK or < 0 if error */
     lnz = 0 ;
     maxnz = 0 ;
     flops = 0 ;
-    Symbolic->symmetry = EMPTY ;	/* only computed by AMD */
+    Symbolic->symmetry = EMPTY ;        /* only computed by AMD */
 
     /* ---------------------------------------------------------------------- */
     /* order each block */
@@ -79,166 +79,166 @@ static Int analyze_worker	/* returns KLU_OK or < 0 if error */
     for (block = 0 ; block < nblocks ; block++)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* the block is from rows/columns k1 to k2-1 */
-	/* ------------------------------------------------------------------ */
-
-	k1 = R [block] ;
-	k2 = R [block+1] ;
-	nk = k2 - k1 ;
-	PRINTF (("BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1, k2-1, nk)) ;
-
-	/* ------------------------------------------------------------------ */
-	/* construct the kth block, C */
-	/* ------------------------------------------------------------------ */
-
-	Lnz [block] = EMPTY ;
-	pc = 0 ;
-	for (k = k1 ; k < k2 ; k++)
-	{
-	    newcol = k-k1 ;
-	    Cp [newcol] = pc ;
-	    oldcol = Qbtf [k] ;
-	    pend = Ap [oldcol+1] ;
-	    for (p = Ap [oldcol] ; p < pend ; p++)
-	    {
-		newrow = Pinv [Ai [p]] ;
-		if (newrow < k1)
-		{
-		    nzoff++ ;
-		}
-		else
-		{
-		    /* (newrow,newcol) is an entry in the block */
-		    ASSERT (newrow < k2) ;
-		    newrow -= k1 ;
-		    Ci [pc++] = newrow ;
-		}
-	    }
-	}
-	Cp [nk] = pc ;
-	maxnz = MAX (maxnz, pc) ;
-	ASSERT (KLU_valid (nk, Cp, Ci, NULL)) ;
-
-	/* ------------------------------------------------------------------ */
-	/* order the block C */
-	/* ------------------------------------------------------------------ */
-
-	if (nk <= 3)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* use natural ordering for tiny blocks (3-by-3 or less) */
-	    /* -------------------------------------------------------------- */
-
-	    for (k = 0 ; k < nk ; k++)
-	    {
-		Pblk [k] = k ;
-	    }
-	    lnz1 = nk * (nk + 1) / 2 ;
-	    flops1 = nk * (nk - 1) / 2 + (nk-1)*nk*(2*nk-1) / 6 ;
-	    ok = TRUE ;
-
-	}
-	else if (ordering == 0)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* order the block with AMD (C+C') */
-	    /* -------------------------------------------------------------- */
-
-	    result = AMD_order (nk, Cp, Ci, Pblk, NULL, amd_Info) ;
-	    ok = (result >= AMD_OK) ;
-	    if (result == AMD_OUT_OF_MEMORY)
-	    {
-		err = KLU_OUT_OF_MEMORY ;
-	    }
-
-	    /* account for memory usage in AMD */
-	    Common->mempeak = MAX (Common->mempeak,
-		Common->memusage + amd_Info [AMD_MEMORY]) ;
-
-	    /* get the ordering statistics from AMD */
-	    lnz1 = (Int) (amd_Info [AMD_LNZ]) + nk ;
-	    flops1 = 2 * amd_Info [AMD_NMULTSUBS_LU] + amd_Info [AMD_NDIV] ;
-	    if (pc == maxnz)
-	    {
-		/* get the symmetry of the biggest block */
-		Symbolic->symmetry = amd_Info [AMD_SYMMETRY] ;
-	    }
-
-	}
-	else if (ordering == 1)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* order the block with COLAMD (C) */
-	    /* -------------------------------------------------------------- */
-
-	    /* order (and destroy) Ci, returning column permutation in Cp.
-	     * COLAMD "cannot" fail since the matrix has already been checked,
-	     * and Ci allocated. */
-
-	    ok = COLAMD (nk, nk, Cilen, Ci, Cp, NULL, cstats) ;
-	    lnz1 = EMPTY ;
-	    flops1 = EMPTY ;
-
-	    /* copy the permutation from Cp to Pblk */
-	    for (k = 0 ; k < nk ; k++)
-	    {
-		Pblk [k] = Cp [k] ;
-	    }
-
-	}
-	else
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* pass the block to the user-provided ordering function */
-	    /* -------------------------------------------------------------- */
-
-	    lnz1 = (Common->user_order) (nk, Cp, Ci, Pblk, Common) ;
-	    flops1 = EMPTY ;
-	    ok = (lnz1 != 0) ;
-	}
-
-	if (!ok)
-	{
-	    return (err) ;  /* ordering method failed */
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* keep track of nnz(L) and flops statistics */
-	/* ------------------------------------------------------------------ */
-
-	Lnz [block] = lnz1 ;
-	lnz = (lnz == EMPTY || lnz1 == EMPTY) ? EMPTY : (lnz + lnz1) ;
-	flops = (flops == EMPTY || flops1 == EMPTY) ? EMPTY : (flops + flops1) ;
-
-	/* ------------------------------------------------------------------ */
-	/* combine the preordering with the BTF ordering */
-	/* ------------------------------------------------------------------ */
-
-	PRINTF (("Pblk, 1-based:\n")) ;
-	for (k = 0 ; k < nk ; k++)
-	{
-	    ASSERT (k + k1 < n) ;
-	    ASSERT (Pblk [k] + k1 < n) ;
-	    Q [k + k1] = Qbtf [Pblk [k] + k1] ;
-	}
-	for (k = 0 ; k < nk ; k++)
-	{
-	    ASSERT (k + k1 < n) ;
-	    ASSERT (Pblk [k] + k1 < n) ;
-	    P [k + k1] = Pbtf [Pblk [k] + k1] ;
-	}
+        /* ------------------------------------------------------------------ */
+        /* the block is from rows/columns k1 to k2-1 */
+        /* ------------------------------------------------------------------ */
+
+        k1 = R [block] ;
+        k2 = R [block+1] ;
+        nk = k2 - k1 ;
+        PRINTF (("BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1, k2-1, nk)) ;
+
+        /* ------------------------------------------------------------------ */
+        /* construct the kth block, C */
+        /* ------------------------------------------------------------------ */
+
+        Lnz [block] = EMPTY ;
+        pc = 0 ;
+        for (k = k1 ; k < k2 ; k++)
+        {
+            newcol = k-k1 ;
+            Cp [newcol] = pc ;
+            oldcol = Qbtf [k] ;
+            pend = Ap [oldcol+1] ;
+            for (p = Ap [oldcol] ; p < pend ; p++)
+            {
+                newrow = Pinv [Ai [p]] ;
+                if (newrow < k1)
+                {
+                    nzoff++ ;
+                }
+                else
+                {
+                    /* (newrow,newcol) is an entry in the block */
+                    ASSERT (newrow < k2) ;
+                    newrow -= k1 ;
+                    Ci [pc++] = newrow ;
+                }
+            }
+        }
+        Cp [nk] = pc ;
+        maxnz = MAX (maxnz, pc) ;
+        ASSERT (KLU_valid (nk, Cp, Ci, NULL)) ;
+
+        /* ------------------------------------------------------------------ */
+        /* order the block C */
+        /* ------------------------------------------------------------------ */
+
+        if (nk <= 3)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* use natural ordering for tiny blocks (3-by-3 or less) */
+            /* -------------------------------------------------------------- */
+
+            for (k = 0 ; k < nk ; k++)
+            {
+                Pblk [k] = k ;
+            }
+            lnz1 = nk * (nk + 1) / 2 ;
+            flops1 = nk * (nk - 1) / 2 + (nk-1)*nk*(2*nk-1) / 6 ;
+            ok = TRUE ;
+
+        }
+        else if (ordering == 0)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* order the block with AMD (C+C') */
+            /* -------------------------------------------------------------- */
+
+            result = AMD_order (nk, Cp, Ci, Pblk, NULL, amd_Info) ;
+            ok = (result >= AMD_OK) ;
+            if (result == AMD_OUT_OF_MEMORY)
+            {
+                err = KLU_OUT_OF_MEMORY ;
+            }
+
+            /* account for memory usage in AMD */
+            Common->mempeak = MAX (Common->mempeak,
+                Common->memusage + amd_Info [AMD_MEMORY]) ;
+
+            /* get the ordering statistics from AMD */
+            lnz1 = (Int) (amd_Info [AMD_LNZ]) + nk ;
+            flops1 = 2 * amd_Info [AMD_NMULTSUBS_LU] + amd_Info [AMD_NDIV] ;
+            if (pc == maxnz)
+            {
+                /* get the symmetry of the biggest block */
+                Symbolic->symmetry = amd_Info [AMD_SYMMETRY] ;
+            }
+
+        }
+        else if (ordering == 1)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* order the block with COLAMD (C) */
+            /* -------------------------------------------------------------- */
+
+            /* order (and destroy) Ci, returning column permutation in Cp.
+             * COLAMD "cannot" fail since the matrix has already been checked,
+             * and Ci allocated. */
+
+            ok = COLAMD (nk, nk, Cilen, Ci, Cp, NULL, cstats) ;
+            lnz1 = EMPTY ;
+            flops1 = EMPTY ;
+
+            /* copy the permutation from Cp to Pblk */
+            for (k = 0 ; k < nk ; k++)
+            {
+                Pblk [k] = Cp [k] ;
+            }
+
+        }
+        else
+        {
+
+            /* -------------------------------------------------------------- */
+            /* pass the block to the user-provided ordering function */
+            /* -------------------------------------------------------------- */
+
+            lnz1 = (Common->user_order) (nk, Cp, Ci, Pblk, Common) ;
+            flops1 = EMPTY ;
+            ok = (lnz1 != 0) ;
+        }
+
+        if (!ok)
+        {
+            return (err) ;  /* ordering method failed */
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* keep track of nnz(L) and flops statistics */
+        /* ------------------------------------------------------------------ */
+
+        Lnz [block] = lnz1 ;
+        lnz = (lnz == EMPTY || lnz1 == EMPTY) ? EMPTY : (lnz + lnz1) ;
+        flops = (flops == EMPTY || flops1 == EMPTY) ? EMPTY : (flops + flops1) ;
+
+        /* ------------------------------------------------------------------ */
+        /* combine the preordering with the BTF ordering */
+        /* ------------------------------------------------------------------ */
+
+        PRINTF (("Pblk, 1-based:\n")) ;
+        for (k = 0 ; k < nk ; k++)
+        {
+            ASSERT (k + k1 < n) ;
+            ASSERT (Pblk [k] + k1 < n) ;
+            Q [k + k1] = Qbtf [Pblk [k] + k1] ;
+        }
+        for (k = 0 ; k < nk ; k++)
+        {
+            ASSERT (k + k1 < n) ;
+            ASSERT (Pblk [k] + k1 < n) ;
+            P [k + k1] = Pbtf [Pblk [k] + k1] ;
+        }
     }
 
     PRINTF (("nzoff %d  Ap[n] %d\n", nzoff, Ap [n])) ;
     ASSERT (nzoff >= 0 && nzoff <= Ap [n]) ;
 
     /* return estimates of # of nonzeros in L including diagonal */
-    Symbolic->lnz = lnz ;	    /* EMPTY if COLAMD used */
+    Symbolic->lnz = lnz ;           /* EMPTY if COLAMD used */
     Symbolic->unz = lnz ;
     Symbolic->nzoff = nzoff ;
     Symbolic->est_flops = flops ;   /* EMPTY if COLAMD or user-ordering used */
@@ -254,13 +254,13 @@ static Int analyze_worker	/* returns KLU_OK or < 0 if error */
  * or the user ordering function.  Does not handle the natural or given
  * ordering cases. */
 
-static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
-					   KLU_symbolic object if successful */
+static KLU_symbolic *order_and_analyze  /* returns NULL if error, or a valid
+                                           KLU_symbolic object if successful */
 (
     /* inputs, not modified */
-    Int n,		/* A is n-by-n */
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
+    Int n,              /* A is n-by-n */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
     /* --------------------- */
     KLU_common *Common
 )
@@ -270,7 +270,7 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
     double *Lnz ;
     Int *Qbtf, *Cp, *Ci, *Pinv, *Pblk, *Pbtf, *P, *Q, *R ;
     Int nblocks, nz, block, maxblock, k1, k2, nk, do_btf, ordering, k, Cilen,
-	*Work ;
+        *Work ;
 
     /* ---------------------------------------------------------------------- */
     /* allocate the Symbolic object, and check input matrix */
@@ -279,7 +279,7 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
     Symbolic = KLU_alloc_symbolic (n, Ap, Ai, Common) ;
     if (Symbolic == NULL)
     {
-	return (NULL) ;
+        return (NULL) ;
     }
     P = Symbolic->P ;
     Q = Symbolic->Q ;
@@ -290,28 +290,22 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
     ordering = Common->ordering ;
     if (ordering == 1)
     {
-	/* COLAMD */
-	Cilen = COLAMD_recommended (nz, n, n) ;
+        /* COLAMD */
+        Cilen = COLAMD_recommended (nz, n, n) ;
     }
     else if (ordering == 0 || (ordering == 3 && Common->user_order != NULL))
     {
-	/* AMD or user ordering function */
-	Cilen = nz+1 ;
+        /* AMD or user ordering function */
+        Cilen = nz+1 ;
     }
     else
     {
-	/* invalid ordering */
-	Common->status = KLU_INVALID ;
-	KLU_free_symbolic (&Symbolic, Common) ;
-	return (NULL) ;
+        /* invalid ordering */
+        Common->status = KLU_INVALID ;
+        KLU_free_symbolic (&Symbolic, Common) ;
+        return (NULL) ;
     }
 
-    /* AMD memory management routines */
-    amd_malloc  = Common->malloc_memory ;
-    amd_free    = Common->free_memory ;
-    amd_calloc  = Common->calloc_memory ;
-    amd_realloc = Common->realloc_memory ;
-
     /* ---------------------------------------------------------------------- */
     /* allocate workspace for BTF permutation */
     /* ---------------------------------------------------------------------- */
@@ -320,10 +314,10 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
     Qbtf = KLU_malloc (n, sizeof (Int), Common) ;
     if (Common->status < KLU_OK)
     {
-	KLU_free (Pbtf, n, sizeof (Int), Common) ;
-	KLU_free (Qbtf, n, sizeof (Int), Common) ;
-	KLU_free_symbolic (&Symbolic, Common) ;
-	return (NULL) ;
+        KLU_free (Pbtf, n, sizeof (Int), Common) ;
+        KLU_free (Qbtf, n, sizeof (Int), Common) ;
+        KLU_free_symbolic (&Symbolic, Common) ;
+        return (NULL) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -344,55 +338,55 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
 
     if (do_btf)
     {
-	Work = KLU_malloc (5*n, sizeof (Int), Common) ;
-	if (Common->status < KLU_OK)
-	{
-	    /* out of memory */
-	    KLU_free (Pbtf, n, sizeof (Int), Common) ;
-	    KLU_free (Qbtf, n, sizeof (Int), Common) ;
-	    KLU_free_symbolic (&Symbolic, Common) ;
-	    return (NULL) ;
-	}
-
-	nblocks = BTF_order (n, Ap, Ai, Common->maxwork, &work, Pbtf, Qbtf, R,
-		&(Symbolic->structural_rank), Work) ;
-	Common->structural_rank = Symbolic->structural_rank ;
-	Common->work += work ;
-
-	KLU_free (Work, 5*n, sizeof (Int), Common) ;
-
-	/* unflip Qbtf if the matrix does not have full structural rank */
-	if (Symbolic->structural_rank < n)
-	{
-	    for (k = 0 ; k < n ; k++)
-	    {
-		Qbtf [k] = BTF_UNFLIP (Qbtf [k]) ;
-	    }
-	}
-
-	/* find the size of the largest block */
-	maxblock = 1 ;
-	for (block = 0 ; block < nblocks ; block++)
-	{
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-	    PRINTF (("block %d size %d\n", block, nk)) ;
-	    maxblock = MAX (maxblock, nk) ;
-	}
+        Work = KLU_malloc (5*n, sizeof (Int), Common) ;
+        if (Common->status < KLU_OK)
+        {
+            /* out of memory */
+            KLU_free (Pbtf, n, sizeof (Int), Common) ;
+            KLU_free (Qbtf, n, sizeof (Int), Common) ;
+            KLU_free_symbolic (&Symbolic, Common) ;
+            return (NULL) ;
+        }
+
+        nblocks = BTF_order (n, Ap, Ai, Common->maxwork, &work, Pbtf, Qbtf, R,
+                &(Symbolic->structural_rank), Work) ;
+        Common->structural_rank = Symbolic->structural_rank ;
+        Common->work += work ;
+
+        KLU_free (Work, 5*n, sizeof (Int), Common) ;
+
+        /* unflip Qbtf if the matrix does not have full structural rank */
+        if (Symbolic->structural_rank < n)
+        {
+            for (k = 0 ; k < n ; k++)
+            {
+                Qbtf [k] = BTF_UNFLIP (Qbtf [k]) ;
+            }
+        }
+
+        /* find the size of the largest block */
+        maxblock = 1 ;
+        for (block = 0 ; block < nblocks ; block++)
+        {
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+            PRINTF (("block %d size %d\n", block, nk)) ;
+            maxblock = MAX (maxblock, nk) ;
+        }
     }
     else
     {
-	/* BTF not requested */
-	nblocks = 1 ;
-	maxblock = n ;
-	R [0] = 0 ;
-	R [1] = n ;
-	for (k = 0 ; k < n ; k++)
-	{
-	    Pbtf [k] = k ;
-	    Qbtf [k] = k ;
-	}
+        /* BTF not requested */
+        nblocks = 1 ;
+        maxblock = n ;
+        R [0] = 0 ;
+        R [1] = n ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Pbtf [k] = k ;
+            Qbtf [k] = k ;
+        }
     }
 
     Symbolic->nblocks = nblocks ;
@@ -415,10 +409,10 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
 
     if (Common->status == KLU_OK)
     {
-	PRINTF (("calling analyze_worker\n")) ;
-	Common->status = analyze_worker (n, Ap, Ai, nblocks, Pbtf, Qbtf, R,
-	    ordering, P, Q, Lnz, Pblk, Cp, Ci, Cilen, Pinv, Symbolic, Common) ;
-	PRINTF (("analyze_worker done\n")) ;
+        PRINTF (("calling analyze_worker\n")) ;
+        Common->status = analyze_worker (n, Ap, Ai, nblocks, Pbtf, Qbtf, R,
+            ordering, P, Q, Lnz, Pblk, Cp, Ci, Cilen, Pinv, Symbolic, Common) ;
+        PRINTF (("analyze_worker done\n")) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -438,7 +432,7 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
 
     if (Common->status < KLU_OK)
     {
-	KLU_free_symbolic (&Symbolic, Common) ;
+        KLU_free_symbolic (&Symbolic, Common) ;
     }
     return (Symbolic) ;
 }
@@ -448,13 +442,13 @@ static KLU_symbolic *order_and_analyze	/* returns NULL if error, or a valid
 /* === KLU_analyze ========================================================== */
 /* ========================================================================== */
 
-KLU_symbolic *KLU_analyze	/* returns NULL if error, or a valid
-				   KLU_symbolic object if successful */
+KLU_symbolic *KLU_analyze       /* returns NULL if error, or a valid
+                                   KLU_symbolic object if successful */
 (
     /* inputs, not modified */
-    Int n,		/* A is n-by-n */
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
+    Int n,              /* A is n-by-n */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
     /* -------------------- */
     KLU_common *Common
 )
@@ -466,7 +460,7 @@ KLU_symbolic *KLU_analyze	/* returns NULL if error, or a valid
 
     if (Common == NULL)
     {
-	return (NULL) ;
+        return (NULL) ;
     }
     Common->status = KLU_OK ;
     Common->structural_rank = EMPTY ;
@@ -477,12 +471,12 @@ KLU_symbolic *KLU_analyze	/* returns NULL if error, or a valid
 
     if (Common->ordering == 2)
     {
-	/* natural ordering */
-	return (KLU_analyze_given (n, Ap, Ai, NULL, NULL, Common)) ;
+        /* natural ordering */
+        return (KLU_analyze_given (n, Ap, Ai, NULL, NULL, Common)) ;
     }
     else
     {
-	/* order with P and Q */
-	return (order_and_analyze (n, Ap, Ai, Common)) ;
+        /* order with P and Q */
+        return (order_and_analyze (n, Ap, Ai, Common)) ;
     }
 }
diff --git a/KLU/Source/klu_analyze_given.c b/KLU/Source/klu_analyze_given.c
index 002b1cb..bee5473 100644
--- a/KLU/Source/klu_analyze_given.c
+++ b/KLU/Source/klu_analyze_given.c
@@ -29,7 +29,7 @@ KLU_symbolic *KLU_alloc_symbolic
 
     if (Common == NULL)
     {
-	return (NULL) ;
+        return (NULL) ;
     }
     Common->status = KLU_OK ;
 
@@ -41,55 +41,55 @@ KLU_symbolic *KLU_alloc_symbolic
 
     if (n <= 0 || Ap == NULL || Ai == NULL)
     {
-	/* Ap and Ai must be present, and n must be > 0 */
-	Common->status = KLU_INVALID ;
-	return (NULL) ;
+        /* Ap and Ai must be present, and n must be > 0 */
+        Common->status = KLU_INVALID ;
+        return (NULL) ;
     }
 
     nz = Ap [n] ;
     if (Ap [0] != 0 || nz < 0)
     {
-	/* nz must be >= 0 and Ap [0] must equal zero */
-	Common->status = KLU_INVALID ;
-	return (NULL) ;
+        /* nz must be >= 0 and Ap [0] must equal zero */
+        Common->status = KLU_INVALID ;
+        return (NULL) ;
     }
 
     for (j = 0 ; j < n ; j++)
     {
-	if (Ap [j] > Ap [j+1])
-	{
-	    /* column pointers must be non-decreasing */
-	    Common->status = KLU_INVALID ;
-	    return (NULL) ;
-	}
+        if (Ap [j] > Ap [j+1])
+        {
+            /* column pointers must be non-decreasing */
+            Common->status = KLU_INVALID ;
+            return (NULL) ;
+        }
     }
     P = KLU_malloc (n, sizeof (Int), Common) ;
     if (Common->status < KLU_OK)
     {
-	/* out of memory */
-	Common->status = KLU_OUT_OF_MEMORY ;
-	return (NULL) ;
+        /* out of memory */
+        Common->status = KLU_OUT_OF_MEMORY ;
+        return (NULL) ;
     }
     for (i = 0 ; i < n ; i++)
     {
-	P [i] = EMPTY ;
+        P [i] = EMPTY ;
     }
     for (j = 0 ; j < n ; j++)
     {
-	pend = Ap [j+1] ;
-	for (p = Ap [j] ; p < pend ; p++)
-	{
-	    i = Ai [p] ;
-	    if (i < 0 || i >= n || P [i] == j)
-	    {
-		/* row index out of range, or duplicate entry */
-		KLU_free (P, n, sizeof (Int), Common) ;
-		Common->status = KLU_INVALID ;
-		return (NULL) ;
-	    }
-	    /* flag row i as appearing in column j */
-	    P [i] = j ;
-	}
+        pend = Ap [j+1] ;
+        for (p = Ap [j] ; p < pend ; p++)
+        {
+            i = Ai [p] ;
+            if (i < 0 || i >= n || P [i] == j)
+            {
+                /* row index out of range, or duplicate entry */
+                KLU_free (P, n, sizeof (Int), Common) ;
+                Common->status = KLU_INVALID ;
+                return (NULL) ;
+            }
+            /* flag row i as appearing in column j */
+            P [i] = j ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -99,10 +99,10 @@ KLU_symbolic *KLU_alloc_symbolic
     Symbolic = KLU_malloc (sizeof (KLU_symbolic), 1, Common) ;
     if (Common->status < KLU_OK)
     {
-	/* out of memory */
-	KLU_free (P, n, sizeof (Int), Common) ;
-	Common->status = KLU_OUT_OF_MEMORY ;
-	return (NULL) ;
+        /* out of memory */
+        KLU_free (P, n, sizeof (Int), Common) ;
+        Common->status = KLU_OUT_OF_MEMORY ;
+        return (NULL) ;
     }
 
     Q = KLU_malloc (n, sizeof (Int), Common) ;
@@ -118,10 +118,10 @@ KLU_symbolic *KLU_alloc_symbolic
 
     if (Common->status < KLU_OK)
     {
-	/* out of memory */
-	KLU_free_symbolic (&Symbolic, Common) ;
-	Common->status = KLU_OUT_OF_MEMORY ;
-	return (NULL) ;
+        /* out of memory */
+        KLU_free_symbolic (&Symbolic, Common) ;
+        Common->status = KLU_OUT_OF_MEMORY ;
+        return (NULL) ;
     }
 
     return (Symbolic) ;
@@ -132,15 +132,15 @@ KLU_symbolic *KLU_alloc_symbolic
 /* === KLU_analyze_given ==================================================== */
 /* ========================================================================== */
 
-KLU_symbolic *KLU_analyze_given	    /* returns NULL if error, or a valid
-				       KLU_symbolic object if successful */
+KLU_symbolic *KLU_analyze_given     /* returns NULL if error, or a valid
+                                       KLU_symbolic object if successful */
 (
     /* inputs, not modified */
-    Int n,		/* A is n-by-n */
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
-    Int Puser [ ],	/* size n, user's row permutation (may be NULL) */
-    Int Quser [ ],	/* size n, user's column permutation (may be NULL) */
+    Int n,              /* A is n-by-n */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
+    Int Puser [ ],      /* size n, user's row permutation (may be NULL) */
+    Int Quser [ ],      /* size n, user's column permutation (may be NULL) */
     /* -------------------- */
     KLU_common *Common
 )
@@ -156,7 +156,7 @@ KLU_symbolic *KLU_analyze_given	    /* returns NULL if error, or a valid
     Symbolic = KLU_alloc_symbolic (n, Ap, Ai, Common) ;
     if (Symbolic == NULL)
     {
-	return (NULL) ;
+        return (NULL) ;
     }
     P = Symbolic->P ;
     Q = Symbolic->Q ;
@@ -170,17 +170,17 @@ KLU_symbolic *KLU_analyze_given	    /* returns NULL if error, or a valid
 
     if (Quser == (Int *) NULL)
     {
-	for (k = 0 ; k < n ; k++)
-	{
-	    Q [k] = k ;
-	}
+        for (k = 0 ; k < n ; k++)
+        {
+            Q [k] = k ;
+        }
     }
     else
     {
-	for (k = 0 ; k < n ; k++)
-	{
-	    Q [k] = Quser [k] ;
-	}
+        for (k = 0 ; k < n ; k++)
+        {
+            Q [k] = Quser [k] ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -199,160 +199,160 @@ KLU_symbolic *KLU_analyze_given	    /* returns NULL if error, or a valid
     if (do_btf)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* get workspace for BTF_strongcomp */
-	/* ------------------------------------------------------------------ */
-
-	Int *Pinv, *Work, *Bi, k1, k2, nk, oldcol ;
-
-	Work = KLU_malloc (4*n, sizeof (Int), Common) ;
-	Pinv = KLU_malloc (n, sizeof (Int), Common) ;
-	if (Puser != (Int *) NULL)
-	{
-	    Bi = KLU_malloc (nz+1, sizeof (Int), Common) ;
-	}
-	else
-	{
-	    Bi = Ai ;
-	}
-
-	if (Common->status < KLU_OK)
-	{
-	    /* out of memory */
-	    KLU_free (Work, 4*n, sizeof (Int), Common) ;
-	    KLU_free (Pinv, n, sizeof (Int), Common) ;
-	    if (Puser != (Int *) NULL)
-	    {
-		KLU_free (Bi, nz+1, sizeof (Int), Common) ;
-	    }
-	    KLU_free_symbolic (&Symbolic, Common) ;
-	    Common->status = KLU_OUT_OF_MEMORY ;
-	    return (NULL) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* B = Puser * A */
-	/* ------------------------------------------------------------------ */
-
-	if (Puser != (Int *) NULL)
-	{
-	    for (k = 0 ; k < n ; k++)
-	    {
-		Pinv [Puser [k]] = k ;
-	    }
-	    for (p = 0 ; p < nz ; p++)
-	    {
-		Bi [p] = Pinv [Ai [p]] ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* find the strongly-connected components */
-	/* ------------------------------------------------------------------ */
-
-	/* modifies Q, and determines P and R */
-	nblocks = BTF_strongcomp (n, Ap, Bi, Q, P, R, Work) ;
-
-	/* ------------------------------------------------------------------ */
-	/* P = P * Puser */
-	/* ------------------------------------------------------------------ */
-
-	if (Puser != (Int *) NULL)
-	{
-	    for (k = 0 ; k < n ; k++)
-	    {
-		Work [k] = Puser [P [k]] ;
-	    }
-	    for (k = 0 ; k < n ; k++)
-	    {
-		P [k] = Work [k] ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* Pinv = inverse of P */
-	/* ------------------------------------------------------------------ */
-
-	for (k = 0 ; k < n ; k++)
-	{
-	    Pinv [P [k]] = k ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* analyze each block */
-	/* ------------------------------------------------------------------ */
-
-	nzoff = 0 ;	    /* nz in off-diagonal part */
-	maxblock = 1 ;	    /* size of the largest block */
-
-	for (block = 0 ; block < nblocks ; block++)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* the block is from rows/columns k1 to k2-1 */
-	    /* -------------------------------------------------------------- */
-
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-	    PRINTF (("BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1, k2-1, nk)) ;
-	    maxblock = MAX (maxblock, nk) ;
-
-	    /* -------------------------------------------------------------- */
-	    /* scan the kth block, C */
-	    /* -------------------------------------------------------------- */
-
-	    for (k = k1 ; k < k2 ; k++)
-	    {
-		oldcol = Q [k] ;
-		pend = Ap [oldcol+1] ;
-		for (p = Ap [oldcol] ; p < pend ; p++)
-		{
-		    if (Pinv [Ai [p]] < k1)
-		    {
-			nzoff++ ;
-		    }
-		}
-	    }
-
-	    /* fill-in not estimated */
-	    Lnz [block] = EMPTY ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* free all workspace */
-	/* ------------------------------------------------------------------ */
-
-	KLU_free (Work, 4*n, sizeof (Int), Common) ;
-	KLU_free (Pinv, n, sizeof (Int), Common) ;
-	if (Puser != (Int *) NULL)
-	{
-	    KLU_free (Bi, nz+1, sizeof (Int), Common) ;
-	}
+        /* ------------------------------------------------------------------ */
+        /* get workspace for BTF_strongcomp */
+        /* ------------------------------------------------------------------ */
+
+        Int *Pinv, *Work, *Bi, k1, k2, nk, oldcol ;
+
+        Work = KLU_malloc (4*n, sizeof (Int), Common) ;
+        Pinv = KLU_malloc (n, sizeof (Int), Common) ;
+        if (Puser != (Int *) NULL)
+        {
+            Bi = KLU_malloc (nz+1, sizeof (Int), Common) ;
+        }
+        else
+        {
+            Bi = Ai ;
+        }
+
+        if (Common->status < KLU_OK)
+        {
+            /* out of memory */
+            KLU_free (Work, 4*n, sizeof (Int), Common) ;
+            KLU_free (Pinv, n, sizeof (Int), Common) ;
+            if (Puser != (Int *) NULL)
+            {
+                KLU_free (Bi, nz+1, sizeof (Int), Common) ;
+            }
+            KLU_free_symbolic (&Symbolic, Common) ;
+            Common->status = KLU_OUT_OF_MEMORY ;
+            return (NULL) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* B = Puser * A */
+        /* ------------------------------------------------------------------ */
+
+        if (Puser != (Int *) NULL)
+        {
+            for (k = 0 ; k < n ; k++)
+            {
+                Pinv [Puser [k]] = k ;
+            }
+            for (p = 0 ; p < nz ; p++)
+            {
+                Bi [p] = Pinv [Ai [p]] ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* find the strongly-connected components */
+        /* ------------------------------------------------------------------ */
+
+        /* modifies Q, and determines P and R */
+        nblocks = BTF_strongcomp (n, Ap, Bi, Q, P, R, Work) ;
+
+        /* ------------------------------------------------------------------ */
+        /* P = P * Puser */
+        /* ------------------------------------------------------------------ */
+
+        if (Puser != (Int *) NULL)
+        {
+            for (k = 0 ; k < n ; k++)
+            {
+                Work [k] = Puser [P [k]] ;
+            }
+            for (k = 0 ; k < n ; k++)
+            {
+                P [k] = Work [k] ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* Pinv = inverse of P */
+        /* ------------------------------------------------------------------ */
+
+        for (k = 0 ; k < n ; k++)
+        {
+            Pinv [P [k]] = k ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* analyze each block */
+        /* ------------------------------------------------------------------ */
+
+        nzoff = 0 ;         /* nz in off-diagonal part */
+        maxblock = 1 ;      /* size of the largest block */
+
+        for (block = 0 ; block < nblocks ; block++)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* the block is from rows/columns k1 to k2-1 */
+            /* -------------------------------------------------------------- */
+
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+            PRINTF (("BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1, k2-1, nk)) ;
+            maxblock = MAX (maxblock, nk) ;
+
+            /* -------------------------------------------------------------- */
+            /* scan the kth block, C */
+            /* -------------------------------------------------------------- */
+
+            for (k = k1 ; k < k2 ; k++)
+            {
+                oldcol = Q [k] ;
+                pend = Ap [oldcol+1] ;
+                for (p = Ap [oldcol] ; p < pend ; p++)
+                {
+                    if (Pinv [Ai [p]] < k1)
+                    {
+                        nzoff++ ;
+                    }
+                }
+            }
+
+            /* fill-in not estimated */
+            Lnz [block] = EMPTY ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* free all workspace */
+        /* ------------------------------------------------------------------ */
+
+        KLU_free (Work, 4*n, sizeof (Int), Common) ;
+        KLU_free (Pinv, n, sizeof (Int), Common) ;
+        if (Puser != (Int *) NULL)
+        {
+            KLU_free (Bi, nz+1, sizeof (Int), Common) ;
+        }
 
     }
     else
     {
 
-	/* ------------------------------------------------------------------ */
-	/* BTF not requested */
-	/* ------------------------------------------------------------------ */
-
-	nzoff = 0 ;
-	nblocks = 1 ;
-	maxblock = n ;
-	R [0] = 0 ;
-	R [1] = n ;
-	Lnz [0] = EMPTY ;
-
-	/* ------------------------------------------------------------------ */
-	/* P = Puser, or identity if Puser is NULL */
-	/* ------------------------------------------------------------------ */
-
-	for (k = 0 ; k < n ; k++)
-	{
-	    P [k] = (Puser == NULL) ? k : Puser [k] ;
-	}
+        /* ------------------------------------------------------------------ */
+        /* BTF not requested */
+        /* ------------------------------------------------------------------ */
+
+        nzoff = 0 ;
+        nblocks = 1 ;
+        maxblock = n ;
+        R [0] = 0 ;
+        R [1] = n ;
+        Lnz [0] = EMPTY ;
+
+        /* ------------------------------------------------------------------ */
+        /* P = Puser, or identity if Puser is NULL */
+        /* ------------------------------------------------------------------ */
+
+        for (k = 0 ; k < n ; k++)
+        {
+            P [k] = (Puser == NULL) ? k : Puser [k] ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
diff --git a/KLU/Source/klu_defaults.c b/KLU/Source/klu_defaults.c
index 8f4ce6d..ba2b77e 100644
--- a/KLU/Source/klu_defaults.c
+++ b/KLU/Source/klu_defaults.c
@@ -13,29 +13,23 @@ Int KLU_defaults
 {
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
 
     /* parameters */
-    Common->tol = 0.001 ;	/* pivot tolerance for diagonal */
-    Common->memgrow = 1.2;	/* realloc size ratio increase for LU factors */
-    Common->initmem_amd = 1.2 ;	/* init. mem with AMD:  c*nnz(L) + n */
-    Common->initmem = 10 ;	/* init. mem otherwise: c*nnz(A) + n */
-    Common->btf = TRUE ;	/* use BTF pre-ordering, or not */
-    Common->maxwork = 0 ;	/* no limit to work done by btf_order */
-    Common->ordering = 0 ;	/* 0: AMD, 1: COLAMD, 2: user-provided P and Q,
-				 * 3: user-provided function */
-    Common->scale = 2 ;		/* scale: -1: none, and do not check for errors
-				 * in the input matrix in KLU_refactor.
-				 * 0: none, but check for errors,
-				 * 1: sum, 2: max */
-    Common->halt_if_singular = TRUE ;	/* quick halt if matrix is singular */
-
-    /* memory management routines */
-    Common->malloc_memory  = malloc ;
-    Common->calloc_memory  = calloc ;
-    Common->free_memory    = free ;
-    Common->realloc_memory = realloc ;
+    Common->tol = 0.001 ;       /* pivot tolerance for diagonal */
+    Common->memgrow = 1.2;      /* realloc size ratio increase for LU factors */
+    Common->initmem_amd = 1.2 ; /* init. mem with AMD:  c*nnz(L) + n */
+    Common->initmem = 10 ;      /* init. mem otherwise: c*nnz(A) + n */
+    Common->btf = TRUE ;        /* use BTF pre-ordering, or not */
+    Common->maxwork = 0 ;       /* no limit to work done by btf_order */
+    Common->ordering = 0 ;      /* 0: AMD, 1: COLAMD, 2: user-provided P and Q,
+                                 * 3: user-provided function */
+    Common->scale = 2 ;         /* scale: -1: none, and do not check for errors
+                                 * in the input matrix in KLU_refactor.
+                                 * 0: none, but check for errors,
+                                 * 1: sum, 2: max */
+    Common->halt_if_singular = TRUE ;   /* quick halt if matrix is singular */
 
     /* user ordering function and optional argument */
     Common->user_order = NULL ;
@@ -51,7 +45,7 @@ Int KLU_defaults
     Common->rcond = EMPTY ;
     Common->condest = EMPTY ;
     Common->rgrowth = EMPTY ;
-    Common->work = 0 ;		/* work done by btf_order */
+    Common->work = 0 ;          /* work done by btf_order */
 
     Common->memusage = 0 ;
     Common->mempeak = 0 ;
diff --git a/KLU/Source/klu_diagnostics.c b/KLU/Source/klu_diagnostics.c
index a65442f..dc9d288 100644
--- a/KLU/Source/klu_diagnostics.c
+++ b/KLU/Source/klu_diagnostics.c
@@ -3,12 +3,12 @@
 /* ========================================================================== */
 
 /* Linear algebraic diagnostics:
- * KLU_rgrowth:	reciprocal pivot growth, takes O(|A|+|U|) time
- * KLU_condest:	condition number estimator, takes about O(|A|+5*(|L|+|U|)) time
- * KLU_flops:	compute # flops required to factorize A into L*U
- * KLU_rcond:	compute a really cheap estimate of the reciprocal of the
- *		condition number, min(abs(diag(U))) / max(abs(diag(U))).
- *		Takes O(n) time.
+ * KLU_rgrowth: reciprocal pivot growth, takes O(|A|+|U|) time
+ * KLU_condest: condition number estimator, takes about O(|A|+5*(|L|+|U|)) time
+ * KLU_flops:   compute # flops required to factorize A into L*U
+ * KLU_rcond:   compute a really cheap estimate of the reciprocal of the
+ *              condition number, min(abs(diag(U))) / max(abs(diag(U))).
+ *              Takes O(n) time.
  */
 
 #include "klu_internal.h"
@@ -22,7 +22,7 @@
  *   rgrowth = min (max (abs ((R \ A (p,q)) - F))) ./ max (abs (U)))
  */
 
-Int KLU_rgrowth		/* return TRUE if successful, FALSE otherwise */
+Int KLU_rgrowth         /* return TRUE if successful, FALSE otherwise */
 (
     Int *Ap,
     Int *Ai,
@@ -46,21 +46,21 @@ Int KLU_rgrowth		/* return TRUE if successful, FALSE otherwise */
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
 
     if (Symbolic == NULL || Ap == NULL || Ai == NULL || Ax == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
 
     if (Numeric == NULL)
     {
-	/* treat this as a singular matrix */
-	Common->rgrowth = 0 ;
-	Common->status = KLU_SINGULAR ;
-	return (TRUE) ;
+        /* treat this as a singular matrix */
+        Common->rgrowth = 0 ;
+        Common->status = KLU_SINGULAR ;
+        return (TRUE) ;
     }
     Common->status = KLU_OK ;
 
@@ -76,83 +76,85 @@ Int KLU_rgrowth		/* return TRUE if successful, FALSE otherwise */
 
     for (i = 0 ; i < Symbolic->nblocks ; i++)
     {
-	k1 = Symbolic->R[i] ;
-	k2 = Symbolic->R[i+1] ;
-	nk = k2 - k1 ;
-	if (nk == 1)
-	{
-	    continue ;	    /* skip singleton blocks */
-	}
-	LU = (Unit *) Numeric->LUbx[i] ;
-	Uip = Numeric->Uip + k1 ;
-	Ulen = Numeric->Ulen + k1 ;
-	Ukk = ((Entry *) Numeric->Udiag) + k1 ;
-	min_block_rgrowth = 1 ;
-	for (j = 0 ; j < nk ; j++)
-	{
-	    max_ai = 0 ;
-	    max_ui = 0 ;
-	    oldcol = Q[j + k1] ;
-	    pend = Ap [oldcol + 1] ;
-	    for (k = Ap [oldcol] ; k < pend ; k++)
-	    {
-		oldrow = Ai [k] ;
-		newrow = Pinv [oldrow] ;
+        k1 = Symbolic->R[i] ;
+        k2 = Symbolic->R[i+1] ;
+        nk = k2 - k1 ;
+        if (nk == 1)
+        {
+            continue ;      /* skip singleton blocks */
+        }
+        LU = (Unit *) Numeric->LUbx[i] ;
+        Uip = Numeric->Uip + k1 ;
+        Ulen = Numeric->Ulen + k1 ;
+        Ukk = ((Entry *) Numeric->Udiag) + k1 ;
+        min_block_rgrowth = 1 ;
+        for (j = 0 ; j < nk ; j++)
+        {
+            max_ai = 0 ;
+            max_ui = 0 ;
+            oldcol = Q[j + k1] ;
+            pend = Ap [oldcol + 1] ;
+            for (k = Ap [oldcol] ; k < pend ; k++)
+            {
+                oldrow = Ai [k] ;
+                newrow = Pinv [oldrow] ;
                 if (newrow < k1)
-		{
-	 	    continue ;	/* skip entry outside the block */
-		}
-		ASSERT (newrow < k2) ;
-		if (Rs != NULL)
-		{
-		    /* aik = Aentry [k] / Rs [oldrow] */
-		    SCALE_DIV_ASSIGN (aik, Aentry [k], Rs [newrow]) ;
-		}
-		else
-		{
-		    aik = Aentry [k] ;
-		}
-		/* temp = ABS (aik) */
-		ABS (temp, aik) ;
-		if (temp > max_ai)
-		{
-		    max_ai = temp ;
-		}
-	    }
-
-	    GET_POINTER (LU, Uip, Ulen, Ui, Ux, j, len) ;
-	    for (k = 0 ; k < len ; k++)
-	    {
-	        /* temp = ABS (Ux [k]) */
-	        ABS (temp, Ux [k]) ;
-		if (temp > max_ui)
-		{
-		    max_ui = temp ;
-		}
-	    }
-	    /* consider the diagonal element */
-	    ABS (temp, Ukk [j]) ;
-	    if (temp > max_ui)
-	    {
-		max_ui = temp ;
-	    }
-
-	    /* if max_ui is 0, skip the column */
-	    if (SCALAR_IS_ZERO (max_ui))
-	    {
-		continue ;
-	    }
-	    temp = max_ai / max_ui ;
-	    if (temp < min_block_rgrowth)
-	    {
-		min_block_rgrowth = temp ;
-	    }
-	}
-
-	if (min_block_rgrowth < Common->rgrowth)
-	{
-	    Common->rgrowth = min_block_rgrowth ;
-	}
+                {
+                    continue ;  /* skip entry outside the block */
+                }
+                ASSERT (newrow < k2) ;
+                if (Rs != NULL)
+                {
+                    /* aik = Aentry [k] / Rs [oldrow] */
+                    SCALE_DIV_ASSIGN (aik, Aentry [k], Rs [newrow]) ;
+                }
+                else
+                {
+                    aik = Aentry [k] ;
+                }
+                /* temp = ABS (aik) */
+                ABS (temp, aik) ;
+                if (temp > max_ai)
+                {
+                    max_ai = temp ;
+                }
+            }
+
+            /* Ui is set but not used.  This is OK, because otherwise the macro
+               would have to be redesigned. */
+            GET_POINTER (LU, Uip, Ulen, Ui, Ux, j, len) ;
+            for (k = 0 ; k < len ; k++)
+            {
+                /* temp = ABS (Ux [k]) */
+                ABS (temp, Ux [k]) ;
+                if (temp > max_ui)
+                {
+                    max_ui = temp ;
+                }
+            }
+            /* consider the diagonal element */
+            ABS (temp, Ukk [j]) ;
+            if (temp > max_ui)
+            {
+                max_ui = temp ;
+            }
+
+            /* if max_ui is 0, skip the column */
+            if (SCALAR_IS_ZERO (max_ui))
+            {
+                continue ;
+            }
+            temp = max_ai / max_ui ;
+            if (temp < min_block_rgrowth)
+            {
+                min_block_rgrowth = temp ;
+            }
+        }
+
+        if (min_block_rgrowth < Common->rgrowth)
+        {
+            Common->rgrowth = min_block_rgrowth ;
+        }
     }
     return (TRUE) ;
 }
@@ -167,7 +169,7 @@ Int KLU_rgrowth		/* return TRUE if successful, FALSE otherwise */
  * 1-norm pseudospectra, SIAM J. Matrix Anal. Appl., 21(4):1185-1201, 2000.
  */
 
-Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
+Int KLU_condest         /* return TRUE if successful, FALSE otherwise */
 (
     Int Ap [ ],
     double Ax [ ],
@@ -178,8 +180,7 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
 {
     double xj, Xmax, csum, anorm, ainv_norm, est_old, est_new, abs_value ;
     Entry *Udiag, *Aentry, *X, *S ;
-    Int *R ;
-    Int nblocks, i, j, jmax, jnew, pend, n ;
+    Int i, j, jmax, jnew, pend, n ;
 #ifndef COMPLEX
     Int unchanged ;
 #endif
@@ -190,20 +191,20 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     if (Symbolic == NULL || Ap == NULL || Ax == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
     abs_value = 0 ;
     if (Numeric == NULL)
     {
-	/* treat this as a singular matrix */
-	Common->condest = 1 / abs_value ;
-	Common->status = KLU_SINGULAR ;
-	return (TRUE) ;
+        /* treat this as a singular matrix */
+        Common->condest = 1 / abs_value ;
+        Common->status = KLU_SINGULAR ;
+        return (TRUE) ;
     }
     Common->status = KLU_OK ;
 
@@ -212,8 +213,6 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
     /* ---------------------------------------------------------------------- */
 
     n = Symbolic->n ;
-    nblocks = Symbolic->nblocks ;
-    R = Symbolic->R ;
     Udiag = Numeric->Udiag ;
 
     /* ---------------------------------------------------------------------- */
@@ -222,13 +221,13 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
 
     for (i = 0 ; i < n ; i++)
     {
-	ABS (abs_value, Udiag [i]) ;
-	if (SCALAR_IS_ZERO (abs_value))
-	{
-	    Common->condest = 1 / abs_value ;
-	    Common->status = KLU_SINGULAR ;
-	    return (TRUE) ;
-	}
+        ABS (abs_value, Udiag [i]) ;
+        if (SCALAR_IS_ZERO (abs_value))
+        {
+            Common->condest = 1 / abs_value ;
+            Common->status = KLU_SINGULAR ;
+            return (TRUE) ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -239,17 +238,17 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
     Aentry = (Entry *) Ax ;
     for (i = 0 ; i < n ; i++)
     {
-	pend = Ap [i + 1] ;
-	csum = 0.0 ;
-	for (j = Ap [i] ; j < pend ; j++)
-	{
-	    ABS (abs_value, Aentry [j]) ;
-	    csum += abs_value ;
-	}
-	if (csum > anorm)
-	{
-	    anorm = csum ;
-	}
+        pend = Ap [i + 1] ;
+        csum = 0.0 ;
+        for (j = Ap [i] ; j < pend ; j++)
+        {
+            ABS (abs_value, Aentry [j]) ;
+            csum += abs_value ;
+        }
+        if (csum > anorm)
+        {
+            anorm = csum ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -257,114 +256,114 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
     /* ---------------------------------------------------------------------- */
 
     /* get workspace (size 2*n Entry's) */
-    X = Numeric->Xwork ;	    /* size n space used in KLU_solve, tsolve */
-    X += n ;			    /* X is size n */
-    S = X + n ;			    /* S is size n */
+    X = Numeric->Xwork ;            /* size n space used in KLU_solve, tsolve */
+    X += n ;                        /* X is size n */
+    S = X + n ;                     /* S is size n */
 
     for (i = 0 ; i < n ; i++)
     {
-	CLEAR (S [i]) ;
-	CLEAR (X [i]) ;
-	REAL (X [i]) = 1.0 / ((double) n) ;
+        CLEAR (S [i]) ;
+        CLEAR (X [i]) ;
+        REAL (X [i]) = 1.0 / ((double) n) ;
     }
     jmax = 0 ;
 
     ainv_norm = 0.0 ;
     for (i = 0 ; i < 5 ; i++)
     {
-	if (i > 0)
-	{
-	    /* X [jmax] is the largest entry in X */
-	    for (j = 0 ; j < n ; j++)
-	    {
-		/* X [j] = 0 ;*/
-		CLEAR (X [j]) ;
-	    }
-	    REAL (X [jmax]) = 1 ;
-	}
-
-	KLU_solve (Symbolic, Numeric, n, 1, (double *) X, Common) ;
-	est_old = ainv_norm ;
-	ainv_norm = 0.0 ;
-
-	for (j = 0 ; j < n ; j++)
-	{
-	    /* ainv_norm += ABS (X [j]) ;*/
-	    ABS (abs_value, X [j]) ;
-	    ainv_norm += abs_value ;
-	}
+        if (i > 0)
+        {
+            /* X [jmax] is the largest entry in X */
+            for (j = 0 ; j < n ; j++)
+            {
+                /* X [j] = 0 ;*/
+                CLEAR (X [j]) ;
+            }
+            REAL (X [jmax]) = 1 ;
+        }
+
+        KLU_solve (Symbolic, Numeric, n, 1, (double *) X, Common) ;
+        est_old = ainv_norm ;
+        ainv_norm = 0.0 ;
+
+        for (j = 0 ; j < n ; j++)
+        {
+            /* ainv_norm += ABS (X [j]) ;*/
+            ABS (abs_value, X [j]) ;
+            ainv_norm += abs_value ;
+        }
 
 #ifndef COMPLEX
-	unchanged = TRUE ;
-
-	for (j = 0 ; j < n ; j++)
-	{
-	    double s = (X [j] >= 0) ? 1 : -1 ;
-	    if (s != (Int) REAL (S [j]))
-	    {
-		S [j] = s ;
-		unchanged = FALSE ;
-	    }
-	}
-
-	if (i > 0 && (ainv_norm <= est_old || unchanged))
-	{
-	    break ;
-	}
+        unchanged = TRUE ;
+
+        for (j = 0 ; j < n ; j++)
+        {
+            double s = (X [j] >= 0) ? 1 : -1 ;
+            if (s != (Int) REAL (S [j]))
+            {
+                S [j] = s ;
+                unchanged = FALSE ;
+            }
+        }
+
+        if (i > 0 && (ainv_norm <= est_old || unchanged))
+        {
+            break ;
+        }
 #else
         for (j = 0 ; j < n ; j++)
-	{
-	    if (IS_NONZERO (X [j]))
-	    {
-		ABS (abs_value, X [j]) ;
-		SCALE_DIV_ASSIGN (S [j], X [j], abs_value) ;
-	    }
-	    else
-	    {
-		CLEAR (S [j]) ;
-		REAL (S [j]) = 1 ;
-	    }
-	}
-
-	if (i > 0 && ainv_norm <= est_old)
+        {
+            if (IS_NONZERO (X [j]))
+            {
+                ABS (abs_value, X [j]) ;
+                SCALE_DIV_ASSIGN (S [j], X [j], abs_value) ;
+            }
+            else
+            {
+                CLEAR (S [j]) ;
+                REAL (S [j]) = 1 ;
+            }
+        }
+
+        if (i > 0 && ainv_norm <= est_old)
         {
             break ;
         }
 #endif
 
-	for (j = 0 ; j < n ; j++)
-	{
-	    X [j] = S [j] ;
-	}
+        for (j = 0 ; j < n ; j++)
+        {
+            X [j] = S [j] ;
+        }
 
 #ifndef COMPLEX
-	/* do a transpose solve */
-	KLU_tsolve (Symbolic, Numeric, n, 1, X, Common) ;
+        /* do a transpose solve */
+        KLU_tsolve (Symbolic, Numeric, n, 1, X, Common) ;
 #else
-	/* do a conjugate transpose solve */
-	KLU_tsolve (Symbolic, Numeric, n, 1, (double *) X, 1, Common) ;
+        /* do a conjugate transpose solve */
+        KLU_tsolve (Symbolic, Numeric, n, 1, (double *) X, 1, Common) ;
 #endif
 
-	/* jnew = the position of the largest entry in X */
-	jnew = 0 ;
-	Xmax = 0 ;
-	for (j = 0 ; j < n ; j++)
-	{
-	    /* xj = ABS (X [j]) ;*/
-	    ABS (xj, X [j]) ;
-	    if (xj > Xmax)
-	    {
-		Xmax = xj ;
-		jnew = j ;
-	    }
-	}
-	if (i > 0 && jnew == jmax)
-	{
-	    /* the position of the largest entry did not change
-	     * from the previous iteration */
-	    break ;
-	}
-	jmax = jnew ;
+        /* jnew = the position of the largest entry in X */
+        jnew = 0 ;
+        Xmax = 0 ;
+        for (j = 0 ; j < n ; j++)
+        {
+            /* xj = ABS (X [j]) ;*/
+            ABS (xj, X [j]) ;
+            if (xj > Xmax)
+            {
+                Xmax = xj ;
+                jnew = j ;
+            }
+        }
+        if (i > 0 && jnew == jmax)
+        {
+            /* the position of the largest entry did not change
+             * from the previous iteration */
+            break ;
+        }
+        jmax = jnew ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -373,15 +372,15 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
 
     for (j = 0 ; j < n ; j++)
     {
-	CLEAR (X [j]) ;
-	if (j % 2)
-	{
-	    REAL (X [j]) = 1 + ((double) j) / ((double) (n-1)) ;
-	}
-	else
-	{
-	    REAL (X [j]) = -1 - ((double) j) / ((double) (n-1)) ;
-	}
+        CLEAR (X [j]) ;
+        if (j % 2)
+        {
+            REAL (X [j]) = 1 + ((double) j) / ((double) (n-1)) ;
+        }
+        else
+        {
+            REAL (X [j]) = -1 - ((double) j) / ((double) (n-1)) ;
+        }
     }
 
     KLU_solve (Symbolic, Numeric, n, 1, (double *) X, Common) ;
@@ -389,9 +388,9 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
     est_new = 0.0 ;
     for (j = 0 ; j < n ; j++)
     {
-	/* est_new += ABS (X [j]) ;*/
-	ABS (abs_value, X [j]) ;
-	est_new += abs_value ;
+        /* est_new += ABS (X [j]) ;*/
+        ABS (abs_value, X [j]) ;
+        est_new += abs_value ;
     }
     est_new = 2 * est_new / (3 * n) ;
     ainv_norm = MAX (est_new, ainv_norm) ;
@@ -411,7 +410,7 @@ Int KLU_condest		/* return TRUE if successful, FALSE otherwise */
 
 /* Compute the flop count for the LU factorization (in Common->flops) */
 
-Int KLU_flops		/* return TRUE if successful, FALSE otherwise */
+Int KLU_flops           /* return TRUE if successful, FALSE otherwise */
 (
     KLU_symbolic *Symbolic,
     KLU_numeric *Numeric,
@@ -422,7 +421,7 @@ Int KLU_flops		/* return TRUE if successful, FALSE otherwise */
     Int *R, *Ui, *Uip, *Llen, *Ulen ;
     Unit **LUbx ;
     Unit *LU ;
-    Int k, ulen, p, n, nk, block, nblocks, k1 ;
+    Int k, ulen, p, nk, block, nblocks, k1 ;
 
     /* ---------------------------------------------------------------------- */
     /* check inputs */
@@ -430,13 +429,13 @@ Int KLU_flops		/* return TRUE if successful, FALSE otherwise */
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     Common->flops = EMPTY ;
     if (Numeric == NULL || Symbolic == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
     Common->status = KLU_OK ;
 
@@ -444,7 +443,6 @@ Int KLU_flops		/* return TRUE if successful, FALSE otherwise */
     /* get the contents of the Symbolic object */
     /* ---------------------------------------------------------------------- */
 
-    n = Symbolic->n ;
     R = Symbolic->R ;
     nblocks = Symbolic->nblocks ;
 
@@ -460,27 +458,27 @@ Int KLU_flops		/* return TRUE if successful, FALSE otherwise */
 
     for (block = 0 ; block < nblocks ; block++)
     {
-	k1 = R [block] ;
-	nk = R [block+1] - k1 ;
-	if (nk > 1)
-	{
-	    Llen = Numeric->Llen + k1 ;
-	    Uip  = Numeric->Uip  + k1 ;
-	    Ulen = Numeric->Ulen + k1 ;
-	    LU = LUbx [block] ;
-	    for (k = 0 ; k < nk ; k++)
-	    {
-		/* compute kth column of U, and update kth column of A */
-		GET_I_POINTER (LU, Uip, Ui, k) ;
-		ulen = Ulen [k] ;
-		for (p = 0 ; p < ulen ; p++)
-		{
-		    flops += 2 * Llen [Ui [p]] ;
-		}
-		/* gather and divide by pivot to get kth column of L */
-		flops += Llen [k] ;
-	    }
-	}
+        k1 = R [block] ;
+        nk = R [block+1] - k1 ;
+        if (nk > 1)
+        {
+            Llen = Numeric->Llen + k1 ;
+            Uip  = Numeric->Uip  + k1 ;
+            Ulen = Numeric->Ulen + k1 ;
+            LU = LUbx [block] ;
+            for (k = 0 ; k < nk ; k++)
+            {
+                /* compute kth column of U, and update kth column of A */
+                GET_I_POINTER (LU, Uip, Ui, k) ;
+                ulen = Ulen [k] ;
+                for (p = 0 ; p < ulen ; p++)
+                {
+                    flops += 2 * Llen [Ui [p]] ;
+                }
+                /* gather and divide by pivot to get kth column of L */
+                flops += Llen [k] ;
+            }
+        }
     }
     Common->flops = flops ;
     return (TRUE) ;
@@ -496,11 +494,11 @@ Int KLU_flops		/* return TRUE if successful, FALSE otherwise */
  * pivot, or a NaN pivot, rcond will be zero.  Takes O(n) time.
  */   
 
-Int KLU_rcond		/* return TRUE if successful, FALSE otherwise */
+Int KLU_rcond           /* return TRUE if successful, FALSE otherwise */
 (
-    KLU_symbolic *Symbolic,	/* input, not modified */
-    KLU_numeric *Numeric,	/* input, not modified */
-    KLU_common *Common		/* result in Common->rcond */
+    KLU_symbolic *Symbolic,     /* input, not modified */
+    KLU_numeric *Numeric,       /* input, not modified */
+    KLU_common *Common          /* result in Common->rcond */
 )
 {
     double ukk, umin = 0, umax = 0 ;
@@ -513,18 +511,18 @@ Int KLU_rcond		/* return TRUE if successful, FALSE otherwise */
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     if (Symbolic == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
     if (Numeric == NULL)
     {
-	Common->rcond = 0 ;
-	Common->status = KLU_SINGULAR ;
-	return (TRUE) ;
+        Common->rcond = 0 ;
+        Common->status = KLU_SINGULAR ;
+        return (TRUE) ;
     }
     Common->status = KLU_OK ;
 
@@ -536,35 +534,35 @@ Int KLU_rcond		/* return TRUE if successful, FALSE otherwise */
     Udiag = Numeric->Udiag ;
     for (j = 0 ; j < n ; j++)
     {
-	/* get the magnitude of the pivot */
-	ABS (ukk, Udiag [j]) ;
-	if (SCALAR_IS_NAN (ukk) || SCALAR_IS_ZERO (ukk))
-	{
-	    /* if NaN, or zero, the rcond is zero */
-	    Common->rcond = 0 ;
-	    Common->status = KLU_SINGULAR ;
-	    return (TRUE) ;
-	}
-	if (j == 0)
-	{
-	    /* first pivot entry */
-	    umin = ukk ;
-	    umax = ukk ;
-	}
-	else
-	{
-	    /* subsequent pivots */
-	    umin = MIN (umin, ukk) ;
-	    umax = MAX (umax, ukk) ;
-	}
+        /* get the magnitude of the pivot */
+        ABS (ukk, Udiag [j]) ;
+        if (SCALAR_IS_NAN (ukk) || SCALAR_IS_ZERO (ukk))
+        {
+            /* if NaN, or zero, the rcond is zero */
+            Common->rcond = 0 ;
+            Common->status = KLU_SINGULAR ;
+            return (TRUE) ;
+        }
+        if (j == 0)
+        {
+            /* first pivot entry */
+            umin = ukk ;
+            umax = ukk ;
+        }
+        else
+        {
+            /* subsequent pivots */
+            umin = MIN (umin, ukk) ;
+            umax = MAX (umax, ukk) ;
+        }
     }
 
     Common->rcond = umin / umax ;
     if (SCALAR_IS_NAN (Common->rcond) || SCALAR_IS_ZERO (Common->rcond))
     {
-	/* this can occur if umin or umax are Inf or NaN */
-	Common->rcond = 0 ;
-	Common->status = KLU_SINGULAR ;
+        /* this can occur if umin or umax are Inf or NaN */
+        Common->rcond = 0 ;
+        Common->status = KLU_SINGULAR ;
     }
     return (TRUE) ;
 }
diff --git a/KLU/Source/klu_dump.c b/KLU/Source/klu_dump.c
index b625fda..63170bc 100644
--- a/KLU/Source/klu_dump.c
+++ b/KLU/Source/klu_dump.c
@@ -18,13 +18,13 @@
  * n-by-n.  The row indices of entries in column j are in
  * Ai [Ap [j] ... Ap [j+1]-1].  Required conditions are:
  *
- *	n >= 0
- *	nz = Ap [n_col] >= 0	    number of entries in the matrix
- *	Ap [0] == 0
- *	Ap [j] <= Ap [j+1] for all j in the range 0 to n_col.
- *	row indices in Ai [Ap [j] ... Ap [j+1]-1]
- *	    must be in the range 0 to n_row-1,
- *	    and no duplicate entries can exist (duplicates not checked here).
+ *      n >= 0
+ *      nz = Ap [n_col] >= 0        number of entries in the matrix
+ *      Ap [0] == 0
+ *      Ap [j] <= Ap [j+1] for all j in the range 0 to n_col.
+ *      row indices in Ai [Ap [j] ... Ap [j+1]-1]
+ *          must be in the range 0 to n_row-1,
+ *          and no duplicate entries can exist (duplicates not checked here).
  *
  * Not user-callable.  Only used when debugging.
  */
@@ -35,43 +35,43 @@ Int KLU_valid (Int n, Int Ap [ ], Int Ai [ ], Entry Ax [ ])
     PRINTF (("\ncolumn oriented matrix, n = %d\n", n)) ;
     if (n <= 0)
     {
-	PRINTF (("n must be >= 0: %d\n", n)) ;
-	return (FALSE) ;
+        PRINTF (("n must be >= 0: %d\n", n)) ;
+        return (FALSE) ;
     }
     nz = Ap [n] ;
     if (Ap [0] != 0 || nz < 0)
     {
-	/* column pointers must start at Ap [0] = 0, and Ap [n] must be >= 0 */
-	PRINTF (("column 0 pointer bad or nz < 0\n")) ;
-	return (FALSE) ;
+        /* column pointers must start at Ap [0] = 0, and Ap [n] must be >= 0 */
+        PRINTF (("column 0 pointer bad or nz < 0\n")) ;
+        return (FALSE) ;
     }
     for (j = 0 ; j < n ; j++)
     {
-	p1 = Ap [j] ;
-	p2 = Ap [j+1] ;
-	PRINTF (("\nColumn: %d p1: %d p2: %d\n", j, p1, p2)) ;
-	if (p1 > p2)
-	{
-	    /* column pointers must be ascending */
-	    PRINTF (("column %d pointer bad\n", j)) ;
-	    return (FALSE) ;
-	}
-	for (p = p1 ; p < p2 ; p++)
-	{
-	    i = Ai [p] ;
-	    PRINTF (("row: %d", i)) ;
-	    if (i < 0 || i >= n)
-	    {
-		/* row index out of range */
-		PRINTF (("index out of range, col %d row %d\n", j, i)) ;
-		return (FALSE) ;
-	    }
-	    if (Ax != (Entry *) NULL)
-	    {
-		PRINT_ENTRY (Ax [p]) ;
-	    }
-	    PRINTF (("\n")) ;
-	}
+        p1 = Ap [j] ;
+        p2 = Ap [j+1] ;
+        PRINTF (("\nColumn: %d p1: %d p2: %d\n", j, p1, p2)) ;
+        if (p1 > p2)
+        {
+            /* column pointers must be ascending */
+            PRINTF (("column %d pointer bad\n", j)) ;
+            return (FALSE) ;
+        }
+        for (p = p1 ; p < p2 ; p++)
+        {
+            i = Ai [p] ;
+            PRINTF (("row: %d", i)) ;
+            if (i < 0 || i >= n)
+            {
+                /* row index out of range */
+                PRINTF (("index out of range, col %d row %d\n", j, i)) ;
+                return (FALSE) ;
+            }
+            if (Ax != (Entry *) NULL)
+            {
+                PRINT_ENTRY (Ax [p]) ;
+            }
+            PRINTF (("\n")) ;
+        }
     }
     return (TRUE) ;
 }
@@ -88,7 +88,7 @@ Int KLU_valid (Int n, Int Ap [ ], Int Ai [ ], Entry Ax [ ])
  */
 
 Int KLU_valid_LU (Int n, Int flag_test_start_ptr, Int Xip [ ],
-		   Int Xlen [ ],  Unit LU [ ])
+                   Int Xlen [ ],  Unit LU [ ])
 {
     Int *Xi ;
     Entry *Xx ;
@@ -97,44 +97,44 @@ Int KLU_valid_LU (Int n, Int flag_test_start_ptr, Int Xip [ ],
     PRINTF (("\ncolumn oriented matrix, n = %d\n", n)) ;
     if (n <= 0)
     {
-	PRINTF (("n must be >= 0: %d\n", n)) ;
-	return (FALSE) ;
+        PRINTF (("n must be >= 0: %d\n", n)) ;
+        return (FALSE) ;
     }
     if (flag_test_start_ptr && Xip [0] != 0)
     {
-	/* column pointers must start at Xip [0] = 0*/
-	PRINTF (("column 0 pointer bad\n")) ;
-	return (FALSE) ;
+        /* column pointers must start at Xip [0] = 0*/
+        PRINTF (("column 0 pointer bad\n")) ;
+        return (FALSE) ;
     }
 
     for (j = 0 ; j < n ; j++)
     {
-	p1 = Xip [j] ;
-	p2 = Xip [j+1] ;
-	PRINTF (("\nColumn: %d p1: %d p2: %d\n", j, p1, p2)) ;
-	if (p1 > p2)
-	{
-	    /* column pointers must be ascending */
-	    PRINTF (("column %d pointer bad\n", j)) ;
-	    return (FALSE) ;
-	}
-	GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
-	for (p = 0 ; p < len ; p++)
-	{
-	    i = Xi [p] ;
-	    PRINTF (("row: %d", i)) ;
-	    if (i < 0 || i >= n)
-	    {
-		/* row index out of range */
-		PRINTF (("index out of range, col %d row %d\n", j, i)) ;
-		return (FALSE) ;
-	    }
-	    if (Xx != (Entry *) NULL)
-	    {
-		PRINT_ENTRY (Xx [p]) ;
-	    }
-	    PRINTF (("\n")) ;
-	}
+        p1 = Xip [j] ;
+        p2 = Xip [j+1] ;
+        PRINTF (("\nColumn: %d p1: %d p2: %d\n", j, p1, p2)) ;
+        if (p1 > p2)
+        {
+            /* column pointers must be ascending */
+            PRINTF (("column %d pointer bad\n", j)) ;
+            return (FALSE) ;
+        }
+        GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
+        for (p = 0 ; p < len ; p++)
+        {
+            i = Xi [p] ;
+            PRINTF (("row: %d", i)) ;
+            if (i < 0 || i >= n)
+            {
+                /* row index out of range */
+                PRINTF (("index out of range, col %d row %d\n", j, i)) ;
+                return (FALSE) ;
+            }
+            if (Xx != (Entry *) NULL)
+            {
+                PRINT_ENTRY (Xx [p]) ;
+            }
+            PRINTF (("\n")) ;
+        }
     }
 
     return (TRUE) ;
diff --git a/KLU/Source/klu_extract.c b/KLU/Source/klu_extract.c
index 5a44aa0..b009828 100644
--- a/KLU/Source/klu_extract.c
+++ b/KLU/Source/klu_extract.c
@@ -11,7 +11,7 @@
 
 #include "klu_internal.h"
 
-Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
+Int KLU_extract     /* returns TRUE if successful, FALSE otherwise */
 (
     /* inputs: */
     KLU_numeric *Numeric,
@@ -20,40 +20,40 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
     /* outputs, all of which must be allocated on input */
 
     /* L */
-    Int *Lp,	    /* size n+1 */
-    Int *Li,	    /* size nnz(L) */
-    double *Lx,	    /* size nnz(L) */
+    Int *Lp,        /* size n+1 */
+    Int *Li,        /* size nnz(L) */
+    double *Lx,     /* size nnz(L) */
 #ifdef COMPLEX
-    double *Lz,	    /* size nnz(L) for the complex case, ignored if real */
+    double *Lz,     /* size nnz(L) for the complex case, ignored if real */
 #endif
 
     /* U */
-    Int *Up,	    /* size n+1 */
-    Int *Ui,	    /* size nnz(U) */
-    double *Ux,	    /* size nnz(U) */
+    Int *Up,        /* size n+1 */
+    Int *Ui,        /* size nnz(U) */
+    double *Ux,     /* size nnz(U) */
 #ifdef COMPLEX
-    double *Uz,	    /* size nnz(U) for the complex case, ignored if real */
+    double *Uz,     /* size nnz(U) for the complex case, ignored if real */
 #endif
 
     /* F */
-    Int *Fp,	    /* size n+1 */
-    Int *Fi,	    /* size nnz(F) */
-    double *Fx,	    /* size nnz(F) */
+    Int *Fp,        /* size n+1 */
+    Int *Fi,        /* size nnz(F) */
+    double *Fx,     /* size nnz(F) */
 #ifdef COMPLEX
-    double *Fz,	    /* size nnz(F) for the complex case, ignored if real */
+    double *Fz,     /* size nnz(F) for the complex case, ignored if real */
 #endif
 
     /* P, row permutation */
-    Int *P,	    /* size n */
+    Int *P,         /* size n */
 
     /* Q, column permutation */
-    Int *Q,	    /* size n */
+    Int *Q,         /* size n */
 
     /* Rs, scale factors */
-    double *Rs,	    /* size n */
+    double *Rs,     /* size n */
 
     /* R, block boundaries */
-    Int *R,	    /* size nblocks+1 */
+    Int *R,         /* size nblocks+1 */
 
     KLU_common *Common
 )
@@ -65,13 +65,13 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
 
     if (Symbolic == NULL || Numeric == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
 
     Common->status = KLU_OK ;
@@ -84,21 +84,21 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (Rs != NULL)
     {
-	if (Numeric->Rs != NULL)
-	{
-	    for (i = 0 ; i < n ; i++)
-	    {
-		Rs [i] = Numeric->Rs [i] ;
-	    }
-	}
-	else
-	{
-	    /* no scaling */
-	    for (i = 0 ; i < n ; i++)
-	    {
-		Rs [i] = 1 ;
-	    }
-	}
+        if (Numeric->Rs != NULL)
+        {
+            for (i = 0 ; i < n ; i++)
+            {
+                Rs [i] = Numeric->Rs [i] ;
+            }
+        }
+        else
+        {
+            /* no scaling */
+            for (i = 0 ; i < n ; i++)
+            {
+                Rs [i] = 1 ;
+            }
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -107,10 +107,10 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (R != NULL)
     {
-	for (block = 0 ; block <= nblocks ; block++)
-	{
-	    R [block] = Symbolic->R [block] ;
-	}
+        for (block = 0 ; block <= nblocks ; block++)
+        {
+            R [block] = Symbolic->R [block] ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -119,10 +119,10 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (P != NULL)
     {
-	for (k = 0 ; k < n ; k++)
-	{
-	    P [k] = Numeric->Pnum [k] ;
-	}
+        for (k = 0 ; k < n ; k++)
+        {
+            P [k] = Numeric->Pnum [k] ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -131,10 +131,10 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (Q != NULL)
     {
-	for (k = 0 ; k < n ; k++)
-	{
-	    Q [k] = Symbolic->Q [k] ;
-	}
+        for (k = 0 ; k < n ; k++)
+        {
+            Q [k] = Symbolic->Q [k] ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -143,58 +143,58 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (Lp != NULL && Li != NULL && Lx != NULL
 #ifdef COMPLEX
-	&& Lz != NULL
+        && Lz != NULL
 #endif
     )
     {
-	nz = 0 ;
-	for (block = 0 ; block < nblocks ; block++)
-	{
-	    k1 = Symbolic->R [block] ;
-	    k2 = Symbolic->R [block+1] ;
-	    nk = k2 - k1 ;
-	    if (nk == 1)
-	    {
-		/* singleton block */
-		Lp [k1] = nz ;
-		Li [nz] = k1 ;
-		Lx [nz] = 1 ;
+        nz = 0 ;
+        for (block = 0 ; block < nblocks ; block++)
+        {
+            k1 = Symbolic->R [block] ;
+            k2 = Symbolic->R [block+1] ;
+            nk = k2 - k1 ;
+            if (nk == 1)
+            {
+                /* singleton block */
+                Lp [k1] = nz ;
+                Li [nz] = k1 ;
+                Lx [nz] = 1 ;
 #ifdef COMPLEX
-		Lz [nz] = 0 ;
+                Lz [nz] = 0 ;
 #endif
-		nz++ ;
-	    }
-	    else
-	    {
-		/* non-singleton block */
-		LU = Numeric->LUbx [block] ;
-		Lip = Numeric->Lip + k1 ;
-		Llen = Numeric->Llen + k1 ;
-		for (kk = 0 ; kk < nk ; kk++)
-		{
-		    Lp [k1+kk] = nz ;
-		    /* add the unit diagonal entry */
-		    Li [nz] = k1 + kk ;
-		    Lx [nz] = 1 ;
+                nz++ ;
+            }
+            else
+            {
+                /* non-singleton block */
+                LU = Numeric->LUbx [block] ;
+                Lip = Numeric->Lip + k1 ;
+                Llen = Numeric->Llen + k1 ;
+                for (kk = 0 ; kk < nk ; kk++)
+                {
+                    Lp [k1+kk] = nz ;
+                    /* add the unit diagonal entry */
+                    Li [nz] = k1 + kk ;
+                    Lx [nz] = 1 ;
 #ifdef COMPLEX
-		    Lz [nz] = 0 ;
+                    Lz [nz] = 0 ;
 #endif
-		    nz++ ;
-		    GET_POINTER (LU, Lip, Llen, Li2, Lx2, kk, len) ;
-		    for (p = 0 ; p < len ; p++)
-		    {
-			Li [nz] = k1 + Li2 [p] ;
-			Lx [nz] = REAL (Lx2 [p]) ;
+                    nz++ ;
+                    GET_POINTER (LU, Lip, Llen, Li2, Lx2, kk, len) ;
+                    for (p = 0 ; p < len ; p++)
+                    {
+                        Li [nz] = k1 + Li2 [p] ;
+                        Lx [nz] = REAL (Lx2 [p]) ;
 #ifdef COMPLEX
-			Lz [nz] = IMAG (Lx2 [p]) ;
+                        Lz [nz] = IMAG (Lx2 [p]) ;
 #endif
-			nz++ ;
-		    }
-		}
-	    }
-	}
-	Lp [n] = nz ;
-	ASSERT (nz == Numeric->lnz) ;
+                        nz++ ;
+                    }
+                }
+            }
+        }
+        Lp [n] = nz ;
+        ASSERT (nz == Numeric->lnz) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -203,59 +203,59 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (Up != NULL && Ui != NULL && Ux != NULL
 #ifdef COMPLEX
-	&& Uz != NULL
+        && Uz != NULL
 #endif
     )
     {
-	nz = 0 ;
-	for (block = 0 ; block < nblocks ; block++)
-	{
-	    k1 = Symbolic->R [block] ;
-	    k2 = Symbolic->R [block+1] ;
-	    nk = k2 - k1 ;
-	    Ukk = ((Entry *) Numeric->Udiag) + k1 ;
-	    if (nk == 1)
-	    {
-		/* singleton block */
-		Up [k1] = nz ;
-		Ui [nz] = k1 ;
-		Ux [nz] = REAL (Ukk [0]) ;
+        nz = 0 ;
+        for (block = 0 ; block < nblocks ; block++)
+        {
+            k1 = Symbolic->R [block] ;
+            k2 = Symbolic->R [block+1] ;
+            nk = k2 - k1 ;
+            Ukk = ((Entry *) Numeric->Udiag) + k1 ;
+            if (nk == 1)
+            {
+                /* singleton block */
+                Up [k1] = nz ;
+                Ui [nz] = k1 ;
+                Ux [nz] = REAL (Ukk [0]) ;
 #ifdef COMPLEX
-		Uz [nz] = IMAG (Ukk [0]) ;
+                Uz [nz] = IMAG (Ukk [0]) ;
 #endif
-		nz++ ;
-	    }
-	    else
-	    {
-		/* non-singleton block */
-		LU = Numeric->LUbx [block] ;
-		Uip = Numeric->Uip + k1 ;
-		Ulen = Numeric->Ulen + k1 ;
-		for (kk = 0 ; kk < nk ; kk++)
-		{
-		    Up [k1+kk] = nz ;
-		    GET_POINTER (LU, Uip, Ulen, Ui2, Ux2, kk, len) ;
-		    for (p = 0 ; p < len ; p++)
-		    {
-			Ui [nz] = k1 + Ui2 [p] ;
-			Ux [nz] = REAL (Ux2 [p]) ;
+                nz++ ;
+            }
+            else
+            {
+                /* non-singleton block */
+                LU = Numeric->LUbx [block] ;
+                Uip = Numeric->Uip + k1 ;
+                Ulen = Numeric->Ulen + k1 ;
+                for (kk = 0 ; kk < nk ; kk++)
+                {
+                    Up [k1+kk] = nz ;
+                    GET_POINTER (LU, Uip, Ulen, Ui2, Ux2, kk, len) ;
+                    for (p = 0 ; p < len ; p++)
+                    {
+                        Ui [nz] = k1 + Ui2 [p] ;
+                        Ux [nz] = REAL (Ux2 [p]) ;
 #ifdef COMPLEX
-			Uz [nz] = IMAG (Ux2 [p]) ;
+                        Uz [nz] = IMAG (Ux2 [p]) ;
 #endif
-			nz++ ;
-		    }
-		    /* add the diagonal entry */
-		    Ui [nz] = k1 + kk ;
-		    Ux [nz] = REAL (Ukk [kk]) ;
+                        nz++ ;
+                    }
+                    /* add the diagonal entry */
+                    Ui [nz] = k1 + kk ;
+                    Ux [nz] = REAL (Ukk [kk]) ;
 #ifdef COMPLEX
-		    Uz [nz] = IMAG (Ukk [kk]) ;
+                    Uz [nz] = IMAG (Ukk [kk]) ;
 #endif
-		    nz++ ;
-		}
-	    }
-	}
-	Up [n] = nz ;
-	ASSERT (nz == Numeric->unz) ;
+                    nz++ ;
+                }
+            }
+        }
+        Up [n] = nz ;
+        ASSERT (nz == Numeric->unz) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -264,26 +264,26 @@ Int KLU_extract	    /* returns TRUE if successful, FALSE otherwise */
 
     if (Fp != NULL && Fi != NULL && Fx != NULL
 #ifdef COMPLEX
-	&& Fz != NULL
+        && Fz != NULL
 #endif
     )
     {
-	for (k = 0 ; k <= n ; k++)
-	{
-	    Fp [k] = Numeric->Offp [k] ;
-	}
-	nz = Fp [n] ;
-	for (k = 0 ; k < nz ; k++)
-	{
-	    Fi [k] = Numeric->Offi [k] ;
-	}
-	for (k = 0 ; k < nz ; k++)
-	{
-	    Fx [k] = REAL (((Entry *) Numeric->Offx) [k]) ;
+        for (k = 0 ; k <= n ; k++)
+        {
+            Fp [k] = Numeric->Offp [k] ;
+        }
+        nz = Fp [n] ;
+        for (k = 0 ; k < nz ; k++)
+        {
+            Fi [k] = Numeric->Offi [k] ;
+        }
+        for (k = 0 ; k < nz ; k++)
+        {
+            Fx [k] = REAL (((Entry *) Numeric->Offx) [k]) ;
 #ifdef COMPLEX
-	    Fz [k] = IMAG (((Entry *) Numeric->Offx) [k]) ;
+            Fz [k] = IMAG (((Entry *) Numeric->Offx) [k]) ;
 #endif
-	}
+        }
     }
 
     return (TRUE) ;
diff --git a/KLU/Source/klu_factor.c b/KLU/Source/klu_factor.c
index 84af42c..8a410e7 100644
--- a/KLU/Source/klu_factor.c
+++ b/KLU/Source/klu_factor.c
@@ -15,8 +15,8 @@
 static void factor2
 (
     /* inputs, not modified */
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
     Entry Ax [ ],
     KLU_symbolic *Symbolic,
 
@@ -28,12 +28,12 @@ static void factor2
     double lsize ;
     double *Lnz, *Rs ;
     Int *P, *Q, *R, *Pnum, *Offp, *Offi, *Pblock, *Pinv, *Iwork,
-	*Lip, *Uip, *Llen, *Ulen ;
+        *Lip, *Uip, *Llen, *Ulen ;
     Entry *Offx, *X, s, *Udiag ;
     Unit **LUbx ;
     Int k1, k2, nk, k, block, oldcol, pend, oldrow, n, lnz, unz, p, newrow,
-	nblocks, poff, nzoff, lnz_block, unz_block, scale, max_lnz_block,
-	max_unz_block ;
+        nblocks, poff, nzoff, lnz_block, unz_block, scale, max_lnz_block,
+        max_unz_block ;
 
     /* ---------------------------------------------------------------------- */
     /* initializations */
@@ -62,9 +62,9 @@ static void factor2
 
     Rs = Numeric->Rs ;
     Pinv = Numeric->Pinv ;
-    X = (Entry *) Numeric->Xwork ;		/* X is of size n */
-    Iwork = Numeric->Iwork ;			/* 5*maxblock for KLU_factor */
-						/* 1*maxblock for Pblock */
+    X = (Entry *) Numeric->Xwork ;              /* X is of size n */
+    Iwork = Numeric->Iwork ;                    /* 5*maxblock for KLU_factor */
+                                                /* 1*maxblock for Pblock */
     Pblock = Iwork + 5*((size_t) Symbolic->maxblock) ;
     Common->nrealloc = 0 ;
     scale = Common->scale ;
@@ -77,13 +77,13 @@ static void factor2
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++)
     {
-	Pinv [k] = EMPTY ;
+        Pinv [k] = EMPTY ;
     }
 #endif
     for (k = 0 ; k < n ; k++)
     {
-	ASSERT (P [k] >= 0 && P [k] < n) ;
-	Pinv [P [k]] = k ;
+        ASSERT (P [k] >= 0 && P [k] < n) ;
+        Pinv [P [k]] = k ;
     }
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++) ASSERT (Pinv [k] != EMPTY) ;
@@ -100,25 +100,25 @@ static void factor2
 
     if (scale >= 0)
     {
-	/* use Pnum as workspace. NOTE: scale factors are not yet permuted
-	 * according to the final pivot row ordering, so Rs [oldrow] is the
-	 * scale factor for A (oldrow,:), for the user's matrix A.  Pnum is
-	 * used as workspace in KLU_scale.  When the factorization is done,
-	 * the scale factors are permuted according to the final pivot row
-	 * permutation, so that Rs [k] is the scale factor for the kth row of
-	 * A(p,q) where p and q are the final row and column permutations. */
-	KLU_scale (scale, n, Ap, Ai, (double *) Ax, Rs, Pnum, Common) ;
-	if (Common->status < KLU_OK)
-	{
-	    /* matrix is invalid */
-	    return ;
-	}
+        /* use Pnum as workspace. NOTE: scale factors are not yet permuted
+         * according to the final pivot row ordering, so Rs [oldrow] is the
+         * scale factor for A (oldrow,:), for the user's matrix A.  Pnum is
+         * used as workspace in KLU_scale.  When the factorization is done,
+         * the scale factors are permuted according to the final pivot row
+         * permutation, so that Rs [k] is the scale factor for the kth row of
+         * A(p,q) where p and q are the final row and column permutations. */
+        KLU_scale (scale, n, Ap, Ai, (double *) Ax, Rs, Pnum, Common) ;
+        if (Common->status < KLU_OK)
+        {
+            /* matrix is invalid */
+            return ;
+        }
     }
 
 #ifndef NDEBUG
     if (scale > 0)
     {
-	for (k = 0 ; k < n ; k++) PRINTF (("Rs [%d] %g\n", k, Rs [k])) ;
+        for (k = 0 ; k < n ; k++) PRINTF (("Rs [%d] %g\n", k, Rs [k])) ;
     }
 #endif
 
@@ -129,164 +129,164 @@ static void factor2
     for (block = 0 ; block < nblocks ; block++)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* the block is from rows/columns k1 to k2-1 */
-	/* ------------------------------------------------------------------ */
-
-	k1 = R [block] ;
-	k2 = R [block+1] ;
-	nk = k2 - k1 ;
-	PRINTF (("FACTOR BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1,k2-1,nk)) ;
-
-	if (nk == 1)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* singleton case */
-	    /* -------------------------------------------------------------- */
-
-	    poff = Offp [k1] ;
-	    oldcol = Q [k1] ;
-	    pend = Ap [oldcol+1] ;
-	    CLEAR (s) ;
-
-	    if (scale <= 0)
-	    {
-		/* no scaling */
-		for (p = Ap [oldcol] ; p < pend ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    newrow = Pinv [oldrow] ;
-		    if (newrow < k1)
-		    {
-			Offi [poff] = oldrow ;
-			Offx [poff] = Ax [p] ;
-			poff++ ;
-		    }
-		    else
-		    {
-			ASSERT (newrow == k1) ;
-			PRINTF (("singleton block %d", block)) ;
-			PRINT_ENTRY (Ax [p]) ;
-			s = Ax [p] ;
-		    }
-		}
-	    }
-	    else
-	    {
-		/* row scaling.  NOTE: scale factors are not yet permuted
-		 * according to the pivot row permutation, so Rs [oldrow] is
-		 * used below.  When the factorization is done, the scale
-		 * factors are permuted, so that Rs [newrow] will be used in
-		 * klu_solve, klu_tsolve, and klu_rgrowth */
-		for (p = Ap [oldcol] ; p < pend ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    newrow = Pinv [oldrow] ;
-		    if (newrow < k1)
-		    {
-			Offi [poff] = oldrow ;
-			/* Offx [poff] = Ax [p] / Rs [oldrow] ; */
-			SCALE_DIV_ASSIGN (Offx [poff], Ax [p], Rs [oldrow]) ;
-			poff++ ;
-		    }
-		    else
-		    {
-			ASSERT (newrow == k1) ;
-			PRINTF (("singleton block %d ", block)) ;
-			PRINT_ENTRY (Ax[p]) ;
-			SCALE_DIV_ASSIGN (s, Ax [p], Rs [oldrow]) ;
-		    }
-		}
-	    }
-
-	    Udiag [k1] = s ;
-
-	    if (IS_ZERO (s))
-	    {
-		/* singular singleton */
-		Common->status = KLU_SINGULAR ;
-		Common->numerical_rank = k1 ;
-		Common->singular_col = oldcol ;
-		if (Common->halt_if_singular)
-		{
-		    return ;
-		}
-	    }
-
-	    Offp [k1+1] = poff ;
-	    Pnum [k1] = P [k1] ;
-	    lnz++ ;
-	    unz++ ;
-
-	}
-	else
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* construct and factorize the kth block */
-	    /* -------------------------------------------------------------- */
-
-	    if (Lnz [block] < 0)
-	    {
-		/* COLAMD was used - no estimate of fill-in */
-		/* use 10 times the nnz in A, plus n */
-		lsize = -(Common->initmem) ;
-	    }
-	    else
-	    {
-		lsize = Common->initmem_amd * Lnz [block] + nk ;
-	    }
-
-	    /* allocates 1 arrays: LUbx [block] */
-	    Numeric->LUsize [block] = KLU_kernel_factor (nk, Ap, Ai, Ax, Q,
-		    lsize, &LUbx [block], Udiag + k1, Llen + k1, Ulen + k1,
-		    Lip + k1, Uip + k1, Pblock, &lnz_block, &unz_block,
-		    X, Iwork, k1, Pinv, Rs, Offp, Offi, Offx, Common) ;
-
-	    if (Common->status < KLU_OK ||
-	       (Common->status == KLU_SINGULAR && Common->halt_if_singular))
-	    {
-		/* out of memory, invalid inputs, or singular */
-		return ;
-	    }
-
-	    PRINTF (("\n----------------------- L %d:\n", block)) ;
-	    ASSERT (KLU_valid_LU (nk, TRUE, Lip+k1, Llen+k1, LUbx [block])) ;
-	    PRINTF (("\n----------------------- U %d:\n", block)) ;
-	    ASSERT (KLU_valid_LU (nk, FALSE, Uip+k1, Ulen+k1, LUbx [block])) ;
-
-	    /* -------------------------------------------------------------- */
-	    /* get statistics */
-	    /* -------------------------------------------------------------- */
-
-	    lnz += lnz_block ;
-	    unz += unz_block ;
-	    max_lnz_block = MAX (max_lnz_block, lnz_block) ;
-	    max_unz_block = MAX (max_unz_block, unz_block) ;
-
-	    if (Lnz [block] == EMPTY)
-	    {
-		/* revise estimate for subsequent factorization */
-		Lnz [block] = MAX (lnz_block, unz_block) ;
-	    }
-
-	    /* -------------------------------------------------------------- */
-	    /* combine the klu row ordering with the symbolic pre-ordering */
-	    /* -------------------------------------------------------------- */
-
-	    PRINTF (("Pnum, 1-based:\n")) ;
-	    for (k = 0 ; k < nk ; k++)
-	    {
-		ASSERT (k + k1 < n) ;
-		ASSERT (Pblock [k] + k1 < n) ;
-		Pnum [k + k1] = P [Pblock [k] + k1] ;
-		PRINTF (("Pnum (%d + %d + 1 = %d) = %d + 1 = %d\n",
-		    k, k1, k+k1+1, Pnum [k+k1], Pnum [k+k1]+1)) ;
-	    }
-
-	    /* the local pivot row permutation Pblock is no longer needed */
-	}
+        /* ------------------------------------------------------------------ */
+        /* the block is from rows/columns k1 to k2-1 */
+        /* ------------------------------------------------------------------ */
+
+        k1 = R [block] ;
+        k2 = R [block+1] ;
+        nk = k2 - k1 ;
+        PRINTF (("FACTOR BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1,k2-1,nk)) ;
+
+        if (nk == 1)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* singleton case */
+            /* -------------------------------------------------------------- */
+
+            poff = Offp [k1] ;
+            oldcol = Q [k1] ;
+            pend = Ap [oldcol+1] ;
+            CLEAR (s) ;
+
+            if (scale <= 0)
+            {
+                /* no scaling */
+                for (p = Ap [oldcol] ; p < pend ; p++)
+                {
+                    oldrow = Ai [p] ;
+                    newrow = Pinv [oldrow] ;
+                    if (newrow < k1)
+                    {
+                        Offi [poff] = oldrow ;
+                        Offx [poff] = Ax [p] ;
+                        poff++ ;
+                    }
+                    else
+                    {
+                        ASSERT (newrow == k1) ;
+                        PRINTF (("singleton block %d", block)) ;
+                        PRINT_ENTRY (Ax [p]) ;
+                        s = Ax [p] ;
+                    }
+                }
+            }
+            else
+            {
+                /* row scaling.  NOTE: scale factors are not yet permuted
+                 * according to the pivot row permutation, so Rs [oldrow] is
+                 * used below.  When the factorization is done, the scale
+                 * factors are permuted, so that Rs [newrow] will be used in
+                 * klu_solve, klu_tsolve, and klu_rgrowth */
+                for (p = Ap [oldcol] ; p < pend ; p++)
+                {
+                    oldrow = Ai [p] ;
+                    newrow = Pinv [oldrow] ;
+                    if (newrow < k1)
+                    {
+                        Offi [poff] = oldrow ;
+                        /* Offx [poff] = Ax [p] / Rs [oldrow] ; */
+                        SCALE_DIV_ASSIGN (Offx [poff], Ax [p], Rs [oldrow]) ;
+                        poff++ ;
+                    }
+                    else
+                    {
+                        ASSERT (newrow == k1) ;
+                        PRINTF (("singleton block %d ", block)) ;
+                        PRINT_ENTRY (Ax[p]) ;
+                        SCALE_DIV_ASSIGN (s, Ax [p], Rs [oldrow]) ;
+                    }
+                }
+            }
+
+            Udiag [k1] = s ;
+
+            if (IS_ZERO (s))
+            {
+                /* singular singleton */
+                Common->status = KLU_SINGULAR ;
+                Common->numerical_rank = k1 ;
+                Common->singular_col = oldcol ;
+                if (Common->halt_if_singular)
+                {
+                    return ;
+                }
+            }
+
+            Offp [k1+1] = poff ;
+            Pnum [k1] = P [k1] ;
+            lnz++ ;
+            unz++ ;
+
+        }
+        else
+        {
+
+            /* -------------------------------------------------------------- */
+            /* construct and factorize the kth block */
+            /* -------------------------------------------------------------- */
+
+            if (Lnz [block] < 0)
+            {
+                /* COLAMD was used - no estimate of fill-in */
+                /* use 10 times the nnz in A, plus n */
+                lsize = -(Common->initmem) ;
+            }
+            else
+            {
+                lsize = Common->initmem_amd * Lnz [block] + nk ;
+            }
+
+            /* allocates 1 arrays: LUbx [block] */
+            Numeric->LUsize [block] = KLU_kernel_factor (nk, Ap, Ai, Ax, Q,
+                    lsize, &LUbx [block], Udiag + k1, Llen + k1, Ulen + k1,
+                    Lip + k1, Uip + k1, Pblock, &lnz_block, &unz_block,
+                    X, Iwork, k1, Pinv, Rs, Offp, Offi, Offx, Common) ;
+
+            if (Common->status < KLU_OK ||
+               (Common->status == KLU_SINGULAR && Common->halt_if_singular))
+            {
+                /* out of memory, invalid inputs, or singular */
+                return ;
+            }
+
+            PRINTF (("\n----------------------- L %d:\n", block)) ;
+            ASSERT (KLU_valid_LU (nk, TRUE, Lip+k1, Llen+k1, LUbx [block])) ;
+            PRINTF (("\n----------------------- U %d:\n", block)) ;
+            ASSERT (KLU_valid_LU (nk, FALSE, Uip+k1, Ulen+k1, LUbx [block])) ;
+
+            /* -------------------------------------------------------------- */
+            /* get statistics */
+            /* -------------------------------------------------------------- */
+
+            lnz += lnz_block ;
+            unz += unz_block ;
+            max_lnz_block = MAX (max_lnz_block, lnz_block) ;
+            max_unz_block = MAX (max_unz_block, unz_block) ;
+
+            if (Lnz [block] == EMPTY)
+            {
+                /* revise estimate for subsequent factorization */
+                Lnz [block] = MAX (lnz_block, unz_block) ;
+            }
+
+            /* -------------------------------------------------------------- */
+            /* combine the klu row ordering with the symbolic pre-ordering */
+            /* -------------------------------------------------------------- */
+
+            PRINTF (("Pnum, 1-based:\n")) ;
+            for (k = 0 ; k < nk ; k++)
+            {
+                ASSERT (k + k1 < n) ;
+                ASSERT (Pblock [k] + k1 < n) ;
+                Pnum [k + k1] = P [Pblock [k] + k1] ;
+                PRINTF (("Pnum (%d + %d + 1 = %d) = %d + 1 = %d\n",
+                    k, k1, k+k1+1, Pnum [k+k1], Pnum [k+k1]+1)) ;
+            }
+
+            /* the local pivot row permutation Pblock is no longer needed */
+        }
     }
     ASSERT (nzoff == Offp [n]) ;
     PRINTF (("\n------------------- Off diagonal entries:\n")) ;
@@ -301,13 +301,13 @@ static void factor2
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++)
     {
-	Pinv [k] = EMPTY ;
+        Pinv [k] = EMPTY ;
     }
 #endif
     for (k = 0 ; k < n ; k++)
     {
-	ASSERT (Pnum [k] >= 0 && Pnum [k] < n) ;
-	Pinv [Pnum [k]] = k ;
+        ASSERT (Pnum [k] >= 0 && Pnum [k] < n) ;
+        Pinv [Pnum [k]] = k ;
     }
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++) ASSERT (Pinv [k] != EMPTY) ;
@@ -316,14 +316,14 @@ static void factor2
     /* permute scale factors Rs according to pivotal row order */
     if (scale > 0)
     {
-	for (k = 0 ; k < n ; k++)
-	{
-	    REAL (X [k]) = Rs [Pnum [k]] ;
-	}
-	for (k = 0 ; k < n ; k++)
-	{
-	    Rs [k] = REAL (X [k]) ;
-	}
+        for (k = 0 ; k < n ; k++)
+        {
+            REAL (X [k]) = Rs [Pnum [k]] ;
+        }
+        for (k = 0 ; k < n ; k++)
+        {
+            Rs [k] = REAL (X [k]) ;
+        }
     }
 
     PRINTF (("\n------------------- Off diagonal entries, old:\n")) ;
@@ -332,8 +332,8 @@ static void factor2
     /* apply the pivot row permutations to the off-diagonal entries */
     for (p = 0 ; p < nzoff ; p++)
     {
-	ASSERT (Offi [p] >= 0 && Offi [p] < n) ;
-	Offi [p] = Pinv [Offi [p]] ;
+        ASSERT (Offi [p] >= 0 && Offi [p] < n) ;
+        Offi [p] = Pinv [Offi [p]] ;
     }
 
     PRINTF (("\n------------------- Off diagonal entries, new:\n")) ;
@@ -341,36 +341,36 @@ static void factor2
 
 #ifndef NDEBUG
     {
-	PRINTF (("\n ############# KLU_BTF_FACTOR done, nblocks %d\n",nblocks));
-	Entry ss, *Udiag = Numeric->Udiag ;
-	for (block = 0 ; block < nblocks && Common->status == KLU_OK ; block++)
-	{
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-	    PRINTF (("\n======================KLU_factor output: k1 %d k2 %d nk %d\n",k1,k2,nk)) ;
-	    if (nk == 1)
-	    {
-		PRINTF (("singleton  ")) ;
-		/* ENTRY_PRINT (singleton [block]) ; */
-		ss = Udiag [k1] ;
-		PRINT_ENTRY (ss) ;
-	    }
-	    else
-	    {
-		Int *Lip, *Uip, *Llen, *Ulen ;
-		Unit *LU ;
-		Lip = Numeric->Lip + k1 ;
-		Llen = Numeric->Llen + k1 ;
-		LU = (Unit *) Numeric->LUbx [block] ;
-		PRINTF (("\n---- L block %d\n", block));
-		ASSERT (KLU_valid_LU (nk, TRUE, Lip, Llen, LU)) ;
-		Uip = Numeric->Uip + k1 ;
-		Ulen = Numeric->Ulen + k1 ;
-		PRINTF (("\n---- U block %d\n", block)) ;
-		ASSERT (KLU_valid_LU (nk, FALSE, Uip, Ulen, LU)) ;
-	    }
-	}
+        PRINTF (("\n ############# KLU_BTF_FACTOR done, nblocks %d\n",nblocks));
+        Entry ss, *Udiag = Numeric->Udiag ;
+        for (block = 0 ; block < nblocks && Common->status == KLU_OK ; block++)
+        {
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+            PRINTF (("\n======================KLU_factor output: k1 %d k2 %d nk %d\n",k1,k2,nk)) ;
+            if (nk == 1)
+            {
+                PRINTF (("singleton  ")) ;
+                /* ENTRY_PRINT (singleton [block]) ; */
+                ss = Udiag [k1] ;
+                PRINT_ENTRY (ss) ;
+            }
+            else
+            {
+                Int *Lip, *Uip, *Llen, *Ulen ;
+                Unit *LU ;
+                Lip = Numeric->Lip + k1 ;
+                Llen = Numeric->Llen + k1 ;
+                LU = (Unit *) Numeric->LUbx [block] ;
+                PRINTF (("\n---- L block %d\n", block));
+                ASSERT (KLU_valid_LU (nk, TRUE, Lip, Llen, LU)) ;
+                Uip = Numeric->Uip + k1 ;
+                Ulen = Numeric->Ulen + k1 ;
+                PRINTF (("\n---- U block %d\n", block)) ;
+                ASSERT (KLU_valid_LU (nk, FALSE, Uip, Ulen, LU)) ;
+            }
+        }
     }
 #endif
 }
@@ -381,12 +381,12 @@ static void factor2
 /* === KLU_factor =========================================================== */
 /* ========================================================================== */
 
-KLU_numeric *KLU_factor		/* returns NULL if error, or a valid
-				   KLU_numeric object if successful */
+KLU_numeric *KLU_factor         /* returns NULL if error, or a valid
+                                   KLU_numeric object if successful */
 (
     /* --- inputs --- */
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
     double Ax [ ],
     KLU_symbolic *Symbolic,
     /* -------------- */
@@ -394,13 +394,12 @@ KLU_numeric *KLU_factor		/* returns NULL if error, or a valid
 )
 {
     Int n, nzoff, nblocks, maxblock, k, ok = TRUE ;
-    Int *R ;
     KLU_numeric *Numeric ;
     size_t n1, nzoff1, s, b6, n3 ;
 
     if (Common == NULL)
     {
-	return (NULL) ;
+        return (NULL) ;
     }
     Common->status = KLU_OK ;
     Common->numerical_rank = EMPTY ;
@@ -413,17 +412,16 @@ KLU_numeric *KLU_factor		/* returns NULL if error, or a valid
     /* check for a valid Symbolic object */
     if (Symbolic == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (NULL) ;
+        Common->status = KLU_INVALID ;
+        return (NULL) ;
     }
 
     n = Symbolic->n ;
     nzoff = Symbolic->nzoff ;
     nblocks = Symbolic->nblocks ;
     maxblock = Symbolic->maxblock ;
-    R = Symbolic->R ;
     PRINTF (("KLU_factor:  n %d nzoff %d nblocks %d maxblock %d\n",
-	n, nzoff, nblocks, maxblock)) ;
+        n, nzoff, nblocks, maxblock)) ;
 
     /* ---------------------------------------------------------------------- */
     /* get control parameters and make sure they are in the proper range */
@@ -446,9 +444,9 @@ KLU_numeric *KLU_factor		/* returns NULL if error, or a valid
     Numeric = KLU_malloc (sizeof (KLU_numeric), 1, Common) ;
     if (Common->status < KLU_OK)
     {
-	/* out of memory */
-	Common->status = KLU_OUT_OF_MEMORY ;
-	return (NULL) ;
+        /* out of memory */
+        Common->status = KLU_OUT_OF_MEMORY ;
+        return (NULL) ;
     }
     Numeric->n = n ;
     Numeric->nblocks = nblocks ;
@@ -468,22 +466,22 @@ KLU_numeric *KLU_factor		/* returns NULL if error, or a valid
     Numeric->LUbx = KLU_malloc (nblocks, sizeof (Unit *), Common) ;
     if (Numeric->LUbx != NULL)
     {
-	for (k = 0 ; k < nblocks ; k++)
-	{
-	    Numeric->LUbx [k] = NULL ;
-	}
+        for (k = 0 ; k < nblocks ; k++)
+        {
+            Numeric->LUbx [k] = NULL ;
+        }
     }
 
     Numeric->Udiag = KLU_malloc (n, sizeof (Entry), Common) ;
 
     if (Common->scale > 0)
     {
-	Numeric->Rs = KLU_malloc (n, sizeof (double), Common) ;
+        Numeric->Rs = KLU_malloc (n, sizeof (double), Common) ;
     }
     else
     {
-	/* no scaling */
-	Numeric->Rs = NULL ;
+        /* no scaling */
+        Numeric->Rs = NULL ;
     }
 
     Numeric->Pinv = KLU_malloc (n, sizeof (Int), Common) ;
@@ -504,10 +502,10 @@ KLU_numeric *KLU_factor		/* returns NULL if error, or a valid
     Numeric->Iwork = (Int *) ((Entry *) Numeric->Xwork + n) ;
     if (!ok || Common->status < KLU_OK)
     {
-	/* out of memory or problem too large */
-	Common->status = ok ? KLU_OUT_OF_MEMORY : KLU_TOO_LARGE ;
-	KLU_free_numeric (&Numeric, Common) ;
-	return (NULL) ;
+        /* out of memory or problem too large */
+        Common->status = ok ? KLU_OUT_OF_MEMORY : KLU_TOO_LARGE ;
+        KLU_free_numeric (&Numeric, Common) ;
+        return (NULL) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -522,24 +520,24 @@ KLU_numeric *KLU_factor		/* returns NULL if error, or a valid
 
     if (Common->status < KLU_OK)
     {
-	/* out of memory or inputs invalid */
-	KLU_free_numeric (&Numeric, Common) ;
+        /* out of memory or inputs invalid */
+        KLU_free_numeric (&Numeric, Common) ;
     }
     else if (Common->status == KLU_SINGULAR)
     {
-	if (Common->halt_if_singular)
-	{
-	    /* Matrix is singular, and the Numeric object is only partially
-	     * defined because we halted early.  This is the default case for
-	     * a singular matrix. */
-	    KLU_free_numeric (&Numeric, Common) ;
-	}
+        if (Common->halt_if_singular)
+        {
+            /* Matrix is singular, and the Numeric object is only partially
+             * defined because we halted early.  This is the default case for
+             * a singular matrix. */
+            KLU_free_numeric (&Numeric, Common) ;
+        }
     }
     else if (Common->status == KLU_OK)
     {
-	/* successful non-singular factorization */
-	Common->numerical_rank = n ;
-	Common->singular_col = n ;
+        /* successful non-singular factorization */
+        Common->numerical_rank = n ;
+        Common->singular_col = n ;
     }
     return (Numeric) ;
 }
diff --git a/KLU/Source/klu_free_numeric.c b/KLU/Source/klu_free_numeric.c
index 304da61..cd4f3bd 100644
--- a/KLU/Source/klu_free_numeric.c
+++ b/KLU/Source/klu_free_numeric.c
@@ -9,7 +9,7 @@
 Int KLU_free_numeric
 (
     KLU_numeric **NumericHandle,
-    KLU_common	*Common
+    KLU_common  *Common
 )
 {
     KLU_numeric *Numeric ;
@@ -19,11 +19,11 @@ Int KLU_free_numeric
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     if (NumericHandle == NULL || *NumericHandle == NULL)
     {
-	return (TRUE) ;
+        return (TRUE) ;
     }
 
     Numeric = *NumericHandle ;
@@ -36,11 +36,11 @@ Int KLU_free_numeric
     LUbx = (Unit **) Numeric->LUbx ;
     if (LUbx != NULL)
     {
-	for (block = 0 ; block < nblocks ; block++)
-	{
-	    KLU_free (LUbx [block], LUsize ? LUsize [block] : 0,
-		sizeof (Unit), Common) ;
-	}
+        for (block = 0 ; block < nblocks ; block++)
+        {
+            KLU_free (LUbx [block], LUsize ? LUsize [block] : 0,
+                sizeof (Unit), Common) ;
+        }
     }
 
     KLU_free (Numeric->Pnum, n, sizeof (Int), Common) ;
diff --git a/KLU/Source/klu_free_symbolic.c b/KLU/Source/klu_free_symbolic.c
index 5dad960..20b4000 100644
--- a/KLU/Source/klu_free_symbolic.c
+++ b/KLU/Source/klu_free_symbolic.c
@@ -9,18 +9,18 @@
 Int KLU_free_symbolic
 (
     KLU_symbolic **SymbolicHandle,
-    KLU_common	 *Common
+    KLU_common   *Common
 )
 {
     KLU_symbolic *Symbolic ;
     Int n ;
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     if (SymbolicHandle == NULL || *SymbolicHandle == NULL)
     {
-	return (TRUE) ;
+        return (TRUE) ;
     }
     Symbolic = *SymbolicHandle ;
     n = Symbolic->n ;
diff --git a/KLU/Source/klu_kernel.c b/KLU/Source/klu_kernel.c
index 88611ee..c3a78b4 100644
--- a/KLU/Source/klu_kernel.c
+++ b/KLU/Source/klu_kernel.c
@@ -18,26 +18,26 @@
 static Int dfs
 (
     /* input, not modified on output: */
-    Int j,		/* node at which to start the DFS */
-    Int k,		/* mark value, for the Flag array */
-    Int Pinv [ ],	/* Pinv [i] = k if row i is kth pivot row, or EMPTY if
-			 * row i is not yet pivotal.  */
-    Int Llen [ ],	/* size n, Llen [k] = # nonzeros in column k of L */
-    Int Lip [ ],	/* size n, Lip [k] is position in LU of column k of L */
+    Int j,              /* node at which to start the DFS */
+    Int k,              /* mark value, for the Flag array */
+    Int Pinv [ ],       /* Pinv [i] = k if row i is kth pivot row, or EMPTY if
+                         * row i is not yet pivotal.  */
+    Int Llen [ ],       /* size n, Llen [k] = # nonzeros in column k of L */
+    Int Lip [ ],        /* size n, Lip [k] is position in LU of column k of L */
 
     /* workspace, not defined on input or output */
-    Int Stack [ ],	/* size n */
+    Int Stack [ ],      /* size n */
 
     /* input/output: */
-    Int Flag [ ],	/* Flag [i] == k means i is marked */
-    Int Lpend [ ],	/* for symmetric pruning */
-    Int top,		/* top of stack on input*/
+    Int Flag [ ],       /* Flag [i] == k means i is marked */
+    Int Lpend [ ],      /* for symmetric pruning */
+    Int top,            /* top of stack on input*/
     Unit LU [],
-    Int *Lik,		/* Li row index array of the kth column */
+    Int *Lik,           /* Li row index array of the kth column */
     Int *plength,
 
     /* other, not defined on input or output */
-    Int Ap_pos [ ]	/* keeps track of position in adj list during DFS */
+    Int Ap_pos [ ]      /* keeps track of position in adj list during DFS */
 )
 {
     Int i, pos, jnew, head, l_length ;
@@ -51,61 +51,61 @@ static Int dfs
 
     while (head >= 0)
     {
-	j = Stack [head] ;
-	jnew = Pinv [j] ;
-	ASSERT (jnew >= 0 && jnew < k) ;	/* j is pivotal */
-
-	if (Flag [j] != k)	    /* a node is not yet visited */
-	{
-	    /* first time that j has been visited */
-	    Flag [j] = k ;
-	    PRINTF (("[ start dfs at %d : new %d\n", j, jnew)) ;
-	    /* set Ap_pos [head] to one past the last entry in col j to scan */
-	    Ap_pos [head] =
-		(Lpend [jnew] == EMPTY) ?  Llen [jnew] : Lpend [jnew] ;
-	}
-
-	/* add the adjacent nodes to the recursive stack by iterating through
-	 * until finding another non-visited pivotal node */
-	Li = (Int *) (LU + Lip [jnew]) ;
-	for (pos = --Ap_pos [head] ; pos >= 0 ; --pos)
-	{
-	    i = Li [pos] ;
-	    if (Flag [i] != k)
-	    {
-		/* node i is not yet visited */
-		if (Pinv [i] >= 0)
-		{
-		    /* keep track of where we left off in the scan of the
-		     * adjacency list of node j so we can restart j where we
-		     * left off. */
-		    Ap_pos [head] = pos ;
-
-		    /* node i is pivotal; push it onto the recursive stack
-		     * and immediately break so we can recurse on node i. */
-		    Stack [++head] = i ;
-		    break ;
-		}
-		else
-		{
-		    /* node i is not pivotal (no outgoing edges). */
-		    /* Flag as visited and store directly into L,
-		     * and continue with current node j. */
-    	 	    Flag [i] = k ;
-		    Lik [l_length] = i ;
-	   	    l_length++ ;
-		}
-	    }
-	}
-
-	if (pos == -1)
-	{
-	    /* if all adjacent nodes of j are already visited, pop j from
-	     * recursive stack and push j onto output stack */
-	    head-- ;
-	    Stack[--top] = j ;
-	    PRINTF (("  end   dfs at %d ] head : %d\n", j, head)) ;
-	}
+        j = Stack [head] ;
+        jnew = Pinv [j] ;
+        ASSERT (jnew >= 0 && jnew < k) ;        /* j is pivotal */
+
+        if (Flag [j] != k)          /* a node is not yet visited */
+        {
+            /* first time that j has been visited */
+            Flag [j] = k ;
+            PRINTF (("[ start dfs at %d : new %d\n", j, jnew)) ;
+            /* set Ap_pos [head] to one past the last entry in col j to scan */
+            Ap_pos [head] =
+                (Lpend [jnew] == EMPTY) ?  Llen [jnew] : Lpend [jnew] ;
+        }
+
+        /* add the adjacent nodes to the recursive stack by iterating through
+         * until finding another non-visited pivotal node */
+        Li = (Int *) (LU + Lip [jnew]) ;
+        for (pos = --Ap_pos [head] ; pos >= 0 ; --pos)
+        {
+            i = Li [pos] ;
+            if (Flag [i] != k)
+            {
+                /* node i is not yet visited */
+                if (Pinv [i] >= 0)
+                {
+                    /* keep track of where we left off in the scan of the
+                     * adjacency list of node j so we can restart j where we
+                     * left off. */
+                    Ap_pos [head] = pos ;
+
+                    /* node i is pivotal; push it onto the recursive stack
+                     * and immediately break so we can recurse on node i. */
+                    Stack [++head] = i ;
+                    break ;
+                }
+                else
+                {
+                    /* node i is not pivotal (no outgoing edges). */
+                    /* Flag as visited and store directly into L,
+                     * and continue with current node j. */
+                    Flag [i] = k ;
+                    Lik [l_length] = i ;
+                    l_length++ ;
+                }
+            }
+        }
+
+        if (pos == -1)
+        {
+            /* if all adjacent nodes of j are already visited, pop j from
+             * recursive stack and push j onto output stack */
+            head-- ;
+            Stack[--top] = j ;
+            PRINTF (("  end   dfs at %d ] head : %d\n", j, head)) ;
+        }
     }
 
     *plength = l_length ;
@@ -123,34 +123,34 @@ static Int lsolve_symbolic
 (
     /* input, not modified on output: */
     Int n,              /* L is n-by-n, where n >= 0 */
-    Int k,		/* also used as the mark value, for the Flag array */
+    Int k,              /* also used as the mark value, for the Flag array */
     Int Ap [ ],
     Int Ai [ ],
     Int Q [ ],
-    Int Pinv [ ],	/* Pinv [i] = k if i is kth pivot row, or EMPTY if row i
-			 * is not yet pivotal.  */
+    Int Pinv [ ],       /* Pinv [i] = k if i is kth pivot row, or EMPTY if row i
+                         * is not yet pivotal.  */
 
     /* workspace, not defined on input or output */
-    Int Stack [ ],	/* size n */
+    Int Stack [ ],      /* size n */
 
     /* workspace, defined on input and output */
-    Int Flag [ ],	/* size n.  Initially, all of Flag [0..n-1] < k.  After
-			 * lsolve_symbolic is done, Flag [i] == k if i is in
-			 * the pattern of the output, and Flag [0..n-1] <= k. */
+    Int Flag [ ],       /* size n.  Initially, all of Flag [0..n-1] < k.  After
+                         * lsolve_symbolic is done, Flag [i] == k if i is in
+                         * the pattern of the output, and Flag [0..n-1] <= k. */
 
     /* other */
-    Int Lpend [ ],	/* for symmetric pruning */
-    Int Ap_pos [ ],	/* workspace used in dfs */
+    Int Lpend [ ],      /* for symmetric pruning */
+    Int Ap_pos [ ],     /* workspace used in dfs */
 
-    Unit LU [ ],	/* LU factors (pattern and values) */
-    Int lup,		/* pointer to free space in LU */
-    Int Llen [ ],	/* size n, Llen [k] = # nonzeros in column k of L */
-    Int Lip [ ],	/* size n, Lip [k] is position in LU of column k of L */
+    Unit LU [ ],        /* LU factors (pattern and values) */
+    Int lup,            /* pointer to free space in LU */
+    Int Llen [ ],       /* size n, Llen [k] = # nonzeros in column k of L */
+    Int Lip [ ],        /* size n, Lip [k] is position in LU of column k of L */
 
     /* ---- the following are only used in the BTF case --- */
 
-    Int k1,		/* the block of A is from k1 to k2-1 */
-    Int PSinv [ ]	/* inverse of P from symbolic factorization */
+    Int k1,             /* the block of A is from k1 to k2-1 */
+    Int PSinv [ ]       /* inverse of P from symbolic factorization */
 )
 {
     Int *Lik ;
@@ -164,31 +164,31 @@ static Int lsolve_symbolic
     /* BTF factorization of A (k1:k2-1, k1:k2-1) */
     /* ---------------------------------------------------------------------- */
 
-    kglobal = k + k1 ;	/* column k of the block is col kglobal of A */
-    oldcol = Q [kglobal] ;	/* Q must be present for BTF case */
+    kglobal = k + k1 ;  /* column k of the block is col kglobal of A */
+    oldcol = Q [kglobal] ;      /* Q must be present for BTF case */
     pend = Ap [oldcol+1] ;
     for (p = Ap [oldcol] ; p < pend ; p++)
     {
-	i = PSinv [Ai [p]] - k1 ;
-	if (i < 0) continue ;	/* skip entry outside the block */
-
-	/* (i,k) is an entry in the block.  start a DFS at node i */
-	PRINTF (("\n ===== DFS at node %d in b, inew: %d\n", i, Pinv [i])) ;
-	if (Flag [i] != k)
-	{
-	    if (Pinv [i] >= 0)
-	    {
-		top = dfs (i, k, Pinv, Llen, Lip, Stack, Flag,
-			   Lpend, top, LU, Lik, &l_length, Ap_pos) ;
-	    }
-	    else
-	    {
-		/* i is not pivotal, and not flagged. Flag and put in L */
-		Flag [i] = k ;
-		Lik [l_length] = i ;
-		l_length++;
-	    }
-	}
+        i = PSinv [Ai [p]] - k1 ;
+        if (i < 0) continue ;   /* skip entry outside the block */
+
+        /* (i,k) is an entry in the block.  start a DFS at node i */
+        PRINTF (("\n ===== DFS at node %d in b, inew: %d\n", i, Pinv [i])) ;
+        if (Flag [i] != k)
+        {
+            if (Pinv [i] >= 0)
+            {
+                top = dfs (i, k, Pinv, Llen, Lip, Stack, Flag,
+                           Lpend, top, LU, Lik, &l_length, Ap_pos) ;
+            }
+            else
+            {
+                /* i is not pivotal, and not flagged. Flag and put in L */
+                Flag [i] = k ;
+                Lik [l_length] = i ;
+                l_length++;
+            }
+        }
     }
 
     /* If Llen [k] is zero, the matrix is structurally singular */
@@ -208,11 +208,11 @@ static Int lsolve_symbolic
 static void construct_column
 (
     /* inputs, not modified on output */
-    Int k,	    /* the column of A (or the column of the block) to get */
+    Int k,          /* the column of A (or the column of the block) to get */
     Int Ap [ ],
     Int Ai [ ],
     Entry Ax [ ],
-    Int Q [ ],	    /* column pre-ordering */
+    Int Q [ ],      /* column pre-ordering */
 
     /* zero on input, modified on output */
     Entry X [ ],
@@ -220,10 +220,10 @@ static void construct_column
     /* ---- the following are only used in the BTF case --- */
 
     /* inputs, not modified on output */
-    Int k1,	    /* the block of A is from k1 to k2-1 */
+    Int k1,         /* the block of A is from k1 to k2-1 */
     Int PSinv [ ],  /* inverse of P from symbolic factorization */
     double Rs [ ],  /* scale factors for A */
-    Int scale,	    /* 0: no scaling, nonzero: scale the rows with Rs */
+    Int scale,      /* 0: no scaling, nonzero: scale the rows with Rs */
 
     /* inputs, modified on output */
     Int Offp [ ],   /* off-diagonal matrix (modified by this routine) */
@@ -238,55 +238,55 @@ static void construct_column
     /* Scale and scatter the column into X. */
     /* ---------------------------------------------------------------------- */
 
-    kglobal = k + k1 ;		/* column k of the block is col kglobal of A */
-    poff = Offp [kglobal] ;	/* start of off-diagonal column */
+    kglobal = k + k1 ;          /* column k of the block is col kglobal of A */
+    poff = Offp [kglobal] ;     /* start of off-diagonal column */
     oldcol = Q [kglobal] ;
     pend = Ap [oldcol+1] ;
 
     if (scale <= 0)
     {
-	/* no scaling */
-	for (p = Ap [oldcol] ; p < pend ; p++)
-	{
-	    oldrow = Ai [p] ;
-	    i = PSinv [oldrow] - k1 ;
-	    aik = Ax [p] ;
-	    if (i < 0)
-	    {
-		/* this is an entry in the off-diagonal part */
-		Offi [poff] = oldrow ;
-		Offx [poff] = aik ;
-		poff++ ;
-	    }
-	    else
-	    {
-		/* (i,k) is an entry in the block.  scatter into X */
-		X [i] = aik ;
-	    }
-	}
+        /* no scaling */
+        for (p = Ap [oldcol] ; p < pend ; p++)
+        {
+            oldrow = Ai [p] ;
+            i = PSinv [oldrow] - k1 ;
+            aik = Ax [p] ;
+            if (i < 0)
+            {
+                /* this is an entry in the off-diagonal part */
+                Offi [poff] = oldrow ;
+                Offx [poff] = aik ;
+                poff++ ;
+            }
+            else
+            {
+                /* (i,k) is an entry in the block.  scatter into X */
+                X [i] = aik ;
+            }
+        }
     }
     else
     {
-	/* row scaling */
-	for (p = Ap [oldcol] ; p < pend ; p++)
-	{
-	    oldrow = Ai [p] ;
-	    i = PSinv [oldrow] - k1 ;
-	    aik = Ax [p] ;
-	    SCALE_DIV (aik, Rs [oldrow]) ;
-	    if (i < 0)
-	    {
-		/* this is an entry in the off-diagonal part */
-		Offi [poff] = oldrow ;
-		Offx [poff] = aik ;
-		poff++ ;
-	    }
-	    else
-	    {
-		/* (i,k) is an entry in the block.  scatter into X */
-		X [i] = aik ;
-	    }
-	}
+        /* row scaling */
+        for (p = Ap [oldcol] ; p < pend ; p++)
+        {
+            oldrow = Ai [p] ;
+            i = PSinv [oldrow] - k1 ;
+            aik = Ax [p] ;
+            SCALE_DIV (aik, Rs [oldrow]) ;
+            if (i < 0)
+            {
+                /* this is an entry in the off-diagonal part */
+                Offi [poff] = oldrow ;
+                Offx [poff] = aik ;
+                poff++ ;
+            }
+            else
+            {
+                /* (i,k) is an entry in the block.  scatter into X */
+                X [i] = aik ;
+            }
+        }
     }
 
     Offp [kglobal+1] = poff ;   /* start of the next col of off-diag part */
@@ -305,19 +305,19 @@ static void construct_column
 static void lsolve_numeric
 (
     /* input, not modified on output: */
-    Int Pinv [ ],	/* Pinv [i] = k if i is kth pivot row, or EMPTY if row i
-			 * is not yet pivotal.  */
-    Unit *LU,		/* LU factors (pattern and values) */
-    Int Stack [ ],	/* stack for dfs */
-    Int Lip [ ],	/* size n, Lip [k] is position in LU of column k of L */
-    Int top,		/* top of stack on input */
-    Int n,		/* A is n-by-n */
-    Int Llen [ ],	/* size n, Llen [k] = # nonzeros in column k of L */
+    Int Pinv [ ],       /* Pinv [i] = k if i is kth pivot row, or EMPTY if row i
+                         * is not yet pivotal.  */
+    Unit *LU,           /* LU factors (pattern and values) */
+    Int Stack [ ],      /* stack for dfs */
+    Int Lip [ ],        /* size n, Lip [k] is position in LU of column k of L */
+    Int top,            /* top of stack on input */
+    Int n,              /* A is n-by-n */
+    Int Llen [ ],       /* size n, Llen [k] = # nonzeros in column k of L */
 
     /* output, must be zero on input: */
-    Entry X [ ]	/* size n, initially zero.  On output,
-		 * X [Ui [up1..up-1]] and X [Li [lp1..lp-1]]
-		 * contains the solution. */
+    Entry X [ ] /* size n, initially zero.  On output,
+                 * X [Ui [up1..up-1]] and X [Li [lp1..lp-1]]
+                 * contains the solution. */
 
 )
 {
@@ -329,18 +329,18 @@ static void lsolve_numeric
     /* solve Lx=b */
     for (s = top ; s < n ; s++)
     {
-	/* forward solve with column j of L */
- 	j = Stack [s] ;
-	jnew = Pinv [j] ;
-	ASSERT (jnew >= 0) ;
-	xj = X [j] ;
-	GET_POINTER (LU, Lip, Llen, Li, Lx, jnew, len) ;
-	ASSERT (Lip [jnew] <= Lip [jnew+1]) ;
-	for (p = 0 ; p < len ; p++)
-	{
-	    /*X [Li [p]] -= Lx [p] * xj ; */
-	    MULT_SUB (X [Li [p]], Lx [p], xj) ;
-	}
+        /* forward solve with column j of L */
+        j = Stack [s] ;
+        jnew = Pinv [j] ;
+        ASSERT (jnew >= 0) ;
+        xj = X [j] ;
+        GET_POINTER (LU, Lip, Llen, Li, Lx, jnew, len) ;
+        ASSERT (Lip [jnew] <= Lip [jnew+1]) ;
+        for (p = 0 ; p < len ; p++)
+        {
+            /*X [Li [p]] -= Lx [p] * xj ; */
+            MULT_SUB (X [Li [p]], Lx [p], xj) ;
+        }
     }
 }
 
@@ -359,14 +359,14 @@ static Int lpivot
     double *p_abs_pivot,
     double tol,
     Entry X [ ],
-    Unit *LU,		/* LU factors (pattern and values) */
+    Unit *LU,           /* LU factors (pattern and values) */
     Int Lip [ ],
     Int Llen [ ],
     Int k,
     Int n,
 
-    Int Pinv [ ],	/* Pinv [i] = k if row i is kth pivot row, or EMPTY if
-			 * row i is not yet pivotal.  */
+    Int Pinv [ ],       /* Pinv [i] = k if row i is kth pivot row, or EMPTY if
+                         * row i is not yet pivotal.  */
 
     Int *p_firstrow,
     KLU_common *Common
@@ -379,29 +379,29 @@ static Int lpivot
     pivrow = EMPTY ;
     if (Llen [k] == 0)
     {
-	/* matrix is structurally singular */
-	if (Common->halt_if_singular)
-	{
-	    return (FALSE) ;
-	}
-	for (firstrow = *p_firstrow ; firstrow < n ; firstrow++)
-	{
-	    PRINTF (("check %d\n", firstrow)) ;
-	    if (Pinv [firstrow] < 0)
-	    {
-		/* found the lowest-numbered non-pivotal row.  Pick it. */
-		pivrow = firstrow ;
-		PRINTF (("Got pivotal row: %d\n", pivrow)) ;
-		break ;
-	    }
-	}
-	ASSERT (pivrow >= 0 && pivrow < n) ;
-	CLEAR (pivot) ;
-	*p_pivrow = pivrow ;
-	*p_pivot = pivot ;
-	*p_abs_pivot = 0 ;
-	*p_firstrow = firstrow ;
-	return (FALSE) ;
+        /* matrix is structurally singular */
+        if (Common->halt_if_singular)
+        {
+            return (FALSE) ;
+        }
+        for (firstrow = *p_firstrow ; firstrow < n ; firstrow++)
+        {
+            PRINTF (("check %d\n", firstrow)) ;
+            if (Pinv [firstrow] < 0)
+            {
+                /* found the lowest-numbered non-pivotal row.  Pick it. */
+                pivrow = firstrow ;
+                PRINTF (("Got pivotal row: %d\n", pivrow)) ;
+                break ;
+            }
+        }
+        ASSERT (pivrow >= 0 && pivrow < n) ;
+        CLEAR (pivot) ;
+        *p_pivrow = pivrow ;
+        *p_pivot = pivot ;
+        *p_abs_pivot = 0 ;
+        *p_firstrow = firstrow ;
+        return (FALSE) ;
     }
 
     pdiag = EMPTY ;
@@ -418,27 +418,27 @@ static Int lpivot
     /* look in Li [0 ..Llen [k] - 1 ] for a pivot row */
     for (p = 0 ; p < len ; p++)
     {
-	/* gather the entry from X and store in L */
-	i = Li [p] ;
-	x = X [i] ;
-	CLEAR (X [i]) ;
-
-	Lx [p] = x ;
-	/* xabs = ABS (x) ; */
-	ABS (xabs, x) ;
-
-	/* find the diagonal */
-	if (i == diagrow)
-	{
-	    pdiag = p ;
-	}
-
-	/* find the partial-pivoting choice */
-	if (xabs > abs_pivot)
-	{
-	    abs_pivot = xabs ;
-	    ppivrow = p ;
-	}
+        /* gather the entry from X and store in L */
+        i = Li [p] ;
+        x = X [i] ;
+        CLEAR (X [i]) ;
+
+        Lx [p] = x ;
+        /* xabs = ABS (x) ; */
+        ABS (xabs, x) ;
+
+        /* find the diagonal */
+        if (i == diagrow)
+        {
+            pdiag = p ;
+        }
+
+        /* find the partial-pivoting choice */
+        if (xabs > abs_pivot)
+        {
+            abs_pivot = xabs ;
+            ppivrow = p ;
+        }
     }
 
     /* xabs = ABS (X [last_row_index]) ;*/
@@ -452,29 +452,29 @@ static Int lpivot
     /* compare the diagonal with the largest entry */
     if (last_row_index == diagrow)
     {
-	if (xabs >= tol * abs_pivot)
-	{
-    	    abs_pivot = xabs ;
+        if (xabs >= tol * abs_pivot)
+        {
+            abs_pivot = xabs ;
             ppivrow = EMPTY ;
         }
     }
     else if (pdiag != EMPTY)
     {
-	/* xabs = ABS (Lx [pdiag]) ;*/
-	ABS (xabs, Lx [pdiag]) ;
-	if (xabs >= tol * abs_pivot)
-	{
-	    /* the diagonal is large enough */
-	    abs_pivot = xabs ;
-	    ppivrow = pdiag ;
-	}
+        /* xabs = ABS (Lx [pdiag]) ;*/
+        ABS (xabs, Lx [pdiag]) ;
+        if (xabs >= tol * abs_pivot)
+        {
+            /* the diagonal is large enough */
+            abs_pivot = xabs ;
+            ppivrow = pdiag ;
+        }
     }
 
     if (ppivrow != EMPTY)
     {
         pivrow = Li [ppivrow] ;
         pivot  = Lx [ppivrow] ;
-	/* overwrite the ppivrow values with last index values */
+        /* overwrite the ppivrow values with last index values */
         Li [ppivrow] = last_row_index ;
         Lx [ppivrow] = X [last_row_index] ;
     }
@@ -492,15 +492,15 @@ static Int lpivot
 
     if (IS_ZERO (pivot) && Common->halt_if_singular)
     {
-	/* numerically singular case */
-	return (FALSE) ;
+        /* numerically singular case */
+        return (FALSE) ;
     }
 
     /* divide L by the pivot value */
     for (p = 0 ; p < Llen [k] ; p++)
     {
-	/* Lx [p] /= pivot ; */
-	DIV (Lx [p], Lx [p], pivot) ;
+        /* Lx [p] /= pivot ; */
+        DIV (Lx [p], Lx [p], pivot) ;
     }
 
     return (TRUE) ;
@@ -515,22 +515,22 @@ static Int lpivot
 static void prune
 (
     /* input/output: */
-    Int Lpend [ ],	/* Lpend [j] marks symmetric pruning point for L(:,j) */
+    Int Lpend [ ],      /* Lpend [j] marks symmetric pruning point for L(:,j) */
 
     /* input: */
-    Int Pinv [ ],	/* Pinv [i] = k if row i is kth pivot row, or EMPTY if
-			 * row i is not yet pivotal.  */
-    Int k,		/* prune using column k of U */
-    Int pivrow,		/* current pivot row */
+    Int Pinv [ ],       /* Pinv [i] = k if row i is kth pivot row, or EMPTY if
+                         * row i is not yet pivotal.  */
+    Int k,              /* prune using column k of U */
+    Int pivrow,         /* current pivot row */
 
     /* input/output: */
-    Unit *LU,		/* LU factors (pattern and values) */
+    Unit *LU,           /* LU factors (pattern and values) */
 
     /* input */
-    Int Uip [ ],	/* size n, column pointers for U */
-    Int Lip [ ],	/* size n, column pointers for L */
-    Int Ulen [ ],	/* size n, column length of U */
-    Int Llen [ ]	/* size n, column length of L */
+    Int Uip [ ],        /* size n, column pointers for U */
+    Int Lip [ ],        /* size n, column pointers for L */
+    Int Ulen [ ],       /* size n, column length of U */
+    Int Llen [ ]        /* size n, column length of L */
 )
 {
     Entry x ;
@@ -539,82 +539,83 @@ static void prune
     Int p, i, j, p2, phead, ptail, llen, ulen ;
 
     /* check to see if any column of L can be pruned */
+    /* Ux is set but not used.  This OK. */
     GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, ulen) ;
     for (p = 0 ; p < ulen ; p++)
     {
-	j = Ui [p] ;
-	ASSERT (j < k) ;
-	PRINTF (("%d is pruned: %d. Lpend[j] %d Lip[j+1] %d\n",
-	    j, Lpend [j] != EMPTY, Lpend [j], Lip [j+1])) ;
-	if (Lpend [j] == EMPTY)
-	{
-	    /* scan column j of L for the pivot row */
+        j = Ui [p] ;
+        ASSERT (j < k) ;
+        PRINTF (("%d is pruned: %d. Lpend[j] %d Lip[j+1] %d\n",
+            j, Lpend [j] != EMPTY, Lpend [j], Lip [j+1])) ;
+        if (Lpend [j] == EMPTY)
+        {
+            /* scan column j of L for the pivot row */
             GET_POINTER (LU, Lip, Llen, Li, Lx, j, llen) ;
-	    for (p2 = 0 ; p2 < llen ; p2++)
-	    {
-		if (pivrow == Li [p2])
-		{
-		    /* found it!  This column can be pruned */
+            for (p2 = 0 ; p2 < llen ; p2++)
+            {
+                if (pivrow == Li [p2])
+                {
+                    /* found it!  This column can be pruned */
 #ifndef NDEBUG
-		    PRINTF (("==== PRUNE: col j %d of L\n", j)) ;
-		    {
-			Int p3 ;
-			for (p3 = 0 ; p3 < Llen [j] ; p3++)
-			{
-			    PRINTF (("before: %i  pivotal: %d\n", Li [p3],
-					Pinv [Li [p3]] >= 0)) ;
-			}
-		    }
+                    PRINTF (("==== PRUNE: col j %d of L\n", j)) ;
+                    {
+                        Int p3 ;
+                        for (p3 = 0 ; p3 < Llen [j] ; p3++)
+                        {
+                            PRINTF (("before: %i  pivotal: %d\n", Li [p3],
+                                        Pinv [Li [p3]] >= 0)) ;
+                        }
+                    }
 #endif
 
-		    /* partition column j of L.  The unit diagonal of L
-		     * is not stored in the column of L. */
-		    phead = 0 ;
-		    ptail = Llen [j] ;
-		    while (phead < ptail)
-		    {
-			i = Li [phead] ;
-			if (Pinv [i] >= 0)
-			{
-			    /* leave at the head */
-			    phead++ ;
-			}
-			else
-			{
-			    /* swap with the tail */
-			    ptail-- ;
-			    Li [phead] = Li [ptail] ;
-			    Li [ptail] = i ;
-			    x = Lx [phead] ;
-			    Lx [phead] = Lx [ptail] ;
-			    Lx [ptail] = x ;
-			}
-		    }
-
-		    /* set Lpend to one past the last entry in the
-		     * first part of the column of L.  Entries in
-		     * Li [0 ... Lpend [j]-1] are the only part of
-		     * column j of L that needs to be scanned in the DFS.
-		     * Lpend [j] was EMPTY; setting it >= 0 also flags
-		     * column j as pruned. */
-		    Lpend [j] = ptail ;
+                    /* partition column j of L.  The unit diagonal of L
+                     * is not stored in the column of L. */
+                    phead = 0 ;
+                    ptail = Llen [j] ;
+                    while (phead < ptail)
+                    {
+                        i = Li [phead] ;
+                        if (Pinv [i] >= 0)
+                        {
+                            /* leave at the head */
+                            phead++ ;
+                        }
+                        else
+                        {
+                            /* swap with the tail */
+                            ptail-- ;
+                            Li [phead] = Li [ptail] ;
+                            Li [ptail] = i ;
+                            x = Lx [phead] ;
+                            Lx [phead] = Lx [ptail] ;
+                            Lx [ptail] = x ;
+                        }
+                    }
+
+                    /* set Lpend to one past the last entry in the
+                     * first part of the column of L.  Entries in
+                     * Li [0 ... Lpend [j]-1] are the only part of
+                     * column j of L that needs to be scanned in the DFS.
+                     * Lpend [j] was EMPTY; setting it >= 0 also flags
+                     * column j as pruned. */
+                    Lpend [j] = ptail ;
 
 #ifndef NDEBUG
-		    {
-			Int p3 ;
-			for (p3 = 0 ; p3 < Llen [j] ; p3++)
-			{
-			    if (p3 == Lpend [j]) PRINTF (("----\n")) ;
-			    PRINTF (("after: %i  pivotal: %d\n", Li [p3],
-					Pinv [Li [p3]] >= 0)) ;
-			}
-		    }
+                    {
+                        Int p3 ;
+                        for (p3 = 0 ; p3 < Llen [j] ; p3++)
+                        {
+                            if (p3 == Lpend [j]) PRINTF (("----\n")) ;
+                            PRINTF (("after: %i  pivotal: %d\n", Li [p3],
+                                        Pinv [Li [p3]] >= 0)) ;
+                        }
+                    }
 #endif
 
-		    break ;
-		}
-	    }
-	}
+                    break ;
+                }
+            }
+        }
     }
 }
 
@@ -626,41 +627,41 @@ static void prune
 size_t KLU_kernel   /* final size of LU on output */
 (
     /* input, not modified */
-    Int n,	    /* A is n-by-n */
-    Int Ap [ ],	    /* size n+1, column pointers for A */
-    Int Ai [ ],	    /* size nz = Ap [n], row indices for A */
+    Int n,          /* A is n-by-n */
+    Int Ap [ ],     /* size n+1, column pointers for A */
+    Int Ai [ ],     /* size nz = Ap [n], row indices for A */
     Entry Ax [ ],   /* size nz, values of A */
-    Int Q [ ],	    /* size n, optional input permutation */
+    Int Q [ ],      /* size n, optional input permutation */
     size_t lusize,  /* initial size of LU on input */
 
     /* output, not defined on input */
     Int Pinv [ ],   /* size n, inverse row permutation, where Pinv [i] = k if
-		     * row i is the kth pivot row */
-    Int P [ ],	    /* size n, row permutation, where P [k] = i if row i is the
-		     * kth pivot row. */
-    Unit **p_LU,	/* LU array, size lusize on input */
-    Entry Udiag [ ],	/* size n, diagonal of U */
+                     * row i is the kth pivot row */
+    Int P [ ],      /* size n, row permutation, where P [k] = i if row i is the
+                     * kth pivot row. */
+    Unit **p_LU,        /* LU array, size lusize on input */
+    Entry Udiag [ ],    /* size n, diagonal of U */
     Int Llen [ ],       /* size n, column length of L */
-    Int Ulen [ ],	/* size n, column length of U */
-    Int Lip [ ],	/* size n, column pointers for L */
-    Int Uip [ ],	/* size n, column pointers for U */
-    Int *lnz,		/* size of L*/
-    Int *unz,		/* size of U*/
+    Int Ulen [ ],       /* size n, column length of U */
+    Int Lip [ ],        /* size n, column pointers for L */
+    Int Uip [ ],        /* size n, column pointers for U */
+    Int *lnz,           /* size of L*/
+    Int *unz,           /* size of U*/
     /* workspace, not defined on input */
     Entry X [ ],    /* size n, undefined on input, zero on output */
 
     /* workspace, not defined on input or output */
     Int Stack [ ],  /* size n */
     Int Flag [ ],   /* size n */
-    Int Ap_pos [ ],	/* size n */
+    Int Ap_pos [ ],     /* size n */
 
     /* other workspace: */
-    Int Lpend [ ],		    /* size n workspace, for pruning only */
+    Int Lpend [ ],                  /* size n workspace, for pruning only */
 
     /* inputs, not modified on output */
-    Int k1,	    	/* the block of A is from k1 to k2-1 */
-    Int PSinv [ ],  	/* inverse of P from symbolic factorization */
-    double Rs [ ],  	/* scale factors for A */
+    Int k1,             /* the block of A is from k1 to k2-1 */
+    Int PSinv [ ],      /* inverse of P from symbolic factorization */
+    double Rs [ ],      /* scale factors for A */
 
     /* inputs, modified on output */
     Int Offp [ ],   /* off-diagonal matrix (modified by this routine) */
@@ -674,7 +675,7 @@ size_t KLU_kernel   /* final size of LU on output */
     double abs_pivot, xsize, nunits, tol, memgrow ;
     Entry *Ux ;
     Int *Li, *Ui ;
-    Unit *LU ;		/* LU factors (pattern and values) */
+    Unit *LU ;          /* LU factors (pattern and values) */
     Int k, p, i, j, pivrow = 0, kbar, diagrow, firstrow, lup, top, scale, len ;
     size_t newlusize ;
 
@@ -707,10 +708,10 @@ size_t KLU_kernel   /* final size of LU on output */
 
     for (k = 0 ; k < n ; k++)
     {
-	/* X [k] = 0 ; */
-	CLEAR (X [k]) ;
-	Flag [k] = EMPTY ;
-	Lpend [k] = EMPTY ;	/* flag k as not pruned */
+        /* X [k] = 0 ; */
+        CLEAR (X [k]) ;
+        Flag [k] = EMPTY ;
+        Lpend [k] = EMPTY ;     /* flag k as not pruned */
     }
 
     /* ---------------------------------------------------------------------- */
@@ -720,8 +721,8 @@ size_t KLU_kernel   /* final size of LU on output */
     /* PSinv does the symmetric permutation, so don't do it here */
     for (k = 0 ; k < n ; k++)
     {
-	P [k] = k ;
-	Pinv [k] = FLIP (k) ;	/* mark all rows as non-pivotal */
+        P [k] = k ;
+        Pinv [k] = FLIP (k) ;   /* mark all rows as non-pivotal */
     }
     /* initialize the construction of the off-diagonal matrix */
     Offp [0] = 0 ;
@@ -734,7 +735,7 @@ size_t KLU_kernel   /* final size of LU on output */
 #ifndef NDEBUG
     for (k = 0 ; k < n ; k++)
     {
-	PRINTF (("Initial P [%d] = %d\n", k, P [k])) ;
+        PRINTF (("Initial P [%d] = %d\n", k, P [k])) ;
     }
 #endif
 
@@ -745,153 +746,153 @@ size_t KLU_kernel   /* final size of LU on output */
     for (k = 0 ; k < n ; k++)
     {
 
-	PRINTF (("\n\n==================================== k: %d\n", k)) ;
+        PRINTF (("\n\n==================================== k: %d\n", k)) ;
 
-	/* ------------------------------------------------------------------ */
-	/* determine if LU factors have grown too big */
-	/* ------------------------------------------------------------------ */
+        /* ------------------------------------------------------------------ */
+        /* determine if LU factors have grown too big */
+        /* ------------------------------------------------------------------ */
 
-	/* (n - k) entries for L and k entries for U */
-	nunits = DUNITS (Int, n - k) + DUNITS (Int, k) +
-		 DUNITS (Entry, n - k) + DUNITS (Entry, k) ;
+        /* (n - k) entries for L and k entries for U */
+        nunits = DUNITS (Int, n - k) + DUNITS (Int, k) +
+                 DUNITS (Entry, n - k) + DUNITS (Entry, k) ;
 
         /* LU can grow by at most 'nunits' entries if the column is dense */
         PRINTF (("lup %d lusize %g lup+nunits: %g\n", lup, (double) lusize,
-	    lup+nunits));
-	xsize = ((double) lup) + nunits ;
-	if (xsize > (double) lusize)
+            lup+nunits));
+        xsize = ((double) lup) + nunits ;
+        if (xsize > (double) lusize)
         {
             /* check here how much to grow */
-	    xsize = (memgrow * ((double) lusize) + 4*n + 1) ;
+            xsize = (memgrow * ((double) lusize) + 4*n + 1) ;
             if (INT_OVERFLOW (xsize))
             {
                 PRINTF (("Matrix is too large (Int overflow)\n")) ;
-		Common->status = KLU_TOO_LARGE ;
+                Common->status = KLU_TOO_LARGE ;
                 return (lusize) ;
             }
             newlusize = memgrow * lusize + 2*n + 1 ;
-	    /* Future work: retry mechanism in case of malloc failure */
-	    LU = KLU_realloc (newlusize, lusize, sizeof (Unit), LU, Common) ;
-	    Common->nrealloc++ ;
+            /* Future work: retry mechanism in case of malloc failure */
+            LU = KLU_realloc (newlusize, lusize, sizeof (Unit), LU, Common) ;
+            Common->nrealloc++ ;
             *p_LU = LU ;
             if (Common->status == KLU_OUT_OF_MEMORY)
             {
                 PRINTF (("Matrix is too large (LU)\n")) ;
                 return (lusize) ;
             }
-	    lusize = newlusize ;
+            lusize = newlusize ;
             PRINTF (("inc LU to %d done\n", lusize)) ;
         }
 
-	/* ------------------------------------------------------------------ */
-	/* start the kth column of L and U */
-	/* ------------------------------------------------------------------ */
+        /* ------------------------------------------------------------------ */
+        /* start the kth column of L and U */
+        /* ------------------------------------------------------------------ */
 
-	Lip [k] = lup ;
+        Lip [k] = lup ;
 
-	/* ------------------------------------------------------------------ */
-	/* compute the nonzero pattern of the kth column of L and U */
-	/* ------------------------------------------------------------------ */
+        /* ------------------------------------------------------------------ */
+        /* compute the nonzero pattern of the kth column of L and U */
+        /* ------------------------------------------------------------------ */
 
 #ifndef NDEBUG
-	for (i = 0 ; i < n ; i++)
-	{
-	    ASSERT (Flag [i] < k) ;
-	    /* ASSERT (X [i] == 0) ; */
-	    ASSERT (IS_ZERO (X [i])) ;
-	}
+        for (i = 0 ; i < n ; i++)
+        {
+            ASSERT (Flag [i] < k) ;
+            /* ASSERT (X [i] == 0) ; */
+            ASSERT (IS_ZERO (X [i])) ;
+        }
 #endif
 
-	top = lsolve_symbolic (n, k, Ap, Ai, Q, Pinv, Stack, Flag,
-		    Lpend, Ap_pos, LU, lup, Llen, Lip, k1, PSinv) ;
+        top = lsolve_symbolic (n, k, Ap, Ai, Q, Pinv, Stack, Flag,
+                    Lpend, Ap_pos, LU, lup, Llen, Lip, k1, PSinv) ;
 
 #ifndef NDEBUG
-	PRINTF (("--- in U:\n")) ;
-	for (p = top ; p < n ; p++)
-	{
-	    PRINTF (("pattern of X for U: %d : %d pivot row: %d\n",
-		p, Stack [p], Pinv [Stack [p]])) ;
-	    ASSERT (Flag [Stack [p]] == k) ;
-	}
-	PRINTF (("--- in L:\n")) ;
-	Li = (Int *) (LU + Lip [k]);
-	for (p = 0 ; p < Llen [k] ; p++)
-	{
-	    PRINTF (("pattern of X in L: %d : %d pivot row: %d\n",
-		p, Li [p], Pinv [Li [p]])) ;
-	    ASSERT (Flag [Li [p]] == k) ;
-	}
-	p = 0 ;
-	for (i = 0 ; i < n ; i++)
-	{
-	    ASSERT (Flag [i] <= k) ;
-	    if (Flag [i] == k) p++ ;
-	}
+        PRINTF (("--- in U:\n")) ;
+        for (p = top ; p < n ; p++)
+        {
+            PRINTF (("pattern of X for U: %d : %d pivot row: %d\n",
+                p, Stack [p], Pinv [Stack [p]])) ;
+            ASSERT (Flag [Stack [p]] == k) ;
+        }
+        PRINTF (("--- in L:\n")) ;
+        Li = (Int *) (LU + Lip [k]);
+        for (p = 0 ; p < Llen [k] ; p++)
+        {
+            PRINTF (("pattern of X in L: %d : %d pivot row: %d\n",
+                p, Li [p], Pinv [Li [p]])) ;
+            ASSERT (Flag [Li [p]] == k) ;
+        }
+        p = 0 ;
+        for (i = 0 ; i < n ; i++)
+        {
+            ASSERT (Flag [i] <= k) ;
+            if (Flag [i] == k) p++ ;
+        }
 #endif
 
-	/* ------------------------------------------------------------------ */
-	/* get the column of the matrix to factorize and scatter into X */
-	/* ------------------------------------------------------------------ */
+        /* ------------------------------------------------------------------ */
+        /* get the column of the matrix to factorize and scatter into X */
+        /* ------------------------------------------------------------------ */
 
-	construct_column (k, Ap, Ai, Ax, Q, X,
-	    k1, PSinv, Rs, scale, Offp, Offi, Offx) ;
+        construct_column (k, Ap, Ai, Ax, Q, X,
+            k1, PSinv, Rs, scale, Offp, Offi, Offx) ;
 
-	/* ------------------------------------------------------------------ */
-	/* compute the numerical values of the kth column (s = L \ A (:,k)) */
-	/* ------------------------------------------------------------------ */
+        /* ------------------------------------------------------------------ */
+        /* compute the numerical values of the kth column (s = L \ A (:,k)) */
+        /* ------------------------------------------------------------------ */
 
-	lsolve_numeric (Pinv, LU, Stack, Lip, top, n, Llen, X) ;
+        lsolve_numeric (Pinv, LU, Stack, Lip, top, n, Llen, X) ;
 
 #ifndef NDEBUG
-	for (p = top ; p < n ; p++)
-	{
-	    PRINTF (("X for U %d : ",  Stack [p])) ;
-	    PRINT_ENTRY (X [Stack [p]]) ;
-	}
-	Li = (Int *) (LU + Lip [k]) ;
-	for (p = 0 ; p < Llen [k] ; p++)
-	{
-	    PRINTF (("X for L %d : ", Li [p])) ;
-	    PRINT_ENTRY (X [Li [p]]) ;
-	}
+        for (p = top ; p < n ; p++)
+        {
+            PRINTF (("X for U %d : ",  Stack [p])) ;
+            PRINT_ENTRY (X [Stack [p]]) ;
+        }
+        Li = (Int *) (LU + Lip [k]) ;
+        for (p = 0 ; p < Llen [k] ; p++)
+        {
+            PRINTF (("X for L %d : ", Li [p])) ;
+            PRINT_ENTRY (X [Li [p]]) ;
+        }
 #endif
 
-	/* ------------------------------------------------------------------ */
-	/* partial pivoting with diagonal preference */
-	/* ------------------------------------------------------------------ */
-
-	/* determine what the "diagonal" is */
-	diagrow = P [k] ;   /* might already be pivotal */
-	PRINTF (("k %d, diagrow = %d, UNFLIP (diagrow) = %d\n",
-	    k, diagrow, UNFLIP (diagrow))) ;
-
-	/* find a pivot and scale the pivot column */
-	if (!lpivot (diagrow, &pivrow, &pivot, &abs_pivot, tol, X, LU, Lip,
-		    Llen, k, n, Pinv, &firstrow, Common))
-	{
-	    /* matrix is structurally or numerically singular */
-	    Common->status = KLU_SINGULAR ;
-	    if (Common->numerical_rank == EMPTY)
-	    {
-		Common->numerical_rank = k+k1 ;
-		Common->singular_col = Q [k+k1] ;
-	    }
-	    if (Common->halt_if_singular)
-	    {
-		/* do not continue the factorization */
-		return (lusize) ;
-	    }
-	}
-
-	/* we now have a valid pivot row, even if the column has NaN's or
-	 * has no entries on or below the diagonal at all. */
-	PRINTF (("\nk %d : Pivot row %d : ", k, pivrow)) ;
-	PRINT_ENTRY (pivot) ;
-	ASSERT (pivrow >= 0 && pivrow < n) ;
-	ASSERT (Pinv [pivrow] < 0) ;
-
-	/* set the Uip pointer */
-	Uip [k] = Lip [k] + UNITS (Int, Llen [k]) + UNITS (Entry, Llen [k]) ;
+        /* ------------------------------------------------------------------ */
+        /* partial pivoting with diagonal preference */
+        /* ------------------------------------------------------------------ */
+
+        /* determine what the "diagonal" is */
+        diagrow = P [k] ;   /* might already be pivotal */
+        PRINTF (("k %d, diagrow = %d, UNFLIP (diagrow) = %d\n",
+            k, diagrow, UNFLIP (diagrow))) ;
+
+        /* find a pivot and scale the pivot column */
+        if (!lpivot (diagrow, &pivrow, &pivot, &abs_pivot, tol, X, LU, Lip,
+                    Llen, k, n, Pinv, &firstrow, Common))
+        {
+            /* matrix is structurally or numerically singular */
+            Common->status = KLU_SINGULAR ;
+            if (Common->numerical_rank == EMPTY)
+            {
+                Common->numerical_rank = k+k1 ;
+                Common->singular_col = Q [k+k1] ;
+            }
+            if (Common->halt_if_singular)
+            {
+                /* do not continue the factorization */
+                return (lusize) ;
+            }
+        }
+
+        /* we now have a valid pivot row, even if the column has NaN's or
+         * has no entries on or below the diagonal at all. */
+        PRINTF (("\nk %d : Pivot row %d : ", k, pivrow)) ;
+        PRINT_ENTRY (pivot) ;
+        ASSERT (pivrow >= 0 && pivrow < n) ;
+        ASSERT (Pinv [pivrow] < 0) ;
+
+        /* set the Uip pointer */
+        Uip [k] = Lip [k] + UNITS (Int, Llen [k]) + UNITS (Entry, Llen [k]) ;
 
         /* move the lup pointer to the position where indices of U
          * should be stored */
@@ -900,72 +901,72 @@ size_t KLU_kernel   /* final size of LU on output */
         Ulen [k] = n - top ;
 
         /* extract Stack [top..n-1] to Ui and the values to Ux and clear X */
-	GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+        GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
         for (p = top, i = 0 ; p < n ; p++, i++)
         {
-	    j = Stack [p] ;
-	    Ui [i] = Pinv [j] ;
-	    Ux [i] = X [j] ;
-	    CLEAR (X [j]) ;
+            j = Stack [p] ;
+            Ui [i] = Pinv [j] ;
+            Ux [i] = X [j] ;
+            CLEAR (X [j]) ;
         }
 
         /* position the lu index at the starting point for next column */
         lup += UNITS (Int, Ulen [k]) + UNITS (Entry, Ulen [k]) ;
 
-	/* U(k,k) = pivot */
-	Udiag [k] = pivot ;
-
-	/* ------------------------------------------------------------------ */
-	/* log the pivot permutation */
-	/* ------------------------------------------------------------------ */
-
-	ASSERT (UNFLIP (Pinv [diagrow]) < n) ;
-	ASSERT (P [UNFLIP (Pinv [diagrow])] == diagrow) ;
-
-	if (pivrow != diagrow)
-	{
-	    /* an off-diagonal pivot has been chosen */
-	    Common->noffdiag++ ;
-	    PRINTF ((">>>>>>>>>>>>>>>>> pivrow %d k %d off-diagonal\n",
-			pivrow, k)) ;
-	    if (Pinv [diagrow] < 0)
-	    {
-		/* the former diagonal row index, diagrow, has not yet been
-		 * chosen as a pivot row.  Log this diagrow as the "diagonal"
-		 * entry in the column kbar for which the chosen pivot row,
-		 * pivrow, was originally logged as the "diagonal" */
-		kbar = FLIP (Pinv [pivrow]) ;
-		P [kbar] = diagrow ;
-		Pinv [diagrow] = FLIP (kbar) ;
-	    }
-	}
-	P [k] = pivrow ;
-	Pinv [pivrow] = k ;
+        /* U(k,k) = pivot */
+        Udiag [k] = pivot ;
+
+        /* ------------------------------------------------------------------ */
+        /* log the pivot permutation */
+        /* ------------------------------------------------------------------ */
+
+        ASSERT (UNFLIP (Pinv [diagrow]) < n) ;
+        ASSERT (P [UNFLIP (Pinv [diagrow])] == diagrow) ;
+
+        if (pivrow != diagrow)
+        {
+            /* an off-diagonal pivot has been chosen */
+            Common->noffdiag++ ;
+            PRINTF ((">>>>>>>>>>>>>>>>> pivrow %d k %d off-diagonal\n",
+                        pivrow, k)) ;
+            if (Pinv [diagrow] < 0)
+            {
+                /* the former diagonal row index, diagrow, has not yet been
+                 * chosen as a pivot row.  Log this diagrow as the "diagonal"
+                 * entry in the column kbar for which the chosen pivot row,
+                 * pivrow, was originally logged as the "diagonal" */
+                kbar = FLIP (Pinv [pivrow]) ;
+                P [kbar] = diagrow ;
+                Pinv [diagrow] = FLIP (kbar) ;
+            }
+        }
+        P [k] = pivrow ;
+        Pinv [pivrow] = k ;
 
 #ifndef NDEBUG
-	for (i = 0 ; i < n ; i++) { ASSERT (IS_ZERO (X [i])) ;}
-	GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
-	for (p = 0 ; p < len ; p++)
-	{
-	    PRINTF (("Column %d of U: %d : ", k, Ui [p])) ;
-	    PRINT_ENTRY (Ux [p]) ;
-	}
-	GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
-	for (p = 0 ; p < len ; p++)
-	{
-	    PRINTF (("Column %d of L: %d : ", k, Li [p])) ;
-	    PRINT_ENTRY (Lx [p]) ;
-	}
+        for (i = 0 ; i < n ; i++) { ASSERT (IS_ZERO (X [i])) ;}
+        GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, len) ;
+        for (p = 0 ; p < len ; p++)
+        {
+            PRINTF (("Column %d of U: %d : ", k, Ui [p])) ;
+            PRINT_ENTRY (Ux [p]) ;
+        }
+        GET_POINTER (LU, Lip, Llen, Li, Lx, k, len) ;
+        for (p = 0 ; p < len ; p++)
+        {
+            PRINTF (("Column %d of L: %d : ", k, Li [p])) ;
+            PRINT_ENTRY (Lx [p]) ;
+        }
 #endif
 
-	/* ------------------------------------------------------------------ */
-	/* symmetric pruning */
-	/* ------------------------------------------------------------------ */
+        /* ------------------------------------------------------------------ */
+        /* symmetric pruning */
+        /* ------------------------------------------------------------------ */
 
-	prune (Lpend, Pinv, k, pivrow, LU, Uip, Lip, Ulen, Llen) ;
+        prune (Lpend, Pinv, k, pivrow, LU, Uip, Lip, Ulen, Llen) ;
 
-	*lnz += Llen [k] + 1 ; /* 1 added to lnz for diagonal */
-	*unz += Ulen [k] + 1 ; /* 1 added to unz for diagonal */
+        *lnz += Llen [k] + 1 ; /* 1 added to lnz for diagonal */
+        *unz += Ulen [k] + 1 ; /* 1 added to unz for diagonal */
     }
 
     /* ---------------------------------------------------------------------- */
@@ -974,24 +975,24 @@ size_t KLU_kernel   /* final size of LU on output */
 
     for (p = 0 ; p < n ; p++)
     {
-	Li = (Int *) (LU + Lip [p]) ;
-	for (i = 0 ; i < Llen [p] ; i++)
-	{
-	    Li [i] = Pinv [Li [i]] ;
-	}
+        Li = (Int *) (LU + Lip [p]) ;
+        for (i = 0 ; i < Llen [p] ; i++)
+        {
+            Li [i] = Pinv [Li [i]] ;
+        }
     }
 
 #ifndef NDEBUG
     for (i = 0 ; i < n ; i++)
     {
-	PRINTF (("P [%d] = %d   Pinv [%d] = %d\n", i, P [i], i, Pinv [i])) ;
+        PRINTF (("P [%d] = %d   Pinv [%d] = %d\n", i, P [i], i, Pinv [i])) ;
     }
     for (i = 0 ; i < n ; i++)
     {
-	ASSERT (Pinv [i] >= 0 && Pinv [i] < n) ;
-	ASSERT (P [i] >= 0 && P [i] < n) ;
-	ASSERT (P [Pinv [i]] == i) ;
-	ASSERT (IS_ZERO (X [i])) ;
+        ASSERT (Pinv [i] >= 0 && Pinv [i] < n) ;
+        ASSERT (P [i] >= 0 && P [i] < n) ;
+        ASSERT (P [Pinv [i]] == i) ;
+        ASSERT (IS_ZERO (X [i])) ;
     }
 #endif
 
diff --git a/KLU/Source/klu_memory.c b/KLU/Source/klu_memory.c
index a4fa3b8..d391a08 100644
--- a/KLU/Source/klu_memory.c
+++ b/KLU/Source/klu_memory.c
@@ -4,9 +4,9 @@
 
 /* KLU memory management routines:
  *
- * KLU_malloc			malloc wrapper
- * KLU_free			free wrapper
- * KLU_realloc			realloc wrapper
+ * KLU_malloc                   malloc wrapper
+ * KLU_free                     free wrapper
+ * KLU_realloc                  realloc wrapper
  */
 
 #include "klu_internal.h"
@@ -34,7 +34,7 @@ size_t KLU_mult_size_t (size_t a, size_t k, Int *ok)
     size_t i, s = 0 ;
     for (i = 0 ; i < k ; i++)
     {
-	s = KLU_add_size_t (s, a, ok) ;
+        s = KLU_add_size_t (s, a, ok) ;
     }
     return ((*ok) ? s : ((size_t) -1)) ;
 }
@@ -52,56 +52,53 @@ size_t KLU_mult_size_t (size_t a, size_t k, Int *ok)
  *
  * Usage, for a pointer to Int:
  *
- *	p = KLU_malloc (n, sizeof (Int), Common)
+ *      p = KLU_malloc (n, sizeof (Int), Common)
  *
  * Uses a pointer to the malloc routine (or its equivalent) defined in Common.
  */
 
-void *KLU_malloc	/* returns pointer to the newly malloc'd block */
+void *KLU_malloc        /* returns pointer to the newly malloc'd block */
 (
     /* ---- input ---- */
-    size_t n,		/* number of items */
-    size_t size,	/* size of each item */
+    size_t n,           /* number of items */
+    size_t size,        /* size of each item */
     /* --------------- */
     KLU_common *Common
 )
 {
     void *p ;
-    size_t s ;
-    Int ok = TRUE ;
 
     if (Common == NULL)
     {
-	p = NULL ;
+        p = NULL ;
     }
     else if (size == 0)
     {
-	/* size must be > 0 */
-	Common->status = KLU_INVALID ;
-	p = NULL ;
+        /* size must be > 0 */
+        Common->status = KLU_INVALID ;
+        p = NULL ;
     }
-    else if (n >= INT_MAX)
+    else if (n >= Int_MAX)
     {
-	/* object is too big to allocate; p[i] where i is an Int will not
-	 * be enough. */
-	Common->status = KLU_TOO_LARGE ;
-	p = NULL ;
+        /* object is too big to allocate; p[i] where i is an Int will not
+         * be enough. */
+        Common->status = KLU_TOO_LARGE ;
+        p = NULL ;
     }
     else
     {
-	/* call malloc, or its equivalent */
-	s = KLU_mult_size_t (MAX (1,n), size, &ok) ;
-	p = ok ? ((Common->malloc_memory) (s)) : NULL ;
-	if (p == NULL)
-	{
-	    /* failure: out of memory */
-	    Common->status = KLU_OUT_OF_MEMORY ;
-	}
-	else
-	{
-	    Common->memusage += s ;
-	    Common->mempeak = MAX (Common->mempeak, Common->memusage) ;
-	}
+        /* call malloc, or its equivalent */
+        p = SuiteSparse_malloc (n, size) ;
+        if (p == NULL)
+        {
+            /* failure: out of memory */
+            Common->status = KLU_OUT_OF_MEMORY ;
+        }
+        else
+        {
+            Common->memusage += (MAX (1,n) * size) ;
+            Common->mempeak = MAX (Common->mempeak, Common->memusage) ;
+        }
     }
     return (p) ;
 }
@@ -114,29 +111,26 @@ void *KLU_malloc	/* returns pointer to the newly malloc'd block */
 /* Wrapper around free routine (mxFree for a mexFunction).  Returns NULL,
  * which can be assigned to the pointer being freed, as in:
  *
- *	p = KLU_free (p, n, sizeof (int), Common) ;
+ *      p = KLU_free (p, n, sizeof (int), Common) ;
  */
 
-void *KLU_free		/* always returns NULL */
+void *KLU_free          /* always returns NULL */
 (
     /* ---- in/out --- */
-    void *p,		/* block of memory to free */
+    void *p,            /* block of memory to free */
     /* ---- input --- */
-    size_t n,		/* size of block to free, in # of items */
-    size_t size,	/* size of each item */
+    size_t n,           /* size of block to free, in # of items */
+    size_t size,        /* size of each item */
     /* --------------- */
     KLU_common *Common
 )
 {
-    size_t s ;
-    Int ok = TRUE ;
     if (p != NULL && Common != NULL)
     {
-	/* only free the object if the pointer is not NULL */
-	/* call free, or its equivalent */
-	(Common->free_memory) (p) ;
-	s = KLU_mult_size_t (MAX (1,n), size, &ok) ;
-	Common->memusage -= s ;
+        /* only free the object if the pointer is not NULL */
+        /* call free, or its equivalent */
+        SuiteSparse_free (p) ;
+        Common->memusage -= (MAX (1,n) * size) ;
     }
     /* return NULL, and the caller should assign this to p.  This avoids
      * freeing the same pointer twice. */
@@ -153,7 +147,7 @@ void *KLU_free		/* always returns NULL */
  * block pointed to by p to be MAX(1,nnew)*size in size.  It may return a
  * pointer different than p.  This should be used as (for a pointer to Int):
  *
- *	p = KLU_realloc (nnew, nold, sizeof (Int), p, Common) ;
+ *      p = KLU_realloc (nnew, nold, sizeof (Int), p, Common) ;
  *
  * If p is NULL, this is the same as p = KLU_malloc (...).
  * A size of nnew=0 is treated as nnew=1.
@@ -165,61 +159,58 @@ void *KLU_free		/* always returns NULL */
  * Uses a pointer to the realloc routine (or its equivalent) defined in Common.
  */
 
-void *KLU_realloc	/* returns pointer to reallocated block */
+void *KLU_realloc       /* returns pointer to reallocated block */
 (
     /* ---- input ---- */
-    size_t nnew,	/* requested # of items in reallocated block */
-    size_t nold,	/* old # of items */
-    size_t size,	/* size of each item */
+    size_t nnew,        /* requested # of items in reallocated block */
+    size_t nold,        /* old # of items */
+    size_t size,        /* size of each item */
     /* ---- in/out --- */
-    void *p,		/* block of memory to realloc */
+    void *p,            /* block of memory to realloc */
     /* --------------- */
     KLU_common *Common
 )
 {
     void *pnew ;
-    size_t snew, sold ;
-    Int ok = TRUE ;
+    int ok = TRUE ;
 
     if (Common == NULL)
     {
-	p = NULL ;
+        p = NULL ;
     }
     else if (size == 0)
     {
-	/* size must be > 0 */
-	Common->status = KLU_INVALID ;
-	p = NULL ;
+        /* size must be > 0 */
+        Common->status = KLU_INVALID ;
+        p = NULL ;
     }
     else if (p == NULL)
     {
-	/* A fresh object is being allocated. */
-	p = KLU_malloc (nnew, size, Common) ;
+        /* A fresh object is being allocated. */
+        p = KLU_malloc (nnew, size, Common) ;
     }
-    else if (nnew >= INT_MAX)
+    else if (nnew >= Int_MAX)
     {
-	/* failure: nnew is too big.  Do not change p */
-	Common->status = KLU_TOO_LARGE ;
+        /* failure: nnew is too big.  Do not change p */
+        Common->status = KLU_TOO_LARGE ;
     }
     else
     {
-	/* The object exists, and is changing to some other nonzero size. */
-	/* call realloc, or its equivalent */
-	snew = KLU_mult_size_t (MAX (1,nnew), size, &ok) ;
-	sold = KLU_mult_size_t (MAX (1,nold), size, &ok) ;
-	pnew = ok ? ((Common->realloc_memory) (p, snew)) : NULL ;
-	if (pnew == NULL)
-	{
-	    /* Do not change p, since it still points to allocated memory */
-	    Common->status = KLU_OUT_OF_MEMORY ;
-	}
-	else
-	{
-	    /* success: return the new p and change the size of the block */
-	    Common->memusage += (snew - sold) ;
-	    Common->mempeak = MAX (Common->mempeak, Common->memusage) ;
-	    p = pnew ;
-	}
+        /* The object exists, and is changing to some other nonzero size. */
+        /* call realloc, or its equivalent */
+        pnew = SuiteSparse_realloc (nnew, nold, size, p, &ok) ;
+        if (ok)
+        {
+            /* success: return the new p and change the size of the block */
+            Common->memusage += ((nnew-nold) * size) ;
+            Common->mempeak = MAX (Common->mempeak, Common->memusage) ;
+            p = pnew ;
+        }
+        else
+        {
+            /* Do not change p, since it still points to allocated memory */
+            Common->status = KLU_OUT_OF_MEMORY ;
+        }
     }
     return (p) ;
 }
diff --git a/KLU/Source/klu_refactor.c b/KLU/Source/klu_refactor.c
index 1415788..02539be 100644
--- a/KLU/Source/klu_refactor.c
+++ b/KLU/Source/klu_refactor.c
@@ -15,11 +15,11 @@
 /* === KLU_refactor ========================================================= */
 /* ========================================================================== */
 
-Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
+Int KLU_refactor        /* returns TRUE if successful, FALSE otherwise */
 (
     /* inputs, not modified */
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
     double Ax [ ],
     KLU_symbolic *Symbolic,
 
@@ -31,12 +31,11 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
     Entry ukk, ujk, s ;
     Entry *Offx, *Lx, *Ux, *X, *Az, *Udiag ;
     double *Rs ;
-    Int *P, *Q, *R, *Pnum, *Offp, *Offi, *Ui, *Li, *Pinv, *Lip, *Uip, *Llen,
-	*Ulen ;
+    Int *Q, *R, *Pnum, *Ui, *Li, *Pinv, *Lip, *Uip, *Llen, *Ulen ;
     Unit **LUbx ;
     Unit *LU ;
     Int k1, k2, nk, k, block, oldcol, pend, oldrow, n, p, newrow, scale,
-	nblocks, poff, i, j, up, ulen, llen, maxblock, nzoff ;
+        nblocks, poff, i, j, up, ulen, llen, maxblock, nzoff ;
 
     /* ---------------------------------------------------------------------- */
     /* check inputs */
@@ -44,15 +43,15 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     Common->status = KLU_OK ;
 
     if (Numeric == NULL)
     {
-	/* invalid Numeric object */
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        /* invalid Numeric object */
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
 
     Common->numerical_rank = EMPTY ;
@@ -65,7 +64,6 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
     /* ---------------------------------------------------------------------- */
 
     n = Symbolic->n ;
-    P = Symbolic->P ;
     Q = Symbolic->Q ;
     R = Symbolic->R ;
     nblocks = Symbolic->nblocks ;
@@ -76,8 +74,6 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
     /* ---------------------------------------------------------------------- */
 
     Pnum = Numeric->Pnum ;
-    Offp = Numeric->Offp ;
-    Offi = Numeric->Offi ;
     Offx = (Entry *) Numeric->Offx ;
 
     LUbx = (Unit **) Numeric->LUbx ;
@@ -85,22 +81,22 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
     scale = Common->scale ;
     if (scale > 0)
     {
-	/* factorization was not scaled, but refactorization is scaled */
-	if (Numeric->Rs == NULL)
-	{
-	    Numeric->Rs = KLU_malloc (n, sizeof (double), Common) ;
-	    if (Common->status < KLU_OK)
-	    {
-		Common->status = KLU_OUT_OF_MEMORY ;
-		return (FALSE) ;
-	    }
-	}
+        /* factorization was not scaled, but refactorization is scaled */
+        if (Numeric->Rs == NULL)
+        {
+            Numeric->Rs = KLU_malloc (n, sizeof (double), Common) ;
+            if (Common->status < KLU_OK)
+            {
+                Common->status = KLU_OUT_OF_MEMORY ;
+                return (FALSE) ;
+            }
+        }
     }
     else
     {
-	/* no scaling for refactorization; ensure Numeric->Rs is freed.  This
-	 * does nothing if Numeric->Rs is already NULL. */
-	Numeric->Rs = KLU_free (Numeric->Rs, n, sizeof (double), Common) ;
+        /* no scaling for refactorization; ensure Numeric->Rs is freed.  This
+         * does nothing if Numeric->Rs is already NULL. */
+        Numeric->Rs = KLU_free (Numeric->Rs, n, sizeof (double), Common) ;
     }
     Rs = Numeric->Rs ;
 
@@ -117,11 +113,11 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
     /* do no scale, or check the input matrix, if scale < 0 */
     if (scale >= 0)
     {
-	/* check for out-of-range indices, but do not check for duplicates */
-	if (!KLU_scale (scale, n, Ap, Ai, Ax, Rs, NULL, Common))
-	{
-	    return (FALSE) ;
-	}
+        /* check for out-of-range indices, but do not check for duplicates */
+        if (!KLU_scale (scale, n, Ap, Ai, Ax, Rs, NULL, Common))
+        {
+            return (FALSE) ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -130,8 +126,8 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
 
     for (k = 0 ; k < maxblock ; k++)
     {
-	/* X [k] = 0 */
-	CLEAR (X [k]) ;
+        /* X [k] = 0 */
+        CLEAR (X [k]) ;
     }
 
     poff = 0 ;
@@ -143,282 +139,282 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
     if (scale <= 0)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* no scaling */
-	/* ------------------------------------------------------------------ */
-
-	for (block = 0 ; block < nblocks ; block++)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* the block is from rows/columns k1 to k2-1 */
-	    /* -------------------------------------------------------------- */
-
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-
-	    if (nk == 1)
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* singleton case */
-		/* ---------------------------------------------------------- */
-
-		oldcol = Q [k1] ;
-		pend = Ap [oldcol+1] ;
-		CLEAR (s) ;
-		for (p = Ap [oldcol] ; p < pend ; p++)
-		{
-		    newrow = Pinv [Ai [p]] - k1 ;
-		    if (newrow < 0 && poff < nzoff)
-		    {
-			/* entry in off-diagonal block */
-			Offx [poff] = Az [p] ;
-			poff++ ;
-		    }
-		    else
-		    {
-			/* singleton */
-			s = Az [p] ;
-		    }
-		}
-		Udiag [k1] = s ;
-
-	    }
-	    else
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* construct and factor the kth block */
-		/* ---------------------------------------------------------- */
-
-		Lip  = Numeric->Lip  + k1 ;
-		Llen = Numeric->Llen + k1 ;
-		Uip  = Numeric->Uip  + k1 ;
-		Ulen = Numeric->Ulen + k1 ;
-		LU = LUbx [block] ;
-
-		for (k = 0 ; k < nk ; k++)
-		{
-
-		    /* ------------------------------------------------------ */
-		    /* scatter kth column of the block into workspace X */
-		    /* ------------------------------------------------------ */
-
-		    oldcol = Q [k+k1] ;
-		    pend = Ap [oldcol+1] ;
-		    for (p = Ap [oldcol] ; p < pend ; p++)
-		    {
-			newrow = Pinv [Ai [p]] - k1 ;
-			if (newrow < 0 && poff < nzoff)
-			{
-			    /* entry in off-diagonal block */
-			    Offx [poff] = Az [p] ;
-			    poff++ ;
-			}
-			else
-			{
-			    /* (newrow,k) is an entry in the block */
-			    X [newrow] = Az [p] ;
-			}
-		    }
-
-		    /* ------------------------------------------------------ */
-		    /* compute kth column of U, and update kth column of A */
-		    /* ------------------------------------------------------ */
-
-		    GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, ulen) ;
-		    for (up = 0 ; up < ulen ; up++)
-		    {
-			j = Ui [up] ;
-			ujk = X [j] ;
-			/* X [j] = 0 */
-			CLEAR (X [j]) ;
-			Ux [up] = ujk ;
-			GET_POINTER (LU, Lip, Llen, Li, Lx, j, llen) ;
-			for (p = 0 ; p < llen ; p++)
-			{
-			    /* X [Li [p]] -= Lx [p] * ujk */
-			    MULT_SUB (X [Li [p]], Lx [p], ujk) ;
-			}
-		    }
-		    /* get the diagonal entry of U */
-		    ukk = X [k] ;
-		    /* X [k] = 0 */
-		    CLEAR (X [k]) ;
-		    /* singular case */
-		    if (IS_ZERO (ukk))
-		    {
-			/* matrix is numerically singular */
-			Common->status = KLU_SINGULAR ;
-			if (Common->numerical_rank == EMPTY)
-			{
-			    Common->numerical_rank = k+k1 ;
-			    Common->singular_col = Q [k+k1] ;
-			}
-			if (Common->halt_if_singular)
-			{
-			    /* do not continue the factorization */
-			    return (FALSE) ;
-			}
-		    }
-		    Udiag [k+k1] = ukk ;
-		    /* gather and divide by pivot to get kth column of L */
-		    GET_POINTER (LU, Lip, Llen, Li, Lx, k, llen) ;
-		    for (p = 0 ; p < llen ; p++)
-		    {
-			i = Li [p] ;
-			DIV (Lx [p], X [i], ukk) ;
-			CLEAR (X [i]) ;
-		    }
-
-		}
-	    }
-	}
+        /* ------------------------------------------------------------------ */
+        /* no scaling */
+        /* ------------------------------------------------------------------ */
+
+        for (block = 0 ; block < nblocks ; block++)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* the block is from rows/columns k1 to k2-1 */
+            /* -------------------------------------------------------------- */
+
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+
+            if (nk == 1)
+            {
+
+                /* ---------------------------------------------------------- */
+                /* singleton case */
+                /* ---------------------------------------------------------- */
+
+                oldcol = Q [k1] ;
+                pend = Ap [oldcol+1] ;
+                CLEAR (s) ;
+                for (p = Ap [oldcol] ; p < pend ; p++)
+                {
+                    newrow = Pinv [Ai [p]] - k1 ;
+                    if (newrow < 0 && poff < nzoff)
+                    {
+                        /* entry in off-diagonal block */
+                        Offx [poff] = Az [p] ;
+                        poff++ ;
+                    }
+                    else
+                    {
+                        /* singleton */
+                        s = Az [p] ;
+                    }
+                }
+                Udiag [k1] = s ;
+
+            }
+            else
+            {
+
+                /* ---------------------------------------------------------- */
+                /* construct and factor the kth block */
+                /* ---------------------------------------------------------- */
+
+                Lip  = Numeric->Lip  + k1 ;
+                Llen = Numeric->Llen + k1 ;
+                Uip  = Numeric->Uip  + k1 ;
+                Ulen = Numeric->Ulen + k1 ;
+                LU = LUbx [block] ;
+
+                for (k = 0 ; k < nk ; k++)
+                {
+
+                    /* ------------------------------------------------------ */
+                    /* scatter kth column of the block into workspace X */
+                    /* ------------------------------------------------------ */
+
+                    oldcol = Q [k+k1] ;
+                    pend = Ap [oldcol+1] ;
+                    for (p = Ap [oldcol] ; p < pend ; p++)
+                    {
+                        newrow = Pinv [Ai [p]] - k1 ;
+                        if (newrow < 0 && poff < nzoff)
+                        {
+                            /* entry in off-diagonal block */
+                            Offx [poff] = Az [p] ;
+                            poff++ ;
+                        }
+                        else
+                        {
+                            /* (newrow,k) is an entry in the block */
+                            X [newrow] = Az [p] ;
+                        }
+                    }
+
+                    /* ------------------------------------------------------ */
+                    /* compute kth column of U, and update kth column of A */
+                    /* ------------------------------------------------------ */
+
+                    GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, ulen) ;
+                    for (up = 0 ; up < ulen ; up++)
+                    {
+                        j = Ui [up] ;
+                        ujk = X [j] ;
+                        /* X [j] = 0 */
+                        CLEAR (X [j]) ;
+                        Ux [up] = ujk ;
+                        GET_POINTER (LU, Lip, Llen, Li, Lx, j, llen) ;
+                        for (p = 0 ; p < llen ; p++)
+                        {
+                            /* X [Li [p]] -= Lx [p] * ujk */
+                            MULT_SUB (X [Li [p]], Lx [p], ujk) ;
+                        }
+                    }
+                    /* get the diagonal entry of U */
+                    ukk = X [k] ;
+                    /* X [k] = 0 */
+                    CLEAR (X [k]) ;
+                    /* singular case */
+                    if (IS_ZERO (ukk))
+                    {
+                        /* matrix is numerically singular */
+                        Common->status = KLU_SINGULAR ;
+                        if (Common->numerical_rank == EMPTY)
+                        {
+                            Common->numerical_rank = k+k1 ;
+                            Common->singular_col = Q [k+k1] ;
+                        }
+                        if (Common->halt_if_singular)
+                        {
+                            /* do not continue the factorization */
+                            return (FALSE) ;
+                        }
+                    }
+                    Udiag [k+k1] = ukk ;
+                    /* gather and divide by pivot to get kth column of L */
+                    GET_POINTER (LU, Lip, Llen, Li, Lx, k, llen) ;
+                    for (p = 0 ; p < llen ; p++)
+                    {
+                        i = Li [p] ;
+                        DIV (Lx [p], X [i], ukk) ;
+                        CLEAR (X [i]) ;
+                    }
+
+                }
+            }
+        }
 
     }
     else
     {
 
-	/* ------------------------------------------------------------------ */
-	/* scaling */
-	/* ------------------------------------------------------------------ */
-
-	for (block = 0 ; block < nblocks ; block++)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* the block is from rows/columns k1 to k2-1 */
-	    /* -------------------------------------------------------------- */
-
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-
-	    if (nk == 1)
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* singleton case */
-		/* ---------------------------------------------------------- */
-
-		oldcol = Q [k1] ;
-		pend = Ap [oldcol+1] ;
-		CLEAR (s) ;
-		for (p = Ap [oldcol] ; p < pend ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    newrow = Pinv [oldrow] - k1 ;
-		    if (newrow < 0 && poff < nzoff)
-		    {
-			/* entry in off-diagonal block */
-			/* Offx [poff] = Az [p] / Rs [oldrow] */
-			SCALE_DIV_ASSIGN (Offx [poff], Az [p], Rs [oldrow]) ;
-			poff++ ;
-		    }
-		    else
-		    {
-			/* singleton */
-			/* s = Az [p] / Rs [oldrow] */
-			SCALE_DIV_ASSIGN (s, Az [p], Rs [oldrow]) ;
-		    }
-		}
-		Udiag [k1] = s ;
-
-	    }
-	    else
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* construct and factor the kth block */
-		/* ---------------------------------------------------------- */
-
-		Lip  = Numeric->Lip  + k1 ;
-		Llen = Numeric->Llen + k1 ;
-		Uip  = Numeric->Uip  + k1 ;
-		Ulen = Numeric->Ulen + k1 ;
-		LU = LUbx [block] ;
-
-		for (k = 0 ; k < nk ; k++)
-		{
-
-		    /* ------------------------------------------------------ */
-		    /* scatter kth column of the block into workspace X */
-		    /* ------------------------------------------------------ */
-
-		    oldcol = Q [k+k1] ;
-		    pend = Ap [oldcol+1] ;
-		    for (p = Ap [oldcol] ; p < pend ; p++)
-		    {
-			oldrow = Ai [p] ;
-			newrow = Pinv [oldrow] - k1 ;
-			if (newrow < 0 && poff < nzoff)
-			{
-			    /* entry in off-diagonal part */
-			    /* Offx [poff] = Az [p] / Rs [oldrow] */
-			    SCALE_DIV_ASSIGN (Offx [poff], Az [p], Rs [oldrow]);
-			    poff++ ;
-			}
-			else
-			{
-			    /* (newrow,k) is an entry in the block */
-			    /* X [newrow] = Az [p] / Rs [oldrow] */
-			    SCALE_DIV_ASSIGN (X [newrow], Az [p], Rs [oldrow]) ;
-			}
-		    }
-
-		    /* ------------------------------------------------------ */
-		    /* compute kth column of U, and update kth column of A */
-		    /* ------------------------------------------------------ */
-
-		    GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, ulen) ;
-		    for (up = 0 ; up < ulen ; up++)
-		    {
-			j = Ui [up] ;
-			ujk = X [j] ;
-			/* X [j] = 0 */
-			CLEAR (X [j]) ;
-			Ux [up] = ujk ;
-			GET_POINTER (LU, Lip, Llen, Li, Lx, j, llen) ;
-			for (p = 0 ; p < llen ; p++)
-			{
-			    /* X [Li [p]] -= Lx [p] * ujk */
-			    MULT_SUB (X [Li [p]], Lx [p], ujk) ;
-			}
-		    }
-		    /* get the diagonal entry of U */
-		    ukk = X [k] ;
-		    /* X [k] = 0 */
-		    CLEAR (X [k]) ;
-		    /* singular case */
-		    if (IS_ZERO (ukk))
-		    {
-			/* matrix is numerically singular */
-			Common->status = KLU_SINGULAR ;
-			if (Common->numerical_rank == EMPTY)
-			{
-			    Common->numerical_rank = k+k1 ;
-			    Common->singular_col = Q [k+k1] ;
-			}
-			if (Common->halt_if_singular)
-			{
-			    /* do not continue the factorization */
-			    return (FALSE) ;
-			}
-		    }
-		    Udiag [k+k1] = ukk ;
-		    /* gather and divide by pivot to get kth column of L */
-		    GET_POINTER (LU, Lip, Llen, Li, Lx, k, llen) ;
-		    for (p = 0 ; p < llen ; p++)
-		    {
-			i = Li [p] ;
-			DIV (Lx [p], X [i], ukk) ;
-			CLEAR (X [i]) ;
-		    }
-		}
-	    }
-	}
+        /* ------------------------------------------------------------------ */
+        /* scaling */
+        /* ------------------------------------------------------------------ */
+
+        for (block = 0 ; block < nblocks ; block++)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* the block is from rows/columns k1 to k2-1 */
+            /* -------------------------------------------------------------- */
+
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+
+            if (nk == 1)
+            {
+
+                /* ---------------------------------------------------------- */
+                /* singleton case */
+                /* ---------------------------------------------------------- */
+
+                oldcol = Q [k1] ;
+                pend = Ap [oldcol+1] ;
+                CLEAR (s) ;
+                for (p = Ap [oldcol] ; p < pend ; p++)
+                {
+                    oldrow = Ai [p] ;
+                    newrow = Pinv [oldrow] - k1 ;
+                    if (newrow < 0 && poff < nzoff)
+                    {
+                        /* entry in off-diagonal block */
+                        /* Offx [poff] = Az [p] / Rs [oldrow] */
+                        SCALE_DIV_ASSIGN (Offx [poff], Az [p], Rs [oldrow]) ;
+                        poff++ ;
+                    }
+                    else
+                    {
+                        /* singleton */
+                        /* s = Az [p] / Rs [oldrow] */
+                        SCALE_DIV_ASSIGN (s, Az [p], Rs [oldrow]) ;
+                    }
+                }
+                Udiag [k1] = s ;
+
+            }
+            else
+            {
+
+                /* ---------------------------------------------------------- */
+                /* construct and factor the kth block */
+                /* ---------------------------------------------------------- */
+
+                Lip  = Numeric->Lip  + k1 ;
+                Llen = Numeric->Llen + k1 ;
+                Uip  = Numeric->Uip  + k1 ;
+                Ulen = Numeric->Ulen + k1 ;
+                LU = LUbx [block] ;
+
+                for (k = 0 ; k < nk ; k++)
+                {
+
+                    /* ------------------------------------------------------ */
+                    /* scatter kth column of the block into workspace X */
+                    /* ------------------------------------------------------ */
+
+                    oldcol = Q [k+k1] ;
+                    pend = Ap [oldcol+1] ;
+                    for (p = Ap [oldcol] ; p < pend ; p++)
+                    {
+                        oldrow = Ai [p] ;
+                        newrow = Pinv [oldrow] - k1 ;
+                        if (newrow < 0 && poff < nzoff)
+                        {
+                            /* entry in off-diagonal part */
+                            /* Offx [poff] = Az [p] / Rs [oldrow] */
+                            SCALE_DIV_ASSIGN (Offx [poff], Az [p], Rs [oldrow]);
+                            poff++ ;
+                        }
+                        else
+                        {
+                            /* (newrow,k) is an entry in the block */
+                            /* X [newrow] = Az [p] / Rs [oldrow] */
+                            SCALE_DIV_ASSIGN (X [newrow], Az [p], Rs [oldrow]) ;
+                        }
+                    }
+
+                    /* ------------------------------------------------------ */
+                    /* compute kth column of U, and update kth column of A */
+                    /* ------------------------------------------------------ */
+
+                    GET_POINTER (LU, Uip, Ulen, Ui, Ux, k, ulen) ;
+                    for (up = 0 ; up < ulen ; up++)
+                    {
+                        j = Ui [up] ;
+                        ujk = X [j] ;
+                        /* X [j] = 0 */
+                        CLEAR (X [j]) ;
+                        Ux [up] = ujk ;
+                        GET_POINTER (LU, Lip, Llen, Li, Lx, j, llen) ;
+                        for (p = 0 ; p < llen ; p++)
+                        {
+                            /* X [Li [p]] -= Lx [p] * ujk */
+                            MULT_SUB (X [Li [p]], Lx [p], ujk) ;
+                        }
+                    }
+                    /* get the diagonal entry of U */
+                    ukk = X [k] ;
+                    /* X [k] = 0 */
+                    CLEAR (X [k]) ;
+                    /* singular case */
+                    if (IS_ZERO (ukk))
+                    {
+                        /* matrix is numerically singular */
+                        Common->status = KLU_SINGULAR ;
+                        if (Common->numerical_rank == EMPTY)
+                        {
+                            Common->numerical_rank = k+k1 ;
+                            Common->singular_col = Q [k+k1] ;
+                        }
+                        if (Common->halt_if_singular)
+                        {
+                            /* do not continue the factorization */
+                            return (FALSE) ;
+                        }
+                    }
+                    Udiag [k+k1] = ukk ;
+                    /* gather and divide by pivot to get kth column of L */
+                    GET_POINTER (LU, Lip, Llen, Li, Lx, k, llen) ;
+                    for (p = 0 ; p < llen ; p++)
+                    {
+                        i = Li [p] ;
+                        DIV (Lx [p], X [i], ukk) ;
+                        CLEAR (X [i]) ;
+                    }
+                }
+            }
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -427,50 +423,50 @@ Int KLU_refactor	/* returns TRUE if successful, FALSE otherwise */
 
     if (scale > 0)
     {
-	for (k = 0 ; k < n ; k++)
-	{
-	    REAL (X [k]) = Rs [Pnum [k]] ;
-	}
-	for (k = 0 ; k < n ; k++)
-	{
-	    Rs [k] = REAL (X [k]) ;
-	}
+        for (k = 0 ; k < n ; k++)
+        {
+            REAL (X [k]) = Rs [Pnum [k]] ;
+        }
+        for (k = 0 ; k < n ; k++)
+        {
+            Rs [k] = REAL (X [k]) ;
+        }
     }
 
 #ifndef NDEBUG
-    ASSERT (Offp [n] == poff) ;
+    ASSERT (Numeric->Offp [n] == poff) ;
     ASSERT (Symbolic->nzoff == poff) ;
     PRINTF (("\n------------------- Off diagonal entries, new:\n")) ;
-    ASSERT (KLU_valid (n, Offp, Offi, Offx)) ;
+    ASSERT (KLU_valid (n, Numeric->Offp, Numeric->Offi, Offx)) ;
     if (Common->status == KLU_OK)
     {
-	PRINTF (("\n ########### KLU_BTF_REFACTOR done, nblocks %d\n",nblocks));
-	for (block = 0 ; block < nblocks ; block++)
-	{
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-	    PRINTF ((
-		"\n================KLU_refactor output: k1 %d k2 %d nk %d\n",
-		k1, k2, nk)) ;
-	    if (nk == 1)
-	    {
-		PRINTF (("singleton  ")) ;
-		PRINT_ENTRY (Udiag [k1]) ;
-	    }
-	    else
-	    {
-		Lip = Numeric->Lip + k1 ;
+        PRINTF (("\n ########### KLU_BTF_REFACTOR done, nblocks %d\n",nblocks));
+        for (block = 0 ; block < nblocks ; block++)
+        {
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+            PRINTF ((
+                "\n================KLU_refactor output: k1 %d k2 %d nk %d\n",
+                k1, k2, nk)) ;
+            if (nk == 1)
+            {
+                PRINTF (("singleton  ")) ;
+                PRINT_ENTRY (Udiag [k1]) ;
+            }
+            else
+            {
+                Lip = Numeric->Lip + k1 ;
                 Llen = Numeric->Llen + k1 ;
                 LU = (Unit *) Numeric->LUbx [block] ;
-		PRINTF (("\n---- L block %d\n", block)) ;
-		ASSERT (KLU_valid_LU (nk, TRUE, Lip, Llen, LU)) ;
-		Uip = Numeric->Uip + k1 ;
+                PRINTF (("\n---- L block %d\n", block)) ;
+                ASSERT (KLU_valid_LU (nk, TRUE, Lip, Llen, LU)) ;
+                Uip = Numeric->Uip + k1 ;
                 Ulen = Numeric->Ulen + k1 ;
-		PRINTF (("\n---- U block %d\n", block)) ;
-		ASSERT (KLU_valid_LU (nk, FALSE, Uip, Ulen, LU)) ;
-	    }
-	}
+                PRINTF (("\n---- U block %d\n", block)) ;
+                ASSERT (KLU_valid_LU (nk, FALSE, Uip, Ulen, LU)) ;
+            }
+        }
     }
 #endif
 
diff --git a/KLU/Source/klu_scale.c b/KLU/Source/klu_scale.c
index 8a65ce0..4796120 100644
--- a/KLU/Source/klu_scale.c
+++ b/KLU/Source/klu_scale.c
@@ -8,26 +8,26 @@
  * then the input matrix is checked for duplicate entries.
  *
  * scaling methods:
- *	<0: no scaling, do not compute Rs, and do not check input matrix.
- *	0: no scaling
- *	1: the scale factor for row i is sum (abs (A (i,:)))
- *	2 or more: the scale factor for row i is max (abs (A (i,:)))
+ *      <0: no scaling, do not compute Rs, and do not check input matrix.
+ *      0: no scaling
+ *      1: the scale factor for row i is sum (abs (A (i,:)))
+ *      2 or more: the scale factor for row i is max (abs (A (i,:)))
  */
 
 #include "klu_internal.h"
 
-Int KLU_scale		/* return TRUE if successful, FALSE otherwise */
+Int KLU_scale           /* return TRUE if successful, FALSE otherwise */
 (
     /* inputs, not modified */
-    Int scale,		/* 0: none, 1: sum, 2: max */
+    Int scale,          /* 0: none, 1: sum, 2: max */
     Int n,
-    Int Ap [ ],		/* size n+1, column pointers */
-    Int Ai [ ],		/* size nz, row indices */
+    Int Ap [ ],         /* size n+1, column pointers */
+    Int Ai [ ],         /* size nz, row indices */
     double Ax [ ],
     /* outputs, not defined on input */
-    double Rs [ ],	/* size n, can be NULL if scale <= 0 */
+    double Rs [ ],      /* size n, can be NULL if scale <= 0 */
     /* workspace, not defined on input or output */
-    Int W [ ],		/* size n, can be NULL */
+    Int W [ ],          /* size n, can be NULL */
     /* --------------- */
     KLU_common *Common
 )
@@ -42,40 +42,40 @@ Int KLU_scale		/* return TRUE if successful, FALSE otherwise */
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     Common->status = KLU_OK ;
 
     if (scale < 0)
     {
-	/* return without checking anything and without computing the
-	 * scale factors */
-	return (TRUE) ;
+        /* return without checking anything and without computing the
+         * scale factors */
+        return (TRUE) ;
     }
 
     Az = (Entry *) Ax ;
 
     if (n <= 0 || Ap == NULL || Ai == NULL || Az == NULL ||
-	(scale > 0 && Rs == NULL))
+        (scale > 0 && Rs == NULL))
     {
-	/* Ap, Ai, Ax and Rs must be present, and n must be > 0 */
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        /* Ap, Ai, Ax and Rs must be present, and n must be > 0 */
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
     if (Ap [0] != 0 || Ap [n] < 0)
     {
-	/* nz = Ap [n] must be >= 0 and Ap [0] must equal zero */
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        /* nz = Ap [n] must be >= 0 and Ap [0] must equal zero */
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
     for (col = 0 ; col < n ; col++)
     {
-	if (Ap [col] > Ap [col+1])
-	{
-	    /* column pointers must be non-decreasing */
-	    Common->status = KLU_INVALID ;
-	    return (FALSE) ;
-	}
+        if (Ap [col] > Ap [col+1])
+        {
+            /* column pointers must be non-decreasing */
+            Common->status = KLU_INVALID ;
+            return (FALSE) ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -84,75 +84,75 @@ Int KLU_scale		/* return TRUE if successful, FALSE otherwise */
 
     if (scale > 0)
     {
-	/* initialize row sum or row max */
-	for (row = 0 ; row < n ; row++)
-	{
-	    Rs [row] = 0 ;
-	}
+        /* initialize row sum or row max */
+        for (row = 0 ; row < n ; row++)
+        {
+            Rs [row] = 0 ;
+        }
     }
 
     /* check for duplicates only if W is present */
     check_duplicates = (W != (Int *) NULL) ;
     if (check_duplicates)
     {
-	for (row = 0 ; row < n ; row++)
-	{
-	    W [row] = EMPTY ;
-	}
+        for (row = 0 ; row < n ; row++)
+        {
+            W [row] = EMPTY ;
+        }
     }
 
     for (col = 0 ; col < n ; col++)
     {
-	pend = Ap [col+1] ;
-	for (p = Ap [col] ; p < pend ; p++)
-	{
-	    row = Ai [p] ;
-	    if (row < 0 || row >= n)
-	    {
-		/* row index out of range, or duplicate entry */
-		Common->status = KLU_INVALID ;
-		return (FALSE) ;
-	    }
-	    if (check_duplicates)
-	    {
-		if (W [row] == col)
-		{
-		    /* duplicate entry */
-		    Common->status = KLU_INVALID ;
-		    return (FALSE) ;
-		}
-		/* flag row i as appearing in column col */
-		W [row] = col ;
-	    }
-	    /* a = ABS (Az [p]) ;*/
-	    ABS (a, Az [p]) ;
-	    if (scale == 1)
-	    {
-		/* accumulate the abs. row sum */
-		Rs [row] += a ;
-	    }
-	    else if (scale > 1)
-	    {
-		/* find the max abs. value in the row */
-		Rs [row] = MAX (Rs [row], a) ;
-	    }
-	}
+        pend = Ap [col+1] ;
+        for (p = Ap [col] ; p < pend ; p++)
+        {
+            row = Ai [p] ;
+            if (row < 0 || row >= n)
+            {
+                /* row index out of range, or duplicate entry */
+                Common->status = KLU_INVALID ;
+                return (FALSE) ;
+            }
+            if (check_duplicates)
+            {
+                if (W [row] == col)
+                {
+                    /* duplicate entry */
+                    Common->status = KLU_INVALID ;
+                    return (FALSE) ;
+                }
+                /* flag row i as appearing in column col */
+                W [row] = col ;
+            }
+            /* a = ABS (Az [p]) ;*/
+            ABS (a, Az [p]) ;
+            if (scale == 1)
+            {
+                /* accumulate the abs. row sum */
+                Rs [row] += a ;
+            }
+            else if (scale > 1)
+            {
+                /* find the max abs. value in the row */
+                Rs [row] = MAX (Rs [row], a) ;
+            }
+        }
     }
 
     if (scale > 0)
     {
-	/* do not scale empty rows */
-	for (row = 0 ; row < n ; row++)
-	{
-	    /* matrix is singular */
-	    PRINTF (("Rs [%d] = %g\n", row, Rs [row])) ;
+        /* do not scale empty rows */
+        for (row = 0 ; row < n ; row++)
+        {
+            /* matrix is singular */
+            PRINTF (("Rs [%d] = %g\n", row, Rs [row])) ;
 
-	    if (Rs [row] == 0.0)
-	    {
-		PRINTF (("Row %d of A is all zero\n", row)) ;
-		Rs [row] = 1.0 ;
-	    }
-	}
+            if (Rs [row] == 0.0)
+            {
+                PRINTF (("Row %d of A is all zero\n", row)) ;
+                Rs [row] = 1.0 ;
+            }
+        }
     }
 
     return (TRUE) ;
diff --git a/KLU/Source/klu_solve.c b/KLU/Source/klu_solve.c
index d725152..d23a140 100644
--- a/KLU/Source/klu_solve.c
+++ b/KLU/Source/klu_solve.c
@@ -16,12 +16,12 @@ Int KLU_solve
     /* inputs, not modified */
     KLU_symbolic *Symbolic,
     KLU_numeric *Numeric,
-    Int d,		    /* leading dimension of B */
-    Int nrhs,		    /* number of right-hand-sides */
+    Int d,                  /* leading dimension of B */
+    Int nrhs,               /* number of right-hand-sides */
 
     /* right-hand-side on input, overwritten with solution to Ax=b on output */
-    double B [ ],	    /* size n*nrhs, in column-oriented form, with
-			     * leading dimension d. */
+    double B [ ],           /* size n*nrhs, in column-oriented form, with
+                             * leading dimension d. */
     /* --------------- */
     KLU_common *Common
 )
@@ -39,13 +39,13 @@ Int KLU_solve
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     if (Numeric == NULL || Symbolic == NULL || d < Symbolic->n || nrhs < 0 ||
-	B == NULL)
+        B == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
     Common->status = KLU_OK ;
 
@@ -88,309 +88,309 @@ Int KLU_solve
     for (chunk = 0 ; chunk < nrhs ; chunk += 4)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* get the size of the current chunk */
-	/* ------------------------------------------------------------------ */
-
-	nr = MIN (nrhs - chunk, 4) ;
-
-	/* ------------------------------------------------------------------ */
-	/* scale and permute the right hand side, X = P*(R\B) */
-	/* ------------------------------------------------------------------ */
-
-	if (Rs == NULL)
-	{
-
-	    /* no scaling */
-	    switch (nr)
-	    {
-
-		case 1:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			X [k] = Bz [Pnum [k]] ;
-		    }
-		    break ;
-
-		case 2:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			X [2*k    ] = Bz [i      ] ;
-			X [2*k + 1] = Bz  [i + d  ] ;
-		    }
-		    break ;
-
-		case 3:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			X [3*k    ] = Bz [i      ] ;
-			X [3*k + 1] = Bz [i + d  ] ;
-			X [3*k + 2] = Bz [i + d*2] ;
-		    }
-		    break ;
-
-		case 4:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			X [4*k    ] = Bz [i      ] ;
-			X [4*k + 1] = Bz [i + d  ] ;
-			X [4*k + 2] = Bz [i + d*2] ;
-			X [4*k + 3] = Bz [i + d*3] ;
-		    }
-		    break ;
-	    }
-
-	}
-	else
-	{
-
-	    switch (nr)
-	    {
-
-		case 1:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			SCALE_DIV_ASSIGN (X [k], Bz  [Pnum [k]], Rs [k]) ;
-		    }
-		    break ;
-
-		case 2:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			rs = Rs [k] ;
-			SCALE_DIV_ASSIGN (X [2*k], Bz [i], rs) ;
-			SCALE_DIV_ASSIGN (X [2*k + 1], Bz [i + d], rs) ;
-		    }
-		    break ;
-
-		case 3:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			rs = Rs [k] ;
-			SCALE_DIV_ASSIGN (X [3*k], Bz [i], rs) ;
-			SCALE_DIV_ASSIGN (X [3*k + 1], Bz [i + d], rs) ;
-			SCALE_DIV_ASSIGN (X [3*k + 2], Bz [i + d*2], rs) ;
-		    }
-		    break ;
-
-		case 4:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			rs = Rs [k] ;
-			SCALE_DIV_ASSIGN (X [4*k], Bz [i], rs) ;
-			SCALE_DIV_ASSIGN (X [4*k + 1], Bz [i + d], rs) ;
-			SCALE_DIV_ASSIGN (X [4*k + 2], Bz [i + d*2], rs) ;
-			SCALE_DIV_ASSIGN (X [4*k + 3], Bz [i + d*3], rs) ;
-		    }
-		    break ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* solve X = (L*U + Off)\X */
-	/* ------------------------------------------------------------------ */
-
-	for (block = nblocks-1 ; block >= 0 ; block--)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* the block of size nk is from rows/columns k1 to k2-1 */
-	    /* -------------------------------------------------------------- */
-
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-	    PRINTF (("solve %d, k1 %d k2-1 %d nk %d\n", block, k1,k2-1,nk)) ;
-
-	    /* solve the block system */
-	    if (nk == 1)
-	    {
-		s = Udiag [k1] ;
-		switch (nr)
-		{
-
-		    case 1:
-			DIV (X [k1], X [k1], s) ;
-			break ;
-
-		    case 2:
-			DIV (X [2*k1], X [2*k1], s) ;
-			DIV (X [2*k1 + 1], X [2*k1 + 1], s) ;
-			break ;
-
-		    case 3:
-			DIV (X [3*k1], X [3*k1], s) ;
-			DIV (X [3*k1 + 1], X [3*k1 + 1], s) ;
-			DIV (X [3*k1 + 2], X [3*k1 + 2], s) ;
-			break ;
-
-		    case 4:
-			DIV (X [4*k1], X [4*k1], s) ;
-			DIV (X [4*k1 + 1], X [4*k1 + 1], s) ;
-			DIV (X [4*k1 + 2], X [4*k1 + 2], s) ;
-			DIV (X [4*k1 + 3], X [4*k1 + 3], s) ;
-			break ;
-
-		}
-	    }
-	    else
-	    {
-		KLU_lsolve (nk, Lip + k1, Llen + k1, LUbx [block], nr,
-			X + nr*k1) ;
-		KLU_usolve (nk, Uip + k1, Ulen + k1, LUbx [block],
-			Udiag + k1, nr, X + nr*k1) ;
-	    }
-
-	    /* -------------------------------------------------------------- */
-	    /* block back-substitution for the off-diagonal-block entries */
-	    /* -------------------------------------------------------------- */
-
-	    if (block > 0)
-	    {
-		switch (nr)
-		{
-
-		    case 1:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    x [0] = X [k] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
-				MULT_SUB (X [Offi [p]], Offx [p], x [0]) ;
-			    }
-			}
-			break ;
-
-		    case 2:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    x [0] = X [2*k    ] ;
-			    x [1] = X [2*k + 1] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
-				i = Offi [p] ;
-				offik = Offx [p] ;
-				MULT_SUB (X [2*i], offik, x [0]) ;
-				MULT_SUB (X [2*i + 1], offik, x [1]) ;
-			    }
-			}
-			break ;
-
-		    case 3:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    x [0] = X [3*k    ] ;
-			    x [1] = X [3*k + 1] ;
-			    x [2] = X [3*k + 2] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
-				i = Offi [p] ;
-				offik = Offx [p] ;
-				MULT_SUB (X [3*i], offik, x [0]) ;
-				MULT_SUB (X [3*i + 1], offik, x [1]) ;
-				MULT_SUB (X [3*i + 2], offik, x [2]) ;
-			    }
-			}
-			break ;
-
-		    case 4:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    x [0] = X [4*k    ] ;
-			    x [1] = X [4*k + 1] ;
-			    x [2] = X [4*k + 2] ;
-			    x [3] = X [4*k + 3] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
-				i = Offi [p] ;
-				offik = Offx [p] ;
-				MULT_SUB (X [4*i], offik, x [0]) ;
-				MULT_SUB (X [4*i + 1], offik, x [1]) ;
-				MULT_SUB (X [4*i + 2], offik, x [2]) ;
-				MULT_SUB (X [4*i + 3], offik, x [3]) ;
-			    }
-			}
-			break ;
-		}
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* permute the result, Bz  = Q*X */
-	/* ------------------------------------------------------------------ */
-
-	switch (nr)
-	{
-
-	    case 1:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    Bz  [Q [k]] = X [k] ;
-		}
-		break ;
-
-	    case 2:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    i = Q [k] ;
-		    Bz  [i      ] = X [2*k    ] ;
-		    Bz  [i + d  ] = X [2*k + 1] ;
-		}
-		break ;
-
-	    case 3:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    i = Q [k] ;
-		    Bz  [i      ] = X [3*k    ] ;
-		    Bz  [i + d  ] = X [3*k + 1] ;
-		    Bz  [i + d*2] = X [3*k + 2] ;
-		}
-		break ;
-
-	    case 4:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    i = Q [k] ;
-		    Bz  [i      ] = X [4*k    ] ;
-		    Bz  [i + d  ] = X [4*k + 1] ;
-		    Bz  [i + d*2] = X [4*k + 2] ;
-		    Bz  [i + d*3] = X [4*k + 3] ;
-		}
-		break ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* go to the next chunk of B */
-	/* ------------------------------------------------------------------ */
-
-	Bz  += d*4 ;
+        /* ------------------------------------------------------------------ */
+        /* get the size of the current chunk */
+        /* ------------------------------------------------------------------ */
+
+        nr = MIN (nrhs - chunk, 4) ;
+
+        /* ------------------------------------------------------------------ */
+        /* scale and permute the right hand side, X = P*(R\B) */
+        /* ------------------------------------------------------------------ */
+
+        if (Rs == NULL)
+        {
+
+            /* no scaling */
+            switch (nr)
+            {
+
+                case 1:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        X [k] = Bz [Pnum [k]] ;
+                    }
+                    break ;
+
+                case 2:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        X [2*k    ] = Bz [i      ] ;
+                        X [2*k + 1] = Bz  [i + d  ] ;
+                    }
+                    break ;
+
+                case 3:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        X [3*k    ] = Bz [i      ] ;
+                        X [3*k + 1] = Bz [i + d  ] ;
+                        X [3*k + 2] = Bz [i + d*2] ;
+                    }
+                    break ;
+
+                case 4:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        X [4*k    ] = Bz [i      ] ;
+                        X [4*k + 1] = Bz [i + d  ] ;
+                        X [4*k + 2] = Bz [i + d*2] ;
+                        X [4*k + 3] = Bz [i + d*3] ;
+                    }
+                    break ;
+            }
+
+        }
+        else
+        {
+
+            switch (nr)
+            {
+
+                case 1:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        SCALE_DIV_ASSIGN (X [k], Bz  [Pnum [k]], Rs [k]) ;
+                    }
+                    break ;
+
+                case 2:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        rs = Rs [k] ;
+                        SCALE_DIV_ASSIGN (X [2*k], Bz [i], rs) ;
+                        SCALE_DIV_ASSIGN (X [2*k + 1], Bz [i + d], rs) ;
+                    }
+                    break ;
+
+                case 3:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        rs = Rs [k] ;
+                        SCALE_DIV_ASSIGN (X [3*k], Bz [i], rs) ;
+                        SCALE_DIV_ASSIGN (X [3*k + 1], Bz [i + d], rs) ;
+                        SCALE_DIV_ASSIGN (X [3*k + 2], Bz [i + d*2], rs) ;
+                    }
+                    break ;
+
+                case 4:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        rs = Rs [k] ;
+                        SCALE_DIV_ASSIGN (X [4*k], Bz [i], rs) ;
+                        SCALE_DIV_ASSIGN (X [4*k + 1], Bz [i + d], rs) ;
+                        SCALE_DIV_ASSIGN (X [4*k + 2], Bz [i + d*2], rs) ;
+                        SCALE_DIV_ASSIGN (X [4*k + 3], Bz [i + d*3], rs) ;
+                    }
+                    break ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* solve X = (L*U + Off)\X */
+        /* ------------------------------------------------------------------ */
+
+        for (block = nblocks-1 ; block >= 0 ; block--)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* the block of size nk is from rows/columns k1 to k2-1 */
+            /* -------------------------------------------------------------- */
+
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+            PRINTF (("solve %d, k1 %d k2-1 %d nk %d\n", block, k1,k2-1,nk)) ;
+
+            /* solve the block system */
+            if (nk == 1)
+            {
+                s = Udiag [k1] ;
+                switch (nr)
+                {
+
+                    case 1:
+                        DIV (X [k1], X [k1], s) ;
+                        break ;
+
+                    case 2:
+                        DIV (X [2*k1], X [2*k1], s) ;
+                        DIV (X [2*k1 + 1], X [2*k1 + 1], s) ;
+                        break ;
+
+                    case 3:
+                        DIV (X [3*k1], X [3*k1], s) ;
+                        DIV (X [3*k1 + 1], X [3*k1 + 1], s) ;
+                        DIV (X [3*k1 + 2], X [3*k1 + 2], s) ;
+                        break ;
+
+                    case 4:
+                        DIV (X [4*k1], X [4*k1], s) ;
+                        DIV (X [4*k1 + 1], X [4*k1 + 1], s) ;
+                        DIV (X [4*k1 + 2], X [4*k1 + 2], s) ;
+                        DIV (X [4*k1 + 3], X [4*k1 + 3], s) ;
+                        break ;
+
+                }
+            }
+            else
+            {
+                KLU_lsolve (nk, Lip + k1, Llen + k1, LUbx [block], nr,
+                        X + nr*k1) ;
+                KLU_usolve (nk, Uip + k1, Ulen + k1, LUbx [block],
+                        Udiag + k1, nr, X + nr*k1) ;
+            }
+
+            /* -------------------------------------------------------------- */
+            /* block back-substitution for the off-diagonal-block entries */
+            /* -------------------------------------------------------------- */
+
+            if (block > 0)
+            {
+                switch (nr)
+                {
+
+                    case 1:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            x [0] = X [k] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
+                                MULT_SUB (X [Offi [p]], Offx [p], x [0]) ;
+                            }
+                        }
+                        break ;
+
+                    case 2:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            x [0] = X [2*k    ] ;
+                            x [1] = X [2*k + 1] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
+                                i = Offi [p] ;
+                                offik = Offx [p] ;
+                                MULT_SUB (X [2*i], offik, x [0]) ;
+                                MULT_SUB (X [2*i + 1], offik, x [1]) ;
+                            }
+                        }
+                        break ;
+
+                    case 3:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            x [0] = X [3*k    ] ;
+                            x [1] = X [3*k + 1] ;
+                            x [2] = X [3*k + 2] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
+                                i = Offi [p] ;
+                                offik = Offx [p] ;
+                                MULT_SUB (X [3*i], offik, x [0]) ;
+                                MULT_SUB (X [3*i + 1], offik, x [1]) ;
+                                MULT_SUB (X [3*i + 2], offik, x [2]) ;
+                            }
+                        }
+                        break ;
+
+                    case 4:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            x [0] = X [4*k    ] ;
+                            x [1] = X [4*k + 1] ;
+                            x [2] = X [4*k + 2] ;
+                            x [3] = X [4*k + 3] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
+                                i = Offi [p] ;
+                                offik = Offx [p] ;
+                                MULT_SUB (X [4*i], offik, x [0]) ;
+                                MULT_SUB (X [4*i + 1], offik, x [1]) ;
+                                MULT_SUB (X [4*i + 2], offik, x [2]) ;
+                                MULT_SUB (X [4*i + 3], offik, x [3]) ;
+                            }
+                        }
+                        break ;
+                }
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* permute the result, Bz  = Q*X */
+        /* ------------------------------------------------------------------ */
+
+        switch (nr)
+        {
+
+            case 1:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    Bz  [Q [k]] = X [k] ;
+                }
+                break ;
+
+            case 2:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    i = Q [k] ;
+                    Bz  [i      ] = X [2*k    ] ;
+                    Bz  [i + d  ] = X [2*k + 1] ;
+                }
+                break ;
+
+            case 3:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    i = Q [k] ;
+                    Bz  [i      ] = X [3*k    ] ;
+                    Bz  [i + d  ] = X [3*k + 1] ;
+                    Bz  [i + d*2] = X [3*k + 2] ;
+                }
+                break ;
+
+            case 4:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    i = Q [k] ;
+                    Bz  [i      ] = X [4*k    ] ;
+                    Bz  [i + d  ] = X [4*k + 1] ;
+                    Bz  [i + d*2] = X [4*k + 2] ;
+                    Bz  [i + d*3] = X [4*k + 3] ;
+                }
+                break ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* go to the next chunk of B */
+        /* ------------------------------------------------------------------ */
+
+        Bz  += d*4 ;
     }
     return (TRUE) ;
 }
diff --git a/KLU/Source/klu_sort.c b/KLU/Source/klu_sort.c
index 5405b4f..a3ce98f 100644
--- a/KLU/Source/klu_sort.c
+++ b/KLU/Source/klu_sort.c
@@ -26,58 +26,58 @@ static void sort (Int n, Int *Xip, Int *Xlen, Unit *LU, Int *Tp, Int *Tj,
     /* count the number of entries in each row of L or U */ 
     for (i = 0 ; i < n ; i++)
     {
-	W [i] = 0 ;
+        W [i] = 0 ;
     }
     for (j = 0 ; j < n ; j++)
     {
-	GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
-	for (p = 0 ; p < len ; p++)
-	{
-	    W [Xi [p]]++ ;
-	}
+        GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
+        for (p = 0 ; p < len ; p++)
+        {
+            W [Xi [p]]++ ;
+        }
     }
 
     /* construct the row pointers for T */
     nz = 0 ;
     for (i = 0 ; i < n ; i++)
     {
-	Tp [i] = nz ;
-	nz += W [i] ;
+        Tp [i] = nz ;
+        nz += W [i] ;
     }
     Tp [n] = nz ;
     for (i = 0 ; i < n ; i++)
     {
-	W [i] = Tp [i] ;
+        W [i] = Tp [i] ;
     }
 
     /* transpose the matrix into Tp, Ti, Tx */
     for (j = 0 ; j < n ; j++)
     {
-	GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
-	for (p = 0 ; p < len ; p++)
-	{
-	    tp = W [Xi [p]]++ ;
-	    Tj [tp] = j ;
-	    Tx [tp] = Xx [p] ;
-	}
+        GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
+        for (p = 0 ; p < len ; p++)
+        {
+            tp = W [Xi [p]]++ ;
+            Tj [tp] = j ;
+            Tx [tp] = Xx [p] ;
+        }
     }
 
     /* transpose the matrix back into Xip, Xlen, Xi, Xx */
     for (j = 0 ; j < n ; j++)
     {
-	W [j] = 0 ;
+        W [j] = 0 ;
     }
     for (i = 0 ; i < n ; i++)
     {
-	pend = Tp [i+1] ;
-	for (p = Tp [i] ; p < pend ; p++)
-	{
-	    j = Tj [p] ;
-	    GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
-	    xlen = W [j]++ ;
-	    Xi [xlen] = i ;
-	    Xx [xlen] = Tx [p] ;
-	}
+        pend = Tp [i+1] ;
+        for (p = Tp [i] ; p < pend ; p++)
+        {
+            j = Tj [p] ;
+            GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
+            xlen = W [j]++ ;
+            Xi [xlen] = i ;
+            Xx [xlen] = Tx [p] ;
+        }
     }
 
     ASSERT (KLU_valid_LU (n, FALSE, Xip, Xlen, LU)) ;
@@ -103,7 +103,7 @@ Int KLU_sort
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     Common->status = KLU_OK ;
 
@@ -131,18 +131,18 @@ Int KLU_sort
 
     if (Common->status == KLU_OK)
     {
-	/* sort each block of L and U */
-	for (block = 0 ; block < nblocks ; block++)
-	{
-	    k1 = R [block] ;
-	    nk = R [block+1] - k1 ;
-	    if (nk > 1)
-	    {
-		PRINTF (("\n-------------------block: %d nk %d\n", block, nk)) ;
-		sort (nk, Lip + k1, Llen + k1, LUbx [block], Tp, Ti, Tx, W) ;
-		sort (nk, Uip + k1, Ulen + k1, LUbx [block], Tp, Ti, Tx, W) ;
-	    }
-	}
+        /* sort each block of L and U */
+        for (block = 0 ; block < nblocks ; block++)
+        {
+            k1 = R [block] ;
+            nk = R [block+1] - k1 ;
+            if (nk > 1)
+            {
+                PRINTF (("\n-------------------block: %d nk %d\n", block, nk)) ;
+                sort (nk, Lip + k1, Llen + k1, LUbx [block], Tp, Ti, Tx, W) ;
+                sort (nk, Uip + k1, Ulen + k1, LUbx [block], Tp, Ti, Tx, W) ;
+            }
+        }
     }
 
     PRINTF (("\n======================= sort done.\n")) ;
diff --git a/KLU/Source/klu_tsolve.c b/KLU/Source/klu_tsolve.c
index c06b5b2..c1f10f7 100644
--- a/KLU/Source/klu_tsolve.c
+++ b/KLU/Source/klu_tsolve.c
@@ -16,16 +16,16 @@ Int KLU_tsolve
     /* inputs, not modified */
     KLU_symbolic *Symbolic,
     KLU_numeric *Numeric,
-    Int d,		    /* leading dimension of B */
-    Int nrhs,		    /* number of right-hand-sides */
+    Int d,                  /* leading dimension of B */
+    Int nrhs,               /* number of right-hand-sides */
 
     /* right-hand-side on input, overwritten with solution to Ax=b on output */
-    double B [ ],	    /* size n*nrhs, in column-oriented form, with
-			     * leading dimension d. */
+    double B [ ],           /* size n*nrhs, in column-oriented form, with
+                             * leading dimension d. */
 #ifdef COMPLEX
-    Int conj_solve,	    /* TRUE for conjugate transpose solve, FALSE for
-			     * array transpose solve.  Used for the complex
-			     * case only. */
+    Int conj_solve,         /* TRUE for conjugate transpose solve, FALSE for
+                             * array transpose solve.  Used for the complex
+                             * case only. */
 #endif
     /* --------------- */
     KLU_common *Common
@@ -44,13 +44,13 @@ Int KLU_tsolve
 
     if (Common == NULL)
     {
-	return (FALSE) ;
+        return (FALSE) ;
     }
     if (Numeric == NULL || Symbolic == NULL || d < Symbolic->n || nrhs < 0 ||
-	B == NULL)
+        B == NULL)
     {
-	Common->status = KLU_INVALID ;
-	return (FALSE) ;
+        Common->status = KLU_INVALID ;
+        return (FALSE) ;
     }
     Common->status = KLU_OK ;
 
@@ -92,374 +92,374 @@ Int KLU_tsolve
     for (chunk = 0 ; chunk < nrhs ; chunk += 4)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* get the size of the current chunk */
-	/* ------------------------------------------------------------------ */
-
-	nr = MIN (nrhs - chunk, 4) ;
-
-	/* ------------------------------------------------------------------ */
-	/* permute the right hand side, X = Q'*B */
-	/* ------------------------------------------------------------------ */
-
-	switch (nr)
-	{
-
-	    case 1:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    X [k] = Bz  [Q [k]] ;
-		}
-		break ;
-
-	    case 2:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    i = Q [k] ;
-		    X [2*k    ] = Bz [i      ] ;
-		    X [2*k + 1] = Bz [i + d  ] ;
-		}
-		break ;
-
-	    case 3:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    i = Q [k] ;
-		    X [3*k    ] = Bz [i      ] ;
-		    X [3*k + 1] = Bz [i + d  ] ;
-		    X [3*k + 2] = Bz [i + d*2] ;
-		}
-		break ;
-
-	    case 4:
-
-		for (k = 0 ; k < n ; k++)
-		{
-		    i = Q [k] ;
-		    X [4*k    ] = Bz [i      ] ;
-		    X [4*k + 1] = Bz [i + d  ] ;
-		    X [4*k + 2] = Bz [i + d*2] ;
-		    X [4*k + 3] = Bz [i + d*3] ;
-		}
-		break ;
-
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* solve X = (L*U + Off)'\X */
-	/* ------------------------------------------------------------------ */
-
-	for (block = 0 ; block < nblocks ; block++)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* the block of size nk is from rows/columns k1 to k2-1 */
-	    /* -------------------------------------------------------------- */
-
-	    k1 = R [block] ;
-	    k2 = R [block+1] ;
-	    nk = k2 - k1 ;
-	    PRINTF (("tsolve %d, k1 %d k2-1 %d nk %d\n", block, k1,k2-1,nk)) ;
-
-	    /* -------------------------------------------------------------- */
-	    /* block back-substitution for the off-diagonal-block entries */
-	    /* -------------------------------------------------------------- */
-
-	    if (block > 0)
-	    {
-		switch (nr)
-		    {
-
-		    case 1:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
+        /* ------------------------------------------------------------------ */
+        /* get the size of the current chunk */
+        /* ------------------------------------------------------------------ */
+
+        nr = MIN (nrhs - chunk, 4) ;
+
+        /* ------------------------------------------------------------------ */
+        /* permute the right hand side, X = Q'*B */
+        /* ------------------------------------------------------------------ */
+
+        switch (nr)
+        {
+
+            case 1:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    X [k] = Bz  [Q [k]] ;
+                }
+                break ;
+
+            case 2:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    i = Q [k] ;
+                    X [2*k    ] = Bz [i      ] ;
+                    X [2*k + 1] = Bz [i + d  ] ;
+                }
+                break ;
+
+            case 3:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    i = Q [k] ;
+                    X [3*k    ] = Bz [i      ] ;
+                    X [3*k + 1] = Bz [i + d  ] ;
+                    X [3*k + 2] = Bz [i + d*2] ;
+                }
+                break ;
+
+            case 4:
+
+                for (k = 0 ; k < n ; k++)
+                {
+                    i = Q [k] ;
+                    X [4*k    ] = Bz [i      ] ;
+                    X [4*k + 1] = Bz [i + d  ] ;
+                    X [4*k + 2] = Bz [i + d*2] ;
+                    X [4*k + 3] = Bz [i + d*3] ;
+                }
+                break ;
+
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* solve X = (L*U + Off)'\X */
+        /* ------------------------------------------------------------------ */
+
+        for (block = 0 ; block < nblocks ; block++)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* the block of size nk is from rows/columns k1 to k2-1 */
+            /* -------------------------------------------------------------- */
+
+            k1 = R [block] ;
+            k2 = R [block+1] ;
+            nk = k2 - k1 ;
+            PRINTF (("tsolve %d, k1 %d k2-1 %d nk %d\n", block, k1,k2-1,nk)) ;
+
+            /* -------------------------------------------------------------- */
+            /* block back-substitution for the off-diagonal-block entries */
+            /* -------------------------------------------------------------- */
+
+            if (block > 0)
+            {
+                switch (nr)
+                    {
+
+                    case 1:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
 #ifdef COMPLEX
-				if (conj_solve)
-				{
-				    MULT_SUB_CONJ (X [k], X [Offi [p]],
-					    Offx [p]) ;
-				}
-				else
+                                if (conj_solve)
+                                {
+                                    MULT_SUB_CONJ (X [k], X [Offi [p]],
+                                            Offx [p]) ;
+                                }
+                                else
 #endif
-				{
-				    MULT_SUB (X [k], Offx [p], X [Offi [p]]) ;
-				}
-			    }
-			}
-			break ;
-
-		    case 2:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    x [0] = X [2*k    ] ;
-			    x [1] = X [2*k + 1] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
-				i = Offi [p] ;
+                                {
+                                    MULT_SUB (X [k], Offx [p], X [Offi [p]]) ;
+                                }
+                            }
+                        }
+                        break ;
+
+                    case 2:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            x [0] = X [2*k    ] ;
+                            x [1] = X [2*k + 1] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
+                                i = Offi [p] ;
 #ifdef COMPLEX
-				if (conj_solve)
-				{
-				    CONJ (offik, Offx [p]) ;
-				}
-				else
+                                if (conj_solve)
+                                {
+                                    CONJ (offik, Offx [p]) ;
+                                }
+                                else
 #endif
-				{
-				    offik = Offx [p] ;
-				}
-				MULT_SUB (x [0], offik, X [2*i]) ;
-				MULT_SUB (x [1], offik, X [2*i + 1]) ;
-			    }
-			    X [2*k    ] = x [0] ;
-			    X [2*k + 1] = x [1] ;
-			}
-			break ;
-
-		    case 3:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    x [0] = X [3*k    ] ;
-			    x [1] = X [3*k + 1] ;
-			    x [2] = X [3*k + 2] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
-				i = Offi [p] ;
+                                {
+                                    offik = Offx [p] ;
+                                }
+                                MULT_SUB (x [0], offik, X [2*i]) ;
+                                MULT_SUB (x [1], offik, X [2*i + 1]) ;
+                            }
+                            X [2*k    ] = x [0] ;
+                            X [2*k + 1] = x [1] ;
+                        }
+                        break ;
+
+                    case 3:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            x [0] = X [3*k    ] ;
+                            x [1] = X [3*k + 1] ;
+                            x [2] = X [3*k + 2] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
+                                i = Offi [p] ;
 #ifdef COMPLEX
-				if (conj_solve)
-				{
-				    CONJ (offik, Offx [p]) ;
-				}
-				else
+                                if (conj_solve)
+                                {
+                                    CONJ (offik, Offx [p]) ;
+                                }
+                                else
 #endif
-				{
-				    offik = Offx [p] ;
-				}
-				MULT_SUB (x [0], offik, X [3*i]) ;
-				MULT_SUB (x [1], offik, X [3*i + 1]) ;
-				MULT_SUB (x [2], offik, X [3*i + 2]) ;
-			    }
-			    X [3*k    ] = x [0] ;
-			    X [3*k + 1] = x [1] ;
-			    X [3*k + 2] = x [2] ;
-			}
-			break ;
-
-		    case 4:
-
-			for (k = k1 ; k < k2 ; k++)
-			{
-			    pend = Offp [k+1] ;
-			    x [0] = X [4*k    ] ;
-			    x [1] = X [4*k + 1] ;
-			    x [2] = X [4*k + 2] ;
-			    x [3] = X [4*k + 3] ;
-			    for (p = Offp [k] ; p < pend ; p++)
-			    {
-				i = Offi [p] ;
+                                {
+                                    offik = Offx [p] ;
+                                }
+                                MULT_SUB (x [0], offik, X [3*i]) ;
+                                MULT_SUB (x [1], offik, X [3*i + 1]) ;
+                                MULT_SUB (x [2], offik, X [3*i + 2]) ;
+                            }
+                            X [3*k    ] = x [0] ;
+                            X [3*k + 1] = x [1] ;
+                            X [3*k + 2] = x [2] ;
+                        }
+                        break ;
+
+                    case 4:
+
+                        for (k = k1 ; k < k2 ; k++)
+                        {
+                            pend = Offp [k+1] ;
+                            x [0] = X [4*k    ] ;
+                            x [1] = X [4*k + 1] ;
+                            x [2] = X [4*k + 2] ;
+                            x [3] = X [4*k + 3] ;
+                            for (p = Offp [k] ; p < pend ; p++)
+                            {
+                                i = Offi [p] ;
 #ifdef COMPLEX
-				if (conj_solve)
-				{
-				    CONJ(offik, Offx [p]) ;
-				}
-				else
+                                if (conj_solve)
+                                {
+                                    CONJ(offik, Offx [p]) ;
+                                }
+                                else
 #endif
-				{
-				    offik = Offx [p] ;
-				}
-				MULT_SUB (x [0], offik, X [4*i]) ;
-				MULT_SUB (x [1], offik, X [4*i + 1]) ;
-				MULT_SUB (x [2], offik, X [4*i + 2]) ;
-				MULT_SUB (x [3], offik, X [4*i + 3]) ;
-			    }
-			    X [4*k    ] = x [0] ;
-			    X [4*k + 1] = x [1] ;
-			    X [4*k + 2] = x [2] ;
-			    X [4*k + 3] = x [3] ;
-			}
-			break ;
-		    }
-	    }
-
-	    /* -------------------------------------------------------------- */
-	    /* solve the block system */
-	    /* -------------------------------------------------------------- */
-
-	    if (nk == 1)
-	    {
+                                {
+                                    offik = Offx [p] ;
+                                }
+                                MULT_SUB (x [0], offik, X [4*i]) ;
+                                MULT_SUB (x [1], offik, X [4*i + 1]) ;
+                                MULT_SUB (x [2], offik, X [4*i + 2]) ;
+                                MULT_SUB (x [3], offik, X [4*i + 3]) ;
+                            }
+                            X [4*k    ] = x [0] ;
+                            X [4*k + 1] = x [1] ;
+                            X [4*k + 2] = x [2] ;
+                            X [4*k + 3] = x [3] ;
+                        }
+                        break ;
+                    }
+            }
+
+            /* -------------------------------------------------------------- */
+            /* solve the block system */
+            /* -------------------------------------------------------------- */
+
+            if (nk == 1)
+            {
 #ifdef COMPLEX
-		if (conj_solve)
-		{
-		    CONJ (s, Udiag [k1]) ;
-		}
-		else
+                if (conj_solve)
+                {
+                    CONJ (s, Udiag [k1]) ;
+                }
+                else
 #endif
-		{
-		    s = Udiag [k1] ;
-		}
-		switch (nr)
-		{
-
-		    case 1:
-			DIV (X [k1], X [k1], s) ;
-			break ;
-
-		    case 2:
-			DIV (X [2*k1], X [2*k1], s) ;
-			DIV (X [2*k1 + 1], X [2*k1 + 1], s) ;
-			break ;
-
-		    case 3:
-			DIV (X [3*k1], X [3*k1], s) ;
-			DIV (X [3*k1 + 1], X [3*k1 + 1], s) ;
-			DIV (X [3*k1 + 2], X [3*k1 + 2], s) ;
-			break ;
-
-		    case 4:
-			DIV (X [4*k1], X [4*k1], s) ;
-			DIV (X [4*k1 + 1], X [4*k1 + 1], s) ;
-			DIV (X [4*k1 + 2], X [4*k1 + 2], s) ;
-			DIV (X [4*k1 + 3], X [4*k1 + 3], s) ;
-			break ;
-
-		}
-	    }
-	    else
-	    {
-		KLU_utsolve (nk, Uip + k1, Ulen + k1, LUbx [block],
-			Udiag + k1, nr,
+                {
+                    s = Udiag [k1] ;
+                }
+                switch (nr)
+                {
+
+                    case 1:
+                        DIV (X [k1], X [k1], s) ;
+                        break ;
+
+                    case 2:
+                        DIV (X [2*k1], X [2*k1], s) ;
+                        DIV (X [2*k1 + 1], X [2*k1 + 1], s) ;
+                        break ;
+
+                    case 3:
+                        DIV (X [3*k1], X [3*k1], s) ;
+                        DIV (X [3*k1 + 1], X [3*k1 + 1], s) ;
+                        DIV (X [3*k1 + 2], X [3*k1 + 2], s) ;
+                        break ;
+
+                    case 4:
+                        DIV (X [4*k1], X [4*k1], s) ;
+                        DIV (X [4*k1 + 1], X [4*k1 + 1], s) ;
+                        DIV (X [4*k1 + 2], X [4*k1 + 2], s) ;
+                        DIV (X [4*k1 + 3], X [4*k1 + 3], s) ;
+                        break ;
+
+                }
+            }
+            else
+            {
+                KLU_utsolve (nk, Uip + k1, Ulen + k1, LUbx [block],
+                        Udiag + k1, nr,
 #ifdef COMPLEX
-			conj_solve,
+                        conj_solve,
 #endif
-			X + nr*k1) ;
-		KLU_ltsolve (nk, Lip + k1, Llen + k1, LUbx [block], nr,
+                        X + nr*k1) ;
+                KLU_ltsolve (nk, Lip + k1, Llen + k1, LUbx [block], nr,
 #ifdef COMPLEX
-			conj_solve,
+                        conj_solve,
 #endif
-			X + nr*k1) ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* scale and permute the result, Bz  = P'(R\X) */
-	/* ------------------------------------------------------------------ */
-
-	if (Rs == NULL)
-	{
-
-	    /* no scaling */
-	    switch (nr)
-	    {
-
-		case 1:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			Bz  [Pnum [k]] = X [k] ;
-		    }
-		    break ;
-
-		case 2:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			Bz  [i      ] = X [2*k    ] ;
-			Bz  [i + d  ] = X [2*k + 1] ;
-		    }
-		    break ;
-
-		case 3:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			Bz  [i      ] = X [3*k    ] ;
-			Bz  [i + d  ] = X [3*k + 1] ;
-			Bz  [i + d*2] = X [3*k + 2] ;
-		    }
-		    break ;
-
-		case 4:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			Bz  [i      ] = X [4*k    ] ;
-			Bz  [i + d  ] = X [4*k + 1] ;
-			Bz  [i + d*2] = X [4*k + 2] ;
-			Bz  [i + d*3] = X [4*k + 3] ;
-		    }
-		    break ;
-	    }
-
-	}
-	else
-	{
-
-	    switch (nr)
-	    {
-
-		case 1:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			SCALE_DIV_ASSIGN (Bz [Pnum [k]], X [k], Rs [k]) ;
-		    }
-		    break ;
-
-		case 2:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			rs = Rs [k] ;
-			SCALE_DIV_ASSIGN (Bz [i], X [2*k], rs) ;
-			SCALE_DIV_ASSIGN (Bz [i + d], X [2*k + 1], rs) ;
-		    }
-		    break ;
-
-		case 3:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			rs = Rs [k] ;
-			SCALE_DIV_ASSIGN (Bz [i], X [3*k], rs) ;
-			SCALE_DIV_ASSIGN (Bz [i + d], X [3*k + 1], rs) ;
-			SCALE_DIV_ASSIGN (Bz [i + d*2], X [3*k + 2], rs) ;
-		    }
-		    break ;
-
-		case 4:
-
-		    for (k = 0 ; k < n ; k++)
-		    {
-			i = Pnum [k] ;
-			rs = Rs [k] ;
-			SCALE_DIV_ASSIGN (Bz [i], X [4*k], rs) ;
-			SCALE_DIV_ASSIGN (Bz [i + d], X [4*k + 1], rs) ;
-			SCALE_DIV_ASSIGN (Bz [i + d*2], X [4*k + 2], rs) ;
-			SCALE_DIV_ASSIGN (Bz [i + d*3], X [4*k + 3], rs) ;
-		    }
-		    break ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* go to the next chunk of B */
-	/* ------------------------------------------------------------------ */
-
-	Bz  += d*4 ;
+                        X + nr*k1) ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* scale and permute the result, Bz  = P'(R\X) */
+        /* ------------------------------------------------------------------ */
+
+        if (Rs == NULL)
+        {
+
+            /* no scaling */
+            switch (nr)
+            {
+
+                case 1:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        Bz  [Pnum [k]] = X [k] ;
+                    }
+                    break ;
+
+                case 2:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        Bz  [i      ] = X [2*k    ] ;
+                        Bz  [i + d  ] = X [2*k + 1] ;
+                    }
+                    break ;
+
+                case 3:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        Bz  [i      ] = X [3*k    ] ;
+                        Bz  [i + d  ] = X [3*k + 1] ;
+                        Bz  [i + d*2] = X [3*k + 2] ;
+                    }
+                    break ;
+
+                case 4:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        Bz  [i      ] = X [4*k    ] ;
+                        Bz  [i + d  ] = X [4*k + 1] ;
+                        Bz  [i + d*2] = X [4*k + 2] ;
+                        Bz  [i + d*3] = X [4*k + 3] ;
+                    }
+                    break ;
+            }
+
+        }
+        else
+        {
+
+            switch (nr)
+            {
+
+                case 1:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        SCALE_DIV_ASSIGN (Bz [Pnum [k]], X [k], Rs [k]) ;
+                    }
+                    break ;
+
+                case 2:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        rs = Rs [k] ;
+                        SCALE_DIV_ASSIGN (Bz [i], X [2*k], rs) ;
+                        SCALE_DIV_ASSIGN (Bz [i + d], X [2*k + 1], rs) ;
+                    }
+                    break ;
+
+                case 3:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        rs = Rs [k] ;
+                        SCALE_DIV_ASSIGN (Bz [i], X [3*k], rs) ;
+                        SCALE_DIV_ASSIGN (Bz [i + d], X [3*k + 1], rs) ;
+                        SCALE_DIV_ASSIGN (Bz [i + d*2], X [3*k + 2], rs) ;
+                    }
+                    break ;
+
+                case 4:
+
+                    for (k = 0 ; k < n ; k++)
+                    {
+                        i = Pnum [k] ;
+                        rs = Rs [k] ;
+                        SCALE_DIV_ASSIGN (Bz [i], X [4*k], rs) ;
+                        SCALE_DIV_ASSIGN (Bz [i + d], X [4*k + 1], rs) ;
+                        SCALE_DIV_ASSIGN (Bz [i + d*2], X [4*k + 2], rs) ;
+                        SCALE_DIV_ASSIGN (Bz [i + d*3], X [4*k + 3], rs) ;
+                    }
+                    break ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* go to the next chunk of B */
+        /* ------------------------------------------------------------------ */
+
+        Bz  += d*4 ;
     }
     return (TRUE) ;
 }
diff --git a/KLU/Tcov/Makefile b/KLU/Tcov/Makefile
index a4fc665..f7d8d70 100644
--- a/KLU/Tcov/Makefile
+++ b/KLU/Tcov/Makefile
@@ -1,33 +1,34 @@
 # If the libraries (AMD, COLAMD, CAMD, CCOLAMD, metis, and CHOLMOD) are not
 # yet built, use "make libs" first.  Then "make" to compile and run all tests.
+#
+# This test requires BTF, METIS, CHOLMOD, AMD, COLAMD, CAMD, and CCOLAMD.
 
 default: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-# CFLAGS = -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+# CF = -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
 # 	-Wredundant-decls -Wnested-externs -Wdisabled-optimization \
 # 	-pedantic -ansi -O3 -pg
 
 # for statement coverage, picky tests
-CFLAGS = -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+CF = -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
    	-Wredundant-decls -Wnested-externs -Wdisabled-optimization \
  	-ansi -g -ftest-coverage -fprofile-arcs -fexceptions
 
-C = $(CC) $(CFLAGS)
+C = $(CC) $(CF)
 
 LIB = ../../AMD/Lib/libamd.a ../../COLAMD/Lib/libcolamd.a \
     ../../CHOLMOD/Lib/libcholmod.a \
     ../../CAMD/Lib/libcamd.a ../../CCOLAMD/Lib/libccolamd.a \
     ../../metis-4.0/libmetis.a \
-    -lm
+    ../../SuiteSparse_config/libsuitesparseconfig.a \
+    $(LAPACK) $(BLAS) $(CUDART_LIB) $(CUBLAS_LIB) -lm -lrt
 
-I = -I../../UFconfig -I../../AMD/Include -I../../COLAMD/Include \
+I = -I../../SuiteSparse_config -I../../AMD/Include -I../../COLAMD/Include \
     -I../../BTF/Include -I../../CHOLMOD/Include -I../../CAMD/Include \
     -I../../CCOLAMD/Include -I../../metis-4.0/Lib -I../Include -I../User
 
-PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob 
-
 all: purge libs klutest klultest
 	- ./klultests > klultests.out
 	- ./klutests > klutests.out
@@ -39,12 +40,13 @@ valgrind: purge klutest klultest
 	- ./coverage
 
 libs:
-	( cd ../../AMD ; $(MAKE) library )
-	( cd ../../COLAMD ; $(MAKE) library )
-	( cd ../../CAMD ; $(MAKE) library )
-	( cd ../../CCOLAMD ; $(MAKE) library )
-	( cd ../../metis-4.0 ; $(MAKE) )
-	( cd ../../CHOLMOD ; $(MAKE) library )
+	( cd ../../AMD && $(MAKE) library )
+	( cd ../../COLAMD && $(MAKE) library )
+	( cd ../../CAMD && $(MAKE) library )
+	( cd ../../CCOLAMD && $(MAKE) library )
+	( cd ../../metis-4.0 && $(MAKE) )
+	( cd ../../CHOLMOD && $(MAKE) library )
+	( cd ../../SuiteSparse_config && $(MAKE) library )
 
 purge: distclean
 
@@ -53,6 +55,7 @@ distclean: clean
 
 clean:
 	- $(RM) $(CLEAN)
+	- $(RM) -r *.dSYM
 
 INC =  \
 	../Include/klu.h \
diff --git a/KLU/Tcov/README.txt b/KLU/Tcov/README.txt
index 8ecec0a..e8c862b 100644
--- a/KLU/Tcov/README.txt
+++ b/KLU/Tcov/README.txt
@@ -3,3 +3,5 @@ Test suite for KLU
 To compile and run the test suite, first type "make" in the Linux/Unix shell.
 The libraries must be compiled first (if they aren't use "make libs").
 "make clean" or "make distclean" will remove all unnecessary files.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/KLU/Tcov/klutest.c b/KLU/Tcov/klutest.c
index ea8b491..c097814 100644
--- a/KLU/Tcov/klutest.c
+++ b/KLU/Tcov/klutest.c
@@ -132,45 +132,52 @@ static void my_srand (unsigned seed)
 void *my_malloc (size_t size) ;
 void *my_calloc (size_t n, size_t size) ;
 void *my_realloc (void *p, size_t size) ;
+void my_free (void *p) ;
 
 Int my_tries = -1 ;
 
 void *my_malloc (size_t size)
 {
-    if (my_tries == 0) return (NULL) ;	    /* pretend to fail */
+    if (my_tries == 0) return (NULL) ;      /* pretend to fail */
     if (my_tries > 0) my_tries-- ;
     return (malloc (size)) ;
 }
 
 void *my_calloc (size_t n, size_t size)
 {
-    if (my_tries == 0) return (NULL) ;	    /* pretend to fail */
+    if (my_tries == 0) return (NULL) ;      /* pretend to fail */
     if (my_tries > 0) my_tries-- ;
     return (calloc (n, size)) ;
 }
 
 void *my_realloc (void *p, size_t size)
 {
-    if (my_tries == 0) return (NULL) ;	    /* pretend to fail */
+    if (my_tries == 0) return (NULL) ;      /* pretend to fail */
     if (my_tries > 0) my_tries-- ;
     return (realloc (p, size)) ;
 }
 
-static void normal_memory_handler (KLU_common *Common)
+void my_free (void *p)
 {
-    Common->malloc_memory = malloc ;
-    Common->calloc_memory = calloc ;
-    Common->realloc_memory = realloc ;
-    Common->free_memory = free ;
+    if (p) free (p) ;
+}
+
+static void normal_memory_handler ( void )
+{
+    SuiteSparse_config.malloc_func = malloc ;
+    SuiteSparse_config.calloc_func = calloc ;
+    SuiteSparse_config.realloc_func = realloc ;
+    SuiteSparse_config.free_func = free ;
+
     my_tries = -1 ;
 }
 
-static void test_memory_handler (KLU_common *Common)
+static void test_memory_handler ( void )
 {
-    Common->malloc_memory = my_malloc ;
-    Common->calloc_memory = my_calloc ;
-    Common->realloc_memory = my_realloc ;
-    Common->free_memory = free ;
+    SuiteSparse_config.malloc_func = my_malloc ;
+    SuiteSparse_config.calloc_func = my_calloc ;
+    SuiteSparse_config.realloc_func = my_realloc ;
+    SuiteSparse_config.free_func = my_free ;
     my_tries = -1 ;
 }
 
@@ -188,34 +195,34 @@ static void print_sparse (Int n, Int isreal, Int *Ap, Int *Ai, double *Ax,
     Int i, j, p ;
     for (j = 0 ; j < n ; j++)
     {
-	printf ("column "ID":\n", j) ;
-	for (p = Ap [j] ; p < Ap [j+1] ; p++)
-	{
-	    i = Ai [p] ;
-	    if (isreal)
-	    {
-		ax = Ax [p] ;
-		az = 0 ;
-	    }
-	    else if (Az)
-	    {
-		/* split complex */
-		ax = Ax [p] ;
-		az = Az [p] ;
-	    }
-	    else
-	    {
-		/* merged complex */
-		ax = Ax [2*p  ] ;
-		az = Ax [2*p+1] ;
-	    }
-	    printf ("  row "ID" : %g", i, ax) ;
-	    if (!isreal)
-	    {
-		printf (" + (%g)i", az) ;
-	    }
-	    printf ("\n") ;
-	}
+        printf ("column "ID":\n", j) ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (isreal)
+            {
+                ax = Ax [p] ;
+                az = 0 ;
+            }
+            else if (Az)
+            {
+                /* split complex */
+                ax = Ax [p] ;
+                az = Az [p] ;
+            }
+            else
+            {
+                /* merged complex */
+                ax = Ax [2*p  ] ;
+                az = Ax [2*p+1] ;
+            }
+            printf ("  row "ID" : %g", i, ax) ;
+            if (!isreal)
+            {
+                printf (" + (%g)i", az) ;
+            }
+            printf ("\n") ;
+        }
     }
     fflush (stdout) ;
 }
@@ -232,7 +239,7 @@ static void print_int (Int n, Int *P)
     Int j ;
     for (j = 0 ; j < n ; j++)
     {
-	printf (" "ID" : "ID"\n", j, P [j]) ;
+        printf (" "ID" : "ID"\n", j, P [j]) ;
     }
     fflush (stdout) ;
 }
@@ -249,7 +256,7 @@ static void print_double (Int n, double *X)
     Int j ;
     for (j = 0 ; j < n ; j++)
     {
-	printf (" "ID" : %g\n", j, X [j]) ;
+        printf (" "ID" : %g\n", j, X [j]) ;
     }
     fflush (stdout) ;
 }
@@ -270,7 +277,7 @@ static void ludump (KLU_symbolic *Symbolic, KLU_numeric *Numeric, Int isreal,
 
     if (Symbolic == NULL || Numeric == NULL)
     {
-	return ;
+        return ;
     }
 
     n = Symbolic->n ;
@@ -280,7 +287,7 @@ static void ludump (KLU_symbolic *Symbolic, KLU_numeric *Numeric, Int isreal,
     nb = Symbolic->nblocks ;
 
     printf ("n "ID" lnz "ID" unz "ID" fnz "ID" nblocks "ID" isreal "ID"\n",
-	n, lnz, unz, fnz, nb, isreal) ;
+        n, lnz, unz, fnz, nb, isreal) ;
     fflush (stdout) ;
 
     Lp = malloc ((n+1) * sizeof (Int)) ;
@@ -305,26 +312,26 @@ static void ludump (KLU_symbolic *Symbolic, KLU_numeric *Numeric, Int isreal,
 
     if (isreal)
     {
-	result = klu_extract (Numeric, Symbolic, Lp, Li, Lx,
-	    Up, Ui, Ux, Fp, Fi, Fx, P, Q, Rs, R, Common) ;
+        result = klu_extract (Numeric, Symbolic, Lp, Li, Lx,
+            Up, Ui, Ux, Fp, Fi, Fx, P, Q, Rs, R, Common) ;
     }
     else
     {
-	result = klu_z_extract (Numeric, Symbolic, Lp, Li, Lx, Lz,
-	    Up, Ui, Ux, Uz, Fp, Fi, Fx, Fz, P, Q, Rs, R, Common) ;
+        result = klu_z_extract (Numeric, Symbolic, Lp, Li, Lx, Lz,
+            Up, Ui, Ux, Uz, Fp, Fi, Fx, Fz, P, Q, Rs, R, Common) ;
     }
 
     if (my_tries != 0) OK (result) ;
 
     if (ch->print >= 5)
     {
-	printf ("------ L:\n") ; print_sparse (n, isreal, Lp, Li, Lx, Lz) ;
-	printf ("------ U:\n") ; print_sparse (n, isreal, Up, Ui, Ux, Uz) ;
-	printf ("------ F:\n") ; print_sparse (n, isreal, Fp, Fi, Fx, Fz) ;
-	printf ("------ P:\n") ; print_int (n, P) ;
-	printf ("------ Q:\n") ; print_int (n, Q) ;
-	printf ("------ Rs:\n") ; print_double (n, Rs) ;
-	printf ("------ R:\n") ; print_int (nb+1, R) ;
+        printf ("------ L:\n") ; print_sparse (n, isreal, Lp, Li, Lx, Lz) ;
+        printf ("------ U:\n") ; print_sparse (n, isreal, Up, Ui, Ux, Uz) ;
+        printf ("------ F:\n") ; print_sparse (n, isreal, Fp, Fi, Fx, Fz) ;
+        printf ("------ P:\n") ; print_int (n, P) ;
+        printf ("------ Q:\n") ; print_int (n, Q) ;
+        printf ("------ Rs:\n") ; print_double (n, Rs) ;
+        printf ("------ R:\n") ; print_int (nb+1, R) ;
     }
 
     free (Lp) ;
@@ -361,15 +368,15 @@ static Int *randperm (Int n, Int seed)
     p = malloc (n * sizeof (Int)) ;
     for (k = 0 ; k < n ; k++)
     {
-	p [k] = k ;
+        p [k] = k ;
     }
-    my_srand (seed) ;			/* get new random number seed */
+    my_srand (seed) ;                   /* get new random number seed */
     for (k = 0 ; k < n ; k++)
     {
-	j = k + (my_rand ( ) % (n-k)) ;	/* j = my_rand in range k to n-1 */
-	t = p [j] ;			/* swap p[k] and p[j] */
-	p [j] = p [k] ;
-	p [k] = t ;
+        j = k + (my_rand ( ) % (n-k)) ; /* j = my_rand in range k to n-1 */
+        t = p [j] ;                     /* swap p[k] and p[j] */
+        p [j] = p [k] ;
+        p [k] = t ;
     }
     return (p) ;
 }
@@ -381,23 +388,23 @@ static Int *randperm (Int n, Int seed)
 
 static double do_1_solve (cholmod_sparse *A, cholmod_dense *B,
     cholmod_dense *Xknown, Int *Puser, Int *Quser,
-    KLU_common *Common, cholmod_common *ch, Int *nan)
+    KLU_common *Common, cholmod_common *ch, Int *isnan)
 {
     Int *Ai, *Ap ;
-    double *Ax, *Bx, *Xknownx, *Xx, *Ax2, *Axx ;
+    double *Ax, *Xknownx, *Xx, *Ax2, *Axx ;
     KLU_symbolic *Symbolic = NULL ; 
     KLU_numeric *Numeric = NULL ;
     cholmod_dense *X = NULL, *R = NULL ;
     cholmod_sparse *AT = NULL, *A2 = NULL, *AT2 = NULL ;
     double one [2], minusone [2],
-	rnorm, anorm, bnorm, xnorm, relresid, relerr, err = 0. ;
+        rnorm, anorm, xnorm, relresid, relerr, err = 0. ;
     Int i, j, nrhs2, isreal, n, nrhs, transpose, step, k, save, tries ;
 
     printf ("\ndo_1_solve: btf "ID" maxwork %g scale "ID" ordering "ID" user: "
-	ID" P,Q: %d halt: "ID"\n",
-	Common->btf, Common->maxwork, Common->scale, Common->ordering,
-	Common->user_data ?  (*((Int *) Common->user_data)) : -1,
-	(Puser != NULL || Quser != NULL), Common->halt_if_singular) ;
+        ID" P,Q: %d halt: "ID"\n",
+        Common->btf, Common->maxwork, Common->scale, Common->ordering,
+        Common->user_data ?  (*((Int *) Common->user_data)) : -1,
+        (Puser != NULL || Quser != NULL), Common->halt_if_singular) ;
     fflush (stdout) ;
     fflush (stderr) ;
 
@@ -409,7 +416,7 @@ static double do_1_solve (cholmod_sparse *A, cholmod_dense *B,
     Ax = A->x ;
     n = A->nrow ;
     isreal = (A->xtype == CHOLMOD_REAL) ;
-    Bx = B->x ;
+    /* Bx = B->x ; */
     Xknownx = Xknown->x ;
     nrhs = B->ncol ;
 
@@ -427,22 +434,22 @@ static double do_1_solve (cholmod_sparse *A, cholmod_dense *B,
     my_tries = 0 ;
     for (tries = 0 ; Symbolic == NULL && my_tries == 0 ; tries++)
     {
-	my_tries = tries ;
-	if (Puser != NULL || Quser != NULL)
-	{
-	    Symbolic = klu_analyze_given (n, Ap, Ai, Puser, Quser, Common) ;
-	}
-	else
-	{
-	    Symbolic = klu_analyze (n, Ap, Ai, Common) ;
-	}
+        my_tries = tries ;
+        if (Puser != NULL || Quser != NULL)
+        {
+            Symbolic = klu_analyze_given (n, Ap, Ai, Puser, Quser, Common) ;
+        }
+        else
+        {
+            Symbolic = klu_analyze (n, Ap, Ai, Common) ;
+        }
     }
     printf ("sym try "ID" btf "ID" ordering "ID"\n",
-	tries, Common->btf, Common->ordering) ;
+        tries, Common->btf, Common->ordering) ;
     if (Symbolic == NULL)
     {
-	printf ("Symbolic is null\n") ;
-	return (998) ;
+        printf ("Symbolic is null\n") ;
+        return (998) ;
     }
     my_tries = -1 ;
 
@@ -453,8 +460,8 @@ static double do_1_solve (cholmod_sparse *A, cholmod_dense *B,
     my_srand (42) ;
     for (k = 0 ; k < Ap [n] * (isreal ? 1:2) ; k++)
     {
-	Ax2 [k] = Ax [k] * 
-	    (1 + 1e-4 * ((double) my_rand ( )) / ((double) MY_RAND_MAX)) ;
+        Ax2 [k] = Ax [k] * 
+            (1 + 1e-4 * ((double) my_rand ( )) / ((double) MY_RAND_MAX)) ;
     }
 
     AT = isreal ? NULL : CHOLMOD_transpose (A, 1, ch) ;
@@ -466,273 +473,273 @@ static double do_1_solve (cholmod_sparse *A, cholmod_dense *B,
 
     for (step = 1 ; step <= 3 ; step++)
     {
-	printf ("step: "ID"\n", step) ;
-	fflush (stdout) ;
-
-	/* ------------------------------------------------------------------ */
-	/* factorization or refactorization */
-	/* ------------------------------------------------------------------ */
-
-	/* step 1: factor
-	   step 2: refactor with same A
-	   step 3: refactor with modified A, and scaling forced on
-	   and solve each time
-	*/
-
-	if (step == 1)
-	{
-	    /* numeric factorization */
-
-	    Numeric = NULL ;
-	    my_tries = 0 ;
-	    for (tries = 0 ; Numeric == NULL && my_tries == 0 ; tries++)
-	    {
-		my_tries = tries ;
-		if (isreal)
-		{
-		    Numeric = klu_factor (Ap, Ai, Ax, Symbolic, Common) ;
-		}
-		else
-		{
-		    Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, Common) ;
-		}
-	    }
-	    printf ("num try "ID" btf "ID"\n", tries, Common->btf) ;
-	    my_tries = -1 ;
-
-	    if (Common->status == KLU_OK ||
-	       (Common->status == KLU_SINGULAR && !Common->halt_if_singular))
-	    {
-		OK (Numeric) ;
-	    }
-	    else
-	    {
-		FAIL (Numeric) ;
-	    }
-
-	    if (Common->status < KLU_OK)
-	    {
-		printf ("factor failed: "ID"\n", Common->status) ;
-	    }
-
-	}
-	else if (step == 2)
-	{
-
-	    /* numeric refactorization with same values, same scaling */
-	    if (isreal)
-	    {
-		klu_refactor (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
-	    }
-	    else
-	    {
-		klu_z_refactor (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
-	    }
-
-	}
-	else
-	{
-
-	    /* numeric refactorization with different values */
-	    save = Common->scale ;
-	    if (Common->scale == 0)
-	    {
-		Common->scale = 1 ;
-	    }
-	    for (tries = 0 ; tries <= 1 ; tries++)
-	    {
-		my_tries = tries ;
-		if (isreal)
-		{
-		    klu_refactor (Ap, Ai, Ax2, Symbolic, Numeric, Common) ;
-		}
-		else
-		{
-		    klu_z_refactor (Ap, Ai, Ax2, Symbolic, Numeric, Common) ;
-		}
-	    }
-	    my_tries = -1 ;
-	    Common->scale = save ;
-	}
-
-	if (Common->status == KLU_SINGULAR)
-	{
-	    printf ("# singular column : "ID"\n", Common->singular_col) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* diagnostics */
-	/* ------------------------------------------------------------------ */
-
-	Axx = (step == 3) ? Ax2 : Ax ;
-
-	if (isreal)
-	{
-	    klu_rgrowth (Ap, Ai, Axx, Symbolic, Numeric, Common) ;
-	    klu_condest (Ap, Axx, Symbolic, Numeric, Common) ;
-	    klu_rcond (Symbolic, Numeric, Common) ;
-	    klu_flops (Symbolic, Numeric, Common) ;
-	}
-	else
-	{
-	    klu_z_rgrowth (Ap, Ai, Axx, Symbolic, Numeric, Common) ;
-	    klu_z_condest (Ap, Axx, Symbolic, Numeric, Common) ;
-	    klu_z_rcond (Symbolic, Numeric, Common) ;
-	    klu_z_flops (Symbolic, Numeric, Common) ;
-	}
-
-	printf ("growth %g condest %g rcond %g flops %g\n",
-	    Common->rgrowth, Common->condest, Common->rcond, Common->flops) ;
-
-	ludump (Symbolic, Numeric, isreal, ch, Common) ;
-
-	if (Numeric == NULL || Common->status < KLU_OK)
-	{
-	    continue ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* solve */
-	/* ------------------------------------------------------------------ */
-
-	/* forward/backsolve to solve A*X=B or A'*X=B */ 
-	for (transpose = (isreal ? 0 : -1) ; transpose <= 1 ; transpose++)
-	{
-
-	    for (nrhs2 = 1 ; nrhs2 <= nrhs ; nrhs2++)
-	    {
-		/* mangle B so that it has only nrhs2 columns */
-		B->ncol = nrhs2 ;
-
-		X = CHOLMOD_copy_dense (B, ch) ;
-		CHOLMOD_print_dense (X, "X before solve", ch) ;
-		Xx = X->x ;
-
-		if (isreal)
-		{
-		    if (transpose)
-		    {
-			/* solve A'x=b */
-			klu_tsolve (Symbolic, Numeric, n, nrhs2, Xx, Common) ;
-		    }
-		    else
-		    {
-			/* solve A*x=b */
-			klu_solve (Symbolic, Numeric, n, nrhs2, Xx, Common) ;
-		    }
-		}
-		else
-		{
-		    if (transpose)
-		    {
-			/* solve A'x=b (if 1) or A.'x=b (if -1) */
-			klu_z_tsolve (Symbolic, Numeric, n, nrhs2, Xx,
-			    (transpose == 1), Common) ;
-		    }
-		    else
-		    {
-			/* solve A*x=b */
-			klu_z_solve (Symbolic, Numeric, n, nrhs2, Xx, Common) ;
-		    }
-		}
-
-		CHOLMOD_print_dense (X, "X", ch) ;
-
-		/* compute the residual, R = B-A*X, B-A'*X, or B-A.'*X */
-		R = CHOLMOD_copy_dense (B, ch) ;
-		if (transpose == -1)
-		{
-		    /* R = B-A.'*X (use A.' explicitly) */
-		    CHOLMOD_sdmult ((step == 3) ? AT2 : AT,
-			0, minusone, one, X, R, ch) ;
-		}
-		else
-		{
-		    /* R = B-A*X or B-A'*X */
-		    CHOLMOD_sdmult ((step == 3) ? A2 :A,
-			transpose, minusone, one, X, R, ch) ;
-		}
-
-		CHOLMOD_print_dense (R, "R", ch) ;
-
-		/* compute the norms of R, A, X, and B */
-		rnorm = CHOLMOD_norm_dense (R, 1, ch) ;
-		anorm = CHOLMOD_norm_sparse ((step == 3) ? A2 : A, 1, ch) ;
-		xnorm = CHOLMOD_norm_dense (X, 1, ch) ;
-		bnorm = CHOLMOD_norm_dense (B, 1, ch) ;
-
-		CHOLMOD_free_dense (&R, ch) ;
-
-		/* relative residual = norm (r) / (norm (A) * norm (x)) */
-		relresid = rnorm ;
-		if (anorm > 0)
-		{
-		    relresid /= anorm ;
-		}
-		if (xnorm > 0)
-		{
-		    relresid /= xnorm ;
-		}
-
-		if (SCALAR_IS_NAN (relresid))
-		{
-		    *nan = TRUE ;
-		}
-		else
-		{
-		    err = MAX (err, relresid) ;
-		}
-
-		/* relative error = norm (x - xknown) / norm (xknown) */
-		/* overwrite X with X - Xknown */
-		if (transpose || step == 3)
-		{
-		    /* not computed */
-		    relerr = -1 ;
-		}
-		else
-		{
-		    for (j = 0 ; j < nrhs2 ; j++)
-		    {
-			for (i = 0 ; i < n ; i++)
-			{
-			    if (isreal)
-			    {
-				Xx [i+j*n] -= Xknownx [i+j*n] ;
-			    }
-			    else
-			    {
-				Xx [2*(i+j*n)  ] -= Xknownx [2*(i+j*n)  ] ;
-				Xx [2*(i+j*n)+1] -= Xknownx [2*(i+j*n)+1] ;
-			    }
-			}
-		    }
-		    relerr = CHOLMOD_norm_dense (X, 1, ch) ;
-		    xnorm = CHOLMOD_norm_dense (Xknown, 1, ch) ;
-		    if (xnorm > 0)
-		    {
-			relerr /= xnorm ;
-		    }
-
-		    if (SCALAR_IS_NAN (relerr))
-		    {
-			*nan = TRUE ;
-		    }
-		    else
-		    {
-			err = MAX (relerr, err) ;
-		    }
-
-		}
-
-		CHOLMOD_free_dense (&X, ch) ;
-
-		printf (ID" "ID" relresid %10.3g   relerr %10.3g %g\n", 
-		    transpose, nrhs2, relresid, relerr, err) ;
-
-		B->ncol = nrhs ;    /* restore B */
-	    }
-	}
+        printf ("step: "ID"\n", step) ;
+        fflush (stdout) ;
+
+        /* ------------------------------------------------------------------ */
+        /* factorization or refactorization */
+        /* ------------------------------------------------------------------ */
+
+        /* step 1: factor
+           step 2: refactor with same A
+           step 3: refactor with modified A, and scaling forced on
+           and solve each time
+        */
+
+        if (step == 1)
+        {
+            /* numeric factorization */
+
+            Numeric = NULL ;
+            my_tries = 0 ;
+            for (tries = 0 ; Numeric == NULL && my_tries == 0 ; tries++)
+            {
+                my_tries = tries ;
+                if (isreal)
+                {
+                    Numeric = klu_factor (Ap, Ai, Ax, Symbolic, Common) ;
+                }
+                else
+                {
+                    Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, Common) ;
+                }
+            }
+            printf ("num try "ID" btf "ID"\n", tries, Common->btf) ;
+            my_tries = -1 ;
+
+            if (Common->status == KLU_OK ||
+               (Common->status == KLU_SINGULAR && !Common->halt_if_singular))
+            {
+                OK (Numeric) ;
+            }
+            else
+            {
+                FAIL (Numeric) ;
+            }
+
+            if (Common->status < KLU_OK)
+            {
+                printf ("factor failed: "ID"\n", Common->status) ;
+            }
+
+        }
+        else if (step == 2)
+        {
+
+            /* numeric refactorization with same values, same scaling */
+            if (isreal)
+            {
+                klu_refactor (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
+            }
+            else
+            {
+                klu_z_refactor (Ap, Ai, Ax, Symbolic, Numeric, Common) ;
+            }
+
+        }
+        else
+        {
+
+            /* numeric refactorization with different values */
+            save = Common->scale ;
+            if (Common->scale == 0)
+            {
+                Common->scale = 1 ;
+            }
+            for (tries = 0 ; tries <= 1 ; tries++)
+            {
+                my_tries = tries ;
+                if (isreal)
+                {
+                    klu_refactor (Ap, Ai, Ax2, Symbolic, Numeric, Common) ;
+                }
+                else
+                {
+                    klu_z_refactor (Ap, Ai, Ax2, Symbolic, Numeric, Common) ;
+                }
+            }
+            my_tries = -1 ;
+            Common->scale = save ;
+        }
+
+        if (Common->status == KLU_SINGULAR)
+        {
+            printf ("# singular column : "ID"\n", Common->singular_col) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* diagnostics */
+        /* ------------------------------------------------------------------ */
+
+        Axx = (step == 3) ? Ax2 : Ax ;
+
+        if (isreal)
+        {
+            klu_rgrowth (Ap, Ai, Axx, Symbolic, Numeric, Common) ;
+            klu_condest (Ap, Axx, Symbolic, Numeric, Common) ;
+            klu_rcond (Symbolic, Numeric, Common) ;
+            klu_flops (Symbolic, Numeric, Common) ;
+        }
+        else
+        {
+            klu_z_rgrowth (Ap, Ai, Axx, Symbolic, Numeric, Common) ;
+            klu_z_condest (Ap, Axx, Symbolic, Numeric, Common) ;
+            klu_z_rcond (Symbolic, Numeric, Common) ;
+            klu_z_flops (Symbolic, Numeric, Common) ;
+        }
+
+        printf ("growth %g condest %g rcond %g flops %g\n",
+            Common->rgrowth, Common->condest, Common->rcond, Common->flops) ;
+
+        ludump (Symbolic, Numeric, isreal, ch, Common) ;
+
+        if (Numeric == NULL || Common->status < KLU_OK)
+        {
+            continue ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* solve */
+        /* ------------------------------------------------------------------ */
+
+        /* forward/backsolve to solve A*X=B or A'*X=B */ 
+        for (transpose = (isreal ? 0 : -1) ; transpose <= 1 ; transpose++)
+        {
+
+            for (nrhs2 = 1 ; nrhs2 <= nrhs ; nrhs2++)
+            {
+                /* mangle B so that it has only nrhs2 columns */
+                B->ncol = nrhs2 ;
+
+                X = CHOLMOD_copy_dense (B, ch) ;
+                CHOLMOD_print_dense (X, "X before solve", ch) ;
+                Xx = X->x ;
+
+                if (isreal)
+                {
+                    if (transpose)
+                    {
+                        /* solve A'x=b */
+                        klu_tsolve (Symbolic, Numeric, n, nrhs2, Xx, Common) ;
+                    }
+                    else
+                    {
+                        /* solve A*x=b */
+                        klu_solve (Symbolic, Numeric, n, nrhs2, Xx, Common) ;
+                    }
+                }
+                else
+                {
+                    if (transpose)
+                    {
+                        /* solve A'x=b (if 1) or A.'x=b (if -1) */
+                        klu_z_tsolve (Symbolic, Numeric, n, nrhs2, Xx,
+                            (transpose == 1), Common) ;
+                    }
+                    else
+                    {
+                        /* solve A*x=b */
+                        klu_z_solve (Symbolic, Numeric, n, nrhs2, Xx, Common) ;
+                    }
+                }
+
+                CHOLMOD_print_dense (X, "X", ch) ;
+
+                /* compute the residual, R = B-A*X, B-A'*X, or B-A.'*X */
+                R = CHOLMOD_copy_dense (B, ch) ;
+                if (transpose == -1)
+                {
+                    /* R = B-A.'*X (use A.' explicitly) */
+                    CHOLMOD_sdmult ((step == 3) ? AT2 : AT,
+                        0, minusone, one, X, R, ch) ;
+                }
+                else
+                {
+                    /* R = B-A*X or B-A'*X */
+                    CHOLMOD_sdmult ((step == 3) ? A2 :A,
+                        transpose, minusone, one, X, R, ch) ;
+                }
+
+                CHOLMOD_print_dense (R, "R", ch) ;
+
+                /* compute the norms of R, A, X, and B */
+                rnorm = CHOLMOD_norm_dense (R, 1, ch) ;
+                anorm = CHOLMOD_norm_sparse ((step == 3) ? A2 : A, 1, ch) ;
+                xnorm = CHOLMOD_norm_dense (X, 1, ch) ;
+                /* bnorm = CHOLMOD_norm_dense (B, 1, ch) ; */
+
+                CHOLMOD_free_dense (&R, ch) ;
+
+                /* relative residual = norm (r) / (norm (A) * norm (x)) */
+                relresid = rnorm ;
+                if (anorm > 0)
+                {
+                    relresid /= anorm ;
+                }
+                if (xnorm > 0)
+                {
+                    relresid /= xnorm ;
+                }
+
+                if (SCALAR_IS_NAN (relresid))
+                {
+                    *isnan = TRUE ;
+                }
+                else
+                {
+                    err = MAX (err, relresid) ;
+                }
+
+                /* relative error = norm (x - xknown) / norm (xknown) */
+                /* overwrite X with X - Xknown */
+                if (transpose || step == 3)
+                {
+                    /* not computed */
+                    relerr = -1 ;
+                }
+                else
+                {
+                    for (j = 0 ; j < nrhs2 ; j++)
+                    {
+                        for (i = 0 ; i < n ; i++)
+                        {
+                            if (isreal)
+                            {
+                                Xx [i+j*n] -= Xknownx [i+j*n] ;
+                            }
+                            else
+                            {
+                                Xx [2*(i+j*n)  ] -= Xknownx [2*(i+j*n)  ] ;
+                                Xx [2*(i+j*n)+1] -= Xknownx [2*(i+j*n)+1] ;
+                            }
+                        }
+                    }
+                    relerr = CHOLMOD_norm_dense (X, 1, ch) ;
+                    xnorm = CHOLMOD_norm_dense (Xknown, 1, ch) ;
+                    if (xnorm > 0)
+                    {
+                        relerr /= xnorm ;
+                    }
+
+                    if (SCALAR_IS_NAN (relerr))
+                    {
+                        *isnan = TRUE ;
+                    }
+                    else
+                    {
+                        err = MAX (relerr, err) ;
+                    }
+
+                }
+
+                CHOLMOD_free_dense (&X, ch) ;
+
+                printf (ID" "ID" relresid %10.3g   relerr %10.3g %g\n", 
+                    transpose, nrhs2, relresid, relerr, err) ;
+
+                B->ncol = nrhs ;    /* restore B */
+            }
+        }
     }
 
     /* ---------------------------------------------------------------------- */
@@ -742,11 +749,11 @@ static double do_1_solve (cholmod_sparse *A, cholmod_dense *B,
     klu_free_symbolic (&Symbolic, Common) ;
     if (isreal)
     {
-	klu_free_numeric (&Numeric, Common) ;
+        klu_free_numeric (&Numeric, Common) ;
     }
     else
     {
-	klu_z_free_numeric (&Numeric, Common) ;
+        klu_z_free_numeric (&Numeric, Common) ;
     }
     CHOLMOD_free_sparse (&A2, ch) ;
     CHOLMOD_free_sparse (&AT, ch) ;
@@ -764,17 +771,17 @@ static double do_1_solve (cholmod_sparse *A, cholmod_dense *B,
 /* test KLU with many options */
 
 static double do_solves (cholmod_sparse *A, cholmod_dense *B, cholmod_dense *X,
-    Int *Puser, Int *Quser, KLU_common *Common, cholmod_common *ch, Int *nan)
+    Int *Puser, Int *Quser, KLU_common *Common, cholmod_common *ch, Int *isnan)
 {
     double err, maxerr = 0 ;
     Int n = A->nrow, sflag ;
-    *nan = FALSE ;
+    *isnan = FALSE ;
 
     /* ---------------------------------------------------------------------- */
     /* test KLU with the system A*X=B and default options */
     /* ---------------------------------------------------------------------- */
 
-    maxerr = do_1_solve (A, B, X, NULL, NULL, Common, ch, nan) ;
+    maxerr = do_1_solve (A, B, X, NULL, NULL, Common, ch, isnan) ;
 
     /* ---------------------------------------------------------------------- */
     /* test with non-default options */
@@ -783,42 +790,42 @@ static double do_solves (cholmod_sparse *A, cholmod_dense *B, cholmod_dense *X,
     Common->user_order = klu_cholmod ;
     for (Common->btf = 0 ; Common->btf <= 2 ; Common->btf++)
     {
-	Common->maxwork = (Common->btf == 2) ? 0.001 : 0 ;
-
-	for (Common->halt_if_singular = 0 ; Common->halt_if_singular <= 1 ;
-	    Common->halt_if_singular++)
-	{
-	    for (Common->scale = 0 ; Common->scale <= 2 ; Common->scale++)
-
-	    {
-		fprintf (stderr, ".") ;
-		fflush (stderr) ;
-
-		/* orderings: 0: AMD, 1: COLAMD, 2: natural, 3: user function */
-		for (Common->ordering = 0 ; Common->ordering <= 3 ;
-		     Common->ordering++)
-		{
-		    err = do_1_solve (A, B, X, NULL, NULL, Common, ch, nan) ;
-		    maxerr = MAX (maxerr, err) ;
-		}
-
-		/* user-ordering, unsymmetric case */
-		Common->ordering = 3 ;
-		Common->user_data = &sflag ;
-		sflag = 0 ;
-		err = do_1_solve (A, B, X, NULL, NULL, Common, ch, nan) ;
-		maxerr = MAX (maxerr, err) ;
-		Common->user_data = NULL ;
-
-		/* Puser and Quser, but only for small matrices */
-		Common->ordering = 2 ;
-		if (n < 200)
-		{
-		    err = do_1_solve (A, B, X, Puser, Quser, Common, ch, nan) ;
-		    maxerr = MAX (maxerr, err) ;
-		}
-	    }
-	}
+        Common->maxwork = (Common->btf == 2) ? 0.001 : 0 ;
+
+        for (Common->halt_if_singular = 0 ; Common->halt_if_singular <= 1 ;
+            Common->halt_if_singular++)
+        {
+            for (Common->scale = 0 ; Common->scale <= 2 ; Common->scale++)
+
+            {
+                fprintf (stderr, ".") ;
+                fflush (stderr) ;
+
+                /* orderings: 0: AMD, 1: COLAMD, 2: natural, 3: user function */
+                for (Common->ordering = 0 ; Common->ordering <= 3 ;
+                     Common->ordering++)
+                {
+                    err = do_1_solve (A, B, X, NULL, NULL, Common, ch, isnan) ;
+                    maxerr = MAX (maxerr, err) ;
+                }
+
+                /* user-ordering, unsymmetric case */
+                Common->ordering = 3 ;
+                Common->user_data = &sflag ;
+                sflag = 0 ;
+                err = do_1_solve (A, B, X, NULL, NULL, Common, ch, isnan) ;
+                maxerr = MAX (maxerr, err) ;
+                Common->user_data = NULL ;
+
+                /* Puser and Quser, but only for small matrices */
+                Common->ordering = 2 ;
+                if (n < 200)
+                {
+                    err = do_1_solve (A, B, X, Puser, Quser, Common, ch, isnan);
+                    maxerr = MAX (maxerr, err) ;
+                }
+            }
+        }
     }
 
     /* restore defaults */
@@ -845,9 +852,9 @@ int main (void)
     cholmod_dense *X, *B ;
     cholmod_common ch ;
     Int *Ap, *Ai, *Puser, *Quser, *Gunk ;
-    double *Ax, *Bx, *Xx, *A2x ;
+    double *Ax, *Xx, *A2x ;
     double one [2], zero [2], xsave, maxerr ;
-    Int n, i, j, nz, save, isreal, k, nan ;
+    Int n, i, j, nz, save, isreal, k, isnan ;
     KLU_symbolic *Symbolic, *Symbolic2 ;
     KLU_numeric *Numeric ;
 
@@ -860,7 +867,7 @@ int main (void)
     OK (klu_defaults (&Common)) ;
     CHOLMOD_start (&ch) ;
     ch.print = 0 ;
-    normal_memory_handler (&Common) ;
+    normal_memory_handler ( ) ;
 
     /* ---------------------------------------------------------------------- */
     /* read in a sparse matrix from stdin */
@@ -870,15 +877,15 @@ int main (void)
 
     if (A->nrow != A->ncol || A->stype != 0)
     {
-	fprintf (stderr, "error: only square unsymmetric matrices handled\n") ;
-	CHOLMOD_free_sparse (&A, &ch) ;
-	return (0) ;
+        fprintf (stderr, "error: only square unsymmetric matrices handled\n") ;
+        CHOLMOD_free_sparse (&A, &ch) ;
+        return (0) ;
     }
     if (!(A->xtype == CHOLMOD_REAL || A->xtype == CHOLMOD_COMPLEX))
     {
-	fprintf (stderr, "error: only real or complex matrices hanlded\n") ;
-	CHOLMOD_free_sparse (&A, &ch) ;
-	return (0) ;
+        fprintf (stderr, "error: only real or complex matrices hanlded\n") ;
+        CHOLMOD_free_sparse (&A, &ch) ;
+        return (0) ;
     }
 
     n = A->nrow ;
@@ -903,40 +910,40 @@ int main (void)
     Xx = X->x ;
     for (j = 0 ; j < NRHS ; j++)
     {
-	for (i = 0 ; i < n ; i++)
-	{
-	    if (isreal)
-	    {
-		Xx [i] = 1 + ((double) i) / ((double) n) + j * 100;
-	    }
-	    else
-	    {
-		Xx [2*i  ] = 1 + ((double) i) / ((double) n) + j * 100 ;
-		Xx [2*i+1] =  - ((double) i+1) / ((double) n + j) ;
-		if (j == NRHS-1)
-		{
-		    Xx [2*i+1] = 0 ;	/* zero imaginary part */
-		}
-		else if (j == NRHS-2)
-		{
-		    Xx [2*i] = 0 ;	/* zero real part */
-		}
-	    }
-	}
-	Xx += isreal ? n : 2*n ;
+        for (i = 0 ; i < n ; i++)
+        {
+            if (isreal)
+            {
+                Xx [i] = 1 + ((double) i) / ((double) n) + j * 100;
+            }
+            else
+            {
+                Xx [2*i  ] = 1 + ((double) i) / ((double) n) + j * 100 ;
+                Xx [2*i+1] =  - ((double) i+1) / ((double) n + j) ;
+                if (j == NRHS-1)
+                {
+                    Xx [2*i+1] = 0 ;    /* zero imaginary part */
+                }
+                else if (j == NRHS-2)
+                {
+                    Xx [2*i] = 0 ;      /* zero real part */
+                }
+            }
+        }
+        Xx += isreal ? n : 2*n ;
     }
 
     /* B = A*X */
     B = CHOLMOD_allocate_dense (n, NRHS, n, A->xtype, &ch) ;
     CHOLMOD_sdmult (A, 0, one, zero, X, B, &ch) ;
-    Bx = B->x ;
+    /* Bx = B->x ; */
 
     /* ---------------------------------------------------------------------- */
     /* test KLU */
     /* ---------------------------------------------------------------------- */
 
-    test_memory_handler (&Common) ;
-    maxerr = do_solves (A, B, X, Puser, Quser, &Common, &ch, &nan) ;
+    test_memory_handler ( ) ;
+    maxerr = do_solves (A, B, X, Puser, Quser, &Common, &ch, &isnan) ;
 
     /* ---------------------------------------------------------------------- */
     /* basic error checking */
@@ -945,14 +952,14 @@ int main (void)
     FAIL (klu_defaults (NULL)) ;
 
     FAIL (klu_extract (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	    NULL, NULL, NULL, NULL, NULL, NULL, NULL)) ;
+            NULL, NULL, NULL, NULL, NULL, NULL, NULL)) ;
     FAIL (klu_extract (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	    NULL, NULL, NULL, NULL, NULL, NULL, &Common)) ;
+            NULL, NULL, NULL, NULL, NULL, NULL, &Common)) ;
 
     FAIL (klu_z_extract (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) ;
+            NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) ;
     FAIL (klu_z_extract (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &Common)) ;
+            NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &Common)) ;
 
     FAIL (klu_analyze (0, NULL, NULL, NULL)) ;
     FAIL (klu_analyze (0, NULL, NULL, &Common)) ;
@@ -1052,112 +1059,112 @@ int main (void)
     if (nz > 0)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* row index out of bounds */
-	/* ------------------------------------------------------------------ */
-
-	save = Ai [0] ;
-	Ai [0] = -1 ;
-	FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
-	if (isreal)
-	{
-	    FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	else
-	{
-	    FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	Ai [0] = save ;
-
-	/* ------------------------------------------------------------------ */
-	/* row index out of bounds */
-	/* ------------------------------------------------------------------ */
-
-	save = Ai [0] ;
-	Ai [0] = Int_MAX ;
-	FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
-	if (isreal)
-	{
-	    FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	else
-	{
-	    FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	Ai [0] = save ;
-
-	/* ------------------------------------------------------------------ */
-	/* column pointers mangled */
-	/* ------------------------------------------------------------------ */
-
-	save = Ap [n] ;
-	Ap [n] = -1 ;
-	FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
-	if (isreal)
-	{
-	    FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	else
-	{
-	    FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	Ap [n] = save ;
-
-	/* ------------------------------------------------------------------ */
-	/* column pointers mangled */
-	/* ------------------------------------------------------------------ */
-
-	save = Ap [n] ;
-	Ap [n] = Ap [n-1] - 1 ;
-	FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
-	if (isreal)
-	{
-	    FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	else
-	{
-	    FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	}
-	Ap [n] = save ;
-
-	/* ------------------------------------------------------------------ */
-	/* duplicates */
-	/* ------------------------------------------------------------------ */
-
-	if (n > 1 && Ap [1] - Ap [0] > 1)
-	{
-	    save = Ai [1] ;
-	    Ai [1] = Ai [0] ;
-	    FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
-	    if (isreal)
-	    {
-		FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	    }
-	    else
-	    {
-		FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
-	    }
-	    Ai [1] = save ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* invalid ordering */
-	/* ------------------------------------------------------------------ */
-
-	save = Common.ordering ;
-	Common.ordering = 42 ;
-	FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
-	Common.ordering = save ;
-
-	/* ------------------------------------------------------------------ */
-	/* invalid ordering (klu_cholmod, with NULL user_ordering) */
-	/* ------------------------------------------------------------------ */
-
-	save = Common.ordering ;
-	Common.user_order = NULL ;
-	Common.ordering = 3 ;
-	FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
-	Common.ordering = save ;
+        /* ------------------------------------------------------------------ */
+        /* row index out of bounds */
+        /* ------------------------------------------------------------------ */
+
+        save = Ai [0] ;
+        Ai [0] = -1 ;
+        FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
+        if (isreal)
+        {
+            FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        else
+        {
+            FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        Ai [0] = save ;
+
+        /* ------------------------------------------------------------------ */
+        /* row index out of bounds */
+        /* ------------------------------------------------------------------ */
+
+        save = Ai [0] ;
+        Ai [0] = Int_MAX ;
+        FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
+        if (isreal)
+        {
+            FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        else
+        {
+            FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        Ai [0] = save ;
+
+        /* ------------------------------------------------------------------ */
+        /* column pointers mangled */
+        /* ------------------------------------------------------------------ */
+
+        save = Ap [n] ;
+        Ap [n] = -1 ;
+        FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
+        if (isreal)
+        {
+            FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        else
+        {
+            FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        Ap [n] = save ;
+
+        /* ------------------------------------------------------------------ */
+        /* column pointers mangled */
+        /* ------------------------------------------------------------------ */
+
+        save = Ap [n] ;
+        Ap [n] = Ap [n-1] - 1 ;
+        FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
+        if (isreal)
+        {
+            FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        else
+        {
+            FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+        }
+        Ap [n] = save ;
+
+        /* ------------------------------------------------------------------ */
+        /* duplicates */
+        /* ------------------------------------------------------------------ */
+
+        if (n > 1 && Ap [1] - Ap [0] > 1)
+        {
+            save = Ai [1] ;
+            Ai [1] = Ai [0] ;
+            FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
+            if (isreal)
+            {
+                FAIL (klu_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+            }
+            else
+            {
+                FAIL (klu_z_scale (1, n, Ap, Ai, Ax, Xx, Puser, &Common)) ;
+            }
+            Ai [1] = save ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* invalid ordering */
+        /* ------------------------------------------------------------------ */
+
+        save = Common.ordering ;
+        Common.ordering = 42 ;
+        FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
+        Common.ordering = save ;
+
+        /* ------------------------------------------------------------------ */
+        /* invalid ordering (klu_cholmod, with NULL user_ordering) */
+        /* ------------------------------------------------------------------ */
+
+        save = Common.ordering ;
+        Common.user_order = NULL ;
+        Common.ordering = 3 ;
+        FAIL (klu_analyze (n, Ap, Ai, &Common)) ;
+        Common.ordering = save ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -1171,177 +1178,177 @@ int main (void)
     if (nz > 0)
     {
 
-	/* ------------------------------------------------------------------ */
-	/* Int overflow */
-	/* ------------------------------------------------------------------ */
-
-	if (n == 100)
-	{
-	    Common.ordering = 2 ;
-	    Symbolic2 = klu_analyze (n, Ap, Ai, &Common) ;
-	    OK (Symbolic2) ;
-	    Common.memgrow = Int_MAX ;
-	    if (isreal)
-	    {
-		Numeric = klu_factor (Ap, Ai, Ax, Symbolic2, &Common) ;
-	    }
-	    else
-	    {
-		Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic2, &Common) ;
-	    }
-	    Common.memgrow = 1.2 ;
-	    Common.ordering = 0 ;
-	    klu_free_symbolic (&Symbolic2, &Common) ;
-	    klu_free_numeric (&Numeric, &Common) ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* Int overflow again */
-	/* ------------------------------------------------------------------ */
-
-	Common.initmem = Int_MAX ;
-	Common.initmem_amd = Int_MAX ;
-	if (isreal)
-	{
-	    Numeric = klu_factor (Ap, Ai, Ax, Symbolic, &Common) ;
-	}
-	else
-	{
-	    Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, &Common) ;
-	}
-	Common.initmem = 10 ;
-	Common.initmem_amd = 1.2 ;
-	klu_free_numeric (&Numeric, &Common) ;
-
-	/* ------------------------------------------------------------------ */
-	/* mangle the matrix */
-	/* ------------------------------------------------------------------ */
-
-	save = Ai [0] ;
-	Ai [0] = -1 ;
-
-	if (isreal)
-	{
-	    Numeric = klu_factor (Ap, Ai, Ax, Symbolic, &Common) ;
-	}
-	else
-	{
-	    Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, &Common) ;
-	}
-	FAIL (Numeric) ;
-	Ai [0] = save ;
-
-	/* ------------------------------------------------------------------ */
-	/* nan and inf handling */
-	/* ------------------------------------------------------------------ */
-
-	xsave = Ax [0] ;
-	Ax [0] = one [0] / zero [0] ;
-	if (isreal)
-	{
-	    Numeric = klu_factor (Ap, Ai, Ax, Symbolic, &Common) ;
-	    klu_rcond (Symbolic, Numeric, &Common) ;
-	    klu_condest (Ap, Ax, Symbolic, Numeric, &Common) ;
-	}
-	else
-	{
-	    Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, &Common) ;
-	    klu_z_rcond (Symbolic, Numeric, &Common) ;
-	    klu_z_condest (Ap, Ax, Symbolic, Numeric, &Common) ;
-	}
-	printf ("Nan case: rcond %g condest %g\n",
-	    Common.rcond, Common.condest) ;
-	OK (Numeric) ;
-	Ax [0] = xsave ;
-
-	/* ------------------------------------------------------------------ */
-	/* mangle the matrix again */
-	/* ------------------------------------------------------------------ */
-
-	save = Ai [0] ;
-	Ai [0] = -1 ;
-	if (isreal)
-	{
-	    FAIL (klu_refactor (Ap, Ai, Ax, Symbolic, Numeric, &Common)) ;
-	}
-	else
-	{
-	    FAIL (klu_z_refactor (Ap, Ai, Ax, Symbolic, Numeric, &Common)) ;
-	}
-	Ai [0] = save ;
-
-	/* ------------------------------------------------------------------ */
-	/* all zero */
-	/* ------------------------------------------------------------------ */
-
-	A2 = CHOLMOD_copy_sparse (A, &ch) ;
-	A2x = A2->x ;
-	for (k = 0 ; k < nz * (isreal ? 1:2) ; k++)
-	{
-	    A2x [k] = 0 ;
-	}
-	for (Common.halt_if_singular = 0 ; Common.halt_if_singular <= 1 ;
-	    Common.halt_if_singular++)
-	{
-	    for (Common.scale = -1 ; Common.scale <= 2 ; Common.scale++)
-	    {
-		if (isreal)
-		{
-		    klu_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
-		    klu_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
-		}
-		else
-		{
-		    klu_z_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
-		    klu_z_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
-		}
-		OK (Common.status = KLU_SINGULAR) ;
-	    }
-	}
-	CHOLMOD_free_sparse (&A2, &ch) ;
-
-	/* ------------------------------------------------------------------ */
-	/* all one, or all 1i for complex case */
-	/* ------------------------------------------------------------------ */
-
-	A2 = CHOLMOD_copy_sparse (A, &ch) ;
-	A2x = A2->x ;
-	for (k = 0 ; k < nz ; k++)
-	{
-	    if (isreal)
-	    {
-		A2x [k] = 1 ;
-	    }
-	    else
-	    {
-		A2x [2*k  ] = 0 ;
-		A2x [2*k+1] = 1 ;
-	    }
-	}
-	Common.halt_if_singular = 0 ;
-	Common.scale = 0 ;
-	if (isreal)
-	{
-	    klu_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
-	    klu_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
-	}
-	else
-	{
-	    klu_z_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
-	    klu_z_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
-	}
-	OK (Common.status = KLU_SINGULAR) ;
-	CHOLMOD_free_sparse (&A2, &ch) ;
+        /* ------------------------------------------------------------------ */
+        /* Int overflow */
+        /* ------------------------------------------------------------------ */
+
+        if (n == 100)
+        {
+            Common.ordering = 2 ;
+            Symbolic2 = klu_analyze (n, Ap, Ai, &Common) ;
+            OK (Symbolic2) ;
+            Common.memgrow = Int_MAX ;
+            if (isreal)
+            {
+                Numeric = klu_factor (Ap, Ai, Ax, Symbolic2, &Common) ;
+            }
+            else
+            {
+                Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic2, &Common) ;
+            }
+            Common.memgrow = 1.2 ;
+            Common.ordering = 0 ;
+            klu_free_symbolic (&Symbolic2, &Common) ;
+            klu_free_numeric (&Numeric, &Common) ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* Int overflow again */
+        /* ------------------------------------------------------------------ */
+
+        Common.initmem = Int_MAX ;
+        Common.initmem_amd = Int_MAX ;
+        if (isreal)
+        {
+            Numeric = klu_factor (Ap, Ai, Ax, Symbolic, &Common) ;
+        }
+        else
+        {
+            Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, &Common) ;
+        }
+        Common.initmem = 10 ;
+        Common.initmem_amd = 1.2 ;
+        klu_free_numeric (&Numeric, &Common) ;
+
+        /* ------------------------------------------------------------------ */
+        /* mangle the matrix */
+        /* ------------------------------------------------------------------ */
+
+        save = Ai [0] ;
+        Ai [0] = -1 ;
+
+        if (isreal)
+        {
+            Numeric = klu_factor (Ap, Ai, Ax, Symbolic, &Common) ;
+        }
+        else
+        {
+            Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, &Common) ;
+        }
+        FAIL (Numeric) ;
+        Ai [0] = save ;
+
+        /* ------------------------------------------------------------------ */
+        /* nan and inf handling */
+        /* ------------------------------------------------------------------ */
+
+        xsave = Ax [0] ;
+        Ax [0] = one [0] / zero [0] ;
+        if (isreal)
+        {
+            Numeric = klu_factor (Ap, Ai, Ax, Symbolic, &Common) ;
+            klu_rcond (Symbolic, Numeric, &Common) ;
+            klu_condest (Ap, Ax, Symbolic, Numeric, &Common) ;
+        }
+        else
+        {
+            Numeric = klu_z_factor (Ap, Ai, Ax, Symbolic, &Common) ;
+            klu_z_rcond (Symbolic, Numeric, &Common) ;
+            klu_z_condest (Ap, Ax, Symbolic, Numeric, &Common) ;
+        }
+        printf ("Nan case: rcond %g condest %g\n",
+            Common.rcond, Common.condest) ;
+        OK (Numeric) ;
+        Ax [0] = xsave ;
+
+        /* ------------------------------------------------------------------ */
+        /* mangle the matrix again */
+        /* ------------------------------------------------------------------ */
+
+        save = Ai [0] ;
+        Ai [0] = -1 ;
+        if (isreal)
+        {
+            FAIL (klu_refactor (Ap, Ai, Ax, Symbolic, Numeric, &Common)) ;
+        }
+        else
+        {
+            FAIL (klu_z_refactor (Ap, Ai, Ax, Symbolic, Numeric, &Common)) ;
+        }
+        Ai [0] = save ;
+
+        /* ------------------------------------------------------------------ */
+        /* all zero */
+        /* ------------------------------------------------------------------ */
+
+        A2 = CHOLMOD_copy_sparse (A, &ch) ;
+        A2x = A2->x ;
+        for (k = 0 ; k < nz * (isreal ? 1:2) ; k++)
+        {
+            A2x [k] = 0 ;
+        }
+        for (Common.halt_if_singular = 0 ; Common.halt_if_singular <= 1 ;
+            Common.halt_if_singular++)
+        {
+            for (Common.scale = -1 ; Common.scale <= 2 ; Common.scale++)
+            {
+                if (isreal)
+                {
+                    klu_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
+                    klu_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
+                }
+                else
+                {
+                    klu_z_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
+                    klu_z_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
+                }
+                OK (Common.status = KLU_SINGULAR) ;
+            }
+        }
+        CHOLMOD_free_sparse (&A2, &ch) ;
+
+        /* ------------------------------------------------------------------ */
+        /* all one, or all 1i for complex case */
+        /* ------------------------------------------------------------------ */
+
+        A2 = CHOLMOD_copy_sparse (A, &ch) ;
+        A2x = A2->x ;
+        for (k = 0 ; k < nz ; k++)
+        {
+            if (isreal)
+            {
+                A2x [k] = 1 ;
+            }
+            else
+            {
+                A2x [2*k  ] = 0 ;
+                A2x [2*k+1] = 1 ;
+            }
+        }
+        Common.halt_if_singular = 0 ;
+        Common.scale = 0 ;
+        if (isreal)
+        {
+            klu_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
+            klu_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
+        }
+        else
+        {
+            klu_z_refactor (Ap, Ai, A2x, Symbolic, Numeric, &Common) ;
+            klu_z_condest (Ap, A2x, Symbolic, Numeric, &Common) ;
+        }
+        OK (Common.status = KLU_SINGULAR) ;
+        CHOLMOD_free_sparse (&A2, &ch) ;
     }
 
     klu_free_symbolic (&Symbolic, &Common) ;
     if (isreal)
     {
-	klu_free_numeric (&Numeric, &Common) ;
+        klu_free_numeric (&Numeric, &Common) ;
     }
     else
     {
-	klu_z_free_numeric (&Numeric, &Common) ;
+        klu_z_free_numeric (&Numeric, &Common) ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -1358,18 +1365,18 @@ int main (void)
     printf (" maxerr %10.3e", maxerr) ;
     if (maxerr < 1e-8)
     {
-	fprintf (stderr, "  test passed") ;
-	printf ("  test passed") ;
+        fprintf (stderr, "  test passed") ;
+        printf ("  test passed") ;
     }
     else
     {
-	fprintf (stderr, "  test FAILED") ;
-	printf ("  test FAILED") ;
+        fprintf (stderr, "  test FAILED") ;
+        printf ("  test FAILED") ;
     }
-    if (nan)
+    if (isnan)
     {
-	fprintf (stderr, " *") ;
-	printf (" *") ;
+        fprintf (stderr, " *") ;
+        printf (" *") ;
     }
     fprintf (stderr, "\n") ;
     printf ("\n-----------------------------------------------------------\n") ;
diff --git a/KLU/User/Makefile b/KLU/User/Makefile
index faf6173..987c37f 100644
--- a/KLU/User/Makefile
+++ b/KLU/User/Makefile
@@ -1,16 +1,17 @@
 default: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 all: libklu_cholmod.a
 
-I = -I../../CHOLMOD/Include -I../../UFconfig -I../Include -I../../AMD/Include \
-    -I../../BTF/Include -I../../COLAMD
+I = -I../../CHOLMOD/Include -I../../SuiteSparse_config \
+    -I../Include -I../../AMD/Include \
+    -I../../BTF/Include -I../../COLAMD/Include
 
 libklu_cholmod.a:  library klu_cholmod.c klu_cholmod.h
-	$(CC) $(CFLAGS) $(I) -c klu_cholmod.c
-	$(AR) libklu_cholmod.a klu_cholmod.o
-	$(RANLIB) libklu_cholmod.a
+	$(CC) $(CF) $(I) -c klu_cholmod.c
+	$(ARCHIVE)  libklu_cholmod.a klu_cholmod.o
+	- $(RANLIB) libklu_cholmod.a
 
 distclean: purge
 
@@ -19,8 +20,10 @@ purge: clean
 
 clean:
 	- $(RM) $(CLEAN)
+	- $(RM) -r *.dSYM
 
 library:
 	( cd ../../AMD ; $(MAKE) library )
 	( cd ../../COLAMD ; $(MAKE) library )
 	( cd ../../CHOLMOD/Lib ; $(MAKE) )
+	( cd ../../SuiteSparse_config ; $(MAKE) )
diff --git a/KLU/User/README.txt b/KLU/User/README.txt
index e3249d3..04195b8 100644
--- a/KLU/User/README.txt
+++ b/KLU/User/README.txt
@@ -1,2 +1,4 @@
 This directory contains a sample user-ordering function, klu_cholmod.
 Its use (and the use of CHOLMOD) is optional.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/KLU/User/klu_cholmod.c b/KLU/User/klu_cholmod.c
index 8b16118..c1c1872 100644
--- a/KLU/User/klu_cholmod.c
+++ b/KLU/User/klu_cholmod.c
@@ -6,9 +6,9 @@
  *
  * This routine is an example of a user-provided ordering function for KLU.
  * Its return value is klu_cholmod's estimate of max (nnz(L),nnz(U)):
- *	0 if error,
- *	-1 if OK, but estimate of max (nnz(L),nnz(U)) not computed
- *	> 0 if OK and estimate computed.
+ *      0 if error,
+ *      -1 if OK, but estimate of max (nnz(L),nnz(U)) not computed
+ *      > 0 if OK and estimate computed.
  *
  * This function can be assigned to KLU's Common->user_order function pointer.
  */
@@ -21,13 +21,13 @@
 int klu_cholmod
 (
     /* inputs */
-    int n,		    /* A is n-by-n */
-    int Ap [ ],		    /* column pointers */
-    int Ai [ ],		    /* row indices */
+    int n,                  /* A is n-by-n */
+    int Ap [ ],             /* column pointers */
+    int Ai [ ],             /* row indices */
     /* outputs */
-    int Perm [ ],	    /* fill-reducing permutation */
+    int Perm [ ],           /* fill-reducing permutation */
     /* user-defined */
-    klu_common *Common	    /* user-defined data is in Common->user_data */
+    klu_common *Common      /* user-defined data is in Common->user_data */
 )
 {
     double one [2] = {1,0}, zero [2] = {0,0}, lnz = 0 ;
@@ -39,8 +39,8 @@ int klu_cholmod
 
     if (Ap == NULL || Ai == NULL || Perm == NULL || n < 0)
     {
-	/* invalid inputs */
-	return (0) ;
+        /* invalid inputs */
+        return (0) ;
     }
 
     /* start CHOLMOD */
@@ -48,49 +48,43 @@ int klu_cholmod
     cm.supernodal = CHOLMOD_SIMPLICIAL ;
     cm.print = 0 ;
 
-    /* use KLU memory management routines for CHOLMOD */
-    cm.malloc_memory = Common->malloc_memory ;
-    cm.realloc_memory = Common->realloc_memory ;
-    cm.calloc_memory = Common->calloc_memory ;
-    cm.free_memory = Common->free_memory ;
-
     /* construct a CHOLMOD version of the input matrix A */
     A = &Amatrix ;
-    A->nrow = n ;		    /* A is n-by-n */
+    A->nrow = n ;                   /* A is n-by-n */
     A->ncol = n ;
-    A->nzmax = Ap [n] ;		    /* with nzmax entries */
-    A->packed = TRUE ;		    /* there is no A->nz array */
-    A->stype = 0 ;		    /* A is unsymmetric */
+    A->nzmax = Ap [n] ;             /* with nzmax entries */
+    A->packed = TRUE ;              /* there is no A->nz array */
+    A->stype = 0 ;                  /* A is unsymmetric */
     A->itype = CHOLMOD_INT ;
     A->xtype = CHOLMOD_PATTERN ;
     A->dtype = CHOLMOD_DOUBLE ;
     A->nz = NULL ;
-    A->p = Ap ;			    /* column pointers */
-    A->i = Ai ;			    /* row indices */
-    A->x = NULL ;		    /* no numerical values */
+    A->p = Ap ;                     /* column pointers */
+    A->i = Ai ;                     /* row indices */
+    A->x = NULL ;                   /* no numerical values */
     A->z = NULL ;
-    A->sorted = FALSE ;		    /* columns of A are not sorted */
+    A->sorted = FALSE ;             /* columns of A are not sorted */
 
     /* get the user_data; default is symmetric if user_data is NULL */
     symmetric = (Common->user_data == NULL) ? TRUE :
-	(((int *) (Common->user_data)) [0] != 0) ;
+        (((int *) (Common->user_data)) [0] != 0) ;
 
     /* AT = pattern of A' */
     AT = cholmod_transpose (A, 0, &cm) ;
     if (symmetric)
     {
-	/* S = the symmetric pattern of A+A' */
-	S = cholmod_add (A, AT, one, zero, FALSE, FALSE, &cm) ;
-	cholmod_free_sparse (&AT, &cm) ;
-	if (S != NULL)
-	{
-	    S->stype = 1 ;
-	}
+        /* S = the symmetric pattern of A+A' */
+        S = cholmod_add (A, AT, one, zero, FALSE, FALSE, &cm) ;
+        cholmod_free_sparse (&AT, &cm) ;
+        if (S != NULL)
+        {
+            S->stype = 1 ;
+        }
     }
     else
     {
-	/* S = A'.  CHOLMOD will order S*S', which is A'*A */
-	S = AT ;
+        /* S = A'.  CHOLMOD will order S*S', which is A'*A */
+        S = AT ;
     }
 
     /* order and analyze S or S*S' */
@@ -99,12 +93,12 @@ int klu_cholmod
     /* copy the permutation from L to the output */
     if (L != NULL)
     {
-	P = L->Perm ;
-	for (k = 0 ; k < n ; k++)
-	{
-	    Perm [k] = P [k] ;
-	}
-	lnz = cm.lnz ;
+        P = L->Perm ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Perm [k] = P [k] ;
+        }
+        lnz = cm.lnz ;
     }
 
     cholmod_free_sparse (&S, &cm) ;
diff --git a/KLU/User/klu_cholmod.h b/KLU/User/klu_cholmod.h
index e9c4d27..8f532a2 100644
--- a/KLU/User/klu_cholmod.h
+++ b/KLU/User/klu_cholmod.h
@@ -1,8 +1,7 @@
 #include "klu.h"
-#include "UFconfig.h"
 
 int klu_cholmod (int n, int Ap [ ], int Ai [ ], int Perm [ ], klu_common *) ;
 
-UF_long klu_l_cholmod (UF_long n, UF_long Ap [ ], UF_long Ai [ ],
-    UF_long Perm [ ], klu_l_common *) ;
+SuiteSparse_long klu_l_cholmod (SuiteSparse_long n, SuiteSparse_long Ap [ ],
+    SuiteSparse_long Ai [ ], SuiteSparse_long Perm [ ], klu_l_common *) ;
 
diff --git a/KLU/User/klu_l_cholmod.c b/KLU/User/klu_l_cholmod.c
index c04577b..0307546 100644
--- a/KLU/User/klu_l_cholmod.c
+++ b/KLU/User/klu_l_cholmod.c
@@ -6,9 +6,9 @@
  *
  * This routine is an example of a user-provided ordering function for KLU.
  * Its return value is klu_l_cholmod's estimate of max (nnz(L),nnz(U)):
- *	0 if error,
- *	-1 if OK, but estimate of max (nnz(L),nnz(U)) not computed
- *	> 0 if OK and estimate computed.
+ *      0 if error,
+ *      -1 if OK, but estimate of max (nnz(L),nnz(U)) not computed
+ *      > 0 if OK and estimate computed.
  *
  * This function can be assigned to KLU's Common->user_order function pointer.
  */
@@ -18,14 +18,14 @@
 #define TRUE 1
 #define FALSE 0
 
-UF_long klu_l_cholmod
+SuiteSparse_long klu_l_cholmod
 (
     /* inputs */
-    UF_long n,		    /* A is n-by-n */
-    UF_long Ap [ ],		    /* column pointers */
-    UF_long Ai [ ],		    /* row indices */
+    SuiteSparse_long n,              /* A is n-by-n */
+    SuiteSparse_long Ap [ ],         /* column pointers */
+    SuiteSparse_long Ai [ ],         /* row indices */
     /* outputs */
-    UF_long Perm [ ],	    /* fill-reducing permutation */
+    SuiteSparse_long Perm [ ],       /* fill-reducing permutation */
     /* user-defined */
     klu_l_common *Common    /* user-defined data is in Common->user_data */
 )
@@ -34,13 +34,13 @@ UF_long klu_l_cholmod
     cholmod_sparse Amatrix, *A, *AT, *S ;
     cholmod_factor *L ;
     cholmod_common cm ;
-    UF_long *P ;
-    UF_long k, symmetric ;
+    SuiteSparse_long *P ;
+    SuiteSparse_long k, symmetric ;
 
     if (Ap == NULL || Ai == NULL || Perm == NULL || n < 0)
     {
-	/* invalid inputs */
-	return (0) ;
+        /* invalid inputs */
+        return (0) ;
     }
 
     /* start CHOLMOD */
@@ -48,49 +48,43 @@ UF_long klu_l_cholmod
     cm.supernodal = CHOLMOD_SIMPLICIAL ;
     cm.print = 0 ;
 
-    /* use KLU memory management routines for CHOLMOD */
-    cm.malloc_memory = Common->malloc_memory ;
-    cm.realloc_memory = Common->realloc_memory ;
-    cm.calloc_memory = Common->calloc_memory ;
-    cm.free_memory = Common->free_memory ;
-
     /* construct a CHOLMOD version of the input matrix A */
     A = &Amatrix ;
-    A->nrow = n ;		    /* A is n-by-n */
+    A->nrow = n ;                   /* A is n-by-n */
     A->ncol = n ;
-    A->nzmax = Ap [n] ;		    /* with nzmax entries */
-    A->packed = TRUE ;		    /* there is no A->nz array */
-    A->stype = 0 ;		    /* A is unsymmetric */
+    A->nzmax = Ap [n] ;             /* with nzmax entries */
+    A->packed = TRUE ;              /* there is no A->nz array */
+    A->stype = 0 ;                  /* A is unsymmetric */
     A->itype = CHOLMOD_INT ;
     A->xtype = CHOLMOD_PATTERN ;
     A->dtype = CHOLMOD_DOUBLE ;
     A->nz = NULL ;
-    A->p = Ap ;			    /* column pointers */
-    A->i = Ai ;			    /* row indices */
-    A->x = NULL ;		    /* no numerical values */
+    A->p = Ap ;                     /* column pointers */
+    A->i = Ai ;                     /* row indices */
+    A->x = NULL ;                   /* no numerical values */
     A->z = NULL ;
-    A->sorted = FALSE ;		    /* columns of A are not sorted */
+    A->sorted = FALSE ;             /* columns of A are not sorted */
 
     /* get the user_data; default is symmetric if user_data is NULL */
     symmetric = (Common->user_data == NULL) ? TRUE :
-	(((UF_long *) (Common->user_data)) [0] != 0) ;
+        (((SuiteSparse_long *) (Common->user_data)) [0] != 0) ;
 
     /* AT = pattern of A' */
     AT = cholmod_l_transpose (A, 0, &cm) ;
     if (symmetric)
     {
-	/* S = the symmetric pattern of A+A' */
-	S = cholmod_l_add (A, AT, one, zero, FALSE, FALSE, &cm) ;
-	cholmod_l_free_sparse (&AT, &cm) ;
-	if (S != NULL)
-	{
-	    S->stype = 1 ;
-	}
+        /* S = the symmetric pattern of A+A' */
+        S = cholmod_l_add (A, AT, one, zero, FALSE, FALSE, &cm) ;
+        cholmod_l_free_sparse (&AT, &cm) ;
+        if (S != NULL)
+        {
+            S->stype = 1 ;
+        }
     }
     else
     {
-	/* S = A'.  CHOLMOD will order S*S', which is A'*A */
-	S = AT ;
+        /* S = A'.  CHOLMOD will order S*S', which is A'*A */
+        S = AT ;
     }
 
     /* order and analyze S or S*S' */
@@ -99,12 +93,12 @@ UF_long klu_l_cholmod
     /* copy the permutation from L to the output */
     if (L != NULL)
     {
-	P = L->Perm ;
-	for (k = 0 ; k < n ; k++)
-	{
-	    Perm [k] = P [k] ;
-	}
-	lnz = cm.lnz ;
+        P = L->Perm ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Perm [k] = P [k] ;
+        }
+        lnz = cm.lnz ;
     }
 
     cholmod_l_free_sparse (&S, &cm) ;
diff --git a/LDL/Demo/Makefile b/LDL/Demo/Makefile
index 6cee722..38922fb 100644
--- a/LDL/Demo/Makefile
+++ b/LDL/Demo/Makefile
@@ -4,15 +4,18 @@
 
 default: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-I = -I../../UFconfig -I../Include
+I = -I../../SuiteSparse_config -I../Include
 
-C = $(CC) $(CFLAGS) $(I)
+C = $(CC) $(CF) $(I)
 
 all: ldlsimple ldllsimple ldlmain ldllmain ldlamd ldllamd
 
+LIB2 = ../../SuiteSparse_config/libsuitesparseconfig.a $(LIB)
+
 library:
+	( cd ../../SuiteSparse_config ; $(MAKE) library )
 	( cd ../../AMD ; $(MAKE) library )
 	( cd ../Lib ; $(MAKE) )
 
@@ -21,34 +24,34 @@ library:
 #-------------------------------------------------------------------------------
 
 ldlmain:  ldlmain.c library
-	$(C) ldlmain.c ../Lib/libldl.a -o ldlmain -lm
+	$(C) ldlmain.c ../Lib/libldl.a -o ldlmain $(LIB2)
 	- ./ldlmain > my_ldlmain.out
 	- diff ldlmain.out my_ldlmain.out
 
 ldllmain:  ldlmain.c library
-	$(C) -DLDL_LONG ldlmain.c ../Lib/libldl.a -o ldllmain -lm
+	$(C) -DLDL_LONG ldlmain.c ../Lib/libldl.a -o ldllmain $(LIB2)
 	- ./ldllmain > my_ldllmain.out
 	- diff ldlmain.out my_ldllmain.out
 
 ldlsimple:  ldlsimple.c library
-	$(C) ldlsimple.c ../Lib/libldl.a -o ldlsimple -lm
+	$(C) ldlsimple.c ../Lib/libldl.a -o ldlsimple $(LIB2)
 	- ./ldlsimple > my_ldlsimple.out
 	- diff ldlsimple.out my_ldlsimple.out
 
 ldllsimple:  ldlsimple.c library
-	$(C) $(I) -DLDL_LONG ldlsimple.c ../Lib/libldl.a -o ldllsimple -lm
+	$(C) $(I) -DLDL_LONG ldlsimple.c ../Lib/libldl.a -o ldllsimple $(LIB2)
 	- ./ldllsimple > my_ldllsimple.out
 	- diff ldlsimple.out my_ldllsimple.out
 
 ldlamd:  ldlmain.c library
 	- $(C) -I../../AMD/Include -DUSE_AMD \
-		ldlmain.c ../../AMD/Lib/libamd.a ../Lib/libldl.a -o ldlamd -lm
+		ldlmain.c ../../AMD/Lib/libamd.a ../Lib/libldl.a -o ldlamd $(LIB2)
 	- ./ldlamd > my_ldlamd.out
 	- diff ldlamd.out my_ldlamd.out
 
 ldllamd:  ldlmain.c library
 	- $(C) -DLDL_LONG $(I) -I../../AMD/Include -DUSE_AMD \
-		ldlmain.c ../../AMD/Lib/libamd.a ../Lib/libldl.a -o ldllamd -lm
+		ldlmain.c ../../AMD/Lib/libamd.a ../Lib/libldl.a -o ldllamd $(LIB2)
 	- ./ldllamd > my_ldllamd.out
 	- diff ldllamd.out my_ldllamd.out
 
@@ -77,6 +80,7 @@ purge: clean
 	- $(RM) ldlmain ldllmain ldlsimple ldllsimple ldlamd ldllamd
 	- $(RM) my_ldlmain.out my_ldlamd.out my_ldlsimple.out my_ldllamd.out
 	- $(RM) my_ldllsimple.out my_ldllmain.out
+	- $(RM) -r *.dSYM
 
 clean:
 	- $(RM) $(CLEAN)
diff --git a/LDL/Demo/ldlamd.out b/LDL/Demo/ldlamd.out
index 005fbbb..c9130ab 100644
--- a/LDL/Demo/ldlamd.out
+++ b/LDL/Demo/ldlamd.out
@@ -1,11 +1,12 @@
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0
+Input file: ../Matrix/A01
+name: Dense/0  n: 0 entries: 0
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -13,7 +14,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  0
 
@@ -31,11 +32,12 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0  (jumbled version)
+Input file: ../Matrix/A02
+name: Dense/0  n: 0 entries: 0  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -43,7 +45,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  0
 
@@ -61,11 +63,12 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/1  n: 1 entries: 1
+Input file: ../Matrix/A03
+name: Dense/1  n: 1 entries: 1
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -73,7 +76,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  1
     nz, number of nonzeros in A:                        1
@@ -111,11 +114,12 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/1  n: 1 entries: 2  (jumbled version)
+Input file: ../Matrix/A04
+name: Dense/1  n: 1 entries: 2  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -123,7 +127,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  1
     nz, number of nonzeros in A:                        1
@@ -161,11 +165,12 @@ relative maxnorm of residual: 8.32667e-17
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 4
+Input file: ../Matrix/A05
+name: Dense/2  n: 2 entries: 4
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -173,7 +178,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  2
     nz, number of nonzeros in A:                        4
@@ -211,11 +216,12 @@ relative maxnorm of residual: 5.55112e-17
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 5  (jumbled version)
+Input file: ../Matrix/A06
+name: Dense/2  n: 2 entries: 5  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -223,7 +229,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  2
     nz, number of nonzeros in A:                        4
@@ -261,11 +267,12 @@ relative maxnorm of residual: 1.11022e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9
+Input file: ../Matrix/A07
+name: Dense/3  n: 3 entries: 9
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -273,7 +280,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  3
     nz, number of nonzeros in A:                        9
@@ -311,11 +318,12 @@ relative maxnorm of residual: 1.11022e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 11  (jumbled version)
+Input file: ../Matrix/A08
+name: Dense/3  n: 3 entries: 11  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -323,7 +331,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  3
     nz, number of nonzeros in A:                        9
@@ -361,11 +369,12 @@ relative maxnorm of residual: 1.38778e-16
 
 
 --------------------------------------------------------
-Input matrix: name: HB/can_24  n: 24 entries: 160
+Input file: ../Matrix/A09
+name: HB/can_24  n: 24 entries: 160
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -373,7 +382,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
@@ -411,11 +420,12 @@ Ax=b not solved since D(5,5) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: HB/can_24  n: 24 entries: 188  (jumbled version)
+Input file: ../Matrix/A10
+name: HB/can_24  n: 24 entries: 188  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -423,7 +433,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
@@ -461,11 +471,12 @@ Ax=b not solved since D(5,5) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: FIDAP/ex5  n: 27 entries: 279
+Input file: ../Matrix/A11
+name: FIDAP/ex5  n: 27 entries: 279
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -473,7 +484,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  27
     nz, number of nonzeros in A:                        279
@@ -511,11 +522,12 @@ relative maxnorm of residual: 2.72848e-10
 
 
 --------------------------------------------------------
-Input matrix: name: FIDAP/ex5  n: 27 entries: 325  (jumbled version)
+Input file: ../Matrix/A12
+name: FIDAP/ex5  n: 27 entries: 325  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -523,7 +535,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  27
     nz, number of nonzeros in A:                        279
@@ -561,11 +573,12 @@ relative maxnorm of residual: 2.32376e-10
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk01  n: 48 entries: 400
+Input file: ../Matrix/A13
+name: HB/bcsstk01  n: 48 entries: 400
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -573,7 +586,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        400
@@ -611,11 +624,12 @@ relative maxnorm of residual: 2.27374e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk01  n: 48 entries: 472  (jumbled version)
+Input file: ../Matrix/A14
+name: HB/bcsstk01  n: 48 entries: 472  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -623,7 +637,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        400
@@ -661,11 +675,12 @@ relative maxnorm of residual: 3.83693e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm01  n: 48 entries: 24
+Input file: ../Matrix/A15
+name: HB/bcsstm01  n: 48 entries: 24
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -673,7 +688,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        24
@@ -711,11 +726,12 @@ Ax=b not solved since D(3,3) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm01  n: 48 entries: 26  (jumbled version)
+Input file: ../Matrix/A16
+name: HB/bcsstm01  n: 48 entries: 26  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -723,7 +739,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        24
@@ -761,11 +777,12 @@ Ax=b not solved since D(3,3) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: Pothen/mesh1e1  n: 48 entries: 306
+Input file: ../Matrix/A17
+name: Pothen/mesh1e1  n: 48 entries: 306
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -773,7 +790,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        306
@@ -811,11 +828,12 @@ relative maxnorm of residual: 6.93889e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Pothen/mesh1e1  n: 48 entries: 359  (jumbled version)
+Input file: ../Matrix/A18
+name: Pothen/mesh1e1  n: 48 entries: 359  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -823,7 +841,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        306
@@ -861,11 +879,12 @@ relative maxnorm of residual: 5.55112e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Bai/bfwb62  n: 62 entries: 342
+Input file: ../Matrix/A19
+name: Bai/bfwb62  n: 62 entries: 342
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -873,7 +892,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  62
     nz, number of nonzeros in A:                        342
@@ -911,11 +930,12 @@ relative maxnorm of residual: 1.11022e-15
 
 
 --------------------------------------------------------
-Input matrix: name: Bai/bfwb62  n: 62 entries: 407  (jumbled version)
+Input file: ../Matrix/A20
+name: Bai/bfwb62  n: 62 entries: 407  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -923,7 +943,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  62
     nz, number of nonzeros in A:                        342
@@ -961,11 +981,12 @@ relative maxnorm of residual: 2.15827e-12
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk02  n: 66 entries: 4356
+Input file: ../Matrix/A21
+name: HB/bcsstk02  n: 66 entries: 4356
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -973,7 +994,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        4356
@@ -1011,11 +1032,12 @@ relative maxnorm of residual: 7.50219e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk02  n: 66 entries: 5175  (jumbled version)
+Input file: ../Matrix/A22
+name: HB/bcsstk02  n: 66 entries: 5175  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1023,7 +1045,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        4356
@@ -1061,11 +1083,12 @@ relative maxnorm of residual: 8.59759e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm02  n: 66 entries: 66
+Input file: ../Matrix/A23
+name: HB/bcsstm02  n: 66 entries: 66
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1073,7 +1096,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        66
@@ -1111,11 +1134,12 @@ relative maxnorm of residual: 2.22045e-16
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm02  n: 66 entries: 72  (jumbled version)
+Input file: ../Matrix/A24
+name: HB/bcsstm02  n: 66 entries: 72  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1123,7 +1147,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 4
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        66
@@ -1161,42 +1185,48 @@ relative maxnorm of residual: 2.22045e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 99)
+Input file: ../Matrix/A25
+name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 1)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 4 (invalid perm, P[1]=99)
+Input file: ../Matrix/A26
+name: Dense/2  n: 2 entries: 4 (invalid perm, P[1]=99)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid perm)
+Input file: ../Matrix/A27
+name: Dense/3  n: 3 entries: 9 (invalid perm)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ap)
+Input file: ../Matrix/A28
+name: Dense/3  n: 3 entries: 9 (invalid Ap)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ai)
+Input file: ../Matrix/A29
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ai)
+Input file: ../Matrix/A30
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
diff --git a/LDL/Demo/ldllamd.out b/LDL/Demo/ldllamd.out
index 689e42d..7dc808d 100644
--- a/LDL/Demo/ldllamd.out
+++ b/LDL/Demo/ldllamd.out
@@ -1,11 +1,12 @@
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0
+Input file: ../Matrix/A01
+name: Dense/0  n: 0 entries: 0
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -13,7 +14,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  0
 
@@ -31,11 +32,12 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0  (jumbled version)
+Input file: ../Matrix/A02
+name: Dense/0  n: 0 entries: 0  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -43,7 +45,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  0
 
@@ -61,11 +63,12 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/1  n: 1 entries: 1
+Input file: ../Matrix/A03
+name: Dense/1  n: 1 entries: 1
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -73,7 +76,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  1
     nz, number of nonzeros in A:                        1
@@ -111,11 +114,12 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/1  n: 1 entries: 2  (jumbled version)
+Input file: ../Matrix/A04
+name: Dense/1  n: 1 entries: 2  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -123,7 +127,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  1
     nz, number of nonzeros in A:                        1
@@ -161,11 +165,12 @@ relative maxnorm of residual: 8.32667e-17
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 4
+Input file: ../Matrix/A05
+name: Dense/2  n: 2 entries: 4
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -173,7 +178,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  2
     nz, number of nonzeros in A:                        4
@@ -211,11 +216,12 @@ relative maxnorm of residual: 5.55112e-17
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 5  (jumbled version)
+Input file: ../Matrix/A06
+name: Dense/2  n: 2 entries: 5  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -223,7 +229,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  2
     nz, number of nonzeros in A:                        4
@@ -261,11 +267,12 @@ relative maxnorm of residual: 1.11022e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9
+Input file: ../Matrix/A07
+name: Dense/3  n: 3 entries: 9
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -273,7 +280,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  3
     nz, number of nonzeros in A:                        9
@@ -311,11 +318,12 @@ relative maxnorm of residual: 1.11022e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 11  (jumbled version)
+Input file: ../Matrix/A08
+name: Dense/3  n: 3 entries: 11  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -323,7 +331,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  3
     nz, number of nonzeros in A:                        9
@@ -361,11 +369,12 @@ relative maxnorm of residual: 1.38778e-16
 
 
 --------------------------------------------------------
-Input matrix: name: HB/can_24  n: 24 entries: 160
+Input file: ../Matrix/A09
+name: HB/can_24  n: 24 entries: 160
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -373,7 +382,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
@@ -411,11 +420,12 @@ Ax=b not solved since D(5,5) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: HB/can_24  n: 24 entries: 188  (jumbled version)
+Input file: ../Matrix/A10
+name: HB/can_24  n: 24 entries: 188  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -423,7 +433,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
@@ -461,11 +471,12 @@ Ax=b not solved since D(5,5) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: FIDAP/ex5  n: 27 entries: 279
+Input file: ../Matrix/A11
+name: FIDAP/ex5  n: 27 entries: 279
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -473,7 +484,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  27
     nz, number of nonzeros in A:                        279
@@ -511,11 +522,12 @@ relative maxnorm of residual: 2.72848e-10
 
 
 --------------------------------------------------------
-Input matrix: name: FIDAP/ex5  n: 27 entries: 325  (jumbled version)
+Input file: ../Matrix/A12
+name: FIDAP/ex5  n: 27 entries: 325  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -523,7 +535,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  27
     nz, number of nonzeros in A:                        279
@@ -561,11 +573,12 @@ relative maxnorm of residual: 2.32376e-10
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk01  n: 48 entries: 400
+Input file: ../Matrix/A13
+name: HB/bcsstk01  n: 48 entries: 400
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -573,7 +586,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        400
@@ -611,11 +624,12 @@ relative maxnorm of residual: 2.27374e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk01  n: 48 entries: 472  (jumbled version)
+Input file: ../Matrix/A14
+name: HB/bcsstk01  n: 48 entries: 472  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -623,7 +637,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        400
@@ -661,11 +675,12 @@ relative maxnorm of residual: 3.83693e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm01  n: 48 entries: 24
+Input file: ../Matrix/A15
+name: HB/bcsstm01  n: 48 entries: 24
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -673,7 +688,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        24
@@ -711,11 +726,12 @@ Ax=b not solved since D(3,3) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm01  n: 48 entries: 26  (jumbled version)
+Input file: ../Matrix/A16
+name: HB/bcsstm01  n: 48 entries: 26  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -723,7 +739,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        24
@@ -761,11 +777,12 @@ Ax=b not solved since D(3,3) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: Pothen/mesh1e1  n: 48 entries: 306
+Input file: ../Matrix/A17
+name: Pothen/mesh1e1  n: 48 entries: 306
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -773,7 +790,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        306
@@ -811,11 +828,12 @@ relative maxnorm of residual: 6.93889e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Pothen/mesh1e1  n: 48 entries: 359  (jumbled version)
+Input file: ../Matrix/A18
+name: Pothen/mesh1e1  n: 48 entries: 359  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -823,7 +841,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  48
     nz, number of nonzeros in A:                        306
@@ -861,11 +879,12 @@ relative maxnorm of residual: 5.55112e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Bai/bfwb62  n: 62 entries: 342
+Input file: ../Matrix/A19
+name: Bai/bfwb62  n: 62 entries: 342
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -873,7 +892,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  62
     nz, number of nonzeros in A:                        342
@@ -911,11 +930,12 @@ relative maxnorm of residual: 1.11022e-15
 
 
 --------------------------------------------------------
-Input matrix: name: Bai/bfwb62  n: 62 entries: 407  (jumbled version)
+Input file: ../Matrix/A20
+name: Bai/bfwb62  n: 62 entries: 407  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -923,7 +943,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  62
     nz, number of nonzeros in A:                        342
@@ -961,11 +981,12 @@ relative maxnorm of residual: 2.15827e-12
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk02  n: 66 entries: 4356
+Input file: ../Matrix/A21
+name: HB/bcsstk02  n: 66 entries: 4356
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -973,7 +994,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        4356
@@ -1011,11 +1032,12 @@ relative maxnorm of residual: 7.50219e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk02  n: 66 entries: 5175  (jumbled version)
+Input file: ../Matrix/A22
+name: HB/bcsstk02  n: 66 entries: 5175  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1023,7 +1045,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        4356
@@ -1061,11 +1083,12 @@ relative maxnorm of residual: 8.59759e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm02  n: 66 entries: 66
+Input file: ../Matrix/A23
+name: HB/bcsstm02  n: 66 entries: 66
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1073,7 +1096,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        66
@@ -1111,11 +1134,12 @@ relative maxnorm of residual: 2.22045e-16
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm02  n: 66 entries: 72  (jumbled version)
+Input file: ../Matrix/A24
+name: HB/bcsstm02  n: 66 entries: 72  (jumbled version)
 --------------------------------------------------------
 
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.4.1, Oct 10, 2014: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1123,7 +1147,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
     size of AMD integer: 8
 
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.4.1, Oct 10, 2014, results:
     status: OK, but jumbled
     n, dimension of A:                                  66
     nz, number of nonzeros in A:                        66
@@ -1161,42 +1185,48 @@ relative maxnorm of residual: 2.22045e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 99)
+Input file: ../Matrix/A25
+name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 1)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 4 (invalid perm, P[1]=99)
+Input file: ../Matrix/A26
+name: Dense/2  n: 2 entries: 4 (invalid perm, P[1]=99)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid perm)
+Input file: ../Matrix/A27
+name: Dense/3  n: 3 entries: 9 (invalid perm)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ap)
+Input file: ../Matrix/A28
+name: Dense/3  n: 3 entries: 9 (invalid Ap)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ai)
+Input file: ../Matrix/A29
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ai)
+Input file: ../Matrix/A30
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
 --------------------------------------------------------
 
 ldlamd: invalid matrix and/or permutation
diff --git a/LDL/Demo/ldllmain.out b/LDL/Demo/ldllmain.out
new file mode 100644
index 0000000..5fa864e
--- /dev/null
+++ b/LDL/Demo/ldllmain.out
@@ -0,0 +1,364 @@
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A01
+name: Dense/0  n: 0 entries: 0
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 0
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 0
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A02
+name: Dense/0  n: 0 entries: 0  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 0
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 0
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A03
+name: Dense/1  n: 1 entries: 1
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 0
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 0
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A04
+name: Dense/1  n: 1 entries: 2  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 8.32667e-17
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 8.32667e-17
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A05
+name: Dense/2  n: 2 entries: 4
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 1  Flop count: 3
+relative maxnorm of residual: 5.55112e-17
+Factorize A=LDL' and solve Ax=b
+Nz in L: 1  Flop count: 3
+relative maxnorm of residual: 5.55112e-17
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A06
+name: Dense/2  n: 2 entries: 5  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 1  Flop count: 3
+relative maxnorm of residual: 1.11022e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 1  Flop count: 3
+relative maxnorm of residual: 1.11022e-16
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A07
+name: Dense/3  n: 3 entries: 9
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 3  Flop count: 11
+relative maxnorm of residual: 1.11022e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 3  Flop count: 11
+relative maxnorm of residual: 1.11022e-16
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A08
+name: Dense/3  n: 3 entries: 11  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 3  Flop count: 11
+relative maxnorm of residual: 1.38778e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 3  Flop count: 11
+relative maxnorm of residual: 1.38778e-16
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A09
+name: HB/can_24  n: 24 entries: 160
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 96  Flop count: 632
+Ax=b not solved since D(1,1) is zero.
+Factorize A=LDL' and solve Ax=b
+Nz in L: 146  Flop count: 1360
+Ax=b not solved since D(5,5) is zero.
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A10
+name: HB/can_24  n: 24 entries: 188  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 96  Flop count: 632
+Ax=b not solved since D(1,1) is zero.
+Factorize A=LDL' and solve Ax=b
+Nz in L: 146  Flop count: 1360
+Ax=b not solved since D(5,5) is zero.
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A11
+name: FIDAP/ex5  n: 27 entries: 279
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 126  Flop count: 954
+relative maxnorm of residual: 2.59625e-10
+Factorize A=LDL' and solve Ax=b
+Nz in L: 276  Flop count: 4206
+relative maxnorm of residual: 2.72848e-10
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A12
+name: FIDAP/ex5  n: 27 entries: 325  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 126  Flop count: 954
+relative maxnorm of residual: 3.27418e-10
+Factorize A=LDL' and solve Ax=b
+Nz in L: 276  Flop count: 4206
+relative maxnorm of residual: 2.32376e-10
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A13
+name: HB/bcsstk01  n: 48 entries: 400
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 441  Flop count: 5961
+relative maxnorm of residual: 2.38712e-13
+Factorize A=LDL' and solve Ax=b
+Nz in L: 829  Flop count: 20103
+relative maxnorm of residual: 2.27374e-13
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A14
+name: HB/bcsstk01  n: 48 entries: 472  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 441  Flop count: 5961
+relative maxnorm of residual: 2.27374e-13
+Factorize A=LDL' and solve Ax=b
+Nz in L: 829  Flop count: 20103
+relative maxnorm of residual: 3.83693e-13
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A15
+name: HB/bcsstm01  n: 48 entries: 24
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+Ax=b not solved since D(3,3) is zero.
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+Ax=b not solved since D(3,3) is zero.
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A16
+name: HB/bcsstm01  n: 48 entries: 26  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+Ax=b not solved since D(3,3) is zero.
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+Ax=b not solved since D(3,3) is zero.
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A17
+name: Pothen/mesh1e1  n: 48 entries: 306
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 288  Flop count: 2630
+relative maxnorm of residual: 5.96745e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 511  Flop count: 7383
+relative maxnorm of residual: 6.93889e-16
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A18
+name: Pothen/mesh1e1  n: 48 entries: 359  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 288  Flop count: 2630
+relative maxnorm of residual: 5.55112e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 511  Flop count: 7383
+relative maxnorm of residual: 5.55112e-16
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A19
+name: Bai/bfwb62  n: 62 entries: 342
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 226  Flop count: 1472
+relative maxnorm of residual: 5.55112e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 662  Flop count: 11350
+relative maxnorm of residual: 1.11022e-15
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A20
+name: Bai/bfwb62  n: 62 entries: 407  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 226  Flop count: 1472
+relative maxnorm of residual: 5.68434e-14
+Factorize A=LDL' and solve Ax=b
+Nz in L: 662  Flop count: 11350
+relative maxnorm of residual: 2.15827e-12
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A21
+name: HB/bcsstk02  n: 66 entries: 4356
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 2145  Flop count: 97955
+relative maxnorm of residual: 7.50219e-13
+Factorize A=LDL' and solve Ax=b
+Nz in L: 2145  Flop count: 97955
+relative maxnorm of residual: 7.50219e-13
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A22
+name: HB/bcsstk02  n: 66 entries: 5175  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 2145  Flop count: 97955
+relative maxnorm of residual: 8.59759e-13
+Factorize A=LDL' and solve Ax=b
+Nz in L: 2145  Flop count: 97955
+relative maxnorm of residual: 8.59759e-13
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A23
+name: HB/bcsstm02  n: 66 entries: 66
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 2.22045e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 2.22045e-16
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A24
+name: HB/bcsstm02  n: 66 entries: 72  (jumbled version)
+--------------------------------------------------------
+
+Factorize PAP'=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 2.22045e-16
+Factorize A=LDL' and solve Ax=b
+Nz in L: 0  Flop count: 0
+relative maxnorm of residual: 2.22045e-16
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A25
+name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 1)
+--------------------------------------------------------
+
+ldlmain: invalid matrix and/or permutation
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A26
+name: Dense/2  n: 2 entries: 4 (invalid perm, P[1]=99)
+--------------------------------------------------------
+
+ldlmain: invalid matrix and/or permutation
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A27
+name: Dense/3  n: 3 entries: 9 (invalid perm)
+--------------------------------------------------------
+
+ldlmain: invalid matrix and/or permutation
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A28
+name: Dense/3  n: 3 entries: 9 (invalid Ap)
+--------------------------------------------------------
+
+ldlmain: invalid matrix and/or permutation
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A29
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
+--------------------------------------------------------
+
+ldlmain: invalid matrix and/or permutation
+
+
+--------------------------------------------------------
+Input file: ../Matrix/A30
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
+--------------------------------------------------------
+
+ldlmain: invalid matrix and/or permutation
+
+Largest residual during all tests: 3.27418e-10
+
+ldlmain: all tests passed
diff --git a/LDL/Demo/ldllsimple.c b/LDL/Demo/ldllsimple.c
index 74ee915..11925f7 100644
--- a/LDL/Demo/ldllsimple.c
+++ b/LDL/Demo/ldllsimple.c
@@ -26,8 +26,8 @@
  * ldl_symbolic has analyzed the matrix.  The size of Li and Lx must be greater
  * than or equal to lnz = Lp [N], which is 13 for this matrix L.
  *
- * LDL Version 1.3, Copyright (c) 2006 by Timothy A Davis,
- * University of Florida.  All Rights Reserved.  See README for the License.
+ * Copyright (c) 2006 by Timothy A Davis, http://www.suitesparse.com.
+ * All Rights Reserved.  See README for the License.
  */
 
 #ifndef LDL_LONG
@@ -39,17 +39,18 @@
 #define N 10	/* A is 10-by-10 */
 #define ANZ 19	/* # of nonzeros on diagonal and upper triangular part of A */
 #define LNZ 13	/* # of nonzeros below the diagonal of L */
+#define Long SuiteSparse_long
 
 int main (void)
 {
     /* only the upper triangular part of A is required */
-    UF_long Ap[N+1] = {0, 1, 2, 3, 4,   6, 7,   9,   11,      15,     ANZ},
+    Long Ap[N+1] = {0, 1, 2, 3, 4,   6, 7,   9,   11,      15,     ANZ},
            Ai [ANZ] = {0, 1, 2, 3, 1,4, 5, 4,6, 4,7, 0,4,7,8, 1,4,6,9 } ;
     double Ax [ANZ] = {1.7, 1., 1.5, 1.1, .02,2.6, 1.2, .16,1.3, .09,1.6,
 		     .13,.52,.11,1.4, .01,.53,.56,3.1},
            b [N] = {.287, .22, .45, .44, 2.486, .72, 1.55, 1.424, 1.621, 3.759};
     double Lx [LNZ], D [N], Y [N] ;
-    UF_long Li [LNZ], Lp [N+1], Parent [N], Lnz [N], Flag [N], Pattern [N], d, i ;
+    Long Li [LNZ], Lp [N+1], Parent [N], Lnz [N], Flag [N], Pattern [N], d, i ;
 
     /* factorize A into LDL' (P and Pinv not used) */
     ldl_l_symbolic (N, Ap, Ai, Lp, Parent, Lnz, Flag, NULL, NULL) ;
diff --git a/LDL/Demo/ldllsimple.out b/LDL/Demo/ldllsimple.out
new file mode 100644
index 0000000..acb48b5
--- /dev/null
+++ b/LDL/Demo/ldllsimple.out
@@ -0,0 +1,11 @@
+Nonzeros in L, excluding diagonal: 13
+x [0] = 0.1
+x [1] = 0.2
+x [2] = 0.3
+x [3] = 0.4
+x [4] = 0.5
+x [5] = 0.6
+x [6] = 0.7
+x [7] = 0.8
+x [8] = 0.9
+x [9] = 1
diff --git a/LDL/Demo/ldlmain.c b/LDL/Demo/ldlmain.c
index 715d7c3..7277516 100644
--- a/LDL/Demo/ldlmain.c
+++ b/LDL/Demo/ldlmain.c
@@ -33,8 +33,8 @@
  * "mex ldlmain.c ldl.c".  You can then run the program in MATLAB, with the
  * command "ldlmain".
  *
- * LDL Copyright (c) by Timothy A Davis,
- * University of Florida.  All Rights Reserved.  See README for the License.
+ * Copyright (c) 2006 by Timothy A Davis, http://www.suitesparse.com.
+ * All Rights Reserved.  See README for the License.
  */
 
 #ifdef MATLAB_MEX_FILE
@@ -71,7 +71,7 @@
 /* -------------------------------------------------------------------------- */
 
 #define ALLOC_MEMORY(p,type,size) \
-p = (type *) malloc ((((size) <= 0) ? 1 : (size)) * sizeof (type)) ; \
+p = (type *) calloc ((((size) <= 0) ? 1 : (size)) , sizeof (type)) ; \
 if (p == (type *) NULL) \
 { \
     printf (PROGRAM ": out of memory\n") ; \
@@ -116,9 +116,9 @@ int main (void)
     double r, rnorm, flops, maxrnorm = 0. ;
     double *Ax, *Lx, *B, *D, *X, *Y ;
     LDL_int matrix, *Ai, *Ap, *Li, *Lp, *P, *Pinv, *Perm, *PermInv, n, i, j, p,
-	nz, *Flag, *Pattern, *Lnz, *Parent, trial, lnz, d, jumbled ;
+	nz, *Flag, *Pattern, *Lnz, *Parent, trial, lnz, d, jumbled, ok ;
     FILE *f ;
-    char s [LEN] ;
+    char s [LEN], filename [LEN] ;
 
     /* ---------------------------------------------------------------------- */
     /* check the error-checking routines with null matrices */
@@ -146,40 +146,55 @@ int main (void)
 	/* read in the matrix and the permutation */
 	/* ------------------------------------------------------------------ */
 
-	sprintf (s, "../Matrix/A%02d", (int) matrix) ;
-	if ((f = fopen (s, "r")) == (FILE *) NULL)
+	sprintf (filename, "../Matrix/A%02d", (int) matrix) ;
+	if ((f = fopen (filename, "r")) == (FILE *) NULL)
 	{
-	    printf (PROGRAM ": could not open file: %s\n", s) ;
+	    printf (PROGRAM ": could not open file: %s\n", filename) ;
 	    EXIT_ERROR ;
 	}
-	fgets (s, LEN, f) ;
-	printf ("\n\n--------------------------------------------------------");
-	printf ("\nInput matrix: %s", s) ;
-	printf ("--------------------------------------------------------\n\n");
-	fscanf (f, LDL_ID " " LDL_ID, &n, &jumbled) ;
-	n = (n < 0) ? (0) : (n) ;
-	ALLOC_MEMORY (P, LDL_int, n) ;
-	ALLOC_MEMORY (Ap, LDL_int, n+1) ;
-	for (j = 0 ; j <= n ; j++)
+        printf ("\n\n--------------------------------------------------------");
+        printf ("\nInput file: %s\n", filename) ;
+        s [0] = 0 ;
+        ok = (fgets (s, LEN, f) != NULL) ;
+        printf ("%s", s) ;
+        printf ("--------------------------------------------------------\n\n");
+        n = 0 ;
+        if (ok)
+        {
+            ok = ok && (fscanf (f, LDL_ID " " LDL_ID, &n, &jumbled) == 2) ;
+            n = (n < 0) ? (0) : (n) ;
+            ALLOC_MEMORY (P, LDL_int, n) ;
+            ALLOC_MEMORY (Ap, LDL_int, n+1) ;
+        }
+	for (j = 0 ; ok && j <= n ; j++)
 	{
-	    fscanf (f, LDL_ID, &Ap [j]) ;
+	    ok = ok && (fscanf (f, LDL_ID, &Ap [j]) == 1) ;
 	}
-	nz = Ap [n] ;
-	ALLOC_MEMORY (Ai, LDL_int, nz) ;
-	ALLOC_MEMORY (Ax, double, nz) ;
-	for (p = 0 ; p < nz ; p++)
+        nz = 0 ;
+        if (ok)
+        {
+            nz = Ap [n] ;
+            ALLOC_MEMORY (Ai, LDL_int, nz) ;
+            ALLOC_MEMORY (Ax, double, nz) ;
+        }
+	for (p = 0 ; ok && p < nz ; p++)
 	{
-	    fscanf (f, LDL_ID , &Ai [p]) ;
+	    ok = ok && (fscanf (f, LDL_ID , &Ai [p]) == 1) ;
 	}
-	for (p = 0 ; p < nz ; p++)
+	for (p = 0 ; ok && p < nz ; p++)
 	{
-	    fscanf (f, "%lg", &Ax [p]) ;
+	    ok = ok && (fscanf (f, "%lg", &Ax [p]) == 1) ;
 	}
-	for (j = 0 ; j < n  ; j++)
+	for (j = 0 ; ok && j < n  ; j++)
 	{
-	    fscanf (f, LDL_ID , &P  [j]) ;
+	    ok = ok && (fscanf (f, LDL_ID , &P  [j]) == 1) ;
 	}
 	fclose (f) ;
+	if (!ok)
+        {
+	    printf (PROGRAM ": error reading file: %s\n", filename) ;
+	    EXIT_ERROR ;
+        }
 
 	/* ------------------------------------------------------------------ */
 	/* check the matrix A and the permutation P */
diff --git a/LDL/Demo/ldlmain.out b/LDL/Demo/ldlmain.out
index f4f8474..5fa864e 100644
--- a/LDL/Demo/ldlmain.out
+++ b/LDL/Demo/ldlmain.out
@@ -1,7 +1,8 @@
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0
+Input file: ../Matrix/A01
+name: Dense/0  n: 0 entries: 0
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -13,7 +14,8 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0  (jumbled version)
+Input file: ../Matrix/A02
+name: Dense/0  n: 0 entries: 0  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -25,7 +27,8 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/1  n: 1 entries: 1
+Input file: ../Matrix/A03
+name: Dense/1  n: 1 entries: 1
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -37,7 +40,8 @@ relative maxnorm of residual: 0
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/1  n: 1 entries: 2  (jumbled version)
+Input file: ../Matrix/A04
+name: Dense/1  n: 1 entries: 2  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -49,7 +53,8 @@ relative maxnorm of residual: 8.32667e-17
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 4
+Input file: ../Matrix/A05
+name: Dense/2  n: 2 entries: 4
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -61,7 +66,8 @@ relative maxnorm of residual: 5.55112e-17
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 5  (jumbled version)
+Input file: ../Matrix/A06
+name: Dense/2  n: 2 entries: 5  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -73,7 +79,8 @@ relative maxnorm of residual: 1.11022e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9
+Input file: ../Matrix/A07
+name: Dense/3  n: 3 entries: 9
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -85,7 +92,8 @@ relative maxnorm of residual: 1.11022e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 11  (jumbled version)
+Input file: ../Matrix/A08
+name: Dense/3  n: 3 entries: 11  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -97,7 +105,8 @@ relative maxnorm of residual: 1.38778e-16
 
 
 --------------------------------------------------------
-Input matrix: name: HB/can_24  n: 24 entries: 160
+Input file: ../Matrix/A09
+name: HB/can_24  n: 24 entries: 160
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -109,7 +118,8 @@ Ax=b not solved since D(5,5) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: HB/can_24  n: 24 entries: 188  (jumbled version)
+Input file: ../Matrix/A10
+name: HB/can_24  n: 24 entries: 188  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -121,7 +131,8 @@ Ax=b not solved since D(5,5) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: FIDAP/ex5  n: 27 entries: 279
+Input file: ../Matrix/A11
+name: FIDAP/ex5  n: 27 entries: 279
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -133,7 +144,8 @@ relative maxnorm of residual: 2.72848e-10
 
 
 --------------------------------------------------------
-Input matrix: name: FIDAP/ex5  n: 27 entries: 325  (jumbled version)
+Input file: ../Matrix/A12
+name: FIDAP/ex5  n: 27 entries: 325  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -145,7 +157,8 @@ relative maxnorm of residual: 2.32376e-10
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk01  n: 48 entries: 400
+Input file: ../Matrix/A13
+name: HB/bcsstk01  n: 48 entries: 400
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -157,7 +170,8 @@ relative maxnorm of residual: 2.27374e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk01  n: 48 entries: 472  (jumbled version)
+Input file: ../Matrix/A14
+name: HB/bcsstk01  n: 48 entries: 472  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -169,7 +183,8 @@ relative maxnorm of residual: 3.83693e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm01  n: 48 entries: 24
+Input file: ../Matrix/A15
+name: HB/bcsstm01  n: 48 entries: 24
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -181,7 +196,8 @@ Ax=b not solved since D(3,3) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm01  n: 48 entries: 26  (jumbled version)
+Input file: ../Matrix/A16
+name: HB/bcsstm01  n: 48 entries: 26  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -193,7 +209,8 @@ Ax=b not solved since D(3,3) is zero.
 
 
 --------------------------------------------------------
-Input matrix: name: Pothen/mesh1e1  n: 48 entries: 306
+Input file: ../Matrix/A17
+name: Pothen/mesh1e1  n: 48 entries: 306
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -205,7 +222,8 @@ relative maxnorm of residual: 6.93889e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Pothen/mesh1e1  n: 48 entries: 359  (jumbled version)
+Input file: ../Matrix/A18
+name: Pothen/mesh1e1  n: 48 entries: 359  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -217,7 +235,8 @@ relative maxnorm of residual: 5.55112e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Bai/bfwb62  n: 62 entries: 342
+Input file: ../Matrix/A19
+name: Bai/bfwb62  n: 62 entries: 342
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -229,7 +248,8 @@ relative maxnorm of residual: 1.11022e-15
 
 
 --------------------------------------------------------
-Input matrix: name: Bai/bfwb62  n: 62 entries: 407  (jumbled version)
+Input file: ../Matrix/A20
+name: Bai/bfwb62  n: 62 entries: 407  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -241,7 +261,8 @@ relative maxnorm of residual: 2.15827e-12
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk02  n: 66 entries: 4356
+Input file: ../Matrix/A21
+name: HB/bcsstk02  n: 66 entries: 4356
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -253,7 +274,8 @@ relative maxnorm of residual: 7.50219e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstk02  n: 66 entries: 5175  (jumbled version)
+Input file: ../Matrix/A22
+name: HB/bcsstk02  n: 66 entries: 5175  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -265,7 +287,8 @@ relative maxnorm of residual: 8.59759e-13
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm02  n: 66 entries: 66
+Input file: ../Matrix/A23
+name: HB/bcsstm02  n: 66 entries: 66
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -277,7 +300,8 @@ relative maxnorm of residual: 2.22045e-16
 
 
 --------------------------------------------------------
-Input matrix: name: HB/bcsstm02  n: 66 entries: 72  (jumbled version)
+Input file: ../Matrix/A24
+name: HB/bcsstm02  n: 66 entries: 72  (jumbled version)
 --------------------------------------------------------
 
 Factorize PAP'=LDL' and solve Ax=b
@@ -289,42 +313,48 @@ relative maxnorm of residual: 2.22045e-16
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 99)
+Input file: ../Matrix/A25
+name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 1)
 --------------------------------------------------------
 
 ldlmain: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/2  n: 2 entries: 4 (invalid perm, P[1]=99)
+Input file: ../Matrix/A26
+name: Dense/2  n: 2 entries: 4 (invalid perm, P[1]=99)
 --------------------------------------------------------
 
 ldlmain: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid perm)
+Input file: ../Matrix/A27
+name: Dense/3  n: 3 entries: 9 (invalid perm)
 --------------------------------------------------------
 
 ldlmain: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ap)
+Input file: ../Matrix/A28
+name: Dense/3  n: 3 entries: 9 (invalid Ap)
 --------------------------------------------------------
 
 ldlmain: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ai)
+Input file: ../Matrix/A29
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
 --------------------------------------------------------
 
 ldlmain: invalid matrix and/or permutation
 
 
 --------------------------------------------------------
-Input matrix: name: Dense/3  n: 3 entries: 9 (invalid Ai)
+Input file: ../Matrix/A30
+name: Dense/3  n: 3 entries: 9 (invalid Ai)
 --------------------------------------------------------
 
 ldlmain: invalid matrix and/or permutation
diff --git a/LDL/Demo/ldlsimple.c b/LDL/Demo/ldlsimple.c
index bb795f5..3e9788a 100644
--- a/LDL/Demo/ldlsimple.c
+++ b/LDL/Demo/ldlsimple.c
@@ -26,8 +26,8 @@
  * ldl_symbolic has analyzed the matrix.  The size of Li and Lx must be greater
  * than or equal to lnz = Lp [N], which is 13 for this matrix L.
  *
- * LDL Version 1.3, Copyright (c) 2006 by Timothy A Davis,
- * University of Florida.  All Rights Reserved.  See README for the License.
+ * Copyright (c) 2006 by Timothy A Davis, http://www.suitesparse.com.
+ * All Rights Reserved.  See README for the License.
  */
 
 #include <stdio.h>
diff --git a/LDL/Doc/ChangeLog b/LDL/Doc/ChangeLog
index 48c322d..02cb743 100644
--- a/LDL/Doc/ChangeLog
+++ b/LDL/Doc/ChangeLog
@@ -1,3 +1,28 @@
+Oct 10, 2014: version 2.2.1
+
+    modified MATLAB/ldl_make.m.  No change to C code except version number.
+
+July 31, 2013: version 2.2.0
+
+    * changed malloc and printf pointers to use SuiteSparse_config
+
+Jun 1, 2012: version 2.1.0
+
+    * UFconfig replaced with SuiteSparse_config
+
+Dec 7, 2011: version 2.0.4
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * modified the demo program to check for errors in input test matrices
+
+Jan 25, 2011: version 2.0.3
+
+    * minor fix to "make install"
+
+Nov 30, 2009: version 2.0.2
+
+    * added "make install" and "make uninstall"
+
 May 31, 2007: version 2.0.0
 
     * C-callable 64-bit version added
diff --git a/LDL/Doc/Makefile b/LDL/Doc/Makefile
index 4303388..6bf561d 100644
--- a/LDL/Doc/Makefile
+++ b/LDL/Doc/Makefile
@@ -4,7 +4,7 @@
 
 default: ldl_userguide.pdf
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 #-------------------------------------------------------------------------------
 # clean-up:
diff --git a/LDL/Doc/ldl_userguide.pdf b/LDL/Doc/ldl_userguide.pdf
index bfe0615..9e2ff1b 100644
Binary files a/LDL/Doc/ldl_userguide.pdf and b/LDL/Doc/ldl_userguide.pdf differ
diff --git a/LDL/Doc/ldl_userguide.tex b/LDL/Doc/ldl_userguide.tex
index 6208a59..07766d5 100644
--- a/LDL/Doc/ldl_userguide.tex
+++ b/LDL/Doc/ldl_userguide.tex
@@ -15,10 +15,8 @@
 
 \title{User Guide for LDL, a concise sparse Cholesky package}
 \author{Timothy A. Davis\thanks{
-Dept.~of Computer and Information Science and Engineering,
-Univ.~of Florida, Gainesville, FL, USA.
-email: davis at cise.ufl.edu.
-http://www.cise.ufl.edu/$\sim$davis.
+email: DrTimothyAldenDavis at gmail.com,
+http://www.suitesparse.com.
 This work was supported by the National
 Science Foundation, under grant CCR-0203270.
 Portions of the work were done while on sabbatical at Stanford University
@@ -26,7 +24,7 @@ and Lawrence Berkeley National Laboratory (with funding from Stanford
 University and the SciDAC program).
 }}
 
-\date{Nov 1, 2007}
+\date{VERSION 2.2.1, Oct 10, 2014}
 
 \maketitle
 
@@ -475,7 +473,7 @@ void ldl_ltsolve
 \end{figure}
 
 In addition to appearing as a Collected Algorithm of the ACM \cite{Davis05},
-{\tt LDL} is available at http://www.cise.ufl.edu/research/sparse.
+{\tt LDL} is available at http://www.suitesparse.com.
 
 %-------------------------------------------------------------------------------
 \section{Using LDL in MATLAB}
@@ -563,7 +561,7 @@ passing it {\tt ldl\_symbolic} and {\tt ldl\_numeric}.
 An additional set of routines is available for use in a 64-bit environment.
 Each routine name changes uniformly; {\tt ldl\_symbolic} becomes
 {\tt ldl\_l\_symbolic}, and each {\tt int} parameter becomes type
-{\tt UF\_long}.  The {\tt UF\_long} type is {\tt long}, except for
+{\tt SuiteSparse\_long}.  The {\tt SuiteSparse\_long} type is {\tt long}, except for
 Microsoft Windows 64, where it becomes {\tt \_\_int64}.
 
 \begin{figure}
diff --git a/LDL/Include/ldl.h b/LDL/Include/ldl.h
index 5840be3..7ac9bca 100644
--- a/LDL/Include/ldl.h
+++ b/LDL/Include/ldl.h
@@ -2,15 +2,15 @@
 /* === ldl.h:  include file for the LDL package ============================= */
 /* ========================================================================== */
 
-/* LDL Copyright (c) Timothy A Davis,
- * University of Florida.  All Rights Reserved.  See README for the License.
+/* Copyright (c) Timothy A Davis, http://www.suitesparse.com.
+ * All Rights Reserved.  See README for the License.
  */
 
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
 #ifdef LDL_LONG
-#define LDL_int UF_long
-#define LDL_ID UF_long_id
+#define LDL_int SuiteSparse_long
+#define LDL_ID SuiteSparse_long_id
 
 #define LDL_symbolic ldl_l_symbolic
 #define LDL_numeric ldl_l_numeric
@@ -68,37 +68,45 @@ int ldl_valid_matrix ( int n, int Ap [ ], int Ai [ ]) ;
 /* === long version ========================================================= */
 /* ========================================================================== */
 
-void ldl_l_symbolic (UF_long n, UF_long Ap [ ], UF_long Ai [ ], UF_long Lp [ ],
-    UF_long Parent [ ], UF_long Lnz [ ], UF_long Flag [ ], UF_long P [ ],
-    UF_long Pinv [ ]) ;
+void ldl_l_symbolic (SuiteSparse_long n, SuiteSparse_long Ap [ ],
+    SuiteSparse_long Ai [ ], SuiteSparse_long Lp [ ],
+    SuiteSparse_long Parent [ ], SuiteSparse_long Lnz [ ],
+    SuiteSparse_long Flag [ ], SuiteSparse_long P [ ],
+    SuiteSparse_long Pinv [ ]) ;
 
-UF_long ldl_l_numeric (UF_long n, UF_long Ap [ ], UF_long Ai [ ], double Ax [ ],
-    UF_long Lp [ ], UF_long Parent [ ], UF_long Lnz [ ], UF_long Li [ ],
-    double Lx [ ], double D [ ], double Y [ ], UF_long Pattern [ ],
-    UF_long Flag [ ], UF_long P [ ], UF_long Pinv [ ]) ;
+SuiteSparse_long ldl_l_numeric (SuiteSparse_long n, SuiteSparse_long Ap [ ],
+    SuiteSparse_long Ai [ ], double Ax [ ], SuiteSparse_long Lp [ ],
+    SuiteSparse_long Parent [ ], SuiteSparse_long Lnz [ ],
+    SuiteSparse_long Li [ ], double Lx [ ], double D [ ], double Y [ ],
+    SuiteSparse_long Pattern [ ], SuiteSparse_long Flag [ ],
+    SuiteSparse_long P [ ], SuiteSparse_long Pinv [ ]) ;
 
-void ldl_l_lsolve (UF_long n, double X [ ], UF_long Lp [ ], UF_long Li [ ],
-    double Lx [ ]) ;
+void ldl_l_lsolve (SuiteSparse_long n, double X [ ], SuiteSparse_long Lp [ ],
+    SuiteSparse_long Li [ ], double Lx [ ]) ;
 
-void ldl_l_dsolve (UF_long n, double X [ ], double D [ ]) ;
+void ldl_l_dsolve (SuiteSparse_long n, double X [ ], double D [ ]) ;
 
-void ldl_l_ltsolve (UF_long n, double X [ ], UF_long Lp [ ], UF_long Li [ ],
-    double Lx [ ]) ;
+void ldl_l_ltsolve (SuiteSparse_long n, double X [ ], SuiteSparse_long Lp [ ],
+    SuiteSparse_long Li [ ], double Lx [ ]) ;
 
-void ldl_l_perm  (UF_long n, double X [ ], double B [ ], UF_long P [ ]) ;
-void ldl_l_permt (UF_long n, double X [ ], double B [ ], UF_long P [ ]) ;
+void ldl_l_perm  (SuiteSparse_long n, double X [ ], double B [ ],
+    SuiteSparse_long P [ ]) ;
+void ldl_l_permt (SuiteSparse_long n, double X [ ], double B [ ],
+    SuiteSparse_long P [ ]) ;
 
-UF_long ldl_l_valid_perm (UF_long n, UF_long P [ ], UF_long Flag [ ]) ;
-UF_long ldl_l_valid_matrix ( UF_long n, UF_long Ap [ ], UF_long Ai [ ]) ;
+SuiteSparse_long ldl_l_valid_perm (SuiteSparse_long n, SuiteSparse_long P [ ],
+    SuiteSparse_long Flag [ ]) ;
+SuiteSparse_long ldl_l_valid_matrix ( SuiteSparse_long n,
+    SuiteSparse_long Ap [ ], SuiteSparse_long Ai [ ]) ;
 
 /* ========================================================================== */
 /* === LDL version ========================================================== */
 /* ========================================================================== */
 
-#define LDL_DATE "Nov 1, 2007"
+#define LDL_DATE "Oct 10, 2014"
 #define LDL_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
 #define LDL_MAIN_VERSION 2
-#define LDL_SUB_VERSION 0
+#define LDL_SUB_VERSION 2
 #define LDL_SUBSUB_VERSION 1
 #define LDL_VERSION LDL_VERSION_CODE(LDL_MAIN_VERSION,LDL_SUB_VERSION)
 
diff --git a/LDL/Lib/Makefile b/LDL/Lib/Makefile
index 350412c..73d153c 100644
--- a/LDL/Lib/Makefile
+++ b/LDL/Lib/Makefile
@@ -4,11 +4,11 @@
 
 default: all
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-I = -I../../UFconfig -I../Include
+I = -I../../SuiteSparse_config -I../Include
 
-C = $(CC) $(CFLAGS) $(I)
+C = $(CC) $(CF) $(I)
 
 all: libldl.a
 
@@ -19,7 +19,7 @@ all: libldl.a
 libldl.a: ../Source/ldl.c ../Include/ldl.h
 	$(C) -c ../Source/ldl.c -o ldl.o
 	$(C) -DLDL_LONG -c ../Source/ldl.c -o ldll.o
-	$(AR) libldl.a ldl.o ldll.o
+	$(ARCHIVE)  libldl.a ldl.o ldll.o
 	- $(RANLIB) libldl.a
 
 distclean: purge
diff --git a/LDL/MATLAB/Contents.m b/LDL/MATLAB/Contents.m
index c772027..e02c19d 100644
--- a/LDL/MATLAB/Contents.m
+++ b/LDL/MATLAB/Contents.m
@@ -18,16 +18,12 @@
 %
 %       [L, D, Parent, fl] = ldlsparse (A)
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 % LDL License:  GNU Lesser General Public License as published by the
 %   Free Software Foundation; either version 2.1 of the License, or
 %   (at your option) any later version.
 %
-% Availability:
-%
-%   http://www.cise.ufl.edu/research/sparse/ldl
-%
 % Acknowledgements:
 %
 %   This work was supported by the National Science Foundation, under
diff --git a/LDL/MATLAB/Makefile b/LDL/MATLAB/Makefile
deleted file mode 100644
index 9e93381..0000000
--- a/LDL/MATLAB/Makefile
+++ /dev/null
@@ -1,27 +0,0 @@
-#-------------------------------------------------------------------------------
-# Makefile for the LDL mexFunction
-#-------------------------------------------------------------------------------
-
-default: mex
-
-include ../../UFconfig/UFconfig.mk
-
-I = -I../../UFconfig -I../Include
-
-MX = $(MEX) $(I) -DLDL_LONG
-
-mex: ldlmex.c ../Source/ldl.c ../Include/ldl.h ldlsymbolmex.c
-	- $(MX) -output ldlsparse ../Source/ldl.c ldlmex.c
-	- $(MX) -output ldlsymbol ../Source/ldl.c ldlsymbolmex.c
-
-#-------------------------------------------------------------------------------
-# clean-up:
-#-------------------------------------------------------------------------------
-
-distclean: purge
-
-purge: clean
-	- $(RM) *.mex*
-
-clean:
-	- $(RM) $(CLEAN)
diff --git a/LDL/MATLAB/ldl_install.m b/LDL/MATLAB/ldl_install.m
index 02eb14f..0e2c10e 100644
--- a/LDL/MATLAB/ldl_install.m
+++ b/LDL/MATLAB/ldl_install.m
@@ -7,7 +7,7 @@ function ldl_install
 %
 % See also ldlsparse, ldlsymbol
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 ldl_make
 addpath (pwd) ;
diff --git a/LDL/MATLAB/ldl_make.m b/LDL/MATLAB/ldl_make.m
index 8e0acf5..cb56de5 100644
--- a/LDL/MATLAB/ldl_make.m
+++ b/LDL/MATLAB/ldl_make.m
@@ -6,13 +6,19 @@ function ldl_make
 %
 % See also ldlsparse, ldlsymbol
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 d = '' ;
 if (~isempty (strfind (computer, '64')))
     d = '-largeArrayDims' ;
 end
-eval (sprintf ('mex -O %s -DLDL_LONG -I../../UFconfig -I../Include -output ldlsparse ../Source/ldl.c ldlmex.c', d)) ;
-eval (sprintf ('mex -O %s -DLDL_LONG -I../../UFconfig -I../Include -output ldlsymbol ../Source/ldl.c ldlsymbolmex.c', d)) ;
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    d = ['-silent ' d] ;
+end
+
+eval (sprintf ('mex -O %s -DLDL_LONG -I../../SuiteSparse_config -I../Include -output ldlsparse ../Source/ldl.c ldlmex.c', d)) ;
+eval (sprintf ('mex -O %s -DLDL_LONG -I../../SuiteSparse_config -I../Include -output ldlsymbol ../Source/ldl.c ldlsymbolmex.c', d)) ;
 fprintf ('LDL successfully compiled.\n') ;
 
diff --git a/LDL/MATLAB/ldldemo.m b/LDL/MATLAB/ldldemo.m
index 3d37765..557dafc 100644
--- a/LDL/MATLAB/ldldemo.m
+++ b/LDL/MATLAB/ldldemo.m
@@ -6,7 +6,7 @@ function ldldemo
 %
 % See also ldlsparse.
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 % compile the LDLSPARSE and LDLSYMBOL mexFunctions
 help ldlsparse
@@ -22,7 +22,6 @@ A = sprandn (n, n, d) ;
 A = speye (n) + A*A' ;
 b = randn (n, 1) ;
 
-figure (1)
 clf
 subplot (2,2,1) ;
 spy (A) ;
diff --git a/LDL/MATLAB/ldlmain2.m b/LDL/MATLAB/ldlmain2.m
index fcbc5c4..9a41724 100644
--- a/LDL/MATLAB/ldlmain2.m
+++ b/LDL/MATLAB/ldlmain2.m
@@ -6,7 +6,7 @@ function ldlmain2
 %
 % See also ldlsparse.
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 help ldlmain2
 
@@ -19,7 +19,8 @@ if (~isempty (strfind (computer, '64')))
     d = '-largeArrayDims' ;
 end
 
-mx = sprintf ('mex -O %s -DLDL_LONG -DDLONG -I../../UFconfig -I../Include', d) ;
+mx = sprintf (...
+    'mex -O %s -DLDL_LONG -DDLONG -I../../SuiteSparse_config -I../Include', d) ;
 
 % compile ldlmain without AMD
 cmd = sprintf ('%s ../Demo/ldlmain.c ../Source/ldl.c', mx) ;
@@ -32,13 +33,20 @@ ldlmain
 % compile ldlamd (ldlmain with AMD)
 cmd = sprintf ('%s -I../../AMD/Include', mx) ;
 
+cmd = [cmd ' ../../SuiteSparse_config/SuiteSparse_config.c' ] ;
+
 files = {'amd_order', 'amd_dump', 'amd_postorder', 'amd_post_tree', ...
     'amd_aat', 'amd_2', 'amd_1', 'amd_defaults', 'amd_control', ...
-    'amd_info', 'amd_valid', 'amd_global', 'amd_preprocess' } ;
+    'amd_info', 'amd_valid', 'amd_preprocess' } ;
 for i = 1 : length (files)
     cmd = sprintf ('%s ../../AMD/Source/%s.c', cmd, files {i}) ;
 end
 
+if (~(ispc || ismac))
+    % for POSIX timing routine
+    cmd = [cmd ' -lrt'] ;
+end
+
 cmd = [cmd ' -DUSE_AMD -output ldlamd ../Demo/ldlmain.c ../Source/ldl.c'] ;
 if (detail)
     fprintf ('%s\n', cmd) ;
diff --git a/LDL/MATLAB/ldlmex.c b/LDL/MATLAB/ldlmex.c
index 7842cd4..03d79a2 100644
--- a/LDL/MATLAB/ldlmex.c
+++ b/LDL/MATLAB/ldlmex.c
@@ -51,8 +51,8 @@
  * That is, the LDL' factorization of B (1:d,1:d) is in the first d rows and
  * columns of L and D.  The rest of L and D are zero.
  *
- * LDL Copyright (c) by Timothy A Davis,
- * University of Florida.  All Rights Reserved.  See README for the License.
+ * Copyright (c) by Timothy A Davis, http://www.suitesparse.com.
+ * All Rights Reserved.  See README for the License.
  */
 
 #ifndef LDL_LONG
@@ -61,6 +61,7 @@
 
 #include "ldl.h"
 #include "mex.h"
+#define Long SuiteSparse_long
 
 /* ========================================================================== */
 /* === LDL mexFunction ====================================================== */
@@ -74,7 +75,7 @@ void mexFunction
     const mxArray *pargin[ ]
 )
 {
-    UF_long i, n, *Pattern, *Flag, *Li, *Lp, *Ap, *Ai, *Lnz, *Parent, do_chol,
+    Long i, n, *Pattern, *Flag, *Li, *Lp, *Ap, *Ai, *Lnz, *Parent, do_chol,
 	nrhs = 0, lnz, do_solve, *P, *Pinv, nn, k, j, permute, *Dp = NULL, *Di,
 	d, do_flops, psrc, pdst ;
     double *Y, *D, *Lx, *Ax, flops, *X = NULL, *B = NULL, *p ;
@@ -112,8 +113,8 @@ void mexFunction
     nn = (n == 0) ? 1 : n ;
 
     /* get sparse matrix A */
-    Ap = (UF_long *) mxGetJc (pargin [0]) ;
-    Ai = (UF_long *) mxGetIr (pargin [0]) ;
+    Ap = (Long *) mxGetJc (pargin [0]) ;
+    Ai = (Long *) mxGetIr (pargin [0]) ;
     Ax = mxGetPr (pargin [0]) ;
 
     /* get fill-reducing ordering, if present */
@@ -125,8 +126,8 @@ void mexFunction
 	{
 	    mexErrMsgTxt ("ldl: invalid input permutation\n") ;
 	}
-	P    = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
-	Pinv = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
+	P    = (Long *) mxMalloc (nn * sizeof (Long)) ;
+	Pinv = (Long *) mxMalloc (nn * sizeof (Long)) ;
 	p = mxGetPr (pargin [1]) ;
 	for (k = 0 ; k < n ; k++)
 	{
@@ -135,19 +136,19 @@ void mexFunction
     }
     else
     {
-	P    = (UF_long *) NULL ;
-	Pinv = (UF_long *) NULL ;
+	P    = (Long *) NULL ;
+	Pinv = (Long *) NULL ;
     }
 
     /* allocate first part of L */
-    Lp      = (UF_long *) mxMalloc ((n+1) * sizeof (UF_long)) ;
-    Parent  = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
+    Lp      = (Long *) mxMalloc ((n+1) * sizeof (Long)) ;
+    Parent  = (Long *) mxMalloc (nn * sizeof (Long)) ;
 
     /* get workspace */
     Y       = (double *)  mxMalloc (nn * sizeof (double)) ;
-    Flag    = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
-    Pattern = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
-    Lnz     = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
+    Flag    = (Long *) mxMalloc (nn * sizeof (Long)) ;
+    Pattern = (Long *) mxMalloc (nn * sizeof (Long)) ;
+    Lnz     = (Long *) mxMalloc (nn * sizeof (Long)) ;
 
     /* make sure the input P is valid */
     if (permute && !ldl_l_valid_perm (n, P, Flag))
@@ -174,15 +175,15 @@ void mexFunction
 	pargout [0] = mxCreateSparse (n, n, lnz+1, mxREAL) ;
 	mxFree (mxGetJc (pargout [0])) ;
 	mxSetJc (pargout [0], (void *) Lp) ;	/* Lp is not mxFree'd */
-	Li = (UF_long *) mxGetIr (pargout [0]) ;
+	Li = (Long *) mxGetIr (pargout [0]) ;
 	Lx = mxGetPr (pargout [0]) ;
 
 	/* create sparse diagonal matrix D */
 	if (nargout > 1)
 	{
 	    pargout [1] = mxCreateSparse (n, n, nn, mxREAL) ;
-	    Dp = (UF_long *) mxGetJc (pargout [1]) ;
-	    Di = (UF_long *) mxGetIr (pargout [1]) ;
+	    Dp = (Long *) mxGetJc (pargout [1]) ;
+	    Di = (Long *) mxGetIr (pargout [1]) ;
 	    for (j = 0 ; j < n ; j++)
 	    {
 		Dp [j] = j ;
@@ -212,7 +213,7 @@ void mexFunction
     else
     {
 	/* create L and D as temporary matrices */
-	Li = (UF_long *)    mxMalloc ((lnz+1) * sizeof (UF_long)) ;
+	Li = (Long *)    mxMalloc ((lnz+1) * sizeof (Long)) ;
 	Lx = (double *) mxMalloc ((lnz+1) * sizeof (double)) ;
 	D  = (double *) mxMalloc (nn * sizeof (double)) ;
 
diff --git a/LDL/MATLAB/ldlrow.m b/LDL/MATLAB/ldlrow.m
index 4c2f836..a2317df 100644
--- a/LDL/MATLAB/ldlrow.m
+++ b/LDL/MATLAB/ldlrow.m
@@ -54,7 +54,7 @@ function [L, D] = ldlrow (A)
 %
 % See also ldlsparse.
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 [m n] = size (A) ;
 L = zeros (n, n) ;
diff --git a/LDL/MATLAB/ldlsparse.m b/LDL/MATLAB/ldlsparse.m
index 164a9f3..cb5a0bd 100644
--- a/LDL/MATLAB/ldlsparse.m
+++ b/LDL/MATLAB/ldlsparse.m
@@ -28,6 +28,6 @@ function [arg1, arg2, arg3, arg4] = ldlsparse (A, P, b)			    %#ok
 %
 % See also chol, ldl, ldlsymbol, symbfact, etree
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 error ('ldlsparse mexFunction not found') ;
diff --git a/LDL/MATLAB/ldlsymbol.m b/LDL/MATLAB/ldlsymbol.m
index c046cb3..6788f64 100644
--- a/LDL/MATLAB/ldlsymbol.m
+++ b/LDL/MATLAB/ldlsymbol.m
@@ -30,6 +30,6 @@ function [Lnz, Parent, fl] = ldlsymbol (A, P)				    %#ok
 %
 % See also ldlsparse, symbfact, etree
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 error ('ldlsymbol mexFunction not found') ;
diff --git a/LDL/MATLAB/ldlsymbolmex.c b/LDL/MATLAB/ldlsymbolmex.c
index 9631b20..c2a0715 100644
--- a/LDL/MATLAB/ldlsymbolmex.c
+++ b/LDL/MATLAB/ldlsymbolmex.c
@@ -33,8 +33,8 @@
  * of 4 to 40 (median speedup of 9) in MATLAB 6.5 on a Pentium 4 Linux laptop
  * (excluding the B=A(P,P) time), on a wide range of symmetric sparse matrices.
  *
- * LDL Version 1.3, Copyright (c) 2006 by Timothy A Davis,
- * University of Florida.  All Rights Reserved.  See README for the License.
+ * Copyright (c) 2006 by Timothy A Davis, http://www.suitesparse.com.
+ * All Rights Reserved.  See README for the License.
  */
 
 #ifndef LDL_LONG
@@ -43,6 +43,7 @@
 
 #include "ldl.h"
 #include "mex.h"
+#define Long SuiteSparse_long
 
 /* ========================================================================== */
 /* === LDLSYMBOL mexFunction ================================================ */
@@ -56,7 +57,7 @@ void mexFunction
     const mxArray *pargin[ ]
 )
 {
-    UF_long i, n, *Pattern, *Flag, *Lp, *Ap, *Ai, *Lnz, *Parent,
+    Long i, n, *Pattern, *Flag, *Lp, *Ap, *Ai, *Lnz, *Parent,
 	*P, *Pinv, nn, k, j, permute ;
     double flops, *p ;
 
@@ -80,8 +81,8 @@ void mexFunction
     nn = (n == 0) ? 1 : n ;
 
     /* get sparse matrix A */
-    Ap = (UF_long *) mxGetJc (pargin [0]) ;
-    Ai = (UF_long *) mxGetIr (pargin [0]) ;
+    Ap = (Long *) mxGetJc (pargin [0]) ;
+    Ai = (Long *) mxGetIr (pargin [0]) ;
 
     /* get fill-reducing ordering, if present */
     permute = ((nargin > 1) && !mxIsEmpty (pargin [1])) ;
@@ -92,8 +93,8 @@ void mexFunction
 	{
 	    mexErrMsgTxt ("ldlsymbol: invalid input permutation\n") ;
 	}
-	P    = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
-	Pinv = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
+	P    = (Long *) mxMalloc (nn * sizeof (Long)) ;
+	Pinv = (Long *) mxMalloc (nn * sizeof (Long)) ;
 	p = mxGetPr (pargin [1]) ;
 	for (k = 0 ; k < n ; k++)
 	{
@@ -102,18 +103,18 @@ void mexFunction
     }
     else
     {
-	P    = (UF_long *) NULL ;
-	Pinv = (UF_long *) NULL ;
+	P    = (Long *) NULL ;
+	Pinv = (Long *) NULL ;
     }
 
     /* allocate first part of L */
-    Lp      = (UF_long *) mxMalloc ((n+1) * sizeof (UF_long)) ;
-    Parent  = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
+    Lp      = (Long *) mxMalloc ((n+1) * sizeof (Long)) ;
+    Parent  = (Long *) mxMalloc (nn * sizeof (Long)) ;
 
     /* get workspace */
-    Flag    = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
-    Pattern = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
-    Lnz     = (UF_long *) mxMalloc (nn * sizeof (UF_long)) ;
+    Flag    = (Long *) mxMalloc (nn * sizeof (Long)) ;
+    Pattern = (Long *) mxMalloc (nn * sizeof (Long)) ;
+    Lnz     = (Long *) mxMalloc (nn * sizeof (Long)) ;
 
     /* make sure the input P is valid */
     if (permute && !ldl_l_valid_perm (n, P, Flag))
diff --git a/LDL/MATLAB/ldltest.m b/LDL/MATLAB/ldltest.m
index 912c18e..795b0a4 100644
--- a/LDL/MATLAB/ldltest.m
+++ b/LDL/MATLAB/ldltest.m
@@ -5,7 +5,7 @@ function ldltest
 %   ldltest
 % See also ldlsparse.
 
-% Copyright 2006-2007 by Timothy A. Davis, Univ. of Florida
+% Copyright 2006-2007 by Timothy A. Davis, http://www.suitesparse.com
 
 help ldlsparse
 
@@ -143,7 +143,6 @@ if (any (Parent2 ~= Parent))
     error ('?') ;
 end
 
-figure (1)
 clf
 subplot (2,2,1), spy (A),           title ('original matrix') ;
 subplot (2,2,2), spy (A (P,P)),     title ('permuted matrix') ;
diff --git a/LDL/Makefile b/LDL/Makefile
index 91eb29d..7bf54f1 100644
--- a/LDL/Makefile
+++ b/LDL/Makefile
@@ -2,22 +2,20 @@
 # LDL Makefile
 #------------------------------------------------------------------------------
 
-default: demo
+VERSION = 2.2.1
 
-include ../UFconfig/UFconfig.mk
+default: all
 
-# Compile all C code, including the C-callable routine.
-demo:
-	( cd Lib    ; $(MAKE) )
-	( cd Demo   ; $(MAKE) )
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+demos: all
 
-# Compile all C code, including the C-callable routine and the mexFunctions.
+# Compile all C code, including the C-callable routine.
 all:
 	( cd Lib    ; $(MAKE) )
 	( cd Demo   ; $(MAKE) )
-	( cd MATLAB ; $(MAKE) )
 
-# compile just the C-callable libraries (not mexFunctions or Demos)
+# compile just the C-callable libraries (not Demos)
 library:
 	( cd Lib    ; $(MAKE) )
 
@@ -25,20 +23,20 @@ library:
 clean:
 	( cd Lib    ; $(MAKE) clean )
 	( cd Demo   ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
 	( cd Doc    ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) )
 
 # clean, and then remove compiled programs and library archives
 purge:
 	( cd Lib    ; $(MAKE) purge )
 	( cd Demo   ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
 	( cd Doc    ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) *.mex* )
 
 distclean: purge
 
 # create PDF documents for the original distribution
-doc:
+docs:
 	( cd Doc    ; $(MAKE) )
 
 # get ready for distribution
@@ -50,6 +48,16 @@ ccode: library
 
 lib: library
 
-# compile the MATLAB mexFunction
-mex:
-	( cd MATLAB ; $(MAKE) )
+# install LDL
+install:
+	$(CP) Lib/libldl.a $(INSTALL_LIB)/libldl.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libldl.$(VERSION).a libldl.a )
+	$(CP) Include/ldl.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libldl*.a
+	chmod 644 $(INSTALL_INCLUDE)/ldl.h
+
+# uninstall LDL
+uninstall:
+	$(RM) $(INSTALL_LIB)/libldl*.a
+	$(RM) $(INSTALL_INCLUDE)/ldl.h
+
diff --git a/LDL/Matrix/A25 b/LDL/Matrix/A25
index 4bddf37..ed2cc0c 100644
--- a/LDL/Matrix/A25
+++ b/LDL/Matrix/A25
@@ -1,3 +1,5 @@
-name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 99)
+name: Dense/0  n: 0 entries: 0 (invalid matrix, Ap [0] = 1)
 0 0
-99
+1
+0
+0
diff --git a/LDL/README.txt b/LDL/README.txt
index 7be8dd1..95ce6e1 100644
--- a/LDL/README.txt
+++ b/LDL/README.txt
@@ -1,4 +1,6 @@
-LDL Version 2.0: a sparse LDL' factorization and solve package.
+LDL Copyright (c) 2005-2013 by Timothy A. Davis. http://www.suitesparse.com
+
+LDL: a sparse LDL' factorization and solve package.
     Written in C, with both a C and MATLAB mexFunction interface. 
 
 These routines are not terrifically fast (they do not use dense matrix kernels),
@@ -8,17 +10,18 @@ purposes.  Although the code is very concise, this package is slightly faster
 than the built-in sparse Cholesky factorization in MATLAB 6.5 (chol), when
 using the same input permutation.
 
-Requires UFconfig, in the ../UFconfig directory relative to this directory.
+Requires SuiteSparse_config, in the ../SuiteSparse_config directory relative to
+this directory.
 
 Quick start (Unix, or Windows with Cygwin):
 
     To compile, test, and install LDL, you may wish to first obtain a copy of
-    AMD v2.0 from http://www.cise.ufl.edu/research/sparse, and place it in the
+    AMD from http://www.suitesparse.com and place it in the
     ../AMD directory, relative to this directory.  Next, type "make", which
     will compile the LDL library and three demo main programs (one of which
     requires AMD).  It will also compile the LDL MATLAB mexFunction (if you
     have MATLAB).  Typing "make clean" will remove non-essential files.
-    AMD v2.0 or later is required.  Its use is optional.
+    AMD v2.4 or later is required.  Its use is optional.
 
 Quick start (for MATLAB users);
 
@@ -28,7 +31,6 @@ Quick start (for MATLAB users);
 
 --------------------------------------------------------------------------------
 
-LDL Copyright (c) 2005 by Timothy A. Davis.  All Rights Reserved.
 
 LDL License:
 
@@ -62,7 +64,7 @@ LDL License:
 
 Availability:
 
-    http://www.cise.ufl.edu/research/sparse/ldl
+    http://www.suitesparse.com
 
 Acknowledgements:
 
diff --git a/LDL/Source/ldl.c b/LDL/Source/ldl.c
index a9b35c8..89332c9 100644
--- a/LDL/Source/ldl.c
+++ b/LDL/Source/ldl.c
@@ -97,7 +97,7 @@
  * an example in MATLAB, and the ldlmain.c stand-alone C program for examples of
  * how to find P.  Routines for manipulating compressed-column matrices are
  * available in UMFPACK.  AMD, SYMAMD, UMFPACK, and this LDL package are all
- * available at http://www.cise.ufl.edu/research/sparse.
+ * available at http://www.suitesparse.com.
  *
  * -------------------------
  * Possible simplifications:
@@ -148,11 +148,10 @@
  * Compare ldl_symbolic with the first part of ldl_numeric, and note that the
  * while (len > 0) loop is not present in ldl_symbolic.
  *
- * LDL Version 1.3, Copyright (c) 2006 by Timothy A Davis,
- * University of Florida.  All Rights Reserved.  Developed while on sabbatical
+ * Copyright (c) 2006 by Timothy A Davis, http://www.suitesparse.com.
+ * All Rights Reserved.  Developed while on sabbatical
  * at Stanford University and Lawrence Berkeley National Laboratory.  Refer to
- * the README file for the License.  Available at
- * http://www.cise.ufl.edu/research/sparse.
+ * the README file for the License.
  */
 
 #include "ldl.h"
diff --git a/LINFACTOR/Contents.m b/LINFACTOR/Contents.m
deleted file mode 100644
index 49e814e..0000000
--- a/LINFACTOR/Contents.m
+++ /dev/null
@@ -1,22 +0,0 @@
-% LINFACTOR
-%
-% This simple MATLAB function shows you how to use LU or CHOL to factor a matrix
-% and then solve a linear system A*x=b.
-%
-% Files
-%   linfactor - factorize a matrix, or use the factors to solve Ax=b.
-%   lintests  - test linfactor with many different kinds of systems.
-%   lintest   - test A*x=b, using linfactor, x=A\b, and (ack!) the explicit inv(A).
-%
-% Example:
-%   F = linfactor (A) ;     % factor A, returning an object F
-%   x = linfactor (F,b) ;   % solve Ax=b using F (the factorization of A)
-%   lintests ;              % test linfactor with various kinds of systems
-
-% Copyright 2007, Timothy A. Davis, University of Florida.
-%
-% License: this software is free for any use.  No warranty included or implied.
-% You must agree to only one condition to use this software: you must be aware
-% that you have been told that using inv(A) is a horrible, awful, and absoluty
-% abysmal method for solving a linear system of equations.  If you do not
-% agree to this condition, you must delete this software.
diff --git a/LINFACTOR/README.txt b/LINFACTOR/README.txt
deleted file mode 100644
index c5d16c8..0000000
--- a/LINFACTOR/README.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-LINFACTOR factorize a matrix, or use the factors to solve Ax=b.
-
-Uses LU or CHOL to factorize A, or uses a previously computed factorization to
-solve a linear system.  This function automatically selects an LU or Cholesky
-factorization, depending on the matrix.  A better method would be for you to
-select it yourself.  Note that mldivide uses a faster method for detecting
-whether or not A is a candidate for sparse Cholesky factorization (see spsym in
-the CHOLMOD package, for example).
-
-Example:
-
-  F = linfactor (A) ;     % factorizes A into the object F
-
-  x = linfactor (F,b) ;   % uses F to solve Ax=b
-
-  norm (A*x-b)
-
-A second output is the time taken by the method, ignoring the overhead of
-determining which method to use.  This makes for a fairer comparison between
-methods, since normally the user will know if the matrix is supposed to be
-symmetric positive definite or not, and whether or not the matrix is sparse.
-Also, the overhead here is much higher than mldivide or spsym.
-
-This function has its limitations:
-
-(1) determining whether or not the matrix is symmetric via nnz(A-A') is slow.
-mldivide (and spsym in CHOLMOD) do it much faster.
-
-(2) MATLAB really needs a sparse linsolve.  See cs_lsolve, cs_ltsolve, and
-cs_usolve in CSparse, for example.
-
-(3) this function really needs to be written as a mexFunction.
-
-(4) the full power of mldivide is not brought to bear.  For example, UMFPACK is
-not very fast for sparse tridiagonal matrices.  It's about a factor of four
-slower than a specialized tridiagonal solver as used in mldivide.
-
-(5) permuting a sparse vector or matrix is slower in MATLAB than it should be;
-a built-in linfactor would reduce this overhead.
-
-(6) mldivide when using UMFPACK uses relaxed partial pivoting and then
-iterative refinement.  This leads to sparser LU factors, and typically accurate
-results.  linfactor uses sparse LU without iterative refinement.
-
-The primary purpose of this function is to answer The Perennially Asked
-Question (or The PAQ for short (*)):  "Why not use x=inv(A)*b to solve Ax=b?
-How do I use LU or CHOL to solve Ax=b?"  The full answer is below.  The short
-answer to The PAQ (*) is "PAQ=LU ... ;-) ... never EVER use inv(A) to solve
-Ax=b."
-
-The secondary purpose of this function is to provide a prototype for some of
-the functionality of a true MATLAB built-in linfactor function.
-
-Finally, the third purpose of this function is that you might find it actually
-useful for production use, since its syntax is simpler than factorizing the
-matrix yourself and then using the factors to solve the system.  
-
-See also lu, chol, mldivide, linsolve, umfpack, cholmod.
-
-Oh, did I tell you never to use inv(A) to solve Ax=b?
diff --git a/LINFACTOR/linfactor.m b/LINFACTOR/linfactor.m
deleted file mode 100644
index 2d74f04..0000000
--- a/LINFACTOR/linfactor.m
+++ /dev/null
@@ -1,187 +0,0 @@
-function [result, t] = linfactor (arg1, arg2)
-%LINFACTOR factorize a matrix, or use the factors to solve Ax=b.
-% Uses LU or CHOL to factorize A, or uses a previously computed factorization to
-% solve a linear system.  This function automatically selects an LU or Cholesky
-% factorization, depending on the matrix.  A better method would be for you to
-% select it yourself.  Note that mldivide uses a faster method for detecting
-% whether or not A is a candidate for sparse Cholesky factorization (see spsym
-% in the CHOLMOD package, for example).
-%
-% Example:
-%   F = linfactor (A) ;     % factorizes A into the object F
-%   x = linfactor (F,b) ;   % uses F to solve Ax=b
-%   norm (A*x-b)
-%
-% A second output is the time taken by the method, ignoring the overhead of
-% determining which method to use.  This makes for a fairer comparison between
-% methods, since normally the user will know if the matrix is supposed to be
-% symmetric positive definite or not, and whether or not the matrix is sparse.
-% Also, the overhead here is much higher than mldivide or spsym.
-%
-% This function has its limitations:
-%
-% (1) determining whether or not the matrix is symmetric via nnz(A-A') is slow.
-%     mldivide (and spsym in CHOLMOD) do it much faster.
-%
-% (2) MATLAB really needs a sparse linsolve.  See cs_lsolve, cs_ltsolve, and
-%     cs_usolve in CSparse, for example.
-%
-% (3) this function really needs to be written as a mexFunction.
-%
-% (4) the full power of mldivide is not brought to bear.  For example, UMFPACK
-%     is not very fast for sparse tridiagonal matrices.  It's about a factor of
-%     four slower than a specialized tridiagonal solver as used in mldivide.
-%
-% (5) permuting a sparse vector or matrix is slower in MATLAB than it should be;
-%     a built-in linfactor would reduce this overhead.
-%
-% (6) mldivide when using UMFPACK uses relaxed partial pivoting and then
-%     iterative refinement.  This leads to sparser LU factors, and typically
-%     accurate results.  linfactor uses sparse LU without iterative refinement.
-%
-% The primary purpose of this function is to answer The Perennially Asked
-% Question (or The PAQ for short (*)):  "Why not use x=inv(A)*b to solve Ax=b?
-% How do I use LU or CHOL to solve Ax=b?"  The full answer is below.  The short
-% answer to The PAQ (*) is "PAQ=LU ... ;-) ... never EVER use inv(A) to solve
-% Ax=b."
-%
-% The secondary purpose of this function is to provide a prototype for some of
-% the functionality of a true MATLAB built-in linfactor function.
-% 
-% Finally, the third purpose of this function is that you might find it actually
-% useful for production use, since its syntax is simpler than factorizing the
-% matrix yourself and then using the factors to solve the system.
-%
-% See also lu, chol, mldivide, linsolve, umfpack, cholmod.
-%
-% Oh, did I tell you never to use inv(A) to solve Ax=b?
-%
-% Requires MATLAB 7.3 (R2006b) or later.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-% VERSION 1.1.0, Nov 1, 2007
-
-if (nargin < 1 | nargin > 2 | nargout > 2)          %#ok
-    error ('Usage: F=linfactor(A) or x=linfactor(F,b)') ;
-end
-
-if (nargin == 1)
-
-    %---------------------------------------------------------------------------
-    % F = linfactor (A) ;
-    %---------------------------------------------------------------------------
-
-    A = arg1 ;
-    [m n] = size (A) ;
-    if (m ~= n)
-        error ('linfactor: A must be square') ;
-    end
-
-    if (issparse (A))
-
-        % try sparse Cholesky (CHOLMOD): L*L' = P*A*P'
-        if (nnz (A-A') == 0 & all (diag (A) > 0))   %#ok
-            try
-                tic ;
-                [L, g, PT] = chol (A, 'lower') ;
-                t = toc ;
-                if (g == 0)
-                    result.L = L ;
-                    result.LT = L' ;    % takes more memory, but solve is faster
-                    result.P = PT' ;    % ditto.  Need a sparse linsolve here...
-                    result.PT = PT ;
-                    result.kind = 'sparse Cholesky: L*L'' = P*A*P''' ;
-                    result.code = 0 ;
-                    return
-                end
-            catch
-		% matrix is symmetric, but not positive definite
-		% (or we ran out of memory)
-            end
-        end
-
-        % try sparse LU (UMFPACK, with row scaling): L*U = P*(R\A)*Q
-        tic ;
-        [L, U, P, Q, R] = lu (A) ;
-        t = toc ;
-        result.L = L ;
-        result.U = U ;
-        result.P = P ;
-        result.Q = Q ;
-        result.R = R ;
-        result.kind = 'sparse LU: L*U = P*(R\A)*Q where R is diagonal' ;
-        result.code = 1 ;
-
-    else
-
-        % try dense Cholesky (LAPACK): L*L' = A
-        if (nnz (A-A') == 0 & all (diag (A) > 0))                           %#ok
-            try
-                tic ;
-                L = chol (A, 'lower') ;
-                t = toc ;
-                result.L = L ;
-                result.kind = 'dense Cholesky: L*L'' = A' ;
-                result.code = 2 ;
-                return
-            catch
-		% matrix is symmetric, but not positive definite
-		% (or we ran out of memory)
-            end
-        end
-
-        % try dense LU (LAPACK): L*U = A(p,:)
-        tic ;
-        [L, U, p] = lu (A, 'vector') ;
-        t = toc ;
-        result.L = L ;
-        result.U = U ;
-        result.p = p ;
-        result.kind = 'dense LU: L*U = A(p,:)' ;
-        result.code = 3 ;
-
-    end
-
-else
-
-    %---------------------------------------------------------------------------
-    % x = linfactor (F,b)
-    %---------------------------------------------------------------------------
-
-    F = arg1 ;
-    b = arg2 ;
-
-    if (F.code == 0)
-
-        % sparse Cholesky: MATLAB could use a sparse linsolve here ...
-        tic ;
-        result = F.PT * (F.LT \ (F.L \ (F.P * b))) ;
-        t = toc ;
-
-    elseif (F.code == 1)
-
-        % sparse LU: MATLAB could use a sparse linsolve here too ...
-        tic ;
-        result = F.Q * (F.U \ (F.L \ (F.P * (F.R \ b)))) ;
-        t = toc ;
-
-    elseif (F.code == 2)
-
-        % dense Cholesky: result = F.L' \ (F.L \ b) ;
-        lower.LT = true ;
-        upper.LT = true ;
-        upper.TRANSA = true ;
-        tic ;
-        result = linsolve (F.L, linsolve (F.L, b, lower), upper) ;
-        t = toc ;
-
-    elseif (F.code == 3)
-
-        % dense LU: result = F.U \ (F.L \ b (F.p,:)) ;
-        lower.LT = true ;
-        upper.UT = true ;
-        tic ;
-        result = linsolve (F.U, linsolve (F.L, b (F.p,:), lower), upper) ;
-        t = toc ;
-    end
-end
diff --git a/LINFACTOR/lintests.m b/LINFACTOR/lintests.m
deleted file mode 100644
index e434dfc..0000000
--- a/LINFACTOR/lintests.m
+++ /dev/null
@@ -1,69 +0,0 @@
-function lintests
-%LINTESTS test linfactor with many different kinds of systems.
-% Compares x=A\b, linfactor and (ack!) inv(A)*b.  You should never, ever use
-% inv(A) to solve a linear system.
-%
-% Example
-%   lintests
-%
-% See also lintest, linfactor, mldivide.
-
-% Copyright 2007, Timothy A. Davis
-
-rand ('state', 0) ;
-help linfactor
-
-for n = [100 1000 2000]
-
-    fprintf ('\nn: %d (with all nonzero matrix A)\n', n) ;
-
-    % dense LU
-    A = rand (n) ;
-    b = rand (n,1) ;
-    lintest (A,b) ;
-
-    % sparse LU
-    A = sparse (A) ;
-    lintest (A,b) ;
-
-    % dense Cholesky
-    A = A*A' + 10*eye(n) ;
-    lintest (A,b) ;
-
-    % sparse Cholesky
-    A = sparse (A) ;
-    lintest (A,b) ;
-
-end
-
-for n = [1000 2000 1e5]
-
-    % note that UMFPACK is not particularly fast for tridiagonal matrices
-    % (see "doc mldivide", which uses a specialized tridiagonal solver)
-    fprintf ('\nn: %d (sparse tridiagonal matrix)\n', n) ;
-
-    % sparse LU
-    e = rand (n, 1) ;
-    b = rand (n, 1) ;
-    A = spdiags ([e 4*e e], -1:1, n, n) ;
-    lintest (A,b) ;
-
-    % sparse Cholesky
-    e = ones (n, 1) ;
-    A = spdiags ([e 4*e e], -1:1, n, n) ;
-    lintest (A,b) ;
-
-end
-
-% sparse LU again
-fprintf ('\nwest0479:\n') ;
-load west0479 ;
-n = size (west0479, 1) ;
-b = rand (n, 1) ;
-lintest (west0479, b) ;
-
-% completely break inv(A) with a simple 2-by-2 matrix ...
-fprintf ('\nbreak inv(A) with a trivial 2-by-2 matrix:\n') ;
-s = warning ('off', 'MATLAB:singularMatrix') ;
-lintest (rand(2) * realmin/2, ones(2,1)) ;
-warning (s) ;
diff --git a/MATLAB_Tools/Contents.m b/MATLAB_Tools/Contents.m
index 2ea2ee2..f2eba2f 100644
--- a/MATLAB_Tools/Contents.m
+++ b/MATLAB_Tools/Contents.m
@@ -6,8 +6,15 @@
 %   pagerankdemo - draw a 6-node web and compute its pagerank
 %
 % Directories:
-%   shellgui   draw a pretty seashell
-%   waitmex    use a waitbar in a C mexFunction
+%   shellgui        draw a pretty seashell
+%   waitmex         use a waitbar in a C mexFunction
+%   GEE             Gaussian Elimination Example
+%   spok            "SParse OK": check if a sparse matrix is valid
+%   find_components find connected components in an image
+%   dimacs10        tools for accessing the DIMACS10 subset of matrices
+%   Factorize       object-oriented x=A\b solver
+%   UFcollection    tools for managing the UF Sparse Matrix Collection
+%   spqr_rank       rank-determination, null space.  Les Foster, primary author
 %
 % Examples:
 %   gipper              % add all files in current directory X to X.zip
@@ -15,5 +22,7 @@
 %   pagerankdemo        % run the pagerank demo
 %   shellgui            % draw a pretty seashell
 %   waitmex             % example mexFunction that creates a waitbar
+%   find_commponents_example
 %
-% Copyright 2007, Tim Davis, University of Florida
+% Copyright 2008-2012, Tim Davis, exceot for spqr_rank which is
+% Copyright by Les Foster (San Jose State Univ) and Tim Davis.
diff --git a/MATLAB_Tools/Factorize/Contents.m b/MATLAB_Tools/Factorize/Contents.m
new file mode 100644
index 0000000..7b62374
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Contents.m
@@ -0,0 +1,65 @@
+%FACTORIZE:  an object-oriented method for solving linear systems and least
+% squares problems.  The method provides an efficient way of computing
+% mathematical expressions involving the inverse, without actually
+% computing the inverse.  For example, S=A-B*inverse(D)*C computes the
+% Schur complement by computing S=A-B*(D\C) instead.
+%
+%   factorize  - an object-oriented method for solving linear systems
+%   inverse    - factorized representation of inv(A) or pinv(A).
+%
+% The package also includes methods for complete orthogonal decomposition
+% of full and sparse matrices:
+%
+%   cod        - complete orthogonal decomposition of a full matrix A = U*R*V'
+%   rq         - economy RQ or QL factorization of a full matrix A.
+%   cod_sparse - complete orthogonal decomposition of a sparse matrix A = U*R*V'
+%   cod_qmult  - computes Q'*X, Q*X, X*Q', or X*Q with Q from COD_SPARSE.
+%
+% Example
+%   cd Demo ; fdemo       % run the demo
+%
+% "Don't let that INV go past your eyes; to solve that system, FACTORIZE!"
+%
+% See also chol, lu, ldl, qr, svd.
+
+% Installation and testing:
+%
+% To install this package, type "pathtool" in the MATLAB command window.  Add
+% the directory that contains this Factorize/Contents.m file to the path.  Save
+% the path for future use.  Alternatively, type these commands while in this
+% directory:
+%
+%   addpath(pwd)
+%   savepath
+%
+% If you do not have the proper file permissions to save your path, create a
+% startup.m file that includes the command "addpath(here)" where "here" is the
+% directory containing this file.  Type "help startup" for more information.
+%
+% The cod function for sparse matrices requires the SPQR mexFunction from the
+% SuiteSparse library.  The simplest way to get this is to install all of
+% SuiteSparse from http://www.suitesparse.com.
+%
+% The Test/ subdirectory contains functions that test this package.
+%
+% The Doc/ subdirectory contains a document that illustrates how to use
+% the package (the output of fdemo).
+
+% Object-oriented methods, not meant to be user-callable:
+%
+%   factorization             - a generic matrix factorization object
+%   factorization_chol_dense  - A = R'*R where A is full and symmetric pos. def.
+%   factorization_chol_sparse - P'*A*P = L*L' where A is sparse and sym. pos. def.
+%   factorization_cod_dense   - complete orthogonal factorization: A = U*R*V' where A is full.
+%   factorization_cod_sparse  - complete orthogonal factorization: A = U*R*V' where A is sparse.
+%   factorization_ldl_dense   - A(p,p) = L*D*L' where A is sparse and full
+%   factorization_ldl_sparse  - P'*A*P = L*D*L' where A is sparse and symmetric
+%   factorization_lu_dense    - A(p,:) = L*U where A is square and full.
+%   factorization_lu_sparse   - P*A*Q = L*U where A is square and sparse.
+%   factorization_qr_dense    - A = Q*R where A is full.
+%   factorization_qr_sparse   - (A*P)'*(A*P) = R'*R where A is sparse.
+%   factorization_qrt_dense   - A' = Q*R where A is full.
+%   factorization_qrt_sparse  - (P*A)*(P*A)'=R'*R where A is sparse.
+%   factorization_svd         - A = U*S*V'
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/Factorize/Demo/factorize_demo.m b/MATLAB_Tools/Factorize/Demo/factorize_demo.m
new file mode 100644
index 0000000..a1d6a27
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Demo/factorize_demo.m
@@ -0,0 +1,335 @@
+%% THE FACTORIZE OBJECT for solving linear systems
+%
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+% DrTimothyAldenDavis at gmail.com
+%
+% This is a demonstration of the FACTORIZE object for solving linear
+% systems and least-squares problems, and for computations with the
+% matrix inverse and pseudo-inverse.
+
+%% Rule Number One: never multiply by the inverse, inv(A)
+%
+% Use backslash or a matrix factorization instead (LU, CHOL, or QR).
+
+%% Rule Number Two:  never break Rule Number One
+%
+% However, the problem with Rule Number One is that it can be hard to
+% figure out which matrix factorization to use and how to use it.  Using
+% LU, CHOL, or QR is complicated, particularly if you want the best
+% performance.  BACKSLASH (MLDIVIDE) is great, but it can't be reused when
+% solving multiple systems (x=A\b and y=A\c).  Its syntax doesn't match
+% the use of the inverse in mathematical expressions, either.
+%
+% The goal of the FACTORIZE object is to solve this problem ...
+%
+% "Don't let that INV go past your eyes; to solve that system, FACTORIZE!"
+
+%% How to use BACKSLASH to solve A*x=b
+%
+% First, let's create a square matrix A and a right-hand-side b for a
+% linear system A*x=b.  There are many ways to solve this system.  The
+% best way is to use x=A\b.  The residual r is a vector of what's left
+% over in each equation, and its norm tells you how accurately the system
+% was solved.
+
+format compact ;
+A = rand (3)
+b = rand (3,1)
+x = A\b
+r = b-A*x ;
+norm (r)
+
+%% BACKSLASH versus INV ... let the battle begin
+%
+% The backslash operation x=A\b is mathematically the same as x=inv(A)*b.
+% However, backslash is faster and more accurate since it uses a matrix
+% factorization instead of multiplying by the inverse.  Even though your
+% linear algebra textbook might write x=A^(-1)*b as the solution to the
+% system A*x=b, your textbook author never means for you to compute the
+% inverse.
+%
+% These next statements give the same answer, so what's the big deal?
+
+S = inv(A) ;
+x = S*b
+x = A\b
+
+%%
+% The big deal is that you should care about speed and you should care even
+% more about accuracy.  BACKSLASH relies on matrix factorization (LU, CHOL,
+% QR, or other specialized methods).  It's faster and more reliable than
+% multiplying by the inverse, particularly for large matrices and sparse
+% matrices.  Here's an illustration of how pathetic inv(A)*b can be.
+
+A = gallery ('frank',16) ; xtrue = ones (16,1) ; b = A*xtrue ;
+
+x = inv(A)*b ; norm (b-A*x)
+x = A\b      ; norm (b-A*x)
+
+%%
+% The performance difference between BACKSLASH and INV for even small
+% sparse matrices is striking.
+
+load west0479 ;
+A = west0479 ;
+n = size (A,1)
+b = rand (n,1) ;
+tic ; x = A\b ; toc
+norm (b-A*x)
+tic ; x = inv(A)*b ; toc
+norm (b-A*x)
+
+%%
+% What if you want to solve multiple systems?  Use a matrix factorization.
+% But which one?  And how do you use it?  Here are some alternatives using
+% LU for the sparse west0479 matrix, but some are faster than others.
+
+tic ; [L,U]     = lu(A) ; x1 = U \ (L \ b)         ; t1=toc ; nz1=nnz(L+U);
+tic ; [L,U,P]   = lu(A) ; x2 = U \ (L \ P*b)       ; t2=toc ; nz2=nnz(L+U);
+tic ; [L,U,P,Q] = lu(A) ; x3 = Q * (U \ (L \ P*b)) ; t3=toc ; nz3=nnz(L+U);
+
+fprintf ('1: nnz(L+U): %5d time: %8.4f resid: %e\n', nz1,t1, norm(b-A*x1));
+fprintf ('2: nnz(L+U): %5d time: %8.4f resid: %e\n', nz2,t2, norm(b-A*x2));
+fprintf ('3: nnz(L+U): %5d time: %8.4f resid: %e\n', nz3,t3, norm(b-A*x3));
+
+%% LU and LINSOLVE are fast and accurate but complicated to use
+%
+% A quick look at ``help lu'' will scroll off your screen.  For full
+% matrices, [L,U,p] = lu (A,'vector') is fastest.  Then for the
+% forward/backsolves, use LINSOLVE instead of BACKSLASH for even faster
+% performance.  But for sparse matrices, use the optional 'Q' output of LU
+% so you get a good fill-reducing ordering.  But you can't use 'Q' if the
+% matrix is full.  But LINSOLVE doesn't work on sparse matrices.
+%
+% But ... Ack!  That's getting complicated ...
+%
+% Here's the best way to solve A*x=b and A*y=c when A is full and
+% unsymmetric:
+
+n = 1000 ;
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+tic ; [L,U,p] = lu (A, 'vector') ; LUtime = toc
+
+tic ; x = U \ (L \ b (p,:)) ;
+      y = U \ (L \ c (p,:)) ; toc
+
+tic ; opL = struct ('LT', true) ;
+      opU = struct ('UT', true) ;
+      x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+      y = linsolve (U, linsolve (L, c(p,:), opL), opU) ; toc
+
+%% INV is easy to use, but slow and inaccurate
+%
+% Oh bother!  Using LU and LINSOLVE is too complicated.  You just want to
+% solve your system.  Let's just compute inv(A) and use it twice.  Easy to
+% write, but slower and less accurate ...
+
+S = inv (A) ;
+x = S*b ; norm (b-A*x)
+y = S*c ; norm (c-A*y)
+
+%%
+% Sometimes using the inverse seems inevitable.  For example, your textbook
+% might show the Schur complement formula as S = A-B*inv(D)*C.  This can be
+% done without inv(D) in one of two ways: SLASH or BACKSLASH (MRDIVIDE or
+% MLDIVIDE to be precise).
+%
+% inv(A)*B and A\B are mathematically equivalent, as are B*inv(A) and B/A,
+% so these three methods give the same results (ignoring computational
+% errors, which are worse for inv(D)).  Only the first equation looks like
+% the equation in your textbook, however.
+
+A = rand (200) ; B = rand (200) ; C = rand (200) ; D = rand (200) ;
+
+tic ; S1 = A - B*inv(D)*C ; toc ;
+tic ; S2 = A - B*(D\C) ;    toc ;
+tic ; S3 = A - (B/D)*C ;    toc ;
+
+%% So the winner is ... nobody
+%
+% BACKSLASH: mostly simple to use (except remember that Schur complement
+%       formula?).  Fast and accurate ... but slow if you want to solve
+%       two linear systems with the same matrix A.
+%
+% LU, QR, CHOL: fast and accurate.  Awful syntax to use.  Drag out your
+%       linear algebra textbook if you want to use these in MATLAB.
+%       Whenever I use them I have to derive them from scratch, even
+%       though I *wrote* most of the sparse factorizations used in MATLAB!
+%
+% INV: slow and inaccurate.  Wins big on ease-of-use, though, since it's a
+%       direct plug-in for all your nice mathematical formulas.
+%
+% No method is best on all three criterion: speed, accuracy, and ease of
+% use.
+%
+% Is there a solution?  Yes ... keeping reading ...
+
+%% The FACTORIZE object to the rescue
+%
+% The FACTORIZE method is just as easy to use as INV, but just as fast and
+% accurate as BACKSLASH, LU, QR, CHOL, and LINSOLVE.
+%
+% F = factorize(A) computes the factorization of A and returns it as an
+% object that you can reuse to solve a linear system with x=F\b.  It picks
+% LU, QR, or Cholesky for you, just like BACKSLASH.
+%
+% S = inverse(A) is simpler yet.  It does NOT compute inv(A), but
+% factorizes A.  When multiplying S*b, it doesn't mulitply by the inverse,
+% but uses the correct forward/backsolve equations to solve the linear
+% system.
+
+n = 1000 ;
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+
+tic ;                       x = A\b ; y = A\c ; toc
+tic ; S = inv(A) ;          x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ;    x = F\b ; y = F\c ; toc
+tic ; S = inverse(A) ;      x = S*b ; y = S*c ; toc
+
+%% Least-squares problems
+%
+% Here are some different methods for solving a least-squares problem when
+% your system is over-determined.  The last two methods are the same.
+
+A = rand (1000,200) ;
+b = rand (1000,1) ;
+
+tic ; x = A\b            ; toc, norm (A'*A*x-A'*b)
+tic ; x = pinv(A)*b      ; toc, norm (A'*A*x-A'*b)
+tic ; x = inverse(A)*b   ; toc, norm (A'*A*x-A'*b)
+tic ; x = factorize(A)\b ; toc, norm (A'*A*x-A'*b)
+
+%%
+% FACTORIZE is better than BACKSLASH because you can reuse the
+% factorization for different right-hand-sides.  For full-rank matrices,
+% it's better than PINV because it's faster (and PINV fails for sparse
+% matrices).
+
+A = rand (1000,200) ;
+b = rand (1000,1) ;
+c = rand (1000,1) ;
+
+tic ;                  ; x = A\b ; y = A\c ; toc
+tic ; S = pinv(A)      ; x = S*b ; y = S*c ; toc
+tic ; S = inverse(A)   ; x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ; x = F\b ; y = F\c ; toc
+
+%% Underdetermined systems
+%
+% The under-determined system A*x=b where A has more columns than rows has
+% many solutions.  x=A\b finds a basic solution (some of the entries in x
+% are zero).  pinv(A)*b finds a minimum 2-norm solution, but it's slow.  QR
+% factorization will do the same if A has full rank.  That's what the
+% factorize(A) and inverse(A) methods do.
+
+A = rand (200,1000) ;
+b = rand (200,1) ;
+
+tic ; x = A\b            ; toc, norm (x)
+tic ; x = pinv(A)*b      ; toc, norm (x)
+tic ; x = inverse(A)*b   ; toc, norm (x)
+tic ; x = factorize(A)\b ; toc, norm (x)
+
+%% Computing selected entries in the inverse or pseudo-inverse
+%
+% If you want just a few entries from the inverse, it's still better to
+% formulate the problem as a system of linear equations and use a matrix
+% factorization instead of computing inv(A).  The FACTORIZE object does
+% this for you, by overloading the subsref operator.
+
+A = rand (1000) ;
+
+tic ; S = inv (A)     ; S (2:3,4), toc
+tic ; S = inverse (A) ; S (2:3,4), toc
+
+%% Computing the entire inverse or pseudo-inverse
+%
+% Rarely, and I mean RARELY, you really do need the inverse.  More
+% frequently what you want is the pseudo-inverse.  You can force a
+% factorization to become a plain matrix by converting it to double.  Note
+% that inverse(A) only handles full-rank matrices (either dense or
+% sparse), whereas pinv(A) works for all dense matrices (not sparse).
+%
+% The explicit need for inv(A) (or S=A\eye(n), which is the same thing) is
+% RARE.  If you ever find yourself multiplying by the inverse, then you
+% know one thing for sure.  You know with certainty that you don't know
+% what you're doing.
+
+A = rand (500) ;
+tic ; S1 = inv (A) ;            ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+
+A = rand (500,400) ;
+tic ; S1 = pinv (A)             ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+
+%% Update/downdate of a dense Cholesky factorization
+%
+% Wilkinson considered the update/downdate of a matrix factorization to be
+% a key problem in computational linear algebra.  The idea is that you
+% first factorize a matrix.  Next, make a low-rank change to A, and patch
+% up (or down...) the factorization so that it becomes the factorization of
+% the new matrix.  In MATLAB, this only works for dense symmetric positive
+% definite matrices, via cholupdate.  This is much faster than computing
+% the new factorization from scratch.
+
+n = 1000 ;
+A = rand (n) ;
+A = A*A' + n*eye (n) ;
+w = rand (n,1) ; t = rand (n,1) ; b = rand (n,1) ;
+F = factorize (A) ;
+
+tic ; F = cholupdate (F,w,'+') ; x = F\b ; toc
+tic ; y = (A+w*w')\b ;      toc
+norm (x-y)
+
+tic ; F = cholupdate (F,t,'-') ; x = F\b ; toc
+tic ; y = (A+w*w'-t*t')\b ; toc
+norm (x-y)
+
+%% Caveat Executor
+%
+% One caveat:  If you have a large number of very small systems to solve,
+% the object-oriented overhead of creating and using an object can dominate
+% the run time, at least in MATLAB R2011a.  For this case, if you want the
+% best performance, stick with BACKSLASH, or LU and LINSOLVE (just extract
+% the appropriate formulas from the M-files in the FACTORIZE package).
+%
+% Hopefully the object-oriented overhead will drop in future versions of
+% MATLAB, and you can ignore this caveat.
+
+A = rand (10) ; b = rand (10,1) ; F = factorize (A) ;
+
+tic ; for k = 1:10000, x = F\b ; end ; toc
+
+tic ; for k = 1:10000, x = A\b ; end ; toc
+
+[L,U,p] = lu (A, 'vector') ;
+opL = struct ('LT', true) ;
+opU = struct ('UT', true) ;
+tic ; 
+for k = 1:10000
+    x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+end
+toc
+
+%% Summary
+%
+% So ... don't use INV, and don't worry about how to use LU, CHOL, or QR
+% factorization.  Just install the FACTORIZE package, and you're on your
+% way.  Assuming you are now in the Factorize/ directory, cut-and-paste
+% these commands into your command window:
+%
+%   addpath (pwd)
+%   savepath
+%
+% And remember ...
+%
+% "Don't let that INV go past your eyes; to solve that system, FACTORIZE!"
+
diff --git a/MATLAB_Tools/Factorize/Demo/fdemo.m b/MATLAB_Tools/Factorize/Demo/fdemo.m
new file mode 100644
index 0000000..72b3a31
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Demo/fdemo.m
@@ -0,0 +1,2 @@
+% Run the factorize demo
+echodemo ('factorize_demo') ;
diff --git a/MATLAB_Tools/Factorize/Doc/factorize_article.pdf b/MATLAB_Tools/Factorize/Doc/factorize_article.pdf
new file mode 100644
index 0000000..3caa755
Binary files /dev/null and b/MATLAB_Tools/Factorize/Doc/factorize_article.pdf differ
diff --git a/MATLAB_Tools/Factorize/Doc/factorize_demo.html b/MATLAB_Tools/Factorize/Doc/factorize_demo.html
new file mode 100644
index 0000000..cfa92f2
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Doc/factorize_demo.html
@@ -0,0 +1,633 @@
+
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+   <!--
+This HTML is auto-generated from an M-file.
+To make changes, update the M-file and republish this document.
+      --><title>THE FACTORIZE OBJECT for solving linear systems</title><meta name="generator" content="MATLAB 7.9"><meta name="date" content="2012-07-09"><meta name="m-file" content="factorize_demo"><style type="text/css">
+
+body {
+  background-color: white;
+  margin:10px;
+}
+
+h1 {
+  color: #990000; 
+  font-size: x-large;
+}
+
+h2 {
+  color: #990000;
+  font-size: medium;
+}
+
+/* Make the text shrink to fit narrow windows, but not stretch too far in 
+wide windows. */ 
+p,h1,h2,div.content div {
+  max-width: 600px;
+  /* Hack for IE6 */
+  width: auto !important; width: 600px;
+}
+
+pre.codeinput {
+  background: #EEEEEE;
+  padding: 10px;
+}
+ at media print {
+  pre.codeinput {word-wrap:break-word; width:100%;}
+} 
+
+span.keyword {color: #0000FF}
+span.comment {color: #228B22}
+span.string {color: #A020F0}
+span.untermstring {color: #B20000}
+span.syscmd {color: #B28C00}
+
+pre.codeoutput {
+  color: #666666;
+  padding: 10px;
+}
+
+pre.error {
+  color: red;
+}
+
+p.footer {
+  text-align: right;
+  font-size: xx-small;
+  font-weight: lighter;
+  font-style: italic;
+  color: gray;
+}
+
+  </style></head><body><div class="content"><h1>THE FACTORIZE OBJECT for solving linear systems</h1><!--introduction--><p>Copyright 2011-2012, Timothy A. Davis, <a href="http://www.suitesparse.com"><mailto:DrTimothyAldenDavis at gmail.com DrTimothyAldenDavis at gmail.com</a>></p><p>This is a demonstration of the FACTORIZE object for solving linear systems and least-squares problems, and for computations with the matrix inverse and pseudo-inverse.</p><!--/introduction--><h2>Contents</h2>< [...]
+A = rand (3)
+b = rand (3,1)
+x = A\b
+r = b-A*x ;
+norm (r)
+</pre><pre class="codeoutput">A =
+    0.7221    0.6055    0.5715
+    0.1602    0.9760    0.1407
+    0.0346    0.4527    0.2428
+b =
+    0.6253
+    0.4261
+    0.3978
+x =
+   -0.2529
+    0.3238
+    1.0707
+ans =
+     0
+</pre><h2>BACKSLASH versus INV ... let the battle begin<a name="4"></a></h2><p>The backslash operation x=A\b is mathematically the same as x=inv(A)*b. However, backslash is faster and more accurate since it uses a matrix factorization instead of multiplying by the inverse.  Even though your linear algebra textbook might write x=A^(-1)*b as the solution to the system A*x=b, your textbook author never means for you to compute the inverse.</p><p>These next statements give the same answer, s [...]
+x = S*b
+x = A\b
+</pre><pre class="codeoutput">x =
+   -0.2529
+    0.3238
+    1.0707
+x =
+   -0.2529
+    0.3238
+    1.0707
+</pre><p>The big deal is that you should care about speed and you should care even more about accuracy.  BACKSLASH relies on matrix factorization (LU, CHOL, QR, or other specialized methods).  It's faster and more reliable than multiplying by the inverse, particularly for large matrices and sparse matrices.  Here's an illustration of how pathetic inv(A)*b can be.</p><pre class="codeinput">A = gallery (<span class="string">'frank'</span>,16) ; xtrue = ones (16,1) ; b = A*xtrue ;
+
+x = inv(A)*b ; norm (b-A*x)
+x = A\b      ; norm (b-A*x)
+</pre><pre class="codeoutput">ans =
+    0.0145
+ans =
+   1.7764e-15
+</pre><p>The performance difference between BACKSLASH and INV for even small sparse matrices is striking.</p><pre class="codeinput">load <span class="string">west0479</span> ;
+A = west0479 ;
+n = size (A,1)
+b = rand (n,1) ;
+tic ; x = A\b ; toc
+norm (b-A*x)
+tic ; x = inv(A)*b ; toc
+norm (b-A*x)
+</pre><pre class="codeoutput">n =
+   479
+Elapsed time is 0.002701 seconds.
+ans =
+   1.3584e-10
+Elapsed time is 0.118024 seconds.
+ans =
+   2.4936e-09
+</pre><p>What if you want to solve multiple systems?  Use a matrix factorization. But which one?  And how do you use it?  Here are some alternatives using LU for the sparse west0479 matrix, but some are faster than others.</p><pre class="codeinput">tic ; [L,U]     = lu(A) ; x1 = U \ (L \ b)         ; t1=toc ; nz1=nnz(L+U);
+tic ; [L,U,P]   = lu(A) ; x2 = U \ (L \ P*b)       ; t2=toc ; nz2=nnz(L+U);
+tic ; [L,U,P,Q] = lu(A) ; x3 = Q * (U \ (L \ P*b)) ; t3=toc ; nz3=nnz(L+U);
+
+fprintf (<span class="string">'1: nnz(L+U): %5d time: %8.4f resid: %e\n'</span>, nz1,t1, norm(b-A*x1));
+fprintf (<span class="string">'2: nnz(L+U): %5d time: %8.4f resid: %e\n'</span>, nz2,t2, norm(b-A*x2));
+fprintf (<span class="string">'3: nnz(L+U): %5d time: %8.4f resid: %e\n'</span>, nz3,t3, norm(b-A*x3));
+</pre><pre class="codeoutput">1: nnz(L+U): 16151 time:   0.0056 resid: 1.059567e-10
+2: nnz(L+U): 15826 time:   0.0147 resid: 7.104000e-11
+3: nnz(L+U):  3704 time:   0.0051 resid: 6.371471e-11
+</pre><h2>LU and LINSOLVE are fast and accurate but complicated to use<a name="8"></a></h2><p>A quick look at ``help lu'' will scroll off your screen.  For full matrices, [L,U,p] = lu (A,'vector') is fastest.  Then for the forward/backsolves, use LINSOLVE instead of BACKSLASH for even faster performance.  But for sparse matrices, use the optional 'Q' output of LU so you get a good fill-reducing ordering.  But you can't use 'Q' if the matrix is full.  But LINSOLVE doesn't work on sparse m [...]
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+tic ; [L,U,p] = lu (A, <span class="string">'vector'</span>) ; LUtime = toc
+
+tic ; x = U \ (L \ b (p,:)) ;
+      y = U \ (L \ c (p,:)) ; toc
+
+tic ; opL = struct (<span class="string">'LT'</span>, true) ;
+      opU = struct (<span class="string">'UT'</span>, true) ;
+      x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+      y = linsolve (U, linsolve (L, c(p,:), opL), opU) ; toc
+</pre><pre class="codeoutput">LUtime =
+    0.2897
+Elapsed time is 0.013282 seconds.
+Elapsed time is 0.006304 seconds.
+</pre><h2>INV is easy to use, but slow and inaccurate<a name="9"></a></h2><p>Oh bother!  Using LU and LINSOLVE is too complicated.  You just want to solve your system.  Let's just compute inv(A) and use it twice.  Easy to write, but slower and less accurate ...</p><pre class="codeinput">S = inv (A) ;
+x = S*b ; norm (b-A*x)
+y = S*c ; norm (c-A*y)
+</pre><pre class="codeoutput">ans =
+   2.0238e-11
+ans =
+   1.8024e-11
+</pre><p>Sometimes using the inverse seems inevitable.  For example, your textbook might show the Schur complement formula as S = A-B*inv(D)*C.  This can be done without inv(D) in one of two ways: SLASH or BACKSLASH (MRDIVIDE or MLDIVIDE to be precise).</p><p>inv(A)*B and A\B are mathematically equivalent, as are B*inv(A) and B/A, so these three methods give the same results (ignoring computational errors, which are worse for inv(D)).  Only the first equation looks like the equation in y [...]
+
+tic ; S1 = A - B*inv(D)*C ; toc ;
+tic ; S2 = A - B*(D\C) ;    toc ;
+tic ; S3 = A - (B/D)*C ;    toc ;
+</pre><pre class="codeoutput">Elapsed time is 0.019368 seconds.
+Elapsed time is 0.015578 seconds.
+Elapsed time is 0.017005 seconds.
+</pre><h2>So the winner is ... nobody<a name="11"></a></h2><p>BACKSLASH: mostly simple to use (except remember that Schur complement       formula?).  Fast and accurate ... but slow if you want to solve       two linear systems with the same matrix A.</p><p>LU, QR, CHOL: fast and accurate.  Awful syntax to use.  Drag out your       linear algebra textbook if you want to use these in MATLAB.       Whenever I use them I have to derive them from scratch, even       though I <b>wrote</b> mos [...]
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+
+tic ;                       x = A\b ; y = A\c ; toc
+tic ; S = inv(A) ;          x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ;    x = F\b ; y = F\c ; toc
+tic ; S = inverse(A) ;      x = S*b ; y = S*c ; toc
+</pre><pre class="codeoutput">Elapsed time is 0.631824 seconds.
+Elapsed time is 0.790060 seconds.
+Elapsed time is 0.326646 seconds.
+Elapsed time is 0.321894 seconds.
+</pre><h2>Least-squares problems<a name="13"></a></h2><p>Here are some different methods for solving a least-squares problem when your system is over-determined.  The last two methods are the same.</p><pre class="codeinput">A = rand (1000,200) ;
+b = rand (1000,1) ;
+
+tic ; x = A\b            ; toc, norm (A'*A*x-A'*b)
+tic ; x = pinv(A)*b      ; toc, norm (A'*A*x-A'*b)
+tic ; x = inverse(A)*b   ; toc, norm (A'*A*x-A'*b)
+tic ; x = factorize(A)\b ; toc, norm (A'*A*x-A'*b)
+</pre><pre class="codeoutput">Elapsed time is 0.056806 seconds.
+ans =
+   1.9098e-12
+Elapsed time is 0.340721 seconds.
+ans =
+   2.0025e-12
+Elapsed time is 0.079824 seconds.
+ans =
+   2.6834e-12
+Elapsed time is 0.078512 seconds.
+ans =
+   2.6834e-12
+</pre><p>FACTORIZE is better than BACKSLASH because you can reuse the factorization for different right-hand-sides.  For full-rank matrices, it's better than PINV because it's faster (and PINV fails for sparse matrices).</p><pre class="codeinput">A = rand (1000,200) ;
+b = rand (1000,1) ;
+c = rand (1000,1) ;
+
+tic ;                  ; x = A\b ; y = A\c ; toc
+tic ; S = pinv(A)      ; x = S*b ; y = S*c ; toc
+tic ; S = inverse(A)   ; x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ; x = F\b ; y = F\c ; toc
+</pre><pre class="codeoutput">Elapsed time is 0.112498 seconds.
+Elapsed time is 0.341902 seconds.
+Elapsed time is 0.080206 seconds.
+Elapsed time is 0.082501 seconds.
+</pre><h2>Underdetermined systems<a name="15"></a></h2><p>The under-determined system A*x=b where A has more columns than rows has many solutions.  x=A\b finds a basic solution (some of the entries in x are zero).  pinv(A)*b finds a minimum 2-norm solution, but it's slow.  QR factorization will do the same if A has full rank.  That's what the factorize(A) and inverse(A) methods do.</p><pre class="codeinput">A = rand (200,1000) ;
+b = rand (200,1) ;
+
+tic ; x = A\b            ; toc, norm (x)
+tic ; x = pinv(A)*b      ; toc, norm (x)
+tic ; x = inverse(A)*b   ; toc, norm (x)
+tic ; x = factorize(A)\b ; toc, norm (x)
+</pre><pre class="codeoutput">Elapsed time is 0.075132 seconds.
+ans =
+    3.9615
+Elapsed time is 0.344866 seconds.
+ans =
+    0.5288
+Elapsed time is 0.082219 seconds.
+ans =
+    0.5288
+Elapsed time is 0.081563 seconds.
+ans =
+    0.5288
+</pre><h2>Computing selected entries in the inverse or pseudo-inverse<a name="16"></a></h2><p>If you want just a few entries from the inverse, it's still better to formulate the problem as a system of linear equations and use a matrix factorization instead of computing inv(A).  The FACTORIZE object does this for you, by overloading the subsref operator.</p><pre class="codeinput">A = rand (1000) ;
+
+tic ; S = inv (A)     ; S (2:3,4), toc
+tic ; S = inverse (A) ; S (2:3,4), toc
+</pre><pre class="codeoutput">ans =
+    0.0622
+   -0.0401
+Elapsed time is 0.788354 seconds.
+ans =
+    0.0622
+   -0.0401
+Elapsed time is 0.325303 seconds.
+</pre><h2>Computing the entire inverse or pseudo-inverse<a name="17"></a></h2><p>Rarely, and I mean RARELY, you really do need the inverse.  More frequently what you want is the pseudo-inverse.  You can force a factorization to become a plain matrix by converting it to double.  Note that inverse(A) only handles full-rank matrices (either dense or sparse), whereas pinv(A) works for all dense matrices (not sparse).</p><p>The explicit need for inv(A) (or S=A\eye(n), which is the same thing) [...]
+tic ; S1 = inv (A) ;            ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+
+A = rand (500,400) ;
+tic ; S1 = pinv (A)             ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+</pre><pre class="codeoutput">Elapsed time is 0.105186 seconds.
+Elapsed time is 0.146987 seconds.
+ans =
+   3.1250e-13
+Elapsed time is 1.685084 seconds.
+Elapsed time is 0.212152 seconds.
+ans =
+   3.5864e-14
+</pre><h2>Update/downdate of a dense Cholesky factorization<a name="18"></a></h2><p>Wilkinson considered the update/downdate of a matrix factorization to be a key problem in computational linear algebra.  The idea is that you first factorize a matrix.  Next, make a low-rank change to A, and patch up (or down...) the factorization so that it becomes the factorization of the new matrix.  In MATLAB, this only works for dense symmetric positive definite matrices, via cholupdate.  This is muc [...]
+A = rand (n) ;
+A = A*A' + n*eye (n) ;
+w = rand (n,1) ; t = rand (n,1) ; b = rand (n,1) ;
+F = factorize (A) ;
+
+tic ; F = cholupdate (F,w,<span class="string">'+'</span>) ; x = F\b ; toc
+tic ; y = (A+w*w')\b ;      toc
+norm (x-y)
+
+tic ; F = cholupdate (F,t,<span class="string">'-'</span>) ; x = F\b ; toc
+tic ; y = (A+w*w'-t*t')\b ; toc
+norm (x-y)
+</pre><pre class="codeoutput">Elapsed time is 0.035651 seconds.
+Elapsed time is 0.197350 seconds.
+ans =
+   3.4517e-17
+Elapsed time is 0.037860 seconds.
+Elapsed time is 0.203125 seconds.
+ans =
+   3.5007e-17
+</pre><h2>Caveat Executor<a name="19"></a></h2><p>One caveat:  If you have a large number of very small systems to solve, the object-oriented overhead of creating and using an object can dominate the run time, at least in MATLAB R2011a.  For this case, if you want the best performance, stick with BACKSLASH, or LU and LINSOLVE (just extract the appropriate formulas from the M-files in the FACTORIZE package).</p><p>Hopefully the object-oriented overhead will drop in future versions of MATL [...]
+
+tic ; <span class="keyword">for</span> k = 1:10000, x = F\b ; <span class="keyword">end</span> ; toc
+
+tic ; <span class="keyword">for</span> k = 1:10000, x = A\b ; <span class="keyword">end</span> ; toc
+
+[L,U,p] = lu (A, <span class="string">'vector'</span>) ;
+opL = struct (<span class="string">'LT'</span>, true) ;
+opU = struct (<span class="string">'UT'</span>, true) ;
+tic ;
+<span class="keyword">for</span> k = 1:10000
+    x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+<span class="keyword">end</span>
+toc
+</pre><pre class="codeoutput">Elapsed time is 2.953968 seconds.
+Elapsed time is 0.350816 seconds.
+Elapsed time is 0.125989 seconds.
+</pre><h2>Summary<a name="20"></a></h2><p>So ... don't use INV, and don't worry about how to use LU, CHOL, or QR factorization.  Just install the FACTORIZE package, and you're on your way.  Assuming you are now in the Factorize/ directory, cut-and-paste these commands into your command window:</p><pre> addpath (pwd)
+ savepath</pre><p>And remember ...</p><p>"Don't let that INV go past your eyes; to solve that system, FACTORIZE!"</p><p class="footer"><br>
+      Published with MATLAB® 7.9<br></p></div><!--
+##### SOURCE BEGIN #####
+%% THE FACTORIZE OBJECT for solving linear systems
+%
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+% DrTimothyAldenDavis at gmail.com
+%
+% This is a demonstration of the FACTORIZE object for solving linear
+% systems and least-squares problems, and for computations with the
+% matrix inverse and pseudo-inverse.
+
+%% Rule Number One: never multiply by the inverse, inv(A)
+%
+% Use backslash or a matrix factorization instead (LU, CHOL, or QR).
+
+%% Rule Number Two:  never break Rule Number One
+%
+% However, the problem with Rule Number One is that it can be hard to
+% figure out which matrix factorization to use and how to use it.  Using
+% LU, CHOL, or QR is complicated, particularly if you want the best
+% performance.  BACKSLASH (MLDIVIDE) is great, but it can't be reused when
+% solving multiple systems (x=A\b and y=A\c).  Its syntax doesn't match
+% the use of the inverse in mathematical expressions, either.
+%
+% The goal of the FACTORIZE object is to solve this problem ...
+%
+% "Don't let that INV go past your eyes; to solve that system, FACTORIZE!"
+
+%% How to use BACKSLASH to solve A*x=b
+%
+% First, let's create a square matrix A and a right-hand-side b for a
+% linear system A*x=b.  There are many ways to solve this system.  The
+% best way is to use x=A\b.  The residual r is a vector of what's left
+% over in each equation, and its norm tells you how accurately the system
+% was solved.
+
+format compact ;
+A = rand (3)
+b = rand (3,1)
+x = A\b
+r = b-A*x ;
+norm (r)
+
+%% BACKSLASH versus INV ... let the battle begin
+%
+% The backslash operation x=A\b is mathematically the same as x=inv(A)*b.
+% However, backslash is faster and more accurate since it uses a matrix
+% factorization instead of multiplying by the inverse.  Even though your
+% linear algebra textbook might write x=A^(-1)*b as the solution to the
+% system A*x=b, your textbook author never means for you to compute the
+% inverse.
+%
+% These next statements give the same answer, so what's the big deal?
+
+S = inv(A) ;
+x = S*b
+x = A\b
+
+%%
+% The big deal is that you should care about speed and you should care even
+% more about accuracy.  BACKSLASH relies on matrix factorization (LU, CHOL,
+% QR, or other specialized methods).  It's faster and more reliable than
+% multiplying by the inverse, particularly for large matrices and sparse
+% matrices.  Here's an illustration of how pathetic inv(A)*b can be.
+
+A = gallery ('frank',16) ; xtrue = ones (16,1) ; b = A*xtrue ;
+
+x = inv(A)*b ; norm (b-A*x)
+x = A\b      ; norm (b-A*x)
+
+%%
+% The performance difference between BACKSLASH and INV for even small
+% sparse matrices is striking.
+
+load west0479 ;
+A = west0479 ;
+n = size (A,1)
+b = rand (n,1) ;
+tic ; x = A\b ; toc
+norm (b-A*x)
+tic ; x = inv(A)*b ; toc
+norm (b-A*x)
+
+%%
+% What if you want to solve multiple systems?  Use a matrix factorization.
+% But which one?  And how do you use it?  Here are some alternatives using
+% LU for the sparse west0479 matrix, but some are faster than others.
+
+tic ; [L,U]     = lu(A) ; x1 = U \ (L \ b)         ; t1=toc ; nz1=nnz(L+U);
+tic ; [L,U,P]   = lu(A) ; x2 = U \ (L \ P*b)       ; t2=toc ; nz2=nnz(L+U);
+tic ; [L,U,P,Q] = lu(A) ; x3 = Q * (U \ (L \ P*b)) ; t3=toc ; nz3=nnz(L+U);
+
+fprintf ('1: nnz(L+U): %5d time: %8.4f resid: %e\n', nz1,t1, norm(b-A*x1));
+fprintf ('2: nnz(L+U): %5d time: %8.4f resid: %e\n', nz2,t2, norm(b-A*x2));
+fprintf ('3: nnz(L+U): %5d time: %8.4f resid: %e\n', nz3,t3, norm(b-A*x3));
+
+%% LU and LINSOLVE are fast and accurate but complicated to use
+%
+% A quick look at ``help lu'' will scroll off your screen.  For full
+% matrices, [L,U,p] = lu (A,'vector') is fastest.  Then for the
+% forward/backsolves, use LINSOLVE instead of BACKSLASH for even faster
+% performance.  But for sparse matrices, use the optional 'Q' output of LU
+% so you get a good fill-reducing ordering.  But you can't use 'Q' if the
+% matrix is full.  But LINSOLVE doesn't work on sparse matrices.
+%
+% But ... Ack!  That's getting complicated ...
+%
+% Here's the best way to solve A*x=b and A*y=c when A is full and
+% unsymmetric:
+
+n = 1000 ;
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+tic ; [L,U,p] = lu (A, 'vector') ; LUtime = toc
+
+tic ; x = U \ (L \ b (p,:)) ;
+      y = U \ (L \ c (p,:)) ; toc
+
+tic ; opL = struct ('LT', true) ;
+      opU = struct ('UT', true) ;
+      x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+      y = linsolve (U, linsolve (L, c(p,:), opL), opU) ; toc
+
+%% INV is easy to use, but slow and inaccurate
+%
+% Oh bother!  Using LU and LINSOLVE is too complicated.  You just want to
+% solve your system.  Let's just compute inv(A) and use it twice.  Easy to
+% write, but slower and less accurate ...
+
+S = inv (A) ;
+x = S*b ; norm (b-A*x)
+y = S*c ; norm (c-A*y)
+
+%%
+% Sometimes using the inverse seems inevitable.  For example, your textbook
+% might show the Schur complement formula as S = A-B*inv(D)*C.  This can be
+% done without inv(D) in one of two ways: SLASH or BACKSLASH (MRDIVIDE or
+% MLDIVIDE to be precise).
+%
+% inv(A)*B and A\B are mathematically equivalent, as are B*inv(A) and B/A,
+% so these three methods give the same results (ignoring computational
+% errors, which are worse for inv(D)).  Only the first equation looks like
+% the equation in your textbook, however.
+
+A = rand (200) ; B = rand (200) ; C = rand (200) ; D = rand (200) ;
+
+tic ; S1 = A - B*inv(D)*C ; toc ;
+tic ; S2 = A - B*(D\C) ;    toc ;
+tic ; S3 = A - (B/D)*C ;    toc ;
+
+%% So the winner is ... nobody
+%
+% BACKSLASH: mostly simple to use (except remember that Schur complement
+%       formula?).  Fast and accurate ... but slow if you want to solve
+%       two linear systems with the same matrix A.
+%
+% LU, QR, CHOL: fast and accurate.  Awful syntax to use.  Drag out your
+%       linear algebra textbook if you want to use these in MATLAB.
+%       Whenever I use them I have to derive them from scratch, even
+%       though I *wrote* most of the sparse factorizations used in MATLAB!
+%
+% INV: slow and inaccurate.  Wins big on ease-of-use, though, since it's a
+%       direct plug-in for all your nice mathematical formulas.
+%
+% No method is best on all three criterion: speed, accuracy, and ease of
+% use.
+%
+% Is there a solution?  Yes ... keeping reading ...
+
+%% The FACTORIZE object to the rescue
+%
+% The FACTORIZE method is just as easy to use as INV, but just as fast and
+% accurate as BACKSLASH, LU, QR, CHOL, and LINSOLVE.
+%
+% F = factorize(A) computes the factorization of A and returns it as an
+% object that you can reuse to solve a linear system with x=F\b.  It picks
+% LU, QR, or Cholesky for you, just like BACKSLASH.
+%
+% S = inverse(A) is simpler yet.  It does NOT compute inv(A), but
+% factorizes A.  When multiplying S*b, it doesn't mulitply by the inverse,
+% but uses the correct forward/backsolve equations to solve the linear
+% system.
+
+n = 1000 ;
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+
+tic ;                       x = A\b ; y = A\c ; toc
+tic ; S = inv(A) ;          x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ;    x = F\b ; y = F\c ; toc
+tic ; S = inverse(A) ;      x = S*b ; y = S*c ; toc
+
+%% Least-squares problems
+%
+% Here are some different methods for solving a least-squares problem when
+% your system is over-determined.  The last two methods are the same.
+
+A = rand (1000,200) ;
+b = rand (1000,1) ;
+
+tic ; x = A\b            ; toc, norm (A'*A*x-A'*b)
+tic ; x = pinv(A)*b      ; toc, norm (A'*A*x-A'*b)
+tic ; x = inverse(A)*b   ; toc, norm (A'*A*x-A'*b)
+tic ; x = factorize(A)\b ; toc, norm (A'*A*x-A'*b)
+
+%%
+% FACTORIZE is better than BACKSLASH because you can reuse the
+% factorization for different right-hand-sides.  For full-rank matrices,
+% it's better than PINV because it's faster (and PINV fails for sparse
+% matrices).
+
+A = rand (1000,200) ;
+b = rand (1000,1) ;
+c = rand (1000,1) ;
+
+tic ;                  ; x = A\b ; y = A\c ; toc
+tic ; S = pinv(A)      ; x = S*b ; y = S*c ; toc
+tic ; S = inverse(A)   ; x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ; x = F\b ; y = F\c ; toc
+
+%% Underdetermined systems
+%
+% The under-determined system A*x=b where A has more columns than rows has
+% many solutions.  x=A\b finds a basic solution (some of the entries in x
+% are zero).  pinv(A)*b finds a minimum 2-norm solution, but it's slow.  QR
+% factorization will do the same if A has full rank.  That's what the
+% factorize(A) and inverse(A) methods do.
+
+A = rand (200,1000) ;
+b = rand (200,1) ;
+
+tic ; x = A\b            ; toc, norm (x)
+tic ; x = pinv(A)*b      ; toc, norm (x)
+tic ; x = inverse(A)*b   ; toc, norm (x)
+tic ; x = factorize(A)\b ; toc, norm (x)
+
+%% Computing selected entries in the inverse or pseudo-inverse
+%
+% If you want just a few entries from the inverse, it's still better to
+% formulate the problem as a system of linear equations and use a matrix
+% factorization instead of computing inv(A).  The FACTORIZE object does
+% this for you, by overloading the subsref operator.
+
+A = rand (1000) ;
+
+tic ; S = inv (A)     ; S (2:3,4), toc
+tic ; S = inverse (A) ; S (2:3,4), toc
+
+%% Computing the entire inverse or pseudo-inverse
+%
+% Rarely, and I mean RARELY, you really do need the inverse.  More
+% frequently what you want is the pseudo-inverse.  You can force a
+% factorization to become a plain matrix by converting it to double.  Note
+% that inverse(A) only handles full-rank matrices (either dense or
+% sparse), whereas pinv(A) works for all dense matrices (not sparse).
+%
+% The explicit need for inv(A) (or S=A\eye(n), which is the same thing) is
+% RARE.  If you ever find yourself multiplying by the inverse, then you
+% know one thing for sure.  You know with certainty that you don't know
+% what you're doing.
+
+A = rand (500) ;
+tic ; S1 = inv (A) ;            ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+
+A = rand (500,400) ;
+tic ; S1 = pinv (A)             ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+
+%% Update/downdate of a dense Cholesky factorization
+%
+% Wilkinson considered the update/downdate of a matrix factorization to be
+% a key problem in computational linear algebra.  The idea is that you
+% first factorize a matrix.  Next, make a low-rank change to A, and patch
+% up (or down...) the factorization so that it becomes the factorization of
+% the new matrix.  In MATLAB, this only works for dense symmetric positive
+% definite matrices, via cholupdate.  This is much faster than computing
+% the new factorization from scratch.
+
+n = 1000 ;
+A = rand (n) ;
+A = A*A' + n*eye (n) ;
+w = rand (n,1) ; t = rand (n,1) ; b = rand (n,1) ;
+F = factorize (A) ;
+
+tic ; F = cholupdate (F,w,'+') ; x = F\b ; toc
+tic ; y = (A+w*w')\b ;      toc
+norm (x-y)
+
+tic ; F = cholupdate (F,t,'-') ; x = F\b ; toc
+tic ; y = (A+w*w'-t*t')\b ; toc
+norm (x-y)
+
+%% Caveat Executor
+%
+% One caveat:  If you have a large number of very small systems to solve,
+% the object-oriented overhead of creating and using an object can dominate
+% the run time, at least in MATLAB R2011a.  For this case, if you want the
+% best performance, stick with BACKSLASH, or LU and LINSOLVE (just extract
+% the appropriate formulas from the M-files in the FACTORIZE package).
+%
+% Hopefully the object-oriented overhead will drop in future versions of
+% MATLAB, and you can ignore this caveat.
+
+A = rand (10) ; b = rand (10,1) ; F = factorize (A) ;
+
+tic ; for k = 1:10000, x = F\b ; end ; toc
+
+tic ; for k = 1:10000, x = A\b ; end ; toc
+
+[L,U,p] = lu (A, 'vector') ;
+opL = struct ('LT', true) ;
+opU = struct ('UT', true) ;
+tic ; 
+for k = 1:10000
+    x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+end
+toc
+
+%% Summary
+%
+% So ... don't use INV, and don't worry about how to use LU, CHOL, or QR
+% factorization.  Just install the FACTORIZE package, and you're on your
+% way.  Assuming you are now in the Factorize/ directory, cut-and-paste
+% these commands into your command window:
+%
+%   addpath (pwd)
+%   savepath
+%
+% And remember ...
+%
+% "Don't let that INV go past your eyes; to solve that system, FACTORIZE!"
+
+
+##### SOURCE END #####
+--></body></html>
\ No newline at end of file
diff --git a/MATLAB_Tools/Factorize/Doc/factorize_demo.pdf b/MATLAB_Tools/Factorize/Doc/factorize_demo.pdf
new file mode 100644
index 0000000..21df755
Binary files /dev/null and b/MATLAB_Tools/Factorize/Doc/factorize_demo.pdf differ
diff --git a/MATLAB_Tools/Factorize/Doc/factorize_demo.tex b/MATLAB_Tools/Factorize/Doc/factorize_demo.tex
new file mode 100644
index 0000000..9926cc5
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Doc/factorize_demo.tex
@@ -0,0 +1,590 @@
+
+% This LaTeX was auto-generated from an M-file by MATLAB.
+% To make changes, update the M-file and republish this document.
+
+\documentclass{article}
+\usepackage{graphicx}
+\usepackage{color}
+
+\sloppy
+\definecolor{lightgray}{gray}{0.5}
+\setlength{\parindent}{0pt}
+
+\begin{document}
+
+    
+    
+\section*{THE FACTORIZE OBJECT for solving linear systems}
+
+\begin{par}
+Copyright 2011-2012, Timothy A. Davis,
+\begin{verbatim}http://www.suitesparse.com\end{verbatim}
+\begin{verbatim}DrTimothyAldenDavis at gmail.com\end{verbatim} \end{par}
+\vspace{1em}
+\begin{par}
+This is a demonstration of the FACTORIZE object for solving linear systems and
+least-squares problems, and for computations with the matrix inverse and
+pseudo-inverse.
+\end{par} \vspace{1em}
+
+\subsection*{Contents}
+
+\begin{itemize}
+\setlength{\itemsep}{-1ex}
+   \item Rule Number One: never multiply by the inverse, inv(A)
+   \item Rule Number Two:  never break Rule Number One
+   \item How to use BACKSLASH solve A*x=b
+   \item BACKSLASH versus INV ... let the battle begin
+   \item LU and LINSOLVE are fast and accurate but complicated to use
+   \item INV is easy to use, but slow and inaccurate
+   \item So the winner is ... nobody
+   \item The FACTORIZE object to the rescue
+   \item Least-squares problems
+   \item Underdetermined systems
+   \item Computing selected entries in the inverse or pseudo-inverse
+   \item Computing the entire inverse or pseudo-inverse
+   \item Update/downdate of a dense Cholesky factorization
+   \item Caveat Executor
+   \item Summary
+\end{itemize}
+
+
+\subsection*{Rule Number One: never multiply by the inverse, inv(A)}
+
+\begin{par}
+Use backslash or a matrix factorization instead (LU, CHOL, or QR).
+\end{par} \vspace{1em}
+
+
+\subsection*{Rule Number Two:  never break Rule Number One}
+
+\begin{par}
+However, the problem with Rule Number One is that it can be hard to figure out
+which matrix factorization to use and how to use it.  Using LU, CHOL, or QR is
+complicated, particularly if you want the best performance.  BACKSLASH
+(MLDIVIDE) is great, but it can't be reused when solving multiple systems
+(x=A\ensuremath{\backslash}b and y=A\ensuremath{\backslash}c).  Its syntax
+doesn't match the use of the inverse in mathematical expressions, either.
+\end{par} \vspace{1em}
+\begin{par}
+The goal of the FACTORIZE object is to solve this problem ...
+\end{par} \vspace{1em}
+\begin{par}
+"Don't let that INV go past your eyes; to solve that system, FACTORIZE!"
+\end{par} \vspace{1em}
+
+
+\subsection*{How to use BACKSLASH solve A*x=b}
+
+\begin{par}
+First, let's create a square matrix A and a right-hand-side b for a linear
+system A*x=b.  There are many ways to solve this system.  The best way is to
+use x=A\ensuremath{\backslash}b.  The residual r is a vector of what's left
+over in each equation, and its norm tells you how accurately the system was
+solved.
+\end{par} \vspace{1em}
+\begin{verbatim}
+format compact ;
+A = rand (3)
+b = rand (3,1)
+x = A\b
+r = b-A*x ;
+norm (r)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}A =
+    0.2748    0.2719    0.3696
+    0.2217    0.8329    0.5006
+    0.9315    0.5791    0.0753
+b =
+    0.1293
+    0.9138
+    0.4589
+x =
+   -0.3827
+    1.4657
+   -0.4437
+ans =
+   1.2413e-16
+\end{verbatim} \color{black}
+    
+
+\subsection*{BACKSLASH versus INV ... let the battle begin}
+
+\begin{par}
+The backslash operation x=A\ensuremath{\backslash}b is mathematically the same
+as x=inv(A)*b. However, backslash is faster and more accurate since it uses a
+matrix factorization instead of multiplying by the inverse.  Even though your
+linear algebra textbook might write x=A\^{}(-1)*b as the solution to the system
+A*x=b, your textbook author never means for you to compute the inverse.
+\end{par} \vspace{1em}
+\begin{par}
+These next statements give the same answer, so what's the big deal?
+\end{par} \vspace{1em}
+\begin{verbatim}
+S = inv(A) ;
+x = S*b
+x = A\b
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}x =
+   -0.3827
+    1.4657
+   -0.4437
+x =
+   -0.3827
+    1.4657
+   -0.4437
+\end{verbatim} \color{black}
+    \begin{par}
+The big deal is that you should care about speed and you should care even more
+about accuracy.  BACKSLASH relies on matrix factorization (LU, CHOL, QR, or
+other specialized methods).  It's faster and more reliable than multiplying by
+the inverse, particularly for large matrices and sparse matrices.  Here's an
+illustration of how pathetic inv(A)*b can be.
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = gallery ('frank',16) ; xtrue = ones (16,1) ; b = A*xtrue ;
+
+x = inv(A)*b ; norm (b-A*x)
+x = A\b      ; norm (b-A*x)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}ans =
+    0.0606
+ans =
+   1.7764e-15
+\end{verbatim} \color{black}
+    \begin{par}
+The performance difference between BACKSLASH and INV for even small sparse
+matrices is striking.
+\end{par} \vspace{1em}
+\begin{verbatim}
+load west0479 ;
+A = west0479 ;
+n = size (A,1)
+b = rand (n,1) ;
+tic ; x = A\b ; toc
+norm (b-A*x)
+tic ; x = inv(A)*b ; toc
+norm (b-A*x)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}n =
+   479
+Elapsed time is 0.002425 seconds.
+ans =
+   1.9174e-10
+Elapsed time is 0.041780 seconds.
+ans =
+   3.4438e-09
+\end{verbatim} \color{black}
+    \begin{par}
+What if you want to solve multiple systems?  Use a matrix factorization. But
+which one?  And how do you use it?  Here are some alternatives using LU for the
+sparse west0479 matrix, but some are faster than others.
+\end{par} \vspace{1em}
+\begin{verbatim}
+tic ; [L,U]     = lu(A) ; x1 = U \ (L \ b)         ; t1=toc ; nz1=nnz(L+U);
+tic ; [L,U,P]   = lu(A) ; x2 = U \ (L \ P*b)       ; t2=toc ; nz2=nnz(L+U);
+tic ; [L,U,P,Q] = lu(A) ; x3 = Q * (U \ (L \ P*b)) ; t3=toc ; nz3=nnz(L+U);
+
+fprintf ('1: nnz(L+U): %5d time: %8.4f resid: %e\n', nz1,t1, norm(b-A*x1));
+fprintf ('2: nnz(L+U): %5d time: %8.4f resid: %e\n', nz2,t2, norm(b-A*x2));
+fprintf ('3: nnz(L+U): %5d time: %8.4f resid: %e\n', nz3,t3, norm(b-A*x3));
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}1: nnz(L+U): 16151 time:   0.0031 resid: 1.346712e-10
+2: nnz(L+U): 15826 time:   0.0081 resid: 1.757002e-10
+3: nnz(L+U):  3704 time:   0.0017 resid: 1.691750e-10
+\end{verbatim} \color{black}
+    
+
+\subsection*{LU and LINSOLVE are fast and accurate but complicated to use}
+
+\begin{par}
+A quick look at ``help lu'' will scroll off your screen.  For full matrices,
+[L,U,p] = lu (A,'vector') is fastest.  Then for the forward/backsolves, use
+LINSOLVE instead of BACKSLASH for even faster performance.  But for sparse
+matrices, use the optional 'Q' output of LU so you get a good fill-reducing
+ordering.  But you can't use 'Q' if the matrix is full.  But LINSOLVE doesn't
+work on sparse matrices.
+\end{par} \vspace{1em}
+\begin{par}
+But ... Ack!  That's getting complicated ...
+\end{par} \vspace{1em}
+\begin{par}
+Here's the best way to solve A*x=b and A*y=c when A is full and unsymmetric:
+\end{par} \vspace{1em}
+\begin{verbatim}
+n = 1000 ;
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+tic ; [L,U,p] = lu (A, 'vector') ; LUtime = toc
+
+tic ; x = U \ (L \ b (p,:)) ;
+      y = U \ (L \ c (p,:)) ; toc
+
+tic ; opL = struct ('LT', true) ;
+      opU = struct ('UT', true) ;
+      x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+      y = linsolve (U, linsolve (L, c(p,:), opL), opU) ; toc
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}LUtime =
+    0.0155
+Elapsed time is 0.004917 seconds.
+Elapsed time is 0.002092 seconds.
+\end{verbatim} \color{black}
+    
+
+\subsection*{INV is easy to use, but slow and inaccurate}
+
+\begin{par}
+Oh bother!  Using LU and LINSOLVE is too complicated.  You just want to solve
+your system.  Let's just compute inv(A) and use it twice.  Easy to write, but
+slower and less accurate ...
+\end{par} \vspace{1em}
+\begin{verbatim}
+S = inv (A) ;
+x = S*b ; norm (b-A*x)
+y = S*c ; norm (c-A*y)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}ans =
+   2.3292e-11
+ans =
+   1.7292e-11
+\end{verbatim} \color{black}
+    \begin{par}
+Sometimes using the inverse seems inevitable.  For example, your textbook might
+show the Schur complement formula as S = A-B*inv(D)*C.  This can be done
+without inv(D) in one of two ways: SLASH or BACKSLASH (MRDIVIDE or MLDIVIDE to
+be precise).
+\end{par} \vspace{1em}
+\begin{par}
+inv(A)*B and A\ensuremath{\backslash}B are mathematically equivalent, as are
+B*inv(A) and B/A, so these three methods give the same results (ignoring
+computational errors, which are worse for inv(D)).  Only the first equation
+looks like the equation in your textbook, however.
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = rand (200) ; B = rand (200) ; C = rand (200) ; D = rand (200) ;
+
+tic ; S1 = A - B*inv(D)*C ; toc ;
+tic ; S2 = A - B*(D\C) ;    toc ;
+tic ; S3 = A - (B/D)*C ;    toc ;
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 0.002398 seconds.
+Elapsed time is 0.001632 seconds.
+Elapsed time is 0.001474 seconds.
+\end{verbatim} \color{black}
+    
+
+\subsection*{So the winner is ... nobody}
+
+\begin{par}
+BACKSLASH: mostly simple to use (except remember that Schur complement
+formula?).  Fast and accurate ... but slow if you want to solve       two
+linear systems with the same matrix A.
+\end{par} \vspace{1em}
+\begin{par}
+LU, QR, CHOL: fast and accurate.  Awful syntax to use.  Drag out your
+linear algebra textbook if you want to use these in MATLAB.       Whenever I
+use them I have to derive them from scratch, even       though I \textbf{wrote}
+most of the sparse factorizations used in MATLAB!
+\end{par} \vspace{1em}
+\begin{par}
+INV: slow and inaccurate.  Wins big on ease-of-use, though, since it's a
+direct plug-in for all your nice mathematical formulas.
+\end{par} \vspace{1em}
+\begin{par}
+No method is best on all three criterion: speed, accuracy, and ease of use.
+\end{par} \vspace{1em}
+\begin{par}
+Is there a solution?  Yes ... keeping reading ...
+\end{par} \vspace{1em}
+
+
+\subsection*{The FACTORIZE object to the rescue}
+
+\begin{par}
+The FACTORIZE method is just as easy to use as INV, but just as fast and
+accurate as BACKSLASH, LU, QR, CHOL, and LINSOLVE.
+\end{par} \vspace{1em}
+\begin{par}
+F = factorize(A) computes the factorization of A and returns it as an object
+that you can reuse to solve a linear system with x=F\ensuremath{\backslash}b.
+It picks LU, QR, or Cholesky for you, just like BACKSLASH.
+\end{par} \vspace{1em}
+\begin{par}
+S = inverse(A) is simpler yet.  It does NOT compute inv(A), but factorizes A.
+When multiplying S*b, it doesn't mulitply by the inverse, but uses the correct
+forward/backsolve equations to solve the linear system.
+\end{par} \vspace{1em}
+\begin{verbatim}
+n = 1000 ;
+A = rand (n) ;
+b = rand (n,1) ;
+c = rand (n,1) ;
+
+tic ;                       x = A\b ; y = A\c ; toc
+tic ; S = inv(A) ;          x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ;    x = F\b ; y = F\c ; toc
+tic ; S = inverse(A) ;      x = S*b ; y = S*c ; toc
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 0.051483 seconds.
+Elapsed time is 0.053813 seconds.
+Elapsed time is 0.025811 seconds.
+Elapsed time is 0.029840 seconds.
+\end{verbatim} \color{black}
+    
+
+\subsection*{Least-squares problems}
+
+\begin{par}
+Here are some different methods for solving a least-squares problem when your
+system is over-determined.  The last two methods are the same.
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = rand (1000,200) ;
+b = rand (1000,1) ;
+
+tic ; x = A\b            ; toc, norm (A'*A*x-A'*b)
+tic ; x = pinv(A)*b      ; toc, norm (A'*A*x-A'*b)
+tic ; x = inverse(A)*b   ; toc, norm (A'*A*x-A'*b)
+tic ; x = factorize(A)\b ; toc, norm (A'*A*x-A'*b)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 0.010705 seconds.
+ans =
+   2.7575e-12
+Elapsed time is 0.025339 seconds.
+ans =
+   2.3477e-12
+Elapsed time is 0.008903 seconds.
+ans =
+   2.5140e-12
+Elapsed time is 0.008408 seconds.
+ans =
+   2.5140e-12
+\end{verbatim} \color{black}
+    \begin{par}
+FACTORIZE is better than BACKSLASH because you can reuse the factorization for
+different right-hand-sides.  For full-rank matrices, it's better than PINV
+because it's faster (and PINV fails for sparse matrices).
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = rand (1000,200) ;
+b = rand (1000,1) ;
+c = rand (1000,1) ;
+
+tic ;                  ; x = A\b ; y = A\c ; toc
+tic ; S = pinv(A)      ; x = S*b ; y = S*c ; toc
+tic ; S = inverse(A)   ; x = S*b ; y = S*c ; toc
+tic ; F = factorize(A) ; x = F\b ; y = F\c ; toc
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 0.021934 seconds.
+Elapsed time is 0.027198 seconds.
+Elapsed time is 0.009692 seconds.
+Elapsed time is 0.010197 seconds.
+\end{verbatim} \color{black}
+    
+
+\subsection*{Underdetermined systems}
+
+\begin{par}
+The under-determined system A*x=b where A has more columns than rows has many
+solutions.  x=A\ensuremath{\backslash}b finds a basic solution (some of the
+entries in x are zero).  pinv(A)*b finds a minimum 2-norm solution, but it's
+slow.  QR factorization will do the same if A has full rank.  That's what the
+factorize(A) and inverse(A) methods do.
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = rand (200,1000) ;
+b = rand (200,1) ;
+
+tic ; x = A\b            ; toc, norm (x)
+tic ; x = pinv(A)*b      ; toc, norm (x)
+tic ; x = inverse(A)*b   ; toc, norm (x)
+tic ; x = factorize(A)\b ; toc, norm (x)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 0.016247 seconds.
+ans =
+    2.5580
+Elapsed time is 0.034924 seconds.
+ans =
+    0.5154
+Elapsed time is 0.012460 seconds.
+ans =
+    0.5154
+Elapsed time is 0.009924 seconds.
+ans =
+    0.5154
+\end{verbatim} \color{black}
+    
+
+\subsection*{Computing selected entries in the inverse or pseudo-inverse}
+
+\begin{par}
+If you want just a few entries from the inverse, it's still better to formulate
+the problem as a system of linear equations and use a matrix factorization
+instead of computing inv(A).  The FACTORIZE object does this for you, by
+overloading the subsref operator.
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = rand (1000) ;
+
+tic ; S = inv (A)     ; S (2:3,4), toc
+tic ; S = inverse (A) ; S (2:3,4), toc
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}ans =
+   -0.2554
+    0.0993
+Elapsed time is 0.047095 seconds.
+ans =
+   -0.2554
+    0.0993
+Elapsed time is 0.030233 seconds.
+\end{verbatim} \color{black}
+    
+
+\subsection*{Computing the entire inverse or pseudo-inverse}
+
+\begin{par}
+Rarely, and I mean RARELY, you really do need the inverse.  More frequently
+what you want is the pseudo-inverse.  You can force a factorization to become a
+plain matrix by converting it to double.  Note that inverse(A) only handles
+full-rank matrices (either dense or sparse), whereas pinv(A) works for all
+dense matrices (not sparse).
+\end{par} \vspace{1em}
+\begin{par}
+The explicit need for inv(A) (or S=A\ensuremath{\backslash}eye(n), which is the
+same thing) is RARE.  If you ever find yourself multiplying by the inverse,
+then you know one thing for sure.  You know with certainty that you don't know
+what you're doing.
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = rand (500) ;
+tic ; S1 = inv (A) ;            ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+
+A = rand (500,400) ;
+tic ; S1 = pinv (A)             ; toc
+tic ; S2 = double (inverse (A)) ; toc
+norm (S1-S2)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 0.009174 seconds.
+Elapsed time is 0.013046 seconds.
+ans =
+   1.6446e-12
+Elapsed time is 0.073158 seconds.
+Elapsed time is 0.016360 seconds.
+ans =
+   1.7565e-14
+\end{verbatim} \color{black}
+    
+
+\subsection*{Update/downdate of a dense Cholesky factorization}
+
+\begin{par}
+Wilkinson considered the update/downdate of a matrix factorization to be a key
+problem in computational linear algebra.  The idea is that you first factorize
+a matrix.  Next, make a low-rank change to A, and patch up (or down...) the
+factorization so that it becomes the factorization of the new matrix.  In
+MATLAB, this only works for dense symmetric positive definite matrices, via
+cholupdate.  This is much faster than computing the new factorization from
+scratch.
+\end{par} \vspace{1em}
+\begin{verbatim}
+n = 1000 ;
+A = rand (n) ;
+A = A*A' + n*eye (n) ;
+w = rand (n,1) ; t = rand (n,1) ; b = rand (n,1) ;
+F = factorize (A) ;
+
+tic ; F = cholupdate (F,w,'+') ; x = F\b ; toc
+tic ; y = (A+w*w')\b ;      toc
+norm (x-y)
+
+tic ; F = cholupdate (F,t,'-') ; x = F\b ; toc
+tic ; y = (A+w*w'-t*t')\b ; toc
+norm (x-y)
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 0.010284 seconds.
+Elapsed time is 0.015608 seconds.
+ans =
+   3.6395e-17
+Elapsed time is 0.011662 seconds.
+Elapsed time is 0.019173 seconds.
+ans =
+   3.5119e-17
+\end{verbatim} \color{black}
+    
+
+\subsection*{Caveat Executor}
+
+\begin{par}
+One caveat:  If you have a large number of very small systems to solve, the
+object-oriented overhead of creating and using an object can dominate the run
+time, at least in MATLAB R2011a.  For this case, if you want the best
+performance, stick with BACKSLASH, or LU and LINSOLVE (just extract the
+appropriate formulas from the M-files in the FACTORIZE package).
+\end{par} \vspace{1em}
+\begin{par}
+Hopefully the object-oriented overhead will drop in future versions of MATLAB,
+and you can ignore this caveat.
+\end{par} \vspace{1em}
+\begin{verbatim}
+A = rand (10) ; b = rand (10,1) ; F = factorize (A) ;
+
+tic ; for k = 1:10000, x = F\b ; end ; toc
+
+tic ; for k = 1:10000, x = A\b ; end ; toc
+
+[L,U,p] = lu (A, 'vector') ;
+opL = struct ('LT', true) ;
+opU = struct ('UT', true) ;
+tic ;
+for k = 1:10000
+    x = linsolve (U, linsolve (L, b(p,:), opL), opU) ;
+end
+toc
+\end{verbatim}
+
+        \color{lightgray} \begin{verbatim}Elapsed time is 1.156836 seconds.
+Elapsed time is 0.123091 seconds.
+Elapsed time is 0.057961 seconds.
+\end{verbatim} \color{black}
+    
+
+\subsection*{Summary}
+
+\begin{par}
+So ... don't use INV, and don't worry about how to use LU, CHOL, or QR
+factorization.  Just install the FACTORIZE package, and you're on your way.
+Assuming you are now in the Factorize/ directory, cut-and-paste these commands
+into your command window:
+\end{par} \vspace{1em}
+\begin{verbatim}addpath (pwd)
+savepath\end{verbatim}
+\begin{par}
+And remember ...
+\end{par} \vspace{1em}
+\begin{par}
+{\em Don't let that INV go past your eyes; to solve that system, FACTORIZE!}
+\end{par} \vspace{1em}
+
+
+
+\end{document}
+    
diff --git a/MATLAB_Tools/Factorize/Doc/license.txt b/MATLAB_Tools/Factorize/Doc/license.txt
new file mode 100644
index 0000000..1e1c279
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Doc/license.txt
@@ -0,0 +1,27 @@
+License for the FACTORIZE package (not SuiteSparse, or SPQR itself)
+
+Copyright (c) 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
+modification, are permitted provided that the following conditions are 
+met:
+
+    * Redistributions of source code must retain the above copyright 
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright 
+      notice, this list of conditions and the following disclaimer in 
+      the documentation and/or other materials provided with the distribution
+      
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/MATLAB_Tools/Factorize/README.txt b/MATLAB_Tools/Factorize/README.txt
new file mode 100644
index 0000000..829e24b
--- /dev/null
+++ b/MATLAB_Tools/Factorize/README.txt
@@ -0,0 +1,15 @@
+FACTORIZE:  an object-oriented method for solving linear systems and least
+squares problems.
+
+See the Factorize/Contents.m file for more details on how to install and test
+this package.  For a demo, see Factorize/Demo (run "fdemo" from the MATLAB
+Command window).  For additional documentation, see Factorize/Doc.
+
+The COD function for sparse matrices requires the SPQR mexFunction from the
+SuiteSparse library.  The simplest way to get this is to install all of
+SuiteSparse from http://www.suitesparse.com.  The FACTORIZE method can be used
+without SPQR; in this case, the COD for sparse matrices is not used.  This has
+no effect on the use of this method for full-rank matrices, since COD is used
+only for rank-deficient matrices.
+
+Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/Factorize/Test/Contents.m b/MATLAB_Tools/Factorize/Test/Contents.m
new file mode 100644
index 0000000..1e32620
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/Contents.m
@@ -0,0 +1,22 @@
+% Test code for the FACTORIZE object.
+%
+% To run all the tests, use test_all.  The SPQR mexFunction from SuiteSparse
+% is required.  The FACTORIZE method works without SPQR, but it will not use
+% COD for sparse matrices in that case (which this test relies upon).  The
+% output of this test in MATLAB R2011a is given in test_all.txt.
+%
+% Files
+%   test_accuracy    - test the accuracy of the factorize object
+%   test_all         - test the Factorize package (factorize, inverse, and related)
+%   test_all_cod     - test the COD factorization
+%   test_all_svd     - tests the svd factorization method for a range of problems.
+%   test_cod         - test the COD, COD_SPARSE and RQ functions
+%   test_disp        - test the display method of the factorize object
+%   test_errors      - tests error handling for the factorize object methods
+%   test_factorize   - test the accuracy of the factorization object
+%   test_function    - test various functions applied to a factorize object
+%   test_functions   - test various functions applied to a factorize object
+%   test_performance - compare performance of factorization/solve methods.
+%   test_svd         - test factorize(A,'svd') and factorize(A,'cod') for a given matrix
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/Factorize/Test/README.txt b/MATLAB_Tools/Factorize/Test/README.txt
new file mode 100644
index 0000000..eb824f8
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/README.txt
@@ -0,0 +1,4 @@
+To run all the tests, use test_all.m.  The SPQR mexFunction from SuiteSparse is
+required.  The output of this test in MATLAB is given in test_all.txt.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/Factorize/Test/reset_rand.m b/MATLAB_Tools/Factorize/Test/reset_rand.m
new file mode 100644
index 0000000..1a90215
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/reset_rand.m
@@ -0,0 +1,15 @@
+function reset_rand
+%RESET_RAND resets the state of rand
+%
+% Example
+%   reset_rand
+%
+% See also RandStream, rand, rng
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (verLessThan ('matlab', '7.12'))
+    rand ('seed', 0) ;                                                      %#ok
+else
+    rng ('default') ;
+end
diff --git a/MATLAB_Tools/Factorize/Test/test_accuracy.m b/MATLAB_Tools/Factorize/Test/test_accuracy.m
new file mode 100644
index 0000000..dc5419c
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_accuracy.m
@@ -0,0 +1,120 @@
+function err = test_accuracy
+%TEST_ACCURACY test the accuracy of the factorize object
+%
+% Example
+%   err = test_accuracy
+%
+% See also test_all, test_factorize.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('\nTesting accuracy:\n') ;
+reset_rand ;
+
+A = [ 0.1482    0.3952    0.1783    1.1601
+      0.3952    0.3784    0.2811    0.4893
+      0.1783    0.2811    1.1978    1.3837
+      1.1601    0.4893    1.3837    0.7520 ] ;
+
+F = factorize (A, 'ldl', 1) ;                                               %#ok
+err = test_factorize (sparse (A)) ;
+err = max (err, test_factorize (A)) ;
+
+rect   = {'', 'qr', 'cod', 'svd' } ;        % methods for rectangular matrices
+square = [{'lu'} rect] ;                    % for square matrices
+sym    = [{'ldl', 'symmetric'} square] ;    % for symmetric
+spd    = [{'chol'} sym] ;                   % for symmetric positive definite
+square = [{'unsymmetric'} square] ;
+
+%   rect
+%   square
+%   sym
+%   spd
+%   pause
+
+fprintf ('please wait\n') ;
+
+% small matrices: full and sparse
+for n = 0:6
+    for im = 0:1
+        fprintf ('test %2d of 14 ', 2*n+im+1) ;
+
+        % unsymmetric
+        A = rand (n) ;
+        if (im == 1)
+            A = A + 1i * rand (n) ;
+        end
+        err = tfac (A, err, square) ;
+
+        % dense, symmetric but not always positive definite
+        A = A+A' ;
+        err = tfac (A, err, sym) ;
+
+        % symmetric positive definite
+        A = A'*A + eye (n) ;
+        err = tfac (A, err, spd) ;
+
+        % least-squares problem
+        A = rand (2*n,n) ;
+        err = tfac (A, err, rect) ;
+
+        % under-determined problem
+        A = A' ;
+        err = tfac (A, err, rect) ;
+        fprintf ('\n') ;
+    end
+end
+% default dense 100-by-100 matrix
+err = max (err, test_factorize) ;
+
+fprintf ('\nerr so far: %g\nplease wait ', err) ;
+
+for im = 0:1
+
+    % sparse rectangular
+    A = sprandn (5,10,0.6) + speye (5,10) ;
+    if (im == 1)
+        A = A + 1i * sprandn (5,10,0.2) ;
+    end
+    err = tfac (A, err, rect) ;
+    err = tfac (A', err, rect) ;
+
+    % sparse, unsymmetric
+    load west0479
+    A = west0479 ;
+    if (im == 1)
+        A = A + 1i * sprand (A) ;
+    end
+    err = tfac (A, err, square) ;
+
+    % sparse, symmetric, but not positive definite
+    A = abs (A+A') + eps * speye (size (A,1)) ;
+    err = tfac (A, err, sym) ;
+
+    % sparse symmetric positive definite
+    A = delsq (numgrid ('L', 8)) ;
+    if (im == 1)
+        A = A + 1i * sprand (A) ;
+        A = A'*A ;
+    end
+    err = tfac (A, err, spd) ;
+
+end
+
+if (err > 1e-6)
+    error ('error to high!  %g\n', err) ;
+end
+
+fprintf ('\nmax error is OK: %g\n', err) ;
+
+%-------------------------------------------------------------------------------
+
+function err = tfac (A, err, list)
+for k = 1 : length (list)
+    method = list {k} ;
+    err = max (err, test_factorize (A, method)) ;
+    if (~issparse (A))
+        err = max (err, test_factorize (sparse (A), method)) ;
+    end
+end
+
diff --git a/MATLAB_Tools/Factorize/Test/test_all.m b/MATLAB_Tools/Factorize/Test/test_all.m
new file mode 100644
index 0000000..3f1e398
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_all.m
@@ -0,0 +1,32 @@
+function test_all (performance)
+%TEST_ALL test the Factorize package (factorize, inverse, and related)
+%
+% If you have editted the Factorize package, type "clear classes" before
+% running any tests.
+%
+% Example
+%   test_all                % run all tests
+%   test_all (0) ;          % do not run performance tests
+%
+% See also factorize, inverse, test_performance, test_accuracy, test_disp,
+% test_errors
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 1)
+    performance = 1 ;
+end
+
+help test_all
+reset_rand ;
+test_disp ;                 % test disp(F)
+test_errors ;               % test error handling for invalid matrices
+err1 = test_functions ;     % functionality tests
+err2 = test_accuracy ;      % test accuracy on a range of problems
+err3 = test_all_svd ;       % test SVD factorization
+err4 = test_all_cod ;       % test COD, COD_SPARSE, and RQ factorizations
+err = max ([err1 err2 err3 err4]) ;
+if (performance)
+    err = max (err, test_performance) ;         % performance tests
+end
+fprintf ('\nAll tests passed, maximum error OK: %g\n', err) ;
diff --git a/MATLAB_Tools/Factorize/Test/test_all.txt b/MATLAB_Tools/Factorize/Test/test_all.txt
new file mode 100644
index 0000000..0f1a17d
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_all.txt
@@ -0,0 +1,1187 @@
+profile on
+test_all
+ TEST_ALL test the Factorize package (factorize, inverse, and related)
+ 
+  If you have editted the Factorize package, type "clear classes" before
+  running any tests.
+ 
+  Example
+    test_all                % run all tests
+    test_all (0) ;          % do not run performance tests
+ 
+  See also <a href="matlab:help factorize">factorize</a>, <a href="matlab:help inverse">inverse</a>, <a href="matlab:help test_performance">test_performance</a>, <a href="matlab:help test_accuracy">test_accuracy</a>, <a href="matlab:help test_disp">test_disp</a>,
+  <a href="matlab:help test_errors">test_errors</a>
+
+
+----------Dense LU factorization:
+
+factorize: strategy default, A has size 3-by-3, full.
+factorize: try LU ... OK.
+F = 
+  class: factorization_lu_dense
+  dense LU factorization: A(p,:) = L*U
+  A: [3x3 double]
+  Factors:
+    L: [3x3 double]
+    U: [3x3 double]
+    p: [3 2 1]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+  A_condest: 6.821417e+02
+S = 
+  class: factorization_lu_dense
+  dense LU factorization: A(p,:) = L*U
+  A: [3x3 double]
+  Factors:
+    L: [3x3 double]
+    U: [3x3 double]
+    p: [3 2 1]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+  A_condest: 6.821417e+02
+error: 0
+
+Dense LU With an imaginary F.alpha: F = 
+  class: factorization_lu_dense
+  dense LU factorization: A(p,:) = L*U
+  A: [3x3 double]
+  Factors:
+    L: [3x3 double]
+    U: [3x3 double]
+    p: [3 2 1]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 3.14159 + (2)i
+  A_rank: 3
+  A_condest: 6.821417e+02
+error 6.24741e-12
+
+----------Sparse LU factorization:
+
+factorize: strategy default, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try LU ... OK.
+F = 
+  class: factorization_lu_sparse
+  sparse LU factorization: P*(R\A)*Q = L*U
+  A: [3x3 double]
+  Factors:
+    L: [3x3 double]
+    U: [3x3 double]
+    P: [3x3 double]
+    Q: [3x3 double]
+    R: [3x3 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+  A_condest: 1.004378e+02
+S = 
+  class: factorization_lu_sparse
+  sparse LU factorization: P*(R\A)*Q = L*U
+  A: [3x3 double]
+  Factors:
+    L: [3x3 double]
+    U: [3x3 double]
+    P: [3x3 double]
+    Q: [3x3 double]
+    R: [3x3 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+  A_condest: 1.004378e+02
+error: 3.12642e-17
+
+----------Dense Cholesky factorization:
+
+factorize: strategy default, A has size 3-by-3, full.
+factorize: try CHOL ... OK.
+F = 
+  class: factorization_chol_dense
+  dense Cholesky factorization: A = R'*R
+  A: [3x3 double]
+  Factors:
+    R: [3x3 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+S = 
+  class: factorization_chol_dense
+  dense Cholesky factorization: A = R'*R
+  A: [3x3 double]
+  Factors:
+    R: [3x3 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+error: 1.36648e-17
+
+----------Sparse Cholesky factorization:
+
+factorize: strategy default, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try CHOL ... OK.
+F = 
+  class: factorization_chol_sparse
+  sparse Cholesky factorization: P'*A*P = L*L'
+  A: [3x3 double]
+  Factors:
+    L: [3x3 double]
+    P: [3x3 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+S = 
+  class: factorization_chol_sparse
+  sparse Cholesky factorization: P'*A*P = L*L'
+  A: [3x3 double]
+  Factors:
+    L: [3x3 double]
+    P: [3x3 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 3
+error: 1.36648e-17
+
+----------Dense QR factorization:
+
+factorize: strategy qr, A has size 3-by-2, full.
+factorize: try QR of A ... OK.
+F = 
+  class: factorization_qr_dense
+  dense economy QR factorization: A = Q*R
+  A: [3x2 double]
+  Factors:
+    Q: [3x2 double]
+    R: [2x2 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+S = 
+  class: factorization_qr_dense
+  dense economy QR factorization: A = Q*R
+  A: [3x2 double]
+  Factors:
+    Q: [3x2 double]
+    R: [2x2 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+error: 6.22897e-16
+
+----------Dense COD factorization:
+
+factorize: strategy default, A has size 3-by-2, full.
+factorize: try COD ... OK.
+F = 
+  class: factorization_cod_dense
+  dense COD factorization: A = U*R*V'
+  A: [3x2 double]
+  Factors:
+    U: [3x2 double]
+    R: [2x2 double]
+    V: [2x2 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+S = 
+  class: factorization_cod_dense
+  dense COD factorization: A = U*R*V'
+  A: [3x2 double]
+  Factors:
+    U: [3x2 double]
+    R: [2x2 double]
+    V: [2x2 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+error: 4.71271e-17
+
+----------Sparse COD factorization:
+
+factorize: strategy cod, A has size 3-by-2, sparse with 6 nonzeros.
+factorize: try COD ... OK.
+F = 
+  class: factorization_cod_sparse
+  sparse COD factorization: A = U*R*V'
+  A: [3x2 double]
+  Factors:
+    U: [1x1 struct]
+    R: [3x2 double]
+    V: [1x1 struct]
+    r: 2
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+S = 
+  class: factorization_cod_sparse
+  sparse COD factorization: A = U*R*V'
+  A: [3x2 double]
+  Factors:
+    U: [1x1 struct]
+    R: [3x2 double]
+    V: [1x1 struct]
+    r: 2
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+error: 6.55681e-16
+
+----------Dense QR factorization of A':
+
+factorize: strategy qr, A has size 2-by-3, full.
+factorize: try QR of A' ... OK.
+F = 
+  class: factorization_qrt_dense
+  dense economy QR factorization: A' = Q*R
+  A: [2x3 double]
+  Factors:
+    Q: [3x2 double]
+    R: [2x2 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+S = 
+  class: factorization_qrt_dense
+  dense economy QR factorization: A' = Q*R
+  A: [2x3 double]
+  Factors:
+    Q: [3x2 double]
+    R: [2x2 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+error: 9.85539e-16
+
+----------Sparse QR factorization:
+
+factorize: strategy default, A has size 3-by-2, sparse with 6 nonzeros.
+factorize: try QR of A ... OK.
+F = 
+  class: factorization_qr_sparse
+  sparse QR factorization of A: (A*P)'*A*P = R'*R
+  A: [3x2 double]
+  Factors:
+    R: [2x2 double]
+    P: [2x2 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+S = 
+  class: factorization_qr_sparse
+  sparse QR factorization of A: (A*P)'*A*P = R'*R
+  A: [3x2 double]
+  Factors:
+    R: [2x2 double]
+    P: [2x2 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+error: 5.55647e-16
+
+----------Sparse QR factorization of A':
+
+factorize: strategy default, A has size 2-by-3, sparse with 6 nonzeros.
+factorize: try QR of A' ... OK.
+F = 
+  class: factorization_qrt_sparse
+  sparse QR factorization of A': (P*A)*(P*A)' = R'*R
+  A: [2x3 double]
+  Factors:
+    R: [2x2 double]
+    P: [2x2 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+S = 
+  class: factorization_qrt_sparse
+  sparse QR factorization of A': (P*A)*(P*A)' = R'*R
+  A: [2x3 double]
+  Factors:
+    R: [2x2 double]
+    P: [2x2 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_condest: 1.573790e+00
+error: 5.55647e-16
+
+----------SVD factorization:
+
+factorize: strategy svd, A has size 3-by-2, sparse with 6 nonzeros.
+factorize: try SVD ... OK.
+F = 
+  class: factorization_svd
+  singular value decomposition: A = U*S*V'
+  A: [3x2 double]
+  Factors:
+    U: [3x3 double]
+    S: [2x1 double]
+    V: [2x2 double]
+    r: 2
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_cond: 4.580233e+00
+S = 
+  class: factorization_svd
+  singular value decomposition: A = U*S*V'
+  A: [3x2 double]
+  Factors:
+    U: [3x3 double]
+    S: [2x1 double]
+    V: [2x2 double]
+    r: 2
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 2
+  A_cond: 4.580233e+00
+error: 5.24545e-16
+
+----------Dense LDL factorization:
+
+factorize: strategy ldl, A has size 6-by-6, full.
+factorize: try LDL ... OK.
+F = 
+  class: factorization_ldl_dense
+  dense LDL factorization: A(p,p) = L*D*L'
+  A: [6x6 double]
+  Factors:
+    L: [6x6 double]
+    D: [6x6 double]
+    p: [1 4 3 6 5 2]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 6
+  A_condest: 3.116758e+00
+S = 
+  class: factorization_ldl_dense
+  dense LDL factorization: A(p,p) = L*D*L'
+  A: [6x6 double]
+  Factors:
+    L: [6x6 double]
+    D: [6x6 double]
+    p: [1 4 3 6 5 2]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 6
+  A_condest: 3.116758e+00
+error: 4.60596e-17
+
+----------Sparse LDL factorization:
+
+factorize: strategy ldl, A has size 6-by-6, sparse with 18 nonzeros.
+factorize: try LDL ... OK.
+F = 
+  class: factorization_ldl_sparse
+  sparse LDL factorization: P'*A*P = L*D*L'
+  A: [6x6 double]
+  Factors:
+    L: [6x6 double]
+    D: [6x6 double]
+    P: [6x6 double]
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 6
+  A_condest: 3.364501e+00
+S = 
+  class: factorization_ldl_sparse
+  sparse LDL factorization: P'*A*P = L*D*L'
+  A: [6x6 double]
+  Factors:
+    L: [6x6 double]
+    D: [6x6 double]
+    P: [6x6 double]
+  is_inverse: 1
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 6
+  A_condest: 3.364501e+00
+error: 9.21191e-17
+
+----------Dense QR and QR' with scalar A and sparse b:
+F = 
+  class: factorization_qr_dense
+  dense economy QR factorization: A = Q*R
+  A: [1x1 double]
+  Factors:
+    Q: 1
+    R: 3.1416
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 1
+  A_condest: 1
+F = 
+  class: factorization_qrt_dense
+  dense economy QR factorization: A' = Q*R
+  A: [1x1 double]
+  Factors:
+    Q: 1
+    R: 3.1416
+  is_inverse: 0
+  is_ctrans: 0
+  alpha: 1
+  A_rank: 1
+  A_condest: 1
+
+All disp tests passed, max error: 6.24741e-12
+
+Testing error handling (error messages are expected)
+
+Expected error: [Matrix must be 2D.]
+
+factorize: strategy gunk, A has size 4-by-4, full.
+Expected error: [unrecognized strategy.]
+Expected error: [COD is not designed for sparse matrices.  Use COD_SPARSE instead.]
+Expected error: [RQ is not designed for sparse matrices.]
+Expected error: [B\F where F=inverse(A) requires the explicit computation of the inverse.
+This is ill-advised, so it is never done automatically.
+To force it, use B\double(F) instead of B\F.
+]
+Expected error: [F/B where F=inverse(A) requires the explicit computation of the inverse.
+This is ill-advised, so it is never done automatically.
+To force it, use double(F)/B instead of F/B.
+]
+Expected error: [COD_SPARSE is not designed for full matrices.  Use COD instead.]
+
+factorize: strategy default, A has size 3-by-3, full.
+factorize: try CHOL ... failed.
+factorize: Undefined function or method 'chol' for input arguments of type 'logical'.
+factorize: try LDL ... failed.
+factorize: Undefined function or method 'ldl' for input arguments of type 'char'.
+factorize: try LU ... failed.
+factorize: Undefined function or method 'lu' for input arguments of type 'char'.
+factorize: try COD ... failed.
+factorize: First argument must be single or double.
+
+Expected error: [First argument must be single or double.]
+
+factorize: strategy default, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Undefined function or method 'chol' for input arguments of type 'char'.
+factorize: try LDL ... failed.
+factorize: Undefined function or method 'ldl' for input arguments of type 'logical'.
+factorize: try LU ... failed.
+factorize: Undefined function or method 'lu' for input arguments of type 'logical'.
+factorize: try COD ... failed.
+factorize: matrix type not supported
+
+Expected error: [matrix type not supported]
+
+factorize: strategy symmetric, A has size 3-by-3, full.
+factorize: try CHOL ... failed.
+factorize: Undefined function or method 'chol' for input arguments of type 'logical'.
+factorize: try LDL ... failed.
+factorize: Undefined function or method 'ldl' for input arguments of type 'char'.
+factorize: try LU ... failed.
+factorize: Undefined function or method 'lu' for input arguments of type 'char'.
+factorize: try COD ... failed.
+factorize: First argument must be single or double.
+
+Expected error: [First argument must be single or double.]
+
+factorize: strategy symmetric, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Undefined function or method 'chol' for input arguments of type 'char'.
+factorize: try LDL ... failed.
+factorize: Undefined function or method 'ldl' for input arguments of type 'logical'.
+factorize: try LU ... failed.
+factorize: Undefined function or method 'lu' for input arguments of type 'logical'.
+factorize: try COD ... failed.
+factorize: matrix type not supported
+
+Expected error: [matrix type not supported]
+
+factorize: strategy qr, A has size 3-by-3, full.
+factorize: try QR of A ... failed.
+factorize: First argument must be single or double.
+
+Expected error: [First argument must be single or double.]
+
+factorize: strategy qr, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try QR of A ... failed.
+factorize: A must be double
+
+Expected error: [A must be double]
+
+factorize: strategy lu, A has size 3-by-3, full.
+factorize: try LU ... failed.
+factorize: Undefined function or method 'lu' for input arguments of type 'char'.
+
+Expected error: [Undefined function or method 'lu' for input arguments of type 'char'.]
+
+factorize: strategy lu, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try LU ... failed.
+factorize: Undefined function or method 'lu' for input arguments of type 'logical'.
+
+Expected error: [Undefined function or method 'lu' for input arguments of type 'logical'.]
+
+factorize: strategy ldl, A has size 3-by-3, full.
+factorize: try LDL ... failed.
+factorize: Undefined function or method 'ldl' for input arguments of type 'char'.
+
+Expected error: [Undefined function or method 'ldl' for input arguments of type 'char'.]
+
+factorize: strategy ldl, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try LDL ... failed.
+factorize: Undefined function or method 'ldl' for input arguments of type 'logical'.
+
+Expected error: [Undefined function or method 'ldl' for input arguments of type 'logical'.]
+
+factorize: strategy chol, A has size 3-by-3, full.
+factorize: try CHOL ... failed.
+factorize: Undefined function or method 'chol' for input arguments of type 'logical'.
+
+Expected error: [Undefined function or method 'chol' for input arguments of type 'logical'.]
+
+factorize: strategy chol, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Undefined function or method 'chol' for input arguments of type 'char'.
+
+Expected error: [Undefined function or method 'chol' for input arguments of type 'char'.]
+
+factorize: strategy svd, A has size 3-by-3, full.
+factorize: try SVD ... failed.
+factorize: Undefined function or method 'svd' for input arguments of type 'logical'.
+
+Expected error: [Undefined function or method 'svd' for input arguments of type 'logical'.]
+
+factorize: strategy svd, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try SVD ... failed.
+factorize: Undefined function or method 'svd' for input arguments of type 'logical'.
+
+Expected error: [Undefined function or method 'svd' for input arguments of type 'logical'.]
+
+factorize: strategy cod, A has size 3-by-3, full.
+factorize: try COD ... failed.
+factorize: First argument must be single or double.
+
+Expected error: [First argument must be single or double.]
+
+factorize: strategy cod, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try COD ... failed.
+factorize: matrix type not supported
+
+Expected error: [matrix type not supported]
+
+factorize: strategy qr, A has size 3-by-4, sparse with 12 nonzeros.
+factorize: try QR of A' ... failed.
+factorize: A must be double
+
+Expected error: [A must be double]
+
+factorize: strategy ldl, A has size 3-by-3, full.
+factorize: try LDL ... failed.
+factorize: Matrix is singular to working precision.
+
+factorize: strategy ldl, A has size 3-by-2, full.
+factorize: try LDL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy ldl, A has size 2-by-3, full.
+factorize: try LDL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy ldl, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try LDL ... failed.
+factorize: Matrix is singular to working precision.
+
+factorize: strategy ldl, A has size 3-by-2, sparse with 0 nonzeros.
+factorize: try LDL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy ldl, A has size 2-by-3, sparse with 0 nonzeros.
+factorize: try LDL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy chol, A has size 3-by-3, full.
+factorize: try CHOL ... failed.
+factorize: Matrix must be positive definite.
+
+factorize: strategy chol, A has size 3-by-2, full.
+factorize: try CHOL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy chol, A has size 2-by-3, full.
+factorize: try CHOL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy chol, A has size 3-by-3, sparse with 9 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Matrix must be positive definite.
+
+factorize: strategy chol, A has size 3-by-2, sparse with 0 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy chol, A has size 2-by-3, sparse with 0 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Matrix must be square.
+
+factorize: strategy lu, A has size 3-by-2, full.
+factorize: try LU ... failed.
+factorize: LU for rectangular matrices not supported.  Use QR.
+
+Expected error: [LU for rectangular matrices not supported.  Use QR.]
+
+factorize: strategy lu, A has size 3-by-2, sparse with 6 nonzeros.
+factorize: try LU ... failed.
+factorize: LU for rectangular matrices not supported.  Use QR.
+
+Expected error: [LU for rectangular matrices not supported.  Use QR.]
+
+factorize: strategy ldl, A has size 3-by-2, full.
+factorize: try LDL ... failed.
+factorize: Matrix must be square.
+
+Expected error: [Matrix must be square.]
+
+factorize: strategy ldl, A has size 3-by-2, sparse with 6 nonzeros.
+factorize: try LDL ... failed.
+factorize: Matrix must be square.
+
+Expected error: [Matrix must be square.]
+
+factorize: strategy chol, A has size 3-by-2, full.
+factorize: try CHOL ... failed.
+factorize: Matrix must be square.
+
+Expected error: [Matrix must be square.]
+
+factorize: strategy chol, A has size 3-by-2, sparse with 6 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Matrix must be square.
+
+Expected error: [Matrix must be square.]
+
+Expected error: [QR(A) method requires m>=n.]
+
+Expected error: [QR of A requires m >= n.]
+
+Expected error: [QR(A') method requires m<=n.]
+
+Expected error: [QR of A' requires m < n.]
+
+factorize: strategy ldl, A has size 2-by-2, full.
+factorize: try LDL ... failed.
+factorize: Matrix is singular to working precision.
+
+Expected error: [Matrix is singular to working precision.]
+
+factorize: strategy ldl, A has size 2-by-2, sparse with 0 nonzeros.
+factorize: try LDL ... failed.
+factorize: Matrix is singular to working precision.
+
+Expected error: [Matrix is singular to working precision.]
+
+factorize: strategy chol, A has size 2-by-2, full.
+factorize: try CHOL ... failed.
+factorize: Matrix must be positive definite.
+
+Expected error: [Matrix must be positive definite.]
+
+factorize: strategy chol, A has size 2-by-2, sparse with 0 nonzeros.
+factorize: try CHOL ... failed.
+factorize: Matrix must be positive definite.
+
+Expected error: [Matrix must be positive definite.]
+
+factorize: strategy default, A has size 3-by-2, full.
+factorize: try COD ... OK.
+
+Expected error: [Cell contents reference from a non-cell array object.]
+Expected error: [Improper index matrix reference.]
+Expected error: [Reference to non-existent field 'L'.]
+Expected error: [Reference to non-existent field 'junk'.]
+
+factorize: strategy default, A has size 2-by-2, full.
+factorize: try LU ... OK.
+
+Expected error: [Undefined function or method 'cholupdate' for input arguments of type 'factorization_lu_dense'.]
+Expected error: [Undefined function or method 'choldowndate' for input arguments of type 'factorization_lu_dense'.]
+
+Expected error: [Matrix must be square.]
+
+Expected error: [A is rectangular.  Use the 2 norm.]
+
+Expected error: [unrecognized kind]
+
+Expected error: [Third argument must be '+' or '-'.]
+
+All error-handing tests passed
+
+----- Test functions:
+
+norm(A,1), exact:             0
+  MATLAB normest1(A)          0
+
+norm (inv(A),1) exact:        0
+  MATLAB normest1 (inv (A)):  -1
+  normest1 (inverse (F)):     0
+
+  cond (A,1), exact:          -1
+  MATLAB condest(A):          0
+  condest(F):                 0
+  condest(inverse(A)):        0
+  cond (A,2), exact:          -1
+  cond (F,2), exact:          -1
+  rankest 0 0
+  cheap condest:              0
+K =
+             A: []
+       Factors: [1x1 struct]
+    is_inverse: 0
+     is_ctrans: 0
+         alpha: 1
+        A_rank: 0
+        A_cond: []
+          kind: 'dense LDL factorization: A(p,p) = L*D*L''
+K =
+             A: []
+       Factors: [1x1 struct]
+    is_inverse: 1
+     is_ctrans: 1
+         alpha: 1
+        A_rank: 0
+        A_cond: []
+          kind: 'dense LDL factorization: A(p,p) = L*D*L''
+
+norm(A,1), exact:             3.07802
+  MATLAB normest1(A)          3.07802
+
+norm (inv(A),1) exact:        1.94889e+06
+  MATLAB normest1 (inv (A)):  1.94889e+06
+  normest1 (inverse (F)):     1.94889e+06
+
+  cond (A,1), exact:          -1
+  MATLAB condest(A):          5.99871e+06
+  condest(F):                 5.99871e+06
+  condest(inverse(A)):        5.99871e+06
+  cond (A,2), exact:          -1
+  cond (F,2), exact:          -1
+  rankest 3 3
+K =
+             A: [3x3 double]
+       Factors: [1x1 struct]
+    is_inverse: 0
+     is_ctrans: 0
+         alpha: 1
+        A_rank: 3
+        A_cond: []
+          kind: 'dense Cholesky factorization: A = R'*R'
+K =
+             A: [3x3 double]
+       Factors: [1x1 struct]
+    is_inverse: 1
+     is_ctrans: 1
+         alpha: 1
+        A_rank: 3
+        A_cond: []
+          kind: 'dense Cholesky factorization: A = R'*R'
+
+norm(A,1), exact:             1.99749
+  MATLAB normest1(A)          1.99749
+
+norm (inv(A),1) exact:        1785.44
+  MATLAB normest1 (inv (A)):  1785.44
+  normest1 (inverse (F)):     1785.44
+
+  cond (A,1), exact:          3566.41
+  MATLAB condest(A):          3566.41
+  condest(F):                 3566.41
+  condest(inverse(A)):        3566.41
+  cond (A,2), exact:          2050.35
+  cond (F,2), exact:          2050.35
+  rankest 3 3
+K =
+             A: [3x3 double]
+       Factors: [1x1 struct]
+    is_inverse: 0
+     is_ctrans: 0
+         alpha: 1
+        A_rank: 3
+        A_cond: 2.0503e+03
+          kind: 'singular value decomposition: A = U*S*V''
+K =
+             A: [3x3 double]
+       Factors: [1x1 struct]
+    is_inverse: 1
+     is_ctrans: 1
+         alpha: 1
+        A_rank: 3
+        A_cond: 2.0503e+03
+          kind: 'singular value decomposition: A = U*S*V''
+
+norm(A,1), exact:             6.43078
+  MATLAB normest1(A)          6.43078
+
+norm (inv(A),1) exact:        14.3894
+  MATLAB normest1 (inv (A)):  14.3894
+  normest1 (inverse (F)):     14.3894
+
+  cond (A,1), exact:          -1
+  MATLAB condest(A):          92.5354
+  condest(F):                 92.5354
+  condest(inverse(A)):        92.5354
+  cond (A,2), exact:          -1
+  cond (F,2), exact:          -1
+  rankest 10 10
+  cheap condest:              2.49707
+K =
+             A: [10x10 double]
+       Factors: [1x1 struct]
+    is_inverse: 0
+     is_ctrans: 0
+         alpha: 1
+        A_rank: 10
+        A_cond: []
+          kind: 'dense LU factorization: A(p,:) = L*U'
+K =
+             A: [10x10 double]
+       Factors: [1x1 struct]
+    is_inverse: 1
+     is_ctrans: 1
+         alpha: 1
+        A_rank: 10
+        A_cond: []
+          kind: 'dense LU factorization: A(p,:) = L*U'
+
+Methods for class factorization_svd:
+
+abs                isa                mldivide           rankest            
+cond               isempty            mldivide_subclass  size               
+condest            isfield            mrdivide           struct             
+ctranspose         isfloat            mrdivide_subclass  subsref            
+disp               isnumeric          mtimes             svd                
+double             isreal             norm               uminus             
+end                isscalar           null               uplus              
+error_check        issingle           orth               
+factorization_svd  issparse           pinv               
+inverse            isvector           rank               
+
+
+norm(A,1), exact:             32.5678
+  MATLAB normest1(A)          32.5678
+
+norm (inv(A),1) exact:        0.0679415
+  MATLAB normest1 (inv (A)):  0.0652449
+  normest1 (inverse (F)):     0.0652449
+
+  cond (A,1), exact:          2.2127
+  MATLAB condest(A):          2.12488
+  condest(F):                 2.12488
+  condest(inverse(A)):        2.12488
+  cond (A,2), exact:          1.70306
+  cond (F,2), exact:          1.70306
+  rankest 10 10
+K =
+             A: [10x10 double]
+       Factors: [1x1 struct]
+    is_inverse: 0
+     is_ctrans: 0
+         alpha: 1
+        A_rank: 10
+        A_cond: 1.7031
+          kind: 'singular value decomposition: A = U*S*V''
+K =
+             A: [10x10 double]
+       Factors: [1x1 struct]
+    is_inverse: 1
+     is_ctrans: 1
+         alpha: 1
+        A_rank: 10
+        A_cond: 1.7031
+          kind: 'singular value decomposition: A = U*S*V''
+
+Methods for class factorization_chol_dense:
+
+abs                       isempty                   mrdivide                  
+cholupdate                isfield                   mrdivide_subclass         
+condest                   isfloat                   mtimes                    
+ctranspose                isnumeric                 rankest                   
+disp                      isreal                    size                      
+double                    isscalar                  struct                    
+end                       issingle                  subsref                   
+error_check               issparse                  uminus                    
+factorization_chol_dense  isvector                  uplus                     
+inverse                   mldivide                  
+isa                       mldivide_subclass         
+
+
+norm(A,1), exact:             32.5678
+  MATLAB normest1(A)          32.5678
+
+norm (inv(A),1) exact:        0.0679415
+  MATLAB normest1 (inv (A)):  0.0652449
+  normest1 (inverse (F)):     0.0652449
+
+  cond (A,1), exact:          -1
+  MATLAB condest(A):          2.12488
+  condest(F):                 2.12488
+  condest(inverse(A)):        2.12488
+  cond (A,2), exact:          -1
+  cond (F,2), exact:          -1
+  rankest 10 10
+K =
+             A: [10x10 double]
+       Factors: [1x1 struct]
+    is_inverse: 0
+     is_ctrans: 0
+         alpha: 1
+        A_rank: 10
+        A_cond: []
+          kind: 'dense Cholesky factorization: A = R'*R'
+K =
+             A: [10x10 double]
+       Factors: [1x1 struct]
+    is_inverse: 1
+     is_ctrans: 1
+         alpha: 1
+        A_rank: 10
+        A_cond: []
+          kind: 'dense Cholesky factorization: A = R'*R'
+........................................................................
+test_functions, max error: 1.38512e-10
+
+Testing accuracy:
+
+factorize: strategy ldl, A has size 4-by-4, full.
+factorize: try LDL ... OK.
+..please wait
+test  1 of 14 ..........................................................
+test  2 of 14 ..........................................................
+test  3 of 14 ..........................................................
+test  4 of 14 ..........................................................
+test  5 of 14 ..........................................................
+test  6 of 14 ........................................................
+test  7 of 14 ..........................................................
+test  8 of 14 ........................................................
+test  9 of 14 ..........................................................
+test 10 of 14 ........................................................
+test 11 of 14 ..........................................................
+test 12 of 14 ........................................................
+test 13 of 14 ..........................................................
+test 14 of 14 ........................................................
+.
+err so far: 2.92744e-12
+please wait .........................................................
+max error is OK: 8.56286e-09
+................
+..............
+..............
+..............
+..............
+..............
+..............
+..............
+..............
+..............
+..............
+..............
+..............
+..............
+....................................
+.........
+test_all_svd error so far: 1.99577e-14
+Testing on gallery ('randsvd',50) matrices:
+..
+Final test_all_svd error: 9.05166e-10
+test COD, COD_SPARSE, and RQ: error 1.07415e-15
+
+Performance comparisons of 4 methods:
+    backslash:  A\b, or L\b (and related) for solve times.
+    linsolve:   a built-in MATLAB function
+    factorize:  the factorization object
+    inv:        x=inv(A)*b, the explicit inverse (ack!)
+Run times are in seconds.
+Time relative to best time is in parentheses (lower is better).
+
+------------------ For unsymmetric matrices:
+
+Compare factorization times:
+n   50 tbest   0.000231 :
+    backslash ( 1.04)
+    linsolve  ( 1.00)
+    factorize ( 5.57)
+    inv       ( 1.50)
+n  100 tbest   0.000829 :
+    backslash ( 1.11)
+    linsolve  ( 1.00)
+    factorize ( 2.36)
+    inv       ( 1.96)
+n  500 tbest   0.049129 :
+    backslash ( 1.05)
+    linsolve  ( 1.00)
+    factorize ( 1.09)
+    inv       ( 2.41)
+n 1000 tbest   0.332374 :
+    backslash ( 1.04)
+    linsolve  ( 1.01)
+    factorize ( 1.00)
+    inv       ( 2.51)
+
+Compare solve times:
+n   50 tbest   0.000013 :
+    backslash ( 2.53)
+    linsolve  ( 2.94)
+    factorize (30.20)
+    inv       ( 1.00)
+n  100 tbest   0.000023 :
+    backslash ( 3.04)
+    linsolve  ( 2.46)
+    factorize (18.41)
+    inv       ( 1.00)
+n  500 tbest   0.000423 :
+    backslash ( 4.33)
+    linsolve  ( 1.78)
+    factorize ( 3.21)
+    inv       ( 1.00)
+n 1000 tbest   0.002432 :
+    backslash ( 2.74)
+    linsolve  ( 1.32)
+    factorize ( 1.48)
+    inv       ( 1.00)
+
+Break-even values K for inv vs the other methods
+(# of solves must exceed K for inv(A)*b to be faster):
+n   50
+    # solves vs backslash       5.2
+    # solves vs linsolve:       4.4
+    # solves vs factorize:      1.0
+n  100
+    # solves vs backslash      14.8
+    # solves vs linsolve:      23.5
+    # solves vs factorize:      1.0
+n  500
+    # solves vs backslash      47.3
+    # solves vs linsolve:     210.7
+    # solves vs factorize:     69.1
+n 1000
+    # solves vs backslash     115.7
+    # solves vs linsolve:     645.9
+    # solves vs factorize:    431.0
+
+------------------ For positive definite matrices:
+
+Compare factorization times:
+n   50 tbest   0.000172 :
+    backslash ( 1.10)
+    linsolve  ( 1.00)
+    factorize ( 5.59)
+    inv       ( 1.75)
+n  100 tbest   0.000536 :
+    backslash ( 1.17)
+    linsolve  ( 1.00)
+    factorize ( 2.42)
+    inv       ( 2.29)
+n  500 tbest   0.023547 :
+    backslash ( 1.25)
+    linsolve  ( 1.12)
+    factorize ( 1.00)
+    inv       ( 3.90)
+n 1000 tbest   0.145861 :
+    backslash ( 1.27)
+    linsolve  ( 1.18)
+    factorize ( 1.00)
+    inv       ( 5.11)
+
+Compare solve times:
+n   50 tbest   0.000013 :
+    backslash ( 3.15)
+    linsolve  ( 2.71)
+    factorize (29.95)
+    inv       ( 1.00)
+n  100 tbest   0.000024 :
+    backslash ( 3.30)
+    linsolve  ( 2.22)
+    factorize (17.60)
+    inv       ( 1.00)
+n  500 tbest   0.000440 :
+    backslash ( 3.33)
+    linsolve  ( 1.00)
+    factorize ( 2.07)
+    inv       ( 1.01)
+n 1000 tbest   0.002613 :
+    backslash ( 2.49)
+    linsolve  ( 1.00)
+    factorize ( 1.19)
+    inv       ( 1.05)
+
+Break-even values K for inv vs the other methods
+(# of solves must exceed K for inv(A)*b to be faster):
+n   50
+    # solves vs backslash       3.9
+    # solves vs linsolve:       5.6
+    # solves vs factorize:      1.0
+n  100
+    # solves vs backslash      11.0
+    # solves vs linsolve:      23.9
+    # solves vs factorize:      1.0
+n  500
+    # solves vs backslash      61.0
+    # solves vs linsolve:       Inf
+    # solves vs factorize:    146.1
+n 1000
+    # solves vs backslash     148.4
+    # solves vs linsolve:       Inf
+    # solves vs factorize:   1616.2
+
+Schur complement, S=A-B*inv(D)*C or A-B(D\C),
+where A, B, C, and D are square and unsymmetric.
+"inverse" means S=A-B*inverse(D)*C, which does not actually
+use the inverse, but uses the factorization object instead.
+n   50 tbest   0.000482 :
+    backslash ( 1.01)
+    linsolve  ( 1.00)
+    factorize ( 3.45)
+    inv       ( 4.01)
+n  100 tbest   0.002334 :
+    backslash ( 1.05)
+    linsolve  ( 1.00)
+    factorize ( 1.70)
+    inv       ( 1.81)
+n  500 tbest   0.234306 :
+    backslash ( 1.00)
+    linsolve  ( 1.02)
+    factorize ( 1.05)
+    inv       ( 1.10)
+n 1000 tbest   1.736168 :
+    backslash ( 1.00)
+    linsolve  ( 1.03)
+    factorize ( 1.24)
+    inv       ( 1.02)
+
+All tests passed, maximum error OK: 8.56286e-09
+diary off
diff --git a/MATLAB_Tools/Factorize/Test/test_all_cod.m b/MATLAB_Tools/Factorize/Test/test_all_cod.m
new file mode 100644
index 0000000..d33bee6
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_all_cod.m
@@ -0,0 +1,30 @@
+function err = test_all_cod
+%TEST_ALL_COD test the COD factorization
+%
+% Example
+%   test_all_cod
+%
+% See also test_cod
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+err = 0 ;
+for m = 0:10
+    for n = 0:10
+        for sp = 0:1
+            for im = 0:1
+                A = sprand (m, n, 0.2) ;
+                if (im)
+                    A = A + 1i*sprand (m, n, 0.1) ;
+                end
+                if (~sp)
+                    A = full (A) ;
+                end
+                err = max (err, test_cod (A)) ;
+                err = max (err, test_cod (A, 1e-12)) ;
+            end
+        end
+    end
+end
+
+fprintf ('test COD, COD_SPARSE, and RQ: error %g\n', err) ;
diff --git a/MATLAB_Tools/Factorize/Test/test_all_svd.m b/MATLAB_Tools/Factorize/Test/test_all_svd.m
new file mode 100644
index 0000000..dc3b7e5
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_all_svd.m
@@ -0,0 +1,77 @@
+function err = test_all_svd
+%TEST_ALL_SVD tests the svd factorization method for a range of problems.
+%
+% Example
+%   test_all_svd
+%
+% See also test_all.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+reset_rand ;
+err = test_svd ;
+
+err = max (err, test_svd (ones (3))) ;
+A = zeros (3) ;
+F = factorize (A, 'svd') ;
+nrm = norm (F) ;
+err = max (err, nrm) ;
+nrm = norm (inverse (F)) ;
+c = cond (F,1) ;
+if (~isequal (nrm, inf) || ~isequal (c, inf))
+    error ('svd test failure') ;
+end
+
+for sp = 0:1
+    for n = 0:6
+        for m = 0:6
+            for im = 0:1
+                A = rand (m,n) ;
+                if (im)
+                    A = A + 1i*rand (m,n) ;
+                end
+                if (sp)
+                    A = sparse (A) ;
+                end
+                err = max (err, test_svd (A)) ;
+            end
+        end
+        fprintf ('\n') ;
+    end
+end
+
+for n = 2:7
+    A = gallery ('chow', n, pi, 2) ;
+    err = max (err, test_svd (A)) ;
+    err = max (err, test_svd (A')) ;
+    err = max (err, test_svd (gallery ('clement', n, 0))) ;
+    err = max (err, test_svd (gallery ('clement', n, 1))) ;
+    A = sprandn (n, 2*n, 0.2) ;
+    err = max (err, test_svd (A)) ;
+    err = max (err, test_svd (A')) ;
+end
+fprintf ('\n') ;
+err = max (err, test_svd (gallery ('condex', 4, 1))) ;
+err = max (err, test_svd (gallery ('condex', 3, 2))) ;
+err = max (err, test_svd (gallery ('condex', 7, 3))) ;
+err = max (err, test_svd (gallery ('condex', 8, 4))) ;
+err = max (err, test_svd (gallery ('dorr', 20))) ;
+err = max (err, test_svd (gallery ('frank', 20))) ;
+err = max (err, test_svd (gallery ('gearmat', 20))) ;
+err = max (err, test_svd (gallery ('lauchli', 20))) ;
+err = max (err, test_svd (gallery ('neumann', 6^2))) ;
+fprintf ('\ntest_all_svd error so far: %g\n', err) ;
+
+if (err > 1e-6)
+    error ('error too high') ;
+end
+
+fprintf ('Testing on gallery (''randsvd'',50) matrices:\n') ;
+err = max (err, test_svd (gallery ('randsvd', 50))) ;
+err = max (err, test_svd (gallery ('randsvd', 50, 10/eps))) ;
+fprintf ('\nFinal test_all_svd error: %g\n', err) ;
+
+if (err > 1e-6)
+    error ('error too high') ;
+end
+
diff --git a/MATLAB_Tools/Factorize/Test/test_cod.m b/MATLAB_Tools/Factorize/Test/test_cod.m
new file mode 100644
index 0000000..03fa848
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_cod.m
@@ -0,0 +1,121 @@
+function err = test_cod (A, tol)
+%TEST_COD test the COD, COD_SPARSE and RQ functions
+%   This function does not test the factorize object itself, but some of the
+%   factorization methods it relies on.
+%
+% Example
+%   err = test_cod (A, tol)
+%
+% See also test_all_cod, test_all.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 1)
+    A = magic (4) ;
+end
+err = 0 ;
+[m, n] = size (A) ;
+
+if (issparse (A))
+
+    [U, R, V, r] = cod_sparse (A) ;                                         %#ok
+
+    % 1-norm of A - U*R*V'
+    err = max (err, norm (A - cod_qmult (U, cod_qmult (V, R, 2),1),1)) ;
+
+    Umat = cod_qmult (U, speye (size (A,1)), 1) ;      % convert U into a matrix
+    Vmat = cod_qmult (V, speye (size (A,2)), 1) ;      % convert V into a matrix
+    err = max (err, norm (A - Umat*R*Vmat',1)) ;
+
+    % test U'*x
+    x = rand (size (Umat,1), 1) ;
+    y1 = Umat'*x ;
+    y2 = cod_qmult (U, x) ;                             % default method 0
+    y3 = cod_qmult (Umat, x) ;
+    err = max (err, norm (y1 - y2, 1)) ;
+    err = max (err, norm (y1 - y3, 1)) ;
+
+    % test U*x
+    x = rand (size (Umat,2), 1) ;
+    y1 = Umat*x ;
+    y2 = cod_qmult (U, x, 1) ;
+    y3 = cod_qmult (Umat, x, 1) ;
+    err = max (err, norm (y1 - y2, 1)) ;
+    err = max (err, norm (y1 - y3, 1)) ;
+
+    % test x*U'
+    x = rand (1, size (Umat,2)) ;
+    y1 = x*Umat' ;
+    y2 = cod_qmult (U, x, 2) ;
+    y3 = cod_qmult (Umat, x, 2) ;
+    err = max (err, norm (y1 - y2, 1)) ;
+    err = max (err, norm (y1 - y3, 1)) ;
+
+    % test x*U
+    x = rand (1, size (Umat,1)) ;
+    y1 = x*Umat ;
+    y2 = cod_qmult (U, x, 3) ;
+    y3 = cod_qmult (Umat, x, 3) ;
+    err = max (err, norm (y1 - y2, 1)) ;
+    err = max (err, norm (y1 - y3, 1)) ;
+
+    % test cod_sparse with matrix form of Q
+    opts.Q = 'matrix' ;
+    if (nargin == 2)
+        opts.tol = tol ;
+    end
+    [U, R, V] = cod_sparse (A,opts) ;
+    err = max (err, norm (A - U*R*V',1)) ;
+
+    if (nargin == 2)
+        [U, R, V] = cod_sparse (A,tol) ;
+        U = cod_qmult (U, speye (size (A,1)), 1) ; 
+        V = cod_qmult (V, speye (size (A,2)), 1) ;
+        err = max (err, norm (A - U*R*V',1)) ;
+    end
+
+    try
+        % this should cause an error
+        [R, Q] = rq (A) ;                                                   %#ok
+        err = inf ;
+    catch                                                                   %#ok
+    end
+
+    try
+        % this should cause an error
+        [U, R, V, r] = cod (A) ;                                            %#ok
+        err = inf ;
+    catch                                                                   %#ok
+    end
+
+else
+
+    if (nargin < 2)
+        [U, R, V, r] = cod (A) ;                                            %#ok
+    else
+        [U, R, V, r] = cod (A, tol) ;                                       %#ok
+    end
+    err = max (err, norm (A - U*R*V',1)) ;
+
+    if (m <= n)
+        [R, Q] = rq (A) ;
+        err = max (err, norm (A - R*Q,1)) ;
+    else
+        [L, Q] = rq (A) ;
+        err = max (err, norm (A - Q*L,1)) ;
+    end
+
+    try
+        % this should cause an error
+        [U, R, V, r] = cod_sparse (A) ;                                     %#ok
+        err = inf ;
+    catch                                                                   %#ok
+    end
+
+end
+
+err = err / norm (A,1) ;
+
+if (err > 1e-12)
+    error ('error too high! %g\n', err) ;
+end
diff --git a/MATLAB_Tools/Factorize/Test/test_disp.m b/MATLAB_Tools/Factorize/Test/test_disp.m
new file mode 100644
index 0000000..a511392
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_disp.m
@@ -0,0 +1,174 @@
+function test_disp
+%TEST_DISP test the display method of the factorize object
+%
+% Example
+%   test_disp
+%
+% See also factorize, test_all.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+reset_rand ;
+tol = 1e-10 ;
+err = 0 ;
+
+%-------------------------------------------------------------------------------
+% dense LU
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Dense LU factorization:\n') ;
+A = rand (3) ;
+[err,F] = test_factorization (A, tol, err, [ ], 'factorization_lu_dense') ;
+
+fprintf ('\nDense LU With an imaginary F.alpha: ') ;
+alpha = (pi + 2i) ;
+F = alpha*F ;
+display (F) ;
+b = rand (3,1) ;
+x = F\b ;
+y = (alpha*A)\b ;
+err = norm (x-y) ;
+if (err > tol)
+    error ('error too high: %g\n', err) ;
+end
+fprintf ('error %g\n', err) ;
+
+%-------------------------------------------------------------------------------
+% sparse LU
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Sparse LU factorization:\n') ;
+A = sparse (A) ;
+err = test_factorization (A, tol, err, [ ], 'factorization_lu_sparse') ;
+
+%-------------------------------------------------------------------------------
+% dense Cholesky
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Dense Cholesky factorization:\n') ;
+A = A*A' + eye (3) ;
+err = test_factorization (A, tol, err, [ ], 'factorization_chol_dense') ;
+
+%-------------------------------------------------------------------------------
+% sparse Cholesky
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Sparse Cholesky factorization:\n') ;
+A = sparse (A) ;
+err = test_factorization (A, tol, err, [ ], 'factorization_chol_sparse') ;
+
+%-------------------------------------------------------------------------------
+% dense QR of A
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Dense QR factorization:\n') ;
+A = rand (3,2) ;
+err = test_factorization (A, tol, err, 'qr', 'factorization_qr_dense') ;
+
+%-------------------------------------------------------------------------------
+% dense COD of A
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Dense COD factorization:\n') ;
+err = test_factorization (A, tol, err, [ ], 'factorization_cod_dense') ;
+
+%-------------------------------------------------------------------------------
+% sparse COD of A
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Sparse COD factorization:\n') ;
+A = sparse (A) ;
+err = test_factorization (A, tol, err, 'cod', 'factorization_cod_sparse') ;
+
+%-------------------------------------------------------------------------------
+% dense QR of A'
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Dense QR factorization of A'':\n') ;
+A = full (A) ;
+err = test_factorization (A', tol, err, 'qr', 'factorization_qrt_dense') ;
+
+%-------------------------------------------------------------------------------
+% sparse QR of A
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Sparse QR factorization:\n') ;
+A = sparse (A) ;
+err = test_factorization (A, tol, err, [ ], 'factorization_qr_sparse') ;
+
+%-------------------------------------------------------------------------------
+% sparse QR of A'
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Sparse QR factorization of A'':\n') ;
+err = test_factorization (A', tol, err, [ ], 'factorization_qrt_sparse') ;
+
+%-------------------------------------------------------------------------------
+% svd
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------SVD factorization:\n') ;
+err = test_factorization (A, tol, err, 'svd', 'factorization_svd') ;
+
+%-------------------------------------------------------------------------------
+% dense LDL
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Dense LDL factorization:\n') ;
+A = rand (3) ;
+A = [zeros(3) A ; A' zeros(3)] ;
+err = test_factorization (A, tol, err, 'ldl', 'factorization_ldl_dense') ;
+
+%-------------------------------------------------------------------------------
+% sparse LDL
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Sparse LDL factorization:\n') ;
+A = sparse (A) ;
+err = test_factorization (A, tol, err, 'ldl', 'factorization_ldl_sparse') ;
+
+%-------------------------------------------------------------------------------
+% test QR and QR' with scalar A and sparse right-hand side
+%-------------------------------------------------------------------------------
+
+fprintf ('\n----------Dense QR and QR'' with scalar A and sparse b:\n') ;
+b = sparse ([1 2]) ;
+A = pi ;
+F = factorization_qr_dense (A,0) ;
+display (F) ;
+x = F\b ;
+err = max (err, norm (A\b - x)) ;
+x = b'/F ;
+err = max (err, norm (b'/A - x)) ;
+F = factorization_qrt_dense (A,0) ;
+display (F) ;
+x = F\b ;
+err = max (err, norm (A\b - x)) ;
+x = b'/F ;
+err = max (err, norm (b'/A - x)) ;
+if (err > tol)
+    error ('error too high: %g\n', err) ;
+end
+
+fprintf ('\nAll disp tests passed, max error: %g\n', err) ;
+
+%-------------------------------------------------------------------------------
+
+function [err, F] = test_factorization (A, tol, err, option, kind)
+%TEST_FACTORIZATION factorize a matrix and check its kind and error norm
+F = factorize (A, option, 1) ;
+display (F) ;
+S = inverse (F) ;
+display (S) ;
+err2 = error_check (F) ;
+fprintf ('error: %g\n', err2) ;
+err = max (err, err2) ;
+if (err > tol)
+    error ('error too high: %g\n', err) ;
+end
+if (F.is_inverse || ~isa (F, kind))
+    error ('invalid contents') ;
+end
+if (~(S.is_inverse) || ~isa (S, kind))
+    error ('invalid contents') ;
+end
diff --git a/MATLAB_Tools/Factorize/Test/test_errors.m b/MATLAB_Tools/Factorize/Test/test_errors.m
new file mode 100644
index 0000000..fe12b69
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_errors.m
@@ -0,0 +1,325 @@
+function test_errors
+%TEST_ERRORS tests error handling for the factorize object methods
+%
+% Example
+%   test_errors
+%
+% See also test_all, factorize.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('\nTesting error handling (error messages are expected)\n\n') ;
+reset_rand ;
+ok = true ;
+
+% the matrix A must be 2D for factorize
+A = ones (2,2,2) ; 
+try
+    F = factorize (A, [ ], 1) ;                                             %#ok
+    ok = false ;
+    fprintf ('error not caught: A must be 2D for factorize\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% check if invalid strategy is caught
+A = rand (4) ;
+try
+    F = factorize (A, 'gunk', 1) ;                                          %#ok
+    ok = false ;
+    fprintf ('error not caught: invalid strategy\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% cannot use COD on sparse matrices
+try
+    [U, R, V, r] = cod (sparse (A)) ;                                       %#ok
+    ok = false ;
+    fprintf ('error not caught: cannot use cod for sparse A\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% cannot use RQ on sparse matrices
+try
+    [R, Q] = rq (sparse (A)) ;                                              %#ok
+    ok = false ;
+    fprintf ('error not caught: cannot use rq for sparse A\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% cannot do B\inverse(A) or inverse(A)/B
+A = rand (2) ;
+B = rand (2) ;
+try
+    C = B \ inverse (A) ;                                                   %#ok
+    ok = false ;
+    fprintf ('error not caught: requires explicit inverseA\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+try
+    C = inverse (A) / B ;                                                   %#ok
+    ok = false ;
+    fprintf ('error not caught: requires explicit inverseA\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% cannot use COD_SPARSE on full matrices
+try
+    [U, R, V, r] = cod_sparse (A) ;                                         %#ok
+    ok = false ;
+    fprintf ('error not caught: cannot use cod_sparse for full A\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+if (~ok)
+    error ('!') ;
+end
+
+% cannot factorize a logical array, sparse or full
+for s = {'default', 'symmetric', 'qr', 'lu', 'ldl', 'chol', 'svd', 'cod'}
+    for sp = 0:1
+        A = logical (ones (3)) ;                                            %#ok
+        if (sp)
+            A = sparse (A) ;
+        end
+        try
+            F = factorize (A, char (s), 1) ;                                %#ok
+            ok = false ;
+            fprintf ('error not caught:\n') ;
+        catch me
+            fprintf ('\nExpected error: [%s]\n', me.message) ;
+        end
+    end
+end
+try
+    A = logical (sparse (rand (3,4))) ;
+    F = factorize (A, 'qr', 1) ;                                            %#ok
+    ok = false ;
+    fprintf ('error not caught:\n') ;
+catch me
+    fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+
+if (~ok)
+    error ('!') ;
+end
+
+% the matrix A must be full-rank for ldl and chol
+for s = {'ldl', 'chol'}
+    for sp = 0:1
+        A = ones (3) ;
+        if (sp)
+            A = sparse (A) ;
+        end
+        try
+            F = factorize (A, char (s), 1) ;                                %#ok
+            ok = false ;
+            fprintf ('error not caught\n') ;
+        catch                                                               %#ok
+        end
+        A = zeros (3,2) ;
+        if (sp)
+            A = sparse (A) ;
+        end
+        try
+            F = factorize (A, char (s), 1) ;                                %#ok
+            ok = false ;
+            fprintf ('error not caught\n') ;
+        catch                                                               %#ok
+        end
+        A = zeros (2,3) ;
+        if (sp)
+            A = sparse (A) ;
+        end
+        try
+            F = factorize (A, char (s), 1) ;                                %#ok
+            ok = false ;
+            fprintf ('error not caught\n') ;
+        catch                                                               %#ok
+        end
+    end
+end
+
+% cannot do LU, CHOL, or LDL on rectangular matrices
+for s = {'lu', 'ldl', 'chol'}
+    A = rand (3,2) ;
+    for sp = 0:1
+        try
+            F = factorize (A, char (s), 1) ;                                %#ok
+            ok = false ;
+            fprintf ('\nerror not caught: tall-and-thin case\n') ;
+        catch me
+            fprintf ('\nExpected error: [%s]\n', me.message) ;
+        end
+        A = sparse (A) ;
+    end
+end
+
+if (~ok)
+    error ('!') ;
+end
+
+% cannot do QR on short-and-fat matrices or QRT on tall-and-thin matrices
+try
+    F = factorization_qr_dense (rand (2,3), 0) ;                            %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: short-and-fat case\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+try
+    F = factorization_qr_sparse (sparse (rand (2,3)), 0) ;                  %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: short-and-fat case\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+try
+    F = factorization_qrt_dense (rand (3,2), 0) ;                           %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: tall-and-thin case\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+try
+    F = factorization_qrt_sparse (sparse (rand (3,2)), 0) ;                 %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: tall-and-thin case\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+
+if (~ok)
+    error ('!') ;
+end
+
+% cannot do CHOL, or LDL on singular matrices
+for s = {'ldl', 'chol'}
+    A = zeros (2) ;
+    for sp = 0:1
+        try
+            F = factorize (A, char (s), 1) ;                                %#ok
+            ok = false ;
+            fprintf ('\nerror not caught: singular case\n') ;
+        catch me
+            fprintf ('\nExpected error: [%s]\n', me.message) ;
+        end
+        A = sparse (A) ;
+    end
+end
+
+if (~ok)
+    error ('!') ;
+end
+
+% cannot use cell indexing
+A = rand (3,2) ;
+F = factorize (A, [ ], 1) ;
+try
+    C = F {1} ;                                                        %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: cannot use cell indexing\n') ;
+catch me
+    fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+
+% invalid indexing
+try
+    C = F (1,1).L ;                                                    %#ok
+    ok = false ;
+    fprintf ('error not caught: invalid indexing\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% invalid indexing
+try
+    C = F.L (1,1).stuff ;                                              %#ok
+    ok = false ;
+    fprintf ('error not caught: invalid indexing\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% non-existent field
+try
+    C = F.junk ;                                                       %#ok
+    ok = false ;
+    fprintf ('error not caught: invalid field\n') ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% can only update/downdate a dense Cholesky factorization
+A = rand (2) ;
+F = factorize (A, [ ], 1) ;
+w = rand (2,1) ;
+try
+    F = cholupdate (F,w) ;
+    fprintf ('error not caught: cannot update this type of matrix\n') ;
+    disp (F) ;
+    ok = false ;
+catch me
+    fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+try
+    F = choldowndate (F,w,'-') ;
+    fprintf ('error not caught: cannot downdate this type of matrix\n') ;
+    disp (F) ;
+    ok = false ;
+catch me
+    fprintf ('Expected error: [%s]\n', me.message) ;
+end
+
+% cannot do condest(F) or cond(F,1) for rectangular matrices
+try
+    F = factorize (rand (4,3)) ;
+    c = condest (F) ;                                                       %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: condest for rectangular case\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+try
+    F = factorize (rand (4,3), 'svd') ;
+    c = cond (F,1) ;                                                        %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: cond(A,1) for rectangular case\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+
+% test for invalid kind of svd
+try
+    F = factorize (rand (4,3), 'svd') ;
+    [U, S, V] = svd (F,'gunk') ;                                            %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: invalid kind of svd\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+
+% test for invalid cholupdate parameter
+try
+    A = rand (2) ;
+    A = A*A' ;
+    F = factorize (A) ;
+    G = cholupdate (F, ones(2,1), 'gunk') ;                                 %#ok
+    ok = false ;
+    fprintf ('\nerror not caught: invalid kind of cholupdate\n') ;
+catch me
+   fprintf ('\nExpected error: [%s]\n', me.message) ;
+end
+
+%-------------------------------------------------------------------------------
+
+if (~ok)
+    error ('error-handling failed') ;
+end
+fprintf ('\nAll error-handing tests passed\n') ;
diff --git a/MATLAB_Tools/Factorize/Test/test_factorize.m b/MATLAB_Tools/Factorize/Test/test_factorize.m
new file mode 100644
index 0000000..217b477
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_factorize.m
@@ -0,0 +1,484 @@
+function err = test_factorize (A, strategy)
+%TEST_FACTORIZE test the accuracy of the factorization object
+%
+% Example
+%   test_factorize (A) ;    % where A is square or rectangular, sparse or dense
+%   test_factorize (A, strategy) ;  % forces a particular strategy;
+%                           % works only if the matrix is compatible.
+%
+% See also test_all, factorize, inverse, mldivide
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+reset_rand ;
+if (nargin < 1)
+    A = rand (100) ;
+end
+
+if (nargin < 2)
+    strategy = '' ;
+end
+
+% do not check the sparsity of the result when using the SVD
+spcheck = ~(strcmp (strategy, 'svd')) ;
+
+err = 0 ;
+if (strcmp (strategy, 'ldl') && issparse (A) && ~isreal(A))
+    % do not test ldl on sparse complex matrices
+    return ;
+end
+
+[m, n] = size (A) ;
+if (min (m,n) > 0)
+    anorm = norm (A,1) ;
+else
+    anorm = 1 ;
+end
+
+is_symmetric = ((m == n) && (nnz (A-A') == 0)) ;
+
+for nrhs = 1:3
+
+    for bsparse = 0:1
+
+        b = rand (m,nrhs) ;
+        if (bsparse)
+            b = sparse (b) ;
+        end
+
+        %-----------------------------------------------------------------------
+        % test backslash and related methods
+        %-----------------------------------------------------------------------
+
+        for a = [1 pi (pi+1i)]
+
+            % method 0:
+            x = (a*A)\b ;
+            err = check_resid (err, anorm, a*A, x, b, spcheck) ;
+
+            % method 1:
+            S = inverse (A)/a ;
+            x = S*b ;
+            err = check_resid (err, anorm, a*A, x, b, spcheck) ;
+
+            % method 3:
+            F = testfac (A, strategy) ;
+            S = inverse (F)/a ;
+            x = S*b ;
+            err = check_resid (err, anorm, a*A, x, b, spcheck) ;
+
+            % method 4:
+            F = a*testfac (A, strategy) ;
+            x = F\b ;
+            err = check_resid (err, anorm, a*A, x, b, spcheck) ;
+
+            % method 5:
+            S = inverse (F) ;
+            x = S*b ;
+            err = check_resid (err, anorm, a*A, x, b, spcheck) ;
+
+            % method 6:
+            if (m == n)
+                [L, U, p] = lu (A, 'vector') ;
+                x = a * (U \ (L \ (b (p,:)))) ;
+                err = check_resid (err, anorm, A/a, x, b, spcheck) ;
+
+            % method 7:
+                if (is_symmetric)
+                    F = a*factorize (A, 'symmetric') ;
+                    x = F\b ;
+                    err = check_resid (err, anorm, a*A, x, b, spcheck) ;
+                else
+                    F = a*factorize (A, 'unsymmetric') ;
+                    x = F\b ;
+                    err = check_resid (err, anorm, a*A, x, b, spcheck) ;
+                end
+            end
+
+        end
+
+        clear S F
+
+        %------------------------------------------------------------------
+        % test transposed backslash and related methods
+        %------------------------------------------------------------------
+
+        b = rand (n,nrhs) ;
+        if (bsparse)
+            b = sparse (b) ;
+        end
+
+        for a = [1 pi (pi+1i)]
+
+            % method 0:
+            x = (a*A)'\b ;
+            err = check_resid (err, anorm, (a*A)', x, b, spcheck) ;
+
+            % method 1:
+            S = inverse (A) / a ;
+            x = S'*b ;
+            err = check_resid (err, anorm, (a*A)', x, b, spcheck) ;
+
+            % method 2:
+            F = a*testfac (A, strategy) ;
+            x = F'\b ;
+            err = check_resid (err, anorm, (a*A)', x, b, spcheck) ;
+
+            % method 3:
+            S = inverse (F') ;
+            x = S*b ;
+            err = check_resid (err, anorm, (a*A)', x, b, spcheck) ;
+        end
+
+        clear S F
+
+        %------------------------------------------------------------------
+        % test mtimes, times, plus, minus, rdivide, and ldivide
+        %------------------------------------------------------------------
+
+        for a = [1 pi pi+2i]
+
+            F = a*testfac (A, strategy) ;
+            S = inverse (F) ;
+            B = a*A ;   % F is the factorization of a*A
+
+            % test mtimes
+            d = rand (n,1)  ;
+            x = F*d ;
+            y = B*d ;
+            z = S\d ;
+            err = check_error (err, norm (mtx(x)-mtx(y),1)) ;
+            err = check_error (err, norm (mtx(x)-mtx(z),1)) ;
+
+            % test mtimes transpose
+            d = rand (m,1)  ;
+            x = F'*d ;
+            y = B'*d ;
+            z = S'\d ;
+            err = check_error (err, norm (mtx(x)-mtx(y),1)) ;
+            err = check_error (err, norm (mtx(x)-mtx(z),1)) ;
+
+            % test for scalars
+            for s = [1 42 3-2i]
+                E = s\B  - double (s\F) ; err = check_error (err, norm (E,1)) ;
+                E = B/s  - double (F/s) ; err = check_error (err, norm (E,1)) ;
+%               E = B.*s - F.*s ;       err = check_error (err, norm (E,1)) ;
+%               E = s.*B - s.*F ;       err = check_error (err, norm (E,1)) ;
+%               E = s.\B - s.\F ;       err = check_error (err, norm (E,1)) ;
+%               E = B./s - F./s ;       err = check_error (err, norm (E,1)) ;
+                E = B*s  - double (F*s) ; err = check_error (err, norm (E,1)) ;
+                E = s*B  - double (s*F) ; err = check_error (err, norm (E,1)) ;
+            end
+
+        end
+
+        clear S F C
+
+        %------------------------------------------------------------------
+        % test slash and related methods
+        %------------------------------------------------------------------
+
+        b = rand (nrhs,n) ;
+        if (bsparse)
+            b = sparse (b) ;
+        end
+
+        % method 0:
+        x = b/A ;
+        err = check_resid (err, anorm, A', x', b', spcheck) ;
+
+        % method 1:
+        S = inverse (A) ;
+        x = b*S ;
+        err = check_resid (err, anorm, A', x', b', spcheck) ;
+
+        % method 4:
+        F = testfac (A, strategy) ;
+        x = b/F ;
+        err = check_resid (err, anorm, A', x', b', spcheck) ;
+
+        % method 5:
+        S = inverse (F) ;
+        x = b*S ;
+        err = check_resid (err, anorm, A', x', b', spcheck) ;
+
+        % method 6:
+        if (m == n)
+            [L, U, p] = lu (A, 'vector') ;
+            x = (b / U) / L ; x (:,p) = x ;
+            err = check_resid (err, anorm, A', x', b', spcheck) ;
+        end
+
+        %------------------------------------------------------------------
+        % test transpose slash and related methods
+        %------------------------------------------------------------------
+
+        b = rand (nrhs,m) ;
+        if (bsparse)
+            b = sparse (b) ;
+        end
+
+        % method 0:
+        x = b/A' ;
+        err = check_resid (err, anorm, A, x', b', spcheck) ;
+
+        % method 1:
+        S = inverse (A)' ;
+        x = b*S ;
+        err = check_resid (err, anorm, A, x', b', spcheck) ;
+
+        % method 4:
+        F = testfac (A, strategy)' ;
+        x = b/F ;
+        err = check_resid (err, anorm, A, x', b', spcheck) ;
+
+        % method 5:
+        S = inverse (F) ;
+        x = b*S ;
+        err = check_resid (err, anorm, A, x', b', spcheck) ;
+
+        %------------------------------------------------------------------
+        % test double
+        %------------------------------------------------------------------
+
+        Y = double (inverse (A)) ;
+        if (m == n)
+            Z = inv (A) ;
+        else
+            Z = pinv (full (A)) ;
+        end
+        e = norm (Y-Z,1) ;
+        if (n > 0)
+            e = e / norm (Z,1) ;
+        end
+        err = check_error (e, err) ;
+
+        %------------------------------------------------------------------
+        % test subsref
+        %------------------------------------------------------------------
+
+        F = testfac (A, strategy) ;
+        Y = inverse (A) ;
+        if (numel (A) > 1)
+            if (F (end) ~= A (end))
+                error ('factorization subsref error') ;
+            end
+            if (F.A (end) ~= A (end))
+                error ('factorization subsref error') ;
+            end
+        end
+        if (n > 0)
+            if (F (1,1) ~= A (1,1))
+                error ('factorization subsref error') ;
+            end
+            if (F.A (1,1) ~= A (1,1))
+                error ('factorization subsref error') ;
+            end
+            e = abs (Y (1,1) - Z (1,1)) ;
+            err = check_error (e,err) ;
+            if (m > 1 && n > 1)
+                e = norm (Y (1:2,1:2) - Z (1:2,1:2), 1) ;
+                err = check_error (e,err) ;
+            end
+        end
+        if (m > 3 && n > 1)
+            if (any (F (2:end, 1:2) - A (2:end, 1:2)))
+                error ('factorization subsref error') ;
+            end
+            if (any (F (2:4, :) - A (2:4, :)))
+                error ('factorization subsref error') ;
+            end
+            if (any (F (:, 1:2) - A (:, 1:2)))
+                error ('factorization subsref error') ;
+            end
+        end
+
+        %------------------------------------------------------------------
+        % test transposed subsref
+        %------------------------------------------------------------------
+
+        FT = F' ;
+        YT = Y' ;
+        AT = A' ;
+        ZT = Z' ;
+        if (numel (AT) > 1)
+            if (FT (end) ~= AT (end))
+                error ('factorization subsref error') ;
+            end
+            if (F.A (end) ~= A (end))
+                error ('factorization subsref error') ;
+            end
+        end
+
+        if (n > 0)
+            if (FT (1,1) ~= AT (1,1))
+                error ('factorization subsref error') ;
+            end
+            if (F.A (1,1) ~= A (1,1))
+                error ('factorization subsref error') ;
+            end
+            e = abs (YT (1,1) - ZT (1,1)) ;
+            err = check_error (e,err) ;
+            if (m > 1 && n > 1)
+                e = norm (YT (1:2,1:2) - ZT (1:2,1:2), 1) ;
+                err = check_error (e,err) ;
+            end
+        end
+
+        if (m > 1 && n > 3)
+            if (any (FT (2:end, 1:2) - AT (2:end, 1:2)))
+                error ('factorization subsref error') ;
+            end
+            if (any (FT (2:4, :) - AT (2:4, :)))
+                error ('factorization subsref error') ;
+            end
+            if (any (FT (:, 1:2) - AT (:, 1:2)))
+                error ('factorization subsref error') ;
+            end
+        end
+
+        %------------------------------------------------------------------
+        % test update/downdate
+        %------------------------------------------------------------------
+
+        if (isa (F, 'factorization_chol_dense'))
+            w = rand (n,1) ;
+            b = rand (n,1) ;
+            % update
+            G = cholupdate (F,w) ;
+            x = G\b ;
+            err = check_resid (err, anorm, A+w*w', x, b, spcheck) ;
+            % downdate
+            G = cholupdate (G,w,'-') ;
+            x = G\b ;
+            err = check_resid (err, anorm, A, x, b, spcheck) ;
+            clear G
+        end
+
+        %------------------------------------------------------------------
+        % test size
+        %------------------------------------------------------------------
+
+        [m1, n1] = size (F) ;
+        [m, n] = size (A) ;
+        if (m1 ~= m || n1 ~= n)
+            error ('size error') ;
+        end
+        [m1, n1] = size (Y) ;
+        if (m1 ~= n || n1 ~= m)
+            error ('pinv size error') ;
+        end
+        if (size (Y,1) ~= n || size (Y,2) ~= m)
+            error ('pinv size error') ;
+        end
+        if (size (F,1) ~= m || size (F,2) ~= n)
+            error ('size error') ;
+        end
+
+        %------------------------------------------------------------------
+        % test mtimes
+        %------------------------------------------------------------------
+
+        clear S F Y
+
+        for a = [1 pi pi+2i]
+
+            F = a * testfac (A, strategy) ;
+            S = inverse (F) ;
+            d = rand (1,m) ;
+            x = d*F ;
+            y = d*(A*a) ;
+            z = d/S ;
+
+            err = check_error (err, norm (mtx(x)-mtx(y),1)) ;
+            err = check_error (err, norm (mtx(x)-mtx(z),1)) ;
+
+            d = rand (1,n) ;
+            x = d*F' ;
+            y = d*(A*a)' ;
+            z = d/S' ;
+
+            err = check_error (err, norm (mtx(x)-mtx(y),1)) ;
+            err = check_error (err, norm (mtx(x)-mtx(z),1)) ;
+
+        end
+
+        %------------------------------------------------------------------
+        % test inverse
+        %------------------------------------------------------------------
+
+        Y = double (inverse (inverse (A))) ;
+        e = norm (A-Y,1) ;
+        if (e > 0)
+            error ('inverse error') ;
+        end
+
+        %------------------------------------------------------------------
+        % test mldivide and mrdivide with a matrix b, transpose, etc
+        %------------------------------------------------------------------
+
+        if (max (m,n) < 100)
+            F = testfac (A, strategy) ;
+            B = rand (m,n) ;
+            err = check_error (err, norm (B\A - mtx(B\F), 1) / anorm) ;
+            err = check_error (err, norm (A/B - mtx(F/B), 1) / anorm) ;
+            err = check_error (err, norm (B*pinv(full(A))-mtx(B/F), 1) / anorm);
+        end
+    end
+end
+
+fprintf ('.') ;
+
+%--------------------------------------------------------------------------
+
+function err = check_resid (err, anorm, A, x, b, spcheck)
+[m, n] = size (A) ;
+
+x = mtx (x) ;
+
+if (m <= n)
+    e = norm (A*x-b,1) / (anorm + norm (x,1)) ;
+else
+    e = norm (A'*(A*x)-A'*b,1) / (anorm + norm (x,1)) ;
+end
+
+if (min (m,n) > 1 && spcheck)
+    if (issparse (A) && issparse (b))
+        if (~issparse (x))
+            error ('x must be sparse') ;
+        end
+    else
+        if (issparse (x))
+            error ('x must be full') ;
+        end
+    end
+end
+
+err = check_error (e, err) ;
+
+%--------------------------------------------------------------------------
+
+function x = mtx (x)
+% make sure that x is a matrix.  It might be a factorization.
+if (isobject (x))
+    x = double (x) ;
+end
+
+%--------------------------------------------------------------------------
+
+function err = check_error (err1, err2)
+err = max (err1, err2) ;
+if (err > 1e-8)
+    fprintf ('error: %8.3e\n', full (err)) ;
+    error ('error too high') ;
+end
+err = full (err) ;
+
+%--------------------------------------------------------------------------
+
+function F = testfac (A, strategy)
+if (isempty (strategy))
+    F = factorize (A) ;
+else
+    F = factorize (A, strategy) ;
+end
diff --git a/MATLAB_Tools/Factorize/Test/test_function.m b/MATLAB_Tools/Factorize/Test/test_function.m
new file mode 100644
index 0000000..78693a4
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_function.m
@@ -0,0 +1,317 @@
+function err = test_function (A, strategy, burble)
+%TEST_FUNCTION test various functions applied to a factorize object
+%
+% Example
+%   test_functions (A) ;    % where A is square or rectangular, sparse or dense
+%
+% See also test_all, factorize, inverse, mldivide
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+reset_rand ;
+
+state = warning ('off', 'MATLAB:illConditionedMatrix') ;
+
+if (nargin < 1)
+    A = rand (10) ;
+end
+if (nargin < 2)
+    strategy = 'default' ;
+end
+if (nargin < 3)
+    burble = 0 ;
+end
+
+err = 0 ;
+[m, n] = size (A) ;
+F = factorize (A, strategy) ;
+
+%   C = rand (m,n) ;
+%   if (~isempty (A)) 
+%       C (1,1) = A (1,1) ;
+%   end
+%   if (issparse (A))
+%       C = sparse (A) ;
+%   end
+%   H = factorize (C, strategy) ; %#ok
+
+%-------------------------------------------------------------------------------
+% implicitly-defined methods that return the correct result:
+%-------------------------------------------------------------------------------
+
+if (m == 10)
+    burble = 1 ;
+    % only do these pedantic tests on a few test matrices
+    assert (~ismethod (F, 'ismethod')) ;
+    assert (~ismethod (F, 'iscell')) ;      assert (~iscell (F)) ;
+    assert (~ismethod (F, 'iscellstr')) ;   assert (~iscellstr (F)) ;
+    assert (~ismethod (F, 'ischar')) ;      assert (~ischar (F)) ;
+    assert (~ismethod (F, 'iscom')) ;       assert (~iscom (F)) ;
+    assert (~ismethod (F, 'isinteger')) ;   assert (~isinteger (F)) ;
+    assert (~ismethod (F, 'ishandle')) ;    assert (~ishandle (F)) ;
+    assert (~ismethod (F, 'isobject')) ;    assert ( isobject (F)) ;
+    assert (~ismethod (F, 'isinterface')) ; assert (~isinterface (F)) ;
+    assert (~ismethod (F, 'isjava')) ;      assert (~isjava (F)) ;
+    assert (~ismethod (F, 'iskeyword')) ;   assert (~iskeyword (F)) ;
+    assert (~ismethod (F, 'isletter')) ;    assert (~isletter (F)) ;
+    assert (~ismethod (F, 'isspace')) ;     assert (~isspace (F)) ;
+    assert (~ismethod (F, 'islogical')) ;   assert (~islogical (F)) ;
+    assert (~ismethod (F, 'isstruct')) ;    assert (~isstruct (F)) ;
+    assert (~ismethod (F, 'isvarname')) ;   assert (~isvarname (F)) ;
+    assert (~ismethod (F, 'isglobal')) ;    % not tested since it's deprecated
+    assert (~ismethod (F, 'ndims')) ;       assert (ndims (F) == 2) ;
+    assert (~ismethod (F, 'isequal')) ;
+    assert (~ismethod (F, 'isequalwithequalnans')) ;
+    % One could imagine that these return length(F.A) and numel(F.A), but if
+    % they are defined that way, F.A fails because the size of F is wrong.
+    assert (~ismethod (F, 'length')) ;      assert (length (F) == 1) ;
+    assert (~ismethod (F, 'numel')) ;       assert (numel (F) == 1) ;
+end
+
+G = factorize (A, strategy) ;
+any_nans = any (any (isnan (F.A))) || any (any (isnan (double (inverse (F))))) ;
+if (~any_nans)
+    assert ( isequal (F, G)) ;
+    assert (~isequal (F, inverse (F))) ;
+end
+assert ( isequalwithequalnans (F, G)) ;
+assert (~isequalwithequalnans (F, inverse (F))) ;
+clear G
+
+%-------------------------------------------------------------------------------
+% explicit methods
+%-------------------------------------------------------------------------------
+
+if (min (m,n) < 2 || m == 10)
+
+    % explicitly-defined methods, tested here:
+    assert (ismethod (F, 'isfloat')) ;  assert ( isfloat (F)) ;
+    assert (ismethod (F, 'isnumeric')); assert ( isnumeric (F)) ;
+    assert (ismethod (F, 'issingle')) ; assert (~issingle (F)) ;
+    assert (ismethod (F, 'isreal')) ;   assert (isreal (F) == isreal (A)) ;
+    assert (ismethod (F, 'isempty')) ;  assert (isempty (F) == isempty (A)) ;
+    assert (ismethod (F, 'isvector')) ; assert (isvector (F) == isvector (A)) ;
+    assert (ismethod (F, 'isscalar')) ; assert (isscalar (F) == isscalar (A)) ;
+    assert (ismethod (F, 'issparse')) ; assert (issparse (F) == issparse (A)) ;
+    assert (ismethod (F, 'size')) ;     assert (isequal (size (A), size (F))) ;
+
+    if (~any_nans)
+        assert (ismethod (F, 'abs')) ;    assert (isequal (abs (F), abs (F.A)));
+        assert (ismethod (F, 'double')) ; assert (isequal (A, double (F))) ;
+    end
+
+    assert (ismethod (F, 'isfield')) ;
+    assert ( isfield (F, 'A')) ;
+    assert ( isfield (F, 'Factors')) ;
+    assert ( isfield (F, 'is_inverse')) ;
+    assert ( isfield (F, 'is_ctrans')) ;
+    assert ( isfield (F, 'alpha')) ;
+    assert ( isfield (F, 'kind')) ;
+    assert (~isfield (F, 'anthing_else')) ;
+
+    assert (ismethod (F, 'isa')) ;
+    assert ( isa (F, 'double')) ;
+    assert (~isa (F, 'logical')) ;
+    assert (~isa (F, 'char')) ;
+    assert (~isa (F, 'single')) ;
+    assert ( isa (F, 'float')) ;
+    assert (~isa (F, 'int8')) ;
+    assert (~isa (F, 'uint8')) ;
+    assert (~isa (F, 'int16')) ;
+    assert (~isa (F, 'uint16')) ;
+    assert (~isa (F, 'int32')) ;
+    assert (~isa (F, 'uint32')) ;
+    assert (~isa (F, 'int64')) ;
+    assert (~isa (F, 'uint64')) ;
+    assert (~isa (F, 'integer')) ;
+    assert ( isa (F, 'numeric')) ;
+    assert (~isa (F, 'cell')) ;
+    assert (~isa (F, 'struct')) ;
+    assert (~isa (F, 'function_handle')) ;
+    assert ( isa (F, 'factorization')) ;
+    assert (~isa (F, 'anything_else')) ;
+
+    % explicitly-defined methods, but tested elsewhere:
+    assert (ismethod (F, 'mldivide')) ;
+    assert (ismethod (F, 'mldivide_subclass')) ;
+    assert (ismethod (F, 'mrdivide')) ;
+    assert (ismethod (F, 'mrdivide_subclass')) ;
+    assert (ismethod (F, 'inverse')) ;
+    assert (ismethod (F, 'ctranspose')) ;
+    assert (ismethod (F, 'end')) ;
+    assert (ismethod (F, 'mtimes')) ;
+    assert (ismethod (F, 'subsref')) ;
+    assert (ismethod (F, 'disp')) ;
+    assert (ismethod (F, 'condest')) ;
+    assert (ismethod (F, 'struct')) ;
+    if (isa (F, 'factorization_chol_dense'))
+        assert (ismethod (F, 'cholupdate')) ;
+        if (burble)
+            methods (F)
+        end
+    end
+    if (isa (F, 'factorization_svd'))
+        assert (ismethod (F, 'cond')) ;
+        assert (ismethod (F, 'norm')) ;
+        assert (ismethod (F, 'rank')) ;
+        assert (ismethod (F, 'null')) ;
+        assert (ismethod (F, 'orth')) ;
+        assert (ismethod (F, 'pinv')) ;
+        assert (ismethod (F, 'svd')) ;
+        if (burble)
+            methods (F)
+        end
+    else
+        assert (~ismethod (F, 'cond')) ;
+        assert (~ismethod (F, 'norm')) ;
+        assert (~ismethod (F, 'rank')) ;
+        assert (~ismethod (F, 'null')) ;
+        assert (~ismethod (F, 'orth')) ;
+        assert (~ismethod (F, 'pinv')) ;
+        assert (~ismethod (F, 'svd')) ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% 1-norm and condition estimates
+%-------------------------------------------------------------------------------
+
+if (m == n)
+
+    % norm(A,1)
+    reset_rand ;
+    if (isempty (A))
+        nest1 = 0 ;
+    else
+        nest1 = full (normest1 (A)) ;
+    end
+    if (isa (F, 'factorization_svd'))
+        nexact = norm (F, 1) ;
+    else
+        nexact = norm (A, 1) ;
+    end
+    if (burble)
+        fprintf ('\nnorm(A,1), exact:             %g\n', nexact) ;
+        fprintf ('  MATLAB normest1(A)          %g\n', nest1) ;
+    end
+
+    % norm(inv(A),1)
+    if (isempty (A))
+        imine = 0 ;
+    else
+        imine = full (normest1 (inverse (A))) ;
+    end
+    if (isa (F, 'factorization_svd'))
+        iexact = norm (inverse (F), 1) ;
+    else
+        iexact = norm (inv (A), 1) ;
+    end
+    try
+        reset_rand ;
+        iest = full (normest1 (inv (A))) ;
+    catch %#ok
+        iest = -1 ;
+    end
+    if (burble)
+        fprintf ('\nnorm (inv(A),1) exact:        %g\n', iexact) ;
+        fprintf ('  MATLAB normest1 (inv (A)):  %g\n', iest) ;
+        fprintf ('  normest1 (inverse (F)):     %g\n', imine) ;
+    end
+
+    reset_rand ;
+    kest = full (condest (A)) ;
+    reset_rand ;
+    kF = full (condest (F)) ;
+    kS = full (condest (inverse (F))) ;
+    err = max (err, abs (rankest (F) - F.A_rank)) ;
+
+    kexact = -1 ;
+    kexact2 = -1 ;
+    kexact3 = -1 ;
+    if (isa (F, 'factorization_svd'))
+        try
+            kexact = cond (F, 1) ;
+            kexact1 = F.A_cond ;
+            kexact2 = cond (F) ;
+            err = max (err, abs (kexact1-kexact2)) ;
+            kexact3 = cond (full (A)) ;
+            err = max (err, abs (kexact2-kexact3) / max (1, abs (kexact3))) ;
+        catch %#ok
+        end
+    end
+
+    if (burble)
+        fprintf ('\n  cond (A,1), exact:          %g\n', kexact) ;
+        fprintf ('  MATLAB condest(A):          %g\n', kest) ;
+        fprintf ('  condest(F):                 %g\n', kF) ;
+        fprintf ('  condest(inverse(A)):        %g\n', kS) ;
+        fprintf ('  cond (A,2), exact:          %g\n', kexact2) ;
+        fprintf ('  cond (F,2), exact:          %g\n', kexact3) ;
+        fprintf ('  rankest %d %d\n', rankest (F), F.A_rank) ;
+        if (~isempty (F.A_condest))
+            fprintf ('  cheap condest:              %g\n', F.A_condest) ;
+        end
+    end
+
+    if (err > 1e-9)
+        display (A) ;
+        display (full (A)) ;
+        display (strategy) ;
+        display (err) ;
+        error ('error too high!') ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% compute explicit entries of the inverse
+
+if (~any_nans && ~isempty (A))
+    P1 = pinv (full (A)) ;
+    P2 = inverse (A) ;
+    s1 = P1 (1) ;
+    s2 = P2 (1) ;
+    err = max (err, abs (s1-s2) / max (1, abs (s1))) ;
+    s1 = P1 (:,1) ;
+    s2 = P2 (:,1) ;
+    err = max (err, norm (s1-s2,1) / max (1, norm (s1,1))) ;
+    s1 = P1 (1,:) ;
+    s2 = P2 (1,:) ;
+    err = max (err, norm (s1-s2,1) / max (1, norm (s1,1))) ;
+end
+
+%-------------------------------------------------------------------------------
+% test struct
+%-------------------------------------------------------------------------------
+
+K = struct (F) ;
+if (burble)
+    disp ('K =') ;
+    disp (K) ;
+end
+
+if (~any_nans)
+    assert (isequal (K.A, F.A)) ;
+    assert (isequal (K.Factors, F.Factors)) ;
+end
+assert (isequal (K.kind, F.kind)) ;
+assert (isequal (K.is_inverse, F.is_inverse)) ;
+assert (isequal (K.is_ctrans, F.is_ctrans)) ;
+assert (isequal (K.alpha, F.alpha)) ;
+
+K = struct (inverse (F)') ;
+if (burble)
+    disp ('K =') ;
+    disp (K) ;
+end
+
+if (~any_nans)
+    assert (isequal (K.A, F.A)) ;
+    assert (isequal (K.Factors, F.Factors)) ;
+end
+assert (isequal (K.is_inverse, ~F.is_inverse)) ;
+assert (isequal (K.is_ctrans, ~F.is_ctrans)) ;
+assert (isequal (K.alpha, F.alpha)) ;
+assert (isequal (K.kind, F.kind)) ;
+
+% restore user's warnings
+warning (state) ;
diff --git a/MATLAB_Tools/Factorize/Test/test_functions.m b/MATLAB_Tools/Factorize/Test/test_functions.m
new file mode 100644
index 0000000..a1644c4
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_functions.m
@@ -0,0 +1,63 @@
+function err = test_functions
+%TEST_FUNCTIONS test various functions applied to a factorize object
+% on a set of matrices
+%
+% Example:
+%   test_functions
+%
+% See also test_all, factorize, inverse, mldivide
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('\n----- Test functions:\n') ;
+reset_rand ;
+err = 0 ;
+
+err = max (err, test_function ([ ])) ;
+err = max (err, test_function ([ ], 'ldl', 1)) ;
+err = max (err, test_function (eye (4))) ;
+err = max (err, test_function (eye (4,3))) ;
+err = max (err, test_function (eye (3,4))) ;
+
+err = max (err, test_function (inf*eye (4))) ;
+err = max (err, test_function (inf*eye (4,3))) ;
+err = max (err, test_function (inf*eye (3,4))) ;
+
+err = max (err, test_function (nan*eye (4))) ;
+err = max (err, test_function (nan*eye (4,3))) ;
+err = max (err, test_function (nan*eye (3,4))) ;
+
+A = rand (3) ;
+err = max (err, test_function (A'*A, [ ], 1)) ;
+err = max (err, test_function (A, 'svd', 1)) ;
+err = max (err, test_function) ;
+
+A = rand (10) ;
+A = A' + A + 20*eye(10) ;
+err = max (err, test_function (A, 'svd', 1)) ;
+err = max (err, test_function (A, 'chol', 1)) ;
+
+for imaginary = 0:1
+    for m = 1:6
+        for n = 1:6
+            fprintf ('.') ;
+            A = rand (m,n) ;
+            if (imaginary)
+                A = A + 1i * rand (m,n) ;
+            end
+            err = max (err, test_function (A)) ;
+            A = sparse (A) ;
+            err = max (err, test_function (A)) ;
+            if (m < n)
+                A = A*A'  ;
+            else
+                A = A'*A  ;
+            end
+            err = max (err, test_function (A)) ;
+            A = full (A) ;
+            err = max (err, test_function (A)) ;
+        end
+    end
+end
+
+fprintf ('\ntest_functions, max error: %g\n', err) ;
diff --git a/MATLAB_Tools/Factorize/Test/test_performance.m b/MATLAB_Tools/Factorize/Test/test_performance.m
new file mode 100644
index 0000000..8b706c5
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_performance.m
@@ -0,0 +1,385 @@
+function err = test_performance
+%TEST_PERFORMANCE compare performance of factorization/solve methods.
+% Returns the largest relative residual seen.
+%
+% Example
+%   err = test_performance
+%
+% See also test_all, factorize, inverse, mldivide
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('\nPerformance comparisons of 4 methods:\n') ;
+fprintf ('    backslash:  A\\b, or L\\b (and related) for solve times.\n') ;
+fprintf ('    linsolve:   a built-in MATLAB function\n') ;
+fprintf ('    factorize:  the factorization object\n') ;
+fprintf ('    inv:        x=inv(A)*b, the explicit inverse (ack!)\n') ;
+fprintf ('Run times are in seconds.\n') ;
+fprintf ('Time relative to best time is in parentheses (lower is better).\n') ;
+
+% linsolve options:
+A_is_posdef.POSDEF = true ;     % for x = A\b where A is sym. pos. definite
+A_is_posdef.SYM = true ;
+lsolve.LT = true ;              % for x = L\b where L is lower triangular
+usolve.UT = true ;              % for x = U\b where U is upper triangular
+ltsolve.LT = true ;             % for x = L'b where L is lower triangular
+ltsolve.TRANSA = true ;
+
+nn = [50 100 500 1000] ;        % matrix sizes to test
+ns = length (nn) ;
+tmax = 1 ;                      % minimum testing time
+err = 0 ;                       % largest relative residual seen 
+
+for posdef = 0:1
+
+    if (posdef)
+        fprintf ('\n------------------ For positive definite matrices:\n');
+        strategy = 'chol' ;
+    else
+        fprintf ('\n------------------ For unsymmetric matrices:\n') ;
+        strategy = 'default' ;
+    end
+
+    Tfactor = zeros (ns,4) ;
+    Tsolve  = zeros (ns,4) ;
+
+    %----------------------------------------------------------------------
+    % compare factorizations times (plus a single solve)
+    %----------------------------------------------------------------------
+
+    fprintf ('\nCompare factorization times:\n') ;
+    for i = 1:ns
+        n = nn (i) ;
+
+        fprintf ('n %4d ', n) ;
+
+        A = rand (n) ;
+        if (posdef)
+            A = A'*A + eye (n) ;
+        end
+        anorm = norm (A,1) ;
+        b = rand (n,1) ;
+
+        % method 1: backslash
+        t = 0 ;
+        k = 0 ;
+        tic
+        while (t < tmax)
+            x = A\b ;
+            k = k + 1 ;
+            t = toc ;
+        end
+        Tfactor (i,1) = t / k ;
+        err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+        clear x
+
+        if (posdef)
+
+            % method 2: linsolve (pos. definite case)
+            t = 0 ;
+            k = 0 ;
+            tic
+            while (t < tmax)
+                x = linsolve (A,b, A_is_posdef) ;
+                k = k + 1 ;
+                t = toc ;
+            end
+            Tfactor (i,2) = t / k ;
+            err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+            clear x
+
+        else
+
+            % method 2: linsolve (unsymmetric case)
+            t = 0 ;
+            k = 0 ;
+            tic
+            while (t < tmax)
+                x = linsolve (A,b) ;
+                k = k + 1 ;
+                t = toc ;
+            end
+            Tfactor (i,2) = t / k ;
+            err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+            clear x
+
+        end
+
+        % method 3: factorize method
+        t = 0 ;
+        k = 0 ;
+        tic
+        while (t < tmax)
+            F = factorize (A, strategy) ;
+            x = F\b ;
+            k = k + 1 ;
+            t = toc ;
+        end
+        Tfactor (i,3) = t / k ;
+        err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+        clear x F
+
+        % method 4: inv method (ack!)
+        t = 0 ;
+        k = 0 ;
+        tic
+        while (t < tmax)
+            S = inv (A) ;
+            x = S*b ;                                                  %#ok
+            k = k + 1 ;
+            t = toc ;
+        end
+        Tfactor (i,4) = t / k ;
+        err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+        clear x S
+
+        tbest = min (Tfactor (i,:)) ;
+        fprintf ('tbest %10.6f :\n', tbest) ;
+        fprintf ('    backslash (%5.2f)\n', Tfactor (i,1) / tbest);
+        fprintf ('    linsolve  (%5.2f)\n', Tfactor (i,2) / tbest) ;
+        fprintf ('    factorize (%5.2f)\n', Tfactor (i,3) / tbest) ;
+        fprintf ('    inv       (%5.2f)\n', Tfactor (i,4) / tbest) ;
+
+    end
+
+    %----------------------------------------------------------------------
+    % compare solve times
+    %----------------------------------------------------------------------
+
+    fprintf ('\nCompare solve times:\n') ;
+    for i = 1:ns
+        n = nn (i) ;
+
+        fprintf ('n %4d ', n) ;
+
+        A = rand (n) ;
+        if (posdef)
+            A = A'*A + eye (n) ;
+        end
+        b = rand (n,1) ;
+        anorm = norm (A,1) ;
+
+        if (posdef)
+            L = chol (A, 'lower') ;
+        else
+            [L, U, p] = lu (A,'vector') ;
+        end
+
+        S = inv (A) ;
+        F = factorize  (A) ;
+
+        if (posdef)
+
+            % method 1: backslash (pos. definite case)
+            t = 0 ;
+            k = 0 ;
+            tic
+            while (t < tmax)
+                x = L' \ (L\b) ;
+                k = k + 1 ;
+                t = toc ;
+            end
+            Tsolve (i,1) = t / k ;
+            err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+            clear x
+
+            % method 2: linsolve (pos. definite case)
+            t = 0 ;
+            k = 0 ;
+            tic
+            while (t < tmax)
+                x = linsolve (L, linsolve (L, b, lsolve), ltsolve) ;
+                k = k + 1 ;
+                t = toc ;
+            end
+            Tsolve (i,2) = t / k ;
+            err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+            clear x
+
+        else
+
+            % method 1: backslash (unsymmetric case)
+            t = 0 ;
+            k = 0 ;
+            tic
+            while (t < tmax)
+                x = U \ (L \ (b (p))) ;
+                k = k + 1 ;
+                t = toc ;
+            end
+            Tsolve (i,1) = t / k ;
+            err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+            clear x
+
+            % method 2: linsolve (unsymmetric case)
+            t = 0 ;
+            k = 0 ;
+            tic
+            while (t < tmax)
+                x = linsolve (U, linsolve (L, b (p), lsolve), usolve) ;
+                k = k + 1 ;
+                t = toc ;
+            end
+            Tsolve (i,2) = t / k ;
+            err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+            clear x
+
+        end
+
+        % method 3: factorize object
+        t = 0 ;
+        k = 0 ;
+        tic
+        while (t < tmax)
+            x = F\b ;
+            k = k + 1 ;
+            t = toc ;
+        end
+        Tsolve (i,3) = t / k ;
+        err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+        clear x
+
+        % method 4: "inv" method (ack!)
+        t = 0 ;
+        k = 0 ;
+        tic
+        while (t < tmax)
+            x = S*b ;           %#ok
+            k = k + 1 ;
+            t = toc ;
+        end
+        Tsolve (i,4) = t / k ;
+        err = max (err, norm (A*x-b,1) / (anorm + norm (x,1))) ;
+        clear x
+
+        tbest = min (Tsolve (i,:)) ;
+
+        fprintf ('tbest %10.6f :\n', tbest) ;
+        fprintf ('    backslash (%5.2f)\n', Tsolve (i,1) / tbest);
+        fprintf ('    linsolve  (%5.2f)\n', Tsolve (i,2) / tbest) ;
+        fprintf ('    factorize (%5.2f)\n', Tsolve (i,3) / tbest) ;
+        fprintf ('    inv       (%5.2f)\n', Tsolve (i,4) / tbest) ;
+
+        clear F S L U p
+
+    end
+
+    % determine break-even values for inv
+    fprintf ('\nBreak-even values K for inv vs the other methods\n') ;
+    fprintf ('(# of solves must exceed K for inv(A)*b to be faster):\n') ;
+    for i = 1:ns
+        n = nn (i) ;
+        s = zeros (3,1) ;
+        for t = 1:3
+            if (Tfactor (i,4) > Tfactor (i,t) && ...
+                Tsolve (i,4) > Tsolve (i,t))
+                % inv is always slower, for any K
+                s (t) = inf ;
+            elseif (Tfactor (i,4) < Tfactor (i,t) && ...
+                Tsolve (i,4) < Tsolve (i,t))
+                % inv is always faster, for any K
+                s (t) = 1 ;
+            else
+                s (t) = (Tfactor (i,4) - Tfactor (i,t)) / ...
+                         (Tsolve (i,t) - Tsolve (i,4)) ;
+            end
+        end
+
+        fprintf ('n %4d\n', n) ;
+        fprintf ('    # solves vs backslash  %8.1f\n', max (1, s (1))) ;
+        fprintf ('    # solves vs linsolve:  %8.1f\n', max (1, s (2))) ;
+        fprintf ('    # solves vs factorize: %8.1f\n', max (1, s (3))) ;
+    end
+
+end
+
+%--------------------------------------------------------------------------
+% compute the Schur complement, S = A-B*inv(D)*C
+%--------------------------------------------------------------------------
+
+fprintf ('\nSchur complement, S=A-B*inv(D)*C or A-B(D\\C),\n') ;
+fprintf ('where A, B, C, and D are square and unsymmetric.\n') ;
+fprintf ('"inverse" means S=A-B*inverse(D)*C, which does not actually\n') ;
+fprintf ('use the inverse, but uses the factorization object instead.\n') ;
+
+Tschur = zeros (ns,5) ;
+
+for i = 1:ns
+    n = nn (i) ;
+    fprintf ('n %4d ', n) ;
+
+    A = rand (n) ;
+    B = rand (n) ;
+    C = rand (n) ;
+    D = rand (n) ;
+
+    % method 1: backslash
+    t = 0 ;
+    k = 0 ;
+    tic
+    while (t < tmax)
+        S = A - B*(D\C) ;                                              %#ok
+        k = k + 1 ;
+        t = toc ;
+    end
+    Tschur (i,1) = t / k ;
+    clear S
+
+    % method 2: linsolve
+    t = 0 ;
+    k = 0 ;
+    tic
+    while (t < tmax)
+        S = A - B * linsolve (D,C) ;                                   %#ok
+        k = k + 1 ;
+        t = toc ;
+    end
+    Tschur (i,2) = t / k ;
+    clear S
+
+    % method 3: factorize object
+    t = 0 ;
+    k = 0 ;
+    tic
+    while (t < tmax)
+        S = A - B*(factorize(D)\C) ;                                   %#ok
+        k = k + 1 ;
+        t = toc ;
+    end
+    Tschur (i,3) = t / k ;
+    clear F S
+
+    % method 4: inverse, with the factorize object
+    t = 0 ;
+    k = 0 ;
+    tic
+    while (t < tmax)
+        S = A - B*inverse(D)*C ;                                       %#ok
+        k = k + 1 ;
+        t = toc ;
+    end
+    Tschur (i,4) = t / k ;
+    clear S
+
+    % method 5: "inv" method, using the explicit inverse (ack!)
+    t = 0 ;
+    k = 0 ;
+    tic
+    while (t < tmax)
+        S = A - B*inv(D)*C ;                                           %#ok
+        k = k + 1 ;
+        t = toc ;
+    end
+    Tschur (i,5) = t / k ;
+    clear S
+
+    tbest = min (Tschur (i,:)) ;
+
+    fprintf ('tbest %10.6f :\n', tbest) ;
+    fprintf ('    backslash (%5.2f)\n', Tschur (i,1) / tbest);
+    fprintf ('    linsolve  (%5.2f)\n', Tschur (i,2) / tbest) ;
+    fprintf ('    factorize (%5.2f)\n', Tschur (i,3) / tbest) ;
+    fprintf ('    inv       (%5.2f)\n', Tschur (i,4) / tbest) ;
+
+end
+
diff --git a/MATLAB_Tools/Factorize/Test/test_svd.m b/MATLAB_Tools/Factorize/Test/test_svd.m
new file mode 100644
index 0000000..ea46329
--- /dev/null
+++ b/MATLAB_Tools/Factorize/Test/test_svd.m
@@ -0,0 +1,214 @@
+function err = test_svd (A)
+%TEST_SVD  test factorize(A,'svd') and factorize(A,'cod') for a given matrix
+%
+% Example
+%   err = test_svd (A) ;
+%
+% See also test_all
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('.') ;
+
+if (nargin < 1)
+    % has rank 3
+    A = magic (4) ;
+end
+
+[m, n] = size (A) ;
+err = 0 ;
+
+for st = 0:1
+
+    if (st == 0)
+        F = factorize (A, 'svd') ;
+        Acond = cond (F) ;
+    else
+        F = factorize (A, 'cod') ;
+    end
+    Apinv = pinv (full (A)) ;
+
+    if (st == 0)
+        assert (ismethod (F, 'norm')) ;
+        assert (ismethod (F, 'pinv')) ;
+        Anorm = norm (full (A)) ;
+        Ainvnorm = norm (pinv (full (A))) ;
+        Fnorm = norm (F) ;
+        e = abs (Anorm - Fnorm) ;
+        Anorm = max (Anorm, Fnorm) ;
+        if (Anorm > 0)
+            e = e / Anorm ;
+        end
+        err = check_err (err, e) ;
+        Anorm = max (Anorm, 1) ;
+    end
+
+    % if B=pinv(A), then A*B*A=A and B*A*B=B
+    B = inverse (F) ;
+    Bnorm = norm (double (B), 1) ;
+    err = check_err (err, ...
+        norm (double(A*B*A) - A, 1) / (Anorm^2 * Bnorm)) ;
+    err = check_err (err, ...
+        norm (double(B*A*B) - double(B), 1) / (Anorm * Bnorm^2)) ;
+
+    for bsparse = 0:1
+        b = rand (m, 1) ;
+        if (bsparse)
+            b = sparse (b) ;
+        end
+        x = Apinv*b ;
+        y = F\b ;
+        if (st == 0)
+            z = pinv(F)*b ;
+        else
+            z = inverse (F)*b ;
+        end
+        if (st == 0 || Acond < 1e13)
+            % skip this for COD for very ill-conditioned problems
+            x = double (x) ;
+            y = double (y) ;
+            z = double (z) ;
+            err = check_err (err, norm (x - y) / (Anorm * norm (x) + norm (b)));
+            err = check_err (err, norm (x - z) / (Anorm * norm (x) + norm (b)));
+        end
+
+        c = rand (1, n) ;
+        if (bsparse)
+            c = sparse (c) ;
+        end
+        x = c*Apinv ;
+        y = c/F ;
+        if (st == 0)
+            z = c*pinv(F) ;
+        else
+            z = c*inverse(F) ;
+        end
+        if (st == 0 || Acond < 1e13)
+            % skip this for COD for very ill-conditioned problems
+            x = double (x) ;
+            y = double (y) ;
+            z = double (z) ;
+            err = check_err (err, norm (x - y) / (Anorm * norm (x) + norm (b)));
+            err = check_err (err, norm (x - z) / (Anorm * norm (x) + norm (b)));
+        end
+    end
+
+    if (st == 0)
+        assert (ismethod (F, 'rank')) ;
+        arank = rank (full (A)) ;
+        if (arank ~= rank (F))
+            fprintf ('\nrank of A: %d, rank of F: %d\n', arank, rank (F)) ;
+            fprintf ('singular values:\n') ;
+            s1 = svd (A) ;
+            s2 = F.Factors.S ;
+            disp ([s1 s2])
+            error ('rank mismatch!') ;
+        end
+
+        assert (ismethod (F, 'cond')) ;
+        c1 = cond (full (A)) ;
+        c2 = cond (F) ;
+        if (rank (F) == min (m,n))
+            e = abs (c1 - c2) ;
+            if (max (c1, c2) > 0)
+                e = e / max (c1, c2) ;
+            end
+            % fprintf ('cond err: %g\n', e) ;
+            err = check_err (err, e) ;
+        else
+            % both c1 and c2 should be large
+            tol = max (m,n) * eps (norm (F)) ;
+            assert (c1 > norm (F) / tol) ;
+            assert (c2 > norm (F) / tol) ;
+        end
+
+        Z = null (F) ;
+        e = norm (A*Z) / Anorm  ;
+        % fprintf ('null space err %g (%g)\n', e, err) ;
+        err = check_err (err, e) ;
+
+        [U1, S1, V1] = svd (F) ;
+        [U2, S2, V2] = svd (full (A)) ;
+        err = check_err (err, norm (U1-U2)) ;
+        err = check_err (err, norm (S1-S2) / Anorm)  ;
+        err = check_err (err, norm (V1-V2)) ;
+        err = check_err (err, norm (U1*S1*V1'-U2*S2*V2') / Anorm) ;
+
+        [U1, S1, V1] = svd (inverse (F)) ;
+        [U2, S2, V2] = svd (pinv (full (A))) ;
+        err = check_err (err, norm (S1-S2) / Ainvnorm)  ;
+        err = check_err (err, norm (U1*S1*V1'-U2*S2*V2') / Ainvnorm) ;
+
+        [U1, S1, V1] = svd (F, 0) ;
+        [U2, S2, V2] = svd (full (A), 0) ;
+        err = check_err (err, norm (U1-U2)) ;
+        err = check_err (err, norm (S1-S2) / Anorm) ;
+        err = check_err (err, norm (V1-V2)) ;
+        err = check_err (err, norm (U1*S1*V1'-U2*S2*V2') / Anorm) ;
+
+        [U1, S1, V1] = svd (F, 'econ') ;
+        [U2, S2, V2] = svd (full (A), 'econ') ;
+        err = check_err (err, norm (U1-U2)) ;
+        err = check_err (err, norm (S1-S2) / Anorm) ;
+        err = check_err (err, norm (V1-V2)) ;
+        err = check_err (err, norm (U1*S1*V1'-U2*S2*V2') / Anorm) ;
+
+        [U1, S1, V1] = svd (F, 'rank') ;
+        err = check_err (err, norm (U1*S1*V1'-U2*S2*V2') / Anorm) ;
+
+        % fprintf ('svd err %g (%g)\n', e, err) ;
+
+        % test the p-norm
+        for k = 0:3
+            if (k == 0)
+                p = 'inf' ;
+            elseif (k == 3)
+                p = 'fro' ;
+            else
+                p = k ;
+            end
+
+            n1 = norm (full (A), p) ;
+            n2 = norm (F, p) ;
+            e = abs (n1 - n2) ;
+            if (n1 > 1)
+                e = e / n1 ;
+            end
+            % fprintf ('norm (A,%d): %g\n', k, e) ;
+            err = check_err (err, e) ;
+
+            n1 = norm (full (A'), p) ;
+            n2 = norm (F', p) ;
+            e = abs (n1 - n2) ;
+            if (n1 > 1)
+                e = e / n1 ;
+            end
+            % fprintf ('norm (A'',%d): %g\n', k, e) ;
+            err = check_err (err, e) ;
+
+            n1 = norm (Apinv, p) ;
+            n2 = norm (pinv (F), p) ;
+            e = abs (n1 - n2) ;
+            if (n1 > 1)
+                e = e / n1 ;
+            end
+            % fprintf ('norm (pinv(A),%d): %g\n', k, e) ;
+            err = check_err (err, e) ;
+
+            n1 = norm (Apinv', p) ;
+            n2 = norm (pinv (F)', p) ;
+            e = abs (n1 - n2) ;
+            if (n1 > 1)
+                e = e / n1 ;
+            end
+            % fprintf ('norm (pinv(A)'',%d): %g\n', k, e) ;
+            err = check_err (err, e) ;
+        end
+    end
+end
+
+function err = check_err (err, e)
+err = max (err, e) ;
+if (err > 1e-6)
+    error ('%g error too high!\n', err) ;
+end
diff --git a/MATLAB_Tools/Factorize/cod.m b/MATLAB_Tools/Factorize/cod.m
new file mode 100644
index 0000000..07c9aac
--- /dev/null
+++ b/MATLAB_Tools/Factorize/cod.m
@@ -0,0 +1,69 @@
+function [U, R, V, r] = cod (A, tol)
+%COD complete orthogonal decomposition of a full matrix A = U*R*V'
+%
+%   [U, R, V, r] = cod (A)
+%   [U, R, V, r] = cod (A, tol)
+%
+% The full m-by-n matrix A is factorized into U*R*V' where R is r-by-r and
+% upper triangular and where r is the estimated rank of A.  The diagonal
+% entries of R have magnitude greater than tol.  The default tol of
+% 20*(m+n)*eps(max(diag(R))) is used if tol is not present or if tol < 0.
+% Use COD_SPARSE for sparse matrices.
+%
+% COD provides a 'rank-sized' economy factorization, where R is r-by-r, U is
+% m-by-r and V is n-by-r.  U and V are matrices with orthonormal columns.  That
+% is, U'*U = V'*V = eye (r).  If A is rank deficient, then U and V are full
+% matrices.  If A has full rank, either U or V are sparse permutation matrices
+% (V if m >= n, U if m < n).  QR with column 2-norm pivoting is used on A
+% if m >= n, or on A' if m < n, and thus abs(diag(R)) is decreasing if m >= n
+% and increasing if m < n.
+%
+% If condest(R) is high (> 1e12 or so), then the estimated rank of A
+% might be incorrect.  Try increasing tol in that case, which will make R
+% better conditioned and reduce the estimated rank.
+%
+% Example:
+%
+%   A = magic (4),   [U, R, V] = cod (A),  norm (A - U*R*V')
+%   A = rand (4,3),  [U, R, V] = cod (A),  norm (A - U*R*V')
+%   A = rand (3,4),  [U, R, V] = cod (A),  norm (A - U*R*V')
+%
+% See also qr, svd, rq, spqr, cod_sparse.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (issparse (A))
+    error ('FACTORIZE:cod:sparse', ...
+        'COD is not designed for sparse matrices.  Use COD_SPARSE instead.') ;
+end
+[m, n] = size (A) ;
+if (nargin < 2)
+    tol = -1 ;                  % default tol will be used
+end
+
+if (m >= n)
+
+    % factorize A into U*R*V' with column 2-norm pivoting
+    [U, R, V] = qr (A, 0) ;     % economy U*R = A(V,:) with column pivoting V
+    V = sparse (V, 1:n, 1) ;    % R n-by-n and triu, U m-by-n, V n-by-n
+
+    % find a rough estimate of the rank of A
+    r = rank_est (R, m, n, tol) ;
+
+    if (r < n)
+        % A is rank deficient.  R upper trapezoidal with R(r+1:end,:) tiny
+        [R, Q] = rq (R, r, n) ; % RQ factorization, R now upper triangular
+        U = U (:, 1:r) ;        % discard all but the first r columns of U
+        V = V * Q' ;            % merge Q and V
+        % R is now r-by-r, U is m-by-r, and V is n-by-r.
+    end
+
+else
+
+    % compute the cod of A' and permute the result
+    [V, R, U, r] = cod (A', tol) ;
+    U = U (:, end:-1:1) ;
+    R = R (end:-1:1, end:-1:1)' ;
+    V = V (:, end:-1:1) ;
+
+end
diff --git a/MATLAB_Tools/Factorize/cod_qmult.m b/MATLAB_Tools/Factorize/cod_qmult.m
new file mode 100644
index 0000000..5bd4f62
--- /dev/null
+++ b/MATLAB_Tools/Factorize/cod_qmult.m
@@ -0,0 +1,46 @@
+function Y = cod_qmult (Q, X, method)
+%COD_QMULT computes Q'*X, Q*X, X*Q', or X*Q with Q from COD_SPARSE.
+% Q is a matrix or a struct representing the SPQR Householder form.  An
+% additional column permutation matrix Q.Pc may be present in the Q struct.
+%
+% Usage: Y = cod_qmult (Q,X,method)
+%
+%   method = 0: Y = Q'*X    default if 3rd input argument is not present.
+%   method = 1: Y = Q*X 
+%   method = 2: Y = X*Q'
+%   method = 3: Y = X*Q
+%
+% Example:
+%
+%   [U, R, V, r] = cod_sparse (A) ;
+%   Y = cod_qmult (U, X, 0) ;                   % Y = U' * X
+%   U = cod_qmult (U, speye (size (U.H,1)), 1)  % convert U to matrix form
+%
+% See also cod_sparse, spqr, spqr_qmult
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 3)
+    method = 0 ;
+end
+
+% multiply Q and X
+if (isstruct (Q))
+    if (~isfield (Q, 'Pc'))
+        Y = spqr_qmult (Q, X, method) ;
+    else
+        switch method
+            case 0, Y = Q.Pc' * spqr_qmult (Q, X, method) ;
+            case 1, Y = spqr_qmult (Q, Q.Pc * X, method) ;
+            case 2, Y = spqr_qmult (Q, X * Q.Pc', method) ;
+            case 3, Y = spqr_qmult (Q, X, method) * Q.Pc ;
+        end
+    end
+else
+    switch method
+        case 0, Y = Q'*X ;
+        case 1, Y = Q*X ;
+        case 2, Y = X*Q' ;
+        case 3, Y = X*Q ;
+    end
+end
diff --git a/MATLAB_Tools/Factorize/cod_sparse.m b/MATLAB_Tools/Factorize/cod_sparse.m
new file mode 100644
index 0000000..a8b85f1
--- /dev/null
+++ b/MATLAB_Tools/Factorize/cod_sparse.m
@@ -0,0 +1,177 @@
+function [U, R, V, r] = cod_sparse (A, arg)
+%COD_SPARSE complete orthogonal decomposition of a sparse matrix A = U*R*V'
+%
+%   [U, R, V, r] = cod_sparse (A)
+%   [U, R, V, r] = cod_sparse (A, opts)
+%
+% The sparse m-by-n matrix A is factorized into U*R*V' where R is m-by-n and
+% all zero except for R(1:r,1:r), which is upper triangular.  The first r
+% diagonal entries of R have magnitude greater than tol, where r is the
+% estimated rank of A.  All other diagonal entries are zero.  The default tol
+% of 20*(m+n)*eps(max(diag(R))) is used if tol is not present or if tol<0.
+% Use COD for full matrices.
+%
+% By default, U and V are not returned as sparse matrices, but as structs that
+% represent a sequence of Householder transformations (U of size m-by-m and V
+% of size n-by-n).  They can be passed to COD_QMULT to multiply them with other
+% matrices or to convert them into matrices.  Alternatively, you can have U and
+% V returned as matrices with opts.Q='matrix'.
+%
+% If A has full rank and m >= n, then this function simply returns the QR
+% factorization Q*R*P' = U*R*V' = A where V=P is the fill-reducing ordering.
+% If m < n, then U is the fill-reducing ordering and V' the orthgonal factor in
+% Householder form.  If A is rank deficient, then both U and V contain
+% non-trivial Householder transformations.
+%
+% If condest (R (1:r,1:r)) is large (> 1e12 or so) then the estimated rank of A
+% might be incorrect.  Try increasing tol in that case, which will make R
+% better conditioned and reduce the estimated rank of A.
+%
+% If the opts input parameter is a scalar, then it is used as the value of tol.
+% If it is a struct, it can contain non-default options:
+%
+%   opts.tol    the tolerance to be used.  tol < 0 means the default is used.
+%   opts.Q      'Householder' to return U and V as structs (default), 'matrix'
+%               to return them as sparse matrices.  In their matrix form, U and
+%               V can take a huge amount of memory, however.
+%
+% Example:
+%
+%   A = sparse (magic (4))
+%   [U, R, V] = cod_sparse (A)
+%   norm (A - cod_qmult (U, cod_qmult (V, R, 2),1),1)   % 1-norm of A - U*R*V'
+%   U = cod_qmult (U, speye (size (A,1)), 1) ;      % convert U into a matrix
+%   V = cod_qmult (V, speye (size (A,2)), 1) ;      % convert V into a matrix
+%   norm (A - U*R*V',1)
+%   opts.Q = 'matrix'
+%   [U, R, V] = cod_sparse (A,opts)
+%   norm (A - U*R*V',1)
+%
+%   A = sparse (rand (4,3)),  [U, R, V] = cod_sparse (A)
+%   norm (A - cod_qmult (U, cod_qmult (V, R, 2), 1), 1)
+%   A = sparse (rand (4,3)),  [U, R, V] = cod_sparse (A)
+%   norm (A - cod_qmult (U, cod_qmult (V, R, 2), 1), 1)
+%
+% Requires the SPQR and SPQR_QMULT functions from SuiteSparse,
+% http://www.suitesparse.com
+%
+% See also qr, cod, cod_qmult, spqr, spqr_qmult.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% get the inputs
+%-------------------------------------------------------------------------------
+
+if (~issparse (A))
+    error ('FACTORIZE:cod_sparse', ...
+        'COD_SPARSE is not designed for full matrices.  Use COD instead.') ;
+end
+
+[m, n] = size (A) ;
+opts = struct ;
+if (nargin > 1)
+    if (isreal (arg) && arg >= 0)
+        opts.tol = arg ;
+    else
+        if (isfield (arg, 'Q'))
+            opts.Q = arg.Q ;
+        end
+        if (isfield (arg, 'tol') && arg.tol >= 0)
+            opts.tol = arg.tol ;
+        end
+    end
+end
+if (~isfield (opts, 'Q'))
+    opts.Q = 'Householder' ;        % return Q as a struct
+end
+ismatrix = isequal (opts.Q, 'matrix') ;
+
+%-------------------------------------------------------------------------------
+% compute the COD
+%-------------------------------------------------------------------------------
+
+if (m >= n)
+
+    %---------------------------------------------------------------------------
+    % A is square, or tall and thin
+    %---------------------------------------------------------------------------
+
+    % U*R*P1' = A where R is m-by-n, P1 is n-by-n, and U is a struct
+    % of Householder transformations representing an m-by-m matrix.
+    [U, R, P1, info] = spqr (A, opts) ;
+    r = info.rank_A_estimate ;
+    if (r < n)
+        % A is rank deficient.  R is m-by-n and upper trapezoidal.
+        opts.tol = 0 ;
+        [V, R, P2] = spqr (R', opts) ;      % R' is m-by-n and lower triangular
+        rn = reversal (r, n) ;
+        rm = reversal (r, m) ;
+        R = R (rn, rm)' ;                   % reverse and transpose R
+        if (ismatrix)
+            U = U * P2 (:, rm) ;            % return U and V as sparse matrices
+            V = P1 * V ;
+            V = V (:, rn) ;
+        else
+            U.Pc = P2 (:, rm) ;             % U = U * P2 (:,rm)
+            V.P = (P1 * V.P')' ;            % V = P1 * V ;
+            V.Pc = sparse (1:n, rn, 1) ;    % V = V (:,rn)
+        end
+    else
+        % the factorization is A = U*R*V' with R upper triangular
+        if (ismatrix)
+            V = P1 ;                        % return V as a matrix, P1
+        else
+            V = Qpermutation (P1) ;         % V = P1, as a struct.
+        end
+    end
+
+else
+
+    %---------------------------------------------------------------------------
+    % A is short and fat
+    %---------------------------------------------------------------------------
+
+    % V*R*P1' = A' where R is n-by-m, P1 is m-by-m, and V is a struct
+    % of Householder transformations representing an n-by-n matrix.
+    [V, R, P1, info] = spqr (A', opts) ;
+    r = info.rank_A_estimate ;
+    if (r < m)
+        % A is rank deficient.  R is n-by-m and upper trapezoidal.
+        opts.tol = 0 ;
+        [U, R, P2] = spqr (R', opts) ;      % R is m-by-n and upper triangular
+        if (ismatrix)
+            U = P1 * U ;
+            V = V * P2 ;
+        else
+            U.P = (P1 * U.P')' ;            % U = P1 * U
+            V.Pc = P2 ;                     % V = V * P2
+        end
+    else
+        % A is full rank, with A = P1*R'*U'.  Transpose and reverse R.
+        rm = reversal (m, m) ;
+        rn = reversal (m, n) ;
+        R = R (rn, rm)' ;                   % reverse and transpose R
+        if (ismatrix)
+            V = V (:, rn) ;
+            U = P1 (:, rm) ;
+        else
+            V.Pc = sparse (rn, 1:n, 1) ;    % V = V (:,rn)
+            U = Qpermutation (P1 (:, rm)) ; % U = P1 (:,rm)
+        end
+    end
+end
+
+%-------------------------------------------------------------------------------
+
+function p = reversal (r,n)
+%REVERSAL return a vector that reverses the first r entries of 1:n
+p = [(r:-1:1) (r+1:n)] ;
+
+function Q = Qpermutation (P)
+%QPERMUTATION convert a permutation matrix P into a struct for cod_qmult
+% The output Q contains no Householder transformations.
+n = size (P,1) ;
+Q.H = sparse (n,0) ;
+Q.Tau = zeros (1,0) ;
+Q.P = (P * (1:n)')' ;
diff --git a/MATLAB_Tools/Factorize/factorization.m b/MATLAB_Tools/Factorize/factorization.m
new file mode 100644
index 0000000..43f6b3d
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization.m
@@ -0,0 +1,650 @@
+classdef factorization
+%FACTORIZATION a generic matrix factorization object
+% Normally, this object is created via the F=factorize(A) function.  Users
+% do not need to use this method directly.
+%
+% This is an abstract class that is specialized into 13 different kinds of
+% matrix factorizations:
+%
+%   factorization_chol_dense    dense Cholesky      A = R'*R
+%   factorization_lu_dense      dense LU            A(p,:) = L*U
+%   factorization_qr_dense      dense QR of A       A = Q*R
+%   factorization_qrt_dense     dense QR of A'      A' = Q*R
+%   factorization_ldl_dense     dense LDL           A(p,p) = L*D*L'
+%   factorization_cod_dense     dense COD           A = U*R*V'
+%
+%   factorization_chol_sparse   sparse Cholesky     P'*A*P = L*L'
+%   factorization_lu_sparse     sparse LU           P*(R\A)*Q = L*U
+%   factorization_qr_sparse     sparse QR of A      (A*P)'*(A*P) = R'*R
+%   factorization_qrt_sparse    sparse QR of A'     (P*A)*(P*A)' = R'*R
+%   factorization_ldl_sparse    sparse LDL          P'*A*P = L*D*L'
+%   factorization_cod_sparse    sparse COD          A = U*R*V'
+%
+%   factorization_svd           SVD                 A = U*S*V'
+%
+% The abstract class provides the following functions.  In the descriptions,
+% F is a factorization.  The arguments b, y, and z may be factorizations or
+% matrices.  The output x is normally matrix unless it can be represented as a
+% scaled factorization.  For example, G=F\2 and G=inverse(F)*2 both return a
+% factorization G.  Below, s is always a scalar, and C is always a matrix.
+%
+%   These methods return a matrix x, unless one argument is a scalar (in which
+%   case they return a scaled factorization object):
+%   x = mldivide (F, b)     x = A \ b
+%   x = mrdivide (b, F)     x = b / A
+%   x = mtimes (y, z)       y * z
+%
+%   These methods always return a factorization:
+%   F = uplus (F)           +F
+%   F = uminus (F)          -F
+%   F = inverse (F)         representation of inv(A), without computing it
+%   F = ctranspose (F)      F'
+%
+%   These built-in methods return a scalar:
+%   s = isreal (F)
+%   s = isempty (F)
+%   s = isscalar (F)
+%   s = issingle (F)
+%   s = isnumeric (F)
+%   s = isfloat (F)
+%   s = isvector (F)
+%   s = issparse (F)
+%   s = isfield (F,f)
+%   s = isa (F, s)
+%   s = condest (F)
+%
+%   This method returns the estimated rank from the factorization.
+%   s = rankest (F)
+%
+%   These methods support access to the contents of a factorization object
+%   e = end (F, k, n)
+%   [m,n] = size (F, k)
+%   S = double (F)
+%   C = subsref (F, ij)
+%   S = struct (F)
+%   disp (F)
+%
+% The factorization_chol_dense object also provides cholupdate, which acts
+% just like the builtin cholupdate.
+%
+% The factorization_svd object provides:
+%
+%   c = cond (F,p)      the p-norm condition number.  p=2 is the default.
+%                       cond(F,2) takes no time to compute, since it was
+%                       computed when the SVD factorization was found.
+%   a = norm (F,p)      the p-norm.  see the cond(F,p) discussion above.
+%   r = rank (F)        returns the rank of A, precomputed by the SVD.
+%   Z = null (F)        orthonormal basis for the null space of A
+%   Q = orth (F)        orthonormal basis for the range of A
+%   C = pinv (F)        the pseudo-inverse, V'*(S\V).
+%   [U,S,V] = svd (F)   SVD of A or pinv(A), regular, economy, or rank-sized
+%
+% See also mldivide, lu, chol, ldl, qr, svd.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    properties (SetAccess = protected)
+        % The abstract class holds a QR, LU, Cholesky factorization:
+        A = [ ] ;           % a copy of the input matrix
+        Factors = [ ] ;
+        is_inverse = false ;% F represents the factorization of A or inv(A)
+        is_ctrans = false ; % F represents the factorization of A or A'
+        kind = '' ;         % a string stating what kind of factorization F is
+        alpha = 1 ;         % F represents the factorization of A or alpha*A.
+        A_rank = [ ] ;      % rank of A, from SVD, or estimate from COD
+        A_cond = [ ] ;      % 2-norm condition number of A, from SVD
+        A_condest = [ ] ;   % quick and dirty estimate of the condition number
+        % If F is inverted, alpha doesn't change.  For example:
+        %   F = alpha*factorize(A) ; % F = alpha*A, in factorized form.
+        %   G = inverse(F) ;         % G = inv(alpha*A)
+        %   H = beta*G               % H = beta*inv(alpha*A) 
+        %                                = inv((alpha/beta)*A)
+        % So to update alpha via scaling, beta*F, the new scale factor beta
+        % is multiplied with F.alpha if F.is_inverse is false.  Otherwise,
+        % F.alpha is divided by beta to get the new scale factor.
+    end
+
+    methods (Abstract)
+        x = mldivide_subclass (F, b) ;
+        x = mrdivide_subclass (b, F) ;
+        e = error_check (F) ;
+    end
+
+    methods
+
+        %-----------------------------------------------------------------------
+        % mldivide and mrdivide: return a scaled factorization or a matrix
+        %-----------------------------------------------------------------------
+
+        % Let b be a double scalar, F a non-scalar factorization, and g a scalar
+        % factorization.  Then these operations return scaled factorization
+        % objects (unless flatten is true, in which case a matrix is returned):
+        %
+        %   F\b = inverse (F) * b           |   F/b = F / b
+        %   F\g = inverse (F) * double (g)  |   F/g = F / double (g)
+        %   b\F = F / b                     |   b/F = b * inverse (F)
+        %   g\F = F / double (g)            |   g/F = double (g) * inverse (F)
+        %
+        % Otherwise mldivide & mrdivide always return a matrix as their result.
+
+        function x = mldivide (y, z, flatten)
+            %MLDIVIDE x = y\z where either y or z or both are factorizations.
+            flatten = (nargin > 2 && flatten) ;
+            if (isobject (y) && isscalar (z) && ~flatten)
+                % x = y\z where y is an object and z is scalar (perhaps object).
+                % result is a scaled factorization object x.
+                x = scale_factor (inverse (y), ~(y.is_inverse), double (z)) ;
+            elseif (isscalar (y) && isobject (z) && ~flatten)
+                % x = y\z where y is scalar (perhaps object) and z is an object.
+                % result is a scaled factorization object x.
+                x = scale_factor (z, ~(z.is_inverse), double (y)) ;
+            else
+                % result x will be a matrix.  b is coerced to be a matrix.
+                [F, b, first_arg_is_F] = getargs (y, z) ;
+                if (~first_arg_is_F)
+                    % x = b\F where F is a factorization.
+                    error_if_inverse (F, 1) ;
+                    x = b \ F.A ;            % use builtin backslash
+                elseif (F.is_ctrans)
+                    % x = F\b where F represents (alpha*A)' or inv(alpha*A)'
+                    if (F.is_inverse)
+                        % x = inv(alpha*A)'\b = (A'*b)*alpha'
+                        x = (F.A'*b) * F.alpha' ;
+                    else
+                        % x = (alpha*A)'\b = (b'/A)' / alpha'
+                        x = mrdivide_subclass (b', F)' / F.alpha' ;
+                    end
+                else
+                    % x = F\b where F represents (alpha*A) or inv(alpha*A)
+                    if (F.is_inverse)
+                        % x = inv(alpha*A)\b = (A*b)*alpha
+                        x = (F.A*b) * F.alpha ;
+                    else
+                        % x = (alpha*A)\b = (A\b) / alpha
+                        x = mldivide_subclass (F, b) / F.alpha ;
+                    end
+                end
+            end
+        end
+
+        function x = mrdivide (y, z, flatten)
+            %MRDIVIDE x = y/z where either y or z or both are factorizations.
+            flatten = (nargin > 2 && flatten) ;
+            if (isobject (y) && isscalar (z) && ~flatten)
+                % x = y/z where y is an object and z is scalar (perhaps object).
+                % result is a scaled factorization object x.
+                x = scale_factor (y, ~(y.is_inverse), double (z)) ;
+            elseif (isscalar (y) && isobject (z) && ~flatten)
+                % x = y/z where y is scalar (perhaps object) and z is an object.
+                % result is a scaled factorization object x.
+                x = scale_factor (inverse (z), ~(z.is_inverse), double (y)) ;
+            else
+                % result x will be a matrix.  b is coerced to be a matrix.
+                [F, b, first_arg_is_F] = getargs (y, z) ;
+                if (first_arg_is_F)
+                    % x = F/b where F is a factorization object
+                    error_if_inverse (F, 2)
+                    x = F.A / b ;            % use builtin slash
+                elseif (F.is_ctrans)
+                    % x = b/F where F represents (alpha*A)' or inv(alpha*A)'
+                    if (F.is_inverse)
+                        % x = b/inv(alpha*A)' = (b*A')*alpha'
+                        x = (b*F.A') * F.alpha' ;
+                    else
+                        % x = b/(alpha*A)' = (A\b')' / alpha'
+                        x = mldivide_subclass (F, b')' / F.alpha' ;
+                    end
+                else
+                    % x = b/F where F represents (alpha*A) or inv(alpha*A)
+                    if (F.is_inverse)
+                        % x = b/inv(alpha*A) = (b*A)*alpha
+                        x = (b*F.A) * F.alpha ;
+                    else
+                        % x = b/(alpha*A) = (b/A) / alpha
+                        x = mrdivide_subclass (b, F) / F.alpha ;
+                    end
+                end
+            end
+        end
+
+        %-----------------------------------------------------------------------
+        % mtimes: a simple and clean wrapper for mldivide and mrdivide
+        %-----------------------------------------------------------------------
+
+        function x = mtimes (y, z)
+            %MTIMES x=y*z where y or z is a factorization object (or both).
+            % Since inverse(F) is so cheap, and does the right thing inside
+            % mldivide and mrdivide, this is just a simple wrapper.
+            if (isobject (y))
+                % A*b               becomes inverse(A)\b
+                % inverse(A)*b      becomes A\b 
+                % A'*b              becomes inverse(A)'\b
+                % inverse(A)'*b     becomes A'\b
+                x = mldivide (inverse (y), z) ;
+            else
+                % b*A               becomes b/inverse(A)
+                % b*inverse(A)      becomes b/A
+                % b*A'              becomes b/inverse(A)'
+                % b*inverse(A)'     becomes b/A'
+                % y is a scalar or matrix, z must be an object
+                x = mrdivide (y, inverse (z)) ;
+            end
+        end
+
+        %-----------------------------------------------------------------------
+        % uplus, uminus, ctranspose, inverse: always return a factorization
+        %-----------------------------------------------------------------------
+
+        function F = uplus (F)
+            %UPLUS +F
+        end
+
+        function F = uminus (F)
+            %UMINUS -F
+            F.alpha = -(F.alpha) ;
+        end
+
+        function F = inverse (F)
+            %INVERSE "inverts" F by flagging it as factorization of inv(A)
+            F.is_inverse = ~(F.is_inverse) ;
+        end
+
+        function F = ctranspose (F)
+            %CTRANSPOSE "transposes" F by flagging it as factorization of A'
+            F.is_ctrans = ~(F.is_ctrans) ;
+        end
+
+        %-----------------------------------------------------------------------
+        % is* methods that return a scalar
+        %-----------------------------------------------------------------------
+
+        function s = isreal (F)
+            %ISREAL for F=factorize(A): same as isreal(A)
+            s = isreal (F.A) ;
+        end
+
+        function s = isempty (F)
+            %ISEMPTY for F=factorize(A): same as isempty(A)
+            s = any (size (F.A) == 0) ;
+        end
+
+        function s = isscalar (F)
+            %ISSCALAR for F=factorize(A): same as isscalar(A)
+            s = isscalar (F.A)  ;
+        end
+
+        function s = issingle (F)                                           %#ok
+            %ISSINGLE for F=factorize(A) is always false
+            s = false ;
+        end
+
+        function s = isnumeric (F)                                          %#ok
+            %ISNUMERIC for F=factorize(A) is always true
+            s = true ;
+        end
+
+        function s = isfloat (F)                                            %#ok
+            %ISFLOAT for F=factorize(A) is always true
+            s = true ;
+        end
+
+        function s = isvector (F)
+            %ISVECTOR for F=factorize(A): same as isvector(A)
+            s = isvector (F.A) ;
+        end
+
+        function s = issparse (F)
+            %ISSPARSE for F=factorize(A): same as issparse(A)
+            s = issparse (F.A) ;
+        end
+
+        function s = isfield (F, f)                                         %#ok
+            %ISFIELD isfield(F,f) is true if F.f exists, false otherwise
+            s = (ischar (f) && (strcmp (f, 'A') ...
+                || strcmp (f, 'Factors') || strcmp (f, 'kind') ...
+                || strcmp (f, 'is_inverse') || strcmp (f, 'is_ctrans') ...
+                || strcmp (f, 'alpha') || strcmp (f, 'A_rank') ...
+                || strcmp (f, 'A_cond') || strcmp (f, 'A_condest'))) ;
+        end
+
+        function s = isa (F, s)
+            %ISA for F=factorize(A): 'double', 'numeric', 'float' are true.
+            % For other types, the builtin isa does the right thing.
+            s = strcmp (s, 'double') || strcmp (s, 'numeric') ||  ...
+                strcmp (s, 'float') || builtin ('isa', F, s) ;
+        end
+
+        %-----------------------------------------------------------------------
+        % condest, rankest
+        %-----------------------------------------------------------------------
+
+        function C = abs (F)
+            %ABS abs(F) returns abs(A) or abs(inverse(A)), as appropriate.  The
+            % ONLY reason abs is included here is to support the builtin
+            % normest1 for small matrices (n <= 4).  Computing abs(inverse(A))
+            % explicitly computes the inverse of A, so use with caution.
+            C = abs (double (F)) ;
+        end
+
+        function s = condest (F)
+            %CONDEST 1-norm condition number for square matrices.
+            % Does not require another factorization of A, so it's very fast.
+            % Does NOT explicitly compute the inverse of A.  Instead, if F
+            % represents an inverse, F*x inside normest1 does the right thing,
+            % and does A\b using the factorization F.
+            A = F.A ;                                                       %#ok
+            [m, n] = size (A) ;                                             %#ok
+            if (m ~= n)
+                error ('MATLAB:condest:NonSquareMatrix', ...
+                       'Matrix must be square.') ;
+            end
+            if (n == 0)
+                s = 0 ;
+            elseif (F.is_inverse)
+                % F already represents the factorization of the inverse of A
+                s = F.alpha * norm (A,1) * normest1 (F) ;                   %#ok
+            else
+                % Note that the inverse is NOT explicitly computed.
+                s = F.alpha * norm (A,1) * normest1 (inverse (F)) ;         %#ok
+            end
+        end
+
+        function r = rankest (F)
+            %RANKEST returns the estimated rank of A.
+            % It is a very rough estimate if Cholesky, LU, QR, or LDL succeeded
+            % (in which A is assumed to have full rank).  COD finds a more
+            % accurate estimate, and SVD finds the exact rank.
+            r = F.A_rank ;
+        end
+
+        %-----------------------------------------------------------------------
+        % end, size
+        %-----------------------------------------------------------------------
+
+        function e = end (F, k, n)
+            %END returns index of last item for use in subsref
+            if (n == 1)
+                e = numel (F.A) ;   % # of elements, for linear indexing
+            else
+                e = size (F, k) ;   % # of rows or columns in A or pinv(A)
+            end
+        end
+
+        function [m, n] = size (F, k)
+            %SIZE returns the size of the matrix F.A in the factorization F
+            if (F.is_inverse ~= F.is_ctrans)
+                % swap the dimensions to match pinv(A)
+                if (nargout > 1)
+                    [n, m] = size (F.A) ;
+                else
+                    m = size (F.A) ;
+                    m = m ([2 1]) ;
+                end
+            else
+                if (nargout > 1)
+                    [m, n] = size (F.A) ;
+                else
+                    m = size (F.A) ;
+                end
+            end
+            if (nargin > 1)
+                m = m (k) ;
+            end
+        end
+
+        %-----------------------------------------------------------------------
+        % double: a wrapper for subsref
+        %-----------------------------------------------------------------------
+
+        function S = double (F)
+            %DOUBLE returns the factorization as a matrix, A or inv(A)
+            ij.type = '()' ;
+            ij.subs = cell (1,0) ;
+            S = subsref (F, ij) ;   % let factorize.subsref do all the work
+        end
+
+        %-----------------------------------------------------------------------
+        % subsref: returns a matrix
+        %-----------------------------------------------------------------------
+
+        function C = subsref (F, ij)
+            %SUBSREF A(i,j) or (i,j)th entry of inv(A) if F is inverted.
+            % Otherwise, explicit entries in the inverse are computed.
+            % This method also extracts the contents of F with F.whatever.
+            switch (ij (1).type)
+                case '.'
+                    % F.A usage: extract one of the matrices from F
+                    switch ij (1).subs
+                        case 'A'
+                            C = F.A ;
+                        case 'Factors'
+                            C = F.Factors ;
+                        case 'is_inverse'
+                            C = F.is_inverse ;
+                        case 'is_ctrans'
+                            C = F.is_ctrans ;
+                        case 'kind'
+                            C = F.kind ;
+                        case 'alpha'
+                            C = F.alpha ;
+                        case 'A_cond'
+                            C = F.A_cond ;
+                        case 'A_condest'
+                            C = F.A_condest ;
+                        case 'A_rank'
+                            C = F.A_rank ;
+                        otherwise
+                            error ('MATLAB:nonExistentField', ...
+                            'Reference to non-existent field ''%s''.', ...
+                            ij (1).subs) ;
+                    end
+                    % F.X(2,3) usage, return X(2,3), for component F.X
+                    if (length (ij) > 1 && ~isempty (ij (2).subs))
+                        C = subsref (C, ij (2)) ;
+                    end
+                case '()'
+                    C = subsref_paren (F, ij) ;
+                case '{}'
+                    error ('MATLAB:cellRefFromNonCell', ...
+                    'Cell contents reference from a non-cell array object.') ;
+            end
+        end
+
+        %-----------------------------------------------------------------------
+        % struct: extracts all contents of a factorization object
+        %-----------------------------------------------------------------------
+
+        function S = struct (F)
+            %STRUCT convert factorization F into a struct.
+            % S cannot be used for subsequent object methods here.
+            S.A = F.A ;
+            S.Factors = F.Factors ;
+            S.is_inverse = F.is_inverse ;
+            S.is_ctrans = F.is_ctrans ;
+            S.alpha = F.alpha ;
+            S.A_rank = F.A_rank ;
+            S.A_cond = F.A_cond ;
+            S.kind = F.kind ;
+        end
+
+        %-----------------------------------------------------------------------
+        % disp: displays the contents of F
+        %-----------------------------------------------------------------------
+
+        function disp (F)
+            %DISP displays a factorization object
+            fprintf ('  class: %s\n', class (F)) ;
+            fprintf ('  %s\n', F.kind) ;
+            fprintf ('  A: [%dx%d double]\n', size (F.A)) ;
+            fprintf ('  Factors:\n') ; disp (F.Factors) ;
+            fprintf ('  is_inverse: %d\n', F.is_inverse) ;
+            fprintf ('  is_ctrans: %d\n', F.is_ctrans) ;
+            fprintf ('  alpha: %g', F.alpha) ;
+            if (~isreal (F.alpha))
+                fprintf (' + (%g)i', imag (F.alpha)) ;
+            end
+            fprintf ('\n') ;
+            if (~isempty (F.A_rank))
+                fprintf ('  A_rank: %d\n', F.A_rank) ;
+            end
+            if (~isempty (F.A_condest))
+                fprintf ('  A_condest: %d\n', F.A_condest) ;
+            end
+            if (~isempty (F.A_cond))
+                fprintf ('  A_cond: %d\n', F.A_cond) ;
+            end
+        end
+    end
+
+    %---------------------------------------------------------------------------
+    % methods that are not user-callable
+    %---------------------------------------------------------------------------
+
+    methods (Access = protected)
+
+        function [F, b, first_arg_is_F] = getargs (y, z)
+            first_arg_is_F = isobject (y) ;
+            if (first_arg_is_F)
+                F = y ;             % first argument is a factorization object
+                b = double (z) ;    % 2nd one coerced to be a matrix
+            else
+                b = y ;             % first argument is not an object
+                F = z ;             % second one must be an object
+            end
+        end
+
+        function F = scale_factor (F, use_beta_inverse, beta)
+            %SCALE_FACTOR scales a factorization
+            if (use_beta_inverse)
+                % F = inv(alpha*A), so F*beta = inv((alpha/beta)*A)
+                if (F.is_ctrans)
+                    F.alpha = F.alpha / beta' ;
+                else
+                    F.alpha = F.alpha / beta ;
+                end
+            else
+                % F = alpha*A, so F*beta = (alpha*beta)*A
+                if (F.is_ctrans)
+                    F.alpha = F.alpha * beta' ;
+                else
+                    F.alpha = F.alpha * beta ;
+                end
+            end
+        end
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+% subsref_paren: support function for subsref
+%-------------------------------------------------------------------------------
+
+function C = subsref_paren (F, ij)
+%SUBSREF_PAREN C = subsref_paren(F,ij) implements C=F(i,j) and C=F(i)
+
+    % F(2,3) usage, return A(2,3) or the (2,3) of inv(A).
+    assert (length (ij) == 1, 'Improper index matrix reference.') ;
+    A = F.A ;
+    is_ctrans = F.is_ctrans ;
+    if (is_ctrans && length (ij.subs) > 1)   % swap i and j
+        ij.subs = ij.subs ([2 1]) ;
+    end
+
+    if (F.is_inverse)
+
+        % requesting explicit entries of the inverse
+
+        if (length (ij.subs) == 1)
+            % for linear indexing of the inverse (C=F(i)), first
+            % convert to double and then use builtin subsref
+            C = subsref (double (F), ij) ;
+        else
+            % standard indexing, C = F(i,j)
+            if (is_ctrans)
+                [n, m] = size (A) ;
+            else
+                [m, n] = size (A) ;
+            end
+            if (length (ij.subs) == 2)
+                ilen = length (ij.subs {1}) ;
+                if (strcmp (ij.subs {1}, ':'))
+                    ilen = n ;
+                end
+                jlen = length (ij.subs {2}) ;
+                if (strcmp (ij.subs {2}, ':'))
+                    jlen = m ;
+                end
+                j = ij ;
+                j.subs {1} = ':' ;
+                i = ij ;
+                i.subs {2} = ':' ;
+                if (jlen <= ilen)
+                    % compute X=S(:,j) of S=inv(A) and return X(i,:)
+                    C = subsref (mldivide (...
+                        inverse (F), ...
+                        subsref (identity (A, m), j), 1), i) ;
+                else
+                    % compute X=S(i,:) of S=inv(A) and return X(:,j)
+                    C = subsref (mrdivide (...
+                        subsref (identity (A, n), i), ...
+                        inverse (F), 1), j) ;
+                end
+            else
+                % the entire inverse has been explicitly computed
+                C = mldivide (inverse (F), identity (A, m), 1) ;
+            end
+        end
+
+    else
+
+        % F is not inverted, so just return A(i,j)
+        if (isempty (ij (1).subs))
+            C = A ;
+        else
+            C = subsref (A, ij) ;
+        end
+        C = C * F.alpha ;
+        if (is_ctrans)
+            C = C' ;
+        end
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+% identity: return a full or sparse identity matrix
+%-------------------------------------------------------------------------------
+
+function I = identity (A, n)
+%IDENTITY return a full or sparse identity matrix.  Not user-callable
+    if (issparse (A))
+        I = speye (n) ;
+    else
+        I = eye (n) ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% throw an error if inv(A) is being inadvertently computed 
+%-------------------------------------------------------------------------------
+
+function error_if_inverse (F, kind)
+    % x = b\F or F/b where F=inverse(A) and b is not a scalar is unsupported.
+    % It could be done by coercing F into an explicit matrix representation of
+    % inv(A), via x = b\double(F) or double(A)/b, but this is the same as
+    % b\inv(A) or inv(A)/b respectively.  That is dangerous, and thus it is
+    % not done here automatically.
+    if (F.is_inverse)
+        if (kind == 1)
+            s1 = 'B\F' ;
+            s2 = 'B\double(F)' ;
+        else
+            s1 = 'F/B' ;
+            s2 = 'double(F)/B' ;
+        end
+        error ('FACTORIZE:unsupported', ...
+        ['%s where F=inverse(A) requires the explicit computation of the ' ...
+         'inverse.\nThis is ill-advised, so it is never done automatically.'...
+         '\nTo force it, use %s instead of %s.\n'], s1, s2, s1) ;
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_chol_dense.m b/MATLAB_Tools/Factorize/factorization_chol_dense.m
new file mode 100644
index 0000000..d210123
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_chol_dense.m
@@ -0,0 +1,77 @@
+classdef factorization_chol_dense < factorization
+%FACTORIZATION_CHOL_DENSE A = R'*R where A is full and symmetric pos. def.
+% Adds an extra method, cholupdate, which acts just like the builtin cholupdate.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_chol_dense (A)
+            %FACTORIZATION_CHOL_DENSE : A = R'*R
+            [f.R, g] = chol (A) ;
+            if (g ~= 0)
+                error ('MATLAB:posdef', 'Matrix must be positive definite.') ;
+            end
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = size (A,1) ;
+            F.kind = 'dense Cholesky factorization: A = R''*R' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (F.A - f.R'*f.R, 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x=A\b using a dense Cholesky factorization
+            % x = R \ (R' \ b)
+            f = F.Factors ;
+            opU.UT = true ;
+            opUT.UT = true ;
+            opUT.TRANSA = true ;
+            y = b ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = linsolve (f.R, linsolve (f.R, y, opUT), opU) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using dense Cholesky
+            % x = (R \ (R' \ b')'
+            x = (mldivide_subclass (F, b'))' ;
+        end
+
+        function F = cholupdate (F,w,updown)
+            %CHOLUPDATE update/downdate a dense Cholesky factorization
+            %
+            % Example
+            %   % F becomes the Cholesky factorization of A+w*w'
+            %   F = factorize (A) ;
+            %   w = rand (size (A,1),1) ;
+            %   G = cholupdate (F,w) ;
+            %   x = G\b ;               % computes x = (A+w*w')\b
+            %   G = cholupdate (F,w,'-') ;
+            %   x = G\b ;               % computes x = (A-w*w')\b
+            %
+            % See also factorize, cholupdate.
+            if (nargin < 3)
+                updown = '+' ;
+            end
+            switch updown
+                case '+'
+                    F.Factors.R = cholupdate (F.Factors.R, w, '+') ;
+                    F.A = F.A + w*w' ;
+                case '-'
+                    F.Factors.R = cholupdate (F.Factors.R, w, '-') ;
+                    F.A = F.A - w*w' ;
+                otherwise
+                    error ('MATLAB:cholupdate:incorrectThirdInputArgument', ...
+                        'Third argument must be ''+'' or ''-''.') ;
+            end
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_chol_sparse.m b/MATLAB_Tools/Factorize/factorization_chol_sparse.m
new file mode 100644
index 0000000..868089f
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_chol_sparse.m
@@ -0,0 +1,40 @@
+classdef factorization_chol_sparse < factorization
+%FACTORIZATION_CHOL_SPARSE P'*A*P = L*L' where A is sparse and sym. pos. def.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_chol_sparse (A)
+            %FACTORIZATION_CHOL_SPARSE : P'*A*P = L*L'
+            [f.L, g, f.P] = chol (A, 'lower') ;
+            if (g ~= 0)
+                error ('MATLAB:posdef', 'Matrix must be positive definite.') ;
+            end
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = size (A,1) ;
+            F.kind = 'sparse Cholesky factorization: P''*A*P = L*L''' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (f.P'*F.A*f.P - f.L*f.L', 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x = A\b using sparse Cholesky
+            % x = P * (L' \ (L \ (P' * b)))
+            f = F.Factors ;
+            x = f.P * (f.L' \ (f.L \ (f.P' * b))) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using sparse Cholesky
+            % x = (P * (L' \ (L \ (P' * b'))))'
+            x = (mldivide_subclass (F, b'))' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_cod_dense.m b/MATLAB_Tools/Factorize/factorization_cod_dense.m
new file mode 100644
index 0000000..e09d1b4
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_cod_dense.m
@@ -0,0 +1,50 @@
+classdef factorization_cod_dense < factorization
+%FACTORIZATION_COD_DENSE complete orthogonal factorization: A = U*R*V' where A is full.
+% A fairly accurate estimate of rank is found.  double(inverse(F)) is a fairly
+% accurate estimate of pinv(A).
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_cod_dense (A)
+            %FACTORIZATION_COD_DENSE A = U*R*V'
+            [f.U, f.R, f.V, F.A_rank] = cod (A) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.kind = 'dense COD factorization: A = U*R*V''' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (F.A - f.U*f.R*f.V', 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBLCASS x = A\b using a dense COD factorization
+            % x = V * (R \ (U' * b))
+            f = F.Factors ;
+            op.UT = true ;
+            y = f.U' * b ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = f.V * linsolve (f.R, y, op) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using dense COD factorization
+            % x = ((b * V) / R) * U' = (U * (R' \ (b*V)'))'
+            f = F.Factors ;
+            op.UT = true ;
+            op.TRANSA = true ;
+            y = (b * f.V)' ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = (f.U * linsolve (f.R, y, op))' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_cod_sparse.m b/MATLAB_Tools/Factorize/factorization_cod_sparse.m
new file mode 100644
index 0000000..a729347
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_cod_sparse.m
@@ -0,0 +1,62 @@
+classdef factorization_cod_sparse < factorization
+%FACTORIZATION_COD_SPARSE complete orthogonal factorization: A = U*R*V' where A is sparse.
+% A fairly accurate estimate of rank is found.  double(inverse(F)) is a fairly
+% accurate estimate of pinv(A).
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_cod_sparse (A)
+            %FACTORIZATION_SPARSE_COD A = U*R*V'
+            [f.U, f.R, f.V, f.r] = cod_sparse (A) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = f.r ;
+            F.kind = 'sparse COD factorization: A = U*R*V''' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            U = cod_qmult (f.U, speye (size (f.U.H,1)), 1) ;
+            V = cod_qmult (f.V, speye (size (f.V.H,1)), 1) ;
+            e = norm (F.A - U*f.R*V', 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBLCASS x = A\b using a sparse COD factorization
+            % If the estimated rank is correct, this is x = pinv(A)*b
+            f = F.Factors ;
+            r = f.r ;
+            c = cod_qmult (f.U, b, 0) ;                 % c = U' * b
+            c = f.R (1:r,1:r) \ c (1:r,:) ;             % c = R \ c
+            n = size (f.R, 2) ;
+            if (r < n)
+                c = [c ; sparse(n-r,size(c,2))] ;       % make sure c has n rows
+                if (~issparse (b))
+                    c = full (c) ;
+                end
+            end
+            x = cod_qmult (f.V, c, 1) ;                 % x = V * c
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using sparse COD factorization
+            % If the estimated rank is correct, this is x = b*pinv(A)
+            f = F.Factors ;
+            r = f.r ;
+            c = cod_qmult (f.V, b, 3) ;                 % c = b * V
+            c = c (:,1:r) / f.R (1:r,1:r) ;             % c = c / R
+            m = size (f.R, 1) ;
+            if (r < m)
+                c = [c , sparse(size(c,1),m-r)] ;       % make sure c has m cols
+                if (~issparse (b))
+                    c = full (c) ;
+                end
+            end
+            x = cod_qmult (f.U, c, 2) ;                 % x = c * U'
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_ldl_dense.m b/MATLAB_Tools/Factorize/factorization_ldl_dense.m
new file mode 100644
index 0000000..7e67e10
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_ldl_dense.m
@@ -0,0 +1,62 @@
+classdef factorization_ldl_dense < factorization
+%FACTORIZATION_LDL_DENSE P'*A*P = L*D*L' where A is full and symmetric
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_ldl_dense (A)
+            %FACTORIZATION_LDL_DENSE : A(p,p) = L*D*L'
+            if (isempty (A))
+                f.L = [ ] ;
+                f.D = [ ] ;
+                f.p = [ ] ;
+            else
+                [f.L, f.D, f.p] = ldl (A, 'vector') ;
+            end
+            % D is block diagonal with 2-by-2 blocks, and is best stored as
+            % a *sparse* matrix, not full.  This saves storage and speeds up
+            % D\b in the solve phases below.
+            f.D = sparse (f.D) ;
+            c = full (condest (f.D)) ;
+            if (c > 1/(2*eps))
+                error ('MATLAB:singularMatrix', ...
+                    'Matrix is singular to working precision.') ;
+            end
+            n = size (A,1) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = n ;
+            F.A_condest = c ;
+            F.kind = 'dense LDL factorization: A(p,p) = L*D*L''' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (F.A (f.p, f.p) - f.L*f.D*f.L', 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x = A\b using dense LDL
+            % x = P * (L' \ (D \ (L \ (P' * b))))
+            f = F.Factors ;
+            opL.LT = true ;
+            opLT.LT = true ;
+            opLT.TRANSA = true ;
+            y = b (f.p, :) ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = linsolve (f.L, f.D \ linsolve (f.L, y, opL), opLT) ;
+            x (f.p, :) = x ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using dense LDL
+            % x = (P * (L' \ (D \ (L \ (P' * b')))))'
+            x = (mldivide_subclass (F, b'))' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_ldl_sparse.m b/MATLAB_Tools/Factorize/factorization_ldl_sparse.m
new file mode 100644
index 0000000..9417f95
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_ldl_sparse.m
@@ -0,0 +1,43 @@
+classdef factorization_ldl_sparse < factorization
+%FACTORIZATION_LDL_SPARSE P'*A*P = L*D*L' where A is sparse and symmetric
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_ldl_sparse (A)
+            %FACTORIZATION_LDL_SPARSE : P'*A*P = L*D*L'
+            [f.L, f.D, f.P] = ldl (A) ;
+            c = full (condest (f.D)) ;
+            if (c > 1/(2*eps))
+                error ('MATLAB:singularMatrix', ...
+                    'Matrix is singular to working precision.') ;
+            end
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = size (A,1) ;
+            F.A_condest = c ;
+            F.kind = 'sparse LDL factorization: P''*A*P = L*D*L''' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (f.P'*F.A*f.P - f.L*f.D*f.L', 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x = A\b using sparse LDL
+            % x = P * (L' \ (L \ (P' * b)))
+            f = F.Factors ;
+            x = f.P * (f.L' \ (f.D \ (f.L \ (f.P' * b)))) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using sparse LDL
+            % x = (P * (L' \ (L \ (P' * b'))))'
+            x = (mldivide_subclass (F,b'))' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_lu_dense.m b/MATLAB_Tools/Factorize/factorization_lu_dense.m
new file mode 100644
index 0000000..09e17ac
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_lu_dense.m
@@ -0,0 +1,59 @@
+classdef factorization_lu_dense < factorization
+%FACTORIZATION_LU_DENSE A(p,:) = L*U where A is square and full.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_lu_dense (A, fail_if_singular)
+            %FACTORIZATION_LU_DENSE : A(p,:) = L*U
+            [m, n] = size (A) ;
+            if (m ~= n)
+                error ('FACTORIZE:wrongdim', ...
+                    'LU for rectangular matrices not supported.  Use QR.') ;
+            end
+            [f.L, f.U, f.p] = lu (A, 'vector') ;
+            F.A_condest = cheap_condest (get_diag (f.U), fail_if_singular) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = n ;
+            F.kind = 'dense LU factorization: A(p,:) = L*U' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (F.A (f.p,:) - f.L*f.U, 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x=A\b using dense LU
+            % x = U \ (L \ (b (p,:))) ;
+            f = F.Factors ;
+            opL.LT = true ;
+            opU.UT = true ;
+            y = b (f.p, :) ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = linsolve (f.U, linsolve (f.L, y, opL), opU) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using dense LU
+            % x (:,p) = (L' \ (U' \ b'))'
+            f = F.Factors ;
+            opUT.UT = true ;
+            opUT.TRANSA = true ;
+            opLT.LT = true ;
+            opLT.TRANSA = true ;
+            y = b' ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = (linsolve (f.L, linsolve (f.U, y, opUT), opLT))';
+            x (:, f.p) = x ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_lu_sparse.m b/MATLAB_Tools/Factorize/factorization_lu_sparse.m
new file mode 100644
index 0000000..006d4ee
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_lu_sparse.m
@@ -0,0 +1,54 @@
+classdef factorization_lu_sparse < factorization
+%FACTORIZATION_LU_SPARSE P*A*Q = L*U where A is square and sparse.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_lu_sparse (A, fail_if_singular)
+            %FACTORIZATION_LU_SPARSE : P*(R\A)*Q = L*U
+            [m, n] = size (A) ;
+            if (m ~= n)
+                error ('FACTORIZE:wrongdim', ...
+                    'LU for rectangular matrices not supported.  Use QR.') ;
+            end
+            if (n == 0)
+                nil = sparse ([ ]) ;
+                f.L = nil ;
+                f.U = nil ;
+                f.P = nil ;
+                f.Q = nil ;
+                f.R = nil ;
+                F.A_condest = 1 ;
+            else
+                [f.L, f.U, f.P, f.Q, f.R] = lu (A) ;
+                F.A_condest = cheap_condest (get_diag (f.U), fail_if_singular) ;
+            end
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = n ;
+            F.kind = 'sparse LU factorization: P*(R\A)*Q = L*U' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (f.P*(f.R\F.A)*f.Q - f.L*f.U, 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x = A\b using sparse LU
+            % x = Q * (U \ (L \ (P * (R \ b))))
+            f = F.Factors ;
+            x = f.Q * (f.U \ (f.L \ (f.P * (f.R \ b)))) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using sparse LU
+            % x = ((((b * Q) / U) / L) * P) / R ; 
+            f = F.Factors ;
+            x = ((((b * f.Q) / f.U) / f.L) * f.P) / f.R ; 
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_qr_dense.m b/MATLAB_Tools/Factorize/factorization_qr_dense.m
new file mode 100644
index 0000000..73c93d5
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_qr_dense.m
@@ -0,0 +1,56 @@
+classdef factorization_qr_dense < factorization
+%FACTORIZATION_QR_DENSE A = Q*R where A is full.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_qr_dense (A, fail_if_singular)
+            %FACTORIZATION_QR_DENSE : A = Q*R
+            [m, n] = size (A) ;
+            if (m < n)
+                error ('FACTORIZE:wrongdim', 'QR(A) method requires m>=n.') ;
+            end
+            [f.Q, f.R] = qr (A,0) ;
+            F.A_condest = cheap_condest (get_diag (f.R), fail_if_singular) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = rank_est (f.R, m, n) ;
+            F.kind = 'dense economy QR factorization: A = Q*R' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (F.A - f.Q*f.R, 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBLCASS x = A\b using a dense economy QR of A
+            % least-squares solution of an overdetermined problem
+            % x = R \ (Q' * b)
+            f = F.Factors ;
+            opU.UT = true ;
+            y = f.Q' * b ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = linsolve (f.R, y, opU) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using dense economy QR of A
+            % minimum 2-norm solution of a underdetermined problem
+            % x = (Q * (R' \ b'))' ;
+            f = F.Factors ;
+            opUT.UT = true ;
+            opUT.TRANSA = true ;
+            y = b' ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = (f.Q * linsolve (f.R, y, opUT))' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_qr_sparse.m b/MATLAB_Tools/Factorize/factorization_qr_sparse.m
new file mode 100644
index 0000000..222aaf2
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_qr_sparse.m
@@ -0,0 +1,54 @@
+classdef factorization_qr_sparse < factorization
+%FACTORIZATION_QR_SPARSE (A*P)'*(A*P) = R'*R where A is sparse.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_qr_sparse (A, fail_if_singular)
+            %FACTORIZATION_QR_SPARSE economy sparse QR: (A*P)'*(A*P) = R'*R
+            if (~isa (A, 'double'))
+                error ('FACTORIZE:wrongtype', 'A must be double') ;
+            end
+            [m, n] = size (A) ;
+            if (m < n)
+                error ('FACTORIZE:wrongdim', 'QR of A requires m >= n.') ;
+            end
+            [~, f.R, p] = qr (A, sparse (m,0), 0) ;
+            f.P = sparse (p, 1:n, 1) ;
+            F.A_condest = cheap_condest (get_diag (f.R), fail_if_singular) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = rank_est (f.R, m, n) ;
+            F.kind = 'sparse QR factorization of A: (A*P)''*A*P = R''*R' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm ((F.A*f.P)'*(F.A*f.P) - f.R'*f.R, 1) / norm (F.A'*F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBLCASS x = A\b using economy sparse QR of A
+            % least-squares solution of an overdetermined problem
+            A = F.A ;
+            f = F.Factors ;
+            x = f.P * (f.R \ (f.R' \ (f.P' * (A' * b)))) ;
+            e = f.P * (f.R \ (f.R' \ (f.P' * (A' * (b - A * x))))) ;
+            x = x + e ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using economy sparse QR of A
+            % minimum 2-norm solution of an underdetermined problem
+            bT = b' ;
+            A = F.A ;
+            f = F.Factors ;
+            x = A * (f.P * (f.R \ (f.R' \ (f.P' * bT)))) ;
+            e = A * (f.P * (f.R \ (f.R' \ (f.P' * (bT - A' * x))))) ;
+            x = (x + e)' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_qrt_dense.m b/MATLAB_Tools/Factorize/factorization_qrt_dense.m
new file mode 100644
index 0000000..7920c11
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_qrt_dense.m
@@ -0,0 +1,56 @@
+classdef factorization_qrt_dense < factorization
+%FACTORIZATION_QRT_DENSE A' = Q*R where A is full.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_qrt_dense (A, fail_if_singular)
+            %FACTORIZATION_QRT_DENSE : A' = Q*R
+            [m, n] = size (A) ;
+            if (m > n)
+                error ('FACTORIZE:wrongdim', 'QR(A'') method requires m<=n.') ;
+            end
+            [f.Q, f.R] = qr (A',0) ;
+            F.A_condest = cheap_condest (get_diag (f.R), fail_if_singular) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = rank_est (f.R, m, n) ;
+            F.kind = 'dense economy QR factorization: A'' = Q*R' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm (F.A' - f.Q*f.R, 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x = A\b using a dense QR factorization of A'
+            % minimum 2-norm solution of an underdetermined system
+            % x = Q * (R' \ b)
+            f = F.Factors ;
+            opUT.UT = true ;
+            opUT.TRANSA = true ;
+            y = b ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = f.Q * linsolve (f.R, y, opUT) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using dense QR of A'
+            % least-squares solution of a overdetermined problem
+            % x = (R \ (Q' * b'))'
+            f = F.Factors ;
+            opU.UT = true ;
+            y = f.Q' * b' ;
+            if (issparse (y))
+                y = full (y) ;
+            end
+            x = linsolve (f.R, y, opU)' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_qrt_sparse.m b/MATLAB_Tools/Factorize/factorization_qrt_sparse.m
new file mode 100644
index 0000000..ec508fb
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_qrt_sparse.m
@@ -0,0 +1,54 @@
+classdef factorization_qrt_sparse < factorization
+%FACTORIZATION_QRT_SPARSE (P*A)*(P*A)'=R'*R where A is sparse.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_qrt_sparse (A, fail_if_singular)
+            %FACTORIZATION_QRT_SPARSE economy sparse QR: (P*A)*(P*A)'=R'*R
+            if (~isa (A, 'double'))
+                error ('FACTORIZE:wrongtype', 'A must be double') ;
+            end
+            [m, n] = size (A) ;
+            if (m >= n)
+                error ('FACTORIZE:wrongdim', 'QR of A'' requires m < n.') ;
+            end
+            [~, f.R, p] = qr (A', sparse (n,0), 0) ;
+            f.P = sparse (1:m, p, 1) ;
+            F.A_condest = cheap_condest (get_diag (f.R), fail_if_singular) ;
+            F.A = A ;
+            F.Factors = f ;
+            F.A_rank = rank_est (f.R, m, n) ;
+            F.kind = 'sparse QR factorization of A'': (P*A)*(P*A)'' = R''*R' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            f = F.Factors ;
+            e = norm ((f.P*F.A)*(f.P*F.A)' - f.R'*f.R, 1) / norm (F.A*F.A', 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x = A\b using economy sparse QR of A'
+            % minimum 2-norm solution of an underdetermined system
+            A = F.A ;
+            f = F.Factors ;
+            x = A' * (f.P' * (f.R \ (f.R' \ (f.P * b)))) ;
+            e = A' * (f.P' * (f.R \ (f.R' \ (f.P * (b - A * x))))) ;
+            x = x + e ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x = b/A using economy sparse QR of A'
+            % least-squares solution of an overdetermined problem
+            bT = b' ;
+            A = F.A ;
+            f = F.Factors ;
+            x = f.P' * (f.R \ (f.R' \ (f.P * (A * bT)))) ;
+            e = f.P' * (f.R \ (f.R' \ (f.P * (A * (bT - A' * x))))) ;
+            x = (x + e)' ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorization_svd.m b/MATLAB_Tools/Factorize/factorization_svd.m
new file mode 100644
index 0000000..d3c3f62
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorization_svd.m
@@ -0,0 +1,211 @@
+classdef factorization_svd < factorization
+%FACTORIZATION_SVD A = U*S*V'
+% Adds the following extra methods that act just like the builtin functions.
+% Most take little or no time to compute, since they rely on the precomputed
+% SVD.  The exceptions are cond(F,p) and norm(F,p) when p is not 2.
+%
+%   c = cond (F,p)      the p-norm condition number.  p=2 is the default.
+%                       cond(F,2) takes no time to compute, since it was
+%                       computed when the SVD factorization was found.
+%   a = norm (F,p)      the p-norm.  see the cond(F,p) discussion above.
+%   r = rank (F)        returns the rank of A, precomputed by the SVD.
+%   Z = null (F)        orthonormal basis for the null space of A
+%   Q = orth (F)        orthonormal basis for the range of A
+%   C = pinv (F)        the pseudo-inverse, V'*(S\V).
+%   [U,S,V] = svd (F)   SVD of A or pinv(A), regular, economy, or rank-sized
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+    methods
+
+        function F = factorization_svd (A)
+            %FACTORIZATION_SVD singular value decomponsition, A = U*S*V'
+            [f.U, f.S, f.V] = svd (full (A)) ;
+            [m, n] = size (A) ;
+            % convert S into a vector of singular values
+            if (isempty (A))
+                f.S = 0 ;
+            elseif (isvector (A))
+                f.S = f.S (1) ;
+            else
+                f.S = diag (f.S) ;
+            end
+            % compute rank(A), and save it in F
+            f.r = sum (f.S > max (m,n) * eps (f.S (1))) ;
+            F.A_rank = f.r ;
+            % compute cond(A), and save it in F
+            if (isempty (A))
+                F.A_cond = 0 ;          % cond ([]) is zero, according to MATLAB
+            elseif (f.r < min (m,n))
+                F.A_cond = inf ;        % matrix is singular
+            else
+                F.A_cond = f.S (1) / f.S (end) ;
+            end
+            F.A = A ;
+            F.Factors = f ;
+            F.kind = 'singular value decomposition: A = U*S*V''' ;
+        end
+
+        function e = error_check (F)
+            %ERROR_CHECK : return relative 1-norm of error in factorization
+            % meant for testing only
+            [U, S, V] = svd (F) ; % extracts the pre-computed SVD of A from F
+            e = norm (F.A - U*S*V', 1) / norm (F.A, 1) ;
+        end
+
+        function x = mldivide_subclass (F,b)
+            %MLDIVIDE_SUBCLASS x=A\b using a singular value decomposition
+            % Only svd(A,'econ') is needed.
+            f = F.Factors ;
+            r = f.r ;
+            x = f.V (:,1:r) * (diag (f.S (1:r)) \ (f.U (:,1:r)' * b)) ;
+        end
+
+        function x = mrdivide_subclass (b,F)
+            %MRDIVIDE_SUBCLASS x=b/A using a singular value decomposition
+            % Only svd(A,'econ') is needed.
+            f = F.Factors ;
+            r = f.r ;
+            x = ((b * f.V (:,1:r)) / diag (f.S (1:r))) * f.U (:,1:r)' ;
+        end
+
+        function c = cond (F, p)
+            %COND the 2-norm condition number
+            % cond(F,2) takes O(1) time to compute once the SVD is known.
+            % Otherwise, pinv(A) (or pinv(A') if F has been transposed) is
+            % explicitly computed using the pre-computed [U,S,V]=svd(A).
+            if (nargin == 1 || isequal (p,2) || isempty (F))
+                % The 2-norm condition number has been pre-computed.
+                c = F.A_cond ;
+            else
+                % Compute the p-norm of a non-empty matrix, where p is not 2.
+                [m, n] = size (F) ;
+                if (m ~= n)
+                    error ('MATLAB:cond:normMismatchSizeA', ...
+                        'A is rectangular.  Use the 2 norm.') ;
+                end
+                r = F.A_rank ;
+                if (r < min (m,n))
+                    % matrix is rank-deficient so cond (A,p) is always inf
+                    c = inf ;
+                else
+                    % The matrix is square, non-empty, and has full rank.
+                    % One of these requires the explicit computation of pinv(A),
+                    % where U,S,V are already pre-computed.  The same result is
+                    % computed whether F represents A or its (pseudo) inverse.
+                    c = norm (double (F), p) * norm (double (inverse (F)), p) ;
+                end
+            end
+        end
+
+        function nrm = norm (F, p)
+            %NORM see the description of cond, above.
+            if (nargin == 1 || isequal (p,2) || isempty (F))
+                f = F.Factors ;
+                r = f.r ;
+                if (isempty (F))
+                    nrm = 0 ;
+                elseif (r == 0)
+                    if (F.is_inverse)
+                        nrm = inf ;
+                    else
+                        nrm = 0 ;
+                    end
+                else
+                    if (F.is_inverse)
+                        nrm = 1 / (f.S (r)) ;       % norm (pinv (A))
+                    else
+                        nrm = f.S (1) ;             % norm (A)
+                    end
+                end
+            else
+                % If F represents the inverse, then double (F) is pinv (A),
+                % which is computed with V*(S\U') via mldivide.  U,S,V are
+                % already computed, so double(F) is not too hard to compute.
+                nrm = norm (double (F), p) ;
+            end
+        end
+
+        function r = rank (F)
+            % The rank of A has been pre-computed.  Just return it.
+            r = F.A_rank ;
+        end
+
+        function Z = null (F)
+            %NULL orthonormal basis for the null space of A
+            f = F.Factors ;
+            r = f.r ;
+            Z = f.V (:, r+1:end) ;
+        end
+
+        function Q = orth (F)
+            %ORTH orthonormal basis for the range of A
+            % This function makes theta=subspace(A,B) easy to compute,
+            % 
+            f = F.Factors ;
+            r = f.r ;
+            Q = f.U (:, 1:r) ;
+        end
+
+        function C = pinv (F)
+            % PINV is just another name for inverse(factorize(A,'svd'))
+            C = inverse (F) ;
+        end
+
+        function [U,S,V] = svd (F, kind)
+            % SVD return the svd of A, A', pinv(A), or pinv(A'). [U,S,V]=svd(A)
+            % has already been computed.  Truncate / transpose / reshape it
+            % as needed, also considering svd(",'econ') and svd(",0).
+            f = F.Factors ;
+            U = f.U ;
+            S = f.S ;
+            V = f.V ;
+            [m, n] = size (F.A) ;
+            if (nargin > 1)
+                switch kind
+                    case 'econ'
+                        % return svd(A,'econ')
+                        k = min (m,n) ;
+                        U = U (:, 1:k) ;
+                        S = S (1:k) ;
+                        V = V (:, 1:k) ;
+                    case 'rank'
+                        % return the rank-sized SVD
+                        k = f.r ;
+                        U = U (:, 1:k) ;
+                        S = S (1:k) ;
+                        V = V (:, 1:k) ;
+                    case 0
+                        % return svd(A,0)
+                        if (m > n)
+                            k = n ;
+                            U = U (:, 1:k) ;
+                            S = S (1:k) ;
+                        end
+                    otherwise
+                        error ('unrecognized kind') ;
+                end
+            end
+            if (F.is_inverse ~= F.is_ctrans)
+                % returning svd(A') or svd(pinv(A)).  swap U and V
+                T = U ;
+                U = V ;
+                V = T ;
+            end
+            if (F.is_inverse)
+                % returning svd(pinv(A)) or svd(pinv(A')).  Invert and reverse
+                % S(1:r) and the corresponding singular vectors.
+                r = f.r ;
+                S = [(1 ./ S (r:-1:1)) ; (zeros (length (S) - r, 1))] ;
+                U (:, 1:r) = U (:, r:-1:1) ;
+                V (:, 1:r) = V (:, r:-1:1) ;
+            end
+            % The user expects S as a matrix of the proper size, so expand it.
+            k = length (S) ;
+            if (isempty (F))
+                k = 0 ;
+            end
+            S = full (sparse (1:k, 1:k, S, size (U,2), size (V,2))) ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/Factorize/factorize.m b/MATLAB_Tools/Factorize/factorize.m
new file mode 100644
index 0000000..b04505d
--- /dev/null
+++ b/MATLAB_Tools/Factorize/factorize.m
@@ -0,0 +1,369 @@
+function F = factorize (A,strategy,burble)
+%FACTORIZE an object-oriented method for solving linear systems
+% and least-squares problems, and for representing operations with the
+% inverse of a square matrix or the pseudo-inverse of a rectangular matrix.
+%
+% F = factorize(A) returns an object F that holds the factorization of A.
+% x=F\b then solves a linear system or a least-squares problem.  S=inverse(F)
+% or S=inverse(A) returns a factorized representation of the inverse of A so
+% that inverse(A)*b is mathematically equivalent to pinv(A)*b, but the former
+% does not actually compute the inverse or pseudo-inverse of A.
+%
+% Example
+%
+%   F = factorize(A) ;      % LU, QR, or Cholesky factorization of A
+%   x = F\b ;               % solve A*x=b; same as x=A\b
+%   S = inverse (F) ;       % S represents the factorization of inv(A)
+%   x = S*b ;               % same as x = A\b.
+%   E = A-B*inverse(D)*C    % efficiently computes the Schur complement
+%   E = A-B*inv(D)*C        % bad method for computing the Schur complement
+%   S = inverse(A) ; S(:,1) % compute just the first column of inv(A),
+%                           % without computing inv(A)
+%
+%   F = factorize (A, strategy, burble) ;   % optional 2nd and 3rd inputs
+%
+% A string can be specified as a second input parameter to select the strategy
+% used to factorize the matrix.  The first two are meta-strategies:
+%
+%   'default'   if rectangular
+%                   use QR for sparse A or A' (whichever is tall and thin);
+%                   use COD for full A
+%               else
+%                   if symmetric
+%                       if positive real diagonal: try CHOL
+%                       else (or if CHOL fails): try LDL
+%                   end
+%                   if not yet factorized: try LU (fails if rank-deficient)
+%               end
+%               if all else fails, or if QR or LU report that the matrix
+%               is singular (or nearly so): use COD
+%               This strategy mimics backslash, except that backslash never
+%               uses COD.  Backslash also exploits other solvers, such as
+%               specialized tridiagonal and banded solvers.
+%
+%   'symmetric' as 'default' above, but assumes A is symmetric without
+%               checking, which is faster if you already know A is symmetric.
+%               Uses tril(A) and assumes triu(A) is its transpose.  Results
+%               will be incorrect if A is not symmetric.  If A is rectangular,
+%               the 'default' strategy is used instead.
+%
+%   'unsymmetric'  as 'default', but assumes A is unsymmetric.
+%
+% The next "strategies" just select a single method, listed in decreasing order
+% of generality and increasing order of speed and memory efficiency.  All of
+% them except the SVD can exploit sparsity.
+%
+%   'svd'       use SVD.  Never fails ... unless it runs out of time or memory.
+%                   Coerces a sparse matrix A to full.
+%
+%   'cod'       use COD.  Almost as accurate as SVD, and much faster.  Based
+%                   on dense or sparse QR with rank estimation.  Handles
+%                   rank-deficient matrices, as long as it correctly estimates
+%                   the rank.  If the rank is ill-defined, use the SVD instead.
+%                   Sparse COD requires the SPQR package to be installed
+%                   (see http://www.suitesparse.com).
+%
+%   'qr'        use QR.  Reports a warning if A is singular.
+%
+%   'lu'        use LU.  Fails if A is rectangular; warning if A singular.
+%
+%   'ldl'       use LDL.  Fails if A is rank-deficient or not symmetric, or if
+%                   A is sparse and complex.  Uses tril(A) and assumes triu(A)
+%                   is the transpose of tril(A).
+%
+%   'chol'      use CHOL.  Fails if A is rank-deficient or not symmetric
+%                   positive definite.  If A is sparse, it uses tril(A) and
+%                   assumes triu(A) is the transpose of tril(A).  If A is dense,
+%                   triu(A) is used instead.
+%
+% A third input, burble, can be provided to tell this function to print what
+% methods it tries (if burble is nonzero).
+%
+% For a demo type "fdemo" in the Demo directory or see the Doc/ directory.
+%
+% See also inverse, slash, linsolve, spqr.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+assert (ndims (A) == 2, 'Matrix must be 2D.') ;
+
+if (nargin < 2 || isempty (strategy))
+    strategy = 'default' ;
+end
+if (nargin < 3)
+    burble = 0 ;
+end
+
+if (burble)
+    fprintf ('\nfactorize: strategy %s, A has size %d-by-%d, ', ...
+        strategy, size (A)) ;
+    if (issparse (A))
+        fprintf ('sparse with %d nonzeros.\n', nnz (A)) ;
+    else
+        fprintf ('full.\n') ;
+    end
+end
+
+switch strategy
+
+    case 'default'
+        [F, me] = backslash_mimic (A, burble, 0) ;
+
+    case 'symmetric'
+        [F, me] = backslash_mimic (A, burble, 1) ;
+
+    case 'unsymmetric'
+        [F, me] = backslash_mimic (A, burble, 2) ;
+
+    case 'svd'
+        [F, me] = factorize_svd (A, burble) ;
+
+    case 'cod'
+        [F, me] = factorize_cod (A, burble) ;
+
+    case 'qr'
+        [F, me] = factorize_qr (A, burble, 0) ;
+
+    case 'lu'
+        % do not report a failure if the matrix is singular
+        [F, me] = factorize_lu (A, burble, 0) ;
+
+    case 'ldl'
+        [F, me] = factorize_ldl (A, burble) ;
+
+    case 'chol'
+        [F, me] = factorize_chol (A, burble) ;
+
+    otherwise
+        error ('FACTORIZE:invalidStrategy', 'unrecognized strategy.') ;
+
+end
+
+if (~isobject (F))
+    throw (me) ;
+end
+
+%-------------------------------------------------------------------------------
+
+function [F, me] = backslash_mimic (A, burble, strategy)
+%BACKSLASH_MIMIC automatically select a method to factorize A.
+F = [ ] ;
+me = [ ] ;
+[m, n] = size (A) ;
+
+% If the following condition is true, then the QR, QRT, or LU factorizations
+% will report a failure if A is singular (or nearly so).  This allows COD
+% or COD_SPARSE to then be used instead.  COD_SPARSE relies on the SPQR
+% mexFunction in SuiteSparse, which might not be installed.  In this case,
+% QR, QRT, and LU do not report failures for sparse matrices that are singular
+% (or nearly so), since there is no COD_SPARSE to fall back on.
+fail_if_singular = ~issparse (A) || (exist ('spqr') == 3) ;                 %#ok
+try_cod = true ;
+
+if (m ~= n)
+    if (issparse (A))
+        % Use QR for the sparse rectangular case (ignore 'strategy' argument).
+        [F, me] = factorize_qr (A, burble, fail_if_singular) ;
+    else
+        % Use COD for the full rectangular case (ignore 'strategy' argument).
+        % If this fails, there's no reason to retry the COD below.  If A has
+        % full rank, then COD is the same as QR with column pivoting (with the
+        % same cost in terms of run time and memory).  Backslash in MATLAB uses
+        % QR with column pivoting alone, so this is just as fast as x=A\b in
+        % the full-rank case, but gives a more reliable result in the rank-
+        % deficient case.
+        try_cod = false ;
+        [F, me] = factorize_cod (A, burble) ;
+    end
+else
+    % square case: Cholesky, LDL, or LU factorization of A
+    switch strategy
+        case 0
+            is_symmetric = (nnz (A-A') == 0) ;
+        case 1
+            is_symmetric = true ;
+        case 2
+            is_symmetric = false ;
+    end
+    if (is_symmetric)
+        % A is symmetric (or assumed to be so)
+        d = diag (A) ;
+        if (all (d > 0) && nnz (imag (d)) == 0)
+            % try a Cholesky factorization
+            [F, me] = factorize_chol (A, burble) ;
+        end
+        if (~isobject (F) && (~issparse (A) || isreal (A)))
+            % try an LDL factorization.
+            % complex sparse LDL does not yet exist in MATLAB
+            [F, me] = factorize_ldl (A, burble) ;
+        end
+    end
+    if (~isobject (F))
+        % use LU if Cholesky and/or LDL failed, or were skipped.
+        [F, me] = factorize_lu (A, burble, fail_if_singular) ;
+    end
+end
+if (~isobject (F) && try_cod)
+    % everything else failed, matrix is rank-deficient.  Use COD
+    [F, me] = factorize_cod (A, burble) ;
+end
+
+
+%-------------------------------------------------------------------------------
+
+function [F, me] = factorize_qr (A, burble, fail_if_singular)
+% QR fails if the matrix is rank-deficient.
+F = [ ] ;
+me = [ ] ;
+try
+    [m, n] = size (A) ;
+    if (m >= n)
+        if (burble)
+            fprintf ('factorize: try QR of A ... ') ;
+        end
+        if (issparse (A))
+            F = factorization_qr_sparse (A, fail_if_singular) ;
+        else
+            F = factorization_qr_dense (A, fail_if_singular) ;
+        end
+    else
+        if (burble)
+            fprintf ('factorize: try QR of A'' ... ') ;
+        end
+        if (issparse (A))
+            F = factorization_qrt_sparse (A, fail_if_singular) ;
+        else
+            F = factorization_qrt_dense (A, fail_if_singular) ;
+        end
+    end
+    if (burble)
+        fprintf ('OK.\n') ;
+    end
+catch me
+    if (burble)
+        fprintf ('failed.\nfactorize: %s\n', me.message) ;
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+
+function [F, me] = factorize_chol (A, burble)
+% LDL fails if the matrix is rectangular, rank-deficient, or not positive
+% definite.  Only the lower triangular part of A is used.
+F = [ ] ;
+me = [ ] ;
+try
+    if (burble)
+        fprintf ('factorize: try CHOL ... ') ;
+    end
+    if (issparse (A))
+        F = factorization_chol_sparse (A) ;
+    else
+        F = factorization_chol_dense (A) ;
+    end
+    if (burble)
+        fprintf ('OK.\n') ;
+    end
+catch me
+    if (burble)
+        fprintf ('failed.\nfactorize: %s\n', me.message) ;
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+
+function [F, me] = factorize_ldl (A, burble)
+% LDL fails if the matrix is rectangular or rank-deficient.
+% As of MATLAB R2012a, ldl does not work for complex sparse matrices.
+% Only the lower triangular part of A is used.
+F = [ ] ;
+me = [ ] ;
+try
+    if (burble)
+        fprintf ('factorize: try LDL ... ') ;
+    end
+    if (issparse (A))
+        F = factorization_ldl_sparse (A) ;
+    else
+        F = factorization_ldl_dense (A) ;
+    end
+    if (burble)
+        fprintf ('OK.\n') ;
+    end
+catch me
+    if (burble)
+        fprintf ('failed.\nfactorize: %s\n', me.message) ;
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+
+function [F, me] = factorize_lu (A, burble, fail_if_singular)
+% LU fails if the matrix is rectangular or rank-deficient.
+F = [ ] ;
+me = [ ] ;
+try
+    if (burble)
+        fprintf ('factorize: try LU ... ') ;
+    end
+    if (issparse (A))
+        F = factorization_lu_sparse (A, fail_if_singular) ;
+    else
+        F = factorization_lu_dense (A, fail_if_singular) ;
+    end
+    if (burble)
+        fprintf ('OK.\n') ;
+    end
+catch me
+    if (burble)
+        fprintf ('failed.\nfactorize: %s\n', me.message) ;
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+
+function [F, me] = factorize_cod (A, burble)
+% COD only fails when it runs out of memory.
+F = [ ] ;
+me = [ ] ;
+try
+    if (burble)
+        fprintf ('factorize: try COD ... ') ;
+    end
+    if (issparse (A))
+        F = factorization_cod_sparse (A) ;
+    else
+        F = factorization_cod_dense (A) ;
+    end
+    if (burble)
+        fprintf ('OK.\n') ;
+    end
+catch me
+    if (burble)
+        fprintf ('failed.\nfactorize: %s\n', me.message) ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+
+function [F, me] = factorize_svd (A, burble)
+% SVD only fails when it runs out of memory.
+F = [ ] ;
+me = [ ] ;
+try
+    if (burble)
+        fprintf ('factorize: try SVD ... ') ;
+    end
+    F = factorization_svd (A) ;
+    if (burble)
+        fprintf ('OK.\n') ;
+    end
+catch me
+    if (burble)
+        fprintf ('failed.\nfactorize: %s\n', me.message) ;
+    end
+end
diff --git a/MATLAB_Tools/Factorize/inverse.m b/MATLAB_Tools/Factorize/inverse.m
new file mode 100644
index 0000000..8879cc9
--- /dev/null
+++ b/MATLAB_Tools/Factorize/inverse.m
@@ -0,0 +1,44 @@
+function S = inverse (A, varargin)
+%INVERSE factorized representation of inv(A) or pinv(A).
+% INVERSE is a fast and accurate replacement for INV or PINV when you want to
+% solve a linear system or least squares problem, or when you want to multiply
+% something by the inverse of A.  The inverse itself is NOT computed, UNLESS
+% the factorized form of the inverse is converted into a matrix via
+% double(inverse(A)).  If A is rectangular and has full rank, or rank deficient
+% and COD is able to accurately estimate the rank, then inverse(A) is a
+% factorized form of the pseudo-inverse of A, pinv(A).
+%
+% Example
+%
+%   x = inv(A)*b ;      % slow and inaccurate way to solve A*x=b
+%   x = inverse(A)*b ;  % fast an accurate way to solve A*x=b (uses x=A\b)
+%   x = A\b ;           % same as inverse(A)*b
+%
+%   x1 = A\b1 ; x2 = A\b2 ;                        % accurate but slow
+%   S = inverse(A) ; x1 = S*b1 ; x2 = S*b1 ;       % fast and accurate
+%   S = inv(A)     ; x1 = S*b1 ; x2 = S*b1 ;       % slow and inaccurate
+%
+%   Z = double(inverse(A)) ; % same as Z=inv(A), computes the inverse of
+%                            % A, returning Z as a matrix, not an object.
+%
+%   F = factorize(A) ;  % computes the factorization of A
+%   S = inverse(F) ;    % no flops, flags S as a factorized form of inv(A)
+%
+% An optional 2nd input selects the strategy used to factorize the matrix,
+% and an optional 3rd input tells the function to display how it factorizes
+% the matrix.  See the 'strategy' and 'burble' of the factorize function.
+%
+% Never use inv to multiply the inverse of a matrix A by another matrix.
+% There are rare uses for the explicit inv(A), but never do inv(A)*B or
+% B*inv(A).  Never do Z=A\eye(n), which is just the same thing as Z=inv(A).
+%
+% "Don't let that inv go past your eyes; to solve that system, factorize!"
+%
+% See also factorize, slash, inv, pinv.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+% This function is only called when A is a matrix.  If A is a factorize
+% object, then factorize.inverse is called instead.
+
+S = inverse (factorize (A, varargin {:})) ;
diff --git a/MATLAB_Tools/Factorize/private/cheap_condest.m b/MATLAB_Tools/Factorize/private/cheap_condest.m
new file mode 100644
index 0000000..d871aff
--- /dev/null
+++ b/MATLAB_Tools/Factorize/private/cheap_condest.m
@@ -0,0 +1,41 @@
+function c = cheap_condest (d, fail_if_singular)
+%CHEAP_CONDEST checks the diagonal of a triangular matrix
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (isempty (d))
+    dmin = 1 ;
+    dmax = 1 ;
+else
+    d = abs (d) ;
+    dmin = min (d) ;
+    dmax = max (d) ;
+end
+if (dmin == 0)
+    if (fail_if_singular)
+        error ('MATLAB:singularMatrix', ...
+            'Matrix is singular to working precision.');
+    else
+        warning ('MATLAB:singularMatrix', ...
+            'Matrix is singular to working precision.');
+    end
+elseif (dmin < 2 * eps * (dmax))
+    % MATLAB treats this as a warning, but it is treated here as an error
+    % so that F=factorize(A) will abandon this factorization and use a
+    % better one, in its default strategy.
+    if (fail_if_singular)
+        error ('MATLAB:nearlySingularMatrix', ...
+            ['Matrix is close to singular or badly scaled.\n' ...
+             '         Results may be inaccurate. RCOND = %g'], dmin / dmax) ;
+    else
+        warning ('MATLAB:nearlySingularMatrix', ...
+            ['Matrix is close to singular or badly scaled.\n' ...
+             '         Results may be inaccurate. RCOND = %g'], dmin / dmax) ;
+    end
+end
+if (dmin == 0) 
+    c = inf ;
+else
+    c = dmax / dmin ;
+end
+
diff --git a/MATLAB_Tools/Factorize/private/get_diag.m b/MATLAB_Tools/Factorize/private/get_diag.m
new file mode 100644
index 0000000..faa815a
--- /dev/null
+++ b/MATLAB_Tools/Factorize/private/get_diag.m
@@ -0,0 +1,15 @@
+function d = get_diag (A)
+%GET_DIAG extracts the diagonal of a matrix or vector.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (isempty (A))
+    d = [ ] ;
+elseif (isvector (A))
+    % diag (A) would return a matrix for this case, which we do not want.
+    d = A (1) ;
+else
+    d = diag (A) ;
+end
+d = full (d) ;
+% assert (isvector (d)) ;
diff --git a/MATLAB_Tools/Factorize/private/rank_est.m b/MATLAB_Tools/Factorize/private/rank_est.m
new file mode 100644
index 0000000..cd67e5b
--- /dev/null
+++ b/MATLAB_Tools/Factorize/private/rank_est.m
@@ -0,0 +1,8 @@
+function r = rank_est (R, m, n, tol)
+%RANK_EST computes a cheap estimate of the rank of a triangular matrix
+d = abs (get_diag (R)) ;
+if (nargin < 4 || tol < 0)
+    tol = 20 * (m+n) * eps (max (d)) ;
+end
+r = sum (d > tol) ;
+
diff --git a/MATLAB_Tools/Factorize/rq.m b/MATLAB_Tools/Factorize/rq.m
new file mode 100644
index 0000000..9b83b90
--- /dev/null
+++ b/MATLAB_Tools/Factorize/rq.m
@@ -0,0 +1,175 @@
+function [R, Q] = rq (A, m, n)
+%RQ economy RQ or QL factorization of a full matrix A.
+%   No special handling is done for rank-deficient matrices.
+%
+%   [R,Q] = rq (A)
+%   [R,Q] = rq (A,m,n)
+%
+% If A is m-by-n with m <= n, then R*Q=A is factorized with R upper triangular
+%   and m-by-m.  Q is m-by-n with orthonormal rows, where Q*Q' = eye (m), but
+%   Q'*Q is not identity.  RQ works quickly when A is upper trapezoidal, but
+%   also works in the general case.  With n=3 and m=5, an upper trapezoidal A:
+%
+%       x x x x x
+%       . x x x x
+%       . . x x x
+%
+%   The factorization is R*Q = A where R is upper triangular and m-by-m,
+%   and Q is m-by-n:
+%
+%         R    *      Q      =      A
+%       x x x     x x x x x     x x x x x
+%       . x x     x x x x x     . x x x x
+%       . . x     x x x x x     . . x x x
+%
+%   Q also happens to be upper trapezoidal if A is upper trapezoidal.
+%   With two optional input arguments (m,n), only A (1:m,1:n) is factorized.
+%
+% If m > n, then Q*R=A is computed where "R" is lower triangular and Q
+%   has orthonormal columns (Q'*Q is identity).
+%
+% Example
+%
+%   A = rand (3,4),   [R, Q] = rq (A),   norm (R*Q-A), norm (Q*Q'-eye(3))
+%   C = rand (4,3),   [L, Q] = rq (C),   norm (Q*L-C), norm (Q'*Q-eye(3))
+%
+% See also qr.
+
+% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (issparse (A))
+    % RQ would actually work, but it would be very inefficient since no fill
+    % reducing ordering is used.  That would require a row permutation of R.
+    error ('FACTORIZE:rq:sparse', 'RQ is not designed for sparse matrices.') ;
+end
+
+if (nargin == 1)
+    [m, n] = size (A) ;
+end
+
+if (m <= n)
+
+    %---------------------------------------------------------------------------
+    % RQ factorization of a short-and-fat matrix A
+    %---------------------------------------------------------------------------
+
+    [Q, R] = qr (A (m:-1:1, n:-1:1)', 0) ;
+    R = R (end:-1:1, end:-1:1)' ;
+    Q = Q (end:-1:1, end:-1:1)' ;
+
+    % Below is a step-by-step working description of the algorithm.  Each of
+    % the error norms will be small.  This code will operate correctly if
+    % uncommented, it will just be slower than the 3 lines of code above.
+
+    % (1) The A matrix is transposed and its rows and columns are reversed.
+    %   The row/column reversal can be viewed as multiplication of A by row and
+    %   column permutations, so this operation makes sense in terms of linear
+    %   algebra: H = (Pm*A*Pn)' where Pm and Pn are permutation matrices of
+    %   size m and n, respectively.
+
+    %           H = A (m:-1:1, n:-1:1)' ;
+
+    % H now has the following form.  This is good, because qr(H) can exploit
+    % the 3 zeros in the lower triangular part, to reduce the computation time.
+    %
+    %   x x x
+    %   x x x
+    %   x x x
+    %   . x x
+    %   . . x
+    %
+    % We could instead factorize A', which has the following shape:
+    %
+    %   x . .
+    %   x x .
+    %   x x x
+    %   x x x
+    %   x x x
+    %
+    % but the QR method in MATLAB cannot exploit the zeros in upper triangular
+    % part A'.
+
+    % (2) The QR factorzation of H is computed.  QR in MATLAB takes advantage
+    % of the zeros in H.  The resulting Q is n-by-m, R is m-by-m.
+
+    %           [Q, R] = qr (H, 0) ;
+    %           err = norm (Q*R-H)
+
+    %     Q    *    R    =    H
+    %
+    %   x x x     1 x x     x x x       (a "1" denotes the R(1,1) entry,
+    %   x x x     . x x     x x x        so it can be followed in the
+    %   x x x     . . x     x x x        operations below)
+    %   . x x               . x x
+    %   . . x               . . x
+
+    % (3) The columns of R and H are reversed.  This is the same as multiplying
+    % both sides of the equation by the Pm m-by-m permutation matrix on the
+    % right.
+
+    %           R = R (:, end:-1:1) ;
+    %           H = H (:, end:-1:1) ;
+    %           err = norm (Q*R-H)
+
+    %     Q    *    R    =    H
+    %
+    %   x x x     x x 1     x x x
+    %   x x x     x x .     x x x
+    %   x x x     x . .     x x x
+    %   . x x               x x .
+    %   . . x               x . .
+
+    % (4) Both sides of the equation are transposed.
+
+    %           H = H' ;
+    %           R = R' ;
+    %           Q = Q' ;
+    %           err = norm (R*Q-H)
+
+    %     R    *      Q     =      H
+    %
+    %   x x x     x x x . .    x x x x x
+    %   x x .     x x x x .    x x x x .
+    %   1 . .     x x x x x    x x x . .
+
+    % (5) The columns of Q and H are reversed.  This is the same as multiplying
+    %   both sides of the equation by the Pn n-by-n permutation matrix on the
+    %   right.  H is now equal to A again.
+
+    %           H = H (:, end:-1:1)  ;
+    %           Q = Q (:, end:-1:1)  ;
+    %           err = norm (A-H)
+    %           err = norm (R*Q-H)
+
+    %     R    *      Q     =      A
+    %
+    %   x x x     . . x x x    x x x x x
+    %   x x .     . x x x x    . x x x x
+    %   1 . .     x x x x x    . . x x x
+
+    % (6) The columns of R and rows of Q are reversed.  This the same as
+    %   inserting the product of Pm*Pm' = I between R and Q, where Pm is the
+    %   m-by-m permutation matrix.
+
+    %           R = R (:, end:-1:1) ;
+    %           Q = Q (end:-1:1, :) ;
+    %           err = norm (R*Q-H)
+    %           err = norm (Q*Q' - eye (m))
+
+    %     R    *      Q     =      A
+    %
+    %   x x x     x x x x x    x x x x x
+    %   . x x     . x x x x    . x x x x
+    %   . . 1     . . x x x    . . x x x
+
+else
+
+    %---------------------------------------------------------------------------
+    % QL factorization of a tall-and-thin matrix A
+    %---------------------------------------------------------------------------
+
+    [R, Q] = rq (A', n, m) ;
+    R = R' ;
+    Q = Q' ;
+
+end
diff --git a/MATLAB_Tools/GEE/Contents.m b/MATLAB_Tools/GEE/Contents.m
new file mode 100644
index 0000000..0211c1a
--- /dev/null
+++ b/MATLAB_Tools/GEE/Contents.m
@@ -0,0 +1,51 @@
+% GEE_ITS_SIMPLE: Gaussian Elimination Example (Gee! It's Simple!)
+% A simple illustration of Guassian elimination with partial pivoting.
+% This package is not meant for production use, just as a teaching tool.
+% It also illustrates how a proper MATLAB package should be documented and
+% written (with comments, error checking, exhaustive test code, simple code
+% as opposed to cumbersome for loops, etc).
+%
+% The gee_its_simple functions are fully commented.  The gee_its_short function
+% is the same as gee_its_simple except that it has no comments or error
+% checking so you can see how few lines it takes to solve this problem (without
+% using backslash, of course!).  It is just 15 lines of code excluding comments
+% (with pivoting).  Without pivoting, gee_its_too_short lives up to its name
+% (it is only 11 lines of code, but it's inaccurate).  For the actual
+% implementation of backslash in MATLAB 7.5, I would give a rough estimate of
+% about 250,000 lines of code (it includes LAPACK, the BLAS, UMFPACK, CHOLMOD,
+% MA57, AMD, COLAMD, COLMMD, a sparse Givens-based QR, specialized banded
+% solvers, and a left-looking sparse LU much like cs_lu in CSparse).  This
+% estimated line count excludes x=A\b for symbolic variables, which would use
+% the Symbolic Toolbox.  Compared with gee_its_simple, however, backslash is
+% about 25 times faster for a dense matrix of order 1000, and it is
+% "infinitely" faster for the sparse case (depending on the matrix).
+%
+% Example:
+%   x = gee_its_simple (A,b) ;  % x = A\b using Gaussian elimination
+%   x = gee_its_short (A,b) ;   % same as gee_its_simple, just shorter
+%
+% For production use:
+%   Use x=A\b instead of x = gee_its_simple (A,b)
+%   Use x=A\b instead of x = gee_its_short (A,b)
+%   Use x=L\b instead of x = gee_its_simple_forwardsolve (L,b)
+%   Use x=U\b instead of x = gee_its_simple_backsolve (U,b)
+%   Use [L,U,p]=lu(A) and rcond(A) for [LU,p,rcnd] = gee_its_simple_factorize(A)
+%
+% Primary Files:
+%   gee_its_short               - x=A\b, no comments or error checking (just for line count)
+%   gee_its_simple              - solves A*x=b using a Gaussian Elimination Example (it's simple!)
+%
+% Secondary Files:
+%   gee_its_simple_factorize    - Gaussian Elimination Example, with partial pivoting
+%   gee_its_simple_forwardsolve - computes x=L\b where L is unit lower triangular
+%   gee_its_simple_backsolve    - x=U\b where U is upper triangular
+%   gee_its_simple_resid        - compute the relative residual for x=A\b
+%   gee_its_simple_test         - tests the "Gee! It's Simple!" package
+%
+% Just for fun:
+%   gee_its_sweet               - solves Ax=b with just x=A\b; it doesn't get sweeter than this
+%   gee_its_too_short           - x=A\b, no pivoting (thus unstable!), just bare bones
+%
+% See also: lu, mldivide, rcond
+
+% Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/GEE/gee_its_short.m b/MATLAB_Tools/GEE/gee_its_short.m
new file mode 100644
index 0000000..e877b44
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_short.m
@@ -0,0 +1,22 @@
+function b = gee_its_short (A, b)
+%GEE_ITS_SHORT x=A\b, few comments, no error checking (just for line count)
+% Example:
+%   x = gee_its_short (A,b) ;       % same as x=A\b for square A
+% See also: mldivide, gee_its_simple
+
+% Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
+
+n = size (A,1) ;
+for k = 1:n
+    [x i] = max (abs (A (k:n,k))) ;
+    i = i+k-1 ;
+    A ([k i],:) = A ([i k],:) ;
+    b ([k i],:) = b ([i k],:) ;
+    A (k+1:n,k) = A (k+1:n,k) / A (k,k) ;
+    A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - A (k+1:n,k) * A (k,k+1:n) ;
+    b (k+1:n,:) = b (k+1:n,:) - A (k+1:n,k) * b (k,:) ;
+end
+for k = n:-1:1
+    b (k,:) = b (k,:) / A (k,k) ;
+    b (1:k-1,:) = b (1:k-1,:) - A (1:k-1,k) * b (k,:) ;
+end
diff --git a/MATLAB_Tools/GEE/gee_its_simple.m b/MATLAB_Tools/GEE/gee_its_simple.m
new file mode 100644
index 0000000..a1659e8
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_simple.m
@@ -0,0 +1,38 @@
+function [x, rcnd] = gee_its_simple (A, b)
+%GEE_ITS_SIMPLE solves A*x=b using a Gaussian Elimination Example (it's simple!)
+% For details on the algorithm used (Gaussian elimination with partial
+% pivoting), see gee_its_simple_factorize, gee_its_simple_forwardsolve,
+% and gee_its_simple_backsolve.
+%
+% Example:
+%
+%   x = gee_its_simple (A,b) ;
+%   [x,rcnd] = gee_its_simple (A,b) ;
+%
+%   % which is the same as:
+%   x = A\b ;
+%
+%   % or using LU:
+%   [L U p] = lu (A) ;
+%   x = U \ (L \ (b (p,:))) ;
+%   rcnd = min (abs (diag (U))) / max (abs (diag (U))) ;
+%
+% See also: lu, mldivide, rcond, gee_its_short
+
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+
+% check inputs
+if (nargin ~= 2 | nargout > 2)                                              %#ok
+    error ('Usage: [x,rcnd] = gee_its_simple (A,b)') ;
+end
+
+% ensure A is square, and that A and b have the same number of rows
+gee_its_simple_check (A, 'A', b) ;
+
+% LU factorization, using Gaussian Elimination with partial pivoting, same as
+% [L,U,p] = lu (A) ; rcnd = rcond (A) ; except return L and U in one matrix LU.
+[LU p rcnd] = gee_its_simple_factorize (A) ;
+
+% forward/backsolve, same as x = U \ (L \ b (p,:))
+x = gee_its_simple_backsolve (LU, gee_its_simple_forwardsolve (LU, b (p,:))) ;
+
diff --git a/MATLAB_Tools/GEE/gee_its_simple_backsolve.m b/MATLAB_Tools/GEE/gee_its_simple_backsolve.m
new file mode 100644
index 0000000..99d3593
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_simple_backsolve.m
@@ -0,0 +1,38 @@
+function b = gee_its_simple_backsolve (U, b)
+%GEE_ITS_SIMPLE_BACKSOLVE x=U\b where U is upper triangular
+% Perform back substitution to solve x=U\b.  U must be square.  The lower
+% triangular part of U is ignored (this allows L and U to be packed into a
+% single matrix).
+%
+% Example:
+%
+%   x = gee_its_simple_backsolve (U,b) ;
+%
+%   % which is the same as
+%   x = triu (U) \ b ;
+%
+% See also: mldivide, gee_its_simple, gee_its_short, gee_its_simple_forwardsolve
+
+% Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% check inputs
+%-------------------------------------------------------------------------------
+
+if (nargin ~= 2 | nargout > 1)                                              %#ok
+    error ('Usage: x = ge_its_simple_backsolve (U,b)') ;
+end
+
+% ensure U is square, and that U and b have the same number of rows
+gee_its_simple_check (U, 'U', b) ;
+
+%-------------------------------------------------------------------------------
+% backsolve solve, overwriting b with the solution U\b
+%-------------------------------------------------------------------------------
+
+n = size (U,1) ;
+for k = n:-1:1
+    b (k,:) = b (k,:) / U (k,k) ;
+    b (1:k-1,:) = b (1:k-1,:) - U (1:k-1,k) * b (k,:) ;
+end
+
diff --git a/MATLAB_Tools/GEE/gee_its_simple_factorize.m b/MATLAB_Tools/GEE/gee_its_simple_factorize.m
new file mode 100644
index 0000000..27abc0d
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_simple_factorize.m
@@ -0,0 +1,129 @@
+function [A, p, rcnd] = gee_its_simple_factorize (A)
+%GEE_ITS_SIMPLE_FACTORIZE Gaussian Elimination Example, with partial pivoting
+%
+% gee_its_simple_factorize factorizes the n-by-n matrix A(p,:) in to the
+% product of a unit lower triangular matrix L and an upper triangular matrix U.
+% "Unit" means that the diagonal entires of L are all equal to one.  The
+% entries on the diagonal of U are not equal to one.  The permutation vector p
+% is a permutation of 1:n which arises from the row swaps performed by partial
+% pivoting.  A(p,:) can also be written as the product of an n-by-n permutation
+% matrix P times A; or P*A where P=I(p,:) where I=eye(n), or P=sparse(1:n,p,1)
+% for a more concise representation.  Thus, L*U equals P*A or equivalently
+% A(p,:).
+%
+% This factorization can be used to solve a linear system of equations, A*x=b.
+% using the following derivation, where below, "=" is mathematical equality,
+% not MATLAB assignment:
+%
+%   A*x = b             (1) original system
+%   L*U = P*A           (2) factorization of P*A or A(p,:) into the product L*U
+%   P*A*x = P*b         (3) multiply both sides of (1) by P
+%   L*U*x = P*b         (4) substitute (2) into (3)
+%   let y = U*x         (5) define y as U*x
+%   let c = P*b         (6) define c as P*b
+%   L*y = c             (7) subsitute (5) and (6) into (4)
+%   U*x = y             (8) a rewrite of (5)
+%
+% These expressions can be used to compute x, where below "=" is MATLAB
+% assignment, not mathematical equality:
+%
+%   [L U p] = lu (A) ;  % factorize
+%   y = L \ (P*b) ;     % forward solve of (7), a lower triangular system
+%   x = U \ y ;         % backsolve of (8), an upper triangular system
+%
+% The book "Direct Methods for Sparse Linear Systems" by T. Davis, SIAM, 2006,
+% includes a complete derivation of Gaussian Elimination (producing an LU
+% factorization) and partial pivoting, forward solve, and back solve, for both
+% the full and sparse cases.  Refer to Section 3.1 for forward/backsolve, and
+% Section 6.3 for right-looking LU factorization (aka Gaussian elimination).
+%
+% See also "Numerical Computing with MATLAB" (Chapter 2, "Linear Equations"),
+% by Cleve Moler, SIAM, 2004.  You can also download the book for free from
+% http://www.mathworks.com/moler .  The NCM Toolbox includes the lutx and
+% bslashtx functions which are very similar to the algorithms used here
+% (the backsolve in bslashtx works by rows of U; here it's by columns).
+%
+% In contrast to the MATLAB lu function, this function returns L and U packed
+% into a single n-by-n matrix called LU, where L is contained in the strictly
+% lower triangular part of LU (the unit diagonal of L is not stored) and U is
+% stored in the strictly upper triangular part of LU.
+%
+% A very cheap estimate of the reciprocal condition number is also returned,
+% which is merely the smallest absolute value on the diagonal of U divided by
+% the largest absolute value.  This is the same estimate used in x=A\b to
+% decide when to print the warning "matrix is close to singular or badly
+% scaled."
+%
+% Example:
+%
+%   [LU p rcnd] = gee_its_simple_factorize (A) ;
+%
+%   % which is the same as
+%   [L U p] = lu (A) ;
+%   LU = tril (L,-1) + U ;
+%   rcnd = rcond (A) ;          % this gives a better estimate
+%
+% See also: lu, rcond
+
+% Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% check the inputs
+%-------------------------------------------------------------------------------
+
+if (nargin < 1 | nargout > 3)                                               %#ok
+    error ('Usage: [LU p rcnd] = gee_its_simple_factorize (A)') ;
+end
+
+% ensure A is square
+gee_its_simple_check (A, 'A') ;
+
+%-------------------------------------------------------------------------------
+% LU factorization, using Gaussian elimination with partial pivoting
+%-------------------------------------------------------------------------------
+
+% start with the identity permutation
+n = size (A,1) ;
+p = 1:n ;
+
+% compute L, U, and p (overwriting A with L and U)
+for k = 1:n
+    % partial pivoting: look in A(k:n,k) for the largest entry A(i,k)
+    [x i] = max (abs (A (k:n,k))) ;
+    i = i+k-1 ;
+    % swap row i and k of A (and L)
+    A ([k i],:) = A ([i k],:) ;
+    % record the pivot row swap just made
+    p ([k i]) = p ([i k]) ;
+    % divide the pivot column (the kth column of L) by the pivot entry
+    A (k+1:n,k) = A (k+1:n,k) / A (k,k) ;
+    % subtract rank-1 outer product from the (n-k)-by-(n-k) trailing submatrix
+    A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - A (k+1:n,k) * A (k,k+1:n) ;
+end
+
+%-------------------------------------------------------------------------------
+% compute reciprocal condition number estimate
+%-------------------------------------------------------------------------------
+
+if (n == 0)
+    rcnd = 1 ;
+else
+    d = max (abs (diag (A))) ;
+    if (d == 0)
+        rcnd = 0 ;
+    else
+        rcnd = min (abs (diag (A))) / d ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% check the result
+%-------------------------------------------------------------------------------
+
+if (rcnd == 0)
+    warning ('MATLAB:singularMatrix', 'matrix is singular') ;
+elseif (~isfinite (rcnd) | rcnd < eps)                                      %#ok
+    warning ('MATLAB:nearlySingluarMatrix', ...
+             'matrix is close to singular or badly scaled') ;
+end
+
diff --git a/MATLAB_Tools/GEE/gee_its_simple_forwardsolve.m b/MATLAB_Tools/GEE/gee_its_simple_forwardsolve.m
new file mode 100644
index 0000000..2882e1f
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_simple_forwardsolve.m
@@ -0,0 +1,38 @@
+function b = gee_its_simple_forwardsolve (L, b)
+%GEE_ITS_SIMPLE_FORWARDSOLVE computes x=L\b where L is unit lower triangular
+% Perform forward substitution to solve x=L\b.  L must be square.  The diagonal
+% and upper triangular part of L is ignored (this allows L and U to be packed
+% into a single matrix).
+%
+% Example:
+%
+%   x = gee_its_simple_forwardsolve (L,b) ;
+%
+%   % which is the same as:
+%   L2 = tril (L,-1) + eye (size (L,1)) ;
+%   x = L2\b ;
+%
+% See also: mldivide, gee_its_simple, gee_its_short, gee_its_simple_backsolve
+
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% check inputs
+%-------------------------------------------------------------------------------
+
+if (nargin ~= 2 | nargout > 1)                                              %#ok
+    error ('Usage: x = ge_its_simple_forwardsolve (L,b)') ;
+end
+
+% ensure L is square, and that L and b have the same number of rows
+gee_its_simple_check (L, 'L', b) ;
+
+%-------------------------------------------------------------------------------
+% forward solve, overwriting b with the solution L\b
+%-------------------------------------------------------------------------------
+
+n = size (L,1) ;
+for k = 1:n
+    b (k+1:n,:) = b (k+1:n,:) - L (k+1:n,k) * b (k,:) ;
+end
+
diff --git a/MATLAB_Tools/GEE/gee_its_simple_resid.m b/MATLAB_Tools/GEE/gee_its_simple_resid.m
new file mode 100644
index 0000000..6076444
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_simple_resid.m
@@ -0,0 +1,15 @@
+function r = gee_its_simple_resid (A, x, b)
+%GEE_ITS_SIMPLE_RESID compute the relative residual for x=A\b
+% For non-singular matrices with reasonable condition number, the relative
+% residual is typically O(eps).
+%
+% Example:
+%
+%   r = gee_its_simple_resid (A, x, b) ;
+%
+% See also: norm, gee_its_simple
+
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+
+r = norm (A*x-b,inf) / (norm (A,inf) * norm (x, inf) + norm (b, inf)) ;
+
diff --git a/MATLAB_Tools/GEE/gee_its_simple_test.m b/MATLAB_Tools/GEE/gee_its_simple_test.m
new file mode 100644
index 0000000..41b7327
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_simple_test.m
@@ -0,0 +1,282 @@
+function gee_its_simple_test
+%GEE_ITS_SIMPLE_TEST tests the "Gee! It's Simple!" package
+% Exhaustive test of the "Gee! It's Simple!" package.  Returns the largest
+% relative residual for any solution to A*x=b (using the inf norm).  This test
+% exercises all statements in the package.  Note that the rand state is
+% modified.
+%
+% Example:
+%   gee_its_simple_test ;
+%
+% See also: gee_its_simple, gee_its_short, rand, mldivide, gee_its_simple_resid
+
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% error-handling tests
+%-------------------------------------------------------------------------------
+
+fprintf ('\nTesting error handling (expect error and warning messages):\n\n');
+
+gunk = 0 ;
+ok = 0 ;
+
+lasterr ('') ;
+
+try
+    % too many inputs
+    gee_its_simple_factorize (A,gunk) ;                                     %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too many outputs
+    [LU,p,rcnd,gunk] = gee_its_simple_factorize (A) ;                       %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too few inputs
+    gee_its_simple_factorize ;                                              %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too many inputs
+    x = gee_its_simple (A,b,gunk) ;                                         %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too many outputs
+    [x,rcnd,gunk] = gee_its_simple (A,b) ;                                  %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too few inputs
+    x = gee_its_simple ;                                                    %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too many inputs
+    x = gee_its_simple_forwardsolve (A,b,gunk) ;                            %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too many outputs
+    [x,gunk] = gee_its_simple_forwardsolve (A,b) ;                          %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too few inputs
+    x = gee_its_simple_forwardsolve ;                                       %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too many inputs
+    x = gee_its_simple_backsolve (A,b,gunk) ;                               %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too many outputs
+    [x,gunk] = gee_its_simple_backsolve (A,b) ;                             %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % too few inputs
+    x = gee_its_simple_backsolve ;                                          %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % rectangular A
+    x = gee_its_simple (eye (4,3), ones (4,1)) ;                            %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % A is 3D
+    x = gee_its_simple (ones (9,3,3), ones (9,1)) ;                         %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % b is 3D
+    x = gee_its_simple (eye (3,3), ones (3,3,3)) ;                          %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % dimensions of A and b do not matrix
+    x = gee_its_simple (eye (3,3), ones (4,1)) ;                            %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % dimensions of L and b do not matrix
+    x = gee_its_simple_forwardsolve (eye (3,3), ones (4,1)) ;               %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+try
+    % dimensions of U and b do not matrix
+    x = gee_its_simple_backsolve (eye (3,3), ones (4,1)) ;                  %#ok
+catch
+    ok = ok + 1 ;
+    disp (lasterr) ;
+end
+fprintf ('\n') ;
+
+% singular matrix
+lastwarn ('') ;
+x = gee_its_simple (0, 1) ;                                                 %#ok
+[msg, id] = lastwarn ;
+if (~isempty (msg) & ~isempty (id))                                         %#ok
+    ok = ok + 1 ;
+end
+fprintf ('\n') ;
+
+% ill-conditioned matrix
+lastwarn ('') ;
+x = gee_its_simple ([1e30 2e30 ; 1 1], [1 ; 1]) ;                           %#ok
+[msg, id] = lastwarn ;
+if (~isempty (msg) & ~isempty (id))                                         %#ok
+    ok = ok + 1 ;
+end
+
+if (ok ~= 20)
+    error ('test failed') ;
+end
+
+fprintf ('\n\nError-handing tests complete (all error messages and warnings\n');
+fprintf ('shown above were expected).  Now testing for accuracy:\n\n') ;
+
+%-------------------------------------------------------------------------------
+% compare accuracy vs. backslash
+%-------------------------------------------------------------------------------
+
+maxerr1 = 0 ;   % largest residual for A\b (gee_its_sweet)
+maxerr2 = 0 ;   % largest residual for gee_its_simple (A,b)
+maxerr3 = 0 ;   % largest residual for gee_its_short (A,b)
+maxerr4 = 0 ;   % largest residual for gee_its_too_short (A,b)
+rmax = 0 ;      % largest relative difference in rcond
+
+nmax = 50 ;     % largest dimension of A to test
+cmax = 10 ;     % largest number of columns of b to test
+ntrials = 2 ;   % number of trials for each x=A\b
+
+rand ('state', 0) ;
+
+for n = 0:nmax
+    fprintf ('.') ;
+    for c = 0:cmax
+        for trial = 1:ntrials
+
+            % set up the system
+            A = rand (n) ;
+            b = rand (n,c) ;
+
+            % solve it four different ways
+            x1 = gee_its_sweet (A,b) ;      % this is just a one-liner: x=A\b
+            x2 = gee_its_simple (A,b) ;
+            x3 = gee_its_short (A,b) ;
+            x4 = gee_its_too_short (A,b) ;
+
+            % get the relative residuals
+            err1 = gee_its_simple_resid (A, x1, b) ;
+            err2 = gee_its_simple_resid (A, x2, b) ;
+            err3 = gee_its_simple_resid (A, x3, b) ;
+            err4 = gee_its_simple_resid (A, x4, b) ;
+
+            maxerr1 = max (maxerr1, err1) ;
+            maxerr2 = max (maxerr2, err2) ;
+            maxerr3 = max (maxerr3, err3) ;
+            maxerr4 = max (maxerr4, err4) ;
+
+            if (max ([err1 err2 err3]) > 1e-14)
+                error ('test failed') ;
+            end
+
+            % test rcond
+            if (n > 0)
+                [L,U,p] = lu (A) ;                                          %#ok
+                r1 = min (abs (diag (U))) / max (abs (diag (U))) ;
+                [LU,p,r2] = gee_its_simple_factorize (A) ;
+                if (r1 ~= 0)
+                    r = abs (r1 - r2) / r1 ;
+                    rmax = max (rmax, r) ;
+                end
+                if (r > 1e-10)
+                    error ('test failed') ;
+                end
+            end
+        end
+    end
+end
+fprintf ('\n') ;
+
+fprintf ('max residual for backslash:         %g\n', maxerr1) ;
+fprintf ('max residual for gee_its_simple:    %g\n', maxerr2) ;
+fprintf ('max residual for gee_its_short:     %g\n', maxerr3) ;
+fprintf ('max residual for gee_its_too_short: %g (no pivoting!)\n', maxerr4) ;
+
+fprintf ('\n\nAll tests passed OK\n') ;
+
diff --git a/MATLAB_Tools/GEE/gee_its_sweet.m b/MATLAB_Tools/GEE/gee_its_sweet.m
new file mode 100644
index 0000000..3a3ffa5
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_sweet.m
@@ -0,0 +1,28 @@
+function x = gee_its_sweet (A, b)
+% GEE_ITS_SWEET solves Ax=b with just x=A\b; it doesn't get sweeter than this
+%
+% Example:
+%
+%   x = gee_its_sweet (A,b) ;       % just does x=A\b, using backslash itself
+%
+% See also: mldivide
+
+% I include the copyright below ... just to silence the Help Report ...  Yes,
+% it's kind of silly to copyright a one-line code :-)  ... but then I do hold
+% the copyright to perhaps a third to a half of the code used internally in
+% MATLAB itself, to do x=A\b (UMFPACK, CHOLMOD, AMD, COLAMD, SPQR) along with
+% co-authors Iain Duff, Patrick Amestoy, John Gilbert, Esmond Ng, and Stefan
+% Larimore (CHOLMOD includes other code modules co-authored by Bill Hager,
+% Morris Chen, and Siva Rajamanickam, but these do not appear in x=A\b).  The
+% other part of x=A\b includes LAPACK and the BLAS (Dongarra et al), a sparse
+% QR by John Gilbert, many other specialized solvers by Penny Anderson and Pat
+% Quillen, and MA57 by Iain Duff.  Cleve Moler and Rob Schrieber have also
+% worked on backslash.  The sparse case includes iterative refinement with
+% sparse backward error (algorithm by Mario Arioli, Jim Demmel, and Iain Duff)
+% but code by T. Davis.  I've probably left someone out of this cast of
+% thousands because I haven't seen the code for mldivide (aka backslash), just
+% LAPACK, the BLAS, and my codes.
+
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+
+x = A\b ;   % I hearby call upon 250k lines of code (or so) to solve Ax=b
diff --git a/MATLAB_Tools/GEE/gee_its_too_short.m b/MATLAB_Tools/GEE/gee_its_too_short.m
new file mode 100644
index 0000000..d41a2d4
--- /dev/null
+++ b/MATLAB_Tools/GEE/gee_its_too_short.m
@@ -0,0 +1,18 @@
+function b = gee_its_too_short (A, b)
+%GEE_ITS_TOO_SHORT x=A\b, no pivoting (thus unstable!), just bare bones
+% Example:
+%   x = gee_its_too_short (A,b) ;       % x=A\b, with no pivoting (!)
+% See also: mldivide, gee_its_simple, gee_its_short
+
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+
+n = size (A,1) ;
+for k = 1:n
+    A (k+1:n,k) = A (k+1:n,k) / A (k,k) ;
+    A (k+1:n,k+1:n) = A (k+1:n,k+1:n) - A (k+1:n,k) * A (k,k+1:n) ;
+    b (k+1:n,:) = b (k+1:n,:) - A (k+1:n,k) * b (k,:) ;
+end
+for k = n:-1:1
+    b (k,:) = b (k,:) / A (k,k) ;
+    b (1:k-1,:) = b (1:k-1,:) - A (1:k-1,k) * b (k,:) ;
+end
diff --git a/MATLAB_Tools/GEE/private/gee_its_simple_check.m b/MATLAB_Tools/GEE/private/gee_its_simple_check.m
new file mode 100644
index 0000000..caabe7d
--- /dev/null
+++ b/MATLAB_Tools/GEE/private/gee_its_simple_check.m
@@ -0,0 +1,30 @@
+function gee_its_simple_check (A, name, b)
+%GEE_ITS_SIMPLE_CHECK private function to check input arguments
+% Ensures the matrix A is square, and that the right-hand-side b has the same
+% number of rows as A (if present).  All matrices must be 2D, as well.
+%
+% Example:
+%   gee_its_simple_check (A, 'A', b)
+%
+% See also: gee_its_simple
+
+% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+
+[m n] = size (A) ;
+if (m ~= n)
+    error ('%s must be square', name) ;
+end
+
+if (ndims (A) ~= 2)
+    error ('%s must be a 2D matrix', name) ;
+end
+
+if (nargin > 2)
+    if (m ~= size (b,1))
+        error ('%s and b must have the same number of rows', name) ;
+    end
+    if (ndims (b) ~= 2)
+        error ('b must be a 2D matrix') ;
+    end
+end
+
diff --git a/MATLAB_Tools/LINFACTOR/Contents.m b/MATLAB_Tools/LINFACTOR/Contents.m
new file mode 100644
index 0000000..52bbf13
--- /dev/null
+++ b/MATLAB_Tools/LINFACTOR/Contents.m
@@ -0,0 +1,22 @@
+% LINFACTOR
+%
+% This simple MATLAB function shows you how to use LU or CHOL to factor a matrix
+% and then solve a linear system A*x=b.
+%
+% Files
+%   linfactor - factorize a matrix, or use the factors to solve Ax=b.
+%   lintests  - test linfactor with many different kinds of systems.
+%   lintest   - test A*x=b, using linfactor, x=A\b, and (ack!) the explicit inv(A).
+%
+% Example:
+%   F = linfactor (A) ;     % factor A, returning an object F
+%   x = linfactor (F,b) ;   % solve Ax=b using F (the factorization of A)
+%   lintests ;              % test linfactor with various kinds of systems
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+%
+% License: this software is free for any use.  No warranty included or implied.
+% You must agree to only one condition to use this software: you must be aware
+% that you have been told that using inv(A) is a horrible, awful, and absoluty
+% abysmal method for solving a linear system of equations.  If you do not
+% agree to this condition, you must delete this software.
diff --git a/MATLAB_Tools/LINFACTOR/README.txt b/MATLAB_Tools/LINFACTOR/README.txt
new file mode 100644
index 0000000..1da7555
--- /dev/null
+++ b/MATLAB_Tools/LINFACTOR/README.txt
@@ -0,0 +1,61 @@
+LINFACTOR factorize a matrix, or use the factors to solve Ax=b.
+Timothy A. Davis, http://www.suitesparse.com
+
+Uses LU or CHOL to factorize A, or uses a previously computed factorization to
+solve a linear system.  This function automatically selects an LU or Cholesky
+factorization, depending on the matrix.  A better method would be for you to
+select it yourself.  Note that mldivide uses a faster method for detecting
+whether or not A is a candidate for sparse Cholesky factorization (see spsym in
+the CHOLMOD package, for example).
+
+Example:
+
+  F = linfactor (A) ;     % factorizes A into the object F
+
+  x = linfactor (F,b) ;   % uses F to solve Ax=b
+
+  norm (A*x-b)
+
+A second output is the time taken by the method, ignoring the overhead of
+determining which method to use.  This makes for a fairer comparison between
+methods, since normally the user will know if the matrix is supposed to be
+symmetric positive definite or not, and whether or not the matrix is sparse.
+Also, the overhead here is much higher than mldivide or spsym.
+
+This function has its limitations:
+
+(1) determining whether or not the matrix is symmetric via nnz(A-A') is slow.
+mldivide (and spsym in CHOLMOD) do it much faster.
+
+(2) MATLAB really needs a sparse linsolve.  See cs_lsolve, cs_ltsolve, and
+cs_usolve in CSparse, for example.
+
+(3) this function really needs to be written as a mexFunction.
+
+(4) the full power of mldivide is not brought to bear.  For example, UMFPACK is
+not very fast for sparse tridiagonal matrices.  It's about a factor of four
+slower than a specialized tridiagonal solver as used in mldivide.
+
+(5) permuting a sparse vector or matrix is slower in MATLAB than it should be;
+a built-in linfactor would reduce this overhead.
+
+(6) mldivide when using UMFPACK uses relaxed partial pivoting and then
+iterative refinement.  This leads to sparser LU factors, and typically accurate
+results.  linfactor uses sparse LU without iterative refinement.
+
+The primary purpose of this function is to answer The Perennially Asked
+Question (or The PAQ for short (*)):  "Why not use x=inv(A)*b to solve Ax=b?
+How do I use LU or CHOL to solve Ax=b?"  The full answer is below.  The short
+answer to The PAQ (*) is "PAQ=LU ... ;-) ... never EVER use inv(A) to solve
+Ax=b."
+
+The secondary purpose of this function is to provide a prototype for some of
+the functionality of a true MATLAB built-in linfactor function.
+
+Finally, the third purpose of this function is that you might find it actually
+useful for production use, since its syntax is simpler than factorizing the
+matrix yourself and then using the factors to solve the system.  
+
+See also lu, chol, mldivide, linsolve, umfpack, cholmod.
+
+Oh, did I tell you never to use inv(A) to solve Ax=b?
diff --git a/MATLAB_Tools/LINFACTOR/linfactor.m b/MATLAB_Tools/LINFACTOR/linfactor.m
new file mode 100644
index 0000000..a42836a
--- /dev/null
+++ b/MATLAB_Tools/LINFACTOR/linfactor.m
@@ -0,0 +1,186 @@
+function [result, t] = linfactor (arg1, arg2)
+%LINFACTOR factorize a matrix, or use the factors to solve Ax=b.
+% Uses LU or CHOL to factorize A, or uses a previously computed factorization to
+% solve a linear system.  This function automatically selects an LU or Cholesky
+% factorization, depending on the matrix.  A better method would be for you to
+% select it yourself.  Note that mldivide uses a faster method for detecting
+% whether or not A is a candidate for sparse Cholesky factorization (see spsym
+% in the CHOLMOD package, for example).
+%
+% Example:
+%   F = linfactor (A) ;     % factorizes A into the object F
+%   x = linfactor (F,b) ;   % uses F to solve Ax=b
+%   norm (A*x-b)
+%
+% A second output is the time taken by the method, ignoring the overhead of
+% determining which method to use.  This makes for a fairer comparison between
+% methods, since normally the user will know if the matrix is supposed to be
+% symmetric positive definite or not, and whether or not the matrix is sparse.
+% Also, the overhead here is much higher than mldivide or spsym.
+%
+% This function has its limitations:
+%
+% (1) determining whether or not the matrix is symmetric via nnz(A-A') is slow.
+%     mldivide (and spsym in CHOLMOD) do it much faster.
+%
+% (2) MATLAB really needs a sparse linsolve.  See cs_lsolve, cs_ltsolve, and
+%     cs_usolve in CSparse, for example.
+%
+% (3) this function really needs to be written as a mexFunction.
+%
+% (4) the full power of mldivide is not brought to bear.  For example, UMFPACK
+%     is not very fast for sparse tridiagonal matrices.  It's about a factor of
+%     four slower than a specialized tridiagonal solver as used in mldivide.
+%
+% (5) permuting a sparse vector or matrix is slower in MATLAB than it should be;
+%     a built-in linfactor would reduce this overhead.
+%
+% (6) mldivide when using UMFPACK uses relaxed partial pivoting and then
+%     iterative refinement.  This leads to sparser LU factors, and typically
+%     accurate results.  linfactor uses sparse LU without iterative refinement.
+%
+% The primary purpose of this function is to answer The Perennially Asked
+% Question (or The PAQ for short (*)):  "Why not use x=inv(A)*b to solve Ax=b?
+% How do I use LU or CHOL to solve Ax=b?"  The full answer is below.  The short
+% answer to The PAQ (*) is "PAQ=LU ... ;-) ... never EVER use inv(A) to solve
+% Ax=b."
+%
+% The secondary purpose of this function is to provide a prototype for some of
+% the functionality of a true MATLAB built-in linfactor function.
+% 
+% Finally, the third purpose of this function is that you might find it actually
+% useful for production use, since its syntax is simpler than factorizing the
+% matrix yourself and then using the factors to solve the system.
+%
+% See also lu, chol, mldivide, linsolve, umfpack, cholmod.
+%
+% Oh, did I tell you never to use inv(A) to solve Ax=b?
+%
+% Requires MATLAB 7.3 (R2006b) or later.
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 1 | nargin > 2 | nargout > 2)          %#ok
+    error ('Usage: F=linfactor(A) or x=linfactor(F,b)') ;
+end
+
+if (nargin == 1)
+
+    %---------------------------------------------------------------------------
+    % F = linfactor (A) ;
+    %---------------------------------------------------------------------------
+
+    A = arg1 ;
+    [m n] = size (A) ;
+    if (m ~= n)
+        error ('linfactor: A must be square') ;
+    end
+
+    if (issparse (A))
+
+        % try sparse Cholesky (CHOLMOD): L*L' = P*A*P'
+        if (nnz (A-A') == 0 & all (diag (A) > 0))   %#ok
+            try
+                tic ;
+                [L, g, PT] = chol (A, 'lower') ;
+                t = toc ;
+                if (g == 0)
+                    result.L = L ;
+                    result.LT = L' ;    % takes more memory, but solve is faster
+                    result.P = PT' ;    % ditto.  Need a sparse linsolve here...
+                    result.PT = PT ;
+                    result.kind = 'sparse Cholesky: L*L'' = P*A*P''' ;
+                    result.code = 0 ;
+                    return
+                end
+            catch
+		% matrix is symmetric, but not positive definite
+		% (or we ran out of memory)
+            end
+        end
+
+        % try sparse LU (UMFPACK, with row scaling): L*U = P*(R\A)*Q
+        tic ;
+        [L, U, P, Q, R] = lu (A) ;
+        t = toc ;
+        result.L = L ;
+        result.U = U ;
+        result.P = P ;
+        result.Q = Q ;
+        result.R = R ;
+        result.kind = 'sparse LU: L*U = P*(R\A)*Q where R is diagonal' ;
+        result.code = 1 ;
+
+    else
+
+        % try dense Cholesky (LAPACK): L*L' = A
+        if (nnz (A-A') == 0 & all (diag (A) > 0))                           %#ok
+            try
+                tic ;
+                L = chol (A, 'lower') ;
+                t = toc ;
+                result.L = L ;
+                result.kind = 'dense Cholesky: L*L'' = A' ;
+                result.code = 2 ;
+                return
+            catch
+		% matrix is symmetric, but not positive definite
+		% (or we ran out of memory)
+            end
+        end
+
+        % try dense LU (LAPACK): L*U = A(p,:)
+        tic ;
+        [L, U, p] = lu (A, 'vector') ;
+        t = toc ;
+        result.L = L ;
+        result.U = U ;
+        result.p = p ;
+        result.kind = 'dense LU: L*U = A(p,:)' ;
+        result.code = 3 ;
+
+    end
+
+else
+
+    %---------------------------------------------------------------------------
+    % x = linfactor (F,b)
+    %---------------------------------------------------------------------------
+
+    F = arg1 ;
+    b = arg2 ;
+
+    if (F.code == 0)
+
+        % sparse Cholesky: MATLAB could use a sparse linsolve here ...
+        tic ;
+        result = F.PT * (F.LT \ (F.L \ (F.P * b))) ;
+        t = toc ;
+
+    elseif (F.code == 1)
+
+        % sparse LU: MATLAB could use a sparse linsolve here too ...
+        tic ;
+        result = F.Q * (F.U \ (F.L \ (F.P * (F.R \ b)))) ;
+        t = toc ;
+
+    elseif (F.code == 2)
+
+        % dense Cholesky: result = F.L' \ (F.L \ b) ;
+        lower.LT = true ;
+        upper.LT = true ;
+        upper.TRANSA = true ;
+        tic ;
+        result = linsolve (F.L, linsolve (F.L, b, lower), upper) ;
+        t = toc ;
+
+    elseif (F.code == 3)
+
+        % dense LU: result = F.U \ (F.L \ b (F.p,:)) ;
+        lower.LT = true ;
+        upper.UT = true ;
+        tic ;
+        result = linsolve (F.U, linsolve (F.L, b (F.p,:), lower), upper) ;
+        t = toc ;
+    end
+end
diff --git a/LINFACTOR/lintest.m b/MATLAB_Tools/LINFACTOR/lintest.m
similarity index 100%
rename from LINFACTOR/lintest.m
rename to MATLAB_Tools/LINFACTOR/lintest.m
diff --git a/MATLAB_Tools/LINFACTOR/lintests.m b/MATLAB_Tools/LINFACTOR/lintests.m
new file mode 100644
index 0000000..d3d9ffc
--- /dev/null
+++ b/MATLAB_Tools/LINFACTOR/lintests.m
@@ -0,0 +1,69 @@
+function lintests
+%LINTESTS test linfactor with many different kinds of systems.
+% Compares x=A\b, linfactor and (ack!) inv(A)*b.  You should never, ever use
+% inv(A) to solve a linear system.
+%
+% Example
+%   lintests
+%
+% See also lintest, linfactor, mldivide.
+
+% Copyright 2007, Timothy A. Davis
+
+rand ('state', 0) ;
+help linfactor
+
+for n = [100 1000 2000]
+
+    fprintf ('\nn: %d (with all nonzero matrix A)\n', n) ;
+
+    % dense LU
+    A = rand (n) ;
+    b = rand (n,1) ;
+    lintest (A,b) ;
+
+    % sparse LU
+    A = sparse (A) ;
+    lintest (A,b) ;
+
+    % dense Cholesky
+    A = A*A' + 10*eye(n) ;
+    lintest (A,b) ;
+
+    % sparse Cholesky
+    A = sparse (A) ;
+    lintest (A,b) ;
+
+end
+
+for n = [1000 2000]
+
+    % note that UMFPACK is not particularly fast for tridiagonal matrices
+    % (see "doc mldivide", which uses a specialized tridiagonal solver)
+    fprintf ('\nn: %d (sparse tridiagonal matrix)\n', n) ;
+
+    % sparse LU
+    e = rand (n, 1) ;
+    b = rand (n, 1) ;
+    A = spdiags ([e 4*e e], -1:1, n, n) ;
+    lintest (A,b) ;
+
+    % sparse Cholesky
+    e = ones (n, 1) ;
+    A = spdiags ([e 4*e e], -1:1, n, n) ;
+    lintest (A,b) ;
+
+end
+
+% sparse LU again
+fprintf ('\nwest0479:\n') ;
+load west0479 ;
+n = size (west0479, 1) ;
+b = rand (n, 1) ;
+lintest (west0479, b) ;
+
+% completely break inv(A) with a simple 2-by-2 matrix ...
+fprintf ('\nbreak inv(A) with a trivial 2-by-2 matrix:\n') ;
+s = warning ('off', 'MATLAB:singularMatrix') ;
+lintest (rand(2) * realmin/2, ones(2,1)) ;
+warning (s) ;
diff --git a/MATLAB_Tools/MESHND/Contents.m b/MATLAB_Tools/MESHND/Contents.m
new file mode 100644
index 0000000..b2e139d
--- /dev/null
+++ b/MATLAB_Tools/MESHND/Contents.m
@@ -0,0 +1,25 @@
+%MESHND: creation and nested dissection of regular 2D and 3D meshes. 
+%
+%   meshnd         - creation and nested dissection of a regular 2D or 3D mesh.
+%   meshnd_quality - test the ordering quality computed by meshnd.
+%   meshsparse     - convert a 2D or 3D mesh into a sparse matrix matrix.
+%   meshnd_example - example usage of meshnd and meshsparse.
+%
+% The outputs of the meshnd example and meshnd_quality are in meshd.png,
+% meshnd_quality_out.txt, and meshnd_quality.png.
+%
+% Example:
+%   % with no inputs or outputs, meshnd runs a demo:
+%   meshnd	    
+%
+%   % create the sparse matrix for a 7-by-5-by-2 mesh:
+%   A = meshsparse (meshnd (7,5,2)) ;
+%
+%   % create a 7-by-5-by-2 mesh and find the nested dissection ordering:
+%   [G p] = meshnd (7,5,2) ;
+%   A = meshsparse (G) ;
+%   subplot (1,2,1) ; spy (A) ;
+%   subplot (1,2,2) ; spy (A (p,p)) ;
+%
+
+% Copyright 2009, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/MESHND/README.txt b/MATLAB_Tools/MESHND/README.txt
new file mode 100644
index 0000000..a235243
--- /dev/null
+++ b/MATLAB_Tools/MESHND/README.txt
@@ -0,0 +1,25 @@
+%MESHND: creation and nested dissection of regular 2D and 3D meshes. 
+%
+%   meshnd         - creation and nested dissection of a regular 2D or 3D mesh.
+%   meshnd_quality - test the ordering quality computed by meshnd.
+%   meshsparse     - convert a 2D or 3D mesh into a sparse matrix matrix.
+%   meshnd_example - example usage of meshnd and meshsparse.
+%
+% The outputs of the meshnd example and meshnd_quality are in meshd.png,
+% meshnd_quality_out.txt, and meshnd_quality.png.
+%
+% Example:
+%   % with no inputs or outputs, meshnd runs a demo:
+%   meshnd	    
+%
+%   % create the sparse matrix for a 7-by-5-by-2 mesh:
+%   A = meshsparse (meshnd (7,5,2)) ;
+%
+%   % create a 7-by-5-by-2 mesh and find the nested dissection ordering:
+%   [G p] = meshnd (7,5,2) ;
+%   A = meshsparse (G) ;
+%   subplot (1,2,1) ; spy (A) ;
+%   subplot (1,2,2) ; spy (A (p,p)) ;
+%
+
+Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/MESHND/meshnd.m b/MATLAB_Tools/MESHND/meshnd.m
new file mode 100644
index 0000000..cfd4a72
--- /dev/null
+++ b/MATLAB_Tools/MESHND/meshnd.m
@@ -0,0 +1,114 @@
+function [G, p, pinv, Gnew] = meshnd (arg1,n,k)
+%MESHND creation and nested dissection of a regular 2D or 3D mesh.
+% [G p pinv Gnew] = meshnd (m,n) constructs an m-by-n 2D mesh G, and then finds
+% a permuted mesh Gnew where Gnew = pinv(G) and G = p(Gnew).  meshnd(m,n,k)
+% creates an m-by-n-by-k 3D mesh.
+%
+% [G p pinv Gnew] = meshnd (G) does not construct G, but uses the mesh G as
+% given on input instead.
+%
+% Example:
+% [G p pinv Gnew] = meshnd (4,5) ;
+%
+% returns
+%    Gnew =
+%        1     2    17     9    10
+%        7     8    18    15    16
+%        3     5    19    11    13
+%        4     6    20    12    14
+%    G =
+%        1     2     3     4     5
+%        6     7     8     9    10
+%       11    12    13    14    15
+%       16    17    18    19    20
+%
+% With no inputs, a few example meshes are generated and plotted.
+%
+% See also nested, numgrid.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+% get the inputs and create the mesh if not provided on input
+if (nargin == 0)
+
+    % run a simple example
+    meshnd_example ;
+
+elseif (nargin == 1)
+
+    % the mesh is provided on input
+    G = arg1 ;
+    [m n k] = size (G) ;
+
+elseif (nargin == 2)
+
+    % create the m-by-n-by-k mesh in "natural" (row-major) order.  This is how
+    % a typical 2D mesh is ordered.  A column-major order would be better, since
+    % in that case G(:) would equal 1:(m*n) ... but let's stick with tradition.
+    m = arg1 ;
+    k = 1 ;
+    G = reshape (1:(m*n*k), n, m, k)' ;
+
+elseif (nargin == 3)
+
+    % create the m-by-n-by-k mesh in column-major order.  The first m-by-n-by-1
+    % slice is in column-major order, followed by all the other slices 2 to k.
+    m = arg1 ;
+    G = reshape (1:(m*n*k), m, n, k) ;
+
+else
+
+    error ('Usage: [G p pinv Gnew] = meshnd(G), meshnd(m,n) or meshnd(m,n,k)') ;
+
+end
+
+if (nargout > 1)
+    p = nd2 (G)' ;	    % order the mesh
+end
+
+if (nargout > 2)
+    pinv (p) = 1:(m*n*k) ;  % find the inverse permutation
+end
+
+if (nargout > 3)
+    Gnew = pinv (G) ;	    % find the permuted mesh
+end
+
+%-------------------------------------------------------------------------------
+
+function p = nd2 (G)
+%ND2 p = nd2 (G) permutes a 2D or 3D mesh G.
+% Compare with nestdiss which uses p as a scalar offset and returns a modified
+% mesh G that corresponds to Gnew in meshnd.  Here, the scalar offset p in
+% nestdiss is not needed.  Instead, p is a permutation, and the modified mesh
+% Gnew is not returned.
+
+[m n k] = size (G) ;
+
+if (max ([m n k]) <= 2)
+
+    % G is small; do not cut it
+    p = G (:) ;
+
+elseif k >= max (m,n)
+
+    % cut G along the middle slice, cutting k in half
+    s = ceil (k/2) ;
+    middle = G (:,:,s) ;
+    p = [(nd2 (G (:,:,1:s-1))) ; (nd2 (G (:,:,s+1:k))) ; middle(:)] ;
+
+elseif n >= max (m,k)
+
+    % cut G along the middle column, cutting n in half
+    s = ceil (n/2) ;
+    middle = G (:,s,:) ;
+    p = [(nd2 (G (:,1:s-1,:))) ; (nd2 (G (:,s+1:n,:))) ; middle(:)] ;
+
+else   
+
+    % cut G along the middle row, cutting m in half
+    s = ceil (m/2) ;
+    middle = G (s,:,:) ;
+    p = [(nd2 (G (1:s-1,:,:))) ; (nd2 (G (s+1:m,:,:))) ; middle(:)] ;
+
+end
diff --git a/MESHND/meshnd.png b/MATLAB_Tools/MESHND/meshnd.png
similarity index 100%
rename from MESHND/meshnd.png
rename to MATLAB_Tools/MESHND/meshnd.png
diff --git a/MATLAB_Tools/MESHND/meshnd_example.m b/MATLAB_Tools/MESHND/meshnd_example.m
new file mode 100644
index 0000000..6314e4e
--- /dev/null
+++ b/MATLAB_Tools/MESHND/meshnd_example.m
@@ -0,0 +1,106 @@
+function meshnd_example
+%MESHND_EXAMPLE example usage of meshnd and meshsparse.
+%
+% Example:
+%   meshnd_example
+%
+% See also meshnd.
+
+% Copyright 2009, Timothy A. Davis, http://www.suitesparse.com
+
+help meshnd
+
+% 2D mesh, compare with Cleve Moler's demos
+
+m = 7 ;
+n = 7 ;
+
+[G p pinv Gnew] = meshnd (m,n) ;
+fprintf ('Original mesh:\n') ;
+disp (G) ;
+fprintf ('Permuted node numbers using meshnd.m (nested dissection):\n') ;
+disp (Gnew) ;
+
+Moler = nested (n+2) ;
+Moler = Moler (2:n+1,2:n+1) ;
+fprintf ('Cleve Moler''s nested dissection ordering, using nested.m\n') ;
+disp (Moler) ;
+fprintf ('Difference between nested.m and meshnd.m:\n') ;
+disp (Gnew-Moler) ;
+
+% 2D and 3D meshes
+
+stencils = [5 9 7 27] ;
+mm = [7 7 7 7] ;
+nn = [7 7 7 7] ;
+kk = [1 1 7 7] ;
+
+for s = 1:4
+
+    m = mm (s) ;
+    n = nn (s) ;
+    k = kk (s) ;
+    [G p] = meshnd (mm (s), nn (s), kk (s)) ;
+    A = meshsparse (G, stencils (s)) ;
+    C = A (p,p) ;
+    parent = etree (C) ;
+    try
+        L = chol (C, 'lower') ;
+    catch
+        % old version of MATLAB
+        L = chol (C)' ;
+    end
+    subplot (4,5,(s-1)*5 + 1) ;
+    do_spy (A) ;
+    if (k > 1)
+	title (sprintf ('%d-by-%d-by-%d mesh, %d-point stencil', ...
+	    m, n, k, stencils (s))) ;
+    else
+	title (sprintf ('%d-by-%d mesh, %d-point stencil', ...
+	    m, n, stencils (s))) ;
+    end
+    subplot (4,5,(s-1)*5 + 2) ;
+    do_spy (C) ;
+    title ('nested dissection') ;
+    subplot (4,5,(s-1)*5 + 3) ;
+    treeplot (parent) ;
+    title ('etree') ;
+    xlabel ('') ;
+    subplot (4,5,(s-1)*5 + 4) ;
+    do_spy (L) ;
+    title (sprintf ('Cholesky with nd, nnz %d', nnz (L))) ;
+    try
+        % use the built-in AMD
+        p = amd (A) ;
+    catch
+        try
+            % use AMD from SuiteSparse
+            p = amd2 (A) ;
+        catch
+            % use the older built-in SYMAMD
+            p = symamd (A) ;
+        end
+    end
+    try
+        L = chol (A (p,p), 'lower') ;
+    catch
+        % old version of MATLAB
+        L = chol (A (p,p))' ;
+    end
+    subplot (4,5,(s-1)*5 + 5) ;
+    do_spy (L) ;
+    title (sprintf ('Cholesky with amd, nnz %d', nnz (L))) ;
+
+end
+
+%-------------------------------------------------------------------------------
+
+function do_spy (A)
+%DO_SPY use cspy(A) to plot a matrix, or spy(A) if cspy not installed.
+try
+    % This function is in CSparse.  It generates better looking plots than spy.
+    cspy (A) ;
+catch
+    spy (A) ;
+end
+
diff --git a/MATLAB_Tools/MESHND/meshnd_quality.m b/MATLAB_Tools/MESHND/meshnd_quality.m
new file mode 100644
index 0000000..133763b
--- /dev/null
+++ b/MATLAB_Tools/MESHND/meshnd_quality.m
@@ -0,0 +1,158 @@
+function meshnd_quality (do_metis)
+%MESHND_QUALITY test the ordering quality computed by meshnd.
+% The fill-in and flop count for sparse Cholesky factorization using the meshnd
+% nested dissection ordering is computed with AMD.  If SuiteSparse is installed
+% with METIS, and if requested, then the metis nested dissection ordering is
+% also compared.
+%
+% Example:
+%   meshnd_quality          % compare MESHND and AMD
+%   meshnd_quality (1)      % also compare with METIS
+%
+% See also meshnd, meshsparse, nested, amd, metis.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+stencils = [5 9 7 27] ;
+
+if (nargin < 1)
+    do_metis = 0 ;
+end
+if (do_metis)
+    if (exist ('metis') ~= 3)                                               %#ok
+        % METIS not installed
+        do_metis = 0 ;
+    end
+end
+
+clf
+
+for sk = 1:4
+
+    stencil = stencils (sk) ;
+
+    is3D = (stencil == 7 | stencil == 27) ;     %#ok
+    if (is3D)
+	s = 2.^(3:.1:7) ;		% mesh size up to 127-by-127-by-127
+    else
+	s = 2.^(3:.1:10) - 1 ;		% mesh size up to 1023-by-1023
+    end
+    t = length (s) ;
+    lnz = nan * zeros (3,t) ;
+    fl  = nan * zeros (3,t) ;
+
+    try
+
+        for t = 1:length (s)
+
+            n = floor (s (t)) ;
+
+            % create the mesh and the matrix, and get nested dissection ordering
+            if (is3D)
+                fprintf ('3D mesh: %d-by-%d-by-%d, %d-point stencil\n', ...
+                    n, n, n, stencil) ;
+                [G p] = meshnd (n, n, n) ;
+            else
+                fprintf ('2D mesh: %d-by-%d, %d-point stencil\n', n, n,stencil);
+                [G p] = meshnd (n, n) ;
+            end
+            A = meshsparse (G, stencil) ;
+
+            % ND results
+            c = symbfact (A (p,p)) ;
+            lnz (1,t) = sum (c) ;
+            fl  (1,t) = sum (c.^2) ;
+            fprintf ('    MESHND:            nnz(L) %8.3e  flops %8.3e\n', ...
+                lnz (1,t), fl (1,t)) ;
+            clear G
+
+            % AMD results
+            try
+                p = amd (A) ;
+            catch
+                % assume SuiteSparse is installed
+                p = amd2 (A) ;
+            end
+            c = symbfact (A (p,p)) ;
+            lnz (2,t) = sum (c) ;
+            fl  (2,t) = sum (c.^2) ;
+            fprintf ('    AMD:               nnz(L) %8.3e  flops %8.3e\n', ...
+                lnz (2,t), fl (2,t)) ;
+
+            % METIS results (requires SuiteSparse and METIS)
+            if (do_metis)
+                p = metis (A) ;
+                c = symbfact (A (p,p)) ;
+                lnz (3,t) = sum (c) ;
+                fl  (3,t) = sum (c.^2) ;
+                fprintf (...
+                    '    METIS:             nnz(L) %8.3e  flops %8.3e\n', ...
+                    lnz (3,t), fl (3,t)) ;
+            end
+
+            % plot the relative nnz(L) results
+            subplot (2, 4, 2*sk - 1) ;
+            loglog (s (1:t), lnz (2,1:t) ./ lnz (1,1:t), 'b-') ;
+            hold on
+            if (do_metis)
+                loglog (s (1:t), lnz (3,1:t) ./ lnz (1,1:t), 'r-') ;
+            end
+            loglog (s (1:t), ones (1,t), 'k-') ;
+            if (do_metis)
+                ylabel ('nnz(L) for AMD or METIS / nnz(L) for meshnd') ;
+                legend ('AMD', 'METIS') ;
+            else
+                ylabel ('nnz(L) for AMD / nnz(L) for meshnd') ;
+            end
+            xlabel ('mesh size') ;
+            axis ([min(s) max(s) .1 10]) ;
+            set (gca, 'YTick', [.1 .25 .5 .8 1 1.25 2 4 10]) ;
+            if (is3D)
+                set (gca, 'XTick', [1 10 100]) ;
+                title (sprintf ('3D mesh, %d-point stencil', stencil)) ;
+            else
+                set (gca, 'XTick', [1 10 100 1000]) ;
+                title (sprintf ('2D mesh, %d-point stencil', stencil)) ;
+            end
+
+            % plot the relative flop results
+            subplot (2, 4, 2*sk) ;
+            loglog (s (1:t), fl (2,1:t) ./ fl (1,1:t), 'b-') ;
+            hold on
+            if (do_metis)
+                loglog (s (1:t), fl (3,1:t) ./ fl (1,1:t), 'r-') ;
+            end
+            loglog (s (1:t), ones (1,t), 'k-') ;
+            ylabel ('flops for AMD or METIS / flops for meshnd') ;
+            if (do_metis)
+                ylabel ('flops for AMD or METIS / flops for meshnd') ;
+                legend ('AMD', 'METIS') ;
+            else
+                ylabel ('nnz(L) for AMD / nnz(L) for meshnd') ;
+            end
+            xlabel ('mesh size') ;
+            axis ([min(s) max(s) .1 10]) ;
+            set (gca, 'YTick', [.1 .25 .5 .8 1 1.25 2 4 10]) ;
+            if (is3D)
+                set (gca, 'XTick', [1 10 100]) ;
+                title (sprintf ('3D mesh, %d-point stencil', stencil)) ;
+            else
+                set (gca, 'XTick', [1 10 100 1000]) ;
+                title (sprintf ('2D mesh, %d-point stencil', stencil)) ;
+            end
+
+            drawnow
+
+        end
+
+    catch
+        % out-of-memory is OK, other errors are not
+        disp (lasterr) ;
+        if (isempty (strfind (lasterr, 'Out of memory')))
+            error (lasterr) ;                                               %#ok
+        else
+            fprintf ('test terminated early, but otherwise OK\n') ;
+        end
+    end
+
+end
diff --git a/MESHND/meshnd_quality.png b/MATLAB_Tools/MESHND/meshnd_quality.png
similarity index 100%
rename from MESHND/meshnd_quality.png
rename to MATLAB_Tools/MESHND/meshnd_quality.png
diff --git a/MESHND/meshnd_quality_out.txt b/MATLAB_Tools/MESHND/meshnd_quality_out.txt
similarity index 100%
rename from MESHND/meshnd_quality_out.txt
rename to MATLAB_Tools/MESHND/meshnd_quality_out.txt
diff --git a/MATLAB_Tools/MESHND/meshsparse.m b/MATLAB_Tools/MESHND/meshsparse.m
new file mode 100644
index 0000000..88295a6
--- /dev/null
+++ b/MATLAB_Tools/MESHND/meshsparse.m
@@ -0,0 +1,144 @@
+function A = meshsparse (G, stencil)
+%MESHSPARSE convert a 2D or 3D mesh into a sparse matrix matrix.
+%
+% Example:
+% A = meshsparse (G)
+% A = meshsparse (G,5)		    % 2D 5-point stencil (default for 2D case)
+% A = meshsparse (G,9)		    % 2D 9-point stencil
+% A = meshsparse (G,7)		    % 3D 7-point stencil (default for 3D case)
+% A = meshsparse (G,27)		    % 3D 27-point stencil
+% A = meshsparse (G,stencil)	    % user-provided stencil
+%
+% To create a sparse matrix for an m-by-n 2D mesh or m-by-n-by-k 3D mesh, use
+%
+% A = meshsparse (meshnd (m,n)) ;
+% A = meshsparse (meshnd (m,n,k)) ;
+%
+% G is an m-by-n-by-k matrix, with entries numbered 1 to m*n*k (with k=1 for
+% the 2D case).  The entries in G can appear in any order, but no duplicate
+% entries can appear.  That is sort(G(:))' must equal 1:m*n*k. A is returned as
+% a sparse matrix with m*n*k rows and columns whose pattern depends on the
+% stencil.  The number of nonzeros in most rows/columns of A is equal to the
+% number of points in the stencil.  For examples on how to specify your own
+% stencil, see the contents of meshsparse.m.
+%
+% See also meshnd.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 2)
+    [m n k] = size (G) ;
+    if (k == 1)
+	stencil = 5 ;	% 2D default is a 5-point stencil
+    else
+	stencil = 7 ;	% 3D default is a 7-point stencil
+    end
+end
+
+if (numel (stencil) == 1)
+
+    % create the stencil
+
+    if (stencil == 5)
+
+	% 5-point stencil (2D)
+	stencil = [
+	    -1  0   	% north
+	     1  0   	% south
+	     0  1   	% east
+	     0 -1   ] ;	% west
+
+    elseif (stencil == 9)
+
+	% 9-point stencil (2D)
+	stencil = [
+	    -1  0   	% north
+	     1  0   	% south
+	     0  1   	% east
+	     0 -1   	% west
+	    -1 -1   	% north-west
+	    -1  1   	% north-east
+	     1 -1   	% south-west
+	     1  1   ] ;	% south-east
+
+    elseif (stencil == 7)
+
+	% 7-point stencil (3D)
+	stencil = [
+	    -1  0  0	% north
+	     1  0  0	% south
+	     0  1  0	% east
+	     0 -1  0	% west
+	     0  0 -1    % up
+	     0  0  1] ; % down
+
+    elseif (stencil == 27)
+
+	% 27-point stencil (3D)
+	stencil = zeros (26, 3) ;
+	t = 0 ;
+	for i = -1:1
+	    for j = -1:1
+		for k = -1:1
+		    if (~(i == 0 & j == 0 & k == 0))    %#ok
+			t = t + 1 ;
+			stencil (t,:) = [i j k] ;
+		    end
+		end
+	    end
+	end
+    end
+end
+
+stencil = fix (stencil) ;
+[npoints d] = size (stencil) ;
+if (d == 2)
+    % append zeros onto a 2D stencil to make it "3D"
+    stencil = [stencil zeros(npoints,1)] ;
+end
+[npoints d] = size (stencil) ;
+if (d ~= 3)
+    error ('invalid stencil') ;
+end
+
+[m n k] = size (G) ;
+i1 = 1:m ;
+j1 = 1:n ;
+k1 = 1:k ;
+
+Ti = zeros (npoints*m*n*k, 1) ;
+Tj = zeros (npoints*m*n*k, 1) ;
+nz = 0 ;
+
+for point = 1:npoints
+
+    % find the overlapping rows of G
+    idelta = stencil (point,1) ;
+    i2 = i1 + idelta ;
+    ki = find (i2 >= 1 & i2 <= m) ;
+
+    % find the overlapping columns of G
+    jdelta = stencil (point,2) ;
+    j2 = j1 + jdelta ;
+    kj = find (j2 >= 1 & j2 <= n) ;
+
+    % find the overlapping slices of G
+    kdelta = stencil (point,3) ;
+    k2 = k1 + kdelta ;
+    kk = find (k2 >= 1 & k2 <= k) ;
+
+    % find the nodes in G the shifted G that touch
+    g2 = G (i2 (ki), j2 (kj), k2 (kk)) ;    % shifted mesh
+    g1 = G (i1 (ki), j1 (kj), k1 (kk)) ;    % unshifted mesh
+
+    % place the edges in the triplet list
+    e = numel (g1) ;
+    Ti ((nz+1):(nz+e)) = g1 (:) ;
+    Tj ((nz+1):(nz+e)) = g2 (:) ;
+    nz = nz + e ;
+end
+
+% convert the triplets into a sparse matrix
+Ti = Ti (1:nz) ;
+Tj = Tj (1:nz) ;
+A = npoints * speye (m*n*k) - sparse (Ti, Tj, 1, m*n*k, m*n*k) ;
diff --git a/MATLAB_Tools/SFMULT/Contents.m b/MATLAB_Tools/SFMULT/Contents.m
new file mode 100644
index 0000000..82bd93a
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/Contents.m
@@ -0,0 +1,16 @@
+% SSMULT:  sparse matrix multiplication (sparse times sparse)
+%
+% SSMULT computes C=A*B where A and B are sparse.  It is typically faster
+% than C=A*B in MATLAB 7.4 (or earlier), and always uses less memory.
+%
+%   ssmult          - multiplies two sparse matrices.
+%   ssmult_install  - compiles, installs, and tests ssmult.
+%   ssmult_unsorted - multiplies two sparse matrices, returning non-standard result.
+%   ssmultsym       - computes nnz(C), memory, and flops to compute C=A*B; A and B sparse.
+%   sstest          - exhaustive performance test for SSMULT.
+%   sstest2         - exhaustive performance test for SSMULT.  Requires UFget.
+%
+% Example:
+%   C = ssmult(A,B) ;    % computes C = A*B
+%
+% Copyright 2007, Timothy A. Davis, University of Florida
diff --git a/MATLAB_Tools/SFMULT/Makefile b/MATLAB_Tools/SFMULT/Makefile
new file mode 100644
index 0000000..963fd34
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/Makefile
@@ -0,0 +1,55 @@
+all: sfmult.mexglx
+
+diffs: kernel_diffs kernel_usage_diffs structure_diffs
+
+kernel_diffs:
+	- diff sfmult_anxnyt_k.c sfmult_anxtyt_k.c
+	- diff sfmult_atxtyn_k.c sfmult_atxtyt_k.c
+	- diff sfmult_vector_1.c sfmult_vector_k.c
+
+# each of these pairs use the same sfmult_A*_X*_Y*_[234] kernels
+kernel_usage_diffs:
+	- diff sfmult_anxtyn.c sfmult_anxtyt.c
+	- diff sfmult_anxnyn.c sfmult_anxnyt.c
+	- diff sfmult_atxnyn.c sfmult_atxtyn.c
+	- diff sfmult_atxnyt.c sfmult_atxtyt.c
+
+# each of these pairs use the same outer structure but different kernels
+structure_diffs:
+	- diff sfmult_anxnyn.c sfmult_anxtyn.c
+	- diff sfmult_anxnyt.c sfmult_anxtyt.c
+	- diff sfmult_atxnyn.c sfmult_atxnyt.c
+	- diff sfmult_atxtyn.c sfmult_atxtyt.c
+
+OBJ = \
+    sfmult_anxnyn.o \
+    sfmult_anxnyt.o \
+    sfmult_anxnyt_k.o \
+    sfmult_anxtyn.o \
+    sfmult_anxtyt.o \
+    sfmult_anxtyt_k.o \
+    sfmult_atxnyn.o \
+    sfmult_atxnyt.o \
+    sfmult_atxtyn.o \
+    sfmult_atxtyn_k.o \
+    sfmult_atxtyt.o \
+    sfmult_atxtyt_k.o \
+    sfmult.o \
+    sfmult_vector_1.o \
+    sfmult_vector_k.o \
+    sfmult_xA.o \
+    ssmult_transpose.o
+
+$(OBJ): sfmult.h
+
+.c.o:
+	mex -O -c $<
+
+sfmult.mexglx: sfmult_mex.c $(OBJ) sfmult.h
+	mex -O -output sfmult sfmult_mex.c $(OBJ)
+
+clean:
+	rm -f *.o
+
+purge: clean
+	rm sfmult.mexglx
diff --git a/MATLAB_Tools/SFMULT/sfmult.c b/MATLAB_Tools/SFMULT/sfmult.c
new file mode 100644
index 0000000..34f713c
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult.c
@@ -0,0 +1,198 @@
+//==============================================================================
+// y = A*x and variants, A is sparse, x is full
+//==============================================================================
+
+// y = ytrans (yconj (atrans (aconj (A)) * xtrans (xconj (x))))
+//
+//	where xtrans(x) is x or x.' and xconj(x) is x or conj(x) and likewise
+//	for A and y.  To compute y = x*A, simply flip the use of *trans (see
+//	dsmult below).  y = x*A is thus y = (A'*x')'
+
+#include "sfmult.h"
+
+//==============================================================================
+//=== sfmult_invalid ===========================================================
+//==============================================================================
+
+void sfmult_invalid (void)
+{
+    mexErrMsgTxt ("Error using ==> sfmult\n"
+	"Inner matrix dimensions must agree.") ;
+}
+
+
+//==============================================================================
+//=== sfmult_yalloc ============================================================
+//==============================================================================
+
+// allocate Y as m-by-n, but do not initialize it
+
+mxArray *sfmult_yalloc	// return Y
+(
+    Int m,
+    Int n,
+    int Ycomplex	// true if Y is complex
+)
+{
+    // (TO DO): guard against integer overflow
+    mxArray *Y = mxCreateDoubleMatrix (0, 0, Ycomplex ? mxCOMPLEX : mxREAL) ;
+    mxFree (mxGetPr (Y)) ;
+    mxSetPr (Y, mxMalloc (m * n * sizeof (double))) ;
+    if (Ycomplex)
+    {
+	mxFree (mxGetPi (Y)) ;
+	mxSetPi (Y, mxMalloc (m * n * sizeof (double))) ;
+    }
+    mxSetM (Y, m) ;
+    mxSetN (Y, n) ;
+    return (Y) ;
+}
+
+
+//==============================================================================
+//=== sfmult_yzero =============================================================
+//==============================================================================
+
+// set Y to zero
+
+mxArray *sfmult_yzero (mxArray *Y)
+{
+    Int n, i ;
+    double *Yx, *Yz ;
+    n = mxGetNumberOfElements (Y) ;
+    Yx = mxGetPr (Y) ;
+    for (i = 0 ; i < n ; i++)
+    {
+	Yx [i] = 0 ;
+    }
+    if (mxIsComplex (Y))
+    {
+	Yz = mxGetPi (Y) ;
+	for (i = 0 ; i < n ; i++)
+	{
+	    Yz [i] = 0 ;
+	}
+    }
+    return (Y) ;
+}
+
+
+//==============================================================================
+//=== sfmult_walloc ============================================================
+//==============================================================================
+
+// Allocate workspace of size k*m
+
+void sfmult_walloc
+(
+    Int k,
+    Int m,
+    double **Wx,	// real part (first k*m doubles)
+    double **Wz		// imaginary part (next k*m doubles)
+)
+{
+    // (TO DO) Int overflow case
+    Int wsize = k*m + 1 ; 
+    *Wx = mxMalloc (wsize * sizeof (double)) ;   // (TO DO) more if complex
+    *Wz = *Wx + wsize ;
+}
+
+
+//==============================================================================
+//=== sfmult ===================================================================
+//==============================================================================
+
+mxArray *sfmult		// returns y = A*x or variants
+(
+    const mxArray *A,
+    const mxArray *X,
+    int at,		// if true: trans(A)  if false: A
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xt,		// if true: trans(x)  if false: x
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yt,		// if true: trans(y)  if false: y
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    // (TO DO) error if A not sparse, x sparse
+    // (TO DO) error if A not single or double, x not single or double
+
+    if (at)
+    {
+	if (xt)
+	{
+	    if (yt)
+	    {
+		// y = (A'*x')'	    A is m-by-n, x is k-by-m, y is k-by-n
+		return (sfmult_AT_XT_YT (A, X, ac, xc, yc)) ;
+	    }
+	    else
+	    {
+		// y = A'*x'	    A is m-by-n, x is k-by-m, y is n-by-k
+		return (sfmult_AT_XT_YN (A, X, ac, xc, yc)) ;
+	    }
+	}
+	else
+	{
+	    if (yt)
+	    {
+		// y = (A'*x)'	    A is m-by-n, x is m-by-k, y is k-by-n
+		return (sfmult_AT_XN_YT (A, X, ac, xc, yc)) ;
+	    }
+	    else
+	    {
+		// y = A'*x	    A is m-by-n, x is m-by-k, y is n-by-k
+		return (sfmult_AT_XN_YN (A, X, ac, xc, yc)) ;
+	    }
+	}
+    }
+    else
+    {
+	if (xt)
+	{
+	    if (yt)
+	    {
+		// y = (A*x')'	    A is m-by-n, x is k-by-n, y is k-by-m
+		return (sfmult_AN_XT_YT (A, X, ac, xc, yc)) ;
+	    }
+	    else
+	    {
+		// y = A*x'	    A is m-by-n, x is k-by-n, y is m-by-k
+		return (sfmult_AN_XT_YN (A, X, ac, xc, yc)) ;
+	    }
+	}
+	else
+	{
+	    if (yt)
+	    {
+		// y = (A*x)'	    A is m-by-n, x is n-by-k, y is k-by-m
+		return (sfmult_AN_XN_YT (A, X, ac, xc, yc)) ;
+	    }
+	    else
+	    {
+		// y = A*x	    A is m-by-n, x is n-by-k, y is m-by-k
+		return (sfmult_AN_XN_YN (A, X, ac, xc, yc)) ;
+	    }
+	}
+    }
+}
+
+
+//==============================================================================
+//=== fsmult ===================================================================
+//==============================================================================
+
+mxArray *fsmult		// returns y = x*A or variants
+(
+    const mxArray *A,
+    const mxArray *X,
+    int at,		// if true: trans(A)  if false: A
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xt,		// if true: trans(x)  if false: x
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yt,		// if true: trans(y)  if false: y
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    return (sfmult (A, X, !at, ac, !xt, xc, !yt, yc)) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult.h b/MATLAB_Tools/SFMULT/sfmult.h
new file mode 100644
index 0000000..810105d
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult.h
@@ -0,0 +1,551 @@
+// =============================================================================
+// === sfmult.h ================================================================
+// =============================================================================
+
+#ifndef _SFMULT_H
+#define _SFMULT_H
+
+#include "mex.h"
+
+// Like UMFPACK, CHOLMOD, AMD, COLAMD, CSparse, MA57, and all other sane sparse
+// matrix functions used internally in MATLAB, these functions will NOT work
+// with mwIndex.
+
+#define Int mwSignedIndex
+
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+
+// -----------------------------------------------------------------------------
+// primary sparse-times-full and full-times-sparse
+// -----------------------------------------------------------------------------
+
+mxArray *sfmult		// returns y = A*x or variants
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int at,		// if true: trans(A)  if false: A
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xt,		// if true: trans(x)  if false: x
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yt,		// if true: trans(y)  if false: y
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *fsmult		// returns y = x*A or variants
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int at,		// if true: trans(A)  if false: A
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xt,		// if true: trans(x)  if false: x
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yt,		// if true: trans(y)  if false: y
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+) ;
+
+// -----------------------------------------------------------------------------
+// transpose
+// -----------------------------------------------------------------------------
+
+mxArray *ssmult_transpose	// returns C = A' or A.'    (TO DO) rename
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    int conj			// compute A' if true, compute A.' if false
+) ;
+
+// -----------------------------------------------------------------------------
+// 8 primary variants of op(op(A)*op(B)) in sfmult.c
+// -----------------------------------------------------------------------------
+
+mxArray *sfmult_AN_XN_YN    // returns y = A*x
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *sfmult_AN_XN_YT    // returns y = (A*x)'
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *sfmult_AN_XT_YN    // returns y = A*x'
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *sfmult_AN_XT_YT    // returns y = (A*x')'
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *sfmult_AT_XN_YN    // returns y = A'*x
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *sfmult_AT_XN_YT    // returns y = (A'*x)'
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *sfmult_AT_XT_YN    // returns y = A'*x'
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+mxArray *sfmult_AT_XT_YT    // returns y = (A'*x')'
+(
+    // --- inputs, not modified:
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		    // if true: conj(A)   if false: A. ignored if A real
+    int xc,		    // if true: conj(x)   if false: x. ignored if x real
+    int yc		    // if true: conj(y)   if false: y. ignored if y real
+) ;
+
+// -----------------------------------------------------------------------------
+// kernels in sfmult_anxnyt_k.c
+// -----------------------------------------------------------------------------
+
+void sfmult_AN_XN_YT_2	// y = (A*x)'  where x is n-by-2, and y is 2-by-m
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 2-by-m
+    double *Yz,		// 2-by-m if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-2
+    const double *Xz,	// n-by-2 if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+void sfmult_AN_XN_YT_3	// y = (A*x)'	x is n-by-3, and y is 3-by-m (ldy = 4)
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 3-by-m
+    double *Yz,		// 3-by-m if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-3
+    const double *Xz,	// n-by-3 if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+void sfmult_AN_XN_YT_4	// y = (A*x)'	x is n-by-4, and y is 4-by-m
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 4-by-m
+    double *Yz,		// 4-by-m if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-4
+    const double *Xz,	// n-by-4 if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+// -----------------------------------------------------------------------------
+// kernels in sfmult_anxtyt_k.c
+// -----------------------------------------------------------------------------
+
+void sfmult_AN_XT_YT_2	// y = (A*x')'	x is 2-by-n, and y is 2-by-m
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 2-by-m
+    double *Yz,		// 2-by-m if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 2-by-n with leading dimension k
+    const double *Xz,	// 2-by-n with leading dimension k if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// leading dimension of X
+) ;
+
+void sfmult_AN_XT_YT_3	// y = (A*x')'	x is 3-by-n, and y is 3-by-m (ldy = 4)
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 3-by-m
+    double *Yz,		// 3-by-m if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 3-by-n with leading dimension k
+    const double *Xz,	// 3-by-n with leading dimension k if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// leading dimension of X
+) ;
+
+void sfmult_AN_XT_YT_4 // y = (A*x')'	x is 4-by-n, and y is 4-by-m
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 4-by-m
+    double *Yz,		// 4-by-m if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 4-by-n with leading dimension k
+    const double *Xz,	// 4-by-n with leading dimension k if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// leading dimension of X
+) ;
+
+// -----------------------------------------------------------------------------
+// kernels in sfmult_atxtyn_k.c
+// -----------------------------------------------------------------------------
+
+void sfmult_AT_XT_YN_2	// y = A'*x'	x is 2-by-m, and y is n-by-2
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// n-by-2
+    double *Yz,		// n-by-2 if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 2-by-m
+    const double *Xz,	// 2-by-m if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+void sfmult_AT_XT_YN_3	// y = A'*x'	x is 3-by-m, and y is n-by-3 (ldx = 4)
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// n-by-3
+    double *Yz,		// n-by-3 if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 3-by-m
+    const double *Xz,	// 3-by-m if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+void sfmult_AT_XT_YN_4	// y = A'*x'	x is 4-by-m, and y is n-by-4
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// n-by-4
+    double *Yz,		// n-by-4 if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 4-by-m
+    const double *Xz,	// 4-by-m if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+// -----------------------------------------------------------------------------
+// kernels in sfmult_atxtyt_k.c
+// -----------------------------------------------------------------------------
+
+void sfmult_AT_XT_YT_2	// y = (A'*x')'	x is 2-by-m, and y is 2-by-n
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 2-by-n with leading dimension k
+    double *Yz,		// 2-by-n with leading dimension k if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 2-by-m
+    const double *Xz,	// 2-by-m if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// leading dimension of Y
+) ;
+
+void sfmult_AT_XT_YT_3	// y = (A'*x')'	x is 3-by-m, and y is 3-by-n (ldx = 4)
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 3-by-n with leading dimension k
+    double *Yz,		// 3-by-n with leading dimension k if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 3-by-m
+    const double *Xz,	// 3-by-m if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// leading dimension of Y
+) ;
+
+void sfmult_AT_XT_YT_4	// y = (A'*x')'	x is 4-by-m, and y is 4-by-n
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// 4-by-n with leading dimension k
+    double *Yz,		// 4-by-n with leading dimension k if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 4-by-m
+    const double *Xz,	// 4-by-m if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// leading dimension of Y
+) ;
+
+// -----------------------------------------------------------------------------
+// kernel in sfmult_xA
+// -----------------------------------------------------------------------------
+
+void sfmult_xA		// y = (A'*x')' = x*A, x is k-by-m, and y is k-by-n
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// k-by-n
+    double *Yz,		// k-by-n if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// k-by-m
+    const double *Xz,	// k-by-m if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k
+) ;
+
+// -----------------------------------------------------------------------------
+// vector kernels in sfmult_vector_1.c
+// -----------------------------------------------------------------------------
+
+void sfmult_AN_x_1	// y = A*x	x is n-by-1 unit stride, y is m-by-1
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// m-by-1
+    double *Yz,		// m-by-1 if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-1
+    const double *Xz,	// n-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+void sfmult_AT_x_1	// y = A'*x	x is m-by-1, y is n-by-1
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// n-by-1
+    double *Yz,		// n-by-1 if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// m-by-1
+    const double *Xz,	// m-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+) ;
+
+// -----------------------------------------------------------------------------
+// vector kernels in sfmult_vector_k.c
+// -----------------------------------------------------------------------------
+
+void sfmult_AN_xk_1	// y = A*x	x is n-by-1 non-unit stride, y is m-by-1
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// m-by-1
+    double *Yz,		// m-by-1 if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-1
+    const double *Xz,	// n-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// stride of x
+) ;
+
+void sfmult_AT_xk_1	// y = A'*x	x is m-by-1, y is n-by-1 non-unit stride
+(
+    // --- outputs, not initialized on input:
+    double *Yx,		// n-by-1
+    double *Yz,		// n-by-1 if Y is complex
+
+    // --- inputs, not modified:
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// m-by-1
+    const double *Xz,	// m-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A
+    int xc,		// true: use conj(X), otherwise use X
+    int yc		// true: compute conj(Y), otherwise compute Y
+    , Int k		// stride of y
+) ;
+
+// -----------------------------------------------------------------------------
+// utilities
+// -----------------------------------------------------------------------------
+
+mxArray *sfmult_yalloc	    // allocate and return result y
+(
+    // --- inputs, not modified:
+    Int m,
+    Int n,
+    int Ycomplex
+) ;
+
+mxArray *sfmult_yzero	    // set y to zero
+(
+    // --- must exist on input, set to zero on output:
+    mxArray *Y
+) ;
+
+void sfmult_walloc	    // allocate workspace
+(
+    // --- inputs, not modified:
+    Int k,
+    Int m,
+    // --- outputs, not initialized on input:
+    double **Wx,	    // real part (first k*m doubles)
+    double **Wz		    // imaginary part (next k*m doubles)
+) ;
+
+void sfmult_invalid (void) ;
+
+#endif
diff --git a/MATLAB_Tools/SFMULT/sfmult.m b/MATLAB_Tools/SFMULT/sfmult.m
new file mode 100644
index 0000000..2eeba97
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult.m
@@ -0,0 +1,28 @@
+function y = sfmult (A,x, at,ac, xt,xc, yt,yc)
+% y = sfmult (A,x, at,ac, xt,xc, yt,yc) where A is sparse and x is full
+% y = sfmult (x,A, at,ac, xt,xc, yt,yc) where A is sparse and x is full
+%
+% Computes y = A*x, x*A, or other variants.
+%
+% at and ac control how the sparse matrix A is accessed:
+%
+%   y=A*x           at = 0, ac = 0
+%   y=A.'*x         at = 1, ac = 0
+%   y=conj(A)*x     at = 0, ac = 1
+%   y=A'*x          at = 1, ac = 1
+%
+% xt and xc modify x in the same way.
+% yt and yc modify the result y.  Thus, to compute y = (A.' *x)' use:
+%
+%   y = sfmult (A, x, 1,0, 0,0, 1,1) ;
+%
+% To compute y = (x *A.')' do the following:
+%
+%   y = sfmult (x, A, 1,0, 0,0, 1,1) ;
+%
+% The transpose of A is never computed.  Thus function requires workspace of
+% size up to 4*size(A,1) if x is a matrix.  No workspace is required if x is
+% a row or column vector.  At most 2*size(A,1) workspace is required if
+% min(size(x)) is 2.
+
+error ('sfmult mexFunction not found') ;
diff --git a/MATLAB_Tools/SFMULT/sfmult_anxnyn.c b/MATLAB_Tools/SFMULT/sfmult_anxnyn.c
new file mode 100644
index 0000000..a63e67d
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_anxnyn.c
@@ -0,0 +1,169 @@
+//==============================================================================
+//=== sfmult_AN_XN_YN ==========================================================
+//==============================================================================
+
+// y = A*x	    A is m-by-n, x is n-by-k, y is m-by-k
+
+// compare with sfmult_AN_XN_YT for kernel usage
+// compare with sfmult_AN_XT_YN for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AN_XN_YN	// y = A*x
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetN (X) ;
+    if (n != mxGetM (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (m, k, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A*X
+	sfmult_AN_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc ((k == 2) ? 2 : 4, m, &Wx, &Wz) ;
+
+    //--------------------------------------------------------------------------
+    // Y = A*X, in blocks of up to 4 columns of X, using sfmult_anxnyt
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// Y (:,1) = A * X(:,1)
+	sfmult_AN_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	Yx += m ;
+	Yz += m ;
+	Xx += n ;
+	Xz += n ;
+    }
+    else if (k1 == 2)
+    {
+	// W = (A * X(:,1:2))'
+	sfmult_AN_XN_YT_2 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	// Y (:,1:2) = W'
+
+#if 0
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [2*i  ] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [2*i+1] ; Yx += m ; Yz += m ;
+#else
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [i  ] = Wx [2*i  ] ;
+	    Yx [i+m] = Wx [2*i+1] ;
+	}
+	Yx += 2*m ;
+	Yz += 2*m ;
+#endif
+
+	Xx += 2*n ;
+	Xz += 2*n ;
+    }
+    else if (k1 == 3)
+    {
+	// W = (A * X(:,1:3))'
+	sfmult_AN_XN_YT_3 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	// Y (:,1:3) = W'
+
+#if 0
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i  ] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+1] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+2] ; Yx += m ; Yz += m ;
+#else
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [i    ] = Wx [4*i  ] ;
+	    Yx [i+  m] = Wx [4*i+1] ;
+	    Yx [i+2*m] = Wx [4*i+2] ;
+	}
+	Yx += 3*m ;
+	Yz += 3*m ;
+#endif
+
+	Xx += 3*n ;
+	Xz += 3*n ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = (A * X(:,1:4))'
+	sfmult_AN_XN_YT_4 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	// Y (:,k1+(1:4),:) = W'
+
+#if 0
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i  ] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+1] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+2] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+3] ; Yx += m ; Yz += m ;
+
+#else
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [i    ] = Wx [4*i  ] ;
+	    Yx [i+  m] = Wx [4*i+1] ;
+	    Yx [i+2*m] = Wx [4*i+2] ;
+	    Yx [i+3*m] = Wx [4*i+3] ;
+	}
+	Yx += 4*m ;
+	Yz += 4*m ;
+#endif
+
+	Xx += 4*n ;
+	Xz += 4*n ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_anxnyt.c b/MATLAB_Tools/SFMULT/sfmult_anxnyt.c
new file mode 100644
index 0000000..f3b357f
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_anxnyt.c
@@ -0,0 +1,161 @@
+//==============================================================================
+//=== sfmult_AN_XN_YT ==========================================================
+//==============================================================================
+
+// y = (A*x)'	    A is m-by-n, x is n-by-k, y is k-by-m
+
+// compare with sfmult_AN_XN_YN for kernel usage
+// compare with sfmult_AN_XT_YT for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AN_XN_YT    // y = (A*x)'
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetN (X) ;
+    if (n != mxGetM (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (k, m, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A*X
+	sfmult_AN_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+    if (k == 2)
+    {
+	// Y = (A * X)'
+	sfmult_AN_XN_YT_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+    if (k == 4)
+    {
+	// Y = (A * X)'
+	sfmult_AN_XN_YT_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc (4, m, &Wx, &Wz) ;
+
+    //--------------------------------------------------------------------------
+    // Y = (A*X)', in blocks of up to 4 columns of X, using sfmult_anxnyt
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// W = A * X(:,1)
+	sfmult_AN_x_1 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	// Y (1,:) = W
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i] = Wx [i] ;
+	}
+	Yx += 1 ;
+	Yz += 1 ;
+	Xx += n ;
+	Xz += n ;
+    }
+    else if (k1 == 2)
+    {
+	// W = (A * X(:,1:2))'
+	sfmult_AN_XN_YT_2 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	// Y (1:2,:) = W
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i  ] = Wx [2*i  ] ;
+	    Yx [k*i+1] = Wx [2*i+1] ;
+	}
+	Yx += 2 ;
+	Yz += 2 ;
+	Xx += 2*n ;
+	Xz += 2*n ;
+    }
+    else if (k1 == 3)
+    {
+	// W = (A * X(:,1:3))'
+	sfmult_AN_XN_YT_3 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	// Y (1:3,:) = W
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i  ] = Wx [4*i  ] ;
+	    Yx [k*i+1] = Wx [4*i+1] ;
+	    Yx [k*i+2] = Wx [4*i+2] ;
+	}
+	Yx += 3 ;
+	Yz += 3 ;
+	Xx += 3*n ;
+	Xz += 3*n ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = (A*X(:,1:4))'
+	sfmult_AN_XN_YT_4 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	// Y (k1+(1:4),:) = W
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i  ] = Wx [4*i  ] ;
+	    Yx [k*i+1] = Wx [4*i+1] ;
+	    Yx [k*i+2] = Wx [4*i+2] ;
+	    Yx [k*i+3] = Wx [4*i+3] ;
+	}
+	Yx += 4 ;
+	Yz += 4 ;
+	Xx += 4*n ;
+	Xz += 4*n ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_anxnyt_k.c b/MATLAB_Tools/SFMULT/sfmult_anxnyt_k.c
new file mode 100644
index 0000000..15a9385
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_anxnyt_k.c
@@ -0,0 +1,206 @@
+//==============================================================================
+//=== sfmult_anxnyt_k ==========================================================
+//==============================================================================
+
+// y = (A*x)'	    where x has 2, 3, or 4 columns
+
+// compare with sfmult_anxtyt_k
+
+// sfmult_AN_XN_YT_2	y = (A*x)'  where x is n-by-2, and y is 2-by-m
+// sfmult_AN_XN_YT_3	y = (A*x)'  where x is n-by-3, and y is 3-by-m (ldy = 4)
+// sfmult_AN_XN_YT_4	y = (A*x)'  where x is n-by-4, and y is 4-by-m
+
+#include "sfmult.h"
+
+void sfmult_AN_XN_YT_2	// y = (A*x)'	x is n-by-2, and y is 2-by-m
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 2-by-m
+    double *Yz,		// 2-by-m if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-2
+    const double *Xz,	// n-by-2 if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double x [2], a [2] ;
+    Int p, pend, j, i0, i1 ;
+
+    for (i0 = 0 ; i0 < m ; i0++)
+    {
+	Yx [2*i0  ] = 0 ;
+	Yx [2*i0+1] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x [0] = Xx [j  ] ;
+	x [1] = Xx [j+n] ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    Yx [2*i0  ] += a [0] * x [0] ;
+	    Yx [2*i0+1] += a [0] * x [1] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    Yx [2*i0  ] += a [0] * x [0] ;
+	    Yx [2*i0+1] += a [0] * x [1] ;
+	    Yx [2*i1  ] += a [1] * x [0] ;
+	    Yx [2*i1+1] += a [1] * x [1] ;
+	}
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AN_XN_YT_3 ========================================================
+//==============================================================================
+
+void sfmult_AN_XN_YT_3	// y = (A*x)'	x is n-by-3, and y is 3-by-m (ldy = 4)
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 3-by-m
+    double *Yz,		// 3-by-m if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-3
+    const double *Xz,	// n-by-3 if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double x [4], a [2] ;
+    Int p, pend, j, i0, i1 ;
+
+    for (i0 = 0 ; i0 < m ; i0++)
+    {
+	Yx [4*i0  ] = 0 ;
+	Yx [4*i0+1] = 0 ;
+	Yx [4*i0+2] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x [0] = Xx [j    ] ;
+	x [1] = Xx [j+  n] ;
+	x [2] = Xx [j+2*n] ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    Yx [4*i1  ] += a [1] * x [0] ;
+	    Yx [4*i1+1] += a [1] * x [1] ;
+	    Yx [4*i1+2] += a [1] * x [2] ;
+	}
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AN_XN_YT_4 ========================================================
+//==============================================================================
+
+void sfmult_AN_XN_YT_4	// y = (A*x)'	x is n-by-4, and y is 4-by-m
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 4-by-m
+    double *Yz,		// 4-by-m if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-4
+    const double *Xz,	// n-by-4 if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double x [4], a [2] ;
+    Int p, pend, j, i0, i1 ;
+
+    for (i0 = 0 ; i0 < m ; i0++)
+    {
+	Yx [4*i0  ] = 0 ;
+	Yx [4*i0+1] = 0 ;
+	Yx [4*i0+2] = 0 ;
+	Yx [4*i0+3] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x [0] = Xx [j    ] ;
+	x [1] = Xx [j+  n] ;
+	x [2] = Xx [j+2*n] ;
+	x [3] = Xx [j+3*n] ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    Yx [4*i0+3] += a [0] * x [3] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    Yx [4*i0+3] += a [0] * x [3] ;
+	    Yx [4*i1  ] += a [1] * x [0] ;
+	    Yx [4*i1+1] += a [1] * x [1] ;
+	    Yx [4*i1+2] += a [1] * x [2] ;
+	    Yx [4*i1+3] += a [1] * x [3] ;
+	}
+    }
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_anxtyn.c b/MATLAB_Tools/SFMULT/sfmult_anxtyn.c
new file mode 100644
index 0000000..2e3b481
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_anxtyn.c
@@ -0,0 +1,168 @@
+//==============================================================================
+//=== sfmult_AN_XT_YN ==========================================================
+//==============================================================================
+
+// y = A*x'	    A is m-by-n, x is k-by-n, y is m-by-k
+
+// compare with sfmult_AN_XT_YT for kernel usage
+// compare with sfmult_AN_XN_YN for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AN_XT_YN    // y = A*x'
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetM (X) ;
+    if (n != mxGetN (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (m, k, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A*X
+	sfmult_AN_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc ((k == 2) ? 2 : 4, m, &Wx, &Wz) ;
+
+    //--------------------------------------------------------------------------
+    // Y = A*X', in blocks of up to 4 columns of X, using sfmult_anxtyt
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// Y (:,1) = A * X(1,:)'
+	sfmult_AN_xk_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k) ;
+	Yx += m ;
+	Yz += m ;
+	Xx += 1 ;
+	Xz += 1 ;
+    }
+    else if (k1 == 2)
+    {
+	// W = (A * X(1:2,:)')'
+	sfmult_AN_XT_YT_2 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	// Y (:,1:2) = W'
+
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [2*i  ] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [2*i+1] ; Yx += m ; Yz += m ;
+
+	#if 0
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [i  ] = Wx [2*i  ] ;
+	    Yx [i+m] = Wx [2*i+1] ;
+	}
+	Yx += 2*m ;
+	Yz += 2*m ;
+	#endif
+
+	Xx += 2 ;
+	Xz += 2 ;
+    }
+    else if (k1 == 3)
+    {
+	// W = (A * X(1:3,:)')'
+	sfmult_AN_XT_YT_3 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	// Y (:,1:3) = W'
+
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i  ] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+1] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+2] ; Yx += m ; Yz += m ;
+
+	#if 0
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [i    ] = Wx [4*i  ] ;
+	    Yx [i+  m] = Wx [4*i+1] ;
+	    Yx [i+2*m] = Wx [4*i+2] ;
+	}
+	Yx += 3*m ;
+	Yz += 3*m ;
+	#endif
+
+	Xx += 3 ;
+	Xz += 3 ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = (A * X(1:4,:)')'
+	sfmult_AN_XT_YT_4 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	// Y (:,k1+(1:4)) = W'
+
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i  ] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+1] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+2] ; Yx += m ; Yz += m ;
+	for (i = 0 ; i < m ; i++) Yx [i] = Wx [4*i+3] ; Yx += m ; Yz += m ;
+
+#if 0
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [i    ] = Wx [4*i  ] ;
+	    Yx [i+  m] = Wx [4*i+1] ;
+	    Yx [i+2*m] = Wx [4*i+2] ;
+	    Yx [i+3*m] = Wx [4*i+3] ;
+	}
+	Yx += 4*m ;
+	Yz += 4*m ;
+#endif
+
+	Xx += 4 ;
+	Xz += 4 ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_anxtyt.c b/MATLAB_Tools/SFMULT/sfmult_anxtyt.c
new file mode 100644
index 0000000..4ed109f
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_anxtyt.c
@@ -0,0 +1,183 @@
+//==============================================================================
+//=== sfmult_AN_XT_YT ==========================================================
+//==============================================================================
+
+// y = (A*x')'	    A is m-by-n, x is k-by-n, y is k-by-m
+
+// compare with sfmult_AN_XT_YN for kernel usage
+// compare with sfmult_AN_XN_YT for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AN_XT_YT    // y = (A*x')'
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetM (X) ;
+    if (n != mxGetN (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (k, m, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A*X
+	sfmult_AN_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+    if (k == 2)
+    {
+	// Y = (A * X')'
+	sfmult_AN_XT_YT_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	return (Y) ;
+    }
+    if (k == 4)
+    {
+	// Y = (A * X')'
+	sfmult_AN_XT_YT_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	return (Y) ;
+    }
+
+    if (k > 12 && Ap [n] < 8 * MAX (m,n))	// (TO DO) check overflow
+    {
+	// Y = (A * X')' when A is moderately sparse and X is large
+	mxArray *C ;
+	double *Cx, *Cz ;
+	Int *Cp, *Ci ;
+	// C = A' ;
+	C = ssmult_transpose (A, 0) ;
+	// (TO DO) if C is NULL, skip this and try using (A*X')' below
+	// Y = (C' * X')' when A is moderately sparse and X is large
+	Cp = mxGetJc (C) ;
+	Ci = mxGetIr (C) ;
+	Cx = mxGetPr (C) ;
+	Cz = mxGetPi (C) ;
+	sfmult_xA (Yx, Yz, Cp, Ci, Cx, Cz, n, m, Xx, Xz, ac, xc, yc, k) ;
+	mxDestroyArray (C) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc (4, m, &Wx, &Wz) ;
+    // (TO DO) if walloc fails, use a workspace-free technique.
+    // This may require new sparse-times-vector kernels (both x and y with
+    // non-unit strides)
+
+    //--------------------------------------------------------------------------
+    // Y = (A*X')', in blocks of up to 4 columns of X, using sfmult_anxtyt
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// W = A * X(1,:)'
+	sfmult_AN_xk_1 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k) ;
+	// Y (1,:) = W'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i] = Wx [i] ;
+	}
+	Yx += 1 ;
+	Yz += 1 ;
+	Xx += 1 ;
+	Xz += 1 ;
+    }
+    else if (k1 == 2)
+    {
+	// W = (A * X(1:2,:)')'
+	sfmult_AN_XT_YT_2 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	// Y (1:2,:) = W
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i  ] = Wx [2*i  ] ;
+	    Yx [k*i+1] = Wx [2*i+1] ;
+	}
+	Yx += 2 ;
+	Yz += 2 ;
+	Xx += 2 ;
+	Xz += 2 ;
+    }
+    else if (k1 == 3)
+    {
+	// W = (A * X(1:3,:)')'
+	sfmult_AN_XT_YT_3 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	// Y (1:3,:) = W
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i  ] = Wx [4*i  ] ;
+	    Yx [k*i+1] = Wx [4*i+1] ;
+	    Yx [k*i+2] = Wx [4*i+2] ;
+	}
+	Yx += 3 ;
+	Yz += 3 ;
+	Xx += 3 ;
+	Xz += 3 ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = (A * X(1:4,:)')'
+	sfmult_AN_XT_YT_4 (Wx, Wz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	// Y (k1+(1:4),:) = W
+	for (i = 0 ; i < m ; i++)
+	{
+	    Yx [k*i  ] = Wx [4*i  ] ;
+	    Yx [k*i+1] = Wx [4*i+1] ;
+	    Yx [k*i+2] = Wx [4*i+2] ;
+	    Yx [k*i+3] = Wx [4*i+3] ;
+	}
+	Yx += 4 ;
+	Yz += 4 ;
+	Xx += 4 ;
+	Xz += 4 ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_anxtyt_k.c b/MATLAB_Tools/SFMULT/sfmult_anxtyt_k.c
new file mode 100644
index 0000000..19716fd
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_anxtyt_k.c
@@ -0,0 +1,213 @@
+//==============================================================================
+//=== sfmult_anxtyt_k ==========================================================
+//==============================================================================
+
+// y = (A*x')'	    where x has 2, 3, or 4 rows
+
+// compare with sfmult_anxnyt_k
+
+// sfmult_AN_XT_YT_2  y = (A*x')'  where x is 2-by-n, and y is 2-by-m
+// sfmult_AN_XT_YT_3  y = (A*x')'  where x is 3-by-n, and y is 3-by-m (ldy = 4)
+// sfmult_AN_XT_YT_4  y = (A*x')'  where x is 4-by-n, and y is 4-by-m
+
+#include "sfmult.h"
+
+//==============================================================================
+//=== sfmult_AN_XT_YT_2 ========================================================
+//==============================================================================
+
+void sfmult_AN_XT_YT_2	// y = (A*x')'	x is 2-by-n, and y is 2-by-m
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 2-by-m
+    double *Yz,		// 2-by-m if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 2-by-n with leading dimension k
+    const double *Xz,	// 2-by-n with leading dimension k if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// leading dimension of X
+)
+{
+    double x [2], a [2] ;
+    Int p, pend, j, i0, i1 ;
+
+    for (i0 = 0 ; i0 < m ; i0++)
+    {
+	Yx [2*i0  ] = 0 ;
+	Yx [2*i0+1] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x [0] = Xx [k*j  ] ;
+	x [1] = Xx [k*j+1] ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    Yx [2*i0  ] += a [0] * x [0] ;
+	    Yx [2*i0+1] += a [0] * x [1] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    Yx [2*i0  ] += a [0] * x [0] ;
+	    Yx [2*i0+1] += a [0] * x [1] ;
+	    Yx [2*i1  ] += a [1] * x [0] ;
+	    Yx [2*i1+1] += a [1] * x [1] ;
+	}
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AN_XT_YT_3 ========================================================
+//==============================================================================
+
+void sfmult_AN_XT_YT_3	// y = (A*x')'	x is 3-by-n, and y is 3-by-m (ldy = 4)
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 3-by-m
+    double *Yz,		// 3-by-m if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 3-by-n with leading dimension k
+    const double *Xz,	// 3-by-n with leading dimension k if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// leading dimension of X
+)
+{
+    double x [4], a [2] ;
+    Int p, pend, j, i0, i1 ;
+
+    for (i0 = 0 ; i0 < m ; i0++)
+    {
+	Yx [4*i0  ] = 0 ;
+	Yx [4*i0+1] = 0 ;
+	Yx [4*i0+2] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x [0] = Xx [k*j  ] ;
+	x [1] = Xx [k*j+1] ;
+	x [2] = Xx [k*j+2] ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    Yx [4*i1  ] += a [1] * x [0] ;
+	    Yx [4*i1+1] += a [1] * x [1] ;
+	    Yx [4*i1+2] += a [1] * x [2] ;
+	}
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AN_XT_YT_4 ========================================================
+//==============================================================================
+
+void sfmult_AN_XT_YT_4 // y = (A*x')'	x is 4-by-n, and y is 4-by-m
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 4-by-m
+    double *Yz,		// 4-by-m if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 4-by-n with leading dimension k
+    const double *Xz,	// 4-by-n with leading dimension k if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// leading dimension of X
+)
+{
+    double x [4], a [2] ;
+    Int p, pend, j, i0, i1 ;
+
+    for (i0 = 0 ; i0 < m ; i0++)
+    {
+	Yx [4*i0  ] = 0 ;
+	Yx [4*i0+1] = 0 ;
+	Yx [4*i0+2] = 0 ;
+	Yx [4*i0+3] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x [0] = Xx [k*j  ] ;
+	x [1] = Xx [k*j+1] ;
+	x [2] = Xx [k*j+2] ;
+	x [3] = Xx [k*j+3] ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    Yx [4*i0+3] += a [0] * x [3] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    Yx [4*i0  ] += a [0] * x [0] ;
+	    Yx [4*i0+1] += a [0] * x [1] ;
+	    Yx [4*i0+2] += a [0] * x [2] ;
+	    Yx [4*i0+3] += a [0] * x [3] ;
+	    Yx [4*i1  ] += a [1] * x [0] ;
+	    Yx [4*i1+1] += a [1] * x [1] ;
+	    Yx [4*i1+2] += a [1] * x [2] ;
+	    Yx [4*i1+3] += a [1] * x [3] ;
+	}
+    }
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_atxnyn.c b/MATLAB_Tools/SFMULT/sfmult_atxnyn.c
new file mode 100644
index 0000000..b8afde9
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_atxnyn.c
@@ -0,0 +1,144 @@
+//==============================================================================
+//=== sfmult_AT_XN_YN ==========================================================
+//==============================================================================
+
+// y = A'*x	    A is m-by-n, x is m-by-k, y is n-by-k
+
+// compare with sfmult_AT_XT_YN for kernel usage
+// compare with sfmult_AT_XN_YT for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AT_XN_YN    // y = A'*x
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetN (X) ;
+    if (m != mxGetM (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (n, k, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A' * X
+	sfmult_AT_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc ((k == 2) ? 2 : 4, m, &Wx, &Wz) ;
+
+    //--------------------------------------------------------------------------
+    // Y = A'*X, in blocks of up to 4 columns of X using sfmult_atxtyn
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// Y (:,1) = A' * X(:,1)
+	sfmult_AT_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	Yx += n ;
+	Yz += n ;
+	Xx += m ;
+	Xz += m ;
+    }
+    else if (k1 == 2)
+    {
+	// W = X (:,1:2)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [2*i  ] = Xx [i  ] ;
+	    Wx [2*i+1] = Xx [i+m] ;
+	}
+	// Y = A' * W'
+	sfmult_AT_XT_YN_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc) ;
+	Yx += 2*n ;
+	Yz += 2*n ;
+	Xx += 2*m ;
+	Xz += 2*m ;
+    }
+    else if (k1 == 3)
+    {
+	// W = X (:,1:3)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [i    ] ;
+	    Wx [4*i+1] = Xx [i+m  ] ;
+	    Wx [4*i+2] = Xx [i+2*m] ;
+	}
+	// Y = A' * W'
+	sfmult_AT_XT_YN_3 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc) ;
+	Yx += 3*n ;
+	Yz += 3*n ;
+	Xx += 3*m ;
+	Xz += 3*m ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = X (:,1:4)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [i    ] ;
+	    Wx [4*i+1] = Xx [i+m  ] ;
+	    Wx [4*i+2] = Xx [i+2*m] ;
+	    Wx [4*i+3] = Xx [i+3*m] ;
+	}
+	// Y (:,k1+(1:4)) = A' * W'
+	sfmult_AT_XT_YN_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc) ;
+	Yx += 4*n ;
+	Yz += 4*n ;
+	Xx += 4*m ;
+	Xz += 4*m ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_atxnyt.c b/MATLAB_Tools/SFMULT/sfmult_atxnyt.c
new file mode 100644
index 0000000..1432638
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_atxnyt.c
@@ -0,0 +1,144 @@
+//==============================================================================
+//=== sfmult_AT_XN_YT ==========================================================
+//==============================================================================
+
+// y = (A'*x)'	    A is m-by-n, x is m-by-k, y is k-by-n
+
+// compare with sfmult_AT_XT_YT for kernel usage
+// compare with sfmult_AT_XN_YN for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AT_XN_YT    // y = (A'*x)'
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetN (X) ;
+    if (m != mxGetM (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (k, n, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A' * x
+	sfmult_AT_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc ((k == 2) ? 2 : 4, m, &Wx, &Wz) ;
+
+    //--------------------------------------------------------------------------
+    // Y = (A'*X)', in blocks of up to 4 columns of X, using sfmult_atxtyt
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// Y (1,:) = (A' * X(:,1))'
+	sfmult_AT_xk_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k) ;
+	Yx += 1 ;
+	Yz += 1 ;
+	Xx += m ;
+	Xz += m ;
+    }
+    else if (k1 == 2)
+    {
+	// W = X (:,1:2)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [2*i  ] = Xx [i  ] ;
+	    Wx [2*i+1] = Xx [i+m] ;
+	}
+	// Y (1:2,:) = (A' * W')'
+	sfmult_AT_XT_YT_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc, k);
+	Yx += 2 ;
+	Yz += 2 ;
+	Xx += 2*m ;
+	Xz += 2*m ;
+    }
+    else if (k1 == 3)
+    {
+	// W = X (:,1:3)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [i    ] ;
+	    Wx [4*i+1] = Xx [i+m  ] ;
+	    Wx [4*i+2] = Xx [i+2*m] ;
+	}
+	// Y (1:3,:) = (A' * W')'
+	sfmult_AT_XT_YT_3 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc, k);
+	Yx += 3 ;
+	Yz += 3 ;
+	Xx += 3*m ;
+	Xz += 3*m ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = X (:,1:4)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [i    ] ;
+	    Wx [4*i+1] = Xx [i+m  ] ;
+	    Wx [4*i+2] = Xx [i+2*m] ;
+	    Wx [4*i+3] = Xx [i+3*m] ;
+	}
+	// Y (k1+(1:4),:) = (A' * W')'
+	sfmult_AT_XT_YT_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc, k);
+	Yx += 4 ;
+	Yz += 4 ;
+	Xx += 4*m ;
+	Xz += 4*m ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_atxtyn.c b/MATLAB_Tools/SFMULT/sfmult_atxtyn.c
new file mode 100644
index 0000000..4c797a6
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_atxtyn.c
@@ -0,0 +1,161 @@
+//==============================================================================
+//=== sfmult_AT_XT_YN ==========================================================
+//==============================================================================
+
+// y = A'*x'	    A is m-by-n, x is k-by-m, y is n-by-k
+
+// compare with sfmult_AT_XN_YN for kernel usage
+// compare with sfmult_AT_XT_YT for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AT_XT_YN    // y = A'*x'
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetM (X) ;
+    if (m != mxGetN (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (n, k, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A' * X
+	sfmult_AT_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+    if (k == 2)
+    {
+	// Y = A' * X'
+	sfmult_AT_XT_YN_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+    if (k == 4)
+    {
+	// Y = A' * X'
+	sfmult_AT_XT_YN_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc (4, m, &Wx, &Wz) ;
+
+    //--------------------------------------------------------------------------
+    // Y = A'*X', in blocks of up to 4 columns of X using sfmult_atxtyn
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// W = X (1,:)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [i] = Xx [k*i] ;
+	}
+	// Y (:,1) = A' * W
+	sfmult_AT_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc) ;
+	Yx += n ;
+	Yz += n ;
+	Xx += 1 ;
+	Xz += 1 ;
+    }
+    else if (k1 == 2)
+    {
+	// W = X (1:2,:)
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [2*i  ] = Xx [k*i  ] ;
+	    Wx [2*i+1] = Xx [k*i+1] ;
+	}
+	// Y = A' * W'
+	sfmult_AT_XT_YN_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc) ;
+	Yx += 2*n ;
+	Yz += 2*n ;
+	Xx += 2 ;
+	Xz += 2 ;
+    }
+    else if (k1 == 3)
+    {
+	// W = X (1:3,:)
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [k*i  ] ;
+	    Wx [4*i+1] = Xx [k*i+1] ;
+	    Wx [4*i+2] = Xx [k*i+2] ;
+	}
+	// Y = A' * W'
+	sfmult_AT_XT_YN_3 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc) ;
+	Yx += 3*n ;
+	Yz += 3*n ;
+	Xx += 3 ;
+	Xz += 3 ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = X (1:4,:)
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [k*i  ] ;
+	    Wx [4*i+1] = Xx [k*i+1] ;
+	    Wx [4*i+2] = Xx [k*i+2] ;
+	    Wx [4*i+3] = Xx [k*i+3] ;
+	}
+	// Y (:,k1+(1:4)) = A' * W'
+	sfmult_AT_XT_YN_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc) ;
+	Yx += 4*n ;
+	Yz += 4*n ;
+	Xx += 4 ;
+	Xz += 4 ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_atxtyn_k.c b/MATLAB_Tools/SFMULT/sfmult_atxtyn_k.c
new file mode 100644
index 0000000..b4ee75e
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_atxtyn_k.c
@@ -0,0 +1,197 @@
+//==============================================================================
+//=== sfmult_atxtyn_k ==========================================================
+//==============================================================================
+
+// y = A'*x'	    where x has 2, 3, or 4 rows
+
+// compare with sfmult_atxtyt
+
+// sfmult_AT_XT_YN_2  y = A'*x'  where x is 2-by-m, and y is n-by-2
+// sfmult_AT_XT_YN_3  y = A'*x'  where x is 3-by-m, and y is n-by-3 (ldx = 4)
+// sfmult_AT_XT_YN_4  y = A'*x'  where x is 4-by-m, and y is n-by-4
+
+#include "sfmult.h"
+
+//==============================================================================
+//=== sfmult_AT_XT_YN_2 ========================================================
+//==============================================================================
+
+void sfmult_AT_XT_YN_2	// y = A'*x'	x is 2-by-m, and y is n-by-2
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// n-by-2
+    double *Yz,		// n-by-2 if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// 2-by-m
+    const double *Xz,	// 2-by-m if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double y [2], a [4] ;
+    Int p, pend, j, i0, i1, i2 ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y [0] = 0 ;
+	y [1] = 0 ;
+	switch ((pend - p) % 3)
+	{
+	    case 2:
+		i0 = Ai [p] ;
+		a [0] = Ax [p] ;
+		y [0] += a [0] * Xx [2*i0  ] ;
+		y [1] += a [0] * Xx [2*i0+1] ;
+		p++ ;
+	    case 1:
+		i0 = Ai [p] ;
+		a [0] = Ax [p] ;
+		y [0] += a [0] * Xx [2*i0  ] ;
+		y [1] += a [0] * Xx [2*i0+1] ;
+		p++ ;
+	    case 0: ;
+	}
+	for ( ; p < pend ; p += 3)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    i2 = Ai [p+2] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    a [2] = Ax [p+2] ;
+	    y [0] += a [0] * Xx [2*i0  ] ;
+	    y [1] += a [0] * Xx [2*i0+1] ;
+	    y [0] += a [1] * Xx [2*i1  ] ;
+	    y [1] += a [1] * Xx [2*i1+1] ;
+	    y [0] += a [2] * Xx [2*i2  ] ;
+	    y [1] += a [2] * Xx [2*i2+1] ;
+	}
+	Yx [j  ] = y [0] ;
+	Yx [j+n] = y [1] ;
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AT_XT_YN_3 ========================================================
+//==============================================================================
+
+void sfmult_AT_XT_YN_3	// y = A'*x'	x is 3-by-m, and y is n-by-3 (ldx = 4)
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// n-by-3
+    double *Yz,		// n-by-3 if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const int *Ap,	// size n+1 column pointers
+    const int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    int m,		// A is m-by-n
+    int n,
+    const double *Xx,	// 3-by-m
+    const double *Xz,	// 3-by-m if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double y [4], a [2] ;
+    int p, pend, j, i0, i1 ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y [0] = 0 ;
+	y [1] = 0 ;
+	y [2] = 0 ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    y [0] += a [0] * Xx [4*i0  ] ;
+	    y [1] += a [0] * Xx [4*i0+1] ;
+	    y [2] += a [0] * Xx [4*i0+2] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    y [0] += a [0] * Xx [4*i0  ] ;
+	    y [1] += a [0] * Xx [4*i0+1] ;
+	    y [2] += a [0] * Xx [4*i0+2] ;
+	    y [0] += a [1] * Xx [4*i1  ] ;
+	    y [1] += a [1] * Xx [4*i1+1] ;
+	    y [2] += a [1] * Xx [4*i1+2] ;
+	}
+	Yx [j    ] = y [0] ;
+	Yx [j+  n] = y [1] ;
+	Yx [j+2*n] = y [2] ;
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AT_XT_YN_4 ========================================================
+//==============================================================================
+
+void sfmult_AT_XT_YN_4	// y = A'*x'	x is 4-by-m, and y is n-by-4
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// n-by-4
+    double *Yz,		// n-by-4 if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const int *Ap,	// size n+1 column pointers
+    const int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    int m,		// A is m-by-n
+    int n,
+    const double *Xx,	// 4-by-m
+    const double *Xz,	// 4-by-m if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double y [4], a ;
+    int p, pend, j, i ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y [0] = 0 ;
+	y [1] = 0 ;
+	y [2] = 0 ;
+	y [3] = 0 ;
+	for ( ; p < pend ; p++)
+	{
+	    i = Ai [p] ;
+	    a = Ax [p] ;
+	    y [0] += a * Xx [4*i  ] ;
+	    y [1] += a * Xx [4*i+1] ;
+	    y [2] += a * Xx [4*i+2] ;
+	    y [3] += a * Xx [4*i+3] ;
+	}
+	Yx [j    ] = y [0] ;
+	Yx [j+  n] = y [1] ;
+	Yx [j+2*n] = y [2] ;
+	Yx [j+3*n] = y [3] ;
+    }
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_atxtyt.c b/MATLAB_Tools/SFMULT/sfmult_atxtyt.c
new file mode 100644
index 0000000..8faae33
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_atxtyt.c
@@ -0,0 +1,168 @@
+//==============================================================================
+//=== sfmult_AT_XT_YT ==========================================================
+//==============================================================================
+
+// y = (A'*x')'	    A is m-by-n, x is k-by-m, y is k-by-n
+
+// compare with sfmult_AT_XN_YT for kernel usage
+// compare with sfmult_AT_XT_YN for outer loop structure but different kernels
+
+#include "sfmult.h"
+
+mxArray *sfmult_AT_XT_YT    // y = (A'*x')'
+(
+    const mxArray *A,
+    const mxArray *X,
+    int ac,		// if true: conj(A)   if false: A. ignored if A real
+    int xc,		// if true: conj(x)   if false: x. ignored if x real
+    int yc		// if true: conj(y)   if false: y. ignored if y real
+)
+{
+    mxArray *Y ;
+    double *Ax, *Az, *Xx, *Xz, *Yx, *Yz, *Wx, *Wz ;
+    Int *Ap, *Ai ;
+    Int m, n, k, k1, i ;
+    int Acomplex, Xcomplex, Ycomplex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetM (X) ;
+    if (m != mxGetN (X)) sfmult_invalid ( ) ;
+    Acomplex = mxIsComplex (A) ;
+    Xcomplex = mxIsComplex (X) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Xx = mxGetPr (X) ;
+    Xz = mxGetPi (X) ;
+
+    //--------------------------------------------------------------------------
+    // allocate result
+    //--------------------------------------------------------------------------
+
+    Ycomplex = Acomplex || Xcomplex ;
+    Y = sfmult_yalloc (k, n, Ycomplex) ;
+    Yx = mxGetPr (Y) ;
+    Yz = mxGetPi (Y) ;
+
+    //--------------------------------------------------------------------------
+    // special cases
+    //--------------------------------------------------------------------------
+
+    if (k == 0 || m == 0 || n == 0 || Ap [n] == 0)
+    {
+	// Y = 0
+	return (sfmult_yzero (Y)) ;
+    }
+    if (k == 1)
+    {
+	// Y = A' * X
+	sfmult_AT_x_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc) ;
+	return (Y) ;
+    }
+    if (k == 2)
+    {
+	// Y = (A' * X')'
+	sfmult_AT_XT_YT_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	return (Y) ;
+    }
+    if (k == 4)
+    {
+	// Y = (A' * X')'
+	sfmult_AT_XT_YT_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k);
+	return (Y) ;
+    }
+
+    if (k > 8 && Ap [n] < 8 * MAX (m,n))
+    {
+	// Y = (A' * X')' when A is moderately sparse and X is large
+	sfmult_xA (Yx, Yz, Ap, Ai, Ax, Az, m, n, Xx, Xz, ac, xc, yc, k) ;
+	return (Y) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    sfmult_walloc (4, m, &Wx, &Wz) ;
+
+    //--------------------------------------------------------------------------
+    // Y = (A'*X')', in blocks of up to 4 columns of X, using sfmult_atxtyt
+    //--------------------------------------------------------------------------
+
+    k1 = k % 4 ;
+    if (k1 == 1)
+    {
+	// W = X (1,:)'
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [i] = Xx [k*i] ;
+	}
+	// Y (1,:) = (A' * W)'
+	sfmult_AT_xk_1 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc, k) ;
+	Yx += 1 ;
+	Yz += 1 ;
+	Xx += 1 ;
+	Xz += 1 ;
+    }
+    else if (k1 == 2)
+    {
+	// W = X (1:2,:)
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [2*i  ] = Xx [k*i  ] ;
+	    Wx [2*i+1] = Xx [k*i+1] ;
+	}
+	// Y (1:2,:) = (A' * W')'
+	sfmult_AT_XT_YT_2 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc, k);
+	Yx += 2 ;
+	Yz += 2 ;
+	Xx += 2 ;
+	Xz += 2 ;
+    }
+    else if (k1 == 3)
+    {
+	// W = X (1:3,:)
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [k*i  ] ;
+	    Wx [4*i+1] = Xx [k*i+1] ;
+	    Wx [4*i+2] = Xx [k*i+2] ;
+	}
+	// Y (1:3,:) = (A' * W')'
+	sfmult_AT_XT_YT_3 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc, k);
+	Yx += 3 ;
+	Yz += 3 ;
+	Xx += 3 ;
+	Xz += 3 ;
+    }
+    for ( ; k1 < k ; k1 += 4)
+    {
+	// W = X (1:4,:)
+	for (i = 0 ; i < m ; i++)
+	{
+	    Wx [4*i  ] = Xx [k*i  ] ;
+	    Wx [4*i+1] = Xx [k*i+1] ;
+	    Wx [4*i+2] = Xx [k*i+2] ;
+	    Wx [4*i+3] = Xx [k*i+3] ;
+	}
+	// Y (k1+(1:4),:) = (A' * W')'
+	sfmult_AT_XT_YT_4 (Yx, Yz, Ap, Ai, Ax, Az, m, n, Wx, Wz, ac, xc, yc, k);
+	Yx += 4 ;
+	Yz += 4 ;
+	Xx += 4 ;
+	Xz += 4 ;
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (Wx) ;
+    return (Y) ;
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_atxtyt_k.c b/MATLAB_Tools/SFMULT/sfmult_atxtyt_k.c
new file mode 100644
index 0000000..3d01e4e
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_atxtyt_k.c
@@ -0,0 +1,200 @@
+//==============================================================================
+//=== sfmult_atxtyt_k ==========================================================
+//==============================================================================
+
+// y = (A'*x')'	    where x has 2, 3, or 4 rows
+
+// compare with sfmult_atxtyn_k
+
+// sfmult_AT_XT_YT_2  y = (A'*x')'  where x is 2-by-m, and y is 2-by-n
+// sfmult_AT_XT_YT_3  y = (A'*x')'  where x is 3-by-m, and y is 3-by-n (ldx = 4)
+// sfmult_AT_XT_YT_4  y = (A'*x')'  where x is 4-by-m, and y is 4-by-n
+
+#include "sfmult.h"
+
+//==============================================================================
+//=== sfmult_AT_XT_YT_2 ========================================================
+//==============================================================================
+
+void sfmult_AT_XT_YT_2	// y = (A'*x')'	x is 2-by-m, and y is 2-by-n
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 2-by-n with leading dimension k
+    double *Yz,		// 2-by-n with leading dimension k if Y complex (TO DO)
+
+    // --- inputs, not modified
+    const int *Ap,	// size n+1 column pointers
+    const int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    int m,		// A is m-by-n
+    int n,
+    const double *Xx,	// 2-by-m
+    const double *Xz,	// 2-by-m if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// leading dimension of Y
+)
+{
+    double y [2], a [4] ;
+    int p, pend, j, i0, i1, i2 ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y [0] = 0 ;
+	y [1] = 0 ;
+	switch ((pend - p) % 3)
+	{
+	    case 2:
+		i0 = Ai [p] ;
+		a [0] = Ax [p] ;
+		y [0] += a [0] * Xx [2*i0  ] ;
+		y [1] += a [0] * Xx [2*i0+1] ;
+		p++ ;
+	    case 1:
+		i0 = Ai [p] ;
+		a [0] = Ax [p] ;
+		y [0] += a [0] * Xx [2*i0  ] ;
+		y [1] += a [0] * Xx [2*i0+1] ;
+		p++ ;
+	    case 0: ;
+	}
+	for ( ; p < pend ; p += 3)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    i2 = Ai [p+2] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    a [2] = Ax [p+2] ;
+	    y [0] += a [0] * Xx [2*i0  ] ;
+	    y [1] += a [0] * Xx [2*i0+1] ;
+	    y [0] += a [1] * Xx [2*i1  ] ;
+	    y [1] += a [1] * Xx [2*i1+1] ;
+	    y [0] += a [2] * Xx [2*i2  ] ;
+	    y [1] += a [2] * Xx [2*i2+1] ;
+	}
+	Yx [k*j  ] = y [0] ;
+	Yx [k*j+1] = y [1] ;
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AT_XT_YT_3 ========================================================
+//==============================================================================
+
+void sfmult_AT_XT_YT_3	// y = (A'*x')'	x is 3-by-m, and y is 3-by-n (ldx = 4)
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 3-by-n with leading dimension k
+    double *Yz,		// 3-by-n with leading dimension k if Y complex (TO DO)
+
+    // --- inputs, not modified
+    const int *Ap,	// size n+1 column pointers
+    const int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    int m,		// A is m-by-n
+    int n,
+    const double *Xx,	// 3-by-m
+    const double *Xz,	// 3-by-m if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// leading dimension of Y
+)
+{
+    double y [4], a [2] ;
+    int p, pend, j, i0, i1 ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y [0] = 0 ;
+	y [1] = 0 ;
+	y [2] = 0 ;
+	if ((pend - p) % 2)
+	{
+	    i0 = Ai [p] ;
+	    a [0] = Ax [p] ;
+	    y [0] += a [0] * Xx [4*i0  ] ;
+	    y [1] += a [0] * Xx [4*i0+1] ;
+	    y [2] += a [0] * Xx [4*i0+2] ;
+	    p++ ;
+	}
+	for ( ; p < pend ; p += 2)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    a [0] = Ax [p  ] ;
+	    a [1] = Ax [p+1] ;
+	    y [0] += a [0] * Xx [4*i0  ] ;
+	    y [1] += a [0] * Xx [4*i0+1] ;
+	    y [2] += a [0] * Xx [4*i0+2] ;
+	    y [0] += a [1] * Xx [4*i1  ] ;
+	    y [1] += a [1] * Xx [4*i1+1] ;
+	    y [2] += a [1] * Xx [4*i1+2] ;
+	}
+	Yx [k*j  ] = y [0] ;
+	Yx [k*j+1] = y [1] ;
+	Yx [k*j+2] = y [2] ;
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AT_XT_YT_4 ========================================================
+//==============================================================================
+
+void sfmult_AT_XT_YT_4	// y = (A'*x')'	x is 4-by-m, and y is 4-by-n
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// 4-by-n with leading dimension k
+    double *Yz,		// 4-by-n with leading dimension k if Y complex (TO DO)
+
+    // --- inputs, not modified
+    const int *Ap,	// size n+1 column pointers
+    const int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    int m,		// A is m-by-n
+    int n,
+    const double *Xx,	// 4-by-m
+    const double *Xz,	// 4-by-m if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// leading dimension of Y
+)
+{
+    double y [4], a ;
+    int p, pend, j, i ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y [0] = 0 ;
+	y [1] = 0 ;
+	y [2] = 0 ;
+	y [3] = 0 ;
+	for ( ; p < pend ; p++)
+	{
+	    i = Ai [p] ;
+	    a = Ax [p] ;
+	    y [0] += a * Xx [4*i  ] ;
+	    y [1] += a * Xx [4*i+1] ;
+	    y [2] += a * Xx [4*i+2] ;
+	    y [3] += a * Xx [4*i+3] ;
+	}
+	Yx [k*j  ] = y [0] ;
+	Yx [k*j+1] = y [1] ;
+	Yx [k*j+2] = y [2] ;
+	Yx [k*j+3] = y [3] ;
+    }
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_atxtyt_k.s b/MATLAB_Tools/SFMULT/sfmult_atxtyt_k.s
new file mode 100644
index 0000000..e9d9811
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_atxtyt_k.s
@@ -0,0 +1,512 @@
+	.file	"sfmult_atxtyt_k.c"
+	.text
+.globl sfmult_AT_XT_YT_2
+	.type	sfmult_AT_XT_YT_2, @function
+sfmult_AT_XT_YT_2:
+.LFB29:
+	pushl	%ebp
+.LCFI0:
+	movl	%esp, %ebp
+.LCFI1:
+	pushl	%edi
+.LCFI2:
+	pushl	%esi
+.LCFI3:
+	pushl	%ebx
+.LCFI4:
+	subl	$20, %esp
+.LCFI5:
+	movl	40(%ebp), %esi
+	movl	36(%ebp), %eax
+	testl	%eax, %eax
+	jle	.L13
+	movl	60(%ebp), %eax
+	sall	$3, %eax
+	movl	%eax, -16(%ebp)
+	movl	8(%ebp), %eax
+	movl	%eax, -20(%ebp)
+	xorl	%edi, %edi
+	movl	$0, -24(%ebp)
+	pxor	%xmm6, %xmm6
+	movl	-24(%ebp), %edx
+.L4:
+	movl	16(%ebp), %eax
+	movl	4(%eax,%edx,4), %edx
+	movl	%edx, -28(%ebp)
+	subl	%edi, %edx
+	movl	%edx, -32(%ebp)
+	movl	$1431655766, %edx
+	movl	-32(%ebp), %eax
+	imull	%edx
+	movl	-32(%ebp), %ecx
+	sarl	$31, %ecx
+	subl	%ecx, %edx
+	leal	(%edx,%edx,2), %edx
+	movl	-32(%ebp), %eax
+	subl	%edx, %eax
+	cmpl	$1, %eax
+	je	.L6
+	cmpl	$2, %eax
+	je	.L7
+	movapd	%xmm6, %xmm4
+	movapd	%xmm6, %xmm5
+.L8:
+	cmpl	%edi, -28(%ebp)
+	jle	.L10
+	movl	20(%ebp), %eax
+	leal	(%eax,%edi,4), %ecx
+	movl	24(%ebp), %eax
+	leal	(%eax,%edi,8), %edx
+.L12:
+	movsd	(%edx), %xmm1
+	movsd	8(%edx), %xmm2
+	movsd	16(%edx), %xmm3
+	movl	(%ecx), %eax
+	sall	$4, %eax
+	movapd	%xmm1, %xmm0
+	mulsd	(%eax,%esi), %xmm0
+	addsd	%xmm0, %xmm5
+	mulsd	8(%esi,%eax), %xmm1
+	addsd	%xmm1, %xmm4
+	movl	4(%ecx), %eax
+	sall	$4, %eax
+	movapd	%xmm2, %xmm0
+	mulsd	(%esi,%eax), %xmm0
+	addsd	%xmm0, %xmm5
+	mulsd	8(%esi,%eax), %xmm2
+	addsd	%xmm2, %xmm4
+	movl	8(%ecx), %eax
+	sall	$4, %eax
+	movapd	%xmm3, %xmm0
+	mulsd	(%esi,%eax), %xmm0
+	addsd	%xmm0, %xmm5
+	mulsd	8(%esi,%eax), %xmm3
+	addsd	%xmm3, %xmm4
+	addl	$3, %edi
+	addl	$12, %ecx
+	addl	$24, %edx
+	cmpl	%edi, -28(%ebp)
+	jg	.L12
+.L10:
+	movl	-20(%ebp), %edx
+	movsd	%xmm5, (%edx)
+	movsd	%xmm4, 8(%edx)
+	addl	$1, -24(%ebp)
+	movl	-16(%ebp), %eax
+	addl	%eax, %edx
+	movl	%edx, -20(%ebp)
+	movl	-24(%ebp), %edx
+	cmpl	%edx, 36(%ebp)
+	jne	.L4
+.L13:
+	addl	$20, %esp
+	popl	%ebx
+	popl	%esi
+	popl	%edi
+	popl	%ebp
+	ret
+.L6:
+	movapd	%xmm6, %xmm1
+	movapd	%xmm6, %xmm2
+	movl	20(%ebp), %edx
+.L9:
+	movl	24(%ebp), %eax
+	movsd	(%eax,%edi,8), %xmm0
+	movl	(%edx,%edi,4), %eax
+	sall	$4, %eax
+	movapd	%xmm0, %xmm5
+	mulsd	(%esi,%eax), %xmm5
+	addsd	%xmm2, %xmm5
+	movapd	%xmm0, %xmm4
+	mulsd	8(%esi,%eax), %xmm4
+	addsd	%xmm1, %xmm4
+	addl	$1, %edi
+	jmp	.L8
+.L7:
+	movl	24(%ebp), %edx
+	movsd	(%edx,%edi,8), %xmm0
+	movl	20(%ebp), %edx
+	movl	(%edx,%edi,4), %eax
+	sall	$4, %eax
+	movapd	%xmm0, %xmm2
+	mulsd	(%esi,%eax), %xmm2
+	addsd	%xmm6, %xmm2
+	movapd	%xmm0, %xmm1
+	mulsd	8(%esi,%eax), %xmm1
+	addsd	%xmm6, %xmm1
+	addl	$1, %edi
+	jmp	.L9
+.LFE29:
+	.size	sfmult_AT_XT_YT_2, .-sfmult_AT_XT_YT_2
+.globl sfmult_AT_XT_YT_3
+	.type	sfmult_AT_XT_YT_3, @function
+sfmult_AT_XT_YT_3:
+.LFB30:
+	pushl	%ebp
+.LCFI6:
+	movl	%esp, %ebp
+.LCFI7:
+	pushl	%edi
+.LCFI8:
+	pushl	%esi
+.LCFI9:
+	pushl	%ebx
+.LCFI10:
+	subl	$16, %esp
+.LCFI11:
+	movl	40(%ebp), %edi
+	movl	36(%ebp), %edx
+	testl	%edx, %edx
+	jle	.L27
+	movl	60(%ebp), %eax
+	sall	$3, %eax
+	movl	%eax, -16(%ebp)
+	movl	8(%ebp), %eax
+	movl	%eax, -20(%ebp)
+	xorl	%esi, %esi
+	movl	$0, -24(%ebp)
+	pxor	%xmm6, %xmm6
+	movl	-24(%ebp), %edx
+.L20:
+	movl	16(%ebp), %eax
+	movl	4(%eax,%edx,4), %edx
+	movl	%edx, -28(%ebp)
+	movl	%edx, %eax
+	subl	%esi, %eax
+	testb	$1, %al
+	jne	.L21
+	movapd	%xmm6, %xmm3
+	movapd	%xmm6, %xmm4
+	movapd	%xmm6, %xmm5
+.L23:
+	cmpl	%esi, -28(%ebp)
+	jle	.L24
+	movl	20(%ebp), %eax
+	leal	(%eax,%esi,4), %ecx
+	movl	24(%ebp), %eax
+	leal	(%eax,%esi,8), %edx
+.L26:
+	movsd	(%edx), %xmm1
+	movsd	8(%edx), %xmm2
+	movl	(%ecx), %eax
+	sall	$5, %eax
+	movapd	%xmm1, %xmm0
+	mulsd	(%eax,%edi), %xmm0
+	addsd	%xmm0, %xmm5
+	leal	(%edi,%eax), %eax
+	movapd	%xmm1, %xmm0
+	mulsd	8(%eax), %xmm0
+	addsd	%xmm0, %xmm4
+	mulsd	16(%eax), %xmm1
+	addsd	%xmm1, %xmm3
+	movl	4(%ecx), %eax
+	sall	$5, %eax
+	movapd	%xmm2, %xmm0
+	mulsd	(%edi,%eax), %xmm0
+	addsd	%xmm0, %xmm5
+	leal	(%edi,%eax), %eax
+	movapd	%xmm2, %xmm0
+	mulsd	8(%eax), %xmm0
+	addsd	%xmm0, %xmm4
+	mulsd	16(%eax), %xmm2
+	addsd	%xmm2, %xmm3
+	addl	$2, %esi
+	addl	$8, %ecx
+	addl	$16, %edx
+	cmpl	%esi, -28(%ebp)
+	jg	.L26
+.L24:
+	movl	-20(%ebp), %edx
+	movsd	%xmm5, (%edx)
+	movsd	%xmm4, 8(%edx)
+	movsd	%xmm3, 16(%edx)
+	addl	$1, -24(%ebp)
+	movl	-16(%ebp), %eax
+	addl	%eax, %edx
+	movl	%edx, -20(%ebp)
+	movl	-24(%ebp), %edx
+	cmpl	%edx, 36(%ebp)
+	jne	.L20
+.L27:
+	addl	$16, %esp
+	popl	%ebx
+	popl	%esi
+	popl	%edi
+	popl	%ebp
+	ret
+.L21:
+	movl	24(%ebp), %eax
+	movsd	(%eax,%esi,8), %xmm0
+	movl	20(%ebp), %edx
+	movl	(%edx,%esi,4), %eax
+	sall	$5, %eax
+	movapd	%xmm0, %xmm5
+	mulsd	(%edi,%eax), %xmm5
+	addsd	%xmm6, %xmm5
+	leal	(%edi,%eax), %eax
+	movapd	%xmm0, %xmm4
+	mulsd	8(%eax), %xmm4
+	addsd	%xmm6, %xmm4
+	movapd	%xmm0, %xmm3
+	mulsd	16(%eax), %xmm3
+	addsd	%xmm6, %xmm3
+	addl	$1, %esi
+	jmp	.L23
+.LFE30:
+	.size	sfmult_AT_XT_YT_3, .-sfmult_AT_XT_YT_3
+.globl sfmult_AT_XT_YT_4
+	.type	sfmult_AT_XT_YT_4, @function
+sfmult_AT_XT_YT_4:
+.LFB31:
+	pushl	%ebp
+.LCFI12:
+	movl	%esp, %ebp
+.LCFI13:
+	pushl	%edi
+.LCFI14:
+	pushl	%esi
+.LCFI15:
+	pushl	%ebx
+.LCFI16:
+	subl	$20, %esp
+.LCFI17:
+	movl	36(%ebp), %ecx
+	testl	%ecx, %ecx
+	jle	.L39
+	movl	60(%ebp), %eax
+	sall	$3, %eax
+	movl	%eax, -16(%ebp)
+	movl	8(%ebp), %eax
+	movl	%eax, -20(%ebp)
+	movl	$0, -28(%ebp)
+	movl	$0, -24(%ebp)
+	pxor	%xmm6, %xmm6
+.L33:
+	movl	-24(%ebp), %edx
+	movl	16(%ebp), %ecx
+	movl	4(%ecx,%edx,4), %eax
+	cmpl	-28(%ebp), %eax
+	jle	.L43
+	movl	-28(%ebp), %esi
+	movl	20(%ebp), %edi
+	leal	(%edi,%esi,4), %ecx
+	movl	24(%ebp), %edi
+	leal	(%edi,%esi,8), %edx
+	movapd	%xmm6, %xmm2
+	movapd	%xmm6, %xmm5
+	movapd	%xmm6, %xmm4
+	movapd	%xmm6, %xmm3
+	xorl	%esi, %esi
+	subl	-28(%ebp), %eax
+	movl	%eax, -32(%ebp)
+	movl	40(%ebp), %edi
+.L37:
+	movsd	(%edx), %xmm1
+	movl	(%ecx), %eax
+	sall	$5, %eax
+	movapd	%xmm1, %xmm0
+	mulsd	(%eax,%edi), %xmm0
+	addsd	%xmm0, %xmm3
+	addl	%edi, %eax
+	movapd	%xmm1, %xmm0
+	mulsd	8(%eax), %xmm0
+	addsd	%xmm0, %xmm4
+	movapd	%xmm1, %xmm0
+	mulsd	16(%eax), %xmm0
+	addsd	%xmm0, %xmm5
+	mulsd	24(%eax), %xmm1
+	addsd	%xmm1, %xmm2
+	addl	$1, %esi
+	addl	$4, %ecx
+	addl	$8, %edx
+	cmpl	-32(%ebp), %esi
+	jne	.L37
+	addl	%esi, -28(%ebp)
+.L36:
+	movl	-20(%ebp), %eax
+	movsd	%xmm3, (%eax)
+	movsd	%xmm4, 8(%eax)
+	movsd	%xmm5, 16(%eax)
+	movsd	%xmm2, 24(%eax)
+	addl	$1, -24(%ebp)
+	movl	-16(%ebp), %edx
+	addl	%edx, %eax
+	movl	%eax, -20(%ebp)
+	movl	-24(%ebp), %ecx
+	cmpl	%ecx, 36(%ebp)
+	jne	.L33
+.L39:
+	addl	$20, %esp
+	popl	%ebx
+	popl	%esi
+	popl	%edi
+	popl	%ebp
+	ret
+.L43:
+	movapd	%xmm6, %xmm2
+	movapd	%xmm6, %xmm5
+	movapd	%xmm6, %xmm4
+	movapd	%xmm6, %xmm3
+	jmp	.L36
+.LFE31:
+	.size	sfmult_AT_XT_YT_4, .-sfmult_AT_XT_YT_4
+.globl sfmult_AT_XT_YT_k
+	.type	sfmult_AT_XT_YT_k, @function
+sfmult_AT_XT_YT_k:
+.LFB32:
+	pushl	%ebp
+.LCFI18:
+	movl	%esp, %ebp
+.LCFI19:
+	pushl	%edi
+.LCFI20:
+	pushl	%esi
+.LCFI21:
+	pushl	%ebx
+.LCFI22:
+	subl	$36, %esp
+.LCFI23:
+	movl	60(%ebp), %esi
+	movl	36(%ebp), %edi
+	testl	%edi, %edi
+	jle	.L64
+	movl	%esi, %edi
+	andl	$-2147483645, %edi
+	js	.L69
+.L47:
+	leal	0(,%esi,8), %eax
+	movl	%eax, -44(%ebp)
+	leal	0(,%edi,8), %edx
+	movl	%edx, -16(%ebp)
+	movl	8(%ebp), %ecx
+	addl	%edx, %ecx
+	movl	%ecx, -20(%ebp)
+	movl	$0, -40(%ebp)
+	movl	$0, -36(%ebp)
+.L48:
+	movl	-36(%ebp), %eax
+	movl	16(%ebp), %ecx
+	movl	4(%ecx,%eax,4), %edx
+	testl	%esi, %esi
+	jle	.L49
+	xorl	%eax, %eax
+	movl	8(%ebp), %ecx
+.L51:
+	movl	$0, (%ecx,%eax,8)
+	movl	$0, 4(%ecx,%eax,8)
+	addl	$1, %eax
+	cmpl	%eax, %esi
+	jne	.L51
+.L49:
+	cmpl	-40(%ebp), %edx
+	jle	.L52
+	movl	-40(%ebp), %eax
+	movl	20(%ebp), %ecx
+	leal	(%ecx,%eax,4), %eax
+	movl	%eax, -28(%ebp)
+	movl	-40(%ebp), %ecx
+	movl	24(%ebp), %eax
+	leal	(%eax,%ecx,8), %ecx
+	movl	%ecx, -24(%ebp)
+	movl	$0, -32(%ebp)
+	subl	-40(%ebp), %edx
+	movl	%edx, -48(%ebp)
+.L54:
+	movl	-24(%ebp), %eax
+	movsd	(%eax), %xmm1
+	movl	%esi, %eax
+	movl	-28(%ebp), %edx
+	imull	(%edx), %eax
+	movl	40(%ebp), %ecx
+	leal	(%ecx,%eax,8), %edx
+	cmpl	$2, %edi
+	je	.L57
+	cmpl	$3, %edi
+	je	.L58
+	cmpl	$1, %edi
+	je	.L70
+.L55:
+	cmpl	%edi, %esi
+	.p2align 4,,5
+	jle	.L59
+	movl	-20(%ebp), %eax
+	addl	-16(%ebp), %edx
+	movl	%edi, %ecx
+.L61:
+	movapd	%xmm1, %xmm0
+	mulsd	(%edx), %xmm0
+	addsd	(%eax), %xmm0
+	movsd	%xmm0, (%eax)
+	movapd	%xmm1, %xmm0
+	mulsd	8(%edx), %xmm0
+	addsd	8(%eax), %xmm0
+	movsd	%xmm0, 8(%eax)
+	movapd	%xmm1, %xmm0
+	mulsd	16(%edx), %xmm0
+	addsd	16(%eax), %xmm0
+	movsd	%xmm0, 16(%eax)
+	movapd	%xmm1, %xmm0
+	mulsd	24(%edx), %xmm0
+	addsd	24(%eax), %xmm0
+	movsd	%xmm0, 24(%eax)
+	addl	$4, %ecx
+	addl	$32, %eax
+	addl	$32, %edx
+	cmpl	%ecx, %esi
+	jg	.L61
+.L59:
+	addl	$1, -32(%ebp)
+	addl	$4, -28(%ebp)
+	addl	$8, -24(%ebp)
+	movl	-48(%ebp), %edx
+	cmpl	%edx, -32(%ebp)
+	jne	.L54
+	movl	-32(%ebp), %ecx
+	addl	%ecx, -40(%ebp)
+.L52:
+	addl	$1, -36(%ebp)
+	movl	-44(%ebp), %eax
+	addl	%eax, -20(%ebp)
+	movl	-36(%ebp), %edx
+	cmpl	%edx, 36(%ebp)
+	je	.L64
+	addl	%eax, 8(%ebp)
+	jmp	.L48
+.L58:
+	movapd	%xmm1, %xmm0
+	mulsd	16(%edx), %xmm0
+	movl	8(%ebp), %eax
+	addsd	16(%eax), %xmm0
+	movsd	%xmm0, 16(%eax)
+.L57:
+	movapd	%xmm1, %xmm0
+	mulsd	8(%edx), %xmm0
+	movl	8(%ebp), %ecx
+	addsd	8(%ecx), %xmm0
+	movsd	%xmm0, 8(%ecx)
+	movl	%ecx, %eax
+.L56:
+	movapd	%xmm1, %xmm0
+	mulsd	(%edx), %xmm0
+	addsd	(%eax), %xmm0
+	movsd	%xmm0, (%eax)
+	jmp	.L55
+.L70:
+	movl	8(%ebp), %eax
+	jmp	.L56
+.L64:
+	addl	$36, %esp
+	popl	%ebx
+	popl	%esi
+	popl	%edi
+	popl	%ebp
+	ret
+.L69:
+	subl	$1, %edi
+	orl	$-4, %edi
+	addl	$1, %edi
+	jmp	.L47
+.LFE32:
+	.size	sfmult_AT_XT_YT_k, .-sfmult_AT_XT_YT_k
+	.ident	"GCC: (GNU) 4.1.0 (SUSE Linux)"
+	.section	.note.GNU-stack,"", at progbits
diff --git a/MATLAB_Tools/SFMULT/sfmult_mex.c b/MATLAB_Tools/SFMULT/sfmult_mex.c
new file mode 100644
index 0000000..0d09d5d
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_mex.c
@@ -0,0 +1,65 @@
+// -----------------------------------------------------------------------------
+// sfmult mexFunction
+// -----------------------------------------------------------------------------
+
+// y = A*x and variants.  Either A or x can be sparse, the other must be full
+
+#include "sfmult.h"
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    const mxArray *A, *X ;
+    int at, ac, xt, xc, yt, yc, do_sparse_times_full ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    if (nargin < 2 || nargin > 8 || nargout > 1)
+    {
+	mexErrMsgTxt ("Usage: y = sfmult (A,x, at,ac, xt,xc, yt,yc)") ;
+    }
+
+    if (mxIsSparse (pargin [0]))
+    {
+	// sfmult (A,x) will do A*x where A is sparse and x is full
+	do_sparse_times_full = 1 ;
+	A = pargin [0] ;
+	X = pargin [1] ;
+    }
+    else
+    {
+	// sfmult (x,A) will do x*A where A is sparse and x is full
+	do_sparse_times_full = 0 ;
+	A = pargin [1] ;
+	X = pargin [0] ;
+    }
+
+    if (!mxIsSparse (A) || mxIsSparse (X))
+    {
+	mexErrMsgTxt ("one matrix must be sparse and the other full") ; 
+    }
+
+    at = (nargin > 2) ? mxGetScalar (pargin [2]) : 0 ;
+    ac = (nargin > 3) ? mxGetScalar (pargin [3]) : 0 ;
+    xt = (nargin > 4) ? mxGetScalar (pargin [4]) : 0 ;
+    xc = (nargin > 5) ? mxGetScalar (pargin [5]) : 0 ;
+    yt = (nargin > 6) ? mxGetScalar (pargin [6]) : 0 ;
+    yc = (nargin > 7) ? mxGetScalar (pargin [7]) : 0 ;
+
+    // -------------------------------------------------------------------------
+    // y = A*x or x*A or variants
+    // -------------------------------------------------------------------------
+
+    pargout [0] = do_sparse_times_full ?
+	sfmult (A, X, at, ac, xt, xc, yt, yc) :
+	fsmult (A, X, at, ac, xt, xc, yt, yc) ;
+
+    // (TO DO) convert y to real if imag(y) is all zero
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_vector_1.c b/MATLAB_Tools/SFMULT/sfmult_vector_1.c
new file mode 100644
index 0000000..826300c
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_vector_1.c
@@ -0,0 +1,122 @@
+//==============================================================================
+//=== sfmult_vector_1 ==========================================================
+//==============================================================================
+
+// y = A*x or A'*x where x is a vector
+
+// sfmult_AN_x_1    y = A*x	x is n-by-1, y is m-by-1
+// sfmult_AT_x_1    y = A'*x	x is m-by-1, y is n-by-1
+
+#include "sfmult.h"
+
+//==============================================================================
+//=== sfmult_AN_x_1 ============================================================
+//==============================================================================
+
+void sfmult_AN_x_1	// y = A*x	x is n-by-1 unit stride, y is m-by-1
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// m-by-1
+    double *Yz,		// m-by-1 if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-1
+    const double *Xz,	// n-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double y [4], x ;
+    Int p, pend, i, j, i0, i1, i2, i3 ;
+
+    for (i = 0 ; i < m ; i++)
+    {
+	Yx [i] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x = Xx [j] ;
+	switch ((pend - p) % 4)
+	{
+	    case 3: Yx [Ai [p]] += Ax [p] * x ; p++ ;
+	    case 2: Yx [Ai [p]] += Ax [p] * x ; p++ ;
+	    case 1: Yx [Ai [p]] += Ax [p] * x ; p++ ;
+	    case 0: ;
+	}
+	for ( ; p < pend ; p += 4)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    i2 = Ai [p+2] ;
+	    i3 = Ai [p+3] ;
+	    y [0] = Yx [i0] + Ax [p  ] * x ;
+	    y [1] = Yx [i1] + Ax [p+1] * x ;
+	    y [2] = Yx [i2] + Ax [p+2] * x ;
+	    y [3] = Yx [i3] + Ax [p+3] * x ;
+	    Yx [i0] = y [0] ;
+	    Yx [i1] = y [1] ;
+	    Yx [i2] = y [2] ;
+	    Yx [i3] = y [3] ;
+	}
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AT_x_1 ============================================================
+//==============================================================================
+
+void sfmult_AT_x_1	// y = A'*x	x is m-by-1 unit stride, y is n-by-1
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// n-by-1
+    double *Yz,		// n-by-1 if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// m-by-1
+    const double *Xz,	// m-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+)
+{
+    double y ;
+    Int p, pend, j ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y = 0 ;
+	switch ((pend - p) % 4)
+	{
+	    case 3: y += Ax [p] * Xx [Ai [p]] ; p++ ;
+	    case 2: y += Ax [p] * Xx [Ai [p]] ; p++ ;
+	    case 1: y += Ax [p] * Xx [Ai [p]] ; p++ ;
+	    case 0: ;
+	}
+	for ( ; p < pend ; p += 4)
+	{
+	    y += Ax [p  ] * Xx [Ai [p  ]] ;
+	    y += Ax [p+1] * Xx [Ai [p+1]] ;
+	    y += Ax [p+2] * Xx [Ai [p+2]] ;
+	    y += Ax [p+3] * Xx [Ai [p+3]] ;
+	}
+	Yx [j] = y ;
+    }
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_vector_k.c b/MATLAB_Tools/SFMULT/sfmult_vector_k.c
new file mode 100644
index 0000000..93d2c9c
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_vector_k.c
@@ -0,0 +1,124 @@
+//==============================================================================
+//=== sfmult_vector_k =========================================================
+//==============================================================================
+
+// y = A*x or A'*x where x is a vector (x or y non-unit stride)
+
+// sfmult_AN_xk_1   y = A*x	x is n-by-1, y is m-by-1 (x non-unit stride)
+// sfmult_AT_xk_1   y = A'*x	x is m-by-1, y is n-by-1 (y non-unit stride)
+
+#include "sfmult.h"
+
+//==============================================================================
+//=== sfmult_AN_xk_1 ===========================================================
+//==============================================================================
+
+void sfmult_AN_xk_1	// y = A*x	x is n-by-1 non-unit stride, y is m-by-1
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// m-by-1
+    double *Yz,		// m-by-1 if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// n-by-1
+    const double *Xz,	// n-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// stride of x
+)
+{
+    double y [4], x ;
+    Int p, pend, i, j, i0, i1, i2, i3 ;
+
+    for (i = 0 ; i < m ; i++)
+    {
+	Yx [i] = 0 ;
+    }
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	x = Xx [k*j] ;
+	switch ((pend - p) % 4)
+	{
+	    case 3: Yx [Ai [p]] += Ax [p] * x ; p++ ;
+	    case 2: Yx [Ai [p]] += Ax [p] * x ; p++ ;
+	    case 1: Yx [Ai [p]] += Ax [p] * x ; p++ ;
+	    case 0: ;
+	}
+	for ( ; p < pend ; p += 4)
+	{
+	    i0 = Ai [p  ] ;
+	    i1 = Ai [p+1] ;
+	    i2 = Ai [p+2] ;
+	    i3 = Ai [p+3] ;
+	    y [0] = Yx [i0] + Ax [p  ] * x ;
+	    y [1] = Yx [i1] + Ax [p+1] * x ;
+	    y [2] = Yx [i2] + Ax [p+2] * x ;
+	    y [3] = Yx [i3] + Ax [p+3] * x ;
+	    Yx [i0] = y [0] ;
+	    Yx [i1] = y [1] ;
+	    Yx [i2] = y [2] ;
+	    Yx [i3] = y [3] ;
+	}
+    }
+}
+
+
+//==============================================================================
+//=== sfmult_AT_xk_1 ===========================================================
+//==============================================================================
+
+void sfmult_AT_xk_1	// y = A'*x	x is m-by-1, y is n-by-1 non-unit stride
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// n-by-1
+    double *Yz,		// n-by-1 if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// m-by-1
+    const double *Xz,	// m-by-1 if X complex
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k		// stride of y
+)
+{
+    double y ;
+    Int p, pend, j ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	y = 0 ;
+	switch ((pend - p) % 4)
+	{
+	    case 3: y += Ax [p] * Xx [Ai [p]] ; p++ ;
+	    case 2: y += Ax [p] * Xx [Ai [p]] ; p++ ;
+	    case 1: y += Ax [p] * Xx [Ai [p]] ; p++ ;
+	    case 0: ;
+	}
+	for ( ; p < pend ; p += 4)
+	{
+	    y += Ax [p  ] * Xx [Ai [p  ]] ;
+	    y += Ax [p+1] * Xx [Ai [p+1]] ;
+	    y += Ax [p+2] * Xx [Ai [p+2]] ;
+	    y += Ax [p+3] * Xx [Ai [p+3]] ;
+	}
+	Yx [k*j] = y ;
+    }
+}
diff --git a/MATLAB_Tools/SFMULT/sfmult_xA.c b/MATLAB_Tools/SFMULT/sfmult_xA.c
new file mode 100644
index 0000000..3dcf166
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/sfmult_xA.c
@@ -0,0 +1,70 @@
+//==============================================================================
+// sfmult_xA: Y = X*A, unblocked
+//==============================================================================
+
+// This kernel is unique; it operates on all of X and Y, not just a few rows or
+// columns.  It is used only when A is very sparse and X is large since it can
+// be very slow otherwise.
+
+#include "sfmult.h"
+
+void sfmult_xA		// y = (A'*x')' = x*A,	x is k-by-m, and y is k-by-n
+(
+    // --- outputs, not initialized on input
+    double *Yx,		// k-by-n
+    double *Yz,		// k-by-n if Y is complex (TO DO)
+
+    // --- inputs, not modified
+    const Int *Ap,	// size n+1 column pointers
+    const Int *Ai,	// size nz = Ap[n] row indices
+    const double *Ax,	// size nz values
+    const double *Az,	// size nz imaginary values if A is complex (TO DO)
+    Int m,		// A is m-by-n
+    Int n,
+    const double *Xx,	// k-by-m
+    const double *Xz,	// k-by-m if X complex (TO DO)
+    int ac,		// true: use conj(A), otherwise use A (TO DO)
+    int xc,		// true: use conj(X), otherwise use X (TO DO)
+    int yc		// true: compute conj(Y), otherwise compute Y (TO DO)
+    , Int k
+)
+{
+    double a ;
+    const double *xx, *xz ;
+    Int p, pend, j, i, k1 ;
+
+    p = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	pend = Ap [j+1] ;
+	for (k1 = 0 ; k1 < k ; k1++)
+	{
+	    Yx [k1] = 0 ;
+	}
+	for ( ; p < pend ; p++)
+	{
+	    i = Ai [p] ;
+	    a = Ax [p] ;
+	    xx = Xx + i*k ;
+	    xz = Xz + i*k ;
+	    k1 = k % 4 ;
+	    switch (k1)
+	    {
+		case 3: Yx [2] += a * xx [2] ;
+		case 2: Yx [1] += a * xx [1] ;
+		case 1: Yx [0] += a * xx [0] ;
+		case 0: ;
+	    }
+	    for ( ; k1 < k ; k1 += 4)
+	    {
+		Yx [k1  ] += a * xx [k1  ] ;
+		Yx [k1+1] += a * xx [k1+1] ;
+		Yx [k1+2] += a * xx [k1+2] ;
+		Yx [k1+3] += a * xx [k1+3] ;
+	    }
+	}
+	Yx += k ;
+	Yz += k ;
+    }
+}
+
diff --git a/MATLAB_Tools/SFMULT/ssmult_transpose.c b/MATLAB_Tools/SFMULT/ssmult_transpose.c
new file mode 100644
index 0000000..1ebff0d
--- /dev/null
+++ b/MATLAB_Tools/SFMULT/ssmult_transpose.c
@@ -0,0 +1,140 @@
+//==============================================================================
+// ssmult_transpose
+//==============================================================================
+
+// C = A' or A.' where the input matrix A may have unsorted columns.  The output
+// C is always returned with sorted columns.
+
+#include "sfmult.h"
+
+mxArray *ssmult_transpose	// returns C = A' or A.'
+(
+    const mxArray *A,
+    int conj			// compute A' if true, compute A.' if false
+)
+{
+    Int *Cp, *Ci, *Ap, *Ai, *W ;
+    double *Cx, *Cz, *Ax, *Az ;	    // (TO DO): do single too
+    mxArray *C ;
+    Int p, pend, q, i, j, n, m, anz, cnz ;
+    int C_is_complex ;
+
+    //--------------------------------------------------------------------------
+    // get inputs
+    //--------------------------------------------------------------------------
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    Ap = mxGetJc (A) ;
+    Ai = mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    anz = Ap [n] ;
+    C_is_complex = mxIsComplex (A) ;
+
+    //--------------------------------------------------------------------------
+    // allocate C but do not initialize it
+    //--------------------------------------------------------------------------
+
+    cnz = MAX (anz, 1) ;
+    C = mxCreateSparse (0, 0, 0, C_is_complex ? mxCOMPLEX : mxREAL) ;
+    mxFree (mxGetJc (C)) ;
+    mxFree (mxGetIr (C)) ;
+    mxFree (mxGetPr (C)) ;
+    mxFree (mxGetPi (C)) ;
+    Cp = mxMalloc ((m+1) * sizeof (Int)) ;
+    Ci = mxMalloc (cnz * sizeof (Int)) ;
+    Cx = mxMalloc (cnz * sizeof (double)) ;
+    Cz = C_is_complex ? mxMalloc (cnz * sizeof (double)) : NULL ;
+    mxSetJc (C, Cp) ;
+    mxSetIr (C, Ci) ;
+    mxSetPr (C, Cx) ;
+    mxSetPi (C, Cz) ;
+    mxSetNzmax (C, cnz) ;
+    mxSetM (C, n) ;
+    mxSetN (C, m) ;
+
+    //--------------------------------------------------------------------------
+    // allocate workspace
+    //--------------------------------------------------------------------------
+
+    W = mxCalloc (m, sizeof (Int)) ;
+
+    //--------------------------------------------------------------------------
+    // compute row counts
+    //--------------------------------------------------------------------------
+
+    for (p = 0 ; p < anz ; p++)
+    {
+	W [Ai [p]]++ ;
+    }
+
+    //--------------------------------------------------------------------------
+    // compute column pointers of C and copy back into W
+    //--------------------------------------------------------------------------
+
+    for (p = 0, i = 0 ; i < m ; i++)
+    {
+	Cp [i] = p ;
+	p += W [i] ;
+	W [i] = Cp [i] ;
+    }
+    Cp [m] = p ;
+
+    //--------------------------------------------------------------------------
+    // C = A'
+    //--------------------------------------------------------------------------
+
+    p = 0 ;
+    if (!C_is_complex)
+    {
+	// C = A' (real case)
+	for (j = 0 ; j < n ; j++)
+	{
+	    pend = Ap [j+1] ;
+	    for ( ; p < pend ; p++)
+	    {
+		q = W [Ai [p]]++ ;	// find position for C(j,i)
+		Ci [q] = j ;		// place A(i,j) as entry C(j,i)
+		Cx [q] = Ax [p] ;
+	    }
+	}
+    }
+    else if (conj)
+    {
+	// C = A' (complex conjugate)
+	for (j = 0 ; j < n ; j++)
+	{
+	    pend = Ap [j+1] ;
+	    for ( ; p < pend ; p++)
+	    {
+		q = W [Ai [p]]++ ;	// find position for C(j,i)
+		Ci [q] = j ;		// place A(i,j) as entry C(j,i)
+		Cx [q] = Ax [p] ;
+		Cz [q] = -Az [p] ;
+	    }
+	}
+    }
+    else
+    {
+	// C = A.' (complex case)
+	for (j = 0 ; j < n ; j++)
+	{
+	    pend = Ap [j+1] ;
+	    for ( ; p < pend ; p++)
+	    {
+		q = W [Ai [p]]++ ;	// find position for C(j,i)
+		Ci [q] = j ;		// place A(i,j) as entry C(j,i)
+		Cx [q] = Ax [p] ;
+		Cz [q] = Az [p] ;
+	    }
+	}
+    }
+
+    //--------------------------------------------------------------------------
+    // free workspace and return result
+    //--------------------------------------------------------------------------
+
+    mxFree (W) ;
+    return (C) ;
+}
diff --git a/MATLAB_Tools/SSMULT/ChangeLog b/MATLAB_Tools/SSMULT/ChangeLog
new file mode 100644
index 0000000..0b27c3c
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ChangeLog
@@ -0,0 +1,12 @@
+Oct 10, 2014
+
+    modified ssmult_install.m  No change to C code.
+
+Dec 7, 2011
+
+    * minor fix to ssmult_install.m
+
+Nov 2, 2010
+
+    * changed mxCreateScalarDouble (which is obsolete) to mxCreateDoubleScalar,
+	in ssmultsym.c
diff --git a/MATLAB_Tools/SSMULT/Contents.m b/MATLAB_Tools/SSMULT/Contents.m
new file mode 100644
index 0000000..643fe65
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/Contents.m
@@ -0,0 +1,18 @@
+% SSMULT:  sparse matrix multiplication (sparse times sparse)
+%
+% SSMULT computes C=A*B where A and B are sparse.  It is typically faster
+% than C=A*B in MATLAB 7.4 (or earlier), and always uses less memory.
+%
+%   ssmult          - multiplies two sparse matrices.
+%   ssmultsym       - computes nnz(C), memory, and flops to compute C=A*B; A and B sparse.
+%
+% Compiling and testing:
+%   ssmult_install  - compiles, installs, and optionally tests ssmult.
+%   ssmult_test     - lengthy test of SSMULT and SSMULTSYM
+%   sstest          - exhaustive performance test for SSMULT.
+%   sstest2         - exhaustive performance test for SSMULT.  Requires UFget.
+%
+% Example:
+%   C = ssmult(A,B) ;    % computes C = A*B
+%
+% Copyright 2011, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/SSMULT/README.txt b/MATLAB_Tools/SSMULT/README.txt
new file mode 100644
index 0000000..f1596c1
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/README.txt
@@ -0,0 +1,92 @@
+SSMULT, Copyright (c) 2007-2011, Timothy A. Davis, http://www.suitesparse.com.
+Distributed under the GNU GPL license (see below). 
+SSMULT is also available under other licenses; contact the author for details.
+
+SSMULT is a MATLAB toolbox for multiplying two sparse matrices, C = A*B.  It
+always uses less memory than the built-in C=A*B (in MATLAB 7.4 or earlier, at
+least).  It is typically faster, particularly when A or B are complex.  It is
+also much faster when A or B are diagonal or permutations of diagonal matrices.
+Requires MATLAB 6.1 or later (it may work on earlier versions; it has been
+tested on MATLAB 6.1, 6.5, 7.0.1, 7.0.4, 7.1, 7.2, 7.3, and 7.4).  Works on
+32-bit and 64-bit MATLAB.  Either A or B, or both, can be complex.  It should
+work in 64-bit Windows, but it has only been tested on Linux for the 64-bit
+case.  Only "double" sparse matrices are supported.
+
+SSMULT appears in MATLAB 7.6 and later, but that version of MATLAB does not
+pass the transpose/conjugate flags to ssmult.  Instead, (A*B)' (for example) is
+computed by multiplying A*B with ssmult, followed by a seperate
+conjugate-transpose operation in MATLAB.  This can cause performance
+degradation, particularly when computing x'*y when x and y are large sparse
+column vectors.
+
+To compile, install, and test, type
+
+    ssmult_install
+
+in the MATLAB command window.  Then edit your path (with pathtool, or
+startup.m) to add the SSMULT directory to your MATLAB path.  For more extensive
+tests (which require the UFget package) type sstest2 after installing SSMULT.
+
+For best performance, do not use the "lcc" compiler that ships with MATLAB 7.4
+(or earlier) for Windows.  Use another compiler instead.  Type "mex -setup" or
+"doc mex" for more information.  For Linux/Unix/Mac, edit your mexopts.sh file
+and use the option:
+
+    COPTIMFLAGS='-O3 -DNDEBUG'
+
+Note that there is a workaround for a minor "gcc -O" bug (handling floating-
+point underflow) in ssmult_template.c.  Use -DNO_GCC_BUG if this bug does not
+affect you, and you might slightly increase your performance.
+
+The Results directory contains the result of sstest on various platforms.
+The first three are all on the same laptop, an Intel Core Duo (2GHz, 2GB
+memory, 2MB of cache):
+
+CoreDuo_Linux.png       MATLAB 7.4, Intel Core Duo, Linux, gcc v4.1, -O3
+CoreDuo_MS_lcc.png      MATLAB 7.4, same laptop as above, lcc compiler.
+CoreDuo_MS_vc2005.png   MATLAB 7.4, same laptop, MS VC++ 2005 compiler.
+
+Opteron64_Linux.png     MATLAB 7.3, AMD Opteron (64-bit)
+Pentium4M_Linux.png     MATLAB 7.3, Pentium 4M, Linux, gcc version 4.1, -O3
+
+These results show that ssmult is always faster for the matrices in this test,
+when using gcc -O3 in Linux.  Comparing the CoreDuo_*.png results, you can see
+that lcc generates very slow code; these results are on the same laptop.  If
+you see that ssmult is slower than C=A*B in sstest, then check your compiler
+and its optimization options.  In particular, "lcc" as the default compiler
+used by the "mex" function in MATLAB on Windows will lead to poor performance.
+In particular, Microsoft provides Visual C++ 2005 Express Edition for free.
+Intel's compiler also generates high-quality code.
+
+If you do not have a C compiler for Windows (other than "lcc" provided with
+MATLAB) do the following.  Download and install the following from
+www.microsoft.com:
+
+    Microsoft Visual C++ 2005 Express Edition
+    Microsoft Platform SDK (Windows Server 2003)
+
+Next, install the compiler for use in the MATLAB "mex" command:
+
+    Right click My Computer and select Properties.
+    Click the Advanced tab.
+    Click the Environment Variables button.
+    Create a new environment variable called MSSdk and set its value to the
+        path to the Microsoft Platform SDK.  The default location is
+        C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\
+    In MATLAB, type the command "mex -setup".  Select the Microsoft Visual C++
+        2005 Express Edition compiler.
+
+--------------------------------------------------------------------------------
+
+SSMULT is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+SSMULT is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this Module; if not, write to the Free Software Foundation, Inc., 51 Franklin
+Street, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/SSMULT/Results/CoreDuo_Linux.png b/MATLAB_Tools/SSMULT/Results/CoreDuo_Linux.png
similarity index 100%
rename from SSMULT/Results/CoreDuo_Linux.png
rename to MATLAB_Tools/SSMULT/Results/CoreDuo_Linux.png
diff --git a/SSMULT/Results/CoreDuo_MS_lcc.png b/MATLAB_Tools/SSMULT/Results/CoreDuo_MS_lcc.png
similarity index 100%
rename from SSMULT/Results/CoreDuo_MS_lcc.png
rename to MATLAB_Tools/SSMULT/Results/CoreDuo_MS_lcc.png
diff --git a/SSMULT/Results/CoreDuo_MS_vc2005.png b/MATLAB_Tools/SSMULT/Results/CoreDuo_MS_vc2005.png
similarity index 100%
rename from SSMULT/Results/CoreDuo_MS_vc2005.png
rename to MATLAB_Tools/SSMULT/Results/CoreDuo_MS_vc2005.png
diff --git a/SSMULT/Results/Opteron64_Linux.png b/MATLAB_Tools/SSMULT/Results/Opteron64_Linux.png
similarity index 100%
rename from SSMULT/Results/Opteron64_Linux.png
rename to MATLAB_Tools/SSMULT/Results/Opteron64_Linux.png
diff --git a/SSMULT/Results/Opteron64_sstest2.png b/MATLAB_Tools/SSMULT/Results/Opteron64_sstest2.png
similarity index 100%
rename from SSMULT/Results/Opteron64_sstest2.png
rename to MATLAB_Tools/SSMULT/Results/Opteron64_sstest2.png
diff --git a/SSMULT/Results/Pentium4M_Linux.png b/MATLAB_Tools/SSMULT/Results/Pentium4M_Linux.png
similarity index 100%
rename from SSMULT/Results/Pentium4M_Linux.png
rename to MATLAB_Tools/SSMULT/Results/Pentium4M_Linux.png
diff --git a/MATLAB_Tools/SSMULT/Results/s2.m b/MATLAB_Tools/SSMULT/Results/s2.m
new file mode 100644
index 0000000..83239d1
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/Results/s2.m
@@ -0,0 +1,43 @@
+load sstest2_results.mat % TM T1 TU f
+whos
+
+index = UFget ;
+
+tmax = max (max (TM))
+tmin = min (TM (find (TM > 0)))
+
+nmat = length (f) ;
+k = nmat ;
+
+    for kind = 1:4
+
+	subplot (2,4,kind) ;
+	r = TM (1:k,kind) ./ T1 (1:k,kind) ;
+	rmin = min (r) ;
+	rmax = max (r) ;
+	loglog (TM (1:k,kind), r, 'o', ...
+	    [tmin tmax], [1 1], 'r-', ...
+	    [tmin tmax], [1.1 1.1], 'r-', ...
+	    [tmin tmax], [1/1.1 1/1.1], 'r-', ...
+	    [tmin tmax], [2 2], 'g-', ...
+	    [tmin tmax], [1.5 1.5], 'g-', ...
+	    [tmin tmax], [1/1.5 1/1.5], 'g-', ...
+	    [tmin tmax], [.5 .5], 'g-' );
+	if (k > 2)
+	    axis ([tmin tmax rmin rmax]) ;
+	    set (gca, 'XTick', [1e-5 1e-4  1e-3 1e-2 1e-1 1 10]) ;
+	    set (gca, 'YTick', [.5 1/1.5 1/1.1 1 1.1 1.5 2]) ;
+	end
+	xlabel ('MATLAB time') ; 
+	ylabel ('MATLAB/SM time') ; 
+	if (kind == 1)
+	    title ('real*real') ;
+	elseif (kind == 2)
+	    title ('complex*real') ;
+	elseif (kind == 3)
+	    title ('real*complex') ;
+	elseif (kind == 4)
+	    title ('complex*complex') ;
+	end
+
+    end
diff --git a/MATLAB_Tools/SSMULT/Results/sstest2_results.mat b/MATLAB_Tools/SSMULT/Results/sstest2_results.mat
new file mode 100644
index 0000000..bb6d52d
Binary files /dev/null and b/MATLAB_Tools/SSMULT/Results/sstest2_results.mat differ
diff --git a/MATLAB_Tools/SSMULT/gpl.txt b/MATLAB_Tools/SSMULT/gpl.txt
new file mode 100644
index 0000000..3461591
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/gpl.txt
@@ -0,0 +1,340 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+

+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/MATLAB_Tools/SSMULT/sptranspose.c b/MATLAB_Tools/SSMULT/sptranspose.c
new file mode 100644
index 0000000..4e80960
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/sptranspose.c
@@ -0,0 +1,42 @@
+/* -------------------------------------------------------------------------- */
+/* sptranspose mexFunction */
+/* -------------------------------------------------------------------------- */
+
+/* C = A' or A.' */
+
+#include "ssmult.h"
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    const mxArray *A ;
+    int conj ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin < 1 || nargin > 2 || nargout > 1)
+    {
+        mexErrMsgTxt ("Usage: C = sptranspose (A,conj)") ;
+    }
+
+    A = pargin [0] ;
+    if (!mxIsSparse (A))
+    {
+        mexErrMsgTxt ("A must be sparse") ; 
+    }
+
+    conj = (nargin > 1) ? mxGetScalar (pargin [1]) : 0 ;
+
+    /* ---------------------------------------------------------------------- */
+    /* C = A' or A.' */
+    /* ---------------------------------------------------------------------- */
+
+    pargout [0] = ssmult_transpose (A, conj) ;
+}
diff --git a/MATLAB_Tools/SSMULT/sptranspose.m b/MATLAB_Tools/SSMULT/sptranspose.m
new file mode 100644
index 0000000..9c87321
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/sptranspose.m
@@ -0,0 +1,16 @@
+function C = sptranspose (A,conj)                                           %#ok
+%SPTRANSPOSE: compute the transpose, or conjugate-transpose, of a sparse matrix.
+% This function is faster and more memory-efficient than the built-in sparse
+% transpose and ctranspose, at least in versions of MATLAB prior to 7.7 or so,
+% when the MATLAB built-in operator was upgraded by The MathWorks, Inc.
+%
+% Example:
+%       C = sptranspose (A) ;       % computes C = A.'
+%       C = sptranspose (A,1) ;     % computes C = A'
+%
+% See also transpose, ctranspose.
+
+% Copyright 2009, Timothy A. Davis, http://www.suitesparse.com
+
+error ('sptranspose mexFunction not found') ;
+
diff --git a/MATLAB_Tools/SSMULT/ssmult.c b/MATLAB_Tools/SSMULT/ssmult.c
new file mode 100644
index 0000000..7a8d259
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult.c
@@ -0,0 +1,188 @@
+/* ========================================================================== */
+/* == ssmult ================================================================ */
+/* ========================================================================== */
+
+/* C = A*B where A and B are sparse, or variants (A'*B, A*B', etc) using either
+   the saxpy method (for most matrices) or the dot product method (when C is
+   small compared with A and/or B).
+ */
+
+#include "ssmult.h"
+
+/* -------------------------------------------------------------------------- */
+/* ssmult_invalid */
+/* -------------------------------------------------------------------------- */
+
+void ssmult_invalid (int error)
+{
+    if (error == ERROR_DIMENSIONS)
+    {
+        mexErrMsgTxt ("Error using ==> ssmult\n"
+            "Inner matrix dimensions must agree.") ;
+    }
+    else if (error == ERROR_TOO_LARGE)
+    {
+        mexErrMsgTxt ("Error using ==> ssmult\n"
+            "Problem too large.") ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* ssmult_use_dot */
+/* -------------------------------------------------------------------------- */
+
+/* Determine workspace required for C = A'*B using the dot product method and
+   the saxpy method where A is m-by-n, B is m-by-k, C is n-by-k, and return
+   true if the dot product method would use less workspace than the saxpy
+   method.
+ */
+
+static int ssmult_use_dot (const mxArray *A, const mxArray *B)
+{
+    Int *Ap ;
+    Int m, n, k, anz ;
+    size_t dot_workspace, saxpy_workspace ;
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetN (B) ;
+    Ap = (Int *) mxGetJc (A) ;
+    anz = Ap [n] ;
+
+    /* ssmult_dot requires a full array C of n*k Reals */
+
+    dot_workspace = n * k * sizeof (double) ;   /* (twice if A or B complex) */
+
+    if (((double) n) * ((double) k) * ((double) (sizeof (double))) !=
+        (double) dot_workspace)
+    {
+        /* integer overflow computing dot_workspace; use saxpy method */
+        return (0) ;
+    }
+
+    /* computing T = A' requires a workspace of size m Int's, and then the
+     * space for T which is (m+1) Int's for the column pointers, nnz(A) Int's
+     * for the row indices, and nnz(A) Reals for the values.   The m Int
+     * workspace is freed, but reallocated by ssmult_saxpy as the Flag array.
+     * ssmult_saxpy requires an additional m Reals workspace.
+     */
+
+    saxpy_workspace =
+        (2*m+1 + anz) * sizeof (Int) +
+        + (anz + m) * sizeof (double) ;         /* (twice if A complex) */
+
+    /* use ssmult_dot if it requires less workspace */
+    return (dot_workspace < saxpy_workspace) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* ssmult */
+/* -------------------------------------------------------------------------- */
+
+mxArray *ssmult         /* returns C = A*B or variants */
+(
+    const mxArray *A,
+    const mxArray *B,
+    int at,             /* if true: trans(A)  if false: A */
+    int ac,             /* if true: conj(A)   if false: A. ignored if A real */
+    int bt,             /* if true: trans(B)  if false: B */
+    int bc,             /* if true: conj(B)   if false: B. ignored if B real */
+    int ct,             /* if true: trans(C)  if false: C */
+    int cc              /* if true: conj(C)   if false: C. ignored if C real */
+)
+{
+    mxArray *C, *T = NULL ;
+
+    if (!mxIsSparse (A) || !mxIsSparse (B))
+    {
+        mexErrMsgTxt ("A and B must be sparse") ; 
+    }
+
+    if (at)
+    {
+        if (bt)
+        {
+            if (ct)
+            {
+                /* C = (A'*B')'     A is m-by-n, B is k-by-m, C is k-by-n */
+                C = ssmult_saxpy (B, A, bc, ac, cc, 1) ;        /* C = B*A */
+            }
+            else
+            {
+                /* C = A'*B'        A is m-by-n, B is k-by-m, C is n-by-k */
+                T = ssmult_saxpy (B, A, bc, ac, 0, 0) ;         /* T = B*A */
+                C = ssmult_transpose (T, cc) ;                  /* C = T'  */
+            }
+        }
+        else
+        {
+            if (ct)
+            {
+                /* C = (A'*B)'      A is m-by-n, B is m-by-k, C is k-by-n */
+                if (ssmult_use_dot (B, A))
+                {
+                    C = ssmult_dot (B, A, bc, ac, cc) ;         /* C = B'*A */
+                }
+                else
+                {
+                    T = ssmult_transpose (B, bc) ;              /* T = B' */
+                    C = ssmult_saxpy (T, A, 0, ac, cc, 1) ;     /* C = T*A */
+                }
+            }
+            else
+            {
+                /* C = A'*B         A is m-by-n, B is m-by-k, C is n-by-k */
+                if (ssmult_use_dot (A, B))
+                {
+                    C = ssmult_dot (A, B, ac, bc, cc) ;         /* C = A'*B */
+                }
+                else
+                {
+                    T = ssmult_transpose (A, ac) ;              /* T = A' */
+                    C = ssmult_saxpy (T, B, 0, bc, cc, 1) ;     /* C = T*B */
+                }
+            }
+        }
+    }
+    else
+    {
+        if (bt)
+        {
+            if (ct)
+            {
+                /* C = (A*B')'      A is m-by-n, B is k-by-n, C is k-by-m */
+                T = ssmult_transpose (A, ac) ;                  /* T = A' */
+                C = ssmult_saxpy (B, T, bc, 0, cc, 1) ;         /* C = B*T */
+            }
+            else
+            {
+                /* C = A*B'         A is m-by-n, B is k-by-n, C is m-by-k */
+                T = ssmult_transpose (B, bc) ;                  /* T = B' */
+                C = ssmult_saxpy (A, T, ac, 0, cc, 1) ;         /* C = A*T */
+            }
+        }
+        else
+        {
+            if (ct)
+            {
+                /* C = (A*B)'       A is m-by-n, B is n-by-k, C is k-by-m */
+                T = ssmult_saxpy (A, B, ac, bc, 0, 0) ;         /* T = A*B */
+                C = ssmult_transpose (T, cc) ;                  /* C = T' */
+            }
+            else
+            {
+                /* C = A*B          A is m-by-n, B is n-by-k, C is m-by-k */
+                C = ssmult_saxpy (A, B, ac, bc, cc, 1) ;        /* C = A*B */
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace and return result */
+    /* ---------------------------------------------------------------------- */
+
+    if (T) mxDestroyArray (T) ;
+    return (C) ;
+}
diff --git a/MATLAB_Tools/SSMULT/ssmult.h b/MATLAB_Tools/SSMULT/ssmult.h
new file mode 100644
index 0000000..8ff3c07
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult.h
@@ -0,0 +1,66 @@
+/* ========================================================================== */
+/* === ssmult.h ============================================================= */
+/* ========================================================================== */
+
+/* Include file for ssmult.c and ssmultsym.c
+ * Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+ */
+
+#include "mex.h"
+#include <stdlib.h>
+
+/* NOTE: this code will FAIL abysmally if Int is mwIndex. */
+#define Int mwSignedIndex
+
+#define ERROR_DIMENSIONS (-1)
+#define ERROR_TOO_LARGE (-2)
+
+/* turn off debugging */
+#ifndef NDEBUG
+#define NDEBUG
+#endif
+
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+
+mxArray *ssmult_transpose       /* returns C = A' or A.' */
+(
+    const mxArray *A,
+    int conj                    /* compute A' if true, compute A.' if false */
+) ;
+
+int ssmult_nnz (const mxArray *A) ;
+
+void ssmult_invalid (int error_code) ;
+
+mxArray *ssmult         /* returns C = A*B or variants */
+(
+    const mxArray *A,
+    const mxArray *B,
+    int at,             /* if true: trans(A)  if false: A */
+    int ac,             /* if true: conj(A)   if false: A. ignored if A real */
+    int bt,             /* if true: trans(B)  if false: B */
+    int bc,             /* if true: conj(B)   if false: B. ignored if B real */
+    int ct,             /* if true: trans(C)  if false: C */
+    int cc              /* if true: conj(C)   if false: C. ignored if C real */
+) ;
+
+mxArray *ssmult_saxpy   /* returns C = A*B using the sparse saxpy method */
+(
+    const mxArray *A,
+    const mxArray *B,
+    int ac,                 /* if true use conj(A) */
+    int bc,                 /* if true use conj(B) */
+    int cc,                 /* if true compute conj(C) */
+    int sorted              /* if true, return C with sorted columns */
+) ;
+
+mxArray *ssmult_dot     /* returns C = A'*B using sparse dot product method */
+(
+    const mxArray *A,
+    const mxArray *B,
+    int ac,             /* if true: conj(A)   if false: A. ignored if A real */
+    int bc,             /* if true: conj(B)   if false: B. ignored if B real */
+    int cc              /* if true: conj(C)   if false: C. ignored if C real */
+) ;
+
+void ssdump (const mxArray *A) ;
diff --git a/MATLAB_Tools/SSMULT/ssmult.m b/MATLAB_Tools/SSMULT/ssmult.m
new file mode 100644
index 0000000..ce443b8
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult.m
@@ -0,0 +1,36 @@
+function C = ssmult (A,B, at,ac, bt,bc, ct,cc)                              %#ok
+%SSMULT multiplies two sparse matrices.
+% C = ssmult (A,B) computes C=A*B where A and B are sparse.  This function is
+% typically faster than C=A*B in MATLAB 7.4, and always uses less memory.
+% Either A or B, or both, can be complex.
+%
+% Example:
+%   load west0479
+%   A = west0479 ;
+%   B = sprand (west0479) ;
+%   C = A*B ;
+%   D = ssmult (A,B) ;
+%   C-D
+%
+% This function can also compute any of the 64 combinations of
+% C = op (op(A) * op(B)) where op(A) is A, A', A.', or conj(A).
+% The general form is
+%
+%   C = ssmult (A,B, at,ac, bt,bc, ct,cc)
+%
+% where at = 0 or 1 to transpose A or not, and ac = 0 or 1 to use the conjugate
+% of A, or not.  If not present, these 6 terms default to 0.  For example,
+% these pairs of expressions are identical:
+%
+%   ssmult (A,B, 1,1, 0,0, 0,0)             A'*B
+%   ssmult (A,B, 0,1, 0,0, 0,0)             conj(A)*B
+%   ssmult (A,B, 1,0, 0,0, 0,0)             A.'*B
+%   ssmult (A,B, 0,0, 0,0, 0,0)             A*B
+%   ssmult (A,B, 0,0, 1,1, 0,0)             A*B'
+%   ssmult (A,B, 0,1, 0,0, 1,1)             (conj(A)*B)'
+%
+% See also ssmultsym, mtimes.  See sstest3 for a list of all 64 variants.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+error ('ssmult mexFunction not found') ;
diff --git a/MATLAB_Tools/SSMULT/ssmult_demo.m b/MATLAB_Tools/SSMULT/ssmult_demo.m
new file mode 100644
index 0000000..3b22a40
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_demo.m
@@ -0,0 +1,18 @@
+function ssmult_demo
+%SSMULT_DEMO simple demo for ssmult.
+%
+% Example:
+%   ssmult_demo
+%
+% See also ssmult, ssmult_unsorted, ssmultsym, sstest, sstest2.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+type ssmult_demo
+load west0479
+A = west0479 ;
+B = sprand (A) ;
+C = A*B ;
+D = ssmult (A,B) ;
+err = norm (C-D,1) / norm (C,1) ;
+fprintf ('ssmult west0479 error: %g\n', err) ;
diff --git a/MATLAB_Tools/SSMULT/ssmult_dot.c b/MATLAB_Tools/SSMULT/ssmult_dot.c
new file mode 100644
index 0000000..d7d7723
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_dot.c
@@ -0,0 +1,291 @@
+/* ========================================================================== */
+/* == ssmult_dot ============================================================ */
+/* ========================================================================== */
+
+/*
+   C = A'*B using the sparse-dot-product method.  Computes C as a full matrix
+   first and then converts the result to sparse format.  It is thus useful only
+   if C is small compared to A and/or B.  It is very fast if A and B are long
+   column vectors, because in that case, computing A' takes a long time.
+
+   A is m-by-n, B is m-by-k, and thus C is n-by-k.
+
+   The time take by this function is at least proportional to n*k + flops(A*B)),
+   but it can be higher because a sparse dot product of x'*y where x and y are
+   column vectors can take up to O (nnz(x) + nnz(y)).  The sparse dot product
+   can terminate early.  In particular, the time is precisely
+   O (nnz (x (1:t)) + nnz (y (1:t))) where t = min (max (find (x), find (y))).
+   This sparse dot is used for each pair of columns of A and B.  The workspace
+   required by this method is n*k*sizeof(double) or twice that if A or B are
+   complex.
+
+   By comparison, the saxpy method to compute C=A*B takes O (m+n+k+flops(A*B))
+   time and uses only O(m) workspace.  However, C=A'*B using that method must
+   transpose A first, taking another O(m+n+nnz(A)) time and adding O(m+nnz(A))
+   workspace.
+
+   Note that m does NOT appear in the time or memory complexity of ssmult_dot
+   when C=A'*B is computed.  Thus, if m is huge compared to n, k, nnz(A), and
+   so on, then it can be far faster and use far less memory.  For exampe, if
+   A and B are very long and very sparse column vectors, the dot product method
+   is much faster than the saxpy method.
+
+   Comparing flop counts of the two methods is not trivial.  Thus, when
+   computing C=A'*B, ssmult uses whichever method requires the least workspace. 
+
+   Sparse dot product based matrix multiplication algorithm in MATLAB notation:
+  
+        function C = ssmult_dot (A,B)
+        % C = A'*B                  A is m-by-n, B is m-by-k, C is n-by-k
+        C = zeros (n,k) ;
+        for i = 1:n
+            for j = 1:k
+                C(i,j) = A (:,i)'*B(:,j) ;
+            end
+        end
+        C = sparse (C) ;
+ */
+
+#include "ssmult.h"
+
+/* -------------------------------------------------------------------------- */
+/* ssmult_dot */
+/* -------------------------------------------------------------------------- */
+
+mxArray *ssmult_dot     /* returns C = A'*B */
+(
+    const mxArray *A,
+    const mxArray *B,
+    int ac,             /* if true: conj(A)   if false: A. ignored if A real */
+    int bc,             /* if true: conj(B)   if false: B. ignored if B real */
+    int cc              /* if true: conj(C)   if false: C. ignored if C real */
+)
+{
+    double cx, cz, ax, az, bx, bz ;
+    mxArray *C ;
+    double *Ax, *Az, *Bx, *Bz, *Cx, *Cz ;
+    Int *Ap, *Ai, *Bp, *Bi, *Cp, *Ci ;
+    Int m, n, k, cnzmax, i, j, p, paend, pbend, ai, bi, cnz, pa, pb, zallzero,
+        A_is_complex, B_is_complex, C_is_complex ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get inputs */
+    /* ---------------------------------------------------------------------- */
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    k = mxGetN (B) ;
+
+    if (m != mxGetM (B)) ssmult_invalid (ERROR_DIMENSIONS) ;
+
+    Ap = (Int *) mxGetJc (A) ;
+    Ai = (Int *) mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    A_is_complex = mxIsComplex (A) ;
+
+    Bp = (Int *) mxGetJc (B) ;
+    Bi = (Int *) mxGetIr (B) ;
+    Bx = mxGetPr (B) ;
+    Bz = mxGetPi (B) ;
+    B_is_complex = mxIsComplex (B) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate C as an n-by-k full matrix but do not initialize it */
+    /* ---------------------------------------------------------------------- */
+
+    /* NOTE: integer overflow cannot occur here, because this function is not
+       called unless O(n*k) is less than O(m+nnz(A)).  The test is done
+       in the caller, not here.
+     */
+
+    cnzmax = n*k ;
+    cnzmax = MAX (cnzmax, 1) ;
+    Cx = mxMalloc (cnzmax * sizeof (double)) ;
+    C_is_complex = A_is_complex || B_is_complex ;
+    Cz = C_is_complex ?  mxMalloc (cnzmax * sizeof (double)) : NULL ;
+
+    /* ---------------------------------------------------------------------- */
+    /* C = A'*B using sparse dot products */
+    /* ---------------------------------------------------------------------- */
+
+    /*
+       NOTE:  this method REQUIRES the columns of A and B to be sorted on input.
+       That is, the row indices in each column must appear in ascending order.
+       This is the standard in all versions of MATLAB to date, and likely will
+       be for some time.  However, if MATLAB were to use unsorted sparse
+       matrices in the future (a lazy sort) then a test should be included in
+       ssmult to not use ssmult_dot if A or B are unsorted, or they should be
+       sorted on input.
+     */
+
+    cnz = 0 ;
+    for (j = 0 ; j < k ; j++)
+    {
+        for (i = 0 ; i < n ; i++)
+        {
+            /* compute C (i,j) = A (:,i)' * B (:,j) */
+            pa = Ap [i] ;
+            paend = Ap [i+1] ;
+            pb = Bp [j] ;
+            pbend = Bp [j+1] ;
+
+            if (pa == paend            /* nnz (A (:,i)) == 0 */
+            || pb == pbend             /* nnz (B (:,j)) == 0 */
+            || Ai [paend-1] < Bi [pb]  /* max(find(A(:,i)))<min(find(B(:,j))) */
+            || Ai [pa] > Bi [pbend-1]) /* min(find(A(:,i)))>max(find(B(:,j))) */
+            {
+                Cx [i+j*n] = 0 ;        /* no work to do */
+                if (C_is_complex) 
+                {
+                    Cz [i+j*n] = 0 ;
+                }
+                continue ;
+            }
+            cx = 0 ;
+            cz = 0 ;
+            while (pa < paend && pb < pbend)
+            {
+                /* The dot product looks like the merge in ssmergesort, except*/
+                /* no "clean-up" phase is need when one list is exhausted. */
+                ai = Ai [pa] ;
+                bi = Bi [pb] ;
+                if (ai == bi)
+                {
+                    /* c += A (ai,i) * B (ai,j), and "consume" both entries */
+                    if (!C_is_complex)
+                    {
+                        cx += Ax [pa] * Bx [pb] ;
+                    }
+                    else
+                    {
+                        /* complex case */
+                        ax = Ax [pa] ;
+                        bx = Bx [pb] ;
+                        az = Az ? (ac ? (-Az [pa]) : Az [pa]) : 0.0 ;
+                        bz = Bz ? (bc ? (-Bz [pb]) : Bz [pb]) : 0.0 ;
+                        cx += ax * bx - az * bz ;
+                        cz += az * bx + ax * bz ;
+                    }
+                    pa++ ;
+                    pb++ ;
+                }
+                else if (ai < bi)
+                {
+                    /* consume A(ai,i) and discard it, since B(ai,j) is zero */
+                    pa++ ;
+                }
+                else
+                {
+                    /* consume B(bi,j) and discard it, since A(ai,i) is zero */
+                    pb++ ;
+                }
+            }
+            Cx [i+j*n] = cx ;
+            if (C_is_complex)
+            {
+                Cz [i+j*n] = cz ;
+            }
+        }
+
+        /* count the number of nonzeros in C(:,j) */
+        for (i = 0 ; i < n ; i++)
+        {
+            /* This could be done above, except for the gcc compiler bug when
+               cx is an 80-bit nonzero in register above, but becomes zero here
+               when stored into memory.  We need the latter, to correctly handle
+               the case when cx underflows to zero in 64-bit floating-point.
+               Do not attempt to "optimize" this code by doing this test above,
+               unless the gcc compiler bug is fixed (as of gcc version 4.1.0).
+             */
+            if (Cx [i+j*n] != 0 || (C_is_complex && Cz [i+j*n] != 0))
+            {
+                cnz++ ;
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* convert C to real if the imaginary part is all zero */
+    /* ---------------------------------------------------------------------- */
+
+    if (C_is_complex)
+    {
+        zallzero = 1 ;
+        for (p = 0 ; zallzero && p < cnzmax ; p++)
+        {
+            if (Cz [p] != 0)
+            {
+                zallzero = 0 ;
+            }
+        }
+        if (zallzero)
+        {
+            /* the imaginary part of C is all zero */
+            C_is_complex = 0 ;
+            mxFree (Cz) ;
+            Cz = NULL ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate integer part of C but do not initialize it */
+    /* ---------------------------------------------------------------------- */
+
+    cnz = MAX (cnz, 1) ;
+    C = mxCreateSparse (0, 0, 0, C_is_complex ? mxCOMPLEX : mxREAL) ;
+    mxFree (mxGetJc (C)) ;
+    mxFree (mxGetIr (C)) ;
+    mxFree (mxGetPr (C)) ;
+    mxFree (mxGetPi (C)) ;
+    Cp = mxMalloc ((k + 1) * sizeof (Int)) ;
+    Ci = mxMalloc (cnz * sizeof (Int)) ;
+    mxSetJc (C, (mwIndex *) Cp) ;
+    mxSetIr (C, (mwIndex *) Ci) ;
+    mxSetM (C, n) ;
+    mxSetN (C, k) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* C = sparse (C).  Note that this is done in-place. */
+    /* ---------------------------------------------------------------------- */
+
+    p = 0 ;
+    for (j = 0 ; j < k ; j++)
+    {
+        Cp [j] = p ;
+        for (i = 0 ; i < n ; i++)
+        {
+            cx = Cx [i+j*n] ;
+            cz = (C_is_complex ? Cz [i+j*n] : 0) ;
+            if (cx != 0 || cz != 0)
+            {
+                Ci [p] = i ;
+                Cx [p] = cx ;
+                if (C_is_complex) Cz [p] = (cc ? (-cz) : cz) ;
+                p++ ;
+            }
+        }
+    }
+    Cp [k] = p ;
+
+    /* ---------------------------------------------------------------------- */
+    /* reduce the size of Cx and Cz and return result */
+    /* ---------------------------------------------------------------------- */
+
+    if (cnz < cnzmax)
+    {
+        Cx = mxRealloc (Cx, cnz * sizeof (double)) ;
+        if (C_is_complex)
+        {
+            Cz = mxRealloc (Cz, cnz * sizeof (double)) ;
+        }
+    }
+
+    mxSetNzmax (C, cnz) ;
+    mxSetPr (C, Cx) ;
+    if (C_is_complex)
+    {
+        mxSetPi (C, Cz) ;
+    }
+    return (C) ;
+}
diff --git a/MATLAB_Tools/SSMULT/ssmult_install.m b/MATLAB_Tools/SSMULT/ssmult_install.m
new file mode 100644
index 0000000..0b970ed
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_install.m
@@ -0,0 +1,79 @@
+function ssmult_install (dotests)
+%SSMULT_INSTALL compiles, installs, and tests ssmult.
+% Note that the "lcc" compiler provided with MATLAB for Windows can generate
+% slow code; use another compiler if possible.  Your current directory must be
+% SSMULT for ssmult_install to work properly.  If you use Linux/Unix/Mac, I
+% recommend that you use COPTIMFLAGS='-O3 -DNDEBUG' in your mexopts.sh file.
+%
+% Example:
+%   ssmult_install          % compile and install, do not test
+%   ssmult_install (1)      % compile, install, and test
+%
+% See also ssmult, ssmultsym, sstest, sstest2, mtimes.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('Compiling SSMULT:\n') ;
+
+%-------------------------------------------------------------------------------
+% compile ssmult and add it to the path
+%-------------------------------------------------------------------------------
+
+d = '' ;
+if (~isempty (strfind (computer, '64')))
+    % 64-bit MATLAB
+    d = ' -largeArrayDims -DIS64' ;
+end
+
+if (nargin < 1)
+    dotests = 0 ;
+end
+
+if (verLessThan ('matlab', '6.5'))
+    % mxIsDouble is false for a double sparse matrix in MATLAB 6.1 or earlier
+    d = [d ' -DMATLAB_6p1_OR_EARLIER'] ;
+end
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    d = [' -silent ' d] ;
+end
+
+cmd = sprintf ('mex -O%s ssmult.c ssmult_mex.c ssmult_saxpy.c ssmult_dot.c ssmult_transpose.c', d) ;
+if (dotests)
+    disp (cmd) ;
+end
+eval (cmd) ;
+
+cmd = sprintf ('mex -O%s ssmultsym.c', d) ;
+if (dotests)
+    disp (cmd) ;
+end
+eval (cmd) ;
+
+cmd = sprintf ('mex -O%s sptranspose.c ssmult_transpose.c', d) ;
+if (dotests)
+    disp (cmd) ;
+end
+eval (cmd) ;
+
+addpath (pwd) ;
+if (dotests)
+fprintf ('\nssmult has been compiled, and the following directory has been\n') ;
+fprintf ('added to your MATLAB path.  Use pathtool to add it permanently:\n') ;
+fprintf ('\n%s\n\n', pwd) ;
+fprintf ('If you cannot save your path with pathtool, add the following\n') ;
+fprintf ('to your MATLAB startup.m file (type "doc startup" for help):\n') ;
+fprintf ('\naddpath (''%s'') ;\n\n', pwd) ;
+else
+fprintf ('SSMULT successfully installed\n') ;
+end
+
+%-------------------------------------------------------------------------------
+% test ssmult and ssmultsym
+%-------------------------------------------------------------------------------
+
+if (dotests)
+    fprintf ('Please wait while your new ssmult function is tested ...\n') ;
+    ssmult_test ;
+end
diff --git a/MATLAB_Tools/SSMULT/ssmult_mex.c b/MATLAB_Tools/SSMULT/ssmult_mex.c
new file mode 100644
index 0000000..d700d91
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_mex.c
@@ -0,0 +1,44 @@
+/* -------------------------------------------------------------------------- */
+/* ssmult mexFunction */
+/* -------------------------------------------------------------------------- */
+
+#include "ssmult.h"
+
+/* C = A*B and variants.  Both A and B must be sparse */
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    const mxArray *A, *B ;
+    int at, ac, bt, bc, ct, cc ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin < 2 || nargin > 8 || nargout > 1)
+    {
+        mexErrMsgTxt ("Usage: C = ssmult (A,B, at,ac, bt,bc, ct,cc)") ;
+    }
+
+    A = pargin [0] ;
+    B = pargin [1] ;
+
+    at = (nargin > 2) ? mxGetScalar (pargin [2]) : 0 ;
+    ac = (nargin > 3) ? mxGetScalar (pargin [3]) : 0 ;
+    bt = (nargin > 4) ? mxGetScalar (pargin [4]) : 0 ;
+    bc = (nargin > 5) ? mxGetScalar (pargin [5]) : 0 ;
+    ct = (nargin > 6) ? mxGetScalar (pargin [6]) : 0 ;
+    cc = (nargin > 7) ? mxGetScalar (pargin [7]) : 0 ;
+
+    /* ---------------------------------------------------------------------- */
+    /* C = A*B or variants */
+    /* ---------------------------------------------------------------------- */
+
+    pargout [0] = ssmult (A, B, at, ac, bt, bc, ct, cc) ;
+}
diff --git a/MATLAB_Tools/SSMULT/ssmult_saxpy.c b/MATLAB_Tools/SSMULT/ssmult_saxpy.c
new file mode 100644
index 0000000..940af89
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_saxpy.c
@@ -0,0 +1,555 @@
+/* ========================================================================== */
+/* === ssmult_saxpy ========================================================= */
+/* ========================================================================== */
+
+/* C = ssmult_saxpy (A,B) multiplies two sparse matrices A and B, in MATLAB.
+ * Either A or B, or both, can be complex.  C is returned as a proper MATLAB
+ * sparse matrix, with sorted row indices, or with unsorted row indices.  No
+ * explicit zero entries appear in C.  If A or B are complex, but the imaginary
+ * part of C is computed to be zero, then C is returned as a real sparse matrix
+ * (as in MATLAB).
+ *
+ * Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+ */
+
+#include "ssmult.h"
+
+/* -------------------------------------------------------------------------- */
+/* merge Left [0..nleft-1] and Right [0..nright-1] into S [0..nleft+nright-1] */
+/* -------------------------------------------------------------------------- */
+
+static void merge
+(
+    Int S [ ],              /* output of length nleft + nright */
+    const Int Left [ ],     /* left input of length nleft */
+    const Int nleft,
+    const Int Right [ ],    /* right input of length nright */
+    const Int nright
+)
+{
+    Int p, pleft, pright ;
+
+    /* merge the two inputs, Left and Right, while both inputs exist */
+    for (p = 0, pleft = 0, pright = 0 ; pleft < nleft && pright < nright ; p++)
+    {
+        if (Left [pleft] < Right [pright])
+        {
+            S [p] = Left [pleft++] ;
+        }
+        else
+        {
+            S [p] = Right [pright++] ;
+        }
+    }
+
+    /* either input is exhausted; copy the remaining list into S */
+    for ( ; pleft < nleft ; p++)
+    {
+        S [p] = Left [pleft++] ;
+    }
+    for ( ; pright < nright ; p++)
+    {
+        S [p] = Right [pright++] ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* SORT(a,b) sorts [a b] in ascending order, so that a < b holds on output */
+/* -------------------------------------------------------------------------- */
+
+#define SORT(a,b) { if (a > b) { t = a ; a = b ; b = t ; } }
+
+
+/* -------------------------------------------------------------------------- */
+/* BUBBLE(a,b) sorts [a b] in ascending order, and sets done to 0 if it swaps */
+/* -------------------------------------------------------------------------- */
+
+#define BUBBLE(a,b) { if (a > b) { t = a ; a = b ; b = t ; done = 0 ; } }
+
+
+/* -------------------------------------------------------------------------- */
+/* ssmergesort */
+/* -------------------------------------------------------------------------- */
+
+/* ssmergesort (A,W,n) sorts an Int array A of length n in ascending order. W is
+ * a workspace array of size n.  function is used for sorting the row indices
+ * in each column of C.  Small lists (of length SMALL or less) are sorted with
+ * a bubble sort.  A value of 10 for SMALL works well on an Intel Core Duo, an
+ * Intel Pentium 4M, and a 64-bit AMD Opteron.  SMALL must be in the range 4 to
+ * 10. */
+
+#ifndef SMALL
+#define SMALL 10
+#endif
+
+static void ssmergesort
+(
+    Int A [ ],      /* array to sort, of size n */
+    Int W [ ],      /* workspace of size n */
+    Int n
+)
+{
+    if (n <= SMALL)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* bubble sort for small lists of length SMALL or less */
+        /* ------------------------------------------------------------------ */
+
+        Int t, done ;
+        switch (n)
+        {
+
+#if SMALL >= 10
+            case 10:
+                /* 10-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                BUBBLE (A [2], A [3]) ;
+                BUBBLE (A [3], A [4]) ;
+                BUBBLE (A [4], A [5]) ;
+                BUBBLE (A [5], A [6]) ;
+                BUBBLE (A [6], A [7]) ;
+                BUBBLE (A [7], A [8]) ;
+                BUBBLE (A [8], A [9]) ;
+                if (done) return ;
+#endif
+
+#if SMALL >= 9
+            case 9:
+                /* 9-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                BUBBLE (A [2], A [3]) ;
+                BUBBLE (A [3], A [4]) ;
+                BUBBLE (A [4], A [5]) ;
+                BUBBLE (A [5], A [6]) ;
+                BUBBLE (A [6], A [7]) ;
+                BUBBLE (A [7], A [8]) ;
+                if (done) return ;
+#endif
+
+#if SMALL >= 8
+            case 8:
+                /* 7-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                BUBBLE (A [2], A [3]) ;
+                BUBBLE (A [3], A [4]) ;
+                BUBBLE (A [4], A [5]) ;
+                BUBBLE (A [5], A [6]) ;
+                BUBBLE (A [6], A [7]) ;
+                if (done) return ;
+#endif
+
+#if SMALL >= 7
+            case 7:
+                /* 7-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                BUBBLE (A [2], A [3]) ;
+                BUBBLE (A [3], A [4]) ;
+                BUBBLE (A [4], A [5]) ;
+                BUBBLE (A [5], A [6]) ;
+                if (done) return ;
+#endif
+
+#if SMALL >= 6
+            case 6:
+                /* 6-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                BUBBLE (A [2], A [3]) ;
+                BUBBLE (A [3], A [4]) ;
+                BUBBLE (A [4], A [5]) ;
+                if (done) return ;
+#endif
+
+#if SMALL >= 5
+            case 5:
+                /* 5-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                BUBBLE (A [2], A [3]) ;
+                BUBBLE (A [3], A [4]) ;
+                if (done) return ;
+#endif
+
+            case 4:
+                /* 4-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                BUBBLE (A [2], A [3]) ;
+                if (done) return ;
+
+            case 3:
+                /* 3-element bubble sort */
+                done = 1 ;
+                BUBBLE (A [0], A [1]) ;
+                BUBBLE (A [1], A [2]) ;
+                if (done) return ;
+
+            case 2:
+                /* 2-element bubble sort */
+                SORT (A [0], A [1]) ; 
+
+            case 1:
+            case 0:
+                /* nothing to do */
+                ;
+        }
+
+    }
+    else
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* recursive ssmergesort if A has length 5 or more */
+        /* ------------------------------------------------------------------ */
+
+        Int n1, n2, n3, n4, n12, n34, n123 ;
+
+        n12 = n / 2 ;           /* split n into n12 and n34 */
+        n34 = n - n12 ;
+
+        n1 = n12 / 2 ;          /* split n12 into n1 and n2 */
+        n2 = n12 - n1 ;
+
+        n3 = n34 / 2 ;          /* split n34 into n3 and n4 */
+        n4 = n34 - n3 ;
+
+        n123 = n12 + n3 ;       /* start of 4th subset = n1 + n2 + n3 */
+
+        ssmergesort (A,        W, n1) ;       /* sort A [0  ... n1-1] */
+        ssmergesort (A + n1,   W, n2) ;       /* sort A [n1 ... n12-1] */
+        ssmergesort (A + n12,  W, n3) ;       /* sort A [n12 ... n123-1] */
+        ssmergesort (A + n123, W, n4) ;       /* sort A [n123 ... n-1]  */
+
+        /* merge A [0 ... n1-1] and A [n1 ... n12-1] into W [0 ... n12-1] */
+        merge (W, A, n1, A + n1, n2) ;
+
+        /* merge A [n12 ... n123-1] and A [n123 ... n-1] into W [n12 ... n-1] */
+        merge (W + n12, A + n12, n3, A + n123, n4) ;
+
+        /* merge W [0 ... n12-1] and W [n12 ... n-1] into A [0 ... n-1] */
+        merge (A, W, n12, W + n12, n34) ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* ssmult_saxpy */
+/* -------------------------------------------------------------------------- */
+
+mxArray *ssmult_saxpy       /* return C = A*B */
+(
+    const mxArray *A,
+    const mxArray *B,
+    int ac,                 /* if true use conj(A) */
+    int bc,                 /* if true use conj(B) */
+    int cc,                 /* if true compute conj(C) */
+    int sorted              /* if true, return C with sorted columns */
+)
+{
+    double bkj, bzkj, cij, czij ;
+    mxArray *C ;
+    double *Ax, *Az, *Bx, *Bz, *Cx, *Cz, *W, *Wz ;
+    Int *Ap, *Ai, *Bp, *Bi, *Cp, *Ci, *Flag ;
+    Int Anrow, Ancol, Bnrow, Bncol, p, i, j, k, cnz, pb, pa, pbend, paend, mark,
+        pc, pcstart, blen, drop, zallzero, pend, needs_sorting, pcmax ;
+    int A_is_complex, B_is_complex, C_is_complex, A_is_diagonal,
+        A_is_permutation ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get inputs and workspace */
+    /* ---------------------------------------------------------------------- */
+
+    Ap = (Int *) mxGetJc (A) ;
+    Ai = (Int *) mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    Anrow = mxGetM (A) ;
+    Ancol = mxGetN (A) ;
+    A_is_complex = mxIsComplex (A) ;
+
+    Bp = (Int *) mxGetJc (B) ;
+    Bi = (Int *) mxGetIr (B) ;
+    Bx = mxGetPr (B) ;
+    Bz = mxGetPi (B) ;
+    Bnrow = mxGetM (B) ;
+    Bncol = mxGetN (B) ;
+    B_is_complex = mxIsComplex (B) ;
+
+    if (Ancol != Bnrow) ssmult_invalid (ERROR_DIMENSIONS) ;
+
+    Flag = mxCalloc (Anrow, sizeof (Int)) ;     /* workspace */
+    Cp = mxMalloc ((Bncol+1) * sizeof (Int)) ;  /* allocate C column pointers */
+
+    /* ---------------------------------------------------------------------- */
+    /* compute # of nonzeros in result */
+    /* ---------------------------------------------------------------------- */
+
+    pb = 0 ;
+    cnz = 0 ;
+    mark = 0 ;
+    for (j = 0 ; j < Bncol ; j++)
+    {
+        /* Compute nnz (C (:,j)) */
+        mark-- ;                        /* Flag [0..n-1] != mark is now true */ 
+        pb = Bp [j] ;
+        pbend = Bp [j+1] ;
+        pcstart = cnz ;
+        pcmax = cnz + Anrow ;
+        Cp [j] = cnz ;
+        /* cnz += nnz (C (:,j)), stopping early if nnz(C(:,j)) == Anrow */
+        for ( ; pb < pbend && cnz < pcmax ; pb++)
+        {
+            k = Bi [pb] ;               /* nonzero entry B(k,j) */
+            paend = Ap [k+1] ;
+            for (pa = Ap [k] ; pa < paend ; pa++)
+            {
+                i = Ai [pa] ;           /* nonzero entry A(i,k) */
+                if (Flag [i] != mark)
+                {
+                    /* C(i,j) is a new nonzero */
+                    Flag [i] = mark ;   /* mark i as appearing in C(:,j) */
+                    cnz++ ;
+                }
+            }
+        }
+        if (cnz < pcstart)
+        {
+            /* integer overflow has occurred */
+            ssmult_invalid (ERROR_TOO_LARGE) ;
+        }
+    }
+    Cp [Bncol] = cnz ;
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate C */
+    /* ---------------------------------------------------------------------- */
+
+    Ci = mxMalloc (MAX (cnz,1) * sizeof (Int)) ;
+    Cx = mxMalloc (MAX (cnz,1) * sizeof (double)) ;
+    C_is_complex = A_is_complex || B_is_complex ;
+    Cz = (C_is_complex) ? mxMalloc (MAX (cnz,1) * sizeof (double)) : NULL ;
+
+    /* ---------------------------------------------------------------------- */
+    /* C = A*B */
+    /* ---------------------------------------------------------------------- */
+
+    if (sorted)
+    {
+#undef UNSORTED
+        if (A_is_complex)
+        {
+            if (B_is_complex)
+            {
+                /* all of C, A, and B are complex */
+#define ACOMPLEX
+#define BCOMPLEX
+#include "ssmult_template.c"
+            }
+            else
+            {
+                /* C and A are complex, B is real */
+#define ACOMPLEX
+#include "ssmult_template.c"
+            }
+        }
+        else
+        {
+            if (B_is_complex)
+            {
+                /* C and B are complex, A is real */
+#define BCOMPLEX
+#include "ssmult_template.c"
+            }
+            else
+            {
+                /* all of C, A, and B are real */
+#include "ssmult_template.c"
+            }
+        }
+    }
+    else
+    {
+#define UNSORTED
+        if (A_is_complex)
+        {
+            if (B_is_complex)
+            {
+                /* all of C, A, and B are complex */
+#define ACOMPLEX
+#define BCOMPLEX
+#include "ssmult_template.c"
+            }
+            else
+            {
+                /* C and A are complex, B is real */
+#define ACOMPLEX
+#include "ssmult_template.c"
+            }
+        }
+        else
+        {
+            if (B_is_complex)
+            {
+                /* C and B are complex, A is real */
+#define BCOMPLEX
+#include "ssmult_template.c"
+            }
+            else
+            {
+                /* all of C, A, and B are real */
+#include "ssmult_template.c"
+            }
+        }
+    }
+
+/*
+    for (j = 0 ; j < Bncol ; j++)
+    {
+        for (p = Cp [j] ; p < Cp [j+1] ; p++)
+        {
+            printf ("C(%d,%d) = %g", Ci [p], j, Cx [p]) ;
+            if (Cz != NULL) printf (" %g ", Cz [p]) ;
+            printf ("\n") ;
+        }
+    }
+*/
+    /* ---------------------------------------------------------------------- */
+    /* free workspace */
+    /* ---------------------------------------------------------------------- */
+
+    mxFree (Flag) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* convert C to real if Cz is all zero */
+    /* ---------------------------------------------------------------------- */
+
+    if (C_is_complex && zallzero)
+    {
+        C_is_complex = 0 ;
+        mxFree (Cz) ;
+        Cz = NULL ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* drop zeros from C and reduce its size, if any zeros appear */
+    /* ---------------------------------------------------------------------- */
+
+/*
+    for (j = 0 ; j < Bncol ; j++)
+    {
+        for (p = Cp [j] ; p < Cp [j+1] ; p++)
+        {
+            printf ("C(%d,%d) = %g", Ci [p], j, Cx [p]) ;
+            if (Cz != NULL) printf (" %g ", Cz [p]) ;
+            printf ("\n") ;
+        }
+    }
+*/
+
+    if (drop)
+    {
+        if (C_is_complex)
+        {
+            for (cnz = 0, p = 0, j = 0 ; j < Bncol ; j++)
+            {
+                Cp [j] = cnz ;
+                pend = Cp [j+1] ;
+                for ( ; p < pend ; p++)
+                {
+                    if (Cx [p] != 0 || Cz [p] != 0)
+                    {
+                        Ci [cnz] = Ci [p] ;         /* keep this entry */
+                        Cx [cnz] = Cx [p] ;
+                        Cz [cnz] = (cc ? (-Cz [p]) : (Cz [p])) ;
+                        cnz++ ;
+                    }
+                }
+            }
+            Cz = mxRealloc (Cz, MAX (cnz,1) * sizeof (double)) ;
+        }
+        else
+        {
+            for (cnz = 0, p = 0, j = 0 ; j < Bncol ; j++)
+            {
+                Cp [j] = cnz ;
+                pend = Cp [j+1] ;
+                for ( ; p < pend ; p++)
+                {
+                    if (Cx [p] != 0)
+                    {
+                        Ci [cnz] = Ci [p] ;         /* keep this entry */
+                        Cx [cnz] = Cx [p] ;
+                        cnz++ ;
+                    }
+                }
+            }
+        }
+        Cp [Bncol] = cnz ;
+        Ci = mxRealloc (Ci, MAX (cnz,1) * sizeof (Int)) ;
+        Cx = mxRealloc (Cx, MAX (cnz,1) * sizeof (double)) ;
+    }
+    else if (cc && C_is_complex)
+    {
+        /* compute conj(C), but with no dropping of entries */
+        cnz = Cp [Bncol] ;
+        for (p = 0 ; p < cnz ; p++)
+        {
+            Cz [p] = -Cz [p] ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return C */
+    /* ---------------------------------------------------------------------- */
+
+/*
+    for (j = 0 ; j < Bncol ; j++)
+    {
+        for (p = Cp [j] ; p < Cp [j+1] ; p++)
+        {
+            printf ("C(%d,%d) = %g", Ci [p], j, Cx [p]) ;
+            if (Cz != NULL) printf (" %g ", Cz [p]) ;
+            printf ("\n") ;
+        }
+    }
+*/
+
+    C = mxCreateSparse (0, 0, 0, C_is_complex ? mxCOMPLEX : mxREAL) ;
+    mxFree (mxGetJc (C)) ;
+    mxFree (mxGetIr (C)) ;
+    mxFree (mxGetPr (C)) ;
+    mxFree (mxGetPi (C)) ;
+    mxSetJc (C, (mwIndex *) Cp) ;
+    mxSetIr (C, (mwIndex *) Ci) ;
+    mxSetPr (C, Cx) ;
+    mxSetPi (C, Cz) ;
+    mxSetNzmax (C, MAX (cnz,1)) ;
+    mxSetM (C, Anrow) ;
+    mxSetN (C, Bncol) ;
+
+/*
+    for (j = 0 ; j < Bncol ; j++)
+    {
+        for (p = Cp [j] ; p < Cp [j+1] ; p++)
+        {
+            printf ("C(%d,%d) = %g", Ci [p], j, Cx [p]) ;
+            if (Cz != NULL) printf (" %g ", Cz [p]) ;
+            printf ("\n") ;
+        }
+    }
+*/
+    return (C) ;
+}
diff --git a/MATLAB_Tools/SSMULT/ssmult_template.c b/MATLAB_Tools/SSMULT/ssmult_template.c
new file mode 100644
index 0000000..c84765d
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_template.c
@@ -0,0 +1,421 @@
+/* ========================================================================== */
+/* === ssmult_template.c ==================================================== */
+/* ========================================================================== */
+
+/* C = A*B, where A and B are sparse.  The column pointers for C (the Cp array)
+ * have already been computed.  entries are dropped.  This code fragment is
+ * #include'd into ssmult.c four times, with all four combinations of ACOMPLEX
+ * (defined or not) and BCOMPLEX (defined or not).
+ *
+ * By default, C is returned with sorted column indices, and with explicit
+ * zero entries dropped.  If C is complex with an all-zero imaginary part, then
+ * the imaginary part is freed and C becomes real.  Thus, C is a pure MATLAB
+ * sparse matrix.
+ *
+ * If UNSORTED is defined (-DUNSORTED), then the nonzero pattern of C is
+ * returned with unsorted column indices.  This is much faster than returning a
+ * pure MATLAB sparse matrix, but the result must eventually be sorted prior to
+ * returning to MATLAB.
+ *
+ * If the compiler bug discussed below does not affect you, then uncomment the
+ * following line, or compile with code with -DNO_GCC_BUG.
+
+#define NO_GCC_BUG
+
+ * The gcc bug occurs when cij underflows to zero:
+ *
+ *      cij = aik * bkj ;
+ *      if (cij == 0)
+ *      {
+ *          drop this entry 
+ *      }
+ *
+ * If cij underflows, cij is zero but the above test is incorrectly FALSE with
+ * gcc -O, using gcc version 4.1.0 on an Intel Pentium.  The bug does not appear
+ * on an AMD Opteron with the same compiler.  The solution is to store cij to
+ * memory first, and then to read it back in and test it, which is slower.
+ */
+
+/* -------------------------------------------------------------------------- */
+/* MULT: multiply (or multiply and accumulate, depending on op) */
+/* -------------------------------------------------------------------------- */
+
+/* op can be "=" or "+=" */
+
+#ifdef ACOMPLEX
+#ifdef BCOMPLEX
+#define MULT(x,z,op) \
+    azik = (ac ? (-Az [pa]) : (Az [pa])) ; \
+    x op Ax [pa] * bkj - azik * bzkj ; \
+    z op azik * bkj + Ax [pa] * bzkj ;
+#else
+#define MULT(x,z,op) \
+    azik = (ac ? (-Az [pa]) : (Az [pa])) ; \
+    x op Ax [pa] * bkj ; \
+    z op azik * bkj ;
+#endif
+#else
+#ifdef BCOMPLEX
+#define MULT(x,z,op) \
+    x op Ax [pa] * bkj ; \
+    z op Ax [pa] * bzkj ;
+#else
+#define MULT(x,z,op) \
+    x op Ax [pa] * bkj ;
+#endif
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* ASSIGN_BKJ: copy B(k,j) into a local scalar */
+/* -------------------------------------------------------------------------- */
+
+#ifdef BCOMPLEX
+#define ASSIGN_BKJ \
+    bkj = Bx [pb] ; \
+    bzkj = (bc ? (-Bz [pb]) : (Bz [pb])) ;
+#else
+#define ASSIGN_BKJ \
+    bkj = Bx [pb] ;
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* DROP_CHECK: check if an entry must be dropped */
+/* -------------------------------------------------------------------------- */
+
+#if defined (ACOMPLEX) || defined (BCOMPLEX)
+#define DROP_CHECK(x,z) \
+    if (x == 0 && z == 0) drop = 1 ; \
+    if (z != 0) zallzero = 0 ;
+#else
+#define DROP_CHECK(x,z) if (x == 0) drop = 1 ;
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* sparse matrix multiply template */
+/* -------------------------------------------------------------------------- */
+
+{
+
+#ifdef ACOMPLEX
+    double azik ;
+#endif
+
+    /* ---------------------------------------------------------------------- */
+    /* initialize drop tests */
+    /* ---------------------------------------------------------------------- */
+
+    drop = 0 ;                  /* true if any entry in C is zero */
+    zallzero = 1 ;              /* true if Cz is all zero */
+
+    /* ---------------------------------------------------------------------- */
+    /* quick check if A is diagonal, or a permutation matrix */
+    /* ---------------------------------------------------------------------- */
+
+    if (Anrow == Ancol && Ap [Ancol] == Ancol)
+    {
+        /* A is square, with n == nnz (A); check the pattern */
+        A_is_permutation = 1 ;
+        A_is_diagonal = 1 ;
+        for (j = 0 ; j < Ancol ; j++)
+        {
+            if (Ap [j] != j)
+            {
+                /* A has a column with no entries, or more than 1 entry */
+                A_is_permutation = 0 ;
+                A_is_diagonal = 0 ;
+                break ;
+            }
+        }
+        mark-- ;                        /* Flag [0..n-1] != mark is now true */ 
+        for (j = 0 ; j < Ancol && (A_is_permutation || A_is_diagonal) ; j++)
+        {
+            /* A has one entry in each column, so j == Ap [j] */
+            i = Ai [j] ;
+            if (i != j)
+            {
+                /* A is not diagonal, but might still be a permutation */
+                A_is_diagonal = 0 ;
+            }
+            if (Flag [i] == mark)
+            {
+                /* row i appears twice; A is neither permutation nor diagonal */
+                A_is_permutation = 0 ;
+                A_is_diagonal = 0 ;
+            }
+            /* mark row i, so we know if we see it again */
+            Flag [i] = mark ;
+        }
+    }
+    else
+    {
+        /* A is not square, or nnz (A) is not equal to n */
+        A_is_permutation = 0 ;
+        A_is_diagonal = 0 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate workspace */
+    /* ---------------------------------------------------------------------- */
+
+#ifndef UNSORTED
+    W = NULL ;
+    if (!A_is_diagonal)
+    {
+#if defined (ACOMPLEX) || defined (BCOMPLEX)
+        W = mxMalloc (Anrow * 2 * sizeof (double)) ;
+        Wz = W + Anrow ;
+#else
+        W = mxMalloc (Anrow * sizeof (double)) ;
+#endif
+    }
+#endif
+
+    /* ---------------------------------------------------------------------- */
+    /* compute C one column at a time */
+    /* ---------------------------------------------------------------------- */
+
+    if (A_is_diagonal)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* C = A*B where A is diagonal */
+        /* ------------------------------------------------------------------ */
+
+        pb = 0 ;
+        for (j = 0 ; j < Bncol ; j++)
+        {
+            pcstart = pb ;
+            pbend = Bp [j+1] ;  /* column B is in Bi,Bx,Bz [pb ... pbend+1] */
+            for ( ; pb < pbend ; pb++)
+            {
+                k = Bi [pb] ;                   /* nonzero entry B(k,j) */
+                ASSIGN_BKJ ;
+                Ci [pb] = k ;
+                pa = k ;
+                MULT (Cx [pb], Cz [pb], =) ;    /* C(k,j) = A(k,k)*B(k,j) */
+#ifdef NO_GCC_BUG
+                DROP_CHECK (Cx [pb], Cz [pb]) ; /* check if C(k,j) == 0 */
+#endif
+            }
+
+#ifndef NO_GCC_BUG
+            for (pc = pcstart ; pc < pbend ; pc++)
+            {
+                DROP_CHECK (Cx [pc], Cz [pc]) ;   /* check if C(k,j) == 0 */
+            }
+#endif
+        }
+
+    }
+    else
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* C = A*B, general case, or A permutation */
+        /* ------------------------------------------------------------------ */
+
+        pb = 0 ;
+        cnz = 0 ;
+        for (j = 0 ; j < Bncol ; j++)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* compute jth column of C: C(:,j) = A * B(:,j) */
+            /* -------------------------------------------------------------- */
+
+            pbend = Bp [j+1] ;  /* column B is in Bi,Bx,Bz [pb ... pbend+1] */
+            pcstart = cnz ;     /* start of column j in C */
+            blen = pbend - pb ; /* number of entries in B */
+            needs_sorting = 0 ; /* true if column j needs sorting */
+
+            if (blen == 0)
+            {
+
+                /* ---------------------------------------------------------- */
+                /* nothing to do, B(:,j) and C(:,j) are empty */
+                /* ---------------------------------------------------------- */
+
+                continue ;
+
+            }
+            else if (blen == 1)
+            {
+
+                /* ---------------------------------------------------------- */
+                /* B(:,j) contains only one nonzero */
+                /* ---------------------------------------------------------- */
+
+                /* since there is only one entry in B, just scale column A(:,k):
+                 * C(:,j) = A(:,k) * B(k,j)
+                 * C is sorted only if A is sorted on input */
+
+                k = Bi [pb] ;                   /* nonzero entry B(k,j) */
+                ASSIGN_BKJ ;
+                paend = Ap [k+1] ;
+                for (pa = Ap [k] ; pa < paend ; pa++, cnz++)
+                {
+                    Ci [cnz] = Ai [pa] ;            /* nonzero entry A(i,k) */
+                    MULT (Cx [cnz], Cz [cnz], =) ;  /* C(i,j) = A(i,k)*B(k,j) */
+#ifdef NO_GCC_BUG
+                    DROP_CHECK (Cx [cnz], Cz [cnz]) ;   /* check C(i,j) == 0 */
+#endif
+                }
+                pb++ ;
+
+#ifndef NO_GCC_BUG
+                for (pc = pcstart ; pc < cnz ; pc++)
+                {
+                    DROP_CHECK (Cx [pc], Cz [pc]) ;   /* check if C(i,j) == 0 */
+                }
+#endif
+
+            }
+            else
+            {
+
+                /* ---------------------------------------------------------- */
+                /* B(:,j) has two or more entries */
+                /* ---------------------------------------------------------- */
+
+                if (A_is_permutation)
+                {
+
+                    /* ------------------------------------------------------ */
+                    /* A is a permutation matrix */
+                    /* ------------------------------------------------------ */
+
+                    needs_sorting = 1 ;
+                    for ( ; pb < pbend ; pb++)
+                    {
+                        k = Bi [pb] ;           /* nonzero entry B(k,j) */
+                        ASSIGN_BKJ ;
+                        i = Ai [k] ;            /* nonzero entry A(i,k) */
+                        Ci [pb] = i ;
+                        pa = k ;
+                        /* C(i,j) = A(i,k)*B(k,j) */
+#ifndef UNSORTED
+                        MULT (W [i], Wz [i], =) ;
+#else
+                        MULT (Cx [pb], Cz [pb], =) ;
+#endif
+                    }
+                    cnz = pbend ;
+
+                }
+                else
+                {
+
+                    /* ------------------------------------------------------ */
+                    /* general case */
+                    /* ------------------------------------------------------ */
+
+                    /* first entry in jth column of B is simpler */
+                    /* C(:,j) = A (:,k) * B (k,j) */
+                    k = Bi [pb] ;                   /* nonzero entry B(k,j) */
+                    ASSIGN_BKJ ;
+                    paend = Ap [k+1] ;
+                    for (pa = Ap [k] ; pa < paend ; pa++)
+                    {
+                        i = Ai [pa] ;               /* nonzero entry A(i,k) */
+                        Flag [i] = cnz ;
+                        Ci [cnz] = i ;              /* new entry C(i,j) */
+                        /* C(i,j) = A(i,k)*B(k,j) */
+#ifndef UNSORTED
+                        MULT (W [i], Wz [i], =) ;
+#else
+                        MULT (Cx [cnz], Cz [cnz], =) ;
+#endif
+                        cnz++ ;
+                    }
+                    pb++ ;
+                    for ( ; pb < pbend ; pb++)
+                    {
+                        k = Bi [pb] ;               /* nonzero entry B(k,j) */
+                        ASSIGN_BKJ ;
+                        /* C(:,j) += A (:,k) * B (k,j) */
+                        paend = Ap [k+1] ;
+                        for (pa = Ap [k] ; pa < paend ; pa++)
+                        {
+                            i = Ai [pa] ;           /* nonzero entry A(i,k) */
+                            pc = Flag [i] ;
+                            if (pc < pcstart)
+                            {
+                                pc = cnz++ ;
+                                Flag [i] = pc ;
+                                Ci [pc] = i ;           /* new entry C(i,j) */
+                                /* C(i,j) = A(i,k)*B(k,j) */
+#ifndef UNSORTED
+                                MULT (W [i], Wz [i], =) ;
+                                needs_sorting = 1 ;
+#else
+                                MULT (Cx [pc], Cz [pc], =) ;
+#endif
+                            }
+                            else
+                            {
+                                /* C(i,j) += A(i,k)*B(k,j) */
+#ifndef UNSORTED
+                                MULT (W [i], Wz [i], +=) ;
+#else
+                                MULT (Cx [pc], Cz [pc], +=) ;
+#endif
+                            }
+                        }
+                    }
+                }
+
+                /* ---------------------------------------------------------- */
+                /* sort the pattern of C(:,j) and gather the values of C(:,j) */
+                /* ---------------------------------------------------------- */
+
+#ifndef UNSORTED
+                /* Sort the row indices in C(:,j).  Use Cx as Int workspace.
+                 * This assumes sizeof (Int) < sizeof (double). If blen <= 1,
+                 * or if subsequent entries in B(:,j) appended entries onto C,
+                 * there is no need to sort C(:,j), assuming A is sorted. */
+                if (needs_sorting)
+                {
+                    ssmergesort (Ci + pcstart, (Int *) (Cx + pcstart),
+                        cnz - pcstart) ;
+                }
+                for (pc = pcstart ; pc < cnz ; pc++)
+                {
+#if defined (ACOMPLEX) || defined (BCOMPLEX)
+                    i = Ci [pc] ;
+                    cij = W [i] ;                   /* get C(i,j) from W */
+                    czij = Wz [i] ;
+                    Cx [pc] = cij ;                 /* copy C(i,j) into C */
+                    Cz [pc] = czij ;
+#else
+                    cij = W [Ci [pc]] ;             /* get C(i,j) from W */
+                    Cx [pc] = cij ;                 /* copy C(i,j) into C */
+#endif
+                    DROP_CHECK (cij, czij) ;        /* check if C(i,j) == 0 */
+                }
+#else
+                /* no need to sort, but we do need to check for drop */
+                for (pc = pcstart ; pc < cnz ; pc++)
+                {
+                    DROP_CHECK (Cx [pc], Cz [pc]) ; /* check if C(i,j) == 0 */
+                }
+#endif
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace */
+    /* ---------------------------------------------------------------------- */
+
+#ifndef UNSORTED
+    mxFree (W) ;
+#endif
+
+
+}
+
+#undef ACOMPLEX
+#undef BCOMPLEX
+#undef MULT
+#undef ASSIGN_BKJ
+#undef DROP_CHECK
diff --git a/MATLAB_Tools/SSMULT/ssmult_test.m b/MATLAB_Tools/SSMULT/ssmult_test.m
new file mode 100644
index 0000000..42f721e
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_test.m
@@ -0,0 +1,124 @@
+function ssmult_test
+%SSMULT_TEST lengthy test of SSMULT and SSMULTSYM
+%
+%   Example
+%       ssmult_test
+%
+% See also ssmult, ssmultsym
+
+% Copyright 2007-2011, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('\nTesting large sparse column vectors (1e7-by-1)\n') ;
+x = sprandn (1e7,1,1e-4) ;
+y = sprandn (1e7,1,1e-4) ;
+x (1) = pi ;
+y (1) = exp (1) ;
+tic ; a = x'*y ; t1 = toc ;
+tic ; b = ssmult (x, y, 1) ; t2 = toc ;
+fprintf ('s=x''*y in MATLAB: %8.3f seconds\n', t1) ;
+fprintf ('s=ssmult(x,y,1):  %8.3f seconds; error %g\n', t2, abs (full(a-b))) ;
+fprintf ('SSMULT speedup: %8.3g\n\n', t1/t2) ;
+
+load west0479
+A = west0479 ;
+B = sprand (A) ;
+C = A*B ;
+D = ssmult (A,B) ;
+err = norm (C-D,1) / norm (C,1) ;
+fprintf ('west0479 error: %g\n', err) ;
+
+fprintf ('\ntesting large matrices (may fail if you are low on memory):\n') 
+rand ('state', 0) ;
+
+n = 10000 ;
+A = sprand (n, n, 0.01) ;
+B = sprand (n, n, 0.001) ;
+test_large (A,B) ;
+
+msg = { 'real', 'complex' } ;
+
+% all of these calls to ssmult should fail:
+fprintf ('\ntesting error handling (the errors below are expected):\n') ;
+A = { 3, 'gunk', sparse(1), sparse(1), sparse(rand(3,2)) } ;
+B = { 4,   0   , 5,         msg,       sparse(rand(3,4)) } ;
+for k = 1:length(A)
+    try
+        % the following statement is supposed to fail 
+        C = ssmult (A {k}, B {k}) ;                                         %#ok
+        error ('test failed\n') ;
+    catch me
+        disp (me.message) ;
+    end
+end
+fprintf ('error handling tests: ok.\n') ;
+
+% err should be zero:
+rand ('state', 0)
+for Acomplex = 0:1
+    for Bcomplex = 0:1
+        err = 0 ;
+        fprintf ('\ntesting C = A*B where A is %s, B is %s\n', ...
+            msg {Acomplex+1}, msg {Bcomplex+1}) ;
+        for m = [ 0:30 100 ]
+            fprintf ('.') ;
+            for n = [ 0:30 100 ]
+                for k = [ 0:30 100 ]
+                    A = sprand (m,k,0.1) ;
+                    if (Acomplex)
+                        A = A + 1i*sprand (A) ;
+                    end
+                    B = sprand (k,n,0.1) ;
+                    if (Bcomplex)
+                        B = B + 1i*sprand (B) ;
+                    end
+                    C = A*B ;
+                    D = ssmult (A,B) ;
+                    s = ssmultsym (A,B) ;
+                    err = max (err, norm (C-D,1)) ;
+                    err = max (err, nnz (C-D)) ;
+                    err = max (err, isreal (D) ~= (norm (imag (D), 1) == 0)) ;
+                    err = max (err, s.nz > nnz (C)) ;
+                    [i j x] = find (D) ;                                    %#ok
+                    if (~isempty (x))
+                        err = max (err, any (x == 0)) ;
+                    end
+                end
+            end
+        end
+        fprintf (' maximum error: %g\n', err) ;
+    end
+end
+
+sstest ;
+fprintf ('\nSSMULT tests complete.\n') ;
+
+
+%-------------------------------------------------------------------------------
+function test_large (A,B)
+% test large matrices
+n = size (A,1) ;
+fprintf ('dimension %d   nnz(A): %d   nnz(B): %d\n', n, nnz (A), nnz (B)) ;
+c = ssmultsym (A,B) ;
+fprintf ('nnz(C): %d   flops: %g   memory: %g MB\n', ...
+    c.nz, c.flops, c.memory/2^20) ;
+try
+    % warmup for accurate timings
+    C = A*B ;                                                               %#ok
+    D = ssmult (A,B) ;                                                      %#ok
+    tic ;
+    C = A*B ;
+    t1 = toc ;
+    tic ;
+    D = ssmult (A,B) ;
+    t2 = toc ;
+    tic ;
+    t3 = toc ;
+    fprintf ('MATLAB time:          %g\n', t1) ;
+    err = norm (C-D,1) ;
+    fprintf ('SSMULT time:          %g err: %g\n', t2, err) ;
+catch me
+    disp (me.message)
+    fprintf ('tests with large random matrices failed ...\n') ;
+end
+clear C D
+
diff --git a/MATLAB_Tools/SSMULT/ssmult_transpose.c b/MATLAB_Tools/SSMULT/ssmult_transpose.c
new file mode 100644
index 0000000..e33c23b
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmult_transpose.c
@@ -0,0 +1,169 @@
+/* ========================================================================== */
+/* ssmult_transpose */
+/* ========================================================================== */
+
+/* C = A' or A.' where the input matrix A may have unsorted columns.  The output
+   C is always returned with sorted columns.
+ */
+
+#include "ssmult.h"
+
+void ssdump (const mxArray *A)
+{
+    Int j, p, m, n, *Ap, *Ai, anz ;
+    double *Ax, *Az ;
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    Ap = (Int *) mxGetJc (A) ;
+    Ai = (Int *) mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    anz = Ap [n] ;
+
+    printf ("%d by %d\n", m, n) ;
+    for (j = 0 ; j < n ; j++)
+    {
+        printf ("column %d:\n", j) ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            printf ("A(%d,%d) = %g", Ai [p], j, Ax [p]) ;
+            if (Az != NULL) printf (" %g ", Az [p]) ;
+            printf ("\n") ;
+        }
+    }
+    printf ("\n") ;
+}
+
+
+mxArray *ssmult_transpose       /* returns C = A' or A.' */
+(
+    const mxArray *A,
+    int conj                    /* compute A' if true, compute A.' if false */
+)
+{
+    Int *Cp, *Ci, *Ap, *Ai, *W ;
+    double *Cx, *Cz, *Ax, *Az ;
+    mxArray *C ;
+    Int p, pend, q, i, j, n, m, anz, cnz ;
+    int C_is_complex ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get inputs */
+    /* ---------------------------------------------------------------------- */
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    Ap = (Int *) mxGetJc (A) ;
+    Ai = (Int *) mxGetIr (A) ;
+    Ax = mxGetPr (A) ;
+    Az = mxGetPi (A) ;
+    anz = Ap [n] ;
+    C_is_complex = mxIsComplex (A) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate C but do not initialize it */
+    /* ---------------------------------------------------------------------- */
+
+    cnz = MAX (anz, 1) ;
+    C = mxCreateSparse (0, 0, 0, C_is_complex ? mxCOMPLEX : mxREAL) ;
+    mxFree (mxGetJc (C)) ;
+    mxFree (mxGetIr (C)) ;
+    mxFree (mxGetPr (C)) ;
+    mxFree (mxGetPi (C)) ;
+    Cp = mxMalloc ((m+1) * sizeof (Int)) ;
+    Ci = mxMalloc (cnz * sizeof (Int)) ;
+    Cx = mxMalloc (cnz * sizeof (double)) ;
+    Cz = C_is_complex ? mxMalloc (cnz * sizeof (double)) : NULL ;
+    mxSetJc (C, (mwIndex *) Cp) ;
+    mxSetIr (C, (mwIndex *) Ci) ;
+    mxSetPr (C, Cx) ;
+    mxSetPi (C, Cz) ;
+    mxSetNzmax (C, cnz) ;
+    mxSetM (C, n) ;
+    mxSetN (C, m) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate workspace */
+    /* ---------------------------------------------------------------------- */
+
+    W = mxCalloc (m, sizeof (Int)) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* compute row counts */
+    /* ---------------------------------------------------------------------- */
+
+    for (p = 0 ; p < anz ; p++)
+    {
+        W [Ai [p]]++ ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* compute column pointers of C and copy back into W */
+    /* ---------------------------------------------------------------------- */
+
+    for (p = 0, i = 0 ; i < m ; i++)
+    {
+        Cp [i] = p ;
+        p += W [i] ;
+        W [i] = Cp [i] ;
+    }
+    Cp [m] = p ;
+
+    /* ---------------------------------------------------------------------- */
+    /* C = A' */
+    /* ---------------------------------------------------------------------- */
+
+    p = 0 ;
+    if (!C_is_complex)
+    {
+        /* C = A' (real case) */
+        for (j = 0 ; j < n ; j++)
+        {
+            pend = Ap [j+1] ;
+            for ( ; p < pend ; p++)
+            {
+                q = W [Ai [p]]++ ;      /* find position for C(j,i) */
+                Ci [q] = j ;            /* place A(i,j) as entry C(j,i) */
+                Cx [q] = Ax [p] ;
+            }
+        }
+    }
+    else if (conj)
+    {
+        /* C = A' (complex conjugate) */
+        for (j = 0 ; j < n ; j++)
+        {
+            pend = Ap [j+1] ;
+            for ( ; p < pend ; p++)
+            {
+                q = W [Ai [p]]++ ;      /* find position for C(j,i) */
+                Ci [q] = j ;            /* place A(i,j) as entry C(j,i) */
+                Cx [q] = Ax [p] ;
+                Cz [q] = -Az [p] ;
+            }
+        }
+    }
+    else
+    {
+        /* C = A.' (complex case) */
+        for (j = 0 ; j < n ; j++)
+        {
+            pend = Ap [j+1] ;
+            for ( ; p < pend ; p++)
+            {
+                q = W [Ai [p]]++ ;      /* find position for C(j,i) */
+                Ci [q] = j ;            /* place A(i,j) as entry C(j,i) */
+                Cx [q] = Ax [p] ;
+                Cz [q] = Az [p] ;
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace and return result */
+    /* ---------------------------------------------------------------------- */
+
+    mxFree (W) ;
+    return (C) ;
+}
diff --git a/MATLAB_Tools/SSMULT/ssmultsym.c b/MATLAB_Tools/SSMULT/ssmultsym.c
new file mode 100644
index 0000000..8b1b7c5
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmultsym.c
@@ -0,0 +1,150 @@
+/* ========================================================================== */
+/* === ssmultsym ============================================================ */
+/* ========================================================================== */
+
+/* s = ssmultsym (A,B) computes nnz(A*B), and the flops and memory required to
+ * compute it, where A and B are both sparse.  Either A or B, or both, can be
+ * complex.  Memory usage includes C itself, and workspace.  If C is m-by-n,
+ * ssmultsym requires only 4*m bytes for 32-bit MATLAB, 8*m for 64-bit MATLAB.
+ *
+ * Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+ */
+
+#include "ssmult.h"
+
+/* -------------------------------------------------------------------------- */
+/* ssmultsym mexFunction */
+/* -------------------------------------------------------------------------- */
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    double cnz, flops, mem, e, multadds ;
+    Int *Ap, *Ai, *Bp, *Bi, *Flag ;
+    Int Anrow, Ancol, Bnrow, Bncol, i, j, k, pb, pa, pbend, paend, mark,
+        A_is_complex, B_is_complex, C_is_complex, pbstart, cjnz ;
+    static const char *snames [ ] =
+    {
+        "nz",           /* # of nonzeros in C=A*B */
+        "flops",        /* flop count required to compute C=A*B */
+        "memory"        /* memory requirement in bytes */
+    } ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get inputs and workspace */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin != 2 || nargout > 1)
+    {
+        mexErrMsgTxt ("Usage: s = ssmultsym (A,B)") ;
+    }
+
+    Ap = (Int *) mxGetJc (pargin [0]) ;
+    Ai = (Int *) mxGetIr (pargin [0]) ;
+    Anrow = mxGetM (pargin [0]) ;
+    Ancol = mxGetN (pargin [0]) ;
+    A_is_complex = mxIsComplex (pargin [0]) ;
+
+    Bp = (Int *) mxGetJc (pargin [1]) ;
+    Bi = (Int *) mxGetIr (pargin [1]) ;
+    Bnrow = mxGetM (pargin [1]) ;
+    Bncol = mxGetN (pargin [1]) ;
+    B_is_complex = mxIsComplex (pargin [1]) ;
+
+    if (Ancol != Bnrow || !mxIsSparse (pargin [0]) || !mxIsSparse (pargin [1]))
+    {
+        mexErrMsgTxt ("wrong dimensions, or A and B not sparse") ;
+    }
+
+    Flag = mxCalloc (Anrow, sizeof (Int)) ;     /* workspace */
+
+    /* ---------------------------------------------------------------------- */
+    /* compute # of nonzeros in result, flop count, and memory */
+    /* ---------------------------------------------------------------------- */
+
+    pb = 0 ;
+    cnz = 0 ;
+    multadds = 0 ;
+    for (j = 0 ; j < Bncol ; j++)       /* compute C(:,j) */
+    {
+        mark = j+1 ;
+        pbstart = Bp [j] ;
+        pbend = Bp [j+1] ;
+        cjnz = 0 ;
+        for ( ; pb < pbend ; pb++)
+        {
+            k = Bi [pb] ;               /* nonzero entry B(k,j) */
+            pa = Ap [k] ;
+            paend = Ap [k+1] ;
+            multadds += (paend - pa) ;  /* one mult-add per entry in A(:,k) */
+            if (cjnz == Anrow)
+            {
+                /* C(:,j) is already completely dense; no need to scan A.
+                 * Continue scanning B(:,j) to compute flop count. */
+                continue ;
+            }
+            for ( ; pa < paend ; pa++)
+            {
+                i = Ai [pa] ;           /* nonzero entry A(i,k) */
+                if (Flag [i] != mark)
+                {
+                    /* C(i,j) is a new nonzero */
+                    Flag [i] = mark ;   /* mark i as appearing in C(:,j) */
+                    cjnz++ ;
+                }
+            }
+        }
+        cnz += cjnz ;
+    }
+
+    C_is_complex = A_is_complex || B_is_complex ;
+    e = (C_is_complex ? 2 : 1) ;
+
+    mem =
+        Anrow * sizeof (Int)            /* Flag */
+        + e * Anrow * sizeof (double)   /* W */
+        + (Bncol+1) * sizeof (Int)      /* Cp */
+        + cnz * sizeof (Int)            /* Ci */
+        + e * cnz * sizeof (double) ;   /* Cx and Cx */
+
+    if (A_is_complex)
+    {
+        if (B_is_complex)
+        {
+            /* all of C, A, and B are complex */
+            flops = 8 * multadds - 2 * cnz ;
+        }
+        else
+        {
+            /* C and A are complex, B is real */
+            flops = 4 * multadds - 2 * cnz ;
+        }
+    }
+    else
+    {
+        if (B_is_complex)
+        {
+            /* C and B are complex, A is real */
+            flops = 4 * multadds - 2 * cnz ;
+        }
+        else
+        {
+            /* all of C, A, and B are real */
+            flops = 2 * multadds - cnz ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return result */
+    /* ---------------------------------------------------------------------- */
+
+    pargout [0] = mxCreateStructMatrix (1, 1, 3, snames) ;
+    mxSetFieldByNumber (pargout [0], 0, 0, mxCreateDoubleScalar (cnz)) ;
+    mxSetFieldByNumber (pargout [0], 0, 1, mxCreateDoubleScalar (flops)) ;
+    mxSetFieldByNumber (pargout [0], 0, 2, mxCreateDoubleScalar (mem)) ;
+}
diff --git a/MATLAB_Tools/SSMULT/ssmultsym.m b/MATLAB_Tools/SSMULT/ssmultsym.m
new file mode 100644
index 0000000..7ce2b40
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/ssmultsym.m
@@ -0,0 +1,41 @@
+function s = ssmultsym (A,B)                                                %#ok
+%SSMULTSYM computes nnz(C), memory, and flops to compute C=A*B; A and B sparse.
+% s = ssmultsym (A,B) returns a struct s with the following fields:
+%
+%   s.nz            nnz (A*B), assuming no numerical cancelation
+%   s.flops         flops required to compute C=A*B
+%   s.memory        memory required to compute C=A*B, including C itself.
+%
+% Either A or B, or both, can be complex.  Only matrices of class "double" are
+% supported.  If i is the size of an integer (4 bytes on 32-bit MATLAB, 8 bytes
+% on 64-bit MATLAB) and x is the size of an entry (8 bytes if real, 16 if
+% complex), and [m n]=size(C), then the memory usage of SSMULT is
+% (i+x)*nnz(C) + i*(n+1) for C itself, and (i+x)*m for temporary workspace.
+% SSMULTSYM itself does not compute C, and uses only i*m workspace.
+%
+% Example:
+%   load west0479
+%   A = west0479 ;
+%   B = sprand (west0479) ;
+%   C = A*B ;
+%   D = ssmult (A,B) ;
+%   C-D
+%   ssmultsym (A,B)
+%   nnz (C)
+%   whos ('C')
+%   [m n] = size (C)
+%   mem = 12*nnz(C) + 4*(n+1) + (12*m)          % assuming real, 32-bit MATLAB
+%
+% This function can also compute the statistics for any of the 64 combinations
+% of C = op (op(A) * op(B)) where op(A) is A, A', A.', or conj(A).  The general
+% form is
+%
+%   C = ssmultsym (A,B, at,ac, bt,bc, ct,cc)
+%
+% See ssmult for a description of the at,ac, bt,bc, and ct,cc arguments.
+%
+% See also ssmult, mtimes.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+error ('ssmultsym mexFunction not found') ;
diff --git a/MATLAB_Tools/SSMULT/sstest.m b/MATLAB_Tools/SSMULT/sstest.m
new file mode 100644
index 0000000..ddd58e2
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/sstest.m
@@ -0,0 +1,174 @@
+function sstest
+%SSTEST exhaustive performance test for SSMULT.
+%
+% Example
+%   sstest
+%
+% See also ssmult, ssmultsym, ssmult_install, sstest2, mtimes.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+N = [500:50:1000 1100:100:3000 3200:200:5000 ] ;
+
+% warmup for more accurate timings
+A = sparse (1) ;
+B = sparse (1) ;
+C = A*B ;
+D = ssmult(A,B) ;
+err = norm (C-D,1) ;
+if (err > 0)
+    error ('test failure') ;
+end
+clear C D
+
+titles = { ...
+    'C=A*B blue, C=B*A red, both real', ...
+    'A real, B complex', 'A complex, B real', 'both complex' } ;
+
+xlabels = { '(A random, B diagonal)', '(A random, B permutation)', ...
+    '(A random, B tridiagonal)' } ;
+
+fprintf ('\nIn the next plots, speedup is the time for MATLAB C=A*B divided\n');
+fprintf ('by the time for C=ssmult(A,B).  The X-axis is n, the dimension\n') ;
+fprintf ('of the square matrices A and B.  A is a sparse random matrix with\n');
+fprintf ('1%% nonzero values.  B is diagonal in the first row of plots,\n') ;
+fprintf ('a permutation in the 2nd row, and tridiagonal in the third.\n') ;
+fprintf ('C=A*B is in blue, C=B*A is in red.  A and B are both real in the\n') ;
+fprintf ('first column of plots, B is complex in the 2nd, A in the 3rd, and\n');
+fprintf ('both are complex in the 4th column of plots.  You will want to\n') ;
+fprintf ('maximize the figure; otherwise the text is too hard to read.\n') ; 
+fprintf ('\nBe aware that in MATLAB 7.6 and later, C=A*B in MATLAB uses\n') ;
+fprintf('SSMULT (but with some additional MathWorks-specific optimizations)\n');
+fprintf ('so you are comparing nearly identical codes.\n');
+% input ('Hit enter to continue: ', 's') ;
+
+tlim = 0.1 ;
+clf ;
+
+for fig = 1:3
+
+    fprintf ('Testing C=A*B and C=B*A %s\n', xlabels {fig}) ;
+
+    T = zeros (length(N),4,4) ;
+
+    for k = 1:length(N)
+
+        n = N (k) ;
+        try
+
+            A = sprand (n,n,0.01) ;
+            if (fig == 1)
+                % B diagonal
+                B = spdiags (rand (n,1), 0, n, n) ;
+            elseif (fig == 2)
+                % B permutation
+                B = spdiags (rand (n,1), 0, n, n) ;
+                B = B (:,randperm(n)) ;
+            else
+                % B tridiagonal
+                B = spdiags (rand (n,3), -1:1, n, n) ;
+            end
+
+            for kind = 1:4
+
+                if (kind == 2)
+                    % A complex, B real
+                    A = A + 1i*sprand (A) ;
+                elseif (kind == 3)
+                    % A real, B complex
+                    A = real (A) ;
+                    B = B + 1i*sprand (B) ;
+                elseif (kind == 4)
+                    % both complex
+                    A = A + 1i*sprand (A) ;
+                    B = B + 1i*sprand (B) ;
+                end
+
+                %---------------------------------------------------------------
+                % C = A*B
+                %---------------------------------------------------------------
+
+                t1 = 0 ;
+                trials = 0 ;
+                tic
+                while (t1 < tlim)
+                    C = A*B ;
+                    trials = trials + 1 ;
+                    t1 = toc ;
+                end
+                t1 = t1 / trials ;
+
+                t2 = 0 ;
+                trials = 0 ;
+                tic
+                while (t2 < tlim)
+                    D = ssmult (A,B) ;
+                    trials = trials + 1 ;
+                    t2 = toc ;
+                end
+                t2 = t2 / trials ;
+
+                err = norm (C-D,1) ;
+                if (err > 0)
+                    error ('test failure') ;
+                end
+                clear C
+                clear D
+
+                %---------------------------------------------------------------
+                % C = B*A
+                %---------------------------------------------------------------
+
+                t3 = 0 ;
+                trials = 0 ;
+                tic
+                while (t3 < tlim)
+                    C = B*A ;
+                    trials = trials + 1 ;
+                    t3 = toc ;
+                end
+                t3 = t3 / trials ;
+
+                t4 = 0 ;
+                trials = 0 ;
+                tic
+                while (t4 < tlim)
+                    D = ssmult (B,A) ;
+                    trials = trials + 1 ;
+                    t4 = toc ;
+                end
+                t4 = t4 / trials ;
+
+                err = norm (C-D,1) ;
+                if (err > 0)
+                    error ('test failure') ;
+                end
+                clear C
+                clear D
+
+                %---------------------------------------------------------------
+
+                T (k,kind,1) = t1 ;
+                T (k,kind,2) = t2 ;
+                T (k,kind,3) = t3 ;
+                T (k,kind,4) = t4 ;
+                subplot (3,4,kind + 4*(fig-1)) ;
+                plot (N(1:k), T (1:k,kind,1) ./ T (1:k,kind,2), 'o', ...
+                      N(1:k), T (1:k,kind,3) ./ T (1:k,kind,4), 'rx', ...
+                      [N(1) n], [1 1], 'k') ;
+                xlabel (['n ' xlabels{fig}]) ;
+                ylabel ('speedup') ;
+                axis tight
+                title (titles {kind}) ;
+                drawnow
+
+            end
+
+        catch me
+            % probably because we ran out of memory ...
+            disp (me.message) ;
+            break ;
+        end
+    end
+end
+
diff --git a/MATLAB_Tools/SSMULT/sstest2.m b/MATLAB_Tools/SSMULT/sstest2.m
new file mode 100644
index 0000000..762d1e2
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/sstest2.m
@@ -0,0 +1,164 @@
+function sstest2
+%SSTEST2 exhaustive performance test for SSMULT.  Requires UFget.
+% UFget is available at http://www.suitesparse.com or in MATLAB Central.
+%
+% Example
+%   sstest2
+%
+% See also ssmult, ssmultsym, ssmult_install, sstest, UFget, mtimes.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+help sstest2
+
+try
+    index = UFget ;
+catch
+    fprintf ('\nsstest2 requires UFget.\n') ;
+    fprintf ('see http://www.suitesparse.com\n') ;
+    return ;
+end
+[ignore, f] = sort (index.nnz) ;                                            %#ok
+
+nmat = length (f) ;
+TM = zeros (nmat, 4) ;
+T1 = zeros (nmat, 4) ;
+tlim = 0.01 ;
+
+tmin = 1 ;
+tmax = 0 ;
+
+check = 1 ;
+rand ('state', 0)
+
+for k = 1:nmat
+
+    Prob = UFget (f (k), index) ;
+    A = Prob.A ;
+    clear Prob
+
+    for kind = 1:4
+
+        try
+            if (~isreal (A))
+                A = spones (A) ;
+            end
+            B = A' ;
+
+            if (kind == 2)
+                A = sprand (A) + 1i*sprand(A) ;
+                B = sprand (B) ;
+            elseif (kind == 3)
+                A = sprand (A) ;
+                B = sprand (B) + 1i*sprand(B) ;
+            elseif (kind == 4)
+                A = sprand (A) + 1i*sprand(A) ;
+                B = sprand (B) + 1i*sprand(B) ;
+            end
+
+            C = A*B     ; % warmup
+
+            if (check)
+
+                D = ssmult (A,B) ;
+                err = norm (C-D,1) ;
+                if (err > 0)
+                    fprintf ('err: %g\n', err) ;
+                    error ('!')
+                end
+                clear D
+
+            else
+
+                % warmup, for accurate timings
+                C = ssmult (A,B) ;                                          %#ok
+                clear C
+
+            end
+
+            tr = 0 ;
+            tm = 0 ;
+            tic
+            while (tm < tlim)
+                C = A*B ;                                                   %#ok
+                clear C
+                tr = tr + 1 ;
+                tm = toc ;
+            end
+            tm = tm / tr ;
+
+            tr = 0 ;
+            t1 = 0 ;
+            tic
+            while (t1 < tlim)
+                C = ssmult (A,B) ;                                          %#ok
+                clear C
+                tr = tr + 1 ;
+                t1 = toc ;
+            end
+            t1 = t1 / tr ;
+
+            fprintf ('%4d: %4d ', k, f(k)) ;
+            fprintf (...
+            'MATLAB %12.6f SSMULT %12.6f  speedup %12.3f', ....
+                tm, t1, tm / t1) ;
+            
+            if (tm < t1)
+                fprintf (' ****') ;
+            end
+            fprintf ('\n') ;
+
+            TM (k,kind) = tm ;
+            T1 (k,kind) = t1 ;
+
+            tmin = min (tmin, tm) ;
+            tmax = max (tmax, tm) ;
+
+        catch me
+            disp (me.message)
+            TM (k,kind) = 1 ;
+            T1 (k,kind) = 1 ;
+        end
+
+    end
+
+    for kind = 1:4
+
+        subplot (2,4,kind) ;
+        r = TM (1:k,kind) ./ T1 (1:k,kind) ;
+        rmin = min (r) ;
+        rmax = max (r) ;
+        loglog (TM (1:k,kind), r, 'o', ...
+            [tmin tmax], [1 1], 'r-', ...
+            [tmin tmax], [1.1 1.1], 'r-', ...
+            [tmin tmax], [1/1.1 1/1.1], 'r-', ...
+            [tmin tmax], [2 2], 'g-', ...
+            [tmin tmax], [1.5 1.5], 'g-', ...
+            [tmin tmax], [1/1.5 1/1.5], 'g-', ...
+            [tmin tmax], [.5 .5], 'g-' );
+        if (k > 2)
+            axis ([tmin tmax rmin rmax]) ;
+        end
+        xlabel ('MATLAB time') ; 
+        ylabel ('MATLAB/SM time') ; 
+        if (kind == 1)
+            title ('real*real') ;
+        elseif (kind == 2)
+            title ('complex*real') ;
+        elseif (kind == 3)
+            title ('real*complex') ;
+        elseif (kind == 4)
+            title ('complex*complex') ;
+        end
+
+    end
+
+    drawnow
+
+    clear A B C
+    save sstest2_results.mat TM T1 f
+    diary off
+    diary on
+
+end
+
diff --git a/MATLAB_Tools/SSMULT/sstest3.m b/MATLAB_Tools/SSMULT/sstest3.m
new file mode 100644
index 0000000..fc57144
--- /dev/null
+++ b/MATLAB_Tools/SSMULT/sstest3.m
@@ -0,0 +1,627 @@
+function sstest3                                                            %#ok
+%SSTEST3: an exhaustive test of ssmult
+%
+% For a list of all 64 functions computed by ssmult, look at the source code
+% of this test.
+%
+% See also ssmult, mtimes.
+
+% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
+
+fprintf ('\nsstest3: Please wait ') ;
+
+for m = 0:30
+    fprintf ('.') ;
+    for n = 0:30
+        for k = 0:30
+
+            for Acomplex = 0:1
+                for Bcomplex = 0:1
+
+                    A = sprand (m, n, 0.3) ;
+                    if (Acomplex)
+                        A = 1i*sprand (m, n, 0.3) ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A*B and variants
+                    %-----------------------------------------------------------
+
+                    B = sprand (n, k, 0.3) ;
+                    if (Bcomplex)
+                        B = 1i*sprand (n, k, 0.3) ;
+                    end
+
+                    y = A*B ;
+                    z = ssmult (A, B, 0,0, 0,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A*B) ;
+                    z = ssmult (A, B, 0,0, 0,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*B).' ;
+                    z = ssmult (A, B, 0,0, 0,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*B)' ;
+                    z = ssmult (A, B, 0,0, 0,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A*conj(B) and variants
+                    %-----------------------------------------------------------
+
+                    y = A*conj(B) ;
+                    z = ssmult (A, B, 0,0, 0,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A*conj(B)) ;
+                    z = ssmult (A, B, 0,0, 0,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*conj(B)).' ;
+                    z = ssmult (A, B, 0,0, 0,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*conj(B))' ;
+                    z = ssmult (A, B, 0,0, 0,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = conj(A)*B and variants
+                    %-----------------------------------------------------------
+
+                    y = conj(A)*B ;
+                    z = ssmult (A, B, 0,1, 0,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(conj(A)*B) ;
+                    z = ssmult (A, B, 0,1, 0,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*B).' ;
+                    z = ssmult (A, B, 0,1, 0,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*B)' ;
+                    z = ssmult (A, B, 0,1, 0,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = conj(A)*conj(B) and variants
+                    %-----------------------------------------------------------
+
+                    y = conj(A)*conj(B) ;
+                    z = ssmult (A, B, 0,1, 0,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(conj(A)*conj(B)) ;
+                    z = ssmult (A, B, 0,1, 0,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*conj(B)).' ;
+                    z = ssmult (A, B, 0,1, 0,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*conj(B))' ;
+                    z = ssmult (A, B, 0,1, 0,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A.'*B and variants
+                    %-----------------------------------------------------------
+
+                    B = sprand (m, k, 0.3) ;
+                    if (Bcomplex)
+                        B = 1i*sprand (m, k, 0.3) ;
+                    end
+
+                    y = A.'*B ;
+                    z = ssmult (A, B, 1,0, 0,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A.'*B) ;
+                    z = ssmult (A, B, 1,0, 0,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*B).' ;
+                    z = ssmult (A, B, 1,0, 0,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*B)' ;
+                    z = ssmult (A, B, 1,0, 0,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A.'*conj(B) and variants
+                    %-----------------------------------------------------------
+
+                    y = (A.'*conj(B))' ;
+                    z = ssmult (A, B, 1,0, 0,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*conj(B)).' ;
+                    z = ssmult (A, B, 1,0, 0,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*conj(B)) ;
+                    z = ssmult (A, B, 1,0, 0,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A.'*conj(B)) ;
+                    z = ssmult (A, B, 1,0, 0,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A'*B and variants
+                    %-----------------------------------------------------------
+
+                    y = A'*B ;
+                    z = ssmult (A, B, 1,1, 0,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A'*B) ;
+                    z = ssmult (A, B, 1,1, 0,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*B).' ;
+                    z = ssmult (A, B, 1,1, 0,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*B)' ;
+                    z = ssmult (A, B, 1,1, 0,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A'*conj(B) and variants
+                    %-----------------------------------------------------------
+
+                    y = A'*conj(B) ;
+                    z = ssmult (A, B, 1,1, 0,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A'*conj(B)) ;
+                    z = ssmult (A, B, 1,1, 0,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*conj(B))' ;
+                    z = ssmult (A, B, 1,1, 0,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*conj(B)).' ;
+                    z = ssmult (A, B, 1,1, 0,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A*B.' and variants
+                    %-----------------------------------------------------------
+
+                    B = sprand (k,n, 0.3) ;
+                    if (Bcomplex)
+                        B = 1i*sprand (k, n, 0.3) ;
+                    end
+
+                    y = A*B.' ;
+                    z = ssmult (A, B, 0,0, 1,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A*B.') ;
+                    z = ssmult (A, B, 0,0, 1,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*B.').' ;
+                    z = ssmult (A, B, 0,0, 1,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*B.')' ;
+                    z = ssmult (A, B, 0,0, 1,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A*B' and variants
+                    %-----------------------------------------------------------
+
+                    y = A*B' ;
+                    z = ssmult (A, B, 0,0, 1,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj (A*B') ;
+                    z = ssmult (A, B, 0,0, 1,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*B').' ;
+                    z = ssmult (A, B, 0,0, 1,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A*B')' ;
+                    z = ssmult (A, B, 0,0, 1,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = conj(A)*B.' and variants
+                    %-----------------------------------------------------------
+
+                    y = conj(A)*B.' ;
+                    z = ssmult (A, B, 0,1, 1,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(conj(A)*B.') ;
+                    z = ssmult (A, B, 0,1, 1,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*B.').' ;
+                    z = ssmult (A, B, 0,1, 1,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*B.')' ;
+                    z = ssmult (A, B, 0,1, 1,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = conj(A)*B' and variants
+                    %-----------------------------------------------------------
+
+                    y = conj(A)*B' ;
+                    z = ssmult (A, B, 0,1, 1,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(conj(A)*B') ;
+                    z = ssmult (A, B, 0,1, 1,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*B').' ;
+                    z = ssmult (A, B, 0,1, 1,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (conj(A)*B')' ;
+                    z = ssmult (A, B, 0,1, 1,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A.'*B.' and variants
+                    %-----------------------------------------------------------
+
+                    B = sprand (k,m, 0.3)  ;
+                    if (Bcomplex)
+                        B = 1i*sprand (k, m, 0.3) ;
+                    end
+
+                    y = A.'*B.' ;
+                    z = ssmult (A, B, 1,0, 1,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A.'*B.') ;
+                    z = ssmult (A, B, 1,0, 1,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*B.').' ;
+                    z = ssmult (A, B, 1,0, 1,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*B.')' ;
+                    z = ssmult (A, B, 1,0, 1,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A'*B.' and variants
+                    %-----------------------------------------------------------
+
+                    y = A'*B.' ;
+                    z = ssmult (A, B, 1,1, 1,0, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A'*B.') ;
+                    z = ssmult (A, B, 1,1, 1,0, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*B.').' ;
+                    z = ssmult (A, B, 1,1, 1,0, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*B.')' ;
+                    z = ssmult (A, B, 1,1, 1,0, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A.'*B' and variants
+                    %-----------------------------------------------------------
+
+                    y = A.'*B' ;
+                    z = ssmult (A, B, 1,0, 1,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj (A.'*B') ;
+                    z = ssmult (A, B, 1,0, 1,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*B').' ;
+                    z = ssmult (A, B, 1,0, 1,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A.'*B')' ;
+                    z = ssmult (A, B, 1,0, 1,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    %-----------------------------------------------------------
+                    % y = A'*B' and variants
+                    %-----------------------------------------------------------
+
+                    y = A'*B' ;
+                    z = ssmult (A, B, 1,1, 1,1, 0,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = conj(A'*B') ;
+                    z = ssmult (A, B, 1,1, 1,1, 0,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*B').' ;
+                    z = ssmult (A, B, 1,1, 1,1, 1,0) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                    y = (A'*B')' ;
+                    z = ssmult (A, B, 1,1, 1,1, 1,1) ;
+                    err = norm (y-z,1) ;
+                    if (err > 0)
+                        err
+                        error ('!') ;
+                    end
+
+                end
+            end
+        end
+    end
+end
+fprintf ('\nsstest3: all tests passed') ;
diff --git a/MATLAB_Tools/SSMULT/tryit.mat b/MATLAB_Tools/SSMULT/tryit.mat
new file mode 100644
index 0000000..cceb7ad
Binary files /dev/null and b/MATLAB_Tools/SSMULT/tryit.mat differ
diff --git a/UFcollection/Contents.m b/MATLAB_Tools/UFcollection/Contents.m
similarity index 100%
rename from UFcollection/Contents.m
rename to MATLAB_Tools/UFcollection/Contents.m
diff --git a/MATLAB_Tools/UFcollection/Doc/ChangeLog b/MATLAB_Tools/UFcollection/Doc/ChangeLog
new file mode 100644
index 0000000..b24cdb3
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/Doc/ChangeLog
@@ -0,0 +1,52 @@
+Jun 20, 2012: verison 1.6.2
+
+    * minor update for Windows (removed filesep)
+
+May 15, 2012: version 1.6.1
+
+    * added test to exploit property of symmetric binary matrices (McKay et al) 
+
+Dec 7, 2011: version 1.6.0
+
+    * added SVD results to UFpage.m.  Removed dependency on UFconfig.h
+
+Nov 2, 2011: version 1.5.1
+
+    * changed the printf in UFfull_write that writes nrow and ncol
+
+May 10, 2011:  version 1.5.0
+
+    * simplified the UFindex
+
+Jan 25, 2011:  version 1.4.0
+
+    * added new graphs to UFpage.m (bipartite, A+A')
+    * METIS no longer used.  It causes too many segfaults...
+
+Nov 30, 2009: version 1.3.0
+
+    * added code to compute UFstats.csv for UFgui
+
+Mar 24, 2009, version 1.2.0
+
+    * added links to Yifan Hu's graph drawings
+
+Nov 1, 2007, version 1.1.1
+
+    * added isND field to the index
+
+    * minor change to web page creation
+
+May 31, 2007, version 1.1.0
+
+    * port to 64-bit MATLAB
+
+Dec 12, 2006, version 1.0.1
+
+    * very minor MATLAB cleanup
+
+Dec 2, 2006, version 1.0.
+
+    * UFcollection Version 1.0 released.  Used for substantial changes to the
+	UF Sparse Matrix Collection.  See the Change Log for that collection.
+
diff --git a/MATLAB_Tools/UFcollection/Doc/License.txt b/MATLAB_Tools/UFcollection/Doc/License.txt
new file mode 100644
index 0000000..20385c6
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/Doc/License.txt
@@ -0,0 +1,22 @@
+UFcollection toolbox.  Version 1.0.  Copyright (C) 2006,
+Timothy A. Davis
+UFcollection is also available under other licenses; contact authors for
+details.
+http://www.suitesparse.com.
+
+--------------------------------------------------------------------------------
+
+UFcollection is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+UFcollection is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this Module; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
diff --git a/UFcollection/Doc/gpl.txt b/MATLAB_Tools/UFcollection/Doc/gpl.txt
similarity index 100%
rename from UFcollection/Doc/gpl.txt
rename to MATLAB_Tools/UFcollection/Doc/gpl.txt
diff --git a/MATLAB_Tools/UFcollection/README.txt b/MATLAB_Tools/UFcollection/README.txt
new file mode 100644
index 0000000..5ba29db
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/README.txt
@@ -0,0 +1,230 @@
+UFcollection, Copyright 2007-2012, Timothy A. Davis, http://www.suitesparse.com
+
+UFcollection is a MATLAB toolbox for managing the UF Sparse Matrix Collection.
+If you are a MATLAB user of the collection, you would not normally need to use
+this toolbox.  It contains code for creating the index for the collection (the
+UF_Index.mat file in the UFget package), for creating the web pages for the
+collection, and creating the Matrix Market and Rutherford/Boeing versions of
+the matrices.  This code is posted here primarily so that users of the
+collection can see how the matrices and their statistics were generated.
+
+This software (UFread, specifically) also allows the user to keep a single copy
+of the collection for use both inside MATLAB and outside MATLAB.  The MM/ and
+RB/ versions of the collection can be read into MATLAB via UFread, even without
+explicitly extracting the tar files.  They can also be read by non-MATLAB
+programs.  Since the whole collection is about 8GB in size (compressed, as of
+Dec 2006), this can save some space.  UFread is much slower than UFget,
+however.
+
+
+--------------------------------------------------------------------------------
+MATLAB help for the UFcollection toolbox:
+--------------------------------------------------------------------------------
+
+  UFcollection: software for managing the UF Sparse Matrix Collection
+
+  To create the index:
+
+    UFindex    - create the index for the UF Sparse Matrix Collection
+    UFstats    - compute matrix statistics for the UF Sparse Matrix Collection
+
+  To create the web pages:
+
+    UFallpages - create all web pages for the UF Sparse Matrix Collection
+    UFgplot    - draw a plot of the graph of a sparse matrix
+    UFint      - print an integer to a string, adding commas every 3 digits
+    UFlist     - create a web page index for the UF Sparse Matrix Collection
+    UFlists    - create the web pages for each matrix list (group, name, etc.)
+    UFlocation - URL and top-level directory of the UF Sparse Matrix Collection
+    UFpage     - create web page for a matrix in UF Sparse Matrix Collection
+    UFpages    - create web page for each matrix in UF Sparse Matrix Collection
+    dsxy2figxy - Transform point or position from axis to figure coords
+
+  To create the Matrix Market and Rutherford/Boeing versions of the collection:
+
+    UFexport     - export to Matrix Market and Rutherford/Boeing formats
+    UFread       - read a Problem in Matrix Market or Rutherford/Boeing format
+    UFwrite      - write a Problem in Matrix Market or Rutherford/Boeing format
+    UFfull_read  - read a full matrix using a subset of Matrix Market format
+    UFfull_write - write a full matrix using a subset of Matrix Market format
+
+  Example:
+    UFindex       % create index (UF_Index.mat) for use by UFget
+    UFallpages    % create all web pages for the UF Sparse Matrix Collection
+
+  Requires UFget, CSparse, CHOLMOD, AMD, COLAMD, RBio, and METIS.
+
+
+--------------------------------------------------------------------------------
+Files:
+--------------------------------------------------------------------------------
+
+    Contents.m		    MATLAB help
+    dsxy2figxy.m	    convert XY points for plot annotations
+    Makefile		    Unix/Linux installation, or use UFcollection_install
+    README.txt		    this file
+    UFallpages.m	    create all web pages
+    UFexport.m		    export to MM and RB
+    UFcollection_install.m  installation
+    UFfull_read.m	    read a full matrix
+    UFfull_write.c	    write a full matrix
+    UFfull_write.m	    MATLAB help for UFfull_write
+    UFgplot.m		    plot a graph
+    UFindex.m		    create UF_Index.mat
+    UFint.m		    print an integer
+    UFlist.m		    create a web page index
+    UFlists.m		    create all web page indices
+    UFlocation.m	    URL and directory for the collection
+    UFpage.m		    create a web page for a matrix
+    UFpages.m		    create web pages for all matrices
+    UFread.m		    read a Problem
+    UFstats.m		    compute statistics about a matrix
+    UFwrite.m		    write a Problem
+
+./Doc:
+    gpl.txt		    GNU GPL license
+    License.txt
+
+--------------------------------------------------------------------------------
+To add a matrix to the collection:
+--------------------------------------------------------------------------------
+
+These instructions are for the maintainer of the collection (that is, just
+notes to myself), but they also indicate how the above software is used.
+
+Requires most of SuiteSparse (UFget, CHOLMOD, AMD, COLAMD, CSparse, RBio, and
+UFcollection), and METIS 4.0.1.
+
+1) Get the matrix into MATLAB (method depending on how the matrix was
+    submitted).  Use load and sparse2, RBread, mread, or specialized code
+    written just for that matrix.
+
+2) Add the matrix to the end of UF_Listing.txt (a line in the form Group/Name).
+
+3) Create a new directory /cise/research/sparse/public_html/mat/Group,
+    where Group is the new matrix group.  Add a README.txt file to this
+    directory, the first line of which is a one-line summary that will appear
+    in the top-level web page for the collection.  Skip this step if adding a
+    matrix to an existing group.
+
+4) Create the Problem struct; type "help UFwrite" for details.  Required fields:
+
+    Problem.name    full name of the matrix (Group/Name)
+    Problem.title   short descriptive title
+    Problem.A	    the sparse matrix
+    Problem.id	    integer corresponding to the line number in UF_Listing.txt
+    Problem.date    date the matrix was created, or added to the collection
+    Problem.author  matrix author
+    Problem.ed	    matrix editor/collector
+    Problem.kind    a string.  For a description, see below.
+
+    optional fields:
+
+    Problem.Zeros   binary pattern of explicit zero entries
+    Problem.b	    right-hand-side
+    Problem.x	    solution
+    Problem.notes   a char array
+    Problem.aux	    auxiliary matrices (contents are problem dependent)
+
+    Save to a MATLAB mat-file.  In the mat directory, do:
+
+    save (Problem.name, 'Problem', '-v7') ;
+
+    or for very large problems (ids 1903 and 1905, for example):
+
+    save (Problem.name, 'Problem', '-v7.3') ;
+
+5) Compute matrix statistics and extend the UF_Index:
+
+    UFindex (ids)
+
+    where ids is a list of the new matrix id's.  Updated UF_Index.mat and
+    UFstats.csv files are placed in the current working directory.
+    Copy the new UF_Index.mat file to /cise/research/sparse/public_html/mat.
+    Copy the new UFstats.csv file to /cise/research/sparse/public_html/matrices.
+
+6) Export the matrix in Matrix Market and Rutherford/Boeing formats.
+
+    UFexport (ids)
+
+    or
+
+    UFexport (ids, 'check')
+
+    then tar and compress the resulting MM/Group/Name and RB/Group/Name
+    directories, one per Problem (if UFexport has not already done so).
+
+7) Update the web pages:
+
+    UFlists
+    UFpages (1, ids)
+
+8) Make the collection world-readable.  In /cise/research/sparse/public_html do:
+
+    chmod -R og+rX mat matrices MM RB
+
+
+--------------------------------------------------------------------------------
+Problem.kind
+--------------------------------------------------------------------------------
+
+Problems with 2D/3D geometry
+
+    2D/3D problem
+    acoustics problem
+    computational fluid dynamics problem
+    computer graphics/vision problem
+    electromagnetics problem
+    materials problem
+    model reduction problem
+    robotics problem
+    semiconductor device problem
+    structural problem
+    thermal problem 
+
+Problems that normally do not have 2D/3D geometry
+
+    chemical process simulation problem
+    circuit simulation problem
+    counter-example problem: Some of these may have 2D/3D geometry.
+    economic problem
+    frequency-domain circuit simulation problem
+    least squares problem
+    linear programming problem
+    optimization problem
+    power network problem
+    statistical/mathematical problem
+    theoretical/quantum chemistry problem
+    combinatorial problem
+
+Graph problems
+
+    This problem includes the graph or multigraph keyword. It is a network or
+    graph. A graph may or may not have 2D/3D geometry (typically it does not).
+    Several secondary phrases can be included in Problem.kind:
+
+        directed or undirected: A graph is either directed, undirected, or
+        bipartite. (bipartite graphs are always undirected). If not bipartite,
+        the matrix will always be square. Unsymmetric permutations of the
+        matrix have no meaning. If directed, the edge (i,j) is not the same as
+        (j,i), and the matrix will normally be unsymmetric. If undirected, the
+        edges (i,j) and (j,i) are the same, and the matrix is always symmetric.
+
+        weighted: If the graph has edge weights, this word will appear. The
+        edge weight of edge (i,j) is the value of A(i,j). This phrase is used
+        for a graph only, never for a multigraph. If the graph is not weighted,
+        the matrix is binary.
+
+        bipartite: If the rows and columns of the matrix reflect different sets
+        of nodes. The matrix A is normally rectangular, but can be square. Any
+        permutation (unsymmetric or symmetric) of the matrix is meaningful.
+
+        random: This Problem has been randomly generated. It is included in the
+        UF Sparse Matrix Collection only because it has been used as a standard
+        benchmark. Randomly generated problems are otherwise excluded from the
+        collection.  multigraph or graph: If the matrix represents a
+        multigraph, then A(i,j) reflects the number of edges (i,j). The edges
+        themselves are always unweighted. If the matrix represents a graph,
+        then A(i,j) is either 0 or 1 for an unweighted graph, or the weight of
+        edge (i,j) otherwise. 
+
diff --git a/UFcollection/UFallpages.m b/MATLAB_Tools/UFcollection/UFallpages.m
similarity index 100%
rename from UFcollection/UFallpages.m
rename to MATLAB_Tools/UFcollection/UFallpages.m
diff --git a/MATLAB_Tools/UFcollection/UFcollection_install.m b/MATLAB_Tools/UFcollection/UFcollection_install.m
new file mode 100644
index 0000000..e4b3dd0
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFcollection_install.m
@@ -0,0 +1,29 @@
+function UFcollection_install (nlargefile)
+%UFCOLLECTION_INSTALL install the UFcollection toolbox
+%
+% Example:
+%   UFcollection_install
+%
+% See also UFget.
+
+% Copyright 2006-2007, Timothy A. Davis
+
+if (nargin < 1)
+    % try with large-file I/O
+    nlargefile = 0 ;
+end
+
+if (nlargefile)
+    fprintf ('Trying to compile without large file support...\n') ;
+    mex -DNLARGEFILE UFfull_write.c
+else
+    try
+	mex UFfull_write.c
+    catch
+	fprintf ('Trying to compile without large file support...\n') ;
+	mex --DNLARGEFILE UFfull_write.c
+    end
+end
+
+addpath (pwd) ;
+fprintf ('UFcollection toolbox successfully compiled.\n') ;
diff --git a/MATLAB_Tools/UFcollection/UFexport.m b/MATLAB_Tools/UFcollection/UFexport.m
new file mode 100644
index 0000000..77d0c44
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFexport.m
@@ -0,0 +1,101 @@
+function UFexport (list, check, tmp)
+%UFEXPORT export to Matrix Market and Rutherford/Boeing formats
+%
+% Example:
+%   UFexport ;          % export the entire collection
+%   UFexport (list) ;   % just export matrices whose id's are given in the list
+%   UFexport (list, 'check') ;      % also read them back in, to check
+%
+% If the list is empty, all matrices in the collection are exported.
+% A 3rd argument tmp changes the tmp directory for UFread.
+%
+% See also UFget, UFwrite, RBio, mwrite.
+
+
+% Copyright 2006-2007, Timothy A. Davis
+
+%-------------------------------------------------------------------------------
+% get the input arguments
+%-------------------------------------------------------------------------------
+
+index = UFget ;
+nmat = length (index.nrows) ;
+
+if (nargin < 1 || isempty (list))
+    list = 1:nmat ;
+end
+
+check = ((nargin > 1) && strcmp (check, 'check')) ;
+
+if (nargin < 3)
+    tmp = '' ;
+end
+
+%-------------------------------------------------------------------------------
+% determine the top-level directory to use
+%-------------------------------------------------------------------------------
+
+[url topdir] = UFlocation ;
+fprintf ('\nExport to topdir: %s\ncheck: %d\ntmp: %s\n', topdir, check, tmp) ;
+for id = list
+    fprintf ('%4d : %s/%s\n', id, index.Group {id}, index.Name {id}) ;
+end
+
+%-------------------------------------------------------------------------------
+% export the matrices
+%-------------------------------------------------------------------------------
+
+format = { 'MM' , 'RB' } ;
+
+for id = list
+
+    % get the MATLAB version
+    clear Problem
+    Problem = UFget (id, index) ;
+    disp (Problem) ;
+
+    % create the MM and RB versions
+    for k = 1:2
+        fprintf ('Exporting to %s format ...\n', format {k}) ;
+        if (nnz (Problem.A) < 1e8)
+            UFwrite (Problem, [topdir format{k}], format{k}, 'tar') ;
+        else
+            % the MATLAB tar has problems with huge files
+            fprintf ('File to big for MATLAB tar\n') ;
+            UFwrite (Problem, [topdir format{k}], format{k}) ;
+        end
+    end
+
+    % check the new MM and RB versions
+    if (check)
+        for k = 1:2
+            fprintf ('Reading %s format ...\n', format {k}) ;
+	    try
+		if (isempty (tmp))
+		    P2 = UFread ([topdir format{k} '/' Problem.name]) ;
+		else
+		    P2 = UFread ([topdir format{k} '/' Problem.name], tmp) ;
+		end
+	    catch
+		% The Problem may be too large for two copies to be in the
+		% MATLAB workspace at the same time.  This is not an error,
+		% but it means that the Problem cannot be checked.
+		P2 = [ ] ;
+		fprintf ('Unable to read %s/%s\n', format {k}, Problem.name) ;
+		fprintf ('%s\n', lasterr) ;
+	    end
+            fprintf ('Comparing MATLAB and %s format ...\n', format {k}) ;
+	    if (~isempty (P2) && ~isequal (Problem, P2))
+                Problem
+                P2
+		warning ('%s version mismatch: %s\n', format {k}, Problem.name);
+                e = norm (Problem.A - P2.A, 1) ;
+                a = norm (Problem.A,1) ;
+                fprintf ('norm (A1-A2,1): %g  relative: %g\n', e, e/a) ;
+	    end
+	    clear P2
+	end
+        fprintf ('OK.\n') ;
+    end
+end
+
diff --git a/UFcollection/UFfull_read.m b/MATLAB_Tools/UFcollection/UFfull_read.m
similarity index 100%
rename from UFcollection/UFfull_read.m
rename to MATLAB_Tools/UFcollection/UFfull_read.m
diff --git a/MATLAB_Tools/UFcollection/UFfull_write.c b/MATLAB_Tools/UFcollection/UFfull_write.c
new file mode 100644
index 0000000..d58516c
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFfull_write.c
@@ -0,0 +1,164 @@
+/* ========================================================================== */
+/* === UFcollection/UFfull ================================================== */
+/* ========================================================================== */
+
+/* UFcollection: a MATLAB toolbox for managing the UF Sparse Matrix Collection.
+ * Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
+ */
+
+/* ========================================================================== */
+
+/* UFfull_write (filename, X): write a full matrix to a file.  A small subset of
+ * the Matrix Market format is used.  The first line is one of:
+ *
+ *	%%MatrixMarket matrix array real general
+ *	%%MatrixMarket matrix array complex general
+ * 
+ * The 2nd line contains two numbers: m and n, where X is m-by-n.  The next
+ * m*n lines contain the numerical values (one per line if real, two per line
+ * if complex, containing the real and imaginary parts).  The values are
+ * listed in column-major order.  The resulting file can be read by any
+ * Matrix Market reader, or by UFfull_read.  No comments or blank lines are
+ * used.
+ */
+
+#ifndef NLARGEFILE
+#include "io64.h"
+#endif
+
+#include "mex.h"
+#include <math.h>
+#define MAXLINE 1030
+#define BIG 1e308
+
+/* -------------------------------------------------------------------------- */
+/* print_value */
+/* -------------------------------------------------------------------------- */
+
+static void print_value (FILE *f, double x, char *s)
+{
+    double y ;
+    int k, width ;
+
+    /* change -inf to -BIG, and change +inf and nan to +BIG */
+    if (x != x || x >= BIG)
+    {
+	x = BIG ;
+    }
+    else if (x <= -BIG)
+    {
+	x = -BIG ;
+    }
+
+    /* convert to int and back again */
+    k = (int) x ;
+    y = (double) k ;
+    if (y == x)
+    {
+	/* x is a small integer */
+	fprintf (f, "%d", k) ;
+    }
+    else
+    {
+	/* x is not an integer, use the smallest width possible */
+	for (width = 6 ; width < 20 ; width++)
+	{
+	    /* write the value to a string, read it back in, and check */
+	    sprintf (s, "%.*g", width, x) ;
+	    sscanf (s, "%lg", &y) ;
+	    if (x == y) break ;
+	}
+	fprintf (f, "%s", s) ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* UFfull */
+/* -------------------------------------------------------------------------- */
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    int iscomplex ;
+    mwSignedIndex nrow, ncol, i, j ;
+    double *Ax, *Az ;
+    char filename [MAXLINE], s [MAXLINE] ;
+    FILE *f ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargout > 0 || nargin != 2)
+    {
+	mexErrMsgTxt ("usage: UFfull (filename,A)") ;
+    }
+    if (mxIsSparse (pargin [1]) || !mxIsClass (pargin [1], "double"))
+    {
+	mexErrMsgTxt ("A must be full and double") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get filename and open the file */
+    /* ---------------------------------------------------------------------- */
+
+    if (!mxIsChar (pargin [0]))
+    {
+	mexErrMsgTxt ("first parameter must be a filename") ;
+    }
+    mxGetString (pargin [0], filename, MAXLINE) ;
+    f = fopen (filename, "w") ;
+    if (f == NULL)
+    {
+	mexErrMsgTxt ("error openning file") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get the matrix */
+    /* ---------------------------------------------------------------------- */
+
+    iscomplex = mxIsComplex (pargin [1]) ;
+    nrow = mxGetM (pargin [1]) ;
+    ncol = mxGetN (pargin [1]) ;
+    Ax = mxGetPr (pargin [1]) ;
+    Az = mxGetPi (pargin [1]) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* write the matrix */
+    /* ---------------------------------------------------------------------- */
+
+    if (iscomplex)
+    {
+	fprintf (f, "%%%%MatrixMarket matrix array complex general\n") ;
+    }
+    else
+    {
+	fprintf (f, "%%%%MatrixMarket matrix array real general\n") ;
+    }
+    fprintf (f, "%.0f %.0f\n", (double) nrow, (double) ncol) ;
+    for (j = 0 ; j < ncol ; j++)
+    {
+	for (i = 0 ; i < nrow ; i++)
+	{
+	    print_value (f, Ax [i + j*nrow], s) ;
+	    if (iscomplex)
+	    {
+		fprintf (f, " ") ;
+		print_value (f, Az [i + j*nrow], s) ;
+	    }
+	    fprintf (f, "\n") ;
+	}
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* close the file */
+    /* ---------------------------------------------------------------------- */
+
+    fclose (f) ;
+}
diff --git a/MATLAB_Tools/UFcollection/UFfull_write.m b/MATLAB_Tools/UFcollection/UFfull_write.m
new file mode 100644
index 0000000..c2734a6
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFfull_write.m
@@ -0,0 +1,29 @@
+function UFfull_write (filename, A)					    %#ok
+%UFFULL_WRITE write a full matrix using a subset of Matrix Market format
+% Usage:
+%
+%   UFfull_write (filename, A)
+%
+% A small subset of the Matrix Market format is used.  The first line is one of:
+%
+%    %%MatrixMarket matrix array real general
+%    %%MatrixMarket matrix array complex general
+% 
+% The second line contains two numbers: m and n, where A is m-by-n.  The next
+% m*n lines contain the numerical values (one per line if real, two per line
+% if complex, containing the real and imaginary parts).  The values are listed
+% in column-major order.  The resulting file can be read by any Matrix Market
+% reader, or by UFfull_read.  No comments or blank lines are used.
+%
+% Example:
+%   x = rand (8)
+%   UFfull_write ('xfile', x)
+%   y = UFfull_read ('xfile')
+%   norm (x-y)
+%
+% See also mread, mwrite, RBwrite, RBread.
+
+% Copyright 2006-2007, Timothy A. Davis
+
+error ('UFfull_write mexFunction not found') ;
+
diff --git a/UFcollection/UFgplot.m b/MATLAB_Tools/UFcollection/UFgplot.m
similarity index 100%
rename from UFcollection/UFgplot.m
rename to MATLAB_Tools/UFcollection/UFgplot.m
diff --git a/MATLAB_Tools/UFcollection/UFindex.m b/MATLAB_Tools/UFcollection/UFindex.m
new file mode 100644
index 0000000..ff5aec3
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFindex.m
@@ -0,0 +1,405 @@
+function UF_Index = UFindex (matrixlist)
+%UFINDEX create the index for the UF Sparse Matrix Collection
+%
+% UF_Index = UFindex (matrixlist)
+%
+% matrixlist: an integer list, in the range of 1 to the length of the
+%   UF_Listing.txt file, containing a list of matrices for which to modify
+%   the UF_Index entries.  If matrixlist is not present, then the UF_Index
+%   is created from scratch.
+%
+% UF_Index:  a struct containing the index information, with the
+%   following fields, assuming that there are n matrices in the collection:
+%
+%   LastRevisionDate: a string with the date and time the index was updated.
+%   DowloadTimeStamp: date and time the index was last downloaded.
+%
+%   Group: an n-by-1 cell array.  Group {i} is the group for matrix i.
+%   Name: n-by-1 cell array.  Name {i} is the name of matrix i.
+%
+%   The following fields are n-by-1 vectors unless otherwise specified.
+%   nrows(id) gives the number of rows of the matrix with id = Problem.id,
+%   for example.
+%
+%   nrows           number of rows
+%   ncols           number of columns
+%   nnz             number of entries in A
+%   RBtype          Rutherford/Boeing type, an n-by-3 char array
+%   isBinary        1 if binary, 0 otherwise
+%   isReal          1 if real, 0 if complex
+%   cholcand        1 if a candidate for sparse Cholesky, 0 otherwise
+%   numerical_symmetry  numeric symmetry (0 to 1, where 1=symmetric)
+%   pattern_symmetry    pattern symmetry (0 to 1, where 1=symmetric)
+%   nnzdiag         nnz (diag (A)) if A is square, 0 otherwise
+%   nzero           nnz (Problem.Zeros)
+%   amd_lnz         nnz(L) for chol(C(p,p)) where, C=A+A', p=amd(C)
+%   amd_flops       flop count for chol(C(p,p)) where, C=A+A', p=amd(C)
+%   amd_vnz         nnz in Householder vectors for qr(A(:,colamd(A)))
+%   amd_rnz         nnz in R for qr(A(:,colamd(A)))
+%   nblocks         # of blocks from dmperm
+%   sprank          sprank(A)
+%   ncc             # of strongly connected components
+%   posdef          1 if positive definite, 0 otherwise
+%   isND            1 if a 2D/3D problem, 0 otherwise
+%   isGraph         1 if a graph, 0 otherwise
+%
+% If the statistic is intentionally not computed, it is set to -2.  Some
+% statistics are not computed for rectangular or structurally singular
+% matrices, for example.  If an attempt to compute the statistic was made, but
+% failed, it is set to -1.  If no attempt yet has been made to compute the
+% entry, it is set to -3.
+%
+% Example:
+%   UFindex
+%   UFindex (267:300)
+%
+% If updating the UF_Index.mat file, the function first loads it from its
+% default location, via UFget.  This function then saves the new UF_Index into
+% the UF_Index.mat file in the current working directory (not overwriting the
+% old copy, unless it resides in the current working directory).  It creates
+% the UFstats.csv file used by UFgui.java and UFkinds.m and places it in the
+% current working directory.
+%
+% See also UFstats.
+
+% Copyright 2006-2011, Timothy A. Davis
+
+% Requires the SuiteSparse set of packages: CHOLMOD, RBio, CSparse
+
+%   10/13/2001: Created by Erich Mirabal
+
+%-------------------------------------------------------------------------------
+% initialize an empty index
+%-------------------------------------------------------------------------------
+
+% load the filenames
+[url topdir] = UFlocation ;
+files = textread ([topdir 'mat/UF_Listing.txt'], '%s') ;
+
+% if no input, assume we have to do the whole file list
+create_new = 0 ;
+if (nargin < 1)
+    matrixlist = 1:length(files) ;
+    create_new = 1 ;
+elseif (~isempty (matrixlist))
+    % validate the input : range is limited by the files variable
+    if (min (matrixlist) < 1) || (max (matrixlist) > length (files))
+        error ('%s: %s', mfilename, 'Invalid input parameter.') ;
+    end
+end
+
+if (~create_new)
+    % load the index from file
+    fprintf ('Loading existing UF_Index.mat file\n') ;
+    try
+        load UF_Index
+        fprintf ('loaded UF_Index in current directory:\n%s\n', pwd) ;
+        dir
+    catch
+        fprintf ('loading UF_Index = UFget\n') ;
+        UF_Index = UFget ;
+    end
+end
+
+% get the current UFkinds
+if (create_new)
+    kinds = cell (length (files),1) ;
+else
+    try
+        kinds = UFkinds ;
+    catch
+        kinds = cell (2,1) ;
+    end
+    for i = matrixlist
+        kinds {i} = '' ;
+    end
+end
+
+% revision tracking device
+UF_Index.LastRevisionDate = datestr (now) ;
+
+% the index structure needs a download date for version tracking
+UF_Index.DownloadTimeStamp = now ;
+
+% start the index from scratch
+if (create_new)
+
+    fprintf ('Creating new UF_Index.mat file\n') ;
+    nothing = -3 * ones (1, length (files)) ;
+
+    UF_Index.Group = cell (size (files)) ;
+    UF_Index.Name = cell (size (files)) ;       
+    UF_Index.nrows = nothing ;
+    UF_Index.ncols = nothing ;
+    UF_Index.nnz = nothing ;
+    UF_Index.nzero = nothing ;
+    UF_Index.pattern_symmetry = nothing ;
+    UF_Index.numerical_symmetry = nothing ;
+    UF_Index.isBinary = nothing ;
+    UF_Index.isReal = nothing ;
+    UF_Index.nnzdiag = nothing ;
+    UF_Index.posdef = nothing ;
+    UF_Index.amd_lnz   = nothing ;
+    UF_Index.amd_flops = nothing ;
+    UF_Index.amd_vnz   = nothing ;
+    UF_Index.amd_rnz   = nothing ;
+    UF_Index.nblocks   = nothing ;
+    UF_Index.sprank    = nothing ;
+    UF_Index.RBtype = char (' '*ones (length (files),3)) ;
+    UF_Index.cholcand = nothing ;
+    UF_Index.ncc = nothing ;
+    UF_Index.isND = nothing ;
+    UF_Index.isGraph = nothing ;
+    UF_Index.lowerbandwidth = nothing ;
+    UF_Index.upperbandwidth = nothing ;
+    UF_Index.rcm_lowerbandwidth = nothing ;
+    UF_Index.rcm_upperbandwidth = nothing ;
+
+else
+
+    % make sure we have the right length for the arrays
+    if length (UF_Index.nrows) < max (matrixlist)
+
+        len = max (matrixlist) - length (UF_Index.nrows) ;
+        nothing = -ones (1, len) ;
+
+        if (len > 0)
+            for i = matrixlist
+                UF_Index.Group {i} = '' ;
+                UF_Index.Name {i} = '' ;
+            end
+            UF_Index.nrows      = [UF_Index.nrows nothing] ;
+            UF_Index.ncols      = [UF_Index.ncols nothing] ;
+            UF_Index.nnz        = [UF_Index.nnz nothing] ;
+            UF_Index.nzero      = [UF_Index.nzero nothing] ;
+            UF_Index.pattern_symmetry = [UF_Index.pattern_symmetry nothing] ;
+            UF_Index.numerical_symmetry = [UF_Index.numerical_symmetry nothing];
+            UF_Index.isBinary   = [UF_Index.isBinary nothing] ;
+            UF_Index.isReal     = [UF_Index.isReal nothing] ;
+            UF_Index.nnzdiag    = [UF_Index.nnzdiag nothing] ;
+            UF_Index.posdef     = [UF_Index.posdef nothing] ;
+            UF_Index.amd_lnz    = [UF_Index.amd_lnz nothing] ;
+            UF_Index.amd_flops  = [UF_Index.amd_flops nothing] ;
+            UF_Index.amd_vnz    = [UF_Index.amd_vnz nothing] ;
+            UF_Index.amd_rnz    = [UF_Index.amd_rnz nothing] ;
+            UF_Index.nblocks    = [UF_Index.nblocks nothing] ;
+            UF_Index.sprank     = [UF_Index.sprank nothing] ;
+            UF_Index.RBtype     = [UF_Index.RBtype ; char (' '*ones (len,3))] ;
+            UF_Index.cholcand   = [UF_Index.cholcand nothing] ;
+            UF_Index.ncc        = [UF_Index.ncc nothing] ;
+            UF_Index.isND       = [UF_Index.isND nothing] ;
+            UF_Index.isGraph    = [UF_Index.isGraph nothing] ;
+            UF_Index.lowerbandwidth     = [UF_Index.lowerbandwidth nothing ;
+            UF_Index.upperbandwidth     = [UF_Index.upperbandwidth nothing ;
+            UF_Index.rcm_lowerbandwidth = [UF_Index.rcm_upperbandwidth nothing ;
+            UF_Index.rcm_upperbandwidth = [UF_Index.rcm_upperbandwidth nothing ;
+        end
+    end
+end
+
+if (length (matrixlist) > 0)
+    fprintf ('Will process %d files\n', length (matrixlist)) ;
+end
+
+nmat = length (UF_Index.nrows) ;
+filesize = zeros (nmat,1) ;
+
+%-------------------------------------------------------------------------------
+% look through the directory listing
+%-------------------------------------------------------------------------------
+
+for i = matrixlist
+
+    % note that the matrix is not loaded in this for loop
+    ffile = deblank (files {i}) ;
+
+    % group is the first part of the string up to the character before
+    % the last file separator
+    gi = find (ffile == '/') ;
+    gi = gi (end) ;
+    groupN = char (ffile (1:gi-1)) ;
+
+    % name is the last section of the string after the last file separator
+    matrixN = char (ffile (gi+1:end)) ;
+
+    % get the directory info of the .mat file
+    fileInfo = dir ([topdir 'mat/' ffile '.mat']) ;
+
+    % set the file's data into the data arrays
+    UF_Index.Name {i} = matrixN ;
+    UF_Index.Group {i} = groupN ;
+
+    if (length (fileInfo) > 0)                                              %#ok
+        filesize (i) = fileInfo.bytes ;
+    else
+        filesize (i) = -1 ;
+    end
+
+end
+
+if (length (matrixlist) > 0)
+    fprintf ('\n======================================================\n') ;
+    fprintf ('Matrices will processed in the following order:\n') ;
+    for i = matrixlist
+        ffile = deblank (files {i}) ;
+        fprintf ('Matrix %d: %s filesize %d\n', i, ffile, filesize (i)) ;
+        if (filesize (i) == -1)
+            fprintf ('skip this file (not found)\n') ;
+            continue ;
+        end
+    end
+end
+
+%-------------------------------------------------------------------------------
+% load the matrices
+%-------------------------------------------------------------------------------
+
+% known to be positive definite / indefinite:
+known_posdef = [ 939 1252 1267 1268 1423 1453 1455 2541:2547 ] ;
+known_indef = [ 1348:1368 1586 1411 1901:1905] ;
+
+% known to be irreducible, but dmperm takes too long:
+known_irreducible = [ 1902:1905 ] ;
+% known_irreducible = [ ] ;
+
+t = tic ;
+
+for k = 1:length (matrixlist)
+
+    %---------------------------------------------------------------------------
+    % get the matrix
+    %---------------------------------------------------------------------------
+
+    id = matrixlist (k) ;
+    ffile = deblank (files {id}) ;
+    fprintf ('\n============================== Matrix %d: %s\n', id, ffile) ;
+    if (filesize (id) == -1)
+	fprintf ('skip this file\n') ;
+	continue ;
+    end
+    load ([topdir 'mat/' ffile]) ;
+
+    % display the Problem struct
+    disp (Problem) ;
+
+    %---------------------------------------------------------------------------
+    % get all stats
+    %---------------------------------------------------------------------------
+
+    kinds {id} = Problem.kind ;
+
+    fprintf ('%s/%s\n', UF_Index.Group {id}, UF_Index.Name {id}) ;
+
+    if (~isequal (Problem.name, [UF_Index.Group{id} '/' UF_Index.Name{id}]))
+        error ('name mismatch!') ;
+    end
+    if (Problem.id ~= id)
+        error ('id mismatch!') ;
+    end
+
+    skip_chol = (any (id == known_posdef) || any (id == known_indef)) ;
+    skip_dmperm = any (id == known_irreducible) ;
+
+    if (isfield (Problem, 'Zeros'))
+	stats = UFstats (Problem.A, Problem.kind, skip_chol, ...
+            skip_dmperm, Problem.Zeros) ;
+    else
+	stats = UFstats (Problem.A, Problem.kind, skip_chol, ...
+            skip_dmperm) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % fix special cases
+    %---------------------------------------------------------------------------
+
+    if (stats.posdef < 0)
+	if (any (id == known_posdef))
+	    fprintf ('known posdef\n') ;
+	    stats.posdef = 1 ;
+	elseif (any (id == known_indef))
+	    fprintf ('known indef\n') ;
+	    stats.posdef = 0 ;
+	end
+    end
+
+    if (any (id == known_irreducible) && stats.sprank < 0)
+	% full sprank, and not reducible to block triangular form,
+	% but dmperm takes too long
+	fprintf ('known irreducible\n') ;
+	stats.sprank = stats.nrows  ;
+	stats.nblocks = 1 ;
+    end
+
+    % display the stats
+    disp (stats) ;
+
+    %---------------------------------------------------------------------------
+    % save the stats in the index
+    %---------------------------------------------------------------------------
+
+    UF_Index.nrows (id) = stats.nrows ;
+    UF_Index.ncols (id) = stats.ncols ;
+    UF_Index.nnz (id) = stats.nnz ;
+    UF_Index.nzero (id) = stats.nzero ;
+    UF_Index.pattern_symmetry (id) = stats.pattern_symmetry ;
+    UF_Index.numerical_symmetry (id) = stats.numerical_symmetry ;
+    UF_Index.isBinary (id) = stats.isBinary ;
+    UF_Index.isReal (id) = stats.isReal ;
+    UF_Index.nnzdiag (id) = stats.nnzdiag ;
+    UF_Index.posdef (id) = stats.posdef ;
+    UF_Index.amd_lnz (id) = stats.amd_lnz ;
+    UF_Index.amd_flops (id) = stats.amd_flops ;
+    UF_Index.amd_vnz (id) = stats.amd_vnz ;
+    UF_Index.amd_rnz (id) = stats.amd_rnz ;
+    UF_Index.nblocks (id) = stats.nblocks ;
+    UF_Index.sprank (id) = stats.sprank ;
+    UF_Index.RBtype (id,:) = stats.RBtype ;
+    UF_Index.cholcand (id) = stats.cholcand ;
+    UF_Index.ncc (id) = stats.ncc ;
+    UF_Index.isND (id) = stats.isND ;
+    UF_Index.isGraph (id) = stats.isGraph ;
+    UF_Index.lowerbandwidth (id) = stats.lowerbandwidth ;
+    UF_Index.upperbandwidth (id) = stats.upperbandwidth ;
+    UF_Index.rcm_lowerbandwidth (id) = stats.rcm_lowerbandwidth ;
+    UF_Index.rcm_upperbandwidth (id) = stats.rcm_upperbandwidth ;
+
+    %---------------------------------------------------------------------------
+    % clear the problem and save the index and UFstats.csv
+    %---------------------------------------------------------------------------
+
+    clear Problem
+    fprintf ('time since last save: %g\n', toc (t)) ;
+    if (toc (t) > 20 || k == length (matrixlist))
+        t = tic ;
+        fprintf ('\n ... saving UF_Index ...\n') ;
+        save UF_Index UF_Index
+
+        fprintf ('\nCreating UFstats.csv in current directory:\n')
+        fprintf ('%s/UFstats.csv\n', pwd) ;
+        f = fopen ('UFstats.csv', 'w') ;
+        fprintf (f, '%d\n', nmat) ;
+        fprintf (f, '%s\n', UF_Index.LastRevisionDate) ;
+        for id = 1:nmat
+            fprintf (f,'%s,%s,%d,%d,%d,%d,%d,%d,%d,%.16g,%.16g,%s\n', ...
+                UF_Index.Group {id}, ...
+                UF_Index.Name {id}, ...
+                UF_Index.nrows (id), ...
+                UF_Index.ncols (id), ...
+                UF_Index.nnz (id), ...
+                UF_Index.isReal (id), ...
+                UF_Index.isBinary (id), ...
+                UF_Index.isND (id), ...
+                UF_Index.posdef (id), ...
+                UF_Index.pattern_symmetry (id), ...   % formatted with %.16g
+                UF_Index.numerical_symmetry (id), ... % formatted with %.16g
+                kinds {id}) ;
+        end
+        fclose (f) ;
+
+        % flush the diary
+        if (strcmp (get (0, 'Diary'), 'on'))
+            diary off
+            diary on
+        end
+    end
+end
diff --git a/UFcollection/UFint.m b/MATLAB_Tools/UFcollection/UFint.m
similarity index 100%
rename from UFcollection/UFint.m
rename to MATLAB_Tools/UFcollection/UFint.m
diff --git a/MATLAB_Tools/UFcollection/UFlist.m b/MATLAB_Tools/UFcollection/UFlist.m
new file mode 100644
index 0000000..7fb9c3b
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFlist.m
@@ -0,0 +1,360 @@
+function UFlist (what, group)
+%UFLIST create a web page index for the UF Sparse Matrix Collection
+%
+% Usage: UFlist (what)
+%
+%  what:
+%       'group'     sort by group, then filename
+%       'name'      sort by name
+%       'dimension' sort by max row or col dimension
+%       'id'        sort by id (default, if "what" is not present)
+%       'number of nonzeros'   sort by number of nonzeros
+%       'type'      sort by type, then dimension
+%       'symmetry'  sort by symmetry.  Rectangular matrices first, sorted by
+%                   min(nrow,ncol)-max(nrow,ncol), then numerical symmetry
+%                   0 to just less than one.  Then numerical symmetry = 1
+%                   but not spd (sorted by dimension).  Then spd sorted
+%                   by dimension.
+%
+% If two arguments are present, only that group is created.
+% In this case, "what" must be "group".
+%
+% Example:
+%
+%   UFlist ('id')
+%   UFlist ('group', 'HB')
+%
+% See also UFget, UFint.
+
+% Copyright 2006-2007, Timothy A. Davis
+
+index = UFget ;
+
+if (nargin < 1)
+    what = 'id' ;
+end
+
+by_group = (nargin > 1) ;
+
+% create the primary directory
+[url topdir] = UFlocation ;
+matrices = [topdir 'matrices'] ;
+if (~exist (matrices, 'dir'))
+    mkdir (matrices) ;
+end
+
+if (by_group)
+    fprintf ('group: %s\n', group) ;
+    loc = '../' ;
+    if (~exist ([matrices '/' group], 'dir'))
+	mkdir ([matrices '/' group]) ;
+    end
+    f = fopen ([matrices '/' group '/index.html'], 'w') ;
+else
+    fprintf ('list: %s\n', what) ;
+    f = fopen ([matrices '/list_by_' what '.html'], 'w') ;
+    loc = '' ;
+end
+if (f < 0)
+    error ('unable to create html file\n') ;
+end
+
+nmat = length (index.nrows) ;
+
+% add the header
+fprintf (f, ...
+    '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n') ;
+fprintf (f, '<html lang="EN"><head>\n') ;
+fprintf (f, '<link rel="stylesheet" type="text/css"\n') ;
+fprintf (f, 'href="%s/matrices/matrixstyle.css" />\n', url) ;
+fprintf (f, '<meta http-equiv="content-type" content="text/html; charset=') ;
+fprintf (f, 'iso-8859-1">') ;
+if (by_group)
+    fprintf (f, '<title>UF Sparse Matrix Collection - %s group', group) ;
+else
+    fprintf (f, '<title>UF Sparse Matrix Collection - sorted by ') ;
+    if (strcmp (what, 'nnz'))
+	fprintf (f, 'number of nonzeros') ;
+    else
+	fprintf (f, '%s', what) ;
+    end
+end
+fprintf (f, '</title></head>\n') ;
+fprintf (f, '<body bgcolor="#ffffff" link="#0021a5">\n') ;
+fprintf (f, ...
+    '<li><a href="%sindex.html">UF Sparse Matrix Collection</a><hr>\n', loc) ;
+if (by_group)
+    fprintf (f, '<p>UF Sparse Matrix Collection: %s group.<p>\n', group) ;
+else
+    fprintf (f, '<p>UF Sparse Matrix Collection, sorted by %s.\n', what) ;
+    fprintf (f, '  Click on a column header to sort by that column.<p>\n') ;
+end
+
+% add link to mat/<group>/README.txt
+if (by_group)
+    fprintf (f, '<li><a href="../../mat/%s/README.txt">', group) ;
+    fprintf (f, 'Click here for a description of the %s group.</a>\n', group) ;
+end
+
+fprintf (f, '<li><a href="%sgroups.html">', loc) ;
+fprintf (f, 'Click here for a list of all matrix groups.</a>\n') ;
+
+fprintf (f, '<li><a href="%slist_by_id.html">', loc) ;
+fprintf (f, 'Click here for a list of all matrices.</a>\n') ;
+
+fprintf (f, '<p><table>\n') ;
+
+% sort by filename
+[ignore, iname] = sort (lower (index.Name)) ;
+
+if (by_group)
+
+    list = [ ] ;
+    for i = 1:nmat
+	if (strcmp (group, index.Group {i}))
+	    list = [list i] ;						    %#ok
+	end
+    end
+    [ignore i] = sort (lower (index.Name (list))) ;
+    list = list (i) ;
+
+    if (isempty (list))
+	error ('empty group!') ;
+    end
+
+elseif (strcmp (what, 'group'))
+
+    % sort by filename, then stable sort by group
+    [ignore, i] = sort (lower (index.Group (iname))) ;
+    list = iname (i) ;
+
+elseif (strcmp (what, 'name'))
+
+    % sort by filename only
+    list = iname' ;
+
+elseif (strcmp (what, 'dimension'))
+
+    % sort by filename, then stable sort by max dimension
+    [ignore, i] = sort (max (index.nrows (iname), index.ncols (iname))) ;
+    list = iname (i) ;
+
+elseif (strcmp (what, 'id'))
+
+    list = 1:nmat ;
+
+elseif (strcmp (what, 'nnz'))
+
+    % sort by filename, then stable sort by nnz
+    [ignore, i] = sort (index.nnz (iname)) ;
+    list = iname (i) ;
+
+elseif (strcmp (what, 'symmetry'))
+
+%	'symmetry'  sort by symmetry.  Rectangular matrices first, sorted by
+%			min(nrow,ncol)-max(nrow,ncol), then numerical symmetry
+%			0 to just less than one.  Then numerical symmetry = 1
+%			but not spd (sorted by dimension).  Then spd sorted
+%			by dimension.
+
+
+    s1 = min (index.nrows, index.ncols) - max (index.nrows, index.ncols) ;
+    s2 = index.numerical_symmetry ;
+    s2 (find (s2) == -1) = 1 ;
+    s3 = index.posdef ;
+    s3 (find (s3) == -1) = 2 ;
+    s4 = max (index.nrows, index.ncols) ;
+
+    [ignore list] = sortrows ([s1' s2' s3' s4'], [1 2 3 4]) ;
+
+elseif (strcmp (what, 'type'))
+
+    [ignore i1] = sort (max (index.nrows, index.ncols)) ;
+    s = index.RBtype (i1,:) ;
+    [ignore i2] = sortrows (s) ;
+    list = i1 (i2) ;
+
+else
+    error ('unknown list') ;
+end
+
+% ensure list is a row vector
+list = list (:)' ;
+
+% print the header
+fprintf (f, '<tr>\n') ;
+
+if (by_group)
+    fprintf (f, '<th>matrix</th>\n') ;
+    fprintf (f, '<th>graph</th>\n') ;
+    fprintf (f, '<th>Group/Name</th>\n') ;
+    fprintf (f, '<th>id</th>\n') ;
+    fprintf (f, '<th>download</th>\n') ;
+    fprintf (f, '<th># rows</th>\n') ;
+    fprintf (f, '<th># cols</th>\n') ;
+    fprintf (f, '<th>nonzeros</th>\n') ;
+    fprintf (f, '<th>type</th>\n') ;
+    fprintf (f, '<th>sym</th>\n') ;
+    fprintf (f, '<th>spd?</th>\n') ;
+else
+    fprintf (f, '<th>matrix</th>\n') ;
+    fprintf (f, '<th>graph</th>\n') ;
+    fprintf (f, '<th><a href=%slist_by_group.html>Group</a>\n', loc) ;
+    fprintf (f, 'and <a href=%slist_by_name.html>Name</a></th>\n', loc) ;
+    fprintf (f, '<th><a href=%slist_by_id.html>id</a></th>\n', loc) ;
+    fprintf (f, '<th>download</th>\n') ;
+    fprintf (f, '<th><a href=%slist_by_dimension.html># rows</a></th>\n', loc) ;
+    fprintf (f, '<th><a href=%slist_by_dimension.html># cols</a></th>\n', loc) ;
+    fprintf (f, '<th><a href=%slist_by_nnz.html>nonzeros</a></th>\n', loc) ;
+    fprintf (f, '<th><a href=%slist_by_type.html>type</a></th>\n', loc) ;
+    fprintf (f, '<th><a href=%slist_by_symmetry.html>sym</a></th>\n', loc) ;
+    fprintf (f, '<th><a href=%slist_by_symmetry.html>spd?</a></th>\n', loc) ;
+end
+
+yifan_graphs = 'http://yifanhu.net/GALLERY/GRAPHS/' ;
+yifan_thumb = [yifan_graphs 'GIF_THUMBNAIL/'] ;
+
+for id = list
+
+    group = index.Group {id} ;
+    name = index.Name {id} ;
+    nrows = index.nrows (id) ;
+    ncols = index.ncols (id) ;
+    nz = index.nnz (id) ;
+    sym = index.numerical_symmetry (id) ;
+    mtype = index.RBtype (id,:) ;
+
+    s = index.posdef (id) ;
+    if (s == 0)
+	ss = 'no' ;
+    elseif (s == 1)
+	ss = 'yes' ;
+    else
+	ss = '?' ;
+    end
+
+    fprintf (f, '<tr>\n') ;
+
+    % thumbnail link to the matrix page
+    fprintf (f, '<td>\n') ;
+    w = 'width="96" height="72"' ;
+    yname = [group '@' name] ;
+    if (by_group)
+
+	fprintf (f, '<a href="%s.html"><img %s alt="%s/%s"', ...
+            name, w, group, name) ;
+	fprintf (f, ' src="%s_thumb.png"></a>\n', name) ;
+
+        fprintf (f, '</td><td>\n') ;
+	fprintf (f, '<a href="%s.html"><img alt="%s/%s"', ...
+            name, group, name) ;
+	fprintf (f, ' src="%s%s.gif"></a>\n', yifan_thumb, yname) ;
+
+    else
+
+	fprintf (f, '<a href="%s/%s.html"><img %s alt="%s/%s"', ...
+	    group, name, w, group, name) ;
+	fprintf (f, ' src="%s/%s_thumb.png"></a>\n', group, name) ;
+
+        fprintf (f, '</td><td>\n') ;
+	fprintf (f, '<a href="%s/%s.html"><img alt="%s/%s"', ...
+	    group, name, group, name) ;
+	fprintf (f, ' src="%s%s.gif"></a>\n', yifan_thumb, yname) ;
+
+    end
+
+    fprintf (f, '</td>\n') ;
+
+    % group
+    if (by_group)
+	fprintf (f, '<td>%s/', group) ;
+    else
+	fprintf (f, '<td><a href="%s/index.html">%s</a>/', group, group);
+    end
+    
+    % name
+    if (by_group)
+	fprintf (f, '<a href="%s.html">%s</a></td>\n', name, name) ;
+    else
+	fprintf (f, '<a href="%s/%s.html">%s</a></td>\n', group, name, name) ;
+    end
+
+    % id
+    fprintf (f, '<td>%d</td>\n', id) ;
+
+    % download links
+    fprintf (f, '<td>\n') ;
+    fprintf (f, '<a href="%s../mat/%s/%s.mat">MAT</a>', loc, group, name) ;
+    fprintf (f, ', <a href="%s../MM/%s/%s.tar.gz">MM</a>', loc, group, name) ;
+    fprintf (f, ', <a href="%s../RB/%s/%s.tar.gz">RB</a>', loc, group, name) ;
+    fprintf (f, '</td>\n') ;
+
+    % nrow
+    fprintf (f, '<td align=right>%s</td>\n', UFint (nrows)) ;
+
+    % ncols
+    fprintf (f, '<td align=right>%s</td>\n', UFint (ncols)) ;
+
+    % nz
+    fprintf (f, '<td align=right>%s</td>\n', UFint (nz)) ;
+
+    % print the Rutherford/Boeing type
+    mattype = '' ;
+    if (mtype (1) == 'r')
+	mattype = 'real' ;
+    elseif (mtype (1) == 'c')
+	mattype = 'complex' ;
+    elseif (mtype (1) == 'i')
+	mattype = 'integer' ;
+    elseif (mtype (1) == 'p')
+	mattype = 'binary' ;
+    end
+    if (mtype (2) == 'r')
+	mattype = [mattype ' rectangular'] ;				    %#ok
+    elseif (mtype (2) == 'u')
+	mattype = [mattype ' unsymmetric'] ;				    %#ok
+    elseif (mtype (2) == 's')
+	mattype = [mattype ' symmetric'] ;				    %#ok
+    elseif (mtype (2) == 'h')
+	mattype = [mattype ' Hermitian'] ;				    %#ok
+    elseif (mtype (2) == 'z')
+	mattype = [mattype ' skew-symmetric'] ;				    %#ok
+    end
+    fprintf (f, '<td>%s</td>\n', mattype) ;
+
+    % numerical symmetry (as a percentage)
+    if (sym == -1)
+	fprintf (f, '<td align=right>?</td>\n') ;
+    elseif (sym == 1)
+	fprintf (f, '<td align=right>yes</td>\n') ;
+    elseif (nrows ~= ncols)
+	fprintf (f, '<td align=right>-</td>\n') ;
+    else
+	if (sym > 0 && sym < 0.01)
+	    fprintf (f, '<td align=right>%5.2f%%</td>\n', sym * 100) ;
+	else
+	    fprintf (f, '<td align=right>%5.0f%%</td>\n', sym * 100) ;
+	end
+    end
+
+    % positive definite?
+    fprintf (f, '<td>%s</td>\n', ss) ;
+
+    fprintf (f, '</tr>\n\n') ;
+end
+
+fprintf (f, '</table>\n\n') ;
+
+fprintf (f, '<p><p><i>Maintained by Tim Davis, last updated %s.', date) ;
+fprintf (f, '<br>Matrix pictures by <a href=') ;
+fprintf (f, '"%sCSparse/CSparse/MATLAB/CSparse/cspy.m">cspy</a>, a MATLAB', ...
+    url) ;
+fprintf (f, ' function in the <a href="%sCSparse">CSparse</a> package.\n', ...
+    url) ;
+fprintf (f, '<br>See <a href="%smat/UFget">UFget</a> to download directly', ...
+    url) ;
+fprintf (f, ' into MATLAB.') ;
+fprintf (f, '</body>\n') ;
+fprintf (f, '</html>\n') ;
+
+fclose (f) ;
diff --git a/MATLAB_Tools/UFcollection/UFlists.m b/MATLAB_Tools/UFcollection/UFlists.m
new file mode 100644
index 0000000..0782e1a
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFlists.m
@@ -0,0 +1,115 @@
+function UFlists
+%UFLISTS create the web pages for each matrix list (group, name, etc.)
+% Places the web pages in the matrices/ subdirectory of the current directory.
+%
+% Example:
+%   UFlists
+%
+% See also UFget, UFlist
+
+% Copyright 2006-2007, Timothy A. Davis
+
+% create all the web pages for the lists
+UFlist ('group') ;
+UFlist ('name') ;
+UFlist ('id') ;
+UFlist ('dimension') ;
+UFlist ('nnz') ;
+UFlist ('symmetry') ;
+UFlist ('type') ;
+
+% do all the group pages, and the list of groups
+index = UFget ;
+nmat = length (index.nrows) ;
+
+[ignore, i] = sort (index.Group) ;
+g = index.Group (i) ;
+
+% create the primary directory
+[url topdir] = UFlocation ;
+matrices = [topdir 'matrices'] ;
+if (~exist (matrices, 'dir'))
+    mkdir (matrices) ;
+end
+
+% create the groups.html file
+f = fopen ([matrices '/groups.html'], 'w') ;
+if (f < 0)
+    error ('unable to create groups.html file\n') ;
+end
+
+% add the header
+fprintf (f, ...
+	'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n') ;
+fprintf (f, '<html lang="EN"><head>\n') ;
+fprintf (f, '<link rel="stylesheet" type="text/css"\n') ;
+fprintf (f, 'href="%s/matrices/matrixstyle.css" />\n', url) ;
+fprintf (f, '<meta http-equiv="content-type" content="text/html; charset=') ;
+fprintf (f, 'iso-8859-1"><title>UF Sparse Matrix Collection: group list') ;
+fprintf (f, '</title></head>\n') ;
+fprintf (f, '<body bgcolor="#ffffff" link="#0021a5">\n') ;
+fprintf (f, '<li><a href="./index.html">UF Sparse Matrix Collection</a>\n') ;
+
+fprintf (f, '<p>List of matrix groups in the UF Sparse Matrix Collection:\n') ;
+fprintf (f, '<p><table border=1>\n') ;
+fprintf (f, '<th>Group</th>\n') ;
+fprintf (f, '<th># matrices</th>\n') ;
+fprintf (f, '<th>details</th>\n') ;
+fprintf (f, '<th>description</th>\n') ;
+
+% find all the groups
+group = '' ;
+ngroup = 0 ;
+for i = 1:nmat
+    if (strcmp (group, g {i}))
+	continue
+    end
+    group = g {i} ;
+    ngroup = ngroup + 1 ;
+    groups {ngroup} = group ;						    %#ok
+end
+
+nmat = 0 ;
+for i = 1:ngroup
+    group = groups {i} ;
+    UFlist ('group', group) ;
+    fprintf (f, '<tr>\n') ;
+
+    % link to group
+    fprintf (f, '<td><a href="%s/index.html">%s</a></td>\n', group, group) ;
+
+    % number of matrices
+    d = dir ([topdir 'mat/' group '/*.mat']) ;
+    nmat_group = size (d,1) ;
+    fprintf (f, '<td>%d</td>\n', nmat_group) ;
+    nmat = nmat + nmat_group ;
+
+    % link to README.txt file ("details")
+    f2 = fopen ([topdir '/mat/' group '/README.txt'], 'r');
+    if (f2 < 0)
+	error (['no README file for group: ' group]) ;
+    else
+	s = fgets (f2) ;
+	fprintf (f, ...
+	    '<td><a href="../mat/%s/README.txt">details</a></td>\n', group) ;
+    end
+
+    % one-line description (first line of README.txt)
+    fprintf (f, '<td>%s</td>\n', s) ;
+    fclose (f2);
+
+    fprintf (f, '</tr>\n') ;
+end
+fprintf (f, '</table>\n') ;
+
+fprintf (f, '<p>Total number of matrices in UF Sparse Matrix Collection:') ;
+fprintf (f, ' %d\n', nmat) ;
+fprintf (f, '<p><p><i>Maintained by Tim Davis, last updated %s.', date) ;
+fprintf (f, '<br>Matrix pictures by <a href=') ;
+fprintf (f, '"%sCSparse/CSparse/MATLAB/CSparse/cspy.m">cspy</a>, a MATLAB', ...
+    url) ;
+fprintf (f, ' function in the <a href="%sCSparse">CSparse</a> package.\n', ...
+    url) ;
+fprintf (f, '</body>\n') ;
+fprintf (f, '</html>\n') ;
+fclose (f) ;
diff --git a/MATLAB_Tools/UFcollection/UFlocation.m b/MATLAB_Tools/UFcollection/UFlocation.m
new file mode 100644
index 0000000..22a42ce
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFlocation.m
@@ -0,0 +1,14 @@
+function [url, topdir] = UFlocation
+%UFLOCATION URL and top-level directory of the UF Sparse Matrix Collection
+%
+% Example:
+%   [url, topdir] = UFlocation
+%
+% See also UFget.
+
+% Copyright 2006-2007, Timothy A. Davis
+
+params = UFget_defaults ;
+url = [ params.topurl '/'] ;
+topdir = params.topdir ;
+
diff --git a/MATLAB_Tools/UFcollection/UFpage.m b/MATLAB_Tools/UFcollection/UFpage.m
new file mode 100644
index 0000000..b291ab9
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFpage.m
@@ -0,0 +1,703 @@
+function UFpage (matrix, index, figures)
+%UFPAGE create web page for a matrix in UF Sparse Matrix Collection
+%
+% Usage:
+%      UFpage (matrix, index, figures)
+%
+% matrix: id or name of matrix to create the web page for.
+% index: the UF index, from UFget.
+% figures: 1 if the figures are to be created, 0 otherwise
+%
+% Example:
+%
+%   UFpage (267)
+%   UFpage ('HB/west0479')
+%
+% See also UFget, cspy, UFgplot, UFint.
+
+% This function assumes that the mat/, MM/, and RB/ directories all reside in
+% the same parent directory, given by the download directory specified by
+% UFget_defaults.
+
+% Copyright 2006-2011, Timothy A. Davis
+
+%-------------------------------------------------------------------------------
+% get inputs
+%-------------------------------------------------------------------------------
+
+if (nargin < 2)
+    index = UFget ;
+end
+if (nargin < 3)
+    figures = 1 ;
+end
+
+%-------------------------------------------------------------------------------
+% get the Problem and its contents
+%-------------------------------------------------------------------------------
+
+Problem = UFget (matrix,index) ;
+% disp (Problem) ;
+fullname = Problem.name ;
+s = strfind (fullname, '/') ;
+grp = fullname (1:s-1) ;
+name = fullname (s+1:end) ;
+id = Problem.id ;
+
+% create the primary directory
+[url topdir] = UFlocation ;
+matrices = [topdir 'matrices'] ;
+if (~exist (matrices, 'dir'))
+    mkdir (matrices) ;
+end
+
+% create the group directory
+if (~exist ([matrices '/' grp], 'dir'))
+    mkdir ([matrices '/' grp]) ;
+end
+
+% determine the full path of the problem
+fullpath = regexprep ([matrices '/' fullname], '[\/\\]', '/') ;
+
+ptitle = Problem.title ;
+
+z = 0 ;
+if (isfield (Problem, 'Zeros'))
+    z = nnz (Problem.Zeros) ;
+    Problem = rmfield (Problem, 'Zeros') ;
+end
+
+nblocks = index.nblocks (id) ;
+ncc = index.ncc (id) ;
+
+has_b = isfield (Problem, 'b') ;
+has_x = isfield (Problem, 'x') ;
+has_aux = isfield (Problem, 'aux') ;
+
+if (has_b)
+    b = Problem.b ;
+    Problem = rmfield (Problem, 'b') ;
+    if (iscell (b))
+	b = sprintf ('cell %d-by-%d\n', size (b)) ;
+    elseif (issparse (b))
+	b = sprintf ('sparse %d-by-%d\n', size (b)) ;
+    else
+	b = sprintf ('full %d-by-%d\n', size (b)) ;
+    end
+end
+
+if (has_x)
+    x = Problem.x ;
+    Problem = rmfield (Problem, 'x') ;
+    if (iscell (x))
+	x = sprintf ('cell %d-by-%d\n', size (x)) ;
+    elseif (issparse (x))
+	x = sprintf ('sparse %d-by-%d\n', size (x)) ;
+    else
+	x = sprintf ('full %d-by-%d\n', size (x)) ;
+    end
+end
+
+nodename = [ ] ;
+if (has_aux)
+    aux = Problem.aux ;
+    Problem = rmfield (Problem, 'aux') ;
+    auxfields = fields (aux) ;
+    has_coord = isfield (aux, 'coord') ;
+    has_nodename = isfield (aux, 'nodename') ;
+    auxs = cell (1, length (auxfields)) ;
+    for k = 1:length(auxfields)
+	siz = size (aux.(auxfields{k})) ;
+	if (iscell (aux.(auxfields{k})))
+	    auxs {k} = sprintf ('cell %d-by-%d\n', siz) ;
+	elseif (issparse (aux.(auxfields{k})))
+	    auxs {k} = sprintf ('sparse %d-by-%d\n', siz) ;
+	else
+	    auxs {k} = sprintf ('full %d-by-%d\n', siz) ;
+	end
+    end
+    if (has_coord)
+	xyz = aux.coord ;
+    end
+    if (has_nodename)
+	nodename = aux.nodename ;
+    end
+    clear aux
+else
+    has_coord = 0 ;
+end
+
+kind = Problem.kind ;
+if (isfield (Problem, 'notes'))
+    notes = Problem.notes ;
+else
+    notes = '' ;
+end
+
+au = Problem.author ;
+ed = Problem.ed ;
+da = Problem.date ;
+
+m = index.nrows (id) ;
+n = index.ncols (id) ;
+nz = index.nnz (id) ;
+nnzdiag = index.nnzdiag (id) ;
+
+if (strfind (kind, 'graph'))
+    bipartite = ~isempty (strfind (kind, 'bipartite')) ;
+    directed = ~isempty (regexp (kind, '\<directed', 'once')) ;
+else
+    bipartite = (m ~= n) ;
+    directed = (index.pattern_symmetry (id) < 1) ;
+end
+
+%-------------------------------------------------------------------------------
+% create the pictures
+%-------------------------------------------------------------------------------
+
+if (figures)
+
+    try
+	A = Problem.A ;
+    catch
+	fprintf ('failed to extract A from Problem struct\n') ;
+	A = sparse (0) ;
+    end
+    clear Problem
+
+    %---------------------------------------------------------------------------
+    % create the gplot
+    %---------------------------------------------------------------------------
+
+    do_gplot = has_coord ;
+    if (do_gplot)
+	UFgplot (A, xyz, directed, nodename) ;
+	print (gcf, '-dpng', '-r128', [fullpath '_gplot.png']) ;
+	print (gcf, '-dpng', '-r512', [fullpath '_gplot_big.png']) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % create the thumbnail picture
+    %---------------------------------------------------------------------------
+
+    cspy (A, 16) ;
+    print (gcf, '-dpng', '-r12', [fullpath '_thumb.png']) ;
+
+    %---------------------------------------------------------------------------
+    % create the regular picture
+    %---------------------------------------------------------------------------
+
+    cspy (A, 128) ;
+    print (gcf, '-dpng', '-r64', [fullpath '.png']) ;
+
+    %---------------------------------------------------------------------------
+    % create the dmperm figure, but not for graphs
+    %---------------------------------------------------------------------------
+
+    do_dmspy = (nblocks > 1) ;
+    if (do_dmspy)
+	try
+	    cs_dmspy (A, 128) ;
+	    title ('Dulmage-Mendelsohn permutation') ;
+	catch
+	    fprintf ('dmspy failed\n') ;
+	    delete ([fullpath '_dmperm.png']) ;
+	    do_dmspy = 0 ;
+	end
+	print (gcf, '-dpng', '-r64', [fullpath '_dmperm.png']) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % create the ccspy figure
+    %---------------------------------------------------------------------------
+
+    do_scc = (ncc > 1) ;
+    if (do_dmspy && m == n && nnzdiag == n)
+	% don't do scc for a square matrix with zero-free diagonal
+	do_scc = 0 ;
+    end
+    if (do_scc)
+	try
+	    ccspy (A, bipartite, 128) ;
+	    if (bipartite)
+		title ('connected components of the bipartite graph') ;
+	    else
+		title ('strongly connected components of the graph') ;
+	    end
+	    print (gcf, '-dpng', '-r64', [fullpath '_scc.png']) ;
+	catch
+	    fprintf ('ccspy failed\n') ;
+	    delete ([fullpath '_cc.png']) ;
+	    do_scc = 0 ;
+	end
+    end
+
+else
+
+    %---------------------------------------------------------------------------
+    % the plots already exist - check the files
+    %---------------------------------------------------------------------------
+
+    do_scc   = exist ([fullpath '_scc.png'], 'file') ;
+    do_dmspy = exist ([fullpath '_dmperm.png'], 'file') ;
+    do_gplot = exist ([fullpath '_gplot.png'], 'file') ;
+
+end
+
+clear Problem
+
+%-------------------------------------------------------------------------------
+% create the web page for the matrix
+%-------------------------------------------------------------------------------
+
+f = fopen ([fullpath '.html'], 'w') ;
+if (f < 0)
+    error ('unable to create matrix web page') ;
+end
+
+% add the header
+fprintf (f,'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n');
+fprintf (f, '<html lang="EN"><head>\n') ;
+fprintf (f, '<link rel="stylesheet" type="text/css"\n') ;
+fprintf (f, 'href="%s/matrices/matrixstyle.css" />\n', url) ;
+fprintf (f, '<meta http-equiv="content-type" content="text/html; charset=') ;
+fprintf (f, 'iso-8859-1"><title>%s sparse matrix</title></head>\n', fullname) ;
+fprintf (f, '<body bgcolor="#ffffff" link="#0021a5">\n') ;
+
+% matrix name and description
+fprintf (f, '<p><b>Matrix: %s</b>\n', fullname) ;
+fprintf (f, '<p>Description: %s<p>\n', ptitle) ;
+
+% Yifan Hu's medium-sized graph plot, for all matrices
+yifan_graphs = 'http://yifanhu.net/GALLERY/GRAPHS/' ;
+yifan_thumb = [yifan_graphs 'GIF_THUMBNAIL/'] ;
+yifan_medium = [yifan_graphs 'GIF_SMALL/'] ;
+yname = strrep (fullname, '/', '@') ;
+
+% add the primary graph
+fprintf (f, '\n<p>') ;
+fprintf (f, '<table>\n<tr>\n') ;
+fprintf (f, ...
+    '<td><a href="%s%s.html"><img alt="%s graph" src="%s%s.gif"></a></td>\n', ...
+    yifan_medium, yname, fullname, yifan_medium, yname) ;
+
+psym = index.pattern_symmetry (id) == 1 ;
+
+% add the graph of A+A', for a square matrix with unsymmetric pattern
+if (m == n && ~psym)
+    fprintf (f, ...
+    '<td><a href="%s%s.html"><img alt="%s graph" src="%s%s.APlusAT.gif"></a></td>\n', ...
+    yifan_medium, yname, fullname, yifan_medium, yname) ;
+end
+
+fprintf (f, '\n</tr>\n<tr>\n') ;
+
+% add the caption for the primary graph
+if (m == n && psym)
+    fprintf (f, '<td>(undirected graph drawing)</td>\n') ;
+else
+    fprintf (f, '<td>(bipartite graph drawing)</td>\n') ;
+end
+
+% add the caption for the graph of A+A'
+if (m == n && ~psym)
+    fprintf (f, '<td>(graph drawing of A+A'')</td>\n') ;
+end
+
+% finalize the graph drawing table
+fprintf (f, '\n</tr>\n</table>\n') ;
+
+%-------------------------------------------------------------------------------
+% link to matrix images
+%-------------------------------------------------------------------------------
+
+fprintf (f, '\n\n<p><hr><p>\n<table>\n<tr>\n') ;
+
+% primary matrix image
+fprintf (f, '<td><img alt="%s" src="%s.png"></td>\n', fullname, name) ;
+
+% dmspy, if it exists
+if (do_dmspy)
+    fprintf (f, '<td><img alt="dmperm of %s" src="%s_dmperm.png"></td>\n', ...
+    fullname, name) ;
+end
+
+fprintf (f, '</tr>\n<tr>\n\n') ;
+
+% ccspy, if it exists
+if (do_scc)
+    fprintf (f, '<td><img alt="scc of %s" src="%s_scc.png"></td>\n', ...
+    fullname, name) ;
+end
+
+% gplot, if it exists
+if (do_gplot)
+    fprintf (f, '<p>') ;
+    fprintf (f, ...
+'<td><a href="%s_gplot_big.png"><img alt="%s graph" src="%s_gplot.png"></a></td>\n', ...
+    name, fullname, name) ;
+end
+
+fprintf (f, '</tr>\n</table>\n\n') ;
+
+%-------------------------------------------------------------------------------
+% download and informational links
+%-------------------------------------------------------------------------------
+
+% link to UF collection
+fprintf (f, '<li><a href="..">Home page of the UF Sparse Matrix Collection</a>\n') ;
+
+% link to group
+fprintf (f, '<li><a href="./index.html">Matrix group: %s</a>\n', grp) ;
+
+% add link to mat/<group>/README.txt
+fprintf (f, '<li><a href="../../mat/%s/README.txt">', grp) ;
+fprintf (f, 'Click here for a description of the %s group.</a>\n', grp) ;
+
+% link to all matrices
+fprintf (f, '<li><a href="../list_by_id.html">') ;
+fprintf (f, 'Click here for a list of all matrices</a>\n') ;
+
+% link to all groups
+fprintf (f, '<li><a href="../groups.html">') ;
+fprintf (f, 'Click here for a list of all matrix groups</a>\n') ;
+
+% download link for MATLAB format
+fprintf (f, ...
+    '<li><a href="../../mat/%s.mat">download as a MATLAB mat-file</a>',...
+    fullname) ;
+fsize (f, [topdir 'mat/' fullname '.mat']) ; 
+
+fprintf (f, 'Use <a href="%smat/UFget.html">UFget</a>(%d)', url, id) ;
+fprintf (f, ' or UFget(''%s'') in MATLAB.\n', fullname) ;
+
+% download link for Matrix Market format
+fprintf (f, ...
+'<li><a href="../../MM/%s.tar.gz">download in Matrix Market format</a>',...
+fullname) ;
+fsize (f, [topdir 'MM/' fullname '.tar.gz']) ;
+
+% download link for Rutherford/Boeing format
+fprintf (f, ...
+'<li><a href="../../RB/%s.tar.gz">download in Rutherford/Boeing format</a>',...
+fullname) ;
+fsize (f, [topdir 'RB/' fullname '.tar.gz']) ;
+
+%-------------------------------------------------------------------------------
+% table of matrix properties
+%-------------------------------------------------------------------------------
+
+fprintf (f, '<p><table border=1>\n') ;
+stat (f, '<i><a href="../legend.html">Matrix properties</a></i>', '%s', ' ') ;
+stat (f, 'number of rows', '%s', UFint (m)) ;
+stat (f, 'number of columns', '%s', UFint (n)) ;
+stat (f, 'nonzeros', '%s', UFint (nz)) ;
+
+srank = index.sprank (id) ;
+if (srank > -2)
+    if (srank == min (m,n))
+        stat (f, 'structural full rank?', '%s', 'yes') ;
+    else
+        stat (f, 'structural full rank?', '%s', 'no') ;
+    end
+    stat (f, 'structural rank', '%s', UFint (srank)) ;
+end
+if (nblocks > -2)
+    stat (f, '# of blocks from dmperm', '%s', UFint (nblocks)) ;
+end
+if (ncc > -2)
+    stat (f, '# strongly connected comp.', '%s', UFint (ncc)) ;
+end
+
+stat (f, 'explicit zero entries', '%s', UFint (z)) ;
+
+s = index.pattern_symmetry (id) ;
+if (s == 1)
+    stat (f, 'nonzero pattern symmetry', '%s', 'symmetric') ;
+else
+    stat (f, 'nonzero pattern symmetry', '%8.0f%%', s*100) ;
+end
+
+s = index.numerical_symmetry (id) ;
+if (s == -1)
+    stat (f, 'numeric value symmetry', '%s', 'unknown') ;
+elseif (s == 1)
+    stat (f, 'numeric value symmetry', '%s', 'symmetric') ;
+else
+    stat (f, 'numeric value symmetry', '%8.0f%%', s*100) ;
+end
+
+% print the Rutherford/Boeing type
+mtype = index.RBtype (id,:) ;
+ss = '-' ;
+if (mtype (1) == 'r')
+    ss = 'real' ;
+elseif (mtype (1) == 'c')
+    ss = 'complex' ;
+elseif (mtype (1) == 'i')
+    ss = 'integer' ;
+elseif (mtype (1) == 'p')
+    ss = 'binary' ;
+end
+stat (f, 'type', '%s', ss) ;
+
+ss = '-' ;
+if (mtype (2) == 'r')
+    ss = 'rectangular' ;
+elseif (mtype (2) == 'u')
+    ss = 'unsymmetric' ;
+elseif (mtype (2) == 's')
+    ss = 'symmetric' ;
+elseif (mtype (2) == 'h')
+    ss = 'Hermitian' ;
+elseif (mtype (2) == 'z')
+    ss = 'skew-symmetric' ;
+end
+stat (f, 'structure', '%s', ss) ;
+
+if (index.cholcand (id) == 1)
+    ss = 'yes' ;
+elseif (index.cholcand (id) == 0)
+    ss = 'no' ;
+else
+    ss = '?' ;
+end
+stat (f, 'Cholesky candidate?', '%s', ss) ;
+
+s = index.posdef (id) ;
+if (s == 0)
+    ss = 'no' ;
+elseif (s == 1)
+    ss = 'yes' ;
+else
+    ss = 'unknown' ;
+end
+stat (f, 'positive definite?', '%s', ss) ;
+
+fprintf (f, '</table><p>\n') ;
+
+%-------------------------------------------------------------------------------
+% problem author, ed, kind
+%-------------------------------------------------------------------------------
+
+fprintf (f, '<p><table border=1>\n') ;
+fprintf (f, '<tr><td>author</td><td align=left>%s</td>\n', au) ;
+fprintf (f, '<tr><td>editor</td><td align=left>%s</td>\n', ed) ;
+fprintf (f, '<tr><td>date</td><td align=left>%s</td>\n', da) ;
+fprintf (f, '<tr><td><a href=../kind.html>kind</a></td><td align=left>%s</td>\n', kind);
+s = index.isND (id) ;
+if (s == 0)
+    ss = 'no' ;
+else
+    ss = 'yes' ;
+end
+fprintf (f, '<tr><td>2D/3D problem?</td><td align=left>%s</td>\n', ss) ;
+fprintf (f, '</table><p>\n') ;
+
+%-------------------------------------------------------------------------------
+% fields
+%-------------------------------------------------------------------------------
+
+if (has_b || has_x || has_aux)
+    fprintf (f, '<p><table border=1>\n') ;
+    stat (f, 'Additional fields', '%s', 'size and type') ;
+    if (has_b)
+	stat (f, 'b', '%s', b) ;
+    end
+    if (has_x)
+	stat (f, 'x', '%s', x) ;
+    end
+    if (has_aux)
+	for k = 1:length(auxfields)
+	    stat (f, auxfields{k}, '%s', char (auxs{k})) ;
+	end
+    end
+    fprintf (f, '</table><p>\n') ;
+end
+
+%-------------------------------------------------------------------------------
+% Notes
+%-------------------------------------------------------------------------------
+
+if (~isempty (notes))
+    fprintf (f, '<p>Notes:<p><pre>\n') ;
+    for k = 1:size(notes,1)
+	fprintf (f, '%s\n', notes (k,:)) ;
+    end
+    fprintf (f, '</pre>\n') ;
+end
+
+%-------------------------------------------------------------------------------
+% ordering statistics
+%-------------------------------------------------------------------------------
+
+if (index.amd_lnz (id) > -2 || index.amd_vnz (id) > -2)
+    fprintf (f, '<p><table border=1>\n') ;
+    stat (f, '<i><a href="../legend.html">Ordering statistics:</a></i>', ...
+        '%s', '<i>result</i>') ;
+    if (index.amd_lnz (id) > -2)
+	stat (f, 'nnz(chol(P*(A+A''+s*I)*P'')) with AMD', '%s', ...
+            UFint (index.amd_lnz (id))) ;
+	stat (f, 'Cholesky flop count', '%7.1e', ...
+            index.amd_flops (id)) ;
+	stat (f, 'nnz(L+U), no partial pivoting, with AMD', '%s', ...
+            UFint (2*index.amd_lnz (id) - min(m,n))) ;
+    end
+    if (index.amd_vnz (id) > -2)
+        stat (f, 'nnz(V) for QR, upper bound nnz(L) for LU, with COLAMD', ...
+            '%s', UFint (index.amd_vnz (id))) ;
+        stat (f, 'nnz(R) for QR, upper bound nnz(U) for LU, with COLAMD', ...
+            '%s', UFint (index.amd_rnz (id))) ;
+    end
+    fprintf (f, '</table><p>\n') ;
+end
+
+%-------------------------------------------------------------------------------
+% note regarding orderings
+%-------------------------------------------------------------------------------
+
+if (z > 0)
+    fprintf (f, '<p><i>Note that all matrix statistics (except nonzero');
+    fprintf (f, ' pattern symmetry) exclude the %d explicit zero entries.\n',z);
+    fprintf (f, '<i>\n') ;
+end
+
+%-------------------------------------------------------------------------------
+% SVD stats
+%-------------------------------------------------------------------------------
+
+try
+    svdfile = [topdir 'svd/' grp '/' name '_SVD.mat'] ;
+    S = load (svdfile) ;
+    S = S.S ;
+    s = S.s ;
+catch me
+    s = [ ] ;
+    % fprintf ('no svd computed for this matrix\n') ;
+    % me
+    % pause
+end
+k = min (m,n) ;
+if (length (s) == k)
+    % s = sort (s, 'descend') ;
+    nrm = max (s) ;                             % 2-norm
+    tol = max (m,n) * eps (nrm) ;               % tol for rank
+    rnk = sum (s > tol) ;                       % rank
+    if (min (s) == 0)                           % condition number
+        cnd = inf ;
+    else
+        cnd = max (s) ./ min (s) ;
+    end
+    fprintf (f, '<p><table border=1>\n') ;
+    stat (f, '<i>SVD-based statistics:</i>', '%s', ' ') ;
+    stat (f, 'norm(A)', '%g', nrm) ;
+    stat (f, 'min(svd(A))', '%g', min (s)) ;
+    stat (f, 'cond(A)', '%g', cnd) ;
+    stat (f, 'rank(A)', '%s', UFint (rnk)) ;
+    if (srank > -2)
+        stat (f, 'sprank(A)-rank(A)', '%s', UFint (srank-rnk)) ;
+    end
+    stat (f, 'null space dimension', '%s', UFint (k - rnk)) ;
+    gap = -1 ;
+    if (rnk == k)
+        stat (f, 'full numerical rank?', '%s', 'yes') ;
+    else
+        stat (f, 'full numerical rank?', '%s', 'no') ;
+        if (rnk > 1)
+            gap = s (rnk) / s (rnk+1) ;
+            stat (f, 'singular value gap', '%g', gap) ;
+        end
+    end
+    fprintf (f, '</table><br>\n') ;
+    fprintf (f, '<table border=1>\n') ;
+    stat (f, 'singular values (MAT file):', '%s', ...
+        ['<a href=''' url 'svd/' fullname '_SVD.mat''>click here</a>']) ;
+    stat (f, 'SVD method used:', '%s', S.how) ;
+    stat (f, 'status:', '%s', S.status) ;
+    fprintf (f, '</table><p>\n') ;
+    % determine where to put the legend
+    ymin = min (min (s (s > 0)), tol) ;
+    ymax = nrm ;
+    ymiddle = s (ceil (k/2)) ;
+    if (log10 (ymiddle) > (log10 (ymax) + log10 (ymin)) / 2)
+        loc = 'SouthWest' ;
+    else
+        loc = 'NorthEast' ;
+    end
+    if (gap < 0)
+        semilogy (1:k, s, 'ko', [1 k], [tol tol], 'g-', 'LineWidth', 2) ;
+        legend ('singular values', 'tolerance', 'Location', loc) ;
+    else
+        sbad = s (rnk+1) ;
+        if (sbad == 0)
+            sbad = tol ;
+        end
+        semilogy (1:k, s, 'ko', [1 k], [tol tol], 'g-', ...
+            rnk:rnk+1, [s(rnk) sbad], 'r-', 'LineWidth', 2) ;
+        legend ('singular values', 'tolerance', 'gap', 'Location', loc) ;
+    end
+    axis ([0 k+1 ymin/10 ymax*10]) ;
+    title (sprintf ('%s singular values', fullname), 'Interpreter', 'none') ;
+    print (gcf, '-dpng', '-r0', [fullpath '_svd.png']) ;
+    fprintf (f, '<td><img alt="%s svd" src="%s_svd.png"></td>\n', ...
+        fullname, name) ;
+end
+
+%-------------------------------------------------------------------------------
+% etc ...
+%-------------------------------------------------------------------------------
+
+fprintf (f, '<p><p>For a description of the statistics displayed above,\n') ;
+fprintf (f, '<a href=''../stats.html''>click here</a>.\n') ;
+
+fprintf (f, '<p><p><i>Maintained by Tim Davis</a>, last updated %s.', date) ;
+fprintf (f, '<br>Matrix pictures by <a href=') ;
+fprintf (f, '"%sCSparse/CSparse/MATLAB/CSparse/cspy.m">cspy</a>, a ', url) ;
+fprintf (f, 'MATLAB function in the <a href="%sCSparse">CSparse</a>', url) ;
+fprintf (f, ' package.<br>\n') ;
+fprintf (f, 'Matrix graphs by Yifan Hu, AT&T Labs Visualization Group.\n') ;
+fprintf (f, '</body>\n</html>\n') ;
+
+fclose (f) ;
+
+
+%-------------------------------------------------------------------------------
+
+function fsize (f, filename)
+% fsize: print the filesize
+d = dir (regexprep (filename, '[\/\\]', '/')) ;
+if (isempty (d))
+    fprintf (f, '\n') ;
+elseif (d.bytes < 1024)
+    fprintf (f, ', file size: %4d bytes.\n', d.bytes) ;
+elseif (d.bytes > 2^20)
+    fprintf (f, ', file size: %8.0f MB.\n', d.bytes / 2^20) ;
+else
+    fprintf (f, ', file size: %8.0f KB.\n', d.bytes / 2^10) ;
+end
+
+
+%-------------------------------------------------------------------------------
+
+function stat (f, what, format, value1, value2, value3)
+% stat: print one row of a table
+s = val (format, value1) ;
+fprintf (f, '<tr><td>%s</td><td align=right>%s</td>\n', what, s) ;
+if (nargin > 4)
+    fprintf (f, '<td align=right>%s</td>\n', val (format, value2)) ;
+end
+if (nargin > 5)
+    fprintf (f, '<td align=right>%s</td>\n', val (format, value3)) ;
+end
+fprintf (f, '</tr>\n') ;
+
+
+%-------------------------------------------------------------------------------
+
+function s = val (format, value)
+% val: print a value in a table
+if (~ischar (value) && value < 0)
+    s = '-' ;
+else
+    s = sprintf (format, value) ;
+end
diff --git a/UFcollection/UFpages.m b/MATLAB_Tools/UFcollection/UFpages.m
similarity index 100%
rename from UFcollection/UFpages.m
rename to MATLAB_Tools/UFcollection/UFpages.m
diff --git a/MATLAB_Tools/UFcollection/UFread.m b/MATLAB_Tools/UFcollection/UFread.m
new file mode 100644
index 0000000..7d6ddc1
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFread.m
@@ -0,0 +1,449 @@
+function Problem = UFread (directory, tmp)
+%UFREAD read a Problem in Matrix Market or Rutherford/Boeing format
+% containing a set of files created by UFwrite, in either Matrix Market or
+% Rutherford/Boeing format. See UFwrite for a description of the Problem struct.
+%
+% Usage: Problem = UFread (directory)
+%
+% Example:
+%
+%   load west0479
+%   clear Problem
+%   Problem.name = 'HB/west0479' ;
+%   Problem.title = '8 STAGE COLUMN SECTION, ALL SECTIONS RIGOROUS (CHEM.ENG.)';
+%   Problem.A = west0479 ;
+%   Problem.id = 267 ;          % the id number of west0479 in the UF collection
+%   Problem.date = '1983' ;
+%   Problem.author = 'A. Westerberg' ;
+%   Problem.ed = 'I. Duff, R. Grimes, J. Lewis'
+%   Problem.kind = 'chemical process simulation problem' ;
+%   UFwrite (Problem, 'RB/', '') ;
+%   Prob3 = UFread ('RB/HB/west0479')
+%   isequal (Problem, Prob3)
+%
+% This part of the example requires CHOLMOD, for the mread function:
+%
+%   UFwrite (Problem, 'MM/') ;
+%   Prob2 = UFread ('MM/HB/west0479')
+%   isequal (Problem, Prob2)
+%
+% You can also compare this Problem with the version in the UF Sparse Matrix
+% Collection, with UFget(267) or UFget('HB/west0479').  Note that this includes
+% the 22 explicit zero entries present in the west0479 Harwell/Boeing matrix,
+% but not included in the MATLAB west0479.mat demo matrix.  Those entries are
+% present in the UF Sparse Matrix Collection.  This example assumes your current
+% directory is the RBio directory, containing the west0479 problem in the
+% RBio/Test directory:
+%
+%   Prob5 = UFget ('HB/west0479')
+%   Prob6 = UFread ('Test/west0479')
+%   isequal (Prob5, Prob6)
+%
+% The directory can be a compressed tar file of the form "name.tar.gz", in
+% which case the tarfile is uncompressed into a temporary directory, and
+% the temporary directory is deleted when done.  The '.tar.gz' should not be
+% part of the directory argument.  In this case, a 2nd input argument can be
+% provided:  Problem = UFread (directory, tmp).  The problem is extracted into
+% the tmp directory.  If tmp is not present, the output of the tempdir function
+% is used instead.
+%
+% Note that UFget is much faster than UFread.  UFread is useful if you are
+% short on disk space, and want to have just one copy of the collection that
+% can be read by MATLAB (via UFread) and a non-MATLAB program (the MM or RB
+% versions of the collection).
+%
+% See also UFwrite, mread, mwrite, RBread, RBread, UFget, untar, tempdir.
+
+% Optionally uses the CHOLMOD mread mexFunction, for reading Problems in
+% Matrix Market format.
+
+% Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% determine the Problem name from the directory name
+%-------------------------------------------------------------------------------
+
+directory = regexprep (directory, '[\/\\]', '/') ;
+t = find (directory == '/') ;
+if (isempty (t))
+    name = directory ;
+else
+    name = directory (t(end)+1:end) ;
+end
+
+%-------------------------------------------------------------------------------
+% open the directory, or untar the tar.gz file
+%-------------------------------------------------------------------------------
+
+d = dir (directory) ;
+is_tar = 0 ;
+
+if (isempty (d))
+    % look for a .tar.gz file
+    if (nargin < 2)
+	tmpdir = [tempname '_UFread_' name] ;
+    else
+	tmpdir = [tmp '/' name] ;
+    end
+    try
+	% try untaring the problem
+	untar ([directory '.tar.gz'], tmpdir) ;
+    catch
+	% untar failed, make sure tmpdir is deleted
+	try
+	    rmdir (tmpdir, 's') ;
+	catch
+	end
+	error (['unable to read problem: ' directory]) ;
+    end
+    directory = [tmpdir '/' name] ;
+    d = dir (directory) ;
+    is_tar = 1 ;
+end 
+
+%-------------------------------------------------------------------------------
+% read the problem
+%-------------------------------------------------------------------------------
+
+try
+
+    %---------------------------------------------------------------------------
+    % get name, title, id, kind, date, author, editor, notes from master file
+    %---------------------------------------------------------------------------
+
+    masterfile = [directory '/' name] ;
+    [Problem notes RB] = get_header (masterfile) ;
+
+    %---------------------------------------------------------------------------
+    % get the A and Zero matrices from the master file and add to the Problem
+    %---------------------------------------------------------------------------
+
+    if (RB)
+	% read in the primary Rutherford/Boeing file
+	[Problem.A Zeros] = RBread ([masterfile '.rb']) ;
+    else
+	% read in the primary Matrix Market file.  Get patterns as binary.
+	[Problem.A Zeros] = mread ([masterfile '.mtx'], 1) ;
+    end
+    if (nnz (Zeros) > 0)
+	Problem.Zeros = Zeros ;
+    end
+
+    % add the notes after A and Zeros
+    if (~isempty (notes))
+	Problem.notes = notes ;
+    end
+
+    namelen = length (name) ;
+
+    %---------------------------------------------------------------------------
+    % read b, x, aux (incl. any aux.cell sequences), stored as separate files
+    %---------------------------------------------------------------------------
+
+    for k = 1:length(d)
+
+	% get the next filename in the directory
+	file = d(k).name ;
+	fullfilename = [directory '/' file] ;
+
+	if (length (file) < length (name) + 1)
+
+	    % unrecognized file; skip it
+	    continue
+
+	elseif (strcmp (file, [name '.mtx']))
+
+	    % skip the master file; already read in
+	    continue
+
+	elseif (strcmp (file, [name '_b.mtx']))
+
+	    % read in b as a Matrix Market file
+	    Problem.b = mtx_read (fullfilename, RB) ;
+
+	elseif (strcmp (file, [name '_x.mtx']))
+
+	    % read in x as a Matrix Market file
+	    Problem.x = mtx_read (fullfilename, RB) ;
+
+	elseif (strcmp (file, [name '_b.rb']))
+
+	    % read in b as a Rutherford/Boeing file
+	    Problem.b = RBread (fullfilename) ;
+
+	elseif (strcmp (file, [name '_x.rb']))
+
+	    % read in x as a Rutherford/Boeing file
+	    Problem.x = RBread (fullfilename) ;
+
+	elseif (strcmp (file (1:length(name)+1), [name '_']))
+
+	    % read in an aux component, in the form name_whatever.mtx
+	    thedot = find (file == '.', 1, 'last') ;
+	    ext = file (thedot:end) ;
+
+	    if (strcmp (ext, '.txt'))
+
+		% get a txt file
+		% first, determine the longest line in the file
+		f = fopen (fullfilename) ;
+		if (f < 0)
+		    error (['cannot open ' fullfilename]) ;
+		end
+		len = 0 ;
+		nline = 0 ;
+		while (1)
+		    s = fgetl (f) ;
+		    if (~ischar (s))
+			break 
+		    end
+		    len = max (len, length (s)) ;
+		    nline = nline + 1 ;
+		end
+		fclose (f) ;
+		% next, read in the file as a char array
+		C = repmat (' ', nline, len) ;
+		f = fopen (fullfilename) ;
+		if (f < 0)
+		    error (['cannot open ' fullfilename]) ;
+		end
+		i = 0 ;
+		while (1)
+		    s = fgetl (f) ;
+		    if (~ischar (s))
+			break 
+		    end
+		    i = i + 1 ;
+		    len = length (s) ;
+		    if (len > 0)
+			C (i, 1:len) = s ;
+		    end
+		end
+		fclose (f) ;
+
+	    elseif (strcmp (ext, '.mtx'))
+
+		% read a full or sparse auxiliary matrix in the Matrix Market
+		% form, or a full auxiliary matrix in the Rutherford/Boeing form.
+		C = mtx_read (fullfilename, RB) ;
+
+	    elseif (strcmp (ext, '.rb'))
+
+		% read in a sparse matrix, for a Rutherford/Boeing collection
+		C = RBread (fullfilename) ;
+
+	    else
+
+		% this file is not recognized - skip it.
+		C = [ ] ;
+
+	    end
+
+	    % determine the name of the component and place it in the Problem
+	    if (~isempty (C))
+		% Determine if this is part of an aux.whatever cell sequence.
+		% These filenames have the form name_whatever_#.mtx, where name
+		% is the name of the Problem, and # is a number (1 or more
+		% digts) greater than zero.  If # = i, this becomes the
+		% aux.whatever{i} matrix.
+		suffix = file (namelen+2:thedot-1) ;
+		t = find (suffix == '_', 1, 'last') ;
+		what = suffix (1:t-1) ;
+		i = str2num (suffix (t+1:end)) ;			    %#ok
+		if (~isempty (i) && i > 0 && ~isempty (what))
+		    % this is part of aux.whatever{i} cell array
+		    Problem.aux.(what) {i,1} = C ;
+		elseif (~isempty (suffix))
+		    % this is not a cell, simply an aux.whatever matrix
+		    Problem.aux.(suffix) = C ;
+		end
+	    end
+	end
+    end
+
+    %---------------------------------------------------------------------------
+    % delete the uncompressed version of the tar file
+    %---------------------------------------------------------------------------
+
+    if (is_tar)
+	rmdir (tmpdir, 's') ;
+    end
+
+catch
+
+    %---------------------------------------------------------------------------
+    % catch the error, delete the temp directory, and rethrow the error
+    %---------------------------------------------------------------------------
+
+    try
+	if (is_tar)
+	    rmdir (tmpdir, 's') ;
+	end
+    catch
+    end
+    rethrow (lasterror) ;
+
+end
+
+
+%-------------------------------------------------------------------------------
+% get_header: get the header of the master file (Group/name/name.txt or .mtx)
+%-------------------------------------------------------------------------------
+
+function [Problem, notes, RB] = get_header (masterfile)
+% Get the name, title, id, kind, date, author, editor and notes from the master
+% file.  The name, title, and id are required.  They appear as structured
+% comments in the Matrix Market file (masterfile.mtx) or in the text file for
+% a problem in Rutherford/Boeing format (masterfile.txt).  RB is returned as
+% 1 if the problem is in Rutherford/Boeing format, 0 otherwise.
+
+% first assume it's in Matrix Market format
+f = fopen ([masterfile '.mtx'], 'r') ;
+if (f < 0)
+    % oops, that failed.  This must be a problem in Rutherford/Boeing format
+    RB = 1 ;
+    f = fopen ([masterfile '.txt'], 'r') ;
+    if (f < 0)
+	% oops again, this is not a valid problem in the UF Sparse collection
+	error (['invalid problem: ' masterfile]) ;
+    end
+else
+    % we found the Matrix Market file
+    RB = 0 ;
+end
+Problem = [ ] ;
+notes = [ ] ;
+
+while (1)
+
+    % get the next line
+    s = fgetl (f) ;
+    if (~ischar (s) || length (s) < 3 || s (1) ~= '%')
+	% end of file or end of leading comments ... no notes found
+	fclose (f) ;
+	[Problem notes] = valid_problem (Problem, [ ]) ;
+	return ;
+    end
+
+    % remove the leading '% ' and get the first token
+    s = s (3:end) ;
+    [t r] = strtok (s) ;
+
+    % parse the line
+    if (strcmp (t, 'name:'))
+
+	% get the Problem.name.  It must be of the form Group/Name.
+	Problem.name = strtrim (r) ;
+	if (length (find (Problem.name == '/')) ~= 1)
+	    fclose (f) ;
+	    error (['invalid problem name ' Problem.name]) ;
+	end
+
+    elseif (s (1) == '[')
+
+	% get the Problem.title
+	k = find (s == ']', 1, 'last') ;
+	if (isempty (k))
+	    fclose (f) ;
+	    error ('invalid problem title') ;
+	end
+	Problem.title = s (2:k-1) ;
+
+    elseif (strcmp (t, 'id:'))
+
+	% get the Problem.id
+	Problem.id = str2num (r) ;					    %#ok
+	if (isempty (Problem.id) || Problem.id < 0)
+	    fclose (f) ;
+	    error ('invalid problem id') ;
+	end
+
+    elseif (strcmp (t, 'kind:'))
+
+	% get the Problem.kind
+	Problem.kind = strtrim (r) ;
+
+    elseif (strcmp (t, 'date:'))
+
+	% get the Problem.date
+	Problem.date = strtrim (r) ;
+
+    elseif (strcmp (t, 'author:'))
+
+	% get the Problem.author
+	Problem.author = strtrim (r) ;
+
+    elseif (strcmp (t, 'ed:'))
+
+	% get the Problem.ed
+	Problem.ed = strtrim (r) ;
+
+    elseif (strcmp (t, 'notes:'))
+
+	% get the notes, which always appear last
+	k = 0 ;
+	notes = [ ] ;
+	while (1)
+	    % get the next line
+	    s = fgetl (f) ;
+	    if (~ischar (s) || length (s) < 2 || ~strcmp (s (1:2), '% '))
+		% end of file or end of notes ... convert notes to char array
+		fclose (f) ;
+		[Problem notes] = valid_problem (Problem, notes) ;
+		return ;
+	    end
+	    % add the line to the notes
+	    k = k + 1 ;
+	    notes {k} = s ;						    %#ok
+	end
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+% valid_problem: determine if a problem is valid, and finalizes the notes
+%-------------------------------------------------------------------------------
+
+function [Problem, notes] = valid_problem (Problem, notes)
+% make sure the required fields (name, title, id, date, author, ed) are present.
+% Convert notes to char, and strip off the leading '% ', inserted when the notes
+% were printed in the Matrix Market file.
+if (~isfield (Problem, 'name') || ~isfield (Problem, 'title') || ...
+    ~isfield (Problem, 'id') || ~isfield (Problem, 'date') || ...
+    ~isfield (Problem, 'author') || ~isfield (Problem, 'ed') || ...
+    ~isfield (Problem, 'kind'))
+    error ('invalid Problem mfile') ;
+end
+if (~isempty (notes))
+    notes = char (notes) ;
+    notes = notes (:, 3:end) ;
+end
+
+
+%-------------------------------------------------------------------------------
+% mtx_read: read a *.mtx file
+%-------------------------------------------------------------------------------
+
+% In the Rutherford/Boeing form, a *.mtx file is used only for full matrices,
+% using a tiny subset of the Matrix Market format.  In the Matrix Market form,
+% the *.mtx is used for all b, x, and aux matrices (both full and sparse).
+
+function C = mtx_read (file, RB)
+
+if (~RB)
+
+    % Get a Matrix Market file, using full Matrix Market features.
+    C = mread (file, 1) ;
+
+else
+
+    % mread is not installed.  The RB format uses a tiny subset of the Matrix
+    % Market format for full matrices: just the one header line, and no comment
+    % or blank lines permitted.  Allowable header lines are:
+    %	%%MatrixMarket matrix array real general
+    %	%%MatrixMarket matrix array complex general
+    % This tiny subset can be read by UFfull_read.
+    C = UFfull_read (file) ;
+
+end
+
diff --git a/MATLAB_Tools/UFcollection/UFstats.m b/MATLAB_Tools/UFcollection/UFstats.m
new file mode 100644
index 0000000..541834b
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFstats.m
@@ -0,0 +1,443 @@
+function stats = UFstats (A, kind, skip_chol, skip_dmperm, Z)
+%UFSTATS compute matrix statistics for the UF Sparse Matrix Collection
+% Example:
+%   stats = UFstats (A, kind, skip_chol, skip_dmperm, Z)
+%
+% A: a sparse matrix
+% kind: a string with the Problem.kind
+% Z: empty, or a sparse matrix the same size as A.  Only used for
+%   pattern_symmetry, nzero, and bandwidth statistics, described below.
+%
+% Requires amd, cholmod, RBio, and CSparse.  Computes the following
+% statistics, returning them as fields in the stats struct:
+%
+%   nrows               number of rows
+%   ncols               number of columns
+%   nnz                 number of entries in A
+%   RBtype              Rutherford/Boeing type
+%   isBinary            1 if binary, 0 otherwise
+%   isReal              1 if real, 0 if complex
+%   cholcand            1 if a candidate for sparse Cholesky, 0 otherwise
+%   numerical_symmetry  numeric symmetry (0 to 1, where 1=symmetric)
+%   pattern_symmetry    pattern symmetry (0 to 1, where 1=symmetric)
+%   nnzdiag             nnz (diag (A)) if A is square, 0 otherwise
+%   nzero               nnz (Z)
+%   amd_lnz             nnz(L) for chol(C(p,p)) where, C=A+A', p=amd(C)
+%   amd_flops           flop count for chol(C(p,p)) where, C=A+A', p=amd(C)
+%   amd_vnz             nnz in Householder vectors for qr(A(:,colamd(A)))
+%   amd_rnz             nnz in R for qr(A(:,colamd(A)))
+%   nblocks             # of blocks from dmperm
+%   sprank              sprank(A)
+%   ncc                 # of strongly connected components
+%   posdef              1 if positive definite, 0 otherwise
+%   isND                1 if a 2D/3D problem, 0 otherwise
+%   isGraph             1 if a graph, 0 otherwise
+%   lowerbandwidth      lower bandwidth, [i j]=find(A), max(0,max(i-j))
+%   upperbandwidth      upper bandwidth, [i j]=find(A), max(0,max(j-i))
+%   rcm_lowerbandwidth  lower bandwidth after symrcm
+%   rcm_upperbandwidth  upper bandwidth after symrcm
+%
+% amd_lnz and amd_flops are not computed for rectangular matrices.
+%
+% Ordering statistics are not computed for graphs (amd_*), since they are not
+% linear systems.  For directed or undirected graphs (square matrices that
+% represent graph problems), the diagonal is typically not present, but it is
+% implicitly present.  Thus, sprank(A) is always equal to the # of rows, and
+% nblocks is the same as ncc, for these problems.  stats.sprank and
+% stats.nblocks are left as -2.
+%
+% The bandwidth statistics include the Z matrix.  For rectangular matrices,
+% symrcm is not applicable, and the rcm_lowerbandwidth and rcm_upperbandwidth
+% statistics are the same as the unpermuted versions, lowerbandwidth and
+% upperbandwidth, respectively.
+%
+% If a statistic is not computed, it is set to -2.  If an attempt to compute
+% the statistic was made but failed, it is set to -1.
+%
+% See also UFget, UFindex, RBtype, amd, colamd, cs_scc, cs_sqr, dmperm,
+% cholmod2, symrcm
+
+% Copyright 2006-2014, Timothy A. Davis
+
+% Requires the SuiteSparse set of packages: CHOLMOD, RBio, CSparse
+
+%-------------------------------------------------------------------------------
+% ensure the matrix is sparse
+%-------------------------------------------------------------------------------
+
+if (~issparse (A))
+    A = sparse (A) ;
+end
+
+uncomputed = -2 ;
+failure = -1 ;
+
+if (nargin < 5)
+    Z = [ ] ;
+end
+if (nargin < 4)
+    skip_dmperm = 0 ;
+end
+if (nargin < 3)
+    skip_chol = 0 ;
+end
+if (nargin < 2)
+    kind = '' ;
+end
+
+%-------------------------------------------------------------------------------
+% basic stats
+%-------------------------------------------------------------------------------
+
+tic ;
+[m n] = size (A) ;
+stats.nrows = m ;
+stats.ncols = n ;
+stats.nnz = nnz (A) ;
+stats.RBtype = RBtype (A) ;                     % Rutherford/Boeing type
+stats.isBinary = (stats.RBtype (1) == 'p') ;
+stats.isReal = (stats.RBtype (1) ~= 'c') ;
+
+fprintf ('RBtype: %s time: %g\n', stats.RBtype, toc) ;
+
+%-------------------------------------------------------------------------------
+% symmetry and Cholesky candidacy
+%-------------------------------------------------------------------------------
+
+% get the symmetry
+tic ;
+[s xmatched pmatched nzoffdiag nnzdiag] = spsym (A) ;
+if (m ~= n)
+    stats.numerical_symmetry = 0 ;
+    stats.pattern_symmetry = 0 ;
+elseif (nzoffdiag > 0)
+    stats.numerical_symmetry = xmatched / nzoffdiag ;
+    stats.pattern_symmetry = pmatched / nzoffdiag ;
+else
+    stats.numerical_symmetry = 1 ;
+    stats.pattern_symmetry = 1 ;
+end
+psym_A = stats.pattern_symmetry ;   % symmetry of the pattern of A (excluding Z)
+stats.nnzdiag = nnzdiag ;
+stats.cholcand = (s >= 6) ;         % check if Cholesky candidate
+if (nargin >= 5)
+    stats.nzero = nnz (Z) ;
+else
+    stats.nzero = 0 ;
+end
+
+fprintf ('cholcand: %d\n', stats.cholcand) ;
+fprintf ('numerical_symmetry: %g pattern_symmetry: %g time: %g\n', ...
+    stats.numerical_symmetry, stats.pattern_symmetry, toc) ;
+
+% recompute the pattern symmetry with Z included
+tic ;
+if (stats.nzero > 0)
+    AZ = A + Z ;
+else
+    AZ = A ;
+end
+if (m == n && stats.nzero > 0)
+    AZ = A+Z ;
+    if (nnz (AZ) ~= nnz (A) + nnz (Z))
+        error ('A and Z overlap!')
+    end
+    [s xmatched pmatched nzoffdiag] = spsym (AZ) ;
+    if (nzoffdiag > 0)
+        stats.pattern_symmetry = pmatched / nzoffdiag ;
+    else
+        stats.pattern_symmetry = 1 ;
+    end
+end
+fprintf ('numerical_symmetry: %g pattern_symmetry: %g time: %g\n', ...
+    stats.numerical_symmetry, stats.pattern_symmetry, toc) ;
+
+%-------------------------------------------------------------------------------
+% bandwidth (includes explicit zeros)
+%-------------------------------------------------------------------------------
+
+[i j] = find (AZ) ;
+stats.lowerbandwidth = max (0, max (i-j)) ;
+stats.upperbandwidth = max (0, max (j-i)) ;
+clear i j
+fprintf ('lo %d up %d ', ...
+    stats.lowerbandwidth, stats.upperbandwidth) ;
+% now with symrcm, if the matrix is square
+stats.rcm_lowerbandwidth = stats.lowerbandwidth ;
+stats.rcm_upperbandwidth = stats.upperbandwidth ;
+if (m == n)
+    try
+        p = symrcm (AZ) ;
+        [i j] = find (AZ (p,p)) ;
+        stats.rcm_lowerbandwidth = max (0, max (i-j)) ;
+        stats.rcm_upperbandwidth = max (0, max (j-i)) ;
+    catch
+        fprintf ('================ symrcm failed ') ;
+        stats.rcm_lowerbandwidth = failure ;
+        stats.rcm_upperbandwidth = failure ;
+    end
+    fprintf ('rcm: lo %d up %d', ...
+        stats.rcm_lowerbandwidth, stats.rcm_upperbandwidth) ;
+end
+clear AZ i j p
+
+%-------------------------------------------------------------------------------
+% isND
+%-------------------------------------------------------------------------------
+
+s = 0 ;
+if (~isempty (strfind (kind, 'structural')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'fluid')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, '2D')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'reduction')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'electromagnetics')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'semiconductor')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'thermal')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'materials')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'acoustics')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'vision')))
+    s = 1 ;
+elseif (~isempty (strfind (kind, 'robotics')))
+    s = 1 ;
+end
+stats.isND = s ;
+
+fprintf ('isND %d\n', stats.isND) ;
+
+%-------------------------------------------------------------------------------
+% determine if this is a graph (directed, undirected, or bipartite)
+%-------------------------------------------------------------------------------
+
+if (~isempty (strfind (kind, 'graph')) && isempty (strfind (kind, 'graphics')))
+    % this is a directed, undirected, or bipartite graph.
+    % it might also be a multigraph, and weighted or unweighted.
+    stats.isGraph = 1 ;
+else
+    stats.isGraph = 0 ;
+end
+
+fprintf ('isGraph %d\n', stats.isGraph) ;
+
+%-------------------------------------------------------------------------------
+% determine if positive definite
+%-------------------------------------------------------------------------------
+
+fprintf ('start Cholesky\n') ;
+tic ;
+if (~stats.cholcand)
+
+    % not a candidate for Cholesky, so it cannot be positive definite
+    fprintf ('not a Cholesky candidate\n') ;
+    stats.posdef = 0 ;
+
+elseif (stats.isBinary)
+
+    % For all symmetric binary matrices:  only identity matrices are positive
+    % definite.  All others are indefinite.  Since at this point, A is a
+    % Cholesky candidate, and thus we know that A is symmetric with a zero-free
+    % diagonal.  So just a quick check of nnz(A) is needed.
+    % See: McKay et al, "Acyclic Digraphs and Eigenvalues of (0,1)-Matrices",
+    % Journal of Integer Sequences, Vol. 7 (2004), Article 04.3.3.
+    % http://www.cs.uwaterloo.ca/journals/JIS/VOL7/Sloane/sloane15.html
+
+    stats.posdef = (stats.nnz == stats.nrows) ;
+
+elseif (skip_chol)
+
+    % Cholesky was skipped
+    fprintf ('skip Cholesky\n') ;
+    stats.posdef = uncomputed ;
+
+else
+
+    % try chol
+    try
+        [x, cstats] = cholmod2 (A, ones (stats.ncols,1)) ;
+        rcond = cstats (1) ;
+        fprintf ('rcond: %g\n', rcond) ;
+        stats.posdef = (rcond > 0) ;
+    catch
+        % chol failed
+        disp (lasterr) ;
+        fprintf ('sparse Cholesky failed\n') ;
+        stats.posdef = failure ;
+    end
+    clear x cstats
+end
+
+fprintf ('posdef: %d time: %g\n', stats.posdef, toc) ;
+
+%-------------------------------------------------------------------------------
+% transpose A if m < n, for ordering methods
+%-------------------------------------------------------------------------------
+
+tic ;
+if (m < n)
+    try
+        A = A' ;            % A is now tall and thin, or square
+    catch
+        disp (lasterr) ;
+        fprintf ('transpose failed...\n') ;
+        return ;
+    end
+    [m n] = size (A) ;
+end
+if (~isreal (A))
+    try
+        A = spones (A) ;
+    catch
+        disp (lasterr) ;
+        fprintf ('conversion from complex failed...\n') ;
+        return ;
+    end
+end
+fprintf ('computed A transpose if needed, time: %g\n', toc) ;
+
+%-------------------------------------------------------------------------------
+% order entire matrix with AMD, if square
+%-------------------------------------------------------------------------------
+
+if (m == n && ~stats.isGraph)
+
+    tic ;
+    try
+        if (psym_A < 1)
+            C = A|A' ;      % A has unsymmetric pattern, so symmetrize it
+        else
+            C = A ;         % A already has symmetric pattern
+        end
+    catch
+        disp (lasterr) ;
+        fprintf ('A+A'' failed\n') ;
+    end
+    fprintf ('computed A+A'', time: %g\nstart AMD\n', toc) ;
+
+    tic ;
+    try
+        p = amd (C) ;
+        c = symbfact (C (p,p)) ;
+        stats.amd_lnz = sum (c) ;           % nnz (chol (C))
+        stats.amd_flops = sum (c.^2) ;      % flop counts for chol (C)
+    catch
+        disp (lasterr) ;
+        fprintf ('amd failed\n') ;
+        stats.amd_lnz = failure ;
+        stats.amd_flops = failure ;
+    end
+    clear p c C
+    fprintf ('AMD lnz %d flops %g time: %g\n', ...
+        stats.amd_lnz, stats.amd_flops, toc) ;
+
+else
+
+    % not computed if rectangular, or for graph problems
+    stats.amd_lnz = uncomputed ;
+    stats.amd_flops = uncomputed ;
+    fprintf ('AMD skipped\n') ;
+
+end
+
+%-------------------------------------------------------------------------------
+% order entire matrix with COLAMD, for LU bounds
+%-------------------------------------------------------------------------------
+
+if (~stats.isGraph)
+
+    fprintf ('start colamd:\n') ;
+    tic ;
+    try
+        q = colamd (A) ;
+        [vnz,rnz] = cs_sqr (A (:,q)) ;
+        stats.amd_rnz = rnz ;   % nnz (V), upper bound on L, for A(:,colamd(A))
+        stats.amd_vnz = vnz ;   % nnz (R), upper bound on U, for A(:,colamd(A))
+    catch
+        disp (lasterr) ;
+        fprintf ('colamd2 and cs_sqr failed\n') ;
+        stats.amd_vnz = failure ;
+        stats.amd_rnz = failure ;
+    end
+    clear q
+    fprintf ('COLAMD rnz %d vnz %d time: %g\n', ...
+        stats.amd_rnz, stats.amd_vnz, toc) ;
+
+else
+
+    % not computed for graph problems
+    stats.amd_rnz = uncomputed ;
+    stats.amd_vnz = uncomputed ;
+    fprintf ('COLAMD skipped\n') ;
+
+end
+
+%-------------------------------------------------------------------------------
+% strongly connected components
+%-------------------------------------------------------------------------------
+
+tic ;
+fprintf ('start scc:\n') ;
+try
+    % find the # of strongly connected components of the graph of a square A,
+    % or # of connected components of the bipartite graph of a rectangular A.
+    if (m == n)
+        [p r] = cs_scc (A) ;
+    else
+        [p r] = cs_scc (spaugment (A)) ;
+    end
+    stats.ncc = length (r) - 1 ;
+    clear p r
+catch
+    disp (lasterr) ;
+    fprintf ('cs_scc failed\n') ;
+    stats.ncc = failure ;
+end
+fprintf ('scc %d, time: %g\n', stats.ncc, toc) ;
+
+%-------------------------------------------------------------------------------
+% Dulmage-Mendelsohn permutation, and order each block
+%-------------------------------------------------------------------------------
+
+tic ;
+if (m == n && stats.isGraph && isempty (strfind (kind, 'bipartite')))
+    % for directed and undirected graphs (square matrices), the diagonal is
+    % implicitly present.  Thus, nblocks is the same as ncc, and the graph has
+    % full sprank.  dmperm *is* computed for bipartite graphs, however.
+    skip_dmperm = 1 ;
+end
+
+if (skip_dmperm)
+
+    fprintf ('skip dmperm\n') ;
+    stats.nblocks = uncomputed ;
+    stats.sprank = uncomputed ;
+
+else
+
+    try
+        % find the Dulmage-Mendelsohn decomposition
+        fprintf ('start dmperm:\n') ;
+        % [p,q,r,s,cc,rr] = cs_dmperm (A) ;
+        [p,q,r,s,cc,rr] = dmperm (A) ;
+        nblocks = length (r) - 1 ;
+        stats.nblocks = nblocks ;   % # of blocks in block-triangular form
+        stats.sprank = rr(4)-1 ;    % structural rank
+    catch
+        disp (lasterr) ;
+        fprintf ('dmperm failed\n') ;
+        stats.nblocks = failure ;
+        stats.sprank = failure ;
+    end
+end
+
+fprintf ('nblocks %d\n', stats.nblocks) ;
+fprintf ('sprank %d, time: %g\n', stats.sprank, toc) ;
+fprintf ('UFstats done\n') ;
+
diff --git a/MATLAB_Tools/UFcollection/UFwrite.m b/MATLAB_Tools/UFcollection/UFwrite.m
new file mode 100644
index 0000000..7f3e397
--- /dev/null
+++ b/MATLAB_Tools/UFcollection/UFwrite.m
@@ -0,0 +1,439 @@
+function UFwrite (Problem, Master, arg3, arg4)
+%UFWRITE write a Problem in Matrix Market or Rutherford/Boeing format
+% containing a set of text files in either Matrix Market or Rutherford/Boeing
+% format.  The Problem can be read from the files back into MATLAB via UFread.
+% See http://www.suitesparse.com for the UF Sparse Matrix Collection home page.
+% The Problem directory is optionally compressed via tar and gzip.  Arguments 3
+% and 4, below, are optional and can appear in any order.
+%
+%    UFwrite (Problem)          % Matrix Market format, no tar, use current dir.
+%
+% The following usages write the Problem into the Master/Group/Name directory,
+% where Problem.name = 'Group/Name' is given in the Problem.
+%
+%    UFwrite (Problem, Master)                 % Matrix Market, no tar
+%    UFwrite (Problem, Master, 'MM')           % ditto
+%    UFwrite (Problem, Master, 'RB')           % Rutherford/Boeing, no tar
+%    UFwrite (Problem, Master, 'tar')          % Matrix Market, with tar
+%    UFwrite (Problem, Master, 'MM', 'tar')    % ditto
+%    UFwrite (Problem, Master, 'RB', 'tar')    % Rutherford/Boeing, with tar
+%
+% Problem is a struct, in the UF Sparse Matrix format (see below).  Master is
+% the top-level directory in which directory containing the problem will be
+% placed.  Master defaults to the current working directory if not present (an
+% empty string also means the current directory will be used).
+%
+% The following fields are always present in a UF Sparse Matrix Problem:
+%
+%       name    the group directory and problem name (i.e. 'HB/arc130')
+%
+%       title   short descriptive title
+%
+%       A       an m-by-n sparse matrix, real or complex
+%
+%       id      an integer in the range of 1 to the # of problems in the
+%               collection.  Once assigned, the id never changes.
+%
+%       date    a string containing the date the matrix was created, or added
+%               to the collection if the creating date is unknown (but is likely
+%               close to the creation date); empty string otherwise.
+%
+%       author  a string containing the name of the author; the computational
+%               scientist who created the matrix from his or her application.
+%               Empty string, or "author unknown" if unknown.
+%
+%       ed      a string containing the name of the editor/collector; the person
+%               who acquired the matrix from the author, for inclusion in this
+%               (or other) sparse matrix / graph collections.
+%
+%       kind    a string (i.e. 'directed graph') describing the type of problem;
+%               a list of words from a well-defined set (see the UF Sparse
+%               Matrix Collection home page for a description).
+%
+% A Problem struct may also have the following optional fields.
+%
+%       Zeros   pattern of explicit zero entries in A as a binary m-by-n matrix.
+%               These entries are provided by the matrix submittor with zero
+%               numerical value.  MATLAB drops explicit zero entries from any
+%               sparse matrix.  These entries can be important to the problem,
+%               if (for example) the matrix is first in a series of matrices
+%               arising in a nonlinear solver (those entries will become nonzero
+%               later).  These entries are thus kept in the binary matrix Zeros.
+%
+%       b       right-hand-side, any size, real or complex, full or sparse
+%
+%       x       supposed solution to A*x=b, any size, real or complex, full or
+%               sparse
+%
+%       notes   a character array with notes about the problem.
+%
+%       aux     a struct, containing auxiliary information.  The contents of
+%               this struct are problem dependent, but its fields must not
+%               end with '_[0-9]*' where [0-9]* means zero or more digits, nor
+%               can there be an aux.b or aux.x matrix (there can be aux.b
+%               and aux.x cells).  The aux struct must not include any structs,
+%               just matrices and cell arrays of matrices.  The matrices in aux
+%               can be full or sparse, and real, complex, or char.
+%
+% -------------------------------------------------
+% for Problems written in Rutherford/Boeing format:
+% -------------------------------------------------
+%
+% The Problem.name (including the full 'Group/Name'), date, author, and editor
+% define the Rutherford/Boeing title (first line of the file), followed by a
+% '|' in the 72nd column, and then up to 8 characters of the key.  If the key
+% is an empty string, the Problem.id is used as the key.  The A and Zeros
+% matrices are merged and written to this file.  The full name, title, id,
+% kind, date, author, editor, and notes are written to a file of the same name
+% as the primary file, but with a .txt extension.
+%
+% Additional Rutherford/Boeing files are created for b, x, and each sparse
+% matrix in aux.  Full arrays are written using a tiny subset of the Matrix
+% Market format.  The first line of the file is the header, either of:
+%
+%   %%MatrixMarket matrix array real general
+%   %%MatrixMarket matrix array complex general
+%
+% The 2nd row contains the # of rows and columns, and subsequent lines contain
+% one matrix entry each (two values if complex) listed in column-major order.
+% No comments or blank lines are permitted.  The header is ignored when the
+% matrix is read back in by UFread; the real/complex case is determined by how
+% many entries appear on each line.  You can of course read these files with
+% mread, the Matrix Market reader.  The header is added only to make it easier
+% for functions *other* than UFread to read and understand the data (the file
+% can be read in by mread, for example, but mread is not required).  Thus, a
+% complete Rutherord/Boeing directory can be read/written via UFread/UFwrite,
+% without requiring the installation of mread/mwrite (in CHOLMOD), or
+% mmread/mmread (M-file functions from NIST that read/write a Matrix Market
+% file).
+%
+% ---------------------------------------------
+% for Problems written in Matrix Market format:
+% ---------------------------------------------
+%
+% The name, title, A, id, Zeros, kind, date, author, editor, and notes fields of
+% the Problem are written to the primary Matrix Market file, with a .mtx
+% extension.  Additional Matrix Market files are created for b (as name_b),
+% x (as name_x), and each sparse or full matrix in aux.
+%
+% -----------------
+% for both formats:
+% -----------------
+%
+% A matrix Problem.aux.whatever is written out as name_whatever.xxx, without
+% the 'aux' part.  If Problem.aux.whatever is a char array, it is written as
+% the file name_whatever.txt, with one line per row of the char array (trailing
+% spaces in each line are not printed).  If aux.whatever is a cell array, each
+% entry aux.whatever{i} is written as the file name_whatever_<i>.xxx
+% (name_whatever_1.mtx, name_whatever_2.mtx, etc).  All files are placed in the
+% single directory, given by the Problem.name (Group/Name, or 'HB/arc130' for
+% example).  Each directory can only hold one MATLAB Problem struct of the UF
+% Sparse Matrix Collection.
+%
+% Example:
+%
+%   Problem = UFget ('HB/arc130')   % get the HB/arc130 MATLAB Problem
+%   UFwrite (Problem) ;             % write a MM version in current directory
+%   UFwrite (Problem, 'MM') ;       % write a MM version in MM/HB/arc130
+%   UFwrite (Problem, '', 'RB') ;   % write a RB version in current directory
+%
+% See also mwrite, mread, RBwrite, RBread, UFread, UFget, tar
+
+% Optionally uses the CHOLMOD mwrite mexFunction, for writing Problems in
+% Matrix Market format.
+
+% Copyright 2006-2007, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% check inputs
+%-------------------------------------------------------------------------------
+
+if (nargin < 2)
+    % place the result in the current directory
+    Master = '' ;
+end
+if (nargin < 3)
+    arg3 = '' ;
+end
+if (nargin < 4)
+    arg4 = '' ;
+end
+arg3 = lower (arg3) ;
+arg4 = lower (arg4) ;
+
+do_tar = (strcmp (arg3, 'tar') | strcmp (arg4, 'tar')) ;
+RB = (strcmp (arg3, 'rb') | strcmp (arg4, 'rb')) ;
+
+Master = regexprep (Master, '[\/\\]', '/') ;
+if (~isempty (Master) && Master (end) ~= '/')
+    Master = [Master '/'] ;
+end
+
+%-------------------------------------------------------------------------------
+% create the problem directory.  Do not report any errors
+%-------------------------------------------------------------------------------
+
+t = find (Problem.name == '/') ;
+group = Problem.name (1:t-1) ;
+name = Problem.name (t+1:end) ;
+groupdir = [Master group] ;
+probdir = [groupdir '/' name] ;
+probname = [probdir '/' name] ;
+
+s = warning ('query', 'MATLAB:MKDIR:DirectoryExists') ;	    % get current state
+warning ('off', 'MATLAB:MKDIR:DirectoryExists') ;
+mkdir (groupdir) ;
+mkdir (probdir) ;
+warning (s) ;						    % restore state
+
+%-------------------------------------------------------------------------------
+% write the name, title, id, kind, date, author, ed, list of fields, and notes
+%-------------------------------------------------------------------------------
+
+cfile = [probname '.txt'] ;
+if (RB)
+    prefix = '%' ;
+else
+    prefix = '' ;
+end
+cf = fopen (cfile, 'w') ;
+print_header (cf, prefix, Problem.name) ;
+fprintf (cf, '%s [%s]\n', prefix, Problem.title) ;
+fprintf (cf, '%s id: %d\n', prefix, Problem.id) ;
+fprintf (cf, '%s date: %s\n', prefix, Problem.date) ;
+fprintf (cf, '%s author: %s\n', prefix, Problem.author) ;
+fprintf (cf, '%s ed: %s\n', prefix, Problem.ed) ;
+fprintf (cf, '%s fields:', prefix) ;
+s = fields (Problem) ;
+for k = 1:length(s)
+    fprintf (cf, ' %s', s {k}) ;
+end
+fprintf (cf, '\n') ;
+if (isfield (Problem, 'aux'))
+    aux = Problem.aux ; 
+    fprintf (cf, '%s aux:', prefix) ;
+    auxfields = fields (aux) ;
+    for k = 1:length(auxfields)
+	fprintf (cf, ' %s', auxfields {k}) ;
+    end
+    fprintf (cf, '\n') ;
+else
+    auxfields = { } ;
+end
+fprintf (cf, '%s kind: %s\n', prefix, Problem.kind) ;
+print_separator (cf, prefix) ;
+if (isfield (Problem, 'notes'))
+    fprintf (cf, '%s notes:\n', prefix) ;
+    for k = 1:size (Problem.notes,1)
+	fprintf (cf, '%s %s\n', prefix, Problem.notes (k,:)) ;
+    end
+    print_separator (cf, prefix) ;
+end
+fclose(cf) ;
+
+%-------------------------------------------------------------------------------
+% write out the A and Z matrices to the RB or MM primary file
+%-------------------------------------------------------------------------------
+
+A = Problem.A ;
+[m n] = size (A) ;
+if (~issparse (A) || m == 0 || n == 0)
+    error ('A must be sparse and non-empty') ;
+end
+if (isfield (Problem, 'Zeros'))
+    Z = Problem.Zeros ;
+    if (any (size (A) ~= size (Z)) || ~isreal (Z) || ~issparse (Z))
+	error ('Zeros must have same size as A, and be sparse and real') ;
+    end
+else
+    Z = [ ] ;
+end
+
+% use the Problem.id number as the RB key
+key = sprintf ('%d', Problem.id) ;
+
+if (RB)
+    % write the files in Rutherford/Boeing form
+    ptitle = [Problem.name '; ' Problem.date '; ' etal(Problem.author)] ;
+    ptitle = [ptitle '; ed: ' etal(Problem.ed)] ;
+    % note that b, g, and x are NOT written to the RB file
+    RBwrite ([probname '.rb'], A, Z, ptitle, key) ;
+else
+    % write the files in Matrix Market form
+    mwrite ([probname '.mtx'], A, Z, cfile) ;
+    delete (cfile) ;    % the comments file has been included in the .mtx file.
+end
+
+%-------------------------------------------------------------------------------
+% write out the b and x matrices as separate files
+%-------------------------------------------------------------------------------
+
+if (isfield (Problem, 'b'))
+    write_component (probname, Problem.name, 'b', Problem.b, cfile, ...
+	prefix, RB, [key 'b']) ;
+end
+if (isfield (Problem, 'x'))
+    write_component (probname, Problem.name, 'x', Problem.x, cfile, ...
+	prefix, RB, [key 'x']) ;
+end
+
+%-------------------------------------------------------------------------------
+% write out each component of aux, each in a separate file
+%-------------------------------------------------------------------------------
+
+for k = 1:length(auxfields)
+    what = auxfields {k} ;
+    X = aux.(what) ;
+
+    if (~iscell (X) && (strcmp (what, 'b') || strcmp (what, 'x')))
+	% aux.b or aux.x would get written out with the same filename as the
+	% Problem.b and Problem.x matrices, and read back in by UFread as
+	% Problem.b and Problem.x instead of aux.b and aux.x.
+	error (['invalid aux component: ' what]) ;
+    end
+
+    if (regexp (what, '_[0-9]*\>'))
+	% aux.whatever_42 would be written as the file name_whatever_42, which
+	% would be intrepretted as aux.whatever{42} when read back in by UFread.
+	error (['invalid aux component: ' what]) ;
+    end
+
+    if (iscell (X))
+	len = length (X) ;
+	for i = 1:len
+	    % this problem includes a sequence of matrices in the new
+	    % format (kind = 'sequence', and Problem.id > 1377).
+	    write_component (probname, Problem.name, ...
+		sprintf (fmt (i, len), what, i) , X{i}, cfile, ...
+		prefix, RB, [key what(1) sprintf('%d', i)]) ;
+	end
+    else
+	% This is a non-cell component of aux.  For an LP problem, this might
+	% be c, lo, or hi.  For an Oberwolfach model reduction problem, this
+	% might be M, C, or E.  For a graph in the Pajek collection, it could
+	% be a vector 'year', with the publication of each article in the graph.
+	% The possibilities are endless, and problem dependent.  Adding new
+	% components to aux can be done without modifying UFread or UFwrite.
+	write_component (probname, Problem.name, what, X, cfile, ...
+	    prefix, RB, [key what]) ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% tar up the result, if requested
+%-------------------------------------------------------------------------------
+
+if (do_tar)
+    try
+	tar ([probdir '.tar.gz'], probdir) ;
+	rmdir (probdir, 's') ;
+    catch
+	warning ('SuiteSparse:UFwrite', ...
+	    'unable to create tar file; directly left uncompressed') ;
+    end
+end
+
+
+
+%-------------------------------------------------------------------------------
+% fmt
+%-------------------------------------------------------------------------------
+
+function s = fmt (i, len)
+% fmt: determine the format to use for the name of component in a aux.cell array
+if (len < 10)
+    s = '%s_%d' ;		% x1 through x9
+elseif (len < 100)
+    if (i < 10)
+	s = '%s_0%d' ;		% x01 through x09
+    else
+	s = '%s_%d' ;		% x10 through x99
+    end
+else
+    if (i < 10)
+	s = '%s_00%d' ;		% x001 through x009
+    elseif (i < 100)
+	s = '%s_0%d' ;		% x010 through x099
+    else
+	s = '%s_%d' ;		% x100 through x999
+    end
+end
+
+
+%-------------------------------------------------------------------------------
+% write_component
+%-------------------------------------------------------------------------------
+
+function write_component (probname, name, what, X, cfile, prefix, RB, key)
+% write_component: write out a single component of the Problem to a file
+if (isempty (X))
+    % empty matrices (one or more zero dimensions) are not supported
+    error (['invalid component: ' what ' (cannot be empty)']) ;
+elseif (ischar (X))
+    % Write out a char array as a text file.  Remove trailing spaces from the
+    % strings.  Keep the leading spaces; they might be significant.
+    ff = fopen ([probname '_' what '.txt'], 'w') ;
+    for i = 1:size (X,1)
+	fprintf (ff, '%s\n', deblank (X (i,:))) ;
+    end
+    fclose (ff) ;
+elseif (RB)
+    % write out a full or sparse matrix in Rutherford/Boeing format
+    if (issparse (X))
+	% write out the component as a Rutherford/Boeing sparse matrix
+	RBwrite ([probname '_' what '.rb'], X, [ ], [name '_' what], key) ;
+    else
+	% Write out a full matrix in column oriented form,
+	% using a tiny subset of the Matrix Market format for full matrices.
+	UFfull_write ([probname '_' what '.mtx'], X) ;
+    end
+else
+    % write out the component in Matrix Market format (full or sparse)
+    cf = fopen (cfile, 'w') ;
+    print_header (cf, prefix, name, what) ;
+    print_separator (cf, prefix) ;
+    fclose(cf) ;
+    mwrite ([probname '_' what '.mtx'], X, cfile) ;
+    delete (cfile) ;
+end
+
+
+%-------------------------------------------------------------------------------
+% print_separator
+%-------------------------------------------------------------------------------
+
+function print_separator (cf, prefix)
+% print_separator: print a separator line in the comment file
+fprintf (cf, '%s---------------------------------------', prefix) ;
+fprintf (cf, '----------------------------------------\n') ;
+
+
+%-------------------------------------------------------------------------------
+% print_header
+%-------------------------------------------------------------------------------
+
+function print_header (cf, prefix, name, what)
+% print_header: print the header to the comment file
+print_separator (cf, prefix) ;
+fprintf (cf, '%s UF Sparse Matrix Collection, Tim Davis\n', prefix) ;
+fprintf (cf, '%s http://www.cise.ufl.edu/research/sparse/matrices/%s\n', ...
+    prefix, name) ;
+fprintf (cf, '%s name: %s', prefix, name) ;
+if (nargin > 3)
+    fprintf (cf, ' : %s matrix', what) ;
+end
+fprintf (cf, '\n') ;
+
+
+%-------------------------------------------------------------------------------
+% etal
+%-------------------------------------------------------------------------------
+
+function s = etal(name)
+% etal: change a long list of authors to first author 'et al.'
+t = find (name == ',') ;
+if (length (t) > 1)
+    s = [name(1:t(1)-1) ' et al.'] ;
+else
+    s = name ;
+end
diff --git a/UFcollection/dsxy2figxy.m b/MATLAB_Tools/UFcollection/dsxy2figxy.m
similarity index 100%
rename from UFcollection/dsxy2figxy.m
rename to MATLAB_Tools/UFcollection/dsxy2figxy.m
diff --git a/MATLAB_Tools/dimacs10/Contents.m b/MATLAB_Tools/dimacs10/Contents.m
new file mode 100644
index 0000000..ade387c
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/Contents.m
@@ -0,0 +1,8 @@
+% DIMACS10
+%
+% Requires UFget, the MATLAB interface to the UF Sparse Matrix Collection
+%
+%   dimacs10         - returns a graph from the DIMACS10 test set, via the UF Collection.
+%   dimacs10_demo    - reads in all 138 DIMACS10 graphs.
+%   dimacs10_install - compiles and installs dimacs10 for use in MATLAB.
+%   metis_graph_read - reads a graph file in METIS format into a MATLAB sparse matrix.
diff --git a/MATLAB_Tools/dimacs10/adjnoun.graph b/MATLAB_Tools/dimacs10/adjnoun.graph
new file mode 100644
index 0000000..d26ea7f
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/adjnoun.graph
@@ -0,0 +1,113 @@
+112 425 0
+2 3 4 
+1 3 10 15 18 19 20 29 42 46 47 52 92 103 
+1 2 4 10 12 15 18 22 23 24 25 26 27 28 32 35 37 42 43 46 51 52 55 67 74 84 94 98 99 103 105 106 112 
+1 3 10 11 19 42 44 52 86 
+6 90 
+5 7 18 28 33 40 44 
+6 8 33 52 53 56 
+7 16 18 22 38 39 52 71 76 88 107 
+10 
+2 3 4 9 13 18 25 26 27 40 41 43 60 61 62 63 90 
+4 12 13 51 
+3 11 41 64 70 99 105 
+10 11 18 19 44 51 88 89 103 105 
+15 16 17 18 19 103 
+2 3 14 17 18 26 37 38 60 69 72 106 
+8 14 18 33 39 44 49 76 77 80 89 105 
+14 15 69 
+2 3 6 8 10 13 14 15 16 22 23 25 26 27 28 29 32 33 35 36 37 38 39 44 45 51 52 53 55 66 67 68 71 73 78 81 83 84 85 86 87 88 89 90 94 99 103 104 105 
+2 4 13 14 22 30 35 44 45 51 52 54 55 61 
+2 21 22 23 24 25 26 27 28 
+20 44 80 95 109 
+3 8 18 19 20 29 44 49 51 52 
+3 18 20 46 95 
+3 20 44 48 52 60 70 106 
+3 10 18 20 37 44 48 50 69 76 77 88 104 105 109 
+3 10 15 18 20 31 42 47 49 52 60 78 89 105 
+3 10 18 20 44 52 57 69 80 81 105 
+3 6 18 20 44 53 55 64 69 77 80 81 88 97 104 
+2 18 22 30 31 32 33 34 35 36 45 90 93 
+19 29 59 75 80 
+26 29 52 80 85 93 
+3 18 29 33 42 44 52 80 87 104 105 109 
+6 7 16 18 29 32 52 53 71 101 
+29 77 85 105 108 
+3 18 19 29 52 55 108 
+18 29 49 52 72 105 
+3 15 18 25 44 56 88 
+8 15 18 39 48 58 59 60 73 104 
+8 16 18 38 40 41 42 52 105 
+6 10 39 44 104 
+10 12 39 57 
+2 3 4 26 32 39 43 44 
+3 10 42 52 57 80 91 
+4 6 13 16 18 19 21 22 24 25 27 28 32 37 40 42 45 49 60 64 67 71 81 82 84 99 100 101 
+18 19 29 44 46 51 103 
+2 3 23 45 53 74 
+2 26 105 
+24 25 38 49 50 
+16 22 26 36 44 48 51 77 89 105 
+25 48 52 60 69 
+3 11 13 18 19 22 45 49 52 53 54 55 79 103 105 
+2 3 4 7 8 18 19 22 24 26 27 31 32 33 35 36 39 43 50 51 55 58 60 67 68 69 102 107 
+7 18 28 33 46 51 57 
+19 51 55 74 90 103 
+3 18 19 28 35 51 52 54 69 71 73 76 79 
+7 37 71 
+27 41 43 53 
+38 52 76 
+30 38 
+10 15 24 26 38 44 50 52 66 71 72 73 105 
+10 19 72 77 102 
+10 105 
+10 72 
+12 28 44 65 66 
+64 
+18 60 64 85 88 104 
+3 18 44 52 73 76 103 
+18 52 77 88 
+15 17 25 27 28 50 52 55 71 74 76 85 
+12 24 
+8 18 33 44 55 56 60 69 76 88 103 106 
+15 36 60 61 63 74 
+18 38 55 60 67 81 106 
+3 46 54 69 72 77 104 
+30 
+8 16 25 55 58 67 69 71 77 78 
+16 25 28 34 49 61 68 74 76 81 93 107 
+18 26 76 
+51 55 80 
+16 21 27 28 30 31 32 43 79 82 84 110 111 
+18 27 28 44 73 77 82 107 
+44 80 81 95 99 105 
+18 
+3 18 44 80 88 
+18 31 34 66 69 105 
+4 18 
+18 32 
+8 13 18 25 28 37 66 68 71 84 
+13 16 18 26 49 107 
+5 10 18 29 54 93 100 
+43 
+2 
+29 31 77 90 96 97 
+3 18 
+21 23 82 
+93 
+28 93 107 
+3 
+3 12 18 44 82 
+44 90 
+33 44 111 
+52 61 
+2 3 13 14 18 45 51 54 67 71 
+18 25 28 32 38 40 66 74 105 
+3 12 13 16 18 25 26 27 32 34 36 39 47 49 51 60 62 82 85 104 106 
+3 15 24 71 73 105 109 
+8 52 77 81 89 97 
+34 35 
+21 25 32 106 
+80 
+80 101 
+3 
diff --git a/MATLAB_Tools/dimacs10/bad1.graph b/MATLAB_Tools/dimacs10/bad1.graph
new file mode 100644
index 0000000..990d5a0
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad1.graph
@@ -0,0 +1,9 @@
+% invalid METIS *.graph (negative node weights), mangled version of fig8d.graph
+7 11 10 3
+-1 2 0 5 3 2
+0 2 2 1 3 4
+4 1 1 5 4 2 1
+2 2 3 2 3 6 7
+1 1 1 1 3 6
+2 2 1 5 4 7
+1 2 1 6 4
diff --git a/MATLAB_Tools/dimacs10/bad2.graph b/MATLAB_Tools/dimacs10/bad2.graph
new file mode 100644
index 0000000..356179a
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad2.graph
@@ -0,0 +1,9 @@
+% invalid graph (zero edge weights).  mangled version of fig8c.graph
+7 11 11
+4 5 1 3 2 2 0
+2 1 1 3 2 4 1
+5 5 3 4 2 2 2 1 2
+3 2 1 3 2 6 2 7 5
+1 1 1 3 3 6 2
+6 5 2 4 2 7 6
+2 6 6 4 5
diff --git a/MATLAB_Tools/dimacs10/bad3.graph b/MATLAB_Tools/dimacs10/bad3.graph
new file mode 100644
index 0000000..fc421ed
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad3.graph
@@ -0,0 +1,10 @@
+% invalid graph: multiple edges: (1,5) appears twice
+% mangled version of fig8a.graph
+7 12
+5 3 2 5
+1 3 4
+5 4 2 1
+2 3 6 7
+1 1 3 6
+5 4 7
+6 4
diff --git a/MATLAB_Tools/dimacs10/bad4.graph b/MATLAB_Tools/dimacs10/bad4.graph
new file mode 100644
index 0000000..ebc3065
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad4.graph
@@ -0,0 +1,9 @@
+% invalid graph: (1,1) self edge.  mangled version of fig8a.graph
+7 12
+5 3 2 1
+1 3 4
+5 4 2 1
+2 3 6 7
+1 3 6
+5 4 7
+6 4
diff --git a/MATLAB_Tools/dimacs10/bad5.graph b/MATLAB_Tools/dimacs10/bad5.graph
new file mode 100644
index 0000000..6b6db51
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad5.graph
@@ -0,0 +1,9 @@
+% invalid graph (unsymmetric).  mangled version of fig8a.graph
+7 11
+5 3 4
+1 3 4
+5 4 2 1
+2 3 6 7
+1 3 6
+5 4 7
+6 4
diff --git a/MATLAB_Tools/dimacs10/bad6.graph b/MATLAB_Tools/dimacs10/bad6.graph
new file mode 100644
index 0000000..5dcda6d
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad6.graph
@@ -0,0 +1,2 @@
+% invalid header
+-1 0
diff --git a/MATLAB_Tools/dimacs10/bad7.graph b/MATLAB_Tools/dimacs10/bad7.graph
new file mode 100644
index 0000000..a3e53a9
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad7.graph
@@ -0,0 +1,9 @@
+% invalid graph (missing node weights).  mangled version of fig8d.graph
+7 11 10 3
+1 2
+0 2 2 1 3 4
+4 1 1 5 4 2 1
+2 2 3 2 3 6 7
+1 1 1 1 3 6
+2 2 1 5 4 7
+1 2 1 6 4
diff --git a/MATLAB_Tools/dimacs10/bad8.graph b/MATLAB_Tools/dimacs10/bad8.graph
new file mode 100644
index 0000000..03813e6
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad8.graph
@@ -0,0 +1,9 @@
+% invalid graph (node number out of range).  mangled version of fig8a.graph
+7 11
+5 3 0
+1 3 4
+5 4 2 1
+2 3 6 7
+1 3 6
+5 4 7
+6 4
diff --git a/MATLAB_Tools/dimacs10/bad9.graph b/MATLAB_Tools/dimacs10/bad9.graph
new file mode 100644
index 0000000..8cd2290
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/bad9.graph
@@ -0,0 +1,9 @@
+% invalid graph (missing edge weight).  mangled version of fig8b.graph
+7 11 1
+5 1 3 2 2
+1 1 3 2 4 1
+5 3 4 2 2 2 1 2
+2 1 3 2 6 2 7 5
+1 1 3 3 6 2
+5 2 4 2 7 6
+6 6 4 5
diff --git a/MATLAB_Tools/dimacs10/dimacs10.m b/MATLAB_Tools/dimacs10/dimacs10.m
new file mode 100644
index 0000000..8dedcd8
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/dimacs10.m
@@ -0,0 +1,654 @@
+function [S name kind Problem] = dimacs10 (matrix)
+%DIMACS10 returns a graph from the DIMACS10 test set, via the UF Collection.
+% The original graphs are at http://www.cc.gatech.edu/dimacs10 ; this function
+% downloads them from the UF Sparse Matrix Collection, converting them as
+% needed.
+%
+%   [S name kind Problem] = dimacs10 (matrix) ;
+%   index = dimacs10 ;
+%
+% matrix: either an integer in the range 1:212 (the number of graphs in the
+%       DIMACS10 collection), or a string with the name of a DIMACS10 graph.
+%
+% S: adjacency matrix of the DIMACS10 graph.
+% name: DIMACS10 name of the graph.  The name of the graph in
+%       the UF Collection is Problem.name.
+% kind: a string describing the DIMACS10 graph:
+%       'undirected multigraph'.  S(i,j) is the # of edges (i,j).  Only a
+%           multigraph can have self-edges (diag (S)).
+%       'undirected weighted graph'.  S(i,j) is the weight of edge (i,j).
+%       'undirected graph'.  S is binary.
+% Problem:  a struct containing the source of the DIMACS10 graph, containing
+%       the matrix Problem.A.  The graph S is always symmetric, but Problem.A
+%       might be unsymmetric.  This function performs all the necessary
+%       conversions to obtain the DIMACS10 graph.
+%
+% If the nodes of S have xy or xyz coordinates, they are returned in
+% Problem.aux.coord as an n-by-2 or n-by-3 matrix, where n = size(S,1).
+% Otherwise, Problem.aux will not be present in the Problem struct.
+% Nodeweights are present in Problem.aux, as nodevalue or (for the
+% redistricting problems) population and area.
+%
+% With no input arguments, an index of the DIMACS10 graphs is returned.
+%
+% Example
+%
+%   % read in the same graph in two different ways
+%   S = dimacs10 (1)
+%   S = dimacs10 ('adjnoun')
+%
+%   % read in all 212 graphs, in increasing order of nnz(S)
+%   index = dimacs10 ;
+%   [~,list] = sort (index.nnz) ;
+%   for id = list'
+%       [S name kind] = dimacs10 (id) ;
+%       fprintf ('%s : %s : n: %d nnz %d\n', name, kind, size(S,1), nnz(S)) ;
+%       spy (S) ;
+%       drawnow
+%   end
+%
+% To write the resulting DIMACS10 graph to a Matrix Market or Rutherford/Boeing
+% file for use outside of MATLAB, see UFwrite in the SuiteSparse/UFcollection
+% toolbox.
+%
+% See also gallery, UFget.
+
+% Copyright 2012, Timothy A. Davis, http://www.suitesparse.com
+
+% matrices 139 to 212 added in July 2012
+% not yet in the collection (too large): clustering/uk-2007-05
+
+% DIMACS graph                         UF matrix (empty if in DIMACS10/ group)
+graphs = {
+'clustering/adjnoun',                   'Newman/adjnoun'
+'clustering/as-22july06',               'Newman/as-22july06'
+'clustering/astro-ph',                  'Newman/astro-ph'
+'clustering/caidaRouterLevel',          [ ]
+'clustering/celegans_metabolic',        'Arenas/celegans_metabolic'
+'clustering/celegansneural',            'Newman/celegansneural'
+'clustering/chesapeake',                [ ]
+'clustering/cnr-2000',                  'LAW/cnr-2000'
+'clustering/cond-mat-2003',             'Newman/cond-mat-2003'
+'clustering/cond-mat-2005',             'Newman/cond-mat-2005'
+'clustering/cond-mat',                  'Newman/cond-mat'
+'clustering/dolphins',                  'Newman/dolphins'
+'clustering/email',                     'Arenas/email'
+'clustering/eu-2005',                   'LAW/eu-2005'
+'clustering/football',                  'Newman/football'
+'clustering/hep-th',                    'Newman/hep-th'
+'clustering/in-2004',                   'LAW/in-2004'
+'clustering/jazz',                      'Arenas/jazz'
+'clustering/karate',                    'Newman/karate'
+'clustering/lesmis',                    'Newman/lesmis'
+'clustering/netscience',                'Newman/netscience'
+'clustering/PGPgiantcompo',             'Arenas/PGPgiantcompo'
+'clustering/polblogs',                  'Newman/polblogs'
+'clustering/polbooks',                  'Newman/polbooks'
+'clustering/power',                     'Newman/power'
+'clustering/road_central',              [ ]
+'clustering/road_usa',                  [ ]
+'coauthor/citationCiteseer',            [ ]
+'coauthor/coAuthorsCiteseer',           [ ]
+'coauthor/coAuthorsDBLP',               [ ]
+'coauthor/coPapersCiteseer',            [ ]
+'coauthor/coPapersDBLP',                [ ]
+'delaunay/delaunay_n10',                [ ]
+'delaunay/delaunay_n11',                [ ]
+'delaunay/delaunay_n12',                [ ]
+'delaunay/delaunay_n13',                [ ]
+'delaunay/delaunay_n14',                [ ]
+'delaunay/delaunay_n15',                [ ]
+'delaunay/delaunay_n16',                [ ]
+'delaunay/delaunay_n17',                [ ]
+'delaunay/delaunay_n18',                [ ]
+'delaunay/delaunay_n19',                [ ]
+'delaunay/delaunay_n20',                [ ]
+'delaunay/delaunay_n21',                [ ]
+'delaunay/delaunay_n22',                [ ]
+'delaunay/delaunay_n23',                [ ]
+'delaunay/delaunay_n24',                [ ]
+'dyn-frames/hugebubbles-00000',         [ ]
+'dyn-frames/hugebubbles-00010',         [ ]
+'dyn-frames/hugebubbles-00020',         [ ]
+'dyn-frames/hugetrace-00000',           [ ]
+'dyn-frames/hugetrace-00010',           [ ]
+'dyn-frames/hugetrace-00020',           [ ]
+'dyn-frames/hugetric-00000',            [ ]
+'dyn-frames/hugetric-00010',            [ ]
+'dyn-frames/hugetric-00020',            [ ]
+'kronecker/kron_g500-logn16',           [ ]
+'kronecker/kron_g500-logn17',           [ ]
+'kronecker/kron_g500-logn18',           [ ]
+'kronecker/kron_g500-logn19',           [ ]
+'kronecker/kron_g500-logn20',           [ ]
+'kronecker/kron_g500-logn21',           [ ]
+'kronecker/kron_g500-simple-logn16',    'DIMACS10/kron_g500-logn16'
+'kronecker/kron_g500-simple-logn17',    'DIMACS10/kron_g500-logn17'
+'kronecker/kron_g500-simple-logn18',    'DIMACS10/kron_g500-logn18'
+'kronecker/kron_g500-simple-logn19',    'DIMACS10/kron_g500-logn19'
+'kronecker/kron_g500-simple-logn20',    'DIMACS10/kron_g500-logn20'
+'kronecker/kron_g500-simple-logn21',    'DIMACS10/kron_g500-logn21'
+'matrix/af_shell10',                    'Schenk_AFE/af_shell10'
+'matrix/af_shell9',                     'Schenk_AFE/af_shell9'
+'matrix/audikw1',                       'GHS_psdef/audikw_1'
+'matrix/cage15',                        'vanHeukelum/cage15'
+'matrix/ecology1',                      'McRae/ecology1'
+'matrix/ecology2',                      'McRae/ecology2'
+'matrix/G3_circuit',                    'AMD/G3_circuit'
+'matrix/kkt_power',                     'Zaoui/kkt_power'
+'matrix/ldoor',                         'GHS_psdef/ldoor'
+'matrix/nlpkkt120',                     'Schenk/nlpkkt120'
+'matrix/nlpkkt160',                     'Schenk/nlpkkt160'
+'matrix/nlpkkt200',                     'Schenk/nlpkkt200'
+'matrix/nlpkkt240',                     'Schenk/nlpkkt240'
+'matrix/thermal2',                      'Schmid/thermal2'
+'numerical/adaptive',                   [ ]
+'numerical/channel-500x100x100-b050',   [ ]
+'numerical/packing-500x100x100-b050',   [ ]
+'numerical/venturiLevel3',              [ ]
+'random/rgg_n_2_15_s0',                 [ ]
+'random/rgg_n_2_16_s0',                 [ ]
+'random/rgg_n_2_17_s0',                 [ ]
+'random/rgg_n_2_18_s0',                 [ ]
+'random/rgg_n_2_19_s0',                 [ ]
+'random/rgg_n_2_20_s0',                 [ ]
+'random/rgg_n_2_21_s0',                 [ ]
+'random/rgg_n_2_22_s0',                 [ ]
+'random/rgg_n_2_23_s0',                 [ ]
+'random/rgg_n_2_24_s0',                 [ ]
+'streets/asia_osm',                     [ ]
+'streets/belgium_osm',                  [ ]
+'streets/europe_osm',                   [ ]
+'streets/germany_osm',                  [ ]
+'streets/great-britain_osm',            [ ]
+'streets/italy_osm',                    [ ]
+'streets/luxembourg_osm',               [ ]
+'streets/netherlands_osm',              [ ]
+'walshaw/144',                          [ ]
+'walshaw/3elt',                         'AG-Monien/3elt'
+'walshaw/4elt',                         'Pothen/barth5'
+'walshaw/598a',                         [ ]
+'walshaw/add20',                        'Hamm/add20'
+'walshaw/add32',                        'Hamm/add32'
+'walshaw/auto',                         [ ]
+'walshaw/bcsstk29',                     'HB/bcsstk29'
+'walshaw/bcsstk30',                     'HB/bcsstk30'
+'walshaw/bcsstk31',                     'HB/bcsstk31'
+'walshaw/bcsstk32',                     'HB/bcsstk32'
+'walshaw/bcsstk33',                     'HB/bcsstk33'
+'walshaw/brack2',                       'AG-Monien/brack2'
+'walshaw/crack',                        'AG-Monien/crack'
+'walshaw/cs4',                          [ ]
+'walshaw/cti',                          [ ]
+'walshaw/data',                         [ ]
+'walshaw/fe_4elt2',                     [ ]
+'walshaw/fe_body',                      [ ]
+'walshaw/fe_ocean',                     [ ]
+'walshaw/fe_pwt',                       'Pothen/pwt'
+'walshaw/fe_rotor',                     [ ]
+'walshaw/fe_sphere',                    [ ]
+'walshaw/fe_tooth',                     [ ]
+'walshaw/finan512',                     'Mulvey/finan512'
+'walshaw/m14b',                         [ ]
+'walshaw/memplus',                      'Hamm/memplus'
+'walshaw/t60k',                         [ ]
+'walshaw/uk',                           [ ]
+'walshaw/vibrobox',                     'Cote/vibrobox'
+'walshaw/wave',                         'AG-Monien/wave'
+'walshaw/whitaker3',                    'AG-Monien/whitaker3'
+'walshaw/wing',                         [ ]
+'walshaw/wing_nodal',                   [ ]
+'clustering/G_n_pin_pout',              [ ]
+'clustering/preferentialAttachment',    [ ]
+'clustering/smallworld',                [ ]
+'clustering/uk-2002',                   'LAW/uk-2002'
+'numerical/333SP',                      [ ]
+'numerical/AS365',                      [ ]
+'numerical/M6',                         [ ]
+'numerical/NACA0015',                   [ ]
+'numerical/NLR',                        [ ]
+'redistrict/ak2010',                    [ ]
+'redistrict/al2010',                    [ ]
+'redistrict/ar2010',                    [ ]
+'redistrict/az2010',                    [ ]
+'redistrict/ca2010',                    [ ]
+'redistrict/co2010',                    [ ]
+'redistrict/ct2010',                    [ ]
+'redistrict/de2010',                    [ ]
+'redistrict/fl2010',                    [ ]
+'redistrict/ga2010',                    [ ]
+'redistrict/hi2010',                    [ ]
+'redistrict/ia2010',                    [ ]
+'redistrict/id2010',                    [ ]
+'redistrict/il2010',                    [ ]
+'redistrict/in2010',                    [ ]
+'redistrict/ks2010',                    [ ]
+'redistrict/ky2010',                    [ ]
+'redistrict/la2010',                    [ ]
+'redistrict/ma2010',                    [ ]
+'redistrict/md2010',                    [ ]
+'redistrict/me2010',                    [ ]
+'redistrict/mi2010',                    [ ]
+'redistrict/mn2010',                    [ ]
+'redistrict/mo2010',                    [ ]
+'redistrict/ms2010',                    [ ]
+'redistrict/mt2010',                    [ ]
+'redistrict/nc2010',                    [ ]
+'redistrict/nd2010',                    [ ]
+'redistrict/ne2010',                    [ ]
+'redistrict/nh2010',                    [ ]
+'redistrict/nj2010',                    [ ]
+'redistrict/nm2010',                    [ ]
+'redistrict/nv2010',                    [ ]
+'redistrict/ny2010',                    [ ]
+'redistrict/oh2010',                    [ ]
+'redistrict/ok2010',                    [ ]
+'redistrict/or2010',                    [ ]
+'redistrict/pa2010',                    [ ]
+'redistrict/ri2010',                    [ ]
+'redistrict/sc2010',                    [ ]
+'redistrict/sd2010',                    [ ]
+'redistrict/tn2010',                    [ ]
+'redistrict/tx2010',                    [ ]
+'redistrict/ut2010',                    [ ]
+'redistrict/va2010',                    [ ]
+'redistrict/vt2010',                    [ ]
+'redistrict/wa2010',                    [ ]
+'redistrict/wi2010',                    [ ]
+'redistrict/wv2010',                    [ ]
+'redistrict/wy2010',                    [ ]
+'star-mixtures/vsp_barth5_1Ksep_50in_5Kout',        [ ]
+'star-mixtures/vsp_bcsstk30_500sep_10in_1Kout',     [ ]
+'star-mixtures/vsp_befref_fxm_2_4_air02',           [ ]
+'star-mixtures/vsp_bump2_e18_aa01_model1_crew1',    [ ]
+'star-mixtures/vsp_c-30_data_data',                 [ ]
+'star-mixtures/vsp_c-60_data_cti_cs4',              [ ]
+'star-mixtures/vsp_data_and_seymourl',              [ ]
+'star-mixtures/vsp_finan512_scagr7-2c_rlfddd',      [ ]
+'star-mixtures/vsp_mod2_pgp2_slptsk',               [ ]
+'star-mixtures/vsp_model1_crew1_cr42_south31',      [ ]
+'star-mixtures/vsp_msc10848_300sep_100in_1Kout',    [ ]
+'star-mixtures/vsp_p0291_seymourl_iiasa',           [ ]
+'star-mixtures/vsp_sctap1-2b_and_seymourl',         [ ]
+'star-mixtures/vsp_south31_slptsk',                 [ ]
+'star-mixtures/vsp_vibrobox_scagr7-2c_rlfddd',      [ ]
+} ;
+
+%-------------------------------------------------------------------------------
+% return the index, if requested
+%-------------------------------------------------------------------------------
+
+multigraph = 57:62 ;
+weightedgraph = [ 6 20 148:197 ] ;
+
+ngraphs = size (graphs,1) ;
+if (nargin == 0)
+
+    n_nnz = [
+        112        850   %   1 : clustering/adjnoun
+      22963      96872   %   2 : clustering/as-22july06
+      16706     242502   %   3 : clustering/astro-ph
+     192244    1218132   %   4 : clustering/caidaRouterLevel
+        453       4050   %   5 : clustering/celegans_metabolic
+        297       4296   %   6 : clustering/celegansneural
+         39        340   %   7 : clustering/chesapeake
+     325557    5477938   %   8 : clustering/cnr-2000
+      31163     240058   %   9 : clustering/cond-mat-2003
+      40421     351382   %  10 : clustering/cond-mat-2005
+      16726      95188   %  11 : clustering/cond-mat
+         62        318   %  12 : clustering/dolphins
+       1133      10902   %  13 : clustering/email
+     862664   32276936   %  14 : clustering/eu-2005
+        115       1226   %  15 : clustering/football
+       8361      31502   %  16 : clustering/hep-th
+    1382908   27182946   %  17 : clustering/in-2004
+        198       5484   %  18 : clustering/jazz
+         34        156   %  19 : clustering/karate
+         77        508   %  20 : clustering/lesmis
+       1589       5484   %  21 : clustering/netscience
+      10680      48632   %  22 : clustering/PGPgiantcompo
+       1490      33430   %  23 : clustering/polblogs
+        105        882   %  24 : clustering/polbooks
+       4941      13188   %  25 : clustering/power
+   14081816   33866826   %  26 : clustering/road_central
+   23947347   57708624   %  27 : clustering/road_usa
+     268495    2313294   %  28 : coauthor/citationCiteseer
+     227320    1628268   %  29 : coauthor/coAuthorsCiteseer
+     299067    1955352   %  30 : coauthor/coAuthorsDBLP
+     434102   32073440   %  31 : coauthor/coPapersCiteseer
+     540486   30491458   %  32 : coauthor/coPapersDBLP
+       1024       6112   %  33 : delaunay/delaunay_n10
+       2048      12254   %  34 : delaunay/delaunay_n11
+       4096      24528   %  35 : delaunay/delaunay_n12
+       8192      49094   %  36 : delaunay/delaunay_n13
+      16384      98244   %  37 : delaunay/delaunay_n14
+      32768     196548   %  38 : delaunay/delaunay_n15
+      65536     393150   %  39 : delaunay/delaunay_n16
+     131072     786352   %  40 : delaunay/delaunay_n17
+     262144    1572792   %  41 : delaunay/delaunay_n18
+     524288    3145646   %  42 : delaunay/delaunay_n19
+    1048576    6291372   %  43 : delaunay/delaunay_n20
+    2097152   12582816   %  44 : delaunay/delaunay_n21
+    4194304   25165738   %  45 : delaunay/delaunay_n22
+    8388608   50331568   %  46 : delaunay/delaunay_n23
+   16777216  100663202   %  47 : delaunay/delaunay_n24
+   18318143   54940162   %  48 : dyn-frames/hugebubbles-00000
+   19458087   58359528   %  49 : dyn-frames/hugebubbles-00010
+   21198119   63580358   %  50 : dyn-frames/hugebubbles-00020
+    4588484   13758266   %  51 : dyn-frames/hugetrace-00000
+   12057441   36164358   %  52 : dyn-frames/hugetrace-00010
+   16002413   47997626   %  53 : dyn-frames/hugetrace-00020
+    5824554   17467046   %  54 : dyn-frames/hugetric-00000
+    6592765   19771708   %  55 : dyn-frames/hugetric-00010
+    7122792   21361554   %  56 : dyn-frames/hugetric-00020
+      65536    4912469   %  57 : kronecker/kron_g500-logn16
+     131072   10228360   %  58 : kronecker/kron_g500-logn17
+     262144   21165908   %  59 : kronecker/kron_g500-logn18
+     524288   43562265   %  60 : kronecker/kron_g500-logn19
+    1048576   89239674   %  61 : kronecker/kron_g500-logn20
+    2097152  182082942   %  62 : kronecker/kron_g500-logn21
+      65536    4912142   %  63 : kronecker/kron_g500-simple-logn16
+     131072   10227970   %  64 : kronecker/kron_g500-simple-logn17
+     262144   21165372   %  65 : kronecker/kron_g500-simple-logn18
+     524288   43561574   %  66 : kronecker/kron_g500-simple-logn19
+    1048576   89238804   %  67 : kronecker/kron_g500-simple-logn20
+    2097152  182081864   %  68 : kronecker/kron_g500-simple-logn21
+    1508065   51164260   %  69 : matrix/af_shell10
+     504855   17084020   %  70 : matrix/af_shell9
+     943695   76708152   %  71 : matrix/audikw1
+    5154859   94044692   %  72 : matrix/cage15
+    1000000    3996000   %  73 : matrix/ecology1
+     999999    3995992   %  74 : matrix/ecology2
+    1585478    6075348   %  75 : matrix/G3_circuit
+    2063494   12964640   %  76 : matrix/kkt_power
+     952203   45570272   %  77 : matrix/ldoor
+    3542400   93303392   %  78 : matrix/nlpkkt120
+    8345600  221172512   %  79 : matrix/nlpkkt160
+   16240000  431985632   %  80 : matrix/nlpkkt200
+   27993600  746478752   %  81 : matrix/nlpkkt240
+    1227087    7352268   %  82 : matrix/thermal2
+    6815744   27248640   %  83 : numerical/adaptive
+    4802000   85362744   %  84 : numerical/channel-500x100x100-b050
+    2145852   34976486   %  85 : numerical/packing-500x100x100-b050
+    4026819   16108474   %  86 : numerical/venturiLevel3
+      32768     320480   %  87 : random/rgg_n_2_15_s0
+      65536     684254   %  88 : random/rgg_n_2_16_s0
+     131072    1457506   %  89 : random/rgg_n_2_17_s0
+     262144    3094566   %  90 : random/rgg_n_2_18_s0
+     524288    6539532   %  91 : random/rgg_n_2_19_s0
+    1048576   13783240   %  92 : random/rgg_n_2_20_s0
+    2097152   28975990   %  93 : random/rgg_n_2_21_s0
+    4194304   60718396   %  94 : random/rgg_n_2_22_s0
+    8388608  127002786   %  95 : random/rgg_n_2_23_s0
+   16777216  265114400   %  96 : random/rgg_n_2_24_s0
+   11950757   25423206   %  97 : streets/asia_osm
+    1441295    3099940   %  98 : streets/belgium_osm
+   50912018  108109320   %  99 : streets/europe_osm
+   11548845   24738362   % 100 : streets/germany_osm
+    7733822   16313034   % 101 : streets/great-britain_osm
+    6686493   14027956   % 102 : streets/italy_osm
+     114599     239332   % 103 : streets/luxembourg_osm
+    2216688    4882476   % 104 : streets/netherlands_osm
+     144649    2148786   % 105 : walshaw/144
+       4720      27444   % 106 : walshaw/3elt
+      15606      91756   % 107 : walshaw/4elt
+     110971    1483868   % 108 : walshaw/598a
+       2395      14924   % 109 : walshaw/add20
+       4960      18924   % 110 : walshaw/add32
+     448695    6629222   % 111 : walshaw/auto
+      13992     605496   % 112 : walshaw/bcsstk29
+      28924    2014568   % 113 : walshaw/bcsstk30
+      35588    1145828   % 114 : walshaw/bcsstk31
+      44609    1970092   % 115 : walshaw/bcsstk32
+       8738     583166   % 116 : walshaw/bcsstk33
+      62631     733118   % 117 : walshaw/brack2
+      10240      60760   % 118 : walshaw/crack
+      22499      87716   % 119 : walshaw/cs4
+      16840      96464   % 120 : walshaw/cti
+       2851      30186   % 121 : walshaw/data
+      11143      65636   % 122 : walshaw/fe_4elt2
+      45087     327468   % 123 : walshaw/fe_body
+     143437     819186   % 124 : walshaw/fe_ocean
+      36519     289588   % 125 : walshaw/fe_pwt
+      99617    1324862   % 126 : walshaw/fe_rotor
+      16386      98304   % 127 : walshaw/fe_sphere
+      78136     905182   % 128 : walshaw/fe_tooth
+      74752     522240   % 129 : walshaw/finan512
+     214765    3358036   % 130 : walshaw/m14b
+      17758     108392   % 131 : walshaw/memplus
+      60005     178880   % 132 : walshaw/t60k
+       4824      13674   % 133 : walshaw/uk
+      12328     330500   % 134 : walshaw/vibrobox
+     156317    2118662   % 135 : walshaw/wave
+       9800      57978   % 136 : walshaw/whitaker3
+      62032     243088   % 137 : walshaw/wing
+      10937     150976   % 138 : walshaw/wing_nodal
+     100000    1002396   % 139 : clustering/G_n_pin_pout
+     100000     999970   % 140 : clustering/preferentialAttachment
+     100000     999996   % 141 : clustering/smallworld
+   18520486  523574516   % 142 : clustering/uk-2002
+    3712815   22217266   % 143 : numerical/333SP
+    3799275   22736152   % 144 : numerical/AS365
+    3501776   21003872   % 145 : numerical/M6
+    1039183    6229636   % 146 : numerical/NACA0015
+    4163763   24975952   % 147 : numerical/NLR
+      45292     217098   % 148 : redistrict/ak2010
+     252266    1230482   % 149 : redistrict/al2010
+     186211     904310   % 150 : redistrict/ar2010
+     241666    1196094   % 151 : redistrict/az2010
+     710145    3489366   % 152 : redistrict/ca2010
+     201062     974574   % 153 : redistrict/co2010 
+      67578     336352   % 154 : redistrict/ct2010 
+      24115     116056   % 155 : redistrict/de2010 
+     484481    2346294   % 156 : redistrict/fl2010 
+     291086    1418056   % 157 : redistrict/ga2010 
+      25016     124126   % 158 : redistrict/hi2010 
+     216007    1021170   % 159 : redistrict/ia2010 
+     149842     728264   % 160 : redistrict/id2010 
+     451554    2164464   % 161 : redistrict/il2010 
+     267071    1281716   % 162 : redistrict/in2010 
+     238600    1121798   % 163 : redistrict/ks2010 
+     161672     787778   % 164 : redistrict/ky2010 
+     204447     980634   % 165 : redistrict/la2010 
+     157508     776610   % 166 : redistrict/ma2010 
+     145247     700378   % 167 : redistrict/md2010 
+      69518     335476   % 168 : redistrict/me2010 
+     329885    1578090   % 169 : redistrict/mi2010 
+     259777    1227102   % 170 : redistrict/mn2010 
+     343565    1656568   % 171 : redistrict/mo2010 
+     171778     839980   % 172 : redistrict/ms2010 
+     132288     638668   % 173 : redistrict/mt2010 
+     288987    1416620   % 174 : redistrict/nc2010 
+     133769     625946   % 175 : redistrict/nd2010 
+     193352     913854   % 176 : redistrict/ne2010 
+      48837     234550   % 177 : redistrict/nh2010 
+     169588     829912   % 178 : redistrict/nj2010 
+     168609     830970   % 179 : redistrict/nm2010 
+      84538     416998   % 180 : redistrict/nv2010 
+     350169    1709544   % 181 : redistrict/ny2010 
+     365344    1768240   % 182 : redistrict/oh2010 
+     269118    1274148   % 183 : redistrict/ok2010 
+     196621     979512   % 184 : redistrict/or2010 
+     421545    2058462   % 185 : redistrict/pa2010 
+      25181     125750   % 186 : redistrict/ri2010 
+     181908     893160   % 187 : redistrict/sc2010 
+      88360     410722   % 188 : redistrict/sd2010 
+     240116    1193966   % 189 : redistrict/tn2010 
+     914231    4456272   % 190 : redistrict/tx2010 
+     115406     572066   % 191 : redistrict/ut2010 
+     285762    1402128   % 192 : redistrict/va2010 
+      32580     155598   % 193 : redistrict/vt2010 
+     195574     947432   % 194 : redistrict/wa2010 
+     253096    1209404   % 195 : redistrict/wi2010 
+     135218     662922   % 196 : redistrict/wv2010 
+      86204     427586   % 197 : redistrict/wy2010
+      32212     203610   % 198 : star-mixtures/vsp_barth5_1Ksep_50in_5Kout
+      58348    4033156   % 199 : star-mixtures/vsp_bcsstk30_500sep_10in_1Kout
+      14109     196448   % 200 : star-mixtures/vsp_befref_fxm_2_4_air02
+      56438     601602   % 201 : star-mixtures/vsp_bump2_e18_aa01_model1_crew1
+      11023     124368   % 202 : star-mixtures/vsp_c-30_data_data
+      85830     482160   % 203 : star-mixtures/vsp_c-60_data_cti_cs4
+       9167     111732   % 204 : star-mixtures/vsp_data_and_seymourl
+     139752    1104040   % 205 : star-mixtures/vsp_finan512_scagr7-2c_rlfddd
+     101364     778736   % 206 : star-mixtures/vsp_mod2_pgp2_slptsk
+      45101     379952   % 207 : star-mixtures/vsp_model1_crew1_cr42_south31
+      21996    2442056   % 208 : star-mixtures/vsp_msc10848_300sep_100in_1Kout
+      10498     107736   % 209 : star-mixtures/vsp_p0291_seymourl_iiasa
+      40174     281662   % 210 : star-mixtures/vsp_sctap1-2b_and_seymourl
+      39668     379828   % 211 : star-mixtures/vsp_south31_slptsk
+      77328     871172   % 212 : star-mixtures/vsp_vibrobox_scagr7-2c_rlfddd
+    ] ;
+
+    index.DIMACS10name = graphs (:,1) ;
+    index.UFname = graphs (:,2) ;
+    index.n = n_nnz (:,1) ;
+    index.nnz = n_nnz (:,2) ;
+
+    for id = 1:ngraphs
+        name = graphs {id, 1} ;         % DIMACS10 name of the graph
+        UFname = graphs {id, 2} ;       % its name in the UF Collection
+        if (isempty (UFname))
+            slash = find (name == '/') ;
+            index.UFname {id} = ['DIMACS10/' (name (slash+1:end))] ;
+        end
+    end
+
+    index.kind = cell (ngraphs,1) ;
+    for id = 1:ngraphs
+        index.kind {id} = 'undirected graph' ;
+    end
+    for id = multigraph
+        index.kind {id} = 'undirected multigraph' ;
+    end
+    for id = weightedgraph
+        index.kind {id} = 'undirected weighted graph' ;
+    end
+
+    S = index ;
+    name = '' ;
+    kind = '' ;
+    Problem = [ ] ;
+    return
+end
+
+%-------------------------------------------------------------------------------
+% look up the matrix in the index
+%-------------------------------------------------------------------------------
+
+if (ischar (matrix))
+
+    % S = dimacs10 ('clustering/astro-ph') or dimacs10 ('astro-ph').
+    % find the matrix id.
+    id = 0 ;
+    noslash = isempty (strfind (matrix, '/')) ;
+    for k = 1:ngraphs
+        name = graphs {k,1} ;
+        if (noslash)
+            % S = dimacs10 ('astro0ph')
+            slash = find (name == '/') ;
+            name = name (slash+1:end) ;
+        end
+        if (isequal (name, matrix))
+            % found it
+            id = k ;
+            break ;
+        end
+    end
+    if (id == 0)
+        error ('dimacs10:invalid', 'no such graph') ;
+    end
+
+else
+
+    if (isscalar (matrix) && matrix >= 1 && matrix <= ngraphs)
+        % S = dimacs10 (3) returns the clustering/astro-ph problem
+        id = matrix ;
+    else
+        error ('dimacs10:invalid', 'input argument invalid') ;
+    end
+
+end
+
+%-------------------------------------------------------------------------------
+% get the matrix, converting it if necessary
+%-------------------------------------------------------------------------------
+
+name = graphs {id, 1} ;         % DIMACS10 name of the graph
+UFname = graphs {id, 2} ;       % its name in the UF Collection
+
+if (isempty (UFname))
+
+    %---------------------------------------------------------------------------
+    % the DIMACS10 graph is identical to the UF matrix
+    %---------------------------------------------------------------------------
+
+    slash = find (name == '/') ;
+    UFname = ['DIMACS10/' (name (slash+1:end))] ;
+    Problem = UFget (UFname) ;
+    S = Problem.A ;
+
+else
+
+    %---------------------------------------------------------------------------
+    % the DIMACS10 graph is derived from the UF matrix
+    %---------------------------------------------------------------------------
+
+    Problem = UFget (UFname) ;
+    S = Problem.A ;
+
+    addzeros   = [ 69:70 76 77 109 110 131 134 ] ;
+    removediag = [ 5 8 14 17 23 63:82 107 109 110 112:116 125 129 131 134 142] ;
+    makebinary = [ 3 5 9:11 15 16 18 21 22 63:82 109 110 129 131 134 ] ;
+    symmetrize = [ 6 8 14 17 23 142 ] ;
+    removenull = 82 ;
+
+    if (any (id == weightedgraph))
+
+        % make sure S is symmetric
+        if (any (id == symmetrize))
+            S = S + S' ;
+        end
+
+    else
+
+        % add the explicit zeros
+        if (any (id == addzeros))
+            S = S + Problem.Zeros ;
+        end
+
+        % remove the diagonal, if present, and make binary
+        if (any (id == removediag))
+            S = dimacs10_convert_to_graph (S, any (id == makebinary)) ; 
+        elseif (any (id == makebinary))
+            S = spones (S) ;
+        end
+
+        % make sure S is symmetric and binary
+        if (any (id == symmetrize))
+            % this is required only for a few graphs
+            S = spones (S + S') ;
+        end
+
+        % remove empty rows/columns
+        if (any (id == removenull))
+            nonnull = find (sum (S) > 0) ;
+            S = S (nonnull, nonnull) ;
+        end
+    end
+end
+
+%-------------------------------------------------------------------------------
+% determine the graph type
+%-------------------------------------------------------------------------------
+
+if (any (id == multigraph))
+    % corresponds to format '100'
+    kind = 'undirected multigraph' ;
+elseif (any (id == weightedgraph))
+    % corresponds to format '1', '11', or '10'
+    kind = 'undirected weighted graph' ;
+else
+    % corresponds to format '0'
+    kind = 'undirected graph' ;
+end
+
diff --git a/MATLAB_Tools/dimacs10/dimacs10_convert_to_graph.c b/MATLAB_Tools/dimacs10/dimacs10_convert_to_graph.c
new file mode 100644
index 0000000..40b1cbb
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/dimacs10_convert_to_graph.c
@@ -0,0 +1,76 @@
+#include "mex.h"
+/* convert_to_graph mexFunction
+
+    function S = convert_to_graph (A, binary)
+    if (nargin < 2)
+        binary = 0 ;
+    end
+    S = tril (A,-1) + triu (A,1) ;
+    if (binary)
+        S = spones (S) ;
+    end
+
+Ignores the imaginary part of a complex matrix A.
+ */
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    mwSignedIndex *Ap, *Ai, *Sp, *Si, m, n, nz, j, p, i ;
+    double *Sx, *Ax ;
+    int binary ;
+    if (nargin < 1 || nargin > 2 || nargout > 1)
+    {
+        mexErrMsgTxt ("usage: S = convert_to_graph (A, binary)") ;
+    }
+
+    /* get the input A matrix */
+    Ap = (mwSignedIndex *) mxGetJc (pargin [0]) ;
+    Ai = (mwSignedIndex *) mxGetIr (pargin [0]) ;
+    Ax = mxGetPr (pargin [0]) ;
+    m = mxGetM (pargin [0]) ;
+    n = mxGetN (pargin [0]) ;
+    nz = Ap [n] ;
+    if (nz == 0) nz = 1 ;
+
+    /* get the 2nd input argument */
+    binary = (nargin < 2) ? 0 : ((int) mxGetScalar (pargin [1])) ;
+
+    /* allocate the output matrix */
+    pargout [0] = mxCreateSparse (m, n, nz, mxREAL) ;
+    Sp = (mwSignedIndex *) mxGetJc (pargout [0]) ;
+    Si = (mwSignedIndex *) mxGetIr (pargout [0]) ;
+    Sx = mxGetPr (pargout [0]) ;
+
+    /* strip the diagonal from A */
+    nz = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+        Sp [j] = nz ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i != j)
+            {
+                Si [nz] = i ;
+                if (!binary) Sx [nz] = Ax [p] ;
+                nz++ ;
+            }
+        }
+    }
+    Sp [n] = nz ;
+
+    /* convert the result to binary, if requested */
+    if (binary)
+    {
+        for (p = 0 ; p < nz ; p++)
+        {
+            Sx [p] = 1 ;
+        }
+    }
+}
diff --git a/MATLAB_Tools/dimacs10/dimacs10_demo.m b/MATLAB_Tools/dimacs10/dimacs10_demo.m
new file mode 100644
index 0000000..3802623
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/dimacs10_demo.m
@@ -0,0 +1,65 @@
+function dimacs10_demo (arg)
+%DIMACS10_DEMO reads in the DIMACS10 graphs.
+% Reads them in and displays them in increasing order of nnz(S).
+% Can also read in just a subset.
+%
+% Example
+%   dimacs10_demo
+%   dimacs10_demo (-10) ;           % just the smallest 10 graphs
+%   dimacs10_demo ([1 3 5 8]) ;     % read just those four graphs
+%
+% See also dimacs10, UFget
+
+% Copyright 2011, Timothy A Davis
+
+lastwarn ('') ;
+index = dimacs10 ;
+[~,list] = sort (index.nnz) ;
+if (nargin > 0)
+    if (isscalar (arg) && arg < 0)
+        list = list (1:(-arg)) ;
+    else
+        list = arg ;
+    end
+end
+if (length (list) > 1)
+    fprintf ('\ndimacs10_demo: testing %d graphs\n', length (list)) ;
+end
+for id = list (:)'
+    [S name kind] = dimacs10 (id) ;
+    fprintf ('%3d %s : %s : n: %d nnz %d\n', id, name, kind, size(S,1), nnz(S));
+    UFweb (index.UFname {id}) ;
+    clf
+    spy (S) ;
+    drawnow
+end
+
+S = dimacs10 ('adjnoun') ;
+spy (S)
+title ('clustering/adjnoun') ;
+
+% test error handling
+fail = 0 ;
+try
+    S = dimacs10 (0) ;                                                      %#ok
+    fail = 1 ;
+catch me                                                                    %#ok
+end
+try
+    S = dimacs10 ('crud') ;                                                 %#ok
+    fail = 1 ;
+catch me                                                                    %#ok
+end
+try
+    S = dimacs10 (1,1) ;                                                    %#ok
+    fail = 1 ;
+catch me                                                                    %#ok
+end
+
+if (fail)
+    error ('test failed') ;
+end
+
+if (length (list) > 1)
+    fprintf ('\ndimacs10: all tests passed\n') ;
+end
diff --git a/MATLAB_Tools/dimacs10/dimacs10_install.m b/MATLAB_Tools/dimacs10/dimacs10_install.m
new file mode 100644
index 0000000..3f8d8a8
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/dimacs10_install.m
@@ -0,0 +1,38 @@
+function dimacs10_install (demo)
+%DIMACS10_INSTALL compiles and installs dimacs10 for use in MATLAB.
+% Your current working directory must be the one containing this
+% file (dimacs10/dimacs10_install.m).  Also runs a few short tests.
+%
+% Example
+%
+%   dimacs10_install
+%
+% See also dimacs10, metis_graph_read, UFget.
+
+% Copyright 2011, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 1)
+    demo = 1 ;
+end
+
+% add dimacs10 to the path
+addpath (pwd) ;
+
+% compile the mexFunctions
+if (~isempty (strfind (computer, '64')))
+    fprintf ('Compiling dimacs10 (64-bit)\n') ;
+    mex -largeArrayDims dimacs10_convert_to_graph.c
+    mex -largeArrayDims metis_graph_read_mex.c
+else
+    fprintf ('Compiling dimacs10 (32-bit)\n') ;
+    mex dimacs10_convert_to_graph.c
+    mex metis_graph_read_mex.c
+end
+
+% run some tests
+if (demo)
+    metis_graph_test ;
+    dimacs10_demo (-1) ;
+    dimacs10_demo ([7 15 5 6 109 23 82 57 24]) ;
+end
+
diff --git a/MATLAB_Tools/dimacs10/fig8a.graph b/MATLAB_Tools/dimacs10/fig8a.graph
new file mode 100644
index 0000000..a19e905
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/fig8a.graph
@@ -0,0 +1,9 @@
+% a simple unweighted graph.  Figure 8a in the METIS user guide
+7 11
+5 3 2
+1 3 4
+5 4 2 1
+2 3 6 7
+1 3 6
+5 4 7
+6 4
diff --git a/MATLAB_Tools/dimacs10/fig8b.graph b/MATLAB_Tools/dimacs10/fig8b.graph
new file mode 100644
index 0000000..8a22f3d
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/fig8b.graph
@@ -0,0 +1,10 @@
+% A simple weighted graph.  Figure 8b in the METIS user guide
+% This has edge weights but no node weights.
+7 11 1
+5 1 3 2 2 1
+1 1 3 2 4 1
+5 3 4 2 2 2 1 2
+2 1 3 2 6 2 7 5
+1 1 3 3 6 2
+5 2 4 2 7 6
+6 6 4 5
diff --git a/MATLAB_Tools/dimacs10/fig8c.graph b/MATLAB_Tools/dimacs10/fig8c.graph
new file mode 100644
index 0000000..8b228ef
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/fig8c.graph
@@ -0,0 +1,9 @@
+% A graph with edge and node weights.  Figure 8c in the METIS user guide.
+7 11 11
+4 5 1 3 2 2 1
+2 1 1 3 2 4 1
+5 5 3 4 2 2 2 1 2
+3 2 1 3 2 6 2 7 5
+1 1 1 3 3 6 2
+6 5 2 4 2 7 6
+2 6 6 4 5
diff --git a/MATLAB_Tools/dimacs10/fig8d.graph b/MATLAB_Tools/dimacs10/fig8d.graph
new file mode 100644
index 0000000..69bd5b5
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/fig8d.graph
@@ -0,0 +1,10 @@
+% A graph with multiple node weights for each node.
+% Figure 8d in the METIS user guide.
+7 11 10 3
+1 2 0 5 3 2
+0 2 2 1 3 4
+4 1 1 5 4 2 1
+2 2 3 2 3 6 7
+1 1 1 1 3 6
+2 2 1 5 4 7
+1 2 1 6 4
diff --git a/MATLAB_Tools/dimacs10/ilp_test.graph b/MATLAB_Tools/dimacs10/ilp_test.graph
new file mode 100644
index 0000000..aec5eaa
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/ilp_test.graph
@@ -0,0 +1,8 @@
+7 8 0
+3 2 
+3 4 1 
+1 2 
+6 5 2 
+7 4 
+4 7 
+6 5 
diff --git a/MATLAB_Tools/dimacs10/metis_graph_read.m b/MATLAB_Tools/dimacs10/metis_graph_read.m
new file mode 100644
index 0000000..8411863
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/metis_graph_read.m
@@ -0,0 +1,137 @@
+function [A w fmt] = metis_graph_read (file)
+%METIS_GRAPH_READ reads a graph file in METIS format into a MATLAB sparse matrix.
+%
+%   [A w fmt] = metis_graph_read (file)
+%
+% Returns a symmetric n-by-n sparse matrix A.  w is an array of node weights of
+% size n-by-k where there are k weights for each node.  If k = 0 then the graph
+% has no node weights.  Normally, the diagonal of A is all zero (except for
+% the fmt=100 case, added for the DIMACS10 set).
+%
+% METIS defines 4 kinds of graphs, as determined by the 'fmt' code in the first
+% line of the file.  The DIMACS10 data set adds a fifth kind:
+%
+%   0: no node or edge weights.  w is n-by-0.  A is binary.
+%   1: no node weights, has edge weights.  w is n-by-0.  A is non-binary.
+%  10: has node weights, no edge weights.  w is n-by-k with k > 0.  A is binary.
+%  11: both node and edge weights.  w is n-by-k with k > 0.  A non-binary.
+% 100: no edge or node weights.  w is n-by-0.  A is a representation of
+%       a multigraph, where A(i,j) is the number of edges (i,j).  This
+%       format is a DIMACS10 extension of the METIS format.
+%
+% If present, edge weights are > 0 but need not be integers.
+% Node weights, if present, are integers >= 0.
+%
+% Example
+%
+%   % in the dimacs10/ directory:
+%   [A w fmt] = metis_graph_read ('fig8d.graph')
+%
+% See also sprand, gallery
+
+% Copyright 2011, Tim Davis
+
+if (nargin ~= 1 || nargout > 3)
+    error ('metis_graph:usage', ...
+            'usage: [A w fmt] = metis_graph_read (filename)') ;
+end
+
+% read the file
+[i j x w fmt] = metis_graph_read_mex (file) ;
+n = size (w, 1) ;
+
+is_symmetric = 1 ;
+nneg = 0 ;
+nself = 0 ;
+ndupl = 0 ;
+
+% make sure the edges weights are valid
+try
+    bad = find (x <= 0) ;
+    nneg = length (bad) ;
+    if (nneg > 0)
+        fprintf ('\n    %d edge weights <= 0\n', nneg) ;
+        for t = 1:min (nneg, 20)
+            fprintf ('    A(%d,%d): %g\n', i(bad(t)), j(bad(t)), x(bad(t))) ;
+        end
+        if (nneg > 20)
+            fprintf ('    ...\n') ;
+        end
+        % fix the bad edges, and continue looking for errors
+        x (bad) = 1 ;
+    end
+catch me
+    warning ('metis_graph:errorcheck', 'unable to check for errors ...') ;
+    disp (me.message) ;
+end
+
+% convert from triplet format to MATLAB sparse matrix format
+A = sparse (i, j, x, n, n) ;
+
+try
+
+    % the normal METIS formats (0, 1, 10, 11) do not allow multiple edges
+    % or self-edges.  DIMACS10 allows for this.
+    if (fmt ~= 100)
+
+        % make sure there are no self-edges
+        i2 = find (diag (A)) ;
+        nself = length (i2) ;
+        if (nself > 0)
+            fprintf ('\n    %d self edges, fmt = %d\n', nself, fmt) ;
+            for t = 1:min (nself, 20)
+                fprintf ('    A(%d,%d): %g\n', ...
+                    i2(t), i2(t), full(A(i2(t),i2(t)))) ;
+            end
+            if (nself > 20)
+                fprintf ('    ...\n') ;
+            end
+        end
+        clear i2
+
+        % make sure the graph has no duplicate entries
+        ndupl = 0 ;
+        if (length (i) ~= nnz (A))
+            A1 = sparse (i, j, 1, n, n) ;
+            [i2 j2] = find (A1 > 1) ;
+            ndupl = length (i2) ;
+            fprintf ('\n    %d duplicate edges, fmt = %d\n', ndupl, fmt) ;
+            for t = 1:min (ndupl, 20)
+                fprintf ('    A(%d,%d): %g\n', ...
+                    i2(t), j2(t), full (A(i2(t),j2(t)))) ;
+            end
+            if (ndupl > 20)
+                fprintf ('    ...\n') ;
+            end
+        end
+        clear A1 i2 j2
+    end
+
+    clear i j x
+
+    % make sure the graph is symmetric
+    is_symmetric = isequal (A, A') ;
+
+catch me
+    warning ('metis_graph:errorcheck', 'unable to check for errors ...') ;
+    disp (me.message) ;
+end
+
+if (ndupl > 0 || nself > 0 || nneg > 0)
+     fmt = 100 ;
+     fprintf ('forcing fmt = 100.  Edge weights <= 0 set to 1.\n') ;
+     warning ('metis_graph:invalid_edges', ...
+        '%d duplicate edges, %d self-edges, %d edge weights <= 0', ...
+        ndupl, nself, nneg) ;
+end
+
+% make sure the graph is symmetric
+if (~is_symmetric)
+    error ('metis_graph:unsymmetric', 'graph must be symmetric') ;
+end
+
+% make sure the node weights are valid
+if (any (any (w < 0)) || any (any (w ~= fix (w))))
+    error ('metis_graph:invalid_node_weights', ...
+        'node weights must be integers >= 0') ;
+end
diff --git a/MATLAB_Tools/dimacs10/metis_graph_read_mex.c b/MATLAB_Tools/dimacs10/metis_graph_read_mex.c
new file mode 100644
index 0000000..e40c48f
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/metis_graph_read_mex.c
@@ -0,0 +1,352 @@
+/* ========================================================================== */
+/* === metis_graph_mex ====================================================== */
+/* ========================================================================== */
+
+/*
+METIS_GRAPH_MEX: reads a graph in METIS format.  This function is not normally
+meant to be called directly by the user.  Use metis_graph.m instead.
+
+    [i j x w fmt] = metis_graph_mex (graph_filename)
+
+Reads a graph file in METIS format, returning the result as list of entries in
+triplet form.  The first line of a METIS *.graph file specifies the format.  It
+can be one of:
+
+    n nz            # of nodes and # of edges
+    n nz fmt        fmt defaults to 0 if not present
+    n nz fmt ncon   ncon defaults to 0 if not present and fmt = 0, 1, or 100,
+                    or 1 if fmt = 10 or 11.
+
+    fmt:
+        0:  no edge or node weights
+        1:  no node weights, has edge weights
+        10: has node weights, no edge weights
+        11: has both node and edge weights
+        100: graph may include self-edges and multiple edges (a multigraph)
+            This is an extension to the METIS format.  No edge weights allowed.
+            The fmt=100 option is treated just like fmt=0 here, since this
+            mexFunction does not check for self-edges or duplicate/multiple
+            edges.  That is done in metis_graph.m.
+
+    ncon:  the number of weights associated with each node
+
+The next n lines contain the adjacency list for each node.  Each line has the
+following format.  Suppose the ith line contains:
+
+    w1 w2 ... wncon  v1 e1 v2 e2 ... vk ek
+
+then w1 to wncon are the node weights for node i, v1 is a node number and e1 is
+the edge weight for the edge (i,v1).  Node i has k neighbors.
+On output, w is an n-by-ncon dense matrix of node weights.
+
+The nz = # of edges given in line 1 counts each edge (i,j) and (j,i) just once.
+However, this mexFunction treats nz just as a hint.  The output vectors i, j,
+and x are resized as needed.
+
+[i j x] is a list of triplets, in arbitary order.  The kth triplet is an edge
+between node i(k) and node j(k) with edge weight x(k).  For a graph with no
+edge weights (fmt = 0, 10, or 100), x = 1 (a scalar) is returned.
+
+Edge weights must be strictly > 0.  Node weights must be integers >= 0.
+These conditions are not tested here, but in metis_graph.m.
+
+If ncon = size(w,2) > 0 on output, then the graph also has node weights.
+*/
+
+#include "mex.h"
+#include "stdio.h"
+#include "ctype.h"
+#define LEN 2000
+#define Int mwSignedIndex
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+
+
+/* ========================================================================== */
+/* === get_token ============================================================ */
+/* ========================================================================== */
+
+/* get the next token from the file */
+
+Int get_token           /* returns -1 on EOF, 0 on end of line, 1 otherwise */
+(
+    FILE *f,            /* file open for reading */
+    char *s,            /* array of size maxlen */
+    Int maxlen
+)
+{
+    int c = ' ' ;
+    Int len = 0 ;
+    s [0] = '\0' ;      /* in case of early return */
+
+    /* skip leading white space */
+    while (isspace (c))
+    {
+        c = fgetc (f) ;
+        if (c == EOF) return (-1) ;
+        if (c == '\n') return (0) ;
+    }
+
+    /* read the token */
+    while (c != EOF && !isspace (c) && len < maxlen)
+    {
+        s [len++] = c ;
+        c = fgetc (f) ;
+    }
+
+    /* skip any trailing white space, stopping at the newline if found */
+    while (c != EOF && c != '\n' && isspace (c))
+    {
+        c = fgetc (f) ;
+    }
+    if (c != EOF && c != '\n')
+    {
+        /* push back a valid character for the next token */
+        ungetc (c, f) ;
+    }
+
+    /* terminate the string */
+    s [len] = '\0' ;
+
+    return ((c == '\n') ? 0 : 1) ;
+}
+
+/* ========================================================================== */
+/* === eat_comments ========================================================= */
+/* ========================================================================== */
+
+/* remove any comment lines (first character is a '%') */
+void eat_comments (FILE *f)
+{
+    int c ;
+    while ((c = fgetc (f)) == '%')
+    {
+        while (1)
+        {
+            c = fgetc (f) ;
+            if (c == EOF || c == '\n') break ;
+        }
+    }
+    if (c != EOF)
+    {
+        ungetc (c, f) ;
+    }
+}
+
+/* ========================================================================== */
+/* === mexFunction ========================================================== */
+/* ========================================================================== */
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+
+    FILE *f ;
+    char s [LEN+1], msg [LEN+1] ;
+    Int n, nzmax, fmt, ncon, nz, has_ew, i, j, k, status, t ;
+    double e = 1, x, *Ti, *Tj, *Tx, *W, x1 = 0, x2 = 0, x3 = 0, x4 = 0 ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get the filename */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin != 1 || nargout > 5 || !mxIsChar (pargin [0]))
+    {
+        mexErrMsgIdAndTxt ("metis_graph:usage",
+            "usage: [i j x w fmt] = metis_graph_read_mex (filename)") ;
+    }
+    mxGetString (pargin [0], s, LEN) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* open the file and remove leading comments */
+    /* ---------------------------------------------------------------------- */
+
+    f = fopen (s, "r") ;
+    if (f == NULL)
+    {
+        sprintf (msg, "unable to open file: %s", s) ;
+        mexErrMsgIdAndTxt ("metis_graph:no_such_file", msg) ;
+    }
+    eat_comments (f) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* parse the format line */
+    /* ---------------------------------------------------------------------- */
+
+    s [0] = '\0' ;
+    if (fgets (s, LEN, f) != NULL)
+    {
+        sscanf (s, "%lg %lg %lg %lg", &x1, &x2, &x3, &x4) ;
+    }
+    n = (Int) x1 ;
+    nzmax = (Int) x2 ;
+    fmt = (Int) x3 ;
+    ncon = (Int) x4 ;
+    nzmax = MAX (nzmax, 1) ;
+    if (n < 0 || ncon < 0 ||
+        !(fmt == 0 || fmt == 1 || fmt == 10 || fmt == 11 || fmt == 100))
+    {
+        sprintf (msg, "invalid header: %lg %lg %lg %lg", x1, x2, x3, x4) ;
+        mexErrMsgIdAndTxt ("metis_graph:invalid_header", msg) ;
+    }
+
+    if (fmt == 10 || fmt == 11)
+    {
+        ncon = MAX (ncon, 1) ;
+    }
+
+    has_ew = (fmt == 1 || fmt == 11) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate the triplets */
+    /* ---------------------------------------------------------------------- */
+
+    nzmax = 2 * MAX (nzmax,1) ;
+    pargout [0] = mxCreateDoubleMatrix (nzmax, 1, mxREAL) ;
+    pargout [1] = mxCreateDoubleMatrix (nzmax, 1, mxREAL) ;
+    pargout [2] = mxCreateDoubleMatrix (has_ew ? nzmax : 1, 1, mxREAL) ;
+    Ti = mxGetPr (pargout [0]) ;
+    Tj = mxGetPr (pargout [1]) ;
+    Tx = mxGetPr (pargout [2]) ;
+    Tx [0] = 1 ;
+
+    pargout [3] = mxCreateDoubleMatrix (n, ncon, mxREAL) ;
+    W = mxGetPr (pargout [3]) ;
+    nz = 0 ;
+
+    /* ---------------------------------------------------------------------- */
+    /* read each line, one per adjacency list */
+    /* ---------------------------------------------------------------------- */
+
+    /* printf ("reading graph ...\n") ; */
+
+    for (i = 1 ; i <= n ; i++)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* remove leading comment lines */
+        /* ------------------------------------------------------------------ */
+
+        /* if (i % 10000 == 0) printf (".") ; */
+
+        eat_comments (f) ;
+
+        /* ------------------------------------------------------------------ */
+        /* read each node weight */
+        /* ------------------------------------------------------------------ */
+
+        status = 1 ;
+        for (k = 0 ; k < ncon ; k++)
+        {
+            x = 0 ;
+            status = get_token (f, s, LEN) ;
+            if (sscanf (s, "%lg", &x) != 1)
+            {
+                sprintf (msg, "node %lg: missing node weights", (double) i) ;
+                mexWarnMsgIdAndTxt ("metis_graph:missing_node_weights", msg) ;
+            }
+            W [i-1 + k*n] = x ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* read each edge */
+        /* ------------------------------------------------------------------ */
+
+        while (status >= 1)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* get the node number */
+            /* -------------------------------------------------------------- */
+
+            status = get_token (f, s, LEN) ;
+            if (status == EOF) break ;
+            if (sscanf (s, "%lg", &x) != 1) break ;
+            j = (Int) x ;
+            if ((double) j != x || j <= 0 || j > n)
+            {
+                sprintf (msg, "node %lg: edge %lg invalid", (double) i, x) ;
+                mexErrMsgIdAndTxt ("metis_graph:invalid_edge", msg) ;
+            }
+
+            /* -------------------------------------------------------------- */
+            /* allocate more space if needed */
+            /* -------------------------------------------------------------- */
+
+            if (nz == nzmax)
+            {
+                /* double the space */
+                /* printf ("nzmax %g ", nzmax) ; */
+                nzmax = 2 * nzmax + n ;
+                /* printf ("to %g\n", nzmax) ; */
+                t = MAX (nzmax, 1) * sizeof (double) ;
+                Ti = mxRealloc (Ti, t) ;
+                mxSetPr (pargout [0], Ti) ;
+                mxSetM  (pargout [0], nzmax) ;
+                Tj = mxRealloc (Tj, t) ;
+                mxSetPr (pargout [1], Tj) ;
+                mxSetM  (pargout [1], nzmax) ;
+                if (has_ew)
+                {
+                    Tx = mxRealloc (Tx, t) ;
+                    mxSetPr (pargout [2], Tx) ;
+                    mxSetM  (pargout [2], nzmax) ;
+                }
+            }
+
+            /* -------------------------------------------------------------- */
+            /* get the edge weight, if present */
+            /* -------------------------------------------------------------- */
+
+            if (has_ew)
+            {
+                s [0] = '\0' ;
+                if (status == 1)
+                {
+                    status = get_token (f, s, LEN) ;
+                }
+                if (status == EOF || sscanf (s, "%lg", &e) != 1)
+                {
+                    sprintf (msg, "node %lg: missing edge weight", (double) i) ;
+                    mexErrMsgIdAndTxt ("metis_graph:invalid_edge_weight", msg) ;
+                }
+                Tx [nz] = e ;
+            }
+
+            /* -------------------------------------------------------------- */
+            /* add edge (i,j) to the triplet form */
+            /* -------------------------------------------------------------- */
+
+            Ti [nz] = i ;
+            Tj [nz] = j ;
+            nz++ ;
+        }
+    }
+
+    fclose (f) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* return the results */
+    /* ---------------------------------------------------------------------- */
+
+    /* printf ("returning results %d %d\n", nz, nzmax) ; */
+    if (nz < nzmax)
+    {
+        t = MAX (nz, 1) * sizeof (double) ;
+        mxSetPr (pargout [0], mxRealloc (Ti, t)) ;
+        mxSetM  (pargout [0], nz) ;
+        mxSetPr (pargout [1], mxRealloc (Tj, t)) ;
+        mxSetM  (pargout [1], nz) ;
+        if (has_ew)
+        {
+            mxSetPr (pargout [2], mxRealloc (Tx, t)) ;
+            mxSetM  (pargout [2], nz) ;
+        }
+    }
+    pargout [4] = mxCreateDoubleScalar ((double) fmt) ;
+    /* printf ("done\n") ; */
+}
diff --git a/MATLAB_Tools/dimacs10/metis_graph_test.m b/MATLAB_Tools/dimacs10/metis_graph_test.m
new file mode 100644
index 0000000..bb65fd2
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/metis_graph_test.m
@@ -0,0 +1,125 @@
+function metis_graph_test
+%METIS_GRAPH_TEST tests the metis_graph installation
+% Your current directory must be dimacs10/
+%
+% Example
+%
+%   metis_graph_test
+%
+% See also metis_graph_read, metis_graph_install
+
+% Copyright 2011, Tim Davis
+
+%-------------------------------------------------------------------------------
+% tests with valid graphs
+%-------------------------------------------------------------------------------
+
+graphs = {
+'fig8a.graph'
+'fig8b.graph'
+'fig8c.graph'
+'fig8d.graph'
+'adjnoun.graph'
+'ilp_test.graph'
+'multi.graph'
+} ;
+
+clf ;
+
+for i = 1:length (graphs)
+    fprintf ('\n----------------------------METIS graph %s :\n', graphs {i}) ;
+    [A w fmt] = metis_graph_read (graphs {i}) ;
+    k = size (w, 2) ;
+    fprintf ('fmt: %3d : ', fmt) ;
+    switch fmt
+        case {0, 100}
+            fprintf ('no node weights, no edge weights.\n') ;
+        case 1
+            fprintf ('no node weights, has edge weights.\n') ;
+        case 10
+            fprintf ('has %d node weight(s) per node, no edge weights.\n', k) ;
+        case 11
+            fprintf ('has %d node weight(s) per node, has edge weights.\n', k) ;
+    end
+    if (fmt == 100)
+        fprintf ('DIMACS10 extension: may have self-edges and multiple\n') ;
+        fprintf ('edges.  A(i,j) is the # of edges (i,j)\n') ;
+    else
+        fprintf ('No self-edges and no multiple edges present in the graph.\n');
+    end
+    subplot (2,4,i) ;
+    spy (A) ;
+    if (size (A,1) < 10)
+        A = full (A) ;
+        display (A) ;
+    end
+    title (graphs {i}) ;
+    if (size (w,2) > 0)
+        display (w) ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% error testing with invalid graphs or invalid usage
+%-------------------------------------------------------------------------------
+
+err = 0 ;
+bad_graphs = {
+'nosuchfile.graph'
+'bad1.graph'
+'bad2.graph'
+'bad3.graph'
+'bad4.graph'
+'bad5.graph'
+'bad6.graph'
+'bad7.graph'
+'bad8.graph'
+'bad9.graph'
+} ;
+
+fprintf ('\nTesting error handling (errors and warnings are expected):\n') ;
+lastwarn ('') ;
+for i = 1:length (bad_graphs)
+    fprintf ('%-20s : ', bad_graphs {i}) ;
+    try
+        [A w fmt] = metis_graph_read (bad_graphs {i}) ;                     %#ok
+        if (isempty (lastwarn))
+            err = err + 1 ;
+        end
+    catch me
+        fprintf ('expected error: %s\n', me.message) ;
+    end
+end
+
+fprintf ('invalid usage        : ') ;
+try
+    % too few input arguments
+    [A w fmt] = metis_graph_read ;                                          %#ok
+    err = err + 1 ;
+catch me
+    fprintf ('expected error: %s\n', me.message) ;
+end
+
+fprintf ('invalid usage        : ') ;
+try
+    % too many output arguments
+    [i j x w fmt gunk] = metis_graph_read_mex ('fig8a.graph') ;             %#ok
+    err = err + 1 ;
+catch me
+    fprintf ('expected error: %s\n', me.message) ;
+end
+
+fprintf ('invalid usage        : ') ;
+try
+    % invalid input
+    [i j x w fmt] = metis_graph_read_mex (0) ;                              %#ok
+    err = err + 1 ;
+catch me
+    fprintf ('expected error: %s\n', me.message) ;
+end
+
+if (err > 0)
+    error ('%d errors not caught!', err) ;
+end
+
+fprintf ('\nAll tests passed.\n') ;
diff --git a/MATLAB_Tools/dimacs10/multi.graph b/MATLAB_Tools/dimacs10/multi.graph
new file mode 100644
index 0000000..2e0fa3b
--- /dev/null
+++ b/MATLAB_Tools/dimacs10/multi.graph
@@ -0,0 +1,9 @@
+% a simple unweighted multigraph
+7 12 100
+5 3 2 2
+1 3 4 1
+5 4 2 1
+2 3 6 7
+1 3 6
+5 4 7
+6 4
diff --git a/MATLAB_Tools/find_components/Contents.m b/MATLAB_Tools/find_components/Contents.m
new file mode 100644
index 0000000..6f05edb
--- /dev/null
+++ b/MATLAB_Tools/find_components/Contents.m
@@ -0,0 +1,14 @@
+% FIND_COMPONENTS finds connected components in an image.
+% This is a solution to Doug Hull's Puzzler, in his Aug 18, 2008 blog:
+% http://blogs.mathworks.com/pick/2008/08/18/
+%
+% Files
+%   find_components         - finds all connected components of an image.
+%   find_components_example - gives an example usage of find_components.
+%   largest_component       - finds the largest connected component in an image.
+%
+% Example
+%   find_components_example         % prints and plots and small example
+%   find_components_example(2)      % a large example, just plotting
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/find_components/find_components.m b/MATLAB_Tools/find_components/find_components.m
new file mode 100644
index 0000000..61c6081
--- /dev/null
+++ b/MATLAB_Tools/find_components/find_components.m
@@ -0,0 +1,249 @@
+function [p, r, nc, G, xy] = find_components (A,sorted)
+%FIND_COMPONENTS finds all connected components of an image.
+% Two pixels in an image are in the same connected component if and only if
+% they are adjacent and have the same value.  "Adjacent" in this context means
+% north/south or east/west, not diagonally.  That is, A(2,3) is adjacent to
+% A(2,2), A(2,4), A(1,3), and A(3,3) only, and is not adjacent to A(3,4).
+%
+% Let [p r] = find_components(A) where A is m-by-n.  The result is a permutation
+% p and component boundaries r.  p is a permutation of 1:m*n, and refers to the
+% linear indexing of A.  That is, A(i,j) is refered to as A(i+j*m) in the list
+% p.  The kth connected component consists of A (p (r(k) : r(k+1)-1)).
+% The number of connected components is nc = length (r) - 1.  The components
+% are ordered by the smallest linear index in each component (assuming you have
+% MATLAB 7.5 or later, which uses DMPERM from CSparse; otherwise the ordering
+% is not defined).
+%
+% With a single output argument, c = find_components (A) just returns a list
+% of the nodes in the largest component (the component with the largest value
+% if ties, and if there are 2 components still tied, return the one containing
+% the smallest node index).
+%
+% The are no restrictions on the image A except that it must be a 2D matrix,
+% and the operator "==" must be defined on its entries.  If sorting of the
+% components by size is requested or if the largest component is requested,
+% double(A) must be computable.
+%
+% Usage:
+%   c = find_components (A) ;       % just return nodes in the largest component
+%   [p r nc G xy] = find_components (A) ;       % sorted by least node number
+%   [p r nc G xy] = find_components (A, 1) ;    % sorted by size, ties by value
+%   find_components (A) ;                       % just plot the graph
+%
+% Example:
+%
+%   A = [ 1 2 2 3
+%         1 1 2 3
+%         0 0 1 2
+%         0 1 3 3 ]
+%   [p r nc] = find_components (A,1)
+%   [m n] = size (A) ;
+%   for k = 1:nc
+%       a = A (p (r (k))) ;
+%       fprintf ('\ncomponent %d, size %d, value %d\n', k, r(k+1)-r(k), a) ;
+%       C = nan (m,n) ;
+%       C (p (r (k) : r (k+1)-1)) =  a ;
+%       fprintf ('A = \n') ; disp (A) ;
+%       fprintf ('the component = \n') ; disp (C) ;
+%       input (': ', 's') ;
+%   end
+%
+% The optional outputs G and xy give a graph representation of the problem
+% which can be viewed with gplot(G,xy).
+%
+% See also LARGEST_COMPONENT, FIND_COMPONENTS_EXAMPLE, DMPERM, GPLOT
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% number the nodes
+%-------------------------------------------------------------------------------
+
+% K is a matrix containing the linear index into A.  For the example above,
+%
+% K = [ 1 5  9 13
+%       2 6 10 14
+%       3 7 11 15
+%       4 8 12 16 ]
+%
+% The "nodes" of A are simply their linear indices.  For example, A(2,3)
+% is called node 10.
+
+[m n] = size (A) ;
+N = m*n ;                       % N = number of nodes in A
+K = reshape (1:N, m, n) ;
+
+%-------------------------------------------------------------------------------
+% look to the east
+%-------------------------------------------------------------------------------
+
+% If A(i,j) == A(i,j+1), then East(i,j) is set to K(i,j+1).  That is, East(i,j)
+% gives the node number of the Eastern neighbor of the node A(i,j).
+%
+% In this example, East = [
+%   0 9  0  0
+%   6 0  0  0
+%   7 0  0  0
+%   0 0 16  0 ]
+%
+% because (for example) node 5 has an Eastern neighbor, node 9 (A(5) == A(9)).
+
+East = [(K (:,2:n) .* (A (:,1:n-1) == A (:,2:n))) zeros(m,1)] ;
+
+% E gives the node numbers of all nodes with Eastern neighbors.  For example,
+% E = [2 3 5 12]' ;
+
+E = find (East) ;
+
+%-------------------------------------------------------------------------------
+% look to the south
+%-------------------------------------------------------------------------------
+
+% If A(i,j) == A(i+1,j), then South(i,j) is set to K(i+1,j).  That is,
+% South(i,j) gives the node number of the Southern neighbor of the node A(i,j).
+%
+% In this example, South = [
+%   2 0 10 14
+%   0 0  0  0
+%   4 0  0  0
+%   0 0  0  0 ]
+%
+% because (for example) node 4 has a Southern neighbor, node 4 (A(3) == A(4)).
+% Then S gives the node numbers of all nodes with Southern neighbors.
+
+South = [(K (2:m,:) .* (A (1:m-1,:) == A (2:m,:))) ; zeros(1,n)] ;
+S = find (South) ;
+
+%-------------------------------------------------------------------------------
+% create the graph G
+%-------------------------------------------------------------------------------
+
+% The graph G is N-by-N for an image A of size m-by-n with N=m*n nodes.
+% There is an edge between two nodes if they are neighbors (that is, if the
+% two nodes are adjacent and have the same value).  A diagonal is added to
+% the graph so that DMPERM knows that the matrix G does not need to first be
+% permuted to reveal a maximum matching ... that step is skipped.
+%
+% Ignoring the diagonal entries, in this example, G = 
+%
+%      (2,1)        1
+%      (1,2)        1
+%      (6,2)        1
+%      (4,3)        1
+%      (7,3)        1
+%      (3,4)        1
+%      (9,5)        1
+%      (2,6)        1
+%      (3,7)        1
+%      (5,9)        1
+%     (10,9)        1
+%      (9,10)       1
+%     (16,12)       1
+%     (14,13)       1
+%     (13,14)       1
+%     (12,16)       1
+%
+% If drawn as a 4-by-4 mesh, with edges between neighbors, G looks like this:
+%
+%       1   5 -  9   13
+%       |        |    |
+%       2 - 6   10   14
+%
+%       3 - 7   11   15
+%       |
+%       4   8   12 - 16
+%
+%  If the nodes are labeled according the value of A, the graph looks like this:
+%
+%       1   2 -  2    3
+%       |        |    |
+%       1 - 1    2    3
+%
+%       0 - 0    1   15
+%       |
+%       0   1    3 -  3
+
+G = sparse ([K(E) ; K(S)], [East(E) ; South(S)], 1, N, N) ;
+clear K East E South S      % free up some space in case the problem is large
+G = G + G' + speye (N) ;
+
+%-------------------------------------------------------------------------------
+% find the connected components of G
+%-------------------------------------------------------------------------------
+
+% Note that p==q and r==s, since the matrix G is square with zero-free diagonal.
+% nc gives the number of connected components.
+
+[p q r s] = dmperm (G) ;            %#ok  (s is unused, present for comments)
+nc = length (r) - 1 ;
+
+%-------------------------------------------------------------------------------
+% sort the components by size, if requested (the rest is all optional)
+%-------------------------------------------------------------------------------
+
+if (nargin < 2)
+    % the default is not to sort the components
+    sorted = 0 ;
+end
+
+if (nargout == 1)
+    % largest component is requested, so we must sort
+    sorted = 1 ;
+end
+
+if (sorted)
+
+    [ignore i] = sortrows ([diff(r)' double(A(p(r(1:end-1)))')], [-1 -2]) ;
+
+    if (nargout == 1)
+
+        % just return the largest component
+        c = i (1) ;
+        p = p (r (c) : r (c + 1) - 1) ;
+
+    else
+
+        % sort all the components (this can be costly)
+        p2 = zeros (1,N) ;
+        r2 = zeros (1,nc+1) ;
+        k2 = 0 ;
+        for k = 1:nc
+            % get the nodes and the size of the kth largest component, c
+            c = i (k) ;
+            nodes = p (r (c) : r (c + 1) - 1) ;
+            csize = length (nodes) ;
+            % place the nodes in the new output permutation
+            p2 (k2+1 : k2+csize) = nodes ;
+            r2 (k) = k2+1 ;
+            k2 = k2 + csize ;
+        end
+        r2 (nc+1) = N+1 ;
+        p = p2 ;
+        r = r2 ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% return the XY coordinates, if requested or if the graph is to be plotted
+%-------------------------------------------------------------------------------
+
+if (nargout >= 5 || nargout == 0)
+    x = repmat (1:n, n, 1) ;
+    y = repmat (m:-1:1, 1, m) ;
+    xy = [x(:) y(:)] ;
+end
+
+%-------------------------------------------------------------------------------
+% plot the graph if no outputs requested
+%-------------------------------------------------------------------------------
+
+if (nargout == 0)
+    if (N < 100)
+        gplot (G, xy, 'o-') ;
+    else
+        gplot (G, xy) ;
+    end
+    axis ([0 n+1 0 m+1]) ;
+    title (sprintf ('%d connected components', nc)) ;
+end
+
diff --git a/MATLAB_Tools/find_components/find_components.png b/MATLAB_Tools/find_components/find_components.png
new file mode 100644
index 0000000..83d268a
Binary files /dev/null and b/MATLAB_Tools/find_components/find_components.png differ
diff --git a/MATLAB_Tools/find_components/find_components_example.m b/MATLAB_Tools/find_components/find_components_example.m
new file mode 100644
index 0000000..44b7da8
--- /dev/null
+++ b/MATLAB_Tools/find_components/find_components_example.m
@@ -0,0 +1,131 @@
+function find_components_example(example, dopause)
+%FIND_COMPONENTS_EXAMPLE gives an example usage of find_components.
+%
+% Example:
+%   find_components_example(0)  % a small example, with lots of printing
+%   find_components_example(1)  % Doug's example, with lots of printing
+%   find_components_example(2)  % a large example, just plotting
+%   find_components_example(A)  % use the matrix A for the example
+%
+% See http://blogs.mathworks.com/pick/2008/08/18 for Doug Hull's description of
+% the problem this m-file solves.  With no inputs, Doug's example is used.
+%
+% See also FIND_COMPONENTS, LARGEST_COMPONENT, DMPERM, GPLOT
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% construct an image
+%-------------------------------------------------------------------------------
+
+if (nargin < 1)
+    example = 1 ;
+end
+if (example == 0)
+    A = [ 1 2 2 3
+          1 1 2 3
+          0 0 1 2
+          0 1 3 3 ] ;
+elseif (example == 1)
+    A = [ 2 2 1 1 2
+          3 0 1 0 1
+          3 2 2 2 1
+          1 2 2 1 2
+          0 3 2 0 1 ] ;
+elseif (example == 2)
+    A = round (rand (30) * 2) ;
+else
+    A = example ;
+end
+[m n] = size (A) ;
+
+%-------------------------------------------------------------------------------
+% find all of its components
+%-------------------------------------------------------------------------------
+
+tic
+[p r nc G xy] = find_components (A,1) ;
+t = toc ;
+fprintf ('Image size: %d-by-%d, time taken: %g seconds\n', m, n, t) ;
+
+%-------------------------------------------------------------------------------
+% walk through the components, plotting and printing them.
+%-------------------------------------------------------------------------------
+
+prompt = 'hit enter to single-step, ''a'' to show all, ''q'' to quit: ' ;
+small = (max (m,n) <= 10) ;
+if (nargin < 2)
+    dopause = 1 ;
+end
+
+for k = 1:nc
+
+    % get the nodes of the kth component
+    nodes = p (r (k) : r (k+1)-1) ;
+
+    % for large graphs, do not show components of size 1
+    if (~small && length (nodes) == 1)
+        continue
+    end
+
+    % plot the graph with the kth component highlighted
+    hold off
+    gplot (G, xy, '-') ;
+    hold on
+    [X,Y] = gplot (G * sparse (nodes, nodes, 1, m*n, m*n), xy, 'r-') ;
+    plot (X, Y, 'r-', 'LineWidth', 3) ;
+    axis ([0 n+1 0 m+1]) ;
+    a = A (p (r (k))) ;
+    siz = length (nodes) ;
+    Title = sprintf ('Graph component %d, size %d, value %g', k, siz, a) ;
+    title (Title, 'FontSize', 20) ;
+    label_nodes (xy, A, small, nodes) ;
+    drawnow
+
+    % print the image and the kth component, if the image is small
+    if (small)
+        fprintf ('\n%s\n', Title) ;
+        C = nan (m,n) ;
+        C (nodes) =  a ;
+        fprintf ('A = \n') ; disp (A) ;
+        fprintf ('the component = \n') ; disp (C) ;
+    end
+
+    % pause, or prompt the user
+    if (dopause && (k < nc))
+        s = input (prompt, 's') ;
+        dopause = isempty (s) ;
+        if (~dopause && s (1) == 'q')
+            break ;
+        end
+    else
+        pause (0.5)
+    end
+end
+
+%-------------------------------------------------------------------------------
+% plot the whole graph, no components highlighted
+%-------------------------------------------------------------------------------
+
+hold off
+gplot (G, xy, '-') ;
+title (sprintf ('%d connected components', nc), 'FontSize', 20) ;
+axis ([0 n+1 0 m+1]) ;
+label_nodes (xy, A, small)
+
+%-------------------------------------------------------------------------------
+
+function label_nodes (xy, A, small, nodes)
+%LABEL_NODES label all the nodes in the plot
+if (small)
+    [m n] = size (A) ;
+    for i = 1:m*n
+        text (xy (i,1), xy (i,2), sprintf ('%g', A (i)), 'FontSize', 20) ;
+    end
+    if (nargin == 4)
+        for i = nodes
+            text (xy (i,1), xy (i,2), sprintf ('%g', A (i)), ...
+                'FontSize', 20, 'Color', 'r') ;
+        end
+    end
+end
diff --git a/MATLAB_Tools/find_components/largest_component.m b/MATLAB_Tools/find_components/largest_component.m
new file mode 100644
index 0000000..71c4cf7
--- /dev/null
+++ b/MATLAB_Tools/find_components/largest_component.m
@@ -0,0 +1,29 @@
+function C = largest_component (A)
+%LARGEST_COMPONENT finds the largest connected component in an image.
+% C = largest_component (A) returns an image C whose entries are equal to 1
+% if A(i,j) is in the largest component of A, or zero otherwise.  In case of
+% a tie, the largest component with the largest label A(i,j) is returned.
+% If still tied, the component the smallest index i is returned (where i is the
+% linear index of A(i) for all entries in the component).
+%
+% Example:
+%
+%   A = [ 1 2 2 3
+%         1 1 2 3
+%         0 0 1 2
+%         0 1 3 3 ]
+%   C = largest_component (A)
+%
+%   returns C = [
+%         0 1 1 0
+%         0 0 1 0
+%         0 0 0 0
+%         0 0 0 0 ]
+%
+% See also FIND_COMPONENTS, FIND_COMPONENTS_EXAMPLE, DMPERM
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+% return the new binary image with just the largest component
+C = zeros (size (A), class (A)) ;
+C (find_components (A)) = 1 ;
diff --git a/MATLAB_Tools/getversion.m b/MATLAB_Tools/getversion.m
index 53d4694..6ea0162 100644
--- a/MATLAB_Tools/getversion.m
+++ b/MATLAB_Tools/getversion.m
@@ -4,10 +4,15 @@ function v = getversion
 % allows simple inequality comparisons to select code variants based on ranges
 % of MATLAB versions.
 %
-% As of MATLAB 7.5, the version numbers are listed below:
+% As of MATLAB 7.10, the version numbers are listed below:
 %
 %   MATLAB version                      getversion return value
 %   -------------------------------     -----------------------
+%   7.10.0.499 (R2010a)                 8.0 (this needs to be fixed).
+%   7.9.0.529 (R2009b)                  7.9
+%   7.8.0.347 (R2009a)                  7.8
+%   7.7.0.xxx (R2008b)                  7.7
+%   7.6.0.324 (R2008a)                  7.6
 %   7.5.0.342 (R2007b)                  7.5
 %   7.4.0.287 (R2007a)                  7.4
 %   7.3.0.267 (R2006b)                  7.3
@@ -32,12 +37,16 @@ function v = getversion
 %           this code is for MATLAB versions prior to 6.5.2
 %       end
 %
-% This getversion function has been tested on versions 6.1 through 7.5, but it
+% This getversion function has been tested on versions 6.1 through 7.10, but it
 % should work in any MATLAB that has the functions version, sscanf, and length.
 %
+% MATLAB 7.10 adds a twist.  It is the first subversion that is 2 digits
+% ("10").  I need to decide how to handle this case.  I can't return 7.1,
+% of course.  But returning 8.0 is also problematic.
+%
 % See also version, ver, verLessThan.
 
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
+% Copyright 2007, Timothy A. Davis
 
 % This function does not use ver, in the interest of speed and portability.
 % "version" is a built-in that is about 100 times faster than the ver m-file.
diff --git a/MATLAB_Tools/gipper.m b/MATLAB_Tools/gipper.m
index d282d82..5622f2d 100644
--- a/MATLAB_Tools/gipper.m
+++ b/MATLAB_Tools/gipper.m
@@ -59,7 +59,7 @@ function files_out = gipper (directory, include, exclude, exclude_hidden)
 % while the gipper is running, your current directory will now be the parent.
 % You must install the gipper first, by placing it in your MATLAB path.
 
-% Copyright 2007, Timothy A. Davis, Univ. of Florida.  Win one for the gipper.
+% Copyright 2007, Timothy A. Davis, Win one for the gipper.
 % Created May 2007, using MATLAB 7.4 (R2007a).  Requires MATLAB 6.5 or later.
 
 % exclude hidden files and directories by default
@@ -75,7 +75,7 @@ exclude = cleanup (exclude) ;
 
 % append the hidden file and directory rule, if requested
 if (exclude_hidden)
-    exclude = union (exclude, { '^\.', [ '\' filesep '\.' ] }) ;
+    exclude = union (exclude, { '^\.', [ '\' '/' '\.' ] }) ;
 end
 
 % always exclude '.' and '..' files
@@ -90,7 +90,7 @@ include = cleanup (include) ;
 % operate on the current directory, if not specified
 if (nargin < 1 || isempty (directory))
     here = pwd ;
-    directory = here ((find (here == filesep, 1, 'last') + 1) : end) ;
+    directory = here ((find (here == '/', 1, 'last') + 1) : end) ;
     % use try-catch so that if a failure occurs, we go back to current
     % directory.  Unfortunately, this mechanism does not catch a control-C.
     gipper_found = 0 ;
@@ -124,7 +124,7 @@ if (nargin < 1 || isempty (directory))
     return
 else
     if (nargout == 0)
-	fprintf ('\ngipper: creating %s%s%s.zip\n', pwd, filesep, directory) ;
+	fprintf ('\ngipper: creating %s%s%s.zip\n', pwd, '/', directory) ;
     end
 end
 
@@ -175,7 +175,7 @@ zip (directory, files) ;
 function [files, n] = finder (files, n, prefix, name, include, exclude)
 % finder: return a list of files to zip
 % fullname includes the entire path to the file or directory
-fullname = [prefix filesep name] ;
+fullname = [prefix '/' name] ;
 if (isdir (fullname))
     % always traverse a subdirectory to look for files to include, unless the
     % directory name or fullname itself is explicitly excluded.
diff --git a/MATLAB_Tools/pagerankdemo.m b/MATLAB_Tools/pagerankdemo.m
index 6aeba50..787f585 100644
--- a/MATLAB_Tools/pagerankdemo.m
+++ b/MATLAB_Tools/pagerankdemo.m
@@ -35,7 +35,7 @@ function pagerankdemo (steps)
 % I suggest single-stepping a dozen times or so to see the link traversal in
 % process, and then type "1000".  Hit control-C to quit.
 %
-% Copyright 2007, Tim Davis, University of Florida
+% Copyright 2007, Tim Davis
 
 % Initial graph
 Graph = graphinit ;
diff --git a/MATLAB_Tools/shellgui/Contents.m b/MATLAB_Tools/shellgui/Contents.m
index 784b9c2..4d3ea5e 100644
--- a/MATLAB_Tools/shellgui/Contents.m
+++ b/MATLAB_Tools/shellgui/Contents.m
@@ -2,7 +2,7 @@
 %
 % Files
 %   shellgui - GUI interface for seashell function
-%   seashell - draws a pretty Florida seashell, using a 3D parametric surface.
+%   seashell - draws a pretty seashell, using a 3D parametric surface.
 %
 
 % Example
diff --git a/MATLAB_Tools/shellgui/seashell.m b/MATLAB_Tools/shellgui/seashell.m
index afa2b8c..603796f 100644
--- a/MATLAB_Tools/shellgui/seashell.m
+++ b/MATLAB_Tools/shellgui/seashell.m
@@ -1,5 +1,5 @@
 function seashell (a, b, c, n, azimuth, elevation, res)
-% SEASHELL draws a pretty Florida seashell, using a 3D parametric surface.
+% SEASHELL draws a pretty seashell, using a 3D parametric surface.
 %
 % Usage:
 %
@@ -46,7 +46,7 @@ function seashell (a, b, c, n, azimuth, elevation, res)
 % See also SHELLGUI, SURF, VIEW, LINSPACE, MESHGRID, SHADING, LIGHTING,
 %   LIGHTANGLE, COLORMAP, AXIS, MATERIAL, SIN, COS, PI.
 
-% Copyright 2006, Tim Davis, University of Florida
+% Copyright 2006, Timothy A. Davis, http://www.suitesparse.com
 
 % use default input parameters, if not present
 if (nargin == 1 && ischar (a))
diff --git a/MATLAB_Tools/shellgui/shellgui.m b/MATLAB_Tools/shellgui/shellgui.m
index fe6aa2b..6cef470 100644
--- a/MATLAB_Tools/shellgui/shellgui.m
+++ b/MATLAB_Tools/shellgui/shellgui.m
@@ -320,5 +320,5 @@ function pushbutton9_Callback(hObject, eventdata, handles)      %#ok
 % eventdata  reserved - to be defined in a future version of MATLAB
 % handles    structure with handles and user data (see GUIDATA)
 
-web ('http://www.cise.ufl.edu/research/sparse/MATLAB') ;
+web ('http://www.suitesparse.com') ;
 
diff --git a/MATLAB_Tools/sparseinv/Contents.m b/MATLAB_Tools/sparseinv/Contents.m
new file mode 100644
index 0000000..ba9f219
--- /dev/null
+++ b/MATLAB_Tools/sparseinv/Contents.m
@@ -0,0 +1,15 @@
+% SPARSEINV  The sparseinv function computes the sparse inverse subset of a
+% sparse matrix A.  These entries in the inverse subset correspond to nonzero
+% entries in the factorization of A.  They can be computed without computing
+% all of the entries in inv(A), so this method is much faster and takes much
+% less memory than inv(A).  If A is symmetric and positive definite, then all
+% entries of the diagona of inv(A) are computed (as well as many off-diagonal
+% terms.  This version is restricted to real sparse matrices.  A complex
+% version is left for future work.
+%
+% Copyright (c) 2011, Timothy A. Davis
+%
+% Files
+%   sparseinv         - computes the sparse inverse subset of a real sparse square matrix A.
+%   sparseinv_install - compiles and installs the sparseinv function.
+%   sparseinv_test    - tests the sparseinv function.
diff --git a/MATLAB_Tools/sparseinv/sparseinv.c b/MATLAB_Tools/sparseinv/sparseinv.c
new file mode 100644
index 0000000..9cc46b9
--- /dev/null
+++ b/MATLAB_Tools/sparseinv/sparseinv.c
@@ -0,0 +1,167 @@
+#include "sparseinv.h"
+
+/* sparsinv: computes the sparse inverse subset, using Takahashi's equations.
+
+   On input, the pattern of Z must be equal to the symbolic Cholesky
+   factorization of A+A', where A=(L+I)*(U+I).  The pattern of L+U must be a
+   subset of Z.  Z must have zero-free diagonal.  These conditions are
+   difficult to check, so they are assumed to hold.  Results will be completely
+   wrong if the conditions do not hold.
+
+   This function performs the same amount of work as the initial LU
+   factorization, assuming that the pattern of P*A*Q is symmetric.  For large
+   matrices, this function can take a lot more time than LU in MATLAB, even if
+   P*A*Q is symmetric.  This is because LU is a multifrontal method, whereas
+   this sparseinv function is based on gather/scatter operations.
+
+   The basic integer type is an Int, or ptrdiff_t, which is 32 bits on a 32
+   bits and 64 bits on a 64 bit system.  The function returns the flop count as
+   an Int.  This will not overflow on a 64 bit system but might on a 32 bit.
+   The total work is flops + O(n + nnz(Z)).  Since flops > n and flops > nnz(Z),
+   this is O(flops).
+
+   Copyright 2011, Timothy A. Davis, http://www.suitesparse.com
+*/
+
+Int sparseinv       /* returns -1 on error, or flop count if OK */
+(
+    /* inputs, not modified on output: */
+    Int n,          /* L, U, D, and Z are n-by-n */
+
+    Int *Lp,        /* L is sparse, lower triangular, stored by column */
+    Int *Li,        /* the row indices of L must be sorted */
+    double *Lx,     /* diagonal of L, if present, is ignored */
+
+    double *d,      /* diagonal of D, of size n */
+
+    Int *Up,        /* U is sparse, upper triangular, stored by row */
+    Int *Uj,        /* the column indices of U need not be sorted */
+    double *Ux,     /* diagonal of U, if present, is ignored */
+
+    Int *Zp,        /* Z is sparse, stored by column */
+    Int *Zi,        /* the row indices of Z must be sorted */
+
+    /* output, not defined on input: */ 
+    double *Zx,
+
+    /* workspace: */
+    double *z,      /* size n, zero on input, restored as such on output */
+    Int *Zdiagp,    /* size n */
+    Int *Lmunch     /* size n */
+)
+{
+    double ljk, zkj ;
+    Int j, i, k, p, znz, pdiag, up, zp, flops = n ;
+
+    /* ---------------------------------------------------------------------- */
+    /* initializations */
+    /* ---------------------------------------------------------------------- */
+
+    /* clear the numerical values of Z */
+    znz = Zp [n] ;
+    for (p = 0 ; p < znz ; p++)
+    {
+        Zx [p] = 0 ;
+    }
+
+    /* find the diagonal of Z and initialize it */
+    for (j = 0 ; j < n ; j++)
+    {
+        pdiag = -1 ;
+        for (p = Zp [j] ; p < Zp [j+1] && pdiag == -1 ; p++)
+        {
+            if (Zi [p] == j)
+            {
+                pdiag = p ;
+                Zx [p] = 1 / d [j] ;
+            }
+        }
+        Zdiagp [j] = pdiag ;
+        if (pdiag == -1) return (-1) ;  /* Z must have a zero-free diagonal */
+    }
+
+    /* Lmunch [k] points to the last entry in column k of L */
+    for (k = 0 ; k < n ; k++)
+    {
+        Lmunch [k] = Lp [k+1] - 1 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* compute the sparse inverse subset */
+    /* ---------------------------------------------------------------------- */
+
+    for (j = n-1 ; j >= 0 ; j--)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* scatter Z (:,j) into z workspace */
+        /* ------------------------------------------------------------------ */
+
+        /* only the lower triangular part is needed, since the upper triangular
+           part is all zero */
+        for (p = Zdiagp [j] ; p < Zp [j+1] ; p++)
+        {
+            z [Zi [p]] = Zx [p] ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* compute the strictly upper triangular part of Z (:,j) */
+        /* ------------------------------------------------------------------ */
+
+        /* for k = (j-1):-1:1 but only for the entries Z(k,j) */
+        for (p = Zdiagp [j]-1 ; p >= Zp [j] ; p--)
+        {
+            /* Z (k,j) = - U (k,k+1:n) * Z (k+1:n,j) */
+            k = Zi [p] ;
+            zkj = 0 ;
+            flops += (Up [k+1] - Up [k]) ;
+            for (up = Up [k] ; up < Up [k+1] ; up++)
+            {
+                /* skip the diagonal of U, if present */
+                i = Uj [up] ;
+                if (i > k)
+                {
+                    zkj -= Ux [up] * z [i] ;
+                }
+            }
+            z [k] = zkj ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* left-looking update to lower triangular part of Z */
+        /* ------------------------------------------------------------------ */
+
+        /* for k = (j-1):-1:1 but only for the entries Z(k,j) */
+        for (p = Zdiagp [j]-1 ; p >= Zp [j] ; p--)
+        {
+            k = Zi [p] ;
+
+            /* ljk = L (j,k) */
+            if (Lmunch [k] < Lp [k] || Li [Lmunch [k]] != j)
+            {
+                /* L (j,k) is zero, so there is no work to do */
+                continue ;
+            }
+            ljk = Lx [Lmunch [k]--] ;
+
+            /* Z (k+1:n,k) = Z (k+1:n,k) - Z (k+1:n,j) * L (j,k) */
+            flops += (Zp [k+1] - Zdiagp [k]) ;
+            for (zp = Zdiagp [k] ; zp < Zp [k+1] ; zp++)
+            {
+                Zx [zp] -= z [Zi [zp]] * ljk ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* gather Z (:,j) back from z workspace */
+        /* ------------------------------------------------------------------ */
+
+        for (p = Zp [j] ; p < Zp [j+1] ; p++)
+        {
+            i = Zi [p] ;
+            Zx [p] = z [i] ;
+            z [i] = 0 ;
+        }
+    }
+    return (flops) ;
+}
diff --git a/MATLAB_Tools/sparseinv/sparseinv.h b/MATLAB_Tools/sparseinv/sparseinv.h
new file mode 100644
index 0000000..fedb982
--- /dev/null
+++ b/MATLAB_Tools/sparseinv/sparseinv.h
@@ -0,0 +1,38 @@
+#ifndef _SPARSEINV_H_
+#define _SPARSEINV_H_
+#include <stddef.h>
+#ifdef MATLAB_MEX_FILE
+#include "mex.h"
+#define Int mwSignedIndex
+#else
+#define Int ptrdiff_t
+#endif
+
+Int sparseinv       /* returns 1 if OK, 0 if failure */
+(
+    /* inputs, not modified on output: */
+    Int n,          /* L, U, D, and Z are n-by-n */
+
+    Int *Lp,        /* L is sparse, lower triangular, stored by column */
+    Int *Li,        /* the row indices of L must be sorted */
+    double *Lx,     /* diagonal of L, if present, is ignored */
+
+    double *d,      /* diagonal of D, of size n */
+
+    Int *Up,        /* U is sparse, upper triangular, stored by row */
+    Int *Uj,        /* the column indices of U need not be sorted */
+    double *Ux,     /* diagonal of U, if present, is ignored */
+
+    Int *Zp,        /* Z is sparse, stored by column */
+    Int *Zi,        /* the row indices of Z must be sorted */
+
+    /* output, not defined on input: */ 
+    double *Zx,
+
+    /* workspace: */
+    double *z,      /* size n, zero on input, restored as such on output */
+    Int *Zdiagp,    /* size n */
+    Int *Lmunch     /* size n */
+) ;
+
+#endif
diff --git a/MATLAB_Tools/sparseinv/sparseinv.m b/MATLAB_Tools/sparseinv/sparseinv.m
new file mode 100644
index 0000000..12da992
--- /dev/null
+++ b/MATLAB_Tools/sparseinv/sparseinv.m
@@ -0,0 +1,122 @@
+function [Z, Zpattern, L, D, U, P, Q, stats] = sparseinv (A)
+%SPARSEINV computes the sparse inverse subset of a real sparse square matrix A.
+% This function is typically much faster than computing all of inv(A).
+%
+% [Z, Zpattern, L, D, U, P, Q, stats] = sparseinv (A)
+%
+% Z is a subset of the inverse a sparse matrix A of full rank.  On output, if
+% Zpattern(i,j)=1, it means that Z(i,j) has been computed.  That is, the norm
+% of (Zpattern .* (Z - inv (A))) will be small.
+%
+% Method: The permuted matrix C = P*A*Q is first factorized into C =
+% (L+I)*D*(U+I) where D is diagonal, L+I is lower triangular with unit
+% diagonal, and U+I is upper triangular with unit diagonal (I = speye (n)).  If
+% A is symmetric and positive definite, then a Cholesky factorization is used
+% (in which case P=Q' and L=U', and Z will include all diagonal entries of
+% inv(A)).  Next, the entries in the inverse of C that correspond to nonzero
+% values in Zpattern are found via Takahashi's method.  Zpattern is the
+% symbolic Cholesky factorization of C+C', so it includes all entries in L+U
+% and its transpose.
+%
+% stats is an optional struct containing statistics on the factorization.
+%
+% Example:
+%   load west0479
+%   A = west0479 ;
+%   [Z, Zpattern] = sparseinv (A) ;
+%   S = inv (A) ;
+%   err = norm (Zpattern .* (Z - S), 1) / norm (S, 1)
+%
+% See also inv, lu, chol.
+
+% Copyright 2011, Timothy A. Davis, http://www.suitesparse.com
+
+get_stats = (nargout > 7) ;
+if (get_stats)
+    t1 = tic ;
+end
+
+% check inputs
+if (~issparse (A))
+    error ('A must be sparse') ;
+end
+[m n] = size (A) ;
+if (m ~= n)
+    error ('A must be square') ;
+end
+if (~isreal (A))
+    error ('complex matrices not supported') ;
+end
+
+% construct the factorization: C = P*A*Q = (L+I)*D*(U+I)
+p = 1 ;
+if (all (diag (A)) > 0 && nnz (A-A') == 0)
+    [L,p,Q] = chol (A, 'lower') ;
+end
+if (p == 0)
+    % Cholesky worked.
+    P = Q' ;
+    d = diag (L) ;
+    L = tril (L / diag (d), -1) ;
+    U = L' ;
+    d = d.^2 ;
+    D = diag (d) ;
+else
+    % Cholesky failed, or wasn't attempted.  Use LU instead.
+    [L,U,P,Q] = lu (A) ;
+    d = diag (U) ;
+    if (any (d == 0))
+        error ('A must be full-rank') ;
+    end
+    D = diag (d) ;
+    U = triu (D \ U, 1) ;
+    L = tril (L, -1) ;
+end
+d = full (d) ;
+
+% find the symbolic Cholesky of C+C'
+S = spones (P*A*Q) ;
+[c,h,pa,po,R] = symbfact (S+S') ;
+clear h pa po
+Zpattern = spones (R+R') ;
+clear R S
+
+if (get_stats)
+    t1 = toc (t1) ;
+    t2 = tic ;
+end
+
+% compute the sparse inverse subset
+[Z takflops] = sparseinv_mex (L, d, U', Zpattern) ;
+if (p == 0)
+    % Force Z to be symmetric.  This is because sparseinv_mex does not
+    % exploit the symmetry in the factorization, but computes both upper and
+    % lower triangular parts of Z separately.  The work for the Takahashi
+    % equations could be cut in half as a result.
+    Z = (Z + Z') / 2 ;
+end
+
+% permute the result
+Z = Q*Z*P ;
+Zpattern = Q*Zpattern*P ;
+
+% return stats, if requested
+if (nargout > 7)
+    t2 = toc (t2) ;
+    if (p == 0)
+        stats.kind = 'Cholesky' ;
+        fl = 2*n + sum (c.^2) ;
+        stats.nnz_factors = sum (c) ;
+    else
+        stats.kind = 'LU' ;
+        Lnz = full (sum (spones (L))) ;	        % off diagonal nz in cols of L
+        Unz = full (sum (spones (U')))' ;	% off diagonal nz in rows of U
+        fl = n + 2*Lnz*Unz + sum (Lnz) ;
+        stats.nnz_factors = nnz (L) + nnz (U) + n ;
+    end
+    stats.flops_factorization = fl ;
+    stats.flops_Takahashi = takflops ;
+    stats.time_factorization = t1 ;
+    stats.time_Takahashi = t2 ;
+end
+
diff --git a/MATLAB_Tools/sparseinv/sparseinv_install.m b/MATLAB_Tools/sparseinv/sparseinv_install.m
new file mode 100644
index 0000000..fb6b370
--- /dev/null
+++ b/MATLAB_Tools/sparseinv/sparseinv_install.m
@@ -0,0 +1,21 @@
+function sparseinv_install
+%SPARSEINV_INSTALL compiles and installs the sparseinv function.
+% Your current working directory must be the sparseinv directory for this
+% function to work.
+%
+% Example:
+%   sparseinv_install
+%
+% See also sparseinv, sparseinv_test
+
+% Copyright 2011, Timothy A. Davis, http://www.suitesparse.com
+
+is64 = ~isempty (strfind (computer, '64')) ;
+if (is64)
+    fprintf ('Compiling sparseinv (64-bit)\n') ;
+    mex -largeArrayDims sparseinv_mex.c sparseinv.c
+else
+    fprintf ('Compiling sparseinv (32-bit)\n') ;
+    mex sparseinv_mex.c sparseinv.c
+end
+addpath (pwd)
diff --git a/MATLAB_Tools/sparseinv/sparseinv_mex.c b/MATLAB_Tools/sparseinv/sparseinv_mex.c
new file mode 100644
index 0000000..604f25c
--- /dev/null
+++ b/MATLAB_Tools/sparseinv/sparseinv_mex.c
@@ -0,0 +1,117 @@
+#include "sparseinv.h"
+
+/*
+    Z = sparseinv_mex (L, d, UT, Zpattern)
+
+    Given (L+I)*D*(UT+I)' = A, and the symbolic Cholesky factorization of A+A',
+    compute the sparse inverse subset, Z.  UT is stored by column, so U = UT'
+    is implicitly stored by row, and is implicitly unit-diagonal.  The diagonal
+    is not present.  L is stored by column, and is also unit-diagonal.  The
+    diagonal is not present in L, either.  d is a full vector of size n.
+
+    This mexFunction is only meant to be called from the sparsinv m-file.
+    An optional 2nd output argument returns the flop count.
+
+    Copyright 2011, Timothy A. Davis, http://www.suitesparse.com
+*/
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    Int *Zp, *Zi, *Lp, *Li, *Up, *Uj, *Zpatp, *Zpati, n, *Zdiagp, *Lmunch,
+        znz, j, p, flops ;
+    double *Zx, *Lx, *Ux, *z, *d ;
+
+    /* check inputs */
+    if (nargin != 4 || nargout > 2)
+    {
+        mexErrMsgTxt ("Usage: [Z flops] = sparseinv_mex (L, d, UT, Zpattern)") ;
+    }
+    n = mxGetN (pargin [0]) ;
+    for (j = 0 ; j < 4 ; j++)
+    {
+        if (j == 1) continue ;
+        if (!mxIsSparse (pargin [j]) || mxIsComplex (pargin [j]) ||
+            (mxGetM (pargin [j]) != n) || (mxGetN (pargin [j]) != n))
+        {
+            mexErrMsgTxt ("Matrices must be sparse, real, square, & same size");
+        }
+    }
+    if (mxIsSparse (pargin [1]) || mxIsComplex (pargin [1]) ||
+        (mxGetM (pargin [1]) != n) || (mxGetN (pargin [1]) != 1))
+    {
+        mexErrMsgTxt ("Input d must be a real dense vector of right size") ;
+    }
+
+    /* get inputs */
+    Lp = (Int *) mxGetJc (pargin [0]) ;
+    Li = (Int *) mxGetIr (pargin [0]) ;
+    Lx = mxGetPr (pargin [0]) ;
+
+    d = mxGetPr (pargin [1]) ;
+
+    Up = (Int *) mxGetJc (pargin [2]) ;
+    Uj = (Int *) mxGetIr (pargin [2]) ;
+    Ux = mxGetPr (pargin [2]) ;
+
+    Zpatp = (Int *) mxGetJc (pargin [3]) ;
+    Zpati = (Int *) mxGetIr (pargin [3]) ;
+    znz = Zpatp [n] ;
+
+    /* create output */
+    pargout [0] = mxCreateSparse (n, n, znz, mxREAL) ;
+    Zx = mxGetPr (pargout [0]) ;
+
+    /* get workspace */
+    z = mxCalloc (n, sizeof (double)) ;
+    Zdiagp = mxMalloc (n * sizeof (Int)) ;
+    Lmunch = mxMalloc (n * sizeof (Int)) ;
+
+    /* do the work */
+    flops = sparseinv (n, Lp, Li, Lx, d, Up, Uj, Ux, Zpatp, Zpati, Zx,
+        z, Zdiagp, Lmunch) ;
+
+    /* free workspace */
+    mxFree (z) ;
+    mxFree (Zdiagp) ;
+    mxFree (Lmunch) ;
+
+    /* return results to MATLAB */
+    Zp = (Int *) mxGetJc (pargout [0]) ;
+    Zi = (Int *) mxGetIr (pargout [0]) ;
+    for (j = 0 ; j <= n ; j++)
+    {
+        Zp [j] = Zpatp [j] ;
+    }
+    for (p = 0 ; p < znz ; p++)
+    {
+        Zi [p] = Zpati [p] ;
+    }
+
+    /* drop explicit zeros from the output Z matrix */
+    znz = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+        p = Zp [j] ;                        /* get current location of col j */
+        Zp [j] = znz ;                      /* record new location of col j */
+        for ( ; p < Zp [j+1] ; p++)
+        {
+            if (Zx [p] != 0)
+            {
+                Zx [znz] = Zx [p] ;         /* keep Z(i,j) */
+                Zi [znz++] = Zi [p] ;
+            }
+        }
+    }
+    Zp [n] = znz ;                          /* finalize Z */
+
+    if (nargout > 1)
+    {
+        pargout [1] = mxCreateDoubleScalar ((double) flops) ;
+    }
+}
diff --git a/MATLAB_Tools/sparseinv/sparseinv_test.m b/MATLAB_Tools/sparseinv/sparseinv_test.m
new file mode 100644
index 0000000..d154daf
--- /dev/null
+++ b/MATLAB_Tools/sparseinv/sparseinv_test.m
@@ -0,0 +1,149 @@
+function sparseinv_test (extensive)
+%SPARSEINV_TEST tests the sparseinv function.
+%
+% Example
+%   sparseinv_test ;        % basic test
+%   sparseinv_test (1) ;    % extensive test (requires UFget)
+%
+% See also sparseinv, sparseinv_install, UFget.
+
+% Copyright 2011, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 1)
+    extensive = 0 ;
+end
+
+load west0479 ;
+A = west0479 ;
+
+for k = 1:2
+
+    [Z, Zpattern, L, D, U, P, Q, stats] = sparseinv (A) ;
+
+    n = size (A,1) ;
+    I = speye (n) ;
+
+    S = inv (A) ;
+    Snorm = norm (S, 1) ;
+    e1 = norm (Zpattern.*(Z-S), 1) / Snorm ;
+    e2 = norm ((L+I)*D*(U+I) - P*A*Q, 1) / norm (A,1) ;
+    c = condest (A) ;
+
+    fprintf ('west0479: errors %g %g condest %g : ', e1, e2, c) ;
+    if (e1 > 1e-10 || e2 > 1e-10)
+        error ('west0479 test failed') ;
+    end
+    fprintf ('ok\n') ;
+    disp (stats) ;
+
+    % create a symmetric positive definite matrix to test with
+    if (k == 1)
+        A = A+A' + 1e6*I ;
+    end
+end
+
+% check error-handling
+fprintf ('testing error handling (errors below are expected)\n') ;
+ok = 1 ;
+A = ones (2) ;
+try
+    Z1 = sparseinv (A) ;                                                    %#ok
+    ok = 0 ;
+catch me
+    fprintf ('    expected error: %s\n', me.message) ;
+end
+A = sparse (ones (3,2)) ;
+try
+    Z2 = sparseinv (A) ;                                                    %#ok
+    ok = 0 ;
+catch me
+    fprintf ('    expected error: %s\n', me.message) ;
+end
+A = sparse (ones (3)) ;
+try
+    Z3 = sparseinv (A) ;                                                    %#ok
+    ok = 0 ;
+catch me
+    fprintf ('    expected error: %s\n', me.message) ;
+end
+A = 1i * sparse (ones (3)) ;
+try
+    Z4 = sparseinv (A) ;                                                    %#ok
+    ok = 0 ;
+catch me
+    fprintf ('    expected error: %s\n', me.message) ;
+end
+
+if (~ok)
+    error ('error-handling tests failed') ;
+end
+
+% now try with lots of matrices from the UF Sparse Matrix Collection
+if (extensive && exist ('UFget', 'file') == 2)
+
+    fprintf ('Now doing extensive tests with UF Sparse Matrix Collection:\n') ;
+    dofigures = (exist ('cspy', 'file') == 2) ;
+    if (dofigures)
+        clf ;
+    end
+
+    index = UFget ;
+    f = find ((index.nrows == index.ncols) & (index.isReal == 1)) ;
+    [ignore,i] = sort (index.nrows (f)) ;   %#ok
+    f = f (i) ;
+    nmat = length (f) ;
+
+    s = warning ('off', 'MATLAB:nearlySingularMatrix') ;
+
+    for k = 1:nmat
+        id = f (k) ;
+        Prob = UFget (id, index) ;
+        A = Prob.A ;
+        n = size (A,1) ;
+        I = speye (n) ;
+        fprintf ('id: %4d  n: %4d : %-30s', id, n, Prob.name) ;
+
+        Z = [ ] ; 
+        try
+            [Z, Zpattern, L, D, U, P, Q] = sparseinv (A) ;
+        catch me
+            fprintf ('%s', me.message) ;
+        end
+
+        if (~isempty (Z))
+            e = norm ((L+I) * D * (U+I) - P*A*Q, 1) / norm (A,1) ;
+            fprintf ('errs:  %12.3e ', e) ;
+            if (e > 1e-10)
+                error ('error in factorization too high') ;
+            end
+            S = inv (A) ;           % normally S has MANY nonzero entries
+            Snorm = norm (S,1) ;
+            E = abs (Zpattern .* (Z-S)) / Snorm ;
+            e = norm (E, 1) ;
+            c = condest (A) ;
+            fprintf (' %12.3e  condest: %12.2e', e, c) ;
+            if (e/c  > 1e-8)
+                error ('error in sparseinv too high') ;
+            end
+            fprintf (' ok') ;
+
+            if (dofigures)
+                subplot (2,2,1) ; cspy (A) ;
+                title (Prob.name, 'Interpreter', 'none') ;
+                subplot (2,2,2) ; cspy (P*A*Q) ;  title ('P*A*Q') ;
+                subplot (2,2,3) ; cspy (Z) ;      title ('sparse inverse') ;
+                subplot (2,2,4) ; cspy (S) ;      title ('inverse') ;
+                drawnow
+            end
+
+        end
+        fprintf ('\n') ;
+        if (n >= 300)
+            break ;
+        end
+    end
+
+    warning (s) ;       % restore warning status
+end
+
+fprintf ('All sparseinv tests passed.\n') ;
diff --git a/MATLAB_Tools/spok/Contents.m b/MATLAB_Tools/spok/Contents.m
new file mode 100644
index 0000000..a98bfb9
--- /dev/null
+++ b/MATLAB_Tools/spok/Contents.m
@@ -0,0 +1,25 @@
+% SPOK : checks the validity of a MATLAB sparse matrix.
+%
+% This function is of little use for those using purely M-files.  It is
+% extremely useful for those who write mexFunctions that return sparse matrices
+% to MATLAB.  A MATLAB sparse matrix is stored in compressed-column form, where
+% each column is stored as a list of entries with their row indices and their
+% corresponding numerical values.  Row indices must appear in ascending order,
+% and no explicitly zero numerical entries can appear.  Constructing a valid
+% sparse matrix in a mexFunction can be difficult.  This function will help you
+% to know if you've done that correctly.
+%
+% Files
+%   spok         - checks if a sparse matrix is OK
+%   spok_install - compiles and installs the SPOK mexFunction
+%   spok_test    - installs and tests SPOK
+%
+% Example
+%
+%   load west0479
+%   A = west0479 ;
+%   spok (A)                % double sparse
+%   spok (A + 1i*A)         % complex sparse
+%   spok (A > .5)           % logical sparse
+
+% Copyright 2008-2011, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/spok/private/spok_invalid.c b/MATLAB_Tools/spok/private/spok_invalid.c
new file mode 100644
index 0000000..af675cf
--- /dev/null
+++ b/MATLAB_Tools/spok/private/spok_invalid.c
@@ -0,0 +1,70 @@
+#include "../spok.h"
+
+/* spok_invalid: returns an invalid sparse matrix to test SPOK. */
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    SPOK_INT *Ap, *Ai ;
+    double *Ax ;
+    int kind ;
+
+    if (nargin == 0)
+    {
+        kind = 0 ;
+    }
+    else
+    {
+        kind = (int) mxGetScalar (pargin [0]) ;
+    }
+
+    if (kind < 0)
+    {
+
+        /* a sparse 2-by-2 matrix with invalid column pointers*/
+        pargout [0] = mxCreateSparse (2, 2, 4, mxREAL) ;
+        Ap = (mwSignedIndex *) mxGetJc (pargout [0]) ;
+        Ai = (mwSignedIndex *) mxGetIr (pargout [0]) ;
+        Ax = mxGetPr (pargout [0]) ;
+        Ap [0] = 2 ;
+        Ap [1] = 2 ;
+        Ap [2] = 2 ;
+
+    }
+    else if (kind == 0)
+    {
+
+        /* a sparse 1-by-1 matrix with one explicit zero */
+        pargout [0] = mxCreateSparse (1, 1, 1, mxREAL) ;
+        Ap = (mwSignedIndex *) mxGetJc (pargout [0]) ;
+        Ai = (mwSignedIndex *) mxGetIr (pargout [0]) ;
+        Ax = mxGetPr (pargout [0]) ;
+        Ap [0] = 0 ;
+        Ap [1] = 1 ;
+        Ai [0] = 0 ;
+        Ax [0] = 0 ;
+
+    }
+    else
+    {
+
+        /* a sparse 2-by-2 matrix with jumbled row indices */
+        pargout [0] = mxCreateSparse (2, 2, 4, mxREAL) ;
+        Ap = (mwSignedIndex *) mxGetJc (pargout [0]) ;
+        Ai = (mwSignedIndex *) mxGetIr (pargout [0]) ;
+        Ax = mxGetPr (pargout [0]) ;
+        Ap [0] = 0 ;
+        Ap [1] = 2 ;
+        Ap [2] = 2 ;
+        Ai [0] = 1 ;
+        Ai [1] = 0 ;
+        Ax [0] = 1 ;
+        Ax [1] = 2 ;
+
+    }
+}
diff --git a/MATLAB_Tools/spok/spok.c b/MATLAB_Tools/spok/spok.c
new file mode 100644
index 0000000..cc8cba2
--- /dev/null
+++ b/MATLAB_Tools/spok/spok.c
@@ -0,0 +1,131 @@
+#include "spok.h"
+
+/* check the validity of a MATLAB sparse matrix */
+
+SPOK_INT spok
+(
+    /* inputs, not modified */
+    SPOK_INT m,             /* number of rows */
+    SPOK_INT n,             /* number of columns */
+    SPOK_INT nzmax,         /* max # of entries */
+    SPOK_INT *Ap,           /* size n+1, column pointers */
+    SPOK_INT *Ai,           /* size nz = Ap [n], row indices */
+    double *Ax,             /* double matrices always have Ax */
+    double *Az,             /* imaginary matrices always have Az */
+    char *As,               /* logical matrices always have As */
+
+    /* outputs, not defined on input */
+    SPOK_INT *p_njumbled,   /* # of jumbled row indices (-1 if not computed) */
+    SPOK_INT *p_nzeros      /* number of explicit zeros (-1 if not computed) */
+)
+{
+    double x, z ;
+    SPOK_INT i, j, p, pend, njumbled, nzeros, ilast ;
+    char s ;
+
+    /* ---------------------------------------------------------------------- */
+    /* in case of early return */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_njumbled != NULL)
+    {
+        *p_njumbled = -1 ;
+    }
+    if (p_nzeros != NULL)
+    {
+        *p_nzeros = -1 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* check the dimensions */
+    /* ---------------------------------------------------------------------- */
+
+    if (m < 0)
+    {
+        return (SPOK_FATAL_M) ;
+    }
+    if (n < 0)
+    {
+        return (SPOK_FATAL_N) ;
+    }
+    if (nzmax < 1) 
+    {
+        /* note that nzmax cannot be zero */
+        return (SPOK_FATAL_NZMAX) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* check the column pointers */
+    /* ---------------------------------------------------------------------- */
+
+    if (Ap == NULL || Ap [0] != 0)
+    {
+        /* column pointers invalid */
+        return (SPOK_FATAL_P) ;
+    }
+    for (j = 0 ; j < n ; j++)
+    {
+        p = Ap [j] ;
+        pend = Ap [j+1] ;
+        if (pend < p || pend > nzmax)
+        {
+            /* column pointers not monotonically non-decreasing */
+            return (SPOK_FATAL_P) ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* check the row indices and numerical values */
+    /* ---------------------------------------------------------------------- */
+
+    if (Ai == NULL)
+    {
+        /* row indices not present */
+        return (SPOK_FATAL_I) ;
+    }
+
+    njumbled = 0 ;
+    nzeros = 0 ;
+
+    for (j = 0 ; j < n ; j++)
+    {
+        ilast = -1 ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i < 0 || i >= m)
+            {
+                /* row indices out of range */
+                return (SPOK_FATAL_I) ;
+            }
+            if (i <= ilast)
+            {
+                /* row indices unsorted, or duplicates present */
+                njumbled++ ;
+            }
+            s = (As == NULL) ? 0 : As [p] ;
+            x = (Ax == NULL) ? 0 : Ax [p] ;
+            z = (Az == NULL) ? 0 : Az [p] ;
+            if (s == 0 && x == 0 && z == 0)
+            {
+                /* an explicit zero is present */
+                nzeros++ ;
+            }
+            ilast = i ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return results */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_njumbled != NULL)
+    {
+        *p_njumbled = njumbled ;
+    }
+    if (p_nzeros != NULL)
+    {
+        *p_nzeros = nzeros ;
+    }
+    return ((njumbled > 0 || nzeros > 0) ? SPOK_WARNING : SPOK_OK) ;
+}
diff --git a/MATLAB_Tools/spok/spok.h b/MATLAB_Tools/spok/spok.h
new file mode 100644
index 0000000..0ba5977
--- /dev/null
+++ b/MATLAB_Tools/spok/spok.h
@@ -0,0 +1,37 @@
+#ifdef MATLAB_MEX_FILE
+#include "mex.h"
+#define SPOK_INT mwSignedIndex
+#else
+/* for use outside of MATLAB, use with -DSPOK_INT=long to get long version of
+   code, -DSPOK_INT=int for int version, etc */
+#ifndef SPOK_INT
+#define SPOK_INT ptrdiff_t
+#endif
+#endif
+
+#define SPOK_OK 1
+#define SPOK_WARNING 0
+
+#define SPOK_FATAL_M (-1)
+#define SPOK_FATAL_N (-2)
+#define SPOK_FATAL_NZMAX (-3)
+#define SPOK_FATAL_P (-4)
+#define SPOK_FATAL_I (-5)
+
+SPOK_INT spok
+(
+    /* inputs, not modified */
+    SPOK_INT m,             /* number of rows */
+    SPOK_INT n,             /* number of columns */
+    SPOK_INT nzmax,         /* max # of entries */
+    SPOK_INT *Ap,           /* size n+1, column pointers */
+    SPOK_INT *Ai,           /* size nz = Ap [n], row indices */
+    double *Ax,             /* double matrices always have Ax */
+    double *Az,             /* imaginary matrices always have Az */
+    char *As,               /* logical matrices always have As */
+
+    /* outputs, not defined on input */
+    SPOK_INT *p_njumbled,   /* # of jumbled row indices (-1 if not computed) */
+    SPOK_INT *p_nzeros      /* number of explicit zeros (-1 if not computed) */
+) ;
+
diff --git a/MATLAB_Tools/spok/spok.m b/MATLAB_Tools/spok/spok.m
new file mode 100644
index 0000000..54721c8
--- /dev/null
+++ b/MATLAB_Tools/spok/spok.m
@@ -0,0 +1,35 @@
+function ok = spok (A)                                                      %#ok
+%SPOK checks if a sparse matrix is OK
+%
+% Returns 1 if the sparse matrix A is OK.  Also returns 1 if A is not sparse
+% (but a warning is raised, stating that the non-sparse matrix was not checked.
+%
+% Aborts with an error if the matrix is corrupted beyond repair.  If that
+% happens, you should quit MATLAB since it's possible your workspace has also
+% been corrupted.
+%
+% Returns 0 if the matrix has out-of-order or duplicate row indices, or
+% explicit zero entries, and raises a warning.  If the matrix has out-of-order
+% row indices, they can be repaired in MATLAB with A=A''.  If the matrix A has
+% duplicate row indices, then A=A'' will still have duplicates, and spok(A'')
+% will still issue a warning.  If the matrix has explicit zeros, you can remove
+% them with A=A*1.
+%
+% SPOK cannot check everything.  For example, if your mexFunction has created
+% a sparse matrix but written beyond the end of the array, spok may see a valid
+% matrix.  However, your workspace has still been corrupted beyond repair.
+%
+% Example:
+%
+%   load west0479
+%   ok = spok (west0479)         % returns 1, for a real sparse matrix
+%   ok = spok (west0479 > .5)    % returns 1, for a logical sparse matrix
+%   ok = spok (1i*west0479)      % returns 1, for a complex sparse matrix
+%   ok = spok (speye (5))        % returns 1, for a real sparse matrix
+%   ok = spok (rand (42))        % returns 1, but issues a warning (not sparse)
+%
+% See also sparse.
+
+% Copyright 2008-2011, Timothy A. Davis, http://www.suitesparse.com
+
+error ('spok mexFunction not installed') ;
diff --git a/MATLAB_Tools/spok/spok_install.m b/MATLAB_Tools/spok/spok_install.m
new file mode 100644
index 0000000..08c93ea
--- /dev/null
+++ b/MATLAB_Tools/spok/spok_install.m
@@ -0,0 +1,21 @@
+function spok_install
+%SPOK_INSTALL compiles and installs the SPOK mexFunction
+% Your current working directory must be the "spok" directory for this function
+% to work.
+%
+% Example:
+%   spok_install
+%
+% See also sparse, spok, spok_test
+
+% Copyright 2008-2011, Timothy A. Davis, http://www.suitesparse.com
+
+is64 = ~isempty (strfind (computer, '64')) ;
+if (is64)
+    fprintf ('Compiling spok (64-bit)\n') ;
+    mex -largeArrayDims spok.c spok_mex.c
+else
+    fprintf ('Compiling spok (32-bit)\n') ;
+    mex spok.c spok_mex.c
+end
+addpath (pwd) ;
diff --git a/MATLAB_Tools/spok/spok_mex.c b/MATLAB_Tools/spok/spok_mex.c
new file mode 100644
index 0000000..cc29031
--- /dev/null
+++ b/MATLAB_Tools/spok/spok_mex.c
@@ -0,0 +1,122 @@
+#include "spok.h"
+
+/* -------------------------------------------------------------------------- */
+/* SPOK mexFunction */
+/* -------------------------------------------------------------------------- */
+
+/* Checks the validity of a MATLAB sparse matrix.  Returns 1 if OK (or if the
+   matrix is not sparse), 0 if the row indices are jumbled (C=A' might lead to
+   a valid C matrix) or if the matrix includes explicit zero entries (which can
+   be fixed with C=A*1).  Raises an error if the matrix is corrupted beyond
+   repair.  Reports a warning if the matrix is not sparse (it is not checked),
+   or if the matrix has jumbled row indices or explicit zeros.
+ */
+
+#define ERROR(s)   mexErrMsgIdAndTxt  ("SPOK:InvalidMatrix", s)
+#define USAGE(s)   mexErrMsgIdAndTxt  ("SPOK:InvalidUsage", s)
+#define WARNING(s) mexWarnMsgIdAndTxt ("SPOK:QuestionableMatrix", s)
+#define LEN 200
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    SPOK_INT *Ap, *Ai ;
+    double *Ax, *Az ;
+    char *As ;
+    SPOK_INT i, j, p, njumbled, nzeros, m, n, nzmax ;
+    char msg [LEN+1] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check the usage */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargout > 1)
+    {
+        USAGE ("too many output arguments") ;
+    }
+    if (nargin != 1)
+    {
+        USAGE ("usage: spok(A) where A is sparse") ;
+    }
+
+    if (!mxIsSparse (pargin [0]))
+    {
+        mexWarnMsgIdAndTxt ("SPOK:NotSparse", "non-sparse matrix not checked") ;
+        pargout [0] = mxCreateDoubleScalar (1) ;
+        return ;
+    }
+
+    Ap = (SPOK_INT *) mxGetJc (pargin [0]) ;
+    Ai = (SPOK_INT *) mxGetIr (pargin [0]) ;
+    m = mxGetM (pargin [0]) ;
+    n = mxGetN (pargin [0]) ;
+    nzmax = mxGetNzmax (pargin [0]) ;
+
+    if (mxIsComplex (pargin [0]))
+    {
+        Az = mxGetPi (pargin [0]) ;
+        if (Az == NULL)
+        {
+            ERROR ("complex, but with no imaginary part") ;
+        }
+    }
+    else
+    {
+        Az = NULL ;
+    }
+
+    if (mxIsLogical (pargin [0]))
+    {
+        Ax = NULL ;
+        As = (char *) mxGetData (pargin [0]) ;
+        if (As == NULL)
+        {
+            ERROR ("logical, but with no values present") ;
+        }
+    }
+    else
+    {
+        Ax = (double *) mxGetData (pargin [0]) ;
+        As = NULL ;
+        if (Ax == NULL)
+        {
+            ERROR ("double, but with no values present") ;
+        }
+    }
+
+   switch (spok (m, n, nzmax, Ap, Ai, Ax, Az, As, &njumbled, &nzeros))
+   {
+
+        case SPOK_FATAL_M:
+            ERROR ("negative number of rows") ;
+
+        case SPOK_FATAL_N:
+            ERROR ("negative number of columns") ;
+
+        case SPOK_FATAL_NZMAX:
+            ERROR ("nzmax(A) invalid") ;
+
+        case SPOK_FATAL_P:
+            ERROR ("column pointers invalid") ;
+
+        case SPOK_FATAL_I:
+            ERROR ("row indices out of range") ;
+
+        case SPOK_WARNING:
+            sprintf (msg, "%g jumbled row indices, %g explicit zeros",
+                (double) njumbled, (double) nzeros) ;
+            WARNING (msg) ;
+            pargout [0] = mxCreateDoubleScalar (0) ;
+            return ;
+
+        case SPOK_OK:
+            pargout [0] = mxCreateDoubleScalar (1) ;
+            return ;
+
+    }
+}
diff --git a/MATLAB_Tools/spok/spok_test.m b/MATLAB_Tools/spok/spok_test.m
new file mode 100644
index 0000000..6cec1a4
--- /dev/null
+++ b/MATLAB_Tools/spok/spok_test.m
@@ -0,0 +1,75 @@
+function spok_test
+%SPOK_TEST installs and tests SPOK
+%
+% Example:
+%   spok_install
+%
+% See also sparse, spok, spok_install
+
+% Copyright 2008-2011, Timothy A. Davis, http://www.suitesparse.com
+
+% compile and install spok
+help spok ;
+spok_install ;
+c = pwd ;
+cd private ;
+
+% mex spok_invalid.c ;
+is64 = ~isempty (strfind (computer, '64')) ;
+if (is64)
+    mex -largeArrayDims spok_invalid.c
+else
+    mex spok.c spok_invalid.c
+end
+
+cd (c) ;
+
+% test with valid matrices
+fprintf ('\nTesting spok, please wait ...\n') ;
+lastwarn ('') ;
+test_spok (sparse ([ ]), 1, '') ;
+test_spok (sparse (logical ([ ])), 1, '') ;
+test_spok (sparse (0,4), 1, '') ;
+test_spok (sparse (4,4), 1, '') ;
+
+for trials = 1:2
+    for m = 0:10
+        for n = 0:10
+            for d = 0:.1:1
+                A = sprand (m,n,d) ;
+                B = sprand (m,n,d) ;
+                test_spok (A, 1, '') ;
+                test_spok (A + 1i*B, 1, '') ;
+                test_spok (A > 0, 1, '') ;
+            end
+        end
+    end
+end
+
+% test with non-sparse matrices
+fprintf ('\nTesting on non-sparse matrices; 7 warnings should appear:\n') ;
+test_spok ('hi',          1, 'SPOK:NotSparse') ;
+test_spok (cell (42),     1, 'SPOK:NotSparse') ;
+test_spok ([ ],           1, 'SPOK:NotSparse') ;
+test_spok (ones (10),     1, 'SPOK:NotSparse') ;
+test_spok (ones (10) > 0, 1, 'SPOK:NotSparse') ;
+test_spok (ones (0,10),   1, 'SPOK:NotSparse') ;
+test_spok (ones (10,0),   1, 'SPOK:NotSparse') ;
+
+% test with an invalid matrix
+fprintf ('\nTesting on invalid sparse matrices; 2 warnings should appear:\n') ;
+test_spok (spok_invalid (0), 0, 'SPOK:QuestionableMatrix') ;
+test_spok (spok_invalid (1), 0, 'SPOK:QuestionableMatrix') ;
+
+fprintf ('\nAll tests passed.\n') ;
+
+%-------------------------------------------------------------------------------
+function test_spok (A, ok_expected, id_expected)
+%TEST_SPOK tests spok and checks its result
+lastwarn ('') ;
+ok = spok (A) ;
+[msg id] = lastwarn ;
+if (ok ~= ok_expected || ~strcmp (id, id_expected))
+    lastwarn
+    error ('test failure') ;
+end
diff --git a/MATLAB_Tools/spqr_rank/Contents.m b/MATLAB_Tools/spqr_rank/Contents.m
new file mode 100644
index 0000000..ef5d205
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/Contents.m
@@ -0,0 +1,43 @@
+% SPQR_RANK
+%
+% For sparse, rank deficient matrices the SPQR_RANK package provides
+% utilities that are useful for finding solutions to
+%
+%                min || b - A x ||
+%
+% and to determine the numerical structure of A, including the numerical
+% rank of A as well as bases for the numerical null spaces of A and of A
+% transpose.  The utilities reliably determine the numerical rank in the sense
+% that in almost all cases the numerical rank is accurately determined when a
+% warning flag returned by the utilities indicates that the numerical rank
+% should be correct. Reliable determination of numerical rank is often
+% critical to calculations with rank deficient matrices.
+%
+% See "Algorithm xxx: Reliable Calculation of Numerical Rank, Null Space Bases,
+% Pseudoinverse Solutions and  Basic Solutions using SuiteSparseQR" by Leslie
+% Foster and Timothy Davis, submitted ACM Transactions on Mathematical
+% Software, 2011, for detailed discussion of the package.
+%
+% Files
+%   spqr_basic          - approximate basic solution to min(norm(B-A*x))
+%   spqr_cod            - approximate pseudoinverse solution to min(norm(B-A*x)
+%   spqr_null           - finds an orthonormal basis for numerical null space of a matrix
+%   spqr_pinv           - approx pseudoinverse solution to min(norm(B-A*X))
+%   spqr_ssi            - block power method or subspace iteration applied to inv(R)
+%   spqr_ssp            - block power method or subspace iteration applied to A or A*N
+%   spqr_null_mult      - multiplies a matrix by numerical null space from spqr_rank methods
+%   spqr_explicit_basis - converts a null space basis to an explicit matrix
+%   spqr_rank_opts      - sets and prints the default options for spqr_rank
+%   spqr_rank_stats     - prints the statistics from spqr_rank functions
+%
+%   quickdemo_spqr_rank - quick demo of the spqr_rank package
+%   demo_spqr_rank      - lengthy demo for spqr_rank functions (requires SJget)
+%   test_spqr_rank      - extensive functionality test of spqr_rank functions
+%   test_spqr_coverage  - statement coverage test of spqr_rank functions
+%
+% To install this package, simply install all of SuiteSparse from
+% http://www.suitesparse.com, the spqr_rank package
+% in SuiteSparse/MATLAB_TOOLS/spqr_rank will be installed, along with
+% SuiteSparseQR (spqr) and all its dependent packages.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
diff --git a/MATLAB_Tools/spqr_rank/README.txt b/MATLAB_Tools/spqr_rank/README.txt
new file mode 100644
index 0000000..1b9b07a
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/README.txt
@@ -0,0 +1,55 @@
+QUICK INSTALL:
+
+    (1) Download all of SuiteSparse at http://www.suitesparse.com.
+
+    (2) Extract SuiteSparse from the SuiteSparse.tar.gz archive file.
+
+    (3) In MATLAB, type the following commands while in the SuiteSparse
+        directory (you will need a C/C++ compiler installed):
+
+            SuiteSparse_install
+            savepath
+
+    (4) If 'savepath' fails it means you do not have permission to modify
+        the system file that defines your MATLAB path.  In this case, see
+        'doc startup' to create a startup.m file with addpath commands to
+        include all the paths for SuiteSparse.  Type 'path' to see a list
+        of paths.  spqr_rank is located in SuiteSparse/MATLAB_TOOLS/spqr_rank.
+
+    (5) Type this command for a quick demo:
+        
+            quickdemo_spqr_rank
+
+You're done!  For more details:
+
+See Contents.m for a summary of the purpose of the SPQR_RANK package, 
+a description of the files in the spqr_rank folder and installation
+instructions.
+
+After installing the package you may wish to run the demonstration
+   demo_spqr_rank
+which should take less than a minute to run.
+Additional tests for the package are done by
+   test_spqr_coverage
+which takes a few minutes to run and
+   test_spqr_rank
+which takes half an hour or less to run.
+
+The folders in the package contain:
+
+spqr_rank:  the core user callable routines
+private:    utilities called by the core routines.  These routines are not
+            designed to be directly called by the user.
+SJget:      a subset, adequate to run the demonstration and testing routines
+            (demo_spqr_rank, test_spqr_rank and test_spqr_coverage) with
+            default settings, of matrices from the San Jose State 
+            University Singular Matrix Database.  Also SJget has utilities
+            to download additional matrices from the database.
+            
+Copyright 2011-2012, Leslie Foster and Timothy A Davis.
+
+ChangeLog:
+
+Jan 19, 2012: version 1.1.0, backport to MATLAB R2008a (RandStream and '~' arg).
+Dec  7, 2011: version 1.0.1 added to SuiteSparse; added quickdemo_spqr_rank.
+May 19, 2011: version 1.0.0 released.
diff --git a/MATLAB_Tools/spqr_rank/SJget/Contents.m b/MATLAB_Tools/spqr_rank/SJget/Contents.m
new file mode 100644
index 0000000..af942af
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/Contents.m
@@ -0,0 +1,31 @@
+% SJget: MATLAB interface for the SJSU Singular Matrix Collection.
+%
+% Files of most interest:
+%    SJget.m		    primary user interface,
+%                       SJget will get summary information
+%                       for all matrices or detailed
+%                       information for a single matrix
+%    SJget_install.m	installation for SJget
+%
+% additional files
+%    Contents.m		    this file, help for SJget
+%    README.txt		    additional help
+%    SJget_example.m	demo for SJget
+%    SJplot.m           picture a plot of the full or partial
+%                       singular value spectrum
+%    SJweb.m		    opens the URL for a matrix or collection
+%    SJrank.m           calculates numerical rank for a specified
+%                       tolerance using precomputed singular values
+%
+% some additional utilities:
+%    SJget_defaults.m	default parameter settings for SJget
+%    SJget_lookup.m	get the group, name, and id of a matrix
+%    SJgrep.m           search for matrices in the SJSU Singular 
+%                       Matrix Collection.
+%
+% Example:
+%   help SJget
+
+% Derived from the UFget toolbox on 18 March 2008.
+% Copyright 2007, Timothy A. Davis
+
diff --git a/MATLAB_Tools/spqr_rank/SJget/README.txt b/MATLAB_Tools/spqr_rank/SJget/README.txt
new file mode 100644
index 0000000..4df0d45
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/README.txt
@@ -0,0 +1,84 @@
+SJget:  a MATLAB interface to the SJSU singular matrix collection.
+MATLAB 7.0 or later is required.
+
+Date: March 20, 2008.
+
+Availability: http://www.math.sjsu.edu/singular/matrices/software/SJget
+
+Derived from the UFget toolbox on March 18, 2008:
+  Copyright 2005-2007, Tim Davis, University of Florida.
+  Authors: Tim Davis and Erich Mirable.
+  Availability: http://www.suitesparse.com
+
+See http://www.math.sjsu.edu/singular/matrices/software/SJget.tar.gz
+for a single archive file with all the files listed below.
+
+Files of most interest:
+    SJget/SJget.m		    primary user interface,
+                            SJget will get summary information
+                            for all matrices or detailed
+                            information for a single matrix
+    SJget/SJget_install.m	installation for SJget
+
+additional files of interest
+    SJget/Contents.m		help for SJget
+    SJget/README.txt		this file
+    SJget/SJget_example.m	demo for SJget
+    SJget/SJplot.m          picture a plot of the full or partial
+                            singular value spectrum
+    SJget/SJweb.m		    opens the URL for a matrix or collection
+    SJget/SJrank.m          calculates numerical rank for a specified
+                            tolerance using precomputed singular values
+
+some additional utilities:
+    SJget/SJget_defaults.m	default parameter settings for SJget
+    SJget/SJget_lookup.m	get the group, name, and id of a matrix
+    SJget/SJgrep.m          search for matrices in the SJSU Singular 
+                            Matrix Collection.
+
+
+To install the package, after unzipping the files type
+           SJget_install
+Remember to save your path so that it includes SJget directory.
+Type "pathtool" or "help savepath" in MATLAB for more details.
+
+For an example of use, type this command in MATLAB:
+
+    SJget_example
+
+The MATLAB statement
+
+    Problem = SJget ('HB/ash292')
+
+(for example), will download a singular matrix called HB/ash292 (a least
+squares problem) and load it into MATLAB.  You don't need to use your
+web browser to load the matrix.  The statement
+
+    Problem = SJget (52)
+
+will also load same the HB/ash292 matrix.  Each matrix in the collection has
+a unique identifier, in the range 1 to the number of matrices.  As new
+matrices are added, the id's of existing matrices will not change.
+
+To view an index of the entire collection, just type
+
+    SJget
+
+in MATLAB.  To modify your download directory, edit the SJget_defaults.m file.
+
+To open a URL of the entire collection, just type
+
+    SJweb
+
+To open the URL of a group of matrices in the collection:
+
+    SJweb ('HB')
+
+To open the web page for one matrix, use either of these formats:
+
+    SJweb ('HB/ash292')
+    SJweb (52)
+
+For more information on how some of the index entries were created, see
+http://www.math.sjsu.edu/singular/matrices/SJsingular.html
+and http://www.suitesparse.com.
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJget.m b/MATLAB_Tools/spqr_rank/SJget/SJget.m
new file mode 100644
index 0000000..0505d53
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJget.m
@@ -0,0 +1,205 @@
+function Problem = SJget (matrix, SJ_Index, refresh_mat)
+%SJGET loads a matrix from the SJSU Singular Matrix Collection.
+%
+%   Problem = SJget(matrix) loads a matrix from the SJSU Singular matrix collection,
+%   specified as either a number (1 to the # of matrices in the collection) or
+%   as a string (the name of the matrix).  With no input parameters, index=SJget
+%   returns an index of matrices in the collection.  A local copy of the matrix
+%   is saved (be aware that as of August 2008 the entire collection is over 1GB
+%   in size).  If no input or output arguments are provided, the index is
+%   printed.  With a 2nd parameter (Problem = SJget (matrix, index)), the index
+%   file is not loaded.  This is faster if you are loading lots of matrices.
+%   Also SJget('refresh') will force downloading the index file from the 
+%   SJsingular web site. SJget(matrix,'refresh') or 
+%   SJget(matrix,index,'refresh') will force downloading Problem
+%   matrix from the SJsingular web site, rather than using a 
+%   locally stored copy.
+%
+%   Examples:
+%     index = SJget ;                     % loads index of the collection
+%     index = SJget ('refresh') ;         % forces download of new index
+%                                         % from the SJsingular web site
+%     Problem = SJget (6)                 % get the 6th problem
+%     Problem = SJget ('HB/ash292')       % get a problem by name
+%     Problem = SJget (6,'refresh')       % forces download of 6th problem
+%                                         % from the SJSingular web site
+%     Problem = SJget (6, index)          % alternatives to get problems
+%     Problem = SJget ('HB/ash292', index)
+%     Problem = SJget (6,index,'refresh') % forces download of 6th problem
+%                                         % from the SJsingular web site
+%
+%   or one can search using SJget:
+%
+%   index = SJget ;     % get index of the SJSU Singular Matrix Collection
+%   ids = find (1000 <= index.numrank & index.numrank <= 1200) ;
+%   [ignore, i] = sort (index.numrank (ids)) ;    %sort by numrank
+%   ids = ids (i) ;
+%   for id = ids
+%      Prob = SJget (id);        % Prob is a struct (matrix, name, meta-data, ...)
+%	   A = Prob.A ;              % A has numerical rank between 1000 and 1200
+%	   disp([index.numrank(id), size(A)]) % list the numerical rank and
+%                                % size of A
+%   end
+
+%   See also SJgrep, SJweb, SJget_example, SJget_defaults, urlwrite.
+
+%   Derived from the UFget toolbox on March 18, 2008, modified 2/1/2009
+%   Copyright 2007, Tim Davis, University of Florida.
+
+%-------------------------------------------------------------------------------
+% get the parameter settings
+%-------------------------------------------------------------------------------
+
+params = SJget_defaults ;
+indexfile = sprintf ('%sSJ_Index.mat', params.dir) ;
+indexurl = sprintf ('%s/SJ_Index.mat', params.url) ;
+
+%-------------------------------------------------------------------------------
+% get the index file (download a new one if necessary)
+%-------------------------------------------------------------------------------
+
+refresh_matrix = 0;
+if nargin >= 2
+    % SJget (..,'refresh') forces downloading matrix .. from the web    
+    if (ischar (SJ_Index))
+        if (strcmp(SJ_Index, 'refresh'))
+            refresh_matrix = 1;
+        end
+    end
+end
+if nargin == 3
+    % SJget (..,..,'refresh') forces downloading matrix .. from the web
+    if (ischar (refresh_mat))
+        if (strcmp (refresh_mat, 'refresh'))
+            refresh_matrix = 1 ;
+        end
+    end
+end
+
+refresh = 0 ;
+if nargin == 0
+    % if the user passed in a zero or no argument at all, return the index file
+    matrix = 0 ;
+else
+    % SJget ('refresh') downloads the latest index file from the web
+    if (ischar (matrix))
+        if (strcmp (matrix, 'refresh'))
+            matrix = 0 ;
+            refresh = 1 ;
+        end
+    end
+end
+
+if (~refresh)
+    try
+        % load the existing index file
+        if (nargin < 2 )
+        load (indexfile) ;
+        end
+        if (nargin == 2 && refresh_matrix == 1)
+            load (indexfile) ;
+        end
+        % see if the index file is old; if so, download a fresh copy
+        refresh = (SJ_Index.DownloadTimeStamp + params.refresh < now) ;
+    catch
+        % oops, no index file.  download it.
+        refresh = 1 ;
+    end
+end
+
+if (refresh)
+    % a new SJ_Index.mat file to get access to new matrices (if any)
+    fprintf ('downloading %s\n', indexurl) ;
+    fprintf ('to %s\n', indexfile) ;
+    urlwrite (indexurl, indexfile) ;
+    load (indexfile) ;
+    SJ_Index.DownloadTimeStamp = now ;
+    save (indexfile, 'SJ_Index') ;
+end
+
+%-------------------------------------------------------------------------------
+% return the index file if requested
+%-------------------------------------------------------------------------------
+
+% if the user passed in a zero or no argument at all, return the index file
+if nargin == 0
+    matrix = 0 ;
+end
+
+if (matrix == 0)
+    if (nargout == 0)
+        % no output arguments have been passed, so print the index file
+        fprintf ('\nSJSU Singular matrix collection index:  %s\n', ...
+            SJ_Index.LastRevisionDate) ;
+        fprintf ('\nLegend:\n') ;
+        fprintf ('num. rank:    numerical rank \n') ;
+        fprintf ('struc. rank:  structural rank \n') ;        
+        fprintf ('type:      real\n') ;
+        fprintf ('           complex\n') ;
+        fprintf ('           binary:  all entries are 0 or 1\n') ;
+        nmat = length (SJ_Index.nrows) ;
+        for j = 1:nmat
+            if (mod (j, 25) == 1)
+                fprintf ('\n') ;
+                fprintf ('ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type\n') ;
+            end
+            s = sprintf ('%s/%s', SJ_Index.Group {j}, SJ_Index.Name {j}) ;
+            fprintf ('%4d %-30s %7d-by-%7d %10d ', ...
+            j, s, SJ_Index.nrows (j), SJ_Index.ncols (j), SJ_Index.numrank (j)) ;
+            %psym = SJ_Index.pattern_symmetry (j) ;
+            %nsym = SJ_Index.numerical_symmetry (j) ;
+            fprintf('%13d ', SJ_Index.sprank (j) );
+            %if (psym < 0)
+            %    fprintf ('  -  ') ;
+            %else
+            %    fprintf (' %4.2f', psym) ;
+            %end
+            %if (nsym < 0)
+            %    fprintf ('  -  ') ;
+            %else
+            %    fprintf (' %4.2f', nsym) ;
+            %end
+            if (SJ_Index.isBinary (j))
+                fprintf (' binary\n') ;
+            elseif (~SJ_Index.isReal (j))
+                fprintf (' complex\n') ;
+            else
+                fprintf (' real\n') ;
+            end
+        end
+    else
+        Problem = SJ_Index ;
+    end
+    return ;
+end
+
+%-------------------------------------------------------------------------------
+% determine if the matrix parameter is a matrix index or name
+%-------------------------------------------------------------------------------
+
+[group matrix id] = SJget_lookup (matrix, SJ_Index) ;
+
+if (id == 0)
+    error ('invalid matrix') ;
+end
+
+%-------------------------------------------------------------------------------
+% download the matrix (if needed) and load it into MATLAB
+
+matdir = sprintf ('%s%s%s%s.mat', params.dir, group) ;
+matfile = sprintf ('%s%s%s.mat', matdir, filesep, matrix) ;
+maturl = sprintf ('%s/%s/%s.mat', params.url, group, matrix) ;
+
+if (~exist (matdir, 'dir'))
+    mkdir (matdir) ;
+end
+
+if (exist (matfile, 'file') && refresh_matrix == 0)
+    load (matfile)
+else
+    fprintf ('downloading %s\n', maturl) ;
+    fprintf ('to %s\n', matfile) ;
+    urlwrite (maturl, matfile) ;
+    load (matfile)
+    save (matfile, 'Problem') ;
+end
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJget_defaults.m b/MATLAB_Tools/spqr_rank/SJget/SJget_defaults.m
new file mode 100644
index 0000000..97c5dc5
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJget_defaults.m
@@ -0,0 +1,44 @@
+function params = SJget_defaults
+%SJGET_DEFAULTS returns default parameter settings for SJget.
+%   Usage:  params = SJget_defaults ; Returns the default parameter settings for
+%   SJget.  This file may be editted to change these settings:
+%
+%   params.url: SJSU Singular matrix web site
+%   params.dir: your local directory for downloaded singular matrices.
+%   params.refresh:  how many days should elapse before re-downloading the
+%       index file (for obtaining access to new matrices in the collection).
+%
+%   Example:
+%       params = SJget_defaults ;
+%
+%   See also SJget.
+
+%   Derived from the UFget toolbox on March 18, 2008.
+%   Copyright 2007, Tim Davis, University of Florida.
+
+
+%-------------------------------------------------------------------------------
+% define base information about the SJSU Singular matrix collection
+params.site_name = 'SJSU Singular Matrix Database';
+params.site_url = 'http://www.math.sjsu.edu/singular/matrices';
+params.maintainer = 'Leslie Foster';
+params.maintainer_url = 'http://www.math.sjsu.edu/~foster/';
+
+%-------------------------------------------------------------------------------
+% location of the SJSU Singular matrix collection
+params.url = [ params.site_url '/mat' ] ;
+
+%-------------------------------------------------------------------------------
+% decode the current directory for this M-file
+s = which (mfilename) ;
+i = find (s == filesep) ;
+s = s (1:i(end)) ;
+
+%-------------------------------------------------------------------------------
+% define the directory to download into.  Should end in file separator.
+params.dir = [ s 'mat' filesep ] ;
+
+%-------------------------------------------------------------------------------
+% define how often to check for a new index file (in # of days)
+% inf will force the program to ignore the need to refresh
+params.refresh = 90 ;
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJget_example.m b/MATLAB_Tools/spqr_rank/SJget/SJget_example.m
new file mode 100644
index 0000000..84140f4
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJget_example.m
@@ -0,0 +1,46 @@
+%SJGET_EXAMPLE a demo for SJget.
+%   This example script gets the index file of the SJSU Singular matrix collection,
+%   and then loads in all symmetric non-binary matrices, in increasing order of
+%   number of rows in the matrix.
+%
+%   Example:
+%       type SJget_example ; % to see an example of how to use SJget
+%
+%   See also SJget, SJweb, SJgrep.
+
+%   Derived from the UFget toolbox on March 18, 2008.
+%   Copyright 2007, Tim Davis, University of Florida.
+
+%   modified by L. Foster 09/17/2008
+
+type SJget_example ;
+
+index = SJget ;
+% find all symmetric matrices that are not binary,
+% have at least 4000 column and have a gap in the singular
+% values at the numerical rank of at least 1000
+f = find (index.numerical_symmetry == 1 & ~index.isBinary & ...
+    index.ncols >= 4000 & index.gap >= 1000 );
+% sort by the dimension of the numerical null space
+[y, j] = sort (index.ncols (f) - index.numrank (f) ) ;
+f = f (j) ;
+
+for i = f
+    fprintf ('Loading %s%s%s, please wait ...\n', ...
+	index.Group {i}, filesep, index.Name {i}) ;
+    Problem = SJget (i,index) ;
+    %display the problem structure
+    disp (Problem) ;
+    % display a plot of the singular values
+    SJplot(Problem) ;
+    shg
+    disp(' ')
+    disp(['dim. of numerical null space = ', ...
+        num2str(index.ncols (i) - index.numrank (i))]);
+    disp(' ')
+    pause(1)
+    %display the web page with matrix details
+    SJweb (i) ;
+    pause(1)
+end
+
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJget_install.m b/MATLAB_Tools/spqr_rank/SJget/SJget_install.m
new file mode 100644
index 0000000..aa02474
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJget_install.m
@@ -0,0 +1,47 @@
+function SJget_install
+% SJget_install - Install SJget toolbox.
+%
+% Copyright 2008, Leslie Foster
+% Created Nikolay Botev March 2008
+% 5/2/2008:  modified by L. Foster
+
+    % Compute path to SJget toolbox
+    pkgdir = which(mfilename);
+    i = find(pkgdir == filesep);
+    pkgdir = pkgdir(1:i(end)-1);
+
+    version_str = version;
+    idot = find(version_str == '.');
+    version_num = str2num( version_str(1:idot(1)+1) );
+    if version_num >= 7.2 
+       % Check if already installed
+       % textscan(path,...) fails in early versions of Matlab 7
+       %   so skip the check for these versions
+       pth = textscan(path, '%s', 'delimiter', pathsep);
+       pth = pth{1};
+       if ~isempty(find(strcmpi(pth, pkgdir), 1))
+           disp('SJget toolbox is already installed.');
+           return;
+       end
+    end
+
+    % Add SJget package to MATLAB path
+    addpath(pkgdir);    
+ 
+    % Download SJ_Index.mat
+    matdir = [pkgdir filesep 'mat'];
+    if ~exist(matdir, 'dir')
+        mkdir(matdir);
+    end
+    SJget;
+
+    % Done
+    disp(' ')
+    disp(' ');
+    disp('Your path has been modified by:');
+    disp(['addpath ',pkgdir]);    
+
+    disp(' ');
+    disp('SJget toolbox successfully installed.');
+    disp('Remember to save your path using savepath or pathtool!');
+end
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJget_lookup.m b/MATLAB_Tools/spqr_rank/SJget/SJget_lookup.m
new file mode 100644
index 0000000..f51c226
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJget_lookup.m
@@ -0,0 +1,85 @@
+function [group, name, id] = SJget_lookup (matrix, SJ_Index)
+%SJGET_LOOKUP gets the group, name, and id of a matrix.
+%
+%   Example:
+%       SJ_Index = SJget;
+%       matrix = 'Pajek/USpowerGrid';
+%       [group name id] = SJget_lookup (matrix, SJ_Index)
+%       %    or
+%       matrix = 50;
+%       [group name id] = SJget_lookup (matrix, SJ_Index)
+%
+%   See also SJget.
+
+%   Derived from the UFget toolbox on March 18, 2008.
+%   Copyright 2007, Tim Davis, University of Florida.
+
+if (isnumeric (matrix))
+
+    % make sure that the matrix parameter is only one integer value
+    % this means that if we get an array, just use the first value
+    id = fix (full (matrix (1))) ;
+
+    % if the index is less than one or bigger than the length of the array,
+    % then no particular matrix is accessed
+    if (id > length (SJ_Index.nrows) | id < 1)				    %#ok
+	id = 0 ;
+	group = '' ;
+	name = '' ;
+    else
+	% assign the group and name for the given id
+	group = SJ_Index.Group {matrix} ;
+	name = SJ_Index.Name {matrix} ;
+    end
+
+elseif (ischar (matrix))
+
+    % the group and matrix name are in the string as in GroupName\MatrixName
+
+    % find the group index for the file separator
+    % check both types of slashes, and a colon
+    gi = find (matrix == '/') ;
+    if (length (gi) == 0)						    %#ok
+        gi = find (matrix == '\') ;
+    end
+    if (length (gi) == 0)						    %#ok
+        gi = find (matrix == ':') ;
+    end
+
+    % if no name divider is in the string, a whole group is specified
+    if (length (gi) == 0)						    %#ok
+
+	id = 0 ;
+	group = matrix ;
+	name = '' ;
+
+    else
+
+	% group equals the first part of the string up to the character before
+	% the last file separator
+	group = matrix (1:gi(end)-1) ;
+
+	% group equals the last section of the string after the last file
+	% separator
+	name = matrix (gi(end)+1:end) ;
+
+	% validate the given name and group by checking the index for a match
+	%refName = strmatch (name, SJ_Index.Name) ;
+	refName = find(strncmp(name, SJ_Index.Name, length(name))) ;
+	%refGroup = strmatch (group, SJ_Index.Group) ;
+	refGroup = find(strncmp(group, SJ_Index.Group, length(group))) ;
+	id = intersect (refName, refGroup) ;
+	if (length (id) >= 1)
+	    id = id (1) ;
+	else
+	    % the given group/matrix does not exist in the index file
+	    id = 0 ;
+	end
+    end
+
+else
+
+    % there is an error in the argument types passed into the function
+    error ('invalid input') ;
+
+end
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJgrep.m b/MATLAB_Tools/spqr_rank/SJget/SJgrep.m
new file mode 100644
index 0000000..81b1c43
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJgrep.m
@@ -0,0 +1,54 @@
+function list = SJgrep (expression, index)
+%SJGREP search for matrices in the SJSU Singular Matrix Collection.
+% SJgrep returns a list of Problem id's whose Problem.name string matches an
+% expression.  With no output arguments, the list is displayed.  Otherwise, it
+% is returned as a list of integer id's.
+%
+% Example:
+%   SJgrep ('HB') ;         % all matrices in the HB group
+%   SJgrep ('\<B*') ;       % all matrices in groups starting with the letter B
+%   SJgrep ('bp') ;         % all bp matrices (in the HB group)
+%   SJgrep ('[0-9]') ;      % all matrices with a digit in their name
+%   SJgrep ('c-') ;         % all c-* optimization matrices (in 2 groups)
+%
+% An optional 2nd input argument is the SJ index, which is a little faster if
+% SJgrep is used multiple times.  With no input arguments, all Problems are
+% listed.
+%
+%   index = SJget ;
+%   SJgrep ('HB/*', index) ;
+%
+% See also regexp, SJget.
+
+%   Derived from the UFget toolbox on March 18, 2008.
+%   Copyright 2007, Timothy A. Davis
+
+if (nargin < 2)
+    index = SJget ;
+end
+
+if (nargin < 1)
+    expression = '.' ;
+end
+
+nmat = length (index.nrows) ;
+list1 = zeros (1, nmat) ;
+matched = 0 ;
+
+for id = 1:nmat
+    name = [index.Group{id} '/' index.Name{id}] ;
+    if (~isempty (regexp (name, expression, 'once')))
+	matched = matched + 1 ;
+	list1 (matched) = id ;
+    end
+end
+
+list1 = list1 (1,1:matched) ;
+
+if (nargout == 0)
+    for id = list1
+	fprintf ('%4d: %s/%s\n', id, index.Group {id}, index.Name {id}) ;
+    end
+else
+    list = list1 ;
+end
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJplot.m b/MATLAB_Tools/spqr_rank/SJget/SJplot.m
new file mode 100644
index 0000000..ade7267
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJplot.m
@@ -0,0 +1,430 @@
+function SJplot(matrix,tol,option)
+%   SJplot(matrix,tol,option) creates a plot of the calculated singular 
+%   value spectrum or partial singular value spectrum for a matrix from 
+%   the SJsingular database.
+%
+%   Input:
+%       matrix -- either:
+%          a problem structure downloaded from the SJsingular database
+%          a number: 1 to the # of matrices in the collection
+%          a string: the name of a matrix in the collection
+%          In the last two cases SJget must be installed first from
+%          http://www.math.sjsu.edu/singular/matrices/SJget.html
+%       tol (optional) -- draw a horizontal line at tol
+%          (the default value is  max(size(A))*eps(norm of A))
+%       option (optional) -- if option = 1 create high resolution image,
+%           if option = 2 create a low resolution image, suitable for
+%           thumbnail picture.  The default is option = 1.
+%   Note: if blue error bars appear in the plot then a singular 
+%        value of A is guaranteed to be in the interval pictured by the 
+%        blue bars around each of the calculated singular values.
+%   Examples:
+%         %if matrix information has already been downloaded
+%         SJplot(Problem), shg
+%         % or    (assuming that SJget is installed)
+%         SJplot('Meszaros/model6'), shg
+%         % or
+%         tol = 1.e-5;
+%         SJplot(403, tol), shg
+%
+%   See also SJrank.
+
+% Written by Nikolay Botev and Leslie Foster, 9/5/2008, Version 1.0
+% Copyright 2008, Leslie Foster
+
+
+   % check that the input is ok
+   if isstruct(matrix) 
+       if isfield(matrix,'svals')
+          svals = matrix.svals;
+          if isfield(matrix,'svals_err')
+             svals_err = matrix.svals_err;
+          end
+       else
+           error(['Invalid matrix. The structure ', ...
+               inputname(1),' is missing a svals field.'])
+       end
+   else
+       if isempty(which('SJget'))
+           error(['SJget is not installed. It is available at ',...
+               'http://www.math.sjsu.edu/singular/matrices/SJget.html .'])
+       end
+       matrix = SJget(matrix);
+       svals = matrix.svals;
+       if isfield(matrix,'svals_err')
+          svals_err = matrix.svals_err;
+       end
+   end 
+   [m,n] = size(matrix.A);  
+   default_tol = 0;
+   if nargin < 2 || isempty(tol)
+      tol = max(m,n)*eps(svals(1));
+      default_tol = 1;
+   end
+   if nargin >= 2 && tol < 0
+      error('tolerance is negative')
+   end
+   if nargin <= 2 || isempty(option)
+       option = 1;
+   end
+   if option ~= 1 && option ~= 2
+       error('option is not 1 or 2')
+   end
+   
+   fullname = matrix.name;
+   if ~isempty(find(svals < 0, 1))
+       full_svd = 0;
+   else
+       full_svd = 1;
+   end
+
+   %------------------------------------------------------------
+    % Nikolay and LF: generate svd plots (thumbnail or full size)
+    %------------------------------------------------------------
+
+    clf;        % LF -- to reset graph settings to default
+    if full_svd % full svd plots
+    
+        % Create plots for full singular value spectrum
+        % Using:  
+        %   svals: a (column) vector with partial information about 
+        %          singular values where any entry with a -1 indicates a
+        %          sing. value that has not been calculated
+        %   svals_err: a (column) vector with partial information about the  
+        %         accuracy of the calculated singular values where any
+        %         entry with a -1 indicates a sing. value that has not been
+        %         calculated. Currently svals_err is not used but code to 
+        %         use svals_err is included but not accessed
+        %  result: plots of singular value spectrum
+
+        warning('off','MATLAB:Axes:NegativeDataInLogAxis')
+        if option == 2
+            % create svd image as thumbnail
+            semilogy(svals,'--rs','LineWidth',10,'MarkerEdgeColor','g', ...
+                'MarkerFaceColor','g','MarkerSize',15);
+            line([0 length(svals)], [1 1]*tol, 'Color', [0 0 .5]); 
+                                     % marker for tolerance
+            set(gca,'XTick',[],'YTick',[]);
+            xlim([0 length(svals)]);
+        else
+            % prepare full-res svd image
+            %semilogy(svals,'--rs','LineWidth',3,'MarkerEdgeColor','g', ...
+            %    'MarkerFaceColor','b','MarkerSize',5);
+            semilogy(1:length(svals),svals,'--rs','LineWidth',3, ...
+                'MarkerEdgeColor','g', ...
+                'MarkerFaceColor','g','MarkerSize',5)
+            xlim([0 length(svals)]);        
+            colorm = [0 .5 0];        
+            line(xlim, [1 1]*tol, 'Color', colorm,'Linewidth',1); 
+                               % marker for rank with MATLAB tolerance
+
+            if ( 1 == 1)
+               % to make the resolution sharper create dots at each svd
+               % location
+               hold on
+               semilogy(1:length(svals),svals,'.','MarkerSize',1);
+               hold off
+            end
+
+            % fix missing marker in Okunbor/aft01 plot
+            axisv1 = axis;
+            axisv1(4) = max( max(svals), axisv1(4) );
+            axis(axisv1);
+
+            set(gca, 'FontSize', 17);
+ 
+            % Note in some cases (eg Pajek/SmaGri)the xlabel results
+            %   are written to the pdf file or the matlab plot (unless the 
+            %   plot is full screen).  This may occur when the y scale goes
+            %   to the underflow limit.  Is this a Matlab bug?
+            nsvals_zero = sum( svals == 0 ) ;
+            if ( nsvals_zero == 1 )
+               xlabel(['                       singular value number ',...
+                      '\newline', ...
+                     ' Note: one calculated singular value is 0 and ',...
+                     'is not shown'],'FontSize', 14);         
+            elseif (nsvals_zero > 1 )
+               xlabel(['                          singular value ',...
+                       'number \newline ',...
+                       ' Note: ', int2str(nsvals_zero), ...
+                       ' calculated singular values are 0 ', ...
+                       'and are not shown'],'FontSize', 14);         
+            else
+                    xlabel('singular value number', 'FontSize', 14);
+            end   
+
+            % finish full-res svd image
+            grid on
+            line(xlim, [1 1]*tol, 'Color', colorm,'Linewidth',1); 
+                               % marker for rank with MATLAB tolerance
+            if default_tol
+               text(1, tol, ' max(size(A)) * eps(max(svals))', 'Color',...
+                    colorm,'FontSize', 14, 'VerticalAlignment', 'bottom');
+            else
+               text(1, tol,['tol = ',num2str(tol,'%0.5g')], 'Color',...
+                    colorm,'FontSize', 14, 'VerticalAlignment', 'bottom');
+            end
+            title(['Singular Value Spectrum for ' fullname],...
+                  'FontSize',14, 'FontWeight', 'b', 'Interpreter', 'none');
+            axisv = axis;
+
+            if ( exist('svals_err','var') && 1 == 0)
+               % skip this -  the error bounds make the graph very 
+               %    cluttered near smaller singular values and the errors
+               %    are small relative to the default tol
+               % include errbounds in plot 
+               isvp=find(svals >= 0 );
+               isvp = isvp(:)';
+               bound_lw = 1;   % width of line in error bounds
+               for it = isvp
+                   if ( svals_err(it) > 0 )
+                     lowbound = max( axisv(3),svals(it)-svals_err(it));
+                     upbound = min(axisv(4),svals(it)+svals_err(it));
+                     line([it,it],[lowbound,upbound],'Color','b',...
+                         'Linewidth',bound_lw);
+                     boundlength = .15;
+                     if ( lowbound ~= axisv(3) )
+                        line([it - boundlength,it + boundlength],...
+                             [lowbound,lowbound],...
+                             'Color','b','Linewidth',bound_lw);
+                     end 
+                     if (upbound ~= axisv(4) )
+                        line([it - boundlength, it+boundlength],...
+                            [upbound, upbound],...
+                            'Color','b','Linewidth',bound_lw);
+                     end
+                   end
+               end
+            end   
+            ylabel('calculated singular value', 'FontSize', 14);
+        end
+        warning('on','MATLAB:Axes:NegativeDataInLogAxis')
+      
+    else % partial svd plots
+        
+        % Create: plot of partial singular value spectrum (lvf + nb)
+        % Using:  
+        %   svals: a (column) vector with partial information about 
+        %          singular values where any entry with a -1 indicates
+        %          a sing. value that has not been calculated
+        %   svals_err: a (column) vector with partial information about the  
+        %         accuracy of the calculated singular values where any
+        %         entry with a -1 indicates a sing. value that has not been
+        %         calculated
+        %   k_m1: the number of -1's to place in each string of 
+        %         uncalculated sing. values (set to 3 below)
+        % Produce: 
+        %   svalp: a vector with each string of -1's in svals replaced by
+        %         a string of k_m1 -1's
+        %   svalp_err: a vector with each string of -1's in svals_err
+        %         replaced by a string of k_m1 -1's
+        %   isvalp: a vector whose length is the number of strings of 
+        %         consecutive calculated singular values in svalp 
+        %         (and svals).  isvalp(i) contains the starting index in
+        %         svalp of the ith string of calculated singular values in
+        %         svalp
+        %   nsvalp: a vector whose length is the number of strings of 
+        %         consecutive calculated singular values in svalp 
+        %         (and svals). nsvalp(i) contains the number of calculated
+        %         singular values in the ith string of consecutive 
+        %         calculated singular values
+        %   isvals: a vector whose length is the number of strings of
+        %         consecutive calculated singular values in svals 
+        %         (and svalp).  isvals(i) contains the starting index in
+        %         svals of the ith string of consecutive calculated
+        %         singular values.  Therefore the calculated singular
+        %         values in svals (i.e. those not set equal to -1) have
+        %         indices isvals(i): isvals(i) + nsvals(i) - 1 
+        %         for i = 1: length(isvals)
+        %   AND plot of partial singular value spectrum
+
+       % have A, svals and svals_err from earlier code
+        %[m,n]=size(A);
+        isv = find( svals >= 0 );
+        disv = diff(isv);
+        il1 = find( disv > 1) ;
+        k_m1=3;
+
+        %create svalp and svalp_err
+        clear isvals isvalp nsvalp
+        svalp = [];
+        svalp_err = [];
+        for i = 1:length(il1)
+           if ( i == 1 )
+              isvalsv = isv(1):isv(il1(i));
+              isvals(i) = isvalsv(1);
+              if ( isv(1) == 1 )
+                 svalp = svals(isvalsv);
+                 svalp_err = svals_err(isvalsv);
+                 isvalp(1)=1;
+                 nsvalp(1) = isv(il1(i));
+              else
+                 svalp = [ - ones(k_m1,1) ;svals(isvalsv) ];
+                 svalp_err = [ - ones(k_m1,1) ;svals_err(isvalsv) ];
+                 isvalp(1) = k_m1+1;
+                 nsvalp(1) = length(isvalsv);
+              end
+           else
+              isvalp(i) = length(svalp)+1;
+              isvalsv = isv(il1(i-1) + 1): isv(il1(i));
+              isvals(i) = isvalsv(1);
+              nsvalp(i) = length( svals( isv(il1(i-1) + 1): isv(il1(i))) );
+              svalp = [ svalp; svals( isv(il1(i-1) + 1): isv(il1(i)))];
+              svalp_err = [ svalp_err; svals_err( isv(il1(i-1) + 1): ...
+                            isv(il1(i)))];
+           end
+           svalp = [svalp; - ones(k_m1,1) ];
+           svalp_err = [svalp_err; - ones(k_m1,1) ];
+        end
+        % create isvalp, nsvalp, isvals and finish svalp
+        if ( length( il1 ) == 0 )
+           ib =1;
+        else
+           ib = isv( il1( length( il1 )) + 1 );
+        end
+        isvalp(length(il1)+1) = length(svalp) + 1;
+        nsvalp(length(il1)+1) = length(ib:isv(end));
+        isvalsv = ib :isv(end) ;
+        isvals(length(il1)+1) = isvalsv(1);
+        svalp = [ svalp ; svals( ib :isv(end)) ];
+        svalp_err = [ svalp_err ; svals_err( ib :isv(end)) ];
+        if(svals(end) < 0 )
+           svalp = [svalp; - ones(k_m1,1)];
+           svalp_err = [svalp_err; - ones(k_m1,1)];
+        end
+
+        if ( 1 == 0 )
+           % display results (for debugging)
+           disp('svals'''), disp(svals'),  disp('isv''')
+           disp(isv'), disp('il1'''),  disp(il1')
+           disp('svalp'''),  disp(svalp'), disp('svalp_err''')
+           disp(svalp_err'), disp('isvalp'), disp(isvalp)
+           disp('nsvalp'), disp(nsvalp), disp('isvals')
+           disp(isvals)
+        end
+
+        %draw plots
+        %warning('off','MATLAB:Axes:NegativeDataInLogAxis')
+        if ( option == 2)
+            % create svd image as thumbnail
+            warning('off','MATLAB:Axes:NegativeDataInLogAxis')
+            
+            semilogy(svalp,'--rs','LineWidth',10,'MarkerEdgeColor','g', ...
+                'MarkerFaceColor','g','MarkerSize',20);
+            xlim([0 length(svalp)]);
+            line([0 length(svalp)], [1 1]*tol, 'Color', [0 0 .5]); 
+                                          % marker for tolerance
+            set(gca,'XTick',[],'YTick',[]);
+            
+            axisv1 = axis;   % in Matlab 7.6 these 2 commands suppress
+            axis(axisv1);    % the printing of an (undesired) warning
+                             % reason is unclear  -- hmmm
+
+            warning('on','MATLAB:Axes:NegativeDataInLogAxis');
+                    
+         else
+            % prepare full-res svd image
+            warning('off','MATLAB:Axes:NegativeDataInLogAxis')
+            
+            semilogy(svalp,'--rs','LineWidth',5,'MarkerEdgeColor','g', ...
+                'MarkerFaceColor','g','MarkerSize',8);
+
+            
+            xlim([0 length(svalp)]);
+            % finish full-res svd image
+            colorm = [0 .5 0];
+            line(xlim, [1 1]*tol, 'Color', colorm,'Linewidth',1); 
+                               % marker for rank with MATLAB tolerance
+               
+            % fixes missing marker in Okunbor/aft01 plot
+            axisv1 = axis;
+            axisv1(4) = max( max(svalp), axisv1(4) );
+            axis(axisv1);
+
+            set(gca, 'FontSize', 17);
+            %define locations to place tick marks
+            xtick_v=[];
+            for ixl = 1: length(isvalp)
+               xtick_v = [ xtick_v, isvalp(ixl): ...
+                           (isvalp(ixl)+nsvalp(ixl)-1) ];
+            end
+            if ( xtick_v(end) ~= length(svalp) )
+               xtick_v =[ xtick_v length(svalp)];
+            end   
+            set(gca, 'XTick', xtick_v);
+
+            %create labels for x axis
+            xticklabelv = [];
+            ixt = 0;
+            for ixl = 1:length(isvals)
+               for ixl2 = 1:nsvalp(ixl)
+                 ixt = ixt+1;
+                 if ( (ixl == 1 && nsvalp(ixl) < 10) | ixl2 == 1 | ...
+                       ixl2 == nsvalp(ixl) )
+                    xticklabelv{ixt}=int2str(isvals(ixl)+ixl2-1);
+                 else 
+                    xticklabelv{ixt} ='';
+                 end
+               end
+            end
+            ixt = ixt+1;
+            xticklabelv{ixt} = int2str(min(m,n));
+            set(gca, 'XTickLabel', xticklabelv);
+
+            % finish full-res svd image
+            grid on
+            if default_tol
+               text(1, tol, ' max(size(A)) * eps(max(svals))', 'Color',...
+                    colorm,'FontSize', 14, 'VerticalAlignment', 'bottom');
+            else
+               text(1, tol,['tol = ',num2str(tol,'%0.5g')], 'Color',...
+                   colorm,'FontSize', 14, 'VerticalAlignment', 'bottom');
+            end
+            title(['Partial Singular Value Spectrum for ' fullname],...
+                 'FontSize',14, 'FontWeight', 'b', 'Interpreter', 'none') ;
+            axisv = axis;
+
+            % include errbounds in plot
+            isvp=find(svalp >= 0 );
+            isvp = isvp(:)';
+            bound_lw = 1;   % width of line in error bounds
+            for it = isvp
+                if ( svalp_err(it) > 0 )
+                  lowbound = max( axisv(3),svalp(it)-svalp_err(it));
+                  upbound = min(axisv(4),svalp(it)+svalp_err(it));
+                  line([it,it],[lowbound,upbound],'Color','b',...
+                       'Linewidth',bound_lw);
+                  boundlength = .15;
+                  if ( lowbound ~= axisv(3) )
+                     line([it - boundlength,it + boundlength],...
+                          [lowbound,lowbound],...
+                          'Color','b','Linewidth',bound_lw);
+                  end 
+                  if (upbound ~= axisv(4) )
+                     line([it - boundlength, it+boundlength],...
+                         [upbound, upbound],...
+                         'Color','b','Linewidth',bound_lw);
+                  end
+                end
+            end
+
+            nsvals_zero = sum( svals == 0 ) ;
+            if ( nsvals_zero == 1 )
+               xlabel(['                       singular value ',...
+                      'number \newline', ...
+                      ' Note: one calculated singular value is 0 ',...
+                      'and is not shown'],'FontSize', 14);         
+            elseif (nsvals_zero > 1 )
+               xlabel(['                          singular value ',...
+                       'number \newline ',...
+                       ' Note: ', int2str(nsvals_zero), ...
+                       ' calculated singular values are 0 ', ...
+                       'and are not shown'],'FontSize', 14);         
+            else
+                    xlabel('singular value number', 'FontSize', 14);
+            end
+            ylabel('calculated singular value', 'FontSize', 14);
+            warning('on','MATLAB:Axes:NegativeDataInLogAxis')
+        end
+    end
+end 
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJrank.m b/MATLAB_Tools/spqr_rank/SJget/SJrank.m
new file mode 100644
index 0000000..093f141
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJrank.m
@@ -0,0 +1,113 @@
+function [numrank,flag]= SJrank(matrix,tol)
+%   SJrank(matrix,tol) calculates numerical rank of a matrix using the 
+%   precomputed singular values in the SJsingular database.
+%
+%   Input:
+%       matrix -- either:
+%          a problem structure downloaded from the SJsingular database
+%          a number: 1 to the # of matrices in the collection
+%          a string: the name of a matrix in the collection
+%          In the last two cases SJget must be installed first from
+%          http://www.math.sjsu.edu/singular/matrices/SJget.html
+%       tol (optional) -- calculate the number of singular values greater 
+%          than tol (the default value is  max(size(A))*eps(norm of A))
+%   Output:
+%       numrank -- the number of singular values greater than tol for
+%          the matrix A defined in the problem structure. numrank will
+%          be -1 if the SJsingular database does not have sufficient
+%          information (i.e. precomputed singular values) to determine the
+%          numerical rank at the current tolerance.
+%       flag  -- 
+%          flag = 0 is consistent with a correctly calculated numerical
+%             rank -- tol does not lie in the interval of uncertainty of 
+%             any calculated singular value
+%          flag = 1 if the calculated numerical rank may be incorrect
+%             since tol lies in the interval of uncertainty of at least
+%             one calculated singular value
+%          flag = -1 when no calculations have been done to check the
+%             accuracy of the numerical rank.  This will occur when
+%             there are no precomputed bounds of the accuracy of the
+%             calculated singular values or when numrank = -1.
+%          flag is NaN if any component of svals or svals_err is not finite
+%   Examples:
+%         %if matrix information has already been downloaded
+%         nrank = SJrank(Problem)
+%         % or    (assuming that SJget is installed)
+%         [nrank, flag] = SJrank('Meszaros/model6')
+%         % or
+%         tol = 1.e-5;
+%         nrank = SJrank(403, tol)
+%   See also SJplot.
+
+% Written by Leslie Foster 9/5/2008, Version 1.0
+% Copyright 2008, Leslie Foster
+
+
+   % check that the input is ok
+   if isstruct(matrix) 
+       if isfield(matrix,'svals')
+          svals = matrix.svals;
+          if isfield(matrix,'svals_err')
+             svals_err = matrix.svals_err;
+          end
+       else
+           error(['Invalid matrix. The structure ', ...
+               inputname(1),' is missing a svals field.'])
+       end
+   else
+       if isempty(which('SJget'))
+           error(['SJget is not installed. It is available at ',...
+               'http://www.math.sjsu.edu/singular/matrices/SJget.html .'])
+       end
+       matrix = SJget(matrix);
+       svals = matrix.svals;
+       if isfield(matrix,'svals_err')
+          svals_err = matrix.svals_err;
+       end
+   end 
+   [m,n] = size(matrix.A);   
+   if nargin < 2 || isempty(tol)
+      tol = max(m,n)*eps(svals(1));
+   end
+   if nargin >= 2 && tol < 0
+      error('tolerance is negative')
+   end
+   
+
+    % calculate the numerical rank
+    numrank = find(svals > tol);
+    loc_svals = find( svals >= 0 );
+    if ( isempty(numrank) )
+        if isempty(loc_svals)
+            numrank = -1;
+        else 
+            numrank = 0;
+        end
+    else
+        numrank = numrank(end);
+        if numrank < min(m,n) && svals(numrank+1) < 0
+            numrank = -1;
+        end
+    end
+
+    if nargout >= 1
+        %determine if error bounds on sing. values are small enough to
+        %   be consistent with a correctly calculated numerical rank
+        if numrank >= 0 && exist('svals_err','var')
+          if ( min(isfinite(svals)) == 1 && min(isfinite(svals_err)) == 1 )
+            loc_svals_err = find(svals_err >= 0 );
+            svp= svals(loc_svals_err);
+            svp_err = svals_err(loc_svals_err);
+            % check, without subtraction, if tol is in any 
+            % interval [svp-svp_err, svp+svp_err]            
+            flag = max(  ( tol <= (svp_err +  svp) )  & ... 
+                       ( (svp <= tol + svp_err) ) ) ;
+          else
+            flag = NaN;
+          end
+        else
+            flag = -1;
+        end
+    end
+    
+end
diff --git a/MATLAB_Tools/spqr_rank/SJget/SJweb.m b/MATLAB_Tools/spqr_rank/SJget/SJweb.m
new file mode 100644
index 0000000..3ddaced
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/SJget/SJweb.m
@@ -0,0 +1,136 @@
+function stats = SJweb (matrix, opts)
+%SJWEB opens the URL for a matrix.
+%
+%   SJweb(matrix) opens the URL for a matrix.  This parameter can be a string,
+%   or an integer.  If it is a string with no "/" character, the web page for a
+%   matrix group is displayed.  With no arguments, a list of all the matrix
+%   groups is displayed.
+%
+%   Example:
+%
+%   If Problem = SJget ('HB/ash292'), the first four examples display
+%   the same thing, the web page for the HB/ash292 matrix:
+%
+%       SJweb (6)
+%       SJweb ('HB/ash292')
+%       stats = SJweb (6)
+%
+%   The latter also returns statistics about the matrix or matrix group.
+%   To display the web page for the HB (Harwell-Boeing) group:
+%
+%       SJweb ('HB')
+%
+%   To display the home page for the SJSU Singular matrix collection:
+%
+%       SJweb
+%       SJweb (0)
+%       SJweb ('')
+%
+%   The latter two are useful if a second optional parameter is specified.
+%   The second optional argument is a string passed as additional parameters to
+%   the MATLAB web command.  To use the system web browser instead of the MATLAB
+%   browser, for example, use SJweb ('HB/ash292', '-browser').
+%
+%   See also web, SJget, SJget_defaults.
+
+%   Derived from the UFget toolbox on March 18, 2008.
+%   Copyright 2007, Tim Davis, University of Florida.
+
+params = SJget_defaults ;
+SJ_Index = SJget ;
+
+if (nargin < 1)
+    matrix = '' ;
+end
+if (nargin < 2)
+    opts = '' ;
+end
+
+% get the matrix group, name, and id
+[group name id] = SJget_lookup (matrix, SJ_Index) ;
+
+url = params.url ;
+len = length (url) ;
+if (strcmp (url ((len-3):len), '/mat'))
+    % remove the trailing '/mat'
+    url = url (1:(len-4)) ;
+end
+
+% open the web page for the matrix, group, or whole collection
+if (id == 0)
+    if (isempty (group))
+	eval (['web ' url '/index.html ' opts])
+    else
+	eval (['web ' url '/html/' group '/index.html ' opts])
+    end
+else
+    eval (['web ' url '/html/' group '/' name '.html ' opts])
+end
+
+% return stats
+if (nargout > 0)
+
+    if (id == 0)
+
+	if (isempty (group))
+
+	    % return stats about the whole collection
+	    stats.nmatrices = length (SJ_Index.nrows) ;
+	    stats.LastRevisionDate = SJ_Index.LastRevisionDate ;
+	    stats.DownloadTime = datestr (SJ_Index.DownloadTimeStamp) ;
+
+	else
+
+	    % return stats about one matrix group
+	    nmat = length (SJ_Index.nrows) ;
+	    ngroup = 0 ;
+	    for i = 1:nmat
+		if (strcmp (group, SJ_Index.Group {i}))
+		    ngroup = ngroup + 1 ;
+		end
+	    end
+	    stats.nmatrices = ngroup ;
+	    stats.LastRevisionDate = SJ_Index.LastRevisionDate ;
+	    stats.DownloadTime = datestr (SJ_Index.DownloadTimeStamp) ;
+
+	end
+    else
+
+	% look up the matrix statistics
+	stats.Group = group ;
+	stats.Name = name ;
+	stats.nrows = SJ_Index.nrows (id) ;
+	stats.ncols = SJ_Index.ncols (id) ;
+	stats.nnz = SJ_Index.nnz (id) ;
+	stats.nzero = SJ_Index.nzero (id) ;
+	stats.pattern_symmetry = SJ_Index.pattern_symmetry (id) ;
+	stats.numerical_symmetry = SJ_Index.numerical_symmetry (id) ;
+	stats.isBinary = SJ_Index.isBinary (id) ;
+	stats.isReal = SJ_Index.isReal (id) ;
+
+	stats.nnzdiag = SJ_Index.nnzdiag (id) ;
+	stats.posdef = SJ_Index.posdef (id) ;
+
+	stats.amd_lnz = SJ_Index.amd_lnz (id) ;
+	stats.amd_flops = SJ_Index.amd_flops (id) ;
+	stats.amd_vnz = SJ_Index.amd_vnz (id) ;
+	stats.amd_rnz = SJ_Index.amd_rnz (id) ;
+	stats.metis_lnz = SJ_Index.metis_lnz (id) ;
+	stats.metis_flops = SJ_Index.metis_flops (id) ;
+	stats.metis_vnz = SJ_Index.metis_vnz (id) ;
+	stats.metis_rnz = SJ_Index.metis_rnz (id) ;
+	stats.nblocks = SJ_Index.nblocks (id) ;
+	stats.sprank = SJ_Index.sprank (id) ;
+	stats.nzoff = SJ_Index.nzoff (id) ;
+	stats.dmperm_lnz = SJ_Index.dmperm_lnz (id) ;
+	stats.dmperm_unz = SJ_Index.dmperm_unz (id) ;
+	stats.dmperm_flops = SJ_Index.dmperm_flops (id) ;
+	stats.dmperm_vnz = SJ_Index.dmperm_vnz (id) ;
+	stats.dmperm_rnz = SJ_Index.dmperm_rnz (id) ;
+
+	stats.RBtype = SJ_Index.RBtype (id,:) ;
+	stats.cholcand = SJ_Index.cholcand (id) ;
+	stats.ncc = SJ_Index.ncc (id) ;
+
+    end
+end
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/GHS_indef/laser.mat b/MATLAB_Tools/spqr_rank/SJget/mat/GHS_indef/laser.mat
new file mode 100644
index 0000000..3c9c5da
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/GHS_indef/laser.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcspwr02.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcspwr02.mat
new file mode 100644
index 0000000..fac9dea
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcspwr02.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm01.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm01.mat
new file mode 100644
index 0000000..6ff4ab1
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm01.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm03.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm03.mat
new file mode 100644
index 0000000..b26ddb9
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm03.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm04.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm04.mat
new file mode 100644
index 0000000..280983c
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/bcsstm04.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_144.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_144.mat
new file mode 100644
index 0000000..39fafb6
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_144.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_187.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_187.mat
new file mode 100644
index 0000000..c99207f
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_187.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_61.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_61.mat
new file mode 100644
index 0000000..6cba23d
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/can_61.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/curtis54.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/curtis54.mat
new file mode 100644
index 0000000..2bf9477
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/curtis54.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_162.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_162.mat
new file mode 100644
index 0000000..6504811
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_162.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_193.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_193.mat
new file mode 100644
index 0000000..40fb977
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_193.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_198.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_198.mat
new file mode 100644
index 0000000..09d6ef7
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_198.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_209.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_209.mat
new file mode 100644
index 0000000..e2fe6a4
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_209.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_72.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_72.mat
new file mode 100644
index 0000000..c86dc7a
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/dwt_72.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/fs_183_3.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/fs_183_3.mat
new file mode 100644
index 0000000..01efe98
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/fs_183_3.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/gent113.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/gent113.mat
new file mode 100644
index 0000000..d1f2903
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/gent113.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl009.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl009.mat
new file mode 100644
index 0000000..06fb97a
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl009.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl011.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl011.mat
new file mode 100644
index 0000000..d45c51c
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/jgl011.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/lap_25.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/lap_25.mat
new file mode 100644
index 0000000..cfed886
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/lap_25.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/lns_131.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/lns_131.mat
new file mode 100644
index 0000000..25b79fb
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/lns_131.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/lnsp_131.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/lnsp_131.mat
new file mode 100644
index 0000000..d494a95
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/lnsp_131.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/mcca.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/mcca.mat
new file mode 100644
index 0000000..eeb721e
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/mcca.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/rgg010.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/rgg010.mat
new file mode 100644
index 0000000..3057e8b
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/rgg010.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/west0156.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/west0156.mat
new file mode 100644
index 0000000..ef5d431
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/west0156.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/will199.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/will199.mat
new file mode 100644
index 0000000..e72aa71
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/will199.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/HB/will57.mat b/MATLAB_Tools/spqr_rank/SJget/mat/HB/will57.mat
new file mode 100644
index 0000000..26b4fde
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/HB/will57.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch3-3-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch3-3-b1.mat
new file mode 100644
index 0000000..33c5294
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch3-3-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch4-4-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch4-4-b1.mat
new file mode 100644
index 0000000..34259e8
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch4-4-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch4-4-b2.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch4-4-b2.mat
new file mode 100644
index 0000000..7fff444
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch4-4-b2.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch5-5-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch5-5-b1.mat
new file mode 100644
index 0000000..4dd8b1f
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/ch5-5-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/cis-n4c6-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/cis-n4c6-b1.mat
new file mode 100644
index 0000000..b5b098d
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/cis-n4c6-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/klein-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/klein-b1.mat
new file mode 100644
index 0000000..ba8b9ca
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/klein-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n2c6-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n2c6-b1.mat
new file mode 100644
index 0000000..9cd62f1
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n2c6-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b1.mat
new file mode 100644
index 0000000..4d20880
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b2.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b2.mat
new file mode 100644
index 0000000..5c715ef
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b2.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b3.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b3.mat
new file mode 100644
index 0000000..a3afd4b
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b3.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b4.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b4.mat
new file mode 100644
index 0000000..cadfebc
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c4-b4.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b1.mat
new file mode 100644
index 0000000..ca15271
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b2.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b2.mat
new file mode 100644
index 0000000..1d2d5f4
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b2.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b3.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b3.mat
new file mode 100644
index 0000000..3bb6f5c
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c5-b3.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c6-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c6-b1.mat
new file mode 100644
index 0000000..3dcd24c
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n3c6-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n4c5-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n4c5-b1.mat
new file mode 100644
index 0000000..dee4c3a
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n4c5-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n4c6-b1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n4c6-b1.mat
new file mode 100644
index 0000000..0759a9a
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Homology/n4c6-b1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/cat_ears_2_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/cat_ears_2_1.mat
new file mode 100644
index 0000000..17dee57
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/cat_ears_2_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/cat_ears_3_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/cat_ears_3_1.mat
new file mode 100644
index 0000000..611142d
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/cat_ears_3_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/flower_4_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/flower_4_1.mat
new file mode 100644
index 0000000..d6b67b2
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/flower_4_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_3_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_3_1.mat
new file mode 100644
index 0000000..059b752
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_3_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_4_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_4_1.mat
new file mode 100644
index 0000000..89a5b32
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_4_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_5_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_5_1.mat
new file mode 100644
index 0000000..228dffe
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_5_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_6_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_6_1.mat
new file mode 100644
index 0000000..dcf4589
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_6_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_7_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_7_1.mat
new file mode 100644
index 0000000..3b9ceac
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Margulies/wheel_7_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/rel3.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/rel3.mat
new file mode 100644
index 0000000..3be7dd3
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/rel3.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/rel4.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/rel4.mat
new file mode 100644
index 0000000..acf1071
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/rel4.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/relat3.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/relat3.mat
new file mode 100644
index 0000000..ffa76a4
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/relat3.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/relat4.mat b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/relat4.mat
new file mode 100644
index 0000000..0fe1437
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/JGD_Relat/relat4.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/NYPA/Maragal_1.mat b/MATLAB_Tools/spqr_rank/SJget/mat/NYPA/Maragal_1.mat
new file mode 100644
index 0000000..8d026c6
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/NYPA/Maragal_1.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Erdos971.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Erdos971.mat
new file mode 100644
index 0000000..04e3051
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Erdos971.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_b.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_b.mat
new file mode 100644
index 0000000..e02ff2f
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_b.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_c.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_c.mat
new file mode 100644
index 0000000..090e1ee
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD01_c.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_a.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_a.mat
new file mode 100644
index 0000000..31b93f6
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_a.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_b.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_b.mat
new file mode 100644
index 0000000..0d70485
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD02_b.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD06_theory.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD06_theory.mat
new file mode 100644
index 0000000..dd10175
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD06_theory.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_a.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_a.mat
new file mode 100644
index 0000000..f1666c6
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_a.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_b.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_b.mat
new file mode 100644
index 0000000..f21b644
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD95_b.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_b.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_b.mat
new file mode 100644
index 0000000..50f2009
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_b.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_c.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_c.mat
new file mode 100644
index 0000000..0d9a4b9
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_c.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_d.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_d.mat
new file mode 100644
index 0000000..d9d1468
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD96_d.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_a.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_a.mat
new file mode 100644
index 0000000..4d765ad
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_a.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_b.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_b.mat
new file mode 100644
index 0000000..0e35058
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD97_b.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_a.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_a.mat
new file mode 100644
index 0000000..e081e1f
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_a.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_b.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_b.mat
new file mode 100644
index 0000000..f289f3a
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_b.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_c.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_c.mat
new file mode 100644
index 0000000..46b272e
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD98_c.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_b.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_b.mat
new file mode 100644
index 0000000..a568cf5
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_b.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_c.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_c.mat
new file mode 100644
index 0000000..00d7b18
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GD99_c.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GlossGT.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GlossGT.mat
new file mode 100644
index 0000000..b9be8ba
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/GlossGT.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Ragusa16.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Ragusa16.mat
new file mode 100644
index 0000000..978dbbf
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Ragusa16.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Ragusa18.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Ragusa18.mat
new file mode 100644
index 0000000..fec45fb
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Ragusa18.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Sandi_authors.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Sandi_authors.mat
new file mode 100644
index 0000000..99d4eec
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Sandi_authors.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_AskCal.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_AskCal.mat
new file mode 100644
index 0000000..3c70a7d
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_AskCal.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_DisCal.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_DisCal.mat
new file mode 100644
index 0000000..9861320
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_DisCal.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_DisCog.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_DisCog.mat
new file mode 100644
index 0000000..ba28554
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/Tina_DisCog.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/football.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/football.mat
new file mode 100644
index 0000000..0e375c3
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pajek/football.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Pothen/sphere2.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Pothen/sphere2.mat
new file mode 100644
index 0000000..386d4d5
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Pothen/sphere2.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/baart_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/baart_100.mat
new file mode 100644
index 0000000..e38b5ac
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/baart_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/baart_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/baart_200.mat
new file mode 100644
index 0000000..f067450
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/baart_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/foxgood_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/foxgood_100.mat
new file mode 100644
index 0000000..ed02836
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/foxgood_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/foxgood_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/foxgood_200.mat
new file mode 100644
index 0000000..2499c5d
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/foxgood_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_100.mat
new file mode 100644
index 0000000..f211fc8
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_1000.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_1000.mat
new file mode 100644
index 0000000..694b51c
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_1000.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_200.mat
new file mode 100644
index 0000000..fb4199f
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/gravity_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/heat_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/heat_100.mat
new file mode 100644
index 0000000..17ca0d8
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/heat_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/heat_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/heat_200.mat
new file mode 100644
index 0000000..d52a496
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/heat_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/i_laplace_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/i_laplace_100.mat
new file mode 100644
index 0000000..f890454
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/i_laplace_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/i_laplace_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/i_laplace_200.mat
new file mode 100644
index 0000000..466b033
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/i_laplace_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/parallax_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/parallax_100.mat
new file mode 100644
index 0000000..18d56c8
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/parallax_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/parallax_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/parallax_200.mat
new file mode 100644
index 0000000..b776e61
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/parallax_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/shaw_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/shaw_100.mat
new file mode 100644
index 0000000..947b66b
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/shaw_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/shaw_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/shaw_200.mat
new file mode 100644
index 0000000..bd4272a
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/shaw_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/tomo_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/tomo_100.mat
new file mode 100644
index 0000000..c818718
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/tomo_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/ursell_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/ursell_100.mat
new file mode 100644
index 0000000..dc7514c
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/ursell_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/ursell_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/ursell_200.mat
new file mode 100644
index 0000000..349f484
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/ursell_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_100.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_100.mat
new file mode 100644
index 0000000..f38a616
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_100.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_200.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_200.mat
new file mode 100644
index 0000000..4dd5acd
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_200.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_500.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_500.mat
new file mode 100644
index 0000000..9723698
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Regtools/wing_500.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/SJ_Index.mat b/MATLAB_Tools/spqr_rank/SJget/mat/SJ_Index.mat
new file mode 100644
index 0000000..6e83d14
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/SJ_Index.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_24.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_24.mat
new file mode 100644
index 0000000..d187837
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_24.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_33.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_33.mat
new file mode 100644
index 0000000..82b2aef
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_33.mat differ
diff --git a/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_34.mat b/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_34.mat
new file mode 100644
index 0000000..6ca9070
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/SJget/mat/Sandia/oscil_dcop_34.mat differ
diff --git a/MATLAB_Tools/spqr_rank/demo_spqr_rank.m b/MATLAB_Tools/spqr_rank/demo_spqr_rank.m
new file mode 100644
index 0000000..be0a721
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/demo_spqr_rank.m
@@ -0,0 +1,1280 @@
+function [nfailures SJid_failures] = demo_spqr_rank (ids,args)
+%DEMO_SPQR_RANK lengthy demo for spqr_rank functions (requires SJget)
+% Usage: demo_spqr_rank(ids,args)
+%
+% This is a demonstration program for the routines spqr_basic, spqr_null,
+% spqr_pinv, spqr_cod discussed in the paper "Algorithm xxx: Reliable
+% Calculation of Numerical Rank, Null Space Bases, Pseudoinverse Solutions and
+% Basic Solutions using SuiteSparseQR" by Leslie Foster and Timothy Davis,
+% submitted ACM Transactions on Mathematical Software, 2011.  Plots similar to
+% those in Figures 2 - 5 in the paper are reproduced.
+%
+% If the first argument ids is a negative scalar, than the smallest (-ids)
+% matrices from the SJ Collection are used for the tests.  Otherwise, ids is
+% a list of matrix IDs to use for the tests.
+%
+% If demo_spqr_rank has a second input parameter the second parameter
+% controls options in the demonstration program.  For example if the second
+% parameter is one then the routine produces plots similar to only those in
+% Figure 2 of the paper and if the second parameter is zero then no plots
+% are produced. These last two cases run more quickly than the default case.
+% The second parameter can also be a structure (for details see the comments
+% in the body of the code prior to the first executable statement).
+%
+% Examples:
+%    demo_spqr_rank    % test code for 100 matrices, create 4 figures
+% or
+%    demo_spqr_rank(-200); % test code for 200 matrices, create 4 figures
+% or
+%    demo_spqr_rank(-300,1); % test code for 300 matrices, create one figure
+%
+% See also spqr_basic, spqr_null, spqr_pinv, spqr_cod, SJget.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% Potential run times:
+%        demo_spqr_rank can require 20 seconds
+%        demo_spqr_rank(-300,1) can require a couple of minutes
+%        demo_spqr_rank(-300,2) can require 15 minutes
+%        demo_spqr_rank(-640,1) can require 5 hours
+
+% The function creates a file save_samples_demo_spqr_rank containing many
+% of the local variable used in demo_spqr_rank.  demo_spqr_rank(0) uses
+% the file to redraw plots of the last run of demo_spqr_rank.   Also
+%
+%   load save_samples_demo_spqr_rank
+%
+% can be used to load and examine these local variables in the main MATLAB
+% workspace.
+
+% The second parameter can be a structure with any of the following fields 
+% demo_opts.figures (default 2)
+%    0 -- produce no plots
+%    1 -- produce plots similar to those in figure 2
+%    2 -- produce plots similar to those in figures 2 through 5
+% demo_opts.null_spaces (default is 1)
+%    0 -- return no null space bases (when allowed)
+%    1 -- return one null space basis (of A or of A')
+%    2 -- return null spaces bases of A and A' (when allowed)
+% demo_opts.doprint (default is 0)
+%   -1 -- do not print out anything
+%    0 -- only print out a summary of the success of the programs
+%    1 -- in demo_spqr_rank print out a summary of the
+%         purpose of the demo_spqr_rank, a discussion of the plots
+%         produced and information about the success of the programs
+% demo_opts.start_with_A_transpose (default is 0)
+%    0 -- in spqr_cod start with a QR  factorization of A
+%    1 -- in spqr_cod start with a QR factorization of A transpose
+% demo_opts.implicit_null_space_basis (default is 1)
+%    1 -- return the null space basis in implicit form as Householder
+%         transformations
+%    0 -- return the null space basis as columns of an explicit matrix
+% demo_opts.repeatable (default is 1)
+%    1 -- reproduce exactly the same random numbers
+%         for each run so that results are repeatable
+%    0 -- the random number stream will be different on repeated runs
+% demo_opts.nsvals (default is 1)                       
+%    the number of small and large singular values to estimate
+% demo_opts.get_details (default is 0, but can be modified by demo_opts.figures)
+%    0 -- return basic statistics in spqr_basic, spqr_null, etc.
+%    1 -- return detailed statistics in spqr_basic, spqr_null, etc.
+%    2 -- return basic statistics and a few additional statistics needed
+%         for communication between routines
+% demo_opts.tol_norm_type (default is 0)
+%    0 -- let tol = max( size(A) ) * eps( norm(A) ) where norm(A) is determined
+%         using the precomputed singular values in the SJSingular Data Base
+%         or (for figures = 2) by MATLAB's dense matrix SVD
+%    1 -- compute the default tolerance tol = max( size(A) ) * eps( norm (A,1) )
+%    2 -- compute the default tolerance tol = max( size(A) ) *
+%                                             eps( normest (A,0.01) )
+
+if (nargin < 1)
+    ids = -100;
+end
+
+demo_opts = struct('figures', 2, ...
+                   'null_spaces', 1, ...
+                   'doprint', 1, ...
+                   'start_with_A_transpose', 0, ...
+                   'implicit_null_space_basis', 1, ...
+                   'repeatable', 1 , ...
+                   'nsvals', 1 , ...
+                   'get_details', 0, ...
+                   'tol_norm_type', 0) ;
+
+if (nargin == 2)
+    %override default values using second argument
+   if isreal(args)
+       demo_opts.figures = args ;
+   else
+       % assumes that args is a structure
+        names_args = fieldnames(args) ;
+        for i = 1 : length(names_args)
+            demo_opts.(names_args{i}) = args.(names_args{i}) ;
+        end
+   end
+end
+
+% values of get_details and null_spaces restricted by demo_opts.figures:
+if demo_opts.figures == 1
+    demo_opts.get_details = max(1, demo_opts.get_details) ;
+elseif demo_opts.figures == 2
+    demo_opts.get_details = 1 ;
+    demo_opts.null_spaces = max(1,demo_opts.null_spaces) ;
+end
+
+% SPQR_BASIC, SPQR_NULL, SPQR_PINV and SPQR_COD return null space bases stored
+% in an implicit form by default.  To have the routines return null space bases
+% as explicit matrices, use args(4) = 0.  To have the routines return a null
+% space bases in the form that requires less memory, use args(4) = 2.
+
+opts.get_details = demo_opts.get_details ;
+opts.repeatable = demo_opts.repeatable ;
+opts.implicit_null_space_basis = demo_opts.implicit_null_space_basis ;
+
+if (demo_opts.doprint > 0)
+    disp(' ')
+    disp(['This program demonstrates use of the routines SPQR_BASIC, '...
+          'SPQR_NULL, SPQR_PINV,'])
+    disp(['and SPQR_COD discussed in the paper "Algorithm xxx: ',...
+          'Reliable Calculation of'])
+    disp(['Numerical Rank, Null Space Bases, Pseudoinverse Solutions and ',...)
+          ' Basic Solutions'])
+    disp(['using SuiteSparseQR" by Leslie Foster and Timothy Davis, ',...
+         'submitted ACM'])
+    disp(['Transactions on Mathematical Software, 2011.  Plots similar ',...
+           'to those in Figures'])
+    disp(['2 - 5 or, optionally, just Figure 2 in the paper are ',...
+          'reproduced, except the'])
+    disp(['sample set is restricted to small matrices so that the demo ',...
+          'runs quickly. The'])
+    disp(['matrices come from the San Jose State University Singular ',...
+          'Matrix Database.'])
+    disp(' ')
+    disp('The routines are designed to work with rank deficient matrices.')
+    disp('The primary use of each routine is:')
+    disp('    SPQR_BASIC -- determine a basic solution to min ||b - A x||')
+    disp(['    SPQR_NULL  -- determine an orthonormal basis for the ',...
+          'numerical nullspace'])
+    disp('                  of A')
+    disp(['    SPQR_PINV  -- determine a pseudoinverse or mininimum ',...
+          'norm solutio to'])
+    disp('                  min || b - A x||')
+    disp(['    SPQR_COD   -- determine a pseudoinverse or mininimum norm ',...
+          'solution to'])
+    disp(['                  min || b - A x|| using a complete orthogonal ',...
+          'decomposition.'])
+    disp('The demonstration program creates plots that illustrate the accuracy')
+    disp('of rank determination, the accuracy of the null space bases, the')
+    disp(['accuracy of the basic solutions and the accuracy of the ',...
+          'pseudoinverse'])
+    disp('solutions.  The above routines are compared with the calculations')
+    disp('using MATLAB''s SVD, MATLAB''s dense matrix QR factorization and')
+    disp(['with SPQR_SOLVE, part of SuiteSparseQR. In the demonstration ',...
+          'program'])
+    disp('the tolerance defining the numerical rank is min(m,n)*eps(||A||)')
+    disp('where the matrix A is m by n.')
+    %disp(' ')
+    % if (demo_opts.dopause)
+    %     disp('Press enter to begin demonstration')
+    %     pause
+    % end
+    disp(' ')
+end
+
+mfilename ('fullpath') ;
+install_SJget ;
+
+% intitialze
+index = SJget;
+
+if (isscalar (ids) && ids < 0)
+    % test with matrices 1 to (-ids)
+    dim = max (index.nrows, index.ncols) ;
+    % R2009b introduced '~' to denote unused output arguments, but we avoid that
+    % feature so that this code can run on R2008a (and perhaps earlier).
+    [ignore,indexs] = sort (dim) ;                                          %#ok
+    clear ignore
+    indexs = indexs (1:(-ids)) ;
+
+elseif (isscalar (ids) && (ids == 0))
+
+    % the file save_samples_demo_spqr_rank is created
+    %    when demo_spqr_rank is run
+    if exist('save_samples_demo_spqr_rank.mat','file')
+        load save_samples_demo_spqr_rank
+    else
+        error (['prior to running demo_spqr_rank(0) run ' ...
+                'demo_spqr_rank(ids) with ids < 0 or ids a list of IDs']) ;
+    end
+    % demo_spqr_rank(0) can be used to redraw plots of the last
+    % run of demo_spqr_rank.   Also the command
+    % load save_samples_demo_spqr_rank
+    % can be used to load many of the local variables used in
+    % demo_spqr_rank into the main MATLAB workspace.
+
+else
+    % list of matrix ID's has been passed in directly
+    indexs = ids ;
+end
+
+cnt = 0;
+time_start = clock;
+
+%-------------------------------------------------------------------------------
+% allocate space for vectors containing statistics calculated
+%-------------------------------------------------------------------------------
+
+nothing = -ones (1,length (indexs)) ;
+rank_svd_v = nothing ;
+gap_v = nothing ;
+m_v = nothing ;
+n_v = nothing ;
+flag_spqr_basic_v = nothing ;
+rank_svd_basic_v = nothing ;
+rank_spqr_basic_v = nothing ;
+rank_spqr_from_spqr_basic_v = nothing ;
+flag_spqr_null_v = nothing ;
+rank_svd_null_v = nothing ;
+rank_spqr_null_v = nothing ;
+rank_spqr_from_spqr_null_v = nothing ;
+flag_spqr_pinv_v = nothing ;
+rank_svd_pinv_v = nothing ;
+rank_spqr_pinv_v = nothing ;
+rank_spqr_from_spqr_pinv_v = nothing ;
+flag_spqr_cod_v = nothing ;
+rank_svd_cod_v = nothing ;
+rank_spqr_cod_v = nothing ;
+rank_spqr_from_spqr_cod_v = nothing ;
+tol_v = nothing ;
+norm_A_v = nothing ;
+norm_A_N_svd_v = nothing ;
+norm_A_NT_svd_v = nothing ;
+norm_A_NT_spqr_basic_v = nothing ;
+norm_A_N_spqr_null_v = nothing ;
+norm_A_N_spqr_pinv_v = nothing ;
+norm_A_N_spqr_cod_v = nothing ;
+norm_x_pinv_v = nothing ;
+norm_x_QR_dense_v = nothing ;
+norm_r_QR_dense_v = nothing ;
+norm_x_spqr_basic_v = nothing ;
+norm_r_spqr_basic_v = nothing ;
+norm_x_spqr_solve_v = nothing ;
+norm_r_spqr_solve_v = nothing ;
+norm_x_spqr_pinv_minus_x_pinv_v = nothing ;
+norm_x_spqr_cod_minus_x_pinv_v = nothing ;
+cond1_pinv_v = nothing ;
+cond1_cod_v = nothing ;
+norm_w_cod_v = nothing ;
+norm_w_pinv_v = nothing ;
+
+% ignore warnings from inverse power method in ssi
+user_warning_state = warning ('off', 'spqr_rank:overflow') ;
+
+% begin the calculations
+
+if (demo_opts.doprint > 0)
+    disp('Begin calculations')
+    disp(' ')
+end
+
+for i = indexs
+
+    cnt = cnt + 1;
+
+    if (demo_opts.doprint > 0)
+        fprintf ('.') ;
+        if (mod (cnt,50) == 0)
+            fprintf ('\n') ;
+        end
+    end
+
+    %---------------------------------------------------------------------------
+    % generate the problem
+    %---------------------------------------------------------------------------
+
+    % select matrix from SJSU singular matrices
+    Problem = SJget(i,index) ;
+    A=Problem.A ;
+    [m,n]=size(A);
+    private_stream = spqr_repeatable (opts.repeatable) ;
+    if (~isempty (private_stream))
+        b1 = randn (private_stream, m, 1) ;
+        x2 = randn (private_stream, n, 1) ;
+    else
+        b1 = randn (m,1) ;
+        x2 = randn (n,1) ;
+    end
+    b2 = A*x2;         % consistent right hand side
+    b = [ b1, b2 ];
+
+    %---------------------------------------------------------------------------
+    % for demo_opts.figures == 2 find numerical rank, null space basis, 
+    %     pseudoinverse soln using MATLAB svd
+    % for demo_opts.figures <= 1 find numerical rank using precomputed sing.
+    %     values in SJsingular database
+    %---------------------------------------------------------------------------
+
+    if demo_opts.figures <= 1
+        % use the precomputed singular values from the SJsingular database
+        s = Problem.svals;
+        normA = max(s);
+        tol = max(m,n) * eps( normA );
+        rank_svd = SJrank(Problem,tol);
+    else
+        [U,S,V] = svd(full(A));
+        if m > 1, s = diag(S);
+        elseif m == 1
+            s = S(1);
+        else
+            s = 0;
+        end
+        normA= max(s);
+        tol = max(m,n) * eps(normA);
+        rank_svd = sum(s > tol);
+    end
+
+    if (rank_svd == 0)
+        gap = NaN;
+    else
+       if rank_svd < min(m,n)
+           gap = s(rank_svd) / abs(s(rank_svd + 1));
+       else
+           gap = Inf;
+       end
+    end
+
+    if demo_opts.figures == 2
+        if (rank_svd == 0)
+           pseudoinverse_svd = zeros(size(A'));
+           N_svd = eye(n,n);
+           NT_svd = eye(m,m);
+        else
+           S_pinv = diag(ones(rank_svd,1)./s(1:rank_svd));
+           pseudoinverse_svd = V(:,1:rank_svd)*S_pinv*U(:,1:rank_svd)';
+           N_svd = V(:,rank_svd+1:end);
+           NT_svd = U(:,rank_svd+1:end);
+        end
+        x_pinv = pseudoinverse_svd * b(:,1);  % the plots only use x_pinv
+                                              % for b(:,1), the random rhs
+        norm_x_pinv = norm(x_pinv);
+        norm_A_N_svd = norm(A*N_svd);
+        norm_A_transpose_NT_svd = norm(A'*NT_svd);
+
+        % find basic solution using MATLAB's dense QR routine
+        warning_state = warning ('off','MATLAB:rankDeficientMatrix') ;
+        if m ~= n
+            x = full(A) \ b;
+        else
+            x = full([A,zeros(m,1)]) \ b;
+            x = x(1:n,:);
+        end
+        warning (warning_state) ;           % restore the warnings
+
+        norm_x_QR_dense = norm(x(:,1)) ;  %the plots only use ||x||
+                                          % for the random rhs b(:,1)
+        r = b(:,2)- A*x(:,2);             % the plots only use r for
+                                          % the consistent rhs b(:,2)
+        norm_r_QR_dense = norm(r) / norm(b(:,2));
+    end
+
+    %---------------------------------------------------------------------------
+    % run spqr_basic, spqr_null, spqr_pinv and spqr_cod:
+    %---------------------------------------------------------------------------
+
+    if demo_opts.tol_norm_type == 0
+       opts.tol = tol;
+    else
+       opts.tol_norm_type = demo_opts.tol_norm_type;
+       % calculate tol inside spqr_basic, spqr_null, spqr_pinv and spqr_cod
+    end
+
+    % SPQR_COD uses a complete orthogonal decomposition (COD) of A.  By
+    % default the COD is constructed by first factoring A. To select the
+    % option for SPQR_COD which initially factors A', which can have
+    % different numerical properties, use args(1) = 1.
+
+    opts.start_with_A_transpose = demo_opts.start_with_A_transpose ;
+    opts.nsvals_small = demo_opts.nsvals;
+    opts.nsvals_large = demo_opts.nsvals;
+
+    if demo_opts.null_spaces == 2
+        [x_spqr_basic, stats_basic, NT_spqr_basic] = spqr_basic (A,b,opts) ;
+        [N_spqr_null, stats_null] = spqr_null (A,opts) ;
+        [x_spqr_pinv, stats_pinv, N_spqr_pinv, NT] = spqr_pinv (A,b,opts) ; %#ok
+        [x_spqr_cod, stats_cod, N_spqr_cod, NT] = spqr_cod (A,b,opts) ;     %#ok
+    elseif demo_opts.null_spaces == 1
+        [x_spqr_basic, stats_basic, NT_spqr_basic] = spqr_basic (A,b,opts) ;
+        [N_spqr_null, stats_null] = spqr_null (A,opts) ;
+        [x_spqr_pinv, stats_pinv, N_spqr_pinv] = spqr_pinv (A,b,opts) ;
+        [x_spqr_cod, stats_cod, N_spqr_cod] = spqr_cod (A,b,opts) ;
+    else
+        [x_spqr_basic, stats_basic] = spqr_basic (A,b,opts) ;
+        [N_spqr_null, stats_null] = spqr_null (A,opts) ;
+        [x_spqr_pinv, stats_pinv] = spqr_pinv (A,b,opts) ;
+        [x_spqr_cod, stats_cod] = spqr_cod (A,b,opts) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % calculate and save results for figures displaying ranks:
+    %---------------------------------------------------------------------------
+
+    rank_svd_v(cnt) = rank_svd;
+    gap_v(cnt) = gap;
+    m_v(cnt) = m;
+    n_v(cnt) = n;
+
+    % spqr_basic results:
+    flag_spqr_basic_v(cnt) = stats_basic.flag;
+    if stats_basic.flag == 1
+        % use tol_alt returned by spqr_basic to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_basic_v(cnt)=  sum(s > stats_basic.tol_alt);
+        else
+            rank_svd_basic_v(cnt)=  SJrank(Problem,stats_basic.tol_alt);
+        end
+    else
+        % rank_svd_basic_v(cnt)=  rank_svd_v(cnt);
+        % use tol returned by spqr_basic to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_basic_v(cnt)=  sum(s > stats_basic.tol);
+        else
+            rank_svd_basic_v(cnt)=  SJrank(Problem,stats_basic.tol);
+        end
+    end
+    if stats_basic.flag <= 3
+        rank_spqr_basic_v(cnt) = stats_basic.rank ;
+    end
+    if demo_opts.figures >= 1
+        rank_spqr_from_spqr_basic_v(cnt) = stats_basic.rank_spqr ;
+    else
+        rank_spqr_from_spqr_null_v(cnt) = -1;   % not calculated
+    end
+
+    % spqr_null results:
+    flag_spqr_null_v(cnt) = stats_null.flag;
+    if stats_null.flag == 1
+        % use tol_alt returned by spqr_null to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_null_v(cnt) =  sum(s > stats_null.tol_alt);
+        else
+            rank_svd_null_v(cnt) =  SJrank(Problem,stats_null.tol_alt);
+        end
+    else
+        % rank_svd_null_v(cnt)=  rank_svd_v(cnt);  
+        % use tol returned by spqr_null to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_null_v(cnt)=  sum(s > stats_null.tol);
+        else
+            rank_svd_null_v(cnt)=  SJrank(Problem,stats_null.tol);
+        end
+    end
+    if stats_null.flag <= 3
+        rank_spqr_null_v(cnt) = stats_null.rank ;
+    end
+    if demo_opts.figures >= 1
+        rank_spqr_from_spqr_null_v(cnt) = stats_null.rank_spqr ;
+    else
+        rank_spqr_from_spqr_null_v(cnt) = -1 ;    % not calculated
+    end
+
+    % spqr_pinv results:
+    flag_spqr_pinv_v(cnt) = stats_pinv.flag;
+    if stats_pinv.flag == 1
+        % use tol_alt returned by spqr_pinv to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_pinv_v(cnt) =  sum(s > stats_pinv.tol_alt);
+        else
+           rank_svd_pinv_v(cnt) =  SJrank(Problem,stats_pinv.tol_alt);
+        end
+    else
+        % rank_svd_pinv_v(cnt)=  rank_svd_v(cnt);
+        % use tol returned by spqr_pinv to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_pinv_v(cnt)=  sum(s > stats_pinv.tol);
+        else
+            rank_svd_pinv_v(cnt)=  SJrank(Problem,stats_pinv.tol);
+        end
+        
+    end
+    if stats_pinv.flag <= 3
+        rank_spqr_pinv_v(cnt) = stats_pinv.rank ;
+    end
+    if demo_opts.figures >= 1
+        rank_spqr_from_spqr_pinv_v(cnt) = stats_pinv.rank_spqr ;
+    else
+        rank_spqr_from_spqr_pinv_v(cnt) = -1 ;     % not calculated
+    end
+
+    % spqr_cod results:
+    flag_spqr_cod_v(cnt) = stats_cod.flag;
+    if stats_cod.flag == 1
+        % use tol_alt returned by spqr_cod to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_cod_v(cnt)=  sum(s > stats_cod.tol_alt);
+        else
+            rank_svd_cod_v(cnt) =  SJrank(Problem,stats_cod.tol_alt);
+        end
+    else
+        % rank_svd_cod_v(cnt)=  rank_svd_v(cnt);
+        % use tol returned by spqr_cod to determine true num. rank
+        if demo_opts.figures == 2
+            rank_svd_cod_v(cnt)=  sum(s > stats_cod.tol);
+        else
+            rank_svd_cod_v(cnt)=  SJrank(Problem,stats_cod.tol);
+        end
+        
+    end
+    if stats_cod.flag <= 3
+        rank_spqr_cod_v(cnt) = stats_cod.rank ;
+    end
+    if demo_opts.figures >= 1
+        rank_spqr_from_spqr_cod_v(cnt) = stats_cod.rank_spqr ;
+    else
+        rank_spqr_from_spqr_cod_v(cnt) = -1 ;     % not calculated
+    end
+
+    tol_v(cnt) = tol;
+    norm_A_v(cnt) = normA;
+
+    if demo_opts.figures == 2
+
+        %----------------------------------------------------------------------
+        % calculate and save results for figures displaying null space accuracy
+        %----------------------------------------------------------------------
+
+        norm_A_N_svd_v(cnt) = norm_A_N_svd;
+        norm_A_NT_svd_v(cnt) = norm_A_transpose_NT_svd;
+
+        if stats_basic.flag <= 3
+           % use spqr_null_mult to form NT_spqr_basic' * A
+           A_transpose_times_NT = spqr_null_mult(NT_spqr_basic,A,0);
+           norm_A_NT_spqr_basic_v(cnt) = norm(full( A_transpose_times_NT ));
+           % For large matrices, rather than forming A_transpose_times_NT,
+           % it is more efficient to use the estimate of
+           % ||A' * NT_spqr_basic|| calculated by SPQR_BASIC (using spqr_ssp)
+           % when SPQR_BASIC returns a null space bases:
+           % norm_A_NT_spqr_basic_v(cnt) = ...
+           %            stats_basic.est_norm_A_transpose_times_NT;
+        end
+
+        if stats_null.flag <= 3
+           % use spqr_null_mult to form  A * N_spqr_null
+           A_times_N = spqr_null_mult(N_spqr_null,A,3);
+           norm_A_N_spqr_null_v(cnt) = norm(full( A_times_N ));
+           % For large matrices, rather than forming A_times_N,
+           % it is more efficient to use the estimate of
+           % ||A * N|| calculated by SPQR_NULL (using spqr_ssp):
+           % norm_A_N_spqr_null_v(cnt) = stats_null.est_norm_A_times_N;
+        end
+
+        if stats_pinv.flag <= 3
+           % use spqr_null_mult to form  A * N_spqr_pinv
+           A_times_N = spqr_null_mult(N_spqr_pinv,A,3);
+           norm_A_N_spqr_pinv_v(cnt) = norm(full( A_times_N ));
+           % For large matrices, rather than forming A_times_N,
+           % it is more efficient to use the estimate of
+           % ||A * N|| calculated by SPQR_PINV (using spqr_ssp):
+           % norm_A_N_spqr_pinv_v(cnt) = stats_pinv.est_norm_A_times_N;
+        end
+
+        if stats_cod.flag <= 3
+           % use spqr_null_mult to form  A * N_spqr_cod
+           A_times_N = spqr_null_mult(N_spqr_cod,A,3);
+           norm_A_N_spqr_cod_v(cnt) = norm(full( A_times_N ));
+           % For large matrices, rather than forming A_times_N,
+           % it is more efficient to use the estimate of
+           % ||A * N|| calculated by SPQR_COD (using spqr_ssp):
+           % norm_A_N_spqr_cod_v(cnt) = stats_cod.est_norm_A_times_N;
+        end
+
+        %----------------------------------------------------------------------
+        % calculate and save results for basic solutions plots
+        %----------------------------------------------------------------------
+
+        % norm_x_pinv, norm_x_QR_dense and norm_r_QR_dense already computed
+        norm_x_pinv_v(cnt) = norm_x_pinv;
+        norm_x_QR_dense_v(cnt) = norm_x_QR_dense;
+        norm_r_QR_dense_v(cnt) = norm_r_QR_dense;
+
+        norm_x_spqr_basic_v(cnt) = norm(x_spqr_basic(:,1)) ;
+        norm_r_spqr_basic_v(cnt) = norm(b(:,2) - A * x_spqr_basic(:,2)) / ...
+             norm(b(:,2));
+        opts_spqr_solve.tol = stats_basic.tol;
+        warning_state = warning ('off','MATLAB:rankDeficientMatrix') ;
+        x_spqr_solve = spqr_solve (sparse(A), b, opts_spqr_solve) ;
+        warning (warning_state) ;
+        norm_x_spqr_solve_v(cnt) = norm(x_spqr_solve(:,1));
+        norm_r_spqr_solve_v(cnt) = norm(b(:,2) - A * x_spqr_solve(:,2)) / ...
+            norm(b(:,2));
+
+        %----------------------------------------------------------------------
+        % calculate and save results for pinv solutions plots
+        %----------------------------------------------------------------------
+
+        if stats_pinv.flag <= 3
+            norm_x_spqr_pinv_minus_x_pinv_v(cnt) = ...
+               norm(x_spqr_pinv(:,1)-x_pinv) / norm(x_pinv);
+        end
+
+        if stats_cod.flag <= 3
+            norm_x_spqr_cod_minus_x_pinv_v(cnt) = ...
+               norm(x_spqr_cod(:,1)-x_pinv) / norm(x_pinv);
+        end
+
+        cond1_cod_v(cnt) = s(1) / s( rank_svd_cod_v(cnt) );
+        cond1_pinv_v(cnt) = s(1) / s( rank_svd_pinv_v(cnt) );
+        norm_w_cod_v(cnt) = stats_cod.info_spqr1.norm_E_fro ;    
+        norm_w_pinv_v(cnt) = max( ...
+           stats_pinv.stats_spqr_basic.info_spqr1.norm_E_fro, ...
+           stats_pinv.stats_spqr_null.info_spqr1.norm_E_fro) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % save results to a *.mat file for future reference
+    %---------------------------------------------------------------------------
+
+    if ( mod(cnt,10) == 0 || cnt == length(indexs)  && cnt > 1)
+        % save the information needed to draw the plots;
+        % if later the code is run with ids = 0
+        %      save_samples_demo_spqr_rank will be loaded
+        time_required = etime(clock,time_start);
+        save save_samples_demo_spqr_rank ...
+             rank_svd_basic_v rank_spqr_basic_v flag_spqr_basic_v ...
+             rank_svd_null_v  rank_spqr_null_v  flag_spqr_null_v ...
+             rank_svd_pinv_v  rank_spqr_pinv_v  flag_spqr_pinv_v ...
+             rank_svd_cod_v   rank_spqr_cod_v   flag_spqr_cod_v  ...
+             rank_spqr_from_spqr_basic_v gap_v tol_v ...
+             rank_spqr_from_spqr_null_v ...
+             rank_spqr_from_spqr_pinv_v ...
+             rank_spqr_from_spqr_cod_v ...
+             norm_A_NT_svd_v norm_A_NT_spqr_basic_v ...
+             norm_A_N_svd_v norm_A_N_spqr_null_v ...
+             norm_A_N_spqr_pinv_v ...
+             norm_A_N_spqr_cod_v ...
+             norm_x_pinv_v norm_x_QR_dense_v  norm_r_QR_dense_v ...
+             norm_x_spqr_basic_v  norm_r_spqr_basic_v ...
+             norm_x_spqr_solve_v  norm_r_spqr_solve_v ...
+             norm_x_spqr_pinv_minus_x_pinv_v ...
+             norm_x_spqr_cod_minus_x_pinv_v cond1_pinv_v cond1_cod_v ...
+             norm_w_cod_v  norm_w_pinv_v norm_A_v ...
+             cnt time_required indexs m_v n_v rank_svd_v ...
+             demo_opts
+    end
+
+end
+
+% restore user's warning state
+warning (user_warning_state) ;
+
+% if (demo_opts.dopause)
+%     disp('Press enter to see the first plot')
+%     pause
+% end
+
+if demo_opts.figures >= 1
+    %---------------------------------------------------------------------------
+    % plot information for calculated ranks
+    %---------------------------------------------------------------------------
+
+    figure(1)
+    subplot(2,2,1)
+    plot_ranks(rank_svd_basic_v,rank_spqr_basic_v,...
+        rank_spqr_from_spqr_basic_v,flag_spqr_basic_v,gap_v,'SPQR\_BASIC')
+    subplot(2,2,2)
+    plot_ranks(rank_svd_null_v,rank_spqr_null_v,rank_spqr_from_spqr_null_v,...
+        flag_spqr_null_v,gap_v,'SPQR\_NULL')
+    subplot(2,2,3)
+    plot_ranks(rank_svd_pinv_v,rank_spqr_pinv_v,rank_spqr_from_spqr_pinv_v,...
+        flag_spqr_pinv_v,gap_v,'SPQR\_PINV')
+    subplot(2,2,4)
+    plot_ranks(rank_svd_cod_v,rank_spqr_cod_v,rank_spqr_from_spqr_cod_v,...
+        flag_spqr_cod_v,gap_v,'SPQR\_COD')
+
+    if (demo_opts.doprint > 0)
+        disp(' ')
+        if demo_opts.figures == 1
+           disp('In the figure for each of SPQR_BASIC, SPQR_NULL, ')
+        else
+           disp('In the first figure for each of SPQR_BASIC, SPQR_NULL, ')
+        end
+        disp('SPQR_PINV, SPQR_COD and for SPQR the plots summarize the percent')
+        disp('of matrices where the calculated numerical rank is correct and')
+        disp('the percent of the matrices where the warning flag indicates')
+        disp('that the calculated numerical rank is correct with a warning')
+        disp('flag either 0 or 1 versus the singular value gap, the ratio of')
+        disp('singular number r over singular value number r+1, where r is the')
+        disp('calculated numerical rank.')
+        disp(' ')
+        disp('Note that the percent of the matrices where the new routines ')
+        disp('calculate the correct numerical rank approaches 100 percent')
+        disp('as the singular value gap increases.')
+        disp(' ')
+        disp('The plot is best seen as a full screen plot.')
+        disp(' ')
+        % if (demo_opts.dopause)
+        %     disp('Press enter to view the second figure')
+        %     pause
+        % end
+    end
+end
+
+drawnow
+
+if demo_opts.figures == 2
+
+    %---------------------------------------------------------------------------
+    % plot information for null spaces
+    %---------------------------------------------------------------------------
+
+    figure(2)
+    subplot(2,2,1)
+    plot_null_spaces(norm_A_NT_svd_v,tol_v, ...
+           norm_A_NT_spqr_basic_v,flag_spqr_basic_v,'SPQR\_BASIC')
+    subplot(2,2,2)
+    plot_null_spaces(norm_A_N_svd_v,tol_v, ...
+           norm_A_N_spqr_null_v,flag_spqr_null_v,'SPQR\_NULL')
+    subplot(2,2,3)
+    plot_null_spaces(norm_A_N_svd_v,tol_v, ...
+           norm_A_N_spqr_pinv_v,flag_spqr_pinv_v,'SPQR\_PINV')
+    subplot(2,2,4)
+    plot_null_spaces(norm_A_N_svd_v,tol_v, ...
+           norm_A_N_spqr_cod_v,flag_spqr_cod_v,'SPQR\_COD')
+
+    if (demo_opts.doprint > 0)
+        disp(' ')
+        disp('In the second figure ||AN||, where N is a calculated')
+        disp('orthonormal basis for the numerical null space, or, in the case')
+        disp('of SPQR_BASIC, ||(transpose of A) N||, normalized by the ')
+        disp('tolerance defining the numerical rank, is plotted for null')
+        disp('space bases calculated by MATLAB''s SVD and by SPQR_BASIC,')
+        disp('SPQR_NULL, SPQR_PINV and SPQR_COD.')
+        disp(' ')
+        disp('Note that the null space bases calculated by the new routines')
+        disp('are generally as good as the bases calculated by MATLAB''s SVD.')
+        disp('The tolerance used for normalization in the plots is ')
+        disp('O(relative machine precision times ||A||).')
+        disp(' ')
+        disp('The plot is best seen as a full screen plot.')
+        disp(' ')
+        % if (demo_opts.dopause)
+        %     disp('Press enter to view the third figure')
+        %     pause
+        % end
+    end
+
+    drawnow
+
+    %---------------------------------------------------------------------------
+    % plot information for basic solutions
+    %---------------------------------------------------------------------------
+
+    figure(3)
+    plot_basic(norm_x_pinv_v,norm_x_QR_dense_v, norm_r_QR_dense_v, ...
+        norm_x_spqr_basic_v, norm_r_spqr_basic_v, ...
+        norm_x_spqr_solve_v, norm_r_spqr_solve_v,flag_spqr_basic_v)
+
+    if (demo_opts.doprint)
+        disp(' ')
+        disp('In the third figure the left plot pictures ||x|| / ||x_PINV|| ')
+        disp('where x is a basic solution to min || b - A x ||')
+        disp('calculated by MATLAB''s dense matrix QR algorithm,')
+        disp('by SPQR_SOLVE or by SPQR_BASIC. SPQR_SOLVE is part of')
+        disp('SuiteSparseQR and can be used to construct basic solutions to')
+        disp('min ||b - A x||. x_PINV is computed using MATLAB''s PINV. In the')
+        disp('left hand plot the vectors b in min || b - A x || are random')
+        disp('vectors. The right plot pictures  ||r|| = || b - A x || for x')
+        disp('vectors calculated using MATLAB''s dense matrix QR algorithm,')
+        disp('by SPQR_SOLVE or by SPQR_BASIC.  In the right hand plot the')
+        disp('vectors b in min || b - A x || are of the form b = Ax where x')
+        disp('is a random vector.')
+        disp(' ')
+        disp('In the left hand plot note that for most, but not all, of the')
+        disp('matrices the norm of the basic solution calculated by SPQR_BASIC')
+        disp('or by SPQR_SOLVE is the same order of magnitude as the norm of')
+        disp('the pseudoinverse solution. Also note that SPQR_SOLVE calculates')
+        disp('a large norm solution more frequently than does SPQR_BASIC.')
+        disp(' ')
+        disp('In the right hand plot note that for most, but not all, matrices')
+        disp('the residuals for solutions calculated by SPQR_BASIC or by ')
+        disp('SPQR_SOLVE are similar in size to the residual for solutions')
+        disp('calcluated by MATLAB''s dense QR factorization. ')
+        disp(' ')
+        disp('The plot is best seen as a full screen plot.')
+        disp(' ')
+        % if (demo_opts.dopause)
+        %     disp('Press enter to view the fourth figure.')
+        %     pause
+        % end
+    end
+
+    %---------------------------------------------------------------------------
+    % plot information for pseudoinverse solutions
+    %---------------------------------------------------------------------------
+
+    figure(4)
+    plot_pinv(norm_x_spqr_pinv_minus_x_pinv_v, ...
+        norm_x_spqr_cod_minus_x_pinv_v, cond1_pinv_v, cond1_cod_v, ...
+        norm_w_pinv_v, norm_w_cod_v, flag_spqr_pinv_v,  ... % tol_v, ...
+        flag_spqr_cod_v, norm_A_v)
+
+    if (demo_opts.doprint > 0)
+        disp(' ')
+        disp('In the fourth figure the left graph  plots || x - x_PINV ||')
+        disp(' / ||x_PINV|| for x produced by SPQR_PINV for the matrices')
+        disp('where SPQR_PINV returns a flag of 0. x_PINV is')
+        disp('calculated using MATLAB''s PINV routine. Also part of a')
+        disp('perturbation theory result from "Matrix Perturbation Theory" by')
+        disp('Stewart and Sun, page 157, is plotted. The right hand graph')
+        disp('is the same plot for x produced by SPQR_COD for the matrices')
+        disp('where SPQR_COD returns a flag of 0. For the plots the ')
+        disp('vectors b in min||b-Ax|| are random vectors')
+        disp(' ')
+        disp('Note that the accuracies of the pseudoinverse solutions')
+        disp('calculated by SPQR_COD and, in most cases, by SPQR_PINV are as')
+        disp('good as or nearly as good as predicted by the perturbation')
+        disp('theory.')
+        disp(' ')
+        disp('The plot is best seen as a full screen plot.')
+    end
+
+    drawnow
+
+end
+
+if (demo_opts.doprint >= 0)
+    fprintf ('\n') ;
+end
+failures = 0 ;
+
+%-------------------------------------------------------------------------------
+% check that numerical rank calculations are accurate
+%-------------------------------------------------------------------------------
+
+ifail_spqr_basic = find( rank_svd_basic_v ~= rank_spqr_basic_v & ...
+    (flag_spqr_basic_v == 0 | flag_spqr_basic_v == 1) );
+ifail_spqr_null = find( rank_svd_null_v ~= rank_spqr_null_v & ...
+    (flag_spqr_null_v == 0 | flag_spqr_null_v == 1) );
+ifail_spqr_pinv = find( rank_svd_pinv_v ~= rank_spqr_pinv_v & ...
+    (flag_spqr_pinv_v == 0 | flag_spqr_pinv_v == 1) );
+ifail_spqr_cod = find( rank_svd_cod_v ~= rank_spqr_cod_v & ...
+    (flag_spqr_cod_v == 0 | flag_spqr_cod_v == 1) );
+
+nfail_spqr_basic = length(ifail_spqr_basic);
+nfail_spqr_null = length(ifail_spqr_null);
+nfail_spqr_pinv = length(ifail_spqr_pinv);
+nfail_spqr_cod = length(ifail_spqr_cod);
+
+SJid_fail_spqr_basic = sort( indexs( ifail_spqr_basic ) );
+SJid_fail_spqr_null = sort( indexs( ifail_spqr_null ) );
+SJid_fail_spqr_pinv = sort( indexs( ifail_spqr_pinv ) );
+SJid_fail_spqr_cod = sort( indexs( ifail_spqr_cod ) );
+
+SJid_fail = union(SJid_fail_spqr_basic, SJid_fail_spqr_null) ; 
+SJid_fail = union(SJid_fail, SJid_fail_spqr_pinv) ;
+SJid_fail = union(SJid_fail, SJid_fail_spqr_cod) ;
+
+if (demo_opts.doprint > 0)
+    disp(' ')
+    disp('Check that the routines reliably calculate the numerical rank.')
+end
+
+if (demo_opts.doprint >= 0)
+    fprintf ('SPQR_BASIC: ') ;
+end
+iflagis0_or_1 = find(flag_spqr_basic_v == 0 | flag_spqr_basic_v == 1);
+nflagis0_or_1 = length(iflagis0_or_1);
+
+failures = failures + nfail_spqr_basic ;
+
+if (demo_opts.doprint > 0)
+    disp(['   ',int2str(nflagis0_or_1 - nfail_spqr_basic),...
+        ' matrices have the correct numerical rank from the set of'])
+    if ( nfail_spqr_basic == 0 )
+        disp(['   ',int2str(nflagis0_or_1),...
+            ' matrices with a warning flag of 0 or 1.'])
+    elseif ( nfail_spqr_basic == 1 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrix from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_basic),'.'])
+    elseif ( nfail_spqr_basic >= 2 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrices from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_basic),'.'])
+    end
+elseif (demo_opts.doprint >= 0)
+    if ( nfail_spqr_basic == 0 )
+        fprintf ('%3d matrices, failed: %d\n', nflagis0_or_1, ...
+            nfail_spqr_basic) ;
+    else
+        fprintf ('%3d matrices, failed: %d with SJid =', ...
+           nflagis0_or_1, nfail_spqr_basic) ;
+       fprintf(' %d', SJid_fail_spqr_basic ) ;
+       fprintf('\n') ;
+    end
+end
+
+if (demo_opts.doprint >= 0)
+    fprintf ('SPQR_NULL:  ') ;
+end
+iflagis0_or_1 = find(flag_spqr_null_v == 0 | flag_spqr_null_v == 1);
+nflagis0_or_1 = length(iflagis0_or_1);
+
+failures = failures + nfail_spqr_null ;
+
+if (demo_opts.doprint > 0)
+    disp(['   ',int2str(nflagis0_or_1 - nfail_spqr_null),...
+        ' matrices have the correct numerical rank from the set of'])
+    if ( nfail_spqr_null == 0 )
+        disp(['   ',int2str(nflagis0_or_1),...
+            ' matrices with a warning flag of 0 or 1.'])
+    elseif ( nfail_spqr_null == 1 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrix from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_null),'.'])
+    elseif ( nfail_spqr_null >= 2 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrices from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_null),'.'])
+    end
+elseif (demo_opts.doprint >= 0)
+    if ( nfail_spqr_null == 0 )
+        fprintf ('%3d matrices, failed: %d\n', nflagis0_or_1, ...
+            nfail_spqr_null) ;
+    else
+        fprintf ('%3d matrices, failed: %d with SJid =', ...
+           nflagis0_or_1, nfail_spqr_null) ;
+       fprintf(' %d', SJid_fail_spqr_null ) ;
+       fprintf('\n') ;
+    end
+end
+
+if (demo_opts.doprint >= 0)
+    fprintf ('SPQR_PINV:  ') ;
+end
+iflagis0_or_1 = find(flag_spqr_pinv_v == 0 | flag_spqr_pinv_v == 1);
+nflagis0_or_1 = length(iflagis0_or_1);
+
+failures = failures + nfail_spqr_pinv ;
+
+if (demo_opts.doprint > 0)
+    disp(['   ',int2str(nflagis0_or_1 - nfail_spqr_pinv),...
+        ' matrices have the correct numerical rank from the set of'])
+    if ( nfail_spqr_pinv == 0 )
+        disp(['   ',int2str(nflagis0_or_1),...
+            ' matrices with a warning flag of 0 or 1.'])
+    elseif ( nfail_spqr_pinv == 1 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrix from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_pinv),'.'])
+    elseif ( nfail_spqr_pinv >= 2 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrices from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_pinv),'.'])
+    end
+elseif (demo_opts.doprint >= 0)
+    if ( nfail_spqr_pinv == 0 )
+        fprintf ('%3d matrices, failed: %d\n', nflagis0_or_1, ...
+            nfail_spqr_pinv) ;
+    else
+        fprintf ('%3d matrices, failed: %d with SJid =', ...
+           nflagis0_or_1, nfail_spqr_pinv) ;
+       fprintf(' %d', SJid_fail_spqr_pinv ) ;
+       fprintf('\n') ;
+    end
+end
+
+if (demo_opts.doprint >= 0)
+    fprintf ('SPQR_COD:   ') ;
+end
+iflagis0_or_1 = find(flag_spqr_cod_v == 0 | flag_spqr_cod_v == 1);
+nflagis0_or_1 = length(iflagis0_or_1);
+
+failures = failures + nfail_spqr_cod ;
+
+if (demo_opts.doprint > 0)
+    disp(['   ',int2str(nflagis0_or_1 - nfail_spqr_cod),...
+        ' matrices have the correct numerical rank from the set of'])
+    if ( nfail_spqr_cod == 0 )
+        disp(['   ',int2str(nflagis0_or_1),...
+            ' matrices with a warning flag of 0 or 1.'])
+    elseif ( nfail_spqr_cod == 1 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrix from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_cod),'.'])
+    elseif ( nfail_spqr_cod >= 2 )
+        disp(['   ',int2str(nflagis0_or_1),' matrices with a warning ',...
+            'flag of 0 or 1.  Failure is for matrices from'])
+        disp(['   ','the SJSU Singular Matrix Database with SJid = ',...
+            int2str(SJid_fail_spqr_cod),'.'])
+    end
+elseif (demo_opts.doprint >= 0)
+    if ( nfail_spqr_cod == 0 )
+        fprintf ('%3d matrices, failed: %d\n', nflagis0_or_1, ...
+            nfail_spqr_cod) ;
+    else
+        fprintf ('%3d matrices, failed: %d with SJid =', ...
+           nflagis0_or_1, nfail_spqr_cod) ;
+       fprintf(' %d', SJid_fail_spqr_cod ) ;
+       fprintf('\n') ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% return results
+%-------------------------------------------------------------------------------
+
+if (nargout > 0)
+    nfailures = failures ;
+end
+
+if nargout > 1
+    SJid_failures = SJid_fail;
+end
+
+if (failures > 0)
+    fprintf ('demo_spqr_rank: %d failures\n', failures) ;
+end
+
+%-------------------------------------------------------------------------------
+% subfunctions
+%-------------------------------------------------------------------------------
+
+
+%****************************************************************
+%****    plot_ranks
+%****************************************************************
+
+
+function plot_ranks(rank_svd_v,rank_spqr_cod_v,rank_spqr_v, ...
+    flag_spqr_cod_v, gap_v, method)
+% plot the percent of matrices with a gap larger than a specified gap
+%     that have the correct numerical rank, that have a
+%     warning flag = 0 or 1' and that have a correct rank for spqr
+%     versus gap in singular values
+% the input is computed by demo_reliable_spqr
+
+% ncor = sum (rank_svd_v == rank_spqr_cod_v);
+
+gap_tol = 10 .^ ((0:32)/2);
+z = zeros (1, length (gap_tol)) ;
+per_cor = z ;
+per_cor_spqr = z ;
+per_flag_0_1 = z ;
+
+i = 0;
+for gap = gap_tol
+    i = i+1;
+    igt = find( gap_v >= gap & rank_svd_v > 0 );
+    % for igt use rank_svd_v > 0 to exclude rare cases where SJrank returns -1
+    ncorrect = sum( rank_svd_v(igt) == rank_spqr_cod_v(igt) );
+    per_cor(i) = 100*ncorrect / length(igt);
+    ncorrect = sum( rank_svd_v(igt) == rank_spqr_v(igt) );
+    per_cor_spqr(i) = 100*ncorrect / length(igt);
+    n_flag_0_1 = sum( flag_spqr_cod_v(igt) <= 1 );
+    per_flag_0_1(i) = 100 * n_flag_0_1 / length(igt);
+end
+
+semilogx(gap_tol,per_cor_spqr,'ks--',gap_tol,per_flag_0_1, ...
+    'bo--',gap_tol,per_cor,'rx--');
+axisv=axis;
+axisv3 = axisv(3);
+%axisv3=60;
+axisv2=[axisv(1) gap_tol(end) axisv3 axisv(4)+.01];
+axis(axisv2);
+fs = 12;
+ylabel('Percent','fontsize',fs)
+xlabel('Gap in the singular value spectrum bigger than','fontsize',fs)
+title(['Percent numerical rank correct and warning flag = 0 or 1',char(10),...
+    'versus gap in singular values'],'fontsize',fs)
+legend('% SPQR rank correct',['% flag = 0 or 1 in ',method],...
+    ['% ',method,' rank correct'],'location','se')
+grid
+set(gca,'fontsize',fs)
+
+
+%****************************************************************
+%****    plot_ basic
+%****************************************************************
+
+function plot_basic(norm_x_pinv_v,norm_x_QR_dense_v, norm_r_QR_dense_v, ...
+    norm_x_spqr_basic_v, norm_r_spqr_basic_v, ...
+    norm_x_spqr_solve_v, norm_r_spqr_solve_v,flag_v)
+% plot the quality of the basic solutions
+% the input is computed by demo_spqr_rank
+
+iflagis0 = find( flag_v == 0 );
+nflagis0 = length(iflagis0);
+
+norm_x_pinv0 = norm_x_pinv_v(iflagis0);
+norm_x_spqr_basic0 = norm_x_spqr_basic_v(iflagis0);
+norm_x_QR_dense0 = norm_x_QR_dense_v(iflagis0);
+norm_x_spqr_solve0 = norm_x_spqr_solve_v(iflagis0);
+norm_ratio_spqr_basic = norm_x_spqr_basic0 ./ norm_x_pinv0;
+norm_ratio_QR_dense = norm_x_QR_dense0 ./ norm_x_pinv0;
+norm_ratio_spqr_solve = norm_x_spqr_solve0 ./ norm_x_pinv0;
+[norm_ratio_spqr_basic,isort]=sort(norm_ratio_spqr_basic);
+norm_ratio_QR_dense = norm_ratio_QR_dense(isort);
+norm_ratio_spqr_solve = norm_ratio_spqr_solve(isort);
+
+
+subplot(1,2,1)
+
+semilogy(1:nflagis0,norm_ratio_QR_dense, 'bo',...
+    1:nflagis0,norm_ratio_spqr_solve, 'ks',...
+    1:nflagis0,norm_ratio_spqr_basic, 'rx')
+fs = 12;
+ylabel(' || x || / ||x_{  PINV} ||','fontsize',fs)
+xlabel('matrix: ordered by ||x_{SPQR\_BASIC} || / ||x_{PINV} ||','fontsize',fs)
+title([' Comparison of the norms of basic ',...
+    'solutions divided by ||x_{PINV}||',char(10),'for ', ...
+    int2str(nflagis0) , ' matrices with flag = 0', ...
+    ' in SPQR\_BASIC'],'fontsize',fs)
+legend('dense QR','SPQR\_SOLVE',...
+    ' SPQR\_BASIC ','location','best')
+grid
+set(gca,'fontsize',fs)
+
+subplot(1,2,2)
+norm_r_spqr_basic0 = norm_r_spqr_basic_v(iflagis0);
+norm_r_QR_dense0 = norm_r_QR_dense_v(iflagis0);
+norm_r_spqr_solve0 = norm_r_spqr_solve_v(iflagis0);
+[norm_r_spqr_basic,isort]=sort(norm_r_spqr_basic0);
+norm_r_QR_dense = norm_r_QR_dense0(isort);
+norm_r_spqr_solve = norm_r_spqr_solve0(isort);
+
+semilogy(1:nflagis0,norm_r_QR_dense,'bo',...
+    1:nflagis0,norm_r_spqr_solve,'ks',...
+    1:nflagis0,norm_r_spqr_basic,'rx')
+
+fs = 12;
+ylabel(' || r || / || b ||','fontsize',fs)
+xlabel('matrix: ordered by ||r_{SPQR\_BASIC} || / ||b||','fontsize',fs)
+title([' Comparison of the norms of residuals, ',...
+    'r = b-A*x, divided by ||b||',char(10),' for ', ...
+    int2str(length(iflagis0)) , ' matrices with flag = 0', ...
+    ' in SPQR\_BASIC'],'fontsize',fs)
+legend('dense QR','SPQR\_SOLVE',...
+    ' SPQR\_BASIC ','location','best')
+set(gca,'fontsize',fs)
+grid
+
+%****************************************************************
+%****    plot_null_spaces
+%****************************************************************
+
+function plot_null_spaces(norm_A_N_svd_v,tol_v, ...
+    norm_A_N_v,flag_v,method)
+% plot the quality of the null spaces
+% the input is computed by demo_spqr_rank
+
+iflagis0 = find( flag_v == 0 );
+nflagis0 = length(iflagis0);
+n_method_better = sum( norm_A_N_v(iflagis0) <= norm_A_N_svd_v(iflagis0) );
+percent_method_better = 100*n_method_better / length(iflagis0);
+quality_method = norm_A_N_v(iflagis0) ./ tol_v(iflagis0);
+quality_svd = norm_A_N_svd_v(iflagis0) ./ tol_v(iflagis0);
+[ignore, isort]=sort(quality_method);                                       %#ok
+clear ignore
+fs = 12;
+semilogy(1:nflagis0,quality_svd(isort),'bo',1:nflagis0, ...
+    quality_method(isort),'rx');
+%axis1 = axis;
+%axis1(3)=1.e-8;
+%axis(axis1)
+if strcmp(method,'SPQR\_BASIC')
+    ylabel('|| A^T N || / tolerance','fontsize',fs)
+    xlabel(['matrix: ordered by ||A^TN|| / tolerance for ',method],...
+        'fontsize',fs)
+    title(['Null space quality when flag in ',method,' is 0.',char(10),...
+        method,' has ||A^T N|| smaller in ',...
+        int2str(percent_method_better),'% of cases.'],'fontsize',fs)
+else
+    ylabel('|| A N || / tolerance','fontsize',fs)
+    xlabel(['matrix: ordered by ||AN|| / tolerance for ',method],...
+        'fontsize',fs)
+    title(['Null space quality when flag in ',method,' is 0.',char(10),...
+        method,' has ||AN|| smaller in ',...
+        int2str(percent_method_better),'% of cases.'],'fontsize',fs)
+end
+legend('SVD null space',[method,' null space'],'location','SE')
+grid
+set(gca,'fontsize',fs)
+
+%****************************************************************
+%****    plot_pinv
+%****************************************************************
+
+function  plot_pinv(norm_x_spqr_pinv_minus_x_pinv_v, ...
+        norm_x_spqr_cod_minus_x_pinv_v, cond1_pinv_v, cond1_cod_v, ...
+        norm_w_pinv_v, norm_w_cod_v, flag_spqr_pinv_v,  ... % tol_v, ...
+        flag_spqr_cod_v, norm_A_v)
+
+% plot the quality of the pseudoinverse solutions
+% the input is computed by demo_spqr_rank
+
+% draw plot for results from spqr_pinv
+subplot(1,2,1)
+iflagis0 = find(flag_spqr_pinv_v == 0);
+nflagis0 = length(iflagis0);
+%perturbation_theory_v = cond1_v .* (max(tol_v,norm_w_pinv_v) ./ norm_A_v );
+perturbation_theory_v = cond1_pinv_v .* max(10*eps,norm_w_pinv_v ./ norm_A_v );
+
+perturbation_theory0 = perturbation_theory_v(iflagis0);
+[perturbation_theory,isort] = sort(perturbation_theory0);
+norm_x_spqr_pinv_minus_x_pinv0 = norm_x_spqr_pinv_minus_x_pinv_v(iflagis0);
+norm_x_spqr_pinv_minus_x_pinv = norm_x_spqr_pinv_minus_x_pinv0(isort);
+fs = 12;
+loglog(perturbation_theory, norm_x_spqr_pinv_minus_x_pinv,'o',...
+    [perturbation_theory(1),max(1,perturbation_theory(end))], ...
+    [perturbation_theory(1),max(1,perturbation_theory(end))],...
+    'r--','linewidth',2 )
+ylabel(' || x_{SPQR\_PINV } - x_{PINV} || / ||x_{PINV} ||','fontsize',fs)
+xlabel(' ( \sigma_1(A) / \sigma_r(A) ) max(10 \epsilon, ||w|| / ||A|| ) ',...
+    'fontsize',fs)
+title([' Comparison of the pseudoinverse solutions ',...
+    'returned by SPQR\_PINV ',char(10),' and MATLAB''s PINV for ', ...
+    int2str(nflagis0) , ' matrices with flag = 0', ...
+    ' in SPQR\_PINV'],'fontsize',fs)
+legend('|| x_{SPQR\_PINV } - x_{PINV} || / ||x_{PINV} ||',...
+    '( \sigma_1(A)/\sigma_r(A) )  max(10\epsilon, ||w|| / ||A|| ) ',...
+    'location','best')
+set(gca,'fontsize',fs)
+grid
+shg
+
+% draw plot for results from spqr_cod
+subplot(1,2,2)
+iflagis0 = find(flag_spqr_cod_v == 0);
+nflagis0 = length(iflagis0);
+%perturbation_theory_v = cond1_v .* (max(tol_v,norm_w_cod_v) ./ norm_A_v);
+perturbation_theory_v = cond1_cod_v .* max(10*eps,norm_w_cod_v ./ norm_A_v );
+perturbation_theory0 = perturbation_theory_v(iflagis0);
+[perturbation_theory,isort] = sort(perturbation_theory0);
+norm_x_spqr_cod_minus_x_pinv0 = norm_x_spqr_cod_minus_x_pinv_v(iflagis0);
+norm_x_spqr_cod_minus_x_pinv = norm_x_spqr_cod_minus_x_pinv0(isort);
+fs = 12;
+loglog(perturbation_theory, norm_x_spqr_cod_minus_x_pinv,'o',...
+    [perturbation_theory(1),max(1,perturbation_theory(end))], ...
+    [perturbation_theory(1),max(1,perturbation_theory(end))],...
+    'r--','linewidth',2 )
+ylabel('|| x_{SPQR\_COD } - x_{PINV} || / ||x_{PINV} ||','fontsize',fs)
+xlabel('( \sigma_1(A)/\sigma_r(A) ) max(10\epsilon, ||w|| / ||A||) ',...
+    'fontsize',fs)
+title([' Comparison of the pseudoinverse solutions ',...
+    'returned by SPQR\_COD ',char(10),' and MATLAB''s PINV for ', ...
+    int2str(nflagis0) , ' matrices with flag = 0', ...
+    ' in SPQR\_COD'],'fontsize',fs)
+legend('|| x_{SPQR\_COD } - x_{PINV} || / ||x_{PINV} ||',...
+    '( \sigma_1(A) / \sigma_r(A) )  max(10 \epsilon, ||w|| / ||A||) ',...
+    'location','best')
+set(gca,'fontsize',fs)
+grid
+shg
diff --git a/MATLAB_Tools/spqr_rank/private/Contents.m b/MATLAB_Tools/spqr_rank/private/Contents.m
new file mode 100644
index 0000000..ce71852
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/Contents.m
@@ -0,0 +1,16 @@
+% PRIVATE
+%
+%   Routines called by the SPQR_RANK package.  These routines are not 
+%   intended to be directly called by the user.
+%
+% Files
+%   install_SJget          - sets the MATLAB path to include a path to SJget
+%   spqr_failure           - clean-up from failure
+%   spqr_rank_assign_stats - set flag and other statistics.
+%   spqr_rank_deflation    - constructs pseudoinverse or basic solution using deflation.
+%   spqr_rank_form_basis   - forms the basis for the null space of a matrix.
+%   spqr_rank_get_inputs   - get the inputs and set the default options.
+%   spqr_rank_order_fields - orders the fields of stats in a convenient order.
+%   spqr_repeatable        - ensure repeatable results, or use the default random stream.
+%   spqr_wrapper           - wrapper around spqr to get additional statistics
+%   tol_is_default         - return true if tol is default, false otherwise
diff --git a/MATLAB_Tools/spqr_rank/private/install_SJget.m b/MATLAB_Tools/spqr_rank/private/install_SJget.m
new file mode 100644
index 0000000..56011c5
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/install_SJget.m
@@ -0,0 +1,40 @@
+function install_SJget
+%INSTALL_SJGET sets the MATLAB path to include a path to SJget
+% Sets the MATLAB path to include the interface to the SJSU Singular Matrix 
+% Collection
+%
+% Example
+%   install_SJget
+%
+% See also gallery.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis
+
+% This is the file spqr_rank/private/install_SJget.m.  The SJget toolbox
+% is in spqr_rank/SJget.
+
+if ( exist ('SJget', 'file') ~= 2)
+    here = mfilename ('fullpath') ;
+    k = strfind (here, 'private') ;
+    SJgetpath = [here(1:k-1) 'SJget'] ;
+    fprintf ('Adding SJget to your path:\n%s\n', SJgetpath) ;
+    addpath(SJgetpath)
+    disp (' ') ;
+    disp ('Saving the current MATLAB path so that access to matrices') ;
+    disp ('from the SJSU singular matrix collection is available when') ;
+    disp ('restarting MATLAB.') ;
+    lastwarn ('') ;
+    try
+        savepath    % comment out this line to avoid saving the path
+        err = lastwarn ;
+    catch me
+        err = me.message ;
+    end
+    if (~isempty (err))
+        fprintf ('error: %s\n', err) ;
+        fprintf ('unable to save path, see ''doc pathdef'' for more info\n') ;
+    end
+    disp (' ') ;
+    disp (' ') ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_failure.m b/MATLAB_Tools/spqr_rank/private/spqr_failure.m
new file mode 100644
index 0000000..7c24b6c
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_failure.m
@@ -0,0 +1,17 @@
+function [stats x N NT] = spqr_failure (f, stats, get_details, start_tic)
+%SPQR_FAILURE clean-up from failure
+% Not user-callable.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis
+
+stats.flag = f ;
+x = [ ] ;
+N = [ ] ;
+NT = [ ] ;
+if get_details == 1
+    % order the fields of stats in a convenient order (the fields when
+    % get_details is 0 or 2 are already in a good order)
+    stats.time = -1 ;
+    stats = spqr_rank_order_fields (stats) ;
+    stats.time = toc (start_tic) ;
+end
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_rank_assign_stats.m b/MATLAB_Tools/spqr_rank/private/spqr_rank_assign_stats.m
new file mode 100644
index 0000000..b6b7fc8
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_rank_assign_stats.m
@@ -0,0 +1,151 @@
+function [ stats ] =  spqr_rank_assign_stats(...
+    call_from, est_sval_upper_bounds, est_sval_lower_bounds, tol, ...
+    numerical_rank, nsvals_small, nsvals_large, stats, stats_ssi, ...
+    opts, nargout_call, stats_ssp_N, stats_ssp_NT, start_tic)
+%SPQR_RANK_ASSIGN_STATS set flag and other statistics.
+%
+% Called by spqr_basic and spqr_cod as well as, indirectly, by spqr_pinv and
+% spqr_null after these methods have determined estimated bounds on the
+% singular values of A. Set the flag which indicates the success of
+% and other statistics for spqr_basic, spqr_null, spqr_pinv, spqr_cod.
+% Not user callable.
+%
+% Output:
+%    stats - statistics for spqr_basic, spqr_null, spqr_pinv and spqr_cod.
+%       including the following fields:
+%
+%       stats.flag which indicates whether the method has determined the
+%          correct numerical rank:
+%       stats.flag is 0 if it is likely, although not
+%          guaranteed, that stats.rank is the correct numerical rank for
+%          tolerance tol (i.e. agrees with the numerical rank
+%          determined by the singular values of R).
+%       stats.flag is 1 if the calculated numerical rank stats.rank may
+%           be correct for the tolerance stats.tol but the estimated error
+%           bounds are too large to confirm this.  However stats.rank appears
+%           to be correct for an alternate tolerance tol_alt.  More
+%           generally stats.rank appears to be correct for any tolerance
+%           between stats.est_sval_lower_bounds(nsvals_large) and
+%           stats.est_sval_upper_bounds(nsvals_large+1).
+%       stats.flag is 2 if the calculated numerical rank stats.numerical
+%           may be correct but estimated error bounds are too large to confirm
+%           this.  The conditions for stats.flag to be 0 or 1 are not
+%           satisfied.
+%       stats.flag is 3 if is likely that the numerical rank returned,
+%          stats.rank, is too large.
+%
+%       stats.tol_alt is an alternate tolerance that corresponds to the
+%          calculated numerical rank when stats.flag is 1.
+%
+%       other fields of statistics
+%
+% Input:
+%    call_from ==
+%        call_from = 1 indicates a call from spqr_basic
+%        call_from = 2 indicates a call from spqr_cod
+%    est_sval_upper_bounds -- est_sval_upper_bounds(i) is an
+%        estimate of an upper bound on singular value number
+%        stats.sval_numbers_for_bounds(i) of A.
+%    est_sval_lower_bounds -- stats.est_sval_lower_bounds(i) is an
+%        estimate of an lower bound on singular value number
+%        sval_numbers_for_bounds(i) of A.
+%    tol - the tolerance defining the numerical rank.  The true
+%        numerical rank is the number of singular values larger than tol.
+%    numerical_rank -- the estimated numerical rank of A
+%    nsvals_small -- the number of estimated singular values, from
+%        the set that have been estimated, that appear to be smaller
+%        than or equal to tol.
+%    nsvals_large -- the number of estimated singular values, from
+%        the set that have been estimated, that appear to be larger
+%        than tol.
+%    stats -- the statistics returned by spqr_basic, spqr_null, spqr_pinv
+%        and spqr_cod.
+%    stats_ssi -- the statistics returned by spqr_ssi.
+%    opts -- options for the calls to spqr_function.
+%    nargout_call -- the value of nargout in the calling function
+%    stats_ssp_N -- stats from spqr_ssp applied to A * N
+%    stats_ssp_NT -- stats from spqr_ssp applied to A' * NT
+%    start_tic -- tic time for start of calling routine
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+get_details = opts.get_details ;
+
+%-------------------------------------------------------------------------------
+% determine flag which indicates accuracy of the estimated numerical rank
+%-------------------------------------------------------------------------------
+
+if (  ( nsvals_small == 0 || ...
+        est_sval_upper_bounds(nsvals_large+1) <= tol ) ) && ...
+       ( nsvals_large > 0 && est_sval_lower_bounds(nsvals_large) > tol )
+    % numerical rank is correct, assuming estimated error bounds are correct
+    flag = 0;
+elseif ( nsvals_small > 0 && nsvals_large > 0 ) && ...
+       ( est_sval_lower_bounds(nsvals_large) > ...
+             est_sval_upper_bounds(nsvals_large + 1) && ...
+             est_sval_upper_bounds(nsvals_large + 1) > tol )
+    % in this case, assuming that the estimated error bounds are correct,
+    % then the numerical rank is correct with a modified tolerance
+    flag = 1;
+    stats.tol_alt = est_sval_upper_bounds(nsvals_large + 1);
+    % Note: satisfactory values of tol_alt are in the range
+    %    est_sval_lower_bounds(nsvals_large) > tol_alt
+    %    >= est_sval_upper_bounds(nsvals_large + 1)
+elseif stats_ssi.flag == 3
+    % in this case ssi failed and it is often the case that then
+    % calculated numerical rank is too high
+    flag = 3;
+else
+    % in this case, assuming that the estimated error bounds are correct,
+    % the errors in the error bounds are too large to determine the
+    % numerical rank
+    flag = 2;
+end
+
+
+%-------------------------------------------------------------------------------
+% return statistics
+%-------------------------------------------------------------------------------
+
+stats.flag = flag ;
+stats.rank = numerical_rank ;
+stats.est_sval_upper_bounds = est_sval_upper_bounds;
+stats.est_sval_lower_bounds = est_sval_lower_bounds;
+stats.sval_numbers_for_bounds = ...
+    numerical_rank - nsvals_large + 1 : ...
+    numerical_rank + nsvals_small ;
+
+if call_from == 2
+    if ( get_details == 1 || nargout_call >= 3 )
+        stats.est_norm_A_times_N = stats_ssp_N.est_svals(1);
+    end
+    if (get_details == 1)
+        stats.est_err_bound_norm_A_times_N = stats_ssp_N.est_error_bounds(1);
+    end
+end
+
+
+if ( ( call_from == 1 && nargout_call == 3 ) || ...
+        ( call_from == 2 && nargout_call == 4 ) )
+    % include estimated norm of A transpose time NT from call to ssp
+    stats.est_norm_A_transpose_times_NT = stats_ssp_NT.est_svals(1);
+    if get_details == 1
+        stats.est_err_bound_norm_A_transpose_times_NT = ...
+           stats_ssp_NT.est_error_bounds(1);
+    end
+end
+
+if stats.tol_alt == -1
+    stats = rmfield(stats, 'tol_alt') ;
+end
+
+if get_details == 1
+    % order the fields of stats in a convenient order (the fields when
+    %    get_details is 0 or 2 are already in a good order)
+    stats = spqr_rank_order_fields(stats);
+end
+
+if (get_details == 1)
+    stats.time = toc (start_tic) ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_rank_deflation.m b/MATLAB_Tools/spqr_rank/private/spqr_rank_deflation.m
new file mode 100644
index 0000000..6aef943
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_rank_deflation.m
@@ -0,0 +1,95 @@
+function [ x ] = ...
+    spqr_rank_deflation(call_from, R, U, V, C, m, n, rank_spqr, ...
+    numerical_rank, nsvals_large, opts, p1, p2, N, Q1, Q2)
+%SPQR_RANK_DEFLATION constructs pseudoinverse or basic solution using deflation.
+%
+% Called from spqr_basic and spqr_cod after these routines call spqr,
+% spqr_rank_ssi and spqr_rank_form_basis.  The input parameters are as used
+% in spqr_basic and spqr_cod.
+% The parameter call_from indicates the type of call:
+%      call_from = 1 indicates a call from spqr_basic
+%      call_from = 2 indicates a call from spqr_cod
+% Output:
+%   x -- for call_from = 1 x is a basic solution to
+%                 min || b - A * x ||.               (1)
+%        The basic solution has n - (rank returned by spqr) zero components.
+%        For call_from = 2 x is an approximate pseudoinverse solution to (1).
+% Not user-callable.
+
+% Algorithm:   R * wh = ch or R' * wh = ch is solved where ch is described
+%              in the code and R comes from the QR factorizations in
+%              spqr_basic or spqr_cod. R is triangular and potentially
+%              numerically singular with left and right singular vectors for
+%              small singular values stored in U and V.  When R is numerically
+%              singular deflation (see SIAM SISC, 11:519-530, 1990) to
+%              calculate an approximate truncated singular value solution to
+%              the triangular system.  Orthogonal transformations
+%              are applied to wh to obtain the solutions x to (1).
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% disable nearly-singular matrix warnings, and save the current state
+warning_state = warning ('off', 'MATLAB:nearlySingularMatrix') ;
+
+start_with_A_transpose = opts.start_with_A_transpose ;
+implicit_null_space_basis = opts.implicit_null_space_basis ;
+
+if (isempty (C))
+
+    x = zeros (m,0) ;
+
+elseif (start_with_A_transpose || call_from == 1)
+
+    ch = C(1:rank_spqr,:);
+    if numerical_rank == rank_spqr
+        wh = R \ ch ;
+    else
+        % use deflation (see SIAM SISC, 11:519-530, 1990) to calculate an
+        % approximate truncated singular value solution to R * wh = ch
+        U = U(:,nsvals_large+1:end);
+        wh = ch - U*(U'*ch);
+        wh = R \ wh ;
+        V = V(:,nsvals_large+1:end);
+        wh = wh - V*(V'*wh);
+    end
+    if call_from == 2
+        wh(p2,:)=wh;
+    end
+    wh = [wh ; zeros(n - rank_spqr,size(C,2)) ];
+    if call_from == 1
+        x(p1,:)=wh;
+    else
+        if implicit_null_space_basis
+           x = spqr_qmult(N.Q,wh,1);
+        else
+           x = spqr_qmult(Q1,wh,1);
+        end
+    end
+
+else
+
+    ch = C(p2,:);
+    if numerical_rank == rank_spqr
+        wh = ( ch' / R )' ;    % wh = R' \ ch rewritten to save memory
+    else
+        % use deflation (see SIAM SISC, 11:519-530, 1990) to calculate an
+        % approximate truncated singular value solution to R' * wh = ch
+        V = V(:,nsvals_large+1:end);
+        wh = ch - V*(V'*ch);
+        wh = ( wh' / R )' ;    % wh = R' \ ch rewritten to save memory
+        U = U(:,nsvals_large+1:end);
+        wh = wh - U*(U'*wh);
+    end
+    wh = [wh ; zeros(n - rank_spqr,size(C,2)) ];
+    if implicit_null_space_basis
+       wh = spqr_qmult(N.Q,wh,1);
+    else
+       wh = spqr_qmult(Q2,wh,1);
+    end
+    x(p1,:)=wh;
+
+end
+
+% restore the warning back to what it was
+warning (warning_state) ;
+
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_rank_form_basis.m b/MATLAB_Tools/spqr_rank/private/spqr_rank_form_basis.m
new file mode 100644
index 0000000..f6f2657
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_rank_form_basis.m
@@ -0,0 +1,235 @@
+function [N, stats, stats_ssp, est_sval_upper_bounds] = ...
+    spqr_rank_form_basis(call_from, A, U, V ,Q1, rank_spqr, numerical_rank, ...
+    stats, opts, est_sval_upper_bounds, nsvals_small, nsvals_large,  p1, Q2, p2)
+%SPQR_RANK_FORM_BASIS forms the basis for the null space of a matrix.
+%
+% Called from spqr_basic and spqr_cod after these routines call spqr and
+% spqr_rank_ssi.  The input parameters are as used in spqr_basic and spqr_cod.
+% The parameter call_from indicates the type of call:
+%      call_from = 1 -- a call from spqr_basic, form null space basis for A'
+%      call_from = 2 -- a call from spqr_cod, form null space basis for A
+%      call_from = 3 -- a call from spqr_cod, form null space basis for A'
+% Output:
+%   N -- basis for the null space in implicit or explicit form as required
+%      by opts
+%   stats -- an update of the stats vector in spqr_basic or spqr_cod
+%   stats_ssp -- information about the call to spqr_ssp
+%   est_sval_upper_bounds -- an update to the estimated singular value upper
+%      bounds
+% Not user-callable.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+get_details = opts.get_details ;
+implicit_null_space_basis = opts.implicit_null_space_basis ;
+start_with_A_transpose = opts.start_with_A_transpose ;
+if (get_details == 1)
+    t = tic ;
+end
+[m , n] = size(A);
+nullity_R11 = rank_spqr - numerical_rank;
+
+%-------------------------------------------------------------------------------
+% form X which contains basis for null space of trapezoidal matrix
+%-------------------------------------------------------------------------------
+
+if call_from == 1    % call from spqr_basic (for null space basis for A')
+    if nullity_R11 == 0
+        X = [sparse(rank_spqr, m-rank_spqr) ; ...
+             speye(m-rank_spqr, m-rank_spqr)];
+    else
+        X = [ [sparse(U(:, end-nullity_R11+1:end)) ; ...
+             sparse(m-rank_spqr, nullity_R11) ], ...
+             [ sparse(rank_spqr, m-rank_spqr) ; ...
+             speye(m-rank_spqr, m-rank_spqr)]];
+    end
+elseif call_from == 2    % call from spqr_cod (for null space basis of A)
+    if nullity_R11 == 0
+        X = [sparse(rank_spqr, n-rank_spqr) ; ...
+             speye(n-rank_spqr, n-rank_spqr)];
+    else
+        if (start_with_A_transpose)
+            X = [ [sparse(V(:, end-nullity_R11+1:end)) ; ...
+                 sparse(n-rank_spqr, nullity_R11) ], ...
+                 [ sparse(rank_spqr, n-rank_spqr) ; ...
+                 speye(n-rank_spqr, n-rank_spqr)]];
+        else
+            X = [ [sparse(U(:, end-nullity_R11+1:end)) ; ...
+                 sparse(n-rank_spqr, nullity_R11) ], ...
+                 [ sparse(rank_spqr, n-rank_spqr) ; ...
+                 speye(n-rank_spqr, n-rank_spqr)]];
+        end
+    end
+elseif call_from == 3  % call from spqr_cod (for null space basis for A')
+    if nullity_R11 == 0
+        X = [sparse(rank_spqr, m-rank_spqr) ; ...
+          speye(m-rank_spqr, m-rank_spqr)];
+    else
+        if (start_with_A_transpose)
+            X = [ [sparse(U(:, end-nullity_R11+1:end)) ; ...
+              sparse(m-rank_spqr, nullity_R11) ], ...
+              [ sparse(rank_spqr, m-rank_spqr) ; ...
+              speye(m-rank_spqr, m-rank_spqr)]];
+        else
+            X = [ [sparse(V(:, end-nullity_R11+1:end)) ; ...
+              sparse(m-rank_spqr, nullity_R11) ], ...
+              [ sparse(rank_spqr, m-rank_spqr) ; ...
+              speye(m-rank_spqr, m-rank_spqr)]];
+        end
+    end
+end
+
+%-------------------------------------------------------------------------------
+% form null space basis for A or A' using X and Q from QR factorization
+%-------------------------------------------------------------------------------
+
+if call_from == 1    % call from spqr_basic (for null space basis for A')
+
+    if implicit_null_space_basis
+        % store null space in implicit form (store Q and X in N = Q*X)
+        N.Q = Q1;
+        N.X = X;
+        N.kind = 'Q*X' ;
+    else
+        % store null space in explicit form
+        N = spqr_qmult(Q1,X,1);
+    end
+
+ elseif call_from == 2    % call from spqr_cod (for null space basis of A)
+
+    if implicit_null_space_basis
+        % store null space basis in implicit form
+        if (start_with_A_transpose)
+            % store P, Q and X in N = Q*P*X
+            p = 1:n;
+            p(p2) = 1:length(p2);
+            N.Q = Q1;
+            N.P = p;    % a permutation vector
+            N.X = X;
+            N.kind = 'Q*P*X' ;
+        else
+            % store P, Q and X in N = P*Q*X
+            p(p1) = 1:length(p1);
+            N.P = p;    % a permutation vector
+            N.Q = Q2;
+            N.X = X;
+            N.kind = 'P*Q*X' ;
+        end
+    else
+        % store null space basis as an explicit matrix
+        if (start_with_A_transpose)
+            p = 1:n;
+            p(p2) = 1:length(p2);
+            N = spqr_qmult(Q1,X(p,:),1);
+        else
+            N = spqr_qmult(Q2,X,1);
+            p(p1) = 1:length(p1);
+            N = N(p,:);
+        end
+    end
+
+elseif call_from == 3  % call from spqr_cod (for null space basis for A')
+
+    p = 1:m;
+    if (start_with_A_transpose)
+        p(p1) = 1:length(p1);
+    else
+        p(p2) = 1:length(p2);
+    end
+
+    if implicit_null_space_basis
+        % store null space basis in implicit form
+        if (start_with_A_transpose)
+            %          (store P, Q and X in N = P*Q*X)
+            N.P = p;    % a permutation vector
+            N.Q = Q2;
+            N.X = X;
+            N.kind = 'P*Q*X' ;
+        else
+            %       (store P, Q and X in N = Q*P*X)
+            N.Q = Q1;
+            N.P = p;    % a permutation vector
+            N.X = X;
+            N.kind = 'Q*P*X' ;
+        end
+    else
+        % store null space explicitly forming Q*P*X;
+        if (start_with_A_transpose)
+            N = spqr_qmult(Q2,X,1);
+            N = N(p,:) ;
+        else
+            N = spqr_qmult(Q1,X(p,:),1);
+        end
+    end
+end
+
+if (get_details == 1)
+    stats.time_basis = toc (t) ;
+end
+
+%-------------------------------------------------------------------------------
+% call spqr_ssp to enhance, potentially, est_sval_upper_bounds, the estimated
+%    upper bounds on the singular values
+% and / or
+%    to estimate ||A * N || or || A' * N ||
+%-------------------------------------------------------------------------------
+
+% Note: nullity = m - numerical_rank;   % the number of columns in X and N
+
+if call_from == 1    % call from spqr_basic (for null space basis for A')
+
+    % Note: opts.k is not the same as k in the algorithm description above.
+
+    % Note that, by the interleave theorem for singular values, for
+    % i=1:nullity, singular value i of A'*N will be an upper bound on singular
+    % value numerical_rank + i of A.  S(i,i) is an estimate of singular value i
+    % of A'*N with an estimated accuracy of stats_ssp.est_error_bounds(i).
+    % Therefore let
+
+    [s_ssp,stats_ssp] = spqr_ssp (A', N, max (nsvals_small, opts.k), opts) ;
+
+ elseif call_from == 2    % call from spqr_cod (for null space basis of A)
+
+    % Note that, by the interleave theorem for singular
+    % values, for i = 1, ..., nullity, singular value i of A*N will be
+    % an upper bound on singular value numerical_rank + i of A.
+    % S(i,i) is an estimate of singular value i of A*N with an estimated
+    % accuracy of stats_ssp.est_error_bounds(i).  Therefore let
+
+    [s_ssp,stats_ssp] = spqr_ssp (A, N, max (nsvals_small, opts.k), opts) ;
+
+end
+
+if call_from == 1 || call_from == 2 % call from spqr_basic (for null space
+               %  basis for A') or from spqr_cod (for null space basis of A)
+
+    % By the comments prior to the call to spqr_ssp we have
+    % s_ssp + stats_ssp.est_error_bounds are estimated upper bounds
+    % for singular values (numerical_rank+1):(numerical_rank+nsvals_small)
+    % of A.  We have two estimates for upper bounds on these singular
+    % values of A.  Choose the smaller of the two:
+    if ( nsvals_small > 0 )
+        est_sval_upper_bounds(nsvals_large+1:end) = ...
+            min( est_sval_upper_bounds(nsvals_large+1:end) , ...
+               s_ssp(1:nsvals_small)' + ...
+               stats_ssp.est_error_bounds(1:nsvals_small) );
+    end
+
+elseif call_from == 3  % call from spqr_cod (for null space basis for A')
+
+    % call ssp to estimate nsvals_small sing. values of A' * N
+    %    (useful to estimate the norm of A' * N)
+    [ignore,stats_ssp] = spqr_ssp (A', N, nsvals_small, opts) ;             %#ok
+    clear ignore
+
+end
+
+if (get_details == 1)
+    if call_from == 1 || call_from == 3
+        stats.stats_ssp_NT = stats_ssp ;
+    elseif call_from == 2
+        stats.stats_ssp_N = stats_ssp ;
+    end
+    stats.time_svd = stats.time_svd + stats_ssp.time_svd ;
+end
+end
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_rank_get_inputs.m b/MATLAB_Tools/spqr_rank/private/spqr_rank_get_inputs.m
new file mode 100644
index 0000000..32b5b0c
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_rank_get_inputs.m
@@ -0,0 +1,325 @@
+function [B,opts,stats,start_tic,ok] = spqr_rank_get_inputs (A,method,varargin)
+%SPQR_RANK_GET_INPUTS get the inputs and set the default options.
+% Not user-callable.  Handles the following input syntaxes for functions in
+% the spqr_rank toolbox:
+%
+%   method = 0: spqr_null, spqr_ssi
+%       [ ] = f (A)             % B is [ ], opts empty
+%       [ ] = f (A, [ ])        % B is [ ], opts empty
+%       [ ] = f (A, opts)       % B is [ ]
+%
+%   method = 1: spqr_basic, spqr_cod, spqr_pinv
+%       [ ] = f (A)             % B is [ ], opts empty
+%       [ ] = f (A, [ ])        % B is [ ], opts empty
+%       [ ] = f (A, B)          %           opts empty
+%       [ ] = f (A, B, [ ])     %           opts empty
+%       [ ] = f (A, B, opts)    %
+%       [ ] = f (A, B, tol)     %           opts.tol
+%
+%   method = 2: spqr_ssp
+%       [ ] = f (A)             % N is [ ], k is 1, opts empty
+%       [ ] = f (A, [ ])        % N is [ ], k is 1, opts empty
+%       [ ] = f (A, k)          % N is [ ],         opts empty
+%       [ ] = f (A, N)          %           k is 1, opts empty
+%       [ ] = f (A, N, [ ])     %           k is 1, opts empty
+%       [ ] = f (A, N, opts)    %           k is 1
+%       [ ] = f (A, N, k)       %                   opts empty
+%       [ ] = f (A, N, k, opts) %
+%
+%   method = 3: spqr_rank_opts, return opts for spqr_basic
+%       [ ] = f (A, opts)       % B is [ ]
+%
+% The return values of this function are, in order:
+%
+%       B           the right-hand side, or N for spqr_ssp.  B = [ ] if not
+%                   present.
+%       opts        the opts struct (see below)
+%       stats       a struct (stats.flag, and optionally stats.time_normest)
+%       start_tic   empty, or the beginning tic if opts.get_vals > 1
+%       ok          true if successful, false if inputs are invalid
+%
+% The opts struct is populated with default values, if not present on input.
+%
+% Note that the defaults are different for spqr_ssp than for the other
+% functions.
+
+% Copyright 2012, Leslie Foster and Timothy A. Davis
+
+B = [ ] ;
+opts = struct ;
+stats = struct ;
+start_tic = [ ] ;
+ok = 1 ;
+
+args = nargin - 1 ;     % # of input arguments to spqr_function
+
+if (args == 1)
+
+    % usage: [ ] = spqr_function (A)
+
+elseif (args == 2)
+
+    lastarg = varargin {1} ;
+    is_null_basis_struct = ...
+        isstruct(lastarg) && isfield(lastarg,'Q') && isfield(lastarg,'X') ;
+    if ( isstruct(lastarg) && ~is_null_basis_struct )
+        % usage: [ ] = spqr_function (A, opts)
+        opts = lastarg;
+        % since lastarg is a structure but not an implicit null space basis
+    elseif (isempty (lastarg))
+        % usage: [ ] = spqr_function (A, [ ])
+    elseif (isreal (lastarg) && length (lastarg) == 1)
+        % usage: [ ] = spqr_function (A, k)
+        opts.k = round (lastarg) ;
+    else
+        % usage: [ ] = spqr_function (A, B)
+        B = lastarg ;
+    end
+
+elseif (args == 3 && (method == 1 || method == 2))
+
+    B = varargin {1} ;
+    lastarg = varargin {2} ;
+    if (isstruct (lastarg))
+        % usage: [ ] = spqr_function (A, B, opts)
+        opts = lastarg ;
+    elseif (isempty (lastarg))
+        % usage: [ ] = spqr_function (A, B, [ ])
+    elseif (isreal (lastarg) && length (lastarg) == 1)
+        if (method == 1)
+            % usage: [ ] = spqr_function (A, B, tol)
+            opts.tol = lastarg ;
+        else
+            % usage: [ ] = spqr_function (A, B, k)
+            opts.k = round (lastarg) ;
+        end
+    else
+        % invalid usage: last argument invalid
+        ok = 0 ;
+    end
+
+elseif (args == 4 && method == 2)
+
+    % usage: [ ] = spqr_ssp (A, N, k, opts)
+    B = varargin {1} ;
+    opts = varargin {3} ;
+    opts.k = round (varargin {2}) ;
+
+else
+
+    % invalid usage: too few or too many arguments
+    ok = 0 ;
+
+end
+
+%-------------------------------------------------------------------------------
+% check B
+%-------------------------------------------------------------------------------
+
+[m,n] = size (A) ;
+if (method == 1)
+    if (isempty (B))
+        B = zeros (m,0) ;
+    elseif (size (B,1) ~= m)
+        error ('A and B must have the same number of rows') ;
+    end
+end
+
+if ~ok
+    return
+end
+
+%-------------------------------------------------------------------------------
+% options for all functions
+%-------------------------------------------------------------------------------
+
+if ~isfield (opts, 'get_details')
+    % 0: basic statistics (the default)
+    % 1: detailed statistics:  basic stats, plus input options, time taken by
+    %   various phases, statistics from spqr and spqr_rank subfunctions called,
+    %   and other details.  Normally of interest only to the developers.
+    % 2: basic statistics and a few additional statistics.  Used internally
+    %    by some routines to pass needed information.
+    opts.get_details = 0 ;
+end
+
+if (opts.get_details == 1)
+    start_tic = tic ;
+end
+
+if ~isfield (opts, 'repeatable')
+    % by default, results are repeatable
+    opts.repeatable = 1 ;
+end
+
+% spqr_pinv uses all opts
+
+%-------------------------------------------------------------------------------
+% options for spqr_basic, spqr_cod, and spqr_ssi
+%-------------------------------------------------------------------------------
+
+if (~isfield (opts, 'tol'))
+    % a negative number means the default tolerance should be computed
+    opts.tol = 'default' ;
+end
+
+if (~isfield (opts, 'tol_norm_type'))
+    % 1: use norm (A,1) to compute the default tol
+    % 2: use normest (A, 0.01).  This is the default.
+    opts.tol_norm_type = 2 ;
+end
+
+if (method < 2 && tol_is_default (opts.tol))
+    % compute the default tolerance, but not for spqr_ssp, which doesn't need it
+    if (opts.tol_norm_type == 1)
+        normest_A = norm (A,1) ;
+    else
+        % this is the default
+        normest_A = normest(A,0.01);
+    end
+    opts.tol = max(m,n)*eps(normest_A) ;
+end
+
+if (~isfield (opts, 'nsvals_large'))
+    % default number of large singular values to estimate
+    opts.nsvals_large = 1 ;
+end
+
+%-------------------------------------------------------------------------------
+% options for spqr_basic, spqr_null, spqr_cod, and spqr
+%-------------------------------------------------------------------------------
+
+if (~isfield (opts, 'nsvals_small'))
+    % default number of small singular values to estimate
+    opts.nsvals_small = 1 ;
+end
+
+if (~isfield (opts, 'implicit_null_space_basis'))
+    opts.implicit_null_space_basis = 1 ;
+end
+
+%-------------------------------------------------------------------------------
+% options for spqr_cod (only)
+%-------------------------------------------------------------------------------
+
+if (~isfield (opts, 'start_with_A_transpose'))
+    opts.start_with_A_transpose = 0 ;
+end
+
+%-------------------------------------------------------------------------------
+% options for spqr_ssi (called by spqr_basic, spqr_null, spqr_cod and spqr_pinv)
+%-------------------------------------------------------------------------------
+
+if (~isfield (opts, 'ssi_tol'))
+    opts.ssi_tol = 'default' ;
+end
+
+if (method < 2 && tol_is_default (opts.ssi_tol))
+    % default tolerance for spqr_ssi is the same as spqr_basic, spqr_cod,
+    % spqr_pinv
+    opts.ssi_tol = opts.tol ;
+end
+
+if (~isfield (opts, 'ssi_min_block'))
+    opts.ssi_min_block = 3 ;
+end
+
+if (~isfield (opts, 'ssi_max_block'))
+    opts.ssi_max_block = 10 ;
+end
+
+if (~isfield (opts, 'ssi_min_iters'))
+    opts.ssi_min_iters = 3 ;
+end
+
+if (~isfield (opts, 'ssi_max_iters'))
+    opts.ssi_max_iters = 100 ;
+end
+
+if (~isfield (opts, 'ssi_nblock_increment'))
+    opts.ssi_nblock_increment = 5 ;
+end
+
+if (~isfield (opts, 'ssi_convergence_factor'))
+    opts.ssi_convergence_factor = 0.1 ;     % also 0.25 is often safe
+end
+
+%-------------------------------------------------------------------------------
+% options for spqr_ssi (called by spqr_basic, spqr_null, spqr_cod and spqr_pinv)
+%-------------------------------------------------------------------------------
+
+if (~isfield (opts, 'k'))
+    % number of singular values to compute
+    opts.k = 1 ;
+end
+
+if (~isfield (opts, 'ssp_min_iters'))
+    opts.ssp_min_iters = 4 ;
+end
+
+if (~isfield (opts, 'ssp_max_iters'))
+    opts.ssp_max_iters = 10 ;
+end
+
+if (~isfield (opts, 'ssp_convergence_factor'))
+    opts.ssp_convergence_factor = 0.1 ;
+end
+
+%-------------------------------------------------------------------------------
+% initialize stats
+%-------------------------------------------------------------------------------
+
+% initialize the order of stats, as much as possible
+stats.flag = -1 ;       % -1 means 'not yet computed'
+if method <= 1
+   stats.rank = -1 ;   % -1 means not computed
+end
+if method == 0
+    if ( opts.get_details == 1 && exist('normest_A','var')  )
+        stats.normest_A = normest_A;
+    end
+end
+% for spqr_null and spqr_ssi (method = 0) additional fields initialized
+%      in spqr_null or spqr_ssi
+if method == 1
+    % spqr_basic, spqr_cod, spqr_pinv, initialize stats fields in common to all
+    if opts.get_details == 2 ;
+        stats.rank_spqr = -1 ;
+    end
+    stats.tol = opts.tol ;
+    if ( opts.get_details == 1 && exist('normest_A','var')  )
+        stats.normest_A = normest_A;
+    end
+    stats.tol_alt = -1 ;   % removed later if remains -1
+    stats.est_sval_upper_bounds = -1 ;
+    stats.est_sval_lower_bounds = -1 ;
+    stats.sval_numbers_for_bounds = -1 ;
+    % for spqr_basic, spqr_cod and spqr_pinv additional fields initialized
+    %     in spqr_basic, spqr_cod or spqr_ssi
+end
+if method == 2
+    % for spqr_ssp initialize order for all stats fields
+    stats.est_svals = -1 ;   % -1 means not yet computed
+    stats.est_error_bounds = -1 ;
+    stats.sval_numbers_for_bounds = -1 ;
+    if (opts.get_details == 1)
+        stats.iters = 0 ;
+        stats.opts_used = opts ;
+        stats.time = 0 ;
+        stats.time_initialize = 0 ;
+        stats.time_iters = 0 ;
+        stats.time_est_error_bounds = 0 ;
+        stats.time_svd = 0 ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% return timings
+%-------------------------------------------------------------------------------
+
+if (opts.get_details == 1)
+    % get the total time to initializations including to computing
+    % normest(A,0.01), if called
+    stats.time_initialize = toc (start_tic) ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_rank_order_fields.m b/MATLAB_Tools/spqr_rank/private/spqr_rank_order_fields.m
new file mode 100644
index 0000000..d05997b
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_rank_order_fields.m
@@ -0,0 +1,55 @@
+function stats = spqr_rank_order_fields ( stats )
+%SPQR_RANK_ORDER_FIELDS orders the fields of stats in a convenient order.
+% Not user-callable.
+% Usage:  stats = sqpr_rank_remove_fields (stats)
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% create stats0 which has the desired order for all potential fields
+stats0 = struct( ...
+    'flag',[], ...
+    'rank',[],...
+    'rank_spqr',[], ...
+    'tol',[],...
+    'tol_alt',[], ...
+    'normest_A',[],...
+    'normest_R',[],...
+    'est_sval_upper_bounds',[], ...
+    'est_sval_lower_bounds',[],...
+    'est_svals_of_R',[], ...
+    'est_svals',[],...
+    'est_error_bounds',[],...
+    'sval_numbers_for_bounds',[], ...
+    'est_norm_A_times_N',[],...
+    'est_err_bound_norm_A_times_N',[], ...
+    'est_norm_A_transpose_times_NT',[],...
+    'est_err_bound_norm_A_transpose_times_NT',[],...
+    'norm_R_times_N',[], ...
+    'norm_R_transpose_times_NT',[],...
+    'iters',[], ...
+    'nsvals_large_found',[],...
+    'final_blocksize',[]',...
+    'ssi_max_block_used',[], ...
+    'ssi_min_block_used',[],...
+    'stats_spqr_basic',[], ...
+    'stats_spqr_null',[],...
+    'info_spqr1',[], ...
+    'info_spqr2',[],...
+    'stats_ssi',[], ...
+    'stats_ssp_N',[], ...
+    'stats_ssp_NT',[],...
+    'opts_used',[], ...
+    'time',[],...
+    'time_initialize',[], ...
+    'time_basis',[], ...
+    'time_iters',[],...
+    'time_est_error_bounds',[], ...
+    'time_svd',[]...
+    );
+
+% MATLAB's orderfields(stats,stats0) requires that stats and stats0 have the
+%   same fields. The following command requires that the set of fields of
+%   stats is a subset of the set of fields of stats0.
+stats = orderfields( stats, ...
+    rmfield( stats0 , setdiff( fieldnames(stats0), fieldnames(stats) ) ) ) ;
+
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_repeatable.m b/MATLAB_Tools/spqr_rank/private/spqr_repeatable.m
new file mode 100644
index 0000000..8665df5
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_repeatable.m
@@ -0,0 +1,29 @@
+function private_stream = spqr_repeatable (seed)
+%SPQR_REPEATABLE ensure repeatable results, or use the default random stream.
+% Uses RandStream for repeatable results, which is not available on MATLAB 7.6
+% or earlier (R2008a).  For that version of MATLAB (or earlier), the seed is
+% ignored and the default random stream is always used.
+% Not user-callable.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis
+
+% Since this code is called very often, use 'version', which is perhaps 100
+% times faster than 'verLessThan'.
+v = sscanf (version, '%d.%d.%d') ;
+v = 10.^(0:-1:-(length(v)-1)) * v ;
+
+if (v < 7.7)
+    % MATLAB 7.6 and earlier do not have RandStream, so spqr_rank ignores
+    % the opts.repeatable option and just uses the default random stream.
+    private_stream = [ ] ;
+elseif (seed == 1)
+    % use a new strearm with the default random seed
+    private_stream = RandStream ('mt19937ar') ;
+elseif (seed > 1)
+    % use a new stream with a specific random seed
+    private_stream = RandStream ('mt19937ar', 'seed', seed) ;
+else
+    % do not use the private stream
+    private_stream = [ ] ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/private/spqr_wrapper.m b/MATLAB_Tools/spqr_rank/private/spqr_wrapper.m
new file mode 100644
index 0000000..8d27d01
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/spqr_wrapper.m
@@ -0,0 +1,57 @@
+function [Q,R,C,p,info] = spqr_wrapper (A, B, tol, Q_option, get_details)
+%SPQR_WRAPPER wrapper around spqr to get additional statistics
+%   Not user-callable.  Usage:
+%
+%   [Q,R,C,p,info] = spqr_wrapper (A, B, tol, Q_option, get_details) ;
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+if (get_details)
+    % get detailed statistics for time and memory usage
+    t = tic ;
+end
+
+% set the options
+opts.econ = 0 ;                 % get the rank-sized factorization
+opts.tol = tol ;                % columns with norm <= tol treated as zero
+opts.permutation = 'vector' ;   % return permutation as a vector, not a matrix
+
+if (~issparse (A))
+    A = sparse (A) ;            % make sure A is sparse
+end
+
+m = size (A,1) ;
+
+if (strcmp (Q_option, 'keep Q'))
+
+    % compute Q*R = A(:,p) and keep Q in Householder form
+    opts.Q = 'Householder' ;
+    [Q,R,p,info] = spqr (A, opts) ;
+    if (isempty (B))
+        % C is empty
+        C = zeros (m,0) ;
+    else
+        % also compute C = Q'*B if B is present
+        C = spqr_qmult (Q, B, 0) ;
+    end
+
+else
+
+    % compute Q*R = A(:,p), but discard Q
+    opts.Q = 'discard' ;
+    if (isempty (B))
+        [Q,R,p,info] = spqr (A, opts) ;
+        % C is empty
+        C = zeros (m,0) ;
+    else
+        % also compute C = Q'*B if B is present
+        [C,R,p,info] = spqr (A, B, opts) ;
+        Q = [ ] ;
+    end
+
+end
+
+if (get_details)
+    info.time = toc (t) ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/private/test_spqr_coverage.txt b/MATLAB_Tools/spqr_rank/private/test_spqr_coverage.txt
new file mode 100644
index 0000000..bb4cd03
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/test_spqr_coverage.txt
@@ -0,0 +1,2814 @@
+test_spqr_coverage
+Exhaustive test of spqr_rank functions
+SJget from the SJSU Singular Matrix Database and some of
+its matrices from the database need to be installed
+to run the tests and demos.  This requires about
+2.5 Mbytes of disk space and an internet connection.
+The current MATLAB path will be augmented to include a path
+to access these matrices and the new path will be saved.
+ 
+ 
+downloading http://www.math.sjsu.edu/singular/matrices/mat/SJ_Index.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/SJ_Index.mat
+
+SJSU Singular matrix collection index:  18-Apr-2009 20:02:50
+
+Legend:
+num. rank:    numerical rank 
+struc. rank:  structural rank 
+type:      real
+           complex
+           binary:  all entries are 0 or 1
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+   1 Pajek/CSphd                       1882-by-   1882        705           706  binary
+   2 Pajek/EPA                         4772-by-   4772        951           986  binary
+   3 Pajek/Erdos971                     472-by-    472        413           414  binary
+   4 Pajek/Erdos981                     485-by-    485        427           427  binary
+   5 Pajek/Erdos991                     492-by-    492        435           436  binary
+   6 Gset/G48                          3000-by-   3000       2982          3000  binary
+   7 Gset/G49                          3000-by-   3000       2982          3000  binary
+   8 Gset/G50                          3000-by-   3000       2991          3000  binary
+   9 Gset/G55                          5000-by-   5000       4966          4966  binary
+  10 Gset/G56                          5000-by-   5000       4966          4966  real
+  11 Pajek/GD00_a                       352-by-    352        178           179  binary
+  12 Pajek/GD00_c                       638-by-    638        300           302  real
+  13 Pajek/GD01_a                       311-by-    311        155           158  real
+  14 Pajek/GD01_b                        18-by-     18         17            17  binary
+  15 Pajek/GD01_c                        33-by-     33         25            27  real
+  16 Pajek/GD02_a                        23-by-     23         18            19  binary
+  17 Pajek/GD02_b                        80-by-     80         77            77  binary
+  18 Pajek/GD06_Java                   1538-by-   1538        744           759  binary
+  19 Pajek/GD06_theory                  101-by-    101         20            20  binary
+  20 Pajek/GD95_a                        36-by-     36         31            32  binary
+  21 Pajek/GD95_b                        73-by-     73         34            34  binary
+  22 Pajek/GD96_a                      1096-by-   1096        827           827  real
+  23 Pajek/GD96_b                       111-by-    111         19            20  binary
+  24 Pajek/GD96_c                        65-by-     65         63            64  binary
+  25 Pajek/GD96_d                       180-by-    180         73            73  binary
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+  26 Pajek/GD97_a                        84-by-     84         80            84  binary
+  27 Pajek/GD97_b                        47-by-     47         44            44  real
+  28 Pajek/GD97_c                       452-by-    452         63            63  real
+  29 Pajek/GD98_a                        38-by-     38         14            14  binary
+  30 Pajek/GD98_b                       121-by-    121         87            87  binary
+  31 Pajek/GD98_c                       112-by-    112        100           112  binary
+  32 Pajek/GD99_b                        64-by-     64         45            64  real
+  33 Pajek/GD99_c                       105-by-    105         64            64  binary
+  34 Pajek/GlossGT                       72-by-     72         35            35  binary
+  35 MathWorks/Harvard500               500-by-    500        170           233  binary
+  36 Pajek/Kohonen                     4470-by-   4470       1652          1658  binary
+  37 Barabasi/NotreDame_yeast          2114-by-   2114       1263          1273  binary
+  38 Pajek/ODLIS                       2909-by-   2909       1959          1961  real
+  39 Pajek/Ragusa16                      24-by-     24         18            18  real
+  40 Pajek/Ragusa18                      23-by-     23         15            15  real
+  41 Pajek/Roget                       1022-by-   1022        984           986  binary
+  42 Pajek/Sandi_authors                 86-by-     86         72            72  real
+  43 Pajek/SciMet                      3084-by-   3084       1569          1573  real
+  44 Pajek/SmaGri                      1059-by-   1059        511           513  real
+  45 Pajek/SmallW                       396-by-    396         92            93  real
+  46 Pajek/Tina_AskCal                   11-by-     11          9             9  binary
+  47 Pajek/Tina_DisCal                   11-by-     11         10            10  binary
+  48 Pajek/Tina_DisCog                   11-by-     11         10            11  binary
+  49 Pajek/USAir97                      332-by-    332        281           281  real
+  50 Pajek/USpowerGrid                 4941-by-   4941       4348          4366  binary
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+  51 Sandia/adder_dcop_02              1813-by-   1813       1790          1813  real
+  52 HB/ash292                          292-by-    292        289           292  binary
+  53 Grund/b_dyn                       1089-by-   1089       1028          1089  real
+  54 Grund/bayer05                     3268-by-   3268       1666          3268  real
+  55 Grund/bayer06                     3008-by-   3008       1710          3008  real
+  56 Grund/bayer07                     3268-by-   3268       1666          3268  real
+  57 Grund/bayer08                     3008-by-   3008       2563          3008  real
+  58 Grund/bayer09                     3083-by-   3083       2667          3083  real
+  59 HB/bcspwr02                         49-by-     49         48            49  binary
+  60 HB/bcspwr04                        274-by-    274        262           274  binary
+  61 HB/bcspwr05                        443-by-    443        437           443  binary
+  62 HB/bcspwr06                       1454-by-   1454       1446          1454  binary
+  63 HB/bcspwr07                       1612-by-   1612       1601          1612  binary
+  64 HB/bcspwr08                       1624-by-   1624       1613          1624  binary
+  65 HB/bcspwr09                       1723-by-   1723       1712          1723  binary
+  66 HB/bcsstm01                         48-by-     48         24            24  real
+  67 HB/bcsstm03                        112-by-    112         72            72  real
+  68 HB/bcsstm04                        132-by-    132         66            66  real
+  69 HB/bcsstm13                       2003-by-   2003       1241          1241  real
+  70 HB/can_1054                       1054-by-   1054       1031          1054  binary
+  71 HB/can_1072                       1072-by-   1072       1050          1072  binary
+  72 HB/can_144                         144-by-    144         96           144  binary
+  73 HB/can_187                         187-by-    187        184           187  binary
+  74 HB/can_229                         229-by-    229        200           229  binary
+  75 HB/can_256                         256-by-    256        250           256  binary
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+  76 HB/can_268                         268-by-    268        261           268  binary
+  77 HB/can_292                         292-by-    292        272           292  binary
+  78 HB/can_445                         445-by-    445        443           445  binary
+  79 HB/can_61                           61-by-     61         49            61  binary
+  80 HB/can_634                         634-by-    634        586           634  binary
+  81 HB/can_715                         715-by-    715        702           715  binary
+  82 HB/cegb2802                       2802-by-   2802        289          2694  binary
+  83 HB/cegb2919                       2919-by-   2919        444          2859  binary
+  84 HB/cegb3024                       3024-by-   3024       1411          2996  binary
+  85 HB/cegb3306                       3306-by-   3306        537          3222  binary
+  86 Brethour/coater1                  1348-by-   1348       1330          1331  real
+  87 Bai/cryg2500                      2500-by-   2500       2499          2500  real
+  88 Boeing/crystk01                   4875-by-   4875       4869          4875  real
+  89 HB/curtis54                         54-by-     54         50            54  binary
+  90 Bai/dwg961a                        961-by-    961        705           705  complex
+  91 HB/dwt_1005                       1005-by-   1005        995          1005  binary
+  92 HB/dwt_1007                       1007-by-   1007       1000          1007  binary
+  93 HB/dwt_1242                       1242-by-   1242       1178          1242  binary
+  94 HB/dwt_162                         162-by-    162        144           162  binary
+  95 HB/dwt_193                         193-by-    193        136           193  binary
+  96 HB/dwt_198                         198-by-    198        192           198  binary
+  97 HB/dwt_209                         209-by-    209        208           209  binary
+  98 HB/dwt_221                         221-by-    221        220           221  binary
+  99 HB/dwt_245                         245-by-    245        239           245  binary
+ 100 HB/dwt_2680                       2680-by-   2680       2640          2680  binary
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 101 HB/dwt_307                         307-by-    307        288           307  binary
+ 102 HB/dwt_346                         346-by-    346        341           346  binary
+ 103 HB/dwt_361                         361-by-    361        358           361  binary
+ 104 HB/dwt_419                         419-by-    419        370           419  binary
+ 105 HB/dwt_492                         492-by-    492        488           492  binary
+ 106 HB/dwt_503                         503-by-    503        499           503  binary
+ 107 HB/dwt_512                         512-by-    512        477           512  binary
+ 108 HB/dwt_592                         592-by-    592        580           592  binary
+ 109 HB/dwt_607                         607-by-    607        547           607  binary
+ 110 HB/dwt_72                           72-by-     72         70            72  binary
+ 111 HB/dwt_758                         758-by-    758        700           758  binary
+ 112 HB/dwt_869                         869-by-    869        845           869  binary
+ 113 HB/dwt_878                         878-by-    878        850           878  binary
+ 114 HB/dwt_918                         918-by-    918        891           918  binary
+ 115 HB/dwt_992                         992-by-    992        496           992  binary
+ 116 HB/eris1176                       1176-by-   1176        774          1176  binary
+ 117 FIDAP/ex12                        3973-by-   3973       3972          3973  real
+ 118 FIDAP/ex13                        2568-by-   2568       1434          2568  real
+ 119 FIDAP/ex14                        3251-by-   3251       2925          3251  real
+ 120 FIDAP/ex26                        2163-by-   2163       2162          2163  real
+ 121 FIDAP/ex32                        1159-by-   1159       1158          1159  real
+ 122 FIDAP/ex6                         1651-by-   1651       1650          1651  real
+ 123 Pajek/football                      35-by-     35         19            19  real
+ 124 Sandia/fpga_dcop_01               1220-by-   1220       1219          1220  real
+ 125 Sandia/fpga_dcop_02               1220-by-   1220       1219          1220  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 126 Sandia/fpga_dcop_04               1220-by-   1220       1209          1220  real
+ 127 Sandia/fpga_dcop_07               1220-by-   1220       1210          1220  real
+ 128 HB/fs_760_2                        760-by-    760        411           760  real
+ 129 HB/fs_760_3                        760-by-    760        381           760  real
+ 130 Hollinger/g7jac010                2880-by-   2880       2282          2880  real
+ 131 HB/gent113                         113-by-    113        107           113  binary
+ 132 HB/gre_216b                        216-by-    216        215           216  real
+ 133 Meszaros/iprob                    3001-by-   3001       3000          3001  real
+ 134 HB/jgl009                            9-by-      9          5             9  binary
+ 135 HB/jgl011                           11-by-     11          5            11  binary
+ 136 HB/lap_25                           25-by-     25         16            25  binary
+ 137 GHS_indef/laser                   3002-by-   3002       3000          3000  real
+ 138 Mallya/lhr04                      4101-by-   4101       4096          4101  real
+ 139 HB/lns_131                         131-by-    131        125           131  real
+ 140 HB/lns_3937                       3937-by-   3937       2895          3937  real
+ 141 HB/lns_511                         511-by-    511        469           511  real
+ 142 HB/lnsp3937                       3937-by-   3937       2895          3937  real
+ 143 HB/lnsp_131                        131-by-    131        125           131  real
+ 144 HB/lnsp_511                        511-by-    511        469           511  real
+ 145 HB/lock1074                       1074-by-   1074        155          1038  binary
+ 146 HB/lock2232                       2232-by-   2232        368          2208  binary
+ 147 HB/lock3491                       3491-by-   3491        603          3416  binary
+ 148 HB/lock_700                        700-by-    700        165           691  binary
+ 149 HB/mbeacxc                         496-by-    496        448           448  real
+ 150 HB/mbeaflw                         496-by-    496        448           448  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 151 HB/mbeause                         496-by-    496        447           447  real
+ 152 HB/mcca                            180-by-    180        143           180  real
+ 153 HB/mcfe                            765-by-    765        759           765  real
+ 154 Bai/mhd1280a                      1280-by-   1280        963          1280  complex
+ 155 Bai/mhd3200a                      3200-by-   3200       2244          3200  real
+ 156 Bai/mhd4800a                      4800-by-   4800       3302          4800  real
+ 157 Bai/mhd4800b                      4800-by-   4800       4798          4800  real
+ 158 Bai/mhda416                        416-by-    416        322           416  real
+ 159 Boeing/msc01050                   1050-by-   1050       1049          1050  real
+ 160 HB/nnc1374                        1374-by-   1374       1308          1374  real
+ 161 HB/nnc261                          261-by-    261        260           261  real
+ 162 Bai/odepb400                       400-by-    400        399           399  real
+ 163 Sandia/oscil_dcop_06               430-by-    430        426           430  real
+ 164 Sandia/oscil_dcop_07               430-by-    430        426           430  real
+ 165 Sandia/oscil_dcop_08               430-by-    430        428           430  real
+ 166 Sandia/oscil_dcop_17               430-by-    430        427           430  real
+ 167 Sandia/oscil_dcop_18               430-by-    430        427           430  real
+ 168 Sandia/oscil_dcop_19               430-by-    430        427           430  real
+ 169 Sandia/oscil_dcop_20               430-by-    430        427           430  real
+ 170 Sandia/oscil_dcop_21               430-by-    430        427           430  real
+ 171 Sandia/oscil_dcop_22               430-by-    430        427           430  real
+ 172 Sandia/oscil_dcop_23               430-by-    430        426           430  real
+ 173 Sandia/oscil_dcop_24               430-by-    430        425           430  real
+ 174 Sandia/oscil_dcop_25               430-by-    430        427           430  real
+ 175 Sandia/oscil_dcop_26               430-by-    430        427           430  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 176 Sandia/oscil_dcop_27               430-by-    430        427           430  real
+ 177 Sandia/oscil_dcop_28               430-by-    430        425           430  real
+ 178 Sandia/oscil_dcop_29               430-by-    430        425           430  real
+ 179 Sandia/oscil_dcop_30               430-by-    430        423           430  real
+ 180 Sandia/oscil_dcop_31               430-by-    430        423           430  real
+ 181 Sandia/oscil_dcop_32               430-by-    430        422           430  real
+ 182 Sandia/oscil_dcop_33               430-by-    430        422           430  real
+ 183 Sandia/oscil_dcop_34               430-by-    430        420           430  real
+ 184 Sandia/oscil_dcop_35               430-by-    430        418           430  real
+ 185 Sandia/oscil_dcop_36               430-by-    430        415           430  real
+ 186 Sandia/oscil_dcop_37               430-by-    430        413           430  real
+ 187 Sandia/oscil_dcop_38               430-by-    430        412           430  real
+ 188 Sandia/oscil_dcop_39               430-by-    430        411           430  real
+ 189 Sandia/oscil_dcop_40               430-by-    430        411           430  real
+ 190 Sandia/oscil_dcop_41               430-by-    430        410           430  real
+ 191 Sandia/oscil_dcop_42               430-by-    430        410           430  real
+ 192 Sandia/oscil_dcop_43               430-by-    430        410           430  real
+ 193 Sandia/oscil_dcop_44               430-by-    430        410           430  real
+ 194 Sandia/oscil_dcop_45               430-by-    430        410           430  real
+ 195 Sandia/oscil_dcop_46               430-by-    430        410           430  real
+ 196 Sandia/oscil_dcop_47               430-by-    430        410           430  real
+ 197 Sandia/oscil_dcop_48               430-by-    430        410           430  real
+ 198 Sandia/oscil_dcop_49               430-by-    430        410           430  real
+ 199 Sandia/oscil_dcop_50               430-by-    430        410           430  real
+ 200 Sandia/oscil_dcop_51               430-by-    430        410           430  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 201 Sandia/oscil_dcop_52               430-by-    430        410           430  real
+ 202 Sandia/oscil_dcop_53               430-by-    430        410           430  real
+ 203 Sandia/oscil_dcop_54               430-by-    430        410           430  real
+ 204 Sandia/oscil_dcop_55               430-by-    430        410           430  real
+ 205 Sandia/oscil_dcop_56               430-by-    430        410           430  real
+ 206 Sandia/oscil_dcop_57               430-by-    430        410           430  real
+ 207 HB/plat1919                       1919-by-   1919       1916          1919  real
+ 208 HB/plsk1919                       1919-by-   1919       1918          1919  real
+ 209 FEMLAB/problem1                    415-by-    415        414           415  real
+ 210 Bai/qh1484                        1484-by-   1484        708          1484  real
+ 211 Bai/qh768                          768-by-    768        644           768  real
+ 212 Bai/qh882                          882-by-    882        821           882  real
+ 213 Simon/raefsky6                    3402-by-   3402       2586          3402  real
+ 214 Rajat/rajat02                     1960-by-   1960       1508          1960  binary
+ 215 HB/rgg010                           10-by-     10          4            10  binary
+ 216 HB/saylr3                         1000-by-   1000        998          1000  real
+ 217 Shyy/shyy41                       4720-by-   4720       4712          4720  real
+ 218 Pothen/sphere2                      66-by-     66         64            66  binary
+ 219 Pothen/sphere3                     258-by-    258        253           258  binary
+ 220 HB/sstmodel                       3345-by-   3345       3326          3345  binary
+ 221 Oberwolfach/t2dal                 4257-by-   4257       4256          4257  real
+ 222 Oberwolfach/t2dal_a               4257-by-   4257       4256          4257  real
+ 223 Oberwolfach/t2dal_bci             4257-by-   4257       4256          4257  real
+ 224 HB/west0156                        156-by-    156        154           156  real
+ 225 HB/will199                         199-by-    199        191           199  binary
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 226 HB/will57                           57-by-     57         50            57  binary
+ 227 Pajek/yeast                       2361-by-   2361       1644          1659  binary
+ 228 HB/zenios                         2873-by-   2873        265           266  real
+ 229 Regtools/foxgood_100               100-by-    100         23           100  real
+ 230 Regtools/foxgood_200               200-by-    200         26           200  real
+ 231 Regtools/foxgood_500               500-by-    500         29           500  real
+ 232 Regtools/foxgood_1000             1000-by-   1000         30          1000  real
+ 233 Regtools/baart_100                 100-by-    100         12           100  real
+ 234 Regtools/baart_200                 200-by-    200         12           200  real
+ 235 Regtools/baart_500                 500-by-    500         12           500  real
+ 236 Regtools/baart_1000               1000-by-   1000         13          1000  real
+ 237 Regtools/gravity_100               100-by-    100         48           100  real
+ 238 Regtools/gravity_200               200-by-    200         47           200  real
+ 239 Regtools/gravity_500               500-by-    500         46           500  real
+ 240 Regtools/gravity_1000             1000-by-   1000         45          1000  real
+ 241 Regtools/heat_100                  100-by-    100         97           100  real
+ 242 Regtools/heat_200                  200-by-    200        195           200  real
+ 243 Regtools/heat_500                  500-by-    500        492           500  real
+ 244 Regtools/heat_1000                1000-by-   1000        588          1000  real
+ 245 Regtools/i_laplace_100             100-by-    100         28           100  real
+ 246 Regtools/i_laplace_200             200-by-    200         34           193  real
+ 247 Regtools/i_laplace_500             500-by-    500         39           363  real
+ 248 Regtools/i_laplace_1000           1000-by-   1000         43           581  real
+ 249 Regtools/parallax_100               26-by-    100         25            26  real
+ 250 Regtools/parallax_200               26-by-    200         25            26  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 251 Regtools/parallax_500               26-by-    500         24            26  real
+ 252 Regtools/parallax_1000              26-by-   1000         24            26  real
+ 253 Regtools/shaw_100                  100-by-    100         20           100  real
+ 254 Regtools/shaw_200                  200-by-    200         20           200  real
+ 255 Regtools/shaw_500                  500-by-    500         20           500  real
+ 256 Regtools/shaw_1000                1000-by-   1000         20          1000  real
+ 257 Regtools/ursell_100                100-by-    100         98           100  real
+ 258 Regtools/ursell_200                200-by-    200        198           200  real
+ 259 Regtools/ursell_500                500-by-    500        497           500  real
+ 260 Regtools/ursell_1000              1000-by-   1000        999          1000  real
+ 261 Regtools/wing_100                  100-by-    100          8           100  real
+ 262 Regtools/wing_200                  200-by-    200          8           200  real
+ 263 Regtools/wing_500                  500-by-    500          8           500  real
+ 264 Regtools/wing_1000                1000-by-   1000          8          1000  real
+ 265 Regtools/tomo_100                  100-by-    100         98           100  real
+ 266 Regtools/tomo_900                  900-by-    900        893           900  real
+ 267 Regtools/tomo_2500                2500-by-   2500       2496          2500  real
+ 268 Regtools/tomo_4900                4900-by-   4900       4897          4900  real
+ 269 Pajek/Sandi_sandi                  314-by-    360        239           246  binary
+ 270 LPnetlib/lpi_ex73a                 193-by-    211        188           193  real
+ 271 LPnetlib/lpi_ex72a                 197-by-    215        192           197  real
+ 272 LPnetlib/lpi_box1                  231-by-    261        214           231  real
+ 273 LPnetlib/lpi_mondou2               312-by-    604        311           312  real
+ 274 LPnetlib/lp_scorpion               388-by-    466        358           388  real
+ 275 LPnetlib/lpi_cplex2                224-by-    378        223           224  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 276 HB/abb313                          313-by-    176        128           176  binary
+ 277 HB/fs_183_3                        183-by-    183        182           183  real
+ 278 LPnetlib/lp_bore3d                 233-by-    334        231           232  real
+ 279 Muite/Chebyshev1                   261-by-    261        259           261  real
+ 280 Sandia/oscil_dcop_05               430-by-    430        428           430  real
+ 281 Sandia/oscil_dcop_16               430-by-    430        428           430  real
+ 282 LPnetlib/lp_brandy                 220-by-    303        193           193  real
+ 283 LPnetlib/lp_standgub               361-by-   1383        360           360  real
+ 284 Pajek/EVA                         8497-by-   8497       1301          1303  binary
+ 285 Cunningham/m3plates              11107-by-  11107       6639          6639  real
+ 286 LPnetlib/lp_ship04s                402-by-   1506        360           360  real
+ 287 Sandia/fpga_dcop_08               1220-by-   1220       1210          1220  real
+ 288 Sandia/fpga_dcop_05               1220-by-   1220       1206          1220  real
+ 289 Sandia/fpga_dcop_10               1220-by-   1220       1207          1220  real
+ 290 Boeing/bcsstm38                   8032-by-   8032       5112          5199  real
+ 291 Sandia/fpga_dcop_06               1220-by-   1220       1208          1220  real
+ 292 Sandia/fpga_dcop_09               1220-by-   1220       1208          1220  real
+ 293 Sandia/fpga_dcop_12               1220-by-   1220       1219          1220  real
+ 294 Sandia/fpga_dcop_03               1220-by-   1220       1214          1220  real
+ 295 HB/bcsstm24                       3562-by-   3562       3496          3562  real
+ 296 HB/mahindas                       1258-by-   1258       1257          1258  real
+ 297 Pajek/California                  9664-by-   9664       1647          1686  binary
+ 298 LPnetlib/lp_modszk1                687-by-   1620        686           686  real
+ 299 LPnetlib/lp_tuff                   333-by-    628        302           302  real
+ 300 LPnetlib/lp_shell                  536-by-   1777        535           536  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 301 Norris/lung1                      1650-by-   1650       1549          1650  real
+ 302 Pajek/Lederberg                   8843-by-   8843       4170          4179  real
+ 303 LPnetlib/lp_ship04l                402-by-   2166        360           360  real
+ 304 Pajek/Zewail                      6752-by-   6752       4301          4325  real
+ 305 MathWorks/Pd_rhs                  8081-by-  12406       4368          4368  real
+ 306 Pajek/geom                        7343-by-   7343       5499          5517  real
+ 307 LPnetlib/lp_ship12s               1151-by-   2869       1042          1042  real
+ 308 LPnetlib/lp_ship08s                778-by-   2467        712           712  real
+ 309 Zitney/extr1                      2837-by-   2837       2836          2837  real
+ 310 Bai/mhd3200b                      3200-by-   3200       3199          3200  real
+ 311 Meszaros/de063155                  852-by-   1848        841           852  real
+ 312 LPnetlib/lp_degen2                 444-by-    757        442           444  real
+ 313 Boeing/bcsstm35                  30237-by-  30237      15609         15803  real
+ 314 Zitney/extr1b                     2836-by-   2836       2835          2836  real
+ 315 Muite/Chebyshev2                  2053-by-   2053       2051          2053  real
+ 316 LPnetlib/lp_ship08l                778-by-   4363        712           712  real
+ 317 LPnetlib/lp_sierra                1227-by-   2735       1217          1227  real
+ 318 LPnetlib/lp_ken_07                2426-by-   3602       2377          2426  real
+ 319 Gleich/wb-cs-stanford             9914-by-   9914       5475          5782  binary
+ 320 FIDAP/ex33                        1733-by-   1733       1732          1733  real
+ 321 GHS_indef/aug2dc                 30200-by-  30200      20000         20000  real
+ 322 LPnetlib/lp_ship12l               1151-by-   5533       1042          1042  real
+ 323 LPnetlib/lp_bnl1                   643-by-   1586        642           642  real
+ 324 HB/bcspwr10                       5300-by-   5300       5276          5300  binary
+ 325 Nasa/barth                        6691-by-   6691       6690          6691  binary
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 326 GHS_indef/aug2d                  29008-by-  29008      19208         19208  real
+ 327 Rajat/rajat01                     6833-by-   6833       6777          6833  binary
+ 328 Meszaros/model2                    379-by-   1321        377           379  real
+ 329 Zitney/hydr1                      5308-by-   5308       5191          5308  real
+ 330 Zitney/hydr1c                     5308-by-   5308       5191          5308  real
+ 331 Meszaros/de063157                  936-by-   1908        111           936  real
+ 332 Muite/Chebyshev3                  4101-by-   4101       4099          4101  real
+ 333 Nasa/barth4                       6019-by-   6019       6018          6019  binary
+ 334 Bates/Chem97Zt                    2541-by-  31022       2410          2541  binary
+ 335 Grund/bayer03                     6747-by-   6747       5680          6747  real
+ 336 HB/sherman3                       5005-by-   5005       2898          5005  real
+ 337 Schenk_IBMNA/c-30                 5321-by-   5321       5320          5321  real
+ 338 Andrianov/fxm3_6                  5026-by-   5026       4087          5026  binary
+ 339 LPnetlib/lp_25fv47                 821-by-   1876        820           820  real
+ 340 MathWorks/Kaufhold                8765-by-   8765       8759          8765  real
+ 341 Hollinger/g7jac010sc              2880-by-   2880       2878          2880  real
+ 342 GHS_indef/bloweybq               10001-by-  10001       9964         10001  real
+ 343 Boeing/nasa2910                   2910-by-   2910       1623          2910  binary
+ 344 FIDAP/ex9                         3363-by-   3363       3344          3363  real
+ 345 LPnetlib/lp_cre_c                 3068-by-   6411       2981          2986  real
+ 346 Lucifora/cell1                    7055-by-   7055       7054          7055  real
+ 347 Lucifora/cell2                    7055-by-   7055       7054          7055  real
+ 348 LPnetlib/lp_cre_a                 3516-by-   7248       3423          3428  real
+ 349 Mallya/lhr04c                     4101-by-   4101       4100          4101  real
+ 350 Hollinger/jan99jac020             6774-by-   6774       6525          6774  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 351 HB/beacxc                          497-by-    506        449           449  real
+ 352 FIDAP/ex18                        5773-by-   5773       5772          5773  real
+ 353 HB/beause                          497-by-    507        459           459  real
+ 354 Pajek/internet                  124651-by- 124651      66598         66679  real
+ 355 FIDAP/ex23                        1409-by-   1409       1408          1409  real
+ 356 Gaertner/nopoly                  10774-by-  10774      10773         10774  real
+ 357 HB/beaflw                          497-by-    507        460           460  real
+ 358 LPnetlib/lp_wood1p                 244-by-   2595        243           244  real
+ 359 Grund/bayer10                    13436-by-  13436      13309         13436  real
+ 360 LPnetlib/lp_cycle                 1903-by-   3371       1875          1875  real
+ 361 LPnetlib/lp_pds_02                2953-by-   7716       2942          2953  real
+ 362 Pothen/shuttle_eddy              10429-by-  10429       9757         10429  binary
+ 363 Nasa/shuttle_eddy                10429-by-  10429       9757         10429  binary
+ 364 Grund/bayer02                    13935-by-  13935      12610         13935  real
+ 365 Grund/bayer04                    20545-by-  20545      14831         20545  real
+ 366 Rajat/rajat27                    20640-by-  20640      20542         20640  real
+ 367 Mallya/lhr07c                     7337-by-   7337       7336          7337  real
+ 368 Mallya/lhr07                      7337-by-   7337       7315          7337  real
+ 369 Bai/cryg10000                    10000-by-  10000       9999         10000  real
+ 370 Meszaros/model9                   2879-by-  10939       2787          2787  real
+ 371 Meszaros/stormg2-8                4409-by-  11322       4393          4393  real
+ 372 LPnetlib/lpi_greenbea             2393-by-   5596       2390          2390  real
+ 373 Bindel/ted_A                     10605-by-  10605      10604         10605  real
+ 374 Okunbor/aft01                     8205-by-   8205          1          8205  real
+ 375 Mallya/lhr14                     14270-by-  14270      13996         14270  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 376 Boeing/bcsstm36                  23052-by-  23052      12172         12172  real
+ 377 LPnetlib/lp_greenbeb              2392-by-   5598       2389          2389  real
+ 378 Hollinger/g7jac020                5850-by-   5850       4488          5850  real
+ 379 LPnetlib/lp_greenbea              2392-by-   5598       2389          2389  real
+ 380 Hollinger/jan99jac040            13694-by-  13694      13044         13694  real
+ 381 FIDAP/ex19                       12005-by-  12005      11966         12005  real
+ 382 LPnetlib/lp_degen3                1503-by-   2604       1501          1503  real
+ 383 GHS_psdef/ford1                  18728-by-  18728      18194         18728  binary
+ 384 Hollinger/g7jac020sc              5850-by-   5850       5848          5850  real
+ 385 Mallya/lhr10c                    10672-by-  10672      10670         10672  real
+ 386 Andrianov/fxm4_6                 18892-by-  18892      14569         18892  binary
+ 387 Mallya/lhr10                     10672-by-  10672      10602         10672  real
+ 388 Hohn/fd15                        11532-by-  11532      11519         11532  real
+ 389 Mallya/lhr11                     10964-by-  10964      10810         10964  real
+ 390 Boeing/nasa4704                   4704-by-   4704       2264          4704  binary
+ 391 LPnetlib/lpi_gran                 2658-by-   2525       1938          2311  real
+ 392 HB/man_5976                       5976-by-   5976       2341          5882  binary
+ 393 HB/bcsstk23                       3134-by-   3134       3133          3134  real
+ 394 Pothen/skirt                     12598-by-  12598       9831         12598  binary
+ 395 Nasa/skirt                       12598-by-  12598       9831         12598  binary
+ 396 Hohn/fd18                        16428-by-  16428      16356         16428  real
+ 397 Sandia/mult_dcop_01              25187-by-  25187      25165         25187  real
+ 398 GHS_indef/ncvxqp9                16554-by-  16554      14617         16554  real
+ 399 Oberwolfach/t2dah                11445-by-  11445      11444         11445  real
+ 400 Mallya/lhr11c                    10964-by-  10964      10961         10964  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 401 Schenk_IBMNA/c-52                23948-by-  23948          9         23948  real
+ 402 Cunningham/k3plates              11107-by-  11107      11101         11107  real
+ 403 Meszaros/model6                   2096-by-   5289       2094          2094  real
+ 404 Mallya/lhr14c                    14270-by-  14270      14267         14270  real
+ 405 DNVS/trdheim                     22098-by-  22098       2819         22098  binary
+ 406 Rajat/rajat22                    39899-by-  39899      39827         39899  real
+ 407 Hollinger/jan99jac060            20614-by-  20614      19484         20614  real
+ 408 Oberwolfach/t2dah_a              11445-by-  11445      11444         11445  real
+ 409 Mallya/lhr17                     17576-by-  17576      17182         17576  real
+ 410 Mallya/lhr17c                    17576-by-  17576      17572         17576  real
+ 411 Meszaros/nemspmm1                 2372-by-   8903       2362          2362  real
+ 412 Rajat/rajat26                    51032-by-  51032      50853         51032  real
+ 413 Schenk_IBMNA/c-41                 9769-by-   9769       9705          9769  real
+ 414 IBM_EDA/ckt11752_tr_0            49702-by-  49702      49698         49702  real
+ 415 FIDAP/ex35                       19716-by-  19716      19673         19716  real
+ 416 Brethour/coater2                  9540-by-   9540       9426          9434  real
+ 417 GHS_indef/sit100                 10262-by-  10262      10261         10262  real
+ 418 Grund/bayer01                    57735-by-  57735      51609         57735  real
+ 419 Boeing/bcsstk38                   8032-by-   8032       8008          8032  real
+ 420 Andrianov/net25                   9520-by-   9520       9058          9520  binary
+ 421 Gset/G61                          7000-by-   7000       6953          6953  real
+ 422 Gset/G60                          7000-by-   7000       6953          6953  binary
+ 423 HB/bcsstk25                      15439-by-  15439      15435         15439  real
+ 424 Hollinger/mark3jac020             9129-by-   9129       8934          9129  real
+ 425 Sandia/mult_dcop_03              25187-by-  25187      18271         25187  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 426 LPnetlib/lp_d6cube                 415-by-   6184        404           404  real
+ 427 Mallya/lhr34                     35152-by-  35152      34366         35152  real
+ 428 Hollinger/jan99jac100            34454-by-  34454      32490         34454  real
+ 429 Mallya/lhr71                     70304-by-  70304      68728         70304  real
+ 430 Hollinger/mark3jac020sc           9129-by-   9129       9102          9129  real
+ 431 Norris/lung2                    109460-by- 109460      55103        109460  real
+ 432 Schenk_ISEI/igbt3                10938-by-  10938       7592         10938  real
+ 433 VanVelzen/std1_Jac2_db           21982-by-  21982       8940         21982  real
+ 434 Hollinger/jan99jac120            41374-by-  41374      38925         41374  real
+ 435 Schenk_IBMNA/c-56                35910-by-  35910      35904         35910  real
+ 436 Bomhof/circuit_4                 80209-by-  80209      80185         80209  real
+ 437 GHS_indef/stokes64s              12546-by-  12546      12544         12546  real
+ 438 Shyy/shyy161                     76480-by-  76480      76432         76480  real
+ 439 Mallya/lhr34c                    35152-by-  35152      35143         35152  real
+ 440 Hollinger/g7jac040sc             11790-by-  11790      11786         11790  real
+ 441 Schenk_IBMNA/c-67                57975-by-  57975      57348         57975  real
+ 442 Meszaros/model5                   1888-by-  11802       1744          1744  real
+ 443 GHS_indef/stokes64               12546-by-  12546      12544         12546  real
+ 444 IBM_EDA/ckt11752_dc_1            49702-by-  49702      48868         49702  real
+ 445 Rajat/rajat23                   110355-by- 110355     109820        110355  real
+ 446 Meszaros/aa4                       426-by-   7195        367           426  binary
+ 447 VanVelzen/Zd_Jac2_db             22835-by-  22835      22360         22835  real
+ 448 Boeing/bcsstk35                  30237-by-  30237      30231         30237  real
+ 449 Meszaros/air05                     426-by-   7195        367           426  binary
+ 450 Graham/graham1                    9035-by-   9035       8924          9035  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 451 Chen/pkustk02                    10800-by-  10800       1224         10800  binary
+ 452 Hollinger/g7jac050sc             14760-by-  14760      14754         14760  real
+ 453 Meszaros/stormg2-27              14441-by-  37485      14387         14387  real
+ 454 Hollinger/g7jac040               11790-by-  11790       8838         11790  real
+ 455 GHS_indef/aug3dcqp               35543-by-  35543      28387         35543  real
+ 456 Simon/olafu                      16146-by-  16146      16145         16146  real
+ 457 Meszaros/nsir                     4453-by-  10057       4391          4453  real
+ 458 Mallya/lhr71c                    70304-by-  70304      70284         70304  real
+ 459 Hollinger/mark3jac040sc          18289-by-  18289      18223         18289  real
+ 460 Hollinger/g7jac060sc             17730-by-  17730      17724         17730  real
+ 461 Nasa/pwt                         36519-by-  36519      35475         36519  binary
+ 462 GHS_psdef/pwt                    36519-by-  36519      35475         36519  binary
+ 463 Pothen/pwt                       36519-by-  36519      35475         36519  binary
+ 464 DNVS/crplat2                     18010-by-  18010       2912         18010  binary
+ 465 Meszaros/aa6                       646-by-   7292        563           646  binary
+ 466 Pajek/dictionary28               52652-by-  52652      37774         38108  binary
+ 467 DNVS/tsyl201                     20685-by-  20685       2866         20685  binary
+ 468 GHS_psdef/finance256             37376-by-  37376      35822         37376  binary
+ 469 Schenk_IBMNA/c-64                51035-by-  51035      50941         51035  real
+ 470 Boeing/crystk02                  13965-by-  13965      13959         13965  real
+ 471 Boeing/bcsstk36                  23052-by-  23052      23020         23052  real
+ 472 Andrianov/net4-1                 88343-by-  88343      86176         88343  binary
+ 473 Mulvey/pfinan512                 74752-by-  74752      71614         74752  binary
+ 474 Hollinger/mark3jac060sc          27449-by-  27449      27335         27449  real
+ 475 Sandia/ASIC_680ks               682712-by- 682712     583662        682712  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 476 Hollinger/g7jac080sc             23670-by-  23670      23661         23670  real
+ 477 Boeing/bcsstk37                  25503-by-  25503      25395         25503  real
+ 478 Simon/raefsky4                   19779-by-  19779      19771         19779  real
+ 479 Schenk_IBMSDS/2D_27628_bjtcai    27628-by-  27628      18442         27628  real
+ 480 GHS_indef/k1_san                 67759-by-  67759      67758         67758  real
+ 481 GHS_indef/ncvxqp1                12111-by-  12111       7087         12111  real
+ 482 GHS_psdef/ford2                 100196-by- 100196      97892        100196  binary
+ 483 Meszaros/air06                     825-by-   8627        706           822  binary
+ 484 Hollinger/g7jac100sc             29610-by-  29610      29596         29610  real
+ 485 Meszaros/aa3                       825-by-   8627        706           822  binary
+ 486 Chen/pkustk01                    22044-by-  22044       3732         22044  binary
+ 487 GHS_psdef/opt1                   15449-by-  15449       3442         15449  binary
+ 488 Oberwolfach/t3dl                 20360-by-  20360      20359         20360  real
+ 489 Hollinger/mark3jac080sc          36609-by-  36609      36451         36609  real
+ 490 Schenk_IBMNA/c-54                31793-by-  31793      31404         31793  real
+ 491 Hollinger/mark3jac100sc          45769-by-  45769      45571         45769  real
+ 492 GHS_psdef/pds10                  16558-by-  16558      16519         16558  binary
+ 493 VanVelzen/Zd_Jac6_db             22835-by-  22835      22505         22835  real
+ 494 VanVelzen/std1_Jac3_db           21982-by-  21982       8940         21982  real
+ 495 HB/bcsstk33                       8738-by-   8738       3979          8738  binary
+ 496 Hollinger/g7jac120sc             35550-by-  35550      35530         35550  real
+ 497 Goodwin/rim                      22560-by-  22560      22479         22560  real
+ 498 VanVelzen/Zd_Jac3_db             22835-by-  22835      22374         22835  real
+ 499 HB/bcsstk30                      28924-by-  28924       8935         28924  binary
+ 500 Boeing/crystk03                  24696-by-  24696      24690         24696  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 501 Hollinger/mark3jac120sc          54929-by-  54929      54691         54929  real
+ 502 Chen/pkustk09                    33960-by-  33960       5583         33960  binary
+ 503 Sandia/ASIC_320ks               321671-by- 321671      99190        321671  real
+ 504 GHS_psdef/srb1                   54924-by-  54924       9154         54924  binary
+ 505 Hollinger/g7jac180               53370-by-  53370      39522         53370  real
+ 506 GHS_indef/olesnik0               88263-by-  88263      88262         88263  real
+ 507 Meszaros/pf2177                   9728-by-  10178       9662          9728  binary
+ 508 Andrianov/lpl1                   32460-by-  32460      31143         32460  binary
+ 509 HB/bcsstk32                      44609-by-  44609      14152         44609  binary
+ 510 Rothberg/struct3                 53570-by-  53570      41593         53570  binary
+ 511 Chen/pkustk03                    63336-by-  63336       9477         63336  binary
+ 512 LPnetlib/lp_dfl001                6071-by-  12230       6058          6071  real
+ 513 Boeing/pcrystk02                 13965-by-  13965       4624         13965  binary
+ 514 GHS_indef/c-68                   64810-by-  64810      64801         64810  real
+ 515 Meszaros/stormg2-125             66185-by- 172431      65935         65935  real
+ 516 HB/bcsstk31                      35588-by-  35588      16803         35588  binary
+ 517 Schenk_IBMSDS/3D_28984_Tetra     28984-by-  28984        846         28984  real
+ 518 GHS_indef/exdata_1                6001-by-   6001       6000          6001  real
+ 519 Schenk_IBMSDS/2D_54019_highK     54019-by-  54019         45         54019  real
+ 520 Gupta/gupta1                     31802-by-  31802      30782         31802  binary
+ 521 Boeing/pcrystk03                 24696-by-  24696       7301         24696  binary
+ 522 NYPA/Maragal_1                      32-by-     14         10            14  real
+ 523 NYPA/Maragal_2                     555-by-    350        171           220  real
+ 524 NYPA/Maragal_3                    1690-by-    860        613           765  real
+ 525 NYPA/Maragal_4                    1964-by-   1034        801           995  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 526 NYPA/Maragal_5                    4654-by-   3320       2147          2690  real
+ 527 Mancktelow/viscorocks            37762-by-  37762      37752         37762  real
+ 528 Pajek/GD01_A                       953-by-    953        155           158  real
+ 529 Pajek/Erdos972                    5488-by-   5488        882           882  binary
+ 530 Pajek/Erdos982                    5822-by-   5822        908           908  binary
+ 531 Pajek/Erdos992                    6100-by-   6100        922           922  binary
+ 532 Pajek/Erdos02                     6927-by-   6927        938           938  binary
+ 533 Meszaros/aa5                       801-by-   8308        692           800  binary
+ 534 Meszaros/aa03                      825-by-   8627        706           822  binary
+ 535 Meszaros/us04                      163-by-  28016        115           162  binary
+ 536 LPnetlib/lpi_gosh                 3792-by-  13455       3790          3790  real
+ 537 Pereyra/landmark                 71952-by-   2704       2671          2673  real
+ 538 Meszaros/stat96v5                 2307-by-  75779       2305          2305  real
+ 539 TKK/g3rmt3m3                      5357-by-   5357        938          5357  binary
+ 540 JGD_Relat/rel3                      12-by-      5          1             3  real
+ 541 JGD_Relat/relat3                    12-by-      5          1             3  real
+ 542 JGD_Homology/n3c4-b1                15-by-      6          5             6  real
+ 543 JGD_Homology/n3c4-b4                 6-by-     15          5             6  real
+ 544 JGD_Homology/ch3-3-b1               18-by-      9          8             9  real
+ 545 JGD_Homology/klein-b1               30-by-     10          9            10  real
+ 546 JGD_Homology/n3c4-b2                20-by-     15         10            15  real
+ 547 JGD_Homology/n3c4-b3                15-by-     20         10            15  real
+ 548 JGD_Homology/n3c5-b1                45-by-     10          9            10  real
+ 549 JGD_Relat/rel4                      66-by-     12          5            10  real
+ 550 JGD_Relat/relat4                    66-by-     12          5            10  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 551 JGD_Margulies/wheel_3_1             21-by-     25         20            21  binary
+ 552 JGD_Homology/ch4-4-b1               72-by-     16         15            16  real
+ 553 JGD_Homology/n2c6-b1               105-by-     15         14            15  real
+ 554 JGD_Homology/n4c5-b1               105-by-     15         14            15  real
+ 555 JGD_Margulies/wheel_4_1             36-by-     41         32            36  binary
+ 556 JGD_Homology/cis-n4c6-b1           210-by-     21         20            21  real
+ 557 JGD_Homology/n4c6-b1               210-by-     21         20            21  real
+ 558 JGD_Homology/ch5-5-b1              200-by-     25         24            25  real
+ 559 JGD_Margulies/wheel_5_1             57-by-     61         51            57  binary
+ 560 JGD_Homology/n3c5-b2               120-by-     45         36            45  real
+ 561 JGD_Relat/rel5                     340-by-     35         24            33  real
+ 562 JGD_Relat/relat5                   340-by-     35         24            33  real
+ 563 JGD_Homology/mk9-b1                378-by-     36         35            36  real
+ 564 JGD_Homology/ch4-4-b2               96-by-     72         57            72  real
+ 565 JGD_Homology/ch6-6-b1              450-by-     36         35            36  real
+ 566 JGD_Margulies/wheel_6_1             83-by-     85         72            80  binary
+ 567 JGD_Margulies/cat_ears_2_1          85-by-     85         74            82  binary
+ 568 JGD_Homology/ch7-6-b1              630-by-     42         41            42  real
+ 569 JGD_Homology/n3c6-b1               105-by-    105         14            15  real
+ 570 JGD_Homology/mk10-b1               630-by-     45         44            45  real
+ 571 JGD_Margulies/wheel_7_1            114-by-    113         99           107  binary
+ 572 JGD_Margulies/flower_4_1           121-by-    129        108           121  binary
+ 573 JGD_Homology/ch7-7-b1              882-by-     49         48            49  real
+ 574 JGD_Homology/mk11-b1               990-by-     55         54            55  real
+ 575 JGD_Homology/n3c5-b3               210-by-    120         84           120  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 576 JGD_Homology/n3c5-b6               120-by-    210         84           120  real
+ 577 JGD_GL7d/GL7d11                   1019-by-     60         59            60  real
+ 578 JGD_Homology/ch7-8-b1             1176-by-     56         55            56  real
+ 579 JGD_Homology/n2c6-b2               455-by-    105         91           105  real
+ 580 JGD_Homology/n3c6-b2               455-by-    105         91           105  real
+ 581 JGD_Homology/n4c5-b2               455-by-    105         91           105  real
+ 582 JGD_SL6/D_5                        434-by-    115         95           114  real
+ 583 JGD_Homology/ch7-9-b1             1512-by-     63         62            63  real
+ 584 JGD_Homology/ch8-8-b1             1568-by-     64         63            64  real
+ 585 JGD_Homology/mk12-b1              1485-by-     66         65            66  real
+ 586 JGD_Margulies/cat_ears_3_1         204-by-    181        165           175  binary
+ 587 JGD_G5/IG5-8                       156-by-    292        154           156  real
+ 588 JGD_Margulies/flower_5_1           211-by-    201        179           191  binary
+ 589 JGD_GL6/GL6_D_10                   163-by-    341        120           158  real
+ 590 JGD_Homology/n4c5-b10              120-by-    630        110           120  real
+ 591 JGD_Homology/n3c5-b4               252-by-    210        126           210  real
+ 592 JGD_Homology/n3c5-b5               210-by-    252        126           210  real
+ 593 JGD_SL6/D_11                       169-by-    461        136           168  real
+ 594 JGD_GL6/GL6_D_6                    469-by-    201        156           199  real
+ 595 JGD_Homology/ch5-5-b2              600-by-    200        176           200  real
+ 596 JGD_Margulies/cat_ears_4_1         377-by-    313        291           304  binary
+ 597 JGD_Relat/rel6                    2340-by-    157        137           155  real
+ 598 JGD_Relat/relat6                  2340-by-    157        137           155  real
+ 599 JGD_Homology/cis-n4c6-b2          1330-by-    210        190           210  real
+ 600 JGD_Homology/n4c6-b2              1330-by-    210        190           210  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 601 JGD_GL6/GL6_D_9                    340-by-    545        220           337  real
+ 602 JGD_G5/IG5-9                       342-by-    540        308           310  real
+ 603 JGD_Margulies/flower_7_1           463-by-    393        363           379  binary
+ 604 JGD_Homology/n2c6-b9               306-by-   1470        276           306  real
+ 605 JGD_GL6/GL6_D_7                    636-by-    470        312           467  real
+ 606 JGD_Margulies/flower_8_1           625-by-    513        479           497  binary
+ 607 JGD_SL6/D_10                       460-by-    816        323           455  real
+ 608 JGD_SPG/EX1                        560-by-    560        547           560  binary
+ 609 JGD_SPG/EX2                        560-by-    560        553           560  binary
+ 610 JGD_Homology/mk9-b2               1260-by-    378        343           378  real
+ 611 JGD_SL6/D_6                        970-by-    435        339           433  real
+ 612 JGD_GL6/GL6_D_8                    544-by-    637        324           542  real
+ 613 JGD_Homology/ch5-5-b3              600-by-    600        424           600  real
+ 614 JGD_Margulies/kneser_6_2_1         601-by-    676        540           601  binary
+ 615 JGD_GL7d/GL7d26                    305-by-   2798        273           303  real
+ 616 JGD_Homology/n4c5-b3              1350-by-    455        364           455  real
+ 617 JGD_Homology/n2c6-b3              1365-by-    455        364           455  real
+ 618 JGD_Homology/n3c6-b3              1365-by-    455        364           455  real
+ 619 JGD_G5/IG5-10                      652-by-    976        527           527  real
+ 620 JGD_Homology/ch6-6-b2             2400-by-    450        415           450  real
+ 621 JGD_Homology/n4c5-b9               630-by-   1895        520           630  real
+ 622 JGD_SL6/D_9                        815-by-   1133        491           810  real
+ 623 JGD_Kocay/Trec12                   551-by-   2726        550           551  real
+ 624 JGD_Homology/mk9-b3                945-by-   1260        875           945  real
+ 625 JGD_Homology/n3c6-b10              675-by-   2511        615           675  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 626 JGD_SL6/D_7                       1270-by-    971        629           968  real
+ 627 JGD_Homology/mk10-b2              3150-by-    630        586           630  real
+ 628 JGD_Franz/Franz1                  2240-by-    768        755           768  real
+ 629 JGD_Homology/shar_te2-b1         17160-by-    286        285           286  real
+ 630 JGD_SL6/D_8                       1132-by-   1271        641          1126  real
+ 631 JGD_Homology/ch7-6-b2             4200-by-    630        589           630  real
+ 632 JGD_G5/IG5-11                     1227-by-   1692        902           902  real
+ 633 JGD_Franz/Franz3                  1280-by-   2800       1025          1280  real
+ 634 JGD_Homology/n4c5-b4              2852-by-   1350        986          1350  real
+ 635 JGD_Homology/cis-n4c6-b14          920-by-   6300        860           920  real
+ 636 JGD_Homology/n4c6-b14              920-by-   6300        860           920  real
+ 637 JGD_Homology/n2c6-b4              3003-by-   1365       1001          1365  real
+ 638 JGD_Homology/n3c6-b4              3003-by-   1365       1001          1365  real
+ 639 JGD_Homology/ch7-7-b2             7350-by-    882        834           882  real
+ 640 JGD_Homology/mk11-b2              6930-by-    990        936           990  real
+ 641 JGD_Homology/n2c6-b8              1470-by-   3990       1194          1470  real
+ 642 JGD_Homology/lutz30-23-b6         1716-by-   3003       1702          1716  real
+ 643 JGD_GL7d/GL7d12                   8899-by-   1019        960          1019  real
+ 644 JGD_Homology/cis-n4c6-b3          5970-by-   1330       1140          1330  real
+ 645 JGD_Homology/n4c6-b3              5970-by-   1330       1140          1330  real
+ 646 JGD_Kocay/Trec13                  1301-by-   6561       1295          1301  real
+ 647 JGD_Homology/n4c5-b8              1895-by-   3635       1374          1895  real
+ 648 JGD_Groebner/f855_mat9            2456-by-   2511       2228          2456  real
+ 649 JGD_Groebner/f855_mat9_I          2456-by-   2511       2228          2456  real
+ 650 JGD_G5/IG5-12                     2296-by-   2875       1578          1578  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 651 JGD_Homology/ch7-8-b2            11760-by-   1176       1121          1176  real
+ 652 JGD_Groebner/HFE18_96_in          2372-by-   4096       2371          2371  binary
+ 653 JGD_Relat/rel7                   21924-by-   1045       1012          1043  real
+ 654 JGD_Relat/relat7b                21924-by-   1045       1012          1043  real
+ 655 JGD_Relat/relat7                 21924-by-   1045       1012          1043  real
+ 656 JGD_Homology/mk12-b2             13860-by-   1485       1420          1485  real
+ 657 JGD_Franz/Franz7                 10164-by-   1740       1627          1740  real
+ 658 JGD_Homology/ch6-6-b3             5400-by-   2400       1985          2400  real
+ 659 JGD_Homology/n3c6-b9              2511-by-   4935       1896          2511  real
+ 660 JGD_Homology/n4c5-b5              4340-by-   2852       1866          2852  real
+ 661 JGD_Homology/ch7-9-b2            17640-by-   1512       1450          1512  real
+ 662 JGD_Homology/n2c6-b5              4945-by-   3003       2002          3003  real
+ 663 JGD_Homology/n3c6-b5              5005-by-   3003       2002          3003  real
+ 664 JGD_Homology/ch8-8-b2            18816-by-   1568       1505          1568  real
+ 665 JGD_Homology/mk10-b3              4725-by-   3150       2564          3150  real
+ 666 JGD_Franz/Franz5                  7382-by-   2882       2229          2882  real
+ 667 JGD_Homology/n4c5-b7              3635-by-   4735       2261          3635  real
+ 668 JGD_Franz/Franz6                  7576-by-   3016       2327          3016  real
+ 669 JGD_Franz/Franz2                  4032-by-   4480       2631          4032  real
+ 670 JGD_G5/IG5-13                     3994-by-   4731       2532          2532  real
+ 671 JGD_Homology/n4c5-b6              4735-by-   4340       2474          4340  real
+ 672 JGD_Homology/n2c6-b7              3990-by-   5715       2772          3990  real
+ 673 JGD_Homology/ch6-6-b4             4320-by-   5400       3390          4320  real
+ 674 JGD_Homology/n2c6-b6              5715-by-   4945       2943          4945  real
+ 675 JGD_Homology/n3c6-b8              4935-by-   6435       3003          4935  real
+
+ID   Group/Name                       nrows-by-  ncols  num. rank  struct. rank  type
+ 676 JGD_Kocay/Trec14                  3159-by-  15905       3133          3159  real
+ 677 JGD_Homology/n3c6-b6              6435-by-   5005       3003          5005  real
+ 678 JGD_GL7d/GL7d25                   2798-by-  21074       2525          2798  real
+ 679 TKK/t520                          5563-by-   5563        882          5563  real
+ 680 JGD_Franz/Franz4                  6784-by-   5252       3297          5252  real
+ 681 JGD_Homology/ch7-6-b3            12600-by-   4200       3611          4200  real
+ 682 JGD_Homology/n3c6-b7              6435-by-   6435       3432          6435  real
+ 683 JGD_SPG/EX5                       6545-by-   6545       4740          6545  binary
+ 684 JGD_SPG/EX6                       6545-by-   6545       4740          6545  binary
+ 685 JGD_Franz/Franz9                 19588-by-   4164       3545          4164  real
+ 686 JGD_Franz/Franz10                19588-by-   4164       3545          4164  real
+ 687 JGD_G5/IG5-14                     6735-by-   7621       3906          3906  real
+ 688 Marini/eurqsa                     7245-by-   7245       7035          7245  real
+ 689 JGD_Homology/ch7-6-b5             5040-by-  15120       5039          5040  real
+ 690 JGD_Homology/cis-n4c6-b4         20058-by-   5970       4830          5970  real
+ 691 JGD_Homology/n4c6-b4             20058-by-   5970       4830          5970  real
+ 692 JGD_Homology/mk11-b3             17325-by-   6930       5994          6930  real
+ 693 JGD_Franz/Franz8                 16728-by-   7176       5463          7176  real
+ 694 TKK/cyl6                         13681-by-  13681       2243         13681  real
+ 695 QY/case9                         14454-by-  14454      14444         14454  real
+ 696 TSOPF/TSOPF_FS_b9_c6             14454-by-  14454      14444         14454  real
+ 697 TKK/tube1                        21498-by-  21498       3583         21498  binary
+ 698 TKK/tube2                        21498-by-  21498       3583         21498  real
+ 699 JGD_Homology/D6-6               120576-by-  23740      14409         18660  real
+ 
+ 
+Your path has been modified by:
+addpath /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget
+ 
+SJget toolbox successfully installed.
+Remember to save your path using savepath or pathtool!
+ 
+Saving the current MATLAB path so that access to the matrices
+is available when restarting MATLAB.
+ 
+ 
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Pajek/Erdos971.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Pajek/Erdos971.mat
+Expected error caught: Input argument "A" is undefined.
+Expected error caught: invalid stats
+Expected error caught: usage: [x,stats,NT] = spqr_basic (A,B,opts)
+Expected error caught: A and B must have the same number of rows
+Expected error caught: usage: [x,stats,NT] = spqr_basic (A,B,opts)
+Expected error caught: usage: [U,S,V,stats] = spqr_ssi (R,opts)
+Expected error caught: usage: [x,stats,N,NT] = spqr_cod (A,B,opts)
+Expected error caught: usage: [N,stats] = spqr_null (A,opts)
+Expected error caught: usage: [U,S,V,stats] = spqr_ssp (A,N,k,opts)
+Expected error caught: usage: [x,stats,N,NT] = spqr_pinv (A,B,opts)
+Expected error caught: R must be square
+
+opts for spqr_ssi with get_details = 1:
+options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : default : max(m,n)*eps(normest(A,0.01))
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : default : same as tol.
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 2.84217e-14 : numerical tolerance used.
+  normest_R : 51.6479 : estimate of Euclidean norm of R (calculated for spqr_ssi).
+  est_svals_of_R :  3.22608
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  5.77104e-05
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 0 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 4 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.155409 : total time taken (includes all timings below).
+  time_initialize : 0.00524966 : time to initialize including estimating the norm of A or R.
+  time_svd : 0.0301843 : total time taken by svd.
+  time_iters : 0.0882315 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.0150126 : time taken to estimate error bounds in spqr_ssi.
+
+opts for spqr_cod with get_details = 0:
+options for the spqr_rank functions:
+
+  get_details : 0 : basic statistics returned
+  tol : 1e-06
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : default : same as tol.
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+results from spqr_cod with get_details = 0: err 2.1528e-15
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  13.135
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  13.0823
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+
+results from spqr_pinv with get_details = 0: err 1.40433e-15
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  17.1615
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  3.60039
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 4.98489e-15 : estimated norm(A*N).
+  est_norm_A_transpose_times_NT : 0 : estimated norm(A'*NT).
+
+results from spqr_basic with get_details = 0: err 2.22045e-16
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  17.1615
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  3.60039
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_transpose_times_NT : 0 : estimated norm(A'*NT).
+
+opts for spqr_cod with get_details = 1:
+options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 1e-06
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : default : same as tol.
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+results from spqr_cod with get_details = 1: err 2.1528e-15
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  13.135
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  13.0823
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 1.35229e-14 : estimated norm(A*N).
+  est_err_bound_norm_A_times_N : 2.68461e-15 : estimated error bound for norm(A*N).
+  time : 0.0766464 : total time taken (includes all timings below).
+  time_initialize : 0.000894783 : time to initialize.
+  time_svd : 0.021441 : total time taken by svd.
+  time_basis : 0.00508991 : time to compute basis.
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 18
+               nnzH_upper_bound: 6
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 4
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 2518
+              flops_upper_bound: 190
+                            tol: 1.0000e-06
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 0
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 3.6561e-04
+
+
+info_spqr2 : statistics from second QR factorization.
+
+               nnzR_upper_bound: 10
+               nnzH_upper_bound: 8
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 4
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 2420
+              flops_upper_bound: 116
+                            tol: 0
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 0
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 2.6390e-04
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_svals_of_R :  13.1087
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.0263153
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 0 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 4 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.0260141 : total time taken (includes all timings below).
+  time_initialize : 0.000476977 : time to initialize.
+  time_svd : 0.0139333 : total time taken by svd.
+  time_iters : 0.0149111 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.00068853 : time taken to estimate error bounds in spqr_ssi.
+
+stats_ssp_N : statistics from spqr_ssp (A,N).
+
+  flag : 1 : spqr_ssp did not converge with est. relative error <= opts_ssp.convergence_factor.
+  est_svals :  1.35229e-14
+      : estimated singular value(s) of A*N or A'*NT, from spqr_ssp.
+  est_error_bounds :  2.68461e-15
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  1
+      : index of singular value(s), for bounds.
+  iters : 10 : iterations in spqr_ssi or spqr_ssp.
+  time : 0.0200954 : total time taken (includes all timings below).
+  time_initialize : 0.00130859 : time to initialize.
+  time_svd : 0.00750766 : total time taken by svd.
+  time_iters : 0.0151055 : time for spqr_ssi iterations.
+  time_est_error_bounds : 3.1059e-05 : time taken to estimate error bounds in spqr_ssi.
+
+results from spqr_pinv with get_details = 1: err 1.40433e-15
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  17.1615
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  3.60039
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 4.98489e-15 : estimated norm(A*N).
+  est_err_bound_norm_A_times_N : 2.26877e-15 : estimated error bound for norm(A*N).
+  est_norm_A_transpose_times_NT : 0 : estimated norm(A'*NT).
+  est_err_bound_norm_A_transpose_times_NT : 0 :  estimated error bound for norm(A'*NT).
+  time : 0.0526774 : total time taken (includes all timings below).
+  time_initialize : 0.000870357 : time to initialize.
+  time_svd : 0.00369433 : total time taken by svd.
+  time_basis : 0.00482744 : time to compute basis.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 1e-06
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 1e-06
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+stats_spqr_basic : statistics from spqr_basic.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  17.1615
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  3.60039
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_transpose_times_NT : 0 : estimated norm(A'*NT).
+  est_err_bound_norm_A_transpose_times_NT : 0 :  estimated error bound for norm(A'*NT).
+  time : 0.0208919 : total time taken (includes all timings below).
+  time_initialize : 0.000480994 : time to initialize.
+  time_svd : 0.000530932 : total time taken by svd.
+  time_basis : 0.00470466 : time to compute basis.
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 14
+               nnzH_upper_bound: 6
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 4
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 2645
+              flops_upper_bound: 150
+                            tol: 1.0000e-06
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 0
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 4.0852e-04
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_svals_of_R :  3.6005
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.000103967
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 0 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 4 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.00467957 : total time taken (includes all timings below).
+  time_initialize : 0.000453893 : time to initialize.
+  time_svd : 0.000462889 : total time taken by svd.
+  time_iters : 0.00147939 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.000284898 : time taken to estimate error bounds in spqr_ssi.
+
+stats_ssp_NT : statistics from spqr_ssp (A',NT).
+
+  flag : 0 : ok. spqr_ssp converged with est. relative error <= opts_ssp.convergence_factor.
+  est_svals :  0
+      : estimated singular value(s) of A*N or A'*NT, from spqr_ssp.
+  est_error_bounds :  0
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  0
+      : index of singular value(s), for bounds.
+  iters : 0 : iterations in spqr_ssi or spqr_ssp.
+  time : 0 : total time taken (includes all timings below).
+  time_initialize : 0.000458996 : time to initialize.
+  time_svd : 0 : total time taken by svd.
+  time_iters : 0 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0 : time taken to estimate error bounds in spqr_ssi.
+
+stats_spqr_null : statistics from spqr_null.
+
+  stats_spqr_null.opts_used.ssi_min_block : 3 : initial block size in spqr_ssi as used by spqr_null.
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  13.1087
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  13.0996
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 4.98489e-15 : estimated norm(A*N).
+  est_err_bound_norm_A_times_N : 2.26877e-15 : estimated error bound for norm(A*N).
+  time : 0.0252396 : total time taken (includes all timings below).
+  time_initialize : 0.000428747 : time to initialize.
+  time_svd : 0.00137542 : total time taken by svd.
+  time_basis : 0.000122782 : time to compute basis.
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 10
+               nnzH_upper_bound: 10
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 4
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 2516
+              flops_upper_bound: 146
+                            tol: 1.0000e-06
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 0
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 3.1628e-04
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_svals_of_R :  13.1087
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.00909203
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 0 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 4 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.00448574 : total time taken (includes all timings below).
+  time_initialize : 0.00044112 : time to initialize.
+  time_svd : 0.000463685 : total time taken by svd.
+  time_iters : 0.0014619 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.000277138 : time taken to estimate error bounds in spqr_ssi.
+
+stats_ssp_N : statistics from spqr_ssp (A,N).
+
+  flag : 1 : spqr_ssp did not converge with est. relative error <= opts_ssp.convergence_factor.
+  est_svals :  4.98489e-15
+      : estimated singular value(s) of A*N or A'*NT, from spqr_ssp.
+  est_error_bounds :  2.26877e-15
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  1
+      : index of singular value(s), for bounds.
+  iters : 10 : iterations in spqr_ssi or spqr_ssp.
+  time : 0.00891953 : total time taken (includes all timings below).
+  time_initialize : 0.000435418 : time to initialize.
+  time_svd : 0.000861395 : total time taken by svd.
+  time_iters : 0.00746511 : time for spqr_ssi iterations.
+  time_est_error_bounds : 2.9307e-05 : time taken to estimate error bounds in spqr_ssi.
+
+results from spqr_basic with get_details = 1: err 2.22045e-16
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  17.1615
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  3.60039
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_transpose_times_NT : 0 : estimated norm(A'*NT).
+  est_err_bound_norm_A_transpose_times_NT : 0 :  estimated error bound for norm(A'*NT).
+  time : 0.0116915 : total time taken (includes all timings below).
+  time_initialize : 0.000849542 : time to initialize.
+  time_svd : 0.000528542 : total time taken by svd.
+  time_basis : 0.000127805 : time to compute basis.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 1e-06
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 1e-06
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 14
+               nnzH_upper_bound: 6
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 4
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 2645
+              flops_upper_bound: 150
+                            tol: 1.0000e-06
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 0
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 4.1654e-04
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_svals_of_R :  3.6005
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.000103967
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 0 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 4 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.00464281 : total time taken (includes all timings below).
+  time_initialize : 0.000448914 : time to initialize.
+  time_svd : 0.000473298 : total time taken by svd.
+  time_iters : 0.00149702 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.000288067 : time taken to estimate error bounds in spqr_ssi.
+
+stats_ssp_NT : statistics from spqr_ssp (A',NT).
+
+  flag : 0 : ok. spqr_ssp converged with est. relative error <= opts_ssp.convergence_factor.
+  est_svals :  0
+      : estimated singular value(s) of A*N or A'*NT, from spqr_ssp.
+  est_error_bounds :  0
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  0
+      : index of singular value(s), for bounds.
+  iters : 0 : iterations in spqr_ssi or spqr_ssp.
+  time : 0 : total time taken (includes all timings below).
+  time_initialize : 0.000433066 : time to initialize.
+  time_svd : 0 : total time taken by svd.
+  time_iters : 0 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0 : time taken to estimate error bounds in spqr_ssi.
+  stats_ssp_NT.opts_used.k : 1 : number of singular values to compute in spqr_ssp(A',NT).
+
+opts for spqr_cod with get_details = 2:
+options for the spqr_rank functions:
+
+  get_details : 2 : basic statistics and a few additional statisticsreturned
+  tol : 1e-06
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : default : same as tol.
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+results from spqr_cod with get_details = 2: err 2.1528e-15
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  13.135
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  13.0823
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_svals_of_R :  13.1087
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.0263153
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  ssi_max_block_used : 4 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+
+results from spqr_pinv with get_details = 2: err 1.40433e-15
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  17.1615
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  3.60039
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 4.98489e-15 : estimated norm(A*N).
+  est_norm_A_transpose_times_NT : 0 : estimated norm(A'*NT).
+
+results from spqr_basic with get_details = 2: err 2.22045e-16
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  rank_spqr : 4 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_sval_upper_bounds :  17.1615
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  3.60039
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  est_norm_A_transpose_times_NT : 0 : estimated norm(A'*NT).
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 4 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_svals_of_R :  3.6005
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.000103967
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  4
+      : index of singular value(s), for bounds.
+  ssi_max_block_used : 4 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+
+opts for spqr_null with explicit basis N:
+options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : default : max(m,n)*eps(normest(A,0.01))
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : false : N represented as an explicit matrix.
+  start_with_A_transpose : true : spqr_cod computes qr(A').
+  ssi_tol : 1e-06
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : false : use whatever current random stream is in effect.
+Expected error caught: unrecognized method
+Expected error caught: unrecognized method
+Expected error caught: unrecognized N struct
+Expected error caught: unrecognized N struct
+Expected error caught: unrecognized N struct
+Expected error caught: unrecognized N struct
+
+detailed stats from spqr_cod:
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 3 : estimate of numerical rank.
+  rank_spqr : 3 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 5.68434e-14 : numerical tolerance used.
+  est_sval_upper_bounds :  1.77763 4.44089e-15
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  1.77763 0
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  3 4
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 4.18953e-15 : estimated norm(A*N).
+  est_norm_A_transpose_times_NT : 9.67173e-15 : estimated norm(A'*NT).
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 3 : estimate of numerical rank.
+  tol : 1e-06 : numerical tolerance used.
+  est_svals_of_R :  1.77763
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  5.44614e-15
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  3
+      : index of singular value(s), for bounds.
+  ssi_max_block_used : 3 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+
+default options for the spqr_rank functions:
+
+  get_details : 0 : basic statistics returned
+  tol : default : max(m,n)*eps(normest(A,0.01))
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : default : same as tol.
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+(default for spqr_ssp): options for the spqr_rank functions:
+
+  get_details : 0 : basic statistics returned
+  tol : default : max(m,n)*eps(normest(A,0.01))
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : default : same as tol.
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+description of statistics:
+
+Description of basic stats returned by spqr_basic, spqr_null,  spqr_pinv 
+or spqr_cod:
+
+stats.flag (for all routines except spqr_ssp) -- 
+   if stats.flag is 0 if it is likely, although not
+   guaranteed, that stats.rank is the correct numerical rank for
+   tolerance stats.tol (i.e. agrees with the numerical rank
+   determined by the singular values of R).
+   
+   stats.flag is 1 if the calculated numerical rank stats.rank may
+   be correct for the tolerance stats.tol but the estimated error
+   bounds are too large to confirm this.  However stats.rank appears
+   to be correct for an alternate tolerance stats.tol_alt.  More
+   generally stats.rank appears to be correct for any tolerance
+   between stats.est_sval_lower_bounds(nsvals_large) and
+   stats.est_sval_upper_bounds(nsvals_large+1).
+   
+   stats.flag is 2 if the calculated numerical rank stats.numerical
+   may be correct but estimated error bounds are too large to confirm
+   this.  The conditions for stats.flag to be 0 or 1 are not
+   satisfied.
+   
+   stats.flag is 3 if is likely that the numerical rank returned,
+   stats.rank, is too large.
+   
+   stats.flag is 4 if overflow occurred during the inverse power
+   method.  The method fails in this case, and all parameters other
+   stats are returned as empty ([ ]).
+   
+   stats.flag is 5 if a catastrophic failure occurred.
+
+stats.rank -- the estimated numerical rank when stats.flag is
+   0, 1 or 2.  stats.rank is typically an upper bound on the
+   numerical rank when stats.flag is 3.  Note that stats.rank is a
+   correction to the rank returned by spqr (stats.rank_spqr) in the
+   case that the calculations in the routine inidicate that the rank
+   returned by spqr not correct.
+
+stats.tol -- the tolerance used to define the numerical rank.
+
+stat.tol_alt -- an alternate tolerance that corresponds to the
+   calculated numerical rank when stats.flag is 1.
+
+stats.est_sval_upper_bounds -- stats.est_sval_upper_bounds(i) is an
+   estimate of an upper bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+stats.est_sval_lower_bounds -- stats.est_sval_lower_bounds(i) is an
+   estimate of an lower bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+   Note that stats.est_sval_upper_bounds(i) is a rigorous upper bound
+   on some singular value of (A+E) where where E is O(norm(A)*eps)
+   Also stats.est_sval_lower_bounds(i) is a rigorous lower bound on
+   some singular value of (A+E).  In both cases the singular value is
+   normally singular value number sval_numbers_for_bounds(i) of A,
+   but the singular value number is not guaranteed.  For i such that
+   sval_numbers_for_bounds(i) = stats.rank (that is for estimates
+   of singular value stats.rank) if stats.est_sval_upper_bounds(i)
+   is a large multiple of stats.est_sval_lower_bounds(i) then
+   solution vectors x produced by spqr_basic may be inferior (i.e.
+   be significanty larger) than solutions produced by spqr_pinv or
+   spqr_cod.
+
+stats.sval_numbers_for_bounds -- component i in the error bounds is an estimated
+   error bound for singular value number sval_numbers_for_bounds(i).
+
+stats.est_norm_A_transpose_times_NT -- an estimate of norm(A'*NT).
+
+stats.est_norm_A_times_N -- an estimate of norm(A*N).
+
+Description of basic stats returned by spqr_ssi:
+
+stats.flag (for all routines except spqr_ssp) -- 
+   if stats.flag is 0 if it is likely, although not
+   guaranteed, that stats.rank is the correct numerical rank for
+   tolerance stats.tol (i.e. agrees with the numerical rank
+   determined by the singular values of R).
+   
+   stats.flag is 1 if the calculated numerical rank stats.rank may
+   be correct for the tolerance stats.tol but the estimated error
+   bounds are too large to confirm this.  However stats.rank appears
+   to be correct for an alternate tolerance stats.tol_alt.  More
+   generally stats.rank appears to be correct for any tolerance
+   between stats.est_sval_lower_bounds(nsvals_large) and
+   stats.est_sval_upper_bounds(nsvals_large+1).
+   
+   stats.flag is 2 if the calculated numerical rank stats.numerical
+   may be correct but estimated error bounds are too large to confirm
+   this.  The conditions for stats.flag to be 0 or 1 are not
+   satisfied.
+   
+   stats.flag is 3 if is likely that the numerical rank returned,
+   stats.rank, is too large.
+   
+   stats.flag is 4 if overflow occurred during the inverse power
+   method.  The method fails in this case, and all parameters other
+   stats are returned as empty ([ ]).
+   
+   stats.flag is 5 if a catastrophic failure occurred.
+
+stats.rank -- the estimated numerical rank when stats.flag is
+   0, 1 or 2.  stats.rank is typically an upper bound on the
+   numerical rank when stats.flag is 3.  Note that stats.rank is a
+   correction to the rank returned by spqr (stats.rank_spqr) in the
+   case that the calculations in the routine inidicate that the rank
+   returned by spqr not correct.
+
+stats.tol -- the tolerance used to define the numerical rank.
+
+stats.est_svals_of_R -- computed by spqr_ssi.
+   stats.est_svals_of_R contains estimates of the smallest singular
+   of R.
+
+stats.est_error_bounds -- computed by spqr_ssi and spqr_ssp.
+   stats.est_error_bounds(i) is an estimated bound on the absolute
+   error in singular value number stats.sval_numbers_for_bounds(i).
+   of R (for spqr_ssi) or of A or A*N (for spqr_ssp). It is also a
+   rigorous bound on abs (s(i) - some true singular value of (B+E)),
+   where E is O(norm(B)*eps) and B = R (for spqr_ssi) and B =
+   A or A*N (for spqr_ssp).
+
+stats.sval_numbers_for_bounds -- component i in the error bounds is an estimated
+   error bound for singular value number sval_numbers_for_bounds(i).
+
+Description of basic stats returned by spqr_ssp:
+
+stats.flag -- (for spqr_ssp) 
+   stats.flag is 0 if spqr_ssp converged with estimated relative
+   error in singular value opts.k of A (or of A*N) <=
+   opts_ssp.convergence_factor. stats.flag is 1 if this is not true.
+
+stats.est_svals -- computed by spqr_ssp.
+   stats.est_svals(i) is an estimate of the ith largest singular of
+   A or of A*N.  Also for i = 1:nsval, stats.est_svals(i) is a lower
+   bound on the ith largest singular value of A (or A*N).
+
+stats.est_error_bounds -- computed by spqr_ssi and spqr_ssp.
+   stats.est_error_bounds(i) is an estimated bound on the absolute
+   error in singular value number stats.sval_numbers_for_bounds(i).
+   of R (for spqr_ssi) or of A or A*N (for spqr_ssp). It is also a
+   rigorous bound on abs (s(i) - some true singular value of (B+E)),
+   where E is O(norm(B)*eps) and B = R (for spqr_ssi) and B =
+   A or A*N (for spqr_ssp).
+
+stats.sval_numbers_for_bounds -- component i in the error bounds is an estimated
+   error bound for singular value number sval_numbers_for_bounds(i).
+
+Description of basic stats returned by spqr_basic, spqr_null,  spqr_pinv 
+or spqr_cod:
+
+stats.flag (for all routines except spqr_ssp) -- 
+   if stats.flag is 0 if it is likely, although not
+   guaranteed, that stats.rank is the correct numerical rank for
+   tolerance stats.tol (i.e. agrees with the numerical rank
+   determined by the singular values of R).
+   
+   stats.flag is 1 if the calculated numerical rank stats.rank may
+   be correct for the tolerance stats.tol but the estimated error
+   bounds are too large to confirm this.  However stats.rank appears
+   to be correct for an alternate tolerance stats.tol_alt.  More
+   generally stats.rank appears to be correct for any tolerance
+   between stats.est_sval_lower_bounds(nsvals_large) and
+   stats.est_sval_upper_bounds(nsvals_large+1).
+   
+   stats.flag is 2 if the calculated numerical rank stats.numerical
+   may be correct but estimated error bounds are too large to confirm
+   this.  The conditions for stats.flag to be 0 or 1 are not
+   satisfied.
+   
+   stats.flag is 3 if is likely that the numerical rank returned,
+   stats.rank, is too large.
+   
+   stats.flag is 4 if overflow occurred during the inverse power
+   method.  The method fails in this case, and all parameters other
+   stats are returned as empty ([ ]).
+   
+   stats.flag is 5 if a catastrophic failure occurred.
+
+stats.rank -- the estimated numerical rank when stats.flag is
+   0, 1 or 2.  stats.rank is typically an upper bound on the
+   numerical rank when stats.flag is 3.  Note that stats.rank is a
+   correction to the rank returned by spqr (stats.rank_spqr) in the
+   case that the calculations in the routine inidicate that the rank
+   returned by spqr not correct.
+
+stats.tol -- the tolerance used to define the numerical rank.
+
+stat.tol_alt -- an alternate tolerance that corresponds to the
+   calculated numerical rank when stats.flag is 1.
+
+stats.est_sval_upper_bounds -- stats.est_sval_upper_bounds(i) is an
+   estimate of an upper bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+stats.est_sval_lower_bounds -- stats.est_sval_lower_bounds(i) is an
+   estimate of an lower bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+   Note that stats.est_sval_upper_bounds(i) is a rigorous upper bound
+   on some singular value of (A+E) where where E is O(norm(A)*eps)
+   Also stats.est_sval_lower_bounds(i) is a rigorous lower bound on
+   some singular value of (A+E).  In both cases the singular value is
+   normally singular value number sval_numbers_for_bounds(i) of A,
+   but the singular value number is not guaranteed.  For i such that
+   sval_numbers_for_bounds(i) = stats.rank (that is for estimates
+   of singular value stats.rank) if stats.est_sval_upper_bounds(i)
+   is a large multiple of stats.est_sval_lower_bounds(i) then
+   solution vectors x produced by spqr_basic may be inferior (i.e.
+   be significanty larger) than solutions produced by spqr_pinv or
+   spqr_cod.
+
+stats.sval_numbers_for_bounds -- component i in the error bounds is an estimated
+   error bound for singular value number sval_numbers_for_bounds(i).
+
+stats.est_norm_A_transpose_times_NT -- an estimate of norm(A'*NT).
+
+stats.est_norm_A_times_N -- an estimate of norm(A*N).
+
+Description of basic stats returned by all spqr_functions:
+
+stats.flag (for all routines except spqr_ssp) -- 
+   if stats.flag is 0 if it is likely, although not
+   guaranteed, that stats.rank is the correct numerical rank for
+   tolerance stats.tol (i.e. agrees with the numerical rank
+   determined by the singular values of R).
+   
+   stats.flag is 1 if the calculated numerical rank stats.rank may
+   be correct for the tolerance stats.tol but the estimated error
+   bounds are too large to confirm this.  However stats.rank appears
+   to be correct for an alternate tolerance stats.tol_alt.  More
+   generally stats.rank appears to be correct for any tolerance
+   between stats.est_sval_lower_bounds(nsvals_large) and
+   stats.est_sval_upper_bounds(nsvals_large+1).
+   
+   stats.flag is 2 if the calculated numerical rank stats.numerical
+   may be correct but estimated error bounds are too large to confirm
+   this.  The conditions for stats.flag to be 0 or 1 are not
+   satisfied.
+   
+   stats.flag is 3 if is likely that the numerical rank returned,
+   stats.rank, is too large.
+   
+   stats.flag is 4 if overflow occurred during the inverse power
+   method.  The method fails in this case, and all parameters other
+   stats are returned as empty ([ ]).
+   
+   stats.flag is 5 if a catastrophic failure occurred.
+
+stats.flag -- (for spqr_ssp) 
+   stats.flag is 0 if spqr_ssp converged with estimated relative
+   error in singular value opts.k of A (or of A*N) <=
+   opts_ssp.convergence_factor. stats.flag is 1 if this is not true.
+
+stats.rank -- the estimated numerical rank when stats.flag is
+   0, 1 or 2.  stats.rank is typically an upper bound on the
+   numerical rank when stats.flag is 3.  Note that stats.rank is a
+   correction to the rank returned by spqr (stats.rank_spqr) in the
+   case that the calculations in the routine inidicate that the rank
+   returned by spqr not correct.
+
+stats.tol -- the tolerance used to define the numerical rank.
+
+stat.tol_alt -- an alternate tolerance that corresponds to the
+   calculated numerical rank when stats.flag is 1.
+
+stats.est_sval_upper_bounds -- stats.est_sval_upper_bounds(i) is an
+   estimate of an upper bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+stats.est_sval_lower_bounds -- stats.est_sval_lower_bounds(i) is an
+   estimate of an lower bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+   Note that stats.est_sval_upper_bounds(i) is a rigorous upper bound
+   on some singular value of (A+E) where where E is O(norm(A)*eps)
+   Also stats.est_sval_lower_bounds(i) is a rigorous lower bound on
+   some singular value of (A+E).  In both cases the singular value is
+   normally singular value number sval_numbers_for_bounds(i) of A,
+   but the singular value number is not guaranteed.  For i such that
+   sval_numbers_for_bounds(i) = stats.rank (that is for estimates
+   of singular value stats.rank) if stats.est_sval_upper_bounds(i)
+   is a large multiple of stats.est_sval_lower_bounds(i) then
+   solution vectors x produced by spqr_basic may be inferior (i.e.
+   be significanty larger) than solutions produced by spqr_pinv or
+   spqr_cod.
+
+stats.est_svals_of_R -- computed by spqr_ssi.
+   stats.est_svals_of_R contains estimates of the smallest singular
+   of R.
+
+stats.est_svals -- computed by spqr_ssp.
+   stats.est_svals(i) is an estimate of the ith largest singular of
+   A or of A*N.  Also for i = 1:nsval, stats.est_svals(i) is a lower
+   bound on the ith largest singular value of A (or A*N).
+
+stats.est_error_bounds -- computed by spqr_ssi and spqr_ssp.
+   stats.est_error_bounds(i) is an estimated bound on the absolute
+   error in singular value number stats.sval_numbers_for_bounds(i).
+   of R (for spqr_ssi) or of A or A*N (for spqr_ssp). It is also a
+   rigorous bound on abs (s(i) - some true singular value of (B+E)),
+   where E is O(norm(B)*eps) and B = R (for spqr_ssi) and B =
+   A or A*N (for spqr_ssp).
+
+stats.sval_numbers_for_bounds -- component i in the error bounds is an estimated
+   error bound for singular value number sval_numbers_for_bounds(i).
+
+stats.est_norm_A_transpose_times_NT -- an estimate of norm(A'*NT).
+
+stats.est_norm_A_times_N -- an estimate of norm(A*N).
+
+***** Additional statistics when opts.get_details is 2: *****
+
+stats.rank_spqr -- the rough estimate of the numerical rank
+   computed by spqr.  This is typically correct if the numerical
+   rank is well-defined.
+
+stats.stats_ssi -- statistics returned by spqr_ssi.
+
+stats_ssi.ssi_max_block_used -- the maximum block size used by spqr_ssi.
+
+stats_ssi.ssi_min_block_used -- the initial block size used by spqr_ssi.
+
+***** Additions statistics when opts.get_details is 1: *****
+
+stats.normest_A  -- an estimate of the Euclidean norm of A. Calculated using
+   normest(A,0.01).
+
+stats.normest_R  -- an estimate of the Euclidean norm of R. Calculated for spqr_ssi
+   using normest(R,0.01).
+
+stats.est_err_bound_norm_A_times_N  -- an estimate of an
+   error bound on stats.est_norm_A_times_N.  It is also a
+   rigorous bound on abs (stats.est_norm_A_times_N - s)
+   where s is some singular value of (A+E)*N and where E is
+   O(norm(A)*eps). Usually the singular value is the first singular
+   value but this is not guaranteed.
+
+stats.est_err_bound_norm_A_transpose_times_NT  -- an estimate of an
+   error bound on stats.est_norm_A_transpose_times_NT.  It is also a
+   rigorous bound on abs (stats.est_norm_A_transpose_times_NT - s)
+   where s is some singular value of (A+E)'*NT and where E is
+   O(norm(A)*eps). Usually the singular value is the first singular
+   value but this is not guaranteed.
+
+stats_ssi.norm_R_times_N -- Euclidean norm of (R*N), from spqr_ssi.
+
+stats_ssi.norm_R_transpose_times_NT -- Eucliean norm of (R'*NT), from spqr_ssi.
+
+stats_ssi.iters or stats_ssp_N.iters or stats_ssp_NT.iters -- number of
+    iterations for subspace iteration in spqr_ssi or spqr_ssp.
+
+stats_ssi.nsvals_large_found -- the number of 'large' (larger than tol) singular
+   values found, from spqr_ssi.
+
+stats_ssi.final_blocksize -- final block size for subspace iteration in 
+   spqr_ssi. 
+
+stats.stats_spqr_basic -- statistics returned when spqr_basic is called by spqr_pinv.
+
+stats.stats_spqr_null -- statistics returned when spqr_null is called by spqr_pinv.
+
+stats.info_spqr1 -- statistics from spqr for the first QR factorization.
+   See 'help spqr' for details.
+
+stats.info_spqr2 -- statistics from spqr for the second QR factorization, if
+   required.  See 'help spqr' for details.
+
+stats.stats_ssp_N -- statistics from spqr_ssp when calculating the basis
+   N for the null space of A.
+
+stats.stats_ssp_NT -- statistics from spqr_ssp when calculating the basis
+   NT for the null space of A transpose.
+
+stats.opts_used, stats_ssi.opts_used, or stats_ssp.opts_used -- values of
+   options used.  These can be different from values in opts since, for example,
+   the size of A can restrict some values in opts.
+
+stats.time, stats_ssi.time, etc.  -- the total time of the routine including
+   the times described below.
+
+stats.time_initialize, stats_ssi.time_initialize, etc. -- the time to
+   set default values of opts, including calculating normest(A,0.01),
+   or normest(R,0.01) if needed.
+
+stats.time_basis -- the time to compute the basis for the numerical null space
+   following any calls to spqr and spqr_ssi. This will be small
+   if the null space basis is returned in implicit form but can, in some cases,
+   be significant if the null space basis is returned as an explicit matrix.
+
+stats_ssi.time_iters, stats_ssp_N.time_iters, etc.  -- the time for the
+   subspace iterations in spqr_ssi or spqr_ssp. Excludes time for initialization,
+   error flag calculation, etc..
+
+stats_ssi.time_est_error_bounds, stats_ssp_N.time_est_error_bounds, etc.  -- the time
+   for estimating the singular value error bounds in spqr_ssi or spqr_ssp.
+
+stats.time_svd, stats_ssi.time_svd, etc.  -- the total time for calls to MATLAB's SVD
+   in the current routine and its subroutines.
+
+Description of basic stats returned by all spqr_functions:
+
+stats.flag (for all routines except spqr_ssp) -- 
+   if stats.flag is 0 if it is likely, although not
+   guaranteed, that stats.rank is the correct numerical rank for
+   tolerance stats.tol (i.e. agrees with the numerical rank
+   determined by the singular values of R).
+   
+   stats.flag is 1 if the calculated numerical rank stats.rank may
+   be correct for the tolerance stats.tol but the estimated error
+   bounds are too large to confirm this.  However stats.rank appears
+   to be correct for an alternate tolerance stats.tol_alt.  More
+   generally stats.rank appears to be correct for any tolerance
+   between stats.est_sval_lower_bounds(nsvals_large) and
+   stats.est_sval_upper_bounds(nsvals_large+1).
+   
+   stats.flag is 2 if the calculated numerical rank stats.numerical
+   may be correct but estimated error bounds are too large to confirm
+   this.  The conditions for stats.flag to be 0 or 1 are not
+   satisfied.
+   
+   stats.flag is 3 if is likely that the numerical rank returned,
+   stats.rank, is too large.
+   
+   stats.flag is 4 if overflow occurred during the inverse power
+   method.  The method fails in this case, and all parameters other
+   stats are returned as empty ([ ]).
+   
+   stats.flag is 5 if a catastrophic failure occurred.
+
+stats.flag -- (for spqr_ssp) 
+   stats.flag is 0 if spqr_ssp converged with estimated relative
+   error in singular value opts.k of A (or of A*N) <=
+   opts_ssp.convergence_factor. stats.flag is 1 if this is not true.
+
+stats.rank -- the estimated numerical rank when stats.flag is
+   0, 1 or 2.  stats.rank is typically an upper bound on the
+   numerical rank when stats.flag is 3.  Note that stats.rank is a
+   correction to the rank returned by spqr (stats.rank_spqr) in the
+   case that the calculations in the routine inidicate that the rank
+   returned by spqr not correct.
+
+stats.tol -- the tolerance used to define the numerical rank.
+
+stat.tol_alt -- an alternate tolerance that corresponds to the
+   calculated numerical rank when stats.flag is 1.
+
+stats.est_sval_upper_bounds -- stats.est_sval_upper_bounds(i) is an
+   estimate of an upper bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+stats.est_sval_lower_bounds -- stats.est_sval_lower_bounds(i) is an
+   estimate of an lower bound on singular value number
+   stats.sval_numbers_for_bounds(i) of A.
+
+   Note that stats.est_sval_upper_bounds(i) is a rigorous upper bound
+   on some singular value of (A+E) where where E is O(norm(A)*eps)
+   Also stats.est_sval_lower_bounds(i) is a rigorous lower bound on
+   some singular value of (A+E).  In both cases the singular value is
+   normally singular value number sval_numbers_for_bounds(i) of A,
+   but the singular value number is not guaranteed.  For i such that
+   sval_numbers_for_bounds(i) = stats.rank (that is for estimates
+   of singular value stats.rank) if stats.est_sval_upper_bounds(i)
+   is a large multiple of stats.est_sval_lower_bounds(i) then
+   solution vectors x produced by spqr_basic may be inferior (i.e.
+   be significanty larger) than solutions produced by spqr_pinv or
+   spqr_cod.
+
+stats.est_svals_of_R -- computed by spqr_ssi.
+   stats.est_svals_of_R contains estimates of the smallest singular
+   of R.
+
+stats.est_svals -- computed by spqr_ssp.
+   stats.est_svals(i) is an estimate of the ith largest singular of
+   A or of A*N.  Also for i = 1:nsval, stats.est_svals(i) is a lower
+   bound on the ith largest singular value of A (or A*N).
+
+stats.est_error_bounds -- computed by spqr_ssi and spqr_ssp.
+   stats.est_error_bounds(i) is an estimated bound on the absolute
+   error in singular value number stats.sval_numbers_for_bounds(i).
+   of R (for spqr_ssi) or of A or A*N (for spqr_ssp). It is also a
+   rigorous bound on abs (s(i) - some true singular value of (B+E)),
+   where E is O(norm(B)*eps) and B = R (for spqr_ssi) and B =
+   A or A*N (for spqr_ssp).
+
+stats.sval_numbers_for_bounds -- component i in the error bounds is an estimated
+   error bound for singular value number sval_numbers_for_bounds(i).
+
+stats.est_norm_A_transpose_times_NT -- an estimate of norm(A'*NT).
+
+stats.est_norm_A_times_N -- an estimate of norm(A*N).
+
+***** Additional statistics when opts.get_details is 2: *****
+
+stats.rank_spqr -- the rough estimate of the numerical rank
+   computed by spqr.  This is typically correct if the numerical
+   rank is well-defined.
+
+stats.stats_ssi -- statistics returned by spqr_ssi.
+
+stats_ssi.ssi_max_block_used -- the maximum block size used by spqr_ssi.
+
+stats_ssi.ssi_min_block_used -- the initial block size used by spqr_ssi.
+
+---------------------------------------------------------------
+test that illustrates the rare case of a miscalculated rank:
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Sandia/oscil_dcop_33.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Sandia/oscil_dcop_33.mat
+
+Problem = 
+
+         name: 'Sandia/oscil_dcop_33'
+        title: 'Sandia/oscil_dcop_33 circuit simulation matrix. Sandia National Lab.'
+            A: [430x430 double]
+            b: [430x1 double]
+         SJid: 182
+         UFid: 1144
+         kind: 'subsequent circuit simulation problem'
+        notes: 'next: Sandia/oscil_dcop_34 first: Sandia/oscil_dcop_01'
+         date: '2003'
+       author: 'R. Hoekstra'
+           ed: 'T. Davis'
+        svals: [430x1 double]
+    sval_info: 'Routine svd from Matlab 7.6.0.324 (R2008a) used to calculate the singular values.'
+
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 423 : estimate of numerical rank.
+  rank_spqr : 425 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1.00117e-07 : numerical tolerance used.
+  est_sval_upper_bounds :  2.13431e-07 7.15797e-08
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  1.26859e-07 3.33239e-08
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  423 424
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 7.155e-08 : estimated norm(A*N).
+  est_err_bound_norm_A_times_N : 2.96843e-11 : estimated error bound for norm(A*N).
+  time : 0.0411242 : total time taken (includes all timings below).
+  time_initialize : 0.000724137 : time to initialize.
+  time_svd : 0.00166625 : total time taken by svd.
+  time_basis : 0.000198297 : time to compute basis.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 1.00117e-07
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 1.00117e-07
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 6338
+               nnzH_upper_bound: 3664
+     number_of_frontal_matrices: 50
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 425
+    number_of_column_singletons: 8
+       number_of_singleton_rows: 8
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 274334
+              flops_upper_bound: 197791
+                            tol: 1.0012e-07
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 8.3997e-08
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 0.0016
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 0 : ok.  stats.rank very likely to be correct.
+  rank : 423 : estimate of numerical rank.
+  tol : 1.00117e-07 : numerical tolerance used.
+  est_svals_of_R :  1.29434e-07 3.33299e-08 1.96839e-08
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  2.57485e-09 5.97769e-12 1.72923e-13
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  423 424 425
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 3.33299e-08 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 3.33299e-08 : norm of (R'*NT), from spqr_ssi.
+  iters : 5 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.017417 : total time taken (includes all timings below).
+  time_initialize : 0.000412213 : time to initialize.
+  time_svd : 0.00111743 : total time taken by svd.
+  time_iters : 0.00362718 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.000383958 : time taken to estimate error bounds in spqr_ssi.
+
+stats_ssp_N : statistics from spqr_ssp (A,N).
+
+  flag : 0 : ok. spqr_ssp converged with est. relative error <= opts_ssp.convergence_factor.
+  est_svals :  7.155e-08
+      : estimated singular value(s) of A*N or A'*NT, from spqr_ssp.
+  est_error_bounds :  2.96843e-11
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  1
+      : index of singular value(s), for bounds.
+  iters : 4 : iterations in spqr_ssi or spqr_ssp.
+  time : 0.0117262 : total time taken (includes all timings below).
+  time_initialize : 0.000420176 : time to initialize.
+  time_svd : 0.000410698 : total time taken by svd.
+  time_iters : 0.00978757 : time for spqr_ssi iterations.
+  time_est_error_bounds : 2.8997e-05 : time taken to estimate error bounds in spqr_ssi.
+  stats_ssp_N.opts_used.k : 1 : number of singular values to compute in spqr_ssp(A,N).
+
+expected rank mismatch 423 422
+
+---------------------------------------------------------------
+another rare case:
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Regtools/gravity_1000.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Regtools/gravity_1000.mat
+
+Problem = 
+
+        title: 'GRAVITY 1000x1000 Test problem: 1-D gravity surveying model problem'
+            A: [1000x1000 double]
+            b: [1000x1 double]
+            x: [1000x1 double]
+         SJid: 240
+         UFid: -1
+         name: 'Regtools/gravity_1000'
+         date: '2002'
+       author: 'Hansen'
+           ed: 'Per Christian Hansen'
+         kind: 'ill-posed problem'
+        notes: [29x73 char]
+        svals: [1000x1 double]
+    sval_info: 'Routine svd from Matlab 7.6.0.324 (R2008a) used to calculate the singular values.'
+
+
+  flag : 2 : stats.rank may be correct for tolerance stats.tol,
+      but error bounds are too high to confirm this.
+  rank : 96 : estimate of numerical rank.
+  rank_spqr : 105 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 8.88178e-13 : numerical tolerance used.
+  normest_A : 6.45915 : estimate of Euclidean norm of A.
+  est_sval_upper_bounds :  1.12062e-11 1.04414e-12
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  0 0
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  96 97
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 9.53893e-13 : estimated norm(A*N).
+  est_err_bound_norm_A_times_N : 9.02516e-14 : estimated error bound for norm(A*N).
+  time : 0.916144 : total time taken (includes all timings below).
+  time_initialize : 0.0294718 : time to initialize including estimating the norm of A or R.
+  time_svd : 0.0392797 : total time taken by svd.
+  time_basis : 0.00807209 : time to compute basis.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 8.88178e-13
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 8.88178e-13
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 501500
+               nnzH_upper_bound: 499500
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 105
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 32184856
+              flops_upper_bound: 1.3368e+09
+                            tol: 8.8818e-13
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 1.0304e-11
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 0.6314
+
+
+info_spqr2 : statistics from second QR factorization.
+
+               nnzR_upper_bound: 5565
+               nnzH_upper_bound: 93047
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 105
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 2900145
+              flops_upper_bound: 18787808
+                            tol: 0
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 0
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 0.0279
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 2 : stats.rank may be correct for tolerance stats.tol,
+      but error bounds are too high to confirm this.
+  rank : 96 : estimate of numerical rank.
+  tol : 8.88178e-13 : numerical tolerance used.
+  est_svals_of_R :  8.90935e-13 8.86406e-13 8.83128e-13 8.76611e-13 8.52567e-13 8.33851e-13 7.9034e-13 7.87582e-13 7.7819e-13 7.65881e-13
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  1.11465e-14 1.18174e-14 4.12246e-15 7.32091e-15 4.85468e-17 5.12503e-17 2.04029e-17 1.17029e-16 2.89358e-16 1.31374e-16
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  96 97 98 99 100 101 102 103 104 105
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 8.86564e-13 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 8.86406e-13 : norm of (R'*NT), from spqr_ssi.
+  iters : 100 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 10 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.102325 : total time taken (includes all timings below).
+  time_initialize : 0.000494758 : time to initialize.
+  time_svd : 0.0345215 : total time taken by svd.
+  time_iters : 0.0981155 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.00048222 : time taken to estimate error bounds in spqr_ssi.
+
+stats_ssp_N : statistics from spqr_ssp (A,N).
+
+  flag : 0 : ok. spqr_ssp converged with est. relative error <= opts_ssp.convergence_factor.
+  est_svals :  9.53893e-13
+      : estimated singular value(s) of A*N or A'*NT, from spqr_ssp.
+  est_error_bounds :  9.02516e-14
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  1
+      : index of singular value(s), for bounds.
+  iters : 6 : iterations in spqr_ssi or spqr_ssp.
+  time : 0.0786006 : total time taken (includes all timings below).
+  time_initialize : 0.000449645 : time to initialize.
+  time_svd : 0.00475822 : total time taken by svd.
+  time_iters : 0.0765276 : time for spqr_ssi iterations.
+  time_est_error_bounds : 3.1375e-05 : time taken to estimate error bounds in spqr_ssi.
+  stats_ssp_N.opts_used.k : 1 : number of singular values to compute in spqr_ssp(A,N).
+
+---------------------------------------------------------------
+another rare case:
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Regtools/heat_200.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Regtools/heat_200.mat
+
+Problem = 
+
+        title: 'HEAT 200x200 Test problem: inverse heat equation.'
+            A: [200x200 double]
+            b: [200x1 double]
+            x: [200x1 double]
+         SJid: 242
+         UFid: -1
+         name: 'Regtools/heat_200'
+         date: '1982'
+       author: 'Carasso, Elden'
+           ed: 'Per Christian Hansen'
+         kind: 'ill-posed problem'
+        notes: [17x73 char]
+        svals: [200x1 double]
+    sval_info: 'Routine svd from Matlab 7.6.0.324 (R2008a) used to calculate the singular values.'
+
+
+  flag : 4 : failure.  Overflow during inverse power method.
+  rank : -1 : estimate of numerical rank.
+  rank_spqr : 198 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1.11022e-14 : numerical tolerance used.
+  tol_alt : -1 : alternate numerical tolerance used.
+  normest_A : 0.355517 : estimate of Euclidean norm of A.
+  est_sval_upper_bounds :  -1
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  -1
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  -1
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : -1 : estimated norm(A*N).
+  time : 0.0405573 : total time taken (includes all timings below).
+  time_initialize : 0.0107148 : time to initialize including estimating the norm of A or R.
+  time_svd : 0 : total time taken by svd.
+  time_basis : 0 : time to compute basis.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 1.11022e-14
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 1.11022e-14
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 20100
+               nnzH_upper_bound: 0
+     number_of_frontal_matrices: 1
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 198
+    number_of_column_singletons: 0
+       number_of_singleton_rows: 0
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 727512
+              flops_upper_bound: 80200
+                            tol: 1.1102e-14
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 7.2492e-15
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 0.0097
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 4 : failure.  Overflow during inverse power method.
+  rank :  : estimate of numerical rank.
+  tol : 1.11022e-14 : numerical tolerance used.
+  tol_alt : -1 : alternate numerical tolerance used.
+  est_svals_of_R :  0
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  -1
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  -1
+      : index of singular value(s), for bounds.
+  norm_R_times_N : -1 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : -1 : norm of (R'*NT), from spqr_ssi.
+  iters : 1 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 0 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.00625787 : total time taken (includes all timings below).
+  time_initialize : 0.000474455 : time to initialize.
+  time_svd : 0 : total time taken by svd.
+  time_iters : 0.00088613 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0 : time taken to estimate error bounds in spqr_ssi.
+
+  flag : 4 : failure.  Overflow during inverse power method.
+  rank :  : estimate of numerical rank.
+  tol : 1e-14 : numerical tolerance used.
+  tol_alt : -1 : alternate numerical tolerance used.
+  est_svals_of_R :  0
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  -1
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  -1
+      : index of singular value(s), for bounds.
+  norm_R_times_N : -1 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : -1 : norm of (R'*NT), from spqr_ssi.
+  iters : 1 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 0 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.0162294 : total time taken (includes all timings below).
+  time_initialize : 0.000768599 : time to initialize.
+  time_svd : 0 : total time taken by svd.
+  time_iters : 0.00321402 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0 : time taken to estimate error bounds in spqr_ssi.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 1e-14
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 1e-14
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+---------------------------------------------------------------
+Near-overflow in spqr_ssi, 2nd test:
+downloading http://www.math.sjsu.edu/singular/matrices/mat/GHS_indef/laser.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/GHS_indef/laser.mat
+
+Problem = 
+
+         name: 'GHS_indef/laser'
+        title: 'Gould, Hu, & Scott:'
+            A: [3002x3002 double]
+         SJid: 137
+         UFid: 1239
+         date: '2004'
+       author: ''
+           ed: 'N. Gould, Y. Hu, J. Scott'
+         kind: 'materials problem'
+        svals: [3002x1 double]
+    sval_info: 'Routine svd from Matlab 7.6.0.324 (R2008a) used to calculate the singular values.'
+
+
+  flag : 3 : poor results.  stats.rank is likely too high.
+  rank : 2990 : estimate of numerical rank.
+  tol : 2.66454e-12 : numerical tolerance used.
+  normest_R : 4.24912 : estimate of Euclidean norm of R (calculated for spqr_ssi).
+  est_svals_of_R :  1.98996e-252 8.38236e-253 6.11455e-253 3.17976e-253 1.10908e-253 4.70703e-254 5.73529e-255 2.30014e-256 5.15646e-287 4.69716e-287
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.644895 0.619061 0.782134 0.644269 0.776826 0.707497 0.921243 0.966076 6.96139e-16 3.66017e-17
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  2991 2992 2993 2994 2995 2996 2997 2998 2999 3000
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0.935774 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 1.2243 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 0 : number of large singular values found.
+  final_blocksize : 10 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.116426 : total time taken (includes all timings below).
+  time_initialize : 0.00408767 : time to initialize including estimating the norm of A or R.
+  time_svd : 0.0533761 : total time taken by svd.
+  time_iters : 0.0743084 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.0113516 : time taken to estimate error bounds in spqr_ssi.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 2.66454e-12
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 2.66454e-12
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+  flag : 3 : poor results.  stats.rank is likely too high.
+  rank : 2990 : estimate of numerical rank.
+  tol : 2.66454e-12 : numerical tolerance used.
+  normest_R : 4.24912 : estimate of Euclidean norm of R (calculated for spqr_ssi).
+  est_svals_of_R :  1.98996e-252 8.38236e-253 6.11455e-253 3.17976e-253 1.10908e-253 4.70703e-254 5.73529e-255 2.30014e-256 5.15646e-287 4.69716e-287
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.644895 0.619061 0.782134 0.644269 0.776826 0.707497 0.921243 0.966076 6.96139e-16 3.66017e-17
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  2991 2992 2993 2994 2995 2996 2997 2998 2999 3000
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0.935774 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 1.2243 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 0 : number of large singular values found.
+  final_blocksize : 10 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.0834376 : total time taken (includes all timings below).
+  time_initialize : 0.0033231 : time to initialize including estimating the norm of A or R.
+  time_svd : 0.058933 : total time taken by svd.
+  time_iters : 0.0558443 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.0087643 : time taken to estimate error bounds in spqr_ssi.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 2.66454e-12
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 2.66454e-12
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+  flag : 3 : poor results.  stats.rank is likely too high.
+  rank : 2990 : estimate of numerical rank.
+  tol : 2.66454e-12 : numerical tolerance used.
+  normest_R : 4.24912 : estimate of Euclidean norm of R (calculated for spqr_ssi).
+  est_svals_of_R :  1.98996e-252 8.38236e-253 6.11455e-253 3.17976e-253 1.10908e-253 4.70703e-254 5.73529e-255 2.30014e-256 5.15646e-287 4.69716e-287
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.644895 0.619061 0.782134 0.644269 0.776826 0.707497 0.921243 0.966076 6.96139e-16 3.66017e-17
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  2991 2992 2993 2994 2995 2996 2997 2998 2999 3000
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0.935774 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 1.2243 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 0 : number of large singular values found.
+  final_blocksize : 10 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.080309 : total time taken (includes all timings below).
+  time_initialize : 0.00337819 : time to initialize including estimating the norm of A or R.
+  time_svd : 0.0375243 : total time taken by svd.
+  time_iters : 0.0526907 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.00869351 : time taken to estimate error bounds in spqr_ssi.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 2.66454e-12
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 2.66454e-12
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+  flag : 3 : poor results.  stats.rank is likely too high.
+  rank : 2990 : estimate of numerical rank.
+  tol : 2.66454e-12 : numerical tolerance used.
+  normest_R : 4.24912 : estimate of Euclidean norm of R (calculated for spqr_ssi).
+  est_svals_of_R :  1.98996e-252 8.38236e-253 6.11455e-253 3.17976e-253 1.10908e-253 4.70703e-254 5.73529e-255 2.30014e-256 5.15646e-287 4.69716e-287
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  0.644895 0.619061 0.782134 0.644269 0.776826 0.707497 0.921243 0.966076 6.96139e-16 3.66017e-17
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  2991 2992 2993 2994 2995 2996 2997 2998 2999 3000
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 0.935774 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 1.2243 : norm of (R'*NT), from spqr_ssi.
+  iters : 3 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 0 : number of large singular values found.
+  final_blocksize : 10 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.0908939 : total time taken (includes all timings below).
+  time_initialize : 0.00313181 : time to initialize including estimating the norm of A or R.
+  time_svd : 0.0562253 : total time taken by svd.
+  time_iters : 0.0635849 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.00869098 : time taken to estimate error bounds in spqr_ssi.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 2.66454e-12
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 2.66454e-12
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+---------------------------------------------------------------
+case where rank appears correct but with alternate tolerance:
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Sandia/oscil_dcop_34.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Sandia/oscil_dcop_34.mat
+
+Problem = 
+
+         name: 'Sandia/oscil_dcop_34'
+        title: 'Sandia/oscil_dcop_34 circuit simulation matrix. Sandia National Lab.'
+            A: [430x430 double]
+            b: [430x1 double]
+         SJid: 183
+         UFid: 1145
+         kind: 'subsequent circuit simulation problem'
+        notes: 'next: Sandia/oscil_dcop_35 first: Sandia/oscil_dcop_01'
+         date: '2003'
+       author: 'R. Hoekstra'
+           ed: 'T. Davis'
+        svals: [430x1 double]
+    sval_info: 'Routine svd from Matlab 7.6.0.324 (R2008a) used to calculate the singular values.'
+
+
+  flag : 2 : stats.rank may be correct for tolerance stats.tol,
+      but error bounds are too high to confirm this.
+  rank : 420 : estimate of numerical rank.
+  rank_spqr : 422 : estimate of numerical rank from spqr.
+      This is normally an upper bound on the true rank.
+  tol : 1.00117e-07 : numerical tolerance used.
+  normest_A : 2.001e+06 : estimate of Euclidean norm of A.
+  est_sval_upper_bounds :  2.38962e-07 1.00766e-07
+      : estimated upper bounds on singular value(s).
+  est_sval_lower_bounds :  2.03094e-08 0
+      : estimated lower bounds on singular value(s).
+  sval_numbers_for_bounds :  420 421
+      : index of singular value(s), for bounds.
+  est_norm_A_times_N : 9.99216e-08 : estimated norm(A*N).
+  est_err_bound_norm_A_times_N : 8.44851e-10 : estimated error bound for norm(A*N).
+  time : 0.0505359 : total time taken (includes all timings below).
+  time_initialize : 0.00408757 : time to initialize including estimating the norm of A or R.
+  time_svd : 0.0017679 : total time taken by svd.
+  time_basis : 0.000282482 : time to compute basis.
+
+opts_used : options for the spqr_rank functions:
+
+  get_details : 1 : extensive statistics returned
+  tol : 1.00117e-07
+  nsvals_large : 1 : # of large singular values to estimate.
+  nsvals_small : 1 : # of small singular values to estimate.
+  implicit_null_space_basis : true : N represented in Householder form.
+  start_with_A_transpose : false : spqr_cod computes qr(A).
+  ssi_tol : 1.00117e-07
+  ssi_min_block : 3 : ssi initial block size.
+  ssi_max_block : 10 : spqr_ssi max block size.
+  ssi_min_iters : 3 : min # of iterations before checking convergence
+  ssi_max_iters : 100 : max # of iterations before stopping spqr_ssi iterations
+  ssi_nblock_increment : 5 : block size inc. if convergence not met.
+  ssi_convergence_factor : 0.1 : spqr_ssi termination criterion.
+  k :   ssp_min_iters : 4 : min # of iterations before checking convergence
+  ssp_max_iters : 10 : max # of ssp iterations before stopping iterations
+  ssp_convergence_factor : 0.1 ssp terminates when relative error drops below this value.
+  repeatable : true : internal random stream used to guarantee repeatability
+
+info_spqr1 : statistics from first QR factorization.
+
+               nnzR_upper_bound: 6559
+               nnzH_upper_bound: 3129
+     number_of_frontal_matrices: 47
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 422
+    number_of_column_singletons: 20
+       number_of_singleton_rows: 20
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 199859
+              flops_upper_bound: 177357
+                            tol: 1.0012e-07
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 1.0836e-07
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 0.0018
+
+
+info_spqr2 : statistics from second QR factorization.
+
+               nnzR_upper_bound: 16363
+               nnzH_upper_bound: 11663
+     number_of_frontal_matrices: 33
+            number_of_TBB_tasks: 1
+                rank_A_estimate: 422
+    number_of_column_singletons: 6
+       number_of_singleton_rows: 6
+                       ordering: 'colamd'
+          memory_usage_in_bytes: 645040
+              flops_upper_bound: 1490925
+                            tol: 0
+          number_of_TBB_threads: 'default'
+                     norm_E_fro: 0
+         spqr_compiled_with_TBB: 'no'
+       spqr_compiled_with_METIS: 'yes'
+                           time: 0.0034
+
+
+stats_ssi : statistics from spqr_ssi.
+
+  flag : 1 : stats.rank may be correct for tolerance stats.tol,
+      but error bounds are too high to confirm this.
+      However, stats.rank appears to be correct for tolerance stats.tol_alt.
+  rank : 420 : estimate of numerical rank.
+  tol : 1.00117e-07 : numerical tolerance used.
+  tol_alt : 1.28674e-07 : alternate numerical tolerance used.
+  est_svals_of_R :  1.29636e-07 9.98811e-08 6.10815e-08
+      : estimated singular value(s) of triangular matrix R.
+  est_error_bounds :  9.61685e-10 1.05907e-08 3.36933e-11
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  420 421 422
+      : index of singular value(s), for bounds.
+  norm_R_times_N : 1.00998e-07 : norm of (R*N), from spqr_ssi.
+  norm_R_transpose_times_NT : 9.98811e-08 : norm of (R'*NT), from spqr_ssi.
+  iters : 6 : iterations in spqr_ssi or spqr_ssp.
+  nsvals_large_found : 1 : number of large singular values found.
+  final_blocksize : 3 : final block size in spqr_ssi.
+  ssi_max_block_used : 10 : max block size for spqr_ssi.
+  ssi_min_block_used : 3 : initial block size for spqr_ssi.
+  time : 0.00941014 : total time taken (includes all timings below).
+  time_initialize : 0.000496846 : time to initialize.
+  time_svd : 0.00134638 : total time taken by svd.
+  time_iters : 0.00568262 : time for spqr_ssi iterations.
+  time_est_error_bounds : 0.000479269 : time taken to estimate error bounds in spqr_ssi.
+
+stats_ssp_N : statistics from spqr_ssp (A,N).
+
+  flag : 0 : ok. spqr_ssp converged with est. relative error <= opts_ssp.convergence_factor.
+  est_svals :  9.99216e-08
+      : estimated singular value(s) of A*N or A'*NT, from spqr_ssp.
+  est_error_bounds :  8.44851e-10
+      : error bounds for each singular value.
+  sval_numbers_for_bounds :  1
+      : index of singular value(s), for bounds.
+  iters : 4 : iterations in spqr_ssi or spqr_ssp.
+  time : 0.0149239 : total time taken (includes all timings below).
+  time_initialize : 0.000427153 : time to initialize.
+  time_svd : 0.000421518 : total time taken by svd.
+  time_iters : 0.012899 : time for spqr_ssi iterations.
+  time_est_error_bounds : 2.9054e-05 : time taken to estimate error bounds in spqr_ssi.
+  stats_ssp_N.opts_used.k : 1 : number of singular values to compute in spqr_ssp(A,N).
+
+Please wait ...
+ 1 of 10 : id:  215 HB/rgg010
+downloading http://www.math.sjsu.edu/singular/matrices/mat/HB/rgg010.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/HB/rgg010.mat
+ 2 of 10 : id:  229 Regtools/foxgood_100
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Regtools/foxgood_100.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Regtools/foxgood_100.mat
+ 3 of 10 : id:  241 Regtools/heat_100
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Regtools/heat_100.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Regtools/heat_100.mat
+ 4 of 10 : id:  245 Regtools/i_laplace_100
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Regtools/i_laplace_100.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Regtools/i_laplace_100.mat
+ 5 of 10 : id:  249 Regtools/parallax_100
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Regtools/parallax_100.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Regtools/parallax_100.mat
+ 6 of 10 : id:  242 Regtools/heat_200
+ 7 of 10 : id:  173 Sandia/oscil_dcop_24
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Sandia/oscil_dcop_24.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Sandia/oscil_dcop_24.mat
+ 8 of 10 : id:  183 Sandia/oscil_dcop_34
+ 9 of 10 : id:  263 Regtools/wing_500
+downloading http://www.math.sjsu.edu/singular/matrices/mat/Regtools/wing_500.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/Regtools/wing_500.mat
+10 of 10 : id:  134 HB/jgl009
+downloading http://www.math.sjsu.edu/singular/matrices/mat/HB/jgl009.mat
+to /Users/davis/sparse/MyPapers/Foster/spqr_rank/SJget/mat/HB/jgl009.mat
+
+All tests passed.
+diary off
diff --git a/MATLAB_Tools/spqr_rank/private/tol_is_default.m b/MATLAB_Tools/spqr_rank/private/tol_is_default.m
new file mode 100644
index 0000000..7bfaf5c
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/private/tol_is_default.m
@@ -0,0 +1,8 @@
+function s = tol_is_default (tol)
+%TOL_IS_DEFAULT return true if tol is default, false otherwise
+% usage: s = tol_is_default (tol)
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+s = (isempty (tol) || ischar (tol) || (isreal (tol) && tol < 0)) ;
+
diff --git a/MATLAB_Tools/spqr_rank/quickdemo_spqr_rank.m b/MATLAB_Tools/spqr_rank/quickdemo_spqr_rank.m
new file mode 100644
index 0000000..3166555
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/quickdemo_spqr_rank.m
@@ -0,0 +1,113 @@
+function quickdemo_spqr_rank
+%QUICKDEMO_SPQR_RANK quick demo of the spqr_rank package
+%
+% Example:
+%   quickdemo_spqr_rank
+%
+% See also spqr_basic, spqr_cod, spqr_null, spqr_pinv, spqr.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+A = sparse(gallery('kahan',100));
+B = randn(100,1); B = B / norm(B);
+
+%-------------------------------------------------------------------------------
+% spqr_basic test / demo
+%-------------------------------------------------------------------------------
+
+fprintf ('\nSPQR_BASIC approximate basic solution to min(norm(B-A*x)):\n') ;
+fprintf ('x = spqr_basic(A,B)\n') ;
+
+x = spqr_basic(A,B);
+norm_x = norm(x) ;
+% compare with
+x2 = spqr_solve(A,B);
+norm_x2 = norm(x2) ;
+% or
+[x,stats,NT]=spqr_basic(A,B);                                               %#ok
+norm_NT_transpose_times_A = norm(full(spqr_null_mult(NT,A,0))) ;
+% or
+opts = struct('tol',1.e-5) ;
+[x,stats,NT]=spqr_basic(A,B,opts);                                          %#ok
+display (stats) ;
+fprintf ('norm of x: %g\nnorm of x with just SPQR: %g\n', norm_x, norm_x2) ;
+
+if (norm_NT_transpose_times_A > 1e-12)
+    error ('test failure') ;
+end
+
+%-------------------------------------------------------------------------------
+% spqr_cod test / demo
+%-------------------------------------------------------------------------------
+
+fprintf ('\nSPQR_COD approximate pseudoinverse solution to min(norm(B-A*x)\n') ;
+fprintf ('x = spqr_cod(A,B)\n') ;
+
+x = spqr_cod(A,B);
+x_pinv = pinv(full(A))*B;
+rel_error_in_x = norm(x - x_pinv) / norm(x_pinv) ;
+fprintf ('relative error in x: %g\n', rel_error_in_x) ;
+% or
+[x,stats,N,NT]=spqr_cod(A,B);                                               %#ok
+norm_A_times_N = norm(full(spqr_null_mult(N,A,3))) ;
+norm_A_transpose_times_NT = norm(full(spqr_null_mult(NT,A,0))) ;
+% or
+opts = struct('tol',1.e-5) ;
+[x,stats]=spqr_cod(A,B,opts);                                               %#ok
+display (stats) ;
+
+if (max ([rel_error_in_x norm_A_times_N norm_A_transpose_times_NT]) > 1e-12)
+    error ('test failure') ;
+end
+
+%-------------------------------------------------------------------------------
+% spqr_null test / demo
+%-------------------------------------------------------------------------------
+
+fprintf ('\nSPQR_NULL orthonormal basis for numerical null space\n') ;
+fprintf ('N = spqr_null(A)\n') ;
+
+N = spqr_null(A) ;
+display (N) ;
+norm_A_times_N = norm(full(spqr_null_mult(N,A,3))) ;
+% or
+opts = struct('tol',1.e-5,'get_details',2);
+[N,stats]=spqr_null(A,opts);                                                %#ok
+rank_spqr_null = stats.rank ;
+rank_spqr = stats.rank_spqr ;
+rank_svd = rank(full(A)) ;
+
+fprintf ('rank with spqr: %g with svd: %g with spqr_null: %g\n', ...
+    rank_spqr, rank_svd, rank_spqr_null) ;
+
+if (rank_spqr_null ~= rank_svd || norm_A_times_N > 1e-12)
+    error ('test failure') ;
+end
+
+%-------------------------------------------------------------------------------
+% spqr_pinv test / demo
+%-------------------------------------------------------------------------------
+
+fprintf ('\nSPQR_PINV approx pseudoinverse solution to min(norm(B-A*X))\n') ;
+fprintf ('x = spqr_pinv(A,B)\n') ;
+
+x = spqr_pinv(A,B) ;
+x_pinv = pinv(full(A))*B ;
+rel_error_in_x = norm (x - x_pinv) / norm (x_pinv) ;
+fprintf ('relative error in x: %g\n', rel_error_in_x) ;
+% or
+[x,stats,N,NT] = spqr_pinv (A,B) ;                                          %#ok
+display (N) ;
+display (NT) ;
+norm_A_times_N = norm (full(spqr_null_mult(N,A,3))) ;
+norm_N_transpose_times_A = norm (full(spqr_null_mult(NT,A,0))) ;
+% or
+opts = struct('tol',1.e-5) ;
+[x,stats] = spqr_pinv (A,B,opts) ;                                          %#ok
+display (stats) ;
+
+if (max ([rel_error_in_x norm_A_times_N norm_N_transpose_times_A ]) > 1e-12)
+    error ('test failure') ;
+end
+
+fprintf ('quickdemo_spqr_rank: all tests passed\n') ;
diff --git a/MATLAB_Tools/spqr_rank/save_samples_demo_spqr_rank.mat b/MATLAB_Tools/spqr_rank/save_samples_demo_spqr_rank.mat
new file mode 100644
index 0000000..ed56095
Binary files /dev/null and b/MATLAB_Tools/spqr_rank/save_samples_demo_spqr_rank.mat differ
diff --git a/MATLAB_Tools/spqr_rank/spqr_basic.m b/MATLAB_Tools/spqr_rank/spqr_basic.m
new file mode 100644
index 0000000..2bdec51
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_basic.m
@@ -0,0 +1,253 @@
+function [x,stats,NT] = spqr_basic (A, varargin)
+%SPQR_BASIC approximate basic solution to min(norm(B-A*x))
+% for a rank deficient matrix A.
+%
+% [x,stats,NT] = spqr_basic (A,B,opts)
+%
+% This function returns an approximate basic solution to
+%       min || B - A x ||                     (1)
+% for rank deficient matrices A.
+%
+% Optionally returns statistics including the numerical rank of the matrix A
+% for tolerance tol (i.e. the number of singular values > tol), and
+% an orthnormal basis for the numerical null space of A'.
+%
+% The solution is approximate since the algorithm allows small perturbations in
+% A (columns of A may be changed by no more than opts.tol).
+%
+% Input:
+%   A -- an m by n matrix
+%   B -- an m by p right hand side matrix
+%   opts (optional) -- type 'help spqr_rank_opts' for details.
+%
+% Output:
+%   x -- this n by p matrix contains basic solutions to (1).  Each column of x
+%       has at most k nonzero entries where k is the approximate numerical rank
+%       returned by spqr.  The magnitude of x(:,j) is bounded by
+%       norm(B(:,j))/s, where s = stats.est_sval_lower_bounds(nlarge_svals) is
+%       an estimated lower bound on (stats.rank)th singular value of
+%       A.
+%   stats -- statistics, type 'help spqr_rank_stats' for details.
+%   NT -- orthonormal basis for numerical null space of A'.
+%
+% Example:
+%
+%     A = sparse(gallery('kahan',100));
+%     B = randn(100,1); B = B / norm(B);
+%     x = spqr_basic(A,B);
+%     norm_x = norm(x)
+%     % note compare with
+%     x2 = spqr_solve(A,B);
+%     norm_x2 = norm(x2)
+%     % or
+%     [x,stats,NT]=spqr_basic(A,B);
+%     norm_NT_transpose_times_A = norm(full(spqr_null_mult(NT,A,0)))
+%     % or
+%     opts = struct('tol',1.e-5) ;
+%     [x,stats,NT]=spqr_basic(A,B,opts);
+%     stats
+%
+% See also spqr_cod, spqr_null, spqr_pinv, spqr_ssi, spqr_ssp
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% Algorithm:  First spqr is used to construct a QR factorization of the
+%    m by n matrix A: A*P1 = Q1*R where R' = [ R1' 0 ] + E1, R1 is a
+%    k by n upper trapezoidal matrix and E1 is a small error matrix.
+%    Let R11 be the leading k by k submatrix of R1. Subspace iteration,
+%    using the routine spqr_ssi,  is applied to R11 to determine if the rank
+%    returned by spqr is correct and also, often, to determine the correct
+%    numerical rank.  If k is the correct then the basic solution is
+%    x = R11 \ ch where ch is the first k entries in Q1'*B. If k is not
+%    the correct numerical rank, deflation (see SIAM SISC, 11:519-530,
+%    1990) is used in the calculation of a basic solution.
+
+%-------------------------------------------------------------------------------
+% get opts: tolerance and number of singular values to estimate
+%-------------------------------------------------------------------------------
+
+[B,opts,stats,start_tic,ok] = spqr_rank_get_inputs (A, 1, varargin {:}) ;
+
+if (~ok || nargout > 3)
+    error ('usage: [x,stats,NT] = spqr_basic (A,B,opts)') ;
+end
+
+% get the options
+tol = opts.tol ;
+nsvals_small = opts.nsvals_small ;
+nsvals_large = opts.nsvals_large ;
+get_details = opts.get_details ;
+
+% set the order of the stats fields
+%     stats.flag, stats.rank, stats.rank_spqr, stats.rank_spqr (if get_details
+%     >= 1), stats.tol, stats.tol_alt, stats.normest_A (if calculated),
+%     stats.est_sval_upper_bounds, stats.est_sval_lower_bounds, and
+%     stats.sval_numbers_for_bounds already initialized in spqr_rank_get_inputs
+if nargout == 3
+   stats.est_norm_A_transpose_times_NT = -1 ;
+end
+if get_details == 2
+    stats.stats_ssi = -1 ;
+end
+% order for the additional stats fields for case where get_details is 1 will be
+%     set using spqr_rank_order_fields, called from spqr_rank_assign_stats
+
+if (get_details == 1)
+    stats.opts_used = opts ;
+    stats.time_basis = 0 ;
+end
+
+[m,n] = size (A) ;
+
+%-------------------------------------------------------------------------------
+% QR factorization of A, and initial estimate of numerical rank, via spqr
+%-------------------------------------------------------------------------------
+
+% compute Q*R = A(:,p) and C=Q'*B.  Keep Q if NT is requested; else discard.
+if nargout <= 2
+    [Q,R,C,p,info_spqr1] = spqr_wrapper (A, B, tol, 'discard Q', get_details) ;
+else
+    [Q,R,C,p,info_spqr1] = spqr_wrapper (A, B, tol, 'keep Q', get_details) ;
+end
+
+% the next line is equivalent to: rank_spqr = size (R,1) ;
+rank_spqr = info_spqr1.rank_A_estimate;
+norm_E_fro = info_spqr1.norm_E_fro ;
+
+% save the stats
+if (get_details == 1 || get_details == 2)
+    stats.rank_spqr = rank_spqr ;
+end
+if (get_details == 1)
+    stats.info_spqr1 = info_spqr1 ;
+end
+
+%-------------------------------------------------------------------------------
+% use spqr_ssi to check and adjust numerical rank from spqr
+%-------------------------------------------------------------------------------
+
+R11 = R (:, 1:rank_spqr) ;
+if get_details == 0
+    % opts2 used to include a few extra statistics in stats_ssi
+    opts2 = opts;
+    opts2.get_details = 2;
+else
+    opts2 = opts;
+end
+[U,S,V,stats_ssi] = spqr_ssi (R11, opts2) ;
+
+if (get_details == 1 || get_details == 2)
+    stats.stats_ssi = stats_ssi ;
+end
+if (get_details == 1)
+    stats.time_svd = stats_ssi.time_svd ;
+end
+
+%-------------------------------------------------------------------------------
+% check for early return
+%-------------------------------------------------------------------------------
+
+if stats_ssi.flag == 4
+    % overflow occurred during the inverse power method in ssi
+    [stats x NT] = spqr_failure (4, stats, get_details, start_tic) ;
+    return
+end
+
+%-------------------------------------------------------------------------------
+% Estimate lower bounds on the singular values of A
+%-------------------------------------------------------------------------------
+
+% In spqr the leading rank_spqr column of A*P are unmodified. Therefore
+% by the interleave theorem for singular values the singular values of
+% R11 = R(:,1:rank_spqr) are lower bounds for the singular
+% values of A.  In spqr_ssi estimates for the errors in calculating the
+% singular values of R are in stats_ssi.est_error_bounds.  Therefore,
+% for i = 1:k, where S is k by k, estimated lower bounds on singular
+% values number (rank_spqr - k + i) of A are in est_sval_lower_bounds:
+%
+est_sval_lower_bounds = max (diag(S)' - stats_ssi.est_error_bounds,0) ;
+
+% lower bounds on the remaining singular values of A are zero
+est_sval_lower_bounds (length(S)+1:length(S)+min(m,n)-rank_spqr) = 0 ;
+
+numerical_rank = stats_ssi.rank ;
+
+% limit nsvals_small and nsvals_large due to number of singular values
+%     available and calculated by spqr_ssi
+nsvals_small = min ([nsvals_small, min(m,n) - numerical_rank]) ;
+
+nsvals_large = min (nsvals_large, rank_spqr) ;
+nsvals_large = min ([nsvals_large, numerical_rank, ...
+    numerical_rank - rank_spqr + stats_ssi.ssi_max_block_used]) ;
+
+% return nsvals_large + nsvals_small of the estimates
+est_sval_lower_bounds = est_sval_lower_bounds (1:nsvals_large+nsvals_small) ;
+
+%-------------------------------------------------------------------------------
+% Estimate upper bounds on the singular values of A
+%-------------------------------------------------------------------------------
+
+% By the minimax theorem for singular values, for any rank_spqr by k
+% matrix U with orthonormal columns, for i = 1:k singular value i
+% of U'*R is an upper bound on singular values rank_spqr - k + i of
+% the rank_spqr by n matrix R.  Therefore we have upper bounds on the
+% singular values number rank_spqr - k + i, i = 1:k, of R:
+
+if (get_details == 1)
+    t = tic ;
+end
+
+s = svd (full (U'*R))' ;
+
+if (get_details == 1)
+    stats.time_svd = stats.time_svd + toc (t);
+end
+
+% Since the Frobenius norm of A*P - Q*R is norm_E_fro, the singular
+% values of A and R differ by at most norm_E_fro.  Therefore we have
+% the following upper bounds on the singular values of A:
+est_sval_upper_bounds = s + norm_E_fro;
+
+% upper bounds on the remaining singular values of A are norm_E_fro
+est_sval_upper_bounds(length(S)+1:length(S)+min(m,n)-rank_spqr) = norm_E_fro;
+
+% return nsvals_large + nsvals_small components of the estimates
+est_sval_upper_bounds = est_sval_upper_bounds(1:nsvals_large+nsvals_small);
+
+%-------------------------------------------------------------------------------
+% if requested, calculate orthonormal basis for null space of A'
+%-------------------------------------------------------------------------------
+
+if nargout == 3
+
+    call_from = 1;
+    [NT, stats, stats_ssp_NT, est_sval_upper_bounds] = spqr_rank_form_basis(...
+        call_from, A, U, V ,Q, rank_spqr, numerical_rank, stats, opts, ...
+        est_sval_upper_bounds, nsvals_small, nsvals_large) ;
+
+end
+
+%-------------------------------------------------------------------------------
+% find solution R11 * wh = ch where R11 = R(:,1:rank_spqr)
+%-------------------------------------------------------------------------------
+
+call_from = 1;
+R = R (:, 1:rank_spqr) ;            % discard R12, keep R11 only
+x = spqr_rank_deflation(call_from, R, U, V, C, m, n, rank_spqr, ...
+        numerical_rank, nsvals_large, opts, p);
+
+%-------------------------------------------------------------------------------
+% determine flag which indicates accuracy of the estimated numerical rank
+%    and return statistics
+%-------------------------------------------------------------------------------
+
+call_from = 1;
+stats_ssp_N = [];
+if nargout < 3
+    stats_ssp_NT = [ ] ;
+end
+stats  =  spqr_rank_assign_stats(...
+   call_from, est_sval_upper_bounds, est_sval_lower_bounds, tol, ...
+   numerical_rank, nsvals_small, nsvals_large, stats, ...
+   stats_ssi, opts, nargout, stats_ssp_N, stats_ssp_NT, start_tic) ;
+
diff --git a/MATLAB_Tools/spqr_rank/spqr_cod.m b/MATLAB_Tools/spqr_rank/spqr_cod.m
new file mode 100644
index 0000000..ea4e4d9
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_cod.m
@@ -0,0 +1,333 @@
+function [x,stats,N,NT]= spqr_cod(A,varargin)
+%SPQR_COD approximate pseudoinverse solution to min(norm(B-A*x)
+% for a rank deficient matrix A.
+%
+% [x,stats,N,NT] = spqr_cod (A,B,opts)
+%
+% This function returns an approximate pseudoinverse solution to
+%       min || B - A x ||                     (1)
+% for rank deficient matrices A.
+% The psuedoinverse solution is the min norm solution to the
+% least squares problem (1).
+%
+% Optionally returns statistics including the numerical rank of the matrix A
+% for tolerance tol (i.e. the number of singular values > tol), and
+% orthnormal bases for the numerical null spaces of A and A'.
+% The solution is approximate since the algorithm allows small perturbations in
+% A (columns of A may be changed by no more than opts.tol).
+%
+% This routine calculates an approximate complete orthogonal decomposition of
+% A. The routine can be more accurate -- and more expensive -- than spqr_pinv.
+%
+% Input:
+%   A -- an m by n matrix
+%   B -- an m by p right hand side matrix
+%   opts (optional) -- type 'help spqr_rank_opts' for details.
+%
+% Output:
+%   x -- this n by p matrix contains psuedoinverse solutions to (1).
+%   stats -- statistics, type 'help spqr_rank_stats' for details.
+%   N -- orthonormal basis for numerical null space of A.
+%   NT -- orthonormal basis for numerical null space of A'.
+%
+% Example:
+%
+%     A = sparse(gallery('kahan',100));
+%     B = randn(100,1); B = B / norm(B);
+%     x = spqr_cod(A,B);
+%     x_pinv = pinv(full(A))*B;
+%     rel_error_in_x = norm(x - x_pinv) / norm(x_pinv)
+%     % or
+%     [x,stats,N,NT]=spqr_cod(A,B);
+%     norm_A_times_N = norm(full(spqr_null_mult(N,A,3)))
+%     norm_A_transpose_times_NT = norm(full(spqr_null_mult(NT,A,0)))
+%     % or
+%     opts = struct('tol',1.e-5) ;
+%     [x,stats]=spqr_cod(A,B,opts);
+%     stats
+%
+% See also spqr_basic, spqr_null, spqr_pinv, spqr_ssi, spqr_ssp
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% Algorithm:  First spqr is used to construct a QR factorization
+%   of A:
+%       m by n matrix A: A*P1 = Q1*R where R' = [ R1' 0 ] + E1,
+%       R1 is a k by n upper trapezoidal matrix
+%   or A':
+%       n by m matrix A': A'*P1 = Q1*R where R' = [ R1' 0 ] + E1,
+%       R1 is a k by m upper trapezoidal matrix
+%   and where E1 is a small error matrix.
+%
+%    Next a QR factorization of R1' is calculated:
+%    R1' * P2 = Q2 * R2 where R2' = [ T' 0 ] and T is k by k, upper
+%    triangular. This determines an approximate complete orthogonal
+%    decomposition of A:
+%                  [ P2  0 ]    [ T'  0 ]
+%        A = Q1 *  [ 0   I ] *  [ 0   0 ] * Q2' * P1' + (E1*P1').    (2)
+%   or of A':
+%                      [ T  0 ]  [ P2'  0 ]
+%        A = P1 *Q2 *  [ 0  0 ] *[ 0    I ]  * Q1' + (P1*E1').    (2)
+%
+%    This is then used to calculate an approximate pseudoinverse solution
+%    to (1) and an orthogonal basis for the left and right null spaces of
+%    A, when they are requested.  Subspace iteration, using the routine
+%    spqr_ssi,  is applied to T to determine if the rank returned by spqr is
+%    correct and also, often, to determine the correct numerical
+%    rank.  When the two ranks are different deflation (see SIAM SISC,
+%    11:519-530, 1990.) is used in the caculation of the psuedoinverse
+%    solution.
+%
+%    When opts.start_with_A_transpose is 1 (the default value is 0) then
+%    initially spqr constructs a QR factorization of A'.  By default, A
+%    is factorized.
+
+%-------------------------------------------------------------------------------
+% get opts: tolerance and number of singular values to estimate
+%-------------------------------------------------------------------------------
+
+[B,opts,stats,start_tic,ok] = spqr_rank_get_inputs (A, 1, varargin {:}) ;
+
+if (~ok || nargout > 4)
+    error ('usage: [x,stats,N,NT] = spqr_cod (A,B,opts)') ;
+end
+
+% get the options
+tol = opts.tol ;
+nsvals_small = opts.nsvals_small ;
+nsvals_large = opts.nsvals_large ;
+get_details = opts.get_details ;
+start_with_A_transpose = opts.start_with_A_transpose ;
+
+% set the order of the stats fields
+%     stats.flag, stats.rank, stats.rank_spqr, stats.rank_spqr (if get_details
+%     >= 1), stats.tol, stats.tol_alt, stats.normest_A (if calculated),
+%     stats.est_sval_upper_bounds, stats.est_sval_lower_bounds, and
+%     stats.sval_numbers_for_bounds already initialized in spqr_rank_get_inputs
+if nargout >= 3
+    stats.est_norm_A_times_N = -1 ;
+end
+if nargout == 4
+   stats.est_norm_A_transpose_times_NT = -1 ;
+end
+if get_details == 2
+    stats.stats_ssi = -1 ;
+end
+% order for the additional stats fields for case where get_details is 1 will be
+%     set using spqr_rank_order_fields at the end of the routine
+
+
+if (get_details == 1)
+    stats.opts_used = opts ;
+    stats.time_basis = 0 ;
+end
+
+[m,n] = size (A) ;
+
+%-------------------------------------------------------------------------------
+% first QR factorization of A or A', and initial estimate of num. rank, via spqr
+%-------------------------------------------------------------------------------
+
+if (start_with_A_transpose)
+    % Compute Q1*R = A(p1,:)', do not compute C, and keep Q1.
+    [Q1,R,C,p1,info_spqr1] = ...
+        spqr_wrapper (A', [ ], tol, 'keep Q', get_details) ;
+    B = B(p1,:);   % or:  p=1:m; p(p1) = 1:length(p1); B=B(p,:);
+else
+    % Compute Q1*R = A(:,p1), C=Q1'*B.  Keep Q only if needed for NT
+    if nargout <= 3
+        [Q1,R,C,p1,info_spqr1] = ...
+            spqr_wrapper (A, B, tol, 'discard Q', get_details) ;
+    else
+        [Q1,R,C,p1,info_spqr1] = ...
+            spqr_wrapper (A, B, tol, 'keep Q', get_details) ;
+    end
+end
+
+% the next line is the same as: rank_spqr = size (R,1) ;
+rank_spqr = info_spqr1.rank_A_estimate;
+norm_E_fro = info_spqr1.norm_E_fro ;
+
+% save the stats
+if (get_details == 1 || get_details == 2)
+    stats.rank_spqr = rank_spqr ;
+end
+
+if (get_details == 1)
+    stats.info_spqr1 = info_spqr1 ;
+end
+
+%-------------------------------------------------------------------------------
+% second QR factorization of R', with zero tolerance
+%-------------------------------------------------------------------------------
+
+if (start_with_A_transpose)
+    % Compute Q2*R2 = R(p2,:)', C=Q2'*B, overwrite R with R2.  Keep Q for NT
+    if nargout <= 3
+        [Q2,R,C,p2,info_spqr2] = ...
+            spqr_wrapper (R', B, 0, 'discard Q', get_details) ;
+    else
+        [Q2,R,C,p2,info_spqr2] = ...
+            spqr_wrapper (R', B, 0, 'keep Q', get_details) ;
+    end
+else
+    % Compute Q2*R2 = R(p2,:)', do not compute C, keep Q2, overwrite R with R2.
+    [Q2,R,ignore,p2,info_spqr2] = spqr_wrapper (R', [ ], 0, 'keep Q', ...
+        get_details) ;                                                      %#ok
+    clear ignore
+end
+
+if (get_details == 1)
+    stats.info_spqr2 = info_spqr2 ;
+end
+
+%-------------------------------------------------------------------------------
+% check if the numerical rank is consistent between the two QR factorizations
+%-------------------------------------------------------------------------------
+
+if rank_spqr ~= size (R,1)
+    % Approximate rank from two sparse QR factorizations are inconsistent.
+    % This should "never" happen.  We know of no matrix that triggers this
+    % condition, and so the following line of code is untested.
+    error ('spqr_rank:inconsistent', 'inconsistent rank estimates') ; % untested
+    % rather than returning an error, we could do the following instead,
+    % but the code would be still untestable:
+    %   warning ('spqr_rank:inconsistent', 'inconsistent rank estimates') ;
+    %   [stats x N NT] = spqr_failure (5, stats, get_details, start_tic) ;
+    %   return
+end
+
+% R is now square and has dimension rank_spqr
+
+%-------------------------------------------------------------------------------
+% use spqr_ssi to check and adjust numerical rank from spqr
+%-------------------------------------------------------------------------------
+
+R11 = R ;
+if get_details == 0
+    % opts2 used to include a few extra statistics in stats_ssi
+    opts2 = opts;
+    opts2.get_details = 2;
+else
+    opts2 = opts;
+end
+[U,S,V,stats_ssi] = spqr_ssi (R11, opts2) ;
+
+if (get_details == 1 || get_details == 2)
+    stats.stats_ssi = stats_ssi ;
+end
+if (get_details == 1)
+    stats.time_svd = stats_ssi.time_svd ;
+end
+
+
+%-------------------------------------------------------------------------------
+% check for early return
+%-------------------------------------------------------------------------------
+
+if stats_ssi.flag == 4
+    % overflow occurred during the inverse power method in spqr_ssi
+    [stats x N NT] = spqr_failure (4, stats, get_details, start_tic) ;
+    return
+end
+
+%-------------------------------------------------------------------------------
+% Estimate lower bounds on the singular values of A
+%-------------------------------------------------------------------------------
+
+% In equation (2) the Frobenius norm of E1*P1' is equal to norm_E_fro =
+% info_spqr1.norm_E_fro and therefore || E1*P1' || <= norm_E_fro.
+% By the pertubation theorem for singular values, for i = 1, 2, ...,
+% rank_spqr, singular value i of A differs at most by norm_E_fro
+% from singular value i of R.  The routine spqr_ssi returns estimates of the
+% singular values of R in S and stats_ssi.est_error_bounds contains
+% estimates of error bounds on the entries in S. Therefore,
+% for i = 1:k, where S is k by k, estimated lower bounds on singular
+% values number (rank_spqr - k + i) of A are in est_sval_lower_bounds:
+%
+est_sval_lower_bounds = ...
+    max (diag(S)' - stats_ssi.est_error_bounds - norm_E_fro, 0) ;
+
+% lower bounds on the remaining singular values of A are zero
+est_sval_lower_bounds (length(S)+1:length(S)+min(m,n)-rank_spqr) = 0 ;
+
+numerical_rank = stats_ssi.rank ;
+
+% limit nsvals_small and nsvals_large due to number of singular values
+%     available and calculated by spqr_ssi
+nsvals_small = min ([nsvals_small, min(m,n) - numerical_rank]) ;
+
+nsvals_large = min (nsvals_large, rank_spqr) ;
+nsvals_large = min ([nsvals_large, numerical_rank, ...
+    numerical_rank - rank_spqr + stats_ssi.ssi_max_block_used]) ;
+
+% return nsvals_large + nsvals_small of the estimates
+est_sval_lower_bounds = est_sval_lower_bounds (1:nsvals_large+nsvals_small) ;
+
+%-------------------------------------------------------------------------------
+% Estimate upper bounds on the singular values of A
+%-------------------------------------------------------------------------------
+
+% Again, by the pertubation theorem for singular values, for i = 1, 2,...,
+% rank_spqr, singular value i of A differs at most by norm_E_fro
+% from singular value i of R.  The routine spqr_ssi returns estimates of the
+% singular values of R in S and stats_ssi.est_error_bounds contains
+% estimates of error bounds on the entries in S. Therefore,
+% for i = 1:k, where S is k by k, estimated lower bounds on singular
+% values number (rank_spqr - k + i) of A are in est_sval_upper_bounds:
+est_sval_upper_bounds = diag(S)' + stats_ssi.est_error_bounds + norm_E_fro;
+
+% upper bounds on the remaining singular values of A are norm_E_fro
+est_sval_upper_bounds(length(S)+1:length(S)+min(m,n)-rank_spqr) = norm_E_fro;
+
+% return nsvals_large + nsvals_small components of the estimates
+est_sval_upper_bounds = est_sval_upper_bounds(1:nsvals_large+nsvals_small);
+
+%-------------------------------------------------------------------------------
+% calculate orthonormal basis for null space of A
+%-------------------------------------------------------------------------------
+
+% always construct null space basis for A since this can produce better
+%    estimated upper bounds on the singular values and should not require
+%    significantly more work or memory
+
+call_from = 2;
+[N, stats, stats_ssp_N, est_sval_upper_bounds] = spqr_rank_form_basis(...
+    call_from, A, U, V ,Q1, rank_spqr, numerical_rank, stats, opts, ...
+    est_sval_upper_bounds, nsvals_small, nsvals_large, p1, Q2, p2) ;
+
+%-------------------------------------------------------------------------------
+% if requested, form null space basis of A'
+%-------------------------------------------------------------------------------
+
+if nargout == 4
+
+    call_from = 3;
+    [NT, stats, stats_ssp_NT, est_sval_upper_bounds] = spqr_rank_form_basis(...
+        call_from, A, U, V ,Q1, rank_spqr, numerical_rank, stats, opts, ...
+        est_sval_upper_bounds, nsvals_small, nsvals_large, p1, Q2, p2) ;
+
+end
+
+%-------------------------------------------------------------------------------
+% find psuedoinverse solution to (1):
+%-------------------------------------------------------------------------------
+
+call_from = 2 ;
+x = spqr_rank_deflation(call_from, R, U, V, C, m, n, rank_spqr, ...
+        numerical_rank, nsvals_large, opts, p1, p2, N, Q1, Q2) ;
+
+%-------------------------------------------------------------------------------
+% determine flag which indicates accuracy of the estimated numerical rank
+%    and return statistics
+%-------------------------------------------------------------------------------
+
+call_from = 2;
+if nargout < 4
+    stats_ssp_NT = [ ];
+end
+stats  =  spqr_rank_assign_stats(...
+   call_from, est_sval_upper_bounds, est_sval_lower_bounds, tol, ...
+   numerical_rank, nsvals_small, nsvals_large, stats, ...
+   stats_ssi, opts, nargout, stats_ssp_N, stats_ssp_NT, start_tic) ;
+
diff --git a/MATLAB_Tools/spqr_rank/spqr_explicit_basis.m b/MATLAB_Tools/spqr_rank/spqr_explicit_basis.m
new file mode 100644
index 0000000..ed92fe1
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_explicit_basis.m
@@ -0,0 +1,34 @@
+function Nexp = spqr_explicit_basis (N, type)
+%SPQR_EXPLICIT_BASIS converts a null space basis to an explicit matrix
+%
+% Convert a orthonormal null space bases stored implicitly and created
+% by spqr_basic, spqr_null, spqr_pinv, or spqr_cod to an an explicit
+% sparse, or optionally full, matrix.  If the input is not a implicit null
+% space bases the input is returned unchanged.
+%
+% Examples:
+%    A = sparse(gallery('kahan',100));
+%    N = spqr_null(A);                  % creates an implicit null space basis
+%    Nexp = spqr_explicit_basis (N) ;         % converts to a sparse matrix
+%    Nexp = spqr_explicit_basis (N,'full') ;  % converts to a dense matrix
+%
+% Note that the dense matrix basis will require less memory than the implicit
+% basis if whos_N.bytes > ( prod(size(N.X)) * 8 ) where whos_N = whos('N').
+%
+% See also spqr_basic, spqr_null, spqr_cod, spqr_pinv, spqr_null_mult.
+
+% Copyright 2012, Leslie Foster and Timothy A. Davis
+
+is_implicit_basis = ...
+    isstruct(N) && isfield(N,'Q') && isfield(N,'X') ;
+
+if is_implicit_basis && nargin == 1
+    Nexp = spqr_null_mult(N,speye(size(N.X,2)),1) ;
+elseif is_implicit_basis && nargin == 2 && strcmp(type,'full')
+    % Nexp = spqr_null_mult(N,eye(size(N.X,2)),1) ; % slow for large nullity
+    Nexp = spqr_null_mult(N,speye(size(N.X,2)),1) ;
+    Nexp = full(Nexp) ;
+else
+    Nexp = N ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/spqr_null.m b/MATLAB_Tools/spqr_rank/spqr_null.m
new file mode 100644
index 0000000..e4c2445
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_null.m
@@ -0,0 +1,127 @@
+function [N,stats] = spqr_null (A, varargin)
+%SPQR_NULL finds an orthonormal basis for numerical null space of a matrix
+%
+% [N,stats] = spqr_null(A,opts)
+%
+% Returns an orthonormal basis, N, for the numerical null space of the
+% m by n matrix A for tolerance tol. An orthonormal basis for the numerical
+% null space is an  n by k matrix, stored explicitly or implicitly (see
+% below), with orthonormal columns such that
+%                 || A * N || <= tol                    (1)
+% and no matrix with more than k orthonormal columns satisfies (1).
+% This routine, when the error flag is 0, ensures that
+%          an estimate of || A * N || satisfies (1).
+% Also, optionally, the routine returns the numerical rank of the matrix
+% A for tolerance tol (i.e. the number of singular values > tol) and
+% additional statistics described below.
+%
+% Input:  A -- an m by n matrix
+%         opts (optional) -- type 'help spqr_rank_opts' for details.
+% Output:
+%         N - orthonormal basis for the numerical null space of A:
+%             an estimate of || A * N || <= opts.tol, when stats.flag is 0.
+%
+%  Examples:
+%     A=sparse(gallery('kahan',100));
+%     N = spqr_null(A);
+%     norm_A_times_N = norm(full(spqr_null_mult(N,A,3)))
+%     % or
+%     opts = struct('tol',1.e-5,'get_details',2);
+%     [N,stats]=spqr_null(A,opts);
+%     rank_spqr_null = stats.rank
+%     rank_spqr = stats.rank_spqr
+%     rank_svd = rank(full(A))
+%
+% See also spqr_basic, spqr_null, spqr_pinv, spqr_cod.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% Algorithm:  First spqr is used to construct a QR factorization of the
+%    n by m matrix A': A'*P1 = Q1*R where R' = [ R1' 0 ] + E1, R1 is a
+%    k by n upper trapezoidal matrix and E1 is a small error matrix.
+%    Let R1  = [ R11 R12] where R11 is k by k and R12 is k by n-k.
+%    Subspace iteration, using the routine spqr_ssi, is applied to R11 to
+%    determine if the rank returned by spqr, k, is correct. If k is correct
+%    then an orthogonal basis for the null space of A is
+%                          [ 0 ]
+%                 N = Q1 * [ I ]                    (1)
+%    where I is an n-k by n-k identity matrix and 0 is k by n-k.  Suppose
+%    that the numerical rank of R11 is r < k.  The routine spqr_ssi constructs
+%    an orthogonal basis, U, for the numerical null space of R11'.  Then
+%    the candidate for the orthogonal basis for the null space of A is
+%                          [ U 0 ]
+%                 N = Q1 * [ 0 I ]                  (2)
+%
+%    where I is n-k by n-k and U is k by k-r.  N is used to estimate
+%    upper bounds on the smallest n-r singular values of A to confirm
+%    (or not) that N is indeed an orthogonal basis for the numerical null
+%    space of A.  If opts.implicit_null_space_basis is 1 (the default) then
+%    N is stored implicitly by saving the factors in (1) or (2) and storing
+%    Q1 using its Householder factors.
+
+%-------------------------------------------------------------------------------
+% get opts: tolerance and number of singular values to estimate
+%-------------------------------------------------------------------------------
+
+[ignore,opts,stats,start_tic,ok] = spqr_rank_get_inputs (A,0,varargin {:}); %#ok
+clear ignore
+
+if (~ok || nargout > 2)
+    error ('usage: [N,stats] = spqr_null (A,opts)') ;
+end
+
+if (opts.get_details == 1)
+    % the only thing needed from stats, above, is stats.time_initialize
+    % and stats.normest_A, if calculated
+    t = stats.time_initialize ;
+    if ( isfield(stats,'normest_A') )
+       normest_A = stats.normest_A ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% use spqr_basic on A' (with no B) to find the null space
+%-------------------------------------------------------------------------------
+
+% In spqr_basic, input B, internal variable C, and output x will all be empty.
+[ignore,stats,N] = spqr_basic (A', [ ], opts) ;                             %#ok
+clear ignore
+
+if (opts.get_details == 1)
+    stats.time_initialize = t ;
+    if exist('normest_A','var')
+        stats.normest_A = normest_A;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% fix the stats to reflect N instead of NT
+%-------------------------------------------------------------------------------
+
+% spqr_basic might return early, so we need to check if they exist.
+if (isfield (stats, 'est_norm_A_transpose_times_NT'))
+    stats.est_norm_A_times_N = stats.est_norm_A_transpose_times_NT  ;
+    stats = rmfield (stats, 'est_norm_A_transpose_times_NT')  ;
+end
+
+if (isfield (stats, 'est_err_bound_norm_A_transpose_times_NT'))
+    stats.est_err_bound_norm_A_times_N = ...
+        stats.est_err_bound_norm_A_transpose_times_NT ;
+    stats = rmfield (stats, 'est_err_bound_norm_A_transpose_times_NT') ;
+end
+
+if (isfield (stats, 'stats_ssp_NT'))
+    stats.stats_ssp_N = stats.stats_ssp_NT;
+    stats = rmfield (stats,'stats_ssp_NT') ;
+end
+
+if opts.get_details == 1
+    % order the fields of stats in a convenient order (the fields when
+    %    get_details is 0 or 2 are already in a good order)
+    stats = spqr_rank_order_fields(stats);
+end
+
+if (opts.get_details == 1)
+    stats.time = toc (start_tic) ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/spqr_null_mult.m b/MATLAB_Tools/spqr_rank/spqr_null_mult.m
new file mode 100644
index 0000000..bbdf4e7
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_null_mult.m
@@ -0,0 +1,253 @@
+function B = spqr_null_mult (N,A,method)
+%SPQR_NULL_MULT multiplies a matrix by numerical null space from spqr_rank methods
+%
+%  Multiplies the matrix A by N, the orthonormal basis for
+%  a numerical null space produced by spqr_basic, spqr_null, spqr_pinv,
+%  or spqr_cod.  N can be stored either implicitly (see the above
+%  routines for details) or as an explicit matrix.
+%
+% Example of use:  B = spqr_null_mult(N,A,method) ;
+%    method = 0: N'*A  (the default)
+%    method = 1: N*A
+%    method = 2: A*N'
+%    method = 3: A*N
+% Also if N is stored implicitly then to create an explicit representation
+% of the orthonormal null space basis
+%    Nexplicit = spqr_null_mult(N,eye(size(N.X,2)),1) ;
+% creates a full matrix and
+%    Nexplicit = spqr_null_mult(N,speye(size(N.X,2)),1) ;
+% creates a sparse matrix.
+%
+% If N is stored implicitly then N can have fields:
+%    N.P contains a permutation vector (N.P is not always present)
+%    N.Q contains sparse Householder transforms from spqr
+%    N.X is a sparse matrix with orthonormal columns
+%
+% N.kind determines how the implicit orthonormal basis is represented.
+%   N.kind = 'P*Q*X':  the basis is N.P*N.Q*N.X
+%   N.kind = 'Q*P*X':  the basis is N.Q*N.P*N.X
+%   N.kind = 'Q*X':    the basis is N.Q*N.X, and N.P does not appear in N
+%
+% Examples
+%
+%   N = spqr_null (A) ;              % find nullspace of A
+%   AN = spqr_null_mult (N,A,3) ;    % compute A*N, which will have a low norm.
+%
+% See also spqr, spqr_basic, spqr_cod, spqr_null, spqr_pinv, spqr_ssi, spqr_ssp.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% If N is stored implicitly, to potentially improve efficiency, code is
+% selected based on the number of rows and columns in A and N.
+
+if nargin < 3
+    method = 0 ;
+end
+[m n] = size (A) ;
+
+if isstruct (N)
+
+    %---------------------------------------------------------------------------
+    % N held implicitly
+    %---------------------------------------------------------------------------
+
+    p = size (N.X, 2) ;
+
+    switch method
+
+        case 0
+
+            %-------------------------------------------------------------------
+            % B = N'*A
+            %-------------------------------------------------------------------
+
+            switch N.kind
+
+                case 'Q*X'
+
+                    if n <= p
+                        % B = X' * ( Q' * A )
+                        B = spqr_qmult (N.Q, A, 0) ;
+                        B = N.X'*B ;
+                    else
+                        % B = ( X' * Q' ) * A
+                        B = spqr_qmult (N.Q, (N.X)', 2) ;
+                        B = B*A ;
+                    end
+
+                case 'Q*P*X'
+
+                    if n <= p
+                        % B = X' * P' * ( Q' * A ) ;
+                        B = spqr_qmult (N.Q,A,0) ;
+                        p (N.P) = 1:length (N.P) ;
+                        B = B(p,:) ;
+                        B = N.X'*B ;
+                    else
+                        % B = ( ( P * X )' * Q' ) * A ;
+                        B = N.X(N.P,:)';
+                        B = spqr_qmult (N.Q,B,2) ;
+                        B = B * A ;
+                    end
+
+                case 'P*Q*X'
+
+                    if n <= p
+                        % B = X' * ( Q' * ( P' * A ) ) ;
+                        p( N.P) = 1:length(N.P) ;
+                        B = A(p,:) ;
+                        B = spqr_qmult (N.Q,B,0) ;
+                        B = N.X'*B ;
+                    else
+                        % B = ( ( X' * Q' ) * P' ) * A ;
+                        B = spqr_qmult (N.Q, (N.X)', 2) ;
+                        B = B(:,N.P) ;
+                        B = B * A ;
+                    end
+
+                otherwise
+                    error ('unrecognized N struct') ;
+            end
+
+        case 1
+
+            %-------------------------------------------------------------------
+            % B = N*A
+            %-------------------------------------------------------------------
+
+            switch N.kind
+
+                case 'Q*X'
+
+                    % B = Q * ( X * A ) ;
+                    B = N.X * A ;
+                    B = spqr_qmult (N.Q,B,1) ;
+
+                case 'Q*P*X'
+
+                    % B = Q * ( P * ( X * A ) ) ;
+                    B = N.X * A ;
+                    B = B(N.P,:) ;
+                    B = spqr_qmult (N.Q,B,1) ;
+
+                case 'P*Q*X'
+
+                    % B = P * ( Q * ( X * A ) ) ;
+                    B = N.X * A ;
+                    B = spqr_qmult (N.Q,B,1) ;
+                    B = B(N.P,:) ;
+
+                otherwise
+                    error ('unrecognized N struct') ;
+            end
+
+        case 2
+
+            %-------------------------------------------------------------------
+            % B = A*N'
+            %-------------------------------------------------------------------
+
+            switch N.kind
+
+                case 'Q*X'
+
+                    % B = (A * X') * Q'
+                    B = A * (N.X)' ;
+                    B = spqr_qmult (N.Q,B,2) ;
+
+                case 'Q*P*X'
+
+                    % B = ( ( A * X' ) * P' ) * Q'
+                    B = A * (N.X)' ;
+                    B = B(:,N.P) ;
+                    B = spqr_qmult (N.Q,B,2) ;
+
+                case 'P*Q*X'
+
+                    % B = ( ( A * X' ) * Q' ) * P'
+                    B = A * (N.X)' ;
+                    B = spqr_qmult (N.Q,B,2) ;
+                    B = B(:,N.P) ;
+
+                otherwise
+                    error ('unrecognized N struct') ;
+            end
+
+        case 3
+
+            %-------------------------------------------------------------------
+            % B = A*N
+            %-------------------------------------------------------------------
+
+            switch N.kind
+
+                case 'Q*X'
+
+                    if m <= p
+                        % B = ( A * Q ) * X
+                        B = spqr_qmult (N.Q,A,3) ;
+                        B = B*N.X ;
+                    else
+                        % B = A * ( Q * X )
+                        B = spqr_qmult (N.Q, N.X, 1 ) ;
+                        B = A * B ;
+                    end
+
+                case 'Q*P*X'
+
+                    if m <= p
+                        % B = ( ( A * Q ) * P ) * X
+                        B = spqr_qmult (N.Q,A,3) ;
+                        p(N.P) = 1:length(N.P) ;
+                        B = B(:,p) ;
+                        B = B*N.X ;
+                    else
+                        % B = A * ( Q * ( P * X ) )
+                        B = N.X(N.P,:) ;
+                        B = spqr_qmult (N.Q, B, 1 ) ;
+                        B = A * B ;
+                    end
+
+                case 'P*Q*X'
+
+                    if m <= p
+                        % B = ( ( A * P ) * Q ) * X
+                        p(N.P) = 1:length(N.P) ;
+                        B = A(:,p) ;
+                        B = spqr_qmult (N.Q,B,3) ;
+                        B = B*N.X ;
+                    else
+                        % B = A * ( P * ( Q * X ) )
+                        B = spqr_qmult (N.Q, N.X, 1) ;
+                        B = B(N.P,:) ;
+                        B = A * B ;
+                    end
+
+                otherwise
+                    error ('unrecognized N struct') ;
+            end
+
+        otherwise
+            error ('unrecognized method') ;
+    end
+
+else
+
+    %---------------------------------------------------------------------------
+    % N held as an explicit matrix
+    %---------------------------------------------------------------------------
+
+    switch method
+        case 0
+            B = N'*A ;
+        case 1
+            B = N*A ;
+        case 2
+            B = A*N' ;
+        case 3
+            B = A*N ;
+        otherwise
+            error ('unrecognized method') ;
+    end
+
+end
diff --git a/MATLAB_Tools/spqr_rank/spqr_pinv.m b/MATLAB_Tools/spqr_rank/spqr_pinv.m
new file mode 100644
index 0000000..42ab466
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_pinv.m
@@ -0,0 +1,245 @@
+function [x,stats,N,NT] = spqr_pinv (A, varargin)
+%SPQR_PINV approx pseudoinverse solution to min(norm(B-A*X))
+%
+% usage: [x,stats,N,NT] = spqr_pinv (A,B,opts) ;
+%
+% This function returns an approximate psuedoinverse solution to
+%                 min || B - A x ||                     (1)
+% for rank deficient matrices A.  The psuedoinverse solution is the minimum
+% norm solution to the least squares problem (1).  Also, optionally, the
+% routine returns statistics including the numerical rank of the matrix A for
+% tolerance tol (i.e. the number of singular values > tol) and other statistics
+% (see below), as well as, if requested, an orthonormal basis for the numerical
+% null space to A and an orthonormal basis for the null space of A transpose.
+% The psuedoinverse solution is approximate since the algorithm allows small
+% perturbations in A (columns of A may be changed by no more than a user
+% defined value in opts.tol).
+%
+% Input:  A -- an m by n matrix
+%         B -- an m by p right hand side matrix
+%         opts (optional) -- see below
+% Output: x -- this n by p matrix contains psuedoinverse solutions to (1).
+%              If B is empty then x will also be empty.
+%         stats (optional) -- statistics including:
+%
+%  Examples:
+%     A = sparse (gallery('kahan',100)) ;
+%     B = randn (100,1) ; B = B / norm(B) ;
+%     x = spqr_pinv(A,B) ;
+%     x_pinv = pinv(full(A))*B ;
+%     rel_error_in_x = norm (x - x_pinv) / norm (x_pinv)
+%     % or
+%     [x,stats,N,NT] = spqr_pinv (A,B) ;
+%     norm_A_times_N = norm (full(spqr_null_mult(N,A,3)))
+%     norm_N_transpose_times_A = norm (full(spqr_null_mult(NT,A,0)))
+%     % or
+%     opts = struct('tol',1.e-5) ;
+%     [x,stats] = spqr_pinv (A,B,opts) ;
+%     stats
+%
+% See also spqr_basic, spqr_null, spqr_pinv, spqr_cod.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% Algorithm:  a basic solution is calculated using spqr_basic. Following
+%    this an orthogonal basis, stored in N, for the numerical null space
+%    of A is calculated using spqr_null. The psuedoinverse solution is
+%    then x - N*(N'*x) which is calculated using the routine spqr_null_mult.
+
+%-------------------------------------------------------------------------------
+% set tolerance and number of singular values to estimate
+%-------------------------------------------------------------------------------
+
+[B,opts,stats,start_tic,ok] = spqr_rank_get_inputs (A, 1, varargin {:}) ;
+
+if (~ok || nargout > 4)
+    error ('usage: [x,stats,N,NT] = spqr_pinv (A,B,opts)') ;
+end
+
+% get the options
+get_details = opts.get_details ;
+
+if (get_details == 1)
+    stats.opts_used = opts ;
+end
+
+% set the order of the stats fields
+%     stats.flag, stats.rank, stats.rank_spqr, stats.rank_spqr (if get_details
+%     >= 1), stats.tol, stats.tol_alt, stats.normest_A (if calculated),
+%     stats.est_sval_upper_bounds, stats.est_sval_lower_bounds, and
+%     stats.sval_numbers_for_bounds already initialized in spqr_rank_get_inputs
+if nargout >= 3
+    stats.est_norm_A_times_N = -1 ;
+end
+if nargout == 4
+   stats.est_norm_A_transpose_times_NT = -1 ;
+end
+% order for the additional stats fields needed when get_details is 1 will be
+%     set using spqr_rank_order_fields at the end of the routine
+
+%-------------------------------------------------------------------------------
+% find basic solution
+%-------------------------------------------------------------------------------
+
+if get_details == 0
+    % opts2 used to include a few extra statistics in stats_ssi
+    opts2 = opts;
+    opts2.get_details = 2;
+else
+    opts2 = opts;
+end
+if nargout == 4
+    % save basis for null space of A', if there are four output
+    %   parameters.  This will require more memory.
+    [x,stats_spqr_basic,NT] = spqr_basic (A, B, opts2) ;
+else
+    % do not save the basis for the null space of A'. Saves memory.
+    [x,stats_spqr_basic] = spqr_basic (A, B, opts2) ;
+end
+
+stats.rank = stats_spqr_basic.rank ;
+
+% save the stats
+if (get_details == 1 || get_details == 2)
+    stats.rank_spqr = stats_spqr_basic.rank_spqr ;
+end
+
+%-------------------------------------------------------------------------------
+% check for early return
+%-------------------------------------------------------------------------------
+
+if stats_spqr_basic.flag == 4
+    % overflow in spqr_ssi, called by spqr_basic.
+    % spqr_basic has already issued a warning regarding overflow
+    [stats x N NT] = spqr_failure (4, stats, get_details, start_tic) ;
+    return
+end
+
+%-------------------------------------------------------------------------------
+% calculate basis for the null space of A
+%-------------------------------------------------------------------------------
+
+% spqr_null calls spqr_ssi.  Set the block size in spqr_ssi based on the
+% difference in the numerical rank calculated by spqr_basic and by spqr.  Note
+% that this overwrites the user-provided value of opts.ssi_min_block, if any.
+opts.ssi_min_block = max (2, stats_spqr_basic.rank_spqr - stats.rank + 1);
+
+opts.ssi_min_block = ...
+    min (opts.ssi_min_block, stats_spqr_basic.stats_ssi.ssi_max_block_used) ;
+
+[N,stats_spqr_null] = spqr_null (A, opts2) ;
+
+if (get_details == 1)
+    stats.stats_spqr_basic = stats_spqr_basic ;
+    stats.stats_spqr_null = stats_spqr_null ;
+end
+
+%-------------------------------------------------------------------------------
+% check for early return
+%-------------------------------------------------------------------------------
+
+% spqr_basic and spqr_null both return error flags.  Since both must be correct
+% to calculate the psuedoinverse solution, choose the largest (worst) error.
+
+stats.flag = max (stats_spqr_basic.flag, stats_spqr_null.flag) ;
+
+if stats_spqr_basic.flag == 0 && stats_spqr_null.flag == 0  && ...
+    stats_spqr_basic.rank ~= stats_spqr_null.rank
+    % Rank from spqr_basic and spqr_null differ.  This is so rare that we know
+    % of no matrices that trigger this condition.  This block of code is thus
+    % untested.
+    error ('spqr_rank:inconsistent', 'inconsistent rank estimates') ; % untested
+    % an alternative, which would cause a return in the code below.
+    %   stats.flag = 5 ;
+end
+
+if stats.flag >= 4
+    % early return: overflow in inverse power method in ssi,
+    % or inconsistent rank estimates by spqr_basic and spqr_null.
+    [stats x N NT] = spqr_failure (stats.flag, stats, get_details, start_tic) ;
+    return
+end
+
+%-------------------------------------------------------------------------------
+% calculate the psuedoinverse solution
+%-------------------------------------------------------------------------------
+
+x = x - spqr_null_mult (N, spqr_null_mult (N,x,0), 1) ;
+
+%-------------------------------------------------------------------------------
+% select from two estimates of numerical rank and two sets of bounds
+%-------------------------------------------------------------------------------
+
+% Strategy -- the choice of stats.flag above was the
+%     max (stats_spqr_basic.flag, stats_spqr_null.flag)
+% We will choose the bounds and rank corresponding to this choice of flag.
+% When the flags are the same we will use spqr_basic results for
+% the bounds, except when the flags are both 1 we will choose the bounds
+% corresponding to the maximum of stats_spqr_basic.tol_alt and
+% stats_spqr_null.tol_alt (the conservative choice).
+
+if stats_spqr_basic.flag == 1 && stats_spqr_null.flag == 1
+    if stats_spqr_basic.tol_alt >= stats_spqr_null.tol_alt
+        st = stats_spqr_basic ;
+    else
+        st = stats_spqr_null ;
+    end
+elseif stats_spqr_basic.flag >= stats_spqr_null.flag
+        st = stats_spqr_basic ;
+else
+        st = stats_spqr_null ;
+end
+stats.rank = st.rank ;
+if isfield(st,'tol_alt')
+    stats.tol_alt = st.tol_alt ;
+end
+stats.sval_numbers_for_bounds = st.sval_numbers_for_bounds ;
+stats.est_sval_upper_bounds  = st.est_sval_upper_bounds ;
+stats.est_sval_lower_bounds  = st.est_sval_lower_bounds ;
+
+%-------------------------------------------------------------------------------
+% return statistics
+%-------------------------------------------------------------------------------
+
+if (get_details == 1 || nargout >= 3 )
+   stats.est_norm_A_times_N = stats_spqr_null.est_norm_A_times_N ;
+end
+if (get_details == 1)
+    stats.est_err_bound_norm_A_times_N = ...
+        stats_spqr_null.est_err_bound_norm_A_times_N ;
+end
+if nargout == 4
+    stats.est_norm_A_transpose_times_NT = ...
+        stats_spqr_basic.est_norm_A_transpose_times_NT ;
+    if (get_details == 1)
+        stats.est_err_bound_norm_A_transpose_times_NT = ...
+            stats_spqr_basic.est_err_bound_norm_A_transpose_times_NT ;
+    end
+end
+
+if (get_details == 1)
+    stats.time_svd = stats_spqr_basic.time_svd + ...
+                     stats_spqr_basic.stats_ssi.time_svd + ...
+                     stats_spqr_null.time_svd + ...
+                     stats_spqr_null.stats_ssi.time_svd + ...
+                     stats_spqr_null.stats_ssp_N.time_svd ;
+    if nargout == 4
+        stats.time_svd = stats.time_svd+stats_spqr_basic.stats_ssp_NT.time_svd ;
+    end
+    stats.time_basis = stats_spqr_basic.time_basis + stats_spqr_null.time_basis;
+end
+
+if stats.tol_alt == -1
+    stats = rmfield(stats, 'tol_alt') ;
+end
+
+if get_details == 1
+    % order the fields of stats in a convenient order (the fields when
+    %    get_details is 0 or 2 are already in a good order)
+    stats = spqr_rank_order_fields(stats);
+end
+
+if (get_details == 1)
+    stats.time = toc (start_tic) ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/spqr_rank_opts.m b/MATLAB_Tools/spqr_rank/spqr_rank_opts.m
new file mode 100644
index 0000000..c872a8c
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_rank_opts.m
@@ -0,0 +1,357 @@
+function [opts] = spqr_rank_opts (opts, opts_for_ssp)
+%SPQR_RANK_OPTS sets and prints the default options for spqr_rank
+%
+% Usage: opts = spqr_rank_opts (opts) ;
+%
+% With no input arguments or with an empty opts input, the default options are
+% used.  If opts is provided on input, any missing options are filled in with
+% default values.  With no output arguments, the opts are printed.
+%
+% Examples
+%
+%   opts = spqr_rank_opts ;         % returns the default opts
+%   spqr_rank_opts (opts) ;         % prints the current opts
+%   spqr_rank_opts                  % prints the default opts
+%   opts = spqr_rank_opts (opts) ;  % adds all missing defaults to opts
+%
+% Specific options:
+%
+%   opts.get_details -- determine what statistics to return.
+%       0: basic statistics
+%       1: extensive statistics.
+%       2: basic statistics and a few addional statistics.
+%       See 'help spqr_rank_stats' for details.
+%       Default: 0.
+%
+%   opts.tol -- estimate the numerical rank of A with tolerance tol = opts.tol
+%       or, equivalently, estimate the number of singular values of A larger
+%       than tol.  Due to  computer arithmetic errors the algorithm will
+%       estimate the numerical rank of A + E where norm(E) = O(norm(A)*eps)
+%       with eps = machine epsilon.  Therefore tol should be bigger than
+%       O(norm(A)*eps),  for example, tol >= n * norm(A)*eps.  If the opts is a
+%       number, not a structure, then tol = opts.  If a string 'default', or a
+%       negative number, the default is used.
+%       Default: max(m,n)*eps(normest(A,.01)).
+%
+%   opts.tol_norm_type -- if opts.tol is not specified calculate tol --
+%       1:  tol = max( size(A) ) * eps( norm (A,1) )
+%       2:  tol = max( size(A) ) * eps( normest (A,0.01) )
+%       Default: 2.
+%
+%   opts.nsvals_large -- estimate and return upper and lower bounds on singular
+%       values (stats.rank - nsvals_large + 1) to stats.rank, which are the
+%       singular values just before the gap.
+%       Default: 1.
+%
+%   opts.nsvals_small -- estimate and return upper and lower bounds on singular
+%       values (stats.rank + 1) to (stats.rank + nsvals_small), which are
+%       the singular values just after the gap.
+%       Default: 1.
+%
+%   opts.implicit_null_space_basis --
+%       0: null space basis of A and/or A' is returned as an explicit matrix.
+%       1: null space basis of A and/or A' is returned implicitly,
+%           as a product of Householder vectors.
+%       Default: 1.
+%
+%   opts.start_with_A_transpose -- if false (0) then spqr_cod initially
+%       calculates a QR factorization of A, if true (1) then it uses A'.
+%       Default: 0.
+%
+%   opts.repeatable -- controls the random stream.
+%       0: use the current random number stream.  The state of the stream will
+%           be different when the method returns.  Repeated calls may generate
+%           different results.  Faster for small matrices, however.
+%       1: use a repeatable internal random number stream.  The current stream
+%           will not be affected.  Repeated calls generate the same results.
+%       Default: 1
+%
+% Options for spqr_ssi (used by spqr_basic, spqr_null, spqr_cod, and spqr_pinv):
+%
+%   opts.ssi_tol -- same as opts.tol, but for the spqr_ssi function (see above).
+%
+%   opts.ssi_min_block --  the initial block size.
+%       Default: 3
+%
+%   opts.ssi_max_block -- the maximum block size in block inverse iteration.
+%       The default value, 10, is usually sufficient to calculate the correct
+%       numerical rank when spqr_ssi is called  by spqr_basic, spqr_null, 
+%       spqr_pinv or   spqr_cod.  However if spqr_ssi is used directly to 
+%       estimate singular values of a triangular matrix a larger value may be
+%       desirable.
+%       Default: 10.
+%
+%   opts.ssi_min_iters -- min # of iterations before checking convergence.
+%       Default: 3.
+%
+%   opts.ssi_max_iters -- max # of iterations before stopping the iterations.
+%       Default: 100.
+%
+%   opts.ssi_nblock_increment -- block size incremented by this amount if
+%       convergence criteria not met with current block size.
+%       Default: 5.
+%
+%   opts.ssi_convergence_factor -- continue power method iterations until an
+%       estimated bound on the relative error in the approximation s(1), 
+%       an estimate of the largest singular value returned by ssi, is <=
+%       convergence_factor. See the code for additional description.  The
+%       default = 0.1 appears to provides sufficient accuracy to correctly
+%       determine the numerical rank in almost all cases, assuming that
+%       stats.flag is returned as 0.  If the purpose for using spqr_basic,
+%       spqr_null, spqr_pinv, spqr_cod or spqr_ssi is to estimate singular value
+%       bounds a smaller value, for example 0.001 or smaller, may be useful.
+%       Default: 0.1.
+%
+% Options for spqr_ssp (used by spqr_basic, spqr_null, spqr_cod, and spqr_pinv):
+%
+%   opts.k -- the # of singular values to compute.
+%       Default 1.
+%
+%   opts.ssp_min_iters -- min # of iterations before checking convergence.
+%       Default: 4
+%
+%   opts.ssp_max_iters -- max # of iterations before stopping the iterations.
+%       The default value = 10 appears, with the default value of opts.tol,
+%       to provide sufficient accuracy to correctly determine the numerical
+%       rank when spqr_ssi is called by spqr_basic, spqr_null, spqr_pinv or
+%       spqr_cod in almost all cases, assuming that stats.flag is 0. For
+%       values of opts.tol larger than the default value, a larger value of
+%       opts.ssp_max_iters, for example 100, may be useful.
+%       Default: 10.
+%
+%   opts.ssp_convergence_factor -- continue power method iterations until an
+%       estimated bound on the relative error in the approximation
+%       S(k,k) to singular value number k of A is <= convergence_factor.
+%       The default value = 0.1 appears, with the default value of
+%       opts.tol, to provide sufficient accuracy to correctly determine
+%       the numerical rank in spqr_basic, spqr_null, spqr_pinv or spqr_cod
+%       in almost all cases, assuming that stats.flag is 0.  For values
+%       of opts.tol larger than the default value, a smaller value of
+%       opts.ssp_convergence_factor, for example 0.01, may be useful.
+%       Default: 0.1
+%
+% See also spqr_basic, spqr_null, spqr_cod, spqr_pinv, spqr_ssp, spqr_ssi.
+
+% Copyright 2012, Leslie Foster and Timothy A. Davis
+
+% The second input parameter to spqr_rank_opts is no longer necessary
+% but maintained for compatibility reasons.
+
+%-------------------------------------------------------------------------------
+% get the defaults, if not present on input, but do not compute tol
+%-------------------------------------------------------------------------------
+
+if (nargin < 1)
+    opts = [ ] ;
+end
+if (nargin < 2)
+    opts_for_ssp = 0 ;
+end
+
+% the ssp_* options  differ if spqr_ssp is called directly
+%   -- in older versions but not so in the current version.
+if (opts_for_ssp)
+    [ignore, opts] = spqr_rank_get_inputs (1, 2, opts) ;                    %#ok
+else
+    [ignore, opts] = spqr_rank_get_inputs (1, 3, opts) ;                    %#ok
+end
+clear ignore
+
+if (tol_is_default (opts.tol))
+    opts.tol = 'default' ;
+end
+
+if (tol_is_default (opts.ssi_tol))
+    opts.ssi_tol = 'default' ;
+end
+
+%-------------------------------------------------------------------------------
+% print the defaults, if requested
+%-------------------------------------------------------------------------------
+
+if (nargout == 0)
+
+    fprintf ('options for the spqr_rank functions:\n\n') ;
+
+    %---------------------------------------------------------------------------
+    % get_details
+    %---------------------------------------------------------------------------
+
+    fprintf ('  get_details : ') ;
+    if (opts.get_details == 0)
+        fprintf ('0 : basic statistics returned\n') ;
+    elseif (opts.get_details == 1)
+        fprintf ('1 : extensive statistics returned\n') ;
+    elseif (opts.get_details == 2)
+        fprintf (['2 : basic statistics and a few additional statistics' ...
+            'returned\n']) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % tol
+    %---------------------------------------------------------------------------
+
+    if (ischar (opts.tol))
+        if ( ~isfield(opts,'tol_norm_type') || isempty(opts.tol_norm_type) ...
+                || opts.tol_norm_type ~= 1 )
+           fprintf ('  tol : default : max(m,n)*eps(normest(A,0.01))\n') ;
+        else
+           fprintf ('  tol : max(m,n)*eps(norm(A,1))\n') ;
+        end
+    else
+        fprintf ('  tol : %g\n', opts.tol) ;
+    end
+    
+    %---------------------------------------------------------------------------
+    % tol_norm_type
+    %---------------------------------------------------------------------------
+
+    if ~ischar ( opts.tol )
+        fprintf(['  tol_norm_type: %d : not used since opts.tol ', ...
+            'is specified'], opts.tol_norm_type) ;
+    else
+        if opts.tol_norm_type ~= 1
+            fprintf(['  tol_norm_type: %d : tol = '...
+               'max(m,n)*eps(normest(A,0.01))'], opts.tol_norm_type) ; 
+        else
+            fprintf(['  tol_norm_type: %d : tol = '...
+               'max(m,n)*eps(norm(A,1))'], opts.tol_norm_type) ; 
+        end
+    end
+    fprintf ('  \n') ;
+    
+
+    %---------------------------------------------------------------------------
+    % nsvals_large
+    %---------------------------------------------------------------------------
+
+    fprintf ('  nsvals_large : %d : ', opts.nsvals_large) ;
+    fprintf ('# of large singular values to estimate.\n');
+
+    %---------------------------------------------------------------------------
+    % nsvals_small
+    %---------------------------------------------------------------------------
+
+    fprintf ('  nsvals_small : %d : ', opts.nsvals_small) ;
+    fprintf ('# of small singular values to estimate.\n');
+
+    %---------------------------------------------------------------------------
+    % implicit_null_space_basis
+    %---------------------------------------------------------------------------
+
+    fprintf ('  implicit_null_space_basis : ') ;
+    if (opts.implicit_null_space_basis)
+        fprintf ('true : N represented in Householder form.\n') ;
+    else
+        fprintf ('false : N represented as an explicit matrix.\n') ;
+    end
+
+    %---------------------------------------------------------------------------
+    % start_with_A_transpose
+    %---------------------------------------------------------------------------
+
+    fprintf ('  start_with_A_transpose : ') ;
+    if (opts.start_with_A_transpose)
+        fprintf ('true : spqr_cod computes qr(A'').\n') ;
+    else
+        fprintf ('false : spqr_cod computes qr(A).\n') ;
+    end
+
+    %---------------------------------------------------------------------------
+    % ssi_tol
+    %---------------------------------------------------------------------------
+
+    if (ischar (opts.ssi_tol))
+        fprintf ('  ssi_tol : default : same as tol.\n') ;
+    else
+        fprintf ('  ssi_tol : %g\n', opts.ssi_tol) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % ssi_min_block
+    %---------------------------------------------------------------------------
+
+    fprintf ('  ssi_min_block : %d : ssi initial block size.\n', ...
+        opts.ssi_min_block) ;
+
+    %---------------------------------------------------------------------------
+    % ssi_max_block
+    %---------------------------------------------------------------------------
+
+    fprintf ('  ssi_max_block : %d : spqr_ssi max block size.\n', ...
+        opts.ssi_max_block) ;
+
+    %---------------------------------------------------------------------------
+    % ssi_min_iters
+    %---------------------------------------------------------------------------
+
+    fprintf (['  ssi_min_iters : %d : min # of iterations before checking ' ...
+        'convergence\n'] , opts.ssi_min_iters) ;
+
+    %---------------------------------------------------------------------------
+    % ssi_max_iters
+    %---------------------------------------------------------------------------
+
+    fprintf (['  ssi_max_iters : %d : max # of iterations before stopping ' ...
+        'spqr_ssi iterations\n'] , opts.ssi_max_iters) ;
+
+    %---------------------------------------------------------------------------
+    % ssi_nblock_increment
+    %---------------------------------------------------------------------------
+
+    fprintf (['  ssi_nblock_increment : %d : block size inc. if ' ...
+        'convergence not met.\n'], opts.ssi_nblock_increment) ;
+
+    %---------------------------------------------------------------------------
+    % ssi_convergence_factor
+    %---------------------------------------------------------------------------
+
+    fprintf (['  ssi_convergence_factor : %g : spqr_ssi termination ' ...
+        'criterion.\n'], opts.ssi_convergence_factor) ;
+
+    %---------------------------------------------------------------------------
+    % k
+    %---------------------------------------------------------------------------
+
+    fprintf (['  k : %d : number of singular values to compute in ' ...
+        'spqr_ssp.\n]',  opts.k]) ;
+
+    %---------------------------------------------------------------------------
+    % ssp_min_iters
+    %---------------------------------------------------------------------------
+
+    fprintf (['  ssp_min_iters : %d : min # of iterations before checking ' ...
+        'convergence\n'] , opts.ssp_min_iters) ;
+
+    %---------------------------------------------------------------------------
+    % ssp_max_iters
+    %---------------------------------------------------------------------------
+
+    fprintf (['  ssp_max_iters : %d : max # of ssp iterations before ' ...
+        'stopping iterations\n'] , opts.ssp_max_iters) ;
+
+    %---------------------------------------------------------------------------
+    % ssp_convergence_factor
+    %---------------------------------------------------------------------------
+
+    fprintf (['  ssp_convergence_factor : %g ssp terminates when relative '...
+        'error drops below this value.\n'], opts.ssp_convergence_factor) ;
+
+    %---------------------------------------------------------------------------
+    % repeatable
+    %---------------------------------------------------------------------------
+
+    fprintf ('  repeatable : ') ;
+    if (opts.repeatable)
+        fprintf (['true : internal random stream used to ' ...
+            'guarantee repeatability\n']) ;
+    else
+        fprintf ('false : use whatever current random stream is in effect.\n') ;
+    end
+
+    % clearing opts makes the call "sqpr_rank_opts" (with no semicolon) more
+    % readable, since nothing is returned, and thus no opts struct is printed.
+    % Everything has already been printed above.
+    clear opts ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/spqr_rank_stats.m b/MATLAB_Tools/spqr_rank/spqr_rank_stats.m
new file mode 100644
index 0000000..cdb1817
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_rank_stats.m
@@ -0,0 +1,808 @@
+function spqr_rank_stats (stats, print_opts)
+%SPQR_RANK_STATS prints the statistics from spqr_rank functions
+%
+% For a detailed description of the meaning of the basic statistic for
+% spqr_basic, spqr_null, spqr_pinv or spqr_cod, just type
+% 'spqr_rank_stats' with no inputs.  Type spqr_rank_stats('ssi') or
+% spqr_rank_stats('ssp') for a description of the basic statistics for
+% sqpr_ssi or spqr_ssp, respectively. spqr_rank_stats(1) also prints a
+% detailed description of all statistics calculated by any spqr_function
+% when opts.get_details is 1.  To print a summary of the stats struct
+% returned by a spqr_rank function, use spqr_rank_stats(stats) or
+% spqr_rank_stats(stats,1).
+%
+% Examples
+%
+% spqr_rank_stats ;          % prints a description of basic statistics
+%                            % from spqr_basic, spqr_null, spqr_pinv, spqr_cod
+% spqr_rank_stats('ssi') ;   % description of basic statistics from spqr_ssi
+% spqr_rank_stats('ssp') ;   % description of basic statistics from spqr_ssp
+% spqr_rank_stats ( 1 ) ;    % prints a verbose description of all statistics
+% spqr_rank_stats (stats) ;  % prints a short summary of the stats struct
+% spqr_rank_stats (stats,1); % prints options used, when opts.get_details is 1
+%
+% See also spqr_basic, spqr_cod, spqr_pinv, spqr_ssi, spqr_ssp
+
+% Copyright 2012, Leslie Foster and Timothy A Davis
+
+if (nargin == 0)
+    stats = 0 ;
+    get_details = 0 ;
+    method = 1 ;   % spqr_basic, spqr_null, spqr_cod, spqr_pinv
+end
+
+if ( nargin == 1 )
+    if ischar(stats)
+        get_details = 0 ;
+        if ( strcmp(stats,'spqr_ssi') || strcmp(stats,'ssi') )
+            method = 2 ;   % spqr_ssp
+        elseif ( strcmp(stats,'spqr_ssp') || strcmp(stats,'ssp') )
+            method = 3 ;   % spqr_ssi
+        else
+            method = 1;    % spqr_basic, spqr_null, spqr_cod, spqr_pinv
+        end
+    elseif isreal(stats)
+        get_details = stats;
+        method = 4;    % any method
+    end
+    print_opts = 0 ;
+end
+
+if (isstruct (stats))
+
+    %---------------------------------------------------------------------------
+    % print the stats returned by the spqr_* function
+    %---------------------------------------------------------------------------
+
+    %---------------------------------------------------------------------------
+    % flag
+    %---------------------------------------------------------------------------
+
+    flag = -1 ;
+    if (isfield (stats, 'flag'))
+        flag = stats.flag ;
+    end
+
+    if ~isfield( stats, 'est_svals')
+        % description of flag for calls except for call to spqr_ssp
+        if (flag == 0)
+            fprintf ('\n  flag : %g : ', flag) ;
+            fprintf ('ok.  stats.rank very likely to be correct.\n') ;
+        elseif (flag <= 2)
+            fprintf ('\n  flag : %g : ', flag) ;
+            fprintf ('stats.rank may be correct for tolerance stats.tol,\n') ;
+            fprintf ('      but error bounds are too high to confirm this.\n') ;
+            if (flag == 1)
+                fprintf (['      However, stats.rank appears to be correct' ...
+                    ' for tolerance stats.tol_alt.\n']) ;
+            end
+        elseif (flag == 3)
+            fprintf ('\n  flag : %g : ', flag) ;
+            fprintf ('poor results.  stats.rank is likely too high.\n') ;
+        elseif (flag == 4)
+            fprintf ('\n  flag : %g : ', flag) ;
+            fprintf ('failure.  Overflow during inverse power method.\n') ;
+%       elseif (flag == 5)
+%           % this code is disabled because stats.flag=5 is removed.
+%           fprintf ('\n  flag : %g : ', flag) ;
+%           fprintf ('failure.  Inconsistent rank estimates.\n') ;
+        else
+            error ('spqr_rank:invalid', 'invalid stats') ;
+        end
+    else
+        % description of flag for calls to spqr_ssp
+        fprintf ('\n  flag : %g : ', flag) ;
+        if (flag == 0)
+            fprintf (['ok. spqr_ssp converged with est. relative error ' ...
+                '<= opts_ssp.convergence_factor.\n']) ;
+        else
+            fprintf (['spqr_ssp did not converge with est. relative error ' ...
+                '<= opts_ssp.convergence_factor.\n']) ;
+        end
+    end
+
+    %---------------------------------------------------------------------------
+    % rank
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'rank'))
+        fprintf ('  rank : %g : estimate of numerical rank.\n', stats.rank) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % rank_spqr
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'rank_spqr'))
+        fprintf ('  rank_spqr : %g : ', stats.rank_spqr) ;
+        fprintf ('estimate of numerical rank from spqr.\n') ;
+        fprintf ('      This is normally an upper bound on the true rank.\n') ;
+    end
+
+    %---------------------------------------------------------------------------
+    % tol
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'tol'))
+        fprintf ('  tol : %g : numerical tolerance used.\n', stats.tol) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % tol_alt
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'tol_alt'))
+        fprintf ('  tol_alt : %g : alternate numerical tolerance used.\n', ...
+            stats.tol_alt) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % normest_A
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'normest_A'))
+        fprintf ('  normest_A : %g : estimate of Euclidean norm of A.\n', ...
+            stats.normest_A) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % normest_R
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'normest_R'))
+        fprintf (['  normest_R : %g : estimate of Euclidean norm of R ' ...
+            '(calculated for spqr_ssi).\n'], ...
+            stats.normest_R) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_svals_upper_bounds
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_sval_upper_bounds'))
+        fprintf ('  est_sval_upper_bounds : ') ;
+        print_vector (stats.est_sval_upper_bounds) ;
+        fprintf ('      : estimated upper bounds on singular value(s).\n') ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_svals_lower_bounds
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_sval_lower_bounds'))
+        fprintf ('  est_sval_lower_bounds : ') ;
+        print_vector (stats.est_sval_lower_bounds) ;
+        fprintf ('      : estimated lower bounds on singular value(s).\n') ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_svals_of_R
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_svals_of_R'))
+        fprintf ('  est_svals_of_R : ') ;
+        print_vector (stats.est_svals_of_R) ;
+        fprintf (['      : estimated singular value(s) of triangular ' ...
+            'matrix R.\n']) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_svals
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_svals'))
+        fprintf ('  est_svals : ') ;
+        print_vector (stats.est_svals) ;
+        fprintf (['      : estimated singular value(s) of A*N or A''*NT, ' ...
+            'from spqr_ssp.\n']) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_error_bounds
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_error_bounds'))
+        fprintf ('  est_error_bounds : ') ;
+        print_vector (stats.est_error_bounds) ;
+        fprintf ('      : error bounds for each singular value.\n') ;
+    end
+
+    %---------------------------------------------------------------------------
+    % sval_numbers_for_bounds
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'sval_numbers_for_bounds'))
+        fprintf ('  sval_numbers_for_bounds : ') ;
+        print_vector (stats.sval_numbers_for_bounds) ;
+        fprintf ('      : index of singular value(s), for bounds.\n') ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_norm_A_times_N
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_norm_A_times_N'))
+        fprintf (['  est_norm_A_times_N : %g : estimated' ...
+            ' norm(A*N).\n'], stats.est_norm_A_times_N) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_err_bound_norm_A_times_N
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_err_bound_norm_A_times_N'))
+        fprintf (['  est_err_bound_norm_A_times_N : %g : estimated error ' ...
+            'bound for norm(A*N).\n'], stats.est_err_bound_norm_A_times_N) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_norm_A_transpose_times_NT
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_norm_A_transpose_times_NT'))
+        fprintf (['  est_norm_A_transpose_times_NT : %g : estimated' ...
+            ' norm(A''*NT).\n'], stats.est_norm_A_transpose_times_NT) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % est_err_bound_norm_A_transpose_times_NT
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'est_err_bound_norm_A_transpose_times_NT'))
+        fprintf (['  est_err_bound_norm_A_transpose_times_NT : %g : ' ...
+            ' estimated error bound for norm(A''*NT).\n'], ...
+            stats.est_err_bound_norm_A_transpose_times_NT) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % norm_R_times_N
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'norm_R_times_N'))
+        fprintf (['  norm_R_times_N : %g : norm of (R*N), from ' ...
+            'spqr_ssi.\n'], stats.norm_R_times_N) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % norm_R_transpose_times_NT
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'norm_R_transpose_times_NT'))
+        fprintf (['  norm_R_transpose_times_NT : %g : norm of (R''*NT), '...
+            'from spqr_ssi.\n'], stats.norm_R_transpose_times_NT) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % iters
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'iters'))
+        fprintf ('  iters : %g : iterations in spqr_ssi or spqr_ssp.\n', ...
+            stats.iters) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % nsvals_large_found
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'nsvals_large_found'))
+        fprintf (['  nsvals_large_found : %d : number of large singular ' ...
+            'values found.\n'], stats.nsvals_large_found) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % final_blocksize
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'final_blocksize'))
+        fprintf ('  final_blocksize : %d : final block size in spqr_ssi.\n', ...
+            stats.final_blocksize) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % ssi_max_block_used
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'ssi_max_block_used'))
+        fprintf (['  ssi_max_block_used : %d : max block size for ' ...
+            'spqr_ssi.\n'], stats.ssi_max_block_used) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % ssi_min_block_used
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'ssi_min_block_used'))
+        fprintf (['  ssi_min_block_used : %d : initial block size for ' ...
+            'spqr_ssi.\n'], stats.ssi_min_block_used) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % time
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'time'))
+        fprintf (['  time : %g : total time taken ' ...
+            '(includes all timings below).\n'], stats.time) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % time_initialize
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'time_initialize'))
+        fprintf ('  time_initialize : %g : time to initialize',...
+            stats.time_initialize) ;
+        if isfield (stats, 'normest_A') || isfield (stats, 'normest_R')
+            fprintf (' including estimating the norm of A or R.\n')
+        else
+            fprintf('.\n')
+        end
+    end
+
+    %---------------------------------------------------------------------------
+    % time_svd
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'time_svd'))
+        fprintf ('  time_svd : %g : total time taken by svd.\n', ...
+            stats.time_svd) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % time_basis
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'time_basis'))
+        fprintf ('  time_basis : %g : time to compute basis.\n', ...
+            stats.time_basis) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % time_iters
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'time_iters'))
+        fprintf ('  time_iters : %g : time for spqr_ssi iterations.\n', ...
+            stats.time_iters) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % time_est_error_bounds
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'time_est_error_bounds'))
+        fprintf (['  time_est_error_bounds : %g : time taken to estimate '...
+            'error bounds in spqr_ssi.\n'], stats.time_est_error_bounds) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % opts_used
+    %---------------------------------------------------------------------------
+
+    if (print_opts && isfield (stats, 'opts_used'))
+        fprintf ('\nopts_used : ') ;
+        spqr_rank_opts (stats.opts_used) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % info_spqr1
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'info_spqr1'))
+        fprintf ('\ninfo_spqr1 : statistics from first QR factorization.\n\n') ;
+        disp (stats.info_spqr1) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % info_spqr2
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'info_spqr2'))
+        fprintf ('\ninfo_spqr2 : statistics from second QR factorization.\n\n');
+        disp (stats.info_spqr2) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % stats_ssi
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'stats_ssi'))
+        % all opts used by spqr_ssp are the same stats.opts_used
+        fprintf ('\nstats_ssi : statistics from spqr_ssi.\n') ;
+        spqr_rank_stats (stats.stats_ssi, 0) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % stats_ssp_N
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'stats_ssp_N'))
+
+        fprintf ('\nstats_ssp_N : statistics from spqr_ssp (A,N).\n') ;
+        spqr_rank_stats (stats.stats_ssp_N, 0) ;
+        % all other opts used by spqr_ssp are the same stats.opts_used
+        if (isfield (stats.stats_ssp_N, 'opts_used') && ...
+            isfield (stats.stats_ssp_N.opts_used, 'k') && print_opts)
+                fprintf (['  stats_ssp_N.opts_used.k : %d : number of ' ...
+                'singular values to compute in spqr_ssp(A,N).\n'], ...
+                stats.stats_ssp_N.opts_used.k) ;
+        end
+    end
+
+    %---------------------------------------------------------------------------
+    % stats_ssp_NT
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'stats_ssp_NT'))
+        fprintf ('\nstats_ssp_NT : statistics from spqr_ssp (A'',NT).\n') ;
+        spqr_rank_stats (stats.stats_ssp_NT, 0) ;
+        % all other opts used by spqr_ssp are the same stats.opts_used
+        if (isfield (stats.stats_ssp_NT, 'opts_used') && ...
+            isfield (stats.stats_ssp_NT.opts_used, 'k') && print_opts)
+                fprintf (['  stats_ssp_NT.opts_used.k : %d : number of ' ...
+                'singular values to compute in spqr_ssp(A'',NT).\n'], ...
+                stats.stats_ssp_NT.opts_used.k) ;
+        end
+    end
+
+    %---------------------------------------------------------------------------
+    % stats_spqr_basic
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'stats_spqr_basic'))
+        % all opts used by spqr_basic are the same stats.opts_used
+        fprintf ('\nstats_spqr_basic : statistics from spqr_basic.\n') ;
+        spqr_rank_stats (stats.stats_spqr_basic, 0) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % stats_spqr_null
+    %---------------------------------------------------------------------------
+
+    if (isfield (stats, 'stats_spqr_null'))
+        fprintf ('\nstats_spqr_null : statistics from spqr_null.\n') ;
+        % all other opts used by spqr_null are the same stats.opts_used
+        if (isfield (stats.stats_spqr_null, 'opts_used') && ...
+            isfield (stats.stats_spqr_null.opts_used, 'ssi_min_block'))
+                fprintf (['\n  stats_spqr_null.opts_used.ssi_min_block : %d'...
+                ' : initial block size in spqr_ssi as used by spqr_null.'], ...
+                stats.stats_spqr_null.opts_used.ssi_min_block) ;
+        end
+        spqr_rank_stats (stats.stats_spqr_null, 0) ;
+
+    end
+
+else
+
+    %---------------------------------------------------------------------------
+    % describe each statistic
+    %---------------------------------------------------------------------------
+
+    fprintf ('\nDescription of stats returned by ') ;
+    if method == 1
+        fprintf ('spqr_basic, spqr_null,  spqr_pinv \nor spqr_cod:\n') ;
+    elseif method == 2
+        fprintf ('spqr_ssi:\n') ;
+    elseif method == 3
+        fprintf ('spqr_ssp:\n') ;
+    elseif method == 4
+        fprintf ('all spqr_functions:\n') ;
+    end
+
+    if ( method == 1  || method == 2 || get_details >= 1 )
+        fprintf ([ ...
+        '\nstats.flag (for all routines except spqr_ssp) -- \n' ...
+        '   if stats.flag is 0 if it is likely, although not\n' ...
+        '   guaranteed, that stats.rank is the correct numerical rank for\n' ...
+        '   tolerance stats.tol (i.e. agrees with the numerical rank\n' ...
+        '   determined by the singular values of R).\n' ...
+        '   \n'...
+        '   stats.flag is 1 if the calculated numerical rank stats.rank ' ...
+            'may\n'...
+        '   be correct for the tolerance stats.tol but the estimated error\n'...
+        '   bounds are too large to confirm this.  However stats.rank '...
+            'appears\n'...
+        '   to be correct for an alternate tolerance stats.tol_alt.  More\n'...
+        '   generally stats.rank appears to be correct for any tolerance\n'...
+        '   between stats.est_sval_lower_bounds(nsvals_large) and\n'...
+        '   stats.est_sval_upper_bounds(nsvals_large+1).\n' ...
+        '   \n'...
+        '   stats.flag is 2 if the calculated numerical rank ' ...
+            'stats.numerical\n'...
+        '   may be correct but estimated error bounds are too large to ' ...
+            'confirm\n'...
+        '   this.  The conditions for stats.flag to be 0 or 1 are not\n'...
+        '   satisfied.\n' ...
+        '   \n'...
+        '   stats.flag is 3 if is likely that the numerical rank returned,\n'...
+        '   stats.rank, is too large.\n'...
+        '   \n'...
+        '   stats.flag is 4 if overflow occurred during the inverse power\n'...
+        '   method.  The method fails in this case, and all parameters ' ...
+            'other\n'...
+        '   stats are returned as empty ([ ]).\n' ...
+        '   \n'...
+        '   stats.flag is 5 if a catastrophic failure occurred.\n']) ;
+    end
+
+    if ( method == 3 || get_details >= 1 )
+        fprintf ([ ...
+        '\nstats.flag -- (for spqr_ssp) \n' ...
+        '   stats.flag is 0 if spqr_ssp converged with estimated relative\n' ...
+        '   error in singular value opts.k of A (or of A*N) <=\n' ...
+        '   opts_ssp.convergence_factor. stats.flag is 1 if this is not ' ...
+            'true.\n'])
+    end
+
+    if ( method == 1 || method == 2 || get_details >= 1 )
+        fprintf ([ ...
+        '\nstats.rank -- the estimated numerical rank when stats.flag is\n' ...
+        '   0, 1 or 2.  stats.rank is typically an upper bound on the\n'...
+        '   numerical rank when stats.flag is 3.  Note that stats.rank ' ...
+            'is a\n'...
+        '   correction to the rank returned by spqr (stats.rank_spqr) ' ...
+            'in the\n'...
+        '   case that the calculations in the routine inidicate that the ' ...
+            'rank\n'...
+        '   returned by spqr not correct.\n']) ;
+    end
+
+    if ( method == 1 || method == 2 || get_details >= 1 )
+        fprintf ( ...
+        '\nstats.tol -- the tolerance used to define the numerical rank.\n') ;
+    end
+
+    if ( method == 1 || get_details >= 1 )
+        fprintf ([ ...
+        '\nstat.tol_alt -- an alternate tolerance that corresponds to the\n' ...
+        '   calculated numerical rank when stats.flag is 1.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.est_sval_upper_bounds -- stats.est_sval_upper_bounds(i) ' ...
+            'is an\n'...
+        '   estimate of an upper bound on singular value number\n' ...
+        '   stats.sval_numbers_for_bounds(i) of A.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.est_sval_lower_bounds -- stats.est_sval_lower_bounds(i) ' ...
+            'is an\n'...
+        '   estimate of an lower bound on singular value number\n' ...
+        '   stats.sval_numbers_for_bounds(i) of A.\n']) ;
+
+        fprintf (['\n' ...
+        '   Note that stats.est_sval_upper_bounds(i) is a rigorous upper '...
+            'bound\n'...
+        '   on some singular value of (A+E) where where E is ' ...
+            'O(norm(A)*eps)\n'...
+        '   Also stats.est_sval_lower_bounds(i) is a rigorous lower ' ...
+            'bound on\n'...
+        '   some singular value of (A+E).  In both cases the singular ' ...
+            'value is\n'...
+        '   normally singular value number sval_numbers_for_bounds(i) ' ...
+            'of A,\n'...
+        '   but the singular value number is not guaranteed.  For i such ' ...
+            'that\n' ...
+        '   sval_numbers_for_bounds(i) = stats.rank (that is for estimates\n'...
+        '   of singular value stats.rank) if ' ...
+            'stats.est_sval_upper_bounds(i)\n' ...
+        '   is a large multiple of stats.est_sval_lower_bounds(i) then\n' ...
+        '   solution vectors x produced by spqr_basic may be ' ...
+            'inferior (i.e.\n'...
+        '   be significanty larger) than solutions produced by ' ...
+            'spqr_pinv or\n' ...
+        '   spqr_cod.\n']) ;
+    end
+
+    if ( method == 2 || get_details >= 1 )
+        fprintf ([ ...
+        '\nstats.est_svals_of_R -- computed by spqr_ssi.\n' ...
+        '   stats.est_svals_of_R contains estimates of the smallest ' ...
+            'singular\n' ...
+        '   of R.\n']) ;
+    end
+
+    if ( method == 3|| get_details >= 1 )
+        fprintf ([ ...
+        '\nstats.est_svals -- computed by spqr_ssp.\n' ...
+        '   stats.est_svals(i) is an estimate of the ith largest ' ...
+            'singular of\n' ...
+        '   A or of A*N.  Also for i = 1:nsval, stats.est_svals(i) is a ' ...
+            'lower\n' ...
+        '   bound on the ith largest singular value of A (or A*N).\n']) ;
+    end
+
+    if ( method == 2 || method == 3 || get_details >= 1 )
+        fprintf ([ ...
+        '\nstats.est_error_bounds -- computed by spqr_ssi and spqr_ssp.\n' ...
+        '   stats.est_error_bounds(i) is an estimated bound on the ' ...
+            'absolute\n'...
+        '   error in singular value number ' ...
+            'stats.sval_numbers_for_bounds(i).\n' ...
+        '   of R (for spqr_ssi) or of A or A*N (for spqr_ssp). It is ' ...
+            'also a\n' ...
+        '   rigorous bound on abs (s(i) - some true singular value of ' ...
+            '(B+E)),\n'...
+        '   where E is O(norm(B)*eps) and B = R (for spqr_ssi) and B =\n' ...
+        '   A or A*N (for spqr_ssp).\n']) ;
+     end
+
+    fprintf ([ ...
+    '\nstats.sval_numbers_for_bounds -- component i in the error bounds is ' ...
+        'an estimated\n'...
+    '   error bound for singular value number sval_numbers_for_bounds(i).\n']) ;
+
+    if ( method == 1 || get_details >= 1 )
+        fprintf ([ ...
+        '\nstats.est_norm_A_transpose_times_NT -- an estimate of ' ...
+            'norm(A''*NT).\n']) ;
+
+        fprintf ( ...
+        '\nstats.est_norm_A_times_N -- an estimate of norm(A*N).\n') ;
+    end
+
+    if (get_details >= 1)
+
+        fprintf (['\n***** Additional statistics when opts.get_details ' ...
+            'is 2: *****\n']) ;
+
+        fprintf ([ ...
+        '\nstats.rank_spqr -- the rough estimate of the numerical rank\n'...
+        '   computed by spqr.  This is typically correct if the numerical\n'...
+        '   rank is well-defined.\n']) ;
+
+        fprintf ('\nstats.stats_ssi -- statistics returned by spqr_ssi.\n') ;
+
+        fprintf ([ ...
+        '\nstats_ssi.ssi_max_block_used -- the maximum block size ' ...
+               'used by spqr_ssi.\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.ssi_min_block_used -- the initial block size ' ...
+               'used by spqr_ssi.\n']) ;
+    end
+
+    if  (get_details == 1)
+
+        fprintf (['\n***** Additions statistics when opts.get_details is ' ...
+            '1: *****\n']) ;
+
+        fprintf ([ ...
+        '\nstats.normest_A  -- an estimate of the Euclidean norm of A. '...
+            'Calculated using\n' ...
+        '   normest(A,0.01).\n']) ;
+
+        fprintf ([ ...
+        '\nstats.normest_R  -- an estimate of the Euclidean norm of R. '...
+            'Calculated for spqr_ssi\n' ...
+        '   using normest(R,0.01).\n']) ;
+
+        fprintf ([ ...
+        '\nstats.est_err_bound_norm_A_times_N  -- an estimate of an\n'...
+        '   error bound on stats.est_norm_A_times_N.  It is also a\n'...
+        '   rigorous bound on abs (stats.est_norm_A_times_N - s)\n'...
+        '   where s is some singular value of (A+E)*N and where E is\n' ...
+        '   O(norm(A)*eps). Usually the singular value is the first '...
+           'singular\n'...
+        '   value but this is not guaranteed.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.est_err_bound_norm_A_transpose_times_NT  -- an estimate '...
+            'of an\n'...
+        '   error bound on stats.est_norm_A_transpose_times_NT.  It is '...
+            'also a\n'...
+        '   rigorous bound on abs (stats.est_norm_A_transpose_times_NT '...
+            '- s)\n'...
+        '   where s is some singular value of (A+E)''*NT and where E is\n' ...
+        '   O(norm(A)*eps). Usually the singular value is the first '...
+            'singular\n'...
+        '   value but this is not guaranteed.\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.norm_R_times_N -- Euclidean norm of (R*N), from ' ...
+              'spqr_ssi.\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.norm_R_transpose_times_NT -- Eucliean norm of ' ...
+              '(R''*NT), from spqr_ssi.\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.iters or stats_ssp_N.iters or stats_ssp_NT.iters -- ' ...
+            'number of\n' ...
+        '    iterations for subspace iteration in spqr_ssi or spqr_ssp.\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.nsvals_large_found -- the number of ''large'' (larger ' ...
+        'than tol) singular\n' ...
+        '   values found, from spqr_ssi.\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.final_blocksize -- final block size for subspace ' ...
+        'iteration in \n   spqr_ssi. \n']) ;
+
+        fprintf ([ ...
+        '\nstats.stats_spqr_basic -- statistics returned when spqr_basic ' ...
+        'is called by spqr_pinv.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.stats_spqr_null -- statistics returned when spqr_null ' ...
+        'is called by spqr_pinv.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.info_spqr1 -- statistics from spqr for the first QR ' ...
+           'factorization.\n' ...
+        '   See ''help spqr'' for details.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.info_spqr2 -- statistics from spqr for the second QR ' ...
+           'factorization, if\n' ...
+        '   required.  See ''help spqr'' for details.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.stats_ssp_N -- statistics from spqr_ssp when calculating ' ...
+           'the basis\n' ...
+        '   N for the null space of A.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.stats_ssp_NT -- statistics from spqr_ssp when calculating ' ...
+           'the basis\n' ...
+        '   NT for the null space of A transpose.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.opts_used, stats_ssi.opts_used, or stats_ssp.opts_used -- ' ...
+            'values of\n' ...
+        '   options used.  These can be different from values in opts ' ...
+            'since, for example,\n' ...
+        '   the size of A can restrict some values in opts.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.time, stats_ssi.time, etc.  -- the total time of the ' ...
+           'routine including\n' ...
+        '   the times described below.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.time_initialize, stats_ssi.time_initialize, etc. -- the '...
+            'time to\n' ...
+        '   set default values of opts, including calculating ' ...
+            'normest(A,0.01),\n' ...
+        '   or normest(R,0.01) if needed.\n']) ;
+
+        fprintf([ ...
+        '\nstats.time_basis -- the time to compute the basis for the ' ...
+            'numerical null space\n' ...
+        '   following any calls to spqr and spqr_ssi. This will be small\n'...
+        '   if the null space basis is returned in implicit form but can, '...
+           'in some cases,\n' ...
+        '   be significant if the null space basis is returned as an ' ...
+           'explicit matrix.\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.time_iters, stats_ssp_N.time_iters, etc.  -- the time ' ...
+           'for the\n' ...
+        '   subspace iterations in spqr_ssi or spqr_ssp. Excludes time '...
+           'for initialization,\n' ...
+        '   error flag calculation, etc..\n']) ;
+
+        fprintf ([ ...
+        '\nstats_ssi.time_est_error_bounds, ' ...
+           'stats_ssp_N.time_est_error_bounds, etc.  -- the time\n' ...
+           '   for estimating the singular value error bounds in ' ...
+               'spqr_ssi or spqr_ssp.\n']) ;
+
+        fprintf ([ ...
+        '\nstats.time_svd, stats_ssi.time_svd, etc.  -- the total time ' ...
+           'for calls to MATLAB''s SVD\n' ...
+        '   in the current routine and its subroutines.\n']) ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% print_vector
+%-------------------------------------------------------------------------------
+
+function print_vector (x)
+n = length (x) ;
+for k = 1:n
+fprintf (' %g', x (k)) ;
+end
+fprintf ('\n') ;
diff --git a/MATLAB_Tools/spqr_rank/spqr_ssi.m b/MATLAB_Tools/spqr_rank/spqr_ssi.m
new file mode 100644
index 0000000..e2dd571
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_ssi.m
@@ -0,0 +1,583 @@
+function [U, S, V, stats] = spqr_ssi (R, varargin)
+%SPQR_SSI block power method or subspace iteration applied to inv(R)
+% to estimate rank, smallest singular values, and left/right singular vectors.
+%
+% [U,S,V,stats] = spqr_ssi (R,opts);
+%
+% Uses the block power method or subspace iteration applied to the inverse of
+% the triangular matrix R (implicitly) to estimate the numerical rank, smallest
+% singular values, and left and right singular vectors R.  The algorithm will
+% be efficient in the case the nullity of R is relatively low and inefficient
+% otherwise.
+%
+% Input:
+%
+%   R -- an n by n nonsingular triangular matrix
+%   opts (optional) -- see 'help spqr_rank_opts' for details.
+%
+% Output:
+%
+%   U  -- n by k matrix containing estimates of the left singular vectors of R
+%       corresponding to the singular values in S. When stats.flag is 0 (and
+%       when the optional parameter opts.nsvals_large has its default value 1),
+%       r = n - k + 1 is the estimated rank of R. Also NT=U(:,2:k) is an
+%       orthonormal basis for the numerical null space of R'.
+%   S -- A k by k diagonal matrix whose diagonal entries are the estimated
+%       smallest k singular values of R, with k as described above.  For i=1:k,
+%       S(i,i) is an an estimate of singular value (r + i - 1) of R.
+%       Note that, unless stats.flag = 3 (see below), S(1,1)) > tol and for
+%       i =2:k, S(i,i) <= tol.
+%   V  -- n by k matrix containing estimates of the right singular vectors of R
+%       corresponding to the singular values in S.   When stats.flag is 0,
+%       N=V(:,2:k) is an orthonormal basis for the numerical null space of R.
+%   stats -- statistics, type 'help spqr_rank_stats' for details.
+%
+% Note that U' * R = S * V' (in exact arithmetic) and that R * V is
+% approximately equal to U * S.
+%
+% output (for one or two output arguments): [s,stats] = spqr_ssi (...)
+%    s -- diag(S), with S as above.
+%
+% Example:
+%    R = sparse (gallery ('kahan',100)) ;
+%    [U,S,V] = spqr_ssi (R) ;
+%    norm_of_residual = norm( U' * R - S * V' )   % should be near zero
+%    % or
+%    [U,S,V,stats] = spqr_ssi (R) ;
+%    N = V(:,2:end);   % orthonormal basis for numerical null space of R
+%    NT = U(:,2:end);  % orthonormal basis for numerical null space of R'
+%    norm_R_times_N = norm(R*N)
+%    norm_R_transpose_times_NT = norm(R'*NT)
+%    % or
+%    opts = struct('tol',1.e-5,'nsvals_large',3) ;
+%    [s,stats] = spqr_ssi (R,opts);
+%    stats  % information about several singular values
+%
+% See also spqr_basic, spqr_null, spqr_pinv, spqr_cod.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% Outline of algorithm:
+%    let b = initial block size
+%    U = n by b random matrix with orthonormal columns
+%    repeat
+%       V1 = R \ U
+%       [V,D1,X1]= svd(V1,0) = the compact svd of V1
+%       U1 = R' \ V
+%       [U,D2,X2] = svd(U1,0) = the compact svd of U1
+%       sdot = diag(D2)
+%       s = 1 ./ sdot = estimates of singular values of R
+%       if s(end) <= tol
+%          increase the number of columns of U and repeat loop
+%       else
+%          repeat loop until stopping criteria (see code) is met
+%       end
+%    end
+%    k = smallest i with  sdot(i) > tol
+%    V = V*X2 (see code)
+%    V = first k columns of V in reverse order
+%    U = first k columns of U in reverse order
+%    s = 1 ./ (first k entries in sdot in reverse order)
+%    S = diag(s)
+
+%    Note for i = 1, 2, ..., k, S(i,i) is an upper bound on singular
+%    value (r + i - 1) of R in exact arithmetic but not necessarily
+%    in finite precision arithmetic.
+
+% start block power method to estimate the smallest singular
+%     values and the corresponding right singular vectors (in the
+%     r by nblock matrix V) and left singular vectors (in the r by
+%     nblock matrix U) of the n by n matrix R
+
+% disable nearly-singular matrix warnings, and save the previous state
+warning_state = warning ('off', 'MATLAB:nearlySingularMatrix') ;
+
+%-------------------------------------------------------------------------------
+% get input options
+%-------------------------------------------------------------------------------
+
+[ignore,opts,stats,start_tic,ok] = spqr_rank_get_inputs (R,0,varargin{:}) ; %#ok
+clear ignore
+
+if (~ok || nargout > 4)
+    error ('usage: [U,S,V,stats] = spqr_ssi (R,opts)') ;
+end
+
+[m,n] = size (R) ;
+if m ~= n
+    error('R must be square')
+end
+
+% see spqr_rank_get_inputs.m for defaults:
+tol = opts.ssi_tol ;                                        % default opts.tol
+min_block = opts.ssi_min_block ;                            % default 3
+max_block = opts.ssi_max_block ;                            % default 10
+min_iters = opts.ssi_min_iters ;                            % default 3
+max_iters = opts.ssi_max_iters ;                            % default 100
+nblock_increment = opts.ssi_nblock_increment ;              % default 5
+convergence_factor = opts.ssi_convergence_factor ;          % default 0.1
+nsvals_large = opts.nsvals_large ;                          % default 1
+get_details = opts.get_details ;                            % default false
+repeatable = opts.repeatable ;                              % default false
+
+private_stream = spqr_repeatable (repeatable) ;
+
+%-------------------------------------------------------------------------------
+% adjust the options to reasonable ranges
+%-------------------------------------------------------------------------------
+
+% cannot compute more than n large singular values, where R is n-by-n
+nsvals_large = min (nsvals_large, n) ;
+
+% make the block size large enough so that there is a possiblity of
+% calculating all nsvals_large singular values
+max_block = max (max_block, nsvals_large) ;
+
+% max_block cannot be larger than n
+max_block = min (max_block, n) ;
+
+% min_block cannot be larger than n
+min_block = min (min_block, n) ;
+
+% start with nblock = min_block;
+nblock = min_block ;
+
+%-------------------------------------------------------------------------------
+% initializations
+%-------------------------------------------------------------------------------
+
+% stats.flag and stats.rank initialized in spqr_rank_get_inputs
+% set the order of the remaining stats fields
+stats.tol = tol ;
+stats.tol_alt = -1 ;   % removed later if remains -1
+if get_details == 1 && isfield(stats,'normest_A')
+    normest_A = stats.normest_A ;
+    stats = rmfield( stats,'normest_A' ) ;  % to place in proper order
+    stats.normest_R = normest_A ;
+end
+stats.est_svals_of_R = 0 ;
+stats.est_error_bounds = -1 ;
+stats.sval_numbers_for_bounds = -1 ;
+if get_details == 2
+    stats.ssi_max_block_used = -1 ;
+    stats.ssi_min_block_used = -1 ;
+end
+if (get_details == 1)
+    stats.norm_R_times_N = -1 ;
+    stats.norm_R_transpose_times_NT = -1 ;
+    stats.iters = -1 ;
+    stats.nsvals_large_found = 0 ;
+    stats.final_blocksize = -1 ;
+    stats.ssi_max_block_used = -1 ;
+    stats.ssi_min_block_used = -1 ;
+    stats.opts_used = opts ;
+    stats.time = 0 ;
+    time_initialize = stats.time_initialize ;
+    stats = rmfield(stats,'time_initialize') ; % to place in proper order
+    stats.time_initialize = time_initialize ;
+    stats.time_iters = 0 ;
+    stats.time_est_error_bounds = 0 ;
+    stats.time_svd = 0 ;
+end
+
+
+stats.rank = [ ] ;
+stats.tol = tol ;
+if (get_details == 1 || get_details == 2)
+    stats.ssi_max_block_used = max_block ;
+    stats.ssi_min_block_used = nblock ;
+end
+
+if (get_details == 1)
+    start_iters_tic = tic ;
+end
+
+if (~isempty (private_stream))
+    U = randn (private_stream, n, nblock) ;
+else
+    U = randn (n, nblock) ;
+end
+[U,ignore] = qr (U,0) ;                                                     %#ok
+clear ignore
+% est_error_bound_calculated = 0 ;      % set to 1 later if bound calculated
+flag_overflow = 0 ;                     % set to 1 later if overflow occurs
+
+%-------------------------------------------------------------------------------
+% iterations
+%-------------------------------------------------------------------------------
+
+for iters = 1:max_iters
+
+    U0= U;
+    V1 = R \ U ;
+    if min(min(isfinite(V1))) == 0
+        flag_overflow = 1;
+        break   % *************>>>>> early exit from for loop
+    end
+
+    if (get_details == 1), time_svd = tic ; end
+
+    [V,D1,X1] = svd (V1,0) ;
+
+    if (get_details == 1)
+        stats.time_svd = stats.time_svd + toc( time_svd ) ;
+    end
+
+    % d1 = diag(D1)';
+    U1 = ( V' / R )';  % uses less memory than U1 = R' \ V;
+    % Note: with the inverse power method overflow is a potential concern
+    %     in extreme cases (SJid = 137 or UFid = 1239 is close)
+    if min (min (isfinite (U1))) == 0
+        % *************>>>>> early exit from for loop
+        % We know of no matrix that triggers this condition, so the next
+        % two lines are untested.
+        flag_overflow = 1;      % untested
+        break                   % untested
+    end
+
+    if (get_details == 1), time_svd = tic ; end
+
+    [U,D2,X2] = svd (U1,0) ;
+
+    if (get_details == 1)
+        stats.time_svd = stats.time_svd + toc(time_svd) ;
+    end
+
+    d2 = diag (D2)' ;
+    k = find(d2*tol<1);
+
+    if isempty(k) && (nblock == n)
+        % success since the numerical rank of R is zero
+        break   % *************>>>>> early exit from for loop
+    end
+
+    if ~isempty(k)
+        k = k(1);  % k equals the calculated nullity + 1, k corresponds to
+                   % the first singular value of R that is greater than tol
+        % reduce nsvals_large if necessary due to max_block limit:
+        nsvals_large_old = nsvals_large;
+        nsvals_large = min(nsvals_large,max_block - k + 1);
+
+        if nblock >= k + nsvals_large - 1
+            % estimate error bound for singular value n - k + 1 of R:
+            est_error_bound =  norm( ...
+                U0*(X1*(D1 \ X2(:,k))) - U(:,k)/D2(k,k) ) / sqrt(2);
+            % est_error_bound_calculated = 1;
+            k2 = k + nsvals_large - 1;
+            % When nsvals_large is 1, k and k2 are the same.  When
+            % nsvals_large > 1, k2 corresponds to the largest singular
+            % value of R that is returned.
+            if k2 ~= k
+                % estimate error bound for singular value n - k2 + 1 of R:
+                est_error_bound2 =  norm( ...
+                    U0*(X1*(D1 \ X2(:,k2))) - U(:,k2)/D2(k2,k2) ) / sqrt(2);
+            else
+                est_error_bound2 = est_error_bound;
+            end
+        end
+
+        % Note that
+        %     [ 0     R ] [  U   ]  =    [ U0 * X1 * ( D1 \ X2 ) ]
+        %     [ R'    0 ] [ V*X2 ]       [     V * ( X2 / D2 )   ]
+        % It follows that, by Demmel's Applied Numerical Linear Algebra,
+        % Theorem 5.5, some eigenvalue of
+        %     B  =  [ 0    R ]
+        %           [ R'   0 ]
+        % will be within a distance of est_error_bound of 1 / d2(k), where s(1)
+        % = 1 / d2(k) is our estimate of singular value n - k + 1 of R.
+        % Typically the eigenvalue of B is singular value number n - k + 1 of
+        % R, although this is not guaranteed.  est_error_bound is our estimate
+        % of a bound on the error in using s(1) to approximate singular value
+        % number n - k + 1 of R.
+
+        if nblock >= k + nsvals_large - 1 && ...
+            est_error_bound <= convergence_factor*abs( 1/d2(k)-tol ) && ...
+            est_error_bound2 <= convergence_factor*abs( 1/d2(k2) ) && ...
+            iters >= min_iters
+            % Motivation for the tests:
+            % The first test in the if statement is an attempt to insure
+            % that nsvals_large singular values of R larger than tol are
+            % calculated.
+            %
+            % Goal of the power method is to increase nblock until we find
+            % sigma = (singular value n - k + 1 of R) is > tol.  If
+            % this is true it is guaranteed that n - k + 1 is the
+            % correct numerical rank of R.  If we let s(1) = 1 / d2(k)
+            % then s(1) > tol.  However s(1) is only an estimate of sigma.
+            % However, in most cases
+            %     | s(1) - sigma | <= est_error_bound                   (1)
+            % and to be conservative assume only that
+            %  |s(1) - sigma|<= (1/convergence_factor)*est_error_bound  (2)
+            % where convergence_factor<=1. By the second test in the if
+            % statement
+            %  est_error_bound <= convergence_factor * | s(1) - tol |   (3)
+            % Equations (2) and (3) imply that
+            %      | s(1) - sigma | <= | s(1) - tol |
+            % This result and s(1) > tol imply that sigma > tol, as
+            % desired.  Thus the second test in the if statement attempts
+            % to carry out enough iterations to insure that the calculated
+            % numerical rank is correct.
+            %
+            % The third test in the if statement checks on the accuracy of
+            % the estimate for singular values n - k2 + 1.  Let sigma2 be
+            % singular value n - k2 + 1 of R.  Usually it is true
+            % that
+            %     | s( k2 ) - sigma2 | <= est_error_bound2.             (4)
+            % Assuming (4) and the third test in the if statement it
+            % follows that the estimated relative
+            % error in s(k2),  as measured by est_error_bound2 / s( k2) ,
+            % is less that or equal to convergence_factor.  Therefore
+            % the third test in the if statement attempts to insure that
+            % the largest singular value returned by ssi has a relative
+            % error <= convergence_factor.
+            %
+            % SUCCESS!!!, found singular value or R larger than tol
+            break  % *************>>>>> early exit from for loop
+        end
+        nsvals_large = nsvals_large_old;  % restore original value
+    end
+
+    if nblock == max_block && iters >= min_iters && isempty(k)
+        % reached max_block block size without encountering any
+        %     singular values of R larger than tolerance
+        break    % *************>>>>> early exit from for loop
+    end
+
+    if (1 <= iters && iters < max_iters) && ( isempty(k)  || ...
+            ( ~isempty(k) && nblock < k(1) + nsvals_large - 1) )
+        % increase block size
+        nblock_prev = nblock;
+        if isempty(k)
+            nblock = min(nblock + nblock_increment, max_block);
+        else
+            nblock = min( k(1) + nsvals_large - 1, max_block );
+        end
+        if (nblock > nblock_prev)
+            if (~isempty (private_stream))
+                Y = randn (private_stream, n, nblock-nblock_prev) ;
+            else
+                Y = randn (n, nblock-nblock_prev) ;
+            end
+            Y = Y - U*(U'*Y);
+            [Y,ignore]=qr(Y,0) ;                                            %#ok
+            clear ignore
+            U = [U, Y];      %#ok
+        end
+    end
+end
+
+if (get_details == 1)
+    stats.final_blocksize = nblock ;    % final block size
+    stats.iters = iters ;               % number of iterations taken in ssi
+    stats.time_iters = toc (start_iters_tic) ;
+end
+
+%-------------------------------------------------------------------------------
+% check for early return
+%-------------------------------------------------------------------------------
+
+if flag_overflow == 1
+    warning ('spqr_rank:overflow', 'overflow in inverse power method') ;
+    warning (warning_state) ;
+    [stats U S V] = spqr_failure (4, stats, get_details, start_tic) ;
+    if (nargout == 2)
+        S = stats ;
+    end
+    return
+end
+
+%-------------------------------------------------------------------------------
+% determine estimated singular values of R
+%-------------------------------------------------------------------------------
+
+est_error_bounds = [ ] ;
+
+if ~isempty(k)
+    % Note: in this case nullity = k - 1 and rank = n - k + 1
+    s = 1.0 ./ d2(min(nblock,k+nsvals_large-1):-1:1);
+    est_error_bounds (nsvals_large) = est_error_bound;
+    numerical_rank = n - k + 1;
+else
+    k = nblock;
+    if nblock == n
+        numerical_rank = 0;
+        % success since numerical rank is 0
+    else
+        % in this case rank not successfully determined
+        % Note: In this case k is a lower bound on the nullity and
+        %       n - k is an upper bound on the rank
+        numerical_rank = n - k;  %upper bound on numerical rank
+        nsvals_large = 0 ; % calculated no singular values > tol
+    end
+    s = 1.0 ./ d2(nblock:-1:1);
+end
+
+stats.rank = numerical_rank ;
+
+nkeep = length (s) ;   % number of cols kept in U and V
+S = diag (s) ;
+
+if (get_details == 1)
+    stats.nsvals_large_found = nsvals_large ;
+end
+
+
+%-------------------------------------------------------------------------------
+% adjust V so that R'*U = V*S (in exact arithmetic)
+%-------------------------------------------------------------------------------
+
+V = V*X2;
+% reverse order of U and V and keep only nkeep singular vectors
+V = V(:,nkeep:-1:1);
+U = U(:,nkeep:-1:1);
+
+if (get_details == 1)
+    t = tic ;
+end
+
+if nsvals_large > 0
+    % this recalculates est_error_bounds(nsvals_large)
+    U0 = R * V(:,1:nsvals_large) - ...
+        U(:,1:nsvals_large) * S(1:nsvals_large,1:nsvals_large) ;
+    U0 = [ U0;
+           R' * U(:,1:nsvals_large) - V(:,1:nsvals_large)* ...
+             S(1:nsvals_large,1:nsvals_large)];
+    est_error_bounds (1:nsvals_large) = sqrt(sum(U0 .* conj(U0) )) / sqrt(2) ;
+end
+
+% this code calculates estimated error bounds for singular values
+%    nsvals_large+1 to nkeep
+ibegin = nsvals_large+1;
+U0 = R * V(:,ibegin:nkeep) - U(:,ibegin:nkeep)* ...
+         S(ibegin:nkeep,ibegin:nkeep);
+U0 = [ U0;
+       R' * U(:,ibegin:nkeep) - V(:,ibegin:nkeep)* ...
+         S(ibegin:nkeep,ibegin:nkeep)];
+est_error_bounds (ibegin:nkeep) = sqrt(sum(U0 .* conj(U0) )) /sqrt(2);
+% Note that
+%    [ 0      R ]  [ U ]   -    [ U ] * S = [ R * V - U * S ]
+%    [ R'     0 ]  [ V ]   -    [ V ]       [      0        ].
+% It follows, by Demmel's Applied Numerical Linear Algebra,
+% Theorem 5.5, for i = 2, . . .,  k, some eigenvalue of
+%     B  =  [ 0    R ]
+%           [ R'   0 ]
+% will be within a distance of the norm of the ith column of
+% [ R * V - U * S ; R'*U - V*S] / sqrt(2) from S(i,i). Typically this
+% eigenvalue will be singular value number n - k + i of R,
+% although it is not guaranteed that the singular value number
+% is correct.  est_error_bounds(i) is the norm of the ith column
+% of [ R * V - U * S; R' * U - V * S ] / sqrt(2).
+
+
+if (get_details == 1)
+    % Note that stats.time_est_error_bounds includes the time for the error
+    %   bound calculations done outside of the subspace iterations loop
+    stats.time_est_error_bounds = toc (t) ;
+end
+
+stats.sval_numbers_for_bounds = ...
+    numerical_rank - nsvals_large + 1 : ...
+    numerical_rank - nsvals_large + length (est_error_bounds) ;
+
+%-------------------------------------------------------------------------------
+% compute norm R*N and R'*NT
+%-------------------------------------------------------------------------------
+
+% compute norm R*N where N = V(:,nsvals_large+1:end) is the approximate
+%         null space of R and
+%         norm R'*NT where NT = U(:,nsvals_large+1:end) is the approximate
+%         null space of R'
+
+if (get_details == 1), t = tic ; end
+
+% svals_R_times_N = svd(R*V(:,nsvals_large+1:end))';
+norm_R_times_N = norm (R * V(:,nsvals_large+1:end)) ;
+% svals_R_transpose_times_NT = svd(R'*U(:,nsvals_large+1:end))';
+norm_R_transpose_times_NT = norm (R' * U(:,nsvals_large+1:end)) ;
+
+if (get_details == 1)
+    stats.norm_R_times_N = norm_R_times_N;
+    stats.norm_R_transpose_times_NT = norm_R_transpose_times_NT;
+    stats.time_svd = stats.time_svd + toc (t) ;
+end
+
+% Note: norm_R_times_N is an upper bound on sing. val. rank1+1 of R
+% and norm_R_transpose_times_NT is also an upper bound on sing. val.
+%      rank1+1 of R
+max_norm_RN_RTNT = max (norm_R_times_N,norm_R_transpose_times_NT);
+% choose max here to insure that both null spaces are good
+
+%-------------------------------------------------------------------------------
+% determine flag indicating the accuracy of the rank calculation
+%-------------------------------------------------------------------------------
+
+if numerical_rank == 0
+    % numerical rank is 0 in this case
+    stats.flag = 0;
+elseif (numerical_rank == n  || max_norm_RN_RTNT <= tol) && ...
+       (nsvals_large > 0 && ...
+       s(nsvals_large) - est_error_bounds(nsvals_large) > tol )
+    % in this case, assuming est_error_bounds(nsvals_large) is a true
+    % error bound, then the numerical rank is correct.  Also
+    % N = V(:,nsvals_large+1:end) and NT = U(:,nsvals_large+1:end)
+    % are bases for the numerical null space or R and R', respectively
+    stats.flag = 0;
+elseif ( nsvals_large > 0 && numerical_rank == n ) || ...
+        ( nsvals_large > 0 && ...
+        s(nsvals_large) - est_error_bounds(nsvals_large) > ...
+        max_norm_RN_RTNT )
+    % in this case, assuming est_error_bounds(nsvals_large) is a true
+    % error bound, then the numerical rank is correct with a modified
+    % tolerance.  This is a rare case.
+    stats.flag = 1;
+    tol_alt = ( s(nsvals_large) - est_error_bounds(nsvals_large) );
+    tol_alt = tol_alt - eps(tol_alt);  % so that tol_alt satisfies the >
+                                       % portion of the inequality below
+    % tol_alt = max_norm_RN_RTNT;
+    % Note: satisfactory values of tol_alt are in the range
+    %    s(nsvals_large) - est_error_bounds(nsvals_large) > tol_alt
+    %    >= max_norm_RN_RTNT
+    stats.tol_alt = tol_alt;
+elseif  nsvals_large > 0 && s(nsvals_large) > tol && ...
+        max_norm_RN_RTNT <= tol && ...
+        s(nsvals_large) - est_error_bounds(nsvals_large) ...
+        <= max_norm_RN_RTNT
+    % in this case, assuming est_error_bounds(nsvals_large) is a true
+    % error bound, the error bound is too large to determine the
+    % numerical rank.  This case is very rare.
+    stats.flag = 2;
+else
+    % in this case all the calculated singular values are
+    % smaller than tol or either N is not a basis for the numerical
+    % null space of R with tolerance tol or NT is not such a basis for R'.
+    % stats.rank is an upper bound on the numerical rank.
+    stats.flag = 3;
+end
+
+%-------------------------------------------------------------------------------
+% return results
+%-------------------------------------------------------------------------------
+
+% restore the warnings
+warning (warning_state) ;
+
+stats.est_svals_of_R = diag (S)' ;
+stats.est_error_bounds = est_error_bounds;
+
+if (get_details == 1)
+    stats.time = toc (start_tic) ;
+end
+
+if stats.tol_alt == -1
+    stats = rmfield(stats, 'tol_alt') ;
+end
+
+if (get_details == 1)
+    stats.time = toc (start_tic) ;
+end
+
+if (nargout <= 2)
+    U = diag (S) ;
+    S = stats ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/spqr_ssp.m b/MATLAB_Tools/spqr_rank/spqr_ssp.m
new file mode 100644
index 0000000..7665a71
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/spqr_ssp.m
@@ -0,0 +1,322 @@
+function [U, S, V, stats] = spqr_ssp (A, varargin)
+%SPQR_SSP block power method or subspace iteration applied to A or A*N
+%
+% [U,S,V,stats] = spqr_ssp (A, N, k, opts) ;
+%
+% Uses the block power method or subspace iteration to estimate the largest k
+% singular values, and left and right singular vectors an m-by-n matrix A or,
+% if the n-by-p matrix N is included in the input, of A*N.
+%
+% Alternate input syntaxes (opts are set to defaults if not present):
+%
+%       spqr_ssp (A)         k = 1, N is [ ]
+%       spqr_ssp (A,k)       k is a scalar
+%       spqr_ssp (A,N)       N is a matrix or struct
+%       spqr_ssp (A,N,k)     k is a scalar
+%       spqr_ssp (A,N,opts)  opts is a struct
+%
+% Input:
+%   A -- an m-by-n matrix
+%   N (optional) -- an n-by-p matrix representing the null space of A, stored
+%       either explicitly as a matrix or implicitly as a structure, and
+%       returned by spqr_basic, spqr_null, spqr_cod, or spqr_pinv.
+%       N is ignored if [ ].
+%   k (optional) -- the number of singular values to calculate. Also the block
+%       size in the block power method.  Also can be specified as opts.k.
+%       Default: 1.
+%   opts (optional) -- type 'help spqr_rank_opts' for details
+%
+% Output:
+%   U  -- m-by-k matrix containing estimates of the left singular vectors of A
+%       (or A*N if N is included in the input) corresponding to the singular
+%       values in S.
+%   S -- k-by-k diagonal matrix whose diagonal entries are the estimated
+%       singular values of A (or A*N). Also for i = 1:nsval, S(i,i) is a lower
+%       bound on singular value i of A (or A*N).
+%   V -- n-by-k matrix containing estimates of the right singular vectors of A
+%       corresponding to the singular values in S.
+%   stats -- type 'help spqr_rank_stats'
+%
+% Note that A*V = U*S (or A*N*V = U*S) and that U'*A (or U'*A*N)
+% is approximately equal to S*V'.
+%
+% Output (for one or two output arguments): [s,stats]= spqr_ssp (...)
+%   s -- diag(S), with S as above
+%
+% Example:
+%    A = sparse (gallery ('kahan',100)) ;
+%    [U,S,V] = spqr_ssp (A) ;   % singular triple for largest singular value
+%    % or
+%    [U,S,V,stats] = spqr_ssp (A,4) ;  % same for largest 4 singular values
+%    % or
+%    [s,stats] = spqr_ssp (A,4) ;
+%    stats     % stats has information for largest 4 singular values
+%    % or
+%    N = spqr_null ( A ) ;   % N has a basis for the null space of A
+%    s = spqr_ssp (A,N) ;
+%    s     % s has estimate of largest singular value (or norm) of A*N
+%
+% See also spqr_basic, spqr_null, spqr_pinv, spqr_cod.
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+% Outline of algorithm:
+%    Let B = A or B = A*N, if the optional input N is included
+%    where A is m-by-n and N is n-by-p. Note that the code is written so
+%    that B is not explicitly formed.  Let n = p if N is not input.
+%    Let k = block size = min(k,m,p)
+%    U = m-by-k random matrix with orthonormal columns
+%    repeat
+%       V1 = B' * U
+%       [V,D1,X1]= svd(V1,0) = the compact svd of V1
+%       U1 = B * V
+%       [U,D2,X2] = svd(U1,0) = the compact svd of U1
+%       s = diag(D2)
+%       kth_est_error_bound = norm(B'*U(:,k) - V*(X2(:,k)*D2(k,k))) / sqrt(2);
+%       if kth_est_error_bound <= convergence_factor*s(k) && iters >= min_iters
+%            flag = 0
+%            exit loop
+%       elseif number of iteration > max number of iterations
+%            flag = 1
+%            exit loop
+%       else
+%            continue loop
+%       end
+%    end
+%    V = V*X2; % adjust V so that A*V = U*S
+%    calculate estimated error bounds for singular values 1:k-1
+%       as discussed in the code
+%    S = diag(s);
+
+% start block power method to estimate the largest singular values and the
+% corresponding right singular vectors (in the n-by-k matrix V) and left
+% singular vectors (in the m-by-k matrix U) of the m-by-n matrix A
+
+%-------------------------------------------------------------------------------
+% get input options
+%-------------------------------------------------------------------------------
+[N,opts,stats,start_tic,ok] = spqr_rank_get_inputs (A, 2, varargin {:}) ;
+
+if (~ok || nargout > 4)
+    error ('usage: [U,S,V,stats] = spqr_ssp (A,N,k,opts)') ;
+end
+
+k = max (opts.k, 0) ;
+min_iters = opts.ssp_min_iters ;
+max_iters = opts.ssp_max_iters ;
+convergence_factor = opts.ssp_convergence_factor ;
+get_details = opts.get_details ;
+repeatable = opts.repeatable ;
+
+%-------------------------------------------------------------------------------
+% initializations
+%-------------------------------------------------------------------------------
+
+% the order of all the fields of stats are set in spqr_rank_get_inputs
+
+[m,n] = size (A) ;
+
+if (isempty (N))
+    % do not use N
+    use_N = 0 ;
+    p = n ;
+elseif (isstruct (N))
+    % N is a struct
+    use_N = 2 ;
+    p = size (N.X, 2) ;
+else
+    % N is a matrix
+    use_N = 1 ;
+    p = size (N, 2) ;
+end
+
+k = min ([k m p]) ;     % number of singular values to compute
+
+stats.flag = 1 ;
+stats.est_error_bounds = zeros (1, max (k,1)) ;
+stats.sval_numbers_for_bounds = 1:k ;
+
+if (k <= 0)
+    % quick return.  This is not an error condition.
+    stats.flag = 0 ;
+    stats.est_svals = 0 ;
+    stats.est_error_bounds = 0 ;
+    stats.sval_numbers_for_bounds = 0 ;
+    U = zeros (m, 0) ;
+    S = 0 ;
+    V = zeros (n, 0) ;
+    if (nargout == 1)
+        % usage: s = spqr_ssp ( ... )
+        S = 0 ;
+    elseif (nargout == 2)
+        % usage: [s,stats] = spqr_ssp ( ... )
+        U = 0 ;
+        S = stats ;
+    end
+    return
+end
+
+private_stream = spqr_repeatable (repeatable) ;
+
+if (~isempty (private_stream))
+    U = randn (private_stream, m, k) ;
+else
+    U = randn (m, k) ;
+end
+
+[U, ignore] = qr (U, 0) ;                                                   %#ok
+clear ignore
+
+%-------------------------------------------------------------------------------
+% block power iterations
+%-------------------------------------------------------------------------------
+
+if (get_details == 1)
+    t = tic ;
+end
+
+for iters = 1:max_iters
+
+    if use_N == 0
+        V1 = A' * U ;
+    elseif use_N == 1
+        V1 = N' * (A' * U) ;
+    else
+        V1 = spqr_null_mult (N, (A' * U), 0) ;
+    end
+
+    if issparse (V1)
+        V1 = full (V1) ;        % needed if U is 1-by-1
+    end
+
+    if (get_details == 1), time_svd = tic ; end
+    % [V,D1,X1] = svd (V1, 0) ;
+    [V,ignore1,ignore2] = svd (V1, 0) ;                                     %#ok
+    clear ignore1 ignore2
+    if (get_details == 1)
+        stats.time_svd = stats.time_svd + toc(time_svd) ;
+    end
+
+    % d1 = diag(D1)';
+
+    if use_N == 0
+       U1 = A * V;
+    elseif use_N == 1
+       U1 = A * (N * V);
+    else
+       U1 = A * spqr_null_mult (N,V,1) ;
+    end
+
+    if issparse(U1)
+        U1 = full (U1) ;        % needed if V is 1-by-1
+    end
+
+    if (get_details == 1), time_svd = tic ; end
+    [U,D2,X2] = svd (U1, 0) ;
+    if (get_details == 1)
+        stats.time_svd = stats.time_svd + toc(time_svd) ;
+    end
+
+    d2 = diag (D2)' ;
+
+    % estimate error bound on kth singular value
+    if use_N == 0
+        V1 = A' * U(:,k) ;
+    elseif use_N == 1
+        V1 = N' * (A' * U(:,k)) ;
+    else
+        V1 = spqr_null_mult(N,(A' * U(:,k)),0);
+    end
+    kth_est_error_bound = norm( V1 - V *( X2(:,k)*D2(k,k) ) ) / sqrt(2);
+
+    % Note that
+    %     [ 0     B ] [  U   ]  =    [       U * D2          ]
+    %     [ B'    0 ] [ V*X2 ]       [     V * ( X2 * D2 )   ]
+    % where B = A or B = A*N (if N is included in the input).  It follows that,
+    % by Demmel's Applied Numerical Linear Algebra, Theorem 5.5, some
+    % eigenvalue of
+    %     C  =  [ 0    B ]
+    %           [ B'   0 ]
+    % will be within a distance of kth_est_error_bound of D2(k,k).  Typically
+    % the eigenvalue of C is the kth singular value of B, although this is not
+    % guaranteed.  kth_est_error_bound is our estimate of a bound on the error
+    % in using D2(k,k) to approximate kth singular value of B.
+
+    if kth_est_error_bound <= convergence_factor* d2(k) && iters >= min_iters
+        % The test indicates that the estimated relative error in
+        % the estimate, D2(k,k) for the kth singular value is smaller than
+        % convergence_factor, which is the goal.
+        stats.flag = 0 ;
+        break
+    end
+end
+
+if (get_details == 1)
+    stats.time_iters = toc (t) ;
+end
+
+s = d2 (1:k);
+stats.est_error_bounds (k) = kth_est_error_bound ;
+S = diag (s) ;
+stats.est_svals = diag (S)' ;
+
+
+% adjust V so that A*V = U*S
+V = V*X2 ;
+
+%-------------------------------------------------------------------------------
+% estimate error bounds for the 1st through (k-1)st singular values
+%-------------------------------------------------------------------------------
+
+if (get_details == 1)
+    t = tic ;
+end
+
+if k > 1
+
+    if use_N == 0
+        V1 = A' * U(:,1:k-1) ;
+    elseif use_N == 1
+        V1 = N'* (A' * U(:,1:k-1)) ;
+    else
+        V1 = spqr_null_mult(N,(A' * U(:,1:k-1)),0);
+    end
+
+    U0 = V1 - V(:,1:k-1)*S(1:k-1,1:k-1);
+    stats.est_error_bounds (1:k-1) = sqrt (sum (U0 .* conj(U0))) / sqrt (2) ;
+
+    % Note (with V adjusted as above) that
+    %    [ 0      B ]  [ U ]   -    [ U ] * S = [       0       ]
+    %    [ B'     0 ]  [ V ]   -    [ V ]       [   A'*U - V*S  ]
+    % where B = A or B = A*N (if N is included in the input).  It follows, by
+    % Demmel's Applied Numerical Linear Algebra, Theorem 5.5, for i = 1:k, some
+    % eigenvalue of
+    %     C  =  [ 0    B ]
+    %           [ B'   0 ]
+    % will be within a distance of the norm of the ith column of [ B' * U - V *
+    % S ] / sqrt(2) from S(i,i). Typically this eigenvalue will be the ith
+    % singular value number of B, although it is not guaranteed that the
+    % singular value number is correct.  stats.est_error_bounds(i) is the norm
+    % of the ith column of [ B' * U - V * S ] / sqrt(2).
+
+end
+
+%-------------------------------------------------------------------------------
+% return results
+%-------------------------------------------------------------------------------
+
+if (get_details == 1)
+    stats.time_est_error_bounds = toc (t) ;
+    stats.iters = iters ;
+end
+
+if (get_details == 1)
+    stats.time = toc (start_tic) ;
+end
+
+if (nargout <= 2)
+    % usage: [s,stats] = spqr_ssp ( ... )
+    U = diag (S) ;
+    S = stats ;
+end
+
diff --git a/MATLAB_Tools/spqr_rank/test_spqr_coverage.m b/MATLAB_Tools/spqr_rank/test_spqr_coverage.m
new file mode 100644
index 0000000..9b48609
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/test_spqr_coverage.m
@@ -0,0 +1,589 @@
+function test_spqr_coverage
+%TEST_SPQR_COVERAGE statement coverage test of spqr_rank functions
+% Example
+%   test_spqr_coverage
+%
+% This test exercises all but a handful of statements in the spqr_rank toolbox.
+% A lot of output is generated, and some of it will contain error messages.
+% This is expected, since the spqr_* functions do a lot of error checking, and
+% this code exercises essentially all of those tests with many pathological
+% matrices.  Sample output of this test is in private/test_spqr_coverage.txt.
+%
+% The only statements not tested are a few marked "untested" in the code.
+% These are for a few rare error conditions which might occur, or which might
+% actually be theoretically impossible.  Since we have no proof that these
+% conditions cannot occur, we include code to check for them and handle the
+% potential errors.  But we cannot test this error-handling code itself.
+%
+% After running this test, you can view the Coverage reports by going to the
+% Current Folder window, selecting the Gear symbol and selecting Reports ->
+% Coverage Report.  Some files report less than 100%, but this is the fault of
+% MATLAB not accounting for unreachable statements.  For example, code such as
+% this reports the "end" statement as untested:
+%
+%   if (...)
+%       return
+%   end
+%
+% Coverage is close to 100% for all files in the toolbox except for the testing/
+% demonstration files (test_spqr_coverage, demo_spqr_rank and test_spqr_rank).
+%
+% See also demo_spqr_rank, test_spqr_rank
+
+% Copyright 2012, Leslie Foster and Timothy A Davis.
+
+profile clear
+profile on
+
+fprintf (['Exercises all but a handful of statements in the ', ...
+    'spqr_rank toolbox\n']) ;
+
+nfail = 0 ;
+
+opts = struct('figures', 0, ...             % no figures
+    'null_spaces', 1, ...
+    'doprint', -1, ...                      % absolutely no printing
+    'start_with_A_transpose', 0, ...
+    'implicit_null_space_basis', 1, ...
+    'repeatable', 1 , ...
+    'nsvals', 1 , ...
+    'get_details', 0, ...
+    'tol_norm_type', 2) ;
+nfail = nfail + demo_spqr_rank (3, opts) ;
+opts.tol_norm_type = 1 ;
+spqr_rank_opts (opts) ;    % exercise spqr_rank_opts with tol_norm_type = 1
+nfail = nfail + demo_spqr_rank (3, opts) ;
+
+A = magic (5) ;
+A = A (1:4,:) ;
+b = (1:4)' ;
+
+try
+    % incorrect usage: "A" not defined
+    x = spqr_basic ;                                                        %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % broken stats struct
+    stats.flag = 999 ;
+    spqr_rank_stats (stats,1) ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: too many arguments
+    x = spqr_basic (A, b, 1, opts) ;                                        %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: A and b mismatch
+    c = (1:5)' ;
+    x = spqr_basic (A, c) ;                                                 %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: 3rd argument not scalar
+    x = spqr_basic (A, b, [1 2]) ;                                          %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: too many arguments
+    [U, S, V, stats] = spqr_ssi (A, 1, opts) ;                              %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: too many arguments
+    x = spqr_cod (A, b, 1, opts) ;                                          %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: too many arguments
+    N = spqr_null (A, b, opts) ;                                            %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: too many arguments
+    [U,S,V,stats] = spqr_ssp (A, [ ], 4, pi, opts) ;                        %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: too many arguments
+    x = spqr_pinv (A, b, 1, opts) ;                                         %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % incorrect usage: A must be square
+    [U, S, V, stats] = spqr_ssi (A) ;                                       %#ok
+    fprintf ('usage error not caught\n') ;
+    nfail = nfail + 1 ;
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+%-------------------------------------------------------------------------------
+% check basic correct usage
+%-------------------------------------------------------------------------------
+
+x = spqr_basic (A, b, [ ]) ;
+if (norm (A*x-b) > 1e-13)
+    nfail = nfail + 1 ;
+end
+
+x = spqr_basic (A, b, eps) ;
+if (norm (A*x-b) > 1e-13)
+    nfail = nfail + 1 ;
+end
+
+x = spqr_basic (A, b, struct ('tol_norm_type', 1)) ;
+if (norm (A*x-b) > 1e-13)
+    nfail = nfail + 1 ;
+end
+
+c = spqr_ssp (A,1) ;
+if (abs (c - norm (A)) > 0.01)
+    nfail = nfail + 1 ;
+end
+
+opts2.get_details = 1 ;
+fprintf ('\nopts for spqr_ssi with get_details = 1:\n') ;
+spqr_rank_opts (opts2) ;
+R = qr (A (:, 1:4)) ;
+[U, S, V, stats] = spqr_ssi (R, opts2) ;                                    %#ok
+c = stats.normest_R ;
+spqr_rank_stats (stats) ;
+if (abs (c - norm (R)) / norm (R) > 0.01)
+    nfail = nfail + 1 ;
+end
+
+[s, stats] = spqr_ssi (inf) ;                                               %#ok
+
+for t = 0:2
+    opts2.get_details = t ;
+    opts2.tol = 1e-6 ;
+    fprintf ('\nopts for spqr_cod with get_details = %d:\n', t) ;
+    spqr_rank_opts (opts2) ;
+    [x, stats] = spqr_cod (A, b, opts2) ;
+    e = norm (A*x-b) ;
+    fprintf ('\nresults from spqr_cod with get_details = %d: err %g\n', t, e) ;
+    spqr_rank_stats (stats) ;
+    if (e  > 1e-12)
+        nfail = nfail + 1 ;
+    end
+
+    [x stats N NT] = spqr_pinv (A, b, opts2) ;                              %#ok
+    e = norm (A*x-b) ;
+    fprintf ('\nresults from spqr_pinv with get_details = %d: err %g\n', t, e) ;
+    spqr_rank_stats (stats, 1) ;
+    if (e  > 1e-12)
+        nfail = nfail + 1 ;
+    end
+
+    [x stats NT] = spqr_basic (A, b, opts2) ;                               %#ok
+    e = norm (A*x-b) ;
+    fprintf ('\nresults from spqr_basic with get_details = %d: err %g\n', t, e);
+    spqr_rank_stats (stats, 1) ;
+    if (e  > 1e-12)
+        nfail = nfail + 1 ;
+    end
+
+end
+
+C = magic (4) ; % matrix of rank 3
+opts3.implicit_null_space_basis = 0 ;
+for t = 0:2
+    opts3.get_details = t ;
+    [N stats] = spqr_null (C, opts3) ;                                      %#ok
+    if (norm (C*N) > 1e-12)
+        nfail = nfail + 1 ;
+    end
+end
+
+[s stats] = spqr_ssp (A, [ ], 0) ;                                          %#ok
+s = spqr_ssp (A, [ ], 0) ;                                                  %#ok
+s = spqr_ssp (sparse (pi)) ;
+if (abs (s - pi) > 1e-12)
+    nfail = nfail + 1 ;
+end
+
+s = spqr_ssp (A, 10) ;                                                      %#ok
+
+C = magic (4) ; % matrix of rank 3
+B = (1:4) ;
+opts6.implicit_null_space_basis = 0 ;
+opts6.start_with_A_transpose = 1 ;
+opts6.ssi_tol = 1e-6 ;
+opts6.repeatable = 0 ;
+opts6.get_details = 1 ;
+fprintf ('\nopts for spqr_null with explicit basis N:\n') ;
+spqr_rank_opts (opts6) ;
+N1 = spqr_null (C) ;
+N2 = spqr_null (C, opts6) ;
+e = 0 ;
+e = max (e, norm (N2'*C  - spqr_null_mult (N1, C))) ;
+e = max (e, norm (N2'*C  - spqr_null_mult (N1, C, 0))) ;
+e = max (e, norm (N2*B   - spqr_null_mult (N1, B, 1))) ;
+e = max (e, norm (B'*N2' - spqr_null_mult (N1, B', 2))) ;
+e = max (e, norm (C*N2   - spqr_null_mult (N1, C, 3))) ;
+e = max (e, norm (B*N2   - spqr_null_mult (N1, B, 3))) ;
+
+e = max (e, norm (N2'*C  - spqr_null_mult (N2, C))) ;
+e = max (e, norm (N2'*C  - spqr_null_mult (N2, C, 0))) ;
+e = max (e, norm (N2*B   - spqr_null_mult (N2, B, 1))) ;
+e = max (e, norm (B'*N2' - spqr_null_mult (N2, B', 2))) ;
+e = max (e, norm (C*N2   - spqr_null_mult (N2, C, 3))) ;
+e = max (e, norm (B*N2   - spqr_null_mult (N2, B, 3))) ;
+
+if (e > 1e-12)
+    nfail = nfail + 1 ;
+end
+
+try
+    % unrecognized method
+    x = spqr_null_mult (N1, C, 42) ;                                        %#ok
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % unrecognized method
+    x = spqr_null_mult (N2, C, 42) ;                                        %#ok
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+Ngunk = N1 ;
+Ngunk.kind = 'gunk' ;
+
+try
+    % unrecognized struct
+    x = spqr_null_mult (Ngunk, C, 0) ;                                      %#ok
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % unrecognized struct
+    x = spqr_null_mult (Ngunk, B, 1) ;                                      %#ok
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % unrecognized struct
+    x = spqr_null_mult (Ngunk, B', 2) ;                                     %#ok
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+try
+    % unrecognized struct
+    x = spqr_null_mult (Ngunk, C, 3) ;                                      %#ok
+catch me
+    fprintf ('Expected error caught: %s\n', me.message) ;
+end
+
+C = magic (4) ;
+C (:,1) = 0.2 * C (:,2) + pi * C (:,3) ;
+b = (1:4)' ;
+opts6.get_details = 2 ;
+[x,stats,N1,NT1] = spqr_cod (C,b) ;                                         %#ok
+[x,stats,N2,NT2] = spqr_cod (C,b, opts6) ;                                  %#ok
+fprintf ('\ndetailed stats from spqr_cod:\n') ;
+spqr_rank_stats (stats, 1) ;
+e = 0 ;
+
+e = max (e, norm (N2'*C  - spqr_null_mult (N1, C))) ;
+e = max (e, norm (N2'*C  - spqr_null_mult (N1, C, 0))) ;
+e = max (e, norm (N2*B   - spqr_null_mult (N1, B, 1))) ;
+e = max (e, norm (B'*N2' - spqr_null_mult (N1, B', 2))) ;
+e = max (e, norm (C*N2   - spqr_null_mult (N1, C, 3))) ;
+e = max (e, norm (B*N2   - spqr_null_mult (N1, B, 3))) ;
+
+e = max (e, norm (N2'*C  - spqr_null_mult (N2, C))) ;
+e = max (e, norm (N2'*C  - spqr_null_mult (N2, C, 0))) ;
+e = max (e, norm (N2*B   - spqr_null_mult (N2, B, 1))) ;
+e = max (e, norm (B'*N2' - spqr_null_mult (N2, B', 2))) ;
+e = max (e, norm (C*N2   - spqr_null_mult (N2, C, 3))) ;
+e = max (e, norm (B*N2   - spqr_null_mult (N2, B, 3))) ;
+
+e = max (e, norm (NT2'*C  - spqr_null_mult (NT1, C))) ;
+e = max (e, norm (NT2'*C  - spqr_null_mult (NT1, C, 0))) ;
+e = max (e, norm (NT2*B   - spqr_null_mult (NT1, B, 1))) ;
+e = max (e, norm (B'*NT2' - spqr_null_mult (NT1, B', 2))) ;
+e = max (e, norm (C*NT2   - spqr_null_mult (NT1, C, 3))) ;
+e = max (e, norm (B*NT2   - spqr_null_mult (NT1, B, 3))) ;
+
+Nsparse = spqr_explicit_basis (N1) ;
+NTsparse = spqr_explicit_basis (NT1) ;
+
+e = max (e, norm (N2'*C  - spqr_null_mult (Nsparse, C))) ;
+e = max (e, norm (N2'*C  - spqr_null_mult (Nsparse, C, 0))) ;
+e = max (e, norm (N2*B   - spqr_null_mult (Nsparse, B, 1))) ;
+e = max (e, norm (B'*N2' - spqr_null_mult (Nsparse, B', 2))) ;
+e = max (e, norm (C*N2   - spqr_null_mult (Nsparse, C, 3))) ;
+e = max (e, norm (B*N2   - spqr_null_mult (Nsparse, B, 3))) ;
+
+e = max (e, norm (NT2'*C  - spqr_null_mult (NTsparse, C))) ;
+e = max (e, norm (NT2'*C  - spqr_null_mult (NTsparse, C, 0))) ;
+e = max (e, norm (NT2*B   - spqr_null_mult (NTsparse, B, 1))) ;
+e = max (e, norm (B'*NT2' - spqr_null_mult (NTsparse, B', 2))) ;
+e = max (e, norm (C*NT2   - spqr_null_mult (NTsparse, C, 3))) ;
+e = max (e, norm (B*NT2   - spqr_null_mult (NTsparse, B, 3))) ;
+
+Nfull = spqr_explicit_basis (N1, 'full') ;
+NTfull = spqr_explicit_basis (NT1, 'full') ;
+
+e = max (e, norm (N2'*C  - spqr_null_mult (Nfull, C))) ;
+e = max (e, norm (N2'*C  - spqr_null_mult (Nfull, C, 0))) ;
+e = max (e, norm (N2*B   - spqr_null_mult (Nfull, B, 1))) ;
+e = max (e, norm (B'*N2' - spqr_null_mult (Nfull, B', 2))) ;
+e = max (e, norm (C*N2   - spqr_null_mult (Nfull, C, 3))) ;
+e = max (e, norm (B*N2   - spqr_null_mult (Nfull, B, 3))) ;
+
+e = max (e, norm (NT2'*C  - spqr_null_mult (NTfull, C))) ;
+e = max (e, norm (NT2'*C  - spqr_null_mult (NTfull, C, 0))) ;
+e = max (e, norm (NT2*B   - spqr_null_mult (NTfull, B, 1))) ;
+e = max (e, norm (B'*NT2' - spqr_null_mult (NTfull, B', 2))) ;
+e = max (e, norm (C*NT2   - spqr_null_mult (NTfull, C, 3))) ;
+e = max (e, norm (B*NT2   - spqr_null_mult (NTfull, B, 3))) ;
+
+Nfull = spqr_explicit_basis (Nfull, 'full') ;        % doesn't change Nfull
+e = max (e, norm (N2'*C  - spqr_null_mult (Nfull, C))) ;
+
+if (e > 1e-12)
+    nfail = nfail + 1 ;
+end
+
+% test spqr_wrapper
+A = sparse (magic (4)) ;
+[Q,R,C,p,info] = spqr_wrapper (A, [ ], eps, 'discard', 0) ;                 %#ok
+if (~isequal (size (C), [4 0]) || norm (R'*R - A'*A, 1) > 1e-12)
+    nfail = nfail + 1 ;
+end
+
+fprintf ('\ndefault ') ;
+spqr_rank_opts
+opts = spqr_rank_opts (struct, 1) ;
+fprintf ('\n(default for spqr_ssp): ') ;
+spqr_rank_opts (opts) ;
+
+fprintf ('\ndescription of statistics:\n') ;
+spqr_rank_stats
+spqr_rank_stats ('ssi') ;
+spqr_rank_stats ('ssp') ;
+spqr_rank_stats ('null') ;
+spqr_rank_stats (1) ;
+spqr_rank_stats (2) ;
+
+fprintf ('\n---------------------------------------------------------------\n');
+fprintf ('test that illustrates the rare case of a miscalculated rank:\n') ;
+install_SJget ;
+Problem = SJget (182) ;
+display (Problem)
+A = Problem.A ;
+opts8.get_details = 1;
+opts8.tol = max(size(A))*eps(Problem.svals(1));
+[N,stats] = spqr_null (A,opts8) ;                                           %#ok
+opts8.repeatable = 0 ;
+[N,stats] = spqr_null (A,opts8) ;                                           %#ok
+opts8.repeatable = 384 ;
+[N,stats] = spqr_null (A,opts8) ;                                           %#ok
+spqr_rank_stats (stats,1) ;
+if (stats.flag == 1)
+    rank_svd = SJrank (Problem,stats.tol_alt) ;
+else
+    rank_svd = SJrank (Problem,stats.tol) ;
+end
+if stats.rank ~= rank_svd
+   fprintf ('\nexpected rank mismatch %d %d\n', stats.rank, rank_svd) ;
+end
+
+% another rare case
+fprintf ('\n---------------------------------------------------------------\n');
+fprintf ('another rare case:\n') ;
+Problem = SJget (240) ;
+display (Problem) ;
+A = Problem.A ;
+m = size (A,1) ;
+b = ones (m, 1) ;
+opts9.repeatable = 22 ;
+opts9.get_details = 1 ;
+[x stats] = spqr_cod (A, b, opts9) ;                                        %#ok
+spqr_rank_stats (stats,1) ;
+
+% another rare case: early return from spqr_ssi
+fprintf ('\n---------------------------------------------------------------\n');
+fprintf ('another rare case:\n') ;
+Problem = SJget (242) ;
+display (Problem) ;
+A = Problem.A ;
+m = size (A,1) ;
+b = ones (m, 1) ;
+opts9.repeatable = 1 ;
+[N stats] = spqr_null (A, opts9) ;                                          %#ok
+spqr_rank_stats (stats,1) ;
+x = spqr_pinv (A', b, opts9) ;                                              %#ok
+[Q,R,C,p,info] = spqr_wrapper (A', [ ], eps, 'discard Q', 2) ;              %#ok
+rank_spqr = size (R,1) ;
+R11 = R (:, 1:rank_spqr) ;
+opts9.tol = 1e-14 ;
+[s stats] = spqr_ssi (R11, opts9) ;                                         %#ok
+spqr_rank_stats (stats,1) ;
+
+% test rare case in spqr_ssi
+fprintf ('\n---------------------------------------------------------------\n');
+fprintf ('Near-overflow in spqr_ssi, 2nd test:\n') ;
+Problem = SJget (137) ;
+display (Problem) ;
+opts10.repeatable = 1 ;
+opts10.get_details = 1 ;
+A = Problem.A ;
+[m n] = size (A) ;
+tol = max(m,n) * eps (normest (A,0.01)) ;
+for t = 0:1
+    [Q,R,C,p,info] = spqr_wrapper (A, [ ], tol, 'discard Q', 2) ;           %#ok
+    k = size (R,1) ;
+    R = R (:, 1:k) ;
+    [s, stats] = spqr_ssi (R, opts10) ;                                     %#ok
+    spqr_rank_stats (stats,1) ;
+    [s, stats] = spqr_ssi (R, opts10) ;                                     %#ok
+    spqr_rank_stats (stats,1) ;
+    A = A' ;
+end
+
+% test flag=1 case: rank correct with an alternate tolerance
+fprintf ('\n---------------------------------------------------------------\n');
+fprintf ('case where rank appears correct but with alternate tolerance:\n') ;
+Problem = SJget (183) ;
+display (Problem) ;
+A = Problem.A ;
+b = ones (size (A,1), 1) ;
+opts11.get_details = 1 ;
+opts11.repeatable = 3 ;
+[x stats] = spqr_cod (A,b, opts11) ;                                        %#ok
+spqr_rank_stats (stats,1) ;
+
+if (nfail > 0)
+    error ('nfail: %d\n', nfail) ;
+end
+
+%-------------------------------------------------------------------------------
+% exhaustive tests on a handful of matrices
+%-------------------------------------------------------------------------------
+
+index = SJget ;
+
+% these matrices trigger lots of special cases in the spqr_rank toolbox:
+%  229 Regtools/foxgood_100
+%  241 Regtools/heat_100
+%  245 Regtools/i_laplace_100
+%  249 Regtools/parallax_100
+%  242 Regtools/heat_200
+%  173 Sandia/oscil_dcop_24
+%  183 Sandia/oscil_dcop_34
+%  263 Regtools/wing_500
+idlist = [ 215 229 241 245 249 242 173 183 263 134 ] ;
+
+fprintf ('\nPlease wait ...\n') ;
+for k = 1:length (idlist)
+    id = idlist (k) ;
+    fprintf ('%2d of %2d : id: %4d %s/%s\n', k, length (idlist), ...
+        id, index.Group {id}, index.Name {id}) ;
+    nfail = nfail + test_spqr_rank (id, 0) ;
+end
+
+if (nfail > 0)
+    error ('One or more tests failed!') ;
+end
+
+fprintf ('\nAll tests passed.\n') ;
+
+profile off
+
+%-------------------------------------------------------------------------------
+% coverage results
+%-------------------------------------------------------------------------------
+
+% This test_spqr_coverage script obtains near-100% coverage.
+%
+% These files obtain 100% coverage:
+%
+%   spqr_rank_opts.m
+%   spqr_explicit_basis.m
+%   private/tol_is_default
+%   private/spqr_rank_order_fields
+%   private/spqr_rank_form_basis
+%   private/spqr_rank_deflation
+%   private/spqr_rank_assign_stats
+%   private/spqr_wrapper
+
+% These files are effectively 100%.  The only non-tested statements are "end"
+% statements that appear immediate after 'error' or 'break' statements, which
+% are not reachable.  MATLAB should report 100% coverage in this case, but it
+% doesn't.  This is a failure of MATLAB, not our code...
+%
+%   spqr_ssp
+%   spqr_null
+%   spqr_null_mult
+%   spqr_basic
+%   spqr_rank_stats
+%   private/spqr_rank_get_inputs
+
+% These files are not yet 100%, and "cannot" be.  These codes have a few checks
+% for errors that should "never" occur.  We know of no matrices that trigger
+% these conditions, but also no proof that the conditions cannot occur.  Lines
+% that are untested are marked with "% untested" comments.
+%
+%   spqr_cod
+%   spqr_ssi
+%   spqr_pinv
+
+% One part of this file is not tested (error handling if 'savepath' fails):
+%
+%   private/install_SJget
+
+% These files are not fully covered, but do not need to be (test/demo code):
+%
+%   test_spqr_coverage
+%   test_spqr_rank
+%   demo_spqr_rank
+%   files in the SJget folder
+
diff --git a/MATLAB_Tools/spqr_rank/test_spqr_rank.m b/MATLAB_Tools/spqr_rank/test_spqr_rank.m
new file mode 100644
index 0000000..ddb54e7
--- /dev/null
+++ b/MATLAB_Tools/spqr_rank/test_spqr_rank.m
@@ -0,0 +1,118 @@
+function [ number_fail, SJid_fail ] = test_spqr_rank (ids, figures)
+%TEST_SPQR_RANK extensive functionality test of spqr_rank functions
+% Returns the number of failures and, optionally, a list of matrices where
+% failure occurred.  The first argument can be a negative scalar
+% -k, in which case the k smallest matrices in the SJ Collection
+% are tested.  Otherwise, the first argument gives a list of matrix IDs
+% (as defined by SJget) that are used for the tests. If the optional second
+% parameter is zero no plots are produced, if the second parameter is 1 then
+% runs which produce no figures and which produce one figure are carried out
+% and if the second parameter is 2 then runs producing zero, one and four 
+% figures (illustrating numerical ranks, null space accuracy, basic solutions,
+% and psuedoinverse solutions) are carried out. The last option is the default
+% option. It can be slower than runs with figures = 0 or 1.
+%
+% Example
+%
+%   test_spqr_rank ;            % test with 100 smallest sample matrices
+%   test_spqr_rank (-200) ;     % test with 200 smallest sample matrices
+%   test_spqr_rank (-5, 0) ;    % test with 5 matrices, and do not plot anything
+%
+%   test_spqr_rank (list) ;     % run tests with a set of matrices.  Each
+%                               % matrix is defined by an ID by SJget, and
+%                               % 'list' is a vector of matrix IDs to test with.
+%
+% See also demo_spqr_rank, test_spqr_coverage
+
+% Copyright 2012, Leslie Foster and Timothy A Davis
+
+% Potential run times:
+%        test_spqr_rank can require half an hour
+%        test_spqr_rank(-200) can require 1.5 hours
+%        test_spqr_rank(-200,1) can require an hour
+%        test_spqr_rank(-400,0) can require ten hours
+
+if (nargin < 1)
+    ids = -100 ;
+end
+if (isscalar (ids) && ids < 0)
+    nsamples_run = -ids ;
+else
+    nsamples_run = length (ids) ;
+end
+
+if (nargin < 2)
+    figures = 2 ;
+end
+
+nfail = 0 ;
+
+%-------------------------------------------------------------------------------
+% extensive tests
+%-------------------------------------------------------------------------------
+
+ncases = 0 ;
+cnt_fail = 0 ;
+SJid_fail = [ ] ;
+for figures_to_plot = 0:figures
+   demo_opts.figures = figures_to_plot ;
+   if figures_to_plot == 2
+       null_spaces_limits = 1:2 ; %for figures_to_plot=2, null_spaces>0 required
+   else
+       null_spaces_limits = 0:2 ;
+   end
+   for repeatable = 0:1
+       demo_opts.repeatable = repeatable;
+       for null_spaces = null_spaces_limits
+          demo_opts.null_spaces = null_spaces ;
+          for start_with_A_transpose = 0:1
+             demo_opts.start_with_A_transpose = start_with_A_transpose ;
+             for implicit_null_space_basis = 0:1
+               demo_opts.implicit_null_space_basis = implicit_null_space_basis ;
+               for nsvals = [1 3]
+                  demo_opts.nsvals = nsvals ;
+                  if (nsamples_run == 1)
+                      demo_opts.doprint = -1 ;
+                  else
+                      demo_opts.doprint = 0 ;
+                      fprintf (['\nTest %4d matrices, figures: %d null ' ...
+                      'spaces: %d A_trans: %d implicit: %d repeatable: %d ' ...
+                      'nsvals: %d\n'], nsamples_run, figures_to_plot, ...
+                      null_spaces, start_with_A_transpose, ...
+                      implicit_null_space_basis, repeatable, nsvals) ;
+                  end
+                  demo_opts.tol_norm_type = 0 ; % fixed at 0 to reduce cases
+                  [nfail_run, SJid_fail_run] = demo_spqr_rank (ids, demo_opts) ;
+                  nfail = nfail + nfail_run ;
+                  ncases = ncases + nsamples_run * 4 ;  % 4 for four methods
+                  if nfail_run > 0
+                     SJid_fail = union(SJid_fail, SJid_fail_run) ;
+                     cnt_fail = cnt_fail + 1;
+                     % To save statistics files in (rare) case of failure
+                     % in files with names demo_spqr_rank_failure_(#).mat
+                     % uncomment the following four lines:
+                     %dest = ['''demo_spqr_rank_failure_',int2str(cnt_fail),...
+                     %    '.mat'')'] ;
+                     %com = ['copyfile(''save_samples_demo_spqr_rank.mat'',',...
+                     %    dest] ;
+                     %eval( com ) ;
+                  end
+               end
+            end
+          end
+      end
+   end
+end
+
+if (nsamples_run > 1 || nfail > 0)
+    fprintf (['\nTests complete.  Total number of failures: %d for %d ' ...
+    'matrix / option choices.\n'], nfail, ncases) ;
+    if ( nfail > 0 )
+       disp (['Failures for matrices with SJid = ', int2str(SJid_fail),'.']) ;
+    end
+end
+
+if nargout > 0
+    number_fail = nfail ;
+end
+
diff --git a/MATLAB_Tools/waitmex/README.txt b/MATLAB_Tools/waitmex/README.txt
index 64b78b8..d5a8ca9 100644
--- a/MATLAB_Tools/waitmex/README.txt
+++ b/MATLAB_Tools/waitmex/README.txt
@@ -21,6 +21,4 @@ These functions should be easily adaptable to any of the many replacements for
 waitbar posted on the MATLAB Central File Exchange, particularly if they use
 the same input and output arguments as the MATLAB waitbar.
 
-Copyright 2007, Tim Davis, University of Florida.
-http://www.cise.ufl.edu/~davis
-Aug 27, 2007
+Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
diff --git a/MATLAB_Tools/waitmex/waitmex.c b/MATLAB_Tools/waitmex/waitmex.c
index ee36fd7..5b0b1d3 100644
--- a/MATLAB_Tools/waitmex/waitmex.c
+++ b/MATLAB_Tools/waitmex/waitmex.c
@@ -17,7 +17,7 @@
     waitbar_destroy (h)             close (h)
     waitbar_return (h)              for returning h from a mexFunction
 
-    Tim Davis, 2007, University of Florida.
+    Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
 */
 
 #include "waitmex.h"
diff --git a/MESHND/Contents.m b/MESHND/Contents.m
deleted file mode 100644
index 4a0038a..0000000
--- a/MESHND/Contents.m
+++ /dev/null
@@ -1,26 +0,0 @@
-%MESHND: creation and nested dissection of regular 2D and 3D meshes. 
-%
-%   meshnd         - creation and nested dissection of a regular 2D or 3D mesh.
-%   meshnd_quality - test the ordering quality computed by meshnd.
-%   meshsparse     - convert a 2D or 3D mesh into a sparse matrix matrix.
-%   meshnd_example - example usage of meshnd and meshsparse.
-%
-% The outputs of the meshnd example and meshnd_quality are in meshd.png,
-% meshnd_quality_out.txt, and meshnd_quality.png.
-%
-% Example:
-%   % with no inputs or outputs, meshnd runs a demo:
-%   meshnd	    
-%
-%   % create the sparse matrix for a 7-by-5-by-2 mesh:
-%   A = meshsparse (meshnd (7,5,2)) ;
-%
-%   % create a 7-by-5-by-2 mesh and find the nested dissection ordering:
-%   [G p] = meshnd (7,5,2) ;
-%   A = meshsparse (G) ;
-%   subplot (1,2,1) ; spy (A) ;
-%   subplot (1,2,2) ; spy (A (p,p)) ;
-%
-
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
-% VERSION 1.1.0, Nov 1, 2007
diff --git a/MESHND/README.txt b/MESHND/README.txt
deleted file mode 100644
index 4a0038a..0000000
--- a/MESHND/README.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-%MESHND: creation and nested dissection of regular 2D and 3D meshes. 
-%
-%   meshnd         - creation and nested dissection of a regular 2D or 3D mesh.
-%   meshnd_quality - test the ordering quality computed by meshnd.
-%   meshsparse     - convert a 2D or 3D mesh into a sparse matrix matrix.
-%   meshnd_example - example usage of meshnd and meshsparse.
-%
-% The outputs of the meshnd example and meshnd_quality are in meshd.png,
-% meshnd_quality_out.txt, and meshnd_quality.png.
-%
-% Example:
-%   % with no inputs or outputs, meshnd runs a demo:
-%   meshnd	    
-%
-%   % create the sparse matrix for a 7-by-5-by-2 mesh:
-%   A = meshsparse (meshnd (7,5,2)) ;
-%
-%   % create a 7-by-5-by-2 mesh and find the nested dissection ordering:
-%   [G p] = meshnd (7,5,2) ;
-%   A = meshsparse (G) ;
-%   subplot (1,2,1) ; spy (A) ;
-%   subplot (1,2,2) ; spy (A (p,p)) ;
-%
-
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
-% VERSION 1.1.0, Nov 1, 2007
diff --git a/MESHND/meshnd.m b/MESHND/meshnd.m
deleted file mode 100644
index 8849ec9..0000000
--- a/MESHND/meshnd.m
+++ /dev/null
@@ -1,114 +0,0 @@
-function [G, p, pinv, Gnew] = meshnd (arg1,n,k)
-%MESHND creation and nested dissection of a regular 2D or 3D mesh.
-% [p G pinv Gnew] = meshnd (m,n) constructs a m-by-n 2D mesh G, and then finds
-% a permuted mesh Gnew where Gnew = pinv(G) and G = p(Gnew).  meshnd(m,n,k)
-% creates an m-by-n-by-k 3D mesh.
-%
-% [p G pinv Gnew] = meshnd (G) does not construct G, but uses the mesh G as
-% given on input instead.
-%
-% Example:
-% [G p pinv Gnew] = meshnd (4,5) ;
-%
-% returns
-%    Gnew =
-%        1     2    17     9    10
-%        7     8    18    15    16
-%        3     5    19    11    13
-%        4     6    20    12    14
-%    G =
-%        1     2     3     4     5
-%        6     7     8     9    10
-%       11    12    13    14    15
-%       16    17    18    19    20
-%
-% With no inputs, a few example meshes are generated and plotted.
-%
-% See also nested, numgrid.
-
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
-
-% get the inputs and create the mesh if not provided on input
-if (nargin == 0)
-
-    % run a simple example
-    meshnd_example ;
-
-elseif (nargin == 1)
-
-    % the mesh is provided on input
-    G = arg1 ;
-    [m n k] = size (G) ;
-
-elseif (nargin == 2)
-
-    % create the m-by-n-by-k mesh in "natural" (row-major) order.  This is how
-    % a typical 2D mesh is ordered.  A column-major order would be better, since
-    % in that case G(:) would equal 1:(m*n) ... but let's stick with tradition.
-    m = arg1 ;
-    k = 1 ;
-    G = reshape (1:(m*n*k), n, m, k)' ;
-
-elseif (nargin == 3)
-
-    % create the m-by-n-by-k mesh in column-major order.  The first m-by-n-by-1
-    % slice is in column-major order, followed by all the other slices 2 to k.
-    m = arg1 ;
-    G = reshape (1:(m*n*k), m, n, k) ;
-
-else
-
-    error ('Usage: [G p pinv Gnew] = meshnd(G), meshnd(m,n) or meshnd(m,n,k)') ;
-
-end
-
-if (nargout > 1)
-    p = nd2 (G)' ;	    % order the mesh
-end
-
-if (nargout > 2)
-    pinv (p) = 1:(m*n*k) ;  % find the inverse permutation
-end
-
-if (nargout > 3)
-    Gnew = pinv (G) ;	    % find the permuted mesh
-end
-
-%-------------------------------------------------------------------------------
-
-function p = nd2 (G)
-%ND2 p = nd2 (G) permutes a 2D or 3D mesh G.
-% Compare with nestdiss which uses p as a scalar offset and returns a modified
-% mesh G that corresponds to Gnew in meshnd.  Here, the scalar offset p in
-% nestdiss is not needed.  Instead, p is a permutation, and the modified mesh
-% Gnew is not returned.
-
-[m n k] = size (G) ;
-
-if (max ([m n k]) <= 2)
-
-    % G is small; do not cut it
-    p = G (:) ;
-
-elseif k >= max (m,n)
-
-    % cut G along the middle slice, cutting k in half
-    s = ceil (k/2) ;
-    middle = G (:,:,s) ;
-    p = [(nd2 (G (:,:,1:s-1))) ; (nd2 (G (:,:,s+1:k))) ; middle(:)] ;
-
-elseif n >= max (m,k)
-
-    % cut G along the middle column, cutting n in half
-    s = ceil (n/2) ;
-    middle = G (:,s,:) ;
-    p = [(nd2 (G (:,1:s-1,:))) ; (nd2 (G (:,s+1:n,:))) ; middle(:)] ;
-
-else   
-
-    % cut G along the middle row, cutting m in half
-    s = ceil (m/2) ;
-    middle = G (s,:,:) ;
-    p = [(nd2 (G (1:s-1,:,:))) ; (nd2 (G (s+1:m,:,:))) ; middle(:)] ;
-
-end
diff --git a/MESHND/meshnd_example.m b/MESHND/meshnd_example.m
deleted file mode 100644
index b24cbd8..0000000
--- a/MESHND/meshnd_example.m
+++ /dev/null
@@ -1,106 +0,0 @@
-function meshnd_example
-%MESHND_EXAMPLE example usage of meshnd and meshsparse.
-%
-% Example:
-%   meshnd_example
-%
-% See also meshnd.
-
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
-
-help meshnd
-
-% 2D mesh, compare with Cleve Moler's demos
-
-m = 7 ;
-n = 7 ;
-
-[G p pinv Gnew] = meshnd (m,n) ;
-fprintf ('Original mesh:\n') ;
-disp (G) ;
-fprintf ('Permuted node numbers using meshnd.m (nested dissection):\n') ;
-disp (Gnew) ;
-
-Moler = nested (n+2) ;
-Moler = Moler (2:n+1,2:n+1) ;
-fprintf ('Cleve Moler''s nested dissection ordering, using nested.m\n') ;
-disp (Moler) ;
-fprintf ('Difference between nested.m and meshnd.m:\n') ;
-disp (Gnew-Moler) ;
-
-% 2D and 3D meshes
-
-stencils = [5 9 7 27] ;
-mm = [7 7 7 7] ;
-nn = [7 7 7 7] ;
-kk = [1 1 7 7] ;
-
-for s = 1:4
-
-    m = mm (s) ;
-    n = nn (s) ;
-    k = kk (s) ;
-    [G p] = meshnd (mm (s), nn (s), kk (s)) ;
-    A = meshsparse (G, stencils (s)) ;
-    C = A (p,p) ;
-    parent = etree (C) ;
-    try
-        L = chol (C, 'lower') ;
-    catch
-        % old version of MATLAB
-        L = chol (C)' ;
-    end
-    subplot (4,5,(s-1)*5 + 1) ;
-    do_spy (A) ;
-    if (k > 1)
-	title (sprintf ('%d-by-%d-by-%d mesh, %d-point stencil', ...
-	    m, n, k, stencils (s))) ;
-    else
-	title (sprintf ('%d-by-%d mesh, %d-point stencil', ...
-	    m, n, stencils (s))) ;
-    end
-    subplot (4,5,(s-1)*5 + 2) ;
-    do_spy (C) ;
-    title ('nested dissection') ;
-    subplot (4,5,(s-1)*5 + 3) ;
-    treeplot (parent) ;
-    title ('etree') ;
-    xlabel ('') ;
-    subplot (4,5,(s-1)*5 + 4) ;
-    do_spy (L) ;
-    title (sprintf ('Cholesky with nd, nnz %d', nnz (L))) ;
-    try
-        % use the built-in AMD
-        p = amd (A) ;
-    catch
-        try
-            % use AMD from SuiteSparse
-            p = amd2 (A) ;
-        catch
-            % use the older built-in SYMAMD
-            p = symamd (A) ;
-        end
-    end
-    try
-        L = chol (A (p,p), 'lower') ;
-    catch
-        % old version of MATLAB
-        L = chol (A (p,p))' ;
-    end
-    subplot (4,5,(s-1)*5 + 5) ;
-    do_spy (L) ;
-    title (sprintf ('Cholesky with amd, nnz %d', nnz (L))) ;
-
-end
-
-%-------------------------------------------------------------------------------
-
-function do_spy (A)
-%DO_SPY use cspy(A) to plot a matrix, or spy(A) if cspy not installed.
-try
-    % This function is in CSparse.  It generates better looking plots than spy.
-    cspy (A) ;
-catch
-    spy (A) ;
-end
-
diff --git a/MESHND/meshnd_quality.m b/MESHND/meshnd_quality.m
deleted file mode 100644
index 74779c5..0000000
--- a/MESHND/meshnd_quality.m
+++ /dev/null
@@ -1,159 +0,0 @@
-function meshnd_quality (do_metis)
-%MESHND_QUALITY test the ordering quality computed by meshnd.
-% The fill-in and flop count for sparse Cholesky factorization using the meshnd
-% nested dissection ordering is computed with AMD.  If SuiteSparse is installed
-% with METIS, and if requested, then the metis nested dissection ordering is
-% also compared.
-%
-% Example:
-%   meshnd_quality          % compare MESHND and AMD
-%   meshnd_quality (1)      % also compare with METIS
-%
-% See also meshnd, meshsparse, nested, amd, metis.
-
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
-
-stencils = [5 9 7 27] ;
-
-if (nargin < 1)
-    do_metis = 0 ;
-end
-if (do_metis)
-    if (exist ('metis') ~= 3)                                               %#ok
-        % METIS not installed
-        do_metis = 0 ;
-    end
-end
-
-figure (1)
-clf
-
-for sk = 1:4
-
-    stencil = stencils (sk) ;
-
-    is3D = (stencil == 7 | stencil == 27) ;     %#ok
-    if (is3D)
-	s = 2.^(3:.1:7) ;		% mesh size up to 127-by-127-by-127
-    else
-	s = 2.^(3:.1:10) - 1 ;		% mesh size up to 1023-by-1023
-    end
-    t = length (s) ;
-    lnz = nan * zeros (3,t) ;
-    fl  = nan * zeros (3,t) ;
-
-    try
-
-        for t = 1:length (s)
-
-            n = floor (s (t)) ;
-
-            % create the mesh and the matrix, and get nested dissection ordering
-            if (is3D)
-                fprintf ('3D mesh: %d-by-%d-by-%d, %d-point stencil\n', ...
-                    n, n, n, stencil) ;
-                [G p] = meshnd (n, n, n) ;
-            else
-                fprintf ('2D mesh: %d-by-%d, %d-point stencil\n', n, n,stencil);
-                [G p] = meshnd (n, n) ;
-            end
-            A = meshsparse (G, stencil) ;
-
-            % ND results
-            c = symbfact (A (p,p)) ;
-            lnz (1,t) = sum (c) ;
-            fl  (1,t) = sum (c.^2) ;
-            fprintf ('    MESHND:            nnz(L) %8.3e  flops %8.3e\n', ...
-                lnz (1,t), fl (1,t)) ;
-            clear G
-
-            % AMD results
-            try
-                p = amd (A) ;
-            catch
-                % assume SuiteSparse is installed
-                p = amd2 (A) ;
-            end
-            c = symbfact (A (p,p)) ;
-            lnz (2,t) = sum (c) ;
-            fl  (2,t) = sum (c.^2) ;
-            fprintf ('    AMD:               nnz(L) %8.3e  flops %8.3e\n', ...
-                lnz (2,t), fl (2,t)) ;
-
-            % METIS results (requires SuiteSparse and METIS)
-            if (do_metis)
-                p = metis (A) ;
-                c = symbfact (A (p,p)) ;
-                lnz (3,t) = sum (c) ;
-                fl  (3,t) = sum (c.^2) ;
-                fprintf (...
-                    '    METIS:             nnz(L) %8.3e  flops %8.3e\n', ...
-                    lnz (3,t), fl (3,t)) ;
-            end
-
-            % plot the relative nnz(L) results
-            subplot (2, 4, 2*sk - 1) ;
-            loglog (s (1:t), lnz (2,1:t) ./ lnz (1,1:t), 'b-') ;
-            hold on
-            if (do_metis)
-                loglog (s (1:t), lnz (3,1:t) ./ lnz (1,1:t), 'r-') ;
-            end
-            loglog (s (1:t), ones (1,t), 'k-') ;
-            if (do_metis)
-                ylabel ('nnz(L) for AMD or METIS / nnz(L) for meshnd') ;
-                legend ('AMD', 'METIS') ;
-            else
-                ylabel ('nnz(L) for AMD / nnz(L) for meshnd') ;
-            end
-            xlabel ('mesh size') ;
-            axis ([min(s) max(s) .1 10]) ;
-            set (gca, 'YTick', [.1 .25 .5 .8 1 1.25 2 4 10]) ;
-            if (is3D)
-                set (gca, 'XTick', [1 10 100]) ;
-                title (sprintf ('3D mesh, %d-point stencil', stencil)) ;
-            else
-                set (gca, 'XTick', [1 10 100 1000]) ;
-                title (sprintf ('2D mesh, %d-point stencil', stencil)) ;
-            end
-
-            % plot the relative flop results
-            subplot (2, 4, 2*sk) ;
-            loglog (s (1:t), fl (2,1:t) ./ fl (1,1:t), 'b-') ;
-            hold on
-            if (do_metis)
-                loglog (s (1:t), fl (3,1:t) ./ fl (1,1:t), 'r-') ;
-            end
-            loglog (s (1:t), ones (1,t), 'k-') ;
-            ylabel ('flops for AMD or METIS / flops for meshnd') ;
-            if (do_metis)
-                ylabel ('flops for AMD or METIS / flops for meshnd') ;
-                legend ('AMD', 'METIS') ;
-            else
-                ylabel ('nnz(L) for AMD / nnz(L) for meshnd') ;
-            end
-            xlabel ('mesh size') ;
-            axis ([min(s) max(s) .1 10]) ;
-            set (gca, 'YTick', [.1 .25 .5 .8 1 1.25 2 4 10]) ;
-            if (is3D)
-                set (gca, 'XTick', [1 10 100]) ;
-                title (sprintf ('3D mesh, %d-point stencil', stencil)) ;
-            else
-                set (gca, 'XTick', [1 10 100 1000]) ;
-                title (sprintf ('2D mesh, %d-point stencil', stencil)) ;
-            end
-
-            drawnow
-
-        end
-
-    catch
-        % out-of-memory is OK, other errors are not
-        disp (lasterr) ;
-        if (isempty (strfind (lasterr, 'Out of memory')))
-            error (lasterr) ;                                               %#ok
-        else
-            fprintf ('test terminated early, but otherwise OK\n') ;
-        end
-    end
-
-end
diff --git a/MESHND/meshsparse.m b/MESHND/meshsparse.m
deleted file mode 100644
index 4b8bcb1..0000000
--- a/MESHND/meshsparse.m
+++ /dev/null
@@ -1,144 +0,0 @@
-function A = meshsparse (G, stencil)
-%MESHSPARSE convert a 2D or 3D mesh into a sparse matrix matrix.
-%
-% Example:
-% A = meshsparse (G)
-% A = meshsparse (G,5)		    % 2D 5-point stencil (default for 2D case)
-% A = meshsparse (G,9)		    % 2D 9-point stencil
-% A = meshsparse (G,7)		    % 3D 7-point stencil (default for 3D case)
-% A = meshsparse (G,27)		    % 3D 27-point stencil
-% A = meshsparse (G,stencil)	    % user-provided stencil
-%
-% To create a sparse matrix for an m-by-n 2D mesh or m-by-n-by-k 3D mesh, use
-%
-% A = meshsparse (meshnd (m,n)) ;
-% A = meshsparse (meshnd (m,n,k)) ;
-%
-% G is an m-by-n-by-k matrix, with entries numbered 1 to m*n*k (with k=1 for
-% the 2D case).  The entries in G can appear in any order, but no duplicate
-% entries can appear.  That is sort(G(:))' must equal 1:m*n*k. A is returned as
-% a sparse matrix with m*n*k rows and columns whose pattern depends on the
-% stencil.  The number of nonzeros in most rows/columns of A is equal to the
-% number of points in the stencil.  For examples on how to specify your own
-% stencil, see the contents of meshsparse.m.
-%
-% See also meshnd.
-
-% Copyright 2007, Timothy A. Davis, Univ. of Florida
-
-if (nargin < 2)
-    [m n k] = size (G) ;
-    if (k == 1)
-	stencil = 5 ;	% 2D default is a 5-point stencil
-    else
-	stencil = 7 ;	% 3D default is a 7-point stencil
-    end
-end
-
-if (numel (stencil) == 1)
-
-    % create the stencil
-
-    if (stencil == 5)
-
-	% 5-point stencil (2D)
-	stencil = [
-	    -1  0   	% north
-	     1  0   	% south
-	     0  1   	% east
-	     0 -1   ] ;	% west
-
-    elseif (stencil == 9)
-
-	% 9-point stencil (2D)
-	stencil = [
-	    -1  0   	% north
-	     1  0   	% south
-	     0  1   	% east
-	     0 -1   	% west
-	    -1 -1   	% north-west
-	    -1  1   	% north-east
-	     1 -1   	% south-west
-	     1  1   ] ;	% south-east
-
-    elseif (stencil == 7)
-
-	% 7-point stencil (3D)
-	stencil = [
-	    -1  0  0	% north
-	     1  0  0	% south
-	     0  1  0	% east
-	     0 -1  0	% west
-	     0  0 -1    % up
-	     0  0  1] ; % down
-
-    elseif (stencil == 27)
-
-	% 27-point stencil (3D)
-	stencil = zeros (26, 3) ;
-	t = 0 ;
-	for i = -1:1
-	    for j = -1:1
-		for k = -1:1
-		    if (~(i == 0 & j == 0 & k == 0))    %#ok
-			t = t + 1 ;
-			stencil (t,:) = [i j k] ;
-		    end
-		end
-	    end
-	end
-    end
-end
-
-stencil = fix (stencil) ;
-[npoints d] = size (stencil) ;
-if (d == 2)
-    % append zeros onto a 2D stencil to make it "3D"
-    stencil = [stencil zeros(npoints,1)] ;
-end
-[npoints d] = size (stencil) ;
-if (d ~= 3)
-    error ('invalid stencil') ;
-end
-
-[m n k] = size (G) ;
-i1 = 1:m ;
-j1 = 1:n ;
-k1 = 1:k ;
-
-Ti = zeros (npoints*m*n*k, 1) ;
-Tj = zeros (npoints*m*n*k, 1) ;
-nz = 0 ;
-
-for point = 1:npoints
-
-    % find the overlapping rows of G
-    idelta = stencil (point,1) ;
-    i2 = i1 + idelta ;
-    ki = find (i2 >= 1 & i2 <= m) ;
-
-    % find the overlapping columns of G
-    jdelta = stencil (point,2) ;
-    j2 = j1 + jdelta ;
-    kj = find (j2 >= 1 & j2 <= n) ;
-
-    % find the overlapping slices of G
-    kdelta = stencil (point,3) ;
-    k2 = k1 + kdelta ;
-    kk = find (k2 >= 1 & k2 <= k) ;
-
-    % find the nodes in G the shifted G that touch
-    g2 = G (i2 (ki), j2 (kj), k2 (kk)) ;    % shifted mesh
-    g1 = G (i1 (ki), j1 (kj), k1 (kk)) ;    % unshifted mesh
-
-    % place the edges in the triplet list
-    e = numel (g1) ;
-    Ti ((nz+1):(nz+e)) = g1 (:) ;
-    Tj ((nz+1):(nz+e)) = g2 (:) ;
-    nz = nz + e ;
-end
-
-% convert the triplets into a sparse matrix
-Ti = Ti (1:nz) ;
-Tj = Tj (1:nz) ;
-A = npoints * speye (m*n*k) - sparse (Ti, Tj, 1, m*n*k, m*n*k) ;
diff --git a/Makefile b/Makefile
index b56e0c8..e47f792 100644
--- a/Makefile
+++ b/Makefile
@@ -1,86 +1,166 @@
 #-------------------------------------------------------------------------------
-# Makefile for all UF sparse matrix packages
+# Makefile for all SuiteSparse packages
 #-------------------------------------------------------------------------------
 
-include UFconfig/UFconfig.mk
+include SuiteSparse_config/SuiteSparse_config.mk
 
 # Compile the default rules for each package
 default:
-	( cd UFconfig/xerbla ; $(MAKE) )
-#	( cd metis-4.0 ; $(MAKE) )
-	( cd AMD ; $(MAKE) )
-	( cd CAMD ; $(MAKE) )
-	( cd COLAMD ; $(MAKE) )
-	( cd BTF ; $(MAKE) )
-	( cd KLU ; $(MAKE) )
-	( cd LDL ; $(MAKE) )
-	( cd CCOLAMD ; $(MAKE) )
-	( cd UMFPACK ; $(MAKE) )
-	( cd CHOLMOD ; $(MAKE) )
-	( cd CSparse ; $(MAKE) )
-	( cd CXSparse ; $(MAKE) )
-#	( cd LPDASA ; $(MAKE) )
-#	( cd PARAKLETE ; $(MAKE) )
+	( cd SuiteSparse_config/xerbla && $(MAKE) )
+	( cd SuiteSparse_config && $(MAKE) )
+	- ( cd metis-4.0 && $(MAKE) )
+	( cd AMD && $(MAKE) )
+	( cd CAMD && $(MAKE) )
+	( cd COLAMD && $(MAKE) )
+	( cd BTF && $(MAKE) )
+	( cd KLU && $(MAKE) )
+	( cd LDL && $(MAKE) )
+	( cd CCOLAMD && $(MAKE) )
+	( cd UMFPACK && $(MAKE) )
+	( cd CHOLMOD && $(MAKE) )
+	( cd CSparse && $(MAKE) )
+	( cd CXSparse && $(MAKE) )
+	( cd RBio && $(MAKE) )
+ifneq ($(GPU_CONFIG),)
+	( cd SuiteSparse_GPURuntime && $(MAKE) )
+	( cd GPUQREngine && $(MAKE) )
+endif
+	( cd SPQR && $(MAKE) )
+#	( cd PIRO_BAND && $(MAKE) )
+#	( cd SKYLINE_SVD && $(MAKE) )
 
-library: default
+# install all packages in /usr/local/lib and /usr/local/include
+# (note that CSparse is not installed; CXSparse is installed instead)
+install:
+	( cd SuiteSparse_config && $(MAKE) install )
+	( cd AMD && $(MAKE) install )
+	( cd CAMD && $(MAKE) install )
+	( cd COLAMD && $(MAKE) install )
+	( cd BTF && $(MAKE) install )
+	( cd KLU && $(MAKE) install )
+	( cd LDL && $(MAKE) install )
+	( cd CCOLAMD && $(MAKE) install )
+	( cd UMFPACK && $(MAKE) install )
+	( cd CHOLMOD && $(MAKE) install )
+	( cd CXSparse && $(MAKE) install )
+	( cd RBio && $(MAKE) install )
+ifneq ($(GPU_CONFIG),)
+	( cd SuiteSparse_GPURuntime && $(MAKE) install )
+	( cd GPUQREngine && $(MAKE) install )
+endif
+	( cd SPQR && $(MAKE) install )
+#	( cd PIRO_BAND && $(MAKE) install )
+#	( cd SKYLINE_SVD && $(MAKE) install )
 
-# Compile the MATLAB mexFunctions (except RBio and UFcollection)
-mex:
-	( cd AMD ; $(MAKE) mex )
-	( cd CAMD ; $(MAKE) mex )
-	( cd COLAMD ; $(MAKE) mex )
-	( cd BTF ; $(MAKE) mex )
-	( cd KLU ; $(MAKE) mex )
-	( cd LDL ; $(MAKE) mex )
-	( cd CCOLAMD ; $(MAKE) mex )
-	( cd CHOLMOD ; $(MAKE) mex )
-	( cd UMFPACK ; $(MAKE) mex )
-	( cd CXSparse ; $(MAKE) mex )
-	( cd CSparse ; $(MAKE) mex )
+# uninstall all packages
+uninstall:
+	( cd SuiteSparse_config && $(MAKE) uninstall )
+	( cd AMD && $(MAKE) uninstall )
+	( cd CAMD && $(MAKE) uninstall )
+	( cd COLAMD && $(MAKE) uninstall )
+	( cd BTF && $(MAKE) uninstall )
+	( cd KLU && $(MAKE) uninstall )
+	( cd LDL && $(MAKE) uninstall )
+	( cd CCOLAMD && $(MAKE) uninstall )
+	( cd UMFPACK && $(MAKE) uninstall )
+	( cd CHOLMOD && $(MAKE) uninstall )
+	( cd CXSparse && $(MAKE) uninstall )
+	( cd RBio && $(MAKE) uninstall )
+	( cd SuiteSparse_GPURuntime && $(MAKE) uninstall )
+	( cd GPUQREngine && $(MAKE) uninstall )
+	( cd SPQR && $(MAKE) uninstall )
+#	( cd PIRO_BAND && $(MAKE) uninstall )
+#	( cd SKYLINE_SVD && $(MAKE) uninstall )
+
+library:
+	( cd SuiteSparse_config/xerbla && $(MAKE) )
+	( cd SuiteSparse_config && $(MAKE) )
+	- ( cd metis-4.0 && $(MAKE) )
+	( cd AMD && $(MAKE) library )
+	( cd BTF && $(MAKE) library )
+	( cd CAMD && $(MAKE) library )
+	( cd CCOLAMD && $(MAKE) library )
+	( cd COLAMD && $(MAKE) library )
+	( cd CHOLMOD && $(MAKE) library )
+	( cd KLU && $(MAKE) library )
+	( cd LDL && $(MAKE) library )
+	( cd UMFPACK && $(MAKE) library )
+	( cd CSparse && $(MAKE) library )
+	( cd CXSparse && $(MAKE) library )
+	( cd RBio && $(MAKE) library )
+ifneq ($(GPU_CONFIG),)
+	( cd SuiteSparse_GPURuntime && $(MAKE) library )
+	( cd GPUQREngine && $(MAKE) library )
+endif
+	( cd SPQR && $(MAKE) library )
+#	( cd PIRO_BAND && $(MAKE) library )
+#	( cd SKYLINE_SVD && $(MAKE) library )
 
 # Remove all files not in the original distribution
 purge:
-	( cd UFconfig/xerbla ; $(MAKE) purge )
-#	( cd metis-4.0 ; $(MAKE) realclean )
-	( cd AMD ; $(MAKE) purge )
-	( cd CAMD ; $(MAKE) purge )
-	( cd COLAMD ; $(MAKE) purge )
-	( cd BTF ; $(MAKE) purge )
-	( cd KLU ; $(MAKE) purge )
-	( cd LDL ; $(MAKE) purge )
-	( cd CCOLAMD ; $(MAKE) purge )
-	( cd UMFPACK ; $(MAKE) purge )
-	( cd CHOLMOD ; $(MAKE) purge )
-	( cd CSparse ; $(MAKE) purge )
-	( cd CXSparse ; $(MAKE) purge )
-	( cd RBio ; $(RM) *.mex* )
-	( cd UFcollection ; $(RM) *.mex* )
-	( cd SSMULT ; $(RM) *.mex* )
-#	( cd LPDASA ; $(MAKE) purge )
-#	( cd PARAKLETE ; $(MAKE) purge )
+	- ( cd SuiteSparse_config/xerbla && $(MAKE) purge )
+	- ( cd SuiteSparse_config && $(MAKE) purge )
+	- ( cd metis-4.0 && $(MAKE) realclean )
+	- ( cd AMD && $(MAKE) purge )
+	- ( cd CAMD && $(MAKE) purge )
+	- ( cd COLAMD && $(MAKE) purge )
+	- ( cd BTF && $(MAKE) purge )
+	- ( cd KLU && $(MAKE) purge )
+	- ( cd LDL && $(MAKE) purge )
+	- ( cd CCOLAMD && $(MAKE) purge )
+	- ( cd UMFPACK && $(MAKE) purge )
+	- ( cd CHOLMOD && $(MAKE) purge )
+	- ( cd CSparse && $(MAKE) purge )
+	- ( cd CXSparse && $(MAKE) purge )
+	- ( cd RBio && $(MAKE) purge )
+	- ( cd MATLAB_Tools/UFcollection && $(RM) *.mex* )
+	- ( cd MATLAB_Tools/SSMULT && $(RM) *.mex* )
+	- ( cd SuiteSparse_GPURuntime && $(MAKE) purge )
+	- ( cd GPUQREngine && $(MAKE) purge )
+	- ( cd SPQR && $(MAKE) purge )
+#	- ( cd PIRO_BAND && $(MAKE) purge )
+#	- ( cd SKYLINE_SVD && $(MAKE) purge )
+	- $(RM) MATLAB_Tools/*/*.mex* MATLAB_Tools/spok/private/*.mex*
 
 # Remove all files not in the original distribution, but keep the libraries
 clean:
-	( cd UFconfig/xerbla ; $(MAKE) clean )
-#	( cd metis-4.0 ; $(MAKE) clean )
-	( cd AMD ; $(MAKE) clean )
-	( cd CAMD ; $(MAKE) clean )
-	( cd COLAMD ; $(MAKE) clean )
-	( cd BTF ; $(MAKE) clean )
-	( cd KLU ; $(MAKE) clean )
-	( cd LDL ; $(MAKE) clean )
-	( cd CCOLAMD ; $(MAKE) clean )
-	( cd UMFPACK ; $(MAKE) clean )
-	( cd CHOLMOD ; $(MAKE) clean )
-	( cd CSparse ; $(MAKE) clean )
-	( cd CXSparse ; $(MAKE) clean )
-#	( cd LPDASA ; $(MAKE) clean )
-#	( cd PARAKLETE ; $(MAKE) clean )
+	- ( cd SuiteSparse_config/xerbla && $(MAKE) clean )
+	- ( cd SuiteSparse_config && $(MAKE) clean )
+	- ( cd metis-4.0 && $(MAKE) clean )
+	- ( cd AMD && $(MAKE) clean )
+	- ( cd CAMD && $(MAKE) clean )
+	- ( cd COLAMD && $(MAKE) clean )
+	- ( cd BTF && $(MAKE) clean )
+	- ( cd KLU && $(MAKE) clean )
+	- ( cd LDL && $(MAKE) clean )
+	- ( cd CCOLAMD && $(MAKE) clean )
+	- ( cd UMFPACK && $(MAKE) clean )
+	- ( cd CHOLMOD && $(MAKE) clean )
+	- ( cd CSparse && $(MAKE) clean )
+	- ( cd CXSparse && $(MAKE) clean )
+	- ( cd RBio && $(MAKE) clean )
+	- ( cd SuiteSparse_GPURuntime && $(MAKE) clean )
+	- ( cd GPUQREngine && $(MAKE) clean )
+	- ( cd SPQR && $(MAKE) clean )
+#	- ( cd PIRO_BAND && $(MAKE) clean )
+#	- ( cd SKYLINE_SVD && $(MAKE) clean )
+
+# Create the PDF documentation
+docs:
+	( cd AMD && $(MAKE) docs )
+	( cd CAMD && $(MAKE) docs )
+	( cd KLU && $(MAKE) docs )
+	( cd LDL && $(MAKE) docs )
+	( cd UMFPACK && $(MAKE) docs )
+	( cd CHOLMOD && $(MAKE) docs )
+	( cd SPQR && $(MAKE) docs )
+#	( cd PIRO_BAND && $(MAKE) docs )
+#	( cd SKYLINE_SVD && $(MAKE) docs )
 
 distclean: purge
 
-# Create CXSparse from CSparse.  Note that the CXSparse directory should
-# initially not exist.
+# Create CXSparse from CSparse
+# Note that the CXSparse directory should initially not exist.
 cx:
 	( cd CSparse ; $(MAKE) purge )
 	( cd CXSparse_newfiles ; tar cfv - * | gzip -9 > ../CXSparse_newfiles.tar.gz )
@@ -88,12 +168,17 @@ cx:
 	( cd CXSparse/Demo ; $(MAKE) )
 	( cd CXSparse/Demo ; $(MAKE) > cs_demo.out )
 	( cd CXSparse ; $(MAKE) purge )
+	$(RM) -f CXSparse_newfiles.tar.gz
 
 # statement coverage (Linux only); this requires a lot of time.
 # The umfpack tcov requires a lot of disk space
 cov:
-	( cd CXSparse ; $(MAKE) cov )
-	( cd CSparse ; $(MAKE) cov )
-	( cd KLU ; $(MAKE) cov )
-	( cd CHOLMOD ; $(MAKE) cov )
-	( cd UMFPACK ; $(MAKE) cov )
+	( cd CXSparse && $(MAKE) cov )
+	( cd CSparse && $(MAKE) cov )
+	( cd KLU && $(MAKE) cov )
+	( cd CHOLMOD && $(MAKE) cov )
+	( cd SPQR && $(MAKE) cov )
+	( cd UMFPACK && $(MAKE) cov )
+#	( cd PIRO_BAND && $(MAKE) cov )
+#	( cd SKYLINE_SVD && $(MAKE) cov )
+
diff --git a/RBio/Contents.m b/RBio/Contents.m
deleted file mode 100644
index ca63642..0000000
--- a/RBio/Contents.m
+++ /dev/null
@@ -1,24 +0,0 @@
-% RBio: MATLAB toolbox for reading/writing sparse matrices in the Rutherford/
-%   Boeing format, and for reading/writing problems in the UF Sparse Matrix
-%   Collection from/to a set of files in a directory.
-%
-%   RBread    - read a sparse matrix from a Rutherford/Boeing file
-%   RBreade   - read a symmetric finite-element matrix from a R/B file
-%   RBtype    - determine the Rutherford/Boeing type of a sparse matrix
-%   RBwrite   - write a sparse matrix to a Rutherford/Boeing file
-%   RBraw     - read the raw contents of a Rutherford/Boeing file
-%   RBfix     - read a possibly corrupted matrix from a R/B file
-%   RBinstall - install the RBio toolbox for use in MATLAB
-%   RBmake    - compile the RBio toolbox for use in MATLAB
-%
-% Example:
-%
-%   load west0479
-%   C = west0479 ;
-%   RBwrite ('mywest', C, 'WEST0479 chemical eng. problem', 'west0479')
-%   A = RBread ('mywest') ;
-%   norm (A-C,1)
-%
-% See also UFget, mread, mwrite.
-
-% Copyright 2007, Timothy A. Davis
diff --git a/RBio/Demo/Makefile b/RBio/Demo/Makefile
new file mode 100644
index 0000000..a764acb
--- /dev/null
+++ b/RBio/Demo/Makefile
@@ -0,0 +1,37 @@
+#===============================================================================
+# RBio/Demo/Makefile
+#===============================================================================
+
+default: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+CLIB = ../Lib/librbio.a ../../SuiteSparse_config/libsuitesparseconfig.a $(LIB)
+
+C = $(CC) $(CF)
+
+all: library RBdemo
+	./RBdemo < ../RBio/private/west0479.rua
+
+code: library
+
+distclean:nnz,  purge
+
+purge: clean
+	- $(RM) RBdemo
+	- $(RM) -r *.dSYM
+
+clean:
+	- $(RM) $(CLEAN) temp.rb
+
+#-------------------------------------------------------------------------------
+library:
+	( cd ../../SuiteSparse_config ; $(MAKE) )
+	( cd ../Lib ; $(MAKE) )
+#-------------------------------------------------------------------------------
+
+I = -I../Include -I../../SuiteSparse_config
+
+RBdemo: library RBdemo.c
+	$(C) -o RBdemo $(I) RBdemo.c $(CLIB)
+
diff --git a/RBio/Demo/RBdemo.c b/RBio/Demo/RBdemo.c
new file mode 100644
index 0000000..b6eac8c
--- /dev/null
+++ b/RBio/Demo/RBdemo.c
@@ -0,0 +1,252 @@
+/* ========================================================================== */
+/* === RBio/Demo/RBdemo.c: C demo =========================================== */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+/* This program reads a Rutherford/Boeing file from stdin and uses it
+   to test the RBio C-callable functions. */
+
+#include "RBio.h"
+#define Long SuiteSparse_long
+#define ID "%ld"
+
+#define SLEN 4096
+
+int main (int argc, char **argv)
+{
+    double xr, xz, xmin, xmax ;
+    double *Ax, *Az ;
+    Long nrow, ncol, mkind, skind, *Ap, *Ai, i, *Zp, *Zi, asize, mkind2, skind2,
+        znz, j, p, status, njumbled, nzeros, build_upper, zero_handling, fem,
+        xsize, nelnz, nnz ;
+    char title [73], key [9], mtype [4], mtype2 [4], *filename ;
+
+    /* initialize the memory allocation functions */
+    SuiteSparse_start ( ) ;
+
+    /* read from stdin, or from file given by first argument */
+    filename = (argc > 1) ? argv [1] : NULL ;
+
+    title [0] = '\0' ;
+    build_upper = 1 ;
+    zero_handling = 2 ;     /* extract zeros */
+    status = RBread (filename, build_upper, zero_handling, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, &Ax, &Az, &Zp, &Zi) ;
+
+    printf ("\n===========================================================\n") ;
+    printf ("title: [%s]\n", title) ;
+    printf ("status " ID "\n", status) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBread Error! "ID"\n", status) ;
+        SuiteSparse_free (Ap) ;
+        SuiteSparse_free (Ai) ;
+        SuiteSparse_free (Ax) ;
+        SuiteSparse_free (Az) ;
+        SuiteSparse_free (Zp) ;
+        SuiteSparse_free (Zi) ;
+
+        if (filename != NULL)
+        {
+            status = RBreadraw (filename, title, key, mtype, &nrow, &ncol, &nnz,
+                &nelnz, &mkind, &skind, &fem, &xsize, &Ap, &Ai, &Ax) ;
+            if (status != RBIO_OK)
+            {
+                printf ("RBreadraw error! status "ID"\n", status) ;
+                return (1) ;
+            }
+            printf ("raw nrow "ID" ncol "ID" nnz "ID" nelnz "ID" xsize "ID"\n",
+                nrow, ncol, nnz, nelnz, xsize) ;
+            SuiteSparse_free (Ap) ;
+            SuiteSparse_free (Ai) ;
+            SuiteSparse_free (Ax) ;
+            return (0) ;
+        }
+        return (1) ;
+    }
+
+    printf ("key [%s] nrow "ID" ncol "ID "\n", key, nrow, ncol) ;
+    printf ("mkind "ID" skind "ID" asize "ID" znz "ID"\n",
+        mkind, skind, asize, znz) ;
+    printf ("mtype from file:               [%s]\n", mtype) ;
+
+    if (Ap [ncol] < 20)
+    {
+        for (j = 0 ; j < ncol ; j++)
+        {
+            printf ("\ncolumn "ID":\n", j) ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                i = Ai [p] ;
+                RBget_entry (mkind, Ax, Az, p, &xr, &xz) ;
+                printf ("  "ID" : %g", i, xr) ;
+                if (xz != 0) printf (" + (%g)i\n", xz) ;
+                printf ("\n") ;
+            }
+        }
+    }
+
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros);
+    printf ("(A) RBok status "ID" "ID" "ID"\n", status, njumbled, nzeros) ;
+    if (status != RBIO_OK || njumbled != 0 || nzeros != 0)
+    {
+        printf ("RBok Error!\n") ;
+        return (1) ;
+    }
+
+    status = RBok (nrow, ncol, asize, Zp, Zi, NULL, NULL, NULL, 1,
+        &njumbled, &nzeros) ;
+    printf ("(Z) RBok status "ID" "ID" "ID"\n", status, njumbled, nzeros) ;
+    if (status != RBIO_OK || njumbled != 0 || nzeros != 0)
+    {
+        printf ("RBok Error (Z)!\n") ;
+        return (1) ;
+    }
+
+    status = RBwrite ("temp.rb", title, key, nrow, ncol, Ap, Ai, Ax, Az, Zp, Zi,
+        mkind, mtype2) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBwrite error!\n") ;
+    }
+
+    status = RBkind (nrow, ncol, Ap, Ai, Ax, Az, mkind, &mkind2, &skind2,
+        mtype2, &xmin, &xmax, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBkind error!\n") ;
+        return (1) ;
+    }
+
+    printf ("mtype from examining matrix:   [%s]\n", mtype2) ;
+
+    SuiteSparse_free (Ap) ;
+    SuiteSparse_free (Ai) ;
+    SuiteSparse_free (Ax) ;
+    SuiteSparse_free (Az) ;
+    SuiteSparse_free (Zp) ;
+    SuiteSparse_free (Zi) ;
+
+    zero_handling = 1 ;     /* prune zeros */
+    status = RBread ("temp.rb", build_upper, zero_handling, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, &Ax, NULL, NULL, NULL) ;
+    if (status != 0)
+    {
+        SuiteSparse_free (Ap) ;
+        SuiteSparse_free (Ai) ;
+        SuiteSparse_free (Ax) ;
+        printf ("RBread Error! "ID"\n", status) ;
+        return (1) ;
+    }
+
+    status = RBkind (nrow, ncol, Ap, Ai, Ax, NULL, mkind, &mkind2, &skind2,
+        mtype2, &xmin, &xmax, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBkind error!\n") ;
+    }
+    printf ("mtype after reading from file: [%s]\n", mtype2) ;
+
+    SuiteSparse_free (Ap) ;
+    SuiteSparse_free (Ai) ;
+    SuiteSparse_free (Ax) ;
+
+    status = RBreadraw ("temp.rb", title, key, mtype, &nrow, &ncol, &nnz,
+        &nelnz, &mkind, &skind, &fem, &xsize, &Ap, &Ai, &Ax) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBreadraw error!\n") ;
+        return (1) ;
+    }
+    printf ("raw nrow "ID" ncol "ID" nnz "ID" nelnz "ID" xsize "ID"\n",
+        nrow, ncol, nnz, nelnz, xsize) ;
+
+    if (fem)
+    {
+        printf ("FEM matrix\n") ;
+    }
+    else
+    {
+        status = RBkind (nrow, ncol, Ap, Ai, Ax, NULL, mkind, &mkind2, &skind2,
+            mtype2, &xmin, &xmax, NULL) ;
+        if (status != RBIO_OK)
+        {
+            printf ("RBkind error!\n") ;
+        }
+        printf ("mtype from raw read from file: [%s]\n", mtype2) ;
+    }
+
+    SuiteSparse_free (Ap) ;
+    SuiteSparse_free (Ai) ;
+    SuiteSparse_free (Ax) ;
+
+    /* read in just the pattern */
+    status = RBread ("temp.rb", build_upper, zero_handling, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, NULL, NULL, NULL, NULL) ;
+
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros);
+    printf ("(P) RBok status "ID" "ID" "ID"\n", status, njumbled, nzeros) ;
+    if (status != RBIO_OK || njumbled != 0 || nzeros != 0)
+    {
+        printf ("RBok Error!\n") ;
+        return (1) ;
+    }
+
+    status = RBkind (nrow, ncol, Ap, Ai, NULL, NULL, mkind, &mkind2, &skind2,
+        mtype2, &xmin, &xmax, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBkind error!\n") ;
+        return (1) ;
+    }
+    printf ("mtype of pattern:              [%s]\n", mtype2) ;
+
+
+    SuiteSparse_free (Ap) ;
+    SuiteSparse_free (Ai) ;
+
+    /* read in just the lower triangular part for symmetric case */
+    build_upper = 0 ;
+    zero_handling = 0 ;     /* ignore zeros */
+    status = RBread ("temp.rb", build_upper, zero_handling, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, &Ax, NULL, NULL, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBread error! "ID"\n", status) ;
+        return (1) ;
+    }
+
+    status = RBkind (nrow, ncol, Ap, Ai, Ax, NULL, mkind, &mkind2, &skind2,
+        mtype2, &xmin, &xmax, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBkind error!\n") ;
+        return (1) ;
+    }
+    printf ("mtype of tril(A):              [%s]\n", mtype2) ;
+
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, NULL, NULL, mkind,
+        &njumbled, &nzeros);
+    printf ("(L) RBok status "ID" "ID" "ID"\n", status, njumbled, nzeros) ;
+    if (status != RBIO_OK || njumbled != 0)
+    {
+        printf ("RBok Error!\n") ;
+        return (1) ;
+    }
+
+    SuiteSparse_free (Ap) ;
+    SuiteSparse_free (Ai) ;
+    SuiteSparse_free (Ax) ;
+
+    printf ("RBdemo OK\n") ;
+    SuiteSparse_finish ( ) ;
+    return (0) ;
+}
diff --git a/RBio/Demo/RBdemo.out b/RBio/Demo/RBdemo.out
new file mode 100644
index 0000000..b693833
--- /dev/null
+++ b/RBio/Demo/RBdemo.out
@@ -0,0 +1,19 @@
+./RBdemo < ../RBio/private/west0479.rua
+
+===========================================================
+title: [1U 8 STAGE COLUMN SECTION, ALL SECTIONS RIGOROUS ( CHEM. ENG. )]
+status 0
+key [WEST0479] nrow 479 ncol 479
+mkind 0 skind 0 asize 3820 znz 22
+mtype from file:               [RUA]
+(A) RBok status 0 0 0
+(Z) RBok status 0 0 0
+mtype from examining matrix:   [rua]
+mtype after reading from file: [rua]
+raw nrow 479 ncol 479 nnz 1910 nelnz 0 xsize 1910
+mtype from raw read from file: [rua]
+(P) RBok status 0 0 0
+mtype of pattern:              [pua]
+mtype of tril(A):              [rua]
+(L) RBok status 0 0 22
+RBdemo OK
diff --git a/RBio/Doc/ChangeLog b/RBio/Doc/ChangeLog
index 8d118f6..af8ed6a 100644
--- a/RBio/Doc/ChangeLog
+++ b/RBio/Doc/ChangeLog
@@ -1,3 +1,43 @@
+Oct 10, 2014: version 2.2.1
+
+    modified RBmake.m.  No change to C code except version number.
+
+July 31, 2013: version 2.2.0
+
+    * changed malloc and printf pointers to use SuiteSparse_config
+
+Jun 20, 2012: verison 2.1.1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 2.1.0
+
+    * changed from UFconfig to SuiteSparse_config
+
+Dec 7, 2011: version 2.0.2
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * added more detailed error message to mexFunction
+
+Jan 25, 2011: version 2.0.1
+
+    * minor fix to "make install"
+
+Nov 30, 2009: version 2.0.0
+
+    * rewrote the entire package in C.  The advantage is that the code is
+	now more portable.  It does not rely on a Fortran compiler that
+	supports the non-standard %val construct.  The minor disadvantage is
+	it can no longer read older Harwell/Boeing matrices if the Fortran
+	format they use does not put at least one space between the values.
+	The Rutherford/Boeing format does require at least one space, so the
+	package can read any Rutherford/Boeing matrix.  No changes to MATLAB
+	m-file interface.
+
+May 1, 2009: version 1.1.2
+
+    * minor change to RBmake.m to compile 64-bit version
+
 Nov 1, 2007: version 1.1.1
 
     * minor lint cleanup
diff --git a/RBio/Doc/License.txt b/RBio/Doc/License.txt
index b06998a..ef86ece 100644
--- a/RBio/Doc/License.txt
+++ b/RBio/Doc/License.txt
@@ -1,6 +1,6 @@
-RBio toolbox.  Copyright (C) 2006-2007, Timothy A. Davis
+RBio toolbox.  Copyright (C) 2006-2009, Timothy A. Davis
 RBio is also available under other licenses; contact authors for details.
-http://www.cise.ufl.edu/research/sparse
+http://www.suitesparse.com
 
 --------------------------------------------------------------------------------
 
diff --git a/RBio/Doc/dodiff b/RBio/Doc/dodiff
deleted file mode 100755
index 2280b11..0000000
--- a/RBio/Doc/dodiff
+++ /dev/null
@@ -1,15 +0,0 @@
-
-# complex vs real
-diff ../RBcread_64.f ../RBrread_64.f
-diff ../RBcread_32.f ../RBrread_32.f
-
-# 32 vs 64 bit
-diff ../RBcread_32.f ../RBcread_64.f
-diff ../RBcsplit_32.f ../RBcsplit_64.f
-diff ../RBraw_mex_32.f ../RBraw_mex_64.f
-diff ../RBread_32.f ../RBread_64.f
-diff ../RBread_mex_32.f ../RBread_mex_64.f
-diff ../RBrread_32.f ../RBrread_64.f
-diff ../RBtype_mex_32.f ../RBtype_mex_64.f
-diff ../RBwrite_32.f ../RBwrite_64.f
-diff ../RBwrite_mex_32.f ../RBwrite_mex_64.f
diff --git a/RBio/Include/RBio.h b/RBio/Include/RBio.h
new file mode 100644
index 0000000..962f6f0
--- /dev/null
+++ b/RBio/Include/RBio.h
@@ -0,0 +1,302 @@
+/* ========================================================================== */
+/* === RBio/Include/RBio.h: include file for RBio =========================== */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+#ifndef _RBIO_H
+
+/* -------------------------------------------------------------------------- */
+/* large file I/O support */
+/* -------------------------------------------------------------------------- */
+
+/* Definitions required for large file I/O, which must come before any other
+ * #includes.  These are not used if -DNLARGEFILE is defined at compile time.
+ * Large file support may not be portable across all platforms and compilers;
+ * if you encounter an error here, compile your code with -DNLARGEFILE.  In
+ * particular, you must use -DNLARGEFILE for MATLAB 6.5 or earlier (which does
+ * not have the io64.h include file).   See also CHOLMOD/Include/cholmod_io64.h.
+ */
+
+/* skip all of this if NLARGEFILE is defined at the compiler command line */
+#ifndef NLARGEFILE
+
+#if defined(MATLAB_MEX_FILE) || defined(MATHWORKS)
+
+/* RBio is being compiled as a MATLAB mexFunction, or for use in MATLAB */
+#include "io64.h"
+
+#else
+
+/* RBio is being compiled in a stand-alone library */
+#undef  _LARGEFILE64_SOURCE
+#define _LARGEFILE64_SOURCE
+#undef  _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 64
+
+#endif
+
+#endif
+
+
+/* -------------------------------------------------------------------------- */
+/* include files */
+/* -------------------------------------------------------------------------- */
+
+#include "SuiteSparse_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#ifdef MATLAB_MEX_FILE
+#include "mex.h"
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* error codes */
+/* -------------------------------------------------------------------------- */
+
+#define RBIO_OK (0)               /* matrix is OK */
+
+/* data structure errors */
+#define RBIO_CP_INVALID (-1)      /* column pointers are invalid */
+#define RBIO_ROW_INVALID (-2)     /* row indices are out of range */
+#define RBIO_DUPLICATE (-3)       /* duplicate entry */
+#define RBIO_EXTRANEOUS (-4)      /* entries in upper tri part of sym matrix */
+#define RBIO_TYPE_INVALID (-5)    /* matrix type (RUA, etc) invalid */
+#define RBIO_DIM_INVALID (-6)     /* matrix dimensions invalid */
+#define RBIO_JUMBLED (-7)         /* matrix contains unsorted columns */
+#define RBIO_ARG_ERROR (-8)       /* input arguments invalid */
+#define RBIO_OUT_OF_MEMORY (-9)   /* out of memory */
+#define RBIO_MKIND_INVALID (-10)  /* mkind is invalid */
+#define RBIO_UNSUPPORTED (-11)    /* finite-element form unsupported */
+
+/* I/O errors */
+#define RBIO_HEADER_IOERROR (-91) /* I/O error: header */
+#define RBIO_CP_IOERROR (-92)     /* I/O error: column pointers */
+#define RBIO_ROW_IOERROR (-93)    /* I/O error: row indices */
+#define RBIO_VALUE_IOERROR (-94)  /* I/O error: numerical values */
+#define RBIO_FILE_IOERROR (-95)   /* I/O error: cannot read/write the file */
+
+#define RBIO_DATE "Oct 10, 2014"
+#define RBIO_VER_CODE(main,sub) ((main) * 1000 + (sub))
+#define RBIO_MAIN_VERSION 2
+#define RBIO_SUB_VERSION 2
+#define RBIO_SUBSUB_VERSION 1
+#define RBIO_VERSION RBIO_VER_CODE(RBIO_MAIN_VERSION,RBIO_SUB_VERSION)
+
+
+/* -------------------------------------------------------------------------- */
+/* user-callable functions */
+/* -------------------------------------------------------------------------- */
+
+/*
+    RBread:         read a Rutherford/Boeing matrix from a file
+    RBwrite:        write a matrix to a file in R/B format
+
+    RBkind:         determine the matrix type (RUA, RSA, etc)
+    RBreadraw:      read the raw contents of a R/B file
+
+    RBget_entry:    get a single numerical value from a matrix
+    RBput_entry:    put a single numerical value into a matrix
+
+    RBmalloc:       malloc-wrapper for RBio
+    RBfree:         free-wrapper for RBio
+    RBok:           test the validity of a sparse matrix
+
+    Each function comes in two versions: one with "int" integers, the other
+    with "SuiteSparse_long" integers.  SuiteSparse_long is "long", except for
+    Windows (for which it is __int64).  The default type is SuiteSparse_long.
+    Functions for "int" integers have the _i suffix appended to their names.
+*/
+
+int RBkind_i        /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    int nrow,       /* A is nrow-by-ncol */
+    int ncol,
+    int *Ap,        /* Ap [0...ncol]: column pointers */
+    int *Ai,        /* Ai [0...nnz-1]: row indices */
+    double *Ax,     /* Ax [0...nnz-1]: real values.  Az holds imaginary part */
+    double *Az,     /* if real, Az is NULL. if complex, Az is non-NULL */
+    int mkind_in,   /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+
+    /* output */
+    int *mkind,     /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    int *skind,     /* r: -1 (rectangular), u: 0 (unsymmetric), s: 1 symmetric,
+                       h: 2 (Hermitian), z: 3 (skew symmetric) */
+    char mtype [4], /* rua, psa, rra, cha, etc */
+    double *xmin,   /* smallest value */
+    double *xmax,   /* largest value */
+
+    /* workspace: allocated internally if NULL */
+    int *cp         /* workspace of size ncol+1, undefined on input and output*/
+) ;
+
+SuiteSparse_long RBkind (SuiteSparse_long nrow, SuiteSparse_long ncol,
+    SuiteSparse_long *Ap, SuiteSparse_long *Ai, double *Ax, double *Az,
+    SuiteSparse_long mkind_in, SuiteSparse_long *mkind, SuiteSparse_long *skind,
+    char mtype [4], double *xmin, double *xmax, SuiteSparse_long *cp) ;
+
+
+int RBread_i            /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    char *filename,     /* file to read from */
+    int build_upper,    /* if true, construct upper part for sym. matrices */
+    int zero_handling,  /* 0: do nothing, 1: prune zeros, 2: extract zeros */
+
+    /* output */
+    char title [73],
+    char key [9],
+    char mtype [4],     /* RUA, RSA, PUA, PSA, RRA, etc */
+    int *nrow,          /* A is nrow-by-ncol */
+    int *ncol,
+    int *mkind,         /* R: 0, P: 1, C: 2, I: 3 */
+    int *skind,         /* R: -1, U: 0, S: 1, H: 2, Z: 3 */
+    int *asize,         /* Ai array has size asize*sizeof(double) */
+    int *znz,           /* number of explicit zeros removed from A */
+
+    /* output: these are malloc'ed below and must be freed by the caller */
+    int **Ap,           /* column pointers of A */
+    int **Ai,           /* row indices of A */
+    double **Ax,        /* real values (ignored if NULL) of A */
+    double **Az,        /* imaginary values (ignored if NULL) of A */
+    int **Zp,           /* column pointers of Z */
+    int **Zi            /* row indices of Z */
+) ;
+
+SuiteSparse_long RBread (char *filename, SuiteSparse_long build_upper,
+    SuiteSparse_long zero_handling, char title [73], char key [9],
+    char mtype [4], SuiteSparse_long *nrow, SuiteSparse_long *ncol,
+    SuiteSparse_long *mkind, SuiteSparse_long *skind, SuiteSparse_long *asize,
+    SuiteSparse_long *znz, SuiteSparse_long **Ap, SuiteSparse_long **Ai,
+    double **Ax, double **Az, SuiteSparse_long **Zp, SuiteSparse_long **Zi) ;
+
+
+int RBreadraw_i         /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    char *filename,     /* file to read from */
+
+    /* output */
+    char title [73],
+    char key [9],
+    char mtype [4],     /* RUA, RSA, PUA, PSA, RRA, etc */
+    int *nrow,          /* A is nrow-by-ncol */
+    int *ncol,
+    int *nnz,           /* size of Ai */
+    int *nelnz,
+    int *mkind,         /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    int *skind,         /* R: -1, U: 0, S: 1, H: 2, Z: 3 */
+    int *fem,           /* 0:__A, 1:__E */
+    int *xsize,         /* size of Ax */
+
+    /* output: these are malloc'ed below and must be freed by the caller */
+    int **p_Ap,         /* size ncol+1, column pointers of A */
+    int **p_Ai,         /* size nnz, row indices of A */
+    double **p_Ax       /* size xsize, numerical values of A */
+) ;
+
+
+SuiteSparse_long RBreadraw (char *filename, char title [73], char key [9],
+    char mtype[4], SuiteSparse_long *nrow, SuiteSparse_long *ncol,
+    SuiteSparse_long *nnz, SuiteSparse_long *nelnz, SuiteSparse_long *mkind,
+    SuiteSparse_long *skind, SuiteSparse_long *fem, SuiteSparse_long *xsize,
+    SuiteSparse_long **p_Ap, SuiteSparse_long **p_Ai, double **p_Ax) ;
+
+
+int RBwrite_i       /* 0:OK, < 0: error, > 0: warning */
+(
+    /* input */
+    char *filename, /* filename to write to (stdout if NULL) */
+    char *title,    /* title (72 char max), may be NULL */
+    char *key,      /* key (8 char max), may be NULL */
+    int nrow,       /* A is nrow-by-ncol */
+    int ncol,
+    int *Ap,        /* size ncol+1, column pointers */
+    int *Ai,        /* size anz=Ap[ncol], row indices (sorted) */
+    double *Ax,     /* size anz or 2*anz, numerical values (binary if NULL) */
+    double *Az,     /* size anz, imaginary part (real if NULL) */
+    int *Zp,        /* size ncol+1, column pointers for Z (or NULL) */
+    int *Zi,        /* size znz=Zp[ncol], row indices for Z (or NULL) */
+    int mkind_in,   /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+
+    /* output */
+    char mtype [4]  /* matrix type (RUA, RSA, etc), may be NULL */
+) ;
+
+SuiteSparse_long RBwrite (char *filename, char *title, char *key,
+    SuiteSparse_long nrow, SuiteSparse_long ncol, SuiteSparse_long *Ap,
+    SuiteSparse_long *Ai, double *Ax, double *Az, SuiteSparse_long *Zp,
+    SuiteSparse_long *Zi, SuiteSparse_long mkind_in, char mtype [4]) ;
+
+
+void RBget_entry_i
+(
+    int mkind,          /* R: 0, P: 1, C: 2, I: 3 */
+    double *Ax,         /* real part, or both if merged-complex */
+    double *Az,         /* imaginary part if split-complex */
+    int p,              /* index of the entry */
+    double *xr,         /* real part */
+    double *xz          /* imaginary part */
+) ;
+
+void RBget_entry (SuiteSparse_long mkind, double *Ax, double *Az,
+    SuiteSparse_long p, double *xr, double *xz) ;
+
+
+void RBput_entry_i
+(
+    int mkind,          /* R: 0, P: 1, C: 2, I: 3 */
+    double *Ax,         /* real part, or both if merged-complex */
+    double *Az,         /* imaginary part if split-complex */
+    int p,              /* index of the entry */
+    double xr,          /* real part */
+    double xz           /* imaginary part */
+) ;
+
+void RBput_entry (SuiteSparse_long mkind, double *Ax, double *Az,
+    SuiteSparse_long p, double xr, double xz) ;
+
+
+int RBok_i          /* 0:OK, < 0: error, > 0: warning */
+(
+    /* inputs, not modified */
+    int nrow,       /* number of rows */
+    int ncol,       /* number of columns */
+    int nzmax,      /* max # of entries */
+    int *Ap,        /* size ncol+1, column pointers */
+    int *Ai,        /* size nz = Ap [ncol], row indices */
+    double *Ax,     /* real part, or both if merged-complex */
+    double *Az,     /* imaginary part for split-complex */
+    char *As,       /* logical matrices (useful for MATLAB caller only) */
+    int mkind,      /* 0:real, 1:logical/pattern, 2:split-complex, 3:integer,
+                       4:merged-complex */
+
+    /* outputs, not defined on input */
+    int *p_njumbled,   /* # of jumbled row indices (-1 if not computed) */
+    int *p_nzeros      /* number of explicit zeros (-1 if not computed) */
+) ;
+
+SuiteSparse_long RBok (SuiteSparse_long nrow, SuiteSparse_long ncol,
+    SuiteSparse_long nzmax, SuiteSparse_long *Ap, SuiteSparse_long *Ai,
+    double *Ax, double *Az, char *As, SuiteSparse_long mkind,
+    SuiteSparse_long *p_njumbled, SuiteSparse_long *p_nzeros) ;
+
+#ifdef MATLAB_MEX_FILE
+void RBerror (int status) ;     /* only for MATLAB mexFunctions */
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/RBio/Lib/Makefile b/RBio/Lib/Makefile
new file mode 100644
index 0000000..934f660
--- /dev/null
+++ b/RBio/Lib/Makefile
@@ -0,0 +1,63 @@
+#===============================================================================
+# RBio/Lib/Makefile: for compiling the RBio library
+#===============================================================================
+
+default: all
+
+ccode: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+C = $(CC) $(CF)
+
+all: librbio.a
+
+library: librbio.a
+
+purge: distclean
+
+distclean: clean
+	- $(RM) librbio.a
+
+clean:
+	- $(RM) $(CLEAN)
+
+#-------------------------------------------------------------------------------
+# ../Include/ directory contains all include files:
+#-------------------------------------------------------------------------------
+
+INC = ../Include/RBio.h
+
+#-------------------------------------------------------------------------------
+# The 7 CHOLMOD library modules (int, double)
+#-------------------------------------------------------------------------------
+
+CORE = RBio.o
+
+DI = $(CORE)
+
+LCORE = RBio_long.o
+
+DL = $(LCORE)
+
+#-------------------------------------------------------------------------------
+
+# to compile just the double/int version, use OBJ = $(DI)
+OBJ = $(DI)
+
+librbio.a: $(OBJ)
+	$(ARCHIVE)  librbio.a $(OBJ)
+	- $(RANLIB) librbio.a
+
+$(OBJ): $(INC)
+
+I = -I../Include -I../../SuiteSparse_config
+
+#-------------------------------------------------------------------------------
+
+RBio.o: ../Source/RBio.c
+	$(C) -c $(I) $<
+
+RBio_i.o: ../Source/RBio.c
+	$(C) -c -DINT $(I) $<
+
diff --git a/RBio/Makefile b/RBio/Makefile
new file mode 100644
index 0000000..82ddadc
--- /dev/null
+++ b/RBio/Makefile
@@ -0,0 +1,64 @@
+#-------------------------------------------------------------------------------
+# RBio Makefile
+#-------------------------------------------------------------------------------
+
+VERSION = 2.2.1
+
+default: all
+
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+# Compile the C-callable libraries and the Demo programs.
+all:
+	( cd Lib ; $(MAKE) )
+	( cd Demo ; $(MAKE) )
+
+# Compile the C-callable libraries only.
+library:
+	( cd Lib ; $(MAKE) )
+
+# Remove all files not in the original distribution
+purge:
+	( cd Tcov ; $(MAKE) purge )
+	( cd Lib ; $(MAKE) purge )
+	( cd Demo ; $(MAKE) purge )
+	( cd RBio ; $(RM) $(CLEAN) private/temp.rb *.mex* )
+
+# Remove all files not in the original distribution, except keep the 
+# compiled libraries.
+clean:
+	( cd Tcov ; $(MAKE) clean )
+	( cd Lib ; $(MAKE) clean )
+	( cd Demo ; $(MAKE) clean )
+	( cd RBio ; $(RM) $(CLEAN) private/temp.rb )
+
+distclean: purge
+
+ccode: all
+
+# Run the test coverage suite.
+cov:
+	( cd Tcov ; $(MAKE) go )
+
+# Run the test coverage suite using Valgrind.
+valgrind:
+	( cd Valgrind ; $(MAKE) )
+
+# Compile the C-callable libraries and the Demo programs.
+demos:
+	( cd Demo ; $(MAKE) )
+
+
+# install RBio
+install:
+	$(CP) Lib/librbio.a $(INSTALL_LIB)/librbio.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf librbio.$(VERSION).a librbio.a )
+	$(CP) Include/RBio.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/librbio*.a
+	chmod 644 $(INSTALL_INCLUDE)/RBio.h
+
+# uninstall RBio
+uninstall:
+	$(RM) $(INSTALL_LIB)/librbio*.a
+	$(RM) $(INSTALL_INCLUDE)/RBio.h
+
diff --git a/RBio/RBcread_32.f b/RBio/RBcread_32.f
deleted file mode 100644
index d197af5..0000000
--- a/RBio/RBcread_32.f
+++ /dev/null
@@ -1,255 +0,0 @@
-c=======================================================================
-c=== RBio/RBcread_32 ===================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RB*read:  read a Rutherford/Boeing matrix
-c-----------------------------------------------------------------------
-
-	subroutine RBcread
-     $	    (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $	    mkind, skind, Ap, Ai, Ax, nzeros, w, cp, info, nw, nnz1)
-	integer*4
-     $	    nrow, ncol, nnz, mkind, skind, p, j, i, alen, llen, k,
-     $	    ilast, nzeros, info, nw, nnz1
-	integer*4
-     $	    Ap (ncol+1), Ai (nnz1), w (nw), cp (ncol+1)
-	complex*16 Ax (nnz1), x
-	character ptrfmt*16, indfmt*16, valfmt*20
-
-c	----------------------------------------------------------------
-c	read the column pointers and row indices
-c	----------------------------------------------------------------
-
-	call RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $	    Ap, Ai, w, cp, info, nw)
-	if (info .ne. 0) then
-c	    error: pattern is invalid
-	    return
-	endif
-
-c	----------------------------------------------------------------
-c	read the values
-c	----------------------------------------------------------------
-
-c	    read nnz values
-	    read (7, valfmt, err = 94, end = 94) (Ax (p), p = 1, nnz)
-
-c	----------------------------------------------------------------
-c	construct upper triangular part for symmetric matrices
-c	----------------------------------------------------------------
-
-c	If skind is zero, then the upper part is not constructed.  This
-c	allows the caller to skip this part, and create the upper part
-c	of a symmetric (S,H,Z) matrix.  Just pass skind = 0.
-
-	if (skind .gt. 0) then
-
-c	    ------------------------------------------------------------
-c	    shift the matrix by adding gaps to the top of each column
-c	    ------------------------------------------------------------
-
-	    do 30 j = ncol, 1, -1
-
-c		number of entries in lower tri. part (incl. diagonal)
-		llen = Ap (j+1) - Ap (j)
-
-c		number of entries in entire column
-		alen = cp (j+1) - cp (j)
-
-c		move the column from Ai (Ap(j) ... Ap(j+1)-1)
-c		down to Ai (cp(j+1)-llen ... cp(j+1)-1), leaving a gap
-c		at Ai (Ap(j) ... cp(j+1)-llen)
-
-		do 20 k = 1, llen
-		    Ai (cp (j+1) - k) = Ai (Ap (j+1) - k)
-		    Ax (cp (j+1) - k) = Ax (Ap (j+1) - k)
-20		continue
-30	    continue
-
-c	    ------------------------------------------------------------
-c	    populate the upper triangular part
-c	    ------------------------------------------------------------
-
-c	    create temporary column pointers to point to the gaps
-	    do 40 j = 1, ncol
-		w (j) = cp (j)
-40	    continue
-
-	    do 60 j = 1, ncol
-
-c		scan the entries in the lower tri. part, in
-c		Ai (cp(j+1)-llen ... cp(j+1)-1)
-		llen = Ap (j+1) - Ap (j)
-		do 50 k = 1, llen
-
-c		    get the A(i,j) entry in the lower triangular part
-		    i = Ai (cp (j+1) - k)
-		    x = Ax (cp (j+1) - k)
-
-c		    add A(j,i) as the next entry in column i (excl diag)
-		    if (i .ne. j) then
-			p = w (i)
-			w (i) = w (i) + 1
-			Ai (p) = j
-
-			if (skind .eq. 1) then
-c			    *SA matrix
-			    Ax (p) = x
-			elseif (skind .eq. 2) then
-c			    *HA matrix
-			    Ax (p) = dconjg (x)
-			else
-c			    *ZA matrix
-			    Ax (p) = -x
-			endif
-
-		    endif
-
-50		continue
-60	    continue
-
-c	    finalize the column pointers
-	    do 70 j = 1, ncol+1
-		Ap (j) = cp (j)
-70	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	count the number of explicit zeros
-c	----------------------------------------------------------------
-
-	nzeros = 0
-	do 90 j = 1, ncol
-	    cp (j) = nzeros + 1
-	    do 80 p = Ap (j), Ap (j+1)-1
-		if (Ax (p) .eq. 0) then
-		    nzeros = nzeros + 1
-		endif
-80	    continue
-90	continue
-	cp (ncol+1) = nzeros + 1
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-94	info = -94
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*zeros: extract explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A and Z
-c   cp: column pointers of Z on input
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c   Zp, Zi, Zx: empty matrix on input, pattern of zeros on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBczeros
-     $	    (nrow, ncol, cp, Ap, Ai, Ax, Zp, Zi, Zx)
-	integer*4
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), Zp (ncol+1), Zi (*),
-     $	    cp (*), i, j, p, pa, pz, p1
-	complex*16 Ax (*), x
-	double precision Zx (*)
-
-c	----------------------------------------------------------------
-c	copy the column pointers if Z is being constructed
-c	----------------------------------------------------------------
-
-	do 10 j = 1, ncol+1
-	    Zp (j) = cp (j)
-10	continue
-
-c	----------------------------------------------------------------
-c	split the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	pz = 1
-	do 30 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-	    pz = Zp (j)
-c	    split column j of A
-	    do 20 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .eq. 0) then
-c		    copy into Z
-		    Zi (pz) = i
-		    Zx (pz) = 1
-		    pz = pz + 1
-		else
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-20	    continue
-30	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*prune: discard explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBcprune
-     $	    (nrow, ncol, Ap, Ai, Ax)
-	integer*4
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), i, j, p, pa, pz, p1
-	complex*16 Ax (*), x
-
-c	----------------------------------------------------------------
-c	prune the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	do 20 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-c	    prune column j of A
-	    do 10 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .ne. 0) then
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-10	    continue
-20	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
diff --git a/RBio/RBcread_64.f b/RBio/RBcread_64.f
deleted file mode 100644
index 7943851..0000000
--- a/RBio/RBcread_64.f
+++ /dev/null
@@ -1,255 +0,0 @@
-c=======================================================================
-c=== RBio/RBcread_64 ===================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RB*read:  read a Rutherford/Boeing matrix
-c-----------------------------------------------------------------------
-
-	subroutine RBcread
-     $	    (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $	    mkind, skind, Ap, Ai, Ax, nzeros, w, cp, info, nw, nnz1)
-	integer*8
-     $	    nrow, ncol, nnz, mkind, skind, p, j, i, alen, llen, k,
-     $	    ilast, nzeros, info, nw, nnz1
-	integer*8
-     $	    Ap (ncol+1), Ai (nnz1), w (nw), cp (ncol+1)
-	complex*16 Ax (nnz1), x
-	character ptrfmt*16, indfmt*16, valfmt*20
-
-c	----------------------------------------------------------------
-c	read the column pointers and row indices
-c	----------------------------------------------------------------
-
-	call RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $	    Ap, Ai, w, cp, info, nw)
-	if (info .ne. 0) then
-c	    error: pattern is invalid
-	    return
-	endif
-
-c	----------------------------------------------------------------
-c	read the values
-c	----------------------------------------------------------------
-
-c	    read nnz values
-	    read (7, valfmt, err = 94, end = 94) (Ax (p), p = 1, nnz)
-
-c	----------------------------------------------------------------
-c	construct upper triangular part for symmetric matrices
-c	----------------------------------------------------------------
-
-c	If skind is zero, then the upper part is not constructed.  This
-c	allows the caller to skip this part, and create the upper part
-c	of a symmetric (S,H,Z) matrix.  Just pass skind = 0.
-
-	if (skind .gt. 0) then
-
-c	    ------------------------------------------------------------
-c	    shift the matrix by adding gaps to the top of each column
-c	    ------------------------------------------------------------
-
-	    do 30 j = ncol, 1, -1
-
-c		number of entries in lower tri. part (incl. diagonal)
-		llen = Ap (j+1) - Ap (j)
-
-c		number of entries in entire column
-		alen = cp (j+1) - cp (j)
-
-c		move the column from Ai (Ap(j) ... Ap(j+1)-1)
-c		down to Ai (cp(j+1)-llen ... cp(j+1)-1), leaving a gap
-c		at Ai (Ap(j) ... cp(j+1)-llen)
-
-		do 20 k = 1, llen
-		    Ai (cp (j+1) - k) = Ai (Ap (j+1) - k)
-		    Ax (cp (j+1) - k) = Ax (Ap (j+1) - k)
-20		continue
-30	    continue
-
-c	    ------------------------------------------------------------
-c	    populate the upper triangular part
-c	    ------------------------------------------------------------
-
-c	    create temporary column pointers to point to the gaps
-	    do 40 j = 1, ncol
-		w (j) = cp (j)
-40	    continue
-
-	    do 60 j = 1, ncol
-
-c		scan the entries in the lower tri. part, in
-c		Ai (cp(j+1)-llen ... cp(j+1)-1)
-		llen = Ap (j+1) - Ap (j)
-		do 50 k = 1, llen
-
-c		    get the A(i,j) entry in the lower triangular part
-		    i = Ai (cp (j+1) - k)
-		    x = Ax (cp (j+1) - k)
-
-c		    add A(j,i) as the next entry in column i (excl diag)
-		    if (i .ne. j) then
-			p = w (i)
-			w (i) = w (i) + 1
-			Ai (p) = j
-
-			if (skind .eq. 1) then
-c			    *SA matrix
-			    Ax (p) = x
-			elseif (skind .eq. 2) then
-c			    *HA matrix
-			    Ax (p) = dconjg (x)
-			else
-c			    *ZA matrix
-			    Ax (p) = -x
-			endif
-
-		    endif
-
-50		continue
-60	    continue
-
-c	    finalize the column pointers
-	    do 70 j = 1, ncol+1
-		Ap (j) = cp (j)
-70	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	count the number of explicit zeros
-c	----------------------------------------------------------------
-
-	nzeros = 0
-	do 90 j = 1, ncol
-	    cp (j) = nzeros + 1
-	    do 80 p = Ap (j), Ap (j+1)-1
-		if (Ax (p) .eq. 0) then
-		    nzeros = nzeros + 1
-		endif
-80	    continue
-90	continue
-	cp (ncol+1) = nzeros + 1
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-94	info = -94
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*zeros: extract explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A and Z
-c   cp: column pointers of Z on input
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c   Zp, Zi, Zx: empty matrix on input, pattern of zeros on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBczeros
-     $	    (nrow, ncol, cp, Ap, Ai, Ax, Zp, Zi, Zx)
-	integer*8
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), Zp (ncol+1), Zi (*),
-     $	    cp (*), i, j, p, pa, pz, p1
-	complex*16 Ax (*), x
-	double precision Zx (*)
-
-c	----------------------------------------------------------------
-c	copy the column pointers if Z is being constructed
-c	----------------------------------------------------------------
-
-	do 10 j = 1, ncol+1
-	    Zp (j) = cp (j)
-10	continue
-
-c	----------------------------------------------------------------
-c	split the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	pz = 1
-	do 30 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-	    pz = Zp (j)
-c	    split column j of A
-	    do 20 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .eq. 0) then
-c		    copy into Z
-		    Zi (pz) = i
-		    Zx (pz) = 1
-		    pz = pz + 1
-		else
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-20	    continue
-30	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*prune: discard explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBcprune
-     $	    (nrow, ncol, Ap, Ai, Ax)
-	integer*8
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), i, j, p, pa, pz, p1
-	complex*16 Ax (*), x
-
-c	----------------------------------------------------------------
-c	prune the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	do 20 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-c	    prune column j of A
-	    do 10 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .ne. 0) then
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-10	    continue
-20	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
diff --git a/RBio/RBcsplit_32.f b/RBio/RBcsplit_32.f
deleted file mode 100644
index cff74a1..0000000
--- a/RBio/RBcsplit_32.f
+++ /dev/null
@@ -1,25 +0,0 @@
-c=======================================================================
-c=== RBio/RBcsplit_32 ==================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBcsplit: split a complex matrix into its real and imaginary parts
-c-----------------------------------------------------------------------
-
-	subroutine RBcsplit (Cx, Ax, Az, nnz)
-	integer*4
-     $	    nnz, i
-	complex*16 Cx (*)
-	double precision Ax (*), Az (*)
-	do 10 i = 1, nnz
-	    Ax (i) = dreal (Cx (i))
-	    Az (i) = dimag (Cx (i))
-10	continue
-	return
-	end
-
diff --git a/RBio/RBcsplit_64.f b/RBio/RBcsplit_64.f
deleted file mode 100644
index 3ac9e72..0000000
--- a/RBio/RBcsplit_64.f
+++ /dev/null
@@ -1,25 +0,0 @@
-c=======================================================================
-c=== RBio/RBcsplit_64 ==================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBcsplit: split a complex matrix into its real and imaginary parts
-c-----------------------------------------------------------------------
-
-	subroutine RBcsplit (Cx, Ax, Az, nnz)
-	integer*8
-     $	    nnz, i
-	complex*16 Cx (*)
-	double precision Ax (*), Az (*)
-	do 10 i = 1, nnz
-	    Ax (i) = dreal (Cx (i))
-	    Az (i) = dimag (Cx (i))
-10	continue
-	return
-	end
-
diff --git a/RBio/RBfix.m b/RBio/RBfix.m
deleted file mode 100644
index ad9a52d..0000000
--- a/RBio/RBfix.m
+++ /dev/null
@@ -1,135 +0,0 @@
-function [A, Z, title, key, mtype] = RBfix (filename)
-%RBFIX read a possibly corrupted matrix from a R/B file
-% (assembled format only).  Usage:
-%
-% [A Z title key mtype] = RBfix (filename)
-%
-% The Rutherford/Boeing format stores a sparse matrix in a file in compressed-
-% column form, using 3 arrays: Ap, Ai, and Ax.  The row indices of entries in
-% A(:,j) are in Ai(p1:p2) and the corresponding numerical values are Ax(p1:p2),
-% where p1 = Ap(j) and p2 = Ap(j+1)-1.  The row indices ought to be sorted, and
-% no duplicates should appear, but this function ignores that requirement.
-% Duplicate entries are summed if they exist, and A is returned with sorted
-% columns.  Symmetric matrices are stored with just their lower triangular
-% parts in the file.  Normally, it is an error if entries are present in the
-% upper triangular part of a matrix that is declared in the file to be
-% symmetric.  This function simply ignores those entries.
-%
-% If CHOLMOD is installed, this function is faster and uses less memory.
-%
-% Example:
-%
-%   load west0479
-%   RBwrite ('mywest', west0479, [ ], 'My west0479 file', 'west0479') ;
-%   [A Z title key mtype] = RBfix ('mywest') ;
-%   isequal (A, west0479)
-%   title, key, mtype
-%
-% See also mread, RBread, RBwrite, RBreade, sparse2.
-
-% Optionally uses the CHOLMOD sparse2 mexFunction.
-
-% Copyright 2007, Timothy A. Davis
-
-%-------------------------------------------------------------------------------
-% read in the raw contents of the Rutherford/Boeing file
-%-------------------------------------------------------------------------------
-
-[mtype Ap Ai Ax title key nrow] = RBraw (filename) ;
-mtype = lower (mtype) ;
-
-%-------------------------------------------------------------------------------
-% determine dimension, number of entries, and convert numerical entries
-%-------------------------------------------------------------------------------
-
-% number of columns
-ncol = length (Ap) - 1 ;
-
-% number of entries
-nz = length (Ai) ;
-
-% check column pointers
-if (any (Ap ~= sort (Ap)) | (Ap (1) ~= 1) | (Ap (ncol+1) - 1 ~= nz))	    %#ok
-    error ('invalid column pointers') ;
-end
-
-% check row indices
-if ((double (max (Ai)) > nrow) | double (min (Ai)) < 1)			    %#ok
-    error ('invalid row indices') ;
-end
-
-% Ax can be empty, for a p*a matrix
-if (~isempty (Ax))
-    if (mtype (1) == 'c')
-	% Ax is real, with real/imaginary parts interleaved
-	if (2 * nz ~= length (Ax))
-	    error ('invalid matrix') ;
-	end
-	Ax = Ax (1:2:end) + (1i * Ax (2:2:end)) ;
-    elseif (mtype (1) == 'i')
-	Ax = double (Ax) ;
-    end
-    % numerical values must be of the right size
-    if (nz ~= length (Ax))
-	error ('invalid matrix') ;
-    end
-end
-
-%-------------------------------------------------------------------------------
-% create the triplet form
-%-------------------------------------------------------------------------------
-
-% construct column indices
-Aj = zeros (nz,1) ;
-for j = 1:ncol
-    p1 = Ap (j) ;
-    p2 = Ap (j+1) - 1 ;
-    Aj (p1:p2) = j ;
-end
-
-%-------------------------------------------------------------------------------
-% create the sparse matrix form
-%-------------------------------------------------------------------------------
-
-if (exist ('sparse2') == 3)						    %#ok
-    % Use sparse2 in CHOLMOD.  It's faster, allows integer Ai and Aj, and
-    % returns the Z matrix as the 2nd output argument.
-    if (isempty (Ax))
-	Ax = 1 ;
-    end
-    % numerical matrix
-    [A Z] = sparse2 (Ai, Aj, Ax, nrow, ncol) ;
-else
-    % stick with MATLAB, without CHOLMOD.  This is slower and takes more memory.
-    Ai = double (Ai) ;
-    Aj = double (Aj) ;
-    if (isempty (Ax))
-	% pattern-only matrix
-	A = spones (sparse (Ai, Aj, 1, nrow, ncol)) ;
-	Z = sparse (nrow, ncol) ;
-    else
-	% numerical matrix
-	A = sparse (Ai, Aj, Ax, nrow, ncol) ;
-	% determine the pattern of explicit zero entries
-	S = spones (sparse (Ai, Aj, 1, nrow, ncol)) ;
-	Z = S - spones (A) ;
-    end
-end
-
-% check for entries in upper part
-if (any (mtype (2) == 'shz') & nnz (triu (A,1) > 0))			    %#ok
-    fprintf ('entries in upper triangular part of %s matrix ignored\n', mtype);
-end
-
-% add the upper triangular part
-if (mtype (2) == 's')
-    A = A + tril (A,-1).' ;
-    Z = Z + tril (Z,-1)' ;
-elseif (mtype (2) == 'h')
-    A = A + tril (A,-1)' ;
-    Z = Z + tril (Z,-1)' ;
-elseif (mtype (2) == 'z')
-    A = A - tril (A,-1).' ;
-    Z = Z + tril (Z,-1)' ;
-end
-
diff --git a/RBio/RBinstall.m b/RBio/RBinstall.m
deleted file mode 100644
index d2a42f9..0000000
--- a/RBio/RBinstall.m
+++ /dev/null
@@ -1,29 +0,0 @@
-%RBINSTALL install the RBio toolbox for use in MATLAB
-% Compiles the Fortran mexFunctions RBread, RBwrite, RBtype, and RBraw, and
-% the C mexFunction UFfull_write, and adds the current directory to the MATLAB
-% path.
-%
-% Example:
-%
-%   RBinstall
-%
-% See also RBread, RBwrite, RBtype, RBraw.
-%
-% Copyright 2007, Timothy A. Davis
-
-help RBio
-
-RBmake
-
-s = pwd ;
-addpath (s) ;
-
-cd Test
-testRB1
-cd (s)
-
-fprintf ('\nRBio is ready to use.  Your path has been modified for this\n') ;
-fprintf ('session, by adding the following path:\n') ;
-fprintf ('%s\n', s) ;
-fprintf ('Use the pathtool to modify your path permanently.\n') ;
-
diff --git a/RBio/RBio/Contents.m b/RBio/RBio/Contents.m
new file mode 100644
index 0000000..84ff351
--- /dev/null
+++ b/RBio/RBio/Contents.m
@@ -0,0 +1,24 @@
+% RBio: MATLAB toolbox for reading/writing sparse matrices in the Rutherford/
+%   Boeing format, and for reading/writing problems in the UF Sparse Matrix
+%   Collection from/to a set of files in a directory.
+%
+%   RBread    - read a sparse matrix from a Rutherford/Boeing file
+%   RBreade   - read a symmetric finite-element matrix from a R/B file
+%   RBtype    - determine the Rutherford/Boeing type of a sparse matrix
+%   RBwrite   - write a sparse matrix to a Rutherford/Boeing file
+%   RBraw     - read the raw contents of a Rutherford/Boeing file
+%   RBfix     - read a possibly corrupted matrix from a R/B file
+%   RBinstall - install the RBio toolbox for use in MATLAB
+%   RBmake    - compile the RBio toolbox for use in MATLAB
+%
+% Example:
+%
+%   load west0479
+%   C = west0479 ;
+%   RBwrite ('mywest', C, 'WEST0479 chemical eng. problem', 'west0479')
+%   A = RBread ('mywest') ;
+%   norm (A-C,1)
+%
+% See also UFget, mread, mwrite.
+
+% Copyright 2009, Timothy A. Davis
diff --git a/RBio/RBio/RBerror.c b/RBio/RBio/RBerror.c
new file mode 100644
index 0000000..20947a8
--- /dev/null
+++ b/RBio/RBio/RBerror.c
@@ -0,0 +1,82 @@
+/* ========================================================================== */
+/* === RBio/RBio/RBerror.c: mexFunction error-handling ====================== */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+#include "RBio.h"
+
+void RBerror (int status)
+{
+    switch (status)
+    {
+        case RBIO_OK:
+            break ;
+
+        case RBIO_CP_INVALID:
+            mexErrMsgTxt ("column pointers are invalid") ;
+            break ;
+
+        case RBIO_ROW_INVALID:
+            mexErrMsgTxt ("row indices are out of range") ;
+            break ;
+
+        case RBIO_DUPLICATE:
+            mexErrMsgTxt ("duplicate entry") ;
+            break ;
+
+        case RBIO_EXTRANEOUS:
+            mexErrMsgTxt
+                ("entries in upper triangular part of symmetric matrix") ;
+            break ;
+
+        case RBIO_TYPE_INVALID:
+            mexErrMsgTxt ("matrix type invalid") ;
+            break ;
+
+        case RBIO_DIM_INVALID:
+            mexErrMsgTxt ("matrix dimensions invalid") ;
+            break ;
+
+        case RBIO_JUMBLED:
+            mexErrMsgTxt ("matrix contains unsorted columns") ;
+            break ;
+
+        case RBIO_ARG_ERROR:
+            mexErrMsgTxt ("input arguments invalid") ;
+            break ;
+
+        case RBIO_OUT_OF_MEMORY:
+            mexErrMsgTxt ("out of memory") ;
+            break ;
+
+        case RBIO_MKIND_INVALID:
+            mexErrMsgTxt ("mkind is invalid") ;
+            break ;
+
+        case RBIO_UNSUPPORTED:
+            mexErrMsgTxt ("finite-element form unsupported") ;
+            break ;
+
+        case RBIO_HEADER_IOERROR:
+            mexErrMsgTxt ("header I/O error") ;
+            break ;
+
+        case RBIO_CP_IOERROR:
+            mexErrMsgTxt ("column pointers I/O error") ;
+            break ;
+            
+        case RBIO_ROW_IOERROR:
+            mexErrMsgTxt ("row indices I/O error") ;
+            break ;
+
+        case RBIO_VALUE_IOERROR:
+            mexErrMsgTxt ("numerical values I/O error") ;
+            break ;
+
+        default:
+            mexErrMsgTxt ("unknown error") ;
+            break ;
+    }
+}
diff --git a/RBio/RBio/RBfix.m b/RBio/RBio/RBfix.m
new file mode 100644
index 0000000..2016f69
--- /dev/null
+++ b/RBio/RBio/RBfix.m
@@ -0,0 +1,135 @@
+function [A, Z, title, key, mtype] = RBfix (filename)
+%RBFIX read a possibly corrupted matrix from a R/B file
+% (assembled format only).  Usage:
+%
+% [A Z title key mtype] = RBfix (filename)
+%
+% The Rutherford/Boeing format stores a sparse matrix in a file in compressed-
+% column form, using 3 arrays: Ap, Ai, and Ax.  The row indices of entries in
+% A(:,j) are in Ai(p1:p2) and the corresponding numerical values are Ax(p1:p2),
+% where p1 = Ap(j) and p2 = Ap(j+1)-1.  The row indices ought to be sorted, and
+% no duplicates should appear, but this function ignores that requirement.
+% Duplicate entries are summed if they exist, and A is returned with sorted
+% columns.  Symmetric matrices are stored with just their lower triangular
+% parts in the file.  Normally, it is an error if entries are present in the
+% upper triangular part of a matrix that is declared in the file to be
+% symmetric.  This function simply ignores those entries.
+%
+% If CHOLMOD is installed, this function is faster and uses less memory.
+%
+% Example:
+%
+%   load west0479
+%   RBwrite ('mywest', west0479, [ ], 'My west0479 file', 'west0479') ;
+%   [A Z title key mtype] = RBfix ('mywest') ;
+%   isequal (A, west0479)
+%   title, key, mtype
+%
+% See also mread, RBread, RBwrite, RBreade, sparse2.
+
+% Optionally uses the CHOLMOD sparse2 mexFunction.
+
+% Copyright 2009, Timothy A. Davis
+
+%-------------------------------------------------------------------------------
+% read in the raw contents of the Rutherford/Boeing file
+%-------------------------------------------------------------------------------
+
+[mtype Ap Ai Ax title key nrow] = RBraw (filename) ;
+mtype = lower (mtype) ;
+
+%-------------------------------------------------------------------------------
+% determine dimension, number of entries, and convert numerical entries
+%-------------------------------------------------------------------------------
+
+% number of columns
+ncol = length (Ap) - 1 ;
+
+% number of entries
+nz = length (Ai) ;
+
+% check column pointers
+if (any (Ap ~= sort (Ap)) | (Ap (1) ~= 1) | (Ap (ncol+1) - 1 ~= nz))	    %#ok
+    error ('invalid column pointers') ;
+end
+
+% check row indices
+if ((double (max (Ai)) > nrow) | double (min (Ai)) < 1)			    %#ok
+    error ('invalid row indices') ;
+end
+
+% Ax can be empty, for a p*a matrix
+if (~isempty (Ax))
+    if (mtype (1) == 'c')
+	% Ax is real, with real/imaginary parts interleaved
+	if (2 * nz ~= length (Ax))
+	    error ('invalid matrix') ;
+	end
+	Ax = Ax (1:2:end) + (1i * Ax (2:2:end)) ;
+    elseif (mtype (1) == 'i')
+	Ax = double (Ax) ;
+    end
+    % numerical values must be of the right size
+    if (nz ~= length (Ax))
+	error ('invalid matrix') ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% create the triplet form
+%-------------------------------------------------------------------------------
+
+% construct column indices
+Aj = zeros (nz,1) ;
+for j = 1:ncol
+    p1 = Ap (j) ;
+    p2 = Ap (j+1) - 1 ;
+    Aj (p1:p2) = j ;
+end
+
+%-------------------------------------------------------------------------------
+% create the sparse matrix form
+%-------------------------------------------------------------------------------
+
+if (exist ('sparse2') == 3)						    %#ok
+    % Use sparse2 in CHOLMOD.  It's faster, allows integer Ai and Aj, and
+    % returns the Z matrix as the 2nd output argument.
+    if (isempty (Ax))
+	Ax = 1 ;
+    end
+    % numerical matrix
+    [A Z] = sparse2 (Ai, Aj, Ax, nrow, ncol) ;
+else
+    % stick with MATLAB, without CHOLMOD.  This is slower and takes more memory.
+    Ai = double (Ai) ;
+    Aj = double (Aj) ;
+    if (isempty (Ax))
+	% pattern-only matrix
+	A = spones (sparse (Ai, Aj, 1, nrow, ncol)) ;
+	Z = sparse (nrow, ncol) ;
+    else
+	% numerical matrix
+	A = sparse (Ai, Aj, Ax, nrow, ncol) ;
+	% determine the pattern of explicit zero entries
+	S = spones (sparse (Ai, Aj, 1, nrow, ncol)) ;
+	Z = S - spones (A) ;
+    end
+end
+
+% check for entries in upper part
+if (any (mtype (2) == 'shz') & nnz (triu (A,1) > 0))			    %#ok
+    fprintf ('entries in upper triangular part of %s matrix ignored\n', mtype);
+end
+
+% add the upper triangular part
+if (mtype (2) == 's')
+    A = A + tril (A,-1).' ;
+    Z = Z + tril (Z,-1)' ;
+elseif (mtype (2) == 'h')
+    A = A + tril (A,-1)' ;
+    Z = Z + tril (Z,-1)' ;
+elseif (mtype (2) == 'z')
+    A = A - tril (A,-1).' ;
+    Z = Z + tril (Z,-1)' ;
+end
+
diff --git a/RBio/RBio/RBinstall.m b/RBio/RBio/RBinstall.m
new file mode 100644
index 0000000..d19d0c5
--- /dev/null
+++ b/RBio/RBio/RBinstall.m
@@ -0,0 +1,41 @@
+function RBinstall (quiet)
+%RBINSTALL install the RBio toolbox for use in MATLAB
+% Compiles the Fortran mexFunctions RBread, RBwrite, RBtype, and RBraw, and
+% the C mexFunction UFfull_write, and adds the current directory to the MATLAB
+% path.
+%
+% Example:
+%
+%   RBinstall
+%
+% See also RBread, RBwrite, RBtype, RBraw.
+%
+% Copyright 2009, Timothy A. Davis
+
+if (nargin < 1)
+    quiet = 0 ;
+end
+
+if (~quiet)
+    help RBio
+end
+
+RBmake
+
+s = pwd ;
+addpath (s) ;
+
+cd private
+testRB1
+if (exist ('UFget') == 2) %#ok<EXIST>
+    testRB2
+end
+cd (s)
+
+if (~quiet)
+    fprintf ('\nRBio is ready to use.  Your path has been modified for\n') ;
+    fprintf ('this session, by adding the following path:\n') ;
+    fprintf ('%s\n', s) ;
+    fprintf ('Use the pathtool to modify your path permanently.\n') ;
+end
+
diff --git a/RBio/RBio/RBmake.m b/RBio/RBio/RBmake.m
new file mode 100644
index 0000000..1ee76b2
--- /dev/null
+++ b/RBio/RBio/RBmake.m
@@ -0,0 +1,58 @@
+function RBmake
+%RBMAKE compile the RBio toolbox for use in MATLAB
+% Compiles the Fortran mexFunctions RBread, RBwrite, RBtype, and RBraw.
+%
+% Example:
+%
+%   RBmake
+%
+% See also RBread, RBwrite, RBtype, RBraw, RBinstall.
+%
+% Copyright 2009, Timothy A. Davis
+
+mexcmd = ['mex -O %s %s RBerror.c ../Source/RBio.c ' ...
+    '../../SuiteSparse_config/SuiteSparse_config.c ' ...
+    '-I../../SuiteSparse_config -I../Include'] ;
+
+try
+    % ispc does not appear in MATLAB 5.3
+    pc = ispc ;
+    mac = ismac ;
+catch
+    % if ispc fails, assume we are on a Windows PC if it's not unix
+    pc = ~isunix ;
+    mac = 0 ;
+end
+
+if (~(pc || mac))
+    % for POSIX timing routine
+    mexcmd = [mexcmd ' -lrt'] ;
+end
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    mexcmd = [mexcmd ' -silent '] ;
+end
+
+files = { 'RBread.c', 'RBwrite.c', 'RBraw.c', 'RBtype.c' } ;
+n = length (files) ;
+
+if (~isempty (strfind (computer, '64')))
+    try
+        % try with -largeArrayDims (will fail on old MATLAB versions)
+        for k = 1:n
+            eval (sprintf (mexcmd, '-largeArrayDims', files {k})) ;
+        end
+    catch %#ok<CTCH>
+        % try without -largeArrayDims (will fail on recent MATLAB versions)
+        for k = 1:n
+            eval (sprintf (mexcmd, '', files {k})) ;
+        end
+    end
+else
+    for k = 1:n
+        eval (sprintf (mexcmd, '', files {k})) ;
+    end
+end
+
+fprintf ('RBio successfully compiled.\n') ;
diff --git a/RBio/RBio/RBraw.c b/RBio/RBio/RBraw.c
new file mode 100644
index 0000000..39788ed
--- /dev/null
+++ b/RBio/RBio/RBraw.c
@@ -0,0 +1,153 @@
+/* ========================================================================== */
+/* === RBio/RBio/RBraw.c: MATLAB mexFunction to read raw contents of RB file  */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+/*
+c-----------------------------------------------------------------------
+c RBraw mexFunction: read the raw contents of a Rutherford/Boeing file
+c-----------------------------------------------------------------------
+c
+c   [mtype Ap Ai Ax title key nrow] = RBraw (filename)
+c
+c   mtype: Rutherford/Boeing matrix type (psa, rua, rsa, rse, ...)
+c   Ap: column pointers (1-based)
+c   Ai: row indices (1-based)
+c   Ax: numerical values (real, complex, or integer).  Empty for p*a
+c       matrices.  A complex matrix is read in as a single double array
+c       Ax, where the kth entry has real value Ax(2*k-1) and imaginary
+c       value Ax(2*k).
+c   title: a string containing the title from the first line of the file
+c   key: a string containing the 8-char key, from 1st line of the file
+c   nrow: number of rows in the matrix
+c
+c This function works for both assembled and unassembled (finite-
+c element) matrices.  It is also useful for checking the contents of a
+c Rutherford/Boeing file in detail, in case the file has invalid column
+c pointers, unsorted columns, duplicate entries, entries in the upper
+c triangular part of the file for a symmetric matrix, etc.
+c
+c Example:
+c
+c   load west0479
+c   RBwrite ('mywest', west0479, [ ], 'My west0479 file', 'west0479') ;
+c   [mtype Ap Ai Ax title key nrow] = RBraw ('mywest') ;
+c
+c See also RBfix, RBread, RBreade.
+c-----------------------------------------------------------------------
+*/
+
+#include "RBio.h"
+#define LEN 1024
+#define Long SuiteSparse_long
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    Long *Ap, *Ai ;
+    double *Ax ;
+    Long p, j, nrow, ncol, mkind, skind, xsize, status, nelnz, fem,
+        iclass, nnz ;
+    mwSize dims [2] = { 0, 1 } ;
+    char filename [LEN+1], title [73], key [9], mtype [4] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin != 1 || nargout > 7 || !mxIsChar (pargin [0]))
+    {
+        mexErrMsgTxt ("Usage:  = RBread (filename)") ;
+        mexErrMsgTxt
+            ("Usage: [mtype Ap Ai Ax title key nrow] = RBraw (filename)") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get filename */
+    /* ---------------------------------------------------------------------- */
+
+    if (mxGetString (pargin [0], filename, LEN) != 0)
+    {
+        mexErrMsgTxt ("filename too long") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the raw contents of the file */
+    /* ---------------------------------------------------------------------- */
+
+    status = RBreadraw (filename, title, key, mtype, &nrow, &ncol, &nnz, &nelnz,
+        &mkind, &skind, &fem, &xsize, &Ap, &Ai, &Ax) ;
+
+    if (status != RBIO_OK)
+    {
+        mexErrMsgTxt ("error reading file") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* convert back to 1-based */
+    /* ---------------------------------------------------------------------- */
+
+    for (j = 0 ; j <= ncol ; j++) Ap [j]++ ;
+    for (p = 0 ; p <  nnz  ; p++) Ai [p]++ ;
+
+    /* ---------------------------------------------------------------------- */
+    /* return results to MATLAB */
+    /* ---------------------------------------------------------------------- */
+
+    iclass = (sizeof (Long) == 4) ? mxINT32_CLASS : mxINT64_CLASS ;
+
+    /* return mtype */
+    pargout [0] = mxCreateString (mtype) ;
+
+    if (nargout > 1)
+    {
+        /* return Ap, of size ncol+1 */
+        pargout [1] = mxCreateNumericArray (2, dims, iclass, mxREAL) ;
+        mxFree (mxGetData (pargout [1])) ;
+        mxSetData (pargout [1], Ap) ;
+        mxSetM (pargout [1], ncol + 1) ;
+    }
+
+    if (nargout > 2)
+    {
+        /* return Ai, of size nnz */
+        pargout [2] = mxCreateNumericArray (2, dims, iclass, mxREAL) ;
+        mxFree (mxGetData (pargout [2])) ;
+        mxSetData (pargout [2], Ai) ;
+        mxSetM (pargout [2], nnz) ;
+    }
+
+    if (nargout > 3)
+    {
+        /* return Ax, of size xsize */
+        pargout [3] = mxCreateNumericArray (2, dims, mxDOUBLE_CLASS, mxREAL) ;
+        mxFree (mxGetData (pargout [3])) ;
+        mxSetData (pargout [3], Ax) ;
+        mxSetM (pargout [3], xsize) ;
+    }
+
+    if (nargout > 4)
+    {
+        /* return title */
+        pargout [4] = mxCreateString (title) ;
+    }
+
+    if (nargout > 5)
+    {
+        /* return key */
+        pargout [5] = mxCreateString (key) ;
+    }
+
+    if (nargout > 6)
+    {
+        /* return nrow */
+        pargout [6] = mxCreateDoubleScalar ((double) nrow) ;
+    }
+}
diff --git a/RBio/RBio/RBraw.m b/RBio/RBio/RBraw.m
new file mode 100644
index 0000000..b073018
--- /dev/null
+++ b/RBio/RBio/RBraw.m
@@ -0,0 +1,32 @@
+function [mtype, Ap, Ai, Ax, title, key, nrow] = RBraw (filename)	    %#ok
+%RBRAW read the raw contents of a Rutherford/Boeing file
+%
+%   [mtype Ap Ai Ax title key nrow] = RBraw (filename)
+%
+%   mtype: Rutherford/Boeing matrix type (psa, rua, rsa, rse, ...)
+%   Ap: column pointers (1-based)
+%   Ai: row indices (1-based)
+%   Ax: numerical values (real, complex, or integer).  Empty for p*a matrices.
+%       A complex matrix is read in as a single double array Ax, where the kth
+%       entry has real value Ax(2*k-1) and imaginary value Ax(2*k).
+%   title: a string containing the title from the first line of the R/B file
+%   key: a string containing the 8-character key, from the 1st line of the file
+%   nrow: number of rows in the matrix
+%
+% This function works for both assembled and unassembled (finite-element)
+% matrices.  It is also useful for checking the contents of a Rutherford/Boeing
+% file in detail, in case the file has invalid column pointers, unsorted
+% columns, duplicate entries, entries in the upper triangular part of the file 
+% for a symmetric matrix, etc.
+%
+% Example:
+%
+%   load west0479
+%   RBwrite ('mywest', west0479, [ ], 'My west0479 file', 'west0479') ;
+%   [mtype Ap Ai Ax title key nrow] = RBraw ('mywest') ;
+%
+% See also RBfix, RBread, RBreade.
+
+% Copyright 2009, Timothy A. Davis
+
+error ('RBraw mexFunction not found') ;
diff --git a/RBio/RBio/RBread.c b/RBio/RBio/RBread.c
new file mode 100644
index 0000000..953a285
--- /dev/null
+++ b/RBio/RBio/RBread.c
@@ -0,0 +1,141 @@
+/* ========================================================================== */
+/* === RBio/RBio/RBread.c: MATLAB mexFunction for reading R/B file ========== */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+/*
+   [A Z title key mtype] = RBread (filename)
+
+   A: a sparse matrix (no explicit zero entries)
+   Z: binary pattern of explicit zero entries in Rutherford/Boeing file.
+        This always has the same size as A, and is always sparse.
+
+   title: the 72-character title string in the file
+   key: the 8-character matrix name in the file
+   mtype: see RBwrite.m for a description.
+*/
+
+#include "RBio.h"
+#define LEN 1024
+#define TRUE (1)
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define Long SuiteSparse_long
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    Long *Ap, *Ai, *Zp, *Zi ;
+    double *Ax, *Az, *Zx ;
+    Long p, j, build_upper, zero_handling, nrow, ncol, mkind, skind, asize, znz,
+        status ;
+    char filename [LEN+1], title [73], key [9], mtype [4] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin != 1 || nargout > 5 || !mxIsChar (pargin [0]))
+    {
+        mexErrMsgTxt ("Usage: [A Z title key mtype] = RBread (filename)") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get filename */
+    /* ---------------------------------------------------------------------- */
+
+    if (mxGetString (pargin [0], filename, LEN) != 0)
+    {
+        mexErrMsgTxt ("filename too long") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the matrix */
+    /* ---------------------------------------------------------------------- */
+
+    build_upper = TRUE ;                    /* always build upper tri. part */
+    zero_handling = (nargout > 1) ? 2 : 1 ; /* prune or extract zeros */
+
+    status = RBread (filename, build_upper, zero_handling, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, &Ax, &Az, &Zp, &Zi) ;
+
+    if (status != RBIO_OK)
+    {
+        RBerror (status) ;
+        mexErrMsgTxt ("error reading file") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return A to MATLAB */
+    /* ---------------------------------------------------------------------- */
+
+    pargout [0] = mxCreateSparse (0, 0, 0, (mkind == 2) ? mxCOMPLEX : mxREAL) ;
+    mxFree (mxGetJc (pargout [0])) ;
+    mxFree (mxGetIr (pargout [0])) ;
+    mxFree (mxGetPr (pargout [0])) ;
+    if (mkind == 2) mxFree (mxGetPi (pargout [0])) ;
+    mxSetM (pargout [0], nrow) ;
+    mxSetN (pargout [0], ncol) ;
+    mxSetNzmax (pargout [0], asize) ;
+    mxSetJc (pargout [0], (mwIndex *) Ap) ;
+    mxSetIr (pargout [0], (mwIndex *) Ai) ;
+    mxSetPr (pargout [0], Ax) ;
+    if (mkind == 2) mxSetPi (pargout [0], Az) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* return Z to MATLAB */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargout > 1)
+    {
+        Zx = (double *) SuiteSparse_malloc (znz, sizeof (double)) ;
+        for (p = 0 ; p < znz ; p++)
+        {
+            Zx [p] = 1 ;
+        }
+        pargout [1] = mxCreateSparse (0, 0, 0, mxREAL) ;
+        mxFree (mxGetJc (pargout [1])) ;
+        mxFree (mxGetIr (pargout [1])) ;
+        mxFree (mxGetPr (pargout [1])) ;
+        mxSetM (pargout [1], nrow) ;
+        mxSetN (pargout [1], ncol) ;
+        mxSetNzmax (pargout [1], MAX (znz,1)) ;
+        mxSetJc (pargout [1], (mwIndex *) Zp) ;
+        mxSetIr (pargout [1], (mwIndex *) Zi) ;
+        mxSetPr (pargout [1], Zx) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return title */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargout > 2)
+    {
+        pargout [2] = mxCreateString (title) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return key */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargout > 3)
+    {
+        pargout [3] = mxCreateString (key) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return mtype */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargout > 4)
+    {
+        pargout [4] = mxCreateString (mtype) ;
+    }
+}
diff --git a/RBio/RBio/RBread.m b/RBio/RBio/RBread.m
new file mode 100644
index 0000000..b8a54fd
--- /dev/null
+++ b/RBio/RBio/RBread.m
@@ -0,0 +1,27 @@
+function [A, Z, title, key, mtype] = RBread (filename)			    %#ok
+%RBREAD read a sparse matrix from a Rutherford/Boeing file
+% Usage:
+%   [A Z title key mtype] = RBread (filename)
+%
+%   A: a sparse matrix (no explicit zero entries)
+%   Z: binary pattern of explicit zero entries in Rutherford/Boeing file.
+%       This always has the same size as A, and is always sparse.
+%   title: the 72-character title string in the file
+%   key: the 8-character matrix name in the file
+%   mtype: the Rutherford/Boeing type (see RBwrite for a description).
+%       This function does not support finite-element matrices (use RBreade
+%       instead).
+%
+% Example:
+%   load west0479
+%   C = west0479 ;
+%   RBwrite ('mywest', C, 'WEST0479 chemical eng. problem', 'west0479')
+%   A = RBread ('mywest') ;
+%   norm (A-C,1)
+%
+% See also RBwrite, RBreade, RBtype.
+
+% Copyright 2009, Timothy A. Davis
+
+error ('RBread mexFunction not found') ;
+
diff --git a/RBio/RBio/RBreade.m b/RBio/RBio/RBreade.m
new file mode 100644
index 0000000..e2ac155
--- /dev/null
+++ b/RBio/RBio/RBreade.m
@@ -0,0 +1,136 @@
+function [A, Z, title, key, mtype] = RBreade (filename)
+%RBREADE read a symmetric finite-element matrix from a R/B file
+% Usage:
+%   [A Z title key mtype] = RBreade (filename)
+%
+% The file must contain a Rutherford/Boeing matrix of type *se or *he, where *
+% can be r, p, i, or c.  See RBread for a description of the outputs.
+%
+% If CHOLMOD is installed, this function is faster and uses less memory.
+%
+% Example:
+%
+%   [A Z title key mtype] = RBreade ('lap_25.pse') ;
+%
+% See also RBread, RBraw, sparse2.
+
+% Optionally uses the CHOLMOD sparse2 mexFunction.
+
+% Copyright 2009, Timothy A. Davis
+
+%-------------------------------------------------------------------------------
+% read in the raw contents of the Rutherford/Boeing file
+%-------------------------------------------------------------------------------
+
+[mtype Ap Ai Ax title key n] = RBraw (filename) ;
+mtype = lower (mtype) ;
+if (~(mtype (2) == 's' | mtype (2) == 'h') | (mtype (3) ~= 'e'))	    %#ok
+    error ('RBreade is only for symmetric unassembled finite-element matrices');
+end
+
+%-------------------------------------------------------------------------------
+% determine dimension, number of elements, and convert numerical entries
+%-------------------------------------------------------------------------------
+
+Ap = double (Ap) ;
+Ai = double (Ai) ;
+
+% number of elements
+ne = length (Ap) - 1 ;
+
+% dimension.
+if (max (Ai) > n)
+    error ('invalid dimension') ;
+end
+
+% determine number of numerical entries
+nz = 0 ;
+for e = 1:ne
+    p1 = Ap (e) ;
+    p2 = Ap (e+1) - 1 ;
+    nu = p2 - p1 + 1 ; 
+    nz = nz + (nu * (nu+1)/2) ;
+end
+
+% Ax can be empty, for a pse matrix
+if (~isempty (Ax))
+    if (mtype (1) == 'c')
+	% Ax is real, with real/imaginary parts interleaved
+	if (2 * nz ~= length (Ax))
+	    error ('invalid matrix (wrong number of complex values)') ;
+	end
+	Ax = Ax (1:2:end) + (1i * Ax (2:2:end)) ;
+    elseif (mtype (1) == 'i')
+	Ax = double (Ax) ;
+    end
+    % numerical values must be of the right size
+    if (nz ~= length (Ax))
+	error ('invalid matrix (wrong number of values)') ;
+    end
+end
+
+%-------------------------------------------------------------------------------
+% create triplet form
+%-------------------------------------------------------------------------------
+
+% row and column indices for triplet form of the matrix
+ii = zeros (nz, 1) ;
+jj = zeros (nz, 1) ;
+
+nx = 0 ;
+
+% create triplet row and column indices from finite-element pattern
+for e = 1:ne
+    p1 = Ap (e) ;
+    p2 = Ap (e+1) - 1 ;
+    for p = p1:p2
+	j = Ai (p) ;
+	for pp = p:p2
+	    i = Ai (pp) ;
+	    nx = nx + 1 ;
+	    ii (nx) = max (i,j) ;
+	    jj (nx) = min (i,j) ;
+	end
+    end
+end
+
+%-------------------------------------------------------------------------------
+% create the sparse matrix form
+%-------------------------------------------------------------------------------
+
+if (exist ('sparse2') == 3)						    %#ok
+    % Use sparse2 in CHOLMOD.  It's faster, allows integer Ai and Aj, and
+    % returns the Z matrix as the 2nd output argument.
+    if (isempty (Ax))
+	Ax = 1 ;
+    end
+    % numerical matrix
+    [A Z] = sparse2 (ii, jj, Ax, n, n) ;
+else
+    % stick with MATLAB, without CHOLMOD.  This is slower and takes more memory.
+    if (isempty (Ax))
+	% pattern-only matrix
+	A = spones (sparse (ii, jj, 1, n, n)) ;
+	Z = sparse (n, n) ;
+    else
+	% numerical matrix
+	A = sparse (ii, jj, Ax, n, n) ;
+	% determine the pattern of explicit zero entries
+	S = spones (sparse (ii, jj, 1, n, n)) ;
+	Z = S - spones (A) ;
+    end
+end
+
+% add the upper triangular part
+if (mtype (2) == 's')
+    A = A + tril (A,-1).' ;
+elseif (mtype (2) == 'h')
+    A = A + tril (A,-1)' ;
+end
+Z = Z + tril (Z,-1)' ;
+
+% remove duplicates created from triplet form for a pattern-only matrix
+if (mtype (1) == 'p')
+    A = spones (A) ;
+end
+
diff --git a/RBio/RBio/RBtype.c b/RBio/RBio/RBtype.c
new file mode 100644
index 0000000..8e637a4
--- /dev/null
+++ b/RBio/RBio/RBtype.c
@@ -0,0 +1,102 @@
+/* ========================================================================== */
+/* === RBio/RBio/RBtype.c: MATLAB mexFunction to find matrix type =========== */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+/*
+-----------------------------------------------------------------------
+ RBtype mexFunction:
+-----------------------------------------------------------------------
+
+   [mtype mkind skind] = RBtype (A)
+
+   A: a sparse matrix.   Determines the Rutherford/Boeing type of the
+   matrix.  Very little memory is used (just size(A,2) integer
+   workspace), so this can succeed where a test such as nnz(A-A')==0
+   will fail.
+
+       mkind:  r: (0), A is real, and not binary
+               p: (1), A is binary
+               c: (2), A is complex
+               i: (3), A is integer
+
+       skind:  r: (-1), A is rectangular
+               u: (0), A is unsymmetric (not S, H, Z, below)
+               s: (1), A is symmetric (nnz(A-A.') is 0)
+               h: (2), A is Hermitian (nnz(A-A') is 0)
+               z: (3), A is skew symmetric (nnz(A+A.') is 0)
+
+   mtype is a 3-character string, where mtype(1) is the mkind
+   ('r', 'p', 'c', or 'i').  mtype(2) is the skind ('r', 'u', 's', 'h',
+   or 'z'), and mtype(3) is always 'a'.
+-----------------------------------------------------------------------
+*/
+
+#include "RBio.h"
+#define TRUE (1)
+#define Long SuiteSparse_long
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    double xmin, xmax ;
+    Long *Ap, *Ai ;
+    double *Ax, *Az ;
+    Long nrow, ncol, nnz, mkind, skind, mkind_in ;
+    char mtype [4] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin != 1 || nargout > 3)
+    {
+        mexErrMsgTxt ("Usage: [mtype mkind skind] = RBtype (A)") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get A */
+    /* ---------------------------------------------------------------------- */
+
+    if (!mxIsClass (pargin [0], "double") || !mxIsSparse (pargin [0]))
+    {
+        mexErrMsgTxt ("A must be sparse and double") ;
+    }
+
+    Ap = (Long *) mxGetJc (pargin [0]) ;
+    Ai = (Long *) mxGetIr (pargin [0]) ;
+    Ax = mxGetPr (pargin [0]) ;
+    Az = mxGetPi (pargin [0]) ;
+    nrow = mxGetM (pargin [0]) ;
+    ncol = mxGetN (pargin [0]) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* determine the mtype of A */
+    /* ---------------------------------------------------------------------- */
+
+    mkind_in = mxIsComplex (pargin [0]) ? 2 : 0 ;
+
+    RBkind (nrow, ncol, Ap, Ai, Ax, Az, mkind_in, &mkind, &skind, mtype,
+        &xmin, &xmax, NULL) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* return the result */
+    /* ---------------------------------------------------------------------- */
+
+    pargout [0] = mxCreateString (mtype) ;
+    if (nargout >= 2)
+    {
+        pargout [1] = mxCreateDoubleScalar ((double) mkind) ;
+    }
+    if (nargout >= 3)
+    {
+        pargout [2] = mxCreateDoubleScalar ((double) skind) ;
+    }
+}
diff --git a/RBio/RBio/RBtype.m b/RBio/RBio/RBtype.m
new file mode 100644
index 0000000..bb5c88d
--- /dev/null
+++ b/RBio/RBio/RBtype.m
@@ -0,0 +1,39 @@
+function [mtype, mkind, skind] = RBtype (A)                                 %#ok
+%RBTYPE determine the Rutherford/Boeing type of a sparse matrix
+% Usage:
+%   [mtype mkind skind] = RBtype (A)
+%
+% A must be a sparse matrix.  RBtype determines the Rutherford/Boeing type of A.
+% Very little memory is used (just size(A,2) integer workspace), so this can
+% succeed where a test such as nnz(A-A')==0 will fail.
+%
+%       mkind:  R: (0), A is real, and not binary
+%               P: (1), A is binary (all values or 0 or 1)
+%               C: (2), A is complex
+%               I: (3), A is integer
+%
+%       skind:  R: (-1), A is rectangular
+%               U: (0), A is unsymmetric (not S, H, or Z)
+%               S: (1), A is symmetric (nnz(A-A.') is 0)
+%               H: (2), A is Hermitian (nnz(A-A') is 0)
+%               Z: (3), A is skew symmetric (nnz(A+A.') is 0)
+%
+% mtype is a 3-character string, where mtype(1) is the mkind
+% ('R', 'P', or 'C').  mtype(2) is the skind ('R', 'U', 'S', 'H', or 'Z'),
+% and mtype(3) is 'A'.
+%
+% Example:
+%   load west0479
+%   A = west0479 ;
+%   RBtype (A)
+%   RBtype (spones (A))
+%   RBtype (2*spones (A))
+%   C = A+A' ;
+%   RBtype (C)
+%
+% See also RBread, RBwrite.
+
+% Copyright 2009-2011, Timothy A. Davis, http://www.suitesparse.com
+
+error ('RBtype mexFunction not found') ;
+
diff --git a/RBio/RBio/RBwrite.c b/RBio/RBio/RBwrite.c
new file mode 100644
index 0000000..cba87aa
--- /dev/null
+++ b/RBio/RBio/RBwrite.c
@@ -0,0 +1,168 @@
+/* ========================================================================== */
+/* === RBio/RBio/RBwrite.c: MATLAB mexFunction to write R/B file ============ */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+/*
+function mtype = RBwrite (filename, A, Z, title, key)                       %#ok
+%RBWRITE write a sparse matrix to a Rutherford/Boeing file
+% Usage:
+%   mtype = RBwrite (filename, A, Z, title, key)
+%
+%   filename: name of the file to create
+%   A: a sparse matrix
+%   Z: binary pattern of explicit zero entries to include in the
+%       Rutherford/Boeing file.  This always has the same size as A, and is
+%       always sparse.  Not used if empty ([ ]), or if nnz(Z) is 0.
+%   title: title for 1st line of  Rutherford/Boeing file, up to 72 characters
+%   key: matrix key, up to 8 characters, for 1st line of the file
+%
+% Z is optional.  RBwrite (filename, A) uses a default title and key, and does
+% not include any explicit zeros.  RBwrite (filname, A, 'title...', 'key') uses
+% the given title and key.  A must be sparse.  Z must be empty, or sparse.
+%
+% mtype is a 3-character string with the Rutherford/Boeing type used:
+%   mtype(1):  r: real, p: pattern, c: complex, i: integer
+%   mtype(2):  r: rectangular, u: unsymmetric, s: symmetric,
+%              h: Hermitian, Z: skew symmetric
+%   mtype(3):  a: assembled matrix, e: finite-element (not used by RBwrite)
+%
+% Example:
+%   load west0479
+%   C = west0479 ;
+%   RBwrite ('west0479', C, 'WEST0479 chemical eng. problem', 'west0479')
+%   A = RBread ('west0479') ;
+%   norm (A-C,1)
+%
+% See also RBread, RBtype.
+*/
+
+#include "RBio.h"
+#define LEN 1024
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define Long SuiteSparse_long
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    Long nrow, ncol, ititle, zrow, zcol, i, mkind ;
+    Long *Ap, *Ai, *Zp, *Zi, *w, *cp ;
+    double *Ax, *Az ;
+    char filename [LEN+1], title [73], key [9], mtype [4] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargin < 2 || nargin > 5 || nargout > 2 || !mxIsChar (pargin [0]))
+    {
+        mexErrMsgTxt ("[m s] = RBwrite (filename, A, Z, title, key)") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get filename */
+    /* ---------------------------------------------------------------------- */
+
+    if (mxGetString (pargin [0], filename, LEN) != 0)
+    {
+        mexErrMsgTxt ("filename too long") ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get A */
+    /* ---------------------------------------------------------------------- */
+
+    if (!mxIsClass (pargin [1], "double") || !mxIsSparse (pargin [1]))
+    {
+        mexErrMsgTxt ("A must be sparse and double") ;
+    }
+
+    Ap = (Long *) mxGetJc (pargin [1]) ;
+    Ai = (Long *) mxGetIr (pargin [1]) ;
+    Ax = mxGetPr (pargin [1]) ;
+    nrow = mxGetM (pargin [1]) ;
+    ncol = mxGetN (pargin [1]) ;
+
+    if (mxIsComplex (pargin [1]))
+    {
+        mkind = 2 ;
+        Az = mxGetPi (pargin [1]) ;
+    }
+    else
+    {
+        mkind = 0 ;
+        Az = NULL ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get title and key */
+    /* ---------------------------------------------------------------------- */
+
+    title [0] = '\0' ;
+    key [0] = '\0' ;
+    ititle = 99 ;
+    for (i = 2 ; i < nargin ; i++)
+    {
+        if (mxIsChar (pargin [i]))
+        {
+            if (ititle == 99)
+            {
+                /* get the title, up to 72 characters long */
+                mxGetString (pargin [i], title, 72) ;
+                ititle = i ;
+            }
+            else
+            {
+                /* get the key, up to 8 characters long */
+                mxGetString (pargin [i], key, 8) ;
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get Z, if present */
+    /* ---------------------------------------------------------------------- */
+
+    Zp = NULL ;
+    Zi = NULL ;
+
+    if (nargin >= 3 && ititle > 2)
+    {
+        zrow = mxGetM (pargin [2]) ;
+        zcol = mxGetN (pargin [2]) ;
+        if (zrow > 0 && zcol > 0)
+        {
+            if (!mxIsClass (pargin [2], "double") || !mxIsSparse (pargin [2]) ||
+                mxIsComplex (pargin [2]) || zrow != nrow || zcol != ncol)
+            {
+                mexErrMsgTxt
+                    ("Z must be sparse, double, real, and same size as A") ;
+            }
+            Zp = (Long *) mxGetJc (pargin [2]) ;
+            Zi = (Long *) mxGetIr (pargin [2]) ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* write the matrix to the file */
+    /* ---------------------------------------------------------------------- */
+
+    RBwrite (filename, title, key, nrow, ncol, Ap, Ai, Ax, Az, Zp, Zi,
+        mkind, mtype) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* return mtype */
+    /* ---------------------------------------------------------------------- */
+
+    if (nargout > 0)
+    {
+        pargout [0] = mxCreateString (mtype) ;
+    }
+}
diff --git a/RBio/RBio/RBwrite.m b/RBio/RBio/RBwrite.m
new file mode 100644
index 0000000..a4a6fc2
--- /dev/null
+++ b/RBio/RBio/RBwrite.m
@@ -0,0 +1,36 @@
+function mtype = RBwrite (filename, A, Z, title, key)			    %#ok
+%RBWRITE write a sparse matrix to a Rutherford/Boeing file
+% Usage:
+%   mtype = RBwrite (filename, A, Z, title, key)
+%
+%   filename: name of the file to create
+%   A: a sparse matrix
+%   Z: binary pattern of explicit zero entries to include in the
+%       Rutherford/Boeing file.  This always has the same size as A, and is
+%       always sparse.  Not used if empty ([ ]), or if nnz(Z) is 0.
+%   title: title for 1st line of  Rutherford/Boeing file, up to 72 characters
+%   key: matrix key, up to 8 characters, for 1st line of the file
+%
+% Z is optional.  RBwrite (filename, A) uses a default title and key, and does
+% not include any explicit zeros.  RBwrite (filname, A, 'title...', 'key') uses
+% the given title and key.  A must be sparse.  Z must be empty, or sparse.
+%
+% mtype is a 3-character string with the Rutherford/Boeing type used:
+%   mtype(1):  r: real, p: pattern, c: complex, i: integer
+%   mtype(2):  r: rectangular, u: unsymmetric, s: symmetric,
+%              h: Hermitian, Z: skew symmetric
+%   mtype(3):  a: assembled matrix, e: finite-element (not used by RBwrite)
+%
+% Example:
+%   load west0479
+%   C = west0479 ;
+%   RBwrite ('west0479', C, 'WEST0479 chemical eng. problem', 'west0479')
+%   A = RBread ('west0479') ;
+%   norm (A-C,1)
+%
+% See also RBread, RBtype.
+
+% Copyright 2009-2011, Timothy A. Davis, http://www.suitesparse.com
+
+error ('RBwrite mexFunction not found') ;
+
diff --git a/RBio/RBio/mywest b/RBio/RBio/mywest
new file mode 100644
index 0000000..587882c
--- /dev/null
+++ b/RBio/RBio/mywest
@@ -0,0 +1,601 @@
+WEST0479 chemical eng. problem                                         |west047 
+           597            30            95           472
+rua                      479           479          1887             0
+(16I5)          (20I4)          (4E18.10)           
+    1    4    7   10   12   14   19   24   27   30   33   37   40   43   46   48
+   50   55   58   61   64   67   70   73   76   78   80   82   84   86   88   90
+   92   96  102  104  106  109  113  116  119  122  125  128  130  132  137  142
+  145  148  151  155  158  161  164  166  168  173  176  179  182  185  188  191
+  193  195  197  199  201  203  205  207  209  213  219  221  223  226  230  233
+  236  238  239  246  248  249  256  260  295  303  305  306  320  334  348  352
+  381  386  388  389  400  411  422  430  439  443  446  447  459  471  483  491
+  507  513  516  517  528  539  550  559  568  577  586  595  604  613  622  631
+  640  649  658  667  676  685  694  703  712  721  730  739  748  757  766  774
+  782  790  798  806  814  817  820  823  826  829  832  835  838  841  844  847
+  850  853  856  858  861  864  867  871  875  879  886  896  898  900  907  912
+  918  921  923  925  927  929  931  933  935  937  939  942  945  948  951  954
+  957  960  963  966  969  972  975  979  983  987  992 1000 1002 1004 1010 1013
+ 1017 1018 1020 1022 1024 1026 1028 1030 1032 1034 1036 1044 1047 1050 1053 1054
+ 1060 1066 1072 1080 1086 1087 1090 1091 1097 1103 1109 1117 1120 1123 1126 1127
+ 1133 1139 1145 1147 1149 1151 1158 1164 1165 1168 1169 1175 1181 1187 1195 1198
+ 1201 1204 1205 1211 1217 1223 1225 1227 1229 1237 1243 1244 1247 1248 1254 1260
+ 1266 1274 1277 1280 1283 1284 1290 1296 1302 1304 1306 1308 1316 1322 1323 1326
+ 1327 1333 1339 1345 1353 1356 1359 1362 1363 1369 1375 1381 1383 1385 1387 1395
+ 1401 1402 1405 1406 1412 1418 1424 1432 1435 1438 1441 1442 1448 1454 1460 1462
+ 1464 1466 1474 1480 1481 1484 1485 1491 1497 1503 1505 1507 1509 1511 1513 1515
+ 1517 1519 1521 1523 1525 1527 1529 1531 1533 1535 1537 1539 1541 1543 1545 1547
+ 1549 1551 1553 1555 1557 1559 1561 1563 1565 1567 1569 1571 1573 1575 1578 1582
+ 1586 1588 1590 1592 1594 1596 1598 1603 1608 1613 1615 1617 1619 1621 1623 1625
+ 1628 1631 1634 1636 1638 1643 1648 1651 1654 1657 1661 1664 1667 1670 1672 1674
+ 1679 1681 1683 1685 1688 1692 1696 1698 1700 1702 1704 1706 1708 1713 1718 1723
+ 1725 1727 1729 1731 1733 1735 1738 1741 1744 1746 1748 1753 1758 1761 1764 1767
+ 1771 1774 1777 1780 1782 1784 1789 1792 1795 1798 1801 1804 1807 1809 1811 1813
+ 1815 1817 1819 1821 1823 1825 1829 1835 1837 1839 1842 1846 1849 1852 1854 1856
+ 1858 1860 1862 1864 1866 1868 1870 1872 1874 1876 1878 1880 1882 1884 1886 1888
+  25  31  87  26  31  88  27  31  89  28  29  29  30  30  31  87  88  89  32  43
+ 111 112 113  33  43 111  34  43 112  35  43 113  36  37  38  39  37  43 111  38
+  43 112  39  43 113  40  42  41  42  42  43 111 112 113   2   8  11   3   9  12
+   4  10  13   5   8  11   6   9  12   7  10  13   8  17  27   9  17  10  17  11
+  18  12  18  13  18  14  17  15  17  16  17  17  19  30  42  18  20  23  24  30
+  41  19  21  20  21  21  22  30  22  24  40  41  23  30  42  24  30  42  68  74
+  99  69  74 100  70  74 101  71  72  72  73  73  74  99 100 101  75  86 123 124
+ 125  76  86 123  77  86 124  78  86 125  79  80  81  82  80  86 123  81  86 124
+  82  86 125  83  85  84  85  85  86 123 124 125  45  51  54  46  52  55  47  53
+  56  48  51  54  49  52  55  50  53  56  51  60  52  60  53  60  54  61  55  61
+  56  61  57  60  58  60  59  60  60  62  73  85  61  63  66  67  73  84  62  64
+  63  64  64  65  73  65  67  83  84  66  73  85  67  73  85  31 244  43   1  17
+  18  31  35  43 243  74 388  86  44  60  61  74  78  86 387 385 386 387 388  96
+  97  98 120 121 122 141 142 143 185 186 187 389 438 439 440 441 442 443 450 451
+ 452 455 456 458 459 461 462 463 464 472 473 474 475 476 182 183 184 391 455 456
+ 458 468 388 467 479 203 204 205 209 210 211 382 385 437 453 454 467 469 479 203
+ 204 205 209 210 211 383 386 437 453 454 467 470 479 203 204 205 209 210 211 384
+ 387 437 453 454 467 471 479 241 242 243 244 108 109 110 132 133 134 245 395 396
+ 397 398 399 400 407 408 409 412 413 415 416 418 419 420 421 429 430 431 432 433
+ 246 412 413 415 425 244 424 436 160 161 162 238 241 394 410 411 424 426 436 160
+ 161 162 239 242 394 410 411 424 427 436 160 161 162 240 243 394 410 411 424 428
+ 436 241 242 243 244 253 254 255 256 135 136 137 151 152 153 245 248 249 148 149
+ 150 247 244 248 256 249 147 169 170 171 175 176 177 238 241 248 249 253 147 169
+ 170 171 175 176 177 239 242 248 249 254 147 169 170 171 175 176 177 240 243 248
+ 249 255 363 364 365 366 385 386 387 388 215 216 217 218 219 220 227 228 229 232
+ 233 235 236 389 392 393 232 233 235 368 369 390 366 388 392 393 181 194 195 196
+ 230 231 363 382 385 392 393 181 194 195 196 230 231 364 383 386 392 393 181 194
+ 195 196 230 231 365 384 387 392 393  93  96 248 262 284 306 328 350 372  94  97
+ 248 262 284 306 328 350 372  95  98 248 262 284 306 328 350 372  93  96 248 262
+ 284 306 328 350 372  94  97 248 262 284 306 328 350 372  95  98 248 262 284 306
+ 328 350 372 105 108 264 286 308 330 352 374 392 106 109 264 286 308 330 352 374
+ 392 107 110 264 286 308 330 352 374 392 105 108 264 286 308 330 352 374 392 106
+ 109 264 286 308 330 352 374 392 107 110 264 286 308 330 352 374 392 117 120 249
+ 263 285 307 329 351 373 118 121 249 263 285 307 329 351 373 119 122 249 263 285
+ 307 329 351 373 117 120 249 263 285 307 329 351 373 118 121 249 263 285 307 329
+ 351 373 119 122 249 263 285 307 329 351 373 129 132 265 287 309 331 353 375 393
+ 130 133 265 287 309 331 353 375 393 131 134 265 287 309 331 353 375 393 129 132
+ 265 287 309 331 353 375 393 130 133 265 287 309 331 353 375 393 131 134 265 287
+ 309 331 353 375 393 135 141 266 288 310 332 354 376 136 142 267 289 311 333 355
+ 377 137 143 268 290 312 334 356 378 135 141 266 288 310 332 354 376 136 142 267
+ 289 311 333 355 377 137 143 268 290 312 334 356 378 138 148 238 139 149 239 140
+ 150 240 144 182 382 145 183 383 146 184 384 395 401 404 396 402 405 397 403 406
+ 398 401 404 399 402 405 400 403 406 160 401 410 161 402 410 162 403 163 404 411
+ 164 405 411 165 406 411 160 161 407 410 160 162 408 410 161 162 409 410 163 164
+ 165 410 412 423 435 157 163 164 165 411 413 416 417 423 434 412 414 413 414 158
+ 163 164 165 414 415 423 157 415 417 433 434 163 164 165 416 423 435 417 423 435
+ 148 178 149 179 150 180 148 166 149 167 150 168 148 154 149 155 150 156 215 221
+ 224 216 222 225 217 223 226 218 221 224 219 222 225 220 223 226 194 221 230 195
+ 222 230 196 223 230 197 224 231 198 225 231 199 226 231 194 195 227 230 194 196
+ 228 230 195 196 229 230 197 198 199 230 232 191 197 198 199 231 233 236 237 232
+ 234 233 234 192 197 198 199 234 235 191 235 237 197 198 199 236 237 182 212 183
+ 213 184 214 182 200 183 201 184 202 182 188 183 189 184 190 241 242 243 244 253
+ 254 255 256 257 264 265 246 247 258 244 256 264 265 241 250 253 261 264 265 242
+ 251 254 261 264 265 243 252 255 261 264 265 253 254 255 256 275 276 277 278 257
+ 262 263 266 267 268 259 256 262 278 263 250 253 260 262 263 275 251 254 260 262
+ 263 276 252 255 260 262 263 277 253 254 255 256 275 276 277 278 279 286 287 258
+ 259 280 256 278 286 287 253 272 275 283 286 287 254 273 276 283 286 287 255 274
+ 277 283 286 287 250 269 251 270 252 271 275 276 278 297 298 299 300 279 284 285
+ 288 289 290 281 278 284 300 285 272 275 282 284 285 297 273 276 282 284 285 298
+ 274 277 282 284 285 299 275 276 277 278 297 298 299 300 301 308 309 280 281 302
+ 278 300 308 309 275 294 297 305 308 309 276 295 298 305 308 309 277 296 299 305
+ 308 309 272 291 273 292 274 293 297 298 299 300 319 320 321 322 301 306 307 310
+ 311 312 303 300 306 322 307 294 297 304 306 307 319 295 298 304 306 307 320 296
+ 299 304 306 307 321 297 298 299 300 319 320 321 322 323 330 331 302 303 324 300
+ 322 330 331 297 316 319 327 330 331 298 317 320 327 330 331 299 318 321 327 330
+ 331 294 313 295 314 296 315 319 320 321 322 341 342 343 344 323 328 329 332 333
+ 334 325 322 328 344 329 316 319 326 328 329 341 317 320 326 328 329 342 318 321
+ 326 328 329 343 319 320 321 322 341 342 343 344 345 352 353 324 325 346 322 344
+ 352 353 319 338 341 349 352 353 320 339 342 349 352 353 321 340 343 349 352 353
+ 316 335 317 336 318 337 341 342 343 344 363 364 365 366 345 350 351 354 355 356
+ 347 344 350 366 351 338 341 348 350 351 363 339 342 348 350 351 364 340 343 348
+ 350 351 365 341 342 343 344 363 364 365 366 367 374 375 346 347 368 344 366 374
+ 375 341 360 363 371 374 375 342 361 364 371 374 375 343 362 365 371 374 375 338
+ 357 339 358 340 359 363 364 365 366 385 386 387 388 367 372 373 376 377 378 369
+ 366 372 388 373 360 363 370 372 373 385 361 364 370 372 373 386 362 365 370 372
+ 373 387 360 379 361 380 362 381  87  93  88  94  89  95  90  96  91  97  92  98
+  99 105 100 106 101 107 102 108 103 109 104 110 111 117 112 118 113 119 114 120
+ 115 121 116 122 123 129 124 130 125 131 126 132 127 133 128 134 135 138 136 139
+ 137 140 141 144 142 145 143 146 151 154 152 155 153 156 157 158 159 158 163 164
+ 165 159 163 164 165 160 163 161 164 162 165 163 166 164 167 165 168 169 172 175
+ 176 177 170 173 175 176 177 171 174 175 176 177 172 175 173 176 174 177 175 178
+ 176 179 177 180 102 418 424 103 419 424 104 420 424 421 422 422 423 102 103 104
+ 423 424 126 127 128 425 436 126 426 436 127 427 436 128 428 436 429 430 431 432
+ 126 430 436 127 431 436 128 432 436 433 435 434 435 126 127 128 435 436 185 188
+ 186 189 187 190 191 192 193 192 197 198 199 193 197 198 199 194 197 195 198 196
+ 199 197 200 198 201 199 202 203 206 209 210 211 204 207 209 210 211 205 208 209
+ 210 211 206 209 207 210 208 211 209 212 210 213 211 214  90 461 467  91 462 467
+  92 463 467 464 465 465 466  90  91  92 466 467 114 115 116 468 479 114 469 479
+ 115 470 479 116 471 479 472 473 474 475 114 473 479 115 474 479 116 475 479 476
+ 478 477 478 114 115 116 478 479 438 444 447 439 445 448 440 446 449 441 444 447
+ 442 445 448 443 446 449 444 453 445 453 446 453 447 454 448 454 449 454 450 453
+ 451 453 452 453 453 455 466 478 454 456 459 460 466 477 455 457 456 457 457 458
+ 466 458 460 476 477 459 466 478 460 466 478 266 269 267 270 268 271 288 291 289
+ 292 290 293 310 313 311 314 312 315 332 335 333 336 334 337 354 357 355 358 356
+ 359 376 379 377 380 378 381
+  1.0000000000E+00 -3.7648000000E-02 -3.4424000000E-01  1.0000000000E+00
+ -2.4523000000E-02 -3.7370900000E-01  1.0000000000E+00 -3.6613000000E-02
+ -8.3693800000E-01  1.3000000000E+02 -2.4337670000E+00  1.0000000000E+00
+ -1.6140910000E+00  1.6140910000E+00 -2.1873200000E-01 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.1383520000E+00  3.6694000000E-02
+  9.9316000000E-02  9.9316000000E-02  9.9316000000E-02 -5.0000000000E-01
+  1.6117000000E-02  8.7246000000E-02 -3.6119200000E-01  1.1643000000E-02
+  1.0504100000E-01 -3.2188800000E-01  1.0376000000E-02  1.4041700000E-01
+ -4.3624200000E-01 -7.6804300000E-01 -1.4302800000E-01 -1.5938900000E-01
+  1.0000000000E+00 -4.8561000000E-02 -2.6286800000E-01  1.0000000000E+00
+ -3.0926000000E-02 -2.7901300000E-01  1.0000000000E+00 -4.6124000000E-02
+ -6.2418800000E-01  5.2824360000E+00 -6.1239200000E-01  2.8868200000E-01
+ -2.1638200000E-01  1.3287740000E+00 -3.6946900000E-01 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  4.8176472000E+01 -1.0000000000E+00
+ -3.3000000000E-05  8.3500000000E+01 -1.0000000000E+00 -4.1000000000E-05
+  1.7194119300E+02 -1.0000000000E+00 -8.5000000000E-05  9.6651382000E+01
+  2.5000000000E+00  3.3000000000E-05  1.6827059900E+02  2.5000000000E+00
+  4.1000000000E-05  3.4758718900E+02  2.5000000000E+00  8.5000000000E-05
+  1.0000000000E+00 -1.1069700000E-01  1.6052320000E+00  1.0000000000E+00
+ -8.9809000000E-02  1.0000000000E+00 -1.5173700000E-01  1.0104550000E+00
+ -5.0000000000E-01  1.0059780000E+00 -3.0000000000E-01  1.0028850000E+00
+ -2.0000000000E-01  1.0000000000E+00 -1.8118500000E-01  1.0000000000E+00
+ -2.4002400000E-01  1.0000000000E+00 -2.2654800000E-01  1.0000000000E+00
+ -1.0000000000E+00  1.5000000000E+00  5.0000000000E-01  1.0000000000E+00
+ -3.1622000000E+05 -1.2323690430E+04 -1.0000000000E+00 -3.5226800781E+04
+  1.8449019531E+04  5.2983390000E+00  2.4530000000E-03  1.0808590090E+03
+ -2.0502200000E-01  1.4419200000E-01  6.3059860000E+01 -1.1593000000E-01
+ -1.8449019531E+04  8.4533400000E-01 -1.8449019531E+04 -1.5595580078E+04
+  1.0000000000E+00  2.0204900000E-01 -8.8547100000E-01  1.0000000000E-04
+  2.4483390000E+00  8.1611300000E-01  1.0000000000E+00 -2.2800000000E-04
+ -2.6243900000E-01  1.0000000000E+00 -4.1900000000E-04 -3.2162000000E-01
+  1.0000000000E+00 -1.5770000000E-03 -7.2647600000E-01  3.0000000000E+02
+ -2.8518910000E+00  1.0000000000E+00 -2.8701600000E-01  2.8701600000E-01
+ -4.3410000000E-03 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.1383520000E+00  4.2003000000E-02  9.4148100000E-01  9.4148100000E-01
+  9.4148100000E-01 -3.2188800000E-01  1.1877000000E-02  1.3310950000E+00
+ -3.6119200000E-01  1.3327000000E-02  9.9575300000E-01 -5.0000000000E-01
+  1.8449000000E-02  8.2705600000E-01 -1.0000000000E+00 -1.9240000000E+01
+ -3.8030000000E+00 -9.4810000000E+00  1.0000000000E+00 -8.8800000000E-04
+ -9.9474000000E-02  1.0000000000E+00 -1.3310000000E-03 -9.9474000000E-02
+  1.0000000000E+00 -2.2190000000E-03 -9.9474000000E-02  1.1776130000E+00
+ -3.1089630000E+00  9.9194300000E-01 -2.6400560000E+00  3.1921120000E+00
+ -4.4614000000E-02 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+  1.0986879700E+02 -1.0000000000E+00 -3.3000000000E-05  1.9138459800E+02
+ -1.0000000000E+00 -4.1000000000E-05  3.9547961400E+02 -1.0000000000E+00
+ -8.5000000000E-05  2.2173390200E+02  2.5000000000E+00  3.3000000000E-05
+  3.8700918600E+02  2.5000000000E+00  4.1000000000E-05  8.0081652800E+02
+  2.5000000000E+00  8.5000000000E-05  1.0000000000E+00 -9.1700000000E-03
+  1.0000000000E+00 -4.6441000000E-02  1.0000000000E+00 -4.8999200000E-01
+  1.0045300000E+00 -2.0000000000E-01  1.0025910000E+00 -3.0000000000E-01
+  1.0012500000E+00 -5.0000000000E-01  1.0000000000E+00 -3.7501000000E-02
+  1.0000000000E+00 -1.2414300000E-01  1.0000000000E+00 -2.9275300000E-01
+  1.0000000000E+00 -1.0000000000E+00  1.8537300000E-01  6.1791000000E-02
+  1.0000000000E+00 -3.1622000000E+05 -1.6364190430E+04 -1.0000000000E+00
+ -4.6967822270E+03  1.3185400400E+02  2.2129129000E+01  9.5375300000E-01
+  2.4942900390E+03 -1.0215870000E+00  8.8782800000E-01  1.0400420000E+00
+ -2.6400560000E+00 -1.3185400400E+02  8.0570000000E-03 -1.3185400400E+02
+ -1.0624090000E+00  1.0000000000E+00  1.0164300000E-01 -6.1791000000E-02
+  7.6450000000E-03  2.3098949000E+01  7.6996490000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00 -3.8502310000E+00
+ -8.5000000000E-05  2.0159100000E+00  1.0000000000E+00  1.5961710000E+00
+ -7.8975100000E-01  1.0000000000E+00  8.8175600000E-01  1.0000000000E+00
+  1.0000000000E+00 -2.7937600000E+00 -8.4000000000E-05  2.0156650000E+00
+  1.0000000000E+00  1.5939940000E+00 -9.6191500000E-01  2.4250000000E-03
+  3.0363000000E-02  6.7304500000E-01  1.4593600000E+00  1.6897000000E-02
+  3.4848000000E-02 -6.0080000000E-02 -5.5527200000E-01 -4.7704000000E-01
+ -1.8582900000E-01 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -5.5188568000E+01 -9.5676857000E+01 -2.1583770800E+02  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00 -1.8910000000E-03 -1.5310000000E-03
+ -1.0140000000E-03  2.5000000000E+00  2.6063700000E+01  1.0000000000E+00
+ -1.5000000000E+00 -9.6031810000E+00 -9.4541850000E+00 -9.4376810000E+00
+ -4.8295719000E+01  9.0759200000E-01 -4.3759670000E+00 -8.9979920000E+00
+ -8.8819580000E+00  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00 -1.0000000000E+00 -2.6063700000E+01
+ -1.0000000000E+00  1.0000000000E+00 -1.4593600000E+00  1.0000000000E+00
+  1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  5.6953098000E+01
+  7.0583200000E-01  1.0000000000E+00 -6.4913700000E-01 -3.3000000000E-05
+  5.3807500000E-01  1.0000000000E+00  8.2471000000E-02 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.1583840000E+01  7.0583200000E-01  1.0000000000E+00
+ -1.0215420000E+00 -4.1000000000E-05 -3.6302500000E-01  1.0000000000E+00
+  6.9523000000E-02 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  3.2096300000E-01
+  7.0583200000E-01  1.0000000000E+00 -2.0490070000E+00 -8.4000000000E-05
+  9.1353600000E-01  1.0000000000E+00  8.3976400000E-01  5.5083500000E-01
+  4.4892200000E-01  2.4300000000E-04  4.0528300000E-01 -6.7277000000E-02
+ -1.5700600000E-01 -9.7476000000E-02 -2.5060100000E-01 -2.8026200000E-01
+  1.0084900000E-01 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+ -2.8640000000E-03 -2.3160000000E-03 -1.5310000000E-03  2.5000000000E+00
+  1.1587800000E+01  1.0000000000E+00 -1.1012240000E+00 -1.3644320000E+00
+ -1.2188210000E+00 -1.2108590000E+00 -3.4621052000E+01  6.0313600000E-01
+ -5.9963800000E-01 -1.4033920000E+00 -1.3703860000E+00  1.0000000000E+00
+  1.0000000000E+00 -1.0000000000E+00 -1.1587800000E+01 -1.0000000000E+00
+  1.0000000000E+00 -4.0528300000E-01  1.0000000000E+00  1.0000000000E+00
+ -8.5938400000E-01 -7.7333900000E-01 -7.9517400000E-01 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00 -1.6236590000E+00 -3.3000000000E-05
+  3.5720350000E+00  1.0000000000E+00  9.2435300000E-01 -1.1718210000E+00
+ -1.2773520000E+00 -1.2505080000E+00 -1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00 -2.4602890000E+00 -4.1000000000E-05 -2.1785330000E+00
+  1.0000000000E+00  6.5098400000E-01 -2.3280470000E+00 -2.4161550000E+00
+ -2.5121660000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+ -4.7536200000E+00 -8.5000000000E-05  6.1671400000E+00  1.0000000000E+00
+  3.3966910000E+00  4.3737000000E-02  5.7396500000E-01  1.5834900000E-01
+  1.8781300000E-01 -4.4344000000E-02 -5.8193800000E-01 -1.6054900000E-01
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -6.2680901000E+01 -1.2388999900E+02 -4.6435549900E+02  1.0000000000E+00
+ -5.1647000000E-02 -3.2417600000E-01  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00 -1.8781300000E-01  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  9.7738750000E+00  7.7605000000E-01  7.2528310000E+00
+  7.8041000000E-01 -7.8683100000E-01  1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  6.0698200000E-01  7.7605000000E-01 -2.3895080000E+00
+  6.8494000000E-01 -7.8683100000E-01  1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.1890000000E-03  7.7605000000E-01  1.1558830000E+01
+  2.2026440000E+00 -7.8683100000E-01 -1.7051500000E-01 -4.3429600000E-01
+ -2.6674200000E-01 -2.6093020000E+00  1.9564500000E-01  4.9830200000E-01
+  3.0605400000E-01  4.2239600000E-01  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+ -1.8910000000E-03 -1.5310000000E-03 -1.0140000000E-03  2.5000000000E+00
+  1.6672409000E+01  1.0000000000E+00 -1.5000000000E+00 -1.0000000000E+00
+ -4.6212100000E-01 -1.2349600000E-01 -1.0000000000E+00 -1.6672409000E+01
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00
+  2.6093020000E+00 -4.2239600000E-01  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00 -5.8697600000E-01 -5.0651600000E-01 -5.1399200000E-01
+ -1.0366850000E+00 -3.3000000000E-05 -8.7155300000E-01 -1.0000000000E+00
+  1.0000000000E+00  2.6399800000E+00  5.5742100000E-01  1.0000000000E+00
+ -8.0016400000E-01 -8.3640900000E-01 -8.0810300000E-01 -1.6376950000E+00
+ -4.1000000000E-05 -8.7155300000E-01 -1.0000000000E+00  1.0000000000E+00
+ -1.7736780000E+00  4.0754200000E-01  1.0000000000E+00 -1.5893890000E+00
+ -1.5818110000E+00 -1.6231180000E+00 -3.2056860000E+00 -8.4000000000E-05
+ -8.7155300000E-01 -1.0000000000E+00  1.0000000000E+00  4.4676090000E+00
+  2.2475290000E+00 -1.0000000000E+00 -1.0000000000E+00 -4.0421600000E-01
+ -1.8187800000E-01 -1.5634600000E-01 -1.5457000000E-01 -1.5217800000E-01
+ -9.1906000000E-02 -7.8710000000E-03 -1.0000000000E+00 -1.0000000000E+00
+ -1.8091710000E+00 -3.1896550000E+00 -3.3490190000E+00 -3.3586440000E+00
+ -3.3085850000E+00 -1.9678700000E+00 -1.1333600000E-01 -1.0000000000E+00
+ -1.0000000000E+00 -2.4566020000E+00 -4.1011280000E+00 -4.2908920000E+00
+ -4.3026030000E+00 -4.2541470000E+00 -2.9523890000E+00 -1.1573650000E+00
+ -8.1220000000E-03 -1.6897000000E-02 -4.5390000000E-03 -2.1710000000E-03
+ -1.8740000000E-03 -1.8530000000E-03 -1.8250000000E-03 -1.1070000000E-03
+ -1.0500000000E-04 -1.6750000000E-02 -3.4848000000E-02 -4.1897000000E-02
+ -7.8507000000E-02 -8.2794000000E-02 -8.3055000000E-02 -8.1826000000E-02
+ -4.8866000000E-02 -3.1320000000E-03 -2.8878000000E-02 -6.0080000000E-02
+ -9.8082000000E-02 -1.7402800000E-01 -1.8288500000E-01 -1.8343700000E-01
+ -1.8139100000E-01 -1.2639700000E-01 -5.5137000000E-02 -1.0000000000E+00
+ -1.0000000000E+00 -7.6362300000E-01 -5.4132100000E-01 -5.2907500000E-01
+ -5.2832600000E-01 -5.2965300000E-01 -5.9901100000E-01 -5.7467700000E-01
+ -1.0000000000E+00 -1.0000000000E+00 -1.4679790000E+00 -1.2898060000E+00
+ -1.2799920000E+00 -1.2793850000E+00 -1.2801740000E+00 -1.3601430000E+00
+ -7.1491900000E-01 -1.0000000000E+00 -1.0000000000E+00 -4.3710000000E-03
+ -3.9540000000E-03 -3.9320000000E-03 -3.9480000000E-03 -4.7490000000E-03
+ -7.2455000000E-02 -1.6023640000E+00 -1.1229300000E-01 -6.7277000000E-02
+ -5.4601000000E-02 -3.8877000000E-02 -3.8009000000E-02 -3.7959000000E-02
+ -3.8209000000E-02 -4.8086000000E-02 -5.8179000000E-02 -2.6206300000E-01
+ -1.5700600000E-01 -2.4496100000E-01 -2.1618100000E-01 -2.1459700000E-01
+ -2.1451900000E-01 -2.1552300000E-01 -2.5481000000E-01 -1.6890700000E-01
+ -1.6270000000E-01 -9.7476000000E-02 -4.5300000000E-04 -4.1100000000E-04
+ -4.0900000000E-04 -4.1100000000E-04 -4.9600000000E-04 -8.4270000000E-03
+ -2.3503500000E-01 -1.0000000000E+00 -1.0000000000E+00 -6.9703000000E-02
+ -1.9243000000E-02 -1.5838000000E-02 -1.5618000000E-02 -1.5583000000E-02
+ -1.4719000000E-02 -5.7600000000E-03 -1.0000000000E+00 -1.0000000000E+00
+ -7.4171400000E-01 -8.0234900000E-01 -8.0658500000E-01 -8.0682900000E-01
+ -8.0550300000E-01 -7.4927000000E-01 -1.9719700000E-01 -1.0000000000E+00
+ -1.0000000000E+00 -5.1276000000E-01 -5.2522500000E-01 -5.2614100000E-01
+ -5.2622400000E-01 -5.2730300000E-01 -5.7231900000E-01 -1.0252420000E+00
+ -4.6575900000E-01 -9.6900300000E-01 -4.4885000000E-02 -1.3170000000E-02
+ -1.0887000000E-02 -1.0739000000E-02 -1.0717000000E-02 -1.0163000000E-02
+ -4.4260000000E-03 -5.7440200000E-01 -1.1950330000E+00 -5.8903400000E-01
+ -6.7721700000E-01 -6.8380200000E-01 -6.8420500000E-01 -6.8315600000E-01
+ -6.3804400000E-01 -1.8686200000E-01 -2.2922800000E-01 -4.7690500000E-01
+ -1.6250700000E-01 -1.7691400000E-01 -1.7800600000E-01 -1.7808600000E-01
+ -1.7847000000E-01 -1.9449300000E-01 -3.8770300000E-01 -1.0000000000E+00
+ -1.0000000000E+00 -3.4272800000E-01 -2.9113800000E-01 -2.8769400000E-01
+ -2.8748900000E-01 -2.8823200000E-01 -3.0269900000E-01 -1.7507900000E-01
+ -1.0000000000E+00 -1.0000000000E+00 -1.0623340000E+00 -1.1185060000E+00
+ -1.1222530000E+00 -1.1225120000E+00 -1.1232850000E+00 -1.1082340000E+00
+ -3.5118600000E-01 -1.0000000000E+00 -1.0000000000E+00 -2.4000000000E-03
+ -2.6020000000E-03 -2.6160000000E-03 -2.6280000000E-03 -3.1620000000E-03
+ -4.4794000000E-02 -5.9723100000E-01 -2.0182530000E+00 -1.2091660000E+00
+ -4.4044900000E-01 -3.7580300000E-01 -3.7146400000E-01 -3.7124000000E-01
+ -3.7371100000E-01 -4.3672900000E-01 -3.1856300000E-01 -2.5626880000E+00
+ -1.5353450000E+00 -1.7335130000E+00 -1.8332450000E+00 -1.8399150000E+00
+ -1.8405410000E+00 -1.8492860000E+00 -2.0302660000E+00 -8.1137000000E-01
+ -9.2554300000E-01 -5.5450700000E-01 -1.4140000000E-03 -1.5400000000E-03
+ -1.5490000000E-03 -1.5560000000E-03 -1.8800000000E-03 -2.9637000000E-02
+ -4.9833900000E-01 -1.4338920000E+00 -2.1577040000E+00 -1.5239710000E+00
+ -1.5307080000E+00 -1.5311480000E+00 -1.5313160000E+00 -1.5375330000E+00
+ -1.7109280000E+00 -9.4320600000E-01 -1.4193260000E+00 -1.0024600000E+00
+ -1.0068910000E+00 -1.0071810000E+00 -1.0072910000E+00 -1.0113810000E+00
+ -1.1254390000E+00 -5.9645300000E-01 -8.9753500000E-01 -6.3392300000E-01
+ -6.3672500000E-01 -6.3690800000E-01 -6.3697800000E-01 -6.3956400000E-01
+ -7.1169100000E-01 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00  5.5083500000E-01
+ -1.0000000000E+00  1.6474950000E+00  7.3959700000E-01 -1.0000000000E+00
+  8.4135162400E+02  2.0404500000E-01 -1.0000000000E+00  1.0000000000E+00
+  1.9564500000E-01 -1.0000000000E+00  1.0000000000E+00  4.9830200000E-01
+ -1.0000000000E+00  3.1156220000E+00  9.5354800000E-01  6.6224922000E+01
+ -1.0000000000E+00 -3.3000000000E-05  1.1506230200E+02 -1.0000000000E+00
+ -4.1000000000E-05  2.3733869900E+02 -1.0000000000E+00 -8.5000000000E-05
+  1.3324499500E+02  2.5000000000E+00  3.3000000000E-05  2.3226390100E+02
+  2.5000000000E+00  4.1000000000E-05  4.8018209800E+02  2.5000000000E+00
+  8.5000000000E-05 -4.7337900000E-01  1.0000000000E+00 -2.1168800000E-01
+ -5.7343200000E-01  1.0000000000E+00 -3.1667100000E-01 -6.0900000000E-04
+  1.0000000000E+00 -4.5750039060E+03  1.0075620000E+00 -5.5083500000E-01
+ -3.6814160160E+03  1.0043240000E+00 -4.4892200000E-01 -1.7878179930E+03
+  1.0020870000E+00 -2.4300000000E-04 -5.2605600000E-01 -4.2598200000E-01
+  1.0000000000E+00 -4.7048800000E-01 -5.6500000000E-04 -4.3801000000E-01
+  1.0000000000E+00 -5.0500000000E-04 -5.8600000000E-04 -5.6138100000E-01
+  1.0000000000E+00 -6.4700000000E-04 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00  1.0000000000E+00 -1.0000000000E+00  6.1444000000E-02
+  2.0481000000E-02 -1.0000000000E+00  4.1240600590E+03  4.1240600590E+03
+  4.1240600590E+03  1.0000000000E+00 -3.1622000000E+05 -2.0034240234E+04
+ -1.0000000000E+00 -2.6256569820E+03  2.2212899800E+02  1.8737270000E+01
+  9.4488200000E-01  1.4943669430E+03 -1.0207800000E+00 -9.9186000000E-01
+ -1.7922340000E+01 -1.7922340000E+01 -1.7922340000E+01  8.6282900000E-01
+  1.0497190000E+00 -7.3415000000E-01  8.1400000000E-03 -2.2212899800E+02
+  8.1400000000E-03 -2.2212899800E+02 -1.8080990000E+00 -1.0913280000E+00
+ -1.6293970000E+00 -1.4448530000E+00  1.0000000000E+00  4.7364000000E-02
+ -2.7898000000E-02  4.5390000000E-03  7.5792400000E+00  2.5264130000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.0266460000E+00 -1.0000000000E+00
+  1.0737240000E+00 -1.0000000000E+00  1.2081470000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  9.9149727000E+01 -1.0000000000E+00
+ -3.3000000000E-05  1.7263960300E+02 -1.0000000000E+00 -4.1000000000E-05
+  3.5663980100E+02 -1.0000000000E+00 -8.5000000000E-05  2.0000079300E+02
+  2.5000000000E+00  3.3000000000E-05  3.4900329600E+02  2.5000000000E+00
+  4.1000000000E-05  7.2206781000E+02  2.5000000000E+00  8.5000000000E-05
+ -1.1483900000E-01  1.0000000000E+00 -1.1646000000E-02 -4.1678400000E-01
+  1.0000000000E+00 -1.7006200000E-01 -4.9676100000E-01  1.0000000000E+00
+ -2.4368900000E-01 -5.2768618160E+03  1.0050250000E+00 -1.9564500000E-01
+ -4.2415908200E+03  1.0028740000E+00 -4.9830200000E-01 -2.0582939450E+03
+  1.0013870000E+00 -3.0605400000E-01 -3.9872300000E-01 -9.9097000000E-02
+  1.0000000000E+00 -8.0870000000E-02 -4.8643800000E-01 -1.0056000000E-01
+  1.0000000000E+00 -9.8660000000E-02 -4.8411900000E-01 -4.0267900000E-01
+  1.0000000000E+00 -3.9507300000E-01 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00  1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+  3.2976230470E+03  3.2976230470E+03  3.2976230470E+03  1.0000000000E+00
+ -3.1622000000E+05 -1.8966660156E+04 -1.0000000000E+00  2.2669870000E+01
+  9.5486000000E-01  2.2487060550E+03 -1.0206550000E+00 -9.9229500000E-01
+ -2.1898569000E+01 -2.1898569000E+01 -2.1898569000E+01  8.9001000000E-01
+  1.0392050000E+00  7.7050000000E-03 -1.4613620000E+02  7.7050000000E-03
+ -6.5890500000E-01 -1.1064970000E+00 -1.0009090000E+00  1.0000000000E+00
+  6.8960000000E-03 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00
+ -1.0000000000E+00  1.0226760000E+00 -1.0000000000E+00  1.0914180000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00 -1.9969600000E-01
+ -7.8596200000E-01 -6.4100000000E-04  4.0690400000E-01  2.0247000000E-01
+  7.9688000000E-01  6.5000000000E-04 -2.1665440000E+00 -1.0000000000E+00
+ -3.0001500000E-01 -4.0746100000E-01 -1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00  4.0690400000E-01 -2.1665440000E+00  1.0000000000E+00
+  1.0000000000E+00 -9.8629900000E-01 -1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  3.5018580000E+00  1.2418840000E+00 -9.8629900000E-01
+ -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00 -2.1495590000E+00
+  9.3602400000E-01 -9.8629900000E-01 -1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  6.0259860000E+00  4.0868380000E+00  1.1955000000E-02
+  6.1475000000E-01  1.6059600000E-01  5.9918100000E-01 -1.1950000000E-02
+ -6.1446100000E-01 -1.6052000000E-01 -1.0000000000E+00  1.0000000000E+00
+ -9.3351000000E-02 -3.4681800000E-01 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00  1.0000000000E+00 -5.9918100000E-01  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.3333420000E+01  7.8730100000E-01
+  1.0000000000E+00  1.2120260000E+01  7.7025100000E-01 -7.8693100000E-01
+  1.0205510000E+00  7.8730100000E-01  1.0000000000E+00 -3.9843990000E+00
+  6.8134200000E-01 -7.8693100000E-01  3.1870000000E-03  7.8730100000E-01
+  1.0000000000E+00  1.9252159000E+01  2.2369070000E+00 -7.8693100000E-01
+ -1.7008100000E-01 -8.2969200000E-01 -6.9700000000E-04  2.5673630000E+00
+  1.7000100000E-01  8.2930200000E-01  6.9700000000E-04 -4.2847870000E+00
+ -1.0000000000E+00 -2.5546900000E-01 -4.1224600000E-01 -1.0000000000E+00
+ -1.0000000000E+00  1.0000000000E+00  2.5673630000E+00 -4.2847870000E+00
+  1.0000000000E+00  1.0000000000E+00 -1.0004710000E+00 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  2.9555290000E+00  1.2544140000E+00
+ -1.0004710000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+ -1.8159690000E+00  9.4521200000E-01 -1.0004710000E+00 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  5.0849970000E+00  4.1364790000E+00
+  2.0247000000E-01 -1.0000000000E+00  7.9688000000E-01 -1.0000000000E+00
+  2.0398200000E-01 -1.0000000000E+00  9.8180000000E-03  6.1664200000E-01
+  9.5579400000E-01 -9.8180000000E-03 -6.1661000000E-01 -1.6051500000E-01
+ -1.0000000000E+00  1.0000000000E+00 -9.8218000000E-02 -3.4856400000E-01
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00
+ -9.5579400000E-01  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.3626710000E+01  7.8698300000E-01  1.0000000000E+00  1.2682330000E+01
+  7.6942900000E-01 -7.8694200000E-01  1.0583890000E+00  7.8698300000E-01
+  1.0000000000E+00 -4.1684890000E+00  6.8102800000E-01 -7.8694200000E-01
+  3.4160000000E-03  7.8698300000E-01  1.0000000000E+00  2.0139959000E+01
+  2.2394150000E+00 -7.8694200000E-01 -1.6787000000E-01 -8.3148300000E-01
+ -7.0000000000E-04  4.3289930000E+00  1.6786100000E-01  8.3143900000E-01
+  7.0000000000E-04 -4.5292090000E+00 -1.0000000000E+00 -2.5301500000E-01
+ -4.1256200000E-01 -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00
+  4.3289930000E+00 -4.5292090000E+00  1.0000000000E+00  1.0000000000E+00
+ -1.0000520000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  2.9254360000E+00  1.2552490000E+00 -1.0000520000E+00 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00 -1.7975930000E+00  9.4582400000E-01
+ -1.0000520000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  5.0331660000E+00  4.1397830000E+00  1.7000100000E-01 -1.0000000000E+00
+  8.2930200000E-01 -1.0000000000E+00  2.0397300000E-01 -1.0000000000E+00
+  9.6800000000E-03  6.1671100000E-01  1.6051800000E-01  9.9729800000E-01
+ -9.6800000000E-03 -6.1673100000E-01 -1.6052300000E-01 -1.0000000000E+00
+  1.0000000000E+00 -9.8529000000E-02 -3.4867100000E-01 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00 -9.9729800000E-01
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  1.3646010000E+01
+  7.8690900000E-01  1.0000000000E+00  1.2716190000E+01  7.6935900000E-01
+ -7.8693500000E-01  1.0608970000E+00  7.8690900000E-01  1.0000000000E+00
+ -4.1795750000E+00  6.8099400000E-01 -7.8693500000E-01  3.4310000000E-03
+  7.8690900000E-01  1.0000000000E+00  2.0193411000E+01  2.2395320000E+00
+ -7.8693500000E-01 -1.6772300000E-01 -8.3154100000E-01 -7.0300000000E-04
+  4.5319110000E+00  1.6772900000E-01  8.3156800000E-01  7.0300000000E-04
+ -4.5441880000E+00 -1.0000000000E+00 -2.5288900000E-01 -4.1262900000E-01
+ -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00  4.5319110000E+00
+ -4.5441880000E+00  1.0000000000E+00  1.0000000000E+00 -9.9996700000E-01
+ -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  2.9235700000E+00
+  1.2552940000E+00 -9.9996700000E-01 -1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00 -1.7964900000E+00  9.4585200000E-01 -9.9996700000E-01
+ -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  5.0299350000E+00
+  4.1401400000E+00  1.6786100000E-01 -1.0000000000E+00  8.3143900000E-01
+ -1.0000000000E+00  2.0398600000E-01 -1.0000000000E+00  9.6470000000E-03
+  6.1499700000E-01  1.6066400000E-01  1.0122750000E+00 -9.6630000000E-03
+ -6.1599900000E-01 -1.6092600000E-01 -1.0000000000E+00  1.0000000000E+00
+ -9.7740000000E-02 -3.4838900000E-01 -1.0000000000E+00 -1.0000000000E+00
+ -1.0000000000E+00  1.0000000000E+00 -1.0122750000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.3653370000E+01  7.8530800000E-01
+  1.0000000000E+00  1.2536040000E+01  7.6861400000E-01 -7.8658800000E-01
+  1.0618540000E+00  7.8530800000E-01  1.0000000000E+00 -4.1203450000E+00
+  6.8034500000E-01 -7.8658800000E-01  3.4370000000E-03  7.8530800000E-01
+  1.0000000000E+00  1.9907200000E+01  2.2374860000E+00 -7.8658800000E-01
+ -1.6769600000E-01 -8.2983400000E-01 -8.4400000000E-04  4.5319130000E+00
+  1.6796900000E-01  8.3118600000E-01  8.4500000000E-04 -4.4769570000E+00
+ -1.0000000000E+00 -2.5422800000E-01 -4.1467900000E-01 -1.0000000000E+00
+ -1.0000000000E+00  1.0000000000E+00  4.5319120000E+00 -4.4769570000E+00
+  1.0000000000E+00  1.0000000000E+00 -9.9837300000E-01 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  2.9258000000E+00  1.2548710000E+00
+ -9.9837300000E-01 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+ -1.7994740000E+00  9.4529600000E-01 -9.9837300000E-01 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  5.0329780000E+00  4.1465320000E+00
+  1.6772900000E-01 -1.0000000000E+00  8.3156800000E-01 -1.0000000000E+00
+  2.0458700000E-01 -1.0000000000E+00  8.9580000000E-03  5.6239200000E-01
+  1.7143200000E-01  1.5349870000E+00 -9.3680000000E-03 -5.8815700000E-01
+ -1.7928500000E-01 -1.0000000000E+00  1.0000000000E+00 -7.6425000000E-02
+ -3.3630700000E-01 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00 -1.5349870000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.3927700000E+01  7.4278100000E-01  1.0000000000E+00
+  7.7124140000E+00  7.3754000000E-01 -7.7681100000E-01  1.0977920000E+00
+  7.4278100000E-01  1.0000000000E+00 -2.5345340000E+00  6.5320800000E-01
+ -7.7681100000E-01  3.6610000000E-03  7.4278100000E-01  1.0000000000E+00
+  1.2244490000E+01  2.1513860000E+00 -7.7681100000E-01 -1.6726400000E-01
+ -7.7757800000E-01 -1.1351000000E-02  3.9419710000E+00  1.7492700000E-01
+  8.1320200000E-01  1.1871000000E-02 -2.5680820000E+00 -1.0000000000E+00
+ -3.1132300000E-01 -4.5572700000E-01 -1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00  3.9419710000E+00 -2.5680820000E+00  1.0000000000E+00
+  1.0000000000E+00 -9.5619400000E-01 -1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  3.1494540000E+00  1.2129980000E+00 -9.5619400000E-01
+ -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00 -1.9859190000E+00
+  9.0706800000E-01 -9.5619400000E-01 -1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  5.3936870000E+00  4.2274630000E+00  1.6796900000E-01
+ -1.0000000000E+00  8.3118600000E-01 -1.0000000000E+00  2.3079700000E-01
+ -1.0000000000E+00  4.9560000000E-03  2.0925100000E-01  4.3415700000E-01
+  6.1773840000E+00 -5.6860000000E-03 -2.4009000000E-01 -4.9814100000E-01
+ -1.0000000000E+00  1.0000000000E+00 -5.1900000000E-02 -2.2819900000E-01
+ -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00
+ -6.1773840000E+00  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  2.2884661000E+01  6.4836400000E-01  1.0000000000E+00  1.0434500000E+00
+  4.2175900000E-01 -7.4391800000E-01  2.5197030000E+00  6.4836400000E-01
+  1.0000000000E+00 -3.4146600000E-01  3.7989000000E-01 -7.4391800000E-01
+  1.7728000000E-02  6.4836400000E-01  1.0000000000E+00  1.6460520000E+00
+  1.3054760000E+00 -7.4391800000E-01  1.7492700000E-01 -1.0000000000E+00
+  8.1320200000E-01 -1.0000000000E+00  6.6961900000E-01 -1.0000000000E+00
+  6.3180580000E+00  1.0081210000E+00  2.1016520000E+00  9.8325000000E-01
+  1.0216340000E+01  9.7112200000E-01  4.7715330000E+00  1.0168970000E+00
+  1.5445530000E+00  9.6515200000E-01  7.4032580000E+00  9.3992000000E-01
+  2.7676480100E+02  8.8770700000E-01  1.9219039900E+02  1.2620630000E+00
+  4.6529739400E+02  8.3730000000E-01  4.0263531500E+02  9.3272300000E-01
+  2.4395159900E+02  1.1570060000E+00  6.9442572000E+02  9.0252400000E-01
+  2.1471690000E+00  7.3310400000E-01  1.8303540000E+00  7.7070700000E-01
+  5.4194960000E+00  9.1068000000E-01  1.5934600000E+00  4.4472800000E-01
+  1.5193590000E+00  5.2296000000E-01  5.9272710000E+00  8.1417100000E-01
+  8.6013230000E+00  5.8171500000E-01  6.1974850000E+00  5.3220700000E-01
+  3.7670330000E+01  1.1683300000E+00  1.0955350000E+01  7.4939900000E-01
+  8.2864270000E+00  7.1973800000E-01  3.5092930000E+01  1.1008490000E+00
+  4.3389200000E-01  2.2797130000E+00  1.1375700000E-01  6.0698200000E-01
+  4.0354700000E-01  8.0050000000E-03  1.1577040000E+00  4.0422280000E+00
+  4.1932600000E-01  2.4496110000E+00  1.0246500000E-01  3.6475200000E-01
+  1.7257449300E+02  1.4917610000E+01  1.6158450300E+02  1.2093800000E+01
+  1.4531449900E+02  5.7400960000E+00  4.5020000000E-03  9.5263600000E-01
+ -1.0000000000E+00  9.4488200000E-01  1.9882059000E+01  1.5998700000E+01
+  7.7694990000E+00  1.0081400000E+00  9.8828979000E+01  1.4755580100E+02
+  1.3084370400E+02  1.0000000000E+00  1.8011980000E+00  1.0000000000E+00
+  2.1962210000E+00  1.0000000000E+00  2.0607380000E+00  1.9882059000E+01
+  9.7404500000E-01  1.5998700000E+01  9.3133800000E-01  7.7694990000E+00
+  8.2771400000E-01 -1.0000000000E+00 -1.0000000000E+00  5.6358000000E-02
+  5.6358000000E-02  5.6358000000E-02 -1.0000000000E+00 -1.0000000000E+00
+  7.3959700000E-01  7.3959700000E-01  7.3959700000E-01 -1.0000000000E+00
+ -1.0000000000E+00  2.0404500000E-01  2.0404500000E-01  2.0404500000E-01
+  1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+ -1.9453890000E+01  1.0000000000E+00 -9.5304000000E-02 -2.2090309000E+01
+  1.0000000000E+00 -8.8198000000E-02 -4.9563591000E+01  1.0000000000E+00
+ -1.0700000000E-04  1.7973449700E+02 -2.5957400000E+00  1.0000000000E+00
+ -9.6217000000E-02 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+  9.6217000000E-02 -8.8940000000E-03  9.3082800000E-01  9.3082800000E-01
+  9.3082800000E-01 -1.1383520000E+00  9.5342000000E-02  8.1769800000E-01
+ -5.5083500000E-01  4.6135000000E-02  8.1769800000E-01 -4.4892200000E-01
+  3.7599000000E-02  6.8068650000E+00 -2.0190000000E-03  1.6900000000E-04
+ -6.0313600000E-01 -1.1914260000E+00 -2.0901000000E-01 -2.3236600000E-01
+ -1.5881990000E+00  1.0000000000E+00 -8.9607000000E-02 -1.7894780000E+00
+  1.0000000000E+00 -8.2283000000E-02 -4.0128040000E+00  1.0000000000E+00
+ -1.0000000000E-04  1.1868740000E+00 -8.7134300000E-01  9.9186000000E-01
+ -7.3415000000E-01 -1.0000000000E+00 -1.0000000000E+00 -1.0000000000E+00
+  8.9782500000E-01 -1.0242700000E-01  2.6330249000E+02  1.6710230000E+01
+  2.5231250000E+02  1.5091380000E+01  2.3604249600E+02  1.1440290000E+01
+  6.8430000000E-03  9.6227400000E-01 -1.0000000000E+00  9.5486000000E-01
+  3.5042122000E+01  2.8167191000E+01  1.3668540000E+01  1.0077050000E+00
+  8.5846764000E+01  1.4416209400E+02  1.3040539600E+02  1.0000000000E+00
+  1.6589050000E+00  1.0000000000E+00  2.1064970000E+00  1.0000000000E+00
+  2.0009090000E+00  3.5042122000E+01  1.0000000000E+00  2.8167191000E+01
+  9.7782700000E-01  1.3668540000E+01  9.1623900000E-01 -1.0000000000E+00
+ -1.0000000000E+00  3.4350000000E-03  3.4350000000E-03  3.4350000000E-03
+ -1.0000000000E+00 -1.0000000000E+00  4.3017000000E-02  4.3017000000E-02
+  4.3017000000E-02 -1.0000000000E+00 -1.0000000000E+00  9.5354800000E-01
+  9.5354800000E-01  9.5354800000E-01  1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00 -1.0000000000E+00  1.0000000000E+00 -1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00  1.0000000000E+00
+  1.0000000000E+00  1.0000000000E+00 -4.7613000000E-02  1.0000000000E+00
+ -2.3000000000E-05 -5.7464000000E-02  1.0000000000E+00 -3.5300000000E-04
+ -1.2956000000E-01  1.0000000000E+00 -1.7625000000E-02  2.7046249400E+02
+ -2.8000670000E+00  1.0000000000E+00 -1.6856930000E+00 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.6856930000E+00 -1.4266700000E-01
+  1.2149700000E-01  1.2149700000E-01  1.2149700000E-01 -1.1383520000E+00
+  2.1231000000E-02  6.0555800000E-01 -1.9490000000E-02  3.6300000000E-04
+  3.3579300000E-01 -1.3533800000E-01  2.5240000000E-03  1.0673100000E-01
+ -9.5354800000E-01  1.7784000000E-02 -9.0759200000E-01 -5.7118220000E+00
+ -9.3568400000E-01 -1.0346550000E+00 -4.3241000000E-02  1.0000000000E+00
+ -2.6000000000E-05 -5.2175000000E-02  1.0000000000E+00 -3.9200000000E-04
+ -1.1763100000E-01  1.0000000000E+00 -1.9600000000E-02  5.3140780000E+00
+ -1.0021840000E+00  3.4483700000E-01 -2.6478600000E-01 -1.0000000000E+00
+ -1.0000000000E+00 -1.0000000000E+00  1.7669710000E+00 -1.7474100000E-01
+  9.9149727000E+01 -1.0000000000E+00 -3.3000000000E-05  1.7263960300E+02
+ -1.0000000000E+00 -4.1000000000E-05  3.5663980100E+02 -1.0000000000E+00
+ -8.5000000000E-05  2.0000079300E+02  2.5000000000E+00  3.3000000000E-05
+  3.4900329600E+02  2.5000000000E+00  4.1000000000E-05  7.2206781000E+02
+  2.5000000000E+00  8.5000000000E-05  1.0000000000E+00 -1.0000000000E-06
+  1.0000000000E+00 -5.1100000000E-04  1.0000000000E+00 -9.5438900000E-01
+  1.0050250000E+00 -3.4350000000E-03  1.0028740000E+00 -4.3017000000E-02
+  1.0013870000E+00 -9.5354800000E-01  1.0000000000E+00 -4.9000000000E-05
+  1.0000000000E+00 -2.1780000000E-03  1.0000000000E+00 -4.2872000000E-02
+  1.0000000000E+00 -1.0000000000E+00  1.5000000000E+00  5.0000000000E-01
+  1.0000000000E+00 -3.1622000000E+05 -1.2132580078E+04 -1.0000000000E+00
+ -2.0451810547E+04  9.1527509770E+03  9.1463570000E+00  3.7730000000E-03
+  2.2487060550E+03 -1.2505300000E-01  6.7588000000E-02  6.5087120000E+01
+ -1.8859000000E-01 -9.1527509770E+03  7.5439400000E-01 -9.1527509770E+03
+ -6.9047832030E+03  1.0000000000E+00  1.8569300000E-01 -5.0000000000E-01
+  1.9200000000E-04  2.6684520000E+00  8.8948400000E-01  5.2397100000E-01
+  2.5902730000E+00  1.2090400000E-01  1.0000000000E+00  3.6607700000E-01
+  1.8323000000E-02  5.3070800000E-01  2.6120320000E+00  1.2143800000E-01
+  1.0000000000E+00  3.6327500000E-01  1.9399000000E-02  5.3114800000E-01
+  2.6134470000E+00  1.2147300000E-01  1.0000000000E+00  3.6309200000E-01
+  1.9470000000E-02  5.3131600000E-01  2.6139860000E+00  1.2148600000E-01
+  1.0000000000E+00  3.6302200000E-01  1.9498000000E-02  5.3753300000E-01
+  2.6338800000E+00  1.2198000000E-01  1.0000000000E+00  3.6043600000E-01
+  2.0539000000E-02  7.1092800000E-01  3.1304670000E+00  1.3573600000E-01
+  1.0000000000E+00  2.8830900000E-01  7.1490000000E-02
diff --git a/RBio/Test/bcsstk01.rb b/RBio/RBio/private/bcsstk01.rb
similarity index 100%
rename from RBio/Test/bcsstk01.rb
rename to RBio/RBio/private/bcsstk01.rb
diff --git a/RBio/Test/farm.rb b/RBio/RBio/private/farm.rb
similarity index 100%
rename from RBio/Test/farm.rb
rename to RBio/RBio/private/farm.rb
diff --git a/RBio/Test/lap_25.pse b/RBio/RBio/private/lap_25.pse
similarity index 100%
rename from RBio/Test/lap_25.pse
rename to RBio/RBio/private/lap_25.pse
diff --git a/RBio/Test/lap_25.rb b/RBio/RBio/private/lap_25.rb
similarity index 100%
rename from RBio/Test/lap_25.rb
rename to RBio/RBio/private/lap_25.rb
diff --git a/RBio/RBio/private/testRB1.m b/RBio/RBio/private/testRB1.m
new file mode 100644
index 0000000..2b0c49a
--- /dev/null
+++ b/RBio/RBio/private/testRB1.m
@@ -0,0 +1,77 @@
+function testRB1
+%testRB1: test the RBio toolbox.
+%
+% Example:
+%   testRB1
+%
+% See also UFget, RBread, RBreade, testRB2.
+
+% Copyright 2006, Timothy A. Davis
+
+files = {
+'bcsstk01.rb'
+'farm.rb'
+'lap_25.pse'
+'lap_25.rb'
+'west0479.rb'
+'west0479.rua' } ;
+
+mtypes = {
+'rsa',
+'ira',
+'psa',
+'psa',
+'rua'
+'rua' } ;
+
+for k = 1:length(files)
+    file = files {k} ;
+    % fprintf ('%s : ', file) ;
+    if (file (end) == 'e')
+	[A Z] = RBreade (file) ;
+    else
+	[A Z] = RBread (file) ;
+    end
+    mtype = RBtype (A) ;
+    if (any (mtype ~= mtypes {k}))
+        fprintf ('test failed: %s %s type differs\n', mtype, mtypes {k}) ;
+    end
+    RBwrite ('temp.rb', A, Z) ;
+    [A2 Z2] = RBread ('temp.rb') ;
+    if (~isequal (A, A2))
+	fprintf ('test failed: %s (A differs)\n', file) ;
+	error ('!') ;
+    end
+    if (~isequal (Z, Z2))
+	fprintf ('test failed: %s (Z differs)\n', file) ;
+	error ('!') ;
+    end
+end
+
+load west0479
+C = west0479 ;
+RBwrite ('temp.rb', C, 'WEST0479 chemical eng. problem', 'west0479') ;
+A = RBread ('temp.rb') ;
+if (~isequal (A, C))
+    error ('test failed: west0479 (MATLAB version)') ;
+end
+if (any (mtype ~= 'rua'))
+    fprintf ('test failed: %s %s type differs\n', mtype, 'rua') ;
+end
+
+if (~strcmp (RBtype (A), 'rua'))
+    error ('test failed: RBtype(A)\n') ;
+end
+if (~strcmp (RBtype (spones (A)), 'pua'))
+    error ('test failed: RBtype(spones(A))\n') ;
+end
+if (~strcmp (RBtype (2*spones (A)), 'iua'))
+    error ('test failed: RBtype(2*spones(A))\n') ;
+end
+C = A+A' ;
+if (~strcmp (RBtype (C), 'rsa'))
+    error ('test failed: RBtype(A+A'')\n') ;
+end
+
+delete ('temp.rb') ;
+fprintf ('RB test 1: passed\n') ;
diff --git a/RBio/RBio/private/testRB2.m b/RBio/RBio/private/testRB2.m
new file mode 100644
index 0000000..cf41dfc
--- /dev/null
+++ b/RBio/RBio/private/testRB2.m
@@ -0,0 +1,76 @@
+function testRB2
+%testRB2: test the RBio toolbox.  UFget is required.
+% Note that UFget requires the Nov 25, 2006, revision of the UF_Index.mat file,
+% or later, to access all the Problems used by this test.
+%
+% Example:
+%   testRB2
+%
+% See also UFget, RBread, RBreade, testRB1.
+
+% Copyright 2006, Timothy A. Davis
+
+Problem = UFget ('Meszaros/farm') ;
+% disp (Problem) ;
+A = RBread ('farm.rb') ;
+if (~isequal (A, Problem.A))
+    error ('test failure: farm.rb') ;
+end
+% fprintf ('mtype: %s\n', RBtype (A)) ;
+mtype = RBtype (A) ;
+if (any (mtype ~= 'ira'))
+    error ('test failure: farm.rb') ;
+end
+
+Problem = UFget ('HB/bcsstk01') ;
+% disp (Problem) ;
+A = RBread ('bcsstk01.rb') ;
+if (~isequal (A, Problem.A))
+    error ('test failure: bcsstk01.rb') ;
+end
+% fprintf ('mtype: %s\n', RBtype (A)) ;
+mtype = RBtype (A) ;
+if (any (mtype ~= 'rsa'))
+    error ('test failure: bcsstk01.rb') ;
+end
+
+Problem = UFget ('HB/lap_25') ;
+% disp (Problem) ;
+A = RBread ('lap_25.rb') ;
+if (~isequal (A, Problem.A))
+    error ('test failure: lap_25.rb') ;
+end
+A = RBreade ('lap_25.pse') ;
+if (~isequal (A, Problem.A))
+    error ('test failure: lap_25.pse') ;
+end
+% fprintf ('mtype: %s\n', RBtype (A)) ;
+mtype = RBtype (A) ;
+if (any (mtype ~= 'psa'))
+    error ('test failure: bcsstk01.rb') ;
+end
+
+Problem = UFget ('HB/west0479') ;
+% disp (Problem) ;
+[A Z] = RBread ('west0479.rb') ;
+if (~isequal (A, Problem.A))
+    error ('test failure: west0479.rb') ;
+end
+if (~isequal (Z, Problem.Zeros))
+    error ('test failure: west0479.rb') ;
+end
+[A Z] = RBread ('west0479.rua') ;
+if (~isequal (A, Problem.A))
+    error ('test failure: west0479.rua') ;
+end
+if (~isequal (Z, Problem.Zeros))
+    error ('test failure: west0479.rua') ;
+end
+% fprintf ('mtype: %s\n', RBtype (A)) ;
+mtype = RBtype (A) ;
+if (any (mtype ~= 'rua'))
+    error ('test failure: west0479.rua') ;
+end
+
+fprintf ('RB test 2: passed\n') ;
+
diff --git a/RBio/RBio/private/testRB3.m b/RBio/RBio/private/testRB3.m
new file mode 100644
index 0000000..a340392
--- /dev/null
+++ b/RBio/RBio/private/testRB3.m
@@ -0,0 +1,64 @@
+function testRB3
+% Exhaustive test of RBio.  Requires UFget.  This is a very extensive test;
+% it tests all matrices in the UF collection, and runs until it runs out of
+% memory.
+
+index = UFget ;
+[ignore f] = sort (index.nnz) ;
+title = 'test file' ;
+key = 'key' ;
+
+for k = 1:length (f)
+
+    clear id Prob A Z A2 Z2 mtype title2 key2 mtype2 name m n
+
+    try
+        id = f (k) ;
+        Prob = UFget (id, index) ;
+        A = Prob.A ;
+        [m n] = size (A) ;
+        if (isfield (Prob, 'Z'))
+            Z = Prob.Zeros ;
+        else
+            Z = sparse (m,n) ;
+        end
+        name = Prob.name ;
+        clear Prob ;
+
+        % check the matrix type
+        [mtype2 mkind skind] = RBtype (A+Z) ;
+        mtype = index.RBtype (id,:) ;
+        fprintf ('%4d : %4d %s %s : %s\n', k, id, mtype, mtype2, name) ;
+        if (any (mtype ~= mtype2))
+            error ('mtype!') ;
+        end
+
+        % write the matrix out
+        mtype2 = RBwrite ('temp.rb', A, Z, title, key) ;
+        if (any (mtype ~= mtype2))
+            fprintf ('%s : %s\n', mtype, mtype2) ;
+            error ('mtype RBwrite!') ;
+        end
+
+        % read it back it
+        [A2 Z2 title2 key2 mtype2] = RBread ('temp.rb') ;
+        if (any (title ~= title2) || any (key ~= key2) || any (mtype ~= mtype2))
+            fprintf ('%s : %s\n', title, title2) ;
+            fprintf ('%s : %s\n', key, key2) ;
+            fprintf ('%s : %s\n', mtype, mtype2) ;
+            error ('RBread!') ;
+        end
+        if (nnz (A-A2) > 0)
+            error ('matrix A mismatch!') ;
+        end
+        if (nnz (Z-Z2) > 0)
+            error ('matrix Z mismatch!') ;
+        end
+
+    catch
+        disp (lasterr) ;
+        break
+    end
+end
+
+delete temp.rb
diff --git a/RBio/Test/west0479.rb b/RBio/RBio/private/west0479.rb
similarity index 100%
rename from RBio/Test/west0479.rb
rename to RBio/RBio/private/west0479.rb
diff --git a/RBio/Test/west0479.rua b/RBio/RBio/private/west0479.rua
similarity index 100%
rename from RBio/Test/west0479.rua
rename to RBio/RBio/private/west0479.rua
diff --git a/RBio/RBmake.m b/RBio/RBmake.m
deleted file mode 100644
index 65efa81..0000000
--- a/RBio/RBmake.m
+++ /dev/null
@@ -1,30 +0,0 @@
-%RBMAKE compile the RBio toolbox for use in MATLAB
-% Compiles the Fortran mexFunctions RBread, RBwrite, RBtype, and RBraw.
-%
-% Example:
-%
-%   RBmake
-%
-% See also RBread, RBwrite, RBtype, RBraw, RBinstall.
-%
-% Copyright 2007, Timothy A. Davis
-
-if (~isempty (strfind (computer, '64')))
-    fprintf ('Compiling 64-bit version of RBio.\n') ;
-    mex -O -output RBread RBread_mex_64.f RBread_64.f RBrread_64.f ...
-	RBcread_64.f RBcsplit_64.f
-    mex -O -output RBtype RBtype_mex_64.f RBwrite_64.f
-    mex -O -output RBwrite RBwrite_mex_64.f RBwrite_64.f
-    mex -O -output RBraw RBraw_mex_64.f RBread_64.f
-else
-    fprintf ('Compiling 32-bit version of RBio.\n') ;
-    mex -O -output RBread RBread_mex_32.f RBread_32.f RBrread_32.f ...
-	RBcread_32.f RBcsplit_32.f
-    mex -O -output RBtype RBtype_mex_32.f RBwrite_32.f
-    mex -O -output RBwrite RBwrite_mex_32.f RBwrite_32.f
-    mex -O -output RBraw RBraw_mex_32.f RBread_32.f
-end
-
-fprintf ('Note: Fortran compiler is required; this will fail otherwise...\n') ;
-
-fprintf ('RBio successfully compiled.\n') ;
diff --git a/RBio/RBraw.m b/RBio/RBraw.m
deleted file mode 100644
index 903b5e0..0000000
--- a/RBio/RBraw.m
+++ /dev/null
@@ -1,32 +0,0 @@
-function [mtype, Ap, Ai, Ax, title, key, nrow] = RBraw (filename)	    %#ok
-%RBRAW read the raw contents of a Rutherford/Boeing file
-%
-%   [mtype Ap Ai Ax title key nrow] = RBraw (filename)
-%
-%   mtype: Rutherford/Boeing matrix type (psa, rua, rsa, rse, ...)
-%   Ap: column pointers (1-based)
-%   Ai: row indices (1-based)
-%   Ax: numerical values (real, complex, or integer).  Empty for p*a matrices.
-%       A complex matrix is read in as a single double array Ax, where the kth
-%       entry has real value Ax(2*k-1) and imaginary value Ax(2*k).
-%   title: a string containing the title from the first line of the R/B file
-%   key: a string containing the 8-character key, from the 1st line of the file
-%   nrow: number of rows in the matrix
-%
-% This function works for both assembled and unassembled (finite-element)
-% matrices.  It is also useful for checking the contents of a Rutherford/Boeing
-% file in detail, in case the file has invalid column pointers, unsorted
-% columns, duplicate entries, entries in the upper triangular part of the file 
-% for a symmetric matrix, etc.
-%
-% Example:
-%
-%   load west0479
-%   RBwrite ('mywest', west0479, [ ], 'My west0479 file', 'west0479') ;
-%   [mtype Ap Ai Ax title key nrow] = RBraw ('mywest') ;
-%
-% See also RBfix, RBread, RBreade.
-
-% Copyright 2007, Timothy A. Davis
-
-error ('RBraw mexFunction not found') ;
diff --git a/RBio/RBraw_mex_32.f b/RBio/RBraw_mex_32.f
deleted file mode 100644
index 54f59a8..0000000
--- a/RBio/RBraw_mex_32.f
+++ /dev/null
@@ -1,214 +0,0 @@
-c=======================================================================
-c=== RBio/RBraw_mex_32 =================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBraw mexFunction: read the raw contents of a Rutherford/Boeing file
-c-----------------------------------------------------------------------
-c
-c   [mtype Ap Ai Ax title key nrow] = RBraw (filename)
-c
-c   mtype: Rutherford/Boeing matrix type (psa, rua, rsa, rse, ...)
-c   Ap: column pointers (1-based)
-c   Ai: row indices (1-based)
-c   Ax: numerical values (real, complex, or integer).  Empty for p*a
-c	matrices.  A complex matrix is read in as a single double array
-c	Ax, where the kth entry has real value Ax(2*k-1) and imaginary
-c	value Ax(2*k).
-c   title: a string containing the title from the first line of the file
-c   key: a string containing the 8-char key, from 1st line of the file
-c   nrow: number of rows in the matrix
-c
-c This function works for both assembled and unassembled (finite-
-c element) matrices.  It is also useful for checking the contents of a
-c Rutherford/Boeing file in detail, in case the file has invalid column
-c pointers, unsorted columns, duplicate entries, entries in the upper
-c triangular part of the file for a symmetric matrix, etc.
-c
-c Example:
-c
-c   load west0479
-c   RBwrite ('mywest', west0479, [ ], 'My west0479 file', 'west0479') ;
-c   [mtype Ap Ai Ax title key nrow] = RBraw ('mywest') ;
-c
-c See also RBfix, RBread, RBreade.
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*4
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxIsChar, mxClassIDFromClassName
-
-	integer*4
-     $	    mxGetString, mxCreateString, mxCreateDoubleScalar,
-     $	    mxCreateNumericMatrix, mxGetData
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*4
-     $	    nrow, ncol, nnz, mkind, info, skind, k, nelnz, one, zero
-	integer*4 iclass, cmplex, wcmplex
-	character title*72, key*8, mtype*3, ptrfmt*16, indfmt*16,
-     $	    valfmt*20, filename*1024
-	double precision x
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .ne. 1 .or. nargout .gt. 7 .or.
-     $	    mxIsChar (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt
-     $	  ('Usage: [mtype Ap Ai Ax title key nrow] = RBraw (filename)')
-	endif
-
-c	----------------------------------------------------------------
-c	get filename and open file
-c	----------------------------------------------------------------
-
-	if (mxGetString (pargin (1), filename, 1024) .ne. 0) then
-	    call mexErrMsgTxt ('filename too long')
-	endif
-	close (unit = 7)
-	open (unit = 7, file = filename, status = 'OLD', err = 998)
-
-c	----------------------------------------------------------------
-c	read the header and determine the matrix type
-c	----------------------------------------------------------------
-
-	call RBheader (title, key, mtype, nrow, ncol, nnz,
-     $	    ptrfmt, indfmt, valfmt,
-     $	    mkind, cmplex, skind, nelnz, info)
-	call RBerr (info)
-
-c	----------------------------------------------------------------
-c	return the matrix type to MATLAB
-c	----------------------------------------------------------------
-
-	pargout (1) = mxCreateString (mtype)
-
-c	----------------------------------------------------------------
-c	read in the column pointers
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int32')
-	one = 1
-	zero = 0
-	wcmplex = 0
-	if (nargout .ge. 2) then
-	    pargout (2) = mxCreateNumericMatrix 
-     $		(ncol+1, one, iclass, wcmplex)
-	    call RBiread (ptrfmt, ncol+1,
-     $		%val(mxGetData (pargout (2))), info)
-	    call RBerr (info)
-	endif
-
-c	----------------------------------------------------------------
-c	read in the row indices
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 3) then
-	    pargout (3) = mxCreateNumericMatrix
-     $		(nnz, one, iclass, wcmplex)
-	    call RBiread (indfmt, nnz,
-     $		%val(mxGetData (pargout (3))), info)
-	    if (info .lt. 0) then
-		info = -93
-	    endif
-	    call RBerr (info)
-	endif
-
-c	----------------------------------------------------------------
-c	read in the numerical values
-c	----------------------------------------------------------------
-
-	if (nelnz .eq. 0) then
-	    k = nnz
-	else
-	    k = nelnz
-	endif
-
-	if (nargout .ge. 4) then
-
-	    if (mkind .eq. 1) then
-
-c		pattern-only: create an empty numerical array
-		pargout (4) = mxCreateNumericMatrix (zero, zero,
-     $		    mxClassIDFromClassName ('double'), wcmplex)
-
-	    elseif (mkind .eq. 3) then
-
-c		read in the numerical values (integer)
-		pargout (4) = mxCreateNumericMatrix
-     $		    (k, one, iclass, wcmplex)
-		call RBiread (valfmt, k,
-     $		    %val(mxGetData (pargout (4))), info)
-		call RBerr (info)
-
-	    else
-
-c		read in the numerical values (real or complex)
-		if (cmplex .eq. 1) then
-		    k = 2*k
-		endif
-		pargout (4) = mxCreateNumericMatrix (k, one,
-     $		    mxClassIDFromClassName ('double'), wcmplex)
-		call RBxread (valfmt, k,
-     $		    %val(mxGetData (pargout (4))), info)
-		call RBerr (info)
-	    endif
-
-	endif
-
-c	----------------------------------------------------------------
-c	return the title
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 5) then
-	    pargout (5) = mxCreateString (title)
-	endif
-
-c	----------------------------------------------------------------
-c	return the key
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 6) then
-	    pargout (6) = mxCreateString (key)
-	endif
-
-c	----------------------------------------------------------------
-c	return the number of rows
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 7) then
-	    x = nrow
-	    pargout (7) = mxCreateDoubleScalar (x)
-	endif
-
-c	----------------------------------------------------------------
-c	close file
-c	----------------------------------------------------------------
-
-	close (unit = 7)
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-998	call mexErrMsgTxt ('error opening file')
-	end
-
diff --git a/RBio/RBraw_mex_64.f b/RBio/RBraw_mex_64.f
deleted file mode 100644
index cd99274..0000000
--- a/RBio/RBraw_mex_64.f
+++ /dev/null
@@ -1,214 +0,0 @@
-c=======================================================================
-c=== RBio/RBraw_mex_64 =================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBraw mexFunction: read the raw contents of a Rutherford/Boeing file
-c-----------------------------------------------------------------------
-c
-c   [mtype Ap Ai Ax title key nrow] = RBraw (filename)
-c
-c   mtype: Rutherford/Boeing matrix type (psa, rua, rsa, rse, ...)
-c   Ap: column pointers (1-based)
-c   Ai: row indices (1-based)
-c   Ax: numerical values (real, complex, or integer).  Empty for p*a
-c	matrices.  A complex matrix is read in as a single double array
-c	Ax, where the kth entry has real value Ax(2*k-1) and imaginary
-c	value Ax(2*k).
-c   title: a string containing the title from the first line of the file
-c   key: a string containing the 8-char key, from 1st line of the file
-c   nrow: number of rows in the matrix
-c
-c This function works for both assembled and unassembled (finite-
-c element) matrices.  It is also useful for checking the contents of a
-c Rutherford/Boeing file in detail, in case the file has invalid column
-c pointers, unsorted columns, duplicate entries, entries in the upper
-c triangular part of the file for a symmetric matrix, etc.
-c
-c Example:
-c
-c   load west0479
-c   RBwrite ('mywest', west0479, [ ], 'My west0479 file', 'west0479') ;
-c   [mtype Ap Ai Ax title key nrow] = RBraw ('mywest') ;
-c
-c See also RBfix, RBread, RBreade.
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*8
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxIsChar, mxClassIDFromClassName
-
-	integer*8
-     $	    mxGetString, mxCreateString, mxCreateDoubleScalar,
-     $	    mxCreateNumericMatrix, mxGetData
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*8
-     $	    nrow, ncol, nnz, mkind, info, skind, k, nelnz, one, zero
-	integer*4 iclass, cmplex, wcmplex
-	character title*72, key*8, mtype*3, ptrfmt*16, indfmt*16,
-     $	    valfmt*20, filename*1024
-	double precision x
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .ne. 1 .or. nargout .gt. 7 .or.
-     $	    mxIsChar (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt
-     $	  ('Usage: [mtype Ap Ai Ax title key nrow] = RBraw (filename)')
-	endif
-
-c	----------------------------------------------------------------
-c	get filename and open file
-c	----------------------------------------------------------------
-
-	if (mxGetString (pargin (1), filename, 1024) .ne. 0) then
-	    call mexErrMsgTxt ('filename too long')
-	endif
-	close (unit = 7)
-	open (unit = 7, file = filename, status = 'OLD', err = 998)
-
-c	----------------------------------------------------------------
-c	read the header and determine the matrix type
-c	----------------------------------------------------------------
-
-	call RBheader (title, key, mtype, nrow, ncol, nnz,
-     $	    ptrfmt, indfmt, valfmt,
-     $	    mkind, cmplex, skind, nelnz, info)
-	call RBerr (info)
-
-c	----------------------------------------------------------------
-c	return the matrix type to MATLAB
-c	----------------------------------------------------------------
-
-	pargout (1) = mxCreateString (mtype)
-
-c	----------------------------------------------------------------
-c	read in the column pointers
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int64')
-	one = 1
-	zero = 0
-	wcmplex = 0
-	if (nargout .ge. 2) then
-	    pargout (2) = mxCreateNumericMatrix 
-     $		(ncol+1, one, iclass, wcmplex)
-	    call RBiread (ptrfmt, ncol+1,
-     $		%val(mxGetData (pargout (2))), info)
-	    call RBerr (info)
-	endif
-
-c	----------------------------------------------------------------
-c	read in the row indices
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 3) then
-	    pargout (3) = mxCreateNumericMatrix
-     $		(nnz, one, iclass, wcmplex)
-	    call RBiread (indfmt, nnz,
-     $		%val(mxGetData (pargout (3))), info)
-	    if (info .lt. 0) then
-		info = -93
-	    endif
-	    call RBerr (info)
-	endif
-
-c	----------------------------------------------------------------
-c	read in the numerical values
-c	----------------------------------------------------------------
-
-	if (nelnz .eq. 0) then
-	    k = nnz
-	else
-	    k = nelnz
-	endif
-
-	if (nargout .ge. 4) then
-
-	    if (mkind .eq. 1) then
-
-c		pattern-only: create an empty numerical array
-		pargout (4) = mxCreateNumericMatrix (zero, zero,
-     $		    mxClassIDFromClassName ('double'), wcmplex)
-
-	    elseif (mkind .eq. 3) then
-
-c		read in the numerical values (integer)
-		pargout (4) = mxCreateNumericMatrix
-     $		    (k, one, iclass, wcmplex)
-		call RBiread (valfmt, k,
-     $		    %val(mxGetData (pargout (4))), info)
-		call RBerr (info)
-
-	    else
-
-c		read in the numerical values (real or complex)
-		if (cmplex .eq. 1) then
-		    k = 2*k
-		endif
-		pargout (4) = mxCreateNumericMatrix (k, one,
-     $		    mxClassIDFromClassName ('double'), wcmplex)
-		call RBxread (valfmt, k,
-     $		    %val(mxGetData (pargout (4))), info)
-		call RBerr (info)
-	    endif
-
-	endif
-
-c	----------------------------------------------------------------
-c	return the title
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 5) then
-	    pargout (5) = mxCreateString (title)
-	endif
-
-c	----------------------------------------------------------------
-c	return the key
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 6) then
-	    pargout (6) = mxCreateString (key)
-	endif
-
-c	----------------------------------------------------------------
-c	return the number of rows
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 7) then
-	    x = nrow
-	    pargout (7) = mxCreateDoubleScalar (x)
-	endif
-
-c	----------------------------------------------------------------
-c	close file
-c	----------------------------------------------------------------
-
-	close (unit = 7)
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-998	call mexErrMsgTxt ('error opening file')
-	end
-
diff --git a/RBio/RBread.m b/RBio/RBread.m
deleted file mode 100644
index b0a1485..0000000
--- a/RBio/RBread.m
+++ /dev/null
@@ -1,27 +0,0 @@
-function [A, Z, title, key, mtype] = RBread (filename)			    %#ok
-%RBREAD read a sparse matrix from a Rutherford/Boeing file
-% Usage:
-%   [A Z title key mtype] = RBread (filename)
-%
-%   A: a sparse matrix (no explicit zero entries)
-%   Z: binary pattern of explicit zero entries in Rutherford/Boeing file.
-%       This always has the same size as A, and is always sparse.
-%   title: the 72-character title string in the file
-%   key: the 8-character matrix name in the file
-%   mtype: the Rutherford/Boeing type (see RBwrite for a description).
-%       This function does not support finite-element matrices (use RBreade
-%       instead).
-%
-% Example:
-%   load west0479
-%   C = west0479 ;
-%   RBwrite ('mywest', C, 'WEST0479 chemical eng. problem', 'west0479')
-%   A = RBread ('mywest') ;
-%   norm (A-C,1)
-%
-% See also RBwrite, RBreade, RBtype.
-
-% Copyright 2007, Timothy A. Davis
-
-error ('RBread mexFunction not found') ;
-
diff --git a/RBio/RBread_32.f b/RBio/RBread_32.f
deleted file mode 100644
index 140653d..0000000
--- a/RBio/RBread_32.f
+++ /dev/null
@@ -1,464 +0,0 @@
-c=======================================================================
-c=== RBio/RBread_32 ====================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBheader:  read Rutherford/Boeing header lines
-c-----------------------------------------------------------------------
-c
-c Rutherford/Boeing file type is a 3-character string:
-c
-c   (1) R: real, C: complex, P: pattern only, I: integer
-c	mkind: R: 0, P: 1, C: 2, I: 3
-c
-c   (2) S: symmetric, U: unsymmetric, H: Hermitian, Z: skew symmetric,
-c	R: rectangular
-c	skind: R: -1, U: 0, S: 1, H: 2, Z: 3
-c	
-c   (3) A: assembled, E: element form
-c	nelnz = 0 for A, number of elements for E
-c
-c	pattern matrices are given numerical values of 1 (except PZA).
-c	PZA matrices have +1 in the lower triangular part and -1 in
-c	the upper triangular part.
-c
-c   The matrix is nrow-by-ncol with nnz entries.
-c   For symmetric matrices, Ai and Ax are of size 2*nnz (the upper
-c	triangular part is constructed).  To skip this construction,
-c	pass skind = 0 to RBpattern.
-c-----------------------------------------------------------------------
-
-	subroutine RBheader (title, key, mtype, nrow, ncol, nnz,
-     $	    ptrfmt, indfmt, valfmt, mkind, cmplex, skind, nelnz, info)
-
-	integer*4
-     $	    nrow, ncol, nnz, totcrd, ptrcrd, nelnz,
-     $	    indcrd, valcrd, mkind, skind, info
-	integer*4 cmplex
-	character title*72, key*8, mtype*3, ptrfmt*16, indfmt*16,
-     $	    valfmt*20, rhstyp*3
-	logical fem
-
-c	----------------------------------------------------------------
-c	read header lines 1-4
-c	----------------------------------------------------------------
-
-        read (7, 10, err = 91, end = 91)
-     $          title, key,
-     $          totcrd, ptrcrd, indcrd, valcrd,
-     $          mtype, nrow, ncol, nnz, nelnz,
-     $          ptrfmt, indfmt, valfmt
-10      format (a72, a8 / 4i14 / a3, 11x, 4i14 / 2a16, a20)
-
-	if (nrow .lt. 0 .or. ncol .lt. 0 .or. nnz .lt. 0) then
-c	    error: invalid matrix dimensions
-	    info = -6
-	    return
-	endif
-
-c	----------------------------------------------------------------
-c	skip the Harwell/Boeing header line 5, if present
-c	----------------------------------------------------------------
-
-	read (7, 20, err = 91, end = 91) rhstyp
-20	format (a3)
-	if ((rhstyp (1:1) .eq. 'F' .or. rhstyp (1:1) .eq. 'f' .or.
-     $	    rhstyp (1:1) .eq. 'M' .or. rhstyp (1:1) .eq. 'm')) then
-c	    This is the 5th line Harwell/Boeing format.  Ignore it.
-	    call mexErrMsgTxt ('Harwell/Boeing RHS ignored')
-	else
-c	    Backspace one record, since we just read in one row of
-c	    the column pointers.
-	    backspace (unit = 7)
-	endif
-
-c	----------------------------------------------------------------
-c	determine if real, pattern, integer, or complex
-c	----------------------------------------------------------------
-
-	if (mtype (1:1) .eq. 'R' .or. mtype (1:1) .eq. 'r') then
-
-c	    real
-	    mkind = 0
-	    cmplex = 0
-
-	elseif (mtype (1:1) .eq. 'P' .or. mtype (1:1) .eq. 'p') then
-
-c	    pattern
-	    mkind = 1
-	    cmplex = 0
-
-	elseif (mtype (1:1) .eq. 'C' .or. mtype (1:1) .eq. 'c') then
-
-c	    complex
-	    mkind = 2
-	    cmplex = 1
-
-	elseif (mtype (1:1) .eq. 'I' .or. mtype (1:1) .eq. 'i') then
-
-c	    integer
-	    mkind = 3
-	    cmplex = 0
-
-	else
-
-c	    error: invalid matrix type
-	    info = -5
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	determine if the upper part must be constructed
-c	----------------------------------------------------------------
-
-	if (mtype (2:2) .eq. 'R' .or. mtype (2:2) .eq. 'r') then
-
-c	    rectangular: RRA, PRA, IRA, and CRA matrices
-	    skind = -1
-
-	elseif (mtype (2:2) .eq. 'U' .or. mtype (2:2) .eq. 'u') then
-
-c	    unsymmetric: RUA, PUA, IUA, and CUA matrices
-	    skind = 0
-
-	elseif (mtype (2:2) .eq. 'S' .or. mtype (2:2) .eq. 's') then
-
-c	    symmetric: RSA, PSA, ISA, and CSA matrices
-	    skind = 1
-
-	elseif (mtype (2:2) .eq. 'H' .or. mtype (2:2) .eq. 'h') then
-
-c	    Hermitian: CHA (PHA, IHA, and RHA are valid, but atypical)
-	    skind = 2
-
-	elseif (mtype (2:2) .eq. 'Z' .or. mtype (2:2) .eq. 'z') then
-
-c	    skew symmetric: RZA, PZA, IZA, and CZA
-	    skind = 3
-
-	else
-
-c	    error: invalid matrix type
-	    info = -5
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	assembled matrices or elemental matrices (**A, **E)
-c	----------------------------------------------------------------
-
-	if (mtype (3:3) .eq. 'A' .or. mtype (3:3) .eq. 'a') then
-
-c	    assembled - ignore nelnz
-	    fem = .false.
-	    nelnz = 0
-
-	elseif (mtype (3:3) .eq. 'E' .or. mtype (3:3) .eq. 'e') then
-
-c	    finite-element
-	    fem = .true.
-	    continue
-
-	else
-
-c	    error: invalid matrix type
-	    info = -5
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	assembled matrices must be square if skind is not R
-c	----------------------------------------------------------------
-
-	if (.not. fem .and. skind .ne. -1 .and. nrow .ne. ncol) then
-
-c	    error: invalid matrix dimensions
-	    info = -6
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-
-c	----------------------------------------------------------------
-c	error reading file
-c	----------------------------------------------------------------
-
-91	info = -91
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBpattern: read the column pointers and row indices
-c-----------------------------------------------------------------------
-
-c   w and cp are both of size ncol+1 (undefined on input).
-c
-c   The matrix is contained in Ap, Ai, and Ax on output (undefined on
-c   input).  It has nzeros explicit zero entries.  cp (1..ncol+1) are
-c   the column pointers for the matrix Z that will contain all the
-c   explicit zero entries.  Ax is not read in (see RBrread and
-c   RBcread).
-c
-c   info is returned as:
-c	0	ok
-c	-1	invalid column pointers
-c	-2	row index out of range
-c	-3	duplicate entry
-c	-4	entries in upper triangular part of symmetric matrix
-c	-5	invalid matrix type
-c	-6	invalid dimensions
-c	-7	matrix contains unsorted columns
-c	-91	error reading file (header) 
-c	-92	error reading file (column pointers) 
-c	-93	error reading file (row indices) 
-c	-94	error reading file (numerical values: A, or sparse b)
-c-----------------------------------------------------------------------
-
-	subroutine RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $	    Ap, Ai, w, cp, info, nw)
-	integer*4
-     $	    nrow, ncol, nnz, skind, info, Ap (ncol+1), Ai (nnz),
-     $	    nw, w (nw), cp (ncol+1)
-	character ptrfmt*16, indfmt*16
-	integer*4
-     $	    j, i, p, ilast
-
-c	----------------------------------------------------------------
-c	read the pointers and check them
-c	----------------------------------------------------------------
-
-	call RBiread (ptrfmt, ncol+1, Ap, info)
-	if (info .lt. 0) then
-	    return
-	endif
-
-	if (Ap (1) .ne. 1 .or. Ap (ncol+1) - 1 .ne. nnz) then
-c	    error: invalid matrix (col pointers)
-	    info = -1
-	    return
-	endif
-	do 10 j = 2, ncol+1
-	    if (Ap (j) .lt. Ap (j-1)) then
-c		error: invalid matrix (col pointers)
-		info = -1
-		return
-	    endif
-10	continue
-
-c	----------------------------------------------------------------
-c	read the row indices and check them
-c	----------------------------------------------------------------
-
-	call RBiread (indfmt, nnz, Ai, info)
-	if (info .lt. 0) then
-	    info = -93
-	    return
-	endif
-
-	do 20 i = 1, nrow
-	    w (i) = -1
-20	continue
-
-	do 40 j = 1, ncol
-	    ilast = 0
-	    do 30 p = Ap (j), Ap (j+1) - 1
-		i = Ai (p)
-		if (i .lt. 1 .or. i .gt. nrow) then
-c		    error: row index out of range
-c		    print *, 'column j, rows!', j, i, nrow
-		    info = -2
-		    return
-		endif
-		if (w (i) .eq. j) then
-c		    error: duplicate entry in matrix
-c		    print *, 'column j, duplicate!', j, i
-		    info = -3
-		    return
-		endif
-		w (i) = j
-		if (i .lt. ilast) then
-c		    error: matrix contains unsorted columns
-c		    print *, 'column j, unsorted!', j, i, ilast
-		    info = -7
-		    return
-		endif
-		ilast = i
-30	    continue
-40	continue
-
-c	----------------------------------------------------------------
-c	construct new column pointers for symmetric matrices
-c	----------------------------------------------------------------
-
-	if (skind .gt. 0) then
-
-c	    ------------------------------------------------------------
-c	    compute the column counts for the whole matrix
-c	    ------------------------------------------------------------
-
-	    do 50 j = 1, ncol+1
-		w (j) = 0
-50	    continue
-
-	    do 70 j = 1, ncol
-		do 60 p = Ap (j), Ap (j+1)-1
-		    i = Ai (p)
-		    if (i .eq. j) then
-c			diagonal entry, only appears as A(j,j)
-			w (j) = w (j) + 1
-		    elseif (i .gt. j) then
-c			entry in lower triangular part, A(i,j) will be
-c			duplicated as A(j,i), so count it in both cols
-			w (i) = w (i) + 1
-			w (j) = w (j) + 1
-		    else
-c			error: entry in upper triangular part
-			info = -4
-			return
-		    endif
-60		continue
-70	    continue
-
-c	    ------------------------------------------------------------
-c	    compute the new column pointers
-c	    ------------------------------------------------------------
-
-	    cp (1) = 1
-	    do 80 j = 2, ncol+1
-		cp (j) = cp (j-1) + w (j-1)
-80	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBmangle: convert 1-based matrix into 0-based
-c-----------------------------------------------------------------------
-
-	subroutine RBmangle (ncol, Ap, Ai, nnz)
-	integer*4
-     $	    ncol, nnz, p, j, Ap (ncol+1), Ai (*)
-	nnz = Ap (ncol + 1) - 1
-
-	do 10 j = 1, ncol+1
-	    Ap (j) = Ap (j) - 1
-10	continue
-	do 20 p = 1, nnz
-	    Ai (p) = Ai (p) - 1
-20	continue
-
-	return
-	end
-
-c-----------------------------------------------------------------------
-
-	subroutine RBiread (ifmt, n, I, info)
-	integer*4
-     $	    n, I (n), info, p
-	character ifmt*16
-	info = 0
-	read (7, ifmt, err = 92, end = 92) (I (p), p = 1, n)
-	return
-92	info = -92
-	return
-	end
-
-c-----------------------------------------------------------------------
-
-	subroutine RBxread (xfmt, n, X, info)
-	integer*4
-     $	    mkind, n, info, p
-	double precision X (n)
-	character xfmt*20
-	info = 0
-	read (7, xfmt, err = 94, end = 94) (X (p), p = 1, n)
-	return
-94	info = -94
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBerr: report an error to MATLAB
-c-----------------------------------------------------------------------
-c
-c   info = 0 is OK, info < 0 is a fatal error, info > 0 is a warning
-
-	subroutine RBerr (info)
-	integer*4
-     $	    info
-
-	if (info .eq. -7) then
-	    call mexErrMsgTxt ('matrix contains unsorted columns')
-
-	elseif (info .eq. -1) then
-	    call mexErrMsgTxt ('invalid matrix (col pointers)')
-
-	elseif (info .eq. -2) then
-	    call mexErrMsgTxt ('row index out of range)')
-
-	elseif (info .eq. -3) then
-	    call mexErrMsgTxt ('duplicate entry in matrix')
-
-	elseif (info .eq. -4) then
-	    call mexErrMsgTxt ('invalid symmetric matrix')
-
-	elseif (info .eq. -5) then
-	    call mexErrMsgTxt ('invalid matrix type')
-
-	elseif (info .eq. -6) then
-	    call mexErrMsgTxt ('invalid matrix dimensions')
-
-	elseif (info .eq. -911) then
-	    call mexErrMsgTxt ('finite-element form not supported')
-
-	elseif (info .eq. -91) then
-	    call mexErrMsgTxt ('error reading file (header)')
-
-	elseif (info .eq. -92) then
-	    call mexErrMsgTxt ('error reading file (column pointers)')
-
-	elseif (info .eq. -93) then
-	    call mexErrMsgTxt ('error reading file (row indices)')
-
-	elseif (info .eq. -94) then
-	    call mexErrMsgTxt ('error reading file (numerical values)')
-
-	elseif (info .eq. -95) then
-	    call mexErrMsgTxt ('error reading file (right-hand-side)')
-
-	elseif (info .lt. 0) then
-	    print *, info
-	    call mexErrMsgTxt ('error (unspecified)')
-
-	elseif (info .gt. 0) then
-	    print *, info
-	    call mexErrMsgTxt ('warning (unspecified)')
-
-	endif
-	return
-	end
-
diff --git a/RBio/RBread_64.f b/RBio/RBread_64.f
deleted file mode 100644
index 8ca9378..0000000
--- a/RBio/RBread_64.f
+++ /dev/null
@@ -1,464 +0,0 @@
-c=======================================================================
-c=== RBio/RBread_64 ====================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBheader:  read Rutherford/Boeing header lines
-c-----------------------------------------------------------------------
-c
-c Rutherford/Boeing file type is a 3-character string:
-c
-c   (1) R: real, C: complex, P: pattern only, I: integer
-c	mkind: R: 0, P: 1, C: 2, I: 3
-c
-c   (2) S: symmetric, U: unsymmetric, H: Hermitian, Z: skew symmetric,
-c	R: rectangular
-c	skind: R: -1, U: 0, S: 1, H: 2, Z: 3
-c	
-c   (3) A: assembled, E: element form
-c	nelnz = 0 for A, number of elements for E
-c
-c	pattern matrices are given numerical values of 1 (except PZA).
-c	PZA matrices have +1 in the lower triangular part and -1 in
-c	the upper triangular part.
-c
-c   The matrix is nrow-by-ncol with nnz entries.
-c   For symmetric matrices, Ai and Ax are of size 2*nnz (the upper
-c	triangular part is constructed).  To skip this construction,
-c	pass skind = 0 to RBpattern.
-c-----------------------------------------------------------------------
-
-	subroutine RBheader (title, key, mtype, nrow, ncol, nnz,
-     $	    ptrfmt, indfmt, valfmt, mkind, cmplex, skind, nelnz, info)
-
-	integer*8
-     $	    nrow, ncol, nnz, totcrd, ptrcrd, nelnz,
-     $	    indcrd, valcrd, mkind, skind, info
-	integer*4 cmplex
-	character title*72, key*8, mtype*3, ptrfmt*16, indfmt*16,
-     $	    valfmt*20, rhstyp*3
-	logical fem
-
-c	----------------------------------------------------------------
-c	read header lines 1-4
-c	----------------------------------------------------------------
-
-        read (7, 10, err = 91, end = 91)
-     $          title, key,
-     $          totcrd, ptrcrd, indcrd, valcrd,
-     $          mtype, nrow, ncol, nnz, nelnz,
-     $          ptrfmt, indfmt, valfmt
-10      format (a72, a8 / 4i14 / a3, 11x, 4i14 / 2a16, a20)
-
-	if (nrow .lt. 0 .or. ncol .lt. 0 .or. nnz .lt. 0) then
-c	    error: invalid matrix dimensions
-	    info = -6
-	    return
-	endif
-
-c	----------------------------------------------------------------
-c	skip the Harwell/Boeing header line 5, if present
-c	----------------------------------------------------------------
-
-	read (7, 20, err = 91, end = 91) rhstyp
-20	format (a3)
-	if ((rhstyp (1:1) .eq. 'F' .or. rhstyp (1:1) .eq. 'f' .or.
-     $	    rhstyp (1:1) .eq. 'M' .or. rhstyp (1:1) .eq. 'm')) then
-c	    This is the 5th line Harwell/Boeing format.  Ignore it.
-	    call mexErrMsgTxt ('Harwell/Boeing RHS ignored')
-	else
-c	    Backspace one record, since we just read in one row of
-c	    the column pointers.
-	    backspace (unit = 7)
-	endif
-
-c	----------------------------------------------------------------
-c	determine if real, pattern, integer, or complex
-c	----------------------------------------------------------------
-
-	if (mtype (1:1) .eq. 'R' .or. mtype (1:1) .eq. 'r') then
-
-c	    real
-	    mkind = 0
-	    cmplex = 0
-
-	elseif (mtype (1:1) .eq. 'P' .or. mtype (1:1) .eq. 'p') then
-
-c	    pattern
-	    mkind = 1
-	    cmplex = 0
-
-	elseif (mtype (1:1) .eq. 'C' .or. mtype (1:1) .eq. 'c') then
-
-c	    complex
-	    mkind = 2
-	    cmplex = 1
-
-	elseif (mtype (1:1) .eq. 'I' .or. mtype (1:1) .eq. 'i') then
-
-c	    integer
-	    mkind = 3
-	    cmplex = 0
-
-	else
-
-c	    error: invalid matrix type
-	    info = -5
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	determine if the upper part must be constructed
-c	----------------------------------------------------------------
-
-	if (mtype (2:2) .eq. 'R' .or. mtype (2:2) .eq. 'r') then
-
-c	    rectangular: RRA, PRA, IRA, and CRA matrices
-	    skind = -1
-
-	elseif (mtype (2:2) .eq. 'U' .or. mtype (2:2) .eq. 'u') then
-
-c	    unsymmetric: RUA, PUA, IUA, and CUA matrices
-	    skind = 0
-
-	elseif (mtype (2:2) .eq. 'S' .or. mtype (2:2) .eq. 's') then
-
-c	    symmetric: RSA, PSA, ISA, and CSA matrices
-	    skind = 1
-
-	elseif (mtype (2:2) .eq. 'H' .or. mtype (2:2) .eq. 'h') then
-
-c	    Hermitian: CHA (PHA, IHA, and RHA are valid, but atypical)
-	    skind = 2
-
-	elseif (mtype (2:2) .eq. 'Z' .or. mtype (2:2) .eq. 'z') then
-
-c	    skew symmetric: RZA, PZA, IZA, and CZA
-	    skind = 3
-
-	else
-
-c	    error: invalid matrix type
-	    info = -5
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	assembled matrices or elemental matrices (**A, **E)
-c	----------------------------------------------------------------
-
-	if (mtype (3:3) .eq. 'A' .or. mtype (3:3) .eq. 'a') then
-
-c	    assembled - ignore nelnz
-	    fem = .false.
-	    nelnz = 0
-
-	elseif (mtype (3:3) .eq. 'E' .or. mtype (3:3) .eq. 'e') then
-
-c	    finite-element
-	    fem = .true.
-	    continue
-
-	else
-
-c	    error: invalid matrix type
-	    info = -5
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	assembled matrices must be square if skind is not R
-c	----------------------------------------------------------------
-
-	if (.not. fem .and. skind .ne. -1 .and. nrow .ne. ncol) then
-
-c	    error: invalid matrix dimensions
-	    info = -6
-	    return
-
-	endif
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-
-c	----------------------------------------------------------------
-c	error reading file
-c	----------------------------------------------------------------
-
-91	info = -91
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBpattern: read the column pointers and row indices
-c-----------------------------------------------------------------------
-
-c   w and cp are both of size ncol+1 (undefined on input).
-c
-c   The matrix is contained in Ap, Ai, and Ax on output (undefined on
-c   input).  It has nzeros explicit zero entries.  cp (1..ncol+1) are
-c   the column pointers for the matrix Z that will contain all the
-c   explicit zero entries.  Ax is not read in (see RBrread and
-c   RBcread).
-c
-c   info is returned as:
-c	0	ok
-c	-1	invalid column pointers
-c	-2	row index out of range
-c	-3	duplicate entry
-c	-4	entries in upper triangular part of symmetric matrix
-c	-5	invalid matrix type
-c	-6	invalid dimensions
-c	-7	matrix contains unsorted columns
-c	-91	error reading file (header) 
-c	-92	error reading file (column pointers) 
-c	-93	error reading file (row indices) 
-c	-94	error reading file (numerical values: A, or sparse b)
-c-----------------------------------------------------------------------
-
-	subroutine RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $	    Ap, Ai, w, cp, info, nw)
-	integer*8
-     $	    nrow, ncol, nnz, skind, info, Ap (ncol+1), Ai (nnz),
-     $	    nw, w (nw), cp (ncol+1)
-	character ptrfmt*16, indfmt*16
-	integer*8
-     $	    j, i, p, ilast
-
-c	----------------------------------------------------------------
-c	read the pointers and check them
-c	----------------------------------------------------------------
-
-	call RBiread (ptrfmt, ncol+1, Ap, info)
-	if (info .lt. 0) then
-	    return
-	endif
-
-	if (Ap (1) .ne. 1 .or. Ap (ncol+1) - 1 .ne. nnz) then
-c	    error: invalid matrix (col pointers)
-	    info = -1
-	    return
-	endif
-	do 10 j = 2, ncol+1
-	    if (Ap (j) .lt. Ap (j-1)) then
-c		error: invalid matrix (col pointers)
-		info = -1
-		return
-	    endif
-10	continue
-
-c	----------------------------------------------------------------
-c	read the row indices and check them
-c	----------------------------------------------------------------
-
-	call RBiread (indfmt, nnz, Ai, info)
-	if (info .lt. 0) then
-	    info = -93
-	    return
-	endif
-
-	do 20 i = 1, nrow
-	    w (i) = -1
-20	continue
-
-	do 40 j = 1, ncol
-	    ilast = 0
-	    do 30 p = Ap (j), Ap (j+1) - 1
-		i = Ai (p)
-		if (i .lt. 1 .or. i .gt. nrow) then
-c		    error: row index out of range
-c		    print *, 'column j, rows!', j, i, nrow
-		    info = -2
-		    return
-		endif
-		if (w (i) .eq. j) then
-c		    error: duplicate entry in matrix
-c		    print *, 'column j, duplicate!', j, i
-		    info = -3
-		    return
-		endif
-		w (i) = j
-		if (i .lt. ilast) then
-c		    error: matrix contains unsorted columns
-c		    print *, 'column j, unsorted!', j, i, ilast
-		    info = -7
-		    return
-		endif
-		ilast = i
-30	    continue
-40	continue
-
-c	----------------------------------------------------------------
-c	construct new column pointers for symmetric matrices
-c	----------------------------------------------------------------
-
-	if (skind .gt. 0) then
-
-c	    ------------------------------------------------------------
-c	    compute the column counts for the whole matrix
-c	    ------------------------------------------------------------
-
-	    do 50 j = 1, ncol+1
-		w (j) = 0
-50	    continue
-
-	    do 70 j = 1, ncol
-		do 60 p = Ap (j), Ap (j+1)-1
-		    i = Ai (p)
-		    if (i .eq. j) then
-c			diagonal entry, only appears as A(j,j)
-			w (j) = w (j) + 1
-		    elseif (i .gt. j) then
-c			entry in lower triangular part, A(i,j) will be
-c			duplicated as A(j,i), so count it in both cols
-			w (i) = w (i) + 1
-			w (j) = w (j) + 1
-		    else
-c			error: entry in upper triangular part
-			info = -4
-			return
-		    endif
-60		continue
-70	    continue
-
-c	    ------------------------------------------------------------
-c	    compute the new column pointers
-c	    ------------------------------------------------------------
-
-	    cp (1) = 1
-	    do 80 j = 2, ncol+1
-		cp (j) = cp (j-1) + w (j-1)
-80	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBmangle: convert 1-based matrix into 0-based
-c-----------------------------------------------------------------------
-
-	subroutine RBmangle (ncol, Ap, Ai, nnz)
-	integer*8
-     $	    ncol, nnz, p, j, Ap (ncol+1), Ai (*)
-	nnz = Ap (ncol + 1) - 1
-
-	do 10 j = 1, ncol+1
-	    Ap (j) = Ap (j) - 1
-10	continue
-	do 20 p = 1, nnz
-	    Ai (p) = Ai (p) - 1
-20	continue
-
-	return
-	end
-
-c-----------------------------------------------------------------------
-
-	subroutine RBiread (ifmt, n, I, info)
-	integer*8
-     $	    n, I (n), info, p
-	character ifmt*16
-	info = 0
-	read (7, ifmt, err = 92, end = 92) (I (p), p = 1, n)
-	return
-92	info = -92
-	return
-	end
-
-c-----------------------------------------------------------------------
-
-	subroutine RBxread (xfmt, n, X, info)
-	integer*8
-     $	    mkind, n, info, p
-	double precision X (n)
-	character xfmt*20
-	info = 0
-	read (7, xfmt, err = 94, end = 94) (X (p), p = 1, n)
-	return
-94	info = -94
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBerr: report an error to MATLAB
-c-----------------------------------------------------------------------
-c
-c   info = 0 is OK, info < 0 is a fatal error, info > 0 is a warning
-
-	subroutine RBerr (info)
-	integer*8
-     $	    info
-
-	if (info .eq. -7) then
-	    call mexErrMsgTxt ('matrix contains unsorted columns')
-
-	elseif (info .eq. -1) then
-	    call mexErrMsgTxt ('invalid matrix (col pointers)')
-
-	elseif (info .eq. -2) then
-	    call mexErrMsgTxt ('row index out of range)')
-
-	elseif (info .eq. -3) then
-	    call mexErrMsgTxt ('duplicate entry in matrix')
-
-	elseif (info .eq. -4) then
-	    call mexErrMsgTxt ('invalid symmetric matrix')
-
-	elseif (info .eq. -5) then
-	    call mexErrMsgTxt ('invalid matrix type')
-
-	elseif (info .eq. -6) then
-	    call mexErrMsgTxt ('invalid matrix dimensions')
-
-	elseif (info .eq. -911) then
-	    call mexErrMsgTxt ('finite-element form not supported')
-
-	elseif (info .eq. -91) then
-	    call mexErrMsgTxt ('error reading file (header)')
-
-	elseif (info .eq. -92) then
-	    call mexErrMsgTxt ('error reading file (column pointers)')
-
-	elseif (info .eq. -93) then
-	    call mexErrMsgTxt ('error reading file (row indices)')
-
-	elseif (info .eq. -94) then
-	    call mexErrMsgTxt ('error reading file (numerical values)')
-
-	elseif (info .eq. -95) then
-	    call mexErrMsgTxt ('error reading file (right-hand-side)')
-
-	elseif (info .lt. 0) then
-	    print *, info
-	    call mexErrMsgTxt ('error (unspecified)')
-
-	elseif (info .gt. 0) then
-	    print *, info
-	    call mexErrMsgTxt ('warning (unspecified)')
-
-	endif
-	return
-	end
-
diff --git a/RBio/RBread_mex_32.f b/RBio/RBread_mex_32.f
deleted file mode 100644
index 38d1dba..0000000
--- a/RBio/RBread_mex_32.f
+++ /dev/null
@@ -1,239 +0,0 @@
-c=======================================================================
-c=== RBio/RBread_mex_32 ================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBread mexFunction: read a sparse matrix from a Rutherford/Boeing file
-c-----------------------------------------------------------------------
-c
-c   [A Z title key mtype] = RBread (filename)
-c
-c   A: a sparse matrix (no explicit zero entries)
-c   Z: binary pattern of explicit zero entries in Rutherford/Boeing file.
-c	This always has the same size as A, and is always sparse.
-c
-c   title: the 72-character title string in the file
-c   key: the 8-character matrix name in the file
-c   mtype: see RBwrite.m for a description.
-c
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*4
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxIsChar, mxClassIDFromClassName
-
-	integer*4
-     $	    mxGetM, mxGetN, mxCreateSparse, mxGetJc, mxGetData,
-     $	    mxGetIr, mxGetPr, mxGetPi, mxGetString, mxCreateString,
-     $	    mxCreateNumericMatrix
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*4
-     $	    nrow, ncol, nnz, mkind, w, cp,
-     $	    skind, wmat, cpmat, Zmat, nw,
-     $	    Ap, Ai, Ax, Az, Cmat, Cx, nzeros, info, Zp, Zi, Zx, i,
-     $	    nnz2, nnz1, nelnz, one
-	integer*4 iclass, cmplex, wcmplex
-	character title*72, key*8, mtype*3, ptrfmt*16, indfmt*16,
-     $	    valfmt*20, filename*1024
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .ne. 1 .or. nargout .gt. 5 .or.
-     $	    mxIsChar (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt
-     $		('Usage: [A Z title key mtype] = RBread (filename)')
-	endif
-
-c	----------------------------------------------------------------
-c	get filename and open file
-c	----------------------------------------------------------------
-
-	if (mxGetString (pargin (1), filename, 1024) .ne. 0) then
-	    call mexErrMsgTxt ('filename too long')
-	endif
-	close (unit = 7)
-	open (unit = 7, file = filename, status = 'OLD', err = 998)
-	rewind (unit = 7)
-
-c	----------------------------------------------------------------
-c	read the header and determine the matrix type
-c	----------------------------------------------------------------
-
-	call RBheader (title, key, mtype, nrow, ncol, nnz,
-     $	    ptrfmt, indfmt, valfmt, mkind, cmplex, skind, nelnz, info)
-	if (nelnz .ne. 0) then
-c	    finite-element matrices not supported
-	    info = -5
-	endif
-	call RBerr (info)
-
-c	----------------------------------------------------------------
-c	allocate result A
-c	----------------------------------------------------------------
-
-	if (skind .gt. 0) then
-c	    allocate enough space for upper triangular part (S,H,Z)
-	    nnz1 = 2 * nnz
-	else
-	    nnz1 = nnz
-	endif
-	nnz1 = max (nnz1, 1)
-
-	pargout (1) = mxCreateSparse (nrow, ncol, nnz1, cmplex)
-	Ap = mxGetJc (pargout (1))
-	Ai = mxGetIr (pargout (1))
-	Ax = mxGetPr (pargout (1))
-	Az = mxGetPi (pargout (1))
-
-c	----------------------------------------------------------------
-c	allocate workspace
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int32')
-	nw = max (nrow,ncol) + 1
-	wcmplex = 0
-	one = 1
-	wmat = mxCreateNumericMatrix (nw, one, iclass, wcmplex)
-	cpmat = mxCreateNumericMatrix (ncol+1, one, iclass, wcmplex)
-	w = mxGetData (wmat)
-	cp = mxGetData (cpmat)
-
-c	----------------------------------------------------------------
-c	read in the sparse matrix
-c	----------------------------------------------------------------
-
-	if (mkind .eq. 2) then
-c	    complex matrices
-	    Cmat = mxCreateNumericMatrix (2 * nnz1, one,
-     $		    mxClassIDFromClassName ('double'), wcmplex)
-	    Cx = mxGetData (Cmat)
-	    call RBcread (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $		mkind, skind, %val (Ap), %val (Ai), %val (Cx), nzeros,
-     $		%val (w), %val (cp), info, nw, nnz1)
-	else
-c	    real, pattern, and integer matrices
-	    call RBrread (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $		mkind, skind, %val (Ap), %val (Ai), %val (Ax), nzeros,
-     $		%val (w), %val (cp), info, nw, nnz1)
-	endif
-	call RBerr (info)
-	close (unit = 7)
-
-c	----------------------------------------------------------------
-c	extract or discard explicit zero entries
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 2) then
-
-c	    ------------------------------------------------------------
-c	    extract explicit zeros from A and store them in Z
-c	    ------------------------------------------------------------
-
-	    pargout (2) = mxCreateSparse
-     $		(nrow, ncol, max (nzeros,1), wcmplex)
-	    Zp = mxGetJc (pargout (2))
-	    Zi = mxGetIr (pargout (2))
-	    Zx = mxGetPr (pargout (2))
-
-	    if (mkind .eq. 2) then
-c    		complex matrices
-		call RBczeros (nrow, ncol, %val (cp),
-     $		    %val (Ap), %val (Ai), %val (Cx),
-     $		    %val (Zp), %val (Zi), %val (Zx))
-	    else
-c		real, pattern-only, and integer matrices
-		call RBrzeros (nrow, ncol, %val (cp),
-     $		    %val (Ap), %val (Ai), %val (Ax),
-     $		    %val (Zp), %val (Zi), %val (Zx))
-	    endif
-
-c	    convert Z to zero-based
-	    call RBmangle (ncol, %val (Zp), %val (Zi), i)
-
-	else
-
-c	    ------------------------------------------------------------
-c	    discard explicit zero entries from A (do not keep them)
-c	    ------------------------------------------------------------
-
-	    if (mkind .eq. 2) then
-c    		complex matrices
-		call RBcprune (nrow, ncol,
-     $		    %val (Ap), %val (Ai), %val (Cx))
-	    else
-c		real, pattern-only, and integer matrices
-		call RBrprune (nrow, ncol,
-     $		    %val (Ap), %val (Ai), %val (Ax))
-	    endif
-
-	endif
-
-c	----------------------------------------------------------------
-c	convert A to final MATLAB form (zero-based, split complex)
-c	----------------------------------------------------------------
-
-	call RBmangle (ncol, %val (Ap), %val (Ai), nnz2)
-
-	if (mkind .eq. 2) then
-c	    convert Fortran-style complex values to MATLAB-style
-	    call RBcsplit (%val (Cx), %val (Ax), %val (Az), nnz2)
-	    call mxDestroyArray (%val (Cmat))
-	endif
-
-c	----------------------------------------------------------------
-c	return title
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 3) then
-	    pargout (3) = mxCreateString (title)
-	endif
-
-c	----------------------------------------------------------------
-c	return key
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 4) then
-	    pargout (4) = mxCreateString (key)
-	endif
-
-c	----------------------------------------------------------------
-c	return the matrix type to MATLAB
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 5) then
-	    pargout (5) = mxCreateString (mtype)
-	endif
-
-c	----------------------------------------------------------------
-c	free workspace and return
-c	----------------------------------------------------------------
-
-	call mxDestroyArray (%val (wmat))
-	call mxDestroyArray (%val (cpmat))
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-998	call mexErrMsgTxt ('error opening file')
-	end
-
diff --git a/RBio/RBread_mex_64.f b/RBio/RBread_mex_64.f
deleted file mode 100644
index ddba795..0000000
--- a/RBio/RBread_mex_64.f
+++ /dev/null
@@ -1,239 +0,0 @@
-c=======================================================================
-c=== RBio/RBread_mex_64 ================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBread mexFunction: read a sparse matrix from a Rutherford/Boeing file
-c-----------------------------------------------------------------------
-c
-c   [A Z title key mtype] = RBread (filename)
-c
-c   A: a sparse matrix (no explicit zero entries)
-c   Z: binary pattern of explicit zero entries in Rutherford/Boeing file.
-c	This always has the same size as A, and is always sparse.
-c
-c   title: the 72-character title string in the file
-c   key: the 8-character matrix name in the file
-c   mtype: see RBwrite.m for a description.
-c
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*8
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxIsChar, mxClassIDFromClassName
-
-	integer*8
-     $	    mxGetM, mxGetN, mxCreateSparse, mxGetJc, mxGetData,
-     $	    mxGetIr, mxGetPr, mxGetPi, mxGetString, mxCreateString,
-     $	    mxCreateNumericMatrix
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*8
-     $	    nrow, ncol, nnz, mkind, w, cp,
-     $	    skind, wmat, cpmat, Zmat, nw,
-     $	    Ap, Ai, Ax, Az, Cmat, Cx, nzeros, info, Zp, Zi, Zx, i,
-     $	    nnz2, nnz1, nelnz, one
-	integer*4 iclass, cmplex, wcmplex
-	character title*72, key*8, mtype*3, ptrfmt*16, indfmt*16,
-     $	    valfmt*20, filename*1024
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .ne. 1 .or. nargout .gt. 5 .or.
-     $	    mxIsChar (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt
-     $		('Usage: [A Z title key mtype] = RBread (filename)')
-	endif
-
-c	----------------------------------------------------------------
-c	get filename and open file
-c	----------------------------------------------------------------
-
-	if (mxGetString (pargin (1), filename, 1024) .ne. 0) then
-	    call mexErrMsgTxt ('filename too long')
-	endif
-	close (unit = 7)
-	open (unit = 7, file = filename, status = 'OLD', err = 998)
-	rewind (unit = 7)
-
-c	----------------------------------------------------------------
-c	read the header and determine the matrix type
-c	----------------------------------------------------------------
-
-	call RBheader (title, key, mtype, nrow, ncol, nnz,
-     $	    ptrfmt, indfmt, valfmt, mkind, cmplex, skind, nelnz, info)
-	if (nelnz .ne. 0) then
-c	    finite-element matrices not supported
-	    info = -5
-	endif
-	call RBerr (info)
-
-c	----------------------------------------------------------------
-c	allocate result A
-c	----------------------------------------------------------------
-
-	if (skind .gt. 0) then
-c	    allocate enough space for upper triangular part (S,H,Z)
-	    nnz1 = 2 * nnz
-	else
-	    nnz1 = nnz
-	endif
-	nnz1 = max (nnz1, 1)
-
-	pargout (1) = mxCreateSparse (nrow, ncol, nnz1, cmplex)
-	Ap = mxGetJc (pargout (1))
-	Ai = mxGetIr (pargout (1))
-	Ax = mxGetPr (pargout (1))
-	Az = mxGetPi (pargout (1))
-
-c	----------------------------------------------------------------
-c	allocate workspace
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int64')
-	nw = max (nrow,ncol) + 1
-	wcmplex = 0
-	one = 1
-	wmat = mxCreateNumericMatrix (nw, one, iclass, wcmplex)
-	cpmat = mxCreateNumericMatrix (ncol+1, one, iclass, wcmplex)
-	w = mxGetData (wmat)
-	cp = mxGetData (cpmat)
-
-c	----------------------------------------------------------------
-c	read in the sparse matrix
-c	----------------------------------------------------------------
-
-	if (mkind .eq. 2) then
-c	    complex matrices
-	    Cmat = mxCreateNumericMatrix (2 * nnz1, one,
-     $		    mxClassIDFromClassName ('double'), wcmplex)
-	    Cx = mxGetData (Cmat)
-	    call RBcread (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $		mkind, skind, %val (Ap), %val (Ai), %val (Cx), nzeros,
-     $		%val (w), %val (cp), info, nw, nnz1)
-	else
-c	    real, pattern, and integer matrices
-	    call RBrread (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $		mkind, skind, %val (Ap), %val (Ai), %val (Ax), nzeros,
-     $		%val (w), %val (cp), info, nw, nnz1)
-	endif
-	call RBerr (info)
-	close (unit = 7)
-
-c	----------------------------------------------------------------
-c	extract or discard explicit zero entries
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 2) then
-
-c	    ------------------------------------------------------------
-c	    extract explicit zeros from A and store them in Z
-c	    ------------------------------------------------------------
-
-	    pargout (2) = mxCreateSparse
-     $		(nrow, ncol, max (nzeros,1), wcmplex)
-	    Zp = mxGetJc (pargout (2))
-	    Zi = mxGetIr (pargout (2))
-	    Zx = mxGetPr (pargout (2))
-
-	    if (mkind .eq. 2) then
-c    		complex matrices
-		call RBczeros (nrow, ncol, %val (cp),
-     $		    %val (Ap), %val (Ai), %val (Cx),
-     $		    %val (Zp), %val (Zi), %val (Zx))
-	    else
-c		real, pattern-only, and integer matrices
-		call RBrzeros (nrow, ncol, %val (cp),
-     $		    %val (Ap), %val (Ai), %val (Ax),
-     $		    %val (Zp), %val (Zi), %val (Zx))
-	    endif
-
-c	    convert Z to zero-based
-	    call RBmangle (ncol, %val (Zp), %val (Zi), i)
-
-	else
-
-c	    ------------------------------------------------------------
-c	    discard explicit zero entries from A (do not keep them)
-c	    ------------------------------------------------------------
-
-	    if (mkind .eq. 2) then
-c    		complex matrices
-		call RBcprune (nrow, ncol,
-     $		    %val (Ap), %val (Ai), %val (Cx))
-	    else
-c		real, pattern-only, and integer matrices
-		call RBrprune (nrow, ncol,
-     $		    %val (Ap), %val (Ai), %val (Ax))
-	    endif
-
-	endif
-
-c	----------------------------------------------------------------
-c	convert A to final MATLAB form (zero-based, split complex)
-c	----------------------------------------------------------------
-
-	call RBmangle (ncol, %val (Ap), %val (Ai), nnz2)
-
-	if (mkind .eq. 2) then
-c	    convert Fortran-style complex values to MATLAB-style
-	    call RBcsplit (%val (Cx), %val (Ax), %val (Az), nnz2)
-	    call mxDestroyArray (%val (Cmat))
-	endif
-
-c	----------------------------------------------------------------
-c	return title
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 3) then
-	    pargout (3) = mxCreateString (title)
-	endif
-
-c	----------------------------------------------------------------
-c	return key
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 4) then
-	    pargout (4) = mxCreateString (key)
-	endif
-
-c	----------------------------------------------------------------
-c	return the matrix type to MATLAB
-c	----------------------------------------------------------------
-
-	if (nargout .ge. 5) then
-	    pargout (5) = mxCreateString (mtype)
-	endif
-
-c	----------------------------------------------------------------
-c	free workspace and return
-c	----------------------------------------------------------------
-
-	call mxDestroyArray (%val (wmat))
-	call mxDestroyArray (%val (cpmat))
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-998	call mexErrMsgTxt ('error opening file')
-	end
-
diff --git a/RBio/RBreade.m b/RBio/RBreade.m
deleted file mode 100644
index 2c81c59..0000000
--- a/RBio/RBreade.m
+++ /dev/null
@@ -1,136 +0,0 @@
-function [A, Z, title, key, mtype] = RBreade (filename)
-%RBREADE read a symmetric finite-element matrix from a R/B file
-% Usage:
-%   [A Z title key mtype] = RBreade (filename)
-%
-% The file must contain a Rutherford/Boeing matrix of type *se or *he, where *
-% can be r, p, i, or c.  See RBread for a description of the outputs.
-%
-% If CHOLMOD is installed, this function is faster and uses less memory.
-%
-% Example:
-%
-%   [A Z title key mtype] = RBreade ('lap_25.pse') ;
-%
-% See also RBread, RBraw, sparse2.
-
-% Optionally uses the CHOLMOD sparse2 mexFunction.
-
-% Copyright 2007, Timothy A. Davis
-
-%-------------------------------------------------------------------------------
-% read in the raw contents of the Rutherford/Boeing file
-%-------------------------------------------------------------------------------
-
-[mtype Ap Ai Ax title key n] = RBraw (filename) ;
-mtype = lower (mtype) ;
-if (~(mtype (2) == 's' | mtype (2) == 'h') | (mtype (3) ~= 'e'))	    %#ok
-    error ('RBreade is only for symmetric unassembled finite-element matrices');
-end
-
-%-------------------------------------------------------------------------------
-% determine dimension, number of elements, and convert numerical entries
-%-------------------------------------------------------------------------------
-
-Ap = double (Ap) ;
-Ai = double (Ai) ;
-
-% number of elements
-ne = length (Ap) - 1 ;
-
-% dimension.
-if (max (Ai) > n)
-    error ('invalid dimension') ;
-end
-
-% determine number of numerical entries
-nz = 0 ;
-for e = 1:ne
-    p1 = Ap (e) ;
-    p2 = Ap (e+1) - 1 ;
-    nu = p2 - p1 + 1 ; 
-    nz = nz + (nu * (nu+1)/2) ;
-end
-
-% Ax can be empty, for a pse matrix
-if (~isempty (Ax))
-    if (mtype (1) == 'c')
-	% Ax is real, with real/imaginary parts interleaved
-	if (2 * nz ~= length (Ax))
-	    error ('invalid matrix (wrong number of complex values)') ;
-	end
-	Ax = Ax (1:2:end) + (1i * Ax (2:2:end)) ;
-    elseif (mtype (1) == 'i')
-	Ax = double (Ax) ;
-    end
-    % numerical values must be of the right size
-    if (nz ~= length (Ax))
-	error ('invalid matrix (wrong number of values)') ;
-    end
-end
-
-%-------------------------------------------------------------------------------
-% create triplet form
-%-------------------------------------------------------------------------------
-
-% row and column indices for triplet form of the matrix
-ii = zeros (nz, 1) ;
-jj = zeros (nz, 1) ;
-
-nx = 0 ;
-
-% create triplet row and column indices from finite-element pattern
-for e = 1:ne
-    p1 = Ap (e) ;
-    p2 = Ap (e+1) - 1 ;
-    for p = p1:p2
-	j = Ai (p) ;
-	for pp = p:p2
-	    i = Ai (pp) ;
-	    nx = nx + 1 ;
-	    ii (nx) = max (i,j) ;
-	    jj (nx) = min (i,j) ;
-	end
-    end
-end
-
-%-------------------------------------------------------------------------------
-% create the sparse matrix form
-%-------------------------------------------------------------------------------
-
-if (exist ('sparse2') == 3)						    %#ok
-    % Use sparse2 in CHOLMOD.  It's faster, allows integer Ai and Aj, and
-    % returns the Z matrix as the 2nd output argument.
-    if (isempty (Ax))
-	Ax = 1 ;
-    end
-    % numerical matrix
-    [A Z] = sparse2 (ii, jj, Ax, n, n) ;
-else
-    % stick with MATLAB, without CHOLMOD.  This is slower and takes more memory.
-    if (isempty (Ax))
-	% pattern-only matrix
-	A = spones (sparse (ii, jj, 1, n, n)) ;
-	Z = sparse (n, n) ;
-    else
-	% numerical matrix
-	A = sparse (ii, jj, Ax, n, n) ;
-	% determine the pattern of explicit zero entries
-	S = spones (sparse (ii, jj, 1, n, n)) ;
-	Z = S - spones (A) ;
-    end
-end
-
-% add the upper triangular part
-if (mtype (2) == 's')
-    A = A + tril (A,-1).' ;
-elseif (mtype (2) == 'h')
-    A = A + tril (A,-1)' ;
-end
-Z = Z + tril (Z,-1)' ;
-
-% remove duplicates created from triplet form for a pattern-only matrix
-if (mtype (1) == 'p')
-    A = spones (A) ;
-end
-
diff --git a/RBio/RBrread_32.f b/RBio/RBrread_32.f
deleted file mode 100644
index 938dc80..0000000
--- a/RBio/RBrread_32.f
+++ /dev/null
@@ -1,299 +0,0 @@
-c=======================================================================
-c=== RBio/RBrread_32 ===================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RB*read:  read a Rutherford/Boeing matrix
-c-----------------------------------------------------------------------
-
-	subroutine RBrread
-     $	    (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $	    mkind, skind, Ap, Ai, Ax, nzeros, w, cp, info, nw, nnz1)
-	integer*4
-     $	    nrow, ncol, nnz, mkind, skind, p, j, i, alen, llen, k,
-     $	    ilast, nzeros, info, nw, nnz1
-	integer*4
-     $	    Ap (ncol+1), Ai (nnz1), w (nw), cp (ncol+1)
-	double precision Ax (nnz1), x
-	character ptrfmt*16, indfmt*16, valfmt*20
-	character*4 s
-
-c	----------------------------------------------------------------
-c	read the column pointers and row indices
-c	----------------------------------------------------------------
-
-	call RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $	    Ap, Ai, w, cp, info, nw)
-	if (info .ne. 0) then
-c	    error: pattern is invalid
-	    return
-	endif
-
-c	----------------------------------------------------------------
-c	read the values
-c	----------------------------------------------------------------
-
-	if (mkind .eq. 1) then
-
-c	    pattern-only matrix, set all values to 1
-	    do 10 i = 1, nnz
-		Ax (i) = 1
-10	    continue
-
-	elseif (mkind .eq. 3) then
-
-c	    Read in nnz integer values, then convert them to real.
-c	    use Ai as workspace.  If the matrix is symmetric, Ai is
-c	    twice as big as nnz, so use Ai (nnz+1...2*nnz) as workspace.
-c	    Otherwise, for an iua matrix, use Ai (1..nnz) and then
-c	    rewind the file and read Ap and Ai back in again.
-
-	    if (skind .le. 0) then
-		k = 0
-	    else
-		k = nnz
-	    endif
-	    read (7, valfmt, err = 94, end = 94) (Ai(p), p = k+1, k+nnz)
-	    do 5 p = 1, nnz
-		Ax (p) = Ai (p+k)
-5	    continue
-	    if (skind .le. 0) then
-c		now that Ai has been destroyed, rewind the file and read
-c		in Ap and Ai again.  Skip the 4-line header first.
-		rewind (unit = 7)
-		read (7, 15) (s (k:k), k = 1,4)
-15		format (a1 / a1 / a1 / a1)
-		call RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $		    Ap, Ai, w, cp, info, nw)
-		if (info .ne. 0) then
-c		    error: pattern is invalid.  This 'cannot' happen,
-c		    because the pattern was already read in above.
-		    return
-		endif
-	    endif
-
-	else
-
-c	    read nnz values
-	    read (7, valfmt, err = 94, end = 94) (Ax (p), p = 1, nnz)
-
-	endif
-
-c	----------------------------------------------------------------
-c	construct upper triangular part for symmetric matrices
-c	----------------------------------------------------------------
-
-c	If skind is zero, then the upper part is not constructed.  This
-c	allows the caller to skip this part, and create the upper part
-c	of a symmetric (S,H,Z) matrix.  Just pass skind = 0.
-
-	if (skind .gt. 0) then
-
-c	    ------------------------------------------------------------
-c	    shift the matrix by adding gaps to the top of each column
-c	    ------------------------------------------------------------
-
-	    do 30 j = ncol, 1, -1
-
-c		number of entries in lower tri. part (incl. diagonal)
-		llen = Ap (j+1) - Ap (j)
-
-c		number of entries in entire column
-		alen = cp (j+1) - cp (j)
-
-c		move the column from Ai (Ap(j) ... Ap(j+1)-1)
-c		down to Ai (cp(j+1)-llen ... cp(j+1)-1), leaving a gap
-c		at Ai (Ap(j) ... cp(j+1)-llen)
-
-		do 20 k = 1, llen
-		    Ai (cp (j+1) - k) = Ai (Ap (j+1) - k)
-		    Ax (cp (j+1) - k) = Ax (Ap (j+1) - k)
-20		continue
-30	    continue
-
-c	    ------------------------------------------------------------
-c	    populate the upper triangular part
-c	    ------------------------------------------------------------
-
-c	    create temporary column pointers to point to the gaps
-	    do 40 j = 1, ncol
-		w (j) = cp (j)
-40	    continue
-
-	    do 60 j = 1, ncol
-
-c		scan the entries in the lower tri. part, in
-c		Ai (cp(j+1)-llen ... cp(j+1)-1)
-		llen = Ap (j+1) - Ap (j)
-		do 50 k = 1, llen
-
-c		    get the A(i,j) entry in the lower triangular part
-		    i = Ai (cp (j+1) - k)
-		    x = Ax (cp (j+1) - k)
-
-c		    add A(j,i) as the next entry in column i (excl diag)
-		    if (i .ne. j) then
-			p = w (i)
-			w (i) = w (i) + 1
-			Ai (p) = j
-
-			if (skind .eq. 1) then
-c			    *SA matrix
-			    Ax (p) = x
-			elseif (skind .eq. 2) then
-c			    *HA matrix
-			    Ax (p) = x
-			else
-c			    *ZA matrix
-			    Ax (p) = -x
-			endif
-
-		    endif
-
-50		continue
-60	    continue
-
-c	    finalize the column pointers
-	    do 70 j = 1, ncol+1
-		Ap (j) = cp (j)
-70	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	count the number of explicit zeros
-c	----------------------------------------------------------------
-
-	nzeros = 0
-	do 90 j = 1, ncol
-	    cp (j) = nzeros + 1
-	    do 80 p = Ap (j), Ap (j+1)-1
-		if (Ax (p) .eq. 0) then
-		    nzeros = nzeros + 1
-		endif
-80	    continue
-90	continue
-	cp (ncol+1) = nzeros + 1
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-94	info = -94
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*zeros: extract explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A and Z
-c   cp: column pointers of Z on input
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c   Zp, Zi, Zx: empty matrix on input, pattern of zeros on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBrzeros
-     $	    (nrow, ncol, cp, Ap, Ai, Ax, Zp, Zi, Zx)
-	integer*4
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), Zp (ncol+1), Zi (*),
-     $	    cp (*), i, j, p, pa, pz, p1
-	double precision Ax (*), x
-	double precision Zx (*)
-
-c	----------------------------------------------------------------
-c	copy the column pointers if Z is being constructed
-c	----------------------------------------------------------------
-
-	do 10 j = 1, ncol+1
-	    Zp (j) = cp (j)
-10	continue
-
-c	----------------------------------------------------------------
-c	split the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	pz = 1
-	do 30 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-	    pz = Zp (j)
-c	    split column j of A
-	    do 20 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .eq. 0) then
-c		    copy into Z
-		    Zi (pz) = i
-		    Zx (pz) = 1
-		    pz = pz + 1
-		else
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-20	    continue
-30	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*prune: discard explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBrprune
-     $	    (nrow, ncol, Ap, Ai, Ax)
-	integer*4
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), i, j, p, pa, pz, p1
-	double precision Ax (*), x
-
-c	----------------------------------------------------------------
-c	prune the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	do 20 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-c	    prune column j of A
-	    do 10 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .ne. 0) then
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-10	    continue
-20	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
diff --git a/RBio/RBrread_64.f b/RBio/RBrread_64.f
deleted file mode 100644
index 9b941a3..0000000
--- a/RBio/RBrread_64.f
+++ /dev/null
@@ -1,299 +0,0 @@
-c=======================================================================
-c=== RBio/RBrread_64 ===================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RB*read:  read a Rutherford/Boeing matrix
-c-----------------------------------------------------------------------
-
-	subroutine RBrread
-     $	    (nrow, ncol, nnz, ptrfmt, indfmt, valfmt,
-     $	    mkind, skind, Ap, Ai, Ax, nzeros, w, cp, info, nw, nnz1)
-	integer*8
-     $	    nrow, ncol, nnz, mkind, skind, p, j, i, alen, llen, k,
-     $	    ilast, nzeros, info, nw, nnz1
-	integer*8
-     $	    Ap (ncol+1), Ai (nnz1), w (nw), cp (ncol+1)
-	double precision Ax (nnz1), x
-	character ptrfmt*16, indfmt*16, valfmt*20
-	character*4 s
-
-c	----------------------------------------------------------------
-c	read the column pointers and row indices
-c	----------------------------------------------------------------
-
-	call RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $	    Ap, Ai, w, cp, info, nw)
-	if (info .ne. 0) then
-c	    error: pattern is invalid
-	    return
-	endif
-
-c	----------------------------------------------------------------
-c	read the values
-c	----------------------------------------------------------------
-
-	if (mkind .eq. 1) then
-
-c	    pattern-only matrix, set all values to 1
-	    do 10 i = 1, nnz
-		Ax (i) = 1
-10	    continue
-
-	elseif (mkind .eq. 3) then
-
-c	    Read in nnz integer values, then convert them to real.
-c	    use Ai as workspace.  If the matrix is symmetric, Ai is
-c	    twice as big as nnz, so use Ai (nnz+1...2*nnz) as workspace.
-c	    Otherwise, for an iua matrix, use Ai (1..nnz) and then
-c	    rewind the file and read Ap and Ai back in again.
-
-	    if (skind .le. 0) then
-		k = 0
-	    else
-		k = nnz
-	    endif
-	    read (7, valfmt, err = 94, end = 94) (Ai(p), p = k+1, k+nnz)
-	    do 5 p = 1, nnz
-		Ax (p) = Ai (p+k)
-5	    continue
-	    if (skind .le. 0) then
-c		now that Ai has been destroyed, rewind the file and read
-c		in Ap and Ai again.  Skip the 4-line header first.
-		rewind (unit = 7)
-		read (7, 15) (s (k:k), k = 1,4)
-15		format (a1 / a1 / a1 / a1)
-		call RBpattern (ptrfmt, indfmt, nrow, ncol, nnz, skind,
-     $		    Ap, Ai, w, cp, info, nw)
-		if (info .ne. 0) then
-c		    error: pattern is invalid.  This 'cannot' happen,
-c		    because the pattern was already read in above.
-		    return
-		endif
-	    endif
-
-	else
-
-c	    read nnz values
-	    read (7, valfmt, err = 94, end = 94) (Ax (p), p = 1, nnz)
-
-	endif
-
-c	----------------------------------------------------------------
-c	construct upper triangular part for symmetric matrices
-c	----------------------------------------------------------------
-
-c	If skind is zero, then the upper part is not constructed.  This
-c	allows the caller to skip this part, and create the upper part
-c	of a symmetric (S,H,Z) matrix.  Just pass skind = 0.
-
-	if (skind .gt. 0) then
-
-c	    ------------------------------------------------------------
-c	    shift the matrix by adding gaps to the top of each column
-c	    ------------------------------------------------------------
-
-	    do 30 j = ncol, 1, -1
-
-c		number of entries in lower tri. part (incl. diagonal)
-		llen = Ap (j+1) - Ap (j)
-
-c		number of entries in entire column
-		alen = cp (j+1) - cp (j)
-
-c		move the column from Ai (Ap(j) ... Ap(j+1)-1)
-c		down to Ai (cp(j+1)-llen ... cp(j+1)-1), leaving a gap
-c		at Ai (Ap(j) ... cp(j+1)-llen)
-
-		do 20 k = 1, llen
-		    Ai (cp (j+1) - k) = Ai (Ap (j+1) - k)
-		    Ax (cp (j+1) - k) = Ax (Ap (j+1) - k)
-20		continue
-30	    continue
-
-c	    ------------------------------------------------------------
-c	    populate the upper triangular part
-c	    ------------------------------------------------------------
-
-c	    create temporary column pointers to point to the gaps
-	    do 40 j = 1, ncol
-		w (j) = cp (j)
-40	    continue
-
-	    do 60 j = 1, ncol
-
-c		scan the entries in the lower tri. part, in
-c		Ai (cp(j+1)-llen ... cp(j+1)-1)
-		llen = Ap (j+1) - Ap (j)
-		do 50 k = 1, llen
-
-c		    get the A(i,j) entry in the lower triangular part
-		    i = Ai (cp (j+1) - k)
-		    x = Ax (cp (j+1) - k)
-
-c		    add A(j,i) as the next entry in column i (excl diag)
-		    if (i .ne. j) then
-			p = w (i)
-			w (i) = w (i) + 1
-			Ai (p) = j
-
-			if (skind .eq. 1) then
-c			    *SA matrix
-			    Ax (p) = x
-			elseif (skind .eq. 2) then
-c			    *HA matrix
-			    Ax (p) = x
-			else
-c			    *ZA matrix
-			    Ax (p) = -x
-			endif
-
-		    endif
-
-50		continue
-60	    continue
-
-c	    finalize the column pointers
-	    do 70 j = 1, ncol+1
-		Ap (j) = cp (j)
-70	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	count the number of explicit zeros
-c	----------------------------------------------------------------
-
-	nzeros = 0
-	do 90 j = 1, ncol
-	    cp (j) = nzeros + 1
-	    do 80 p = Ap (j), Ap (j+1)-1
-		if (Ax (p) .eq. 0) then
-		    nzeros = nzeros + 1
-		endif
-80	    continue
-90	continue
-	cp (ncol+1) = nzeros + 1
-
-c	----------------------------------------------------------------
-c	matrix is valid
-c	----------------------------------------------------------------
-
-	info = 0
-	return
-
-c	----------------------------------------------------------------
-c	error return
-c	----------------------------------------------------------------
-
-94	info = -94
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*zeros: extract explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A and Z
-c   cp: column pointers of Z on input
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c   Zp, Zi, Zx: empty matrix on input, pattern of zeros on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBrzeros
-     $	    (nrow, ncol, cp, Ap, Ai, Ax, Zp, Zi, Zx)
-	integer*8
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), Zp (ncol+1), Zi (*),
-     $	    cp (*), i, j, p, pa, pz, p1
-	double precision Ax (*), x
-	double precision Zx (*)
-
-c	----------------------------------------------------------------
-c	copy the column pointers if Z is being constructed
-c	----------------------------------------------------------------
-
-	do 10 j = 1, ncol+1
-	    Zp (j) = cp (j)
-10	continue
-
-c	----------------------------------------------------------------
-c	split the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	pz = 1
-	do 30 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-	    pz = Zp (j)
-c	    split column j of A
-	    do 20 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .eq. 0) then
-c		    copy into Z
-		    Zi (pz) = i
-		    Zx (pz) = 1
-		    pz = pz + 1
-		else
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-20	    continue
-30	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RB*prune: discard explicit zero entries
-c-----------------------------------------------------------------------
-c
-c   nrow-by-ncol: size of A
-c   Ap, Ai, Ax: matrix with zeros on input, pruned on output
-c
-c-----------------------------------------------------------------------
-
-	subroutine RBrprune
-     $	    (nrow, ncol, Ap, Ai, Ax)
-	integer*8
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), i, j, p, pa, pz, p1
-	double precision Ax (*), x
-
-c	----------------------------------------------------------------
-c	prune the matrix
-c	----------------------------------------------------------------
-
-	pa = 1
-	do 20 j = 1, ncol
-c	    save the new start of column j of A
-	    p1 = Ap (j)
-	    Ap (j) = pa
-c	    prune column j of A
-	    do 10 p = p1, Ap (j+1)-1
-		i = Ai (p)
-		x = Ax (p)
-		if (x .ne. 0) then
-c		    copy into A
-		    Ai (pa) = i
-		    Ax (pa) = x
-		    pa = pa + 1
-		endif
-10	    continue
-20	continue
-	Ap (ncol+1) = pa
-
-	return
-	end
diff --git a/RBio/RBtype.m b/RBio/RBtype.m
deleted file mode 100644
index d72d439..0000000
--- a/RBio/RBtype.m
+++ /dev/null
@@ -1,39 +0,0 @@
-function [mtype, mkind, skind] = RBtype (A)                                 %#ok
-%RBTYPE determine the Rutherford/Boeing type of a sparse matrix
-% Usage:
-%   [mtype mkind skind] = RBtype (A)
-%
-% A must be a sparse matrix.  RBtype determines the Rutherford/Boeing type of A.
-% Very little memory is used (just size(A,2) integer workspace), so this can
-% succeed where a test such as nnz(A-A')==0 will fail.
-%
-%       mkind:  R: (0), A is real, and not binary
-%               P: (1), A is binary (all values or 0 or 1)
-%               C: (2), A is complex
-%               I: (3), A is integer
-%
-%       skind:  R: (-1), A is rectangular
-%               U: (0), A is unsymmetric (not S, H, or Z)
-%               S: (1), A is symmetric (nnz(A-A.') is 0)
-%               H: (2), A is Hermitian (nnz(A-A') is 0)
-%               Z: (3), A is skew symmetric (nnz(A+A.') is 0)
-%
-% mtype is a 3-character string, where mtype(1) is the mkind
-% ('R', 'P', or 'C').  mtype(2) is the skind ('R', 'U', 'S', 'H', or 'Z'),
-% and mtype(3) is 'A'.
-%
-% Example:
-%   load west0479
-%   A = west0479 ;
-%   RBtype (A)
-%   RBtype (spones (A))
-%   RBtype (2*spones (A))
-%   C = A+A' ;
-%   RBtype (C)
-%
-% See also RBread, RBwrite.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-error ('RBtype mexFunction not found') ;
-
diff --git a/RBio/RBtype_mex_32.f b/RBio/RBtype_mex_32.f
deleted file mode 100644
index 77dff16..0000000
--- a/RBio/RBtype_mex_32.f
+++ /dev/null
@@ -1,128 +0,0 @@
-c=======================================================================
-c=== RBio/RBtype_mex_32 ================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBtype mexFunction:
-c-----------------------------------------------------------------------
-c
-c   [mtype mkind skind] = RBtype (A)
-c
-c   A: a sparse matrix.   Determines the Rutherford/Boeing type of the
-c   matrix.  Very little memory is used (just size(A,2) integer
-c   workspace), so this can succeed where a test such as nnz(A-A')==0
-c   will fail.
-c
-c	mkind:	r: (0), A is real, and not binary
-c		p: (1), A is binary
-c		c: (2), A is complex
-c		i: (3), A is integer
-c
-c	skind:  r: (-1), A is rectangular
-c               u: (0), A is unsymmetric (not S, H, Z, below)
-c		s: (1), A is symmetric (nnz(A-A.') is 0)
-c		h: (2), A is Hermitian (nnz(A-A') is 0)
-c		z: (3), A is skew symmetric (nnz(A+A.') is 0)
-c
-c   mtype is a 3-character string, where mtype(1) is the mkind
-c   ('r', 'p', 'c', or 'i').  mtype(2) is the skind ('r', 'u', 's', 'h',
-c   or 'z'), and mtype(3) is always 'a'.
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*4
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxClassIDFromClassName,
-     $	    mxIsClass, mxIsSparse, mxIsComplex
-
-	integer*4
-     $	    mxGetM, mxGetN, mxGetJc, mxGetIr, mxGetPr, mxGetPi,
-     $	    mxGetData, mxCreateNumericMatrix, mxCreateDoubleScalar,
-     $	    mxCreateString
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*4
-     $	    nrow, ncol, nnz, mkind, cp, skind, cpmat,
-     $	    Ap, Ai, Ax, Az, kmin, kmax, one
-	integer*4 iclass, cmplex, wcmplex
-	character mtype*3
-	double precision t
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .ne. 1 .or. nargout .gt. 3) then
-	    call mexErrMsgTxt ('[mtype mkind skind] = RBtype (A)')
-	endif
-
-c	----------------------------------------------------------------
-c	get A
-c	----------------------------------------------------------------
-
-	if (mxIsClass (pargin (1), 'double') .ne. 1 .or.
-     $	    mxIsSparse (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt ('A must be sparse and double')
-	endif
-	cmplex = mxIsComplex (pargin (1))
-	Ap = mxGetJc (pargin (1))
-	Ai = mxGetIr (pargin (1))
-	Ax = mxGetPr (pargin (1))
-	Az = mxGetPi (pargin (1))
-	nrow = mxGetM (pargin (1))
-	ncol = mxGetN (pargin (1))
-
-c	----------------------------------------------------------------
-c	allocate workspace
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int32')
-	one = 1
-	wcmplex = 0
-	cpmat = mxCreateNumericMatrix (ncol+1, one, iclass, wcmplex)
-	cp = mxGetData (cpmat)
-
-c	----------------------------------------------------------------
-c	determine the mtype of A
-c	----------------------------------------------------------------
-
-	call RBkind (nrow, ncol, %val(Ap), %val(Ai), %val(Ax),
-     $	    %val(Az), cmplex, mkind, skind, mtype, nnz, %val(cp),
-     $	    kmin, kmax)
-
-c	----------------------------------------------------------------
-c	return the result
-c	----------------------------------------------------------------
-
-	pargout (1) = mxCreateString (mtype)
-	if (nargout .ge. 2) then
-	    t = mkind
-	    pargout (2) = mxCreateDoubleScalar (t)
-	endif
-	if (nargout .ge. 3) then
-	    t = skind
-	    pargout (3) = mxCreateDoubleScalar (t)
-	endif
-
-c	----------------------------------------------------------------
-c	free workspace
-c	----------------------------------------------------------------
-
-	call mxDestroyArray (%val (cpmat))
-	return
-	end
-
diff --git a/RBio/RBtype_mex_64.f b/RBio/RBtype_mex_64.f
deleted file mode 100644
index 9190ffc..0000000
--- a/RBio/RBtype_mex_64.f
+++ /dev/null
@@ -1,128 +0,0 @@
-c=======================================================================
-c=== RBio/RBtype_mex_64 ================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBtype mexFunction:
-c-----------------------------------------------------------------------
-c
-c   [mtype mkind skind] = RBtype (A)
-c
-c   A: a sparse matrix.   Determines the Rutherford/Boeing type of the
-c   matrix.  Very little memory is used (just size(A,2) integer
-c   workspace), so this can succeed where a test such as nnz(A-A')==0
-c   will fail.
-c
-c	mkind:	r: (0), A is real, and not binary
-c		p: (1), A is binary
-c		c: (2), A is complex
-c		i: (3), A is integer
-c
-c	skind:  r: (-1), A is rectangular
-c               u: (0), A is unsymmetric (not S, H, Z, below)
-c		s: (1), A is symmetric (nnz(A-A.') is 0)
-c		h: (2), A is Hermitian (nnz(A-A') is 0)
-c		z: (3), A is skew symmetric (nnz(A+A.') is 0)
-c
-c   mtype is a 3-character string, where mtype(1) is the mkind
-c   ('r', 'p', 'c', or 'i').  mtype(2) is the skind ('r', 'u', 's', 'h',
-c   or 'z'), and mtype(3) is always 'a'.
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*8
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxClassIDFromClassName,
-     $	    mxIsClass, mxIsSparse, mxIsComplex
-
-	integer*8
-     $	    mxGetM, mxGetN, mxGetJc, mxGetIr, mxGetPr, mxGetPi,
-     $	    mxGetData, mxCreateNumericMatrix, mxCreateDoubleScalar,
-     $	    mxCreateString
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*8
-     $	    nrow, ncol, nnz, mkind, cp, skind, cpmat,
-     $	    Ap, Ai, Ax, Az, kmin, kmax, one
-	integer*4 iclass, cmplex, wcmplex
-	character mtype*3
-	double precision t
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .ne. 1 .or. nargout .gt. 3) then
-	    call mexErrMsgTxt ('[mtype mkind skind] = RBtype (A)')
-	endif
-
-c	----------------------------------------------------------------
-c	get A
-c	----------------------------------------------------------------
-
-	if (mxIsClass (pargin (1), 'double') .ne. 1 .or.
-     $	    mxIsSparse (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt ('A must be sparse and double')
-	endif
-	cmplex = mxIsComplex (pargin (1))
-	Ap = mxGetJc (pargin (1))
-	Ai = mxGetIr (pargin (1))
-	Ax = mxGetPr (pargin (1))
-	Az = mxGetPi (pargin (1))
-	nrow = mxGetM (pargin (1))
-	ncol = mxGetN (pargin (1))
-
-c	----------------------------------------------------------------
-c	allocate workspace
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int64')
-	one = 1
-	wcmplex = 0
-	cpmat = mxCreateNumericMatrix (ncol+1, one, iclass, wcmplex)
-	cp = mxGetData (cpmat)
-
-c	----------------------------------------------------------------
-c	determine the mtype of A
-c	----------------------------------------------------------------
-
-	call RBkind (nrow, ncol, %val(Ap), %val(Ai), %val(Ax),
-     $	    %val(Az), cmplex, mkind, skind, mtype, nnz, %val(cp),
-     $	    kmin, kmax)
-
-c	----------------------------------------------------------------
-c	return the result
-c	----------------------------------------------------------------
-
-	pargout (1) = mxCreateString (mtype)
-	if (nargout .ge. 2) then
-	    t = mkind
-	    pargout (2) = mxCreateDoubleScalar (t)
-	endif
-	if (nargout .ge. 3) then
-	    t = skind
-	    pargout (3) = mxCreateDoubleScalar (t)
-	endif
-
-c	----------------------------------------------------------------
-c	free workspace
-c	----------------------------------------------------------------
-
-	call mxDestroyArray (%val (cpmat))
-	return
-	end
-
diff --git a/RBio/RBwrite.m b/RBio/RBwrite.m
deleted file mode 100644
index 059fb5a..0000000
--- a/RBio/RBwrite.m
+++ /dev/null
@@ -1,36 +0,0 @@
-function mtype = RBwrite (filename, A, Z, title, key)			    %#ok
-%RBWRITE write a sparse matrix to a Rutherford/Boeing file
-% Usage:
-%   mtype = RBwrite (filename, A, Z, title, key)
-%
-%   filename: name of the file to create
-%   A: a sparse matrix
-%   Z: binary pattern of explicit zero entries to include in the
-%       Rutherford/Boeing file.  This always has the same size as A, and is
-%       always sparse.  Not used if empty ([ ]), or if nnz(Z) is 0.
-%   title: title for 1st line of  Rutherford/Boeing file, up to 72 characters
-%   key: matrix key, up to 8 characters, for 1st line of the file
-%
-% Z is optional.  RBwrite (filename, A) uses a default title and key, and does
-% not include any explicit zeros.  RBwrite (filname, A, 'title...', 'key') uses
-% the given title and key.  A must be sparse.  Z must be empty, or sparse.
-%
-% mtype is a 3-character string with the Rutherford/Boeing type used:
-%   mtype(1):  r: real, p: pattern, c: complex, i: integer
-%   mtype(2):  r: rectangular, u: unsymmetric, s: symmetric,
-%              h: Hermitian, Z: skew symmetric
-%   mtype(3):  a: assembled matrix, e: finite-element (not used by RBwrite)
-%
-% Example:
-%   load west0479
-%   C = west0479 ;
-%   RBwrite ('west0479', C, 'WEST0479 chemical eng. problem', 'west0479')
-%   A = RBread ('west0479') ;
-%   norm (A-C,1)
-%
-% See also RBread, RBtype.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-error ('RBwrite mexFunction not found') ;
-
diff --git a/RBio/RBwrite_32.f b/RBio/RBwrite_32.f
deleted file mode 100644
index 5ecde32..0000000
--- a/RBio/RBwrite_32.f
+++ /dev/null
@@ -1,713 +0,0 @@
-c=======================================================================
-c=== RBio/RBwrite_32 ===================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBkind: determine the type of a MATLAB matrix
-c-----------------------------------------------------------------------
-c
-c   input: a zero-based MATLAB sparse matrix
-c
-c	nrow	number of rows of A
-c	ncol	number of columns of A
-c	Ap	size ncol+1, column pointers
-c	Ai	size nnz, row indices (nnz = Ap (ncol+1))
-c	Ax	size nnz, real values
-c	Az	size nnz, imaginary values (not accessed if A is real)
-c	cmplex	1 if A is complex, 0 otherwise
-c
-c   output:
-c	mkind:	r: 0 (real), p: 1 (pattern), c: 2 (complex),
-c		i: 3 (integer)
-c	skind:  r: -1 (rectangular), u: 0 (unsymmetric), s: 1 symmetric,
-c		h: 2 (Hermitian), z: 3 (skew symmetric)
-c
-c   workspace:
-c	munch	size ncol+1, not defined on input or output
-c
-c   Note that the MATLAB matrix is zero-based (Ap and Ai).  1 must be
-c   added whenever they are used (see "1+" in the code below).
-c
-c   See also SuiteSparse/CHOLMOD/MatrixOps/cholmod_symmetry.c, which
-c   also determines if the diagonal is positive.
-c-----------------------------------------------------------------------
-
-	subroutine RBkind (nrow, ncol, Ap, Ai, Ax, Az,
-     $	    cmplex, mkind, skind, mtype, nnz, munch, kmin, kmax)
-
-	integer*4
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), mkind, skind,
-     $	    munch (ncol+1), p, i, j, pt, nnz, k, kmin, kmax
-	integer*4 cmplex
-	double precision Ax (*), Az (*), x_r, x_i, xtr, xti
-	logical is_p, is_s, is_h, is_z, is_int
-	character mtype*3
-
-c	----------------------------------------------------------------
-c	determine numeric type (I*A, R*A, P*A, C*A)
-c	----------------------------------------------------------------
-
-c	pattern: if real and all entries are 1.
-c	integer: if real and all entries are integers.
-c	complex: if cmplex is 1.
-c	real: otherwise.
-
-	nnz = 1+ (Ap (ncol+1) - 1)
-	kmin = 0
-	kmax = 0
-
-	if (cmplex .eq. 1) then
-c	    complex matrix (C*A)
-	    mtype (1:1) = 'c'
-	    mkind = 2
-	else
-c	    select P** format if all entries are equal to 1
-c	    select I** format if all entries are integer and
-c	    between -99,999,999 and +999,999,999
-	    is_p = .true.
-	    is_int = .true.
-	    k = dint (Ax (1))
-	    kmin = k
-	    kmax = k
-	    do 10 p = 1, nnz
-		if (Ax (p) .ne. 1) then
-		    is_p = .false.
-		endif
-		k = dint (Ax (p))
-		kmin = min (kmin, k)
-		kmax = max (kmax, k)
-		if (k .ne. Ax (p)) then
-		    is_int = .false.
-		endif
-		if (k .le. -99999999 .or. k .ge. 999999999) then
-c		    use real format for really big integers
-		    is_int = .false.
-		endif
-		if (.not. is_int .and. .not. is_p) then
-		    goto 20
-		endif
-10		continue
-20	    continue
-	    if (is_p) then
-c		pattern-only matrix (P*A)
-		mtype (1:1) = 'p'
-		mkind = 1
-	    elseif (is_int) then
-c		integer matrix (I*A)
-		mtype (1:1) = 'i'
-		mkind = 3
-	    else
-c		real matrix (R*A)
-		mtype (1:1) = 'r'
-		mkind = 0
-	    endif
-	endif
-
-c	only assembled matrices are handled
-	mtype (3:3) = 'a'
-
-c	----------------------------------------------------------------
-c	determine symmetry (*RA, *UA, *SA, *HA, *ZA)
-c	----------------------------------------------------------------
-
-c	Note that A must have sorted columns for this method to work.
-c	This is not checked, since all MATLAB matrices "should" have
-c	sorted columns.  Use spcheck(A) to check for this, if needed.
-
-	if (nrow .ne. ncol) then
-c	    rectangular matrix (*RA), no need to check values or pattern
-	    mtype (2:2) = 'r'
-	    skind = -1
-	    return
-	endif
-
-c	if complex, the matrix is Hermitian until proven otherwise
-	is_h = (cmplex .eq. 1)
-
-c	the matrix is symmetric until proven otherwise
-	is_s = .true.
-
-c	a non-pattern matrix is skew symmetric until proven otherwise
-	is_z = (mkind .ne. 1)
-
-c	if this method returns early, the matrix is unsymmetric
-	mtype (2:2) = 'u'
-	skind = 0
-
-c	initialize the munch pointers
-	do 30 j = 1, ncol
-	    munch (j) = 1+ (Ap (j))
-30	continue
-
-	do 50 j = 1, ncol
-
-c	    consider all entries not yet munched in column j
-	    do 40 p = munch (j), 1+ (Ap (j+1)-1)
-
-		i = 1+ (Ai (p))
-
-		if (i .lt. j) then
-c		    entry A(i,j) is unmatched, matrix is unsymmetric
-		    return
-		endif
-
-c		get the A(j,i) entry, if it exists
-		pt = munch (i)
-
-c		munch the A(j,i) entry
-		munch (i) = pt + 1
-
-		if (pt .ge. 1+ (Ap (i+1))) then
-c		    entry A(j,i) doesn't exist, matrix unsymmetric
-		    return
-		endif
-
-		if (1+ (Ai (pt)) .ne. j) then
-c		    entry A(j,i) doesn't exist, matrix unsymmetric
-		    return
-		endif
-
-c		A(j,i) exists; check its value with A(i,j)
-
-		if (cmplex .eq. 1) then
-
-c		    get A(i,j)
-		    x_r = Ax (p)
-		    x_i = Az (p)
-c		    get A(j,i)
-		    xtr = Ax (pt)
-		    xti = Az (pt)
-		    if (x_r .ne. xtr .or. x_i .ne. xti) then
-c			the matrix cannot be *SA
-			is_s = .false.
-		    endif
-		    if (x_r .ne. -xtr .or. x_i .ne. -xti) then
-c			the matrix cannot be *ZA
-			is_z = .false.
-		    endif
-		    if (x_r .ne. xtr .or. x_i .ne. -xti) then
-c			the matrix cannot be *HA
-			is_h = .false.
-		    endif
-
-		else
-
-c		    get A(i,j)
-		    x_r = Ax (p)
-c		    get A(j,i)
-		    xtr = Ax (pt)
-		    if (x_r .ne. xtr) then
-c			the matrix cannot be *SA
-			is_s = .false.
-		    endif
-		    if (x_r .ne. -xtr) then
-c			the matrix cannot be *ZA
-			is_z = .false.
-		    endif
-
-		endif
-
-		if (.not. (is_s .or. is_z .or. is_h)) then
-c		    matrix is unsymmetric; terminate the test
-		    return
-		endif
-
-40	    continue
-50	continue
-
-c	----------------------------------------------------------------
-c	return the symmetry
-c	----------------------------------------------------------------
-
-	if (is_h) then
-c	    Hermitian matrix (*HA)
-	    mtype (2:2) = 'h'
-	    skind = 2
-	elseif (is_s) then
-c	    symmetric matrix (*SA)
-	    mtype (2:2) = 's'
-	    skind = 1
-	elseif (is_z) then
-c	    skew symmetric matrix (*ZA)
-	    mtype (2:2) = 'z'
-	    skind = 3
-	endif
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBformat: determine the format required for an array of values
-c-----------------------------------------------------------------------
-c
-c This function ensures that a sufficiently wide format is used that
-c can accurately represent the data.  It also ensures that when printed,
-c the numerical values all have at least one blank space between them.
-c This makes it trivial for a program written in C (say) to read in a
-c matrix generated by RBwrite.
-
-c ww, valfmt, valn, and is_int must be defined on input.  They
-c are modified on output.
-c-----------------------------------------------------------------------
-
-	subroutine RBformat (nnz, x, ww, valfmt, valn, is_int,
-     $	    kmin, kmax)
-	integer*4
-     $	    nnz, i, ww, k, nf (18), valn, nd (9), kmin, kmax
-	double precision x (nnz), e, a, b
-	logical is_int
-	character*20 f (18), d (9), valfmt
-	character*80 s
-
-c	----------------------------------------------------------------
-c	define all possible formats
-c	----------------------------------------------------------------
-
-	f (1)  = '(8E9.1)             '
-	f (2)  = '(8E10.2)            '
-	f (3)  = '(7E11.3)            '
-	f (4)  = '(6E12.4)            '
-	f (5)  = '(6E13.5)            '
-	f (6)  = '(5E14.6)            '
-	f (7)  = '(5E15.7)            '
-	f (8)  = '(5E16.8)            '
-	f (9)  = '(4E17.9)            '
-	f (10) = '(4E18.10)           '
-	f (11) = '(4E19.11)           '
-	f (12) = '(4E20.12)           '
-	f (13) = '(3E21.13)           '
-	f (14) = '(3E22.14)           '
-	f (15) = '(3E23.15)           '
-	f (16) = '(3E24.16)           '
-	f (17) = '(3E25.17)           '
-	f (18) = '(3E26.18)           '
-
-	nf (1)  = 8
-	nf (2)  = 8
-	nf (3)  = 7
-	nf (4)  = 6
-	nf (5)  = 6
-	nf (6)  = 5
-	nf (7)  = 5
-	nf (8)  = 5
-	nf (9)  = 4
-	nf (10) = 4
-	nf (11) = 4
-	nf (12) = 4
-	nf (13) = 3
-	nf (14) = 3
-	nf (15) = 3
-	nf (16) = 3
-	nf (17) = 3
-	nf (18) = 3
-
-	if (is_int) then
-
-c	    ------------------------------------------------------------
-c	    use an integer format
-c	    ------------------------------------------------------------
-
-	    call RBiformat (kmin, kmax, valfmt, valn, ww)
-
-	else
-
-c	    ------------------------------------------------------------
-c	    determine if the matrix has huge values or NaN's
-c	    ------------------------------------------------------------
-
-	    do 10 i = 1, nnz
-		a = abs (x (i))
-		if (a .ne. 0) then
-		    if (a .ne. a .or. a < 1d-90 .or. a > 1d90) then
-			ww = 18
-			valfmt = '(2E30.18E3)         '
-			valn = 2
-			return
-		    endif
-		endif
-10	    continue
-
-c	    ------------------------------------------------------------
-c	    find the required precision for a real or complex matrix
-c	    ------------------------------------------------------------
-
-	    do 20 i = 1, nnz
-		a = x (i)
-		do 30 k = ww,18
-c		    write the value to a string, read back in, and check
-		    write (unit = s, fmt = f(k)) a
-		    read  (unit = s, fmt = f(k)) b
-		    if (a .eq. b) then
-			ww = max (ww, k)
-			goto 40
-		    endif
-30		continue
-40		continue
-		ww = max (ww, k)
-20	    continue
-
-c	    valn is the number of entries per line
-	    valfmt = f (ww)
-	    valn = nf (ww)
-
-	endif
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBwrite: write portions of the matrix to the file
-c-----------------------------------------------------------------------
-c
-c   task 0: just count the total number of entries in the matrix
-c   task 1: do task 0, and also construct w and cp
-c   task 2: write the row indices
-c   task 3: write the numerical values
-c
-c   Note that the MATLAB arrays A and Z are zero-based.  "1+" is added
-c   to each use of Ap, Ai, Zp, and Zi.
-c-----------------------------------------------------------------------
-
-	subroutine RBwrite (task, nrow, ncol, skind, cmplex, doZ, Ap,
-     $	    Ai, Ax, Az, Zp, Zi, mkind,
-     $	    indfmt, indn, valfmt, valn, nnz, w, cp)
-
-	integer*4
-     $	    task, nrow, ncol, Ap (*), Ai (*), Zp (*), Zi (*),
-     $	    cp (*), w (*), nnz, znz, ibuf (80), j, i, nbuf, pa, pz,
-     $	    paend, pzend, ia, iz, skind, indn, valn, p, mkind
-	integer*4 cmplex
-	logical doZ
-	double precision xbuf (80), xr, xi, Ax (*), Az (*)
-	character valfmt*20, indfmt*20
-
-c	----------------------------------------------------------------
-c	determine number of entries in Z
-c	----------------------------------------------------------------
-
-	if (doZ) then
-	    znz = 1+ (Zp (ncol+1) - 1)
-	else
-	    znz = 0
-	endif
-
-c	clear the nonzero counts
-	nnz = 0
-	do 10 j = 1, ncol
-	    w (j) = 0
-10	continue
-
-c	start with an empty buffer
-	nbuf = 0
-
-	if (znz .eq. 0) then
-
-c	    ------------------------------------------------------------
-c	    no Z present
-c	    ------------------------------------------------------------
-
-	    do 30 j = 1, ncol
-
-		do 20 pa = 1+ (Ap (j)), 1+ (Ap (j+1) - 1)
-
-		    i = 1+ (Ai (pa))
-		    xr = Ax (pa)
-		    if (cmplex .eq. 1) then
-			xi = Az (pa)
-		    endif
-
-		    if (skind .le. 0 .or. i .ge. j) then
-
-c			consider the (i,j) entry with value (xr,xi)
-			nnz = nnz + 1
-			if (task .eq. 1) then
-c			    only determining nonzero counts
-			    w (j) = w (j) + 1
-			elseif (task .eq. 2) then
-c			    printing the row indices
-			    call RBiprint (indfmt, ibuf, nbuf, i, indn)
-			elseif (task .eq. 3) then
-c			    printing the numerical values
-			    call RBxprint (valfmt, xbuf, nbuf, xr,
-     $				    valn, mkind)
-			    if (cmplex .eq. 1) then
-				call RBxprint (valfmt, xbuf, nbuf, xi,
-     $				    valn, mkind)
-			    endif
-			endif
-
-		    endif
-
-20		continue
-30	    continue
-
-	else
-
-c	    ------------------------------------------------------------
-c	    symmetric, unsymmetric or rectangular matrix, with Z present
-c	    ------------------------------------------------------------
-
-	    do 40 j = 1, ncol
-
-c		find the set union of A (:,j) and Z (:,j)
-
-		pa = 1+ (Ap (j))
-		pz = 1+ (Zp (j))
-		paend = 1+ (Ap (j+1) - 1)
-		pzend = 1+ (Zp (j+1) - 1)
-
-c		while entries appear in A or Z
-70		continue
-
-c		    get the next entry from A(:,j)
-		    if (pa .le. paend) then
-			ia = 1+ (Ai (pa))
-		    else
-			ia = 1+ nrow
-		    endif
-
-c		    get the next entry from Z(:,j)
-		    if (pz .le. pzend) then
-			iz = 1+ (Zi (pz))
-		    else
-			iz = 1+ nrow
-		    endif
-
-c		    exit loop if neither entry is present
-		    if (ia .gt. nrow .and. iz .gt. nrow) goto 80
-
-		    if (ia .lt. iz) then
-c			get A (i,j)
-			i = ia
-			xr = Ax (pa)
-			if (cmplex .eq. 1) then
-			    xi = Az (pa)
-			endif
-			pa = pa + 1
-		    else if (iz .lt. ia) then
-c			get Z (i,j)
-			i = iz
-			xr = 0
-			xi = 0
-			pz = pz + 1
-		    else
-c			get A (i,j), and delete its matched Z(i,j)
-			i = ia
-			xr = Ax (pa)
-			if (cmplex .eq. 1) then
-			    xi = Az (pa)
-			endif
-			pa = pa + 1
-			pz = pz + 1
-		    endif
-
-		    if (skind .le. 0 .or. i .ge. j) then
-
-c			consider the (i,j) entry with value (xr,xi)
-			nnz = nnz + 1
-			if (task .eq. 1) then
-c			    only determining nonzero counts
-			    w (j) = w (j) + 1
-			elseif (task .eq. 2) then
-c			    printing the row indices
-			    call RBiprint (indfmt, ibuf, nbuf, i, indn)
-			elseif (task .eq. 3) then
-c			    printing the numerical values
-			    call RBxprint (valfmt, xbuf, nbuf, xr,
-     $				    valn, mkind)
-			    if (cmplex .eq. 1) then
-				call RBxprint (valfmt, xbuf, nbuf, xi,
-     $				    valn, mkind)
-			    endif
-			endif
-
-		    endif
-
-		    goto 70
-
-c		end of while loop
-80		continue
-
-40	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	determine the new column pointers, or finish printing
-c	----------------------------------------------------------------
-
-	if (task .eq. 1) then
-
-	    cp (1) = 1
-	    do 100 j = 2, ncol+1
-		cp (j) = cp (j-1) + w (j-1)
-100	    continue
-
-	else if (task .eq. 2) then
-
-	    call RBiflush (indfmt, ibuf, nbuf)
-
-	elseif (task .eq. 3) then
-
-	    call RBxflush (valfmt, xbuf, nbuf, mkind)
-
-	endif
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBiprint: print a single integer to the file, flush buffer if needed
-c-----------------------------------------------------------------------
-
-	subroutine RBiprint (indfmt, ibuf, nbuf, i, indn)
-	character indfmt*20
-	integer*4
-     $	    ibuf (80), nbuf, i, indn
-	if (nbuf .ge. indn) then
-	    call RBiflush (indfmt, ibuf, nbuf)
-	    nbuf = 0
-	endif
-	nbuf = nbuf + 1
-	ibuf (nbuf) = i
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBiflush: flush the integer buffer to the file
-c-----------------------------------------------------------------------
-
-	subroutine RBiflush (indfmt, ibuf, nbuf)
-	character indfmt*20
-	integer*4
-     $	    ibuf (*), nbuf, k
-	write (unit = 7, fmt = indfmt, err = 999) (ibuf (k), k = 1,nbuf)
-	return
-999	call mexErrMsgTxt ('error writing ints')
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBxprint: print a single real to the file, flush the buffer if needed
-c-----------------------------------------------------------------------
-
-	subroutine RBxprint (valfmt, xbuf, nbuf, x, valn, mkind)
-	character valfmt*20
-	integer*4
-     $	    nbuf, valn, mkind
-	double precision xbuf (80), x
-	if (nbuf .ge. valn) then
-	    call RBxflush (valfmt, xbuf, nbuf, mkind)
-	    nbuf = 0
-	endif
-	nbuf = nbuf + 1
-	xbuf (nbuf) = x
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBxflush: flush the real buffer to the file
-c-----------------------------------------------------------------------
-
-	subroutine RBxflush (valfmt, xbuf, nbuf, mkind)
-	character valfmt*20
-	integer*4
-     $	    nbuf, k, ibuf (80), mkind
-	double precision xbuf (80)
-	if (mkind .eq. 3) then
-c	    convert to integer first; valfmt is (10I8), for example
-	    do 10 k = 1,nbuf
-		ibuf (k) = dint (xbuf (k))
-10	    continue
-	    write (unit = 7, fmt = valfmt, err = 999)
-     $		(ibuf (k), k = 1,nbuf)
-	else
-	    write (unit = 7, fmt = valfmt, err = 999)
-     $		(xbuf (k), k = 1,nbuf)
-	endif
-	return
-999	call mexErrMsgTxt ('error writing numerical values')
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBiformat: determine format for printing an integer
-c-----------------------------------------------------------------------
-
-	subroutine RBiformat (kmin, kmax, indfmt, indn, ww)
-	integer*4
-     $	    n, indn, kmin, kmax, ww
-	character*20 indfmt
-
-	if (kmin .ge. 0. and. kmax .le. 9) then
-	    indfmt = '(40I2)              '
-	    ww = 2
-	    indn = 40
-	elseif (kmin .ge. -9 .and. kmax .le. 99) then
-	    indfmt = '(26I3)              '
-	    ww = 3
-	    indn = 26
-	elseif (kmin .ge. -99 .and. kmax .le. 999) then
-	    indfmt = '(20I4)              '
-	    ww = 4
-	    indn = 20
-	elseif (kmin .ge. -999 .and. kmax .le. 9999) then
-	    indfmt = '(16I5)              '
-	    ww = 5
-	    indn = 16
-	elseif (kmin .ge. -9999 .and. kmax .le. 99999) then
-	    indfmt = '(13I6)              '
-	    ww = 6
-	    indn = 13
-	elseif (kmin .ge. -99999 .and. kmax .le. 999999) then
-	    indfmt = '(11I7)              '
-	    ww = 7
-	    indn = 11
-	elseif (kmin .ge. -999999 .and. kmax .le. 9999999) then
-	    indfmt = '(10I8)              '
-	    ww = 8
-	    indn = 10
-	elseif (kmin .ge. -9999999 .and. kmax .le. 99999999) then
-	    indfmt = '(8I9)               '
-	    ww = 9
-	    indn = 8
-	elseif (kmin .ge. -99999999 .and. kmax .le. 999999999) then
-	    indfmt = '(8I10)               '
-	    ww = 10
-	    indn = 8
-	else
-	    indfmt = '(5I15)               '
-	    ww = 15
-	    indn = 5
-	endif
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBcards: determine number of cards required
-c-----------------------------------------------------------------------
-
-	subroutine RBcards (nitems, nperline, ncards)
-	integer*4
-     $	    nitems, nperline, ncards
-	if (nitems .eq. 0) then
-	    ncards = 0
-	else
-	    ncards = ((nitems-1) / nperline) + 1
-	endif
-	return
-	end
-
diff --git a/RBio/RBwrite_64.f b/RBio/RBwrite_64.f
deleted file mode 100644
index 5b7f2cb..0000000
--- a/RBio/RBwrite_64.f
+++ /dev/null
@@ -1,713 +0,0 @@
-c=======================================================================
-c=== RBio/RBwrite_64 ===================================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBkind: determine the type of a MATLAB matrix
-c-----------------------------------------------------------------------
-c
-c   input: a zero-based MATLAB sparse matrix
-c
-c	nrow	number of rows of A
-c	ncol	number of columns of A
-c	Ap	size ncol+1, column pointers
-c	Ai	size nnz, row indices (nnz = Ap (ncol+1))
-c	Ax	size nnz, real values
-c	Az	size nnz, imaginary values (not accessed if A is real)
-c	cmplex	1 if A is complex, 0 otherwise
-c
-c   output:
-c	mkind:	r: 0 (real), p: 1 (pattern), c: 2 (complex),
-c		i: 3 (integer)
-c	skind:  r: -1 (rectangular), u: 0 (unsymmetric), s: 1 symmetric,
-c		h: 2 (Hermitian), z: 3 (skew symmetric)
-c
-c   workspace:
-c	munch	size ncol+1, not defined on input or output
-c
-c   Note that the MATLAB matrix is zero-based (Ap and Ai).  1 must be
-c   added whenever they are used (see "1+" in the code below).
-c
-c   See also SuiteSparse/CHOLMOD/MatrixOps/cholmod_symmetry.c, which
-c   also determines if the diagonal is positive.
-c-----------------------------------------------------------------------
-
-	subroutine RBkind (nrow, ncol, Ap, Ai, Ax, Az,
-     $	    cmplex, mkind, skind, mtype, nnz, munch, kmin, kmax)
-
-	integer*8
-     $	    nrow, ncol, Ap (ncol+1), Ai (*), mkind, skind,
-     $	    munch (ncol+1), p, i, j, pt, nnz, k, kmin, kmax
-	integer*4 cmplex
-	double precision Ax (*), Az (*), x_r, x_i, xtr, xti
-	logical is_p, is_s, is_h, is_z, is_int
-	character mtype*3
-
-c	----------------------------------------------------------------
-c	determine numeric type (I*A, R*A, P*A, C*A)
-c	----------------------------------------------------------------
-
-c	pattern: if real and all entries are 1.
-c	integer: if real and all entries are integers.
-c	complex: if cmplex is 1.
-c	real: otherwise.
-
-	nnz = 1+ (Ap (ncol+1) - 1)
-	kmin = 0
-	kmax = 0
-
-	if (cmplex .eq. 1) then
-c	    complex matrix (C*A)
-	    mtype (1:1) = 'c'
-	    mkind = 2
-	else
-c	    select P** format if all entries are equal to 1
-c	    select I** format if all entries are integer and
-c	    between -99,999,999 and +999,999,999
-	    is_p = .true.
-	    is_int = .true.
-	    k = dint (Ax (1))
-	    kmin = k
-	    kmax = k
-	    do 10 p = 1, nnz
-		if (Ax (p) .ne. 1) then
-		    is_p = .false.
-		endif
-		k = dint (Ax (p))
-		kmin = min (kmin, k)
-		kmax = max (kmax, k)
-		if (k .ne. Ax (p)) then
-		    is_int = .false.
-		endif
-		if (k .le. -99999999 .or. k .ge. 999999999) then
-c		    use real format for really big integers
-		    is_int = .false.
-		endif
-		if (.not. is_int .and. .not. is_p) then
-		    goto 20
-		endif
-10		continue
-20	    continue
-	    if (is_p) then
-c		pattern-only matrix (P*A)
-		mtype (1:1) = 'p'
-		mkind = 1
-	    elseif (is_int) then
-c		integer matrix (I*A)
-		mtype (1:1) = 'i'
-		mkind = 3
-	    else
-c		real matrix (R*A)
-		mtype (1:1) = 'r'
-		mkind = 0
-	    endif
-	endif
-
-c	only assembled matrices are handled
-	mtype (3:3) = 'a'
-
-c	----------------------------------------------------------------
-c	determine symmetry (*RA, *UA, *SA, *HA, *ZA)
-c	----------------------------------------------------------------
-
-c	Note that A must have sorted columns for this method to work.
-c	This is not checked, since all MATLAB matrices "should" have
-c	sorted columns.  Use spcheck(A) to check for this, if needed.
-
-	if (nrow .ne. ncol) then
-c	    rectangular matrix (*RA), no need to check values or pattern
-	    mtype (2:2) = 'r'
-	    skind = -1
-	    return
-	endif
-
-c	if complex, the matrix is Hermitian until proven otherwise
-	is_h = (cmplex .eq. 1)
-
-c	the matrix is symmetric until proven otherwise
-	is_s = .true.
-
-c	a non-pattern matrix is skew symmetric until proven otherwise
-	is_z = (mkind .ne. 1)
-
-c	if this method returns early, the matrix is unsymmetric
-	mtype (2:2) = 'u'
-	skind = 0
-
-c	initialize the munch pointers
-	do 30 j = 1, ncol
-	    munch (j) = 1+ (Ap (j))
-30	continue
-
-	do 50 j = 1, ncol
-
-c	    consider all entries not yet munched in column j
-	    do 40 p = munch (j), 1+ (Ap (j+1)-1)
-
-		i = 1+ (Ai (p))
-
-		if (i .lt. j) then
-c		    entry A(i,j) is unmatched, matrix is unsymmetric
-		    return
-		endif
-
-c		get the A(j,i) entry, if it exists
-		pt = munch (i)
-
-c		munch the A(j,i) entry
-		munch (i) = pt + 1
-
-		if (pt .ge. 1+ (Ap (i+1))) then
-c		    entry A(j,i) doesn't exist, matrix unsymmetric
-		    return
-		endif
-
-		if (1+ (Ai (pt)) .ne. j) then
-c		    entry A(j,i) doesn't exist, matrix unsymmetric
-		    return
-		endif
-
-c		A(j,i) exists; check its value with A(i,j)
-
-		if (cmplex .eq. 1) then
-
-c		    get A(i,j)
-		    x_r = Ax (p)
-		    x_i = Az (p)
-c		    get A(j,i)
-		    xtr = Ax (pt)
-		    xti = Az (pt)
-		    if (x_r .ne. xtr .or. x_i .ne. xti) then
-c			the matrix cannot be *SA
-			is_s = .false.
-		    endif
-		    if (x_r .ne. -xtr .or. x_i .ne. -xti) then
-c			the matrix cannot be *ZA
-			is_z = .false.
-		    endif
-		    if (x_r .ne. xtr .or. x_i .ne. -xti) then
-c			the matrix cannot be *HA
-			is_h = .false.
-		    endif
-
-		else
-
-c		    get A(i,j)
-		    x_r = Ax (p)
-c		    get A(j,i)
-		    xtr = Ax (pt)
-		    if (x_r .ne. xtr) then
-c			the matrix cannot be *SA
-			is_s = .false.
-		    endif
-		    if (x_r .ne. -xtr) then
-c			the matrix cannot be *ZA
-			is_z = .false.
-		    endif
-
-		endif
-
-		if (.not. (is_s .or. is_z .or. is_h)) then
-c		    matrix is unsymmetric; terminate the test
-		    return
-		endif
-
-40	    continue
-50	continue
-
-c	----------------------------------------------------------------
-c	return the symmetry
-c	----------------------------------------------------------------
-
-	if (is_h) then
-c	    Hermitian matrix (*HA)
-	    mtype (2:2) = 'h'
-	    skind = 2
-	elseif (is_s) then
-c	    symmetric matrix (*SA)
-	    mtype (2:2) = 's'
-	    skind = 1
-	elseif (is_z) then
-c	    skew symmetric matrix (*ZA)
-	    mtype (2:2) = 'z'
-	    skind = 3
-	endif
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBformat: determine the format required for an array of values
-c-----------------------------------------------------------------------
-c
-c This function ensures that a sufficiently wide format is used that
-c can accurately represent the data.  It also ensures that when printed,
-c the numerical values all have at least one blank space between them.
-c This makes it trivial for a program written in C (say) to read in a
-c matrix generated by RBwrite.
-
-c ww, valfmt, valn, and is_int must be defined on input.  They
-c are modified on output.
-c-----------------------------------------------------------------------
-
-	subroutine RBformat (nnz, x, ww, valfmt, valn, is_int,
-     $	    kmin, kmax)
-	integer*8
-     $	    nnz, i, ww, k, nf (18), valn, nd (9), kmin, kmax
-	double precision x (nnz), e, a, b
-	logical is_int
-	character*20 f (18), d (9), valfmt
-	character*80 s
-
-c	----------------------------------------------------------------
-c	define all possible formats
-c	----------------------------------------------------------------
-
-	f (1)  = '(8E9.1)             '
-	f (2)  = '(8E10.2)            '
-	f (3)  = '(7E11.3)            '
-	f (4)  = '(6E12.4)            '
-	f (5)  = '(6E13.5)            '
-	f (6)  = '(5E14.6)            '
-	f (7)  = '(5E15.7)            '
-	f (8)  = '(5E16.8)            '
-	f (9)  = '(4E17.9)            '
-	f (10) = '(4E18.10)           '
-	f (11) = '(4E19.11)           '
-	f (12) = '(4E20.12)           '
-	f (13) = '(3E21.13)           '
-	f (14) = '(3E22.14)           '
-	f (15) = '(3E23.15)           '
-	f (16) = '(3E24.16)           '
-	f (17) = '(3E25.17)           '
-	f (18) = '(3E26.18)           '
-
-	nf (1)  = 8
-	nf (2)  = 8
-	nf (3)  = 7
-	nf (4)  = 6
-	nf (5)  = 6
-	nf (6)  = 5
-	nf (7)  = 5
-	nf (8)  = 5
-	nf (9)  = 4
-	nf (10) = 4
-	nf (11) = 4
-	nf (12) = 4
-	nf (13) = 3
-	nf (14) = 3
-	nf (15) = 3
-	nf (16) = 3
-	nf (17) = 3
-	nf (18) = 3
-
-	if (is_int) then
-
-c	    ------------------------------------------------------------
-c	    use an integer format
-c	    ------------------------------------------------------------
-
-	    call RBiformat (kmin, kmax, valfmt, valn, ww)
-
-	else
-
-c	    ------------------------------------------------------------
-c	    determine if the matrix has huge values or NaN's
-c	    ------------------------------------------------------------
-
-	    do 10 i = 1, nnz
-		a = abs (x (i))
-		if (a .ne. 0) then
-		    if (a .ne. a .or. a < 1d-90 .or. a > 1d90) then
-			ww = 18
-			valfmt = '(2E30.18E3)         '
-			valn = 2
-			return
-		    endif
-		endif
-10	    continue
-
-c	    ------------------------------------------------------------
-c	    find the required precision for a real or complex matrix
-c	    ------------------------------------------------------------
-
-	    do 20 i = 1, nnz
-		a = x (i)
-		do 30 k = ww,18
-c		    write the value to a string, read back in, and check
-		    write (unit = s, fmt = f(k)) a
-		    read  (unit = s, fmt = f(k)) b
-		    if (a .eq. b) then
-			ww = max (ww, k)
-			goto 40
-		    endif
-30		continue
-40		continue
-		ww = max (ww, k)
-20	    continue
-
-c	    valn is the number of entries per line
-	    valfmt = f (ww)
-	    valn = nf (ww)
-
-	endif
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBwrite: write portions of the matrix to the file
-c-----------------------------------------------------------------------
-c
-c   task 0: just count the total number of entries in the matrix
-c   task 1: do task 0, and also construct w and cp
-c   task 2: write the row indices
-c   task 3: write the numerical values
-c
-c   Note that the MATLAB arrays A and Z are zero-based.  "1+" is added
-c   to each use of Ap, Ai, Zp, and Zi.
-c-----------------------------------------------------------------------
-
-	subroutine RBwrite (task, nrow, ncol, skind, cmplex, doZ, Ap,
-     $	    Ai, Ax, Az, Zp, Zi, mkind,
-     $	    indfmt, indn, valfmt, valn, nnz, w, cp)
-
-	integer*8
-     $	    task, nrow, ncol, Ap (*), Ai (*), Zp (*), Zi (*),
-     $	    cp (*), w (*), nnz, znz, ibuf (80), j, i, nbuf, pa, pz,
-     $	    paend, pzend, ia, iz, skind, indn, valn, p, mkind
-	integer*4 cmplex
-	logical doZ
-	double precision xbuf (80), xr, xi, Ax (*), Az (*)
-	character valfmt*20, indfmt*20
-
-c	----------------------------------------------------------------
-c	determine number of entries in Z
-c	----------------------------------------------------------------
-
-	if (doZ) then
-	    znz = 1+ (Zp (ncol+1) - 1)
-	else
-	    znz = 0
-	endif
-
-c	clear the nonzero counts
-	nnz = 0
-	do 10 j = 1, ncol
-	    w (j) = 0
-10	continue
-
-c	start with an empty buffer
-	nbuf = 0
-
-	if (znz .eq. 0) then
-
-c	    ------------------------------------------------------------
-c	    no Z present
-c	    ------------------------------------------------------------
-
-	    do 30 j = 1, ncol
-
-		do 20 pa = 1+ (Ap (j)), 1+ (Ap (j+1) - 1)
-
-		    i = 1+ (Ai (pa))
-		    xr = Ax (pa)
-		    if (cmplex .eq. 1) then
-			xi = Az (pa)
-		    endif
-
-		    if (skind .le. 0 .or. i .ge. j) then
-
-c			consider the (i,j) entry with value (xr,xi)
-			nnz = nnz + 1
-			if (task .eq. 1) then
-c			    only determining nonzero counts
-			    w (j) = w (j) + 1
-			elseif (task .eq. 2) then
-c			    printing the row indices
-			    call RBiprint (indfmt, ibuf, nbuf, i, indn)
-			elseif (task .eq. 3) then
-c			    printing the numerical values
-			    call RBxprint (valfmt, xbuf, nbuf, xr,
-     $				    valn, mkind)
-			    if (cmplex .eq. 1) then
-				call RBxprint (valfmt, xbuf, nbuf, xi,
-     $				    valn, mkind)
-			    endif
-			endif
-
-		    endif
-
-20		continue
-30	    continue
-
-	else
-
-c	    ------------------------------------------------------------
-c	    symmetric, unsymmetric or rectangular matrix, with Z present
-c	    ------------------------------------------------------------
-
-	    do 40 j = 1, ncol
-
-c		find the set union of A (:,j) and Z (:,j)
-
-		pa = 1+ (Ap (j))
-		pz = 1+ (Zp (j))
-		paend = 1+ (Ap (j+1) - 1)
-		pzend = 1+ (Zp (j+1) - 1)
-
-c		while entries appear in A or Z
-70		continue
-
-c		    get the next entry from A(:,j)
-		    if (pa .le. paend) then
-			ia = 1+ (Ai (pa))
-		    else
-			ia = 1+ nrow
-		    endif
-
-c		    get the next entry from Z(:,j)
-		    if (pz .le. pzend) then
-			iz = 1+ (Zi (pz))
-		    else
-			iz = 1+ nrow
-		    endif
-
-c		    exit loop if neither entry is present
-		    if (ia .gt. nrow .and. iz .gt. nrow) goto 80
-
-		    if (ia .lt. iz) then
-c			get A (i,j)
-			i = ia
-			xr = Ax (pa)
-			if (cmplex .eq. 1) then
-			    xi = Az (pa)
-			endif
-			pa = pa + 1
-		    else if (iz .lt. ia) then
-c			get Z (i,j)
-			i = iz
-			xr = 0
-			xi = 0
-			pz = pz + 1
-		    else
-c			get A (i,j), and delete its matched Z(i,j)
-			i = ia
-			xr = Ax (pa)
-			if (cmplex .eq. 1) then
-			    xi = Az (pa)
-			endif
-			pa = pa + 1
-			pz = pz + 1
-		    endif
-
-		    if (skind .le. 0 .or. i .ge. j) then
-
-c			consider the (i,j) entry with value (xr,xi)
-			nnz = nnz + 1
-			if (task .eq. 1) then
-c			    only determining nonzero counts
-			    w (j) = w (j) + 1
-			elseif (task .eq. 2) then
-c			    printing the row indices
-			    call RBiprint (indfmt, ibuf, nbuf, i, indn)
-			elseif (task .eq. 3) then
-c			    printing the numerical values
-			    call RBxprint (valfmt, xbuf, nbuf, xr,
-     $				    valn, mkind)
-			    if (cmplex .eq. 1) then
-				call RBxprint (valfmt, xbuf, nbuf, xi,
-     $				    valn, mkind)
-			    endif
-			endif
-
-		    endif
-
-		    goto 70
-
-c		end of while loop
-80		continue
-
-40	    continue
-
-	endif
-
-c	----------------------------------------------------------------
-c	determine the new column pointers, or finish printing
-c	----------------------------------------------------------------
-
-	if (task .eq. 1) then
-
-	    cp (1) = 1
-	    do 100 j = 2, ncol+1
-		cp (j) = cp (j-1) + w (j-1)
-100	    continue
-
-	else if (task .eq. 2) then
-
-	    call RBiflush (indfmt, ibuf, nbuf)
-
-	elseif (task .eq. 3) then
-
-	    call RBxflush (valfmt, xbuf, nbuf, mkind)
-
-	endif
-
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBiprint: print a single integer to the file, flush buffer if needed
-c-----------------------------------------------------------------------
-
-	subroutine RBiprint (indfmt, ibuf, nbuf, i, indn)
-	character indfmt*20
-	integer*8
-     $	    ibuf (80), nbuf, i, indn
-	if (nbuf .ge. indn) then
-	    call RBiflush (indfmt, ibuf, nbuf)
-	    nbuf = 0
-	endif
-	nbuf = nbuf + 1
-	ibuf (nbuf) = i
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBiflush: flush the integer buffer to the file
-c-----------------------------------------------------------------------
-
-	subroutine RBiflush (indfmt, ibuf, nbuf)
-	character indfmt*20
-	integer*8
-     $	    ibuf (*), nbuf, k
-	write (unit = 7, fmt = indfmt, err = 999) (ibuf (k), k = 1,nbuf)
-	return
-999	call mexErrMsgTxt ('error writing ints')
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBxprint: print a single real to the file, flush the buffer if needed
-c-----------------------------------------------------------------------
-
-	subroutine RBxprint (valfmt, xbuf, nbuf, x, valn, mkind)
-	character valfmt*20
-	integer*8
-     $	    nbuf, valn, mkind
-	double precision xbuf (80), x
-	if (nbuf .ge. valn) then
-	    call RBxflush (valfmt, xbuf, nbuf, mkind)
-	    nbuf = 0
-	endif
-	nbuf = nbuf + 1
-	xbuf (nbuf) = x
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBxflush: flush the real buffer to the file
-c-----------------------------------------------------------------------
-
-	subroutine RBxflush (valfmt, xbuf, nbuf, mkind)
-	character valfmt*20
-	integer*8
-     $	    nbuf, k, ibuf (80), mkind
-	double precision xbuf (80)
-	if (mkind .eq. 3) then
-c	    convert to integer first; valfmt is (10I8), for example
-	    do 10 k = 1,nbuf
-		ibuf (k) = dint (xbuf (k))
-10	    continue
-	    write (unit = 7, fmt = valfmt, err = 999)
-     $		(ibuf (k), k = 1,nbuf)
-	else
-	    write (unit = 7, fmt = valfmt, err = 999)
-     $		(xbuf (k), k = 1,nbuf)
-	endif
-	return
-999	call mexErrMsgTxt ('error writing numerical values')
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBiformat: determine format for printing an integer
-c-----------------------------------------------------------------------
-
-	subroutine RBiformat (kmin, kmax, indfmt, indn, ww)
-	integer*8
-     $	    n, indn, kmin, kmax, ww
-	character*20 indfmt
-
-	if (kmin .ge. 0. and. kmax .le. 9) then
-	    indfmt = '(40I2)              '
-	    ww = 2
-	    indn = 40
-	elseif (kmin .ge. -9 .and. kmax .le. 99) then
-	    indfmt = '(26I3)              '
-	    ww = 3
-	    indn = 26
-	elseif (kmin .ge. -99 .and. kmax .le. 999) then
-	    indfmt = '(20I4)              '
-	    ww = 4
-	    indn = 20
-	elseif (kmin .ge. -999 .and. kmax .le. 9999) then
-	    indfmt = '(16I5)              '
-	    ww = 5
-	    indn = 16
-	elseif (kmin .ge. -9999 .and. kmax .le. 99999) then
-	    indfmt = '(13I6)              '
-	    ww = 6
-	    indn = 13
-	elseif (kmin .ge. -99999 .and. kmax .le. 999999) then
-	    indfmt = '(11I7)              '
-	    ww = 7
-	    indn = 11
-	elseif (kmin .ge. -999999 .and. kmax .le. 9999999) then
-	    indfmt = '(10I8)              '
-	    ww = 8
-	    indn = 10
-	elseif (kmin .ge. -9999999 .and. kmax .le. 99999999) then
-	    indfmt = '(8I9)               '
-	    ww = 9
-	    indn = 8
-	elseif (kmin .ge. -99999999 .and. kmax .le. 999999999) then
-	    indfmt = '(8I10)               '
-	    ww = 10
-	    indn = 8
-	else
-	    indfmt = '(5I15)               '
-	    ww = 15
-	    indn = 5
-	endif
-	return
-	end
-
-
-c-----------------------------------------------------------------------
-c RBcards: determine number of cards required
-c-----------------------------------------------------------------------
-
-	subroutine RBcards (nitems, nperline, ncards)
-	integer*8
-     $	    nitems, nperline, ncards
-	if (nitems .eq. 0) then
-	    ncards = 0
-	else
-	    ncards = ((nitems-1) / nperline) + 1
-	endif
-	return
-	end
-
diff --git a/RBio/RBwrite_mex_32.f b/RBio/RBwrite_mex_32.f
deleted file mode 100644
index 3a4ea30..0000000
--- a/RBio/RBwrite_mex_32.f
+++ /dev/null
@@ -1,324 +0,0 @@
-c=======================================================================
-c=== RBio/RBwrite_mex_32 ===============================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBwrite mexFunction: write a sparse matrix to a Rutherford/Boeing file
-c-----------------------------------------------------------------------
-c
-c   mtype = RBwrite (filename, A, Z, title, key)
-c
-c   A: a sparse matrix (no explicit zero entries)
-c   Z: binary pattern of explicit zero entries to include in the
-c	Rutherford/Boeing file.  This always has the same size as A,
-c	and is always sparse.  Not used if [ ], or if nnz(Z) is 0.
-c   title: title of Rutherford/Boeing file, up to 72 characters
-c   key: the name of the matrix, up to 8 characters
-c
-c   Z is optional.  RBwrite (filename, A) uses a default 
-c   title and key, and does not include any explicit zeros.
-c   RBwrite (filname, A, 'title...', 'key') uses the given title and
-c   key, with no Z matrix.
-c
-c   A must be sparse.  Z must be empty, or sparse.
-c
-c   mtype is a 3-character string with the file-type used
-c   mtype(1):  r: 0 (real), p: 1 (pattern), c: 2 (complex),
-c	       i: 3 (ineger)
-c   mtype(2):  r: -1 (rectangular), u: 0 (unsymmetric), s: 1 symmetric,
-c	       h: 2 (Hermitian), z: 3 (skew symmetric)
-c   mtype(3):  a: assembled matrix
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*4
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxIsChar, mxClassIDFromClassName,
-     $	    mxIsClass, mxIsSparse, mxIsComplex
-
-	integer*4
-     $	    mxGetM, mxGetN, mxGetJc, mxGetIr, mxGetPr, mxGetPi,
-     $	    mxGetString, mxGetData, mxCreateNumericMatrix,
-     $	    mxCreateString
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*4
-     $	    nrow, ncol, nnz, mkind, cp, info, zmin, zmax,
-     $	    skind, wmat, cpmat, ww, kmin, kmax, task,
-     $	    Ap, Ai, Ax, Az, Zp, Zi, Zx, Zz, znz, zrow, zcol, i,
-     $	    mzkind, szkind, totcrd, ptrcrd, indcrd, valcrd, nw, one,
-     $	    w, valn, valn2, indn, nnz2, ptrn, i1, ititle, vals
-	integer*4 iclass, cmplex, wcmplex
-	character title*72, key*8, mtype*3, ptrfmt*20, indfmt*20,
-     $	    valfmt*20, filename*1024, fmt2*20, ztype*3
-	double precision t
-	logical doZ, l1, is_int
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .lt. 2 .or. nargin .gt. 5. .or. nargout .gt. 2 .or.
-     $	    mxIsChar (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt
-     $	    ('[m s] = RBwrite (filename, A, Z, title, key)')
-	endif
-
-c	----------------------------------------------------------------
-c	get filename
-c	----------------------------------------------------------------
-
-	if (mxGetString (pargin (1), filename, 1024) .ne. 0) then
-	    call mexErrMsgTxt ('filename too long')
-	endif
-	close (unit = 7)
-	open (unit = 7, file = filename, err = 998)
-
-c	----------------------------------------------------------------
-c	get A
-c	----------------------------------------------------------------
-
-	if (mxIsClass (pargin (2), 'double') .ne. 1 .or.
-     $	    mxIsSparse (pargin (2)) .ne. 1) then
-	    call mexErrMsgTxt ('A must be sparse and double')
-	endif
-	cmplex = mxIsComplex (pargin (2))
-	Ap = mxGetJc (pargin (2))
-	Ai = mxGetIr (pargin (2))
-	Ax = mxGetPr (pargin (2))
-	Az = mxGetPi (pargin (2))
-	nrow = mxGetM (pargin (2))
-	ncol = mxGetN (pargin (2))
-
-c	----------------------------------------------------------------
-c	get title and key
-c	----------------------------------------------------------------
-
-	do 5 i = 1, 72
-	    title (i:i) = ' '
-5	continue
-	key = '        '
-
-	ititle = 99
-	do 15 i = 3, nargin
-	    if (mxIsChar (pargin (i)) .eq. 1) then
-		if (ititle .eq. 99) then
-c		    get the title, up to 72 characters long
-		    i1 = mxGetString (pargin (i), title, 72)
-		    ititle = i
-		else
-c		    get the key, up to 8 characters long
-		    i1 = mxGetString (pargin (i), key, 8)
-		endif
-	    endif
-15	continue
-
-c	place a marker in the title, so we know that the
-c	Rutherford/Boeing file was generated by the RBwrite mexFunction.
-
-	title (72:72) = '|'
-
-c	----------------------------------------------------------------
-c	get Z, if present
-c	----------------------------------------------------------------
-
-	if (nargin .ge. 3 .and. ititle .gt. 3) then
-
-	    zrow = mxGetM (pargin (3))
-	    zcol = mxGetN (pargin (3))
-
-	    if (zrow .eq. 0 .or. zcol .eq. 0) then
-
-c		--------------------------------------------------------
-c		Z matrix is empty
-c		--------------------------------------------------------
-
-		doZ = .false.
-
-	    else
-
-c		--------------------------------------------------------
-c		get the Z matrix
-c		--------------------------------------------------------
-
-		if (mxIsClass (pargin (3), 'double') .ne. 1 .or.
-     $		    mxIsSparse (pargin (3)) .ne. 1 .or.
-     $		    mxIsComplex (pargin (3)) .ne. 0 .or.
-     $		    zrow .ne. nrow .or. zcol .ne. ncol) then
-		    call mexErrMsgTxt
-     $		  ('Z must be sparse, double, real, and same size as A')
-		endif
-		Zp = mxGetJc (pargin (3))
-		Zi = mxGetIr (pargin (3))
-		Zx = mxGetPr (pargin (3))
-		Zz = mxGetPi (pargin (3))
-		doZ = .true.
-
-	    endif
-
-	else
-
-c	    ------------------------------------------------------------
-c	    no Z matrix is present
-c	    ------------------------------------------------------------
-
-	    doZ = .false.
-
-	endif
-
-c	----------------------------------------------------------------
-c	get workspace
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int32')
-	nw = max (nrow, ncol) + 1
-	one = 1
-	wcomplex = 0
-	wmat  = mxCreateNumericMatrix (nw, one, iclass, wcmplex)
-	cpmat = mxCreateNumericMatrix (nw, one, iclass, wcmplex)
-	w = mxGetData (wmat)
-	cp = mxGetData (cpmat)
-
-c	----------------------------------------------------------------
-c	determine the matrix type (RSA, RUA, etc)
-c	----------------------------------------------------------------
-
-c	find the symmetry of A (mkind, skind), and nnz(A)
-	call RBkind (nrow, ncol, %val(Ap), %val(Ai), %val(Ax),
-     $	    %val(Az), cmplex, mkind, skind, mtype, nnz, %val(cp),
-     $	    kmin, kmax)
-
-	if (doZ) then
-c	    find the symmetry of Z and find nnz(Z)
-	    call RBkind (nrow, ncol, %val(Zp), %val(Zi), %val(Zx),
-     $		%val(Zz), 0, mzkind, szkind, ztype, znz, %val(cp),
-     $		zmin, zmax)
-	    if (znz .eq. 0) then
-c		ignore the Z matrix
-		doZ = .false.
-	    elseif (szkind .le. 0) then
-c		if Z is unsymmetric, then A+Z is unsymmetric too
-		skind = szkind
-	    endif
-	endif
-
-	pargout (1) = mxCreateString (mtype)
-
-c	----------------------------------------------------------------
-c	determine the required precision
-c	----------------------------------------------------------------
-
-	indfmt = '                '
-	valfmt = '                    '
-	is_int = mkind .eq. 3
-	ww = 1
-	if (mkind .ne. 1) then
-	    call RBformat (nnz, %val (Ax), ww, valfmt, valn, is_int,
-     $		kmin, kmax)
-	    if (cmplex .eq. 1) then
-		call RBformat (nnz, %val (Az), ww, valfmt, valn, is_int,
-     $		kmin, kmax)
-	    endif
-	endif
-
-c	----------------------------------------------------------------
-c	determine the number of entries in the matrix A+Z
-c	----------------------------------------------------------------
-
-	task = 1
-	call RBwrite (task, nrow, ncol, skind, cmplex, doZ, %val(Ap),
-     $	    %val(Ai), %val(Ax), %val(Az), %val(Zp), %val(Zi), mkind,
-     $	    indfmt, indn, valfmt, valn, nnz2, %val(w), %val(cp))
-
-	if (nnz2 .eq. 0) then
-	    call mexErrMsgTxt ('empty matrices not handled')
-	endif
-
-c	determine pointer format.  ncol+1 integers, largest is nnz2+1
-	call RBiformat (1, nnz2+1, ptrfmt, ptrn, i)
-	call RBcards (ncol+1, ptrn, ptrcrd)
-
-c	determine row index format.  nnz2 integers, largest is nrow
-	call RBiformat (1, nrow, indfmt, indn, i)
-	call RBcards (nnz2, indn, indcrd)
-
-c	determine how many lines for the numerical values
-	if (mkind .eq. 0 .or. mkind .eq. 3) then
-c	    real or integer
-	    vals = 1
-	elseif (mkind .eq. 1) then
-c	    pattern
-	    vals = 0
-	else
-c	    complex
-	    vals = 2
-	endif
-	call RBcards (vals*nnz2, valn, valcrd)
-
-c	----------------------------------------------------------------
-c	determine total number of cards
-c	----------------------------------------------------------------
-
-	totcrd = ptrcrd + indcrd + valcrd
-
-c	----------------------------------------------------------------
-c	write the header
-c	----------------------------------------------------------------
-
-        write (unit = 7, fmt = 10, err = 999)
-     $          title, key,
-     $          totcrd, ptrcrd, indcrd, valcrd,
-     $          mtype, nrow, ncol, nnz2, 0,
-     $          ptrfmt, indfmt, valfmt
-10      format (a72, a8 / 4i14 / a3, 11x, 4i14 / 2a16, a20)
-
-c	----------------------------------------------------------------
-c	write the pointers
-c	----------------------------------------------------------------
-
-	call RBiflush (ptrfmt, %val (cp), ncol+1)
-
-c	----------------------------------------------------------------
-c	write the row indices
-c	----------------------------------------------------------------
-
-	task = 2
-	call RBwrite (task, nrow, ncol, skind, cmplex, doZ, %val(Ap),
-     $	    %val(Ai), %val(Ax), %val(Az), %val(Zp), %val(Zi), mkind,
-     $	    indfmt, indn, valfmt, valn, nnz2, %val(w), %val(cp))
-
-c	----------------------------------------------------------------
-c	write the numerical values
-c	----------------------------------------------------------------
-
-	if (mkind .ne. 1) then
-	    task = 3
-	    call RBwrite(task, nrow, ncol, skind, cmplex, doZ, %val(Ap),
-     $		%val(Ai), %val(Ax), %val(Az), %val(Zp), %val(Zi), mkind,
-     $		indfmt, indn, valfmt, valn, nnz2, %val(w), %val(cp))
-	endif
-
-c	----------------------------------------------------------------
-c	free workspace and return
-c	----------------------------------------------------------------
-
-	close (unit = 7)
-	call mxDestroyArray (%val (cpmat))
-	return
-998	call mexErrMsgTxt ('error openning file')
-999	call mexErrMsgTxt ('error writing file')
-	end
diff --git a/RBio/RBwrite_mex_64.f b/RBio/RBwrite_mex_64.f
deleted file mode 100644
index b76a5d2..0000000
--- a/RBio/RBwrite_mex_64.f
+++ /dev/null
@@ -1,324 +0,0 @@
-c=======================================================================
-c=== RBio/RBwrite_mex_64 ===============================================
-c=======================================================================
-
-c RBio: a MATLAB toolbox for reading and writing sparse matrices in
-c Rutherford/Boeing format.
-c Copyright (c) 2007, Timothy A. Davis, Univ. of Florida
-
-
-c-----------------------------------------------------------------------
-c RBwrite mexFunction: write a sparse matrix to a Rutherford/Boeing file
-c-----------------------------------------------------------------------
-c
-c   mtype = RBwrite (filename, A, Z, title, key)
-c
-c   A: a sparse matrix (no explicit zero entries)
-c   Z: binary pattern of explicit zero entries to include in the
-c	Rutherford/Boeing file.  This always has the same size as A,
-c	and is always sparse.  Not used if [ ], or if nnz(Z) is 0.
-c   title: title of Rutherford/Boeing file, up to 72 characters
-c   key: the name of the matrix, up to 8 characters
-c
-c   Z is optional.  RBwrite (filename, A) uses a default 
-c   title and key, and does not include any explicit zeros.
-c   RBwrite (filname, A, 'title...', 'key') uses the given title and
-c   key, with no Z matrix.
-c
-c   A must be sparse.  Z must be empty, or sparse.
-c
-c   mtype is a 3-character string with the file-type used
-c   mtype(1):  r: 0 (real), p: 1 (pattern), c: 2 (complex),
-c	       i: 3 (ineger)
-c   mtype(2):  r: -1 (rectangular), u: 0 (unsymmetric), s: 1 symmetric,
-c	       h: 2 (Hermitian), z: 3 (skew symmetric)
-c   mtype(3):  a: assembled matrix
-c-----------------------------------------------------------------------
-
-	subroutine mexfunction (nargout, pargout, nargin, pargin)
-	integer*8
-     $	    pargout (*), pargin (*)
-	integer*4 nargout, nargin
-
-c	----------------------------------------------------------------
-c	MATLAB functions
-c	----------------------------------------------------------------
-
-	integer*4 mxIsChar, mxClassIDFromClassName,
-     $	    mxIsClass, mxIsSparse, mxIsComplex
-
-	integer*8
-     $	    mxGetM, mxGetN, mxGetJc, mxGetIr, mxGetPr, mxGetPi,
-     $	    mxGetString, mxGetData, mxCreateNumericMatrix,
-     $	    mxCreateString
-
-c	----------------------------------------------------------------
-c	local variables
-c	----------------------------------------------------------------
-
-	integer*8
-     $	    nrow, ncol, nnz, mkind, cp, info, zmin, zmax,
-     $	    skind, wmat, cpmat, ww, kmin, kmax, task,
-     $	    Ap, Ai, Ax, Az, Zp, Zi, Zx, Zz, znz, zrow, zcol, i,
-     $	    mzkind, szkind, totcrd, ptrcrd, indcrd, valcrd, nw, one,
-     $	    w, valn, valn2, indn, nnz2, ptrn, i1, ititle, vals
-	integer*4 iclass, cmplex, wcmplex
-	character title*72, key*8, mtype*3, ptrfmt*20, indfmt*20,
-     $	    valfmt*20, filename*1024, fmt2*20, ztype*3
-	double precision t
-	logical doZ, l1, is_int
-
-c	----------------------------------------------------------------
-c	check inputs
-c	----------------------------------------------------------------
-
-	if (nargin .lt. 2 .or. nargin .gt. 5. .or. nargout .gt. 2 .or.
-     $	    mxIsChar (pargin (1)) .ne. 1) then
-	    call mexErrMsgTxt
-     $	    ('[m s] = RBwrite (filename, A, Z, title, key)')
-	endif
-
-c	----------------------------------------------------------------
-c	get filename
-c	----------------------------------------------------------------
-
-	if (mxGetString (pargin (1), filename, 1024) .ne. 0) then
-	    call mexErrMsgTxt ('filename too long')
-	endif
-	close (unit = 7)
-	open (unit = 7, file = filename, err = 998)
-
-c	----------------------------------------------------------------
-c	get A
-c	----------------------------------------------------------------
-
-	if (mxIsClass (pargin (2), 'double') .ne. 1 .or.
-     $	    mxIsSparse (pargin (2)) .ne. 1) then
-	    call mexErrMsgTxt ('A must be sparse and double')
-	endif
-	cmplex = mxIsComplex (pargin (2))
-	Ap = mxGetJc (pargin (2))
-	Ai = mxGetIr (pargin (2))
-	Ax = mxGetPr (pargin (2))
-	Az = mxGetPi (pargin (2))
-	nrow = mxGetM (pargin (2))
-	ncol = mxGetN (pargin (2))
-
-c	----------------------------------------------------------------
-c	get title and key
-c	----------------------------------------------------------------
-
-	do 5 i = 1, 72
-	    title (i:i) = ' '
-5	continue
-	key = '        '
-
-	ititle = 99
-	do 15 i = 3, nargin
-	    if (mxIsChar (pargin (i)) .eq. 1) then
-		if (ititle .eq. 99) then
-c		    get the title, up to 72 characters long
-		    i1 = mxGetString (pargin (i), title, 72)
-		    ititle = i
-		else
-c		    get the key, up to 8 characters long
-		    i1 = mxGetString (pargin (i), key, 8)
-		endif
-	    endif
-15	continue
-
-c	place a marker in the title, so we know that the
-c	Rutherford/Boeing file was generated by the RBwrite mexFunction.
-
-	title (72:72) = '|'
-
-c	----------------------------------------------------------------
-c	get Z, if present
-c	----------------------------------------------------------------
-
-	if (nargin .ge. 3 .and. ititle .gt. 3) then
-
-	    zrow = mxGetM (pargin (3))
-	    zcol = mxGetN (pargin (3))
-
-	    if (zrow .eq. 0 .or. zcol .eq. 0) then
-
-c		--------------------------------------------------------
-c		Z matrix is empty
-c		--------------------------------------------------------
-
-		doZ = .false.
-
-	    else
-
-c		--------------------------------------------------------
-c		get the Z matrix
-c		--------------------------------------------------------
-
-		if (mxIsClass (pargin (3), 'double') .ne. 1 .or.
-     $		    mxIsSparse (pargin (3)) .ne. 1 .or.
-     $		    mxIsComplex (pargin (3)) .ne. 0 .or.
-     $		    zrow .ne. nrow .or. zcol .ne. ncol) then
-		    call mexErrMsgTxt
-     $		  ('Z must be sparse, double, real, and same size as A')
-		endif
-		Zp = mxGetJc (pargin (3))
-		Zi = mxGetIr (pargin (3))
-		Zx = mxGetPr (pargin (3))
-		Zz = mxGetPi (pargin (3))
-		doZ = .true.
-
-	    endif
-
-	else
-
-c	    ------------------------------------------------------------
-c	    no Z matrix is present
-c	    ------------------------------------------------------------
-
-	    doZ = .false.
-
-	endif
-
-c	----------------------------------------------------------------
-c	get workspace
-c	----------------------------------------------------------------
-
-	iclass = mxClassIDFromClassName ('int64')
-	nw = max (nrow, ncol) + 1
-	one = 1
-	wcomplex = 0
-	wmat  = mxCreateNumericMatrix (nw, one, iclass, wcmplex)
-	cpmat = mxCreateNumericMatrix (nw, one, iclass, wcmplex)
-	w = mxGetData (wmat)
-	cp = mxGetData (cpmat)
-
-c	----------------------------------------------------------------
-c	determine the matrix type (RSA, RUA, etc)
-c	----------------------------------------------------------------
-
-c	find the symmetry of A (mkind, skind), and nnz(A)
-	call RBkind (nrow, ncol, %val(Ap), %val(Ai), %val(Ax),
-     $	    %val(Az), cmplex, mkind, skind, mtype, nnz, %val(cp),
-     $	    kmin, kmax)
-
-	if (doZ) then
-c	    find the symmetry of Z and find nnz(Z)
-	    call RBkind (nrow, ncol, %val(Zp), %val(Zi), %val(Zx),
-     $		%val(Zz), 0, mzkind, szkind, ztype, znz, %val(cp),
-     $		zmin, zmax)
-	    if (znz .eq. 0) then
-c		ignore the Z matrix
-		doZ = .false.
-	    elseif (szkind .le. 0) then
-c		if Z is unsymmetric, then A+Z is unsymmetric too
-		skind = szkind
-	    endif
-	endif
-
-	pargout (1) = mxCreateString (mtype)
-
-c	----------------------------------------------------------------
-c	determine the required precision
-c	----------------------------------------------------------------
-
-	indfmt = '                '
-	valfmt = '                    '
-	is_int = mkind .eq. 3
-	ww = 1
-	if (mkind .ne. 1) then
-	    call RBformat (nnz, %val (Ax), ww, valfmt, valn, is_int,
-     $		kmin, kmax)
-	    if (cmplex .eq. 1) then
-		call RBformat (nnz, %val (Az), ww, valfmt, valn, is_int,
-     $		kmin, kmax)
-	    endif
-	endif
-
-c	----------------------------------------------------------------
-c	determine the number of entries in the matrix A+Z
-c	----------------------------------------------------------------
-
-	task = 1
-	call RBwrite (task, nrow, ncol, skind, cmplex, doZ, %val(Ap),
-     $	    %val(Ai), %val(Ax), %val(Az), %val(Zp), %val(Zi), mkind,
-     $	    indfmt, indn, valfmt, valn, nnz2, %val(w), %val(cp))
-
-	if (nnz2 .eq. 0) then
-	    call mexErrMsgTxt ('empty matrices not handled')
-	endif
-
-c	determine pointer format.  ncol+1 integers, largest is nnz2+1
-	call RBiformat (1, nnz2+1, ptrfmt, ptrn, i)
-	call RBcards (ncol+1, ptrn, ptrcrd)
-
-c	determine row index format.  nnz2 integers, largest is nrow
-	call RBiformat (1, nrow, indfmt, indn, i)
-	call RBcards (nnz2, indn, indcrd)
-
-c	determine how many lines for the numerical values
-	if (mkind .eq. 0 .or. mkind .eq. 3) then
-c	    real or integer
-	    vals = 1
-	elseif (mkind .eq. 1) then
-c	    pattern
-	    vals = 0
-	else
-c	    complex
-	    vals = 2
-	endif
-	call RBcards (vals*nnz2, valn, valcrd)
-
-c	----------------------------------------------------------------
-c	determine total number of cards
-c	----------------------------------------------------------------
-
-	totcrd = ptrcrd + indcrd + valcrd
-
-c	----------------------------------------------------------------
-c	write the header
-c	----------------------------------------------------------------
-
-        write (unit = 7, fmt = 10, err = 999)
-     $          title, key,
-     $          totcrd, ptrcrd, indcrd, valcrd,
-     $          mtype, nrow, ncol, nnz2, 0,
-     $          ptrfmt, indfmt, valfmt
-10      format (a72, a8 / 4i14 / a3, 11x, 4i14 / 2a16, a20)
-
-c	----------------------------------------------------------------
-c	write the pointers
-c	----------------------------------------------------------------
-
-	call RBiflush (ptrfmt, %val (cp), ncol+1)
-
-c	----------------------------------------------------------------
-c	write the row indices
-c	----------------------------------------------------------------
-
-	task = 2
-	call RBwrite (task, nrow, ncol, skind, cmplex, doZ, %val(Ap),
-     $	    %val(Ai), %val(Ax), %val(Az), %val(Zp), %val(Zi), mkind,
-     $	    indfmt, indn, valfmt, valn, nnz2, %val(w), %val(cp))
-
-c	----------------------------------------------------------------
-c	write the numerical values
-c	----------------------------------------------------------------
-
-	if (mkind .ne. 1) then
-	    task = 3
-	    call RBwrite(task, nrow, ncol, skind, cmplex, doZ, %val(Ap),
-     $		%val(Ai), %val(Ax), %val(Az), %val(Zp), %val(Zi), mkind,
-     $		indfmt, indn, valfmt, valn, nnz2, %val(w), %val(cp))
-	endif
-
-c	----------------------------------------------------------------
-c	free workspace and return
-c	----------------------------------------------------------------
-
-	close (unit = 7)
-	call mxDestroyArray (%val (cpmat))
-	return
-998	call mexErrMsgTxt ('error openning file')
-999	call mexErrMsgTxt ('error writing file')
-	end
diff --git a/RBio/README.txt b/RBio/README.txt
index 943a394..99835d3 100644
--- a/RBio/README.txt
+++ b/RBio/README.txt
@@ -1,11 +1,11 @@
-RBio: Version 1.1.1, Nov 1, 2007.  A MATLAB Toolbox for reading/writing sparse
-matrices in Rutherford/Boeing format.
+RBio: Copyright 2013, Timothy A. Davis, http://www.suitesparse.com
+A MATLAB Toolbox for reading/writing sparse matrices in Rutherford/Boeing
+format.
 
-To install, cd to the RBio directory and type "RBinstall" in the MATLAB
-command window.  RBio is written in Fortran because the Rutherford/Boeing
-format can require Fortran I/O statements, depending on how the files are
-stored.  Files created by RBio do not require the Fortran I/O library to read
-them, however.
+To install the MATLAB functions, cd to the RBio directory (the one containing
+RBinstall.m, not the top-level directory) and type "RBinstall" in the MATLAB
+command window.  To install the C codes, type "make" (requires Unix).  For
+examples on how to use the C interface, see Include/RBio.h and Demo/RBdemo.c.
 
 --------------------------------------------------------------------------------
 MATLAB help for RBio:
@@ -33,15 +33,17 @@ MATLAB help for RBio:
 
   See also UFget, mread, mwrite.
 
-  Copyright 2007, Timothy A. Davis
 
 --------------------------------------------------------------------------------
 Files and directories:
 --------------------------------------------------------------------------------
 
     README.txt	    this file
-    Contents.m	    MATLAB help for the RBio toolbox
+    Makefile        for Unix; 
+
+./RBio: MATLAB interface
 
+    Contents.m	    MATLAB help for the RBio toolbox
     RBfix.m	    read a possibly corrupted R/B file
     RBinstall.m	    compile and install RBio for use in MATLAB, and run tests
     RBmake.m	    compile RBio for use in MATLAB
@@ -51,37 +53,19 @@ Files and directories:
     RBtype.m	    MATLAB help for RBtype
     RBwrite.m	    MATLAB help for RBwrite
 
-    RBcread_32.f    read a complex sparse matrix, compare with RBrread_*.f
-    RBcread_64.f
-
-    RBcsplit_32.f   split a complex matrix into its real and imaginary parts
-    RBcsplit_64.f
-
-    RBraw_mex_32.f  mexFunction to read the raw contents of a R/B file
-    RBraw_mex_64.f
-
-    RBread_32.f	    utility routines for either real or complex matrices
-    RBread_64.f
+    Makefile        for Unix; see also RBinstall.m and RBmake.m
+    RBerror.c       error handling
+    RBraw.c         RBraw mexFunction
+    RBread.c        RBread mexFunction
+    RBtype.c        RBtype mexFunction
+    RBwrite.c       RBwrite mexFunction
 
-    RBread_mex_32.f mexFunction to read a real or complex sparse matrix
-    RBread_mex_64.f
+./RBio/private:  test directory for MATLAB
 
-    RBrread_32.f    read a real sparse matrix, compare with RBcread_*.f
-    RBrread_64.f
+    testRB1.m	    simple test for RBio
+    testRB2.m	    simple test for RBio (requires UFget)
+    testRB3.m       extensive test for RBio (requires UFget)
 
-    RBtype_mex_32.f mexFunction to determine the Rutherford/Boeing type
-    RBtype_mex_64.f
-
-    RBwrite_32.f    write a real or complex sparse matrix
-    RBwrite_64.f
-
-    RBwrite_mex_32.f mexFunction to write a real or complex sparse matrix
-    RBwrite_mex_64.f
-
-./Test: directory with test codes and matrices
-
-    testRB1.m	    simple test script for RBio
-    testRB2.m	    simple test script for RBio (requires UFget)
     bcsstk01.rb	    HB/bcsstk01 Problem.A from UF Sparse Matrix Collection
     farm.rb	    Meszaros/farm Problem.A from UF Sparse Matrix Collection
     lap_25.pse	    original Harwell/Boeing version of lap_25 (finite-element)
@@ -96,7 +80,60 @@ Files and directories:
 ./Doc: directory with additional documentation and license
 
     ChangeLog	    changes since first release
-    dodiff	    compare 32-bit and 64-bit codes, real and complex
     gpl.txt	    GNU license
     License.txt	    license
 
+./Demo: C demo program
+
+    Makefile        for compiling the demo
+    RBdemo.c        the demo itself
+
+./Include: include files for user programs
+
+    RBio.h
+
+./Lib:
+
+    Makefile        for compiling the RBio library
+
+./Source: C source codes
+
+    RBio.c          C-callable RBio functions
+
+./Tcov: extensive test of C-callable RBio functions
+
+    Makefile        for compiling the test
+    RBtest.c        the test program
+    README.txt      short help for Tcov
+
+./Tcov/mangled: erroneous matrices for testing error-handling
+
+    1.rb
+    2.rb
+    3.rb
+    4.rb
+    5.rb
+    6.rb
+    7.rb
+    8.rb
+    9.rb
+    10.rb
+    11.rb
+    12.rb
+    13.rb
+    14.rb
+    15.rb
+
+./Tcov/matrices: test matrices
+
+    Tina_DisCog.tar.gz
+    dwg961a.tar.gz
+    m4.rb
+    m4b.rb
+    mhd1280a.tar.gz
+    mhd1280b.tar.gz
+    plskz362.tar.gz
+    qc324.tar.gz
+    s4.rb
+    west0067.tar.gz
+
diff --git a/RBio/Source/RBio.c b/RBio/Source/RBio.c
new file mode 100644
index 0000000..fd6ccc9
--- /dev/null
+++ b/RBio/Source/RBio.c
@@ -0,0 +1,2923 @@
+/* ========================================================================== */
+/* === RBio/Source/RBio.c: C-callable RBio functions ======================== */
+/* ========================================================================== */
+
+/* Copyright 2009, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+/* This file contains functions for writing/reading a sparse matrix to/from a
+   file in Rutherford-Boeing format.  User-callable functions are declared
+   as PUBLIC.  PRIVATE functions are available only within this file.
+*/
+
+/* ========================================================================== */
+/* === definitions ========================================================== */
+/* ========================================================================== */
+
+#include "RBio.h"
+
+#ifdef INT
+/* int version */
+#define Int int
+#define IDD "d"
+#define RB(name) RB ## name ## _i
+#else
+/* Default: long (except for Windows, which is __int64) */
+#define Int SuiteSparse_long
+#define IDD SuiteSparse_long_idd
+#define RB(name) RB ## name
+#endif
+#define ID "%" IDD
+
+#define TRUE (1)
+#define FALSE (0)
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define ABS(a)   (((a) > 0) ? (a) : -(a))
+#define ISNAN(a) ((a) != (a))
+#define PRIVATE static
+#define PUBLIC
+
+#define SLEN 4096
+#define FREE_WORK   { SuiteSparse_free (w) ; \
+                      SuiteSparse_free (cp) ; }
+
+#define FREE_ALL    { FREE_WORK ; \
+                      SuiteSparse_free (Ap) ; \
+                      SuiteSparse_free (Ai) ; \
+                      SuiteSparse_free (Ax) ; \
+                      SuiteSparse_free (Az) ; \
+                      SuiteSparse_free (Zp) ; \
+                      SuiteSparse_free (Zi) ; }
+
+#define FREE_RAW    { SuiteSparse_free (Ap) ; \
+                      SuiteSparse_free (Ai) ; \
+                      SuiteSparse_free (Ax) ; }
+
+
+/* ========================================================================== */
+/* === internal prototypes ================================================== */
+/* ========================================================================== */
+
+PRIVATE Int RB(format)  /* return format to use (index in F_, C_format) */
+(
+    /* input */
+    Int nnz,            /* number of nonzeros */
+    double *x,          /* of size nnz */
+    Int is_int,         /* true if integer format is to be used */
+    double xmin,        /* minimum value of x */
+    double xmax,        /* maximum value of x */
+    Int fmt,            /* initial format to use (index into F_format, ...) */
+
+    /* output */
+    char valfmt [21],   /* Fortran format to use */
+    char valcfm [21],   /* C format to use */
+    Int *valn           /* number of entries per line */
+) ;
+
+PRIVATE void RB(iformat)
+(
+    /* input */
+    double xmin,            /* smallest integer to print */
+    double xmax,            /* largest integer to print */
+
+    /* output */
+    char indfmt [21],       /* Fortran format to use */
+    char indcfm [21],       /* C format to use */
+    Int *indn               /* number of entries per line */
+) ;
+
+PRIVATE Int RB(cards)
+(
+    Int nitems,         /* number of items to print */
+    Int nperline        /* number of items per line */
+) ;
+
+PRIVATE Int RB(iprint)        /* returns TRUE if OK, FALSE otherwise */
+(
+    /* input */
+    FILE *file,             /* which file to write to */
+    char *indcfm,           /* C format to use */
+    Int i,                  /* value to write */
+    Int indn,               /* number of entries to write per line */
+
+    /* input/output */
+    Int *nbuf               /* number of entries written to current line */
+) ;
+
+PRIVATE Int RB(xprint)        /* returns TRUE if OK, FALSE otherwise */
+(
+    /* input */
+    FILE *file,             /* which file to write to */
+    char *valcfm,           /* C format to use */
+    double x,               /* value to write */
+    Int valn,               /* number of entries to write per line */
+    Int mkind,              /* 0:real, 1:pattern, 2:complex, 3:integer */
+
+    /* input/output */
+    Int *nbuf               /* number of entries written to current line */
+) ;
+
+PRIVATE void RB(fill)
+(
+    char *s,            /* string to fill */
+    Int len,            /* length of s (including trailing '\0') */
+    char c              /* character to fill s with */
+) ;
+
+PRIVATE Int RB(fix_mkind_in)      /* return revised mkind */
+(
+    Int mkind_in,       /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    double *Ax,
+    double *Az
+) ;
+
+PRIVATE Int RB(writeTask)       /* returns TRUE if OK, FALSE on failure */
+(
+    /* input */
+    FILE *file,     /* file to print to (already open) */
+    Int task,       /* 0 to 3 (see above) */
+    Int nrow,       /* A is nrow-by-ncol */
+    Int ncol,
+    Int mkind,      /* 0:real, 1:pattern, 2:complex, 3:integer */
+    Int skind,      /* -1:rect, 0:unsym, 1:sym, 2:hermitian, 3:skew */
+    Int *Ap,        /* size ncol+1, column pointers */
+    Int *Ai,        /* size anz=Ap[ncol], row indices */
+    double *Ax,     /* size anz, real values */
+    double *Az,     /* size anz, imaginary part (may be NULL) */
+    Int *Zp,        /* size ncol+1, column pointers for Z (may be NULL) */
+    Int *Zi,        /* size Zp[ncol], row indices for Z */
+    char *indcfm,   /* C format for indices */
+    Int indn,       /* # of indices per line */
+    char *valcfm,   /* C format for values */
+    Int valn,       /* # of values per line */
+
+    /* output */
+    Int *nnz,           /* number of entries that will be printed to the file */
+
+    /* workspace */
+    Int *w,         /* size MAX(nrow,ncol)+1 */
+    Int *cp         /* size MAX(nrow,ncol)+1 */
+) ;
+
+PRIVATE Int RB(read2)     /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    FILE *file,         /* must be already open for reading */
+    Int nrow,           /* A is nrow-by-ncol */
+    Int ncol,
+    Int nnz,            /* number of entries in A, from the header */
+    Int mkind,          /* R: 0, P: 1, C: 2, I: 3 */
+    Int skind,          /* R: -1, U: 0, S: 1, H: 2, Z: 3 */
+    Int build_upper,    /* if TRUE and skind>0, then create upper part.  Ai, Ax,
+                           and Az must be twice the size as given below */
+
+    /* output */
+    Int *Ap,            /* size ncol+1, column pointers for A */
+    Int *Ai,            /* size nnz, row indices for A */
+    double *Ax,         /* size nnz or 2*nnz if complex and Az NULL */
+    double *Az,         /* size nnz, or NULL, for complex matrices only */
+
+    /* workspace */
+    Int *w,             /* size MAX(nrow,ncol)+1 */
+    Int *cp,            /* size ncol+1 */
+
+    /* input/workspace */
+    char *s,            /* first line of column pointers on input */
+    Int slen
+) ;
+
+PRIVATE Int RB(zcount)    /* return number of explicit zeros in A */
+(
+    Int nnz,            /* number of entries to check */
+    Int mkind,          /* R: 0, P: 1, C: 2, I: 3 */
+    double *Ax,         /* NULL, size nnz, or 2*nnz */
+    double *Az          /* NULL or size nnz */
+) ;
+
+PRIVATE Int RB(extract)   /* return # of explicit zero entries */
+(
+    /* input */
+    Int ncol,
+    Int mkind,          /* R: 0, P: 1, C: 2, I: 3 */
+
+    /* input/output */
+    Int *Ap,            /* size ncol+1, column pointers A A */
+    Int *Ai,            /* size nnz=Ap[ncol], row indices of A */
+    double *Ax,         /* NULL, size nnz, or 2*nnz */
+    double *Az,         /* NULL or size nnz */
+
+    /* output */
+    Int *Zp,            /* size ncol+1, column pointers for Z */
+    Int *Zi             /* size znz = Zp [ncol] = # of zeros in A on input */
+) ;
+
+PRIVATE Int RB(readline) /* return string length, or -1 on error or EOF */
+(
+    char *s,            /* buffer to read into */
+    Int slen,           /* s [0..slen] is of length slen+1 */
+    FILE *file          /* file to read from */
+) ;
+
+PRIVATE void RB(substring)
+(
+    /* input */
+    char *s,            /* input string */
+    Int len,            /* length of string s [0..len] */
+    Int start,          /* extract t [0:len-1] from s [start:start+len-1] */
+    Int tlen,           /* length of substring t, excluding null terminator */
+
+    /* output */
+    char *t             /* size tlen+1 */
+) ;
+
+PRIVATE Int RB(xtoken)   /* TRUE if token found, FALSE othewise */
+(
+    /* input/output */
+    char *s,            /* parse the next token in s [k..len] and update k */
+    Int len,            /* length of s (input only) */
+    Int *k,             /* start parsing at s [k] */
+    /* output */
+    double *x           /* value of the token, or 0 if not found */
+) ;
+
+PRIVATE Int RB(itoken)
+(
+    /* input/output */
+    char *s,            /* parse the next token in s [k..len] and update k */
+    Int len,            /* length of s (input only) */
+    Int *k,             /* start parsing at s [k] */
+    /* output */
+    Int *i              /* value of the token, or 0 if not found */
+) ;
+
+PRIVATE void RB(prune_space)
+(
+    /* input/output */
+    char *s
+) ;
+
+PRIVATE Int RB(header)    /* 0: success, < 0: error, > 0: warning */
+(
+    /* input */
+    FILE *file,         /* must be already open for reading */
+
+    /* output */
+    char title [73],    /* title, from first line of header */
+    char key [9],       /* 8-character key, from first header line */
+    char mtype [4],     /* RUA, RSA, PUA, PSA, RRA, etc */
+    Int *nrow,          /* A is nrow-by-ncol */
+    Int *ncol,
+    Int *nnz,           /* number of entries in A (tril(A) if symmetric) */
+    Int *nelnz,         /* number of finite-elements */
+    char ptrfmt [21],   /* Fortran format for column pointers */
+    char indfmt [21],   /* Fortran format for row indices */
+    char valfmt [21],   /* Fortran format for numerical values */
+    Int *mkind,         /* R__: 0, P__: 1, C__: 2, I__: 3 */
+    Int *skind,         /* _R_: -1, _U_: 0, _S_: 1, _H_: 2, _Z_: 3 */
+    Int *fem,           /* __A: false, __E: true */
+    char *s,            /* first line of data after the header */
+    Int slen            /* s is of length slen+1 */
+) ;
+
+PRIVATE Int RB(read1i)    /* TRUE if OK, false otherwise */
+(
+    FILE *file,         /* file to read from (must be already open) */
+    char *s,            /* buffer to use */
+    Int *len,           /* strlen(s) */
+    Int slen,           /* size of s */
+    Int *k,             /* read position in s */
+    Int *x              /* value read from the file */
+) ;
+
+PRIVATE Int RB(read1x)    /* TRUE if OK, false otherwise */
+(
+    FILE *file,         /* file to read from (must be already open) */
+    char *s,            /* buffer to use */
+    Int *len,           /* strlen(s) */
+    Int slen,           /* size of s */
+    Int *k,             /* read position in s */
+    double *x           /* value read from the file */
+) ;
+
+PRIVATE Int RB(iread)     /* TRUE if OK, false otherwise */
+(
+    /* input */
+    FILE *file,         /* file to read from (must be already open) */
+    Int n,              /* number of integers to read */
+    Int offset,         /* offset to subtract from each integer */
+
+    /* output */
+    Int *A,             /* read integers from file into A [0..n-1] */
+
+    /* input/workspace */
+    char *s,            /* first line of input may be present in s */
+    Int slen            /* s is of size slen+1 */
+) ;
+
+PRIVATE Int RB(xread)     /* TRUE if OK, false otherwise */
+(
+    /* input */
+    FILE *file,         /* file to read from (must be already open) */
+    Int n,              /* number of values to read (2*n if complex) */
+    Int mkind,          /* R: 0, P: 1, C: 2, I: 3 */
+
+    /* output */
+    double *Ax,         /* read reals from file into Ax [0..n-1] */
+    double *Az,         /* read reals from file into Az [0..n-1], may be NULL */
+
+    /* input/workspace */
+    char *s,            /* first line of input may be present in s */
+    Int slen            /* s is of size slen+1 */
+) ;
+
+PRIVATE void RB(skipheader)
+(
+    char *s,
+    Int slen,
+    FILE *file
+) ;
+
+
+/* ========================================================================== */
+/* === functions ============================================================ */
+/* ========================================================================== */
+
+
+/* -------------------------------------------------------------------------- */
+/* RBget_entry: get numerical entry in the matrix at position p */
+/* -------------------------------------------------------------------------- */
+
+PUBLIC void RB(get_entry)
+(
+    Int mkind,          /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    double *Ax,         /* real part, or both if merged-complex */
+    double *Az,         /* imaginary part if split-complex */
+    Int p,              /* index of the entry */
+    double *xr,         /* real part */
+    double *xz          /* imaginary part */
+)
+{
+    if (mkind == 0 || mkind == 3)
+    {
+        /* A is real or integer */
+        *xr = Ax ? Ax [p] : 1 ;
+        *xz = 0 ;
+    }
+    else if (mkind == 2)
+    {
+        /* A is split-complex */
+        *xr = Ax ? Ax [p] : 1 ;
+        *xz = Ax ? Az [p] : 0 ;
+    }
+    else if (mkind == 4)
+    {
+        /* A is merged-complex */
+        *xr = Ax ? Ax [2*p  ] : 1 ;
+        *xz = Ax ? Ax [2*p+1] : 0 ;
+    }
+    else /* if (mkind == 1) */
+    {
+        /* A is pattern-only */
+        *xr = 1 ;
+        *xz = 0 ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBput_entry: put numerical entry in the matrix in position p */
+/* -------------------------------------------------------------------------- */
+
+PUBLIC void RB(put_entry)
+(
+    Int mkind,          /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    double *Ax,         /* real part, or both if merged-complex */
+    double *Az,         /* imaginary part if split-complex */
+    Int p,              /* index of the entry */
+    double xr,          /* real part */
+    double xz           /* imaginary part */
+)
+{
+    if (mkind == 0 || mkind == 3)
+    {
+        /* A is real or integer; ignore xz */
+        if (Ax) Ax [p] = xr ;
+        if (Az) Az [p] = 0 ;
+    }
+    else if (mkind == 2)
+    {
+        /* A is split-complex */
+        if (Ax) Ax [p] = xr ;
+        if (Az) Az [p] = xz ;
+    }
+    else if (mkind == 4)
+    {
+        /* A is merged-complex */
+        if (Ax) Ax [2*p  ] = xr ;
+        if (Ax) Ax [2*p+1] = xz ;
+    }
+    else /* if (mkind == 1) */
+    {
+        /* A is pattern-only; ignore xr and xz */
+        if (Ax) Ax [p] = 1 ;
+        if (Az) Az [p] = 0 ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBskipheader: skip past the header */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE void RB(skipheader)
+(
+    char *s,            /* size slen+1 */
+    Int slen,
+    FILE *file          /* file to read from */
+)
+{
+    s [0] = '\0' ;
+    RB(readline) (s, slen, file) ;
+    RB(readline) (s, slen, file) ;
+    RB(readline) (s, slen, file) ;
+    RB(readline) (s, slen, file) ;
+    RB(readline) (s, slen, file) ;
+    if ((s [0] == 'F') || (s [0] == 'f') || (s [0] == 'M') || (s[0] == 'm'))
+    {
+        RB(readline) (s, slen, file) ;
+    }
+    /* s now contains the first non-header line */
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBread2: read all but the header and construct the matrix */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(read2)   /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    FILE *file,         /* must be already open for reading */
+    Int nrow,           /* A is nrow-by-ncol */
+    Int ncol,
+    Int nnz,            /* number of entries in A, from the header */
+    Int mkind,          /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    Int skind,          /* R: -1, U: 0, S: 1, H: 2, Z: 3 */
+    Int build_upper,    /* if TRUE and skind>0, then create upper part.  Ai, Ax,
+                           and Az must be twice the size as given below */
+
+    /* output */
+    Int *Ap,            /* size ncol+1, column pointers for A */
+    Int *Ai,            /* size nnz, row indices for A */
+    double *Ax,         /* size nnz or 2*nnz if complex and Az NULL */
+    double *Az,         /* size nnz, or NULL, for complex matrices only */
+
+    /* workspace */
+    Int *w,             /* size MAX(nrow,ncol)+1 */
+    Int *cp,            /* size ncol+1 */
+
+    /* input/workspace */
+    char *s,            /* first line of column pointers on input */
+    Int slen
+)
+{
+    double xr = 0, xz = 0 ;
+    Int p, i, j, k, ilast, alen, llen, psrc, pdst ;
+
+    /* ---------------------------------------------------------------------- */
+    /* skip past the header, if reading from a file */
+    /* ---------------------------------------------------------------------- */
+
+    if (file)
+    {
+        RB(skipheader) (s, slen, file) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the column pointers and check them */
+    /* ---------------------------------------------------------------------- */
+
+    if (!RB(iread) (file, ncol+1, 1, Ap, s, slen))
+    {
+        return (RBIO_CP_IOERROR) ;      /* I/O error reading column pointers */
+    }
+    if (Ap [0] != 0 || Ap [ncol] != nnz)
+    {
+        return (RBIO_CP_INVALID) ;      /* column pointers invalid */
+    }
+    for (j = 1 ; j <= ncol ; j++)
+    {
+        if (Ap [j] < Ap [j-1])
+        {
+            return (RBIO_CP_INVALID) ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the row indices and check them */
+    /* ---------------------------------------------------------------------- */
+
+    if (!RB(iread) (file, nnz, 1, Ai, s, slen))
+    {
+        return (RBIO_ROW_IOERROR) ;       /* I/O error reading row indices */
+    }
+
+    for (i = 0 ; i < nrow ; i++)
+    {
+        w [i] = -1 ;
+    }
+
+    for (j = 0 ; j < ncol ; j++)
+    {
+        ilast = -1 ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i < 0 || i >= nrow)
+            {
+                return (RBIO_ROW_INVALID) ; /* row index out of range */
+            }
+            if (w [i] == j)
+            {
+                return (RBIO_DUPLICATE) ;   /* duplicate entry in matrix */
+            }
+            w [i]= j ;
+            if (i < ilast)
+            {
+                return (RBIO_JUMBLED) ;     /* row indices unsorted */
+            }
+            ilast = i ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the values */
+    /* ---------------------------------------------------------------------- */
+
+    if (!RB(xread) (file, nnz, mkind, Ax, Az, s, slen))
+    {
+        return (RBIO_VALUE_IOERROR) ;     /* I/O error reading values */
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* construct or check the upper triangular part for symmetric matrices */
+    /* ---------------------------------------------------------------------- */
+
+    if (skind > 0)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* check the matrix and compute new column counts */
+        /* ------------------------------------------------------------------ */
+
+        for (j = 0 ; j <= ncol ; j++)
+        {
+            w [j] = 0 ;
+        }
+
+        for (j = 0 ; j < ncol ; j++)
+        {
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                i = Ai [p] ;
+                if (i == j)
+                {
+                    /* diagonal entry, only appears as A(j,j) */
+                    w [j]++ ;
+                }
+                else if (i > j)
+                {
+                    /* entry in lower triangular part, A(i,j) will be */
+                    /* duplicated as A(j,i), so count it in column i and j  */
+                    w [i]++ ;
+                    w [j]++ ;
+                }
+                else
+                {
+                    /* error: entry in upper triangular part */
+                    return (RBIO_EXTRANEOUS) ;
+                }
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* construct the upper trianglar part, if requested */
+        /* ------------------------------------------------------------------ */
+
+        if (build_upper)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* compute the new column pointers */
+            /* -------------------------------------------------------------- */
+
+            cp [0] = 0 ;
+            for (j = 1 ; j <= ncol ; j++)
+            {
+                cp [j] = cp [j-1] + w [j-1] ;
+            }
+
+            /* -------------------------------------------------------------- */
+            /* shift the matrix by adding gaps to the top of each column */
+            /* -------------------------------------------------------------- */
+
+            for (j = ncol-1 ; j >= 0 ; j--)
+            {
+                /* number of entries in lower tri. part (including diagonal) */
+                llen = Ap [j+1] - Ap [j] ;
+
+                /* number of entries in entire column */
+                alen = cp [j+1] - cp [j] ;
+
+                /* move the column from Ai [Ap [j] ... Ap [j+1]-1] down to
+                   Ai [cp [j+1]-llen ... cp[j+1]-1], leaving a gap
+                   at Ai [Ap [j] ... cp [j+1]-llen] */
+
+                for (k = 1 ; k <= llen ; k++)
+                {
+                    psrc = Ap [j+1] - k ;
+                    pdst = cp [j+1] - k ;
+                    Ai [pdst] = Ai [psrc] ;
+                    RB(get_entry) (mkind, Ax, Az, psrc, &xr, &xz) ;
+                    RB(put_entry) (mkind, Ax, Az, pdst, xr, xz) ;
+                }
+            }
+
+            /* -------------------------------------------------------------- */
+            /* populate the upper triangular part */
+            /* -------------------------------------------------------------- */
+
+            /* create temporary column pointers to point to the gaps */
+            for (j = 0 ; j < ncol ; j++)
+            {
+                w [j] = cp [j] ;
+            }
+
+            for (j = 0 ; j < ncol ; j++)
+            {
+                /* scan the entries in the lower tri. part, in
+                    Ai [cp[j+1]-llen ... cp[j+1]-1] */
+                llen = Ap [j+1] - Ap [j] ;
+
+                for (k = 1 ; k <= llen ; k++)
+                {
+                    /* get the A(i,j) entry in strictly lower triangular part */
+                    psrc = cp [j+1] - k ;
+                    i = Ai [psrc] ;
+                    if (i != j)
+                    {
+                        /* get the numerical value of the A(i,j) entry */
+                        RB(get_entry) (mkind, Ax, Az, psrc, &xr, &xz) ;
+
+                        /* negate for Hermitian and skew-symmetric */
+                        if (skind == 2)
+                        {
+                            xz = -xz ;      /* complex Hermitian */
+                        }
+                        else if (skind == 3)
+                        {
+                            xr = -xr ;      /* skew symmetric */
+                            xz = -xz ;
+                        }
+
+                        /* add A(j,i) as the next entry in column i */
+                        pdst = w [i]++ ;
+                        Ai [pdst] = j ;
+                        RB(put_entry) (mkind, Ax, Az, pdst, xr, xz) ;
+                    }
+                }
+            }
+
+            /* -------------------------------------------------------------- */
+            /* finalize the column pointers */
+            /* -------------------------------------------------------------- */
+
+            for (j = 0 ; j <= ncol ; j++)
+            {
+                Ap [j] = cp [j] ;
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* matrix is valid */
+    /* ---------------------------------------------------------------------- */
+
+    return (RBIO_OK) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBzcount: count the number of explicit zeros */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(zcount)    /* return number of explicit zeros in A */
+(
+    Int nnz,            /* number of entries in A */
+    Int mkind,          /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    double *Ax,         /* NULL, size nnz, or 2*nnz */
+    double *Az          /* NULL or size nnz */
+)
+{
+    double xr, xz ;
+    Int p, znz = 0 ;
+    for (p = 0 ; p < nnz ; p++)
+    {
+        RB(get_entry) (mkind, Ax, Az, p, &xr, &xz) ;
+        if (xr == 0 && xz == 0)
+        {
+            znz++ ;
+        }
+    }
+    return (znz) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBextract: extract explicit zeros */
+/* -------------------------------------------------------------------------- */
+
+/* The matrix is A is split into A (the nonzeros) and Z (the pattern of
+   explicit zero entries in A).  On input, A may have explicit zeros.  On
+   output they are removed from A.   If Zp is NULL on input, these explicit
+   zeros are removed from A and simply discarded. */
+
+PRIVATE Int RB(extract) /* return # of explicit zero entries */
+(
+    /* input */
+    Int ncol,
+    Int mkind,          /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+
+    /* input/output */
+    Int *Ap,            /* size ncol+1, column pointers A A */
+    Int *Ai,            /* size nnz=Ap[ncol], row indices of A */
+    double *Ax,         /* NULL, size nnz, or 2*nnz */
+    double *Az,         /* NULL or size nnz */
+
+    /* output */
+    Int *Zp,            /* size ncol+1, column pointers for Z */
+    Int *Zi             /* size znz = Zp [ncol] = # of zeros in A on input */
+)
+{
+    double xr, xz ;
+    Int p, i, j, pa, pz ;
+
+    pa = 0 ;
+    pz = 0 ;
+
+    for (j = 0 ; j < ncol ; j++)
+    {
+        /* save the new start of column j of A */
+        p = Ap [j] ;
+        Ap [j] = pa ;
+        if (Zp) Zp [j] = pz ;
+
+        /* split column j of A */
+        for ( ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            RB(get_entry) (mkind, Ax, Az, p, &xr, &xz) ;
+            if (xr == 0 && xz == 0)
+            {
+                /* copy into Z, if Z exists */
+                if (Zp) Zi [pz++] = i ;
+            }
+            else
+            {
+                /* copy into A */
+                Ai [pa] = i ;
+                RB(put_entry) (mkind, Ax, Az, pa++, xr, xz) ;
+            }
+        }
+    }
+    Ap [ncol] = pa ;
+    if (Zp) Zp [ncol] = pz ;
+    return (pz) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBreadline: read a line from the file */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(readline)  /* return length of string, or -1 on error or EOF */
+(
+    char *s,            /* buffer to read into */
+    Int slen,           /* s [0..slen] is of length slen+1 */
+    FILE *file          /* file to read from */
+)
+{
+    Int len, ok ;
+    if (!file) file = stdin ;                   /* file defaults to stdin */
+    ok = (fgets (s, slen, file) != NULL) ;      /* read line in s [0..slen-1] */
+    s [slen] = '\0' ;                           /* ensure line is terminated */
+    len = ok ? ((Int) strlen (s)) : (-1) ;      /* get the length */
+    return ((len < slen) ? len : (-1)) ;        /* return len, or -1 on error */
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBsubstring: extract a substring */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE void RB(substring)
+(
+    /* input */
+    char *s,            /* input string */
+    Int len,            /* length of string s [0..len] */
+    Int start,          /* extract t [0:len-1] from s [start:start+len-1] */
+    Int tlen,           /* length of substring t, excluding null terminator */
+
+    /* output */
+    char *t             /* size tlen+1 */
+)
+{
+    Int i, end, k ;
+    end = MIN (start+tlen, len) ;       /* do not go past the end of s */
+    k = 0 ;
+    for (i = start ; i < end ; i++)
+    {
+        t [k++] = s [i] ;
+    }
+    t [k] = '\0' ;                      /* ensure t is null-terminated */
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBxtoken: get the next token from a string, returning it as a double */
+/* -------------------------------------------------------------------------- */
+
+/* On input, the token to return from s [0..len] starts at s[k].  On output, k
+   is updated so that the s[k] is the start of the token after this one. */
+
+PRIVATE Int RB(xtoken)    /* TRUE if token found, FALSE othewise */
+(
+    /* input/output */
+    char *s,            /* parse the next token in s [k..len] and update k */
+    Int len,            /* length of s (input only) */
+    Int *k,             /* start parsing at s [k] */
+    /* output */
+    double *x           /* value of the token, or 0 if not found */
+)
+{
+    Int start ;
+
+    *x = 0 ;
+
+    /* consume leading spaces, if any */
+    while ((*k) < len && s [*k] == ' ')
+    {
+        (*k)++ ;
+    }
+
+    /* the token starts here, if present */
+    start = (*k) ;
+
+    if (s [start] == '\0')
+    {
+        /* the end of s has been reached; there is no token */
+        return (FALSE) ;
+    }
+
+    /* find where the token ends */
+    while ((*k) < len && s [*k] != ' ')
+    {
+        (*k)++ ;
+    }
+
+    /* terminate the current token.  Note this might be s [len] */
+    if (s [*k] != '\0')
+    {
+        s [(*k)++] = '\0' ;
+    }
+
+    /* parse the current token and return its value */
+    return (sscanf (s+start, "%lg", x) == 1) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBitoken: get the next token from a string, returning it as an Int */
+/* -------------------------------------------------------------------------- */
+
+/* Same as RBxtoken, except for the data type of the 4th parameter.  The
+   return value i is checked for integer overflow of i+1. */
+
+PRIVATE Int RB(itoken)
+(
+    /* input/output */
+    char *s,            /* parse the next token in s [k..len] and update k */
+    Int len,            /* length of s (input only) */
+    Int *k,             /* start parsing at s [k] */
+    /* output */
+    Int *i              /* value of the token, or 0 if not found */
+)
+{
+    double x ;
+    Int ok = RB(xtoken) (s, len, k, &x) ;
+    *i = (Int) x ;      /* convert to integer */
+    return (ok && ((double) ((*i)+1) == (x+1))) ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* RBprune_space: remove trailing space from a string */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE void RB(prune_space)
+(
+    /* input/output */
+    char *s
+)
+{
+    Int k ;
+    for (k = strlen (s) - 1 ; k >= 0 ; k--)
+    {
+        if (isspace (s [k]))
+        {
+            s [k] = '\0' ;
+        }
+        else
+        {
+            return ;
+        }
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBheader:  read Rutherford/Boeing header lines */
+/* -------------------------------------------------------------------------- */
+
+/*
+The Rutherford/Boeing matrix type is a 3-character string:
+
+    (1) R: real, C: complex, P: pattern only, I: integer
+        mkind: 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged
+        Note that this function does not return mkind == 4, since the
+        split/merged Ax and Az are considered by this function.
+        It must be selected by the caller.
+
+    (2) S: symmetric, U: unsymmetric, H: Hermitian, Z: skew symmetric,
+        R: rectangular
+        skind: R: -1, U: 0, S: 1, H: 2, Z: 3
+
+    (3) A: assembled, E: element form
+        nelnz = 0 for A, number of elements for E
+
+        pattern matrices are given numerical values of 1 (except PZA).
+        PZA matrices have +1 in the lower triangular part and -1 in
+        the upper triangular part.
+*/
+
+PRIVATE Int RB(header)    /* 0: success, < 0: error, > 0: warning */
+(
+    /* input */
+    FILE *file,         /* must be already open for reading */
+
+    /* output */
+    char title [73],    /* title, from first line of header */
+    char key [9],       /* 8-character key, from first header line */
+    char mtype [4],     /* RUA, RSA, PUA, PSA, RRA, etc */
+    Int *nrow,          /* A is nrow-by-ncol */
+    Int *ncol,
+    Int *nnz,           /* number of entries in A (tril(A) if symmetric) */
+    Int *nelnz,         /* number of finite-elements */
+    char ptrfmt [21],   /* Fortran format for column pointers */
+    char indfmt [21],   /* Fortran format for row indices */
+    char valfmt [21],   /* Fortran format for numerical values */
+    Int *mkind,         /* R__: 0, P__: 1, C__: 2, I__: 3 */
+    Int *skind,         /* _R_: -1, _U_: 0, _S_: 1, _H_: 2, _Z_: 3 */
+    Int *fem,           /* __A: false, __E: true */
+    char *s,            /* first line of data after the header */
+    Int slen            /* s is of length slen+1 */
+)
+{
+    Int len, totcrd, ptrcrd, indcrd, valcrd, k, ok ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get the 1st line: title, key */
+    /* ---------------------------------------------------------------------- */
+
+    len = RB(readline) (s, slen, file) ;
+    if (len < 0) return (RBIO_HEADER_IOERROR) ;
+
+    RB(substring) (s, len, 0, 72, title) ;
+    RB(substring) (s, len, 72, 8, key) ;
+
+    if (title [71] == '|')
+    {
+        /* remove the marker placed by RBwrite, if present */
+        title [71] = '\0' ;
+    }
+
+    /* remove trailing spaces from the key and the title */
+    RB(prune_space) (title) ;
+    RB(prune_space) (key) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get the 2nd line: totcrd, ptrcrd, indcrd, valcrd */
+    /* ---------------------------------------------------------------------- */
+
+    len = RB(readline) (s, slen, file) ;
+    if (len < 0) return (RBIO_HEADER_IOERROR) ;
+
+    k = 0 ;
+    ok = TRUE ;
+    ok = ok && RB(itoken) (s, len, &k, &totcrd) ;
+    ok = ok && RB(itoken) (s, len, &k, &ptrcrd) ;
+    ok = ok && RB(itoken) (s, len, &k, &indcrd) ;
+    ok = ok && RB(itoken) (s, len, &k, &valcrd) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get the 3rd line: mtype (RUA, etc), nrow, ncol, nnz, nelnz */
+    /* ---------------------------------------------------------------------- */
+
+    len = RB(readline)(s, slen, file) ;
+    if (len < 0) return (RBIO_HEADER_IOERROR) ;
+
+    RB(substring) (s, len, 0, 3, mtype) ;
+
+    k = 3 ;
+    ok = ok && RB(itoken) (s, len, &k, nrow) ;
+    ok = ok && RB(itoken) (s, len, &k, ncol) ;
+    ok = ok && RB(itoken) (s, len, &k, nnz) ;
+    RB(itoken) (s, len, &k, nelnz) ;
+
+    if (!ok || *nrow <= 0 || *ncol <= 0 || *nnz <= 0)
+    {
+        return (RBIO_DIM_INVALID) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* get the 4th line: ptrfmt, indfmt, valfmt */
+    /* ---------------------------------------------------------------------- */
+
+    len = RB(readline) (s, slen, file) ;
+    if (len < 0) return (RBIO_HEADER_IOERROR) ;
+
+    RB(substring) (s, len, 0,  16, ptrfmt) ;
+    RB(substring) (s, len, 16, 16, indfmt) ;
+    RB(substring) (s, len, 32, 20, valfmt) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* skip the Harwell/Boeing header line 5, if present */
+    /* ---------------------------------------------------------------------- */
+
+    len = RB(readline) (s, slen, file) ;
+    if (len <= 0) return (RBIO_HEADER_IOERROR) ;
+
+    if ((s [0] == 'F') || (s [0] == 'f') || (s [0] == 'M') || (s [0] == 'm'))
+    {
+        len = RB(readline) (s, slen, file) ;
+        if (len <= 0) return (RBIO_HEADER_IOERROR) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* determine if real, pattern, integer, or complex */
+    /* ---------------------------------------------------------------------- */
+
+    if (mtype [0] == 'R' || mtype [0] == 'r')
+    {
+        *mkind = 0 ;        /* real */
+    }
+    else if (mtype [0] == 'P' || mtype [0] == 'p')
+    {
+        *mkind = 1 ;        /* pattern */
+    }
+    else if (mtype [0] == 'C' || mtype [0] == 'c')
+    {
+        *mkind = 2 ;        /* complex (assume split-complex) */
+    }
+    else if (mtype [0] == 'I' || mtype [0] == 'i')
+    {
+        *mkind = 3 ;        /* integer */
+    }
+    else
+    {
+        return (RBIO_TYPE_INVALID) ;       /* error: invalid matrix mtype */
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* determine the symmetry property */
+    /* ---------------------------------------------------------------------- */
+
+    if (mtype [1] == 'R' || mtype [1] == 'r')
+    {
+        *skind = -1 ;        /* rectangular: RRA, PRA, IRA, and CRA matrices */
+    }
+    else if (mtype [1] == 'U' || mtype [1] == 'u')
+    {
+        *skind = 0 ;         /* unsymmetric: RUA, PUA, IUA, and CUA matrices */
+    }
+    else if (mtype [1] == 'S' || mtype [1] == 's')
+    {
+        *skind = 1 ;         /* symmetric: RSA, PSA, ISA, and CSA matrices */
+    }
+    else if (mtype [1] == 'H' || mtype [1] == 'h')
+    {
+        *skind = 2 ;        /* Hermitian: CHA (PHA, IHA, and RHA are OK too) */
+    }
+    else if (mtype [1] == 'Z' || mtype [1] == 'z')
+    {
+        *skind = 3 ;        /* skew symmetric: RZA, PZA, IZA, and CZA */
+    }
+    else
+    {
+        return (RBIO_TYPE_INVALID) ;       /* error: invalid matrix mtype */
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* assembled vs elemental matrices (**A vs **E) */
+    /* ---------------------------------------------------------------------- */
+
+    if (mtype [2] == 'A' || mtype [2] == 'a')
+    {
+        /* assembled - ignore nelnz */
+        *fem = FALSE ;
+        *nelnz = 0 ;
+    }
+    else if (mtype [2] == 'E' || mtype [2] == 'e')
+    {
+        /* finite-element */
+        *fem = TRUE ;
+    }
+    else
+    {
+        return (RBIO_TYPE_INVALID) ;       /* error: invalid matrix mtype */
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* assembled matrices must be square if skind is not R */
+    /* ---------------------------------------------------------------------- */
+
+    if (!(*fem) && (*skind) != -1 && (*nrow) != (*ncol))
+    {
+        return (RBIO_DIM_INVALID) ;       /* error: invalid matrix dimensions */
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* matrix header is valid */
+    /* ---------------------------------------------------------------------- */
+
+    return (0) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBread1i:  read a single integer value from the file */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(read1i)    /* TRUE if OK, false otherwise */
+(
+    FILE *file,         /* file to read from (must be already open) */
+    char *s,            /* buffer to use */
+    Int *len,           /* strlen(s) */
+    Int slen,           /* size of s */
+    Int *k,             /* read position in s */
+    Int *x              /* value read from the file */
+)
+{
+    /* read the token from the current line */
+    Int ok = RB(itoken) (s, *len, k, x) ;
+    if (!ok)
+    {
+        /* input line is exhausted; get the next one */
+        *len = RB(readline) (s, slen, file) ;
+        if (*len < 0) return (FALSE) ;
+        /* read first token from the new line */
+        *k = 0 ;
+        ok = RB(itoken) (s, *len, k, x) ;
+    }
+    return (ok) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBread1x:  read a single real value from the file */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(read1x)    /* TRUE if OK, false otherwise */
+(
+    FILE *file,         /* file to read from (must be already open) */
+    char *s,            /* buffer to use */
+    Int *len,           /* strlen(s) */
+    Int slen,           /* size of s */
+    Int *k,             /* read position in s */
+    double *x           /* value read from the file */
+)
+{
+    /* read the token from the current line */
+    Int ok = RB(xtoken) (s, *len, k, x) ;
+    if (!ok)
+    {
+        /* input line is exhausted; get the next one */
+        *len = RB(readline) (s, slen, file) ;
+        if (*len < 0) return (FALSE) ;
+        /* read first token from the new line */
+        *k = 0 ;
+        ok = RB(xtoken) (s, *len, k, x) ;
+    }
+    return (ok) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBiread:  read n integers from the file */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(iread)     /* TRUE if OK, FALSE otherwise */
+(
+    /* input */
+    FILE *file,         /* file to read from (must be already open) */
+    Int n,              /* number of integers to read */
+    Int offset,         /* offset to subtract from each integer */
+
+    /* output */
+    Int *A,             /* read integers from file into A [0..n-1] */
+
+    /* input/workspace */
+    char *s,            /* first line of input may be present in s */
+    Int slen            /* s is of size slen+1 */
+)
+{
+    Int k, len, i, x, ok = TRUE ;
+
+    /* the first token will be read from the current line, s, on input */
+    len = strlen (s) ;
+    k = 0 ;
+
+    for (i = 0 ; ok && i < n ; i++)
+    {
+        /* read the next integer */
+        ok = RB(read1i) (file, s, &len, slen, &k, &x) ;
+        A [i] = x - offset ;
+    }
+    s [0] = '\0' ;      /* ignore remainder of current input string */
+    return (ok) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBxread:  read n real or complex values from the file */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(xread)     /* TRUE if OK, FALSE otherwise */
+(
+    /* input */
+    FILE *file,         /* file to read from (must be already open) */
+    Int n,              /* number of values to read (2*n if complex) */
+    Int mkind,          /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+
+    /* output */
+    double *Ax,         /* read reals from file into Ax [0..n-1] */
+    double *Az,         /* read reals from file into Az [0..n-1], may be NULL */
+
+    /* input/workspace */
+    char *s,            /* first line of input may be present in s */
+    Int slen            /* s is of size slen+1 */
+)
+{
+    double xr, xz ;
+    Int k, len, i, ok = TRUE ;
+
+    /* the first token will be read from the current line, s, on input */
+    len = strlen (s) ;
+    k = 0 ;
+    xr = 1 ;
+    xz = 0 ;
+
+    for (i = 0 ; ok && i < n ; i++)
+    {
+        /* read the real and imaginary part of the kth entry */
+        if (ok && mkind != 1)
+        {
+            /* read the real part, if present */
+            ok = RB(read1x) (file, s, &len, slen, &k, &xr) ;
+        }
+        if (ok && (mkind == 2 || mkind == 4))
+        {
+            /* read the imaginary part, if present */
+            ok = RB(read1x) (file, s, &len, slen, &k, &xz) ;
+        }
+        /* store the ith entry in Ax and/or Az */
+        RB(put_entry) (mkind, Ax, Az, i, xr, xz) ;
+    }
+    s [0] = '\0' ;      /* ignore remainder of current input string */
+    return (ok) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBread: read a Rutherford/Boeing matrix from a file */
+/* -------------------------------------------------------------------------- */
+
+/*
+    Space is allocated as needed for the output matrix A, the zero pattern Z,
+    and required workspace.  To free the result of this function, do on the
+    following:
+
+        if (Ap) free (Ap) ;
+
+    or
+
+        SuiteSparse_free (Ap) ;
+
+    etc, for Ap, Ai, Ax, Az, Zp, and Zi.
+
+    Format of the numerical values:
+    If Ax is NULL on input, only the pattern of the matrix is returned.  If
+    Ax is not NULL but p_Az is NULL, then the real and imaginary parts (if
+    complex) are both returned in Ax.  If both Ax and p_Az are non-NULL,
+    imaginary parts (if present) are returned in Az.
+
+    For real and integer matrices (R__, I__), Az is always returned as NULL.
+
+    For pattern matrices (P__), Ax and Az are always returned as NULL.
+
+    For complex matrices (C__), either Ax is used if p_Az is NULL
+        (merged-complex) or both Ax and Az are used (split-complex).
+
+    Only assembled matrices (__A) are handled.  Finite-element matrices
+    (__E) are not handled.
+ */
+
+PUBLIC Int RB(read)              /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    char *filename,     /* filename to read from */
+    Int build_upper,    /* if true, construct upper part for sym. matrices */
+    Int zero_handling,  /* 0: do nothing, 1: prune zeros, 2: extract zeros */
+
+    /* output */
+    char title [73],
+    char key [9],
+    char mtype [4],     /* RUA, RSA, PUA, PSA, RRA, etc */
+    Int *nrow,          /* A is nrow-by-ncol */
+    Int *ncol,
+    Int *mkind,         /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    Int *skind,         /* R: -1, U: 0, S: 1, H: 2, Z: 3 */
+    Int *asize,         /* Ai array has size asize*sizeof(double) */
+    Int *znz,           /* number of explicit zeros removed from A */
+
+    /* output: these are malloc'ed below and must be freed by the caller */
+    Int **p_Ap,         /* column pointers of A */
+    Int **p_Ai,         /* row indices of A */
+    double **p_Ax,      /* real values (ignored if NULL) of A */
+    double **p_Az,      /* imaginary values (ignored if NULL) of A */
+    Int **p_Zp,         /* column pointers of Z */
+    Int **p_Zi          /* row indices of Z */
+)
+{
+    Int nnz, nelnz, status, fem ;
+    Int *w, *cp, *Ap, *Ai, *Zp, *Zi ;
+    double *Ax, *Az ;
+    FILE *file = NULL ;     /* read from stdin if NULL */
+    int ok ;
+    char s [SLEN+1], ptrfmt [21], indfmt [21], valfmt [21] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_Ap) *p_Ap = NULL ;
+    if (p_Ai) *p_Ai = NULL ;
+    if (p_Ax) *p_Ax = NULL ;
+    if (p_Az) *p_Az = NULL ;
+    if (p_Zp) *p_Zp = NULL ;
+    if (p_Zi) *p_Zi = NULL ;
+
+    if (!title || !key || !mtype || !p_Ap || !p_Ai || !nrow || !ncol || !mkind
+        || !skind || (zero_handling == 2 && (!p_Zp || !p_Zi)) || !znz || !asize)
+    {
+        /* one or more required arguments are missing (NULL) */
+        return (RBIO_ARG_ERROR) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the header */
+    /* ---------------------------------------------------------------------- */
+
+    if (filename)
+    {
+        file = fopen (filename, "r") ;
+        if (file == NULL)
+        {
+            return (RBIO_FILE_IOERROR) ;      /* cannot open file */
+        }
+    }
+
+    status = RB(header) (file, title, key, mtype, nrow, ncol, &nnz, &nelnz,
+        ptrfmt, indfmt, valfmt, mkind, skind, &fem, s, SLEN) ;
+
+    /* close the file, so if there is an error the file is not left open */
+    if (filename) fclose (file) ;
+
+    if (status != 0)
+    {
+        return (status) ;
+    }
+
+    if (fem)
+    {
+        return (RBIO_UNSUPPORTED) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* adjust mkind based on the presence of Ax and Az input arguments */
+    /* ---------------------------------------------------------------------- */
+
+    if (!p_Ax)
+    {
+        /* the numerical values cannot be returned, so this is read as a
+           pattern-only matrix */
+        *mkind = 1 ;
+    }
+
+    if (*mkind == 2 && !p_Az)
+    {
+        /* The matrix is complex.  If p_Az is NULL, then the imaginary part
+           will be returned in Ax, and the matrix is thus 4:merged-complex */
+        *mkind = 4 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate space for A */
+    /* ---------------------------------------------------------------------- */
+
+    *asize = ((build_upper) ? 2 : 1) * MAX (nnz, 1) ;
+    Ap = (Int *) SuiteSparse_malloc ((*ncol) + 1, sizeof (Int)) ;
+    Ai = (Int *) SuiteSparse_malloc (*asize, sizeof (Int)) ;
+    ok = (Ap != NULL && Ai != NULL) ;
+    Ax = NULL ;
+    Az = NULL ;
+    Zp = NULL ;
+    Zi = NULL ;
+
+    if (*mkind == 0 || *mkind == 3 || *mkind == 1)
+    {
+        /* return A as real, integer, or pattern */
+        if (p_Ax)
+        {
+            Ax = (double *) SuiteSparse_malloc (*asize, sizeof (double)) ;
+            ok = ok && (Ax != NULL) ;
+        }
+    }
+    else if (*mkind == 2)
+    {
+        /* return A as split-complex */
+        Ax = (double *) SuiteSparse_malloc (*asize, sizeof (double)) ;
+        Az = (double *) SuiteSparse_malloc (*asize, sizeof (double)) ;
+        ok = ok && (Ax != NULL && Az != NULL) ;
+    }
+    else /* if (*mkind == 4) */
+    {
+        /* return A as merged-complex */
+        Ax = (double *) SuiteSparse_malloc (*asize, 2*sizeof (double)) ;
+        ok = ok && (Ax != NULL) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate workspace */
+    /* ---------------------------------------------------------------------- */
+
+    cp = (Int *) SuiteSparse_malloc ((*ncol) + 1, sizeof (Int)) ;
+    w  = (Int *) SuiteSparse_malloc (MAX (*nrow, *ncol) + 1, sizeof (Int)) ;
+    ok = ok && (cp != NULL && w != NULL) ;
+
+    if (!ok)
+    {
+        FREE_ALL ;
+        return (RBIO_OUT_OF_MEMORY) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the matrix */
+    /* ---------------------------------------------------------------------- */
+
+    if (filename)
+    {
+        file = fopen (filename, "r") ;
+        if (file == NULL)
+        {
+            FREE_ALL ;
+            return (RBIO_FILE_IOERROR) ;      /* cannot reopen file */
+        }
+    }
+
+    status = RB(read2) (file, *nrow, *ncol, nnz, *mkind, *skind, build_upper,
+        Ap, Ai, Ax, Az, w, cp, s, SLEN) ;
+
+    if (filename) fclose (file) ;
+
+    if (status != 0)
+    {
+        FREE_ALL ;
+        return (status) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace */
+    /* ---------------------------------------------------------------------- */
+
+    FREE_WORK ;
+
+    /* ---------------------------------------------------------------------- */
+    /* prune or extract exact zeros */
+    /* ---------------------------------------------------------------------- */
+
+    if (zero_handling == 2)
+    {
+        /* allocate the Z matrix */
+        *znz = RB(zcount) (Ap [*ncol], *mkind, Ax, Az) ;
+        Zp = (Int *) SuiteSparse_malloc ((*ncol) + 1, sizeof (Int)) ;
+        Zi = (Int *) SuiteSparse_malloc (*znz, sizeof (Int)) ;
+        if (Zp == NULL || Zi == NULL)
+        {
+            FREE_ALL ;
+            return (RBIO_OUT_OF_MEMORY) ;
+        }
+        /* remove zeros from A and store their pattern in Z */
+        RB(extract) (*ncol, *mkind, Ap, Ai, Ax, Az, Zp, Zi) ;
+    }
+    else if (zero_handling == 1)
+    {
+        /* remove zeros from A and discard them */
+        *znz = RB(extract) (*ncol, *mkind, Ap, Ai, Ax, Az, NULL, NULL) ;
+    }
+    else
+    {
+        *znz = 0 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return results */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_Ap) *p_Ap = Ap ;
+    if (p_Ai) *p_Ai = Ai ;
+    if (p_Ax) *p_Ax = Ax ;
+    if (p_Az) *p_Az = Az ;
+    if (p_Zp) *p_Zp = Zp ;
+    if (p_Zi) *p_Zi = Zi ;
+    return (RBIO_OK) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBreadraw: read the raw contents of a Rutherford/Boeing file */
+/* -------------------------------------------------------------------------- */
+
+PUBLIC Int RB(readraw)           /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    char *filename,     /* filename to read from */
+
+    /* output */
+    char title [73],
+    char key [9],
+    char mtype [4],     /* RUA, RSA, PUA, PSA, RRA, etc */
+    Int *nrow,          /* A is nrow-by-ncol */
+    Int *ncol,
+    Int *nnz,           /* size of Ai */
+    Int *nelnz,
+    Int *mkind,         /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    Int *skind,         /* R: -1, U: 0, S: 1, H: 2, Z: 3 */
+    Int *fem,           /* 0:__A, 1:__E */
+    Int *xsize,         /* size of Ax */
+
+    /* output: these are malloc'ed below and must be freed by the caller */
+    Int **p_Ap,         /* size ncol+1, column pointers of A */
+    Int **p_Ai,         /* size nnz, row indices of A */
+    double **p_Ax       /* size xsize, numerical values of A */
+)
+{
+    FILE *file = NULL ; /* read from stdin if NULL */
+    Int *Ap, *Ai ;
+    double *Ax ;
+    Int status ;
+    int ok ;
+    char s [SLEN+1], ptrfmt [21], indfmt [21], valfmt [21] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_Ap) *p_Ap = NULL ;
+    if (p_Ai) *p_Ai = NULL ;
+    if (p_Ax) *p_Ax = NULL ;
+
+    if (!title || !key || !mtype || !nrow || !ncol || !nnz || !nelnz || !mkind
+        || !skind || !fem || !xsize || !p_Ap || !p_Ai || !p_Ax)
+    {
+        /* one or more required arguments are missing (NULL) */
+        return (RBIO_ARG_ERROR) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the header */
+    /* ---------------------------------------------------------------------- */
+
+    if (filename)
+    {
+        file = fopen (filename, "r") ;
+        if (file == NULL)
+        {
+            return (RBIO_FILE_IOERROR) ;      /* cannot open file */
+        }
+    }
+
+    status = RB(header) (file, title, key, mtype, nrow, ncol, nnz, nelnz,
+        ptrfmt, indfmt, valfmt, mkind, skind, fem, s, SLEN) ;
+
+    /* close the file, so if there is an error the file is not left open */
+    if (filename) fclose (file) ;
+
+    if (status != 0)
+    {
+        return (status) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate space for Ap, Ai, and Ax */
+    /* ---------------------------------------------------------------------- */
+
+    Ap = (Int *) SuiteSparse_malloc ((*ncol) + 1, sizeof (Int)) ;
+    Ai = (Int *) SuiteSparse_malloc (*nnz, sizeof (Int)) ;
+    ok = (Ap != NULL && Ai != NULL) ;
+
+    if (*mkind == 1)
+    {
+        /* A is pattern-only */
+        *xsize = 0 ;
+        Ax = NULL ;
+    }
+    else
+    {
+        /* A has numerical values */
+        *xsize = ((*fem) ? (*nelnz) : (*nnz)) * (((*mkind) == 2) ? 2 : 1) ;
+        Ax = (double *) SuiteSparse_malloc (*xsize, sizeof (double)) ;
+        ok = ok && (Ax != NULL) ;
+    }
+
+    if (!ok)
+    {
+        FREE_RAW ;
+        return (RBIO_OUT_OF_MEMORY) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* read the matrix */
+    /* ---------------------------------------------------------------------- */
+
+    if (filename)
+    {
+        file = fopen (filename, "r") ;
+        if (file == NULL)
+        {
+            FREE_RAW ;
+            return (RBIO_FILE_IOERROR) ;        /* cannot reopen file */
+        }
+        RB(skipheader) (s, SLEN, file) ;        /* skip past the header */
+    }
+
+    if (!RB(iread) (file, (*ncol)+1, 1, Ap, s, SLEN))
+    {
+        FREE_RAW ;
+        if (filename) fclose (file) ;
+        return (RBIO_CP_IOERROR) ;      /* I/O error reading column pointers */
+    }
+
+    if (!RB(iread) (file, *nnz, 1, Ai, s, SLEN))
+    {
+        FREE_RAW ;
+        if (filename) fclose (file) ;
+        return (RBIO_ROW_IOERROR) ;     /* I/O error reading row indices */
+    }
+
+    if (*mkind != 1)
+    {
+        if (!RB(xread) (file, *xsize, 0, Ax, NULL, s, SLEN))
+        {
+            FREE_RAW ;
+            if (filename) fclose (file) ;
+            return (RBIO_VALUE_IOERROR) ;     /* I/O error reading values */
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return results */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_Ap) *p_Ap = Ap ;
+    if (p_Ai) *p_Ai = Ai ;
+    if (p_Ax) *p_Ax = Ax ;
+    if (filename) fclose (file) ;
+    return (RBIO_OK) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBfix_mkind_in: adjust mkind_in, based on presence of Ax and Az */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(fix_mkind_in)      /* return revised mkind */
+(
+    Int mkind_in,       /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    double *Ax,
+    double *Az
+)
+{
+    if (!Ax)
+    {
+        /* matrix must be 1:pattern */
+        mkind_in = 1 ;
+    }
+    if (mkind_in == 2 && !Az)
+    {
+        /* matrix must be 4:merged-complex */
+        mkind_in = 4 ;
+    }
+    return (mkind_in) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBwrite */
+/* -------------------------------------------------------------------------- */
+
+PUBLIC Int RB(write)         /* 0:OK, < 0: error, > 0: warning */
+(
+    /* input */
+    char *filename, /* filename to write to (stdout if NULL) */
+    char *title,    /* title (72 char max), may be NULL */
+    char *key,      /* key (8 char max), may be NULL */
+    Int nrow,       /* A is nrow-by-ncol */
+    Int ncol,
+    Int *Ap,        /* size ncol+1, column pointers */
+    Int *Ai,        /* size anz=Ap[ncol], row indices (sorted) */
+    double *Ax,     /* size anz or 2*anz, numerical values (binary if NULL) */
+    double *Az,     /* size anz, imaginary part (real if NULL) */
+    Int *Zp,        /* size ncol+1, column pointers for Z (or NULL) */
+    Int *Zi,        /* size znz=Zp[ncol], row indices for Z (or NULL) */
+    Int mkind_in,   /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+
+    /* output */
+    char mtype [4]  /* matrix type (RUA, RSA, etc), may be NULL */
+)
+{
+    double xmin, xmax, zmin, zmax ;
+    Int *w, *cp ;
+    FILE *file = NULL ;     /* write to stdout if NULL */
+    Int mkind, skind, zmkind, zskind, nnz2, vals, valn, indn, ptrn, valcrd,
+        indcrd, ptrcrd, totcrd, anz, is_int, fmt, nbuf, j, njumbled, nzeros,
+        znz, asize, status, nelnz = 0 ;
+    int ok ;
+    char zmtype [4], indfmt [21], indcfm [21], valfmt [21], valcfm [21],
+        ptrfmt [21], ptrcfm [21], mtype2 [4] ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (!title || !key || !Ap || !Ax)
+    {
+        /* one or more required arguments are missing (NULL) */
+        return (RBIO_ARG_ERROR) ;
+    }
+
+    mkind_in = RB(fix_mkind_in) (mkind_in, Ax, Az) ;
+
+    anz = Ap ? (Ap [MAX (ncol,0)]) : 1 ;
+    status = RB(ok) (nrow, ncol, anz, Ap, Ai, Ax, Az, NULL, mkind_in,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_OK)
+    {
+        /* A matrix is corrupted */
+        return (status) ;
+    }
+
+    if (Zp != NULL)
+    {
+        znz = Zp [MAX (ncol,0)] ;
+        status = RB(ok) (nrow, ncol, znz, Zp, Zi, NULL, NULL, NULL, 3,
+            &njumbled, &nzeros) ;
+        if (status != RBIO_OK)
+        {
+            /* Z matrix is corrupted */
+            return (status) ;
+        }
+    }
+
+    if (mtype == NULL)
+    {
+        /* use internal array for mtype; do not return to caller */
+        mtype = mtype2 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* clear the format strings */
+    /* ---------------------------------------------------------------------- */
+
+    RB(fill) (valfmt, 20, ' ') ;
+    RB(fill) (valcfm, 20, ' ') ;
+    RB(fill) (indfmt, 20, ' ') ;
+    RB(fill) (indcfm, 20, ' ') ;
+    RB(fill) (ptrfmt, 20, ' ') ;
+    RB(fill) (ptrcfm, 20, ' ') ;
+    indn = 0 ;
+    valn = 0 ;
+    ptrn = 0 ;
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate workspace */
+    /* ---------------------------------------------------------------------- */
+
+    w  = SuiteSparse_malloc (MAX (nrow, ncol) + 1, sizeof (Int)) ;
+    cp = SuiteSparse_malloc (ncol + 1, sizeof (Int)) ;
+    if (cp == NULL || w == NULL)
+    {
+        FREE_WORK ;
+        return (RBIO_OUT_OF_MEMORY) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* determine the matrix type (RSA, RUA, etc) of A+Z */
+    /* ---------------------------------------------------------------------- */
+
+    RB(kind) (nrow, ncol, Ap, Ai, Ax, Az, mkind_in, &mkind, &skind, mtype,
+        &xmin, &xmax, cp) ;
+
+    /* now use mkind instead of mkind_in */
+
+    if (Zp != NULL && Zp [ncol] == 0)
+    {
+        /* Z has no entries; ignore it */
+        Zp = NULL ;
+        Zi = NULL ;
+    }
+
+    if (Zp != NULL)
+    {
+        /* determine if Z is symmetric or not */
+        RB(kind) (nrow, ncol, Zp, Zi, NULL, NULL, 3, &zmkind, &zskind, zmtype,
+            &zmin, &zmax, cp) ;
+        if (zskind == 0)
+        {
+            /* Z is square and unsymmetric; force A unsymmetric too */
+            mtype [1] = 'u' ;
+            skind = 0 ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* determine the required precision for the numerical values */
+    /* ---------------------------------------------------------------------- */
+
+    asize = ((mkind == 4) ? 2 : 1) * anz ;
+    is_int = (mkind == 3) ;
+    if (mkind != 1)
+    {
+        /* A is real, split-complex, integer or merged-complex: check Ax */
+        fmt = RB(format) (asize, Ax, is_int, xmin, xmax, 0,
+            valfmt, valcfm, &valn) ;
+    }
+    if (mkind == 2)
+    {
+        /* A is split-complex: check Az */
+        fmt = RB(format) (anz, Az, FALSE, 0, 0, fmt, valfmt, valcfm, &valn) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* determine the number of entries in the matrix A+Z */
+    /* ---------------------------------------------------------------------- */
+
+    /* task 1 does not write to the file */
+    ok = RB(writeTask) (NULL, 1, nrow, ncol, mkind, skind, Ap, Ai, Ax, Az, Zp,
+        Zi, indcfm, indn, valcfm, valn, &nnz2, w, cp) ;
+    if (nnz2 <= 0)
+    {
+        FREE_WORK ;
+        return (RBIO_DIM_INVALID) ;   /* matrix has no entries to print */
+    }
+
+    /* determine pointer format.  ncol+1 integers, in range 1 to nnz2+1 */
+    RB(iformat) (1, nnz2+1, ptrfmt, ptrcfm, &ptrn) ;
+    ptrcrd = RB(cards) (ncol+1, ptrn) ;
+
+    /* determine row index format.  nnz2 integers, in range 1 to nrow */
+    RB(iformat) (1, nrow, indfmt, indcfm, &indn) ;
+    indcrd = RB(cards) (nnz2, indn) ;
+
+    /* determine how many lines for the numerical values */
+    if (mkind == 0 || mkind == 3)
+    {
+        /* real or integer */
+        vals = 1 ;
+    }
+    else if (mkind == 1)
+    {
+        /* pattern */
+        vals = 0 ;
+    }
+    else
+    {
+        /* complex (merged or split) */
+        vals = 2 ;
+    }
+    valcrd = RB(cards) (vals*nnz2, valn) ;
+
+    /* ---------------------------------------------------------------------- */
+    /* determine total number of cards */
+    /* ---------------------------------------------------------------------- */
+
+    totcrd = ptrcrd + indcrd + valcrd ;
+
+    /* ---------------------------------------------------------------------- */
+    /* open the file */
+    /* ---------------------------------------------------------------------- */
+
+    if (filename)
+    {
+        file = fopen (filename, "w") ;
+        if (file == NULL)
+        {
+            FREE_WORK ;
+            return (RBIO_FILE_IOERROR) ;      /* cannot open file */
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* write the header */
+    /* ---------------------------------------------------------------------- */
+
+    ok = fprintf (file, "%-71.71s|%-8.8s\n",
+        title ? title : "", key ? key : "") > 0;
+    ok = ok && fprintf (file, "%14" IDD "%14" IDD "%14" IDD "%14" IDD "\n",
+        totcrd, ptrcrd, indcrd, valcrd) > 0 ;
+    ok = ok && fprintf (file,
+        "%3s           %14" IDD "%14" IDD "%14" IDD "%14" IDD "\n",
+        mtype, nrow, ncol, nnz2, nelnz) > 0 ;
+    ok = ok && fprintf (file, "%.16s%.16s%.20s\n", ptrfmt, indfmt, valfmt) > 0 ;
+    if (!ok)
+    {
+        /* file I/O error */
+        FREE_WORK ;
+        if (filename) fclose (file) ;
+        return (RBIO_HEADER_IOERROR) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* write the column pointers (convert to 1-based) */
+    /* ---------------------------------------------------------------------- */
+
+    nbuf = 0 ;
+    for (j = 0 ; ok && j <= ncol ; j++)
+    {
+        ok = RB(iprint) (file, ptrcfm, 1+ cp [j], ptrn, &nbuf) ;
+    }
+    ok = ok && fprintf (file, "\n") > 0 ;
+    if (!ok)
+    {
+        /* file I/O error */
+        FREE_WORK ;
+        if (filename) fclose (file) ;
+        return (RBIO_CP_IOERROR) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* write the row indices (convert to 1-based) */
+    /* ---------------------------------------------------------------------- */
+
+    ok = RB(writeTask) (file, 2, nrow, ncol, mkind, skind, Ap, Ai, Ax, Az,
+        Zp, Zi, indcfm, indn, valcfm, valn, &nnz2, w, cp) ;
+    if (!ok)
+    {
+        /* file I/O error */
+        FREE_WORK ;
+        if (filename) fclose (file) ;
+        return (RBIO_ROW_IOERROR) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* write the numerical values */
+    /* ---------------------------------------------------------------------- */
+
+    if (mkind != 1)
+    {
+        ok = RB(writeTask) (file, 3, nrow, ncol, mkind, skind, Ap, Ai,
+            Ax, Az, Zp, Zi, indcfm, indn, valcfm, valn, &nnz2, w, cp) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace and close the file */
+    /* ---------------------------------------------------------------------- */
+
+    FREE_WORK ;
+    if (filename) fclose (file) ;
+    return (ok ? RBIO_OK : RBIO_VALUE_IOERROR) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBkind: determine the type of a sparse matrix */
+/* -------------------------------------------------------------------------- */
+
+PUBLIC Int RB(kind)          /* 0: OK, < 0: error, > 0: warning */
+(
+    /* input */
+    Int nrow,       /* A is nrow-by-ncol */
+    Int ncol,
+    Int *Ap,        /* Ap [0...ncol]: column pointers */
+    Int *Ai,        /* Ai [0...nnz-1]: row indices */
+    double *Ax,     /* Ax [0...nnz-1]: real values.  Az holds imaginary part */
+    double *Az,     /* if real, Az is NULL. if complex, Az is non-NULL */
+    Int mkind_in,   /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+
+    /* output */
+    Int *mkind,     /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    Int *skind,     /* r: -1 (rectangular), u: 0 (unsymmetric), s: 1 symmetric,
+                       h: 2 (Hermitian), z: 3 (skew symmetric) */
+    char mtype [4], /* rua, psa, rra, cha, etc */
+    double *xmin,   /* smallest value */
+    double *xmax,   /* largest value */
+
+    /* workspace: allocated internally if NULL */
+    Int *cp         /* workspace of size ncol+1, undefined on input and output*/
+)
+{
+    Int nnz, is_h, is_z, is_s, k, p, i, j, pt, get_workspace ;
+    Int *w = NULL ;
+    double aij_real, aij_imag, aji_real, aji_imag ;
+
+    /* ---------------------------------------------------------------------- */
+    /* check inputs */
+    /* ---------------------------------------------------------------------- */
+
+    if (!Ap || !Ai || !mkind || !skind || !mtype || !xmin || !xmax
+        || ncol < 0 || nrow < 0)
+    {
+        /* one or more required arguments are missing (NULL) or invalid */
+        return (RBIO_ARG_ERROR) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* allocate workspace, if needed */
+    /* ---------------------------------------------------------------------- */
+
+    get_workspace = (cp == NULL) ;
+    if (get_workspace)
+    {
+        cp = (Int *) SuiteSparse_malloc (ncol + 1, sizeof (Int)) ;
+    }
+    if (cp == NULL)
+    {
+        return (RBIO_OUT_OF_MEMORY) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* determine numeric type (I*A, R*A, P*A, C*A) */
+    /* ---------------------------------------------------------------------- */
+
+    mkind_in = RB(fix_mkind_in) (mkind_in, Ax, Az) ;
+
+    mtype [3] = '\0' ;
+    nnz = Ap [ncol] ;
+    *xmin = 0 ;
+    *xmax = 0 ;
+
+    if (mkind_in == 2 || mkind_in == 4)
+    {
+        /* A is a complex matrix (C*A), split or merged */
+        mtype [0] = 'c' ;
+        *mkind = mkind_in ;
+    }
+    else if (mkind_in == 1)
+    {
+        /* A is a pattern-only matrix (P*A) */
+        mtype [0] = 'p' ;
+        *mkind = 1 ;
+    }
+    else
+    {
+        /* The input matrix A is said to be 0:real or 3:integer, */
+        /* Ax is not NULL */
+
+        /* select P** format if all entries are equal to 1 */
+        /* select I** format if all entries are integer and */
+        /* between -99,999,999 and +999,999,999 */
+
+        Int is_p = TRUE ;
+        Int is_int = TRUE ;
+        *xmin = Ax [0] ;
+        *xmax = Ax [0] ;
+
+        for (p = 0 ; (is_p || is_int) && p < nnz ; p++)
+        {
+            if (is_p)
+            {
+                if (Ax [p] != 1)
+                {
+                    is_p = FALSE ;
+                }
+            }
+            if (is_int)
+            {
+                double x = Ax [p] ;
+                k = (Int) x ;
+                *xmin = MIN (x, *xmin) ;
+                *xmax = MAX (x, *xmax) ;
+                if (((double) k) != x)
+                {
+                    /* the entry is not an integer */
+                    is_int = FALSE ;
+                }
+		if (x < -99999999 || x >= 999999999) 
+                {
+                    /* use real format for really big integers */
+                    is_int = FALSE ;
+                }
+            }
+        }
+
+        if (is_p)
+        {
+            /* pattern-only matrix (P*A) */
+            mtype [0] = 'p' ;
+            *mkind = 1 ;
+        }
+        else if (is_int)
+        {
+            /* integer matrix (I*A) */
+            mtype [0] = 'i' ;
+            *mkind = 3 ;
+        }
+        else
+        {
+            /* real matrix (R*A) */
+            mtype [0] = 'r' ;
+            *mkind = 0 ;
+        }
+    }
+
+    /* only assembled matrices are handled */
+    mtype [2] = 'a' ;
+
+    /* ---------------------------------------------------------------------- */
+    /* determine symmetry (*RA, *UA, *SA, *HA, *ZA) */
+    /* ---------------------------------------------------------------------- */
+
+    /* Note that A must have sorted columns for this method to work.  */
+
+    if (nrow != ncol)
+    {
+        /* rectangular matrix (*RA), no need to check values or pattern */
+        mtype [1] = 'r' ;
+        *skind = -1 ;
+        if (get_workspace) FREE_WORK ;
+        return (RBIO_OK) ;
+    }
+
+    /* if complex, the matrix is Hermitian until proven otherwise */
+    is_h = (*mkind == 2 || *mkind == 4) ;
+
+    /* the matrix is symmetric until proven otherwise */
+    is_s = TRUE ;
+
+    /* a non-pattern matrix is skew symmetric until proven otherwise */
+    is_z = (*mkind != 1) ;
+
+    /* if this method returns early, the matrix is unsymmetric */
+    mtype [1] = 'u' ;
+    *skind = 0 ;
+
+    /* initialize the munch pointers (cp) */
+    for (j = 0 ; j <= ncol ; j++)
+    {
+        cp [j] = Ap [j] ;
+    }
+
+    for (j = 0 ; j < ncol ; j++)
+    {
+
+        /* consider all entries not yet munched in column j */
+        for (p = cp [j] ; p < Ap [j+1] ; p++)
+        {
+            /* get the row index of A(i,j) */
+            i = Ai [p] ;
+
+            if (i < j)
+            {
+                /* entry A(i,j) is unmatched, matrix is unsymmetric */
+                if (get_workspace) FREE_WORK ;
+                return (RBIO_OK) ;
+            }
+
+            /* get the A(j,i) entry, if it exists, and munch it */
+            pt = cp [i]++ ;
+
+            if (pt >= Ap [i+1] || Ai [pt] != j)
+            {
+                /* entry A(j,i) doesn't exist, matrix is unsymmetric */
+                if (get_workspace) FREE_WORK ;
+                return (RBIO_OK) ;
+            }
+
+            /* A(j,i) exists; check its value with A(i,j) */
+            RB(get_entry) (*mkind, Ax, Az, p,  &aij_real, &aij_imag) ;
+            RB(get_entry) (*mkind, Ax, Az, pt, &aji_real, &aji_imag) ;
+
+            if (aij_real != aji_real || aij_imag != aji_imag)
+            {
+                is_s = FALSE ;      /* the matrix cannot be *SA */
+            }
+            if (aij_real != -aji_real || aij_imag != -aji_imag)
+            {
+                is_z = FALSE ;      /* the matrix cannot be *ZA */
+            }
+            if (aij_real != aji_real || aij_imag != -aji_imag)
+            {
+                is_h = FALSE ;      /* the matrix cannot be *HA */
+            }
+
+            if (! (is_s || is_z || is_h))
+            {
+                /* matrix is unsymmetric; terminate the test */
+                if (get_workspace) FREE_WORK ;
+                return (RBIO_OK) ;
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return the symmetry */
+    /* ---------------------------------------------------------------------- */
+
+    if (is_h)
+    {
+        /* Hermitian matrix (*HA) */
+        mtype [1] = 'h' ;
+        *skind = 2 ;
+    }
+    else if (is_s)
+    {
+        /* symmetric matrix (*SA) */
+        mtype [1] = 's' ;
+        *skind = 1 ;
+    }
+    else if (is_z)
+    {
+        /* skew symmetric matrix (*ZA) */
+        mtype [1] = 'z' ;
+        *skind = 3 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* free workspace, if allocated */
+    /* ---------------------------------------------------------------------- */
+
+    if (get_workspace) FREE_WORK ;
+    return (RBIO_OK) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBwrite data formats */
+/* -------------------------------------------------------------------------- */
+
+#define NFORMAT 19
+
+/* Fortran formats */
+static char *F_format [NFORMAT] = {
+    "(8E9.1)             ",
+    "(8E10.2)            ",
+    "(7E11.3)            ",
+    "(6E12.4)            ",
+    "(6E13.5)            ",
+    "(5E14.6)            ",
+    "(5E15.7)            ",
+    "(5E16.8)            ",
+    "(4E17.9)            ",
+    "(4E18.10)           ",
+    "(4E19.11)           ",
+    "(4E20.12)           ",
+    "(3E21.13)           ",
+    "(3E22.14)           ",
+    "(3E23.15)           ",
+    "(3E24.16)           ",
+    "(3E25.17)           ",
+    "(3E26.18)           ",
+    "(2E30.18E3)         " } ;
+
+/* corresponding C formats to use */
+static char *C_format [NFORMAT] = {
+    "%9.1E",
+    "%10.2E",
+    "%11.3E",
+    "%12.4E",
+    "%13.5E",
+    "%14.6E",
+    "%15.7E",
+    "%16.8E",
+    "%17.9E",
+    "%18.10E",
+    "%19.11E",
+    "%20.12E",
+    "%21.13E",
+    "%22.14E",
+    "%23.15E",
+    "%24.16E",
+    "%25.17E",
+    "%26.18E",
+    "%30.18E" } ;
+
+/* Number of entries per line for each of the formats */
+static Int entries_per_line [NFORMAT] = {
+    8,
+    8,
+    7,
+    6,
+    6,
+    5,
+    5,
+    5,
+    4,
+    4,
+    4,
+    4,
+    3,
+    3,
+    3,
+    3,
+    3,
+    3,
+    2} ;
+
+
+/* -------------------------------------------------------------------------- */
+/* RBformat: determine the format required for an array of values */
+/* -------------------------------------------------------------------------- */
+
+/*
+    This function ensures that a sufficiently wide format is used that
+    accurately represent the data.  It also ensures that when printed,
+    the numerical values all have at least one blank space between them.
+*/
+
+PRIVATE Int RB(format)  /* return format to use (index in F_, C_format) */
+(
+    /* input */
+    Int nnz,            /* number of nonzeros */
+    double *x,          /* of size nnz */
+    Int is_int,         /* true if integer format is to be used */
+    double xmin,        /* minimum value of x */
+    double xmax,        /* maximum value of x */
+    Int fmt,            /* initial format to use (index into F_format, ...) */
+
+    /* output */
+    char valfmt [21],   /* Fortran format to use */
+    char valcfm [21],   /* C format to use */
+    Int *valn           /* number of entries per line */
+)
+{
+    Int i ;
+    double a, b ;
+    char s [1024] ;
+
+    if (is_int)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* use an integer format */
+        /* ------------------------------------------------------------------ */
+
+        RB(iformat) (xmin, xmax, valfmt, valcfm, valn) ;
+        return (-1) ;
+
+    }
+    else
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* find the required precision for a real or complex matrix */
+        /* ------------------------------------------------------------------ */
+
+        fmt = 0 ;
+        for (i = 0 ; i < nnz ; i++)
+        {
+
+            /* determine if the matrix has huge values, tiny values, or NaN's */
+            a = ABS (x [i]) ;
+            if (a != 0)
+            {
+                if (ISNAN (a) || a < 1e-90 || a > 1e90)
+                {
+                    fmt = NFORMAT-1 ;
+                    break ;
+                }
+            }
+
+            a = x ? x [i] : 1 ;
+            for ( ; fmt < NFORMAT-1 ; fmt++)
+            {
+                /* write the value to a string, read back in, and check,
+                 * using the kth format */
+                sprintf (s, C_format [fmt], a) ;
+                b = 0 ;
+                sscanf (s, "%lg", &b) ;
+                if (s [0] == ' ' && a == b)
+                {
+                    /* success, use this format (or wider) for all numbers */
+                    break ;
+                }
+            }
+        }
+
+        strncpy (valfmt, F_format [fmt], 21) ;
+        strncpy (valcfm, C_format [fmt], 21) ;
+        *valn = entries_per_line [fmt] ;
+        return (fmt) ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBwriteTask: write portions of the matrix to the file */
+/* -------------------------------------------------------------------------- */
+
+/*
+   task 0: just count the total number of entries in the matrix.  No file I/O.
+   task 1: do task 0, and also construct w and cp.  No file I/O.
+   task 2: write the row indices
+   task 3: write the numerical values
+*/
+
+PRIVATE Int RB(writeTask)     /* returns TRUE if successful, FALSE on failure */
+(
+    /* input */
+    FILE *file,     /* file to print to (already open) */
+    Int task,       /* 0 to 3 (see above) */
+    Int nrow,       /* A is nrow-by-ncol */
+    Int ncol,
+    Int mkind,      /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+    Int skind,      /* -1:rect, 0:unsym, 1:sym, 2:hermitian, 3:skew */
+    Int *Ap,        /* size ncol+1, column pointers */
+    Int *Ai,        /* size anz=Ap[ncol], row indices */
+    double *Ax,     /* size anz, real values */
+    double *Az,     /* size anz, imaginary part (may be NULL) */
+    Int *Zp,        /* size ncol+1, column pointers for Z (may be NULL) */
+    Int *Zi,        /* size Zp[ncol], row indices for Z */
+    char *indcfm,   /* C format for indices */
+    Int indn,       /* # of indices per line */
+    char *valcfm,   /* C format for values */
+    Int valn,       /* # of values per line */
+
+    /* output */
+    Int *nnz,           /* number of entries that will be printed to the file */
+
+    /* workspace */
+    Int *w,         /* size MAX(nrow,ncol)+1 */
+    Int *cp         /* size ncol+1 */
+)
+{
+    double xr, xz ;
+    Int j, pa, pz, paend, pzend, ia, iz, i, nbuf, ok ;
+
+    /* ---------------------------------------------------------------------- */
+    /* clear the nonzero counts */
+    /* ---------------------------------------------------------------------- */
+
+    *nnz = 0 ;
+    for (j = 0 ; j < ncol ; j++)
+    {
+        w [j] = 0 ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* print, or count, each column */
+    /* ---------------------------------------------------------------------- */
+
+    nbuf = 0 ;      /* number of characters in current line */
+    ok = TRUE ;
+    for (j = 0 ; ok && j < ncol ; j++)
+    {
+
+        /* find the set union of A (:,j) and Z (:,j) */
+        pa = Ap [j] ;
+        pz = Zp ? Zp [j] : 0 ;
+        paend = Ap [j+1] ;
+        pzend = Zp ? Zp [j+1] : 0 ;
+
+        /* repeat while entries still exist in A(:,j) or Z(:,j) */
+        while (ok)
+        {
+            /* get the next entry from A(:,j) */
+            ia = (pa < paend) ? Ai [pa] : nrow ;
+
+            /* get the next entry from Z(:,j) */
+            iz = (pz < pzend) ? Zi [pz] : nrow ;
+
+            /* exit loop if neither entry is present */
+            if (ia >= nrow && iz >= nrow) break ;
+
+            if (ia < iz)
+            {
+                /* get A (i,j) */
+                i = ia ;
+                RB(get_entry) (mkind, Ax, Az, pa, &xr, &xz) ;
+                pa++ ;
+            }
+            else if (iz < ia)
+            {
+                /* get Z (i,j) */
+                i = iz ;
+                xr = 0 ;
+                xz = 0 ;
+                pz++ ;
+            }
+            else
+            {
+                /* get A (i,j), and delete its matched Z(i,j) */
+                i = ia ;
+                RB(get_entry) (mkind, Ax, Az, pa, &xr, &xz) ;
+                pa++ ;
+                pz++ ;
+            }
+
+            if (skind <= 0 || i >= j)
+            {
+                /* consider the (i,j) entry with value (xr,xz) */
+                (*nnz)++ ;
+                if (task == 1)
+                {
+                    /* only determining nonzero counts */
+                    w [j]++ ;
+                }
+                else if (task == 2)
+                {
+                    /* printing the row indices (convert to 1-based) */
+                    ok = RB(iprint) (file, indcfm, 1+ i, indn, &nbuf) ;
+                }
+                else if (task == 3)
+                {
+                    /* printing the numerical values */
+                    ok = RB(xprint) (file, valcfm, xr, valn, mkind, &nbuf) ;
+                    if (ok && (mkind == 2 || mkind == 4))
+                    {
+                        ok = RB(xprint) (file, valcfm, xz, valn, mkind, &nbuf) ;
+                    }
+                }
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* determine the new column pointers, or finish printing */
+    /* ---------------------------------------------------------------------- */
+
+    if (ok)
+    {
+        if (task == 1)
+        {
+            cp [0] = 0 ;
+            for (j = 0 ; j < ncol ; j++)
+            {
+                cp [j+1] = cp [j] + w [j] ;
+            }
+        }
+        else
+        {
+            ok = (fprintf (file ? file : stdout, "\n") > 0) ;
+        }
+    }
+    return (ok) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBiprint: print one integer value to the file */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(iprint)        /* returns TRUE if OK, FALSE otherwise */
+(
+    /* input */
+    FILE *file,             /* which file to write to */
+    char *indcfm,           /* C format to use */
+    Int i,                  /* value to write */
+    Int indn,               /* number of entries to write per line */
+
+    /* input/output */
+    Int *nbuf               /* number of entries written to current line */
+)
+{
+    Int ok = TRUE ;
+    if (!file) file = stdout ;                  /* file defaults to stdout */
+    if (*nbuf >= indn)
+    {
+        *nbuf = 0 ;
+        ok = (fprintf (file, "\n") > 0) ;
+    }
+    ok = ok && (fprintf (file, indcfm, i) > 0) ;
+    (*nbuf)++ ;
+    return (ok) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBxprint: print one real value to the file */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(xprint)    /* returns TRUE if OK, FALSE otherwise */
+(
+    /* input */
+    FILE *file,         /* which file to write to */
+    char *valcfm,       /* C format to use */
+    double x,           /* value to write */
+    Int valn,           /* number of entries to write per line */
+    Int mkind,          /* 0:R, 1:P: 2:Csplit, 3:I, 4:Cmerged */
+
+    /* input/output */
+    Int *nbuf           /* number of entries written to current line */
+)
+{
+    Int ok = TRUE ;
+    if (!file) file = stdout ;                  /* file defaults to stdout */
+    if (mkind == 3)
+    {
+        /* write out the value as an integer */
+        ok = RB(iprint) (file, valcfm, (Int) x, valn, nbuf) ;
+    }
+    else
+    {
+        /* write out the value as a real */
+        if (*nbuf >= valn)
+        {
+            *nbuf = 0 ;
+            ok = (fprintf (file, "\n") > 0) ;
+        }
+        ok = ok && (fprintf (file, valcfm, x) > 0) ;
+        (*nbuf)++ ;
+    }
+    return (ok) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBiformat: determine format for printing an integer */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE void RB(iformat)
+(
+    /* input */
+    double xmin,            /* smallest integer to print */
+    double xmax,            /* largest integer to print */
+
+    /* output */
+    char indfmt [21],       /* Fortran format to use */
+    char indcfm [21],       /* C format to use */
+    Int *indn               /* number of entries per line */
+)
+{
+    if (xmin >= 0 && xmax <= 9.)
+    {
+        strncpy (indfmt, "(40I2)              ", 21) ;
+        strncpy (indcfm, "%2" IDD              , 21) ;
+        *indn = 40 ;
+    }
+    else if (xmin >= -9. && xmax <= 99.)
+    {
+        strncpy (indfmt, "(26I3)              ", 21) ;
+        strncpy (indcfm, "%3" IDD              , 21) ;
+        *indn = 26 ;
+    }
+    else if (xmin >= -99. && xmax <= 999.)
+    {
+        strncpy (indfmt, "(20I4)              ", 21) ;
+        strncpy (indcfm, "%4" IDD              , 21) ;
+        *indn = 20 ;
+    }
+    else if (xmin >= -999. && xmax <= 9999.)
+    {
+        strncpy (indfmt, "(16I5)              ", 21) ;
+        strncpy (indcfm, "%5" IDD              , 21) ;
+        *indn = 16 ;
+    }
+    else if (xmin >= -9999. && xmax <= 99999.)
+    {
+        strncpy (indfmt, "(13I6)              ", 21) ;
+        strncpy (indcfm, "%6" IDD              , 21) ;
+        *indn = 13 ;
+    }
+    else if (xmin >= -99999. && xmax <= 999999.)
+    {
+        strncpy (indfmt, "(11I7)              ", 21) ;
+        strncpy (indcfm, "%7" IDD              , 21) ;
+        *indn = 11 ;
+    }
+    else if (xmin >= -999999. && xmax <= 9999999.)
+    {
+        strncpy (indfmt, "(10I8)              ", 21) ;
+        strncpy (indcfm, "%8" IDD              , 21) ;
+        *indn = 10 ;
+    }
+    else if (xmin >= -9999999. && xmax <= 99999999.)
+    {
+        strncpy (indfmt, "(8I9)                ", 21) ;
+        strncpy (indcfm, "%9" IDD              , 21) ;
+        *indn = 8 ;
+    }
+    else if (xmin >= -99999999. && xmax <= 999999999.)
+    {
+        strncpy (indfmt, "(8I10)              ", 21) ;
+        strncpy (indcfm, "%10" IDD             , 21) ;
+        *indn = 8 ;
+    }
+    else if (xmin >= -999999999. && xmax <= 9999999999.)
+    {
+        strncpy (indfmt, "(7I11)              ", 21) ;
+        strncpy (indcfm, "%11" IDD             , 21) ;
+        *indn = 7 ;
+    }
+    else if (xmin >= -9999999999. && xmax <= 99999999999.)
+    {
+        strncpy (indfmt, "(6I12)              ", 21) ;
+        strncpy (indcfm, "%12" IDD             , 21) ;
+        *indn = 6 ;
+    }
+    else if (xmin >= -99999999999. && xmax <= 999999999999.)
+    {
+        strncpy (indfmt, "(6I13)              ", 21) ;
+        strncpy (indcfm, "%13" IDD             , 21) ;
+        *indn = 6 ;
+    }
+    else if (xmin >= -999999999999. && xmax <= 9999999999999.)
+    {
+        strncpy (indfmt, "(5I14)              ", 21) ;
+        strncpy (indcfm, "%14" IDD             , 21) ;
+        *indn = 5 ;
+    }
+    else
+    {
+        strncpy (indfmt, "(5I15)              ", 21) ;
+        strncpy (indcfm, "%15" IDD             , 21) ;
+        *indn = 5 ;
+    }
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBcards: determine number of cards required */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE Int RB(cards)
+(
+    Int nitems,         /* number of items to print */
+    Int nperline        /* number of items per line */
+)
+{
+    return ((nitems == 0) ? 0 : (((nitems-1) / nperline) + 1)) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBfill: fill a string */
+/* -------------------------------------------------------------------------- */
+
+PRIVATE void RB(fill)
+(
+    char *s,            /* string to fill */
+    Int len,            /* length of s (including trailing '\0') */
+    char c              /* character to fill s with */
+)
+{
+    Int i ;
+    for (i = 0 ; i < len ; i++)
+    {
+        s [i] = c ;
+    }
+    s [len-1] = '\0' ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* RBok: verify a sparse matrix */
+/* -------------------------------------------------------------------------- */
+
+PUBLIC Int RB(ok)            /* 0:OK, < 0: error, > 0: warning */
+(
+    /* inputs, not modified */
+    Int nrow,       /* number of rows */
+    Int ncol,       /* number of columns */
+    Int nzmax,      /* max # of entries */
+    Int *Ap,        /* size ncol+1, column pointers */
+    Int *Ai,        /* size nz = Ap [ncol], row indices */
+    double *Ax,     /* real part, or both if merged-complex */
+    double *Az,     /* imaginary part for split-complex */
+    char *As,       /* logical matrices (useful for MATLAB caller only) */
+    Int mkind,      /* 0:real, 1:logical/pattern, 2:split-complex, 3:integer,
+                       4:merged-complex */
+
+    /* outputs, not defined on input */
+    Int *p_njumbled,   /* # of jumbled row indices (-1 if not computed) */
+    Int *p_nzeros      /* number of explicit zeros (-1 if not computed) */
+)
+{
+    double xr, xz ;
+    Int i, j, p, pend, njumbled, nzeros, ilast ;
+
+    /* ---------------------------------------------------------------------- */
+    /* in case of early return */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_njumbled) *p_njumbled = -1 ;
+    if (p_nzeros  ) *p_nzeros = -1 ;
+
+    if (mkind < 0 || mkind > 4)
+    {
+        return (RBIO_MKIND_INVALID) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* check the dimensions */
+    /* ---------------------------------------------------------------------- */
+
+    if (nrow < 0 || ncol < 0 || nzmax < 0)
+    {
+        return (RBIO_DIM_INVALID) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* check the column pointers */
+    /* ---------------------------------------------------------------------- */
+
+    if (Ap == NULL || Ap [0] != 0)
+    {
+        /* column pointers invalid */
+        return (RBIO_CP_INVALID) ;
+    }
+    for (j = 0 ; j < ncol ; j++)
+    {
+        p = Ap [j] ;
+        pend = Ap [j+1] ;
+        if (pend < p || pend > nzmax)
+        {
+            /* column pointers not monotonically non-decreasing */
+            return (RBIO_CP_INVALID) ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* check the row indices and numerical values */
+    /* ---------------------------------------------------------------------- */
+
+    if (Ai == NULL)
+    {
+        /* row indices not present */
+        return (RBIO_ROW_INVALID) ;
+    }
+
+    njumbled = 0 ;
+    nzeros = 0 ;
+
+    for (j = 0 ; j < ncol ; j++)
+    {
+        ilast = -1 ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (i < 0 || i >= nrow)
+            {
+                /* row indices out of range */
+                return (RBIO_ROW_INVALID) ;
+            }
+            if (i <= ilast)
+            {
+                /* row indices unsorted, or duplicates present */
+                njumbled++ ;
+            }
+            if (mkind == 1 && As)
+            {
+                xr = (double) (As [p]) ;
+                xz = 0 ;
+            }
+            else
+            {
+                RB(get_entry) (mkind, Ax, Az, p, &xr, &xz) ;
+            }
+            if (xr == 0 && xz == 0)
+            {
+                /* an explicit zero is present */
+                nzeros++ ;
+            }
+            ilast = i ;
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* return results */
+    /* ---------------------------------------------------------------------- */
+
+    if (p_njumbled) *p_njumbled = njumbled ;
+    if (p_nzeros  ) *p_nzeros = nzeros ;
+    return ((njumbled > 0) ? RBIO_JUMBLED : RBIO_OK) ;
+}
diff --git a/RBio/Tcov/Makefile b/RBio/Tcov/Makefile
new file mode 100644
index 0000000..82421e5
--- /dev/null
+++ b/RBio/Tcov/Makefile
@@ -0,0 +1,94 @@
+#===============================================================================
+# RBio/Tcov/Makefile
+#===============================================================================
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+# valgrind is not used
+V =
+
+# with test coverage
+CF = -O0 -g --coverage
+
+# Tcov requires gcc
+CC = gcc
+
+C = $(CC) $(CF)
+TAR = tar -O -xvvzf
+
+SRC = RBio.c SuiteSparse_config.c
+OBJ = RBio.o SuiteSparse_config.o
+INC = RBio.h SuiteSparse_config.h
+
+all: RBdemo RBtest
+	- ./RBdemo ../RBio/private/bcsstk01.rb
+	- ./RBdemo ../RBio/private/farm.rb
+	- ./RBdemo ../RBio/private/lap_25.pse
+	- ./RBdemo ../RBio/private/lap_25.rb
+	- ./RBdemo ../RBio/private/west0479.rb
+	- ./RBdemo ../RBio/private/west0479.rua
+	- $(TAR) matrices/dwg961a.tar.gz  dwg961a/dwg961a.rb     | ./RBdemo
+	- $(TAR) matrices/mhd1280a.tar.gz mhd1280a/mhd1280a.rb   | ./RBdemo
+	- $(TAR) matrices/mhd1280b.tar.gz mhd1280b/mhd1280b.rb   | ./RBdemo
+	- $(TAR) matrices/qc324.tar.gz    qc324/qc324.rb         | ./RBdemo
+	- $(TAR) matrices/plskz362.tar.gz plskz362/plskz362.rb   | ./RBdemo
+	- $(TAR) matrices/west0067.tar.gz west0067/west0067.rb   | ./RBdemo
+	- $(TAR) matrices/Tina_DisCog.tar.gz Tina_DisCog/Tina_DisCog.rb | ./RBdemo
+	- ./RBdemo matrices/m4.rb
+	- ./RBdemo matrices/s4.rb
+	- ./RBdemo matrices/m4b.rb
+	- ./RBdemo mangled/1.rb
+	- ./RBdemo mangled/2.rb
+	- ./RBdemo mangled/3.rb
+	- ./RBdemo mangled/4.rb
+	- ./RBdemo mangled/5.rb
+	- ./RBdemo mangled/6.rb
+	- ./RBdemo mangled/7.rb
+	- ./RBdemo mangled/8.rb
+	- ./RBdemo mangled/9.rb
+	- ./RBdemo mangled/10.rb
+	- ./RBdemo mangled/11.rb
+	- ./RBdemo mangled/12.rb
+	- ./RBdemo mangled/13.rb
+	- ./RBdemo mangled/14.rb
+	- ./RBdemo mangled/15.rb
+	- ./RBtest
+	- gcov *.c > gcov.out
+	- grep "#####" RBio.c.gcov | wc -l
+
+RBdemo.c:
+	ln -s ../Demo/RBdemo.c
+
+RBio.c:
+	ln -s ../Source/RBio.c
+
+RBio.h:
+	ln -s ../Include/RBio.h
+
+SuiteSparse_config.c:
+	ln -s ../../SuiteSparse_config/SuiteSparse_config.c
+
+SuiteSparse_config.h:
+	ln -s ../../SuiteSparse_config/SuiteSparse_config.h
+
+RBdemo: RBdemo.c $(OBJ) $(INC) Makefile
+	$(C) -o RBdemo RBdemo.c $(OBJ) $(LIB)
+
+RBtest: RBtest.c $(OBJ) $(INC) Makefile
+	$(C) -o RBtest RBtest.c $(OBJ) $(LIB)
+
+RBio.o: RBio.c $(INC)
+	$(C) -c RBio.c
+
+SuiteSparse_config.o: SuiteSparse_config.c $(INC)
+	$(C) -c SuiteSparse_config.c
+
+code: RBdemo RBtest
+
+clean:
+	- $(RM) *.gcov *.gcda *.gcno temp*.rb *.o
+
+purge: clean
+	- $(RM) $(SRC) $(INC) RBdemo *.gcov gcov.out RBtest RBdemo.c
+	- $(RM) -r RBdemo.dSYM RBtest.dSYM
+
diff --git a/RBio/Tcov/RBtest.c b/RBio/Tcov/RBtest.c
new file mode 100644
index 0000000..7a6488c
--- /dev/null
+++ b/RBio/Tcov/RBtest.c
@@ -0,0 +1,285 @@
+/* ========================================================================== */
+/* === RBio/Tcov/RBtest.c: C test =========================================== */
+/* ========================================================================== */
+
+/* Copyright 2009-2013, Timothy A. Davis, All Rights Reserved.
+   Refer to RBio/Doc/license.txt for the RBio license. */
+
+#include "RBio.h"
+#define Long SuiteSparse_long
+#define ID "%ld"
+
+#define SLEN 4096
+
+int main (int argc, char **argv)
+{
+    double xr, xz, xmin, xmax ;
+    double *Ax, *Az ;
+    Long nrow, ncol, mkind, skind, *Ap, *Ai, i, *Zp, *Zi, asize, mkind2, skind2,
+        znz, j, p, status, njumbled, nzeros, build_upper, zero_handling, fem,
+        xsize, nelnz, nnz, kk, anz ;
+    int ok ;
+    char title [73], key [9], mtype [4], mtype2 [4], *filename, s [100], *As ;
+
+    /* initialize the memory allocation functions */
+    SuiteSparse_start ( ) ;
+
+    /* test arg-handling for RB functions */
+
+    status = RBread (NULL, 0, 0, NULL, NULL, NULL,
+        NULL, NULL, NULL, NULL, NULL, NULL,
+        NULL, NULL, NULL, NULL, NULL, NULL) ;
+    if (status != RBIO_ARG_ERROR)
+    {
+        printf ("RBtest failure (1)!\n") ;
+        return (1) ;
+    }
+
+    status = RBreadraw (NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) ;
+    if (status != RBIO_ARG_ERROR)
+    {
+        printf ("RBtest failure (2)\n") ;
+        return (1) ;
+    }
+
+    status = RBread ("no file", build_upper, zero_handling, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, &Ax, &Az, &Zp, &Zi) ;
+    if (status != RBIO_FILE_IOERROR)
+    {
+        printf ("RBtest failure (3)\n") ;
+        return (1) ;
+    }
+
+    status = RBreadraw ("no file", title, key, mtype, &nrow, &ncol, &nnz,
+        &nelnz, &mkind, &skind, &fem, &xsize, &Ap, &Ai, &Ax) ;
+    if (status != RBIO_FILE_IOERROR)
+    {
+        printf ("RBtest failure (4)\n") ;
+        return (1) ;
+    }
+
+    status = RBwrite (NULL, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL,
+        NULL, NULL, 0, NULL) ;
+    if (status != RBIO_ARG_ERROR)
+    {
+        printf ("RBtest failure (5)\n") ;
+        return (1) ;
+    }
+
+    status = RBkind (1, 1, NULL, NULL, NULL, NULL, 0, NULL, NULL,
+        NULL, NULL, NULL, NULL) ;
+    if (status != RBIO_ARG_ERROR)
+    {
+        printf ("RBtest failure (6)\n") ;
+        return (1) ;
+    }
+
+    status = RBread ("matrices/m4.rb", 1, 2, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, &Ax, NULL, &Zp, &Zi) ;
+    if (status != 0)
+    {
+        SuiteSparse_free (Ap) ;
+        SuiteSparse_free (Ai) ;
+        SuiteSparse_free (Ax) ;
+        SuiteSparse_free (Zp) ;
+        SuiteSparse_free (Zi) ;
+        printf ("RBread test failure (7) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    /* mangle the matrix */
+    Ap [0] = 1 ;
+    status = RBwrite ("temp.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, mtype2) ;
+    if (status == RBIO_OK)
+    {
+        printf ("RBtest failure (8)\n") ;
+        return (1) ;
+    }
+
+    Ap [0] = 0 ;
+    Zp [0] = 1 ;
+    status = RBwrite ("temp.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, mtype2) ;
+    if (status == RBIO_OK)
+    {
+        printf ("RBtest failure (9)\n") ;
+        return (1) ;
+    }
+    Zp [0] = 0 ;
+
+    /* valid matrix */
+    status = RBwrite ("temp.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBtest failure (10) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    /* valid matrix, different integer formats */
+    Ax [0] = 1e5 ;
+    for (kk = 0 ; kk < 10 ; kk++)
+    {
+        sprintf (s, "temp_" ID ".rb", kk) ;    
+        status = RBwrite (s, title, key, nrow, ncol, Ap, Ai, Ax,
+            NULL, Zp, Zi, mkind, NULL) ;
+        if (status != RBIO_OK)
+        {
+            printf ("RBtest failure (11) "ID" "ID"\n", status, kk) ;
+            return (1) ;
+        }
+        Ax [0] *= 10 ;
+    }
+
+    /* valid matrix, but with a very large integer */
+    Ax [0] = 1e9 + 1 ;
+    status = RBwrite ("temp1.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBtest failure (12) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    /* valid matrix, but with a very large real */
+    Ax [0] = 1e100 ;
+    status = RBwrite ("temp2.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBtest failure (13) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    /* valid matrix, but with a Z that overlaps A */
+    Ax [0] = 1 ;
+    Zi [0] = 1 ;
+    status = RBwrite ("temp3.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, NULL) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBtest failure (14) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    /* invalid file name */
+    status = RBwrite ("gunk/gunk.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, NULL) ;
+    if (status != RBIO_FILE_IOERROR)
+    {
+        printf ("RBtest failure (12) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    /* cannot write a matrix with no entries */
+    for (j = 0 ; j <= ncol ; j++)
+    {
+        Ap [j] = 0 ; 
+        Zp [j] = 0 ; 
+    }
+    status = RBwrite ("temp.rb", title, key, nrow, ncol, Ap, Ai, Ax,
+        NULL, Zp, Zi, mkind, NULL) ;
+    if (status != RBIO_DIM_INVALID)
+    {
+        printf ("RBtest failure (13) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    SuiteSparse_free (Ap) ;
+    SuiteSparse_free (Ai) ;
+    SuiteSparse_free (Ax) ;
+    SuiteSparse_free (Zp) ;
+    SuiteSparse_free (Zi) ;
+
+    /* re-read a valid matrix */
+    status = RBread ("matrices/m4.rb", 1, 0, title, key, mtype,
+        &nrow, &ncol, &mkind, &skind, &asize, &znz,
+        &Ap, &Ai, &Ax, NULL, NULL, NULL) ;
+    if (status != 0)
+    {
+        SuiteSparse_free (Ap) ;
+        SuiteSparse_free (Ai) ;
+        SuiteSparse_free (Ax) ;
+        SuiteSparse_free (Zp) ;
+        SuiteSparse_free (Zi) ;
+        printf ("RBread test failure (14) "ID"\n", status) ;
+        return (1) ;
+    }
+
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBread test failure (15) "ID"\n", status) ;
+    }
+
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, NULL, -1,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_MKIND_INVALID)
+    {
+        printf ("RBread test failure (16) "ID"\n", status) ;
+    }
+
+    status = RBok (-1, ncol, asize, Ap, Ai, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_DIM_INVALID)
+    {
+        printf ("RBread test failure (17) "ID"\n", status) ;
+    }
+
+    i = Ap [1] ;
+    Ap [1] = 999999 ;
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_CP_INVALID)
+    {
+        printf ("RBread test failure (18) "ID"\n", status) ;
+    }
+    Ap [1] = i ;
+
+    status = RBok (nrow, ncol, asize, Ap, NULL, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_ROW_INVALID)
+    {
+        printf ("RBread test failure (19) "ID"\n", status) ;
+    }
+
+    i = Ai [0] ;
+    Ai [0] = 999999 ;
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_ROW_INVALID)
+    {
+        printf ("RBread test failure (20) "ID"\n", status) ;
+    }
+    Ai [0] = i ;
+
+    i = Ai [1] ;
+    Ai [1] = Ai [0] ;
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, NULL, mkind,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_JUMBLED)
+    {
+        printf ("RBread test failure (21) "ID"\n", status) ;
+    }
+    Ai [1] = i ;
+
+    ok = 1 ;
+    As = (char *) SuiteSparse_malloc (asize, sizeof (char)) ;
+    for (i = 0 ; i < asize ; i++) As [i] = 1 ;
+    status = RBok (nrow, ncol, asize, Ap, Ai, Ax, Az, As, 1,
+        &njumbled, &nzeros) ;
+    if (status != RBIO_OK)
+    {
+        printf ("RBread test failure (22) "ID"\n", status) ;
+    }
+    SuiteSparse_free (As) ;
+
+    printf ("RBtest OK\n") ;
+    SuiteSparse_finish ( ) ;
+    return (0) ;
+}
diff --git a/RBio/Tcov/README.txt b/RBio/Tcov/README.txt
new file mode 100644
index 0000000..b941ddf
--- /dev/null
+++ b/RBio/Tcov/README.txt
@@ -0,0 +1,5 @@
+RBio statement coverage test.
+Unix (Mac OS X, Linux, or Solaris) required.
+To run, type "make"
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/RBio/Tcov/mangled/1.rb b/RBio/Tcov/mangled/1.rb
new file mode 100644
index 0000000..96831a1
--- /dev/null
+++ b/RBio/Tcov/mangled/1.rb
@@ -0,0 +1,5 @@
+cp is truncated
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9
diff --git a/RBio/Tcov/mangled/10.rb b/RBio/Tcov/mangled/10.rb
new file mode 100644
index 0000000..10a1630
--- /dev/null
+++ b/RBio/Tcov/mangled/10.rb
@@ -0,0 +1,7 @@
+invalid dimensions
+             3             1             1             1
+iua                       -4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/11.rb b/RBio/Tcov/mangled/11.rb
new file mode 100644
index 0000000..f840822
--- /dev/null
+++ b/RBio/Tcov/mangled/11.rb
@@ -0,0 +1,5 @@
+truncated with 5th Harwell/Boeing line
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+F
diff --git a/RBio/Tcov/mangled/12.rb b/RBio/Tcov/mangled/12.rb
new file mode 100644
index 0000000..3c3446c
--- /dev/null
+++ b/RBio/Tcov/mangled/12.rb
@@ -0,0 +1,7 @@
+invalid matrix type
+             3             1             1             1
+xxx                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/13.rb b/RBio/Tcov/mangled/13.rb
new file mode 100644
index 0000000..3830ff5
--- /dev/null
+++ b/RBio/Tcov/mangled/13.rb
@@ -0,0 +1,7 @@
+invalid matrix type
+             3             1             1             1
+ixa                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/14.rb b/RBio/Tcov/mangled/14.rb
new file mode 100644
index 0000000..033dea0
--- /dev/null
+++ b/RBio/Tcov/mangled/14.rb
@@ -0,0 +1,7 @@
+invalid matrix type
+             3             1             1             1
+iux                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/15.rb b/RBio/Tcov/mangled/15.rb
new file mode 100644
index 0000000..bcf8934
--- /dev/null
+++ b/RBio/Tcov/mangled/15.rb
@@ -0,0 +1,7 @@
+invalid symmetric matrix (rectangular)
+             3             1             1             1
+isa                        6             4            10             0
+(26I3)          (40I2)          (26I3)              
+  1  5  8 10 11
+ 1 2 3 4 2 3 4 3 4 4
+ 32  7 12 17 22 17 22 12 27  2
diff --git a/RBio/Tcov/mangled/2.rb b/RBio/Tcov/mangled/2.rb
new file mode 100644
index 0000000..d73188c
--- /dev/null
+++ b/RBio/Tcov/mangled/2.rb
@@ -0,0 +1,7 @@
+cp is mangled
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+ 42  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/3.rb b/RBio/Tcov/mangled/3.rb
new file mode 100644
index 0000000..2a32551
--- /dev/null
+++ b/RBio/Tcov/mangled/3.rb
@@ -0,0 +1,7 @@
+cp is mangled
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1 42  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/4.rb b/RBio/Tcov/mangled/4.rb
new file mode 100644
index 0000000..b5da28b
--- /dev/null
+++ b/RBio/Tcov/mangled/4.rb
@@ -0,0 +1,6 @@
+row indices truncated
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1
diff --git a/RBio/Tcov/mangled/5.rb b/RBio/Tcov/mangled/5.rb
new file mode 100644
index 0000000..085f059
--- /dev/null
+++ b/RBio/Tcov/mangled/5.rb
@@ -0,0 +1,7 @@
+row indices jumbled
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 2 1 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/6.rb b/RBio/Tcov/mangled/6.rb
new file mode 100644
index 0000000..ca92072
--- /dev/null
+++ b/RBio/Tcov/mangled/6.rb
@@ -0,0 +1,7 @@
+duplicate row indices
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 3 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/7.rb b/RBio/Tcov/mangled/7.rb
new file mode 100644
index 0000000..4804668
--- /dev/null
+++ b/RBio/Tcov/mangled/7.rb
@@ -0,0 +1,7 @@
+row indices out of range
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 9 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/mangled/8.rb b/RBio/Tcov/mangled/8.rb
new file mode 100644
index 0000000..43665f0
--- /dev/null
+++ b/RBio/Tcov/mangled/8.rb
@@ -0,0 +1,7 @@
+numerical values truncated
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14 
diff --git a/RBio/Tcov/mangled/9.rb b/RBio/Tcov/mangled/9.rb
new file mode 100644
index 0000000..954ac7b
--- /dev/null
+++ b/RBio/Tcov/mangled/9.rb
@@ -0,0 +1,7 @@
+invalid symmetric matrix (entries in upper part of A)
+             3             1             1             1
+isa                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/matrices/Tina_DisCog.tar.gz b/RBio/Tcov/matrices/Tina_DisCog.tar.gz
new file mode 100644
index 0000000..5c8cf41
Binary files /dev/null and b/RBio/Tcov/matrices/Tina_DisCog.tar.gz differ
diff --git a/RBio/Tcov/matrices/dwg961a.tar.gz b/RBio/Tcov/matrices/dwg961a.tar.gz
new file mode 100644
index 0000000..63142d0
Binary files /dev/null and b/RBio/Tcov/matrices/dwg961a.tar.gz differ
diff --git a/RBio/Tcov/matrices/m4.rb b/RBio/Tcov/matrices/m4.rb
new file mode 100644
index 0000000..974ea37
--- /dev/null
+++ b/RBio/Tcov/matrices/m4.rb
@@ -0,0 +1,7 @@
+valid 4-by-4 test matrix (A=sparse(magic(4)) in MATLAB)                |magic4  
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+  0  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/matrices/m4b.rb b/RBio/Tcov/matrices/m4b.rb
new file mode 100644
index 0000000..3bc8f03
--- /dev/null
+++ b/RBio/Tcov/matrices/m4b.rb
@@ -0,0 +1,8 @@
+Rutherford/Boeing file but with 5th H/B line                           |magic4b 
+             3             1             1             1
+iua                        4             4            16             0
+(26I3)          (40I2)          (26I3)              
+F ignore
+  1  5  9 13 17
+ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
+ 16  5  9  4  2 11  7 14  3 10  6 15 13  8 12  1
diff --git a/RBio/Tcov/matrices/mhd1280a.tar.gz b/RBio/Tcov/matrices/mhd1280a.tar.gz
new file mode 100644
index 0000000..dc2160c
Binary files /dev/null and b/RBio/Tcov/matrices/mhd1280a.tar.gz differ
diff --git a/RBio/Tcov/matrices/mhd1280b.tar.gz b/RBio/Tcov/matrices/mhd1280b.tar.gz
new file mode 100644
index 0000000..7cc52b1
Binary files /dev/null and b/RBio/Tcov/matrices/mhd1280b.tar.gz differ
diff --git a/RBio/Tcov/matrices/plskz362.tar.gz b/RBio/Tcov/matrices/plskz362.tar.gz
new file mode 100644
index 0000000..303c4df
Binary files /dev/null and b/RBio/Tcov/matrices/plskz362.tar.gz differ
diff --git a/RBio/Tcov/matrices/qc324.tar.gz b/RBio/Tcov/matrices/qc324.tar.gz
new file mode 100644
index 0000000..7b0e903
Binary files /dev/null and b/RBio/Tcov/matrices/qc324.tar.gz differ
diff --git a/RBio/Tcov/matrices/s4.rb b/RBio/Tcov/matrices/s4.rb
new file mode 100644
index 0000000..c68a5ea
--- /dev/null
+++ b/RBio/Tcov/matrices/s4.rb
@@ -0,0 +1,7 @@
+valid symmetric matrix (A=A+A^T where A=sparse(magic(4)))              |sym4    
+             3             1             1             1
+isa                        4             4            10             0
+(26I3)          (40I2)          (26I3)              
+  1  5  8 10 11
+ 1 2 3 4 2 3 4 3 4 4
+ 32  7 12 17 22 17 22 12 27  2
diff --git a/RBio/Tcov/matrices/west0067.tar.gz b/RBio/Tcov/matrices/west0067.tar.gz
new file mode 100644
index 0000000..895c622
Binary files /dev/null and b/RBio/Tcov/matrices/west0067.tar.gz differ
diff --git a/RBio/Test/testRB1.m b/RBio/Test/testRB1.m
deleted file mode 100644
index 28ff195..0000000
--- a/RBio/Test/testRB1.m
+++ /dev/null
@@ -1,65 +0,0 @@
-function testRB1
-%testRB1: test the RBio toolbox.
-%
-% Example:
-%   testRB1
-%
-% See also UFget, RBread, RBreade, testRB2.
-
-% Copyright 2006, Timothy A. Davis
-
-files = {
-'bcsstk01.rb'
-'farm.rb'
-'lap_25.pse'
-'lap_25.rb'
-'west0479.rb'
-'west0479.rua' } ;
-
-for k = 1:length(files)
-    file = files {k} ;
-    fprintf ('%s : ', file) ;
-    if (file (end) == 'e')
-	[A Z] = RBreade (file) ;
-    else
-	[A Z] = RBread (file) ;
-    end
-    fprintf ('%s\n', RBtype (A)) ;
-    RBwrite ('temp.rb', A, Z) ;
-    [A2 Z2] = RBread ('temp.rb') ;
-    if (~isequal (A, A2))
-	fprintf ('test failed: %s (A differs)\n', file) ;
-	error ('!') ;
-    end
-    if (~isequal (Z, Z2))
-	fprintf ('test failed: %s (Z differs)\n', file) ;
-	error ('!') ;
-    end
-end
-
-load west0479
-C = west0479 ;
-RBwrite ('mywest', C, 'WEST0479 chemical eng. problem', 'west0479') ;
-A = RBread ('mywest') ;
-if (~isequal (A, C))
-    error ('test failed: west0479 (MATLAB version)') ;
-end
-fprintf ('west0479 (MATLAB matrix) : %s\n', RBtype (A)) ;
-
-if (~strcmp (RBtype (A), 'rua'))
-    error ('test failed: RBtype(A)\n') ;
-end
-if (~strcmp (RBtype (spones (A)), 'pua'))
-    error ('test failed: RBtype(spones(A))\n') ;
-end
-if (~strcmp (RBtype (2*spones (A)), 'iua'))
-    error ('test failed: RBtype(2*spones(A))\n') ;
-end
-C = A+A' ;
-if (~strcmp (RBtype (C), 'rsa'))
-    error ('test failed: RBtype(A+A'')\n') ;
-end
-
-delete ('mywest') ;
-delete ('temp.rb') ;
-fprintf ('testRB1: all tests passed\n') ;
diff --git a/RBio/Test/testRB2.m b/RBio/Test/testRB2.m
deleted file mode 100644
index 4371252..0000000
--- a/RBio/Test/testRB2.m
+++ /dev/null
@@ -1,60 +0,0 @@
-function testRB2
-%testRB2: test the RBio toolbox.  UFget is required.
-% Note that UFget requires the Nov 25, 2006, revision of the UF_Index.mat file,
-% or later, to access all the Problems used by this test.
-%
-% Example:
-%   testRB2
-%
-% See also UFget, RBread, RBreade, testRB1.
-
-% Copyright 2006, Timothy A. Davis
-
-Problem = UFget ('Meszaros/farm') ;
-disp (Problem) ;
-A = RBread ('farm.rb') ;
-if (~isequal (A, Problem.A))
-    error ('test failure: farm.rb') ;
-end
-fprintf ('mtype: %s\n', RBtype (A)) ;
-
-Problem = UFget ('HB/bcsstk01') ;
-disp (Problem) ;
-A = RBread ('bcsstk01.rb') ;
-if (~isequal (A, Problem.A))
-    error ('test failure: bcsstk01.rb') ;
-end
-fprintf ('mtype: %s\n', RBtype (A)) ;
-
-Problem = UFget ('HB/lap_25') ;
-disp (Problem) ;
-A = RBread ('lap_25.rb') ;
-if (~isequal (A, Problem.A))
-    error ('test failure: lap_25.rb') ;
-end
-A = RBreade ('lap_25.pse') ;
-if (~isequal (A, Problem.A))
-    error ('test failure: lap_25.pse') ;
-end
-fprintf ('mtype: %s\n', RBtype (A)) ;
-
-Problem = UFget ('HB/west0479') ;
-disp (Problem) ;
-[A Z] = RBread ('west0479.rb') ;
-if (~isequal (A, Problem.A))
-    error ('test failure: west0479.rb') ;
-end
-if (~isequal (Z, Problem.Zeros))
-    error ('test failure: west0479.rb') ;
-end
-[A Z] = RBread ('west0479.rua') ;
-if (~isequal (A, Problem.A))
-    error ('test failure: west0479.rua') ;
-end
-if (~isequal (Z, Problem.Zeros))
-    error ('test failure: west0479.rua') ;
-end
-fprintf ('mtype: %s\n', RBtype (A)) ;
-
-fprintf ('testRB2: all tests passed\n') ;
-
diff --git a/README.txt b/README.txt
index f0d7ec4..007c803 100644
--- a/README.txt
+++ b/README.txt
@@ -1,53 +1,77 @@
-SuiteSparse:  A Suite of Sparse matrix packages
+SuiteSparse:  A Suite of Sparse matrix packages at http://www.suitesparse.com
+
+Oct 10, 2014.  SuiteSparse VERSION 4.4.0
 
 ------------------
 SuiteSparse/README
 ------------------
 
 ================================================================================
-QUICK START FOR MATLAB USERS:  unzip the SuiteSparse.zip file, then in the
-MATLAB Command Window, cd to the SuiteSparse directory and type
-SuiteSparse_install.  All packages will be compiled, and several demos will be
-run.
+QUICK START FOR MATLAB USERS (Linux, Mac, or Windows):  uncompress the
+SuiteSparse.zip or SuiteSparse.tar.gz archive file (they contain the same
+thing), then in the MATLAB Command Window, cd to the SuiteSparse directory and
+type SuiteSparse_install.  All packages will be compiled, and several demos
+will be run.
+
+QUICK START FOR LINUX:  Just type 'make' in this directory.  Then do
+'sudo make install' if you want to install the libraries and include files
+in /usr/local.
+
+QUICK START FOR MAC:  Delete the SuiteSparse_config/SuiteSparse_config.mk
+file, and then remove "_Mac" from the *Mac.mk file in that directory.  Then
+continue as the 'QUICK START FOR LINUX' above.
+
+QUICK START FOR GPU:  Delete the SuiteSparse_config/SuiteSparse_config.mk
+file, and then remove "_GPU" from the *GPU.mk file in that directory.
+Locate and modify CUDA library and include paths in the *.mk file.
+Then continue as the 'QUICK START FOR LINUX' above.
 ================================================================================
 
-Nov 1, 2007.  SuiteSparse version 3.1
 
-    AMD		approximate minimum degree ordering
+    spqr_rank   MATLAB toolbox for rank deficient sparse matrices: null spaces,
+                reliable factorizations, etc.  With Leslie Foster, San Jose
+                State Univ.
+
+    AMD         approximate minimum degree ordering
 
-    CAMD	constrained approximate minimum degree ordering
+    CAMD        constrained approximate minimum degree ordering
 
-    COLAMD	column approximate minimum degree ordering
+    COLAMD      column approximate minimum degree ordering
 
-    CCOLAMD	constrained column approximate minimum degree ordering
+    CCOLAMD     constrained column approximate minimum degree ordering
 
-    BTF		permutation to block triangular form
+    BTF         permutation to block triangular form
 
-    KLU		sparse LU factorization, primarily for circuit simulation.
-		Requires AMD, COLAMD, and BTF.  Optionally uses CHOLMOD,
-		CAMD, CCOLAMD, and METIS.
+    KLU         sparse LU factorization, primarily for circuit simulation.
+                Requires AMD, COLAMD, and BTF.  Optionally uses CHOLMOD,
+                CAMD, CCOLAMD, and METIS.
 
-    UMFPACK	sparse LU factorization.  Requires AMD and the BLAS.
+    UMFPACK     sparse LU factorization.  Requires AMD and the BLAS.
 
-    CHOLMOD	sparse Cholesky factorization.  Requires AMD, COLAMD, CCOLAMD,
-		the BLAS, and LAPACK.  Optionally uses METIS.
+    CHOLMOD     sparse Cholesky factorization.  Requires AMD, COLAMD, CCOLAMD,
+                the BLAS, and LAPACK.  Optionally uses METIS.
 
-    UFconfig	configuration file for all the above packages.  The
-		UFconfig/UFconfig.mk is included in the Makefile's of all
-		packages.  CSparse and RBio do not use UFconfig.
+    SuiteSparse_config    configuration file for all the above packages.  The
+                SuiteSparse_config/SuiteSparse_config.mk is included in the
+                Makefile's of all packages.  CSparse and MATLAB_Tools do not
+                use SuiteSparse_config.  Prior to SuiteSparse Version 4.0.0,
+                this configuration directory was called 'UFconfig'.
+                Version 4.0.0 and later use SuiteSparse_config instead,
+                which is upward compatible with UFconfig.
 
-    CSparse	a concise sparse matrix package, developed for my upcoming
-		book, "Direct Methods for Sparse Linear Systems", to be
-		published by SIAM.
+    CSparse     a concise sparse matrix package, developed for my
+                book, "Direct Methods for Sparse Linear Systems",
+                published by SIAM.  Intended primarily for teaching.
 
-    CXSparse	CSparse Extended.  Includes support for complex matrices
-		and both int or long integers.
+    CXSparse    CSparse Extended.  Includes support for complex matrices
+                and both int or long integers.  Use this instead of CSparse
+                for production use.
 
-    RBio	read/write sparse matrices in Rutherford/Boeing format
+    RBio        read/write sparse matrices in Rutherford/Boeing format
 
     UFcollection    toolbox for managing the UF Sparse Matrix Collection
 
-    LPDASA	LP dual active set algorithm (to appear)
+    LPDASA      LP dual active set algorithm (to appear)
 
     MESHND      2D and 3D mesh generation and nested dissection ordering
 
@@ -58,15 +82,20 @@ Nov 1, 2007.  SuiteSparse version 3.1
 
     MATLAB_Tools    various simple m-files for use in MATLAB
 
-CHOLMOD optionally uses METIS 4.0.1
+    SPQR        sparse QR factorization
+    GPUQREngine                 GPU support package for SPQR
+    SuiteSparse_GPURuntime      GPU support package for SPQR
+
+Some codes optionally use METIS 4.0.1
 (http://www-users.cs.umn.edu/~karypis/metis).  To use METIS, place a copy of
-the metis-4.0 directory in the same directory (CHOLMOD_ACM_TOMS) containing
-this README file.  The use of METIS will improve the ordering quality in
-CHOLMOD.
+the metis-4.0 directory in the same directory containing this README file.
+Be sure that you do not have a nested metis-4.0/metis-4.0 directory; SuiteSparse
+won't find METIS if you do this, which can happen with a zip file of metis-4.0
+on Windows.  The use of METIS will improve the ordering quality.
 
 Refer to each package for license, copyright, and author information.  All
-codes are authored or co-authored by Timothy A. Davis, CISE Dept., Univ. of
-Florida.  email: my last name @ cise dot ufl dot edu.
+codes are authored or co-authored by Timothy A. Davis.
+email: DrTimothyAldenDavis at gmail.com
 
 ================================================================================
 If you use SuiteSparse_install in MATLAB, stop reading here.
@@ -80,52 +109,39 @@ To use "make" in Unix/Linux:
 
 (1) Use the right BLAS and LAPACK libraries
 
-    See http://www.netlib.org/blas for the Fortran reference BLAS (slow, but
-    they work).  See http://www.tacc.utexas.edu/~kgoto/ or
-    http://www.cs.utexas.edu/users/flame/goto/ for an optimized BLAS.  See
-    http://www.netlib.org/lapack for LAPACK.  The UFconfig/UFconfig.mk file
-    assumes the vanilla BLAS (-lblas).  You should use an optimized BLAS;
-    otherwise UMFPACK and CHOLMOD will be slow.  Change -lblas to -l(your BLAS
-    library here) in the UFconfig/UFconfig.mk file.
+    Edit your SuiteSparse_config/SuiteSparse_config.mk file to point to the
+    right compilers, and to the correct BLAS and LAPACK libraries.  There are
+    many examples of different computer architectures there.  Scroll through to
+    find yours, and uncomment those lines.
+
+(2) Install Intel's Threading Building Blocks (TBB)
 
-(2) Configure METIS (or don't use METIS)
+    This is optionally used by SuiteSparseQR.  Refer to the User Guide in 
+    SuiteSparse/SPQR/Doc/spqr_user_guide.pdf for details.
 
+(3) Configure METIS (or don't use METIS)
+
+    If you don't download METIS, skip this step.  Otherwise,
     cd to metis-4.0 and edit the Makefile.in file.  I recommend making these
-    changes to metis-4.0/Makefile.in:
+    changes to metis-4.0/Makefile.in, but this is optional.
 
         CC = gcc
         OPTFLAGS = -O3
-        COPTIONS = -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
-
-    Next, cd to metis-4.0 and type "make".
-
-    If you do not wish to use METIS, then edit the UFconfig/UFconfig.mk file,
-    and change the line
-
-        CHOLMOD_CONFIG =
 
-    to
+(4) Make other changes to SuiteSparse_config/SuiteSparse_config.mk as needed
 
-        CHOLMOD_CONFIG = -DNPARTITION
+    Edit the SuiteSparse_config/SuiteSparse_config.mk file as needed.
+    Directions are in that file.  If you have compiled SuiteSparse already
+    (partially or completely), then whenever you edit the
+    SuiteSparse_config/SuiteSparse_config.mk file, you should then type "make
+    purge" (or "make realclean") in this directory.
 
-    Also change the line
-
-        METIS = ../../metis-4.0/libmetis.a
-
-    to
-
-        METIS =
-
-(3) Make other changes to UFconfig/UFconfig.mk as needed
-
-    Edit the UFconfig/UFconfig.mk file as needed.  Directions are in that file.
-    If you have compiled SuiteSparse already (partially or completely), then
-    whenever you edit the UFconfig/UFconfig.mk file, you should then type
-    "make purge" (or "make realclean") in this directory.
-
-(4) Type "make" in this directory.  All packages will be be compiled.  METIS
+(5) Type "make" in this directory.  All packages will be be compiled.  METIS
     will be compiled if you have it.  Several demos will be run.
 
+    To compile just the libraries, without running any demos, use
+    "make library".
+
     The libraries will appear in */Lib/*.a.  Include files, as needed by user
     programs that use CHOLMOD, AMD, CAMD, COLAMD, CCOLAMD, BTF, KLU, UMFPACK,
     LDL, etc. are in */Include/*.h.
@@ -133,3 +149,11 @@ To use "make" in Unix/Linux:
     The METIS library is in metis-4.0/libmetis.a.  METIS Include files (not
     needed by the end user of SuiteSparse) are in located in metis-4.0/Lib/*.h.
 
+(6) To install, type "sudo make install".  This will place copies of all
+    libraries in /usr/local/lib, and all include files in /usr/local/include.
+    You can change the install location by editting SuiteSparse_config.mk.
+    These directories must already exist.
+
+(7) To uninstall, type "sudo make uninstall", which reverses "make install"
+    by removing the SuiteSparse libraries from /usr/local/lib, and the
+    include files from /usr/local/include.
diff --git a/SPQR/Demo/Makefile b/SPQR/Demo/Makefile
new file mode 100644
index 0000000..c432e97
--- /dev/null
+++ b/SPQR/Demo/Makefile
@@ -0,0 +1,262 @@
+#===============================================================================
+# SuiteSparseQR/Demo/Makefile
+#===============================================================================
+
+default: all
+
+ccode: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+#-------------------------------------------------------------------------------
+# the optional Partition module requires METIS, CAMD, and CCOLAMD
+I_WITH_PARTITION = 
+LIB_WITH_PARTITION =
+CONFIG_PARTITION = -DNPARTITION
+# check if METIS is requested and available
+ifeq (,$(findstring -DNPARTITION, $(CHOLMOD_CONFIG)))
+    # METIS is requested.  See if it is available
+    ifeq ($(METIS_PATH), $(wildcard $(METIS_PATH)))
+        ifeq (../../CAMD, $(wildcard ../../CAMD))
+            ifeq (../../CCOLAMD, $(wildcard ../../CCOLAMD))
+                # METIS, CAMD, and CCOLAMD are available
+                LIB_WITH_PARTITION = $(METIS) ../../CCOLAMD/Lib/libccolamd.a \
+                    ../../CAMD/Lib/libcamd.a
+                I_WITH_PARTITION = -I$(METIS_PATH)/Lib \
+                    -I../../CCOLAMD/Include -I../../CAMD/Include
+                CONFIG_PARTITION =
+            endif
+        endif
+    endif
+endif
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+# the optional SPQRGPU module requires CUDA, SuiteSparse_GPURuntime, GPUQREngine
+ifneq ($(GPU_CONFIG),)
+    LIB_WITH_SPQRGPU = $(CUDART_LIB) $(CUBLAS_LIB) \
+        ../../SuiteSparse_GPURuntime/Lib/libSuiteSparse_GPURuntime.a \
+        ../../GPUQREngine/Lib/libGPUQREngine.a
+    I_WITH_SPQRGPU = -I../../SuiteSparse_GPURuntime/Include \
+        -I../../GPUQREngine/Include \
+        -I$(CUDA_INC_PATH)
+else
+    LIB_WITH_SPQRGPU = 
+    I_WITH_SPQRGPU = 
+endif
+
+#-------------------------------------------------------------------------------
+
+CLIB = ../Lib/libspqr.a \
+       ../../SuiteSparse_config/libsuitesparseconfig.a \
+       ../../CHOLMOD/Lib/libcholmod.a ../../AMD/Lib/libamd.a \
+       ../../COLAMD/Lib/libcolamd.a \
+       $(LIB_WITH_PARTITION) \
+       $(LIB_WITH_SPQRGPU)
+
+# use the BLAS and LAPACK defined by SuiteSparse_config.mk; do not use valgrind 
+FLIB = $(LAPACK) $(BLAS)
+V = 
+
+# To use Valgrind and the plain BLAS and plain LAPACK (non-optimized):
+# FLIB = -lgfortran -llapack_plain -lblas_plain -lg2c
+# V = valgrind --quiet
+
+all: library qrdemo qrsimple qrsimplec
+	- $(V) ./qrsimple < ../Matrix/ash219.mtx
+	- $(V) ./qrsimplec < ../Matrix/ash219.mtx
+	- $(V) ./qrsimple < ../Matrix/west0067.mtx
+	- $(V) ./qrsimplec < ../Matrix/west0067.mtx
+	- $(V) ./qrdemo < ../Matrix/a2.mtx
+	- $(V) ./qrdemo < ../Matrix/r2.mtx
+	- $(V) ./qrdemo < ../Matrix/a04.mtx
+	- $(V) ./qrdemo < ../Matrix/a2.mtx
+	- $(V) ./qrdemo < ../Matrix/west0067.mtx
+	- $(V) ./qrdemo < ../Matrix/c2.mtx
+	- $(V) ./qrdemo < ../Matrix/a0.mtx
+	- $(V) ./qrdemo < ../Matrix/lfat5b.mtx
+	- $(V) ./qrdemo < ../Matrix/bfwa62.mtx
+	- $(V) ./qrdemo < ../Matrix/LFAT5.mtx
+	- $(V) ./qrdemo < ../Matrix/b1_ss.mtx
+	- $(V) ./qrdemo < ../Matrix/bcspwr01.mtx
+	- $(V) ./qrdemo < ../Matrix/lpi_galenet.mtx
+	- $(V) ./qrdemo < ../Matrix/lpi_itest6.mtx
+	- $(V) ./qrdemo < ../Matrix/ash219.mtx
+	- $(V) ./qrdemo < ../Matrix/a4.mtx
+	- $(V) ./qrdemo < ../Matrix/s32.mtx
+	- $(V) ./qrdemo < ../Matrix/c32.mtx
+	- $(V) ./qrdemo < ../Matrix/lp_share1b.mtx
+	- $(V) ./qrdemo < ../Matrix/a1.mtx
+	- $(V) ./qrdemo < ../Matrix/GD06_theory.mtx
+	- $(V) ./qrdemo < ../Matrix/GD01_b.mtx
+	- $(V) ./qrdemo < ../Matrix/Tina_AskCal_perm.mtx
+	- $(V) ./qrdemo < ../Matrix/Tina_AskCal.mtx
+	- $(V) ./qrdemo < ../Matrix/GD98_a.mtx
+	- $(V) ./qrdemo < ../Matrix/Ragusa16.mtx
+	- $(V) ./qrdemo < ../Matrix/young1c.mtx
+	- $(V) ./qrdemo < ../Matrix/lp_e226_transposed.mtx
+
+cdemo: qrdemoc
+	- $(V) ./qrdemoc < ../Matrix/a2.mtx
+	- $(V) ./qrdemoc < ../Matrix/r2.mtx
+	- $(V) ./qrdemoc < ../Matrix/a04.mtx
+	- $(V) ./qrdemoc < ../Matrix/a2.mtx
+	- $(V) ./qrdemoc < ../Matrix/west0067.mtx
+	- $(V) ./qrdemoc < ../Matrix/c2.mtx
+	- $(V) ./qrdemoc < ../Matrix/a0.mtx
+	- $(V) ./qrdemoc < ../Matrix/lfat5b.mtx
+	- $(V) ./qrdemoc < ../Matrix/bfwa62.mtx
+	- $(V) ./qrdemoc < ../Matrix/LFAT5.mtx
+	- $(V) ./qrdemoc < ../Matrix/b1_ss.mtx
+	- $(V) ./qrdemoc < ../Matrix/bcspwr01.mtx
+	- $(V) ./qrdemoc < ../Matrix/lpi_galenet.mtx
+	- $(V) ./qrdemoc < ../Matrix/lpi_itest6.mtx
+	- $(V) ./qrdemoc < ../Matrix/ash219.mtx
+	- $(V) ./qrdemoc < ../Matrix/a4.mtx
+	- $(V) ./qrdemoc < ../Matrix/s32.mtx
+	- $(V) ./qrdemoc < ../Matrix/c32.mtx
+	- $(V) ./qrdemoc < ../Matrix/lp_share1b.mtx
+	- $(V) ./qrdemoc < ../Matrix/a1.mtx
+	- $(V) ./qrdemoc < ../Matrix/GD06_theory.mtx
+	- $(V) ./qrdemoc < ../Matrix/GD01_b.mtx
+	- $(V) ./qrdemoc < ../Matrix/Tina_AskCal_perm.mtx
+	- $(V) ./qrdemoc < ../Matrix/Tina_AskCal.mtx
+	- $(V) ./qrdemoc < ../Matrix/GD98_a.mtx
+	- $(V) ./qrdemoc < ../Matrix/Ragusa16.mtx
+	- $(V) ./qrdemoc < ../Matrix/young1c.mtx
+	- $(V) ./qrdemoc < ../Matrix/lp_e226_transposed.mtx
+
+gpu: qrdemo_gpu qrdemo_gpu2 qrdemo_gpu3
+	- $(V) ./qrdemo_gpu  ../Matrix/west0067.mtx 2
+	- $(V) ./qrdemo_gpu  ../Matrix/lp_e226_transposed.mtx 2
+	- $(V) ./qrdemo_gpu  ../Matrix/lp_e226_transposed.mtx 6
+
+gpu2:
+	- $(V) ./qrdemo_gpu2 ../Matrix/west0067.mtx 2
+	- $(V) ./qrdemo_gpu2 ../Matrix/lp_e226_transposed.mtx 2
+	- $(V) ./qrdemo_gpu2 ../Matrix/lp_e226_transposed.mtx 6
+
+gpu3: qrdemo_gpu3
+	- $(V) ./qrdemo_gpu3 ../Matrix/west0067.mtx 2
+	- $(V) ./qrdemo_gpu3 ../Matrix/lp_e226_transposed.mtx 2
+	- $(V) ./qrdemo_gpu3 ../Matrix/lp_e226_transposed.mtx 6
+
+gpu4: qrdemo_gpu
+	- $(V) ./qrdemo_gpu  ../Matrix/Groebner_id2003_aug.mtx 6
+	- $(V) ./qrdemo_gpu  ../Matrix/Franz6_id1959_aug.mtx 6
+
+../Lib/libspqr.a:
+	( cd ../Lib ; $(MAKE) )
+
+../../AMD/Lib/libamd.a:
+	( cd ../../AMD ; $(MAKE) library )
+
+../../SuiteSparse_config/libsuitesparseconfig.a:
+	( cd ../../SuiteSparse_config ; $(MAKE) library )
+
+../../CHOLMOD/Lib/libcholmod.a:
+	- ( cd ../../CHOLMOD && $(MAKE) library )
+
+../../COLAMD/Lib/libcolamd.a:
+	- ( cd ../../COLAMD && $(MAKE) library )
+
+../../CCOLAMD/Lib/libccolamd.a:
+	- ( cd ../../CCOLAMD && $(MAKE) library )
+
+../../CAMD/Lib/libcamd.a:
+	- ( cd ../../CAMD && $(MAKE) library )
+
+../../SuiteSparse_GPURuntime/Lib/libSuiteSparse_GPURuntime.a:
+	- ( cd ../../SuiteSparse_GPURuntime && $(MAKE) )
+
+../../GPUQREngine/Lib/libGPUQREngine.a:
+	- ( cd ../../GPUQREngine && $(MAKE) )
+
+$(METIS):
+	- ( cd $(METIS_PATH) && $(MAKE) )
+
+library:
+	( cd ../Lib ; $(MAKE) )
+	( cd ../../AMD ; $(MAKE) library )
+	( cd ../../SuiteSparse_config ; $(MAKE) library )
+	- ( cd ../../CHOLMOD && $(MAKE) library )
+	- ( cd ../../COLAMD && $(MAKE) library )
+	- ( cd ../../CCOLAMD && $(MAKE) library )
+	- ( cd ../../CAMD && $(MAKE) library )
+ifneq ($(GPU_CONFIG),)
+	- ( cd ../../SuiteSparse_GPURuntime && $(MAKE) )
+	- ( cd ../../GPUQREngine && $(MAKE) )
+endif
+ifneq ($(GPU_CONFIG),)
+	- ( cd $(METIS_PATH) && $(MAKE) )
+endif
+
+purge: distclean
+	- $(RM) -r *.dot pfile tfile
+
+distclean: clean
+	- $(RM) qrdemo qrdemo_gpu qrdemoc qrsimple qrsimplec
+	- $(RM) -r *.dSYM gpu_results.txt qrdemo_gpu2 qrdemo_gpu3
+
+clean:
+	- $(RM) $(CLEAN)
+
+INC = ../Include/spqr.hpp ../Include/SuiteSparseQR_C.h \
+	../Include/SuiteSparseQR_definitions.h \
+	../Include/SuiteSparseQR.hpp Makefile
+
+I = -I../../CHOLMOD/Include                                \
+    -I../../SuiteSparse_config                             \
+    -I../Include                                           \
+    $(I_WITH_SPQRGPU)
+
+C = $(CXX) $(CF) $(SPQR_CONFIG) $(CONFIG_PARTITION) $(CONFIG_GPU) $(I)
+
+LIBS = $(CLIB) $(LIB) $(FLIB) $(TBB) $(GPULIB)
+
+# With the CUDA BLAS
+ifneq ($(GPU_CONFIG),)
+LIBS += $(CUDART_LIB) $(CUBLAS_LIB)
+endif
+
+qrsimple: qrsimple.cpp library $(INC)
+	$(C) qrsimple.cpp -o qrsimple $(LIBS)
+
+qrdemo: qrdemo.cpp library $(INC)
+	$(C) qrdemo.cpp -o qrdemo $(LIBS)
+
+qrdemo_gpu: qrdemo_gpu.cpp library $(INC)
+ifneq ($(GPU_CONFIG),)
+	$(C) qrdemo_gpu.cpp -o qrdemo_gpu $(LIBS)
+else
+	echo
+endif
+
+qrdemo_gpu2: qrdemo_gpu2.cpp library $(INC)
+ifneq ($(GPU_CONFIG),)
+	$(C) qrdemo_gpu2.cpp -o qrdemo_gpu2 $(LIBS)
+else
+	echo
+endif
+
+qrdemo_gpu3: qrdemo_gpu3.cpp library $(INC)
+ifneq ($(GPU_CONFIG),)
+	$(C) qrdemo_gpu3.cpp -o qrdemo_gpu3 $(LIBS)
+else
+	echo
+endif
+
+# compile the C code with gcc, but link with g++ to use SuiteSparseQR:
+
+qrdemoc.o: qrdemoc.c $(INC)
+	$(CC) $(CF) $(SPQR_CONFIG) -ansi $(I) -c $<
+
+qrdemoc: qrdemoc.o library $(INC)
+	$(C) -o qrdemoc qrdemoc.o $(LIBS)
+
+qrsimplec.o: qrsimplec.c $(INC)
+	$(CC) $(CF) $(SPQR_CONFIG) -ansi $(I) -c $<
+
+qrsimplec: qrsimplec.o library $(INC)
+	$(C) -o qrsimplec qrsimplec.o $(LIBS)
+
diff --git a/SPQR/Demo/README.txt b/SPQR/Demo/README.txt
new file mode 100644
index 0000000..b6a63d0
--- /dev/null
+++ b/SPQR/Demo/README.txt
@@ -0,0 +1,37 @@
+This SPQR/Demo directory contains a simple demo of the SuiteSparseQR package.
+"make" will compile and run the demo on a set of matrices in the ../Matrix
+directory.  The output should look similar to the qrdemo_out.txt file.
+
+README.txt          this file
+Makefile            for compiling and running the C++ and C demos
+
+--------------------------------------------------------------------------------
+
+qrdemo.cpp          C++ demo program
+qrsimple.cpp        a very simple C++ demo program
+qrsimplec.c         a very simple C demo program
+qrdemo_out.txt      output of "make" (compiles and tests the 3 codes above)
+
+--------------------------------------------------------------------------------
+
+qrdemo.m            MATLAB equivalent of qrdemo.cpp.  To compare with the C++
+                    qrdemo program, type "qrdemo" in the MATLAB command window.
+                    You must first compile and install the SuiteSparseQR MATLAB
+                    mexFunctions in SPQR/MATLAB (see SPQR/MATLAB/spqr_make.m).
+
+--------------------------------------------------------------------------------
+
+qrdemoc.c           C demo program, compile and test it with "make cdemo"
+qrdemoc_out.txt     output of "make cdemo"
+
+--------------------------------------------------------------------------------
+
+GPU-related demos and tests
+demo_colamd*.sh     scripts for running the GPU demo with COLAMD
+demo_metis*.sh      scripts for running the GPU demo with METIS
+go*.m               MATLAB scripts for testing the GPU version
+qrdemo_gpu*.cpp     GPU demos
+
+--------------------------------------------------------------------------------
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/SPQR/Demo/demo_colamd.sh b/SPQR/Demo/demo_colamd.sh
new file mode 100644
index 0000000..c957ea3
--- /dev/null
+++ b/SPQR/Demo/demo_colamd.sh
@@ -0,0 +1 @@
+./qrdemo_gpu A.mtx 2
diff --git a/SPQR/Demo/demo_colamd2.sh b/SPQR/Demo/demo_colamd2.sh
new file mode 100644
index 0000000..849d958
--- /dev/null
+++ b/SPQR/Demo/demo_colamd2.sh
@@ -0,0 +1 @@
+./qrdemo_gpu2 A.mtx 2 > o_colamd_withgpu
diff --git a/SPQR/Demo/demo_colamd3.sh b/SPQR/Demo/demo_colamd3.sh
new file mode 100644
index 0000000..5ace07e
--- /dev/null
+++ b/SPQR/Demo/demo_colamd3.sh
@@ -0,0 +1 @@
+./qrdemo_gpu3 A.mtx 2 > o_colamd_nogpu
diff --git a/SPQR/Demo/demo_metis.sh b/SPQR/Demo/demo_metis.sh
new file mode 100644
index 0000000..2a152a3
--- /dev/null
+++ b/SPQR/Demo/demo_metis.sh
@@ -0,0 +1 @@
+./qrdemo_gpu A.mtx 6
diff --git a/SPQR/Demo/demo_metis2.sh b/SPQR/Demo/demo_metis2.sh
new file mode 100644
index 0000000..4af2edb
--- /dev/null
+++ b/SPQR/Demo/demo_metis2.sh
@@ -0,0 +1 @@
+./qrdemo_gpu2 A.mtx 6 > o_metis_withgpu
diff --git a/SPQR/Demo/demo_metis3.sh b/SPQR/Demo/demo_metis3.sh
new file mode 100644
index 0000000..8d50876
--- /dev/null
+++ b/SPQR/Demo/demo_metis3.sh
@@ -0,0 +1 @@
+./qrdemo_gpu3 A.mtx 6 > o_metis_nogpu
diff --git a/SPQR/Demo/go4.m b/SPQR/Demo/go4.m
new file mode 100644
index 0000000..69af534
--- /dev/null
+++ b/SPQR/Demo/go4.m
@@ -0,0 +1,225 @@
+% compares SPQR with SPQR+GPU on lots of sparse matrices
+
+clear
+index = UFget ;
+f = find ((index.isReal == 1) & (index.isBinary == 0) & (index.isGraph == 0)) ;
+nmat = length (f) ;
+howbig = max (index.amd_rnz (f), index.amd_lnz (f)) ;
+[ignore i] = sort (howbig) ;
+howbig = howbig (i) ;
+f = f (i) ;
+nmat = length (f) ;
+
+keep = ones (nmat,1) ;
+kinds = UFkinds ;
+for k = 1:nmat
+    id = f (k) ;
+    if (~isempty (strfind (kinds {id}, 'subsequent')))
+        keep (k) = 0 ;
+    end
+    if (~isempty (strfind (kinds {id}, 'duplicate')))
+        keep (k) = 0 ;
+    end
+end
+f = f (find (keep)) ;
+nmat = length (f) ;
+
+for k = 1:nmat
+    id = f (k) ;
+    kind = kinds {id} ;
+    fprintf ('%4d %4d %s/%s : %s\n', ...
+        k, id, index.Group {id}, index.Name {id}, kind);
+end
+
+fprintf ('\n# of matrices %d\n', nmat) ;
+
+fprintf ('Hit enter to continue: ') ; pause
+
+have_gpu = 1 ;
+
+opts.Q = 'discard' ;
+
+% try
+%     load Results4
+% catch
+    % 1: spqr on CPU with colamd
+    % 2: spqr on CPU with metis
+    % 3: spqr on GPU with colamd
+    % 4: spqr on GPU with metis
+    Info        = cell (nmat,4) ;
+    Flops       = zeros (nmat, 4) ;
+    Mem         = zeros (nmat, 4) ;
+    Rnz         = zeros (nmat, 4) ;
+    T_analyze   = zeros (nmat, 4) ;
+    T_factorize = zeros (nmat, 4) ;
+
+    % matrix stats
+    Rank_est    = zeros (nmat, 1) ;
+    Anz         = zeros (nmat, 1) ;
+    Augment     = zeros (nmat, 1) ; % 1 if A was augmented, 0 otherwise
+% end
+
+for k = 700:nmat
+
+    %---------------------------------------------------------------------------
+    % skip the problem if it is already done
+    %---------------------------------------------------------------------------
+
+    if (all (T_factorize (k,:) > 0))
+        continue
+    end
+
+    %---------------------------------------------------------------------------
+    % get the problem
+    %---------------------------------------------------------------------------
+
+    id = f (k) ;
+    kind = kinds {id} ;
+    fprintf ('\n%4d %4d %s/%s : %s\n', ...
+        k, id, index.Group {id}, index.Name {id}, kind) ;
+
+    Prob = UFget (id, index) ;
+    A = Prob.A ;
+    anorm = norm (A,1) ;
+    [m n] = size (A) ;
+    if (m < n)
+        A = A' ;
+        [m n] = size (A) ;
+    end
+    b = ones (m,1) ;
+
+    %---------------------------------------------------------------------------
+    % run SPQR without the GPU
+    %---------------------------------------------------------------------------
+
+    for ordering = 1:2
+
+        if (ordering == 1)
+            opts.ordering = 'colamd' ;
+        else
+            opts.ordering = 'metis' ;
+        end
+
+        [C R E info] = spqr (A, b, opts) ;
+        rnz = nnz (R) ;
+        clear Q R E
+
+        if (ordering == 1)
+
+            Rank_est (k) = info.rank_A_estimate ;
+            fprintf ('rankest %d ', Rank_est (k)) ;
+
+            if (info.rank_A_estimate < min (m,n))
+                % oops, A is rank deficient.  Try it again
+                fprintf ('(rank deficient)\n') ;
+                Augment (k) = 1 ;
+                A = [A ; anorm*speye(n)] ;
+                [m n] = size (A) ;
+                b = ones (m,1) ;
+                clear Q R E
+                [C R E info] = spqr (A, b, opts) ;
+                rnz = nnz (R) ;
+                clear Q R E
+            else
+                fprintf ('(ok)\n') ;
+            end
+
+            Anz (k) = nnz (A) ;
+        end
+
+        Info {k,ordering} = info ;
+        info
+        Flops (k,ordering) = info.flops ;
+        Mem (k,ordering) = info.memory_usage_in_bytes ;
+        Rnz (k,ordering) = rnz ;
+        T_analyze (k,ordering) = info.analyze_time ;
+        T_factorize (k,ordering) = info.factorize_time ;
+
+    end
+
+    %---------------------------------------------------------------------------
+    % run SPQR with the GPU
+    %---------------------------------------------------------------------------
+
+    mwrite ('A.mtx', A) ;
+
+    for ordering = 1:2
+
+        try
+            info = spqr_gpu (ordering) ;
+            info
+            Info {k,2 + ordering} = info ;
+            Flops (k,2 + ordering) = info.flops ;
+            Mem (k,2 + ordering) = info.memory_usage_in_bytes ;
+            Rnz (k,2 + ordering) = info.nnzR ;
+            T_analyze (k,2 + ordering) = info.analyze_time ;
+            T_factorize (k,2 + ordering) = info.factorize_time ;
+
+            % Protect the data against caught OOM errors
+            if (T_factorize(k,2+ordering) == 0)
+                T_factorize(k,2+ordering) = nan ;
+            end
+
+        catch
+            % GPU version failed
+            T_factorize (k,2 + ordering) = nan ;
+        end
+    end
+
+%    if (Flops (k,1) ~= Flops (k,3))
+%        Flops (k,[1 3])
+%        error ('colamd flops are not the same ... why?') ;
+%    end
+%    if (Flops (k,2) ~= Flops (k,4))
+%        Flops (k,[2 4])
+%        error ('metis flops are not the same ... why?') ;
+%    end
+
+    %---------------------------------------------------------------------------
+    % save the results and plot them
+    %---------------------------------------------------------------------------
+
+    save Results6 ...
+        Info Flops Mem Rnz T_analyze T_factorize Rank_est Anz Augment f
+
+    intensity1 = Flops (1:k,1) ./ Mem (1:k,1) ;
+    intensity2 = Flops (1:k,2) ./ Mem (1:k,2) ;
+
+    gflops1 = 1e-9 * Flops (1:k,1) ./ T_factorize (1:k,1) ;
+    gflops2 = 1e-9 * Flops (1:k,2) ./ T_factorize (1:k,2) ;
+    gflops3 = 1e-9 * Flops (1:k,1) ./ T_factorize (1:k,3) ;
+    gflops4 = 1e-9 * Flops (1:k,2) ./ T_factorize (1:k,4) ;
+
+    fprintf ('CPU colamd factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,1), gflops1 (k)) ;
+
+    fprintf ('CPU metis  factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,2), gflops2 (k)) ;
+
+    fprintf ('GPU colamd factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,3), gflops3 (k)) ;
+
+    fprintf ('GPU metis  factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,4), gflops4 (k)) ;
+
+    subplot (2,3,1) ; plot (intensity1, gflops1, 'o') ; title ('CPU:colamd') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,2) ; plot (intensity1, gflops3, 'o') ; title ('GPU:colamd') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,3) ; plot (intensity1, gflops3./gflops1, 'o') ;
+    title ('GPU speedup (colamd)') ;
+
+    subplot (2,3,4) ; plot (intensity2, gflops2, 'o') ; title ('CPU:metis') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,5) ; plot (intensity2, gflops4, 'o') ; title ('GPU:metis') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,6) ; plot (intensity2, gflops4./gflops2, 'o') ;
+    title ('GPU speedup (metis)') ;
+    drawnow
+
+    diary off
+    diary on
+
+    % fprintf ('Hit enter: ') ; pause
+
+end
diff --git a/SPQR/Demo/go5.m b/SPQR/Demo/go5.m
new file mode 100644
index 0000000..8c78a70
--- /dev/null
+++ b/SPQR/Demo/go5.m
@@ -0,0 +1,254 @@
+% compares SPQR with SPQR+GPU on lots of sparse matrices
+
+clear
+index = UFget ;
+f = find ((index.isReal == 1) & (index.isBinary == 0) & (index.isGraph == 0)) ;
+nmat = length (f) ;
+howbig = max (index.amd_rnz (f), index.amd_lnz (f)) ;
+[ignore i] = sort (howbig) ;
+howbig = howbig (i) ;
+f = f (i) ;
+nmat = length (f) ;
+
+keep = ones (nmat,1) ;
+kinds = UFkinds ;
+for k = 1:nmat
+    id = f (k) ;
+    if (~isempty (strfind (kinds {id}, 'subsequent')))
+        keep (k) = 0 ;
+    end
+    if (~isempty (strfind (kinds {id}, 'duplicate')))
+        keep (k) = 0 ;
+    end
+end
+f = f (find (keep)) ;
+nmat = length (f) ;
+
+rankdeficient = [317] ;
+skip_list = [1657] ;
+
+revisit = [253 317 1556]
+
+for k = 1:nmat
+    id = f (k) ;
+    kind = kinds {id} ;
+    fprintf ('%4d %4d %s/%s : %s\n', ...
+        k, id, index.Group {id}, index.Name {id}, kind);
+end
+
+fprintf ('\n# of matrices %d\n', nmat) ;
+
+fprintf ('Hit enter to continue: ') ; pause
+
+have_gpu = 1 ;
+
+opts.Q = 'discard' ;
+
+try
+    load Results7
+catch
+    % 1: spqr on CPU with colamd
+    % 2: spqr on CPU with metis
+    % 3: spqr on GPU with colamd
+    % 4: spqr on GPU with metis
+    Info        = cell (nmat,4) ;
+    Flops       = zeros (nmat, 4) ;
+    Mem         = zeros (nmat, 4) ;
+    Rnz         = zeros (nmat, 4) ;
+    T_analyze   = zeros (nmat, 4) ;
+    T_factorize = zeros (nmat, 4) ;
+
+    % matrix stats
+    Rank_est    = zeros (nmat, 1) ;
+    Anz         = zeros (nmat, 1) ;
+    Augment     = zeros (nmat, 1) ; % 1 if A was augmented, 0 otherwise
+end
+
+for k = 1:nmat
+
+    %---------------------------------------------------------------------------
+    % skip the problem if it is already done
+    %---------------------------------------------------------------------------
+
+    if (all (T_factorize (k,:) > 0))
+        continue
+    end
+
+    %---------------------------------------------------------------------------
+    % get the problem
+    %---------------------------------------------------------------------------
+
+    id = f (k) ;
+    kind = kinds {id} ;
+    fprintf ('\n%4d %4d %s/%s : %s\n', ...
+        k, id, index.Group {id}, index.Name {id}, kind) ;
+
+    if (any (id == skip_list))
+        fprintf ('skip\n') ;
+        continue
+    end
+
+    Prob = UFget (id, index) ;
+    A = Prob.A ;
+    anorm = norm (A,1) ;
+    [m n] = size (A) ;
+    if (m < n)
+        A = A' ;
+        [m n] = size (A) ;
+    end
+    b = ones (m,1) ;
+
+    %---------------------------------------------------------------------------
+    % run SPQR without the GPU
+    %---------------------------------------------------------------------------
+
+    for ordering = 1:2
+
+        if (ordering == 1)
+            opts.ordering = 'colamd' ;
+        else
+            opts.ordering = 'metis' ;
+        end
+
+        [C R E info] = spqr (A, b, opts) ;
+        rnz = nnz (R) ;
+
+        if (ordering == 1)
+
+            Rank_est (k) = info.rank_A_estimate ;
+            fprintf ('rankest %d ', Rank_est (k)) ;
+
+            if (info.rank_A_estimate < min (m,n))
+                % oops, A is rank deficient.  Try it again
+                fprintf ('(rank deficient)\n') ;
+                Augment (k) = 1 ;
+                A = [A ; anorm*speye(n)] ;
+                [m n] = size (A) ;
+                b = ones (m,1) ;
+                clear Q R E
+                [C R E info] = spqr (A, b, opts) ;
+                rnz = nnz (R) ;
+            else
+                fprintf ('(ok)\n') ;
+            end
+
+            Anz (k) = nnz (A) ;
+        end
+    
+        x = E*(R\C) ;
+
+        Info {k,ordering} = info ;
+        info
+        Flops (k,ordering) = info.flops ;
+        Mem (k,ordering) = info.memory_usage_in_bytes ;
+        Rnz (k,ordering) = rnz ;
+        T_analyze (k,ordering) = info.analyze_time ;
+        T_factorize (k,ordering) = info.factorize_time ;
+
+        atrnorm (ordering) = norm (A'*(A*x-b)) / norm (A'*A,1) ;;
+        fprintf ('relative atrnorm for CPU: %g\n', atrnorm (ordering)) ;
+
+        clear Q R E
+
+    end
+
+    if (any (id == rankdeficient))
+        fprintf ('skipping rank deficient case for the GPU\n') ;
+        continue ;
+    end
+
+    %---------------------------------------------------------------------------
+    % run SPQR with the GPU
+    %---------------------------------------------------------------------------
+
+    mwrite ('A.mtx', A) ;
+
+    for ordering = 1:2
+
+%       try
+            info = spqr_gpu (ordering, A) ;
+            info
+            Info {k,2 + ordering} = info ;
+            Flops (k,2 + ordering) = info.flops ;
+            Mem (k,2 + ordering) = info.memory_usage_in_bytes ;
+            Rnz (k,2 + ordering) = info.nnzR ;
+            T_analyze (k,2 + ordering) = info.analyze_time ;
+            T_factorize (k,2 + ordering) = info.factorize_time ;
+
+            % Protect the data against caught OOM errors
+            if (T_factorize(k,2+ordering) == 0)
+                T_factorize(k,2+ordering) = nan ;
+                % pause
+                error ('oom') ;
+            end
+
+            [C,R,E,B,X,err] = spqr_gpu2 (ordering, A) ;
+            clear C R E B X
+
+%       catch
+%           % GPU version failed
+%           T_factorize (k,2 + ordering) = nan ;
+%           pause
+%       end
+
+    end
+
+%    if (Flops (k,1) ~= Flops (k,3))
+%        Flops (k,[1 3])
+%        error ('colamd flops are not the same ... why?') ;
+%    end
+%    if (Flops (k,2) ~= Flops (k,4))
+%        Flops (k,[2 4])
+%        error ('metis flops are not the same ... why?') ;
+%    end
+
+    %---------------------------------------------------------------------------
+    % save the results and plot them
+    %---------------------------------------------------------------------------
+
+    save Results7 ...
+        Info Flops Mem Rnz T_analyze T_factorize Rank_est Anz Augment f
+
+    intensity1 = Flops (1:k,1) ./ Mem (1:k,1) ;
+    intensity2 = Flops (1:k,2) ./ Mem (1:k,2) ;
+
+    gflops1 = 1e-9 * Flops (1:k,1) ./ T_factorize (1:k,1) ;
+    gflops2 = 1e-9 * Flops (1:k,2) ./ T_factorize (1:k,2) ;
+    gflops3 = 1e-9 * Flops (1:k,1) ./ T_factorize (1:k,3) ;
+    gflops4 = 1e-9 * Flops (1:k,2) ./ T_factorize (1:k,4) ;
+
+    fprintf ('CPU colamd factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,1), gflops1 (k)) ;
+
+    fprintf ('CPU metis  factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,2), gflops2 (k)) ;
+
+    fprintf ('GPU colamd factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,3), gflops3 (k)) ;
+
+    fprintf ('GPU metis  factime %8.2f  gflops : %8.2f\n', ...
+        T_factorize (k,4), gflops4 (k)) ;
+
+%{
+    subplot (2,3,1) ; plot (intensity1, gflops1, 'o') ; title ('CPU:colamd') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,2) ; plot (intensity1, gflops3, 'o') ; title ('GPU:colamd') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,3) ; plot (intensity1, gflops3./gflops1, 'o') ;
+    title ('GPU speedup (colamd)') ;
+
+    subplot (2,3,4) ; plot (intensity2, gflops2, 'o') ; title ('CPU:metis') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,5) ; plot (intensity2, gflops4, 'o') ; title ('GPU:metis') ;
+    ylabel ('Gflops') ; xlabel ('flops/byte') ;
+    subplot (2,3,6) ; plot (intensity2, gflops4./gflops2, 'o') ;
+    title ('GPU speedup (metis)') ;
+    drawnow
+%}
+
+    diary off
+    diary on
+
+    % fprintf ('Hit enter: ') ; pause
+
+end
diff --git a/SPQR/Demo/qrdemo.cpp b/SPQR/Demo/qrdemo.cpp
new file mode 100644
index 0000000..764a534
--- /dev/null
+++ b/SPQR/Demo/qrdemo.cpp
@@ -0,0 +1,173 @@
+// =============================================================================
+// === qrdemo.cpp ==============================================================
+// =============================================================================
+
+// A simple C++ demo of SuiteSparseQR.  The comments give the MATLAB equivalent
+// statements.  See also qrdemo.m
+
+#include "SuiteSparseQR.hpp"
+#include <complex>
+
+// SuiteSparseQR uses an integer defined in SuiteSparse_config.h called
+// SuiteSparse_long.  It is a 32-bit integer on a 32-bit platform, and a 64-bit
+// integer on a 64-bit platform.  For most platforms (except Windows),
+// SuiteSparse_long is just "long".
+
+#define Long SuiteSparse_long
+
+// =============================================================================
+// check_residual:  print the relative residual, norm (A*x-b)/norm(x)
+// =============================================================================
+
+void check_residual
+(
+    cholmod_sparse *A,
+    cholmod_dense *X,
+    cholmod_dense *B,
+    cholmod_common *cc
+)
+{
+    Long m = A->nrow ;
+    Long n = A->ncol ;
+    Long rnk ;
+    double rnorm, anorm, xnorm, atrnorm ;
+    double one [2] = {1,0}, minusone [2] = {-1,0}, zero [2] = {0,0} ;
+    cholmod_dense *r, *atr ;
+
+    // get the rank(A) estimate
+    rnk = cc->SPQR_istat [4] ;
+
+    // anorm = norm (A,1) ;
+    anorm = cholmod_l_norm_sparse (A, 1, cc) ;
+
+    // rnorm = norm (A*X-B)
+    r = cholmod_l_copy_dense (B, cc) ;
+    cholmod_l_sdmult (A, 0, one, minusone, X, r, cc) ;
+    rnorm = cholmod_l_norm_dense (r, 2, cc) ;
+
+    // xnorm = norm (X)
+    xnorm = cholmod_l_norm_dense (X, 2, cc) ;
+
+    // atrnorm = norm (A'*r)
+    atr = cholmod_l_zeros (n, 1, r->xtype, cc) ;        // atr = zeros (n,1)
+    cholmod_l_sdmult (A, 1, one, zero, r, atr, cc) ;    // atr = A'*r
+    atrnorm = cholmod_l_norm_dense (atr, 2, cc) ;       // atrnorm = norm (atr)
+    if (anorm > 0) atrnorm /= anorm ;
+
+    if (m <= n && anorm > 0 && xnorm > 0)
+    {
+        // find the relative residual, except for least-squares systems
+        rnorm /= (anorm * xnorm) ;
+    }
+    printf ("relative norm(Ax-b): %8.1e rank: %6ld  "
+        "rel. norm(A'(Ax-b)) %8.1e\n", rnorm, rnk, atrnorm) ;
+    cholmod_l_free_dense (&r, cc) ;
+    cholmod_l_free_dense (&atr, cc) ;
+}
+
+// =============================================================================
+
+int main (int argc, char **argv)
+{
+    cholmod_common Common, *cc ;
+    cholmod_sparse *A ;
+    cholmod_dense *X, *B ;
+    int mtype ;
+    Long m, n ;
+
+    // start CHOLMOD
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    // A = mread (stdin) ; read in the sparse matrix A
+    A = (cholmod_sparse *) cholmod_l_read_matrix (stdin, 1, &mtype, cc) ;
+    if (mtype != CHOLMOD_SPARSE)
+    {
+        printf ("input matrix must be sparse\n") ;
+        exit (1) ;
+    }
+
+    // [m n] = size (A) ;
+    m = A->nrow ;
+    n = A->ncol ;
+
+    printf ("Matrix %6ld-by-%-6ld nnz: %6ld\n", m, n, cholmod_l_nnz (A, cc)) ;
+
+    // B = ones (m,1), a dense right-hand-side of the same type as A
+    B = cholmod_l_ones (m, 1, A->xtype, cc) ;
+
+    // X = A\B ; with default ordering and default column 2-norm tolerance
+    if (A->xtype == CHOLMOD_REAL)
+    {
+        // A, X, and B are all real
+        X = SuiteSparseQR <double>
+            (SPQR_ORDERING_DEFAULT, SPQR_DEFAULT_TOL, A, B, cc) ;
+    }
+    else
+    {
+        // A, X, and B are all complex
+        X = SuiteSparseQR < std::complex<double> >
+            (SPQR_ORDERING_DEFAULT, SPQR_DEFAULT_TOL, A, B, cc) ;
+    }
+
+    check_residual (A, X, B, cc) ;
+    cholmod_l_free_dense (&X, cc) ;
+
+    // -------------------------------------------------------------------------
+    // factorizing once then solving twice with different right-hand-sides
+    // -------------------------------------------------------------------------
+
+    // Just the real case.  Complex case is essentially identical
+    if (A->xtype == CHOLMOD_REAL)
+    {
+        SuiteSparseQR_factorization <double> *QR ;
+        cholmod_dense *Y ;
+        Long i ;
+        double *Bx ;
+
+        // factorize once
+        QR = SuiteSparseQR_factorize <double>
+            (SPQR_ORDERING_DEFAULT, SPQR_DEFAULT_TOL, A, cc) ;
+
+        // solve Ax=b, using the same B as before
+
+        // Y = Q'*B
+        Y = SuiteSparseQR_qmult (SPQR_QTX, QR, B, cc) ;
+        // X = R\(E*Y)
+        X = SuiteSparseQR_solve (SPQR_RETX_EQUALS_B, QR, Y, cc) ;
+        // check the results
+        check_residual (A, X, B, cc) ;
+        // free X and Y
+        cholmod_l_free_dense (&Y, cc) ;
+        cholmod_l_free_dense (&X, cc) ;
+
+        // repeat with a different B
+        Bx = (double *) (B->x) ;
+        for (i = 0 ; i < m ; i++)
+        {
+            Bx [i] = i ;
+        }
+
+        // Y = Q'*B
+        Y = SuiteSparseQR_qmult (SPQR_QTX, QR, B, cc) ;
+        // X = R\(E*Y)
+        X = SuiteSparseQR_solve (SPQR_RETX_EQUALS_B, QR, Y, cc) ;
+        // check the results
+        check_residual (A, X, B, cc) ;
+        // free X and Y
+        cholmod_l_free_dense (&Y, cc) ;
+        cholmod_l_free_dense (&X, cc) ;
+
+        // free QR
+        SuiteSparseQR_free (&QR, cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // free everything that remains
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free_sparse (&A, cc) ;
+    cholmod_l_free_dense (&B, cc) ;
+    cholmod_l_finish (cc) ;
+    return (0) ;
+}
diff --git a/SPQR/Demo/qrdemo.m b/SPQR/Demo/qrdemo.m
new file mode 100644
index 0000000..42ca4cb
--- /dev/null
+++ b/SPQR/Demo/qrdemo.m
@@ -0,0 +1,141 @@
+function qrdemo (matrix_name)
+%QRDEMO a simple demo of SuiteSparseQR
+% This is the MATLAB equivalent of the qrdemo.cpp program.  It reads in either
+% a single matrix or a set of matrices, held as files in Matrix Market format
+% in the ../Matrix directory.
+%
+% Example
+%   qrdemo
+%   qrdemo ('../Matrix/young1c.mtx')
+%
+% See also spqr, spqr_solve, mldivide
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin == 0)
+
+    % try all matrices
+    qrdemo ('../Matrix/a2.mtx') ;
+    qrdemo ('../Matrix/r2.mtx') ;
+    qrdemo ('../Matrix/a04.mtx') ;
+    qrdemo ('../Matrix/a2.mtx') ;
+    qrdemo ('../Matrix/west0067.mtx') ;
+    qrdemo ('../Matrix/c2.mtx') ;
+    qrdemo ('../Matrix/a0.mtx') ;
+    qrdemo ('../Matrix/lfat5b.mtx') ;
+    qrdemo ('../Matrix/bfwa62.mtx') ;
+    qrdemo ('../Matrix/LFAT5.mtx') ;
+    qrdemo ('../Matrix/b1_ss.mtx') ;
+    qrdemo ('../Matrix/bcspwr01.mtx') ;
+    qrdemo ('../Matrix/lpi_galenet.mtx') ;
+    qrdemo ('../Matrix/lpi_itest6.mtx') ;
+    qrdemo ('../Matrix/ash219.mtx') ;
+    qrdemo ('../Matrix/a4.mtx') ;
+    qrdemo ('../Matrix/s32.mtx') ;
+    qrdemo ('../Matrix/c32.mtx') ;
+    qrdemo ('../Matrix/lp_share1b.mtx') ;
+    qrdemo ('../Matrix/a1.mtx') ;
+    qrdemo ('../Matrix/GD06_theory.mtx') ;
+    qrdemo ('../Matrix/GD01_b.mtx') ;
+    qrdemo ('../Matrix/Tina_AskCal_perm.mtx') ;
+    qrdemo ('../Matrix/Tina_AskCal.mtx') ;
+    qrdemo ('../Matrix/GD98_a.mtx') ;
+    qrdemo ('../Matrix/Ragusa16.mtx') ;
+    qrdemo ('../Matrix/young1c.mtx') ;
+    fprintf ('All tests passed\n') ;
+
+else
+
+    %---------------------------------------------------------------------------
+    % turn off warnings
+    %---------------------------------------------------------------------------
+
+    s = warning ('query', 'all') ;
+    warning ('off', 'MATLAB:singularMatrix') ;
+    warning ('off', 'MATLAB:rankDeficientMatrix') ;
+
+    % --------------------------------------------------------------------------
+    % the MATLAB equivalent of qrdemo.cpp
+    % --------------------------------------------------------------------------
+
+    fprintf ('qrdemo %s\n', matrix_name) ;
+    A = mread (matrix_name) ;
+    [m n] = size (A) ;
+    anorm = norm (A,1) ;
+    fprintf ('Matrix %6d-by-%-6d nnz: %6d ', m, n, nnz(A)) ;
+    B = ones (m,1) ;
+    [X, info] = spqr_solve (A,B) ;
+    rnk = info.rank_A_estimate ;
+    rnorm = norm (A*X-B,1) ;
+    xnorm = norm (X,1) ;
+    if (m <= n && anorm > 0 && xnorm > 0)
+        rnorm = rnorm / (anorm * xnorm) ;
+    end
+    fprintf ('residual: %8.1e rank: %6d', rnorm, rnk) ;
+
+    %---------------------------------------------------------------------------
+    % compare with MATLAB
+    % --------------------------------------------------------------------------
+
+    try
+        if (m ~= n || rnk == min (m,n))
+            X = A\B ;
+        else
+            % The matrix is square and rank deficient.  Rather than getting a
+            % divide-by-zero, force MATLAB to use a sparse QR by appending on a
+            % blank row, in an attempt to find a consistent solution.
+            X = [A ; sparse(1,n)] \ [B ; 0] ;
+            X = X (1:m,:) ;
+        end
+        rnorm_matlab = norm (A*X-B,1) ;
+        xnorm = norm (X,1) ;
+        if (m <= n && anorm > 0 && xnorm > 0)
+            rnorm_matlab = rnorm_matlab / (anorm * xnorm) ;
+        end
+    catch                                                                   %#ok
+        % the above will fail for complex matrices that are rectangular and/or
+        % rank deficient
+        rnorm_matlab = nan ;
+    end
+
+    % find the true rank; this is costly
+    rank_exact = rank (full (A)) ;
+
+    if (rnk ~= rank_exact)
+        % This can happen for some matrices; rnk is just an estimate, not
+        % guaranteed to be equal to the true rank.  This does not occur
+        % for any matrix in the ../Matrix test set.
+        fprintf (' ?\n ... rank estimate is not exact; true rank is %d\n', ...
+            rank_exact) ;
+        warning ('rank estimate is incorrect') ;                            %#ok
+    elseif (m <= n && rnk == m)
+        % A*x=b is a full-rank square or under-determined system which spqr
+        % should solve with low relative residual.
+        if (rnorm > 1e-12)
+            fprintf (' ?\n ... spqr solution is poor\n') ;
+            error ('qrdemo failed') ;
+        else
+            fprintf (' OK\n') ;
+        end
+    elseif (m > n && rnk == n)
+        % A*x=b is a full-rank least-squares problem.  Both spqr and MATLAB
+        % should find a similar residual.
+        err = abs (rnorm - rnorm_matlab) / max (rnorm_matlab, 1) ;
+        if (err > 1e-12)
+            fprintf (' ?\n ... spqr solution is poor\n') ;
+            error ('qrdemo failed') ;
+        else
+            fprintf (' OK\n') ;
+        end
+    else
+        % A*x=b is not full-rank; any solution will do ...
+        fprintf (' %8.1e OK\n', rnorm_matlab) ;
+    end
+
+    %---------------------------------------------------------------------------
+    % restore warning status
+    %---------------------------------------------------------------------------
+
+    warning (s) ;
+
+end
diff --git a/SPQR/Demo/qrdemo_gpu.cpp b/SPQR/Demo/qrdemo_gpu.cpp
new file mode 100644
index 0000000..48dea69
--- /dev/null
+++ b/SPQR/Demo/qrdemo_gpu.cpp
@@ -0,0 +1,144 @@
+// =============================================================================
+// === qrdemo_gpu.cpp ==========================================================
+// =============================================================================
+
+// A simple C++ demo of SuiteSparseQR.  The comments give the MATLAB equivalent
+// statements.  See also qrdemo.m
+
+#include "SuiteSparseQR.hpp"
+#include "SuiteSparseGPU_Runtime.hpp"
+#include <complex>
+
+int main (int argc, char **argv)
+{
+    cholmod_sparse *A ;
+    cholmod_dense *X, *B, *r, *atr ;
+    double anorm, xnorm, rnorm, one [2] = {1,0}, minusone [2] = {-1,0}, t ;
+    double zero [2] = {0,0}, atrnorm ;
+    int mtype ;
+    long m, n, rnk ;
+    size_t total_mem, available_mem ;
+
+    // start CHOLMOD
+    cholmod_common *cc, Common ;
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    // warmup the GPU.  This can take some time, but only needs
+    // to be done once
+    cc->useGPU = true ;
+    t = SuiteSparse_time ( ) ;
+    cholmod_l_gpu_memorysize (&total_mem, &available_mem, cc) ;
+    cc->gpuMemorySize = available_mem ;
+    t = SuiteSparse_time ( ) - t ;
+    if (cc->gpuMemorySize <= 1)
+    {
+        printf ("no GPU available\n") ;
+    }
+    printf ("available GPU memory: %g MB, warmup time: %g\n",
+        (double) (cc->gpuMemorySize) / (1024 * 1024), t) ;
+
+    // A = mread (stdin) ; read in the sparse matrix A
+    const char *filename = (argc < 2 ? "Problems/2.mtx" : argv[1]);
+    FILE *file = fopen(filename, "r");
+    A = (cholmod_sparse *) cholmod_l_read_matrix (file, 1, &mtype, cc) ;
+    fclose(file);
+    if (mtype != CHOLMOD_SPARSE)
+    {
+        printf ("input matrix must be sparse\n") ;
+        exit (1) ;
+    }
+
+    // [m n] = size (A) ;
+    m = A->nrow ;
+    n = A->ncol ;
+
+    long ordering = (argc < 3 ? SPQR_ORDERING_DEFAULT : atoi(argv[2]));
+
+#if 1
+    printf ("Matrix %6ld-by-%-6ld nnz: %6ld\n",
+        m, n, cholmod_l_nnz (A, cc)) ;
+#endif
+
+    // anorm = norm (A,1) ;
+    anorm = cholmod_l_norm_sparse (A, 1, cc) ;
+
+    // B = ones (m,1), a dense right-hand-side of the same type as A
+    B = cholmod_l_ones (m, 1, A->xtype, cc) ;
+
+    // X = A\B ; with default ordering and default column 2-norm tolerance
+    if (A->xtype == CHOLMOD_REAL)
+    {
+        // A, X, and B are all real
+        X = SuiteSparseQR <double>(ordering, SPQR_NO_TOL, A, B, cc) ;
+    }
+    else
+    {
+#if SUPPORTS_COMPLEX
+        // A, X, and B are all complex
+        X = SuiteSparseQR < std::complex<double> >
+            (SPQR_ORDERING_DEFAULT, SPQR_NO_TOL, A, B, cc) ;
+#else
+        printf("Code doesn't support std::complex<?> types.\n");
+#endif
+    }
+
+    // get the rank(A) estimate
+    rnk = cc->SPQR_istat [4] ;
+
+    // compute the residual r, and A'*r, and their norms
+    r = cholmod_l_copy_dense (B, cc) ;                  // r = B
+    cholmod_l_sdmult (A, 0, one, minusone, X, r, cc) ;  // r = A*X-r = A*x-b
+    rnorm = cholmod_l_norm_dense (r, 2, cc) ;           // rnorm = norm (r)
+    atr = cholmod_l_zeros (n, 1, CHOLMOD_REAL, cc) ;    // atr = zeros (n,1)
+    cholmod_l_sdmult (A, 1, one, zero, r, atr, cc) ;    // atr = A'*r
+    atrnorm = cholmod_l_norm_dense (atr, 2, cc) ;       // atrnorm = norm (atr)
+
+    // xnorm = norm (X)
+    xnorm = cholmod_l_norm_dense (X, 2, cc) ;
+
+    // write out X to a file
+    FILE *f = fopen ("X.mtx", "w") ;
+    cholmod_l_write_dense (f, X, NULL, cc) ;
+    fclose (f) ;
+
+    if (m <= n && anorm > 0 && xnorm > 0)
+    {
+        // find the relative residual, except for least-squares systems
+        rnorm /= (anorm * xnorm) ;
+    }
+    printf ("\nnorm(Ax-b): %8.1e\n", rnorm) ;
+    printf ("norm(A'(Ax-b))         %8.1e rank: %ld of %ld\n", 
+        atrnorm, rnk, (m < n) ? m:n) ;
+
+    /* Write an info file. */
+    FILE *info = fopen("gpu_results.txt", "w");
+    fprintf(info, "%ld\n", cc->SPQR_istat[7]);        // ordering method
+    fprintf(info, "%ld\n", cc->memory_usage);         // memory usage (bytes)
+    fprintf(info, "%30.16e\n", cc->SPQR_flopcount);   // flop count
+    fprintf(info, "%lf\n", cc->SPQR_analyze_time);    // analyze time
+    fprintf(info, "%lf\n", cc->SPQR_factorize_time);  // factorize time
+    fprintf(info, "-1\n") ;                           // cpu memory (bytes)
+    fprintf(info, "-1\n") ;                           // gpu memory (bytes)
+    fprintf(info, "%32.16e\n", rnorm);                // residual
+    fprintf(info, "%ld\n", cholmod_l_nnz (A, cc));    // nnz(A)
+    fprintf(info, "%ld\n", cc->SPQR_istat [0]);       // nnz(R)
+    fprintf(info, "%ld\n", cc->SPQR_istat [2]);       // # of frontal matrices
+    fprintf(info, "%ld\n", cc->SPQR_istat [3]);       // ntasks, for now
+    fprintf(info, "%lf\n", cc->gpuKernelTime);        // kernel time (ms)
+    fprintf(info, "%ld\n", cc->gpuFlops);             // "actual" gpu flops
+    fprintf(info, "%d\n", cc->gpuNumKernelLaunches);  // # of kernel launches
+    fprintf(info, "%32.16e\n", atrnorm) ;             // norm (A'*(Ax-b))
+
+    fclose(info);
+
+    // free everything
+    cholmod_l_free_dense (&r, cc) ;
+    cholmod_l_free_dense (&atr, cc) ;
+    cholmod_l_free_sparse (&A, cc) ;
+    cholmod_l_free_dense (&X, cc) ;
+    cholmod_l_free_dense (&B, cc) ;
+    cholmod_l_finish (cc) ;
+
+    return (0) ;
+}
diff --git a/SPQR/Demo/qrdemo_gpu2.cpp b/SPQR/Demo/qrdemo_gpu2.cpp
new file mode 100644
index 0000000..b8c1a23
--- /dev/null
+++ b/SPQR/Demo/qrdemo_gpu2.cpp
@@ -0,0 +1,106 @@
+// =============================================================================
+// === qrdemo_gpu2.cpp =========================================================
+// =============================================================================
+
+// A simple C++ demo of SuiteSparseQR.  The comments give the MATLAB equivalent
+// statements.  See also qrdemo.m
+//
+// usage:
+// qrdemo_gpu2 matrixfile orderingoption
+
+#include "SuiteSparseQR.hpp"
+#include "SuiteSparseGPU_Runtime.hpp"
+#include <complex>
+
+int main (int argc, char **argv)
+{
+    cholmod_sparse *A, *R ;
+    cholmod_dense *B, *C ;
+    SuiteSparse_long *E ;
+    int mtype ;
+    long m, n, rnk ;
+    size_t total_mem, available_mem ;
+    double t ;
+
+    // start CHOLMOD
+    cholmod_common *cc, Common ;
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    // warmup the GPU.  This can take some time, but only needs
+    // to be done once
+    cc->useGPU = true ;
+    t = SuiteSparse_time ( ) ;
+    cholmod_l_gpu_memorysize (&total_mem, &available_mem, cc) ;
+    cc->gpuMemorySize = available_mem ;
+    t = SuiteSparse_time ( ) - t ;
+    if (cc->gpuMemorySize <= 1)
+    {
+        printf ("no GPU available\n") ;
+    }
+    printf ("available GPU memory: %g MB, warmup time: %g\n",
+        (double) (cc->gpuMemorySize) / (1024 * 1024), t) ;
+
+    // A = mread (stdin) ; read in the sparse matrix A
+    const char *filename = argv[1];
+    FILE *file = fopen(filename, "r");
+    A = (cholmod_sparse *) cholmod_l_read_matrix (file, 1, &mtype, cc) ;
+    fclose(file);
+    if (mtype != CHOLMOD_SPARSE)
+    {
+        printf ("input matrix must be sparse\n") ;
+        exit (1) ;
+    }
+
+    // [m n] = size (A) ;
+    m = A->nrow ;
+    n = A->ncol ;
+
+    long ordering = (argc < 3 ? SPQR_ORDERING_DEFAULT : atoi(argv[2]));
+
+    printf ("Matrix %6ld-by-%-6ld nnz: %6ld\n",
+        m, n, cholmod_l_nnz (A, cc)) ;
+
+    // B = ones (m,1), a dense right-hand-side of the same type as A
+    B = cholmod_l_ones (m, 1, A->xtype, cc) ;
+
+    double tol = SPQR_NO_TOL ;
+    long econ = 0 ;
+
+    // [Q,R,E] = qr (A), but discard Q
+    // SuiteSparseQR <double> (ordering, tol, econ, A, &R, &E, cc) ;
+
+    // [C,R,E] = qr (A,b), but discard Q
+    SuiteSparseQR <double> (ordering, tol, econ, A, B, &C, &R, &E, cc) ;
+
+    // now R'*R-A(:,E)'*A(:,E) should be epsilon
+    // and C = Q'*b.  The solution to the least-squares problem
+    // should be x=R\C.
+
+    // write out R to a file
+    FILE *f = fopen ("R.mtx", "w") ;
+    cholmod_l_write_sparse (f, R, NULL, NULL, cc) ;
+    fclose (f) ;
+
+    // write out C to a file
+    f = fopen ("C.mtx", "w") ;
+    cholmod_l_write_dense (f, C, NULL, cc) ;
+    fclose (f) ;
+
+    // write out E to a file
+    f = fopen ("E.txt", "w") ;
+    for (long i = 0 ; i < n ; i++)
+    {
+        fprintf (f, "%ld\n", 1 + E [i]) ;
+    }
+    fclose (f) ;
+
+    // free everything
+    cholmod_l_free_sparse (&A, cc) ;
+    cholmod_l_free_sparse (&R, cc) ;
+    cholmod_l_free_dense  (&C, cc) ;
+    // cholmod_l_free (&E, cc) ;
+    cholmod_l_finish (cc) ;
+
+    return (0) ;
+}
diff --git a/SPQR/Demo/qrdemo_gpu3.cpp b/SPQR/Demo/qrdemo_gpu3.cpp
new file mode 100644
index 0000000..e5b8321
--- /dev/null
+++ b/SPQR/Demo/qrdemo_gpu3.cpp
@@ -0,0 +1,106 @@
+// =============================================================================
+// === qrdemo_gpu2.cpp =========================================================
+// =============================================================================
+
+// A simple C++ demo of SuiteSparseQR.  The comments give the MATLAB equivalent
+// statements.  See also qrdemo.m
+//
+// usage:
+// qrdemo_gpu2 matrixfile orderingoption
+
+#include "SuiteSparseQR.hpp"
+#include "SuiteSparseGPU_Runtime.hpp"
+#include <complex>
+
+int main (int argc, char **argv)
+{
+    cholmod_sparse *A, *R ;
+    cholmod_dense *B, *C ;
+    SuiteSparse_long *E ;
+    int mtype ;
+    long m, n, rnk ;
+    size_t total_mem, available_mem ;
+    double t ;
+
+    // start CHOLMOD
+    cholmod_common *cc, Common ;
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    // warmup the GPU.  This can take some time, but only needs
+    // to be done once
+    cc->useGPU = false ;
+    t = SuiteSparse_time ( ) ;
+    cholmod_l_gpu_memorysize (&total_mem, &available_mem, cc) ;
+    cc->gpuMemorySize = available_mem ;
+    t = SuiteSparse_time ( ) - t ;
+    if (cc->gpuMemorySize <= 1)
+    {
+        printf ("no GPU available\n") ;
+    }
+    printf ("available GPU memory: %g MB, warmup time: %g\n",
+        (double) (cc->gpuMemorySize) / (1024 * 1024), t) ;
+
+    // A = mread (stdin) ; read in the sparse matrix A
+    const char *filename = argv[1];
+    FILE *file = fopen(filename, "r");
+    A = (cholmod_sparse *) cholmod_l_read_matrix (file, 1, &mtype, cc) ;
+    fclose(file);
+    if (mtype != CHOLMOD_SPARSE)
+    {
+        printf ("input matrix must be sparse\n") ;
+        exit (1) ;
+    }
+
+    // [m n] = size (A) ;
+    m = A->nrow ;
+    n = A->ncol ;
+
+    long ordering = (argc < 3 ? SPQR_ORDERING_DEFAULT : atoi(argv[2]));
+
+    printf ("Matrix %6ld-by-%-6ld nnz: %6ld\n",
+        m, n, cholmod_l_nnz (A, cc)) ;
+
+    // B = ones (m,1), a dense right-hand-side of the same type as A
+    B = cholmod_l_ones (m, 1, A->xtype, cc) ;
+
+    double tol = SPQR_NO_TOL ;
+    long econ = 0 ;
+
+    // [Q,R,E] = qr (A), but discard Q
+    // SuiteSparseQR <double> (ordering, tol, econ, A, &R, &E, cc) ;
+
+    // [C,R,E] = qr (A,b), but discard Q
+    SuiteSparseQR <double> (ordering, tol, econ, A, B, &C, &R, &E, cc) ;
+
+    // now R'*R-A(:,E)'*A(:,E) should be epsilon
+    // and C = Q'*b.  The solution to the least-squares problem
+    // should be x=R\C.
+
+    // write out R to a file
+    FILE *f = fopen ("R.mtx", "w") ;
+    cholmod_l_write_sparse (f, R, NULL, NULL, cc) ;
+    fclose (f) ;
+
+    // write out C to a file
+    f = fopen ("C.mtx", "w") ;
+    cholmod_l_write_dense (f, C, NULL, cc) ;
+    fclose (f) ;
+
+    // write out E to a file
+    f = fopen ("E.txt", "w") ;
+    for (long i = 0 ; i < n ; i++)
+    {
+        fprintf (f, "%ld\n", 1 + E [i]) ;
+    }
+    fclose (f) ;
+
+    // free everything
+    cholmod_l_free_sparse (&A, cc) ;
+    cholmod_l_free_sparse (&R, cc) ;
+    cholmod_l_free_dense  (&C, cc) ;
+    // cholmod_l_free (&E, cc) ;
+    cholmod_l_finish (cc) ;
+
+    return (0) ;
+}
diff --git a/SPQR/Demo/qrdemo_out.txt b/SPQR/Demo/qrdemo_out.txt
new file mode 100644
index 0000000..53a69dd
--- /dev/null
+++ b/SPQR/Demo/qrdemo_out.txt
@@ -0,0 +1,146 @@
+./qrsimple < ../Matrix/ash219.mtx
+2-norm of residual:  3.8e-15
+rank 85
+./qrsimplec < ../Matrix/ash219.mtx
+2-norm of residual:  3.8e-15
+rank 85
+./qrsimple < ../Matrix/west0067.mtx
+2-norm of residual:  8.3e-15
+rank 67
+./qrsimplec < ../Matrix/west0067.mtx
+2-norm of residual:  8.3e-15
+rank 67
+./qrdemo < ../Matrix/a2.mtx
+Matrix      2-by-2      nnz:      3
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/r2.mtx
+Matrix      2-by-3      nnz:      4
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/a04.mtx
+Matrix      0-by-4      nnz:      0
+relative norm(Ax-b):  0.0e+00 rank:      0  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      0  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      0  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/a2.mtx
+Matrix      2-by-2      nnz:      3
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/west0067.mtx
+Matrix     67-by-67     nnz:    294
+relative norm(Ax-b):  5.1e-17 rank:     67  rel. norm(A'(Ax-b))  2.1e-15
+relative norm(Ax-b):  6.1e-17 rank:     67  rel. norm(A'(Ax-b))  2.8e-15
+relative norm(Ax-b):  5.7e-17 rank:     67  rel. norm(A'(Ax-b))  1.7e-13
+./qrdemo < ../Matrix/c2.mtx
+Matrix      2-by-2      nnz:      4
+relative norm(Ax-b):  1.7e-16 rank:      2  rel. norm(A'(Ax-b))  6.6e-15
+./qrdemo < ../Matrix/a0.mtx
+Matrix      0-by-0      nnz:      0
+relative norm(Ax-b):  0.0e+00 rank:      0  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      0  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      0  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/lfat5b.mtx
+Matrix     14-by-14     nnz:     46
+relative norm(Ax-b):  8.6e-17 rank:     14  rel. norm(A'(Ax-b))  3.0e-16
+relative norm(Ax-b):  1.3e-16 rank:     14  rel. norm(A'(Ax-b))  3.6e-16
+relative norm(Ax-b):  3.5e-17 rank:     14  rel. norm(A'(Ax-b))  4.0e-15
+./qrdemo < ../Matrix/bfwa62.mtx
+Matrix     62-by-62     nnz:    450
+relative norm(Ax-b):  6.4e-17 rank:     62  rel. norm(A'(Ax-b))  4.9e-14
+relative norm(Ax-b):  5.5e-17 rank:     62  rel. norm(A'(Ax-b))  4.8e-14
+relative norm(Ax-b):  4.4e-17 rank:     62  rel. norm(A'(Ax-b))  7.6e-13
+./qrdemo < ../Matrix/LFAT5.mtx
+Matrix     14-by-14     nnz:     46
+relative norm(Ax-b):  5.7e-22 rank:     14  rel. norm(A'(Ax-b))  6.6e-16
+relative norm(Ax-b):  5.7e-22 rank:     14  rel. norm(A'(Ax-b))  6.6e-16
+relative norm(Ax-b):  3.7e-21 rank:     14  rel. norm(A'(Ax-b))  3.0e-15
+./qrdemo < ../Matrix/b1_ss.mtx
+Matrix      7-by-7      nnz:     15
+relative norm(Ax-b):  7.3e-18 rank:      7  rel. norm(A'(Ax-b))  1.1e-15
+relative norm(Ax-b):  8.2e-18 rank:      7  rel. norm(A'(Ax-b))  1.3e-15
+relative norm(Ax-b):  3.2e-17 rank:      7  rel. norm(A'(Ax-b))  1.3e-15
+./qrdemo < ../Matrix/bcspwr01.mtx
+Matrix     39-by-39     nnz:    131
+relative norm(Ax-b):  5.7e-17 rank:     39  rel. norm(A'(Ax-b))  6.2e-16
+relative norm(Ax-b):  8.0e-17 rank:     39  rel. norm(A'(Ax-b))  1.0e-15
+relative norm(Ax-b):  6.0e-17 rank:     39  rel. norm(A'(Ax-b))  3.4e-14
+./qrdemo < ../Matrix/lpi_galenet.mtx
+Matrix      8-by-14     nnz:     22
+relative norm(Ax-b):  0.0e+00 rank:      8  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      8  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:      8  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/lpi_itest6.mtx
+Matrix     11-by-17     nnz:     29
+relative norm(Ax-b):  0.0e+00 rank:     11  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:     11  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  0.0e+00 rank:     11  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/ash219.mtx
+Matrix    219-by-85     nnz:    438
+relative norm(Ax-b):  3.8e-15 rank:     85  rel. norm(A'(Ax-b))  9.8e-16
+relative norm(Ax-b):  4.6e-15 rank:     85  rel. norm(A'(Ax-b))  1.3e-15
+relative norm(Ax-b):  1.7e+02 rank:     85  rel. norm(A'(Ax-b))  1.5e-13
+./qrdemo < ../Matrix/a4.mtx
+Matrix      4-by-2      nnz:      4
+relative norm(Ax-b):  1.4e+00 rank:      2  rel. norm(A'(Ax-b))  2.6e-16
+relative norm(Ax-b):  1.4e+00 rank:      2  rel. norm(A'(Ax-b))  2.6e-16
+relative norm(Ax-b):  3.6e+00 rank:      2  rel. norm(A'(Ax-b))  2.1e-16
+./qrdemo < ../Matrix/s32.mtx
+Matrix      3-by-2      nnz:      6
+relative norm(Ax-b):  1.1e-02 rank:      2  rel. norm(A'(Ax-b))  8.7e-17
+relative norm(Ax-b):  1.1e-02 rank:      2  rel. norm(A'(Ax-b))  8.7e-17
+relative norm(Ax-b):  1.4e-02 rank:      2  rel. norm(A'(Ax-b))  2.1e-16
+./qrdemo < ../Matrix/c32.mtx
+Matrix      3-by-2      nnz:      6
+relative norm(Ax-b):  1.9e-01 rank:      2  rel. norm(A'(Ax-b))  6.5e-16
+./qrdemo < ../Matrix/lp_share1b.mtx
+Matrix    117-by-253    nnz:   1179
+relative norm(Ax-b):  7.2e-20 rank:    117  rel. norm(A'(Ax-b))  4.9e-12
+relative norm(Ax-b):  1.2e-19 rank:    117  rel. norm(A'(Ax-b))  1.3e-11
+relative norm(Ax-b):  8.9e-20 rank:    117  rel. norm(A'(Ax-b))  2.6e-10
+./qrdemo < ../Matrix/a1.mtx
+Matrix      4-by-4      nnz:      7
+relative norm(Ax-b):  6.1e-01 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  6.1e-01 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+relative norm(Ax-b):  1.4e+00 rank:      2  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/GD06_theory.mtx
+Matrix    101-by-101    nnz:    380
+relative norm(Ax-b):  7.2e-02 rank:     20  rel. norm(A'(Ax-b))  8.3e-16
+relative norm(Ax-b):  7.2e-02 rank:     20  rel. norm(A'(Ax-b))  4.7e-16
+relative norm(Ax-b):  7.3e-02 rank:     20  rel. norm(A'(Ax-b))  4.4e-14
+./qrdemo < ../Matrix/GD01_b.mtx
+Matrix     18-by-18     nnz:     37
+relative norm(Ax-b):  7.9e-17 rank:     17  rel. norm(A'(Ax-b))  1.4e-16
+relative norm(Ax-b):  1.8e-16 rank:     17  rel. norm(A'(Ax-b))  8.3e-16
+relative norm(Ax-b):  9.9e-03 rank:     17  rel. norm(A'(Ax-b))  8.9e-15
+./qrdemo < ../Matrix/Tina_AskCal_perm.mtx
+Matrix     11-by-11     nnz:     29
+relative norm(Ax-b):  3.8e-17 rank:      9  rel. norm(A'(Ax-b))  1.6e-16
+relative norm(Ax-b):  5.0e-17 rank:      9  rel. norm(A'(Ax-b))  9.0e-17
+relative norm(Ax-b):  1.7e-02 rank:      9  rel. norm(A'(Ax-b))  5.1e-16
+./qrdemo < ../Matrix/Tina_AskCal.mtx
+Matrix     11-by-11     nnz:     29
+relative norm(Ax-b):  3.7e-17 rank:      9  rel. norm(A'(Ax-b))  1.4e-16
+relative norm(Ax-b):  5.0e-17 rank:      9  rel. norm(A'(Ax-b))  9.0e-17
+relative norm(Ax-b):  3.1e-02 rank:      9  rel. norm(A'(Ax-b))  0.0e+00
+./qrdemo < ../Matrix/GD98_a.mtx
+Matrix     38-by-38     nnz:     50
+relative norm(Ax-b):  2.4e-01 rank:     14  rel. norm(A'(Ax-b))  3.2e-17
+relative norm(Ax-b):  2.4e-01 rank:     14  rel. norm(A'(Ax-b))  3.2e-17
+relative norm(Ax-b):  2.2e-01 rank:     14  rel. norm(A'(Ax-b))  1.0e-15
+./qrdemo < ../Matrix/Ragusa16.mtx
+Matrix     24-by-24     nnz:     81
+relative norm(Ax-b):  2.1e-02 rank:     18  rel. norm(A'(Ax-b))  1.5e-16
+relative norm(Ax-b):  2.1e-02 rank:     18  rel. norm(A'(Ax-b))  1.5e-16
+relative norm(Ax-b):  1.5e-02 rank:     18  rel. norm(A'(Ax-b))  4.3e-15
+./qrdemo < ../Matrix/young1c.mtx
+Matrix    841-by-841    nnz:   4089
+relative norm(Ax-b):  2.1e-16 rank:    841  rel. norm(A'(Ax-b))  7.6e-14
+./qrdemo < ../Matrix/lp_e226_transposed.mtx
+Matrix    472-by-223    nnz:   2768
+relative norm(Ax-b):  9.2e+00 rank:    223  rel. norm(A'(Ax-b))  1.1e-13
+relative norm(Ax-b):  9.2e+00 rank:    223  rel. norm(A'(Ax-b))  1.2e-13
+relative norm(Ax-b):  2.0e+03 rank:    223  rel. norm(A'(Ax-b))  1.5e-11
diff --git a/SPQR/Demo/qrdemoc.c b/SPQR/Demo/qrdemoc.c
new file mode 100644
index 0000000..c95918e
--- /dev/null
+++ b/SPQR/Demo/qrdemoc.c
@@ -0,0 +1,80 @@
+/* ========================================================================== */
+/* === qrdemo.c ============================================================= */
+/* ========================================================================== */
+
+/* A simple C demo of SuiteSparseQR.  The comments give the MATLAB equivalent
+   statements.  See also qrdemo.m
+ */
+
+#include "SuiteSparseQR_C.h"
+
+/* SuiteSparseQR uses an integer defined in SuiteSparse_config.h called
+ * SuiteSparse_long.  It is a 32-bit integer on a 32-bit platform, and a 64-bit
+ * integer on a 64-bit platform.  For most platforms (except Windows),
+ * SuiteSparse_long is just "long". */
+
+#define Long SuiteSparse_long
+
+int main (int argc, char **argv)
+{
+    cholmod_common Common, *cc ;
+    cholmod_sparse *A ;
+    cholmod_dense *X, *B, *Residual ;
+    double anorm, xnorm, rnorm, one [2] = {1,0}, minusone [2] = {-1,0} ;
+    int mtype ;
+    Long m, n, rnk ;
+
+    /* start CHOLMOD */
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    /* A = mread (stdin) ; read in the sparse matrix A */
+    A = (cholmod_sparse *) cholmod_l_read_matrix (stdin, 1, &mtype, cc) ;
+    if (mtype != CHOLMOD_SPARSE)
+    {
+        printf ("input matrix must be sparse\n") ;
+        exit (1) ;
+    }
+
+    /* [m n] = size (A) ; */
+    m = A->nrow ;
+    n = A->ncol ;
+
+    /* anorm = norm (A,1) ; */
+    anorm = cholmod_l_norm_sparse (A, 1, cc) ;
+
+    printf ("Matrix %6ld-by-%-6ld nnz: %6ld ", m, n, cholmod_l_nnz (A, cc)) ;
+
+    /* B = ones (m,1), a dense right-hand-side of the same type as A */
+    B = cholmod_l_ones (m, 1, A->xtype, cc) ;
+
+    /* X = A\B ; with default ordering and default column 2-norm tolerance */
+    X = SuiteSparseQR_C_backslash
+        (SPQR_ORDERING_DEFAULT, SPQR_DEFAULT_TOL, A, B, cc) ;
+
+    /* get the rank(A) estimate */
+    rnk = cc->SPQR_istat [4] ;
+
+    /* rnorm = norm (A*X-B) */
+    Residual = cholmod_l_copy_dense (B, cc) ;
+    cholmod_l_sdmult (A, 0, one, minusone, X, Residual, cc) ;
+    rnorm = cholmod_l_norm_dense (Residual, 2, cc) ;
+
+    /* xnorm = norm (X) */
+    xnorm = cholmod_l_norm_dense (X, 2, cc) ;
+
+    if (m <= n && anorm > 0 && xnorm > 0)
+    {
+        /* find the relative residual, except for least-squares systems */
+        rnorm /= (anorm * xnorm) ;
+    }
+    printf ("residual: %8.1e rank: %6ld\n", rnorm, rnk) ;
+
+    /* free everything */
+    cholmod_l_free_dense (&Residual, cc) ;
+    cholmod_l_free_sparse (&A, cc) ;
+    cholmod_l_free_dense (&X, cc) ;
+    cholmod_l_free_dense (&B, cc) ;
+    cholmod_l_finish (cc) ;
+    return (0) ;
+}
diff --git a/SPQR/Demo/qrdemoc_out.txt b/SPQR/Demo/qrdemoc_out.txt
new file mode 100644
index 0000000..7765c91
--- /dev/null
+++ b/SPQR/Demo/qrdemoc_out.txt
@@ -0,0 +1,56 @@
+./qrdemoc < ../Matrix/a2.mtx
+Matrix      2-by-2      nnz:      3 residual:  0.0e+00 rank:      2
+./qrdemoc < ../Matrix/r2.mtx
+Matrix      2-by-3      nnz:      4 residual:  0.0e+00 rank:      2
+./qrdemoc < ../Matrix/a04.mtx
+Matrix      0-by-4      nnz:      0 residual:  0.0e+00 rank:      0
+./qrdemoc < ../Matrix/a2.mtx
+Matrix      2-by-2      nnz:      3 residual:  0.0e+00 rank:      2
+./qrdemoc < ../Matrix/west0067.mtx
+Matrix     67-by-67     nnz:    294 residual:  5.1e-17 rank:     67
+./qrdemoc < ../Matrix/c2.mtx
+Matrix      2-by-2      nnz:      4 residual:  1.7e-16 rank:      2
+./qrdemoc < ../Matrix/a0.mtx
+Matrix      0-by-0      nnz:      0 residual:  0.0e+00 rank:      0
+./qrdemoc < ../Matrix/lfat5b.mtx
+Matrix     14-by-14     nnz:     46 residual:  8.6e-17 rank:     14
+./qrdemoc < ../Matrix/bfwa62.mtx
+Matrix     62-by-62     nnz:    450 residual:  6.4e-17 rank:     62
+./qrdemoc < ../Matrix/LFAT5.mtx
+Matrix     14-by-14     nnz:     46 residual:  5.7e-22 rank:     14
+./qrdemoc < ../Matrix/b1_ss.mtx
+Matrix      7-by-7      nnz:     15 residual:  7.3e-18 rank:      7
+./qrdemoc < ../Matrix/bcspwr01.mtx
+Matrix     39-by-39     nnz:    131 residual:  5.7e-17 rank:     39
+./qrdemoc < ../Matrix/lpi_galenet.mtx
+Matrix      8-by-14     nnz:     22 residual:  0.0e+00 rank:      8
+./qrdemoc < ../Matrix/lpi_itest6.mtx
+Matrix     11-by-17     nnz:     29 residual:  0.0e+00 rank:     11
+./qrdemoc < ../Matrix/ash219.mtx
+Matrix    219-by-85     nnz:    438 residual:  3.8e-15 rank:     85
+./qrdemoc < ../Matrix/a4.mtx
+Matrix      4-by-2      nnz:      4 residual:  1.4e+00 rank:      2
+./qrdemoc < ../Matrix/s32.mtx
+Matrix      3-by-2      nnz:      6 residual:  1.1e-02 rank:      2
+./qrdemoc < ../Matrix/c32.mtx
+Matrix      3-by-2      nnz:      6 residual:  1.9e-01 rank:      2
+./qrdemoc < ../Matrix/lp_share1b.mtx
+Matrix    117-by-253    nnz:   1179 residual:  7.2e-20 rank:    117
+./qrdemoc < ../Matrix/a1.mtx
+Matrix      4-by-4      nnz:      7 residual:  6.1e-01 rank:      2
+./qrdemoc < ../Matrix/GD06_theory.mtx
+Matrix    101-by-101    nnz:    380 residual:  7.2e-02 rank:     20
+./qrdemoc < ../Matrix/GD01_b.mtx
+Matrix     18-by-18     nnz:     37 residual:  7.9e-17 rank:     17
+./qrdemoc < ../Matrix/Tina_AskCal_perm.mtx
+Matrix     11-by-11     nnz:     29 residual:  3.8e-17 rank:      9
+./qrdemoc < ../Matrix/Tina_AskCal.mtx
+Matrix     11-by-11     nnz:     29 residual:  3.7e-17 rank:      9
+./qrdemoc < ../Matrix/GD98_a.mtx
+Matrix     38-by-38     nnz:     50 residual:  2.4e-01 rank:     14
+./qrdemoc < ../Matrix/Ragusa16.mtx
+Matrix     24-by-24     nnz:     81 residual:  2.1e-02 rank:     18
+./qrdemoc < ../Matrix/young1c.mtx
+Matrix    841-by-841    nnz:   4089 residual:  2.1e-16 rank:    841
+./qrdemoc < ../Matrix/lp_e226_transposed.mtx
+Matrix    472-by-223    nnz:   2768 residual:  9.2e+00 rank:    223
diff --git a/SPQR/Demo/qrsimple.cpp b/SPQR/Demo/qrsimple.cpp
new file mode 100644
index 0000000..27330cc
--- /dev/null
+++ b/SPQR/Demo/qrsimple.cpp
@@ -0,0 +1,45 @@
+// =============================================================================
+// === qrsimple.cpp ============================================================
+// =============================================================================
+
+// A very simple example of the use of SuiteSparseQR by a C++ main program.
+// Usage:  qrsimple < Matrix_in_MatrixMarket_format
+
+#include "SuiteSparseQR.hpp"
+int main (int argc, char **argv)
+{
+    cholmod_common Common, *cc ;
+    cholmod_sparse *A ;
+    cholmod_dense *X, *B, *Residual ;
+    double rnorm, one [2] = {1,0}, minusone [2] = {-1,0} ;
+    int mtype ;
+
+    // start CHOLMOD
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    // load A
+    A = (cholmod_sparse *)
+        cholmod_l_read_matrix (stdin, 1, &mtype, cc) ;
+
+    // B = ones (size (A,1),1)
+    B = cholmod_l_ones (A->nrow, 1, A->xtype, cc) ;
+
+    // X = A\B
+    X = SuiteSparseQR <double> (A, B, cc) ;
+
+    // rnorm = norm (B-A*X)
+    Residual = cholmod_l_copy_dense (B, cc) ;
+    cholmod_l_sdmult (A, 0, minusone, one, X, Residual, cc) ;
+    rnorm = cholmod_l_norm_dense (Residual, 2, cc) ;
+    printf ("2-norm of residual: %8.1e\n", rnorm) ;
+    printf ("rank %ld\n", cc->SPQR_istat [4]) ;
+
+    // free everything and finish CHOLMOD
+    cholmod_l_free_dense (&Residual, cc) ;
+    cholmod_l_free_sparse (&A, cc) ;
+    cholmod_l_free_dense (&X, cc) ;
+    cholmod_l_free_dense (&B, cc) ;
+    cholmod_l_finish (cc) ;
+    return (0) ;
+}
diff --git a/SPQR/Demo/qrsimplec.c b/SPQR/Demo/qrsimplec.c
new file mode 100644
index 0000000..4596bb9
--- /dev/null
+++ b/SPQR/Demo/qrsimplec.c
@@ -0,0 +1,45 @@
+/* ========================================================================== */
+/* === qrsimplec.c ========================================================== */
+/* ========================================================================== */
+
+/* A very simple example of the use of SuiteSparseQR by a C main program.
+   Usage:  qrsimplec < Matrix_in_MatrixMarket_format */
+
+#include "SuiteSparseQR_C.h"
+int main (int argc, char **argv)
+{
+    cholmod_common Common, *cc ;
+    cholmod_sparse *A ;
+    cholmod_dense *X, *B, *Residual ;
+    double rnorm, one [2] = {1,0}, minusone [2] = {-1,0} ;
+    int mtype ;
+
+    /* start CHOLMOD */
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+
+    /* load A */
+    A = (cholmod_sparse *)
+        cholmod_l_read_matrix (stdin, 1, &mtype, cc) ;
+
+    /* B = ones (size (A,1),1) */
+    B = cholmod_l_ones (A->nrow, 1, A->xtype, cc) ;
+
+    /* X = A\B */
+    X = SuiteSparseQR_C_backslash_default (A, B, cc) ;
+
+    /* rnorm = norm (B-A*X) */
+    Residual = cholmod_l_copy_dense (B, cc) ;
+    cholmod_l_sdmult (A, 0, minusone, one, X, Residual, cc) ;
+    rnorm = cholmod_l_norm_dense (Residual, 2, cc) ;
+    printf ("2-norm of residual: %8.1e\n", rnorm) ;
+    printf ("rank %ld\n", cc->SPQR_istat [4]) ;
+
+    /* free everything and finish CHOLMOD */
+    cholmod_l_free_dense (&Residual, cc) ;
+    cholmod_l_free_sparse (&A, cc) ;
+    cholmod_l_free_dense (&X, cc) ;
+    cholmod_l_free_dense (&B, cc) ;
+    cholmod_l_finish (cc) ;
+    return (0) ;
+}
diff --git a/SPQR/Demo/spqr_gpu.m b/SPQR/Demo/spqr_gpu.m
new file mode 100644
index 0000000..60788b0
--- /dev/null
+++ b/SPQR/Demo/spqr_gpu.m
@@ -0,0 +1,81 @@
+function info = spqr_gpu (ordering, A)
+% info = spqr_gpu (ordering)
+%   ordering: 1 colamd
+%   ordering: 2 metis
+
+if (nargin > 1)
+    % write the matrix to a file
+    mwrite ('A.mtx', A) ;
+end
+
+if (exist ('gpu_results.txt', 'file'))
+    delete ('gpu_results.txt') ;
+end
+
+setenv('LD_LIBRARY_PATH', '/usr/local/cuda/lib64:/usr/lib:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/lib64')
+if (ordering == 1)
+    system ('tcsh demo_colamd.sh') ;
+else
+    system ('tcsh demo_metis.sh') ;
+end
+
+load ('gpu_results.txt') ;
+% delete ('gpu_results.txt') ;
+
+[m n] = size (A) ;
+B = ones (m,1) ;
+X = mread ('X.mtx') ;
+
+r = A*X-B ;
+atr = A'*r ;
+atanorm = norm (A'*A,1) ;
+atrnorm = norm (atr) / atanorm ;
+fprintf ('relative norm (A''*(A*x-b)): %g\n', atrnorm) ;
+
+% qrdemo_gpu.cpp writes the following:
+%
+%   fprintf(info, "%ld\n", cc->SPQR_istat[7]);        // ordering method
+%   fprintf(info, "%ld\n", cc->memory_usage);         // memory usage (bytes)
+%   fprintf(info, "%30.16e\n", cc->SPQR_flopcount);   // flop count
+%   fprintf(info, "%lf\n", cc->SPQR_analyze_time);    // analyze time
+%   fprintf(info, "%lf\n", cc->SPQR_factorize_time);  // factorize time
+%   fprintf(info, "-1\n") ;                           // cpu memory (bytes)
+%   fprintf(info, "-1\n") ;                           // gpu memory (bytes)
+%   fprintf(info, "%8.1e\n", rnorm);                  // residual
+%   fprintf(info, "%ld\n", cholmod_l_nnz (A, cc));    // nnz(A)
+%   fprintf(info, "%ld\n", cc->SPQR_istat [0]);       // nnz(R)
+%   fprintf(info, "%ld\n", cc->SPQR_istat [2]);       // # of frontal matrices
+%   fprintf(info, "%ld\n", cc->SPQR_istat [3]);       // ntasks, for now
+%   fprintf(info, "%lf\n", cc->gpuKernelTime);        // kernel time (ms)
+%   fprintf(info, "%ld\n", cc->gpuFlops);             // "actual" gpu flops
+%   fprintf(info, "%d\n", cc->gpuNumKernelLaunches);  // # of kernel launches
+%   fprintf(info, "%8.1e\n", atrnorm);                // norm (A'*(Ax-b))
+
+info.ordering              = gpu_results (1) ;
+info.memory_usage_in_bytes = gpu_results (2) ;
+info.flops                 = gpu_results (3) ;
+info.analyze_time          = gpu_results (4) ;
+info.factorize_time        = gpu_results (5) ;
+info.cpuWatermark          = gpu_results (6) ;
+info.gpuWatermark          = gpu_results (7) ;
+info.resid                 = gpu_results (8) ;
+info.nnzA                  = gpu_results (9) ;
+info.nnzR                  = gpu_results (10) ;
+info.numFronts             = gpu_results (11) ;
+info.numTasks              = gpu_results (12) ;
+info.kerneltime            = gpu_results (13) ;
+info.gpuFlops              = gpu_results (14) ;
+info.kernellaunches        = gpu_results (15) ;
+info.atrnorm               = gpu_results (16) / atanorm ;
+
+% /* ordering options */
+%   #define SPQR_ORDERING_FIXED 0
+%   #define SPQR_ORDERING_NATURAL 1
+%   #define SPQR_ORDERING_COLAMD 2
+%   #define SPQR_ORDERING_GIVEN 3       /* only used for C/C++ interface */
+%   #define SPQR_ORDERING_CHOLMOD 4     /* CHOLMOD best-effort (COLAMD, METIS,...)*/
+%   #define SPQR_ORDERING_AMD 5         /* AMD(A'*A) */
+%   #define SPQR_ORDERING_METIS 6       /* metis(A'*A) */
+%   #define SPQR_ORDERING_DEFAULT 7     /* SuiteSparseQR default ordering */
+%   #define SPQR_ORDERING_BEST 8        /* try COLAMD, AMD, and METIS; pick best */
+%   #define SPQR_ORDERING_BESTAMD 9     /* try COLAMD and AMD; pick best */
diff --git a/SPQR/Demo/spqr_gpu2.m b/SPQR/Demo/spqr_gpu2.m
new file mode 100644
index 0000000..d15323b
--- /dev/null
+++ b/SPQR/Demo/spqr_gpu2.m
@@ -0,0 +1,76 @@
+function [C,R,E,B,X, err] = spqr_gpu2 (ordering, A)
+% info = spqr_gpu2 (ordering,A)
+%   ordering: 1 colamd
+%   ordering: 2 metis
+
+% write the matrix to a file
+mwrite ('A.mtx', A) ;
+
+if (exist ('R.mtx','file'))
+    delete ('R.mtx') ;
+end
+if (exist ('C.mtx','file'))
+    delete ('C.mtx') ;
+end
+if (exist ('E.txt','file'))
+    delete ('E.txt') ;
+end
+
+setenv('LD_LIBRARY_PATH', '/usr/local/cuda/lib64:/usr/lib:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/lib64')
+if (ordering == 1)
+    system ('tcsh demo_colamd2.sh') ;
+else
+    system ('tcsh demo_metis2.sh') ;
+end
+
+atanorm = norm (A'*A,1) ;
+
+[m n] = size (A) ;
+R = mread ('R.mtx') ;
+C = mread ('C.mtx') ;
+B = ones (m,1) ;
+E = load ('E.txt') ;
+S = A (:,E) ;
+err (1) = norm (R'*R - S'*S, 1) / atanorm  ;
+X = R\C ;
+X (E) = X ;
+
+[C2, R2] = qr (S, B, 0) ;
+whos
+err (2) = norm (R2'*R2 - S'*S, 1) / atanorm ;
+X2 = R2\C2 ;
+X2 (E) = X2 ;
+err (3) = norm (X-X2) / norm (X2) ;
+
+x = A\B ;
+err (4) = norm (A'*(A*x-B))  / atanorm ;
+err (5) = norm (A'*(A*X-B))  / atanorm ;
+err (6) = norm (A'*(A*X2-B)) / atanorm ;
+
+
+% normalize the diagonal of R
+e = spdiags (sign (full (diag (R))), 0, n, n) ;
+R = e*R ;
+err (7) = norm (R'*R - S'*S, 1) / atanorm ;
+
+e = spdiags (sign (full (diag (R2))), 0, n, n) ;
+R2 = e*R2 ;
+err (8) = norm (R2'*R2 - S'*S, 1) / atanorm ;
+
+
+% err
+% log10(err)
+
+fprintf ('1: GPU    norm(R''R-S''S)               %12.4e\n', err (1)) ;
+fprintf ('2: matlab norm(R''R-S''S)               %12.4e\n', err (2)) ;
+fprintf ('3: GPU vs matlab norm (X-X2)/norm(X)  %12.4e\n', err (3)) ;
+fprintf ('4: x=A\\b norm(A''(Ax-b))/norm(A''A)     %12.4e\n', err (4)) ;
+fprintf ('5: GPU    norm(A''(Ax-b))/norm(A''A)    %12.4e\n', err (5)) ;
+fprintf ('6: matlab norm(A''(Ax-b))/norm(A''A)    %12.4e\n', err (6)) ;
+fprintf ('7: GPU    norm(R''R-S''S) nonneg        %12.4e\n', err (7)) ;
+fprintf ('8: matlab norm(R''R-S''S) nonneg        %12.4e\n', err (8)) ;
+fprintf ('\n-------------------------------------------------------\n') ;
+
+if (err (2) > 1e-10 || err (5) > max (1e-12, 1e3 * err (4)))
+    warning ('!')
+end
diff --git a/SPQR/Demo/spqr_gpu3.m b/SPQR/Demo/spqr_gpu3.m
new file mode 100644
index 0000000..7588a1a
--- /dev/null
+++ b/SPQR/Demo/spqr_gpu3.m
@@ -0,0 +1,76 @@
+function [C,R,E,B,X, err] = spqr_gpu3 (ordering, A)
+% info = spqr_gpu2 (ordering,A)
+%   ordering: 1 colamd
+%   ordering: 2 metis
+
+% write the matrix to a file
+mwrite ('A.mtx', A) ;
+
+if (exist ('R.mtx','file'))
+    delete ('R.mtx') ;
+end
+if (exist ('C.mtx','file'))
+    delete ('C.mtx') ;
+end
+if (exist ('E.txt','file'))
+    delete ('E.txt') ;
+end
+
+setenv('LD_LIBRARY_PATH', '/usr/local/cuda/lib64:/usr/lib:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/lib64')
+if (ordering == 1)
+    system ('tcsh demo_colamd3.sh') ;
+else
+    system ('tcsh demo_metis3.sh') ;
+end
+
+atanorm = norm (A'*A,1) ;
+
+[m n] = size (A) ;
+R = mread ('R.mtx') ;
+C = mread ('C.mtx') ;
+B = ones (m,1) ;
+E = load ('E.txt') ;
+S = A (:,E) ;
+err (1) = norm (R'*R - S'*S, 1) / atanorm  ;
+X = R\C ;
+X (E) = X ;
+
+[C2, R2] = qr (S, B, 0) ;
+whos
+err (2) = norm (R2'*R2 - S'*S, 1) / atanorm ;
+X2 = R2\C2 ;
+X2 (E) = X2 ;
+err (3) = norm (X-X2) / norm (X2) ;
+
+x = A\B ;
+err (4) = norm (A'*(A*x-B))  / atanorm ;
+err (5) = norm (A'*(A*X-B))  / atanorm ;
+err (6) = norm (A'*(A*X2-B)) / atanorm ;
+
+
+% normalize the diagonal of R
+e = spdiags (sign (full (diag (R))), 0, n, n) ;
+R = e*R ;
+err (7) = norm (R'*R - S'*S, 1) / atanorm ;
+
+e = spdiags (sign (full (diag (R2))), 0, n, n) ;
+R2 = e*R2 ;
+err (8) = norm (R2'*R2 - S'*S, 1) / atanorm ;
+
+
+% err
+% log10(err)
+
+fprintf ('1: GPU    norm(R''R-S''S)               %12.4e\n', err (1)) ;
+fprintf ('2: matlab norm(R''R-S''S)               %12.4e\n', err (2)) ;
+fprintf ('3: GPU vs matlab norm (X-X2)/norm(X)  %12.4e\n', err (3)) ;
+fprintf ('4: x=A\\b norm(A''(Ax-b))/norm(A''A)     %12.4e\n', err (4)) ;
+fprintf ('5: GPU    norm(A''(Ax-b))/norm(A''A)    %12.4e\n', err (5)) ;
+fprintf ('6: matlab norm(A''(Ax-b))/norm(A''A)    %12.4e\n', err (6)) ;
+fprintf ('7: GPU    norm(R''R-S''S) nonneg        %12.4e\n', err (7)) ;
+fprintf ('8: matlab norm(R''R-S''S) nonneg        %12.4e\n', err (8)) ;
+fprintf ('\n-------------------------------------------------------\n') ;
+
+if (err (2) > 1e-10 || err (5) > max (1e-12, 1e3 * err (4)))
+    warning ('!')
+end
diff --git a/SPQR/Doc/ChangeLog b/SPQR/Doc/ChangeLog
new file mode 100644
index 0000000..467d30e
--- /dev/null
+++ b/SPQR/Doc/ChangeLog
@@ -0,0 +1,85 @@
+Oct 17, 2014: version 2.0.0
+
+    * MAJOR UPDATE:  added GPU support.  Up to 11x faster than CPU version.
+
+July 18, 2014: version 1.3.3
+
+    * minor change to SPQR/Demo/Makefile, for the case when CHOLMOD is compiled
+        with the GPU.  No changes to the SPQR library code itself.
+
+Aug 22, 2013: version 1.3.2
+
+    * changed malloc, printf, hypot, and divcomplex pointers to use
+        SuiteSparse_config
+
+Jun 20, 2012: verison 1.3.1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 1.3.0
+
+    * changed from UFconfig to SuiteSparse_config
+    * removed -DTIMING option.  Timing is now enabled by default.
+    * added SuiteSparse_tic, SuiteSparse_toc, SuiteSparse_time timing functions
+    * spqr_time removed (use SuiteSparse_time instead)
+
+Dec 7, 2011: version 1.2.3
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * minor fix to SPQR/MATLAB/spqr_make.m
+    * Makefile now detects whether or not METIS is present, and
+        sets -DNPARTITION if it is not
+
+May 10, 2011: version 1.2.2
+
+    * minor fix to SPQR/Include/SuiteSparseQR_C.h to accomodate the mixing
+        of C/C++ with a particular compiler  
+
+Jan 25, 2011: version 1.2.1
+
+    * minor fix to "make install"
+    * added more examples to SPRQ/Demo/qrdemo.cpp
+    * fixed error-condition return value for Source/SuiteSparseQR.cpp
+    * minor fix to SPQR/Tcov/qrtest.cpp
+
+Nov 30, 2009: version 1.2.0
+
+    * fixed interface to 64-bit BLAS for MATLAB 7.8
+    * added "make install" and "make uninstall"
+    * added info struct output to spqr mexFunction
+    * added 2-norm of w statistic
+    * changed default ordering back to always use COLAMD.  Default in v1.1.2
+        and v1.1.1 was to use COLAMD if m < 2*n and use AMD(A'A)
+        or METIS(A'A) otherwise.
+
+May 1, 2009, version 1.1.2
+
+    * added more examples to user guide and to spqr.m
+    * removed "static" declaration of functions in Source/* files.  This
+	corrects a problem with the Mac OS compiler.
+
+Mar 24, 2009, version 1.1.1
+
+    * #include <cstring> added to SPQR/Include/spqr.hpp, required
+        by gcc 4.3.2 (but not needed by gcc 4.1.0 or other compilers...).
+
+Sept 20, 2008, version 1.1.0
+
+    * No bugs fixed since no known bugs were present in v1.0.0
+    * Added new ordering options, in particular the default ordering:
+        - COLAMD if m <= 2*n after removing singletons; otherwise:
+          AMD then try METIS if installed and if AMD gives a high fill-in
+          and flop count.
+    * User Guide, and two draft journal articles (to be submitted to ACM TOMS)
+           in the SPQR/Doc directory.
+    * Added control of the # of threads used by TBB (it was set
+	to the TBB default in version 1.0.0).
+    * Additional demos.
+    * Added -DTIMING option, and additional components to info output
+    * Added spqr_singletons mexFunction
+    * Modified example in comments of spqr_assemble.cpp to coincide with article
+
+Aug 21, 2008
+
+    * version 1.0.0
+
diff --git a/SPQR/Doc/Makefile b/SPQR/Doc/Makefile
new file mode 100644
index 0000000..3aeea7c
--- /dev/null
+++ b/SPQR/Doc/Makefile
@@ -0,0 +1,11 @@
+spqr_user_guide.pdf: spqr_user_guide.tex spqr_user_guide.bib Makefile
+	pdflatex spqr_user_guide.tex
+	bibtex spqr_user_guide
+	pdflatex spqr_user_guide.tex
+	pdflatex spqr_user_guide.tex
+	- $(RM) *.aux *.bbl *.blg *.log *.out
+
+clean: purge
+
+purge:
+	- $(RM) *.aux *.bbl *.blg *.log *.out
diff --git a/SPQR/Doc/README.txt b/SPQR/Doc/README.txt
new file mode 100644
index 0000000..1d6e836
--- /dev/null
+++ b/SPQR/Doc/README.txt
@@ -0,0 +1,34 @@
+SPQR/Doc directory for SuiteSparseQR
+
+Please read the spqr_user_guide.pdf first.
+
+For additional documentation of the MATLAB user interface, type:
+
+    help spqr
+    help spqr_solve
+    help spqr_qmult
+    help spqr_singletons
+
+in the MATLAB Command Window.
+
+Files in this directory:
+
+ChangeLog                   changes since first release
+
+gpl.txt                     the GNU GPL license
+
+spqr_user_guide.pdf         User Guide; start here
+spqr.pdf                    Algorithm/Theory technical report
+algo_spqr.pdf               examples of use
+qrgpu_paper.pdf             a tech report on the GPU algorithm
+
+Makefile                    for creating the user guide
+spqr_user_guide.bib
+spqr_user_guide.tex
+
+README.txt                  this file
+
+Timothy A. Davis, http://www.suitesparse.com
+
+GPU acceleration in collaboration with Nuri Yeralan and
+Sanjay Ranka.
diff --git a/SPQR/Doc/algo_spqr.pdf b/SPQR/Doc/algo_spqr.pdf
new file mode 100644
index 0000000..53f5996
Binary files /dev/null and b/SPQR/Doc/algo_spqr.pdf differ
diff --git a/SSMULT/gpl.txt b/SPQR/Doc/gpl.txt
similarity index 100%
copy from SSMULT/gpl.txt
copy to SPQR/Doc/gpl.txt
diff --git a/SPQR/Doc/qrgpu_paper.pdf b/SPQR/Doc/qrgpu_paper.pdf
new file mode 100644
index 0000000..89297dd
Binary files /dev/null and b/SPQR/Doc/qrgpu_paper.pdf differ
diff --git a/SPQR/Doc/spqr.pdf b/SPQR/Doc/spqr.pdf
new file mode 100644
index 0000000..1d9b743
Binary files /dev/null and b/SPQR/Doc/spqr.pdf differ
diff --git a/SPQR/Doc/spqr_user_guide.bib b/SPQR/Doc/spqr_user_guide.bib
new file mode 100644
index 0000000..36981c7
--- /dev/null
+++ b/SPQR/Doc/spqr_user_guide.bib
@@ -0,0 +1,180 @@
+ at string{TOMS        = "{ACM} Trans. Math. Software"}
+ at string{SIMAX       = "{SIAM} J. Matrix Anal. Appl."}
+ at string{SIAMJSC     = "{SIAM} J. Sci. Comput."}
+
+ at article{Davis08a,
+	author = {Davis, T. A.},
+	title = {Multifrontal multithreaded rank-revealing sparse {QR} factorization},
+	journal=TOMS,
+	year = {2008},
+        note = {under submission}
+        }
+
+ at article{Davis08b,
+	author = {Davis, T. A.},
+	title = {Algorithm 8xx: {SuiteSparseQR}, a multifrontal multithreaded sparse QR factorization package},
+	journal=TOMS,
+	year = {2008},
+        note = {under submission}
+        }
+
+ at article{GilbertMolerSchreiber,
+	author={Gilbert, J. R. and Moler, C. and Schreiber, R.},
+	title={Sparse matrices in {MATLAB}:  design and implementation},
+	journal=SIMAX,
+	year={1992}
+	,volume={13}
+	,number={1}
+	,pages={333-356}
+}
+
+ at incollection{BoisvertPozoRemingtonBarrettDongarra97,
+	author={Boisvert, R. F. and Pozo, R. and Remington, K. and Barrett, R. and Dongarra, J. J.},
+	title={The {M}atrix {M}arket: A web resource for test matrix collections},
+	booktitle={Quality of Numerical Software, Assessment and Enhancement},
+	publisher={Chapman \& Hall},
+	year={1997}
+	,editor={Boisvert, R. F.}
+	,pages={125-137}
+	,address={London}
+	,note={({\tt http://math.nist.gov/MatrixMarket})}
+}
+
+ at article{AmestoyDavisDuff03,
+	author={Amestoy, P. R. and Davis, T. A. and Duff, I. S.},
+	title={Algorithm 837: {AMD}, an approximate minimum degree ordering algorithm},
+	journal=TOMS,
+	year={2004}
+	,volume={30}
+	,number={3}
+	,pages={381-388}}
+
+ at article{AmestoyDavisDuff96,
+	author={Amestoy, P. R. and Davis, T. A. and Duff, I. S.},
+	title={An approximate minimum degree ordering algorithm},
+	journal=SIMAX,
+	year={1996}
+	,volume={17}
+	,number={4}
+	,pages={886--905}
+}
+
+ at Article{ChenDavisHagerRajamanickam09,
+  author =       "Y. Chen and T. A. Davis and W. W. Hager and S. Rajamanickam",
+  title =        "Algorithm 887: {CHOLMOD}, Supernodal Sparse {Cholesky} Factorization and Update/Downdate",
+  journal =      TOMS,
+  volume =       "35",
+  year = {2009},
+  number =       "3",
+  accepted =     "26 March 2008",
+  upcoming =     "true",
+  abstract =     "CHOLMOD is a set of routines for factorizing sparse symmetric
+positive definite matrices of the form $A$ or $AA^T$, updating/downdating a
+sparse Cholesky factorization, solving linear systems, updating/downdating the
+solution to the triangular system $Lx=b$, and many other sparse matrix
+functions for both symmetric and unsymmetric matrices. Its supernodal Cholesky
+factorization relies on LAPACK and the Level-3 BLAS, and obtains a substantial
+fraction of the peak performance of the BLAS.  Both real and complex matrices
+are supported.  CHOLMOD is written in ANSI/ISO C, with both C and
+MATLAB\texttrademark interfaces. It appears in MATLAB 7.2 as \verb'x=A\b' when
+\verb'A' is sparse symmetric positive definite, as well as in several other
+sparse matrix functions." }
+
+ at Article{DavisHager09,
+  author =       "T. A. Davis and W. W. Hager",
+  title =        "Dynamic Supernodes in Sparse {Cholesky} Update/downdate and Triangular Solves",
+  journal =      TOMS,
+  volume =       "35",
+  year = {2009},
+  number =       "4",
+  accepted =     "2 May 2008",
+  upcoming =     "true",
+  abstract =     "The supernodal method for sparse Cholesky factorization
+represents the factor $L$ as a set of supernodes, each consisting of a
+contiguous set of columns of $L$ with identical nonzero pattern.  A
+conventional supernode is stored as a dense submatrix.  While this is suitable
+for sparse Cholesky factorization where the nonzero pattern of $L$ does not
+change, it is not suitable for methods that modify a sparse Cholesky
+factorization after a low-rank change to $A$ (an update/downdate, $\overline{A}
+= A \pm WW^T$). Supernodes merge and split apart during an update/downdate.
+Dynamic supernodes are introduced, which allow a sparse Cholesky
+update/downdate to obtain performance competitive with conventional supernodal
+methods.  A dynamic supernodal solver is shown to exceed the performance of the
+conventional (BLAS-based) supernodal method for solving triangular systems.
+These methods are incorporated into CHOLMOD, a sparse Cholesky factorization
+and update/downdate package, which forms the basis of \verb'x=A\b' in MATLAB
+when \verb'A' is sparse and symmetric positive definite." }
+
+ at article{DavisGilbertLarimoreNg00,
+	author={Davis, T. A. and Gilbert, J. R. and Larimore, S. I. and Ng, E. G.},
+	title={A column approximate minimum degree ordering algorithm},
+	journal=TOMS,
+	year={2004}
+	,volume={30}
+	,number={3}
+	,pages={353-376}}
+
+ at article{DavisGilbertLarimoreNg00_algo,
+	author={Davis, T. A. and Gilbert, J. R. and Larimore, S. I. and Ng, E. G.},
+	title={Algorithm 836:  {COLAMD}, a column approximate minimum degree ordering algorithm},
+	journal=TOMS,
+	year={2004}
+	,volume={30}
+	,number={3}
+	,pages={377-380}}
+
+ at article{dddh:90,
+   author="J. J. Dongarra and J. J. {Du Croz} and Duff, I. S.  and S. Hammarling",
+   year="1990",
+   title="A set of {L}evel 3 {B}asic {L}inear {A}lgebra {S}ubprograms",
+   journal=TOMS,
+   volume ={16},
+   pages  ={1--17}
+}
+
+ at book{LAPACK,
+     author={Anderson, E. and Bai, Z. and Bischof, C. H. and Blackford, S.
+	and Demmel, J. W. and Dongarra, J. J. and {Du Croz}, J. and
+	Greenbaum, A.  and Hammarling, S. and McKenney, A. and Sorensen, D. C.},
+     title={{LAPACK} Users' Guide},
+     publisher={SIAM},
+     year=1999,
+     address={Philadelphia},
+     edition={3rd}
+}
+
+ at Article{GotoVanDeGeijn08,
+  author =       "K. Goto and R. van de Geijn",
+  title =        "High Performance Implementation of the Level-3 {BLAS}",
+  journal =      TOMS,
+  volume =       "35",
+  number =       "1",
+  month =        jul,
+  year =         "2008",
+  pages =        "4",
+  note =         "Article 4, 14 pages",
+  URL =          "http://doi.acm.org/10.1145/1377603.1377607",
+  abstract =     "A simple but highly effective approach for transforming
+high-performance implementations on cache-based architectures of matrix-matrix
+multiplication into implementations of other commonly used matrix-matrix
+computations (the level-3 BLAS) is presented. Exceptional performance is
+demonstrated on various architectures." }
+
+
+ at book{Reinders07,
+     author={Reinders, J.},
+     title={Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism},
+     publisher={O'Reilly Media},
+     address={Sebastopol, CA},
+     year={2007}
+}
+
+ at article{KarypisKumar98e,
+	author={Karypis, G. and Kumar, V.},
+	title={A fast and high quality multilevel scheme for partitioning irregular graphs},
+	journal=SIAMJSC,
+	year={1998}
+	,volume={20}
+	,pages={359-392}
+	,annote={f. also TR-95-035, Dept. of Computer Science, Univ. of Minnesota, was KarypisKumar95a}
+}
diff --git a/SPQR/Doc/spqr_user_guide.pdf b/SPQR/Doc/spqr_user_guide.pdf
new file mode 100644
index 0000000..3e0702e
Binary files /dev/null and b/SPQR/Doc/spqr_user_guide.pdf differ
diff --git a/SPQR/Doc/spqr_user_guide.tex b/SPQR/Doc/spqr_user_guide.tex
new file mode 100644
index 0000000..0345c53
--- /dev/null
+++ b/SPQR/Doc/spqr_user_guide.tex
@@ -0,0 +1,952 @@
+\documentclass[12pt]{article}
+\usepackage{hyperref}
+
+\topmargin -0.5in
+\textheight 9.0in
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\textwidth 6.5in
+
+%-------------------------------------------------------------------------------
+% get epsf.tex file, for encapsulated postscript files:
+\input epsf
+%-------------------------------------------------------------------------------
+% macro for Postscript figures the easy way
+% usage:  \postscript{file.ps}{scale}
+% where scale is 1.0 for 100%, 0.5 for 50% reduction, etc.
+%
+\newcommand{\postscript}[2]
+{\setlength{\epsfxsize}{#2\hsize}
+\centerline{\epsfbox{#1}}}
+%-------------------------------------------------------------------------------
+
+\title{User's Guide for SuiteSparseQR, a multifrontal multithreaded sparse
+QR factorization package (with optional GPU acceleration)}
+\author{Timothy A. Davis\thanks{
+email: DrTimothyAldenDavis at gmail.com.
+http://www.suitesparse.com.
+Portions of this work were supported by the National
+Science Foundation, under grants 0203270, 0620286, and 0619080.},
+Sencer Nuri Yeralan, and Sanjay Ranka}
+
+\date{VERSION 2.0.0, Oct 17, 2014}
+
+%-------------------------------------------------------------------------------
+\begin{document}
+%-------------------------------------------------------------------------------
+\maketitle
+
+\begin{abstract}
+
+SuiteSparseQR is an implementation of the multifrontal sparse QR factorization
+method.  Parallelism is exploited both in the BLAS and across different frontal
+matrices using Intel's Threading Building Blocks, a shared-memory programming
+model for modern multicore architectures.  It can obtain a substantial fraction
+of the theoretical peak performance of a multicore computer.  The package is
+written in C++ with user interfaces for MATLAB, C, and C++.  Both real and
+complex sparse matrices are supported.
+
+\end{abstract}
+
+\maketitle
+
+%-------------------------------------------------------------------------------
+\section{Introduction}
+\label{intro}
+%-------------------------------------------------------------------------------
+
+The algorithms used in SuiteSparseQR are discussed in a companion paper,
+\cite{Davis08a}, and an overview of how to use the software is given in
+\cite{Davis08b}.  This document gives detailed information on the installation
+and use of SuiteSparseQR.
+
+%-------------------------------------------------------------------------------
+\section{Using SuiteSparseQR in MATLAB}
+%-------------------------------------------------------------------------------
+
+The simplest way to use SuiteSparseQR is via MATLAB.  Its syntax includes every
+feature of the MATLAB \verb'qr' in version R2009a and earlier
+\cite{GilbertMolerSchreiber}, plus additional features not available in MATLAB.
+It is also a replacement for \verb'x=A\b' for least-squares problems and
+underdetermined systems.  In addition to substantial gains in performance (10x
+to 100x is not uncommon, up to 10,000x has been observed), SuiteSparseQR adds
+new capabilities that are not present in MATLAB.  For example, it provides an
+efficient method for finding the minimum 2-norm solution to an underdetermined
+system.
+
+%-------------------------------------------------------------------------------
+\subsection{Installing SuiteSparseQR for use in MATLAB}
+%-------------------------------------------------------------------------------
+
+All packages in SuiteSparse, including SuiteSparseQR and the codes it relies on
+(AMD, COLAMD, CHOLMOD, METIS, CCAMD, and CCOLAMD) are compiled with a single
+command typed into the MATLAB Command Window.  SuiteSparseQR uses the LAPACK
+and BLAS libraries provided with MATLAB; you do not need to do anything to use
+these.  Below are step-by-step instructions for compiling all of SuiteSparse
+(including SuiteSparseQR), and optional instructions on using METIS and/or
+Intel's Threading Building Blocks (TBB).
+
+%-------------------------------------------------------------------------------
+\subsubsection{Required instructions for Windows}
+%-------------------------------------------------------------------------------
+
+For Windows, you cannot use the \verb'lcc' compiler that ships with MATLAB; it
+is not a C++ compiler.  To compile SuiteSparseQR, you must obtain a C++
+compiler; Microsoft Visual Studio C++ Express Edition will work fine.  Install
+this compiler from \newline
+\htmladdnormallink{http://www.microsoft.com/express/vc/}{http://www.microsoft.com/express/vc/}
+and then type \verb'mex -setup' in the MATLAB Command Window.
+
+%-------------------------------------------------------------------------------
+\subsubsection{Optional instructions on using METIS for any operating system}
+%-------------------------------------------------------------------------------
+
+To use METIS \cite{KarypisKumar98e}, obtain a copy of the metis-4.0.1
+distribution from \newline
+\htmladdnormallink{http://glaros.dtc.umn.edu/gkhome/views/metis}{http://glaros.dtc.umn.edu/gkhome/views/metis}.
+Do not get the \verb'metis-4.0.zip' file since it does not contain source code;
+you must download the \verb'metis-4.0.tar.gz' file instead.  Uncompress this
+file and place the \verb'metis-4.0' directory in the SuiteSparse directory.
+You must not have a nested \verb'SuiteSparse/metis-4.0/metis-4.0' directory;
+this can occur on Windows when you extract a compressed archive.  If you have
+this directory, move the lowest \verb'metis-4.0' directory up one level so that
+(for example) the file \newline \verb'SuiteSparse/metis-4.0/Lib/metis.h'
+exists.
+
+METIS tends to give orderings that are good for the parallelism exploited by
+TBB, so its use with TBB is recommended.  Note however that METIS is not
+bug-free; it can occasionally cause segmentation faults, particularly if used
+when finding basic solutions to underdetermined systems with many more columns
+than rows (SuiteSparseQR does not use METIS, by default, for those systems).
+This (rare) faulty behavior has been confirmed with valid inputs to the METIS
+test programs themselves; it is not a bug in the SuiteSparse interface to
+METIS.  Use METIS at your own risk.
+
+%-------------------------------------------------------------------------------
+\subsubsection{Optional instructions for using TBB on Linux/Unix/Mac}
+%-------------------------------------------------------------------------------
+
+If you are using a Debian-based Linux system (such as Ubuntu), you're in luck!
+You can install TBB via the Synaptic Package Manager.  Just search for TBB,
+select it, and click Apply.  This will place the right files in \verb'/usr/lib'
+and it will create the \verb'/usr/include/tbb' directory.  It's by far the
+simplest way to install TBB.  If you do this, skip the rest of this section.
+
+Alternatively, obtain a copy of TBB from
+\htmladdnormallink{http://www.threadingbuildingblocks.org}{http://www.threadingbuildingblocks.org}
+as a \verb'tbb*.tgz' file appropriate for your version of Linux/Unix.  If you
+install via the \verb'tbb_*.tgz' file, make sure the \verb'libtbb*.so*' and
+\verb'libtbbmalloc*.so*' files are placed in the \verb'/usr/lib' directory.
+Make sure the \verb'tbb' directory containing all of the include files is
+placed in \verb'/usr/include' (for example, the
+\verb'/usr/include/tbb/task_scheduler_init.h' file must exist).
+
+If you do not have permission to install TBB properly into the \verb'/usr/lib'
+and \verb'/usr/include' directories, you can place it in your own directory and
+modify the \verb'tbb_path' variable in \verb'spqr_make.m' to specify
+the location of your own copy of TBB (refer to that file for instructions).
+You must also set your \verb'LD_LIBRARY_PATH' environment variable to include
+the directory containing the \verb'libtbb*so' files.  You need to first
+determine which subdirectory of the TBB distribution contains the libraries
+appropriate for your system; in the examples below this is just called
+\verb'/path'.  It must be an absolute path, starting with the \verb'/'
+character.  There must be no spaces in the path name.
+
+For Linux use this command at the system command line before starting MATLAB,
+where \verb'/path' should be replaced with the actual full path of the TBB
+\verb'lib' directory:
+
+\begin{verbatim}
+    setenv LD_LIBRARY_PATH /path:$LD_LIBRARY_PATH
+\end{verbatim}
+
+If you use the \verb'csh' shell, place the command in your \verb'~/.cshrc'
+file so you don't have to type it each time you start MATLAB.
+
+For the Mac, edit the \verb'/etc/profile' file and add this line to the end of
+the file:
+
+\begin{verbatim}
+    export DYLD_LIBRARY_PATH=/path:$DYLD_LIBRARY_PATH
+\end{verbatim}
+
+For example, using the 64-bit Linux version placed in my home directory, this
+command would be placed in my \verb'~/.cshrc' file, prior to starting MATLAB.
+
+{\scriptsize
+\begin{verbatim}
+    setenv LD_LIBRARY_PATH /home/davis/tbb21_009oss/em64t/cc4.1.0_libc2.4_kernel2.6.16.21/lib:$LD_LIBRARY_PATH
+\end{verbatim}
+}
+
+Then, before starting MATLAB, make sure this variable is set by typing this
+command at the system command line (you only have to do this for this session;
+whenever you start a new command shell this will be done automatically): 
+
+\begin{verbatim}
+    source ~/.cshrc
+\end{verbatim}
+
+For this example, my \verb'spqr_make.m' file would contain this line:
+
+\begin{verbatim}
+    tbb_path = '/home/davis/tbb21_009oss' ;
+\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsubsection{Optional instructions for using TBB on Windows}
+%-------------------------------------------------------------------------------
+
+Obtain a copy of TBB from
+\htmladdnormallink{http://www.threadingbuildingblocks.org}{http://www.threadingbuildingblocks.org}
+; for TBB Version 2.1 this file is \verb'tbb21_009oss_win.zip'.
+
+Create a folder and place the \verb'tbb21_009oss_win.zip' file there, and
+extract the file.  In the example below, I extracted to
+\verb'C:\TBB\tbb21_009oss' (if you do the same then you do not have to edit
+\verb'spqr_make.m').  There should be no spaces in the path (for example,
+placing TBB under the \verb'Program Files' directory will not work).
+
+In Windows XP, right-click \verb'My Computer' and select \verb'Properties'.
+Click the \verb'Advanced' tab.  Click \verb'Environment Variables'.  Under
+\verb'System' variables, edit the \verb'Path' to append the name of the folder
+containing the TBB \verb'bin' folder appropriate for your system, preceded by a
+semicolon.  For example, in a 32-bit Windows system if TBB is installed in
+\verb'C:\TBB' you would append the string
+\verb';C:\TBB\tbb21_009oss\ia32\vc9\bin\' to the end of your system \verb'Path'
+variable.
+
+For Vista, the instructions are the same, except that you choose
+\verb'Computer' instead of \verb'My Computer', and you click the
+\verb'Advanced System Settings' tab instead of the \verb'Advanced' tab.
+
+Next, edit the \verb'SPQR\MATLAB\spqr_make.m' file.  Change the \verb'tbb_path'
+variable to point to your copy of TBB.  For example, if you installed TBB into
+\verb'C:\TBB' your \verb'spqr_make.m' file would contain this line:
+
+\begin{verbatim}
+    tbb_path = 'C:\TBB\tbb21_009oss' ;
+\end{verbatim}
+
+That line is already in \verb'spqr_make.m', so if you choose to install TBB
+in that location, you do not have to edit the file.
+
+%-------------------------------------------------------------------------------
+\subsubsection{Now you're ready to compile (on any operating system)}
+%-------------------------------------------------------------------------------
+
+Type these commands in the MATLAB window:
+\begin{verbatim}
+    cd SuiteSparse
+    SuiteSparse_install
+\end{verbatim}
+You will be asked if you want to run some demos.  I recommend that you do this
+to ensure your functions have been installed correctly.  Next type the command
+\begin{verbatim}
+    pathtool
+\end{verbatim}
+and examine your MATLAB path.  The various SuiteSparse directories have been
+placed in your path.  Click ``save'' to save this path for future MATLAB
+sessions.  If this fails, you do not have permission to modify the
+\verb'pathdef.m' file (it is shared by all users).  An alternative is to type
+the command:
+\begin{verbatim}
+    path
+\end{verbatim}
+and cut-and-paste the paths displayed there into your own \verb'startup.m'
+file, prepending the command \verb'addpath' to each line.  For example, if I
+installed SuiteSparse into my home directory (\verb'/home/davis') then my
+\verb'startup.m' file should look like this:
+
+{\footnotesize
+\begin{verbatim}
+    addpath  /home/davis/SuiteSparse/SPQR/MATLAB
+    addpath  /home/davis/SuiteSparse/RBio
+    addpath  /home/davis/SuiteSparse/MATLAB_Tools/spok
+    addpath  /home/davis/SuiteSparse/MATLAB_Tools/waitmex
+    addpath  /home/davis/SuiteSparse/MATLAB_Tools/shellgui
+    addpath  /home/davis/SuiteSparse/MATLAB_Tools/GEE
+    addpath  /home/davis/SuiteSparse/LINFACTOR
+    addpath  /home/davis/SuiteSparse/MESHND
+    addpath  /home/davis/SuiteSparse/UFcollection
+    addpath  /home/davis/SuiteSparse/SSMULT
+    addpath  /home/davis/SuiteSparse/KLU/MATLAB
+    addpath  /home/davis/SuiteSparse/BTF/MATLAB
+    addpath  /home/davis/SuiteSparse/LDL/MATLAB
+    addpath  /home/davis/SuiteSparse/CXSparse/MATLAB/UFget
+    addpath  /home/davis/SuiteSparse/CXSparse/MATLAB/Demo
+    addpath  /home/davis/SuiteSparse/CXSparse/MATLAB/CSparse
+    addpath  /home/davis/SuiteSparse/CAMD/MATLAB
+    addpath  /home/davis/SuiteSparse/CCOLAMD/MATLAB
+    addpath  /home/davis/SuiteSparse/COLAMD/MATLAB
+    addpath  /home/davis/SuiteSparse/AMD/MATLAB
+    addpath  /home/davis/SuiteSparse/CHOLMOD/MATLAB
+    addpath  /home/davis/SuiteSparse/UMFPACK/MATLAB
+    addpath  /home/davis/SuiteSparse
+    addpath  /home/davis/SuiteSparse/MATLAB_Tools
+\end{verbatim}
+}
+
+On a Windows system, I might see paths like this instead in my \verb'startup.m'
+file:
+
+{\footnotesize
+\begin{verbatim}
+    addpath C:\Documents and Settings\davis\My Documents\SuiteSparse\SPQR\MATLAB
+    ...
+\end{verbatim}
+}
+
+Your \verb'startup.m' file should appear in the directory in which MATLAB
+starts.  Failing that, every time you start MATLAB, find your \verb'startup.m'
+file and run it.  For more help, type \verb'doc startup' in MATLAB.
+
+The \verb'SuiteSparse_install' script works on any version of MATLAB
+(Linux/Unix, Mac, or Windows) if you have a C++ compiler.  The install script
+will detect if you have placed the METIS directory in the right place, and will
+compile it for use with SuiteSparseQR if it finds it there.  Otherwise METIS
+will be skipped (the install script will tell you if it finds METIS or not).
+
+%-------------------------------------------------------------------------------
+\subsubsection{Optional instructions for using TBB on any system}
+%-------------------------------------------------------------------------------
+
+If you have followed the steps above (as I recommend that you do), you have
+just compiled SuiteSparseQR, but it will not yet be using TBB.  To use TBB with
+SuiteSparseQR, first install TBB as described above.  Once TBB is installed,
+type the following commands in the MATLAB Command Window (assuming you have
+METIS):
+
+\begin{verbatim}
+    cd SuiteSparse/SPQR/MATLAB
+    spqr_make metis tbb
+\end{verbatim}
+
+Or if you do not have METIS, do this instead:
+
+\begin{verbatim}
+    cd SuiteSparse/SPQR/MATLAB
+    spqr_make nometis tbb
+\end{verbatim}
+
+For more options, type \verb'help spqr_make'.
+
+%-------------------------------------------------------------------------------
+\subsection{Functions provided to the MATLAB user}
+%-------------------------------------------------------------------------------
+
+Three primary functions are available:
+
+\begin{enumerate}
+
+\item \verb'spqr', a replacement for the MATLAB \verb'qr'
+
+\item \verb'spqr_solve', a replacement for \verb'x=A\b' when \verb'A' is sparse
+and rectangular.  It works for the square case, too, but \verb'x=A\b' will be
+faster (using LU or Cholesky factorization). \verb'spqr_solve' is a good method
+for ill-conditioned or rank-deficient square matrices, however.
+
+\item \verb'spqr_qmult', which multiplies \verb'Q' (stored in Householder
+vector form) times a matrix \verb'x'.
+
+\end{enumerate}
+
+Their syntax is described below in the table below.
+The permutation \verb'P' is chosen to reduce fill-in and to return \verb'R' in
+upper trapezoidal form if \verb'A' is estimated to have less than full rank.
+The \verb'opts' parameter provides non-default options (refer to the next
+section).  The output \verb'Q' can be optionally returned in Householder form,
+which is far sparser than returning \verb'Q' as a sparse matrix.
+
+\vspace{0.1in}
+
+{\footnotesize
+\begin{tabular}{|ll|}
+\hline
+\verb'R = spqr (A)'             & Q-less QR factorization \\
+\verb'R = spqr (A,0)'           & economy variant (\verb'size(R,1) = min(m,n)') \\
+\verb'R = spqr (A,opts)'        & as above, with non-default options \\
+\hline
+\verb'[Q,R] = spqr (A)'         & \verb'A=Q*R' factorization \\
+\verb'[Q,R] = spqr (A,0)'       & economy variant (\verb'size(Q,2) = size(R,1) = min(m,n)') \\
+\verb'[Q,R] = spqr (A,opts)'    & \verb'A=Q*R', with non-default options \\
+\hline
+\verb'[Q,R,P] = spqr (A)'       & \verb'A*P=Q*R' where P reduces fill-in \\
+\verb'[Q,R,P] = spqr (A,0)'     & economy variant (\verb'size(Q,2) = size(R,1) = min(m,n)') \\
+\verb'[Q,R,P] = spqr (A,opts)'  & as above, with non-default options \\
+\hline
+\verb'[C,R] = spqr (A,B)'       & as \verb'R=spqr(A)', also returns \verb"C=Q'*B" \\
+\verb'[C,R] = spqr (A,B,0)'     & economy variant (\verb'size(C,1) = size(R,1) = min(m,n)') \\
+\verb'[C,R] = spqr (A,B,opts)'  & as above, with non-default options \\
+\hline
+\verb'[C,R,P] = spqr (A,B)'     & as \verb'R=spqr(A*P)', also returns \verb"C=Q'*B" \\
+\verb'[C,R,P] = spqr (A,B,0)'   & economy variant (\verb'size(C,1) = size(R,1) = min(m,n)') \\
+\verb'[C,R,P] = spqr (A,B,opts)'& as above, with non-default options \\
+\hline
+\verb'x = spqr_solve (A,B)'     & \verb'x=A\B' \\
+\verb'[x,info] = spqr_solve (A,B,opts)' & as above, with statistics and non-default parameters \\
+\hline
+\verb'Y = spqr_qmult (Q,X,k)'   & computes \verb"Q'*X", \verb"Q*X", \verb"X*Q'", or \verb"X*Q" 
+(selected with \verb'k') \\
+\hline
+\end{tabular}
+}
+
+%-------------------------------------------------------------------------------
+\subsection{The {\tt opts} parameter}
+%-------------------------------------------------------------------------------
+
+The \verb'opts' struct provides control over non-default parameters for
+SuiteSparseQR.  Entries not present in \verb'opts' are set to their defaults.
+
+\begin{itemize}
+
+    \item \verb'opts.tol':   columns that have 2-norm \verb'<= opts.tol' are
+    treated as zero. The default is \verb"20*(m+n)*eps*sqrt(max(diag(A'*A)))"
+    where \verb'[m n]=size(A)'.
+
+    \item \verb'opts.econ':  number of rows of \verb'R' and columns of \verb'Q'
+    to return.  The default is \verb'm'.  Using \verb'n' gives the standard
+    economy form (as in the MATLAB \verb'qr(A,0)').  A value less than the
+    estimated rank \verb'r' is set to \verb'r', so \verb'opts.econ=0' gives
+    the ``rank-sized'' factorization, where \verb'size(R,1)==nnz(diag(R))==r'.
+
+    \item \verb'opts.ordering': a string describing which column ordering
+    method to use.  Let \newline 
+    \verb'[m2 n2]=size(S)' where \verb'S' is obtained by
+    removing singletons from \verb'A'.  The singleton permutation places
+    \verb'A*P' in the form \verb'[A11 A12 ; 0 S]' where \verb'A11' is upper
+    triangular with diagonal entries all greater than \verb'opts.tol'.
+
+    The default is to use COLAMD if \verb'm2<=2*n2'; otherwise try AMD.  Let
+    \verb'f' be the flops for \verb"chol((S*P)'*(S*P))" with the ordering
+    \verb'P' found by AMD.  Then if \verb'f/nnz(R) >= 500' and
+    \verb'nnz(R)/nnz(S) >= 5' then try METIS, and take the best ordering found
+    (AMD or METIS); otherwise use AMD without trying METIS.  If METIS is not
+    installed then the default ordering is to use COLAMD if \verb'm2<=2*n2' and
+    to use AMD otherwise.
+
+    The available orderings are:
+
+       {\tt 'default'}: the default ordering.
+
+       {\tt 'amd'}: use \verb"amd(S'*S)".
+
+       {\tt 'colamd'}: use \verb"colamd(S)".
+
+       {\tt 'metis'}: use \verb"metis(S'*S)", only if METIS is
+       installed.
+
+       {\tt 'best'}: try all three (AMD, COLAMD, METIS) and take the
+       best.
+
+       {\tt 'bestamd'}: try AMD and COLAMD and take the best.
+
+       {\tt 'fixed'}: use \verb"P=I"; this is the only option if
+       \verb"P" is not present in the output.
+
+       {\tt 'natural'}: singleton removal only.
+
+    \item \verb'opts.Q': a string describing how \verb'Q' is to be returned.
+    The default is \verb"'discard'" if \verb'Q' is not present in the output,
+    or \verb"'matrix'" otherwise.  If \verb'Q' is present and \verb'opts.Q' is
+    \verb"'discard'", then \verb"Q=[]" is returned (thus \verb"R=spqr(A*P)" is
+    \verb"[Q,R,P]=spqr(A)" where \verb"spqr" finds \verb"P" but \verb"Q" is
+    discarded instead). The usage \verb"opts.Q='matrix'" returns \verb'Q' as a
+    sparse matrix where \verb'A=Q*R' or \verb"A*P=Q*R".  Using
+    \verb"opts.Q='Householder'" returns \verb'Q' as a struct containing the
+    Householder reflections applied to \verb'A' to obtain \verb'R', resulting
+    in a far sparser \verb'Q' than the \verb"'matrix'" option.  
+
+    \item \verb'opts.permutation': a string describing how \verb'P' is to be
+    returned.  The default is \verb"'matrix'", so that \verb"A*P=Q*R".  Using
+    \verb"'vector'" gives \verb"A(:,P)=Q*R" instead.
+
+    \item \verb'opts.spumoni': an integer \verb'k' that
+        acts just like \verb"spparms('spumoni',k)".
+
+    \item \verb'opts.min2norm': used by \verb'spqr_solve'; you can use
+    \verb"'basic'" (the default), or \verb"'min2norm'".  Determines the kind of
+    solution that \verb'spqr_solve' computes for underdetermined systems.  Has
+    no effect for least-squares problems; ignored by \verb'spqr' itself.
+
+    \item \verb'opts.grain', \verb'opts.small', \verb'opts.nthreads':
+    multitasking control (if compiled with TBB).  Let \verb'f' be the total
+    flop count.  The analysis phase tries to ensure that all parallel tasks
+    have at least \verb'max(total_flops/opts.grain,opts.small)' flops.  No TBB
+    parallelism is exploited if \verb'opts.grain <= 1'.  The parameter
+    \verb'opts.nthreads' gives the number of threads to use for TBB (which is
+    different than the number of threads used by the BLAS).  Setting
+    \verb'opts.nthreads <= 0' means to let TBB determine the number of threads
+    (normally equal to the number of cores); otherwise, exactly
+    \verb'opts.nthreads' threads are used.  The defaults are
+    \verb'opts.grain=1', \verb'opts.small=1e6', and \verb'opts.nthreads=0',
+    respectively.  That is, TBB is disabled by default since it conflicts with
+    BLAS multithreading.  If you enable TBB, be sure to disable BLAS
+    multithreading with the MATLAB command \verb'maxNumCompThreads(1)', or
+    choose \newline \verb'opts.nthreads=k' and \verb'maxNumCompThreads(b)' so
+    that the product \verb'k*b' is equal to the number of cores.  Note that
+    these recommendations may change for future versions of TBB.  A good value
+    of \verb'opts.grain' is twice that of \verb'opts.nthreads'.  If TBB
+    parallelism is enabled, the METIS ordering normally gives the best speedup
+    for large problems.
+
+\end{itemize}
+
+%-------------------------------------------------------------------------------
+\subsection{Examples on how to use the MATLAB interface}
+%-------------------------------------------------------------------------------
+
+To solve a least-squares problem, or to find the basic solution to an
+underdetermined system, just use \verb'x = spqr_solve(A,b)' in place of
+\verb'x=A\b'.  To compute the QR factorization, use \verb'[Q,R]=spqr(A)'
+instead of \verb'[Q,R]=qr(A)'.  Better results can be obtained by discarding
+\verb'Q' with the usage \verb'R=spqr(A)' (in place of \verb'R=qr(A)'), or by
+requesting \verb'Q' in Householder form with \verb'[Q,R]=spqr(A,opts)' where
+\verb"opts.Q='Householder'".  The latter option is not available in MATLAB.  To
+use a fill-reducing ordering, simply use any of the syntaxes above with
+\verb'P' as an output parameter.
+
+The least-squares solution of an overdetermined system \verb'A*x=b' with
+\verb'm>n' (where \verb'A' has rank \verb'n') can be found in one of at least
+seven ways (in increasing order of efficiency, in time and memory):
+
+{\footnotesize
+\begin{tabular}{|l|l|}
+    \hline
+    \verb"x = pinv(full(A)) * b ;"
+        & impossible for large \verb'A' \\
+    \hline
+    \verb"[Q,R] = spqr (A) ;"
+        & high fill-in in \verb'R', \\
+    \verb"x = R\(Q'*b) ;"
+        & \verb'Q' costly in matrix form \\
+    \hline
+    \verb"[Q,R,P] = spqr (A) ;"
+        & low fill-in in \verb'R', \\
+    \verb"x = P*(R\(Q'*b)) ;"
+        & \verb'Q' costly in matrix form \\
+    \hline
+    \verb"[Q,R,P] = spqr (A,struct('Q','Householder')) ;"
+        & low fill-in in \verb'R', \\
+    \verb"x = P*(R\spqr_qmult (Q,b,0)) ;"
+        & \verb'Q' in efficient Householder form \\
+    \hline
+    \verb"[c,R,P] = spqr (A,b) ;"
+        & \verb'Q' not kept, \\
+    \verb"x = P*(R\c) ;"
+        & \verb'P' a permutation matrix \\
+    \hline
+    \verb"[c,R,p] = spqr (A,b,0) ;"
+        & \verb'Q' not kept, \\
+    \verb"y = (R\c) ; x(p) = y"
+        & \verb'p' a permutation vector \\
+    \hline
+    \verb"x = spqr_solve (A,b) ;"
+        & less memory and better handling \\
+        & of rank-deficient matrices \\
+    \hline
+\end{tabular}
+}
+
+\vspace{0.1in}
+
+The minimum-norm solution of an underdetermined system \verb'A*x=b' with
+\verb'm<n' can be found in one of five ways (in increasing order of
+efficiency, in time and memory):
+
+\vspace{0.1in}
+
+{\footnotesize
+\begin{tabular}{|l|l|}
+    \hline
+    \verb"x = pinv(full(A)) * b ;"
+        & impossible for large \verb'A' \\
+    \hline
+    \verb"[Q,R] = spqr (A') ;"
+        & high fill-in in \verb'R', \\
+    \verb"x = Q*(R'\b) ;"
+        & \verb'Q' costly in matrix form \\
+    \hline
+    \verb"[Q,R,P] = spqr (A') ;"
+        & low fill-in in \verb'R', \\
+    \verb"x = Q*(R'\(P'*b)) ;"
+        & \verb'Q' costly in matrix form \\
+    \hline
+    \verb"[Q,R,P] = spqr (A',struct('Q','Householder')) ;"
+        & low fill-in in \verb'R', \\
+    \verb"x = spqr_qmult (Q,R'\(P'*b),1) ;"
+        & \verb'Q' in efficient Householder form \\
+    \hline
+    \verb"opts.solution = 'min2norm' ;"
+        & as 4th option above, but faster, \\
+    \verb"x = spqr_solve (A,b,opts) ;"
+        & less memory, and better handling \\
+        & of rank-deficient matrices \\
+    \hline
+\end{tabular}
+}
+
+Note that \verb'spqr_solve' uses a fill-reducing ordering, by default.
+It can be disabled or modified using a non-default \verb'opts' parameter
+(\verb'opts.ordering', specifically).
+
+%-------------------------------------------------------------------------------
+\section{Using SuiteSparseQR in C and C++}
+%-------------------------------------------------------------------------------
+
+SuiteSparseQR relies on CHOLMOD for its basic sparse matrix data structure, a
+compressed sparse column format.  CHOLMOD provides interfaces to the AMD,
+COLAMD, and METIS ordering methods, supernodal symbolic Cholesky factorization
+(namely, \verb'symbfact' in MATLAB), functions for converting between different
+data structures, and for basic operations such as transpose, matrix multiply,
+reading a matrix from a file, writing a matrix to a file, and many other
+functions.
+
+%-------------------------------------------------------------------------------
+\subsection{Installing the C/C++ library on Linux/Unix}
+%-------------------------------------------------------------------------------
+
+Before you compile the SuiteSparseQR library and demo programs, you may wish to
+edit the \verb'SuiteSparse/SuiteSparse_config/SuiteSparse_config.mk' configuration file.  The
+defaults should be fine on most Linux/Unix systems.  Next, type \verb'make' at
+the Linux/Unix command line, in either the \verb'SuiteSparse' directory (which
+compiles all of SuiteSparse) or in the \verb'SuiteSparse/SPQR' directory (which
+just compiles SuiteSparseQR and the libraries it requires).  SuiteSparseQR will
+be compiled, and a set of simple demos will be run (including the one in the
+next section).
+
+The configuration file defines where the LAPACK and BLAS libraries are to be
+found.  Selecting the right BLAS is critical.  There is no standard naming
+scheme for the name and location of these libraries.  The defaults in the
+\verb'SuiteSparse_config.mk' file use \verb'-llapack' and \verb'-lblas'; the latter may
+link against the standard Fortran reference BLAS, which will not provide
+optimal performance.  For best results, you should use the Goto BLAS
+\cite{GotoVanDeGeijn08}, or high-performance vendor-supplied BLAS such as the
+Intel MKL, AMD ACML, or the Sun Performance Library.  Selection of LAPACK and
+the BLAS is done with the \verb'LAPACK=' and \verb'BLAS=' lines in the
+\verb'SuiteSparse_config.mk' file.
+
+Four compile-time options can be used to modify how SuiteSparseQR is compiled.
+Select these via the \verb'SPQR_CONFIG=' line in the \verb'SuiteSparse_config.mk' file.
+
+\begin{itemize}
+
+    \item \verb'-DNPARTITION': do not compile with METIS, CAMD, or CCOLAMD.
+    These packages are included by default.
+
+    \item \verb'-DNEXPERT': do not compile with the ``expert'' routines in
+    \verb'SuiteSparseQR_expert.cpp'.  The expert routines are included by
+    default.
+
+    \item \verb'-DHAVE_TBB': enable the Intel Threading Building Blocks, TBB.
+    The use of TBB is disabled by default.  It is disabled because not all
+    installations have TBB available.  The use of TBB is recommended, however,
+    if you have a multicore computer.
+
+\end{itemize}
+
+To fully test 100\% of the lines of SuiteSparseQR, go to the \verb'Tcov'
+directory and type \verb'make'.  This will work for Linux only.
+
+%-------------------------------------------------------------------------------
+\subsection{C/C++ Example}
+%-------------------------------------------------------------------------------
+
+The C++ interface is written using templates for handling both real and complex
+matrices.  The simplest function computes the MATLAB equivalent of
+\verb'x=A\b' and is almost as simple:
+{\footnotesize
+\begin{verbatim}
+    #include "SuiteSparseQR.hpp"
+    X = SuiteSparseQR <double> (A, B, cc) ;
+\end{verbatim}
+}
+The C version of this function is almost identical:
+{\footnotesize
+\begin{verbatim}
+    #include "SuiteSparseQR_C.h"
+    X = SuiteSparseQR_C_backslash_default (A, B, cc) ;
+\end{verbatim}
+}
+
+Below is a simple C++ program that illustrates the use of SuiteSparseQR.  The
+program reads in a least-squares problem from \verb'stdin' in MatrixMarket
+format \cite{BoisvertPozoRemingtonBarrettDongarra97}, solves it, and prints the
+norm of the residual and the estimated rank of \verb'A'.  The comments reflect
+the MATLAB equivalent statements.  The C version of this program is identical
+except for the \verb'#include' statement and call to SuiteSparseQR which are
+replaced with the C version of the statement above, and C-style comments.
+
+{\footnotesize
+\begin{verbatim}
+    #include "SuiteSparseQR.hpp"
+    int main (int argc, char **argv)
+    {
+        cholmod_common Common, *cc ;
+        cholmod_sparse *A ;
+        cholmod_dense *X, *B, *Residual ;
+        double rnorm, one [2] = {1,0}, minusone [2] = {-1,0} ;
+        int mtype ;
+
+        // start CHOLMOD
+        cc = &Common ;
+        cholmod_l_start (cc) ;
+
+        // load A
+        A = (cholmod_sparse *) cholmod_l_read_matrix (stdin, 1, &mtype, cc) ;
+
+        // B = ones (size (A,1),1)
+        B = cholmod_l_ones (A->nrow, 1, A->xtype, cc) ;
+
+        // X = A\B
+        X = SuiteSparseQR <double> (A, B, cc) ;
+
+        // rnorm = norm (B-A*X)
+        Residual = cholmod_l_copy_dense (B, cc) ;
+        cholmod_l_sdmult (A, 0, minusone, one, X, Residual, cc) ;
+        rnorm = cholmod_l_norm_dense (Residual, 2, cc) ;
+        printf ("2-norm of residual: %8.1e\n", rnorm) ;
+        printf ("rank %ld\n", cc->SPQR_istat [4]) ;
+
+        // free everything and finish CHOLMOD
+        cholmod_l_free_dense (&Residual, cc) ;
+        cholmod_l_free_sparse (&A, cc) ;
+        cholmod_l_free_dense (&X, cc) ;
+        cholmod_l_free_dense (&B, cc) ;
+        cholmod_l_finish (cc) ;
+        return (0) ;
+    }
+\end{verbatim}
+}
+
+%-------------------------------------------------------------------------------
+\subsection{C++ Syntax}
+%-------------------------------------------------------------------------------
+
+All features available to the MATLAB user are also available to both the C and
+C++ interfaces using a syntax that is not much more complicated than the MATLAB
+syntax.  Additional features not available via the MATLAB interface include the
+ability to compute the symbolic and numeric factorizations separately (for
+multiple matrices with the same nonzero pattern but different numerical
+values).  The following is a list of user-callable C++ functions and what they
+can do:
+
+\begin{enumerate}
+
+    \item \verb'SuiteSparseQR': an overloaded function that provides functions
+    equivalent to \verb'spqr' and \verb'spqr_solve' in the SuiteSparseQR MATLAB
+    interface.
+
+    \item \verb'SuiteSparseQR_factorize': performs both the symbolic and
+    numeric factorizations and returns a QR factorization object such that
+    \verb'A*P=Q*R'.  It always exploits singletons.
+
+    \item \verb'SuiteSparseQR_symbolic': performs the symbolic factorization
+    and returns a QR factorization object to be passed to
+    \verb'SuiteSparseQR_numeric'.  It does not exploit singletons.
+
+    \item \verb'SuiteSparseQR_numeric': performs the numeric factorization on a
+    QR factorization object, either one constructed by
+    \verb'SuiteSparseQR_symbolic', or reusing one from a prior call to
+    \verb'SuiteSparseQR_numeric' for a matrix \verb'A' with the same pattern as
+    the first one, but with different numerical values.
+
+    \item \verb'SuiteSparseQR_solve': solves a linear system using the object
+    returned by \newline \verb'SuiteSparseQR_factorize' or
+    \verb'SuiteSparseQR_numeric', namely \verb"x=R\b", \newline \verb"x=P*R\b",
+    \verb"x=R'\b", or \verb"x=R'\(P'*b)".
+
+    \item \verb'SuiteSparseQR_qmult': provides the same function as
+    \verb'spqr_qmult' in the MATLAB interface, computing \verb"Q*x",
+    \verb"Q'*x", \verb"x*Q", or \verb"x*Q'".  It uses either a QR factorization
+    in MATLAB-style sparse matrix format, or the QR factorization object
+    returned by \newline \verb'SuiteSparseQR_factorize' or
+    \verb'SuiteSparseQR_numeric'.
+
+    \item \verb'SuiteSparseQR_min2norm': finds the minimum 2-norm solution to
+    an underdetermined linear system.
+
+    \item \verb'SuiteSparseQR_free': frees the QR factorization object.
+
+\end{enumerate}
+
+%-------------------------------------------------------------------------------
+\subsection{Details of the C/C++ Syntax}
+%-------------------------------------------------------------------------------
+
+For further details of how to use the C/C++ syntax, please refer to the
+definitions and descriptions in the following files:
+
+\begin{enumerate}
+\item \verb'SuiteSparse/SPQR/Include/SuiteSparseQR.hpp' describes each
+C++ function.  Both \verb'double' and \verb'std::complex<double>' matrices
+are supported.
+
+\item \verb'SuiteSparse/SPQR/Include/SuiteSparseQR_definitions.h' describes
+definitions \newline common to both C and C++ functions.  For example, each of
+the ordering methods is given a \verb'#define''d name.  The default is
+\verb'ordering = SPQR_ORDERING_DEFAULT', and the default tolerance is given by
+\verb'tol = SPQR_DEFAULT_TOL'.
+
+\item \verb'SuiteSparse/SPQR/Include/SuiteSparseQR_C.h' describes
+the C-callable functions.
+
+\end{enumerate}
+
+Most of the packages in SuiteSparse come in multiple versions with different
+sized integers.  The first is the plain C/C++ \verb'int'.  The second the
+\verb'SuiteSparse_long' integer, defined in the
+\verb'SuiteSparse/SuiteSparse_config/SuiteSparse_config.h'
+file.  This integer is \verb'long' except on a Windows-64 platform for which it
+is the  \verb'__int64' type.  The intent of \verb'SuiteSparse_long'
+is that it should be
+32-bits on a 32-bit platform, and 64-bits on a 64-bit platform.  
+
+By contrast, SuiteSparseQR only provides a \verb'SuiteSparse_long' version.
+Most users (except Windows-64) can simply use \verb'long' as the basic integer
+type passed to and returned from SuiteSparseQR.
+
+The C/C++ options corresponding to the MATLAB \verb'opts' parameters and the
+contents of the optional \verb'info' output of \verb'spqr_solve' are described
+below.  Let \verb'cc' be the CHOLMOD \verb'Common' object, containing parameter
+settings and statistics.  All are of type \verb'double', except for
+\verb'SPQR_istat' which is \verb'SuiteSparse_long',
+\verb'cc->memory_usage' which is
+\verb'size_t', and \verb'cc->SPQR_nthreads' which is \verb'int'.  Parameters
+include:
+
+\vspace{0.1in}
+{\footnotesize
+\begin{tabular}{|ll|}
+\hline
+\verb'cc->SPQR_grain' & the same as \verb'opts.grain' in the MATLAB interface \\
+\verb'cc->SPQR_small' & the same as \verb'opts.small' in the MATLAB interface \\
+\verb'cc->SPQR_nthreads'
+    & the same as \verb'opts.nthreads' in the MATLAB interface \\
+\hline
+\end{tabular}
+}
+\vspace{0.1in}
+
+Other parameters, such as \verb'opts.ordering' and \verb'opts.tol',
+are input parameters to the various C/C++ functions.  Others such as
+\verb"opts.solution='min2norm'" are separate functions in the C/C++
+interface.  Refer to the files listed above for details.
+Output statistics include:
+
+\vspace{0.1in}
+{\footnotesize
+\begin{tabular}{|ll|}
+\hline
+\verb'cc->SPQR_flopcount_bound' & an upper bound on the flop count \\
+\verb'cc->SPQR_tol_used' & the tolerance used (\verb'opts.tol') \\
+\hline
+\verb'cc->SPQR_istat [0]' & upper bound on \verb'nnz(R)' \\
+\verb'cc->SPQR_istat [1]' & upper bound on \verb'nnz(H)' \\
+\verb'cc->SPQR_istat [2]' & number of frontal matrices \\
+\verb'cc->SPQR_istat [3]' & number of TBB tasks \\
+\verb'cc->SPQR_istat [4]' & estimate of the rank of \verb'A' \\
+\verb'cc->SPQR_istat [5]' & number of column singletons \\
+\verb'cc->SPQR_istat [6]' & number of row singletons \\
+\verb'cc->SPQR_istat [7]' & ordering used \\
+\hline
+\verb'cc->memory_usage'   & memory used, in bytes \\
+\hline
+\end{tabular}
+}
+\vspace{0.1in}
+
+The upper bound on the flop count is found in the analysis phase, which ignores
+the numerical values of \verb'A' (the same analysis phase operates on both real
+and complex matrices).  Thus, if you are factorizing a complex matrix, multiply
+this statistic by 4.
+
+%-------------------------------------------------------------------------------
+\section{GPU acceleration}
+\label{GPU}
+%-------------------------------------------------------------------------------
+
+As of version 2.0.0, SuiteSparseQR now includes GPU acceleration.
+It can exploit a single NVIDIA GPU, via CUDA.  To enable GPU acceleration,
+you must compile SuiteSparseQR with non-default options.  See the
+\verb'SuiteSparse_config_GPU_gcc.mk' file in the \verb'SuiteSparse_config'
+directory for details.  The packages SuiteSparse\_GPURuntime and
+GPUQREngine are also required (they should appear in the SuiteSparse 
+directory, along with SPQR).
+
+At run time, you must also enable the GPU by setting \verb'Common->useGPU'
+to \verb'true'.  Before calling any SuiteSparseQR function, you must
+poll the GPU to set the available memory.  Below is a sample code
+that initializes CHOLMOD and then polls the GPU for use in SuiteSparseQR.
+
+\begin{verbatim}
+    size_t total_mem, available_mem ;
+    cholmod_common *cc, Common ;
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+    cc->useGPU = true ;
+    cholmod_l_gpu_memorysize (&total_mem, &available_mem, cc) ;
+    cc->gpuMemorySize = available_mem ;
+    if (cc->gpuMemorySize <= 1)
+    {
+        printf ("no GPU available\n") ;
+    }
+
+    // Subsequent calls to SuiteSparseQR will use the GPU, if available
+\end{verbatim}
+
+See \verb'Demo/qrdemo_gpu.cpp' for an extended example, which can be
+compiled via \verb'make gpu' in the \verb'Demo' directory.
+
+GPU acceleration is not yet available via the MATLAB mexFunction interface. 
+We expect to include this in a future release.
+
+This GPU acceleration in SuiteSparseQR has been heavily tested and we feel that
+it is now polished enough to appear in SuiteSparse.  However, we are also
+actively developing this code, so future enhancements are expected.
+
+For a detailed technical report on the GPU-accelerated algorithm,
+see \verb'qrgpu_paper.pdf' in the \verb'Doc' directory.
+
+%-------------------------------------------------------------------------------
+\section{Requirements and Availability}
+\label{summary}
+%-------------------------------------------------------------------------------
+
+SuiteSparseQR requires four prior Collected Algorithms of the ACM: CHOLMOD
+\cite{ChenDavisHagerRajamanickam09,DavisHager09} (version 1.7 or later), AMD
+\cite{AmestoyDavisDuff96,AmestoyDavisDuff03}, and COLAMD
+\cite{DavisGilbertLarimoreNg00_algo,DavisGilbertLarimoreNg00} for its
+ordering/analysis phase and for its basic sparse matrix data structure, and the
+BLAS \cite{dddh:90} for dense matrix computations on its frontal matrices; also
+required is LAPACK \cite{LAPACK} for its Householder reflections.  An efficient
+implementation of the BLAS is strongly recommended, either vendor-provided
+(such as the Intel MKL, the AMD ACML, or the Sun Performance Library) or other
+high-performance BLAS such as those of \cite{GotoVanDeGeijn08}.
+
+The use of Intel's Threading Building Blocks is optional \cite{Reinders07}, but
+without it, only parallelism within the BLAS can be exploited (if available).
+Suite\-SparseQR can optionally use METIS 4.0.1 \cite{KarypisKumar98e} and two
+constrained minimum degree ordering algorithms, CCOLAMD and CAMD
+\cite{ChenDavisHagerRajamanickam09}, for its fill-reducing ordering options.
+SuiteSparseQR can be compiled without these ordering methods and without TBB.
+
+In addition to appearing as Collected Algorithm 8xx of the ACM, SuiteSparseQR
+is available at
+\htmladdnormallink{http://www.suitesparse.com}{http://www.suitesparse.com}
+and at MATLAB Central
+in the user-contributed File Exchange (
+\htmladdnormallink{http://www.mathworks.com/matlabcentral}{http://www.mathworks.com/matlabcentral}
+).
+SuiteSparseQR is licensed under the GNU GPL.  Commercial licenses are also
+available; contact the author for details.
+
+%-------------------------------------------------------------------------------
+% References
+%-------------------------------------------------------------------------------
+
+\bibliographystyle{plain}
+\bibliography{spqr_user_guide}
+\end{document}
+
diff --git a/SPQR/Include/SuiteSparseQR.hpp b/SPQR/Include/SuiteSparseQR.hpp
new file mode 100644
index 0000000..e7d8163
--- /dev/null
+++ b/SPQR/Include/SuiteSparseQR.hpp
@@ -0,0 +1,644 @@
+// =============================================================================
+// === SuiteSparseQR.hpp =======================================================
+// =============================================================================
+
+// User include file for C++ programs.
+
+#ifndef SUITESPARSEQR_H
+#define SUITESPARSEQR_H
+
+// -----------------------------------------------------------------------------
+// include files
+// -----------------------------------------------------------------------------
+
+extern "C"
+{
+#include "SuiteSparseQR_definitions.h"
+#include "cholmod.h"
+}
+
+// =============================================================================
+// === spqr_gpu ================================================================
+// =============================================================================
+
+struct spqr_gpu
+{
+    SuiteSparse_long *RimapOffsets;      // Stores front offsets into Rimap
+    SuiteSparse_long RimapSize;          // Allocated space for in Rimap
+
+    SuiteSparse_long *RjmapOffsets;      // Stores front offsets into Rjmap
+    SuiteSparse_long RjmapSize;          // Allocated space for Rjmap
+
+    SuiteSparse_long numStages;          // # of Stages required to factorize
+    SuiteSparse_long *Stagingp;          // Pointers into Post for boundaries
+    SuiteSparse_long *StageMap;          // Mapping of front to stage #
+    size_t *FSize;                       // Total size of fronts in a stage
+    size_t *RSize;                       // Total size of R+C for a stage
+    size_t *SSize;                       // Total size of S for a stage
+    SuiteSparse_long *FOffsets;          // F Offsets relative to a base
+    SuiteSparse_long *ROffsets;          // R Offsets relative to a base
+    SuiteSparse_long *SOffsets;          // S Offsets relative to a base
+};
+
+// =============================================================================
+// === spqr_symbolic ===========================================================
+// =============================================================================
+
+// The contents of this object do not change during numeric factorization.  The
+// Symbolic object depends only on the pattern of the input matrix, and not its
+// values.  These contents also do not change with column pivoting for rank
+// detection.  This makes parallelism easier to manage, since all threads can
+// have access to this object without synchronization.
+//
+// The total size of the Symbolic object is (10 + 2*m + anz + 2*n + 5*nf + rnz)
+// Long's, where the user's input A matrix is m-by-n with anz nonzeros, nf <=
+// MIN(m,n) is the number of frontal matrices, and rnz <= nnz(R) is the number
+// of column indices used to represent the supernodal form of R (one Long per
+// non-pivotal column index in the leading row of each block of R).
+
+struct spqr_symbolic
+{
+
+    // -------------------------------------------------------------------------
+    // row-form of the input matrix and its permutations
+    // -------------------------------------------------------------------------
+
+    // During symbolic analysis, the nonzero pattern of S = A(P,Q) is
+    // constructed, where A is the user's input matrix.  Its numerical values
+    // are also constructed, but they do not become part of the Symbolic
+    // object.  The matrix S is stored in row-oriented form.  The rows of S are
+    // sorted according to their leftmost column index (via PLinv).  Column
+    // indices in each row of S are in strictly ascending order, even though
+    // the input matrix A need not be sorted.
+
+    SuiteSparse_long m, n, anz ; // S is m-by-n with anz entries
+
+    SuiteSparse_long *Sp ;       // size m+1, row pointers of S
+
+    SuiteSparse_long *Sj ;       // size anz = Sp [n], column indices of S
+
+    SuiteSparse_long *Qfill ;    // size n, fill-reducing column permutation.
+                        // Qfill [k] = j if column k of A is column j of S.
+
+    SuiteSparse_long *PLinv ;    // size m, inverse row permutation that places
+                        // S=A(P,Q) in increasing order of leftmost column
+                        // index.  PLinv [i] = k if row i of A is row k of S.
+
+    SuiteSparse_long *Sleft ;    // size n+2.  The list of rows of S whose
+            // leftmost column index is j is given by
+            // Sleft [j] ... Sleft [j+1]-1.  This can be empty (that is, Sleft
+            // [j] can equal Sleft [j+1]).  Sleft [n] is the number of
+            // non-empty rows of S, and Sleft [n+1] == m.  That is, Sleft [n]
+            // ... Sleft [n+1]-1 gives the empty rows of S, if any.
+
+    // -------------------------------------------------------------------------
+    // frontal matrices: pattern and tree
+    // -------------------------------------------------------------------------
+
+    // Each frontal matrix is fm-by-fn, with fnpiv pivot columns.  The fn
+    // column indices are given by a set of size fnpiv pivot columns, defined
+    // by Super, followed by the pattern Rj [ Rp[f] ...  Rp[f+1]-1 ].
+
+    // The row indices of the front are not kept.  If the Householder vectors
+    // are not kept, the row indices are not needed.  If the Householder
+    // vectors are kept, the row indices are computed dynamically during
+    // numerical factorization.
+
+    SuiteSparse_long nf ;        // number of frontal matrices; nf <= MIN (m,n)
+    SuiteSparse_long maxfn ;     // max # of columns in any front
+
+    // parent, child, and childp define the row merge tree or etree (A'A)
+    SuiteSparse_long *Parent ;   // size nf+1
+    SuiteSparse_long *Child ;    // size nf+1
+    SuiteSparse_long *Childp ;   // size nf+2
+
+    // The parent of a front f is Parent [f], or EMPTY if f=nf.
+    // A list of children of f can be obtained in the list
+    // Child [Childp [f] ... Childp [f+1]-1].
+
+    // Node nf in the tree is a placeholder; it does not represent a frontal
+    // matrix.  All roots of the frontal "tree" (may be a forest) have the
+    // placeholder node nf as their parent.  Thus, the tree of nodes 0:nf is
+    // truly a tree, with just one parent (node nf).
+
+    SuiteSparse_long *Super ;    // size nf+1.  Super [f] gives the first
+        // pivot column in the front F.  This refers to a column of S.  The
+        // number of expected pivot columns in F is thus
+        // Super [f+1] - Super [f].
+
+    SuiteSparse_long *Rp ;       // size nf+1
+    SuiteSparse_long *Rj ;       // size rjsize; compressed supernodal form of R
+
+    SuiteSparse_long *Post ;     // size nf+1, post ordering of frontal tree.
+                        // f=Post[k] gives the kth node in the postordered tree
+
+    SuiteSparse_long rjsize ;    // size of Rj
+
+    SuiteSparse_long do_rank_detection ; // TRUE: allow for tol >= 0.
+                                         // FALSE: ignore tol
+
+    // the rest depends on whether or not rank-detection is allowed:
+    SuiteSparse_long maxstack  ; // max stack size (sequential case)
+    SuiteSparse_long hisize ;    // size of Hii
+
+    SuiteSparse_long keepH ;     // TRUE if H is present
+
+    SuiteSparse_long *Hip ;      // size nf+1.  If H is kept, the row indices
+        // of frontal matrix f are in Hii [Hip [f] ... Hip [f] + Hm [f]],
+        // where Hii and Hm are stored in the numeric object.
+
+        // There is one block row of R per frontal matrix.
+        // The fn column indices of R are given by Rj [Rp [f] ... Rp [f+1]-1],
+        // where the first fp column indices are Super [f] ... Super [f+1]-1.
+        // The remaining column indices in Rj [...] are non-pivotal, and are
+        // in the range Super [f+1] to n.  The number of rows of R is at
+        // most fp, but can be less if dead columns appear in the matrix.
+        // The number of columns in the contribution block C is always
+        // cn = fn - fp, where fn = Rp [f+1] - Rp [f].
+
+    SuiteSparse_long ntasks ;    // number of tasks in task graph
+    SuiteSparse_long ns ;        // number of stacks
+
+    // -------------------------------------------------------------------------
+    // the rest of the QR symbolic object is present only if ntasks > 1
+    // -------------------------------------------------------------------------
+
+    // Task tree (nodes 0:ntasks), including placeholder node
+    SuiteSparse_long *TaskChildp ;       // size ntasks+2
+    SuiteSparse_long *TaskChild ;        // size ntasks+1
+
+    SuiteSparse_long *TaskStack ;        // size ntasks+1
+
+    // list of fronts for each task
+    SuiteSparse_long *TaskFront ;        // size nf+1
+    SuiteSparse_long *TaskFrontp  ;      // size ntasks+2
+
+    SuiteSparse_long *On_stack  ;        // size nf+1, front f is on
+                                         // stack On_stack [f]
+
+    // size of each stack
+    SuiteSparse_long *Stack_maxstack ;   // size ns+2
+
+    // number of rows for each front
+    SuiteSparse_long *Fm ;               // size nf+1
+
+    // number of rows in the contribution block of each front
+    SuiteSparse_long *Cm ;               // size nf+1
+
+    // from CHOLMOD's supernodal analysis, needed for GPU factorization
+    size_t maxcsize ;
+    size_t maxesize ;
+    SuiteSparse_long *ColCount ;
+    // SuiteSparse_long *px ;
+
+    // -------------------------------------------------------------------------
+    // GPU structure
+    // -------------------------------------------------------------------------
+
+    // This is NULL if the GPU is not in use.  The GPU must be enabled at
+    // compile time (-DGPU_BLAS enables the GPU).  If the Householder vectors
+    // are requested, if TBB is used (Common->SPQR_grain > 1), or if rank
+    // detection is requested, then the GPU is disabled.
+
+    spqr_gpu *QRgpu ;
+
+} ;
+
+
+// =============================================================================
+// === spqr_numeric ============================================================
+// =============================================================================
+
+// The Numeric object contains the numerical values of the triangular/
+// trapezoidal factor R, and optionally the Householder vectors H if they
+// are kept.
+
+template <typename Entry> struct spqr_numeric
+{
+
+    // -------------------------------------------------------------------------
+    // Numeric R factor
+    // -------------------------------------------------------------------------
+
+    Entry **Rblock ;    // size nf.  R [f] is an (Entry *) pointer to the
+                        // R block for front F.  It is an upper trapezoidal
+                        // of size Rm(f)-by-Rn(f), but only the upper
+                        // triangular part is stored in column-packed format.
+
+    Entry **Stacks ;    // size ns; an array of stacks holding the R and H
+                        // factors and the current frontal matrix F at the head.
+                        // This is followed by empty space, then the C blocks of
+                        // prior frontal matrices at the bottom.  When the
+                        // factorization is complete, only the R and H part at
+                        // the head of each stack is left.
+
+    SuiteSparse_long *Stack_size ;   // size ns; Stack_size [s] is the size
+                                     // of Stacks [s]
+
+    SuiteSparse_long hisize ;        // size of Hii
+
+    SuiteSparse_long n ;             // A is m-by-n
+    SuiteSparse_long m ;
+    SuiteSparse_long nf ;            // number of frontal matrices
+    SuiteSparse_long ntasks ;        // # of tasks in task graph actually used
+    SuiteSparse_long ns ;            // number of stacks actually used
+    SuiteSparse_long maxstack ;      // size of sequential stack, if used
+
+    // -------------------------------------------------------------------------
+    // for rank detection and m < n case
+    // -------------------------------------------------------------------------
+
+    char *Rdead ;       // size n, Rdead [k] = 1 if k is a dead pivot column,
+                        // Rdead [k] = 0 otherwise.  If no columns are dead,
+                        // this is NULL.  If m < n, then at least m-n columns
+                        // will be dead.
+
+    SuiteSparse_long rank ;      // number of live pivot columns
+    SuiteSparse_long rank1 ;     // number of live pivot columns in first ntol
+                                 // columns of A
+
+    SuiteSparse_long maxfrank ;  // max number of rows in any R block
+
+    double norm_E_fro ; // 2-norm of w, the vector of dead column 2-norms
+
+    // -------------------------------------------------------------------------
+    // for keeping Householder vectors
+    // -------------------------------------------------------------------------
+
+    // The factorization is R = (H_s * ... * H_2 * H_1) * P_H
+    // where P_H is the permutation HPinv, and H_1, ... H_s are the Householder
+    // vectors (s = rjsize).
+
+    SuiteSparse_long keepH ;     // TRUE if H is present
+
+    SuiteSparse_long rjsize ;    // size of Hstair and HTau
+
+    SuiteSparse_long *HStair ;   // size rjsize.  The list Hstair [Rp [f] ...
+                        // Rp [f+1]-1] gives the staircase for front F
+
+    Entry *HTau ;       // size rjsize.  The list HTau [Rp [f] ... Rp [f+1]-1]
+                        // gives the Householder coefficients for front F
+
+    SuiteSparse_long *Hii ;      // size hisize, row indices of H.
+
+    SuiteSparse_long *HPinv ;    // size m.  HPinv [i] = k if row i of A and H
+                        // is row k of R.  This permutation includes
+                        // QRsym->PLinv, and the permutation constructed via
+                        // pivotal row ordering during factorization.
+
+    SuiteSparse_long *Hm ;       // size nf, Hm [f] = # of rows in front F
+    SuiteSparse_long *Hr ;       // size nf, Hr [f] = # of rows in R block of
+                                 // front F
+    SuiteSparse_long maxfm ;     // max (Hm [0:nf-1]), computed only if H kept
+
+} ;
+
+
+// =============================================================================
+// === SuiteSparseQR_factorization =============================================
+// =============================================================================
+
+// A combined symbolic+numeric QR factorization of A or [A B],
+// with singletons
+
+template <typename Entry> struct SuiteSparseQR_factorization
+{
+
+    // QR factorization of A or [A Binput] after singletons have been removed
+    double tol ;        // tol used
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+
+    // singletons, in compressed-row form; R is n1rows-by-n
+    SuiteSparse_long *R1p ;      // size n1rows+1
+    SuiteSparse_long *R1j ;
+    Entry *R1x ;
+    SuiteSparse_long r1nz ;      // nnz (R1)
+
+    // combined singleton and fill-reducing permutation
+    SuiteSparse_long *Q1fill ;
+    SuiteSparse_long *P1inv ;
+    SuiteSparse_long *HP1inv ;   // NULL if n1cols == 0, in which case
+                        // QRnum->HPinv serves in its place.
+
+    // Rmap and RmapInv are NULL if QR->rank == A->ncol
+    SuiteSparse_long *Rmap ;     // size n.  Rmap [j] = k if column j of R is
+                        // the kth live column and where k < QR->rank;
+                        // otherwise, if j is a dead column, then
+                        // k >= QR->rank.
+
+    SuiteSparse_long *RmapInv ;
+
+    SuiteSparse_long n1rows ;    // number of singleton rows of [A B]
+    SuiteSparse_long n1cols ;    // number of singleton columns of [A B]
+
+    SuiteSparse_long narows ;    // number of rows of A
+    SuiteSparse_long nacols ;    // number of columns of A
+    SuiteSparse_long bncols ;    // number of columns of B
+    SuiteSparse_long rank ;      // rank estimate of A (n1rows + QRnum->rank1),
+                                 // ranges from 0 to min(m,n)
+
+    int allow_tol ;     // if TRUE, do rank detection
+} ;
+
+
+// =============================================================================
+// === Simple user-callable SuiteSparseQR functions ============================
+// =============================================================================
+
+//  SuiteSparseQR           Sparse QR factorization and solve
+//  SuiteSparseQR_qmult     Q*X, Q'*X, X*Q, or X*Q' for X full or sparse
+
+// returns rank(A) estimate, or EMPTY on failure
+template <typename Entry> SuiteSparse_long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // only accept singletons above tol
+
+    SuiteSparse_long econ,  // number of rows of C and R to return; a value
+                            // less than the rank r of A is treated as r, and
+                            // a value greater than m is treated as m.
+
+    int getCTX,             // if 0: return Z = C of size econ-by-bncols
+                            // if 1: return Z = C' of size bncols-by-econ
+                            // if 2: return Z = X of size econ-by-bncols
+
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // B is either sparse or dense.  If Bsparse is non-NULL, B is sparse and
+    // Bdense is ignored.  If Bsparse is NULL and Bdense is non-NULL, then B is
+    // dense.  B is not present if both are NULL.
+    cholmod_sparse *Bsparse,
+    cholmod_dense *Bdense,
+
+    // output arrays, neither allocated nor defined on input.
+
+    // Z is the matrix C, C', or X
+    cholmod_sparse **Zsparse,
+    cholmod_dense  **Zdense,
+    cholmod_sparse **R,     // the R factor
+    SuiteSparse_long **E,   // size n; fill-reducing ordering of A.
+    cholmod_sparse **H,     // the Householder vectors (m-by-nh)
+    SuiteSparse_long **HPinv,// size m; row permutation for H
+    cholmod_dense **HTau,   // size nh, Householder coefficients
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// X = A\dense(B)
+template <typename Entry> cholmod_dense *SuiteSparseQR
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// X = A\dense(B) using default ordering and tolerance
+template <typename Entry> cholmod_dense *SuiteSparseQR
+(
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// X = A\sparse(B)
+template <typename Entry> cholmod_sparse *SuiteSparseQR
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// [Q,R,E] = qr(A), returning Q as a sparse matrix
+template <typename Entry> SuiteSparse_long SuiteSparseQR
+    // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    SuiteSparse_long econ,
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **Q,     // m-by-e sparse matrix where e=max(econ,rank(A))
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    SuiteSparse_long **E,   // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// [Q,R,E] = qr(A), discarding Q
+template <typename Entry> SuiteSparse_long SuiteSparseQR
+    // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    SuiteSparse_long econ,
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    SuiteSparse_long **E,   // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// [C,R,E] = qr(A,B), where C and B are dense
+template <typename Entry> SuiteSparse_long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // only accept singletons above tol
+    SuiteSparse_long econ,  // number of rows of C and R to return
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs dense matrix
+    // outputs
+    cholmod_dense  **C,     // C = Q'*B, an e-by-nrhs dense matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    SuiteSparse_long **E,   // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// [C,R,E] = qr(A,B), where C and B are sparse
+template <typename Entry> SuiteSparse_long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // only accept singletons above tol
+    SuiteSparse_long econ,  // number of rows of C and R to return
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs sparse matrix
+    // outputs
+    cholmod_sparse **C,     // C = Q'*B, an e-by-nrhs sparse matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    SuiteSparse_long **E,   // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// [Q,R,E] = qr(A) where Q is returned in Householder form
+template <typename Entry> SuiteSparse_long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // only accept singletons above tol
+    SuiteSparse_long econ,  // number of rows of C and R to return
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // the R factor
+    SuiteSparse_long **E,   // permutation of 0:n-1, NULL if identity
+    cholmod_sparse **H,     // the Householder vectors (m-by-nh)
+    SuiteSparse_long **HPinv,// size m; row permutation for H
+    cholmod_dense **HTau,   // size nh, Householder coefficients
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// =============================================================================
+// === SuiteSparseQR_qmult =====================================================
+// =============================================================================
+
+// This function takes as input the matrix Q in Householder form, as returned
+// by SuiteSparseQR (... H, HPinv, HTau, cc) above.
+
+// returns Y of size m-by-n (NULL on failure)
+template <typename Entry> cholmod_dense *SuiteSparseQR_qmult
+(
+    // inputs, no modified
+    int method,         // 0,1,2,3
+    cholmod_sparse *H,      // either m-by-nh or n-by-nh
+    cholmod_dense *HTau,    // size 1-by-nh
+    SuiteSparse_long *HPinv,// size mh
+    cholmod_dense *Xdense,  // size m-by-n
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> cholmod_sparse *SuiteSparseQR_qmult
+(
+    // inputs, no modified
+    int method,             // 0,1,2,3
+    cholmod_sparse *H,      // either m-by-nh or n-by-nh
+    cholmod_dense *HTau,    // size 1-by-nh
+    SuiteSparse_long *HPinv,// size mh
+    cholmod_sparse *X,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+// === Expert user-callable SuiteSparseQR functions ============================
+// =============================================================================
+
+#ifndef NEXPERT
+
+// These functions are "expert" routines, allowing reuse of the QR
+// factorization for different right-hand-sides.  They also allow the user to
+// find the minimum 2-norm solution to an undertermined system of equations.
+
+template <typename Entry>
+SuiteSparseQR_factorization <Entry> *SuiteSparseQR_factorize
+(
+    // inputs, not modified:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> cholmod_dense *SuiteSparseQR_solve    // returns X
+(
+    // inputs, not modified:
+    int system,                 // which system to solve
+    SuiteSparseQR_factorization <Entry> *QR, // of an m-by-n sparse matrix A
+    cholmod_dense *B,           // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> cholmod_sparse *SuiteSparseQR_solve    // returns X
+(
+    // inputs, not modified:
+    int system,                 // which system to solve (0,1,2,3)
+    SuiteSparseQR_factorization <Entry> *QR, // of an m-by-n sparse matrix A
+    cholmod_sparse *Bsparse,    // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// returns Y of size m-by-n, or NULL on failure
+template <typename Entry> cholmod_dense *SuiteSparseQR_qmult
+(
+    // inputs, not modified
+    int method,                 // 0,1,2,3 (same as SuiteSparseQR_qmult)
+    SuiteSparseQR_factorization <Entry> *QR, // of an m-by-n sparse matrix A
+    cholmod_dense *Xdense,      // size m-by-n with leading dimension ldx
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// returns Y of size m-by-n, or NULL on failure
+template <typename Entry> cholmod_sparse *SuiteSparseQR_qmult
+(
+    // inputs, not modified
+    int method,                 // 0,1,2,3
+    SuiteSparseQR_factorization <Entry> *QR, // of an m-by-n sparse matrix A
+    cholmod_sparse *Xsparse,    // size m-by-n
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// free the QR object
+template <typename Entry> int SuiteSparseQR_free
+(
+    SuiteSparseQR_factorization <Entry> **QR, // of an m-by-n sparse matrix A
+    cholmod_common *cc
+) ;
+
+// find the min 2-norm solution to a sparse linear system
+template <typename Entry> cholmod_dense *SuiteSparseQR_min2norm
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_dense *B,
+    cholmod_common *cc
+) ;
+
+template <typename Entry> cholmod_sparse *SuiteSparseQR_min2norm
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_sparse *B,
+    cholmod_common *cc
+) ;
+
+// symbolic QR factorization; no singletons exploited
+template <typename Entry>
+SuiteSparseQR_factorization <Entry> *SuiteSparseQR_symbolic
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    int allow_tol,          // if FALSE, tol is ignored by the numeric
+                            // factorization, and no rank detection is performed
+    cholmod_sparse *A,      // sparse matrix to factorize (A->x ignored)
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// numeric QR factorization;
+template <typename Entry> int SuiteSparseQR_numeric
+(
+    // inputs:
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // input/output
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+#endif
+
+#endif
diff --git a/SPQR/Include/SuiteSparseQR_C.h b/SPQR/Include/SuiteSparseQR_C.h
new file mode 100644
index 0000000..a0a8036
--- /dev/null
+++ b/SPQR/Include/SuiteSparseQR_C.h
@@ -0,0 +1,220 @@
+/* ========================================================================== */
+/* === SuiteSparseQR_C.h ==================================================== */
+/* ========================================================================== */
+
+/* For inclusion in a C or C++ program. */
+
+#ifndef SUITESPARSEQR_C_H
+#define SUITESPARSEQR_C_H
+
+#ifdef __cplusplus
+/* If included by a C++ program, the Complex type is std::complex<double> */
+#include <complex>
+#define Complex std::complex<double>
+extern "C" {
+#endif
+
+#include "cholmod.h"
+#include "SuiteSparseQR_definitions.h"
+
+#ifndef __cplusplus
+/* The C++ functions will return a pointer to a std::complex<double> array of
+   size n, which the C code must then interpret as double array of size 2*n,
+   with real and imaginary parts interleaved. */
+#define Complex double
+#endif
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C ====================================================== */
+/* ========================================================================== */
+
+SuiteSparse_long SuiteSparseQR_C /* returns rank(A) estimate, (-1) if failure */
+(
+    /* inputs: */
+    int ordering,               /* all, except 3:given treated as 0:fixed */
+    double tol,                 /* columns with 2-norm <= tol treated as 0 */
+    SuiteSparse_long econ,      /* e = max(min(m,econ),rank(A)) */
+    int getCTX,                 /* 0: Z=C (e-by-k), 1: Z=C', 2: Z=X (e-by-k) */
+    cholmod_sparse *A,          /* m-by-n sparse matrix to factorize */
+    cholmod_sparse *Bsparse,    /* sparse m-by-k B */
+    cholmod_dense  *Bdense,     /* dense  m-by-k B */
+    /* outputs: */
+    cholmod_sparse **Zsparse,   /* sparse Z */
+    cholmod_dense  **Zdense,    /* dense Z */
+    cholmod_sparse **R,         /* e-by-n sparse matrix */
+    SuiteSparse_long **E,       /* size n column perm, NULL if identity */
+    cholmod_sparse **H,         /* m-by-nh Householder vectors */
+    SuiteSparse_long **HPinv,   /* size m row permutation */
+    cholmod_dense **HTau,       /* 1-by-nh Householder coefficients */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_QR =================================================== */
+/* ========================================================================== */
+
+/* [Q,R,E] = qr(A), returning Q as a sparse matrix */
+SuiteSparse_long SuiteSparseQR_C_QR /* returns rank(A) est., (-1) if failure */
+(
+    /* inputs: */
+    int ordering,               /* all, except 3:given treated as 0:fixed */
+    double tol,                 /* columns with 2-norm <= tol treated as 0 */
+    SuiteSparse_long econ,      /* e = max(min(m,econ),rank(A)) */
+    cholmod_sparse *A,          /* m-by-n sparse matrix to factorize */
+    /* outputs: */
+    cholmod_sparse **Q,         /* m-by-e sparse matrix */
+    cholmod_sparse **R,         /* e-by-n sparse matrix */
+    SuiteSparse_long **E,       /* size n column perm, NULL if identity */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_backslash ============================================ */
+/* ========================================================================== */
+
+/* X = A\B where B is dense */
+cholmod_dense *SuiteSparseQR_C_backslash    /* returns X, NULL if failure */
+(
+    int ordering,               /* all, except 3:given treated as 0:fixed */
+    double tol,                 /* columns with 2-norm <= tol treated as 0 */
+    cholmod_sparse *A,          /* m-by-n sparse matrix */
+    cholmod_dense  *B,          /* m-by-k */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_backslash_default ==================================== */
+/* ========================================================================== */
+
+/* X = A\B where B is dense, using default ordering and tol */
+cholmod_dense *SuiteSparseQR_C_backslash_default /* returns X, NULL if failure*/
+(
+    cholmod_sparse *A,          /* m-by-n sparse matrix */
+    cholmod_dense  *B,          /* m-by-k */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_backslash_sparse ===================================== */
+/* ========================================================================== */
+
+/* X = A\B where B is sparse */
+cholmod_sparse *SuiteSparseQR_C_backslash_sparse   /* returns X, or NULL */
+(
+    /* inputs: */
+    int ordering,               /* all, except 3:given treated as 0:fixed */
+    double tol,                 /* columns with 2-norm <= tol treated as 0 */
+    cholmod_sparse *A,          /* m-by-n sparse matrix */
+    cholmod_sparse *B,          /* m-by-k */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+#ifndef NEXPERT
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_factorization ======================================== */
+/* ========================================================================== */
+
+/* A real or complex QR factorization, computed by SuiteSparseQR_C_factorize */
+typedef struct SuiteSparseQR_C_factorization_struct
+{
+    int xtype ;                 /* CHOLMOD_REAL or CHOLMOD_COMPLEX */
+    void *factors ;             /* from SuiteSparseQR_factorize <double> or
+                                        SuiteSparseQR_factorize <Complex> */
+
+} SuiteSparseQR_C_factorization ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_factorize ============================================ */
+/* ========================================================================== */
+
+SuiteSparseQR_C_factorization *SuiteSparseQR_C_factorize
+(
+    /* inputs: */
+    int ordering,               /* all, except 3:given treated as 0:fixed */
+    double tol,                 /* columns with 2-norm <= tol treated as 0 */
+    cholmod_sparse *A,          /* m-by-n sparse matrix */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_symbolic ============================================= */
+/* ========================================================================== */
+
+SuiteSparseQR_C_factorization *SuiteSparseQR_C_symbolic
+(
+    /* inputs: */
+    int ordering,               /* all, except 3:given treated as 0:fixed */
+    int allow_tol,              /* if TRUE allow tol for rank detection */
+    cholmod_sparse *A,          /* m-by-n sparse matrix, A->x ignored */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_numeric ============================================== */
+/* ========================================================================== */
+
+int SuiteSparseQR_C_numeric
+(
+    /* inputs: */
+    double tol,                 /* treat columns with 2-norm <= tol as zero */
+    cholmod_sparse *A,          /* sparse matrix to factorize */
+    /* input/output: */
+    SuiteSparseQR_C_factorization *QR,
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_free ================================================= */
+/* ========================================================================== */
+
+/* Free the QR factors computed by SuiteSparseQR_C_factorize */
+int SuiteSparseQR_C_free        /* returns TRUE (1) if OK, FALSE (0) otherwise*/
+(
+    SuiteSparseQR_C_factorization **QR,
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_solve ================================================ */
+/* ========================================================================== */
+
+cholmod_dense* SuiteSparseQR_C_solve    /* returnx X, or NULL if failure */
+(
+    int system,                 /* which system to solve */
+    SuiteSparseQR_C_factorization *QR,  /* of an m-by-n sparse matrix A */
+    cholmod_dense *B,           /* right-hand-side, m-by-k or n-by-k */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+/* ========================================================================== */
+/* === SuiteSparseQR_C_qmult ================================================ */
+/* ========================================================================== */
+
+/*
+    Applies Q in Householder form (as stored in the QR factorization object
+    returned by SuiteSparseQR_C_factorize) to a dense matrix X.
+
+    method SPQR_QTX (0): Y = Q'*X
+    method SPQR_QX  (1): Y = Q*X
+    method SPQR_XQT (2): Y = X*Q'
+    method SPQR_XQ  (3): Y = X*Q
+*/
+
+cholmod_dense *SuiteSparseQR_C_qmult /* returns Y, or NULL on failure */
+(
+    /* inputs: */
+    int method,                 /* 0,1,2,3 */
+    SuiteSparseQR_C_factorization *QR,  /* of an m-by-n sparse matrix A */
+    cholmod_dense *X,           /* size m-by-n with leading dimension ldx */
+    cholmod_common *cc          /* workspace and parameters */
+) ;
+
+#endif
+
+/* ========================================================================== */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/SPQR/Include/SuiteSparseQR_definitions.h b/SPQR/Include/SuiteSparseQR_definitions.h
new file mode 100644
index 0000000..a76767f
--- /dev/null
+++ b/SPQR/Include/SuiteSparseQR_definitions.h
@@ -0,0 +1,69 @@
+/* ========================================================================== */
+/* === SuiteSparseQR_definitions.h ========================================== */
+/* ========================================================================== */
+
+/* Core definitions for both C and C++ programs. */
+
+#ifndef SUITESPARSEQR_DEFINITIONS_H
+#define SUITESPARSEQR_DEFINITIONS_H
+
+/* ordering options */
+#define SPQR_ORDERING_FIXED 0
+#define SPQR_ORDERING_NATURAL 1
+#define SPQR_ORDERING_COLAMD 2
+#define SPQR_ORDERING_GIVEN 3       /* only used for C/C++ interface */
+#define SPQR_ORDERING_CHOLMOD 4     /* CHOLMOD best-effort (COLAMD, METIS,...)*/
+#define SPQR_ORDERING_AMD 5         /* AMD(A'*A) */
+#define SPQR_ORDERING_METIS 6       /* metis(A'*A) */
+#define SPQR_ORDERING_DEFAULT 7     /* SuiteSparseQR default ordering */
+#define SPQR_ORDERING_BEST 8        /* try COLAMD, AMD, and METIS; pick best */
+#define SPQR_ORDERING_BESTAMD 9     /* try COLAMD and AMD; pick best */
+
+/* Let [m n] = size of the matrix after pruning singletons.  The default
+ * ordering strategy is to use COLAMD if m <= 2*n.  Otherwise, AMD(A'A) is
+ * tried.  If there is a high fill-in with AMD then try METIS(A'A) and take
+ * the best of AMD and METIS.  METIS is not tried if it isn't installed. */
+
+/* tol options */
+#define SPQR_DEFAULT_TOL (-2)       /* if tol <= -2, the default tol is used */
+#define SPQR_NO_TOL (-1)            /* if -2 < tol < 0, then no tol is used */
+
+/* for qmult, method can be 0,1,2,3: */
+#define SPQR_QTX 0
+#define SPQR_QX  1
+#define SPQR_XQT 2
+#define SPQR_XQ  3
+
+/* system can be 0,1,2,3:  Given Q*R=A*E from SuiteSparseQR_factorize: */
+#define SPQR_RX_EQUALS_B    0       /* solve R*X=B      or X = R\B          */
+#define SPQR_RETX_EQUALS_B  1       /* solve R*E'*X=B   or X = E*(R\B)      */
+#define SPQR_RTX_EQUALS_B   2       /* solve R'*X=B     or X = R'\B         */
+#define SPQR_RTX_EQUALS_ETB 3       /* solve R'*X=E'*B  or X = R'\(E'*B)    */
+
+/* ========================================================================== */
+/* === SuiteSparseQR version ================================================ */
+/* ========================================================================== */
+
+/*
+   All versions of SuiteSparseQR will include the following definitions.
+   As an example, to test if the version you are using is 1.3 or later:
+  
+        if (SPQR_VERSION >= SPQR_VER_CODE (1,3)) ...
+  
+   This also works during compile-time:
+  
+        #if SPQR_VERSION >= SPQR_VER_CODE (1,3)
+            printf ("This is version 1.3 or later\n") ;
+        #else
+            printf ("This is version is earlier than 1.3\n") ;
+        #endif
+ */
+
+#define SPQR_DATE "Oct 1, 2014"
+#define SPQR_VER_CODE(main,sub) ((main) * 1000 + (sub))
+#define SPQR_MAIN_VERSION 2
+#define SPQR_SUB_VERSION 0
+#define SPQR_SUBSUB_VERSION 0
+#define SPQR_VERSION SPQR_VER_CODE(SPQR_MAIN_VERSION,SPQR_SUB_VERSION)
+
+#endif
diff --git a/SPQR/Include/spqr.hpp b/SPQR/Include/spqr.hpp
new file mode 100644
index 0000000..b15bd07
--- /dev/null
+++ b/SPQR/Include/spqr.hpp
@@ -0,0 +1,1115 @@
+// =============================================================================
+// === spqr.hpp ================================================================
+// =============================================================================
+
+// Internal definitions and non-user-callable routines.  This should not be
+// included in the user's code.
+
+#ifndef SPQR_INTERNAL_H
+#define SPQR_INTERNAL_H
+
+// -----------------------------------------------------------------------------
+// include files
+// -----------------------------------------------------------------------------
+
+#include "SuiteSparseQR.hpp"
+#include <stdlib.h>
+#include <math.h>
+#include <float.h>
+#include <stdio.h>
+#include <cstring>
+
+#include <complex>
+typedef std::complex<double> Complex ;
+
+// -----------------------------------------------------------------------------
+// debugging and printing control
+// -----------------------------------------------------------------------------
+
+// force debugging off
+#ifndef NDEBUG
+#define NDEBUG
+#endif
+
+// force printing off
+#ifndef NPRINT
+#define NPRINT
+#endif
+
+// uncomment the following line to turn on debugging (SPQR will be slow!)
+/*
+#undef NDEBUG
+*/
+
+// uncomment the following line to turn on printing (LOTS of output!)
+/*
+#undef NPRINT
+*/
+
+// uncomment the following line to turn on expensive debugging (very slow!)
+/*
+#define DEBUG_EXPENSIVE
+*/
+
+// -----------------------------------------------------------------------------
+// Long is defined at SuiteSparse_long, from SuiteSparse_config.h
+// -----------------------------------------------------------------------------
+
+#define Long SuiteSparse_long
+
+// -----------------------------------------------------------------------------
+// basic macros
+// -----------------------------------------------------------------------------
+
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define EMPTY (-1)
+#define TRUE 1
+#define FALSE 0 
+#define IMPLIES(p,q) (!(p) || (q))
+
+// NULL should already be defined, but ensure it is here.
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+// column-major indexing; A[i,j] is A (INDEX (i,j,lda))
+#define INDEX(i,j,lda) ((i) + ((j)*(lda)))
+
+// FLIP is a "negation about -1", and is used to mark an integer i that is
+// normally non-negative.  FLIP (EMPTY) is EMPTY.  FLIP of a number > EMPTY
+// is negative, and FLIP of a number < EMTPY is positive.  FLIP (FLIP (i)) = i
+// for all integers i.  UNFLIP (i) is >= EMPTY.
+#define EMPTY (-1)
+#define FLIP(i) (-(i)-2)
+#define UNFLIP(i) (((i) < EMPTY) ? FLIP (i) : (i))
+
+// -----------------------------------------------------------------------------
+// additional include files
+// -----------------------------------------------------------------------------
+
+#ifdef MATLAB_MEX_FILE
+#include "mex.h"
+#endif
+
+#define ITYPE CHOLMOD_LONG
+#define DTYPE CHOLMOD_DOUBLE
+#define ID SuiteSparse_long_id
+
+// -----------------------------------------------------------------------------
+
+#define ERROR(status,msg) \
+    cholmod_l_error (status, __FILE__, __LINE__, msg, cc)
+
+// Check a pointer and return if null.  Set status to invalid, unless the
+// status is already "out of memory"
+#define RETURN_IF_NULL(A,result) \
+{ \
+    if ((A) == NULL) \
+    { \
+	if (cc->status != CHOLMOD_OUT_OF_MEMORY) \
+	{ \
+	    ERROR (CHOLMOD_INVALID, NULL) ; \
+	} \
+	return (result) ; \
+    } \
+}
+
+// Return if Common is NULL or invalid
+#define RETURN_IF_NULL_COMMON(result) \
+{ \
+    if (cc == NULL) \
+    { \
+	return (result) ; \
+    } \
+    if (cc->itype != ITYPE || cc->dtype != DTYPE) \
+    { \
+	cc->status = CHOLMOD_INVALID ; \
+	return (result) ; \
+    } \
+}
+
+#define RETURN_IF_XTYPE_INVALID(A,result) \
+{ \
+    if (A->xtype != xtype) \
+    { \
+        ERROR (CHOLMOD_INVALID, "invalid xtype") ; \
+        return (result) ; \
+    } \
+}
+
+// -----------------------------------------------------------------------------
+// debugging and printing macros
+// -----------------------------------------------------------------------------
+
+#ifndef NDEBUG
+
+    #ifdef MATLAB_MEX_FILE
+
+        // #define ASSERT(e) mxAssert (e, "error: ")
+
+        extern char spqr_mx_debug_string [200] ;
+        char *spqr_mx_id (int line) ;
+
+        #define ASSERT(e) \
+            ((e) ? (void) 0 : \
+            mexErrMsgIdAndTxt (spqr_mx_id (__LINE__), \
+            "assert: (" #e ") file:"  __FILE__ ))
+
+    #else
+
+        #include <assert.h>
+        #define ASSERT(e) assert (e)
+
+    #endif
+
+    #define DEBUG(e) e
+    #ifdef DEBUG_EXPENSIVE
+        #define DEBUG2(e) e
+        #define ASSERT2(e) ASSERT(e)
+    #else
+        #define DEBUG2(e)
+        #define ASSERT2(e)
+    #endif
+
+#else
+
+    #define ASSERT(e)
+    #define ASSERT2(e)
+    #define DEBUG(e)
+    #define DEBUG2(e)
+
+#endif
+
+#ifndef NPRINT
+
+    #ifdef MATLAB_MEX_FILE
+        #define PR(e) mexPrintf e
+    #else
+        #define PR(e) printf e
+    #endif
+
+    #define PRVAL(e) spqrDebug_print (e)
+
+#else
+
+    #define PR(e)
+    #define PRVAL(e)
+
+#endif
+
+// -----------------------------------------------------------------------------
+// For counting flops; disabled if TBB is used
+// -----------------------------------------------------------------------------
+
+#define FLOP_COUNT(f) { if (cc->SPQR_grain <= 1) cc->SPQR_flopcount += (f) ; }
+
+// =============================================================================
+// === spqr_work ===============================================================
+// =============================================================================
+
+// workspace required for each stack in spqr_factorize and spqr_kernel
+template <typename Entry> struct spqr_work
+{
+    Long *Stair1 ;          // size maxfn if H not kept
+    Long *Cmap ;            // size maxfn
+    Long *Fmap ;            // size n
+    Entry *WTwork ;         // size (fchunk + (keepH ? 0:1)) * maxfn
+
+    Entry *Stack_head ;     // head of Stack
+    Entry *Stack_top ;      // top of Stack
+
+    Long sumfrank ;         // sum of ranks of the fronts in this stack
+    Long maxfrank ;         // largest rank of fronts in this stack
+
+    // for computing the 2-norm of w, the vector of the dead column norms
+    double wscale ;         // scale factor for norm (w (of this stack))
+    double wssq ;           // sum-of-squares for norm (w (of this stack))
+} ;
+
+
+// =============================================================================
+// === spqr_blob ===============================================================
+// =============================================================================
+
+// The spqr_blob is a collection of objects that the spqr_kernel requires.
+
+template <typename Entry> struct spqr_blob
+{
+    double tol ;
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+    spqr_work <Entry> *Work ;
+    Long *Cm ;
+    Entry **Cblock ;
+    Entry *Sx ;
+    Long ntol ;
+    Long fchunk ;
+    cholmod_common *cc ;
+} ;
+
+
+// =============================================================================
+// === SuiteSparseQR non-user-callable functions ===============================
+// =============================================================================
+
+spqr_symbolic *spqr_analyze
+( 
+    // inputs, not modified
+    cholmod_sparse *A,
+    int ordering,           // all ordering options available
+    Long *Quser,            // user provided ordering, if given (may be NULL)
+
+    int do_rank_detection,  // if TRUE, then rank deficient matrices may be
+                            // considered during numerical factorization,
+    // with tol >= 0 (tol < 0 is also allowed).  If FALSE, then the tol
+    // parameter is ignored by the numerical factorization, and no rank
+    // detection is performed.
+
+    int keepH,                      // if nonzero, H is kept
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> spqr_numeric <Entry> *spqr_factorize
+(
+    // input, optionally freed on output
+    cholmod_sparse **Ahandle,
+
+    // inputs, not modified
+    Long freeA,                     // if TRUE, free A on output
+    double tol,                     // for rank detection
+    Long ntol,                      // apply tol only to first ntol columns
+    spqr_symbolic *QRsym,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// returns tol (-1 if error)
+template <typename Entry> double spqr_tol
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> double spqr_maxcolnorm
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> void spqr_kernel
+(
+    Long task,
+    spqr_blob <Entry> *Blob
+) ;
+
+template <typename Entry> void spqr_parallel
+(
+    Long ntasks,
+    int nthreads,
+    spqr_blob <Entry> *Blob
+) ;
+
+void spqr_freesym
+(
+    spqr_symbolic **QRsym_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> void spqr_freenum
+(
+    spqr_numeric <Entry> **QRnum_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> void spqr_freefac
+(
+    SuiteSparseQR_factorization <Entry> **QR_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+void spqr_stranspose1
+(
+    // input, not modified
+    cholmod_sparse *A,  // m-by-n
+    Long *Qfill,        // size n, fill-reducing column permutation;
+                        // Qfill [k] = j if the kth column of S is the jth
+                        // column of A.  Identity permutation is used if
+                        // Qfill is NULL.
+
+    // output, contents not defined on input
+    Long *Sp,           // size m+1, row pointers of S
+    Long *Sj,           // size nz, column indices of S
+    Long *PLinv,        // size m, inverse row permutation, PLinv [i] = k
+    Long *Sleft,        // size n+2, Sleft [j] ... Sleft [j+1]-1 is the list of
+                        // rows of S whose leftmost column index is j.  The list
+                        // can be empty (that is, Sleft [j] == Sleft [j+1]).
+                        // Sleft [n] is the number of non-empty rows of S, and
+                        // Sleft [n+1] is always m.  That is, Sleft [n] ...
+                        // Sleft [n+1]-1 gives the empty rows of S.
+
+    // workspace, not defined on input or output
+    Long *W             // size m
+) ;
+
+
+template <typename Entry> void spqr_stranspose2
+(
+    // input, not modified
+    cholmod_sparse *A,  // m-by-n
+    Long *Qfill,        // size n, fill-reducing column permutation;
+                        // Qfill [k] = j
+                        // if the kth column of S is the jth column of A.
+                        // Identity permutation is used if Qfill is NULL.
+
+    Long *Sp,           // size m+1, row pointers of S
+    Long *PLinv,        // size m, inverse row permutation, PLinv [i] = k
+
+    // output, contents not defined on input
+    Entry *Sx,          // size nz, numerical values of S
+
+    // workspace, not defined on input or output
+    Long *W             // size m
+) ;
+
+
+// =============================================================================
+
+#ifndef NDEBUG
+
+template <typename Entry> void spqrDebug_dumpdense
+(
+    Entry *A,
+    Long m,
+    Long n,
+    Long lda,
+    cholmod_common *cc
+) ;
+
+template <typename Entry> void spqrDebug_dumpsparse
+(
+    Long *Ap,
+    Long *Ai,
+    Entry *Ax,
+    Long m,
+    Long n,
+    cholmod_common *cc
+) ;
+
+void spqrDebug_print (double x) ;
+void spqrDebug_print (Complex x) ;
+
+void spqrDebug_dump_Parent (Long n, Long *Parent, const char *filename) ;
+
+Long spqrDebug_rhsize             // returns # of entries in R+H block
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long *Stair,            // size n; column j is dead if Stair [j] == 0.
+                            // Only the first npiv columns can be dead.
+    cholmod_common *cc
+) ;
+#endif
+
+#ifdef DEBUG_EXPENSIVE
+Long spqrDebug_listcount
+(
+    Long x, Long *List, Long len, Long what,
+    cholmod_common *cc
+) ;
+#endif
+
+// =============================================================================
+
+Long spqr_fsize     // returns # of rows of F
+(
+    // inputs, not modified
+    Long f,
+    Long *Super,            // size nf, from QRsym
+    Long *Rp,               // size nf, from QRsym
+    Long *Rj,               // size rjsize, from QRsym
+    Long *Sleft,            // size n+2, from QRsym
+    Long *Child,            // size nf, from QRsym
+    Long *Childp,           // size nf+1, from QRsym
+    Long *Cm,               // size nf, from QRwork
+
+    // outputs, not defined on input
+    Long *Fmap,             // size n, from QRwork
+    Long *Stair             // size fn, from QRwork
+) ;
+
+
+template <typename Entry> void spqr_assemble
+(
+    // inputs, not modified
+    Long f,                 // front to assemble F
+    Long fm,                // number of rows of F
+    int keepH,              // if TRUE, then construct row pattern of H
+    Long *Super,
+    Long *Rp,
+    Long *Rj,
+    Long *Sp,
+    Long *Sj,
+    Long *Sleft,
+    Long *Child,
+    Long *Childp,
+    Entry *Sx,
+    Long *Fmap,
+    Long *Cm,
+    Entry **Cblock,
+#ifndef NDEBUG
+    char *Rdead,
+#endif
+    Long *Hr,
+
+    // input/output
+    Long *Stair,
+    Long *Hii,              // if keepH, construct list of row indices for F
+    // input only
+    Long *Hip,
+
+    // outputs, not defined on input
+    Entry *F,
+
+    // workspace, not defined on input or output
+    Long *Cmap
+) ;
+
+template <typename Entry> Long spqr_cpack     // returns # of rows in C
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long g,                 // the C block starts at F (g,npiv)
+
+    // input, not modified unless the pack occurs in-place
+    Entry *F,               // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    Entry *C                // packed columns of C, of size cm-by-cn in upper
+                            // trapezoidal form.
+) ;
+
+Long spqr_fcsize    // returns # of entries in C of current front F
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long g                  // the C block starts at F (g,npiv)
+) ;
+
+Long spqr_csize     // returns # of entries in C of a child
+(
+    // input, not modified
+    Long c,                 // child c
+    Long *Rp,               // size nf+1, pointers for pattern of R
+    Long *Cm,               // size nf, Cm [c] = # of rows in child C
+    Long *Super             // size nf, pivotal columns in each front
+) ;
+
+template <typename Entry> void spqr_rcount
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric <Entry> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra and Rb
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, count Rb' instead of Rb
+
+    // input/output
+    Long *Ra,           // size n2; Ra [j] += nnz (R (:,j)) if j < n2
+    Long *Rb,           // If getT is false: size n-n2 and
+                        // Rb [j-n2] += nnz (R (:,j)) if j >= n2.
+                        // If getT is true: size econ, and
+                        // Rb [i] += nnz (R (i, n2:n-1))
+    Long *Hp,           // size rjsize+1.  Column pointers for H.
+                        // Only computed if H was kept during factorization.
+                        // Only Hp [0..nh] is used.
+    Long *p_nh          // number of Householder vectors (nh <= rjsize)
+) ;
+
+template <typename Entry> void spqr_rconvert
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric <Entry> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra, Rb, and H
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, get Rb' instead of Rb
+
+    // input/output
+    Long *Rap,          // size n2+1; on input, Rap [j] is the column pointer
+                        // for Ra.  Incremented on output by the number of
+                        // entries added to column j of Ra.
+
+    // output, not defined on input
+    Long *Rai,          // size rnz1 = nnz(Ra); row indices of Ra
+    Entry *Rax,         // size rnz; numerical values of Ra
+
+    // input/output
+    Long *Rbp,          // if getT is false:
+                        // size (n-n2)+1; on input, Rbp [j] is the column
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to column j of Rb.
+                        // if getT is true:
+                        // size econ+1; on input, Rbp [i] is the row
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to row i of Rb.
+
+    // output, not defined on input
+    Long *Rbi,          // size rnz2 = nnz(Rb); indices of Rb
+    Entry *Rbx,         // size rnz2; numerical values of Rb
+
+    // input
+    Long *H2p,          // size nh+1; H2p [j] is the column pointer for H.
+                        // H2p, H2i, and H2x are ignored if H was not kept
+                        // during factorization.  nh computed by rcount
+
+    // output, not defined on input
+    Long *H2i,           // size hnz = nnz(H); indices of H
+    Entry *H2x,         // size hnz; numerical values of H
+    Entry *H2Tau        // size nh; Householder coefficients
+) ;
+
+template <typename Entry> Long spqr_rhpack    // returns # of entries in R+H
+(
+    // input, not modified
+    int keepH,              // if true, then H is packed
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long *Stair,            // size npiv; column j is dead if Stair [j] == 0.
+                            // Only the first npiv columns can be dead.
+
+    // input, not modified (unless the pack occurs in-place)
+    Entry *F,               // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    Entry *R,               // packed columns of R+H
+    Long *p_rm              // number of rows in R block
+) ;
+
+template <typename Entry> void spqr_hpinv
+(
+    // input
+    spqr_symbolic *QRsym,
+    // input/output
+    spqr_numeric <Entry> *QRnum,
+    // workspace
+    Long *W              // size QRnum->m
+) ;
+
+template <typename Entry> int spqr_1colamd
+(
+    // inputs, not modified
+    int ordering,           // all available, except 0:fixed and 3:given
+                            // treated as 1:natural
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // output arrays, neither allocated nor defined on input.
+
+    Long **p_Q1fill,        // size n+bncols, fill-reducing
+                            // or natural ordering
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> int spqr_1fixed
+(
+    // inputs, not modified
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // output arrays, neither allocated nor defined on input.
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> SuiteSparseQR_factorization <Entry> *spqr_1factor
+(
+    // inputs, not modified
+    int ordering,           // all ordering options available
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    int keepH,              // if TRUE, keep the Householder vectors
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    Long ldb,               // leading dimension of B, if dense
+    Long *Bp,               // size bncols+1, column pointers of B
+    Long *Bi,               // size bnz = Bp [bncols], row indices of B
+    Entry *Bx,              // size bnz, numerical values of B
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+Long spqr_cumsum            // returns total sum
+(
+    // input, not modified
+    Long n,
+
+    // input/output
+    Long *X                 // size n+1. X = cumsum ([0 X])
+) ;
+
+void spqr_shift
+(
+    // input, not modified
+    Long n,
+
+    // input/output
+    Long *X                 // size n+1
+) ;
+
+template <typename Entry> void spqr_larftb
+(
+    // inputs, not modified (V is modified and then restored on output)
+    int method,     // 0,1,2,3
+    Long m,         // C is m-by-n
+    Long n,
+    Long k,         // V is v-by-k
+                    // for methods 0 and 1, v = m,
+                    // for methods 2 and 3, v = n
+    Long ldc,       // leading dimension of C
+    Long ldv,       // leading dimension of V
+    Entry *V,       // V is v-by-k, unit lower triangular (diag not stored)
+    Entry *Tau,     // size k, the k Householder coefficients
+
+    // input/output
+    Entry *C,       // C is m-by-n, with leading dimension ldc
+
+    // workspace, not defined on input or output
+    Entry *W,       // for methods 0,1: size k*k + n*k
+                    // for methods 2,3: size k*k + m*k
+    cholmod_common *cc
+) ;
+
+int spqr_happly_work
+(
+    // input
+    int method,     // 0,1,2,3 
+
+    Long m,         // X is m-by-n
+    Long n,
+
+    // FUTURE : make H cholmod_sparse:
+    Long nh,        // number of Householder vectors
+    Long *Hp,       // size nh+1, column pointers for H
+    Long hchunk, 
+
+    // outputs; sizes of workspaces needed
+    Long *p_vmax, 
+    Long *p_vsize, 
+    Long *p_csize
+) ;
+
+template <typename Entry> void spqr_happly
+(
+    // input
+    int method,     // 0,1,2,3 
+
+    Long m,         // X is m-by-n
+    Long n,
+
+    Long nh,        // number of Householder vectors
+    Long *Hp,       // size nh+1, column pointers for H
+    Long *Hi,       // size hnz = Hp [nh], row indices of H
+    Entry *Hx,      // size hnz, Householder values.  Note that the first
+                    // entry in each column must be equal to 1.0
+
+    Entry *Tau,     // size nh
+
+    // input/output
+    Entry *X,       // size m-by-n with leading dimension m
+
+    // workspace
+    Long vmax,
+    Long hchunk,
+    Long *Wi,       // size vmax
+    Long *Wmap,     // size MAX(mh,1) where H is mh-by-nh
+    Entry *C,       // size csize
+    Entry *V,       // size vsize
+    cholmod_common *cc
+) ;
+
+template <typename Entry> void spqr_panel
+(
+    // input
+    int method,
+    Long m,
+    Long n,
+    Long v,
+    Long h,             // number of Householder vectors in the panel
+    Long *Vi,           // Vi [0:v-1] defines the pattern of the panel
+    Entry *V,           // v-by-h, panel of Householder vectors
+    Entry *Tau,         // size h, Householder coefficients for the panel
+    Long ldx,
+
+    // input/output
+    Entry *X,           // m-by-n with leading dimension ldx
+
+    // workspace
+    Entry *C,           // method 0,1: v-by-n;  method 2,3: m-by-v
+    Entry *W,           // method 0,1: k*k+n*k; method 2,3: k*k+m*k
+
+    cholmod_common *cc
+) ;
+
+template <typename Entry> int spqr_append       // TRUE if OK, FALSE otherwise
+(
+    // inputs, not modified
+    Entry *X,       // size m-by-1
+    Long *P,        // size m, or NULL; permutation to apply to X.
+                    // P [k] = i if row k of A is row i of X
+
+    // input/output
+    cholmod_sparse *A,    // size m-by-n2 where n2 > n
+    Long *p_n,       // number of columns of A; increased by one
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> Long spqr_trapezoidal       // rank of R, or EMPTY
+(
+    // inputs, not modified
+
+    Long n,         // R is m-by-n (m is not needed here; can be economy R)
+    Long *Rp,       // size n+1, column pointers of R
+    Long *Ri,       // size rnz = Rp [n], row indices of R
+    Entry *Rx,      // size rnz, numerical values of R
+
+    Long bncols,    // number of columns of B
+
+    Long *Qfill,    // size n+bncols, fill-reducing ordering.  Qfill [k] = j if
+                    // the jth column of A is the kth column of R.  If Qfill is
+                    // NULL, then it is assumed to be the identity
+                    // permutation.
+
+    int skip_if_trapezoidal,        // if R is already in trapezoidal form,
+                                    // and skip_if_trapezoidal is TRUE, then
+                                    // the matrix T is not created.
+
+    // outputs, not allocated on input
+    Long **p_Tp,    // size n+1, column pointers of T
+    Long **p_Ti,    // size rnz, row indices of T
+    Entry **p_Tx,   // size rnz, numerical values of T
+
+    Long **p_Qtrap, // size n+bncols, modified Qfill
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template <typename Entry> int spqr_type (void) ;
+
+template <typename Entry> void spqr_rsolve
+(
+    // inputs
+    SuiteSparseQR_factorization <Entry> *QR,
+    int use_Q1fill,
+
+    Long nrhs,              // number of columns of B
+    Long ldb,               // leading dimension of B
+    Entry *B,               // size m-by-nrhs with leading dimesion ldb
+
+    // output
+    Entry *X,               // size n-by-nrhs with leading dimension n
+
+    // workspace
+    Entry **Rcolp,
+    Long *Rlive,
+    Entry *W,
+
+    cholmod_common *cc
+) ;
+
+// returns rank of F, or 0 on error
+template <typename Entry> Long spqr_front
+(
+    // input, not modified
+    Long m,             // F is m-by-n with leading dimension m
+    Long n,
+    Long npiv,          // number of pivot columns
+    double tol,         // a column is flagged as dead if its norm is <= tol
+    Long ntol,          // apply tol only to first ntol pivot columns
+    Long fchunk,        // block size for compact WY Householder reflections,
+                        // treated as 1 if fchunk <= 1
+
+    // input/output
+    Entry *F,           // frontal matrix F of size m-by-n
+    Long *Stair,        // size n, entries F (Stair[k]:m-1, k) are all zero,
+                        // and remain zero on output.
+    char *Rdead,        // size npiv; all zero on input.  If k is dead,
+                        // Rdead [k] is set to 1
+
+    // output, not defined on input
+    Entry *Tau,         // size n, Householder coefficients
+
+    // workspace, undefined on input and output
+    Entry *W,           // size b*(n+b), where b = min (fchunk,n,m)
+
+    // input/output
+    double *wscale,
+    double *wssq,
+
+    cholmod_common *cc
+) ;
+
+template <typename Entry> int spqr_rmap
+(
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+// === spqrgpu features ========================================================
+// =============================================================================
+
+#ifdef GPU_BLAS
+#include "spqrgpu.hpp"
+#endif
+
+// =============================================================================
+// === spqr_conj ===============================================================
+// =============================================================================
+
+inline double spqr_conj (double x)
+{
+    return (x) ;
+}
+
+inline Complex spqr_conj (Complex x)
+{
+    return (std::conj (x)) ;
+}
+
+
+// =============================================================================
+// === spqr_abs ================================================================
+// =============================================================================
+
+inline double spqr_abs (double x, cholmod_common *cc)       // cc is unused
+{
+    return (fabs (x)) ;
+}
+
+inline double spqr_abs (Complex x, cholmod_common *cc)
+{
+    return (SuiteSparse_config.hypot_func (x.real ( ), x.imag ( ))) ;
+}
+
+
+// =============================================================================
+// === spqr_divide =============================================================
+// =============================================================================
+
+inline double spqr_divide (double a, double b, cholmod_common *cc)  // cc unused
+{
+    return (a/b) ;
+}
+
+inline Complex spqr_divide (Complex a, Complex b, cholmod_common *cc)
+{
+    double creal, cimag ;
+    SuiteSparse_config.divcomplex_func
+        (a.real(), a.imag(), b.real(), b.imag(), &creal, &cimag) ;
+    return (Complex (creal, cimag)) ;
+}
+
+
+// =============================================================================
+// === spqr_add ================================================================
+// =============================================================================
+
+// Add two non-negative Long's, and return the result.  Checks for Long overflow
+// and sets ok to FALSE if it occurs.
+
+inline Long spqr_add (Long a, Long b, int *ok)
+{
+    Long c = a + b ;
+    if (c < 0)
+    {
+        (*ok) = FALSE ;
+        return (EMPTY) ;
+    }
+    return (c) ;
+}
+
+
+// =============================================================================
+// === spqr_mult ===============================================================
+// =============================================================================
+
+// Multiply two positive Long's, and return the result.  Checks for Long
+// overflow and sets ok to FALSE if it occurs.
+
+inline Long spqr_mult (Long a, Long b, int *ok)
+{
+    Long c = a * b ;
+    if (((double) c) != ((double) a) * ((double) b))
+    {
+        (*ok) = FALSE ;
+        return (EMPTY) ;
+    }
+    return (c) ;
+}
+
+
+// =============================================================================
+// === BLAS interface ==========================================================
+// =============================================================================
+
+// To compile SuiteSparseQR with 64-bit BLAS, use -DBLAS64.  See also
+// CHOLMOD/Include/cholmod_blas.h
+
+extern "C" {
+#include "cholmod_blas.h"
+}
+
+#undef CHECK_BLAS_INT
+#undef EQ
+#define CHECK_BLAS_INT (sizeof (BLAS_INT) < sizeof (Long))
+#define EQ(K,k) (((BLAS_INT) K) == ((Long) k))
+
+#ifdef SUN64
+
+#define BLAS_DNRM2    dnrm2_64_
+#define LAPACK_DLARF  dlarf_64_
+#define LAPACK_DLARFG dlarfg_64_
+#define LAPACK_DLARFT dlarft_64_
+#define LAPACK_DLARFB dlarfb_64_
+
+#define BLAS_DZNRM2   dznrm2_64_
+#define LAPACK_ZLARF  zlarf_64_
+#define LAPACK_ZLARFG zlarfg_64_
+#define LAPACK_ZLARFT zlarft_64_
+#define LAPACK_ZLARFB zlarfb_64_
+
+#elif defined (BLAS_NO_UNDERSCORE)
+
+#define BLAS_DNRM2    dnrm2
+#define LAPACK_DLARF  dlarf
+#define LAPACK_DLARFG dlarfg
+#define LAPACK_DLARFT dlarft
+#define LAPACK_DLARFB dlarfb
+
+#define BLAS_DZNRM2   dznrm2
+#define LAPACK_ZLARF  zlarf
+#define LAPACK_ZLARFG zlarfg
+#define LAPACK_ZLARFT zlarft
+#define LAPACK_ZLARFB zlarfb
+
+#else
+
+#define BLAS_DNRM2    dnrm2_
+#define LAPACK_DLARF  dlarf_
+#define LAPACK_DLARFG dlarfg_
+#define LAPACK_DLARFT dlarft_
+#define LAPACK_DLARFB dlarfb_
+
+#define BLAS_DZNRM2   dznrm2_
+#define LAPACK_ZLARF  zlarf_
+#define LAPACK_ZLARFG zlarfg_
+#define LAPACK_ZLARFT zlarft_
+#define LAPACK_ZLARFB zlarfb_
+
+#endif
+
+// =============================================================================
+// === BLAS and LAPACK prototypes ==============================================
+// =============================================================================
+
+extern "C"
+{
+
+void LAPACK_DLARFT (char *direct, char *storev, BLAS_INT *n, BLAS_INT *k,
+    double *V, BLAS_INT *ldv, double *Tau, double *T, BLAS_INT *ldt) ;
+
+void LAPACK_ZLARFT (char *direct, char *storev, BLAS_INT *n, BLAS_INT *k,
+    Complex *V, BLAS_INT *ldv, Complex *Tau, Complex *T, BLAS_INT *ldt) ;
+
+void LAPACK_DLARFB (char *side, char *trans, char *direct, char *storev,
+    BLAS_INT *m, BLAS_INT *n, BLAS_INT *k, double *V, BLAS_INT *ldv,
+    double *T, BLAS_INT *ldt, double *C, BLAS_INT *ldc, double *Work,
+    BLAS_INT *ldwork) ;
+
+void LAPACK_ZLARFB (char *side, char *trans, char *direct, char *storev,
+    BLAS_INT *m, BLAS_INT *n, BLAS_INT *k, Complex *V, BLAS_INT *ldv,
+    Complex *T, BLAS_INT *ldt, Complex *C, BLAS_INT *ldc, Complex *Work,
+    BLAS_INT *ldwork) ;
+
+double BLAS_DNRM2 (BLAS_INT *n, double *X, BLAS_INT *incx) ;
+
+double BLAS_DZNRM2 (BLAS_INT *n, Complex *X, BLAS_INT *incx) ;
+
+void LAPACK_DLARFG (BLAS_INT *n, double *alpha, double *X, BLAS_INT *incx,
+    double *tau) ;
+
+void LAPACK_ZLARFG (BLAS_INT *n, Complex *alpha, Complex *X, BLAS_INT *incx,
+    Complex *tau) ;
+
+void LAPACK_DLARF (char *side, BLAS_INT *m, BLAS_INT *n, double *V,
+    BLAS_INT *incv, double *tau, double *C, BLAS_INT *ldc, double *Work) ;
+
+void LAPACK_ZLARF (char *side, BLAS_INT *m, BLAS_INT *n, Complex *V,
+    BLAS_INT *incv, Complex *tau, Complex *C, BLAS_INT *ldc, Complex *Work) ;
+
+}
+
+#endif
diff --git a/SPQR/Include/spqrgpu.hpp b/SPQR/Include/spqrgpu.hpp
new file mode 100644
index 0000000..f0dad78
--- /dev/null
+++ b/SPQR/Include/spqrgpu.hpp
@@ -0,0 +1,81 @@
+#ifndef SPQRGPU_HPP_
+#define SPQRGPU_HPP_
+
+#include "GPUQREngine.hpp"
+
+void spqrgpu_kernel
+(
+    spqr_blob <double> *Blob    // contains the entire problem input/output
+) ;
+
+void spqrgpu_kernel             // placeholder, since complex case not supported
+(
+    spqr_blob <Complex> *Blob
+) ;
+
+void spqrgpu_computeFrontStaging
+(
+    // inputs, not modified on output
+    Long numFronts,     // total number of fronts (nf in caller)
+    Long *Parent,       // size nf+1, assembly tree (f=nf is placeholder)
+    Long *Childp,       // size nf+2, children of f are
+                        //      Child [Childp [f] ... Childp [f+1]-1]
+    Long *Child,        // size nf+1.
+
+    Long *Fm,           // size nf+1, front f has Fm [f] rows
+    Long *Cm,           // size nf+1, front f has Cm [f] rows in contrib
+    Long *Rp,           // size nf+1, Rj[Rp[f]...Rp[f+1]-1] are the cols in f
+    Long *Sp,           // size m+1, row pointers for sparse matrix S
+    Long *Sleft,        // size n+2, see spqr_stranspose for description
+    Long *Super,        // size nf+1, front f pivotal cols are
+                        //      Super[f]..Super[f+1]-1
+    Long *Post,         // size nf+1, front f is kth, if f = Post [k]
+
+    Long RimapSize,     // scalar, size of Rimap on the GPU (# of int's)
+    Long RjmapSize,     // scalar, size of Rjmap on the GPU (# of int's)
+
+    // output, not defined on input:
+    bool *feasible,     // scalar, true if feasible, false if GPU memory too low
+    Long *numStages,    // scalar, number of stages
+    Long *Stagingp,     // size nf+2, fronts are in the list
+                        //      Post [Stagingp [stage]...Stagingp[stage+1]-1]
+    Long *StageMap,     // size nf, front f is in stage StageMap [f]
+
+    size_t *FSize,      // size nf+1, FSize[stage]: size in bytes of MongoF
+    size_t *RSize,      // size nf+1, Rsize[stage]: size in bytes of MongoR
+    size_t *SSize,      // size nf+1, Ssize[stage]: size in bytes of S
+    Long *FOffsets,     // size nf, front f in MondoF [FOffsets[f]...] on GPU
+    Long *ROffsets,     // size nf, R block in MondoR [Roffsets[f]...] on CPU
+    Long *SOffsets,     // size nf, S entries for front f are in
+                        //      wsS [SOffsets[f]...]
+
+    // input/output:
+    cholmod_common *cc
+);
+
+void spqrgpu_buildAssemblyMaps
+(
+    Long numFronts,
+    Long n,
+    Long *Fmap,
+    Long *Post,
+    Long *Super,
+    Long *Rp,
+    Long *Rj,
+    Long *Sleft,
+    Long *Sp,
+    Long *Sj,
+    double *Sx,
+    Long *Fm,
+    Long *Cm,
+    Long *Childp,
+    Long *Child,
+    Long *CompleteStair,
+    int *CompleteRjmap,
+    Long *RjmapOffsets,
+    int *CompleteRimap,
+    Long *RimapOffsets,
+    SEntry *cpuS
+);
+
+#endif
diff --git a/SPQR/Lib/Makefile b/SPQR/Lib/Makefile
new file mode 100644
index 0000000..eae51aa
--- /dev/null
+++ b/SPQR/Lib/Makefile
@@ -0,0 +1,250 @@
+#===============================================================================
+# SuiteSparseQR/Lib/Makefile
+#===============================================================================
+
+default: all
+
+ccode: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+#-------------------------------------------------------------------------------
+# the optional Partition module requires METIS, CAMD, and CCOLAMD
+I_WITH_PARTITION = 
+LIB_WITH_PARTITION =
+CONFIG_PARTITION = -DNPARTITION
+# check if METIS is requested and available
+ifeq (,$(findstring -DNPARTITION, $(CHOLMOD_CONFIG)))
+    # METIS is requested.  See if it is available
+    ifeq ($(METIS_PATH), $(wildcard $(METIS_PATH)))
+        ifeq (../../CAMD, $(wildcard ../../CAMD))
+            ifeq (../../CCOLAMD, $(wildcard ../../CCOLAMD))
+                # METIS, CAMD, and CCOLAMD are available
+                LIB_WITH_PARTITION = $(METIS) ../../CCOLAMD/Lib/libccolamd.a \
+                    ../../CAMD/Lib/libcamd.a
+                I_WITH_PARTITION = -I$(METIS_PATH)/Lib \
+                    -I../../CCOLAMD/Include -I../../CAMD/Include
+                CONFIG_PARTITION =
+            endif
+        endif
+    endif
+endif
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+
+# no statement coverage, high optimization
+# CF = -O3 \
+# 	-Wall -W -Wshadow -Winline -Wno-unused-parameter \
+# 	-Wredundant-decls -Wdisabled-optimization \
+# 	-ansi -fexceptions
+
+all: libspqr.a
+
+library: libspqr.a
+
+purge: distclean
+
+distclean: clean
+	- $(RM) libspqr.a
+
+clean:
+	- $(RM) $(CLEAN)
+
+INC = ../Include/spqr.hpp ../Include/SuiteSparseQR_C.h \
+	../Include/SuiteSparseQR_definitions.h \
+	../Include/SuiteSparseQR.hpp Makefile
+
+OBJ = \
+    spqr_rmap.o \
+    SuiteSparseQR_C.o \
+    SuiteSparseQR_expert.o \
+    spqr_parallel.o \
+    spqr_kernel.o \
+    spqr_analyze.o \
+    spqr_assemble.o \
+    spqr_cpack.o \
+    spqr_csize.o \
+    spqr_fcsize.o \
+    spqr_debug.o \
+    spqr_front.o \
+    spqr_factorize.o \
+    spqr_freenum.o \
+    spqr_freesym.o \
+    spqr_freefac.o \
+    spqr_fsize.o \
+    spqr_maxcolnorm.o \
+    spqr_rconvert.o \
+    spqr_rcount.o \
+    spqr_rhpack.o \
+    spqr_rsolve.o \
+    spqr_stranspose1.o \
+    spqr_stranspose2.o \
+    spqr_hpinv.o \
+    spqr_1fixed.o \
+    spqr_1colamd.o \
+    SuiteSparseQR.o \
+    spqr_1factor.o \
+    spqr_cumsum.o \
+    spqr_shift.o \
+    spqr_happly.o \
+    spqr_panel.o \
+    spqr_happly_work.o \
+    SuiteSparseQR_qmult.o \
+    spqr_trapezoidal.o \
+    spqr_larftb.o \
+    spqr_append.o \
+    spqr_type.o \
+    spqr_tol.o
+
+ifneq ($(GPU_CONFIG),)
+OBJ += \
+    spqrgpu_kernel.o \
+    spqrgpu_buildAssemblyMaps.o \
+    spqrgpu_computeFrontStaging.o
+endif
+
+$(OBJ): $(INC)
+
+I = -I../../CHOLMOD/Include -I../../SuiteSparse_config -I../Include
+
+ifneq ($(GPU_CONFIG),)
+    I += -I../../SuiteSparse_GPURuntime/Include \
+        -I../../GPUQREngine/Include \
+        -I$(CUDA_INC_PATH)
+endif
+
+C = $(CXX) $(CF) $(SPQR_CONFIG) $(CONFIG_PARTITION) $(I)
+
+libspqr.a: $(OBJ)
+	$(ARCHIVE)  libspqr.a $(OBJ)
+	- $(RANLIB) libspqr.a
+
+spqr_1colamd.o: ../Source/spqr_1colamd.cpp
+	$(C) -c $<
+
+spqr_1factor.o: ../Source/spqr_1factor.cpp
+	$(C) -c $<
+
+spqr_1fixed.o: ../Source/spqr_1fixed.cpp
+	$(C) -c $<
+
+spqr_analyze.o: ../Source/spqr_analyze.cpp
+	$(C) -c $<
+
+spqr_parallel.o: ../Source/spqr_parallel.cpp
+	$(C) -c $<
+
+spqr_kernel.o: ../Source/spqr_kernel.cpp
+	$(C) -c $<
+
+spqr_append.o: ../Source/spqr_append.cpp
+	$(C) -c $<
+
+spqr_assemble.o: ../Source/spqr_assemble.cpp
+	$(C) -c $<
+
+spqr_cpack.o: ../Source/spqr_cpack.cpp
+	$(C) -c $<
+
+spqr_csize.o: ../Source/spqr_csize.cpp
+	$(C) -c $<
+
+spqr_cumsum.o: ../Source/spqr_cumsum.cpp
+	$(C) -c $<
+
+spqr_debug.o: ../Source/spqr_debug.cpp
+	$(C) -c $<
+
+spqr_factorize.o: ../Source/spqr_factorize.cpp
+	$(C) -c $<
+
+spqr_fcsize.o: ../Source/spqr_fcsize.cpp
+	$(C) -c $<
+
+spqr_freefac.o: ../Source/spqr_freefac.cpp
+	$(C) -c $<
+
+spqr_freenum.o: ../Source/spqr_freenum.cpp
+	$(C) -c $<
+
+spqr_freesym.o: ../Source/spqr_freesym.cpp
+	$(C) -c $<
+
+spqr_fsize.o: ../Source/spqr_fsize.cpp
+	$(C) -c $<
+
+spqr_happly.o: ../Source/spqr_happly.cpp
+	$(C) -c $<
+
+spqr_panel.o: ../Source/spqr_panel.cpp
+	$(C) -c $<
+
+spqr_happly_work.o: ../Source/spqr_happly_work.cpp
+	$(C) -c $<
+
+spqr_hpinv.o: ../Source/spqr_hpinv.cpp
+	$(C) -c $<
+
+spqr_larftb.o: ../Source/spqr_larftb.cpp
+	$(C) -c $<
+
+spqr_rconvert.o: ../Source/spqr_rconvert.cpp
+	$(C) -c $<
+
+spqr_rcount.o: ../Source/spqr_rcount.cpp
+	$(C) -c $<
+
+spqr_rhpack.o: ../Source/spqr_rhpack.cpp
+	$(C) -c $<
+
+spqr_rsolve.o: ../Source/spqr_rsolve.cpp
+	$(C) -c $<
+
+spqr_shift.o: ../Source/spqr_shift.cpp
+	$(C) -c $<
+
+spqr_stranspose1.o: ../Source/spqr_stranspose1.cpp
+	$(C) -c $<
+
+spqr_stranspose2.o: ../Source/spqr_stranspose2.cpp
+	$(C) -c $<
+
+spqr_trapezoidal.o: ../Source/spqr_trapezoidal.cpp
+	$(C) -c $<
+
+spqr_type.o: ../Source/spqr_type.cpp
+	$(C) -c $<
+
+spqr_front.o: ../Source/spqr_front.cpp
+	$(C) -c $<
+
+SuiteSparseQR_expert.o: ../Source/SuiteSparseQR_expert.cpp
+	$(C) -c $<
+
+spqr_maxcolnorm.o: ../Source/spqr_maxcolnorm.cpp
+	$(C) -c $<
+
+SuiteSparseQR_qmult.o: ../Source/SuiteSparseQR_qmult.cpp
+	$(C) -c $<
+
+SuiteSparseQR.o: ../Source/SuiteSparseQR.cpp
+	$(C) -c $<
+
+spqr_tol.o: ../Source/spqr_tol.cpp
+	$(C) -c $<
+
+SuiteSparseQR_C.o: ../Source/SuiteSparseQR_C.cpp
+	$(C) -c $<
+
+spqr_rmap.o: ../Source/spqr_rmap.cpp
+	$(C) -c $<
+
+spqrgpu_kernel.o: ../SPQRGPU/spqrgpu_kernel.cpp
+	$(C) -c $<
+
+spqrgpu_buildAssemblyMaps.o: ../SPQRGPU/spqrgpu_buildAssemblyMaps.cpp
+	$(C) -c $<
+
+spqrgpu_computeFrontStaging.o: ../SPQRGPU/spqrgpu_computeFrontStaging.cpp
+	$(C) -c $<
diff --git a/SPQR/MATLAB/Contents.m b/SPQR/MATLAB/Contents.m
new file mode 100644
index 0000000..fa584dc
--- /dev/null
+++ b/SPQR/MATLAB/Contents.m
@@ -0,0 +1,16 @@
+% SuiteSparseQR : a multifrontal, multithreaded, rank-revealing sparse QR
+% factorization method.  Works for both real and complex sparse matrices.
+%
+% Files
+%   spqr         - multithreaded multifrontal rank-revealing sparse QR.
+%   spqr_demo    - short demo of SuiteSparseQR 
+%   spqr_install - compile and install SuiteSparseQR
+%   spqr_make    - compiles the SuiteSparseQR mexFunctions
+%   spqr_qmult   - computes Q'*X, Q*X, X*Q', or X*Q with Q in Householder form.
+%   spqr_solve   - solves a linear system or least squares problem via QR factorization.
+%   spqr_singletons - finds the singleton permutation of a sparse matrix A.
+%
+% Example:
+%   x = spqr_solve (A,b) ;  % solves a least-squares problem (like x=A\b)
+
+% Copyright 2008-2012, Timothy A. Davis, http://www.suitesparse.com
diff --git a/SPQR/MATLAB/spqr.cpp b/SPQR/MATLAB/spqr.cpp
new file mode 100644
index 0000000..8ef6706
--- /dev/null
+++ b/SPQR/MATLAB/spqr.cpp
@@ -0,0 +1,488 @@
+// =============================================================================
+// === spqr mexFunction ========================================================
+// =============================================================================
+
+#include "spqr_mx.hpp"
+
+// This function mimics the existing MATLAB QR syntax, with extensions.
+// See spqr.m for details.
+
+#define EMPTY (-1)
+#define TRUE 1
+#define FALSE 0 
+
+// =============================================================================
+// === is_zero =================================================================
+// =============================================================================
+
+// Return TRUE if the MATLAB matrix s is a scalar equal to zero
+
+static int is_zero (const mxArray *s)
+{
+    return (mxIsNumeric (s)
+            && (mxGetNumberOfElements (s) == 1)
+            && (mxGetScalar (s) == 0)) ;
+}
+
+
+// =============================================================================
+// === spqr mexFunction ========================================================
+// =============================================================================
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    Long *Ap, *Ai, *E, *Bp, *Bi, *HPinv ;
+    double *Ax, *Bx, dummy, tol ;
+    Long m, n, anz, bnz, is_complex, econ, A_complex, B_complex ;
+    spqr_mx_options opts ;
+    cholmod_sparse *A, Amatrix, *R, *Q, *Csparse, Bsmatrix, *Bsparse, *H ;
+    cholmod_dense *Cdense, Bdmatrix, *Bdense, *HTau ;
+    cholmod_common Common, *cc ;
+
+    double t0 = (nargout > 3) ? SuiteSparse_time ( ) : 0 ;
+
+    // -------------------------------------------------------------------------
+    // start CHOLMOD and set parameters
+    // -------------------------------------------------------------------------
+
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+    spqr_mx_config (SPUMONI, cc) ;
+
+    // -------------------------------------------------------------------------
+    // check inputs
+    // -------------------------------------------------------------------------
+
+    // nargin can be 1, 2, or 3
+    // nargout can be 0, 1, 2, 3, or 4
+
+    if (nargout > 4)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxlhs", "Too many output arguments") ;
+    }
+    if (nargin < 1)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:minrhs", "Not enough input arguments") ;
+    }
+    if (nargin > 3)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxrhs", "Too many input arguments") ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get the input matrix A
+    // -------------------------------------------------------------------------
+
+    if (!mxIsSparse (pargin [0]))
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "A must be sparse") ;
+    }
+
+    A = spqr_mx_get_sparse (pargin [0], &Amatrix, &dummy) ;
+    Ap = (Long *) A->p ;
+    Ai = (Long *) A->i ;
+    m = A->nrow ;
+    n = A->ncol ;
+    A_complex = mxIsComplex (pargin [0]) ;
+
+    // -------------------------------------------------------------------------
+    // determine usage and parameters
+    // -------------------------------------------------------------------------
+
+    if (nargin == 1)
+    {
+
+        // ---------------------------------------------------------------------
+        // [ ] = qr (A)
+        // ---------------------------------------------------------------------
+
+        spqr_mx_get_options (NULL, &opts, m, nargout, cc) ;
+        // R = qr (A)
+        // [Q,R] = qr (A)
+        // [Q,R,E] = qr (A)
+
+    }
+    else if (nargin == 2)
+    {
+
+        // ---------------------------------------------------------------------
+        // [ ] = qr (A,0), [ ] = qr (A,opts), or [ ] = qr (A,B)
+        // ---------------------------------------------------------------------
+
+        if (is_zero (pargin [1]))
+        {
+
+            // -----------------------------------------------------------------
+            // [ ... ] = qr (A,0)
+            // -----------------------------------------------------------------
+
+            spqr_mx_get_options (NULL, &opts, m, nargout, cc) ;
+            opts.econ = n ;
+            opts.permvector = TRUE ;
+            // R = qr (A,0)
+            // [Q,R] = qr (A,0)
+            // [Q,R,E] = qr (A,0)
+
+        }
+        else if (mxIsEmpty (pargin [1]) || mxIsStruct (pargin [1]))
+        {
+
+            // -----------------------------------------------------------------
+            // [ ] = qr (A,opts)
+            // -----------------------------------------------------------------
+
+            spqr_mx_get_options (pargin [1], &opts, m, nargout, cc) ;
+            // R = qr (A,opts)
+            // [Q,R] = qr (A,opts)
+            // [Q,R,E] = qr (A,opts)
+
+        }
+        else
+        {
+
+            // -----------------------------------------------------------------
+            // [ ] = qr (A,B)
+            // -----------------------------------------------------------------
+
+            spqr_mx_get_options (NULL, &opts, m, nargout, cc) ;
+            opts.haveB = TRUE ;
+            opts.Qformat = SPQR_Q_DISCARD ;
+            if (nargout <= 1)
+            {
+                mexErrMsgIdAndTxt ("MATLAB:minlhs",
+                    "Not enough output arguments") ;
+            }
+            // [C,R] = qr (A,B)
+            // [C,R,E] = qr (A,B)
+
+        }
+
+    }
+    else // if (nargin == 3)
+    {
+
+        // ---------------------------------------------------------------------
+        // [ ] = qr (A,B,opts)
+        // ---------------------------------------------------------------------
+
+        if (is_zero (pargin [2]))
+        {
+
+            // -----------------------------------------------------------------
+            // [ ] = qr (A,B,0)
+            // -----------------------------------------------------------------
+
+            spqr_mx_get_options (NULL, &opts, m, nargout, cc) ;
+            opts.econ = n ;
+            opts.permvector = TRUE ;
+            opts.haveB = TRUE ;
+            opts.Qformat = SPQR_Q_DISCARD ;
+            if (nargout <= 1)
+            {
+                mexErrMsgIdAndTxt ("MATLAB:minlhs",
+                    "Not enough output arguments") ;
+            }
+            // [C,R] = qr (A,B,0)
+            // [C,R,E] = qr (A,B,0)
+
+        }
+        else if (mxIsEmpty (pargin [2]) || mxIsStruct (pargin [2]))
+        {
+
+            // -----------------------------------------------------------------
+            // [ ] = qr (A,B,opts)
+            // -----------------------------------------------------------------
+
+            spqr_mx_get_options (pargin [2], &opts, m, nargout, cc) ;
+            opts.haveB = TRUE ;
+            opts.Qformat = SPQR_Q_DISCARD ;
+            if (nargout <= 1)
+            {
+                mexErrMsgIdAndTxt ("MATLAB:minlhs",
+                    "Not enough output arguments") ;
+            }
+            // [C,R] = qr (A,B,opts)
+            // [C,R,E] = qr (A,B,opts)
+
+        }
+        else
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput", "Invalid opts argument") ;
+        }
+    }
+
+    int order = opts.ordering ;
+    tol = opts.tol ;
+    econ = opts.econ ;
+
+    // -------------------------------------------------------------------------
+    // get A and convert to merged-complex if needed
+    // -------------------------------------------------------------------------
+
+    if (opts.haveB)
+    {
+        B_complex = mxIsComplex (pargin [1]) ;
+    }
+    else
+    {
+        B_complex = FALSE ;
+    }
+
+    is_complex = (A_complex || B_complex) ;
+    Ax = spqr_mx_merge_if_complex (pargin [0], is_complex, &anz, cc) ; 
+    if (is_complex)
+    {
+        // A has been converted from real or zomplex to complex
+        A->x = Ax ;
+        A->z = NULL ;
+        A->xtype = CHOLMOD_COMPLEX ;
+    }
+
+    // -------------------------------------------------------------------------
+    // analyze, factorize, and get the results
+    // -------------------------------------------------------------------------
+
+    if (opts.haveB)
+    {
+
+        // ---------------------------------------------------------------------
+        // get B, and convert to complex if necessary
+        // ---------------------------------------------------------------------
+
+        if (!mxIsNumeric (pargin [1]))
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput", "invalid non-numeric B") ;
+        }
+        if (mxGetM (pargin [1]) != m)
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput",
+                "A and B must have the same number of rows") ;
+        }
+
+        // convert from real or zomplex to complex
+        Bx = spqr_mx_merge_if_complex (pargin [1], is_complex, &bnz, cc) ;
+
+        int B_is_sparse = mxIsSparse (pargin [1]) ;
+        if (B_is_sparse)
+        {
+            Bsparse = spqr_mx_get_sparse (pargin [1], &Bsmatrix, &dummy) ;
+            Bdense = NULL ;
+            if (is_complex)
+            {
+                // Bsparse has been converted from real or zomplex to complex
+                Bsparse->x = Bx ;
+                Bsparse->z = NULL ;
+                Bsparse->xtype = CHOLMOD_COMPLEX ;
+            }
+        }
+        else
+        {
+            Bsparse = NULL ;
+            Bdense = spqr_mx_get_dense (pargin [1], &Bdmatrix, &dummy) ;
+            if (is_complex)
+            {
+                // Bdense has been converted from real or zomplex to complex
+                Bdense->x = Bx ;
+                Bdense->z = NULL ;
+                Bdense->xtype = CHOLMOD_COMPLEX ;
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // [C,R,E] = qr (A,B,...) or [C,R] = qr (A,B,...)
+        // ---------------------------------------------------------------------
+
+        if (is_complex)
+        {
+
+            // -----------------------------------------------------------------
+            // [C,R,E] = qr (A,B): complex case
+            // -----------------------------------------------------------------
+
+            if (B_is_sparse)
+            {
+                // B and C are both sparse and complex
+                SuiteSparseQR <Complex> (order, tol, econ, A, Bsparse,
+                    &Csparse, &R, &E, cc) ;
+                pargout [0] = spqr_mx_put_sparse (&Csparse, cc) ;
+            }
+            else
+            {
+                // B and C are both dense and complex
+                SuiteSparseQR <Complex> (order, tol, econ, A, Bdense,
+                    &Cdense, &R, &E, cc) ;
+                pargout [0] = spqr_mx_put_dense (&Cdense, cc) ;
+            }
+
+        }
+        else
+        {
+
+            // -----------------------------------------------------------------
+            // [C,R,E] = qr (A,B): real case
+            // -----------------------------------------------------------------
+
+            if (B_is_sparse)
+            {
+                // B and C are both sparse and real
+                SuiteSparseQR <double> (order, tol, econ, A, Bsparse,
+                    &Csparse, &R, &E, cc) ;
+                pargout [0] = spqr_mx_put_sparse (&Csparse, cc) ;
+            }
+            else
+            {
+                // B and C are both dense and real
+                SuiteSparseQR <double> (order, tol, econ, A, Bdense,
+                    &Cdense, &R, &E, cc) ;
+                pargout [0] = spqr_mx_put_dense (&Cdense, cc) ;
+            }
+        }
+
+        pargout [1] = spqr_mx_put_sparse (&R, cc) ;
+
+    }
+    else if (nargout <= 1)
+    {
+
+        // ---------------------------------------------------------------------
+        // R = qr (A) or R = qr (A,opts)
+        // ---------------------------------------------------------------------
+
+        if (is_complex)
+        {
+            SuiteSparseQR <Complex> (0, tol, econ, A, &R, NULL, cc) ;
+        }
+        else
+        {
+            SuiteSparseQR <double> (0, tol, econ, A, &R, NULL, cc) ;
+        }
+        pargout [0] = spqr_mx_put_sparse (&R, cc) ;
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // [Q,R,E] = qr (A,...) or [Q,R] = qr (A,...)
+        // ---------------------------------------------------------------------
+
+        if (opts.Qformat == SPQR_Q_DISCARD)
+        {
+
+            // -----------------------------------------------------------------
+            // Q is discarded, and Q = [ ] is returned as a placeholder
+            // -----------------------------------------------------------------
+
+            if (is_complex)
+            {
+                SuiteSparseQR <Complex> (order, tol, econ, A, &R, &E, cc);
+            }
+            else
+            {
+                SuiteSparseQR <double> (order, tol, econ, A, &R, &E, cc) ;
+            }
+            pargout [0] = mxCreateDoubleMatrix (0, 0, mxREAL) ;
+
+        }
+        else if (opts.Qformat == SPQR_Q_MATRIX)
+        {
+
+            // -----------------------------------------------------------------
+            // Q is a sparse matrix
+            // -----------------------------------------------------------------
+
+            if (is_complex)
+            {
+                SuiteSparseQR <Complex> (order, tol, econ, A, &Q, &R, &E, cc) ;
+            }
+            else
+            {
+                SuiteSparseQR <double> (order, tol, econ, A, &Q, &R, &E, cc) ;
+            }
+            pargout [0] = spqr_mx_put_sparse (&Q, cc) ;
+
+        }
+        else
+        {
+
+            // -----------------------------------------------------------------
+            // H is kept, and Q is a struct containing H, Tau, and P
+            // -----------------------------------------------------------------
+
+            mxArray *Tau, *P, *Hmatlab ;
+            if (is_complex)
+            {
+                SuiteSparseQR <Complex> (order, tol, econ, A,
+                    &R, &E, &H, &HPinv, &HTau, cc) ;
+            }
+            else
+            {
+                SuiteSparseQR <double> (order, tol, econ, A,
+                    &R, &E, &H, &HPinv, &HTau, cc) ;
+            }
+
+            Tau = spqr_mx_put_dense (&HTau, cc) ;
+            Hmatlab = spqr_mx_put_sparse (&H, cc) ;
+
+            // Q.P contains the inverse row permutation
+            P = mxCreateDoubleMatrix (1, m, mxREAL) ;
+            double *Tx = mxGetPr (P) ;
+            for (Long i = 0 ; i < m ; i++)
+            {
+                Tx [i] = HPinv [i] + 1 ;
+            }
+
+            // return Q
+            const char *Qstruct [ ] = { "H", "Tau", "P" } ;
+            pargout [0] = mxCreateStructMatrix (1, 1, 3, Qstruct) ;
+            mxSetFieldByNumber (pargout [0], 0, 0, Hmatlab) ;
+            mxSetFieldByNumber (pargout [0], 0, 1, Tau) ;
+            mxSetFieldByNumber (pargout [0], 0, 2, P) ;
+
+        }
+        pargout [1] = spqr_mx_put_sparse (&R, cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // return E
+    // -------------------------------------------------------------------------
+
+    if (nargout > 2)
+    {
+        pargout [2] = spqr_mx_put_permutation (E, n, opts.permvector, cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // free copy of merged-complex, if needed
+    // -------------------------------------------------------------------------
+
+    if (is_complex)
+    {
+        // this was allocated by merge_if_complex
+        cholmod_l_free (anz, sizeof (Complex), Ax, cc) ;
+        if (opts.haveB)
+        {
+            cholmod_l_free (bnz, sizeof (Complex), Bx, cc) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // info output
+    // -------------------------------------------------------------------------
+
+    if (nargout > 3)
+    {
+        double flops = cc->SPQR_flopcount ;
+        double t = SuiteSparse_time ( ) - t0 ;
+        pargout [3] = spqr_mx_info (cc, t, flops) ;
+    }
+
+    cholmod_l_finish (cc) ;
+    if (opts.spumoni > 0) spqr_mx_spumoni (&opts, is_complex, cc) ;
+}
diff --git a/SPQR/MATLAB/spqr.m b/SPQR/MATLAB/spqr.m
new file mode 100644
index 0000000..7f6086d
--- /dev/null
+++ b/SPQR/MATLAB/spqr.m
@@ -0,0 +1,127 @@
+function [Q,R,P,info] = spqr (A,arg2,arg3)                                  %#ok
+%SPQR multithreaded multifrontal rank-revealing sparse QR.
+%For a sparse m-by-n matrix A, and sparse or full B of size m-by-k:
+%
+%   R = spqr (A)              Q-less QR
+%   R = spqr (A,0)            economy variant (size(R,1) = min(m,n))
+%   R = spqr (A,opts)         as above, with non-default options
+%
+%   [Q,R] = spqr (A)          A=Q*R
+%   [Q,R] = spqr (A,0)        economy variant (size(Q,2) = size(R,1) = min(m,n))
+%   [Q,R] = spqr (A,opts)     A=Q*R, with non-default options
+%
+%   [Q,R,P] = spqr (A)        A*P=Q*R where P reduces fill-in
+%   [Q,R,P] = spqr (A,0)      economy variant (size(Q,2) = size(R,1) = min(m,n))
+%   [Q,R,P] = spqr (A,opts)   as above, with non-default options
+%
+%   [C,R] = spqr (A,B)        as R=spqr(A), also returns C=Q'*B
+%   [C,R] = spqr (A,B,0)      economy variant (size(C,1) = size(R,1) = min(m,n))
+%   [C,R] = spqr (A,B,opts)   as above, with non-default options
+%
+%   [C,R,P] = spqr (A,B)      as R=spqr(A*P), also returns C=Q'*B
+%   [C,R,P] = spqr (A,B,0)    economy variant (size(C,1) = size(R,1) = min(m,n))
+%   [C,R,P] = spqr (A,B,opts) as above, with non-default options
+%
+% P is chosen to reduce fill-in and to return R in upper trapezoidal form if A
+% is estimated to have less than full rank.  opts provides non-default options.
+% Q can be optionally returned in Householder form, which is far sparser than
+% returning Q as a sparse matrix.
+%
+% With 4 output arguments, [Q,R,P,info]=spqr(...) or [C,R,P,info]=spqr(...),
+% a struct "info" is returned with statistics about the QR factorization.  The
+% contents of info are mostly self-explanatory, except for info.norm_E_fro.
+% This is equal to the Frobenius norm of E where E=A*P-Q*R.  If
+% info.norm_E_fro <= info.tol, then this guarantees that the true numerical
+% rank is no larger than the rank r returned by SPQR (r=info.rank_A_estimate).
+% If in addition the smallest singular value of R(1:r,1:r) is larger than
+% info.tol, then info.rank_A_estimate is the true numerical rank of A.  Note
+% that info.norm_E_fro is returned as zero if A is determined by SPQR to have
+% full rank (r = min(m,n) where [m n]=size(A)) or if opts.tol=0.
+%
+% Example:
+%   The least-squares solution of an overdetermined system A*x=b with
+%   m > n can be found in at least one of seven ways (in increasing order of
+%   efficiency):
+%
+%      x = pinv(full(A)) * b ;
+%      [Q,R] = spqr (A) ; x = R\(Q'*b) ;
+%      [Q,R,P] = spqr (A) ; x = P*(R\(Q'*b)) ;
+%      [Q,R,P] = spqr (A,struct('Q','Householder')) ; x=P*(R\spqr_qmult(Q,b,0));
+%      [c,R,P] = spqr (A,b) ; x = P*(R\c) ;
+%      [c,R,p] = spqr (A,b,0) ; x = (R\c) ; x (p) = x ;
+%      x = spqr_solve (A,b) ;
+%  
+%   The minimum-norm solution of an underdetermined system A*x=b with
+%   m < n can be found in one of five ways (in increasing order of efficiency):
+%
+%      x = pinv(full(A)) * b ;
+%      [Q,R] = spqr (A') ; x = Q*(R'\b) ;
+%      [Q,R,P] = spqr (A') ; x = Q*(R'\(P'*b)) ;
+%      [Q,R,P] = spqr(A',struct('Q','Householder'));x=spqr_qmult(Q,R'\(P'*b),1);
+%      x = spqr_solve (A,b,struct('solution','min2norm')) ;
+%
+% Entries not present in opts are set to their defaults:
+%
+%   opts.tol:   columns with norm <= tol are treated as zero. The default is
+%       20 * (m+n) * eps * sqrt(max(diag(A'*A))).  Returned as info->tol.
+%       If opts.tol=0, no nonzero columns are treated as zero.  If opts.tol>=0,
+%       and P is present on output, R is returned in upper trapezoidal form
+%       R(1:r,1:r) is upper triangular with zero-free diagonal and where
+%       r=info.rank_A_estimate, unless this is not possible due to structural
+%       rank deficiency.  If opts.tol<0, R is not permuted into this form.
+%
+%   opts.econ:  number of rows of R and columns of Q to return.  m is the
+%   default.  n gives the standard economy form.  A value less than the
+%   estimated rank r is set to r, so opts.econ = 0 gives the "rank-sized"
+%   factorization, where size(R,1) == nnz(diag(R)) == r.
+%
+%   opts.ordering: a string describing what ordering method to use.  Let [m n]
+%   = size (S) where S is obtained by removing singletons from A.  'default':
+%   the default ordering: COLAMD(S).  'amd': AMD(S'*S). 'colamd': COLAMD(S)
+%   'metis': METIS(S'*S), only if METIS is installed. 'best': try all three
+%   (AMD, COLAMD, METIS) and take the best 'bestamd': try AMD and COLAMD and
+%   take the best. 'fixed': P=I; this is the only option if P is not present in
+%   the output. 'natural': singleton removal only.  The singleton pre-ordering
+%   permutes A prior to factorization into the form [A11 A12 ; 0 A22] where A11
+%   is upper triangular with all(abs(diag(A11)) > opts.tol) (see
+%   spqr_singletons).
+%
+%   opts.Q: a string describing how Q is returned.  The default is 'discard' if
+%   Q is not present in the output, or 'matrix' otherwise.  If Q is present and
+%   opts.Q is 'discard', then Q=[] is returned (thus R=spqr(A*P) is
+%   [Q,R,P]=spqr(A) where spqr finds P and Q is discarded instead). 'matrix'
+%   returns Q as a sparse matrix where A=Q*R or A*P=Q*R.  'Householder' returns
+%   Q as a struct containing the Householder reflections applied to A to obtain
+%   R, resulting in a far sparser Q than the 'matrix' option.  
+%
+%   opts.permutation: a string describing how P is to be returned.  The default
+%   is 'matrix', so that A*P=Q*R.  'vector' gives A(:,P)=Q*R instead.
+%
+%   opts.spumoni: acts just like spparms('spumoni',k).
+%
+%   opts.grain, opts.small, opts.nthreads: multitasking control (if compiled
+%   with TBB); the scheduler tries to ensure that all parallel tasks have at
+%   least max (total_flops / opts.grain, opts.small) flops.  No TBB parallelism
+%   is exploited if opts.grain = 1.  opts.nthreads gives the number of threads
+%   to use for TBB (which is different than the number of threads used by the
+%   BLAS).  opts.nthreads <= 0 means to let TBB determine the number of threads
+%   (normally equal to the number of cores); otherwise, use exactly
+%   opts.nthreads threads.  Defaults: 1, 1e6, and 0, respectively.  TBB is
+%   disabled by default since it conflicts with BLAS multithreading.  If you
+%   enable TBB, be sure to disable BLAS multithreading with
+%   maxNumCompThreads(1), or choose opts.nthreads * (number of BLAS threads)
+%   equal to the number of cores.  A good value of opts.grain is twice that of
+%   opts.nthreads.  If TBB parallelism is enabled, the METIS ordering normally
+%   gives the best speedup for large problems.
+%
+%   opts.solution: used by spqr_solve; 'basic' (default), or 'min2norm'.
+%   Determines the kind of solution that spqr_solve computes for
+%   underdetermined systems.  Has no effect for least-squares problems; ignored
+%   by spqr itself.
+%
+% See also SPQR_QMULT, SPQR_SOLVE, LU, NULL, ORTH, QRDELETE, QRINSERT,
+% QRUPDATE, SPQR_SINGLETONS.
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+error ('spqr mexFunction not found') ;
diff --git a/SPQR/MATLAB/spqr_demo.m b/SPQR/MATLAB/spqr_demo.m
new file mode 100644
index 0000000..acb21a6
--- /dev/null
+++ b/SPQR/MATLAB/spqr_demo.m
@@ -0,0 +1,188 @@
+function spqr_demo
+%SPQR_DEMO short demo of SuiteSparseQR 
+%
+% Example:
+%   spqr_demo
+%
+% See also SPQR, SPQR_SOLVE, SPQR_QMULT, SPQR_MAKE, SPQR_INSTALL.
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+help spqr
+help spqr_solve
+help spqr_qmult
+help spqr_demo
+
+% input ('Hit enter to start the SuiteSparseQR demo: ', 's') ;
+fprintf ('\nTesting SuiteSparseQR functions ... please wait ...\n') ;
+
+load west0479 ;
+A = west0479 ;
+rand ('state', 0) ;     %#ok
+m = size (A,1) ;
+
+clf
+
+maxerr = 0 ;
+
+for acomplex = 0:1
+
+    if (acomplex)
+        A = A + 1i * sprand (A) ;
+    end
+    anorm = norm (A,1) ;
+
+    R1 = spqr (A) ;
+    err = norm (R1'*R1 - A'*A, 1) / anorm^2 ;
+    maxerr = max (maxerr, err) ;
+
+    [Q,R,E] = spqr (A) ;
+    err = norm (Q*R-A*E, 1) / anorm ;
+    maxerr = max (maxerr, err) ;
+
+    [H,R,E] = spqr (A, struct ('Q', 'Householder')) ;
+    err = norm (spqr_qmult (H,R,1) - A*E, 1) / anorm ;
+    maxerr = max (maxerr, err) ;
+
+    if (acomplex)
+        subplot (2,5,7)  ; spy (R1)  ; title ('R, no permutation (complex)') ;
+        subplot (2,5,8)  ; spy (R)   ; title ('R with colamd (complex)') ;
+        subplot (2,5,9)  ; spy (Q)   ; title ('Q with colamd (complex)') ;
+        subplot (2,5,10) ; spy (H.H) ; title ('H with colamd (complex)') ;
+    else
+        subplot (2,5,1)  ; spy (A)   ; title ('A') ;
+        subplot (2,5,2)  ; spy (R1)  ; title ('R, no permutation') ;
+        subplot (2,5,3)  ; spy (R)   ; title ('R with colamd') ;
+        subplot (2,5,4)  ; spy (Q)   ; title ('Q with colamd') ;
+        subplot (2,5,5)  ; spy (H.H) ; title ('H with colamd') ;
+    end
+    drawnow
+
+    % test spqr_solve: real/complex, sparse/full,
+    % single/multiple right-hand-sides
+    for bcomplex = 0:1
+        for bsparse = 0:1
+            for nrhs = 0:10
+                if (bsparse)
+                    b = sprand (m, nrhs, 0.1) ;
+                else
+                    b = rand (m, nrhs) ;
+                end
+                if (bcomplex)
+                    b = b + 1i * sprand (b) ;
+                end
+                x = spqr_solve (A,b) ;
+                err = norm (A*x-b,1) / max (anorm * norm(x,1) + norm (b,1), 1) ;
+                maxerr = max (maxerr, err) ;
+            end
+        end
+    end
+end
+
+fprintf ('\nQR maximum error: %g\n\n', maxerr) ;
+if (maxerr > 1e-12)
+    error ('One or more tests failed; error is high!') ;
+end
+
+% ------------------------------------------------------------------------------
+% compare spqr_solve
+% ------------------------------------------------------------------------------
+
+fprintf ('Compare performance with MATLAB on a dense least-squares problem:\n');
+A = rand (2000,1000) ;
+b = rand (2000,1) ;
+S = sparse (A) ;
+fprintf ('\nA = rand (2000,1000) ;\nb = rand (2000,1) ;\nS = sparse (A) ;\n') ;
+
+fprintf ('tic, x = spqr_solve(S,b) ; toc  ') ;
+tic
+x = spqr_solve (S, b) ;
+t1 = toc ;
+r1 = norm (A*x-b,1) ;
+r1b = norm (A'*(A*x)-A'*b,1) / norm (A'*A,1) ;
+fprintf ('%% time %8.3f residual %8.3e normal eqn resid %8.3e\n', t1,r1, r1b) ;
+
+fprintf ('tic, x = A\\b ; toc              ') ;
+tic
+x = A\b ;
+t2 = toc ;
+r2 = norm (A*x-b,1) ;
+r2b = norm (A'*(A*x)-A'*b,1) / norm (A'*A,1) ;
+fprintf ('%% time %8.3f residual %8.3e normal eqn resid %8.3e\n', t2,r2,r2b) ;
+
+fprintf ('tic, x = S\\b ; toc              ') ;
+tic
+x = S\b ;
+t3 = toc ;
+r3 = norm (A*x-b,1) ;
+r3b = norm (A'*(A*x)-A'*b,1) / norm (A'*A,1) ;
+fprintf ('%% time %8.3f residual %8.3e normal eqn resid %8.3e\n', t3,r3,r3b) ;
+
+% ------------------------------------------------------------------------------
+% compare spqr with 1000-by-2000 system
+% ------------------------------------------------------------------------------
+
+fprintf ('\nA = rand (1000,2000) ;\nS = sparse (A) ;\n') ;
+A = rand (1000,2000) ;
+S = sparse (A) ;
+
+fprintf ('tic, R = spqr(S) ; toc          ') ;
+tic
+R = spqr (S) ;
+t1 = toc ;
+r1 = norm (R'*R-A'*A,1) / norm(A,1)^2 ;
+fprintf ('%% time %8.3f error %8.3e\n', t1,r1) ;
+clear R
+
+fprintf ('tic, R = qr(A)   ; toc          ') ;
+tic
+R = qr (A) ;
+t2 = toc ;
+R = triu (R) ;
+r2 = norm (R'*R-A'*A,1) / norm(A,1)^2 ;
+fprintf ('%% time %8.3f error %8.3e\n', t2,r2) ;
+clear R
+
+fprintf ('tic, R = qr(S)   ; toc          ') ;
+tic
+R = qr (S) ;
+t3 = toc ;
+r3 = norm (R'*R-A'*A,1) / norm(A,1)^2 ;
+fprintf ('%% time %8.3f error %8.3e\n', t3,r3) ;
+clear R
+
+% ------------------------------------------------------------------------------
+% compare spqr with 100-by-20000 system
+% ------------------------------------------------------------------------------
+
+A = rand (100,20000) ;
+S = sparse (A) ;
+fprintf ('\nA = rand (100,20000) ;\nS = sparse (A) ;\n') ;
+
+fprintf ('tic, R = spqr(S) ; toc          ') ;
+tic
+R = spqr (S) ;                                                              %#ok
+t1 = toc ;
+fprintf ('%% time %8.3f\n', t1) ;
+clear R
+
+fprintf ('tic, R = qr(A)   ; toc          ') ;
+tic
+R = qr (A) ;                                                                %#ok
+t2 = toc ;
+fprintf ('%% time %8.3f\n', t2) ;
+clear R
+
+% skip the old MATLAB QR ... it's way to slow ...
+%   fprintf ('tic, R = qr(S)   ; toc          ') ;
+%   try
+%       tic
+%       R = qr (S) ;                                                        %#ok
+%       t3 = toc ;
+%       fprintf ('%% time %8.3f\n', t3) ;
+%   catch                                                                   %#ok
+%       fprintf ('%% MATLAB sparse qr failed ...\n') ;
+%   end
+%   clear R
+
+fprintf ('All spqr tests passed\n') ;
diff --git a/SPQR/MATLAB/spqr_install.m b/SPQR/MATLAB/spqr_install.m
new file mode 100644
index 0000000..82af2fb
--- /dev/null
+++ b/SPQR/MATLAB/spqr_install.m
@@ -0,0 +1,41 @@
+function spqr_install (tbb)
+%SPQR_INSTALL compile and install SuiteSparseQR
+%
+% Example:
+%   spqr_install                        % compiles using ../../metis-4.0, no TBB
+%   spqr_install ('tbb')                % compiles with TBB
+%
+% SuiteSparseQR relies on CHOLMOD, AMD, and COLAMD, and can optionally use
+% CCOLAMD, CAMD, and METIS as well.  By default, CCOLAMD, CAMD, and METIS are
+% used.  METIS is assumed to be in the ../../metis-4.0 directory.  If not
+% present there, it is not used.
+%
+% See http://www-users.cs.umn.edu/~karypis/metis for a copy of METIS 4.0.1.
+%
+% You can only use spqr_install while in the SuiteSparseQR/MATLAB directory.
+%
+% Multithreading based on Intel Threading Building Blocks (TBB) is optionally
+% used. It is not enabled by default since it conflicts with multithreading in
+% the BLAS.
+%
+% See also spqr, spqr_solve, spqr_qmult.
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+if (nargin < 2)
+    tbb = 0 ;
+end
+
+% compile SuiteSparseQR and add to the path
+spqr_make (tbb) ;
+spqr_path = pwd ;
+addpath (spqr_path)
+
+fprintf ('\nThe following path has been added.  You may wish to add it\n') ;
+fprintf ('permanently, using the MATLAB pathtool command.\n') ;
+fprintf ('%s\n', spqr_path) ;
+
+fprintf ('\nTo try your new mexFunctions, try this command:\n') ;
+fprintf ('spqr_demo\n') ;
+
+
diff --git a/SPQR/MATLAB/spqr_make.m b/SPQR/MATLAB/spqr_make.m
new file mode 100644
index 0000000..7b63ec6
--- /dev/null
+++ b/SPQR/MATLAB/spqr_make.m
@@ -0,0 +1,485 @@
+function spqr_make (opt1)
+%SPQR_MAKE compiles the SuiteSparseQR mexFunctions
+%
+% Example:
+%   spqr_make
+%
+% SuiteSparseQR relies on CHOLMOD, AMD, and COLAMD, and optionally CCOLAMD,
+% CAMD, and METIS.  All but METIS are distributed with CHOLMOD.  To compile
+% SuiteSparseQR to use METIS you must first place a copy of the metis-4.0
+% directory (METIS version 4.0.1) in same directory that contains the AMD,
+% COLAMD, CCOLAMD, CHOLMOD, and SuiteSparseQR directories.  Next, type
+%
+%   spqr_make
+%
+% in the MATLAB command window.  If METIS is not present in ../../metis-4.0,
+% then it is not used.  See http://www-users.cs.umn.edu/~karypis/metis for a
+% copy of METIS 4.0.1.
+%
+% To compile using Intel's Threading Building Blocks (TBB) use:
+%
+%   spqr_make ('tbb')
+%
+% TBB parallelism is not the default, since it conflicts with the multithreaded
+% BLAS (the Intel MKL are OpenMP based, for example).  This may change in
+% future versions.
+%
+% You must type the spqr_make command while in the SuiteSparseQR/MATLAB
+% directory.
+%
+% See also spqr, spqr_solve, spqr_qmult, qr, mldivide
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+details = 0 ;       % 1 if details of each command are to be printed, 0 if not
+
+v = version ;
+try
+    % ispc does not appear in MATLAB 5.3
+    pc = ispc ;
+    mac = ismac ;
+catch                                                                       %#ok
+    % if ispc fails, assume we are on a Windows PC if it's not unix
+    pc = ~isunix ;
+    mac = 0 ;
+end
+
+flags = '' ;
+is64 = (~isempty (strfind (computer, '64'))) ;
+if (is64)
+    % 64-bit MATLAB
+    flags = '-largeArrayDims' ;
+end
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    flags = ['-silent ' flags] ;
+end
+
+include = '-DNMATRIXOPS -DNMODIFY -I. -I../../AMD/Include -I../../COLAMD/Include -I../../CHOLMOD/Include -I../Include -I../../SuiteSparse_config' ;
+
+% Determine if METIS is available
+metis_path = '../../metis-4.0' ;
+have_metis = exist ([metis_path '/Lib'], 'dir') ;
+
+% Determine if TBB is to be used
+if (nargin < 1)
+    tbb = 0 ;
+elseif (nargin < 2)
+    tbb = strcmp (opt1, 'tbb') ;
+end
+
+% fix the METIS 4.0.1 rename.h file
+if (have_metis)
+    fprintf ('Compiling SuiteSparseQR with METIS for MATLAB Version %s\n', v) ;
+    f = fopen ('rename.h', 'w') ;
+    if (f == -1)
+        error ('unable to create rename.h in current directory') ;
+    end
+    fprintf (f, '/* do not edit this file; generated by spqr_make */\n') ;
+    fprintf (f, '#undef log2\n') ;
+    fprintf (f, '#include "%s/Lib/rename.h"\n', metis_path) ;
+    fprintf (f, '#undef log2\n') ;
+    fprintf (f, '#define log2 METIS__log2\n') ;
+    fprintf (f, '#include "mex.h"\n') ;
+    fprintf (f, '#define malloc mxMalloc\n') ;
+    fprintf (f, '#define free mxFree\n') ;
+    fprintf (f, '#define calloc mxCalloc\n') ;
+    fprintf (f, '#define realloc mxRealloc\n') ;
+    fclose (f) ;
+    include = [include ' -I' metis_path '/Lib'] ;
+    include = [include ' -I../../CCOLAMD/Include -I../../CAMD/Include' ] ;
+else
+    fprintf ('Compiling SuiteSparseQR without METIS on MATLAB Version %s\n', v);
+    include = ['-DNPARTITION ' include ] ;
+end
+
+%-------------------------------------------------------------------------------
+% BLAS option
+%-------------------------------------------------------------------------------
+
+% This is exceedingly ugly.  The MATLAB mex command needs to be told where to
+% find the LAPACK and BLAS libraries, which is a real portability nightmare.
+% The correct option is highly variable and depends on the MATLAB version.
+
+if (pc)
+    if (verLessThan ('matlab', '6.5'))
+        % MATLAB 6.1 and earlier: use the version supplied in CHOLMOD
+        lib = '../../CHOLMOD/MATLAB/lcc_lib/libmwlapack.lib' ;
+    elseif (verLessThan ('matlab', '7.5'))
+        % use the built-in LAPACK lib (which includes the BLAS)
+        lib = 'libmwlapack.lib' ;
+    else
+        % need to also use the built-in BLAS lib 
+        lib = 'libmwlapack.lib libmwblas.lib' ;
+    end
+else
+    if (verLessThan ('matlab', '7.5'))
+        % MATLAB 7.5 and earlier, use the LAPACK lib (including the BLAS)
+        lib = '-lmwlapack' ;
+    else
+        % MATLAB 7.6 requires the -lmwblas option; earlier versions do not
+        lib = '-lmwlapack -lmwblas' ;
+    end
+end
+
+if (is64 && ~verLessThan ('matlab', '7.8'))
+    % versions 7.8 and later on 64-bit platforms use a 64-bit BLAS
+    fprintf ('with 64-bit BLAS\n') ;
+    flags = [flags ' -DBLAS64'] ;
+end
+
+%-------------------------------------------------------------------------------
+% GPU option
+%-------------------------------------------------------------------------------
+
+% GPU not yet supported for the spqr MATLAB mexFunction
+% flags = [flags ' -DGPU_BLAS'] ;
+
+%-------------------------------------------------------------------------------
+% TBB option
+%-------------------------------------------------------------------------------
+
+% You should install TBB properly so that mex can find the library files and
+% include files, but you can also modify the tbb_lib_path and tbb_include_path
+% strings below to if you need to specify the path to your own installation of
+% TBB.
+
+% vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+% >>>>>>>>>>>>>>>>>>>>> EDIT THE tbb_path BELOW AS NEEDED <<<<<<<<<<<<<<<<<<<<<<
+if (pc)
+    % For Windows, with TBB installed in C:\TBB.  Edit this line as needed:
+    tbb_path = 'C:\TBB\tbb21_009oss' ;
+else
+    % For Linux, edit this line as needed (not needed if already in /usr/lib):
+    tbb_path = '/cise/homes/davis/Install/tbb21_009oss' ;
+end
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+% You should not have to edit the lines below.
+if (pc)
+    if (is64)
+        tbb_lib_path = [tbb_path '\ia32\vc9\lib\'] ;
+    else
+        tbb_lib_path = [tbb_path '\em64t\vc9\lib\'] ;
+    end
+    tbb_include_path = [tbb_path '\include\'] ;
+else
+    % For Linux, with TBB might be already installed in /usr/lib
+    if (exist ('/usr/lib/libtbb.so', 'file'))
+        % do not edit these lines
+        tbb_path = '' ;
+        tbb_lib_path = '' ;
+        tbb_include_path = '' ;
+    else
+        if (is64)
+            tbb_lib_path = '/em64t/cc4.1.0_libc2.4_kernel2.6.16.21/lib' ;
+        else
+            tbb_lib_path = '/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib' ;
+        end
+        tbb_lib_path = [tbb_path tbb_lib_path] ;
+        tbb_include_path = [tbb_path '/include/'] ;
+    end
+end
+
+if (tbb)
+    fprintf ('Compiling with Intel TBB parallelism\n') ;
+    lib = [lib ' -L' tbb_lib_path ' -ltbb'] ;
+    include = [include ' -I' tbb_include_path ' -DHAVE_TBB' ] ;
+end
+
+if (~(pc || mac))
+    % for POSIX timing routine
+    lib = [lib ' -lrt'] ;
+end
+
+%-------------------------------------------------------------------------------
+% ready to compile ...
+%-------------------------------------------------------------------------------
+
+config_src = { '../../SuiteSparse_config/SuiteSparse_config' } ;
+
+amd_c_src = { ...
+    '../../AMD/Source/amd_1', ...
+    '../../AMD/Source/amd_2', ...
+    '../../AMD/Source/amd_aat', ...
+    '../../AMD/Source/amd_control', ...
+    '../../AMD/Source/amd_defaults', ...
+    '../../AMD/Source/amd_dump', ...
+    '../../AMD/Source/amd_global', ...
+    '../../AMD/Source/amd_info', ...
+    '../../AMD/Source/amd_order', ...
+    '../../AMD/Source/amd_postorder', ...
+    '../../AMD/Source/amd_post_tree', ...
+    '../../AMD/Source/amd_preprocess', ...
+    '../../AMD/Source/amd_valid' } ;
+
+colamd_c_src = {
+    '../../COLAMD/Source/colamd', ...
+    '../../COLAMD/Source/colamd_global' } ;
+
+% CAMD and CCOLAMD are not needed if we don't have METIS
+camd_c_src = { ...
+    '../../CAMD/Source/camd_1', ...
+    '../../CAMD/Source/camd_2', ...
+    '../../CAMD/Source/camd_aat', ...
+    '../../CAMD/Source/camd_control', ...
+    '../../CAMD/Source/camd_defaults', ...
+    '../../CAMD/Source/camd_dump', ...
+    '../../CAMD/Source/camd_global', ...
+    '../../CAMD/Source/camd_info', ...
+    '../../CAMD/Source/camd_order', ...
+    '../../CAMD/Source/camd_postorder', ...
+    '../../CAMD/Source/camd_preprocess', ...
+    '../../CAMD/Source/camd_valid' } ;
+
+ccolamd_c_src = {
+    '../../CCOLAMD/Source/ccolamd', ...
+    '../../CCOLAMD/Source/ccolamd_global' } ;
+
+if (have_metis)
+
+    metis_c_src = {
+        'Lib/balance', ...
+        'Lib/bucketsort', ...
+        'Lib/ccgraph', ...
+        'Lib/coarsen', ...
+        'Lib/compress', ...
+        'Lib/debug', ...
+        'Lib/estmem', ...
+        'Lib/fm', ...
+        'Lib/fortran', ...
+        'Lib/frename', ...
+        'Lib/graph', ...
+        'Lib/initpart', ...
+        'Lib/kmetis', ...
+        'Lib/kvmetis', ...
+        'Lib/kwayfm', ...
+        'Lib/kwayrefine', ...
+        'Lib/kwayvolfm', ...
+        'Lib/kwayvolrefine', ...
+        'Lib/match', ...
+        'Lib/mbalance2', ...
+        'Lib/mbalance', ...
+        'Lib/mcoarsen', ...
+        'Lib/memory', ...
+        'Lib/mesh', ...
+        'Lib/meshpart', ...
+        'Lib/mfm2', ...
+        'Lib/mfm', ...
+        'Lib/mincover', ...
+        'Lib/minitpart2', ...
+        'Lib/minitpart', ...
+        'Lib/mkmetis', ...
+        'Lib/mkwayfmh', ...
+        'Lib/mkwayrefine', ...
+        'Lib/mmatch', ...
+        'Lib/mmd', ...
+        'Lib/mpmetis', ...
+        'Lib/mrefine2', ...
+        'Lib/mrefine', ...
+        'Lib/mutil', ...
+        'Lib/myqsort', ...
+        'Lib/ometis', ...
+        'Lib/parmetis', ...
+        'Lib/pmetis', ...
+        'Lib/pqueue', ...
+        'Lib/refine', ...
+        'Lib/separator', ...
+        'Lib/sfm', ...
+        'Lib/srefine', ...
+        'Lib/stat', ...
+        'Lib/subdomains', ...
+        'Lib/timing', ...
+        'Lib/util' } ;
+
+    for i = 1:length (metis_c_src)
+        metis_c_src {i} = [metis_path '/' metis_c_src{i}] ;
+    end
+end
+
+cholmod_c_src = {
+    '../../CHOLMOD/Core/cholmod_aat', ...
+    '../../CHOLMOD/Core/cholmod_add', ...
+    '../../CHOLMOD/Core/cholmod_band', ...
+    '../../CHOLMOD/Core/cholmod_change_factor', ...
+    '../../CHOLMOD/Core/cholmod_common', ...
+    '../../CHOLMOD/Core/cholmod_complex', ...
+    '../../CHOLMOD/Core/cholmod_copy', ...
+    '../../CHOLMOD/Core/cholmod_dense', ...
+    '../../CHOLMOD/Core/cholmod_error', ...
+    '../../CHOLMOD/Core/cholmod_factor', ...
+    '../../CHOLMOD/Core/cholmod_memory', ...
+    '../../CHOLMOD/Core/cholmod_sparse', ...
+    '../../CHOLMOD/Core/cholmod_transpose', ...
+    '../../CHOLMOD/Core/cholmod_triplet', ...
+    '../../CHOLMOD/Check/cholmod_check', ...
+    '../../CHOLMOD/Check/cholmod_read', ...
+    '../../CHOLMOD/Check/cholmod_write', ...
+    '../../CHOLMOD/Cholesky/cholmod_amd', ...
+    '../../CHOLMOD/Cholesky/cholmod_analyze', ...
+    '../../CHOLMOD/Cholesky/cholmod_colamd', ...
+    '../../CHOLMOD/Cholesky/cholmod_etree', ...
+    '../../CHOLMOD/Cholesky/cholmod_factorize', ...
+    '../../CHOLMOD/Cholesky/cholmod_postorder', ...
+    '../../CHOLMOD/Cholesky/cholmod_rcond', ...
+    '../../CHOLMOD/Cholesky/cholmod_resymbol', ...
+    '../../CHOLMOD/Cholesky/cholmod_rowcolcounts', ...
+    '../../CHOLMOD/Cholesky/cholmod_rowfac', ...
+    '../../CHOLMOD/Cholesky/cholmod_solve', ...
+    '../../CHOLMOD/Cholesky/cholmod_spsolve', ...
+    '../../CHOLMOD/Supernodal/cholmod_super_numeric', ...
+    '../../CHOLMOD/Supernodal/cholmod_super_solve', ...
+    '../../CHOLMOD/Supernodal/cholmod_super_symbolic' } ;
+
+cholmod_c_partition_src = {
+    '../../CHOLMOD/Partition/cholmod_ccolamd', ...
+    '../../CHOLMOD/Partition/cholmod_csymamd', ...
+    '../../CHOLMOD/Partition/cholmod_camd', ...
+    '../../CHOLMOD/Partition/cholmod_metis', ...
+    '../../CHOLMOD/Partition/cholmod_nesdis' } ;
+
+% SuiteSparseQR does not need the MatrixOps or Modify modules of CHOLMOD
+%   cholmod_unused = {
+%       '../../CHOLMOD/MatrixOps/cholmod_drop', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_horzcat', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_norm', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_scale', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_sdmult', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_ssmult', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_submatrix', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_vertcat', ...
+%       '../../CHOLMOD/MatrixOps/cholmod_symmetry', ...
+%       '../../CHOLMOD/Modify/cholmod_rowadd', ...
+%       '../../CHOLMOD/Modify/cholmod_rowdel', ...
+%       '../../CHOLMOD/Modify/cholmod_updown' } ;
+
+% SuiteSparseQR source code, and mex support file
+spqr_cpp_src = {
+    '../Source/spqr_parallel', ...
+    '../Source/spqr_1colamd', ...
+    '../Source/spqr_1factor', ...
+    '../Source/spqr_1fixed', ...
+    '../Source/spqr_analyze', ...
+    '../Source/spqr_append', ...
+    '../Source/spqr_assemble', ...
+    '../Source/spqr_cpack', ...
+    '../Source/spqr_csize', ...
+    '../Source/spqr_cumsum', ...
+    '../Source/spqr_debug', ...
+    '../Source/spqr_factorize', ...
+    '../Source/spqr_fcsize', ...
+    '../Source/spqr_freefac', ...
+    '../Source/spqr_freenum', ...
+    '../Source/spqr_freesym', ...
+    '../Source/spqr_front', ...
+    '../Source/spqr_fsize', ...
+    '../Source/spqr_happly', ...
+    '../Source/spqr_happly_work', ...
+    '../Source/spqr_hpinv', ...
+    '../Source/spqr_kernel', ...
+    '../Source/spqr_larftb', ...
+    '../Source/spqr_panel', ...
+    '../Source/spqr_rconvert', ...
+    '../Source/spqr_rcount', ...
+    '../Source/spqr_rhpack', ...
+    '../Source/spqr_rmap', ...
+    '../Source/spqr_rsolve', ...
+    '../Source/spqr_shift', ...
+    '../Source/spqr_stranspose1', ...
+    '../Source/spqr_stranspose2', ...
+    '../Source/spqr_trapezoidal', ...
+    '../Source/spqr_type', ...
+    '../Source/spqr_tol', ...
+    '../Source/spqr_maxcolnorm', ...
+    '../Source/SuiteSparseQR_qmult', ...
+    '../Source/SuiteSparseQR', ...
+    '../Source/SuiteSparseQR_expert', ...
+    '../MATLAB/spqr_mx' } ;
+
+% SuiteSparse C source code, for MATLAB error handling
+spqr_c_mx_src = { '../MATLAB/spqr_mx_error' } ;
+
+% SuiteSparseQR mexFunctions
+spqr_mex_cpp_src = { 'spqr', 'spqr_qmult', 'spqr_solve', 'spqr_singletons' } ;
+
+if (pc)
+    % Windows does not have drand48 and srand48, required by METIS.  Use
+    % drand48 and srand48 in CHOLMOD/MATLAB/Windows/rand48.c instead.
+    % Also provide Windows with an empty <strings.h> include file.
+    obj_extension = '.obj' ;
+    cholmod_c_src = [cholmod_c_src {'../../CHOLMOD/MATLAB/Windows/rand48'}] ;
+    include = [include ' -I../../CHOLMOD/MATLAB/Windows'] ;
+else
+    obj_extension = '.o' ;
+end
+
+% compile each library source file
+obj = '' ;
+
+c_source = [config_src amd_c_src colamd_c_src cholmod_c_src spqr_c_mx_src ] ;
+if (have_metis)
+    c_source = [c_source cholmod_c_partition_src ccolamd_c_src ] ;
+    c_source = [c_source camd_c_src metis_c_src] ;
+end
+
+cpp_source = spqr_cpp_src ;
+
+kk = 0 ;
+
+for f = cpp_source
+    ff = f {1} ;
+    slash = strfind (ff, '/') ;
+    if (isempty (slash))
+        slash = 1 ;
+    else
+        slash = slash (end) + 1 ;
+    end
+    o = ff (slash:end) ;
+    obj = [obj  ' ' o obj_extension] ;                                      %#ok
+    s = sprintf ('mex %s -O %s -c %s.cpp', flags, include, ff) ;
+    kk = do_cmd (s, kk, details) ;
+end
+
+for f = c_source
+    ff = f {1} ;
+    slash = strfind (ff, '/') ;
+    if (isempty (slash))
+        slash = 1 ;
+    else
+        slash = slash (end) + 1 ;
+    end
+    o = ff (slash:end) ;
+    obj = [obj  ' ' o obj_extension] ;                                      %#ok
+    s = sprintf ('mex %s -DDLONG -O %s -c %s.c', flags, include, ff) ;
+    kk = do_cmd (s, kk, details) ;
+end
+
+% compile each mexFunction
+for f = spqr_mex_cpp_src
+    s = sprintf ('mex %s -O %s %s.cpp', flags, include, f{1}) ;
+    s = [s obj ' ' lib] ;                                                   %#ok
+    kk = do_cmd (s, kk, details) ;
+end
+
+% clean up
+s = ['delete ' obj] ;
+status = warning ('off', 'MATLAB:DELETE:FileNotFound') ;
+delete rename.h
+warning (status) ;
+do_cmd (s, kk, details) ;
+fprintf ('\nSuiteSparseQR successfully compiled\n') ;
+
+%-------------------------------------------------------------------------------
+function kk = do_cmd (s, kk, details)
+%DO_CMD evaluate a command, and either print it or print a "."
+if (details)
+    fprintf ('%s\n', s) ;
+else
+    if (mod (kk, 60) == 0)
+        fprintf ('\n') ;
+    end
+    kk = kk + 1 ;
+    fprintf ('.') ;
+end
+eval (s) ;
diff --git a/SPQR/MATLAB/spqr_mx.cpp b/SPQR/MATLAB/spqr_mx.cpp
new file mode 100644
index 0000000..4dd5416
--- /dev/null
+++ b/SPQR/MATLAB/spqr_mx.cpp
@@ -0,0 +1,1103 @@
+// =============================================================================
+// === spqr_mx =================================================================
+// =============================================================================
+
+// Utility routines used by the SuiteSparseQR mexFunctions
+
+#include "spqr_mx.hpp"
+
+// =============================================================================
+// === spqr_mx_config ==========================================================
+// =============================================================================
+
+// Define function pointers and other parameters for a mexFunction
+
+int spqr_mx_config (Long spumoni, cholmod_common *cc)
+{
+    if (cc == NULL) return (FALSE) ;
+
+    // cholmod_l_solve must return a real or zomplex X for MATLAB
+    cc->prefer_zomplex = TRUE ;
+
+    // printing and error handling
+    if (spumoni == 0)
+    {
+	// do not print anything from within CHOLMOD
+	cc->print = -1 ;
+	SuiteSparse_config.printf_func = NULL ;
+    }
+    else
+    {
+	// spumoni = 1: print warning and error messages.  cholmod_l_print_*
+	//	routines will print a one-line summary of each object printed.
+	// spumoni = 2: also print a short summary of each object.
+	cc->print = spumoni + 2 ;
+    }
+
+    // error handler
+    cc->error_handler = spqr_mx_error ;
+    spqr_spumoni = spumoni ;
+
+#ifndef NPARTITION
+#if defined(METIS_VERSION)
+#if (METIS_VERSION >= METIS_VER(4,0,2))
+    // METIS 4.0.2 uses function pointers for malloc and free
+    METIS_malloc = SuiteSparse_config.malloc_func ;
+    METIS_free   = SuiteSparse_config.free_func ;
+#endif
+#endif
+#endif
+
+    // Turn off METIS memory guard.  It is not needed, because mxMalloc will
+    // safely terminate the mexFunction and free any workspace without killing
+    // all of MATLAB.  This assumes spqr_make was used to compile SuiteSparseQR
+    // for MATLAB.
+    cc->metis_memory = 0.0 ;
+
+    cc->SPQR_grain = 1 ;    // opts.grain
+    cc->SPQR_small = 1e6 ;  // opts.small
+    cc->SPQR_shrink = 1 ;   // controls SPQR shrink realloc
+    cc->SPQR_nthreads = 0 ; // number of TBB threads (0 = default)
+
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_spumoni =========================================================
+// =============================================================================
+
+// For spumoni output.  Have fun!
+
+void spqr_mx_spumoni
+(
+    spqr_mx_options *opts,
+    int is_complex,             // TRUE if complex, FALSE if real
+    cholmod_common *cc
+)
+{
+    // -------------------------------------------------------------------------
+    // author and copyright
+    // -------------------------------------------------------------------------
+
+    mexPrintf (
+    "\nSuiteSparseQR, version %d.%d.%d (%s), a multithreaded\n"
+    "multifrontal sparse QR factorization method, (c) Timothy A. Davis,\n"
+    "http://www.suitesparse.com\n\n",
+        SPQR_MAIN_VERSION, SPQR_SUB_VERSION, SPQR_SUBSUB_VERSION, SPQR_DATE) ;
+
+    // -------------------------------------------------------------------------
+    // installation
+    // -------------------------------------------------------------------------
+
+    if (opts->spumoni > 1)
+    {
+        mexPrintf (
+            "Installation:\n"
+            "    size of mwIndex:  %d bytes\n"
+            "    size of int:      %d bytes\n"
+            "    size of BLAS int: %d bytes\n",
+            sizeof (mwIndex), sizeof (int), sizeof (BLAS_INT)) ;
+#ifdef HAVE_TBB
+        mexPrintf ("    compiled with Intel Threading Building Blocks (TBB)\n");
+#endif
+#ifndef NEXPERT
+        mexPrintf ("    compiled with opts.solution='min2norm' option\n") ;
+#endif
+#ifndef NPARTITION
+        mexPrintf (
+            "    compiled with opts.ordering='metis' option\n") ;
+#endif
+    }
+
+    // -------------------------------------------------------------------------
+    // input options
+    // -------------------------------------------------------------------------
+
+    mexPrintf ("Input options:\n") ;
+
+    if (opts->tol <= SPQR_DEFAULT_TOL)
+    {
+        mexPrintf ("    opts.tol <= %g (use default tolerance)\n",
+            (double) SPQR_DEFAULT_TOL) ;
+    }
+    else if (opts->tol < 0)
+    {
+        mexPrintf ("    %g < opts.tol < 0 (use no tolerance)\n",
+            (double) SPQR_DEFAULT_TOL) ;
+    }
+    else
+    {
+        mexPrintf ("    opts.tol = %g (column 2-norm tolerance)\n", opts->tol) ;
+    }
+
+    mexPrintf ("    opts.Q = '") ;
+    switch (opts->Qformat)
+    {
+        case SPQR_Q_DISCARD:      mexPrintf ("discard'\n") ;     break ;
+        case SPQR_Q_MATRIX:       mexPrintf ("matrix'\n") ;      break ;
+        case SPQR_Q_HOUSEHOLDER:  mexPrintf ("Householder'\n") ; break ;
+        default:                  mexPrintf ("undefined'\n") ;   break ;
+    }
+
+    mexPrintf ("    opts.econ = %ld"
+        " (# of rows of R is max (min (m, opts.econ), r)\n"
+        "        where m = size(A,1) and r = rank(A) estimate)\n",
+        opts->econ) ;
+
+    mexPrintf ("    opts.ordering = '") ;
+    switch (opts->ordering)
+    {
+        case SPQR_ORDERING_FIXED:   mexPrintf ("fixed'\n") ;   break ;
+        case SPQR_ORDERING_NATURAL: mexPrintf ("natural'\n") ; break ;
+        case SPQR_ORDERING_COLAMD:  mexPrintf ("colamd'\n") ;  break ;
+        case SPQR_ORDERING_GIVEN:   mexPrintf ("given'\n") ;   break ;
+        case SPQR_ORDERING_CHOLMOD: mexPrintf ("best'\n") ;    break ;
+        case SPQR_ORDERING_AMD:     mexPrintf ("amd'\n") ;     break ;
+#ifndef NPARTITION
+        case SPQR_ORDERING_METIS:   mexPrintf ("metis'\n") ;   break ;
+#endif
+        case SPQR_ORDERING_DEFAULT: mexPrintf ("default'\n") ; break ;
+        default: mexPrintf ("undefined'\n") ; break ;
+    }
+
+    mexPrintf ("    opts.permutation = ") ;
+    if (opts->permvector)
+    {
+        mexPrintf ("'vector'\n") ;
+    }
+    else
+    {
+        mexPrintf ("'matrix'\n") ;
+    }
+
+    mexPrintf ("    opts.solution = ") ;
+    if (opts->min2norm)
+    {
+        mexPrintf ("'min2norm'\n") ;
+    }
+    else
+    {
+        mexPrintf ("'basic'\n") ;
+    }
+
+#ifdef HAVE_TBB
+    mexPrintf (
+    "    opts.grain = %g, opts.small = %g, opts.nthreads = %d\n"
+    "        The analysis for TBB parallelism constructs a task graph by\n"
+    "        merging nodes in the frontal elimination tree, which is itself\n"
+    "        a coalescing of the column elimination tree with one node per\n"
+    "        column in the matrix.  The goal of the merging heuristic is to\n"
+    "        create a task graph whose leaf nodes have flop counts >=\n"
+    "        max ((total flops)/opts.grain, opts.small).  If opts.grain <= 1,\n"
+    "        then no TBB parallelism is exploited.  The current default is\n"
+    "        opts.grain=1 because in the current version of TBB and OpenMP,\n"
+    "        TBB parallelism conflicts with BLAS OpenMP-based parallelism.\n"
+    "        This will be resolved in a future version.\n"
+    "        opts.nthreads is the number of threads that TBB should use.\n"
+    "        If zero, the TBB default is used, which is normally the total\n"
+    "        number of cores your computer has.\n",
+        cc->SPQR_grain, cc->SPQR_small, cc->SPQR_nthreads) ;
+#endif
+
+    // -------------------------------------------------------------------------
+    // output statistics
+    // -------------------------------------------------------------------------
+
+    mexPrintf ("Output statistics:\n") ;
+    mexPrintf ("    upper bound on nnz(R): %ld\n",        cc->SPQR_istat [0]) ;
+    mexPrintf ("    upper bound on nnz(H): %ld\n",        cc->SPQR_istat [1]) ;
+    mexPrintf ("    number of frontal matrices: %ld\n",   cc->SPQR_istat [2]) ;
+    mexPrintf ("    # tasks in TBB task tree: %ld\n",     cc->SPQR_istat [3]) ;
+    mexPrintf ("    rank(A) estimate: %ld\n",             cc->SPQR_istat [4]) ;
+    mexPrintf ("    # of column singletons: %ld\n",       cc->SPQR_istat [5]) ;
+    mexPrintf ("    # of singleton rows: %ld\n",          cc->SPQR_istat [6]) ;
+    mexPrintf ("    upper bound on flop count: %g\n",
+        cc->SPQR_flopcount_bound * (is_complex ? 4 : 1)) ;
+    mexPrintf ("    column 2-norm tolerance used: %g\n",  cc->SPQR_tol_used) ;
+    mexPrintf ("    actual memory usage: %g (bytes)\n",
+        ((double) cc->memory_usage)) ;
+
+    // Place additional spumoni info here ...
+}
+
+
+// =============================================================================
+// === get_option ==============================================================
+// =============================================================================
+
+// get a single string or numeric option from the MATLAB options struct
+
+static int get_option
+(
+    // inputs:
+    const mxArray *mxopts,      // the MATLAB struct
+    const char *field,          // the field to get from the MATLAB struct
+
+    // outputs:
+    double *x,                  // double value of the field, if present
+    Long *x_present,            // true if x is present
+    char **s,                   // char value of the field, if present;
+                                // must be mxFree'd by caller when done
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Long f ;
+    mxArray *p ;
+
+    if (cc == NULL) return (FALSE) ;
+
+    // find the field number
+    if (mxopts == NULL || mxIsEmpty (mxopts) || !mxIsStruct (mxopts))
+    {
+        // mxopts is not present, or [ ], or not a struct
+        f = EMPTY ;
+    }
+    else
+    {
+        // f will be EMPTY (-1) if the field is not present
+        f = mxGetFieldNumber (mxopts, field) ;
+    }
+
+    // get the field, or NULL if not present
+    if (f == EMPTY)
+    {
+        p = NULL ;
+    }
+    else
+    {
+        p = mxGetFieldByNumber (mxopts, 0, f) ;
+    }
+
+    *x_present = FALSE ;
+    if (s != NULL)
+    {
+        *s = NULL ;
+    }
+
+    if (p == NULL)
+    {
+        // option not present
+        return (TRUE) ;
+    }
+    if (mxIsNumeric (p))
+    {
+        // option is numeric
+        if (x == NULL)
+        {
+            mexPrintf ("opts.%s field must be a string\n", field) ;
+            mexErrMsgIdAndTxt ("QR:invalidInput", "invalid option") ;
+        }
+        *x = mxGetScalar (p) ;
+        *x_present = TRUE ;
+    }
+    else if (mxIsChar (p))
+    {
+        // option is a MATLAB string; convert it to a C-style string
+        if (s == NULL)
+        {
+            mexPrintf ("opts.%s field must be a numeric value\n", field) ;
+            mexErrMsgIdAndTxt ("QR:invalidInput", "invalid option") ;
+        }
+        *s = mxArrayToString (p) ;
+    }
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_get_options =====================================================
+// =============================================================================
+
+// get all the options from the MATLAB struct.  Defaults for the C struct:
+//
+//      opts.econ = m ;
+//      opts.tol = -2, which means that the default tol must be computed
+//      opts.ordering = colamd if E present, fixed otherwise
+//      opts.permvector = FALSE ;
+//      opts.Qformat = SPQR_Q_MATRIX ;
+//      opts.haveB = FALSE ;
+//      opts.grain = 1, use 2*opts.nthreads for parallelism
+//      opts.small = 1e6
+//      opts.shrink = 1
+//      opts.nthreads = 0
+//      opts.spumoni = SPUMONI
+//      opts.min2norm = FALSE
+
+int spqr_mx_get_options
+(
+    const mxArray *mxopts,
+    spqr_mx_options *opts,
+    Long m,
+    int nargout,
+    cholmod_common *cc
+)
+{
+    double x ;
+    char *s ;
+    Long x_present ;
+
+    if (cc == NULL) return (FALSE) ;
+
+    // -------------------------------------------------------------------------
+    // spumoni: an integer that defaults to SPUMONI (see spqr_mx.hpp)
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "spumoni", &x, &x_present, NULL, cc) ;
+    opts->spumoni = x_present ? ((Long) x) : SPUMONI ;
+    spqr_spumoni = opts->spumoni ;
+
+    // -------------------------------------------------------------------------
+    // econ: an integer that defaults to m
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "econ", &x, &x_present, NULL, cc) ;
+    opts->econ = x_present ? ((Long) x) : m ;
+
+    // -------------------------------------------------------------------------
+    // tol: a double with default computed later
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "tol", &x, &x_present, NULL, cc) ;
+    opts->tol = x_present ? x : SPQR_DEFAULT_TOL ;
+
+    // -------------------------------------------------------------------------
+    // cc->SPQR_grain: defaults to 1 (no TBB parallelism)
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "grain", &x, &x_present, NULL, cc) ;
+    cc->SPQR_grain = x_present ? x : 1 ;
+
+    // -------------------------------------------------------------------------
+    // cc->SPQR_small: defaults to 1e6 (min flop count in a TBB task)
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "small", &x, &x_present, NULL, cc) ;
+    cc->SPQR_small = x_present ? x : 1e6 ;
+
+    // -------------------------------------------------------------------------
+    // cc->SPQR_shrink: defaults to 1; for testing malloc/realloc only!
+    // -------------------------------------------------------------------------
+
+    // NOTE: this feature is not documented in "help spqr".  Nor should it be.
+    get_option (mxopts, "shrink", &x, &x_present, NULL, cc) ;
+    cc->SPQR_shrink = x_present ? ((int) x) : 1 ;
+
+    // -------------------------------------------------------------------------
+    // cc->SPQR_nthreads: defaults to 0; # of threads to use
+    // -------------------------------------------------------------------------
+
+    // nthreads = 0 means to use the TBB default
+    get_option (mxopts, "nthreads", &x, &x_present, NULL, cc) ;
+    cc->SPQR_nthreads = x_present ? ((int) x) : 0 ;
+    cc->SPQR_nthreads = MAX (0, cc->SPQR_nthreads) ;
+
+    // -------------------------------------------------------------------------
+    // ordering: a string (fixed, natural, colamd, metis, or cholmod)
+    // -------------------------------------------------------------------------
+
+    if (nargout < 3)
+    {
+        // R = qr ( ), [C,R] = qr ( ), or [Q,R] = qr ( ) usages
+        opts->ordering = SPQR_ORDERING_FIXED ;
+    }
+    else
+    {
+        // [C,R,E] = qr ( ) or [Q,R,E] = qr ( ) usages
+        opts->ordering = SPQR_ORDERING_DEFAULT ;
+        get_option (mxopts, "ordering", NULL, &x_present, &s, cc) ;
+        if (s != NULL)
+        {
+            if (strcmp (s, "fixed") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_FIXED ;
+            }
+            else if (strcmp (s, "natural") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_NATURAL ;
+            }
+            else if (strcmp (s, "colamd") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_COLAMD ;
+            }
+            else if (strcmp (s, "amd") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_AMD ;
+            }
+#ifndef NPARTITION
+            else if (strcmp (s, "metis") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_METIS ;
+            }
+#endif
+            else if (strcmp (s, "best") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_BEST ;
+            }
+            else if (strcmp (s, "bestamd") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_BESTAMD ;
+            }
+            else if (strcmp (s, "default") == 0)
+            {
+                opts->ordering = SPQR_ORDERING_DEFAULT ;
+            }
+            else
+            {
+                mexErrMsgIdAndTxt ("QR:invalidInput","invalid ordering option");
+            }
+            mxFree (s) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // Q: a string ("matrix", "discard", or "Householder")
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "Q", NULL, &x_present, &s, cc) ;
+    if (nargout <= 1)
+    {
+        opts->Qformat = SPQR_Q_DISCARD ;
+    }
+    else
+    {
+        // for [Q,R] = qr ( ) or [Q,R,E] = qr ( )
+        // this will be overridden for [C,R] = qr ( ) case
+        opts->Qformat = SPQR_Q_MATRIX ;
+    }
+    if (s != NULL)
+    {
+        if (strcmp (s, "matrix") == 0)
+        {
+            opts->Qformat = SPQR_Q_MATRIX ;
+        }
+        else if (strcmp (s, "discard") == 0)
+        {
+            opts->Qformat = SPQR_Q_DISCARD ;
+        }
+        else if (strcmp (s, "Householder") == 0)
+        {
+            opts->Qformat = SPQR_Q_HOUSEHOLDER ;
+        }
+        else
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput", "invalid Q option") ;
+        }
+        mxFree (s) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // permutation: a string ("matrix" or "vector")
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "permutation", NULL, &x_present, &s, cc) ;
+    opts->permvector = FALSE ;
+    if (s != NULL)
+    {
+        if (strcmp (s, "matrix") == 0)
+        {
+            opts->permvector = FALSE ;
+        }
+        else if (strcmp (s, "vector") == 0)
+        {
+            opts->permvector = TRUE ;
+        }
+        else
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput", "invalid permutation option");
+        }
+        mxFree (s) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // solution: a string ("min2norm" or "basic"), default is "basic"
+    // -------------------------------------------------------------------------
+
+    get_option (mxopts, "solution", NULL, &x_present, &s, cc) ;
+    opts->min2norm = FALSE ;
+    if (s != NULL)
+    {
+        if (strcmp (s, "min2norm") == 0)
+        {
+#ifndef NEXPERT
+            opts->min2norm = TRUE ;
+#else
+            mexErrMsgIdAndTxt ("QR:invalidInput",
+                "invalid solution option; min2norm option not installed");
+#endif
+        }
+        else if (strcmp (s, "basic") == 0)
+        {
+            opts->min2norm = FALSE ;
+        }
+        else
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput", "invalid solution option");
+        }
+        mxFree (s) ;
+    }
+
+    // if haveB becomes TRUE, Qformat must be set to "discard"
+    opts->haveB = FALSE ;
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+// === put_values ==============================================================
+// =============================================================================
+
+static int put_values
+(
+    Long nz,
+    mxArray *A,
+    double *Ax,         // complex case: size 2*nz and freed on return,
+                        // real case: size nz, not freed on return.
+    Long is_complex,
+    cholmod_common *cc
+)
+{
+    Long imag_all_zero = TRUE ;
+
+    if (is_complex)
+    {
+        // A is complex, stored in interleaved form; split it for MATLAB
+        Long k ;
+        double z, *Ax2, *Az2 ;
+        mxFree (mxGetPi (A)) ;
+        Ax2 = (double *) cholmod_l_malloc (nz, sizeof (double), cc) ;
+        Az2 = (double *) cholmod_l_malloc (nz, sizeof (double), cc) ;
+        for (k = 0 ; k < nz ; k++)
+        {
+            Ax2 [k] = Ax [2*k] ;
+            z = Ax [2*k+1] ;
+            if (z != 0)
+            {
+                imag_all_zero = FALSE ;
+            }
+            Az2 [k] = z ;
+        }
+        mxSetPr (A, Ax2) ;
+        if (imag_all_zero)
+        {
+            // free the imaginary part, converting A to real
+            cholmod_l_free (nz, sizeof (double), Az2, cc) ;
+            Az2 = NULL ;
+        }
+        mxSetPi (A, Az2) ;
+        // NOTE: the input Ax is freed
+        cholmod_l_free (nz, sizeof (Complex), Ax, cc) ;
+    }
+    else
+    {
+        // A is real; just set Ax and return (do not free Ax) 
+        mxSetPr (A, Ax) ;
+    }
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_put_sparse ======================================================
+// =============================================================================
+
+// Creates a MATLAB version of a CHOLMOD sparse matrix.  The CHOLMOD sparse
+// matrix is destroyed.  Both real and complex matrices are supported.
+
+mxArray *spqr_mx_put_sparse
+(
+    cholmod_sparse **Ahandle,	// CHOLMOD version of the matrix
+    cholmod_common *cc
+)
+{
+    mxArray *Amatlab ;
+    cholmod_sparse *A ;
+    Long nz, is_complex ;
+
+    A = *Ahandle ;
+    is_complex = (A->xtype != CHOLMOD_REAL) ;
+    Amatlab = mxCreateSparse (0, 0, 0, is_complex ? mxCOMPLEX: mxREAL) ;
+    mxSetM (Amatlab, A->nrow) ;
+    mxSetN (Amatlab, A->ncol) ;
+    mxSetNzmax (Amatlab, A->nzmax) ;
+    mxFree (mxGetJc (Amatlab)) ;
+    mxFree (mxGetIr (Amatlab)) ;
+    mxFree (mxGetPr (Amatlab)) ;
+    mxSetJc (Amatlab, (mwIndex *) A->p) ;
+    mxSetIr (Amatlab, (mwIndex *) A->i) ;
+
+    nz = cholmod_l_nnz (A, cc) ;
+    put_values (nz, Amatlab, (double *) A->x, is_complex, cc) ;
+
+    A->p = NULL ;
+    A->i = NULL ;
+    A->x = NULL ;
+    A->z = NULL ;
+    cholmod_l_free_sparse (Ahandle, cc) ;
+    return (Amatlab) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_put_dense2 ======================================================
+// =============================================================================
+
+// Create a MATLAB dense matrix (real or complex)
+
+mxArray *spqr_mx_put_dense2
+(
+    Long m,
+    Long n,
+    double *Ax,         // size nz if real; size 2*nz if complex
+    int is_complex,
+    cholmod_common *cc
+)
+{
+    mxArray *A ;
+
+    if (cc == NULL) return (NULL) ;
+
+    A = mxCreateDoubleMatrix (0, 0, is_complex ? mxCOMPLEX : mxREAL) ;
+    mxSetM (A, m) ;
+    mxSetN (A, n) ; 
+    mxFree (mxGetPr (A)) ;
+    mxFree (mxGetPi (A)) ;
+    put_values (m*n, A, Ax, is_complex, cc) ;
+    return (A) ;
+}
+
+// =============================================================================
+// === spqr_mx_put_dense =======================================================
+// =============================================================================
+
+// Creates a MATLAB version of a CHOLMOD dense matrix.  The CHOLMOD dense
+// matrix is destroyed.  Both real and complex matrices are supported.
+// The leading dimension must be equal to the number of rows.
+
+mxArray *spqr_mx_put_dense
+(
+    cholmod_dense **Ahandle,	// CHOLMOD version of the matrix
+    cholmod_common *cc
+)
+{
+    mxArray *Amatlab ;
+    cholmod_dense *A ;
+
+    A = *Ahandle ;
+
+    if (A->d != A->nrow)
+    {
+        mexErrMsgIdAndTxt ("QR:internalError", "internal error!") ;
+    }
+
+    Amatlab = spqr_mx_put_dense2 (A->nrow, A->ncol, (double *) A->x,
+        A->xtype != CHOLMOD_REAL, cc) ;
+
+    A->x = NULL ;
+    A->z = NULL ;
+    cholmod_l_free_dense (Ahandle, cc) ;
+    return (Amatlab) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_put_permutation =================================================
+// =============================================================================
+
+// Return a permutation to MATLAB, as a dense permutation vector or as a
+// sparse matrix
+
+mxArray *spqr_mx_put_permutation
+(
+    Long *P,        // size n permutation vector
+    Long n, 
+    int vector,     // if TRUE, return a vector; otherwise return a matrix
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    mxArray *Pmatlab ;
+    double *Ex ;
+    Long *Ep, *Ei, j, k ;
+
+    if (cc == NULL) return (NULL) ;
+
+    if (vector)
+    {
+        // return P as a permutation vector
+        Pmatlab = mxCreateDoubleMatrix (1, n, mxREAL) ;
+        Ex = mxGetPr (Pmatlab) ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Ex [k] = (double) ((P ? P [k] : k) + 1) ;
+        }
+    }
+    else
+    {
+        // return E as a permutation matrix
+        Pmatlab = mxCreateSparse (n, n, MAX (n,1), mxREAL) ;
+        Ep = (Long *) mxGetJc (Pmatlab) ;
+        Ei = (Long *) mxGetIr (Pmatlab) ;
+        Ex = mxGetPr (Pmatlab) ;
+        for (k = 0 ; k < n ; k++)
+        {
+            j = P ? P [k] : k ;
+            Ep [k] = k ;
+            Ei [k] = j ;
+            Ex [k] = 1 ;
+        }
+        Ep [n] = n ;
+    }
+    return (Pmatlab) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_merge_if_complex ================================================
+// =============================================================================
+
+// Convert a real or MATLAB-style split-complex matrix into a merged-complex
+// matrix usable by SuiteSparseQR and LAPACK.  Alternatively, just return
+// a pointer to the real MATLAB matrix if make_complex is FALSE.  Note that
+// the input matrix can actually be real, in which case an all-zero imaginary
+// part is created.
+
+double *spqr_mx_merge_if_complex
+(
+    // inputs, not modified
+    const mxArray *A,
+    int make_complex,       // if TRUE, return value is Complex
+    // output
+    Long *p_nz,             // number of entries in A
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Long nz, m, n ;
+    double *X, *Xx, *Xz ;
+
+    if (cc == NULL) return (NULL) ;
+
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    Xx = mxGetPr (A) ;
+    Xz = mxGetPi (A) ;
+
+    if (mxIsSparse (A))
+    {
+        Long *Ap = (Long *) mxGetJc (A) ;
+        nz = Ap [n] ;
+    }
+    else
+    {
+        nz = m*n ;
+    }
+    if (make_complex)
+    {
+        // Note the typecast and sizeof (...) intentionally do not match
+        X = (double *) cholmod_l_malloc (nz, sizeof (Complex), cc) ;
+        for (Long k = 0 ; k < nz ; k++)
+        {
+            X [2*k  ] = Xx [k] ;
+            X [2*k+1] = Xz ? (Xz [k]) : 0 ;
+        }
+    }
+    else
+    {
+        X = Xx ;
+    }
+    *p_nz = nz ;
+    return (X) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_get_sparse ======================================================
+// =============================================================================
+
+// Create a shallow CHOLMOD copy of a MATLAB sparse matrix.  No memory is
+// allocated.  The resulting matrix A must not be modified.
+
+cholmod_sparse *spqr_mx_get_sparse
+(
+    const mxArray *Amatlab, // MATLAB version of the matrix
+    cholmod_sparse *A,	    // CHOLMOD version of the matrix
+    double *dummy 	    // a pointer to a valid scalar double
+)
+{
+    Long *Ap ;
+    A->nrow = mxGetM (Amatlab) ;
+    A->ncol = mxGetN (Amatlab) ;
+    A->p = (Long *) mxGetJc (Amatlab) ;
+    A->i = (Long *) mxGetIr (Amatlab) ;
+    Ap = (Long *) A->p ;
+    A->nzmax = Ap [A->ncol] ;
+    A->packed = TRUE ;
+    A->sorted = TRUE ;
+    A->nz = NULL ;
+    A->itype = CHOLMOD_LONG ;
+    A->dtype = CHOLMOD_DOUBLE ;     // FUTURE: support single
+    A->stype = 0 ;
+
+    if (mxIsEmpty (Amatlab))
+    {
+	// this is not dereferenced, but the existence (non-NULL) of these
+	// pointers is checked in CHOLMOD
+	A->x = dummy ;
+	A->z = dummy ;
+	A->xtype = mxIsComplex (Amatlab) ? CHOLMOD_ZOMPLEX : CHOLMOD_REAL ;
+    }
+    else if (mxIsDouble (Amatlab))
+    {
+	A->x = mxGetPr (Amatlab) ;
+	A->z = mxGetPi (Amatlab) ;
+	A->xtype = mxIsComplex (Amatlab) ? CHOLMOD_ZOMPLEX : CHOLMOD_REAL ;
+    }
+    else
+    {
+	// only sparse complex/real double matrices are supported
+        mexErrMsgIdAndTxt ("QR:invalidInput", "matrix type not supported") ;
+    }
+
+    return (A) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_get_dense =======================================================
+// =============================================================================
+
+// Create a shallow CHOLMOD copy of a MATLAB dense matrix.  No memory is
+// allocated.  Only double (real and zomplex) matrices are supported.  The
+// resulting matrix B must not be modified.
+
+cholmod_dense *spqr_mx_get_dense
+(
+    const mxArray *Amatlab, // MATLAB version of the matrix
+    cholmod_dense *A,	    // CHOLMOD version of the matrix
+    double *dummy	    // a pointer to a valid scalar double
+)
+{
+    A->nrow = mxGetM (Amatlab) ;
+    A->ncol = mxGetN (Amatlab) ;
+    A->d = A->nrow ;
+    A->nzmax = A->nrow * A->ncol ;
+    A->dtype = CHOLMOD_DOUBLE ;
+
+    if (mxIsEmpty (Amatlab))
+    {
+	A->x = dummy ;
+	A->z = dummy ;
+    }
+    else if (mxIsDouble (Amatlab))
+    {
+	A->x = mxGetPr (Amatlab) ;
+	A->z = mxGetPi (Amatlab) ;
+    }
+    else
+    {
+	// only full double matrices supported
+        mexErrMsgIdAndTxt ("QR:invalidInput", "matrix type not supported") ;
+    }
+    A->xtype = mxIsComplex (Amatlab) ? CHOLMOD_ZOMPLEX : CHOLMOD_REAL ;
+
+    return (A) ;
+}
+
+// =============================================================================
+// === spqr_mx_get_usage =======================================================
+// =============================================================================
+
+// Determine the memory usage of an mxArray.  Used for testing only.
+
+void spqr_mx_get_usage
+(
+    mxArray *A,         // mxArray to check
+    int tight,          // if true, then nnz(A) must equal nzmax(A)
+    Long *p_usage,      // bytes used
+    Long *p_count,      // # of malloc'd blocks
+    cholmod_common *cc
+)
+{
+    Long nz, m, n, nzmax, is_complex, usage, count, *Ap ;
+    m = mxGetM (A) ;
+    n = mxGetN (A) ;
+    is_complex = mxIsComplex (A) ;
+    if (mxIsSparse (A))
+    {
+        nzmax = mxGetNzmax (A) ;
+        Ap = (Long *) mxGetJc (A) ;
+        nz = MAX (Ap [n], 1) ;
+        if (tight && nz != nzmax)
+        {
+            // This should never occur.
+            mexErrMsgIdAndTxt ("QR:internalError", "nnz (A) < nzmax (A)!") ;
+        }
+        usage = sizeof (Long) * (n+1 + nz) ;
+        count = 2 ;
+    }
+    else
+    {
+        nz = MAX (m*n,1) ;
+        nzmax = nz ;
+        usage = 0 ;
+        count = 0 ;
+    }
+    if (is_complex)
+    {
+        usage += nzmax * sizeof (double) * 2 ;
+        count += 2 ;
+    }
+    else
+    {
+        usage += nzmax * sizeof (double) ;
+        count += 1 ;
+    }
+    *p_usage = usage ;
+    *p_count = count ;
+}
+
+// =============================================================================
+// === spqr_mx_id ==============================================================
+// =============================================================================
+
+// This is used for debugging only, in the ASSERT macro:
+
+char spqr_mx_debug_string [200] ;       // global variable; debugging only
+char *spqr_mx_id (int line)
+{
+    sprintf (spqr_mx_debug_string, "QR:Line_%d", line) ;
+    return (spqr_mx_debug_string) ;
+}
+
+
+// =============================================================================
+// === spqr_mx_info ============================================================
+// =============================================================================
+
+mxArray *spqr_mx_info       // return a struct with info statistics
+(
+    cholmod_common *cc,
+    double t,               // total time, < 0 if not computed
+    double flops            // flop count, < 0 if not computed
+)
+{
+    Long ninfo ;
+    mxArray *s ;
+
+    const char *info_struct [ ] =
+    {
+        "nnzR_upper_bound",             // 0: nnz(R) bound
+        "nnzH_upper_bound",             // 1: nnz(H) bound
+        "number_of_frontal_matrices",   // 2: nf
+        "number_of_TBB_tasks",          // 3: ntasks
+        "rank_A_estimate",              // 4: rank
+        "number_of_column_singletons",  // 5: n1cols
+        "number_of_singleton_rows",     // 6: n1rows
+        "ordering",                     // 7: ordering used
+        "memory_usage_in_bytes",        // 8: memory usage
+        "flops_upper_bound",            // 9: upper bound on flop count
+                                        //    (excluding backsolve)
+        "tol",                          // 10: column norm tolerance used
+        "number_of_TBB_threads",        // 11: # threads used
+        "norm_E_fro",                   // 12: norm of dropped diag of R
+
+        // compilation options
+        "spqr_compiled_with_TBB",       // 13: compiled with TBB or not
+        "spqr_compiled_with_METIS",     // 14: compiled with METIS or not
+
+        // only if flops >= 0:
+        "analyze_time",                 // 15: analyze time
+        "factorize_time",               // 16: factorize time (and apply Q')
+        "solve_time",                   // 17: R\C backsolve only
+        "total_time",                   // 18: total x=A\b in seconds
+        "flops"                         // 19: actual flops (incl backsolve)
+    } ;
+
+    ninfo = (flops < 0) ? 15 : 20 ;
+
+    s = mxCreateStructMatrix (1, 1, ninfo, info_struct) ;
+
+    for (Long k = 0 ; k <= 6 ; k++)
+    {
+        mxSetFieldByNumber (s, 0, k,
+            mxCreateDoubleScalar ((double) cc->SPQR_istat [k])) ;
+    }
+
+    // get the ordering used.  Note that "default", "best", and "cholmod"
+    // are not among the possible results, since they are meta-orderings
+    // that select among AMD, COLAMD, and/or METIS.
+    mxArray *ord ;
+    switch (cc->SPQR_istat [7])
+    {
+        case SPQR_ORDERING_FIXED:
+        case SPQR_ORDERING_GIVEN: 
+            ord = mxCreateString ("fixed") ;
+            break ;
+        case SPQR_ORDERING_NATURAL:
+            ord = mxCreateString ("natural") ;
+            break ;
+        case SPQR_ORDERING_COLAMD:
+            ord = mxCreateString ("colamd") ;
+            break ;
+        case SPQR_ORDERING_AMD:
+            ord = mxCreateString ("amd") ;
+            break ;
+#ifndef NPARTITION
+        case SPQR_ORDERING_METIS:
+            ord = mxCreateString ("metis") ;
+            break ;
+#endif
+        default:
+            ord = mxCreateString ("unknown") ;
+            break ;
+    }
+    mxSetFieldByNumber (s, 0, 7, ord) ;
+
+    mxSetFieldByNumber (s, 0, 8,
+        mxCreateDoubleScalar ((double) cc->memory_usage)) ;
+    mxSetFieldByNumber (s, 0, 9,
+        mxCreateDoubleScalar (cc->SPQR_flopcount_bound)) ;
+    mxSetFieldByNumber (s, 0, 10, mxCreateDoubleScalar (cc->SPQR_tol_used)) ;
+
+    int nthreads = cc->SPQR_nthreads ;
+    if (nthreads <= 0)
+    {
+        mxSetFieldByNumber (s, 0, 11, mxCreateString ("default"));
+    }
+    else
+    {
+        mxSetFieldByNumber (s, 0, 11, mxCreateDoubleScalar ((double) nthreads));
+    }
+
+    mxSetFieldByNumber (s, 0, 12, mxCreateDoubleScalar (cc->SPQR_norm_E_fro)) ;
+
+#ifdef HAVE_TBB
+    mxSetFieldByNumber (s, 0, 13, mxCreateString ("yes")) ;
+#else
+    mxSetFieldByNumber (s, 0, 13, mxCreateString ("no")) ;
+#endif
+
+#ifndef NPARTITION
+    mxSetFieldByNumber (s, 0, 14, mxCreateString ("yes")) ;
+#else
+    mxSetFieldByNumber (s, 0, 14, mxCreateString ("no")) ;
+#endif
+
+    if (flops >= 0)
+    {
+        mxSetFieldByNumber (s, 0, 15,
+            mxCreateDoubleScalar (cc->SPQR_analyze_time)) ;
+        mxSetFieldByNumber (s, 0, 16,
+            mxCreateDoubleScalar (cc->SPQR_factorize_time)) ;
+        mxSetFieldByNumber (s, 0, 17,
+            mxCreateDoubleScalar (cc->SPQR_solve_time)) ;
+        mxSetFieldByNumber (s, 0, 18, mxCreateDoubleScalar (t)) ;
+        mxSetFieldByNumber (s, 0, 19, mxCreateDoubleScalar (flops)) ;
+    }
+    return (s) ;
+}
diff --git a/SPQR/MATLAB/spqr_mx.hpp b/SPQR/MATLAB/spqr_mx.hpp
new file mode 100644
index 0000000..2f1a420
--- /dev/null
+++ b/SPQR/MATLAB/spqr_mx.hpp
@@ -0,0 +1,156 @@
+// =============================================================================
+// === spqr_mx_matlab.hpp ======================================================
+// =============================================================================
+
+// utility functions and definitions solely for use in a MATLAB mexFunction
+
+#ifndef SPQR_MX_MATLAB_H
+#define SPQR_MX_MATLAB_H
+
+#include "mex.h"
+#include "SuiteSparseQR.hpp"
+
+// SuiteSparse_long is defined in SuiteSparse_config.h, included by
+// SuiteSparseQR.hpp:
+
+#define Long SuiteSparse_long
+
+// get the BLAS_INT definition from CHOLMOD (this is for spumoni output only)
+#include "cholmod_blas.h"
+
+#include <complex>
+typedef std::complex<double> Complex ;
+
+#define TRUE 1
+#define FALSE 0
+#define EMPTY (-1)
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+
+typedef struct spqr_mx_options_struct
+{
+    double tol ;            // <= -2 means to use default tol
+    Long econ ;
+    int ordering ;
+    int permvector ;
+    int Qformat ;
+    int haveB ;
+    int spumoni ;
+    int min2norm ;
+
+} spqr_mx_options ;
+
+// for error and warning messages
+#define LEN 200
+
+// default value of spumoni
+#define SPUMONI 0
+
+// values for opts.Qformat
+#define SPQR_Q_DISCARD 0
+#define SPQR_Q_MATRIX 1
+#define SPQR_Q_HOUSEHOLDER 2
+
+int spqr_mx_get_options
+(
+    const mxArray *mxopts,
+    spqr_mx_options *opts,
+    Long m,
+    int nargout,
+
+    // workspace and parameters
+    cholmod_common *cc
+)  ;
+
+mxArray *spqr_mx_put_sparse
+(
+    cholmod_sparse **Ahandle,	// CHOLMOD version of the matrix
+    cholmod_common *cc
+) ;
+
+mxArray *spqr_mx_put_dense2
+(
+    Long m,
+    Long n,
+    double *Ax,         // size nz if real; size 2*nz if complex (and freed)
+    int is_complex,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+mxArray *spqr_mx_put_dense
+(
+    cholmod_dense **Ahandle,	// CHOLMOD version of the matrix
+    cholmod_common *cc
+) ;
+
+mxArray *spqr_mx_put_permutation
+(
+    Long *P,
+    Long n,
+    int vector,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+double *spqr_mx_merge_if_complex
+(
+    // inputs, not modified
+    const mxArray *A,
+    int make_complex,
+
+    // output
+    Long *p_nz,              // number of entries in A
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+int spqr_mx_config (Long spumoni, cholmod_common *cc) ;
+
+cholmod_sparse *spqr_mx_get_sparse
+(
+    const mxArray *Amatlab, // MATLAB version of the matrix
+    cholmod_sparse *A,	    // CHOLMOD version of the matrix
+    double *dummy 	    // a pointer to a valid scalar double
+) ;
+
+cholmod_dense *spqr_mx_get_dense
+(
+    const mxArray *Amatlab, // MATLAB version of the matrix
+    cholmod_dense *A,	    // CHOLMOD version of the matrix
+    double *dummy	    // a pointer to a valid scalar double
+) ;
+
+void spqr_mx_get_usage
+(
+    mxArray *A,         // mxArray to check
+    int tight,          // if true, then nnz(A) must equal nzmax(A)
+    Long *p_usage,      // bytes used
+    Long *p_count,      // # of malloc'd blocks
+    cholmod_common *cc
+) ;
+
+extern "C" {
+extern int spqr_spumoni ;
+void spqr_mx_error (int status, const char *file, int line, const char *msg) ;
+#include <string.h>
+}
+
+void spqr_mx_spumoni
+(
+    spqr_mx_options *opts,
+    int is_complex,             // TRUE if complex, FALSE if real
+    cholmod_common *cc
+) ;
+
+mxArray *spqr_mx_info       // return a struct with info statistics
+(
+    cholmod_common *cc,
+    double t,
+    double flops
+) ;
+
+#endif
diff --git a/SPQR/MATLAB/spqr_mx_error.c b/SPQR/MATLAB/spqr_mx_error.c
new file mode 100644
index 0000000..d0f3eca
--- /dev/null
+++ b/SPQR/MATLAB/spqr_mx_error.c
@@ -0,0 +1,68 @@
+/* ========================================================================== */
+/* === spqr_mx_error ======================================================== */
+/* ========================================================================== */
+
+/* Compile with gcc, not g++.  This is called by the CHOLMOD error handler,
+ * which is itself in C.  A global variable is used for spumoni because the
+ * parameter signature of this function cannot be changed; it is passed as
+ * a function pointer to the CHOLMOD error handler.
+ *
+ *  errors:
+ *
+ *      CHOLMOD_TOO_LARGE       MATLAB:pmaxsize     problem too large
+ *      CHOLMOD_OUT_OF_MEMORY   MATLAB:nomem        out of memory
+ *      CHOLMOD_INVALID         MATLAB:internal     invalid option
+ *      CHOLMOD_NOT_INSTALLED   MATLAB:internal     internal error
+ *
+ *  warnings:  these are not used by SuiteSparseQR.  They can only come from
+ *  CHOLMOD, but they do not apply to SuiteSparseQR.
+ *
+ *      CHOLMOD_NOT_POSDEF      matrix not positive definite (for chol)
+ *      CHOLMOD_DSMALL          diagonal too small (for LDL')
+ */
+
+#include "mex.h"
+#include "cholmod.h"
+
+int spqr_spumoni = 0 ;
+
+void spqr_mx_error (int status, const char *file, int line, const char *msg)
+{
+
+    if (spqr_spumoni > 0 ||
+        !(status == CHOLMOD_OUT_OF_MEMORY || status == CHOLMOD_TOO_LARGE))
+    {
+        mexPrintf ("ERROR: %s line %d, status %d: %s\n",
+            file, line, status, msg) ;
+    }
+
+    if (status < CHOLMOD_OK)
+    {
+        switch (status)
+        {
+            case CHOLMOD_OUT_OF_MEMORY:
+	        mexErrMsgIdAndTxt ("MATLAB:nomem",
+                "Out of memory. Type HELP MEMORY for your options.") ;
+
+            case CHOLMOD_TOO_LARGE:
+	        mexErrMsgIdAndTxt ("MATLAB:pmaxsize", 
+                "Maximum variable size allowed by the program is exceeded.") ;
+                break ;
+
+            default:
+                /* CHOLMOD_NOT_INSTALLED and CHOLMOD_INVALID:
+                   These errors should be caught by the mexFunction interface
+                   to SuiteSparseQR, not by the CHOLMOD or SuiteSparseQR
+                   internal code itself */
+	        mexErrMsgIdAndTxt ("MATLAB:internal", "Internal error") ;
+                break ;
+        }            
+    }
+    else
+    {
+        /* A CHOMOD warning is not used by SuiteSparseQR at all.  Thus, it is
+           reported here as an internal error rather than as a warning. */
+	/* mexWarnMsgTxt (msg) ; */
+        mexErrMsgIdAndTxt ("MATLAB:internal", "Internal error") ;
+    }
+}
diff --git a/SPQR/MATLAB/spqr_qmult.cpp b/SPQR/MATLAB/spqr_qmult.cpp
new file mode 100644
index 0000000..d72556c
--- /dev/null
+++ b/SPQR/MATLAB/spqr_qmult.cpp
@@ -0,0 +1,288 @@
+// =============================================================================
+// === spqr_qmult mexFunction ==================================================
+// =============================================================================
+
+#include "spqr_mx.hpp"
+
+//  Multiply Q times X, where Q is stored as a struct, in Householder form.
+//
+//  method = 0: Y = Q'*X    default
+//  method = 1: Y = Q*X 
+//  method = 2: Y = X*Q'
+//  method = 3: Y = X*Q
+//
+//  Usage:
+//
+//  Y = spqr_qmult (Q,X,method) ;
+//
+//  where Q is the struct from [Q,R,E] = spqr (A,opts) with
+//  opts.Q = 'Householder'
+//
+//  Q.H: Householder vectors (m-by-nh).  In each column, the nonzero entry with
+//      the smallest row index must be equal to 1.0.
+//  Q.Tau: Householder coefficients (1-by-nh).
+//  Q.P: inverse row permutation.  P [i] = k if row i of X is row k of H and Y.
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    mxArray *Hmatlab, *Tau, *P ;
+    Long *HPinv, *Yp, *Yi ;
+    double *Hx, *Xx, *Tx, *Px, dummy ;
+    Long m, n, k, nh, nb, p, i, method, mh, gotP, X_is_sparse, is_complex, hnz,
+        tnz, xnz, inuse, count ;
+    cholmod_sparse *Ysparse, *H, Hmatrix, *Xsparse, Xsmatrix ;
+    cholmod_dense *Ydense, *Xdense, Xdmatrix, *HTau, HTau_matrix ;
+    cholmod_common Common, *cc ;
+
+    // -------------------------------------------------------------------------
+    // start CHOLMOD and set parameters
+    // -------------------------------------------------------------------------
+
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+    spqr_mx_config (SPUMONI, cc) ;
+
+    // -------------------------------------------------------------------------
+    // check inputs
+    // -------------------------------------------------------------------------
+
+    // nargin can be 2 or 3
+    // nargout can be 0 or 1
+
+    if (nargout > 1)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxlhs", "Too many output arguments") ;
+    }
+    if (nargin < 2)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:minrhs", "Not enough input arguments") ;
+    }
+    if (nargin > 3)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxrhs", "Too many input arguments") ;
+    }
+
+    if (!mxIsStruct (pargin [0]))
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "invalid Q (must be a struct)") ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get H, Tau, and P from the Q struct
+    // -------------------------------------------------------------------------
+
+    i = mxGetFieldNumber (pargin [0], "H") ;
+    if (i < 0)
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "invalid Q struct") ;
+    }
+    Hmatlab = mxGetFieldByNumber (pargin [0], 0, i) ;
+    nh = mxGetN (Hmatlab) ;
+    if (!mxIsSparse (Hmatlab))
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "H must be sparse") ;
+    }
+    i = mxGetFieldNumber (pargin [0], "Tau") ;
+    if (i < 0)
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "invalid Q struct") ;
+    }
+    Tau = mxGetFieldByNumber (pargin [0], 0, i) ;
+    if (nh != mxGetNumberOfElements (Tau))
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput",
+            "H and Tau must have the same number of columns") ;
+    }
+
+    is_complex = mxIsComplex (Tau) || mxIsComplex (Hmatlab) ||
+        mxIsComplex (pargin [1]) ;
+
+    // -------------------------------------------------------------------------
+    // get the Householder vectors
+    // -------------------------------------------------------------------------
+
+    H = spqr_mx_get_sparse (Hmatlab, &Hmatrix, &dummy) ;
+    mh = H->nrow ;
+    Hx = spqr_mx_merge_if_complex (Hmatlab, is_complex, &hnz, cc) ;
+    if (is_complex)
+    {
+        // H has been converted from real or zomplex to complex
+        H->x = Hx ;
+        H->z = NULL ;
+        H->xtype = CHOLMOD_COMPLEX ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get Tau
+    // -------------------------------------------------------------------------
+
+    HTau = spqr_mx_get_dense (Tau, &HTau_matrix, &dummy) ;
+    Tx = spqr_mx_merge_if_complex (Tau, is_complex, &tnz, cc) ;
+    if (is_complex)
+    {
+        // HTau has been converted from real or zomplex to complex
+        HTau->x = Tx ;
+        HTau->z = NULL ;
+        HTau->xtype = CHOLMOD_COMPLEX ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get method
+    // -------------------------------------------------------------------------
+
+    if (nargin < 3)
+    {
+        method = 0 ;
+    }
+    else
+    {
+        method = (Long) mxGetScalar (pargin [2]) ;
+        if (method < 0 || method > 3)
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput", "invalid method") ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // get X
+    // -------------------------------------------------------------------------
+
+    m = mxGetM (pargin [1]) ;
+    n = mxGetN (pargin [1]) ;
+    X_is_sparse = mxIsSparse (pargin [1]) ;
+    Xsparse = NULL ;
+    if (X_is_sparse)
+    {
+        Xsparse = spqr_mx_get_sparse (pargin [1], &Xsmatrix, &dummy) ;
+    }
+    else
+    {
+        Xdense = spqr_mx_get_dense (pargin [1], &Xdmatrix, &dummy) ;
+    }
+    Xx = spqr_mx_merge_if_complex (pargin [1], is_complex, &xnz, cc) ;
+    if (is_complex)
+    {
+        // X has been converted from real or zomplex to complex
+        if (X_is_sparse)
+        {
+            Xsparse->x = Xx ;
+            Xsparse->xtype = CHOLMOD_COMPLEX ;
+        }
+        else
+        {
+            Xdense->x = Xx ;
+            Xdense->xtype = CHOLMOD_COMPLEX ;
+        }
+    }
+
+    if (method == 0 || method == 1)
+    {
+        if (mh != m)
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput",
+                "H and X must have same number of rows") ;
+        }
+    }
+    else
+    {
+        if (mh != n)
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput",
+                "# of cols of X must equal # of rows of H") ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // get P
+    // -------------------------------------------------------------------------
+
+    i = mxGetFieldNumber (pargin [0], "P") ;
+    gotP = (i >= 0) ;
+    HPinv = NULL ;
+
+    if (gotP)
+    {
+        // get P from the H struct
+        P = mxGetFieldByNumber (pargin [0], 0, i) ;
+        if (mxGetNumberOfElements (P) != mh)
+        {
+            mexErrMsgIdAndTxt ("QR:invalidInput",
+                "P must be a vector of length equal to # rows of H") ;
+        }
+        HPinv = (Long *) cholmod_l_malloc (mh, sizeof (Long), cc) ;
+        Px = mxGetPr (P) ;
+        for (i = 0 ; i < mh ; i++)
+        {
+            HPinv [i] = (Long) (Px [i] - 1) ;
+            if (HPinv [i] < 0 || HPinv [i] >= mh)
+            {
+                mexErrMsgIdAndTxt ("QR:invalidInput", "invalid permutation") ;
+            }
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // Y = Q'*X, Q*X, X*Q or X*Q'
+    // -------------------------------------------------------------------------
+
+    if (is_complex)
+    {
+        if (X_is_sparse)
+        {
+            Ysparse = SuiteSparseQR_qmult <Complex> (method, H,
+                HTau, HPinv, Xsparse, cc) ;
+            pargout [0] = spqr_mx_put_sparse (&Ysparse, cc) ;
+        }
+        else
+        {
+            Ydense = SuiteSparseQR_qmult <Complex> (method, H,
+                HTau, HPinv, Xdense, cc) ;
+            pargout [0] = spqr_mx_put_dense (&Ydense, cc) ;
+        }
+    }
+    else
+    {
+        if (X_is_sparse)
+        {
+            Ysparse = SuiteSparseQR_qmult <double> (method, H,
+                HTau, HPinv, Xsparse, cc) ;
+            pargout [0] = spqr_mx_put_sparse (&Ysparse, cc) ;
+        }
+        else
+        {
+            Ydense = SuiteSparseQR_qmult <double> (method, H,
+                HTau, HPinv, Xdense, cc) ;
+            pargout [0] = spqr_mx_put_dense (&Ydense, cc) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // free workspace
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free (mh, sizeof (Long), HPinv, cc) ;
+
+    if (is_complex)
+    {
+        // free the merged copies of the real parts of the H and Tau matrices
+        cholmod_l_free (hnz, sizeof (Complex), Hx, cc) ;
+        cholmod_l_free (tnz, sizeof (Complex), Tx, cc) ;
+        cholmod_l_free (xnz, sizeof (Complex), Xx, cc) ;
+    }
+    cholmod_l_finish (cc) ;
+
+#if 0
+    // malloc count for testing only ...
+    spqr_mx_get_usage (pargout [0], 1, &inuse, &count, cc) ;
+    if (inuse != cc->memory_inuse || count != cc->malloc_count)
+    {
+        mexErrMsgIdAndTxt ("QR:internalError", "memory leak!") ;
+    }
+#endif
+}
diff --git a/SPQR/MATLAB/spqr_qmult.m b/SPQR/MATLAB/spqr_qmult.m
new file mode 100644
index 0000000..d589bdd
--- /dev/null
+++ b/SPQR/MATLAB/spqr_qmult.m
@@ -0,0 +1,24 @@
+function Y = spqr_qmult (H,X,method)                                        %#ok
+%SPQR_QMULT computes Q'*X, Q*X, X*Q', or X*Q with Q in Householder form.
+% Usage: Y = spqr_qmult (Q,X,method)
+%
+%   method = 0: Y = Q'*X    default if 3rd input argument is not present.
+%   method = 1: Y = Q*X 
+%   method = 2: Y = X*Q'
+%   method = 3: Y = X*Q
+%
+% Example:
+%   These two examples both compute the min-norm solution to an
+%   under determined system, but the latter is much more efficient:
+%
+%   [Q,R,E] = spqr(A') ; x = Q*(R'\(E'*b)) ;
+%
+%   [Q,R,E] = spqr(A',struct('Q','Householder')) ;
+%   x = spqr_qmult(Q,R'\(E'*b),1) ;
+%
+% See also SPQR, SPQR_SOLVE, QR, MTIMES
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+help spqr_qmult
+error ('spqr_qmult mexFunction not found') ;
diff --git a/SPQR/MATLAB/spqr_singletons.cpp b/SPQR/MATLAB/spqr_singletons.cpp
new file mode 100644
index 0000000..a36ccde
--- /dev/null
+++ b/SPQR/MATLAB/spqr_singletons.cpp
@@ -0,0 +1,144 @@
+// =============================================================================
+// === spqr_singletons mexFunction =============================================
+// =============================================================================
+
+#include "spqr_mx.hpp"
+#include "spqr.hpp"
+
+// Finds the row and column singletons of a sparse matrix.  Note that this
+// function uses "non-usercallable" functions from SuiteSparseQR.
+// See spqr_singletons.m for details.
+//
+// [p q n1rows n1cols tol] = spqr_singletons (A)
+// [p q n1rows n1cols] = spqr_singletons (A, tol)
+
+#define TRUE 1
+#define FALSE 0 
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    Long *P, *Q, *Rp, *Pinv ;
+    double *Ax, dummy, tol ;
+    Long m, n, anz, is_complex, n1rows, n1cols, i, k ;
+    cholmod_sparse *A, Amatrix, *Y ;
+    cholmod_common Common, *cc ;
+
+    // -------------------------------------------------------------------------
+    // start CHOLMOD and set parameters
+    // -------------------------------------------------------------------------
+
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+    spqr_mx_config (SPUMONI, cc) ;
+
+    // -------------------------------------------------------------------------
+    // check inputs
+    // -------------------------------------------------------------------------
+
+    if (nargout > 5)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxlhs", "Too many output arguments") ;
+    }
+    if (nargin < 1)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:minrhs", "Not enough input arguments") ;
+    }
+    if (nargin > 2)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxrhs", "Too many input arguments") ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get the input matrix A and convert to merged-complex if needed
+    // -------------------------------------------------------------------------
+
+    if (!mxIsSparse (pargin [0]))
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "A must be sparse") ;
+    }
+
+    A = spqr_mx_get_sparse (pargin [0], &Amatrix, &dummy) ;
+    m = A->nrow ;
+    n = A->ncol ;
+    is_complex = mxIsComplex (pargin [0]) ;
+    Ax = spqr_mx_merge_if_complex (pargin [0], is_complex, &anz, cc) ; 
+    if (is_complex)
+    {
+        // A has been converted from real or zomplex to complex
+        A->x = Ax ;
+        A->z = NULL ;
+        A->xtype = CHOLMOD_COMPLEX ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get the tolerance
+    // -------------------------------------------------------------------------
+
+    if (nargin < 2)
+    {
+        tol = is_complex ? spqr_tol <Complex> (A,cc) : spqr_tol <double> (A,cc);
+    }
+    else
+    {
+        tol = mxGetScalar (pargin [1]) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // find the singletons
+    // -------------------------------------------------------------------------
+
+    if (is_complex)
+    {
+        spqr_1colamd <Complex> (SPQR_ORDERING_NATURAL, tol, 0, A,
+            &Q, &Rp, &Pinv, &Y, &n1cols, &n1rows, cc) ;
+    }
+    else
+    {
+        spqr_1colamd <double> (SPQR_ORDERING_NATURAL, tol, 0, A,
+            &Q, &Rp, &Pinv, &Y, &n1cols, &n1rows, cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // free unused outputs from spqr_1colamd, and the merged-complex copy of A
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free (n1rows+1, sizeof (Long), Rp, cc) ;
+    cholmod_l_free_sparse (&Y, cc) ;
+    if (is_complex)
+    {
+        // this was allocated by merge_if_complex
+        cholmod_l_free (anz, sizeof (Complex), Ax, cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // find P from Pinv
+    // -------------------------------------------------------------------------
+
+    P = (Long *) cholmod_l_malloc (m, sizeof (Long), cc) ;
+    for (i = 0 ; i < m ; i++)
+    {
+        k = Pinv ? Pinv [i] : i ;
+        P [k] = i ;
+    }
+    cholmod_l_free (m, sizeof (Long), Pinv, cc) ;
+
+    // -------------------------------------------------------------------------
+    // return results
+    // -------------------------------------------------------------------------
+
+    pargout [0] = spqr_mx_put_permutation (P, m, TRUE, cc) ;
+    cholmod_l_free (m, sizeof (Long), P, cc) ;
+    if (nargout > 1) pargout [1] = spqr_mx_put_permutation (Q, n, TRUE, cc) ;
+    cholmod_l_free (n, sizeof (Long), Q, cc) ;
+    if (nargout > 2) pargout [2] = mxCreateDoubleScalar ((double) n1rows) ;
+    if (nargout > 3) pargout [3] = mxCreateDoubleScalar ((double) n1cols) ;
+    if (nargout > 4) pargout [4] = mxCreateDoubleScalar (tol) ;
+
+    cholmod_l_finish (cc) ;
+}
diff --git a/SPQR/MATLAB/spqr_singletons.m b/SPQR/MATLAB/spqr_singletons.m
new file mode 100644
index 0000000..454b562
--- /dev/null
+++ b/SPQR/MATLAB/spqr_singletons.m
@@ -0,0 +1,37 @@
+function [p q m1 n1 tol] = spqr_singletons (A,tol)                          %#ok
+%SPQR_SINGLETONS finds the singleton permutation of a sparse matrix A.
+% [p q m1 n1 tol] = spqr_singletons (A, tol) finds permutation vectors p and q
+% so that C=A(p,q) is a block 2-by-2 matrix in the form [C11 C12 ; 0 C22] where
+% C11 is upper triangular (or "squeezed" upper trapezoidal), of dimension
+% m1-by-n1.  The columns of C11 are the column singletons of A.  If C11 is
+% square then all of its diagonal entries are larger in magnitude than tol.
+%
+% The input tol is optional; it defaults to 20*(m+n)*eps*maxcol2norm where
+% [m n] = size(A) and maxcol2norm is the maximum 2-norm of the columns of A.
+% The output tol is the tolerance used.
+%
+% If C11 is rectangular, then some of the column singletons have no
+% corresponding row singleton.  A column j in C11 has a corresponding row i if
+% if i = max(find(C(:,j))) > max(find(C(:,j-1))).  If present, abs(C(i,j)) will
+% be larger than tol.
+%
+% Example:
+%
+%   A = [1 8 0 0
+%        2 9 3 7
+%        0 4 0 0
+%        0 6 0 0 ]
+%   [p q m1 n1 tol] = spqr_singletons (sparse (A))
+%   C = A(p,q)
+%
+% In this example, C11 is 2-by-3.  One of the 3 column singletons (the 2nd on
+% in C) has no corresponding row singleton.  This is an auxiliary routine that
+% illustrates the singleton removal step used by SuiteSparseQR.  It is not
+% needed to solve a least-squares problem or find a sparse QR factorization;
+% use SPQR_SOLVE or SPQR for those tasks, respectively.
+%
+% See also DMPERM, SPQR, SPQR_SOLVE.
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+error ('spqr_singletons mexFunction not found') ;
diff --git a/SPQR/MATLAB/spqr_solve.cpp b/SPQR/MATLAB/spqr_solve.cpp
new file mode 100644
index 0000000..0ac071a
--- /dev/null
+++ b/SPQR/MATLAB/spqr_solve.cpp
@@ -0,0 +1,299 @@
+// =============================================================================
+// === spqr_solve mexFunction ==================================================
+// =============================================================================
+
+#include "spqr_mx.hpp"
+
+/*  x = A\b using a sparse QR factorization.
+
+    x = spqr_solve (A,b,opts) ;
+
+    A 2nd optional output gives statistics, in a self-explainable struct.
+
+    Let [m n] = size (A).
+
+            opts is an optional struct with the following fields.  Fields not
+            present are set to their defaults.  The defaults are:
+
+                opts.tol = 20 * (m+n) * eps * sqrt(max(diag(A'*A)))
+                opts.ordering = "colamd"
+
+            opts.tol:  Default 20 * (m+n) * eps * sqrt(max(diag(A'*A))),
+                that is, 20 * (m+n) * eps * (max 2-norm of the columns of A).
+
+                If tol >= 0, then an approximate rank-revealing QR factorization
+                is used.  A diagonal entry of R with magnitude < tol is treated
+                as zero; the matrix A is considered rank deficient.
+
+                If tol = -1, then no rank detection is attempted.  This allows
+                the sparse QR to use less memory than when attempting to detect
+                rank, even for full-rank matrices.  Thus, if you know your
+                matrix has full rank, tol = -1 will reduce memory usage.  Zeros
+                may appear on the diagonal of R if A is rank deficient.
+
+                If tol <= -2, then the default tolerance is used.
+
+            opts.ordering:  Default is "default"
+                See spqr.m for info.
+
+            opts.solution: default "basic"
+                Defines how an underdetermined system should be solved (m < n).
+                "basic": compute a basic solution, using
+                        [C,R,E]=spqr(A,B) ; X=E*(R\C) ; where C=Q'*B
+                "min2norm": compute a minimum 2-norm solution, using
+                        [C,R,E]=spqr(A') ; X = Q*(R'\(E'*B))
+                        A min2norm solution is more costly to compute, in time
+                        and memory, than a basic solution.
+                This option is ignored if m >= n.
+*/
+
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+
+void mexFunction
+(
+    int nargout,
+    mxArray *pargout [ ],
+    int nargin,
+    const mxArray *pargin [ ]
+)
+{
+    Long *Bp, *Bi ;
+    double *Ax, *Bx, dummy ;
+    Long m, n, k, bncols, p, i, rank, A_complex, B_complex, is_complex,
+        anz, bnz ;
+    spqr_mx_options opts ;
+    cholmod_sparse *A, Amatrix, *Xsparse ; 
+    cholmod_dense *Xdense ;
+    cholmod_common Common, *cc ;
+    char msg [LEN+1] ;
+
+    double t0 = (nargout > 1) ? SuiteSparse_time ( ) : 0 ;
+
+    // -------------------------------------------------------------------------
+    // start CHOLMOD and set parameters
+    // -------------------------------------------------------------------------
+
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+    spqr_mx_config (SPUMONI, cc) ;
+
+    // -------------------------------------------------------------------------
+    // check inputs
+    // -------------------------------------------------------------------------
+
+    if (nargout > 2)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxlhs", "Too many output arguments") ;
+    }
+    if (nargin < 2)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:minrhs", "Not enough input arguments") ;
+    }
+    if (nargin > 3)
+    {
+        mexErrMsgIdAndTxt ("MATLAB:maxrhs", "Too many input arguments") ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get the input matrix A (must be sparse)
+    // -------------------------------------------------------------------------
+
+    if (!mxIsSparse (pargin [0]))
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "A must be sparse") ;
+    }
+
+    A = spqr_mx_get_sparse (pargin [0], &Amatrix, &dummy) ;
+    m = A->nrow ;
+    n = A->ncol ;
+    A_complex = mxIsComplex (pargin [0]) ;
+
+    B_complex = mxIsComplex (pargin [1]) ;
+    is_complex = (A_complex || B_complex) ;
+    Ax = spqr_mx_merge_if_complex (pargin [0], is_complex, &anz, cc) ; 
+    if (is_complex)
+    {
+        // A has been converted from real or zomplex to complex
+        A->x = Ax ;
+        A->z = NULL ;
+        A->xtype = CHOLMOD_COMPLEX ;
+    }
+
+    // -------------------------------------------------------------------------
+    // determine usage and parameters
+    // -------------------------------------------------------------------------
+
+    spqr_mx_get_options ((nargin < 3) ? NULL : pargin [2], &opts, m, 3, cc) ;
+
+    opts.Qformat = SPQR_Q_DISCARD ;
+    opts.econ = 0 ;
+    opts.permvector = TRUE ;
+    opts.haveB = TRUE ;
+
+    // -------------------------------------------------------------------------
+    // get the input matrix B (sparse or dense)
+    // -------------------------------------------------------------------------
+
+    if (!mxIsNumeric (pargin [1]))
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput", "invalid non-numeric B") ;
+    }
+    if (mxGetM (pargin [1]) != m)
+    {
+        mexErrMsgIdAndTxt ("QR:invalidInput",
+            "A and B must have the same number of rows") ;
+    }
+
+    cholmod_sparse Bsmatrix, *Bsparse ;
+    cholmod_dense  Bdmatrix, *Bdense ;
+
+    // convert from real or zomplex to complex
+    Bx = spqr_mx_merge_if_complex (pargin [1], is_complex, &bnz, cc) ;
+
+    int B_is_sparse = mxIsSparse (pargin [1]) ;
+    if (B_is_sparse)
+    {
+        Bsparse = spqr_mx_get_sparse (pargin [1], &Bsmatrix, &dummy) ;
+        Bdense = NULL ;
+        if (is_complex)
+        {
+            // Bsparse has been converted from real or zomplex to complex
+            Bsparse->x = Bx ;
+            Bsparse->z = NULL ;
+            Bsparse->xtype = CHOLMOD_COMPLEX ;
+        }
+    }
+    else
+    {
+        Bsparse = NULL ;
+        Bdense = spqr_mx_get_dense (pargin [1], &Bdmatrix, &dummy) ;
+        if (is_complex)
+        {
+            // Bdense has been converted from real or zomplex to complex
+            Bdense->x = Bx ;
+            Bdense->z = NULL ;
+            Bdense->xtype = CHOLMOD_COMPLEX ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // X = A\B
+    // -------------------------------------------------------------------------
+
+    if (opts.min2norm && m < n)
+    {
+#ifndef NEXPERT
+        // This requires SuiteSparseQR_expert.cpp
+        if (is_complex)
+        {
+            if (B_is_sparse)
+            {
+                // X and B are both sparse and complex
+                Xsparse = SuiteSparseQR_min2norm <Complex> (opts.ordering,
+                    opts.tol, A, Bsparse, cc) ;
+                pargout [0] = spqr_mx_put_sparse (&Xsparse, cc) ;
+            }
+            else
+            {
+                // X and B are both dense and complex
+                Xdense = SuiteSparseQR_min2norm <Complex> (opts.ordering,
+                    opts.tol, A, Bdense, cc) ;
+                pargout [0] = spqr_mx_put_dense (&Xdense, cc) ;
+            }
+        }
+        else
+        {
+            if (B_is_sparse)
+            {
+                // X and B are both sparse and real
+                Xsparse = SuiteSparseQR_min2norm <double> (opts.ordering,
+                    opts.tol, A, Bsparse, cc) ;
+                pargout [0] = spqr_mx_put_sparse (&Xsparse, cc) ;
+            }
+            else
+            {
+                // X and B are both dense and real
+                Xdense = SuiteSparseQR_min2norm <double> (opts.ordering,
+                    opts.tol, A, Bdense, cc) ;
+                pargout [0] = spqr_mx_put_dense (&Xdense, cc) ;
+            }
+        }
+#else
+        mexErrMsgIdAndTxt ("QR:notInstalled", "min2norm method not installed") ;
+#endif
+
+    }
+    else
+    {
+
+        if (is_complex)
+        {
+            if (B_is_sparse)
+            {
+                // X and B are both sparse and complex
+                Xsparse = SuiteSparseQR <Complex> (opts.ordering, opts.tol,
+                    A, Bsparse, cc) ;
+                pargout [0] = spqr_mx_put_sparse (&Xsparse, cc) ;
+            }
+            else
+            {
+                // X and B are both dense and complex
+                Xdense = SuiteSparseQR <Complex> (opts.ordering, opts.tol,
+                    A, Bdense, cc) ;
+                pargout [0] = spqr_mx_put_dense (&Xdense, cc) ;
+            }
+        }
+        else
+        {
+            if (B_is_sparse)
+            {
+                // X and B are both sparse and real
+                Xsparse = SuiteSparseQR <double> (opts.ordering, opts.tol,
+                    A, Bsparse, cc) ;
+                pargout [0] = spqr_mx_put_sparse (&Xsparse, cc) ;
+            }
+            else
+            {
+                // X and B are both dense and real
+                Xdense = SuiteSparseQR <double> (opts.ordering, opts.tol,
+                    A, Bdense, cc) ;
+                pargout [0] = spqr_mx_put_dense (&Xdense, cc) ;
+            }
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // info output
+    // -------------------------------------------------------------------------
+
+    if (nargout > 1)
+    {
+        double flops = cc->SPQR_flopcount ;
+        double t = SuiteSparse_time ( ) - t0 ;
+        pargout [1] = spqr_mx_info (cc, t, flops) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // warn if rank deficient
+    // -------------------------------------------------------------------------
+
+    rank = cc->SPQR_istat [4] ;
+    if (rank < MIN (m,n))
+    {
+        // snprintf would be safer, but Windows is oblivious to safety ...
+        // (Visual Studio C++ 2008 does not recognize snprintf!)
+        sprintf (msg, "rank deficient. rank = %ld tol = %g\n", rank,
+            cc->SPQR_tol_used) ;
+        mexWarnMsgIdAndTxt ("MATLAB:rankDeficientMatrix", msg) ;
+    }
+
+    if (is_complex)
+    {
+        // free the merged complex copies of A and B
+        cholmod_l_free (anz, sizeof (Complex), Ax, cc) ;
+        cholmod_l_free (bnz, sizeof (Complex), Bx, cc) ;
+    }
+
+    cholmod_l_finish (cc) ;
+    if (opts.spumoni > 0) spqr_mx_spumoni (&opts, is_complex, cc) ;
+}
diff --git a/SPQR/MATLAB/spqr_solve.m b/SPQR/MATLAB/spqr_solve.m
new file mode 100644
index 0000000..fef69e2
--- /dev/null
+++ b/SPQR/MATLAB/spqr_solve.m
@@ -0,0 +1,28 @@
+function [X,info] = spqr_solve (A,B,opts)                                   %#ok
+%SPQR_SOLVE solves a linear system or least squares problem via QR factorization.
+% A is a sparse m-by-n matrix A and B is a sparse or full m-by-k matrix.
+% If m == n, x = spqr_solve(A,B) solves A*X=B.  If m < n, a basic solution is
+% found for the underdetermined system A*X=B.  If m > n, the least squares
+% solution is found.  An optional third input argument specifies non-default
+% options (see "help spqr" for details).  Only opts.tol, opts.ordering, and
+% opts.solution are used; the others are implicitly set to opts.econ = 0,
+% opts.Q = 'Householder', and opts.permutation = 'vector'.
+%
+% opts.solution:  'basic' (default) or 'min2norm'.  To obtain a minimum 2-norm
+% solution to an undetermined system (m < n), use 'min2norm'.  For m >= n,
+% these two options find the same solution.
+%
+% An optional second output provides statistics on the solution.
+%
+% Example: 
+%   x = spqr_solve (A,B) 
+%   [x,info] = spqr_solve (A,B) 
+%   x = spqr_solve (A,B,opts) 
+%   x = spqr_solve (A,B, struct ('solution','min2norm')) ;
+%
+% See also SPQR, SPQR_QMULT, QR, MLDIVIDE.
+
+% Copyright 2008, Timothy A. Davis, http://www.suitesparse.com
+
+type spqr_solve
+error ('spqr_solve mexFunction not found') ;
diff --git a/SPQR/Makefile b/SPQR/Makefile
new file mode 100644
index 0000000..06c3a65
--- /dev/null
+++ b/SPQR/Makefile
@@ -0,0 +1,65 @@
+#-------------------------------------------------------------------------------
+# SuiteSparseQR Makefile
+#-------------------------------------------------------------------------------
+
+VERSION = 2.0.0
+
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+default: all
+
+all:
+	( cd Lib ; $(MAKE) )
+	( cd Demo ; $(MAKE) )
+
+library:
+	( cd Lib ; $(MAKE) )
+
+demos:
+	( cd Demo ; $(MAKE) )
+
+cov:
+	( cd Tcov ; $(MAKE) )
+
+purge:
+	( cd Lib ; $(MAKE) purge )
+	( cd Demo ; $(MAKE) purge )
+	( cd Tcov ; $(MAKE) purge )
+	( cd Doc ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) rename.h *.mex* )
+
+clean:
+	( cd Lib ; $(MAKE) clean )
+	( cd Demo ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) rename.h )
+
+distclean: purge
+
+ccode: demos
+
+# create PDF documents for the original distribution
+docs:
+	( cd Doc    ; $(MAKE) )
+
+# install SPQR
+install:
+	$(CP) Lib/libspqr.a $(INSTALL_LIB)/libspqr.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libspqr.$(VERSION).a libspqr.a )
+	$(CP) Include/SuiteSparseQR.hpp $(INSTALL_INCLUDE)
+	$(CP) Include/SuiteSparseQR_C.h $(INSTALL_INCLUDE)
+	$(CP) Include/SuiteSparseQR_definitions.h $(INSTALL_INCLUDE)
+	$(CP) Include/spqr.hpp $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libspqr*.a
+	chmod 644 $(INSTALL_INCLUDE)/SuiteSparseQR.hpp
+	chmod 644 $(INSTALL_INCLUDE)/SuiteSparseQR_C.h
+	chmod 644 $(INSTALL_INCLUDE)/SuiteSparseQR_definitions.h
+	chmod 644 $(INSTALL_INCLUDE)/spqr.hpp
+
+# uninstall SPQR
+uninstall:
+	$(RM) $(INSTALL_LIB)/libspqr*.a
+	$(RM) $(INSTALL_INCLUDE)/SuiteSparseQR.hpp
+	$(RM) $(INSTALL_INCLUDE)/SuiteSparseQR_C.h
+	$(RM) $(INSTALL_INCLUDE)/SuiteSparseQR_definitions.h
+	$(RM) $(INSTALL_INCLUDE)/spqr.hpp
+
diff --git a/SPQR/Matrix/Franz6_id1959_aug.mtx b/SPQR/Matrix/Franz6_id1959_aug.mtx
new file mode 100644
index 0000000..295f7e8
--- /dev/null
+++ b/SPQR/Matrix/Franz6_id1959_aug.mtx
@@ -0,0 +1,48477 @@
+%%MatrixMarket matrix coordinate integer general
+% This is the Franz6 matrix, augmented with identity.
+% When using METIS, this matrix triggers a rare
+% case in the GPUQREngine.
+10592 3016 48472
+1 1 -1
+2 1 1
+9 1 -1
+10 1 -1
+11 1 -1
+12 1 -1
+13 1 -1
+14 1 -1
+15 1 -1
+16 1 -1
+17 1 -1
+18 1 -1
+19 1 -1
+20 1 -1
+21 1 -1
+22 1 -1
+23 1 -1
+24 1 -1
+833 1 -1
+834 1 -1
+835 1 -1
+836 1 -1
+7577 1 38
+1 2 1
+2 2 -1
+25 2 -1
+26 2 -1
+27 2 -1
+28 2 -1
+29 2 -1
+30 2 -1
+31 2 -1
+32 2 -1
+33 2 -1
+34 2 -1
+35 2 -1
+36 2 -1
+37 2 -1
+38 2 -1
+39 2 -1
+40 2 -1
+837 2 -1
+838 2 -1
+839 2 -1
+840 2 -1
+7578 2 38
+3 3 -1
+4 3 1
+41 3 -1
+42 3 -1
+43 3 -1
+44 3 -1
+45 3 -1
+46 3 -1
+47 3 -1
+48 3 -1
+49 3 -1
+50 3 -1
+51 3 -1
+52 3 -1
+53 3 -1
+54 3 -1
+55 3 -1
+56 3 -1
+841 3 -1
+842 3 -1
+843 3 -1
+844 3 -1
+7579 3 38
+3 4 1
+4 4 -1
+57 4 -1
+58 4 -1
+59 4 -1
+60 4 -1
+61 4 -1
+62 4 -1
+63 4 -1
+64 4 -1
+65 4 -1
+66 4 -1
+67 4 -1
+68 4 -1
+69 4 -1
+70 4 -1
+71 4 -1
+72 4 -1
+845 4 -1
+846 4 -1
+847 4 -1
+848 4 -1
+7580 4 38
+5 5 -1
+6 5 1
+73 5 -1
+74 5 -1
+75 5 -1
+76 5 -1
+77 5 -1
+78 5 -1
+79 5 -1
+80 5 -1
+81 5 -1
+82 5 -1
+83 5 -1
+84 5 -1
+85 5 -1
+86 5 -1
+87 5 -1
+88 5 -1
+849 5 -1
+850 5 -1
+851 5 -1
+852 5 -1
+7581 5 38
+5 6 1
+6 6 -1
+89 6 -1
+90 6 -1
+91 6 -1
+92 6 -1
+93 6 -1
+94 6 -1
+95 6 -1
+96 6 -1
+97 6 -1
+98 6 -1
+99 6 -1
+100 6 -1
+101 6 -1
+102 6 -1
+103 6 -1
+104 6 -1
+853 6 -1
+854 6 -1
+855 6 -1
+856 6 -1
+7582 6 38
+7 7 -1
+8 7 1
+105 7 -1
+106 7 -1
+107 7 -1
+108 7 -1
+109 7 -1
+110 7 -1
+111 7 -1
+112 7 -1
+113 7 -1
+114 7 -1
+115 7 -1
+116 7 -1
+117 7 -1
+118 7 -1
+119 7 -1
+120 7 -1
+857 7 -1
+858 7 -1
+859 7 -1
+860 7 -1
+7583 7 38
+7 8 1
+8 8 -1
+121 8 -1
+122 8 -1
+123 8 -1
+124 8 -1
+125 8 -1
+126 8 -1
+127 8 -1
+128 8 -1
+129 8 -1
+130 8 -1
+131 8 -1
+132 8 -1
+133 8 -1
+134 8 -1
+135 8 -1
+136 8 -1
+861 8 -1
+862 8 -1
+863 8 -1
+864 8 -1
+7584 8 38
+1 9 -1
+7 9 1
+137 9 -1
+138 9 -1
+139 9 -1
+140 9 -1
+141 9 -1
+142 9 -1
+143 9 -1
+144 9 -1
+145 9 -1
+146 9 -1
+147 9 -1
+148 9 -1
+149 9 -1
+150 9 -1
+151 9 -1
+152 9 -1
+865 9 -1
+866 9 -1
+867 9 -1
+868 9 -1
+7585 9 38
+2 10 -1
+8 10 1
+153 10 -1
+154 10 -1
+155 10 -1
+156 10 -1
+157 10 -1
+158 10 -1
+159 10 -1
+160 10 -1
+161 10 -1
+162 10 -1
+163 10 -1
+164 10 -1
+165 10 -1
+166 10 -1
+167 10 -1
+168 10 -1
+869 10 -1
+870 10 -1
+871 10 -1
+872 10 -1
+7586 10 38
+1 11 1
+3 11 -1
+169 11 -1
+170 11 -1
+171 11 -1
+172 11 -1
+173 11 -1
+174 11 -1
+175 11 -1
+176 11 -1
+177 11 -1
+178 11 -1
+179 11 -1
+180 11 -1
+181 11 -1
+182 11 -1
+183 11 -1
+184 11 -1
+873 11 -1
+874 11 -1
+875 11 -1
+876 11 -1
+7587 11 38
+2 12 1
+4 12 -1
+185 12 -1
+186 12 -1
+187 12 -1
+188 12 -1
+189 12 -1
+190 12 -1
+191 12 -1
+192 12 -1
+193 12 -1
+194 12 -1
+195 12 -1
+196 12 -1
+197 12 -1
+198 12 -1
+199 12 -1
+200 12 -1
+877 12 -1
+878 12 -1
+879 12 -1
+880 12 -1
+7588 12 38
+3 13 1
+5 13 -1
+201 13 -1
+202 13 -1
+203 13 -1
+204 13 -1
+205 13 -1
+206 13 -1
+207 13 -1
+208 13 -1
+209 13 -1
+210 13 -1
+211 13 -1
+212 13 -1
+213 13 -1
+214 13 -1
+215 13 -1
+216 13 -1
+881 13 -1
+882 13 -1
+883 13 -1
+884 13 -1
+7589 13 38
+4 14 1
+6 14 -1
+217 14 -1
+218 14 -1
+219 14 -1
+220 14 -1
+221 14 -1
+222 14 -1
+223 14 -1
+224 14 -1
+225 14 -1
+226 14 -1
+227 14 -1
+228 14 -1
+229 14 -1
+230 14 -1
+231 14 -1
+232 14 -1
+885 14 -1
+886 14 -1
+887 14 -1
+888 14 -1
+7590 14 38
+5 15 1
+7 15 -1
+233 15 -1
+234 15 -1
+235 15 -1
+236 15 -1
+237 15 -1
+238 15 -1
+239 15 -1
+240 15 -1
+241 15 -1
+242 15 -1
+243 15 -1
+244 15 -1
+245 15 -1
+246 15 -1
+247 15 -1
+248 15 -1
+889 15 -1
+890 15 -1
+891 15 -1
+892 15 -1
+7591 15 38
+6 16 1
+8 16 -1
+249 16 -1
+250 16 -1
+251 16 -1
+252 16 -1
+253 16 -1
+254 16 -1
+255 16 -1
+256 16 -1
+257 16 -1
+258 16 -1
+259 16 -1
+260 16 -1
+261 16 -1
+262 16 -1
+263 16 -1
+264 16 -1
+893 16 -1
+894 16 -1
+895 16 -1
+896 16 -1
+7592 16 38
+1 17 -1
+4 17 1
+265 17 -1
+266 17 -1
+267 17 -1
+268 17 -1
+269 17 -1
+270 17 -1
+271 17 -1
+272 17 -1
+273 17 -1
+274 17 -1
+275 17 -1
+276 17 -1
+277 17 -1
+278 17 -1
+279 17 -1
+280 17 -1
+897 17 -1
+898 17 -1
+899 17 -1
+900 17 -1
+7593 17 38
+2 18 -1
+3 18 1
+281 18 -1
+282 18 -1
+283 18 -1
+284 18 -1
+285 18 -1
+286 18 -1
+287 18 -1
+288 18 -1
+289 18 -1
+290 18 -1
+291 18 -1
+292 18 -1
+293 18 -1
+294 18 -1
+295 18 -1
+296 18 -1
+901 18 -1
+902 18 -1
+903 18 -1
+904 18 -1
+7594 18 38
+3 19 -1
+6 19 1
+297 19 -1
+298 19 -1
+299 19 -1
+300 19 -1
+301 19 -1
+302 19 -1
+303 19 -1
+304 19 -1
+305 19 -1
+306 19 -1
+307 19 -1
+308 19 -1
+309 19 -1
+310 19 -1
+311 19 -1
+312 19 -1
+905 19 -1
+906 19 -1
+907 19 -1
+908 19 -1
+7595 19 38
+4 20 -1
+5 20 1
+313 20 -1
+314 20 -1
+315 20 -1
+316 20 -1
+317 20 -1
+318 20 -1
+319 20 -1
+320 20 -1
+321 20 -1
+322 20 -1
+323 20 -1
+324 20 -1
+325 20 -1
+326 20 -1
+327 20 -1
+328 20 -1
+909 20 -1
+910 20 -1
+911 20 -1
+912 20 -1
+7596 20 38
+5 21 -1
+8 21 1
+329 21 -1
+330 21 -1
+331 21 -1
+332 21 -1
+333 21 -1
+334 21 -1
+335 21 -1
+336 21 -1
+337 21 -1
+338 21 -1
+339 21 -1
+340 21 -1
+341 21 -1
+342 21 -1
+343 21 -1
+344 21 -1
+913 21 -1
+914 21 -1
+915 21 -1
+916 21 -1
+7597 21 38
+6 22 -1
+7 22 1
+345 22 -1
+346 22 -1
+347 22 -1
+348 22 -1
+349 22 -1
+350 22 -1
+351 22 -1
+352 22 -1
+353 22 -1
+354 22 -1
+355 22 -1
+356 22 -1
+357 22 -1
+358 22 -1
+359 22 -1
+360 22 -1
+917 22 -1
+918 22 -1
+919 22 -1
+920 22 -1
+7598 22 38
+2 23 1
+7 23 -1
+361 23 -1
+362 23 -1
+363 23 -1
+364 23 -1
+365 23 -1
+366 23 -1
+367 23 -1
+368 23 -1
+369 23 -1
+370 23 -1
+371 23 -1
+372 23 -1
+373 23 -1
+374 23 -1
+375 23 -1
+376 23 -1
+921 23 -1
+922 23 -1
+923 23 -1
+924 23 -1
+7599 23 38
+1 24 1
+8 24 -1
+377 24 -1
+378 24 -1
+379 24 -1
+380 24 -1
+381 24 -1
+382 24 -1
+383 24 -1
+384 24 -1
+385 24 -1
+386 24 -1
+387 24 -1
+388 24 -1
+389 24 -1
+390 24 -1
+391 24 -1
+392 24 -1
+925 24 -1
+926 24 -1
+927 24 -1
+928 24 -1
+7600 24 38
+9 25 1
+17 25 1
+25 25 1
+33 25 1
+393 25 -1
+400 25 1
+929 25 -1
+930 25 -1
+931 25 -1
+932 25 -1
+7601 25 38
+10 26 1
+18 26 1
+26 26 1
+34 26 1
+393 26 1
+394 26 -1
+933 26 -1
+934 26 -1
+935 26 -1
+936 26 -1
+7602 26 38
+11 27 1
+19 27 1
+27 27 1
+35 27 1
+394 27 1
+395 27 -1
+937 27 -1
+938 27 -1
+939 27 -1
+940 27 -1
+7603 27 38
+12 28 1
+20 28 1
+28 28 1
+36 28 1
+395 28 1
+396 28 -1
+941 28 -1
+942 28 -1
+943 28 -1
+944 28 -1
+7604 28 38
+13 29 1
+21 29 1
+29 29 1
+37 29 1
+396 29 1
+397 29 -1
+945 29 -1
+946 29 -1
+947 29 -1
+948 29 -1
+7605 29 38
+14 30 1
+22 30 1
+30 30 1
+38 30 1
+397 30 1
+398 30 -1
+949 30 -1
+950 30 -1
+951 30 -1
+952 30 -1
+7606 30 38
+15 31 1
+23 31 1
+31 31 1
+39 31 1
+398 31 1
+399 31 -1
+953 31 -1
+954 31 -1
+955 31 -1
+956 31 -1
+7607 31 38
+16 32 1
+24 32 1
+32 32 1
+40 32 1
+399 32 1
+400 32 -1
+957 32 -1
+958 32 -1
+959 32 -1
+960 32 -1
+7608 32 38
+41 33 1
+49 33 1
+57 33 1
+65 33 1
+401 33 -1
+408 33 1
+961 33 -1
+962 33 -1
+963 33 -1
+964 33 -1
+7609 33 38
+42 34 1
+50 34 1
+58 34 1
+66 34 1
+401 34 1
+402 34 -1
+965 34 -1
+966 34 -1
+967 34 -1
+968 34 -1
+7610 34 38
+43 35 1
+51 35 1
+59 35 1
+67 35 1
+402 35 1
+403 35 -1
+969 35 -1
+970 35 -1
+971 35 -1
+972 35 -1
+7611 35 38
+44 36 1
+52 36 1
+60 36 1
+68 36 1
+403 36 1
+404 36 -1
+973 36 -1
+974 36 -1
+975 36 -1
+976 36 -1
+7612 36 38
+45 37 1
+53 37 1
+61 37 1
+69 37 1
+404 37 1
+405 37 -1
+977 37 -1
+978 37 -1
+979 37 -1
+980 37 -1
+7613 37 38
+46 38 1
+54 38 1
+62 38 1
+70 38 1
+405 38 1
+406 38 -1
+981 38 -1
+982 38 -1
+983 38 -1
+984 38 -1
+7614 38 38
+47 39 1
+55 39 1
+63 39 1
+71 39 1
+406 39 1
+407 39 -1
+985 39 -1
+986 39 -1
+987 39 -1
+988 39 -1
+7615 39 38
+48 40 1
+56 40 1
+64 40 1
+72 40 1
+407 40 1
+408 40 -1
+989 40 -1
+990 40 -1
+991 40 -1
+992 40 -1
+7616 40 38
+73 41 1
+81 41 1
+89 41 1
+97 41 1
+409 41 -1
+416 41 1
+993 41 -1
+994 41 -1
+995 41 -1
+996 41 -1
+7617 41 38
+74 42 1
+82 42 1
+90 42 1
+98 42 1
+409 42 1
+410 42 -1
+997 42 -1
+998 42 -1
+999 42 -1
+1000 42 -1
+7618 42 38
+75 43 1
+83 43 1
+91 43 1
+99 43 1
+410 43 1
+411 43 -1
+1001 43 -1
+1002 43 -1
+1003 43 -1
+1004 43 -1
+7619 43 38
+76 44 1
+84 44 1
+92 44 1
+100 44 1
+411 44 1
+412 44 -1
+1005 44 -1
+1006 44 -1
+1007 44 -1
+1008 44 -1
+7620 44 38
+77 45 1
+85 45 1
+93 45 1
+101 45 1
+412 45 1
+413 45 -1
+1009 45 -1
+1010 45 -1
+1011 45 -1
+1012 45 -1
+7621 45 38
+78 46 1
+86 46 1
+94 46 1
+102 46 1
+413 46 1
+414 46 -1
+1013 46 -1
+1014 46 -1
+1015 46 -1
+1016 46 -1
+7622 46 38
+79 47 1
+87 47 1
+95 47 1
+103 47 1
+414 47 1
+415 47 -1
+1017 47 -1
+1018 47 -1
+1019 47 -1
+1020 47 -1
+7623 47 38
+80 48 1
+88 48 1
+96 48 1
+104 48 1
+415 48 1
+416 48 -1
+1021 48 -1
+1022 48 -1
+1023 48 -1
+1024 48 -1
+7624 48 38
+105 49 1
+113 49 1
+121 49 1
+129 49 1
+417 49 -1
+424 49 1
+1025 49 -1
+1026 49 -1
+1027 49 -1
+1028 49 -1
+7625 49 38
+106 50 1
+114 50 1
+122 50 1
+130 50 1
+417 50 1
+418 50 -1
+1029 50 -1
+1030 50 -1
+1031 50 -1
+1032 50 -1
+7626 50 38
+107 51 1
+115 51 1
+123 51 1
+131 51 1
+418 51 1
+419 51 -1
+1033 51 -1
+1034 51 -1
+1035 51 -1
+1036 51 -1
+7627 51 38
+108 52 1
+116 52 1
+124 52 1
+132 52 1
+419 52 1
+420 52 -1
+1037 52 -1
+1038 52 -1
+1039 52 -1
+1040 52 -1
+7628 52 38
+109 53 1
+117 53 1
+125 53 1
+133 53 1
+420 53 1
+421 53 -1
+1041 53 -1
+1042 53 -1
+1043 53 -1
+1044 53 -1
+7629 53 38
+110 54 1
+118 54 1
+126 54 1
+134 54 1
+421 54 1
+422 54 -1
+1045 54 -1
+1046 54 -1
+1047 54 -1
+1048 54 -1
+7630 54 38
+111 55 1
+119 55 1
+127 55 1
+135 55 1
+422 55 1
+423 55 -1
+1049 55 -1
+1050 55 -1
+1051 55 -1
+1052 55 -1
+7631 55 38
+112 56 1
+120 56 1
+128 56 1
+136 56 1
+423 56 1
+424 56 -1
+1053 56 -1
+1054 56 -1
+1055 56 -1
+1056 56 -1
+7632 56 38
+9 57 -1
+113 57 1
+137 57 1
+161 57 -1
+425 57 -1
+440 57 1
+1057 57 -1
+1058 57 -1
+1059 57 -1
+1060 57 -1
+1061 57 -1
+1062 57 -1
+1063 57 -1
+1064 57 -1
+7633 57 38
+10 58 -1
+114 58 1
+138 58 1
+162 58 -1
+425 58 1
+426 58 -1
+1065 58 -1
+1066 58 -1
+1067 58 -1
+1068 58 -1
+1069 58 -1
+1070 58 -1
+1071 58 -1
+1072 58 -1
+7634 58 38
+11 59 -1
+115 59 1
+139 59 1
+163 59 -1
+426 59 1
+427 59 -1
+1073 59 -1
+1074 59 -1
+1075 59 -1
+1076 59 -1
+1077 59 -1
+1078 59 -1
+1079 59 -1
+1080 59 -1
+7635 59 38
+12 60 -1
+116 60 1
+140 60 1
+164 60 -1
+427 60 1
+428 60 -1
+1081 60 -1
+1082 60 -1
+1083 60 -1
+1084 60 -1
+1085 60 -1
+1086 60 -1
+1087 60 -1
+1088 60 -1
+7636 60 38
+13 61 -1
+117 61 1
+141 61 1
+165 61 -1
+428 61 1
+429 61 -1
+1089 61 -1
+1090 61 -1
+1091 61 -1
+1092 61 -1
+1093 61 -1
+1094 61 -1
+1095 61 -1
+1096 61 -1
+7637 61 38
+14 62 -1
+118 62 1
+142 62 1
+166 62 -1
+429 62 1
+430 62 -1
+1097 62 -1
+1098 62 -1
+1099 62 -1
+1100 62 -1
+1101 62 -1
+1102 62 -1
+1103 62 -1
+1104 62 -1
+7638 62 38
+15 63 -1
+119 63 1
+143 63 1
+167 63 -1
+430 63 1
+431 63 -1
+1105 63 -1
+1106 63 -1
+1107 63 -1
+1108 63 -1
+1109 63 -1
+1110 63 -1
+1111 63 -1
+1112 63 -1
+7639 63 38
+16 64 -1
+120 64 1
+144 64 1
+168 64 -1
+431 64 1
+432 64 -1
+1113 64 -1
+1114 64 -1
+1115 64 -1
+1116 64 -1
+1117 64 -1
+1118 64 -1
+1119 64 -1
+1120 64 -1
+7640 64 38
+17 65 -1
+105 65 1
+145 65 1
+153 65 -1
+432 65 1
+433 65 -1
+1121 65 -1
+1122 65 -1
+1123 65 -1
+1124 65 -1
+1125 65 -1
+1126 65 -1
+1127 65 -1
+1128 65 -1
+7641 65 38
+18 66 -1
+106 66 1
+146 66 1
+154 66 -1
+433 66 1
+434 66 -1
+1129 66 -1
+1130 66 -1
+1131 66 -1
+1132 66 -1
+1133 66 -1
+1134 66 -1
+1135 66 -1
+1136 66 -1
+7642 66 38
+19 67 -1
+107 67 1
+147 67 1
+155 67 -1
+434 67 1
+435 67 -1
+1137 67 -1
+1138 67 -1
+1139 67 -1
+1140 67 -1
+1141 67 -1
+1142 67 -1
+1143 67 -1
+1144 67 -1
+7643 67 38
+20 68 -1
+108 68 1
+148 68 1
+156 68 -1
+435 68 1
+436 68 -1
+1145 68 -1
+1146 68 -1
+1147 68 -1
+1148 68 -1
+1149 68 -1
+1150 68 -1
+1151 68 -1
+1152 68 -1
+7644 68 38
+21 69 -1
+109 69 1
+149 69 1
+157 69 -1
+436 69 1
+437 69 -1
+1153 69 -1
+1154 69 -1
+1155 69 -1
+1156 69 -1
+1157 69 -1
+1158 69 -1
+1159 69 -1
+1160 69 -1
+7645 69 38
+22 70 -1
+110 70 1
+150 70 1
+158 70 -1
+437 70 1
+438 70 -1
+1161 70 -1
+1162 70 -1
+1163 70 -1
+1164 70 -1
+1165 70 -1
+1166 70 -1
+1167 70 -1
+1168 70 -1
+7646 70 38
+23 71 -1
+111 71 1
+151 71 1
+159 71 -1
+438 71 1
+439 71 -1
+1169 71 -1
+1170 71 -1
+1171 71 -1
+1172 71 -1
+1173 71 -1
+1174 71 -1
+1175 71 -1
+1176 71 -1
+7647 71 38
+24 72 -1
+112 72 1
+152 72 1
+160 72 -1
+439 72 1
+440 72 -1
+1177 72 -1
+1178 72 -1
+1179 72 -1
+1180 72 -1
+1181 72 -1
+1182 72 -1
+1183 72 -1
+1184 72 -1
+7648 72 38
+25 73 -1
+129 73 1
+137 73 -1
+153 73 1
+441 73 -1
+456 73 1
+1185 73 -1
+1186 73 -1
+1187 73 -1
+1188 73 -1
+1189 73 -1
+1190 73 -1
+1191 73 -1
+1192 73 -1
+7649 73 38
+26 74 -1
+130 74 1
+138 74 -1
+154 74 1
+441 74 1
+442 74 -1
+1193 74 -1
+1194 74 -1
+1195 74 -1
+1196 74 -1
+1197 74 -1
+1198 74 -1
+1199 74 -1
+1200 74 -1
+7650 74 38
+27 75 -1
+131 75 1
+139 75 -1
+155 75 1
+442 75 1
+443 75 -1
+1201 75 -1
+1202 75 -1
+1203 75 -1
+1204 75 -1
+1205 75 -1
+1206 75 -1
+1207 75 -1
+1208 75 -1
+7651 75 38
+28 76 -1
+132 76 1
+140 76 -1
+156 76 1
+443 76 1
+444 76 -1
+1209 76 -1
+1210 76 -1
+1211 76 -1
+1212 76 -1
+1213 76 -1
+1214 76 -1
+1215 76 -1
+1216 76 -1
+7652 76 38
+29 77 -1
+133 77 1
+141 77 -1
+157 77 1
+444 77 1
+445 77 -1
+1217 77 -1
+1218 77 -1
+1219 77 -1
+1220 77 -1
+1221 77 -1
+1222 77 -1
+1223 77 -1
+1224 77 -1
+7653 77 38
+30 78 -1
+134 78 1
+142 78 -1
+158 78 1
+445 78 1
+446 78 -1
+1225 78 -1
+1226 78 -1
+1227 78 -1
+1228 78 -1
+1229 78 -1
+1230 78 -1
+1231 78 -1
+1232 78 -1
+7654 78 38
+31 79 -1
+135 79 1
+143 79 -1
+159 79 1
+446 79 1
+447 79 -1
+1233 79 -1
+1234 79 -1
+1235 79 -1
+1236 79 -1
+1237 79 -1
+1238 79 -1
+1239 79 -1
+1240 79 -1
+7655 79 38
+32 80 -1
+136 80 1
+144 80 -1
+160 80 1
+447 80 1
+448 80 -1
+1241 80 -1
+1242 80 -1
+1243 80 -1
+1244 80 -1
+1245 80 -1
+1246 80 -1
+1247 80 -1
+1248 80 -1
+7656 80 38
+33 81 -1
+121 81 1
+145 81 -1
+161 81 1
+448 81 1
+449 81 -1
+1249 81 -1
+1250 81 -1
+1251 81 -1
+1252 81 -1
+1253 81 -1
+1254 81 -1
+1255 81 -1
+1256 81 -1
+7657 81 38
+34 82 -1
+122 82 1
+146 82 -1
+162 82 1
+449 82 1
+450 82 -1
+1257 82 -1
+1258 82 -1
+1259 82 -1
+1260 82 -1
+1261 82 -1
+1262 82 -1
+1263 82 -1
+1264 82 -1
+7658 82 38
+35 83 -1
+123 83 1
+147 83 -1
+163 83 1
+450 83 1
+451 83 -1
+1265 83 -1
+1266 83 -1
+1267 83 -1
+1268 83 -1
+1269 83 -1
+1270 83 -1
+1271 83 -1
+1272 83 -1
+7659 83 38
+36 84 -1
+124 84 1
+148 84 -1
+164 84 1
+451 84 1
+452 84 -1
+1273 84 -1
+1274 84 -1
+1275 84 -1
+1276 84 -1
+1277 84 -1
+1278 84 -1
+1279 84 -1
+1280 84 -1
+7660 84 38
+37 85 -1
+125 85 1
+149 85 -1
+165 85 1
+452 85 1
+453 85 -1
+1281 85 -1
+1282 85 -1
+1283 85 -1
+1284 85 -1
+1285 85 -1
+1286 85 -1
+1287 85 -1
+1288 85 -1
+7661 85 38
+38 86 -1
+126 86 1
+150 86 -1
+166 86 1
+453 86 1
+454 86 -1
+1289 86 -1
+1290 86 -1
+1291 86 -1
+1292 86 -1
+1293 86 -1
+1294 86 -1
+1295 86 -1
+1296 86 -1
+7662 86 38
+39 87 -1
+127 87 1
+151 87 -1
+167 87 1
+454 87 1
+455 87 -1
+1297 87 -1
+1298 87 -1
+1299 87 -1
+1300 87 -1
+1301 87 -1
+1302 87 -1
+1303 87 -1
+1304 87 -1
+7663 87 38
+40 88 -1
+128 88 1
+152 88 -1
+168 88 1
+455 88 1
+456 88 -1
+1305 88 -1
+1306 88 -1
+1307 88 -1
+1308 88 -1
+1309 88 -1
+1310 88 -1
+1311 88 -1
+1312 88 -1
+7664 88 38
+9 89 1
+41 89 -1
+169 89 1
+193 89 -1
+457 89 -1
+472 89 1
+1313 89 -1
+1314 89 -1
+1315 89 -1
+1316 89 -1
+1317 89 -1
+1318 89 -1
+1319 89 -1
+1320 89 -1
+7665 89 38
+10 90 1
+42 90 -1
+170 90 1
+194 90 -1
+457 90 1
+458 90 -1
+1321 90 -1
+1322 90 -1
+1323 90 -1
+1324 90 -1
+1325 90 -1
+1326 90 -1
+1327 90 -1
+1328 90 -1
+7666 90 38
+11 91 1
+43 91 -1
+171 91 1
+195 91 -1
+458 91 1
+459 91 -1
+1329 91 -1
+1330 91 -1
+1331 91 -1
+1332 91 -1
+1333 91 -1
+1334 91 -1
+1335 91 -1
+1336 91 -1
+7667 91 38
+12 92 1
+44 92 -1
+172 92 1
+196 92 -1
+459 92 1
+460 92 -1
+1337 92 -1
+1338 92 -1
+1339 92 -1
+1340 92 -1
+1341 92 -1
+1342 92 -1
+1343 92 -1
+1344 92 -1
+7668 92 38
+13 93 1
+45 93 -1
+173 93 1
+197 93 -1
+460 93 1
+461 93 -1
+1345 93 -1
+1346 93 -1
+1347 93 -1
+1348 93 -1
+1349 93 -1
+1350 93 -1
+1351 93 -1
+1352 93 -1
+7669 93 38
+14 94 1
+46 94 -1
+174 94 1
+198 94 -1
+461 94 1
+462 94 -1
+1353 94 -1
+1354 94 -1
+1355 94 -1
+1356 94 -1
+1357 94 -1
+1358 94 -1
+1359 94 -1
+1360 94 -1
+7670 94 38
+15 95 1
+47 95 -1
+175 95 1
+199 95 -1
+462 95 1
+463 95 -1
+1361 95 -1
+1362 95 -1
+1363 95 -1
+1364 95 -1
+1365 95 -1
+1366 95 -1
+1367 95 -1
+1368 95 -1
+7671 95 38
+16 96 1
+48 96 -1
+176 96 1
+200 96 -1
+463 96 1
+464 96 -1
+1369 96 -1
+1370 96 -1
+1371 96 -1
+1372 96 -1
+1373 96 -1
+1374 96 -1
+1375 96 -1
+1376 96 -1
+7672 96 38
+17 97 1
+49 97 -1
+177 97 1
+185 97 -1
+464 97 1
+465 97 -1
+1377 97 -1
+1378 97 -1
+1379 97 -1
+1380 97 -1
+1381 97 -1
+1382 97 -1
+1383 97 -1
+1384 97 -1
+7673 97 38
+18 98 1
+50 98 -1
+178 98 1
+186 98 -1
+465 98 1
+466 98 -1
+1385 98 -1
+1386 98 -1
+1387 98 -1
+1388 98 -1
+1389 98 -1
+1390 98 -1
+1391 98 -1
+1392 98 -1
+7674 98 38
+19 99 1
+51 99 -1
+179 99 1
+187 99 -1
+466 99 1
+467 99 -1
+1393 99 -1
+1394 99 -1
+1395 99 -1
+1396 99 -1
+1397 99 -1
+1398 99 -1
+1399 99 -1
+1400 99 -1
+7675 99 38
+20 100 1
+52 100 -1
+180 100 1
+188 100 -1
+467 100 1
+468 100 -1
+1401 100 -1
+1402 100 -1
+1403 100 -1
+1404 100 -1
+1405 100 -1
+1406 100 -1
+1407 100 -1
+1408 100 -1
+7676 100 38
+21 101 1
+53 101 -1
+181 101 1
+189 101 -1
+468 101 1
+469 101 -1
+1409 101 -1
+1410 101 -1
+1411 101 -1
+1412 101 -1
+1413 101 -1
+1414 101 -1
+1415 101 -1
+1416 101 -1
+7677 101 38
+22 102 1
+54 102 -1
+182 102 1
+190 102 -1
+469 102 1
+470 102 -1
+1417 102 -1
+1418 102 -1
+1419 102 -1
+1420 102 -1
+1421 102 -1
+1422 102 -1
+1423 102 -1
+1424 102 -1
+7678 102 38
+23 103 1
+55 103 -1
+183 103 1
+191 103 -1
+470 103 1
+471 103 -1
+1425 103 -1
+1426 103 -1
+1427 103 -1
+1428 103 -1
+1429 103 -1
+1430 103 -1
+1431 103 -1
+1432 103 -1
+7679 103 38
+24 104 1
+56 104 -1
+184 104 1
+192 104 -1
+471 104 1
+472 104 -1
+1433 104 -1
+1434 104 -1
+1435 104 -1
+1436 104 -1
+1437 104 -1
+1438 104 -1
+1439 104 -1
+1440 104 -1
+7680 104 38
+25 105 1
+57 105 -1
+169 105 -1
+185 105 1
+473 105 -1
+488 105 1
+1441 105 -1
+1442 105 -1
+1443 105 -1
+1444 105 -1
+1445 105 -1
+1446 105 -1
+1447 105 -1
+1448 105 -1
+7681 105 38
+26 106 1
+58 106 -1
+170 106 -1
+186 106 1
+473 106 1
+474 106 -1
+1449 106 -1
+1450 106 -1
+1451 106 -1
+1452 106 -1
+1453 106 -1
+1454 106 -1
+1455 106 -1
+1456 106 -1
+7682 106 38
+27 107 1
+59 107 -1
+171 107 -1
+187 107 1
+474 107 1
+475 107 -1
+1457 107 -1
+1458 107 -1
+1459 107 -1
+1460 107 -1
+1461 107 -1
+1462 107 -1
+1463 107 -1
+1464 107 -1
+7683 107 38
+28 108 1
+60 108 -1
+172 108 -1
+188 108 1
+475 108 1
+476 108 -1
+1465 108 -1
+1466 108 -1
+1467 108 -1
+1468 108 -1
+1469 108 -1
+1470 108 -1
+1471 108 -1
+1472 108 -1
+7684 108 38
+29 109 1
+61 109 -1
+173 109 -1
+189 109 1
+476 109 1
+477 109 -1
+1473 109 -1
+1474 109 -1
+1475 109 -1
+1476 109 -1
+1477 109 -1
+1478 109 -1
+1479 109 -1
+1480 109 -1
+7685 109 38
+30 110 1
+62 110 -1
+174 110 -1
+190 110 1
+477 110 1
+478 110 -1
+1481 110 -1
+1482 110 -1
+1483 110 -1
+1484 110 -1
+1485 110 -1
+1486 110 -1
+1487 110 -1
+1488 110 -1
+7686 110 38
+31 111 1
+63 111 -1
+175 111 -1
+191 111 1
+478 111 1
+479 111 -1
+1489 111 -1
+1490 111 -1
+1491 111 -1
+1492 111 -1
+1493 111 -1
+1494 111 -1
+1495 111 -1
+1496 111 -1
+7687 111 38
+32 112 1
+64 112 -1
+176 112 -1
+192 112 1
+479 112 1
+480 112 -1
+1497 112 -1
+1498 112 -1
+1499 112 -1
+1500 112 -1
+1501 112 -1
+1502 112 -1
+1503 112 -1
+1504 112 -1
+7688 112 38
+33 113 1
+65 113 -1
+177 113 -1
+193 113 1
+480 113 1
+481 113 -1
+1505 113 -1
+1506 113 -1
+1507 113 -1
+1508 113 -1
+1509 113 -1
+1510 113 -1
+1511 113 -1
+1512 113 -1
+7689 113 38
+34 114 1
+66 114 -1
+178 114 -1
+194 114 1
+481 114 1
+482 114 -1
+1513 114 -1
+1514 114 -1
+1515 114 -1
+1516 114 -1
+1517 114 -1
+1518 114 -1
+1519 114 -1
+1520 114 -1
+7690 114 38
+35 115 1
+67 115 -1
+179 115 -1
+195 115 1
+482 115 1
+483 115 -1
+1521 115 -1
+1522 115 -1
+1523 115 -1
+1524 115 -1
+1525 115 -1
+1526 115 -1
+1527 115 -1
+1528 115 -1
+7691 115 38
+36 116 1
+68 116 -1
+180 116 -1
+196 116 1
+483 116 1
+484 116 -1
+1529 116 -1
+1530 116 -1
+1531 116 -1
+1532 116 -1
+1533 116 -1
+1534 116 -1
+1535 116 -1
+1536 116 -1
+7692 116 38
+37 117 1
+69 117 -1
+181 117 -1
+197 117 1
+484 117 1
+485 117 -1
+1537 117 -1
+1538 117 -1
+1539 117 -1
+1540 117 -1
+1541 117 -1
+1542 117 -1
+1543 117 -1
+1544 117 -1
+7693 117 38
+38 118 1
+70 118 -1
+182 118 -1
+198 118 1
+485 118 1
+486 118 -1
+1545 118 -1
+1546 118 -1
+1547 118 -1
+1548 118 -1
+1549 118 -1
+1550 118 -1
+1551 118 -1
+1552 118 -1
+7694 118 38
+39 119 1
+71 119 -1
+183 119 -1
+199 119 1
+486 119 1
+487 119 -1
+1553 119 -1
+1554 119 -1
+1555 119 -1
+1556 119 -1
+1557 119 -1
+1558 119 -1
+1559 119 -1
+1560 119 -1
+7695 119 38
+40 120 1
+72 120 -1
+184 120 -1
+200 120 1
+487 120 1
+488 120 -1
+1561 120 -1
+1562 120 -1
+1563 120 -1
+1564 120 -1
+1565 120 -1
+1566 120 -1
+1567 120 -1
+1568 120 -1
+7696 120 38
+41 121 1
+73 121 -1
+201 121 1
+225 121 -1
+489 121 -1
+504 121 1
+1569 121 -1
+1570 121 -1
+1571 121 -1
+1572 121 -1
+1573 121 -1
+1574 121 -1
+1575 121 -1
+1576 121 -1
+7697 121 38
+42 122 1
+74 122 -1
+202 122 1
+226 122 -1
+489 122 1
+490 122 -1
+1577 122 -1
+1578 122 -1
+1579 122 -1
+1580 122 -1
+1581 122 -1
+1582 122 -1
+1583 122 -1
+1584 122 -1
+7698 122 38
+43 123 1
+75 123 -1
+203 123 1
+227 123 -1
+490 123 1
+491 123 -1
+1585 123 -1
+1586 123 -1
+1587 123 -1
+1588 123 -1
+1589 123 -1
+1590 123 -1
+1591 123 -1
+1592 123 -1
+7699 123 38
+44 124 1
+76 124 -1
+204 124 1
+228 124 -1
+491 124 1
+492 124 -1
+1593 124 -1
+1594 124 -1
+1595 124 -1
+1596 124 -1
+1597 124 -1
+1598 124 -1
+1599 124 -1
+1600 124 -1
+7700 124 38
+45 125 1
+77 125 -1
+205 125 1
+229 125 -1
+492 125 1
+493 125 -1
+1601 125 -1
+1602 125 -1
+1603 125 -1
+1604 125 -1
+1605 125 -1
+1606 125 -1
+1607 125 -1
+1608 125 -1
+7701 125 38
+46 126 1
+78 126 -1
+206 126 1
+230 126 -1
+493 126 1
+494 126 -1
+1609 126 -1
+1610 126 -1
+1611 126 -1
+1612 126 -1
+1613 126 -1
+1614 126 -1
+1615 126 -1
+1616 126 -1
+7702 126 38
+47 127 1
+79 127 -1
+207 127 1
+231 127 -1
+494 127 1
+495 127 -1
+1617 127 -1
+1618 127 -1
+1619 127 -1
+1620 127 -1
+1621 127 -1
+1622 127 -1
+1623 127 -1
+1624 127 -1
+7703 127 38
+48 128 1
+80 128 -1
+208 128 1
+232 128 -1
+495 128 1
+496 128 -1
+1625 128 -1
+1626 128 -1
+1627 128 -1
+1628 128 -1
+1629 128 -1
+1630 128 -1
+1631 128 -1
+1632 128 -1
+7704 128 38
+49 129 1
+81 129 -1
+209 129 1
+217 129 -1
+496 129 1
+497 129 -1
+1633 129 -1
+1634 129 -1
+1635 129 -1
+1636 129 -1
+1637 129 -1
+1638 129 -1
+1639 129 -1
+1640 129 -1
+7705 129 38
+50 130 1
+82 130 -1
+210 130 1
+218 130 -1
+497 130 1
+498 130 -1
+1641 130 -1
+1642 130 -1
+1643 130 -1
+1644 130 -1
+1645 130 -1
+1646 130 -1
+1647 130 -1
+1648 130 -1
+7706 130 38
+51 131 1
+83 131 -1
+211 131 1
+219 131 -1
+498 131 1
+499 131 -1
+1649 131 -1
+1650 131 -1
+1651 131 -1
+1652 131 -1
+1653 131 -1
+1654 131 -1
+1655 131 -1
+1656 131 -1
+7707 131 38
+52 132 1
+84 132 -1
+212 132 1
+220 132 -1
+499 132 1
+500 132 -1
+1657 132 -1
+1658 132 -1
+1659 132 -1
+1660 132 -1
+1661 132 -1
+1662 132 -1
+1663 132 -1
+1664 132 -1
+7708 132 38
+53 133 1
+85 133 -1
+213 133 1
+221 133 -1
+500 133 1
+501 133 -1
+1665 133 -1
+1666 133 -1
+1667 133 -1
+1668 133 -1
+1669 133 -1
+1670 133 -1
+1671 133 -1
+1672 133 -1
+7709 133 38
+54 134 1
+86 134 -1
+214 134 1
+222 134 -1
+501 134 1
+502 134 -1
+1673 134 -1
+1674 134 -1
+1675 134 -1
+1676 134 -1
+1677 134 -1
+1678 134 -1
+1679 134 -1
+1680 134 -1
+7710 134 38
+55 135 1
+87 135 -1
+215 135 1
+223 135 -1
+502 135 1
+503 135 -1
+1681 135 -1
+1682 135 -1
+1683 135 -1
+1684 135 -1
+1685 135 -1
+1686 135 -1
+1687 135 -1
+1688 135 -1
+7711 135 38
+56 136 1
+88 136 -1
+216 136 1
+224 136 -1
+503 136 1
+504 136 -1
+1689 136 -1
+1690 136 -1
+1691 136 -1
+1692 136 -1
+1693 136 -1
+1694 136 -1
+1695 136 -1
+1696 136 -1
+7712 136 38
+57 137 1
+89 137 -1
+201 137 -1
+217 137 1
+505 137 -1
+520 137 1
+1697 137 -1
+1698 137 -1
+1699 137 -1
+1700 137 -1
+1701 137 -1
+1702 137 -1
+1703 137 -1
+1704 137 -1
+7713 137 38
+58 138 1
+90 138 -1
+202 138 -1
+218 138 1
+505 138 1
+506 138 -1
+1705 138 -1
+1706 138 -1
+1707 138 -1
+1708 138 -1
+1709 138 -1
+1710 138 -1
+1711 138 -1
+1712 138 -1
+7714 138 38
+59 139 1
+91 139 -1
+203 139 -1
+219 139 1
+506 139 1
+507 139 -1
+1713 139 -1
+1714 139 -1
+1715 139 -1
+1716 139 -1
+1717 139 -1
+1718 139 -1
+1719 139 -1
+1720 139 -1
+7715 139 38
+60 140 1
+92 140 -1
+204 140 -1
+220 140 1
+507 140 1
+508 140 -1
+1721 140 -1
+1722 140 -1
+1723 140 -1
+1724 140 -1
+1725 140 -1
+1726 140 -1
+1727 140 -1
+1728 140 -1
+7716 140 38
+61 141 1
+93 141 -1
+205 141 -1
+221 141 1
+508 141 1
+509 141 -1
+1729 141 -1
+1730 141 -1
+1731 141 -1
+1732 141 -1
+1733 141 -1
+1734 141 -1
+1735 141 -1
+1736 141 -1
+7717 141 38
+62 142 1
+94 142 -1
+206 142 -1
+222 142 1
+509 142 1
+510 142 -1
+1737 142 -1
+1738 142 -1
+1739 142 -1
+1740 142 -1
+1741 142 -1
+1742 142 -1
+1743 142 -1
+1744 142 -1
+7718 142 38
+63 143 1
+95 143 -1
+207 143 -1
+223 143 1
+510 143 1
+511 143 -1
+1745 143 -1
+1746 143 -1
+1747 143 -1
+1748 143 -1
+1749 143 -1
+1750 143 -1
+1751 143 -1
+1752 143 -1
+7719 143 38
+64 144 1
+96 144 -1
+208 144 -1
+224 144 1
+511 144 1
+512 144 -1
+1753 144 -1
+1754 144 -1
+1755 144 -1
+1756 144 -1
+1757 144 -1
+1758 144 -1
+1759 144 -1
+1760 144 -1
+7720 144 38
+65 145 1
+97 145 -1
+209 145 -1
+225 145 1
+512 145 1
+513 145 -1
+1761 145 -1
+1762 145 -1
+1763 145 -1
+1764 145 -1
+1765 145 -1
+1766 145 -1
+1767 145 -1
+1768 145 -1
+7721 145 38
+66 146 1
+98 146 -1
+210 146 -1
+226 146 1
+513 146 1
+514 146 -1
+1769 146 -1
+1770 146 -1
+1771 146 -1
+1772 146 -1
+1773 146 -1
+1774 146 -1
+1775 146 -1
+1776 146 -1
+7722 146 38
+67 147 1
+99 147 -1
+211 147 -1
+227 147 1
+514 147 1
+515 147 -1
+1777 147 -1
+1778 147 -1
+1779 147 -1
+1780 147 -1
+1781 147 -1
+1782 147 -1
+1783 147 -1
+1784 147 -1
+7723 147 38
+68 148 1
+100 148 -1
+212 148 -1
+228 148 1
+515 148 1
+516 148 -1
+1785 148 -1
+1786 148 -1
+1787 148 -1
+1788 148 -1
+1789 148 -1
+1790 148 -1
+1791 148 -1
+1792 148 -1
+7724 148 38
+69 149 1
+101 149 -1
+213 149 -1
+229 149 1
+516 149 1
+517 149 -1
+1793 149 -1
+1794 149 -1
+1795 149 -1
+1796 149 -1
+1797 149 -1
+1798 149 -1
+1799 149 -1
+1800 149 -1
+7725 149 38
+70 150 1
+102 150 -1
+214 150 -1
+230 150 1
+517 150 1
+518 150 -1
+1801 150 -1
+1802 150 -1
+1803 150 -1
+1804 150 -1
+1805 150 -1
+1806 150 -1
+1807 150 -1
+1808 150 -1
+7726 150 38
+71 151 1
+103 151 -1
+215 151 -1
+231 151 1
+518 151 1
+519 151 -1
+1809 151 -1
+1810 151 -1
+1811 151 -1
+1812 151 -1
+1813 151 -1
+1814 151 -1
+1815 151 -1
+1816 151 -1
+7727 151 38
+72 152 1
+104 152 -1
+216 152 -1
+232 152 1
+519 152 1
+520 152 -1
+1817 152 -1
+1818 152 -1
+1819 152 -1
+1820 152 -1
+1821 152 -1
+1822 152 -1
+1823 152 -1
+1824 152 -1
+7728 152 38
+73 153 1
+105 153 -1
+233 153 1
+257 153 -1
+521 153 -1
+536 153 1
+1825 153 -1
+1826 153 -1
+1827 153 -1
+1828 153 -1
+1829 153 -1
+1830 153 -1
+1831 153 -1
+1832 153 -1
+7729 153 38
+74 154 1
+106 154 -1
+234 154 1
+258 154 -1
+521 154 1
+522 154 -1
+1833 154 -1
+1834 154 -1
+1835 154 -1
+1836 154 -1
+1837 154 -1
+1838 154 -1
+1839 154 -1
+1840 154 -1
+7730 154 38
+75 155 1
+107 155 -1
+235 155 1
+259 155 -1
+522 155 1
+523 155 -1
+1841 155 -1
+1842 155 -1
+1843 155 -1
+1844 155 -1
+1845 155 -1
+1846 155 -1
+1847 155 -1
+1848 155 -1
+7731 155 38
+76 156 1
+108 156 -1
+236 156 1
+260 156 -1
+523 156 1
+524 156 -1
+1849 156 -1
+1850 156 -1
+1851 156 -1
+1852 156 -1
+1853 156 -1
+1854 156 -1
+1855 156 -1
+1856 156 -1
+7732 156 38
+77 157 1
+109 157 -1
+237 157 1
+261 157 -1
+524 157 1
+525 157 -1
+1857 157 -1
+1858 157 -1
+1859 157 -1
+1860 157 -1
+1861 157 -1
+1862 157 -1
+1863 157 -1
+1864 157 -1
+7733 157 38
+78 158 1
+110 158 -1
+238 158 1
+262 158 -1
+525 158 1
+526 158 -1
+1865 158 -1
+1866 158 -1
+1867 158 -1
+1868 158 -1
+1869 158 -1
+1870 158 -1
+1871 158 -1
+1872 158 -1
+7734 158 38
+79 159 1
+111 159 -1
+239 159 1
+263 159 -1
+526 159 1
+527 159 -1
+1873 159 -1
+1874 159 -1
+1875 159 -1
+1876 159 -1
+1877 159 -1
+1878 159 -1
+1879 159 -1
+1880 159 -1
+7735 159 38
+80 160 1
+112 160 -1
+240 160 1
+264 160 -1
+527 160 1
+528 160 -1
+1881 160 -1
+1882 160 -1
+1883 160 -1
+1884 160 -1
+1885 160 -1
+1886 160 -1
+1887 160 -1
+1888 160 -1
+7736 160 38
+81 161 1
+113 161 -1
+241 161 1
+249 161 -1
+528 161 1
+529 161 -1
+1889 161 -1
+1890 161 -1
+1891 161 -1
+1892 161 -1
+1893 161 -1
+1894 161 -1
+1895 161 -1
+1896 161 -1
+7737 161 38
+82 162 1
+114 162 -1
+242 162 1
+250 162 -1
+529 162 1
+530 162 -1
+1897 162 -1
+1898 162 -1
+1899 162 -1
+1900 162 -1
+1901 162 -1
+1902 162 -1
+1903 162 -1
+1904 162 -1
+7738 162 38
+83 163 1
+115 163 -1
+243 163 1
+251 163 -1
+530 163 1
+531 163 -1
+1905 163 -1
+1906 163 -1
+1907 163 -1
+1908 163 -1
+1909 163 -1
+1910 163 -1
+1911 163 -1
+1912 163 -1
+7739 163 38
+84 164 1
+116 164 -1
+244 164 1
+252 164 -1
+531 164 1
+532 164 -1
+1913 164 -1
+1914 164 -1
+1915 164 -1
+1916 164 -1
+1917 164 -1
+1918 164 -1
+1919 164 -1
+1920 164 -1
+7740 164 38
+85 165 1
+117 165 -1
+245 165 1
+253 165 -1
+532 165 1
+533 165 -1
+1921 165 -1
+1922 165 -1
+1923 165 -1
+1924 165 -1
+1925 165 -1
+1926 165 -1
+1927 165 -1
+1928 165 -1
+7741 165 38
+86 166 1
+118 166 -1
+246 166 1
+254 166 -1
+533 166 1
+534 166 -1
+1929 166 -1
+1930 166 -1
+1931 166 -1
+1932 166 -1
+1933 166 -1
+1934 166 -1
+1935 166 -1
+1936 166 -1
+7742 166 38
+87 167 1
+119 167 -1
+247 167 1
+255 167 -1
+534 167 1
+535 167 -1
+1937 167 -1
+1938 167 -1
+1939 167 -1
+1940 167 -1
+1941 167 -1
+1942 167 -1
+1943 167 -1
+1944 167 -1
+7743 167 38
+88 168 1
+120 168 -1
+248 168 1
+256 168 -1
+535 168 1
+536 168 -1
+1945 168 -1
+1946 168 -1
+1947 168 -1
+1948 168 -1
+1949 168 -1
+1950 168 -1
+1951 168 -1
+1952 168 -1
+7744 168 38
+89 169 1
+121 169 -1
+233 169 -1
+249 169 1
+537 169 -1
+552 169 1
+1953 169 -1
+1954 169 -1
+1955 169 -1
+1956 169 -1
+1957 169 -1
+1958 169 -1
+1959 169 -1
+1960 169 -1
+7745 169 38
+90 170 1
+122 170 -1
+234 170 -1
+250 170 1
+537 170 1
+538 170 -1
+1961 170 -1
+1962 170 -1
+1963 170 -1
+1964 170 -1
+1965 170 -1
+1966 170 -1
+1967 170 -1
+1968 170 -1
+7746 170 38
+91 171 1
+123 171 -1
+235 171 -1
+251 171 1
+538 171 1
+539 171 -1
+1969 171 -1
+1970 171 -1
+1971 171 -1
+1972 171 -1
+1973 171 -1
+1974 171 -1
+1975 171 -1
+1976 171 -1
+7747 171 38
+92 172 1
+124 172 -1
+236 172 -1
+252 172 1
+539 172 1
+540 172 -1
+1977 172 -1
+1978 172 -1
+1979 172 -1
+1980 172 -1
+1981 172 -1
+1982 172 -1
+1983 172 -1
+1984 172 -1
+7748 172 38
+93 173 1
+125 173 -1
+237 173 -1
+253 173 1
+540 173 1
+541 173 -1
+1985 173 -1
+1986 173 -1
+1987 173 -1
+1988 173 -1
+1989 173 -1
+1990 173 -1
+1991 173 -1
+1992 173 -1
+7749 173 38
+94 174 1
+126 174 -1
+238 174 -1
+254 174 1
+541 174 1
+542 174 -1
+1993 174 -1
+1994 174 -1
+1995 174 -1
+1996 174 -1
+1997 174 -1
+1998 174 -1
+1999 174 -1
+2000 174 -1
+7750 174 38
+95 175 1
+127 175 -1
+239 175 -1
+255 175 1
+542 175 1
+543 175 -1
+2001 175 -1
+2002 175 -1
+2003 175 -1
+2004 175 -1
+2005 175 -1
+2006 175 -1
+2007 175 -1
+2008 175 -1
+7751 175 38
+96 176 1
+128 176 -1
+240 176 -1
+256 176 1
+543 176 1
+544 176 -1
+2009 176 -1
+2010 176 -1
+2011 176 -1
+2012 176 -1
+2013 176 -1
+2014 176 -1
+2015 176 -1
+2016 176 -1
+7752 176 38
+97 177 1
+129 177 -1
+241 177 -1
+257 177 1
+544 177 1
+545 177 -1
+2017 177 -1
+2018 177 -1
+2019 177 -1
+2020 177 -1
+2021 177 -1
+2022 177 -1
+2023 177 -1
+2024 177 -1
+7753 177 38
+98 178 1
+130 178 -1
+242 178 -1
+258 178 1
+545 178 1
+546 178 -1
+2025 178 -1
+2026 178 -1
+2027 178 -1
+2028 178 -1
+2029 178 -1
+2030 178 -1
+2031 178 -1
+2032 178 -1
+7754 178 38
+99 179 1
+131 179 -1
+243 179 -1
+259 179 1
+546 179 1
+547 179 -1
+2033 179 -1
+2034 179 -1
+2035 179 -1
+2036 179 -1
+2037 179 -1
+2038 179 -1
+2039 179 -1
+2040 179 -1
+7755 179 38
+100 180 1
+132 180 -1
+244 180 -1
+260 180 1
+547 180 1
+548 180 -1
+2041 180 -1
+2042 180 -1
+2043 180 -1
+2044 180 -1
+2045 180 -1
+2046 180 -1
+2047 180 -1
+2048 180 -1
+7756 180 38
+101 181 1
+133 181 -1
+245 181 -1
+261 181 1
+548 181 1
+549 181 -1
+2049 181 -1
+2050 181 -1
+2051 181 -1
+2052 181 -1
+2053 181 -1
+2054 181 -1
+2055 181 -1
+2056 181 -1
+7757 181 38
+102 182 1
+134 182 -1
+246 182 -1
+262 182 1
+549 182 1
+550 182 -1
+2057 182 -1
+2058 182 -1
+2059 182 -1
+2060 182 -1
+2061 182 -1
+2062 182 -1
+2063 182 -1
+2064 182 -1
+7758 182 38
+103 183 1
+135 183 -1
+247 183 -1
+263 183 1
+550 183 1
+551 183 -1
+2065 183 -1
+2066 183 -1
+2067 183 -1
+2068 183 -1
+2069 183 -1
+2070 183 -1
+2071 183 -1
+2072 183 -1
+7759 183 38
+104 184 1
+136 184 -1
+248 184 -1
+264 184 1
+551 184 1
+552 184 -1
+2073 184 -1
+2074 184 -1
+2075 184 -1
+2076 184 -1
+2077 184 -1
+2078 184 -1
+2079 184 -1
+2080 184 -1
+7760 184 38
+9 185 -1
+70 185 1
+265 185 1
+289 185 -1
+553 185 -1
+568 185 1
+2081 185 -1
+2082 185 -1
+2083 185 -1
+2084 185 -1
+2085 185 -1
+2086 185 -1
+2087 185 -1
+2088 185 -1
+7761 185 38
+10 186 -1
+71 186 1
+266 186 1
+290 186 -1
+553 186 1
+554 186 -1
+2089 186 -1
+2090 186 -1
+2091 186 -1
+2092 186 -1
+2093 186 -1
+2094 186 -1
+2095 186 -1
+2096 186 -1
+7762 186 38
+11 187 -1
+72 187 1
+267 187 1
+291 187 -1
+554 187 1
+555 187 -1
+2097 187 -1
+2098 187 -1
+2099 187 -1
+2100 187 -1
+2101 187 -1
+2102 187 -1
+2103 187 -1
+2104 187 -1
+7763 187 38
+12 188 -1
+57 188 1
+268 188 1
+292 188 -1
+555 188 1
+556 188 -1
+2105 188 -1
+2106 188 -1
+2107 188 -1
+2108 188 -1
+2109 188 -1
+2110 188 -1
+2111 188 -1
+2112 188 -1
+7764 188 38
+13 189 -1
+58 189 1
+269 189 1
+293 189 -1
+556 189 1
+557 189 -1
+2113 189 -1
+2114 189 -1
+2115 189 -1
+2116 189 -1
+2117 189 -1
+2118 189 -1
+2119 189 -1
+2120 189 -1
+7765 189 38
+14 190 -1
+59 190 1
+270 190 1
+294 190 -1
+557 190 1
+558 190 -1
+2121 190 -1
+2122 190 -1
+2123 190 -1
+2124 190 -1
+2125 190 -1
+2126 190 -1
+2127 190 -1
+2128 190 -1
+7766 190 38
+15 191 -1
+60 191 1
+271 191 1
+295 191 -1
+558 191 1
+559 191 -1
+2129 191 -1
+2130 191 -1
+2131 191 -1
+2132 191 -1
+2133 191 -1
+2134 191 -1
+2135 191 -1
+2136 191 -1
+7767 191 38
+16 192 -1
+61 192 1
+272 192 1
+296 192 -1
+559 192 1
+560 192 -1
+2137 192 -1
+2138 192 -1
+2139 192 -1
+2140 192 -1
+2141 192 -1
+2142 192 -1
+2143 192 -1
+2144 192 -1
+7768 192 38
+17 193 -1
+62 193 1
+273 193 1
+281 193 -1
+560 193 1
+561 193 -1
+2145 193 -1
+2146 193 -1
+2147 193 -1
+2148 193 -1
+2149 193 -1
+2150 193 -1
+2151 193 -1
+2152 193 -1
+7769 193 38
+18 194 -1
+63 194 1
+274 194 1
+282 194 -1
+561 194 1
+562 194 -1
+2153 194 -1
+2154 194 -1
+2155 194 -1
+2156 194 -1
+2157 194 -1
+2158 194 -1
+2159 194 -1
+2160 194 -1
+7770 194 38
+19 195 -1
+64 195 1
+275 195 1
+283 195 -1
+562 195 1
+563 195 -1
+2161 195 -1
+2162 195 -1
+2163 195 -1
+2164 195 -1
+2165 195 -1
+2166 195 -1
+2167 195 -1
+2168 195 -1
+7771 195 38
+20 196 -1
+65 196 1
+276 196 1
+284 196 -1
+563 196 1
+564 196 -1
+2169 196 -1
+2170 196 -1
+2171 196 -1
+2172 196 -1
+2173 196 -1
+2174 196 -1
+2175 196 -1
+2176 196 -1
+7772 196 38
+21 197 -1
+66 197 1
+277 197 1
+285 197 -1
+564 197 1
+565 197 -1
+2177 197 -1
+2178 197 -1
+2179 197 -1
+2180 197 -1
+2181 197 -1
+2182 197 -1
+2183 197 -1
+2184 197 -1
+7773 197 38
+22 198 -1
+67 198 1
+278 198 1
+286 198 -1
+565 198 1
+566 198 -1
+2185 198 -1
+2186 198 -1
+2187 198 -1
+2188 198 -1
+2189 198 -1
+2190 198 -1
+2191 198 -1
+2192 198 -1
+7774 198 38
+23 199 -1
+68 199 1
+279 199 1
+287 199 -1
+566 199 1
+567 199 -1
+2193 199 -1
+2194 199 -1
+2195 199 -1
+2196 199 -1
+2197 199 -1
+2198 199 -1
+2199 199 -1
+2200 199 -1
+7775 199 38
+24 200 -1
+69 200 1
+280 200 1
+288 200 -1
+567 200 1
+568 200 -1
+2201 200 -1
+2202 200 -1
+2203 200 -1
+2204 200 -1
+2205 200 -1
+2206 200 -1
+2207 200 -1
+2208 200 -1
+7776 200 38
+25 201 -1
+46 201 1
+265 201 -1
+281 201 1
+569 201 -1
+584 201 1
+2209 201 -1
+2210 201 -1
+2211 201 -1
+2212 201 -1
+2213 201 -1
+2214 201 -1
+2215 201 -1
+2216 201 -1
+7777 201 38
+26 202 -1
+47 202 1
+266 202 -1
+282 202 1
+569 202 1
+570 202 -1
+2217 202 -1
+2218 202 -1
+2219 202 -1
+2220 202 -1
+2221 202 -1
+2222 202 -1
+2223 202 -1
+2224 202 -1
+7778 202 38
+27 203 -1
+48 203 1
+267 203 -1
+283 203 1
+570 203 1
+571 203 -1
+2225 203 -1
+2226 203 -1
+2227 203 -1
+2228 203 -1
+2229 203 -1
+2230 203 -1
+2231 203 -1
+2232 203 -1
+7779 203 38
+28 204 -1
+49 204 1
+268 204 -1
+284 204 1
+571 204 1
+572 204 -1
+2233 204 -1
+2234 204 -1
+2235 204 -1
+2236 204 -1
+2237 204 -1
+2238 204 -1
+2239 204 -1
+2240 204 -1
+7780 204 38
+29 205 -1
+50 205 1
+269 205 -1
+285 205 1
+572 205 1
+573 205 -1
+2241 205 -1
+2242 205 -1
+2243 205 -1
+2244 205 -1
+2245 205 -1
+2246 205 -1
+2247 205 -1
+2248 205 -1
+7781 205 38
+30 206 -1
+51 206 1
+270 206 -1
+286 206 1
+573 206 1
+574 206 -1
+2249 206 -1
+2250 206 -1
+2251 206 -1
+2252 206 -1
+2253 206 -1
+2254 206 -1
+2255 206 -1
+2256 206 -1
+7782 206 38
+31 207 -1
+52 207 1
+271 207 -1
+287 207 1
+574 207 1
+575 207 -1
+2257 207 -1
+2258 207 -1
+2259 207 -1
+2260 207 -1
+2261 207 -1
+2262 207 -1
+2263 207 -1
+2264 207 -1
+7783 207 38
+32 208 -1
+53 208 1
+272 208 -1
+288 208 1
+575 208 1
+576 208 -1
+2265 208 -1
+2266 208 -1
+2267 208 -1
+2268 208 -1
+2269 208 -1
+2270 208 -1
+2271 208 -1
+2272 208 -1
+7784 208 38
+33 209 -1
+54 209 1
+273 209 -1
+289 209 1
+576 209 1
+577 209 -1
+2273 209 -1
+2274 209 -1
+2275 209 -1
+2276 209 -1
+2277 209 -1
+2278 209 -1
+2279 209 -1
+2280 209 -1
+7785 209 38
+34 210 -1
+55 210 1
+274 210 -1
+290 210 1
+577 210 1
+578 210 -1
+2281 210 -1
+2282 210 -1
+2283 210 -1
+2284 210 -1
+2285 210 -1
+2286 210 -1
+2287 210 -1
+2288 210 -1
+7786 210 38
+35 211 -1
+56 211 1
+275 211 -1
+291 211 1
+578 211 1
+579 211 -1
+2289 211 -1
+2290 211 -1
+2291 211 -1
+2292 211 -1
+2293 211 -1
+2294 211 -1
+2295 211 -1
+2296 211 -1
+7787 211 38
+36 212 -1
+41 212 1
+276 212 -1
+292 212 1
+579 212 1
+580 212 -1
+2297 212 -1
+2298 212 -1
+2299 212 -1
+2300 212 -1
+2301 212 -1
+2302 212 -1
+2303 212 -1
+2304 212 -1
+7788 212 38
+37 213 -1
+42 213 1
+277 213 -1
+293 213 1
+580 213 1
+581 213 -1
+2305 213 -1
+2306 213 -1
+2307 213 -1
+2308 213 -1
+2309 213 -1
+2310 213 -1
+2311 213 -1
+2312 213 -1
+7789 213 38
+38 214 -1
+43 214 1
+278 214 -1
+294 214 1
+581 214 1
+582 214 -1
+2313 214 -1
+2314 214 -1
+2315 214 -1
+2316 214 -1
+2317 214 -1
+2318 214 -1
+2319 214 -1
+2320 214 -1
+7790 214 38
+39 215 -1
+44 215 1
+279 215 -1
+295 215 1
+582 215 1
+583 215 -1
+2321 215 -1
+2322 215 -1
+2323 215 -1
+2324 215 -1
+2325 215 -1
+2326 215 -1
+2327 215 -1
+2328 215 -1
+7791 215 38
+40 216 -1
+45 216 1
+280 216 -1
+296 216 1
+583 216 1
+584 216 -1
+2329 216 -1
+2330 216 -1
+2331 216 -1
+2332 216 -1
+2333 216 -1
+2334 216 -1
+2335 216 -1
+2336 216 -1
+7792 216 38
+41 217 -1
+102 217 1
+297 217 1
+321 217 -1
+585 217 -1
+600 217 1
+2337 217 -1
+2338 217 -1
+2339 217 -1
+2340 217 -1
+2341 217 -1
+2342 217 -1
+2343 217 -1
+2344 217 -1
+7793 217 38
+42 218 -1
+103 218 1
+298 218 1
+322 218 -1
+585 218 1
+586 218 -1
+2345 218 -1
+2346 218 -1
+2347 218 -1
+2348 218 -1
+2349 218 -1
+2350 218 -1
+2351 218 -1
+2352 218 -1
+7794 218 38
+43 219 -1
+104 219 1
+299 219 1
+323 219 -1
+586 219 1
+587 219 -1
+2353 219 -1
+2354 219 -1
+2355 219 -1
+2356 219 -1
+2357 219 -1
+2358 219 -1
+2359 219 -1
+2360 219 -1
+7795 219 38
+44 220 -1
+89 220 1
+300 220 1
+324 220 -1
+587 220 1
+588 220 -1
+2361 220 -1
+2362 220 -1
+2363 220 -1
+2364 220 -1
+2365 220 -1
+2366 220 -1
+2367 220 -1
+2368 220 -1
+7796 220 38
+45 221 -1
+90 221 1
+301 221 1
+325 221 -1
+588 221 1
+589 221 -1
+2369 221 -1
+2370 221 -1
+2371 221 -1
+2372 221 -1
+2373 221 -1
+2374 221 -1
+2375 221 -1
+2376 221 -1
+7797 221 38
+46 222 -1
+91 222 1
+302 222 1
+326 222 -1
+589 222 1
+590 222 -1
+2377 222 -1
+2378 222 -1
+2379 222 -1
+2380 222 -1
+2381 222 -1
+2382 222 -1
+2383 222 -1
+2384 222 -1
+7798 222 38
+47 223 -1
+92 223 1
+303 223 1
+327 223 -1
+590 223 1
+591 223 -1
+2385 223 -1
+2386 223 -1
+2387 223 -1
+2388 223 -1
+2389 223 -1
+2390 223 -1
+2391 223 -1
+2392 223 -1
+7799 223 38
+48 224 -1
+93 224 1
+304 224 1
+328 224 -1
+591 224 1
+592 224 -1
+2393 224 -1
+2394 224 -1
+2395 224 -1
+2396 224 -1
+2397 224 -1
+2398 224 -1
+2399 224 -1
+2400 224 -1
+7800 224 38
+49 225 -1
+94 225 1
+305 225 1
+313 225 -1
+592 225 1
+593 225 -1
+2401 225 -1
+2402 225 -1
+2403 225 -1
+2404 225 -1
+2405 225 -1
+2406 225 -1
+2407 225 -1
+2408 225 -1
+7801 225 38
+50 226 -1
+95 226 1
+306 226 1
+314 226 -1
+593 226 1
+594 226 -1
+2409 226 -1
+2410 226 -1
+2411 226 -1
+2412 226 -1
+2413 226 -1
+2414 226 -1
+2415 226 -1
+2416 226 -1
+7802 226 38
+51 227 -1
+96 227 1
+307 227 1
+315 227 -1
+594 227 1
+595 227 -1
+2417 227 -1
+2418 227 -1
+2419 227 -1
+2420 227 -1
+2421 227 -1
+2422 227 -1
+2423 227 -1
+2424 227 -1
+7803 227 38
+52 228 -1
+97 228 1
+308 228 1
+316 228 -1
+595 228 1
+596 228 -1
+2425 228 -1
+2426 228 -1
+2427 228 -1
+2428 228 -1
+2429 228 -1
+2430 228 -1
+2431 228 -1
+2432 228 -1
+7804 228 38
+53 229 -1
+98 229 1
+309 229 1
+317 229 -1
+596 229 1
+597 229 -1
+2433 229 -1
+2434 229 -1
+2435 229 -1
+2436 229 -1
+2437 229 -1
+2438 229 -1
+2439 229 -1
+2440 229 -1
+7805 229 38
+54 230 -1
+99 230 1
+310 230 1
+318 230 -1
+597 230 1
+598 230 -1
+2441 230 -1
+2442 230 -1
+2443 230 -1
+2444 230 -1
+2445 230 -1
+2446 230 -1
+2447 230 -1
+2448 230 -1
+7806 230 38
+55 231 -1
+100 231 1
+311 231 1
+319 231 -1
+598 231 1
+599 231 -1
+2449 231 -1
+2450 231 -1
+2451 231 -1
+2452 231 -1
+2453 231 -1
+2454 231 -1
+2455 231 -1
+2456 231 -1
+7807 231 38
+56 232 -1
+101 232 1
+312 232 1
+320 232 -1
+599 232 1
+600 232 -1
+2457 232 -1
+2458 232 -1
+2459 232 -1
+2460 232 -1
+2461 232 -1
+2462 232 -1
+2463 232 -1
+2464 232 -1
+7808 232 38
+57 233 -1
+78 233 1
+297 233 -1
+313 233 1
+601 233 -1
+616 233 1
+2465 233 -1
+2466 233 -1
+2467 233 -1
+2468 233 -1
+2469 233 -1
+2470 233 -1
+2471 233 -1
+2472 233 -1
+7809 233 38
+58 234 -1
+79 234 1
+298 234 -1
+314 234 1
+601 234 1
+602 234 -1
+2473 234 -1
+2474 234 -1
+2475 234 -1
+2476 234 -1
+2477 234 -1
+2478 234 -1
+2479 234 -1
+2480 234 -1
+7810 234 38
+59 235 -1
+80 235 1
+299 235 -1
+315 235 1
+602 235 1
+603 235 -1
+2481 235 -1
+2482 235 -1
+2483 235 -1
+2484 235 -1
+2485 235 -1
+2486 235 -1
+2487 235 -1
+2488 235 -1
+7811 235 38
+60 236 -1
+81 236 1
+300 236 -1
+316 236 1
+603 236 1
+604 236 -1
+2489 236 -1
+2490 236 -1
+2491 236 -1
+2492 236 -1
+2493 236 -1
+2494 236 -1
+2495 236 -1
+2496 236 -1
+7812 236 38
+61 237 -1
+82 237 1
+301 237 -1
+317 237 1
+604 237 1
+605 237 -1
+2497 237 -1
+2498 237 -1
+2499 237 -1
+2500 237 -1
+2501 237 -1
+2502 237 -1
+2503 237 -1
+2504 237 -1
+7813 237 38
+62 238 -1
+83 238 1
+302 238 -1
+318 238 1
+605 238 1
+606 238 -1
+2505 238 -1
+2506 238 -1
+2507 238 -1
+2508 238 -1
+2509 238 -1
+2510 238 -1
+2511 238 -1
+2512 238 -1
+7814 238 38
+63 239 -1
+84 239 1
+303 239 -1
+319 239 1
+606 239 1
+607 239 -1
+2513 239 -1
+2514 239 -1
+2515 239 -1
+2516 239 -1
+2517 239 -1
+2518 239 -1
+2519 239 -1
+2520 239 -1
+7815 239 38
+64 240 -1
+85 240 1
+304 240 -1
+320 240 1
+607 240 1
+608 240 -1
+2521 240 -1
+2522 240 -1
+2523 240 -1
+2524 240 -1
+2525 240 -1
+2526 240 -1
+2527 240 -1
+2528 240 -1
+7816 240 38
+65 241 -1
+86 241 1
+305 241 -1
+321 241 1
+608 241 1
+609 241 -1
+2529 241 -1
+2530 241 -1
+2531 241 -1
+2532 241 -1
+2533 241 -1
+2534 241 -1
+2535 241 -1
+2536 241 -1
+7817 241 38
+66 242 -1
+87 242 1
+306 242 -1
+322 242 1
+609 242 1
+610 242 -1
+2537 242 -1
+2538 242 -1
+2539 242 -1
+2540 242 -1
+2541 242 -1
+2542 242 -1
+2543 242 -1
+2544 242 -1
+7818 242 38
+67 243 -1
+88 243 1
+307 243 -1
+323 243 1
+610 243 1
+611 243 -1
+2545 243 -1
+2546 243 -1
+2547 243 -1
+2548 243 -1
+2549 243 -1
+2550 243 -1
+2551 243 -1
+2552 243 -1
+7819 243 38
+68 244 -1
+73 244 1
+308 244 -1
+324 244 1
+611 244 1
+612 244 -1
+2553 244 -1
+2554 244 -1
+2555 244 -1
+2556 244 -1
+2557 244 -1
+2558 244 -1
+2559 244 -1
+2560 244 -1
+7820 244 38
+69 245 -1
+74 245 1
+309 245 -1
+325 245 1
+612 245 1
+613 245 -1
+2561 245 -1
+2562 245 -1
+2563 245 -1
+2564 245 -1
+2565 245 -1
+2566 245 -1
+2567 245 -1
+2568 245 -1
+7821 245 38
+70 246 -1
+75 246 1
+310 246 -1
+326 246 1
+613 246 1
+614 246 -1
+2569 246 -1
+2570 246 -1
+2571 246 -1
+2572 246 -1
+2573 246 -1
+2574 246 -1
+2575 246 -1
+2576 246 -1
+7822 246 38
+71 247 -1
+76 247 1
+311 247 -1
+327 247 1
+614 247 1
+615 247 -1
+2577 247 -1
+2578 247 -1
+2579 247 -1
+2580 247 -1
+2581 247 -1
+2582 247 -1
+2583 247 -1
+2584 247 -1
+7823 247 38
+72 248 -1
+77 248 1
+312 248 -1
+328 248 1
+615 248 1
+616 248 -1
+2585 248 -1
+2586 248 -1
+2587 248 -1
+2588 248 -1
+2589 248 -1
+2590 248 -1
+2591 248 -1
+2592 248 -1
+7824 248 38
+73 249 -1
+134 249 1
+329 249 1
+353 249 -1
+617 249 -1
+632 249 1
+2593 249 -1
+2594 249 -1
+2595 249 -1
+2596 249 -1
+2597 249 -1
+2598 249 -1
+2599 249 -1
+2600 249 -1
+7825 249 38
+74 250 -1
+135 250 1
+330 250 1
+354 250 -1
+617 250 1
+618 250 -1
+2601 250 -1
+2602 250 -1
+2603 250 -1
+2604 250 -1
+2605 250 -1
+2606 250 -1
+2607 250 -1
+2608 250 -1
+7826 250 38
+75 251 -1
+136 251 1
+331 251 1
+355 251 -1
+618 251 1
+619 251 -1
+2609 251 -1
+2610 251 -1
+2611 251 -1
+2612 251 -1
+2613 251 -1
+2614 251 -1
+2615 251 -1
+2616 251 -1
+7827 251 38
+76 252 -1
+121 252 1
+332 252 1
+356 252 -1
+619 252 1
+620 252 -1
+2617 252 -1
+2618 252 -1
+2619 252 -1
+2620 252 -1
+2621 252 -1
+2622 252 -1
+2623 252 -1
+2624 252 -1
+7828 252 38
+77 253 -1
+122 253 1
+333 253 1
+357 253 -1
+620 253 1
+621 253 -1
+2625 253 -1
+2626 253 -1
+2627 253 -1
+2628 253 -1
+2629 253 -1
+2630 253 -1
+2631 253 -1
+2632 253 -1
+7829 253 38
+78 254 -1
+123 254 1
+334 254 1
+358 254 -1
+621 254 1
+622 254 -1
+2633 254 -1
+2634 254 -1
+2635 254 -1
+2636 254 -1
+2637 254 -1
+2638 254 -1
+2639 254 -1
+2640 254 -1
+7830 254 38
+79 255 -1
+124 255 1
+335 255 1
+359 255 -1
+622 255 1
+623 255 -1
+2641 255 -1
+2642 255 -1
+2643 255 -1
+2644 255 -1
+2645 255 -1
+2646 255 -1
+2647 255 -1
+2648 255 -1
+7831 255 38
+80 256 -1
+125 256 1
+336 256 1
+360 256 -1
+623 256 1
+624 256 -1
+2649 256 -1
+2650 256 -1
+2651 256 -1
+2652 256 -1
+2653 256 -1
+2654 256 -1
+2655 256 -1
+2656 256 -1
+7832 256 38
+81 257 -1
+126 257 1
+337 257 1
+345 257 -1
+624 257 1
+625 257 -1
+2657 257 -1
+2658 257 -1
+2659 257 -1
+2660 257 -1
+2661 257 -1
+2662 257 -1
+2663 257 -1
+2664 257 -1
+7833 257 38
+82 258 -1
+127 258 1
+338 258 1
+346 258 -1
+625 258 1
+626 258 -1
+2665 258 -1
+2666 258 -1
+2667 258 -1
+2668 258 -1
+2669 258 -1
+2670 258 -1
+2671 258 -1
+2672 258 -1
+7834 258 38
+83 259 -1
+128 259 1
+339 259 1
+347 259 -1
+626 259 1
+627 259 -1
+2673 259 -1
+2674 259 -1
+2675 259 -1
+2676 259 -1
+2677 259 -1
+2678 259 -1
+2679 259 -1
+2680 259 -1
+7835 259 38
+84 260 -1
+129 260 1
+340 260 1
+348 260 -1
+627 260 1
+628 260 -1
+2681 260 -1
+2682 260 -1
+2683 260 -1
+2684 260 -1
+2685 260 -1
+2686 260 -1
+2687 260 -1
+2688 260 -1
+7836 260 38
+85 261 -1
+130 261 1
+341 261 1
+349 261 -1
+628 261 1
+629 261 -1
+2689 261 -1
+2690 261 -1
+2691 261 -1
+2692 261 -1
+2693 261 -1
+2694 261 -1
+2695 261 -1
+2696 261 -1
+7837 261 38
+86 262 -1
+131 262 1
+342 262 1
+350 262 -1
+629 262 1
+630 262 -1
+2697 262 -1
+2698 262 -1
+2699 262 -1
+2700 262 -1
+2701 262 -1
+2702 262 -1
+2703 262 -1
+2704 262 -1
+7838 262 38
+87 263 -1
+132 263 1
+343 263 1
+351 263 -1
+630 263 1
+631 263 -1
+2705 263 -1
+2706 263 -1
+2707 263 -1
+2708 263 -1
+2709 263 -1
+2710 263 -1
+2711 263 -1
+2712 263 -1
+7839 263 38
+88 264 -1
+133 264 1
+344 264 1
+352 264 -1
+631 264 1
+632 264 -1
+2713 264 -1
+2714 264 -1
+2715 264 -1
+2716 264 -1
+2717 264 -1
+2718 264 -1
+2719 264 -1
+2720 264 -1
+7840 264 38
+89 265 -1
+110 265 1
+329 265 -1
+345 265 1
+633 265 -1
+648 265 1
+2721 265 -1
+2722 265 -1
+2723 265 -1
+2724 265 -1
+2725 265 -1
+2726 265 -1
+2727 265 -1
+2728 265 -1
+7841 265 38
+90 266 -1
+111 266 1
+330 266 -1
+346 266 1
+633 266 1
+634 266 -1
+2729 266 -1
+2730 266 -1
+2731 266 -1
+2732 266 -1
+2733 266 -1
+2734 266 -1
+2735 266 -1
+2736 266 -1
+7842 266 38
+91 267 -1
+112 267 1
+331 267 -1
+347 267 1
+634 267 1
+635 267 -1
+2737 267 -1
+2738 267 -1
+2739 267 -1
+2740 267 -1
+2741 267 -1
+2742 267 -1
+2743 267 -1
+2744 267 -1
+7843 267 38
+92 268 -1
+113 268 1
+332 268 -1
+348 268 1
+635 268 1
+636 268 -1
+2745 268 -1
+2746 268 -1
+2747 268 -1
+2748 268 -1
+2749 268 -1
+2750 268 -1
+2751 268 -1
+2752 268 -1
+7844 268 38
+93 269 -1
+114 269 1
+333 269 -1
+349 269 1
+636 269 1
+637 269 -1
+2753 269 -1
+2754 269 -1
+2755 269 -1
+2756 269 -1
+2757 269 -1
+2758 269 -1
+2759 269 -1
+2760 269 -1
+7845 269 38
+94 270 -1
+115 270 1
+334 270 -1
+350 270 1
+637 270 1
+638 270 -1
+2761 270 -1
+2762 270 -1
+2763 270 -1
+2764 270 -1
+2765 270 -1
+2766 270 -1
+2767 270 -1
+2768 270 -1
+7846 270 38
+95 271 -1
+116 271 1
+335 271 -1
+351 271 1
+638 271 1
+639 271 -1
+2769 271 -1
+2770 271 -1
+2771 271 -1
+2772 271 -1
+2773 271 -1
+2774 271 -1
+2775 271 -1
+2776 271 -1
+7847 271 38
+96 272 -1
+117 272 1
+336 272 -1
+352 272 1
+639 272 1
+640 272 -1
+2777 272 -1
+2778 272 -1
+2779 272 -1
+2780 272 -1
+2781 272 -1
+2782 272 -1
+2783 272 -1
+2784 272 -1
+7848 272 38
+97 273 -1
+118 273 1
+337 273 -1
+353 273 1
+640 273 1
+641 273 -1
+2785 273 -1
+2786 273 -1
+2787 273 -1
+2788 273 -1
+2789 273 -1
+2790 273 -1
+2791 273 -1
+2792 273 -1
+7849 273 38
+98 274 -1
+119 274 1
+338 274 -1
+354 274 1
+641 274 1
+642 274 -1
+2793 274 -1
+2794 274 -1
+2795 274 -1
+2796 274 -1
+2797 274 -1
+2798 274 -1
+2799 274 -1
+2800 274 -1
+7850 274 38
+99 275 -1
+120 275 1
+339 275 -1
+355 275 1
+642 275 1
+643 275 -1
+2801 275 -1
+2802 275 -1
+2803 275 -1
+2804 275 -1
+2805 275 -1
+2806 275 -1
+2807 275 -1
+2808 275 -1
+7851 275 38
+100 276 -1
+105 276 1
+340 276 -1
+356 276 1
+643 276 1
+644 276 -1
+2809 276 -1
+2810 276 -1
+2811 276 -1
+2812 276 -1
+2813 276 -1
+2814 276 -1
+2815 276 -1
+2816 276 -1
+7852 276 38
+101 277 -1
+106 277 1
+341 277 -1
+357 277 1
+644 277 1
+645 277 -1
+2817 277 -1
+2818 277 -1
+2819 277 -1
+2820 277 -1
+2821 277 -1
+2822 277 -1
+2823 277 -1
+2824 277 -1
+7853 277 38
+102 278 -1
+107 278 1
+342 278 -1
+358 278 1
+645 278 1
+646 278 -1
+2825 278 -1
+2826 278 -1
+2827 278 -1
+2828 278 -1
+2829 278 -1
+2830 278 -1
+2831 278 -1
+2832 278 -1
+7854 278 38
+103 279 -1
+108 279 1
+343 279 -1
+359 279 1
+646 279 1
+647 279 -1
+2833 279 -1
+2834 279 -1
+2835 279 -1
+2836 279 -1
+2837 279 -1
+2838 279 -1
+2839 279 -1
+2840 279 -1
+7855 279 38
+104 280 -1
+109 280 1
+344 280 -1
+360 280 1
+647 280 1
+648 280 -1
+2841 280 -1
+2842 280 -1
+2843 280 -1
+2844 280 -1
+2845 280 -1
+2846 280 -1
+2847 280 -1
+2848 280 -1
+7856 280 38
+30 281 1
+105 281 -1
+361 281 1
+385 281 -1
+649 281 -1
+664 281 1
+2849 281 -1
+2850 281 -1
+2851 281 -1
+2852 281 -1
+2853 281 -1
+2854 281 -1
+2855 281 -1
+2856 281 -1
+7857 281 38
+31 282 1
+106 282 -1
+362 282 1
+386 282 -1
+649 282 1
+650 282 -1
+2857 282 -1
+2858 282 -1
+2859 282 -1
+2860 282 -1
+2861 282 -1
+2862 282 -1
+2863 282 -1
+2864 282 -1
+7858 282 38
+32 283 1
+107 283 -1
+363 283 1
+387 283 -1
+650 283 1
+651 283 -1
+2865 283 -1
+2866 283 -1
+2867 283 -1
+2868 283 -1
+2869 283 -1
+2870 283 -1
+2871 283 -1
+2872 283 -1
+7859 283 38
+33 284 1
+108 284 -1
+364 284 1
+388 284 -1
+651 284 1
+652 284 -1
+2873 284 -1
+2874 284 -1
+2875 284 -1
+2876 284 -1
+2877 284 -1
+2878 284 -1
+2879 284 -1
+2880 284 -1
+7860 284 38
+34 285 1
+109 285 -1
+365 285 1
+389 285 -1
+652 285 1
+653 285 -1
+2881 285 -1
+2882 285 -1
+2883 285 -1
+2884 285 -1
+2885 285 -1
+2886 285 -1
+2887 285 -1
+2888 285 -1
+7861 285 38
+35 286 1
+110 286 -1
+366 286 1
+390 286 -1
+653 286 1
+654 286 -1
+2889 286 -1
+2890 286 -1
+2891 286 -1
+2892 286 -1
+2893 286 -1
+2894 286 -1
+2895 286 -1
+2896 286 -1
+7862 286 38
+36 287 1
+111 287 -1
+367 287 1
+391 287 -1
+654 287 1
+655 287 -1
+2897 287 -1
+2898 287 -1
+2899 287 -1
+2900 287 -1
+2901 287 -1
+2902 287 -1
+2903 287 -1
+2904 287 -1
+7863 287 38
+37 288 1
+112 288 -1
+368 288 1
+392 288 -1
+655 288 1
+656 288 -1
+2905 288 -1
+2906 288 -1
+2907 288 -1
+2908 288 -1
+2909 288 -1
+2910 288 -1
+2911 288 -1
+2912 288 -1
+7864 288 38
+38 289 1
+113 289 -1
+369 289 1
+377 289 -1
+656 289 1
+657 289 -1
+2913 289 -1
+2914 289 -1
+2915 289 -1
+2916 289 -1
+2917 289 -1
+2918 289 -1
+2919 289 -1
+2920 289 -1
+7865 289 38
+39 290 1
+114 290 -1
+370 290 1
+378 290 -1
+657 290 1
+658 290 -1
+2921 290 -1
+2922 290 -1
+2923 290 -1
+2924 290 -1
+2925 290 -1
+2926 290 -1
+2927 290 -1
+2928 290 -1
+7866 290 38
+40 291 1
+115 291 -1
+371 291 1
+379 291 -1
+658 291 1
+659 291 -1
+2929 291 -1
+2930 291 -1
+2931 291 -1
+2932 291 -1
+2933 291 -1
+2934 291 -1
+2935 291 -1
+2936 291 -1
+7867 291 38
+25 292 1
+116 292 -1
+372 292 1
+380 292 -1
+659 292 1
+660 292 -1
+2937 292 -1
+2938 292 -1
+2939 292 -1
+2940 292 -1
+2941 292 -1
+2942 292 -1
+2943 292 -1
+2944 292 -1
+7868 292 38
+26 293 1
+117 293 -1
+373 293 1
+381 293 -1
+660 293 1
+661 293 -1
+2945 293 -1
+2946 293 -1
+2947 293 -1
+2948 293 -1
+2949 293 -1
+2950 293 -1
+2951 293 -1
+2952 293 -1
+7869 293 38
+27 294 1
+118 294 -1
+374 294 1
+382 294 -1
+661 294 1
+662 294 -1
+2953 294 -1
+2954 294 -1
+2955 294 -1
+2956 294 -1
+2957 294 -1
+2958 294 -1
+2959 294 -1
+2960 294 -1
+7870 294 38
+28 295 1
+119 295 -1
+375 295 1
+383 295 -1
+662 295 1
+663 295 -1
+2961 295 -1
+2962 295 -1
+2963 295 -1
+2964 295 -1
+2965 295 -1
+2966 295 -1
+2967 295 -1
+2968 295 -1
+7871 295 38
+29 296 1
+120 296 -1
+376 296 1
+384 296 -1
+663 296 1
+664 296 -1
+2969 296 -1
+2970 296 -1
+2971 296 -1
+2972 296 -1
+2973 296 -1
+2974 296 -1
+2975 296 -1
+2976 296 -1
+7872 296 38
+22 297 1
+121 297 -1
+361 297 -1
+377 297 1
+665 297 -1
+680 297 1
+2977 297 -1
+2978 297 -1
+2979 297 -1
+2980 297 -1
+2981 297 -1
+2982 297 -1
+2983 297 -1
+2984 297 -1
+7873 297 38
+23 298 1
+122 298 -1
+362 298 -1
+378 298 1
+665 298 1
+666 298 -1
+2985 298 -1
+2986 298 -1
+2987 298 -1
+2988 298 -1
+2989 298 -1
+2990 298 -1
+2991 298 -1
+2992 298 -1
+7874 298 38
+24 299 1
+123 299 -1
+363 299 -1
+379 299 1
+666 299 1
+667 299 -1
+2993 299 -1
+2994 299 -1
+2995 299 -1
+2996 299 -1
+2997 299 -1
+2998 299 -1
+2999 299 -1
+3000 299 -1
+7875 299 38
+9 300 1
+124 300 -1
+364 300 -1
+380 300 1
+667 300 1
+668 300 -1
+3001 300 -1
+3002 300 -1
+3003 300 -1
+3004 300 -1
+3005 300 -1
+3006 300 -1
+3007 300 -1
+3008 300 -1
+7876 300 38
+10 301 1
+125 301 -1
+365 301 -1
+381 301 1
+668 301 1
+669 301 -1
+3009 301 -1
+3010 301 -1
+3011 301 -1
+3012 301 -1
+3013 301 -1
+3014 301 -1
+3015 301 -1
+3016 301 -1
+7877 301 38
+11 302 1
+126 302 -1
+366 302 -1
+382 302 1
+669 302 1
+670 302 -1
+3017 302 -1
+3018 302 -1
+3019 302 -1
+3020 302 -1
+3021 302 -1
+3022 302 -1
+3023 302 -1
+3024 302 -1
+7878 302 38
+12 303 1
+127 303 -1
+367 303 -1
+383 303 1
+670 303 1
+671 303 -1
+3025 303 -1
+3026 303 -1
+3027 303 -1
+3028 303 -1
+3029 303 -1
+3030 303 -1
+3031 303 -1
+3032 303 -1
+7879 303 38
+13 304 1
+128 304 -1
+368 304 -1
+384 304 1
+671 304 1
+672 304 -1
+3033 304 -1
+3034 304 -1
+3035 304 -1
+3036 304 -1
+3037 304 -1
+3038 304 -1
+3039 304 -1
+3040 304 -1
+7880 304 38
+14 305 1
+129 305 -1
+369 305 -1
+385 305 1
+672 305 1
+673 305 -1
+3041 305 -1
+3042 305 -1
+3043 305 -1
+3044 305 -1
+3045 305 -1
+3046 305 -1
+3047 305 -1
+3048 305 -1
+7881 305 38
+15 306 1
+130 306 -1
+370 306 -1
+386 306 1
+673 306 1
+674 306 -1
+3049 306 -1
+3050 306 -1
+3051 306 -1
+3052 306 -1
+3053 306 -1
+3054 306 -1
+3055 306 -1
+3056 306 -1
+7882 306 38
+16 307 1
+131 307 -1
+371 307 -1
+387 307 1
+674 307 1
+675 307 -1
+3057 307 -1
+3058 307 -1
+3059 307 -1
+3060 307 -1
+3061 307 -1
+3062 307 -1
+3063 307 -1
+3064 307 -1
+7883 307 38
+17 308 1
+132 308 -1
+372 308 -1
+388 308 1
+675 308 1
+676 308 -1
+3065 308 -1
+3066 308 -1
+3067 308 -1
+3068 308 -1
+3069 308 -1
+3070 308 -1
+3071 308 -1
+3072 308 -1
+7884 308 38
+18 309 1
+133 309 -1
+373 309 -1
+389 309 1
+676 309 1
+677 309 -1
+3073 309 -1
+3074 309 -1
+3075 309 -1
+3076 309 -1
+3077 309 -1
+3078 309 -1
+3079 309 -1
+3080 309 -1
+7885 309 38
+19 310 1
+134 310 -1
+374 310 -1
+390 310 1
+677 310 1
+678 310 -1
+3081 310 -1
+3082 310 -1
+3083 310 -1
+3084 310 -1
+3085 310 -1
+3086 310 -1
+3087 310 -1
+3088 310 -1
+7886 310 38
+20 311 1
+135 311 -1
+375 311 -1
+391 311 1
+678 311 1
+679 311 -1
+3089 311 -1
+3090 311 -1
+3091 311 -1
+3092 311 -1
+3093 311 -1
+3094 311 -1
+3095 311 -1
+3096 311 -1
+7887 311 38
+21 312 1
+136 312 -1
+376 312 -1
+392 312 1
+679 312 1
+680 312 -1
+3097 312 -1
+3098 312 -1
+3099 312 -1
+3100 312 -1
+3101 312 -1
+3102 312 -1
+3103 312 -1
+3104 312 -1
+7888 312 38
+137 313 1
+145 313 1
+169 313 1
+177 313 1
+201 313 1
+209 313 1
+233 313 1
+241 313 1
+681 313 -1
+688 313 1
+3105 313 -1
+3106 313 -1
+3107 313 -1
+3108 313 -1
+7889 313 38
+138 314 1
+146 314 1
+170 314 1
+178 314 1
+202 314 1
+210 314 1
+234 314 1
+242 314 1
+681 314 1
+682 314 -1
+3109 314 -1
+3110 314 -1
+3111 314 -1
+3112 314 -1
+7890 314 38
+139 315 1
+147 315 1
+171 315 1
+179 315 1
+203 315 1
+211 315 1
+235 315 1
+243 315 1
+682 315 1
+683 315 -1
+3113 315 -1
+3114 315 -1
+3115 315 -1
+3116 315 -1
+7891 315 38
+140 316 1
+148 316 1
+172 316 1
+180 316 1
+204 316 1
+212 316 1
+236 316 1
+244 316 1
+683 316 1
+684 316 -1
+3117 316 -1
+3118 316 -1
+3119 316 -1
+3120 316 -1
+7892 316 38
+141 317 1
+149 317 1
+173 317 1
+181 317 1
+205 317 1
+213 317 1
+237 317 1
+245 317 1
+684 317 1
+685 317 -1
+3121 317 -1
+3122 317 -1
+3123 317 -1
+3124 317 -1
+7893 317 38
+142 318 1
+150 318 1
+174 318 1
+182 318 1
+206 318 1
+214 318 1
+238 318 1
+246 318 1
+685 318 1
+686 318 -1
+3125 318 -1
+3126 318 -1
+3127 318 -1
+3128 318 -1
+7894 318 38
+143 319 1
+151 319 1
+175 319 1
+183 319 1
+207 319 1
+215 319 1
+239 319 1
+247 319 1
+686 319 1
+687 319 -1
+3129 319 -1
+3130 319 -1
+3131 319 -1
+3132 319 -1
+7895 319 38
+144 320 1
+152 320 1
+176 320 1
+184 320 1
+208 320 1
+216 320 1
+240 320 1
+248 320 1
+687 320 1
+688 320 -1
+3133 320 -1
+3134 320 -1
+3135 320 -1
+3136 320 -1
+7896 320 38
+153 321 1
+161 321 1
+185 321 1
+193 321 1
+217 321 1
+225 321 1
+249 321 1
+257 321 1
+689 321 -1
+696 321 1
+3137 321 -1
+3138 321 -1
+3139 321 -1
+3140 321 -1
+7897 321 38
+154 322 1
+162 322 1
+186 322 1
+194 322 1
+218 322 1
+226 322 1
+250 322 1
+258 322 1
+689 322 1
+690 322 -1
+3141 322 -1
+3142 322 -1
+3143 322 -1
+3144 322 -1
+7898 322 38
+155 323 1
+163 323 1
+187 323 1
+195 323 1
+219 323 1
+227 323 1
+251 323 1
+259 323 1
+690 323 1
+691 323 -1
+3145 323 -1
+3146 323 -1
+3147 323 -1
+3148 323 -1
+7899 323 38
+156 324 1
+164 324 1
+188 324 1
+196 324 1
+220 324 1
+228 324 1
+252 324 1
+260 324 1
+691 324 1
+692 324 -1
+3149 324 -1
+3150 324 -1
+3151 324 -1
+3152 324 -1
+7900 324 38
+157 325 1
+165 325 1
+189 325 1
+197 325 1
+221 325 1
+229 325 1
+253 325 1
+261 325 1
+692 325 1
+693 325 -1
+3153 325 -1
+3154 325 -1
+3155 325 -1
+3156 325 -1
+7901 325 38
+158 326 1
+166 326 1
+190 326 1
+198 326 1
+222 326 1
+230 326 1
+254 326 1
+262 326 1
+693 326 1
+694 326 -1
+3157 326 -1
+3158 326 -1
+3159 326 -1
+3160 326 -1
+7902 326 38
+159 327 1
+167 327 1
+191 327 1
+199 327 1
+223 327 1
+231 327 1
+255 327 1
+263 327 1
+694 327 1
+695 327 -1
+3161 327 -1
+3162 327 -1
+3163 327 -1
+3164 327 -1
+7903 327 38
+160 328 1
+168 328 1
+192 328 1
+200 328 1
+224 328 1
+232 328 1
+256 328 1
+264 328 1
+695 328 1
+696 328 -1
+3165 328 -1
+3166 328 -1
+3167 328 -1
+3168 328 -1
+7904 328 38
+137 329 -1
+198 329 1
+265 329 1
+369 329 -1
+697 329 -1
+712 329 1
+3169 329 -1
+3170 329 -1
+3171 329 -1
+3172 329 -1
+3173 329 -1
+3174 329 -1
+3175 329 -1
+3176 329 -1
+7905 329 38
+138 330 -1
+199 330 1
+266 330 1
+370 330 -1
+697 330 1
+698 330 -1
+3177 330 -1
+3178 330 -1
+3179 330 -1
+3180 330 -1
+3181 330 -1
+3182 330 -1
+3183 330 -1
+3184 330 -1
+7906 330 38
+139 331 -1
+200 331 1
+267 331 1
+371 331 -1
+698 331 1
+699 331 -1
+3185 331 -1
+3186 331 -1
+3187 331 -1
+3188 331 -1
+3189 331 -1
+3190 331 -1
+3191 331 -1
+3192 331 -1
+7907 331 38
+140 332 -1
+185 332 1
+268 332 1
+372 332 -1
+699 332 1
+700 332 -1
+3193 332 -1
+3194 332 -1
+3195 332 -1
+3196 332 -1
+3197 332 -1
+3198 332 -1
+3199 332 -1
+3200 332 -1
+7908 332 38
+141 333 -1
+186 333 1
+269 333 1
+373 333 -1
+700 333 1
+701 333 -1
+3201 333 -1
+3202 333 -1
+3203 333 -1
+3204 333 -1
+3205 333 -1
+3206 333 -1
+3207 333 -1
+3208 333 -1
+7909 333 38
+142 334 -1
+187 334 1
+270 334 1
+374 334 -1
+701 334 1
+702 334 -1
+3209 334 -1
+3210 334 -1
+3211 334 -1
+3212 334 -1
+3213 334 -1
+3214 334 -1
+3215 334 -1
+3216 334 -1
+7910 334 38
+143 335 -1
+188 335 1
+271 335 1
+375 335 -1
+702 335 1
+703 335 -1
+3217 335 -1
+3218 335 -1
+3219 335 -1
+3220 335 -1
+3221 335 -1
+3222 335 -1
+3223 335 -1
+3224 335 -1
+7911 335 38
+144 336 -1
+189 336 1
+272 336 1
+376 336 -1
+703 336 1
+704 336 -1
+3225 336 -1
+3226 336 -1
+3227 336 -1
+3228 336 -1
+3229 336 -1
+3230 336 -1
+3231 336 -1
+3232 336 -1
+7912 336 38
+145 337 -1
+190 337 1
+273 337 1
+361 337 -1
+704 337 1
+705 337 -1
+3233 337 -1
+3234 337 -1
+3235 337 -1
+3236 337 -1
+3237 337 -1
+3238 337 -1
+3239 337 -1
+3240 337 -1
+7913 337 38
+146 338 -1
+191 338 1
+274 338 1
+362 338 -1
+705 338 1
+706 338 -1
+3241 338 -1
+3242 338 -1
+3243 338 -1
+3244 338 -1
+3245 338 -1
+3246 338 -1
+3247 338 -1
+3248 338 -1
+7914 338 38
+147 339 -1
+192 339 1
+275 339 1
+363 339 -1
+706 339 1
+707 339 -1
+3249 339 -1
+3250 339 -1
+3251 339 -1
+3252 339 -1
+3253 339 -1
+3254 339 -1
+3255 339 -1
+3256 339 -1
+7915 339 38
+148 340 -1
+193 340 1
+276 340 1
+364 340 -1
+707 340 1
+708 340 -1
+3257 340 -1
+3258 340 -1
+3259 340 -1
+3260 340 -1
+3261 340 -1
+3262 340 -1
+3263 340 -1
+3264 340 -1
+7916 340 38
+149 341 -1
+194 341 1
+277 341 1
+365 341 -1
+708 341 1
+709 341 -1
+3265 341 -1
+3266 341 -1
+3267 341 -1
+3268 341 -1
+3269 341 -1
+3270 341 -1
+3271 341 -1
+3272 341 -1
+7917 341 38
+150 342 -1
+195 342 1
+278 342 1
+366 342 -1
+709 342 1
+710 342 -1
+3273 342 -1
+3274 342 -1
+3275 342 -1
+3276 342 -1
+3277 342 -1
+3278 342 -1
+3279 342 -1
+3280 342 -1
+7918 342 38
+151 343 -1
+196 343 1
+279 343 1
+367 343 -1
+710 343 1
+711 343 -1
+3281 343 -1
+3282 343 -1
+3283 343 -1
+3284 343 -1
+3285 343 -1
+3286 343 -1
+3287 343 -1
+3288 343 -1
+7919 343 38
+152 344 -1
+197 344 1
+280 344 1
+368 344 -1
+711 344 1
+712 344 -1
+3289 344 -1
+3290 344 -1
+3291 344 -1
+3292 344 -1
+3293 344 -1
+3294 344 -1
+3295 344 -1
+3296 344 -1
+7920 344 38
+153 345 -1
+174 345 1
+281 345 1
+385 345 -1
+713 345 -1
+728 345 1
+3297 345 -1
+3298 345 -1
+3299 345 -1
+3300 345 -1
+3301 345 -1
+3302 345 -1
+3303 345 -1
+3304 345 -1
+7921 345 38
+154 346 -1
+175 346 1
+282 346 1
+386 346 -1
+713 346 1
+714 346 -1
+3305 346 -1
+3306 346 -1
+3307 346 -1
+3308 346 -1
+3309 346 -1
+3310 346 -1
+3311 346 -1
+3312 346 -1
+7922 346 38
+155 347 -1
+176 347 1
+283 347 1
+387 347 -1
+714 347 1
+715 347 -1
+3313 347 -1
+3314 347 -1
+3315 347 -1
+3316 347 -1
+3317 347 -1
+3318 347 -1
+3319 347 -1
+3320 347 -1
+7923 347 38
+156 348 -1
+177 348 1
+284 348 1
+388 348 -1
+715 348 1
+716 348 -1
+3321 348 -1
+3322 348 -1
+3323 348 -1
+3324 348 -1
+3325 348 -1
+3326 348 -1
+3327 348 -1
+3328 348 -1
+7924 348 38
+157 349 -1
+178 349 1
+285 349 1
+389 349 -1
+716 349 1
+717 349 -1
+3329 349 -1
+3330 349 -1
+3331 349 -1
+3332 349 -1
+3333 349 -1
+3334 349 -1
+3335 349 -1
+3336 349 -1
+7925 349 38
+158 350 -1
+179 350 1
+286 350 1
+390 350 -1
+717 350 1
+718 350 -1
+3337 350 -1
+3338 350 -1
+3339 350 -1
+3340 350 -1
+3341 350 -1
+3342 350 -1
+3343 350 -1
+3344 350 -1
+7926 350 38
+159 351 -1
+180 351 1
+287 351 1
+391 351 -1
+718 351 1
+719 351 -1
+3345 351 -1
+3346 351 -1
+3347 351 -1
+3348 351 -1
+3349 351 -1
+3350 351 -1
+3351 351 -1
+3352 351 -1
+7927 351 38
+160 352 -1
+181 352 1
+288 352 1
+392 352 -1
+719 352 1
+720 352 -1
+3353 352 -1
+3354 352 -1
+3355 352 -1
+3356 352 -1
+3357 352 -1
+3358 352 -1
+3359 352 -1
+3360 352 -1
+7928 352 38
+161 353 -1
+182 353 1
+289 353 1
+377 353 -1
+720 353 1
+721 353 -1
+3361 353 -1
+3362 353 -1
+3363 353 -1
+3364 353 -1
+3365 353 -1
+3366 353 -1
+3367 353 -1
+3368 353 -1
+7929 353 38
+162 354 -1
+183 354 1
+290 354 1
+378 354 -1
+721 354 1
+722 354 -1
+3369 354 -1
+3370 354 -1
+3371 354 -1
+3372 354 -1
+3373 354 -1
+3374 354 -1
+3375 354 -1
+3376 354 -1
+7930 354 38
+163 355 -1
+184 355 1
+291 355 1
+379 355 -1
+722 355 1
+723 355 -1
+3377 355 -1
+3378 355 -1
+3379 355 -1
+3380 355 -1
+3381 355 -1
+3382 355 -1
+3383 355 -1
+3384 355 -1
+7931 355 38
+164 356 -1
+169 356 1
+292 356 1
+380 356 -1
+723 356 1
+724 356 -1
+3385 356 -1
+3386 356 -1
+3387 356 -1
+3388 356 -1
+3389 356 -1
+3390 356 -1
+3391 356 -1
+3392 356 -1
+7932 356 38
+165 357 -1
+170 357 1
+293 357 1
+381 357 -1
+724 357 1
+725 357 -1
+3393 357 -1
+3394 357 -1
+3395 357 -1
+3396 357 -1
+3397 357 -1
+3398 357 -1
+3399 357 -1
+3400 357 -1
+7933 357 38
+166 358 -1
+171 358 1
+294 358 1
+382 358 -1
+725 358 1
+726 358 -1
+3401 358 -1
+3402 358 -1
+3403 358 -1
+3404 358 -1
+3405 358 -1
+3406 358 -1
+3407 358 -1
+3408 358 -1
+7934 358 38
+167 359 -1
+172 359 1
+295 359 1
+383 359 -1
+726 359 1
+727 359 -1
+3409 359 -1
+3410 359 -1
+3411 359 -1
+3412 359 -1
+3413 359 -1
+3414 359 -1
+3415 359 -1
+3416 359 -1
+7935 359 38
+168 360 -1
+173 360 1
+296 360 1
+384 360 -1
+727 360 1
+728 360 -1
+3417 360 -1
+3418 360 -1
+3419 360 -1
+3420 360 -1
+3421 360 -1
+3422 360 -1
+3423 360 -1
+3424 360 -1
+7936 360 38
+169 361 -1
+230 361 1
+265 361 -1
+297 361 1
+729 361 -1
+744 361 1
+3425 361 -1
+3426 361 -1
+3427 361 -1
+3428 361 -1
+3429 361 -1
+3430 361 -1
+3431 361 -1
+3432 361 -1
+7937 361 38
+170 362 -1
+231 362 1
+266 362 -1
+298 362 1
+729 362 1
+730 362 -1
+3433 362 -1
+3434 362 -1
+3435 362 -1
+3436 362 -1
+3437 362 -1
+3438 362 -1
+3439 362 -1
+3440 362 -1
+7938 362 38
+171 363 -1
+232 363 1
+267 363 -1
+299 363 1
+730 363 1
+731 363 -1
+3441 363 -1
+3442 363 -1
+3443 363 -1
+3444 363 -1
+3445 363 -1
+3446 363 -1
+3447 363 -1
+3448 363 -1
+7939 363 38
+172 364 -1
+217 364 1
+268 364 -1
+300 364 1
+731 364 1
+732 364 -1
+3449 364 -1
+3450 364 -1
+3451 364 -1
+3452 364 -1
+3453 364 -1
+3454 364 -1
+3455 364 -1
+3456 364 -1
+7940 364 38
+173 365 -1
+218 365 1
+269 365 -1
+301 365 1
+732 365 1
+733 365 -1
+3457 365 -1
+3458 365 -1
+3459 365 -1
+3460 365 -1
+3461 365 -1
+3462 365 -1
+3463 365 -1
+3464 365 -1
+7941 365 38
+174 366 -1
+219 366 1
+270 366 -1
+302 366 1
+733 366 1
+734 366 -1
+3465 366 -1
+3466 366 -1
+3467 366 -1
+3468 366 -1
+3469 366 -1
+3470 366 -1
+3471 366 -1
+3472 366 -1
+7942 366 38
+175 367 -1
+220 367 1
+271 367 -1
+303 367 1
+734 367 1
+735 367 -1
+3473 367 -1
+3474 367 -1
+3475 367 -1
+3476 367 -1
+3477 367 -1
+3478 367 -1
+3479 367 -1
+3480 367 -1
+7943 367 38
+176 368 -1
+221 368 1
+272 368 -1
+304 368 1
+735 368 1
+736 368 -1
+3481 368 -1
+3482 368 -1
+3483 368 -1
+3484 368 -1
+3485 368 -1
+3486 368 -1
+3487 368 -1
+3488 368 -1
+7944 368 38
+177 369 -1
+222 369 1
+273 369 -1
+305 369 1
+736 369 1
+737 369 -1
+3489 369 -1
+3490 369 -1
+3491 369 -1
+3492 369 -1
+3493 369 -1
+3494 369 -1
+3495 369 -1
+3496 369 -1
+7945 369 38
+178 370 -1
+223 370 1
+274 370 -1
+306 370 1
+737 370 1
+738 370 -1
+3497 370 -1
+3498 370 -1
+3499 370 -1
+3500 370 -1
+3501 370 -1
+3502 370 -1
+3503 370 -1
+3504 370 -1
+7946 370 38
+179 371 -1
+224 371 1
+275 371 -1
+307 371 1
+738 371 1
+739 371 -1
+3505 371 -1
+3506 371 -1
+3507 371 -1
+3508 371 -1
+3509 371 -1
+3510 371 -1
+3511 371 -1
+3512 371 -1
+7947 371 38
+180 372 -1
+225 372 1
+276 372 -1
+308 372 1
+739 372 1
+740 372 -1
+3513 372 -1
+3514 372 -1
+3515 372 -1
+3516 372 -1
+3517 372 -1
+3518 372 -1
+3519 372 -1
+3520 372 -1
+7948 372 38
+181 373 -1
+226 373 1
+277 373 -1
+309 373 1
+740 373 1
+741 373 -1
+3521 373 -1
+3522 373 -1
+3523 373 -1
+3524 373 -1
+3525 373 -1
+3526 373 -1
+3527 373 -1
+3528 373 -1
+7949 373 38
+182 374 -1
+227 374 1
+278 374 -1
+310 374 1
+741 374 1
+742 374 -1
+3529 374 -1
+3530 374 -1
+3531 374 -1
+3532 374 -1
+3533 374 -1
+3534 374 -1
+3535 374 -1
+3536 374 -1
+7950 374 38
+183 375 -1
+228 375 1
+279 375 -1
+311 375 1
+742 375 1
+743 375 -1
+3537 375 -1
+3538 375 -1
+3539 375 -1
+3540 375 -1
+3541 375 -1
+3542 375 -1
+3543 375 -1
+3544 375 -1
+7951 375 38
+184 376 -1
+229 376 1
+280 376 -1
+312 376 1
+743 376 1
+744 376 -1
+3545 376 -1
+3546 376 -1
+3547 376 -1
+3548 376 -1
+3549 376 -1
+3550 376 -1
+3551 376 -1
+3552 376 -1
+7952 376 38
+185 377 -1
+206 377 1
+281 377 -1
+313 377 1
+745 377 -1
+760 377 1
+3553 377 -1
+3554 377 -1
+3555 377 -1
+3556 377 -1
+3557 377 -1
+3558 377 -1
+3559 377 -1
+3560 377 -1
+7953 377 38
+186 378 -1
+207 378 1
+282 378 -1
+314 378 1
+745 378 1
+746 378 -1
+3561 378 -1
+3562 378 -1
+3563 378 -1
+3564 378 -1
+3565 378 -1
+3566 378 -1
+3567 378 -1
+3568 378 -1
+7954 378 38
+187 379 -1
+208 379 1
+283 379 -1
+315 379 1
+746 379 1
+747 379 -1
+3569 379 -1
+3570 379 -1
+3571 379 -1
+3572 379 -1
+3573 379 -1
+3574 379 -1
+3575 379 -1
+3576 379 -1
+7955 379 38
+188 380 -1
+209 380 1
+284 380 -1
+316 380 1
+747 380 1
+748 380 -1
+3577 380 -1
+3578 380 -1
+3579 380 -1
+3580 380 -1
+3581 380 -1
+3582 380 -1
+3583 380 -1
+3584 380 -1
+7956 380 38
+189 381 -1
+210 381 1
+285 381 -1
+317 381 1
+748 381 1
+749 381 -1
+3585 381 -1
+3586 381 -1
+3587 381 -1
+3588 381 -1
+3589 381 -1
+3590 381 -1
+3591 381 -1
+3592 381 -1
+7957 381 38
+190 382 -1
+211 382 1
+286 382 -1
+318 382 1
+749 382 1
+750 382 -1
+3593 382 -1
+3594 382 -1
+3595 382 -1
+3596 382 -1
+3597 382 -1
+3598 382 -1
+3599 382 -1
+3600 382 -1
+7958 382 38
+191 383 -1
+212 383 1
+287 383 -1
+319 383 1
+750 383 1
+751 383 -1
+3601 383 -1
+3602 383 -1
+3603 383 -1
+3604 383 -1
+3605 383 -1
+3606 383 -1
+3607 383 -1
+3608 383 -1
+7959 383 38
+192 384 -1
+213 384 1
+288 384 -1
+320 384 1
+751 384 1
+752 384 -1
+3609 384 -1
+3610 384 -1
+3611 384 -1
+3612 384 -1
+3613 384 -1
+3614 384 -1
+3615 384 -1
+3616 384 -1
+7960 384 38
+193 385 -1
+214 385 1
+289 385 -1
+321 385 1
+752 385 1
+753 385 -1
+3617 385 -1
+3618 385 -1
+3619 385 -1
+3620 385 -1
+3621 385 -1
+3622 385 -1
+3623 385 -1
+3624 385 -1
+7961 385 38
+194 386 -1
+215 386 1
+290 386 -1
+322 386 1
+753 386 1
+754 386 -1
+3625 386 -1
+3626 386 -1
+3627 386 -1
+3628 386 -1
+3629 386 -1
+3630 386 -1
+3631 386 -1
+3632 386 -1
+7962 386 38
+195 387 -1
+216 387 1
+291 387 -1
+323 387 1
+754 387 1
+755 387 -1
+3633 387 -1
+3634 387 -1
+3635 387 -1
+3636 387 -1
+3637 387 -1
+3638 387 -1
+3639 387 -1
+3640 387 -1
+7963 387 38
+196 388 -1
+201 388 1
+292 388 -1
+324 388 1
+755 388 1
+756 388 -1
+3641 388 -1
+3642 388 -1
+3643 388 -1
+3644 388 -1
+3645 388 -1
+3646 388 -1
+3647 388 -1
+3648 388 -1
+7964 388 38
+197 389 -1
+202 389 1
+293 389 -1
+325 389 1
+756 389 1
+757 389 -1
+3649 389 -1
+3650 389 -1
+3651 389 -1
+3652 389 -1
+3653 389 -1
+3654 389 -1
+3655 389 -1
+3656 389 -1
+7965 389 38
+198 390 -1
+203 390 1
+294 390 -1
+326 390 1
+757 390 1
+758 390 -1
+3657 390 -1
+3658 390 -1
+3659 390 -1
+3660 390 -1
+3661 390 -1
+3662 390 -1
+3663 390 -1
+3664 390 -1
+7966 390 38
+199 391 -1
+204 391 1
+295 391 -1
+327 391 1
+758 391 1
+759 391 -1
+3665 391 -1
+3666 391 -1
+3667 391 -1
+3668 391 -1
+3669 391 -1
+3670 391 -1
+3671 391 -1
+3672 391 -1
+7967 391 38
+200 392 -1
+205 392 1
+296 392 -1
+328 392 1
+759 392 1
+760 392 -1
+3673 392 -1
+3674 392 -1
+3675 392 -1
+3676 392 -1
+3677 392 -1
+3678 392 -1
+3679 392 -1
+3680 392 -1
+7968 392 38
+201 393 -1
+262 393 1
+297 393 -1
+329 393 1
+761 393 -1
+776 393 1
+3681 393 -1
+3682 393 -1
+3683 393 -1
+3684 393 -1
+3685 393 -1
+3686 393 -1
+3687 393 -1
+3688 393 -1
+7969 393 38
+202 394 -1
+263 394 1
+298 394 -1
+330 394 1
+761 394 1
+762 394 -1
+3689 394 -1
+3690 394 -1
+3691 394 -1
+3692 394 -1
+3693 394 -1
+3694 394 -1
+3695 394 -1
+3696 394 -1
+7970 394 38
+203 395 -1
+264 395 1
+299 395 -1
+331 395 1
+762 395 1
+763 395 -1
+3697 395 -1
+3698 395 -1
+3699 395 -1
+3700 395 -1
+3701 395 -1
+3702 395 -1
+3703 395 -1
+3704 395 -1
+7971 395 38
+204 396 -1
+249 396 1
+300 396 -1
+332 396 1
+763 396 1
+764 396 -1
+3705 396 -1
+3706 396 -1
+3707 396 -1
+3708 396 -1
+3709 396 -1
+3710 396 -1
+3711 396 -1
+3712 396 -1
+7972 396 38
+205 397 -1
+250 397 1
+301 397 -1
+333 397 1
+764 397 1
+765 397 -1
+3713 397 -1
+3714 397 -1
+3715 397 -1
+3716 397 -1
+3717 397 -1
+3718 397 -1
+3719 397 -1
+3720 397 -1
+7973 397 38
+206 398 -1
+251 398 1
+302 398 -1
+334 398 1
+765 398 1
+766 398 -1
+3721 398 -1
+3722 398 -1
+3723 398 -1
+3724 398 -1
+3725 398 -1
+3726 398 -1
+3727 398 -1
+3728 398 -1
+7974 398 38
+207 399 -1
+252 399 1
+303 399 -1
+335 399 1
+766 399 1
+767 399 -1
+3729 399 -1
+3730 399 -1
+3731 399 -1
+3732 399 -1
+3733 399 -1
+3734 399 -1
+3735 399 -1
+3736 399 -1
+7975 399 38
+208 400 -1
+253 400 1
+304 400 -1
+336 400 1
+767 400 1
+768 400 -1
+3737 400 -1
+3738 400 -1
+3739 400 -1
+3740 400 -1
+3741 400 -1
+3742 400 -1
+3743 400 -1
+3744 400 -1
+7976 400 38
+209 401 -1
+254 401 1
+305 401 -1
+337 401 1
+768 401 1
+769 401 -1
+3745 401 -1
+3746 401 -1
+3747 401 -1
+3748 401 -1
+3749 401 -1
+3750 401 -1
+3751 401 -1
+3752 401 -1
+7977 401 38
+210 402 -1
+255 402 1
+306 402 -1
+338 402 1
+769 402 1
+770 402 -1
+3753 402 -1
+3754 402 -1
+3755 402 -1
+3756 402 -1
+3757 402 -1
+3758 402 -1
+3759 402 -1
+3760 402 -1
+7978 402 38
+211 403 -1
+256 403 1
+307 403 -1
+339 403 1
+770 403 1
+771 403 -1
+3761 403 -1
+3762 403 -1
+3763 403 -1
+3764 403 -1
+3765 403 -1
+3766 403 -1
+3767 403 -1
+3768 403 -1
+7979 403 38
+212 404 -1
+257 404 1
+308 404 -1
+340 404 1
+771 404 1
+772 404 -1
+3769 404 -1
+3770 404 -1
+3771 404 -1
+3772 404 -1
+3773 404 -1
+3774 404 -1
+3775 404 -1
+3776 404 -1
+7980 404 38
+213 405 -1
+258 405 1
+309 405 -1
+341 405 1
+772 405 1
+773 405 -1
+3777 405 -1
+3778 405 -1
+3779 405 -1
+3780 405 -1
+3781 405 -1
+3782 405 -1
+3783 405 -1
+3784 405 -1
+7981 405 38
+214 406 -1
+259 406 1
+310 406 -1
+342 406 1
+773 406 1
+774 406 -1
+3785 406 -1
+3786 406 -1
+3787 406 -1
+3788 406 -1
+3789 406 -1
+3790 406 -1
+3791 406 -1
+3792 406 -1
+7982 406 38
+215 407 -1
+260 407 1
+311 407 -1
+343 407 1
+774 407 1
+775 407 -1
+3793 407 -1
+3794 407 -1
+3795 407 -1
+3796 407 -1
+3797 407 -1
+3798 407 -1
+3799 407 -1
+3800 407 -1
+7983 407 38
+216 408 -1
+261 408 1
+312 408 -1
+344 408 1
+775 408 1
+776 408 -1
+3801 408 -1
+3802 408 -1
+3803 408 -1
+3804 408 -1
+3805 408 -1
+3806 408 -1
+3807 408 -1
+3808 408 -1
+7984 408 38
+217 409 -1
+238 409 1
+313 409 -1
+345 409 1
+777 409 -1
+792 409 1
+3809 409 -1
+3810 409 -1
+3811 409 -1
+3812 409 -1
+3813 409 -1
+3814 409 -1
+3815 409 -1
+3816 409 -1
+7985 409 38
+218 410 -1
+239 410 1
+314 410 -1
+346 410 1
+777 410 1
+778 410 -1
+3817 410 -1
+3818 410 -1
+3819 410 -1
+3820 410 -1
+3821 410 -1
+3822 410 -1
+3823 410 -1
+3824 410 -1
+7986 410 38
+219 411 -1
+240 411 1
+315 411 -1
+347 411 1
+778 411 1
+779 411 -1
+3825 411 -1
+3826 411 -1
+3827 411 -1
+3828 411 -1
+3829 411 -1
+3830 411 -1
+3831 411 -1
+3832 411 -1
+7987 411 38
+220 412 -1
+241 412 1
+316 412 -1
+348 412 1
+779 412 1
+780 412 -1
+3833 412 -1
+3834 412 -1
+3835 412 -1
+3836 412 -1
+3837 412 -1
+3838 412 -1
+3839 412 -1
+3840 412 -1
+7988 412 38
+221 413 -1
+242 413 1
+317 413 -1
+349 413 1
+780 413 1
+781 413 -1
+3841 413 -1
+3842 413 -1
+3843 413 -1
+3844 413 -1
+3845 413 -1
+3846 413 -1
+3847 413 -1
+3848 413 -1
+7989 413 38
+222 414 -1
+243 414 1
+318 414 -1
+350 414 1
+781 414 1
+782 414 -1
+3849 414 -1
+3850 414 -1
+3851 414 -1
+3852 414 -1
+3853 414 -1
+3854 414 -1
+3855 414 -1
+3856 414 -1
+7990 414 38
+223 415 -1
+244 415 1
+319 415 -1
+351 415 1
+782 415 1
+783 415 -1
+3857 415 -1
+3858 415 -1
+3859 415 -1
+3860 415 -1
+3861 415 -1
+3862 415 -1
+3863 415 -1
+3864 415 -1
+7991 415 38
+224 416 -1
+245 416 1
+320 416 -1
+352 416 1
+783 416 1
+784 416 -1
+3865 416 -1
+3866 416 -1
+3867 416 -1
+3868 416 -1
+3869 416 -1
+3870 416 -1
+3871 416 -1
+3872 416 -1
+7992 416 38
+225 417 -1
+246 417 1
+321 417 -1
+353 417 1
+784 417 1
+785 417 -1
+3873 417 -1
+3874 417 -1
+3875 417 -1
+3876 417 -1
+3877 417 -1
+3878 417 -1
+3879 417 -1
+3880 417 -1
+7993 417 38
+226 418 -1
+247 418 1
+322 418 -1
+354 418 1
+785 418 1
+786 418 -1
+3881 418 -1
+3882 418 -1
+3883 418 -1
+3884 418 -1
+3885 418 -1
+3886 418 -1
+3887 418 -1
+3888 418 -1
+7994 418 38
+227 419 -1
+248 419 1
+323 419 -1
+355 419 1
+786 419 1
+787 419 -1
+3889 419 -1
+3890 419 -1
+3891 419 -1
+3892 419 -1
+3893 419 -1
+3894 419 -1
+3895 419 -1
+3896 419 -1
+7995 419 38
+228 420 -1
+233 420 1
+324 420 -1
+356 420 1
+787 420 1
+788 420 -1
+3897 420 -1
+3898 420 -1
+3899 420 -1
+3900 420 -1
+3901 420 -1
+3902 420 -1
+3903 420 -1
+3904 420 -1
+7996 420 38
+229 421 -1
+234 421 1
+325 421 -1
+357 421 1
+788 421 1
+789 421 -1
+3905 421 -1
+3906 421 -1
+3907 421 -1
+3908 421 -1
+3909 421 -1
+3910 421 -1
+3911 421 -1
+3912 421 -1
+7997 421 38
+230 422 -1
+235 422 1
+326 422 -1
+358 422 1
+789 422 1
+790 422 -1
+3913 422 -1
+3914 422 -1
+3915 422 -1
+3916 422 -1
+3917 422 -1
+3918 422 -1
+3919 422 -1
+3920 422 -1
+7998 422 38
+231 423 -1
+236 423 1
+327 423 -1
+359 423 1
+790 423 1
+791 423 -1
+3921 423 -1
+3922 423 -1
+3923 423 -1
+3924 423 -1
+3925 423 -1
+3926 423 -1
+3927 423 -1
+3928 423 -1
+7999 423 38
+232 424 -1
+237 424 1
+328 424 -1
+360 424 1
+791 424 1
+792 424 -1
+3929 424 -1
+3930 424 -1
+3931 424 -1
+3932 424 -1
+3933 424 -1
+3934 424 -1
+3935 424 -1
+3936 424 -1
+8000 424 38
+158 425 1
+233 425 -1
+329 425 -1
+361 425 1
+793 425 -1
+808 425 1
+3937 425 -1
+3938 425 -1
+3939 425 -1
+3940 425 -1
+3941 425 -1
+3942 425 -1
+3943 425 -1
+3944 425 -1
+8001 425 38
+159 426 1
+234 426 -1
+330 426 -1
+362 426 1
+793 426 1
+794 426 -1
+3945 426 -1
+3946 426 -1
+3947 426 -1
+3948 426 -1
+3949 426 -1
+3950 426 -1
+3951 426 -1
+3952 426 -1
+8002 426 38
+160 427 1
+235 427 -1
+331 427 -1
+363 427 1
+794 427 1
+795 427 -1
+3953 427 -1
+3954 427 -1
+3955 427 -1
+3956 427 -1
+3957 427 -1
+3958 427 -1
+3959 427 -1
+3960 427 -1
+8003 427 38
+161 428 1
+236 428 -1
+332 428 -1
+364 428 1
+795 428 1
+796 428 -1
+3961 428 -1
+3962 428 -1
+3963 428 -1
+3964 428 -1
+3965 428 -1
+3966 428 -1
+3967 428 -1
+3968 428 -1
+8004 428 38
+162 429 1
+237 429 -1
+333 429 -1
+365 429 1
+796 429 1
+797 429 -1
+3969 429 -1
+3970 429 -1
+3971 429 -1
+3972 429 -1
+3973 429 -1
+3974 429 -1
+3975 429 -1
+3976 429 -1
+8005 429 38
+163 430 1
+238 430 -1
+334 430 -1
+366 430 1
+797 430 1
+798 430 -1
+3977 430 -1
+3978 430 -1
+3979 430 -1
+3980 430 -1
+3981 430 -1
+3982 430 -1
+3983 430 -1
+3984 430 -1
+8006 430 38
+164 431 1
+239 431 -1
+335 431 -1
+367 431 1
+798 431 1
+799 431 -1
+3985 431 -1
+3986 431 -1
+3987 431 -1
+3988 431 -1
+3989 431 -1
+3990 431 -1
+3991 431 -1
+3992 431 -1
+8007 431 38
+165 432 1
+240 432 -1
+336 432 -1
+368 432 1
+799 432 1
+800 432 -1
+3993 432 -1
+3994 432 -1
+3995 432 -1
+3996 432 -1
+3997 432 -1
+3998 432 -1
+3999 432 -1
+4000 432 -1
+8008 432 38
+166 433 1
+241 433 -1
+337 433 -1
+369 433 1
+800 433 1
+801 433 -1
+4001 433 -1
+4002 433 -1
+4003 433 -1
+4004 433 -1
+4005 433 -1
+4006 433 -1
+4007 433 -1
+4008 433 -1
+8009 433 38
+167 434 1
+242 434 -1
+338 434 -1
+370 434 1
+801 434 1
+802 434 -1
+4009 434 -1
+4010 434 -1
+4011 434 -1
+4012 434 -1
+4013 434 -1
+4014 434 -1
+4015 434 -1
+4016 434 -1
+8010 434 38
+168 435 1
+243 435 -1
+339 435 -1
+371 435 1
+802 435 1
+803 435 -1
+4017 435 -1
+4018 435 -1
+4019 435 -1
+4020 435 -1
+4021 435 -1
+4022 435 -1
+4023 435 -1
+4024 435 -1
+8011 435 38
+153 436 1
+244 436 -1
+340 436 -1
+372 436 1
+803 436 1
+804 436 -1
+4025 436 -1
+4026 436 -1
+4027 436 -1
+4028 436 -1
+4029 436 -1
+4030 436 -1
+4031 436 -1
+4032 436 -1
+8012 436 38
+154 437 1
+245 437 -1
+341 437 -1
+373 437 1
+804 437 1
+805 437 -1
+4033 437 -1
+4034 437 -1
+4035 437 -1
+4036 437 -1
+4037 437 -1
+4038 437 -1
+4039 437 -1
+4040 437 -1
+8013 437 38
+155 438 1
+246 438 -1
+342 438 -1
+374 438 1
+805 438 1
+806 438 -1
+4041 438 -1
+4042 438 -1
+4043 438 -1
+4044 438 -1
+4045 438 -1
+4046 438 -1
+4047 438 -1
+4048 438 -1
+8014 438 38
+156 439 1
+247 439 -1
+343 439 -1
+375 439 1
+806 439 1
+807 439 -1
+4049 439 -1
+4050 439 -1
+4051 439 -1
+4052 439 -1
+4053 439 -1
+4054 439 -1
+4055 439 -1
+4056 439 -1
+8015 439 38
+157 440 1
+248 440 -1
+344 440 -1
+376 440 1
+807 440 1
+808 440 -1
+4057 440 -1
+4058 440 -1
+4059 440 -1
+4060 440 -1
+4061 440 -1
+4062 440 -1
+4063 440 -1
+4064 440 -1
+8016 440 38
+150 441 1
+249 441 -1
+345 441 -1
+377 441 1
+809 441 -1
+824 441 1
+4065 441 -1
+4066 441 -1
+4067 441 -1
+4068 441 -1
+4069 441 -1
+4070 441 -1
+4071 441 -1
+4072 441 -1
+8017 441 38
+151 442 1
+250 442 -1
+346 442 -1
+378 442 1
+809 442 1
+810 442 -1
+4073 442 -1
+4074 442 -1
+4075 442 -1
+4076 442 -1
+4077 442 -1
+4078 442 -1
+4079 442 -1
+4080 442 -1
+8018 442 38
+152 443 1
+251 443 -1
+347 443 -1
+379 443 1
+810 443 1
+811 443 -1
+4081 443 -1
+4082 443 -1
+4083 443 -1
+4084 443 -1
+4085 443 -1
+4086 443 -1
+4087 443 -1
+4088 443 -1
+8019 443 38
+137 444 1
+252 444 -1
+348 444 -1
+380 444 1
+811 444 1
+812 444 -1
+4089 444 -1
+4090 444 -1
+4091 444 -1
+4092 444 -1
+4093 444 -1
+4094 444 -1
+4095 444 -1
+4096 444 -1
+8020 444 38
+138 445 1
+253 445 -1
+349 445 -1
+381 445 1
+812 445 1
+813 445 -1
+4097 445 -1
+4098 445 -1
+4099 445 -1
+4100 445 -1
+4101 445 -1
+4102 445 -1
+4103 445 -1
+4104 445 -1
+8021 445 38
+139 446 1
+254 446 -1
+350 446 -1
+382 446 1
+813 446 1
+814 446 -1
+4105 446 -1
+4106 446 -1
+4107 446 -1
+4108 446 -1
+4109 446 -1
+4110 446 -1
+4111 446 -1
+4112 446 -1
+8022 446 38
+140 447 1
+255 447 -1
+351 447 -1
+383 447 1
+814 447 1
+815 447 -1
+4113 447 -1
+4114 447 -1
+4115 447 -1
+4116 447 -1
+4117 447 -1
+4118 447 -1
+4119 447 -1
+4120 447 -1
+8023 447 38
+141 448 1
+256 448 -1
+352 448 -1
+384 448 1
+815 448 1
+816 448 -1
+4121 448 -1
+4122 448 -1
+4123 448 -1
+4124 448 -1
+4125 448 -1
+4126 448 -1
+4127 448 -1
+4128 448 -1
+8024 448 38
+142 449 1
+257 449 -1
+353 449 -1
+385 449 1
+816 449 1
+817 449 -1
+4129 449 -1
+4130 449 -1
+4131 449 -1
+4132 449 -1
+4133 449 -1
+4134 449 -1
+4135 449 -1
+4136 449 -1
+8025 449 38
+143 450 1
+258 450 -1
+354 450 -1
+386 450 1
+817 450 1
+818 450 -1
+4137 450 -1
+4138 450 -1
+4139 450 -1
+4140 450 -1
+4141 450 -1
+4142 450 -1
+4143 450 -1
+4144 450 -1
+8026 450 38
+144 451 1
+259 451 -1
+355 451 -1
+387 451 1
+818 451 1
+819 451 -1
+4145 451 -1
+4146 451 -1
+4147 451 -1
+4148 451 -1
+4149 451 -1
+4150 451 -1
+4151 451 -1
+4152 451 -1
+8027 451 38
+145 452 1
+260 452 -1
+356 452 -1
+388 452 1
+819 452 1
+820 452 -1
+4153 452 -1
+4154 452 -1
+4155 452 -1
+4156 452 -1
+4157 452 -1
+4158 452 -1
+4159 452 -1
+4160 452 -1
+8028 452 38
+146 453 1
+261 453 -1
+357 453 -1
+389 453 1
+820 453 1
+821 453 -1
+4161 453 -1
+4162 453 -1
+4163 453 -1
+4164 453 -1
+4165 453 -1
+4166 453 -1
+4167 453 -1
+4168 453 -1
+8029 453 38
+147 454 1
+262 454 -1
+358 454 -1
+390 454 1
+821 454 1
+822 454 -1
+4169 454 -1
+4170 454 -1
+4171 454 -1
+4172 454 -1
+4173 454 -1
+4174 454 -1
+4175 454 -1
+4176 454 -1
+8030 454 38
+148 455 1
+263 455 -1
+359 455 -1
+391 455 1
+822 455 1
+823 455 -1
+4177 455 -1
+4178 455 -1
+4179 455 -1
+4180 455 -1
+4181 455 -1
+4182 455 -1
+4183 455 -1
+4184 455 -1
+8031 455 38
+149 456 1
+264 456 -1
+360 456 -1
+392 456 1
+823 456 1
+824 456 -1
+4185 456 -1
+4186 456 -1
+4187 456 -1
+4188 456 -1
+4189 456 -1
+4190 456 -1
+4191 456 -1
+4192 456 -1
+8032 456 38
+265 457 1
+269 457 1
+273 457 1
+277 457 1
+314 457 1
+318 457 1
+322 457 1
+326 457 1
+331 457 1
+335 457 1
+339 457 1
+343 457 1
+380 457 1
+384 457 1
+388 457 1
+392 457 1
+825 457 -1
+828 457 1
+4193 457 -1
+4194 457 -1
+4195 457 -1
+4196 457 -1
+8033 457 38
+266 458 1
+270 458 1
+274 458 1
+278 458 1
+315 458 1
+319 458 1
+323 458 1
+327 458 1
+332 458 1
+336 458 1
+340 458 1
+344 458 1
+377 458 1
+381 458 1
+385 458 1
+389 458 1
+825 458 1
+826 458 -1
+4197 458 -1
+4198 458 -1
+4199 458 -1
+4200 458 -1
+8034 458 38
+267 459 1
+271 459 1
+275 459 1
+279 459 1
+316 459 1
+320 459 1
+324 459 1
+328 459 1
+329 459 1
+333 459 1
+337 459 1
+341 459 1
+378 459 1
+382 459 1
+386 459 1
+390 459 1
+826 459 1
+827 459 -1
+4201 459 -1
+4202 459 -1
+4203 459 -1
+4204 459 -1
+8035 459 38
+268 460 1
+272 460 1
+276 460 1
+280 460 1
+313 460 1
+317 460 1
+321 460 1
+325 460 1
+330 460 1
+334 460 1
+338 460 1
+342 460 1
+379 460 1
+383 460 1
+387 460 1
+391 460 1
+827 460 1
+828 460 -1
+4205 460 -1
+4206 460 -1
+4207 460 -1
+4208 460 -1
+8036 460 38
+281 461 1
+285 461 1
+289 461 1
+293 461 1
+298 461 1
+302 461 1
+306 461 1
+310 461 1
+347 461 1
+351 461 1
+355 461 1
+359 461 1
+364 461 1
+368 461 1
+372 461 1
+376 461 1
+829 461 -1
+832 461 1
+4209 461 -1
+4210 461 -1
+4211 461 -1
+4212 461 -1
+8037 461 38
+282 462 1
+286 462 1
+290 462 1
+294 462 1
+299 462 1
+303 462 1
+307 462 1
+311 462 1
+348 462 1
+352 462 1
+356 462 1
+360 462 1
+361 462 1
+365 462 1
+369 462 1
+373 462 1
+829 462 1
+830 462 -1
+4213 462 -1
+4214 462 -1
+4215 462 -1
+4216 462 -1
+8038 462 38
+283 463 1
+287 463 1
+291 463 1
+295 463 1
+300 463 1
+304 463 1
+308 463 1
+312 463 1
+345 463 1
+349 463 1
+353 463 1
+357 463 1
+362 463 1
+366 463 1
+370 463 1
+374 463 1
+830 463 1
+831 463 -1
+4217 463 -1
+4218 463 -1
+4219 463 -1
+4220 463 -1
+8039 463 38
+284 464 1
+288 464 1
+292 464 1
+296 464 1
+297 464 1
+301 464 1
+305 464 1
+309 464 1
+346 464 1
+350 464 1
+354 464 1
+358 464 1
+363 464 1
+367 464 1
+371 464 1
+375 464 1
+831 464 1
+832 464 -1
+4221 464 -1
+4222 464 -1
+4223 464 -1
+4224 464 -1
+8040 464 38
+393 465 -1
+417 465 1
+425 465 -1
+433 465 -1
+441 465 -1
+449 465 -1
+4225 465 -1
+4226 465 -1
+4227 465 -1
+4228 465 -1
+8041 465 38
+394 466 -1
+418 466 1
+426 466 -1
+434 466 -1
+442 466 -1
+450 466 -1
+4229 466 -1
+4230 466 -1
+4231 466 -1
+4232 466 -1
+8042 466 38
+395 467 -1
+419 467 1
+427 467 -1
+435 467 -1
+443 467 -1
+451 467 -1
+4233 467 -1
+4234 467 -1
+4235 467 -1
+4236 467 -1
+8043 467 38
+396 468 -1
+420 468 1
+428 468 -1
+436 468 -1
+444 468 -1
+452 468 -1
+4237 468 -1
+4238 468 -1
+4239 468 -1
+4240 468 -1
+8044 468 38
+397 469 -1
+421 469 1
+429 469 -1
+437 469 -1
+445 469 -1
+453 469 -1
+4241 469 -1
+4242 469 -1
+4243 469 -1
+4244 469 -1
+8045 469 38
+398 470 -1
+422 470 1
+430 470 -1
+438 470 -1
+446 470 -1
+454 470 -1
+4245 470 -1
+4246 470 -1
+4247 470 -1
+4248 470 -1
+8046 470 38
+399 471 -1
+423 471 1
+431 471 -1
+439 471 -1
+447 471 -1
+455 471 -1
+4249 471 -1
+4250 471 -1
+4251 471 -1
+4252 471 -1
+8047 471 38
+400 472 -1
+424 472 1
+432 472 -1
+440 472 -1
+448 472 -1
+456 472 -1
+4253 472 -1
+4254 472 -1
+4255 472 -1
+4256 472 -1
+8048 472 38
+393 473 1
+401 473 -1
+457 473 -1
+465 473 -1
+473 473 -1
+481 473 -1
+4257 473 -1
+4258 473 -1
+4259 473 -1
+4260 473 -1
+8049 473 38
+394 474 1
+402 474 -1
+458 474 -1
+466 474 -1
+474 474 -1
+482 474 -1
+4261 474 -1
+4262 474 -1
+4263 474 -1
+4264 474 -1
+8050 474 38
+395 475 1
+403 475 -1
+459 475 -1
+467 475 -1
+475 475 -1
+483 475 -1
+4265 475 -1
+4266 475 -1
+4267 475 -1
+4268 475 -1
+8051 475 38
+396 476 1
+404 476 -1
+460 476 -1
+468 476 -1
+476 476 -1
+484 476 -1
+4269 476 -1
+4270 476 -1
+4271 476 -1
+4272 476 -1
+8052 476 38
+397 477 1
+405 477 -1
+461 477 -1
+469 477 -1
+477 477 -1
+485 477 -1
+4273 477 -1
+4274 477 -1
+4275 477 -1
+4276 477 -1
+8053 477 38
+398 478 1
+406 478 -1
+462 478 -1
+470 478 -1
+478 478 -1
+486 478 -1
+4277 478 -1
+4278 478 -1
+4279 478 -1
+4280 478 -1
+8054 478 38
+399 479 1
+407 479 -1
+463 479 -1
+471 479 -1
+479 479 -1
+487 479 -1
+4281 479 -1
+4282 479 -1
+4283 479 -1
+4284 479 -1
+8055 479 38
+400 480 1
+408 480 -1
+464 480 -1
+472 480 -1
+480 480 -1
+488 480 -1
+4285 480 -1
+4286 480 -1
+4287 480 -1
+4288 480 -1
+8056 480 38
+401 481 1
+409 481 -1
+489 481 -1
+497 481 -1
+505 481 -1
+513 481 -1
+4289 481 -1
+4290 481 -1
+4291 481 -1
+4292 481 -1
+8057 481 38
+402 482 1
+410 482 -1
+490 482 -1
+498 482 -1
+506 482 -1
+514 482 -1
+4293 482 -1
+4294 482 -1
+4295 482 -1
+4296 482 -1
+8058 482 38
+403 483 1
+411 483 -1
+491 483 -1
+499 483 -1
+507 483 -1
+515 483 -1
+4297 483 -1
+4298 483 -1
+4299 483 -1
+4300 483 -1
+8059 483 38
+404 484 1
+412 484 -1
+492 484 -1
+500 484 -1
+508 484 -1
+516 484 -1
+4301 484 -1
+4302 484 -1
+4303 484 -1
+4304 484 -1
+8060 484 38
+405 485 1
+413 485 -1
+493 485 -1
+501 485 -1
+509 485 -1
+517 485 -1
+4305 485 -1
+4306 485 -1
+4307 485 -1
+4308 485 -1
+8061 485 38
+406 486 1
+414 486 -1
+494 486 -1
+502 486 -1
+510 486 -1
+518 486 -1
+4309 486 -1
+4310 486 -1
+4311 486 -1
+4312 486 -1
+8062 486 38
+407 487 1
+415 487 -1
+495 487 -1
+503 487 -1
+511 487 -1
+519 487 -1
+4313 487 -1
+4314 487 -1
+4315 487 -1
+4316 487 -1
+8063 487 38
+408 488 1
+416 488 -1
+496 488 -1
+504 488 -1
+512 488 -1
+520 488 -1
+4317 488 -1
+4318 488 -1
+4319 488 -1
+4320 488 -1
+8064 488 38
+409 489 1
+417 489 -1
+521 489 -1
+529 489 -1
+537 489 -1
+545 489 -1
+4321 489 -1
+4322 489 -1
+4323 489 -1
+4324 489 -1
+8065 489 38
+410 490 1
+418 490 -1
+522 490 -1
+530 490 -1
+538 490 -1
+546 490 -1
+4325 490 -1
+4326 490 -1
+4327 490 -1
+4328 490 -1
+8066 490 38
+411 491 1
+419 491 -1
+523 491 -1
+531 491 -1
+539 491 -1
+547 491 -1
+4329 491 -1
+4330 491 -1
+4331 491 -1
+4332 491 -1
+8067 491 38
+412 492 1
+420 492 -1
+524 492 -1
+532 492 -1
+540 492 -1
+548 492 -1
+4333 492 -1
+4334 492 -1
+4335 492 -1
+4336 492 -1
+8068 492 38
+413 493 1
+421 493 -1
+525 493 -1
+533 493 -1
+541 493 -1
+549 493 -1
+4337 493 -1
+4338 493 -1
+4339 493 -1
+4340 493 -1
+8069 493 38
+414 494 1
+422 494 -1
+526 494 -1
+534 494 -1
+542 494 -1
+550 494 -1
+4341 494 -1
+4342 494 -1
+4343 494 -1
+4344 494 -1
+8070 494 38
+415 495 1
+423 495 -1
+527 495 -1
+535 495 -1
+543 495 -1
+551 495 -1
+4345 495 -1
+4346 495 -1
+4347 495 -1
+4348 495 -1
+8071 495 38
+416 496 1
+424 496 -1
+528 496 -1
+536 496 -1
+544 496 -1
+552 496 -1
+4349 496 -1
+4350 496 -1
+4351 496 -1
+4352 496 -1
+8072 496 38
+393 497 -1
+406 497 1
+553 497 -1
+561 497 -1
+569 497 -1
+577 497 -1
+4353 497 -1
+4354 497 -1
+4355 497 -1
+4356 497 -1
+8073 497 38
+394 498 -1
+407 498 1
+554 498 -1
+562 498 -1
+570 498 -1
+578 498 -1
+4357 498 -1
+4358 498 -1
+4359 498 -1
+4360 498 -1
+8074 498 38
+395 499 -1
+408 499 1
+555 499 -1
+563 499 -1
+571 499 -1
+579 499 -1
+4361 499 -1
+4362 499 -1
+4363 499 -1
+4364 499 -1
+8075 499 38
+396 500 -1
+401 500 1
+556 500 -1
+564 500 -1
+572 500 -1
+580 500 -1
+4365 500 -1
+4366 500 -1
+4367 500 -1
+4368 500 -1
+8076 500 38
+397 501 -1
+402 501 1
+557 501 -1
+565 501 -1
+573 501 -1
+581 501 -1
+4369 501 -1
+4370 501 -1
+4371 501 -1
+4372 501 -1
+8077 501 38
+398 502 -1
+403 502 1
+558 502 -1
+566 502 -1
+574 502 -1
+582 502 -1
+4373 502 -1
+4374 502 -1
+4375 502 -1
+4376 502 -1
+8078 502 38
+399 503 -1
+404 503 1
+559 503 -1
+567 503 -1
+575 503 -1
+583 503 -1
+4377 503 -1
+4378 503 -1
+4379 503 -1
+4380 503 -1
+8079 503 38
+400 504 -1
+405 504 1
+560 504 -1
+568 504 -1
+576 504 -1
+584 504 -1
+4381 504 -1
+4382 504 -1
+4383 504 -1
+4384 504 -1
+8080 504 38
+401 505 -1
+414 505 1
+585 505 -1
+593 505 -1
+601 505 -1
+609 505 -1
+4385 505 -1
+4386 505 -1
+4387 505 -1
+4388 505 -1
+8081 505 38
+402 506 -1
+415 506 1
+586 506 -1
+594 506 -1
+602 506 -1
+610 506 -1
+4389 506 -1
+4390 506 -1
+4391 506 -1
+4392 506 -1
+8082 506 38
+403 507 -1
+416 507 1
+587 507 -1
+595 507 -1
+603 507 -1
+611 507 -1
+4393 507 -1
+4394 507 -1
+4395 507 -1
+4396 507 -1
+8083 507 38
+404 508 -1
+409 508 1
+588 508 -1
+596 508 -1
+604 508 -1
+612 508 -1
+4397 508 -1
+4398 508 -1
+4399 508 -1
+4400 508 -1
+8084 508 38
+405 509 -1
+410 509 1
+589 509 -1
+597 509 -1
+605 509 -1
+613 509 -1
+4401 509 -1
+4402 509 -1
+4403 509 -1
+4404 509 -1
+8085 509 38
+406 510 -1
+411 510 1
+590 510 -1
+598 510 -1
+606 510 -1
+614 510 -1
+4405 510 -1
+4406 510 -1
+4407 510 -1
+4408 510 -1
+8086 510 38
+407 511 -1
+412 511 1
+591 511 -1
+599 511 -1
+607 511 -1
+615 511 -1
+4409 511 -1
+4410 511 -1
+4411 511 -1
+4412 511 -1
+8087 511 38
+408 512 -1
+413 512 1
+592 512 -1
+600 512 -1
+608 512 -1
+616 512 -1
+4413 512 -1
+4414 512 -1
+4415 512 -1
+4416 512 -1
+8088 512 38
+409 513 -1
+422 513 1
+617 513 -1
+625 513 -1
+633 513 -1
+641 513 -1
+4417 513 -1
+4418 513 -1
+4419 513 -1
+4420 513 -1
+8089 513 38
+410 514 -1
+423 514 1
+618 514 -1
+626 514 -1
+634 514 -1
+642 514 -1
+4421 514 -1
+4422 514 -1
+4423 514 -1
+4424 514 -1
+8090 514 38
+411 515 -1
+424 515 1
+619 515 -1
+627 515 -1
+635 515 -1
+643 515 -1
+4425 515 -1
+4426 515 -1
+4427 515 -1
+4428 515 -1
+8091 515 38
+412 516 -1
+417 516 1
+620 516 -1
+628 516 -1
+636 516 -1
+644 516 -1
+4429 516 -1
+4430 516 -1
+4431 516 -1
+4432 516 -1
+8092 516 38
+413 517 -1
+418 517 1
+621 517 -1
+629 517 -1
+637 517 -1
+645 517 -1
+4433 517 -1
+4434 517 -1
+4435 517 -1
+4436 517 -1
+8093 517 38
+414 518 -1
+419 518 1
+622 518 -1
+630 518 -1
+638 518 -1
+646 518 -1
+4437 518 -1
+4438 518 -1
+4439 518 -1
+4440 518 -1
+8094 518 38
+415 519 -1
+420 519 1
+623 519 -1
+631 519 -1
+639 519 -1
+647 519 -1
+4441 519 -1
+4442 519 -1
+4443 519 -1
+4444 519 -1
+8095 519 38
+416 520 -1
+421 520 1
+624 520 -1
+632 520 -1
+640 520 -1
+648 520 -1
+4445 520 -1
+4446 520 -1
+4447 520 -1
+4448 520 -1
+8096 520 38
+398 521 1
+417 521 -1
+649 521 -1
+657 521 -1
+665 521 -1
+673 521 -1
+4449 521 -1
+4450 521 -1
+4451 521 -1
+4452 521 -1
+8097 521 38
+399 522 1
+418 522 -1
+650 522 -1
+658 522 -1
+666 522 -1
+674 522 -1
+4453 522 -1
+4454 522 -1
+4455 522 -1
+4456 522 -1
+8098 522 38
+400 523 1
+419 523 -1
+651 523 -1
+659 523 -1
+667 523 -1
+675 523 -1
+4457 523 -1
+4458 523 -1
+4459 523 -1
+4460 523 -1
+8099 523 38
+393 524 1
+420 524 -1
+652 524 -1
+660 524 -1
+668 524 -1
+676 524 -1
+4461 524 -1
+4462 524 -1
+4463 524 -1
+4464 524 -1
+8100 524 38
+394 525 1
+421 525 -1
+653 525 -1
+661 525 -1
+669 525 -1
+677 525 -1
+4465 525 -1
+4466 525 -1
+4467 525 -1
+4468 525 -1
+8101 525 38
+395 526 1
+422 526 -1
+654 526 -1
+662 526 -1
+670 526 -1
+678 526 -1
+4469 526 -1
+4470 526 -1
+4471 526 -1
+4472 526 -1
+8102 526 38
+396 527 1
+423 527 -1
+655 527 -1
+663 527 -1
+671 527 -1
+679 527 -1
+4473 527 -1
+4474 527 -1
+4475 527 -1
+4476 527 -1
+8103 527 38
+397 528 1
+424 528 -1
+656 528 -1
+664 528 -1
+672 528 -1
+680 528 -1
+4477 528 -1
+4478 528 -1
+4479 528 -1
+4480 528 -1
+8104 528 38
+425 529 1
+433 529 1
+457 529 1
+465 529 1
+489 529 1
+497 529 1
+521 529 1
+529 529 1
+681 529 -1
+689 529 1
+4481 529 -1
+4482 529 -1
+4483 529 -1
+4484 529 -1
+8105 529 38
+426 530 1
+434 530 1
+458 530 1
+466 530 1
+490 530 1
+498 530 1
+522 530 1
+530 530 1
+682 530 -1
+690 530 1
+4485 530 -1
+4486 530 -1
+4487 530 -1
+4488 530 -1
+8106 530 38
+427 531 1
+435 531 1
+459 531 1
+467 531 1
+491 531 1
+499 531 1
+523 531 1
+531 531 1
+683 531 -1
+691 531 1
+4489 531 -1
+4490 531 -1
+4491 531 -1
+4492 531 -1
+8107 531 38
+428 532 1
+436 532 1
+460 532 1
+468 532 1
+492 532 1
+500 532 1
+524 532 1
+532 532 1
+684 532 -1
+692 532 1
+4493 532 -1
+4494 532 -1
+4495 532 -1
+4496 532 -1
+8108 532 38
+429 533 1
+437 533 1
+461 533 1
+469 533 1
+493 533 1
+501 533 1
+525 533 1
+533 533 1
+685 533 -1
+693 533 1
+4497 533 -1
+4498 533 -1
+4499 533 -1
+4500 533 -1
+8109 533 38
+430 534 1
+438 534 1
+462 534 1
+470 534 1
+494 534 1
+502 534 1
+526 534 1
+534 534 1
+686 534 -1
+694 534 1
+4501 534 -1
+4502 534 -1
+4503 534 -1
+4504 534 -1
+8110 534 38
+431 535 1
+439 535 1
+463 535 1
+471 535 1
+495 535 1
+503 535 1
+527 535 1
+535 535 1
+687 535 -1
+695 535 1
+4505 535 -1
+4506 535 -1
+4507 535 -1
+4508 535 -1
+8111 535 38
+432 536 1
+440 536 1
+464 536 1
+472 536 1
+496 536 1
+504 536 1
+528 536 1
+536 536 1
+688 536 -1
+696 536 1
+4509 536 -1
+4510 536 -1
+4511 536 -1
+4512 536 -1
+8112 536 38
+441 537 1
+449 537 1
+473 537 1
+481 537 1
+505 537 1
+513 537 1
+537 537 1
+545 537 1
+681 537 1
+689 537 -1
+4513 537 -1
+4514 537 -1
+4515 537 -1
+4516 537 -1
+8113 537 38
+442 538 1
+450 538 1
+474 538 1
+482 538 1
+506 538 1
+514 538 1
+538 538 1
+546 538 1
+682 538 1
+690 538 -1
+4517 538 -1
+4518 538 -1
+4519 538 -1
+4520 538 -1
+8114 538 38
+443 539 1
+451 539 1
+475 539 1
+483 539 1
+507 539 1
+515 539 1
+539 539 1
+547 539 1
+683 539 1
+691 539 -1
+4521 539 -1
+4522 539 -1
+4523 539 -1
+4524 539 -1
+8115 539 38
+444 540 1
+452 540 1
+476 540 1
+484 540 1
+508 540 1
+516 540 1
+540 540 1
+548 540 1
+684 540 1
+692 540 -1
+4525 540 -1
+4526 540 -1
+4527 540 -1
+4528 540 -1
+8116 540 38
+445 541 1
+453 541 1
+477 541 1
+485 541 1
+509 541 1
+517 541 1
+541 541 1
+549 541 1
+685 541 1
+693 541 -1
+4529 541 -1
+4530 541 -1
+4531 541 -1
+4532 541 -1
+8117 541 38
+446 542 1
+454 542 1
+478 542 1
+486 542 1
+510 542 1
+518 542 1
+542 542 1
+550 542 1
+686 542 1
+694 542 -1
+4533 542 -1
+4534 542 -1
+4535 542 -1
+4536 542 -1
+8118 542 38
+447 543 1
+455 543 1
+479 543 1
+487 543 1
+511 543 1
+519 543 1
+543 543 1
+551 543 1
+687 543 1
+695 543 -1
+4537 543 -1
+4538 543 -1
+4539 543 -1
+4540 543 -1
+8119 543 38
+448 544 1
+456 544 1
+480 544 1
+488 544 1
+512 544 1
+520 544 1
+544 544 1
+552 544 1
+688 544 1
+696 544 -1
+4541 544 -1
+4542 544 -1
+4543 544 -1
+4544 544 -1
+8120 544 38
+425 545 -1
+486 545 1
+553 545 1
+657 545 -1
+697 545 -1
+721 545 1
+4545 545 -1
+4546 545 -1
+4547 545 -1
+4548 545 -1
+4549 545 -1
+4550 545 -1
+4551 545 -1
+4552 545 -1
+8121 545 38
+426 546 -1
+487 546 1
+554 546 1
+658 546 -1
+698 546 -1
+722 546 1
+4553 546 -1
+4554 546 -1
+4555 546 -1
+4556 546 -1
+4557 546 -1
+4558 546 -1
+4559 546 -1
+4560 546 -1
+8122 546 38
+427 547 -1
+488 547 1
+555 547 1
+659 547 -1
+699 547 -1
+723 547 1
+4561 547 -1
+4562 547 -1
+4563 547 -1
+4564 547 -1
+4565 547 -1
+4566 547 -1
+4567 547 -1
+4568 547 -1
+8123 547 38
+428 548 -1
+473 548 1
+556 548 1
+660 548 -1
+700 548 -1
+724 548 1
+4569 548 -1
+4570 548 -1
+4571 548 -1
+4572 548 -1
+4573 548 -1
+4574 548 -1
+4575 548 -1
+4576 548 -1
+8124 548 38
+429 549 -1
+474 549 1
+557 549 1
+661 549 -1
+701 549 -1
+725 549 1
+4577 549 -1
+4578 549 -1
+4579 549 -1
+4580 549 -1
+4581 549 -1
+4582 549 -1
+4583 549 -1
+4584 549 -1
+8125 549 38
+430 550 -1
+475 550 1
+558 550 1
+662 550 -1
+702 550 -1
+726 550 1
+4585 550 -1
+4586 550 -1
+4587 550 -1
+4588 550 -1
+4589 550 -1
+4590 550 -1
+4591 550 -1
+4592 550 -1
+8126 550 38
+431 551 -1
+476 551 1
+559 551 1
+663 551 -1
+703 551 -1
+727 551 1
+4593 551 -1
+4594 551 -1
+4595 551 -1
+4596 551 -1
+4597 551 -1
+4598 551 -1
+4599 551 -1
+4600 551 -1
+8127 551 38
+432 552 -1
+477 552 1
+560 552 1
+664 552 -1
+704 552 -1
+728 552 1
+4601 552 -1
+4602 552 -1
+4603 552 -1
+4604 552 -1
+4605 552 -1
+4606 552 -1
+4607 552 -1
+4608 552 -1
+8128 552 38
+433 553 -1
+478 553 1
+561 553 1
+649 553 -1
+705 553 -1
+713 553 1
+4609 553 -1
+4610 553 -1
+4611 553 -1
+4612 553 -1
+4613 553 -1
+4614 553 -1
+4615 553 -1
+4616 553 -1
+8129 553 38
+434 554 -1
+479 554 1
+562 554 1
+650 554 -1
+706 554 -1
+714 554 1
+4617 554 -1
+4618 554 -1
+4619 554 -1
+4620 554 -1
+4621 554 -1
+4622 554 -1
+4623 554 -1
+4624 554 -1
+8130 554 38
+435 555 -1
+480 555 1
+563 555 1
+651 555 -1
+707 555 -1
+715 555 1
+4625 555 -1
+4626 555 -1
+4627 555 -1
+4628 555 -1
+4629 555 -1
+4630 555 -1
+4631 555 -1
+4632 555 -1
+8131 555 38
+436 556 -1
+481 556 1
+564 556 1
+652 556 -1
+708 556 -1
+716 556 1
+4633 556 -1
+4634 556 -1
+4635 556 -1
+4636 556 -1
+4637 556 -1
+4638 556 -1
+4639 556 -1
+4640 556 -1
+8132 556 38
+437 557 -1
+482 557 1
+565 557 1
+653 557 -1
+709 557 -1
+717 557 1
+4641 557 -1
+4642 557 -1
+4643 557 -1
+4644 557 -1
+4645 557 -1
+4646 557 -1
+4647 557 -1
+4648 557 -1
+8133 557 38
+438 558 -1
+483 558 1
+566 558 1
+654 558 -1
+710 558 -1
+718 558 1
+4649 558 -1
+4650 558 -1
+4651 558 -1
+4652 558 -1
+4653 558 -1
+4654 558 -1
+4655 558 -1
+4656 558 -1
+8134 558 38
+439 559 -1
+484 559 1
+567 559 1
+655 559 -1
+711 559 -1
+719 559 1
+4657 559 -1
+4658 559 -1
+4659 559 -1
+4660 559 -1
+4661 559 -1
+4662 559 -1
+4663 559 -1
+4664 559 -1
+8135 559 38
+440 560 -1
+485 560 1
+568 560 1
+656 560 -1
+712 560 -1
+720 560 1
+4665 560 -1
+4666 560 -1
+4667 560 -1
+4668 560 -1
+4669 560 -1
+4670 560 -1
+4671 560 -1
+4672 560 -1
+8136 560 38
+441 561 -1
+462 561 1
+569 561 1
+673 561 -1
+697 561 1
+713 561 -1
+4673 561 -1
+4674 561 -1
+4675 561 -1
+4676 561 -1
+4677 561 -1
+4678 561 -1
+4679 561 -1
+4680 561 -1
+8137 561 38
+442 562 -1
+463 562 1
+570 562 1
+674 562 -1
+698 562 1
+714 562 -1
+4681 562 -1
+4682 562 -1
+4683 562 -1
+4684 562 -1
+4685 562 -1
+4686 562 -1
+4687 562 -1
+4688 562 -1
+8138 562 38
+443 563 -1
+464 563 1
+571 563 1
+675 563 -1
+699 563 1
+715 563 -1
+4689 563 -1
+4690 563 -1
+4691 563 -1
+4692 563 -1
+4693 563 -1
+4694 563 -1
+4695 563 -1
+4696 563 -1
+8139 563 38
+444 564 -1
+465 564 1
+572 564 1
+676 564 -1
+700 564 1
+716 564 -1
+4697 564 -1
+4698 564 -1
+4699 564 -1
+4700 564 -1
+4701 564 -1
+4702 564 -1
+4703 564 -1
+4704 564 -1
+8140 564 38
+445 565 -1
+466 565 1
+573 565 1
+677 565 -1
+701 565 1
+717 565 -1
+4705 565 -1
+4706 565 -1
+4707 565 -1
+4708 565 -1
+4709 565 -1
+4710 565 -1
+4711 565 -1
+4712 565 -1
+8141 565 38
+446 566 -1
+467 566 1
+574 566 1
+678 566 -1
+702 566 1
+718 566 -1
+4713 566 -1
+4714 566 -1
+4715 566 -1
+4716 566 -1
+4717 566 -1
+4718 566 -1
+4719 566 -1
+4720 566 -1
+8142 566 38
+447 567 -1
+468 567 1
+575 567 1
+679 567 -1
+703 567 1
+719 567 -1
+4721 567 -1
+4722 567 -1
+4723 567 -1
+4724 567 -1
+4725 567 -1
+4726 567 -1
+4727 567 -1
+4728 567 -1
+8143 567 38
+448 568 -1
+469 568 1
+576 568 1
+680 568 -1
+704 568 1
+720 568 -1
+4729 568 -1
+4730 568 -1
+4731 568 -1
+4732 568 -1
+4733 568 -1
+4734 568 -1
+4735 568 -1
+4736 568 -1
+8144 568 38
+449 569 -1
+470 569 1
+577 569 1
+665 569 -1
+705 569 1
+721 569 -1
+4737 569 -1
+4738 569 -1
+4739 569 -1
+4740 569 -1
+4741 569 -1
+4742 569 -1
+4743 569 -1
+4744 569 -1
+8145 569 38
+450 570 -1
+471 570 1
+578 570 1
+666 570 -1
+706 570 1
+722 570 -1
+4745 570 -1
+4746 570 -1
+4747 570 -1
+4748 570 -1
+4749 570 -1
+4750 570 -1
+4751 570 -1
+4752 570 -1
+8146 570 38
+451 571 -1
+472 571 1
+579 571 1
+667 571 -1
+707 571 1
+723 571 -1
+4753 571 -1
+4754 571 -1
+4755 571 -1
+4756 571 -1
+4757 571 -1
+4758 571 -1
+4759 571 -1
+4760 571 -1
+8147 571 38
+452 572 -1
+457 572 1
+580 572 1
+668 572 -1
+708 572 1
+724 572 -1
+4761 572 -1
+4762 572 -1
+4763 572 -1
+4764 572 -1
+4765 572 -1
+4766 572 -1
+4767 572 -1
+4768 572 -1
+8148 572 38
+453 573 -1
+458 573 1
+581 573 1
+669 573 -1
+709 573 1
+725 573 -1
+4769 573 -1
+4770 573 -1
+4771 573 -1
+4772 573 -1
+4773 573 -1
+4774 573 -1
+4775 573 -1
+4776 573 -1
+8149 573 38
+454 574 -1
+459 574 1
+582 574 1
+670 574 -1
+710 574 1
+726 574 -1
+4777 574 -1
+4778 574 -1
+4779 574 -1
+4780 574 -1
+4781 574 -1
+4782 574 -1
+4783 574 -1
+4784 574 -1
+8150 574 38
+455 575 -1
+460 575 1
+583 575 1
+671 575 -1
+711 575 1
+727 575 -1
+4785 575 -1
+4786 575 -1
+4787 575 -1
+4788 575 -1
+4789 575 -1
+4790 575 -1
+4791 575 -1
+4792 575 -1
+8151 575 38
+456 576 -1
+461 576 1
+584 576 1
+672 576 -1
+712 576 1
+728 576 -1
+4793 576 -1
+4794 576 -1
+4795 576 -1
+4796 576 -1
+4797 576 -1
+4798 576 -1
+4799 576 -1
+4800 576 -1
+8152 576 38
+457 577 -1
+518 577 1
+553 577 -1
+585 577 1
+729 577 -1
+753 577 1
+4801 577 -1
+4802 577 -1
+4803 577 -1
+4804 577 -1
+4805 577 -1
+4806 577 -1
+4807 577 -1
+4808 577 -1
+8153 577 38
+458 578 -1
+519 578 1
+554 578 -1
+586 578 1
+730 578 -1
+754 578 1
+4809 578 -1
+4810 578 -1
+4811 578 -1
+4812 578 -1
+4813 578 -1
+4814 578 -1
+4815 578 -1
+4816 578 -1
+8154 578 38
+459 579 -1
+520 579 1
+555 579 -1
+587 579 1
+731 579 -1
+755 579 1
+4817 579 -1
+4818 579 -1
+4819 579 -1
+4820 579 -1
+4821 579 -1
+4822 579 -1
+4823 579 -1
+4824 579 -1
+8155 579 38
+460 580 -1
+505 580 1
+556 580 -1
+588 580 1
+732 580 -1
+756 580 1
+4825 580 -1
+4826 580 -1
+4827 580 -1
+4828 580 -1
+4829 580 -1
+4830 580 -1
+4831 580 -1
+4832 580 -1
+8156 580 38
+461 581 -1
+506 581 1
+557 581 -1
+589 581 1
+733 581 -1
+757 581 1
+4833 581 -1
+4834 581 -1
+4835 581 -1
+4836 581 -1
+4837 581 -1
+4838 581 -1
+4839 581 -1
+4840 581 -1
+8157 581 38
+462 582 -1
+507 582 1
+558 582 -1
+590 582 1
+734 582 -1
+758 582 1
+4841 582 -1
+4842 582 -1
+4843 582 -1
+4844 582 -1
+4845 582 -1
+4846 582 -1
+4847 582 -1
+4848 582 -1
+8158 582 38
+463 583 -1
+508 583 1
+559 583 -1
+591 583 1
+735 583 -1
+759 583 1
+4849 583 -1
+4850 583 -1
+4851 583 -1
+4852 583 -1
+4853 583 -1
+4854 583 -1
+4855 583 -1
+4856 583 -1
+8159 583 38
+464 584 -1
+509 584 1
+560 584 -1
+592 584 1
+736 584 -1
+760 584 1
+4857 584 -1
+4858 584 -1
+4859 584 -1
+4860 584 -1
+4861 584 -1
+4862 584 -1
+4863 584 -1
+4864 584 -1
+8160 584 38
+465 585 -1
+510 585 1
+561 585 -1
+593 585 1
+737 585 -1
+745 585 1
+4865 585 -1
+4866 585 -1
+4867 585 -1
+4868 585 -1
+4869 585 -1
+4870 585 -1
+4871 585 -1
+4872 585 -1
+8161 585 38
+466 586 -1
+511 586 1
+562 586 -1
+594 586 1
+738 586 -1
+746 586 1
+4873 586 -1
+4874 586 -1
+4875 586 -1
+4876 586 -1
+4877 586 -1
+4878 586 -1
+4879 586 -1
+4880 586 -1
+8162 586 38
+467 587 -1
+512 587 1
+563 587 -1
+595 587 1
+739 587 -1
+747 587 1
+4881 587 -1
+4882 587 -1
+4883 587 -1
+4884 587 -1
+4885 587 -1
+4886 587 -1
+4887 587 -1
+4888 587 -1
+8163 587 38
+468 588 -1
+513 588 1
+564 588 -1
+596 588 1
+740 588 -1
+748 588 1
+4889 588 -1
+4890 588 -1
+4891 588 -1
+4892 588 -1
+4893 588 -1
+4894 588 -1
+4895 588 -1
+4896 588 -1
+8164 588 38
+469 589 -1
+514 589 1
+565 589 -1
+597 589 1
+741 589 -1
+749 589 1
+4897 589 -1
+4898 589 -1
+4899 589 -1
+4900 589 -1
+4901 589 -1
+4902 589 -1
+4903 589 -1
+4904 589 -1
+8165 589 38
+470 590 -1
+515 590 1
+566 590 -1
+598 590 1
+742 590 -1
+750 590 1
+4905 590 -1
+4906 590 -1
+4907 590 -1
+4908 590 -1
+4909 590 -1
+4910 590 -1
+4911 590 -1
+4912 590 -1
+8166 590 38
+471 591 -1
+516 591 1
+567 591 -1
+599 591 1
+743 591 -1
+751 591 1
+4913 591 -1
+4914 591 -1
+4915 591 -1
+4916 591 -1
+4917 591 -1
+4918 591 -1
+4919 591 -1
+4920 591 -1
+8167 591 38
+472 592 -1
+517 592 1
+568 592 -1
+600 592 1
+744 592 -1
+752 592 1
+4921 592 -1
+4922 592 -1
+4923 592 -1
+4924 592 -1
+4925 592 -1
+4926 592 -1
+4927 592 -1
+4928 592 -1
+8168 592 38
+473 593 -1
+494 593 1
+569 593 -1
+601 593 1
+729 593 1
+745 593 -1
+4929 593 -1
+4930 593 -1
+4931 593 -1
+4932 593 -1
+4933 593 -1
+4934 593 -1
+4935 593 -1
+4936 593 -1
+8169 593 38
+474 594 -1
+495 594 1
+570 594 -1
+602 594 1
+730 594 1
+746 594 -1
+4937 594 -1
+4938 594 -1
+4939 594 -1
+4940 594 -1
+4941 594 -1
+4942 594 -1
+4943 594 -1
+4944 594 -1
+8170 594 38
+475 595 -1
+496 595 1
+571 595 -1
+603 595 1
+731 595 1
+747 595 -1
+4945 595 -1
+4946 595 -1
+4947 595 -1
+4948 595 -1
+4949 595 -1
+4950 595 -1
+4951 595 -1
+4952 595 -1
+8171 595 38
+476 596 -1
+497 596 1
+572 596 -1
+604 596 1
+732 596 1
+748 596 -1
+4953 596 -1
+4954 596 -1
+4955 596 -1
+4956 596 -1
+4957 596 -1
+4958 596 -1
+4959 596 -1
+4960 596 -1
+8172 596 38
+477 597 -1
+498 597 1
+573 597 -1
+605 597 1
+733 597 1
+749 597 -1
+4961 597 -1
+4962 597 -1
+4963 597 -1
+4964 597 -1
+4965 597 -1
+4966 597 -1
+4967 597 -1
+4968 597 -1
+8173 597 38
+478 598 -1
+499 598 1
+574 598 -1
+606 598 1
+734 598 1
+750 598 -1
+4969 598 -1
+4970 598 -1
+4971 598 -1
+4972 598 -1
+4973 598 -1
+4974 598 -1
+4975 598 -1
+4976 598 -1
+8174 598 38
+479 599 -1
+500 599 1
+575 599 -1
+607 599 1
+735 599 1
+751 599 -1
+4977 599 -1
+4978 599 -1
+4979 599 -1
+4980 599 -1
+4981 599 -1
+4982 599 -1
+4983 599 -1
+4984 599 -1
+8175 599 38
+480 600 -1
+501 600 1
+576 600 -1
+608 600 1
+736 600 1
+752 600 -1
+4985 600 -1
+4986 600 -1
+4987 600 -1
+4988 600 -1
+4989 600 -1
+4990 600 -1
+4991 600 -1
+4992 600 -1
+8176 600 38
+481 601 -1
+502 601 1
+577 601 -1
+609 601 1
+737 601 1
+753 601 -1
+4993 601 -1
+4994 601 -1
+4995 601 -1
+4996 601 -1
+4997 601 -1
+4998 601 -1
+4999 601 -1
+5000 601 -1
+8177 601 38
+482 602 -1
+503 602 1
+578 602 -1
+610 602 1
+738 602 1
+754 602 -1
+5001 602 -1
+5002 602 -1
+5003 602 -1
+5004 602 -1
+5005 602 -1
+5006 602 -1
+5007 602 -1
+5008 602 -1
+8178 602 38
+483 603 -1
+504 603 1
+579 603 -1
+611 603 1
+739 603 1
+755 603 -1
+5009 603 -1
+5010 603 -1
+5011 603 -1
+5012 603 -1
+5013 603 -1
+5014 603 -1
+5015 603 -1
+5016 603 -1
+8179 603 38
+484 604 -1
+489 604 1
+580 604 -1
+612 604 1
+740 604 1
+756 604 -1
+5017 604 -1
+5018 604 -1
+5019 604 -1
+5020 604 -1
+5021 604 -1
+5022 604 -1
+5023 604 -1
+5024 604 -1
+8180 604 38
+485 605 -1
+490 605 1
+581 605 -1
+613 605 1
+741 605 1
+757 605 -1
+5025 605 -1
+5026 605 -1
+5027 605 -1
+5028 605 -1
+5029 605 -1
+5030 605 -1
+5031 605 -1
+5032 605 -1
+8181 605 38
+486 606 -1
+491 606 1
+582 606 -1
+614 606 1
+742 606 1
+758 606 -1
+5033 606 -1
+5034 606 -1
+5035 606 -1
+5036 606 -1
+5037 606 -1
+5038 606 -1
+5039 606 -1
+5040 606 -1
+8182 606 38
+487 607 -1
+492 607 1
+583 607 -1
+615 607 1
+743 607 1
+759 607 -1
+5041 607 -1
+5042 607 -1
+5043 607 -1
+5044 607 -1
+5045 607 -1
+5046 607 -1
+5047 607 -1
+5048 607 -1
+8183 607 38
+488 608 -1
+493 608 1
+584 608 -1
+616 608 1
+744 608 1
+760 608 -1
+5049 608 -1
+5050 608 -1
+5051 608 -1
+5052 608 -1
+5053 608 -1
+5054 608 -1
+5055 608 -1
+5056 608 -1
+8184 608 38
+489 609 -1
+550 609 1
+585 609 -1
+617 609 1
+761 609 -1
+785 609 1
+5057 609 -1
+5058 609 -1
+5059 609 -1
+5060 609 -1
+5061 609 -1
+5062 609 -1
+5063 609 -1
+5064 609 -1
+8185 609 38
+490 610 -1
+551 610 1
+586 610 -1
+618 610 1
+762 610 -1
+786 610 1
+5065 610 -1
+5066 610 -1
+5067 610 -1
+5068 610 -1
+5069 610 -1
+5070 610 -1
+5071 610 -1
+5072 610 -1
+8186 610 38
+491 611 -1
+552 611 1
+587 611 -1
+619 611 1
+763 611 -1
+787 611 1
+5073 611 -1
+5074 611 -1
+5075 611 -1
+5076 611 -1
+5077 611 -1
+5078 611 -1
+5079 611 -1
+5080 611 -1
+8187 611 38
+492 612 -1
+537 612 1
+588 612 -1
+620 612 1
+764 612 -1
+788 612 1
+5081 612 -1
+5082 612 -1
+5083 612 -1
+5084 612 -1
+5085 612 -1
+5086 612 -1
+5087 612 -1
+5088 612 -1
+8188 612 38
+493 613 -1
+538 613 1
+589 613 -1
+621 613 1
+765 613 -1
+789 613 1
+5089 613 -1
+5090 613 -1
+5091 613 -1
+5092 613 -1
+5093 613 -1
+5094 613 -1
+5095 613 -1
+5096 613 -1
+8189 613 38
+494 614 -1
+539 614 1
+590 614 -1
+622 614 1
+766 614 -1
+790 614 1
+5097 614 -1
+5098 614 -1
+5099 614 -1
+5100 614 -1
+5101 614 -1
+5102 614 -1
+5103 614 -1
+5104 614 -1
+8190 614 38
+495 615 -1
+540 615 1
+591 615 -1
+623 615 1
+767 615 -1
+791 615 1
+5105 615 -1
+5106 615 -1
+5107 615 -1
+5108 615 -1
+5109 615 -1
+5110 615 -1
+5111 615 -1
+5112 615 -1
+8191 615 38
+496 616 -1
+541 616 1
+592 616 -1
+624 616 1
+768 616 -1
+792 616 1
+5113 616 -1
+5114 616 -1
+5115 616 -1
+5116 616 -1
+5117 616 -1
+5118 616 -1
+5119 616 -1
+5120 616 -1
+8192 616 38
+497 617 -1
+542 617 1
+593 617 -1
+625 617 1
+769 617 -1
+777 617 1
+5121 617 -1
+5122 617 -1
+5123 617 -1
+5124 617 -1
+5125 617 -1
+5126 617 -1
+5127 617 -1
+5128 617 -1
+8193 617 38
+498 618 -1
+543 618 1
+594 618 -1
+626 618 1
+770 618 -1
+778 618 1
+5129 618 -1
+5130 618 -1
+5131 618 -1
+5132 618 -1
+5133 618 -1
+5134 618 -1
+5135 618 -1
+5136 618 -1
+8194 618 38
+499 619 -1
+544 619 1
+595 619 -1
+627 619 1
+771 619 -1
+779 619 1
+5137 619 -1
+5138 619 -1
+5139 619 -1
+5140 619 -1
+5141 619 -1
+5142 619 -1
+5143 619 -1
+5144 619 -1
+8195 619 38
+500 620 -1
+545 620 1
+596 620 -1
+628 620 1
+772 620 -1
+780 620 1
+5145 620 -1
+5146 620 -1
+5147 620 -1
+5148 620 -1
+5149 620 -1
+5150 620 -1
+5151 620 -1
+5152 620 -1
+8196 620 38
+501 621 -1
+546 621 1
+597 621 -1
+629 621 1
+773 621 -1
+781 621 1
+5153 621 -1
+5154 621 -1
+5155 621 -1
+5156 621 -1
+5157 621 -1
+5158 621 -1
+5159 621 -1
+5160 621 -1
+8197 621 38
+502 622 -1
+547 622 1
+598 622 -1
+630 622 1
+774 622 -1
+782 622 1
+5161 622 -1
+5162 622 -1
+5163 622 -1
+5164 622 -1
+5165 622 -1
+5166 622 -1
+5167 622 -1
+5168 622 -1
+8198 622 38
+503 623 -1
+548 623 1
+599 623 -1
+631 623 1
+775 623 -1
+783 623 1
+5169 623 -1
+5170 623 -1
+5171 623 -1
+5172 623 -1
+5173 623 -1
+5174 623 -1
+5175 623 -1
+5176 623 -1
+8199 623 38
+504 624 -1
+549 624 1
+600 624 -1
+632 624 1
+776 624 -1
+784 624 1
+5177 624 -1
+5178 624 -1
+5179 624 -1
+5180 624 -1
+5181 624 -1
+5182 624 -1
+5183 624 -1
+5184 624 -1
+8200 624 38
+505 625 -1
+526 625 1
+601 625 -1
+633 625 1
+761 625 1
+777 625 -1
+5185 625 -1
+5186 625 -1
+5187 625 -1
+5188 625 -1
+5189 625 -1
+5190 625 -1
+5191 625 -1
+5192 625 -1
+8201 625 38
+506 626 -1
+527 626 1
+602 626 -1
+634 626 1
+762 626 1
+778 626 -1
+5193 626 -1
+5194 626 -1
+5195 626 -1
+5196 626 -1
+5197 626 -1
+5198 626 -1
+5199 626 -1
+5200 626 -1
+8202 626 38
+507 627 -1
+528 627 1
+603 627 -1
+635 627 1
+763 627 1
+779 627 -1
+5201 627 -1
+5202 627 -1
+5203 627 -1
+5204 627 -1
+5205 627 -1
+5206 627 -1
+5207 627 -1
+5208 627 -1
+8203 627 38
+508 628 -1
+529 628 1
+604 628 -1
+636 628 1
+764 628 1
+780 628 -1
+5209 628 -1
+5210 628 -1
+5211 628 -1
+5212 628 -1
+5213 628 -1
+5214 628 -1
+5215 628 -1
+5216 628 -1
+8204 628 38
+509 629 -1
+530 629 1
+605 629 -1
+637 629 1
+765 629 1
+781 629 -1
+5217 629 -1
+5218 629 -1
+5219 629 -1
+5220 629 -1
+5221 629 -1
+5222 629 -1
+5223 629 -1
+5224 629 -1
+8205 629 38
+510 630 -1
+531 630 1
+606 630 -1
+638 630 1
+766 630 1
+782 630 -1
+5225 630 -1
+5226 630 -1
+5227 630 -1
+5228 630 -1
+5229 630 -1
+5230 630 -1
+5231 630 -1
+5232 630 -1
+8206 630 38
+511 631 -1
+532 631 1
+607 631 -1
+639 631 1
+767 631 1
+783 631 -1
+5233 631 -1
+5234 631 -1
+5235 631 -1
+5236 631 -1
+5237 631 -1
+5238 631 -1
+5239 631 -1
+5240 631 -1
+8207 631 38
+512 632 -1
+533 632 1
+608 632 -1
+640 632 1
+768 632 1
+784 632 -1
+5241 632 -1
+5242 632 -1
+5243 632 -1
+5244 632 -1
+5245 632 -1
+5246 632 -1
+5247 632 -1
+5248 632 -1
+8208 632 38
+513 633 -1
+534 633 1
+609 633 -1
+641 633 1
+769 633 1
+785 633 -1
+5249 633 -1
+5250 633 -1
+5251 633 -1
+5252 633 -1
+5253 633 -1
+5254 633 -1
+5255 633 -1
+5256 633 -1
+8209 633 38
+514 634 -1
+535 634 1
+610 634 -1
+642 634 1
+770 634 1
+786 634 -1
+5257 634 -1
+5258 634 -1
+5259 634 -1
+5260 634 -1
+5261 634 -1
+5262 634 -1
+5263 634 -1
+5264 634 -1
+8210 634 38
+515 635 -1
+536 635 1
+611 635 -1
+643 635 1
+771 635 1
+787 635 -1
+5265 635 -1
+5266 635 -1
+5267 635 -1
+5268 635 -1
+5269 635 -1
+5270 635 -1
+5271 635 -1
+5272 635 -1
+8211 635 38
+516 636 -1
+521 636 1
+612 636 -1
+644 636 1
+772 636 1
+788 636 -1
+5273 636 -1
+5274 636 -1
+5275 636 -1
+5276 636 -1
+5277 636 -1
+5278 636 -1
+5279 636 -1
+5280 636 -1
+8212 636 38
+517 637 -1
+522 637 1
+613 637 -1
+645 637 1
+773 637 1
+789 637 -1
+5281 637 -1
+5282 637 -1
+5283 637 -1
+5284 637 -1
+5285 637 -1
+5286 637 -1
+5287 637 -1
+5288 637 -1
+8213 637 38
+518 638 -1
+523 638 1
+614 638 -1
+646 638 1
+774 638 1
+790 638 -1
+5289 638 -1
+5290 638 -1
+5291 638 -1
+5292 638 -1
+5293 638 -1
+5294 638 -1
+5295 638 -1
+5296 638 -1
+8214 638 38
+519 639 -1
+524 639 1
+615 639 -1
+647 639 1
+775 639 1
+791 639 -1
+5297 639 -1
+5298 639 -1
+5299 639 -1
+5300 639 -1
+5301 639 -1
+5302 639 -1
+5303 639 -1
+5304 639 -1
+8215 639 38
+520 640 -1
+525 640 1
+616 640 -1
+648 640 1
+776 640 1
+792 640 -1
+5305 640 -1
+5306 640 -1
+5307 640 -1
+5308 640 -1
+5309 640 -1
+5310 640 -1
+5311 640 -1
+5312 640 -1
+8216 640 38
+446 641 1
+521 641 -1
+617 641 -1
+649 641 1
+793 641 -1
+817 641 1
+5313 641 -1
+5314 641 -1
+5315 641 -1
+5316 641 -1
+5317 641 -1
+5318 641 -1
+5319 641 -1
+5320 641 -1
+8217 641 38
+447 642 1
+522 642 -1
+618 642 -1
+650 642 1
+794 642 -1
+818 642 1
+5321 642 -1
+5322 642 -1
+5323 642 -1
+5324 642 -1
+5325 642 -1
+5326 642 -1
+5327 642 -1
+5328 642 -1
+8218 642 38
+448 643 1
+523 643 -1
+619 643 -1
+651 643 1
+795 643 -1
+819 643 1
+5329 643 -1
+5330 643 -1
+5331 643 -1
+5332 643 -1
+5333 643 -1
+5334 643 -1
+5335 643 -1
+5336 643 -1
+8219 643 38
+449 644 1
+524 644 -1
+620 644 -1
+652 644 1
+796 644 -1
+820 644 1
+5337 644 -1
+5338 644 -1
+5339 644 -1
+5340 644 -1
+5341 644 -1
+5342 644 -1
+5343 644 -1
+5344 644 -1
+8220 644 38
+450 645 1
+525 645 -1
+621 645 -1
+653 645 1
+797 645 -1
+821 645 1
+5345 645 -1
+5346 645 -1
+5347 645 -1
+5348 645 -1
+5349 645 -1
+5350 645 -1
+5351 645 -1
+5352 645 -1
+8221 645 38
+451 646 1
+526 646 -1
+622 646 -1
+654 646 1
+798 646 -1
+822 646 1
+5353 646 -1
+5354 646 -1
+5355 646 -1
+5356 646 -1
+5357 646 -1
+5358 646 -1
+5359 646 -1
+5360 646 -1
+8222 646 38
+452 647 1
+527 647 -1
+623 647 -1
+655 647 1
+799 647 -1
+823 647 1
+5361 647 -1
+5362 647 -1
+5363 647 -1
+5364 647 -1
+5365 647 -1
+5366 647 -1
+5367 647 -1
+5368 647 -1
+8223 647 38
+453 648 1
+528 648 -1
+624 648 -1
+656 648 1
+800 648 -1
+824 648 1
+5369 648 -1
+5370 648 -1
+5371 648 -1
+5372 648 -1
+5373 648 -1
+5374 648 -1
+5375 648 -1
+5376 648 -1
+8224 648 38
+454 649 1
+529 649 -1
+625 649 -1
+657 649 1
+801 649 -1
+809 649 1
+5377 649 -1
+5378 649 -1
+5379 649 -1
+5380 649 -1
+5381 649 -1
+5382 649 -1
+5383 649 -1
+5384 649 -1
+8225 649 38
+455 650 1
+530 650 -1
+626 650 -1
+658 650 1
+802 650 -1
+810 650 1
+5385 650 -1
+5386 650 -1
+5387 650 -1
+5388 650 -1
+5389 650 -1
+5390 650 -1
+5391 650 -1
+5392 650 -1
+8226 650 38
+456 651 1
+531 651 -1
+627 651 -1
+659 651 1
+803 651 -1
+811 651 1
+5393 651 -1
+5394 651 -1
+5395 651 -1
+5396 651 -1
+5397 651 -1
+5398 651 -1
+5399 651 -1
+5400 651 -1
+8227 651 38
+441 652 1
+532 652 -1
+628 652 -1
+660 652 1
+804 652 -1
+812 652 1
+5401 652 -1
+5402 652 -1
+5403 652 -1
+5404 652 -1
+5405 652 -1
+5406 652 -1
+5407 652 -1
+5408 652 -1
+8228 652 38
+442 653 1
+533 653 -1
+629 653 -1
+661 653 1
+805 653 -1
+813 653 1
+5409 653 -1
+5410 653 -1
+5411 653 -1
+5412 653 -1
+5413 653 -1
+5414 653 -1
+5415 653 -1
+5416 653 -1
+8229 653 38
+443 654 1
+534 654 -1
+630 654 -1
+662 654 1
+806 654 -1
+814 654 1
+5417 654 -1
+5418 654 -1
+5419 654 -1
+5420 654 -1
+5421 654 -1
+5422 654 -1
+5423 654 -1
+5424 654 -1
+8230 654 38
+444 655 1
+535 655 -1
+631 655 -1
+663 655 1
+807 655 -1
+815 655 1
+5425 655 -1
+5426 655 -1
+5427 655 -1
+5428 655 -1
+5429 655 -1
+5430 655 -1
+5431 655 -1
+5432 655 -1
+8231 655 38
+445 656 1
+536 656 -1
+632 656 -1
+664 656 1
+808 656 -1
+816 656 1
+5433 656 -1
+5434 656 -1
+5435 656 -1
+5436 656 -1
+5437 656 -1
+5438 656 -1
+5439 656 -1
+5440 656 -1
+8232 656 38
+438 657 1
+537 657 -1
+633 657 -1
+665 657 1
+793 657 1
+809 657 -1
+5441 657 -1
+5442 657 -1
+5443 657 -1
+5444 657 -1
+5445 657 -1
+5446 657 -1
+5447 657 -1
+5448 657 -1
+8233 657 38
+439 658 1
+538 658 -1
+634 658 -1
+666 658 1
+794 658 1
+810 658 -1
+5449 658 -1
+5450 658 -1
+5451 658 -1
+5452 658 -1
+5453 658 -1
+5454 658 -1
+5455 658 -1
+5456 658 -1
+8234 658 38
+440 659 1
+539 659 -1
+635 659 -1
+667 659 1
+795 659 1
+811 659 -1
+5457 659 -1
+5458 659 -1
+5459 659 -1
+5460 659 -1
+5461 659 -1
+5462 659 -1
+5463 659 -1
+5464 659 -1
+8235 659 38
+425 660 1
+540 660 -1
+636 660 -1
+668 660 1
+796 660 1
+812 660 -1
+5465 660 -1
+5466 660 -1
+5467 660 -1
+5468 660 -1
+5469 660 -1
+5470 660 -1
+5471 660 -1
+5472 660 -1
+8236 660 38
+426 661 1
+541 661 -1
+637 661 -1
+669 661 1
+797 661 1
+813 661 -1
+5473 661 -1
+5474 661 -1
+5475 661 -1
+5476 661 -1
+5477 661 -1
+5478 661 -1
+5479 661 -1
+5480 661 -1
+8237 661 38
+427 662 1
+542 662 -1
+638 662 -1
+670 662 1
+798 662 1
+814 662 -1
+5481 662 -1
+5482 662 -1
+5483 662 -1
+5484 662 -1
+5485 662 -1
+5486 662 -1
+5487 662 -1
+5488 662 -1
+8238 662 38
+428 663 1
+543 663 -1
+639 663 -1
+671 663 1
+799 663 1
+815 663 -1
+5489 663 -1
+5490 663 -1
+5491 663 -1
+5492 663 -1
+5493 663 -1
+5494 663 -1
+5495 663 -1
+5496 663 -1
+8239 663 38
+429 664 1
+544 664 -1
+640 664 -1
+672 664 1
+800 664 1
+816 664 -1
+5497 664 -1
+5498 664 -1
+5499 664 -1
+5500 664 -1
+5501 664 -1
+5502 664 -1
+5503 664 -1
+5504 664 -1
+8240 664 38
+430 665 1
+545 665 -1
+641 665 -1
+673 665 1
+801 665 1
+817 665 -1
+5505 665 -1
+5506 665 -1
+5507 665 -1
+5508 665 -1
+5509 665 -1
+5510 665 -1
+5511 665 -1
+5512 665 -1
+8241 665 38
+431 666 1
+546 666 -1
+642 666 -1
+674 666 1
+802 666 1
+818 666 -1
+5513 666 -1
+5514 666 -1
+5515 666 -1
+5516 666 -1
+5517 666 -1
+5518 666 -1
+5519 666 -1
+5520 666 -1
+8242 666 38
+432 667 1
+547 667 -1
+643 667 -1
+675 667 1
+803 667 1
+819 667 -1
+5521 667 -1
+5522 667 -1
+5523 667 -1
+5524 667 -1
+5525 667 -1
+5526 667 -1
+5527 667 -1
+5528 667 -1
+8243 667 38
+433 668 1
+548 668 -1
+644 668 -1
+676 668 1
+804 668 1
+820 668 -1
+5529 668 -1
+5530 668 -1
+5531 668 -1
+5532 668 -1
+5533 668 -1
+5534 668 -1
+5535 668 -1
+5536 668 -1
+8244 668 38
+434 669 1
+549 669 -1
+645 669 -1
+677 669 1
+805 669 1
+821 669 -1
+5537 669 -1
+5538 669 -1
+5539 669 -1
+5540 669 -1
+5541 669 -1
+5542 669 -1
+5543 669 -1
+5544 669 -1
+8245 669 38
+435 670 1
+550 670 -1
+646 670 -1
+678 670 1
+806 670 1
+822 670 -1
+5545 670 -1
+5546 670 -1
+5547 670 -1
+5548 670 -1
+5549 670 -1
+5550 670 -1
+5551 670 -1
+5552 670 -1
+8246 670 38
+436 671 1
+551 671 -1
+647 671 -1
+679 671 1
+807 671 1
+823 671 -1
+5553 671 -1
+5554 671 -1
+5555 671 -1
+5556 671 -1
+5557 671 -1
+5558 671 -1
+5559 671 -1
+5560 671 -1
+8247 671 38
+437 672 1
+552 672 -1
+648 672 -1
+680 672 1
+808 672 1
+824 672 -1
+5561 672 -1
+5562 672 -1
+5563 672 -1
+5564 672 -1
+5565 672 -1
+5566 672 -1
+5567 672 -1
+5568 672 -1
+8248 672 38
+553 673 1
+557 673 1
+561 673 1
+565 673 1
+602 673 1
+606 673 1
+610 673 1
+614 673 1
+619 673 1
+623 673 1
+627 673 1
+631 673 1
+668 673 1
+672 673 1
+676 673 1
+680 673 1
+825 673 -1
+829 673 1
+5569 673 -1
+5570 673 -1
+5571 673 -1
+5572 673 -1
+8249 673 38
+554 674 1
+558 674 1
+562 674 1
+566 674 1
+603 674 1
+607 674 1
+611 674 1
+615 674 1
+620 674 1
+624 674 1
+628 674 1
+632 674 1
+665 674 1
+669 674 1
+673 674 1
+677 674 1
+826 674 -1
+830 674 1
+5573 674 -1
+5574 674 -1
+5575 674 -1
+5576 674 -1
+8250 674 38
+555 675 1
+559 675 1
+563 675 1
+567 675 1
+604 675 1
+608 675 1
+612 675 1
+616 675 1
+617 675 1
+621 675 1
+625 675 1
+629 675 1
+666 675 1
+670 675 1
+674 675 1
+678 675 1
+827 675 -1
+831 675 1
+5577 675 -1
+5578 675 -1
+5579 675 -1
+5580 675 -1
+8251 675 38
+556 676 1
+560 676 1
+564 676 1
+568 676 1
+601 676 1
+605 676 1
+609 676 1
+613 676 1
+618 676 1
+622 676 1
+626 676 1
+630 676 1
+667 676 1
+671 676 1
+675 676 1
+679 676 1
+828 676 -1
+832 676 1
+5581 676 -1
+5582 676 -1
+5583 676 -1
+5584 676 -1
+8252 676 38
+569 677 1
+573 677 1
+577 677 1
+581 677 1
+586 677 1
+590 677 1
+594 677 1
+598 677 1
+635 677 1
+639 677 1
+643 677 1
+647 677 1
+652 677 1
+656 677 1
+660 677 1
+664 677 1
+825 677 1
+829 677 -1
+5585 677 -1
+5586 677 -1
+5587 677 -1
+5588 677 -1
+8253 677 38
+570 678 1
+574 678 1
+578 678 1
+582 678 1
+587 678 1
+591 678 1
+595 678 1
+599 678 1
+636 678 1
+640 678 1
+644 678 1
+648 678 1
+649 678 1
+653 678 1
+657 678 1
+661 678 1
+826 678 1
+830 678 -1
+5589 678 -1
+5590 678 -1
+5591 678 -1
+5592 678 -1
+8254 678 38
+571 679 1
+575 679 1
+579 679 1
+583 679 1
+588 679 1
+592 679 1
+596 679 1
+600 679 1
+633 679 1
+637 679 1
+641 679 1
+645 679 1
+650 679 1
+654 679 1
+658 679 1
+662 679 1
+827 679 1
+831 679 -1
+5593 679 -1
+5594 679 -1
+5595 679 -1
+5596 679 -1
+8255 679 38
+572 680 1
+576 680 1
+580 680 1
+584 680 1
+585 680 1
+589 680 1
+593 680 1
+597 680 1
+634 680 1
+638 680 1
+642 680 1
+646 680 1
+651 680 1
+655 680 1
+659 680 1
+663 680 1
+828 680 1
+832 680 -1
+5597 680 -1
+5598 680 -1
+5599 680 -1
+5600 680 -1
+8256 680 38
+681 681 -1
+694 681 1
+697 681 -1
+705 681 -1
+729 681 -1
+737 681 -1
+761 681 -1
+769 681 -1
+793 681 -1
+801 681 -1
+5601 681 -1
+5602 681 -1
+5603 681 -1
+5604 681 -1
+8257 681 38
+682 682 -1
+695 682 1
+698 682 -1
+706 682 -1
+730 682 -1
+738 682 -1
+762 682 -1
+770 682 -1
+794 682 -1
+802 682 -1
+5605 682 -1
+5606 682 -1
+5607 682 -1
+5608 682 -1
+8258 682 38
+683 683 -1
+696 683 1
+699 683 -1
+707 683 -1
+731 683 -1
+739 683 -1
+763 683 -1
+771 683 -1
+795 683 -1
+803 683 -1
+5609 683 -1
+5610 683 -1
+5611 683 -1
+5612 683 -1
+8259 683 38
+684 684 -1
+689 684 1
+700 684 -1
+708 684 -1
+732 684 -1
+740 684 -1
+764 684 -1
+772 684 -1
+796 684 -1
+804 684 -1
+5613 684 -1
+5614 684 -1
+5615 684 -1
+5616 684 -1
+8260 684 38
+685 685 -1
+690 685 1
+701 685 -1
+709 685 -1
+733 685 -1
+741 685 -1
+765 685 -1
+773 685 -1
+797 685 -1
+805 685 -1
+5617 685 -1
+5618 685 -1
+5619 685 -1
+5620 685 -1
+8261 685 38
+686 686 -1
+691 686 1
+702 686 -1
+710 686 -1
+734 686 -1
+742 686 -1
+766 686 -1
+774 686 -1
+798 686 -1
+806 686 -1
+5621 686 -1
+5622 686 -1
+5623 686 -1
+5624 686 -1
+8262 686 38
+687 687 -1
+692 687 1
+703 687 -1
+711 687 -1
+735 687 -1
+743 687 -1
+767 687 -1
+775 687 -1
+799 687 -1
+807 687 -1
+5625 687 -1
+5626 687 -1
+5627 687 -1
+5628 687 -1
+8263 687 38
+688 688 -1
+693 688 1
+704 688 -1
+712 688 -1
+736 688 -1
+744 688 -1
+768 688 -1
+776 688 -1
+800 688 -1
+808 688 -1
+5629 688 -1
+5630 688 -1
+5631 688 -1
+5632 688 -1
+8264 688 38
+686 689 1
+689 689 -1
+713 689 -1
+721 689 -1
+745 689 -1
+753 689 -1
+777 689 -1
+785 689 -1
+809 689 -1
+817 689 -1
+5633 689 -1
+5634 689 -1
+5635 689 -1
+5636 689 -1
+8265 689 38
+687 690 1
+690 690 -1
+714 690 -1
+722 690 -1
+746 690 -1
+754 690 -1
+778 690 -1
+786 690 -1
+810 690 -1
+818 690 -1
+5637 690 -1
+5638 690 -1
+5639 690 -1
+5640 690 -1
+8266 690 38
+688 691 1
+691 691 -1
+715 691 -1
+723 691 -1
+747 691 -1
+755 691 -1
+779 691 -1
+787 691 -1
+811 691 -1
+819 691 -1
+5641 691 -1
+5642 691 -1
+5643 691 -1
+5644 691 -1
+8267 691 38
+681 692 1
+692 692 -1
+716 692 -1
+724 692 -1
+748 692 -1
+756 692 -1
+780 692 -1
+788 692 -1
+812 692 -1
+820 692 -1
+5645 692 -1
+5646 692 -1
+5647 692 -1
+5648 692 -1
+8268 692 38
+682 693 1
+693 693 -1
+717 693 -1
+725 693 -1
+749 693 -1
+757 693 -1
+781 693 -1
+789 693 -1
+813 693 -1
+821 693 -1
+5649 693 -1
+5650 693 -1
+5651 693 -1
+5652 693 -1
+8269 693 38
+683 694 1
+694 694 -1
+718 694 -1
+726 694 -1
+750 694 -1
+758 694 -1
+782 694 -1
+790 694 -1
+814 694 -1
+822 694 -1
+5653 694 -1
+5654 694 -1
+5655 694 -1
+5656 694 -1
+8270 694 38
+684 695 1
+695 695 -1
+719 695 -1
+727 695 -1
+751 695 -1
+759 695 -1
+783 695 -1
+791 695 -1
+815 695 -1
+823 695 -1
+5657 695 -1
+5658 695 -1
+5659 695 -1
+5660 695 -1
+8271 695 38
+685 696 1
+696 696 -1
+720 696 -1
+728 696 -1
+752 696 -1
+760 696 -1
+784 696 -1
+792 696 -1
+816 696 -1
+824 696 -1
+5661 696 -1
+5662 696 -1
+5663 696 -1
+5664 696 -1
+8272 696 38
+697 697 1
+701 697 1
+705 697 1
+709 697 1
+746 697 1
+750 697 1
+754 697 1
+758 697 1
+763 697 1
+767 697 1
+771 697 1
+775 697 1
+812 697 1
+816 697 1
+820 697 1
+824 697 1
+825 697 -1
+830 697 1
+5665 697 -1
+5666 697 -1
+5667 697 -1
+5668 697 -1
+8273 697 38
+698 698 1
+702 698 1
+706 698 1
+710 698 1
+747 698 1
+751 698 1
+755 698 1
+759 698 1
+764 698 1
+768 698 1
+772 698 1
+776 698 1
+809 698 1
+813 698 1
+817 698 1
+821 698 1
+826 698 -1
+831 698 1
+5669 698 -1
+5670 698 -1
+5671 698 -1
+5672 698 -1
+8274 698 38
+699 699 1
+703 699 1
+707 699 1
+711 699 1
+748 699 1
+752 699 1
+756 699 1
+760 699 1
+761 699 1
+765 699 1
+769 699 1
+773 699 1
+810 699 1
+814 699 1
+818 699 1
+822 699 1
+827 699 -1
+832 699 1
+5673 699 -1
+5674 699 -1
+5675 699 -1
+5676 699 -1
+8275 699 38
+700 700 1
+704 700 1
+708 700 1
+712 700 1
+745 700 1
+749 700 1
+753 700 1
+757 700 1
+762 700 1
+766 700 1
+770 700 1
+774 700 1
+811 700 1
+815 700 1
+819 700 1
+823 700 1
+828 700 -1
+829 700 1
+5677 700 -1
+5678 700 -1
+5679 700 -1
+5680 700 -1
+8276 700 38
+713 701 1
+717 701 1
+721 701 1
+725 701 1
+730 701 1
+734 701 1
+738 701 1
+742 701 1
+779 701 1
+783 701 1
+787 701 1
+791 701 1
+796 701 1
+800 701 1
+804 701 1
+808 701 1
+826 701 1
+829 701 -1
+5681 701 -1
+5682 701 -1
+5683 701 -1
+5684 701 -1
+8277 701 38
+714 702 1
+718 702 1
+722 702 1
+726 702 1
+731 702 1
+735 702 1
+739 702 1
+743 702 1
+780 702 1
+784 702 1
+788 702 1
+792 702 1
+793 702 1
+797 702 1
+801 702 1
+805 702 1
+827 702 1
+830 702 -1
+5685 702 -1
+5686 702 -1
+5687 702 -1
+5688 702 -1
+8278 702 38
+715 703 1
+719 703 1
+723 703 1
+727 703 1
+732 703 1
+736 703 1
+740 703 1
+744 703 1
+777 703 1
+781 703 1
+785 703 1
+789 703 1
+794 703 1
+798 703 1
+802 703 1
+806 703 1
+828 703 1
+831 703 -1
+5689 703 -1
+5690 703 -1
+5691 703 -1
+5692 703 -1
+8279 703 38
+716 704 1
+720 704 1
+724 704 1
+728 704 1
+729 704 1
+733 704 1
+737 704 1
+741 704 1
+778 704 1
+782 704 1
+786 704 1
+790 704 1
+795 704 1
+799 704 1
+803 704 1
+807 704 1
+825 704 1
+832 704 -1
+5693 704 -1
+5694 704 -1
+5695 704 -1
+5696 704 -1
+8280 704 38
+833 705 1
+837 705 1
+929 705 1
+933 705 1
+937 705 1
+941 705 1
+945 705 1
+949 705 1
+953 705 1
+957 705 1
+5697 705 -1
+5700 705 1
+8281 705 38
+834 706 1
+838 706 1
+930 706 1
+934 706 1
+938 706 1
+942 706 1
+946 706 1
+950 706 1
+954 706 1
+958 706 1
+5697 706 1
+5698 706 -1
+8282 706 38
+835 707 1
+839 707 1
+931 707 1
+935 707 1
+939 707 1
+943 707 1
+947 707 1
+951 707 1
+955 707 1
+959 707 1
+5698 707 1
+5699 707 -1
+8283 707 38
+836 708 1
+840 708 1
+932 708 1
+936 708 1
+940 708 1
+944 708 1
+948 708 1
+952 708 1
+956 708 1
+960 708 1
+5699 708 1
+5700 708 -1
+8284 708 38
+841 709 1
+845 709 1
+961 709 1
+965 709 1
+969 709 1
+973 709 1
+977 709 1
+981 709 1
+985 709 1
+989 709 1
+5701 709 -1
+5704 709 1
+8285 709 38
+842 710 1
+846 710 1
+962 710 1
+966 710 1
+970 710 1
+974 710 1
+978 710 1
+982 710 1
+986 710 1
+990 710 1
+5701 710 1
+5702 710 -1
+8286 710 38
+843 711 1
+847 711 1
+963 711 1
+967 711 1
+971 711 1
+975 711 1
+979 711 1
+983 711 1
+987 711 1
+991 711 1
+5702 711 1
+5703 711 -1
+8287 711 38
+844 712 1
+848 712 1
+964 712 1
+968 712 1
+972 712 1
+976 712 1
+980 712 1
+984 712 1
+988 712 1
+992 712 1
+5703 712 1
+5704 712 -1
+8288 712 38
+849 713 1
+853 713 1
+993 713 1
+997 713 1
+1001 713 1
+1005 713 1
+1009 713 1
+1013 713 1
+1017 713 1
+1021 713 1
+5705 713 -1
+5708 713 1
+8289 713 38
+850 714 1
+854 714 1
+994 714 1
+998 714 1
+1002 714 1
+1006 714 1
+1010 714 1
+1014 714 1
+1018 714 1
+1022 714 1
+5705 714 1
+5706 714 -1
+8290 714 38
+851 715 1
+855 715 1
+995 715 1
+999 715 1
+1003 715 1
+1007 715 1
+1011 715 1
+1015 715 1
+1019 715 1
+1023 715 1
+5706 715 1
+5707 715 -1
+8291 715 38
+852 716 1
+856 716 1
+996 716 1
+1000 716 1
+1004 716 1
+1008 716 1
+1012 716 1
+1016 716 1
+1020 716 1
+1024 716 1
+5707 716 1
+5708 716 -1
+8292 716 38
+857 717 1
+861 717 1
+1025 717 1
+1029 717 1
+1033 717 1
+1037 717 1
+1041 717 1
+1045 717 1
+1049 717 1
+1053 717 1
+5709 717 -1
+5712 717 1
+8293 717 38
+858 718 1
+862 718 1
+1026 718 1
+1030 718 1
+1034 718 1
+1038 718 1
+1042 718 1
+1046 718 1
+1050 718 1
+1054 718 1
+5709 718 1
+5710 718 -1
+8294 718 38
+859 719 1
+863 719 1
+1027 719 1
+1031 719 1
+1035 719 1
+1039 719 1
+1043 719 1
+1047 719 1
+1051 719 1
+1055 719 1
+5710 719 1
+5711 719 -1
+8295 719 38
+860 720 1
+864 720 1
+1028 720 1
+1032 720 1
+1036 720 1
+1040 720 1
+1044 720 1
+1048 720 1
+1052 720 1
+1056 720 1
+5711 720 1
+5712 720 -1
+8296 720 38
+833 721 -1
+857 721 1
+865 721 1
+869 721 -1
+1057 721 1
+1061 721 1
+1065 721 1
+1069 721 1
+1073 721 1
+1077 721 1
+1081 721 1
+1085 721 1
+1089 721 1
+1093 721 1
+1097 721 1
+1101 721 1
+1105 721 1
+1109 721 1
+1113 721 1
+1117 721 1
+1121 721 1
+1125 721 1
+1129 721 1
+1133 721 1
+1137 721 1
+1141 721 1
+1145 721 1
+1149 721 1
+1153 721 1
+1157 721 1
+1161 721 1
+1165 721 1
+1169 721 1
+1173 721 1
+1177 721 1
+1181 721 1
+5713 721 -1
+5716 721 1
+8297 721 38
+834 722 -1
+858 722 1
+866 722 1
+870 722 -1
+1058 722 1
+1062 722 1
+1066 722 1
+1070 722 1
+1074 722 1
+1078 722 1
+1082 722 1
+1086 722 1
+1090 722 1
+1094 722 1
+1098 722 1
+1102 722 1
+1106 722 1
+1110 722 1
+1114 722 1
+1118 722 1
+1122 722 1
+1126 722 1
+1130 722 1
+1134 722 1
+1138 722 1
+1142 722 1
+1146 722 1
+1150 722 1
+1154 722 1
+1158 722 1
+1162 722 1
+1166 722 1
+1170 722 1
+1174 722 1
+1178 722 1
+1182 722 1
+5713 722 1
+5714 722 -1
+8298 722 38
+835 723 -1
+859 723 1
+867 723 1
+871 723 -1
+1059 723 1
+1063 723 1
+1067 723 1
+1071 723 1
+1075 723 1
+1079 723 1
+1083 723 1
+1087 723 1
+1091 723 1
+1095 723 1
+1099 723 1
+1103 723 1
+1107 723 1
+1111 723 1
+1115 723 1
+1119 723 1
+1123 723 1
+1127 723 1
+1131 723 1
+1135 723 1
+1139 723 1
+1143 723 1
+1147 723 1
+1151 723 1
+1155 723 1
+1159 723 1
+1163 723 1
+1167 723 1
+1171 723 1
+1175 723 1
+1179 723 1
+1183 723 1
+5714 723 1
+5715 723 -1
+8299 723 38
+836 724 -1
+860 724 1
+868 724 1
+872 724 -1
+1060 724 1
+1064 724 1
+1068 724 1
+1072 724 1
+1076 724 1
+1080 724 1
+1084 724 1
+1088 724 1
+1092 724 1
+1096 724 1
+1100 724 1
+1104 724 1
+1108 724 1
+1112 724 1
+1116 724 1
+1120 724 1
+1124 724 1
+1128 724 1
+1132 724 1
+1136 724 1
+1140 724 1
+1144 724 1
+1148 724 1
+1152 724 1
+1156 724 1
+1160 724 1
+1164 724 1
+1168 724 1
+1172 724 1
+1176 724 1
+1180 724 1
+1184 724 1
+5715 724 1
+5716 724 -1
+8300 724 38
+837 725 -1
+861 725 1
+865 725 -1
+869 725 1
+1185 725 1
+1189 725 1
+1193 725 1
+1197 725 1
+1201 725 1
+1205 725 1
+1209 725 1
+1213 725 1
+1217 725 1
+1221 725 1
+1225 725 1
+1229 725 1
+1233 725 1
+1237 725 1
+1241 725 1
+1245 725 1
+1249 725 1
+1253 725 1
+1257 725 1
+1261 725 1
+1265 725 1
+1269 725 1
+1273 725 1
+1277 725 1
+1281 725 1
+1285 725 1
+1289 725 1
+1293 725 1
+1297 725 1
+1301 725 1
+1305 725 1
+1309 725 1
+5717 725 -1
+5720 725 1
+8301 725 38
+838 726 -1
+862 726 1
+866 726 -1
+870 726 1
+1186 726 1
+1190 726 1
+1194 726 1
+1198 726 1
+1202 726 1
+1206 726 1
+1210 726 1
+1214 726 1
+1218 726 1
+1222 726 1
+1226 726 1
+1230 726 1
+1234 726 1
+1238 726 1
+1242 726 1
+1246 726 1
+1250 726 1
+1254 726 1
+1258 726 1
+1262 726 1
+1266 726 1
+1270 726 1
+1274 726 1
+1278 726 1
+1282 726 1
+1286 726 1
+1290 726 1
+1294 726 1
+1298 726 1
+1302 726 1
+1306 726 1
+1310 726 1
+5717 726 1
+5718 726 -1
+8302 726 38
+839 727 -1
+863 727 1
+867 727 -1
+871 727 1
+1187 727 1
+1191 727 1
+1195 727 1
+1199 727 1
+1203 727 1
+1207 727 1
+1211 727 1
+1215 727 1
+1219 727 1
+1223 727 1
+1227 727 1
+1231 727 1
+1235 727 1
+1239 727 1
+1243 727 1
+1247 727 1
+1251 727 1
+1255 727 1
+1259 727 1
+1263 727 1
+1267 727 1
+1271 727 1
+1275 727 1
+1279 727 1
+1283 727 1
+1287 727 1
+1291 727 1
+1295 727 1
+1299 727 1
+1303 727 1
+1307 727 1
+1311 727 1
+5718 727 1
+5719 727 -1
+8303 727 38
+840 728 -1
+864 728 1
+868 728 -1
+872 728 1
+1188 728 1
+1192 728 1
+1196 728 1
+1200 728 1
+1204 728 1
+1208 728 1
+1212 728 1
+1216 728 1
+1220 728 1
+1224 728 1
+1228 728 1
+1232 728 1
+1236 728 1
+1240 728 1
+1244 728 1
+1248 728 1
+1252 728 1
+1256 728 1
+1260 728 1
+1264 728 1
+1268 728 1
+1272 728 1
+1276 728 1
+1280 728 1
+1284 728 1
+1288 728 1
+1292 728 1
+1296 728 1
+1300 728 1
+1304 728 1
+1308 728 1
+1312 728 1
+5719 728 1
+5720 728 -1
+8304 728 38
+833 729 1
+841 729 -1
+873 729 1
+877 729 -1
+1313 729 1
+1317 729 1
+1321 729 1
+1325 729 1
+1329 729 1
+1333 729 1
+1337 729 1
+1341 729 1
+1345 729 1
+1349 729 1
+1353 729 1
+1357 729 1
+1361 729 1
+1365 729 1
+1369 729 1
+1373 729 1
+1377 729 1
+1381 729 1
+1385 729 1
+1389 729 1
+1393 729 1
+1397 729 1
+1401 729 1
+1405 729 1
+1409 729 1
+1413 729 1
+1417 729 1
+1421 729 1
+1425 729 1
+1429 729 1
+1433 729 1
+1437 729 1
+5721 729 -1
+5724 729 1
+8305 729 38
+834 730 1
+842 730 -1
+874 730 1
+878 730 -1
+1314 730 1
+1318 730 1
+1322 730 1
+1326 730 1
+1330 730 1
+1334 730 1
+1338 730 1
+1342 730 1
+1346 730 1
+1350 730 1
+1354 730 1
+1358 730 1
+1362 730 1
+1366 730 1
+1370 730 1
+1374 730 1
+1378 730 1
+1382 730 1
+1386 730 1
+1390 730 1
+1394 730 1
+1398 730 1
+1402 730 1
+1406 730 1
+1410 730 1
+1414 730 1
+1418 730 1
+1422 730 1
+1426 730 1
+1430 730 1
+1434 730 1
+1438 730 1
+5721 730 1
+5722 730 -1
+8306 730 38
+835 731 1
+843 731 -1
+875 731 1
+879 731 -1
+1315 731 1
+1319 731 1
+1323 731 1
+1327 731 1
+1331 731 1
+1335 731 1
+1339 731 1
+1343 731 1
+1347 731 1
+1351 731 1
+1355 731 1
+1359 731 1
+1363 731 1
+1367 731 1
+1371 731 1
+1375 731 1
+1379 731 1
+1383 731 1
+1387 731 1
+1391 731 1
+1395 731 1
+1399 731 1
+1403 731 1
+1407 731 1
+1411 731 1
+1415 731 1
+1419 731 1
+1423 731 1
+1427 731 1
+1431 731 1
+1435 731 1
+1439 731 1
+5722 731 1
+5723 731 -1
+8307 731 38
+836 732 1
+844 732 -1
+876 732 1
+880 732 -1
+1316 732 1
+1320 732 1
+1324 732 1
+1328 732 1
+1332 732 1
+1336 732 1
+1340 732 1
+1344 732 1
+1348 732 1
+1352 732 1
+1356 732 1
+1360 732 1
+1364 732 1
+1368 732 1
+1372 732 1
+1376 732 1
+1380 732 1
+1384 732 1
+1388 732 1
+1392 732 1
+1396 732 1
+1400 732 1
+1404 732 1
+1408 732 1
+1412 732 1
+1416 732 1
+1420 732 1
+1424 732 1
+1428 732 1
+1432 732 1
+1436 732 1
+1440 732 1
+5723 732 1
+5724 732 -1
+8308 732 38
+837 733 1
+845 733 -1
+873 733 -1
+877 733 1
+1441 733 1
+1445 733 1
+1449 733 1
+1453 733 1
+1457 733 1
+1461 733 1
+1465 733 1
+1469 733 1
+1473 733 1
+1477 733 1
+1481 733 1
+1485 733 1
+1489 733 1
+1493 733 1
+1497 733 1
+1501 733 1
+1505 733 1
+1509 733 1
+1513 733 1
+1517 733 1
+1521 733 1
+1525 733 1
+1529 733 1
+1533 733 1
+1537 733 1
+1541 733 1
+1545 733 1
+1549 733 1
+1553 733 1
+1557 733 1
+1561 733 1
+1565 733 1
+5725 733 -1
+5728 733 1
+8309 733 38
+838 734 1
+846 734 -1
+874 734 -1
+878 734 1
+1442 734 1
+1446 734 1
+1450 734 1
+1454 734 1
+1458 734 1
+1462 734 1
+1466 734 1
+1470 734 1
+1474 734 1
+1478 734 1
+1482 734 1
+1486 734 1
+1490 734 1
+1494 734 1
+1498 734 1
+1502 734 1
+1506 734 1
+1510 734 1
+1514 734 1
+1518 734 1
+1522 734 1
+1526 734 1
+1530 734 1
+1534 734 1
+1538 734 1
+1542 734 1
+1546 734 1
+1550 734 1
+1554 734 1
+1558 734 1
+1562 734 1
+1566 734 1
+5725 734 1
+5726 734 -1
+8310 734 38
+839 735 1
+847 735 -1
+875 735 -1
+879 735 1
+1443 735 1
+1447 735 1
+1451 735 1
+1455 735 1
+1459 735 1
+1463 735 1
+1467 735 1
+1471 735 1
+1475 735 1
+1479 735 1
+1483 735 1
+1487 735 1
+1491 735 1
+1495 735 1
+1499 735 1
+1503 735 1
+1507 735 1
+1511 735 1
+1515 735 1
+1519 735 1
+1523 735 1
+1527 735 1
+1531 735 1
+1535 735 1
+1539 735 1
+1543 735 1
+1547 735 1
+1551 735 1
+1555 735 1
+1559 735 1
+1563 735 1
+1567 735 1
+5726 735 1
+5727 735 -1
+8311 735 38
+840 736 1
+848 736 -1
+876 736 -1
+880 736 1
+1444 736 1
+1448 736 1
+1452 736 1
+1456 736 1
+1460 736 1
+1464 736 1
+1468 736 1
+1472 736 1
+1476 736 1
+1480 736 1
+1484 736 1
+1488 736 1
+1492 736 1
+1496 736 1
+1500 736 1
+1504 736 1
+1508 736 1
+1512 736 1
+1516 736 1
+1520 736 1
+1524 736 1
+1528 736 1
+1532 736 1
+1536 736 1
+1540 736 1
+1544 736 1
+1548 736 1
+1552 736 1
+1556 736 1
+1560 736 1
+1564 736 1
+1568 736 1
+5727 736 1
+5728 736 -1
+8312 736 38
+841 737 1
+849 737 -1
+881 737 1
+885 737 -1
+1569 737 1
+1573 737 1
+1577 737 1
+1581 737 1
+1585 737 1
+1589 737 1
+1593 737 1
+1597 737 1
+1601 737 1
+1605 737 1
+1609 737 1
+1613 737 1
+1617 737 1
+1621 737 1
+1625 737 1
+1629 737 1
+1633 737 1
+1637 737 1
+1641 737 1
+1645 737 1
+1649 737 1
+1653 737 1
+1657 737 1
+1661 737 1
+1665 737 1
+1669 737 1
+1673 737 1
+1677 737 1
+1681 737 1
+1685 737 1
+1689 737 1
+1693 737 1
+5729 737 -1
+5732 737 1
+8313 737 38
+842 738 1
+850 738 -1
+882 738 1
+886 738 -1
+1570 738 1
+1574 738 1
+1578 738 1
+1582 738 1
+1586 738 1
+1590 738 1
+1594 738 1
+1598 738 1
+1602 738 1
+1606 738 1
+1610 738 1
+1614 738 1
+1618 738 1
+1622 738 1
+1626 738 1
+1630 738 1
+1634 738 1
+1638 738 1
+1642 738 1
+1646 738 1
+1650 738 1
+1654 738 1
+1658 738 1
+1662 738 1
+1666 738 1
+1670 738 1
+1674 738 1
+1678 738 1
+1682 738 1
+1686 738 1
+1690 738 1
+1694 738 1
+5729 738 1
+5730 738 -1
+8314 738 38
+843 739 1
+851 739 -1
+883 739 1
+887 739 -1
+1571 739 1
+1575 739 1
+1579 739 1
+1583 739 1
+1587 739 1
+1591 739 1
+1595 739 1
+1599 739 1
+1603 739 1
+1607 739 1
+1611 739 1
+1615 739 1
+1619 739 1
+1623 739 1
+1627 739 1
+1631 739 1
+1635 739 1
+1639 739 1
+1643 739 1
+1647 739 1
+1651 739 1
+1655 739 1
+1659 739 1
+1663 739 1
+1667 739 1
+1671 739 1
+1675 739 1
+1679 739 1
+1683 739 1
+1687 739 1
+1691 739 1
+1695 739 1
+5730 739 1
+5731 739 -1
+8315 739 38
+844 740 1
+852 740 -1
+884 740 1
+888 740 -1
+1572 740 1
+1576 740 1
+1580 740 1
+1584 740 1
+1588 740 1
+1592 740 1
+1596 740 1
+1600 740 1
+1604 740 1
+1608 740 1
+1612 740 1
+1616 740 1
+1620 740 1
+1624 740 1
+1628 740 1
+1632 740 1
+1636 740 1
+1640 740 1
+1644 740 1
+1648 740 1
+1652 740 1
+1656 740 1
+1660 740 1
+1664 740 1
+1668 740 1
+1672 740 1
+1676 740 1
+1680 740 1
+1684 740 1
+1688 740 1
+1692 740 1
+1696 740 1
+5731 740 1
+5732 740 -1
+8316 740 38
+845 741 1
+853 741 -1
+881 741 -1
+885 741 1
+1697 741 1
+1701 741 1
+1705 741 1
+1709 741 1
+1713 741 1
+1717 741 1
+1721 741 1
+1725 741 1
+1729 741 1
+1733 741 1
+1737 741 1
+1741 741 1
+1745 741 1
+1749 741 1
+1753 741 1
+1757 741 1
+1761 741 1
+1765 741 1
+1769 741 1
+1773 741 1
+1777 741 1
+1781 741 1
+1785 741 1
+1789 741 1
+1793 741 1
+1797 741 1
+1801 741 1
+1805 741 1
+1809 741 1
+1813 741 1
+1817 741 1
+1821 741 1
+5733 741 -1
+5736 741 1
+8317 741 38
+846 742 1
+854 742 -1
+882 742 -1
+886 742 1
+1698 742 1
+1702 742 1
+1706 742 1
+1710 742 1
+1714 742 1
+1718 742 1
+1722 742 1
+1726 742 1
+1730 742 1
+1734 742 1
+1738 742 1
+1742 742 1
+1746 742 1
+1750 742 1
+1754 742 1
+1758 742 1
+1762 742 1
+1766 742 1
+1770 742 1
+1774 742 1
+1778 742 1
+1782 742 1
+1786 742 1
+1790 742 1
+1794 742 1
+1798 742 1
+1802 742 1
+1806 742 1
+1810 742 1
+1814 742 1
+1818 742 1
+1822 742 1
+5733 742 1
+5734 742 -1
+8318 742 38
+847 743 1
+855 743 -1
+883 743 -1
+887 743 1
+1699 743 1
+1703 743 1
+1707 743 1
+1711 743 1
+1715 743 1
+1719 743 1
+1723 743 1
+1727 743 1
+1731 743 1
+1735 743 1
+1739 743 1
+1743 743 1
+1747 743 1
+1751 743 1
+1755 743 1
+1759 743 1
+1763 743 1
+1767 743 1
+1771 743 1
+1775 743 1
+1779 743 1
+1783 743 1
+1787 743 1
+1791 743 1
+1795 743 1
+1799 743 1
+1803 743 1
+1807 743 1
+1811 743 1
+1815 743 1
+1819 743 1
+1823 743 1
+5734 743 1
+5735 743 -1
+8319 743 38
+848 744 1
+856 744 -1
+884 744 -1
+888 744 1
+1700 744 1
+1704 744 1
+1708 744 1
+1712 744 1
+1716 744 1
+1720 744 1
+1724 744 1
+1728 744 1
+1732 744 1
+1736 744 1
+1740 744 1
+1744 744 1
+1748 744 1
+1752 744 1
+1756 744 1
+1760 744 1
+1764 744 1
+1768 744 1
+1772 744 1
+1776 744 1
+1780 744 1
+1784 744 1
+1788 744 1
+1792 744 1
+1796 744 1
+1800 744 1
+1804 744 1
+1808 744 1
+1812 744 1
+1816 744 1
+1820 744 1
+1824 744 1
+5735 744 1
+5736 744 -1
+8320 744 38
+849 745 1
+857 745 -1
+889 745 1
+893 745 -1
+1825 745 1
+1829 745 1
+1833 745 1
+1837 745 1
+1841 745 1
+1845 745 1
+1849 745 1
+1853 745 1
+1857 745 1
+1861 745 1
+1865 745 1
+1869 745 1
+1873 745 1
+1877 745 1
+1881 745 1
+1885 745 1
+1889 745 1
+1893 745 1
+1897 745 1
+1901 745 1
+1905 745 1
+1909 745 1
+1913 745 1
+1917 745 1
+1921 745 1
+1925 745 1
+1929 745 1
+1933 745 1
+1937 745 1
+1941 745 1
+1945 745 1
+1949 745 1
+5737 745 -1
+5740 745 1
+8321 745 38
+850 746 1
+858 746 -1
+890 746 1
+894 746 -1
+1826 746 1
+1830 746 1
+1834 746 1
+1838 746 1
+1842 746 1
+1846 746 1
+1850 746 1
+1854 746 1
+1858 746 1
+1862 746 1
+1866 746 1
+1870 746 1
+1874 746 1
+1878 746 1
+1882 746 1
+1886 746 1
+1890 746 1
+1894 746 1
+1898 746 1
+1902 746 1
+1906 746 1
+1910 746 1
+1914 746 1
+1918 746 1
+1922 746 1
+1926 746 1
+1930 746 1
+1934 746 1
+1938 746 1
+1942 746 1
+1946 746 1
+1950 746 1
+5737 746 1
+5738 746 -1
+8322 746 38
+851 747 1
+859 747 -1
+891 747 1
+895 747 -1
+1827 747 1
+1831 747 1
+1835 747 1
+1839 747 1
+1843 747 1
+1847 747 1
+1851 747 1
+1855 747 1
+1859 747 1
+1863 747 1
+1867 747 1
+1871 747 1
+1875 747 1
+1879 747 1
+1883 747 1
+1887 747 1
+1891 747 1
+1895 747 1
+1899 747 1
+1903 747 1
+1907 747 1
+1911 747 1
+1915 747 1
+1919 747 1
+1923 747 1
+1927 747 1
+1931 747 1
+1935 747 1
+1939 747 1
+1943 747 1
+1947 747 1
+1951 747 1
+5738 747 1
+5739 747 -1
+8323 747 38
+852 748 1
+860 748 -1
+892 748 1
+896 748 -1
+1828 748 1
+1832 748 1
+1836 748 1
+1840 748 1
+1844 748 1
+1848 748 1
+1852 748 1
+1856 748 1
+1860 748 1
+1864 748 1
+1868 748 1
+1872 748 1
+1876 748 1
+1880 748 1
+1884 748 1
+1888 748 1
+1892 748 1
+1896 748 1
+1900 748 1
+1904 748 1
+1908 748 1
+1912 748 1
+1916 748 1
+1920 748 1
+1924 748 1
+1928 748 1
+1932 748 1
+1936 748 1
+1940 748 1
+1944 748 1
+1948 748 1
+1952 748 1
+5739 748 1
+5740 748 -1
+8324 748 38
+853 749 1
+861 749 -1
+889 749 -1
+893 749 1
+1953 749 1
+1957 749 1
+1961 749 1
+1965 749 1
+1969 749 1
+1973 749 1
+1977 749 1
+1981 749 1
+1985 749 1
+1989 749 1
+1993 749 1
+1997 749 1
+2001 749 1
+2005 749 1
+2009 749 1
+2013 749 1
+2017 749 1
+2021 749 1
+2025 749 1
+2029 749 1
+2033 749 1
+2037 749 1
+2041 749 1
+2045 749 1
+2049 749 1
+2053 749 1
+2057 749 1
+2061 749 1
+2065 749 1
+2069 749 1
+2073 749 1
+2077 749 1
+5741 749 -1
+5744 749 1
+8325 749 38
+854 750 1
+862 750 -1
+890 750 -1
+894 750 1
+1954 750 1
+1958 750 1
+1962 750 1
+1966 750 1
+1970 750 1
+1974 750 1
+1978 750 1
+1982 750 1
+1986 750 1
+1990 750 1
+1994 750 1
+1998 750 1
+2002 750 1
+2006 750 1
+2010 750 1
+2014 750 1
+2018 750 1
+2022 750 1
+2026 750 1
+2030 750 1
+2034 750 1
+2038 750 1
+2042 750 1
+2046 750 1
+2050 750 1
+2054 750 1
+2058 750 1
+2062 750 1
+2066 750 1
+2070 750 1
+2074 750 1
+2078 750 1
+5741 750 1
+5742 750 -1
+8326 750 38
+855 751 1
+863 751 -1
+891 751 -1
+895 751 1
+1955 751 1
+1959 751 1
+1963 751 1
+1967 751 1
+1971 751 1
+1975 751 1
+1979 751 1
+1983 751 1
+1987 751 1
+1991 751 1
+1995 751 1
+1999 751 1
+2003 751 1
+2007 751 1
+2011 751 1
+2015 751 1
+2019 751 1
+2023 751 1
+2027 751 1
+2031 751 1
+2035 751 1
+2039 751 1
+2043 751 1
+2047 751 1
+2051 751 1
+2055 751 1
+2059 751 1
+2063 751 1
+2067 751 1
+2071 751 1
+2075 751 1
+2079 751 1
+5742 751 1
+5743 751 -1
+8327 751 38
+856 752 1
+864 752 -1
+892 752 -1
+896 752 1
+1956 752 1
+1960 752 1
+1964 752 1
+1968 752 1
+1972 752 1
+1976 752 1
+1980 752 1
+1984 752 1
+1988 752 1
+1992 752 1
+1996 752 1
+2000 752 1
+2004 752 1
+2008 752 1
+2012 752 1
+2016 752 1
+2020 752 1
+2024 752 1
+2028 752 1
+2032 752 1
+2036 752 1
+2040 752 1
+2044 752 1
+2048 752 1
+2052 752 1
+2056 752 1
+2060 752 1
+2064 752 1
+2068 752 1
+2072 752 1
+2076 752 1
+2080 752 1
+5743 752 1
+5744 752 -1
+8328 752 38
+833 753 -1
+848 753 1
+897 753 1
+901 753 -1
+2081 753 1
+2085 753 1
+2089 753 1
+2093 753 1
+2097 753 1
+2101 753 1
+2105 753 1
+2109 753 1
+2113 753 1
+2117 753 1
+2121 753 1
+2125 753 1
+2129 753 1
+2133 753 1
+2137 753 1
+2141 753 1
+2145 753 1
+2149 753 1
+2153 753 1
+2157 753 1
+2161 753 1
+2165 753 1
+2169 753 1
+2173 753 1
+2177 753 1
+2181 753 1
+2185 753 1
+2189 753 1
+2193 753 1
+2197 753 1
+2201 753 1
+2205 753 1
+5745 753 -1
+5748 753 1
+8329 753 38
+834 754 -1
+845 754 1
+898 754 1
+902 754 -1
+2082 754 1
+2086 754 1
+2090 754 1
+2094 754 1
+2098 754 1
+2102 754 1
+2106 754 1
+2110 754 1
+2114 754 1
+2118 754 1
+2122 754 1
+2126 754 1
+2130 754 1
+2134 754 1
+2138 754 1
+2142 754 1
+2146 754 1
+2150 754 1
+2154 754 1
+2158 754 1
+2162 754 1
+2166 754 1
+2170 754 1
+2174 754 1
+2178 754 1
+2182 754 1
+2186 754 1
+2190 754 1
+2194 754 1
+2198 754 1
+2202 754 1
+2206 754 1
+5745 754 1
+5746 754 -1
+8330 754 38
+835 755 -1
+846 755 1
+899 755 1
+903 755 -1
+2083 755 1
+2087 755 1
+2091 755 1
+2095 755 1
+2099 755 1
+2103 755 1
+2107 755 1
+2111 755 1
+2115 755 1
+2119 755 1
+2123 755 1
+2127 755 1
+2131 755 1
+2135 755 1
+2139 755 1
+2143 755 1
+2147 755 1
+2151 755 1
+2155 755 1
+2159 755 1
+2163 755 1
+2167 755 1
+2171 755 1
+2175 755 1
+2179 755 1
+2183 755 1
+2187 755 1
+2191 755 1
+2195 755 1
+2199 755 1
+2203 755 1
+2207 755 1
+5746 755 1
+5747 755 -1
+8331 755 38
+836 756 -1
+847 756 1
+900 756 1
+904 756 -1
+2084 756 1
+2088 756 1
+2092 756 1
+2096 756 1
+2100 756 1
+2104 756 1
+2108 756 1
+2112 756 1
+2116 756 1
+2120 756 1
+2124 756 1
+2128 756 1
+2132 756 1
+2136 756 1
+2140 756 1
+2144 756 1
+2148 756 1
+2152 756 1
+2156 756 1
+2160 756 1
+2164 756 1
+2168 756 1
+2172 756 1
+2176 756 1
+2180 756 1
+2184 756 1
+2188 756 1
+2192 756 1
+2196 756 1
+2200 756 1
+2204 756 1
+2208 756 1
+5747 756 1
+5748 756 -1
+8332 756 38
+837 757 -1
+844 757 1
+897 757 -1
+901 757 1
+2209 757 1
+2213 757 1
+2217 757 1
+2221 757 1
+2225 757 1
+2229 757 1
+2233 757 1
+2237 757 1
+2241 757 1
+2245 757 1
+2249 757 1
+2253 757 1
+2257 757 1
+2261 757 1
+2265 757 1
+2269 757 1
+2273 757 1
+2277 757 1
+2281 757 1
+2285 757 1
+2289 757 1
+2293 757 1
+2297 757 1
+2301 757 1
+2305 757 1
+2309 757 1
+2313 757 1
+2317 757 1
+2321 757 1
+2325 757 1
+2329 757 1
+2333 757 1
+5749 757 -1
+5752 757 1
+8333 757 38
+838 758 -1
+841 758 1
+898 758 -1
+902 758 1
+2210 758 1
+2214 758 1
+2218 758 1
+2222 758 1
+2226 758 1
+2230 758 1
+2234 758 1
+2238 758 1
+2242 758 1
+2246 758 1
+2250 758 1
+2254 758 1
+2258 758 1
+2262 758 1
+2266 758 1
+2270 758 1
+2274 758 1
+2278 758 1
+2282 758 1
+2286 758 1
+2290 758 1
+2294 758 1
+2298 758 1
+2302 758 1
+2306 758 1
+2310 758 1
+2314 758 1
+2318 758 1
+2322 758 1
+2326 758 1
+2330 758 1
+2334 758 1
+5749 758 1
+5750 758 -1
+8334 758 38
+839 759 -1
+842 759 1
+899 759 -1
+903 759 1
+2211 759 1
+2215 759 1
+2219 759 1
+2223 759 1
+2227 759 1
+2231 759 1
+2235 759 1
+2239 759 1
+2243 759 1
+2247 759 1
+2251 759 1
+2255 759 1
+2259 759 1
+2263 759 1
+2267 759 1
+2271 759 1
+2275 759 1
+2279 759 1
+2283 759 1
+2287 759 1
+2291 759 1
+2295 759 1
+2299 759 1
+2303 759 1
+2307 759 1
+2311 759 1
+2315 759 1
+2319 759 1
+2323 759 1
+2327 759 1
+2331 759 1
+2335 759 1
+5750 759 1
+5751 759 -1
+8335 759 38
+840 760 -1
+843 760 1
+900 760 -1
+904 760 1
+2212 760 1
+2216 760 1
+2220 760 1
+2224 760 1
+2228 760 1
+2232 760 1
+2236 760 1
+2240 760 1
+2244 760 1
+2248 760 1
+2252 760 1
+2256 760 1
+2260 760 1
+2264 760 1
+2268 760 1
+2272 760 1
+2276 760 1
+2280 760 1
+2284 760 1
+2288 760 1
+2292 760 1
+2296 760 1
+2300 760 1
+2304 760 1
+2308 760 1
+2312 760 1
+2316 760 1
+2320 760 1
+2324 760 1
+2328 760 1
+2332 760 1
+2336 760 1
+5751 760 1
+5752 760 -1
+8336 760 38
+841 761 -1
+856 761 1
+905 761 1
+909 761 -1
+2337 761 1
+2341 761 1
+2345 761 1
+2349 761 1
+2353 761 1
+2357 761 1
+2361 761 1
+2365 761 1
+2369 761 1
+2373 761 1
+2377 761 1
+2381 761 1
+2385 761 1
+2389 761 1
+2393 761 1
+2397 761 1
+2401 761 1
+2405 761 1
+2409 761 1
+2413 761 1
+2417 761 1
+2421 761 1
+2425 761 1
+2429 761 1
+2433 761 1
+2437 761 1
+2441 761 1
+2445 761 1
+2449 761 1
+2453 761 1
+2457 761 1
+2461 761 1
+5753 761 -1
+5756 761 1
+8337 761 38
+842 762 -1
+853 762 1
+906 762 1
+910 762 -1
+2338 762 1
+2342 762 1
+2346 762 1
+2350 762 1
+2354 762 1
+2358 762 1
+2362 762 1
+2366 762 1
+2370 762 1
+2374 762 1
+2378 762 1
+2382 762 1
+2386 762 1
+2390 762 1
+2394 762 1
+2398 762 1
+2402 762 1
+2406 762 1
+2410 762 1
+2414 762 1
+2418 762 1
+2422 762 1
+2426 762 1
+2430 762 1
+2434 762 1
+2438 762 1
+2442 762 1
+2446 762 1
+2450 762 1
+2454 762 1
+2458 762 1
+2462 762 1
+5753 762 1
+5754 762 -1
+8338 762 38
+843 763 -1
+854 763 1
+907 763 1
+911 763 -1
+2339 763 1
+2343 763 1
+2347 763 1
+2351 763 1
+2355 763 1
+2359 763 1
+2363 763 1
+2367 763 1
+2371 763 1
+2375 763 1
+2379 763 1
+2383 763 1
+2387 763 1
+2391 763 1
+2395 763 1
+2399 763 1
+2403 763 1
+2407 763 1
+2411 763 1
+2415 763 1
+2419 763 1
+2423 763 1
+2427 763 1
+2431 763 1
+2435 763 1
+2439 763 1
+2443 763 1
+2447 763 1
+2451 763 1
+2455 763 1
+2459 763 1
+2463 763 1
+5754 763 1
+5755 763 -1
+8339 763 38
+844 764 -1
+855 764 1
+908 764 1
+912 764 -1
+2340 764 1
+2344 764 1
+2348 764 1
+2352 764 1
+2356 764 1
+2360 764 1
+2364 764 1
+2368 764 1
+2372 764 1
+2376 764 1
+2380 764 1
+2384 764 1
+2388 764 1
+2392 764 1
+2396 764 1
+2400 764 1
+2404 764 1
+2408 764 1
+2412 764 1
+2416 764 1
+2420 764 1
+2424 764 1
+2428 764 1
+2432 764 1
+2436 764 1
+2440 764 1
+2444 764 1
+2448 764 1
+2452 764 1
+2456 764 1
+2460 764 1
+2464 764 1
+5755 764 1
+5756 764 -1
+8340 764 38
+845 765 -1
+852 765 1
+905 765 -1
+909 765 1
+2465 765 1
+2469 765 1
+2473 765 1
+2477 765 1
+2481 765 1
+2485 765 1
+2489 765 1
+2493 765 1
+2497 765 1
+2501 765 1
+2505 765 1
+2509 765 1
+2513 765 1
+2517 765 1
+2521 765 1
+2525 765 1
+2529 765 1
+2533 765 1
+2537 765 1
+2541 765 1
+2545 765 1
+2549 765 1
+2553 765 1
+2557 765 1
+2561 765 1
+2565 765 1
+2569 765 1
+2573 765 1
+2577 765 1
+2581 765 1
+2585 765 1
+2589 765 1
+5757 765 -1
+5760 765 1
+8341 765 38
+846 766 -1
+849 766 1
+906 766 -1
+910 766 1
+2466 766 1
+2470 766 1
+2474 766 1
+2478 766 1
+2482 766 1
+2486 766 1
+2490 766 1
+2494 766 1
+2498 766 1
+2502 766 1
+2506 766 1
+2510 766 1
+2514 766 1
+2518 766 1
+2522 766 1
+2526 766 1
+2530 766 1
+2534 766 1
+2538 766 1
+2542 766 1
+2546 766 1
+2550 766 1
+2554 766 1
+2558 766 1
+2562 766 1
+2566 766 1
+2570 766 1
+2574 766 1
+2578 766 1
+2582 766 1
+2586 766 1
+2590 766 1
+5757 766 1
+5758 766 -1
+8342 766 38
+847 767 -1
+850 767 1
+907 767 -1
+911 767 1
+2467 767 1
+2471 767 1
+2475 767 1
+2479 767 1
+2483 767 1
+2487 767 1
+2491 767 1
+2495 767 1
+2499 767 1
+2503 767 1
+2507 767 1
+2511 767 1
+2515 767 1
+2519 767 1
+2523 767 1
+2527 767 1
+2531 767 1
+2535 767 1
+2539 767 1
+2543 767 1
+2547 767 1
+2551 767 1
+2555 767 1
+2559 767 1
+2563 767 1
+2567 767 1
+2571 767 1
+2575 767 1
+2579 767 1
+2583 767 1
+2587 767 1
+2591 767 1
+5758 767 1
+5759 767 -1
+8343 767 38
+848 768 -1
+851 768 1
+908 768 -1
+912 768 1
+2468 768 1
+2472 768 1
+2476 768 1
+2480 768 1
+2484 768 1
+2488 768 1
+2492 768 1
+2496 768 1
+2500 768 1
+2504 768 1
+2508 768 1
+2512 768 1
+2516 768 1
+2520 768 1
+2524 768 1
+2528 768 1
+2532 768 1
+2536 768 1
+2540 768 1
+2544 768 1
+2548 768 1
+2552 768 1
+2556 768 1
+2560 768 1
+2564 768 1
+2568 768 1
+2572 768 1
+2576 768 1
+2580 768 1
+2584 768 1
+2588 768 1
+2592 768 1
+5759 768 1
+5760 768 -1
+8344 768 38
+849 769 -1
+864 769 1
+913 769 1
+917 769 -1
+2593 769 1
+2597 769 1
+2601 769 1
+2605 769 1
+2609 769 1
+2613 769 1
+2617 769 1
+2621 769 1
+2625 769 1
+2629 769 1
+2633 769 1
+2637 769 1
+2641 769 1
+2645 769 1
+2649 769 1
+2653 769 1
+2657 769 1
+2661 769 1
+2665 769 1
+2669 769 1
+2673 769 1
+2677 769 1
+2681 769 1
+2685 769 1
+2689 769 1
+2693 769 1
+2697 769 1
+2701 769 1
+2705 769 1
+2709 769 1
+2713 769 1
+2717 769 1
+5761 769 -1
+5764 769 1
+8345 769 38
+850 770 -1
+861 770 1
+914 770 1
+918 770 -1
+2594 770 1
+2598 770 1
+2602 770 1
+2606 770 1
+2610 770 1
+2614 770 1
+2618 770 1
+2622 770 1
+2626 770 1
+2630 770 1
+2634 770 1
+2638 770 1
+2642 770 1
+2646 770 1
+2650 770 1
+2654 770 1
+2658 770 1
+2662 770 1
+2666 770 1
+2670 770 1
+2674 770 1
+2678 770 1
+2682 770 1
+2686 770 1
+2690 770 1
+2694 770 1
+2698 770 1
+2702 770 1
+2706 770 1
+2710 770 1
+2714 770 1
+2718 770 1
+5761 770 1
+5762 770 -1
+8346 770 38
+851 771 -1
+862 771 1
+915 771 1
+919 771 -1
+2595 771 1
+2599 771 1
+2603 771 1
+2607 771 1
+2611 771 1
+2615 771 1
+2619 771 1
+2623 771 1
+2627 771 1
+2631 771 1
+2635 771 1
+2639 771 1
+2643 771 1
+2647 771 1
+2651 771 1
+2655 771 1
+2659 771 1
+2663 771 1
+2667 771 1
+2671 771 1
+2675 771 1
+2679 771 1
+2683 771 1
+2687 771 1
+2691 771 1
+2695 771 1
+2699 771 1
+2703 771 1
+2707 771 1
+2711 771 1
+2715 771 1
+2719 771 1
+5762 771 1
+5763 771 -1
+8347 771 38
+852 772 -1
+863 772 1
+916 772 1
+920 772 -1
+2596 772 1
+2600 772 1
+2604 772 1
+2608 772 1
+2612 772 1
+2616 772 1
+2620 772 1
+2624 772 1
+2628 772 1
+2632 772 1
+2636 772 1
+2640 772 1
+2644 772 1
+2648 772 1
+2652 772 1
+2656 772 1
+2660 772 1
+2664 772 1
+2668 772 1
+2672 772 1
+2676 772 1
+2680 772 1
+2684 772 1
+2688 772 1
+2692 772 1
+2696 772 1
+2700 772 1
+2704 772 1
+2708 772 1
+2712 772 1
+2716 772 1
+2720 772 1
+5763 772 1
+5764 772 -1
+8348 772 38
+853 773 -1
+860 773 1
+913 773 -1
+917 773 1
+2721 773 1
+2725 773 1
+2729 773 1
+2733 773 1
+2737 773 1
+2741 773 1
+2745 773 1
+2749 773 1
+2753 773 1
+2757 773 1
+2761 773 1
+2765 773 1
+2769 773 1
+2773 773 1
+2777 773 1
+2781 773 1
+2785 773 1
+2789 773 1
+2793 773 1
+2797 773 1
+2801 773 1
+2805 773 1
+2809 773 1
+2813 773 1
+2817 773 1
+2821 773 1
+2825 773 1
+2829 773 1
+2833 773 1
+2837 773 1
+2841 773 1
+2845 773 1
+5765 773 -1
+5768 773 1
+8349 773 38
+854 774 -1
+857 774 1
+914 774 -1
+918 774 1
+2722 774 1
+2726 774 1
+2730 774 1
+2734 774 1
+2738 774 1
+2742 774 1
+2746 774 1
+2750 774 1
+2754 774 1
+2758 774 1
+2762 774 1
+2766 774 1
+2770 774 1
+2774 774 1
+2778 774 1
+2782 774 1
+2786 774 1
+2790 774 1
+2794 774 1
+2798 774 1
+2802 774 1
+2806 774 1
+2810 774 1
+2814 774 1
+2818 774 1
+2822 774 1
+2826 774 1
+2830 774 1
+2834 774 1
+2838 774 1
+2842 774 1
+2846 774 1
+5765 774 1
+5766 774 -1
+8350 774 38
+855 775 -1
+858 775 1
+915 775 -1
+919 775 1
+2723 775 1
+2727 775 1
+2731 775 1
+2735 775 1
+2739 775 1
+2743 775 1
+2747 775 1
+2751 775 1
+2755 775 1
+2759 775 1
+2763 775 1
+2767 775 1
+2771 775 1
+2775 775 1
+2779 775 1
+2783 775 1
+2787 775 1
+2791 775 1
+2795 775 1
+2799 775 1
+2803 775 1
+2807 775 1
+2811 775 1
+2815 775 1
+2819 775 1
+2823 775 1
+2827 775 1
+2831 775 1
+2835 775 1
+2839 775 1
+2843 775 1
+2847 775 1
+5766 775 1
+5767 775 -1
+8351 775 38
+856 776 -1
+859 776 1
+916 776 -1
+920 776 1
+2724 776 1
+2728 776 1
+2732 776 1
+2736 776 1
+2740 776 1
+2744 776 1
+2748 776 1
+2752 776 1
+2756 776 1
+2760 776 1
+2764 776 1
+2768 776 1
+2772 776 1
+2776 776 1
+2780 776 1
+2784 776 1
+2788 776 1
+2792 776 1
+2796 776 1
+2800 776 1
+2804 776 1
+2808 776 1
+2812 776 1
+2816 776 1
+2820 776 1
+2824 776 1
+2828 776 1
+2832 776 1
+2836 776 1
+2840 776 1
+2844 776 1
+2848 776 1
+5767 776 1
+5768 776 -1
+8352 776 38
+840 777 1
+857 777 -1
+921 777 1
+925 777 -1
+2849 777 1
+2853 777 1
+2857 777 1
+2861 777 1
+2865 777 1
+2869 777 1
+2873 777 1
+2877 777 1
+2881 777 1
+2885 777 1
+2889 777 1
+2893 777 1
+2897 777 1
+2901 777 1
+2905 777 1
+2909 777 1
+2913 777 1
+2917 777 1
+2921 777 1
+2925 777 1
+2929 777 1
+2933 777 1
+2937 777 1
+2941 777 1
+2945 777 1
+2949 777 1
+2953 777 1
+2957 777 1
+2961 777 1
+2965 777 1
+2969 777 1
+2973 777 1
+5769 777 -1
+5772 777 1
+8353 777 38
+837 778 1
+858 778 -1
+922 778 1
+926 778 -1
+2850 778 1
+2854 778 1
+2858 778 1
+2862 778 1
+2866 778 1
+2870 778 1
+2874 778 1
+2878 778 1
+2882 778 1
+2886 778 1
+2890 778 1
+2894 778 1
+2898 778 1
+2902 778 1
+2906 778 1
+2910 778 1
+2914 778 1
+2918 778 1
+2922 778 1
+2926 778 1
+2930 778 1
+2934 778 1
+2938 778 1
+2942 778 1
+2946 778 1
+2950 778 1
+2954 778 1
+2958 778 1
+2962 778 1
+2966 778 1
+2970 778 1
+2974 778 1
+5769 778 1
+5770 778 -1
+8354 778 38
+838 779 1
+859 779 -1
+923 779 1
+927 779 -1
+2851 779 1
+2855 779 1
+2859 779 1
+2863 779 1
+2867 779 1
+2871 779 1
+2875 779 1
+2879 779 1
+2883 779 1
+2887 779 1
+2891 779 1
+2895 779 1
+2899 779 1
+2903 779 1
+2907 779 1
+2911 779 1
+2915 779 1
+2919 779 1
+2923 779 1
+2927 779 1
+2931 779 1
+2935 779 1
+2939 779 1
+2943 779 1
+2947 779 1
+2951 779 1
+2955 779 1
+2959 779 1
+2963 779 1
+2967 779 1
+2971 779 1
+2975 779 1
+5770 779 1
+5771 779 -1
+8355 779 38
+839 780 1
+860 780 -1
+924 780 1
+928 780 -1
+2852 780 1
+2856 780 1
+2860 780 1
+2864 780 1
+2868 780 1
+2872 780 1
+2876 780 1
+2880 780 1
+2884 780 1
+2888 780 1
+2892 780 1
+2896 780 1
+2900 780 1
+2904 780 1
+2908 780 1
+2912 780 1
+2916 780 1
+2920 780 1
+2924 780 1
+2928 780 1
+2932 780 1
+2936 780 1
+2940 780 1
+2944 780 1
+2948 780 1
+2952 780 1
+2956 780 1
+2960 780 1
+2964 780 1
+2968 780 1
+2972 780 1
+2976 780 1
+5771 780 1
+5772 780 -1
+8356 780 38
+836 781 1
+861 781 -1
+921 781 -1
+925 781 1
+2977 781 1
+2981 781 1
+2985 781 1
+2989 781 1
+2993 781 1
+2997 781 1
+3001 781 1
+3005 781 1
+3009 781 1
+3013 781 1
+3017 781 1
+3021 781 1
+3025 781 1
+3029 781 1
+3033 781 1
+3037 781 1
+3041 781 1
+3045 781 1
+3049 781 1
+3053 781 1
+3057 781 1
+3061 781 1
+3065 781 1
+3069 781 1
+3073 781 1
+3077 781 1
+3081 781 1
+3085 781 1
+3089 781 1
+3093 781 1
+3097 781 1
+3101 781 1
+5773 781 -1
+5776 781 1
+8357 781 38
+833 782 1
+862 782 -1
+922 782 -1
+926 782 1
+2978 782 1
+2982 782 1
+2986 782 1
+2990 782 1
+2994 782 1
+2998 782 1
+3002 782 1
+3006 782 1
+3010 782 1
+3014 782 1
+3018 782 1
+3022 782 1
+3026 782 1
+3030 782 1
+3034 782 1
+3038 782 1
+3042 782 1
+3046 782 1
+3050 782 1
+3054 782 1
+3058 782 1
+3062 782 1
+3066 782 1
+3070 782 1
+3074 782 1
+3078 782 1
+3082 782 1
+3086 782 1
+3090 782 1
+3094 782 1
+3098 782 1
+3102 782 1
+5773 782 1
+5774 782 -1
+8358 782 38
+834 783 1
+863 783 -1
+923 783 -1
+927 783 1
+2979 783 1
+2983 783 1
+2987 783 1
+2991 783 1
+2995 783 1
+2999 783 1
+3003 783 1
+3007 783 1
+3011 783 1
+3015 783 1
+3019 783 1
+3023 783 1
+3027 783 1
+3031 783 1
+3035 783 1
+3039 783 1
+3043 783 1
+3047 783 1
+3051 783 1
+3055 783 1
+3059 783 1
+3063 783 1
+3067 783 1
+3071 783 1
+3075 783 1
+3079 783 1
+3083 783 1
+3087 783 1
+3091 783 1
+3095 783 1
+3099 783 1
+3103 783 1
+5774 783 1
+5775 783 -1
+8359 783 38
+835 784 1
+864 784 -1
+924 784 -1
+928 784 1
+2980 784 1
+2984 784 1
+2988 784 1
+2992 784 1
+2996 784 1
+3000 784 1
+3004 784 1
+3008 784 1
+3012 784 1
+3016 784 1
+3020 784 1
+3024 784 1
+3028 784 1
+3032 784 1
+3036 784 1
+3040 784 1
+3044 784 1
+3048 784 1
+3052 784 1
+3056 784 1
+3060 784 1
+3064 784 1
+3068 784 1
+3072 784 1
+3076 784 1
+3080 784 1
+3084 784 1
+3088 784 1
+3092 784 1
+3096 784 1
+3100 784 1
+3104 784 1
+5775 784 1
+5776 784 -1
+8360 784 38
+865 785 1
+873 785 1
+881 785 1
+889 785 1
+3105 785 1
+3109 785 1
+3113 785 1
+3117 785 1
+3121 785 1
+3125 785 1
+3129 785 1
+3133 785 1
+5777 785 -1
+5780 785 1
+8361 785 38
+866 786 1
+874 786 1
+882 786 1
+890 786 1
+3106 786 1
+3110 786 1
+3114 786 1
+3118 786 1
+3122 786 1
+3126 786 1
+3130 786 1
+3134 786 1
+5777 786 1
+5778 786 -1
+8362 786 38
+867 787 1
+875 787 1
+883 787 1
+891 787 1
+3107 787 1
+3111 787 1
+3115 787 1
+3119 787 1
+3123 787 1
+3127 787 1
+3131 787 1
+3135 787 1
+5778 787 1
+5779 787 -1
+8363 787 38
+868 788 1
+876 788 1
+884 788 1
+892 788 1
+3108 788 1
+3112 788 1
+3116 788 1
+3120 788 1
+3124 788 1
+3128 788 1
+3132 788 1
+3136 788 1
+5779 788 1
+5780 788 -1
+8364 788 38
+869 789 1
+877 789 1
+885 789 1
+893 789 1
+3137 789 1
+3141 789 1
+3145 789 1
+3149 789 1
+3153 789 1
+3157 789 1
+3161 789 1
+3165 789 1
+5781 789 -1
+5784 789 1
+8365 789 38
+870 790 1
+878 790 1
+886 790 1
+894 790 1
+3138 790 1
+3142 790 1
+3146 790 1
+3150 790 1
+3154 790 1
+3158 790 1
+3162 790 1
+3166 790 1
+5781 790 1
+5782 790 -1
+8366 790 38
+871 791 1
+879 791 1
+887 791 1
+895 791 1
+3139 791 1
+3143 791 1
+3147 791 1
+3151 791 1
+3155 791 1
+3159 791 1
+3163 791 1
+3167 791 1
+5782 791 1
+5783 791 -1
+8367 791 38
+872 792 1
+880 792 1
+888 792 1
+896 792 1
+3140 792 1
+3144 792 1
+3148 792 1
+3152 792 1
+3156 792 1
+3160 792 1
+3164 792 1
+3168 792 1
+5783 792 1
+5784 792 -1
+8368 792 38
+865 793 -1
+880 793 1
+897 793 1
+921 793 -1
+3169 793 1
+3173 793 1
+3177 793 1
+3181 793 1
+3185 793 1
+3189 793 1
+3193 793 1
+3197 793 1
+3201 793 1
+3205 793 1
+3209 793 1
+3213 793 1
+3217 793 1
+3221 793 1
+3225 793 1
+3229 793 1
+3233 793 1
+3237 793 1
+3241 793 1
+3245 793 1
+3249 793 1
+3253 793 1
+3257 793 1
+3261 793 1
+3265 793 1
+3269 793 1
+3273 793 1
+3277 793 1
+3281 793 1
+3285 793 1
+3289 793 1
+3293 793 1
+5785 793 -1
+5788 793 1
+8369 793 38
+866 794 -1
+877 794 1
+898 794 1
+922 794 -1
+3170 794 1
+3174 794 1
+3178 794 1
+3182 794 1
+3186 794 1
+3190 794 1
+3194 794 1
+3198 794 1
+3202 794 1
+3206 794 1
+3210 794 1
+3214 794 1
+3218 794 1
+3222 794 1
+3226 794 1
+3230 794 1
+3234 794 1
+3238 794 1
+3242 794 1
+3246 794 1
+3250 794 1
+3254 794 1
+3258 794 1
+3262 794 1
+3266 794 1
+3270 794 1
+3274 794 1
+3278 794 1
+3282 794 1
+3286 794 1
+3290 794 1
+3294 794 1
+5785 794 1
+5786 794 -1
+8370 794 38
+867 795 -1
+878 795 1
+899 795 1
+923 795 -1
+3171 795 1
+3175 795 1
+3179 795 1
+3183 795 1
+3187 795 1
+3191 795 1
+3195 795 1
+3199 795 1
+3203 795 1
+3207 795 1
+3211 795 1
+3215 795 1
+3219 795 1
+3223 795 1
+3227 795 1
+3231 795 1
+3235 795 1
+3239 795 1
+3243 795 1
+3247 795 1
+3251 795 1
+3255 795 1
+3259 795 1
+3263 795 1
+3267 795 1
+3271 795 1
+3275 795 1
+3279 795 1
+3283 795 1
+3287 795 1
+3291 795 1
+3295 795 1
+5786 795 1
+5787 795 -1
+8371 795 38
+868 796 -1
+879 796 1
+900 796 1
+924 796 -1
+3172 796 1
+3176 796 1
+3180 796 1
+3184 796 1
+3188 796 1
+3192 796 1
+3196 796 1
+3200 796 1
+3204 796 1
+3208 796 1
+3212 796 1
+3216 796 1
+3220 796 1
+3224 796 1
+3228 796 1
+3232 796 1
+3236 796 1
+3240 796 1
+3244 796 1
+3248 796 1
+3252 796 1
+3256 796 1
+3260 796 1
+3264 796 1
+3268 796 1
+3272 796 1
+3276 796 1
+3280 796 1
+3284 796 1
+3288 796 1
+3292 796 1
+3296 796 1
+5787 796 1
+5788 796 -1
+8372 796 38
+869 797 -1
+876 797 1
+901 797 1
+925 797 -1
+3297 797 1
+3301 797 1
+3305 797 1
+3309 797 1
+3313 797 1
+3317 797 1
+3321 797 1
+3325 797 1
+3329 797 1
+3333 797 1
+3337 797 1
+3341 797 1
+3345 797 1
+3349 797 1
+3353 797 1
+3357 797 1
+3361 797 1
+3365 797 1
+3369 797 1
+3373 797 1
+3377 797 1
+3381 797 1
+3385 797 1
+3389 797 1
+3393 797 1
+3397 797 1
+3401 797 1
+3405 797 1
+3409 797 1
+3413 797 1
+3417 797 1
+3421 797 1
+5789 797 -1
+5792 797 1
+8373 797 38
+870 798 -1
+873 798 1
+902 798 1
+926 798 -1
+3298 798 1
+3302 798 1
+3306 798 1
+3310 798 1
+3314 798 1
+3318 798 1
+3322 798 1
+3326 798 1
+3330 798 1
+3334 798 1
+3338 798 1
+3342 798 1
+3346 798 1
+3350 798 1
+3354 798 1
+3358 798 1
+3362 798 1
+3366 798 1
+3370 798 1
+3374 798 1
+3378 798 1
+3382 798 1
+3386 798 1
+3390 798 1
+3394 798 1
+3398 798 1
+3402 798 1
+3406 798 1
+3410 798 1
+3414 798 1
+3418 798 1
+3422 798 1
+5789 798 1
+5790 798 -1
+8374 798 38
+871 799 -1
+874 799 1
+903 799 1
+927 799 -1
+3299 799 1
+3303 799 1
+3307 799 1
+3311 799 1
+3315 799 1
+3319 799 1
+3323 799 1
+3327 799 1
+3331 799 1
+3335 799 1
+3339 799 1
+3343 799 1
+3347 799 1
+3351 799 1
+3355 799 1
+3359 799 1
+3363 799 1
+3367 799 1
+3371 799 1
+3375 799 1
+3379 799 1
+3383 799 1
+3387 799 1
+3391 799 1
+3395 799 1
+3399 799 1
+3403 799 1
+3407 799 1
+3411 799 1
+3415 799 1
+3419 799 1
+3423 799 1
+5790 799 1
+5791 799 -1
+8375 799 38
+872 800 -1
+875 800 1
+904 800 1
+928 800 -1
+3300 800 1
+3304 800 1
+3308 800 1
+3312 800 1
+3316 800 1
+3320 800 1
+3324 800 1
+3328 800 1
+3332 800 1
+3336 800 1
+3340 800 1
+3344 800 1
+3348 800 1
+3352 800 1
+3356 800 1
+3360 800 1
+3364 800 1
+3368 800 1
+3372 800 1
+3376 800 1
+3380 800 1
+3384 800 1
+3388 800 1
+3392 800 1
+3396 800 1
+3400 800 1
+3404 800 1
+3408 800 1
+3412 800 1
+3416 800 1
+3420 800 1
+3424 800 1
+5791 800 1
+5792 800 -1
+8376 800 38
+873 801 -1
+888 801 1
+897 801 -1
+905 801 1
+3425 801 1
+3429 801 1
+3433 801 1
+3437 801 1
+3441 801 1
+3445 801 1
+3449 801 1
+3453 801 1
+3457 801 1
+3461 801 1
+3465 801 1
+3469 801 1
+3473 801 1
+3477 801 1
+3481 801 1
+3485 801 1
+3489 801 1
+3493 801 1
+3497 801 1
+3501 801 1
+3505 801 1
+3509 801 1
+3513 801 1
+3517 801 1
+3521 801 1
+3525 801 1
+3529 801 1
+3533 801 1
+3537 801 1
+3541 801 1
+3545 801 1
+3549 801 1
+5793 801 -1
+5796 801 1
+8377 801 38
+874 802 -1
+885 802 1
+898 802 -1
+906 802 1
+3426 802 1
+3430 802 1
+3434 802 1
+3438 802 1
+3442 802 1
+3446 802 1
+3450 802 1
+3454 802 1
+3458 802 1
+3462 802 1
+3466 802 1
+3470 802 1
+3474 802 1
+3478 802 1
+3482 802 1
+3486 802 1
+3490 802 1
+3494 802 1
+3498 802 1
+3502 802 1
+3506 802 1
+3510 802 1
+3514 802 1
+3518 802 1
+3522 802 1
+3526 802 1
+3530 802 1
+3534 802 1
+3538 802 1
+3542 802 1
+3546 802 1
+3550 802 1
+5793 802 1
+5794 802 -1
+8378 802 38
+875 803 -1
+886 803 1
+899 803 -1
+907 803 1
+3427 803 1
+3431 803 1
+3435 803 1
+3439 803 1
+3443 803 1
+3447 803 1
+3451 803 1
+3455 803 1
+3459 803 1
+3463 803 1
+3467 803 1
+3471 803 1
+3475 803 1
+3479 803 1
+3483 803 1
+3487 803 1
+3491 803 1
+3495 803 1
+3499 803 1
+3503 803 1
+3507 803 1
+3511 803 1
+3515 803 1
+3519 803 1
+3523 803 1
+3527 803 1
+3531 803 1
+3535 803 1
+3539 803 1
+3543 803 1
+3547 803 1
+3551 803 1
+5794 803 1
+5795 803 -1
+8379 803 38
+876 804 -1
+887 804 1
+900 804 -1
+908 804 1
+3428 804 1
+3432 804 1
+3436 804 1
+3440 804 1
+3444 804 1
+3448 804 1
+3452 804 1
+3456 804 1
+3460 804 1
+3464 804 1
+3468 804 1
+3472 804 1
+3476 804 1
+3480 804 1
+3484 804 1
+3488 804 1
+3492 804 1
+3496 804 1
+3500 804 1
+3504 804 1
+3508 804 1
+3512 804 1
+3516 804 1
+3520 804 1
+3524 804 1
+3528 804 1
+3532 804 1
+3536 804 1
+3540 804 1
+3544 804 1
+3548 804 1
+3552 804 1
+5795 804 1
+5796 804 -1
+8380 804 38
+877 805 -1
+884 805 1
+901 805 -1
+909 805 1
+3553 805 1
+3557 805 1
+3561 805 1
+3565 805 1
+3569 805 1
+3573 805 1
+3577 805 1
+3581 805 1
+3585 805 1
+3589 805 1
+3593 805 1
+3597 805 1
+3601 805 1
+3605 805 1
+3609 805 1
+3613 805 1
+3617 805 1
+3621 805 1
+3625 805 1
+3629 805 1
+3633 805 1
+3637 805 1
+3641 805 1
+3645 805 1
+3649 805 1
+3653 805 1
+3657 805 1
+3661 805 1
+3665 805 1
+3669 805 1
+3673 805 1
+3677 805 1
+5797 805 -1
+5800 805 1
+8381 805 38
+878 806 -1
+881 806 1
+902 806 -1
+910 806 1
+3554 806 1
+3558 806 1
+3562 806 1
+3566 806 1
+3570 806 1
+3574 806 1
+3578 806 1
+3582 806 1
+3586 806 1
+3590 806 1
+3594 806 1
+3598 806 1
+3602 806 1
+3606 806 1
+3610 806 1
+3614 806 1
+3618 806 1
+3622 806 1
+3626 806 1
+3630 806 1
+3634 806 1
+3638 806 1
+3642 806 1
+3646 806 1
+3650 806 1
+3654 806 1
+3658 806 1
+3662 806 1
+3666 806 1
+3670 806 1
+3674 806 1
+3678 806 1
+5797 806 1
+5798 806 -1
+8382 806 38
+879 807 -1
+882 807 1
+903 807 -1
+911 807 1
+3555 807 1
+3559 807 1
+3563 807 1
+3567 807 1
+3571 807 1
+3575 807 1
+3579 807 1
+3583 807 1
+3587 807 1
+3591 807 1
+3595 807 1
+3599 807 1
+3603 807 1
+3607 807 1
+3611 807 1
+3615 807 1
+3619 807 1
+3623 807 1
+3627 807 1
+3631 807 1
+3635 807 1
+3639 807 1
+3643 807 1
+3647 807 1
+3651 807 1
+3655 807 1
+3659 807 1
+3663 807 1
+3667 807 1
+3671 807 1
+3675 807 1
+3679 807 1
+5798 807 1
+5799 807 -1
+8383 807 38
+880 808 -1
+883 808 1
+904 808 -1
+912 808 1
+3556 808 1
+3560 808 1
+3564 808 1
+3568 808 1
+3572 808 1
+3576 808 1
+3580 808 1
+3584 808 1
+3588 808 1
+3592 808 1
+3596 808 1
+3600 808 1
+3604 808 1
+3608 808 1
+3612 808 1
+3616 808 1
+3620 808 1
+3624 808 1
+3628 808 1
+3632 808 1
+3636 808 1
+3640 808 1
+3644 808 1
+3648 808 1
+3652 808 1
+3656 808 1
+3660 808 1
+3664 808 1
+3668 808 1
+3672 808 1
+3676 808 1
+3680 808 1
+5799 808 1
+5800 808 -1
+8384 808 38
+881 809 -1
+896 809 1
+905 809 -1
+913 809 1
+3681 809 1
+3685 809 1
+3689 809 1
+3693 809 1
+3697 809 1
+3701 809 1
+3705 809 1
+3709 809 1
+3713 809 1
+3717 809 1
+3721 809 1
+3725 809 1
+3729 809 1
+3733 809 1
+3737 809 1
+3741 809 1
+3745 809 1
+3749 809 1
+3753 809 1
+3757 809 1
+3761 809 1
+3765 809 1
+3769 809 1
+3773 809 1
+3777 809 1
+3781 809 1
+3785 809 1
+3789 809 1
+3793 809 1
+3797 809 1
+3801 809 1
+3805 809 1
+5801 809 -1
+5804 809 1
+8385 809 38
+882 810 -1
+893 810 1
+906 810 -1
+914 810 1
+3682 810 1
+3686 810 1
+3690 810 1
+3694 810 1
+3698 810 1
+3702 810 1
+3706 810 1
+3710 810 1
+3714 810 1
+3718 810 1
+3722 810 1
+3726 810 1
+3730 810 1
+3734 810 1
+3738 810 1
+3742 810 1
+3746 810 1
+3750 810 1
+3754 810 1
+3758 810 1
+3762 810 1
+3766 810 1
+3770 810 1
+3774 810 1
+3778 810 1
+3782 810 1
+3786 810 1
+3790 810 1
+3794 810 1
+3798 810 1
+3802 810 1
+3806 810 1
+5801 810 1
+5802 810 -1
+8386 810 38
+883 811 -1
+894 811 1
+907 811 -1
+915 811 1
+3683 811 1
+3687 811 1
+3691 811 1
+3695 811 1
+3699 811 1
+3703 811 1
+3707 811 1
+3711 811 1
+3715 811 1
+3719 811 1
+3723 811 1
+3727 811 1
+3731 811 1
+3735 811 1
+3739 811 1
+3743 811 1
+3747 811 1
+3751 811 1
+3755 811 1
+3759 811 1
+3763 811 1
+3767 811 1
+3771 811 1
+3775 811 1
+3779 811 1
+3783 811 1
+3787 811 1
+3791 811 1
+3795 811 1
+3799 811 1
+3803 811 1
+3807 811 1
+5802 811 1
+5803 811 -1
+8387 811 38
+884 812 -1
+895 812 1
+908 812 -1
+916 812 1
+3684 812 1
+3688 812 1
+3692 812 1
+3696 812 1
+3700 812 1
+3704 812 1
+3708 812 1
+3712 812 1
+3716 812 1
+3720 812 1
+3724 812 1
+3728 812 1
+3732 812 1
+3736 812 1
+3740 812 1
+3744 812 1
+3748 812 1
+3752 812 1
+3756 812 1
+3760 812 1
+3764 812 1
+3768 812 1
+3772 812 1
+3776 812 1
+3780 812 1
+3784 812 1
+3788 812 1
+3792 812 1
+3796 812 1
+3800 812 1
+3804 812 1
+3808 812 1
+5803 812 1
+5804 812 -1
+8388 812 38
+885 813 -1
+892 813 1
+909 813 -1
+917 813 1
+3809 813 1
+3813 813 1
+3817 813 1
+3821 813 1
+3825 813 1
+3829 813 1
+3833 813 1
+3837 813 1
+3841 813 1
+3845 813 1
+3849 813 1
+3853 813 1
+3857 813 1
+3861 813 1
+3865 813 1
+3869 813 1
+3873 813 1
+3877 813 1
+3881 813 1
+3885 813 1
+3889 813 1
+3893 813 1
+3897 813 1
+3901 813 1
+3905 813 1
+3909 813 1
+3913 813 1
+3917 813 1
+3921 813 1
+3925 813 1
+3929 813 1
+3933 813 1
+5805 813 -1
+5808 813 1
+8389 813 38
+886 814 -1
+889 814 1
+910 814 -1
+918 814 1
+3810 814 1
+3814 814 1
+3818 814 1
+3822 814 1
+3826 814 1
+3830 814 1
+3834 814 1
+3838 814 1
+3842 814 1
+3846 814 1
+3850 814 1
+3854 814 1
+3858 814 1
+3862 814 1
+3866 814 1
+3870 814 1
+3874 814 1
+3878 814 1
+3882 814 1
+3886 814 1
+3890 814 1
+3894 814 1
+3898 814 1
+3902 814 1
+3906 814 1
+3910 814 1
+3914 814 1
+3918 814 1
+3922 814 1
+3926 814 1
+3930 814 1
+3934 814 1
+5805 814 1
+5806 814 -1
+8390 814 38
+887 815 -1
+890 815 1
+911 815 -1
+919 815 1
+3811 815 1
+3815 815 1
+3819 815 1
+3823 815 1
+3827 815 1
+3831 815 1
+3835 815 1
+3839 815 1
+3843 815 1
+3847 815 1
+3851 815 1
+3855 815 1
+3859 815 1
+3863 815 1
+3867 815 1
+3871 815 1
+3875 815 1
+3879 815 1
+3883 815 1
+3887 815 1
+3891 815 1
+3895 815 1
+3899 815 1
+3903 815 1
+3907 815 1
+3911 815 1
+3915 815 1
+3919 815 1
+3923 815 1
+3927 815 1
+3931 815 1
+3935 815 1
+5806 815 1
+5807 815 -1
+8391 815 38
+888 816 -1
+891 816 1
+912 816 -1
+920 816 1
+3812 816 1
+3816 816 1
+3820 816 1
+3824 816 1
+3828 816 1
+3832 816 1
+3836 816 1
+3840 816 1
+3844 816 1
+3848 816 1
+3852 816 1
+3856 816 1
+3860 816 1
+3864 816 1
+3868 816 1
+3872 816 1
+3876 816 1
+3880 816 1
+3884 816 1
+3888 816 1
+3892 816 1
+3896 816 1
+3900 816 1
+3904 816 1
+3908 816 1
+3912 816 1
+3916 816 1
+3920 816 1
+3924 816 1
+3928 816 1
+3932 816 1
+3936 816 1
+5807 816 1
+5808 816 -1
+8392 816 38
+872 817 1
+889 817 -1
+913 817 -1
+921 817 1
+3937 817 1
+3941 817 1
+3945 817 1
+3949 817 1
+3953 817 1
+3957 817 1
+3961 817 1
+3965 817 1
+3969 817 1
+3973 817 1
+3977 817 1
+3981 817 1
+3985 817 1
+3989 817 1
+3993 817 1
+3997 817 1
+4001 817 1
+4005 817 1
+4009 817 1
+4013 817 1
+4017 817 1
+4021 817 1
+4025 817 1
+4029 817 1
+4033 817 1
+4037 817 1
+4041 817 1
+4045 817 1
+4049 817 1
+4053 817 1
+4057 817 1
+4061 817 1
+5809 817 -1
+5812 817 1
+8393 817 38
+869 818 1
+890 818 -1
+914 818 -1
+922 818 1
+3938 818 1
+3942 818 1
+3946 818 1
+3950 818 1
+3954 818 1
+3958 818 1
+3962 818 1
+3966 818 1
+3970 818 1
+3974 818 1
+3978 818 1
+3982 818 1
+3986 818 1
+3990 818 1
+3994 818 1
+3998 818 1
+4002 818 1
+4006 818 1
+4010 818 1
+4014 818 1
+4018 818 1
+4022 818 1
+4026 818 1
+4030 818 1
+4034 818 1
+4038 818 1
+4042 818 1
+4046 818 1
+4050 818 1
+4054 818 1
+4058 818 1
+4062 818 1
+5809 818 1
+5810 818 -1
+8394 818 38
+870 819 1
+891 819 -1
+915 819 -1
+923 819 1
+3939 819 1
+3943 819 1
+3947 819 1
+3951 819 1
+3955 819 1
+3959 819 1
+3963 819 1
+3967 819 1
+3971 819 1
+3975 819 1
+3979 819 1
+3983 819 1
+3987 819 1
+3991 819 1
+3995 819 1
+3999 819 1
+4003 819 1
+4007 819 1
+4011 819 1
+4015 819 1
+4019 819 1
+4023 819 1
+4027 819 1
+4031 819 1
+4035 819 1
+4039 819 1
+4043 819 1
+4047 819 1
+4051 819 1
+4055 819 1
+4059 819 1
+4063 819 1
+5810 819 1
+5811 819 -1
+8395 819 38
+871 820 1
+892 820 -1
+916 820 -1
+924 820 1
+3940 820 1
+3944 820 1
+3948 820 1
+3952 820 1
+3956 820 1
+3960 820 1
+3964 820 1
+3968 820 1
+3972 820 1
+3976 820 1
+3980 820 1
+3984 820 1
+3988 820 1
+3992 820 1
+3996 820 1
+4000 820 1
+4004 820 1
+4008 820 1
+4012 820 1
+4016 820 1
+4020 820 1
+4024 820 1
+4028 820 1
+4032 820 1
+4036 820 1
+4040 820 1
+4044 820 1
+4048 820 1
+4052 820 1
+4056 820 1
+4060 820 1
+4064 820 1
+5811 820 1
+5812 820 -1
+8396 820 38
+868 821 1
+893 821 -1
+917 821 -1
+925 821 1
+4065 821 1
+4069 821 1
+4073 821 1
+4077 821 1
+4081 821 1
+4085 821 1
+4089 821 1
+4093 821 1
+4097 821 1
+4101 821 1
+4105 821 1
+4109 821 1
+4113 821 1
+4117 821 1
+4121 821 1
+4125 821 1
+4129 821 1
+4133 821 1
+4137 821 1
+4141 821 1
+4145 821 1
+4149 821 1
+4153 821 1
+4157 821 1
+4161 821 1
+4165 821 1
+4169 821 1
+4173 821 1
+4177 821 1
+4181 821 1
+4185 821 1
+4189 821 1
+5813 821 -1
+5816 821 1
+8397 821 38
+865 822 1
+894 822 -1
+918 822 -1
+926 822 1
+4066 822 1
+4070 822 1
+4074 822 1
+4078 822 1
+4082 822 1
+4086 822 1
+4090 822 1
+4094 822 1
+4098 822 1
+4102 822 1
+4106 822 1
+4110 822 1
+4114 822 1
+4118 822 1
+4122 822 1
+4126 822 1
+4130 822 1
+4134 822 1
+4138 822 1
+4142 822 1
+4146 822 1
+4150 822 1
+4154 822 1
+4158 822 1
+4162 822 1
+4166 822 1
+4170 822 1
+4174 822 1
+4178 822 1
+4182 822 1
+4186 822 1
+4190 822 1
+5813 822 1
+5814 822 -1
+8398 822 38
+866 823 1
+895 823 -1
+919 823 -1
+927 823 1
+4067 823 1
+4071 823 1
+4075 823 1
+4079 823 1
+4083 823 1
+4087 823 1
+4091 823 1
+4095 823 1
+4099 823 1
+4103 823 1
+4107 823 1
+4111 823 1
+4115 823 1
+4119 823 1
+4123 823 1
+4127 823 1
+4131 823 1
+4135 823 1
+4139 823 1
+4143 823 1
+4147 823 1
+4151 823 1
+4155 823 1
+4159 823 1
+4163 823 1
+4167 823 1
+4171 823 1
+4175 823 1
+4179 823 1
+4183 823 1
+4187 823 1
+4191 823 1
+5814 823 1
+5815 823 -1
+8399 823 38
+867 824 1
+896 824 -1
+920 824 -1
+928 824 1
+4068 824 1
+4072 824 1
+4076 824 1
+4080 824 1
+4084 824 1
+4088 824 1
+4092 824 1
+4096 824 1
+4100 824 1
+4104 824 1
+4108 824 1
+4112 824 1
+4116 824 1
+4120 824 1
+4124 824 1
+4128 824 1
+4132 824 1
+4136 824 1
+4140 824 1
+4144 824 1
+4148 824 1
+4152 824 1
+4156 824 1
+4160 824 1
+4164 824 1
+4168 824 1
+4172 824 1
+4176 824 1
+4180 824 1
+4184 824 1
+4188 824 1
+4192 824 1
+5815 824 1
+5816 824 -1
+8400 824 38
+897 825 1
+912 825 1
+915 825 1
+926 825 1
+4193 825 1
+4197 825 1
+4201 825 1
+4205 825 1
+5817 825 -1
+5820 825 1
+8401 825 38
+898 826 1
+909 826 1
+916 826 1
+927 826 1
+4194 826 1
+4198 826 1
+4202 826 1
+4206 826 1
+5817 826 1
+5818 826 -1
+8402 826 38
+899 827 1
+910 827 1
+913 827 1
+928 827 1
+4195 827 1
+4199 827 1
+4203 827 1
+4207 827 1
+5818 827 1
+5819 827 -1
+8403 827 38
+900 828 1
+911 828 1
+914 828 1
+925 828 1
+4196 828 1
+4200 828 1
+4204 828 1
+4208 828 1
+5819 828 1
+5820 828 -1
+8404 828 38
+901 829 1
+908 829 1
+919 829 1
+922 829 1
+4209 829 1
+4213 829 1
+4217 829 1
+4221 829 1
+5821 829 -1
+5824 829 1
+8405 829 38
+902 830 1
+905 830 1
+920 830 1
+923 830 1
+4210 830 1
+4214 830 1
+4218 830 1
+4222 830 1
+5821 830 1
+5822 830 -1
+8406 830 38
+903 831 1
+906 831 1
+917 831 1
+924 831 1
+4211 831 1
+4215 831 1
+4219 831 1
+4223 831 1
+5822 831 1
+5823 831 -1
+8407 831 38
+904 832 1
+907 832 1
+918 832 1
+921 832 1
+4212 832 1
+4216 832 1
+4220 832 1
+4224 832 1
+5823 832 1
+5824 832 -1
+8408 832 38
+929 833 -1
+1025 833 1
+1057 833 -1
+1061 833 -1
+1121 833 -1
+1125 833 -1
+1185 833 -1
+1189 833 -1
+1249 833 -1
+1253 833 -1
+4225 833 1
+4253 833 -1
+5825 833 -1
+5828 833 1
+8409 833 38
+930 834 -1
+1026 834 1
+1058 834 -1
+1062 834 -1
+1122 834 -1
+1126 834 -1
+1186 834 -1
+1190 834 -1
+1250 834 -1
+1254 834 -1
+4226 834 1
+4254 834 -1
+5825 834 1
+5826 834 -1
+8410 834 38
+931 835 -1
+1027 835 1
+1059 835 -1
+1063 835 -1
+1123 835 -1
+1127 835 -1
+1187 835 -1
+1191 835 -1
+1251 835 -1
+1255 835 -1
+4227 835 1
+4255 835 -1
+5826 835 1
+5827 835 -1
+8411 835 38
+932 836 -1
+1028 836 1
+1060 836 -1
+1064 836 -1
+1124 836 -1
+1128 836 -1
+1188 836 -1
+1192 836 -1
+1252 836 -1
+1256 836 -1
+4228 836 1
+4256 836 -1
+5827 836 1
+5828 836 -1
+8412 836 38
+933 837 -1
+1029 837 1
+1065 837 -1
+1069 837 -1
+1129 837 -1
+1133 837 -1
+1193 837 -1
+1197 837 -1
+1257 837 -1
+1261 837 -1
+4225 837 -1
+4229 837 1
+5829 837 -1
+5832 837 1
+8413 837 38
+934 838 -1
+1030 838 1
+1066 838 -1
+1070 838 -1
+1130 838 -1
+1134 838 -1
+1194 838 -1
+1198 838 -1
+1258 838 -1
+1262 838 -1
+4226 838 -1
+4230 838 1
+5829 838 1
+5830 838 -1
+8414 838 38
+935 839 -1
+1031 839 1
+1067 839 -1
+1071 839 -1
+1131 839 -1
+1135 839 -1
+1195 839 -1
+1199 839 -1
+1259 839 -1
+1263 839 -1
+4227 839 -1
+4231 839 1
+5830 839 1
+5831 839 -1
+8415 839 38
+936 840 -1
+1032 840 1
+1068 840 -1
+1072 840 -1
+1132 840 -1
+1136 840 -1
+1196 840 -1
+1200 840 -1
+1260 840 -1
+1264 840 -1
+4228 840 -1
+4232 840 1
+5831 840 1
+5832 840 -1
+8416 840 38
+937 841 -1
+1033 841 1
+1073 841 -1
+1077 841 -1
+1137 841 -1
+1141 841 -1
+1201 841 -1
+1205 841 -1
+1265 841 -1
+1269 841 -1
+4229 841 -1
+4233 841 1
+5833 841 -1
+5836 841 1
+8417 841 38
+938 842 -1
+1034 842 1
+1074 842 -1
+1078 842 -1
+1138 842 -1
+1142 842 -1
+1202 842 -1
+1206 842 -1
+1266 842 -1
+1270 842 -1
+4230 842 -1
+4234 842 1
+5833 842 1
+5834 842 -1
+8418 842 38
+939 843 -1
+1035 843 1
+1075 843 -1
+1079 843 -1
+1139 843 -1
+1143 843 -1
+1203 843 -1
+1207 843 -1
+1267 843 -1
+1271 843 -1
+4231 843 -1
+4235 843 1
+5834 843 1
+5835 843 -1
+8419 843 38
+940 844 -1
+1036 844 1
+1076 844 -1
+1080 844 -1
+1140 844 -1
+1144 844 -1
+1204 844 -1
+1208 844 -1
+1268 844 -1
+1272 844 -1
+4232 844 -1
+4236 844 1
+5835 844 1
+5836 844 -1
+8420 844 38
+941 845 -1
+1037 845 1
+1081 845 -1
+1085 845 -1
+1145 845 -1
+1149 845 -1
+1209 845 -1
+1213 845 -1
+1273 845 -1
+1277 845 -1
+4233 845 -1
+4237 845 1
+5837 845 -1
+5840 845 1
+8421 845 38
+942 846 -1
+1038 846 1
+1082 846 -1
+1086 846 -1
+1146 846 -1
+1150 846 -1
+1210 846 -1
+1214 846 -1
+1274 846 -1
+1278 846 -1
+4234 846 -1
+4238 846 1
+5837 846 1
+5838 846 -1
+8422 846 38
+943 847 -1
+1039 847 1
+1083 847 -1
+1087 847 -1
+1147 847 -1
+1151 847 -1
+1211 847 -1
+1215 847 -1
+1275 847 -1
+1279 847 -1
+4235 847 -1
+4239 847 1
+5838 847 1
+5839 847 -1
+8423 847 38
+944 848 -1
+1040 848 1
+1084 848 -1
+1088 848 -1
+1148 848 -1
+1152 848 -1
+1212 848 -1
+1216 848 -1
+1276 848 -1
+1280 848 -1
+4236 848 -1
+4240 848 1
+5839 848 1
+5840 848 -1
+8424 848 38
+945 849 -1
+1041 849 1
+1089 849 -1
+1093 849 -1
+1153 849 -1
+1157 849 -1
+1217 849 -1
+1221 849 -1
+1281 849 -1
+1285 849 -1
+4237 849 -1
+4241 849 1
+5841 849 -1
+5844 849 1
+8425 849 38
+946 850 -1
+1042 850 1
+1090 850 -1
+1094 850 -1
+1154 850 -1
+1158 850 -1
+1218 850 -1
+1222 850 -1
+1282 850 -1
+1286 850 -1
+4238 850 -1
+4242 850 1
+5841 850 1
+5842 850 -1
+8426 850 38
+947 851 -1
+1043 851 1
+1091 851 -1
+1095 851 -1
+1155 851 -1
+1159 851 -1
+1219 851 -1
+1223 851 -1
+1283 851 -1
+1287 851 -1
+4239 851 -1
+4243 851 1
+5842 851 1
+5843 851 -1
+8427 851 38
+948 852 -1
+1044 852 1
+1092 852 -1
+1096 852 -1
+1156 852 -1
+1160 852 -1
+1220 852 -1
+1224 852 -1
+1284 852 -1
+1288 852 -1
+4240 852 -1
+4244 852 1
+5843 852 1
+5844 852 -1
+8428 852 38
+949 853 -1
+1045 853 1
+1097 853 -1
+1101 853 -1
+1161 853 -1
+1165 853 -1
+1225 853 -1
+1229 853 -1
+1289 853 -1
+1293 853 -1
+4241 853 -1
+4245 853 1
+5845 853 -1
+5848 853 1
+8429 853 38
+950 854 -1
+1046 854 1
+1098 854 -1
+1102 854 -1
+1162 854 -1
+1166 854 -1
+1226 854 -1
+1230 854 -1
+1290 854 -1
+1294 854 -1
+4242 854 -1
+4246 854 1
+5845 854 1
+5846 854 -1
+8430 854 38
+951 855 -1
+1047 855 1
+1099 855 -1
+1103 855 -1
+1163 855 -1
+1167 855 -1
+1227 855 -1
+1231 855 -1
+1291 855 -1
+1295 855 -1
+4243 855 -1
+4247 855 1
+5846 855 1
+5847 855 -1
+8431 855 38
+952 856 -1
+1048 856 1
+1100 856 -1
+1104 856 -1
+1164 856 -1
+1168 856 -1
+1228 856 -1
+1232 856 -1
+1292 856 -1
+1296 856 -1
+4244 856 -1
+4248 856 1
+5847 856 1
+5848 856 -1
+8432 856 38
+953 857 -1
+1049 857 1
+1105 857 -1
+1109 857 -1
+1169 857 -1
+1173 857 -1
+1233 857 -1
+1237 857 -1
+1297 857 -1
+1301 857 -1
+4245 857 -1
+4249 857 1
+5849 857 -1
+5852 857 1
+8433 857 38
+954 858 -1
+1050 858 1
+1106 858 -1
+1110 858 -1
+1170 858 -1
+1174 858 -1
+1234 858 -1
+1238 858 -1
+1298 858 -1
+1302 858 -1
+4246 858 -1
+4250 858 1
+5849 858 1
+5850 858 -1
+8434 858 38
+955 859 -1
+1051 859 1
+1107 859 -1
+1111 859 -1
+1171 859 -1
+1175 859 -1
+1235 859 -1
+1239 859 -1
+1299 859 -1
+1303 859 -1
+4247 859 -1
+4251 859 1
+5850 859 1
+5851 859 -1
+8435 859 38
+956 860 -1
+1052 860 1
+1108 860 -1
+1112 860 -1
+1172 860 -1
+1176 860 -1
+1236 860 -1
+1240 860 -1
+1300 860 -1
+1304 860 -1
+4248 860 -1
+4252 860 1
+5851 860 1
+5852 860 -1
+8436 860 38
+957 861 -1
+1053 861 1
+1113 861 -1
+1117 861 -1
+1177 861 -1
+1181 861 -1
+1241 861 -1
+1245 861 -1
+1305 861 -1
+1309 861 -1
+4249 861 -1
+4253 861 1
+5853 861 -1
+5856 861 1
+8437 861 38
+958 862 -1
+1054 862 1
+1114 862 -1
+1118 862 -1
+1178 862 -1
+1182 862 -1
+1242 862 -1
+1246 862 -1
+1306 862 -1
+1310 862 -1
+4250 862 -1
+4254 862 1
+5853 862 1
+5854 862 -1
+8438 862 38
+959 863 -1
+1055 863 1
+1115 863 -1
+1119 863 -1
+1179 863 -1
+1183 863 -1
+1243 863 -1
+1247 863 -1
+1307 863 -1
+1311 863 -1
+4251 863 -1
+4255 863 1
+5854 863 1
+5855 863 -1
+8439 863 38
+960 864 -1
+1056 864 1
+1116 864 -1
+1120 864 -1
+1180 864 -1
+1184 864 -1
+1244 864 -1
+1248 864 -1
+1308 864 -1
+1312 864 -1
+4252 864 -1
+4256 864 1
+5855 864 1
+5856 864 -1
+8440 864 38
+929 865 1
+961 865 -1
+1313 865 -1
+1317 865 -1
+1377 865 -1
+1381 865 -1
+1441 865 -1
+1445 865 -1
+1505 865 -1
+1509 865 -1
+4257 865 1
+4285 865 -1
+5857 865 -1
+5860 865 1
+8441 865 38
+930 866 1
+962 866 -1
+1314 866 -1
+1318 866 -1
+1378 866 -1
+1382 866 -1
+1442 866 -1
+1446 866 -1
+1506 866 -1
+1510 866 -1
+4258 866 1
+4286 866 -1
+5857 866 1
+5858 866 -1
+8442 866 38
+931 867 1
+963 867 -1
+1315 867 -1
+1319 867 -1
+1379 867 -1
+1383 867 -1
+1443 867 -1
+1447 867 -1
+1507 867 -1
+1511 867 -1
+4259 867 1
+4287 867 -1
+5858 867 1
+5859 867 -1
+8443 867 38
+932 868 1
+964 868 -1
+1316 868 -1
+1320 868 -1
+1380 868 -1
+1384 868 -1
+1444 868 -1
+1448 868 -1
+1508 868 -1
+1512 868 -1
+4260 868 1
+4288 868 -1
+5859 868 1
+5860 868 -1
+8444 868 38
+933 869 1
+965 869 -1
+1321 869 -1
+1325 869 -1
+1385 869 -1
+1389 869 -1
+1449 869 -1
+1453 869 -1
+1513 869 -1
+1517 869 -1
+4257 869 -1
+4261 869 1
+5861 869 -1
+5864 869 1
+8445 869 38
+934 870 1
+966 870 -1
+1322 870 -1
+1326 870 -1
+1386 870 -1
+1390 870 -1
+1450 870 -1
+1454 870 -1
+1514 870 -1
+1518 870 -1
+4258 870 -1
+4262 870 1
+5861 870 1
+5862 870 -1
+8446 870 38
+935 871 1
+967 871 -1
+1323 871 -1
+1327 871 -1
+1387 871 -1
+1391 871 -1
+1451 871 -1
+1455 871 -1
+1515 871 -1
+1519 871 -1
+4259 871 -1
+4263 871 1
+5862 871 1
+5863 871 -1
+8447 871 38
+936 872 1
+968 872 -1
+1324 872 -1
+1328 872 -1
+1388 872 -1
+1392 872 -1
+1452 872 -1
+1456 872 -1
+1516 872 -1
+1520 872 -1
+4260 872 -1
+4264 872 1
+5863 872 1
+5864 872 -1
+8448 872 38
+937 873 1
+969 873 -1
+1329 873 -1
+1333 873 -1
+1393 873 -1
+1397 873 -1
+1457 873 -1
+1461 873 -1
+1521 873 -1
+1525 873 -1
+4261 873 -1
+4265 873 1
+5865 873 -1
+5868 873 1
+8449 873 38
+938 874 1
+970 874 -1
+1330 874 -1
+1334 874 -1
+1394 874 -1
+1398 874 -1
+1458 874 -1
+1462 874 -1
+1522 874 -1
+1526 874 -1
+4262 874 -1
+4266 874 1
+5865 874 1
+5866 874 -1
+8450 874 38
+939 875 1
+971 875 -1
+1331 875 -1
+1335 875 -1
+1395 875 -1
+1399 875 -1
+1459 875 -1
+1463 875 -1
+1523 875 -1
+1527 875 -1
+4263 875 -1
+4267 875 1
+5866 875 1
+5867 875 -1
+8451 875 38
+940 876 1
+972 876 -1
+1332 876 -1
+1336 876 -1
+1396 876 -1
+1400 876 -1
+1460 876 -1
+1464 876 -1
+1524 876 -1
+1528 876 -1
+4264 876 -1
+4268 876 1
+5867 876 1
+5868 876 -1
+8452 876 38
+941 877 1
+973 877 -1
+1337 877 -1
+1341 877 -1
+1401 877 -1
+1405 877 -1
+1465 877 -1
+1469 877 -1
+1529 877 -1
+1533 877 -1
+4265 877 -1
+4269 877 1
+5869 877 -1
+5872 877 1
+8453 877 38
+942 878 1
+974 878 -1
+1338 878 -1
+1342 878 -1
+1402 878 -1
+1406 878 -1
+1466 878 -1
+1470 878 -1
+1530 878 -1
+1534 878 -1
+4266 878 -1
+4270 878 1
+5869 878 1
+5870 878 -1
+8454 878 38
+943 879 1
+975 879 -1
+1339 879 -1
+1343 879 -1
+1403 879 -1
+1407 879 -1
+1467 879 -1
+1471 879 -1
+1531 879 -1
+1535 879 -1
+4267 879 -1
+4271 879 1
+5870 879 1
+5871 879 -1
+8455 879 38
+944 880 1
+976 880 -1
+1340 880 -1
+1344 880 -1
+1404 880 -1
+1408 880 -1
+1468 880 -1
+1472 880 -1
+1532 880 -1
+1536 880 -1
+4268 880 -1
+4272 880 1
+5871 880 1
+5872 880 -1
+8456 880 38
+945 881 1
+977 881 -1
+1345 881 -1
+1349 881 -1
+1409 881 -1
+1413 881 -1
+1473 881 -1
+1477 881 -1
+1537 881 -1
+1541 881 -1
+4269 881 -1
+4273 881 1
+5873 881 -1
+5876 881 1
+8457 881 38
+946 882 1
+978 882 -1
+1346 882 -1
+1350 882 -1
+1410 882 -1
+1414 882 -1
+1474 882 -1
+1478 882 -1
+1538 882 -1
+1542 882 -1
+4270 882 -1
+4274 882 1
+5873 882 1
+5874 882 -1
+8458 882 38
+947 883 1
+979 883 -1
+1347 883 -1
+1351 883 -1
+1411 883 -1
+1415 883 -1
+1475 883 -1
+1479 883 -1
+1539 883 -1
+1543 883 -1
+4271 883 -1
+4275 883 1
+5874 883 1
+5875 883 -1
+8459 883 38
+948 884 1
+980 884 -1
+1348 884 -1
+1352 884 -1
+1412 884 -1
+1416 884 -1
+1476 884 -1
+1480 884 -1
+1540 884 -1
+1544 884 -1
+4272 884 -1
+4276 884 1
+5875 884 1
+5876 884 -1
+8460 884 38
+949 885 1
+981 885 -1
+1353 885 -1
+1357 885 -1
+1417 885 -1
+1421 885 -1
+1481 885 -1
+1485 885 -1
+1545 885 -1
+1549 885 -1
+4273 885 -1
+4277 885 1
+5877 885 -1
+5880 885 1
+8461 885 38
+950 886 1
+982 886 -1
+1354 886 -1
+1358 886 -1
+1418 886 -1
+1422 886 -1
+1482 886 -1
+1486 886 -1
+1546 886 -1
+1550 886 -1
+4274 886 -1
+4278 886 1
+5877 886 1
+5878 886 -1
+8462 886 38
+951 887 1
+983 887 -1
+1355 887 -1
+1359 887 -1
+1419 887 -1
+1423 887 -1
+1483 887 -1
+1487 887 -1
+1547 887 -1
+1551 887 -1
+4275 887 -1
+4279 887 1
+5878 887 1
+5879 887 -1
+8463 887 38
+952 888 1
+984 888 -1
+1356 888 -1
+1360 888 -1
+1420 888 -1
+1424 888 -1
+1484 888 -1
+1488 888 -1
+1548 888 -1
+1552 888 -1
+4276 888 -1
+4280 888 1
+5879 888 1
+5880 888 -1
+8464 888 38
+953 889 1
+985 889 -1
+1361 889 -1
+1365 889 -1
+1425 889 -1
+1429 889 -1
+1489 889 -1
+1493 889 -1
+1553 889 -1
+1557 889 -1
+4277 889 -1
+4281 889 1
+5881 889 -1
+5884 889 1
+8465 889 38
+954 890 1
+986 890 -1
+1362 890 -1
+1366 890 -1
+1426 890 -1
+1430 890 -1
+1490 890 -1
+1494 890 -1
+1554 890 -1
+1558 890 -1
+4278 890 -1
+4282 890 1
+5881 890 1
+5882 890 -1
+8466 890 38
+955 891 1
+987 891 -1
+1363 891 -1
+1367 891 -1
+1427 891 -1
+1431 891 -1
+1491 891 -1
+1495 891 -1
+1555 891 -1
+1559 891 -1
+4279 891 -1
+4283 891 1
+5882 891 1
+5883 891 -1
+8467 891 38
+956 892 1
+988 892 -1
+1364 892 -1
+1368 892 -1
+1428 892 -1
+1432 892 -1
+1492 892 -1
+1496 892 -1
+1556 892 -1
+1560 892 -1
+4280 892 -1
+4284 892 1
+5883 892 1
+5884 892 -1
+8468 892 38
+957 893 1
+989 893 -1
+1369 893 -1
+1373 893 -1
+1433 893 -1
+1437 893 -1
+1497 893 -1
+1501 893 -1
+1561 893 -1
+1565 893 -1
+4281 893 -1
+4285 893 1
+5885 893 -1
+5888 893 1
+8469 893 38
+958 894 1
+990 894 -1
+1370 894 -1
+1374 894 -1
+1434 894 -1
+1438 894 -1
+1498 894 -1
+1502 894 -1
+1562 894 -1
+1566 894 -1
+4282 894 -1
+4286 894 1
+5885 894 1
+5886 894 -1
+8470 894 38
+959 895 1
+991 895 -1
+1371 895 -1
+1375 895 -1
+1435 895 -1
+1439 895 -1
+1499 895 -1
+1503 895 -1
+1563 895 -1
+1567 895 -1
+4283 895 -1
+4287 895 1
+5886 895 1
+5887 895 -1
+8471 895 38
+960 896 1
+992 896 -1
+1372 896 -1
+1376 896 -1
+1436 896 -1
+1440 896 -1
+1500 896 -1
+1504 896 -1
+1564 896 -1
+1568 896 -1
+4284 896 -1
+4288 896 1
+5887 896 1
+5888 896 -1
+8472 896 38
+961 897 1
+993 897 -1
+1569 897 -1
+1573 897 -1
+1633 897 -1
+1637 897 -1
+1697 897 -1
+1701 897 -1
+1761 897 -1
+1765 897 -1
+4289 897 1
+4317 897 -1
+5889 897 -1
+5892 897 1
+8473 897 38
+962 898 1
+994 898 -1
+1570 898 -1
+1574 898 -1
+1634 898 -1
+1638 898 -1
+1698 898 -1
+1702 898 -1
+1762 898 -1
+1766 898 -1
+4290 898 1
+4318 898 -1
+5889 898 1
+5890 898 -1
+8474 898 38
+963 899 1
+995 899 -1
+1571 899 -1
+1575 899 -1
+1635 899 -1
+1639 899 -1
+1699 899 -1
+1703 899 -1
+1763 899 -1
+1767 899 -1
+4291 899 1
+4319 899 -1
+5890 899 1
+5891 899 -1
+8475 899 38
+964 900 1
+996 900 -1
+1572 900 -1
+1576 900 -1
+1636 900 -1
+1640 900 -1
+1700 900 -1
+1704 900 -1
+1764 900 -1
+1768 900 -1
+4292 900 1
+4320 900 -1
+5891 900 1
+5892 900 -1
+8476 900 38
+965 901 1
+997 901 -1
+1577 901 -1
+1581 901 -1
+1641 901 -1
+1645 901 -1
+1705 901 -1
+1709 901 -1
+1769 901 -1
+1773 901 -1
+4289 901 -1
+4293 901 1
+5893 901 -1
+5896 901 1
+8477 901 38
+966 902 1
+998 902 -1
+1578 902 -1
+1582 902 -1
+1642 902 -1
+1646 902 -1
+1706 902 -1
+1710 902 -1
+1770 902 -1
+1774 902 -1
+4290 902 -1
+4294 902 1
+5893 902 1
+5894 902 -1
+8478 902 38
+967 903 1
+999 903 -1
+1579 903 -1
+1583 903 -1
+1643 903 -1
+1647 903 -1
+1707 903 -1
+1711 903 -1
+1771 903 -1
+1775 903 -1
+4291 903 -1
+4295 903 1
+5894 903 1
+5895 903 -1
+8479 903 38
+968 904 1
+1000 904 -1
+1580 904 -1
+1584 904 -1
+1644 904 -1
+1648 904 -1
+1708 904 -1
+1712 904 -1
+1772 904 -1
+1776 904 -1
+4292 904 -1
+4296 904 1
+5895 904 1
+5896 904 -1
+8480 904 38
+969 905 1
+1001 905 -1
+1585 905 -1
+1589 905 -1
+1649 905 -1
+1653 905 -1
+1713 905 -1
+1717 905 -1
+1777 905 -1
+1781 905 -1
+4293 905 -1
+4297 905 1
+5897 905 -1
+5900 905 1
+8481 905 38
+970 906 1
+1002 906 -1
+1586 906 -1
+1590 906 -1
+1650 906 -1
+1654 906 -1
+1714 906 -1
+1718 906 -1
+1778 906 -1
+1782 906 -1
+4294 906 -1
+4298 906 1
+5897 906 1
+5898 906 -1
+8482 906 38
+971 907 1
+1003 907 -1
+1587 907 -1
+1591 907 -1
+1651 907 -1
+1655 907 -1
+1715 907 -1
+1719 907 -1
+1779 907 -1
+1783 907 -1
+4295 907 -1
+4299 907 1
+5898 907 1
+5899 907 -1
+8483 907 38
+972 908 1
+1004 908 -1
+1588 908 -1
+1592 908 -1
+1652 908 -1
+1656 908 -1
+1716 908 -1
+1720 908 -1
+1780 908 -1
+1784 908 -1
+4296 908 -1
+4300 908 1
+5899 908 1
+5900 908 -1
+8484 908 38
+973 909 1
+1005 909 -1
+1593 909 -1
+1597 909 -1
+1657 909 -1
+1661 909 -1
+1721 909 -1
+1725 909 -1
+1785 909 -1
+1789 909 -1
+4297 909 -1
+4301 909 1
+5901 909 -1
+5904 909 1
+8485 909 38
+974 910 1
+1006 910 -1
+1594 910 -1
+1598 910 -1
+1658 910 -1
+1662 910 -1
+1722 910 -1
+1726 910 -1
+1786 910 -1
+1790 910 -1
+4298 910 -1
+4302 910 1
+5901 910 1
+5902 910 -1
+8486 910 38
+975 911 1
+1007 911 -1
+1595 911 -1
+1599 911 -1
+1659 911 -1
+1663 911 -1
+1723 911 -1
+1727 911 -1
+1787 911 -1
+1791 911 -1
+4299 911 -1
+4303 911 1
+5902 911 1
+5903 911 -1
+8487 911 38
+976 912 1
+1008 912 -1
+1596 912 -1
+1600 912 -1
+1660 912 -1
+1664 912 -1
+1724 912 -1
+1728 912 -1
+1788 912 -1
+1792 912 -1
+4300 912 -1
+4304 912 1
+5903 912 1
+5904 912 -1
+8488 912 38
+977 913 1
+1009 913 -1
+1601 913 -1
+1605 913 -1
+1665 913 -1
+1669 913 -1
+1729 913 -1
+1733 913 -1
+1793 913 -1
+1797 913 -1
+4301 913 -1
+4305 913 1
+5905 913 -1
+5908 913 1
+8489 913 38
+978 914 1
+1010 914 -1
+1602 914 -1
+1606 914 -1
+1666 914 -1
+1670 914 -1
+1730 914 -1
+1734 914 -1
+1794 914 -1
+1798 914 -1
+4302 914 -1
+4306 914 1
+5905 914 1
+5906 914 -1
+8490 914 38
+979 915 1
+1011 915 -1
+1603 915 -1
+1607 915 -1
+1667 915 -1
+1671 915 -1
+1731 915 -1
+1735 915 -1
+1795 915 -1
+1799 915 -1
+4303 915 -1
+4307 915 1
+5906 915 1
+5907 915 -1
+8491 915 38
+980 916 1
+1012 916 -1
+1604 916 -1
+1608 916 -1
+1668 916 -1
+1672 916 -1
+1732 916 -1
+1736 916 -1
+1796 916 -1
+1800 916 -1
+4304 916 -1
+4308 916 1
+5907 916 1
+5908 916 -1
+8492 916 38
+981 917 1
+1013 917 -1
+1609 917 -1
+1613 917 -1
+1673 917 -1
+1677 917 -1
+1737 917 -1
+1741 917 -1
+1801 917 -1
+1805 917 -1
+4305 917 -1
+4309 917 1
+5909 917 -1
+5912 917 1
+8493 917 38
+982 918 1
+1014 918 -1
+1610 918 -1
+1614 918 -1
+1674 918 -1
+1678 918 -1
+1738 918 -1
+1742 918 -1
+1802 918 -1
+1806 918 -1
+4306 918 -1
+4310 918 1
+5909 918 1
+5910 918 -1
+8494 918 38
+983 919 1
+1015 919 -1
+1611 919 -1
+1615 919 -1
+1675 919 -1
+1679 919 -1
+1739 919 -1
+1743 919 -1
+1803 919 -1
+1807 919 -1
+4307 919 -1
+4311 919 1
+5910 919 1
+5911 919 -1
+8495 919 38
+984 920 1
+1016 920 -1
+1612 920 -1
+1616 920 -1
+1676 920 -1
+1680 920 -1
+1740 920 -1
+1744 920 -1
+1804 920 -1
+1808 920 -1
+4308 920 -1
+4312 920 1
+5911 920 1
+5912 920 -1
+8496 920 38
+985 921 1
+1017 921 -1
+1617 921 -1
+1621 921 -1
+1681 921 -1
+1685 921 -1
+1745 921 -1
+1749 921 -1
+1809 921 -1
+1813 921 -1
+4309 921 -1
+4313 921 1
+5913 921 -1
+5916 921 1
+8497 921 38
+986 922 1
+1018 922 -1
+1618 922 -1
+1622 922 -1
+1682 922 -1
+1686 922 -1
+1746 922 -1
+1750 922 -1
+1810 922 -1
+1814 922 -1
+4310 922 -1
+4314 922 1
+5913 922 1
+5914 922 -1
+8498 922 38
+987 923 1
+1019 923 -1
+1619 923 -1
+1623 923 -1
+1683 923 -1
+1687 923 -1
+1747 923 -1
+1751 923 -1
+1811 923 -1
+1815 923 -1
+4311 923 -1
+4315 923 1
+5914 923 1
+5915 923 -1
+8499 923 38
+988 924 1
+1020 924 -1
+1620 924 -1
+1624 924 -1
+1684 924 -1
+1688 924 -1
+1748 924 -1
+1752 924 -1
+1812 924 -1
+1816 924 -1
+4312 924 -1
+4316 924 1
+5915 924 1
+5916 924 -1
+8500 924 38
+989 925 1
+1021 925 -1
+1625 925 -1
+1629 925 -1
+1689 925 -1
+1693 925 -1
+1753 925 -1
+1757 925 -1
+1817 925 -1
+1821 925 -1
+4313 925 -1
+4317 925 1
+5917 925 -1
+5920 925 1
+8501 925 38
+990 926 1
+1022 926 -1
+1626 926 -1
+1630 926 -1
+1690 926 -1
+1694 926 -1
+1754 926 -1
+1758 926 -1
+1818 926 -1
+1822 926 -1
+4314 926 -1
+4318 926 1
+5917 926 1
+5918 926 -1
+8502 926 38
+991 927 1
+1023 927 -1
+1627 927 -1
+1631 927 -1
+1691 927 -1
+1695 927 -1
+1755 927 -1
+1759 927 -1
+1819 927 -1
+1823 927 -1
+4315 927 -1
+4319 927 1
+5918 927 1
+5919 927 -1
+8503 927 38
+992 928 1
+1024 928 -1
+1628 928 -1
+1632 928 -1
+1692 928 -1
+1696 928 -1
+1756 928 -1
+1760 928 -1
+1820 928 -1
+1824 928 -1
+4316 928 -1
+4320 928 1
+5919 928 1
+5920 928 -1
+8504 928 38
+993 929 1
+1025 929 -1
+1825 929 -1
+1829 929 -1
+1889 929 -1
+1893 929 -1
+1953 929 -1
+1957 929 -1
+2017 929 -1
+2021 929 -1
+4321 929 1
+4349 929 -1
+5921 929 -1
+5924 929 1
+8505 929 38
+994 930 1
+1026 930 -1
+1826 930 -1
+1830 930 -1
+1890 930 -1
+1894 930 -1
+1954 930 -1
+1958 930 -1
+2018 930 -1
+2022 930 -1
+4322 930 1
+4350 930 -1
+5921 930 1
+5922 930 -1
+8506 930 38
+995 931 1
+1027 931 -1
+1827 931 -1
+1831 931 -1
+1891 931 -1
+1895 931 -1
+1955 931 -1
+1959 931 -1
+2019 931 -1
+2023 931 -1
+4323 931 1
+4351 931 -1
+5922 931 1
+5923 931 -1
+8507 931 38
+996 932 1
+1028 932 -1
+1828 932 -1
+1832 932 -1
+1892 932 -1
+1896 932 -1
+1956 932 -1
+1960 932 -1
+2020 932 -1
+2024 932 -1
+4324 932 1
+4352 932 -1
+5923 932 1
+5924 932 -1
+8508 932 38
+997 933 1
+1029 933 -1
+1833 933 -1
+1837 933 -1
+1897 933 -1
+1901 933 -1
+1961 933 -1
+1965 933 -1
+2025 933 -1
+2029 933 -1
+4321 933 -1
+4325 933 1
+5925 933 -1
+5928 933 1
+8509 933 38
+998 934 1
+1030 934 -1
+1834 934 -1
+1838 934 -1
+1898 934 -1
+1902 934 -1
+1962 934 -1
+1966 934 -1
+2026 934 -1
+2030 934 -1
+4322 934 -1
+4326 934 1
+5925 934 1
+5926 934 -1
+8510 934 38
+999 935 1
+1031 935 -1
+1835 935 -1
+1839 935 -1
+1899 935 -1
+1903 935 -1
+1963 935 -1
+1967 935 -1
+2027 935 -1
+2031 935 -1
+4323 935 -1
+4327 935 1
+5926 935 1
+5927 935 -1
+8511 935 38
+1000 936 1
+1032 936 -1
+1836 936 -1
+1840 936 -1
+1900 936 -1
+1904 936 -1
+1964 936 -1
+1968 936 -1
+2028 936 -1
+2032 936 -1
+4324 936 -1
+4328 936 1
+5927 936 1
+5928 936 -1
+8512 936 38
+1001 937 1
+1033 937 -1
+1841 937 -1
+1845 937 -1
+1905 937 -1
+1909 937 -1
+1969 937 -1
+1973 937 -1
+2033 937 -1
+2037 937 -1
+4325 937 -1
+4329 937 1
+5929 937 -1
+5932 937 1
+8513 937 38
+1002 938 1
+1034 938 -1
+1842 938 -1
+1846 938 -1
+1906 938 -1
+1910 938 -1
+1970 938 -1
+1974 938 -1
+2034 938 -1
+2038 938 -1
+4326 938 -1
+4330 938 1
+5929 938 1
+5930 938 -1
+8514 938 38
+1003 939 1
+1035 939 -1
+1843 939 -1
+1847 939 -1
+1907 939 -1
+1911 939 -1
+1971 939 -1
+1975 939 -1
+2035 939 -1
+2039 939 -1
+4327 939 -1
+4331 939 1
+5930 939 1
+5931 939 -1
+8515 939 38
+1004 940 1
+1036 940 -1
+1844 940 -1
+1848 940 -1
+1908 940 -1
+1912 940 -1
+1972 940 -1
+1976 940 -1
+2036 940 -1
+2040 940 -1
+4328 940 -1
+4332 940 1
+5931 940 1
+5932 940 -1
+8516 940 38
+1005 941 1
+1037 941 -1
+1849 941 -1
+1853 941 -1
+1913 941 -1
+1917 941 -1
+1977 941 -1
+1981 941 -1
+2041 941 -1
+2045 941 -1
+4329 941 -1
+4333 941 1
+5933 941 -1
+5936 941 1
+8517 941 38
+1006 942 1
+1038 942 -1
+1850 942 -1
+1854 942 -1
+1914 942 -1
+1918 942 -1
+1978 942 -1
+1982 942 -1
+2042 942 -1
+2046 942 -1
+4330 942 -1
+4334 942 1
+5933 942 1
+5934 942 -1
+8518 942 38
+1007 943 1
+1039 943 -1
+1851 943 -1
+1855 943 -1
+1915 943 -1
+1919 943 -1
+1979 943 -1
+1983 943 -1
+2043 943 -1
+2047 943 -1
+4331 943 -1
+4335 943 1
+5934 943 1
+5935 943 -1
+8519 943 38
+1008 944 1
+1040 944 -1
+1852 944 -1
+1856 944 -1
+1916 944 -1
+1920 944 -1
+1980 944 -1
+1984 944 -1
+2044 944 -1
+2048 944 -1
+4332 944 -1
+4336 944 1
+5935 944 1
+5936 944 -1
+8520 944 38
+1009 945 1
+1041 945 -1
+1857 945 -1
+1861 945 -1
+1921 945 -1
+1925 945 -1
+1985 945 -1
+1989 945 -1
+2049 945 -1
+2053 945 -1
+4333 945 -1
+4337 945 1
+5937 945 -1
+5940 945 1
+8521 945 38
+1010 946 1
+1042 946 -1
+1858 946 -1
+1862 946 -1
+1922 946 -1
+1926 946 -1
+1986 946 -1
+1990 946 -1
+2050 946 -1
+2054 946 -1
+4334 946 -1
+4338 946 1
+5937 946 1
+5938 946 -1
+8522 946 38
+1011 947 1
+1043 947 -1
+1859 947 -1
+1863 947 -1
+1923 947 -1
+1927 947 -1
+1987 947 -1
+1991 947 -1
+2051 947 -1
+2055 947 -1
+4335 947 -1
+4339 947 1
+5938 947 1
+5939 947 -1
+8523 947 38
+1012 948 1
+1044 948 -1
+1860 948 -1
+1864 948 -1
+1924 948 -1
+1928 948 -1
+1988 948 -1
+1992 948 -1
+2052 948 -1
+2056 948 -1
+4336 948 -1
+4340 948 1
+5939 948 1
+5940 948 -1
+8524 948 38
+1013 949 1
+1045 949 -1
+1865 949 -1
+1869 949 -1
+1929 949 -1
+1933 949 -1
+1993 949 -1
+1997 949 -1
+2057 949 -1
+2061 949 -1
+4337 949 -1
+4341 949 1
+5941 949 -1
+5944 949 1
+8525 949 38
+1014 950 1
+1046 950 -1
+1866 950 -1
+1870 950 -1
+1930 950 -1
+1934 950 -1
+1994 950 -1
+1998 950 -1
+2058 950 -1
+2062 950 -1
+4338 950 -1
+4342 950 1
+5941 950 1
+5942 950 -1
+8526 950 38
+1015 951 1
+1047 951 -1
+1867 951 -1
+1871 951 -1
+1931 951 -1
+1935 951 -1
+1995 951 -1
+1999 951 -1
+2059 951 -1
+2063 951 -1
+4339 951 -1
+4343 951 1
+5942 951 1
+5943 951 -1
+8527 951 38
+1016 952 1
+1048 952 -1
+1868 952 -1
+1872 952 -1
+1932 952 -1
+1936 952 -1
+1996 952 -1
+2000 952 -1
+2060 952 -1
+2064 952 -1
+4340 952 -1
+4344 952 1
+5943 952 1
+5944 952 -1
+8528 952 38
+1017 953 1
+1049 953 -1
+1873 953 -1
+1877 953 -1
+1937 953 -1
+1941 953 -1
+2001 953 -1
+2005 953 -1
+2065 953 -1
+2069 953 -1
+4341 953 -1
+4345 953 1
+5945 953 -1
+5948 953 1
+8529 953 38
+1018 954 1
+1050 954 -1
+1874 954 -1
+1878 954 -1
+1938 954 -1
+1942 954 -1
+2002 954 -1
+2006 954 -1
+2066 954 -1
+2070 954 -1
+4342 954 -1
+4346 954 1
+5945 954 1
+5946 954 -1
+8530 954 38
+1019 955 1
+1051 955 -1
+1875 955 -1
+1879 955 -1
+1939 955 -1
+1943 955 -1
+2003 955 -1
+2007 955 -1
+2067 955 -1
+2071 955 -1
+4343 955 -1
+4347 955 1
+5946 955 1
+5947 955 -1
+8531 955 38
+1020 956 1
+1052 956 -1
+1876 956 -1
+1880 956 -1
+1940 956 -1
+1944 956 -1
+2004 956 -1
+2008 956 -1
+2068 956 -1
+2072 956 -1
+4344 956 -1
+4348 956 1
+5947 956 1
+5948 956 -1
+8532 956 38
+1021 957 1
+1053 957 -1
+1881 957 -1
+1885 957 -1
+1945 957 -1
+1949 957 -1
+2009 957 -1
+2013 957 -1
+2073 957 -1
+2077 957 -1
+4345 957 -1
+4349 957 1
+5949 957 -1
+5952 957 1
+8533 957 38
+1022 958 1
+1054 958 -1
+1882 958 -1
+1886 958 -1
+1946 958 -1
+1950 958 -1
+2010 958 -1
+2014 958 -1
+2074 958 -1
+2078 958 -1
+4346 958 -1
+4350 958 1
+5949 958 1
+5950 958 -1
+8534 958 38
+1023 959 1
+1055 959 -1
+1883 959 -1
+1887 959 -1
+1947 959 -1
+1951 959 -1
+2011 959 -1
+2015 959 -1
+2075 959 -1
+2079 959 -1
+4347 959 -1
+4351 959 1
+5950 959 1
+5951 959 -1
+8535 959 38
+1024 960 1
+1056 960 -1
+1884 960 -1
+1888 960 -1
+1948 960 -1
+1952 960 -1
+2012 960 -1
+2016 960 -1
+2076 960 -1
+2080 960 -1
+4348 960 -1
+4352 960 1
+5951 960 1
+5952 960 -1
+8536 960 38
+929 961 -1
+984 961 1
+2081 961 -1
+2085 961 -1
+2145 961 -1
+2149 961 -1
+2209 961 -1
+2213 961 -1
+2273 961 -1
+2277 961 -1
+4353 961 1
+4381 961 -1
+5953 961 -1
+5956 961 1
+8537 961 38
+930 962 -1
+981 962 1
+2082 962 -1
+2086 962 -1
+2146 962 -1
+2150 962 -1
+2210 962 -1
+2214 962 -1
+2274 962 -1
+2278 962 -1
+4354 962 1
+4382 962 -1
+5953 962 1
+5954 962 -1
+8538 962 38
+931 963 -1
+982 963 1
+2083 963 -1
+2087 963 -1
+2147 963 -1
+2151 963 -1
+2211 963 -1
+2215 963 -1
+2275 963 -1
+2279 963 -1
+4355 963 1
+4383 963 -1
+5954 963 1
+5955 963 -1
+8539 963 38
+932 964 -1
+983 964 1
+2084 964 -1
+2088 964 -1
+2148 964 -1
+2152 964 -1
+2212 964 -1
+2216 964 -1
+2276 964 -1
+2280 964 -1
+4356 964 1
+4384 964 -1
+5955 964 1
+5956 964 -1
+8540 964 38
+933 965 -1
+988 965 1
+2089 965 -1
+2093 965 -1
+2153 965 -1
+2157 965 -1
+2217 965 -1
+2221 965 -1
+2281 965 -1
+2285 965 -1
+4353 965 -1
+4357 965 1
+5957 965 -1
+5960 965 1
+8541 965 38
+934 966 -1
+985 966 1
+2090 966 -1
+2094 966 -1
+2154 966 -1
+2158 966 -1
+2218 966 -1
+2222 966 -1
+2282 966 -1
+2286 966 -1
+4354 966 -1
+4358 966 1
+5957 966 1
+5958 966 -1
+8542 966 38
+935 967 -1
+986 967 1
+2091 967 -1
+2095 967 -1
+2155 967 -1
+2159 967 -1
+2219 967 -1
+2223 967 -1
+2283 967 -1
+2287 967 -1
+4355 967 -1
+4359 967 1
+5958 967 1
+5959 967 -1
+8543 967 38
+936 968 -1
+987 968 1
+2092 968 -1
+2096 968 -1
+2156 968 -1
+2160 968 -1
+2220 968 -1
+2224 968 -1
+2284 968 -1
+2288 968 -1
+4356 968 -1
+4360 968 1
+5959 968 1
+5960 968 -1
+8544 968 38
+937 969 -1
+992 969 1
+2097 969 -1
+2101 969 -1
+2161 969 -1
+2165 969 -1
+2225 969 -1
+2229 969 -1
+2289 969 -1
+2293 969 -1
+4357 969 -1
+4361 969 1
+5961 969 -1
+5964 969 1
+8545 969 38
+938 970 -1
+989 970 1
+2098 970 -1
+2102 970 -1
+2162 970 -1
+2166 970 -1
+2226 970 -1
+2230 970 -1
+2290 970 -1
+2294 970 -1
+4358 970 -1
+4362 970 1
+5961 970 1
+5962 970 -1
+8546 970 38
+939 971 -1
+990 971 1
+2099 971 -1
+2103 971 -1
+2163 971 -1
+2167 971 -1
+2227 971 -1
+2231 971 -1
+2291 971 -1
+2295 971 -1
+4359 971 -1
+4363 971 1
+5962 971 1
+5963 971 -1
+8547 971 38
+940 972 -1
+991 972 1
+2100 972 -1
+2104 972 -1
+2164 972 -1
+2168 972 -1
+2228 972 -1
+2232 972 -1
+2292 972 -1
+2296 972 -1
+4360 972 -1
+4364 972 1
+5963 972 1
+5964 972 -1
+8548 972 38
+941 973 -1
+964 973 1
+2105 973 -1
+2109 973 -1
+2169 973 -1
+2173 973 -1
+2233 973 -1
+2237 973 -1
+2297 973 -1
+2301 973 -1
+4361 973 -1
+4365 973 1
+5965 973 -1
+5968 973 1
+8549 973 38
+942 974 -1
+961 974 1
+2106 974 -1
+2110 974 -1
+2170 974 -1
+2174 974 -1
+2234 974 -1
+2238 974 -1
+2298 974 -1
+2302 974 -1
+4362 974 -1
+4366 974 1
+5965 974 1
+5966 974 -1
+8550 974 38
+943 975 -1
+962 975 1
+2107 975 -1
+2111 975 -1
+2171 975 -1
+2175 975 -1
+2235 975 -1
+2239 975 -1
+2299 975 -1
+2303 975 -1
+4363 975 -1
+4367 975 1
+5966 975 1
+5967 975 -1
+8551 975 38
+944 976 -1
+963 976 1
+2108 976 -1
+2112 976 -1
+2172 976 -1
+2176 976 -1
+2236 976 -1
+2240 976 -1
+2300 976 -1
+2304 976 -1
+4364 976 -1
+4368 976 1
+5967 976 1
+5968 976 -1
+8552 976 38
+945 977 -1
+968 977 1
+2113 977 -1
+2117 977 -1
+2177 977 -1
+2181 977 -1
+2241 977 -1
+2245 977 -1
+2305 977 -1
+2309 977 -1
+4365 977 -1
+4369 977 1
+5969 977 -1
+5972 977 1
+8553 977 38
+946 978 -1
+965 978 1
+2114 978 -1
+2118 978 -1
+2178 978 -1
+2182 978 -1
+2242 978 -1
+2246 978 -1
+2306 978 -1
+2310 978 -1
+4366 978 -1
+4370 978 1
+5969 978 1
+5970 978 -1
+8554 978 38
+947 979 -1
+966 979 1
+2115 979 -1
+2119 979 -1
+2179 979 -1
+2183 979 -1
+2243 979 -1
+2247 979 -1
+2307 979 -1
+2311 979 -1
+4367 979 -1
+4371 979 1
+5970 979 1
+5971 979 -1
+8555 979 38
+948 980 -1
+967 980 1
+2116 980 -1
+2120 980 -1
+2180 980 -1
+2184 980 -1
+2244 980 -1
+2248 980 -1
+2308 980 -1
+2312 980 -1
+4368 980 -1
+4372 980 1
+5971 980 1
+5972 980 -1
+8556 980 38
+949 981 -1
+972 981 1
+2121 981 -1
+2125 981 -1
+2185 981 -1
+2189 981 -1
+2249 981 -1
+2253 981 -1
+2313 981 -1
+2317 981 -1
+4369 981 -1
+4373 981 1
+5973 981 -1
+5976 981 1
+8557 981 38
+950 982 -1
+969 982 1
+2122 982 -1
+2126 982 -1
+2186 982 -1
+2190 982 -1
+2250 982 -1
+2254 982 -1
+2314 982 -1
+2318 982 -1
+4370 982 -1
+4374 982 1
+5973 982 1
+5974 982 -1
+8558 982 38
+951 983 -1
+970 983 1
+2123 983 -1
+2127 983 -1
+2187 983 -1
+2191 983 -1
+2251 983 -1
+2255 983 -1
+2315 983 -1
+2319 983 -1
+4371 983 -1
+4375 983 1
+5974 983 1
+5975 983 -1
+8559 983 38
+952 984 -1
+971 984 1
+2124 984 -1
+2128 984 -1
+2188 984 -1
+2192 984 -1
+2252 984 -1
+2256 984 -1
+2316 984 -1
+2320 984 -1
+4372 984 -1
+4376 984 1
+5975 984 1
+5976 984 -1
+8560 984 38
+953 985 -1
+976 985 1
+2129 985 -1
+2133 985 -1
+2193 985 -1
+2197 985 -1
+2257 985 -1
+2261 985 -1
+2321 985 -1
+2325 985 -1
+4373 985 -1
+4377 985 1
+5977 985 -1
+5980 985 1
+8561 985 38
+954 986 -1
+973 986 1
+2130 986 -1
+2134 986 -1
+2194 986 -1
+2198 986 -1
+2258 986 -1
+2262 986 -1
+2322 986 -1
+2326 986 -1
+4374 986 -1
+4378 986 1
+5977 986 1
+5978 986 -1
+8562 986 38
+955 987 -1
+974 987 1
+2131 987 -1
+2135 987 -1
+2195 987 -1
+2199 987 -1
+2259 987 -1
+2263 987 -1
+2323 987 -1
+2327 987 -1
+4375 987 -1
+4379 987 1
+5978 987 1
+5979 987 -1
+8563 987 38
+956 988 -1
+975 988 1
+2132 988 -1
+2136 988 -1
+2196 988 -1
+2200 988 -1
+2260 988 -1
+2264 988 -1
+2324 988 -1
+2328 988 -1
+4376 988 -1
+4380 988 1
+5979 988 1
+5980 988 -1
+8564 988 38
+957 989 -1
+980 989 1
+2137 989 -1
+2141 989 -1
+2201 989 -1
+2205 989 -1
+2265 989 -1
+2269 989 -1
+2329 989 -1
+2333 989 -1
+4377 989 -1
+4381 989 1
+5981 989 -1
+5984 989 1
+8565 989 38
+958 990 -1
+977 990 1
+2138 990 -1
+2142 990 -1
+2202 990 -1
+2206 990 -1
+2266 990 -1
+2270 990 -1
+2330 990 -1
+2334 990 -1
+4378 990 -1
+4382 990 1
+5981 990 1
+5982 990 -1
+8566 990 38
+959 991 -1
+978 991 1
+2139 991 -1
+2143 991 -1
+2203 991 -1
+2207 991 -1
+2267 991 -1
+2271 991 -1
+2331 991 -1
+2335 991 -1
+4379 991 -1
+4383 991 1
+5982 991 1
+5983 991 -1
+8567 991 38
+960 992 -1
+979 992 1
+2140 992 -1
+2144 992 -1
+2204 992 -1
+2208 992 -1
+2268 992 -1
+2272 992 -1
+2332 992 -1
+2336 992 -1
+4380 992 -1
+4384 992 1
+5983 992 1
+5984 992 -1
+8568 992 38
+961 993 -1
+1016 993 1
+2337 993 -1
+2341 993 -1
+2401 993 -1
+2405 993 -1
+2465 993 -1
+2469 993 -1
+2529 993 -1
+2533 993 -1
+4385 993 1
+4413 993 -1
+5985 993 -1
+5988 993 1
+8569 993 38
+962 994 -1
+1013 994 1
+2338 994 -1
+2342 994 -1
+2402 994 -1
+2406 994 -1
+2466 994 -1
+2470 994 -1
+2530 994 -1
+2534 994 -1
+4386 994 1
+4414 994 -1
+5985 994 1
+5986 994 -1
+8570 994 38
+963 995 -1
+1014 995 1
+2339 995 -1
+2343 995 -1
+2403 995 -1
+2407 995 -1
+2467 995 -1
+2471 995 -1
+2531 995 -1
+2535 995 -1
+4387 995 1
+4415 995 -1
+5986 995 1
+5987 995 -1
+8571 995 38
+964 996 -1
+1015 996 1
+2340 996 -1
+2344 996 -1
+2404 996 -1
+2408 996 -1
+2468 996 -1
+2472 996 -1
+2532 996 -1
+2536 996 -1
+4388 996 1
+4416 996 -1
+5987 996 1
+5988 996 -1
+8572 996 38
+965 997 -1
+1020 997 1
+2345 997 -1
+2349 997 -1
+2409 997 -1
+2413 997 -1
+2473 997 -1
+2477 997 -1
+2537 997 -1
+2541 997 -1
+4385 997 -1
+4389 997 1
+5989 997 -1
+5992 997 1
+8573 997 38
+966 998 -1
+1017 998 1
+2346 998 -1
+2350 998 -1
+2410 998 -1
+2414 998 -1
+2474 998 -1
+2478 998 -1
+2538 998 -1
+2542 998 -1
+4386 998 -1
+4390 998 1
+5989 998 1
+5990 998 -1
+8574 998 38
+967 999 -1
+1018 999 1
+2347 999 -1
+2351 999 -1
+2411 999 -1
+2415 999 -1
+2475 999 -1
+2479 999 -1
+2539 999 -1
+2543 999 -1
+4387 999 -1
+4391 999 1
+5990 999 1
+5991 999 -1
+8575 999 38
+968 1000 -1
+1019 1000 1
+2348 1000 -1
+2352 1000 -1
+2412 1000 -1
+2416 1000 -1
+2476 1000 -1
+2480 1000 -1
+2540 1000 -1
+2544 1000 -1
+4388 1000 -1
+4392 1000 1
+5991 1000 1
+5992 1000 -1
+8576 1000 38
+969 1001 -1
+1024 1001 1
+2353 1001 -1
+2357 1001 -1
+2417 1001 -1
+2421 1001 -1
+2481 1001 -1
+2485 1001 -1
+2545 1001 -1
+2549 1001 -1
+4389 1001 -1
+4393 1001 1
+5993 1001 -1
+5996 1001 1
+8577 1001 38
+970 1002 -1
+1021 1002 1
+2354 1002 -1
+2358 1002 -1
+2418 1002 -1
+2422 1002 -1
+2482 1002 -1
+2486 1002 -1
+2546 1002 -1
+2550 1002 -1
+4390 1002 -1
+4394 1002 1
+5993 1002 1
+5994 1002 -1
+8578 1002 38
+971 1003 -1
+1022 1003 1
+2355 1003 -1
+2359 1003 -1
+2419 1003 -1
+2423 1003 -1
+2483 1003 -1
+2487 1003 -1
+2547 1003 -1
+2551 1003 -1
+4391 1003 -1
+4395 1003 1
+5994 1003 1
+5995 1003 -1
+8579 1003 38
+972 1004 -1
+1023 1004 1
+2356 1004 -1
+2360 1004 -1
+2420 1004 -1
+2424 1004 -1
+2484 1004 -1
+2488 1004 -1
+2548 1004 -1
+2552 1004 -1
+4392 1004 -1
+4396 1004 1
+5995 1004 1
+5996 1004 -1
+8580 1004 38
+973 1005 -1
+996 1005 1
+2361 1005 -1
+2365 1005 -1
+2425 1005 -1
+2429 1005 -1
+2489 1005 -1
+2493 1005 -1
+2553 1005 -1
+2557 1005 -1
+4393 1005 -1
+4397 1005 1
+5997 1005 -1
+6000 1005 1
+8581 1005 38
+974 1006 -1
+993 1006 1
+2362 1006 -1
+2366 1006 -1
+2426 1006 -1
+2430 1006 -1
+2490 1006 -1
+2494 1006 -1
+2554 1006 -1
+2558 1006 -1
+4394 1006 -1
+4398 1006 1
+5997 1006 1
+5998 1006 -1
+8582 1006 38
+975 1007 -1
+994 1007 1
+2363 1007 -1
+2367 1007 -1
+2427 1007 -1
+2431 1007 -1
+2491 1007 -1
+2495 1007 -1
+2555 1007 -1
+2559 1007 -1
+4395 1007 -1
+4399 1007 1
+5998 1007 1
+5999 1007 -1
+8583 1007 38
+976 1008 -1
+995 1008 1
+2364 1008 -1
+2368 1008 -1
+2428 1008 -1
+2432 1008 -1
+2492 1008 -1
+2496 1008 -1
+2556 1008 -1
+2560 1008 -1
+4396 1008 -1
+4400 1008 1
+5999 1008 1
+6000 1008 -1
+8584 1008 38
+977 1009 -1
+1000 1009 1
+2369 1009 -1
+2373 1009 -1
+2433 1009 -1
+2437 1009 -1
+2497 1009 -1
+2501 1009 -1
+2561 1009 -1
+2565 1009 -1
+4397 1009 -1
+4401 1009 1
+6001 1009 -1
+6004 1009 1
+8585 1009 38
+978 1010 -1
+997 1010 1
+2370 1010 -1
+2374 1010 -1
+2434 1010 -1
+2438 1010 -1
+2498 1010 -1
+2502 1010 -1
+2562 1010 -1
+2566 1010 -1
+4398 1010 -1
+4402 1010 1
+6001 1010 1
+6002 1010 -1
+8586 1010 38
+979 1011 -1
+998 1011 1
+2371 1011 -1
+2375 1011 -1
+2435 1011 -1
+2439 1011 -1
+2499 1011 -1
+2503 1011 -1
+2563 1011 -1
+2567 1011 -1
+4399 1011 -1
+4403 1011 1
+6002 1011 1
+6003 1011 -1
+8587 1011 38
+980 1012 -1
+999 1012 1
+2372 1012 -1
+2376 1012 -1
+2436 1012 -1
+2440 1012 -1
+2500 1012 -1
+2504 1012 -1
+2564 1012 -1
+2568 1012 -1
+4400 1012 -1
+4404 1012 1
+6003 1012 1
+6004 1012 -1
+8588 1012 38
+981 1013 -1
+1004 1013 1
+2377 1013 -1
+2381 1013 -1
+2441 1013 -1
+2445 1013 -1
+2505 1013 -1
+2509 1013 -1
+2569 1013 -1
+2573 1013 -1
+4401 1013 -1
+4405 1013 1
+6005 1013 -1
+6008 1013 1
+8589 1013 38
+982 1014 -1
+1001 1014 1
+2378 1014 -1
+2382 1014 -1
+2442 1014 -1
+2446 1014 -1
+2506 1014 -1
+2510 1014 -1
+2570 1014 -1
+2574 1014 -1
+4402 1014 -1
+4406 1014 1
+6005 1014 1
+6006 1014 -1
+8590 1014 38
+983 1015 -1
+1002 1015 1
+2379 1015 -1
+2383 1015 -1
+2443 1015 -1
+2447 1015 -1
+2507 1015 -1
+2511 1015 -1
+2571 1015 -1
+2575 1015 -1
+4403 1015 -1
+4407 1015 1
+6006 1015 1
+6007 1015 -1
+8591 1015 38
+984 1016 -1
+1003 1016 1
+2380 1016 -1
+2384 1016 -1
+2444 1016 -1
+2448 1016 -1
+2508 1016 -1
+2512 1016 -1
+2572 1016 -1
+2576 1016 -1
+4404 1016 -1
+4408 1016 1
+6007 1016 1
+6008 1016 -1
+8592 1016 38
+985 1017 -1
+1008 1017 1
+2385 1017 -1
+2389 1017 -1
+2449 1017 -1
+2453 1017 -1
+2513 1017 -1
+2517 1017 -1
+2577 1017 -1
+2581 1017 -1
+4405 1017 -1
+4409 1017 1
+6009 1017 -1
+6012 1017 1
+8593 1017 38
+986 1018 -1
+1005 1018 1
+2386 1018 -1
+2390 1018 -1
+2450 1018 -1
+2454 1018 -1
+2514 1018 -1
+2518 1018 -1
+2578 1018 -1
+2582 1018 -1
+4406 1018 -1
+4410 1018 1
+6009 1018 1
+6010 1018 -1
+8594 1018 38
+987 1019 -1
+1006 1019 1
+2387 1019 -1
+2391 1019 -1
+2451 1019 -1
+2455 1019 -1
+2515 1019 -1
+2519 1019 -1
+2579 1019 -1
+2583 1019 -1
+4407 1019 -1
+4411 1019 1
+6010 1019 1
+6011 1019 -1
+8595 1019 38
+988 1020 -1
+1007 1020 1
+2388 1020 -1
+2392 1020 -1
+2452 1020 -1
+2456 1020 -1
+2516 1020 -1
+2520 1020 -1
+2580 1020 -1
+2584 1020 -1
+4408 1020 -1
+4412 1020 1
+6011 1020 1
+6012 1020 -1
+8596 1020 38
+989 1021 -1
+1012 1021 1
+2393 1021 -1
+2397 1021 -1
+2457 1021 -1
+2461 1021 -1
+2521 1021 -1
+2525 1021 -1
+2585 1021 -1
+2589 1021 -1
+4409 1021 -1
+4413 1021 1
+6013 1021 -1
+6016 1021 1
+8597 1021 38
+990 1022 -1
+1009 1022 1
+2394 1022 -1
+2398 1022 -1
+2458 1022 -1
+2462 1022 -1
+2522 1022 -1
+2526 1022 -1
+2586 1022 -1
+2590 1022 -1
+4410 1022 -1
+4414 1022 1
+6013 1022 1
+6014 1022 -1
+8598 1022 38
+991 1023 -1
+1010 1023 1
+2395 1023 -1
+2399 1023 -1
+2459 1023 -1
+2463 1023 -1
+2523 1023 -1
+2527 1023 -1
+2587 1023 -1
+2591 1023 -1
+4411 1023 -1
+4415 1023 1
+6014 1023 1
+6015 1023 -1
+8599 1023 38
+992 1024 -1
+1011 1024 1
+2396 1024 -1
+2400 1024 -1
+2460 1024 -1
+2464 1024 -1
+2524 1024 -1
+2528 1024 -1
+2588 1024 -1
+2592 1024 -1
+4412 1024 -1
+4416 1024 1
+6015 1024 1
+6016 1024 -1
+8600 1024 38
+993 1025 -1
+1048 1025 1
+2593 1025 -1
+2597 1025 -1
+2657 1025 -1
+2661 1025 -1
+2721 1025 -1
+2725 1025 -1
+2785 1025 -1
+2789 1025 -1
+4417 1025 1
+4445 1025 -1
+6017 1025 -1
+6020 1025 1
+8601 1025 38
+994 1026 -1
+1045 1026 1
+2594 1026 -1
+2598 1026 -1
+2658 1026 -1
+2662 1026 -1
+2722 1026 -1
+2726 1026 -1
+2786 1026 -1
+2790 1026 -1
+4418 1026 1
+4446 1026 -1
+6017 1026 1
+6018 1026 -1
+8602 1026 38
+995 1027 -1
+1046 1027 1
+2595 1027 -1
+2599 1027 -1
+2659 1027 -1
+2663 1027 -1
+2723 1027 -1
+2727 1027 -1
+2787 1027 -1
+2791 1027 -1
+4419 1027 1
+4447 1027 -1
+6018 1027 1
+6019 1027 -1
+8603 1027 38
+996 1028 -1
+1047 1028 1
+2596 1028 -1
+2600 1028 -1
+2660 1028 -1
+2664 1028 -1
+2724 1028 -1
+2728 1028 -1
+2788 1028 -1
+2792 1028 -1
+4420 1028 1
+4448 1028 -1
+6019 1028 1
+6020 1028 -1
+8604 1028 38
+997 1029 -1
+1052 1029 1
+2601 1029 -1
+2605 1029 -1
+2665 1029 -1
+2669 1029 -1
+2729 1029 -1
+2733 1029 -1
+2793 1029 -1
+2797 1029 -1
+4417 1029 -1
+4421 1029 1
+6021 1029 -1
+6024 1029 1
+8605 1029 38
+998 1030 -1
+1049 1030 1
+2602 1030 -1
+2606 1030 -1
+2666 1030 -1
+2670 1030 -1
+2730 1030 -1
+2734 1030 -1
+2794 1030 -1
+2798 1030 -1
+4418 1030 -1
+4422 1030 1
+6021 1030 1
+6022 1030 -1
+8606 1030 38
+999 1031 -1
+1050 1031 1
+2603 1031 -1
+2607 1031 -1
+2667 1031 -1
+2671 1031 -1
+2731 1031 -1
+2735 1031 -1
+2795 1031 -1
+2799 1031 -1
+4419 1031 -1
+4423 1031 1
+6022 1031 1
+6023 1031 -1
+8607 1031 38
+1000 1032 -1
+1051 1032 1
+2604 1032 -1
+2608 1032 -1
+2668 1032 -1
+2672 1032 -1
+2732 1032 -1
+2736 1032 -1
+2796 1032 -1
+2800 1032 -1
+4420 1032 -1
+4424 1032 1
+6023 1032 1
+6024 1032 -1
+8608 1032 38
+1001 1033 -1
+1056 1033 1
+2609 1033 -1
+2613 1033 -1
+2673 1033 -1
+2677 1033 -1
+2737 1033 -1
+2741 1033 -1
+2801 1033 -1
+2805 1033 -1
+4421 1033 -1
+4425 1033 1
+6025 1033 -1
+6028 1033 1
+8609 1033 38
+1002 1034 -1
+1053 1034 1
+2610 1034 -1
+2614 1034 -1
+2674 1034 -1
+2678 1034 -1
+2738 1034 -1
+2742 1034 -1
+2802 1034 -1
+2806 1034 -1
+4422 1034 -1
+4426 1034 1
+6025 1034 1
+6026 1034 -1
+8610 1034 38
+1003 1035 -1
+1054 1035 1
+2611 1035 -1
+2615 1035 -1
+2675 1035 -1
+2679 1035 -1
+2739 1035 -1
+2743 1035 -1
+2803 1035 -1
+2807 1035 -1
+4423 1035 -1
+4427 1035 1
+6026 1035 1
+6027 1035 -1
+8611 1035 38
+1004 1036 -1
+1055 1036 1
+2612 1036 -1
+2616 1036 -1
+2676 1036 -1
+2680 1036 -1
+2740 1036 -1
+2744 1036 -1
+2804 1036 -1
+2808 1036 -1
+4424 1036 -1
+4428 1036 1
+6027 1036 1
+6028 1036 -1
+8612 1036 38
+1005 1037 -1
+1028 1037 1
+2617 1037 -1
+2621 1037 -1
+2681 1037 -1
+2685 1037 -1
+2745 1037 -1
+2749 1037 -1
+2809 1037 -1
+2813 1037 -1
+4425 1037 -1
+4429 1037 1
+6029 1037 -1
+6032 1037 1
+8613 1037 38
+1006 1038 -1
+1025 1038 1
+2618 1038 -1
+2622 1038 -1
+2682 1038 -1
+2686 1038 -1
+2746 1038 -1
+2750 1038 -1
+2810 1038 -1
+2814 1038 -1
+4426 1038 -1
+4430 1038 1
+6029 1038 1
+6030 1038 -1
+8614 1038 38
+1007 1039 -1
+1026 1039 1
+2619 1039 -1
+2623 1039 -1
+2683 1039 -1
+2687 1039 -1
+2747 1039 -1
+2751 1039 -1
+2811 1039 -1
+2815 1039 -1
+4427 1039 -1
+4431 1039 1
+6030 1039 1
+6031 1039 -1
+8615 1039 38
+1008 1040 -1
+1027 1040 1
+2620 1040 -1
+2624 1040 -1
+2684 1040 -1
+2688 1040 -1
+2748 1040 -1
+2752 1040 -1
+2812 1040 -1
+2816 1040 -1
+4428 1040 -1
+4432 1040 1
+6031 1040 1
+6032 1040 -1
+8616 1040 38
+1009 1041 -1
+1032 1041 1
+2625 1041 -1
+2629 1041 -1
+2689 1041 -1
+2693 1041 -1
+2753 1041 -1
+2757 1041 -1
+2817 1041 -1
+2821 1041 -1
+4429 1041 -1
+4433 1041 1
+6033 1041 -1
+6036 1041 1
+8617 1041 38
+1010 1042 -1
+1029 1042 1
+2626 1042 -1
+2630 1042 -1
+2690 1042 -1
+2694 1042 -1
+2754 1042 -1
+2758 1042 -1
+2818 1042 -1
+2822 1042 -1
+4430 1042 -1
+4434 1042 1
+6033 1042 1
+6034 1042 -1
+8618 1042 38
+1011 1043 -1
+1030 1043 1
+2627 1043 -1
+2631 1043 -1
+2691 1043 -1
+2695 1043 -1
+2755 1043 -1
+2759 1043 -1
+2819 1043 -1
+2823 1043 -1
+4431 1043 -1
+4435 1043 1
+6034 1043 1
+6035 1043 -1
+8619 1043 38
+1012 1044 -1
+1031 1044 1
+2628 1044 -1
+2632 1044 -1
+2692 1044 -1
+2696 1044 -1
+2756 1044 -1
+2760 1044 -1
+2820 1044 -1
+2824 1044 -1
+4432 1044 -1
+4436 1044 1
+6035 1044 1
+6036 1044 -1
+8620 1044 38
+1013 1045 -1
+1036 1045 1
+2633 1045 -1
+2637 1045 -1
+2697 1045 -1
+2701 1045 -1
+2761 1045 -1
+2765 1045 -1
+2825 1045 -1
+2829 1045 -1
+4433 1045 -1
+4437 1045 1
+6037 1045 -1
+6040 1045 1
+8621 1045 38
+1014 1046 -1
+1033 1046 1
+2634 1046 -1
+2638 1046 -1
+2698 1046 -1
+2702 1046 -1
+2762 1046 -1
+2766 1046 -1
+2826 1046 -1
+2830 1046 -1
+4434 1046 -1
+4438 1046 1
+6037 1046 1
+6038 1046 -1
+8622 1046 38
+1015 1047 -1
+1034 1047 1
+2635 1047 -1
+2639 1047 -1
+2699 1047 -1
+2703 1047 -1
+2763 1047 -1
+2767 1047 -1
+2827 1047 -1
+2831 1047 -1
+4435 1047 -1
+4439 1047 1
+6038 1047 1
+6039 1047 -1
+8623 1047 38
+1016 1048 -1
+1035 1048 1
+2636 1048 -1
+2640 1048 -1
+2700 1048 -1
+2704 1048 -1
+2764 1048 -1
+2768 1048 -1
+2828 1048 -1
+2832 1048 -1
+4436 1048 -1
+4440 1048 1
+6039 1048 1
+6040 1048 -1
+8624 1048 38
+1017 1049 -1
+1040 1049 1
+2641 1049 -1
+2645 1049 -1
+2705 1049 -1
+2709 1049 -1
+2769 1049 -1
+2773 1049 -1
+2833 1049 -1
+2837 1049 -1
+4437 1049 -1
+4441 1049 1
+6041 1049 -1
+6044 1049 1
+8625 1049 38
+1018 1050 -1
+1037 1050 1
+2642 1050 -1
+2646 1050 -1
+2706 1050 -1
+2710 1050 -1
+2770 1050 -1
+2774 1050 -1
+2834 1050 -1
+2838 1050 -1
+4438 1050 -1
+4442 1050 1
+6041 1050 1
+6042 1050 -1
+8626 1050 38
+1019 1051 -1
+1038 1051 1
+2643 1051 -1
+2647 1051 -1
+2707 1051 -1
+2711 1051 -1
+2771 1051 -1
+2775 1051 -1
+2835 1051 -1
+2839 1051 -1
+4439 1051 -1
+4443 1051 1
+6042 1051 1
+6043 1051 -1
+8627 1051 38
+1020 1052 -1
+1039 1052 1
+2644 1052 -1
+2648 1052 -1
+2708 1052 -1
+2712 1052 -1
+2772 1052 -1
+2776 1052 -1
+2836 1052 -1
+2840 1052 -1
+4440 1052 -1
+4444 1052 1
+6043 1052 1
+6044 1052 -1
+8628 1052 38
+1021 1053 -1
+1044 1053 1
+2649 1053 -1
+2653 1053 -1
+2713 1053 -1
+2717 1053 -1
+2777 1053 -1
+2781 1053 -1
+2841 1053 -1
+2845 1053 -1
+4441 1053 -1
+4445 1053 1
+6045 1053 -1
+6048 1053 1
+8629 1053 38
+1022 1054 -1
+1041 1054 1
+2650 1054 -1
+2654 1054 -1
+2714 1054 -1
+2718 1054 -1
+2778 1054 -1
+2782 1054 -1
+2842 1054 -1
+2846 1054 -1
+4442 1054 -1
+4446 1054 1
+6045 1054 1
+6046 1054 -1
+8630 1054 38
+1023 1055 -1
+1042 1055 1
+2651 1055 -1
+2655 1055 -1
+2715 1055 -1
+2719 1055 -1
+2779 1055 -1
+2783 1055 -1
+2843 1055 -1
+2847 1055 -1
+4443 1055 -1
+4447 1055 1
+6046 1055 1
+6047 1055 -1
+8631 1055 38
+1024 1056 -1
+1043 1056 1
+2652 1056 -1
+2656 1056 -1
+2716 1056 -1
+2720 1056 -1
+2780 1056 -1
+2784 1056 -1
+2844 1056 -1
+2848 1056 -1
+4444 1056 -1
+4448 1056 1
+6047 1056 1
+6048 1056 -1
+8632 1056 38
+952 1057 1
+1025 1057 -1
+2849 1057 -1
+2853 1057 -1
+2913 1057 -1
+2917 1057 -1
+2977 1057 -1
+2981 1057 -1
+3041 1057 -1
+3045 1057 -1
+4449 1057 1
+4477 1057 -1
+6049 1057 -1
+6052 1057 1
+8633 1057 38
+949 1058 1
+1026 1058 -1
+2850 1058 -1
+2854 1058 -1
+2914 1058 -1
+2918 1058 -1
+2978 1058 -1
+2982 1058 -1
+3042 1058 -1
+3046 1058 -1
+4450 1058 1
+4478 1058 -1
+6049 1058 1
+6050 1058 -1
+8634 1058 38
+950 1059 1
+1027 1059 -1
+2851 1059 -1
+2855 1059 -1
+2915 1059 -1
+2919 1059 -1
+2979 1059 -1
+2983 1059 -1
+3043 1059 -1
+3047 1059 -1
+4451 1059 1
+4479 1059 -1
+6050 1059 1
+6051 1059 -1
+8635 1059 38
+951 1060 1
+1028 1060 -1
+2852 1060 -1
+2856 1060 -1
+2916 1060 -1
+2920 1060 -1
+2980 1060 -1
+2984 1060 -1
+3044 1060 -1
+3048 1060 -1
+4452 1060 1
+4480 1060 -1
+6051 1060 1
+6052 1060 -1
+8636 1060 38
+956 1061 1
+1029 1061 -1
+2857 1061 -1
+2861 1061 -1
+2921 1061 -1
+2925 1061 -1
+2985 1061 -1
+2989 1061 -1
+3049 1061 -1
+3053 1061 -1
+4449 1061 -1
+4453 1061 1
+6053 1061 -1
+6056 1061 1
+8637 1061 38
+953 1062 1
+1030 1062 -1
+2858 1062 -1
+2862 1062 -1
+2922 1062 -1
+2926 1062 -1
+2986 1062 -1
+2990 1062 -1
+3050 1062 -1
+3054 1062 -1
+4450 1062 -1
+4454 1062 1
+6053 1062 1
+6054 1062 -1
+8638 1062 38
+954 1063 1
+1031 1063 -1
+2859 1063 -1
+2863 1063 -1
+2923 1063 -1
+2927 1063 -1
+2987 1063 -1
+2991 1063 -1
+3051 1063 -1
+3055 1063 -1
+4451 1063 -1
+4455 1063 1
+6054 1063 1
+6055 1063 -1
+8639 1063 38
+955 1064 1
+1032 1064 -1
+2860 1064 -1
+2864 1064 -1
+2924 1064 -1
+2928 1064 -1
+2988 1064 -1
+2992 1064 -1
+3052 1064 -1
+3056 1064 -1
+4452 1064 -1
+4456 1064 1
+6055 1064 1
+6056 1064 -1
+8640 1064 38
+960 1065 1
+1033 1065 -1
+2865 1065 -1
+2869 1065 -1
+2929 1065 -1
+2933 1065 -1
+2993 1065 -1
+2997 1065 -1
+3057 1065 -1
+3061 1065 -1
+4453 1065 -1
+4457 1065 1
+6057 1065 -1
+6060 1065 1
+8641 1065 38
+957 1066 1
+1034 1066 -1
+2866 1066 -1
+2870 1066 -1
+2930 1066 -1
+2934 1066 -1
+2994 1066 -1
+2998 1066 -1
+3058 1066 -1
+3062 1066 -1
+4454 1066 -1
+4458 1066 1
+6057 1066 1
+6058 1066 -1
+8642 1066 38
+958 1067 1
+1035 1067 -1
+2867 1067 -1
+2871 1067 -1
+2931 1067 -1
+2935 1067 -1
+2995 1067 -1
+2999 1067 -1
+3059 1067 -1
+3063 1067 -1
+4455 1067 -1
+4459 1067 1
+6058 1067 1
+6059 1067 -1
+8643 1067 38
+959 1068 1
+1036 1068 -1
+2868 1068 -1
+2872 1068 -1
+2932 1068 -1
+2936 1068 -1
+2996 1068 -1
+3000 1068 -1
+3060 1068 -1
+3064 1068 -1
+4456 1068 -1
+4460 1068 1
+6059 1068 1
+6060 1068 -1
+8644 1068 38
+932 1069 1
+1037 1069 -1
+2873 1069 -1
+2877 1069 -1
+2937 1069 -1
+2941 1069 -1
+3001 1069 -1
+3005 1069 -1
+3065 1069 -1
+3069 1069 -1
+4457 1069 -1
+4461 1069 1
+6061 1069 -1
+6064 1069 1
+8645 1069 38
+929 1070 1
+1038 1070 -1
+2874 1070 -1
+2878 1070 -1
+2938 1070 -1
+2942 1070 -1
+3002 1070 -1
+3006 1070 -1
+3066 1070 -1
+3070 1070 -1
+4458 1070 -1
+4462 1070 1
+6061 1070 1
+6062 1070 -1
+8646 1070 38
+930 1071 1
+1039 1071 -1
+2875 1071 -1
+2879 1071 -1
+2939 1071 -1
+2943 1071 -1
+3003 1071 -1
+3007 1071 -1
+3067 1071 -1
+3071 1071 -1
+4459 1071 -1
+4463 1071 1
+6062 1071 1
+6063 1071 -1
+8647 1071 38
+931 1072 1
+1040 1072 -1
+2876 1072 -1
+2880 1072 -1
+2940 1072 -1
+2944 1072 -1
+3004 1072 -1
+3008 1072 -1
+3068 1072 -1
+3072 1072 -1
+4460 1072 -1
+4464 1072 1
+6063 1072 1
+6064 1072 -1
+8648 1072 38
+936 1073 1
+1041 1073 -1
+2881 1073 -1
+2885 1073 -1
+2945 1073 -1
+2949 1073 -1
+3009 1073 -1
+3013 1073 -1
+3073 1073 -1
+3077 1073 -1
+4461 1073 -1
+4465 1073 1
+6065 1073 -1
+6068 1073 1
+8649 1073 38
+933 1074 1
+1042 1074 -1
+2882 1074 -1
+2886 1074 -1
+2946 1074 -1
+2950 1074 -1
+3010 1074 -1
+3014 1074 -1
+3074 1074 -1
+3078 1074 -1
+4462 1074 -1
+4466 1074 1
+6065 1074 1
+6066 1074 -1
+8650 1074 38
+934 1075 1
+1043 1075 -1
+2883 1075 -1
+2887 1075 -1
+2947 1075 -1
+2951 1075 -1
+3011 1075 -1
+3015 1075 -1
+3075 1075 -1
+3079 1075 -1
+4463 1075 -1
+4467 1075 1
+6066 1075 1
+6067 1075 -1
+8651 1075 38
+935 1076 1
+1044 1076 -1
+2884 1076 -1
+2888 1076 -1
+2948 1076 -1
+2952 1076 -1
+3012 1076 -1
+3016 1076 -1
+3076 1076 -1
+3080 1076 -1
+4464 1076 -1
+4468 1076 1
+6067 1076 1
+6068 1076 -1
+8652 1076 38
+940 1077 1
+1045 1077 -1
+2889 1077 -1
+2893 1077 -1
+2953 1077 -1
+2957 1077 -1
+3017 1077 -1
+3021 1077 -1
+3081 1077 -1
+3085 1077 -1
+4465 1077 -1
+4469 1077 1
+6069 1077 -1
+6072 1077 1
+8653 1077 38
+937 1078 1
+1046 1078 -1
+2890 1078 -1
+2894 1078 -1
+2954 1078 -1
+2958 1078 -1
+3018 1078 -1
+3022 1078 -1
+3082 1078 -1
+3086 1078 -1
+4466 1078 -1
+4470 1078 1
+6069 1078 1
+6070 1078 -1
+8654 1078 38
+938 1079 1
+1047 1079 -1
+2891 1079 -1
+2895 1079 -1
+2955 1079 -1
+2959 1079 -1
+3019 1079 -1
+3023 1079 -1
+3083 1079 -1
+3087 1079 -1
+4467 1079 -1
+4471 1079 1
+6070 1079 1
+6071 1079 -1
+8655 1079 38
+939 1080 1
+1048 1080 -1
+2892 1080 -1
+2896 1080 -1
+2956 1080 -1
+2960 1080 -1
+3020 1080 -1
+3024 1080 -1
+3084 1080 -1
+3088 1080 -1
+4468 1080 -1
+4472 1080 1
+6071 1080 1
+6072 1080 -1
+8656 1080 38
+944 1081 1
+1049 1081 -1
+2897 1081 -1
+2901 1081 -1
+2961 1081 -1
+2965 1081 -1
+3025 1081 -1
+3029 1081 -1
+3089 1081 -1
+3093 1081 -1
+4469 1081 -1
+4473 1081 1
+6073 1081 -1
+6076 1081 1
+8657 1081 38
+941 1082 1
+1050 1082 -1
+2898 1082 -1
+2902 1082 -1
+2962 1082 -1
+2966 1082 -1
+3026 1082 -1
+3030 1082 -1
+3090 1082 -1
+3094 1082 -1
+4470 1082 -1
+4474 1082 1
+6073 1082 1
+6074 1082 -1
+8658 1082 38
+942 1083 1
+1051 1083 -1
+2899 1083 -1
+2903 1083 -1
+2963 1083 -1
+2967 1083 -1
+3027 1083 -1
+3031 1083 -1
+3091 1083 -1
+3095 1083 -1
+4471 1083 -1
+4475 1083 1
+6074 1083 1
+6075 1083 -1
+8659 1083 38
+943 1084 1
+1052 1084 -1
+2900 1084 -1
+2904 1084 -1
+2964 1084 -1
+2968 1084 -1
+3028 1084 -1
+3032 1084 -1
+3092 1084 -1
+3096 1084 -1
+4472 1084 -1
+4476 1084 1
+6075 1084 1
+6076 1084 -1
+8660 1084 38
+948 1085 1
+1053 1085 -1
+2905 1085 -1
+2909 1085 -1
+2969 1085 -1
+2973 1085 -1
+3033 1085 -1
+3037 1085 -1
+3097 1085 -1
+3101 1085 -1
+4473 1085 -1
+4477 1085 1
+6077 1085 -1
+6080 1085 1
+8661 1085 38
+945 1086 1
+1054 1086 -1
+2906 1086 -1
+2910 1086 -1
+2970 1086 -1
+2974 1086 -1
+3034 1086 -1
+3038 1086 -1
+3098 1086 -1
+3102 1086 -1
+4474 1086 -1
+4478 1086 1
+6077 1086 1
+6078 1086 -1
+8662 1086 38
+946 1087 1
+1055 1087 -1
+2907 1087 -1
+2911 1087 -1
+2971 1087 -1
+2975 1087 -1
+3035 1087 -1
+3039 1087 -1
+3099 1087 -1
+3103 1087 -1
+4475 1087 -1
+4479 1087 1
+6078 1087 1
+6079 1087 -1
+8663 1087 38
+947 1088 1
+1056 1088 -1
+2908 1088 -1
+2912 1088 -1
+2972 1088 -1
+2976 1088 -1
+3036 1088 -1
+3040 1088 -1
+3100 1088 -1
+3104 1088 -1
+4476 1088 -1
+4480 1088 1
+6079 1088 1
+6080 1088 -1
+8664 1088 38
+1057 1089 1
+1061 1089 1
+1121 1089 1
+1125 1089 1
+1313 1089 1
+1317 1089 1
+1377 1089 1
+1381 1089 1
+1569 1089 1
+1573 1089 1
+1633 1089 1
+1637 1089 1
+1825 1089 1
+1829 1089 1
+1889 1089 1
+1893 1089 1
+3105 1089 -1
+3137 1089 1
+4481 1089 1
+4509 1089 -1
+6081 1089 -1
+6084 1089 1
+8665 1089 38
+1058 1090 1
+1062 1090 1
+1122 1090 1
+1126 1090 1
+1314 1090 1
+1318 1090 1
+1378 1090 1
+1382 1090 1
+1570 1090 1
+1574 1090 1
+1634 1090 1
+1638 1090 1
+1826 1090 1
+1830 1090 1
+1890 1090 1
+1894 1090 1
+3106 1090 -1
+3138 1090 1
+4482 1090 1
+4510 1090 -1
+6081 1090 1
+6082 1090 -1
+8666 1090 38
+1059 1091 1
+1063 1091 1
+1123 1091 1
+1127 1091 1
+1315 1091 1
+1319 1091 1
+1379 1091 1
+1383 1091 1
+1571 1091 1
+1575 1091 1
+1635 1091 1
+1639 1091 1
+1827 1091 1
+1831 1091 1
+1891 1091 1
+1895 1091 1
+3107 1091 -1
+3139 1091 1
+4483 1091 1
+4511 1091 -1
+6082 1091 1
+6083 1091 -1
+8667 1091 38
+1060 1092 1
+1064 1092 1
+1124 1092 1
+1128 1092 1
+1316 1092 1
+1320 1092 1
+1380 1092 1
+1384 1092 1
+1572 1092 1
+1576 1092 1
+1636 1092 1
+1640 1092 1
+1828 1092 1
+1832 1092 1
+1892 1092 1
+1896 1092 1
+3108 1092 -1
+3140 1092 1
+4484 1092 1
+4512 1092 -1
+6083 1092 1
+6084 1092 -1
+8668 1092 38
+1065 1093 1
+1069 1093 1
+1129 1093 1
+1133 1093 1
+1321 1093 1
+1325 1093 1
+1385 1093 1
+1389 1093 1
+1577 1093 1
+1581 1093 1
+1641 1093 1
+1645 1093 1
+1833 1093 1
+1837 1093 1
+1897 1093 1
+1901 1093 1
+3109 1093 -1
+3141 1093 1
+4481 1093 -1
+4485 1093 1
+6085 1093 -1
+6088 1093 1
+8669 1093 38
+1066 1094 1
+1070 1094 1
+1130 1094 1
+1134 1094 1
+1322 1094 1
+1326 1094 1
+1386 1094 1
+1390 1094 1
+1578 1094 1
+1582 1094 1
+1642 1094 1
+1646 1094 1
+1834 1094 1
+1838 1094 1
+1898 1094 1
+1902 1094 1
+3110 1094 -1
+3142 1094 1
+4482 1094 -1
+4486 1094 1
+6085 1094 1
+6086 1094 -1
+8670 1094 38
+1067 1095 1
+1071 1095 1
+1131 1095 1
+1135 1095 1
+1323 1095 1
+1327 1095 1
+1387 1095 1
+1391 1095 1
+1579 1095 1
+1583 1095 1
+1643 1095 1
+1647 1095 1
+1835 1095 1
+1839 1095 1
+1899 1095 1
+1903 1095 1
+3111 1095 -1
+3143 1095 1
+4483 1095 -1
+4487 1095 1
+6086 1095 1
+6087 1095 -1
+8671 1095 38
+1068 1096 1
+1072 1096 1
+1132 1096 1
+1136 1096 1
+1324 1096 1
+1328 1096 1
+1388 1096 1
+1392 1096 1
+1580 1096 1
+1584 1096 1
+1644 1096 1
+1648 1096 1
+1836 1096 1
+1840 1096 1
+1900 1096 1
+1904 1096 1
+3112 1096 -1
+3144 1096 1
+4484 1096 -1
+4488 1096 1
+6087 1096 1
+6088 1096 -1
+8672 1096 38
+1073 1097 1
+1077 1097 1
+1137 1097 1
+1141 1097 1
+1329 1097 1
+1333 1097 1
+1393 1097 1
+1397 1097 1
+1585 1097 1
+1589 1097 1
+1649 1097 1
+1653 1097 1
+1841 1097 1
+1845 1097 1
+1905 1097 1
+1909 1097 1
+3113 1097 -1
+3145 1097 1
+4485 1097 -1
+4489 1097 1
+6089 1097 -1
+6092 1097 1
+8673 1097 38
+1074 1098 1
+1078 1098 1
+1138 1098 1
+1142 1098 1
+1330 1098 1
+1334 1098 1
+1394 1098 1
+1398 1098 1
+1586 1098 1
+1590 1098 1
+1650 1098 1
+1654 1098 1
+1842 1098 1
+1846 1098 1
+1906 1098 1
+1910 1098 1
+3114 1098 -1
+3146 1098 1
+4486 1098 -1
+4490 1098 1
+6089 1098 1
+6090 1098 -1
+8674 1098 38
+1075 1099 1
+1079 1099 1
+1139 1099 1
+1143 1099 1
+1331 1099 1
+1335 1099 1
+1395 1099 1
+1399 1099 1
+1587 1099 1
+1591 1099 1
+1651 1099 1
+1655 1099 1
+1843 1099 1
+1847 1099 1
+1907 1099 1
+1911 1099 1
+3115 1099 -1
+3147 1099 1
+4487 1099 -1
+4491 1099 1
+6090 1099 1
+6091 1099 -1
+8675 1099 38
+1076 1100 1
+1080 1100 1
+1140 1100 1
+1144 1100 1
+1332 1100 1
+1336 1100 1
+1396 1100 1
+1400 1100 1
+1588 1100 1
+1592 1100 1
+1652 1100 1
+1656 1100 1
+1844 1100 1
+1848 1100 1
+1908 1100 1
+1912 1100 1
+3116 1100 -1
+3148 1100 1
+4488 1100 -1
+4492 1100 1
+6091 1100 1
+6092 1100 -1
+8676 1100 38
+1081 1101 1
+1085 1101 1
+1145 1101 1
+1149 1101 1
+1337 1101 1
+1341 1101 1
+1401 1101 1
+1405 1101 1
+1593 1101 1
+1597 1101 1
+1657 1101 1
+1661 1101 1
+1849 1101 1
+1853 1101 1
+1913 1101 1
+1917 1101 1
+3117 1101 -1
+3149 1101 1
+4489 1101 -1
+4493 1101 1
+6093 1101 -1
+6096 1101 1
+8677 1101 38
+1082 1102 1
+1086 1102 1
+1146 1102 1
+1150 1102 1
+1338 1102 1
+1342 1102 1
+1402 1102 1
+1406 1102 1
+1594 1102 1
+1598 1102 1
+1658 1102 1
+1662 1102 1
+1850 1102 1
+1854 1102 1
+1914 1102 1
+1918 1102 1
+3118 1102 -1
+3150 1102 1
+4490 1102 -1
+4494 1102 1
+6093 1102 1
+6094 1102 -1
+8678 1102 38
+1083 1103 1
+1087 1103 1
+1147 1103 1
+1151 1103 1
+1339 1103 1
+1343 1103 1
+1403 1103 1
+1407 1103 1
+1595 1103 1
+1599 1103 1
+1659 1103 1
+1663 1103 1
+1851 1103 1
+1855 1103 1
+1915 1103 1
+1919 1103 1
+3119 1103 -1
+3151 1103 1
+4491 1103 -1
+4495 1103 1
+6094 1103 1
+6095 1103 -1
+8679 1103 38
+1084 1104 1
+1088 1104 1
+1148 1104 1
+1152 1104 1
+1340 1104 1
+1344 1104 1
+1404 1104 1
+1408 1104 1
+1596 1104 1
+1600 1104 1
+1660 1104 1
+1664 1104 1
+1852 1104 1
+1856 1104 1
+1916 1104 1
+1920 1104 1
+3120 1104 -1
+3152 1104 1
+4492 1104 -1
+4496 1104 1
+6095 1104 1
+6096 1104 -1
+8680 1104 38
+1089 1105 1
+1093 1105 1
+1153 1105 1
+1157 1105 1
+1345 1105 1
+1349 1105 1
+1409 1105 1
+1413 1105 1
+1601 1105 1
+1605 1105 1
+1665 1105 1
+1669 1105 1
+1857 1105 1
+1861 1105 1
+1921 1105 1
+1925 1105 1
+3121 1105 -1
+3153 1105 1
+4493 1105 -1
+4497 1105 1
+6097 1105 -1
+6100 1105 1
+8681 1105 38
+1090 1106 1
+1094 1106 1
+1154 1106 1
+1158 1106 1
+1346 1106 1
+1350 1106 1
+1410 1106 1
+1414 1106 1
+1602 1106 1
+1606 1106 1
+1666 1106 1
+1670 1106 1
+1858 1106 1
+1862 1106 1
+1922 1106 1
+1926 1106 1
+3122 1106 -1
+3154 1106 1
+4494 1106 -1
+4498 1106 1
+6097 1106 1
+6098 1106 -1
+8682 1106 38
+1091 1107 1
+1095 1107 1
+1155 1107 1
+1159 1107 1
+1347 1107 1
+1351 1107 1
+1411 1107 1
+1415 1107 1
+1603 1107 1
+1607 1107 1
+1667 1107 1
+1671 1107 1
+1859 1107 1
+1863 1107 1
+1923 1107 1
+1927 1107 1
+3123 1107 -1
+3155 1107 1
+4495 1107 -1
+4499 1107 1
+6098 1107 1
+6099 1107 -1
+8683 1107 38
+1092 1108 1
+1096 1108 1
+1156 1108 1
+1160 1108 1
+1348 1108 1
+1352 1108 1
+1412 1108 1
+1416 1108 1
+1604 1108 1
+1608 1108 1
+1668 1108 1
+1672 1108 1
+1860 1108 1
+1864 1108 1
+1924 1108 1
+1928 1108 1
+3124 1108 -1
+3156 1108 1
+4496 1108 -1
+4500 1108 1
+6099 1108 1
+6100 1108 -1
+8684 1108 38
+1097 1109 1
+1101 1109 1
+1161 1109 1
+1165 1109 1
+1353 1109 1
+1357 1109 1
+1417 1109 1
+1421 1109 1
+1609 1109 1
+1613 1109 1
+1673 1109 1
+1677 1109 1
+1865 1109 1
+1869 1109 1
+1929 1109 1
+1933 1109 1
+3125 1109 -1
+3157 1109 1
+4497 1109 -1
+4501 1109 1
+6101 1109 -1
+6104 1109 1
+8685 1109 38
+1098 1110 1
+1102 1110 1
+1162 1110 1
+1166 1110 1
+1354 1110 1
+1358 1110 1
+1418 1110 1
+1422 1110 1
+1610 1110 1
+1614 1110 1
+1674 1110 1
+1678 1110 1
+1866 1110 1
+1870 1110 1
+1930 1110 1
+1934 1110 1
+3126 1110 -1
+3158 1110 1
+4498 1110 -1
+4502 1110 1
+6101 1110 1
+6102 1110 -1
+8686 1110 38
+1099 1111 1
+1103 1111 1
+1163 1111 1
+1167 1111 1
+1355 1111 1
+1359 1111 1
+1419 1111 1
+1423 1111 1
+1611 1111 1
+1615 1111 1
+1675 1111 1
+1679 1111 1
+1867 1111 1
+1871 1111 1
+1931 1111 1
+1935 1111 1
+3127 1111 -1
+3159 1111 1
+4499 1111 -1
+4503 1111 1
+6102 1111 1
+6103 1111 -1
+8687 1111 38
+1100 1112 1
+1104 1112 1
+1164 1112 1
+1168 1112 1
+1356 1112 1
+1360 1112 1
+1420 1112 1
+1424 1112 1
+1612 1112 1
+1616 1112 1
+1676 1112 1
+1680 1112 1
+1868 1112 1
+1872 1112 1
+1932 1112 1
+1936 1112 1
+3128 1112 -1
+3160 1112 1
+4500 1112 -1
+4504 1112 1
+6103 1112 1
+6104 1112 -1
+8688 1112 38
+1105 1113 1
+1109 1113 1
+1169 1113 1
+1173 1113 1
+1361 1113 1
+1365 1113 1
+1425 1113 1
+1429 1113 1
+1617 1113 1
+1621 1113 1
+1681 1113 1
+1685 1113 1
+1873 1113 1
+1877 1113 1
+1937 1113 1
+1941 1113 1
+3129 1113 -1
+3161 1113 1
+4501 1113 -1
+4505 1113 1
+6105 1113 -1
+6108 1113 1
+8689 1113 38
+1106 1114 1
+1110 1114 1
+1170 1114 1
+1174 1114 1
+1362 1114 1
+1366 1114 1
+1426 1114 1
+1430 1114 1
+1618 1114 1
+1622 1114 1
+1682 1114 1
+1686 1114 1
+1874 1114 1
+1878 1114 1
+1938 1114 1
+1942 1114 1
+3130 1114 -1
+3162 1114 1
+4502 1114 -1
+4506 1114 1
+6105 1114 1
+6106 1114 -1
+8690 1114 38
+1107 1115 1
+1111 1115 1
+1171 1115 1
+1175 1115 1
+1363 1115 1
+1367 1115 1
+1427 1115 1
+1431 1115 1
+1619 1115 1
+1623 1115 1
+1683 1115 1
+1687 1115 1
+1875 1115 1
+1879 1115 1
+1939 1115 1
+1943 1115 1
+3131 1115 -1
+3163 1115 1
+4503 1115 -1
+4507 1115 1
+6106 1115 1
+6107 1115 -1
+8691 1115 38
+1108 1116 1
+1112 1116 1
+1172 1116 1
+1176 1116 1
+1364 1116 1
+1368 1116 1
+1428 1116 1
+1432 1116 1
+1620 1116 1
+1624 1116 1
+1684 1116 1
+1688 1116 1
+1876 1116 1
+1880 1116 1
+1940 1116 1
+1944 1116 1
+3132 1116 -1
+3164 1116 1
+4504 1116 -1
+4508 1116 1
+6107 1116 1
+6108 1116 -1
+8692 1116 38
+1113 1117 1
+1117 1117 1
+1177 1117 1
+1181 1117 1
+1369 1117 1
+1373 1117 1
+1433 1117 1
+1437 1117 1
+1625 1117 1
+1629 1117 1
+1689 1117 1
+1693 1117 1
+1881 1117 1
+1885 1117 1
+1945 1117 1
+1949 1117 1
+3133 1117 -1
+3165 1117 1
+4505 1117 -1
+4509 1117 1
+6109 1117 -1
+6112 1117 1
+8693 1117 38
+1114 1118 1
+1118 1118 1
+1178 1118 1
+1182 1118 1
+1370 1118 1
+1374 1118 1
+1434 1118 1
+1438 1118 1
+1626 1118 1
+1630 1118 1
+1690 1118 1
+1694 1118 1
+1882 1118 1
+1886 1118 1
+1946 1118 1
+1950 1118 1
+3134 1118 -1
+3166 1118 1
+4506 1118 -1
+4510 1118 1
+6109 1118 1
+6110 1118 -1
+8694 1118 38
+1115 1119 1
+1119 1119 1
+1179 1119 1
+1183 1119 1
+1371 1119 1
+1375 1119 1
+1435 1119 1
+1439 1119 1
+1627 1119 1
+1631 1119 1
+1691 1119 1
+1695 1119 1
+1883 1119 1
+1887 1119 1
+1947 1119 1
+1951 1119 1
+3135 1119 -1
+3167 1119 1
+4507 1119 -1
+4511 1119 1
+6110 1119 1
+6111 1119 -1
+8695 1119 38
+1116 1120 1
+1120 1120 1
+1180 1120 1
+1184 1120 1
+1372 1120 1
+1376 1120 1
+1436 1120 1
+1440 1120 1
+1628 1120 1
+1632 1120 1
+1692 1120 1
+1696 1120 1
+1884 1120 1
+1888 1120 1
+1948 1120 1
+1952 1120 1
+3136 1120 -1
+3168 1120 1
+4508 1120 -1
+4512 1120 1
+6111 1120 1
+6112 1120 -1
+8696 1120 38
+1185 1121 1
+1189 1121 1
+1249 1121 1
+1253 1121 1
+1441 1121 1
+1445 1121 1
+1505 1121 1
+1509 1121 1
+1697 1121 1
+1701 1121 1
+1761 1121 1
+1765 1121 1
+1953 1121 1
+1957 1121 1
+2017 1121 1
+2021 1121 1
+3105 1121 1
+3137 1121 -1
+4513 1121 1
+4541 1121 -1
+6113 1121 -1
+6116 1121 1
+8697 1121 38
+1186 1122 1
+1190 1122 1
+1250 1122 1
+1254 1122 1
+1442 1122 1
+1446 1122 1
+1506 1122 1
+1510 1122 1
+1698 1122 1
+1702 1122 1
+1762 1122 1
+1766 1122 1
+1954 1122 1
+1958 1122 1
+2018 1122 1
+2022 1122 1
+3106 1122 1
+3138 1122 -1
+4514 1122 1
+4542 1122 -1
+6113 1122 1
+6114 1122 -1
+8698 1122 38
+1187 1123 1
+1191 1123 1
+1251 1123 1
+1255 1123 1
+1443 1123 1
+1447 1123 1
+1507 1123 1
+1511 1123 1
+1699 1123 1
+1703 1123 1
+1763 1123 1
+1767 1123 1
+1955 1123 1
+1959 1123 1
+2019 1123 1
+2023 1123 1
+3107 1123 1
+3139 1123 -1
+4515 1123 1
+4543 1123 -1
+6114 1123 1
+6115 1123 -1
+8699 1123 38
+1188 1124 1
+1192 1124 1
+1252 1124 1
+1256 1124 1
+1444 1124 1
+1448 1124 1
+1508 1124 1
+1512 1124 1
+1700 1124 1
+1704 1124 1
+1764 1124 1
+1768 1124 1
+1956 1124 1
+1960 1124 1
+2020 1124 1
+2024 1124 1
+3108 1124 1
+3140 1124 -1
+4516 1124 1
+4544 1124 -1
+6115 1124 1
+6116 1124 -1
+8700 1124 38
+1193 1125 1
+1197 1125 1
+1257 1125 1
+1261 1125 1
+1449 1125 1
+1453 1125 1
+1513 1125 1
+1517 1125 1
+1705 1125 1
+1709 1125 1
+1769 1125 1
+1773 1125 1
+1961 1125 1
+1965 1125 1
+2025 1125 1
+2029 1125 1
+3109 1125 1
+3141 1125 -1
+4513 1125 -1
+4517 1125 1
+6117 1125 -1
+6120 1125 1
+8701 1125 38
+1194 1126 1
+1198 1126 1
+1258 1126 1
+1262 1126 1
+1450 1126 1
+1454 1126 1
+1514 1126 1
+1518 1126 1
+1706 1126 1
+1710 1126 1
+1770 1126 1
+1774 1126 1
+1962 1126 1
+1966 1126 1
+2026 1126 1
+2030 1126 1
+3110 1126 1
+3142 1126 -1
+4514 1126 -1
+4518 1126 1
+6117 1126 1
+6118 1126 -1
+8702 1126 38
+1195 1127 1
+1199 1127 1
+1259 1127 1
+1263 1127 1
+1451 1127 1
+1455 1127 1
+1515 1127 1
+1519 1127 1
+1707 1127 1
+1711 1127 1
+1771 1127 1
+1775 1127 1
+1963 1127 1
+1967 1127 1
+2027 1127 1
+2031 1127 1
+3111 1127 1
+3143 1127 -1
+4515 1127 -1
+4519 1127 1
+6118 1127 1
+6119 1127 -1
+8703 1127 38
+1196 1128 1
+1200 1128 1
+1260 1128 1
+1264 1128 1
+1452 1128 1
+1456 1128 1
+1516 1128 1
+1520 1128 1
+1708 1128 1
+1712 1128 1
+1772 1128 1
+1776 1128 1
+1964 1128 1
+1968 1128 1
+2028 1128 1
+2032 1128 1
+3112 1128 1
+3144 1128 -1
+4516 1128 -1
+4520 1128 1
+6119 1128 1
+6120 1128 -1
+8704 1128 38
+1201 1129 1
+1205 1129 1
+1265 1129 1
+1269 1129 1
+1457 1129 1
+1461 1129 1
+1521 1129 1
+1525 1129 1
+1713 1129 1
+1717 1129 1
+1777 1129 1
+1781 1129 1
+1969 1129 1
+1973 1129 1
+2033 1129 1
+2037 1129 1
+3113 1129 1
+3145 1129 -1
+4517 1129 -1
+4521 1129 1
+6121 1129 -1
+6124 1129 1
+8705 1129 38
+1202 1130 1
+1206 1130 1
+1266 1130 1
+1270 1130 1
+1458 1130 1
+1462 1130 1
+1522 1130 1
+1526 1130 1
+1714 1130 1
+1718 1130 1
+1778 1130 1
+1782 1130 1
+1970 1130 1
+1974 1130 1
+2034 1130 1
+2038 1130 1
+3114 1130 1
+3146 1130 -1
+4518 1130 -1
+4522 1130 1
+6121 1130 1
+6122 1130 -1
+8706 1130 38
+1203 1131 1
+1207 1131 1
+1267 1131 1
+1271 1131 1
+1459 1131 1
+1463 1131 1
+1523 1131 1
+1527 1131 1
+1715 1131 1
+1719 1131 1
+1779 1131 1
+1783 1131 1
+1971 1131 1
+1975 1131 1
+2035 1131 1
+2039 1131 1
+3115 1131 1
+3147 1131 -1
+4519 1131 -1
+4523 1131 1
+6122 1131 1
+6123 1131 -1
+8707 1131 38
+1204 1132 1
+1208 1132 1
+1268 1132 1
+1272 1132 1
+1460 1132 1
+1464 1132 1
+1524 1132 1
+1528 1132 1
+1716 1132 1
+1720 1132 1
+1780 1132 1
+1784 1132 1
+1972 1132 1
+1976 1132 1
+2036 1132 1
+2040 1132 1
+3116 1132 1
+3148 1132 -1
+4520 1132 -1
+4524 1132 1
+6123 1132 1
+6124 1132 -1
+8708 1132 38
+1209 1133 1
+1213 1133 1
+1273 1133 1
+1277 1133 1
+1465 1133 1
+1469 1133 1
+1529 1133 1
+1533 1133 1
+1721 1133 1
+1725 1133 1
+1785 1133 1
+1789 1133 1
+1977 1133 1
+1981 1133 1
+2041 1133 1
+2045 1133 1
+3117 1133 1
+3149 1133 -1
+4521 1133 -1
+4525 1133 1
+6125 1133 -1
+6128 1133 1
+8709 1133 38
+1210 1134 1
+1214 1134 1
+1274 1134 1
+1278 1134 1
+1466 1134 1
+1470 1134 1
+1530 1134 1
+1534 1134 1
+1722 1134 1
+1726 1134 1
+1786 1134 1
+1790 1134 1
+1978 1134 1
+1982 1134 1
+2042 1134 1
+2046 1134 1
+3118 1134 1
+3150 1134 -1
+4522 1134 -1
+4526 1134 1
+6125 1134 1
+6126 1134 -1
+8710 1134 38
+1211 1135 1
+1215 1135 1
+1275 1135 1
+1279 1135 1
+1467 1135 1
+1471 1135 1
+1531 1135 1
+1535 1135 1
+1723 1135 1
+1727 1135 1
+1787 1135 1
+1791 1135 1
+1979 1135 1
+1983 1135 1
+2043 1135 1
+2047 1135 1
+3119 1135 1
+3151 1135 -1
+4523 1135 -1
+4527 1135 1
+6126 1135 1
+6127 1135 -1
+8711 1135 38
+1212 1136 1
+1216 1136 1
+1276 1136 1
+1280 1136 1
+1468 1136 1
+1472 1136 1
+1532 1136 1
+1536 1136 1
+1724 1136 1
+1728 1136 1
+1788 1136 1
+1792 1136 1
+1980 1136 1
+1984 1136 1
+2044 1136 1
+2048 1136 1
+3120 1136 1
+3152 1136 -1
+4524 1136 -1
+4528 1136 1
+6127 1136 1
+6128 1136 -1
+8712 1136 38
+1217 1137 1
+1221 1137 1
+1281 1137 1
+1285 1137 1
+1473 1137 1
+1477 1137 1
+1537 1137 1
+1541 1137 1
+1729 1137 1
+1733 1137 1
+1793 1137 1
+1797 1137 1
+1985 1137 1
+1989 1137 1
+2049 1137 1
+2053 1137 1
+3121 1137 1
+3153 1137 -1
+4525 1137 -1
+4529 1137 1
+6129 1137 -1
+6132 1137 1
+8713 1137 38
+1218 1138 1
+1222 1138 1
+1282 1138 1
+1286 1138 1
+1474 1138 1
+1478 1138 1
+1538 1138 1
+1542 1138 1
+1730 1138 1
+1734 1138 1
+1794 1138 1
+1798 1138 1
+1986 1138 1
+1990 1138 1
+2050 1138 1
+2054 1138 1
+3122 1138 1
+3154 1138 -1
+4526 1138 -1
+4530 1138 1
+6129 1138 1
+6130 1138 -1
+8714 1138 38
+1219 1139 1
+1223 1139 1
+1283 1139 1
+1287 1139 1
+1475 1139 1
+1479 1139 1
+1539 1139 1
+1543 1139 1
+1731 1139 1
+1735 1139 1
+1795 1139 1
+1799 1139 1
+1987 1139 1
+1991 1139 1
+2051 1139 1
+2055 1139 1
+3123 1139 1
+3155 1139 -1
+4527 1139 -1
+4531 1139 1
+6130 1139 1
+6131 1139 -1
+8715 1139 38
+1220 1140 1
+1224 1140 1
+1284 1140 1
+1288 1140 1
+1476 1140 1
+1480 1140 1
+1540 1140 1
+1544 1140 1
+1732 1140 1
+1736 1140 1
+1796 1140 1
+1800 1140 1
+1988 1140 1
+1992 1140 1
+2052 1140 1
+2056 1140 1
+3124 1140 1
+3156 1140 -1
+4528 1140 -1
+4532 1140 1
+6131 1140 1
+6132 1140 -1
+8716 1140 38
+1225 1141 1
+1229 1141 1
+1289 1141 1
+1293 1141 1
+1481 1141 1
+1485 1141 1
+1545 1141 1
+1549 1141 1
+1737 1141 1
+1741 1141 1
+1801 1141 1
+1805 1141 1
+1993 1141 1
+1997 1141 1
+2057 1141 1
+2061 1141 1
+3125 1141 1
+3157 1141 -1
+4529 1141 -1
+4533 1141 1
+6133 1141 -1
+6136 1141 1
+8717 1141 38
+1226 1142 1
+1230 1142 1
+1290 1142 1
+1294 1142 1
+1482 1142 1
+1486 1142 1
+1546 1142 1
+1550 1142 1
+1738 1142 1
+1742 1142 1
+1802 1142 1
+1806 1142 1
+1994 1142 1
+1998 1142 1
+2058 1142 1
+2062 1142 1
+3126 1142 1
+3158 1142 -1
+4530 1142 -1
+4534 1142 1
+6133 1142 1
+6134 1142 -1
+8718 1142 38
+1227 1143 1
+1231 1143 1
+1291 1143 1
+1295 1143 1
+1483 1143 1
+1487 1143 1
+1547 1143 1
+1551 1143 1
+1739 1143 1
+1743 1143 1
+1803 1143 1
+1807 1143 1
+1995 1143 1
+1999 1143 1
+2059 1143 1
+2063 1143 1
+3127 1143 1
+3159 1143 -1
+4531 1143 -1
+4535 1143 1
+6134 1143 1
+6135 1143 -1
+8719 1143 38
+1228 1144 1
+1232 1144 1
+1292 1144 1
+1296 1144 1
+1484 1144 1
+1488 1144 1
+1548 1144 1
+1552 1144 1
+1740 1144 1
+1744 1144 1
+1804 1144 1
+1808 1144 1
+1996 1144 1
+2000 1144 1
+2060 1144 1
+2064 1144 1
+3128 1144 1
+3160 1144 -1
+4532 1144 -1
+4536 1144 1
+6135 1144 1
+6136 1144 -1
+8720 1144 38
+1233 1145 1
+1237 1145 1
+1297 1145 1
+1301 1145 1
+1489 1145 1
+1493 1145 1
+1553 1145 1
+1557 1145 1
+1745 1145 1
+1749 1145 1
+1809 1145 1
+1813 1145 1
+2001 1145 1
+2005 1145 1
+2065 1145 1
+2069 1145 1
+3129 1145 1
+3161 1145 -1
+4533 1145 -1
+4537 1145 1
+6137 1145 -1
+6140 1145 1
+8721 1145 38
+1234 1146 1
+1238 1146 1
+1298 1146 1
+1302 1146 1
+1490 1146 1
+1494 1146 1
+1554 1146 1
+1558 1146 1
+1746 1146 1
+1750 1146 1
+1810 1146 1
+1814 1146 1
+2002 1146 1
+2006 1146 1
+2066 1146 1
+2070 1146 1
+3130 1146 1
+3162 1146 -1
+4534 1146 -1
+4538 1146 1
+6137 1146 1
+6138 1146 -1
+8722 1146 38
+1235 1147 1
+1239 1147 1
+1299 1147 1
+1303 1147 1
+1491 1147 1
+1495 1147 1
+1555 1147 1
+1559 1147 1
+1747 1147 1
+1751 1147 1
+1811 1147 1
+1815 1147 1
+2003 1147 1
+2007 1147 1
+2067 1147 1
+2071 1147 1
+3131 1147 1
+3163 1147 -1
+4535 1147 -1
+4539 1147 1
+6138 1147 1
+6139 1147 -1
+8723 1147 38
+1236 1148 1
+1240 1148 1
+1300 1148 1
+1304 1148 1
+1492 1148 1
+1496 1148 1
+1556 1148 1
+1560 1148 1
+1748 1148 1
+1752 1148 1
+1812 1148 1
+1816 1148 1
+2004 1148 1
+2008 1148 1
+2068 1148 1
+2072 1148 1
+3132 1148 1
+3164 1148 -1
+4536 1148 -1
+4540 1148 1
+6139 1148 1
+6140 1148 -1
+8724 1148 38
+1241 1149 1
+1245 1149 1
+1305 1149 1
+1309 1149 1
+1497 1149 1
+1501 1149 1
+1561 1149 1
+1565 1149 1
+1753 1149 1
+1757 1149 1
+1817 1149 1
+1821 1149 1
+2009 1149 1
+2013 1149 1
+2073 1149 1
+2077 1149 1
+3133 1149 1
+3165 1149 -1
+4537 1149 -1
+4541 1149 1
+6141 1149 -1
+6144 1149 1
+8725 1149 38
+1242 1150 1
+1246 1150 1
+1306 1150 1
+1310 1150 1
+1498 1150 1
+1502 1150 1
+1562 1150 1
+1566 1150 1
+1754 1150 1
+1758 1150 1
+1818 1150 1
+1822 1150 1
+2010 1150 1
+2014 1150 1
+2074 1150 1
+2078 1150 1
+3134 1150 1
+3166 1150 -1
+4538 1150 -1
+4542 1150 1
+6141 1150 1
+6142 1150 -1
+8726 1150 38
+1243 1151 1
+1247 1151 1
+1307 1151 1
+1311 1151 1
+1499 1151 1
+1503 1151 1
+1563 1151 1
+1567 1151 1
+1755 1151 1
+1759 1151 1
+1819 1151 1
+1823 1151 1
+2011 1151 1
+2015 1151 1
+2075 1151 1
+2079 1151 1
+3135 1151 1
+3167 1151 -1
+4539 1151 -1
+4543 1151 1
+6142 1151 1
+6143 1151 -1
+8727 1151 38
+1244 1152 1
+1248 1152 1
+1308 1152 1
+1312 1152 1
+1500 1152 1
+1504 1152 1
+1564 1152 1
+1568 1152 1
+1756 1152 1
+1760 1152 1
+1820 1152 1
+1824 1152 1
+2012 1152 1
+2016 1152 1
+2076 1152 1
+2080 1152 1
+3136 1152 1
+3168 1152 -1
+4540 1152 -1
+4544 1152 1
+6143 1152 1
+6144 1152 -1
+8728 1152 38
+1057 1153 -1
+1548 1153 1
+2081 1153 1
+2917 1153 -1
+3169 1153 -1
+3365 1153 1
+4545 1153 1
+4669 1153 -1
+6145 1153 -1
+6152 1153 1
+8729 1153 38
+1058 1154 -1
+1549 1154 1
+2082 1154 1
+2918 1154 -1
+3170 1154 -1
+3366 1154 1
+4546 1154 1
+4670 1154 -1
+6145 1154 1
+6146 1154 -1
+8730 1154 38
+1059 1155 -1
+1550 1155 1
+2083 1155 1
+2919 1155 -1
+3171 1155 -1
+3367 1155 1
+4547 1155 1
+4671 1155 -1
+6146 1155 1
+6147 1155 -1
+8731 1155 38
+1060 1156 -1
+1551 1156 1
+2084 1156 1
+2920 1156 -1
+3172 1156 -1
+3368 1156 1
+4548 1156 1
+4672 1156 -1
+6147 1156 1
+6148 1156 -1
+8732 1156 38
+1061 1157 -1
+1552 1157 1
+2085 1157 1
+2913 1157 -1
+3173 1157 -1
+3361 1157 1
+4549 1157 1
+4665 1157 -1
+6148 1157 1
+6149 1157 -1
+8733 1157 38
+1062 1158 -1
+1545 1158 1
+2086 1158 1
+2914 1158 -1
+3174 1158 -1
+3362 1158 1
+4550 1158 1
+4666 1158 -1
+6149 1158 1
+6150 1158 -1
+8734 1158 38
+1063 1159 -1
+1546 1159 1
+2087 1159 1
+2915 1159 -1
+3175 1159 -1
+3363 1159 1
+4551 1159 1
+4667 1159 -1
+6150 1159 1
+6151 1159 -1
+8735 1159 38
+1064 1160 -1
+1547 1160 1
+2088 1160 1
+2916 1160 -1
+3176 1160 -1
+3364 1160 1
+4552 1160 1
+4668 1160 -1
+6151 1160 1
+6152 1160 -1
+8736 1160 38
+1065 1161 -1
+1556 1161 1
+2089 1161 1
+2925 1161 -1
+3177 1161 -1
+3373 1161 1
+4545 1161 -1
+4553 1161 1
+6153 1161 -1
+6160 1161 1
+8737 1161 38
+1066 1162 -1
+1557 1162 1
+2090 1162 1
+2926 1162 -1
+3178 1162 -1
+3374 1162 1
+4546 1162 -1
+4554 1162 1
+6153 1162 1
+6154 1162 -1
+8738 1162 38
+1067 1163 -1
+1558 1163 1
+2091 1163 1
+2927 1163 -1
+3179 1163 -1
+3375 1163 1
+4547 1163 -1
+4555 1163 1
+6154 1163 1
+6155 1163 -1
+8739 1163 38
+1068 1164 -1
+1559 1164 1
+2092 1164 1
+2928 1164 -1
+3180 1164 -1
+3376 1164 1
+4548 1164 -1
+4556 1164 1
+6155 1164 1
+6156 1164 -1
+8740 1164 38
+1069 1165 -1
+1560 1165 1
+2093 1165 1
+2921 1165 -1
+3181 1165 -1
+3369 1165 1
+4549 1165 -1
+4557 1165 1
+6156 1165 1
+6157 1165 -1
+8741 1165 38
+1070 1166 -1
+1553 1166 1
+2094 1166 1
+2922 1166 -1
+3182 1166 -1
+3370 1166 1
+4550 1166 -1
+4558 1166 1
+6157 1166 1
+6158 1166 -1
+8742 1166 38
+1071 1167 -1
+1554 1167 1
+2095 1167 1
+2923 1167 -1
+3183 1167 -1
+3371 1167 1
+4551 1167 -1
+4559 1167 1
+6158 1167 1
+6159 1167 -1
+8743 1167 38
+1072 1168 -1
+1555 1168 1
+2096 1168 1
+2924 1168 -1
+3184 1168 -1
+3372 1168 1
+4552 1168 -1
+4560 1168 1
+6159 1168 1
+6160 1168 -1
+8744 1168 38
+1073 1169 -1
+1564 1169 1
+2097 1169 1
+2933 1169 -1
+3185 1169 -1
+3381 1169 1
+4553 1169 -1
+4561 1169 1
+6161 1169 -1
+6168 1169 1
+8745 1169 38
+1074 1170 -1
+1565 1170 1
+2098 1170 1
+2934 1170 -1
+3186 1170 -1
+3382 1170 1
+4554 1170 -1
+4562 1170 1
+6161 1170 1
+6162 1170 -1
+8746 1170 38
+1075 1171 -1
+1566 1171 1
+2099 1171 1
+2935 1171 -1
+3187 1171 -1
+3383 1171 1
+4555 1171 -1
+4563 1171 1
+6162 1171 1
+6163 1171 -1
+8747 1171 38
+1076 1172 -1
+1567 1172 1
+2100 1172 1
+2936 1172 -1
+3188 1172 -1
+3384 1172 1
+4556 1172 -1
+4564 1172 1
+6163 1172 1
+6164 1172 -1
+8748 1172 38
+1077 1173 -1
+1568 1173 1
+2101 1173 1
+2929 1173 -1
+3189 1173 -1
+3377 1173 1
+4557 1173 -1
+4565 1173 1
+6164 1173 1
+6165 1173 -1
+8749 1173 38
+1078 1174 -1
+1561 1174 1
+2102 1174 1
+2930 1174 -1
+3190 1174 -1
+3378 1174 1
+4558 1174 -1
+4566 1174 1
+6165 1174 1
+6166 1174 -1
+8750 1174 38
+1079 1175 -1
+1562 1175 1
+2103 1175 1
+2931 1175 -1
+3191 1175 -1
+3379 1175 1
+4559 1175 -1
+4567 1175 1
+6166 1175 1
+6167 1175 -1
+8751 1175 38
+1080 1176 -1
+1563 1176 1
+2104 1176 1
+2932 1176 -1
+3192 1176 -1
+3380 1176 1
+4560 1176 -1
+4568 1176 1
+6167 1176 1
+6168 1176 -1
+8752 1176 38
+1081 1177 -1
+1448 1177 1
+2105 1177 1
+2941 1177 -1
+3193 1177 -1
+3389 1177 1
+4561 1177 -1
+4569 1177 1
+6169 1177 -1
+6176 1177 1
+8753 1177 38
+1082 1178 -1
+1441 1178 1
+2106 1178 1
+2942 1178 -1
+3194 1178 -1
+3390 1178 1
+4562 1178 -1
+4570 1178 1
+6169 1178 1
+6170 1178 -1
+8754 1178 38
+1083 1179 -1
+1442 1179 1
+2107 1179 1
+2943 1179 -1
+3195 1179 -1
+3391 1179 1
+4563 1179 -1
+4571 1179 1
+6170 1179 1
+6171 1179 -1
+8755 1179 38
+1084 1180 -1
+1443 1180 1
+2108 1180 1
+2944 1180 -1
+3196 1180 -1
+3392 1180 1
+4564 1180 -1
+4572 1180 1
+6171 1180 1
+6172 1180 -1
+8756 1180 38
+1085 1181 -1
+1444 1181 1
+2109 1181 1
+2937 1181 -1
+3197 1181 -1
+3385 1181 1
+4565 1181 -1
+4573 1181 1
+6172 1181 1
+6173 1181 -1
+8757 1181 38
+1086 1182 -1
+1445 1182 1
+2110 1182 1
+2938 1182 -1
+3198 1182 -1
+3386 1182 1
+4566 1182 -1
+4574 1182 1
+6173 1182 1
+6174 1182 -1
+8758 1182 38
+1087 1183 -1
+1446 1183 1
+2111 1183 1
+2939 1183 -1
+3199 1183 -1
+3387 1183 1
+4567 1183 -1
+4575 1183 1
+6174 1183 1
+6175 1183 -1
+8759 1183 38
+1088 1184 -1
+1447 1184 1
+2112 1184 1
+2940 1184 -1
+3200 1184 -1
+3388 1184 1
+4568 1184 -1
+4576 1184 1
+6175 1184 1
+6176 1184 -1
+8760 1184 38
+1089 1185 -1
+1456 1185 1
+2113 1185 1
+2949 1185 -1
+3201 1185 -1
+3397 1185 1
+4569 1185 -1
+4577 1185 1
+6177 1185 -1
+6184 1185 1
+8761 1185 38
+1090 1186 -1
+1449 1186 1
+2114 1186 1
+2950 1186 -1
+3202 1186 -1
+3398 1186 1
+4570 1186 -1
+4578 1186 1
+6177 1186 1
+6178 1186 -1
+8762 1186 38
+1091 1187 -1
+1450 1187 1
+2115 1187 1
+2951 1187 -1
+3203 1187 -1
+3399 1187 1
+4571 1187 -1
+4579 1187 1
+6178 1187 1
+6179 1187 -1
+8763 1187 38
+1092 1188 -1
+1451 1188 1
+2116 1188 1
+2952 1188 -1
+3204 1188 -1
+3400 1188 1
+4572 1188 -1
+4580 1188 1
+6179 1188 1
+6180 1188 -1
+8764 1188 38
+1093 1189 -1
+1452 1189 1
+2117 1189 1
+2945 1189 -1
+3205 1189 -1
+3393 1189 1
+4573 1189 -1
+4581 1189 1
+6180 1189 1
+6181 1189 -1
+8765 1189 38
+1094 1190 -1
+1453 1190 1
+2118 1190 1
+2946 1190 -1
+3206 1190 -1
+3394 1190 1
+4574 1190 -1
+4582 1190 1
+6181 1190 1
+6182 1190 -1
+8766 1190 38
+1095 1191 -1
+1454 1191 1
+2119 1191 1
+2947 1191 -1
+3207 1191 -1
+3395 1191 1
+4575 1191 -1
+4583 1191 1
+6182 1191 1
+6183 1191 -1
+8767 1191 38
+1096 1192 -1
+1455 1192 1
+2120 1192 1
+2948 1192 -1
+3208 1192 -1
+3396 1192 1
+4576 1192 -1
+4584 1192 1
+6183 1192 1
+6184 1192 -1
+8768 1192 38
+1097 1193 -1
+1464 1193 1
+2121 1193 1
+2957 1193 -1
+3209 1193 -1
+3405 1193 1
+4577 1193 -1
+4585 1193 1
+6185 1193 -1
+6192 1193 1
+8769 1193 38
+1098 1194 -1
+1457 1194 1
+2122 1194 1
+2958 1194 -1
+3210 1194 -1
+3406 1194 1
+4578 1194 -1
+4586 1194 1
+6185 1194 1
+6186 1194 -1
+8770 1194 38
+1099 1195 -1
+1458 1195 1
+2123 1195 1
+2959 1195 -1
+3211 1195 -1
+3407 1195 1
+4579 1195 -1
+4587 1195 1
+6186 1195 1
+6187 1195 -1
+8771 1195 38
+1100 1196 -1
+1459 1196 1
+2124 1196 1
+2960 1196 -1
+3212 1196 -1
+3408 1196 1
+4580 1196 -1
+4588 1196 1
+6187 1196 1
+6188 1196 -1
+8772 1196 38
+1101 1197 -1
+1460 1197 1
+2125 1197 1
+2953 1197 -1
+3213 1197 -1
+3401 1197 1
+4581 1197 -1
+4589 1197 1
+6188 1197 1
+6189 1197 -1
+8773 1197 38
+1102 1198 -1
+1461 1198 1
+2126 1198 1
+2954 1198 -1
+3214 1198 -1
+3402 1198 1
+4582 1198 -1
+4590 1198 1
+6189 1198 1
+6190 1198 -1
+8774 1198 38
+1103 1199 -1
+1462 1199 1
+2127 1199 1
+2955 1199 -1
+3215 1199 -1
+3403 1199 1
+4583 1199 -1
+4591 1199 1
+6190 1199 1
+6191 1199 -1
+8775 1199 38
+1104 1200 -1
+1463 1200 1
+2128 1200 1
+2956 1200 -1
+3216 1200 -1
+3404 1200 1
+4584 1200 -1
+4592 1200 1
+6191 1200 1
+6192 1200 -1
+8776 1200 38
+1105 1201 -1
+1472 1201 1
+2129 1201 1
+2965 1201 -1
+3217 1201 -1
+3413 1201 1
+4585 1201 -1
+4593 1201 1
+6193 1201 -1
+6200 1201 1
+8777 1201 38
+1106 1202 -1
+1465 1202 1
+2130 1202 1
+2966 1202 -1
+3218 1202 -1
+3414 1202 1
+4586 1202 -1
+4594 1202 1
+6193 1202 1
+6194 1202 -1
+8778 1202 38
+1107 1203 -1
+1466 1203 1
+2131 1203 1
+2967 1203 -1
+3219 1203 -1
+3415 1203 1
+4587 1203 -1
+4595 1203 1
+6194 1203 1
+6195 1203 -1
+8779 1203 38
+1108 1204 -1
+1467 1204 1
+2132 1204 1
+2968 1204 -1
+3220 1204 -1
+3416 1204 1
+4588 1204 -1
+4596 1204 1
+6195 1204 1
+6196 1204 -1
+8780 1204 38
+1109 1205 -1
+1468 1205 1
+2133 1205 1
+2961 1205 -1
+3221 1205 -1
+3409 1205 1
+4589 1205 -1
+4597 1205 1
+6196 1205 1
+6197 1205 -1
+8781 1205 38
+1110 1206 -1
+1469 1206 1
+2134 1206 1
+2962 1206 -1
+3222 1206 -1
+3410 1206 1
+4590 1206 -1
+4598 1206 1
+6197 1206 1
+6198 1206 -1
+8782 1206 38
+1111 1207 -1
+1470 1207 1
+2135 1207 1
+2963 1207 -1
+3223 1207 -1
+3411 1207 1
+4591 1207 -1
+4599 1207 1
+6198 1207 1
+6199 1207 -1
+8783 1207 38
+1112 1208 -1
+1471 1208 1
+2136 1208 1
+2964 1208 -1
+3224 1208 -1
+3412 1208 1
+4592 1208 -1
+4600 1208 1
+6199 1208 1
+6200 1208 -1
+8784 1208 38
+1113 1209 -1
+1480 1209 1
+2137 1209 1
+2973 1209 -1
+3225 1209 -1
+3421 1209 1
+4593 1209 -1
+4601 1209 1
+6201 1209 -1
+6208 1209 1
+8785 1209 38
+1114 1210 -1
+1473 1210 1
+2138 1210 1
+2974 1210 -1
+3226 1210 -1
+3422 1210 1
+4594 1210 -1
+4602 1210 1
+6201 1210 1
+6202 1210 -1
+8786 1210 38
+1115 1211 -1
+1474 1211 1
+2139 1211 1
+2975 1211 -1
+3227 1211 -1
+3423 1211 1
+4595 1211 -1
+4603 1211 1
+6202 1211 1
+6203 1211 -1
+8787 1211 38
+1116 1212 -1
+1475 1212 1
+2140 1212 1
+2976 1212 -1
+3228 1212 -1
+3424 1212 1
+4596 1212 -1
+4604 1212 1
+6203 1212 1
+6204 1212 -1
+8788 1212 38
+1117 1213 -1
+1476 1213 1
+2141 1213 1
+2969 1213 -1
+3229 1213 -1
+3417 1213 1
+4597 1213 -1
+4605 1213 1
+6204 1213 1
+6205 1213 -1
+8789 1213 38
+1118 1214 -1
+1477 1214 1
+2142 1214 1
+2970 1214 -1
+3230 1214 -1
+3418 1214 1
+4598 1214 -1
+4606 1214 1
+6205 1214 1
+6206 1214 -1
+8790 1214 38
+1119 1215 -1
+1478 1215 1
+2143 1215 1
+2971 1215 -1
+3231 1215 -1
+3419 1215 1
+4599 1215 -1
+4607 1215 1
+6206 1215 1
+6207 1215 -1
+8791 1215 38
+1120 1216 -1
+1479 1216 1
+2144 1216 1
+2972 1216 -1
+3232 1216 -1
+3420 1216 1
+4600 1216 -1
+4608 1216 1
+6207 1216 1
+6208 1216 -1
+8792 1216 38
+1121 1217 -1
+1488 1217 1
+2145 1217 1
+2849 1217 -1
+3233 1217 -1
+3297 1217 1
+4601 1217 -1
+4609 1217 1
+6209 1217 -1
+6216 1217 1
+8793 1217 38
+1122 1218 -1
+1481 1218 1
+2146 1218 1
+2850 1218 -1
+3234 1218 -1
+3298 1218 1
+4602 1218 -1
+4610 1218 1
+6209 1218 1
+6210 1218 -1
+8794 1218 38
+1123 1219 -1
+1482 1219 1
+2147 1219 1
+2851 1219 -1
+3235 1219 -1
+3299 1219 1
+4603 1219 -1
+4611 1219 1
+6210 1219 1
+6211 1219 -1
+8795 1219 38
+1124 1220 -1
+1483 1220 1
+2148 1220 1
+2852 1220 -1
+3236 1220 -1
+3300 1220 1
+4604 1220 -1
+4612 1220 1
+6211 1220 1
+6212 1220 -1
+8796 1220 38
+1125 1221 -1
+1484 1221 1
+2149 1221 1
+2853 1221 -1
+3237 1221 -1
+3301 1221 1
+4605 1221 -1
+4613 1221 1
+6212 1221 1
+6213 1221 -1
+8797 1221 38
+1126 1222 -1
+1485 1222 1
+2150 1222 1
+2854 1222 -1
+3238 1222 -1
+3302 1222 1
+4606 1222 -1
+4614 1222 1
+6213 1222 1
+6214 1222 -1
+8798 1222 38
+1127 1223 -1
+1486 1223 1
+2151 1223 1
+2855 1223 -1
+3239 1223 -1
+3303 1223 1
+4607 1223 -1
+4615 1223 1
+6214 1223 1
+6215 1223 -1
+8799 1223 38
+1128 1224 -1
+1487 1224 1
+2152 1224 1
+2856 1224 -1
+3240 1224 -1
+3304 1224 1
+4608 1224 -1
+4616 1224 1
+6215 1224 1
+6216 1224 -1
+8800 1224 38
+1129 1225 -1
+1496 1225 1
+2153 1225 1
+2857 1225 -1
+3241 1225 -1
+3305 1225 1
+4609 1225 -1
+4617 1225 1
+6217 1225 -1
+6224 1225 1
+8801 1225 38
+1130 1226 -1
+1489 1226 1
+2154 1226 1
+2858 1226 -1
+3242 1226 -1
+3306 1226 1
+4610 1226 -1
+4618 1226 1
+6217 1226 1
+6218 1226 -1
+8802 1226 38
+1131 1227 -1
+1490 1227 1
+2155 1227 1
+2859 1227 -1
+3243 1227 -1
+3307 1227 1
+4611 1227 -1
+4619 1227 1
+6218 1227 1
+6219 1227 -1
+8803 1227 38
+1132 1228 -1
+1491 1228 1
+2156 1228 1
+2860 1228 -1
+3244 1228 -1
+3308 1228 1
+4612 1228 -1
+4620 1228 1
+6219 1228 1
+6220 1228 -1
+8804 1228 38
+1133 1229 -1
+1492 1229 1
+2157 1229 1
+2861 1229 -1
+3245 1229 -1
+3309 1229 1
+4613 1229 -1
+4621 1229 1
+6220 1229 1
+6221 1229 -1
+8805 1229 38
+1134 1230 -1
+1493 1230 1
+2158 1230 1
+2862 1230 -1
+3246 1230 -1
+3310 1230 1
+4614 1230 -1
+4622 1230 1
+6221 1230 1
+6222 1230 -1
+8806 1230 38
+1135 1231 -1
+1494 1231 1
+2159 1231 1
+2863 1231 -1
+3247 1231 -1
+3311 1231 1
+4615 1231 -1
+4623 1231 1
+6222 1231 1
+6223 1231 -1
+8807 1231 38
+1136 1232 -1
+1495 1232 1
+2160 1232 1
+2864 1232 -1
+3248 1232 -1
+3312 1232 1
+4616 1232 -1
+4624 1232 1
+6223 1232 1
+6224 1232 -1
+8808 1232 38
+1137 1233 -1
+1504 1233 1
+2161 1233 1
+2865 1233 -1
+3249 1233 -1
+3313 1233 1
+4617 1233 -1
+4625 1233 1
+6225 1233 -1
+6232 1233 1
+8809 1233 38
+1138 1234 -1
+1497 1234 1
+2162 1234 1
+2866 1234 -1
+3250 1234 -1
+3314 1234 1
+4618 1234 -1
+4626 1234 1
+6225 1234 1
+6226 1234 -1
+8810 1234 38
+1139 1235 -1
+1498 1235 1
+2163 1235 1
+2867 1235 -1
+3251 1235 -1
+3315 1235 1
+4619 1235 -1
+4627 1235 1
+6226 1235 1
+6227 1235 -1
+8811 1235 38
+1140 1236 -1
+1499 1236 1
+2164 1236 1
+2868 1236 -1
+3252 1236 -1
+3316 1236 1
+4620 1236 -1
+4628 1236 1
+6227 1236 1
+6228 1236 -1
+8812 1236 38
+1141 1237 -1
+1500 1237 1
+2165 1237 1
+2869 1237 -1
+3253 1237 -1
+3317 1237 1
+4621 1237 -1
+4629 1237 1
+6228 1237 1
+6229 1237 -1
+8813 1237 38
+1142 1238 -1
+1501 1238 1
+2166 1238 1
+2870 1238 -1
+3254 1238 -1
+3318 1238 1
+4622 1238 -1
+4630 1238 1
+6229 1238 1
+6230 1238 -1
+8814 1238 38
+1143 1239 -1
+1502 1239 1
+2167 1239 1
+2871 1239 -1
+3255 1239 -1
+3319 1239 1
+4623 1239 -1
+4631 1239 1
+6230 1239 1
+6231 1239 -1
+8815 1239 38
+1144 1240 -1
+1503 1240 1
+2168 1240 1
+2872 1240 -1
+3256 1240 -1
+3320 1240 1
+4624 1240 -1
+4632 1240 1
+6231 1240 1
+6232 1240 -1
+8816 1240 38
+1145 1241 -1
+1512 1241 1
+2169 1241 1
+2873 1241 -1
+3257 1241 -1
+3321 1241 1
+4625 1241 -1
+4633 1241 1
+6233 1241 -1
+6240 1241 1
+8817 1241 38
+1146 1242 -1
+1505 1242 1
+2170 1242 1
+2874 1242 -1
+3258 1242 -1
+3322 1242 1
+4626 1242 -1
+4634 1242 1
+6233 1242 1
+6234 1242 -1
+8818 1242 38
+1147 1243 -1
+1506 1243 1
+2171 1243 1
+2875 1243 -1
+3259 1243 -1
+3323 1243 1
+4627 1243 -1
+4635 1243 1
+6234 1243 1
+6235 1243 -1
+8819 1243 38
+1148 1244 -1
+1507 1244 1
+2172 1244 1
+2876 1244 -1
+3260 1244 -1
+3324 1244 1
+4628 1244 -1
+4636 1244 1
+6235 1244 1
+6236 1244 -1
+8820 1244 38
+1149 1245 -1
+1508 1245 1
+2173 1245 1
+2877 1245 -1
+3261 1245 -1
+3325 1245 1
+4629 1245 -1
+4637 1245 1
+6236 1245 1
+6237 1245 -1
+8821 1245 38
+1150 1246 -1
+1509 1246 1
+2174 1246 1
+2878 1246 -1
+3262 1246 -1
+3326 1246 1
+4630 1246 -1
+4638 1246 1
+6237 1246 1
+6238 1246 -1
+8822 1246 38
+1151 1247 -1
+1510 1247 1
+2175 1247 1
+2879 1247 -1
+3263 1247 -1
+3327 1247 1
+4631 1247 -1
+4639 1247 1
+6238 1247 1
+6239 1247 -1
+8823 1247 38
+1152 1248 -1
+1511 1248 1
+2176 1248 1
+2880 1248 -1
+3264 1248 -1
+3328 1248 1
+4632 1248 -1
+4640 1248 1
+6239 1248 1
+6240 1248 -1
+8824 1248 38
+1153 1249 -1
+1520 1249 1
+2177 1249 1
+2881 1249 -1
+3265 1249 -1
+3329 1249 1
+4633 1249 -1
+4641 1249 1
+6241 1249 -1
+6248 1249 1
+8825 1249 38
+1154 1250 -1
+1513 1250 1
+2178 1250 1
+2882 1250 -1
+3266 1250 -1
+3330 1250 1
+4634 1250 -1
+4642 1250 1
+6241 1250 1
+6242 1250 -1
+8826 1250 38
+1155 1251 -1
+1514 1251 1
+2179 1251 1
+2883 1251 -1
+3267 1251 -1
+3331 1251 1
+4635 1251 -1
+4643 1251 1
+6242 1251 1
+6243 1251 -1
+8827 1251 38
+1156 1252 -1
+1515 1252 1
+2180 1252 1
+2884 1252 -1
+3268 1252 -1
+3332 1252 1
+4636 1252 -1
+4644 1252 1
+6243 1252 1
+6244 1252 -1
+8828 1252 38
+1157 1253 -1
+1516 1253 1
+2181 1253 1
+2885 1253 -1
+3269 1253 -1
+3333 1253 1
+4637 1253 -1
+4645 1253 1
+6244 1253 1
+6245 1253 -1
+8829 1253 38
+1158 1254 -1
+1517 1254 1
+2182 1254 1
+2886 1254 -1
+3270 1254 -1
+3334 1254 1
+4638 1254 -1
+4646 1254 1
+6245 1254 1
+6246 1254 -1
+8830 1254 38
+1159 1255 -1
+1518 1255 1
+2183 1255 1
+2887 1255 -1
+3271 1255 -1
+3335 1255 1
+4639 1255 -1
+4647 1255 1
+6246 1255 1
+6247 1255 -1
+8831 1255 38
+1160 1256 -1
+1519 1256 1
+2184 1256 1
+2888 1256 -1
+3272 1256 -1
+3336 1256 1
+4640 1256 -1
+4648 1256 1
+6247 1256 1
+6248 1256 -1
+8832 1256 38
+1161 1257 -1
+1528 1257 1
+2185 1257 1
+2889 1257 -1
+3273 1257 -1
+3337 1257 1
+4641 1257 -1
+4649 1257 1
+6249 1257 -1
+6256 1257 1
+8833 1257 38
+1162 1258 -1
+1521 1258 1
+2186 1258 1
+2890 1258 -1
+3274 1258 -1
+3338 1258 1
+4642 1258 -1
+4650 1258 1
+6249 1258 1
+6250 1258 -1
+8834 1258 38
+1163 1259 -1
+1522 1259 1
+2187 1259 1
+2891 1259 -1
+3275 1259 -1
+3339 1259 1
+4643 1259 -1
+4651 1259 1
+6250 1259 1
+6251 1259 -1
+8835 1259 38
+1164 1260 -1
+1523 1260 1
+2188 1260 1
+2892 1260 -1
+3276 1260 -1
+3340 1260 1
+4644 1260 -1
+4652 1260 1
+6251 1260 1
+6252 1260 -1
+8836 1260 38
+1165 1261 -1
+1524 1261 1
+2189 1261 1
+2893 1261 -1
+3277 1261 -1
+3341 1261 1
+4645 1261 -1
+4653 1261 1
+6252 1261 1
+6253 1261 -1
+8837 1261 38
+1166 1262 -1
+1525 1262 1
+2190 1262 1
+2894 1262 -1
+3278 1262 -1
+3342 1262 1
+4646 1262 -1
+4654 1262 1
+6253 1262 1
+6254 1262 -1
+8838 1262 38
+1167 1263 -1
+1526 1263 1
+2191 1263 1
+2895 1263 -1
+3279 1263 -1
+3343 1263 1
+4647 1263 -1
+4655 1263 1
+6254 1263 1
+6255 1263 -1
+8839 1263 38
+1168 1264 -1
+1527 1264 1
+2192 1264 1
+2896 1264 -1
+3280 1264 -1
+3344 1264 1
+4648 1264 -1
+4656 1264 1
+6255 1264 1
+6256 1264 -1
+8840 1264 38
+1169 1265 -1
+1536 1265 1
+2193 1265 1
+2897 1265 -1
+3281 1265 -1
+3345 1265 1
+4649 1265 -1
+4657 1265 1
+6257 1265 -1
+6264 1265 1
+8841 1265 38
+1170 1266 -1
+1529 1266 1
+2194 1266 1
+2898 1266 -1
+3282 1266 -1
+3346 1266 1
+4650 1266 -1
+4658 1266 1
+6257 1266 1
+6258 1266 -1
+8842 1266 38
+1171 1267 -1
+1530 1267 1
+2195 1267 1
+2899 1267 -1
+3283 1267 -1
+3347 1267 1
+4651 1267 -1
+4659 1267 1
+6258 1267 1
+6259 1267 -1
+8843 1267 38
+1172 1268 -1
+1531 1268 1
+2196 1268 1
+2900 1268 -1
+3284 1268 -1
+3348 1268 1
+4652 1268 -1
+4660 1268 1
+6259 1268 1
+6260 1268 -1
+8844 1268 38
+1173 1269 -1
+1532 1269 1
+2197 1269 1
+2901 1269 -1
+3285 1269 -1
+3349 1269 1
+4653 1269 -1
+4661 1269 1
+6260 1269 1
+6261 1269 -1
+8845 1269 38
+1174 1270 -1
+1533 1270 1
+2198 1270 1
+2902 1270 -1
+3286 1270 -1
+3350 1270 1
+4654 1270 -1
+4662 1270 1
+6261 1270 1
+6262 1270 -1
+8846 1270 38
+1175 1271 -1
+1534 1271 1
+2199 1271 1
+2903 1271 -1
+3287 1271 -1
+3351 1271 1
+4655 1271 -1
+4663 1271 1
+6262 1271 1
+6263 1271 -1
+8847 1271 38
+1176 1272 -1
+1535 1272 1
+2200 1272 1
+2904 1272 -1
+3288 1272 -1
+3352 1272 1
+4656 1272 -1
+4664 1272 1
+6263 1272 1
+6264 1272 -1
+8848 1272 38
+1177 1273 -1
+1544 1273 1
+2201 1273 1
+2905 1273 -1
+3289 1273 -1
+3353 1273 1
+4657 1273 -1
+4665 1273 1
+6265 1273 -1
+6272 1273 1
+8849 1273 38
+1178 1274 -1
+1537 1274 1
+2202 1274 1
+2906 1274 -1
+3290 1274 -1
+3354 1274 1
+4658 1274 -1
+4666 1274 1
+6265 1274 1
+6266 1274 -1
+8850 1274 38
+1179 1275 -1
+1538 1275 1
+2203 1275 1
+2907 1275 -1
+3291 1275 -1
+3355 1275 1
+4659 1275 -1
+4667 1275 1
+6266 1275 1
+6267 1275 -1
+8851 1275 38
+1180 1276 -1
+1539 1276 1
+2204 1276 1
+2908 1276 -1
+3292 1276 -1
+3356 1276 1
+4660 1276 -1
+4668 1276 1
+6267 1276 1
+6268 1276 -1
+8852 1276 38
+1181 1277 -1
+1540 1277 1
+2205 1277 1
+2909 1277 -1
+3293 1277 -1
+3357 1277 1
+4661 1277 -1
+4669 1277 1
+6268 1277 1
+6269 1277 -1
+8853 1277 38
+1182 1278 -1
+1541 1278 1
+2206 1278 1
+2910 1278 -1
+3294 1278 -1
+3358 1278 1
+4662 1278 -1
+4670 1278 1
+6269 1278 1
+6270 1278 -1
+8854 1278 38
+1183 1279 -1
+1542 1279 1
+2207 1279 1
+2911 1279 -1
+3295 1279 -1
+3359 1279 1
+4663 1279 -1
+4671 1279 1
+6270 1279 1
+6271 1279 -1
+8855 1279 38
+1184 1280 -1
+1543 1280 1
+2208 1280 1
+2912 1280 -1
+3296 1280 -1
+3360 1280 1
+4664 1280 -1
+4672 1280 1
+6271 1280 1
+6272 1280 -1
+8856 1280 38
+1185 1281 -1
+1360 1281 1
+2209 1281 1
+3045 1281 -1
+3169 1281 1
+3297 1281 -1
+4673 1281 1
+4797 1281 -1
+6273 1281 -1
+6280 1281 1
+8857 1281 38
+1186 1282 -1
+1353 1282 1
+2210 1282 1
+3046 1282 -1
+3170 1282 1
+3298 1282 -1
+4674 1282 1
+4798 1282 -1
+6273 1282 1
+6274 1282 -1
+8858 1282 38
+1187 1283 -1
+1354 1283 1
+2211 1283 1
+3047 1283 -1
+3171 1283 1
+3299 1283 -1
+4675 1283 1
+4799 1283 -1
+6274 1283 1
+6275 1283 -1
+8859 1283 38
+1188 1284 -1
+1355 1284 1
+2212 1284 1
+3048 1284 -1
+3172 1284 1
+3300 1284 -1
+4676 1284 1
+4800 1284 -1
+6275 1284 1
+6276 1284 -1
+8860 1284 38
+1189 1285 -1
+1356 1285 1
+2213 1285 1
+3041 1285 -1
+3173 1285 1
+3301 1285 -1
+4677 1285 1
+4793 1285 -1
+6276 1285 1
+6277 1285 -1
+8861 1285 38
+1190 1286 -1
+1357 1286 1
+2214 1286 1
+3042 1286 -1
+3174 1286 1
+3302 1286 -1
+4678 1286 1
+4794 1286 -1
+6277 1286 1
+6278 1286 -1
+8862 1286 38
+1191 1287 -1
+1358 1287 1
+2215 1287 1
+3043 1287 -1
+3175 1287 1
+3303 1287 -1
+4679 1287 1
+4795 1287 -1
+6278 1287 1
+6279 1287 -1
+8863 1287 38
+1192 1288 -1
+1359 1288 1
+2216 1288 1
+3044 1288 -1
+3176 1288 1
+3304 1288 -1
+4680 1288 1
+4796 1288 -1
+6279 1288 1
+6280 1288 -1
+8864 1288 38
+1193 1289 -1
+1368 1289 1
+2217 1289 1
+3053 1289 -1
+3177 1289 1
+3305 1289 -1
+4673 1289 -1
+4681 1289 1
+6281 1289 -1
+6288 1289 1
+8865 1289 38
+1194 1290 -1
+1361 1290 1
+2218 1290 1
+3054 1290 -1
+3178 1290 1
+3306 1290 -1
+4674 1290 -1
+4682 1290 1
+6281 1290 1
+6282 1290 -1
+8866 1290 38
+1195 1291 -1
+1362 1291 1
+2219 1291 1
+3055 1291 -1
+3179 1291 1
+3307 1291 -1
+4675 1291 -1
+4683 1291 1
+6282 1291 1
+6283 1291 -1
+8867 1291 38
+1196 1292 -1
+1363 1292 1
+2220 1292 1
+3056 1292 -1
+3180 1292 1
+3308 1292 -1
+4676 1292 -1
+4684 1292 1
+6283 1292 1
+6284 1292 -1
+8868 1292 38
+1197 1293 -1
+1364 1293 1
+2221 1293 1
+3049 1293 -1
+3181 1293 1
+3309 1293 -1
+4677 1293 -1
+4685 1293 1
+6284 1293 1
+6285 1293 -1
+8869 1293 38
+1198 1294 -1
+1365 1294 1
+2222 1294 1
+3050 1294 -1
+3182 1294 1
+3310 1294 -1
+4678 1294 -1
+4686 1294 1
+6285 1294 1
+6286 1294 -1
+8870 1294 38
+1199 1295 -1
+1366 1295 1
+2223 1295 1
+3051 1295 -1
+3183 1295 1
+3311 1295 -1
+4679 1295 -1
+4687 1295 1
+6286 1295 1
+6287 1295 -1
+8871 1295 38
+1200 1296 -1
+1367 1296 1
+2224 1296 1
+3052 1296 -1
+3184 1296 1
+3312 1296 -1
+4680 1296 -1
+4688 1296 1
+6287 1296 1
+6288 1296 -1
+8872 1296 38
+1201 1297 -1
+1376 1297 1
+2225 1297 1
+3061 1297 -1
+3185 1297 1
+3313 1297 -1
+4681 1297 -1
+4689 1297 1
+6289 1297 -1
+6296 1297 1
+8873 1297 38
+1202 1298 -1
+1369 1298 1
+2226 1298 1
+3062 1298 -1
+3186 1298 1
+3314 1298 -1
+4682 1298 -1
+4690 1298 1
+6289 1298 1
+6290 1298 -1
+8874 1298 38
+1203 1299 -1
+1370 1299 1
+2227 1299 1
+3063 1299 -1
+3187 1299 1
+3315 1299 -1
+4683 1299 -1
+4691 1299 1
+6290 1299 1
+6291 1299 -1
+8875 1299 38
+1204 1300 -1
+1371 1300 1
+2228 1300 1
+3064 1300 -1
+3188 1300 1
+3316 1300 -1
+4684 1300 -1
+4692 1300 1
+6291 1300 1
+6292 1300 -1
+8876 1300 38
+1205 1301 -1
+1372 1301 1
+2229 1301 1
+3057 1301 -1
+3189 1301 1
+3317 1301 -1
+4685 1301 -1
+4693 1301 1
+6292 1301 1
+6293 1301 -1
+8877 1301 38
+1206 1302 -1
+1373 1302 1
+2230 1302 1
+3058 1302 -1
+3190 1302 1
+3318 1302 -1
+4686 1302 -1
+4694 1302 1
+6293 1302 1
+6294 1302 -1
+8878 1302 38
+1207 1303 -1
+1374 1303 1
+2231 1303 1
+3059 1303 -1
+3191 1303 1
+3319 1303 -1
+4687 1303 -1
+4695 1303 1
+6294 1303 1
+6295 1303 -1
+8879 1303 38
+1208 1304 -1
+1375 1304 1
+2232 1304 1
+3060 1304 -1
+3192 1304 1
+3320 1304 -1
+4688 1304 -1
+4696 1304 1
+6295 1304 1
+6296 1304 -1
+8880 1304 38
+1209 1305 -1
+1384 1305 1
+2233 1305 1
+3069 1305 -1
+3193 1305 1
+3321 1305 -1
+4689 1305 -1
+4697 1305 1
+6297 1305 -1
+6304 1305 1
+8881 1305 38
+1210 1306 -1
+1377 1306 1
+2234 1306 1
+3070 1306 -1
+3194 1306 1
+3322 1306 -1
+4690 1306 -1
+4698 1306 1
+6297 1306 1
+6298 1306 -1
+8882 1306 38
+1211 1307 -1
+1378 1307 1
+2235 1307 1
+3071 1307 -1
+3195 1307 1
+3323 1307 -1
+4691 1307 -1
+4699 1307 1
+6298 1307 1
+6299 1307 -1
+8883 1307 38
+1212 1308 -1
+1379 1308 1
+2236 1308 1
+3072 1308 -1
+3196 1308 1
+3324 1308 -1
+4692 1308 -1
+4700 1308 1
+6299 1308 1
+6300 1308 -1
+8884 1308 38
+1213 1309 -1
+1380 1309 1
+2237 1309 1
+3065 1309 -1
+3197 1309 1
+3325 1309 -1
+4693 1309 -1
+4701 1309 1
+6300 1309 1
+6301 1309 -1
+8885 1309 38
+1214 1310 -1
+1381 1310 1
+2238 1310 1
+3066 1310 -1
+3198 1310 1
+3326 1310 -1
+4694 1310 -1
+4702 1310 1
+6301 1310 1
+6302 1310 -1
+8886 1310 38
+1215 1311 -1
+1382 1311 1
+2239 1311 1
+3067 1311 -1
+3199 1311 1
+3327 1311 -1
+4695 1311 -1
+4703 1311 1
+6302 1311 1
+6303 1311 -1
+8887 1311 38
+1216 1312 -1
+1383 1312 1
+2240 1312 1
+3068 1312 -1
+3200 1312 1
+3328 1312 -1
+4696 1312 -1
+4704 1312 1
+6303 1312 1
+6304 1312 -1
+8888 1312 38
+1217 1313 -1
+1392 1313 1
+2241 1313 1
+3077 1313 -1
+3201 1313 1
+3329 1313 -1
+4697 1313 -1
+4705 1313 1
+6305 1313 -1
+6312 1313 1
+8889 1313 38
+1218 1314 -1
+1385 1314 1
+2242 1314 1
+3078 1314 -1
+3202 1314 1
+3330 1314 -1
+4698 1314 -1
+4706 1314 1
+6305 1314 1
+6306 1314 -1
+8890 1314 38
+1219 1315 -1
+1386 1315 1
+2243 1315 1
+3079 1315 -1
+3203 1315 1
+3331 1315 -1
+4699 1315 -1
+4707 1315 1
+6306 1315 1
+6307 1315 -1
+8891 1315 38
+1220 1316 -1
+1387 1316 1
+2244 1316 1
+3080 1316 -1
+3204 1316 1
+3332 1316 -1
+4700 1316 -1
+4708 1316 1
+6307 1316 1
+6308 1316 -1
+8892 1316 38
+1221 1317 -1
+1388 1317 1
+2245 1317 1
+3073 1317 -1
+3205 1317 1
+3333 1317 -1
+4701 1317 -1
+4709 1317 1
+6308 1317 1
+6309 1317 -1
+8893 1317 38
+1222 1318 -1
+1389 1318 1
+2246 1318 1
+3074 1318 -1
+3206 1318 1
+3334 1318 -1
+4702 1318 -1
+4710 1318 1
+6309 1318 1
+6310 1318 -1
+8894 1318 38
+1223 1319 -1
+1390 1319 1
+2247 1319 1
+3075 1319 -1
+3207 1319 1
+3335 1319 -1
+4703 1319 -1
+4711 1319 1
+6310 1319 1
+6311 1319 -1
+8895 1319 38
+1224 1320 -1
+1391 1320 1
+2248 1320 1
+3076 1320 -1
+3208 1320 1
+3336 1320 -1
+4704 1320 -1
+4712 1320 1
+6311 1320 1
+6312 1320 -1
+8896 1320 38
+1225 1321 -1
+1400 1321 1
+2249 1321 1
+3085 1321 -1
+3209 1321 1
+3337 1321 -1
+4705 1321 -1
+4713 1321 1
+6313 1321 -1
+6320 1321 1
+8897 1321 38
+1226 1322 -1
+1393 1322 1
+2250 1322 1
+3086 1322 -1
+3210 1322 1
+3338 1322 -1
+4706 1322 -1
+4714 1322 1
+6313 1322 1
+6314 1322 -1
+8898 1322 38
+1227 1323 -1
+1394 1323 1
+2251 1323 1
+3087 1323 -1
+3211 1323 1
+3339 1323 -1
+4707 1323 -1
+4715 1323 1
+6314 1323 1
+6315 1323 -1
+8899 1323 38
+1228 1324 -1
+1395 1324 1
+2252 1324 1
+3088 1324 -1
+3212 1324 1
+3340 1324 -1
+4708 1324 -1
+4716 1324 1
+6315 1324 1
+6316 1324 -1
+8900 1324 38
+1229 1325 -1
+1396 1325 1
+2253 1325 1
+3081 1325 -1
+3213 1325 1
+3341 1325 -1
+4709 1325 -1
+4717 1325 1
+6316 1325 1
+6317 1325 -1
+8901 1325 38
+1230 1326 -1
+1397 1326 1
+2254 1326 1
+3082 1326 -1
+3214 1326 1
+3342 1326 -1
+4710 1326 -1
+4718 1326 1
+6317 1326 1
+6318 1326 -1
+8902 1326 38
+1231 1327 -1
+1398 1327 1
+2255 1327 1
+3083 1327 -1
+3215 1327 1
+3343 1327 -1
+4711 1327 -1
+4719 1327 1
+6318 1327 1
+6319 1327 -1
+8903 1327 38
+1232 1328 -1
+1399 1328 1
+2256 1328 1
+3084 1328 -1
+3216 1328 1
+3344 1328 -1
+4712 1328 -1
+4720 1328 1
+6319 1328 1
+6320 1328 -1
+8904 1328 38
+1233 1329 -1
+1408 1329 1
+2257 1329 1
+3093 1329 -1
+3217 1329 1
+3345 1329 -1
+4713 1329 -1
+4721 1329 1
+6321 1329 -1
+6328 1329 1
+8905 1329 38
+1234 1330 -1
+1401 1330 1
+2258 1330 1
+3094 1330 -1
+3218 1330 1
+3346 1330 -1
+4714 1330 -1
+4722 1330 1
+6321 1330 1
+6322 1330 -1
+8906 1330 38
+1235 1331 -1
+1402 1331 1
+2259 1331 1
+3095 1331 -1
+3219 1331 1
+3347 1331 -1
+4715 1331 -1
+4723 1331 1
+6322 1331 1
+6323 1331 -1
+8907 1331 38
+1236 1332 -1
+1403 1332 1
+2260 1332 1
+3096 1332 -1
+3220 1332 1
+3348 1332 -1
+4716 1332 -1
+4724 1332 1
+6323 1332 1
+6324 1332 -1
+8908 1332 38
+1237 1333 -1
+1404 1333 1
+2261 1333 1
+3089 1333 -1
+3221 1333 1
+3349 1333 -1
+4717 1333 -1
+4725 1333 1
+6324 1333 1
+6325 1333 -1
+8909 1333 38
+1238 1334 -1
+1405 1334 1
+2262 1334 1
+3090 1334 -1
+3222 1334 1
+3350 1334 -1
+4718 1334 -1
+4726 1334 1
+6325 1334 1
+6326 1334 -1
+8910 1334 38
+1239 1335 -1
+1406 1335 1
+2263 1335 1
+3091 1335 -1
+3223 1335 1
+3351 1335 -1
+4719 1335 -1
+4727 1335 1
+6326 1335 1
+6327 1335 -1
+8911 1335 38
+1240 1336 -1
+1407 1336 1
+2264 1336 1
+3092 1336 -1
+3224 1336 1
+3352 1336 -1
+4720 1336 -1
+4728 1336 1
+6327 1336 1
+6328 1336 -1
+8912 1336 38
+1241 1337 -1
+1416 1337 1
+2265 1337 1
+3101 1337 -1
+3225 1337 1
+3353 1337 -1
+4721 1337 -1
+4729 1337 1
+6329 1337 -1
+6336 1337 1
+8913 1337 38
+1242 1338 -1
+1409 1338 1
+2266 1338 1
+3102 1338 -1
+3226 1338 1
+3354 1338 -1
+4722 1338 -1
+4730 1338 1
+6329 1338 1
+6330 1338 -1
+8914 1338 38
+1243 1339 -1
+1410 1339 1
+2267 1339 1
+3103 1339 -1
+3227 1339 1
+3355 1339 -1
+4723 1339 -1
+4731 1339 1
+6330 1339 1
+6331 1339 -1
+8915 1339 38
+1244 1340 -1
+1411 1340 1
+2268 1340 1
+3104 1340 -1
+3228 1340 1
+3356 1340 -1
+4724 1340 -1
+4732 1340 1
+6331 1340 1
+6332 1340 -1
+8916 1340 38
+1245 1341 -1
+1412 1341 1
+2269 1341 1
+3097 1341 -1
+3229 1341 1
+3357 1341 -1
+4725 1341 -1
+4733 1341 1
+6332 1341 1
+6333 1341 -1
+8917 1341 38
+1246 1342 -1
+1413 1342 1
+2270 1342 1
+3098 1342 -1
+3230 1342 1
+3358 1342 -1
+4726 1342 -1
+4734 1342 1
+6333 1342 1
+6334 1342 -1
+8918 1342 38
+1247 1343 -1
+1414 1343 1
+2271 1343 1
+3099 1343 -1
+3231 1343 1
+3359 1343 -1
+4727 1343 -1
+4735 1343 1
+6334 1343 1
+6335 1343 -1
+8919 1343 38
+1248 1344 -1
+1415 1344 1
+2272 1344 1
+3100 1344 -1
+3232 1344 1
+3360 1344 -1
+4728 1344 -1
+4736 1344 1
+6335 1344 1
+6336 1344 -1
+8920 1344 38
+1249 1345 -1
+1424 1345 1
+2273 1345 1
+2977 1345 -1
+3233 1345 1
+3361 1345 -1
+4729 1345 -1
+4737 1345 1
+6337 1345 -1
+6344 1345 1
+8921 1345 38
+1250 1346 -1
+1417 1346 1
+2274 1346 1
+2978 1346 -1
+3234 1346 1
+3362 1346 -1
+4730 1346 -1
+4738 1346 1
+6337 1346 1
+6338 1346 -1
+8922 1346 38
+1251 1347 -1
+1418 1347 1
+2275 1347 1
+2979 1347 -1
+3235 1347 1
+3363 1347 -1
+4731 1347 -1
+4739 1347 1
+6338 1347 1
+6339 1347 -1
+8923 1347 38
+1252 1348 -1
+1419 1348 1
+2276 1348 1
+2980 1348 -1
+3236 1348 1
+3364 1348 -1
+4732 1348 -1
+4740 1348 1
+6339 1348 1
+6340 1348 -1
+8924 1348 38
+1253 1349 -1
+1420 1349 1
+2277 1349 1
+2981 1349 -1
+3237 1349 1
+3365 1349 -1
+4733 1349 -1
+4741 1349 1
+6340 1349 1
+6341 1349 -1
+8925 1349 38
+1254 1350 -1
+1421 1350 1
+2278 1350 1
+2982 1350 -1
+3238 1350 1
+3366 1350 -1
+4734 1350 -1
+4742 1350 1
+6341 1350 1
+6342 1350 -1
+8926 1350 38
+1255 1351 -1
+1422 1351 1
+2279 1351 1
+2983 1351 -1
+3239 1351 1
+3367 1351 -1
+4735 1351 -1
+4743 1351 1
+6342 1351 1
+6343 1351 -1
+8927 1351 38
+1256 1352 -1
+1423 1352 1
+2280 1352 1
+2984 1352 -1
+3240 1352 1
+3368 1352 -1
+4736 1352 -1
+4744 1352 1
+6343 1352 1
+6344 1352 -1
+8928 1352 38
+1257 1353 -1
+1432 1353 1
+2281 1353 1
+2985 1353 -1
+3241 1353 1
+3369 1353 -1
+4737 1353 -1
+4745 1353 1
+6345 1353 -1
+6352 1353 1
+8929 1353 38
+1258 1354 -1
+1425 1354 1
+2282 1354 1
+2986 1354 -1
+3242 1354 1
+3370 1354 -1
+4738 1354 -1
+4746 1354 1
+6345 1354 1
+6346 1354 -1
+8930 1354 38
+1259 1355 -1
+1426 1355 1
+2283 1355 1
+2987 1355 -1
+3243 1355 1
+3371 1355 -1
+4739 1355 -1
+4747 1355 1
+6346 1355 1
+6347 1355 -1
+8931 1355 38
+1260 1356 -1
+1427 1356 1
+2284 1356 1
+2988 1356 -1
+3244 1356 1
+3372 1356 -1
+4740 1356 -1
+4748 1356 1
+6347 1356 1
+6348 1356 -1
+8932 1356 38
+1261 1357 -1
+1428 1357 1
+2285 1357 1
+2989 1357 -1
+3245 1357 1
+3373 1357 -1
+4741 1357 -1
+4749 1357 1
+6348 1357 1
+6349 1357 -1
+8933 1357 38
+1262 1358 -1
+1429 1358 1
+2286 1358 1
+2990 1358 -1
+3246 1358 1
+3374 1358 -1
+4742 1358 -1
+4750 1358 1
+6349 1358 1
+6350 1358 -1
+8934 1358 38
+1263 1359 -1
+1430 1359 1
+2287 1359 1
+2991 1359 -1
+3247 1359 1
+3375 1359 -1
+4743 1359 -1
+4751 1359 1
+6350 1359 1
+6351 1359 -1
+8935 1359 38
+1264 1360 -1
+1431 1360 1
+2288 1360 1
+2992 1360 -1
+3248 1360 1
+3376 1360 -1
+4744 1360 -1
+4752 1360 1
+6351 1360 1
+6352 1360 -1
+8936 1360 38
+1265 1361 -1
+1440 1361 1
+2289 1361 1
+2993 1361 -1
+3249 1361 1
+3377 1361 -1
+4745 1361 -1
+4753 1361 1
+6353 1361 -1
+6360 1361 1
+8937 1361 38
+1266 1362 -1
+1433 1362 1
+2290 1362 1
+2994 1362 -1
+3250 1362 1
+3378 1362 -1
+4746 1362 -1
+4754 1362 1
+6353 1362 1
+6354 1362 -1
+8938 1362 38
+1267 1363 -1
+1434 1363 1
+2291 1363 1
+2995 1363 -1
+3251 1363 1
+3379 1363 -1
+4747 1363 -1
+4755 1363 1
+6354 1363 1
+6355 1363 -1
+8939 1363 38
+1268 1364 -1
+1435 1364 1
+2292 1364 1
+2996 1364 -1
+3252 1364 1
+3380 1364 -1
+4748 1364 -1
+4756 1364 1
+6355 1364 1
+6356 1364 -1
+8940 1364 38
+1269 1365 -1
+1436 1365 1
+2293 1365 1
+2997 1365 -1
+3253 1365 1
+3381 1365 -1
+4749 1365 -1
+4757 1365 1
+6356 1365 1
+6357 1365 -1
+8941 1365 38
+1270 1366 -1
+1437 1366 1
+2294 1366 1
+2998 1366 -1
+3254 1366 1
+3382 1366 -1
+4750 1366 -1
+4758 1366 1
+6357 1366 1
+6358 1366 -1
+8942 1366 38
+1271 1367 -1
+1438 1367 1
+2295 1367 1
+2999 1367 -1
+3255 1367 1
+3383 1367 -1
+4751 1367 -1
+4759 1367 1
+6358 1367 1
+6359 1367 -1
+8943 1367 38
+1272 1368 -1
+1439 1368 1
+2296 1368 1
+3000 1368 -1
+3256 1368 1
+3384 1368 -1
+4752 1368 -1
+4760 1368 1
+6359 1368 1
+6360 1368 -1
+8944 1368 38
+1273 1369 -1
+1316 1369 1
+2297 1369 1
+3001 1369 -1
+3257 1369 1
+3385 1369 -1
+4753 1369 -1
+4761 1369 1
+6361 1369 -1
+6368 1369 1
+8945 1369 38
+1274 1370 -1
+1317 1370 1
+2298 1370 1
+3002 1370 -1
+3258 1370 1
+3386 1370 -1
+4754 1370 -1
+4762 1370 1
+6361 1370 1
+6362 1370 -1
+8946 1370 38
+1275 1371 -1
+1318 1371 1
+2299 1371 1
+3003 1371 -1
+3259 1371 1
+3387 1371 -1
+4755 1371 -1
+4763 1371 1
+6362 1371 1
+6363 1371 -1
+8947 1371 38
+1276 1372 -1
+1319 1372 1
+2300 1372 1
+3004 1372 -1
+3260 1372 1
+3388 1372 -1
+4756 1372 -1
+4764 1372 1
+6363 1372 1
+6364 1372 -1
+8948 1372 38
+1277 1373 -1
+1320 1373 1
+2301 1373 1
+3005 1373 -1
+3261 1373 1
+3389 1373 -1
+4757 1373 -1
+4765 1373 1
+6364 1373 1
+6365 1373 -1
+8949 1373 38
+1278 1374 -1
+1313 1374 1
+2302 1374 1
+3006 1374 -1
+3262 1374 1
+3390 1374 -1
+4758 1374 -1
+4766 1374 1
+6365 1374 1
+6366 1374 -1
+8950 1374 38
+1279 1375 -1
+1314 1375 1
+2303 1375 1
+3007 1375 -1
+3263 1375 1
+3391 1375 -1
+4759 1375 -1
+4767 1375 1
+6366 1375 1
+6367 1375 -1
+8951 1375 38
+1280 1376 -1
+1315 1376 1
+2304 1376 1
+3008 1376 -1
+3264 1376 1
+3392 1376 -1
+4760 1376 -1
+4768 1376 1
+6367 1376 1
+6368 1376 -1
+8952 1376 38
+1281 1377 -1
+1324 1377 1
+2305 1377 1
+3009 1377 -1
+3265 1377 1
+3393 1377 -1
+4761 1377 -1
+4769 1377 1
+6369 1377 -1
+6376 1377 1
+8953 1377 38
+1282 1378 -1
+1325 1378 1
+2306 1378 1
+3010 1378 -1
+3266 1378 1
+3394 1378 -1
+4762 1378 -1
+4770 1378 1
+6369 1378 1
+6370 1378 -1
+8954 1378 38
+1283 1379 -1
+1326 1379 1
+2307 1379 1
+3011 1379 -1
+3267 1379 1
+3395 1379 -1
+4763 1379 -1
+4771 1379 1
+6370 1379 1
+6371 1379 -1
+8955 1379 38
+1284 1380 -1
+1327 1380 1
+2308 1380 1
+3012 1380 -1
+3268 1380 1
+3396 1380 -1
+4764 1380 -1
+4772 1380 1
+6371 1380 1
+6372 1380 -1
+8956 1380 38
+1285 1381 -1
+1328 1381 1
+2309 1381 1
+3013 1381 -1
+3269 1381 1
+3397 1381 -1
+4765 1381 -1
+4773 1381 1
+6372 1381 1
+6373 1381 -1
+8957 1381 38
+1286 1382 -1
+1321 1382 1
+2310 1382 1
+3014 1382 -1
+3270 1382 1
+3398 1382 -1
+4766 1382 -1
+4774 1382 1
+6373 1382 1
+6374 1382 -1
+8958 1382 38
+1287 1383 -1
+1322 1383 1
+2311 1383 1
+3015 1383 -1
+3271 1383 1
+3399 1383 -1
+4767 1383 -1
+4775 1383 1
+6374 1383 1
+6375 1383 -1
+8959 1383 38
+1288 1384 -1
+1323 1384 1
+2312 1384 1
+3016 1384 -1
+3272 1384 1
+3400 1384 -1
+4768 1384 -1
+4776 1384 1
+6375 1384 1
+6376 1384 -1
+8960 1384 38
+1289 1385 -1
+1332 1385 1
+2313 1385 1
+3017 1385 -1
+3273 1385 1
+3401 1385 -1
+4769 1385 -1
+4777 1385 1
+6377 1385 -1
+6384 1385 1
+8961 1385 38
+1290 1386 -1
+1333 1386 1
+2314 1386 1
+3018 1386 -1
+3274 1386 1
+3402 1386 -1
+4770 1386 -1
+4778 1386 1
+6377 1386 1
+6378 1386 -1
+8962 1386 38
+1291 1387 -1
+1334 1387 1
+2315 1387 1
+3019 1387 -1
+3275 1387 1
+3403 1387 -1
+4771 1387 -1
+4779 1387 1
+6378 1387 1
+6379 1387 -1
+8963 1387 38
+1292 1388 -1
+1335 1388 1
+2316 1388 1
+3020 1388 -1
+3276 1388 1
+3404 1388 -1
+4772 1388 -1
+4780 1388 1
+6379 1388 1
+6380 1388 -1
+8964 1388 38
+1293 1389 -1
+1336 1389 1
+2317 1389 1
+3021 1389 -1
+3277 1389 1
+3405 1389 -1
+4773 1389 -1
+4781 1389 1
+6380 1389 1
+6381 1389 -1
+8965 1389 38
+1294 1390 -1
+1329 1390 1
+2318 1390 1
+3022 1390 -1
+3278 1390 1
+3406 1390 -1
+4774 1390 -1
+4782 1390 1
+6381 1390 1
+6382 1390 -1
+8966 1390 38
+1295 1391 -1
+1330 1391 1
+2319 1391 1
+3023 1391 -1
+3279 1391 1
+3407 1391 -1
+4775 1391 -1
+4783 1391 1
+6382 1391 1
+6383 1391 -1
+8967 1391 38
+1296 1392 -1
+1331 1392 1
+2320 1392 1
+3024 1392 -1
+3280 1392 1
+3408 1392 -1
+4776 1392 -1
+4784 1392 1
+6383 1392 1
+6384 1392 -1
+8968 1392 38
+1297 1393 -1
+1340 1393 1
+2321 1393 1
+3025 1393 -1
+3281 1393 1
+3409 1393 -1
+4777 1393 -1
+4785 1393 1
+6385 1393 -1
+6392 1393 1
+8969 1393 38
+1298 1394 -1
+1341 1394 1
+2322 1394 1
+3026 1394 -1
+3282 1394 1
+3410 1394 -1
+4778 1394 -1
+4786 1394 1
+6385 1394 1
+6386 1394 -1
+8970 1394 38
+1299 1395 -1
+1342 1395 1
+2323 1395 1
+3027 1395 -1
+3283 1395 1
+3411 1395 -1
+4779 1395 -1
+4787 1395 1
+6386 1395 1
+6387 1395 -1
+8971 1395 38
+1300 1396 -1
+1343 1396 1
+2324 1396 1
+3028 1396 -1
+3284 1396 1
+3412 1396 -1
+4780 1396 -1
+4788 1396 1
+6387 1396 1
+6388 1396 -1
+8972 1396 38
+1301 1397 -1
+1344 1397 1
+2325 1397 1
+3029 1397 -1
+3285 1397 1
+3413 1397 -1
+4781 1397 -1
+4789 1397 1
+6388 1397 1
+6389 1397 -1
+8973 1397 38
+1302 1398 -1
+1337 1398 1
+2326 1398 1
+3030 1398 -1
+3286 1398 1
+3414 1398 -1
+4782 1398 -1
+4790 1398 1
+6389 1398 1
+6390 1398 -1
+8974 1398 38
+1303 1399 -1
+1338 1399 1
+2327 1399 1
+3031 1399 -1
+3287 1399 1
+3415 1399 -1
+4783 1399 -1
+4791 1399 1
+6390 1399 1
+6391 1399 -1
+8975 1399 38
+1304 1400 -1
+1339 1400 1
+2328 1400 1
+3032 1400 -1
+3288 1400 1
+3416 1400 -1
+4784 1400 -1
+4792 1400 1
+6391 1400 1
+6392 1400 -1
+8976 1400 38
+1305 1401 -1
+1348 1401 1
+2329 1401 1
+3033 1401 -1
+3289 1401 1
+3417 1401 -1
+4785 1401 -1
+4793 1401 1
+6393 1401 -1
+6400 1401 1
+8977 1401 38
+1306 1402 -1
+1349 1402 1
+2330 1402 1
+3034 1402 -1
+3290 1402 1
+3418 1402 -1
+4786 1402 -1
+4794 1402 1
+6393 1402 1
+6394 1402 -1
+8978 1402 38
+1307 1403 -1
+1350 1403 1
+2331 1403 1
+3035 1403 -1
+3291 1403 1
+3419 1403 -1
+4787 1403 -1
+4795 1403 1
+6394 1403 1
+6395 1403 -1
+8979 1403 38
+1308 1404 -1
+1351 1404 1
+2332 1404 1
+3036 1404 -1
+3292 1404 1
+3420 1404 -1
+4788 1404 -1
+4796 1404 1
+6395 1404 1
+6396 1404 -1
+8980 1404 38
+1309 1405 -1
+1352 1405 1
+2333 1405 1
+3037 1405 -1
+3293 1405 1
+3421 1405 -1
+4789 1405 -1
+4797 1405 1
+6396 1405 1
+6397 1405 -1
+8981 1405 38
+1310 1406 -1
+1345 1406 1
+2334 1406 1
+3038 1406 -1
+3294 1406 1
+3422 1406 -1
+4790 1406 -1
+4798 1406 1
+6397 1406 1
+6398 1406 -1
+8982 1406 38
+1311 1407 -1
+1346 1407 1
+2335 1407 1
+3039 1407 -1
+3295 1407 1
+3423 1407 -1
+4791 1407 -1
+4799 1407 1
+6398 1407 1
+6399 1407 -1
+8983 1407 38
+1312 1408 -1
+1347 1408 1
+2336 1408 1
+3040 1408 -1
+3296 1408 1
+3424 1408 -1
+4792 1408 -1
+4800 1408 1
+6399 1408 1
+6400 1408 -1
+8984 1408 38
+1313 1409 -1
+1804 1409 1
+2081 1409 -1
+2337 1409 1
+3425 1409 -1
+3621 1409 1
+4801 1409 1
+4925 1409 -1
+6401 1409 -1
+6408 1409 1
+8985 1409 38
+1314 1410 -1
+1805 1410 1
+2082 1410 -1
+2338 1410 1
+3426 1410 -1
+3622 1410 1
+4802 1410 1
+4926 1410 -1
+6401 1410 1
+6402 1410 -1
+8986 1410 38
+1315 1411 -1
+1806 1411 1
+2083 1411 -1
+2339 1411 1
+3427 1411 -1
+3623 1411 1
+4803 1411 1
+4927 1411 -1
+6402 1411 1
+6403 1411 -1
+8987 1411 38
+1316 1412 -1
+1807 1412 1
+2084 1412 -1
+2340 1412 1
+3428 1412 -1
+3624 1412 1
+4804 1412 1
+4928 1412 -1
+6403 1412 1
+6404 1412 -1
+8988 1412 38
+1317 1413 -1
+1808 1413 1
+2085 1413 -1
+2341 1413 1
+3429 1413 -1
+3617 1413 1
+4805 1413 1
+4921 1413 -1
+6404 1413 1
+6405 1413 -1
+8989 1413 38
+1318 1414 -1
+1801 1414 1
+2086 1414 -1
+2342 1414 1
+3430 1414 -1
+3618 1414 1
+4806 1414 1
+4922 1414 -1
+6405 1414 1
+6406 1414 -1
+8990 1414 38
+1319 1415 -1
+1802 1415 1
+2087 1415 -1
+2343 1415 1
+3431 1415 -1
+3619 1415 1
+4807 1415 1
+4923 1415 -1
+6406 1415 1
+6407 1415 -1
+8991 1415 38
+1320 1416 -1
+1803 1416 1
+2088 1416 -1
+2344 1416 1
+3432 1416 -1
+3620 1416 1
+4808 1416 1
+4924 1416 -1
+6407 1416 1
+6408 1416 -1
+8992 1416 38
+1321 1417 -1
+1812 1417 1
+2089 1417 -1
+2345 1417 1
+3433 1417 -1
+3629 1417 1
+4801 1417 -1
+4809 1417 1
+6409 1417 -1
+6416 1417 1
+8993 1417 38
+1322 1418 -1
+1813 1418 1
+2090 1418 -1
+2346 1418 1
+3434 1418 -1
+3630 1418 1
+4802 1418 -1
+4810 1418 1
+6409 1418 1
+6410 1418 -1
+8994 1418 38
+1323 1419 -1
+1814 1419 1
+2091 1419 -1
+2347 1419 1
+3435 1419 -1
+3631 1419 1
+4803 1419 -1
+4811 1419 1
+6410 1419 1
+6411 1419 -1
+8995 1419 38
+1324 1420 -1
+1815 1420 1
+2092 1420 -1
+2348 1420 1
+3436 1420 -1
+3632 1420 1
+4804 1420 -1
+4812 1420 1
+6411 1420 1
+6412 1420 -1
+8996 1420 38
+1325 1421 -1
+1816 1421 1
+2093 1421 -1
+2349 1421 1
+3437 1421 -1
+3625 1421 1
+4805 1421 -1
+4813 1421 1
+6412 1421 1
+6413 1421 -1
+8997 1421 38
+1326 1422 -1
+1809 1422 1
+2094 1422 -1
+2350 1422 1
+3438 1422 -1
+3626 1422 1
+4806 1422 -1
+4814 1422 1
+6413 1422 1
+6414 1422 -1
+8998 1422 38
+1327 1423 -1
+1810 1423 1
+2095 1423 -1
+2351 1423 1
+3439 1423 -1
+3627 1423 1
+4807 1423 -1
+4815 1423 1
+6414 1423 1
+6415 1423 -1
+8999 1423 38
+1328 1424 -1
+1811 1424 1
+2096 1424 -1
+2352 1424 1
+3440 1424 -1
+3628 1424 1
+4808 1424 -1
+4816 1424 1
+6415 1424 1
+6416 1424 -1
+9000 1424 38
+1329 1425 -1
+1820 1425 1
+2097 1425 -1
+2353 1425 1
+3441 1425 -1
+3637 1425 1
+4809 1425 -1
+4817 1425 1
+6417 1425 -1
+6424 1425 1
+9001 1425 38
+1330 1426 -1
+1821 1426 1
+2098 1426 -1
+2354 1426 1
+3442 1426 -1
+3638 1426 1
+4810 1426 -1
+4818 1426 1
+6417 1426 1
+6418 1426 -1
+9002 1426 38
+1331 1427 -1
+1822 1427 1
+2099 1427 -1
+2355 1427 1
+3443 1427 -1
+3639 1427 1
+4811 1427 -1
+4819 1427 1
+6418 1427 1
+6419 1427 -1
+9003 1427 38
+1332 1428 -1
+1823 1428 1
+2100 1428 -1
+2356 1428 1
+3444 1428 -1
+3640 1428 1
+4812 1428 -1
+4820 1428 1
+6419 1428 1
+6420 1428 -1
+9004 1428 38
+1333 1429 -1
+1824 1429 1
+2101 1429 -1
+2357 1429 1
+3445 1429 -1
+3633 1429 1
+4813 1429 -1
+4821 1429 1
+6420 1429 1
+6421 1429 -1
+9005 1429 38
+1334 1430 -1
+1817 1430 1
+2102 1430 -1
+2358 1430 1
+3446 1430 -1
+3634 1430 1
+4814 1430 -1
+4822 1430 1
+6421 1430 1
+6422 1430 -1
+9006 1430 38
+1335 1431 -1
+1818 1431 1
+2103 1431 -1
+2359 1431 1
+3447 1431 -1
+3635 1431 1
+4815 1431 -1
+4823 1431 1
+6422 1431 1
+6423 1431 -1
+9007 1431 38
+1336 1432 -1
+1819 1432 1
+2104 1432 -1
+2360 1432 1
+3448 1432 -1
+3636 1432 1
+4816 1432 -1
+4824 1432 1
+6423 1432 1
+6424 1432 -1
+9008 1432 38
+1337 1433 -1
+1704 1433 1
+2105 1433 -1
+2361 1433 1
+3449 1433 -1
+3645 1433 1
+4817 1433 -1
+4825 1433 1
+6425 1433 -1
+6432 1433 1
+9009 1433 38
+1338 1434 -1
+1697 1434 1
+2106 1434 -1
+2362 1434 1
+3450 1434 -1
+3646 1434 1
+4818 1434 -1
+4826 1434 1
+6425 1434 1
+6426 1434 -1
+9010 1434 38
+1339 1435 -1
+1698 1435 1
+2107 1435 -1
+2363 1435 1
+3451 1435 -1
+3647 1435 1
+4819 1435 -1
+4827 1435 1
+6426 1435 1
+6427 1435 -1
+9011 1435 38
+1340 1436 -1
+1699 1436 1
+2108 1436 -1
+2364 1436 1
+3452 1436 -1
+3648 1436 1
+4820 1436 -1
+4828 1436 1
+6427 1436 1
+6428 1436 -1
+9012 1436 38
+1341 1437 -1
+1700 1437 1
+2109 1437 -1
+2365 1437 1
+3453 1437 -1
+3641 1437 1
+4821 1437 -1
+4829 1437 1
+6428 1437 1
+6429 1437 -1
+9013 1437 38
+1342 1438 -1
+1701 1438 1
+2110 1438 -1
+2366 1438 1
+3454 1438 -1
+3642 1438 1
+4822 1438 -1
+4830 1438 1
+6429 1438 1
+6430 1438 -1
+9014 1438 38
+1343 1439 -1
+1702 1439 1
+2111 1439 -1
+2367 1439 1
+3455 1439 -1
+3643 1439 1
+4823 1439 -1
+4831 1439 1
+6430 1439 1
+6431 1439 -1
+9015 1439 38
+1344 1440 -1
+1703 1440 1
+2112 1440 -1
+2368 1440 1
+3456 1440 -1
+3644 1440 1
+4824 1440 -1
+4832 1440 1
+6431 1440 1
+6432 1440 -1
+9016 1440 38
+1345 1441 -1
+1712 1441 1
+2113 1441 -1
+2369 1441 1
+3457 1441 -1
+3653 1441 1
+4825 1441 -1
+4833 1441 1
+6433 1441 -1
+6440 1441 1
+9017 1441 38
+1346 1442 -1
+1705 1442 1
+2114 1442 -1
+2370 1442 1
+3458 1442 -1
+3654 1442 1
+4826 1442 -1
+4834 1442 1
+6433 1442 1
+6434 1442 -1
+9018 1442 38
+1347 1443 -1
+1706 1443 1
+2115 1443 -1
+2371 1443 1
+3459 1443 -1
+3655 1443 1
+4827 1443 -1
+4835 1443 1
+6434 1443 1
+6435 1443 -1
+9019 1443 38
+1348 1444 -1
+1707 1444 1
+2116 1444 -1
+2372 1444 1
+3460 1444 -1
+3656 1444 1
+4828 1444 -1
+4836 1444 1
+6435 1444 1
+6436 1444 -1
+9020 1444 38
+1349 1445 -1
+1708 1445 1
+2117 1445 -1
+2373 1445 1
+3461 1445 -1
+3649 1445 1
+4829 1445 -1
+4837 1445 1
+6436 1445 1
+6437 1445 -1
+9021 1445 38
+1350 1446 -1
+1709 1446 1
+2118 1446 -1
+2374 1446 1
+3462 1446 -1
+3650 1446 1
+4830 1446 -1
+4838 1446 1
+6437 1446 1
+6438 1446 -1
+9022 1446 38
+1351 1447 -1
+1710 1447 1
+2119 1447 -1
+2375 1447 1
+3463 1447 -1
+3651 1447 1
+4831 1447 -1
+4839 1447 1
+6438 1447 1
+6439 1447 -1
+9023 1447 38
+1352 1448 -1
+1711 1448 1
+2120 1448 -1
+2376 1448 1
+3464 1448 -1
+3652 1448 1
+4832 1448 -1
+4840 1448 1
+6439 1448 1
+6440 1448 -1
+9024 1448 38
+1353 1449 -1
+1720 1449 1
+2121 1449 -1
+2377 1449 1
+3465 1449 -1
+3661 1449 1
+4833 1449 -1
+4841 1449 1
+6441 1449 -1
+6448 1449 1
+9025 1449 38
+1354 1450 -1
+1713 1450 1
+2122 1450 -1
+2378 1450 1
+3466 1450 -1
+3662 1450 1
+4834 1450 -1
+4842 1450 1
+6441 1450 1
+6442 1450 -1
+9026 1450 38
+1355 1451 -1
+1714 1451 1
+2123 1451 -1
+2379 1451 1
+3467 1451 -1
+3663 1451 1
+4835 1451 -1
+4843 1451 1
+6442 1451 1
+6443 1451 -1
+9027 1451 38
+1356 1452 -1
+1715 1452 1
+2124 1452 -1
+2380 1452 1
+3468 1452 -1
+3664 1452 1
+4836 1452 -1
+4844 1452 1
+6443 1452 1
+6444 1452 -1
+9028 1452 38
+1357 1453 -1
+1716 1453 1
+2125 1453 -1
+2381 1453 1
+3469 1453 -1
+3657 1453 1
+4837 1453 -1
+4845 1453 1
+6444 1453 1
+6445 1453 -1
+9029 1453 38
+1358 1454 -1
+1717 1454 1
+2126 1454 -1
+2382 1454 1
+3470 1454 -1
+3658 1454 1
+4838 1454 -1
+4846 1454 1
+6445 1454 1
+6446 1454 -1
+9030 1454 38
+1359 1455 -1
+1718 1455 1
+2127 1455 -1
+2383 1455 1
+3471 1455 -1
+3659 1455 1
+4839 1455 -1
+4847 1455 1
+6446 1455 1
+6447 1455 -1
+9031 1455 38
+1360 1456 -1
+1719 1456 1
+2128 1456 -1
+2384 1456 1
+3472 1456 -1
+3660 1456 1
+4840 1456 -1
+4848 1456 1
+6447 1456 1
+6448 1456 -1
+9032 1456 38
+1361 1457 -1
+1728 1457 1
+2129 1457 -1
+2385 1457 1
+3473 1457 -1
+3669 1457 1
+4841 1457 -1
+4849 1457 1
+6449 1457 -1
+6456 1457 1
+9033 1457 38
+1362 1458 -1
+1721 1458 1
+2130 1458 -1
+2386 1458 1
+3474 1458 -1
+3670 1458 1
+4842 1458 -1
+4850 1458 1
+6449 1458 1
+6450 1458 -1
+9034 1458 38
+1363 1459 -1
+1722 1459 1
+2131 1459 -1
+2387 1459 1
+3475 1459 -1
+3671 1459 1
+4843 1459 -1
+4851 1459 1
+6450 1459 1
+6451 1459 -1
+9035 1459 38
+1364 1460 -1
+1723 1460 1
+2132 1460 -1
+2388 1460 1
+3476 1460 -1
+3672 1460 1
+4844 1460 -1
+4852 1460 1
+6451 1460 1
+6452 1460 -1
+9036 1460 38
+1365 1461 -1
+1724 1461 1
+2133 1461 -1
+2389 1461 1
+3477 1461 -1
+3665 1461 1
+4845 1461 -1
+4853 1461 1
+6452 1461 1
+6453 1461 -1
+9037 1461 38
+1366 1462 -1
+1725 1462 1
+2134 1462 -1
+2390 1462 1
+3478 1462 -1
+3666 1462 1
+4846 1462 -1
+4854 1462 1
+6453 1462 1
+6454 1462 -1
+9038 1462 38
+1367 1463 -1
+1726 1463 1
+2135 1463 -1
+2391 1463 1
+3479 1463 -1
+3667 1463 1
+4847 1463 -1
+4855 1463 1
+6454 1463 1
+6455 1463 -1
+9039 1463 38
+1368 1464 -1
+1727 1464 1
+2136 1464 -1
+2392 1464 1
+3480 1464 -1
+3668 1464 1
+4848 1464 -1
+4856 1464 1
+6455 1464 1
+6456 1464 -1
+9040 1464 38
+1369 1465 -1
+1736 1465 1
+2137 1465 -1
+2393 1465 1
+3481 1465 -1
+3677 1465 1
+4849 1465 -1
+4857 1465 1
+6457 1465 -1
+6464 1465 1
+9041 1465 38
+1370 1466 -1
+1729 1466 1
+2138 1466 -1
+2394 1466 1
+3482 1466 -1
+3678 1466 1
+4850 1466 -1
+4858 1466 1
+6457 1466 1
+6458 1466 -1
+9042 1466 38
+1371 1467 -1
+1730 1467 1
+2139 1467 -1
+2395 1467 1
+3483 1467 -1
+3679 1467 1
+4851 1467 -1
+4859 1467 1
+6458 1467 1
+6459 1467 -1
+9043 1467 38
+1372 1468 -1
+1731 1468 1
+2140 1468 -1
+2396 1468 1
+3484 1468 -1
+3680 1468 1
+4852 1468 -1
+4860 1468 1
+6459 1468 1
+6460 1468 -1
+9044 1468 38
+1373 1469 -1
+1732 1469 1
+2141 1469 -1
+2397 1469 1
+3485 1469 -1
+3673 1469 1
+4853 1469 -1
+4861 1469 1
+6460 1469 1
+6461 1469 -1
+9045 1469 38
+1374 1470 -1
+1733 1470 1
+2142 1470 -1
+2398 1470 1
+3486 1470 -1
+3674 1470 1
+4854 1470 -1
+4862 1470 1
+6461 1470 1
+6462 1470 -1
+9046 1470 38
+1375 1471 -1
+1734 1471 1
+2143 1471 -1
+2399 1471 1
+3487 1471 -1
+3675 1471 1
+4855 1471 -1
+4863 1471 1
+6462 1471 1
+6463 1471 -1
+9047 1471 38
+1376 1472 -1
+1735 1472 1
+2144 1472 -1
+2400 1472 1
+3488 1472 -1
+3676 1472 1
+4856 1472 -1
+4864 1472 1
+6463 1472 1
+6464 1472 -1
+9048 1472 38
+1377 1473 -1
+1744 1473 1
+2145 1473 -1
+2401 1473 1
+3489 1473 -1
+3553 1473 1
+4857 1473 -1
+4865 1473 1
+6465 1473 -1
+6472 1473 1
+9049 1473 38
+1378 1474 -1
+1737 1474 1
+2146 1474 -1
+2402 1474 1
+3490 1474 -1
+3554 1474 1
+4858 1474 -1
+4866 1474 1
+6465 1474 1
+6466 1474 -1
+9050 1474 38
+1379 1475 -1
+1738 1475 1
+2147 1475 -1
+2403 1475 1
+3491 1475 -1
+3555 1475 1
+4859 1475 -1
+4867 1475 1
+6466 1475 1
+6467 1475 -1
+9051 1475 38
+1380 1476 -1
+1739 1476 1
+2148 1476 -1
+2404 1476 1
+3492 1476 -1
+3556 1476 1
+4860 1476 -1
+4868 1476 1
+6467 1476 1
+6468 1476 -1
+9052 1476 38
+1381 1477 -1
+1740 1477 1
+2149 1477 -1
+2405 1477 1
+3493 1477 -1
+3557 1477 1
+4861 1477 -1
+4869 1477 1
+6468 1477 1
+6469 1477 -1
+9053 1477 38
+1382 1478 -1
+1741 1478 1
+2150 1478 -1
+2406 1478 1
+3494 1478 -1
+3558 1478 1
+4862 1478 -1
+4870 1478 1
+6469 1478 1
+6470 1478 -1
+9054 1478 38
+1383 1479 -1
+1742 1479 1
+2151 1479 -1
+2407 1479 1
+3495 1479 -1
+3559 1479 1
+4863 1479 -1
+4871 1479 1
+6470 1479 1
+6471 1479 -1
+9055 1479 38
+1384 1480 -1
+1743 1480 1
+2152 1480 -1
+2408 1480 1
+3496 1480 -1
+3560 1480 1
+4864 1480 -1
+4872 1480 1
+6471 1480 1
+6472 1480 -1
+9056 1480 38
+1385 1481 -1
+1752 1481 1
+2153 1481 -1
+2409 1481 1
+3497 1481 -1
+3561 1481 1
+4865 1481 -1
+4873 1481 1
+6473 1481 -1
+6480 1481 1
+9057 1481 38
+1386 1482 -1
+1745 1482 1
+2154 1482 -1
+2410 1482 1
+3498 1482 -1
+3562 1482 1
+4866 1482 -1
+4874 1482 1
+6473 1482 1
+6474 1482 -1
+9058 1482 38
+1387 1483 -1
+1746 1483 1
+2155 1483 -1
+2411 1483 1
+3499 1483 -1
+3563 1483 1
+4867 1483 -1
+4875 1483 1
+6474 1483 1
+6475 1483 -1
+9059 1483 38
+1388 1484 -1
+1747 1484 1
+2156 1484 -1
+2412 1484 1
+3500 1484 -1
+3564 1484 1
+4868 1484 -1
+4876 1484 1
+6475 1484 1
+6476 1484 -1
+9060 1484 38
+1389 1485 -1
+1748 1485 1
+2157 1485 -1
+2413 1485 1
+3501 1485 -1
+3565 1485 1
+4869 1485 -1
+4877 1485 1
+6476 1485 1
+6477 1485 -1
+9061 1485 38
+1390 1486 -1
+1749 1486 1
+2158 1486 -1
+2414 1486 1
+3502 1486 -1
+3566 1486 1
+4870 1486 -1
+4878 1486 1
+6477 1486 1
+6478 1486 -1
+9062 1486 38
+1391 1487 -1
+1750 1487 1
+2159 1487 -1
+2415 1487 1
+3503 1487 -1
+3567 1487 1
+4871 1487 -1
+4879 1487 1
+6478 1487 1
+6479 1487 -1
+9063 1487 38
+1392 1488 -1
+1751 1488 1
+2160 1488 -1
+2416 1488 1
+3504 1488 -1
+3568 1488 1
+4872 1488 -1
+4880 1488 1
+6479 1488 1
+6480 1488 -1
+9064 1488 38
+1393 1489 -1
+1760 1489 1
+2161 1489 -1
+2417 1489 1
+3505 1489 -1
+3569 1489 1
+4873 1489 -1
+4881 1489 1
+6481 1489 -1
+6488 1489 1
+9065 1489 38
+1394 1490 -1
+1753 1490 1
+2162 1490 -1
+2418 1490 1
+3506 1490 -1
+3570 1490 1
+4874 1490 -1
+4882 1490 1
+6481 1490 1
+6482 1490 -1
+9066 1490 38
+1395 1491 -1
+1754 1491 1
+2163 1491 -1
+2419 1491 1
+3507 1491 -1
+3571 1491 1
+4875 1491 -1
+4883 1491 1
+6482 1491 1
+6483 1491 -1
+9067 1491 38
+1396 1492 -1
+1755 1492 1
+2164 1492 -1
+2420 1492 1
+3508 1492 -1
+3572 1492 1
+4876 1492 -1
+4884 1492 1
+6483 1492 1
+6484 1492 -1
+9068 1492 38
+1397 1493 -1
+1756 1493 1
+2165 1493 -1
+2421 1493 1
+3509 1493 -1
+3573 1493 1
+4877 1493 -1
+4885 1493 1
+6484 1493 1
+6485 1493 -1
+9069 1493 38
+1398 1494 -1
+1757 1494 1
+2166 1494 -1
+2422 1494 1
+3510 1494 -1
+3574 1494 1
+4878 1494 -1
+4886 1494 1
+6485 1494 1
+6486 1494 -1
+9070 1494 38
+1399 1495 -1
+1758 1495 1
+2167 1495 -1
+2423 1495 1
+3511 1495 -1
+3575 1495 1
+4879 1495 -1
+4887 1495 1
+6486 1495 1
+6487 1495 -1
+9071 1495 38
+1400 1496 -1
+1759 1496 1
+2168 1496 -1
+2424 1496 1
+3512 1496 -1
+3576 1496 1
+4880 1496 -1
+4888 1496 1
+6487 1496 1
+6488 1496 -1
+9072 1496 38
+1401 1497 -1
+1768 1497 1
+2169 1497 -1
+2425 1497 1
+3513 1497 -1
+3577 1497 1
+4881 1497 -1
+4889 1497 1
+6489 1497 -1
+6496 1497 1
+9073 1497 38
+1402 1498 -1
+1761 1498 1
+2170 1498 -1
+2426 1498 1
+3514 1498 -1
+3578 1498 1
+4882 1498 -1
+4890 1498 1
+6489 1498 1
+6490 1498 -1
+9074 1498 38
+1403 1499 -1
+1762 1499 1
+2171 1499 -1
+2427 1499 1
+3515 1499 -1
+3579 1499 1
+4883 1499 -1
+4891 1499 1
+6490 1499 1
+6491 1499 -1
+9075 1499 38
+1404 1500 -1
+1763 1500 1
+2172 1500 -1
+2428 1500 1
+3516 1500 -1
+3580 1500 1
+4884 1500 -1
+4892 1500 1
+6491 1500 1
+6492 1500 -1
+9076 1500 38
+1405 1501 -1
+1764 1501 1
+2173 1501 -1
+2429 1501 1
+3517 1501 -1
+3581 1501 1
+4885 1501 -1
+4893 1501 1
+6492 1501 1
+6493 1501 -1
+9077 1501 38
+1406 1502 -1
+1765 1502 1
+2174 1502 -1
+2430 1502 1
+3518 1502 -1
+3582 1502 1
+4886 1502 -1
+4894 1502 1
+6493 1502 1
+6494 1502 -1
+9078 1502 38
+1407 1503 -1
+1766 1503 1
+2175 1503 -1
+2431 1503 1
+3519 1503 -1
+3583 1503 1
+4887 1503 -1
+4895 1503 1
+6494 1503 1
+6495 1503 -1
+9079 1503 38
+1408 1504 -1
+1767 1504 1
+2176 1504 -1
+2432 1504 1
+3520 1504 -1
+3584 1504 1
+4888 1504 -1
+4896 1504 1
+6495 1504 1
+6496 1504 -1
+9080 1504 38
+1409 1505 -1
+1776 1505 1
+2177 1505 -1
+2433 1505 1
+3521 1505 -1
+3585 1505 1
+4889 1505 -1
+4897 1505 1
+6497 1505 -1
+6504 1505 1
+9081 1505 38
+1410 1506 -1
+1769 1506 1
+2178 1506 -1
+2434 1506 1
+3522 1506 -1
+3586 1506 1
+4890 1506 -1
+4898 1506 1
+6497 1506 1
+6498 1506 -1
+9082 1506 38
+1411 1507 -1
+1770 1507 1
+2179 1507 -1
+2435 1507 1
+3523 1507 -1
+3587 1507 1
+4891 1507 -1
+4899 1507 1
+6498 1507 1
+6499 1507 -1
+9083 1507 38
+1412 1508 -1
+1771 1508 1
+2180 1508 -1
+2436 1508 1
+3524 1508 -1
+3588 1508 1
+4892 1508 -1
+4900 1508 1
+6499 1508 1
+6500 1508 -1
+9084 1508 38
+1413 1509 -1
+1772 1509 1
+2181 1509 -1
+2437 1509 1
+3525 1509 -1
+3589 1509 1
+4893 1509 -1
+4901 1509 1
+6500 1509 1
+6501 1509 -1
+9085 1509 38
+1414 1510 -1
+1773 1510 1
+2182 1510 -1
+2438 1510 1
+3526 1510 -1
+3590 1510 1
+4894 1510 -1
+4902 1510 1
+6501 1510 1
+6502 1510 -1
+9086 1510 38
+1415 1511 -1
+1774 1511 1
+2183 1511 -1
+2439 1511 1
+3527 1511 -1
+3591 1511 1
+4895 1511 -1
+4903 1511 1
+6502 1511 1
+6503 1511 -1
+9087 1511 38
+1416 1512 -1
+1775 1512 1
+2184 1512 -1
+2440 1512 1
+3528 1512 -1
+3592 1512 1
+4896 1512 -1
+4904 1512 1
+6503 1512 1
+6504 1512 -1
+9088 1512 38
+1417 1513 -1
+1784 1513 1
+2185 1513 -1
+2441 1513 1
+3529 1513 -1
+3593 1513 1
+4897 1513 -1
+4905 1513 1
+6505 1513 -1
+6512 1513 1
+9089 1513 38
+1418 1514 -1
+1777 1514 1
+2186 1514 -1
+2442 1514 1
+3530 1514 -1
+3594 1514 1
+4898 1514 -1
+4906 1514 1
+6505 1514 1
+6506 1514 -1
+9090 1514 38
+1419 1515 -1
+1778 1515 1
+2187 1515 -1
+2443 1515 1
+3531 1515 -1
+3595 1515 1
+4899 1515 -1
+4907 1515 1
+6506 1515 1
+6507 1515 -1
+9091 1515 38
+1420 1516 -1
+1779 1516 1
+2188 1516 -1
+2444 1516 1
+3532 1516 -1
+3596 1516 1
+4900 1516 -1
+4908 1516 1
+6507 1516 1
+6508 1516 -1
+9092 1516 38
+1421 1517 -1
+1780 1517 1
+2189 1517 -1
+2445 1517 1
+3533 1517 -1
+3597 1517 1
+4901 1517 -1
+4909 1517 1
+6508 1517 1
+6509 1517 -1
+9093 1517 38
+1422 1518 -1
+1781 1518 1
+2190 1518 -1
+2446 1518 1
+3534 1518 -1
+3598 1518 1
+4902 1518 -1
+4910 1518 1
+6509 1518 1
+6510 1518 -1
+9094 1518 38
+1423 1519 -1
+1782 1519 1
+2191 1519 -1
+2447 1519 1
+3535 1519 -1
+3599 1519 1
+4903 1519 -1
+4911 1519 1
+6510 1519 1
+6511 1519 -1
+9095 1519 38
+1424 1520 -1
+1783 1520 1
+2192 1520 -1
+2448 1520 1
+3536 1520 -1
+3600 1520 1
+4904 1520 -1
+4912 1520 1
+6511 1520 1
+6512 1520 -1
+9096 1520 38
+1425 1521 -1
+1792 1521 1
+2193 1521 -1
+2449 1521 1
+3537 1521 -1
+3601 1521 1
+4905 1521 -1
+4913 1521 1
+6513 1521 -1
+6520 1521 1
+9097 1521 38
+1426 1522 -1
+1785 1522 1
+2194 1522 -1
+2450 1522 1
+3538 1522 -1
+3602 1522 1
+4906 1522 -1
+4914 1522 1
+6513 1522 1
+6514 1522 -1
+9098 1522 38
+1427 1523 -1
+1786 1523 1
+2195 1523 -1
+2451 1523 1
+3539 1523 -1
+3603 1523 1
+4907 1523 -1
+4915 1523 1
+6514 1523 1
+6515 1523 -1
+9099 1523 38
+1428 1524 -1
+1787 1524 1
+2196 1524 -1
+2452 1524 1
+3540 1524 -1
+3604 1524 1
+4908 1524 -1
+4916 1524 1
+6515 1524 1
+6516 1524 -1
+9100 1524 38
+1429 1525 -1
+1788 1525 1
+2197 1525 -1
+2453 1525 1
+3541 1525 -1
+3605 1525 1
+4909 1525 -1
+4917 1525 1
+6516 1525 1
+6517 1525 -1
+9101 1525 38
+1430 1526 -1
+1789 1526 1
+2198 1526 -1
+2454 1526 1
+3542 1526 -1
+3606 1526 1
+4910 1526 -1
+4918 1526 1
+6517 1526 1
+6518 1526 -1
+9102 1526 38
+1431 1527 -1
+1790 1527 1
+2199 1527 -1
+2455 1527 1
+3543 1527 -1
+3607 1527 1
+4911 1527 -1
+4919 1527 1
+6518 1527 1
+6519 1527 -1
+9103 1527 38
+1432 1528 -1
+1791 1528 1
+2200 1528 -1
+2456 1528 1
+3544 1528 -1
+3608 1528 1
+4912 1528 -1
+4920 1528 1
+6519 1528 1
+6520 1528 -1
+9104 1528 38
+1433 1529 -1
+1800 1529 1
+2201 1529 -1
+2457 1529 1
+3545 1529 -1
+3609 1529 1
+4913 1529 -1
+4921 1529 1
+6521 1529 -1
+6528 1529 1
+9105 1529 38
+1434 1530 -1
+1793 1530 1
+2202 1530 -1
+2458 1530 1
+3546 1530 -1
+3610 1530 1
+4914 1530 -1
+4922 1530 1
+6521 1530 1
+6522 1530 -1
+9106 1530 38
+1435 1531 -1
+1794 1531 1
+2203 1531 -1
+2459 1531 1
+3547 1531 -1
+3611 1531 1
+4915 1531 -1
+4923 1531 1
+6522 1531 1
+6523 1531 -1
+9107 1531 38
+1436 1532 -1
+1795 1532 1
+2204 1532 -1
+2460 1532 1
+3548 1532 -1
+3612 1532 1
+4916 1532 -1
+4924 1532 1
+6523 1532 1
+6524 1532 -1
+9108 1532 38
+1437 1533 -1
+1796 1533 1
+2205 1533 -1
+2461 1533 1
+3549 1533 -1
+3613 1533 1
+4917 1533 -1
+4925 1533 1
+6524 1533 1
+6525 1533 -1
+9109 1533 38
+1438 1534 -1
+1797 1534 1
+2206 1534 -1
+2462 1534 1
+3550 1534 -1
+3614 1534 1
+4918 1534 -1
+4926 1534 1
+6525 1534 1
+6526 1534 -1
+9110 1534 38
+1439 1535 -1
+1798 1535 1
+2207 1535 -1
+2463 1535 1
+3551 1535 -1
+3615 1535 1
+4919 1535 -1
+4927 1535 1
+6526 1535 1
+6527 1535 -1
+9111 1535 38
+1440 1536 -1
+1799 1536 1
+2208 1536 -1
+2464 1536 1
+3552 1536 -1
+3616 1536 1
+4920 1536 -1
+4928 1536 1
+6527 1536 1
+6528 1536 -1
+9112 1536 38
+1441 1537 -1
+1616 1537 1
+2209 1537 -1
+2465 1537 1
+3425 1537 1
+3553 1537 -1
+4929 1537 1
+5053 1537 -1
+6529 1537 -1
+6536 1537 1
+9113 1537 38
+1442 1538 -1
+1609 1538 1
+2210 1538 -1
+2466 1538 1
+3426 1538 1
+3554 1538 -1
+4930 1538 1
+5054 1538 -1
+6529 1538 1
+6530 1538 -1
+9114 1538 38
+1443 1539 -1
+1610 1539 1
+2211 1539 -1
+2467 1539 1
+3427 1539 1
+3555 1539 -1
+4931 1539 1
+5055 1539 -1
+6530 1539 1
+6531 1539 -1
+9115 1539 38
+1444 1540 -1
+1611 1540 1
+2212 1540 -1
+2468 1540 1
+3428 1540 1
+3556 1540 -1
+4932 1540 1
+5056 1540 -1
+6531 1540 1
+6532 1540 -1
+9116 1540 38
+1445 1541 -1
+1612 1541 1
+2213 1541 -1
+2469 1541 1
+3429 1541 1
+3557 1541 -1
+4933 1541 1
+5049 1541 -1
+6532 1541 1
+6533 1541 -1
+9117 1541 38
+1446 1542 -1
+1613 1542 1
+2214 1542 -1
+2470 1542 1
+3430 1542 1
+3558 1542 -1
+4934 1542 1
+5050 1542 -1
+6533 1542 1
+6534 1542 -1
+9118 1542 38
+1447 1543 -1
+1614 1543 1
+2215 1543 -1
+2471 1543 1
+3431 1543 1
+3559 1543 -1
+4935 1543 1
+5051 1543 -1
+6534 1543 1
+6535 1543 -1
+9119 1543 38
+1448 1544 -1
+1615 1544 1
+2216 1544 -1
+2472 1544 1
+3432 1544 1
+3560 1544 -1
+4936 1544 1
+5052 1544 -1
+6535 1544 1
+6536 1544 -1
+9120 1544 38
+1449 1545 -1
+1624 1545 1
+2217 1545 -1
+2473 1545 1
+3433 1545 1
+3561 1545 -1
+4929 1545 -1
+4937 1545 1
+6537 1545 -1
+6544 1545 1
+9121 1545 38
+1450 1546 -1
+1617 1546 1
+2218 1546 -1
+2474 1546 1
+3434 1546 1
+3562 1546 -1
+4930 1546 -1
+4938 1546 1
+6537 1546 1
+6538 1546 -1
+9122 1546 38
+1451 1547 -1
+1618 1547 1
+2219 1547 -1
+2475 1547 1
+3435 1547 1
+3563 1547 -1
+4931 1547 -1
+4939 1547 1
+6538 1547 1
+6539 1547 -1
+9123 1547 38
+1452 1548 -1
+1619 1548 1
+2220 1548 -1
+2476 1548 1
+3436 1548 1
+3564 1548 -1
+4932 1548 -1
+4940 1548 1
+6539 1548 1
+6540 1548 -1
+9124 1548 38
+1453 1549 -1
+1620 1549 1
+2221 1549 -1
+2477 1549 1
+3437 1549 1
+3565 1549 -1
+4933 1549 -1
+4941 1549 1
+6540 1549 1
+6541 1549 -1
+9125 1549 38
+1454 1550 -1
+1621 1550 1
+2222 1550 -1
+2478 1550 1
+3438 1550 1
+3566 1550 -1
+4934 1550 -1
+4942 1550 1
+6541 1550 1
+6542 1550 -1
+9126 1550 38
+1455 1551 -1
+1622 1551 1
+2223 1551 -1
+2479 1551 1
+3439 1551 1
+3567 1551 -1
+4935 1551 -1
+4943 1551 1
+6542 1551 1
+6543 1551 -1
+9127 1551 38
+1456 1552 -1
+1623 1552 1
+2224 1552 -1
+2480 1552 1
+3440 1552 1
+3568 1552 -1
+4936 1552 -1
+4944 1552 1
+6543 1552 1
+6544 1552 -1
+9128 1552 38
+1457 1553 -1
+1632 1553 1
+2225 1553 -1
+2481 1553 1
+3441 1553 1
+3569 1553 -1
+4937 1553 -1
+4945 1553 1
+6545 1553 -1
+6552 1553 1
+9129 1553 38
+1458 1554 -1
+1625 1554 1
+2226 1554 -1
+2482 1554 1
+3442 1554 1
+3570 1554 -1
+4938 1554 -1
+4946 1554 1
+6545 1554 1
+6546 1554 -1
+9130 1554 38
+1459 1555 -1
+1626 1555 1
+2227 1555 -1
+2483 1555 1
+3443 1555 1
+3571 1555 -1
+4939 1555 -1
+4947 1555 1
+6546 1555 1
+6547 1555 -1
+9131 1555 38
+1460 1556 -1
+1627 1556 1
+2228 1556 -1
+2484 1556 1
+3444 1556 1
+3572 1556 -1
+4940 1556 -1
+4948 1556 1
+6547 1556 1
+6548 1556 -1
+9132 1556 38
+1461 1557 -1
+1628 1557 1
+2229 1557 -1
+2485 1557 1
+3445 1557 1
+3573 1557 -1
+4941 1557 -1
+4949 1557 1
+6548 1557 1
+6549 1557 -1
+9133 1557 38
+1462 1558 -1
+1629 1558 1
+2230 1558 -1
+2486 1558 1
+3446 1558 1
+3574 1558 -1
+4942 1558 -1
+4950 1558 1
+6549 1558 1
+6550 1558 -1
+9134 1558 38
+1463 1559 -1
+1630 1559 1
+2231 1559 -1
+2487 1559 1
+3447 1559 1
+3575 1559 -1
+4943 1559 -1
+4951 1559 1
+6550 1559 1
+6551 1559 -1
+9135 1559 38
+1464 1560 -1
+1631 1560 1
+2232 1560 -1
+2488 1560 1
+3448 1560 1
+3576 1560 -1
+4944 1560 -1
+4952 1560 1
+6551 1560 1
+6552 1560 -1
+9136 1560 38
+1465 1561 -1
+1640 1561 1
+2233 1561 -1
+2489 1561 1
+3449 1561 1
+3577 1561 -1
+4945 1561 -1
+4953 1561 1
+6553 1561 -1
+6560 1561 1
+9137 1561 38
+1466 1562 -1
+1633 1562 1
+2234 1562 -1
+2490 1562 1
+3450 1562 1
+3578 1562 -1
+4946 1562 -1
+4954 1562 1
+6553 1562 1
+6554 1562 -1
+9138 1562 38
+1467 1563 -1
+1634 1563 1
+2235 1563 -1
+2491 1563 1
+3451 1563 1
+3579 1563 -1
+4947 1563 -1
+4955 1563 1
+6554 1563 1
+6555 1563 -1
+9139 1563 38
+1468 1564 -1
+1635 1564 1
+2236 1564 -1
+2492 1564 1
+3452 1564 1
+3580 1564 -1
+4948 1564 -1
+4956 1564 1
+6555 1564 1
+6556 1564 -1
+9140 1564 38
+1469 1565 -1
+1636 1565 1
+2237 1565 -1
+2493 1565 1
+3453 1565 1
+3581 1565 -1
+4949 1565 -1
+4957 1565 1
+6556 1565 1
+6557 1565 -1
+9141 1565 38
+1470 1566 -1
+1637 1566 1
+2238 1566 -1
+2494 1566 1
+3454 1566 1
+3582 1566 -1
+4950 1566 -1
+4958 1566 1
+6557 1566 1
+6558 1566 -1
+9142 1566 38
+1471 1567 -1
+1638 1567 1
+2239 1567 -1
+2495 1567 1
+3455 1567 1
+3583 1567 -1
+4951 1567 -1
+4959 1567 1
+6558 1567 1
+6559 1567 -1
+9143 1567 38
+1472 1568 -1
+1639 1568 1
+2240 1568 -1
+2496 1568 1
+3456 1568 1
+3584 1568 -1
+4952 1568 -1
+4960 1568 1
+6559 1568 1
+6560 1568 -1
+9144 1568 38
+1473 1569 -1
+1648 1569 1
+2241 1569 -1
+2497 1569 1
+3457 1569 1
+3585 1569 -1
+4953 1569 -1
+4961 1569 1
+6561 1569 -1
+6568 1569 1
+9145 1569 38
+1474 1570 -1
+1641 1570 1
+2242 1570 -1
+2498 1570 1
+3458 1570 1
+3586 1570 -1
+4954 1570 -1
+4962 1570 1
+6561 1570 1
+6562 1570 -1
+9146 1570 38
+1475 1571 -1
+1642 1571 1
+2243 1571 -1
+2499 1571 1
+3459 1571 1
+3587 1571 -1
+4955 1571 -1
+4963 1571 1
+6562 1571 1
+6563 1571 -1
+9147 1571 38
+1476 1572 -1
+1643 1572 1
+2244 1572 -1
+2500 1572 1
+3460 1572 1
+3588 1572 -1
+4956 1572 -1
+4964 1572 1
+6563 1572 1
+6564 1572 -1
+9148 1572 38
+1477 1573 -1
+1644 1573 1
+2245 1573 -1
+2501 1573 1
+3461 1573 1
+3589 1573 -1
+4957 1573 -1
+4965 1573 1
+6564 1573 1
+6565 1573 -1
+9149 1573 38
+1478 1574 -1
+1645 1574 1
+2246 1574 -1
+2502 1574 1
+3462 1574 1
+3590 1574 -1
+4958 1574 -1
+4966 1574 1
+6565 1574 1
+6566 1574 -1
+9150 1574 38
+1479 1575 -1
+1646 1575 1
+2247 1575 -1
+2503 1575 1
+3463 1575 1
+3591 1575 -1
+4959 1575 -1
+4967 1575 1
+6566 1575 1
+6567 1575 -1
+9151 1575 38
+1480 1576 -1
+1647 1576 1
+2248 1576 -1
+2504 1576 1
+3464 1576 1
+3592 1576 -1
+4960 1576 -1
+4968 1576 1
+6567 1576 1
+6568 1576 -1
+9152 1576 38
+1481 1577 -1
+1656 1577 1
+2249 1577 -1
+2505 1577 1
+3465 1577 1
+3593 1577 -1
+4961 1577 -1
+4969 1577 1
+6569 1577 -1
+6576 1577 1
+9153 1577 38
+1482 1578 -1
+1649 1578 1
+2250 1578 -1
+2506 1578 1
+3466 1578 1
+3594 1578 -1
+4962 1578 -1
+4970 1578 1
+6569 1578 1
+6570 1578 -1
+9154 1578 38
+1483 1579 -1
+1650 1579 1
+2251 1579 -1
+2507 1579 1
+3467 1579 1
+3595 1579 -1
+4963 1579 -1
+4971 1579 1
+6570 1579 1
+6571 1579 -1
+9155 1579 38
+1484 1580 -1
+1651 1580 1
+2252 1580 -1
+2508 1580 1
+3468 1580 1
+3596 1580 -1
+4964 1580 -1
+4972 1580 1
+6571 1580 1
+6572 1580 -1
+9156 1580 38
+1485 1581 -1
+1652 1581 1
+2253 1581 -1
+2509 1581 1
+3469 1581 1
+3597 1581 -1
+4965 1581 -1
+4973 1581 1
+6572 1581 1
+6573 1581 -1
+9157 1581 38
+1486 1582 -1
+1653 1582 1
+2254 1582 -1
+2510 1582 1
+3470 1582 1
+3598 1582 -1
+4966 1582 -1
+4974 1582 1
+6573 1582 1
+6574 1582 -1
+9158 1582 38
+1487 1583 -1
+1654 1583 1
+2255 1583 -1
+2511 1583 1
+3471 1583 1
+3599 1583 -1
+4967 1583 -1
+4975 1583 1
+6574 1583 1
+6575 1583 -1
+9159 1583 38
+1488 1584 -1
+1655 1584 1
+2256 1584 -1
+2512 1584 1
+3472 1584 1
+3600 1584 -1
+4968 1584 -1
+4976 1584 1
+6575 1584 1
+6576 1584 -1
+9160 1584 38
+1489 1585 -1
+1664 1585 1
+2257 1585 -1
+2513 1585 1
+3473 1585 1
+3601 1585 -1
+4969 1585 -1
+4977 1585 1
+6577 1585 -1
+6584 1585 1
+9161 1585 38
+1490 1586 -1
+1657 1586 1
+2258 1586 -1
+2514 1586 1
+3474 1586 1
+3602 1586 -1
+4970 1586 -1
+4978 1586 1
+6577 1586 1
+6578 1586 -1
+9162 1586 38
+1491 1587 -1
+1658 1587 1
+2259 1587 -1
+2515 1587 1
+3475 1587 1
+3603 1587 -1
+4971 1587 -1
+4979 1587 1
+6578 1587 1
+6579 1587 -1
+9163 1587 38
+1492 1588 -1
+1659 1588 1
+2260 1588 -1
+2516 1588 1
+3476 1588 1
+3604 1588 -1
+4972 1588 -1
+4980 1588 1
+6579 1588 1
+6580 1588 -1
+9164 1588 38
+1493 1589 -1
+1660 1589 1
+2261 1589 -1
+2517 1589 1
+3477 1589 1
+3605 1589 -1
+4973 1589 -1
+4981 1589 1
+6580 1589 1
+6581 1589 -1
+9165 1589 38
+1494 1590 -1
+1661 1590 1
+2262 1590 -1
+2518 1590 1
+3478 1590 1
+3606 1590 -1
+4974 1590 -1
+4982 1590 1
+6581 1590 1
+6582 1590 -1
+9166 1590 38
+1495 1591 -1
+1662 1591 1
+2263 1591 -1
+2519 1591 1
+3479 1591 1
+3607 1591 -1
+4975 1591 -1
+4983 1591 1
+6582 1591 1
+6583 1591 -1
+9167 1591 38
+1496 1592 -1
+1663 1592 1
+2264 1592 -1
+2520 1592 1
+3480 1592 1
+3608 1592 -1
+4976 1592 -1
+4984 1592 1
+6583 1592 1
+6584 1592 -1
+9168 1592 38
+1497 1593 -1
+1672 1593 1
+2265 1593 -1
+2521 1593 1
+3481 1593 1
+3609 1593 -1
+4977 1593 -1
+4985 1593 1
+6585 1593 -1
+6592 1593 1
+9169 1593 38
+1498 1594 -1
+1665 1594 1
+2266 1594 -1
+2522 1594 1
+3482 1594 1
+3610 1594 -1
+4978 1594 -1
+4986 1594 1
+6585 1594 1
+6586 1594 -1
+9170 1594 38
+1499 1595 -1
+1666 1595 1
+2267 1595 -1
+2523 1595 1
+3483 1595 1
+3611 1595 -1
+4979 1595 -1
+4987 1595 1
+6586 1595 1
+6587 1595 -1
+9171 1595 38
+1500 1596 -1
+1667 1596 1
+2268 1596 -1
+2524 1596 1
+3484 1596 1
+3612 1596 -1
+4980 1596 -1
+4988 1596 1
+6587 1596 1
+6588 1596 -1
+9172 1596 38
+1501 1597 -1
+1668 1597 1
+2269 1597 -1
+2525 1597 1
+3485 1597 1
+3613 1597 -1
+4981 1597 -1
+4989 1597 1
+6588 1597 1
+6589 1597 -1
+9173 1597 38
+1502 1598 -1
+1669 1598 1
+2270 1598 -1
+2526 1598 1
+3486 1598 1
+3614 1598 -1
+4982 1598 -1
+4990 1598 1
+6589 1598 1
+6590 1598 -1
+9174 1598 38
+1503 1599 -1
+1670 1599 1
+2271 1599 -1
+2527 1599 1
+3487 1599 1
+3615 1599 -1
+4983 1599 -1
+4991 1599 1
+6590 1599 1
+6591 1599 -1
+9175 1599 38
+1504 1600 -1
+1671 1600 1
+2272 1600 -1
+2528 1600 1
+3488 1600 1
+3616 1600 -1
+4984 1600 -1
+4992 1600 1
+6591 1600 1
+6592 1600 -1
+9176 1600 38
+1505 1601 -1
+1680 1601 1
+2273 1601 -1
+2529 1601 1
+3489 1601 1
+3617 1601 -1
+4985 1601 -1
+4993 1601 1
+6593 1601 -1
+6600 1601 1
+9177 1601 38
+1506 1602 -1
+1673 1602 1
+2274 1602 -1
+2530 1602 1
+3490 1602 1
+3618 1602 -1
+4986 1602 -1
+4994 1602 1
+6593 1602 1
+6594 1602 -1
+9178 1602 38
+1507 1603 -1
+1674 1603 1
+2275 1603 -1
+2531 1603 1
+3491 1603 1
+3619 1603 -1
+4987 1603 -1
+4995 1603 1
+6594 1603 1
+6595 1603 -1
+9179 1603 38
+1508 1604 -1
+1675 1604 1
+2276 1604 -1
+2532 1604 1
+3492 1604 1
+3620 1604 -1
+4988 1604 -1
+4996 1604 1
+6595 1604 1
+6596 1604 -1
+9180 1604 38
+1509 1605 -1
+1676 1605 1
+2277 1605 -1
+2533 1605 1
+3493 1605 1
+3621 1605 -1
+4989 1605 -1
+4997 1605 1
+6596 1605 1
+6597 1605 -1
+9181 1605 38
+1510 1606 -1
+1677 1606 1
+2278 1606 -1
+2534 1606 1
+3494 1606 1
+3622 1606 -1
+4990 1606 -1
+4998 1606 1
+6597 1606 1
+6598 1606 -1
+9182 1606 38
+1511 1607 -1
+1678 1607 1
+2279 1607 -1
+2535 1607 1
+3495 1607 1
+3623 1607 -1
+4991 1607 -1
+4999 1607 1
+6598 1607 1
+6599 1607 -1
+9183 1607 38
+1512 1608 -1
+1679 1608 1
+2280 1608 -1
+2536 1608 1
+3496 1608 1
+3624 1608 -1
+4992 1608 -1
+5000 1608 1
+6599 1608 1
+6600 1608 -1
+9184 1608 38
+1513 1609 -1
+1688 1609 1
+2281 1609 -1
+2537 1609 1
+3497 1609 1
+3625 1609 -1
+4993 1609 -1
+5001 1609 1
+6601 1609 -1
+6608 1609 1
+9185 1609 38
+1514 1610 -1
+1681 1610 1
+2282 1610 -1
+2538 1610 1
+3498 1610 1
+3626 1610 -1
+4994 1610 -1
+5002 1610 1
+6601 1610 1
+6602 1610 -1
+9186 1610 38
+1515 1611 -1
+1682 1611 1
+2283 1611 -1
+2539 1611 1
+3499 1611 1
+3627 1611 -1
+4995 1611 -1
+5003 1611 1
+6602 1611 1
+6603 1611 -1
+9187 1611 38
+1516 1612 -1
+1683 1612 1
+2284 1612 -1
+2540 1612 1
+3500 1612 1
+3628 1612 -1
+4996 1612 -1
+5004 1612 1
+6603 1612 1
+6604 1612 -1
+9188 1612 38
+1517 1613 -1
+1684 1613 1
+2285 1613 -1
+2541 1613 1
+3501 1613 1
+3629 1613 -1
+4997 1613 -1
+5005 1613 1
+6604 1613 1
+6605 1613 -1
+9189 1613 38
+1518 1614 -1
+1685 1614 1
+2286 1614 -1
+2542 1614 1
+3502 1614 1
+3630 1614 -1
+4998 1614 -1
+5006 1614 1
+6605 1614 1
+6606 1614 -1
+9190 1614 38
+1519 1615 -1
+1686 1615 1
+2287 1615 -1
+2543 1615 1
+3503 1615 1
+3631 1615 -1
+4999 1615 -1
+5007 1615 1
+6606 1615 1
+6607 1615 -1
+9191 1615 38
+1520 1616 -1
+1687 1616 1
+2288 1616 -1
+2544 1616 1
+3504 1616 1
+3632 1616 -1
+5000 1616 -1
+5008 1616 1
+6607 1616 1
+6608 1616 -1
+9192 1616 38
+1521 1617 -1
+1696 1617 1
+2289 1617 -1
+2545 1617 1
+3505 1617 1
+3633 1617 -1
+5001 1617 -1
+5009 1617 1
+6609 1617 -1
+6616 1617 1
+9193 1617 38
+1522 1618 -1
+1689 1618 1
+2290 1618 -1
+2546 1618 1
+3506 1618 1
+3634 1618 -1
+5002 1618 -1
+5010 1618 1
+6609 1618 1
+6610 1618 -1
+9194 1618 38
+1523 1619 -1
+1690 1619 1
+2291 1619 -1
+2547 1619 1
+3507 1619 1
+3635 1619 -1
+5003 1619 -1
+5011 1619 1
+6610 1619 1
+6611 1619 -1
+9195 1619 38
+1524 1620 -1
+1691 1620 1
+2292 1620 -1
+2548 1620 1
+3508 1620 1
+3636 1620 -1
+5004 1620 -1
+5012 1620 1
+6611 1620 1
+6612 1620 -1
+9196 1620 38
+1525 1621 -1
+1692 1621 1
+2293 1621 -1
+2549 1621 1
+3509 1621 1
+3637 1621 -1
+5005 1621 -1
+5013 1621 1
+6612 1621 1
+6613 1621 -1
+9197 1621 38
+1526 1622 -1
+1693 1622 1
+2294 1622 -1
+2550 1622 1
+3510 1622 1
+3638 1622 -1
+5006 1622 -1
+5014 1622 1
+6613 1622 1
+6614 1622 -1
+9198 1622 38
+1527 1623 -1
+1694 1623 1
+2295 1623 -1
+2551 1623 1
+3511 1623 1
+3639 1623 -1
+5007 1623 -1
+5015 1623 1
+6614 1623 1
+6615 1623 -1
+9199 1623 38
+1528 1624 -1
+1695 1624 1
+2296 1624 -1
+2552 1624 1
+3512 1624 1
+3640 1624 -1
+5008 1624 -1
+5016 1624 1
+6615 1624 1
+6616 1624 -1
+9200 1624 38
+1529 1625 -1
+1572 1625 1
+2297 1625 -1
+2553 1625 1
+3513 1625 1
+3641 1625 -1
+5009 1625 -1
+5017 1625 1
+6617 1625 -1
+6624 1625 1
+9201 1625 38
+1530 1626 -1
+1573 1626 1
+2298 1626 -1
+2554 1626 1
+3514 1626 1
+3642 1626 -1
+5010 1626 -1
+5018 1626 1
+6617 1626 1
+6618 1626 -1
+9202 1626 38
+1531 1627 -1
+1574 1627 1
+2299 1627 -1
+2555 1627 1
+3515 1627 1
+3643 1627 -1
+5011 1627 -1
+5019 1627 1
+6618 1627 1
+6619 1627 -1
+9203 1627 38
+1532 1628 -1
+1575 1628 1
+2300 1628 -1
+2556 1628 1
+3516 1628 1
+3644 1628 -1
+5012 1628 -1
+5020 1628 1
+6619 1628 1
+6620 1628 -1
+9204 1628 38
+1533 1629 -1
+1576 1629 1
+2301 1629 -1
+2557 1629 1
+3517 1629 1
+3645 1629 -1
+5013 1629 -1
+5021 1629 1
+6620 1629 1
+6621 1629 -1
+9205 1629 38
+1534 1630 -1
+1569 1630 1
+2302 1630 -1
+2558 1630 1
+3518 1630 1
+3646 1630 -1
+5014 1630 -1
+5022 1630 1
+6621 1630 1
+6622 1630 -1
+9206 1630 38
+1535 1631 -1
+1570 1631 1
+2303 1631 -1
+2559 1631 1
+3519 1631 1
+3647 1631 -1
+5015 1631 -1
+5023 1631 1
+6622 1631 1
+6623 1631 -1
+9207 1631 38
+1536 1632 -1
+1571 1632 1
+2304 1632 -1
+2560 1632 1
+3520 1632 1
+3648 1632 -1
+5016 1632 -1
+5024 1632 1
+6623 1632 1
+6624 1632 -1
+9208 1632 38
+1537 1633 -1
+1580 1633 1
+2305 1633 -1
+2561 1633 1
+3521 1633 1
+3649 1633 -1
+5017 1633 -1
+5025 1633 1
+6625 1633 -1
+6632 1633 1
+9209 1633 38
+1538 1634 -1
+1581 1634 1
+2306 1634 -1
+2562 1634 1
+3522 1634 1
+3650 1634 -1
+5018 1634 -1
+5026 1634 1
+6625 1634 1
+6626 1634 -1
+9210 1634 38
+1539 1635 -1
+1582 1635 1
+2307 1635 -1
+2563 1635 1
+3523 1635 1
+3651 1635 -1
+5019 1635 -1
+5027 1635 1
+6626 1635 1
+6627 1635 -1
+9211 1635 38
+1540 1636 -1
+1583 1636 1
+2308 1636 -1
+2564 1636 1
+3524 1636 1
+3652 1636 -1
+5020 1636 -1
+5028 1636 1
+6627 1636 1
+6628 1636 -1
+9212 1636 38
+1541 1637 -1
+1584 1637 1
+2309 1637 -1
+2565 1637 1
+3525 1637 1
+3653 1637 -1
+5021 1637 -1
+5029 1637 1
+6628 1637 1
+6629 1637 -1
+9213 1637 38
+1542 1638 -1
+1577 1638 1
+2310 1638 -1
+2566 1638 1
+3526 1638 1
+3654 1638 -1
+5022 1638 -1
+5030 1638 1
+6629 1638 1
+6630 1638 -1
+9214 1638 38
+1543 1639 -1
+1578 1639 1
+2311 1639 -1
+2567 1639 1
+3527 1639 1
+3655 1639 -1
+5023 1639 -1
+5031 1639 1
+6630 1639 1
+6631 1639 -1
+9215 1639 38
+1544 1640 -1
+1579 1640 1
+2312 1640 -1
+2568 1640 1
+3528 1640 1
+3656 1640 -1
+5024 1640 -1
+5032 1640 1
+6631 1640 1
+6632 1640 -1
+9216 1640 38
+1545 1641 -1
+1588 1641 1
+2313 1641 -1
+2569 1641 1
+3529 1641 1
+3657 1641 -1
+5025 1641 -1
+5033 1641 1
+6633 1641 -1
+6640 1641 1
+9217 1641 38
+1546 1642 -1
+1589 1642 1
+2314 1642 -1
+2570 1642 1
+3530 1642 1
+3658 1642 -1
+5026 1642 -1
+5034 1642 1
+6633 1642 1
+6634 1642 -1
+9218 1642 38
+1547 1643 -1
+1590 1643 1
+2315 1643 -1
+2571 1643 1
+3531 1643 1
+3659 1643 -1
+5027 1643 -1
+5035 1643 1
+6634 1643 1
+6635 1643 -1
+9219 1643 38
+1548 1644 -1
+1591 1644 1
+2316 1644 -1
+2572 1644 1
+3532 1644 1
+3660 1644 -1
+5028 1644 -1
+5036 1644 1
+6635 1644 1
+6636 1644 -1
+9220 1644 38
+1549 1645 -1
+1592 1645 1
+2317 1645 -1
+2573 1645 1
+3533 1645 1
+3661 1645 -1
+5029 1645 -1
+5037 1645 1
+6636 1645 1
+6637 1645 -1
+9221 1645 38
+1550 1646 -1
+1585 1646 1
+2318 1646 -1
+2574 1646 1
+3534 1646 1
+3662 1646 -1
+5030 1646 -1
+5038 1646 1
+6637 1646 1
+6638 1646 -1
+9222 1646 38
+1551 1647 -1
+1586 1647 1
+2319 1647 -1
+2575 1647 1
+3535 1647 1
+3663 1647 -1
+5031 1647 -1
+5039 1647 1
+6638 1647 1
+6639 1647 -1
+9223 1647 38
+1552 1648 -1
+1587 1648 1
+2320 1648 -1
+2576 1648 1
+3536 1648 1
+3664 1648 -1
+5032 1648 -1
+5040 1648 1
+6639 1648 1
+6640 1648 -1
+9224 1648 38
+1553 1649 -1
+1596 1649 1
+2321 1649 -1
+2577 1649 1
+3537 1649 1
+3665 1649 -1
+5033 1649 -1
+5041 1649 1
+6641 1649 -1
+6648 1649 1
+9225 1649 38
+1554 1650 -1
+1597 1650 1
+2322 1650 -1
+2578 1650 1
+3538 1650 1
+3666 1650 -1
+5034 1650 -1
+5042 1650 1
+6641 1650 1
+6642 1650 -1
+9226 1650 38
+1555 1651 -1
+1598 1651 1
+2323 1651 -1
+2579 1651 1
+3539 1651 1
+3667 1651 -1
+5035 1651 -1
+5043 1651 1
+6642 1651 1
+6643 1651 -1
+9227 1651 38
+1556 1652 -1
+1599 1652 1
+2324 1652 -1
+2580 1652 1
+3540 1652 1
+3668 1652 -1
+5036 1652 -1
+5044 1652 1
+6643 1652 1
+6644 1652 -1
+9228 1652 38
+1557 1653 -1
+1600 1653 1
+2325 1653 -1
+2581 1653 1
+3541 1653 1
+3669 1653 -1
+5037 1653 -1
+5045 1653 1
+6644 1653 1
+6645 1653 -1
+9229 1653 38
+1558 1654 -1
+1593 1654 1
+2326 1654 -1
+2582 1654 1
+3542 1654 1
+3670 1654 -1
+5038 1654 -1
+5046 1654 1
+6645 1654 1
+6646 1654 -1
+9230 1654 38
+1559 1655 -1
+1594 1655 1
+2327 1655 -1
+2583 1655 1
+3543 1655 1
+3671 1655 -1
+5039 1655 -1
+5047 1655 1
+6646 1655 1
+6647 1655 -1
+9231 1655 38
+1560 1656 -1
+1595 1656 1
+2328 1656 -1
+2584 1656 1
+3544 1656 1
+3672 1656 -1
+5040 1656 -1
+5048 1656 1
+6647 1656 1
+6648 1656 -1
+9232 1656 38
+1561 1657 -1
+1604 1657 1
+2329 1657 -1
+2585 1657 1
+3545 1657 1
+3673 1657 -1
+5041 1657 -1
+5049 1657 1
+6649 1657 -1
+6656 1657 1
+9233 1657 38
+1562 1658 -1
+1605 1658 1
+2330 1658 -1
+2586 1658 1
+3546 1658 1
+3674 1658 -1
+5042 1658 -1
+5050 1658 1
+6649 1658 1
+6650 1658 -1
+9234 1658 38
+1563 1659 -1
+1606 1659 1
+2331 1659 -1
+2587 1659 1
+3547 1659 1
+3675 1659 -1
+5043 1659 -1
+5051 1659 1
+6650 1659 1
+6651 1659 -1
+9235 1659 38
+1564 1660 -1
+1607 1660 1
+2332 1660 -1
+2588 1660 1
+3548 1660 1
+3676 1660 -1
+5044 1660 -1
+5052 1660 1
+6651 1660 1
+6652 1660 -1
+9236 1660 38
+1565 1661 -1
+1608 1661 1
+2333 1661 -1
+2589 1661 1
+3549 1661 1
+3677 1661 -1
+5045 1661 -1
+5053 1661 1
+6652 1661 1
+6653 1661 -1
+9237 1661 38
+1566 1662 -1
+1601 1662 1
+2334 1662 -1
+2590 1662 1
+3550 1662 1
+3678 1662 -1
+5046 1662 -1
+5054 1662 1
+6653 1662 1
+6654 1662 -1
+9238 1662 38
+1567 1663 -1
+1602 1663 1
+2335 1663 -1
+2591 1663 1
+3551 1663 1
+3679 1663 -1
+5047 1663 -1
+5055 1663 1
+6654 1663 1
+6655 1663 -1
+9239 1663 38
+1568 1664 -1
+1603 1664 1
+2336 1664 -1
+2592 1664 1
+3552 1664 1
+3680 1664 -1
+5048 1664 -1
+5056 1664 1
+6655 1664 1
+6656 1664 -1
+9240 1664 38
+1569 1665 -1
+2060 1665 1
+2337 1665 -1
+2593 1665 1
+3681 1665 -1
+3877 1665 1
+5057 1665 1
+5181 1665 -1
+6657 1665 -1
+6664 1665 1
+9241 1665 38
+1570 1666 -1
+2061 1666 1
+2338 1666 -1
+2594 1666 1
+3682 1666 -1
+3878 1666 1
+5058 1666 1
+5182 1666 -1
+6657 1666 1
+6658 1666 -1
+9242 1666 38
+1571 1667 -1
+2062 1667 1
+2339 1667 -1
+2595 1667 1
+3683 1667 -1
+3879 1667 1
+5059 1667 1
+5183 1667 -1
+6658 1667 1
+6659 1667 -1
+9243 1667 38
+1572 1668 -1
+2063 1668 1
+2340 1668 -1
+2596 1668 1
+3684 1668 -1
+3880 1668 1
+5060 1668 1
+5184 1668 -1
+6659 1668 1
+6660 1668 -1
+9244 1668 38
+1573 1669 -1
+2064 1669 1
+2341 1669 -1
+2597 1669 1
+3685 1669 -1
+3873 1669 1
+5061 1669 1
+5177 1669 -1
+6660 1669 1
+6661 1669 -1
+9245 1669 38
+1574 1670 -1
+2057 1670 1
+2342 1670 -1
+2598 1670 1
+3686 1670 -1
+3874 1670 1
+5062 1670 1
+5178 1670 -1
+6661 1670 1
+6662 1670 -1
+9246 1670 38
+1575 1671 -1
+2058 1671 1
+2343 1671 -1
+2599 1671 1
+3687 1671 -1
+3875 1671 1
+5063 1671 1
+5179 1671 -1
+6662 1671 1
+6663 1671 -1
+9247 1671 38
+1576 1672 -1
+2059 1672 1
+2344 1672 -1
+2600 1672 1
+3688 1672 -1
+3876 1672 1
+5064 1672 1
+5180 1672 -1
+6663 1672 1
+6664 1672 -1
+9248 1672 38
+1577 1673 -1
+2068 1673 1
+2345 1673 -1
+2601 1673 1
+3689 1673 -1
+3885 1673 1
+5057 1673 -1
+5065 1673 1
+6665 1673 -1
+6672 1673 1
+9249 1673 38
+1578 1674 -1
+2069 1674 1
+2346 1674 -1
+2602 1674 1
+3690 1674 -1
+3886 1674 1
+5058 1674 -1
+5066 1674 1
+6665 1674 1
+6666 1674 -1
+9250 1674 38
+1579 1675 -1
+2070 1675 1
+2347 1675 -1
+2603 1675 1
+3691 1675 -1
+3887 1675 1
+5059 1675 -1
+5067 1675 1
+6666 1675 1
+6667 1675 -1
+9251 1675 38
+1580 1676 -1
+2071 1676 1
+2348 1676 -1
+2604 1676 1
+3692 1676 -1
+3888 1676 1
+5060 1676 -1
+5068 1676 1
+6667 1676 1
+6668 1676 -1
+9252 1676 38
+1581 1677 -1
+2072 1677 1
+2349 1677 -1
+2605 1677 1
+3693 1677 -1
+3881 1677 1
+5061 1677 -1
+5069 1677 1
+6668 1677 1
+6669 1677 -1
+9253 1677 38
+1582 1678 -1
+2065 1678 1
+2350 1678 -1
+2606 1678 1
+3694 1678 -1
+3882 1678 1
+5062 1678 -1
+5070 1678 1
+6669 1678 1
+6670 1678 -1
+9254 1678 38
+1583 1679 -1
+2066 1679 1
+2351 1679 -1
+2607 1679 1
+3695 1679 -1
+3883 1679 1
+5063 1679 -1
+5071 1679 1
+6670 1679 1
+6671 1679 -1
+9255 1679 38
+1584 1680 -1
+2067 1680 1
+2352 1680 -1
+2608 1680 1
+3696 1680 -1
+3884 1680 1
+5064 1680 -1
+5072 1680 1
+6671 1680 1
+6672 1680 -1
+9256 1680 38
+1585 1681 -1
+2076 1681 1
+2353 1681 -1
+2609 1681 1
+3697 1681 -1
+3893 1681 1
+5065 1681 -1
+5073 1681 1
+6673 1681 -1
+6680 1681 1
+9257 1681 38
+1586 1682 -1
+2077 1682 1
+2354 1682 -1
+2610 1682 1
+3698 1682 -1
+3894 1682 1
+5066 1682 -1
+5074 1682 1
+6673 1682 1
+6674 1682 -1
+9258 1682 38
+1587 1683 -1
+2078 1683 1
+2355 1683 -1
+2611 1683 1
+3699 1683 -1
+3895 1683 1
+5067 1683 -1
+5075 1683 1
+6674 1683 1
+6675 1683 -1
+9259 1683 38
+1588 1684 -1
+2079 1684 1
+2356 1684 -1
+2612 1684 1
+3700 1684 -1
+3896 1684 1
+5068 1684 -1
+5076 1684 1
+6675 1684 1
+6676 1684 -1
+9260 1684 38
+1589 1685 -1
+2080 1685 1
+2357 1685 -1
+2613 1685 1
+3701 1685 -1
+3889 1685 1
+5069 1685 -1
+5077 1685 1
+6676 1685 1
+6677 1685 -1
+9261 1685 38
+1590 1686 -1
+2073 1686 1
+2358 1686 -1
+2614 1686 1
+3702 1686 -1
+3890 1686 1
+5070 1686 -1
+5078 1686 1
+6677 1686 1
+6678 1686 -1
+9262 1686 38
+1591 1687 -1
+2074 1687 1
+2359 1687 -1
+2615 1687 1
+3703 1687 -1
+3891 1687 1
+5071 1687 -1
+5079 1687 1
+6678 1687 1
+6679 1687 -1
+9263 1687 38
+1592 1688 -1
+2075 1688 1
+2360 1688 -1
+2616 1688 1
+3704 1688 -1
+3892 1688 1
+5072 1688 -1
+5080 1688 1
+6679 1688 1
+6680 1688 -1
+9264 1688 38
+1593 1689 -1
+1960 1689 1
+2361 1689 -1
+2617 1689 1
+3705 1689 -1
+3901 1689 1
+5073 1689 -1
+5081 1689 1
+6681 1689 -1
+6688 1689 1
+9265 1689 38
+1594 1690 -1
+1953 1690 1
+2362 1690 -1
+2618 1690 1
+3706 1690 -1
+3902 1690 1
+5074 1690 -1
+5082 1690 1
+6681 1690 1
+6682 1690 -1
+9266 1690 38
+1595 1691 -1
+1954 1691 1
+2363 1691 -1
+2619 1691 1
+3707 1691 -1
+3903 1691 1
+5075 1691 -1
+5083 1691 1
+6682 1691 1
+6683 1691 -1
+9267 1691 38
+1596 1692 -1
+1955 1692 1
+2364 1692 -1
+2620 1692 1
+3708 1692 -1
+3904 1692 1
+5076 1692 -1
+5084 1692 1
+6683 1692 1
+6684 1692 -1
+9268 1692 38
+1597 1693 -1
+1956 1693 1
+2365 1693 -1
+2621 1693 1
+3709 1693 -1
+3897 1693 1
+5077 1693 -1
+5085 1693 1
+6684 1693 1
+6685 1693 -1
+9269 1693 38
+1598 1694 -1
+1957 1694 1
+2366 1694 -1
+2622 1694 1
+3710 1694 -1
+3898 1694 1
+5078 1694 -1
+5086 1694 1
+6685 1694 1
+6686 1694 -1
+9270 1694 38
+1599 1695 -1
+1958 1695 1
+2367 1695 -1
+2623 1695 1
+3711 1695 -1
+3899 1695 1
+5079 1695 -1
+5087 1695 1
+6686 1695 1
+6687 1695 -1
+9271 1695 38
+1600 1696 -1
+1959 1696 1
+2368 1696 -1
+2624 1696 1
+3712 1696 -1
+3900 1696 1
+5080 1696 -1
+5088 1696 1
+6687 1696 1
+6688 1696 -1
+9272 1696 38
+1601 1697 -1
+1968 1697 1
+2369 1697 -1
+2625 1697 1
+3713 1697 -1
+3909 1697 1
+5081 1697 -1
+5089 1697 1
+6689 1697 -1
+6696 1697 1
+9273 1697 38
+1602 1698 -1
+1961 1698 1
+2370 1698 -1
+2626 1698 1
+3714 1698 -1
+3910 1698 1
+5082 1698 -1
+5090 1698 1
+6689 1698 1
+6690 1698 -1
+9274 1698 38
+1603 1699 -1
+1962 1699 1
+2371 1699 -1
+2627 1699 1
+3715 1699 -1
+3911 1699 1
+5083 1699 -1
+5091 1699 1
+6690 1699 1
+6691 1699 -1
+9275 1699 38
+1604 1700 -1
+1963 1700 1
+2372 1700 -1
+2628 1700 1
+3716 1700 -1
+3912 1700 1
+5084 1700 -1
+5092 1700 1
+6691 1700 1
+6692 1700 -1
+9276 1700 38
+1605 1701 -1
+1964 1701 1
+2373 1701 -1
+2629 1701 1
+3717 1701 -1
+3905 1701 1
+5085 1701 -1
+5093 1701 1
+6692 1701 1
+6693 1701 -1
+9277 1701 38
+1606 1702 -1
+1965 1702 1
+2374 1702 -1
+2630 1702 1
+3718 1702 -1
+3906 1702 1
+5086 1702 -1
+5094 1702 1
+6693 1702 1
+6694 1702 -1
+9278 1702 38
+1607 1703 -1
+1966 1703 1
+2375 1703 -1
+2631 1703 1
+3719 1703 -1
+3907 1703 1
+5087 1703 -1
+5095 1703 1
+6694 1703 1
+6695 1703 -1
+9279 1703 38
+1608 1704 -1
+1967 1704 1
+2376 1704 -1
+2632 1704 1
+3720 1704 -1
+3908 1704 1
+5088 1704 -1
+5096 1704 1
+6695 1704 1
+6696 1704 -1
+9280 1704 38
+1609 1705 -1
+1976 1705 1
+2377 1705 -1
+2633 1705 1
+3721 1705 -1
+3917 1705 1
+5089 1705 -1
+5097 1705 1
+6697 1705 -1
+6704 1705 1
+9281 1705 38
+1610 1706 -1
+1969 1706 1
+2378 1706 -1
+2634 1706 1
+3722 1706 -1
+3918 1706 1
+5090 1706 -1
+5098 1706 1
+6697 1706 1
+6698 1706 -1
+9282 1706 38
+1611 1707 -1
+1970 1707 1
+2379 1707 -1
+2635 1707 1
+3723 1707 -1
+3919 1707 1
+5091 1707 -1
+5099 1707 1
+6698 1707 1
+6699 1707 -1
+9283 1707 38
+1612 1708 -1
+1971 1708 1
+2380 1708 -1
+2636 1708 1
+3724 1708 -1
+3920 1708 1
+5092 1708 -1
+5100 1708 1
+6699 1708 1
+6700 1708 -1
+9284 1708 38
+1613 1709 -1
+1972 1709 1
+2381 1709 -1
+2637 1709 1
+3725 1709 -1
+3913 1709 1
+5093 1709 -1
+5101 1709 1
+6700 1709 1
+6701 1709 -1
+9285 1709 38
+1614 1710 -1
+1973 1710 1
+2382 1710 -1
+2638 1710 1
+3726 1710 -1
+3914 1710 1
+5094 1710 -1
+5102 1710 1
+6701 1710 1
+6702 1710 -1
+9286 1710 38
+1615 1711 -1
+1974 1711 1
+2383 1711 -1
+2639 1711 1
+3727 1711 -1
+3915 1711 1
+5095 1711 -1
+5103 1711 1
+6702 1711 1
+6703 1711 -1
+9287 1711 38
+1616 1712 -1
+1975 1712 1
+2384 1712 -1
+2640 1712 1
+3728 1712 -1
+3916 1712 1
+5096 1712 -1
+5104 1712 1
+6703 1712 1
+6704 1712 -1
+9288 1712 38
+1617 1713 -1
+1984 1713 1
+2385 1713 -1
+2641 1713 1
+3729 1713 -1
+3925 1713 1
+5097 1713 -1
+5105 1713 1
+6705 1713 -1
+6712 1713 1
+9289 1713 38
+1618 1714 -1
+1977 1714 1
+2386 1714 -1
+2642 1714 1
+3730 1714 -1
+3926 1714 1
+5098 1714 -1
+5106 1714 1
+6705 1714 1
+6706 1714 -1
+9290 1714 38
+1619 1715 -1
+1978 1715 1
+2387 1715 -1
+2643 1715 1
+3731 1715 -1
+3927 1715 1
+5099 1715 -1
+5107 1715 1
+6706 1715 1
+6707 1715 -1
+9291 1715 38
+1620 1716 -1
+1979 1716 1
+2388 1716 -1
+2644 1716 1
+3732 1716 -1
+3928 1716 1
+5100 1716 -1
+5108 1716 1
+6707 1716 1
+6708 1716 -1
+9292 1716 38
+1621 1717 -1
+1980 1717 1
+2389 1717 -1
+2645 1717 1
+3733 1717 -1
+3921 1717 1
+5101 1717 -1
+5109 1717 1
+6708 1717 1
+6709 1717 -1
+9293 1717 38
+1622 1718 -1
+1981 1718 1
+2390 1718 -1
+2646 1718 1
+3734 1718 -1
+3922 1718 1
+5102 1718 -1
+5110 1718 1
+6709 1718 1
+6710 1718 -1
+9294 1718 38
+1623 1719 -1
+1982 1719 1
+2391 1719 -1
+2647 1719 1
+3735 1719 -1
+3923 1719 1
+5103 1719 -1
+5111 1719 1
+6710 1719 1
+6711 1719 -1
+9295 1719 38
+1624 1720 -1
+1983 1720 1
+2392 1720 -1
+2648 1720 1
+3736 1720 -1
+3924 1720 1
+5104 1720 -1
+5112 1720 1
+6711 1720 1
+6712 1720 -1
+9296 1720 38
+1625 1721 -1
+1992 1721 1
+2393 1721 -1
+2649 1721 1
+3737 1721 -1
+3933 1721 1
+5105 1721 -1
+5113 1721 1
+6713 1721 -1
+6720 1721 1
+9297 1721 38
+1626 1722 -1
+1985 1722 1
+2394 1722 -1
+2650 1722 1
+3738 1722 -1
+3934 1722 1
+5106 1722 -1
+5114 1722 1
+6713 1722 1
+6714 1722 -1
+9298 1722 38
+1627 1723 -1
+1986 1723 1
+2395 1723 -1
+2651 1723 1
+3739 1723 -1
+3935 1723 1
+5107 1723 -1
+5115 1723 1
+6714 1723 1
+6715 1723 -1
+9299 1723 38
+1628 1724 -1
+1987 1724 1
+2396 1724 -1
+2652 1724 1
+3740 1724 -1
+3936 1724 1
+5108 1724 -1
+5116 1724 1
+6715 1724 1
+6716 1724 -1
+9300 1724 38
+1629 1725 -1
+1988 1725 1
+2397 1725 -1
+2653 1725 1
+3741 1725 -1
+3929 1725 1
+5109 1725 -1
+5117 1725 1
+6716 1725 1
+6717 1725 -1
+9301 1725 38
+1630 1726 -1
+1989 1726 1
+2398 1726 -1
+2654 1726 1
+3742 1726 -1
+3930 1726 1
+5110 1726 -1
+5118 1726 1
+6717 1726 1
+6718 1726 -1
+9302 1726 38
+1631 1727 -1
+1990 1727 1
+2399 1727 -1
+2655 1727 1
+3743 1727 -1
+3931 1727 1
+5111 1727 -1
+5119 1727 1
+6718 1727 1
+6719 1727 -1
+9303 1727 38
+1632 1728 -1
+1991 1728 1
+2400 1728 -1
+2656 1728 1
+3744 1728 -1
+3932 1728 1
+5112 1728 -1
+5120 1728 1
+6719 1728 1
+6720 1728 -1
+9304 1728 38
+1633 1729 -1
+2000 1729 1
+2401 1729 -1
+2657 1729 1
+3745 1729 -1
+3809 1729 1
+5113 1729 -1
+5121 1729 1
+6721 1729 -1
+6728 1729 1
+9305 1729 38
+1634 1730 -1
+1993 1730 1
+2402 1730 -1
+2658 1730 1
+3746 1730 -1
+3810 1730 1
+5114 1730 -1
+5122 1730 1
+6721 1730 1
+6722 1730 -1
+9306 1730 38
+1635 1731 -1
+1994 1731 1
+2403 1731 -1
+2659 1731 1
+3747 1731 -1
+3811 1731 1
+5115 1731 -1
+5123 1731 1
+6722 1731 1
+6723 1731 -1
+9307 1731 38
+1636 1732 -1
+1995 1732 1
+2404 1732 -1
+2660 1732 1
+3748 1732 -1
+3812 1732 1
+5116 1732 -1
+5124 1732 1
+6723 1732 1
+6724 1732 -1
+9308 1732 38
+1637 1733 -1
+1996 1733 1
+2405 1733 -1
+2661 1733 1
+3749 1733 -1
+3813 1733 1
+5117 1733 -1
+5125 1733 1
+6724 1733 1
+6725 1733 -1
+9309 1733 38
+1638 1734 -1
+1997 1734 1
+2406 1734 -1
+2662 1734 1
+3750 1734 -1
+3814 1734 1
+5118 1734 -1
+5126 1734 1
+6725 1734 1
+6726 1734 -1
+9310 1734 38
+1639 1735 -1
+1998 1735 1
+2407 1735 -1
+2663 1735 1
+3751 1735 -1
+3815 1735 1
+5119 1735 -1
+5127 1735 1
+6726 1735 1
+6727 1735 -1
+9311 1735 38
+1640 1736 -1
+1999 1736 1
+2408 1736 -1
+2664 1736 1
+3752 1736 -1
+3816 1736 1
+5120 1736 -1
+5128 1736 1
+6727 1736 1
+6728 1736 -1
+9312 1736 38
+1641 1737 -1
+2008 1737 1
+2409 1737 -1
+2665 1737 1
+3753 1737 -1
+3817 1737 1
+5121 1737 -1
+5129 1737 1
+6729 1737 -1
+6736 1737 1
+9313 1737 38
+1642 1738 -1
+2001 1738 1
+2410 1738 -1
+2666 1738 1
+3754 1738 -1
+3818 1738 1
+5122 1738 -1
+5130 1738 1
+6729 1738 1
+6730 1738 -1
+9314 1738 38
+1643 1739 -1
+2002 1739 1
+2411 1739 -1
+2667 1739 1
+3755 1739 -1
+3819 1739 1
+5123 1739 -1
+5131 1739 1
+6730 1739 1
+6731 1739 -1
+9315 1739 38
+1644 1740 -1
+2003 1740 1
+2412 1740 -1
+2668 1740 1
+3756 1740 -1
+3820 1740 1
+5124 1740 -1
+5132 1740 1
+6731 1740 1
+6732 1740 -1
+9316 1740 38
+1645 1741 -1
+2004 1741 1
+2413 1741 -1
+2669 1741 1
+3757 1741 -1
+3821 1741 1
+5125 1741 -1
+5133 1741 1
+6732 1741 1
+6733 1741 -1
+9317 1741 38
+1646 1742 -1
+2005 1742 1
+2414 1742 -1
+2670 1742 1
+3758 1742 -1
+3822 1742 1
+5126 1742 -1
+5134 1742 1
+6733 1742 1
+6734 1742 -1
+9318 1742 38
+1647 1743 -1
+2006 1743 1
+2415 1743 -1
+2671 1743 1
+3759 1743 -1
+3823 1743 1
+5127 1743 -1
+5135 1743 1
+6734 1743 1
+6735 1743 -1
+9319 1743 38
+1648 1744 -1
+2007 1744 1
+2416 1744 -1
+2672 1744 1
+3760 1744 -1
+3824 1744 1
+5128 1744 -1
+5136 1744 1
+6735 1744 1
+6736 1744 -1
+9320 1744 38
+1649 1745 -1
+2016 1745 1
+2417 1745 -1
+2673 1745 1
+3761 1745 -1
+3825 1745 1
+5129 1745 -1
+5137 1745 1
+6737 1745 -1
+6744 1745 1
+9321 1745 38
+1650 1746 -1
+2009 1746 1
+2418 1746 -1
+2674 1746 1
+3762 1746 -1
+3826 1746 1
+5130 1746 -1
+5138 1746 1
+6737 1746 1
+6738 1746 -1
+9322 1746 38
+1651 1747 -1
+2010 1747 1
+2419 1747 -1
+2675 1747 1
+3763 1747 -1
+3827 1747 1
+5131 1747 -1
+5139 1747 1
+6738 1747 1
+6739 1747 -1
+9323 1747 38
+1652 1748 -1
+2011 1748 1
+2420 1748 -1
+2676 1748 1
+3764 1748 -1
+3828 1748 1
+5132 1748 -1
+5140 1748 1
+6739 1748 1
+6740 1748 -1
+9324 1748 38
+1653 1749 -1
+2012 1749 1
+2421 1749 -1
+2677 1749 1
+3765 1749 -1
+3829 1749 1
+5133 1749 -1
+5141 1749 1
+6740 1749 1
+6741 1749 -1
+9325 1749 38
+1654 1750 -1
+2013 1750 1
+2422 1750 -1
+2678 1750 1
+3766 1750 -1
+3830 1750 1
+5134 1750 -1
+5142 1750 1
+6741 1750 1
+6742 1750 -1
+9326 1750 38
+1655 1751 -1
+2014 1751 1
+2423 1751 -1
+2679 1751 1
+3767 1751 -1
+3831 1751 1
+5135 1751 -1
+5143 1751 1
+6742 1751 1
+6743 1751 -1
+9327 1751 38
+1656 1752 -1
+2015 1752 1
+2424 1752 -1
+2680 1752 1
+3768 1752 -1
+3832 1752 1
+5136 1752 -1
+5144 1752 1
+6743 1752 1
+6744 1752 -1
+9328 1752 38
+1657 1753 -1
+2024 1753 1
+2425 1753 -1
+2681 1753 1
+3769 1753 -1
+3833 1753 1
+5137 1753 -1
+5145 1753 1
+6745 1753 -1
+6752 1753 1
+9329 1753 38
+1658 1754 -1
+2017 1754 1
+2426 1754 -1
+2682 1754 1
+3770 1754 -1
+3834 1754 1
+5138 1754 -1
+5146 1754 1
+6745 1754 1
+6746 1754 -1
+9330 1754 38
+1659 1755 -1
+2018 1755 1
+2427 1755 -1
+2683 1755 1
+3771 1755 -1
+3835 1755 1
+5139 1755 -1
+5147 1755 1
+6746 1755 1
+6747 1755 -1
+9331 1755 38
+1660 1756 -1
+2019 1756 1
+2428 1756 -1
+2684 1756 1
+3772 1756 -1
+3836 1756 1
+5140 1756 -1
+5148 1756 1
+6747 1756 1
+6748 1756 -1
+9332 1756 38
+1661 1757 -1
+2020 1757 1
+2429 1757 -1
+2685 1757 1
+3773 1757 -1
+3837 1757 1
+5141 1757 -1
+5149 1757 1
+6748 1757 1
+6749 1757 -1
+9333 1757 38
+1662 1758 -1
+2021 1758 1
+2430 1758 -1
+2686 1758 1
+3774 1758 -1
+3838 1758 1
+5142 1758 -1
+5150 1758 1
+6749 1758 1
+6750 1758 -1
+9334 1758 38
+1663 1759 -1
+2022 1759 1
+2431 1759 -1
+2687 1759 1
+3775 1759 -1
+3839 1759 1
+5143 1759 -1
+5151 1759 1
+6750 1759 1
+6751 1759 -1
+9335 1759 38
+1664 1760 -1
+2023 1760 1
+2432 1760 -1
+2688 1760 1
+3776 1760 -1
+3840 1760 1
+5144 1760 -1
+5152 1760 1
+6751 1760 1
+6752 1760 -1
+9336 1760 38
+1665 1761 -1
+2032 1761 1
+2433 1761 -1
+2689 1761 1
+3777 1761 -1
+3841 1761 1
+5145 1761 -1
+5153 1761 1
+6753 1761 -1
+6760 1761 1
+9337 1761 38
+1666 1762 -1
+2025 1762 1
+2434 1762 -1
+2690 1762 1
+3778 1762 -1
+3842 1762 1
+5146 1762 -1
+5154 1762 1
+6753 1762 1
+6754 1762 -1
+9338 1762 38
+1667 1763 -1
+2026 1763 1
+2435 1763 -1
+2691 1763 1
+3779 1763 -1
+3843 1763 1
+5147 1763 -1
+5155 1763 1
+6754 1763 1
+6755 1763 -1
+9339 1763 38
+1668 1764 -1
+2027 1764 1
+2436 1764 -1
+2692 1764 1
+3780 1764 -1
+3844 1764 1
+5148 1764 -1
+5156 1764 1
+6755 1764 1
+6756 1764 -1
+9340 1764 38
+1669 1765 -1
+2028 1765 1
+2437 1765 -1
+2693 1765 1
+3781 1765 -1
+3845 1765 1
+5149 1765 -1
+5157 1765 1
+6756 1765 1
+6757 1765 -1
+9341 1765 38
+1670 1766 -1
+2029 1766 1
+2438 1766 -1
+2694 1766 1
+3782 1766 -1
+3846 1766 1
+5150 1766 -1
+5158 1766 1
+6757 1766 1
+6758 1766 -1
+9342 1766 38
+1671 1767 -1
+2030 1767 1
+2439 1767 -1
+2695 1767 1
+3783 1767 -1
+3847 1767 1
+5151 1767 -1
+5159 1767 1
+6758 1767 1
+6759 1767 -1
+9343 1767 38
+1672 1768 -1
+2031 1768 1
+2440 1768 -1
+2696 1768 1
+3784 1768 -1
+3848 1768 1
+5152 1768 -1
+5160 1768 1
+6759 1768 1
+6760 1768 -1
+9344 1768 38
+1673 1769 -1
+2040 1769 1
+2441 1769 -1
+2697 1769 1
+3785 1769 -1
+3849 1769 1
+5153 1769 -1
+5161 1769 1
+6761 1769 -1
+6768 1769 1
+9345 1769 38
+1674 1770 -1
+2033 1770 1
+2442 1770 -1
+2698 1770 1
+3786 1770 -1
+3850 1770 1
+5154 1770 -1
+5162 1770 1
+6761 1770 1
+6762 1770 -1
+9346 1770 38
+1675 1771 -1
+2034 1771 1
+2443 1771 -1
+2699 1771 1
+3787 1771 -1
+3851 1771 1
+5155 1771 -1
+5163 1771 1
+6762 1771 1
+6763 1771 -1
+9347 1771 38
+1676 1772 -1
+2035 1772 1
+2444 1772 -1
+2700 1772 1
+3788 1772 -1
+3852 1772 1
+5156 1772 -1
+5164 1772 1
+6763 1772 1
+6764 1772 -1
+9348 1772 38
+1677 1773 -1
+2036 1773 1
+2445 1773 -1
+2701 1773 1
+3789 1773 -1
+3853 1773 1
+5157 1773 -1
+5165 1773 1
+6764 1773 1
+6765 1773 -1
+9349 1773 38
+1678 1774 -1
+2037 1774 1
+2446 1774 -1
+2702 1774 1
+3790 1774 -1
+3854 1774 1
+5158 1774 -1
+5166 1774 1
+6765 1774 1
+6766 1774 -1
+9350 1774 38
+1679 1775 -1
+2038 1775 1
+2447 1775 -1
+2703 1775 1
+3791 1775 -1
+3855 1775 1
+5159 1775 -1
+5167 1775 1
+6766 1775 1
+6767 1775 -1
+9351 1775 38
+1680 1776 -1
+2039 1776 1
+2448 1776 -1
+2704 1776 1
+3792 1776 -1
+3856 1776 1
+5160 1776 -1
+5168 1776 1
+6767 1776 1
+6768 1776 -1
+9352 1776 38
+1681 1777 -1
+2048 1777 1
+2449 1777 -1
+2705 1777 1
+3793 1777 -1
+3857 1777 1
+5161 1777 -1
+5169 1777 1
+6769 1777 -1
+6776 1777 1
+9353 1777 38
+1682 1778 -1
+2041 1778 1
+2450 1778 -1
+2706 1778 1
+3794 1778 -1
+3858 1778 1
+5162 1778 -1
+5170 1778 1
+6769 1778 1
+6770 1778 -1
+9354 1778 38
+1683 1779 -1
+2042 1779 1
+2451 1779 -1
+2707 1779 1
+3795 1779 -1
+3859 1779 1
+5163 1779 -1
+5171 1779 1
+6770 1779 1
+6771 1779 -1
+9355 1779 38
+1684 1780 -1
+2043 1780 1
+2452 1780 -1
+2708 1780 1
+3796 1780 -1
+3860 1780 1
+5164 1780 -1
+5172 1780 1
+6771 1780 1
+6772 1780 -1
+9356 1780 38
+1685 1781 -1
+2044 1781 1
+2453 1781 -1
+2709 1781 1
+3797 1781 -1
+3861 1781 1
+5165 1781 -1
+5173 1781 1
+6772 1781 1
+6773 1781 -1
+9357 1781 38
+1686 1782 -1
+2045 1782 1
+2454 1782 -1
+2710 1782 1
+3798 1782 -1
+3862 1782 1
+5166 1782 -1
+5174 1782 1
+6773 1782 1
+6774 1782 -1
+9358 1782 38
+1687 1783 -1
+2046 1783 1
+2455 1783 -1
+2711 1783 1
+3799 1783 -1
+3863 1783 1
+5167 1783 -1
+5175 1783 1
+6774 1783 1
+6775 1783 -1
+9359 1783 38
+1688 1784 -1
+2047 1784 1
+2456 1784 -1
+2712 1784 1
+3800 1784 -1
+3864 1784 1
+5168 1784 -1
+5176 1784 1
+6775 1784 1
+6776 1784 -1
+9360 1784 38
+1689 1785 -1
+2056 1785 1
+2457 1785 -1
+2713 1785 1
+3801 1785 -1
+3865 1785 1
+5169 1785 -1
+5177 1785 1
+6777 1785 -1
+6784 1785 1
+9361 1785 38
+1690 1786 -1
+2049 1786 1
+2458 1786 -1
+2714 1786 1
+3802 1786 -1
+3866 1786 1
+5170 1786 -1
+5178 1786 1
+6777 1786 1
+6778 1786 -1
+9362 1786 38
+1691 1787 -1
+2050 1787 1
+2459 1787 -1
+2715 1787 1
+3803 1787 -1
+3867 1787 1
+5171 1787 -1
+5179 1787 1
+6778 1787 1
+6779 1787 -1
+9363 1787 38
+1692 1788 -1
+2051 1788 1
+2460 1788 -1
+2716 1788 1
+3804 1788 -1
+3868 1788 1
+5172 1788 -1
+5180 1788 1
+6779 1788 1
+6780 1788 -1
+9364 1788 38
+1693 1789 -1
+2052 1789 1
+2461 1789 -1
+2717 1789 1
+3805 1789 -1
+3869 1789 1
+5173 1789 -1
+5181 1789 1
+6780 1789 1
+6781 1789 -1
+9365 1789 38
+1694 1790 -1
+2053 1790 1
+2462 1790 -1
+2718 1790 1
+3806 1790 -1
+3870 1790 1
+5174 1790 -1
+5182 1790 1
+6781 1790 1
+6782 1790 -1
+9366 1790 38
+1695 1791 -1
+2054 1791 1
+2463 1791 -1
+2719 1791 1
+3807 1791 -1
+3871 1791 1
+5175 1791 -1
+5183 1791 1
+6782 1791 1
+6783 1791 -1
+9367 1791 38
+1696 1792 -1
+2055 1792 1
+2464 1792 -1
+2720 1792 1
+3808 1792 -1
+3872 1792 1
+5176 1792 -1
+5184 1792 1
+6783 1792 1
+6784 1792 -1
+9368 1792 38
+1697 1793 -1
+1872 1793 1
+2465 1793 -1
+2721 1793 1
+3681 1793 1
+3809 1793 -1
+5185 1793 1
+5309 1793 -1
+6785 1793 -1
+6792 1793 1
+9369 1793 38
+1698 1794 -1
+1865 1794 1
+2466 1794 -1
+2722 1794 1
+3682 1794 1
+3810 1794 -1
+5186 1794 1
+5310 1794 -1
+6785 1794 1
+6786 1794 -1
+9370 1794 38
+1699 1795 -1
+1866 1795 1
+2467 1795 -1
+2723 1795 1
+3683 1795 1
+3811 1795 -1
+5187 1795 1
+5311 1795 -1
+6786 1795 1
+6787 1795 -1
+9371 1795 38
+1700 1796 -1
+1867 1796 1
+2468 1796 -1
+2724 1796 1
+3684 1796 1
+3812 1796 -1
+5188 1796 1
+5312 1796 -1
+6787 1796 1
+6788 1796 -1
+9372 1796 38
+1701 1797 -1
+1868 1797 1
+2469 1797 -1
+2725 1797 1
+3685 1797 1
+3813 1797 -1
+5189 1797 1
+5305 1797 -1
+6788 1797 1
+6789 1797 -1
+9373 1797 38
+1702 1798 -1
+1869 1798 1
+2470 1798 -1
+2726 1798 1
+3686 1798 1
+3814 1798 -1
+5190 1798 1
+5306 1798 -1
+6789 1798 1
+6790 1798 -1
+9374 1798 38
+1703 1799 -1
+1870 1799 1
+2471 1799 -1
+2727 1799 1
+3687 1799 1
+3815 1799 -1
+5191 1799 1
+5307 1799 -1
+6790 1799 1
+6791 1799 -1
+9375 1799 38
+1704 1800 -1
+1871 1800 1
+2472 1800 -1
+2728 1800 1
+3688 1800 1
+3816 1800 -1
+5192 1800 1
+5308 1800 -1
+6791 1800 1
+6792 1800 -1
+9376 1800 38
+1705 1801 -1
+1880 1801 1
+2473 1801 -1
+2729 1801 1
+3689 1801 1
+3817 1801 -1
+5185 1801 -1
+5193 1801 1
+6793 1801 -1
+6800 1801 1
+9377 1801 38
+1706 1802 -1
+1873 1802 1
+2474 1802 -1
+2730 1802 1
+3690 1802 1
+3818 1802 -1
+5186 1802 -1
+5194 1802 1
+6793 1802 1
+6794 1802 -1
+9378 1802 38
+1707 1803 -1
+1874 1803 1
+2475 1803 -1
+2731 1803 1
+3691 1803 1
+3819 1803 -1
+5187 1803 -1
+5195 1803 1
+6794 1803 1
+6795 1803 -1
+9379 1803 38
+1708 1804 -1
+1875 1804 1
+2476 1804 -1
+2732 1804 1
+3692 1804 1
+3820 1804 -1
+5188 1804 -1
+5196 1804 1
+6795 1804 1
+6796 1804 -1
+9380 1804 38
+1709 1805 -1
+1876 1805 1
+2477 1805 -1
+2733 1805 1
+3693 1805 1
+3821 1805 -1
+5189 1805 -1
+5197 1805 1
+6796 1805 1
+6797 1805 -1
+9381 1805 38
+1710 1806 -1
+1877 1806 1
+2478 1806 -1
+2734 1806 1
+3694 1806 1
+3822 1806 -1
+5190 1806 -1
+5198 1806 1
+6797 1806 1
+6798 1806 -1
+9382 1806 38
+1711 1807 -1
+1878 1807 1
+2479 1807 -1
+2735 1807 1
+3695 1807 1
+3823 1807 -1
+5191 1807 -1
+5199 1807 1
+6798 1807 1
+6799 1807 -1
+9383 1807 38
+1712 1808 -1
+1879 1808 1
+2480 1808 -1
+2736 1808 1
+3696 1808 1
+3824 1808 -1
+5192 1808 -1
+5200 1808 1
+6799 1808 1
+6800 1808 -1
+9384 1808 38
+1713 1809 -1
+1888 1809 1
+2481 1809 -1
+2737 1809 1
+3697 1809 1
+3825 1809 -1
+5193 1809 -1
+5201 1809 1
+6801 1809 -1
+6808 1809 1
+9385 1809 38
+1714 1810 -1
+1881 1810 1
+2482 1810 -1
+2738 1810 1
+3698 1810 1
+3826 1810 -1
+5194 1810 -1
+5202 1810 1
+6801 1810 1
+6802 1810 -1
+9386 1810 38
+1715 1811 -1
+1882 1811 1
+2483 1811 -1
+2739 1811 1
+3699 1811 1
+3827 1811 -1
+5195 1811 -1
+5203 1811 1
+6802 1811 1
+6803 1811 -1
+9387 1811 38
+1716 1812 -1
+1883 1812 1
+2484 1812 -1
+2740 1812 1
+3700 1812 1
+3828 1812 -1
+5196 1812 -1
+5204 1812 1
+6803 1812 1
+6804 1812 -1
+9388 1812 38
+1717 1813 -1
+1884 1813 1
+2485 1813 -1
+2741 1813 1
+3701 1813 1
+3829 1813 -1
+5197 1813 -1
+5205 1813 1
+6804 1813 1
+6805 1813 -1
+9389 1813 38
+1718 1814 -1
+1885 1814 1
+2486 1814 -1
+2742 1814 1
+3702 1814 1
+3830 1814 -1
+5198 1814 -1
+5206 1814 1
+6805 1814 1
+6806 1814 -1
+9390 1814 38
+1719 1815 -1
+1886 1815 1
+2487 1815 -1
+2743 1815 1
+3703 1815 1
+3831 1815 -1
+5199 1815 -1
+5207 1815 1
+6806 1815 1
+6807 1815 -1
+9391 1815 38
+1720 1816 -1
+1887 1816 1
+2488 1816 -1
+2744 1816 1
+3704 1816 1
+3832 1816 -1
+5200 1816 -1
+5208 1816 1
+6807 1816 1
+6808 1816 -1
+9392 1816 38
+1721 1817 -1
+1896 1817 1
+2489 1817 -1
+2745 1817 1
+3705 1817 1
+3833 1817 -1
+5201 1817 -1
+5209 1817 1
+6809 1817 -1
+6816 1817 1
+9393 1817 38
+1722 1818 -1
+1889 1818 1
+2490 1818 -1
+2746 1818 1
+3706 1818 1
+3834 1818 -1
+5202 1818 -1
+5210 1818 1
+6809 1818 1
+6810 1818 -1
+9394 1818 38
+1723 1819 -1
+1890 1819 1
+2491 1819 -1
+2747 1819 1
+3707 1819 1
+3835 1819 -1
+5203 1819 -1
+5211 1819 1
+6810 1819 1
+6811 1819 -1
+9395 1819 38
+1724 1820 -1
+1891 1820 1
+2492 1820 -1
+2748 1820 1
+3708 1820 1
+3836 1820 -1
+5204 1820 -1
+5212 1820 1
+6811 1820 1
+6812 1820 -1
+9396 1820 38
+1725 1821 -1
+1892 1821 1
+2493 1821 -1
+2749 1821 1
+3709 1821 1
+3837 1821 -1
+5205 1821 -1
+5213 1821 1
+6812 1821 1
+6813 1821 -1
+9397 1821 38
+1726 1822 -1
+1893 1822 1
+2494 1822 -1
+2750 1822 1
+3710 1822 1
+3838 1822 -1
+5206 1822 -1
+5214 1822 1
+6813 1822 1
+6814 1822 -1
+9398 1822 38
+1727 1823 -1
+1894 1823 1
+2495 1823 -1
+2751 1823 1
+3711 1823 1
+3839 1823 -1
+5207 1823 -1
+5215 1823 1
+6814 1823 1
+6815 1823 -1
+9399 1823 38
+1728 1824 -1
+1895 1824 1
+2496 1824 -1
+2752 1824 1
+3712 1824 1
+3840 1824 -1
+5208 1824 -1
+5216 1824 1
+6815 1824 1
+6816 1824 -1
+9400 1824 38
+1729 1825 -1
+1904 1825 1
+2497 1825 -1
+2753 1825 1
+3713 1825 1
+3841 1825 -1
+5209 1825 -1
+5217 1825 1
+6817 1825 -1
+6824 1825 1
+9401 1825 38
+1730 1826 -1
+1897 1826 1
+2498 1826 -1
+2754 1826 1
+3714 1826 1
+3842 1826 -1
+5210 1826 -1
+5218 1826 1
+6817 1826 1
+6818 1826 -1
+9402 1826 38
+1731 1827 -1
+1898 1827 1
+2499 1827 -1
+2755 1827 1
+3715 1827 1
+3843 1827 -1
+5211 1827 -1
+5219 1827 1
+6818 1827 1
+6819 1827 -1
+9403 1827 38
+1732 1828 -1
+1899 1828 1
+2500 1828 -1
+2756 1828 1
+3716 1828 1
+3844 1828 -1
+5212 1828 -1
+5220 1828 1
+6819 1828 1
+6820 1828 -1
+9404 1828 38
+1733 1829 -1
+1900 1829 1
+2501 1829 -1
+2757 1829 1
+3717 1829 1
+3845 1829 -1
+5213 1829 -1
+5221 1829 1
+6820 1829 1
+6821 1829 -1
+9405 1829 38
+1734 1830 -1
+1901 1830 1
+2502 1830 -1
+2758 1830 1
+3718 1830 1
+3846 1830 -1
+5214 1830 -1
+5222 1830 1
+6821 1830 1
+6822 1830 -1
+9406 1830 38
+1735 1831 -1
+1902 1831 1
+2503 1831 -1
+2759 1831 1
+3719 1831 1
+3847 1831 -1
+5215 1831 -1
+5223 1831 1
+6822 1831 1
+6823 1831 -1
+9407 1831 38
+1736 1832 -1
+1903 1832 1
+2504 1832 -1
+2760 1832 1
+3720 1832 1
+3848 1832 -1
+5216 1832 -1
+5224 1832 1
+6823 1832 1
+6824 1832 -1
+9408 1832 38
+1737 1833 -1
+1912 1833 1
+2505 1833 -1
+2761 1833 1
+3721 1833 1
+3849 1833 -1
+5217 1833 -1
+5225 1833 1
+6825 1833 -1
+6832 1833 1
+9409 1833 38
+1738 1834 -1
+1905 1834 1
+2506 1834 -1
+2762 1834 1
+3722 1834 1
+3850 1834 -1
+5218 1834 -1
+5226 1834 1
+6825 1834 1
+6826 1834 -1
+9410 1834 38
+1739 1835 -1
+1906 1835 1
+2507 1835 -1
+2763 1835 1
+3723 1835 1
+3851 1835 -1
+5219 1835 -1
+5227 1835 1
+6826 1835 1
+6827 1835 -1
+9411 1835 38
+1740 1836 -1
+1907 1836 1
+2508 1836 -1
+2764 1836 1
+3724 1836 1
+3852 1836 -1
+5220 1836 -1
+5228 1836 1
+6827 1836 1
+6828 1836 -1
+9412 1836 38
+1741 1837 -1
+1908 1837 1
+2509 1837 -1
+2765 1837 1
+3725 1837 1
+3853 1837 -1
+5221 1837 -1
+5229 1837 1
+6828 1837 1
+6829 1837 -1
+9413 1837 38
+1742 1838 -1
+1909 1838 1
+2510 1838 -1
+2766 1838 1
+3726 1838 1
+3854 1838 -1
+5222 1838 -1
+5230 1838 1
+6829 1838 1
+6830 1838 -1
+9414 1838 38
+1743 1839 -1
+1910 1839 1
+2511 1839 -1
+2767 1839 1
+3727 1839 1
+3855 1839 -1
+5223 1839 -1
+5231 1839 1
+6830 1839 1
+6831 1839 -1
+9415 1839 38
+1744 1840 -1
+1911 1840 1
+2512 1840 -1
+2768 1840 1
+3728 1840 1
+3856 1840 -1
+5224 1840 -1
+5232 1840 1
+6831 1840 1
+6832 1840 -1
+9416 1840 38
+1745 1841 -1
+1920 1841 1
+2513 1841 -1
+2769 1841 1
+3729 1841 1
+3857 1841 -1
+5225 1841 -1
+5233 1841 1
+6833 1841 -1
+6840 1841 1
+9417 1841 38
+1746 1842 -1
+1913 1842 1
+2514 1842 -1
+2770 1842 1
+3730 1842 1
+3858 1842 -1
+5226 1842 -1
+5234 1842 1
+6833 1842 1
+6834 1842 -1
+9418 1842 38
+1747 1843 -1
+1914 1843 1
+2515 1843 -1
+2771 1843 1
+3731 1843 1
+3859 1843 -1
+5227 1843 -1
+5235 1843 1
+6834 1843 1
+6835 1843 -1
+9419 1843 38
+1748 1844 -1
+1915 1844 1
+2516 1844 -1
+2772 1844 1
+3732 1844 1
+3860 1844 -1
+5228 1844 -1
+5236 1844 1
+6835 1844 1
+6836 1844 -1
+9420 1844 38
+1749 1845 -1
+1916 1845 1
+2517 1845 -1
+2773 1845 1
+3733 1845 1
+3861 1845 -1
+5229 1845 -1
+5237 1845 1
+6836 1845 1
+6837 1845 -1
+9421 1845 38
+1750 1846 -1
+1917 1846 1
+2518 1846 -1
+2774 1846 1
+3734 1846 1
+3862 1846 -1
+5230 1846 -1
+5238 1846 1
+6837 1846 1
+6838 1846 -1
+9422 1846 38
+1751 1847 -1
+1918 1847 1
+2519 1847 -1
+2775 1847 1
+3735 1847 1
+3863 1847 -1
+5231 1847 -1
+5239 1847 1
+6838 1847 1
+6839 1847 -1
+9423 1847 38
+1752 1848 -1
+1919 1848 1
+2520 1848 -1
+2776 1848 1
+3736 1848 1
+3864 1848 -1
+5232 1848 -1
+5240 1848 1
+6839 1848 1
+6840 1848 -1
+9424 1848 38
+1753 1849 -1
+1928 1849 1
+2521 1849 -1
+2777 1849 1
+3737 1849 1
+3865 1849 -1
+5233 1849 -1
+5241 1849 1
+6841 1849 -1
+6848 1849 1
+9425 1849 38
+1754 1850 -1
+1921 1850 1
+2522 1850 -1
+2778 1850 1
+3738 1850 1
+3866 1850 -1
+5234 1850 -1
+5242 1850 1
+6841 1850 1
+6842 1850 -1
+9426 1850 38
+1755 1851 -1
+1922 1851 1
+2523 1851 -1
+2779 1851 1
+3739 1851 1
+3867 1851 -1
+5235 1851 -1
+5243 1851 1
+6842 1851 1
+6843 1851 -1
+9427 1851 38
+1756 1852 -1
+1923 1852 1
+2524 1852 -1
+2780 1852 1
+3740 1852 1
+3868 1852 -1
+5236 1852 -1
+5244 1852 1
+6843 1852 1
+6844 1852 -1
+9428 1852 38
+1757 1853 -1
+1924 1853 1
+2525 1853 -1
+2781 1853 1
+3741 1853 1
+3869 1853 -1
+5237 1853 -1
+5245 1853 1
+6844 1853 1
+6845 1853 -1
+9429 1853 38
+1758 1854 -1
+1925 1854 1
+2526 1854 -1
+2782 1854 1
+3742 1854 1
+3870 1854 -1
+5238 1854 -1
+5246 1854 1
+6845 1854 1
+6846 1854 -1
+9430 1854 38
+1759 1855 -1
+1926 1855 1
+2527 1855 -1
+2783 1855 1
+3743 1855 1
+3871 1855 -1
+5239 1855 -1
+5247 1855 1
+6846 1855 1
+6847 1855 -1
+9431 1855 38
+1760 1856 -1
+1927 1856 1
+2528 1856 -1
+2784 1856 1
+3744 1856 1
+3872 1856 -1
+5240 1856 -1
+5248 1856 1
+6847 1856 1
+6848 1856 -1
+9432 1856 38
+1761 1857 -1
+1936 1857 1
+2529 1857 -1
+2785 1857 1
+3745 1857 1
+3873 1857 -1
+5241 1857 -1
+5249 1857 1
+6849 1857 -1
+6856 1857 1
+9433 1857 38
+1762 1858 -1
+1929 1858 1
+2530 1858 -1
+2786 1858 1
+3746 1858 1
+3874 1858 -1
+5242 1858 -1
+5250 1858 1
+6849 1858 1
+6850 1858 -1
+9434 1858 38
+1763 1859 -1
+1930 1859 1
+2531 1859 -1
+2787 1859 1
+3747 1859 1
+3875 1859 -1
+5243 1859 -1
+5251 1859 1
+6850 1859 1
+6851 1859 -1
+9435 1859 38
+1764 1860 -1
+1931 1860 1
+2532 1860 -1
+2788 1860 1
+3748 1860 1
+3876 1860 -1
+5244 1860 -1
+5252 1860 1
+6851 1860 1
+6852 1860 -1
+9436 1860 38
+1765 1861 -1
+1932 1861 1
+2533 1861 -1
+2789 1861 1
+3749 1861 1
+3877 1861 -1
+5245 1861 -1
+5253 1861 1
+6852 1861 1
+6853 1861 -1
+9437 1861 38
+1766 1862 -1
+1933 1862 1
+2534 1862 -1
+2790 1862 1
+3750 1862 1
+3878 1862 -1
+5246 1862 -1
+5254 1862 1
+6853 1862 1
+6854 1862 -1
+9438 1862 38
+1767 1863 -1
+1934 1863 1
+2535 1863 -1
+2791 1863 1
+3751 1863 1
+3879 1863 -1
+5247 1863 -1
+5255 1863 1
+6854 1863 1
+6855 1863 -1
+9439 1863 38
+1768 1864 -1
+1935 1864 1
+2536 1864 -1
+2792 1864 1
+3752 1864 1
+3880 1864 -1
+5248 1864 -1
+5256 1864 1
+6855 1864 1
+6856 1864 -1
+9440 1864 38
+1769 1865 -1
+1944 1865 1
+2537 1865 -1
+2793 1865 1
+3753 1865 1
+3881 1865 -1
+5249 1865 -1
+5257 1865 1
+6857 1865 -1
+6864 1865 1
+9441 1865 38
+1770 1866 -1
+1937 1866 1
+2538 1866 -1
+2794 1866 1
+3754 1866 1
+3882 1866 -1
+5250 1866 -1
+5258 1866 1
+6857 1866 1
+6858 1866 -1
+9442 1866 38
+1771 1867 -1
+1938 1867 1
+2539 1867 -1
+2795 1867 1
+3755 1867 1
+3883 1867 -1
+5251 1867 -1
+5259 1867 1
+6858 1867 1
+6859 1867 -1
+9443 1867 38
+1772 1868 -1
+1939 1868 1
+2540 1868 -1
+2796 1868 1
+3756 1868 1
+3884 1868 -1
+5252 1868 -1
+5260 1868 1
+6859 1868 1
+6860 1868 -1
+9444 1868 38
+1773 1869 -1
+1940 1869 1
+2541 1869 -1
+2797 1869 1
+3757 1869 1
+3885 1869 -1
+5253 1869 -1
+5261 1869 1
+6860 1869 1
+6861 1869 -1
+9445 1869 38
+1774 1870 -1
+1941 1870 1
+2542 1870 -1
+2798 1870 1
+3758 1870 1
+3886 1870 -1
+5254 1870 -1
+5262 1870 1
+6861 1870 1
+6862 1870 -1
+9446 1870 38
+1775 1871 -1
+1942 1871 1
+2543 1871 -1
+2799 1871 1
+3759 1871 1
+3887 1871 -1
+5255 1871 -1
+5263 1871 1
+6862 1871 1
+6863 1871 -1
+9447 1871 38
+1776 1872 -1
+1943 1872 1
+2544 1872 -1
+2800 1872 1
+3760 1872 1
+3888 1872 -1
+5256 1872 -1
+5264 1872 1
+6863 1872 1
+6864 1872 -1
+9448 1872 38
+1777 1873 -1
+1952 1873 1
+2545 1873 -1
+2801 1873 1
+3761 1873 1
+3889 1873 -1
+5257 1873 -1
+5265 1873 1
+6865 1873 -1
+6872 1873 1
+9449 1873 38
+1778 1874 -1
+1945 1874 1
+2546 1874 -1
+2802 1874 1
+3762 1874 1
+3890 1874 -1
+5258 1874 -1
+5266 1874 1
+6865 1874 1
+6866 1874 -1
+9450 1874 38
+1779 1875 -1
+1946 1875 1
+2547 1875 -1
+2803 1875 1
+3763 1875 1
+3891 1875 -1
+5259 1875 -1
+5267 1875 1
+6866 1875 1
+6867 1875 -1
+9451 1875 38
+1780 1876 -1
+1947 1876 1
+2548 1876 -1
+2804 1876 1
+3764 1876 1
+3892 1876 -1
+5260 1876 -1
+5268 1876 1
+6867 1876 1
+6868 1876 -1
+9452 1876 38
+1781 1877 -1
+1948 1877 1
+2549 1877 -1
+2805 1877 1
+3765 1877 1
+3893 1877 -1
+5261 1877 -1
+5269 1877 1
+6868 1877 1
+6869 1877 -1
+9453 1877 38
+1782 1878 -1
+1949 1878 1
+2550 1878 -1
+2806 1878 1
+3766 1878 1
+3894 1878 -1
+5262 1878 -1
+5270 1878 1
+6869 1878 1
+6870 1878 -1
+9454 1878 38
+1783 1879 -1
+1950 1879 1
+2551 1879 -1
+2807 1879 1
+3767 1879 1
+3895 1879 -1
+5263 1879 -1
+5271 1879 1
+6870 1879 1
+6871 1879 -1
+9455 1879 38
+1784 1880 -1
+1951 1880 1
+2552 1880 -1
+2808 1880 1
+3768 1880 1
+3896 1880 -1
+5264 1880 -1
+5272 1880 1
+6871 1880 1
+6872 1880 -1
+9456 1880 38
+1785 1881 -1
+1828 1881 1
+2553 1881 -1
+2809 1881 1
+3769 1881 1
+3897 1881 -1
+5265 1881 -1
+5273 1881 1
+6873 1881 -1
+6880 1881 1
+9457 1881 38
+1786 1882 -1
+1829 1882 1
+2554 1882 -1
+2810 1882 1
+3770 1882 1
+3898 1882 -1
+5266 1882 -1
+5274 1882 1
+6873 1882 1
+6874 1882 -1
+9458 1882 38
+1787 1883 -1
+1830 1883 1
+2555 1883 -1
+2811 1883 1
+3771 1883 1
+3899 1883 -1
+5267 1883 -1
+5275 1883 1
+6874 1883 1
+6875 1883 -1
+9459 1883 38
+1788 1884 -1
+1831 1884 1
+2556 1884 -1
+2812 1884 1
+3772 1884 1
+3900 1884 -1
+5268 1884 -1
+5276 1884 1
+6875 1884 1
+6876 1884 -1
+9460 1884 38
+1789 1885 -1
+1832 1885 1
+2557 1885 -1
+2813 1885 1
+3773 1885 1
+3901 1885 -1
+5269 1885 -1
+5277 1885 1
+6876 1885 1
+6877 1885 -1
+9461 1885 38
+1790 1886 -1
+1825 1886 1
+2558 1886 -1
+2814 1886 1
+3774 1886 1
+3902 1886 -1
+5270 1886 -1
+5278 1886 1
+6877 1886 1
+6878 1886 -1
+9462 1886 38
+1791 1887 -1
+1826 1887 1
+2559 1887 -1
+2815 1887 1
+3775 1887 1
+3903 1887 -1
+5271 1887 -1
+5279 1887 1
+6878 1887 1
+6879 1887 -1
+9463 1887 38
+1792 1888 -1
+1827 1888 1
+2560 1888 -1
+2816 1888 1
+3776 1888 1
+3904 1888 -1
+5272 1888 -1
+5280 1888 1
+6879 1888 1
+6880 1888 -1
+9464 1888 38
+1793 1889 -1
+1836 1889 1
+2561 1889 -1
+2817 1889 1
+3777 1889 1
+3905 1889 -1
+5273 1889 -1
+5281 1889 1
+6881 1889 -1
+6888 1889 1
+9465 1889 38
+1794 1890 -1
+1837 1890 1
+2562 1890 -1
+2818 1890 1
+3778 1890 1
+3906 1890 -1
+5274 1890 -1
+5282 1890 1
+6881 1890 1
+6882 1890 -1
+9466 1890 38
+1795 1891 -1
+1838 1891 1
+2563 1891 -1
+2819 1891 1
+3779 1891 1
+3907 1891 -1
+5275 1891 -1
+5283 1891 1
+6882 1891 1
+6883 1891 -1
+9467 1891 38
+1796 1892 -1
+1839 1892 1
+2564 1892 -1
+2820 1892 1
+3780 1892 1
+3908 1892 -1
+5276 1892 -1
+5284 1892 1
+6883 1892 1
+6884 1892 -1
+9468 1892 38
+1797 1893 -1
+1840 1893 1
+2565 1893 -1
+2821 1893 1
+3781 1893 1
+3909 1893 -1
+5277 1893 -1
+5285 1893 1
+6884 1893 1
+6885 1893 -1
+9469 1893 38
+1798 1894 -1
+1833 1894 1
+2566 1894 -1
+2822 1894 1
+3782 1894 1
+3910 1894 -1
+5278 1894 -1
+5286 1894 1
+6885 1894 1
+6886 1894 -1
+9470 1894 38
+1799 1895 -1
+1834 1895 1
+2567 1895 -1
+2823 1895 1
+3783 1895 1
+3911 1895 -1
+5279 1895 -1
+5287 1895 1
+6886 1895 1
+6887 1895 -1
+9471 1895 38
+1800 1896 -1
+1835 1896 1
+2568 1896 -1
+2824 1896 1
+3784 1896 1
+3912 1896 -1
+5280 1896 -1
+5288 1896 1
+6887 1896 1
+6888 1896 -1
+9472 1896 38
+1801 1897 -1
+1844 1897 1
+2569 1897 -1
+2825 1897 1
+3785 1897 1
+3913 1897 -1
+5281 1897 -1
+5289 1897 1
+6889 1897 -1
+6896 1897 1
+9473 1897 38
+1802 1898 -1
+1845 1898 1
+2570 1898 -1
+2826 1898 1
+3786 1898 1
+3914 1898 -1
+5282 1898 -1
+5290 1898 1
+6889 1898 1
+6890 1898 -1
+9474 1898 38
+1803 1899 -1
+1846 1899 1
+2571 1899 -1
+2827 1899 1
+3787 1899 1
+3915 1899 -1
+5283 1899 -1
+5291 1899 1
+6890 1899 1
+6891 1899 -1
+9475 1899 38
+1804 1900 -1
+1847 1900 1
+2572 1900 -1
+2828 1900 1
+3788 1900 1
+3916 1900 -1
+5284 1900 -1
+5292 1900 1
+6891 1900 1
+6892 1900 -1
+9476 1900 38
+1805 1901 -1
+1848 1901 1
+2573 1901 -1
+2829 1901 1
+3789 1901 1
+3917 1901 -1
+5285 1901 -1
+5293 1901 1
+6892 1901 1
+6893 1901 -1
+9477 1901 38
+1806 1902 -1
+1841 1902 1
+2574 1902 -1
+2830 1902 1
+3790 1902 1
+3918 1902 -1
+5286 1902 -1
+5294 1902 1
+6893 1902 1
+6894 1902 -1
+9478 1902 38
+1807 1903 -1
+1842 1903 1
+2575 1903 -1
+2831 1903 1
+3791 1903 1
+3919 1903 -1
+5287 1903 -1
+5295 1903 1
+6894 1903 1
+6895 1903 -1
+9479 1903 38
+1808 1904 -1
+1843 1904 1
+2576 1904 -1
+2832 1904 1
+3792 1904 1
+3920 1904 -1
+5288 1904 -1
+5296 1904 1
+6895 1904 1
+6896 1904 -1
+9480 1904 38
+1809 1905 -1
+1852 1905 1
+2577 1905 -1
+2833 1905 1
+3793 1905 1
+3921 1905 -1
+5289 1905 -1
+5297 1905 1
+6897 1905 -1
+6904 1905 1
+9481 1905 38
+1810 1906 -1
+1853 1906 1
+2578 1906 -1
+2834 1906 1
+3794 1906 1
+3922 1906 -1
+5290 1906 -1
+5298 1906 1
+6897 1906 1
+6898 1906 -1
+9482 1906 38
+1811 1907 -1
+1854 1907 1
+2579 1907 -1
+2835 1907 1
+3795 1907 1
+3923 1907 -1
+5291 1907 -1
+5299 1907 1
+6898 1907 1
+6899 1907 -1
+9483 1907 38
+1812 1908 -1
+1855 1908 1
+2580 1908 -1
+2836 1908 1
+3796 1908 1
+3924 1908 -1
+5292 1908 -1
+5300 1908 1
+6899 1908 1
+6900 1908 -1
+9484 1908 38
+1813 1909 -1
+1856 1909 1
+2581 1909 -1
+2837 1909 1
+3797 1909 1
+3925 1909 -1
+5293 1909 -1
+5301 1909 1
+6900 1909 1
+6901 1909 -1
+9485 1909 38
+1814 1910 -1
+1849 1910 1
+2582 1910 -1
+2838 1910 1
+3798 1910 1
+3926 1910 -1
+5294 1910 -1
+5302 1910 1
+6901 1910 1
+6902 1910 -1
+9486 1910 38
+1815 1911 -1
+1850 1911 1
+2583 1911 -1
+2839 1911 1
+3799 1911 1
+3927 1911 -1
+5295 1911 -1
+5303 1911 1
+6902 1911 1
+6903 1911 -1
+9487 1911 38
+1816 1912 -1
+1851 1912 1
+2584 1912 -1
+2840 1912 1
+3800 1912 1
+3928 1912 -1
+5296 1912 -1
+5304 1912 1
+6903 1912 1
+6904 1912 -1
+9488 1912 38
+1817 1913 -1
+1860 1913 1
+2585 1913 -1
+2841 1913 1
+3801 1913 1
+3929 1913 -1
+5297 1913 -1
+5305 1913 1
+6905 1913 -1
+6912 1913 1
+9489 1913 38
+1818 1914 -1
+1861 1914 1
+2586 1914 -1
+2842 1914 1
+3802 1914 1
+3930 1914 -1
+5298 1914 -1
+5306 1914 1
+6905 1914 1
+6906 1914 -1
+9490 1914 38
+1819 1915 -1
+1862 1915 1
+2587 1915 -1
+2843 1915 1
+3803 1915 1
+3931 1915 -1
+5299 1915 -1
+5307 1915 1
+6906 1915 1
+6907 1915 -1
+9491 1915 38
+1820 1916 -1
+1863 1916 1
+2588 1916 -1
+2844 1916 1
+3804 1916 1
+3932 1916 -1
+5300 1916 -1
+5308 1916 1
+6907 1916 1
+6908 1916 -1
+9492 1916 38
+1821 1917 -1
+1864 1917 1
+2589 1917 -1
+2845 1917 1
+3805 1917 1
+3933 1917 -1
+5301 1917 -1
+5309 1917 1
+6908 1917 1
+6909 1917 -1
+9493 1917 38
+1822 1918 -1
+1857 1918 1
+2590 1918 -1
+2846 1918 1
+3806 1918 1
+3934 1918 -1
+5302 1918 -1
+5310 1918 1
+6909 1918 1
+6910 1918 -1
+9494 1918 38
+1823 1919 -1
+1858 1919 1
+2591 1919 -1
+2847 1919 1
+3807 1919 1
+3935 1919 -1
+5303 1919 -1
+5311 1919 1
+6910 1919 1
+6911 1919 -1
+9495 1919 38
+1824 1920 -1
+1859 1920 1
+2592 1920 -1
+2848 1920 1
+3808 1920 1
+3936 1920 -1
+5304 1920 -1
+5312 1920 1
+6911 1920 1
+6912 1920 -1
+9496 1920 38
+1232 1921 1
+1825 1921 -1
+2593 1921 -1
+2849 1921 1
+3937 1921 -1
+4133 1921 1
+5313 1921 1
+5437 1921 -1
+6913 1921 -1
+6920 1921 1
+9497 1921 38
+1225 1922 1
+1826 1922 -1
+2594 1922 -1
+2850 1922 1
+3938 1922 -1
+4134 1922 1
+5314 1922 1
+5438 1922 -1
+6913 1922 1
+6914 1922 -1
+9498 1922 38
+1226 1923 1
+1827 1923 -1
+2595 1923 -1
+2851 1923 1
+3939 1923 -1
+4135 1923 1
+5315 1923 1
+5439 1923 -1
+6914 1923 1
+6915 1923 -1
+9499 1923 38
+1227 1924 1
+1828 1924 -1
+2596 1924 -1
+2852 1924 1
+3940 1924 -1
+4136 1924 1
+5316 1924 1
+5440 1924 -1
+6915 1924 1
+6916 1924 -1
+9500 1924 38
+1228 1925 1
+1829 1925 -1
+2597 1925 -1
+2853 1925 1
+3941 1925 -1
+4129 1925 1
+5317 1925 1
+5433 1925 -1
+6916 1925 1
+6917 1925 -1
+9501 1925 38
+1229 1926 1
+1830 1926 -1
+2598 1926 -1
+2854 1926 1
+3942 1926 -1
+4130 1926 1
+5318 1926 1
+5434 1926 -1
+6917 1926 1
+6918 1926 -1
+9502 1926 38
+1230 1927 1
+1831 1927 -1
+2599 1927 -1
+2855 1927 1
+3943 1927 -1
+4131 1927 1
+5319 1927 1
+5435 1927 -1
+6918 1927 1
+6919 1927 -1
+9503 1927 38
+1231 1928 1
+1832 1928 -1
+2600 1928 -1
+2856 1928 1
+3944 1928 -1
+4132 1928 1
+5320 1928 1
+5436 1928 -1
+6919 1928 1
+6920 1928 -1
+9504 1928 38
+1240 1929 1
+1833 1929 -1
+2601 1929 -1
+2857 1929 1
+3945 1929 -1
+4141 1929 1
+5313 1929 -1
+5321 1929 1
+6921 1929 -1
+6928 1929 1
+9505 1929 38
+1233 1930 1
+1834 1930 -1
+2602 1930 -1
+2858 1930 1
+3946 1930 -1
+4142 1930 1
+5314 1930 -1
+5322 1930 1
+6921 1930 1
+6922 1930 -1
+9506 1930 38
+1234 1931 1
+1835 1931 -1
+2603 1931 -1
+2859 1931 1
+3947 1931 -1
+4143 1931 1
+5315 1931 -1
+5323 1931 1
+6922 1931 1
+6923 1931 -1
+9507 1931 38
+1235 1932 1
+1836 1932 -1
+2604 1932 -1
+2860 1932 1
+3948 1932 -1
+4144 1932 1
+5316 1932 -1
+5324 1932 1
+6923 1932 1
+6924 1932 -1
+9508 1932 38
+1236 1933 1
+1837 1933 -1
+2605 1933 -1
+2861 1933 1
+3949 1933 -1
+4137 1933 1
+5317 1933 -1
+5325 1933 1
+6924 1933 1
+6925 1933 -1
+9509 1933 38
+1237 1934 1
+1838 1934 -1
+2606 1934 -1
+2862 1934 1
+3950 1934 -1
+4138 1934 1
+5318 1934 -1
+5326 1934 1
+6925 1934 1
+6926 1934 -1
+9510 1934 38
+1238 1935 1
+1839 1935 -1
+2607 1935 -1
+2863 1935 1
+3951 1935 -1
+4139 1935 1
+5319 1935 -1
+5327 1935 1
+6926 1935 1
+6927 1935 -1
+9511 1935 38
+1239 1936 1
+1840 1936 -1
+2608 1936 -1
+2864 1936 1
+3952 1936 -1
+4140 1936 1
+5320 1936 -1
+5328 1936 1
+6927 1936 1
+6928 1936 -1
+9512 1936 38
+1248 1937 1
+1841 1937 -1
+2609 1937 -1
+2865 1937 1
+3953 1937 -1
+4149 1937 1
+5321 1937 -1
+5329 1937 1
+6929 1937 -1
+6936 1937 1
+9513 1937 38
+1241 1938 1
+1842 1938 -1
+2610 1938 -1
+2866 1938 1
+3954 1938 -1
+4150 1938 1
+5322 1938 -1
+5330 1938 1
+6929 1938 1
+6930 1938 -1
+9514 1938 38
+1242 1939 1
+1843 1939 -1
+2611 1939 -1
+2867 1939 1
+3955 1939 -1
+4151 1939 1
+5323 1939 -1
+5331 1939 1
+6930 1939 1
+6931 1939 -1
+9515 1939 38
+1243 1940 1
+1844 1940 -1
+2612 1940 -1
+2868 1940 1
+3956 1940 -1
+4152 1940 1
+5324 1940 -1
+5332 1940 1
+6931 1940 1
+6932 1940 -1
+9516 1940 38
+1244 1941 1
+1845 1941 -1
+2613 1941 -1
+2869 1941 1
+3957 1941 -1
+4145 1941 1
+5325 1941 -1
+5333 1941 1
+6932 1941 1
+6933 1941 -1
+9517 1941 38
+1245 1942 1
+1846 1942 -1
+2614 1942 -1
+2870 1942 1
+3958 1942 -1
+4146 1942 1
+5326 1942 -1
+5334 1942 1
+6933 1942 1
+6934 1942 -1
+9518 1942 38
+1246 1943 1
+1847 1943 -1
+2615 1943 -1
+2871 1943 1
+3959 1943 -1
+4147 1943 1
+5327 1943 -1
+5335 1943 1
+6934 1943 1
+6935 1943 -1
+9519 1943 38
+1247 1944 1
+1848 1944 -1
+2616 1944 -1
+2872 1944 1
+3960 1944 -1
+4148 1944 1
+5328 1944 -1
+5336 1944 1
+6935 1944 1
+6936 1944 -1
+9520 1944 38
+1256 1945 1
+1849 1945 -1
+2617 1945 -1
+2873 1945 1
+3961 1945 -1
+4157 1945 1
+5329 1945 -1
+5337 1945 1
+6937 1945 -1
+6944 1945 1
+9521 1945 38
+1249 1946 1
+1850 1946 -1
+2618 1946 -1
+2874 1946 1
+3962 1946 -1
+4158 1946 1
+5330 1946 -1
+5338 1946 1
+6937 1946 1
+6938 1946 -1
+9522 1946 38
+1250 1947 1
+1851 1947 -1
+2619 1947 -1
+2875 1947 1
+3963 1947 -1
+4159 1947 1
+5331 1947 -1
+5339 1947 1
+6938 1947 1
+6939 1947 -1
+9523 1947 38
+1251 1948 1
+1852 1948 -1
+2620 1948 -1
+2876 1948 1
+3964 1948 -1
+4160 1948 1
+5332 1948 -1
+5340 1948 1
+6939 1948 1
+6940 1948 -1
+9524 1948 38
+1252 1949 1
+1853 1949 -1
+2621 1949 -1
+2877 1949 1
+3965 1949 -1
+4153 1949 1
+5333 1949 -1
+5341 1949 1
+6940 1949 1
+6941 1949 -1
+9525 1949 38
+1253 1950 1
+1854 1950 -1
+2622 1950 -1
+2878 1950 1
+3966 1950 -1
+4154 1950 1
+5334 1950 -1
+5342 1950 1
+6941 1950 1
+6942 1950 -1
+9526 1950 38
+1254 1951 1
+1855 1951 -1
+2623 1951 -1
+2879 1951 1
+3967 1951 -1
+4155 1951 1
+5335 1951 -1
+5343 1951 1
+6942 1951 1
+6943 1951 -1
+9527 1951 38
+1255 1952 1
+1856 1952 -1
+2624 1952 -1
+2880 1952 1
+3968 1952 -1
+4156 1952 1
+5336 1952 -1
+5344 1952 1
+6943 1952 1
+6944 1952 -1
+9528 1952 38
+1264 1953 1
+1857 1953 -1
+2625 1953 -1
+2881 1953 1
+3969 1953 -1
+4165 1953 1
+5337 1953 -1
+5345 1953 1
+6945 1953 -1
+6952 1953 1
+9529 1953 38
+1257 1954 1
+1858 1954 -1
+2626 1954 -1
+2882 1954 1
+3970 1954 -1
+4166 1954 1
+5338 1954 -1
+5346 1954 1
+6945 1954 1
+6946 1954 -1
+9530 1954 38
+1258 1955 1
+1859 1955 -1
+2627 1955 -1
+2883 1955 1
+3971 1955 -1
+4167 1955 1
+5339 1955 -1
+5347 1955 1
+6946 1955 1
+6947 1955 -1
+9531 1955 38
+1259 1956 1
+1860 1956 -1
+2628 1956 -1
+2884 1956 1
+3972 1956 -1
+4168 1956 1
+5340 1956 -1
+5348 1956 1
+6947 1956 1
+6948 1956 -1
+9532 1956 38
+1260 1957 1
+1861 1957 -1
+2629 1957 -1
+2885 1957 1
+3973 1957 -1
+4161 1957 1
+5341 1957 -1
+5349 1957 1
+6948 1957 1
+6949 1957 -1
+9533 1957 38
+1261 1958 1
+1862 1958 -1
+2630 1958 -1
+2886 1958 1
+3974 1958 -1
+4162 1958 1
+5342 1958 -1
+5350 1958 1
+6949 1958 1
+6950 1958 -1
+9534 1958 38
+1262 1959 1
+1863 1959 -1
+2631 1959 -1
+2887 1959 1
+3975 1959 -1
+4163 1959 1
+5343 1959 -1
+5351 1959 1
+6950 1959 1
+6951 1959 -1
+9535 1959 38
+1263 1960 1
+1864 1960 -1
+2632 1960 -1
+2888 1960 1
+3976 1960 -1
+4164 1960 1
+5344 1960 -1
+5352 1960 1
+6951 1960 1
+6952 1960 -1
+9536 1960 38
+1272 1961 1
+1865 1961 -1
+2633 1961 -1
+2889 1961 1
+3977 1961 -1
+4173 1961 1
+5345 1961 -1
+5353 1961 1
+6953 1961 -1
+6960 1961 1
+9537 1961 38
+1265 1962 1
+1866 1962 -1
+2634 1962 -1
+2890 1962 1
+3978 1962 -1
+4174 1962 1
+5346 1962 -1
+5354 1962 1
+6953 1962 1
+6954 1962 -1
+9538 1962 38
+1266 1963 1
+1867 1963 -1
+2635 1963 -1
+2891 1963 1
+3979 1963 -1
+4175 1963 1
+5347 1963 -1
+5355 1963 1
+6954 1963 1
+6955 1963 -1
+9539 1963 38
+1267 1964 1
+1868 1964 -1
+2636 1964 -1
+2892 1964 1
+3980 1964 -1
+4176 1964 1
+5348 1964 -1
+5356 1964 1
+6955 1964 1
+6956 1964 -1
+9540 1964 38
+1268 1965 1
+1869 1965 -1
+2637 1965 -1
+2893 1965 1
+3981 1965 -1
+4169 1965 1
+5349 1965 -1
+5357 1965 1
+6956 1965 1
+6957 1965 -1
+9541 1965 38
+1269 1966 1
+1870 1966 -1
+2638 1966 -1
+2894 1966 1
+3982 1966 -1
+4170 1966 1
+5350 1966 -1
+5358 1966 1
+6957 1966 1
+6958 1966 -1
+9542 1966 38
+1270 1967 1
+1871 1967 -1
+2639 1967 -1
+2895 1967 1
+3983 1967 -1
+4171 1967 1
+5351 1967 -1
+5359 1967 1
+6958 1967 1
+6959 1967 -1
+9543 1967 38
+1271 1968 1
+1872 1968 -1
+2640 1968 -1
+2896 1968 1
+3984 1968 -1
+4172 1968 1
+5352 1968 -1
+5360 1968 1
+6959 1968 1
+6960 1968 -1
+9544 1968 38
+1280 1969 1
+1873 1969 -1
+2641 1969 -1
+2897 1969 1
+3985 1969 -1
+4181 1969 1
+5353 1969 -1
+5361 1969 1
+6961 1969 -1
+6968 1969 1
+9545 1969 38
+1273 1970 1
+1874 1970 -1
+2642 1970 -1
+2898 1970 1
+3986 1970 -1
+4182 1970 1
+5354 1970 -1
+5362 1970 1
+6961 1970 1
+6962 1970 -1
+9546 1970 38
+1274 1971 1
+1875 1971 -1
+2643 1971 -1
+2899 1971 1
+3987 1971 -1
+4183 1971 1
+5355 1971 -1
+5363 1971 1
+6962 1971 1
+6963 1971 -1
+9547 1971 38
+1275 1972 1
+1876 1972 -1
+2644 1972 -1
+2900 1972 1
+3988 1972 -1
+4184 1972 1
+5356 1972 -1
+5364 1972 1
+6963 1972 1
+6964 1972 -1
+9548 1972 38
+1276 1973 1
+1877 1973 -1
+2645 1973 -1
+2901 1973 1
+3989 1973 -1
+4177 1973 1
+5357 1973 -1
+5365 1973 1
+6964 1973 1
+6965 1973 -1
+9549 1973 38
+1277 1974 1
+1878 1974 -1
+2646 1974 -1
+2902 1974 1
+3990 1974 -1
+4178 1974 1
+5358 1974 -1
+5366 1974 1
+6965 1974 1
+6966 1974 -1
+9550 1974 38
+1278 1975 1
+1879 1975 -1
+2647 1975 -1
+2903 1975 1
+3991 1975 -1
+4179 1975 1
+5359 1975 -1
+5367 1975 1
+6966 1975 1
+6967 1975 -1
+9551 1975 38
+1279 1976 1
+1880 1976 -1
+2648 1976 -1
+2904 1976 1
+3992 1976 -1
+4180 1976 1
+5360 1976 -1
+5368 1976 1
+6967 1976 1
+6968 1976 -1
+9552 1976 38
+1288 1977 1
+1881 1977 -1
+2649 1977 -1
+2905 1977 1
+3993 1977 -1
+4189 1977 1
+5361 1977 -1
+5369 1977 1
+6969 1977 -1
+6976 1977 1
+9553 1977 38
+1281 1978 1
+1882 1978 -1
+2650 1978 -1
+2906 1978 1
+3994 1978 -1
+4190 1978 1
+5362 1978 -1
+5370 1978 1
+6969 1978 1
+6970 1978 -1
+9554 1978 38
+1282 1979 1
+1883 1979 -1
+2651 1979 -1
+2907 1979 1
+3995 1979 -1
+4191 1979 1
+5363 1979 -1
+5371 1979 1
+6970 1979 1
+6971 1979 -1
+9555 1979 38
+1283 1980 1
+1884 1980 -1
+2652 1980 -1
+2908 1980 1
+3996 1980 -1
+4192 1980 1
+5364 1980 -1
+5372 1980 1
+6971 1980 1
+6972 1980 -1
+9556 1980 38
+1284 1981 1
+1885 1981 -1
+2653 1981 -1
+2909 1981 1
+3997 1981 -1
+4185 1981 1
+5365 1981 -1
+5373 1981 1
+6972 1981 1
+6973 1981 -1
+9557 1981 38
+1285 1982 1
+1886 1982 -1
+2654 1982 -1
+2910 1982 1
+3998 1982 -1
+4186 1982 1
+5366 1982 -1
+5374 1982 1
+6973 1982 1
+6974 1982 -1
+9558 1982 38
+1286 1983 1
+1887 1983 -1
+2655 1983 -1
+2911 1983 1
+3999 1983 -1
+4187 1983 1
+5367 1983 -1
+5375 1983 1
+6974 1983 1
+6975 1983 -1
+9559 1983 38
+1287 1984 1
+1888 1984 -1
+2656 1984 -1
+2912 1984 1
+4000 1984 -1
+4188 1984 1
+5368 1984 -1
+5376 1984 1
+6975 1984 1
+6976 1984 -1
+9560 1984 38
+1296 1985 1
+1889 1985 -1
+2657 1985 -1
+2913 1985 1
+4001 1985 -1
+4065 1985 1
+5369 1985 -1
+5377 1985 1
+6977 1985 -1
+6984 1985 1
+9561 1985 38
+1289 1986 1
+1890 1986 -1
+2658 1986 -1
+2914 1986 1
+4002 1986 -1
+4066 1986 1
+5370 1986 -1
+5378 1986 1
+6977 1986 1
+6978 1986 -1
+9562 1986 38
+1290 1987 1
+1891 1987 -1
+2659 1987 -1
+2915 1987 1
+4003 1987 -1
+4067 1987 1
+5371 1987 -1
+5379 1987 1
+6978 1987 1
+6979 1987 -1
+9563 1987 38
+1291 1988 1
+1892 1988 -1
+2660 1988 -1
+2916 1988 1
+4004 1988 -1
+4068 1988 1
+5372 1988 -1
+5380 1988 1
+6979 1988 1
+6980 1988 -1
+9564 1988 38
+1292 1989 1
+1893 1989 -1
+2661 1989 -1
+2917 1989 1
+4005 1989 -1
+4069 1989 1
+5373 1989 -1
+5381 1989 1
+6980 1989 1
+6981 1989 -1
+9565 1989 38
+1293 1990 1
+1894 1990 -1
+2662 1990 -1
+2918 1990 1
+4006 1990 -1
+4070 1990 1
+5374 1990 -1
+5382 1990 1
+6981 1990 1
+6982 1990 -1
+9566 1990 38
+1294 1991 1
+1895 1991 -1
+2663 1991 -1
+2919 1991 1
+4007 1991 -1
+4071 1991 1
+5375 1991 -1
+5383 1991 1
+6982 1991 1
+6983 1991 -1
+9567 1991 38
+1295 1992 1
+1896 1992 -1
+2664 1992 -1
+2920 1992 1
+4008 1992 -1
+4072 1992 1
+5376 1992 -1
+5384 1992 1
+6983 1992 1
+6984 1992 -1
+9568 1992 38
+1304 1993 1
+1897 1993 -1
+2665 1993 -1
+2921 1993 1
+4009 1993 -1
+4073 1993 1
+5377 1993 -1
+5385 1993 1
+6985 1993 -1
+6992 1993 1
+9569 1993 38
+1297 1994 1
+1898 1994 -1
+2666 1994 -1
+2922 1994 1
+4010 1994 -1
+4074 1994 1
+5378 1994 -1
+5386 1994 1
+6985 1994 1
+6986 1994 -1
+9570 1994 38
+1298 1995 1
+1899 1995 -1
+2667 1995 -1
+2923 1995 1
+4011 1995 -1
+4075 1995 1
+5379 1995 -1
+5387 1995 1
+6986 1995 1
+6987 1995 -1
+9571 1995 38
+1299 1996 1
+1900 1996 -1
+2668 1996 -1
+2924 1996 1
+4012 1996 -1
+4076 1996 1
+5380 1996 -1
+5388 1996 1
+6987 1996 1
+6988 1996 -1
+9572 1996 38
+1300 1997 1
+1901 1997 -1
+2669 1997 -1
+2925 1997 1
+4013 1997 -1
+4077 1997 1
+5381 1997 -1
+5389 1997 1
+6988 1997 1
+6989 1997 -1
+9573 1997 38
+1301 1998 1
+1902 1998 -1
+2670 1998 -1
+2926 1998 1
+4014 1998 -1
+4078 1998 1
+5382 1998 -1
+5390 1998 1
+6989 1998 1
+6990 1998 -1
+9574 1998 38
+1302 1999 1
+1903 1999 -1
+2671 1999 -1
+2927 1999 1
+4015 1999 -1
+4079 1999 1
+5383 1999 -1
+5391 1999 1
+6990 1999 1
+6991 1999 -1
+9575 1999 38
+1303 2000 1
+1904 2000 -1
+2672 2000 -1
+2928 2000 1
+4016 2000 -1
+4080 2000 1
+5384 2000 -1
+5392 2000 1
+6991 2000 1
+6992 2000 -1
+9576 2000 38
+1312 2001 1
+1905 2001 -1
+2673 2001 -1
+2929 2001 1
+4017 2001 -1
+4081 2001 1
+5385 2001 -1
+5393 2001 1
+6993 2001 -1
+7000 2001 1
+9577 2001 38
+1305 2002 1
+1906 2002 -1
+2674 2002 -1
+2930 2002 1
+4018 2002 -1
+4082 2002 1
+5386 2002 -1
+5394 2002 1
+6993 2002 1
+6994 2002 -1
+9578 2002 38
+1306 2003 1
+1907 2003 -1
+2675 2003 -1
+2931 2003 1
+4019 2003 -1
+4083 2003 1
+5387 2003 -1
+5395 2003 1
+6994 2003 1
+6995 2003 -1
+9579 2003 38
+1307 2004 1
+1908 2004 -1
+2676 2004 -1
+2932 2004 1
+4020 2004 -1
+4084 2004 1
+5388 2004 -1
+5396 2004 1
+6995 2004 1
+6996 2004 -1
+9580 2004 38
+1308 2005 1
+1909 2005 -1
+2677 2005 -1
+2933 2005 1
+4021 2005 -1
+4085 2005 1
+5389 2005 -1
+5397 2005 1
+6996 2005 1
+6997 2005 -1
+9581 2005 38
+1309 2006 1
+1910 2006 -1
+2678 2006 -1
+2934 2006 1
+4022 2006 -1
+4086 2006 1
+5390 2006 -1
+5398 2006 1
+6997 2006 1
+6998 2006 -1
+9582 2006 38
+1310 2007 1
+1911 2007 -1
+2679 2007 -1
+2935 2007 1
+4023 2007 -1
+4087 2007 1
+5391 2007 -1
+5399 2007 1
+6998 2007 1
+6999 2007 -1
+9583 2007 38
+1311 2008 1
+1912 2008 -1
+2680 2008 -1
+2936 2008 1
+4024 2008 -1
+4088 2008 1
+5392 2008 -1
+5400 2008 1
+6999 2008 1
+7000 2008 -1
+9584 2008 38
+1188 2009 1
+1913 2009 -1
+2681 2009 -1
+2937 2009 1
+4025 2009 -1
+4089 2009 1
+5393 2009 -1
+5401 2009 1
+7001 2009 -1
+7008 2009 1
+9585 2009 38
+1189 2010 1
+1914 2010 -1
+2682 2010 -1
+2938 2010 1
+4026 2010 -1
+4090 2010 1
+5394 2010 -1
+5402 2010 1
+7001 2010 1
+7002 2010 -1
+9586 2010 38
+1190 2011 1
+1915 2011 -1
+2683 2011 -1
+2939 2011 1
+4027 2011 -1
+4091 2011 1
+5395 2011 -1
+5403 2011 1
+7002 2011 1
+7003 2011 -1
+9587 2011 38
+1191 2012 1
+1916 2012 -1
+2684 2012 -1
+2940 2012 1
+4028 2012 -1
+4092 2012 1
+5396 2012 -1
+5404 2012 1
+7003 2012 1
+7004 2012 -1
+9588 2012 38
+1192 2013 1
+1917 2013 -1
+2685 2013 -1
+2941 2013 1
+4029 2013 -1
+4093 2013 1
+5397 2013 -1
+5405 2013 1
+7004 2013 1
+7005 2013 -1
+9589 2013 38
+1185 2014 1
+1918 2014 -1
+2686 2014 -1
+2942 2014 1
+4030 2014 -1
+4094 2014 1
+5398 2014 -1
+5406 2014 1
+7005 2014 1
+7006 2014 -1
+9590 2014 38
+1186 2015 1
+1919 2015 -1
+2687 2015 -1
+2943 2015 1
+4031 2015 -1
+4095 2015 1
+5399 2015 -1
+5407 2015 1
+7006 2015 1
+7007 2015 -1
+9591 2015 38
+1187 2016 1
+1920 2016 -1
+2688 2016 -1
+2944 2016 1
+4032 2016 -1
+4096 2016 1
+5400 2016 -1
+5408 2016 1
+7007 2016 1
+7008 2016 -1
+9592 2016 38
+1196 2017 1
+1921 2017 -1
+2689 2017 -1
+2945 2017 1
+4033 2017 -1
+4097 2017 1
+5401 2017 -1
+5409 2017 1
+7009 2017 -1
+7016 2017 1
+9593 2017 38
+1197 2018 1
+1922 2018 -1
+2690 2018 -1
+2946 2018 1
+4034 2018 -1
+4098 2018 1
+5402 2018 -1
+5410 2018 1
+7009 2018 1
+7010 2018 -1
+9594 2018 38
+1198 2019 1
+1923 2019 -1
+2691 2019 -1
+2947 2019 1
+4035 2019 -1
+4099 2019 1
+5403 2019 -1
+5411 2019 1
+7010 2019 1
+7011 2019 -1
+9595 2019 38
+1199 2020 1
+1924 2020 -1
+2692 2020 -1
+2948 2020 1
+4036 2020 -1
+4100 2020 1
+5404 2020 -1
+5412 2020 1
+7011 2020 1
+7012 2020 -1
+9596 2020 38
+1200 2021 1
+1925 2021 -1
+2693 2021 -1
+2949 2021 1
+4037 2021 -1
+4101 2021 1
+5405 2021 -1
+5413 2021 1
+7012 2021 1
+7013 2021 -1
+9597 2021 38
+1193 2022 1
+1926 2022 -1
+2694 2022 -1
+2950 2022 1
+4038 2022 -1
+4102 2022 1
+5406 2022 -1
+5414 2022 1
+7013 2022 1
+7014 2022 -1
+9598 2022 38
+1194 2023 1
+1927 2023 -1
+2695 2023 -1
+2951 2023 1
+4039 2023 -1
+4103 2023 1
+5407 2023 -1
+5415 2023 1
+7014 2023 1
+7015 2023 -1
+9599 2023 38
+1195 2024 1
+1928 2024 -1
+2696 2024 -1
+2952 2024 1
+4040 2024 -1
+4104 2024 1
+5408 2024 -1
+5416 2024 1
+7015 2024 1
+7016 2024 -1
+9600 2024 38
+1204 2025 1
+1929 2025 -1
+2697 2025 -1
+2953 2025 1
+4041 2025 -1
+4105 2025 1
+5409 2025 -1
+5417 2025 1
+7017 2025 -1
+7024 2025 1
+9601 2025 38
+1205 2026 1
+1930 2026 -1
+2698 2026 -1
+2954 2026 1
+4042 2026 -1
+4106 2026 1
+5410 2026 -1
+5418 2026 1
+7017 2026 1
+7018 2026 -1
+9602 2026 38
+1206 2027 1
+1931 2027 -1
+2699 2027 -1
+2955 2027 1
+4043 2027 -1
+4107 2027 1
+5411 2027 -1
+5419 2027 1
+7018 2027 1
+7019 2027 -1
+9603 2027 38
+1207 2028 1
+1932 2028 -1
+2700 2028 -1
+2956 2028 1
+4044 2028 -1
+4108 2028 1
+5412 2028 -1
+5420 2028 1
+7019 2028 1
+7020 2028 -1
+9604 2028 38
+1208 2029 1
+1933 2029 -1
+2701 2029 -1
+2957 2029 1
+4045 2029 -1
+4109 2029 1
+5413 2029 -1
+5421 2029 1
+7020 2029 1
+7021 2029 -1
+9605 2029 38
+1201 2030 1
+1934 2030 -1
+2702 2030 -1
+2958 2030 1
+4046 2030 -1
+4110 2030 1
+5414 2030 -1
+5422 2030 1
+7021 2030 1
+7022 2030 -1
+9606 2030 38
+1202 2031 1
+1935 2031 -1
+2703 2031 -1
+2959 2031 1
+4047 2031 -1
+4111 2031 1
+5415 2031 -1
+5423 2031 1
+7022 2031 1
+7023 2031 -1
+9607 2031 38
+1203 2032 1
+1936 2032 -1
+2704 2032 -1
+2960 2032 1
+4048 2032 -1
+4112 2032 1
+5416 2032 -1
+5424 2032 1
+7023 2032 1
+7024 2032 -1
+9608 2032 38
+1212 2033 1
+1937 2033 -1
+2705 2033 -1
+2961 2033 1
+4049 2033 -1
+4113 2033 1
+5417 2033 -1
+5425 2033 1
+7025 2033 -1
+7032 2033 1
+9609 2033 38
+1213 2034 1
+1938 2034 -1
+2706 2034 -1
+2962 2034 1
+4050 2034 -1
+4114 2034 1
+5418 2034 -1
+5426 2034 1
+7025 2034 1
+7026 2034 -1
+9610 2034 38
+1214 2035 1
+1939 2035 -1
+2707 2035 -1
+2963 2035 1
+4051 2035 -1
+4115 2035 1
+5419 2035 -1
+5427 2035 1
+7026 2035 1
+7027 2035 -1
+9611 2035 38
+1215 2036 1
+1940 2036 -1
+2708 2036 -1
+2964 2036 1
+4052 2036 -1
+4116 2036 1
+5420 2036 -1
+5428 2036 1
+7027 2036 1
+7028 2036 -1
+9612 2036 38
+1216 2037 1
+1941 2037 -1
+2709 2037 -1
+2965 2037 1
+4053 2037 -1
+4117 2037 1
+5421 2037 -1
+5429 2037 1
+7028 2037 1
+7029 2037 -1
+9613 2037 38
+1209 2038 1
+1942 2038 -1
+2710 2038 -1
+2966 2038 1
+4054 2038 -1
+4118 2038 1
+5422 2038 -1
+5430 2038 1
+7029 2038 1
+7030 2038 -1
+9614 2038 38
+1210 2039 1
+1943 2039 -1
+2711 2039 -1
+2967 2039 1
+4055 2039 -1
+4119 2039 1
+5423 2039 -1
+5431 2039 1
+7030 2039 1
+7031 2039 -1
+9615 2039 38
+1211 2040 1
+1944 2040 -1
+2712 2040 -1
+2968 2040 1
+4056 2040 -1
+4120 2040 1
+5424 2040 -1
+5432 2040 1
+7031 2040 1
+7032 2040 -1
+9616 2040 38
+1220 2041 1
+1945 2041 -1
+2713 2041 -1
+2969 2041 1
+4057 2041 -1
+4121 2041 1
+5425 2041 -1
+5433 2041 1
+7033 2041 -1
+7040 2041 1
+9617 2041 38
+1221 2042 1
+1946 2042 -1
+2714 2042 -1
+2970 2042 1
+4058 2042 -1
+4122 2042 1
+5426 2042 -1
+5434 2042 1
+7033 2042 1
+7034 2042 -1
+9618 2042 38
+1222 2043 1
+1947 2043 -1
+2715 2043 -1
+2971 2043 1
+4059 2043 -1
+4123 2043 1
+5427 2043 -1
+5435 2043 1
+7034 2043 1
+7035 2043 -1
+9619 2043 38
+1223 2044 1
+1948 2044 -1
+2716 2044 -1
+2972 2044 1
+4060 2044 -1
+4124 2044 1
+5428 2044 -1
+5436 2044 1
+7035 2044 1
+7036 2044 -1
+9620 2044 38
+1224 2045 1
+1949 2045 -1
+2717 2045 -1
+2973 2045 1
+4061 2045 -1
+4125 2045 1
+5429 2045 -1
+5437 2045 1
+7036 2045 1
+7037 2045 -1
+9621 2045 38
+1217 2046 1
+1950 2046 -1
+2718 2046 -1
+2974 2046 1
+4062 2046 -1
+4126 2046 1
+5430 2046 -1
+5438 2046 1
+7037 2046 1
+7038 2046 -1
+9622 2046 38
+1218 2047 1
+1951 2047 -1
+2719 2047 -1
+2975 2047 1
+4063 2047 -1
+4127 2047 1
+5431 2047 -1
+5439 2047 1
+7038 2047 1
+7039 2047 -1
+9623 2047 38
+1219 2048 1
+1952 2048 -1
+2720 2048 -1
+2976 2048 1
+4064 2048 -1
+4128 2048 1
+5432 2048 -1
+5440 2048 1
+7039 2048 1
+7040 2048 -1
+9624 2048 38
+1168 2049 1
+1953 2049 -1
+2721 2049 -1
+2977 2049 1
+3937 2049 1
+4065 2049 -1
+5441 2049 1
+5565 2049 -1
+7041 2049 -1
+7048 2049 1
+9625 2049 38
+1161 2050 1
+1954 2050 -1
+2722 2050 -1
+2978 2050 1
+3938 2050 1
+4066 2050 -1
+5442 2050 1
+5566 2050 -1
+7041 2050 1
+7042 2050 -1
+9626 2050 38
+1162 2051 1
+1955 2051 -1
+2723 2051 -1
+2979 2051 1
+3939 2051 1
+4067 2051 -1
+5443 2051 1
+5567 2051 -1
+7042 2051 1
+7043 2051 -1
+9627 2051 38
+1163 2052 1
+1956 2052 -1
+2724 2052 -1
+2980 2052 1
+3940 2052 1
+4068 2052 -1
+5444 2052 1
+5568 2052 -1
+7043 2052 1
+7044 2052 -1
+9628 2052 38
+1164 2053 1
+1957 2053 -1
+2725 2053 -1
+2981 2053 1
+3941 2053 1
+4069 2053 -1
+5445 2053 1
+5561 2053 -1
+7044 2053 1
+7045 2053 -1
+9629 2053 38
+1165 2054 1
+1958 2054 -1
+2726 2054 -1
+2982 2054 1
+3942 2054 1
+4070 2054 -1
+5446 2054 1
+5562 2054 -1
+7045 2054 1
+7046 2054 -1
+9630 2054 38
+1166 2055 1
+1959 2055 -1
+2727 2055 -1
+2983 2055 1
+3943 2055 1
+4071 2055 -1
+5447 2055 1
+5563 2055 -1
+7046 2055 1
+7047 2055 -1
+9631 2055 38
+1167 2056 1
+1960 2056 -1
+2728 2056 -1
+2984 2056 1
+3944 2056 1
+4072 2056 -1
+5448 2056 1
+5564 2056 -1
+7047 2056 1
+7048 2056 -1
+9632 2056 38
+1176 2057 1
+1961 2057 -1
+2729 2057 -1
+2985 2057 1
+3945 2057 1
+4073 2057 -1
+5441 2057 -1
+5449 2057 1
+7049 2057 -1
+7056 2057 1
+9633 2057 38
+1169 2058 1
+1962 2058 -1
+2730 2058 -1
+2986 2058 1
+3946 2058 1
+4074 2058 -1
+5442 2058 -1
+5450 2058 1
+7049 2058 1
+7050 2058 -1
+9634 2058 38
+1170 2059 1
+1963 2059 -1
+2731 2059 -1
+2987 2059 1
+3947 2059 1
+4075 2059 -1
+5443 2059 -1
+5451 2059 1
+7050 2059 1
+7051 2059 -1
+9635 2059 38
+1171 2060 1
+1964 2060 -1
+2732 2060 -1
+2988 2060 1
+3948 2060 1
+4076 2060 -1
+5444 2060 -1
+5452 2060 1
+7051 2060 1
+7052 2060 -1
+9636 2060 38
+1172 2061 1
+1965 2061 -1
+2733 2061 -1
+2989 2061 1
+3949 2061 1
+4077 2061 -1
+5445 2061 -1
+5453 2061 1
+7052 2061 1
+7053 2061 -1
+9637 2061 38
+1173 2062 1
+1966 2062 -1
+2734 2062 -1
+2990 2062 1
+3950 2062 1
+4078 2062 -1
+5446 2062 -1
+5454 2062 1
+7053 2062 1
+7054 2062 -1
+9638 2062 38
+1174 2063 1
+1967 2063 -1
+2735 2063 -1
+2991 2063 1
+3951 2063 1
+4079 2063 -1
+5447 2063 -1
+5455 2063 1
+7054 2063 1
+7055 2063 -1
+9639 2063 38
+1175 2064 1
+1968 2064 -1
+2736 2064 -1
+2992 2064 1
+3952 2064 1
+4080 2064 -1
+5448 2064 -1
+5456 2064 1
+7055 2064 1
+7056 2064 -1
+9640 2064 38
+1184 2065 1
+1969 2065 -1
+2737 2065 -1
+2993 2065 1
+3953 2065 1
+4081 2065 -1
+5449 2065 -1
+5457 2065 1
+7057 2065 -1
+7064 2065 1
+9641 2065 38
+1177 2066 1
+1970 2066 -1
+2738 2066 -1
+2994 2066 1
+3954 2066 1
+4082 2066 -1
+5450 2066 -1
+5458 2066 1
+7057 2066 1
+7058 2066 -1
+9642 2066 38
+1178 2067 1
+1971 2067 -1
+2739 2067 -1
+2995 2067 1
+3955 2067 1
+4083 2067 -1
+5451 2067 -1
+5459 2067 1
+7058 2067 1
+7059 2067 -1
+9643 2067 38
+1179 2068 1
+1972 2068 -1
+2740 2068 -1
+2996 2068 1
+3956 2068 1
+4084 2068 -1
+5452 2068 -1
+5460 2068 1
+7059 2068 1
+7060 2068 -1
+9644 2068 38
+1180 2069 1
+1973 2069 -1
+2741 2069 -1
+2997 2069 1
+3957 2069 1
+4085 2069 -1
+5453 2069 -1
+5461 2069 1
+7060 2069 1
+7061 2069 -1
+9645 2069 38
+1181 2070 1
+1974 2070 -1
+2742 2070 -1
+2998 2070 1
+3958 2070 1
+4086 2070 -1
+5454 2070 -1
+5462 2070 1
+7061 2070 1
+7062 2070 -1
+9646 2070 38
+1182 2071 1
+1975 2071 -1
+2743 2071 -1
+2999 2071 1
+3959 2071 1
+4087 2071 -1
+5455 2071 -1
+5463 2071 1
+7062 2071 1
+7063 2071 -1
+9647 2071 38
+1183 2072 1
+1976 2072 -1
+2744 2072 -1
+3000 2072 1
+3960 2072 1
+4088 2072 -1
+5456 2072 -1
+5464 2072 1
+7063 2072 1
+7064 2072 -1
+9648 2072 38
+1060 2073 1
+1977 2073 -1
+2745 2073 -1
+3001 2073 1
+3961 2073 1
+4089 2073 -1
+5457 2073 -1
+5465 2073 1
+7065 2073 -1
+7072 2073 1
+9649 2073 38
+1061 2074 1
+1978 2074 -1
+2746 2074 -1
+3002 2074 1
+3962 2074 1
+4090 2074 -1
+5458 2074 -1
+5466 2074 1
+7065 2074 1
+7066 2074 -1
+9650 2074 38
+1062 2075 1
+1979 2075 -1
+2747 2075 -1
+3003 2075 1
+3963 2075 1
+4091 2075 -1
+5459 2075 -1
+5467 2075 1
+7066 2075 1
+7067 2075 -1
+9651 2075 38
+1063 2076 1
+1980 2076 -1
+2748 2076 -1
+3004 2076 1
+3964 2076 1
+4092 2076 -1
+5460 2076 -1
+5468 2076 1
+7067 2076 1
+7068 2076 -1
+9652 2076 38
+1064 2077 1
+1981 2077 -1
+2749 2077 -1
+3005 2077 1
+3965 2077 1
+4093 2077 -1
+5461 2077 -1
+5469 2077 1
+7068 2077 1
+7069 2077 -1
+9653 2077 38
+1057 2078 1
+1982 2078 -1
+2750 2078 -1
+3006 2078 1
+3966 2078 1
+4094 2078 -1
+5462 2078 -1
+5470 2078 1
+7069 2078 1
+7070 2078 -1
+9654 2078 38
+1058 2079 1
+1983 2079 -1
+2751 2079 -1
+3007 2079 1
+3967 2079 1
+4095 2079 -1
+5463 2079 -1
+5471 2079 1
+7070 2079 1
+7071 2079 -1
+9655 2079 38
+1059 2080 1
+1984 2080 -1
+2752 2080 -1
+3008 2080 1
+3968 2080 1
+4096 2080 -1
+5464 2080 -1
+5472 2080 1
+7071 2080 1
+7072 2080 -1
+9656 2080 38
+1068 2081 1
+1985 2081 -1
+2753 2081 -1
+3009 2081 1
+3969 2081 1
+4097 2081 -1
+5465 2081 -1
+5473 2081 1
+7073 2081 -1
+7080 2081 1
+9657 2081 38
+1069 2082 1
+1986 2082 -1
+2754 2082 -1
+3010 2082 1
+3970 2082 1
+4098 2082 -1
+5466 2082 -1
+5474 2082 1
+7073 2082 1
+7074 2082 -1
+9658 2082 38
+1070 2083 1
+1987 2083 -1
+2755 2083 -1
+3011 2083 1
+3971 2083 1
+4099 2083 -1
+5467 2083 -1
+5475 2083 1
+7074 2083 1
+7075 2083 -1
+9659 2083 38
+1071 2084 1
+1988 2084 -1
+2756 2084 -1
+3012 2084 1
+3972 2084 1
+4100 2084 -1
+5468 2084 -1
+5476 2084 1
+7075 2084 1
+7076 2084 -1
+9660 2084 38
+1072 2085 1
+1989 2085 -1
+2757 2085 -1
+3013 2085 1
+3973 2085 1
+4101 2085 -1
+5469 2085 -1
+5477 2085 1
+7076 2085 1
+7077 2085 -1
+9661 2085 38
+1065 2086 1
+1990 2086 -1
+2758 2086 -1
+3014 2086 1
+3974 2086 1
+4102 2086 -1
+5470 2086 -1
+5478 2086 1
+7077 2086 1
+7078 2086 -1
+9662 2086 38
+1066 2087 1
+1991 2087 -1
+2759 2087 -1
+3015 2087 1
+3975 2087 1
+4103 2087 -1
+5471 2087 -1
+5479 2087 1
+7078 2087 1
+7079 2087 -1
+9663 2087 38
+1067 2088 1
+1992 2088 -1
+2760 2088 -1
+3016 2088 1
+3976 2088 1
+4104 2088 -1
+5472 2088 -1
+5480 2088 1
+7079 2088 1
+7080 2088 -1
+9664 2088 38
+1076 2089 1
+1993 2089 -1
+2761 2089 -1
+3017 2089 1
+3977 2089 1
+4105 2089 -1
+5473 2089 -1
+5481 2089 1
+7081 2089 -1
+7088 2089 1
+9665 2089 38
+1077 2090 1
+1994 2090 -1
+2762 2090 -1
+3018 2090 1
+3978 2090 1
+4106 2090 -1
+5474 2090 -1
+5482 2090 1
+7081 2090 1
+7082 2090 -1
+9666 2090 38
+1078 2091 1
+1995 2091 -1
+2763 2091 -1
+3019 2091 1
+3979 2091 1
+4107 2091 -1
+5475 2091 -1
+5483 2091 1
+7082 2091 1
+7083 2091 -1
+9667 2091 38
+1079 2092 1
+1996 2092 -1
+2764 2092 -1
+3020 2092 1
+3980 2092 1
+4108 2092 -1
+5476 2092 -1
+5484 2092 1
+7083 2092 1
+7084 2092 -1
+9668 2092 38
+1080 2093 1
+1997 2093 -1
+2765 2093 -1
+3021 2093 1
+3981 2093 1
+4109 2093 -1
+5477 2093 -1
+5485 2093 1
+7084 2093 1
+7085 2093 -1
+9669 2093 38
+1073 2094 1
+1998 2094 -1
+2766 2094 -1
+3022 2094 1
+3982 2094 1
+4110 2094 -1
+5478 2094 -1
+5486 2094 1
+7085 2094 1
+7086 2094 -1
+9670 2094 38
+1074 2095 1
+1999 2095 -1
+2767 2095 -1
+3023 2095 1
+3983 2095 1
+4111 2095 -1
+5479 2095 -1
+5487 2095 1
+7086 2095 1
+7087 2095 -1
+9671 2095 38
+1075 2096 1
+2000 2096 -1
+2768 2096 -1
+3024 2096 1
+3984 2096 1
+4112 2096 -1
+5480 2096 -1
+5488 2096 1
+7087 2096 1
+7088 2096 -1
+9672 2096 38
+1084 2097 1
+2001 2097 -1
+2769 2097 -1
+3025 2097 1
+3985 2097 1
+4113 2097 -1
+5481 2097 -1
+5489 2097 1
+7089 2097 -1
+7096 2097 1
+9673 2097 38
+1085 2098 1
+2002 2098 -1
+2770 2098 -1
+3026 2098 1
+3986 2098 1
+4114 2098 -1
+5482 2098 -1
+5490 2098 1
+7089 2098 1
+7090 2098 -1
+9674 2098 38
+1086 2099 1
+2003 2099 -1
+2771 2099 -1
+3027 2099 1
+3987 2099 1
+4115 2099 -1
+5483 2099 -1
+5491 2099 1
+7090 2099 1
+7091 2099 -1
+9675 2099 38
+1087 2100 1
+2004 2100 -1
+2772 2100 -1
+3028 2100 1
+3988 2100 1
+4116 2100 -1
+5484 2100 -1
+5492 2100 1
+7091 2100 1
+7092 2100 -1
+9676 2100 38
+1088 2101 1
+2005 2101 -1
+2773 2101 -1
+3029 2101 1
+3989 2101 1
+4117 2101 -1
+5485 2101 -1
+5493 2101 1
+7092 2101 1
+7093 2101 -1
+9677 2101 38
+1081 2102 1
+2006 2102 -1
+2774 2102 -1
+3030 2102 1
+3990 2102 1
+4118 2102 -1
+5486 2102 -1
+5494 2102 1
+7093 2102 1
+7094 2102 -1
+9678 2102 38
+1082 2103 1
+2007 2103 -1
+2775 2103 -1
+3031 2103 1
+3991 2103 1
+4119 2103 -1
+5487 2103 -1
+5495 2103 1
+7094 2103 1
+7095 2103 -1
+9679 2103 38
+1083 2104 1
+2008 2104 -1
+2776 2104 -1
+3032 2104 1
+3992 2104 1
+4120 2104 -1
+5488 2104 -1
+5496 2104 1
+7095 2104 1
+7096 2104 -1
+9680 2104 38
+1092 2105 1
+2009 2105 -1
+2777 2105 -1
+3033 2105 1
+3993 2105 1
+4121 2105 -1
+5489 2105 -1
+5497 2105 1
+7097 2105 -1
+7104 2105 1
+9681 2105 38
+1093 2106 1
+2010 2106 -1
+2778 2106 -1
+3034 2106 1
+3994 2106 1
+4122 2106 -1
+5490 2106 -1
+5498 2106 1
+7097 2106 1
+7098 2106 -1
+9682 2106 38
+1094 2107 1
+2011 2107 -1
+2779 2107 -1
+3035 2107 1
+3995 2107 1
+4123 2107 -1
+5491 2107 -1
+5499 2107 1
+7098 2107 1
+7099 2107 -1
+9683 2107 38
+1095 2108 1
+2012 2108 -1
+2780 2108 -1
+3036 2108 1
+3996 2108 1
+4124 2108 -1
+5492 2108 -1
+5500 2108 1
+7099 2108 1
+7100 2108 -1
+9684 2108 38
+1096 2109 1
+2013 2109 -1
+2781 2109 -1
+3037 2109 1
+3997 2109 1
+4125 2109 -1
+5493 2109 -1
+5501 2109 1
+7100 2109 1
+7101 2109 -1
+9685 2109 38
+1089 2110 1
+2014 2110 -1
+2782 2110 -1
+3038 2110 1
+3998 2110 1
+4126 2110 -1
+5494 2110 -1
+5502 2110 1
+7101 2110 1
+7102 2110 -1
+9686 2110 38
+1090 2111 1
+2015 2111 -1
+2783 2111 -1
+3039 2111 1
+3999 2111 1
+4127 2111 -1
+5495 2111 -1
+5503 2111 1
+7102 2111 1
+7103 2111 -1
+9687 2111 38
+1091 2112 1
+2016 2112 -1
+2784 2112 -1
+3040 2112 1
+4000 2112 1
+4128 2112 -1
+5496 2112 -1
+5504 2112 1
+7103 2112 1
+7104 2112 -1
+9688 2112 38
+1100 2113 1
+2017 2113 -1
+2785 2113 -1
+3041 2113 1
+4001 2113 1
+4129 2113 -1
+5497 2113 -1
+5505 2113 1
+7105 2113 -1
+7112 2113 1
+9689 2113 38
+1101 2114 1
+2018 2114 -1
+2786 2114 -1
+3042 2114 1
+4002 2114 1
+4130 2114 -1
+5498 2114 -1
+5506 2114 1
+7105 2114 1
+7106 2114 -1
+9690 2114 38
+1102 2115 1
+2019 2115 -1
+2787 2115 -1
+3043 2115 1
+4003 2115 1
+4131 2115 -1
+5499 2115 -1
+5507 2115 1
+7106 2115 1
+7107 2115 -1
+9691 2115 38
+1103 2116 1
+2020 2116 -1
+2788 2116 -1
+3044 2116 1
+4004 2116 1
+4132 2116 -1
+5500 2116 -1
+5508 2116 1
+7107 2116 1
+7108 2116 -1
+9692 2116 38
+1104 2117 1
+2021 2117 -1
+2789 2117 -1
+3045 2117 1
+4005 2117 1
+4133 2117 -1
+5501 2117 -1
+5509 2117 1
+7108 2117 1
+7109 2117 -1
+9693 2117 38
+1097 2118 1
+2022 2118 -1
+2790 2118 -1
+3046 2118 1
+4006 2118 1
+4134 2118 -1
+5502 2118 -1
+5510 2118 1
+7109 2118 1
+7110 2118 -1
+9694 2118 38
+1098 2119 1
+2023 2119 -1
+2791 2119 -1
+3047 2119 1
+4007 2119 1
+4135 2119 -1
+5503 2119 -1
+5511 2119 1
+7110 2119 1
+7111 2119 -1
+9695 2119 38
+1099 2120 1
+2024 2120 -1
+2792 2120 -1
+3048 2120 1
+4008 2120 1
+4136 2120 -1
+5504 2120 -1
+5512 2120 1
+7111 2120 1
+7112 2120 -1
+9696 2120 38
+1108 2121 1
+2025 2121 -1
+2793 2121 -1
+3049 2121 1
+4009 2121 1
+4137 2121 -1
+5505 2121 -1
+5513 2121 1
+7113 2121 -1
+7120 2121 1
+9697 2121 38
+1109 2122 1
+2026 2122 -1
+2794 2122 -1
+3050 2122 1
+4010 2122 1
+4138 2122 -1
+5506 2122 -1
+5514 2122 1
+7113 2122 1
+7114 2122 -1
+9698 2122 38
+1110 2123 1
+2027 2123 -1
+2795 2123 -1
+3051 2123 1
+4011 2123 1
+4139 2123 -1
+5507 2123 -1
+5515 2123 1
+7114 2123 1
+7115 2123 -1
+9699 2123 38
+1111 2124 1
+2028 2124 -1
+2796 2124 -1
+3052 2124 1
+4012 2124 1
+4140 2124 -1
+5508 2124 -1
+5516 2124 1
+7115 2124 1
+7116 2124 -1
+9700 2124 38
+1112 2125 1
+2029 2125 -1
+2797 2125 -1
+3053 2125 1
+4013 2125 1
+4141 2125 -1
+5509 2125 -1
+5517 2125 1
+7116 2125 1
+7117 2125 -1
+9701 2125 38
+1105 2126 1
+2030 2126 -1
+2798 2126 -1
+3054 2126 1
+4014 2126 1
+4142 2126 -1
+5510 2126 -1
+5518 2126 1
+7117 2126 1
+7118 2126 -1
+9702 2126 38
+1106 2127 1
+2031 2127 -1
+2799 2127 -1
+3055 2127 1
+4015 2127 1
+4143 2127 -1
+5511 2127 -1
+5519 2127 1
+7118 2127 1
+7119 2127 -1
+9703 2127 38
+1107 2128 1
+2032 2128 -1
+2800 2128 -1
+3056 2128 1
+4016 2128 1
+4144 2128 -1
+5512 2128 -1
+5520 2128 1
+7119 2128 1
+7120 2128 -1
+9704 2128 38
+1116 2129 1
+2033 2129 -1
+2801 2129 -1
+3057 2129 1
+4017 2129 1
+4145 2129 -1
+5513 2129 -1
+5521 2129 1
+7121 2129 -1
+7128 2129 1
+9705 2129 38
+1117 2130 1
+2034 2130 -1
+2802 2130 -1
+3058 2130 1
+4018 2130 1
+4146 2130 -1
+5514 2130 -1
+5522 2130 1
+7121 2130 1
+7122 2130 -1
+9706 2130 38
+1118 2131 1
+2035 2131 -1
+2803 2131 -1
+3059 2131 1
+4019 2131 1
+4147 2131 -1
+5515 2131 -1
+5523 2131 1
+7122 2131 1
+7123 2131 -1
+9707 2131 38
+1119 2132 1
+2036 2132 -1
+2804 2132 -1
+3060 2132 1
+4020 2132 1
+4148 2132 -1
+5516 2132 -1
+5524 2132 1
+7123 2132 1
+7124 2132 -1
+9708 2132 38
+1120 2133 1
+2037 2133 -1
+2805 2133 -1
+3061 2133 1
+4021 2133 1
+4149 2133 -1
+5517 2133 -1
+5525 2133 1
+7124 2133 1
+7125 2133 -1
+9709 2133 38
+1113 2134 1
+2038 2134 -1
+2806 2134 -1
+3062 2134 1
+4022 2134 1
+4150 2134 -1
+5518 2134 -1
+5526 2134 1
+7125 2134 1
+7126 2134 -1
+9710 2134 38
+1114 2135 1
+2039 2135 -1
+2807 2135 -1
+3063 2135 1
+4023 2135 1
+4151 2135 -1
+5519 2135 -1
+5527 2135 1
+7126 2135 1
+7127 2135 -1
+9711 2135 38
+1115 2136 1
+2040 2136 -1
+2808 2136 -1
+3064 2136 1
+4024 2136 1
+4152 2136 -1
+5520 2136 -1
+5528 2136 1
+7127 2136 1
+7128 2136 -1
+9712 2136 38
+1124 2137 1
+2041 2137 -1
+2809 2137 -1
+3065 2137 1
+4025 2137 1
+4153 2137 -1
+5521 2137 -1
+5529 2137 1
+7129 2137 -1
+7136 2137 1
+9713 2137 38
+1125 2138 1
+2042 2138 -1
+2810 2138 -1
+3066 2138 1
+4026 2138 1
+4154 2138 -1
+5522 2138 -1
+5530 2138 1
+7129 2138 1
+7130 2138 -1
+9714 2138 38
+1126 2139 1
+2043 2139 -1
+2811 2139 -1
+3067 2139 1
+4027 2139 1
+4155 2139 -1
+5523 2139 -1
+5531 2139 1
+7130 2139 1
+7131 2139 -1
+9715 2139 38
+1127 2140 1
+2044 2140 -1
+2812 2140 -1
+3068 2140 1
+4028 2140 1
+4156 2140 -1
+5524 2140 -1
+5532 2140 1
+7131 2140 1
+7132 2140 -1
+9716 2140 38
+1128 2141 1
+2045 2141 -1
+2813 2141 -1
+3069 2141 1
+4029 2141 1
+4157 2141 -1
+5525 2141 -1
+5533 2141 1
+7132 2141 1
+7133 2141 -1
+9717 2141 38
+1121 2142 1
+2046 2142 -1
+2814 2142 -1
+3070 2142 1
+4030 2142 1
+4158 2142 -1
+5526 2142 -1
+5534 2142 1
+7133 2142 1
+7134 2142 -1
+9718 2142 38
+1122 2143 1
+2047 2143 -1
+2815 2143 -1
+3071 2143 1
+4031 2143 1
+4159 2143 -1
+5527 2143 -1
+5535 2143 1
+7134 2143 1
+7135 2143 -1
+9719 2143 38
+1123 2144 1
+2048 2144 -1
+2816 2144 -1
+3072 2144 1
+4032 2144 1
+4160 2144 -1
+5528 2144 -1
+5536 2144 1
+7135 2144 1
+7136 2144 -1
+9720 2144 38
+1132 2145 1
+2049 2145 -1
+2817 2145 -1
+3073 2145 1
+4033 2145 1
+4161 2145 -1
+5529 2145 -1
+5537 2145 1
+7137 2145 -1
+7144 2145 1
+9721 2145 38
+1133 2146 1
+2050 2146 -1
+2818 2146 -1
+3074 2146 1
+4034 2146 1
+4162 2146 -1
+5530 2146 -1
+5538 2146 1
+7137 2146 1
+7138 2146 -1
+9722 2146 38
+1134 2147 1
+2051 2147 -1
+2819 2147 -1
+3075 2147 1
+4035 2147 1
+4163 2147 -1
+5531 2147 -1
+5539 2147 1
+7138 2147 1
+7139 2147 -1
+9723 2147 38
+1135 2148 1
+2052 2148 -1
+2820 2148 -1
+3076 2148 1
+4036 2148 1
+4164 2148 -1
+5532 2148 -1
+5540 2148 1
+7139 2148 1
+7140 2148 -1
+9724 2148 38
+1136 2149 1
+2053 2149 -1
+2821 2149 -1
+3077 2149 1
+4037 2149 1
+4165 2149 -1
+5533 2149 -1
+5541 2149 1
+7140 2149 1
+7141 2149 -1
+9725 2149 38
+1129 2150 1
+2054 2150 -1
+2822 2150 -1
+3078 2150 1
+4038 2150 1
+4166 2150 -1
+5534 2150 -1
+5542 2150 1
+7141 2150 1
+7142 2150 -1
+9726 2150 38
+1130 2151 1
+2055 2151 -1
+2823 2151 -1
+3079 2151 1
+4039 2151 1
+4167 2151 -1
+5535 2151 -1
+5543 2151 1
+7142 2151 1
+7143 2151 -1
+9727 2151 38
+1131 2152 1
+2056 2152 -1
+2824 2152 -1
+3080 2152 1
+4040 2152 1
+4168 2152 -1
+5536 2152 -1
+5544 2152 1
+7143 2152 1
+7144 2152 -1
+9728 2152 38
+1140 2153 1
+2057 2153 -1
+2825 2153 -1
+3081 2153 1
+4041 2153 1
+4169 2153 -1
+5537 2153 -1
+5545 2153 1
+7145 2153 -1
+7152 2153 1
+9729 2153 38
+1141 2154 1
+2058 2154 -1
+2826 2154 -1
+3082 2154 1
+4042 2154 1
+4170 2154 -1
+5538 2154 -1
+5546 2154 1
+7145 2154 1
+7146 2154 -1
+9730 2154 38
+1142 2155 1
+2059 2155 -1
+2827 2155 -1
+3083 2155 1
+4043 2155 1
+4171 2155 -1
+5539 2155 -1
+5547 2155 1
+7146 2155 1
+7147 2155 -1
+9731 2155 38
+1143 2156 1
+2060 2156 -1
+2828 2156 -1
+3084 2156 1
+4044 2156 1
+4172 2156 -1
+5540 2156 -1
+5548 2156 1
+7147 2156 1
+7148 2156 -1
+9732 2156 38
+1144 2157 1
+2061 2157 -1
+2829 2157 -1
+3085 2157 1
+4045 2157 1
+4173 2157 -1
+5541 2157 -1
+5549 2157 1
+7148 2157 1
+7149 2157 -1
+9733 2157 38
+1137 2158 1
+2062 2158 -1
+2830 2158 -1
+3086 2158 1
+4046 2158 1
+4174 2158 -1
+5542 2158 -1
+5550 2158 1
+7149 2158 1
+7150 2158 -1
+9734 2158 38
+1138 2159 1
+2063 2159 -1
+2831 2159 -1
+3087 2159 1
+4047 2159 1
+4175 2159 -1
+5543 2159 -1
+5551 2159 1
+7150 2159 1
+7151 2159 -1
+9735 2159 38
+1139 2160 1
+2064 2160 -1
+2832 2160 -1
+3088 2160 1
+4048 2160 1
+4176 2160 -1
+5544 2160 -1
+5552 2160 1
+7151 2160 1
+7152 2160 -1
+9736 2160 38
+1148 2161 1
+2065 2161 -1
+2833 2161 -1
+3089 2161 1
+4049 2161 1
+4177 2161 -1
+5545 2161 -1
+5553 2161 1
+7153 2161 -1
+7160 2161 1
+9737 2161 38
+1149 2162 1
+2066 2162 -1
+2834 2162 -1
+3090 2162 1
+4050 2162 1
+4178 2162 -1
+5546 2162 -1
+5554 2162 1
+7153 2162 1
+7154 2162 -1
+9738 2162 38
+1150 2163 1
+2067 2163 -1
+2835 2163 -1
+3091 2163 1
+4051 2163 1
+4179 2163 -1
+5547 2163 -1
+5555 2163 1
+7154 2163 1
+7155 2163 -1
+9739 2163 38
+1151 2164 1
+2068 2164 -1
+2836 2164 -1
+3092 2164 1
+4052 2164 1
+4180 2164 -1
+5548 2164 -1
+5556 2164 1
+7155 2164 1
+7156 2164 -1
+9740 2164 38
+1152 2165 1
+2069 2165 -1
+2837 2165 -1
+3093 2165 1
+4053 2165 1
+4181 2165 -1
+5549 2165 -1
+5557 2165 1
+7156 2165 1
+7157 2165 -1
+9741 2165 38
+1145 2166 1
+2070 2166 -1
+2838 2166 -1
+3094 2166 1
+4054 2166 1
+4182 2166 -1
+5550 2166 -1
+5558 2166 1
+7157 2166 1
+7158 2166 -1
+9742 2166 38
+1146 2167 1
+2071 2167 -1
+2839 2167 -1
+3095 2167 1
+4055 2167 1
+4183 2167 -1
+5551 2167 -1
+5559 2167 1
+7158 2167 1
+7159 2167 -1
+9743 2167 38
+1147 2168 1
+2072 2168 -1
+2840 2168 -1
+3096 2168 1
+4056 2168 1
+4184 2168 -1
+5552 2168 -1
+5560 2168 1
+7159 2168 1
+7160 2168 -1
+9744 2168 38
+1156 2169 1
+2073 2169 -1
+2841 2169 -1
+3097 2169 1
+4057 2169 1
+4185 2169 -1
+5553 2169 -1
+5561 2169 1
+7161 2169 -1
+7168 2169 1
+9745 2169 38
+1157 2170 1
+2074 2170 -1
+2842 2170 -1
+3098 2170 1
+4058 2170 1
+4186 2170 -1
+5554 2170 -1
+5562 2170 1
+7161 2170 1
+7162 2170 -1
+9746 2170 38
+1158 2171 1
+2075 2171 -1
+2843 2171 -1
+3099 2171 1
+4059 2171 1
+4187 2171 -1
+5555 2171 -1
+5563 2171 1
+7162 2171 1
+7163 2171 -1
+9747 2171 38
+1159 2172 1
+2076 2172 -1
+2844 2172 -1
+3100 2172 1
+4060 2172 1
+4188 2172 -1
+5556 2172 -1
+5564 2172 1
+7163 2172 1
+7164 2172 -1
+9748 2172 38
+1160 2173 1
+2077 2173 -1
+2845 2173 -1
+3101 2173 1
+4061 2173 1
+4189 2173 -1
+5557 2173 -1
+5565 2173 1
+7164 2173 1
+7165 2173 -1
+9749 2173 38
+1153 2174 1
+2078 2174 -1
+2846 2174 -1
+3102 2174 1
+4062 2174 1
+4190 2174 -1
+5558 2174 -1
+5566 2174 1
+7165 2174 1
+7166 2174 -1
+9750 2174 38
+1154 2175 1
+2079 2175 -1
+2847 2175 -1
+3103 2175 1
+4063 2175 1
+4191 2175 -1
+5559 2175 -1
+5567 2175 1
+7166 2175 1
+7167 2175 -1
+9751 2175 38
+1155 2176 1
+2080 2176 -1
+2848 2176 -1
+3104 2176 1
+4064 2176 1
+4192 2176 -1
+5560 2176 -1
+5568 2176 1
+7167 2176 1
+7168 2176 -1
+9752 2176 38
+2081 2177 1
+2085 2177 1
+2113 2177 1
+2117 2177 1
+2145 2177 1
+2149 2177 1
+2177 2177 1
+2181 2177 1
+2476 2177 1
+2480 2177 1
+2508 2177 1
+2512 2177 1
+2540 2177 1
+2544 2177 1
+2572 2177 1
+2576 2177 1
+2611 2177 1
+2615 2177 1
+2643 2177 1
+2647 2177 1
+2675 2177 1
+2679 2177 1
+2707 2177 1
+2711 2177 1
+3002 2177 1
+3006 2177 1
+3034 2177 1
+3038 2177 1
+3066 2177 1
+3070 2177 1
+3098 2177 1
+3102 2177 1
+4193 2177 -1
+4209 2177 1
+5569 2177 1
+5581 2177 -1
+7169 2177 -1
+7172 2177 1
+9753 2177 38
+2082 2178 1
+2086 2178 1
+2114 2178 1
+2118 2178 1
+2146 2178 1
+2150 2178 1
+2178 2178 1
+2182 2178 1
+2473 2178 1
+2477 2178 1
+2505 2178 1
+2509 2178 1
+2537 2178 1
+2541 2178 1
+2569 2178 1
+2573 2178 1
+2612 2178 1
+2616 2178 1
+2644 2178 1
+2648 2178 1
+2676 2178 1
+2680 2178 1
+2708 2178 1
+2712 2178 1
+3003 2178 1
+3007 2178 1
+3035 2178 1
+3039 2178 1
+3067 2178 1
+3071 2178 1
+3099 2178 1
+3103 2178 1
+4194 2178 -1
+4210 2178 1
+5570 2178 1
+5582 2178 -1
+7169 2178 1
+7170 2178 -1
+9754 2178 38
+2083 2179 1
+2087 2179 1
+2115 2179 1
+2119 2179 1
+2147 2179 1
+2151 2179 1
+2179 2179 1
+2183 2179 1
+2474 2179 1
+2478 2179 1
+2506 2179 1
+2510 2179 1
+2538 2179 1
+2542 2179 1
+2570 2179 1
+2574 2179 1
+2609 2179 1
+2613 2179 1
+2641 2179 1
+2645 2179 1
+2673 2179 1
+2677 2179 1
+2705 2179 1
+2709 2179 1
+3004 2179 1
+3008 2179 1
+3036 2179 1
+3040 2179 1
+3068 2179 1
+3072 2179 1
+3100 2179 1
+3104 2179 1
+4195 2179 -1
+4211 2179 1
+5571 2179 1
+5583 2179 -1
+7170 2179 1
+7171 2179 -1
+9755 2179 38
+2084 2180 1
+2088 2180 1
+2116 2180 1
+2120 2180 1
+2148 2180 1
+2152 2180 1
+2180 2180 1
+2184 2180 1
+2475 2180 1
+2479 2180 1
+2507 2180 1
+2511 2180 1
+2539 2180 1
+2543 2180 1
+2571 2180 1
+2575 2180 1
+2610 2180 1
+2614 2180 1
+2642 2180 1
+2646 2180 1
+2674 2180 1
+2678 2180 1
+2706 2180 1
+2710 2180 1
+3001 2180 1
+3005 2180 1
+3033 2180 1
+3037 2180 1
+3065 2180 1
+3069 2180 1
+3097 2180 1
+3101 2180 1
+4196 2180 -1
+4212 2180 1
+5572 2180 1
+5584 2180 -1
+7171 2180 1
+7172 2180 -1
+9756 2180 38
+2089 2181 1
+2093 2181 1
+2121 2181 1
+2125 2181 1
+2153 2181 1
+2157 2181 1
+2185 2181 1
+2189 2181 1
+2484 2181 1
+2488 2181 1
+2516 2181 1
+2520 2181 1
+2548 2181 1
+2552 2181 1
+2580 2181 1
+2584 2181 1
+2619 2181 1
+2623 2181 1
+2651 2181 1
+2655 2181 1
+2683 2181 1
+2687 2181 1
+2715 2181 1
+2719 2181 1
+2978 2181 1
+2982 2181 1
+3010 2181 1
+3014 2181 1
+3042 2181 1
+3046 2181 1
+3074 2181 1
+3078 2181 1
+4197 2181 -1
+4213 2181 1
+5569 2181 -1
+5573 2181 1
+7173 2181 -1
+7176 2181 1
+9757 2181 38
+2090 2182 1
+2094 2182 1
+2122 2182 1
+2126 2182 1
+2154 2182 1
+2158 2182 1
+2186 2182 1
+2190 2182 1
+2481 2182 1
+2485 2182 1
+2513 2182 1
+2517 2182 1
+2545 2182 1
+2549 2182 1
+2577 2182 1
+2581 2182 1
+2620 2182 1
+2624 2182 1
+2652 2182 1
+2656 2182 1
+2684 2182 1
+2688 2182 1
+2716 2182 1
+2720 2182 1
+2979 2182 1
+2983 2182 1
+3011 2182 1
+3015 2182 1
+3043 2182 1
+3047 2182 1
+3075 2182 1
+3079 2182 1
+4198 2182 -1
+4214 2182 1
+5570 2182 -1
+5574 2182 1
+7173 2182 1
+7174 2182 -1
+9758 2182 38
+2091 2183 1
+2095 2183 1
+2123 2183 1
+2127 2183 1
+2155 2183 1
+2159 2183 1
+2187 2183 1
+2191 2183 1
+2482 2183 1
+2486 2183 1
+2514 2183 1
+2518 2183 1
+2546 2183 1
+2550 2183 1
+2578 2183 1
+2582 2183 1
+2617 2183 1
+2621 2183 1
+2649 2183 1
+2653 2183 1
+2681 2183 1
+2685 2183 1
+2713 2183 1
+2717 2183 1
+2980 2183 1
+2984 2183 1
+3012 2183 1
+3016 2183 1
+3044 2183 1
+3048 2183 1
+3076 2183 1
+3080 2183 1
+4199 2183 -1
+4215 2183 1
+5571 2183 -1
+5575 2183 1
+7174 2183 1
+7175 2183 -1
+9759 2183 38
+2092 2184 1
+2096 2184 1
+2124 2184 1
+2128 2184 1
+2156 2184 1
+2160 2184 1
+2188 2184 1
+2192 2184 1
+2483 2184 1
+2487 2184 1
+2515 2184 1
+2519 2184 1
+2547 2184 1
+2551 2184 1
+2579 2184 1
+2583 2184 1
+2618 2184 1
+2622 2184 1
+2650 2184 1
+2654 2184 1
+2682 2184 1
+2686 2184 1
+2714 2184 1
+2718 2184 1
+2977 2184 1
+2981 2184 1
+3009 2184 1
+3013 2184 1
+3041 2184 1
+3045 2184 1
+3073 2184 1
+3077 2184 1
+4200 2184 -1
+4216 2184 1
+5572 2184 -1
+5576 2184 1
+7175 2184 1
+7176 2184 -1
+9760 2184 38
+2097 2185 1
+2101 2185 1
+2129 2185 1
+2133 2185 1
+2161 2185 1
+2165 2185 1
+2193 2185 1
+2197 2185 1
+2492 2185 1
+2496 2185 1
+2524 2185 1
+2528 2185 1
+2556 2185 1
+2560 2185 1
+2588 2185 1
+2592 2185 1
+2595 2185 1
+2599 2185 1
+2627 2185 1
+2631 2185 1
+2659 2185 1
+2663 2185 1
+2691 2185 1
+2695 2185 1
+2986 2185 1
+2990 2185 1
+3018 2185 1
+3022 2185 1
+3050 2185 1
+3054 2185 1
+3082 2185 1
+3086 2185 1
+4201 2185 -1
+4217 2185 1
+5573 2185 -1
+5577 2185 1
+7177 2185 -1
+7180 2185 1
+9761 2185 38
+2098 2186 1
+2102 2186 1
+2130 2186 1
+2134 2186 1
+2162 2186 1
+2166 2186 1
+2194 2186 1
+2198 2186 1
+2489 2186 1
+2493 2186 1
+2521 2186 1
+2525 2186 1
+2553 2186 1
+2557 2186 1
+2585 2186 1
+2589 2186 1
+2596 2186 1
+2600 2186 1
+2628 2186 1
+2632 2186 1
+2660 2186 1
+2664 2186 1
+2692 2186 1
+2696 2186 1
+2987 2186 1
+2991 2186 1
+3019 2186 1
+3023 2186 1
+3051 2186 1
+3055 2186 1
+3083 2186 1
+3087 2186 1
+4202 2186 -1
+4218 2186 1
+5574 2186 -1
+5578 2186 1
+7177 2186 1
+7178 2186 -1
+9762 2186 38
+2099 2187 1
+2103 2187 1
+2131 2187 1
+2135 2187 1
+2163 2187 1
+2167 2187 1
+2195 2187 1
+2199 2187 1
+2490 2187 1
+2494 2187 1
+2522 2187 1
+2526 2187 1
+2554 2187 1
+2558 2187 1
+2586 2187 1
+2590 2187 1
+2593 2187 1
+2597 2187 1
+2625 2187 1
+2629 2187 1
+2657 2187 1
+2661 2187 1
+2689 2187 1
+2693 2187 1
+2988 2187 1
+2992 2187 1
+3020 2187 1
+3024 2187 1
+3052 2187 1
+3056 2187 1
+3084 2187 1
+3088 2187 1
+4203 2187 -1
+4219 2187 1
+5575 2187 -1
+5579 2187 1
+7178 2187 1
+7179 2187 -1
+9763 2187 38
+2100 2188 1
+2104 2188 1
+2132 2188 1
+2136 2188 1
+2164 2188 1
+2168 2188 1
+2196 2188 1
+2200 2188 1
+2491 2188 1
+2495 2188 1
+2523 2188 1
+2527 2188 1
+2555 2188 1
+2559 2188 1
+2587 2188 1
+2591 2188 1
+2594 2188 1
+2598 2188 1
+2626 2188 1
+2630 2188 1
+2658 2188 1
+2662 2188 1
+2690 2188 1
+2694 2188 1
+2985 2188 1
+2989 2188 1
+3017 2188 1
+3021 2188 1
+3049 2188 1
+3053 2188 1
+3081 2188 1
+3085 2188 1
+4204 2188 -1
+4220 2188 1
+5576 2188 -1
+5580 2188 1
+7179 2188 1
+7180 2188 -1
+9764 2188 38
+2105 2189 1
+2109 2189 1
+2137 2189 1
+2141 2189 1
+2169 2189 1
+2173 2189 1
+2201 2189 1
+2205 2189 1
+2468 2189 1
+2472 2189 1
+2500 2189 1
+2504 2189 1
+2532 2189 1
+2536 2189 1
+2564 2189 1
+2568 2189 1
+2603 2189 1
+2607 2189 1
+2635 2189 1
+2639 2189 1
+2667 2189 1
+2671 2189 1
+2699 2189 1
+2703 2189 1
+2994 2189 1
+2998 2189 1
+3026 2189 1
+3030 2189 1
+3058 2189 1
+3062 2189 1
+3090 2189 1
+3094 2189 1
+4205 2189 -1
+4221 2189 1
+5577 2189 -1
+5581 2189 1
+7181 2189 -1
+7184 2189 1
+9765 2189 38
+2106 2190 1
+2110 2190 1
+2138 2190 1
+2142 2190 1
+2170 2190 1
+2174 2190 1
+2202 2190 1
+2206 2190 1
+2465 2190 1
+2469 2190 1
+2497 2190 1
+2501 2190 1
+2529 2190 1
+2533 2190 1
+2561 2190 1
+2565 2190 1
+2604 2190 1
+2608 2190 1
+2636 2190 1
+2640 2190 1
+2668 2190 1
+2672 2190 1
+2700 2190 1
+2704 2190 1
+2995 2190 1
+2999 2190 1
+3027 2190 1
+3031 2190 1
+3059 2190 1
+3063 2190 1
+3091 2190 1
+3095 2190 1
+4206 2190 -1
+4222 2190 1
+5578 2190 -1
+5582 2190 1
+7181 2190 1
+7182 2190 -1
+9766 2190 38
+2107 2191 1
+2111 2191 1
+2139 2191 1
+2143 2191 1
+2171 2191 1
+2175 2191 1
+2203 2191 1
+2207 2191 1
+2466 2191 1
+2470 2191 1
+2498 2191 1
+2502 2191 1
+2530 2191 1
+2534 2191 1
+2562 2191 1
+2566 2191 1
+2601 2191 1
+2605 2191 1
+2633 2191 1
+2637 2191 1
+2665 2191 1
+2669 2191 1
+2697 2191 1
+2701 2191 1
+2996 2191 1
+3000 2191 1
+3028 2191 1
+3032 2191 1
+3060 2191 1
+3064 2191 1
+3092 2191 1
+3096 2191 1
+4207 2191 -1
+4223 2191 1
+5579 2191 -1
+5583 2191 1
+7182 2191 1
+7183 2191 -1
+9767 2191 38
+2108 2192 1
+2112 2192 1
+2140 2192 1
+2144 2192 1
+2172 2192 1
+2176 2192 1
+2204 2192 1
+2208 2192 1
+2467 2192 1
+2471 2192 1
+2499 2192 1
+2503 2192 1
+2531 2192 1
+2535 2192 1
+2563 2192 1
+2567 2192 1
+2602 2192 1
+2606 2192 1
+2634 2192 1
+2638 2192 1
+2666 2192 1
+2670 2192 1
+2698 2192 1
+2702 2192 1
+2993 2192 1
+2997 2192 1
+3025 2192 1
+3029 2192 1
+3057 2192 1
+3061 2192 1
+3089 2192 1
+3093 2192 1
+4208 2192 -1
+4224 2192 1
+5580 2192 -1
+5584 2192 1
+7183 2192 1
+7184 2192 -1
+9768 2192 38
+2209 2193 1
+2213 2193 1
+2241 2193 1
+2245 2193 1
+2273 2193 1
+2277 2193 1
+2305 2193 1
+2309 2193 1
+2348 2193 1
+2352 2193 1
+2380 2193 1
+2384 2193 1
+2412 2193 1
+2416 2193 1
+2444 2193 1
+2448 2193 1
+2739 2193 1
+2743 2193 1
+2771 2193 1
+2775 2193 1
+2803 2193 1
+2807 2193 1
+2835 2193 1
+2839 2193 1
+2874 2193 1
+2878 2193 1
+2906 2193 1
+2910 2193 1
+2938 2193 1
+2942 2193 1
+2970 2193 1
+2974 2193 1
+4193 2193 1
+4209 2193 -1
+5585 2193 1
+5597 2193 -1
+7185 2193 -1
+7188 2193 1
+9769 2193 38
+2210 2194 1
+2214 2194 1
+2242 2194 1
+2246 2194 1
+2274 2194 1
+2278 2194 1
+2306 2194 1
+2310 2194 1
+2345 2194 1
+2349 2194 1
+2377 2194 1
+2381 2194 1
+2409 2194 1
+2413 2194 1
+2441 2194 1
+2445 2194 1
+2740 2194 1
+2744 2194 1
+2772 2194 1
+2776 2194 1
+2804 2194 1
+2808 2194 1
+2836 2194 1
+2840 2194 1
+2875 2194 1
+2879 2194 1
+2907 2194 1
+2911 2194 1
+2939 2194 1
+2943 2194 1
+2971 2194 1
+2975 2194 1
+4194 2194 1
+4210 2194 -1
+5586 2194 1
+5598 2194 -1
+7185 2194 1
+7186 2194 -1
+9770 2194 38
+2211 2195 1
+2215 2195 1
+2243 2195 1
+2247 2195 1
+2275 2195 1
+2279 2195 1
+2307 2195 1
+2311 2195 1
+2346 2195 1
+2350 2195 1
+2378 2195 1
+2382 2195 1
+2410 2195 1
+2414 2195 1
+2442 2195 1
+2446 2195 1
+2737 2195 1
+2741 2195 1
+2769 2195 1
+2773 2195 1
+2801 2195 1
+2805 2195 1
+2833 2195 1
+2837 2195 1
+2876 2195 1
+2880 2195 1
+2908 2195 1
+2912 2195 1
+2940 2195 1
+2944 2195 1
+2972 2195 1
+2976 2195 1
+4195 2195 1
+4211 2195 -1
+5587 2195 1
+5599 2195 -1
+7186 2195 1
+7187 2195 -1
+9771 2195 38
+2212 2196 1
+2216 2196 1
+2244 2196 1
+2248 2196 1
+2276 2196 1
+2280 2196 1
+2308 2196 1
+2312 2196 1
+2347 2196 1
+2351 2196 1
+2379 2196 1
+2383 2196 1
+2411 2196 1
+2415 2196 1
+2443 2196 1
+2447 2196 1
+2738 2196 1
+2742 2196 1
+2770 2196 1
+2774 2196 1
+2802 2196 1
+2806 2196 1
+2834 2196 1
+2838 2196 1
+2873 2196 1
+2877 2196 1
+2905 2196 1
+2909 2196 1
+2937 2196 1
+2941 2196 1
+2969 2196 1
+2973 2196 1
+4196 2196 1
+4212 2196 -1
+5588 2196 1
+5600 2196 -1
+7187 2196 1
+7188 2196 -1
+9772 2196 38
+2217 2197 1
+2221 2197 1
+2249 2197 1
+2253 2197 1
+2281 2197 1
+2285 2197 1
+2313 2197 1
+2317 2197 1
+2356 2197 1
+2360 2197 1
+2388 2197 1
+2392 2197 1
+2420 2197 1
+2424 2197 1
+2452 2197 1
+2456 2197 1
+2747 2197 1
+2751 2197 1
+2779 2197 1
+2783 2197 1
+2811 2197 1
+2815 2197 1
+2843 2197 1
+2847 2197 1
+2850 2197 1
+2854 2197 1
+2882 2197 1
+2886 2197 1
+2914 2197 1
+2918 2197 1
+2946 2197 1
+2950 2197 1
+4197 2197 1
+4213 2197 -1
+5585 2197 -1
+5589 2197 1
+7189 2197 -1
+7192 2197 1
+9773 2197 38
+2218 2198 1
+2222 2198 1
+2250 2198 1
+2254 2198 1
+2282 2198 1
+2286 2198 1
+2314 2198 1
+2318 2198 1
+2353 2198 1
+2357 2198 1
+2385 2198 1
+2389 2198 1
+2417 2198 1
+2421 2198 1
+2449 2198 1
+2453 2198 1
+2748 2198 1
+2752 2198 1
+2780 2198 1
+2784 2198 1
+2812 2198 1
+2816 2198 1
+2844 2198 1
+2848 2198 1
+2851 2198 1
+2855 2198 1
+2883 2198 1
+2887 2198 1
+2915 2198 1
+2919 2198 1
+2947 2198 1
+2951 2198 1
+4198 2198 1
+4214 2198 -1
+5586 2198 -1
+5590 2198 1
+7189 2198 1
+7190 2198 -1
+9774 2198 38
+2219 2199 1
+2223 2199 1
+2251 2199 1
+2255 2199 1
+2283 2199 1
+2287 2199 1
+2315 2199 1
+2319 2199 1
+2354 2199 1
+2358 2199 1
+2386 2199 1
+2390 2199 1
+2418 2199 1
+2422 2199 1
+2450 2199 1
+2454 2199 1
+2745 2199 1
+2749 2199 1
+2777 2199 1
+2781 2199 1
+2809 2199 1
+2813 2199 1
+2841 2199 1
+2845 2199 1
+2852 2199 1
+2856 2199 1
+2884 2199 1
+2888 2199 1
+2916 2199 1
+2920 2199 1
+2948 2199 1
+2952 2199 1
+4199 2199 1
+4215 2199 -1
+5587 2199 -1
+5591 2199 1
+7190 2199 1
+7191 2199 -1
+9775 2199 38
+2220 2200 1
+2224 2200 1
+2252 2200 1
+2256 2200 1
+2284 2200 1
+2288 2200 1
+2316 2200 1
+2320 2200 1
+2355 2200 1
+2359 2200 1
+2387 2200 1
+2391 2200 1
+2419 2200 1
+2423 2200 1
+2451 2200 1
+2455 2200 1
+2746 2200 1
+2750 2200 1
+2778 2200 1
+2782 2200 1
+2810 2200 1
+2814 2200 1
+2842 2200 1
+2846 2200 1
+2849 2200 1
+2853 2200 1
+2881 2200 1
+2885 2200 1
+2913 2200 1
+2917 2200 1
+2945 2200 1
+2949 2200 1
+4200 2200 1
+4216 2200 -1
+5588 2200 -1
+5592 2200 1
+7191 2200 1
+7192 2200 -1
+9776 2200 38
+2225 2201 1
+2229 2201 1
+2257 2201 1
+2261 2201 1
+2289 2201 1
+2293 2201 1
+2321 2201 1
+2325 2201 1
+2364 2201 1
+2368 2201 1
+2396 2201 1
+2400 2201 1
+2428 2201 1
+2432 2201 1
+2460 2201 1
+2464 2201 1
+2723 2201 1
+2727 2201 1
+2755 2201 1
+2759 2201 1
+2787 2201 1
+2791 2201 1
+2819 2201 1
+2823 2201 1
+2858 2201 1
+2862 2201 1
+2890 2201 1
+2894 2201 1
+2922 2201 1
+2926 2201 1
+2954 2201 1
+2958 2201 1
+4201 2201 1
+4217 2201 -1
+5589 2201 -1
+5593 2201 1
+7193 2201 -1
+7196 2201 1
+9777 2201 38
+2226 2202 1
+2230 2202 1
+2258 2202 1
+2262 2202 1
+2290 2202 1
+2294 2202 1
+2322 2202 1
+2326 2202 1
+2361 2202 1
+2365 2202 1
+2393 2202 1
+2397 2202 1
+2425 2202 1
+2429 2202 1
+2457 2202 1
+2461 2202 1
+2724 2202 1
+2728 2202 1
+2756 2202 1
+2760 2202 1
+2788 2202 1
+2792 2202 1
+2820 2202 1
+2824 2202 1
+2859 2202 1
+2863 2202 1
+2891 2202 1
+2895 2202 1
+2923 2202 1
+2927 2202 1
+2955 2202 1
+2959 2202 1
+4202 2202 1
+4218 2202 -1
+5590 2202 -1
+5594 2202 1
+7193 2202 1
+7194 2202 -1
+9778 2202 38
+2227 2203 1
+2231 2203 1
+2259 2203 1
+2263 2203 1
+2291 2203 1
+2295 2203 1
+2323 2203 1
+2327 2203 1
+2362 2203 1
+2366 2203 1
+2394 2203 1
+2398 2203 1
+2426 2203 1
+2430 2203 1
+2458 2203 1
+2462 2203 1
+2721 2203 1
+2725 2203 1
+2753 2203 1
+2757 2203 1
+2785 2203 1
+2789 2203 1
+2817 2203 1
+2821 2203 1
+2860 2203 1
+2864 2203 1
+2892 2203 1
+2896 2203 1
+2924 2203 1
+2928 2203 1
+2956 2203 1
+2960 2203 1
+4203 2203 1
+4219 2203 -1
+5591 2203 -1
+5595 2203 1
+7194 2203 1
+7195 2203 -1
+9779 2203 38
+2228 2204 1
+2232 2204 1
+2260 2204 1
+2264 2204 1
+2292 2204 1
+2296 2204 1
+2324 2204 1
+2328 2204 1
+2363 2204 1
+2367 2204 1
+2395 2204 1
+2399 2204 1
+2427 2204 1
+2431 2204 1
+2459 2204 1
+2463 2204 1
+2722 2204 1
+2726 2204 1
+2754 2204 1
+2758 2204 1
+2786 2204 1
+2790 2204 1
+2818 2204 1
+2822 2204 1
+2857 2204 1
+2861 2204 1
+2889 2204 1
+2893 2204 1
+2921 2204 1
+2925 2204 1
+2953 2204 1
+2957 2204 1
+4204 2204 1
+4220 2204 -1
+5592 2204 -1
+5596 2204 1
+7195 2204 1
+7196 2204 -1
+9780 2204 38
+2233 2205 1
+2237 2205 1
+2265 2205 1
+2269 2205 1
+2297 2205 1
+2301 2205 1
+2329 2205 1
+2333 2205 1
+2340 2205 1
+2344 2205 1
+2372 2205 1
+2376 2205 1
+2404 2205 1
+2408 2205 1
+2436 2205 1
+2440 2205 1
+2731 2205 1
+2735 2205 1
+2763 2205 1
+2767 2205 1
+2795 2205 1
+2799 2205 1
+2827 2205 1
+2831 2205 1
+2866 2205 1
+2870 2205 1
+2898 2205 1
+2902 2205 1
+2930 2205 1
+2934 2205 1
+2962 2205 1
+2966 2205 1
+4205 2205 1
+4221 2205 -1
+5593 2205 -1
+5597 2205 1
+7197 2205 -1
+7200 2205 1
+9781 2205 38
+2234 2206 1
+2238 2206 1
+2266 2206 1
+2270 2206 1
+2298 2206 1
+2302 2206 1
+2330 2206 1
+2334 2206 1
+2337 2206 1
+2341 2206 1
+2369 2206 1
+2373 2206 1
+2401 2206 1
+2405 2206 1
+2433 2206 1
+2437 2206 1
+2732 2206 1
+2736 2206 1
+2764 2206 1
+2768 2206 1
+2796 2206 1
+2800 2206 1
+2828 2206 1
+2832 2206 1
+2867 2206 1
+2871 2206 1
+2899 2206 1
+2903 2206 1
+2931 2206 1
+2935 2206 1
+2963 2206 1
+2967 2206 1
+4206 2206 1
+4222 2206 -1
+5594 2206 -1
+5598 2206 1
+7197 2206 1
+7198 2206 -1
+9782 2206 38
+2235 2207 1
+2239 2207 1
+2267 2207 1
+2271 2207 1
+2299 2207 1
+2303 2207 1
+2331 2207 1
+2335 2207 1
+2338 2207 1
+2342 2207 1
+2370 2207 1
+2374 2207 1
+2402 2207 1
+2406 2207 1
+2434 2207 1
+2438 2207 1
+2729 2207 1
+2733 2207 1
+2761 2207 1
+2765 2207 1
+2793 2207 1
+2797 2207 1
+2825 2207 1
+2829 2207 1
+2868 2207 1
+2872 2207 1
+2900 2207 1
+2904 2207 1
+2932 2207 1
+2936 2207 1
+2964 2207 1
+2968 2207 1
+4207 2207 1
+4223 2207 -1
+5595 2207 -1
+5599 2207 1
+7198 2207 1
+7199 2207 -1
+9783 2207 38
+2236 2208 1
+2240 2208 1
+2268 2208 1
+2272 2208 1
+2300 2208 1
+2304 2208 1
+2332 2208 1
+2336 2208 1
+2339 2208 1
+2343 2208 1
+2371 2208 1
+2375 2208 1
+2403 2208 1
+2407 2208 1
+2435 2208 1
+2439 2208 1
+2730 2208 1
+2734 2208 1
+2762 2208 1
+2766 2208 1
+2794 2208 1
+2798 2208 1
+2826 2208 1
+2830 2208 1
+2865 2208 1
+2869 2208 1
+2897 2208 1
+2901 2208 1
+2929 2208 1
+2933 2208 1
+2961 2208 1
+2965 2208 1
+4208 2208 1
+4224 2208 -1
+5596 2208 -1
+5600 2208 1
+7199 2208 1
+7200 2208 -1
+9784 2208 38
+3105 2209 -1
+3160 2209 1
+3169 2209 -1
+3173 2209 -1
+3233 2209 -1
+3237 2209 -1
+3425 2209 -1
+3429 2209 -1
+3489 2209 -1
+3493 2209 -1
+3681 2209 -1
+3685 2209 -1
+3745 2209 -1
+3749 2209 -1
+3937 2209 -1
+3941 2209 -1
+4001 2209 -1
+4005 2209 -1
+5601 2209 1
+5629 2209 -1
+7201 2209 -1
+7204 2209 1
+9785 2209 38
+3106 2210 -1
+3157 2210 1
+3170 2210 -1
+3174 2210 -1
+3234 2210 -1
+3238 2210 -1
+3426 2210 -1
+3430 2210 -1
+3490 2210 -1
+3494 2210 -1
+3682 2210 -1
+3686 2210 -1
+3746 2210 -1
+3750 2210 -1
+3938 2210 -1
+3942 2210 -1
+4002 2210 -1
+4006 2210 -1
+5602 2210 1
+5630 2210 -1
+7201 2210 1
+7202 2210 -1
+9786 2210 38
+3107 2211 -1
+3158 2211 1
+3171 2211 -1
+3175 2211 -1
+3235 2211 -1
+3239 2211 -1
+3427 2211 -1
+3431 2211 -1
+3491 2211 -1
+3495 2211 -1
+3683 2211 -1
+3687 2211 -1
+3747 2211 -1
+3751 2211 -1
+3939 2211 -1
+3943 2211 -1
+4003 2211 -1
+4007 2211 -1
+5603 2211 1
+5631 2211 -1
+7202 2211 1
+7203 2211 -1
+9787 2211 38
+3108 2212 -1
+3159 2212 1
+3172 2212 -1
+3176 2212 -1
+3236 2212 -1
+3240 2212 -1
+3428 2212 -1
+3432 2212 -1
+3492 2212 -1
+3496 2212 -1
+3684 2212 -1
+3688 2212 -1
+3748 2212 -1
+3752 2212 -1
+3940 2212 -1
+3944 2212 -1
+4004 2212 -1
+4008 2212 -1
+5604 2212 1
+5632 2212 -1
+7203 2212 1
+7204 2212 -1
+9788 2212 38
+3109 2213 -1
+3164 2213 1
+3177 2213 -1
+3181 2213 -1
+3241 2213 -1
+3245 2213 -1
+3433 2213 -1
+3437 2213 -1
+3497 2213 -1
+3501 2213 -1
+3689 2213 -1
+3693 2213 -1
+3753 2213 -1
+3757 2213 -1
+3945 2213 -1
+3949 2213 -1
+4009 2213 -1
+4013 2213 -1
+5601 2213 -1
+5605 2213 1
+7205 2213 -1
+7208 2213 1
+9789 2213 38
+3110 2214 -1
+3161 2214 1
+3178 2214 -1
+3182 2214 -1
+3242 2214 -1
+3246 2214 -1
+3434 2214 -1
+3438 2214 -1
+3498 2214 -1
+3502 2214 -1
+3690 2214 -1
+3694 2214 -1
+3754 2214 -1
+3758 2214 -1
+3946 2214 -1
+3950 2214 -1
+4010 2214 -1
+4014 2214 -1
+5602 2214 -1
+5606 2214 1
+7205 2214 1
+7206 2214 -1
+9790 2214 38
+3111 2215 -1
+3162 2215 1
+3179 2215 -1
+3183 2215 -1
+3243 2215 -1
+3247 2215 -1
+3435 2215 -1
+3439 2215 -1
+3499 2215 -1
+3503 2215 -1
+3691 2215 -1
+3695 2215 -1
+3755 2215 -1
+3759 2215 -1
+3947 2215 -1
+3951 2215 -1
+4011 2215 -1
+4015 2215 -1
+5603 2215 -1
+5607 2215 1
+7206 2215 1
+7207 2215 -1
+9791 2215 38
+3112 2216 -1
+3163 2216 1
+3180 2216 -1
+3184 2216 -1
+3244 2216 -1
+3248 2216 -1
+3436 2216 -1
+3440 2216 -1
+3500 2216 -1
+3504 2216 -1
+3692 2216 -1
+3696 2216 -1
+3756 2216 -1
+3760 2216 -1
+3948 2216 -1
+3952 2216 -1
+4012 2216 -1
+4016 2216 -1
+5604 2216 -1
+5608 2216 1
+7207 2216 1
+7208 2216 -1
+9792 2216 38
+3113 2217 -1
+3168 2217 1
+3185 2217 -1
+3189 2217 -1
+3249 2217 -1
+3253 2217 -1
+3441 2217 -1
+3445 2217 -1
+3505 2217 -1
+3509 2217 -1
+3697 2217 -1
+3701 2217 -1
+3761 2217 -1
+3765 2217 -1
+3953 2217 -1
+3957 2217 -1
+4017 2217 -1
+4021 2217 -1
+5605 2217 -1
+5609 2217 1
+7209 2217 -1
+7212 2217 1
+9793 2217 38
+3114 2218 -1
+3165 2218 1
+3186 2218 -1
+3190 2218 -1
+3250 2218 -1
+3254 2218 -1
+3442 2218 -1
+3446 2218 -1
+3506 2218 -1
+3510 2218 -1
+3698 2218 -1
+3702 2218 -1
+3762 2218 -1
+3766 2218 -1
+3954 2218 -1
+3958 2218 -1
+4018 2218 -1
+4022 2218 -1
+5606 2218 -1
+5610 2218 1
+7209 2218 1
+7210 2218 -1
+9794 2218 38
+3115 2219 -1
+3166 2219 1
+3187 2219 -1
+3191 2219 -1
+3251 2219 -1
+3255 2219 -1
+3443 2219 -1
+3447 2219 -1
+3507 2219 -1
+3511 2219 -1
+3699 2219 -1
+3703 2219 -1
+3763 2219 -1
+3767 2219 -1
+3955 2219 -1
+3959 2219 -1
+4019 2219 -1
+4023 2219 -1
+5607 2219 -1
+5611 2219 1
+7210 2219 1
+7211 2219 -1
+9795 2219 38
+3116 2220 -1
+3167 2220 1
+3188 2220 -1
+3192 2220 -1
+3252 2220 -1
+3256 2220 -1
+3444 2220 -1
+3448 2220 -1
+3508 2220 -1
+3512 2220 -1
+3700 2220 -1
+3704 2220 -1
+3764 2220 -1
+3768 2220 -1
+3956 2220 -1
+3960 2220 -1
+4020 2220 -1
+4024 2220 -1
+5608 2220 -1
+5612 2220 1
+7211 2220 1
+7212 2220 -1
+9796 2220 38
+3117 2221 -1
+3140 2221 1
+3193 2221 -1
+3197 2221 -1
+3257 2221 -1
+3261 2221 -1
+3449 2221 -1
+3453 2221 -1
+3513 2221 -1
+3517 2221 -1
+3705 2221 -1
+3709 2221 -1
+3769 2221 -1
+3773 2221 -1
+3961 2221 -1
+3965 2221 -1
+4025 2221 -1
+4029 2221 -1
+5609 2221 -1
+5613 2221 1
+7213 2221 -1
+7216 2221 1
+9797 2221 38
+3118 2222 -1
+3137 2222 1
+3194 2222 -1
+3198 2222 -1
+3258 2222 -1
+3262 2222 -1
+3450 2222 -1
+3454 2222 -1
+3514 2222 -1
+3518 2222 -1
+3706 2222 -1
+3710 2222 -1
+3770 2222 -1
+3774 2222 -1
+3962 2222 -1
+3966 2222 -1
+4026 2222 -1
+4030 2222 -1
+5610 2222 -1
+5614 2222 1
+7213 2222 1
+7214 2222 -1
+9798 2222 38
+3119 2223 -1
+3138 2223 1
+3195 2223 -1
+3199 2223 -1
+3259 2223 -1
+3263 2223 -1
+3451 2223 -1
+3455 2223 -1
+3515 2223 -1
+3519 2223 -1
+3707 2223 -1
+3711 2223 -1
+3771 2223 -1
+3775 2223 -1
+3963 2223 -1
+3967 2223 -1
+4027 2223 -1
+4031 2223 -1
+5611 2223 -1
+5615 2223 1
+7214 2223 1
+7215 2223 -1
+9799 2223 38
+3120 2224 -1
+3139 2224 1
+3196 2224 -1
+3200 2224 -1
+3260 2224 -1
+3264 2224 -1
+3452 2224 -1
+3456 2224 -1
+3516 2224 -1
+3520 2224 -1
+3708 2224 -1
+3712 2224 -1
+3772 2224 -1
+3776 2224 -1
+3964 2224 -1
+3968 2224 -1
+4028 2224 -1
+4032 2224 -1
+5612 2224 -1
+5616 2224 1
+7215 2224 1
+7216 2224 -1
+9800 2224 38
+3121 2225 -1
+3144 2225 1
+3201 2225 -1
+3205 2225 -1
+3265 2225 -1
+3269 2225 -1
+3457 2225 -1
+3461 2225 -1
+3521 2225 -1
+3525 2225 -1
+3713 2225 -1
+3717 2225 -1
+3777 2225 -1
+3781 2225 -1
+3969 2225 -1
+3973 2225 -1
+4033 2225 -1
+4037 2225 -1
+5613 2225 -1
+5617 2225 1
+7217 2225 -1
+7220 2225 1
+9801 2225 38
+3122 2226 -1
+3141 2226 1
+3202 2226 -1
+3206 2226 -1
+3266 2226 -1
+3270 2226 -1
+3458 2226 -1
+3462 2226 -1
+3522 2226 -1
+3526 2226 -1
+3714 2226 -1
+3718 2226 -1
+3778 2226 -1
+3782 2226 -1
+3970 2226 -1
+3974 2226 -1
+4034 2226 -1
+4038 2226 -1
+5614 2226 -1
+5618 2226 1
+7217 2226 1
+7218 2226 -1
+9802 2226 38
+3123 2227 -1
+3142 2227 1
+3203 2227 -1
+3207 2227 -1
+3267 2227 -1
+3271 2227 -1
+3459 2227 -1
+3463 2227 -1
+3523 2227 -1
+3527 2227 -1
+3715 2227 -1
+3719 2227 -1
+3779 2227 -1
+3783 2227 -1
+3971 2227 -1
+3975 2227 -1
+4035 2227 -1
+4039 2227 -1
+5615 2227 -1
+5619 2227 1
+7218 2227 1
+7219 2227 -1
+9803 2227 38
+3124 2228 -1
+3143 2228 1
+3204 2228 -1
+3208 2228 -1
+3268 2228 -1
+3272 2228 -1
+3460 2228 -1
+3464 2228 -1
+3524 2228 -1
+3528 2228 -1
+3716 2228 -1
+3720 2228 -1
+3780 2228 -1
+3784 2228 -1
+3972 2228 -1
+3976 2228 -1
+4036 2228 -1
+4040 2228 -1
+5616 2228 -1
+5620 2228 1
+7219 2228 1
+7220 2228 -1
+9804 2228 38
+3125 2229 -1
+3148 2229 1
+3209 2229 -1
+3213 2229 -1
+3273 2229 -1
+3277 2229 -1
+3465 2229 -1
+3469 2229 -1
+3529 2229 -1
+3533 2229 -1
+3721 2229 -1
+3725 2229 -1
+3785 2229 -1
+3789 2229 -1
+3977 2229 -1
+3981 2229 -1
+4041 2229 -1
+4045 2229 -1
+5617 2229 -1
+5621 2229 1
+7221 2229 -1
+7224 2229 1
+9805 2229 38
+3126 2230 -1
+3145 2230 1
+3210 2230 -1
+3214 2230 -1
+3274 2230 -1
+3278 2230 -1
+3466 2230 -1
+3470 2230 -1
+3530 2230 -1
+3534 2230 -1
+3722 2230 -1
+3726 2230 -1
+3786 2230 -1
+3790 2230 -1
+3978 2230 -1
+3982 2230 -1
+4042 2230 -1
+4046 2230 -1
+5618 2230 -1
+5622 2230 1
+7221 2230 1
+7222 2230 -1
+9806 2230 38
+3127 2231 -1
+3146 2231 1
+3211 2231 -1
+3215 2231 -1
+3275 2231 -1
+3279 2231 -1
+3467 2231 -1
+3471 2231 -1
+3531 2231 -1
+3535 2231 -1
+3723 2231 -1
+3727 2231 -1
+3787 2231 -1
+3791 2231 -1
+3979 2231 -1
+3983 2231 -1
+4043 2231 -1
+4047 2231 -1
+5619 2231 -1
+5623 2231 1
+7222 2231 1
+7223 2231 -1
+9807 2231 38
+3128 2232 -1
+3147 2232 1
+3212 2232 -1
+3216 2232 -1
+3276 2232 -1
+3280 2232 -1
+3468 2232 -1
+3472 2232 -1
+3532 2232 -1
+3536 2232 -1
+3724 2232 -1
+3728 2232 -1
+3788 2232 -1
+3792 2232 -1
+3980 2232 -1
+3984 2232 -1
+4044 2232 -1
+4048 2232 -1
+5620 2232 -1
+5624 2232 1
+7223 2232 1
+7224 2232 -1
+9808 2232 38
+3129 2233 -1
+3152 2233 1
+3217 2233 -1
+3221 2233 -1
+3281 2233 -1
+3285 2233 -1
+3473 2233 -1
+3477 2233 -1
+3537 2233 -1
+3541 2233 -1
+3729 2233 -1
+3733 2233 -1
+3793 2233 -1
+3797 2233 -1
+3985 2233 -1
+3989 2233 -1
+4049 2233 -1
+4053 2233 -1
+5621 2233 -1
+5625 2233 1
+7225 2233 -1
+7228 2233 1
+9809 2233 38
+3130 2234 -1
+3149 2234 1
+3218 2234 -1
+3222 2234 -1
+3282 2234 -1
+3286 2234 -1
+3474 2234 -1
+3478 2234 -1
+3538 2234 -1
+3542 2234 -1
+3730 2234 -1
+3734 2234 -1
+3794 2234 -1
+3798 2234 -1
+3986 2234 -1
+3990 2234 -1
+4050 2234 -1
+4054 2234 -1
+5622 2234 -1
+5626 2234 1
+7225 2234 1
+7226 2234 -1
+9810 2234 38
+3131 2235 -1
+3150 2235 1
+3219 2235 -1
+3223 2235 -1
+3283 2235 -1
+3287 2235 -1
+3475 2235 -1
+3479 2235 -1
+3539 2235 -1
+3543 2235 -1
+3731 2235 -1
+3735 2235 -1
+3795 2235 -1
+3799 2235 -1
+3987 2235 -1
+3991 2235 -1
+4051 2235 -1
+4055 2235 -1
+5623 2235 -1
+5627 2235 1
+7226 2235 1
+7227 2235 -1
+9811 2235 38
+3132 2236 -1
+3151 2236 1
+3220 2236 -1
+3224 2236 -1
+3284 2236 -1
+3288 2236 -1
+3476 2236 -1
+3480 2236 -1
+3540 2236 -1
+3544 2236 -1
+3732 2236 -1
+3736 2236 -1
+3796 2236 -1
+3800 2236 -1
+3988 2236 -1
+3992 2236 -1
+4052 2236 -1
+4056 2236 -1
+5624 2236 -1
+5628 2236 1
+7227 2236 1
+7228 2236 -1
+9812 2236 38
+3133 2237 -1
+3156 2237 1
+3225 2237 -1
+3229 2237 -1
+3289 2237 -1
+3293 2237 -1
+3481 2237 -1
+3485 2237 -1
+3545 2237 -1
+3549 2237 -1
+3737 2237 -1
+3741 2237 -1
+3801 2237 -1
+3805 2237 -1
+3993 2237 -1
+3997 2237 -1
+4057 2237 -1
+4061 2237 -1
+5625 2237 -1
+5629 2237 1
+7229 2237 -1
+7232 2237 1
+9813 2237 38
+3134 2238 -1
+3153 2238 1
+3226 2238 -1
+3230 2238 -1
+3290 2238 -1
+3294 2238 -1
+3482 2238 -1
+3486 2238 -1
+3546 2238 -1
+3550 2238 -1
+3738 2238 -1
+3742 2238 -1
+3802 2238 -1
+3806 2238 -1
+3994 2238 -1
+3998 2238 -1
+4058 2238 -1
+4062 2238 -1
+5626 2238 -1
+5630 2238 1
+7229 2238 1
+7230 2238 -1
+9814 2238 38
+3135 2239 -1
+3154 2239 1
+3227 2239 -1
+3231 2239 -1
+3291 2239 -1
+3295 2239 -1
+3483 2239 -1
+3487 2239 -1
+3547 2239 -1
+3551 2239 -1
+3739 2239 -1
+3743 2239 -1
+3803 2239 -1
+3807 2239 -1
+3995 2239 -1
+3999 2239 -1
+4059 2239 -1
+4063 2239 -1
+5627 2239 -1
+5631 2239 1
+7230 2239 1
+7231 2239 -1
+9815 2239 38
+3136 2240 -1
+3155 2240 1
+3228 2240 -1
+3232 2240 -1
+3292 2240 -1
+3296 2240 -1
+3484 2240 -1
+3488 2240 -1
+3548 2240 -1
+3552 2240 -1
+3740 2240 -1
+3744 2240 -1
+3804 2240 -1
+3808 2240 -1
+3996 2240 -1
+4000 2240 -1
+4060 2240 -1
+4064 2240 -1
+5628 2240 -1
+5632 2240 1
+7231 2240 1
+7232 2240 -1
+9816 2240 38
+3128 2241 1
+3137 2241 -1
+3297 2241 -1
+3301 2241 -1
+3361 2241 -1
+3365 2241 -1
+3553 2241 -1
+3557 2241 -1
+3617 2241 -1
+3621 2241 -1
+3809 2241 -1
+3813 2241 -1
+3873 2241 -1
+3877 2241 -1
+4065 2241 -1
+4069 2241 -1
+4129 2241 -1
+4133 2241 -1
+5633 2241 1
+5661 2241 -1
+7233 2241 -1
+7236 2241 1
+9817 2241 38
+3125 2242 1
+3138 2242 -1
+3298 2242 -1
+3302 2242 -1
+3362 2242 -1
+3366 2242 -1
+3554 2242 -1
+3558 2242 -1
+3618 2242 -1
+3622 2242 -1
+3810 2242 -1
+3814 2242 -1
+3874 2242 -1
+3878 2242 -1
+4066 2242 -1
+4070 2242 -1
+4130 2242 -1
+4134 2242 -1
+5634 2242 1
+5662 2242 -1
+7233 2242 1
+7234 2242 -1
+9818 2242 38
+3126 2243 1
+3139 2243 -1
+3299 2243 -1
+3303 2243 -1
+3363 2243 -1
+3367 2243 -1
+3555 2243 -1
+3559 2243 -1
+3619 2243 -1
+3623 2243 -1
+3811 2243 -1
+3815 2243 -1
+3875 2243 -1
+3879 2243 -1
+4067 2243 -1
+4071 2243 -1
+4131 2243 -1
+4135 2243 -1
+5635 2243 1
+5663 2243 -1
+7234 2243 1
+7235 2243 -1
+9819 2243 38
+3127 2244 1
+3140 2244 -1
+3300 2244 -1
+3304 2244 -1
+3364 2244 -1
+3368 2244 -1
+3556 2244 -1
+3560 2244 -1
+3620 2244 -1
+3624 2244 -1
+3812 2244 -1
+3816 2244 -1
+3876 2244 -1
+3880 2244 -1
+4068 2244 -1
+4072 2244 -1
+4132 2244 -1
+4136 2244 -1
+5636 2244 1
+5664 2244 -1
+7235 2244 1
+7236 2244 -1
+9820 2244 38
+3132 2245 1
+3141 2245 -1
+3305 2245 -1
+3309 2245 -1
+3369 2245 -1
+3373 2245 -1
+3561 2245 -1
+3565 2245 -1
+3625 2245 -1
+3629 2245 -1
+3817 2245 -1
+3821 2245 -1
+3881 2245 -1
+3885 2245 -1
+4073 2245 -1
+4077 2245 -1
+4137 2245 -1
+4141 2245 -1
+5633 2245 -1
+5637 2245 1
+7237 2245 -1
+7240 2245 1
+9821 2245 38
+3129 2246 1
+3142 2246 -1
+3306 2246 -1
+3310 2246 -1
+3370 2246 -1
+3374 2246 -1
+3562 2246 -1
+3566 2246 -1
+3626 2246 -1
+3630 2246 -1
+3818 2246 -1
+3822 2246 -1
+3882 2246 -1
+3886 2246 -1
+4074 2246 -1
+4078 2246 -1
+4138 2246 -1
+4142 2246 -1
+5634 2246 -1
+5638 2246 1
+7237 2246 1
+7238 2246 -1
+9822 2246 38
+3130 2247 1
+3143 2247 -1
+3307 2247 -1
+3311 2247 -1
+3371 2247 -1
+3375 2247 -1
+3563 2247 -1
+3567 2247 -1
+3627 2247 -1
+3631 2247 -1
+3819 2247 -1
+3823 2247 -1
+3883 2247 -1
+3887 2247 -1
+4075 2247 -1
+4079 2247 -1
+4139 2247 -1
+4143 2247 -1
+5635 2247 -1
+5639 2247 1
+7238 2247 1
+7239 2247 -1
+9823 2247 38
+3131 2248 1
+3144 2248 -1
+3308 2248 -1
+3312 2248 -1
+3372 2248 -1
+3376 2248 -1
+3564 2248 -1
+3568 2248 -1
+3628 2248 -1
+3632 2248 -1
+3820 2248 -1
+3824 2248 -1
+3884 2248 -1
+3888 2248 -1
+4076 2248 -1
+4080 2248 -1
+4140 2248 -1
+4144 2248 -1
+5636 2248 -1
+5640 2248 1
+7239 2248 1
+7240 2248 -1
+9824 2248 38
+3136 2249 1
+3145 2249 -1
+3313 2249 -1
+3317 2249 -1
+3377 2249 -1
+3381 2249 -1
+3569 2249 -1
+3573 2249 -1
+3633 2249 -1
+3637 2249 -1
+3825 2249 -1
+3829 2249 -1
+3889 2249 -1
+3893 2249 -1
+4081 2249 -1
+4085 2249 -1
+4145 2249 -1
+4149 2249 -1
+5637 2249 -1
+5641 2249 1
+7241 2249 -1
+7244 2249 1
+9825 2249 38
+3133 2250 1
+3146 2250 -1
+3314 2250 -1
+3318 2250 -1
+3378 2250 -1
+3382 2250 -1
+3570 2250 -1
+3574 2250 -1
+3634 2250 -1
+3638 2250 -1
+3826 2250 -1
+3830 2250 -1
+3890 2250 -1
+3894 2250 -1
+4082 2250 -1
+4086 2250 -1
+4146 2250 -1
+4150 2250 -1
+5638 2250 -1
+5642 2250 1
+7241 2250 1
+7242 2250 -1
+9826 2250 38
+3134 2251 1
+3147 2251 -1
+3315 2251 -1
+3319 2251 -1
+3379 2251 -1
+3383 2251 -1
+3571 2251 -1
+3575 2251 -1
+3635 2251 -1
+3639 2251 -1
+3827 2251 -1
+3831 2251 -1
+3891 2251 -1
+3895 2251 -1
+4083 2251 -1
+4087 2251 -1
+4147 2251 -1
+4151 2251 -1
+5639 2251 -1
+5643 2251 1
+7242 2251 1
+7243 2251 -1
+9827 2251 38
+3135 2252 1
+3148 2252 -1
+3316 2252 -1
+3320 2252 -1
+3380 2252 -1
+3384 2252 -1
+3572 2252 -1
+3576 2252 -1
+3636 2252 -1
+3640 2252 -1
+3828 2252 -1
+3832 2252 -1
+3892 2252 -1
+3896 2252 -1
+4084 2252 -1
+4088 2252 -1
+4148 2252 -1
+4152 2252 -1
+5640 2252 -1
+5644 2252 1
+7243 2252 1
+7244 2252 -1
+9828 2252 38
+3108 2253 1
+3149 2253 -1
+3321 2253 -1
+3325 2253 -1
+3385 2253 -1
+3389 2253 -1
+3577 2253 -1
+3581 2253 -1
+3641 2253 -1
+3645 2253 -1
+3833 2253 -1
+3837 2253 -1
+3897 2253 -1
+3901 2253 -1
+4089 2253 -1
+4093 2253 -1
+4153 2253 -1
+4157 2253 -1
+5641 2253 -1
+5645 2253 1
+7245 2253 -1
+7248 2253 1
+9829 2253 38
+3105 2254 1
+3150 2254 -1
+3322 2254 -1
+3326 2254 -1
+3386 2254 -1
+3390 2254 -1
+3578 2254 -1
+3582 2254 -1
+3642 2254 -1
+3646 2254 -1
+3834 2254 -1
+3838 2254 -1
+3898 2254 -1
+3902 2254 -1
+4090 2254 -1
+4094 2254 -1
+4154 2254 -1
+4158 2254 -1
+5642 2254 -1
+5646 2254 1
+7245 2254 1
+7246 2254 -1
+9830 2254 38
+3106 2255 1
+3151 2255 -1
+3323 2255 -1
+3327 2255 -1
+3387 2255 -1
+3391 2255 -1
+3579 2255 -1
+3583 2255 -1
+3643 2255 -1
+3647 2255 -1
+3835 2255 -1
+3839 2255 -1
+3899 2255 -1
+3903 2255 -1
+4091 2255 -1
+4095 2255 -1
+4155 2255 -1
+4159 2255 -1
+5643 2255 -1
+5647 2255 1
+7246 2255 1
+7247 2255 -1
+9831 2255 38
+3107 2256 1
+3152 2256 -1
+3324 2256 -1
+3328 2256 -1
+3388 2256 -1
+3392 2256 -1
+3580 2256 -1
+3584 2256 -1
+3644 2256 -1
+3648 2256 -1
+3836 2256 -1
+3840 2256 -1
+3900 2256 -1
+3904 2256 -1
+4092 2256 -1
+4096 2256 -1
+4156 2256 -1
+4160 2256 -1
+5644 2256 -1
+5648 2256 1
+7247 2256 1
+7248 2256 -1
+9832 2256 38
+3112 2257 1
+3153 2257 -1
+3329 2257 -1
+3333 2257 -1
+3393 2257 -1
+3397 2257 -1
+3585 2257 -1
+3589 2257 -1
+3649 2257 -1
+3653 2257 -1
+3841 2257 -1
+3845 2257 -1
+3905 2257 -1
+3909 2257 -1
+4097 2257 -1
+4101 2257 -1
+4161 2257 -1
+4165 2257 -1
+5645 2257 -1
+5649 2257 1
+7249 2257 -1
+7252 2257 1
+9833 2257 38
+3109 2258 1
+3154 2258 -1
+3330 2258 -1
+3334 2258 -1
+3394 2258 -1
+3398 2258 -1
+3586 2258 -1
+3590 2258 -1
+3650 2258 -1
+3654 2258 -1
+3842 2258 -1
+3846 2258 -1
+3906 2258 -1
+3910 2258 -1
+4098 2258 -1
+4102 2258 -1
+4162 2258 -1
+4166 2258 -1
+5646 2258 -1
+5650 2258 1
+7249 2258 1
+7250 2258 -1
+9834 2258 38
+3110 2259 1
+3155 2259 -1
+3331 2259 -1
+3335 2259 -1
+3395 2259 -1
+3399 2259 -1
+3587 2259 -1
+3591 2259 -1
+3651 2259 -1
+3655 2259 -1
+3843 2259 -1
+3847 2259 -1
+3907 2259 -1
+3911 2259 -1
+4099 2259 -1
+4103 2259 -1
+4163 2259 -1
+4167 2259 -1
+5647 2259 -1
+5651 2259 1
+7250 2259 1
+7251 2259 -1
+9835 2259 38
+3111 2260 1
+3156 2260 -1
+3332 2260 -1
+3336 2260 -1
+3396 2260 -1
+3400 2260 -1
+3588 2260 -1
+3592 2260 -1
+3652 2260 -1
+3656 2260 -1
+3844 2260 -1
+3848 2260 -1
+3908 2260 -1
+3912 2260 -1
+4100 2260 -1
+4104 2260 -1
+4164 2260 -1
+4168 2260 -1
+5648 2260 -1
+5652 2260 1
+7251 2260 1
+7252 2260 -1
+9836 2260 38
+3116 2261 1
+3157 2261 -1
+3337 2261 -1
+3341 2261 -1
+3401 2261 -1
+3405 2261 -1
+3593 2261 -1
+3597 2261 -1
+3657 2261 -1
+3661 2261 -1
+3849 2261 -1
+3853 2261 -1
+3913 2261 -1
+3917 2261 -1
+4105 2261 -1
+4109 2261 -1
+4169 2261 -1
+4173 2261 -1
+5649 2261 -1
+5653 2261 1
+7253 2261 -1
+7256 2261 1
+9837 2261 38
+3113 2262 1
+3158 2262 -1
+3338 2262 -1
+3342 2262 -1
+3402 2262 -1
+3406 2262 -1
+3594 2262 -1
+3598 2262 -1
+3658 2262 -1
+3662 2262 -1
+3850 2262 -1
+3854 2262 -1
+3914 2262 -1
+3918 2262 -1
+4106 2262 -1
+4110 2262 -1
+4170 2262 -1
+4174 2262 -1
+5650 2262 -1
+5654 2262 1
+7253 2262 1
+7254 2262 -1
+9838 2262 38
+3114 2263 1
+3159 2263 -1
+3339 2263 -1
+3343 2263 -1
+3403 2263 -1
+3407 2263 -1
+3595 2263 -1
+3599 2263 -1
+3659 2263 -1
+3663 2263 -1
+3851 2263 -1
+3855 2263 -1
+3915 2263 -1
+3919 2263 -1
+4107 2263 -1
+4111 2263 -1
+4171 2263 -1
+4175 2263 -1
+5651 2263 -1
+5655 2263 1
+7254 2263 1
+7255 2263 -1
+9839 2263 38
+3115 2264 1
+3160 2264 -1
+3340 2264 -1
+3344 2264 -1
+3404 2264 -1
+3408 2264 -1
+3596 2264 -1
+3600 2264 -1
+3660 2264 -1
+3664 2264 -1
+3852 2264 -1
+3856 2264 -1
+3916 2264 -1
+3920 2264 -1
+4108 2264 -1
+4112 2264 -1
+4172 2264 -1
+4176 2264 -1
+5652 2264 -1
+5656 2264 1
+7255 2264 1
+7256 2264 -1
+9840 2264 38
+3120 2265 1
+3161 2265 -1
+3345 2265 -1
+3349 2265 -1
+3409 2265 -1
+3413 2265 -1
+3601 2265 -1
+3605 2265 -1
+3665 2265 -1
+3669 2265 -1
+3857 2265 -1
+3861 2265 -1
+3921 2265 -1
+3925 2265 -1
+4113 2265 -1
+4117 2265 -1
+4177 2265 -1
+4181 2265 -1
+5653 2265 -1
+5657 2265 1
+7257 2265 -1
+7260 2265 1
+9841 2265 38
+3117 2266 1
+3162 2266 -1
+3346 2266 -1
+3350 2266 -1
+3410 2266 -1
+3414 2266 -1
+3602 2266 -1
+3606 2266 -1
+3666 2266 -1
+3670 2266 -1
+3858 2266 -1
+3862 2266 -1
+3922 2266 -1
+3926 2266 -1
+4114 2266 -1
+4118 2266 -1
+4178 2266 -1
+4182 2266 -1
+5654 2266 -1
+5658 2266 1
+7257 2266 1
+7258 2266 -1
+9842 2266 38
+3118 2267 1
+3163 2267 -1
+3347 2267 -1
+3351 2267 -1
+3411 2267 -1
+3415 2267 -1
+3603 2267 -1
+3607 2267 -1
+3667 2267 -1
+3671 2267 -1
+3859 2267 -1
+3863 2267 -1
+3923 2267 -1
+3927 2267 -1
+4115 2267 -1
+4119 2267 -1
+4179 2267 -1
+4183 2267 -1
+5655 2267 -1
+5659 2267 1
+7258 2267 1
+7259 2267 -1
+9843 2267 38
+3119 2268 1
+3164 2268 -1
+3348 2268 -1
+3352 2268 -1
+3412 2268 -1
+3416 2268 -1
+3604 2268 -1
+3608 2268 -1
+3668 2268 -1
+3672 2268 -1
+3860 2268 -1
+3864 2268 -1
+3924 2268 -1
+3928 2268 -1
+4116 2268 -1
+4120 2268 -1
+4180 2268 -1
+4184 2268 -1
+5656 2268 -1
+5660 2268 1
+7259 2268 1
+7260 2268 -1
+9844 2268 38
+3124 2269 1
+3165 2269 -1
+3353 2269 -1
+3357 2269 -1
+3417 2269 -1
+3421 2269 -1
+3609 2269 -1
+3613 2269 -1
+3673 2269 -1
+3677 2269 -1
+3865 2269 -1
+3869 2269 -1
+3929 2269 -1
+3933 2269 -1
+4121 2269 -1
+4125 2269 -1
+4185 2269 -1
+4189 2269 -1
+5657 2269 -1
+5661 2269 1
+7261 2269 -1
+7264 2269 1
+9845 2269 38
+3121 2270 1
+3166 2270 -1
+3354 2270 -1
+3358 2270 -1
+3418 2270 -1
+3422 2270 -1
+3610 2270 -1
+3614 2270 -1
+3674 2270 -1
+3678 2270 -1
+3866 2270 -1
+3870 2270 -1
+3930 2270 -1
+3934 2270 -1
+4122 2270 -1
+4126 2270 -1
+4186 2270 -1
+4190 2270 -1
+5658 2270 -1
+5662 2270 1
+7261 2270 1
+7262 2270 -1
+9846 2270 38
+3122 2271 1
+3167 2271 -1
+3355 2271 -1
+3359 2271 -1
+3419 2271 -1
+3423 2271 -1
+3611 2271 -1
+3615 2271 -1
+3675 2271 -1
+3679 2271 -1
+3867 2271 -1
+3871 2271 -1
+3931 2271 -1
+3935 2271 -1
+4123 2271 -1
+4127 2271 -1
+4187 2271 -1
+4191 2271 -1
+5659 2271 -1
+5663 2271 1
+7262 2271 1
+7263 2271 -1
+9847 2271 38
+3123 2272 1
+3168 2272 -1
+3356 2272 -1
+3360 2272 -1
+3420 2272 -1
+3424 2272 -1
+3612 2272 -1
+3616 2272 -1
+3676 2272 -1
+3680 2272 -1
+3868 2272 -1
+3872 2272 -1
+3932 2272 -1
+3936 2272 -1
+4124 2272 -1
+4128 2272 -1
+4188 2272 -1
+4192 2272 -1
+5660 2272 -1
+5664 2272 1
+7263 2272 1
+7264 2272 -1
+9848 2272 38
+3169 2273 1
+3173 2273 1
+3201 2273 1
+3205 2273 1
+3233 2273 1
+3237 2273 1
+3265 2273 1
+3269 2273 1
+3564 2273 1
+3568 2273 1
+3596 2273 1
+3600 2273 1
+3628 2273 1
+3632 2273 1
+3660 2273 1
+3664 2273 1
+3699 2273 1
+3703 2273 1
+3731 2273 1
+3735 2273 1
+3763 2273 1
+3767 2273 1
+3795 2273 1
+3799 2273 1
+4090 2273 1
+4094 2273 1
+4122 2273 1
+4126 2273 1
+4154 2273 1
+4158 2273 1
+4186 2273 1
+4190 2273 1
+4193 2273 -1
+4216 2273 1
+5665 2273 1
+5677 2273 -1
+7265 2273 -1
+7268 2273 1
+9849 2273 38
+3170 2274 1
+3174 2274 1
+3202 2274 1
+3206 2274 1
+3234 2274 1
+3238 2274 1
+3266 2274 1
+3270 2274 1
+3561 2274 1
+3565 2274 1
+3593 2274 1
+3597 2274 1
+3625 2274 1
+3629 2274 1
+3657 2274 1
+3661 2274 1
+3700 2274 1
+3704 2274 1
+3732 2274 1
+3736 2274 1
+3764 2274 1
+3768 2274 1
+3796 2274 1
+3800 2274 1
+4091 2274 1
+4095 2274 1
+4123 2274 1
+4127 2274 1
+4155 2274 1
+4159 2274 1
+4187 2274 1
+4191 2274 1
+4194 2274 -1
+4213 2274 1
+5666 2274 1
+5678 2274 -1
+7265 2274 1
+7266 2274 -1
+9850 2274 38
+3171 2275 1
+3175 2275 1
+3203 2275 1
+3207 2275 1
+3235 2275 1
+3239 2275 1
+3267 2275 1
+3271 2275 1
+3562 2275 1
+3566 2275 1
+3594 2275 1
+3598 2275 1
+3626 2275 1
+3630 2275 1
+3658 2275 1
+3662 2275 1
+3697 2275 1
+3701 2275 1
+3729 2275 1
+3733 2275 1
+3761 2275 1
+3765 2275 1
+3793 2275 1
+3797 2275 1
+4092 2275 1
+4096 2275 1
+4124 2275 1
+4128 2275 1
+4156 2275 1
+4160 2275 1
+4188 2275 1
+4192 2275 1
+4195 2275 -1
+4214 2275 1
+5667 2275 1
+5679 2275 -1
+7266 2275 1
+7267 2275 -1
+9851 2275 38
+3172 2276 1
+3176 2276 1
+3204 2276 1
+3208 2276 1
+3236 2276 1
+3240 2276 1
+3268 2276 1
+3272 2276 1
+3563 2276 1
+3567 2276 1
+3595 2276 1
+3599 2276 1
+3627 2276 1
+3631 2276 1
+3659 2276 1
+3663 2276 1
+3698 2276 1
+3702 2276 1
+3730 2276 1
+3734 2276 1
+3762 2276 1
+3766 2276 1
+3794 2276 1
+3798 2276 1
+4089 2276 1
+4093 2276 1
+4121 2276 1
+4125 2276 1
+4153 2276 1
+4157 2276 1
+4185 2276 1
+4189 2276 1
+4196 2276 -1
+4215 2276 1
+5668 2276 1
+5680 2276 -1
+7267 2276 1
+7268 2276 -1
+9852 2276 38
+3177 2277 1
+3181 2277 1
+3209 2277 1
+3213 2277 1
+3241 2277 1
+3245 2277 1
+3273 2277 1
+3277 2277 1
+3572 2277 1
+3576 2277 1
+3604 2277 1
+3608 2277 1
+3636 2277 1
+3640 2277 1
+3668 2277 1
+3672 2277 1
+3707 2277 1
+3711 2277 1
+3739 2277 1
+3743 2277 1
+3771 2277 1
+3775 2277 1
+3803 2277 1
+3807 2277 1
+4066 2277 1
+4070 2277 1
+4098 2277 1
+4102 2277 1
+4130 2277 1
+4134 2277 1
+4162 2277 1
+4166 2277 1
+4197 2277 -1
+4220 2277 1
+5665 2277 -1
+5669 2277 1
+7269 2277 -1
+7272 2277 1
+9853 2277 38
+3178 2278 1
+3182 2278 1
+3210 2278 1
+3214 2278 1
+3242 2278 1
+3246 2278 1
+3274 2278 1
+3278 2278 1
+3569 2278 1
+3573 2278 1
+3601 2278 1
+3605 2278 1
+3633 2278 1
+3637 2278 1
+3665 2278 1
+3669 2278 1
+3708 2278 1
+3712 2278 1
+3740 2278 1
+3744 2278 1
+3772 2278 1
+3776 2278 1
+3804 2278 1
+3808 2278 1
+4067 2278 1
+4071 2278 1
+4099 2278 1
+4103 2278 1
+4131 2278 1
+4135 2278 1
+4163 2278 1
+4167 2278 1
+4198 2278 -1
+4217 2278 1
+5666 2278 -1
+5670 2278 1
+7269 2278 1
+7270 2278 -1
+9854 2278 38
+3179 2279 1
+3183 2279 1
+3211 2279 1
+3215 2279 1
+3243 2279 1
+3247 2279 1
+3275 2279 1
+3279 2279 1
+3570 2279 1
+3574 2279 1
+3602 2279 1
+3606 2279 1
+3634 2279 1
+3638 2279 1
+3666 2279 1
+3670 2279 1
+3705 2279 1
+3709 2279 1
+3737 2279 1
+3741 2279 1
+3769 2279 1
+3773 2279 1
+3801 2279 1
+3805 2279 1
+4068 2279 1
+4072 2279 1
+4100 2279 1
+4104 2279 1
+4132 2279 1
+4136 2279 1
+4164 2279 1
+4168 2279 1
+4199 2279 -1
+4218 2279 1
+5667 2279 -1
+5671 2279 1
+7270 2279 1
+7271 2279 -1
+9855 2279 38
+3180 2280 1
+3184 2280 1
+3212 2280 1
+3216 2280 1
+3244 2280 1
+3248 2280 1
+3276 2280 1
+3280 2280 1
+3571 2280 1
+3575 2280 1
+3603 2280 1
+3607 2280 1
+3635 2280 1
+3639 2280 1
+3667 2280 1
+3671 2280 1
+3706 2280 1
+3710 2280 1
+3738 2280 1
+3742 2280 1
+3770 2280 1
+3774 2280 1
+3802 2280 1
+3806 2280 1
+4065 2280 1
+4069 2280 1
+4097 2280 1
+4101 2280 1
+4129 2280 1
+4133 2280 1
+4161 2280 1
+4165 2280 1
+4200 2280 -1
+4219 2280 1
+5668 2280 -1
+5672 2280 1
+7271 2280 1
+7272 2280 -1
+9856 2280 38
+3185 2281 1
+3189 2281 1
+3217 2281 1
+3221 2281 1
+3249 2281 1
+3253 2281 1
+3281 2281 1
+3285 2281 1
+3580 2281 1
+3584 2281 1
+3612 2281 1
+3616 2281 1
+3644 2281 1
+3648 2281 1
+3676 2281 1
+3680 2281 1
+3683 2281 1
+3687 2281 1
+3715 2281 1
+3719 2281 1
+3747 2281 1
+3751 2281 1
+3779 2281 1
+3783 2281 1
+4074 2281 1
+4078 2281 1
+4106 2281 1
+4110 2281 1
+4138 2281 1
+4142 2281 1
+4170 2281 1
+4174 2281 1
+4201 2281 -1
+4224 2281 1
+5669 2281 -1
+5673 2281 1
+7273 2281 -1
+7276 2281 1
+9857 2281 38
+3186 2282 1
+3190 2282 1
+3218 2282 1
+3222 2282 1
+3250 2282 1
+3254 2282 1
+3282 2282 1
+3286 2282 1
+3577 2282 1
+3581 2282 1
+3609 2282 1
+3613 2282 1
+3641 2282 1
+3645 2282 1
+3673 2282 1
+3677 2282 1
+3684 2282 1
+3688 2282 1
+3716 2282 1
+3720 2282 1
+3748 2282 1
+3752 2282 1
+3780 2282 1
+3784 2282 1
+4075 2282 1
+4079 2282 1
+4107 2282 1
+4111 2282 1
+4139 2282 1
+4143 2282 1
+4171 2282 1
+4175 2282 1
+4202 2282 -1
+4221 2282 1
+5670 2282 -1
+5674 2282 1
+7273 2282 1
+7274 2282 -1
+9858 2282 38
+3187 2283 1
+3191 2283 1
+3219 2283 1
+3223 2283 1
+3251 2283 1
+3255 2283 1
+3283 2283 1
+3287 2283 1
+3578 2283 1
+3582 2283 1
+3610 2283 1
+3614 2283 1
+3642 2283 1
+3646 2283 1
+3674 2283 1
+3678 2283 1
+3681 2283 1
+3685 2283 1
+3713 2283 1
+3717 2283 1
+3745 2283 1
+3749 2283 1
+3777 2283 1
+3781 2283 1
+4076 2283 1
+4080 2283 1
+4108 2283 1
+4112 2283 1
+4140 2283 1
+4144 2283 1
+4172 2283 1
+4176 2283 1
+4203 2283 -1
+4222 2283 1
+5671 2283 -1
+5675 2283 1
+7274 2283 1
+7275 2283 -1
+9859 2283 38
+3188 2284 1
+3192 2284 1
+3220 2284 1
+3224 2284 1
+3252 2284 1
+3256 2284 1
+3284 2284 1
+3288 2284 1
+3579 2284 1
+3583 2284 1
+3611 2284 1
+3615 2284 1
+3643 2284 1
+3647 2284 1
+3675 2284 1
+3679 2284 1
+3682 2284 1
+3686 2284 1
+3714 2284 1
+3718 2284 1
+3746 2284 1
+3750 2284 1
+3778 2284 1
+3782 2284 1
+4073 2284 1
+4077 2284 1
+4105 2284 1
+4109 2284 1
+4137 2284 1
+4141 2284 1
+4169 2284 1
+4173 2284 1
+4204 2284 -1
+4223 2284 1
+5672 2284 -1
+5676 2284 1
+7275 2284 1
+7276 2284 -1
+9860 2284 38
+3193 2285 1
+3197 2285 1
+3225 2285 1
+3229 2285 1
+3257 2285 1
+3261 2285 1
+3289 2285 1
+3293 2285 1
+3556 2285 1
+3560 2285 1
+3588 2285 1
+3592 2285 1
+3620 2285 1
+3624 2285 1
+3652 2285 1
+3656 2285 1
+3691 2285 1
+3695 2285 1
+3723 2285 1
+3727 2285 1
+3755 2285 1
+3759 2285 1
+3787 2285 1
+3791 2285 1
+4082 2285 1
+4086 2285 1
+4114 2285 1
+4118 2285 1
+4146 2285 1
+4150 2285 1
+4178 2285 1
+4182 2285 1
+4205 2285 -1
+4212 2285 1
+5673 2285 -1
+5677 2285 1
+7277 2285 -1
+7280 2285 1
+9861 2285 38
+3194 2286 1
+3198 2286 1
+3226 2286 1
+3230 2286 1
+3258 2286 1
+3262 2286 1
+3290 2286 1
+3294 2286 1
+3553 2286 1
+3557 2286 1
+3585 2286 1
+3589 2286 1
+3617 2286 1
+3621 2286 1
+3649 2286 1
+3653 2286 1
+3692 2286 1
+3696 2286 1
+3724 2286 1
+3728 2286 1
+3756 2286 1
+3760 2286 1
+3788 2286 1
+3792 2286 1
+4083 2286 1
+4087 2286 1
+4115 2286 1
+4119 2286 1
+4147 2286 1
+4151 2286 1
+4179 2286 1
+4183 2286 1
+4206 2286 -1
+4209 2286 1
+5674 2286 -1
+5678 2286 1
+7277 2286 1
+7278 2286 -1
+9862 2286 38
+3195 2287 1
+3199 2287 1
+3227 2287 1
+3231 2287 1
+3259 2287 1
+3263 2287 1
+3291 2287 1
+3295 2287 1
+3554 2287 1
+3558 2287 1
+3586 2287 1
+3590 2287 1
+3618 2287 1
+3622 2287 1
+3650 2287 1
+3654 2287 1
+3689 2287 1
+3693 2287 1
+3721 2287 1
+3725 2287 1
+3753 2287 1
+3757 2287 1
+3785 2287 1
+3789 2287 1
+4084 2287 1
+4088 2287 1
+4116 2287 1
+4120 2287 1
+4148 2287 1
+4152 2287 1
+4180 2287 1
+4184 2287 1
+4207 2287 -1
+4210 2287 1
+5675 2287 -1
+5679 2287 1
+7278 2287 1
+7279 2287 -1
+9863 2287 38
+3196 2288 1
+3200 2288 1
+3228 2288 1
+3232 2288 1
+3260 2288 1
+3264 2288 1
+3292 2288 1
+3296 2288 1
+3555 2288 1
+3559 2288 1
+3587 2288 1
+3591 2288 1
+3619 2288 1
+3623 2288 1
+3651 2288 1
+3655 2288 1
+3690 2288 1
+3694 2288 1
+3722 2288 1
+3726 2288 1
+3754 2288 1
+3758 2288 1
+3786 2288 1
+3790 2288 1
+4081 2288 1
+4085 2288 1
+4113 2288 1
+4117 2288 1
+4145 2288 1
+4149 2288 1
+4177 2288 1
+4181 2288 1
+4208 2288 -1
+4211 2288 1
+5676 2288 -1
+5680 2288 1
+7279 2288 1
+7280 2288 -1
+9864 2288 38
+3297 2289 1
+3301 2289 1
+3329 2289 1
+3333 2289 1
+3361 2289 1
+3365 2289 1
+3393 2289 1
+3397 2289 1
+3436 2289 1
+3440 2289 1
+3468 2289 1
+3472 2289 1
+3500 2289 1
+3504 2289 1
+3532 2289 1
+3536 2289 1
+3827 2289 1
+3831 2289 1
+3859 2289 1
+3863 2289 1
+3891 2289 1
+3895 2289 1
+3923 2289 1
+3927 2289 1
+3962 2289 1
+3966 2289 1
+3994 2289 1
+3998 2289 1
+4026 2289 1
+4030 2289 1
+4058 2289 1
+4062 2289 1
+4200 2289 1
+4209 2289 -1
+5681 2289 1
+5693 2289 -1
+7281 2289 -1
+7284 2289 1
+9865 2289 38
+3298 2290 1
+3302 2290 1
+3330 2290 1
+3334 2290 1
+3362 2290 1
+3366 2290 1
+3394 2290 1
+3398 2290 1
+3433 2290 1
+3437 2290 1
+3465 2290 1
+3469 2290 1
+3497 2290 1
+3501 2290 1
+3529 2290 1
+3533 2290 1
+3828 2290 1
+3832 2290 1
+3860 2290 1
+3864 2290 1
+3892 2290 1
+3896 2290 1
+3924 2290 1
+3928 2290 1
+3963 2290 1
+3967 2290 1
+3995 2290 1
+3999 2290 1
+4027 2290 1
+4031 2290 1
+4059 2290 1
+4063 2290 1
+4197 2290 1
+4210 2290 -1
+5682 2290 1
+5694 2290 -1
+7281 2290 1
+7282 2290 -1
+9866 2290 38
+3299 2291 1
+3303 2291 1
+3331 2291 1
+3335 2291 1
+3363 2291 1
+3367 2291 1
+3395 2291 1
+3399 2291 1
+3434 2291 1
+3438 2291 1
+3466 2291 1
+3470 2291 1
+3498 2291 1
+3502 2291 1
+3530 2291 1
+3534 2291 1
+3825 2291 1
+3829 2291 1
+3857 2291 1
+3861 2291 1
+3889 2291 1
+3893 2291 1
+3921 2291 1
+3925 2291 1
+3964 2291 1
+3968 2291 1
+3996 2291 1
+4000 2291 1
+4028 2291 1
+4032 2291 1
+4060 2291 1
+4064 2291 1
+4198 2291 1
+4211 2291 -1
+5683 2291 1
+5695 2291 -1
+7282 2291 1
+7283 2291 -1
+9867 2291 38
+3300 2292 1
+3304 2292 1
+3332 2292 1
+3336 2292 1
+3364 2292 1
+3368 2292 1
+3396 2292 1
+3400 2292 1
+3435 2292 1
+3439 2292 1
+3467 2292 1
+3471 2292 1
+3499 2292 1
+3503 2292 1
+3531 2292 1
+3535 2292 1
+3826 2292 1
+3830 2292 1
+3858 2292 1
+3862 2292 1
+3890 2292 1
+3894 2292 1
+3922 2292 1
+3926 2292 1
+3961 2292 1
+3965 2292 1
+3993 2292 1
+3997 2292 1
+4025 2292 1
+4029 2292 1
+4057 2292 1
+4061 2292 1
+4199 2292 1
+4212 2292 -1
+5684 2292 1
+5696 2292 -1
+7283 2292 1
+7284 2292 -1
+9868 2292 38
+3305 2293 1
+3309 2293 1
+3337 2293 1
+3341 2293 1
+3369 2293 1
+3373 2293 1
+3401 2293 1
+3405 2293 1
+3444 2293 1
+3448 2293 1
+3476 2293 1
+3480 2293 1
+3508 2293 1
+3512 2293 1
+3540 2293 1
+3544 2293 1
+3835 2293 1
+3839 2293 1
+3867 2293 1
+3871 2293 1
+3899 2293 1
+3903 2293 1
+3931 2293 1
+3935 2293 1
+3938 2293 1
+3942 2293 1
+3970 2293 1
+3974 2293 1
+4002 2293 1
+4006 2293 1
+4034 2293 1
+4038 2293 1
+4204 2293 1
+4213 2293 -1
+5681 2293 -1
+5685 2293 1
+7285 2293 -1
+7288 2293 1
+9869 2293 38
+3306 2294 1
+3310 2294 1
+3338 2294 1
+3342 2294 1
+3370 2294 1
+3374 2294 1
+3402 2294 1
+3406 2294 1
+3441 2294 1
+3445 2294 1
+3473 2294 1
+3477 2294 1
+3505 2294 1
+3509 2294 1
+3537 2294 1
+3541 2294 1
+3836 2294 1
+3840 2294 1
+3868 2294 1
+3872 2294 1
+3900 2294 1
+3904 2294 1
+3932 2294 1
+3936 2294 1
+3939 2294 1
+3943 2294 1
+3971 2294 1
+3975 2294 1
+4003 2294 1
+4007 2294 1
+4035 2294 1
+4039 2294 1
+4201 2294 1
+4214 2294 -1
+5682 2294 -1
+5686 2294 1
+7285 2294 1
+7286 2294 -1
+9870 2294 38
+3307 2295 1
+3311 2295 1
+3339 2295 1
+3343 2295 1
+3371 2295 1
+3375 2295 1
+3403 2295 1
+3407 2295 1
+3442 2295 1
+3446 2295 1
+3474 2295 1
+3478 2295 1
+3506 2295 1
+3510 2295 1
+3538 2295 1
+3542 2295 1
+3833 2295 1
+3837 2295 1
+3865 2295 1
+3869 2295 1
+3897 2295 1
+3901 2295 1
+3929 2295 1
+3933 2295 1
+3940 2295 1
+3944 2295 1
+3972 2295 1
+3976 2295 1
+4004 2295 1
+4008 2295 1
+4036 2295 1
+4040 2295 1
+4202 2295 1
+4215 2295 -1
+5683 2295 -1
+5687 2295 1
+7286 2295 1
+7287 2295 -1
+9871 2295 38
+3308 2296 1
+3312 2296 1
+3340 2296 1
+3344 2296 1
+3372 2296 1
+3376 2296 1
+3404 2296 1
+3408 2296 1
+3443 2296 1
+3447 2296 1
+3475 2296 1
+3479 2296 1
+3507 2296 1
+3511 2296 1
+3539 2296 1
+3543 2296 1
+3834 2296 1
+3838 2296 1
+3866 2296 1
+3870 2296 1
+3898 2296 1
+3902 2296 1
+3930 2296 1
+3934 2296 1
+3937 2296 1
+3941 2296 1
+3969 2296 1
+3973 2296 1
+4001 2296 1
+4005 2296 1
+4033 2296 1
+4037 2296 1
+4203 2296 1
+4216 2296 -1
+5684 2296 -1
+5688 2296 1
+7287 2296 1
+7288 2296 -1
+9872 2296 38
+3313 2297 1
+3317 2297 1
+3345 2297 1
+3349 2297 1
+3377 2297 1
+3381 2297 1
+3409 2297 1
+3413 2297 1
+3452 2297 1
+3456 2297 1
+3484 2297 1
+3488 2297 1
+3516 2297 1
+3520 2297 1
+3548 2297 1
+3552 2297 1
+3811 2297 1
+3815 2297 1
+3843 2297 1
+3847 2297 1
+3875 2297 1
+3879 2297 1
+3907 2297 1
+3911 2297 1
+3946 2297 1
+3950 2297 1
+3978 2297 1
+3982 2297 1
+4010 2297 1
+4014 2297 1
+4042 2297 1
+4046 2297 1
+4208 2297 1
+4217 2297 -1
+5685 2297 -1
+5689 2297 1
+7289 2297 -1
+7292 2297 1
+9873 2297 38
+3314 2298 1
+3318 2298 1
+3346 2298 1
+3350 2298 1
+3378 2298 1
+3382 2298 1
+3410 2298 1
+3414 2298 1
+3449 2298 1
+3453 2298 1
+3481 2298 1
+3485 2298 1
+3513 2298 1
+3517 2298 1
+3545 2298 1
+3549 2298 1
+3812 2298 1
+3816 2298 1
+3844 2298 1
+3848 2298 1
+3876 2298 1
+3880 2298 1
+3908 2298 1
+3912 2298 1
+3947 2298 1
+3951 2298 1
+3979 2298 1
+3983 2298 1
+4011 2298 1
+4015 2298 1
+4043 2298 1
+4047 2298 1
+4205 2298 1
+4218 2298 -1
+5686 2298 -1
+5690 2298 1
+7289 2298 1
+7290 2298 -1
+9874 2298 38
+3315 2299 1
+3319 2299 1
+3347 2299 1
+3351 2299 1
+3379 2299 1
+3383 2299 1
+3411 2299 1
+3415 2299 1
+3450 2299 1
+3454 2299 1
+3482 2299 1
+3486 2299 1
+3514 2299 1
+3518 2299 1
+3546 2299 1
+3550 2299 1
+3809 2299 1
+3813 2299 1
+3841 2299 1
+3845 2299 1
+3873 2299 1
+3877 2299 1
+3905 2299 1
+3909 2299 1
+3948 2299 1
+3952 2299 1
+3980 2299 1
+3984 2299 1
+4012 2299 1
+4016 2299 1
+4044 2299 1
+4048 2299 1
+4206 2299 1
+4219 2299 -1
+5687 2299 -1
+5691 2299 1
+7290 2299 1
+7291 2299 -1
+9875 2299 38
+3316 2300 1
+3320 2300 1
+3348 2300 1
+3352 2300 1
+3380 2300 1
+3384 2300 1
+3412 2300 1
+3416 2300 1
+3451 2300 1
+3455 2300 1
+3483 2300 1
+3487 2300 1
+3515 2300 1
+3519 2300 1
+3547 2300 1
+3551 2300 1
+3810 2300 1
+3814 2300 1
+3842 2300 1
+3846 2300 1
+3874 2300 1
+3878 2300 1
+3906 2300 1
+3910 2300 1
+3945 2300 1
+3949 2300 1
+3977 2300 1
+3981 2300 1
+4009 2300 1
+4013 2300 1
+4041 2300 1
+4045 2300 1
+4207 2300 1
+4220 2300 -1
+5688 2300 -1
+5692 2300 1
+7291 2300 1
+7292 2300 -1
+9876 2300 38
+3321 2301 1
+3325 2301 1
+3353 2301 1
+3357 2301 1
+3385 2301 1
+3389 2301 1
+3417 2301 1
+3421 2301 1
+3428 2301 1
+3432 2301 1
+3460 2301 1
+3464 2301 1
+3492 2301 1
+3496 2301 1
+3524 2301 1
+3528 2301 1
+3819 2301 1
+3823 2301 1
+3851 2301 1
+3855 2301 1
+3883 2301 1
+3887 2301 1
+3915 2301 1
+3919 2301 1
+3954 2301 1
+3958 2301 1
+3986 2301 1
+3990 2301 1
+4018 2301 1
+4022 2301 1
+4050 2301 1
+4054 2301 1
+4196 2301 1
+4221 2301 -1
+5689 2301 -1
+5693 2301 1
+7293 2301 -1
+7296 2301 1
+9877 2301 38
+3322 2302 1
+3326 2302 1
+3354 2302 1
+3358 2302 1
+3386 2302 1
+3390 2302 1
+3418 2302 1
+3422 2302 1
+3425 2302 1
+3429 2302 1
+3457 2302 1
+3461 2302 1
+3489 2302 1
+3493 2302 1
+3521 2302 1
+3525 2302 1
+3820 2302 1
+3824 2302 1
+3852 2302 1
+3856 2302 1
+3884 2302 1
+3888 2302 1
+3916 2302 1
+3920 2302 1
+3955 2302 1
+3959 2302 1
+3987 2302 1
+3991 2302 1
+4019 2302 1
+4023 2302 1
+4051 2302 1
+4055 2302 1
+4193 2302 1
+4222 2302 -1
+5690 2302 -1
+5694 2302 1
+7293 2302 1
+7294 2302 -1
+9878 2302 38
+3323 2303 1
+3327 2303 1
+3355 2303 1
+3359 2303 1
+3387 2303 1
+3391 2303 1
+3419 2303 1
+3423 2303 1
+3426 2303 1
+3430 2303 1
+3458 2303 1
+3462 2303 1
+3490 2303 1
+3494 2303 1
+3522 2303 1
+3526 2303 1
+3817 2303 1
+3821 2303 1
+3849 2303 1
+3853 2303 1
+3881 2303 1
+3885 2303 1
+3913 2303 1
+3917 2303 1
+3956 2303 1
+3960 2303 1
+3988 2303 1
+3992 2303 1
+4020 2303 1
+4024 2303 1
+4052 2303 1
+4056 2303 1
+4194 2303 1
+4223 2303 -1
+5691 2303 -1
+5695 2303 1
+7294 2303 1
+7295 2303 -1
+9879 2303 38
+3324 2304 1
+3328 2304 1
+3356 2304 1
+3360 2304 1
+3388 2304 1
+3392 2304 1
+3420 2304 1
+3424 2304 1
+3427 2304 1
+3431 2304 1
+3459 2304 1
+3463 2304 1
+3491 2304 1
+3495 2304 1
+3523 2304 1
+3527 2304 1
+3818 2304 1
+3822 2304 1
+3850 2304 1
+3854 2304 1
+3882 2304 1
+3886 2304 1
+3914 2304 1
+3918 2304 1
+3953 2304 1
+3957 2304 1
+3985 2304 1
+3989 2304 1
+4017 2304 1
+4021 2304 1
+4049 2304 1
+4053 2304 1
+4195 2304 1
+4224 2304 -1
+5692 2304 -1
+5696 2304 1
+7295 2304 1
+7296 2304 -1
+9880 2304 38
+4225 2305 1
+4257 2305 1
+4289 2305 1
+4321 2305 1
+4481 2305 1
+4513 2305 1
+7297 2305 -1
+7300 2305 1
+9881 2305 38
+4226 2306 1
+4258 2306 1
+4290 2306 1
+4322 2306 1
+4482 2306 1
+4514 2306 1
+7297 2306 1
+7298 2306 -1
+9882 2306 38
+4227 2307 1
+4259 2307 1
+4291 2307 1
+4323 2307 1
+4483 2307 1
+4515 2307 1
+7298 2307 1
+7299 2307 -1
+9883 2307 38
+4228 2308 1
+4260 2308 1
+4292 2308 1
+4324 2308 1
+4484 2308 1
+4516 2308 1
+7299 2308 1
+7300 2308 -1
+9884 2308 38
+4229 2309 1
+4261 2309 1
+4293 2309 1
+4325 2309 1
+4485 2309 1
+4517 2309 1
+7301 2309 -1
+7304 2309 1
+9885 2309 38
+4230 2310 1
+4262 2310 1
+4294 2310 1
+4326 2310 1
+4486 2310 1
+4518 2310 1
+7301 2310 1
+7302 2310 -1
+9886 2310 38
+4231 2311 1
+4263 2311 1
+4295 2311 1
+4327 2311 1
+4487 2311 1
+4519 2311 1
+7302 2311 1
+7303 2311 -1
+9887 2311 38
+4232 2312 1
+4264 2312 1
+4296 2312 1
+4328 2312 1
+4488 2312 1
+4520 2312 1
+7303 2312 1
+7304 2312 -1
+9888 2312 38
+4233 2313 1
+4265 2313 1
+4297 2313 1
+4329 2313 1
+4489 2313 1
+4521 2313 1
+7305 2313 -1
+7308 2313 1
+9889 2313 38
+4234 2314 1
+4266 2314 1
+4298 2314 1
+4330 2314 1
+4490 2314 1
+4522 2314 1
+7305 2314 1
+7306 2314 -1
+9890 2314 38
+4235 2315 1
+4267 2315 1
+4299 2315 1
+4331 2315 1
+4491 2315 1
+4523 2315 1
+7306 2315 1
+7307 2315 -1
+9891 2315 38
+4236 2316 1
+4268 2316 1
+4300 2316 1
+4332 2316 1
+4492 2316 1
+4524 2316 1
+7307 2316 1
+7308 2316 -1
+9892 2316 38
+4237 2317 1
+4269 2317 1
+4301 2317 1
+4333 2317 1
+4493 2317 1
+4525 2317 1
+7309 2317 -1
+7312 2317 1
+9893 2317 38
+4238 2318 1
+4270 2318 1
+4302 2318 1
+4334 2318 1
+4494 2318 1
+4526 2318 1
+7309 2318 1
+7310 2318 -1
+9894 2318 38
+4239 2319 1
+4271 2319 1
+4303 2319 1
+4335 2319 1
+4495 2319 1
+4527 2319 1
+7310 2319 1
+7311 2319 -1
+9895 2319 38
+4240 2320 1
+4272 2320 1
+4304 2320 1
+4336 2320 1
+4496 2320 1
+4528 2320 1
+7311 2320 1
+7312 2320 -1
+9896 2320 38
+4241 2321 1
+4273 2321 1
+4305 2321 1
+4337 2321 1
+4497 2321 1
+4529 2321 1
+7313 2321 -1
+7316 2321 1
+9897 2321 38
+4242 2322 1
+4274 2322 1
+4306 2322 1
+4338 2322 1
+4498 2322 1
+4530 2322 1
+7313 2322 1
+7314 2322 -1
+9898 2322 38
+4243 2323 1
+4275 2323 1
+4307 2323 1
+4339 2323 1
+4499 2323 1
+4531 2323 1
+7314 2323 1
+7315 2323 -1
+9899 2323 38
+4244 2324 1
+4276 2324 1
+4308 2324 1
+4340 2324 1
+4500 2324 1
+4532 2324 1
+7315 2324 1
+7316 2324 -1
+9900 2324 38
+4245 2325 1
+4277 2325 1
+4309 2325 1
+4341 2325 1
+4501 2325 1
+4533 2325 1
+7317 2325 -1
+7320 2325 1
+9901 2325 38
+4246 2326 1
+4278 2326 1
+4310 2326 1
+4342 2326 1
+4502 2326 1
+4534 2326 1
+7317 2326 1
+7318 2326 -1
+9902 2326 38
+4247 2327 1
+4279 2327 1
+4311 2327 1
+4343 2327 1
+4503 2327 1
+4535 2327 1
+7318 2327 1
+7319 2327 -1
+9903 2327 38
+4248 2328 1
+4280 2328 1
+4312 2328 1
+4344 2328 1
+4504 2328 1
+4536 2328 1
+7319 2328 1
+7320 2328 -1
+9904 2328 38
+4249 2329 1
+4281 2329 1
+4313 2329 1
+4345 2329 1
+4505 2329 1
+4537 2329 1
+7321 2329 -1
+7324 2329 1
+9905 2329 38
+4250 2330 1
+4282 2330 1
+4314 2330 1
+4346 2330 1
+4506 2330 1
+4538 2330 1
+7321 2330 1
+7322 2330 -1
+9906 2330 38
+4251 2331 1
+4283 2331 1
+4315 2331 1
+4347 2331 1
+4507 2331 1
+4539 2331 1
+7322 2331 1
+7323 2331 -1
+9907 2331 38
+4252 2332 1
+4284 2332 1
+4316 2332 1
+4348 2332 1
+4508 2332 1
+4540 2332 1
+7323 2332 1
+7324 2332 -1
+9908 2332 38
+4253 2333 1
+4285 2333 1
+4317 2333 1
+4349 2333 1
+4509 2333 1
+4541 2333 1
+7325 2333 -1
+7328 2333 1
+9909 2333 38
+4254 2334 1
+4286 2334 1
+4318 2334 1
+4350 2334 1
+4510 2334 1
+4542 2334 1
+7325 2334 1
+7326 2334 -1
+9910 2334 38
+4255 2335 1
+4287 2335 1
+4319 2335 1
+4351 2335 1
+4511 2335 1
+4543 2335 1
+7326 2335 1
+7327 2335 -1
+9911 2335 38
+4256 2336 1
+4288 2336 1
+4320 2336 1
+4352 2336 1
+4512 2336 1
+4544 2336 1
+7327 2336 1
+7328 2336 -1
+9912 2336 38
+4225 2337 -1
+4280 2337 1
+4353 2337 1
+4449 2337 -1
+4545 2337 1
+4549 2337 1
+4609 2337 1
+4613 2337 1
+4673 2337 1
+4677 2337 1
+4737 2337 1
+4741 2337 1
+7329 2337 -1
+7332 2337 1
+9913 2337 38
+4226 2338 -1
+4277 2338 1
+4354 2338 1
+4450 2338 -1
+4546 2338 1
+4550 2338 1
+4610 2338 1
+4614 2338 1
+4674 2338 1
+4678 2338 1
+4738 2338 1
+4742 2338 1
+7329 2338 1
+7330 2338 -1
+9914 2338 38
+4227 2339 -1
+4278 2339 1
+4355 2339 1
+4451 2339 -1
+4547 2339 1
+4551 2339 1
+4611 2339 1
+4615 2339 1
+4675 2339 1
+4679 2339 1
+4739 2339 1
+4743 2339 1
+7330 2339 1
+7331 2339 -1
+9915 2339 38
+4228 2340 -1
+4279 2340 1
+4356 2340 1
+4452 2340 -1
+4548 2340 1
+4552 2340 1
+4612 2340 1
+4616 2340 1
+4676 2340 1
+4680 2340 1
+4740 2340 1
+4744 2340 1
+7331 2340 1
+7332 2340 -1
+9916 2340 38
+4229 2341 -1
+4284 2341 1
+4357 2341 1
+4453 2341 -1
+4553 2341 1
+4557 2341 1
+4617 2341 1
+4621 2341 1
+4681 2341 1
+4685 2341 1
+4745 2341 1
+4749 2341 1
+7333 2341 -1
+7336 2341 1
+9917 2341 38
+4230 2342 -1
+4281 2342 1
+4358 2342 1
+4454 2342 -1
+4554 2342 1
+4558 2342 1
+4618 2342 1
+4622 2342 1
+4682 2342 1
+4686 2342 1
+4746 2342 1
+4750 2342 1
+7333 2342 1
+7334 2342 -1
+9918 2342 38
+4231 2343 -1
+4282 2343 1
+4359 2343 1
+4455 2343 -1
+4555 2343 1
+4559 2343 1
+4619 2343 1
+4623 2343 1
+4683 2343 1
+4687 2343 1
+4747 2343 1
+4751 2343 1
+7334 2343 1
+7335 2343 -1
+9919 2343 38
+4232 2344 -1
+4283 2344 1
+4360 2344 1
+4456 2344 -1
+4556 2344 1
+4560 2344 1
+4620 2344 1
+4624 2344 1
+4684 2344 1
+4688 2344 1
+4748 2344 1
+4752 2344 1
+7335 2344 1
+7336 2344 -1
+9920 2344 38
+4233 2345 -1
+4288 2345 1
+4361 2345 1
+4457 2345 -1
+4561 2345 1
+4565 2345 1
+4625 2345 1
+4629 2345 1
+4689 2345 1
+4693 2345 1
+4753 2345 1
+4757 2345 1
+7337 2345 -1
+7340 2345 1
+9921 2345 38
+4234 2346 -1
+4285 2346 1
+4362 2346 1
+4458 2346 -1
+4562 2346 1
+4566 2346 1
+4626 2346 1
+4630 2346 1
+4690 2346 1
+4694 2346 1
+4754 2346 1
+4758 2346 1
+7337 2346 1
+7338 2346 -1
+9922 2346 38
+4235 2347 -1
+4286 2347 1
+4363 2347 1
+4459 2347 -1
+4563 2347 1
+4567 2347 1
+4627 2347 1
+4631 2347 1
+4691 2347 1
+4695 2347 1
+4755 2347 1
+4759 2347 1
+7338 2347 1
+7339 2347 -1
+9923 2347 38
+4236 2348 -1
+4287 2348 1
+4364 2348 1
+4460 2348 -1
+4564 2348 1
+4568 2348 1
+4628 2348 1
+4632 2348 1
+4692 2348 1
+4696 2348 1
+4756 2348 1
+4760 2348 1
+7339 2348 1
+7340 2348 -1
+9924 2348 38
+4237 2349 -1
+4260 2349 1
+4365 2349 1
+4461 2349 -1
+4569 2349 1
+4573 2349 1
+4633 2349 1
+4637 2349 1
+4697 2349 1
+4701 2349 1
+4761 2349 1
+4765 2349 1
+7341 2349 -1
+7344 2349 1
+9925 2349 38
+4238 2350 -1
+4257 2350 1
+4366 2350 1
+4462 2350 -1
+4570 2350 1
+4574 2350 1
+4634 2350 1
+4638 2350 1
+4698 2350 1
+4702 2350 1
+4762 2350 1
+4766 2350 1
+7341 2350 1
+7342 2350 -1
+9926 2350 38
+4239 2351 -1
+4258 2351 1
+4367 2351 1
+4463 2351 -1
+4571 2351 1
+4575 2351 1
+4635 2351 1
+4639 2351 1
+4699 2351 1
+4703 2351 1
+4763 2351 1
+4767 2351 1
+7342 2351 1
+7343 2351 -1
+9927 2351 38
+4240 2352 -1
+4259 2352 1
+4368 2352 1
+4464 2352 -1
+4572 2352 1
+4576 2352 1
+4636 2352 1
+4640 2352 1
+4700 2352 1
+4704 2352 1
+4764 2352 1
+4768 2352 1
+7343 2352 1
+7344 2352 -1
+9928 2352 38
+4241 2353 -1
+4264 2353 1
+4369 2353 1
+4465 2353 -1
+4577 2353 1
+4581 2353 1
+4641 2353 1
+4645 2353 1
+4705 2353 1
+4709 2353 1
+4769 2353 1
+4773 2353 1
+7345 2353 -1
+7348 2353 1
+9929 2353 38
+4242 2354 -1
+4261 2354 1
+4370 2354 1
+4466 2354 -1
+4578 2354 1
+4582 2354 1
+4642 2354 1
+4646 2354 1
+4706 2354 1
+4710 2354 1
+4770 2354 1
+4774 2354 1
+7345 2354 1
+7346 2354 -1
+9930 2354 38
+4243 2355 -1
+4262 2355 1
+4371 2355 1
+4467 2355 -1
+4579 2355 1
+4583 2355 1
+4643 2355 1
+4647 2355 1
+4707 2355 1
+4711 2355 1
+4771 2355 1
+4775 2355 1
+7346 2355 1
+7347 2355 -1
+9931 2355 38
+4244 2356 -1
+4263 2356 1
+4372 2356 1
+4468 2356 -1
+4580 2356 1
+4584 2356 1
+4644 2356 1
+4648 2356 1
+4708 2356 1
+4712 2356 1
+4772 2356 1
+4776 2356 1
+7347 2356 1
+7348 2356 -1
+9932 2356 38
+4245 2357 -1
+4268 2357 1
+4373 2357 1
+4469 2357 -1
+4585 2357 1
+4589 2357 1
+4649 2357 1
+4653 2357 1
+4713 2357 1
+4717 2357 1
+4777 2357 1
+4781 2357 1
+7349 2357 -1
+7352 2357 1
+9933 2357 38
+4246 2358 -1
+4265 2358 1
+4374 2358 1
+4470 2358 -1
+4586 2358 1
+4590 2358 1
+4650 2358 1
+4654 2358 1
+4714 2358 1
+4718 2358 1
+4778 2358 1
+4782 2358 1
+7349 2358 1
+7350 2358 -1
+9934 2358 38
+4247 2359 -1
+4266 2359 1
+4375 2359 1
+4471 2359 -1
+4587 2359 1
+4591 2359 1
+4651 2359 1
+4655 2359 1
+4715 2359 1
+4719 2359 1
+4779 2359 1
+4783 2359 1
+7350 2359 1
+7351 2359 -1
+9935 2359 38
+4248 2360 -1
+4267 2360 1
+4376 2360 1
+4472 2360 -1
+4588 2360 1
+4592 2360 1
+4652 2360 1
+4656 2360 1
+4716 2360 1
+4720 2360 1
+4780 2360 1
+4784 2360 1
+7351 2360 1
+7352 2360 -1
+9936 2360 38
+4249 2361 -1
+4272 2361 1
+4377 2361 1
+4473 2361 -1
+4593 2361 1
+4597 2361 1
+4657 2361 1
+4661 2361 1
+4721 2361 1
+4725 2361 1
+4785 2361 1
+4789 2361 1
+7353 2361 -1
+7356 2361 1
+9937 2361 38
+4250 2362 -1
+4269 2362 1
+4378 2362 1
+4474 2362 -1
+4594 2362 1
+4598 2362 1
+4658 2362 1
+4662 2362 1
+4722 2362 1
+4726 2362 1
+4786 2362 1
+4790 2362 1
+7353 2362 1
+7354 2362 -1
+9938 2362 38
+4251 2363 -1
+4270 2363 1
+4379 2363 1
+4475 2363 -1
+4595 2363 1
+4599 2363 1
+4659 2363 1
+4663 2363 1
+4723 2363 1
+4727 2363 1
+4787 2363 1
+4791 2363 1
+7354 2363 1
+7355 2363 -1
+9939 2363 38
+4252 2364 -1
+4271 2364 1
+4380 2364 1
+4476 2364 -1
+4596 2364 1
+4600 2364 1
+4660 2364 1
+4664 2364 1
+4724 2364 1
+4728 2364 1
+4788 2364 1
+4792 2364 1
+7355 2364 1
+7356 2364 -1
+9940 2364 38
+4253 2365 -1
+4276 2365 1
+4381 2365 1
+4477 2365 -1
+4601 2365 1
+4605 2365 1
+4665 2365 1
+4669 2365 1
+4729 2365 1
+4733 2365 1
+4793 2365 1
+4797 2365 1
+7357 2365 -1
+7360 2365 1
+9941 2365 38
+4254 2366 -1
+4273 2366 1
+4382 2366 1
+4478 2366 -1
+4602 2366 1
+4606 2366 1
+4666 2366 1
+4670 2366 1
+4730 2366 1
+4734 2366 1
+4794 2366 1
+4798 2366 1
+7357 2366 1
+7358 2366 -1
+9942 2366 38
+4255 2367 -1
+4274 2367 1
+4383 2367 1
+4479 2367 -1
+4603 2367 1
+4607 2367 1
+4667 2367 1
+4671 2367 1
+4731 2367 1
+4735 2367 1
+4795 2367 1
+4799 2367 1
+7358 2367 1
+7359 2367 -1
+9943 2367 38
+4256 2368 -1
+4275 2368 1
+4384 2368 1
+4480 2368 -1
+4604 2368 1
+4608 2368 1
+4668 2368 1
+4672 2368 1
+4732 2368 1
+4736 2368 1
+4796 2368 1
+4800 2368 1
+7359 2368 1
+7360 2368 -1
+9944 2368 38
+4257 2369 -1
+4312 2369 1
+4353 2369 -1
+4385 2369 1
+4801 2369 1
+4805 2369 1
+4865 2369 1
+4869 2369 1
+4929 2369 1
+4933 2369 1
+4993 2369 1
+4997 2369 1
+7361 2369 -1
+7364 2369 1
+9945 2369 38
+4258 2370 -1
+4309 2370 1
+4354 2370 -1
+4386 2370 1
+4802 2370 1
+4806 2370 1
+4866 2370 1
+4870 2370 1
+4930 2370 1
+4934 2370 1
+4994 2370 1
+4998 2370 1
+7361 2370 1
+7362 2370 -1
+9946 2370 38
+4259 2371 -1
+4310 2371 1
+4355 2371 -1
+4387 2371 1
+4803 2371 1
+4807 2371 1
+4867 2371 1
+4871 2371 1
+4931 2371 1
+4935 2371 1
+4995 2371 1
+4999 2371 1
+7362 2371 1
+7363 2371 -1
+9947 2371 38
+4260 2372 -1
+4311 2372 1
+4356 2372 -1
+4388 2372 1
+4804 2372 1
+4808 2372 1
+4868 2372 1
+4872 2372 1
+4932 2372 1
+4936 2372 1
+4996 2372 1
+5000 2372 1
+7363 2372 1
+7364 2372 -1
+9948 2372 38
+4261 2373 -1
+4316 2373 1
+4357 2373 -1
+4389 2373 1
+4809 2373 1
+4813 2373 1
+4873 2373 1
+4877 2373 1
+4937 2373 1
+4941 2373 1
+5001 2373 1
+5005 2373 1
+7365 2373 -1
+7368 2373 1
+9949 2373 38
+4262 2374 -1
+4313 2374 1
+4358 2374 -1
+4390 2374 1
+4810 2374 1
+4814 2374 1
+4874 2374 1
+4878 2374 1
+4938 2374 1
+4942 2374 1
+5002 2374 1
+5006 2374 1
+7365 2374 1
+7366 2374 -1
+9950 2374 38
+4263 2375 -1
+4314 2375 1
+4359 2375 -1
+4391 2375 1
+4811 2375 1
+4815 2375 1
+4875 2375 1
+4879 2375 1
+4939 2375 1
+4943 2375 1
+5003 2375 1
+5007 2375 1
+7366 2375 1
+7367 2375 -1
+9951 2375 38
+4264 2376 -1
+4315 2376 1
+4360 2376 -1
+4392 2376 1
+4812 2376 1
+4816 2376 1
+4876 2376 1
+4880 2376 1
+4940 2376 1
+4944 2376 1
+5004 2376 1
+5008 2376 1
+7367 2376 1
+7368 2376 -1
+9952 2376 38
+4265 2377 -1
+4320 2377 1
+4361 2377 -1
+4393 2377 1
+4817 2377 1
+4821 2377 1
+4881 2377 1
+4885 2377 1
+4945 2377 1
+4949 2377 1
+5009 2377 1
+5013 2377 1
+7369 2377 -1
+7372 2377 1
+9953 2377 38
+4266 2378 -1
+4317 2378 1
+4362 2378 -1
+4394 2378 1
+4818 2378 1
+4822 2378 1
+4882 2378 1
+4886 2378 1
+4946 2378 1
+4950 2378 1
+5010 2378 1
+5014 2378 1
+7369 2378 1
+7370 2378 -1
+9954 2378 38
+4267 2379 -1
+4318 2379 1
+4363 2379 -1
+4395 2379 1
+4819 2379 1
+4823 2379 1
+4883 2379 1
+4887 2379 1
+4947 2379 1
+4951 2379 1
+5011 2379 1
+5015 2379 1
+7370 2379 1
+7371 2379 -1
+9955 2379 38
+4268 2380 -1
+4319 2380 1
+4364 2380 -1
+4396 2380 1
+4820 2380 1
+4824 2380 1
+4884 2380 1
+4888 2380 1
+4948 2380 1
+4952 2380 1
+5012 2380 1
+5016 2380 1
+7371 2380 1
+7372 2380 -1
+9956 2380 38
+4269 2381 -1
+4292 2381 1
+4365 2381 -1
+4397 2381 1
+4825 2381 1
+4829 2381 1
+4889 2381 1
+4893 2381 1
+4953 2381 1
+4957 2381 1
+5017 2381 1
+5021 2381 1
+7373 2381 -1
+7376 2381 1
+9957 2381 38
+4270 2382 -1
+4289 2382 1
+4366 2382 -1
+4398 2382 1
+4826 2382 1
+4830 2382 1
+4890 2382 1
+4894 2382 1
+4954 2382 1
+4958 2382 1
+5018 2382 1
+5022 2382 1
+7373 2382 1
+7374 2382 -1
+9958 2382 38
+4271 2383 -1
+4290 2383 1
+4367 2383 -1
+4399 2383 1
+4827 2383 1
+4831 2383 1
+4891 2383 1
+4895 2383 1
+4955 2383 1
+4959 2383 1
+5019 2383 1
+5023 2383 1
+7374 2383 1
+7375 2383 -1
+9959 2383 38
+4272 2384 -1
+4291 2384 1
+4368 2384 -1
+4400 2384 1
+4828 2384 1
+4832 2384 1
+4892 2384 1
+4896 2384 1
+4956 2384 1
+4960 2384 1
+5020 2384 1
+5024 2384 1
+7375 2384 1
+7376 2384 -1
+9960 2384 38
+4273 2385 -1
+4296 2385 1
+4369 2385 -1
+4401 2385 1
+4833 2385 1
+4837 2385 1
+4897 2385 1
+4901 2385 1
+4961 2385 1
+4965 2385 1
+5025 2385 1
+5029 2385 1
+7377 2385 -1
+7380 2385 1
+9961 2385 38
+4274 2386 -1
+4293 2386 1
+4370 2386 -1
+4402 2386 1
+4834 2386 1
+4838 2386 1
+4898 2386 1
+4902 2386 1
+4962 2386 1
+4966 2386 1
+5026 2386 1
+5030 2386 1
+7377 2386 1
+7378 2386 -1
+9962 2386 38
+4275 2387 -1
+4294 2387 1
+4371 2387 -1
+4403 2387 1
+4835 2387 1
+4839 2387 1
+4899 2387 1
+4903 2387 1
+4963 2387 1
+4967 2387 1
+5027 2387 1
+5031 2387 1
+7378 2387 1
+7379 2387 -1
+9963 2387 38
+4276 2388 -1
+4295 2388 1
+4372 2388 -1
+4404 2388 1
+4836 2388 1
+4840 2388 1
+4900 2388 1
+4904 2388 1
+4964 2388 1
+4968 2388 1
+5028 2388 1
+5032 2388 1
+7379 2388 1
+7380 2388 -1
+9964 2388 38
+4277 2389 -1
+4300 2389 1
+4373 2389 -1
+4405 2389 1
+4841 2389 1
+4845 2389 1
+4905 2389 1
+4909 2389 1
+4969 2389 1
+4973 2389 1
+5033 2389 1
+5037 2389 1
+7381 2389 -1
+7384 2389 1
+9965 2389 38
+4278 2390 -1
+4297 2390 1
+4374 2390 -1
+4406 2390 1
+4842 2390 1
+4846 2390 1
+4906 2390 1
+4910 2390 1
+4970 2390 1
+4974 2390 1
+5034 2390 1
+5038 2390 1
+7381 2390 1
+7382 2390 -1
+9966 2390 38
+4279 2391 -1
+4298 2391 1
+4375 2391 -1
+4407 2391 1
+4843 2391 1
+4847 2391 1
+4907 2391 1
+4911 2391 1
+4971 2391 1
+4975 2391 1
+5035 2391 1
+5039 2391 1
+7382 2391 1
+7383 2391 -1
+9967 2391 38
+4280 2392 -1
+4299 2392 1
+4376 2392 -1
+4408 2392 1
+4844 2392 1
+4848 2392 1
+4908 2392 1
+4912 2392 1
+4972 2392 1
+4976 2392 1
+5036 2392 1
+5040 2392 1
+7383 2392 1
+7384 2392 -1
+9968 2392 38
+4281 2393 -1
+4304 2393 1
+4377 2393 -1
+4409 2393 1
+4849 2393 1
+4853 2393 1
+4913 2393 1
+4917 2393 1
+4977 2393 1
+4981 2393 1
+5041 2393 1
+5045 2393 1
+7385 2393 -1
+7388 2393 1
+9969 2393 38
+4282 2394 -1
+4301 2394 1
+4378 2394 -1
+4410 2394 1
+4850 2394 1
+4854 2394 1
+4914 2394 1
+4918 2394 1
+4978 2394 1
+4982 2394 1
+5042 2394 1
+5046 2394 1
+7385 2394 1
+7386 2394 -1
+9970 2394 38
+4283 2395 -1
+4302 2395 1
+4379 2395 -1
+4411 2395 1
+4851 2395 1
+4855 2395 1
+4915 2395 1
+4919 2395 1
+4979 2395 1
+4983 2395 1
+5043 2395 1
+5047 2395 1
+7386 2395 1
+7387 2395 -1
+9971 2395 38
+4284 2396 -1
+4303 2396 1
+4380 2396 -1
+4412 2396 1
+4852 2396 1
+4856 2396 1
+4916 2396 1
+4920 2396 1
+4980 2396 1
+4984 2396 1
+5044 2396 1
+5048 2396 1
+7387 2396 1
+7388 2396 -1
+9972 2396 38
+4285 2397 -1
+4308 2397 1
+4381 2397 -1
+4413 2397 1
+4857 2397 1
+4861 2397 1
+4921 2397 1
+4925 2397 1
+4985 2397 1
+4989 2397 1
+5049 2397 1
+5053 2397 1
+7389 2397 -1
+7392 2397 1
+9973 2397 38
+4286 2398 -1
+4305 2398 1
+4382 2398 -1
+4414 2398 1
+4858 2398 1
+4862 2398 1
+4922 2398 1
+4926 2398 1
+4986 2398 1
+4990 2398 1
+5050 2398 1
+5054 2398 1
+7389 2398 1
+7390 2398 -1
+9974 2398 38
+4287 2399 -1
+4306 2399 1
+4383 2399 -1
+4415 2399 1
+4859 2399 1
+4863 2399 1
+4923 2399 1
+4927 2399 1
+4987 2399 1
+4991 2399 1
+5051 2399 1
+5055 2399 1
+7390 2399 1
+7391 2399 -1
+9975 2399 38
+4288 2400 -1
+4307 2400 1
+4384 2400 -1
+4416 2400 1
+4860 2400 1
+4864 2400 1
+4924 2400 1
+4928 2400 1
+4988 2400 1
+4992 2400 1
+5052 2400 1
+5056 2400 1
+7391 2400 1
+7392 2400 -1
+9976 2400 38
+4289 2401 -1
+4344 2401 1
+4385 2401 -1
+4417 2401 1
+5057 2401 1
+5061 2401 1
+5121 2401 1
+5125 2401 1
+5185 2401 1
+5189 2401 1
+5249 2401 1
+5253 2401 1
+7393 2401 -1
+7396 2401 1
+9977 2401 38
+4290 2402 -1
+4341 2402 1
+4386 2402 -1
+4418 2402 1
+5058 2402 1
+5062 2402 1
+5122 2402 1
+5126 2402 1
+5186 2402 1
+5190 2402 1
+5250 2402 1
+5254 2402 1
+7393 2402 1
+7394 2402 -1
+9978 2402 38
+4291 2403 -1
+4342 2403 1
+4387 2403 -1
+4419 2403 1
+5059 2403 1
+5063 2403 1
+5123 2403 1
+5127 2403 1
+5187 2403 1
+5191 2403 1
+5251 2403 1
+5255 2403 1
+7394 2403 1
+7395 2403 -1
+9979 2403 38
+4292 2404 -1
+4343 2404 1
+4388 2404 -1
+4420 2404 1
+5060 2404 1
+5064 2404 1
+5124 2404 1
+5128 2404 1
+5188 2404 1
+5192 2404 1
+5252 2404 1
+5256 2404 1
+7395 2404 1
+7396 2404 -1
+9980 2404 38
+4293 2405 -1
+4348 2405 1
+4389 2405 -1
+4421 2405 1
+5065 2405 1
+5069 2405 1
+5129 2405 1
+5133 2405 1
+5193 2405 1
+5197 2405 1
+5257 2405 1
+5261 2405 1
+7397 2405 -1
+7400 2405 1
+9981 2405 38
+4294 2406 -1
+4345 2406 1
+4390 2406 -1
+4422 2406 1
+5066 2406 1
+5070 2406 1
+5130 2406 1
+5134 2406 1
+5194 2406 1
+5198 2406 1
+5258 2406 1
+5262 2406 1
+7397 2406 1
+7398 2406 -1
+9982 2406 38
+4295 2407 -1
+4346 2407 1
+4391 2407 -1
+4423 2407 1
+5067 2407 1
+5071 2407 1
+5131 2407 1
+5135 2407 1
+5195 2407 1
+5199 2407 1
+5259 2407 1
+5263 2407 1
+7398 2407 1
+7399 2407 -1
+9983 2407 38
+4296 2408 -1
+4347 2408 1
+4392 2408 -1
+4424 2408 1
+5068 2408 1
+5072 2408 1
+5132 2408 1
+5136 2408 1
+5196 2408 1
+5200 2408 1
+5260 2408 1
+5264 2408 1
+7399 2408 1
+7400 2408 -1
+9984 2408 38
+4297 2409 -1
+4352 2409 1
+4393 2409 -1
+4425 2409 1
+5073 2409 1
+5077 2409 1
+5137 2409 1
+5141 2409 1
+5201 2409 1
+5205 2409 1
+5265 2409 1
+5269 2409 1
+7401 2409 -1
+7404 2409 1
+9985 2409 38
+4298 2410 -1
+4349 2410 1
+4394 2410 -1
+4426 2410 1
+5074 2410 1
+5078 2410 1
+5138 2410 1
+5142 2410 1
+5202 2410 1
+5206 2410 1
+5266 2410 1
+5270 2410 1
+7401 2410 1
+7402 2410 -1
+9986 2410 38
+4299 2411 -1
+4350 2411 1
+4395 2411 -1
+4427 2411 1
+5075 2411 1
+5079 2411 1
+5139 2411 1
+5143 2411 1
+5203 2411 1
+5207 2411 1
+5267 2411 1
+5271 2411 1
+7402 2411 1
+7403 2411 -1
+9987 2411 38
+4300 2412 -1
+4351 2412 1
+4396 2412 -1
+4428 2412 1
+5076 2412 1
+5080 2412 1
+5140 2412 1
+5144 2412 1
+5204 2412 1
+5208 2412 1
+5268 2412 1
+5272 2412 1
+7403 2412 1
+7404 2412 -1
+9988 2412 38
+4301 2413 -1
+4324 2413 1
+4397 2413 -1
+4429 2413 1
+5081 2413 1
+5085 2413 1
+5145 2413 1
+5149 2413 1
+5209 2413 1
+5213 2413 1
+5273 2413 1
+5277 2413 1
+7405 2413 -1
+7408 2413 1
+9989 2413 38
+4302 2414 -1
+4321 2414 1
+4398 2414 -1
+4430 2414 1
+5082 2414 1
+5086 2414 1
+5146 2414 1
+5150 2414 1
+5210 2414 1
+5214 2414 1
+5274 2414 1
+5278 2414 1
+7405 2414 1
+7406 2414 -1
+9990 2414 38
+4303 2415 -1
+4322 2415 1
+4399 2415 -1
+4431 2415 1
+5083 2415 1
+5087 2415 1
+5147 2415 1
+5151 2415 1
+5211 2415 1
+5215 2415 1
+5275 2415 1
+5279 2415 1
+7406 2415 1
+7407 2415 -1
+9991 2415 38
+4304 2416 -1
+4323 2416 1
+4400 2416 -1
+4432 2416 1
+5084 2416 1
+5088 2416 1
+5148 2416 1
+5152 2416 1
+5212 2416 1
+5216 2416 1
+5276 2416 1
+5280 2416 1
+7407 2416 1
+7408 2416 -1
+9992 2416 38
+4305 2417 -1
+4328 2417 1
+4401 2417 -1
+4433 2417 1
+5089 2417 1
+5093 2417 1
+5153 2417 1
+5157 2417 1
+5217 2417 1
+5221 2417 1
+5281 2417 1
+5285 2417 1
+7409 2417 -1
+7412 2417 1
+9993 2417 38
+4306 2418 -1
+4325 2418 1
+4402 2418 -1
+4434 2418 1
+5090 2418 1
+5094 2418 1
+5154 2418 1
+5158 2418 1
+5218 2418 1
+5222 2418 1
+5282 2418 1
+5286 2418 1
+7409 2418 1
+7410 2418 -1
+9994 2418 38
+4307 2419 -1
+4326 2419 1
+4403 2419 -1
+4435 2419 1
+5091 2419 1
+5095 2419 1
+5155 2419 1
+5159 2419 1
+5219 2419 1
+5223 2419 1
+5283 2419 1
+5287 2419 1
+7410 2419 1
+7411 2419 -1
+9995 2419 38
+4308 2420 -1
+4327 2420 1
+4404 2420 -1
+4436 2420 1
+5092 2420 1
+5096 2420 1
+5156 2420 1
+5160 2420 1
+5220 2420 1
+5224 2420 1
+5284 2420 1
+5288 2420 1
+7411 2420 1
+7412 2420 -1
+9996 2420 38
+4309 2421 -1
+4332 2421 1
+4405 2421 -1
+4437 2421 1
+5097 2421 1
+5101 2421 1
+5161 2421 1
+5165 2421 1
+5225 2421 1
+5229 2421 1
+5289 2421 1
+5293 2421 1
+7413 2421 -1
+7416 2421 1
+9997 2421 38
+4310 2422 -1
+4329 2422 1
+4406 2422 -1
+4438 2422 1
+5098 2422 1
+5102 2422 1
+5162 2422 1
+5166 2422 1
+5226 2422 1
+5230 2422 1
+5290 2422 1
+5294 2422 1
+7413 2422 1
+7414 2422 -1
+9998 2422 38
+4311 2423 -1
+4330 2423 1
+4407 2423 -1
+4439 2423 1
+5099 2423 1
+5103 2423 1
+5163 2423 1
+5167 2423 1
+5227 2423 1
+5231 2423 1
+5291 2423 1
+5295 2423 1
+7414 2423 1
+7415 2423 -1
+9999 2423 38
+4312 2424 -1
+4331 2424 1
+4408 2424 -1
+4440 2424 1
+5100 2424 1
+5104 2424 1
+5164 2424 1
+5168 2424 1
+5228 2424 1
+5232 2424 1
+5292 2424 1
+5296 2424 1
+7415 2424 1
+7416 2424 -1
+10000 2424 38
+4313 2425 -1
+4336 2425 1
+4409 2425 -1
+4441 2425 1
+5105 2425 1
+5109 2425 1
+5169 2425 1
+5173 2425 1
+5233 2425 1
+5237 2425 1
+5297 2425 1
+5301 2425 1
+7417 2425 -1
+7420 2425 1
+10001 2425 38
+4314 2426 -1
+4333 2426 1
+4410 2426 -1
+4442 2426 1
+5106 2426 1
+5110 2426 1
+5170 2426 1
+5174 2426 1
+5234 2426 1
+5238 2426 1
+5298 2426 1
+5302 2426 1
+7417 2426 1
+7418 2426 -1
+10002 2426 38
+4315 2427 -1
+4334 2427 1
+4411 2427 -1
+4443 2427 1
+5107 2427 1
+5111 2427 1
+5171 2427 1
+5175 2427 1
+5235 2427 1
+5239 2427 1
+5299 2427 1
+5303 2427 1
+7418 2427 1
+7419 2427 -1
+10003 2427 38
+4316 2428 -1
+4335 2428 1
+4412 2428 -1
+4444 2428 1
+5108 2428 1
+5112 2428 1
+5172 2428 1
+5176 2428 1
+5236 2428 1
+5240 2428 1
+5300 2428 1
+5304 2428 1
+7419 2428 1
+7420 2428 -1
+10004 2428 38
+4317 2429 -1
+4340 2429 1
+4413 2429 -1
+4445 2429 1
+5113 2429 1
+5117 2429 1
+5177 2429 1
+5181 2429 1
+5241 2429 1
+5245 2429 1
+5305 2429 1
+5309 2429 1
+7421 2429 -1
+7424 2429 1
+10005 2429 38
+4318 2430 -1
+4337 2430 1
+4414 2430 -1
+4446 2430 1
+5114 2430 1
+5118 2430 1
+5178 2430 1
+5182 2430 1
+5242 2430 1
+5246 2430 1
+5306 2430 1
+5310 2430 1
+7421 2430 1
+7422 2430 -1
+10006 2430 38
+4319 2431 -1
+4338 2431 1
+4415 2431 -1
+4447 2431 1
+5115 2431 1
+5119 2431 1
+5179 2431 1
+5183 2431 1
+5243 2431 1
+5247 2431 1
+5307 2431 1
+5311 2431 1
+7422 2431 1
+7423 2431 -1
+10007 2431 38
+4320 2432 -1
+4339 2432 1
+4416 2432 -1
+4448 2432 1
+5116 2432 1
+5120 2432 1
+5180 2432 1
+5184 2432 1
+5244 2432 1
+5248 2432 1
+5308 2432 1
+5312 2432 1
+7423 2432 1
+7424 2432 -1
+10008 2432 38
+4248 2433 1
+4321 2433 -1
+4417 2433 -1
+4449 2433 1
+5313 2433 1
+5317 2433 1
+5377 2433 1
+5381 2433 1
+5441 2433 1
+5445 2433 1
+5505 2433 1
+5509 2433 1
+7425 2433 -1
+7428 2433 1
+10009 2433 38
+4245 2434 1
+4322 2434 -1
+4418 2434 -1
+4450 2434 1
+5314 2434 1
+5318 2434 1
+5378 2434 1
+5382 2434 1
+5442 2434 1
+5446 2434 1
+5506 2434 1
+5510 2434 1
+7425 2434 1
+7426 2434 -1
+10010 2434 38
+4246 2435 1
+4323 2435 -1
+4419 2435 -1
+4451 2435 1
+5315 2435 1
+5319 2435 1
+5379 2435 1
+5383 2435 1
+5443 2435 1
+5447 2435 1
+5507 2435 1
+5511 2435 1
+7426 2435 1
+7427 2435 -1
+10011 2435 38
+4247 2436 1
+4324 2436 -1
+4420 2436 -1
+4452 2436 1
+5316 2436 1
+5320 2436 1
+5380 2436 1
+5384 2436 1
+5444 2436 1
+5448 2436 1
+5508 2436 1
+5512 2436 1
+7427 2436 1
+7428 2436 -1
+10012 2436 38
+4252 2437 1
+4325 2437 -1
+4421 2437 -1
+4453 2437 1
+5321 2437 1
+5325 2437 1
+5385 2437 1
+5389 2437 1
+5449 2437 1
+5453 2437 1
+5513 2437 1
+5517 2437 1
+7429 2437 -1
+7432 2437 1
+10013 2437 38
+4249 2438 1
+4326 2438 -1
+4422 2438 -1
+4454 2438 1
+5322 2438 1
+5326 2438 1
+5386 2438 1
+5390 2438 1
+5450 2438 1
+5454 2438 1
+5514 2438 1
+5518 2438 1
+7429 2438 1
+7430 2438 -1
+10014 2438 38
+4250 2439 1
+4327 2439 -1
+4423 2439 -1
+4455 2439 1
+5323 2439 1
+5327 2439 1
+5387 2439 1
+5391 2439 1
+5451 2439 1
+5455 2439 1
+5515 2439 1
+5519 2439 1
+7430 2439 1
+7431 2439 -1
+10015 2439 38
+4251 2440 1
+4328 2440 -1
+4424 2440 -1
+4456 2440 1
+5324 2440 1
+5328 2440 1
+5388 2440 1
+5392 2440 1
+5452 2440 1
+5456 2440 1
+5516 2440 1
+5520 2440 1
+7431 2440 1
+7432 2440 -1
+10016 2440 38
+4256 2441 1
+4329 2441 -1
+4425 2441 -1
+4457 2441 1
+5329 2441 1
+5333 2441 1
+5393 2441 1
+5397 2441 1
+5457 2441 1
+5461 2441 1
+5521 2441 1
+5525 2441 1
+7433 2441 -1
+7436 2441 1
+10017 2441 38
+4253 2442 1
+4330 2442 -1
+4426 2442 -1
+4458 2442 1
+5330 2442 1
+5334 2442 1
+5394 2442 1
+5398 2442 1
+5458 2442 1
+5462 2442 1
+5522 2442 1
+5526 2442 1
+7433 2442 1
+7434 2442 -1
+10018 2442 38
+4254 2443 1
+4331 2443 -1
+4427 2443 -1
+4459 2443 1
+5331 2443 1
+5335 2443 1
+5395 2443 1
+5399 2443 1
+5459 2443 1
+5463 2443 1
+5523 2443 1
+5527 2443 1
+7434 2443 1
+7435 2443 -1
+10019 2443 38
+4255 2444 1
+4332 2444 -1
+4428 2444 -1
+4460 2444 1
+5332 2444 1
+5336 2444 1
+5396 2444 1
+5400 2444 1
+5460 2444 1
+5464 2444 1
+5524 2444 1
+5528 2444 1
+7435 2444 1
+7436 2444 -1
+10020 2444 38
+4228 2445 1
+4333 2445 -1
+4429 2445 -1
+4461 2445 1
+5337 2445 1
+5341 2445 1
+5401 2445 1
+5405 2445 1
+5465 2445 1
+5469 2445 1
+5529 2445 1
+5533 2445 1
+7437 2445 -1
+7440 2445 1
+10021 2445 38
+4225 2446 1
+4334 2446 -1
+4430 2446 -1
+4462 2446 1
+5338 2446 1
+5342 2446 1
+5402 2446 1
+5406 2446 1
+5466 2446 1
+5470 2446 1
+5530 2446 1
+5534 2446 1
+7437 2446 1
+7438 2446 -1
+10022 2446 38
+4226 2447 1
+4335 2447 -1
+4431 2447 -1
+4463 2447 1
+5339 2447 1
+5343 2447 1
+5403 2447 1
+5407 2447 1
+5467 2447 1
+5471 2447 1
+5531 2447 1
+5535 2447 1
+7438 2447 1
+7439 2447 -1
+10023 2447 38
+4227 2448 1
+4336 2448 -1
+4432 2448 -1
+4464 2448 1
+5340 2448 1
+5344 2448 1
+5404 2448 1
+5408 2448 1
+5468 2448 1
+5472 2448 1
+5532 2448 1
+5536 2448 1
+7439 2448 1
+7440 2448 -1
+10024 2448 38
+4232 2449 1
+4337 2449 -1
+4433 2449 -1
+4465 2449 1
+5345 2449 1
+5349 2449 1
+5409 2449 1
+5413 2449 1
+5473 2449 1
+5477 2449 1
+5537 2449 1
+5541 2449 1
+7441 2449 -1
+7444 2449 1
+10025 2449 38
+4229 2450 1
+4338 2450 -1
+4434 2450 -1
+4466 2450 1
+5346 2450 1
+5350 2450 1
+5410 2450 1
+5414 2450 1
+5474 2450 1
+5478 2450 1
+5538 2450 1
+5542 2450 1
+7441 2450 1
+7442 2450 -1
+10026 2450 38
+4230 2451 1
+4339 2451 -1
+4435 2451 -1
+4467 2451 1
+5347 2451 1
+5351 2451 1
+5411 2451 1
+5415 2451 1
+5475 2451 1
+5479 2451 1
+5539 2451 1
+5543 2451 1
+7442 2451 1
+7443 2451 -1
+10027 2451 38
+4231 2452 1
+4340 2452 -1
+4436 2452 -1
+4468 2452 1
+5348 2452 1
+5352 2452 1
+5412 2452 1
+5416 2452 1
+5476 2452 1
+5480 2452 1
+5540 2452 1
+5544 2452 1
+7443 2452 1
+7444 2452 -1
+10028 2452 38
+4236 2453 1
+4341 2453 -1
+4437 2453 -1
+4469 2453 1
+5353 2453 1
+5357 2453 1
+5417 2453 1
+5421 2453 1
+5481 2453 1
+5485 2453 1
+5545 2453 1
+5549 2453 1
+7445 2453 -1
+7448 2453 1
+10029 2453 38
+4233 2454 1
+4342 2454 -1
+4438 2454 -1
+4470 2454 1
+5354 2454 1
+5358 2454 1
+5418 2454 1
+5422 2454 1
+5482 2454 1
+5486 2454 1
+5546 2454 1
+5550 2454 1
+7445 2454 1
+7446 2454 -1
+10030 2454 38
+4234 2455 1
+4343 2455 -1
+4439 2455 -1
+4471 2455 1
+5355 2455 1
+5359 2455 1
+5419 2455 1
+5423 2455 1
+5483 2455 1
+5487 2455 1
+5547 2455 1
+5551 2455 1
+7446 2455 1
+7447 2455 -1
+10031 2455 38
+4235 2456 1
+4344 2456 -1
+4440 2456 -1
+4472 2456 1
+5356 2456 1
+5360 2456 1
+5420 2456 1
+5424 2456 1
+5484 2456 1
+5488 2456 1
+5548 2456 1
+5552 2456 1
+7447 2456 1
+7448 2456 -1
+10032 2456 38
+4240 2457 1
+4345 2457 -1
+4441 2457 -1
+4473 2457 1
+5361 2457 1
+5365 2457 1
+5425 2457 1
+5429 2457 1
+5489 2457 1
+5493 2457 1
+5553 2457 1
+5557 2457 1
+7449 2457 -1
+7452 2457 1
+10033 2457 38
+4237 2458 1
+4346 2458 -1
+4442 2458 -1
+4474 2458 1
+5362 2458 1
+5366 2458 1
+5426 2458 1
+5430 2458 1
+5490 2458 1
+5494 2458 1
+5554 2458 1
+5558 2458 1
+7449 2458 1
+7450 2458 -1
+10034 2458 38
+4238 2459 1
+4347 2459 -1
+4443 2459 -1
+4475 2459 1
+5363 2459 1
+5367 2459 1
+5427 2459 1
+5431 2459 1
+5491 2459 1
+5495 2459 1
+5555 2459 1
+5559 2459 1
+7450 2459 1
+7451 2459 -1
+10035 2459 38
+4239 2460 1
+4348 2460 -1
+4444 2460 -1
+4476 2460 1
+5364 2460 1
+5368 2460 1
+5428 2460 1
+5432 2460 1
+5492 2460 1
+5496 2460 1
+5556 2460 1
+5560 2460 1
+7451 2460 1
+7452 2460 -1
+10036 2460 38
+4244 2461 1
+4349 2461 -1
+4445 2461 -1
+4477 2461 1
+5369 2461 1
+5373 2461 1
+5433 2461 1
+5437 2461 1
+5497 2461 1
+5501 2461 1
+5561 2461 1
+5565 2461 1
+7453 2461 -1
+7456 2461 1
+10037 2461 38
+4241 2462 1
+4350 2462 -1
+4446 2462 -1
+4478 2462 1
+5370 2462 1
+5374 2462 1
+5434 2462 1
+5438 2462 1
+5498 2462 1
+5502 2462 1
+5562 2462 1
+5566 2462 1
+7453 2462 1
+7454 2462 -1
+10038 2462 38
+4242 2463 1
+4351 2463 -1
+4447 2463 -1
+4479 2463 1
+5371 2463 1
+5375 2463 1
+5435 2463 1
+5439 2463 1
+5499 2463 1
+5503 2463 1
+5563 2463 1
+5567 2463 1
+7454 2463 1
+7455 2463 -1
+10039 2463 38
+4243 2464 1
+4352 2464 -1
+4448 2464 -1
+4480 2464 1
+5372 2464 1
+5376 2464 1
+5436 2464 1
+5440 2464 1
+5500 2464 1
+5504 2464 1
+5564 2464 1
+5568 2464 1
+7455 2464 1
+7456 2464 -1
+10040 2464 38
+4353 2465 1
+4369 2465 1
+4392 2465 1
+4408 2465 1
+4427 2465 1
+4443 2465 1
+4462 2465 1
+4478 2465 1
+5569 2465 1
+5585 2465 1
+7457 2465 -1
+7460 2465 1
+10041 2465 38
+4354 2466 1
+4370 2466 1
+4389 2466 1
+4405 2466 1
+4428 2466 1
+4444 2466 1
+4463 2466 1
+4479 2466 1
+5570 2466 1
+5586 2466 1
+7457 2466 1
+7458 2466 -1
+10042 2466 38
+4355 2467 1
+4371 2467 1
+4390 2467 1
+4406 2467 1
+4425 2467 1
+4441 2467 1
+4464 2467 1
+4480 2467 1
+5571 2467 1
+5587 2467 1
+7458 2467 1
+7459 2467 -1
+10043 2467 38
+4356 2468 1
+4372 2468 1
+4391 2468 1
+4407 2468 1
+4426 2468 1
+4442 2468 1
+4461 2468 1
+4477 2468 1
+5572 2468 1
+5588 2468 1
+7459 2468 1
+7460 2468 -1
+10044 2468 38
+4357 2469 1
+4373 2469 1
+4396 2469 1
+4412 2469 1
+4431 2469 1
+4447 2469 1
+4450 2469 1
+4466 2469 1
+5573 2469 1
+5589 2469 1
+7461 2469 -1
+7464 2469 1
+10045 2469 38
+4358 2470 1
+4374 2470 1
+4393 2470 1
+4409 2470 1
+4432 2470 1
+4448 2470 1
+4451 2470 1
+4467 2470 1
+5574 2470 1
+5590 2470 1
+7461 2470 1
+7462 2470 -1
+10046 2470 38
+4359 2471 1
+4375 2471 1
+4394 2471 1
+4410 2471 1
+4429 2471 1
+4445 2471 1
+4452 2471 1
+4468 2471 1
+5575 2471 1
+5591 2471 1
+7462 2471 1
+7463 2471 -1
+10047 2471 38
+4360 2472 1
+4376 2472 1
+4395 2472 1
+4411 2472 1
+4430 2472 1
+4446 2472 1
+4449 2472 1
+4465 2472 1
+5576 2472 1
+5592 2472 1
+7463 2472 1
+7464 2472 -1
+10048 2472 38
+4361 2473 1
+4377 2473 1
+4400 2473 1
+4416 2473 1
+4419 2473 1
+4435 2473 1
+4454 2473 1
+4470 2473 1
+5577 2473 1
+5593 2473 1
+7465 2473 -1
+7468 2473 1
+10049 2473 38
+4362 2474 1
+4378 2474 1
+4397 2474 1
+4413 2474 1
+4420 2474 1
+4436 2474 1
+4455 2474 1
+4471 2474 1
+5578 2474 1
+5594 2474 1
+7465 2474 1
+7466 2474 -1
+10050 2474 38
+4363 2475 1
+4379 2475 1
+4398 2475 1
+4414 2475 1
+4417 2475 1
+4433 2475 1
+4456 2475 1
+4472 2475 1
+5579 2475 1
+5595 2475 1
+7466 2475 1
+7467 2475 -1
+10051 2475 38
+4364 2476 1
+4380 2476 1
+4399 2476 1
+4415 2476 1
+4418 2476 1
+4434 2476 1
+4453 2476 1
+4469 2476 1
+5580 2476 1
+5596 2476 1
+7467 2476 1
+7468 2476 -1
+10052 2476 38
+4365 2477 1
+4381 2477 1
+4388 2477 1
+4404 2477 1
+4423 2477 1
+4439 2477 1
+4458 2477 1
+4474 2477 1
+5581 2477 1
+5597 2477 1
+7469 2477 -1
+7472 2477 1
+10053 2477 38
+4366 2478 1
+4382 2478 1
+4385 2478 1
+4401 2478 1
+4424 2478 1
+4440 2478 1
+4459 2478 1
+4475 2478 1
+5582 2478 1
+5598 2478 1
+7469 2478 1
+7470 2478 -1
+10054 2478 38
+4367 2479 1
+4383 2479 1
+4386 2479 1
+4402 2479 1
+4421 2479 1
+4437 2479 1
+4460 2479 1
+4476 2479 1
+5583 2479 1
+5599 2479 1
+7470 2479 1
+7471 2479 -1
+10055 2479 38
+4368 2480 1
+4384 2480 1
+4387 2480 1
+4403 2480 1
+4422 2480 1
+4438 2480 1
+4457 2480 1
+4473 2480 1
+5584 2480 1
+5600 2480 1
+7471 2480 1
+7472 2480 -1
+10056 2480 38
+4481 2481 -1
+4536 2481 1
+4545 2481 -1
+4549 2481 -1
+4609 2481 -1
+4613 2481 -1
+4801 2481 -1
+4805 2481 -1
+4865 2481 -1
+4869 2481 -1
+5057 2481 -1
+5061 2481 -1
+5121 2481 -1
+5125 2481 -1
+5313 2481 -1
+5317 2481 -1
+5377 2481 -1
+5381 2481 -1
+5601 2481 1
+5633 2481 -1
+7473 2481 -1
+7476 2481 1
+10057 2481 38
+4482 2482 -1
+4533 2482 1
+4546 2482 -1
+4550 2482 -1
+4610 2482 -1
+4614 2482 -1
+4802 2482 -1
+4806 2482 -1
+4866 2482 -1
+4870 2482 -1
+5058 2482 -1
+5062 2482 -1
+5122 2482 -1
+5126 2482 -1
+5314 2482 -1
+5318 2482 -1
+5378 2482 -1
+5382 2482 -1
+5602 2482 1
+5634 2482 -1
+7473 2482 1
+7474 2482 -1
+10058 2482 38
+4483 2483 -1
+4534 2483 1
+4547 2483 -1
+4551 2483 -1
+4611 2483 -1
+4615 2483 -1
+4803 2483 -1
+4807 2483 -1
+4867 2483 -1
+4871 2483 -1
+5059 2483 -1
+5063 2483 -1
+5123 2483 -1
+5127 2483 -1
+5315 2483 -1
+5319 2483 -1
+5379 2483 -1
+5383 2483 -1
+5603 2483 1
+5635 2483 -1
+7474 2483 1
+7475 2483 -1
+10059 2483 38
+4484 2484 -1
+4535 2484 1
+4548 2484 -1
+4552 2484 -1
+4612 2484 -1
+4616 2484 -1
+4804 2484 -1
+4808 2484 -1
+4868 2484 -1
+4872 2484 -1
+5060 2484 -1
+5064 2484 -1
+5124 2484 -1
+5128 2484 -1
+5316 2484 -1
+5320 2484 -1
+5380 2484 -1
+5384 2484 -1
+5604 2484 1
+5636 2484 -1
+7475 2484 1
+7476 2484 -1
+10060 2484 38
+4485 2485 -1
+4540 2485 1
+4553 2485 -1
+4557 2485 -1
+4617 2485 -1
+4621 2485 -1
+4809 2485 -1
+4813 2485 -1
+4873 2485 -1
+4877 2485 -1
+5065 2485 -1
+5069 2485 -1
+5129 2485 -1
+5133 2485 -1
+5321 2485 -1
+5325 2485 -1
+5385 2485 -1
+5389 2485 -1
+5605 2485 1
+5637 2485 -1
+7477 2485 -1
+7480 2485 1
+10061 2485 38
+4486 2486 -1
+4537 2486 1
+4554 2486 -1
+4558 2486 -1
+4618 2486 -1
+4622 2486 -1
+4810 2486 -1
+4814 2486 -1
+4874 2486 -1
+4878 2486 -1
+5066 2486 -1
+5070 2486 -1
+5130 2486 -1
+5134 2486 -1
+5322 2486 -1
+5326 2486 -1
+5386 2486 -1
+5390 2486 -1
+5606 2486 1
+5638 2486 -1
+7477 2486 1
+7478 2486 -1
+10062 2486 38
+4487 2487 -1
+4538 2487 1
+4555 2487 -1
+4559 2487 -1
+4619 2487 -1
+4623 2487 -1
+4811 2487 -1
+4815 2487 -1
+4875 2487 -1
+4879 2487 -1
+5067 2487 -1
+5071 2487 -1
+5131 2487 -1
+5135 2487 -1
+5323 2487 -1
+5327 2487 -1
+5387 2487 -1
+5391 2487 -1
+5607 2487 1
+5639 2487 -1
+7478 2487 1
+7479 2487 -1
+10063 2487 38
+4488 2488 -1
+4539 2488 1
+4556 2488 -1
+4560 2488 -1
+4620 2488 -1
+4624 2488 -1
+4812 2488 -1
+4816 2488 -1
+4876 2488 -1
+4880 2488 -1
+5068 2488 -1
+5072 2488 -1
+5132 2488 -1
+5136 2488 -1
+5324 2488 -1
+5328 2488 -1
+5388 2488 -1
+5392 2488 -1
+5608 2488 1
+5640 2488 -1
+7479 2488 1
+7480 2488 -1
+10064 2488 38
+4489 2489 -1
+4544 2489 1
+4561 2489 -1
+4565 2489 -1
+4625 2489 -1
+4629 2489 -1
+4817 2489 -1
+4821 2489 -1
+4881 2489 -1
+4885 2489 -1
+5073 2489 -1
+5077 2489 -1
+5137 2489 -1
+5141 2489 -1
+5329 2489 -1
+5333 2489 -1
+5393 2489 -1
+5397 2489 -1
+5609 2489 1
+5641 2489 -1
+7481 2489 -1
+7484 2489 1
+10065 2489 38
+4490 2490 -1
+4541 2490 1
+4562 2490 -1
+4566 2490 -1
+4626 2490 -1
+4630 2490 -1
+4818 2490 -1
+4822 2490 -1
+4882 2490 -1
+4886 2490 -1
+5074 2490 -1
+5078 2490 -1
+5138 2490 -1
+5142 2490 -1
+5330 2490 -1
+5334 2490 -1
+5394 2490 -1
+5398 2490 -1
+5610 2490 1
+5642 2490 -1
+7481 2490 1
+7482 2490 -1
+10066 2490 38
+4491 2491 -1
+4542 2491 1
+4563 2491 -1
+4567 2491 -1
+4627 2491 -1
+4631 2491 -1
+4819 2491 -1
+4823 2491 -1
+4883 2491 -1
+4887 2491 -1
+5075 2491 -1
+5079 2491 -1
+5139 2491 -1
+5143 2491 -1
+5331 2491 -1
+5335 2491 -1
+5395 2491 -1
+5399 2491 -1
+5611 2491 1
+5643 2491 -1
+7482 2491 1
+7483 2491 -1
+10067 2491 38
+4492 2492 -1
+4543 2492 1
+4564 2492 -1
+4568 2492 -1
+4628 2492 -1
+4632 2492 -1
+4820 2492 -1
+4824 2492 -1
+4884 2492 -1
+4888 2492 -1
+5076 2492 -1
+5080 2492 -1
+5140 2492 -1
+5144 2492 -1
+5332 2492 -1
+5336 2492 -1
+5396 2492 -1
+5400 2492 -1
+5612 2492 1
+5644 2492 -1
+7483 2492 1
+7484 2492 -1
+10068 2492 38
+4493 2493 -1
+4516 2493 1
+4569 2493 -1
+4573 2493 -1
+4633 2493 -1
+4637 2493 -1
+4825 2493 -1
+4829 2493 -1
+4889 2493 -1
+4893 2493 -1
+5081 2493 -1
+5085 2493 -1
+5145 2493 -1
+5149 2493 -1
+5337 2493 -1
+5341 2493 -1
+5401 2493 -1
+5405 2493 -1
+5613 2493 1
+5645 2493 -1
+7485 2493 -1
+7488 2493 1
+10069 2493 38
+4494 2494 -1
+4513 2494 1
+4570 2494 -1
+4574 2494 -1
+4634 2494 -1
+4638 2494 -1
+4826 2494 -1
+4830 2494 -1
+4890 2494 -1
+4894 2494 -1
+5082 2494 -1
+5086 2494 -1
+5146 2494 -1
+5150 2494 -1
+5338 2494 -1
+5342 2494 -1
+5402 2494 -1
+5406 2494 -1
+5614 2494 1
+5646 2494 -1
+7485 2494 1
+7486 2494 -1
+10070 2494 38
+4495 2495 -1
+4514 2495 1
+4571 2495 -1
+4575 2495 -1
+4635 2495 -1
+4639 2495 -1
+4827 2495 -1
+4831 2495 -1
+4891 2495 -1
+4895 2495 -1
+5083 2495 -1
+5087 2495 -1
+5147 2495 -1
+5151 2495 -1
+5339 2495 -1
+5343 2495 -1
+5403 2495 -1
+5407 2495 -1
+5615 2495 1
+5647 2495 -1
+7486 2495 1
+7487 2495 -1
+10071 2495 38
+4496 2496 -1
+4515 2496 1
+4572 2496 -1
+4576 2496 -1
+4636 2496 -1
+4640 2496 -1
+4828 2496 -1
+4832 2496 -1
+4892 2496 -1
+4896 2496 -1
+5084 2496 -1
+5088 2496 -1
+5148 2496 -1
+5152 2496 -1
+5340 2496 -1
+5344 2496 -1
+5404 2496 -1
+5408 2496 -1
+5616 2496 1
+5648 2496 -1
+7487 2496 1
+7488 2496 -1
+10072 2496 38
+4497 2497 -1
+4520 2497 1
+4577 2497 -1
+4581 2497 -1
+4641 2497 -1
+4645 2497 -1
+4833 2497 -1
+4837 2497 -1
+4897 2497 -1
+4901 2497 -1
+5089 2497 -1
+5093 2497 -1
+5153 2497 -1
+5157 2497 -1
+5345 2497 -1
+5349 2497 -1
+5409 2497 -1
+5413 2497 -1
+5617 2497 1
+5649 2497 -1
+7489 2497 -1
+7492 2497 1
+10073 2497 38
+4498 2498 -1
+4517 2498 1
+4578 2498 -1
+4582 2498 -1
+4642 2498 -1
+4646 2498 -1
+4834 2498 -1
+4838 2498 -1
+4898 2498 -1
+4902 2498 -1
+5090 2498 -1
+5094 2498 -1
+5154 2498 -1
+5158 2498 -1
+5346 2498 -1
+5350 2498 -1
+5410 2498 -1
+5414 2498 -1
+5618 2498 1
+5650 2498 -1
+7489 2498 1
+7490 2498 -1
+10074 2498 38
+4499 2499 -1
+4518 2499 1
+4579 2499 -1
+4583 2499 -1
+4643 2499 -1
+4647 2499 -1
+4835 2499 -1
+4839 2499 -1
+4899 2499 -1
+4903 2499 -1
+5091 2499 -1
+5095 2499 -1
+5155 2499 -1
+5159 2499 -1
+5347 2499 -1
+5351 2499 -1
+5411 2499 -1
+5415 2499 -1
+5619 2499 1
+5651 2499 -1
+7490 2499 1
+7491 2499 -1
+10075 2499 38
+4500 2500 -1
+4519 2500 1
+4580 2500 -1
+4584 2500 -1
+4644 2500 -1
+4648 2500 -1
+4836 2500 -1
+4840 2500 -1
+4900 2500 -1
+4904 2500 -1
+5092 2500 -1
+5096 2500 -1
+5156 2500 -1
+5160 2500 -1
+5348 2500 -1
+5352 2500 -1
+5412 2500 -1
+5416 2500 -1
+5620 2500 1
+5652 2500 -1
+7491 2500 1
+7492 2500 -1
+10076 2500 38
+4501 2501 -1
+4524 2501 1
+4585 2501 -1
+4589 2501 -1
+4649 2501 -1
+4653 2501 -1
+4841 2501 -1
+4845 2501 -1
+4905 2501 -1
+4909 2501 -1
+5097 2501 -1
+5101 2501 -1
+5161 2501 -1
+5165 2501 -1
+5353 2501 -1
+5357 2501 -1
+5417 2501 -1
+5421 2501 -1
+5621 2501 1
+5653 2501 -1
+7493 2501 -1
+7496 2501 1
+10077 2501 38
+4502 2502 -1
+4521 2502 1
+4586 2502 -1
+4590 2502 -1
+4650 2502 -1
+4654 2502 -1
+4842 2502 -1
+4846 2502 -1
+4906 2502 -1
+4910 2502 -1
+5098 2502 -1
+5102 2502 -1
+5162 2502 -1
+5166 2502 -1
+5354 2502 -1
+5358 2502 -1
+5418 2502 -1
+5422 2502 -1
+5622 2502 1
+5654 2502 -1
+7493 2502 1
+7494 2502 -1
+10078 2502 38
+4503 2503 -1
+4522 2503 1
+4587 2503 -1
+4591 2503 -1
+4651 2503 -1
+4655 2503 -1
+4843 2503 -1
+4847 2503 -1
+4907 2503 -1
+4911 2503 -1
+5099 2503 -1
+5103 2503 -1
+5163 2503 -1
+5167 2503 -1
+5355 2503 -1
+5359 2503 -1
+5419 2503 -1
+5423 2503 -1
+5623 2503 1
+5655 2503 -1
+7494 2503 1
+7495 2503 -1
+10079 2503 38
+4504 2504 -1
+4523 2504 1
+4588 2504 -1
+4592 2504 -1
+4652 2504 -1
+4656 2504 -1
+4844 2504 -1
+4848 2504 -1
+4908 2504 -1
+4912 2504 -1
+5100 2504 -1
+5104 2504 -1
+5164 2504 -1
+5168 2504 -1
+5356 2504 -1
+5360 2504 -1
+5420 2504 -1
+5424 2504 -1
+5624 2504 1
+5656 2504 -1
+7495 2504 1
+7496 2504 -1
+10080 2504 38
+4505 2505 -1
+4528 2505 1
+4593 2505 -1
+4597 2505 -1
+4657 2505 -1
+4661 2505 -1
+4849 2505 -1
+4853 2505 -1
+4913 2505 -1
+4917 2505 -1
+5105 2505 -1
+5109 2505 -1
+5169 2505 -1
+5173 2505 -1
+5361 2505 -1
+5365 2505 -1
+5425 2505 -1
+5429 2505 -1
+5625 2505 1
+5657 2505 -1
+7497 2505 -1
+7500 2505 1
+10081 2505 38
+4506 2506 -1
+4525 2506 1
+4594 2506 -1
+4598 2506 -1
+4658 2506 -1
+4662 2506 -1
+4850 2506 -1
+4854 2506 -1
+4914 2506 -1
+4918 2506 -1
+5106 2506 -1
+5110 2506 -1
+5170 2506 -1
+5174 2506 -1
+5362 2506 -1
+5366 2506 -1
+5426 2506 -1
+5430 2506 -1
+5626 2506 1
+5658 2506 -1
+7497 2506 1
+7498 2506 -1
+10082 2506 38
+4507 2507 -1
+4526 2507 1
+4595 2507 -1
+4599 2507 -1
+4659 2507 -1
+4663 2507 -1
+4851 2507 -1
+4855 2507 -1
+4915 2507 -1
+4919 2507 -1
+5107 2507 -1
+5111 2507 -1
+5171 2507 -1
+5175 2507 -1
+5363 2507 -1
+5367 2507 -1
+5427 2507 -1
+5431 2507 -1
+5627 2507 1
+5659 2507 -1
+7498 2507 1
+7499 2507 -1
+10083 2507 38
+4508 2508 -1
+4527 2508 1
+4596 2508 -1
+4600 2508 -1
+4660 2508 -1
+4664 2508 -1
+4852 2508 -1
+4856 2508 -1
+4916 2508 -1
+4920 2508 -1
+5108 2508 -1
+5112 2508 -1
+5172 2508 -1
+5176 2508 -1
+5364 2508 -1
+5368 2508 -1
+5428 2508 -1
+5432 2508 -1
+5628 2508 1
+5660 2508 -1
+7499 2508 1
+7500 2508 -1
+10084 2508 38
+4509 2509 -1
+4532 2509 1
+4601 2509 -1
+4605 2509 -1
+4665 2509 -1
+4669 2509 -1
+4857 2509 -1
+4861 2509 -1
+4921 2509 -1
+4925 2509 -1
+5113 2509 -1
+5117 2509 -1
+5177 2509 -1
+5181 2509 -1
+5369 2509 -1
+5373 2509 -1
+5433 2509 -1
+5437 2509 -1
+5629 2509 1
+5661 2509 -1
+7501 2509 -1
+7504 2509 1
+10085 2509 38
+4510 2510 -1
+4529 2510 1
+4602 2510 -1
+4606 2510 -1
+4666 2510 -1
+4670 2510 -1
+4858 2510 -1
+4862 2510 -1
+4922 2510 -1
+4926 2510 -1
+5114 2510 -1
+5118 2510 -1
+5178 2510 -1
+5182 2510 -1
+5370 2510 -1
+5374 2510 -1
+5434 2510 -1
+5438 2510 -1
+5630 2510 1
+5662 2510 -1
+7501 2510 1
+7502 2510 -1
+10086 2510 38
+4511 2511 -1
+4530 2511 1
+4603 2511 -1
+4607 2511 -1
+4667 2511 -1
+4671 2511 -1
+4859 2511 -1
+4863 2511 -1
+4923 2511 -1
+4927 2511 -1
+5115 2511 -1
+5119 2511 -1
+5179 2511 -1
+5183 2511 -1
+5371 2511 -1
+5375 2511 -1
+5435 2511 -1
+5439 2511 -1
+5631 2511 1
+5663 2511 -1
+7502 2511 1
+7503 2511 -1
+10087 2511 38
+4512 2512 -1
+4531 2512 1
+4604 2512 -1
+4608 2512 -1
+4668 2512 -1
+4672 2512 -1
+4860 2512 -1
+4864 2512 -1
+4924 2512 -1
+4928 2512 -1
+5116 2512 -1
+5120 2512 -1
+5180 2512 -1
+5184 2512 -1
+5372 2512 -1
+5376 2512 -1
+5436 2512 -1
+5440 2512 -1
+5632 2512 1
+5664 2512 -1
+7503 2512 1
+7504 2512 -1
+10088 2512 38
+4504 2513 1
+4513 2513 -1
+4673 2513 -1
+4677 2513 -1
+4737 2513 -1
+4741 2513 -1
+4929 2513 -1
+4933 2513 -1
+4993 2513 -1
+4997 2513 -1
+5185 2513 -1
+5189 2513 -1
+5249 2513 -1
+5253 2513 -1
+5441 2513 -1
+5445 2513 -1
+5505 2513 -1
+5509 2513 -1
+5601 2513 -1
+5633 2513 1
+7505 2513 -1
+7508 2513 1
+10089 2513 38
+4501 2514 1
+4514 2514 -1
+4674 2514 -1
+4678 2514 -1
+4738 2514 -1
+4742 2514 -1
+4930 2514 -1
+4934 2514 -1
+4994 2514 -1
+4998 2514 -1
+5186 2514 -1
+5190 2514 -1
+5250 2514 -1
+5254 2514 -1
+5442 2514 -1
+5446 2514 -1
+5506 2514 -1
+5510 2514 -1
+5602 2514 -1
+5634 2514 1
+7505 2514 1
+7506 2514 -1
+10090 2514 38
+4502 2515 1
+4515 2515 -1
+4675 2515 -1
+4679 2515 -1
+4739 2515 -1
+4743 2515 -1
+4931 2515 -1
+4935 2515 -1
+4995 2515 -1
+4999 2515 -1
+5187 2515 -1
+5191 2515 -1
+5251 2515 -1
+5255 2515 -1
+5443 2515 -1
+5447 2515 -1
+5507 2515 -1
+5511 2515 -1
+5603 2515 -1
+5635 2515 1
+7506 2515 1
+7507 2515 -1
+10091 2515 38
+4503 2516 1
+4516 2516 -1
+4676 2516 -1
+4680 2516 -1
+4740 2516 -1
+4744 2516 -1
+4932 2516 -1
+4936 2516 -1
+4996 2516 -1
+5000 2516 -1
+5188 2516 -1
+5192 2516 -1
+5252 2516 -1
+5256 2516 -1
+5444 2516 -1
+5448 2516 -1
+5508 2516 -1
+5512 2516 -1
+5604 2516 -1
+5636 2516 1
+7507 2516 1
+7508 2516 -1
+10092 2516 38
+4508 2517 1
+4517 2517 -1
+4681 2517 -1
+4685 2517 -1
+4745 2517 -1
+4749 2517 -1
+4937 2517 -1
+4941 2517 -1
+5001 2517 -1
+5005 2517 -1
+5193 2517 -1
+5197 2517 -1
+5257 2517 -1
+5261 2517 -1
+5449 2517 -1
+5453 2517 -1
+5513 2517 -1
+5517 2517 -1
+5605 2517 -1
+5637 2517 1
+7509 2517 -1
+7512 2517 1
+10093 2517 38
+4505 2518 1
+4518 2518 -1
+4682 2518 -1
+4686 2518 -1
+4746 2518 -1
+4750 2518 -1
+4938 2518 -1
+4942 2518 -1
+5002 2518 -1
+5006 2518 -1
+5194 2518 -1
+5198 2518 -1
+5258 2518 -1
+5262 2518 -1
+5450 2518 -1
+5454 2518 -1
+5514 2518 -1
+5518 2518 -1
+5606 2518 -1
+5638 2518 1
+7509 2518 1
+7510 2518 -1
+10094 2518 38
+4506 2519 1
+4519 2519 -1
+4683 2519 -1
+4687 2519 -1
+4747 2519 -1
+4751 2519 -1
+4939 2519 -1
+4943 2519 -1
+5003 2519 -1
+5007 2519 -1
+5195 2519 -1
+5199 2519 -1
+5259 2519 -1
+5263 2519 -1
+5451 2519 -1
+5455 2519 -1
+5515 2519 -1
+5519 2519 -1
+5607 2519 -1
+5639 2519 1
+7510 2519 1
+7511 2519 -1
+10095 2519 38
+4507 2520 1
+4520 2520 -1
+4684 2520 -1
+4688 2520 -1
+4748 2520 -1
+4752 2520 -1
+4940 2520 -1
+4944 2520 -1
+5004 2520 -1
+5008 2520 -1
+5196 2520 -1
+5200 2520 -1
+5260 2520 -1
+5264 2520 -1
+5452 2520 -1
+5456 2520 -1
+5516 2520 -1
+5520 2520 -1
+5608 2520 -1
+5640 2520 1
+7511 2520 1
+7512 2520 -1
+10096 2520 38
+4512 2521 1
+4521 2521 -1
+4689 2521 -1
+4693 2521 -1
+4753 2521 -1
+4757 2521 -1
+4945 2521 -1
+4949 2521 -1
+5009 2521 -1
+5013 2521 -1
+5201 2521 -1
+5205 2521 -1
+5265 2521 -1
+5269 2521 -1
+5457 2521 -1
+5461 2521 -1
+5521 2521 -1
+5525 2521 -1
+5609 2521 -1
+5641 2521 1
+7513 2521 -1
+7516 2521 1
+10097 2521 38
+4509 2522 1
+4522 2522 -1
+4690 2522 -1
+4694 2522 -1
+4754 2522 -1
+4758 2522 -1
+4946 2522 -1
+4950 2522 -1
+5010 2522 -1
+5014 2522 -1
+5202 2522 -1
+5206 2522 -1
+5266 2522 -1
+5270 2522 -1
+5458 2522 -1
+5462 2522 -1
+5522 2522 -1
+5526 2522 -1
+5610 2522 -1
+5642 2522 1
+7513 2522 1
+7514 2522 -1
+10098 2522 38
+4510 2523 1
+4523 2523 -1
+4691 2523 -1
+4695 2523 -1
+4755 2523 -1
+4759 2523 -1
+4947 2523 -1
+4951 2523 -1
+5011 2523 -1
+5015 2523 -1
+5203 2523 -1
+5207 2523 -1
+5267 2523 -1
+5271 2523 -1
+5459 2523 -1
+5463 2523 -1
+5523 2523 -1
+5527 2523 -1
+5611 2523 -1
+5643 2523 1
+7514 2523 1
+7515 2523 -1
+10099 2523 38
+4511 2524 1
+4524 2524 -1
+4692 2524 -1
+4696 2524 -1
+4756 2524 -1
+4760 2524 -1
+4948 2524 -1
+4952 2524 -1
+5012 2524 -1
+5016 2524 -1
+5204 2524 -1
+5208 2524 -1
+5268 2524 -1
+5272 2524 -1
+5460 2524 -1
+5464 2524 -1
+5524 2524 -1
+5528 2524 -1
+5612 2524 -1
+5644 2524 1
+7515 2524 1
+7516 2524 -1
+10100 2524 38
+4484 2525 1
+4525 2525 -1
+4697 2525 -1
+4701 2525 -1
+4761 2525 -1
+4765 2525 -1
+4953 2525 -1
+4957 2525 -1
+5017 2525 -1
+5021 2525 -1
+5209 2525 -1
+5213 2525 -1
+5273 2525 -1
+5277 2525 -1
+5465 2525 -1
+5469 2525 -1
+5529 2525 -1
+5533 2525 -1
+5613 2525 -1
+5645 2525 1
+7517 2525 -1
+7520 2525 1
+10101 2525 38
+4481 2526 1
+4526 2526 -1
+4698 2526 -1
+4702 2526 -1
+4762 2526 -1
+4766 2526 -1
+4954 2526 -1
+4958 2526 -1
+5018 2526 -1
+5022 2526 -1
+5210 2526 -1
+5214 2526 -1
+5274 2526 -1
+5278 2526 -1
+5466 2526 -1
+5470 2526 -1
+5530 2526 -1
+5534 2526 -1
+5614 2526 -1
+5646 2526 1
+7517 2526 1
+7518 2526 -1
+10102 2526 38
+4482 2527 1
+4527 2527 -1
+4699 2527 -1
+4703 2527 -1
+4763 2527 -1
+4767 2527 -1
+4955 2527 -1
+4959 2527 -1
+5019 2527 -1
+5023 2527 -1
+5211 2527 -1
+5215 2527 -1
+5275 2527 -1
+5279 2527 -1
+5467 2527 -1
+5471 2527 -1
+5531 2527 -1
+5535 2527 -1
+5615 2527 -1
+5647 2527 1
+7518 2527 1
+7519 2527 -1
+10103 2527 38
+4483 2528 1
+4528 2528 -1
+4700 2528 -1
+4704 2528 -1
+4764 2528 -1
+4768 2528 -1
+4956 2528 -1
+4960 2528 -1
+5020 2528 -1
+5024 2528 -1
+5212 2528 -1
+5216 2528 -1
+5276 2528 -1
+5280 2528 -1
+5468 2528 -1
+5472 2528 -1
+5532 2528 -1
+5536 2528 -1
+5616 2528 -1
+5648 2528 1
+7519 2528 1
+7520 2528 -1
+10104 2528 38
+4488 2529 1
+4529 2529 -1
+4705 2529 -1
+4709 2529 -1
+4769 2529 -1
+4773 2529 -1
+4961 2529 -1
+4965 2529 -1
+5025 2529 -1
+5029 2529 -1
+5217 2529 -1
+5221 2529 -1
+5281 2529 -1
+5285 2529 -1
+5473 2529 -1
+5477 2529 -1
+5537 2529 -1
+5541 2529 -1
+5617 2529 -1
+5649 2529 1
+7521 2529 -1
+7524 2529 1
+10105 2529 38
+4485 2530 1
+4530 2530 -1
+4706 2530 -1
+4710 2530 -1
+4770 2530 -1
+4774 2530 -1
+4962 2530 -1
+4966 2530 -1
+5026 2530 -1
+5030 2530 -1
+5218 2530 -1
+5222 2530 -1
+5282 2530 -1
+5286 2530 -1
+5474 2530 -1
+5478 2530 -1
+5538 2530 -1
+5542 2530 -1
+5618 2530 -1
+5650 2530 1
+7521 2530 1
+7522 2530 -1
+10106 2530 38
+4486 2531 1
+4531 2531 -1
+4707 2531 -1
+4711 2531 -1
+4771 2531 -1
+4775 2531 -1
+4963 2531 -1
+4967 2531 -1
+5027 2531 -1
+5031 2531 -1
+5219 2531 -1
+5223 2531 -1
+5283 2531 -1
+5287 2531 -1
+5475 2531 -1
+5479 2531 -1
+5539 2531 -1
+5543 2531 -1
+5619 2531 -1
+5651 2531 1
+7522 2531 1
+7523 2531 -1
+10107 2531 38
+4487 2532 1
+4532 2532 -1
+4708 2532 -1
+4712 2532 -1
+4772 2532 -1
+4776 2532 -1
+4964 2532 -1
+4968 2532 -1
+5028 2532 -1
+5032 2532 -1
+5220 2532 -1
+5224 2532 -1
+5284 2532 -1
+5288 2532 -1
+5476 2532 -1
+5480 2532 -1
+5540 2532 -1
+5544 2532 -1
+5620 2532 -1
+5652 2532 1
+7523 2532 1
+7524 2532 -1
+10108 2532 38
+4492 2533 1
+4533 2533 -1
+4713 2533 -1
+4717 2533 -1
+4777 2533 -1
+4781 2533 -1
+4969 2533 -1
+4973 2533 -1
+5033 2533 -1
+5037 2533 -1
+5225 2533 -1
+5229 2533 -1
+5289 2533 -1
+5293 2533 -1
+5481 2533 -1
+5485 2533 -1
+5545 2533 -1
+5549 2533 -1
+5621 2533 -1
+5653 2533 1
+7525 2533 -1
+7528 2533 1
+10109 2533 38
+4489 2534 1
+4534 2534 -1
+4714 2534 -1
+4718 2534 -1
+4778 2534 -1
+4782 2534 -1
+4970 2534 -1
+4974 2534 -1
+5034 2534 -1
+5038 2534 -1
+5226 2534 -1
+5230 2534 -1
+5290 2534 -1
+5294 2534 -1
+5482 2534 -1
+5486 2534 -1
+5546 2534 -1
+5550 2534 -1
+5622 2534 -1
+5654 2534 1
+7525 2534 1
+7526 2534 -1
+10110 2534 38
+4490 2535 1
+4535 2535 -1
+4715 2535 -1
+4719 2535 -1
+4779 2535 -1
+4783 2535 -1
+4971 2535 -1
+4975 2535 -1
+5035 2535 -1
+5039 2535 -1
+5227 2535 -1
+5231 2535 -1
+5291 2535 -1
+5295 2535 -1
+5483 2535 -1
+5487 2535 -1
+5547 2535 -1
+5551 2535 -1
+5623 2535 -1
+5655 2535 1
+7526 2535 1
+7527 2535 -1
+10111 2535 38
+4491 2536 1
+4536 2536 -1
+4716 2536 -1
+4720 2536 -1
+4780 2536 -1
+4784 2536 -1
+4972 2536 -1
+4976 2536 -1
+5036 2536 -1
+5040 2536 -1
+5228 2536 -1
+5232 2536 -1
+5292 2536 -1
+5296 2536 -1
+5484 2536 -1
+5488 2536 -1
+5548 2536 -1
+5552 2536 -1
+5624 2536 -1
+5656 2536 1
+7527 2536 1
+7528 2536 -1
+10112 2536 38
+4496 2537 1
+4537 2537 -1
+4721 2537 -1
+4725 2537 -1
+4785 2537 -1
+4789 2537 -1
+4977 2537 -1
+4981 2537 -1
+5041 2537 -1
+5045 2537 -1
+5233 2537 -1
+5237 2537 -1
+5297 2537 -1
+5301 2537 -1
+5489 2537 -1
+5493 2537 -1
+5553 2537 -1
+5557 2537 -1
+5625 2537 -1
+5657 2537 1
+7529 2537 -1
+7532 2537 1
+10113 2537 38
+4493 2538 1
+4538 2538 -1
+4722 2538 -1
+4726 2538 -1
+4786 2538 -1
+4790 2538 -1
+4978 2538 -1
+4982 2538 -1
+5042 2538 -1
+5046 2538 -1
+5234 2538 -1
+5238 2538 -1
+5298 2538 -1
+5302 2538 -1
+5490 2538 -1
+5494 2538 -1
+5554 2538 -1
+5558 2538 -1
+5626 2538 -1
+5658 2538 1
+7529 2538 1
+7530 2538 -1
+10114 2538 38
+4494 2539 1
+4539 2539 -1
+4723 2539 -1
+4727 2539 -1
+4787 2539 -1
+4791 2539 -1
+4979 2539 -1
+4983 2539 -1
+5043 2539 -1
+5047 2539 -1
+5235 2539 -1
+5239 2539 -1
+5299 2539 -1
+5303 2539 -1
+5491 2539 -1
+5495 2539 -1
+5555 2539 -1
+5559 2539 -1
+5627 2539 -1
+5659 2539 1
+7530 2539 1
+7531 2539 -1
+10115 2539 38
+4495 2540 1
+4540 2540 -1
+4724 2540 -1
+4728 2540 -1
+4788 2540 -1
+4792 2540 -1
+4980 2540 -1
+4984 2540 -1
+5044 2540 -1
+5048 2540 -1
+5236 2540 -1
+5240 2540 -1
+5300 2540 -1
+5304 2540 -1
+5492 2540 -1
+5496 2540 -1
+5556 2540 -1
+5560 2540 -1
+5628 2540 -1
+5660 2540 1
+7531 2540 1
+7532 2540 -1
+10116 2540 38
+4500 2541 1
+4541 2541 -1
+4729 2541 -1
+4733 2541 -1
+4793 2541 -1
+4797 2541 -1
+4985 2541 -1
+4989 2541 -1
+5049 2541 -1
+5053 2541 -1
+5241 2541 -1
+5245 2541 -1
+5305 2541 -1
+5309 2541 -1
+5497 2541 -1
+5501 2541 -1
+5561 2541 -1
+5565 2541 -1
+5629 2541 -1
+5661 2541 1
+7533 2541 -1
+7536 2541 1
+10117 2541 38
+4497 2542 1
+4542 2542 -1
+4730 2542 -1
+4734 2542 -1
+4794 2542 -1
+4798 2542 -1
+4986 2542 -1
+4990 2542 -1
+5050 2542 -1
+5054 2542 -1
+5242 2542 -1
+5246 2542 -1
+5306 2542 -1
+5310 2542 -1
+5498 2542 -1
+5502 2542 -1
+5562 2542 -1
+5566 2542 -1
+5630 2542 -1
+5662 2542 1
+7533 2542 1
+7534 2542 -1
+10118 2542 38
+4498 2543 1
+4543 2543 -1
+4731 2543 -1
+4735 2543 -1
+4795 2543 -1
+4799 2543 -1
+4987 2543 -1
+4991 2543 -1
+5051 2543 -1
+5055 2543 -1
+5243 2543 -1
+5247 2543 -1
+5307 2543 -1
+5311 2543 -1
+5499 2543 -1
+5503 2543 -1
+5563 2543 -1
+5567 2543 -1
+5631 2543 -1
+5663 2543 1
+7534 2543 1
+7535 2543 -1
+10119 2543 38
+4499 2544 1
+4544 2544 -1
+4732 2544 -1
+4736 2544 -1
+4796 2544 -1
+4800 2544 -1
+4988 2544 -1
+4992 2544 -1
+5052 2544 -1
+5056 2544 -1
+5244 2544 -1
+5248 2544 -1
+5308 2544 -1
+5312 2544 -1
+5500 2544 -1
+5504 2544 -1
+5564 2544 -1
+5568 2544 -1
+5632 2544 -1
+5664 2544 1
+7535 2544 1
+7536 2544 -1
+10120 2544 38
+4545 2545 1
+4549 2545 1
+4577 2545 1
+4581 2545 1
+4609 2545 1
+4613 2545 1
+4641 2545 1
+4645 2545 1
+4940 2545 1
+4944 2545 1
+4972 2545 1
+4976 2545 1
+5004 2545 1
+5008 2545 1
+5036 2545 1
+5040 2545 1
+5075 2545 1
+5079 2545 1
+5107 2545 1
+5111 2545 1
+5139 2545 1
+5143 2545 1
+5171 2545 1
+5175 2545 1
+5466 2545 1
+5470 2545 1
+5498 2545 1
+5502 2545 1
+5530 2545 1
+5534 2545 1
+5562 2545 1
+5566 2545 1
+5569 2545 -1
+5592 2545 1
+5665 2545 1
+5681 2545 -1
+7537 2545 -1
+7540 2545 1
+10121 2545 38
+4546 2546 1
+4550 2546 1
+4578 2546 1
+4582 2546 1
+4610 2546 1
+4614 2546 1
+4642 2546 1
+4646 2546 1
+4937 2546 1
+4941 2546 1
+4969 2546 1
+4973 2546 1
+5001 2546 1
+5005 2546 1
+5033 2546 1
+5037 2546 1
+5076 2546 1
+5080 2546 1
+5108 2546 1
+5112 2546 1
+5140 2546 1
+5144 2546 1
+5172 2546 1
+5176 2546 1
+5467 2546 1
+5471 2546 1
+5499 2546 1
+5503 2546 1
+5531 2546 1
+5535 2546 1
+5563 2546 1
+5567 2546 1
+5570 2546 -1
+5589 2546 1
+5666 2546 1
+5682 2546 -1
+7537 2546 1
+7538 2546 -1
+10122 2546 38
+4547 2547 1
+4551 2547 1
+4579 2547 1
+4583 2547 1
+4611 2547 1
+4615 2547 1
+4643 2547 1
+4647 2547 1
+4938 2547 1
+4942 2547 1
+4970 2547 1
+4974 2547 1
+5002 2547 1
+5006 2547 1
+5034 2547 1
+5038 2547 1
+5073 2547 1
+5077 2547 1
+5105 2547 1
+5109 2547 1
+5137 2547 1
+5141 2547 1
+5169 2547 1
+5173 2547 1
+5468 2547 1
+5472 2547 1
+5500 2547 1
+5504 2547 1
+5532 2547 1
+5536 2547 1
+5564 2547 1
+5568 2547 1
+5571 2547 -1
+5590 2547 1
+5667 2547 1
+5683 2547 -1
+7538 2547 1
+7539 2547 -1
+10123 2547 38
+4548 2548 1
+4552 2548 1
+4580 2548 1
+4584 2548 1
+4612 2548 1
+4616 2548 1
+4644 2548 1
+4648 2548 1
+4939 2548 1
+4943 2548 1
+4971 2548 1
+4975 2548 1
+5003 2548 1
+5007 2548 1
+5035 2548 1
+5039 2548 1
+5074 2548 1
+5078 2548 1
+5106 2548 1
+5110 2548 1
+5138 2548 1
+5142 2548 1
+5170 2548 1
+5174 2548 1
+5465 2548 1
+5469 2548 1
+5497 2548 1
+5501 2548 1
+5529 2548 1
+5533 2548 1
+5561 2548 1
+5565 2548 1
+5572 2548 -1
+5591 2548 1
+5668 2548 1
+5684 2548 -1
+7539 2548 1
+7540 2548 -1
+10124 2548 38
+4553 2549 1
+4557 2549 1
+4585 2549 1
+4589 2549 1
+4617 2549 1
+4621 2549 1
+4649 2549 1
+4653 2549 1
+4948 2549 1
+4952 2549 1
+4980 2549 1
+4984 2549 1
+5012 2549 1
+5016 2549 1
+5044 2549 1
+5048 2549 1
+5083 2549 1
+5087 2549 1
+5115 2549 1
+5119 2549 1
+5147 2549 1
+5151 2549 1
+5179 2549 1
+5183 2549 1
+5442 2549 1
+5446 2549 1
+5474 2549 1
+5478 2549 1
+5506 2549 1
+5510 2549 1
+5538 2549 1
+5542 2549 1
+5573 2549 -1
+5596 2549 1
+5669 2549 1
+5685 2549 -1
+7541 2549 -1
+7544 2549 1
+10125 2549 38
+4554 2550 1
+4558 2550 1
+4586 2550 1
+4590 2550 1
+4618 2550 1
+4622 2550 1
+4650 2550 1
+4654 2550 1
+4945 2550 1
+4949 2550 1
+4977 2550 1
+4981 2550 1
+5009 2550 1
+5013 2550 1
+5041 2550 1
+5045 2550 1
+5084 2550 1
+5088 2550 1
+5116 2550 1
+5120 2550 1
+5148 2550 1
+5152 2550 1
+5180 2550 1
+5184 2550 1
+5443 2550 1
+5447 2550 1
+5475 2550 1
+5479 2550 1
+5507 2550 1
+5511 2550 1
+5539 2550 1
+5543 2550 1
+5574 2550 -1
+5593 2550 1
+5670 2550 1
+5686 2550 -1
+7541 2550 1
+7542 2550 -1
+10126 2550 38
+4555 2551 1
+4559 2551 1
+4587 2551 1
+4591 2551 1
+4619 2551 1
+4623 2551 1
+4651 2551 1
+4655 2551 1
+4946 2551 1
+4950 2551 1
+4978 2551 1
+4982 2551 1
+5010 2551 1
+5014 2551 1
+5042 2551 1
+5046 2551 1
+5081 2551 1
+5085 2551 1
+5113 2551 1
+5117 2551 1
+5145 2551 1
+5149 2551 1
+5177 2551 1
+5181 2551 1
+5444 2551 1
+5448 2551 1
+5476 2551 1
+5480 2551 1
+5508 2551 1
+5512 2551 1
+5540 2551 1
+5544 2551 1
+5575 2551 -1
+5594 2551 1
+5671 2551 1
+5687 2551 -1
+7542 2551 1
+7543 2551 -1
+10127 2551 38
+4556 2552 1
+4560 2552 1
+4588 2552 1
+4592 2552 1
+4620 2552 1
+4624 2552 1
+4652 2552 1
+4656 2552 1
+4947 2552 1
+4951 2552 1
+4979 2552 1
+4983 2552 1
+5011 2552 1
+5015 2552 1
+5043 2552 1
+5047 2552 1
+5082 2552 1
+5086 2552 1
+5114 2552 1
+5118 2552 1
+5146 2552 1
+5150 2552 1
+5178 2552 1
+5182 2552 1
+5441 2552 1
+5445 2552 1
+5473 2552 1
+5477 2552 1
+5505 2552 1
+5509 2552 1
+5537 2552 1
+5541 2552 1
+5576 2552 -1
+5595 2552 1
+5672 2552 1
+5688 2552 -1
+7543 2552 1
+7544 2552 -1
+10128 2552 38
+4561 2553 1
+4565 2553 1
+4593 2553 1
+4597 2553 1
+4625 2553 1
+4629 2553 1
+4657 2553 1
+4661 2553 1
+4956 2553 1
+4960 2553 1
+4988 2553 1
+4992 2553 1
+5020 2553 1
+5024 2553 1
+5052 2553 1
+5056 2553 1
+5059 2553 1
+5063 2553 1
+5091 2553 1
+5095 2553 1
+5123 2553 1
+5127 2553 1
+5155 2553 1
+5159 2553 1
+5450 2553 1
+5454 2553 1
+5482 2553 1
+5486 2553 1
+5514 2553 1
+5518 2553 1
+5546 2553 1
+5550 2553 1
+5577 2553 -1
+5600 2553 1
+5673 2553 1
+5689 2553 -1
+7545 2553 -1
+7548 2553 1
+10129 2553 38
+4562 2554 1
+4566 2554 1
+4594 2554 1
+4598 2554 1
+4626 2554 1
+4630 2554 1
+4658 2554 1
+4662 2554 1
+4953 2554 1
+4957 2554 1
+4985 2554 1
+4989 2554 1
+5017 2554 1
+5021 2554 1
+5049 2554 1
+5053 2554 1
+5060 2554 1
+5064 2554 1
+5092 2554 1
+5096 2554 1
+5124 2554 1
+5128 2554 1
+5156 2554 1
+5160 2554 1
+5451 2554 1
+5455 2554 1
+5483 2554 1
+5487 2554 1
+5515 2554 1
+5519 2554 1
+5547 2554 1
+5551 2554 1
+5578 2554 -1
+5597 2554 1
+5674 2554 1
+5690 2554 -1
+7545 2554 1
+7546 2554 -1
+10130 2554 38
+4563 2555 1
+4567 2555 1
+4595 2555 1
+4599 2555 1
+4627 2555 1
+4631 2555 1
+4659 2555 1
+4663 2555 1
+4954 2555 1
+4958 2555 1
+4986 2555 1
+4990 2555 1
+5018 2555 1
+5022 2555 1
+5050 2555 1
+5054 2555 1
+5057 2555 1
+5061 2555 1
+5089 2555 1
+5093 2555 1
+5121 2555 1
+5125 2555 1
+5153 2555 1
+5157 2555 1
+5452 2555 1
+5456 2555 1
+5484 2555 1
+5488 2555 1
+5516 2555 1
+5520 2555 1
+5548 2555 1
+5552 2555 1
+5579 2555 -1
+5598 2555 1
+5675 2555 1
+5691 2555 -1
+7546 2555 1
+7547 2555 -1
+10131 2555 38
+4564 2556 1
+4568 2556 1
+4596 2556 1
+4600 2556 1
+4628 2556 1
+4632 2556 1
+4660 2556 1
+4664 2556 1
+4955 2556 1
+4959 2556 1
+4987 2556 1
+4991 2556 1
+5019 2556 1
+5023 2556 1
+5051 2556 1
+5055 2556 1
+5058 2556 1
+5062 2556 1
+5090 2556 1
+5094 2556 1
+5122 2556 1
+5126 2556 1
+5154 2556 1
+5158 2556 1
+5449 2556 1
+5453 2556 1
+5481 2556 1
+5485 2556 1
+5513 2556 1
+5517 2556 1
+5545 2556 1
+5549 2556 1
+5580 2556 -1
+5599 2556 1
+5676 2556 1
+5692 2556 -1
+7547 2556 1
+7548 2556 -1
+10132 2556 38
+4569 2557 1
+4573 2557 1
+4601 2557 1
+4605 2557 1
+4633 2557 1
+4637 2557 1
+4665 2557 1
+4669 2557 1
+4932 2557 1
+4936 2557 1
+4964 2557 1
+4968 2557 1
+4996 2557 1
+5000 2557 1
+5028 2557 1
+5032 2557 1
+5067 2557 1
+5071 2557 1
+5099 2557 1
+5103 2557 1
+5131 2557 1
+5135 2557 1
+5163 2557 1
+5167 2557 1
+5458 2557 1
+5462 2557 1
+5490 2557 1
+5494 2557 1
+5522 2557 1
+5526 2557 1
+5554 2557 1
+5558 2557 1
+5581 2557 -1
+5588 2557 1
+5677 2557 1
+5693 2557 -1
+7549 2557 -1
+7552 2557 1
+10133 2557 38
+4570 2558 1
+4574 2558 1
+4602 2558 1
+4606 2558 1
+4634 2558 1
+4638 2558 1
+4666 2558 1
+4670 2558 1
+4929 2558 1
+4933 2558 1
+4961 2558 1
+4965 2558 1
+4993 2558 1
+4997 2558 1
+5025 2558 1
+5029 2558 1
+5068 2558 1
+5072 2558 1
+5100 2558 1
+5104 2558 1
+5132 2558 1
+5136 2558 1
+5164 2558 1
+5168 2558 1
+5459 2558 1
+5463 2558 1
+5491 2558 1
+5495 2558 1
+5523 2558 1
+5527 2558 1
+5555 2558 1
+5559 2558 1
+5582 2558 -1
+5585 2558 1
+5678 2558 1
+5694 2558 -1
+7549 2558 1
+7550 2558 -1
+10134 2558 38
+4571 2559 1
+4575 2559 1
+4603 2559 1
+4607 2559 1
+4635 2559 1
+4639 2559 1
+4667 2559 1
+4671 2559 1
+4930 2559 1
+4934 2559 1
+4962 2559 1
+4966 2559 1
+4994 2559 1
+4998 2559 1
+5026 2559 1
+5030 2559 1
+5065 2559 1
+5069 2559 1
+5097 2559 1
+5101 2559 1
+5129 2559 1
+5133 2559 1
+5161 2559 1
+5165 2559 1
+5460 2559 1
+5464 2559 1
+5492 2559 1
+5496 2559 1
+5524 2559 1
+5528 2559 1
+5556 2559 1
+5560 2559 1
+5583 2559 -1
+5586 2559 1
+5679 2559 1
+5695 2559 -1
+7550 2559 1
+7551 2559 -1
+10135 2559 38
+4572 2560 1
+4576 2560 1
+4604 2560 1
+4608 2560 1
+4636 2560 1
+4640 2560 1
+4668 2560 1
+4672 2560 1
+4931 2560 1
+4935 2560 1
+4963 2560 1
+4967 2560 1
+4995 2560 1
+4999 2560 1
+5027 2560 1
+5031 2560 1
+5066 2560 1
+5070 2560 1
+5098 2560 1
+5102 2560 1
+5130 2560 1
+5134 2560 1
+5162 2560 1
+5166 2560 1
+5457 2560 1
+5461 2560 1
+5489 2560 1
+5493 2560 1
+5521 2560 1
+5525 2560 1
+5553 2560 1
+5557 2560 1
+5584 2560 -1
+5587 2560 1
+5680 2560 1
+5696 2560 -1
+7551 2560 1
+7552 2560 -1
+10136 2560 38
+4673 2561 1
+4677 2561 1
+4705 2561 1
+4709 2561 1
+4737 2561 1
+4741 2561 1
+4769 2561 1
+4773 2561 1
+4812 2561 1
+4816 2561 1
+4844 2561 1
+4848 2561 1
+4876 2561 1
+4880 2561 1
+4908 2561 1
+4912 2561 1
+5203 2561 1
+5207 2561 1
+5235 2561 1
+5239 2561 1
+5267 2561 1
+5271 2561 1
+5299 2561 1
+5303 2561 1
+5338 2561 1
+5342 2561 1
+5370 2561 1
+5374 2561 1
+5402 2561 1
+5406 2561 1
+5434 2561 1
+5438 2561 1
+5576 2561 1
+5585 2561 -1
+5665 2561 -1
+5681 2561 1
+7553 2561 -1
+7556 2561 1
+10137 2561 38
+4674 2562 1
+4678 2562 1
+4706 2562 1
+4710 2562 1
+4738 2562 1
+4742 2562 1
+4770 2562 1
+4774 2562 1
+4809 2562 1
+4813 2562 1
+4841 2562 1
+4845 2562 1
+4873 2562 1
+4877 2562 1
+4905 2562 1
+4909 2562 1
+5204 2562 1
+5208 2562 1
+5236 2562 1
+5240 2562 1
+5268 2562 1
+5272 2562 1
+5300 2562 1
+5304 2562 1
+5339 2562 1
+5343 2562 1
+5371 2562 1
+5375 2562 1
+5403 2562 1
+5407 2562 1
+5435 2562 1
+5439 2562 1
+5573 2562 1
+5586 2562 -1
+5666 2562 -1
+5682 2562 1
+7553 2562 1
+7554 2562 -1
+10138 2562 38
+4675 2563 1
+4679 2563 1
+4707 2563 1
+4711 2563 1
+4739 2563 1
+4743 2563 1
+4771 2563 1
+4775 2563 1
+4810 2563 1
+4814 2563 1
+4842 2563 1
+4846 2563 1
+4874 2563 1
+4878 2563 1
+4906 2563 1
+4910 2563 1
+5201 2563 1
+5205 2563 1
+5233 2563 1
+5237 2563 1
+5265 2563 1
+5269 2563 1
+5297 2563 1
+5301 2563 1
+5340 2563 1
+5344 2563 1
+5372 2563 1
+5376 2563 1
+5404 2563 1
+5408 2563 1
+5436 2563 1
+5440 2563 1
+5574 2563 1
+5587 2563 -1
+5667 2563 -1
+5683 2563 1
+7554 2563 1
+7555 2563 -1
+10139 2563 38
+4676 2564 1
+4680 2564 1
+4708 2564 1
+4712 2564 1
+4740 2564 1
+4744 2564 1
+4772 2564 1
+4776 2564 1
+4811 2564 1
+4815 2564 1
+4843 2564 1
+4847 2564 1
+4875 2564 1
+4879 2564 1
+4907 2564 1
+4911 2564 1
+5202 2564 1
+5206 2564 1
+5234 2564 1
+5238 2564 1
+5266 2564 1
+5270 2564 1
+5298 2564 1
+5302 2564 1
+5337 2564 1
+5341 2564 1
+5369 2564 1
+5373 2564 1
+5401 2564 1
+5405 2564 1
+5433 2564 1
+5437 2564 1
+5575 2564 1
+5588 2564 -1
+5668 2564 -1
+5684 2564 1
+7555 2564 1
+7556 2564 -1
+10140 2564 38
+4681 2565 1
+4685 2565 1
+4713 2565 1
+4717 2565 1
+4745 2565 1
+4749 2565 1
+4777 2565 1
+4781 2565 1
+4820 2565 1
+4824 2565 1
+4852 2565 1
+4856 2565 1
+4884 2565 1
+4888 2565 1
+4916 2565 1
+4920 2565 1
+5211 2565 1
+5215 2565 1
+5243 2565 1
+5247 2565 1
+5275 2565 1
+5279 2565 1
+5307 2565 1
+5311 2565 1
+5314 2565 1
+5318 2565 1
+5346 2565 1
+5350 2565 1
+5378 2565 1
+5382 2565 1
+5410 2565 1
+5414 2565 1
+5580 2565 1
+5589 2565 -1
+5669 2565 -1
+5685 2565 1
+7557 2565 -1
+7560 2565 1
+10141 2565 38
+4682 2566 1
+4686 2566 1
+4714 2566 1
+4718 2566 1
+4746 2566 1
+4750 2566 1
+4778 2566 1
+4782 2566 1
+4817 2566 1
+4821 2566 1
+4849 2566 1
+4853 2566 1
+4881 2566 1
+4885 2566 1
+4913 2566 1
+4917 2566 1
+5212 2566 1
+5216 2566 1
+5244 2566 1
+5248 2566 1
+5276 2566 1
+5280 2566 1
+5308 2566 1
+5312 2566 1
+5315 2566 1
+5319 2566 1
+5347 2566 1
+5351 2566 1
+5379 2566 1
+5383 2566 1
+5411 2566 1
+5415 2566 1
+5577 2566 1
+5590 2566 -1
+5670 2566 -1
+5686 2566 1
+7557 2566 1
+7558 2566 -1
+10142 2566 38
+4683 2567 1
+4687 2567 1
+4715 2567 1
+4719 2567 1
+4747 2567 1
+4751 2567 1
+4779 2567 1
+4783 2567 1
+4818 2567 1
+4822 2567 1
+4850 2567 1
+4854 2567 1
+4882 2567 1
+4886 2567 1
+4914 2567 1
+4918 2567 1
+5209 2567 1
+5213 2567 1
+5241 2567 1
+5245 2567 1
+5273 2567 1
+5277 2567 1
+5305 2567 1
+5309 2567 1
+5316 2567 1
+5320 2567 1
+5348 2567 1
+5352 2567 1
+5380 2567 1
+5384 2567 1
+5412 2567 1
+5416 2567 1
+5578 2567 1
+5591 2567 -1
+5671 2567 -1
+5687 2567 1
+7558 2567 1
+7559 2567 -1
+10143 2567 38
+4684 2568 1
+4688 2568 1
+4716 2568 1
+4720 2568 1
+4748 2568 1
+4752 2568 1
+4780 2568 1
+4784 2568 1
+4819 2568 1
+4823 2568 1
+4851 2568 1
+4855 2568 1
+4883 2568 1
+4887 2568 1
+4915 2568 1
+4919 2568 1
+5210 2568 1
+5214 2568 1
+5242 2568 1
+5246 2568 1
+5274 2568 1
+5278 2568 1
+5306 2568 1
+5310 2568 1
+5313 2568 1
+5317 2568 1
+5345 2568 1
+5349 2568 1
+5377 2568 1
+5381 2568 1
+5409 2568 1
+5413 2568 1
+5579 2568 1
+5592 2568 -1
+5672 2568 -1
+5688 2568 1
+7559 2568 1
+7560 2568 -1
+10144 2568 38
+4689 2569 1
+4693 2569 1
+4721 2569 1
+4725 2569 1
+4753 2569 1
+4757 2569 1
+4785 2569 1
+4789 2569 1
+4828 2569 1
+4832 2569 1
+4860 2569 1
+4864 2569 1
+4892 2569 1
+4896 2569 1
+4924 2569 1
+4928 2569 1
+5187 2569 1
+5191 2569 1
+5219 2569 1
+5223 2569 1
+5251 2569 1
+5255 2569 1
+5283 2569 1
+5287 2569 1
+5322 2569 1
+5326 2569 1
+5354 2569 1
+5358 2569 1
+5386 2569 1
+5390 2569 1
+5418 2569 1
+5422 2569 1
+5584 2569 1
+5593 2569 -1
+5673 2569 -1
+5689 2569 1
+7561 2569 -1
+7564 2569 1
+10145 2569 38
+4690 2570 1
+4694 2570 1
+4722 2570 1
+4726 2570 1
+4754 2570 1
+4758 2570 1
+4786 2570 1
+4790 2570 1
+4825 2570 1
+4829 2570 1
+4857 2570 1
+4861 2570 1
+4889 2570 1
+4893 2570 1
+4921 2570 1
+4925 2570 1
+5188 2570 1
+5192 2570 1
+5220 2570 1
+5224 2570 1
+5252 2570 1
+5256 2570 1
+5284 2570 1
+5288 2570 1
+5323 2570 1
+5327 2570 1
+5355 2570 1
+5359 2570 1
+5387 2570 1
+5391 2570 1
+5419 2570 1
+5423 2570 1
+5581 2570 1
+5594 2570 -1
+5674 2570 -1
+5690 2570 1
+7561 2570 1
+7562 2570 -1
+10146 2570 38
+4691 2571 1
+4695 2571 1
+4723 2571 1
+4727 2571 1
+4755 2571 1
+4759 2571 1
+4787 2571 1
+4791 2571 1
+4826 2571 1
+4830 2571 1
+4858 2571 1
+4862 2571 1
+4890 2571 1
+4894 2571 1
+4922 2571 1
+4926 2571 1
+5185 2571 1
+5189 2571 1
+5217 2571 1
+5221 2571 1
+5249 2571 1
+5253 2571 1
+5281 2571 1
+5285 2571 1
+5324 2571 1
+5328 2571 1
+5356 2571 1
+5360 2571 1
+5388 2571 1
+5392 2571 1
+5420 2571 1
+5424 2571 1
+5582 2571 1
+5595 2571 -1
+5675 2571 -1
+5691 2571 1
+7562 2571 1
+7563 2571 -1
+10147 2571 38
+4692 2572 1
+4696 2572 1
+4724 2572 1
+4728 2572 1
+4756 2572 1
+4760 2572 1
+4788 2572 1
+4792 2572 1
+4827 2572 1
+4831 2572 1
+4859 2572 1
+4863 2572 1
+4891 2572 1
+4895 2572 1
+4923 2572 1
+4927 2572 1
+5186 2572 1
+5190 2572 1
+5218 2572 1
+5222 2572 1
+5250 2572 1
+5254 2572 1
+5282 2572 1
+5286 2572 1
+5321 2572 1
+5325 2572 1
+5353 2572 1
+5357 2572 1
+5385 2572 1
+5389 2572 1
+5417 2572 1
+5421 2572 1
+5583 2572 1
+5596 2572 -1
+5676 2572 -1
+5692 2572 1
+7563 2572 1
+7564 2572 -1
+10148 2572 38
+4697 2573 1
+4701 2573 1
+4729 2573 1
+4733 2573 1
+4761 2573 1
+4765 2573 1
+4793 2573 1
+4797 2573 1
+4804 2573 1
+4808 2573 1
+4836 2573 1
+4840 2573 1
+4868 2573 1
+4872 2573 1
+4900 2573 1
+4904 2573 1
+5195 2573 1
+5199 2573 1
+5227 2573 1
+5231 2573 1
+5259 2573 1
+5263 2573 1
+5291 2573 1
+5295 2573 1
+5330 2573 1
+5334 2573 1
+5362 2573 1
+5366 2573 1
+5394 2573 1
+5398 2573 1
+5426 2573 1
+5430 2573 1
+5572 2573 1
+5597 2573 -1
+5677 2573 -1
+5693 2573 1
+7565 2573 -1
+7568 2573 1
+10149 2573 38
+4698 2574 1
+4702 2574 1
+4730 2574 1
+4734 2574 1
+4762 2574 1
+4766 2574 1
+4794 2574 1
+4798 2574 1
+4801 2574 1
+4805 2574 1
+4833 2574 1
+4837 2574 1
+4865 2574 1
+4869 2574 1
+4897 2574 1
+4901 2574 1
+5196 2574 1
+5200 2574 1
+5228 2574 1
+5232 2574 1
+5260 2574 1
+5264 2574 1
+5292 2574 1
+5296 2574 1
+5331 2574 1
+5335 2574 1
+5363 2574 1
+5367 2574 1
+5395 2574 1
+5399 2574 1
+5427 2574 1
+5431 2574 1
+5569 2574 1
+5598 2574 -1
+5678 2574 -1
+5694 2574 1
+7565 2574 1
+7566 2574 -1
+10150 2574 38
+4699 2575 1
+4703 2575 1
+4731 2575 1
+4735 2575 1
+4763 2575 1
+4767 2575 1
+4795 2575 1
+4799 2575 1
+4802 2575 1
+4806 2575 1
+4834 2575 1
+4838 2575 1
+4866 2575 1
+4870 2575 1
+4898 2575 1
+4902 2575 1
+5193 2575 1
+5197 2575 1
+5225 2575 1
+5229 2575 1
+5257 2575 1
+5261 2575 1
+5289 2575 1
+5293 2575 1
+5332 2575 1
+5336 2575 1
+5364 2575 1
+5368 2575 1
+5396 2575 1
+5400 2575 1
+5428 2575 1
+5432 2575 1
+5570 2575 1
+5599 2575 -1
+5679 2575 -1
+5695 2575 1
+7566 2575 1
+7567 2575 -1
+10151 2575 38
+4700 2576 1
+4704 2576 1
+4732 2576 1
+4736 2576 1
+4764 2576 1
+4768 2576 1
+4796 2576 1
+4800 2576 1
+4803 2576 1
+4807 2576 1
+4835 2576 1
+4839 2576 1
+4867 2576 1
+4871 2576 1
+4899 2576 1
+4903 2576 1
+5194 2576 1
+5198 2576 1
+5226 2576 1
+5230 2576 1
+5258 2576 1
+5262 2576 1
+5290 2576 1
+5294 2576 1
+5329 2576 1
+5333 2576 1
+5361 2576 1
+5365 2576 1
+5393 2576 1
+5397 2576 1
+5425 2576 1
+5429 2576 1
+5571 2576 1
+5600 2576 -1
+5680 2576 -1
+5696 2576 1
+7567 2576 1
+7568 2576 -1
+10152 2576 38
+5601 2577 1
+5611 2577 1
+5617 2577 1
+5627 2577 1
+5640 2577 1
+5646 2577 1
+5656 2577 1
+5662 2577 1
+5665 2577 1
+5675 2577 1
+5688 2577 1
+5694 2577 1
+7569 2577 -1
+7572 2577 1
+10153 2577 38
+5602 2578 1
+5612 2578 1
+5618 2578 1
+5628 2578 1
+5637 2578 1
+5647 2578 1
+5653 2578 1
+5663 2578 1
+5666 2578 1
+5676 2578 1
+5685 2578 1
+5695 2578 1
+7569 2578 1
+7570 2578 -1
+10154 2578 38
+5603 2579 1
+5609 2579 1
+5619 2579 1
+5625 2579 1
+5638 2579 1
+5648 2579 1
+5654 2579 1
+5664 2579 1
+5667 2579 1
+5673 2579 1
+5686 2579 1
+5696 2579 1
+7570 2579 1
+7571 2579 -1
+10155 2579 38
+5604 2580 1
+5610 2580 1
+5620 2580 1
+5626 2580 1
+5639 2580 1
+5645 2580 1
+5655 2580 1
+5661 2580 1
+5668 2580 1
+5674 2580 1
+5687 2580 1
+5693 2580 1
+7571 2580 1
+7572 2580 -1
+10156 2580 38
+5605 2581 1
+5615 2581 1
+5621 2581 1
+5631 2581 1
+5634 2581 1
+5644 2581 1
+5650 2581 1
+5660 2581 1
+5669 2581 1
+5679 2581 1
+5682 2581 1
+5692 2581 1
+7573 2581 -1
+7576 2581 1
+10157 2581 38
+5606 2582 1
+5616 2582 1
+5622 2582 1
+5632 2582 1
+5635 2582 1
+5641 2582 1
+5651 2582 1
+5657 2582 1
+5670 2582 1
+5680 2582 1
+5683 2582 1
+5689 2582 1
+7573 2582 1
+7574 2582 -1
+10158 2582 38
+5607 2583 1
+5613 2583 1
+5623 2583 1
+5629 2583 1
+5636 2583 1
+5642 2583 1
+5652 2583 1
+5658 2583 1
+5671 2583 1
+5677 2583 1
+5684 2583 1
+5690 2583 1
+7574 2583 1
+7575 2583 -1
+10159 2583 38
+5608 2584 1
+5614 2584 1
+5624 2584 1
+5630 2584 1
+5633 2584 1
+5643 2584 1
+5649 2584 1
+5659 2584 1
+5672 2584 1
+5678 2584 1
+5681 2584 1
+5691 2584 1
+7575 2584 1
+7576 2584 -1
+10160 2584 38
+5697 2585 -1
+5709 2585 1
+5713 2585 -1
+5717 2585 -1
+5825 2585 -1
+5829 2585 -1
+5833 2585 -1
+5837 2585 -1
+5841 2585 -1
+5845 2585 -1
+5849 2585 -1
+5853 2585 -1
+10161 2585 38
+5698 2586 -1
+5710 2586 1
+5714 2586 -1
+5718 2586 -1
+5826 2586 -1
+5830 2586 -1
+5834 2586 -1
+5838 2586 -1
+5842 2586 -1
+5846 2586 -1
+5850 2586 -1
+5854 2586 -1
+10162 2586 38
+5699 2587 -1
+5711 2587 1
+5715 2587 -1
+5719 2587 -1
+5827 2587 -1
+5831 2587 -1
+5835 2587 -1
+5839 2587 -1
+5843 2587 -1
+5847 2587 -1
+5851 2587 -1
+5855 2587 -1
+10163 2587 38
+5700 2588 -1
+5712 2588 1
+5716 2588 -1
+5720 2588 -1
+5828 2588 -1
+5832 2588 -1
+5836 2588 -1
+5840 2588 -1
+5844 2588 -1
+5848 2588 -1
+5852 2588 -1
+5856 2588 -1
+10164 2588 38
+5697 2589 1
+5701 2589 -1
+5721 2589 -1
+5725 2589 -1
+5857 2589 -1
+5861 2589 -1
+5865 2589 -1
+5869 2589 -1
+5873 2589 -1
+5877 2589 -1
+5881 2589 -1
+5885 2589 -1
+10165 2589 38
+5698 2590 1
+5702 2590 -1
+5722 2590 -1
+5726 2590 -1
+5858 2590 -1
+5862 2590 -1
+5866 2590 -1
+5870 2590 -1
+5874 2590 -1
+5878 2590 -1
+5882 2590 -1
+5886 2590 -1
+10166 2590 38
+5699 2591 1
+5703 2591 -1
+5723 2591 -1
+5727 2591 -1
+5859 2591 -1
+5863 2591 -1
+5867 2591 -1
+5871 2591 -1
+5875 2591 -1
+5879 2591 -1
+5883 2591 -1
+5887 2591 -1
+10167 2591 38
+5700 2592 1
+5704 2592 -1
+5724 2592 -1
+5728 2592 -1
+5860 2592 -1
+5864 2592 -1
+5868 2592 -1
+5872 2592 -1
+5876 2592 -1
+5880 2592 -1
+5884 2592 -1
+5888 2592 -1
+10168 2592 38
+5701 2593 1
+5705 2593 -1
+5729 2593 -1
+5733 2593 -1
+5889 2593 -1
+5893 2593 -1
+5897 2593 -1
+5901 2593 -1
+5905 2593 -1
+5909 2593 -1
+5913 2593 -1
+5917 2593 -1
+10169 2593 38
+5702 2594 1
+5706 2594 -1
+5730 2594 -1
+5734 2594 -1
+5890 2594 -1
+5894 2594 -1
+5898 2594 -1
+5902 2594 -1
+5906 2594 -1
+5910 2594 -1
+5914 2594 -1
+5918 2594 -1
+10170 2594 38
+5703 2595 1
+5707 2595 -1
+5731 2595 -1
+5735 2595 -1
+5891 2595 -1
+5895 2595 -1
+5899 2595 -1
+5903 2595 -1
+5907 2595 -1
+5911 2595 -1
+5915 2595 -1
+5919 2595 -1
+10171 2595 38
+5704 2596 1
+5708 2596 -1
+5732 2596 -1
+5736 2596 -1
+5892 2596 -1
+5896 2596 -1
+5900 2596 -1
+5904 2596 -1
+5908 2596 -1
+5912 2596 -1
+5916 2596 -1
+5920 2596 -1
+10172 2596 38
+5705 2597 1
+5709 2597 -1
+5737 2597 -1
+5741 2597 -1
+5921 2597 -1
+5925 2597 -1
+5929 2597 -1
+5933 2597 -1
+5937 2597 -1
+5941 2597 -1
+5945 2597 -1
+5949 2597 -1
+10173 2597 38
+5706 2598 1
+5710 2598 -1
+5738 2598 -1
+5742 2598 -1
+5922 2598 -1
+5926 2598 -1
+5930 2598 -1
+5934 2598 -1
+5938 2598 -1
+5942 2598 -1
+5946 2598 -1
+5950 2598 -1
+10174 2598 38
+5707 2599 1
+5711 2599 -1
+5739 2599 -1
+5743 2599 -1
+5923 2599 -1
+5927 2599 -1
+5931 2599 -1
+5935 2599 -1
+5939 2599 -1
+5943 2599 -1
+5947 2599 -1
+5951 2599 -1
+10175 2599 38
+5708 2600 1
+5712 2600 -1
+5740 2600 -1
+5744 2600 -1
+5924 2600 -1
+5928 2600 -1
+5932 2600 -1
+5936 2600 -1
+5940 2600 -1
+5944 2600 -1
+5948 2600 -1
+5952 2600 -1
+10176 2600 38
+5697 2601 -1
+5704 2601 1
+5745 2601 -1
+5749 2601 -1
+5953 2601 -1
+5957 2601 -1
+5961 2601 -1
+5965 2601 -1
+5969 2601 -1
+5973 2601 -1
+5977 2601 -1
+5981 2601 -1
+10177 2601 38
+5698 2602 -1
+5701 2602 1
+5746 2602 -1
+5750 2602 -1
+5954 2602 -1
+5958 2602 -1
+5962 2602 -1
+5966 2602 -1
+5970 2602 -1
+5974 2602 -1
+5978 2602 -1
+5982 2602 -1
+10178 2602 38
+5699 2603 -1
+5702 2603 1
+5747 2603 -1
+5751 2603 -1
+5955 2603 -1
+5959 2603 -1
+5963 2603 -1
+5967 2603 -1
+5971 2603 -1
+5975 2603 -1
+5979 2603 -1
+5983 2603 -1
+10179 2603 38
+5700 2604 -1
+5703 2604 1
+5748 2604 -1
+5752 2604 -1
+5956 2604 -1
+5960 2604 -1
+5964 2604 -1
+5968 2604 -1
+5972 2604 -1
+5976 2604 -1
+5980 2604 -1
+5984 2604 -1
+10180 2604 38
+5701 2605 -1
+5708 2605 1
+5753 2605 -1
+5757 2605 -1
+5985 2605 -1
+5989 2605 -1
+5993 2605 -1
+5997 2605 -1
+6001 2605 -1
+6005 2605 -1
+6009 2605 -1
+6013 2605 -1
+10181 2605 38
+5702 2606 -1
+5705 2606 1
+5754 2606 -1
+5758 2606 -1
+5986 2606 -1
+5990 2606 -1
+5994 2606 -1
+5998 2606 -1
+6002 2606 -1
+6006 2606 -1
+6010 2606 -1
+6014 2606 -1
+10182 2606 38
+5703 2607 -1
+5706 2607 1
+5755 2607 -1
+5759 2607 -1
+5987 2607 -1
+5991 2607 -1
+5995 2607 -1
+5999 2607 -1
+6003 2607 -1
+6007 2607 -1
+6011 2607 -1
+6015 2607 -1
+10183 2607 38
+5704 2608 -1
+5707 2608 1
+5756 2608 -1
+5760 2608 -1
+5988 2608 -1
+5992 2608 -1
+5996 2608 -1
+6000 2608 -1
+6004 2608 -1
+6008 2608 -1
+6012 2608 -1
+6016 2608 -1
+10184 2608 38
+5705 2609 -1
+5712 2609 1
+5761 2609 -1
+5765 2609 -1
+6017 2609 -1
+6021 2609 -1
+6025 2609 -1
+6029 2609 -1
+6033 2609 -1
+6037 2609 -1
+6041 2609 -1
+6045 2609 -1
+10185 2609 38
+5706 2610 -1
+5709 2610 1
+5762 2610 -1
+5766 2610 -1
+6018 2610 -1
+6022 2610 -1
+6026 2610 -1
+6030 2610 -1
+6034 2610 -1
+6038 2610 -1
+6042 2610 -1
+6046 2610 -1
+10186 2610 38
+5707 2611 -1
+5710 2611 1
+5763 2611 -1
+5767 2611 -1
+6019 2611 -1
+6023 2611 -1
+6027 2611 -1
+6031 2611 -1
+6035 2611 -1
+6039 2611 -1
+6043 2611 -1
+6047 2611 -1
+10187 2611 38
+5708 2612 -1
+5711 2612 1
+5764 2612 -1
+5768 2612 -1
+6020 2612 -1
+6024 2612 -1
+6028 2612 -1
+6032 2612 -1
+6036 2612 -1
+6040 2612 -1
+6044 2612 -1
+6048 2612 -1
+10188 2612 38
+5700 2613 1
+5709 2613 -1
+5769 2613 -1
+5773 2613 -1
+6049 2613 -1
+6053 2613 -1
+6057 2613 -1
+6061 2613 -1
+6065 2613 -1
+6069 2613 -1
+6073 2613 -1
+6077 2613 -1
+10189 2613 38
+5697 2614 1
+5710 2614 -1
+5770 2614 -1
+5774 2614 -1
+6050 2614 -1
+6054 2614 -1
+6058 2614 -1
+6062 2614 -1
+6066 2614 -1
+6070 2614 -1
+6074 2614 -1
+6078 2614 -1
+10190 2614 38
+5698 2615 1
+5711 2615 -1
+5771 2615 -1
+5775 2615 -1
+6051 2615 -1
+6055 2615 -1
+6059 2615 -1
+6063 2615 -1
+6067 2615 -1
+6071 2615 -1
+6075 2615 -1
+6079 2615 -1
+10191 2615 38
+5699 2616 1
+5712 2616 -1
+5772 2616 -1
+5776 2616 -1
+6052 2616 -1
+6056 2616 -1
+6060 2616 -1
+6064 2616 -1
+6068 2616 -1
+6072 2616 -1
+6076 2616 -1
+6080 2616 -1
+10192 2616 38
+5713 2617 1
+5721 2617 1
+5729 2617 1
+5737 2617 1
+5777 2617 -1
+5781 2617 1
+6081 2617 -1
+6085 2617 -1
+6089 2617 -1
+6093 2617 -1
+6097 2617 -1
+6101 2617 -1
+6105 2617 -1
+6109 2617 -1
+10193 2617 38
+5714 2618 1
+5722 2618 1
+5730 2618 1
+5738 2618 1
+5778 2618 -1
+5782 2618 1
+6082 2618 -1
+6086 2618 -1
+6090 2618 -1
+6094 2618 -1
+6098 2618 -1
+6102 2618 -1
+6106 2618 -1
+6110 2618 -1
+10194 2618 38
+5715 2619 1
+5723 2619 1
+5731 2619 1
+5739 2619 1
+5779 2619 -1
+5783 2619 1
+6083 2619 -1
+6087 2619 -1
+6091 2619 -1
+6095 2619 -1
+6099 2619 -1
+6103 2619 -1
+6107 2619 -1
+6111 2619 -1
+10195 2619 38
+5716 2620 1
+5724 2620 1
+5732 2620 1
+5740 2620 1
+5780 2620 -1
+5784 2620 1
+6084 2620 -1
+6088 2620 -1
+6092 2620 -1
+6096 2620 -1
+6100 2620 -1
+6104 2620 -1
+6108 2620 -1
+6112 2620 -1
+10196 2620 38
+5717 2621 1
+5725 2621 1
+5733 2621 1
+5741 2621 1
+5777 2621 1
+5781 2621 -1
+6113 2621 -1
+6117 2621 -1
+6121 2621 -1
+6125 2621 -1
+6129 2621 -1
+6133 2621 -1
+6137 2621 -1
+6141 2621 -1
+10197 2621 38
+5718 2622 1
+5726 2622 1
+5734 2622 1
+5742 2622 1
+5778 2622 1
+5782 2622 -1
+6114 2622 -1
+6118 2622 -1
+6122 2622 -1
+6126 2622 -1
+6130 2622 -1
+6134 2622 -1
+6138 2622 -1
+6142 2622 -1
+10198 2622 38
+5719 2623 1
+5727 2623 1
+5735 2623 1
+5743 2623 1
+5779 2623 1
+5783 2623 -1
+6115 2623 -1
+6119 2623 -1
+6123 2623 -1
+6127 2623 -1
+6131 2623 -1
+6135 2623 -1
+6139 2623 -1
+6143 2623 -1
+10199 2623 38
+5720 2624 1
+5728 2624 1
+5736 2624 1
+5744 2624 1
+5780 2624 1
+5784 2624 -1
+6116 2624 -1
+6120 2624 -1
+6124 2624 -1
+6128 2624 -1
+6132 2624 -1
+6136 2624 -1
+6140 2624 -1
+6144 2624 -1
+10200 2624 38
+5713 2625 -1
+5728 2625 1
+5745 2625 1
+5769 2625 -1
+5785 2625 -1
+5789 2625 1
+6145 2625 -1
+6149 2625 -1
+6153 2625 -1
+6157 2625 -1
+6161 2625 -1
+6165 2625 -1
+6169 2625 -1
+6173 2625 -1
+6177 2625 -1
+6181 2625 -1
+6185 2625 -1
+6189 2625 -1
+6193 2625 -1
+6197 2625 -1
+6201 2625 -1
+6205 2625 -1
+6209 2625 -1
+6213 2625 -1
+6217 2625 -1
+6221 2625 -1
+6225 2625 -1
+6229 2625 -1
+6233 2625 -1
+6237 2625 -1
+6241 2625 -1
+6245 2625 -1
+6249 2625 -1
+6253 2625 -1
+6257 2625 -1
+6261 2625 -1
+6265 2625 -1
+6269 2625 -1
+10201 2625 38
+5714 2626 -1
+5725 2626 1
+5746 2626 1
+5770 2626 -1
+5786 2626 -1
+5790 2626 1
+6146 2626 -1
+6150 2626 -1
+6154 2626 -1
+6158 2626 -1
+6162 2626 -1
+6166 2626 -1
+6170 2626 -1
+6174 2626 -1
+6178 2626 -1
+6182 2626 -1
+6186 2626 -1
+6190 2626 -1
+6194 2626 -1
+6198 2626 -1
+6202 2626 -1
+6206 2626 -1
+6210 2626 -1
+6214 2626 -1
+6218 2626 -1
+6222 2626 -1
+6226 2626 -1
+6230 2626 -1
+6234 2626 -1
+6238 2626 -1
+6242 2626 -1
+6246 2626 -1
+6250 2626 -1
+6254 2626 -1
+6258 2626 -1
+6262 2626 -1
+6266 2626 -1
+6270 2626 -1
+10202 2626 38
+5715 2627 -1
+5726 2627 1
+5747 2627 1
+5771 2627 -1
+5787 2627 -1
+5791 2627 1
+6147 2627 -1
+6151 2627 -1
+6155 2627 -1
+6159 2627 -1
+6163 2627 -1
+6167 2627 -1
+6171 2627 -1
+6175 2627 -1
+6179 2627 -1
+6183 2627 -1
+6187 2627 -1
+6191 2627 -1
+6195 2627 -1
+6199 2627 -1
+6203 2627 -1
+6207 2627 -1
+6211 2627 -1
+6215 2627 -1
+6219 2627 -1
+6223 2627 -1
+6227 2627 -1
+6231 2627 -1
+6235 2627 -1
+6239 2627 -1
+6243 2627 -1
+6247 2627 -1
+6251 2627 -1
+6255 2627 -1
+6259 2627 -1
+6263 2627 -1
+6267 2627 -1
+6271 2627 -1
+10203 2627 38
+5716 2628 -1
+5727 2628 1
+5748 2628 1
+5772 2628 -1
+5788 2628 -1
+5792 2628 1
+6148 2628 -1
+6152 2628 -1
+6156 2628 -1
+6160 2628 -1
+6164 2628 -1
+6168 2628 -1
+6172 2628 -1
+6176 2628 -1
+6180 2628 -1
+6184 2628 -1
+6188 2628 -1
+6192 2628 -1
+6196 2628 -1
+6200 2628 -1
+6204 2628 -1
+6208 2628 -1
+6212 2628 -1
+6216 2628 -1
+6220 2628 -1
+6224 2628 -1
+6228 2628 -1
+6232 2628 -1
+6236 2628 -1
+6240 2628 -1
+6244 2628 -1
+6248 2628 -1
+6252 2628 -1
+6256 2628 -1
+6260 2628 -1
+6264 2628 -1
+6268 2628 -1
+6272 2628 -1
+10204 2628 38
+5717 2629 -1
+5724 2629 1
+5749 2629 1
+5773 2629 -1
+5785 2629 1
+5789 2629 -1
+6273 2629 -1
+6277 2629 -1
+6281 2629 -1
+6285 2629 -1
+6289 2629 -1
+6293 2629 -1
+6297 2629 -1
+6301 2629 -1
+6305 2629 -1
+6309 2629 -1
+6313 2629 -1
+6317 2629 -1
+6321 2629 -1
+6325 2629 -1
+6329 2629 -1
+6333 2629 -1
+6337 2629 -1
+6341 2629 -1
+6345 2629 -1
+6349 2629 -1
+6353 2629 -1
+6357 2629 -1
+6361 2629 -1
+6365 2629 -1
+6369 2629 -1
+6373 2629 -1
+6377 2629 -1
+6381 2629 -1
+6385 2629 -1
+6389 2629 -1
+6393 2629 -1
+6397 2629 -1
+10205 2629 38
+5718 2630 -1
+5721 2630 1
+5750 2630 1
+5774 2630 -1
+5786 2630 1
+5790 2630 -1
+6274 2630 -1
+6278 2630 -1
+6282 2630 -1
+6286 2630 -1
+6290 2630 -1
+6294 2630 -1
+6298 2630 -1
+6302 2630 -1
+6306 2630 -1
+6310 2630 -1
+6314 2630 -1
+6318 2630 -1
+6322 2630 -1
+6326 2630 -1
+6330 2630 -1
+6334 2630 -1
+6338 2630 -1
+6342 2630 -1
+6346 2630 -1
+6350 2630 -1
+6354 2630 -1
+6358 2630 -1
+6362 2630 -1
+6366 2630 -1
+6370 2630 -1
+6374 2630 -1
+6378 2630 -1
+6382 2630 -1
+6386 2630 -1
+6390 2630 -1
+6394 2630 -1
+6398 2630 -1
+10206 2630 38
+5719 2631 -1
+5722 2631 1
+5751 2631 1
+5775 2631 -1
+5787 2631 1
+5791 2631 -1
+6275 2631 -1
+6279 2631 -1
+6283 2631 -1
+6287 2631 -1
+6291 2631 -1
+6295 2631 -1
+6299 2631 -1
+6303 2631 -1
+6307 2631 -1
+6311 2631 -1
+6315 2631 -1
+6319 2631 -1
+6323 2631 -1
+6327 2631 -1
+6331 2631 -1
+6335 2631 -1
+6339 2631 -1
+6343 2631 -1
+6347 2631 -1
+6351 2631 -1
+6355 2631 -1
+6359 2631 -1
+6363 2631 -1
+6367 2631 -1
+6371 2631 -1
+6375 2631 -1
+6379 2631 -1
+6383 2631 -1
+6387 2631 -1
+6391 2631 -1
+6395 2631 -1
+6399 2631 -1
+10207 2631 38
+5720 2632 -1
+5723 2632 1
+5752 2632 1
+5776 2632 -1
+5788 2632 1
+5792 2632 -1
+6276 2632 -1
+6280 2632 -1
+6284 2632 -1
+6288 2632 -1
+6292 2632 -1
+6296 2632 -1
+6300 2632 -1
+6304 2632 -1
+6308 2632 -1
+6312 2632 -1
+6316 2632 -1
+6320 2632 -1
+6324 2632 -1
+6328 2632 -1
+6332 2632 -1
+6336 2632 -1
+6340 2632 -1
+6344 2632 -1
+6348 2632 -1
+6352 2632 -1
+6356 2632 -1
+6360 2632 -1
+6364 2632 -1
+6368 2632 -1
+6372 2632 -1
+6376 2632 -1
+6380 2632 -1
+6384 2632 -1
+6388 2632 -1
+6392 2632 -1
+6396 2632 -1
+6400 2632 -1
+10208 2632 38
+5721 2633 -1
+5736 2633 1
+5745 2633 -1
+5753 2633 1
+5793 2633 -1
+5797 2633 1
+6401 2633 -1
+6405 2633 -1
+6409 2633 -1
+6413 2633 -1
+6417 2633 -1
+6421 2633 -1
+6425 2633 -1
+6429 2633 -1
+6433 2633 -1
+6437 2633 -1
+6441 2633 -1
+6445 2633 -1
+6449 2633 -1
+6453 2633 -1
+6457 2633 -1
+6461 2633 -1
+6465 2633 -1
+6469 2633 -1
+6473 2633 -1
+6477 2633 -1
+6481 2633 -1
+6485 2633 -1
+6489 2633 -1
+6493 2633 -1
+6497 2633 -1
+6501 2633 -1
+6505 2633 -1
+6509 2633 -1
+6513 2633 -1
+6517 2633 -1
+6521 2633 -1
+6525 2633 -1
+10209 2633 38
+5722 2634 -1
+5733 2634 1
+5746 2634 -1
+5754 2634 1
+5794 2634 -1
+5798 2634 1
+6402 2634 -1
+6406 2634 -1
+6410 2634 -1
+6414 2634 -1
+6418 2634 -1
+6422 2634 -1
+6426 2634 -1
+6430 2634 -1
+6434 2634 -1
+6438 2634 -1
+6442 2634 -1
+6446 2634 -1
+6450 2634 -1
+6454 2634 -1
+6458 2634 -1
+6462 2634 -1
+6466 2634 -1
+6470 2634 -1
+6474 2634 -1
+6478 2634 -1
+6482 2634 -1
+6486 2634 -1
+6490 2634 -1
+6494 2634 -1
+6498 2634 -1
+6502 2634 -1
+6506 2634 -1
+6510 2634 -1
+6514 2634 -1
+6518 2634 -1
+6522 2634 -1
+6526 2634 -1
+10210 2634 38
+5723 2635 -1
+5734 2635 1
+5747 2635 -1
+5755 2635 1
+5795 2635 -1
+5799 2635 1
+6403 2635 -1
+6407 2635 -1
+6411 2635 -1
+6415 2635 -1
+6419 2635 -1
+6423 2635 -1
+6427 2635 -1
+6431 2635 -1
+6435 2635 -1
+6439 2635 -1
+6443 2635 -1
+6447 2635 -1
+6451 2635 -1
+6455 2635 -1
+6459 2635 -1
+6463 2635 -1
+6467 2635 -1
+6471 2635 -1
+6475 2635 -1
+6479 2635 -1
+6483 2635 -1
+6487 2635 -1
+6491 2635 -1
+6495 2635 -1
+6499 2635 -1
+6503 2635 -1
+6507 2635 -1
+6511 2635 -1
+6515 2635 -1
+6519 2635 -1
+6523 2635 -1
+6527 2635 -1
+10211 2635 38
+5724 2636 -1
+5735 2636 1
+5748 2636 -1
+5756 2636 1
+5796 2636 -1
+5800 2636 1
+6404 2636 -1
+6408 2636 -1
+6412 2636 -1
+6416 2636 -1
+6420 2636 -1
+6424 2636 -1
+6428 2636 -1
+6432 2636 -1
+6436 2636 -1
+6440 2636 -1
+6444 2636 -1
+6448 2636 -1
+6452 2636 -1
+6456 2636 -1
+6460 2636 -1
+6464 2636 -1
+6468 2636 -1
+6472 2636 -1
+6476 2636 -1
+6480 2636 -1
+6484 2636 -1
+6488 2636 -1
+6492 2636 -1
+6496 2636 -1
+6500 2636 -1
+6504 2636 -1
+6508 2636 -1
+6512 2636 -1
+6516 2636 -1
+6520 2636 -1
+6524 2636 -1
+6528 2636 -1
+10212 2636 38
+5725 2637 -1
+5732 2637 1
+5749 2637 -1
+5757 2637 1
+5793 2637 1
+5797 2637 -1
+6529 2637 -1
+6533 2637 -1
+6537 2637 -1
+6541 2637 -1
+6545 2637 -1
+6549 2637 -1
+6553 2637 -1
+6557 2637 -1
+6561 2637 -1
+6565 2637 -1
+6569 2637 -1
+6573 2637 -1
+6577 2637 -1
+6581 2637 -1
+6585 2637 -1
+6589 2637 -1
+6593 2637 -1
+6597 2637 -1
+6601 2637 -1
+6605 2637 -1
+6609 2637 -1
+6613 2637 -1
+6617 2637 -1
+6621 2637 -1
+6625 2637 -1
+6629 2637 -1
+6633 2637 -1
+6637 2637 -1
+6641 2637 -1
+6645 2637 -1
+6649 2637 -1
+6653 2637 -1
+10213 2637 38
+5726 2638 -1
+5729 2638 1
+5750 2638 -1
+5758 2638 1
+5794 2638 1
+5798 2638 -1
+6530 2638 -1
+6534 2638 -1
+6538 2638 -1
+6542 2638 -1
+6546 2638 -1
+6550 2638 -1
+6554 2638 -1
+6558 2638 -1
+6562 2638 -1
+6566 2638 -1
+6570 2638 -1
+6574 2638 -1
+6578 2638 -1
+6582 2638 -1
+6586 2638 -1
+6590 2638 -1
+6594 2638 -1
+6598 2638 -1
+6602 2638 -1
+6606 2638 -1
+6610 2638 -1
+6614 2638 -1
+6618 2638 -1
+6622 2638 -1
+6626 2638 -1
+6630 2638 -1
+6634 2638 -1
+6638 2638 -1
+6642 2638 -1
+6646 2638 -1
+6650 2638 -1
+6654 2638 -1
+10214 2638 38
+5727 2639 -1
+5730 2639 1
+5751 2639 -1
+5759 2639 1
+5795 2639 1
+5799 2639 -1
+6531 2639 -1
+6535 2639 -1
+6539 2639 -1
+6543 2639 -1
+6547 2639 -1
+6551 2639 -1
+6555 2639 -1
+6559 2639 -1
+6563 2639 -1
+6567 2639 -1
+6571 2639 -1
+6575 2639 -1
+6579 2639 -1
+6583 2639 -1
+6587 2639 -1
+6591 2639 -1
+6595 2639 -1
+6599 2639 -1
+6603 2639 -1
+6607 2639 -1
+6611 2639 -1
+6615 2639 -1
+6619 2639 -1
+6623 2639 -1
+6627 2639 -1
+6631 2639 -1
+6635 2639 -1
+6639 2639 -1
+6643 2639 -1
+6647 2639 -1
+6651 2639 -1
+6655 2639 -1
+10215 2639 38
+5728 2640 -1
+5731 2640 1
+5752 2640 -1
+5760 2640 1
+5796 2640 1
+5800 2640 -1
+6532 2640 -1
+6536 2640 -1
+6540 2640 -1
+6544 2640 -1
+6548 2640 -1
+6552 2640 -1
+6556 2640 -1
+6560 2640 -1
+6564 2640 -1
+6568 2640 -1
+6572 2640 -1
+6576 2640 -1
+6580 2640 -1
+6584 2640 -1
+6588 2640 -1
+6592 2640 -1
+6596 2640 -1
+6600 2640 -1
+6604 2640 -1
+6608 2640 -1
+6612 2640 -1
+6616 2640 -1
+6620 2640 -1
+6624 2640 -1
+6628 2640 -1
+6632 2640 -1
+6636 2640 -1
+6640 2640 -1
+6644 2640 -1
+6648 2640 -1
+6652 2640 -1
+6656 2640 -1
+10216 2640 38
+5729 2641 -1
+5744 2641 1
+5753 2641 -1
+5761 2641 1
+5801 2641 -1
+5805 2641 1
+6657 2641 -1
+6661 2641 -1
+6665 2641 -1
+6669 2641 -1
+6673 2641 -1
+6677 2641 -1
+6681 2641 -1
+6685 2641 -1
+6689 2641 -1
+6693 2641 -1
+6697 2641 -1
+6701 2641 -1
+6705 2641 -1
+6709 2641 -1
+6713 2641 -1
+6717 2641 -1
+6721 2641 -1
+6725 2641 -1
+6729 2641 -1
+6733 2641 -1
+6737 2641 -1
+6741 2641 -1
+6745 2641 -1
+6749 2641 -1
+6753 2641 -1
+6757 2641 -1
+6761 2641 -1
+6765 2641 -1
+6769 2641 -1
+6773 2641 -1
+6777 2641 -1
+6781 2641 -1
+10217 2641 38
+5730 2642 -1
+5741 2642 1
+5754 2642 -1
+5762 2642 1
+5802 2642 -1
+5806 2642 1
+6658 2642 -1
+6662 2642 -1
+6666 2642 -1
+6670 2642 -1
+6674 2642 -1
+6678 2642 -1
+6682 2642 -1
+6686 2642 -1
+6690 2642 -1
+6694 2642 -1
+6698 2642 -1
+6702 2642 -1
+6706 2642 -1
+6710 2642 -1
+6714 2642 -1
+6718 2642 -1
+6722 2642 -1
+6726 2642 -1
+6730 2642 -1
+6734 2642 -1
+6738 2642 -1
+6742 2642 -1
+6746 2642 -1
+6750 2642 -1
+6754 2642 -1
+6758 2642 -1
+6762 2642 -1
+6766 2642 -1
+6770 2642 -1
+6774 2642 -1
+6778 2642 -1
+6782 2642 -1
+10218 2642 38
+5731 2643 -1
+5742 2643 1
+5755 2643 -1
+5763 2643 1
+5803 2643 -1
+5807 2643 1
+6659 2643 -1
+6663 2643 -1
+6667 2643 -1
+6671 2643 -1
+6675 2643 -1
+6679 2643 -1
+6683 2643 -1
+6687 2643 -1
+6691 2643 -1
+6695 2643 -1
+6699 2643 -1
+6703 2643 -1
+6707 2643 -1
+6711 2643 -1
+6715 2643 -1
+6719 2643 -1
+6723 2643 -1
+6727 2643 -1
+6731 2643 -1
+6735 2643 -1
+6739 2643 -1
+6743 2643 -1
+6747 2643 -1
+6751 2643 -1
+6755 2643 -1
+6759 2643 -1
+6763 2643 -1
+6767 2643 -1
+6771 2643 -1
+6775 2643 -1
+6779 2643 -1
+6783 2643 -1
+10219 2643 38
+5732 2644 -1
+5743 2644 1
+5756 2644 -1
+5764 2644 1
+5804 2644 -1
+5808 2644 1
+6660 2644 -1
+6664 2644 -1
+6668 2644 -1
+6672 2644 -1
+6676 2644 -1
+6680 2644 -1
+6684 2644 -1
+6688 2644 -1
+6692 2644 -1
+6696 2644 -1
+6700 2644 -1
+6704 2644 -1
+6708 2644 -1
+6712 2644 -1
+6716 2644 -1
+6720 2644 -1
+6724 2644 -1
+6728 2644 -1
+6732 2644 -1
+6736 2644 -1
+6740 2644 -1
+6744 2644 -1
+6748 2644 -1
+6752 2644 -1
+6756 2644 -1
+6760 2644 -1
+6764 2644 -1
+6768 2644 -1
+6772 2644 -1
+6776 2644 -1
+6780 2644 -1
+6784 2644 -1
+10220 2644 38
+5733 2645 -1
+5740 2645 1
+5757 2645 -1
+5765 2645 1
+5801 2645 1
+5805 2645 -1
+6785 2645 -1
+6789 2645 -1
+6793 2645 -1
+6797 2645 -1
+6801 2645 -1
+6805 2645 -1
+6809 2645 -1
+6813 2645 -1
+6817 2645 -1
+6821 2645 -1
+6825 2645 -1
+6829 2645 -1
+6833 2645 -1
+6837 2645 -1
+6841 2645 -1
+6845 2645 -1
+6849 2645 -1
+6853 2645 -1
+6857 2645 -1
+6861 2645 -1
+6865 2645 -1
+6869 2645 -1
+6873 2645 -1
+6877 2645 -1
+6881 2645 -1
+6885 2645 -1
+6889 2645 -1
+6893 2645 -1
+6897 2645 -1
+6901 2645 -1
+6905 2645 -1
+6909 2645 -1
+10221 2645 38
+5734 2646 -1
+5737 2646 1
+5758 2646 -1
+5766 2646 1
+5802 2646 1
+5806 2646 -1
+6786 2646 -1
+6790 2646 -1
+6794 2646 -1
+6798 2646 -1
+6802 2646 -1
+6806 2646 -1
+6810 2646 -1
+6814 2646 -1
+6818 2646 -1
+6822 2646 -1
+6826 2646 -1
+6830 2646 -1
+6834 2646 -1
+6838 2646 -1
+6842 2646 -1
+6846 2646 -1
+6850 2646 -1
+6854 2646 -1
+6858 2646 -1
+6862 2646 -1
+6866 2646 -1
+6870 2646 -1
+6874 2646 -1
+6878 2646 -1
+6882 2646 -1
+6886 2646 -1
+6890 2646 -1
+6894 2646 -1
+6898 2646 -1
+6902 2646 -1
+6906 2646 -1
+6910 2646 -1
+10222 2646 38
+5735 2647 -1
+5738 2647 1
+5759 2647 -1
+5767 2647 1
+5803 2647 1
+5807 2647 -1
+6787 2647 -1
+6791 2647 -1
+6795 2647 -1
+6799 2647 -1
+6803 2647 -1
+6807 2647 -1
+6811 2647 -1
+6815 2647 -1
+6819 2647 -1
+6823 2647 -1
+6827 2647 -1
+6831 2647 -1
+6835 2647 -1
+6839 2647 -1
+6843 2647 -1
+6847 2647 -1
+6851 2647 -1
+6855 2647 -1
+6859 2647 -1
+6863 2647 -1
+6867 2647 -1
+6871 2647 -1
+6875 2647 -1
+6879 2647 -1
+6883 2647 -1
+6887 2647 -1
+6891 2647 -1
+6895 2647 -1
+6899 2647 -1
+6903 2647 -1
+6907 2647 -1
+6911 2647 -1
+10223 2647 38
+5736 2648 -1
+5739 2648 1
+5760 2648 -1
+5768 2648 1
+5804 2648 1
+5808 2648 -1
+6788 2648 -1
+6792 2648 -1
+6796 2648 -1
+6800 2648 -1
+6804 2648 -1
+6808 2648 -1
+6812 2648 -1
+6816 2648 -1
+6820 2648 -1
+6824 2648 -1
+6828 2648 -1
+6832 2648 -1
+6836 2648 -1
+6840 2648 -1
+6844 2648 -1
+6848 2648 -1
+6852 2648 -1
+6856 2648 -1
+6860 2648 -1
+6864 2648 -1
+6868 2648 -1
+6872 2648 -1
+6876 2648 -1
+6880 2648 -1
+6884 2648 -1
+6888 2648 -1
+6892 2648 -1
+6896 2648 -1
+6900 2648 -1
+6904 2648 -1
+6908 2648 -1
+6912 2648 -1
+10224 2648 38
+5720 2649 1
+5737 2649 -1
+5761 2649 -1
+5769 2649 1
+5809 2649 -1
+5813 2649 1
+6913 2649 -1
+6917 2649 -1
+6921 2649 -1
+6925 2649 -1
+6929 2649 -1
+6933 2649 -1
+6937 2649 -1
+6941 2649 -1
+6945 2649 -1
+6949 2649 -1
+6953 2649 -1
+6957 2649 -1
+6961 2649 -1
+6965 2649 -1
+6969 2649 -1
+6973 2649 -1
+6977 2649 -1
+6981 2649 -1
+6985 2649 -1
+6989 2649 -1
+6993 2649 -1
+6997 2649 -1
+7001 2649 -1
+7005 2649 -1
+7009 2649 -1
+7013 2649 -1
+7017 2649 -1
+7021 2649 -1
+7025 2649 -1
+7029 2649 -1
+7033 2649 -1
+7037 2649 -1
+10225 2649 38
+5717 2650 1
+5738 2650 -1
+5762 2650 -1
+5770 2650 1
+5810 2650 -1
+5814 2650 1
+6914 2650 -1
+6918 2650 -1
+6922 2650 -1
+6926 2650 -1
+6930 2650 -1
+6934 2650 -1
+6938 2650 -1
+6942 2650 -1
+6946 2650 -1
+6950 2650 -1
+6954 2650 -1
+6958 2650 -1
+6962 2650 -1
+6966 2650 -1
+6970 2650 -1
+6974 2650 -1
+6978 2650 -1
+6982 2650 -1
+6986 2650 -1
+6990 2650 -1
+6994 2650 -1
+6998 2650 -1
+7002 2650 -1
+7006 2650 -1
+7010 2650 -1
+7014 2650 -1
+7018 2650 -1
+7022 2650 -1
+7026 2650 -1
+7030 2650 -1
+7034 2650 -1
+7038 2650 -1
+10226 2650 38
+5718 2651 1
+5739 2651 -1
+5763 2651 -1
+5771 2651 1
+5811 2651 -1
+5815 2651 1
+6915 2651 -1
+6919 2651 -1
+6923 2651 -1
+6927 2651 -1
+6931 2651 -1
+6935 2651 -1
+6939 2651 -1
+6943 2651 -1
+6947 2651 -1
+6951 2651 -1
+6955 2651 -1
+6959 2651 -1
+6963 2651 -1
+6967 2651 -1
+6971 2651 -1
+6975 2651 -1
+6979 2651 -1
+6983 2651 -1
+6987 2651 -1
+6991 2651 -1
+6995 2651 -1
+6999 2651 -1
+7003 2651 -1
+7007 2651 -1
+7011 2651 -1
+7015 2651 -1
+7019 2651 -1
+7023 2651 -1
+7027 2651 -1
+7031 2651 -1
+7035 2651 -1
+7039 2651 -1
+10227 2651 38
+5719 2652 1
+5740 2652 -1
+5764 2652 -1
+5772 2652 1
+5812 2652 -1
+5816 2652 1
+6916 2652 -1
+6920 2652 -1
+6924 2652 -1
+6928 2652 -1
+6932 2652 -1
+6936 2652 -1
+6940 2652 -1
+6944 2652 -1
+6948 2652 -1
+6952 2652 -1
+6956 2652 -1
+6960 2652 -1
+6964 2652 -1
+6968 2652 -1
+6972 2652 -1
+6976 2652 -1
+6980 2652 -1
+6984 2652 -1
+6988 2652 -1
+6992 2652 -1
+6996 2652 -1
+7000 2652 -1
+7004 2652 -1
+7008 2652 -1
+7012 2652 -1
+7016 2652 -1
+7020 2652 -1
+7024 2652 -1
+7028 2652 -1
+7032 2652 -1
+7036 2652 -1
+7040 2652 -1
+10228 2652 38
+5716 2653 1
+5741 2653 -1
+5765 2653 -1
+5773 2653 1
+5809 2653 1
+5813 2653 -1
+7041 2653 -1
+7045 2653 -1
+7049 2653 -1
+7053 2653 -1
+7057 2653 -1
+7061 2653 -1
+7065 2653 -1
+7069 2653 -1
+7073 2653 -1
+7077 2653 -1
+7081 2653 -1
+7085 2653 -1
+7089 2653 -1
+7093 2653 -1
+7097 2653 -1
+7101 2653 -1
+7105 2653 -1
+7109 2653 -1
+7113 2653 -1
+7117 2653 -1
+7121 2653 -1
+7125 2653 -1
+7129 2653 -1
+7133 2653 -1
+7137 2653 -1
+7141 2653 -1
+7145 2653 -1
+7149 2653 -1
+7153 2653 -1
+7157 2653 -1
+7161 2653 -1
+7165 2653 -1
+10229 2653 38
+5713 2654 1
+5742 2654 -1
+5766 2654 -1
+5774 2654 1
+5810 2654 1
+5814 2654 -1
+7042 2654 -1
+7046 2654 -1
+7050 2654 -1
+7054 2654 -1
+7058 2654 -1
+7062 2654 -1
+7066 2654 -1
+7070 2654 -1
+7074 2654 -1
+7078 2654 -1
+7082 2654 -1
+7086 2654 -1
+7090 2654 -1
+7094 2654 -1
+7098 2654 -1
+7102 2654 -1
+7106 2654 -1
+7110 2654 -1
+7114 2654 -1
+7118 2654 -1
+7122 2654 -1
+7126 2654 -1
+7130 2654 -1
+7134 2654 -1
+7138 2654 -1
+7142 2654 -1
+7146 2654 -1
+7150 2654 -1
+7154 2654 -1
+7158 2654 -1
+7162 2654 -1
+7166 2654 -1
+10230 2654 38
+5714 2655 1
+5743 2655 -1
+5767 2655 -1
+5775 2655 1
+5811 2655 1
+5815 2655 -1
+7043 2655 -1
+7047 2655 -1
+7051 2655 -1
+7055 2655 -1
+7059 2655 -1
+7063 2655 -1
+7067 2655 -1
+7071 2655 -1
+7075 2655 -1
+7079 2655 -1
+7083 2655 -1
+7087 2655 -1
+7091 2655 -1
+7095 2655 -1
+7099 2655 -1
+7103 2655 -1
+7107 2655 -1
+7111 2655 -1
+7115 2655 -1
+7119 2655 -1
+7123 2655 -1
+7127 2655 -1
+7131 2655 -1
+7135 2655 -1
+7139 2655 -1
+7143 2655 -1
+7147 2655 -1
+7151 2655 -1
+7155 2655 -1
+7159 2655 -1
+7163 2655 -1
+7167 2655 -1
+10231 2655 38
+5715 2656 1
+5744 2656 -1
+5768 2656 -1
+5776 2656 1
+5812 2656 1
+5816 2656 -1
+7044 2656 -1
+7048 2656 -1
+7052 2656 -1
+7056 2656 -1
+7060 2656 -1
+7064 2656 -1
+7068 2656 -1
+7072 2656 -1
+7076 2656 -1
+7080 2656 -1
+7084 2656 -1
+7088 2656 -1
+7092 2656 -1
+7096 2656 -1
+7100 2656 -1
+7104 2656 -1
+7108 2656 -1
+7112 2656 -1
+7116 2656 -1
+7120 2656 -1
+7124 2656 -1
+7128 2656 -1
+7132 2656 -1
+7136 2656 -1
+7140 2656 -1
+7144 2656 -1
+7148 2656 -1
+7152 2656 -1
+7156 2656 -1
+7160 2656 -1
+7164 2656 -1
+7168 2656 -1
+10232 2656 38
+5745 2657 1
+5760 2657 1
+5763 2657 1
+5774 2657 1
+5817 2657 -1
+5821 2657 1
+7169 2657 -1
+7173 2657 -1
+7177 2657 -1
+7181 2657 -1
+10233 2657 38
+5746 2658 1
+5757 2658 1
+5764 2658 1
+5775 2658 1
+5818 2658 -1
+5822 2658 1
+7170 2658 -1
+7174 2658 -1
+7178 2658 -1
+7182 2658 -1
+10234 2658 38
+5747 2659 1
+5758 2659 1
+5761 2659 1
+5776 2659 1
+5819 2659 -1
+5823 2659 1
+7171 2659 -1
+7175 2659 -1
+7179 2659 -1
+7183 2659 -1
+10235 2659 38
+5748 2660 1
+5759 2660 1
+5762 2660 1
+5773 2660 1
+5820 2660 -1
+5824 2660 1
+7172 2660 -1
+7176 2660 -1
+7180 2660 -1
+7184 2660 -1
+10236 2660 38
+5749 2661 1
+5756 2661 1
+5767 2661 1
+5770 2661 1
+5817 2661 1
+5821 2661 -1
+7185 2661 -1
+7189 2661 -1
+7193 2661 -1
+7197 2661 -1
+10237 2661 38
+5750 2662 1
+5753 2662 1
+5768 2662 1
+5771 2662 1
+5818 2662 1
+5822 2662 -1
+7186 2662 -1
+7190 2662 -1
+7194 2662 -1
+7198 2662 -1
+10238 2662 38
+5751 2663 1
+5754 2663 1
+5765 2663 1
+5772 2663 1
+5819 2663 1
+5823 2663 -1
+7187 2663 -1
+7191 2663 -1
+7195 2663 -1
+7199 2663 -1
+10239 2663 38
+5752 2664 1
+5755 2664 1
+5766 2664 1
+5769 2664 1
+5820 2664 1
+5824 2664 -1
+7188 2664 -1
+7192 2664 -1
+7196 2664 -1
+7200 2664 -1
+10240 2664 38
+5777 2665 -1
+5784 2665 1
+5785 2665 -1
+5793 2665 -1
+5801 2665 -1
+5809 2665 -1
+7201 2665 -1
+7205 2665 -1
+7209 2665 -1
+7213 2665 -1
+7217 2665 -1
+7221 2665 -1
+7225 2665 -1
+7229 2665 -1
+10241 2665 38
+5778 2666 -1
+5781 2666 1
+5786 2666 -1
+5794 2666 -1
+5802 2666 -1
+5810 2666 -1
+7202 2666 -1
+7206 2666 -1
+7210 2666 -1
+7214 2666 -1
+7218 2666 -1
+7222 2666 -1
+7226 2666 -1
+7230 2666 -1
+10242 2666 38
+5779 2667 -1
+5782 2667 1
+5787 2667 -1
+5795 2667 -1
+5803 2667 -1
+5811 2667 -1
+7203 2667 -1
+7207 2667 -1
+7211 2667 -1
+7215 2667 -1
+7219 2667 -1
+7223 2667 -1
+7227 2667 -1
+7231 2667 -1
+10243 2667 38
+5780 2668 -1
+5783 2668 1
+5788 2668 -1
+5796 2668 -1
+5804 2668 -1
+5812 2668 -1
+7204 2668 -1
+7208 2668 -1
+7212 2668 -1
+7216 2668 -1
+7220 2668 -1
+7224 2668 -1
+7228 2668 -1
+7232 2668 -1
+10244 2668 38
+5780 2669 1
+5781 2669 -1
+5789 2669 -1
+5797 2669 -1
+5805 2669 -1
+5813 2669 -1
+7233 2669 -1
+7237 2669 -1
+7241 2669 -1
+7245 2669 -1
+7249 2669 -1
+7253 2669 -1
+7257 2669 -1
+7261 2669 -1
+10245 2669 38
+5777 2670 1
+5782 2670 -1
+5790 2670 -1
+5798 2670 -1
+5806 2670 -1
+5814 2670 -1
+7234 2670 -1
+7238 2670 -1
+7242 2670 -1
+7246 2670 -1
+7250 2670 -1
+7254 2670 -1
+7258 2670 -1
+7262 2670 -1
+10246 2670 38
+5778 2671 1
+5783 2671 -1
+5791 2671 -1
+5799 2671 -1
+5807 2671 -1
+5815 2671 -1
+7235 2671 -1
+7239 2671 -1
+7243 2671 -1
+7247 2671 -1
+7251 2671 -1
+7255 2671 -1
+7259 2671 -1
+7263 2671 -1
+10247 2671 38
+5779 2672 1
+5784 2672 -1
+5792 2672 -1
+5800 2672 -1
+5808 2672 -1
+5816 2672 -1
+7236 2672 -1
+7240 2672 -1
+7244 2672 -1
+7248 2672 -1
+7252 2672 -1
+7256 2672 -1
+7260 2672 -1
+7264 2672 -1
+10248 2672 38
+5785 2673 1
+5800 2673 1
+5803 2673 1
+5814 2673 1
+5817 2673 -1
+5824 2673 1
+7265 2673 -1
+7269 2673 -1
+7273 2673 -1
+7277 2673 -1
+10249 2673 38
+5786 2674 1
+5797 2674 1
+5804 2674 1
+5815 2674 1
+5818 2674 -1
+5821 2674 1
+7266 2674 -1
+7270 2674 -1
+7274 2674 -1
+7278 2674 -1
+10250 2674 38
+5787 2675 1
+5798 2675 1
+5801 2675 1
+5816 2675 1
+5819 2675 -1
+5822 2675 1
+7267 2675 -1
+7271 2675 -1
+7275 2675 -1
+7279 2675 -1
+10251 2675 38
+5788 2676 1
+5799 2676 1
+5802 2676 1
+5813 2676 1
+5820 2676 -1
+5823 2676 1
+7268 2676 -1
+7272 2676 -1
+7276 2676 -1
+7280 2676 -1
+10252 2676 38
+5789 2677 1
+5796 2677 1
+5807 2677 1
+5810 2677 1
+5820 2677 1
+5821 2677 -1
+7281 2677 -1
+7285 2677 -1
+7289 2677 -1
+7293 2677 -1
+10253 2677 38
+5790 2678 1
+5793 2678 1
+5808 2678 1
+5811 2678 1
+5817 2678 1
+5822 2678 -1
+7282 2678 -1
+7286 2678 -1
+7290 2678 -1
+7294 2678 -1
+10254 2678 38
+5791 2679 1
+5794 2679 1
+5805 2679 1
+5812 2679 1
+5818 2679 1
+5823 2679 -1
+7283 2679 -1
+7287 2679 -1
+7291 2679 -1
+7295 2679 -1
+10255 2679 38
+5792 2680 1
+5795 2680 1
+5806 2680 1
+5809 2680 1
+5819 2680 1
+5824 2680 -1
+7284 2680 -1
+7288 2680 -1
+7292 2680 -1
+7296 2680 -1
+10256 2680 38
+5825 2681 1
+5857 2681 1
+5889 2681 1
+5921 2681 1
+6081 2681 1
+6113 2681 1
+7297 2681 -1
+7325 2681 1
+10257 2681 38
+5826 2682 1
+5858 2682 1
+5890 2682 1
+5922 2682 1
+6082 2682 1
+6114 2682 1
+7298 2682 -1
+7326 2682 1
+10258 2682 38
+5827 2683 1
+5859 2683 1
+5891 2683 1
+5923 2683 1
+6083 2683 1
+6115 2683 1
+7299 2683 -1
+7327 2683 1
+10259 2683 38
+5828 2684 1
+5860 2684 1
+5892 2684 1
+5924 2684 1
+6084 2684 1
+6116 2684 1
+7300 2684 -1
+7328 2684 1
+10260 2684 38
+5829 2685 1
+5861 2685 1
+5893 2685 1
+5925 2685 1
+6085 2685 1
+6117 2685 1
+7297 2685 1
+7301 2685 -1
+10261 2685 38
+5830 2686 1
+5862 2686 1
+5894 2686 1
+5926 2686 1
+6086 2686 1
+6118 2686 1
+7298 2686 1
+7302 2686 -1
+10262 2686 38
+5831 2687 1
+5863 2687 1
+5895 2687 1
+5927 2687 1
+6087 2687 1
+6119 2687 1
+7299 2687 1
+7303 2687 -1
+10263 2687 38
+5832 2688 1
+5864 2688 1
+5896 2688 1
+5928 2688 1
+6088 2688 1
+6120 2688 1
+7300 2688 1
+7304 2688 -1
+10264 2688 38
+5833 2689 1
+5865 2689 1
+5897 2689 1
+5929 2689 1
+6089 2689 1
+6121 2689 1
+7301 2689 1
+7305 2689 -1
+10265 2689 38
+5834 2690 1
+5866 2690 1
+5898 2690 1
+5930 2690 1
+6090 2690 1
+6122 2690 1
+7302 2690 1
+7306 2690 -1
+10266 2690 38
+5835 2691 1
+5867 2691 1
+5899 2691 1
+5931 2691 1
+6091 2691 1
+6123 2691 1
+7303 2691 1
+7307 2691 -1
+10267 2691 38
+5836 2692 1
+5868 2692 1
+5900 2692 1
+5932 2692 1
+6092 2692 1
+6124 2692 1
+7304 2692 1
+7308 2692 -1
+10268 2692 38
+5837 2693 1
+5869 2693 1
+5901 2693 1
+5933 2693 1
+6093 2693 1
+6125 2693 1
+7305 2693 1
+7309 2693 -1
+10269 2693 38
+5838 2694 1
+5870 2694 1
+5902 2694 1
+5934 2694 1
+6094 2694 1
+6126 2694 1
+7306 2694 1
+7310 2694 -1
+10270 2694 38
+5839 2695 1
+5871 2695 1
+5903 2695 1
+5935 2695 1
+6095 2695 1
+6127 2695 1
+7307 2695 1
+7311 2695 -1
+10271 2695 38
+5840 2696 1
+5872 2696 1
+5904 2696 1
+5936 2696 1
+6096 2696 1
+6128 2696 1
+7308 2696 1
+7312 2696 -1
+10272 2696 38
+5841 2697 1
+5873 2697 1
+5905 2697 1
+5937 2697 1
+6097 2697 1
+6129 2697 1
+7309 2697 1
+7313 2697 -1
+10273 2697 38
+5842 2698 1
+5874 2698 1
+5906 2698 1
+5938 2698 1
+6098 2698 1
+6130 2698 1
+7310 2698 1
+7314 2698 -1
+10274 2698 38
+5843 2699 1
+5875 2699 1
+5907 2699 1
+5939 2699 1
+6099 2699 1
+6131 2699 1
+7311 2699 1
+7315 2699 -1
+10275 2699 38
+5844 2700 1
+5876 2700 1
+5908 2700 1
+5940 2700 1
+6100 2700 1
+6132 2700 1
+7312 2700 1
+7316 2700 -1
+10276 2700 38
+5845 2701 1
+5877 2701 1
+5909 2701 1
+5941 2701 1
+6101 2701 1
+6133 2701 1
+7313 2701 1
+7317 2701 -1
+10277 2701 38
+5846 2702 1
+5878 2702 1
+5910 2702 1
+5942 2702 1
+6102 2702 1
+6134 2702 1
+7314 2702 1
+7318 2702 -1
+10278 2702 38
+5847 2703 1
+5879 2703 1
+5911 2703 1
+5943 2703 1
+6103 2703 1
+6135 2703 1
+7315 2703 1
+7319 2703 -1
+10279 2703 38
+5848 2704 1
+5880 2704 1
+5912 2704 1
+5944 2704 1
+6104 2704 1
+6136 2704 1
+7316 2704 1
+7320 2704 -1
+10280 2704 38
+5849 2705 1
+5881 2705 1
+5913 2705 1
+5945 2705 1
+6105 2705 1
+6137 2705 1
+7317 2705 1
+7321 2705 -1
+10281 2705 38
+5850 2706 1
+5882 2706 1
+5914 2706 1
+5946 2706 1
+6106 2706 1
+6138 2706 1
+7318 2706 1
+7322 2706 -1
+10282 2706 38
+5851 2707 1
+5883 2707 1
+5915 2707 1
+5947 2707 1
+6107 2707 1
+6139 2707 1
+7319 2707 1
+7323 2707 -1
+10283 2707 38
+5852 2708 1
+5884 2708 1
+5916 2708 1
+5948 2708 1
+6108 2708 1
+6140 2708 1
+7320 2708 1
+7324 2708 -1
+10284 2708 38
+5853 2709 1
+5885 2709 1
+5917 2709 1
+5949 2709 1
+6109 2709 1
+6141 2709 1
+7321 2709 1
+7325 2709 -1
+10285 2709 38
+5854 2710 1
+5886 2710 1
+5918 2710 1
+5950 2710 1
+6110 2710 1
+6142 2710 1
+7322 2710 1
+7326 2710 -1
+10286 2710 38
+5855 2711 1
+5887 2711 1
+5919 2711 1
+5951 2711 1
+6111 2711 1
+6143 2711 1
+7323 2711 1
+7327 2711 -1
+10287 2711 38
+5856 2712 1
+5888 2712 1
+5920 2712 1
+5952 2712 1
+6112 2712 1
+6144 2712 1
+7324 2712 1
+7328 2712 -1
+10288 2712 38
+5825 2713 -1
+5880 2713 1
+5953 2713 1
+6049 2713 -1
+6145 2713 1
+6149 2713 1
+6209 2713 1
+6213 2713 1
+6273 2713 1
+6277 2713 1
+6337 2713 1
+6341 2713 1
+7329 2713 -1
+7357 2713 1
+10289 2713 38
+5826 2714 -1
+5877 2714 1
+5954 2714 1
+6050 2714 -1
+6146 2714 1
+6150 2714 1
+6210 2714 1
+6214 2714 1
+6274 2714 1
+6278 2714 1
+6338 2714 1
+6342 2714 1
+7330 2714 -1
+7358 2714 1
+10290 2714 38
+5827 2715 -1
+5878 2715 1
+5955 2715 1
+6051 2715 -1
+6147 2715 1
+6151 2715 1
+6211 2715 1
+6215 2715 1
+6275 2715 1
+6279 2715 1
+6339 2715 1
+6343 2715 1
+7331 2715 -1
+7359 2715 1
+10291 2715 38
+5828 2716 -1
+5879 2716 1
+5956 2716 1
+6052 2716 -1
+6148 2716 1
+6152 2716 1
+6212 2716 1
+6216 2716 1
+6276 2716 1
+6280 2716 1
+6340 2716 1
+6344 2716 1
+7332 2716 -1
+7360 2716 1
+10292 2716 38
+5829 2717 -1
+5884 2717 1
+5957 2717 1
+6053 2717 -1
+6153 2717 1
+6157 2717 1
+6217 2717 1
+6221 2717 1
+6281 2717 1
+6285 2717 1
+6345 2717 1
+6349 2717 1
+7329 2717 1
+7333 2717 -1
+10293 2717 38
+5830 2718 -1
+5881 2718 1
+5958 2718 1
+6054 2718 -1
+6154 2718 1
+6158 2718 1
+6218 2718 1
+6222 2718 1
+6282 2718 1
+6286 2718 1
+6346 2718 1
+6350 2718 1
+7330 2718 1
+7334 2718 -1
+10294 2718 38
+5831 2719 -1
+5882 2719 1
+5959 2719 1
+6055 2719 -1
+6155 2719 1
+6159 2719 1
+6219 2719 1
+6223 2719 1
+6283 2719 1
+6287 2719 1
+6347 2719 1
+6351 2719 1
+7331 2719 1
+7335 2719 -1
+10295 2719 38
+5832 2720 -1
+5883 2720 1
+5960 2720 1
+6056 2720 -1
+6156 2720 1
+6160 2720 1
+6220 2720 1
+6224 2720 1
+6284 2720 1
+6288 2720 1
+6348 2720 1
+6352 2720 1
+7332 2720 1
+7336 2720 -1
+10296 2720 38
+5833 2721 -1
+5888 2721 1
+5961 2721 1
+6057 2721 -1
+6161 2721 1
+6165 2721 1
+6225 2721 1
+6229 2721 1
+6289 2721 1
+6293 2721 1
+6353 2721 1
+6357 2721 1
+7333 2721 1
+7337 2721 -1
+10297 2721 38
+5834 2722 -1
+5885 2722 1
+5962 2722 1
+6058 2722 -1
+6162 2722 1
+6166 2722 1
+6226 2722 1
+6230 2722 1
+6290 2722 1
+6294 2722 1
+6354 2722 1
+6358 2722 1
+7334 2722 1
+7338 2722 -1
+10298 2722 38
+5835 2723 -1
+5886 2723 1
+5963 2723 1
+6059 2723 -1
+6163 2723 1
+6167 2723 1
+6227 2723 1
+6231 2723 1
+6291 2723 1
+6295 2723 1
+6355 2723 1
+6359 2723 1
+7335 2723 1
+7339 2723 -1
+10299 2723 38
+5836 2724 -1
+5887 2724 1
+5964 2724 1
+6060 2724 -1
+6164 2724 1
+6168 2724 1
+6228 2724 1
+6232 2724 1
+6292 2724 1
+6296 2724 1
+6356 2724 1
+6360 2724 1
+7336 2724 1
+7340 2724 -1
+10300 2724 38
+5837 2725 -1
+5860 2725 1
+5965 2725 1
+6061 2725 -1
+6169 2725 1
+6173 2725 1
+6233 2725 1
+6237 2725 1
+6297 2725 1
+6301 2725 1
+6361 2725 1
+6365 2725 1
+7337 2725 1
+7341 2725 -1
+10301 2725 38
+5838 2726 -1
+5857 2726 1
+5966 2726 1
+6062 2726 -1
+6170 2726 1
+6174 2726 1
+6234 2726 1
+6238 2726 1
+6298 2726 1
+6302 2726 1
+6362 2726 1
+6366 2726 1
+7338 2726 1
+7342 2726 -1
+10302 2726 38
+5839 2727 -1
+5858 2727 1
+5967 2727 1
+6063 2727 -1
+6171 2727 1
+6175 2727 1
+6235 2727 1
+6239 2727 1
+6299 2727 1
+6303 2727 1
+6363 2727 1
+6367 2727 1
+7339 2727 1
+7343 2727 -1
+10303 2727 38
+5840 2728 -1
+5859 2728 1
+5968 2728 1
+6064 2728 -1
+6172 2728 1
+6176 2728 1
+6236 2728 1
+6240 2728 1
+6300 2728 1
+6304 2728 1
+6364 2728 1
+6368 2728 1
+7340 2728 1
+7344 2728 -1
+10304 2728 38
+5841 2729 -1
+5864 2729 1
+5969 2729 1
+6065 2729 -1
+6177 2729 1
+6181 2729 1
+6241 2729 1
+6245 2729 1
+6305 2729 1
+6309 2729 1
+6369 2729 1
+6373 2729 1
+7341 2729 1
+7345 2729 -1
+10305 2729 38
+5842 2730 -1
+5861 2730 1
+5970 2730 1
+6066 2730 -1
+6178 2730 1
+6182 2730 1
+6242 2730 1
+6246 2730 1
+6306 2730 1
+6310 2730 1
+6370 2730 1
+6374 2730 1
+7342 2730 1
+7346 2730 -1
+10306 2730 38
+5843 2731 -1
+5862 2731 1
+5971 2731 1
+6067 2731 -1
+6179 2731 1
+6183 2731 1
+6243 2731 1
+6247 2731 1
+6307 2731 1
+6311 2731 1
+6371 2731 1
+6375 2731 1
+7343 2731 1
+7347 2731 -1
+10307 2731 38
+5844 2732 -1
+5863 2732 1
+5972 2732 1
+6068 2732 -1
+6180 2732 1
+6184 2732 1
+6244 2732 1
+6248 2732 1
+6308 2732 1
+6312 2732 1
+6372 2732 1
+6376 2732 1
+7344 2732 1
+7348 2732 -1
+10308 2732 38
+5845 2733 -1
+5868 2733 1
+5973 2733 1
+6069 2733 -1
+6185 2733 1
+6189 2733 1
+6249 2733 1
+6253 2733 1
+6313 2733 1
+6317 2733 1
+6377 2733 1
+6381 2733 1
+7345 2733 1
+7349 2733 -1
+10309 2733 38
+5846 2734 -1
+5865 2734 1
+5974 2734 1
+6070 2734 -1
+6186 2734 1
+6190 2734 1
+6250 2734 1
+6254 2734 1
+6314 2734 1
+6318 2734 1
+6378 2734 1
+6382 2734 1
+7346 2734 1
+7350 2734 -1
+10310 2734 38
+5847 2735 -1
+5866 2735 1
+5975 2735 1
+6071 2735 -1
+6187 2735 1
+6191 2735 1
+6251 2735 1
+6255 2735 1
+6315 2735 1
+6319 2735 1
+6379 2735 1
+6383 2735 1
+7347 2735 1
+7351 2735 -1
+10311 2735 38
+5848 2736 -1
+5867 2736 1
+5976 2736 1
+6072 2736 -1
+6188 2736 1
+6192 2736 1
+6252 2736 1
+6256 2736 1
+6316 2736 1
+6320 2736 1
+6380 2736 1
+6384 2736 1
+7348 2736 1
+7352 2736 -1
+10312 2736 38
+5849 2737 -1
+5872 2737 1
+5977 2737 1
+6073 2737 -1
+6193 2737 1
+6197 2737 1
+6257 2737 1
+6261 2737 1
+6321 2737 1
+6325 2737 1
+6385 2737 1
+6389 2737 1
+7349 2737 1
+7353 2737 -1
+10313 2737 38
+5850 2738 -1
+5869 2738 1
+5978 2738 1
+6074 2738 -1
+6194 2738 1
+6198 2738 1
+6258 2738 1
+6262 2738 1
+6322 2738 1
+6326 2738 1
+6386 2738 1
+6390 2738 1
+7350 2738 1
+7354 2738 -1
+10314 2738 38
+5851 2739 -1
+5870 2739 1
+5979 2739 1
+6075 2739 -1
+6195 2739 1
+6199 2739 1
+6259 2739 1
+6263 2739 1
+6323 2739 1
+6327 2739 1
+6387 2739 1
+6391 2739 1
+7351 2739 1
+7355 2739 -1
+10315 2739 38
+5852 2740 -1
+5871 2740 1
+5980 2740 1
+6076 2740 -1
+6196 2740 1
+6200 2740 1
+6260 2740 1
+6264 2740 1
+6324 2740 1
+6328 2740 1
+6388 2740 1
+6392 2740 1
+7352 2740 1
+7356 2740 -1
+10316 2740 38
+5853 2741 -1
+5876 2741 1
+5981 2741 1
+6077 2741 -1
+6201 2741 1
+6205 2741 1
+6265 2741 1
+6269 2741 1
+6329 2741 1
+6333 2741 1
+6393 2741 1
+6397 2741 1
+7353 2741 1
+7357 2741 -1
+10317 2741 38
+5854 2742 -1
+5873 2742 1
+5982 2742 1
+6078 2742 -1
+6202 2742 1
+6206 2742 1
+6266 2742 1
+6270 2742 1
+6330 2742 1
+6334 2742 1
+6394 2742 1
+6398 2742 1
+7354 2742 1
+7358 2742 -1
+10318 2742 38
+5855 2743 -1
+5874 2743 1
+5983 2743 1
+6079 2743 -1
+6203 2743 1
+6207 2743 1
+6267 2743 1
+6271 2743 1
+6331 2743 1
+6335 2743 1
+6395 2743 1
+6399 2743 1
+7355 2743 1
+7359 2743 -1
+10319 2743 38
+5856 2744 -1
+5875 2744 1
+5984 2744 1
+6080 2744 -1
+6204 2744 1
+6208 2744 1
+6268 2744 1
+6272 2744 1
+6332 2744 1
+6336 2744 1
+6396 2744 1
+6400 2744 1
+7356 2744 1
+7360 2744 -1
+10320 2744 38
+5857 2745 -1
+5912 2745 1
+5953 2745 -1
+5985 2745 1
+6401 2745 1
+6405 2745 1
+6465 2745 1
+6469 2745 1
+6529 2745 1
+6533 2745 1
+6593 2745 1
+6597 2745 1
+7361 2745 -1
+7389 2745 1
+10321 2745 38
+5858 2746 -1
+5909 2746 1
+5954 2746 -1
+5986 2746 1
+6402 2746 1
+6406 2746 1
+6466 2746 1
+6470 2746 1
+6530 2746 1
+6534 2746 1
+6594 2746 1
+6598 2746 1
+7362 2746 -1
+7390 2746 1
+10322 2746 38
+5859 2747 -1
+5910 2747 1
+5955 2747 -1
+5987 2747 1
+6403 2747 1
+6407 2747 1
+6467 2747 1
+6471 2747 1
+6531 2747 1
+6535 2747 1
+6595 2747 1
+6599 2747 1
+7363 2747 -1
+7391 2747 1
+10323 2747 38
+5860 2748 -1
+5911 2748 1
+5956 2748 -1
+5988 2748 1
+6404 2748 1
+6408 2748 1
+6468 2748 1
+6472 2748 1
+6532 2748 1
+6536 2748 1
+6596 2748 1
+6600 2748 1
+7364 2748 -1
+7392 2748 1
+10324 2748 38
+5861 2749 -1
+5916 2749 1
+5957 2749 -1
+5989 2749 1
+6409 2749 1
+6413 2749 1
+6473 2749 1
+6477 2749 1
+6537 2749 1
+6541 2749 1
+6601 2749 1
+6605 2749 1
+7361 2749 1
+7365 2749 -1
+10325 2749 38
+5862 2750 -1
+5913 2750 1
+5958 2750 -1
+5990 2750 1
+6410 2750 1
+6414 2750 1
+6474 2750 1
+6478 2750 1
+6538 2750 1
+6542 2750 1
+6602 2750 1
+6606 2750 1
+7362 2750 1
+7366 2750 -1
+10326 2750 38
+5863 2751 -1
+5914 2751 1
+5959 2751 -1
+5991 2751 1
+6411 2751 1
+6415 2751 1
+6475 2751 1
+6479 2751 1
+6539 2751 1
+6543 2751 1
+6603 2751 1
+6607 2751 1
+7363 2751 1
+7367 2751 -1
+10327 2751 38
+5864 2752 -1
+5915 2752 1
+5960 2752 -1
+5992 2752 1
+6412 2752 1
+6416 2752 1
+6476 2752 1
+6480 2752 1
+6540 2752 1
+6544 2752 1
+6604 2752 1
+6608 2752 1
+7364 2752 1
+7368 2752 -1
+10328 2752 38
+5865 2753 -1
+5920 2753 1
+5961 2753 -1
+5993 2753 1
+6417 2753 1
+6421 2753 1
+6481 2753 1
+6485 2753 1
+6545 2753 1
+6549 2753 1
+6609 2753 1
+6613 2753 1
+7365 2753 1
+7369 2753 -1
+10329 2753 38
+5866 2754 -1
+5917 2754 1
+5962 2754 -1
+5994 2754 1
+6418 2754 1
+6422 2754 1
+6482 2754 1
+6486 2754 1
+6546 2754 1
+6550 2754 1
+6610 2754 1
+6614 2754 1
+7366 2754 1
+7370 2754 -1
+10330 2754 38
+5867 2755 -1
+5918 2755 1
+5963 2755 -1
+5995 2755 1
+6419 2755 1
+6423 2755 1
+6483 2755 1
+6487 2755 1
+6547 2755 1
+6551 2755 1
+6611 2755 1
+6615 2755 1
+7367 2755 1
+7371 2755 -1
+10331 2755 38
+5868 2756 -1
+5919 2756 1
+5964 2756 -1
+5996 2756 1
+6420 2756 1
+6424 2756 1
+6484 2756 1
+6488 2756 1
+6548 2756 1
+6552 2756 1
+6612 2756 1
+6616 2756 1
+7368 2756 1
+7372 2756 -1
+10332 2756 38
+5869 2757 -1
+5892 2757 1
+5965 2757 -1
+5997 2757 1
+6425 2757 1
+6429 2757 1
+6489 2757 1
+6493 2757 1
+6553 2757 1
+6557 2757 1
+6617 2757 1
+6621 2757 1
+7369 2757 1
+7373 2757 -1
+10333 2757 38
+5870 2758 -1
+5889 2758 1
+5966 2758 -1
+5998 2758 1
+6426 2758 1
+6430 2758 1
+6490 2758 1
+6494 2758 1
+6554 2758 1
+6558 2758 1
+6618 2758 1
+6622 2758 1
+7370 2758 1
+7374 2758 -1
+10334 2758 38
+5871 2759 -1
+5890 2759 1
+5967 2759 -1
+5999 2759 1
+6427 2759 1
+6431 2759 1
+6491 2759 1
+6495 2759 1
+6555 2759 1
+6559 2759 1
+6619 2759 1
+6623 2759 1
+7371 2759 1
+7375 2759 -1
+10335 2759 38
+5872 2760 -1
+5891 2760 1
+5968 2760 -1
+6000 2760 1
+6428 2760 1
+6432 2760 1
+6492 2760 1
+6496 2760 1
+6556 2760 1
+6560 2760 1
+6620 2760 1
+6624 2760 1
+7372 2760 1
+7376 2760 -1
+10336 2760 38
+5873 2761 -1
+5896 2761 1
+5969 2761 -1
+6001 2761 1
+6433 2761 1
+6437 2761 1
+6497 2761 1
+6501 2761 1
+6561 2761 1
+6565 2761 1
+6625 2761 1
+6629 2761 1
+7373 2761 1
+7377 2761 -1
+10337 2761 38
+5874 2762 -1
+5893 2762 1
+5970 2762 -1
+6002 2762 1
+6434 2762 1
+6438 2762 1
+6498 2762 1
+6502 2762 1
+6562 2762 1
+6566 2762 1
+6626 2762 1
+6630 2762 1
+7374 2762 1
+7378 2762 -1
+10338 2762 38
+5875 2763 -1
+5894 2763 1
+5971 2763 -1
+6003 2763 1
+6435 2763 1
+6439 2763 1
+6499 2763 1
+6503 2763 1
+6563 2763 1
+6567 2763 1
+6627 2763 1
+6631 2763 1
+7375 2763 1
+7379 2763 -1
+10339 2763 38
+5876 2764 -1
+5895 2764 1
+5972 2764 -1
+6004 2764 1
+6436 2764 1
+6440 2764 1
+6500 2764 1
+6504 2764 1
+6564 2764 1
+6568 2764 1
+6628 2764 1
+6632 2764 1
+7376 2764 1
+7380 2764 -1
+10340 2764 38
+5877 2765 -1
+5900 2765 1
+5973 2765 -1
+6005 2765 1
+6441 2765 1
+6445 2765 1
+6505 2765 1
+6509 2765 1
+6569 2765 1
+6573 2765 1
+6633 2765 1
+6637 2765 1
+7377 2765 1
+7381 2765 -1
+10341 2765 38
+5878 2766 -1
+5897 2766 1
+5974 2766 -1
+6006 2766 1
+6442 2766 1
+6446 2766 1
+6506 2766 1
+6510 2766 1
+6570 2766 1
+6574 2766 1
+6634 2766 1
+6638 2766 1
+7378 2766 1
+7382 2766 -1
+10342 2766 38
+5879 2767 -1
+5898 2767 1
+5975 2767 -1
+6007 2767 1
+6443 2767 1
+6447 2767 1
+6507 2767 1
+6511 2767 1
+6571 2767 1
+6575 2767 1
+6635 2767 1
+6639 2767 1
+7379 2767 1
+7383 2767 -1
+10343 2767 38
+5880 2768 -1
+5899 2768 1
+5976 2768 -1
+6008 2768 1
+6444 2768 1
+6448 2768 1
+6508 2768 1
+6512 2768 1
+6572 2768 1
+6576 2768 1
+6636 2768 1
+6640 2768 1
+7380 2768 1
+7384 2768 -1
+10344 2768 38
+5881 2769 -1
+5904 2769 1
+5977 2769 -1
+6009 2769 1
+6449 2769 1
+6453 2769 1
+6513 2769 1
+6517 2769 1
+6577 2769 1
+6581 2769 1
+6641 2769 1
+6645 2769 1
+7381 2769 1
+7385 2769 -1
+10345 2769 38
+5882 2770 -1
+5901 2770 1
+5978 2770 -1
+6010 2770 1
+6450 2770 1
+6454 2770 1
+6514 2770 1
+6518 2770 1
+6578 2770 1
+6582 2770 1
+6642 2770 1
+6646 2770 1
+7382 2770 1
+7386 2770 -1
+10346 2770 38
+5883 2771 -1
+5902 2771 1
+5979 2771 -1
+6011 2771 1
+6451 2771 1
+6455 2771 1
+6515 2771 1
+6519 2771 1
+6579 2771 1
+6583 2771 1
+6643 2771 1
+6647 2771 1
+7383 2771 1
+7387 2771 -1
+10347 2771 38
+5884 2772 -1
+5903 2772 1
+5980 2772 -1
+6012 2772 1
+6452 2772 1
+6456 2772 1
+6516 2772 1
+6520 2772 1
+6580 2772 1
+6584 2772 1
+6644 2772 1
+6648 2772 1
+7384 2772 1
+7388 2772 -1
+10348 2772 38
+5885 2773 -1
+5908 2773 1
+5981 2773 -1
+6013 2773 1
+6457 2773 1
+6461 2773 1
+6521 2773 1
+6525 2773 1
+6585 2773 1
+6589 2773 1
+6649 2773 1
+6653 2773 1
+7385 2773 1
+7389 2773 -1
+10349 2773 38
+5886 2774 -1
+5905 2774 1
+5982 2774 -1
+6014 2774 1
+6458 2774 1
+6462 2774 1
+6522 2774 1
+6526 2774 1
+6586 2774 1
+6590 2774 1
+6650 2774 1
+6654 2774 1
+7386 2774 1
+7390 2774 -1
+10350 2774 38
+5887 2775 -1
+5906 2775 1
+5983 2775 -1
+6015 2775 1
+6459 2775 1
+6463 2775 1
+6523 2775 1
+6527 2775 1
+6587 2775 1
+6591 2775 1
+6651 2775 1
+6655 2775 1
+7387 2775 1
+7391 2775 -1
+10351 2775 38
+5888 2776 -1
+5907 2776 1
+5984 2776 -1
+6016 2776 1
+6460 2776 1
+6464 2776 1
+6524 2776 1
+6528 2776 1
+6588 2776 1
+6592 2776 1
+6652 2776 1
+6656 2776 1
+7388 2776 1
+7392 2776 -1
+10352 2776 38
+5889 2777 -1
+5944 2777 1
+5985 2777 -1
+6017 2777 1
+6657 2777 1
+6661 2777 1
+6721 2777 1
+6725 2777 1
+6785 2777 1
+6789 2777 1
+6849 2777 1
+6853 2777 1
+7393 2777 -1
+7421 2777 1
+10353 2777 38
+5890 2778 -1
+5941 2778 1
+5986 2778 -1
+6018 2778 1
+6658 2778 1
+6662 2778 1
+6722 2778 1
+6726 2778 1
+6786 2778 1
+6790 2778 1
+6850 2778 1
+6854 2778 1
+7394 2778 -1
+7422 2778 1
+10354 2778 38
+5891 2779 -1
+5942 2779 1
+5987 2779 -1
+6019 2779 1
+6659 2779 1
+6663 2779 1
+6723 2779 1
+6727 2779 1
+6787 2779 1
+6791 2779 1
+6851 2779 1
+6855 2779 1
+7395 2779 -1
+7423 2779 1
+10355 2779 38
+5892 2780 -1
+5943 2780 1
+5988 2780 -1
+6020 2780 1
+6660 2780 1
+6664 2780 1
+6724 2780 1
+6728 2780 1
+6788 2780 1
+6792 2780 1
+6852 2780 1
+6856 2780 1
+7396 2780 -1
+7424 2780 1
+10356 2780 38
+5893 2781 -1
+5948 2781 1
+5989 2781 -1
+6021 2781 1
+6665 2781 1
+6669 2781 1
+6729 2781 1
+6733 2781 1
+6793 2781 1
+6797 2781 1
+6857 2781 1
+6861 2781 1
+7393 2781 1
+7397 2781 -1
+10357 2781 38
+5894 2782 -1
+5945 2782 1
+5990 2782 -1
+6022 2782 1
+6666 2782 1
+6670 2782 1
+6730 2782 1
+6734 2782 1
+6794 2782 1
+6798 2782 1
+6858 2782 1
+6862 2782 1
+7394 2782 1
+7398 2782 -1
+10358 2782 38
+5895 2783 -1
+5946 2783 1
+5991 2783 -1
+6023 2783 1
+6667 2783 1
+6671 2783 1
+6731 2783 1
+6735 2783 1
+6795 2783 1
+6799 2783 1
+6859 2783 1
+6863 2783 1
+7395 2783 1
+7399 2783 -1
+10359 2783 38
+5896 2784 -1
+5947 2784 1
+5992 2784 -1
+6024 2784 1
+6668 2784 1
+6672 2784 1
+6732 2784 1
+6736 2784 1
+6796 2784 1
+6800 2784 1
+6860 2784 1
+6864 2784 1
+7396 2784 1
+7400 2784 -1
+10360 2784 38
+5897 2785 -1
+5952 2785 1
+5993 2785 -1
+6025 2785 1
+6673 2785 1
+6677 2785 1
+6737 2785 1
+6741 2785 1
+6801 2785 1
+6805 2785 1
+6865 2785 1
+6869 2785 1
+7397 2785 1
+7401 2785 -1
+10361 2785 38
+5898 2786 -1
+5949 2786 1
+5994 2786 -1
+6026 2786 1
+6674 2786 1
+6678 2786 1
+6738 2786 1
+6742 2786 1
+6802 2786 1
+6806 2786 1
+6866 2786 1
+6870 2786 1
+7398 2786 1
+7402 2786 -1
+10362 2786 38
+5899 2787 -1
+5950 2787 1
+5995 2787 -1
+6027 2787 1
+6675 2787 1
+6679 2787 1
+6739 2787 1
+6743 2787 1
+6803 2787 1
+6807 2787 1
+6867 2787 1
+6871 2787 1
+7399 2787 1
+7403 2787 -1
+10363 2787 38
+5900 2788 -1
+5951 2788 1
+5996 2788 -1
+6028 2788 1
+6676 2788 1
+6680 2788 1
+6740 2788 1
+6744 2788 1
+6804 2788 1
+6808 2788 1
+6868 2788 1
+6872 2788 1
+7400 2788 1
+7404 2788 -1
+10364 2788 38
+5901 2789 -1
+5924 2789 1
+5997 2789 -1
+6029 2789 1
+6681 2789 1
+6685 2789 1
+6745 2789 1
+6749 2789 1
+6809 2789 1
+6813 2789 1
+6873 2789 1
+6877 2789 1
+7401 2789 1
+7405 2789 -1
+10365 2789 38
+5902 2790 -1
+5921 2790 1
+5998 2790 -1
+6030 2790 1
+6682 2790 1
+6686 2790 1
+6746 2790 1
+6750 2790 1
+6810 2790 1
+6814 2790 1
+6874 2790 1
+6878 2790 1
+7402 2790 1
+7406 2790 -1
+10366 2790 38
+5903 2791 -1
+5922 2791 1
+5999 2791 -1
+6031 2791 1
+6683 2791 1
+6687 2791 1
+6747 2791 1
+6751 2791 1
+6811 2791 1
+6815 2791 1
+6875 2791 1
+6879 2791 1
+7403 2791 1
+7407 2791 -1
+10367 2791 38
+5904 2792 -1
+5923 2792 1
+6000 2792 -1
+6032 2792 1
+6684 2792 1
+6688 2792 1
+6748 2792 1
+6752 2792 1
+6812 2792 1
+6816 2792 1
+6876 2792 1
+6880 2792 1
+7404 2792 1
+7408 2792 -1
+10368 2792 38
+5905 2793 -1
+5928 2793 1
+6001 2793 -1
+6033 2793 1
+6689 2793 1
+6693 2793 1
+6753 2793 1
+6757 2793 1
+6817 2793 1
+6821 2793 1
+6881 2793 1
+6885 2793 1
+7405 2793 1
+7409 2793 -1
+10369 2793 38
+5906 2794 -1
+5925 2794 1
+6002 2794 -1
+6034 2794 1
+6690 2794 1
+6694 2794 1
+6754 2794 1
+6758 2794 1
+6818 2794 1
+6822 2794 1
+6882 2794 1
+6886 2794 1
+7406 2794 1
+7410 2794 -1
+10370 2794 38
+5907 2795 -1
+5926 2795 1
+6003 2795 -1
+6035 2795 1
+6691 2795 1
+6695 2795 1
+6755 2795 1
+6759 2795 1
+6819 2795 1
+6823 2795 1
+6883 2795 1
+6887 2795 1
+7407 2795 1
+7411 2795 -1
+10371 2795 38
+5908 2796 -1
+5927 2796 1
+6004 2796 -1
+6036 2796 1
+6692 2796 1
+6696 2796 1
+6756 2796 1
+6760 2796 1
+6820 2796 1
+6824 2796 1
+6884 2796 1
+6888 2796 1
+7408 2796 1
+7412 2796 -1
+10372 2796 38
+5909 2797 -1
+5932 2797 1
+6005 2797 -1
+6037 2797 1
+6697 2797 1
+6701 2797 1
+6761 2797 1
+6765 2797 1
+6825 2797 1
+6829 2797 1
+6889 2797 1
+6893 2797 1
+7409 2797 1
+7413 2797 -1
+10373 2797 38
+5910 2798 -1
+5929 2798 1
+6006 2798 -1
+6038 2798 1
+6698 2798 1
+6702 2798 1
+6762 2798 1
+6766 2798 1
+6826 2798 1
+6830 2798 1
+6890 2798 1
+6894 2798 1
+7410 2798 1
+7414 2798 -1
+10374 2798 38
+5911 2799 -1
+5930 2799 1
+6007 2799 -1
+6039 2799 1
+6699 2799 1
+6703 2799 1
+6763 2799 1
+6767 2799 1
+6827 2799 1
+6831 2799 1
+6891 2799 1
+6895 2799 1
+7411 2799 1
+7415 2799 -1
+10375 2799 38
+5912 2800 -1
+5931 2800 1
+6008 2800 -1
+6040 2800 1
+6700 2800 1
+6704 2800 1
+6764 2800 1
+6768 2800 1
+6828 2800 1
+6832 2800 1
+6892 2800 1
+6896 2800 1
+7412 2800 1
+7416 2800 -1
+10376 2800 38
+5913 2801 -1
+5936 2801 1
+6009 2801 -1
+6041 2801 1
+6705 2801 1
+6709 2801 1
+6769 2801 1
+6773 2801 1
+6833 2801 1
+6837 2801 1
+6897 2801 1
+6901 2801 1
+7413 2801 1
+7417 2801 -1
+10377 2801 38
+5914 2802 -1
+5933 2802 1
+6010 2802 -1
+6042 2802 1
+6706 2802 1
+6710 2802 1
+6770 2802 1
+6774 2802 1
+6834 2802 1
+6838 2802 1
+6898 2802 1
+6902 2802 1
+7414 2802 1
+7418 2802 -1
+10378 2802 38
+5915 2803 -1
+5934 2803 1
+6011 2803 -1
+6043 2803 1
+6707 2803 1
+6711 2803 1
+6771 2803 1
+6775 2803 1
+6835 2803 1
+6839 2803 1
+6899 2803 1
+6903 2803 1
+7415 2803 1
+7419 2803 -1
+10379 2803 38
+5916 2804 -1
+5935 2804 1
+6012 2804 -1
+6044 2804 1
+6708 2804 1
+6712 2804 1
+6772 2804 1
+6776 2804 1
+6836 2804 1
+6840 2804 1
+6900 2804 1
+6904 2804 1
+7416 2804 1
+7420 2804 -1
+10380 2804 38
+5917 2805 -1
+5940 2805 1
+6013 2805 -1
+6045 2805 1
+6713 2805 1
+6717 2805 1
+6777 2805 1
+6781 2805 1
+6841 2805 1
+6845 2805 1
+6905 2805 1
+6909 2805 1
+7417 2805 1
+7421 2805 -1
+10381 2805 38
+5918 2806 -1
+5937 2806 1
+6014 2806 -1
+6046 2806 1
+6714 2806 1
+6718 2806 1
+6778 2806 1
+6782 2806 1
+6842 2806 1
+6846 2806 1
+6906 2806 1
+6910 2806 1
+7418 2806 1
+7422 2806 -1
+10382 2806 38
+5919 2807 -1
+5938 2807 1
+6015 2807 -1
+6047 2807 1
+6715 2807 1
+6719 2807 1
+6779 2807 1
+6783 2807 1
+6843 2807 1
+6847 2807 1
+6907 2807 1
+6911 2807 1
+7419 2807 1
+7423 2807 -1
+10383 2807 38
+5920 2808 -1
+5939 2808 1
+6016 2808 -1
+6048 2808 1
+6716 2808 1
+6720 2808 1
+6780 2808 1
+6784 2808 1
+6844 2808 1
+6848 2808 1
+6908 2808 1
+6912 2808 1
+7420 2808 1
+7424 2808 -1
+10384 2808 38
+5848 2809 1
+5921 2809 -1
+6017 2809 -1
+6049 2809 1
+6913 2809 1
+6917 2809 1
+6977 2809 1
+6981 2809 1
+7041 2809 1
+7045 2809 1
+7105 2809 1
+7109 2809 1
+7425 2809 -1
+7453 2809 1
+10385 2809 38
+5845 2810 1
+5922 2810 -1
+6018 2810 -1
+6050 2810 1
+6914 2810 1
+6918 2810 1
+6978 2810 1
+6982 2810 1
+7042 2810 1
+7046 2810 1
+7106 2810 1
+7110 2810 1
+7426 2810 -1
+7454 2810 1
+10386 2810 38
+5846 2811 1
+5923 2811 -1
+6019 2811 -1
+6051 2811 1
+6915 2811 1
+6919 2811 1
+6979 2811 1
+6983 2811 1
+7043 2811 1
+7047 2811 1
+7107 2811 1
+7111 2811 1
+7427 2811 -1
+7455 2811 1
+10387 2811 38
+5847 2812 1
+5924 2812 -1
+6020 2812 -1
+6052 2812 1
+6916 2812 1
+6920 2812 1
+6980 2812 1
+6984 2812 1
+7044 2812 1
+7048 2812 1
+7108 2812 1
+7112 2812 1
+7428 2812 -1
+7456 2812 1
+10388 2812 38
+5852 2813 1
+5925 2813 -1
+6021 2813 -1
+6053 2813 1
+6921 2813 1
+6925 2813 1
+6985 2813 1
+6989 2813 1
+7049 2813 1
+7053 2813 1
+7113 2813 1
+7117 2813 1
+7425 2813 1
+7429 2813 -1
+10389 2813 38
+5849 2814 1
+5926 2814 -1
+6022 2814 -1
+6054 2814 1
+6922 2814 1
+6926 2814 1
+6986 2814 1
+6990 2814 1
+7050 2814 1
+7054 2814 1
+7114 2814 1
+7118 2814 1
+7426 2814 1
+7430 2814 -1
+10390 2814 38
+5850 2815 1
+5927 2815 -1
+6023 2815 -1
+6055 2815 1
+6923 2815 1
+6927 2815 1
+6987 2815 1
+6991 2815 1
+7051 2815 1
+7055 2815 1
+7115 2815 1
+7119 2815 1
+7427 2815 1
+7431 2815 -1
+10391 2815 38
+5851 2816 1
+5928 2816 -1
+6024 2816 -1
+6056 2816 1
+6924 2816 1
+6928 2816 1
+6988 2816 1
+6992 2816 1
+7052 2816 1
+7056 2816 1
+7116 2816 1
+7120 2816 1
+7428 2816 1
+7432 2816 -1
+10392 2816 38
+5856 2817 1
+5929 2817 -1
+6025 2817 -1
+6057 2817 1
+6929 2817 1
+6933 2817 1
+6993 2817 1
+6997 2817 1
+7057 2817 1
+7061 2817 1
+7121 2817 1
+7125 2817 1
+7429 2817 1
+7433 2817 -1
+10393 2817 38
+5853 2818 1
+5930 2818 -1
+6026 2818 -1
+6058 2818 1
+6930 2818 1
+6934 2818 1
+6994 2818 1
+6998 2818 1
+7058 2818 1
+7062 2818 1
+7122 2818 1
+7126 2818 1
+7430 2818 1
+7434 2818 -1
+10394 2818 38
+5854 2819 1
+5931 2819 -1
+6027 2819 -1
+6059 2819 1
+6931 2819 1
+6935 2819 1
+6995 2819 1
+6999 2819 1
+7059 2819 1
+7063 2819 1
+7123 2819 1
+7127 2819 1
+7431 2819 1
+7435 2819 -1
+10395 2819 38
+5855 2820 1
+5932 2820 -1
+6028 2820 -1
+6060 2820 1
+6932 2820 1
+6936 2820 1
+6996 2820 1
+7000 2820 1
+7060 2820 1
+7064 2820 1
+7124 2820 1
+7128 2820 1
+7432 2820 1
+7436 2820 -1
+10396 2820 38
+5828 2821 1
+5933 2821 -1
+6029 2821 -1
+6061 2821 1
+6937 2821 1
+6941 2821 1
+7001 2821 1
+7005 2821 1
+7065 2821 1
+7069 2821 1
+7129 2821 1
+7133 2821 1
+7433 2821 1
+7437 2821 -1
+10397 2821 38
+5825 2822 1
+5934 2822 -1
+6030 2822 -1
+6062 2822 1
+6938 2822 1
+6942 2822 1
+7002 2822 1
+7006 2822 1
+7066 2822 1
+7070 2822 1
+7130 2822 1
+7134 2822 1
+7434 2822 1
+7438 2822 -1
+10398 2822 38
+5826 2823 1
+5935 2823 -1
+6031 2823 -1
+6063 2823 1
+6939 2823 1
+6943 2823 1
+7003 2823 1
+7007 2823 1
+7067 2823 1
+7071 2823 1
+7131 2823 1
+7135 2823 1
+7435 2823 1
+7439 2823 -1
+10399 2823 38
+5827 2824 1
+5936 2824 -1
+6032 2824 -1
+6064 2824 1
+6940 2824 1
+6944 2824 1
+7004 2824 1
+7008 2824 1
+7068 2824 1
+7072 2824 1
+7132 2824 1
+7136 2824 1
+7436 2824 1
+7440 2824 -1
+10400 2824 38
+5832 2825 1
+5937 2825 -1
+6033 2825 -1
+6065 2825 1
+6945 2825 1
+6949 2825 1
+7009 2825 1
+7013 2825 1
+7073 2825 1
+7077 2825 1
+7137 2825 1
+7141 2825 1
+7437 2825 1
+7441 2825 -1
+10401 2825 38
+5829 2826 1
+5938 2826 -1
+6034 2826 -1
+6066 2826 1
+6946 2826 1
+6950 2826 1
+7010 2826 1
+7014 2826 1
+7074 2826 1
+7078 2826 1
+7138 2826 1
+7142 2826 1
+7438 2826 1
+7442 2826 -1
+10402 2826 38
+5830 2827 1
+5939 2827 -1
+6035 2827 -1
+6067 2827 1
+6947 2827 1
+6951 2827 1
+7011 2827 1
+7015 2827 1
+7075 2827 1
+7079 2827 1
+7139 2827 1
+7143 2827 1
+7439 2827 1
+7443 2827 -1
+10403 2827 38
+5831 2828 1
+5940 2828 -1
+6036 2828 -1
+6068 2828 1
+6948 2828 1
+6952 2828 1
+7012 2828 1
+7016 2828 1
+7076 2828 1
+7080 2828 1
+7140 2828 1
+7144 2828 1
+7440 2828 1
+7444 2828 -1
+10404 2828 38
+5836 2829 1
+5941 2829 -1
+6037 2829 -1
+6069 2829 1
+6953 2829 1
+6957 2829 1
+7017 2829 1
+7021 2829 1
+7081 2829 1
+7085 2829 1
+7145 2829 1
+7149 2829 1
+7441 2829 1
+7445 2829 -1
+10405 2829 38
+5833 2830 1
+5942 2830 -1
+6038 2830 -1
+6070 2830 1
+6954 2830 1
+6958 2830 1
+7018 2830 1
+7022 2830 1
+7082 2830 1
+7086 2830 1
+7146 2830 1
+7150 2830 1
+7442 2830 1
+7446 2830 -1
+10406 2830 38
+5834 2831 1
+5943 2831 -1
+6039 2831 -1
+6071 2831 1
+6955 2831 1
+6959 2831 1
+7019 2831 1
+7023 2831 1
+7083 2831 1
+7087 2831 1
+7147 2831 1
+7151 2831 1
+7443 2831 1
+7447 2831 -1
+10407 2831 38
+5835 2832 1
+5944 2832 -1
+6040 2832 -1
+6072 2832 1
+6956 2832 1
+6960 2832 1
+7020 2832 1
+7024 2832 1
+7084 2832 1
+7088 2832 1
+7148 2832 1
+7152 2832 1
+7444 2832 1
+7448 2832 -1
+10408 2832 38
+5840 2833 1
+5945 2833 -1
+6041 2833 -1
+6073 2833 1
+6961 2833 1
+6965 2833 1
+7025 2833 1
+7029 2833 1
+7089 2833 1
+7093 2833 1
+7153 2833 1
+7157 2833 1
+7445 2833 1
+7449 2833 -1
+10409 2833 38
+5837 2834 1
+5946 2834 -1
+6042 2834 -1
+6074 2834 1
+6962 2834 1
+6966 2834 1
+7026 2834 1
+7030 2834 1
+7090 2834 1
+7094 2834 1
+7154 2834 1
+7158 2834 1
+7446 2834 1
+7450 2834 -1
+10410 2834 38
+5838 2835 1
+5947 2835 -1
+6043 2835 -1
+6075 2835 1
+6963 2835 1
+6967 2835 1
+7027 2835 1
+7031 2835 1
+7091 2835 1
+7095 2835 1
+7155 2835 1
+7159 2835 1
+7447 2835 1
+7451 2835 -1
+10411 2835 38
+5839 2836 1
+5948 2836 -1
+6044 2836 -1
+6076 2836 1
+6964 2836 1
+6968 2836 1
+7028 2836 1
+7032 2836 1
+7092 2836 1
+7096 2836 1
+7156 2836 1
+7160 2836 1
+7448 2836 1
+7452 2836 -1
+10412 2836 38
+5844 2837 1
+5949 2837 -1
+6045 2837 -1
+6077 2837 1
+6969 2837 1
+6973 2837 1
+7033 2837 1
+7037 2837 1
+7097 2837 1
+7101 2837 1
+7161 2837 1
+7165 2837 1
+7449 2837 1
+7453 2837 -1
+10413 2837 38
+5841 2838 1
+5950 2838 -1
+6046 2838 -1
+6078 2838 1
+6970 2838 1
+6974 2838 1
+7034 2838 1
+7038 2838 1
+7098 2838 1
+7102 2838 1
+7162 2838 1
+7166 2838 1
+7450 2838 1
+7454 2838 -1
+10414 2838 38
+5842 2839 1
+5951 2839 -1
+6047 2839 -1
+6079 2839 1
+6971 2839 1
+6975 2839 1
+7035 2839 1
+7039 2839 1
+7099 2839 1
+7103 2839 1
+7163 2839 1
+7167 2839 1
+7451 2839 1
+7455 2839 -1
+10415 2839 38
+5843 2840 1
+5952 2840 -1
+6048 2840 -1
+6080 2840 1
+6972 2840 1
+6976 2840 1
+7036 2840 1
+7040 2840 1
+7100 2840 1
+7104 2840 1
+7164 2840 1
+7168 2840 1
+7452 2840 1
+7456 2840 -1
+10416 2840 38
+5953 2841 1
+5969 2841 1
+5992 2841 1
+6008 2841 1
+6027 2841 1
+6043 2841 1
+6062 2841 1
+6078 2841 1
+7169 2841 1
+7185 2841 1
+7457 2841 -1
+7469 2841 1
+10417 2841 38
+5954 2842 1
+5970 2842 1
+5989 2842 1
+6005 2842 1
+6028 2842 1
+6044 2842 1
+6063 2842 1
+6079 2842 1
+7170 2842 1
+7186 2842 1
+7458 2842 -1
+7470 2842 1
+10418 2842 38
+5955 2843 1
+5971 2843 1
+5990 2843 1
+6006 2843 1
+6025 2843 1
+6041 2843 1
+6064 2843 1
+6080 2843 1
+7171 2843 1
+7187 2843 1
+7459 2843 -1
+7471 2843 1
+10419 2843 38
+5956 2844 1
+5972 2844 1
+5991 2844 1
+6007 2844 1
+6026 2844 1
+6042 2844 1
+6061 2844 1
+6077 2844 1
+7172 2844 1
+7188 2844 1
+7460 2844 -1
+7472 2844 1
+10420 2844 38
+5957 2845 1
+5973 2845 1
+5996 2845 1
+6012 2845 1
+6031 2845 1
+6047 2845 1
+6050 2845 1
+6066 2845 1
+7173 2845 1
+7189 2845 1
+7457 2845 1
+7461 2845 -1
+10421 2845 38
+5958 2846 1
+5974 2846 1
+5993 2846 1
+6009 2846 1
+6032 2846 1
+6048 2846 1
+6051 2846 1
+6067 2846 1
+7174 2846 1
+7190 2846 1
+7458 2846 1
+7462 2846 -1
+10422 2846 38
+5959 2847 1
+5975 2847 1
+5994 2847 1
+6010 2847 1
+6029 2847 1
+6045 2847 1
+6052 2847 1
+6068 2847 1
+7175 2847 1
+7191 2847 1
+7459 2847 1
+7463 2847 -1
+10423 2847 38
+5960 2848 1
+5976 2848 1
+5995 2848 1
+6011 2848 1
+6030 2848 1
+6046 2848 1
+6049 2848 1
+6065 2848 1
+7176 2848 1
+7192 2848 1
+7460 2848 1
+7464 2848 -1
+10424 2848 38
+5961 2849 1
+5977 2849 1
+6000 2849 1
+6016 2849 1
+6019 2849 1
+6035 2849 1
+6054 2849 1
+6070 2849 1
+7177 2849 1
+7193 2849 1
+7461 2849 1
+7465 2849 -1
+10425 2849 38
+5962 2850 1
+5978 2850 1
+5997 2850 1
+6013 2850 1
+6020 2850 1
+6036 2850 1
+6055 2850 1
+6071 2850 1
+7178 2850 1
+7194 2850 1
+7462 2850 1
+7466 2850 -1
+10426 2850 38
+5963 2851 1
+5979 2851 1
+5998 2851 1
+6014 2851 1
+6017 2851 1
+6033 2851 1
+6056 2851 1
+6072 2851 1
+7179 2851 1
+7195 2851 1
+7463 2851 1
+7467 2851 -1
+10427 2851 38
+5964 2852 1
+5980 2852 1
+5999 2852 1
+6015 2852 1
+6018 2852 1
+6034 2852 1
+6053 2852 1
+6069 2852 1
+7180 2852 1
+7196 2852 1
+7464 2852 1
+7468 2852 -1
+10428 2852 38
+5965 2853 1
+5981 2853 1
+5988 2853 1
+6004 2853 1
+6023 2853 1
+6039 2853 1
+6058 2853 1
+6074 2853 1
+7181 2853 1
+7197 2853 1
+7465 2853 1
+7469 2853 -1
+10429 2853 38
+5966 2854 1
+5982 2854 1
+5985 2854 1
+6001 2854 1
+6024 2854 1
+6040 2854 1
+6059 2854 1
+6075 2854 1
+7182 2854 1
+7198 2854 1
+7466 2854 1
+7470 2854 -1
+10430 2854 38
+5967 2855 1
+5983 2855 1
+5986 2855 1
+6002 2855 1
+6021 2855 1
+6037 2855 1
+6060 2855 1
+6076 2855 1
+7183 2855 1
+7199 2855 1
+7467 2855 1
+7471 2855 -1
+10431 2855 38
+5968 2856 1
+5984 2856 1
+5987 2856 1
+6003 2856 1
+6022 2856 1
+6038 2856 1
+6057 2856 1
+6073 2856 1
+7184 2856 1
+7200 2856 1
+7468 2856 1
+7472 2856 -1
+10432 2856 38
+6081 2857 -1
+6136 2857 1
+6145 2857 -1
+6149 2857 -1
+6209 2857 -1
+6213 2857 -1
+6401 2857 -1
+6405 2857 -1
+6465 2857 -1
+6469 2857 -1
+6657 2857 -1
+6661 2857 -1
+6721 2857 -1
+6725 2857 -1
+6913 2857 -1
+6917 2857 -1
+6977 2857 -1
+6981 2857 -1
+7201 2857 1
+7233 2857 -1
+7473 2857 -1
+7501 2857 1
+10433 2857 38
+6082 2858 -1
+6133 2858 1
+6146 2858 -1
+6150 2858 -1
+6210 2858 -1
+6214 2858 -1
+6402 2858 -1
+6406 2858 -1
+6466 2858 -1
+6470 2858 -1
+6658 2858 -1
+6662 2858 -1
+6722 2858 -1
+6726 2858 -1
+6914 2858 -1
+6918 2858 -1
+6978 2858 -1
+6982 2858 -1
+7202 2858 1
+7234 2858 -1
+7474 2858 -1
+7502 2858 1
+10434 2858 38
+6083 2859 -1
+6134 2859 1
+6147 2859 -1
+6151 2859 -1
+6211 2859 -1
+6215 2859 -1
+6403 2859 -1
+6407 2859 -1
+6467 2859 -1
+6471 2859 -1
+6659 2859 -1
+6663 2859 -1
+6723 2859 -1
+6727 2859 -1
+6915 2859 -1
+6919 2859 -1
+6979 2859 -1
+6983 2859 -1
+7203 2859 1
+7235 2859 -1
+7475 2859 -1
+7503 2859 1
+10435 2859 38
+6084 2860 -1
+6135 2860 1
+6148 2860 -1
+6152 2860 -1
+6212 2860 -1
+6216 2860 -1
+6404 2860 -1
+6408 2860 -1
+6468 2860 -1
+6472 2860 -1
+6660 2860 -1
+6664 2860 -1
+6724 2860 -1
+6728 2860 -1
+6916 2860 -1
+6920 2860 -1
+6980 2860 -1
+6984 2860 -1
+7204 2860 1
+7236 2860 -1
+7476 2860 -1
+7504 2860 1
+10436 2860 38
+6085 2861 -1
+6140 2861 1
+6153 2861 -1
+6157 2861 -1
+6217 2861 -1
+6221 2861 -1
+6409 2861 -1
+6413 2861 -1
+6473 2861 -1
+6477 2861 -1
+6665 2861 -1
+6669 2861 -1
+6729 2861 -1
+6733 2861 -1
+6921 2861 -1
+6925 2861 -1
+6985 2861 -1
+6989 2861 -1
+7205 2861 1
+7237 2861 -1
+7473 2861 1
+7477 2861 -1
+10437 2861 38
+6086 2862 -1
+6137 2862 1
+6154 2862 -1
+6158 2862 -1
+6218 2862 -1
+6222 2862 -1
+6410 2862 -1
+6414 2862 -1
+6474 2862 -1
+6478 2862 -1
+6666 2862 -1
+6670 2862 -1
+6730 2862 -1
+6734 2862 -1
+6922 2862 -1
+6926 2862 -1
+6986 2862 -1
+6990 2862 -1
+7206 2862 1
+7238 2862 -1
+7474 2862 1
+7478 2862 -1
+10438 2862 38
+6087 2863 -1
+6138 2863 1
+6155 2863 -1
+6159 2863 -1
+6219 2863 -1
+6223 2863 -1
+6411 2863 -1
+6415 2863 -1
+6475 2863 -1
+6479 2863 -1
+6667 2863 -1
+6671 2863 -1
+6731 2863 -1
+6735 2863 -1
+6923 2863 -1
+6927 2863 -1
+6987 2863 -1
+6991 2863 -1
+7207 2863 1
+7239 2863 -1
+7475 2863 1
+7479 2863 -1
+10439 2863 38
+6088 2864 -1
+6139 2864 1
+6156 2864 -1
+6160 2864 -1
+6220 2864 -1
+6224 2864 -1
+6412 2864 -1
+6416 2864 -1
+6476 2864 -1
+6480 2864 -1
+6668 2864 -1
+6672 2864 -1
+6732 2864 -1
+6736 2864 -1
+6924 2864 -1
+6928 2864 -1
+6988 2864 -1
+6992 2864 -1
+7208 2864 1
+7240 2864 -1
+7476 2864 1
+7480 2864 -1
+10440 2864 38
+6089 2865 -1
+6144 2865 1
+6161 2865 -1
+6165 2865 -1
+6225 2865 -1
+6229 2865 -1
+6417 2865 -1
+6421 2865 -1
+6481 2865 -1
+6485 2865 -1
+6673 2865 -1
+6677 2865 -1
+6737 2865 -1
+6741 2865 -1
+6929 2865 -1
+6933 2865 -1
+6993 2865 -1
+6997 2865 -1
+7209 2865 1
+7241 2865 -1
+7477 2865 1
+7481 2865 -1
+10441 2865 38
+6090 2866 -1
+6141 2866 1
+6162 2866 -1
+6166 2866 -1
+6226 2866 -1
+6230 2866 -1
+6418 2866 -1
+6422 2866 -1
+6482 2866 -1
+6486 2866 -1
+6674 2866 -1
+6678 2866 -1
+6738 2866 -1
+6742 2866 -1
+6930 2866 -1
+6934 2866 -1
+6994 2866 -1
+6998 2866 -1
+7210 2866 1
+7242 2866 -1
+7478 2866 1
+7482 2866 -1
+10442 2866 38
+6091 2867 -1
+6142 2867 1
+6163 2867 -1
+6167 2867 -1
+6227 2867 -1
+6231 2867 -1
+6419 2867 -1
+6423 2867 -1
+6483 2867 -1
+6487 2867 -1
+6675 2867 -1
+6679 2867 -1
+6739 2867 -1
+6743 2867 -1
+6931 2867 -1
+6935 2867 -1
+6995 2867 -1
+6999 2867 -1
+7211 2867 1
+7243 2867 -1
+7479 2867 1
+7483 2867 -1
+10443 2867 38
+6092 2868 -1
+6143 2868 1
+6164 2868 -1
+6168 2868 -1
+6228 2868 -1
+6232 2868 -1
+6420 2868 -1
+6424 2868 -1
+6484 2868 -1
+6488 2868 -1
+6676 2868 -1
+6680 2868 -1
+6740 2868 -1
+6744 2868 -1
+6932 2868 -1
+6936 2868 -1
+6996 2868 -1
+7000 2868 -1
+7212 2868 1
+7244 2868 -1
+7480 2868 1
+7484 2868 -1
+10444 2868 38
+6093 2869 -1
+6116 2869 1
+6169 2869 -1
+6173 2869 -1
+6233 2869 -1
+6237 2869 -1
+6425 2869 -1
+6429 2869 -1
+6489 2869 -1
+6493 2869 -1
+6681 2869 -1
+6685 2869 -1
+6745 2869 -1
+6749 2869 -1
+6937 2869 -1
+6941 2869 -1
+7001 2869 -1
+7005 2869 -1
+7213 2869 1
+7245 2869 -1
+7481 2869 1
+7485 2869 -1
+10445 2869 38
+6094 2870 -1
+6113 2870 1
+6170 2870 -1
+6174 2870 -1
+6234 2870 -1
+6238 2870 -1
+6426 2870 -1
+6430 2870 -1
+6490 2870 -1
+6494 2870 -1
+6682 2870 -1
+6686 2870 -1
+6746 2870 -1
+6750 2870 -1
+6938 2870 -1
+6942 2870 -1
+7002 2870 -1
+7006 2870 -1
+7214 2870 1
+7246 2870 -1
+7482 2870 1
+7486 2870 -1
+10446 2870 38
+6095 2871 -1
+6114 2871 1
+6171 2871 -1
+6175 2871 -1
+6235 2871 -1
+6239 2871 -1
+6427 2871 -1
+6431 2871 -1
+6491 2871 -1
+6495 2871 -1
+6683 2871 -1
+6687 2871 -1
+6747 2871 -1
+6751 2871 -1
+6939 2871 -1
+6943 2871 -1
+7003 2871 -1
+7007 2871 -1
+7215 2871 1
+7247 2871 -1
+7483 2871 1
+7487 2871 -1
+10447 2871 38
+6096 2872 -1
+6115 2872 1
+6172 2872 -1
+6176 2872 -1
+6236 2872 -1
+6240 2872 -1
+6428 2872 -1
+6432 2872 -1
+6492 2872 -1
+6496 2872 -1
+6684 2872 -1
+6688 2872 -1
+6748 2872 -1
+6752 2872 -1
+6940 2872 -1
+6944 2872 -1
+7004 2872 -1
+7008 2872 -1
+7216 2872 1
+7248 2872 -1
+7484 2872 1
+7488 2872 -1
+10448 2872 38
+6097 2873 -1
+6120 2873 1
+6177 2873 -1
+6181 2873 -1
+6241 2873 -1
+6245 2873 -1
+6433 2873 -1
+6437 2873 -1
+6497 2873 -1
+6501 2873 -1
+6689 2873 -1
+6693 2873 -1
+6753 2873 -1
+6757 2873 -1
+6945 2873 -1
+6949 2873 -1
+7009 2873 -1
+7013 2873 -1
+7217 2873 1
+7249 2873 -1
+7485 2873 1
+7489 2873 -1
+10449 2873 38
+6098 2874 -1
+6117 2874 1
+6178 2874 -1
+6182 2874 -1
+6242 2874 -1
+6246 2874 -1
+6434 2874 -1
+6438 2874 -1
+6498 2874 -1
+6502 2874 -1
+6690 2874 -1
+6694 2874 -1
+6754 2874 -1
+6758 2874 -1
+6946 2874 -1
+6950 2874 -1
+7010 2874 -1
+7014 2874 -1
+7218 2874 1
+7250 2874 -1
+7486 2874 1
+7490 2874 -1
+10450 2874 38
+6099 2875 -1
+6118 2875 1
+6179 2875 -1
+6183 2875 -1
+6243 2875 -1
+6247 2875 -1
+6435 2875 -1
+6439 2875 -1
+6499 2875 -1
+6503 2875 -1
+6691 2875 -1
+6695 2875 -1
+6755 2875 -1
+6759 2875 -1
+6947 2875 -1
+6951 2875 -1
+7011 2875 -1
+7015 2875 -1
+7219 2875 1
+7251 2875 -1
+7487 2875 1
+7491 2875 -1
+10451 2875 38
+6100 2876 -1
+6119 2876 1
+6180 2876 -1
+6184 2876 -1
+6244 2876 -1
+6248 2876 -1
+6436 2876 -1
+6440 2876 -1
+6500 2876 -1
+6504 2876 -1
+6692 2876 -1
+6696 2876 -1
+6756 2876 -1
+6760 2876 -1
+6948 2876 -1
+6952 2876 -1
+7012 2876 -1
+7016 2876 -1
+7220 2876 1
+7252 2876 -1
+7488 2876 1
+7492 2876 -1
+10452 2876 38
+6101 2877 -1
+6124 2877 1
+6185 2877 -1
+6189 2877 -1
+6249 2877 -1
+6253 2877 -1
+6441 2877 -1
+6445 2877 -1
+6505 2877 -1
+6509 2877 -1
+6697 2877 -1
+6701 2877 -1
+6761 2877 -1
+6765 2877 -1
+6953 2877 -1
+6957 2877 -1
+7017 2877 -1
+7021 2877 -1
+7221 2877 1
+7253 2877 -1
+7489 2877 1
+7493 2877 -1
+10453 2877 38
+6102 2878 -1
+6121 2878 1
+6186 2878 -1
+6190 2878 -1
+6250 2878 -1
+6254 2878 -1
+6442 2878 -1
+6446 2878 -1
+6506 2878 -1
+6510 2878 -1
+6698 2878 -1
+6702 2878 -1
+6762 2878 -1
+6766 2878 -1
+6954 2878 -1
+6958 2878 -1
+7018 2878 -1
+7022 2878 -1
+7222 2878 1
+7254 2878 -1
+7490 2878 1
+7494 2878 -1
+10454 2878 38
+6103 2879 -1
+6122 2879 1
+6187 2879 -1
+6191 2879 -1
+6251 2879 -1
+6255 2879 -1
+6443 2879 -1
+6447 2879 -1
+6507 2879 -1
+6511 2879 -1
+6699 2879 -1
+6703 2879 -1
+6763 2879 -1
+6767 2879 -1
+6955 2879 -1
+6959 2879 -1
+7019 2879 -1
+7023 2879 -1
+7223 2879 1
+7255 2879 -1
+7491 2879 1
+7495 2879 -1
+10455 2879 38
+6104 2880 -1
+6123 2880 1
+6188 2880 -1
+6192 2880 -1
+6252 2880 -1
+6256 2880 -1
+6444 2880 -1
+6448 2880 -1
+6508 2880 -1
+6512 2880 -1
+6700 2880 -1
+6704 2880 -1
+6764 2880 -1
+6768 2880 -1
+6956 2880 -1
+6960 2880 -1
+7020 2880 -1
+7024 2880 -1
+7224 2880 1
+7256 2880 -1
+7492 2880 1
+7496 2880 -1
+10456 2880 38
+6105 2881 -1
+6128 2881 1
+6193 2881 -1
+6197 2881 -1
+6257 2881 -1
+6261 2881 -1
+6449 2881 -1
+6453 2881 -1
+6513 2881 -1
+6517 2881 -1
+6705 2881 -1
+6709 2881 -1
+6769 2881 -1
+6773 2881 -1
+6961 2881 -1
+6965 2881 -1
+7025 2881 -1
+7029 2881 -1
+7225 2881 1
+7257 2881 -1
+7493 2881 1
+7497 2881 -1
+10457 2881 38
+6106 2882 -1
+6125 2882 1
+6194 2882 -1
+6198 2882 -1
+6258 2882 -1
+6262 2882 -1
+6450 2882 -1
+6454 2882 -1
+6514 2882 -1
+6518 2882 -1
+6706 2882 -1
+6710 2882 -1
+6770 2882 -1
+6774 2882 -1
+6962 2882 -1
+6966 2882 -1
+7026 2882 -1
+7030 2882 -1
+7226 2882 1
+7258 2882 -1
+7494 2882 1
+7498 2882 -1
+10458 2882 38
+6107 2883 -1
+6126 2883 1
+6195 2883 -1
+6199 2883 -1
+6259 2883 -1
+6263 2883 -1
+6451 2883 -1
+6455 2883 -1
+6515 2883 -1
+6519 2883 -1
+6707 2883 -1
+6711 2883 -1
+6771 2883 -1
+6775 2883 -1
+6963 2883 -1
+6967 2883 -1
+7027 2883 -1
+7031 2883 -1
+7227 2883 1
+7259 2883 -1
+7495 2883 1
+7499 2883 -1
+10459 2883 38
+6108 2884 -1
+6127 2884 1
+6196 2884 -1
+6200 2884 -1
+6260 2884 -1
+6264 2884 -1
+6452 2884 -1
+6456 2884 -1
+6516 2884 -1
+6520 2884 -1
+6708 2884 -1
+6712 2884 -1
+6772 2884 -1
+6776 2884 -1
+6964 2884 -1
+6968 2884 -1
+7028 2884 -1
+7032 2884 -1
+7228 2884 1
+7260 2884 -1
+7496 2884 1
+7500 2884 -1
+10460 2884 38
+6109 2885 -1
+6132 2885 1
+6201 2885 -1
+6205 2885 -1
+6265 2885 -1
+6269 2885 -1
+6457 2885 -1
+6461 2885 -1
+6521 2885 -1
+6525 2885 -1
+6713 2885 -1
+6717 2885 -1
+6777 2885 -1
+6781 2885 -1
+6969 2885 -1
+6973 2885 -1
+7033 2885 -1
+7037 2885 -1
+7229 2885 1
+7261 2885 -1
+7497 2885 1
+7501 2885 -1
+10461 2885 38
+6110 2886 -1
+6129 2886 1
+6202 2886 -1
+6206 2886 -1
+6266 2886 -1
+6270 2886 -1
+6458 2886 -1
+6462 2886 -1
+6522 2886 -1
+6526 2886 -1
+6714 2886 -1
+6718 2886 -1
+6778 2886 -1
+6782 2886 -1
+6970 2886 -1
+6974 2886 -1
+7034 2886 -1
+7038 2886 -1
+7230 2886 1
+7262 2886 -1
+7498 2886 1
+7502 2886 -1
+10462 2886 38
+6111 2887 -1
+6130 2887 1
+6203 2887 -1
+6207 2887 -1
+6267 2887 -1
+6271 2887 -1
+6459 2887 -1
+6463 2887 -1
+6523 2887 -1
+6527 2887 -1
+6715 2887 -1
+6719 2887 -1
+6779 2887 -1
+6783 2887 -1
+6971 2887 -1
+6975 2887 -1
+7035 2887 -1
+7039 2887 -1
+7231 2887 1
+7263 2887 -1
+7499 2887 1
+7503 2887 -1
+10463 2887 38
+6112 2888 -1
+6131 2888 1
+6204 2888 -1
+6208 2888 -1
+6268 2888 -1
+6272 2888 -1
+6460 2888 -1
+6464 2888 -1
+6524 2888 -1
+6528 2888 -1
+6716 2888 -1
+6720 2888 -1
+6780 2888 -1
+6784 2888 -1
+6972 2888 -1
+6976 2888 -1
+7036 2888 -1
+7040 2888 -1
+7232 2888 1
+7264 2888 -1
+7500 2888 1
+7504 2888 -1
+10464 2888 38
+6104 2889 1
+6113 2889 -1
+6273 2889 -1
+6277 2889 -1
+6337 2889 -1
+6341 2889 -1
+6529 2889 -1
+6533 2889 -1
+6593 2889 -1
+6597 2889 -1
+6785 2889 -1
+6789 2889 -1
+6849 2889 -1
+6853 2889 -1
+7041 2889 -1
+7045 2889 -1
+7105 2889 -1
+7109 2889 -1
+7201 2889 -1
+7233 2889 1
+7505 2889 -1
+7533 2889 1
+10465 2889 38
+6101 2890 1
+6114 2890 -1
+6274 2890 -1
+6278 2890 -1
+6338 2890 -1
+6342 2890 -1
+6530 2890 -1
+6534 2890 -1
+6594 2890 -1
+6598 2890 -1
+6786 2890 -1
+6790 2890 -1
+6850 2890 -1
+6854 2890 -1
+7042 2890 -1
+7046 2890 -1
+7106 2890 -1
+7110 2890 -1
+7202 2890 -1
+7234 2890 1
+7506 2890 -1
+7534 2890 1
+10466 2890 38
+6102 2891 1
+6115 2891 -1
+6275 2891 -1
+6279 2891 -1
+6339 2891 -1
+6343 2891 -1
+6531 2891 -1
+6535 2891 -1
+6595 2891 -1
+6599 2891 -1
+6787 2891 -1
+6791 2891 -1
+6851 2891 -1
+6855 2891 -1
+7043 2891 -1
+7047 2891 -1
+7107 2891 -1
+7111 2891 -1
+7203 2891 -1
+7235 2891 1
+7507 2891 -1
+7535 2891 1
+10467 2891 38
+6103 2892 1
+6116 2892 -1
+6276 2892 -1
+6280 2892 -1
+6340 2892 -1
+6344 2892 -1
+6532 2892 -1
+6536 2892 -1
+6596 2892 -1
+6600 2892 -1
+6788 2892 -1
+6792 2892 -1
+6852 2892 -1
+6856 2892 -1
+7044 2892 -1
+7048 2892 -1
+7108 2892 -1
+7112 2892 -1
+7204 2892 -1
+7236 2892 1
+7508 2892 -1
+7536 2892 1
+10468 2892 38
+6108 2893 1
+6117 2893 -1
+6281 2893 -1
+6285 2893 -1
+6345 2893 -1
+6349 2893 -1
+6537 2893 -1
+6541 2893 -1
+6601 2893 -1
+6605 2893 -1
+6793 2893 -1
+6797 2893 -1
+6857 2893 -1
+6861 2893 -1
+7049 2893 -1
+7053 2893 -1
+7113 2893 -1
+7117 2893 -1
+7205 2893 -1
+7237 2893 1
+7505 2893 1
+7509 2893 -1
+10469 2893 38
+6105 2894 1
+6118 2894 -1
+6282 2894 -1
+6286 2894 -1
+6346 2894 -1
+6350 2894 -1
+6538 2894 -1
+6542 2894 -1
+6602 2894 -1
+6606 2894 -1
+6794 2894 -1
+6798 2894 -1
+6858 2894 -1
+6862 2894 -1
+7050 2894 -1
+7054 2894 -1
+7114 2894 -1
+7118 2894 -1
+7206 2894 -1
+7238 2894 1
+7506 2894 1
+7510 2894 -1
+10470 2894 38
+6106 2895 1
+6119 2895 -1
+6283 2895 -1
+6287 2895 -1
+6347 2895 -1
+6351 2895 -1
+6539 2895 -1
+6543 2895 -1
+6603 2895 -1
+6607 2895 -1
+6795 2895 -1
+6799 2895 -1
+6859 2895 -1
+6863 2895 -1
+7051 2895 -1
+7055 2895 -1
+7115 2895 -1
+7119 2895 -1
+7207 2895 -1
+7239 2895 1
+7507 2895 1
+7511 2895 -1
+10471 2895 38
+6107 2896 1
+6120 2896 -1
+6284 2896 -1
+6288 2896 -1
+6348 2896 -1
+6352 2896 -1
+6540 2896 -1
+6544 2896 -1
+6604 2896 -1
+6608 2896 -1
+6796 2896 -1
+6800 2896 -1
+6860 2896 -1
+6864 2896 -1
+7052 2896 -1
+7056 2896 -1
+7116 2896 -1
+7120 2896 -1
+7208 2896 -1
+7240 2896 1
+7508 2896 1
+7512 2896 -1
+10472 2896 38
+6112 2897 1
+6121 2897 -1
+6289 2897 -1
+6293 2897 -1
+6353 2897 -1
+6357 2897 -1
+6545 2897 -1
+6549 2897 -1
+6609 2897 -1
+6613 2897 -1
+6801 2897 -1
+6805 2897 -1
+6865 2897 -1
+6869 2897 -1
+7057 2897 -1
+7061 2897 -1
+7121 2897 -1
+7125 2897 -1
+7209 2897 -1
+7241 2897 1
+7509 2897 1
+7513 2897 -1
+10473 2897 38
+6109 2898 1
+6122 2898 -1
+6290 2898 -1
+6294 2898 -1
+6354 2898 -1
+6358 2898 -1
+6546 2898 -1
+6550 2898 -1
+6610 2898 -1
+6614 2898 -1
+6802 2898 -1
+6806 2898 -1
+6866 2898 -1
+6870 2898 -1
+7058 2898 -1
+7062 2898 -1
+7122 2898 -1
+7126 2898 -1
+7210 2898 -1
+7242 2898 1
+7510 2898 1
+7514 2898 -1
+10474 2898 38
+6110 2899 1
+6123 2899 -1
+6291 2899 -1
+6295 2899 -1
+6355 2899 -1
+6359 2899 -1
+6547 2899 -1
+6551 2899 -1
+6611 2899 -1
+6615 2899 -1
+6803 2899 -1
+6807 2899 -1
+6867 2899 -1
+6871 2899 -1
+7059 2899 -1
+7063 2899 -1
+7123 2899 -1
+7127 2899 -1
+7211 2899 -1
+7243 2899 1
+7511 2899 1
+7515 2899 -1
+10475 2899 38
+6111 2900 1
+6124 2900 -1
+6292 2900 -1
+6296 2900 -1
+6356 2900 -1
+6360 2900 -1
+6548 2900 -1
+6552 2900 -1
+6612 2900 -1
+6616 2900 -1
+6804 2900 -1
+6808 2900 -1
+6868 2900 -1
+6872 2900 -1
+7060 2900 -1
+7064 2900 -1
+7124 2900 -1
+7128 2900 -1
+7212 2900 -1
+7244 2900 1
+7512 2900 1
+7516 2900 -1
+10476 2900 38
+6084 2901 1
+6125 2901 -1
+6297 2901 -1
+6301 2901 -1
+6361 2901 -1
+6365 2901 -1
+6553 2901 -1
+6557 2901 -1
+6617 2901 -1
+6621 2901 -1
+6809 2901 -1
+6813 2901 -1
+6873 2901 -1
+6877 2901 -1
+7065 2901 -1
+7069 2901 -1
+7129 2901 -1
+7133 2901 -1
+7213 2901 -1
+7245 2901 1
+7513 2901 1
+7517 2901 -1
+10477 2901 38
+6081 2902 1
+6126 2902 -1
+6298 2902 -1
+6302 2902 -1
+6362 2902 -1
+6366 2902 -1
+6554 2902 -1
+6558 2902 -1
+6618 2902 -1
+6622 2902 -1
+6810 2902 -1
+6814 2902 -1
+6874 2902 -1
+6878 2902 -1
+7066 2902 -1
+7070 2902 -1
+7130 2902 -1
+7134 2902 -1
+7214 2902 -1
+7246 2902 1
+7514 2902 1
+7518 2902 -1
+10478 2902 38
+6082 2903 1
+6127 2903 -1
+6299 2903 -1
+6303 2903 -1
+6363 2903 -1
+6367 2903 -1
+6555 2903 -1
+6559 2903 -1
+6619 2903 -1
+6623 2903 -1
+6811 2903 -1
+6815 2903 -1
+6875 2903 -1
+6879 2903 -1
+7067 2903 -1
+7071 2903 -1
+7131 2903 -1
+7135 2903 -1
+7215 2903 -1
+7247 2903 1
+7515 2903 1
+7519 2903 -1
+10479 2903 38
+6083 2904 1
+6128 2904 -1
+6300 2904 -1
+6304 2904 -1
+6364 2904 -1
+6368 2904 -1
+6556 2904 -1
+6560 2904 -1
+6620 2904 -1
+6624 2904 -1
+6812 2904 -1
+6816 2904 -1
+6876 2904 -1
+6880 2904 -1
+7068 2904 -1
+7072 2904 -1
+7132 2904 -1
+7136 2904 -1
+7216 2904 -1
+7248 2904 1
+7516 2904 1
+7520 2904 -1
+10480 2904 38
+6088 2905 1
+6129 2905 -1
+6305 2905 -1
+6309 2905 -1
+6369 2905 -1
+6373 2905 -1
+6561 2905 -1
+6565 2905 -1
+6625 2905 -1
+6629 2905 -1
+6817 2905 -1
+6821 2905 -1
+6881 2905 -1
+6885 2905 -1
+7073 2905 -1
+7077 2905 -1
+7137 2905 -1
+7141 2905 -1
+7217 2905 -1
+7249 2905 1
+7517 2905 1
+7521 2905 -1
+10481 2905 38
+6085 2906 1
+6130 2906 -1
+6306 2906 -1
+6310 2906 -1
+6370 2906 -1
+6374 2906 -1
+6562 2906 -1
+6566 2906 -1
+6626 2906 -1
+6630 2906 -1
+6818 2906 -1
+6822 2906 -1
+6882 2906 -1
+6886 2906 -1
+7074 2906 -1
+7078 2906 -1
+7138 2906 -1
+7142 2906 -1
+7218 2906 -1
+7250 2906 1
+7518 2906 1
+7522 2906 -1
+10482 2906 38
+6086 2907 1
+6131 2907 -1
+6307 2907 -1
+6311 2907 -1
+6371 2907 -1
+6375 2907 -1
+6563 2907 -1
+6567 2907 -1
+6627 2907 -1
+6631 2907 -1
+6819 2907 -1
+6823 2907 -1
+6883 2907 -1
+6887 2907 -1
+7075 2907 -1
+7079 2907 -1
+7139 2907 -1
+7143 2907 -1
+7219 2907 -1
+7251 2907 1
+7519 2907 1
+7523 2907 -1
+10483 2907 38
+6087 2908 1
+6132 2908 -1
+6308 2908 -1
+6312 2908 -1
+6372 2908 -1
+6376 2908 -1
+6564 2908 -1
+6568 2908 -1
+6628 2908 -1
+6632 2908 -1
+6820 2908 -1
+6824 2908 -1
+6884 2908 -1
+6888 2908 -1
+7076 2908 -1
+7080 2908 -1
+7140 2908 -1
+7144 2908 -1
+7220 2908 -1
+7252 2908 1
+7520 2908 1
+7524 2908 -1
+10484 2908 38
+6092 2909 1
+6133 2909 -1
+6313 2909 -1
+6317 2909 -1
+6377 2909 -1
+6381 2909 -1
+6569 2909 -1
+6573 2909 -1
+6633 2909 -1
+6637 2909 -1
+6825 2909 -1
+6829 2909 -1
+6889 2909 -1
+6893 2909 -1
+7081 2909 -1
+7085 2909 -1
+7145 2909 -1
+7149 2909 -1
+7221 2909 -1
+7253 2909 1
+7521 2909 1
+7525 2909 -1
+10485 2909 38
+6089 2910 1
+6134 2910 -1
+6314 2910 -1
+6318 2910 -1
+6378 2910 -1
+6382 2910 -1
+6570 2910 -1
+6574 2910 -1
+6634 2910 -1
+6638 2910 -1
+6826 2910 -1
+6830 2910 -1
+6890 2910 -1
+6894 2910 -1
+7082 2910 -1
+7086 2910 -1
+7146 2910 -1
+7150 2910 -1
+7222 2910 -1
+7254 2910 1
+7522 2910 1
+7526 2910 -1
+10486 2910 38
+6090 2911 1
+6135 2911 -1
+6315 2911 -1
+6319 2911 -1
+6379 2911 -1
+6383 2911 -1
+6571 2911 -1
+6575 2911 -1
+6635 2911 -1
+6639 2911 -1
+6827 2911 -1
+6831 2911 -1
+6891 2911 -1
+6895 2911 -1
+7083 2911 -1
+7087 2911 -1
+7147 2911 -1
+7151 2911 -1
+7223 2911 -1
+7255 2911 1
+7523 2911 1
+7527 2911 -1
+10487 2911 38
+6091 2912 1
+6136 2912 -1
+6316 2912 -1
+6320 2912 -1
+6380 2912 -1
+6384 2912 -1
+6572 2912 -1
+6576 2912 -1
+6636 2912 -1
+6640 2912 -1
+6828 2912 -1
+6832 2912 -1
+6892 2912 -1
+6896 2912 -1
+7084 2912 -1
+7088 2912 -1
+7148 2912 -1
+7152 2912 -1
+7224 2912 -1
+7256 2912 1
+7524 2912 1
+7528 2912 -1
+10488 2912 38
+6096 2913 1
+6137 2913 -1
+6321 2913 -1
+6325 2913 -1
+6385 2913 -1
+6389 2913 -1
+6577 2913 -1
+6581 2913 -1
+6641 2913 -1
+6645 2913 -1
+6833 2913 -1
+6837 2913 -1
+6897 2913 -1
+6901 2913 -1
+7089 2913 -1
+7093 2913 -1
+7153 2913 -1
+7157 2913 -1
+7225 2913 -1
+7257 2913 1
+7525 2913 1
+7529 2913 -1
+10489 2913 38
+6093 2914 1
+6138 2914 -1
+6322 2914 -1
+6326 2914 -1
+6386 2914 -1
+6390 2914 -1
+6578 2914 -1
+6582 2914 -1
+6642 2914 -1
+6646 2914 -1
+6834 2914 -1
+6838 2914 -1
+6898 2914 -1
+6902 2914 -1
+7090 2914 -1
+7094 2914 -1
+7154 2914 -1
+7158 2914 -1
+7226 2914 -1
+7258 2914 1
+7526 2914 1
+7530 2914 -1
+10490 2914 38
+6094 2915 1
+6139 2915 -1
+6323 2915 -1
+6327 2915 -1
+6387 2915 -1
+6391 2915 -1
+6579 2915 -1
+6583 2915 -1
+6643 2915 -1
+6647 2915 -1
+6835 2915 -1
+6839 2915 -1
+6899 2915 -1
+6903 2915 -1
+7091 2915 -1
+7095 2915 -1
+7155 2915 -1
+7159 2915 -1
+7227 2915 -1
+7259 2915 1
+7527 2915 1
+7531 2915 -1
+10491 2915 38
+6095 2916 1
+6140 2916 -1
+6324 2916 -1
+6328 2916 -1
+6388 2916 -1
+6392 2916 -1
+6580 2916 -1
+6584 2916 -1
+6644 2916 -1
+6648 2916 -1
+6836 2916 -1
+6840 2916 -1
+6900 2916 -1
+6904 2916 -1
+7092 2916 -1
+7096 2916 -1
+7156 2916 -1
+7160 2916 -1
+7228 2916 -1
+7260 2916 1
+7528 2916 1
+7532 2916 -1
+10492 2916 38
+6100 2917 1
+6141 2917 -1
+6329 2917 -1
+6333 2917 -1
+6393 2917 -1
+6397 2917 -1
+6585 2917 -1
+6589 2917 -1
+6649 2917 -1
+6653 2917 -1
+6841 2917 -1
+6845 2917 -1
+6905 2917 -1
+6909 2917 -1
+7097 2917 -1
+7101 2917 -1
+7161 2917 -1
+7165 2917 -1
+7229 2917 -1
+7261 2917 1
+7529 2917 1
+7533 2917 -1
+10493 2917 38
+6097 2918 1
+6142 2918 -1
+6330 2918 -1
+6334 2918 -1
+6394 2918 -1
+6398 2918 -1
+6586 2918 -1
+6590 2918 -1
+6650 2918 -1
+6654 2918 -1
+6842 2918 -1
+6846 2918 -1
+6906 2918 -1
+6910 2918 -1
+7098 2918 -1
+7102 2918 -1
+7162 2918 -1
+7166 2918 -1
+7230 2918 -1
+7262 2918 1
+7530 2918 1
+7534 2918 -1
+10494 2918 38
+6098 2919 1
+6143 2919 -1
+6331 2919 -1
+6335 2919 -1
+6395 2919 -1
+6399 2919 -1
+6587 2919 -1
+6591 2919 -1
+6651 2919 -1
+6655 2919 -1
+6843 2919 -1
+6847 2919 -1
+6907 2919 -1
+6911 2919 -1
+7099 2919 -1
+7103 2919 -1
+7163 2919 -1
+7167 2919 -1
+7231 2919 -1
+7263 2919 1
+7531 2919 1
+7535 2919 -1
+10495 2919 38
+6099 2920 1
+6144 2920 -1
+6332 2920 -1
+6336 2920 -1
+6396 2920 -1
+6400 2920 -1
+6588 2920 -1
+6592 2920 -1
+6652 2920 -1
+6656 2920 -1
+6844 2920 -1
+6848 2920 -1
+6908 2920 -1
+6912 2920 -1
+7100 2920 -1
+7104 2920 -1
+7164 2920 -1
+7168 2920 -1
+7232 2920 -1
+7264 2920 1
+7532 2920 1
+7536 2920 -1
+10496 2920 38
+6145 2921 1
+6149 2921 1
+6177 2921 1
+6181 2921 1
+6209 2921 1
+6213 2921 1
+6241 2921 1
+6245 2921 1
+6540 2921 1
+6544 2921 1
+6572 2921 1
+6576 2921 1
+6604 2921 1
+6608 2921 1
+6636 2921 1
+6640 2921 1
+6675 2921 1
+6679 2921 1
+6707 2921 1
+6711 2921 1
+6739 2921 1
+6743 2921 1
+6771 2921 1
+6775 2921 1
+7066 2921 1
+7070 2921 1
+7098 2921 1
+7102 2921 1
+7130 2921 1
+7134 2921 1
+7162 2921 1
+7166 2921 1
+7169 2921 -1
+7192 2921 1
+7265 2921 1
+7281 2921 -1
+7537 2921 -1
+7549 2921 1
+10497 2921 38
+6146 2922 1
+6150 2922 1
+6178 2922 1
+6182 2922 1
+6210 2922 1
+6214 2922 1
+6242 2922 1
+6246 2922 1
+6537 2922 1
+6541 2922 1
+6569 2922 1
+6573 2922 1
+6601 2922 1
+6605 2922 1
+6633 2922 1
+6637 2922 1
+6676 2922 1
+6680 2922 1
+6708 2922 1
+6712 2922 1
+6740 2922 1
+6744 2922 1
+6772 2922 1
+6776 2922 1
+7067 2922 1
+7071 2922 1
+7099 2922 1
+7103 2922 1
+7131 2922 1
+7135 2922 1
+7163 2922 1
+7167 2922 1
+7170 2922 -1
+7189 2922 1
+7266 2922 1
+7282 2922 -1
+7538 2922 -1
+7550 2922 1
+10498 2922 38
+6147 2923 1
+6151 2923 1
+6179 2923 1
+6183 2923 1
+6211 2923 1
+6215 2923 1
+6243 2923 1
+6247 2923 1
+6538 2923 1
+6542 2923 1
+6570 2923 1
+6574 2923 1
+6602 2923 1
+6606 2923 1
+6634 2923 1
+6638 2923 1
+6673 2923 1
+6677 2923 1
+6705 2923 1
+6709 2923 1
+6737 2923 1
+6741 2923 1
+6769 2923 1
+6773 2923 1
+7068 2923 1
+7072 2923 1
+7100 2923 1
+7104 2923 1
+7132 2923 1
+7136 2923 1
+7164 2923 1
+7168 2923 1
+7171 2923 -1
+7190 2923 1
+7267 2923 1
+7283 2923 -1
+7539 2923 -1
+7551 2923 1
+10499 2923 38
+6148 2924 1
+6152 2924 1
+6180 2924 1
+6184 2924 1
+6212 2924 1
+6216 2924 1
+6244 2924 1
+6248 2924 1
+6539 2924 1
+6543 2924 1
+6571 2924 1
+6575 2924 1
+6603 2924 1
+6607 2924 1
+6635 2924 1
+6639 2924 1
+6674 2924 1
+6678 2924 1
+6706 2924 1
+6710 2924 1
+6738 2924 1
+6742 2924 1
+6770 2924 1
+6774 2924 1
+7065 2924 1
+7069 2924 1
+7097 2924 1
+7101 2924 1
+7129 2924 1
+7133 2924 1
+7161 2924 1
+7165 2924 1
+7172 2924 -1
+7191 2924 1
+7268 2924 1
+7284 2924 -1
+7540 2924 -1
+7552 2924 1
+10500 2924 38
+6153 2925 1
+6157 2925 1
+6185 2925 1
+6189 2925 1
+6217 2925 1
+6221 2925 1
+6249 2925 1
+6253 2925 1
+6548 2925 1
+6552 2925 1
+6580 2925 1
+6584 2925 1
+6612 2925 1
+6616 2925 1
+6644 2925 1
+6648 2925 1
+6683 2925 1
+6687 2925 1
+6715 2925 1
+6719 2925 1
+6747 2925 1
+6751 2925 1
+6779 2925 1
+6783 2925 1
+7042 2925 1
+7046 2925 1
+7074 2925 1
+7078 2925 1
+7106 2925 1
+7110 2925 1
+7138 2925 1
+7142 2925 1
+7173 2925 -1
+7196 2925 1
+7269 2925 1
+7285 2925 -1
+7537 2925 1
+7541 2925 -1
+10501 2925 38
+6154 2926 1
+6158 2926 1
+6186 2926 1
+6190 2926 1
+6218 2926 1
+6222 2926 1
+6250 2926 1
+6254 2926 1
+6545 2926 1
+6549 2926 1
+6577 2926 1
+6581 2926 1
+6609 2926 1
+6613 2926 1
+6641 2926 1
+6645 2926 1
+6684 2926 1
+6688 2926 1
+6716 2926 1
+6720 2926 1
+6748 2926 1
+6752 2926 1
+6780 2926 1
+6784 2926 1
+7043 2926 1
+7047 2926 1
+7075 2926 1
+7079 2926 1
+7107 2926 1
+7111 2926 1
+7139 2926 1
+7143 2926 1
+7174 2926 -1
+7193 2926 1
+7270 2926 1
+7286 2926 -1
+7538 2926 1
+7542 2926 -1
+10502 2926 38
+6155 2927 1
+6159 2927 1
+6187 2927 1
+6191 2927 1
+6219 2927 1
+6223 2927 1
+6251 2927 1
+6255 2927 1
+6546 2927 1
+6550 2927 1
+6578 2927 1
+6582 2927 1
+6610 2927 1
+6614 2927 1
+6642 2927 1
+6646 2927 1
+6681 2927 1
+6685 2927 1
+6713 2927 1
+6717 2927 1
+6745 2927 1
+6749 2927 1
+6777 2927 1
+6781 2927 1
+7044 2927 1
+7048 2927 1
+7076 2927 1
+7080 2927 1
+7108 2927 1
+7112 2927 1
+7140 2927 1
+7144 2927 1
+7175 2927 -1
+7194 2927 1
+7271 2927 1
+7287 2927 -1
+7539 2927 1
+7543 2927 -1
+10503 2927 38
+6156 2928 1
+6160 2928 1
+6188 2928 1
+6192 2928 1
+6220 2928 1
+6224 2928 1
+6252 2928 1
+6256 2928 1
+6547 2928 1
+6551 2928 1
+6579 2928 1
+6583 2928 1
+6611 2928 1
+6615 2928 1
+6643 2928 1
+6647 2928 1
+6682 2928 1
+6686 2928 1
+6714 2928 1
+6718 2928 1
+6746 2928 1
+6750 2928 1
+6778 2928 1
+6782 2928 1
+7041 2928 1
+7045 2928 1
+7073 2928 1
+7077 2928 1
+7105 2928 1
+7109 2928 1
+7137 2928 1
+7141 2928 1
+7176 2928 -1
+7195 2928 1
+7272 2928 1
+7288 2928 -1
+7540 2928 1
+7544 2928 -1
+10504 2928 38
+6161 2929 1
+6165 2929 1
+6193 2929 1
+6197 2929 1
+6225 2929 1
+6229 2929 1
+6257 2929 1
+6261 2929 1
+6556 2929 1
+6560 2929 1
+6588 2929 1
+6592 2929 1
+6620 2929 1
+6624 2929 1
+6652 2929 1
+6656 2929 1
+6659 2929 1
+6663 2929 1
+6691 2929 1
+6695 2929 1
+6723 2929 1
+6727 2929 1
+6755 2929 1
+6759 2929 1
+7050 2929 1
+7054 2929 1
+7082 2929 1
+7086 2929 1
+7114 2929 1
+7118 2929 1
+7146 2929 1
+7150 2929 1
+7177 2929 -1
+7200 2929 1
+7273 2929 1
+7289 2929 -1
+7541 2929 1
+7545 2929 -1
+10505 2929 38
+6162 2930 1
+6166 2930 1
+6194 2930 1
+6198 2930 1
+6226 2930 1
+6230 2930 1
+6258 2930 1
+6262 2930 1
+6553 2930 1
+6557 2930 1
+6585 2930 1
+6589 2930 1
+6617 2930 1
+6621 2930 1
+6649 2930 1
+6653 2930 1
+6660 2930 1
+6664 2930 1
+6692 2930 1
+6696 2930 1
+6724 2930 1
+6728 2930 1
+6756 2930 1
+6760 2930 1
+7051 2930 1
+7055 2930 1
+7083 2930 1
+7087 2930 1
+7115 2930 1
+7119 2930 1
+7147 2930 1
+7151 2930 1
+7178 2930 -1
+7197 2930 1
+7274 2930 1
+7290 2930 -1
+7542 2930 1
+7546 2930 -1
+10506 2930 38
+6163 2931 1
+6167 2931 1
+6195 2931 1
+6199 2931 1
+6227 2931 1
+6231 2931 1
+6259 2931 1
+6263 2931 1
+6554 2931 1
+6558 2931 1
+6586 2931 1
+6590 2931 1
+6618 2931 1
+6622 2931 1
+6650 2931 1
+6654 2931 1
+6657 2931 1
+6661 2931 1
+6689 2931 1
+6693 2931 1
+6721 2931 1
+6725 2931 1
+6753 2931 1
+6757 2931 1
+7052 2931 1
+7056 2931 1
+7084 2931 1
+7088 2931 1
+7116 2931 1
+7120 2931 1
+7148 2931 1
+7152 2931 1
+7179 2931 -1
+7198 2931 1
+7275 2931 1
+7291 2931 -1
+7543 2931 1
+7547 2931 -1
+10507 2931 38
+6164 2932 1
+6168 2932 1
+6196 2932 1
+6200 2932 1
+6228 2932 1
+6232 2932 1
+6260 2932 1
+6264 2932 1
+6555 2932 1
+6559 2932 1
+6587 2932 1
+6591 2932 1
+6619 2932 1
+6623 2932 1
+6651 2932 1
+6655 2932 1
+6658 2932 1
+6662 2932 1
+6690 2932 1
+6694 2932 1
+6722 2932 1
+6726 2932 1
+6754 2932 1
+6758 2932 1
+7049 2932 1
+7053 2932 1
+7081 2932 1
+7085 2932 1
+7113 2932 1
+7117 2932 1
+7145 2932 1
+7149 2932 1
+7180 2932 -1
+7199 2932 1
+7276 2932 1
+7292 2932 -1
+7544 2932 1
+7548 2932 -1
+10508 2932 38
+6169 2933 1
+6173 2933 1
+6201 2933 1
+6205 2933 1
+6233 2933 1
+6237 2933 1
+6265 2933 1
+6269 2933 1
+6532 2933 1
+6536 2933 1
+6564 2933 1
+6568 2933 1
+6596 2933 1
+6600 2933 1
+6628 2933 1
+6632 2933 1
+6667 2933 1
+6671 2933 1
+6699 2933 1
+6703 2933 1
+6731 2933 1
+6735 2933 1
+6763 2933 1
+6767 2933 1
+7058 2933 1
+7062 2933 1
+7090 2933 1
+7094 2933 1
+7122 2933 1
+7126 2933 1
+7154 2933 1
+7158 2933 1
+7181 2933 -1
+7188 2933 1
+7277 2933 1
+7293 2933 -1
+7545 2933 1
+7549 2933 -1
+10509 2933 38
+6170 2934 1
+6174 2934 1
+6202 2934 1
+6206 2934 1
+6234 2934 1
+6238 2934 1
+6266 2934 1
+6270 2934 1
+6529 2934 1
+6533 2934 1
+6561 2934 1
+6565 2934 1
+6593 2934 1
+6597 2934 1
+6625 2934 1
+6629 2934 1
+6668 2934 1
+6672 2934 1
+6700 2934 1
+6704 2934 1
+6732 2934 1
+6736 2934 1
+6764 2934 1
+6768 2934 1
+7059 2934 1
+7063 2934 1
+7091 2934 1
+7095 2934 1
+7123 2934 1
+7127 2934 1
+7155 2934 1
+7159 2934 1
+7182 2934 -1
+7185 2934 1
+7278 2934 1
+7294 2934 -1
+7546 2934 1
+7550 2934 -1
+10510 2934 38
+6171 2935 1
+6175 2935 1
+6203 2935 1
+6207 2935 1
+6235 2935 1
+6239 2935 1
+6267 2935 1
+6271 2935 1
+6530 2935 1
+6534 2935 1
+6562 2935 1
+6566 2935 1
+6594 2935 1
+6598 2935 1
+6626 2935 1
+6630 2935 1
+6665 2935 1
+6669 2935 1
+6697 2935 1
+6701 2935 1
+6729 2935 1
+6733 2935 1
+6761 2935 1
+6765 2935 1
+7060 2935 1
+7064 2935 1
+7092 2935 1
+7096 2935 1
+7124 2935 1
+7128 2935 1
+7156 2935 1
+7160 2935 1
+7183 2935 -1
+7186 2935 1
+7279 2935 1
+7295 2935 -1
+7547 2935 1
+7551 2935 -1
+10511 2935 38
+6172 2936 1
+6176 2936 1
+6204 2936 1
+6208 2936 1
+6236 2936 1
+6240 2936 1
+6268 2936 1
+6272 2936 1
+6531 2936 1
+6535 2936 1
+6563 2936 1
+6567 2936 1
+6595 2936 1
+6599 2936 1
+6627 2936 1
+6631 2936 1
+6666 2936 1
+6670 2936 1
+6698 2936 1
+6702 2936 1
+6730 2936 1
+6734 2936 1
+6762 2936 1
+6766 2936 1
+7057 2936 1
+7061 2936 1
+7089 2936 1
+7093 2936 1
+7121 2936 1
+7125 2936 1
+7153 2936 1
+7157 2936 1
+7184 2936 -1
+7187 2936 1
+7280 2936 1
+7296 2936 -1
+7548 2936 1
+7552 2936 -1
+10512 2936 38
+6273 2937 1
+6277 2937 1
+6305 2937 1
+6309 2937 1
+6337 2937 1
+6341 2937 1
+6369 2937 1
+6373 2937 1
+6412 2937 1
+6416 2937 1
+6444 2937 1
+6448 2937 1
+6476 2937 1
+6480 2937 1
+6508 2937 1
+6512 2937 1
+6803 2937 1
+6807 2937 1
+6835 2937 1
+6839 2937 1
+6867 2937 1
+6871 2937 1
+6899 2937 1
+6903 2937 1
+6938 2937 1
+6942 2937 1
+6970 2937 1
+6974 2937 1
+7002 2937 1
+7006 2937 1
+7034 2937 1
+7038 2937 1
+7176 2937 1
+7185 2937 -1
+7265 2937 -1
+7281 2937 1
+7553 2937 -1
+7565 2937 1
+10513 2937 38
+6274 2938 1
+6278 2938 1
+6306 2938 1
+6310 2938 1
+6338 2938 1
+6342 2938 1
+6370 2938 1
+6374 2938 1
+6409 2938 1
+6413 2938 1
+6441 2938 1
+6445 2938 1
+6473 2938 1
+6477 2938 1
+6505 2938 1
+6509 2938 1
+6804 2938 1
+6808 2938 1
+6836 2938 1
+6840 2938 1
+6868 2938 1
+6872 2938 1
+6900 2938 1
+6904 2938 1
+6939 2938 1
+6943 2938 1
+6971 2938 1
+6975 2938 1
+7003 2938 1
+7007 2938 1
+7035 2938 1
+7039 2938 1
+7173 2938 1
+7186 2938 -1
+7266 2938 -1
+7282 2938 1
+7554 2938 -1
+7566 2938 1
+10514 2938 38
+6275 2939 1
+6279 2939 1
+6307 2939 1
+6311 2939 1
+6339 2939 1
+6343 2939 1
+6371 2939 1
+6375 2939 1
+6410 2939 1
+6414 2939 1
+6442 2939 1
+6446 2939 1
+6474 2939 1
+6478 2939 1
+6506 2939 1
+6510 2939 1
+6801 2939 1
+6805 2939 1
+6833 2939 1
+6837 2939 1
+6865 2939 1
+6869 2939 1
+6897 2939 1
+6901 2939 1
+6940 2939 1
+6944 2939 1
+6972 2939 1
+6976 2939 1
+7004 2939 1
+7008 2939 1
+7036 2939 1
+7040 2939 1
+7174 2939 1
+7187 2939 -1
+7267 2939 -1
+7283 2939 1
+7555 2939 -1
+7567 2939 1
+10515 2939 38
+6276 2940 1
+6280 2940 1
+6308 2940 1
+6312 2940 1
+6340 2940 1
+6344 2940 1
+6372 2940 1
+6376 2940 1
+6411 2940 1
+6415 2940 1
+6443 2940 1
+6447 2940 1
+6475 2940 1
+6479 2940 1
+6507 2940 1
+6511 2940 1
+6802 2940 1
+6806 2940 1
+6834 2940 1
+6838 2940 1
+6866 2940 1
+6870 2940 1
+6898 2940 1
+6902 2940 1
+6937 2940 1
+6941 2940 1
+6969 2940 1
+6973 2940 1
+7001 2940 1
+7005 2940 1
+7033 2940 1
+7037 2940 1
+7175 2940 1
+7188 2940 -1
+7268 2940 -1
+7284 2940 1
+7556 2940 -1
+7568 2940 1
+10516 2940 38
+6281 2941 1
+6285 2941 1
+6313 2941 1
+6317 2941 1
+6345 2941 1
+6349 2941 1
+6377 2941 1
+6381 2941 1
+6420 2941 1
+6424 2941 1
+6452 2941 1
+6456 2941 1
+6484 2941 1
+6488 2941 1
+6516 2941 1
+6520 2941 1
+6811 2941 1
+6815 2941 1
+6843 2941 1
+6847 2941 1
+6875 2941 1
+6879 2941 1
+6907 2941 1
+6911 2941 1
+6914 2941 1
+6918 2941 1
+6946 2941 1
+6950 2941 1
+6978 2941 1
+6982 2941 1
+7010 2941 1
+7014 2941 1
+7180 2941 1
+7189 2941 -1
+7269 2941 -1
+7285 2941 1
+7553 2941 1
+7557 2941 -1
+10517 2941 38
+6282 2942 1
+6286 2942 1
+6314 2942 1
+6318 2942 1
+6346 2942 1
+6350 2942 1
+6378 2942 1
+6382 2942 1
+6417 2942 1
+6421 2942 1
+6449 2942 1
+6453 2942 1
+6481 2942 1
+6485 2942 1
+6513 2942 1
+6517 2942 1
+6812 2942 1
+6816 2942 1
+6844 2942 1
+6848 2942 1
+6876 2942 1
+6880 2942 1
+6908 2942 1
+6912 2942 1
+6915 2942 1
+6919 2942 1
+6947 2942 1
+6951 2942 1
+6979 2942 1
+6983 2942 1
+7011 2942 1
+7015 2942 1
+7177 2942 1
+7190 2942 -1
+7270 2942 -1
+7286 2942 1
+7554 2942 1
+7558 2942 -1
+10518 2942 38
+6283 2943 1
+6287 2943 1
+6315 2943 1
+6319 2943 1
+6347 2943 1
+6351 2943 1
+6379 2943 1
+6383 2943 1
+6418 2943 1
+6422 2943 1
+6450 2943 1
+6454 2943 1
+6482 2943 1
+6486 2943 1
+6514 2943 1
+6518 2943 1
+6809 2943 1
+6813 2943 1
+6841 2943 1
+6845 2943 1
+6873 2943 1
+6877 2943 1
+6905 2943 1
+6909 2943 1
+6916 2943 1
+6920 2943 1
+6948 2943 1
+6952 2943 1
+6980 2943 1
+6984 2943 1
+7012 2943 1
+7016 2943 1
+7178 2943 1
+7191 2943 -1
+7271 2943 -1
+7287 2943 1
+7555 2943 1
+7559 2943 -1
+10519 2943 38
+6284 2944 1
+6288 2944 1
+6316 2944 1
+6320 2944 1
+6348 2944 1
+6352 2944 1
+6380 2944 1
+6384 2944 1
+6419 2944 1
+6423 2944 1
+6451 2944 1
+6455 2944 1
+6483 2944 1
+6487 2944 1
+6515 2944 1
+6519 2944 1
+6810 2944 1
+6814 2944 1
+6842 2944 1
+6846 2944 1
+6874 2944 1
+6878 2944 1
+6906 2944 1
+6910 2944 1
+6913 2944 1
+6917 2944 1
+6945 2944 1
+6949 2944 1
+6977 2944 1
+6981 2944 1
+7009 2944 1
+7013 2944 1
+7179 2944 1
+7192 2944 -1
+7272 2944 -1
+7288 2944 1
+7556 2944 1
+7560 2944 -1
+10520 2944 38
+6289 2945 1
+6293 2945 1
+6321 2945 1
+6325 2945 1
+6353 2945 1
+6357 2945 1
+6385 2945 1
+6389 2945 1
+6428 2945 1
+6432 2945 1
+6460 2945 1
+6464 2945 1
+6492 2945 1
+6496 2945 1
+6524 2945 1
+6528 2945 1
+6787 2945 1
+6791 2945 1
+6819 2945 1
+6823 2945 1
+6851 2945 1
+6855 2945 1
+6883 2945 1
+6887 2945 1
+6922 2945 1
+6926 2945 1
+6954 2945 1
+6958 2945 1
+6986 2945 1
+6990 2945 1
+7018 2945 1
+7022 2945 1
+7184 2945 1
+7193 2945 -1
+7273 2945 -1
+7289 2945 1
+7557 2945 1
+7561 2945 -1
+10521 2945 38
+6290 2946 1
+6294 2946 1
+6322 2946 1
+6326 2946 1
+6354 2946 1
+6358 2946 1
+6386 2946 1
+6390 2946 1
+6425 2946 1
+6429 2946 1
+6457 2946 1
+6461 2946 1
+6489 2946 1
+6493 2946 1
+6521 2946 1
+6525 2946 1
+6788 2946 1
+6792 2946 1
+6820 2946 1
+6824 2946 1
+6852 2946 1
+6856 2946 1
+6884 2946 1
+6888 2946 1
+6923 2946 1
+6927 2946 1
+6955 2946 1
+6959 2946 1
+6987 2946 1
+6991 2946 1
+7019 2946 1
+7023 2946 1
+7181 2946 1
+7194 2946 -1
+7274 2946 -1
+7290 2946 1
+7558 2946 1
+7562 2946 -1
+10522 2946 38
+6291 2947 1
+6295 2947 1
+6323 2947 1
+6327 2947 1
+6355 2947 1
+6359 2947 1
+6387 2947 1
+6391 2947 1
+6426 2947 1
+6430 2947 1
+6458 2947 1
+6462 2947 1
+6490 2947 1
+6494 2947 1
+6522 2947 1
+6526 2947 1
+6785 2947 1
+6789 2947 1
+6817 2947 1
+6821 2947 1
+6849 2947 1
+6853 2947 1
+6881 2947 1
+6885 2947 1
+6924 2947 1
+6928 2947 1
+6956 2947 1
+6960 2947 1
+6988 2947 1
+6992 2947 1
+7020 2947 1
+7024 2947 1
+7182 2947 1
+7195 2947 -1
+7275 2947 -1
+7291 2947 1
+7559 2947 1
+7563 2947 -1
+10523 2947 38
+6292 2948 1
+6296 2948 1
+6324 2948 1
+6328 2948 1
+6356 2948 1
+6360 2948 1
+6388 2948 1
+6392 2948 1
+6427 2948 1
+6431 2948 1
+6459 2948 1
+6463 2948 1
+6491 2948 1
+6495 2948 1
+6523 2948 1
+6527 2948 1
+6786 2948 1
+6790 2948 1
+6818 2948 1
+6822 2948 1
+6850 2948 1
+6854 2948 1
+6882 2948 1
+6886 2948 1
+6921 2948 1
+6925 2948 1
+6953 2948 1
+6957 2948 1
+6985 2948 1
+6989 2948 1
+7017 2948 1
+7021 2948 1
+7183 2948 1
+7196 2948 -1
+7276 2948 -1
+7292 2948 1
+7560 2948 1
+7564 2948 -1
+10524 2948 38
+6297 2949 1
+6301 2949 1
+6329 2949 1
+6333 2949 1
+6361 2949 1
+6365 2949 1
+6393 2949 1
+6397 2949 1
+6404 2949 1
+6408 2949 1
+6436 2949 1
+6440 2949 1
+6468 2949 1
+6472 2949 1
+6500 2949 1
+6504 2949 1
+6795 2949 1
+6799 2949 1
+6827 2949 1
+6831 2949 1
+6859 2949 1
+6863 2949 1
+6891 2949 1
+6895 2949 1
+6930 2949 1
+6934 2949 1
+6962 2949 1
+6966 2949 1
+6994 2949 1
+6998 2949 1
+7026 2949 1
+7030 2949 1
+7172 2949 1
+7197 2949 -1
+7277 2949 -1
+7293 2949 1
+7561 2949 1
+7565 2949 -1
+10525 2949 38
+6298 2950 1
+6302 2950 1
+6330 2950 1
+6334 2950 1
+6362 2950 1
+6366 2950 1
+6394 2950 1
+6398 2950 1
+6401 2950 1
+6405 2950 1
+6433 2950 1
+6437 2950 1
+6465 2950 1
+6469 2950 1
+6497 2950 1
+6501 2950 1
+6796 2950 1
+6800 2950 1
+6828 2950 1
+6832 2950 1
+6860 2950 1
+6864 2950 1
+6892 2950 1
+6896 2950 1
+6931 2950 1
+6935 2950 1
+6963 2950 1
+6967 2950 1
+6995 2950 1
+6999 2950 1
+7027 2950 1
+7031 2950 1
+7169 2950 1
+7198 2950 -1
+7278 2950 -1
+7294 2950 1
+7562 2950 1
+7566 2950 -1
+10526 2950 38
+6299 2951 1
+6303 2951 1
+6331 2951 1
+6335 2951 1
+6363 2951 1
+6367 2951 1
+6395 2951 1
+6399 2951 1
+6402 2951 1
+6406 2951 1
+6434 2951 1
+6438 2951 1
+6466 2951 1
+6470 2951 1
+6498 2951 1
+6502 2951 1
+6793 2951 1
+6797 2951 1
+6825 2951 1
+6829 2951 1
+6857 2951 1
+6861 2951 1
+6889 2951 1
+6893 2951 1
+6932 2951 1
+6936 2951 1
+6964 2951 1
+6968 2951 1
+6996 2951 1
+7000 2951 1
+7028 2951 1
+7032 2951 1
+7170 2951 1
+7199 2951 -1
+7279 2951 -1
+7295 2951 1
+7563 2951 1
+7567 2951 -1
+10527 2951 38
+6300 2952 1
+6304 2952 1
+6332 2952 1
+6336 2952 1
+6364 2952 1
+6368 2952 1
+6396 2952 1
+6400 2952 1
+6403 2952 1
+6407 2952 1
+6435 2952 1
+6439 2952 1
+6467 2952 1
+6471 2952 1
+6499 2952 1
+6503 2952 1
+6794 2952 1
+6798 2952 1
+6826 2952 1
+6830 2952 1
+6858 2952 1
+6862 2952 1
+6890 2952 1
+6894 2952 1
+6929 2952 1
+6933 2952 1
+6961 2952 1
+6965 2952 1
+6993 2952 1
+6997 2952 1
+7025 2952 1
+7029 2952 1
+7171 2952 1
+7200 2952 -1
+7280 2952 -1
+7296 2952 1
+7564 2952 1
+7568 2952 -1
+10528 2952 38
+7201 2953 1
+7211 2953 1
+7217 2953 1
+7227 2953 1
+7240 2953 1
+7246 2953 1
+7256 2953 1
+7262 2953 1
+7265 2953 1
+7275 2953 1
+7288 2953 1
+7294 2953 1
+7569 2953 -1
+7575 2953 1
+10529 2953 38
+7202 2954 1
+7212 2954 1
+7218 2954 1
+7228 2954 1
+7237 2954 1
+7247 2954 1
+7253 2954 1
+7263 2954 1
+7266 2954 1
+7276 2954 1
+7285 2954 1
+7295 2954 1
+7570 2954 -1
+7576 2954 1
+10530 2954 38
+7203 2955 1
+7209 2955 1
+7219 2955 1
+7225 2955 1
+7238 2955 1
+7248 2955 1
+7254 2955 1
+7264 2955 1
+7267 2955 1
+7273 2955 1
+7286 2955 1
+7296 2955 1
+7571 2955 -1
+7573 2955 1
+10531 2955 38
+7204 2956 1
+7210 2956 1
+7220 2956 1
+7226 2956 1
+7239 2956 1
+7245 2956 1
+7255 2956 1
+7261 2956 1
+7268 2956 1
+7274 2956 1
+7287 2956 1
+7293 2956 1
+7572 2956 -1
+7574 2956 1
+10532 2956 38
+7205 2957 1
+7215 2957 1
+7221 2957 1
+7231 2957 1
+7234 2957 1
+7244 2957 1
+7250 2957 1
+7260 2957 1
+7269 2957 1
+7279 2957 1
+7282 2957 1
+7292 2957 1
+7569 2957 1
+7573 2957 -1
+10533 2957 38
+7206 2958 1
+7216 2958 1
+7222 2958 1
+7232 2958 1
+7235 2958 1
+7241 2958 1
+7251 2958 1
+7257 2958 1
+7270 2958 1
+7280 2958 1
+7283 2958 1
+7289 2958 1
+7570 2958 1
+7574 2958 -1
+10534 2958 38
+7207 2959 1
+7213 2959 1
+7223 2959 1
+7229 2959 1
+7236 2959 1
+7242 2959 1
+7252 2959 1
+7258 2959 1
+7271 2959 1
+7277 2959 1
+7284 2959 1
+7290 2959 1
+7571 2959 1
+7575 2959 -1
+10535 2959 38
+7208 2960 1
+7214 2960 1
+7224 2960 1
+7230 2960 1
+7233 2960 1
+7243 2960 1
+7249 2960 1
+7259 2960 1
+7272 2960 1
+7278 2960 1
+7281 2960 1
+7291 2960 1
+7572 2960 1
+7576 2960 -1
+10536 2960 38
+7297 2961 -1
+7320 2961 1
+7329 2961 -1
+7361 2961 -1
+7393 2961 -1
+7425 2961 -1
+7473 2961 -1
+7505 2961 -1
+10537 2961 38
+7298 2962 -1
+7317 2962 1
+7330 2962 -1
+7362 2962 -1
+7394 2962 -1
+7426 2962 -1
+7474 2962 -1
+7506 2962 -1
+10538 2962 38
+7299 2963 -1
+7318 2963 1
+7331 2963 -1
+7363 2963 -1
+7395 2963 -1
+7427 2963 -1
+7475 2963 -1
+7507 2963 -1
+10539 2963 38
+7300 2964 -1
+7319 2964 1
+7332 2964 -1
+7364 2964 -1
+7396 2964 -1
+7428 2964 -1
+7476 2964 -1
+7508 2964 -1
+10540 2964 38
+7301 2965 -1
+7324 2965 1
+7333 2965 -1
+7365 2965 -1
+7397 2965 -1
+7429 2965 -1
+7477 2965 -1
+7509 2965 -1
+10541 2965 38
+7302 2966 -1
+7321 2966 1
+7334 2966 -1
+7366 2966 -1
+7398 2966 -1
+7430 2966 -1
+7478 2966 -1
+7510 2966 -1
+10542 2966 38
+7303 2967 -1
+7322 2967 1
+7335 2967 -1
+7367 2967 -1
+7399 2967 -1
+7431 2967 -1
+7479 2967 -1
+7511 2967 -1
+10543 2967 38
+7304 2968 -1
+7323 2968 1
+7336 2968 -1
+7368 2968 -1
+7400 2968 -1
+7432 2968 -1
+7480 2968 -1
+7512 2968 -1
+10544 2968 38
+7305 2969 -1
+7328 2969 1
+7337 2969 -1
+7369 2969 -1
+7401 2969 -1
+7433 2969 -1
+7481 2969 -1
+7513 2969 -1
+10545 2969 38
+7306 2970 -1
+7325 2970 1
+7338 2970 -1
+7370 2970 -1
+7402 2970 -1
+7434 2970 -1
+7482 2970 -1
+7514 2970 -1
+10546 2970 38
+7307 2971 -1
+7326 2971 1
+7339 2971 -1
+7371 2971 -1
+7403 2971 -1
+7435 2971 -1
+7483 2971 -1
+7515 2971 -1
+10547 2971 38
+7308 2972 -1
+7327 2972 1
+7340 2972 -1
+7372 2972 -1
+7404 2972 -1
+7436 2972 -1
+7484 2972 -1
+7516 2972 -1
+10548 2972 38
+7300 2973 1
+7309 2973 -1
+7341 2973 -1
+7373 2973 -1
+7405 2973 -1
+7437 2973 -1
+7485 2973 -1
+7517 2973 -1
+10549 2973 38
+7297 2974 1
+7310 2974 -1
+7342 2974 -1
+7374 2974 -1
+7406 2974 -1
+7438 2974 -1
+7486 2974 -1
+7518 2974 -1
+10550 2974 38
+7298 2975 1
+7311 2975 -1
+7343 2975 -1
+7375 2975 -1
+7407 2975 -1
+7439 2975 -1
+7487 2975 -1
+7519 2975 -1
+10551 2975 38
+7299 2976 1
+7312 2976 -1
+7344 2976 -1
+7376 2976 -1
+7408 2976 -1
+7440 2976 -1
+7488 2976 -1
+7520 2976 -1
+10552 2976 38
+7304 2977 1
+7313 2977 -1
+7345 2977 -1
+7377 2977 -1
+7409 2977 -1
+7441 2977 -1
+7489 2977 -1
+7521 2977 -1
+10553 2977 38
+7301 2978 1
+7314 2978 -1
+7346 2978 -1
+7378 2978 -1
+7410 2978 -1
+7442 2978 -1
+7490 2978 -1
+7522 2978 -1
+10554 2978 38
+7302 2979 1
+7315 2979 -1
+7347 2979 -1
+7379 2979 -1
+7411 2979 -1
+7443 2979 -1
+7491 2979 -1
+7523 2979 -1
+10555 2979 38
+7303 2980 1
+7316 2980 -1
+7348 2980 -1
+7380 2980 -1
+7412 2980 -1
+7444 2980 -1
+7492 2980 -1
+7524 2980 -1
+10556 2980 38
+7308 2981 1
+7317 2981 -1
+7349 2981 -1
+7381 2981 -1
+7413 2981 -1
+7445 2981 -1
+7493 2981 -1
+7525 2981 -1
+10557 2981 38
+7305 2982 1
+7318 2982 -1
+7350 2982 -1
+7382 2982 -1
+7414 2982 -1
+7446 2982 -1
+7494 2982 -1
+7526 2982 -1
+10558 2982 38
+7306 2983 1
+7319 2983 -1
+7351 2983 -1
+7383 2983 -1
+7415 2983 -1
+7447 2983 -1
+7495 2983 -1
+7527 2983 -1
+10559 2983 38
+7307 2984 1
+7320 2984 -1
+7352 2984 -1
+7384 2984 -1
+7416 2984 -1
+7448 2984 -1
+7496 2984 -1
+7528 2984 -1
+10560 2984 38
+7312 2985 1
+7321 2985 -1
+7353 2985 -1
+7385 2985 -1
+7417 2985 -1
+7449 2985 -1
+7497 2985 -1
+7529 2985 -1
+10561 2985 38
+7309 2986 1
+7322 2986 -1
+7354 2986 -1
+7386 2986 -1
+7418 2986 -1
+7450 2986 -1
+7498 2986 -1
+7530 2986 -1
+10562 2986 38
+7310 2987 1
+7323 2987 -1
+7355 2987 -1
+7387 2987 -1
+7419 2987 -1
+7451 2987 -1
+7499 2987 -1
+7531 2987 -1
+10563 2987 38
+7311 2988 1
+7324 2988 -1
+7356 2988 -1
+7388 2988 -1
+7420 2988 -1
+7452 2988 -1
+7500 2988 -1
+7532 2988 -1
+10564 2988 38
+7316 2989 1
+7325 2989 -1
+7357 2989 -1
+7389 2989 -1
+7421 2989 -1
+7453 2989 -1
+7501 2989 -1
+7533 2989 -1
+10565 2989 38
+7313 2990 1
+7326 2990 -1
+7358 2990 -1
+7390 2990 -1
+7422 2990 -1
+7454 2990 -1
+7502 2990 -1
+7534 2990 -1
+10566 2990 38
+7314 2991 1
+7327 2991 -1
+7359 2991 -1
+7391 2991 -1
+7423 2991 -1
+7455 2991 -1
+7503 2991 -1
+7535 2991 -1
+10567 2991 38
+7315 2992 1
+7328 2992 -1
+7360 2992 -1
+7392 2992 -1
+7424 2992 -1
+7456 2992 -1
+7504 2992 -1
+7536 2992 -1
+10568 2992 38
+7329 2993 1
+7345 2993 1
+7368 2993 1
+7384 2993 1
+7403 2993 1
+7419 2993 1
+7438 2993 1
+7454 2993 1
+7457 2993 -1
+7464 2993 1
+7537 2993 -1
+7553 2993 -1
+10569 2993 38
+7330 2994 1
+7346 2994 1
+7365 2994 1
+7381 2994 1
+7404 2994 1
+7420 2994 1
+7439 2994 1
+7455 2994 1
+7458 2994 -1
+7461 2994 1
+7538 2994 -1
+7554 2994 -1
+10570 2994 38
+7331 2995 1
+7347 2995 1
+7366 2995 1
+7382 2995 1
+7401 2995 1
+7417 2995 1
+7440 2995 1
+7456 2995 1
+7459 2995 -1
+7462 2995 1
+7539 2995 -1
+7555 2995 -1
+10571 2995 38
+7332 2996 1
+7348 2996 1
+7367 2996 1
+7383 2996 1
+7402 2996 1
+7418 2996 1
+7437 2996 1
+7453 2996 1
+7460 2996 -1
+7463 2996 1
+7540 2996 -1
+7556 2996 -1
+10572 2996 38
+7333 2997 1
+7349 2997 1
+7372 2997 1
+7388 2997 1
+7407 2997 1
+7423 2997 1
+7426 2997 1
+7442 2997 1
+7461 2997 -1
+7468 2997 1
+7541 2997 -1
+7557 2997 -1
+10573 2997 38
+7334 2998 1
+7350 2998 1
+7369 2998 1
+7385 2998 1
+7408 2998 1
+7424 2998 1
+7427 2998 1
+7443 2998 1
+7462 2998 -1
+7465 2998 1
+7542 2998 -1
+7558 2998 -1
+10574 2998 38
+7335 2999 1
+7351 2999 1
+7370 2999 1
+7386 2999 1
+7405 2999 1
+7421 2999 1
+7428 2999 1
+7444 2999 1
+7463 2999 -1
+7466 2999 1
+7543 2999 -1
+7559 2999 -1
+10575 2999 38
+7336 3000 1
+7352 3000 1
+7371 3000 1
+7387 3000 1
+7406 3000 1
+7422 3000 1
+7425 3000 1
+7441 3000 1
+7464 3000 -1
+7467 3000 1
+7544 3000 -1
+7560 3000 -1
+10576 3000 38
+7337 3001 1
+7353 3001 1
+7376 3001 1
+7392 3001 1
+7395 3001 1
+7411 3001 1
+7430 3001 1
+7446 3001 1
+7465 3001 -1
+7472 3001 1
+7545 3001 -1
+7561 3001 -1
+10577 3001 38
+7338 3002 1
+7354 3002 1
+7373 3002 1
+7389 3002 1
+7396 3002 1
+7412 3002 1
+7431 3002 1
+7447 3002 1
+7466 3002 -1
+7469 3002 1
+7546 3002 -1
+7562 3002 -1
+10578 3002 38
+7339 3003 1
+7355 3003 1
+7374 3003 1
+7390 3003 1
+7393 3003 1
+7409 3003 1
+7432 3003 1
+7448 3003 1
+7467 3003 -1
+7470 3003 1
+7547 3003 -1
+7563 3003 -1
+10579 3003 38
+7340 3004 1
+7356 3004 1
+7375 3004 1
+7391 3004 1
+7394 3004 1
+7410 3004 1
+7429 3004 1
+7445 3004 1
+7468 3004 -1
+7471 3004 1
+7548 3004 -1
+7564 3004 -1
+10580 3004 38
+7341 3005 1
+7357 3005 1
+7364 3005 1
+7380 3005 1
+7399 3005 1
+7415 3005 1
+7434 3005 1
+7450 3005 1
+7460 3005 1
+7469 3005 -1
+7549 3005 -1
+7565 3005 -1
+10581 3005 38
+7342 3006 1
+7358 3006 1
+7361 3006 1
+7377 3006 1
+7400 3006 1
+7416 3006 1
+7435 3006 1
+7451 3006 1
+7457 3006 1
+7470 3006 -1
+7550 3006 -1
+7566 3006 -1
+10582 3006 38
+7343 3007 1
+7359 3007 1
+7362 3007 1
+7378 3007 1
+7397 3007 1
+7413 3007 1
+7436 3007 1
+7452 3007 1
+7458 3007 1
+7471 3007 -1
+7551 3007 -1
+7567 3007 -1
+10583 3007 38
+7344 3008 1
+7360 3008 1
+7363 3008 1
+7379 3008 1
+7398 3008 1
+7414 3008 1
+7433 3008 1
+7449 3008 1
+7459 3008 1
+7472 3008 -1
+7552 3008 -1
+7568 3008 -1
+10584 3008 38
+7473 3009 1
+7483 3009 1
+7489 3009 1
+7499 3009 1
+7512 3009 1
+7518 3009 1
+7528 3009 1
+7534 3009 1
+7537 3009 1
+7547 3009 1
+7560 3009 1
+7566 3009 1
+7569 3009 -1
+7576 3009 1
+10585 3009 38
+7474 3010 1
+7484 3010 1
+7490 3010 1
+7500 3010 1
+7509 3010 1
+7519 3010 1
+7525 3010 1
+7535 3010 1
+7538 3010 1
+7548 3010 1
+7557 3010 1
+7567 3010 1
+7570 3010 -1
+7573 3010 1
+10586 3010 38
+7475 3011 1
+7481 3011 1
+7491 3011 1
+7497 3011 1
+7510 3011 1
+7520 3011 1
+7526 3011 1
+7536 3011 1
+7539 3011 1
+7545 3011 1
+7558 3011 1
+7568 3011 1
+7571 3011 -1
+7574 3011 1
+10587 3011 38
+7476 3012 1
+7482 3012 1
+7492 3012 1
+7498 3012 1
+7511 3012 1
+7517 3012 1
+7527 3012 1
+7533 3012 1
+7540 3012 1
+7546 3012 1
+7559 3012 1
+7565 3012 1
+7572 3012 -1
+7575 3012 1
+10588 3012 38
+7477 3013 1
+7487 3013 1
+7493 3013 1
+7503 3013 1
+7506 3013 1
+7516 3013 1
+7522 3013 1
+7532 3013 1
+7541 3013 1
+7551 3013 1
+7554 3013 1
+7564 3013 1
+7570 3013 1
+7573 3013 -1
+10589 3013 38
+7478 3014 1
+7488 3014 1
+7494 3014 1
+7504 3014 1
+7507 3014 1
+7513 3014 1
+7523 3014 1
+7529 3014 1
+7542 3014 1
+7552 3014 1
+7555 3014 1
+7561 3014 1
+7571 3014 1
+7574 3014 -1
+10590 3014 38
+7479 3015 1
+7485 3015 1
+7495 3015 1
+7501 3015 1
+7508 3015 1
+7514 3015 1
+7524 3015 1
+7530 3015 1
+7543 3015 1
+7549 3015 1
+7556 3015 1
+7562 3015 1
+7572 3015 1
+7575 3015 -1
+10591 3015 38
+7480 3016 1
+7486 3016 1
+7496 3016 1
+7502 3016 1
+7505 3016 1
+7515 3016 1
+7521 3016 1
+7531 3016 1
+7544 3016 1
+7550 3016 1
+7553 3016 1
+7563 3016 1
+7569 3016 1
+7576 3016 -1
+10592 3016 38
diff --git a/SPQR/Matrix/GD01_b.mtx b/SPQR/Matrix/GD01_b.mtx
new file mode 100644
index 0000000..d9e82ba
--- /dev/null
+++ b/SPQR/Matrix/GD01_b.mtx
@@ -0,0 +1,61 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Pajek/GD01_b
+% name: Pajek/GD01_b
+% [Pajek network: Graph Drawing contest 2001]
+% id: 1479
+% date: 2001
+% author: Graph Drawing Contest
+% ed: V. Batagelj
+% fields: name title A id kind notes aux date author ed
+% aux: nodename coord
+% kind: directed graph
+%-------------------------------------------------------------------------------
+% notes:
+% ------------------------------------------------------------------------------
+% Pajek network converted to sparse adjacency matrix for inclusion in UF sparse 
+% matrix collection, Tim Davis.  For Pajek datasets, See V. Batagelj & A. Mrvar,
+% http://vlado.fmf.uni-lj.si/pub/networks/data/.                                
+% ------------------------------------------------------------------------------
+% The original problem had 3D xyz coordinates, but all values of z were equal   
+% to 0.5, and have been removed.  This graph has 2D coordinates.                
+%-------------------------------------------------------------------------------
+18 18 37
+1 1
+7 1
+1 2
+8 2
+2 3
+6 3
+9 3
+3 4
+16 4
+4 5
+9 5
+5 6
+6 7
+8 7
+2 8
+7 8
+3 9
+5 9
+4 10
+17 10
+10 11
+11 12
+15 12
+18 12
+12 13
+13 13
+13 14
+15 14
+18 14
+14 15
+11 16
+14 16
+17 16
+10 17
+16 17
+12 18
+14 18
diff --git a/SPQR/Matrix/GD06_theory.mtx b/SPQR/Matrix/GD06_theory.mtx
new file mode 100644
index 0000000..3c5dbdd
--- /dev/null
+++ b/SPQR/Matrix/GD06_theory.mtx
@@ -0,0 +1,215 @@
+%%MatrixMarket matrix coordinate pattern symmetric
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Pajek/GD06_theory
+% name: Pajek/GD06_theory
+% [Pajek network: Graph Drawing contest 2006]
+% id: 1484
+% date: 2006
+% author: Graph Drawing Contest
+% ed: V. Batagelj
+% fields: name title A id kind notes date author ed
+% kind: undirected graph
+%-------------------------------------------------------------------------------
+% notes:
+% ------------------------------------------------------------------------------
+% Pajek network converted to sparse adjacency matrix for inclusion in UF sparse 
+% matrix collection, Tim Davis.  For Pajek datasets, See V. Batagelj & A. Mrvar,
+% http://vlado.fmf.uni-lj.si/pub/networks/data/.                                
+% ------------------------------------------------------------------------------
+%  GD 2006 contest graph A: Theory                                              
+%  http://gd2006.org/contest/details.php#theory                                 
+%  graph in Pajek format                                                        
+%  transformed by Vladimir Batagelj, July 10, 2006                              
+%-------------------------------------------------------------------------------
+101 101 190
+2 1
+3 1
+4 1
+5 1
+6 1
+7 1
+8 1
+9 1
+10 1
+11 1
+21 1
+31 1
+41 1
+51 1
+61 1
+71 1
+81 1
+91 1
+101 1
+12 2
+23 3
+34 4
+45 5
+56 6
+67 7
+78 8
+89 9
+100 10
+12 11
+13 12
+14 12
+15 12
+16 12
+17 12
+18 12
+19 12
+20 12
+22 12
+32 12
+42 12
+52 12
+62 12
+72 12
+82 12
+92 12
+101 12
+23 13
+34 14
+45 15
+56 16
+67 17
+78 18
+89 19
+100 20
+23 21
+23 22
+24 23
+25 23
+26 23
+27 23
+28 23
+29 23
+30 23
+33 23
+43 23
+53 23
+63 23
+73 23
+83 23
+93 23
+101 23
+34 24
+45 25
+56 26
+67 27
+78 28
+89 29
+100 30
+34 31
+34 32
+34 33
+35 34
+36 34
+37 34
+38 34
+39 34
+40 34
+44 34
+54 34
+64 34
+74 34
+84 34
+94 34
+101 34
+45 35
+56 36
+67 37
+78 38
+89 39
+100 40
+45 41
+45 42
+45 43
+45 44
+46 45
+47 45
+48 45
+49 45
+50 45
+55 45
+65 45
+75 45
+85 45
+95 45
+101 45
+56 46
+67 47
+78 48
+89 49
+100 50
+56 51
+56 52
+56 53
+56 54
+56 55
+57 56
+58 56
+59 56
+60 56
+66 56
+76 56
+86 56
+96 56
+101 56
+67 57
+78 58
+89 59
+100 60
+67 61
+67 62
+67 63
+67 64
+67 65
+67 66
+68 67
+69 67
+70 67
+77 67
+87 67
+97 67
+101 67
+78 68
+89 69
+100 70
+78 71
+78 72
+78 73
+78 74
+78 75
+78 76
+78 77
+79 78
+80 78
+88 78
+98 78
+101 78
+89 79
+100 80
+89 81
+89 82
+89 83
+89 84
+89 85
+89 86
+89 87
+89 88
+90 89
+99 89
+101 89
+100 90
+100 91
+100 92
+100 93
+100 94
+100 95
+100 96
+100 97
+100 98
+100 99
+101 100
diff --git a/SPQR/Matrix/GD98_a.mtx b/SPQR/Matrix/GD98_a.mtx
new file mode 100644
index 0000000..a70e27d
--- /dev/null
+++ b/SPQR/Matrix/GD98_a.mtx
@@ -0,0 +1,74 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Pajek/GD98_a
+% name: Pajek/GD98_a
+% [Pajek network: Graph Drawing contest 1998]
+% id: 1495
+% date: 1998
+% author: Graph Drawing Contest
+% ed: V. Batagelj
+% fields: name title A id kind notes aux date author ed
+% aux: nodename coord
+% kind: directed graph
+%-------------------------------------------------------------------------------
+% notes:
+% ------------------------------------------------------------------------------
+% Pajek network converted to sparse adjacency matrix for inclusion in UF sparse 
+% matrix collection, Tim Davis.  For Pajek datasets, See V. Batagelj & A. Mrvar,
+% http://vlado.fmf.uni-lj.si/pub/networks/data/.                                
+% ------------------------------------------------------------------------------
+% The original problem had 3D xyz coordinates, but all values of z were equal   
+% to 0.5, and have been removed.  This graph has 2D coordinates.                
+%-------------------------------------------------------------------------------
+38 38 50
+2 1
+3 1
+11 1
+15 1
+22 1
+23 1
+27 1
+1 2
+10 2
+1 4
+1 5
+10 5
+2 6
+1 7
+10 7
+3 8
+1 9
+2 10
+3 10
+11 10
+15 10
+23 10
+27 10
+37 10
+10 12
+1 13
+3 14
+23 14
+10 16
+6 17
+11 17
+24 17
+1 18
+10 18
+10 19
+20 21
+1 23
+10 23
+24 25
+10 26
+11 27
+6 28
+24 28
+10 29
+1 30
+10 31
+1 32
+33 34
+35 36
+5 38
diff --git a/SPQR/Matrix/Groebner_id2003_aug.mtx b/SPQR/Matrix/Groebner_id2003_aug.mtx
new file mode 100644
index 0000000..1beb583
--- /dev/null
+++ b/SPQR/Matrix/Groebner_id2003_aug.mtx
@@ -0,0 +1,173678 @@
+%%MatrixMarket matrix coordinate integer general
+% This is matrix ID 2003, JGD_Groebner/f855_mat9_I, augmented with
+% an identity matrix at the bottom.  When using the METIS ordering,
+%   ./SPQR/Demo/qrdemo_gpu ./SPQR/Matrix/Groebner_id2003_aug.mtx 6
+% then a rare condition is tested in the GPUQREngine/Source/
+% Scheduler/Scheduler_FillWorkQueue.cpp function.  See that source
+% code for details.
+4967 2456 173670
+1 1 1
+25 1 35242
+33 1 112
+42 1 112
+88 1 14164
+208 1 4521
+215 1 7431
+223 1 52810
+232 1 15995
+242 1 30047
+454 1 41767
+629 1 13926
+859 1 11352
+868 1 10703
+878 1 10172
+889 1 59572
+1320 1 53383
+1361 1 50924
+1398 1 2972
+1406 1 28749
+1415 1 32807
+1530 1 37802
+1573 1 1676
+1627 1 25980
+1658 1 11937
+1665 1 19905
+1673 1 38514
+1682 1 58138
+1692 1 9226
+1809 1 56840
+1852 1 65257
+1906 1 13363
+1971 1 64809
+2018 1 4824
+2027 1 49515
+2037 1 21263
+2048 1 59149
+2162 1 52563
+2169 1 1938
+2177 1 7235
+2178 1 7235
+2183 1 17622
+2187 1 17622
+2192 1 17622
+2198 1 58429
+2205 1 60699
+2213 1 37008
+2222 1 22384
+2223 1 22384
+2225 1 22384
+2232 1 13729
+2237 1 13729
+2243 1 23328
+2250 1 62621
+2258 1 3343
+2267 1 62476
+2277 1 4476
+2278 1 4476
+2280 1 4476
+2283 1 4476
+2292 1 54600
+2298 1 25903
+2305 1 37676
+2313 1 24406
+2322 1 26558
+2332 1 37829
+2343 1 20242
+2344 1 20242
+2346 1 20242
+2349 1 20242
+2353 1 20242
+2364 1 54976
+2371 1 57345
+2379 1 35655
+2388 1 63659
+2398 1 7118
+2409 1 52415
+2421 1 34589
+2422 1 34589
+2424 1 34589
+2427 1 34589
+2431 1 34589
+2436 1 34589
+2442 1 21753
+2449 1 13249
+2457 1 10993
+2466 1 1059
+2476 1 10802
+2487 1 41347
+2499 1 58623
+2512 1 27852657
+1 2 1
+9 2 1
+10 2 1
+25 2 1
+26 2 1
+27 2 1
+74 2 1
+75 2 1
+76 2 1
+77 2 1
+437 2 1
+438 2 1
+439 2 1
+440 2 1
+441 2 1
+1398 2 32761
+1399 2 32761
+1400 2 32761
+1401 2 32761
+1402 2 32761
+1403 2 32761
+2274 2 24573
+2513 2 27852657
+2 3 1
+26 3 35242
+34 3 112
+43 3 112
+89 3 14164
+209 3 4521
+216 3 7431
+224 3 52810
+233 3 15995
+243 3 30047
+455 3 41767
+630 3 13926
+860 3 11352
+869 3 10703
+879 3 10172
+890 3 59572
+1321 3 53383
+1362 3 50924
+1399 3 2972
+1407 3 28749
+1416 3 32807
+1531 3 37802
+1574 3 1676
+1628 3 25980
+1659 3 11937
+1666 3 19905
+1674 3 38514
+1683 3 58138
+1693 3 9226
+1810 3 56840
+1853 3 65257
+1907 3 13363
+1972 3 64809
+2019 3 4824
+2028 3 49515
+2038 3 21263
+2049 3 59149
+2163 3 52563
+2170 3 1938
+2178 3 7235
+2179 3 7235
+2184 3 17622
+2188 3 17622
+2193 3 17622
+2199 3 58429
+2206 3 60699
+2214 3 37008
+2223 3 22384
+2224 3 22384
+2226 3 22384
+2233 3 13729
+2238 3 13729
+2244 3 23328
+2251 3 62621
+2259 3 3343
+2268 3 62476
+2278 3 4476
+2279 3 4476
+2281 3 4476
+2284 3 4476
+2293 3 54600
+2299 3 25903
+2306 3 37676
+2314 3 24406
+2323 3 26558
+2333 3 37829
+2344 3 20242
+2345 3 20242
+2347 3 20242
+2350 3 20242
+2354 3 20242
+2365 3 54976
+2372 3 57345
+2380 3 35655
+2389 3 63659
+2399 3 7118
+2410 3 52415
+2422 3 34589
+2423 3 34589
+2425 3 34589
+2428 3 34589
+2432 3 34589
+2437 3 34589
+2443 3 21753
+2450 3 13249
+2458 3 10993
+2467 3 1059
+2477 3 10802
+2488 3 41347
+2500 3 58623
+2514 3 27852657
+2 4 1
+2274 4 65520
+2515 4 27852657
+3 5 1
+27 5 35242
+35 5 112
+44 5 112
+90 5 14164
+210 5 4521
+217 5 7431
+225 5 52810
+234 5 15995
+244 5 30047
+456 5 41767
+631 5 13926
+861 5 11352
+870 5 10703
+880 5 10172
+891 5 59572
+1322 5 53383
+1363 5 50924
+1400 5 2972
+1408 5 28749
+1417 5 32807
+1532 5 37802
+1575 5 1676
+1629 5 25980
+1660 5 11937
+1667 5 19905
+1675 5 38514
+1684 5 58138
+1694 5 9226
+1811 5 56840
+1854 5 65257
+1908 5 13363
+1973 5 64809
+2020 5 4824
+2029 5 49515
+2039 5 21263
+2050 5 59149
+2164 5 52563
+2171 5 1938
+2180 5 7235
+2181 5 7235
+2185 5 17622
+2189 5 17622
+2194 5 17622
+2200 5 58429
+2207 5 60699
+2215 5 37008
+2225 5 22384
+2226 5 22384
+2227 5 22384
+2234 5 13729
+2239 5 13729
+2245 5 23328
+2252 5 62621
+2260 5 3343
+2269 5 62476
+2280 5 4476
+2281 5 4476
+2282 5 4476
+2285 5 4476
+2294 5 54600
+2300 5 25903
+2307 5 37676
+2315 5 24406
+2324 5 26558
+2334 5 37829
+2346 5 20242
+2347 5 20242
+2348 5 20242
+2351 5 20242
+2355 5 20242
+2366 5 54976
+2373 5 57345
+2381 5 35655
+2390 5 63659
+2400 5 7118
+2411 5 52415
+2424 5 34589
+2425 5 34589
+2426 5 34589
+2429 5 34589
+2433 5 34589
+2438 5 34589
+2444 5 21753
+2451 5 13249
+2459 5 10993
+2468 5 1059
+2478 5 10802
+2489 5 41347
+2501 5 58623
+2516 5 27852657
+3 6 1
+4 6 1
+5 6 1
+6 6 1
+7 6 44189
+8 6 44189
+9 6 28417
+10 6 28417
+11 6 48406
+12 6 48406
+13 6 48406
+14 6 64566
+15 6 28935
+23 6 50267
+25 6 20151
+26 6 20151
+27 6 20151
+29 6 20589
+30 6 20589
+31 6 11607
+32 6 13496
+40 6 6642
+49 6 21896
+74 6 35584
+75 6 35584
+76 6 35584
+77 6 35584
+78 6 32230
+79 6 60649
+80 6 7436
+86 6 58578
+95 6 37988
+200 6 16092
+437 6 16121
+438 6 16121
+439 6 16121
+440 6 16121
+441 6 16121
+443 6 39622
+444 6 38238
+452 6 52556
+461 6 59890
+577 6 12794
+756 6 62223
+1398 6 26657
+1399 6 26657
+1400 6 26657
+1401 6 26657
+1402 6 26657
+1403 6 26657
+1404 6 45433
+1405 6 40293
+1413 6 30897
+1422 6 3659
+1634 6 35978
+1913 6 51521
+2274 6 1310
+2517 6 27852657
+4 7 1
+28 7 35242
+36 7 112
+45 7 112
+91 7 14164
+211 7 4521
+218 7 7431
+226 7 52810
+235 7 15995
+245 7 30047
+457 7 41767
+632 7 13926
+862 7 11352
+871 7 10703
+881 7 10172
+892 7 59572
+1323 7 53383
+1364 7 50924
+1401 7 2972
+1409 7 28749
+1418 7 32807
+1533 7 37802
+1576 7 1676
+1630 7 25980
+1661 7 11937
+1668 7 19905
+1676 7 38514
+1685 7 58138
+1695 7 9226
+1812 7 56840
+1855 7 65257
+1909 7 13363
+1974 7 64809
+2021 7 4824
+2030 7 49515
+2040 7 21263
+2051 7 59149
+2165 7 52563
+2172 7 1938
+2183 7 7235
+2184 7 7235
+2186 7 17622
+2190 7 17622
+2195 7 17622
+2201 7 58429
+2208 7 60699
+2216 7 37008
+2228 7 22384
+2229 7 22384
+2230 7 22384
+2235 7 13729
+2240 7 13729
+2246 7 23328
+2253 7 62621
+2261 7 3343
+2270 7 62476
+2283 7 4476
+2284 7 4476
+2285 7 4476
+2286 7 4476
+2295 7 54600
+2301 7 25903
+2308 7 37676
+2316 7 24406
+2325 7 26558
+2335 7 37829
+2349 7 20242
+2350 7 20242
+2351 7 20242
+2352 7 20242
+2356 7 20242
+2367 7 54976
+2374 7 57345
+2382 7 35655
+2391 7 63659
+2401 7 7118
+2412 7 52415
+2427 7 34589
+2428 7 34589
+2429 7 34589
+2430 7 34589
+2434 7 34589
+2439 7 34589
+2445 7 21753
+2452 7 13249
+2460 7 10993
+2469 7 1059
+2479 7 10802
+2490 7 41347
+2502 7 58623
+2518 7 27852657
+4 8 1
+32 8 53696
+41 8 56319
+49 8 29992
+50 8 55032
+51 8 64234
+80 8 40387
+87 8 9894
+97 8 19956
+199 8 19411
+200 8 41046
+201 8 50716
+202 8 4144
+241 8 48422
+444 8 49468
+453 8 18098
+463 8 52392
+628 8 27416
+757 8 57582
+758 8 32856
+812 8 9947
+877 8 30953
+1395 8 60295
+1401 8 55144
+1402 8 27352
+1403 8 22746
+1404 8 11115
+1405 8 60667
+1406 8 45657
+1407 8 46543
+1409 8 4381
+1410 8 46699
+1411 8 7949
+1412 8 16240
+1413 8 23510
+1414 8 58609
+1415 8 60379
+1416 8 9775
+1417 8 9775
+1419 8 36276
+1420 8 16890
+1421 8 59726
+1422 8 18418
+1423 8 28237
+1424 8 35078
+1627 8 41569
+1628 8 6112
+1629 8 6112
+1630 8 13899
+1632 8 53893
+1633 8 59826
+1634 8 17273
+1635 8 40150
+1636 8 50053
+1691 8 38679
+1906 8 52977
+1907 8 59995
+1908 8 59995
+1909 8 30176
+1910 8 26643
+1912 8 5833
+1913 8 49812
+1914 8 52336
+1915 8 32276
+1970 8 26980
+2036 8 19360
+2267 8 16012
+2268 8 48967
+2269 8 48967
+2270 8 54282
+2271 8 11691
+2272 8 43009
+2273 8 10524
+2274 8 64391
+2275 8 15403
+2276 8 20355
+2331 8 62671
+2397 8 23934
+2475 8 53866
+2519 8 27852657
+5 9 1
+29 9 35242
+37 9 112
+46 9 112
+92 9 14164
+212 9 4521
+219 9 7431
+227 9 52810
+236 9 15995
+246 9 30047
+458 9 41767
+633 9 13926
+863 9 11352
+872 9 10703
+882 9 10172
+893 9 59572
+1324 9 53383
+1365 9 50924
+1402 9 2972
+1410 9 28749
+1419 9 32807
+1534 9 37802
+1577 9 1676
+1631 9 25980
+1662 9 11937
+1669 9 19905
+1677 9 38514
+1686 9 58138
+1696 9 9226
+1813 9 56840
+1856 9 65257
+1910 9 13363
+1975 9 64809
+2022 9 4824
+2031 9 49515
+2041 9 21263
+2052 9 59149
+2166 9 52563
+2173 9 1938
+2187 9 7235
+2188 9 7235
+2190 9 17622
+2191 9 17622
+2196 9 17622
+2202 9 58429
+2209 9 60699
+2217 9 37008
+2232 9 22384
+2233 9 22384
+2234 9 22384
+2236 9 13729
+2241 9 13729
+2247 9 23328
+2254 9 62621
+2262 9 3343
+2271 9 62476
+2287 9 4476
+2288 9 4476
+2289 9 4476
+2290 9 4476
+2296 9 54600
+2302 9 25903
+2309 9 37676
+2317 9 24406
+2326 9 26558
+2336 9 37829
+2353 9 20242
+2354 9 20242
+2355 9 20242
+2356 9 20242
+2357 9 20242
+2368 9 54976
+2375 9 57345
+2383 9 35655
+2392 9 63659
+2402 9 7118
+2413 9 52415
+2431 9 34589
+2432 9 34589
+2433 9 34589
+2434 9 34589
+2435 9 34589
+2440 9 34589
+2446 9 21753
+2453 9 13249
+2461 9 10993
+2470 9 1059
+2480 9 10802
+2491 9 41347
+2503 9 58623
+2520 9 27852657
+5 10 1
+32 10 31297
+41 10 24706
+49 10 7915
+50 10 60674
+51 10 35968
+80 10 58147
+87 10 25199
+97 10 37141
+199 10 2043
+200 10 26774
+201 10 55059
+202 10 47831
+241 10 46658
+444 10 285
+453 10 16939
+463 10 53889
+628 10 32237
+757 10 547
+758 10 5921
+812 10 62893
+877 10 11793
+1395 10 38973
+1402 10 27290
+1403 10 59243
+1404 10 64740
+1405 10 15199
+1406 10 49296
+1407 10 56265
+1409 10 26992
+1410 10 1811
+1411 10 51482
+1412 10 55438
+1413 10 41260
+1414 10 64516
+1415 10 24016
+1416 10 14078
+1417 10 14078
+1419 10 53625
+1420 10 34407
+1421 10 31338
+1422 10 65247
+1423 10 28114
+1424 10 23571
+1627 10 41362
+1628 10 12794
+1629 10 12794
+1630 10 12794
+1632 10 44026
+1633 10 64155
+1634 10 17202
+1635 10 60743
+1636 10 22902
+1691 10 46518
+1906 10 56637
+1907 10 21026
+1908 10 21026
+1909 10 21026
+1910 10 32910
+1912 10 42548
+1913 10 55098
+1914 10 24461
+1915 10 54115
+1970 10 10166
+2036 10 21567
+2267 10 5068
+2268 10 21647
+2269 10 21647
+2270 10 21647
+2271 10 52446
+2272 10 19333
+2273 10 17961
+2274 10 1072
+2275 10 10805
+2276 10 986
+2331 10 33937
+2397 10 63163
+2475 10 11486
+2521 10 27852657
+6 11 1
+30 11 35242
+38 11 112
+47 11 112
+93 11 14164
+213 11 4521
+220 11 7431
+228 11 52810
+237 11 15995
+247 11 30047
+459 11 41767
+634 11 13926
+864 11 11352
+873 11 10703
+883 11 10172
+894 11 59572
+1325 11 53383
+1366 11 50924
+1403 11 2972
+1411 11 28749
+1420 11 32807
+1535 11 37802
+1578 11 1676
+1632 11 25980
+1663 11 11937
+1670 11 19905
+1678 11 38514
+1687 11 58138
+1697 11 9226
+1814 11 56840
+1857 11 65257
+1911 11 13363
+1976 11 64809
+2023 11 4824
+2032 11 49515
+2042 11 21263
+2053 11 59149
+2167 11 52563
+2174 11 1938
+2192 11 7235
+2193 11 7235
+2195 11 17622
+2196 11 17622
+2197 11 17622
+2203 11 58429
+2210 11 60699
+2218 11 37008
+2237 11 22384
+2238 11 22384
+2239 11 22384
+2241 11 13729
+2242 11 13729
+2248 11 23328
+2255 11 62621
+2263 11 3343
+2272 11 62476
+2292 11 4476
+2293 11 4476
+2294 11 4476
+2295 11 4476
+2297 11 54600
+2303 11 25903
+2310 11 37676
+2318 11 24406
+2327 11 26558
+2337 11 37829
+2358 11 20242
+2359 11 20242
+2360 11 20242
+2361 11 20242
+2362 11 20242
+2369 11 54976
+2376 11 57345
+2384 11 35655
+2393 11 63659
+2403 11 7118
+2414 11 52415
+2436 11 34589
+2437 11 34589
+2438 11 34589
+2439 11 34589
+2440 11 34589
+2441 11 34589
+2447 11 21753
+2454 11 13249
+2462 11 10993
+2471 11 1059
+2481 11 10802
+2492 11 41347
+2504 11 58623
+2522 11 27852657
+6 12 1
+15 12 25422
+24 12 40099
+32 12 19231
+41 12 45046
+49 12 40359
+50 12 56914
+51 12 51967
+80 12 19231
+87 12 13529
+97 12 54886
+198 12 26258
+199 12 28062
+200 12 53224
+201 12 27227
+202 12 37668
+241 12 34749
+444 12 61933
+453 12 40722
+463 12 56305
+628 12 4764
+756 12 57426
+757 12 51354
+758 12 25609
+812 12 39735
+877 12 4199
+1403 12 33803
+1404 12 45768
+1405 12 46477
+1406 12 46507
+1407 12 46507
+1409 12 21015
+1410 12 21015
+1411 12 30307
+1412 12 15669
+1413 12 19254
+1414 12 39201
+1415 12 3217
+1416 12 3217
+1417 12 3217
+1419 12 14556
+1420 12 29912
+1421 12 40685
+1422 12 36539
+1423 12 43628
+1424 12 18455
+1627 12 47817
+1628 12 47817
+1629 12 47817
+1630 12 47817
+1632 12 51346
+1633 12 58266
+1634 12 58646
+1635 12 14046
+1636 12 9426
+1691 12 20658
+1906 12 51564
+1907 12 51564
+1908 12 51564
+1909 12 51564
+1910 12 51564
+1912 12 62812
+1913 12 55074
+1914 12 23903
+1915 12 48824
+1970 12 39560
+2036 12 24219
+2267 12 59167
+2268 12 59167
+2269 12 59167
+2270 12 59167
+2271 12 59167
+2272 12 59167
+2273 12 61666
+2274 12 46411
+2275 12 44944
+2276 12 50567
+2331 12 28842
+2397 12 57884
+2475 12 38063
+2523 12 27852657
+7 13 1
+31 13 35242
+39 13 112
+48 13 112
+94 13 14164
+214 13 4521
+221 13 7431
+229 13 52810
+238 13 15995
+248 13 30047
+460 13 41767
+635 13 13926
+865 13 11352
+874 13 10703
+884 13 10172
+895 13 59572
+1326 13 53383
+1367 13 50924
+1404 13 2972
+1412 13 28749
+1421 13 32807
+1536 13 37802
+1579 13 1676
+1633 13 25980
+1664 13 11937
+1671 13 19905
+1679 13 38514
+1688 13 58138
+1698 13 9226
+1815 13 56840
+1858 13 65257
+1912 13 13363
+1977 13 64809
+2024 13 4824
+2033 13 49515
+2043 13 21263
+2054 13 59149
+2168 13 52563
+2175 13 1938
+2198 13 7235
+2199 13 7235
+2201 13 17622
+2202 13 17622
+2203 13 17622
+2204 13 58429
+2211 13 60699
+2219 13 37008
+2243 13 22384
+2244 13 22384
+2245 13 22384
+2247 13 13729
+2248 13 13729
+2249 13 23328
+2256 13 62621
+2264 13 3343
+2273 13 62476
+2298 13 4476
+2299 13 4476
+2300 13 4476
+2301 13 4476
+2303 13 54600
+2304 13 25903
+2311 13 37676
+2319 13 24406
+2328 13 26558
+2338 13 37829
+2364 13 20242
+2365 13 20242
+2366 13 20242
+2367 13 20242
+2368 13 20242
+2370 13 54976
+2377 13 57345
+2385 13 35655
+2394 13 63659
+2404 13 7118
+2415 13 52415
+2442 13 34589
+2443 13 34589
+2444 13 34589
+2445 13 34589
+2446 13 34589
+2447 13 34589
+2448 13 21753
+2455 13 13249
+2463 13 10993
+2472 13 1059
+2482 13 10802
+2493 13 41347
+2505 13 58623
+2524 13 27852657
+7 14 1
+8 14 1
+15 14 52614
+24 14 12908
+32 14 8375
+41 14 22302
+49 14 3211
+50 14 28851
+51 14 19457
+80 14 8375
+87 14 3673
+97 14 11394
+198 14 31908
+199 14 18031
+200 14 14820
+201 14 28606
+202 14 21710
+241 14 29773
+444 14 60952
+453 14 60925
+463 14 45598
+628 14 15387
+756 14 44262
+757 14 25788
+758 14 63250
+812 14 40254
+877 14 54640
+1404 14 57144
+1405 14 39485
+1406 14 37898
+1407 14 37898
+1409 14 16172
+1410 14 16172
+1411 14 16172
+1412 14 32528
+1413 14 32100
+1414 14 10243
+1415 14 49357
+1416 14 49357
+1417 14 49357
+1419 14 35844
+1420 14 35844
+1421 14 54643
+1422 14 7389
+1423 14 39607
+1424 14 35292
+1627 14 46693
+1628 14 46693
+1629 14 46693
+1630 14 46693
+1632 14 7396
+1633 14 53283
+1634 14 65095
+1635 14 51787
+1636 14 51563
+1691 14 50936
+1906 14 30086
+1907 14 30086
+1908 14 30086
+1909 14 30086
+1910 14 30086
+1912 14 64190
+1913 14 21515
+1914 14 42370
+1915 14 47556
+1970 14 1859
+2036 14 41296
+2267 14 1355
+2268 14 1355
+2269 14 1355
+2270 14 1355
+2271 14 1355
+2272 14 1355
+2273 14 41719
+2274 14 41437
+2275 14 64993
+2276 14 54008
+2331 14 56266
+2397 14 10091
+2475 14 24686
+2525 14 27852657
+8 15 1
+32 15 35242
+40 15 112
+49 15 112
+95 15 14164
+221 15 4521
+222 15 7431
+230 15 52810
+239 15 15995
+249 15 30047
+461 15 41767
+636 15 13926
+866 15 11352
+875 15 10703
+885 15 10172
+896 15 59572
+1327 15 53383
+1368 15 50924
+1405 15 2972
+1413 15 28749
+1422 15 32807
+1537 15 37802
+1580 15 1676
+1634 15 25980
+1671 15 11937
+1672 15 19905
+1680 15 38514
+1689 15 58138
+1699 15 9226
+1816 15 56840
+1859 15 65257
+1913 15 13363
+1978 15 64809
+2025 15 4824
+2034 15 49515
+2044 15 21263
+2055 15 59149
+2175 15 52563
+2176 15 1938
+2205 15 7235
+2206 15 7235
+2208 15 17622
+2209 15 17622
+2210 15 17622
+2211 15 58429
+2212 15 60699
+2220 15 37008
+2250 15 22384
+2251 15 22384
+2252 15 22384
+2254 15 13729
+2255 15 13729
+2256 15 23328
+2257 15 62621
+2265 15 3343
+2274 15 62476
+2305 15 4476
+2306 15 4476
+2307 15 4476
+2308 15 4476
+2310 15 54600
+2311 15 25903
+2312 15 37676
+2320 15 24406
+2329 15 26558
+2339 15 37829
+2371 15 20242
+2372 15 20242
+2373 15 20242
+2374 15 20242
+2375 15 20242
+2377 15 54976
+2378 15 57345
+2386 15 35655
+2395 15 63659
+2405 15 7118
+2416 15 52415
+2449 15 34589
+2450 15 34589
+2451 15 34589
+2452 15 34589
+2453 15 34589
+2454 15 34589
+2455 15 21753
+2456 15 13249
+2464 15 10993
+2473 15 1059
+2483 15 10802
+2494 15 41347
+2506 15 58623
+2526 15 27852657
+9 16 1
+16 16 1
+17 16 1
+33 16 1
+34 16 1
+35 16 1
+81 16 1
+82 16 1
+83 16 1
+84 16 1
+445 16 1
+446 16 1
+447 16 1
+448 16 1
+449 16 1
+1406 16 32761
+1407 16 32761
+1408 16 32761
+1409 16 32761
+1410 16 32761
+1411 16 32761
+2275 16 24573
+2527 16 27852657
+10 17 1
+2275 17 65520
+2528 17 27852657
+11 18 1
+12 18 1
+13 18 1
+19 18 1
+20 18 1
+21 18 1
+46 18 65520
+47 18 65520
+85 18 6146
+86 18 6146
+87 18 6146
+93 18 65520
+94 18 6146
+95 18 6146
+96 18 12292
+97 18 6146
+199 18 6146
+200 18 6146
+201 18 12292
+202 18 12292
+241 18 6146
+443 18 46342
+444 18 46342
+451 18 52488
+452 18 33309
+453 18 52488
+458 18 28435
+460 18 52488
+461 18 19675
+462 18 25821
+463 18 38854
+576 18 8548
+577 18 41256
+578 18 53548
+579 18 39914
+628 18 1060
+755 18 2402
+756 18 35110
+757 18 41256
+758 18 27622
+812 18 49203
+877 18 54289
+1404 18 28635
+1405 18 28635
+1412 18 16778
+1413 18 53605
+1414 18 24970
+1419 18 59340
+1420 18 59340
+1421 18 16778
+1422 18 64055
+1423 18 32264
+1424 18 7294
+1632 18 59340
+1633 18 53333
+1634 18 35089
+1635 18 61750
+1636 18 3125
+1691 18 61352
+1912 18 6969
+1913 18 55674
+1914 18 16814
+1915 18 29372
+1970 18 27585
+2036 18 31754
+2273 18 56055
+2274 18 13025
+2275 18 46495
+2276 18 19570
+2331 18 61812
+2397 18 19639
+2475 18 37326
+2529 18 27852657
+12 19 1
+20 19 1
+46 19 65520
+441 19 32763
+449 19 2
+458 19 32078
+461 19 17260
+462 19 17260
+463 19 17260
+570 19 57776
+571 19 57776
+572 19 57776
+573 19 57776
+576 19 60040
+577 19 3969
+578 19 3969
+579 19 21229
+628 19 3969
+749 19 57776
+750 19 57776
+751 19 57776
+752 19 57776
+753 19 57776
+755 19 60040
+756 19 3969
+757 19 3969
+758 19 21229
+812 19 7938
+877 19 3969
+1396 19 5562
+1400 19 60245
+1401 19 60245
+1402 19 23390
+1403 19 26502
+1404 19 43980
+1405 19 43980
+1406 19 23087
+1407 19 23087
+1409 19 1015
+1410 19 33776
+1411 19 42974
+1412 19 2925
+1413 19 20482
+1414 19 42023
+1415 19 61794
+1416 19 61794
+1417 19 61794
+1419 19 12265
+1420 19 62820
+1421 19 37279
+1422 19 32199
+1423 19 28174
+1424 19 51672
+1627 19 50036
+1628 19 50036
+1629 19 50036
+1630 19 50036
+1632 19 62036
+1633 19 4393
+1634 19 21597
+1635 19 10389
+1636 19 55329
+1691 19 3657
+1906 19 7565
+1907 19 7565
+1908 19 7565
+1909 19 7565
+1910 19 7565
+1912 19 3802
+1913 19 64498
+1914 19 7594
+1915 19 62861
+1970 19 59495
+2036 19 55838
+2267 19 21126
+2268 19 21126
+2269 19 21126
+2270 19 21126
+2271 19 21126
+2272 19 20199
+2273 19 31539
+2274 19 31176
+2275 19 16602
+2276 19 58629
+2331 19 39386
+2397 19 20852
+2475 19 33382
+2530 19 27852657
+13 20 1
+21 20 1
+47 20 65520
+198 20 1
+458 20 61157
+461 20 20292
+462 20 20292
+463 20 20292
+570 20 24464
+571 20 24464
+572 20 24464
+573 20 24464
+576 20 2480
+577 20 21631
+578 20 21631
+579 20 41923
+628 20 21631
+749 20 24464
+750 20 24464
+751 20 24464
+752 20 24464
+753 20 24464
+755 20 2480
+756 20 21631
+757 20 21631
+758 20 41923
+812 20 43262
+877 20 21631
+1396 20 59959
+1400 20 10717
+1401 20 10717
+1402 20 10717
+1403 20 7605
+1404 20 21541
+1405 20 21541
+1406 20 37501
+1407 20 37501
+1409 20 28283
+1410 20 28283
+1411 20 19085
+1412 20 62596
+1413 20 12376
+1414 20 56356
+1415 20 32262
+1416 20 32262
+1417 20 32262
+1419 20 38568
+1420 20 53534
+1421 20 28242
+1422 20 14563
+1423 20 5428
+1424 20 14593
+1627 20 49166
+1628 20 49166
+1629 20 49166
+1630 20 49166
+1632 20 4960
+1633 20 43122
+1634 20 51625
+1635 20 27349
+1636 20 41924
+1691 20 27331
+1906 20 32489
+1907 20 32489
+1908 20 32489
+1909 20 32489
+1910 20 32489
+1912 20 32272
+1913 20 50003
+1914 20 52103
+1915 20 17083
+1970 20 65101
+2036 20 37770
+2267 20 48991
+2268 20 48991
+2269 20 48991
+2270 20 48991
+2271 20 48991
+2272 20 49918
+2273 20 33982
+2274 20 45726
+2275 20 51649
+2276 20 611
+2331 20 21845
+2397 20 24381
+2475 20 1841
+2531 20 27852657
+14 21 1
+15 21 1
+22 21 1
+23 21 2
+24 21 1
+31 21 5617
+32 21 5617
+39 21 29953
+40 21 35571
+41 21 29954
+48 21 29952
+49 21 35569
+50 21 59905
+51 21 29952
+86 21 1
+87 21 1
+95 21 5617
+96 21 29953
+97 21 29952
+199 21 35569
+200 21 35569
+201 21 35569
+202 21 35569
+241 21 35569
+458 21 11673
+461 21 47459
+462 21 44837
+463 21 44837
+570 21 43134
+571 21 43134
+572 21 43134
+573 21 43134
+576 21 24083
+577 21 10638
+578 21 35231
+579 21 60218
+628 21 15381
+749 21 43134
+750 21 43134
+751 21 43134
+752 21 43134
+753 21 43134
+755 21 54035
+756 21 40590
+757 21 65183
+758 21 24649
+812 21 55097
+877 21 9764
+1400 21 45700
+1401 21 45700
+1402 21 45700
+1403 21 45700
+1404 21 62309
+1405 21 62309
+1406 21 49949
+1407 21 49949
+1409 21 44841
+1410 21 44841
+1411 21 44841
+1412 21 25159
+1413 21 47468
+1414 21 50680
+1415 21 35832
+1416 21 35832
+1417 21 35832
+1419 21 13986
+1420 21 13986
+1421 21 3004
+1422 21 16662
+1423 21 29192
+1424 21 44033
+1627 21 26641
+1628 21 26641
+1629 21 26641
+1630 21 26641
+1632 21 23312
+1633 21 29308
+1634 21 39134
+1635 21 11041
+1636 21 54862
+1691 21 10829
+1906 21 6766
+1907 21 6766
+1908 21 6766
+1909 21 6766
+1910 21 6766
+1912 21 63181
+1913 21 29928
+1914 21 61372
+1915 21 37591
+1970 21 23777
+2036 21 12948
+2267 21 18453
+2268 21 18453
+2269 21 18453
+2270 21 18453
+2271 21 18453
+2272 21 18453
+2273 21 46498
+2274 21 23140
+2275 21 60044
+2276 21 54628
+2331 21 11462
+2397 21 51512
+2475 21 31474
+2532 21 27852657
+15 22 1
+40 22 35242
+41 22 112
+50 22 112
+96 22 14164
+229 22 4521
+230 22 7431
+231 22 52810
+240 22 15995
+250 22 30047
+462 22 41767
+637 22 13926
+867 22 11352
+876 22 10703
+886 22 10172
+897 22 59572
+1360 22 53383
+1369 22 50924
+1413 22 2972
+1414 22 28749
+1423 22 32807
+1572 22 37802
+1581 22 1676
+1635 22 25980
+1679 22 11937
+1680 22 19905
+1681 22 38514
+1690 22 58138
+1700 22 9226
+1851 22 56840
+1860 22 65257
+1914 22 13363
+1979 22 64809
+2026 22 4824
+2035 22 49515
+2045 22 21263
+2056 22 59149
+2211 22 52563
+2212 22 1938
+2213 22 7235
+2214 22 7235
+2216 22 17622
+2217 22 17622
+2218 22 17622
+2219 22 58429
+2220 22 60699
+2221 22 37008
+2258 22 22384
+2259 22 22384
+2260 22 22384
+2262 22 13729
+2263 22 13729
+2264 22 23328
+2265 22 62621
+2266 22 3343
+2275 22 62476
+2313 22 4476
+2314 22 4476
+2315 22 4476
+2316 22 4476
+2318 22 54600
+2319 22 25903
+2320 22 37676
+2321 22 24406
+2330 22 26558
+2340 22 37829
+2379 22 20242
+2380 22 20242
+2381 22 20242
+2382 22 20242
+2383 22 20242
+2385 22 54976
+2386 22 57345
+2387 22 35655
+2396 22 63659
+2406 22 7118
+2417 22 52415
+2457 22 34589
+2458 22 34589
+2459 22 34589
+2460 22 34589
+2461 22 34589
+2462 22 34589
+2463 22 21753
+2464 22 13249
+2465 22 10993
+2474 22 1059
+2484 22 10802
+2495 22 41347
+2507 22 58623
+2533 22 27852657
+15 23 1
+24 23 65520
+32 23 19564
+41 23 34553
+49 23 3054
+50 23 35516
+51 23 962
+80 23 2437
+87 23 12492
+97 23 47199
+199 23 158
+200 23 27163
+201 23 65043
+202 23 42951
+241 23 62235
+444 23 55965
+453 23 34419
+463 23 54979
+628 23 62432
+757 23 20529
+758 23 65094
+812 23 30005
+877 23 29808
+1404 23 24352
+1405 23 40940
+1406 23 19610
+1407 23 19610
+1409 23 44291
+1410 23 44291
+1411 23 44291
+1412 23 42662
+1413 23 34816
+1414 23 24153
+1415 23 21231
+1416 23 21231
+1417 23 21231
+1419 23 47707
+1420 23 47707
+1421 23 49719
+1422 23 17309
+1423 23 11750
+1424 23 48676
+1627 23 56688
+1628 23 56688
+1629 23 56688
+1630 23 56688
+1632 23 47584
+1633 23 32152
+1634 23 31115
+1635 23 27435
+1636 23 24649
+1691 23 31783
+1906 23 55408
+1907 23 55408
+1908 23 55408
+1909 23 55408
+1910 23 55408
+1912 23 6387
+1913 23 37178
+1914 23 14066
+1915 23 37688
+1970 23 17012
+2036 23 56760
+2267 23 49331
+2268 23 49331
+2269 23 49331
+2270 23 49331
+2271 23 49331
+2272 23 49331
+2273 23 35052
+2274 23 63137
+2275 23 16011
+2276 23 52709
+2331 23 63690
+2397 23 10738
+2475 23 56864
+2534 23 27852657
+16 24 1
+25 24 51474
+33 24 35594
+42 24 35593
+88 24 55049
+208 24 5856
+215 24 5230
+223 24 6628
+232 24 63044
+242 24 16979
+454 24 42394
+629 24 46600
+859 24 24088
+868 24 26592
+878 24 36955
+889 24 1055
+1361 24 38786
+1398 24 7663
+1406 24 65189
+1415 24 60951
+1573 24 39478
+1627 24 62067
+1658 24 42229
+1665 24 13107
+1673 24 28549
+1682 24 33091
+1692 24 2459
+1852 24 56576
+1906 24 50666
+1971 24 13602
+2018 24 60520
+2027 24 34335
+2037 24 14203
+2048 24 46768
+2162 24 59104
+2169 24 59104
+2177 24 60805
+2178 24 60805
+2183 24 57042
+2187 24 57042
+2192 24 57042
+2198 24 38257
+2205 24 53089
+2213 24 37753
+2222 24 4871
+2223 24 4871
+2225 24 4871
+2232 24 38373
+2237 24 38373
+2243 24 41063
+2250 24 13921
+2258 24 511
+2267 24 1263
+2277 24 11219
+2278 24 11219
+2280 24 11219
+2283 24 11219
+2292 24 62126
+2298 24 37707
+2305 24 22891
+2313 24 51269
+2322 24 64420
+2332 24 62493
+2343 24 47545
+2344 24 47545
+2346 24 47545
+2349 24 47545
+2353 24 47545
+2364 24 11529
+2371 24 55169
+2379 24 54336
+2388 24 59526
+2398 24 33974
+2409 24 44814
+2421 24 40747
+2422 24 40747
+2424 24 40747
+2427 24 40747
+2431 24 40747
+2436 24 40747
+2442 24 62126
+2449 24 20561
+2457 24 27735
+2466 24 22813
+2476 24 7672
+2487 24 13568
+2499 24 46060
+2535 24 27852657
+16 25 1
+41 25 50663
+43 25 1
+49 25 51868
+50 25 21821
+51 25 36679
+87 25 9142
+97 25 897
+194 25 65520
+198 25 8083
+199 25 54397
+200 25 2529
+201 25 58047
+202 25 3213
+241 25 38995
+453 25 26655
+463 25 42794
+628 25 7764
+756 25 40084
+757 25 4929
+758 25 48117
+812 25 8487
+877 25 39718
+1395 25 57425
+1402 25 8603
+1403 25 44455
+1404 25 26766
+1405 25 26766
+1406 25 1084
+1407 25 55888
+1409 25 12754
+1410 25 40018
+1411 25 34218
+1412 25 4209
+1413 25 45281
+1414 25 46129
+1415 25 17852
+1416 25 55799
+1417 25 41998
+1419 25 38828
+1420 25 28720
+1421 25 39292
+1422 25 10689
+1423 25 16119
+1424 25 61363
+1627 25 40159
+1628 25 63418
+1629 25 33030
+1630 25 33030
+1632 25 8834
+1633 25 56907
+1634 25 25103
+1635 25 36448
+1636 25 41588
+1691 25 63609
+1906 25 45611
+1907 25 12601
+1908 25 18694
+1909 25 18694
+1910 25 61309
+1912 25 48324
+1913 25 59600
+1914 25 27754
+1915 25 22176
+1970 25 53866
+2036 25 64912
+2267 25 30647
+2268 25 56580
+2269 25 61347
+2270 25 61347
+2271 25 22231
+2272 25 30851
+2273 25 15863
+2274 25 2248
+2275 25 61413
+2276 25 51412
+2331 25 32769
+2397 25 38950
+2475 25 60742
+2536 25 27852657
+17 26 1
+26 26 51474
+34 26 35594
+43 26 35593
+89 26 55049
+209 26 5856
+216 26 5230
+224 26 6628
+233 26 63044
+243 26 16979
+455 26 42394
+630 26 46600
+860 26 24088
+869 26 26592
+879 26 36955
+890 26 1055
+1362 26 38786
+1399 26 7663
+1407 26 65189
+1416 26 60951
+1574 26 39478
+1628 26 62067
+1659 26 42229
+1666 26 13107
+1674 26 28549
+1683 26 33091
+1693 26 2459
+1853 26 56576
+1907 26 50666
+1972 26 13602
+2019 26 60520
+2028 26 34335
+2038 26 14203
+2049 26 46768
+2163 26 59104
+2170 26 59104
+2178 26 60805
+2179 26 60805
+2184 26 57042
+2188 26 57042
+2193 26 57042
+2199 26 38257
+2206 26 53089
+2214 26 37753
+2223 26 4871
+2224 26 4871
+2226 26 4871
+2233 26 38373
+2238 26 38373
+2244 26 41063
+2251 26 13921
+2259 26 511
+2268 26 1263
+2278 26 11219
+2279 26 11219
+2281 26 11219
+2284 26 11219
+2293 26 62126
+2299 26 37707
+2306 26 22891
+2314 26 51269
+2323 26 64420
+2333 26 62493
+2344 26 47545
+2345 26 47545
+2347 26 47545
+2350 26 47545
+2354 26 47545
+2365 26 11529
+2372 26 55169
+2380 26 54336
+2389 26 59526
+2399 26 33974
+2410 26 44814
+2422 26 40747
+2423 26 40747
+2425 26 40747
+2428 26 40747
+2432 26 40747
+2437 26 40747
+2443 26 62126
+2450 26 20561
+2458 26 27735
+2467 26 22813
+2477 26 7672
+2488 26 13568
+2500 26 46060
+2537 26 27852657
+17 27 1
+43 27 65520
+194 27 1
+441 27 21223
+449 27 35404
+455 27 62823
+456 27 33261
+458 27 10172
+461 27 41764
+462 27 41764
+463 27 41764
+570 27 30586
+571 27 30838
+572 27 49171
+573 27 28251
+576 27 42908
+577 27 17781
+578 27 17781
+579 27 59545
+628 27 17781
+749 27 30586
+750 27 30837
+751 27 49171
+752 27 28251
+753 27 62652
+755 27 42908
+756 27 17781
+757 27 17781
+758 27 59545
+812 27 35562
+877 27 17781
+1393 27 58834
+1394 27 58834
+1395 27 13652
+1396 27 8270
+1400 27 30264
+1401 27 30264
+1402 27 50603
+1403 27 57058
+1404 27 30538
+1405 27 30538
+1406 27 39731
+1407 27 13294
+1409 27 56061
+1410 27 38492
+1411 27 38363
+1412 27 19065
+1413 27 31699
+1414 27 1161
+1415 27 27494
+1416 27 9403
+1417 27 13915
+1419 27 1808
+1420 27 55134
+1421 27 55280
+1422 27 65429
+1423 27 49155
+1424 27 47994
+1627 27 11698
+1628 27 1797
+1629 27 7470
+1630 27 12992
+1632 27 45152
+1633 27 26375
+1634 27 11993
+1635 27 33656
+1636 27 22868
+1691 27 40395
+1906 27 23052
+1907 27 40790
+1908 27 52307
+1909 27 18312
+1910 27 1550
+1912 27 39279
+1913 27 36831
+1914 27 34312
+1915 27 50296
+1970 27 24427
+2036 27 49553
+2267 27 55353
+2268 27 6223
+2269 27 48483
+2270 27 48483
+2271 27 18715
+2272 27 43391
+2273 27 39211
+2274 27 10060
+2275 27 22427
+2276 27 19441
+2331 27 65333
+2397 27 26722
+2475 27 13398
+2538 27 27852657
+18 28 1
+27 28 51474
+35 28 35594
+44 28 35593
+90 28 55049
+210 28 5856
+217 28 5230
+225 28 6628
+234 28 63044
+244 28 16979
+456 28 42394
+631 28 46600
+861 28 24088
+870 28 26592
+880 28 36955
+891 28 1055
+1363 28 38786
+1400 28 7663
+1408 28 65189
+1417 28 60951
+1575 28 39478
+1629 28 62067
+1660 28 42229
+1667 28 13107
+1675 28 28549
+1684 28 33091
+1694 28 2459
+1854 28 56576
+1908 28 50666
+1973 28 13602
+2020 28 60520
+2029 28 34335
+2039 28 14203
+2050 28 46768
+2164 28 59104
+2171 28 59104
+2180 28 60805
+2181 28 60805
+2185 28 57042
+2189 28 57042
+2194 28 57042
+2200 28 38257
+2207 28 53089
+2215 28 37753
+2225 28 4871
+2226 28 4871
+2227 28 4871
+2234 28 38373
+2239 28 38373
+2245 28 41063
+2252 28 13921
+2260 28 511
+2269 28 1263
+2280 28 11219
+2281 28 11219
+2282 28 11219
+2285 28 11219
+2294 28 62126
+2300 28 37707
+2307 28 22891
+2315 28 51269
+2324 28 64420
+2334 28 62493
+2346 28 47545
+2347 28 47545
+2348 28 47545
+2351 28 47545
+2355 28 47545
+2366 28 11529
+2373 28 55169
+2381 28 54336
+2390 28 59526
+2400 28 33974
+2411 28 44814
+2424 28 40747
+2425 28 40747
+2426 28 40747
+2429 28 40747
+2433 28 40747
+2438 28 40747
+2444 28 62126
+2451 28 20561
+2459 28 27735
+2468 28 22813
+2478 28 7672
+2489 28 13568
+2501 28 46060
+2539 28 27852657
+18 29 1
+2275 29 65520
+2540 29 27852657
+19 30 1
+28 30 51474
+36 30 35594
+45 30 35593
+91 30 55049
+211 30 5856
+218 30 5230
+226 30 6628
+235 30 63044
+245 30 16979
+457 30 42394
+632 30 46600
+862 30 24088
+871 30 26592
+881 30 36955
+892 30 1055
+1364 30 38786
+1401 30 7663
+1409 30 65189
+1418 30 60951
+1576 30 39478
+1630 30 62067
+1661 30 42229
+1668 30 13107
+1676 30 28549
+1685 30 33091
+1695 30 2459
+1855 30 56576
+1909 30 50666
+1974 30 13602
+2021 30 60520
+2030 30 34335
+2040 30 14203
+2051 30 46768
+2165 30 59104
+2172 30 59104
+2183 30 60805
+2184 30 60805
+2186 30 57042
+2190 30 57042
+2195 30 57042
+2201 30 38257
+2208 30 53089
+2216 30 37753
+2228 30 4871
+2229 30 4871
+2230 30 4871
+2235 30 38373
+2240 30 38373
+2246 30 41063
+2253 30 13921
+2261 30 511
+2270 30 1263
+2283 30 11219
+2284 30 11219
+2285 30 11219
+2286 30 11219
+2295 30 62126
+2301 30 37707
+2308 30 22891
+2316 30 51269
+2325 30 64420
+2335 30 62493
+2349 30 47545
+2350 30 47545
+2351 30 47545
+2352 30 47545
+2356 30 47545
+2367 30 11529
+2374 30 55169
+2382 30 54336
+2391 30 59526
+2401 30 33974
+2412 30 44814
+2427 30 40747
+2428 30 40747
+2429 30 40747
+2430 30 40747
+2434 30 40747
+2439 30 40747
+2445 30 62126
+2452 30 20561
+2460 30 27735
+2469 30 22813
+2479 30 7672
+2490 30 13568
+2502 30 46060
+2541 30 27852657
+19 31 1
+20 31 1
+41 31 34976
+49 31 24806
+50 31 7599
+51 31 38144
+87 31 2585
+97 31 31230
+198 31 36084
+199 31 47570
+200 31 22764
+201 31 19134
+202 31 25454
+241 31 32368
+453 31 19269
+463 31 26427
+628 31 33947
+756 31 26994
+757 31 53889
+758 31 49039
+812 31 49673
+877 31 48094
+1403 31 60542
+1404 31 23497
+1405 31 23497
+1406 31 19175
+1407 31 19175
+1409 31 35436
+1410 31 35436
+1411 31 33521
+1412 31 30924
+1413 31 60937
+1414 31 40619
+1415 31 59234
+1416 31 59234
+1417 31 59234
+1419 31 33919
+1420 31 62765
+1421 31 3058
+1422 31 40480
+1423 31 13551
+1424 31 4092
+1627 31 6248
+1628 31 6248
+1629 31 6248
+1630 31 6248
+1632 31 16917
+1633 31 56035
+1634 31 37372
+1635 31 18647
+1636 31 3228
+1691 31 50709
+1906 31 7235
+1907 31 7235
+1908 31 7235
+1909 31 7235
+1910 31 7235
+1912 31 56668
+1913 31 53082
+1914 31 35607
+1915 31 25033
+1970 31 59401
+2036 31 34199
+2267 31 3782
+2268 31 3782
+2269 31 3782
+2270 31 3782
+2271 31 3782
+2272 31 3782
+2273 31 19507
+2274 31 42532
+2275 31 21362
+2276 31 19500
+2331 31 21602
+2397 31 52134
+2475 31 27671
+2542 31 27852657
+20 32 1
+29 32 51474
+37 32 35594
+46 32 35593
+92 32 55049
+212 32 5856
+219 32 5230
+227 32 6628
+236 32 63044
+246 32 16979
+458 32 42394
+633 32 46600
+863 32 24088
+872 32 26592
+882 32 36955
+893 32 1055
+1365 32 38786
+1402 32 7663
+1410 32 65189
+1419 32 60951
+1577 32 39478
+1631 32 62067
+1662 32 42229
+1669 32 13107
+1677 32 28549
+1686 32 33091
+1696 32 2459
+1856 32 56576
+1910 32 50666
+1975 32 13602
+2022 32 60520
+2031 32 34335
+2041 32 14203
+2052 32 46768
+2166 32 59104
+2173 32 59104
+2187 32 60805
+2188 32 60805
+2190 32 57042
+2191 32 57042
+2196 32 57042
+2202 32 38257
+2209 32 53089
+2217 32 37753
+2232 32 4871
+2233 32 4871
+2234 32 4871
+2236 32 38373
+2241 32 38373
+2247 32 41063
+2254 32 13921
+2262 32 511
+2271 32 1263
+2287 32 11219
+2288 32 11219
+2289 32 11219
+2290 32 11219
+2296 32 62126
+2302 32 37707
+2309 32 22891
+2317 32 51269
+2326 32 64420
+2336 32 62493
+2353 32 47545
+2354 32 47545
+2355 32 47545
+2356 32 47545
+2357 32 47545
+2368 32 11529
+2375 32 55169
+2383 32 54336
+2392 32 59526
+2402 32 33974
+2413 32 44814
+2431 32 40747
+2432 32 40747
+2433 32 40747
+2434 32 40747
+2435 32 40747
+2440 32 40747
+2446 32 62126
+2453 32 20561
+2461 32 27735
+2470 32 22813
+2480 32 7672
+2491 32 13568
+2503 32 46060
+2543 32 27852657
+20 33 1
+41 33 56003
+49 33 27205
+50 33 61775
+51 33 5772
+87 33 17825
+97 33 37327
+199 33 5185
+200 33 34049
+201 33 29243
+202 33 36150
+241 33 4595
+453 33 17224
+463 33 33905
+628 33 57426
+757 33 12706
+758 33 1038
+812 33 36651
+877 33 49341
+1395 33 45790
+1402 33 35643
+1403 33 472
+1404 33 40769
+1405 33 40769
+1406 33 13554
+1407 33 54171
+1409 33 58256
+1410 33 55678
+1411 33 62349
+1412 33 34686
+1413 33 36602
+1414 33 34288
+1415 33 51845
+1416 33 10001
+1417 33 10001
+1419 33 35268
+1420 33 43801
+1421 33 4136
+1422 33 65511
+1423 33 45454
+1424 33 51795
+1627 33 23598
+1628 33 55465
+1629 33 55465
+1630 33 55465
+1632 33 21929
+1633 33 6113
+1634 33 39333
+1635 33 9578
+1636 33 36504
+1691 33 32274
+1906 33 61765
+1907 33 46717
+1908 33 46717
+1909 33 46717
+1910 33 39910
+1912 33 36142
+1913 33 22635
+1914 33 61519
+1915 33 63340
+1970 33 47613
+2036 33 24073
+2267 33 53543
+2268 33 26630
+2269 33 26630
+2270 33 26630
+2271 33 44743
+2272 33 64686
+2273 33 58959
+2274 33 1397
+2275 33 49776
+2276 33 24679
+2331 33 13396
+2397 33 64240
+2475 33 56092
+2544 33 27852657
+21 34 1
+30 34 51474
+38 34 35594
+47 34 35593
+93 34 55049
+213 34 5856
+220 34 5230
+228 34 6628
+237 34 63044
+247 34 16979
+459 34 42394
+634 34 46600
+864 34 24088
+873 34 26592
+883 34 36955
+894 34 1055
+1366 34 38786
+1403 34 7663
+1411 34 65189
+1420 34 60951
+1578 34 39478
+1632 34 62067
+1663 34 42229
+1670 34 13107
+1678 34 28549
+1687 34 33091
+1697 34 2459
+1857 34 56576
+1911 34 50666
+1976 34 13602
+2023 34 60520
+2032 34 34335
+2042 34 14203
+2053 34 46768
+2167 34 59104
+2174 34 59104
+2192 34 60805
+2193 34 60805
+2195 34 57042
+2196 34 57042
+2197 34 57042
+2203 34 38257
+2210 34 53089
+2218 34 37753
+2237 34 4871
+2238 34 4871
+2239 34 4871
+2241 34 38373
+2242 34 38373
+2248 34 41063
+2255 34 13921
+2263 34 511
+2272 34 1263
+2292 34 11219
+2293 34 11219
+2294 34 11219
+2295 34 11219
+2297 34 62126
+2303 34 37707
+2310 34 22891
+2318 34 51269
+2327 34 64420
+2337 34 62493
+2358 34 47545
+2359 34 47545
+2360 34 47545
+2361 34 47545
+2362 34 47545
+2369 34 11529
+2376 34 55169
+2384 34 54336
+2393 34 59526
+2403 34 33974
+2414 34 44814
+2436 34 40747
+2437 34 40747
+2438 34 40747
+2439 34 40747
+2440 34 40747
+2441 34 40747
+2447 34 62126
+2454 34 20561
+2462 34 27735
+2471 34 22813
+2481 34 7672
+2492 34 13568
+2504 34 46060
+2545 34 27852657
+21 35 1
+41 35 46340
+49 35 61091
+50 35 54752
+51 35 8412
+87 35 5354
+97 35 42267
+198 35 60089
+199 35 44762
+200 35 49192
+201 35 857
+202 35 4187
+241 35 35853
+453 35 51035
+463 35 41233
+628 35 61375
+756 35 46021
+757 35 42880
+758 35 40427
+812 35 16879
+877 35 56878
+1403 35 4979
+1404 35 3450
+1405 35 3450
+1406 35 63538
+1407 35 63538
+1409 35 2205
+1410 35 2205
+1411 35 4120
+1412 35 11164
+1413 35 16323
+1414 35 52590
+1415 35 43103
+1416 35 43103
+1417 35 43103
+1419 35 61323
+1420 35 32477
+1421 35 45765
+1422 35 56187
+1423 35 5271
+1424 35 38003
+1627 35 63778
+1628 35 63778
+1629 35 63778
+1630 35 63778
+1632 35 39503
+1633 35 60987
+1634 35 8597
+1635 35 61797
+1636 35 19635
+1691 35 53045
+1906 35 9947
+1907 35 9947
+1908 35 9947
+1909 35 9947
+1910 35 9947
+1912 35 2529
+1913 35 9125
+1914 35 31728
+1915 35 56512
+1970 35 52678
+2036 35 32237
+2267 35 17842
+2268 35 17842
+2269 35 17842
+2270 35 17842
+2271 35 17842
+2272 35 17842
+2273 35 16334
+2274 35 22889
+2275 35 29472
+2276 35 51527
+2331 35 30499
+2397 35 54740
+2475 35 31304
+2546 35 27852657
+22 36 1
+31 36 51474
+39 36 35594
+48 36 35593
+94 36 55049
+214 36 5856
+221 36 5230
+229 36 6628
+238 36 63044
+248 36 16979
+460 36 42394
+635 36 46600
+865 36 24088
+874 36 26592
+884 36 36955
+895 36 1055
+1367 36 38786
+1404 36 7663
+1412 36 65189
+1421 36 60951
+1579 36 39478
+1633 36 62067
+1664 36 42229
+1671 36 13107
+1679 36 28549
+1688 36 33091
+1698 36 2459
+1858 36 56576
+1912 36 50666
+1977 36 13602
+2024 36 60520
+2033 36 34335
+2043 36 14203
+2054 36 46768
+2168 36 59104
+2175 36 59104
+2198 36 60805
+2199 36 60805
+2201 36 57042
+2202 36 57042
+2203 36 57042
+2204 36 38257
+2211 36 53089
+2219 36 37753
+2243 36 4871
+2244 36 4871
+2245 36 4871
+2247 36 38373
+2248 36 38373
+2249 36 41063
+2256 36 13921
+2264 36 511
+2273 36 1263
+2298 36 11219
+2299 36 11219
+2300 36 11219
+2301 36 11219
+2303 36 62126
+2304 36 37707
+2311 36 22891
+2319 36 51269
+2328 36 64420
+2338 36 62493
+2364 36 47545
+2365 36 47545
+2366 36 47545
+2367 36 47545
+2368 36 47545
+2370 36 11529
+2377 36 55169
+2385 36 54336
+2394 36 59526
+2404 36 33974
+2415 36 44814
+2442 36 40747
+2443 36 40747
+2444 36 40747
+2445 36 40747
+2446 36 40747
+2447 36 40747
+2448 36 62126
+2455 36 20561
+2463 36 27735
+2472 36 22813
+2482 36 7672
+2493 36 13568
+2505 36 46060
+2547 36 27852657
+22 37 1
+41 37 47830
+49 37 11080
+50 37 9788
+51 37 27479
+87 37 58544
+97 37 57564
+198 37 49634
+199 37 43314
+200 37 32234
+201 37 42227
+202 37 7963
+241 37 43399
+453 37 45773
+463 37 43907
+628 37 32989
+756 37 58605
+757 37 30182
+758 37 32436
+812 37 45955
+877 37 56365
+1404 37 48714
+1405 37 48714
+1406 37 26177
+1407 37 26177
+1409 37 10824
+1410 37 10824
+1411 37 10824
+1412 37 30607
+1413 37 39151
+1414 37 38715
+1415 37 8738
+1416 37 8738
+1417 37 8738
+1419 37 26682
+1420 37 26682
+1421 37 18647
+1422 37 57458
+1423 37 34799
+1424 37 38146
+1627 37 18350
+1628 37 18350
+1629 37 18350
+1630 37 18350
+1632 37 47142
+1633 37 3447
+1634 37 24116
+1635 37 12315
+1636 37 31224
+1691 37 31963
+1906 37 38426
+1907 37 38426
+1908 37 38426
+1909 37 38426
+1910 37 38426
+1912 37 36172
+1913 37 25813
+1914 37 21564
+1915 37 40765
+1970 37 48670
+2036 37 16301
+2267 37 22559
+2268 37 22559
+2269 37 22559
+2270 37 22559
+2271 37 22559
+2272 37 22559
+2273 37 17953
+2274 37 44074
+2275 37 31553
+2276 37 13620
+2331 37 20890
+2397 37 58693
+2475 37 64954
+2548 37 27852657
+23 38 1
+32 38 51474
+40 38 35594
+49 38 35593
+95 38 55049
+221 38 5856
+222 38 5230
+230 38 6628
+239 38 63044
+249 38 16979
+461 38 42394
+636 38 46600
+866 38 24088
+875 38 26592
+885 38 36955
+896 38 1055
+1368 38 38786
+1405 38 7663
+1413 38 65189
+1422 38 60951
+1580 38 39478
+1634 38 62067
+1671 38 42229
+1672 38 13107
+1680 38 28549
+1689 38 33091
+1699 38 2459
+1859 38 56576
+1913 38 50666
+1978 38 13602
+2025 38 60520
+2034 38 34335
+2044 38 14203
+2055 38 46768
+2175 38 59104
+2176 38 59104
+2205 38 60805
+2206 38 60805
+2208 38 57042
+2209 38 57042
+2210 38 57042
+2211 38 38257
+2212 38 53089
+2220 38 37753
+2250 38 4871
+2251 38 4871
+2252 38 4871
+2254 38 38373
+2255 38 38373
+2256 38 41063
+2257 38 13921
+2265 38 511
+2274 38 1263
+2305 38 11219
+2306 38 11219
+2307 38 11219
+2308 38 11219
+2310 38 62126
+2311 38 37707
+2312 38 22891
+2320 38 51269
+2329 38 64420
+2339 38 62493
+2371 38 47545
+2372 38 47545
+2373 38 47545
+2374 38 47545
+2375 38 47545
+2377 38 11529
+2378 38 55169
+2386 38 54336
+2395 38 59526
+2405 38 33974
+2416 38 44814
+2449 38 40747
+2450 38 40747
+2451 38 40747
+2452 38 40747
+2453 38 40747
+2454 38 40747
+2455 38 62126
+2456 38 20561
+2464 38 27735
+2473 38 22813
+2483 38 7672
+2494 38 13568
+2506 38 46060
+2549 38 27852657
+23 39 1
+24 39 1
+41 39 5702
+49 39 17712
+50 39 2035
+51 39 61855
+87 39 25296
+97 39 2378
+198 39 34916
+199 39 35595
+200 39 17883
+201 39 51623
+202 39 45360
+241 39 39316
+453 39 20329
+463 39 49610
+628 39 35032
+756 39 21856
+757 39 49432
+758 39 30691
+812 39 14567
+877 39 18851
+1404 39 23144
+1405 39 23144
+1406 39 28682
+1407 39 28682
+1409 39 15712
+1410 39 15712
+1411 39 15712
+1412 39 13069
+1413 39 54211
+1414 39 48689
+1415 39 24865
+1416 39 24865
+1417 39 24865
+1419 39 1222
+1420 39 1222
+1421 39 55400
+1422 39 52603
+1423 39 10509
+1424 39 65082
+1627 39 15100
+1628 39 15100
+1629 39 15100
+1630 39 15100
+1632 39 45748
+1633 39 53567
+1634 39 49726
+1635 39 27502
+1636 39 44417
+1691 39 33768
+1906 39 46974
+1907 39 46974
+1908 39 46974
+1909 39 46974
+1910 39 46974
+1912 39 17920
+1913 39 64635
+1914 39 4588
+1915 39 61153
+1970 39 47272
+2036 39 28120
+2267 39 6959
+2268 39 6959
+2269 39 6959
+2270 39 6959
+2271 39 6959
+2272 39 6959
+2273 39 36533
+2274 39 29800
+2275 39 19139
+2276 39 30290
+2331 39 14595
+2397 39 57469
+2475 39 55691
+2550 39 27852657
+24 40 1
+40 40 51474
+41 40 35594
+50 40 35593
+96 40 55049
+229 40 5856
+230 40 5230
+231 40 6628
+240 40 63044
+250 40 16979
+462 40 42394
+637 40 46600
+867 40 24088
+876 40 26592
+886 40 36955
+897 40 1055
+1369 40 38786
+1413 40 7663
+1414 40 65189
+1423 40 60951
+1581 40 39478
+1635 40 62067
+1679 40 42229
+1680 40 13107
+1681 40 28549
+1690 40 33091
+1700 40 2459
+1860 40 56576
+1914 40 50666
+1979 40 13602
+2026 40 60520
+2035 40 34335
+2045 40 14203
+2056 40 46768
+2211 40 59104
+2212 40 59104
+2213 40 60805
+2214 40 60805
+2216 40 57042
+2217 40 57042
+2218 40 57042
+2219 40 38257
+2220 40 53089
+2221 40 37753
+2258 40 4871
+2259 40 4871
+2260 40 4871
+2262 40 38373
+2263 40 38373
+2264 40 41063
+2265 40 13921
+2266 40 511
+2275 40 1263
+2313 40 11219
+2314 40 11219
+2315 40 11219
+2316 40 11219
+2318 40 62126
+2319 40 37707
+2320 40 22891
+2321 40 51269
+2330 40 64420
+2340 40 62493
+2379 40 47545
+2380 40 47545
+2381 40 47545
+2382 40 47545
+2383 40 47545
+2385 40 11529
+2386 40 55169
+2387 40 54336
+2396 40 59526
+2406 40 33974
+2417 40 44814
+2457 40 40747
+2458 40 40747
+2459 40 40747
+2460 40 40747
+2461 40 40747
+2462 40 40747
+2463 40 62126
+2464 40 20561
+2465 40 27735
+2474 40 22813
+2484 40 7672
+2495 40 13568
+2507 40 46060
+2551 40 27852657
+25 41 1
+33 41 1
+34 41 1
+42 41 1
+43 41 1
+44 41 1
+88 41 1
+89 41 1
+90 41 1
+91 41 1
+454 41 1
+455 41 1
+456 41 1
+457 41 1
+458 41 1
+1415 41 32761
+1416 41 32761
+1417 41 32761
+1418 41 32761
+1419 41 32761
+1420 41 32761
+2276 41 24573
+2552 41 27852657
+26 42 1
+2276 42 65520
+2553 42 27852657
+27 43 1
+1404 43 58226
+1405 43 58226
+1406 43 50318
+1407 43 50318
+1409 43 22624
+1410 43 22624
+1411 43 22624
+1412 43 9520
+1413 43 40147
+1414 43 47442
+1415 43 46532
+1416 43 46532
+1417 43 46532
+1419 43 39237
+1420 43 39237
+1421 43 41565
+1422 43 12173
+1423 43 1511
+1424 43 19590
+1627 43 52158
+1628 43 52158
+1629 43 52158
+1630 43 52158
+1632 43 51084
+1633 43 59962
+1634 43 14545
+1635 43 19350
+1636 43 16768
+1691 43 62699
+1906 43 54420
+1907 43 54420
+1908 43 54420
+1909 43 54420
+1910 43 54420
+1912 43 27048
+1913 43 59216
+1914 43 43674
+1915 43 34128
+1970 43 63812
+2036 43 1113
+2267 43 27587
+2268 43 27587
+2269 43 27587
+2270 43 27587
+2271 43 27587
+2272 43 27587
+2273 43 27102
+2274 43 43546
+2275 43 33156
+2276 43 56060
+2331 43 35356
+2397 43 7864
+2475 43 45047
+2554 43 27852657
+28 44 1
+2274 44 65520
+2555 44 27852657
+29 45 1
+30 45 1
+78 45 1
+85 45 10701
+86 45 10701
+87 45 10701
+94 45 10701
+95 45 10701
+96 45 21402
+97 45 10701
+199 45 10701
+200 45 10701
+201 45 21402
+202 45 21402
+241 45 10701
+443 45 60363
+444 45 60363
+451 45 5543
+452 45 385
+453 45 5543
+458 45 37086
+460 45 5543
+461 45 30866
+462 45 41567
+463 45 36024
+576 45 41993
+577 45 1795
+578 45 23197
+579 45 53678
+628 45 17654
+755 45 31292
+756 45 56615
+757 45 1795
+758 45 32276
+812 45 3205
+877 45 61773
+1404 45 38289
+1405 45 38289
+1412 45 55758
+1413 45 28523
+1414 45 55755
+1419 45 6181
+1420 45 6181
+1421 45 55758
+1422 45 61830
+1423 45 9140
+1424 45 18906
+1632 45 6181
+1633 45 42601
+1634 45 48673
+1635 45 479
+1636 45 29151
+1691 45 10245
+1912 45 44036
+1913 45 21537
+1914 45 38864
+1915 45 31925
+1970 45 32777
+2036 45 22532
+2273 45 36609
+2274 45 10960
+2275 45 36691
+2276 45 31323
+2331 45 28278
+2397 45 14994
+2475 45 12751
+2556 45 27852657
+30 46 1
+458 46 44666
+461 46 6705
+462 46 6705
+463 46 6705
+570 46 25916
+571 46 25916
+572 46 25916
+573 46 25916
+576 46 15602
+577 46 40274
+578 46 40274
+579 46 46979
+628 46 40274
+749 46 25916
+750 46 25916
+751 46 25916
+752 46 25916
+753 46 25916
+755 46 15602
+756 46 40274
+757 46 40274
+758 46 46979
+812 46 15027
+877 46 40274
+1396 46 39202
+1400 46 36446
+1401 46 36446
+1402 46 36446
+1403 46 21206
+1404 46 55236
+1405 46 55236
+1406 46 5670
+1407 46 5670
+1409 46 16549
+1410 46 16549
+1411 46 2100
+1412 46 40547
+1413 46 35024
+1414 46 45309
+1415 46 43840
+1416 46 43840
+1417 46 43840
+1419 46 10059
+1420 46 29789
+1421 46 59414
+1422 46 58321
+1423 46 9245
+1424 46 29457
+1627 46 19795
+1628 46 19795
+1629 46 19795
+1630 46 19795
+1632 46 51547
+1633 46 21984
+1634 46 64299
+1635 46 47740
+1636 46 37791
+1691 46 8334
+1906 46 13559
+1907 46 13559
+1908 46 13559
+1909 46 13559
+1910 46 13559
+1912 46 2866
+1913 46 41438
+1914 46 43393
+1915 46 14569
+1970 46 4322
+2036 46 61509
+2267 46 29862
+2268 46 29862
+2269 46 29862
+2270 46 29862
+2271 46 29862
+2272 46 1488
+2273 46 482
+2274 46 16234
+2275 46 26902
+2276 46 26947
+2331 46 61540
+2397 46 28482
+2475 46 1911
+2557 46 27852657
+31 47 1
+32 47 1
+41 47 65520
+49 47 43444
+50 47 3345
+51 47 3346
+97 47 32490
+198 47 46806
+199 47 27978
+200 47 50055
+201 47 52403
+202 47 49557
+241 47 20413
+463 47 338
+628 47 26118
+756 47 11834
+757 47 24451
+758 47 11370
+812 47 14336
+877 47 8631
+1404 47 13143
+1405 47 13143
+1406 47 39232
+1407 47 39232
+1409 47 42044
+1410 47 42044
+1411 47 42044
+1412 47 34607
+1413 47 59127
+1414 47 45984
+1415 47 33280
+1416 47 33280
+1417 47 33280
+1419 47 50628
+1420 47 50628
+1421 47 65428
+1422 47 57152
+1423 47 8406
+1424 47 22466
+1627 47 26653
+1628 47 26653
+1629 47 26653
+1630 47 26653
+1632 47 57457
+1633 47 19997
+1634 47 56171
+1635 47 25825
+1636 47 28407
+1691 47 49207
+1906 47 11830
+1907 47 11830
+1908 47 11830
+1909 47 11830
+1910 47 11830
+1912 47 54461
+1913 47 61196
+1914 47 22270
+1915 47 52754
+1970 47 35133
+2036 47 46094
+2267 47 36205
+2268 47 36205
+2269 47 36205
+2270 47 36205
+2271 47 36205
+2272 47 36205
+2273 47 61785
+2274 47 6140
+2275 47 11004
+2276 47 4200
+2331 47 47429
+2397 47 26106
+2475 47 20610
+2558 47 27852657
+32 48 1
+49 48 35242
+50 48 112
+51 48 112
+97 48 14164
+238 48 4521
+239 48 7431
+240 48 52810
+241 48 15995
+251 48 30047
+463 48 41767
+638 48 13926
+876 48 11352
+877 48 10703
+887 48 10172
+898 48 59572
+1405 48 53383
+1414 48 50924
+1422 48 2972
+1423 48 28749
+1424 48 32807
+1617 48 37802
+1626 48 1676
+1636 48 25980
+1688 48 11937
+1689 48 19905
+1690 48 38514
+1691 48 58138
+1701 48 9226
+1896 48 56840
+1905 48 65257
+1915 48 13363
+1980 48 64809
+2035 48 4824
+2036 48 49515
+2046 48 21263
+2057 48 59149
+2256 48 52563
+2257 48 1938
+2258 48 7235
+2259 48 7235
+2261 48 17622
+2262 48 17622
+2263 48 17622
+2264 48 58429
+2265 48 60699
+2266 48 37008
+2267 48 22384
+2268 48 22384
+2269 48 22384
+2271 48 13729
+2272 48 13729
+2273 48 23328
+2274 48 62621
+2275 48 3343
+2276 48 62476
+2322 48 4476
+2323 48 4476
+2324 48 4476
+2325 48 4476
+2327 48 54600
+2328 48 25903
+2329 48 37676
+2330 48 24406
+2331 48 26558
+2341 48 37829
+2388 48 20242
+2389 48 20242
+2390 48 20242
+2391 48 20242
+2392 48 20242
+2394 48 54976
+2395 48 57345
+2396 48 35655
+2397 48 63659
+2407 48 7118
+2418 48 52415
+2466 48 34589
+2467 48 34589
+2468 48 34589
+2469 48 34589
+2470 48 34589
+2471 48 34589
+2472 48 21753
+2473 48 13249
+2474 48 10993
+2475 48 1059
+2485 48 10802
+2496 48 41347
+2508 48 58623
+2559 48 27852657
+33 49 1
+42 49 1
+193 49 65520
+441 49 40739
+449 49 9784
+455 49 55591
+456 49 28826
+458 49 17245
+461 49 31843
+462 49 31843
+463 49 31843
+570 49 57609
+571 49 40625
+572 49 13860
+573 49 5374
+576 49 36785
+577 49 57879
+578 49 57879
+579 49 24201
+628 49 57879
+749 49 57610
+750 49 40625
+751 49 13860
+752 49 5374
+753 49 63694
+755 49 36785
+756 49 57879
+757 49 57879
+758 49 24201
+812 49 50237
+877 49 57879
+1395 49 40206
+1396 49 40597
+1400 49 32490
+1401 49 32490
+1402 49 7175
+1403 49 3626
+1404 49 61286
+1405 49 61286
+1406 49 58535
+1407 49 3007
+1409 49 30081
+1410 49 32014
+1411 49 7663
+1412 49 26668
+1413 49 10787
+1414 49 15022
+1415 49 26313
+1416 49 38139
+1417 49 2836
+1419 49 29880
+1420 49 33286
+1421 49 24317
+1422 49 44034
+1423 49 35945
+1424 49 20923
+1627 49 58486
+1628 49 41647
+1629 49 6344
+1630 49 20949
+1632 49 13015
+1633 49 48464
+1634 49 45444
+1635 49 20661
+1636 49 34160
+1691 49 13237
+1906 49 31974
+1907 49 47856
+1908 49 7133
+1909 49 42484
+1910 49 65138
+1912 49 43142
+1913 49 33892
+1914 49 44243
+1915 49 10207
+1970 49 59956
+2036 49 46719
+2267 49 28140
+2268 49 64613
+2269 49 20029
+2270 49 20029
+2271 49 9789
+2272 49 53917
+2273 49 36576
+2274 49 29205
+2275 49 50185
+2276 49 9792
+2331 49 57545
+2397 49 59897
+2475 49 24642
+2560 49 27852657
+34 50 1
+43 50 1
+194 50 65520
+441 50 21592
+449 50 232
+455 50 9930
+456 50 56896
+458 50 55655
+461 50 7640
+462 50 7640
+463 50 7640
+570 50 20167
+571 50 37151
+572 50 36222
+573 50 40663
+576 50 11419
+577 50 55953
+578 50 55953
+579 50 63593
+628 50 55953
+749 50 20167
+750 50 37152
+751 50 36222
+752 50 40663
+753 50 59136
+755 50 11419
+756 50 55953
+757 50 55953
+758 50 63593
+812 50 46385
+877 50 55953
+1393 50 6687
+1394 50 6687
+1395 50 8819
+1396 50 8473
+1400 50 33479
+1401 50 33479
+1402 50 35611
+1403 50 8756
+1404 50 33514
+1405 50 33514
+1406 50 2957
+1407 50 58485
+1409 50 38345
+1410 50 26926
+1411 50 29036
+1412 50 45387
+1413 50 40286
+1414 50 6772
+1415 50 13792
+1416 50 1966
+1417 50 58496
+1419 50 49204
+1420 50 14016
+1421 50 31548
+1422 50 39285
+1423 50 26461
+1424 50 19689
+1627 50 23302
+1628 50 40141
+1629 50 29989
+1630 50 56635
+1632 50 28204
+1633 50 58810
+1634 50 29199
+1635 50 25192
+1636 50 10884
+1691 50 56716
+1906 50 1182
+1907 50 50821
+1908 50 8655
+1909 50 40442
+1910 50 34336
+1912 50 45739
+1913 50 48144
+1914 50 52795
+1915 50 33629
+1970 50 22748
+2036 50 31553
+2267 50 64653
+2268 50 28180
+2269 50 25239
+2270 50 25239
+2271 50 245
+2272 50 48166
+2273 50 56882
+2274 50 26769
+2275 50 55171
+2276 50 34448
+2331 50 64485
+2397 50 46176
+2475 50 9808
+2561 50 27852657
+35 51 1
+2276 51 65520
+2562 51 27852657
+36 52 1
+2275 52 65520
+2563 52 27852657
+37 53 1
+38 53 1
+46 53 1
+47 53 1
+85 53 35040
+86 53 35040
+87 53 35040
+93 53 1
+94 53 35040
+95 53 35040
+96 53 4559
+97 53 35040
+199 53 35040
+200 53 35040
+201 53 4559
+202 53 4559
+241 53 35040
+443 53 39772
+444 53 39772
+451 53 9291
+452 53 49063
+453 53 9291
+458 53 37086
+460 53 9291
+461 53 38362
+462 53 7881
+463 53 64111
+576 53 49489
+577 53 13039
+578 53 17598
+579 53 6897
+628 53 8307
+755 53 14449
+756 53 43520
+757 53 13039
+758 53 2338
+812 53 42536
+877 53 3748
+1404 53 29399
+1405 53 29399
+1412 53 11308
+1413 53 40707
+1414 53 11308
+1419 53 6181
+1420 53 6181
+1421 53 11308
+1422 53 7092
+1423 53 17127
+1424 53 5819
+1632 53 6181
+1633 53 2836
+1634 53 64141
+1635 53 26721
+1636 53 21229
+1691 53 15410
+1912 53 26736
+1913 53 56659
+1914 53 19239
+1915 53 58626
+1970 53 43564
+2036 53 28154
+2273 53 39420
+2274 53 1018
+2275 53 46292
+2276 53 36593
+2331 53 36471
+2397 53 14057
+2475 53 45043
+2564 53 27852657
+38 54 1
+47 54 1
+198 54 65520
+458 54 53121
+461 54 1948
+462 54 1948
+463 54 1948
+570 54 236
+571 54 236
+572 54 236
+573 54 236
+576 54 46927
+577 54 44809
+578 54 44809
+579 54 46757
+628 54 44809
+749 54 236
+750 54 236
+751 54 236
+752 54 236
+753 54 236
+755 54 46927
+756 54 44809
+757 54 44809
+758 54 46757
+812 54 24097
+877 54 44809
+1396 54 1044
+1400 54 37196
+1401 54 37196
+1402 54 37196
+1403 54 24950
+1404 54 53156
+1405 54 53156
+1406 54 42839
+1407 54 42839
+1409 54 6393
+1410 54 6393
+1411 54 55400
+1412 54 1314
+1413 54 10869
+1414 54 23234
+1415 54 44299
+1416 54 44299
+1417 54 44299
+1419 54 34458
+1420 54 23319
+1421 54 46092
+1422 54 16966
+1423 54 21948
+1424 54 64235
+1627 54 21579
+1628 54 21579
+1629 54 21579
+1630 54 21579
+1632 54 50349
+1633 54 49
+1634 54 24186
+1635 54 34987
+1636 54 57048
+1691 54 58334
+1906 54 26164
+1907 54 26164
+1908 54 26164
+1909 54 26164
+1910 54 26164
+1912 54 32257
+1913 54 57600
+1914 54 21818
+1915 54 17202
+1970 54 1070
+2036 54 8257
+2267 54 46528
+2268 54 46528
+2269 54 46528
+2270 54 46528
+2271 54 46528
+2272 54 46354
+2273 54 32969
+2274 54 60879
+2275 54 56348
+2276 54 53172
+2331 54 3125
+2397 54 7855
+2475 54 666
+2565 54 27852657
+39 55 1
+49 55 54365
+50 55 65168
+51 55 65168
+97 55 54898
+198 55 50484
+199 55 47291
+200 55 58447
+201 55 45292
+202 55 60330
+241 55 5079
+463 55 5111
+628 55 11230
+756 55 37618
+757 55 40025
+758 55 41008
+812 55 3814
+877 55 63184
+1404 55 19800
+1405 55 19800
+1406 55 25297
+1407 55 25297
+1409 55 27456
+1410 55 27456
+1411 55 27456
+1412 55 7413
+1413 55 44640
+1414 55 24840
+1415 55 48715
+1416 55 48715
+1417 55 48715
+1419 55 14484
+1420 55 14484
+1421 55 53495
+1422 55 19857
+1423 55 25491
+1424 55 44130
+1627 55 44340
+1628 55 44340
+1629 55 44340
+1630 55 44340
+1632 55 51431
+1633 55 56803
+1634 55 49567
+1635 55 2368
+1636 55 22248
+1691 55 9324
+1906 55 2728
+1907 55 2728
+1908 55 2728
+1909 55 2728
+1910 55 2728
+1912 55 39222
+1913 55 47325
+1914 55 53801
+1915 55 27977
+1970 55 32523
+2036 55 23722
+2267 55 16269
+2268 55 16269
+2269 55 16269
+2270 55 16269
+2271 55 16269
+2272 55 16269
+2273 55 8734
+2274 55 53263
+2275 55 17396
+2276 55 23113
+2331 55 8058
+2397 55 33021
+2475 55 64137
+2566 55 27852657
+40 56 1
+41 56 1
+49 56 60713
+50 56 21040
+51 56 21039
+97 56 63116
+198 56 63788
+199 56 7439
+200 56 12247
+201 56 25418
+202 56 5015
+241 56 28459
+463 56 19234
+628 56 59752
+756 56 51039
+757 56 65471
+758 56 19774
+812 56 28194
+877 56 62422
+1404 56 28201
+1405 56 28201
+1406 56 7167
+1407 56 7167
+1409 56 30653
+1410 56 30653
+1411 56 30653
+1412 56 14117
+1413 56 38146
+1414 56 9945
+1415 56 52575
+1416 56 52575
+1417 56 52575
+1419 56 35116
+1420 56 35116
+1421 56 368
+1422 56 51764
+1423 56 34875
+1424 56 26132
+1627 56 15419
+1628 56 15419
+1629 56 15419
+1630 56 15419
+1632 56 29000
+1633 56 65087
+1634 56 13491
+1635 56 54846
+1636 56 54247
+1691 56 64762
+1906 56 13314
+1907 56 13314
+1908 56 13314
+1909 56 13314
+1910 56 13314
+1912 56 21285
+1913 56 63636
+1914 56 58367
+1915 56 14573
+1970 56 14689
+2036 56 34570
+2267 56 60907
+2268 56 60907
+2269 56 60907
+2270 56 60907
+2271 56 60907
+2272 56 60907
+2273 56 55240
+2274 56 57879
+2275 56 60898
+2276 56 8104
+2331 56 22686
+2397 56 41094
+2475 56 56139
+2567 56 27852657
+41 57 1
+49 57 51474
+50 57 35594
+51 57 35593
+97 57 55049
+238 57 5856
+239 57 5230
+240 57 6628
+241 57 63044
+251 57 16979
+463 57 42394
+638 57 46600
+876 57 24088
+877 57 26592
+887 57 36955
+898 57 1055
+1414 57 38786
+1422 57 7663
+1423 57 65189
+1424 57 60951
+1626 57 39478
+1636 57 62067
+1688 57 42229
+1689 57 13107
+1690 57 28549
+1691 57 33091
+1701 57 2459
+1905 57 56576
+1915 57 50666
+1980 57 13602
+2035 57 60520
+2036 57 34335
+2046 57 14203
+2057 57 46768
+2256 57 59104
+2257 57 59104
+2258 57 60805
+2259 57 60805
+2261 57 57042
+2262 57 57042
+2263 57 57042
+2264 57 38257
+2265 57 53089
+2266 57 37753
+2267 57 4871
+2268 57 4871
+2269 57 4871
+2271 57 38373
+2272 57 38373
+2273 57 41063
+2274 57 13921
+2275 57 511
+2276 57 1263
+2322 57 11219
+2323 57 11219
+2324 57 11219
+2325 57 11219
+2327 57 62126
+2328 57 37707
+2329 57 22891
+2330 57 51269
+2331 57 64420
+2341 57 62493
+2388 57 47545
+2389 57 47545
+2390 57 47545
+2391 57 47545
+2392 57 47545
+2394 57 11529
+2395 57 55169
+2396 57 54336
+2397 57 59526
+2407 57 33974
+2418 57 44814
+2466 57 40747
+2467 57 40747
+2468 57 40747
+2469 57 40747
+2470 57 40747
+2471 57 40747
+2472 57 62126
+2473 57 20561
+2474 57 27735
+2475 57 22813
+2485 57 7672
+2496 57 13568
+2508 57 46060
+2568 57 27852657
+42 58 1
+43 58 1
+49 58 25927
+50 58 57482
+51 58 57482
+97 58 29438
+195 58 1
+198 58 3114
+199 58 32276
+200 58 6349
+201 58 29610
+202 58 4171
+241 58 32215
+463 58 40607
+628 58 27567
+756 58 65303
+757 58 14582
+758 58 26763
+812 58 56553
+877 58 61201
+1395 58 454
+1401 58 36229
+1402 58 54927
+1403 58 1144
+1404 58 7535
+1405 58 7535
+1406 58 50241
+1407 58 6922
+1409 58 6948
+1410 58 17591
+1411 58 30422
+1412 58 41133
+1413 58 56915
+1414 58 49380
+1415 58 21100
+1416 58 37567
+1417 58 23766
+1419 58 679
+1420 58 18093
+1421 58 3321
+1422 58 38189
+1423 58 37780
+1424 58 36922
+1627 58 21459
+1628 58 35013
+1629 58 4625
+1630 58 56392
+1632 58 2172
+1633 58 29917
+1634 58 26508
+1635 58 15056
+1636 58 29597
+1691 58 25826
+1906 58 53600
+1907 58 43400
+1908 58 49493
+1909 58 30510
+1910 58 52286
+1912 58 28251
+1913 58 35502
+1914 58 24166
+1915 58 8119
+1970 58 29945
+2036 58 44026
+2267 58 56948
+2268 58 43408
+2269 58 48175
+2270 58 16217
+2271 58 4879
+2272 58 19167
+2273 58 14942
+2274 58 27367
+2275 58 753
+2276 58 42253
+2331 58 48931
+2397 58 12705
+2475 58 51890
+2569 58 27852657
+43 59 1
+49 59 26954
+50 59 38996
+51 59 38996
+97 59 65149
+199 59 44187
+200 59 56625
+201 59 37368
+202 59 31994
+241 59 5841
+463 59 45901
+628 59 10522
+757 59 15876
+758 59 13638
+812 59 20749
+877 59 16068
+1395 59 28332
+1402 59 25865
+1403 59 16981
+1404 59 50893
+1405 59 50893
+1406 59 20073
+1407 59 9057
+1409 59 33789
+1410 59 19956
+1411 59 60259
+1412 59 57299
+1413 59 21352
+1414 59 35980
+1415 59 33637
+1416 59 36435
+1417 59 33019
+1419 59 33903
+1420 59 20899
+1421 59 47346
+1422 59 35965
+1423 59 7523
+1424 59 20687
+1627 59 58460
+1628 59 64285
+1629 59 29118
+1630 59 29118
+1632 59 8268
+1633 59 32375
+1634 59 52953
+1635 59 15234
+1636 59 42618
+1691 59 9395
+1906 59 7848
+1907 59 63565
+1908 59 41449
+1909 59 41449
+1910 59 60814
+1912 59 54419
+1913 59 18811
+1914 59 12553
+1915 59 60483
+1970 59 13854
+2036 59 46390
+2267 59 16453
+2268 59 49210
+2269 59 23573
+2270 59 23573
+2271 59 42237
+2272 59 28774
+2273 59 14960
+2274 59 24310
+2275 59 23118
+2276 59 17336
+2331 59 59527
+2397 59 34371
+2475 59 41592
+2570 59 27852657
+44 60 1
+195 60 65520
+440 60 9853
+441 60 23304
+449 60 49085
+456 60 25700
+458 60 15471
+461 60 54419
+462 60 54419
+463 60 54419
+570 60 34666
+571 60 34666
+572 60 42740
+573 60 15027
+576 60 20606
+577 60 2942
+578 60 2942
+579 60 57361
+628 60 2942
+749 60 34666
+750 60 34666
+751 60 42741
+752 60 15027
+753 60 49491
+755 60 20606
+756 60 2942
+757 60 2942
+758 60 57361
+812 60 5884
+877 60 2942
+1393 60 58834
+1394 60 43196
+1395 60 57087
+1396 60 42246
+1400 60 29440
+1401 60 6014
+1402 60 19905
+1403 60 9327
+1404 60 194
+1405 60 194
+1406 60 267
+1407 60 267
+1409 60 54733
+1410 60 60513
+1411 60 4826
+1412 60 24884
+1413 60 53783
+1414 60 53589
+1415 60 36439
+1416 60 36439
+1417 60 16090
+1419 60 49686
+1420 60 8717
+1421 60 57145
+1422 60 51126
+1423 60 6979
+1424 60 18911
+1627 60 57614
+1628 60 57614
+1629 60 38426
+1630 60 1757
+1632 60 47778
+1633 60 25470
+1634 60 30221
+1635 60 14804
+1636 60 37070
+1691 60 18159
+1906 60 60454
+1907 60 60454
+1908 60 7835
+1909 60 44264
+1910 60 47567
+1912 60 50250
+1913 60 54694
+1914 60 31850
+1915 60 38473
+1970 60 20655
+2036 60 2496
+2267 60 30867
+2268 60 30867
+2269 60 55661
+2270 60 60892
+2271 60 6037
+2272 60 63125
+2273 60 3770
+2274 60 54328
+2275 60 48894
+2276 60 33314
+2331 60 17946
+2397 60 41377
+2475 60 11644
+2571 60 27852657
+45 61 1
+2276 61 65520
+2572 61 27852657
+46 62 1
+49 62 56220
+50 62 36376
+51 62 36376
+97 62 40097
+198 62 35859
+199 62 13303
+200 62 22604
+201 62 28557
+202 62 8790
+241 62 5069
+463 62 13382
+628 62 36952
+756 62 25092
+757 62 16934
+758 62 52081
+812 62 60624
+877 62 28741
+1403 62 12749
+1404 62 26774
+1405 62 26774
+1406 62 36979
+1407 62 36979
+1409 62 36998
+1410 62 36998
+1411 62 38757
+1412 62 39005
+1413 62 34088
+1414 62 7314
+1415 62 20894
+1416 62 20894
+1417 62 20894
+1419 62 15880
+1420 62 4636
+1421 62 56671
+1422 62 50393
+1423 62 34990
+1424 62 46270
+1627 62 43308
+1628 62 43308
+1629 62 43308
+1630 62 43308
+1632 62 36522
+1633 62 46985
+1634 62 25890
+1635 62 13797
+1636 62 9029
+1691 62 44677
+1906 62 21248
+1907 62 21248
+1908 62 21248
+1909 62 21248
+1910 62 21248
+1912 62 21391
+1913 62 14626
+1914 62 19389
+1915 62 23699
+1970 62 29147
+2036 62 1045
+2267 62 50628
+2268 62 50628
+2269 62 50628
+2270 62 50628
+2271 62 50628
+2272 62 50628
+2273 62 30191
+2274 62 26888
+2275 62 3691
+2276 62 1696
+2331 62 36464
+2397 62 57955
+2475 62 42875
+2573 62 27852657
+47 63 1
+49 63 47936
+50 63 54446
+51 63 54446
+97 63 6054
+198 63 44904
+199 63 21074
+200 63 38659
+201 63 42584
+202 63 7857
+241 63 56249
+463 63 4930
+628 63 12225
+756 63 65362
+757 63 30235
+758 63 60653
+812 63 42735
+877 63 21238
+1403 63 52772
+1404 63 23705
+1405 63 23705
+1406 63 6772
+1407 63 6772
+1409 63 38365
+1410 63 38365
+1411 63 36606
+1412 63 55125
+1413 63 6502
+1414 63 48318
+1415 63 38131
+1416 63 38131
+1417 63 38131
+1419 63 18827
+1420 63 30071
+1421 63 54745
+1422 63 15666
+1423 63 21438
+1424 63 44236
+1627 63 47188
+1628 63 47188
+1629 63 47188
+1630 63 47188
+1632 63 65314
+1633 63 61667
+1634 63 12871
+1635 63 64435
+1636 63 48676
+1691 63 21518
+1906 63 50154
+1907 63 50154
+1908 63 50154
+1909 63 50154
+1910 63 50154
+1912 63 32423
+1913 63 47591
+1914 63 24698
+1915 63 42610
+1970 63 51315
+2036 63 29406
+2267 63 3731
+2268 63 3731
+2269 63 3731
+2270 63 3731
+2271 63 3731
+2272 63 3731
+2273 63 14782
+2274 63 6426
+2275 63 10974
+2276 63 589
+2331 63 19958
+2397 63 5374
+2475 63 62906
+2574 63 27852657
+48 64 1
+49 64 58152
+50 64 64391
+51 64 64391
+97 64 54740
+198 64 8155
+199 64 8153
+200 64 15523
+201 64 38979
+202 64 20117
+241 64 29768
+463 64 20423
+628 64 52414
+756 64 36345
+757 64 27598
+758 64 45774
+812 64 9159
+877 64 52034
+1404 64 27596
+1405 64 27596
+1406 64 35507
+1407 64 35507
+1409 64 21677
+1410 64 21677
+1411 64 21677
+1412 64 24308
+1413 64 62056
+1414 64 34460
+1415 64 11522
+1416 64 11522
+1417 64 11522
+1419 64 42610
+1420 64 42610
+1421 64 33274
+1422 64 3633
+1423 64 5697
+1424 64 24600
+1627 64 45087
+1628 64 45087
+1629 64 45087
+1630 64 45087
+1632 64 53022
+1633 64 23519
+1634 64 35417
+1635 64 43143
+1636 64 13605
+1691 64 35154
+1906 64 63986
+1907 64 63986
+1908 64 63986
+1909 64 63986
+1910 64 63986
+1912 64 45584
+1913 64 47510
+1914 64 35134
+1915 64 3149
+1970 64 10107
+2036 64 21548
+2267 64 46063
+2268 64 46063
+2269 64 46063
+2270 64 46063
+2271 64 46063
+2272 64 46063
+2273 64 48863
+2274 64 16395
+2275 64 12958
+2276 64 5566
+2331 64 49339
+2397 64 38488
+2475 64 38622
+2575 64 27852657
+52 65 1
+98 65 1
+100 65 1
+1586 65 49142
+1641 65 49142
+1644 65 49142
+1865 65 2
+1920 65 49142
+1923 65 49142
+2226 65 1
+2281 65 8191
+2284 65 8191
+2293 65 8191
+2477 65 13310
+2488 65 49142
+2500 65 8191
+2576 65 27852657
+52 66 1
+53 66 1
+98 66 1
+99 66 1
+101 66 1
+1586 66 32761
+1587 66 32761
+1641 66 32761
+1642 66 32761
+1645 66 32761
+1920 66 32761
+1921 66 32761
+1924 66 32761
+2226 66 1
+2227 66 1
+2281 66 24572
+2282 66 24572
+2284 66 1
+2285 66 24572
+2293 66 1
+2294 66 24572
+2477 66 32761
+2478 66 4096
+2489 66 32761
+2500 66 1
+2501 66 24572
+2577 66 27852657
+53 67 1
+54 67 56901
+55 67 56901
+56 67 36996
+57 67 30940
+58 67 34581
+60 67 2415
+61 67 63106
+62 67 59634
+66 67 6472
+71 67 19220
+73 67 43857
+164 67 19220
+165 67 23139
+539 67 44371
+543 67 38612
+548 67 26909
+1587 67 3590
+1590 67 41788
+1591 67 5143
+1594 67 11668
+1595 67 43137
+1596 67 37994
+1601 67 20743
+1602 67 12929
+1607 67 3411
+1613 67 26942
+1614 67 15818
+1615 67 32168
+1616 67 59145
+1617 67 59145
+1618 67 51431
+1619 67 62109
+1621 67 58663
+1622 67 10505
+1623 67 49647
+1624 67 23046
+1625 67 31345
+1626 67 37721
+1627 67 61325
+1628 67 5642
+1629 67 3586
+1631 67 28110
+1632 67 53823
+1633 67 43044
+1634 67 36334
+1635 67 29069
+1636 67 56869
+1682 67 52641
+1683 67 12526
+1684 67 8029
+1685 67 34996
+1687 67 49458
+1688 67 6424
+1689 67 30773
+1690 67 12683
+1691 67 31844
+1701 67 40496
+1961 67 56126
+1962 67 31554
+1963 67 35220
+1964 67 21586
+1965 67 12182
+1967 67 39101
+1968 67 59952
+1969 67 18419
+1970 67 29689
+1980 67 3269
+2046 67 28294
+2322 67 4338
+2323 67 64734
+2324 67 19280
+2325 67 52545
+2326 67 19126
+2327 67 44456
+2328 67 53591
+2329 67 14289
+2330 67 49993
+2331 67 25865
+2341 67 39988
+2407 67 31587
+2485 67 17129
+2578 67 27852657
+54 68 1
+55 68 1
+109 68 1
+166 68 32766
+205 68 32766
+206 68 32766
+502 68 65520
+513 68 65520
+525 68 65520
+550 68 10
+551 68 2
+592 68 32764
+593 68 32764
+775 68 65519
+776 68 65519
+777 68 65518
+1494 68 40949
+1495 68 65515
+1521 68 40949
+1522 68 65515
+1556 68 40949
+1557 68 65515
+1599 68 16377
+1601 68 8195
+1602 68 57327
+1654 68 57328
+1655 68 57328
+1657 68 8191
+1933 68 8188
+1934 68 8188
+1935 68 16382
+2294 68 53236
+2295 68 53236
+2296 68 40951
+2297 68 53235
+2303 68 65520
+2310 68 65520
+2318 68 65520
+2327 68 12285
+2337 68 14337
+2403 68 32763
+2481 68 19446
+2579 68 27852657
+55 69 1
+2241 69 65066
+2242 69 65067
+2247 69 62337
+2254 69 12276
+2255 69 32511
+2256 69 45215
+2257 69 45215
+2258 69 338
+2259 69 3916
+2261 69 40404
+2262 69 45425
+2263 69 33114
+2264 69 45820
+2265 69 54322
+2266 69 9107
+2267 69 33593
+2268 69 36595
+2269 69 36595
+2271 69 1850
+2272 69 21277
+2273 69 19756
+2274 69 6146
+2275 69 23699
+2276 69 14592
+2322 69 8568
+2323 69 9141
+2324 69 9141
+2325 69 9141
+2327 69 7166
+2328 69 65084
+2329 69 47776
+2330 69 45194
+2331 69 6255
+2341 69 57184
+2388 69 61662
+2389 69 3628
+2390 69 3628
+2391 69 3628
+2392 69 18723
+2394 69 40111
+2395 69 4734
+2396 69 64597
+2397 69 62284
+2407 69 54888
+2418 69 63225
+2466 69 17971
+2467 69 33177
+2468 69 33177
+2469 69 33177
+2470 69 27091
+2471 69 1162
+2472 69 26529
+2473 69 34981
+2474 69 18824
+2475 69 23471
+2485 69 63226
+2496 69 29499
+2508 69 58862
+2580 69 27852657
+56 70 1
+110 70 1
+111 70 65520
+496 70 41694
+673 70 41693
+674 70 1
+678 70 65520
+1273 70 59561
+1480 70 19355
+1484 70 34246
+1495 70 58612
+1759 70 56584
+1763 70 27549
+1766 70 58362
+1767 70 6044
+1768 70 44016
+1806 70 50667
+1841 70 22320
+1884 70 13030
+1886 70 57016
+1895 70 51140
+1903 70 51140
+1912 70 51140
+1937 70 14328
+1938 70 171
+1939 70 3030
+1940 70 32348
+1943 70 20010
+1950 70 21076
+1958 70 21076
+1967 70 6695
+1977 70 21076
+2003 70 14328
+2004 70 171
+2005 70 3030
+2006 70 32348
+2007 70 40511
+2009 70 20010
+2016 70 21076
+2024 70 21076
+2033 70 6695
+2043 70 42152
+2054 70 21076
+2115 70 33672
+2116 70 33672
+2117 70 13819
+2118 70 12724
+2119 70 54997
+2120 70 5625
+2121 70 34734
+2122 70 38665
+2123 70 49189
+2124 70 5625
+2125 70 34734
+2126 70 38761
+2127 70 15038
+2128 70 31370
+2129 70 5625
+2130 70 34734
+2131 70 37329
+2132 70 6699
+2133 70 21587
+2134 70 55738
+2137 70 31176
+2138 70 29486
+2139 70 40942
+2140 70 46723
+2164 70 9436
+2165 70 7746
+2166 70 19202
+2167 70 49896
+2168 70 24278
+2175 70 24278
+2198 70 38061
+2199 70 34747
+2201 70 62297
+2202 70 12693
+2203 70 58745
+2204 70 34831
+2211 70 1922
+2219 70 43165
+2243 70 64771
+2244 70 61457
+2245 70 12313
+2247 70 20990
+2248 70 13943
+2249 70 1088
+2256 70 4900
+2264 70 47384
+2273 70 4219
+2298 70 40899
+2299 70 1468
+2300 70 63524
+2301 70 15746
+2303 70 55239
+2304 70 55627
+2311 70 10482
+2319 70 48111
+2328 70 54919
+2338 70 50700
+2364 70 34806
+2365 70 40117
+2366 70 8221
+2367 70 12523
+2368 70 606
+2370 70 17224
+2377 70 45327
+2385 70 62436
+2394 70 64723
+2404 70 59846
+2415 70 9146
+2442 70 21503
+2443 70 37146
+2444 70 5967
+2445 70 7571
+2446 70 44150
+2447 70 16576
+2448 70 63233
+2455 70 63822
+2463 70 65148
+2472 70 38880
+2482 70 55442
+2493 70 64249
+2505 70 14260
+2581 70 27852657
+57 71 1
+60 71 1
+165 71 1
+396 71 1
+397 71 32762
+403 71 1
+405 71 32762
+413 71 32761
+427 71 1
+431 71 32760
+542 71 1
+543 71 32764
+721 71 1
+722 71 32763
+725 71 3
+1276 71 61427
+1280 71 8192
+1285 71 8192
+1301 71 61427
+1305 71 8192
+1310 71 8192
+1334 71 17746
+1338 71 30032
+1343 71 30032
+1378 71 24572
+1383 71 40952
+1388 71 40952
+1590 71 24572
+1591 71 28670
+1600 71 40952
+1869 71 61427
+1870 71 12287
+1874 71 8190
+2230 71 38903
+2231 71 63473
+2235 71 36855
+2240 71 36855
+2246 71 45047
+2253 71 45047
+2261 71 32761
+2270 71 50506
+2325 71 50507
+2391 71 23892
+2469 71 5
+2582 71 27852657
+58 72 1
+61 72 43337
+65 72 28743
+66 72 29510
+73 72 45124
+548 72 47962
+1594 72 1785
+1595 72 18278
+1596 72 15078
+1601 72 909
+1602 72 7701
+1607 72 25737
+1613 72 32333
+1614 72 9898
+1615 72 38836
+1616 72 44110
+1617 72 44110
+1618 72 36897
+1619 72 27161
+1621 72 33200
+1622 72 15596
+1623 72 17666
+1624 72 12413
+1625 72 47914
+1626 72 3804
+1627 72 8874
+1628 72 13121
+1629 72 24538
+1631 72 8885
+1632 72 63236
+1633 72 20745
+1634 72 49250
+1635 72 29477
+1636 72 25673
+1682 72 60883
+1683 72 41854
+1684 72 36240
+1685 72 10114
+1687 72 60949
+1688 72 35971
+1689 72 59921
+1690 72 25726
+1691 72 57179
+1701 72 31506
+1961 72 63574
+1962 72 11155
+1963 72 5671
+1964 72 1896
+1965 72 8192
+1967 72 49090
+1968 72 9607
+1969 72 39398
+1970 72 17237
+1980 72 1711
+2046 72 35726
+2322 72 57387
+2323 72 15168
+2324 72 15764
+2325 72 1432
+2326 72 43534
+2327 72 57519
+2328 72 10665
+2329 72 8227
+2330 72 7176
+2331 72 57048
+2341 72 58923
+2407 72 44578
+2485 72 44053
+2583 72 27852657
+59 73 1
+113 73 1
+114 73 1
+1605 73 49142
+1660 73 49142
+1661 73 49142
+1884 73 2
+1939 73 49142
+1940 73 49142
+2245 73 1
+2300 73 8191
+2301 73 8191
+2303 73 8191
+2482 73 13310
+2493 73 49142
+2505 73 8191
+2584 73 27852657
+59 74 1
+72 74 1
+113 74 1
+123 74 65520
+166 74 2
+205 74 1
+1605 74 32761
+1629 74 32761
+1660 74 32761
+1668 74 32760
+1684 74 1
+1694 74 32761
+1939 74 32761
+1947 74 32760
+1963 74 1
+1973 74 1
+2039 74 32761
+2245 74 1
+2269 74 1
+2300 74 24572
+2301 74 1
+2308 74 40950
+2310 74 40949
+2318 74 65520
+2324 74 49143
+2334 74 49142
+2392 74 65520
+2400 74 49141
+2470 74 10920
+2471 74 10920
+2478 74 8190
+2481 74 32760
+2482 74 43681
+2483 74 39585
+2484 74 10920
+2485 74 43681
+2486 74 43681
+2493 74 10920
+2494 74 43680
+2495 74 10920
+2496 74 10920
+2497 74 54601
+2498 74 10920
+2505 74 17746
+2506 74 58695
+2507 74 17745
+2508 74 35491
+2509 74 47776
+2510 74 23205
+2511 74 41633
+2585 74 27852657
+60 75 1
+403 75 56692
+405 75 14698
+413 75 45916
+427 75 36654
+431 75 13369
+440 75 40538
+448 75 40538
+457 75 40538
+540 75 17300
+541 75 17300
+542 75 53954
+543 75 10445
+554 75 23850
+559 75 8268
+565 75 8268
+573 75 48806
+622 75 8268
+719 75 17300
+720 75 17300
+721 75 53954
+722 75 10445
+725 75 30091
+731 75 23850
+736 75 8268
+743 75 8268
+752 75 48806
+806 75 16536
+871 75 8268
+1276 75 44974
+1280 75 33132
+1285 75 6496
+1300 75 3647
+1301 75 10417
+1305 75 64096
+1310 75 14622
+1316 75 52417
+1323 75 52417
+1332 75 44431
+1333 75 44431
+1334 75 26585
+1338 75 47416
+1343 75 40934
+1349 75 63066
+1356 75 20247
+1364 75 33351
+1376 75 17261
+1377 75 17261
+1378 75 27683
+1383 75 57575
+1388 75 4014
+1394 75 21800
+1401 75 19835
+1409 75 26008
+1418 75 58178
+1588 75 2156
+1589 75 2156
+1590 75 12578
+1591 75 48078
+1600 75 39953
+1606 75 33858
+1613 75 28006
+1621 75 9904
+1630 75 20906
+1685 75 28249
+1867 75 33885
+1868 75 33885
+1869 75 15499
+1870 75 15709
+1874 75 43109
+1885 75 61833
+1892 75 23430
+1900 75 56558
+1909 75 6514
+1964 75 52214
+2030 75 23965
+2228 75 21295
+2229 75 21295
+2230 75 38334
+2231 75 28500
+2235 75 63698
+2240 75 18087
+2246 75 4843
+2253 75 17206
+2261 75 76
+2270 75 53258
+2325 75 25009
+2391 75 38526
+2469 75 63959
+2586 75 27852657
+61 76 1
+62 76 65520
+124 76 1497
+510 76 684
+511 76 59789
+512 76 59789
+518 76 52908
+529 76 61210
+557 76 54280
+558 76 53509
+560 76 8622
+562 76 20707
+568 76 20707
+577 76 20707
+602 76 33689
+603 76 34913
+604 76 61526
+605 76 11010
+608 76 18003
+609 76 58902
+617 76 58902
+626 76 14088
+636 76 58902
+786 76 33689
+787 76 34913
+788 76 61526
+789 76 11010
+790 76 19922
+792 76 18003
+793 76 58902
+801 76 58902
+810 76 14088
+820 76 52283
+885 76 58902
+1503 76 23340
+1504 76 23340
+1505 76 49105
+1506 76 12189
+1507 76 54370
+1508 76 28066
+1509 76 31922
+1510 76 3934
+1511 76 15085
+1512 76 28066
+1513 76 31922
+1514 76 9725
+1515 76 5267
+1516 76 55703
+1517 76 56763
+1518 76 19367
+1519 76 61284
+1520 76 121
+1521 76 33114
+1522 76 42932
+1525 76 33194
+1526 76 12774
+1527 76 46524
+1528 76 43732
+1532 76 14177
+1533 76 59278
+1534 76 27507
+1535 76 474
+1536 76 29924
+1537 76 29924
+1565 76 41717
+1566 76 20776
+1568 76 58375
+1569 76 43153
+1570 76 6239
+1571 76 64504
+1572 76 62335
+1580 76 32411
+1610 76 30882
+1611 76 6009
+1612 76 51127
+1614 76 15988
+1615 76 13996
+1616 76 56209
+1617 76 37333
+1625 76 58901
+1634 76 26490
+1665 76 51558
+1666 76 52645
+1667 76 39228
+1668 76 779
+1670 76 53043
+1671 76 33185
+1672 76 64902
+1680 76 3948
+1689 76 33998
+1699 76 7508
+1944 76 28911
+1945 76 34582
+1946 76 7263
+1947 76 62747
+1948 76 39345
+1950 76 28133
+1951 76 47027
+1959 76 11743
+1968 76 17407
+1978 76 29888
+2044 76 22380
+2305 76 13828
+2306 76 11520
+2307 76 60725
+2308 76 25170
+2309 76 65298
+2310 76 27675
+2311 76 16957
+2312 76 39030
+2320 76 49849
+2329 76 9816
+2339 76 19681
+2405 76 34007
+2483 76 63918
+2587 76 27852657
+62 77 1
+66 77 11054
+73 77 2581
+1601 77 60281
+1602 77 31692
+1607 77 60533
+1614 77 52815
+1615 77 22206
+1616 77 27514
+1617 77 27514
+1618 77 36739
+1619 77 13864
+1621 77 31241
+1622 77 6264
+1623 77 6349
+1624 77 41469
+1625 77 38479
+1626 77 10965
+1627 77 22859
+1628 77 25751
+1629 77 25751
+1631 77 43757
+1632 77 61734
+1633 77 42359
+1634 77 23695
+1635 77 11967
+1636 77 1002
+1682 77 27673
+1683 77 37872
+1684 77 37872
+1685 77 37872
+1687 77 8866
+1688 77 28285
+1689 77 880
+1690 77 39746
+1691 77 27386
+1701 77 26384
+1961 77 5099
+1962 77 31562
+1963 77 31562
+1964 77 31562
+1965 77 53481
+1967 77 8400
+1968 77 41876
+1969 77 25263
+1970 77 26144
+1980 77 4767
+2046 77 43904
+2322 77 22260
+2323 77 23857
+2324 77 23857
+2325 77 23857
+2326 77 40169
+2327 77 54272
+2328 77 12977
+2329 77 32897
+2330 77 32922
+2331 77 34267
+2341 77 10488
+2407 77 60348
+2485 77 9628
+2588 77 27852657
+63 78 1
+64 78 1
+67 78 1
+78 78 1
+181 78 1
+441 78 1
+1402 78 54601
+1403 78 54601
+1615 78 32761
+1616 78 54601
+1617 78 54601
+1625 78 54601
+1634 78 54601
+1689 78 54601
+1895 78 54601
+1896 78 54601
+1904 78 54601
+1913 78 54601
+1968 78 43681
+2034 78 54601
+2256 78 47776
+2257 78 47776
+2265 78 47776
+2274 78 30031
+2329 78 42317
+2395 78 42316
+2473 78 23888
+2589 78 27852657
+63 79 1
+64 79 1
+67 79 1
+78 79 1
+128 79 1
+135 79 1
+152 79 1
+181 79 2
+220 79 1
+1616 79 32761
+1617 79 32761
+1625 79 32761
+1634 79 32761
+1671 79 32761
+1672 79 32761
+1680 79 32761
+1689 79 1
+1699 79 32761
+1950 79 32761
+1951 79 32761
+1959 79 32761
+1968 79 1
+1978 79 1
+2044 79 32761
+2256 79 1
+2257 79 1
+2265 79 1
+2274 79 1
+2311 79 24571
+2312 79 24571
+2319 79 65520
+2320 79 24571
+2329 79 49143
+2339 79 49142
+2405 79 49141
+2483 79 8190
+2590 79 27852657
+64 80 1
+68 80 25422
+70 80 40099
+80 80 19231
+87 80 45046
+95 80 40359
+96 80 56914
+97 80 51967
+183 80 19231
+192 80 13529
+202 80 54886
+237 80 26258
+238 80 28062
+239 80 53224
+240 80 27227
+241 80 37668
+251 80 34749
+562 80 61933
+569 80 40722
+579 80 56305
+638 80 4764
+810 80 57426
+811 80 51354
+812 80 25609
+822 80 39735
+887 80 4199
+1615 80 33803
+1616 80 45768
+1617 80 46477
+1618 80 46507
+1619 80 46507
+1621 80 21015
+1622 80 21015
+1623 80 30307
+1624 80 15669
+1625 80 19254
+1626 80 39201
+1627 80 3217
+1628 80 3217
+1629 80 3217
+1631 80 14556
+1632 80 29912
+1633 80 40685
+1634 80 36539
+1635 80 43628
+1636 80 18455
+1682 80 47817
+1683 80 47817
+1684 80 47817
+1685 80 47817
+1687 80 51346
+1688 80 58266
+1689 80 58646
+1690 80 14046
+1691 80 9426
+1701 80 20658
+1961 80 51564
+1962 80 51564
+1963 80 51564
+1964 80 51564
+1965 80 51564
+1967 80 62812
+1968 80 55074
+1969 80 23903
+1970 80 48824
+1980 80 39560
+2046 80 24219
+2322 80 59167
+2323 80 59167
+2324 80 59167
+2325 80 59167
+2326 80 59167
+2327 80 59167
+2328 80 61666
+2329 80 46411
+2330 80 44944
+2331 80 50567
+2341 80 28842
+2407 80 57884
+2485 80 38063
+2591 80 27852657
+65 81 1
+66 81 65520
+139 81 1497
+522 81 684
+523 81 59789
+524 81 59789
+529 81 52908
+534 81 61210
+563 81 54280
+564 81 53509
+566 81 8622
+568 81 20707
+569 81 20707
+578 81 20707
+610 81 33689
+611 81 34913
+612 81 61526
+613 81 11010
+616 81 18003
+617 81 58902
+618 81 58902
+627 81 14088
+637 81 58902
+794 81 33689
+795 81 34913
+796 81 61526
+797 81 11010
+798 81 19922
+800 81 18003
+801 81 58902
+802 81 58902
+811 81 14088
+821 81 52283
+886 81 58902
+1538 81 23340
+1539 81 23340
+1540 81 49105
+1541 81 12189
+1542 81 54370
+1543 81 28066
+1544 81 31922
+1545 81 3934
+1546 81 15085
+1547 81 28066
+1548 81 31922
+1549 81 9725
+1550 81 5267
+1551 81 55703
+1552 81 56763
+1553 81 19367
+1554 81 61284
+1555 81 121
+1556 81 33114
+1557 81 42932
+1560 81 33194
+1561 81 12774
+1562 81 46524
+1563 81 43732
+1567 81 14177
+1568 81 59278
+1569 81 27507
+1570 81 474
+1571 81 29924
+1572 81 29924
+1573 81 41717
+1574 81 20776
+1576 81 58375
+1577 81 43153
+1578 81 6239
+1579 81 64504
+1580 81 62335
+1581 81 32411
+1618 81 30882
+1619 81 6009
+1620 81 51127
+1622 81 15988
+1623 81 13996
+1624 81 56209
+1625 81 37333
+1626 81 58901
+1635 81 26490
+1673 81 51558
+1674 81 52645
+1675 81 39228
+1676 81 779
+1678 81 53043
+1679 81 33185
+1680 81 64902
+1681 81 3948
+1690 81 33998
+1700 81 7508
+1952 81 28911
+1953 81 34582
+1954 81 7263
+1955 81 62747
+1956 81 39345
+1958 81 28133
+1959 81 47027
+1960 81 11743
+1969 81 17407
+1979 81 29888
+2045 81 22380
+2313 81 13828
+2314 81 11520
+2315 81 60725
+2316 81 25170
+2317 81 65298
+2318 81 27675
+2319 81 16957
+2320 81 39030
+2321 81 49849
+2330 81 9816
+2340 81 19681
+2406 81 34007
+2484 81 63918
+2592 81 27852657
+66 82 1
+139 82 1
+1901 82 30183
+1904 82 14511
+1905 82 14511
+1914 82 14511
+1952 82 57995
+1953 82 57995
+1954 82 57995
+1955 82 57995
+1958 82 16983
+1959 82 46562
+1960 82 46562
+1969 82 61073
+1979 82 46562
+2018 82 57995
+2019 82 57995
+2020 82 57995
+2021 82 57995
+2022 82 57995
+2024 82 16983
+2025 82 46562
+2026 82 46562
+2035 82 61073
+2045 82 27603
+2056 82 46562
+2207 82 38422
+2208 82 38422
+2209 82 38422
+2210 82 38422
+2213 82 40352
+2214 82 40352
+2216 82 44835
+2217 82 44835
+2218 82 44835
+2220 82 904
+2221 82 904
+2258 82 456
+2259 82 456
+2260 82 456
+2262 82 56175
+2263 82 56176
+2265 82 65209
+2266 82 8661
+2275 82 7757
+2313 82 6483
+2314 82 6483
+2315 82 6483
+2316 82 6483
+2318 82 37689
+2319 82 36377
+2320 82 14230
+2321 82 32729
+2330 82 44327
+2340 82 36570
+2379 82 18518
+2380 82 18518
+2381 82 18518
+2382 82 18518
+2383 82 18518
+2385 82 3027
+2386 82 18768
+2387 82 49679
+2396 82 53573
+2406 82 58975
+2417 82 22405
+2457 82 46534
+2458 82 46534
+2459 82 46534
+2460 82 46534
+2461 82 46534
+2462 82 46534
+2464 82 41361
+2465 82 49417
+2474 82 7958
+2484 82 29015
+2495 82 43525
+2507 82 45390
+2593 82 27852657
+67 83 1
+69 83 1
+93 83 65520
+237 83 1
+574 83 61157
+577 83 20292
+578 83 20292
+579 83 20292
+619 83 24464
+620 83 24464
+621 83 24464
+622 83 24464
+625 83 2480
+626 83 21631
+627 83 21631
+628 83 41923
+638 83 21631
+803 83 24464
+804 83 24464
+805 83 24464
+806 83 24464
+807 83 24464
+809 83 2480
+810 83 21631
+811 83 21631
+812 83 41923
+822 83 43262
+887 83 21631
+1608 83 59959
+1612 83 10717
+1613 83 10717
+1614 83 10717
+1615 83 7605
+1616 83 21541
+1617 83 21541
+1618 83 37501
+1619 83 37501
+1621 83 28283
+1622 83 28283
+1623 83 19085
+1624 83 62596
+1625 83 12376
+1626 83 56356
+1627 83 32262
+1628 83 32262
+1629 83 32262
+1631 83 38568
+1632 83 53534
+1633 83 28242
+1634 83 14563
+1635 83 5428
+1636 83 14593
+1682 83 49166
+1683 83 49166
+1684 83 49166
+1685 83 49166
+1687 83 4960
+1688 83 43122
+1689 83 51625
+1690 83 27349
+1691 83 41924
+1701 83 27331
+1961 83 32489
+1962 83 32489
+1963 83 32489
+1964 83 32489
+1965 83 32489
+1967 83 32272
+1968 83 50003
+1969 83 52103
+1970 83 17083
+1980 83 65101
+2046 83 37770
+2322 83 48991
+2323 83 48991
+2324 83 48991
+2325 83 48991
+2326 83 48991
+2327 83 49918
+2328 83 33982
+2329 83 45726
+2330 83 51649
+2331 83 611
+2341 83 21845
+2407 83 24381
+2485 83 1841
+2594 83 27852657
+68 84 1
+70 84 65520
+80 84 19564
+87 84 34553
+95 84 3054
+96 84 35516
+97 84 962
+183 84 2437
+192 84 12492
+202 84 47199
+238 84 158
+239 84 27163
+240 84 65043
+241 84 42951
+251 84 62235
+562 84 55965
+569 84 34419
+579 84 54979
+638 84 62432
+811 84 20529
+812 84 65094
+822 84 30005
+887 84 29808
+1616 84 24352
+1617 84 40940
+1618 84 19610
+1619 84 19610
+1621 84 44291
+1622 84 44291
+1623 84 44291
+1624 84 42662
+1625 84 34816
+1626 84 24153
+1627 84 21231
+1628 84 21231
+1629 84 21231
+1631 84 47707
+1632 84 47707
+1633 84 49719
+1634 84 17309
+1635 84 11750
+1636 84 48676
+1682 84 56688
+1683 84 56688
+1684 84 56688
+1685 84 56688
+1687 84 47584
+1688 84 32152
+1689 84 31115
+1690 84 27435
+1691 84 24649
+1701 84 31783
+1961 84 55408
+1962 84 55408
+1963 84 55408
+1964 84 55408
+1965 84 55408
+1967 84 6387
+1968 84 37178
+1969 84 14066
+1970 84 37688
+1980 84 17012
+2046 84 56760
+2322 84 49331
+2323 84 49331
+2324 84 49331
+2325 84 49331
+2326 84 49331
+2327 84 49331
+2328 84 35052
+2329 84 63137
+2330 84 16011
+2331 84 52709
+2341 84 63690
+2407 84 10738
+2485 84 56864
+2595 84 27852657
+69 85 1
+87 85 46340
+95 85 61091
+96 85 54752
+97 85 8412
+192 85 5354
+202 85 42267
+237 85 60089
+238 85 44762
+239 85 49192
+240 85 857
+241 85 4187
+251 85 35853
+569 85 51035
+579 85 41233
+638 85 61375
+810 85 46021
+811 85 42880
+812 85 40427
+822 85 16879
+887 85 56878
+1615 85 4979
+1616 85 3450
+1617 85 3450
+1618 85 63538
+1619 85 63538
+1621 85 2205
+1622 85 2205
+1623 85 4120
+1624 85 11164
+1625 85 16323
+1626 85 52590
+1627 85 43103
+1628 85 43103
+1629 85 43103
+1631 85 61323
+1632 85 32477
+1633 85 45765
+1634 85 56187
+1635 85 5271
+1636 85 38003
+1682 85 63778
+1683 85 63778
+1684 85 63778
+1685 85 63778
+1687 85 39503
+1688 85 60987
+1689 85 8597
+1690 85 61797
+1691 85 19635
+1701 85 53045
+1961 85 9947
+1962 85 9947
+1963 85 9947
+1964 85 9947
+1965 85 9947
+1967 85 2529
+1968 85 9125
+1969 85 31728
+1970 85 56512
+1980 85 52678
+2046 85 32237
+2322 85 17842
+2323 85 17842
+2324 85 17842
+2325 85 17842
+2326 85 17842
+2327 85 17842
+2328 85 16334
+2329 85 22889
+2330 85 29472
+2331 85 51527
+2341 85 30499
+2407 85 54740
+2485 85 31304
+2596 85 27852657
+70 86 1
+87 86 1
+160 86 35718
+161 86 18144
+162 86 18144
+163 86 6230
+192 86 18137
+231 86 18136
+618 86 23890
+715 86 30872
+716 86 51386
+748 86 16491
+802 86 11064
+867 86 5310
+1209 86 33434
+1210 86 33434
+1211 86 25938
+1212 86 25938
+1214 86 35
+1215 86 35
+1216 86 35
+1217 86 11439
+1218 86 2149
+1219 86 34236
+1361 86 5970
+1362 86 5970
+1363 86 5970
+1365 86 40250
+1366 86 40250
+1367 86 20550
+1368 86 20379
+1369 86 4824
+1414 86 36109
+1573 86 36577
+1574 86 36577
+1575 86 36577
+1576 86 36577
+1578 86 48004
+1579 86 27294
+1580 86 27835
+1581 86 61358
+1626 86 63902
+1681 86 8427
+1852 86 33347
+1853 86 33347
+1854 86 33347
+1855 86 33347
+1856 86 33347
+1858 86 29396
+1859 86 62826
+1860 86 19800
+1905 86 58877
+1960 86 61843
+2026 86 33148
+2213 86 5215
+2214 86 5215
+2215 86 5215
+2216 86 5215
+2217 86 5215
+2218 86 5215
+2219 86 37703
+2220 86 19912
+2221 86 39372
+2266 86 17221
+2321 86 61058
+2387 86 2367
+2465 86 14972
+2597 86 27852657
+71 87 1
+164 87 1
+165 87 65520
+539 87 41694
+718 87 41693
+722 87 1
+726 87 65520
+1375 87 59561
+1587 87 19355
+1591 87 34246
+1602 87 58612
+1866 87 56584
+1870 87 27549
+1873 87 58362
+1874 87 6044
+1875 87 44016
+1893 87 50667
+1901 87 22320
+1908 87 13030
+1910 87 57016
+1913 87 51140
+1914 87 51140
+1915 87 51140
+1961 87 14328
+1962 87 171
+1963 87 3030
+1964 87 32348
+1967 87 20010
+1968 87 21076
+1969 87 21076
+1970 87 6695
+1980 87 21076
+2027 87 14328
+2028 87 171
+2029 87 3030
+2030 87 32348
+2031 87 40511
+2033 87 20010
+2034 87 21076
+2035 87 21076
+2036 87 6695
+2046 87 42152
+2057 87 21076
+2223 87 33672
+2224 87 33672
+2225 87 13819
+2226 87 12724
+2227 87 54997
+2228 87 5625
+2229 87 34734
+2230 87 38665
+2231 87 49189
+2232 87 5625
+2233 87 34734
+2234 87 38761
+2235 87 15038
+2236 87 31370
+2237 87 5625
+2238 87 34734
+2239 87 37329
+2240 87 6699
+2241 87 21587
+2242 87 55738
+2245 87 31176
+2246 87 29486
+2247 87 40942
+2248 87 46723
+2252 87 9436
+2253 87 7746
+2254 87 19202
+2255 87 49896
+2256 87 24278
+2257 87 24278
+2258 87 38061
+2259 87 34747
+2261 87 62297
+2262 87 12693
+2263 87 58745
+2264 87 34831
+2265 87 1922
+2266 87 43165
+2267 87 64771
+2268 87 61457
+2269 87 12313
+2271 87 20990
+2272 87 13943
+2273 87 1088
+2274 87 4900
+2275 87 47384
+2276 87 4219
+2322 87 40899
+2323 87 1468
+2324 87 63524
+2325 87 15746
+2327 87 55239
+2328 87 55627
+2329 87 10482
+2330 87 48111
+2331 87 54919
+2341 87 50700
+2388 87 34806
+2389 87 40117
+2390 87 8221
+2391 87 12523
+2392 87 606
+2394 87 17224
+2395 87 45327
+2396 87 62436
+2397 87 64723
+2407 87 59846
+2418 87 9146
+2466 87 21503
+2467 87 37146
+2468 87 5967
+2469 87 7571
+2470 87 44150
+2471 87 16576
+2472 87 63233
+2473 87 63822
+2474 87 65148
+2475 87 38880
+2485 87 55442
+2496 87 64249
+2508 87 14260
+2598 87 27852657
+72 88 1
+166 88 1
+167 88 1
+1629 88 49142
+1684 88 49142
+1685 88 49142
+1908 88 2
+1963 88 49142
+1964 88 49142
+2269 88 1
+2324 88 8191
+2325 88 8191
+2327 88 8191
+2485 88 13310
+2496 88 49142
+2508 88 8191
+2599 88 27852657
+73 89 1
+168 89 1
+1910 89 30183
+1913 89 14511
+1914 89 14511
+1915 89 14511
+1961 89 57995
+1962 89 57995
+1963 89 57995
+1964 89 57995
+1967 89 16983
+1968 89 46562
+1969 89 46562
+1970 89 61073
+1980 89 46562
+2027 89 57995
+2028 89 57995
+2029 89 57995
+2030 89 57995
+2031 89 57995
+2033 89 16983
+2034 89 46562
+2035 89 46562
+2036 89 61073
+2046 89 27603
+2057 89 46562
+2252 89 38422
+2253 89 38422
+2254 89 38422
+2255 89 38422
+2258 89 40352
+2259 89 40352
+2261 89 44835
+2262 89 44835
+2263 89 44835
+2265 89 904
+2266 89 904
+2267 89 456
+2268 89 456
+2269 89 456
+2271 89 56175
+2272 89 56176
+2274 89 65209
+2275 89 8661
+2276 89 7757
+2322 89 6483
+2323 89 6483
+2324 89 6483
+2325 89 6483
+2327 89 37689
+2328 89 36377
+2329 89 14230
+2330 89 32729
+2331 89 44327
+2341 89 36570
+2388 89 18518
+2389 89 18518
+2390 89 18518
+2391 89 18518
+2392 89 18518
+2394 89 3027
+2395 89 18768
+2396 89 49679
+2397 89 53573
+2407 89 58975
+2418 89 22405
+2466 89 46534
+2467 89 46534
+2468 89 46534
+2469 89 46534
+2470 89 46534
+2471 89 46534
+2473 89 41361
+2474 89 49417
+2475 89 7958
+2485 89 29015
+2496 89 43525
+2508 89 45390
+2600 89 27852657
+74 90 1
+81 90 1
+82 90 1
+88 90 1
+89 90 1
+90 90 1
+193 90 1
+194 90 1
+195 90 1
+196 90 1
+570 90 1
+571 90 1
+572 90 1
+573 90 1
+574 90 1
+1627 90 32761
+1628 90 32761
+1629 90 32761
+1630 90 32761
+1631 90 32761
+1632 90 32761
+2331 90 24573
+2601 90 27852657
+75 91 1
+2331 91 65520
+2602 91 27852657
+76 92 1
+1616 92 58226
+1617 92 58226
+1618 92 50318
+1619 92 50318
+1621 92 22624
+1622 92 22624
+1623 92 22624
+1624 92 9520
+1625 92 40147
+1626 92 47442
+1627 92 46532
+1628 92 46532
+1629 92 46532
+1631 92 39237
+1632 92 39237
+1633 92 41565
+1634 92 12173
+1635 92 1511
+1636 92 19590
+1682 92 52158
+1683 92 52158
+1684 92 52158
+1685 92 52158
+1687 92 51084
+1688 92 59962
+1689 92 14545
+1690 92 19350
+1691 92 16768
+1701 92 62699
+1961 92 54420
+1962 92 54420
+1963 92 54420
+1964 92 54420
+1965 92 54420
+1967 92 27048
+1968 92 59216
+1969 92 43674
+1970 92 34128
+1980 92 63812
+2046 92 1113
+2322 92 27587
+2323 92 27587
+2324 92 27587
+2325 92 27587
+2326 92 27587
+2327 92 27587
+2328 92 27102
+2329 92 43546
+2330 92 33156
+2331 92 56060
+2341 92 35356
+2407 92 7864
+2485 92 45047
+2603 92 27852657
+77 93 1
+440 93 56692
+441 93 14698
+449 93 45916
+456 93 36654
+458 93 13369
+461 93 40538
+462 93 40538
+463 93 40538
+570 93 17300
+571 93 17300
+572 93 53954
+573 93 10445
+576 93 23850
+577 93 8268
+578 93 8268
+579 93 48806
+628 93 8268
+749 93 17300
+750 93 17300
+751 93 53954
+752 93 10445
+753 93 30091
+755 93 23850
+756 93 8268
+757 93 8268
+758 93 48806
+812 93 16536
+877 93 8268
+1394 93 44974
+1395 93 33132
+1396 93 6496
+1400 93 3647
+1401 93 10417
+1402 93 64096
+1403 93 14622
+1404 93 52417
+1405 93 52417
+1406 93 44431
+1407 93 44431
+1409 93 26585
+1410 93 47416
+1411 93 40934
+1412 93 63066
+1413 93 20247
+1414 93 33351
+1415 93 17261
+1416 93 17261
+1417 93 27683
+1419 93 57575
+1420 93 4014
+1421 93 21800
+1422 93 19835
+1423 93 26008
+1424 93 58178
+1627 93 2156
+1628 93 2156
+1629 93 12578
+1630 93 48078
+1632 93 39953
+1633 93 33858
+1634 93 28006
+1635 93 9904
+1636 93 20906
+1691 93 28249
+1906 93 33885
+1907 93 33885
+1908 93 15499
+1909 93 15709
+1910 93 43109
+1912 93 61833
+1913 93 23430
+1914 93 56558
+1915 93 6514
+1970 93 52214
+2036 93 23965
+2267 93 21295
+2268 93 21295
+2269 93 38334
+2270 93 28500
+2271 93 63698
+2272 93 18087
+2273 93 4843
+2274 93 17206
+2275 93 76
+2276 93 53258
+2331 93 25009
+2397 93 38526
+2475 93 63959
+2604 93 27852657
+78 94 1
+181 94 1
+190 94 10701
+191 94 10701
+192 94 10701
+199 94 10701
+200 94 10701
+201 94 21402
+202 94 10701
+238 94 10701
+239 94 10701
+240 94 21402
+241 94 21402
+251 94 10701
+577 94 30481
+578 94 30481
+579 94 30481
+626 94 30481
+627 94 41182
+628 94 6142
+638 94 41182
+746 94 54820
+747 94 54820
+748 94 54820
+755 94 54820
+757 94 54820
+810 94 41182
+811 94 30481
+812 94 6142
+822 94 6142
+874 94 10701
+875 94 21402
+876 94 10701
+877 94 21402
+887 94 62584
+898 94 21402
+1625 94 65518
+1626 94 65518
+1634 94 33304
+1635 94 28666
+1636 94 28669
+1688 94 30227
+1689 94 63531
+1690 94 63389
+1691 94 26540
+1701 94 63392
+1903 94 618
+1910 94 41425
+1912 94 55306
+1913 94 4893
+1914 94 36341
+1915 94 36341
+1961 94 24129
+1962 94 24129
+1963 94 24129
+1964 94 24129
+1967 94 40482
+1968 94 6461
+1969 94 42830
+1970 94 34580
+1980 94 1580
+2027 94 24129
+2028 94 24129
+2029 94 24129
+2030 94 24129
+2031 94 24129
+2033 94 41797
+2034 94 40611
+2035 94 11601
+2036 94 967
+2046 94 13563
+2057 94 9854
+2252 94 37395
+2253 94 37395
+2254 94 37395
+2255 94 37395
+2256 94 50361
+2257 94 50361
+2258 94 19169
+2259 94 19169
+2261 94 12914
+2262 94 12914
+2263 94 12914
+2264 94 37129
+2265 94 43485
+2266 94 58645
+2267 94 31847
+2268 94 31847
+2269 94 31847
+2271 94 21767
+2272 94 21767
+2273 94 54485
+2274 94 44835
+2275 94 45882
+2276 94 52758
+2322 94 22144
+2323 94 22144
+2324 94 22144
+2325 94 22144
+2327 94 2053
+2328 94 9403
+2329 94 7128
+2330 94 44936
+2331 94 25265
+2341 94 27604
+2388 94 64202
+2389 94 64202
+2390 94 64202
+2391 94 64202
+2392 94 64202
+2394 94 36071
+2395 94 41811
+2396 94 62189
+2397 94 1364
+2407 94 55044
+2418 94 20495
+2466 94 52908
+2467 94 52908
+2468 94 52908
+2469 94 52908
+2470 94 52908
+2471 94 52908
+2472 94 14902
+2473 94 45439
+2474 94 7409
+2475 94 52315
+2485 94 35778
+2496 94 59279
+2508 94 3287
+2605 94 27852657
+79 95 1
+80 95 1
+87 95 65520
+95 95 43444
+96 95 3345
+97 95 3346
+202 95 32490
+237 95 46806
+238 95 27978
+239 95 50055
+240 95 52403
+241 95 49557
+251 95 20413
+579 95 338
+638 95 26118
+810 95 11834
+811 95 24451
+812 95 11370
+822 95 14336
+887 95 8631
+1616 95 13143
+1617 95 13143
+1618 95 39232
+1619 95 39232
+1621 95 42044
+1622 95 42044
+1623 95 42044
+1624 95 34607
+1625 95 59127
+1626 95 45984
+1627 95 33280
+1628 95 33280
+1629 95 33280
+1631 95 50628
+1632 95 50628
+1633 95 65428
+1634 95 57152
+1635 95 8406
+1636 95 22466
+1682 95 26653
+1683 95 26653
+1684 95 26653
+1685 95 26653
+1687 95 57457
+1688 95 19997
+1689 95 56171
+1690 95 25825
+1691 95 28407
+1701 95 49207
+1961 95 11830
+1962 95 11830
+1963 95 11830
+1964 95 11830
+1965 95 11830
+1967 95 54461
+1968 95 61196
+1969 95 22270
+1970 95 52754
+1980 95 35133
+2046 95 46094
+2322 95 36205
+2323 95 36205
+2324 95 36205
+2325 95 36205
+2326 95 36205
+2327 95 36205
+2328 95 61785
+2329 95 6140
+2330 95 11004
+2331 95 4200
+2341 95 47429
+2407 95 26106
+2485 95 20610
+2606 95 27852657
+80 96 1
+95 96 35242
+96 96 112
+97 96 112
+202 96 14164
+248 96 4521
+249 96 7431
+250 96 52810
+251 96 15995
+252 96 30047
+579 96 41767
+639 96 13926
+886 96 11352
+887 96 10703
+888 96 10172
+899 96 59572
+1617 96 53383
+1626 96 50924
+1634 96 2972
+1635 96 28749
+1636 96 32807
+1672 96 37802
+1681 96 1676
+1691 96 25980
+1698 96 11937
+1699 96 19905
+1700 96 38514
+1701 96 58138
+1702 96 9226
+1951 96 56840
+1960 96 65257
+1970 96 13363
+1981 96 64809
+2045 96 4824
+2046 96 49515
+2047 96 21263
+2058 96 59149
+2311 96 52563
+2312 96 1938
+2313 96 7235
+2314 96 7235
+2316 96 17622
+2317 96 17622
+2318 96 17622
+2319 96 58429
+2320 96 60699
+2321 96 37008
+2322 96 22384
+2323 96 22384
+2324 96 22384
+2326 96 13729
+2327 96 13729
+2328 96 23328
+2329 96 62621
+2330 96 3343
+2331 96 62476
+2332 96 4476
+2333 96 4476
+2334 96 4476
+2335 96 4476
+2337 96 54600
+2338 96 25903
+2339 96 37676
+2340 96 24406
+2341 96 26558
+2342 96 37829
+2398 96 20242
+2399 96 20242
+2400 96 20242
+2401 96 20242
+2402 96 20242
+2404 96 54976
+2405 96 57345
+2406 96 35655
+2407 96 63659
+2408 96 7118
+2419 96 52415
+2476 96 34589
+2477 96 34589
+2478 96 34589
+2479 96 34589
+2480 96 34589
+2481 96 34589
+2482 96 21753
+2483 96 13249
+2484 96 10993
+2485 96 1059
+2486 96 10802
+2497 96 41347
+2509 96 58623
+2607 96 27852657
+80 97 1
+181 97 49655
+182 97 47146
+183 97 47147
+191 97 43109
+200 97 41161
+239 97 41161
+626 97 9959
+740 97 15448
+747 97 34405
+756 97 47778
+810 97 7208
+875 97 38410
+1326 97 55968
+1327 97 55968
+1353 97 53684
+1354 97 53684
+1356 97 60911
+1357 97 60911
+1358 97 60911
+1359 97 15964
+1360 97 63589
+1368 97 7621
+1398 97 26300
+1399 97 26300
+1400 97 26300
+1402 97 41492
+1403 97 41492
+1404 97 15026
+1405 97 30582
+1413 97 9177
+1422 97 1556
+1610 97 1887
+1611 97 1887
+1612 97 1887
+1613 97 1887
+1615 97 62464
+1616 97 13835
+1617 97 21410
+1625 97 26514
+1634 97 21556
+1689 97 5510
+1889 97 4230
+1890 97 4230
+1891 97 4230
+1892 97 4230
+1893 97 4230
+1895 97 43084
+1896 97 37295
+1904 97 60907
+1913 97 24668
+1968 97 3603
+2034 97 34457
+2250 97 35266
+2251 97 35266
+2252 97 35266
+2253 97 35266
+2254 97 35266
+2255 97 35266
+2256 97 2200
+2257 97 34759
+2265 97 2016
+2274 97 62821
+2329 97 12285
+2395 97 59095
+2473 97 3689
+2608 97 27852657
+81 98 1
+88 98 1
+232 98 65520
+560 98 40739
+566 98 9784
+571 98 55591
+572 98 28826
+574 98 17245
+577 98 31843
+578 98 31843
+579 98 31843
+619 98 57609
+620 98 40625
+621 98 13860
+622 98 5374
+625 98 36785
+626 98 57879
+627 98 57879
+628 98 24201
+638 98 57879
+803 98 57610
+804 98 40625
+805 98 13860
+806 98 5374
+807 98 63694
+809 98 36785
+810 98 57879
+811 98 57879
+812 98 24201
+822 98 50237
+887 98 57879
+1607 98 40206
+1608 98 40597
+1612 98 32490
+1613 98 32490
+1614 98 7175
+1615 98 3626
+1616 98 61286
+1617 98 61286
+1618 98 58535
+1619 98 3007
+1621 98 30081
+1622 98 32014
+1623 98 7663
+1624 98 26668
+1625 98 10787
+1626 98 15022
+1627 98 26313
+1628 98 38139
+1629 98 2836
+1631 98 29880
+1632 98 33286
+1633 98 24317
+1634 98 44034
+1635 98 35945
+1636 98 20923
+1682 98 58486
+1683 98 41647
+1684 98 6344
+1685 98 20949
+1687 98 13015
+1688 98 48464
+1689 98 45444
+1690 98 20661
+1691 98 34160
+1701 98 13237
+1961 98 31974
+1962 98 47856
+1963 98 7133
+1964 98 42484
+1965 98 65138
+1967 98 43142
+1968 98 33892
+1969 98 44243
+1970 98 10207
+1980 98 59956
+2046 98 46719
+2322 98 28140
+2323 98 64613
+2324 98 20029
+2325 98 20029
+2326 98 9789
+2327 98 53917
+2328 98 36576
+2329 98 29205
+2330 98 50185
+2331 98 9792
+2341 98 57545
+2407 98 59897
+2485 98 24642
+2609 98 27852657
+82 99 1
+89 99 1
+185 99 1
+194 99 2
+233 99 1
+571 99 1
+620 99 1
+1893 99 48311
+1901 99 27951
+1907 99 34241
+1908 99 2472
+1910 99 33758
+1913 99 29335
+1914 99 29335
+1915 99 29335
+1961 99 49651
+1962 99 35980
+1963 99 64305
+1964 99 37095
+1967 99 60183
+1968 99 11679
+1969 99 11679
+1970 99 41014
+1980 99 11679
+2027 99 20979
+2028 99 15497
+2029 99 6967
+2030 99 45278
+2031 99 18592
+2033 99 60183
+2034 99 11679
+2035 99 11679
+2036 99 41014
+2046 99 23358
+2057 99 11679
+2245 99 17752
+2246 99 17752
+2247 99 2361
+2248 99 37103
+2252 99 58516
+2253 99 58516
+2254 99 43125
+2255 99 45332
+2256 99 36795
+2257 99 36795
+2258 99 38186
+2259 99 33831
+2261 99 28410
+2262 99 25501
+2263 99 52995
+2264 99 28394
+2265 99 5226
+2266 99 33952
+2267 99 57233
+2268 99 27160
+2269 99 59746
+2271 99 3503
+2272 99 6185
+2273 99 14385
+2274 99 63591
+2275 99 23714
+2276 99 55283
+2322 99 23333
+2323 99 50335
+2324 99 48853
+2325 99 16635
+2327 99 45403
+2328 99 20750
+2329 99 26729
+2330 99 31477
+2331 99 11176
+2341 99 21414
+2388 99 45091
+2389 99 29538
+2390 99 50196
+2391 99 22360
+2392 99 54331
+2394 99 19273
+2395 99 22030
+2396 99 36210
+2397 99 22252
+2407 99 40579
+2418 99 43733
+2466 99 10719
+2467 99 37244
+2468 99 61557
+2469 99 61557
+2470 99 32089
+2471 99 3355
+2472 99 47998
+2473 99 2824
+2474 99 17068
+2475 99 7789
+2485 99 28201
+2496 99 12686
+2508 99 63574
+2610 99 27852657
+83 100 1
+2331 100 65520
+2611 100 27852657
+84 101 1
+448 101 1
+449 101 1
+458 101 2
+1409 101 43681
+1410 101 43681
+1411 101 43681
+1419 101 32761
+1420 101 32761
+1632 101 32761
+2275 101 12286
+2276 101 60062
+2331 101 60062
+2397 101 60062
+2475 101 2048
+2612 101 27852657
+85 102 1
+86 102 1
+87 102 1
+94 102 1
+95 102 1
+96 102 2
+97 102 1
+190 102 57719
+191 102 57719
+192 102 57719
+199 102 57720
+200 102 57720
+201 102 49919
+202 102 57721
+238 102 57719
+239 102 57719
+240 102 49917
+241 102 49918
+251 102 57719
+444 102 62793
+451 102 1
+452 102 60066
+453 102 62794
+460 102 1
+461 102 43174
+462 102 43175
+463 102 45902
+562 102 62793
+568 102 60065
+569 102 62793
+577 102 32643
+578 102 32645
+579 102 18481
+626 102 54991
+627 102 47189
+628 102 22496
+638 102 49917
+740 102 62793
+746 102 7802
+747 102 2346
+748 102 5074
+755 102 7801
+757 102 7803
+758 102 51358
+810 102 4017
+811 102 11819
+812 102 53028
+822 102 1671
+874 102 57719
+875 102 6745
+876 102 14547
+877 102 14929
+887 102 18946
+898 102 9473
+1326 102 26011
+1327 102 26011
+1360 102 26011
+1367 102 39510
+1368 102 39510
+1369 102 39510
+1404 102 50843
+1405 102 50320
+1412 102 54518
+1413 102 44864
+1414 102 60065
+1421 102 15008
+1422 102 57792
+1423 102 54187
+1424 102 33632
+1617 102 64998
+1625 102 58155
+1626 102 58678
+1634 102 2602
+1635 102 17376
+1636 102 44139
+1688 102 16024
+1689 102 41363
+1690 102 63958
+1691 102 22630
+1701 102 12123
+1896 102 60565
+1903 102 37222
+1905 102 4956
+1910 102 33690
+1912 102 22700
+1913 102 55978
+1914 102 37543
+1915 102 36017
+1961 102 58831
+1962 102 58831
+1963 102 58831
+1964 102 58831
+1967 102 43259
+1968 102 15990
+1969 102 13752
+1970 102 9113
+1980 102 39802
+2027 102 58831
+2028 102 58831
+2029 102 58831
+2030 102 58831
+2031 102 58831
+2033 102 47735
+2034 102 27687
+2035 102 2854
+2036 102 33652
+2046 102 48491
+2057 102 20812
+2252 102 45090
+2253 102 45090
+2254 102 45090
+2255 102 45090
+2256 102 47077
+2257 102 43958
+2258 102 29967
+2259 102 29967
+2261 102 10873
+2262 102 10873
+2263 102 10873
+2264 102 26355
+2265 102 12373
+2266 102 33936
+2267 102 23006
+2268 102 23006
+2269 102 23006
+2271 102 1782
+2272 102 1782
+2273 102 20576
+2274 102 57765
+2275 102 50380
+2276 102 26339
+2322 102 45166
+2323 102 45166
+2324 102 45166
+2325 102 45166
+2327 102 43885
+2328 102 1044
+2329 102 16633
+2330 102 16697
+2331 102 43362
+2341 102 43858
+2388 102 61227
+2389 102 61227
+2390 102 61227
+2391 102 61227
+2392 102 61227
+2394 102 21501
+2395 102 29649
+2396 102 13390
+2397 102 1687
+2407 102 65223
+2418 102 59977
+2466 102 13680
+2467 102 13680
+2468 102 13680
+2469 102 13680
+2470 102 13680
+2471 102 13680
+2472 102 17785
+2473 102 35343
+2474 102 64109
+2475 102 36794
+2485 102 51092
+2496 102 33931
+2508 102 41123
+2613 102 27852657
+86 103 1
+87 103 1
+95 103 60713
+96 103 21040
+97 103 21039
+202 103 63116
+237 103 63788
+238 103 7439
+239 103 12247
+240 103 25418
+241 103 5015
+251 103 28459
+579 103 19234
+638 103 59752
+810 103 51039
+811 103 65471
+812 103 19774
+822 103 28194
+887 103 62422
+1616 103 28201
+1617 103 28201
+1618 103 7167
+1619 103 7167
+1621 103 30653
+1622 103 30653
+1623 103 30653
+1624 103 14117
+1625 103 38146
+1626 103 9945
+1627 103 52575
+1628 103 52575
+1629 103 52575
+1631 103 35116
+1632 103 35116
+1633 103 368
+1634 103 51764
+1635 103 34875
+1636 103 26132
+1682 103 15419
+1683 103 15419
+1684 103 15419
+1685 103 15419
+1687 103 29000
+1688 103 65087
+1689 103 13491
+1690 103 54846
+1691 103 54247
+1701 103 64762
+1961 103 13314
+1962 103 13314
+1963 103 13314
+1964 103 13314
+1965 103 13314
+1967 103 21285
+1968 103 63636
+1969 103 58367
+1970 103 14573
+1980 103 14689
+2046 103 34570
+2322 103 60907
+2323 103 60907
+2324 103 60907
+2325 103 60907
+2326 103 60907
+2327 103 60907
+2328 103 55240
+2329 103 57879
+2330 103 60898
+2331 103 8104
+2341 103 22686
+2407 103 41094
+2485 103 56139
+2614 103 27852657
+87 104 1
+95 104 51474
+96 104 35594
+97 104 35593
+202 104 55049
+248 104 5856
+249 104 5230
+250 104 6628
+251 104 63044
+252 104 16979
+579 104 42394
+639 104 46600
+886 104 24088
+887 104 26592
+888 104 36955
+899 104 1055
+1626 104 38786
+1634 104 7663
+1635 104 65189
+1636 104 60951
+1681 104 39478
+1691 104 62067
+1698 104 42229
+1699 104 13107
+1700 104 28549
+1701 104 33091
+1702 104 2459
+1960 104 56576
+1970 104 50666
+1981 104 13602
+2045 104 60520
+2046 104 34335
+2047 104 14203
+2058 104 46768
+2311 104 59104
+2312 104 59104
+2313 104 60805
+2314 104 60805
+2316 104 57042
+2317 104 57042
+2318 104 57042
+2319 104 38257
+2320 104 53089
+2321 104 37753
+2322 104 4871
+2323 104 4871
+2324 104 4871
+2326 104 38373
+2327 104 38373
+2328 104 41063
+2329 104 13921
+2330 104 511
+2331 104 1263
+2332 104 11219
+2333 104 11219
+2334 104 11219
+2335 104 11219
+2337 104 62126
+2338 104 37707
+2339 104 22891
+2340 104 51269
+2341 104 64420
+2342 104 62493
+2398 104 47545
+2399 104 47545
+2400 104 47545
+2401 104 47545
+2402 104 47545
+2404 104 11529
+2405 104 55169
+2406 104 54336
+2407 104 59526
+2408 104 33974
+2419 104 44814
+2476 104 40747
+2477 104 40747
+2478 104 40747
+2479 104 40747
+2480 104 40747
+2481 104 40747
+2482 104 62126
+2483 104 20561
+2484 104 27735
+2485 104 22813
+2486 104 7672
+2497 104 13568
+2509 104 46060
+2615 104 27852657
+87 105 1
+96 105 1
+189 105 35718
+190 105 18144
+191 105 18144
+192 105 6230
+201 105 18137
+240 105 18136
+627 105 23890
+747 105 30872
+748 105 51386
+757 105 16491
+811 105 11064
+876 105 5310
+1359 105 33434
+1360 105 33434
+1361 105 25938
+1362 105 25938
+1364 105 35
+1365 105 35
+1366 105 35
+1367 105 11439
+1368 105 2149
+1369 105 34236
+1406 105 5970
+1407 105 5970
+1408 105 5970
+1410 105 40250
+1411 105 40250
+1412 105 20550
+1413 105 20379
+1414 105 4824
+1423 105 36109
+1618 105 36577
+1619 105 36577
+1620 105 36577
+1621 105 36577
+1623 105 48004
+1624 105 27294
+1625 105 27835
+1626 105 61358
+1635 105 63902
+1690 105 8427
+1897 105 33347
+1898 105 33347
+1899 105 33347
+1900 105 33347
+1901 105 33347
+1903 105 29396
+1904 105 62826
+1905 105 19800
+1914 105 58877
+1969 105 61843
+2035 105 33148
+2258 105 5215
+2259 105 5215
+2260 105 5215
+2261 105 5215
+2262 105 5215
+2263 105 5215
+2264 105 37703
+2265 105 19912
+2266 105 39372
+2275 105 17221
+2330 105 61058
+2396 105 2367
+2474 105 14972
+2616 105 27852657
+88 106 1
+89 106 1
+95 106 25927
+96 106 57482
+97 106 57482
+202 106 29438
+234 106 1
+237 106 3114
+238 106 32276
+239 106 6349
+240 106 29610
+241 106 4171
+251 106 32215
+579 106 40607
+638 106 27567
+810 106 65303
+811 106 14582
+812 106 26763
+822 106 56553
+887 106 61201
+1607 106 454
+1613 106 36229
+1614 106 54927
+1615 106 1144
+1616 106 7535
+1617 106 7535
+1618 106 50241
+1619 106 6922
+1621 106 6948
+1622 106 17591
+1623 106 30422
+1624 106 41133
+1625 106 56915
+1626 106 49380
+1627 106 21100
+1628 106 37567
+1629 106 23766
+1631 106 679
+1632 106 18093
+1633 106 3321
+1634 106 38189
+1635 106 37780
+1636 106 36922
+1682 106 21459
+1683 106 35013
+1684 106 4625
+1685 106 56392
+1687 106 2172
+1688 106 29917
+1689 106 26508
+1690 106 15056
+1691 106 29597
+1701 106 25826
+1961 106 53600
+1962 106 43400
+1963 106 49493
+1964 106 30510
+1965 106 52286
+1967 106 28251
+1968 106 35502
+1969 106 24166
+1970 106 8119
+1980 106 29945
+2046 106 44026
+2322 106 56948
+2323 106 43408
+2324 106 48175
+2325 106 16217
+2326 106 4879
+2327 106 19167
+2328 106 14942
+2329 106 27367
+2330 106 753
+2331 106 42253
+2341 106 48931
+2407 106 12705
+2485 106 51890
+2617 106 27852657
+89 107 1
+95 107 26954
+96 107 38996
+97 107 38996
+202 107 65149
+238 107 44187
+239 107 56625
+240 107 37368
+241 107 31994
+251 107 5841
+579 107 45901
+638 107 10522
+811 107 15876
+812 107 13638
+822 107 20749
+887 107 16068
+1607 107 28332
+1614 107 25865
+1615 107 16981
+1616 107 50893
+1617 107 50893
+1618 107 20073
+1619 107 9057
+1621 107 33789
+1622 107 19956
+1623 107 60259
+1624 107 57299
+1625 107 21352
+1626 107 35980
+1627 107 33637
+1628 107 36435
+1629 107 33019
+1631 107 33903
+1632 107 20899
+1633 107 47346
+1634 107 35965
+1635 107 7523
+1636 107 20687
+1682 107 58460
+1683 107 64285
+1684 107 29118
+1685 107 29118
+1687 107 8268
+1688 107 32375
+1689 107 52953
+1690 107 15234
+1691 107 42618
+1701 107 9395
+1961 107 7848
+1962 107 63565
+1963 107 41449
+1964 107 41449
+1965 107 60814
+1967 107 54419
+1968 107 18811
+1969 107 12553
+1970 107 60483
+1980 107 13854
+2046 107 46390
+2322 107 16453
+2323 107 49210
+2324 107 23573
+2325 107 23573
+2326 107 42237
+2327 107 28774
+2328 107 14960
+2329 107 24310
+2330 107 23118
+2331 107 17336
+2341 107 59527
+2407 107 34371
+2485 107 41592
+2618 107 27852657
+90 108 1
+234 108 65520
+235 108 65520
+621 108 47654
+870 108 17866
+871 108 65520
+872 108 65520
+1684 108 14891
+1687 108 35737
+1892 108 48752
+1893 108 49655
+1901 108 8215
+1908 108 20430
+1910 108 2221
+1913 108 48818
+1914 108 48818
+1915 108 48818
+1961 108 24050
+1962 108 24050
+1963 108 58733
+1964 108 36810
+1967 108 50923
+1968 108 42709
+1969 108 42709
+1970 108 26006
+1980 108 42709
+2027 108 64834
+2028 108 64834
+2029 108 30322
+2030 108 32204
+2031 108 6543
+2033 108 50923
+2034 108 42709
+2035 108 42709
+2036 108 26006
+2046 108 19897
+2057 108 42709
+2245 108 47769
+2246 108 56163
+2247 108 62746
+2248 108 56719
+2252 108 42447
+2253 108 4852
+2254 108 11435
+2255 108 16874
+2256 108 5242
+2257 108 5242
+2258 108 33792
+2259 108 33792
+2261 108 30875
+2262 108 45925
+2263 108 58819
+2264 108 55706
+2265 108 58916
+2266 108 53674
+2267 108 36224
+2268 108 36224
+2269 108 51294
+2271 108 53904
+2272 108 38604
+2273 108 18213
+2274 108 26662
+2275 108 59334
+2276 108 5660
+2322 108 29961
+2323 108 29961
+2324 108 32310
+2325 108 11234
+2327 108 50602
+2328 108 23274
+2329 108 31210
+2330 108 39368
+2331 108 64020
+2341 108 33789
+2388 108 3486
+2389 108 3486
+2390 108 28378
+2391 108 30571
+2392 108 37471
+2394 108 33822
+2395 108 60801
+2396 108 62574
+2397 108 44589
+2407 108 29155
+2418 108 54126
+2466 108 58050
+2467 108 58050
+2468 108 56188
+2469 108 20892
+2470 108 9669
+2471 108 25396
+2472 108 65417
+2473 108 47252
+2474 108 63445
+2475 108 43472
+2485 108 289
+2496 108 40976
+2508 108 46188
+2619 108 27852657
+91 109 1
+2331 109 65520
+2620 109 27852657
+92 110 1
+95 110 56220
+96 110 36376
+97 110 36376
+202 110 40097
+237 110 35859
+238 110 13303
+239 110 22604
+240 110 28557
+241 110 8790
+251 110 5069
+579 110 13382
+638 110 36952
+810 110 25092
+811 110 16934
+812 110 52081
+822 110 60624
+887 110 28741
+1615 110 12749
+1616 110 26774
+1617 110 26774
+1618 110 36979
+1619 110 36979
+1621 110 36998
+1622 110 36998
+1623 110 38757
+1624 110 39005
+1625 110 34088
+1626 110 7314
+1627 110 20894
+1628 110 20894
+1629 110 20894
+1631 110 15880
+1632 110 4636
+1633 110 56671
+1634 110 50393
+1635 110 34990
+1636 110 46270
+1682 110 43308
+1683 110 43308
+1684 110 43308
+1685 110 43308
+1687 110 36522
+1688 110 46985
+1689 110 25890
+1690 110 13797
+1691 110 9029
+1701 110 44677
+1961 110 21248
+1962 110 21248
+1963 110 21248
+1964 110 21248
+1965 110 21248
+1967 110 21391
+1968 110 14626
+1969 110 19389
+1970 110 23699
+1980 110 29147
+2046 110 1045
+2322 110 50628
+2323 110 50628
+2324 110 50628
+2325 110 50628
+2326 110 50628
+2327 110 50628
+2328 110 30191
+2329 110 26888
+2330 110 3691
+2331 110 1696
+2341 110 36464
+2407 110 57955
+2485 110 42875
+2621 110 27852657
+93 111 1
+190 111 44487
+191 111 44487
+192 111 44487
+198 111 1
+199 111 44487
+200 111 44487
+201 111 23453
+202 111 44487
+238 111 44487
+239 111 44487
+240 111 23453
+241 111 23453
+251 111 44487
+444 111 4882
+452 111 9764
+453 111 4882
+461 111 50483
+462 111 50483
+463 111 45601
+562 111 4882
+568 111 9764
+569 111 4882
+577 111 54111
+578 111 54111
+579 111 24427
+626 111 3628
+627 111 48115
+628 111 22059
+638 111 43233
+740 111 4882
+746 111 21034
+747 111 30798
+748 111 25916
+755 111 21034
+757 111 21034
+758 111 35837
+810 111 63153
+811 111 18666
+812 111 22451
+822 111 52135
+874 111 44487
+875 111 38491
+876 111 59525
+877 111 23845
+887 111 21477
+898 111 33609
+1326 111 29684
+1327 111 29684
+1360 111 29684
+1367 111 35837
+1368 111 35837
+1369 111 35837
+1404 111 11045
+1405 111 46807
+1412 111 33468
+1413 111 44745
+1414 111 63459
+1421 111 63152
+1422 111 3379
+1423 111 58404
+1424 111 30782
+1617 111 35762
+1625 111 35759
+1626 111 65518
+1634 111 61047
+1635 111 788
+1636 111 28523
+1688 111 4814
+1689 111 60113
+1690 111 54869
+1691 111 52613
+1701 111 54872
+1896 111 27315
+1903 111 41298
+1905 111 38206
+1910 111 61714
+1912 111 38472
+1913 111 49971
+1914 111 25204
+1915 111 32331
+1961 111 24489
+1962 111 24489
+1963 111 24489
+1964 111 24489
+1967 111 8714
+1968 111 1337
+1969 111 40067
+1970 111 34410
+1980 111 11107
+2027 111 24489
+2028 111 24489
+2029 111 24489
+2030 111 24489
+2031 111 24489
+2033 111 1507
+2034 111 54234
+2035 111 32687
+2036 111 65067
+2046 111 6103
+2057 111 49868
+2252 111 13853
+2253 111 13853
+2254 111 13853
+2255 111 13853
+2256 111 34027
+2257 111 27936
+2258 111 13443
+2259 111 13443
+2261 111 58760
+2262 111 58760
+2263 111 58760
+2264 111 39842
+2265 111 19333
+2266 111 56918
+2267 111 45006
+2268 111 45006
+2269 111 45006
+2271 111 38354
+2272 111 38354
+2273 111 42052
+2274 111 27096
+2275 111 20383
+2276 111 56132
+2322 111 6198
+2323 111 6198
+2324 111 6198
+2325 111 6198
+2327 111 874
+2328 111 61269
+2329 111 30884
+2330 111 25065
+2331 111 19220
+2341 111 9622
+2388 111 8608
+2389 111 8608
+2390 111 8608
+2391 111 8608
+2392 111 8608
+2394 111 37246
+2395 111 34983
+2396 111 61368
+2397 111 58244
+2407 111 11659
+2418 111 18123
+2466 111 18383
+2467 111 18383
+2468 111 18383
+2469 111 18383
+2470 111 18383
+2471 111 18383
+2472 111 28752
+2473 111 25113
+2474 111 27741
+2475 111 59178
+2485 111 57955
+2496 111 56629
+2508 111 13342
+2622 111 27852657
+94 112 1
+95 112 58152
+96 112 64391
+97 112 64391
+202 112 54740
+237 112 8155
+238 112 8153
+239 112 15523
+240 112 38979
+241 112 20117
+251 112 29768
+579 112 20423
+638 112 52414
+810 112 36345
+811 112 27598
+812 112 45774
+822 112 9159
+887 112 52034
+1616 112 27596
+1617 112 27596
+1618 112 35507
+1619 112 35507
+1621 112 21677
+1622 112 21677
+1623 112 21677
+1624 112 24308
+1625 112 62056
+1626 112 34460
+1627 112 11522
+1628 112 11522
+1629 112 11522
+1631 112 42610
+1632 112 42610
+1633 112 33274
+1634 112 3633
+1635 112 5697
+1636 112 24600
+1682 112 45087
+1683 112 45087
+1684 112 45087
+1685 112 45087
+1687 112 53022
+1688 112 23519
+1689 112 35417
+1690 112 43143
+1691 112 13605
+1701 112 35154
+1961 112 63986
+1962 112 63986
+1963 112 63986
+1964 112 63986
+1965 112 63986
+1967 112 45584
+1968 112 47510
+1969 112 35134
+1970 112 3149
+1980 112 10107
+2046 112 21548
+2322 112 46063
+2323 112 46063
+2324 112 46063
+2325 112 46063
+2326 112 46063
+2327 112 46063
+2328 112 48863
+2329 112 16395
+2330 112 12958
+2331 112 5566
+2341 112 49339
+2407 112 38488
+2485 112 38622
+2623 112 27852657
+95 113 1
+198 113 49655
+199 113 47146
+200 113 47147
+201 113 43109
+202 113 41161
+241 113 41161
+628 113 9959
+756 113 15448
+757 113 34405
+758 113 47778
+812 113 7208
+877 113 38410
+1404 113 55968
+1405 113 55968
+1406 113 53684
+1407 113 53684
+1409 113 60911
+1410 113 60911
+1411 113 60911
+1412 113 15964
+1413 113 63589
+1414 113 7621
+1415 113 26300
+1416 113 26300
+1417 113 26300
+1419 113 41492
+1420 113 41492
+1421 113 15026
+1422 113 30582
+1423 113 9177
+1424 113 1556
+1627 113 1887
+1628 113 1887
+1629 113 1887
+1630 113 1887
+1632 113 62464
+1633 113 13835
+1634 113 21410
+1635 113 26514
+1636 113 21556
+1691 113 5510
+1906 113 4230
+1907 113 4230
+1908 113 4230
+1909 113 4230
+1910 113 4230
+1912 113 43084
+1913 113 37295
+1914 113 60907
+1915 113 24668
+1970 113 3603
+2036 113 34457
+2267 113 35266
+2268 113 35266
+2269 113 35266
+2270 113 35266
+2271 113 35266
+2272 113 35266
+2273 113 2200
+2274 113 34759
+2275 113 2016
+2276 113 62821
+2331 113 12285
+2397 113 59095
+2475 113 3689
+2624 113 27852657
+96 114 1
+97 114 1
+198 114 35718
+199 114 18144
+200 114 18144
+201 114 6230
+202 114 18137
+241 114 18136
+628 114 23890
+756 114 30872
+757 114 51386
+758 114 16491
+812 114 11064
+877 114 5310
+1404 114 33434
+1405 114 33434
+1406 114 25938
+1407 114 25938
+1409 114 35
+1410 114 35
+1411 114 35
+1412 114 11439
+1413 114 2149
+1414 114 34236
+1415 114 5970
+1416 114 5970
+1417 114 5970
+1419 114 40250
+1420 114 40250
+1421 114 20550
+1422 114 20379
+1423 114 4824
+1424 114 36109
+1627 114 36577
+1628 114 36577
+1629 114 36577
+1630 114 36577
+1632 114 48004
+1633 114 27294
+1634 114 27835
+1635 114 61358
+1636 114 63902
+1691 114 8427
+1906 114 33347
+1907 114 33347
+1908 114 33347
+1909 114 33347
+1910 114 33347
+1912 114 29396
+1913 114 62826
+1914 114 19800
+1915 114 58877
+1970 114 61843
+2036 114 33148
+2267 114 5215
+2268 114 5215
+2269 114 5215
+2270 114 5215
+2271 114 5215
+2272 114 5215
+2273 114 37703
+2274 114 19912
+2275 114 39372
+2276 114 17221
+2331 114 61058
+2397 114 2367
+2475 114 14972
+2625 114 27852657
+98 115 1
+99 115 1
+101 115 60493
+102 115 60492
+103 115 15133
+104 115 15135
+105 115 20164
+106 115 15133
+107 115 15135
+108 115 40328
+109 115 20164
+589 115 60500
+590 115 64247
+591 115 64247
+621 115 23068
+623 115 47760
+626 115 13548
+627 115 13548
+628 115 13548
+629 115 25824
+630 115 25824
+631 115 48892
+632 115 15524
+635 115 29304
+636 115 862
+637 115 862
+638 115 14410
+639 115 862
+813 115 25824
+814 115 25824
+815 115 48892
+816 115 15524
+817 115 15524
+819 115 29304
+820 115 862
+821 115 862
+822 115 14410
+823 115 1724
+888 115 862
+1638 115 55883
+1639 115 55883
+1640 115 31383
+1641 115 28636
+1642 115 38274
+1643 115 9162
+1644 115 15133
+1645 115 11453
+1646 115 38700
+1647 115 9162
+1648 115 15133
+1649 115 56194
+1650 115 56709
+1651 115 18009
+1652 115 9162
+1653 115 5075
+1654 115 3447
+1655 115 51524
+1656 115 5561
+1657 115 53073
+1660 115 51311
+1661 115 27223
+1662 115 59941
+1663 115 30289
+1667 115 29704
+1668 115 5616
+1669 115 38334
+1670 115 41400
+1671 115 45296
+1672 115 45296
+1673 115 38060
+1674 115 55343
+1676 115 41986
+1677 115 9183
+1678 115 53682
+1679 115 32375
+1680 115 34227
+1681 115 54452
+1682 115 58236
+1683 115 9998
+1684 115 18831
+1686 115 25390
+1687 115 55679
+1688 115 24991
+1689 115 13475
+1690 115 19042
+1691 115 30111
+1692 115 12466
+1693 115 29749
+1694 115 38582
+1695 115 5333
+1697 115 24034
+1698 115 4252
+1699 115 44339
+1700 115 27270
+1701 115 12639
+1702 115 48049
+1971 115 14236
+1972 115 1581
+1973 115 39114
+1974 115 43371
+1975 115 14193
+1977 115 7089
+1978 115 55079
+1979 115 2889
+1980 115 34387
+1981 115 25166
+2047 115 42638
+2332 115 57926
+2333 115 36053
+2334 115 55133
+2335 115 22734
+2336 115 832
+2337 115 36904
+2338 115 15522
+2339 115 1195
+2340 115 3421
+2341 115 17150
+2342 115 31308
+2408 115 12351
+2486 115 24490
+2626 115 27852657
+99 116 1
+108 116 56901
+109 116 56901
+110 116 36996
+111 116 30940
+112 116 34581
+121 116 2415
+122 116 63106
+124 116 59634
+139 116 6472
+164 116 19220
+168 116 43857
+203 116 19220
+204 116 23139
+582 116 44371
+586 116 38612
+591 116 26909
+1642 116 3590
+1645 116 41788
+1646 116 5143
+1649 116 11668
+1650 116 43137
+1651 116 37994
+1656 116 20743
+1657 116 12929
+1662 116 3411
+1668 116 26942
+1669 116 15818
+1670 116 32168
+1671 116 59145
+1672 116 59145
+1673 116 51431
+1674 116 62109
+1676 116 58663
+1677 116 10505
+1678 116 49647
+1679 116 23046
+1680 116 31345
+1681 116 37721
+1682 116 61325
+1683 116 5642
+1684 116 3586
+1686 116 28110
+1687 116 53823
+1688 116 43044
+1689 116 36334
+1690 116 29069
+1691 116 56869
+1692 116 52641
+1693 116 12526
+1694 116 8029
+1695 116 34996
+1697 116 49458
+1698 116 6424
+1699 116 30773
+1700 116 12683
+1701 116 31844
+1702 116 40496
+1971 116 56126
+1972 116 31554
+1973 116 35220
+1974 116 21586
+1975 116 12182
+1977 116 39101
+1978 116 59952
+1979 116 18419
+1980 116 29689
+1981 116 3269
+2047 116 28294
+2332 116 4338
+2333 116 64734
+2334 116 19280
+2335 116 52545
+2336 116 19126
+2337 116 44456
+2338 116 53591
+2339 116 14289
+2340 116 49993
+2341 116 25865
+2342 116 39988
+2408 116 31587
+2486 116 17129
+2627 116 27852657
+100 117 1
+101 117 1
+102 117 1
+471 117 1
+472 117 1
+473 117 1
+474 117 1
+475 117 1
+476 117 2
+477 117 1
+478 117 1
+479 117 1
+480 117 2
+481 117 2
+482 117 1
+1444 117 32761
+1445 117 32761
+1446 117 32761
+1447 117 32761
+1448 117 32761
+1449 117 1
+1450 117 32761
+1451 117 32761
+1452 117 32761
+1453 117 1
+1454 117 1
+1455 117 32761
+1458 117 32761
+1459 117 32761
+1460 117 32761
+1461 117 32761
+1462 117 32761
+1463 117 1
+1464 117 32761
+1465 117 1
+1466 117 1
+1467 117 2
+1468 117 2
+1469 117 32762
+1470 117 32761
+1471 117 32761
+1472 117 1
+1473 117 1
+1474 117 32762
+1475 117 32761
+1644 117 32761
+1645 117 32761
+1646 117 32761
+1923 117 32761
+1924 117 32761
+1925 117 32761
+1927 117 32761
+1928 117 32761
+1929 117 1
+1930 117 32761
+2278 117 1
+2279 117 1
+2280 117 24572
+2281 117 24572
+2282 117 24571
+2283 117 24572
+2284 117 49143
+2285 117 8193
+2286 117 49143
+2287 117 49143
+2288 117 8193
+2289 117 57335
+2290 117 16385
+2291 117 32763
+2292 117 49142
+2293 117 8192
+2294 117 57333
+2295 117 16383
+2296 117 2
+2297 117 32761
+2476 117 40951
+2477 117 12286
+2478 117 20476
+2479 117 57332
+2480 117 32761
+2509 117 4095
+2628 117 27852657
+101 118 1
+102 118 1
+1645 118 49142
+1646 118 49142
+1924 118 49142
+1925 118 49142
+1928 118 2
+1929 118 49142
+2285 118 8191
+2286 118 8191
+2289 118 1
+2290 118 8191
+2294 118 1
+2295 118 8191
+2478 118 49142
+2479 118 13310
+2629 118 27852657
+102 119 1
+105 119 65520
+108 119 44995
+109 119 44996
+111 119 2415
+112 119 63106
+121 119 2415
+122 119 63106
+124 119 58093
+139 119 58379
+168 119 256
+204 119 42359
+586 119 17462
+591 119 48059
+1645 119 41811
+1646 119 8756
+1649 119 65436
+1650 119 18864
+1651 119 10108
+1656 119 50866
+1657 119 55669
+1662 119 51110
+1668 119 25845
+1669 119 1872
+1670 119 58322
+1671 119 44313
+1672 119 44313
+1673 119 47757
+1674 119 23014
+1676 119 54087
+1677 119 46852
+1678 119 64236
+1679 119 5598
+1680 119 47134
+1681 119 2821
+1682 119 17912
+1683 119 39197
+1684 119 1821
+1686 119 25592
+1687 119 65209
+1688 119 58705
+1689 119 43468
+1690 119 39823
+1691 119 37002
+1692 119 6717
+1693 119 44195
+1694 119 34215
+1695 119 60005
+1697 119 61787
+1698 119 5678
+1699 119 33547
+1700 119 15746
+1701 119 28442
+1702 119 56961
+1971 119 47533
+1972 119 44853
+1973 119 52569
+1974 119 43560
+1975 119 11424
+1977 119 35477
+1978 119 31481
+1979 119 1389
+1980 119 64437
+1981 119 20221
+2047 119 28781
+2332 119 55685
+2333 119 35426
+2334 119 22371
+2335 119 64867
+2336 119 46086
+2337 119 52252
+2338 119 39529
+2339 119 24736
+2340 119 63887
+2341 119 39641
+2342 119 3993
+2408 119 63984
+2486 119 14285
+2630 119 27852657
+103 120 1
+108 120 55216
+109 120 55216
+124 120 20878
+139 120 41568
+168 120 29369
+1649 120 32754
+1650 120 65510
+1651 120 65510
+1656 120 33640
+1657 120 14837
+1662 120 31447
+1668 120 8249
+1669 120 24574
+1670 120 43006
+1671 120 29949
+1672 120 29949
+1673 120 22880
+1674 120 5194
+1676 120 64147
+1677 120 10555
+1678 120 51680
+1679 120 21127
+1680 120 63999
+1681 120 34050
+1682 120 34142
+1683 120 6741
+1684 120 21115
+1686 120 19194
+1687 120 61503
+1688 120 3087
+1689 120 10121
+1690 120 23350
+1691 120 54821
+1692 120 28070
+1693 120 27838
+1694 120 35966
+1695 120 14141
+1697 120 26434
+1698 120 52612
+1699 120 24534
+1700 120 56075
+1701 120 55044
+1702 120 223
+1971 120 56228
+1972 120 26325
+1973 120 11815
+1974 120 14733
+1975 120 29202
+1977 120 62741
+1978 120 15424
+1979 120 1924
+1980 120 3320
+1981 120 9045
+2047 120 8822
+2332 120 59741
+2333 120 4758
+2334 120 7870
+2335 120 16626
+2336 120 51870
+2337 120 1879
+2338 120 25368
+2339 120 37875
+2340 120 15208
+2341 120 59799
+2342 120 35328
+2408 120 42414
+2486 120 58440
+2631 120 27852657
+104 121 1
+105 121 1
+108 121 10354
+109 121 10353
+124 121 34941
+139 121 14543
+168 121 47021
+1649 121 22339
+1650 121 32765
+1651 121 32765
+1656 121 29714
+1657 121 18788
+1662 121 56692
+1668 121 43182
+1669 121 53642
+1670 121 5532
+1671 121 55332
+1672 121 55332
+1673 121 61025
+1674 121 1802
+1676 121 17846
+1677 121 28650
+1678 121 13020
+1679 121 58493
+1680 121 48678
+1681 121 58867
+1682 121 12347
+1683 121 3018
+1684 121 38240
+1686 121 40835
+1687 121 62837
+1688 121 13605
+1689 121 23090
+1690 121 59381
+1691 121 514
+1692 121 24612
+1693 121 16611
+1694 121 38339
+1695 121 5252
+1697 121 40011
+1698 121 17836
+1699 121 27608
+1700 121 12673
+1701 121 828
+1702 121 314
+1971 121 36203
+1972 121 34915
+1973 121 35879
+1974 121 21957
+1975 121 14456
+1977 121 50346
+1978 121 5347
+1979 121 62160
+1980 121 15394
+1981 121 15855
+2047 121 15541
+2332 121 25277
+2333 121 15345
+2334 121 48168
+2335 121 28755
+2336 121 45377
+2337 121 51275
+2338 121 8006
+2339 121 563
+2340 121 41600
+2341 121 20496
+2342 121 38363
+2408 121 62374
+2486 121 60943
+2632 121 27852657
+105 122 1
+108 122 145
+109 122 144
+122 122 6890
+138 122 52007
+139 122 41032
+168 122 2422
+591 122 42056
+1649 122 10780
+1650 122 58612
+1651 122 58554
+1656 122 7003
+1657 122 25125
+1662 122 1148
+1668 122 47747
+1669 122 940
+1670 122 38532
+1671 122 42289
+1672 122 42289
+1673 122 25603
+1674 122 30908
+1676 122 33086
+1677 122 25360
+1678 122 48317
+1679 122 25873
+1680 122 37944
+1681 122 61176
+1682 122 46011
+1683 122 42075
+1684 122 44219
+1686 122 24593
+1687 122 34719
+1688 122 44949
+1689 122 2341
+1690 122 8321
+1691 122 12666
+1692 122 48286
+1693 122 49630
+1694 122 33712
+1695 122 9075
+1697 122 22702
+1698 122 41233
+1699 122 22021
+1700 122 59528
+1701 122 32058
+1702 122 19392
+1971 122 42561
+1972 122 50860
+1973 122 40866
+1974 122 32965
+1975 122 35588
+1977 122 57577
+1978 122 46180
+1979 122 42235
+1980 122 45043
+1981 122 17944
+2047 122 64073
+2332 122 27919
+2333 122 43689
+2334 122 53712
+2335 122 6220
+2336 122 21955
+2337 122 60662
+2338 122 61135
+2339 122 24300
+2340 122 7396
+2341 122 51763
+2342 122 29223
+2408 122 18450
+2486 122 22834
+2633 122 27852657
+106 123 1
+108 123 28737
+109 123 28737
+124 123 54030
+139 123 55705
+168 123 48843
+1656 123 27971
+1657 123 31853
+1662 123 38204
+1668 123 36146
+1669 123 47020
+1670 123 51155
+1671 123 58568
+1672 123 58568
+1673 123 61412
+1674 123 46148
+1676 123 48003
+1677 123 39029
+1678 123 30753
+1679 123 36176
+1680 123 9970
+1681 123 16923
+1682 123 6740
+1683 123 8876
+1684 123 3132
+1686 123 18761
+1687 123 59927
+1688 123 55308
+1689 123 13678
+1690 123 50901
+1691 123 33978
+1692 123 50513
+1693 123 57774
+1694 123 39810
+1695 123 55195
+1697 123 46407
+1698 123 44046
+1699 123 48295
+1700 123 7467
+1701 123 23378
+1702 123 54921
+1971 123 6161
+1972 123 28425
+1973 123 24667
+1974 123 64361
+1975 123 19370
+1977 123 15424
+1978 123 48190
+1979 123 18542
+1980 123 12265
+1981 123 16913
+2047 123 27513
+2332 123 54169
+2333 123 48008
+2334 123 35594
+2335 123 26679
+2336 123 4387
+2337 123 62496
+2338 123 10445
+2339 123 19466
+2340 123 46348
+2341 123 30291
+2342 123 7501
+2408 123 59118
+2486 123 12963
+2634 123 27852657
+107 124 1
+108 124 58625
+109 124 58625
+124 124 28245
+139 124 24171
+168 124 49545
+1656 124 54563
+1657 124 13544
+1662 124 54384
+1668 124 29375
+1669 124 31792
+1670 124 11786
+1671 124 7696
+1672 124 7696
+1673 124 5764
+1674 124 40730
+1676 124 37618
+1677 124 8305
+1678 124 49063
+1679 124 60537
+1680 124 3678
+1681 124 61503
+1682 124 54817
+1683 124 50130
+1684 124 50130
+1686 124 22407
+1687 124 22514
+1688 124 29304
+1689 124 65233
+1690 124 21920
+1691 124 25938
+1692 124 36435
+1693 124 28447
+1694 124 28447
+1695 124 13062
+1697 124 59264
+1698 124 57187
+1699 124 26164
+1700 124 13226
+1701 124 31628
+1702 124 5690
+1971 124 43525
+1972 124 40806
+1973 124 40806
+1974 124 1112
+1975 124 52069
+1977 124 23603
+1978 124 6911
+1979 124 46448
+1980 124 10159
+1981 124 21236
+2047 124 15546
+2332 124 23623
+2333 124 11406
+2334 124 11406
+2335 124 20321
+2336 124 31812
+2337 124 29848
+2338 124 19325
+2339 124 60648
+2340 124 24053
+2341 124 28207
+2342 124 203
+2408 124 37931
+2486 124 51196
+2635 124 27852657
+108 125 1
+2297 125 65520
+2636 125 27852657
+109 126 1
+2296 126 65066
+2297 126 65067
+2302 126 62337
+2309 126 12276
+2310 126 32511
+2311 126 45215
+2312 126 45215
+2313 126 338
+2314 126 3916
+2316 126 40404
+2317 126 45425
+2318 126 33114
+2319 126 45820
+2320 126 54322
+2321 126 9107
+2322 126 33593
+2323 126 36595
+2324 126 36595
+2326 126 1850
+2327 126 21277
+2328 126 19756
+2329 126 6146
+2330 126 23699
+2331 126 14592
+2332 126 8568
+2333 126 9141
+2334 126 9141
+2335 126 9141
+2337 126 7166
+2338 126 65084
+2339 126 47776
+2340 126 45194
+2341 126 6255
+2342 126 57184
+2398 126 61662
+2399 126 3628
+2400 126 3628
+2401 126 3628
+2402 126 18723
+2404 126 40111
+2405 126 4734
+2406 126 64597
+2407 126 62284
+2408 126 54888
+2419 126 63225
+2476 126 17971
+2477 126 33177
+2478 126 33177
+2479 126 33177
+2480 126 27091
+2481 126 1162
+2482 126 26529
+2483 126 34981
+2484 126 18824
+2485 126 23471
+2486 126 63226
+2497 126 29499
+2509 126 58862
+2637 126 27852657
+110 127 1
+507 127 1024
+510 127 14431
+522 127 32504
+539 127 5456
+546 127 60601
+558 127 20152
+564 127 20152
+572 127 20152
+580 127 31789
+581 127 31789
+582 127 48671
+585 127 24455
+597 127 37521
+604 127 53384
+612 127 53384
+621 127 8015
+631 127 53384
+761 127 31789
+762 127 31789
+763 127 48671
+766 127 24455
+770 127 57267
+781 127 37521
+788 127 53384
+796 127 53384
+805 127 8015
+815 127 41247
+880 127 53384
+1480 127 9206
+1483 127 8747
+1487 127 2436
+1492 127 62497
+1507 127 46940
+1510 127 489
+1514 127 59699
+1519 127 35861
+1525 127 48492
+1532 127 48492
+1540 127 20056
+1541 127 20056
+1545 127 16344
+1549 127 43231
+1554 127 11764
+1560 127 18475
+1567 127 4060
+1575 127 21089
+1585 127 15848
+1586 127 15848
+1587 127 16782
+1594 127 48601
+1599 127 39078
+1605 127 39072
+1612 127 62831
+1620 127 58414
+1629 127 37325
+1640 127 14959
+1641 127 14959
+1642 127 56504
+1645 127 37309
+1654 127 5883
+1660 127 19640
+1667 127 61218
+1675 127 43903
+1684 127 49808
+1694 127 12483
+1919 127 2649
+1920 127 2649
+1921 127 13490
+1924 127 26116
+1928 127 20158
+1939 127 1131
+1946 127 3539
+1954 127 186
+1963 127 26104
+1973 127 25306
+2039 127 12823
+2280 127 14375
+2281 127 14375
+2282 127 19164
+2285 127 5806
+2289 127 26379
+2294 127 61858
+2300 127 20081
+2307 127 59834
+2315 127 28443
+2324 127 763
+2334 127 54895
+2400 127 22479
+2478 127 43649
+2638 127 27852657
+111 128 1
+121 128 1
+204 128 1
+497 128 1
+500 128 32762
+508 128 1
+511 128 32762
+523 128 32761
+542 128 1
+547 128 32760
+585 128 1
+586 128 32764
+766 128 1
+767 128 32763
+771 128 3
+1484 128 61427
+1488 128 8192
+1493 128 8192
+1511 128 61427
+1515 128 8192
+1520 128 8192
+1546 128 17746
+1550 128 30032
+1555 128 30032
+1590 128 24572
+1595 128 40952
+1600 128 40952
+1645 128 24572
+1646 128 28670
+1655 128 40952
+1924 128 61427
+1925 128 12287
+1929 128 8190
+2285 128 38903
+2286 128 63473
+2290 128 36855
+2295 128 36855
+2301 128 45047
+2308 128 45047
+2316 128 32761
+2325 128 50506
+2335 128 50507
+2401 128 23892
+2479 128 5
+2639 128 27852657
+112 129 1
+122 129 43337
+138 129 28743
+139 129 29510
+168 129 45124
+591 129 47962
+1649 129 1785
+1650 129 18278
+1651 129 15078
+1656 129 909
+1657 129 7701
+1662 129 25737
+1668 129 32333
+1669 129 9898
+1670 129 38836
+1671 129 44110
+1672 129 44110
+1673 129 36897
+1674 129 27161
+1676 129 33200
+1677 129 15596
+1678 129 17666
+1679 129 12413
+1680 129 47914
+1681 129 3804
+1682 129 8874
+1683 129 13121
+1684 129 24538
+1686 129 8885
+1687 129 63236
+1688 129 20745
+1689 129 49250
+1690 129 29477
+1691 129 25673
+1692 129 60883
+1693 129 41854
+1694 129 36240
+1695 129 10114
+1697 129 60949
+1698 129 35971
+1699 129 59921
+1700 129 25726
+1701 129 57179
+1702 129 31506
+1971 129 63574
+1972 129 11155
+1973 129 5671
+1974 129 1896
+1975 129 8192
+1977 129 49090
+1978 129 9607
+1979 129 39398
+1980 129 17237
+1981 129 1711
+2047 129 35726
+2332 129 57387
+2333 129 15168
+2334 129 15764
+2335 129 1432
+2336 129 43534
+2337 129 57519
+2338 129 10665
+2339 129 8227
+2340 129 7176
+2341 129 57048
+2342 129 58923
+2408 129 44578
+2486 129 44053
+2640 129 27852657
+113 130 1
+207 130 13889
+589 130 4315
+590 130 59807
+591 130 59807
+605 130 26137
+606 130 3696
+614 130 55100
+621 130 57544
+623 130 34231
+626 130 56240
+627 130 56240
+628 130 56240
+629 130 15729
+630 130 51527
+631 130 29851
+632 130 61614
+635 130 63675
+636 130 44141
+637 130 44141
+638 130 34860
+639 130 44141
+813 130 15729
+814 130 51527
+815 130 29851
+816 130 61614
+817 130 50560
+819 130 63675
+820 130 44141
+821 130 44141
+822 130 34860
+823 130 22761
+888 130 44141
+1638 130 20422
+1639 130 20422
+1640 130 7961
+1641 130 64111
+1642 130 43689
+1643 130 62301
+1644 130 26260
+1645 130 47220
+1646 130 3531
+1647 130 62301
+1648 130 26260
+1649 130 57957
+1650 130 39295
+1651 130 35764
+1652 130 62301
+1653 130 26260
+1654 130 35588
+1655 130 33617
+1656 130 31753
+1657 130 61510
+1660 130 44356
+1661 130 63607
+1662 130 57516
+1663 130 52610
+1667 130 60908
+1668 130 43251
+1669 130 58082
+1670 130 34776
+1671 130 55579
+1672 130 55579
+1673 130 3092
+1674 130 7054
+1676 130 51885
+1677 130 21888
+1678 130 13646
+1679 130 17253
+1680 130 19309
+1681 130 29251
+1682 130 26958
+1683 130 30920
+1684 130 38142
+1686 130 12780
+1687 130 8659
+1688 130 36298
+1689 130 10975
+1690 130 10357
+1691 130 46627
+1692 130 13401
+1693 130 48459
+1694 130 35337
+1695 130 51713
+1697 130 50007
+1698 130 25222
+1699 130 43147
+1700 130 73
+1701 130 40012
+1702 130 58906
+1971 130 39301
+1972 130 46779
+1973 130 18391
+1974 130 60478
+1975 130 11690
+1977 130 14298
+1978 130 65384
+1979 130 13272
+1980 130 39347
+1981 130 48928
+2047 130 55543
+2332 130 6752
+2333 130 22631
+2334 130 50658
+2335 130 63306
+2336 130 53579
+2337 130 9435
+2338 130 51909
+2339 130 97
+2340 130 23069
+2341 130 32296
+2342 130 9144
+2408 130 31468
+2486 130 18314
+2641 130 27852657
+114 131 1
+123 131 1
+206 131 1
+1661 131 32761
+1668 131 32761
+1695 131 32761
+1940 131 32761
+1941 131 32761
+1947 131 32761
+1948 131 32761
+1974 131 1
+2040 131 32761
+2041 131 32761
+2301 131 24571
+2302 131 24571
+2303 131 24571
+2308 131 24571
+2309 131 24571
+2310 131 24571
+2335 131 49142
+2337 131 1
+2401 131 49141
+2402 131 49141
+2479 131 8190
+2480 131 8190
+2481 131 8190
+2482 131 36856
+2483 131 36856
+2486 131 32761
+2497 131 1
+2509 131 13310
+2642 131 27852657
+115 132 1
+208 132 15581
+215 132 12923
+223 132 63964
+232 132 26595
+242 132 26595
+629 132 61605
+859 132 20990
+868 132 65061
+878 132 51249
+889 132 20738
+1320 132 42190
+1361 132 23331
+1398 132 62933
+1406 132 38228
+1415 132 14897
+1496 132 58979
+1530 132 10349
+1573 132 55172
+1627 132 43566
+1658 132 61581
+1665 132 39942
+1673 132 3649
+1682 132 42365
+1692 132 57720
+1775 132 56675
+1809 132 39556
+1852 132 25965
+1906 132 56910
+1971 132 48866
+2018 132 33474
+2027 132 18140
+2037 132 55805
+2048 132 12628
+2135 132 30744
+2162 132 49866
+2169 132 54218
+2177 132 13861
+2178 132 13861
+2183 132 13278
+2187 132 13278
+2192 132 13278
+2198 132 63495
+2205 132 11935
+2213 132 23238
+2222 132 19347
+2223 132 19347
+2225 132 19347
+2232 132 36639
+2237 132 36639
+2243 132 1556
+2250 132 22841
+2258 132 11104
+2267 132 38529
+2277 132 3857
+2278 132 3857
+2280 132 3857
+2283 132 3857
+2292 132 38649
+2298 132 7350
+2305 132 10123
+2313 132 10896
+2322 132 21396
+2332 132 52946
+2343 132 51667
+2344 132 51667
+2346 132 51667
+2349 132 51667
+2353 132 51667
+2364 132 16915
+2371 132 13512
+2379 132 32962
+2388 132 48472
+2398 132 38304
+2409 132 12684
+2421 132 44722
+2422 132 44722
+2424 132 44722
+2427 132 44722
+2431 132 44722
+2436 132 44722
+2442 132 27538
+2449 132 14665
+2457 132 53537
+2466 132 1504
+2476 132 14516
+2487 132 14904
+2499 132 62175
+2643 132 27852657
+115 133 1
+2338 133 65520
+2644 133 27852657
+116 134 1
+209 134 15581
+216 134 12923
+224 134 63964
+233 134 26595
+243 134 26595
+630 134 61605
+860 134 20990
+869 134 65061
+879 134 51249
+890 134 20738
+1321 134 42190
+1362 134 23331
+1399 134 62933
+1407 134 38228
+1416 134 14897
+1497 134 58979
+1531 134 10349
+1574 134 55172
+1628 134 43566
+1659 134 61581
+1666 134 39942
+1674 134 3649
+1683 134 42365
+1693 134 57720
+1776 134 56675
+1810 134 39556
+1853 134 25965
+1907 134 56910
+1972 134 48866
+2019 134 33474
+2028 134 18140
+2038 134 55805
+2049 134 12628
+2136 134 30744
+2163 134 49866
+2170 134 54218
+2178 134 13861
+2179 134 13861
+2184 134 13278
+2188 134 13278
+2193 134 13278
+2199 134 63495
+2206 134 11935
+2214 134 23238
+2223 134 19347
+2224 134 19347
+2226 134 19347
+2233 134 36639
+2238 134 36639
+2244 134 1556
+2251 134 22841
+2259 134 11104
+2268 134 38529
+2278 134 3857
+2279 134 3857
+2281 134 3857
+2284 134 3857
+2293 134 38649
+2299 134 7350
+2306 134 10123
+2314 134 10896
+2323 134 21396
+2333 134 52946
+2344 134 51667
+2345 134 51667
+2347 134 51667
+2350 134 51667
+2354 134 51667
+2365 134 16915
+2372 134 13512
+2380 134 32962
+2389 134 48472
+2399 134 38304
+2410 134 12684
+2422 134 44722
+2423 134 44722
+2425 134 44722
+2428 134 44722
+2432 134 44722
+2437 134 44722
+2443 134 27538
+2450 134 14665
+2458 134 53537
+2467 134 1504
+2477 134 14516
+2488 134 14904
+2500 134 62175
+2645 134 27852657
+116 135 1
+117 135 1
+118 135 1
+119 135 1
+120 135 1
+125 135 1
+126 135 1
+127 135 1
+128 135 1
+143 135 1
+144 135 1
+145 135 1
+173 135 1
+174 135 1
+213 135 1
+1664 135 32761
+1671 135 32761
+1679 135 32761
+1688 135 32761
+1698 135 32761
+1977 135 32761
+2338 135 24573
+2646 135 27852657
+117 136 1
+210 136 15581
+217 136 12923
+225 136 63964
+234 136 26595
+244 136 26595
+631 136 61605
+861 136 20990
+870 136 65061
+880 136 51249
+891 136 20738
+1322 136 42190
+1363 136 23331
+1400 136 62933
+1408 136 38228
+1417 136 14897
+1498 136 58979
+1532 136 10349
+1575 136 55172
+1629 136 43566
+1660 136 61581
+1667 136 39942
+1675 136 3649
+1684 136 42365
+1694 136 57720
+1777 136 56675
+1811 136 39556
+1854 136 25965
+1908 136 56910
+1973 136 48866
+2020 136 33474
+2029 136 18140
+2039 136 55805
+2050 136 12628
+2137 136 30744
+2164 136 49866
+2171 136 54218
+2180 136 13861
+2181 136 13861
+2185 136 13278
+2189 136 13278
+2194 136 13278
+2200 136 63495
+2207 136 11935
+2215 136 23238
+2225 136 19347
+2226 136 19347
+2227 136 19347
+2234 136 36639
+2239 136 36639
+2245 136 1556
+2252 136 22841
+2260 136 11104
+2269 136 38529
+2280 136 3857
+2281 136 3857
+2282 136 3857
+2285 136 3857
+2294 136 38649
+2300 136 7350
+2307 136 10123
+2315 136 10896
+2324 136 21396
+2334 136 52946
+2346 136 51667
+2347 136 51667
+2348 136 51667
+2351 136 51667
+2355 136 51667
+2366 136 16915
+2373 136 13512
+2381 136 32962
+2390 136 48472
+2400 136 38304
+2411 136 12684
+2424 136 44722
+2425 136 44722
+2426 136 44722
+2429 136 44722
+2433 136 44722
+2438 136 44722
+2444 136 27538
+2451 136 14665
+2459 136 53537
+2468 136 1504
+2478 136 14516
+2489 136 14904
+2501 136 62175
+2647 136 27852657
+117 137 1
+119 137 36421
+126 137 39501
+127 137 15488
+128 137 14930
+129 137 503
+136 137 503
+140 137 46956
+141 137 34662
+143 137 57053
+144 137 11318
+145 137 56538
+146 137 58186
+153 137 63446
+161 137 62943
+169 137 56204
+170 137 61015
+171 137 5436
+173 137 4478
+174 137 13094
+175 137 43432
+182 137 58734
+190 137 26437
+199 137 29015
+208 137 46455
+209 137 40018
+210 137 9545
+211 137 49133
+213 137 8814
+214 137 3153
+221 137 13701
+229 137 64246
+238 137 19245
+248 137 55751
+595 137 35787
+596 137 13541
+597 137 56759
+598 137 53209
+599 137 21830
+601 137 3524
+608 137 37148
+616 137 65294
+625 137 48082
+635 137 17595
+819 137 27365
+1658 137 52726
+1659 137 35015
+1660 137 56568
+1661 137 65117
+1662 137 14255
+1663 137 35460
+1664 137 60330
+1671 137 1363
+1679 137 9525
+1688 137 51739
+1698 137 40937
+1977 137 957
+2338 137 24971
+2648 137 27852657
+118 138 1
+211 138 15581
+218 138 12923
+226 138 63964
+235 138 26595
+245 138 26595
+632 138 61605
+862 138 20990
+871 138 65061
+881 138 51249
+892 138 20738
+1323 138 42190
+1364 138 23331
+1401 138 62933
+1409 138 38228
+1418 138 14897
+1499 138 58979
+1533 138 10349
+1576 138 55172
+1630 138 43566
+1661 138 61581
+1668 138 39942
+1676 138 3649
+1685 138 42365
+1695 138 57720
+1778 138 56675
+1812 138 39556
+1855 138 25965
+1909 138 56910
+1974 138 48866
+2021 138 33474
+2030 138 18140
+2040 138 55805
+2051 138 12628
+2138 138 30744
+2165 138 49866
+2172 138 54218
+2183 138 13861
+2184 138 13861
+2186 138 13278
+2190 138 13278
+2195 138 13278
+2201 138 63495
+2208 138 11935
+2216 138 23238
+2228 138 19347
+2229 138 19347
+2230 138 19347
+2235 138 36639
+2240 138 36639
+2246 138 1556
+2253 138 22841
+2261 138 11104
+2270 138 38529
+2283 138 3857
+2284 138 3857
+2285 138 3857
+2286 138 3857
+2295 138 38649
+2301 138 7350
+2308 138 10123
+2316 138 10896
+2325 138 21396
+2335 138 52946
+2349 138 51667
+2350 138 51667
+2351 138 51667
+2352 138 51667
+2356 138 51667
+2367 138 16915
+2374 138 13512
+2382 138 32962
+2391 138 48472
+2401 138 38304
+2412 138 12684
+2427 138 44722
+2428 138 44722
+2429 138 44722
+2430 138 44722
+2434 138 44722
+2439 138 44722
+2445 138 27538
+2452 138 14665
+2460 138 53537
+2469 138 1504
+2479 138 14516
+2490 138 14904
+2502 138 62175
+2649 138 27852657
+118 139 1
+119 139 57589
+126 139 26020
+127 139 22286
+128 139 14366
+129 139 57570
+136 139 57570
+140 139 7814
+141 139 24449
+143 139 36151
+144 139 31012
+145 139 53853
+146 139 6662
+153 139 34880
+161 139 42831
+169 139 65470
+170 139 52325
+171 139 52325
+173 139 57470
+174 139 43430
+175 139 31637
+182 139 34779
+190 139 54413
+199 139 11582
+208 139 22247
+209 139 58697
+210 139 58697
+211 139 19109
+213 139 46787
+214 139 25087
+221 139 45373
+229 139 43376
+238 139 53982
+248 139 42400
+595 139 54026
+596 139 28423
+597 139 28423
+598 139 31973
+599 139 29874
+601 139 29149
+608 139 62547
+616 139 23177
+625 139 9621
+635 139 33569
+819 139 56690
+1658 139 44831
+1659 139 23820
+1660 139 23820
+1661 139 15271
+1662 139 44244
+1663 139 60014
+1664 139 47262
+1671 139 22343
+1679 139 44069
+1688 139 60873
+1698 139 4112
+1977 139 64382
+2338 139 17319
+2650 139 27852657
+119 140 1
+212 140 15581
+219 140 12923
+227 140 63964
+236 140 26595
+246 140 26595
+633 140 61605
+863 140 20990
+872 140 65061
+882 140 51249
+893 140 20738
+1324 140 42190
+1365 140 23331
+1402 140 62933
+1410 140 38228
+1419 140 14897
+1500 140 58979
+1534 140 10349
+1577 140 55172
+1631 140 43566
+1662 140 61581
+1669 140 39942
+1677 140 3649
+1686 140 42365
+1696 140 57720
+1779 140 56675
+1813 140 39556
+1856 140 25965
+1910 140 56910
+1975 140 48866
+2022 140 33474
+2031 140 18140
+2041 140 55805
+2052 140 12628
+2139 140 30744
+2166 140 49866
+2173 140 54218
+2187 140 13861
+2188 140 13861
+2190 140 13278
+2191 140 13278
+2196 140 13278
+2202 140 63495
+2209 140 11935
+2217 140 23238
+2232 140 19347
+2233 140 19347
+2234 140 19347
+2236 140 36639
+2241 140 36639
+2247 140 1556
+2254 140 22841
+2262 140 11104
+2271 140 38529
+2287 140 3857
+2288 140 3857
+2289 140 3857
+2290 140 3857
+2296 140 38649
+2302 140 7350
+2309 140 10123
+2317 140 10896
+2326 140 21396
+2336 140 52946
+2353 140 51667
+2354 140 51667
+2355 140 51667
+2356 140 51667
+2357 140 51667
+2368 140 16915
+2375 140 13512
+2383 140 32962
+2392 140 48472
+2402 140 38304
+2413 140 12684
+2431 140 44722
+2432 140 44722
+2433 140 44722
+2434 140 44722
+2435 140 44722
+2440 140 44722
+2446 140 27538
+2453 140 14665
+2461 140 53537
+2470 140 1504
+2480 140 14516
+2491 140 14904
+2503 140 62175
+2651 140 27852657
+119 141 1
+134 141 65520
+159 141 1
+175 141 34307
+183 141 31214
+192 141 34307
+200 141 33746
+201 141 45016
+202 141 10709
+214 141 65288
+222 141 233
+231 141 65288
+241 141 60877
+247 141 20975
+248 141 57395
+249 141 23649
+250 141 2357
+251 141 36317
+252 141 51670
+601 141 19622
+609 141 45899
+618 141 19622
+628 141 14229
+639 141 23238
+820 141 59498
+821 141 13867
+822 141 12777
+823 141 954
+888 141 29386
+1662 141 44211
+1664 141 54682
+1669 141 36185
+1670 141 59926
+1671 141 52517
+1672 141 63356
+1673 141 41763
+1674 141 18488
+1676 141 6846
+1677 141 46555
+1678 141 59516
+1679 141 23196
+1680 141 47123
+1681 141 49288
+1682 141 24038
+1683 141 42233
+1684 141 42233
+1686 141 10964
+1687 141 59141
+1688 141 18909
+1689 141 48775
+1690 141 41713
+1691 141 65290
+1692 141 35294
+1693 141 27483
+1694 141 27483
+1695 141 27483
+1697 141 7581
+1698 141 31348
+1699 141 39521
+1700 141 2333
+1701 141 44525
+1702 141 24970
+1971 141 28202
+1972 141 46320
+1973 141 46320
+1974 141 46320
+1975 141 34478
+1977 141 65020
+1978 141 12521
+1979 141 44591
+1980 141 55425
+1981 141 38869
+2047 141 50547
+2332 141 60946
+2333 141 27698
+2334 141 27698
+2335 141 27698
+2336 141 26328
+2337 141 39713
+2338 141 43933
+2339 141 53490
+2340 141 62709
+2341 141 58467
+2342 141 53775
+2408 141 58844
+2486 141 22134
+2652 141 27852657
+120 142 1
+213 142 15581
+220 142 12923
+228 142 63964
+237 142 26595
+247 142 26595
+634 142 61605
+864 142 20990
+873 142 65061
+883 142 51249
+894 142 20738
+1325 142 42190
+1366 142 23331
+1403 142 62933
+1411 142 38228
+1420 142 14897
+1501 142 58979
+1535 142 10349
+1578 142 55172
+1632 142 43566
+1663 142 61581
+1670 142 39942
+1678 142 3649
+1687 142 42365
+1697 142 57720
+1780 142 56675
+1814 142 39556
+1857 142 25965
+1911 142 56910
+1976 142 48866
+2023 142 33474
+2032 142 18140
+2042 142 55805
+2053 142 12628
+2140 142 30744
+2167 142 49866
+2174 142 54218
+2192 142 13861
+2193 142 13861
+2195 142 13278
+2196 142 13278
+2197 142 13278
+2203 142 63495
+2210 142 11935
+2218 142 23238
+2237 142 19347
+2238 142 19347
+2239 142 19347
+2241 142 36639
+2242 142 36639
+2248 142 1556
+2255 142 22841
+2263 142 11104
+2272 142 38529
+2292 142 3857
+2293 142 3857
+2294 142 3857
+2295 142 3857
+2297 142 38649
+2303 142 7350
+2310 142 10123
+2318 142 10896
+2327 142 21396
+2337 142 52946
+2358 142 51667
+2359 142 51667
+2360 142 51667
+2361 142 51667
+2362 142 51667
+2369 142 16915
+2376 142 13512
+2384 142 32962
+2393 142 48472
+2403 142 38304
+2414 142 12684
+2436 142 44722
+2437 142 44722
+2438 142 44722
+2439 142 44722
+2440 142 44722
+2441 142 44722
+2447 142 27538
+2454 142 14665
+2462 142 53537
+2471 142 1504
+2481 142 14516
+2492 142 14904
+2504 142 62175
+2653 142 27852657
+120 143 1
+128 143 33604
+129 143 42502
+136 143 42502
+140 143 48377
+141 143 48377
+143 143 51156
+144 143 51156
+145 143 40788
+146 143 61530
+153 143 6198
+161 143 29217
+169 143 57498
+170 143 57498
+171 143 57498
+173 143 53023
+174 143 6296
+175 143 30840
+182 143 50262
+190 143 23069
+199 143 59373
+208 143 41729
+209 143 41729
+210 143 41729
+211 143 41729
+213 143 22301
+214 143 22629
+221 143 11224
+229 143 13238
+238 143 22956
+248 143 29104
+595 143 45521
+596 143 45521
+597 143 45521
+598 143 45521
+599 143 45521
+601 143 14850
+608 143 29894
+616 143 11780
+625 143 17329
+635 143 50282
+819 143 21178
+1658 143 56153
+1659 143 56153
+1660 143 56153
+1661 143 56153
+1662 143 56153
+1663 143 1552
+1664 143 29280
+1671 143 16793
+1679 143 4004
+1688 143 1948
+1698 143 45476
+1977 143 42274
+2338 143 62575
+2654 143 27852657
+121 144 1
+204 144 1
+685 144 65520
+700 144 1
+832 144 1
+836 144 2
+1790 144 22476
+1794 144 49303
+1829 144 1846
+1869 144 38060
+1874 144 63229
+1892 144 19857
+1900 144 19857
+1909 144 19857
+1922 144 32502
+1923 144 32502
+1924 144 5041
+1925 144 119
+1940 144 34649
+1947 144 48723
+1955 144 48723
+1964 144 3059
+1974 144 48723
+1988 144 40679
+1989 144 40679
+1990 144 13218
+1991 144 16473
+1995 144 18516
+2006 144 34649
+2013 144 48723
+2021 144 48723
+2030 144 3059
+2040 144 31925
+2051 144 48723
+2123 144 39046
+2127 144 50705
+2132 144 6650
+2149 144 45057
+2150 144 53002
+2154 144 38043
+2159 144 57025
+2165 144 8962
+2172 144 8962
+2183 144 32247
+2184 144 32247
+2186 144 21762
+2190 144 51847
+2195 144 7293
+2201 144 60130
+2208 144 22345
+2216 144 13383
+2228 144 18098
+2229 144 18098
+2230 144 47185
+2235 144 44422
+2240 144 36525
+2246 144 54058
+2253 144 39705
+2261 144 53024
+2270 144 39641
+2283 144 57761
+2284 144 57761
+2285 144 21327
+2286 144 41298
+2295 144 12347
+2301 144 65389
+2308 144 56195
+2316 144 10192
+2325 144 58117
+2335 144 18477
+2349 144 16488
+2350 144 16488
+2351 144 7786
+2352 144 22022
+2356 144 6756
+2367 144 23160
+2374 144 65494
+2382 144 30080
+2391 144 16570
+2401 144 46882
+2412 144 65256
+2427 144 27751
+2428 144 27751
+2429 144 32373
+2430 144 33141
+2434 144 50007
+2439 144 25411
+2445 144 25919
+2452 144 4009
+2460 144 4010
+2469 144 61875
+2479 144 9316
+2490 144 31787
+2502 144 25645
+2655 144 27852657
+122 145 1
+2309 145 65520
+2656 145 27852657
+123 146 1
+206 146 1
+1526 146 2
+1527 146 2
+1528 146 2
+1533 146 2
+1534 146 2
+1535 146 2
+1568 146 2
+1569 146 2
+1570 146 2
+1614 146 2
+1615 146 2
+1661 146 49142
+1668 146 32763
+1670 146 2
+1695 146 32761
+1940 146 49142
+1941 146 49142
+1947 146 32763
+1948 146 32763
+1965 146 65519
+1974 146 1
+2040 146 32761
+2041 146 32761
+2301 146 16381
+2302 146 16381
+2303 146 16381
+2308 146 24572
+2309 146 24572
+2310 146 24572
+2311 146 1
+2312 146 1
+2316 146 43681
+2317 146 43681
+2318 146 43681
+2320 146 1
+2329 146 1
+2335 146 49142
+2337 146 1
+2339 146 1
+2401 146 49141
+2402 146 49141
+2405 146 1
+2479 146 8190
+2480 146 8190
+2481 146 8190
+2482 146 7169
+2483 146 4102
+2484 146 24572
+2485 146 60062
+2486 146 27302
+2497 146 60063
+2509 146 17406
+2657 146 27852657
+124 147 1
+139 147 11054
+168 147 2581
+1656 147 60281
+1657 147 31692
+1662 147 60533
+1669 147 52815
+1670 147 22206
+1671 147 27514
+1672 147 27514
+1673 147 36739
+1674 147 13864
+1676 147 31241
+1677 147 6264
+1678 147 6349
+1679 147 41469
+1680 147 38479
+1681 147 10965
+1682 147 22859
+1683 147 25751
+1684 147 25751
+1686 147 43757
+1687 147 61734
+1688 147 42359
+1689 147 23695
+1690 147 11967
+1691 147 1002
+1692 147 27673
+1693 147 37872
+1694 147 37872
+1695 147 37872
+1697 147 8866
+1698 147 28285
+1699 147 880
+1700 147 39746
+1701 147 27386
+1702 147 26384
+1971 147 5099
+1972 147 31562
+1973 147 31562
+1974 147 31562
+1975 147 53481
+1977 147 8400
+1978 147 41876
+1979 147 25263
+1980 147 26144
+1981 147 4767
+2047 147 43904
+2332 147 22260
+2333 147 23857
+2334 147 23857
+2335 147 23857
+2336 147 40169
+2337 147 54272
+2338 147 12977
+2339 147 32897
+2340 147 32922
+2341 147 34267
+2342 147 10488
+2408 147 60348
+2486 147 9628
+2658 147 27852657
+125 148 1
+126 148 1
+127 148 1
+128 148 1
+132 148 1
+133 148 1
+134 148 1
+135 148 1
+150 148 1
+151 148 1
+152 148 1
+180 148 1
+181 148 1
+220 148 1
+1671 148 32761
+1672 148 32761
+1680 148 32761
+1689 148 32761
+1699 148 32761
+1978 148 32761
+2338 148 1
+2339 148 24573
+2659 148 27852657
+126 149 1
+127 149 1
+128 149 1
+133 149 1
+134 149 1
+135 149 1
+158 149 65520
+159 149 65520
+160 149 65520
+197 149 1
+198 149 1
+218 149 30031
+229 149 48674
+230 149 48674
+231 149 48674
+234 149 35491
+237 149 1
+238 149 48674
+239 149 48674
+240 149 31827
+241 149 48674
+244 149 35491
+248 149 48674
+249 149 48674
+250 149 31827
+251 149 31827
+252 149 48674
+599 149 20475
+605 149 30031
+606 149 50506
+608 149 24337
+609 149 24337
+614 149 20475
+616 149 7490
+617 149 31827
+618 149 7490
+621 149 40951
+623 149 39585
+625 149 7490
+626 149 14980
+627 149 63654
+628 149 56164
+631 149 10920
+632 149 20474
+635 149 14980
+636 149 22470
+637 149 54297
+638 149 37450
+639 149 46807
+815 149 40950
+816 149 20474
+817 149 40949
+819 149 31827
+820 149 39317
+821 149 22470
+822 149 5623
+823 149 13113
+888 149 14980
+1661 149 59890
+1662 149 35831
+1663 149 35831
+1667 149 8873
+1668 149 16210
+1669 149 57672
+1670 149 57672
+1671 149 31358
+1672 149 31358
+1676 149 28040
+1677 149 3981
+1678 149 3981
+1679 149 58506
+1680 149 16154
+1681 149 50317
+1684 149 17403
+1686 149 7166
+1687 149 7166
+1688 149 58506
+1689 149 37918
+1690 149 24117
+1691 149 39321
+1694 149 48116
+1695 149 62618
+1697 149 46752
+1698 149 35108
+1699 149 14520
+1700 149 3292
+1701 149 33245
+1702 149 59445
+1973 149 18939
+1974 149 8701
+1975 149 35832
+1977 149 14516
+1978 149 21071
+1979 149 9843
+1980 149 4224
+1981 149 5159
+2047 149 11235
+2334 149 256
+2335 149 5375
+2336 149 5631
+2337 149 5631
+2338 149 5618
+2339 149 17139
+2340 149 52293
+2341 149 48811
+2342 149 39815
+2408 149 40755
+2486 149 29434
+2660 149 27852657
+127 150 1
+134 150 1
+159 150 65520
+197 150 1
+606 150 20185
+614 150 2514
+621 150 14338
+623 150 53369
+626 150 42459
+627 150 42459
+628 150 42459
+629 150 7268
+630 150 7268
+631 150 21606
+632 150 21606
+635 150 13100
+636 150 52842
+637 150 52842
+638 150 29780
+639 150 52842
+813 150 7268
+814 150 7268
+815 150 21606
+816 150 21606
+817 150 24122
+819 150 13100
+820 150 52842
+821 150 52842
+822 150 29780
+823 150 40163
+888 150 52842
+1662 150 36849
+1663 150 55489
+1667 150 12548
+1668 150 12548
+1669 150 53492
+1670 150 62885
+1671 150 28080
+1672 150 28080
+1673 150 11102
+1674 150 11102
+1676 150 29896
+1677 150 43919
+1678 150 26731
+1679 150 20754
+1680 150 53698
+1681 150 25618
+1682 150 3712
+1683 150 3712
+1684 150 10631
+1686 150 36353
+1687 150 42819
+1688 150 6440
+1689 150 58531
+1690 150 27566
+1691 150 1948
+1692 150 49395
+1693 150 49395
+1694 150 56314
+1695 150 56314
+1697 150 18945
+1698 150 19519
+1699 150 35251
+1700 150 60078
+1701 150 45298
+1702 150 43350
+1971 150 8299
+1972 150 8299
+1973 150 15343
+1974 150 15343
+1975 150 9807
+1977 150 60488
+1978 150 35904
+1979 150 39504
+1980 150 50726
+1981 150 25432
+2047 150 47603
+2332 150 48596
+2333 150 48596
+2334 150 59537
+2335 150 59537
+2336 150 55261
+2337 150 65110
+2338 150 58869
+2339 150 39101
+2340 150 53024
+2341 150 30058
+2342 150 36066
+2408 150 17353
+2486 150 16157
+2661 150 27852657
+128 151 1
+135 151 1
+160 151 65520
+198 151 1
+247 151 65520
+623 151 21389
+626 151 28284
+627 151 28284
+628 151 28284
+629 151 11510
+630 151 11510
+631 151 11510
+632 151 11510
+635 151 56660
+636 151 45147
+637 151 45147
+638 151 7910
+639 151 45147
+813 151 11510
+814 151 11510
+815 151 11510
+816 151 11510
+817 151 11510
+819 151 56660
+820 151 45147
+821 151 45147
+822 151 7910
+823 151 24773
+888 151 45147
+1663 151 21842
+1667 151 53137
+1668 151 53137
+1669 151 53137
+1670 151 40771
+1671 151 1076
+1672 151 1076
+1673 151 9850
+1674 151 9850
+1676 151 21733
+1677 151 21733
+1678 151 54135
+1679 151 8414
+1680 151 26240
+1681 151 25164
+1682 151 62177
+1683 151 62177
+1684 151 62177
+1686 151 33910
+1687 151 16617
+1688 151 3866
+1689 151 10964
+1690 151 35411
+1691 151 10247
+1692 151 17979
+1693 151 17979
+1694 151 17979
+1695 151 17979
+1697 151 60666
+1698 151 16221
+1699 151 24134
+1700 151 45880
+1701 151 61227
+1702 151 50980
+1971 151 38924
+1972 151 38924
+1973 151 38924
+1974 151 38924
+1975 151 38924
+1977 151 63178
+1978 151 38355
+1979 151 56441
+1980 151 8285
+1981 151 33282
+2047 151 47823
+2332 151 8196
+2333 151 8196
+2334 151 8196
+2335 151 8196
+2336 151 8196
+2337 151 26396
+2338 151 36642
+2339 151 45944
+2340 151 18919
+2341 151 38980
+2342 151 26601
+2408 151 33991
+2486 151 50811
+2662 151 27852657
+129 152 1
+221 152 15581
+222 152 12923
+230 152 63964
+239 152 26595
+249 152 26595
+636 152 61605
+866 152 20990
+875 152 65061
+885 152 51249
+896 152 20738
+1327 152 42190
+1368 152 23331
+1405 152 62933
+1413 152 38228
+1422 152 14897
+1529 152 58979
+1537 152 10349
+1580 152 55172
+1634 152 43566
+1671 152 61581
+1672 152 39942
+1680 152 3649
+1689 152 42365
+1699 152 57720
+1808 152 56675
+1816 152 39556
+1859 152 25965
+1913 152 56910
+1978 152 48866
+2025 152 33474
+2034 152 18140
+2044 152 55805
+2055 152 12628
+2168 152 30744
+2175 152 49866
+2176 152 54218
+2205 152 13861
+2206 152 13861
+2208 152 13278
+2209 152 13278
+2210 152 13278
+2211 152 63495
+2212 152 11935
+2220 152 23238
+2250 152 19347
+2251 152 19347
+2252 152 19347
+2254 152 36639
+2255 152 36639
+2256 152 1556
+2257 152 22841
+2265 152 11104
+2274 152 38529
+2305 152 3857
+2306 152 3857
+2307 152 3857
+2308 152 3857
+2310 152 38649
+2311 152 7350
+2312 152 10123
+2320 152 10896
+2329 152 21396
+2339 152 52946
+2371 152 51667
+2372 152 51667
+2373 152 51667
+2374 152 51667
+2375 152 51667
+2377 152 16915
+2378 152 13512
+2386 152 32962
+2395 152 48472
+2405 152 38304
+2416 152 12684
+2449 152 44722
+2450 152 44722
+2451 152 44722
+2452 152 44722
+2453 152 44722
+2454 152 44722
+2455 152 27538
+2456 152 14665
+2464 152 53537
+2473 152 1504
+2483 152 14516
+2494 152 14904
+2506 152 62175
+2663 152 27852657
+129 153 1
+137 153 65520
+154 153 25814
+163 153 39706
+175 153 174
+183 153 48597
+192 153 2815
+200 153 34895
+201 153 40384
+202 153 11754
+214 153 106
+222 153 48665
+231 153 54694
+241 153 38483
+247 153 36780
+248 153 45878
+249 153 10983
+250 153 38668
+251 153 60904
+252 153 34175
+601 153 17673
+609 153 56986
+618 153 48356
+628 153 49461
+639 153 58949
+820 153 30044
+821 153 16142
+822 153 32871
+823 153 19791
+888 153 60538
+1664 153 8600
+1671 153 52285
+1672 153 13482
+1673 153 56127
+1674 153 56127
+1676 153 4015
+1677 153 4015
+1678 153 4015
+1679 153 12281
+1680 153 59574
+1681 153 29216
+1682 153 2506
+1683 153 2506
+1684 153 2506
+1686 153 55185
+1687 153 55185
+1688 153 13073
+1689 153 18446
+1690 153 64136
+1691 153 64061
+1692 153 64500
+1693 153 64500
+1694 153 64500
+1695 153 64500
+1697 153 21373
+1698 153 34855
+1699 153 7746
+1700 153 16461
+1701 153 61423
+1702 153 6137
+1971 153 21878
+1972 153 21878
+1973 153 21878
+1974 153 21878
+1975 153 21878
+1977 153 51653
+1978 153 14199
+1979 153 35775
+1980 153 50617
+1981 153 33153
+2047 153 18682
+2332 153 47516
+2333 153 47516
+2334 153 47516
+2335 153 47516
+2336 153 47516
+2337 153 47516
+2338 153 42303
+2339 153 53184
+2340 153 52447
+2341 153 26124
+2342 153 3065
+2408 153 8997
+2486 153 41986
+2664 153 27852657
+130 154 1
+208 154 24985
+215 154 38044
+223 154 13436
+232 154 19774
+242 154 19774
+629 154 13874
+859 154 44885
+868 154 62795
+878 154 12873
+889 154 6973
+1320 154 42190
+1361 154 47694
+1398 154 52055
+1406 154 44415
+1415 154 62242
+1530 154 3807
+1573 154 31337
+1627 154 11318
+1658 154 8853
+1665 154 6800
+1673 154 3171
+1682 154 43937
+1692 154 27853
+1809 154 30710
+1852 154 36796
+1906 154 18057
+1971 154 14128
+2018 154 48975
+2027 154 45710
+2037 154 5080
+2048 154 25903
+2162 154 2010
+2169 154 37106
+2177 154 5657
+2178 154 5657
+2183 154 19778
+2187 154 19778
+2192 154 19778
+2198 154 764
+2205 154 34257
+2213 154 42151
+2222 154 50439
+2223 154 50439
+2225 154 50439
+2232 154 28631
+2237 154 28631
+2243 154 30049
+2250 154 45191
+2258 154 47482
+2267 154 631
+2277 154 40657
+2278 154 40657
+2280 154 40657
+2283 154 40657
+2292 154 6172
+2298 154 17865
+2305 154 38415
+2313 154 47386
+2322 154 57838
+2332 154 20113
+2343 154 63743
+2344 154 63743
+2346 154 63743
+2349 154 63743
+2353 154 63743
+2364 154 58981
+2371 154 57223
+2379 154 59830
+2388 154 3141
+2398 154 59630
+2409 154 31919
+2421 154 24799
+2422 154 24799
+2424 154 24799
+2427 154 24799
+2431 154 24799
+2436 154 24799
+2442 154 19395
+2449 154 45909
+2457 154 20765
+2466 154 53866
+2476 154 22252
+2487 154 26662
+2499 154 55597
+2665 154 27852657
+130 155 1
+147 155 1
+148 155 1
+176 155 1
+177 155 1
+178 155 1
+215 155 1
+216 155 1
+217 155 1
+218 155 1
+602 155 1
+603 155 1
+604 155 1
+605 155 1
+606 155 1
+1665 155 32761
+1666 155 32761
+1667 155 32761
+1668 155 32761
+1669 155 32761
+1670 155 32761
+2339 155 24573
+2666 155 27852657
+131 156 1
+209 156 24985
+216 156 38044
+224 156 13436
+233 156 19774
+243 156 19774
+630 156 13874
+860 156 44885
+869 156 62795
+879 156 12873
+890 156 6973
+1321 156 42190
+1362 156 47694
+1399 156 52055
+1407 156 44415
+1416 156 62242
+1531 156 3807
+1574 156 31337
+1628 156 11318
+1659 156 8853
+1666 156 6800
+1674 156 3171
+1683 156 43937
+1693 156 27853
+1810 156 30710
+1853 156 36796
+1907 156 18057
+1972 156 14128
+2019 156 48975
+2028 156 45710
+2038 156 5080
+2049 156 25903
+2163 156 2010
+2170 156 37106
+2178 156 5657
+2179 156 5657
+2184 156 19778
+2188 156 19778
+2193 156 19778
+2199 156 764
+2206 156 34257
+2214 156 42151
+2223 156 50439
+2224 156 50439
+2226 156 50439
+2233 156 28631
+2238 156 28631
+2244 156 30049
+2251 156 45191
+2259 156 47482
+2268 156 631
+2278 156 40657
+2279 156 40657
+2281 156 40657
+2284 156 40657
+2293 156 6172
+2299 156 17865
+2306 156 38415
+2314 156 47386
+2323 156 57838
+2333 156 20113
+2344 156 63743
+2345 156 63743
+2347 156 63743
+2350 156 63743
+2354 156 63743
+2365 156 58981
+2372 156 57223
+2380 156 59830
+2389 156 3141
+2399 156 59630
+2410 156 31919
+2422 156 24799
+2423 156 24799
+2425 156 24799
+2428 156 24799
+2432 156 24799
+2437 156 24799
+2443 156 19395
+2450 156 45909
+2458 156 20765
+2467 156 53866
+2477 156 22252
+2488 156 26662
+2500 156 55597
+2667 156 27852657
+131 157 1
+2339 157 65520
+2668 157 27852657
+132 158 1
+210 158 24985
+217 158 38044
+225 158 13436
+234 158 19774
+244 158 19774
+631 158 13874
+861 158 44885
+870 158 62795
+880 158 12873
+891 158 6973
+1322 158 42190
+1363 158 47694
+1400 158 52055
+1408 158 44415
+1417 158 62242
+1532 158 3807
+1575 158 31337
+1629 158 11318
+1660 158 8853
+1667 158 6800
+1675 158 3171
+1684 158 43937
+1694 158 27853
+1811 158 30710
+1854 158 36796
+1908 158 18057
+1973 158 14128
+2020 158 48975
+2029 158 45710
+2039 158 5080
+2050 158 25903
+2164 158 2010
+2171 158 37106
+2180 158 5657
+2181 158 5657
+2185 158 19778
+2189 158 19778
+2194 158 19778
+2200 158 764
+2207 158 34257
+2215 158 42151
+2225 158 50439
+2226 158 50439
+2227 158 50439
+2234 158 28631
+2239 158 28631
+2245 158 30049
+2252 158 45191
+2260 158 47482
+2269 158 631
+2280 158 40657
+2281 158 40657
+2282 158 40657
+2285 158 40657
+2294 158 6172
+2300 158 17865
+2307 158 38415
+2315 158 47386
+2324 158 57838
+2334 158 20113
+2346 158 63743
+2347 158 63743
+2348 158 63743
+2351 158 63743
+2355 158 63743
+2366 158 58981
+2373 158 57223
+2381 158 59830
+2390 158 3141
+2400 158 59630
+2411 158 31919
+2424 158 24799
+2425 158 24799
+2426 158 24799
+2429 158 24799
+2433 158 24799
+2438 158 24799
+2444 158 19395
+2451 158 45909
+2459 158 20765
+2468 158 53866
+2478 158 22252
+2489 158 26662
+2501 158 55597
+2669 158 27852657
+132 159 1
+133 159 1
+134 159 1
+135 159 1
+136 159 44189
+137 159 44189
+147 159 28417
+148 159 28417
+150 159 48406
+151 159 48406
+152 159 48406
+153 159 64566
+154 159 28935
+162 159 50267
+176 159 20151
+177 159 20151
+178 159 20151
+180 159 20589
+181 159 20589
+182 159 11607
+183 159 13496
+191 159 6642
+200 159 21896
+215 159 35584
+216 159 35584
+217 159 35584
+218 159 35584
+220 159 32230
+221 159 60649
+222 159 7436
+230 159 58578
+239 159 37988
+249 159 16092
+602 159 16121
+603 159 16121
+604 159 16121
+605 159 16121
+606 159 16121
+608 159 39622
+609 159 38238
+617 159 52556
+626 159 59890
+636 159 12794
+820 159 62223
+1665 159 26657
+1666 159 26657
+1667 159 26657
+1668 159 26657
+1669 159 26657
+1670 159 26657
+1671 159 45433
+1672 159 40293
+1680 159 30897
+1689 159 3659
+1699 159 35978
+1978 159 51521
+2339 159 1310
+2670 159 27852657
+133 160 1
+211 160 24985
+218 160 38044
+226 160 13436
+235 160 19774
+245 160 19774
+632 160 13874
+862 160 44885
+871 160 62795
+881 160 12873
+892 160 6973
+1323 160 42190
+1364 160 47694
+1401 160 52055
+1409 160 44415
+1418 160 62242
+1533 160 3807
+1576 160 31337
+1630 160 11318
+1661 160 8853
+1668 160 6800
+1676 160 3171
+1685 160 43937
+1695 160 27853
+1812 160 30710
+1855 160 36796
+1909 160 18057
+1974 160 14128
+2021 160 48975
+2030 160 45710
+2040 160 5080
+2051 160 25903
+2165 160 2010
+2172 160 37106
+2183 160 5657
+2184 160 5657
+2186 160 19778
+2190 160 19778
+2195 160 19778
+2201 160 764
+2208 160 34257
+2216 160 42151
+2228 160 50439
+2229 160 50439
+2230 160 50439
+2235 160 28631
+2240 160 28631
+2246 160 30049
+2253 160 45191
+2261 160 47482
+2270 160 631
+2283 160 40657
+2284 160 40657
+2285 160 40657
+2286 160 40657
+2295 160 6172
+2301 160 17865
+2308 160 38415
+2316 160 47386
+2325 160 57838
+2335 160 20113
+2349 160 63743
+2350 160 63743
+2351 160 63743
+2352 160 63743
+2356 160 63743
+2367 160 58981
+2374 160 57223
+2382 160 59830
+2391 160 3141
+2401 160 59630
+2412 160 31919
+2427 160 24799
+2428 160 24799
+2429 160 24799
+2430 160 24799
+2434 160 24799
+2439 160 24799
+2445 160 19395
+2452 160 45909
+2460 160 20765
+2469 160 53866
+2479 160 22252
+2490 160 26662
+2502 160 55597
+2671 160 27852657
+133 161 1
+183 161 53696
+192 161 56319
+200 161 29992
+201 161 55032
+202 161 64234
+222 161 40387
+231 161 9894
+241 161 19956
+248 161 19411
+249 161 41046
+250 161 50716
+251 161 4144
+252 161 48422
+609 161 49468
+618 161 18098
+628 161 52392
+639 161 27416
+821 161 57582
+822 161 32856
+823 161 9947
+888 161 30953
+1662 161 60295
+1668 161 55144
+1669 161 27352
+1670 161 22746
+1671 161 11115
+1672 161 60667
+1673 161 45657
+1674 161 46543
+1676 161 4381
+1677 161 46699
+1678 161 7949
+1679 161 16240
+1680 161 23510
+1681 161 58609
+1682 161 60379
+1683 161 9775
+1684 161 9775
+1686 161 36276
+1687 161 16890
+1688 161 59726
+1689 161 18418
+1690 161 28237
+1691 161 35078
+1692 161 41569
+1693 161 6112
+1694 161 6112
+1695 161 13899
+1697 161 53893
+1698 161 59826
+1699 161 17273
+1700 161 40150
+1701 161 50053
+1702 161 38679
+1971 161 52977
+1972 161 59995
+1973 161 59995
+1974 161 30176
+1975 161 26643
+1977 161 5833
+1978 161 49812
+1979 161 52336
+1980 161 32276
+1981 161 26980
+2047 161 19360
+2332 161 16012
+2333 161 48967
+2334 161 48967
+2335 161 54282
+2336 161 11691
+2337 161 43009
+2338 161 10524
+2339 161 64391
+2340 161 15403
+2341 161 20355
+2342 161 62671
+2408 161 23934
+2486 161 53866
+2672 161 27852657
+134 162 1
+212 162 24985
+219 162 38044
+227 162 13436
+236 162 19774
+246 162 19774
+633 162 13874
+863 162 44885
+872 162 62795
+882 162 12873
+893 162 6973
+1324 162 42190
+1365 162 47694
+1402 162 52055
+1410 162 44415
+1419 162 62242
+1534 162 3807
+1577 162 31337
+1631 162 11318
+1662 162 8853
+1669 162 6800
+1677 162 3171
+1686 162 43937
+1696 162 27853
+1813 162 30710
+1856 162 36796
+1910 162 18057
+1975 162 14128
+2022 162 48975
+2031 162 45710
+2041 162 5080
+2052 162 25903
+2166 162 2010
+2173 162 37106
+2187 162 5657
+2188 162 5657
+2190 162 19778
+2191 162 19778
+2196 162 19778
+2202 162 764
+2209 162 34257
+2217 162 42151
+2232 162 50439
+2233 162 50439
+2234 162 50439
+2236 162 28631
+2241 162 28631
+2247 162 30049
+2254 162 45191
+2262 162 47482
+2271 162 631
+2287 162 40657
+2288 162 40657
+2289 162 40657
+2290 162 40657
+2296 162 6172
+2302 162 17865
+2309 162 38415
+2317 162 47386
+2326 162 57838
+2336 162 20113
+2353 162 63743
+2354 162 63743
+2355 162 63743
+2356 162 63743
+2357 162 63743
+2368 162 58981
+2375 162 57223
+2383 162 59830
+2392 162 3141
+2402 162 59630
+2413 162 31919
+2431 162 24799
+2432 162 24799
+2433 162 24799
+2434 162 24799
+2435 162 24799
+2440 162 24799
+2446 162 19395
+2453 162 45909
+2461 162 20765
+2470 162 53866
+2480 162 22252
+2491 162 26662
+2503 162 55597
+2673 162 27852657
+134 163 1
+183 163 31297
+192 163 24706
+200 163 7915
+201 163 60674
+202 163 35968
+222 163 58147
+231 163 25199
+241 163 37141
+248 163 2043
+249 163 26774
+250 163 55059
+251 163 47831
+252 163 46658
+609 163 285
+618 163 16939
+628 163 53889
+639 163 32237
+821 163 547
+822 163 5921
+823 163 62893
+888 163 11793
+1662 163 38973
+1669 163 27290
+1670 163 59243
+1671 163 64740
+1672 163 15199
+1673 163 49296
+1674 163 56265
+1676 163 26992
+1677 163 1811
+1678 163 51482
+1679 163 55438
+1680 163 41260
+1681 163 64516
+1682 163 24016
+1683 163 14078
+1684 163 14078
+1686 163 53625
+1687 163 34407
+1688 163 31338
+1689 163 65247
+1690 163 28114
+1691 163 23571
+1692 163 41362
+1693 163 12794
+1694 163 12794
+1695 163 12794
+1697 163 44026
+1698 163 64155
+1699 163 17202
+1700 163 60743
+1701 163 22902
+1702 163 46518
+1971 163 56637
+1972 163 21026
+1973 163 21026
+1974 163 21026
+1975 163 32910
+1977 163 42548
+1978 163 55098
+1979 163 24461
+1980 163 54115
+1981 163 10166
+2047 163 21567
+2332 163 5068
+2333 163 21647
+2334 163 21647
+2335 163 21647
+2336 163 52446
+2337 163 19333
+2338 163 17961
+2339 163 1072
+2340 163 10805
+2341 163 986
+2342 163 33937
+2408 163 63163
+2486 163 11486
+2674 163 27852657
+135 164 1
+213 164 24985
+220 164 38044
+228 164 13436
+237 164 19774
+247 164 19774
+634 164 13874
+864 164 44885
+873 164 62795
+883 164 12873
+894 164 6973
+1325 164 42190
+1366 164 47694
+1403 164 52055
+1411 164 44415
+1420 164 62242
+1535 164 3807
+1578 164 31337
+1632 164 11318
+1663 164 8853
+1670 164 6800
+1678 164 3171
+1687 164 43937
+1697 164 27853
+1814 164 30710
+1857 164 36796
+1911 164 18057
+1976 164 14128
+2023 164 48975
+2032 164 45710
+2042 164 5080
+2053 164 25903
+2167 164 2010
+2174 164 37106
+2192 164 5657
+2193 164 5657
+2195 164 19778
+2196 164 19778
+2197 164 19778
+2203 164 764
+2210 164 34257
+2218 164 42151
+2237 164 50439
+2238 164 50439
+2239 164 50439
+2241 164 28631
+2242 164 28631
+2248 164 30049
+2255 164 45191
+2263 164 47482
+2272 164 631
+2292 164 40657
+2293 164 40657
+2294 164 40657
+2295 164 40657
+2297 164 6172
+2303 164 17865
+2310 164 38415
+2318 164 47386
+2327 164 57838
+2337 164 20113
+2358 164 63743
+2359 164 63743
+2360 164 63743
+2361 164 63743
+2362 164 63743
+2369 164 58981
+2376 164 57223
+2384 164 59830
+2393 164 3141
+2403 164 59630
+2414 164 31919
+2436 164 24799
+2437 164 24799
+2438 164 24799
+2439 164 24799
+2440 164 24799
+2441 164 24799
+2447 164 19395
+2454 164 45909
+2462 164 20765
+2471 164 53866
+2481 164 22252
+2492 164 26662
+2504 164 55597
+2675 164 27852657
+135 165 1
+154 165 25422
+163 165 40099
+183 165 19231
+192 165 45046
+200 165 40359
+201 165 56914
+202 165 51967
+222 165 19231
+231 165 13529
+241 165 54886
+247 165 26258
+248 165 28062
+249 165 53224
+250 165 27227
+251 165 37668
+252 165 34749
+609 165 61933
+618 165 40722
+628 165 56305
+639 165 4764
+820 165 57426
+821 165 51354
+822 165 25609
+823 165 39735
+888 165 4199
+1670 165 33803
+1671 165 45768
+1672 165 46477
+1673 165 46507
+1674 165 46507
+1676 165 21015
+1677 165 21015
+1678 165 30307
+1679 165 15669
+1680 165 19254
+1681 165 39201
+1682 165 3217
+1683 165 3217
+1684 165 3217
+1686 165 14556
+1687 165 29912
+1688 165 40685
+1689 165 36539
+1690 165 43628
+1691 165 18455
+1692 165 47817
+1693 165 47817
+1694 165 47817
+1695 165 47817
+1697 165 51346
+1698 165 58266
+1699 165 58646
+1700 165 14046
+1701 165 9426
+1702 165 20658
+1971 165 51564
+1972 165 51564
+1973 165 51564
+1974 165 51564
+1975 165 51564
+1977 165 62812
+1978 165 55074
+1979 165 23903
+1980 165 48824
+1981 165 39560
+2047 165 24219
+2332 165 59167
+2333 165 59167
+2334 165 59167
+2335 165 59167
+2336 165 59167
+2337 165 59167
+2338 165 61666
+2339 165 46411
+2340 165 44944
+2341 165 50567
+2342 165 28842
+2408 165 57884
+2486 165 38063
+2676 165 27852657
+136 166 1
+214 166 24985
+221 166 38044
+229 166 13436
+238 166 19774
+248 166 19774
+635 166 13874
+865 166 44885
+874 166 62795
+884 166 12873
+895 166 6973
+1326 166 42190
+1367 166 47694
+1404 166 52055
+1412 166 44415
+1421 166 62242
+1536 166 3807
+1579 166 31337
+1633 166 11318
+1664 166 8853
+1671 166 6800
+1679 166 3171
+1688 166 43937
+1698 166 27853
+1815 166 30710
+1858 166 36796
+1912 166 18057
+1977 166 14128
+2024 166 48975
+2033 166 45710
+2043 166 5080
+2054 166 25903
+2168 166 2010
+2175 166 37106
+2198 166 5657
+2199 166 5657
+2201 166 19778
+2202 166 19778
+2203 166 19778
+2204 166 764
+2211 166 34257
+2219 166 42151
+2243 166 50439
+2244 166 50439
+2245 166 50439
+2247 166 28631
+2248 166 28631
+2249 166 30049
+2256 166 45191
+2264 166 47482
+2273 166 631
+2298 166 40657
+2299 166 40657
+2300 166 40657
+2301 166 40657
+2303 166 6172
+2304 166 17865
+2311 166 38415
+2319 166 47386
+2328 166 57838
+2338 166 20113
+2364 166 63743
+2365 166 63743
+2366 166 63743
+2367 166 63743
+2368 166 63743
+2370 166 58981
+2377 166 57223
+2385 166 59830
+2394 166 3141
+2404 166 59630
+2415 166 31919
+2442 166 24799
+2443 166 24799
+2444 166 24799
+2445 166 24799
+2446 166 24799
+2447 166 24799
+2448 166 19395
+2455 166 45909
+2463 166 20765
+2472 166 53866
+2482 166 22252
+2493 166 26662
+2505 166 55597
+2677 166 27852657
+136 167 1
+137 167 1
+154 167 52614
+163 167 12908
+183 167 8375
+192 167 22302
+200 167 3211
+201 167 28851
+202 167 19457
+222 167 8375
+231 167 3673
+241 167 11394
+247 167 31908
+248 167 18031
+249 167 14820
+250 167 28606
+251 167 21710
+252 167 29773
+609 167 60952
+618 167 60925
+628 167 45598
+639 167 15387
+820 167 44262
+821 167 25788
+822 167 63250
+823 167 40254
+888 167 54640
+1671 167 57144
+1672 167 39485
+1673 167 37898
+1674 167 37898
+1676 167 16172
+1677 167 16172
+1678 167 16172
+1679 167 32528
+1680 167 32100
+1681 167 10243
+1682 167 49357
+1683 167 49357
+1684 167 49357
+1686 167 35844
+1687 167 35844
+1688 167 54643
+1689 167 7389
+1690 167 39607
+1691 167 35292
+1692 167 46693
+1693 167 46693
+1694 167 46693
+1695 167 46693
+1697 167 7396
+1698 167 53283
+1699 167 65095
+1700 167 51787
+1701 167 51563
+1702 167 50936
+1971 167 30086
+1972 167 30086
+1973 167 30086
+1974 167 30086
+1975 167 30086
+1977 167 64190
+1978 167 21515
+1979 167 42370
+1980 167 47556
+1981 167 1859
+2047 167 41296
+2332 167 1355
+2333 167 1355
+2334 167 1355
+2335 167 1355
+2336 167 1355
+2337 167 1355
+2338 167 41719
+2339 167 41437
+2340 167 64993
+2341 167 54008
+2342 167 56266
+2408 167 10091
+2486 167 24686
+2678 167 27852657
+137 168 1
+221 168 24985
+222 168 38044
+230 168 13436
+239 168 19774
+249 168 19774
+636 168 13874
+866 168 44885
+875 168 62795
+885 168 12873
+896 168 6973
+1327 168 42190
+1368 168 47694
+1405 168 52055
+1413 168 44415
+1422 168 62242
+1537 168 3807
+1580 168 31337
+1634 168 11318
+1671 168 8853
+1672 168 6800
+1680 168 3171
+1689 168 43937
+1699 168 27853
+1816 168 30710
+1859 168 36796
+1913 168 18057
+1978 168 14128
+2025 168 48975
+2034 168 45710
+2044 168 5080
+2055 168 25903
+2175 168 2010
+2176 168 37106
+2205 168 5657
+2206 168 5657
+2208 168 19778
+2209 168 19778
+2210 168 19778
+2211 168 764
+2212 168 34257
+2220 168 42151
+2250 168 50439
+2251 168 50439
+2252 168 50439
+2254 168 28631
+2255 168 28631
+2256 168 30049
+2257 168 45191
+2265 168 47482
+2274 168 631
+2305 168 40657
+2306 168 40657
+2307 168 40657
+2308 168 40657
+2310 168 6172
+2311 168 17865
+2312 168 38415
+2320 168 47386
+2329 168 57838
+2339 168 20113
+2371 168 63743
+2372 168 63743
+2373 168 63743
+2374 168 63743
+2375 168 63743
+2377 168 58981
+2378 168 57223
+2386 168 59830
+2395 168 3141
+2405 168 59630
+2416 168 31919
+2449 168 24799
+2450 168 24799
+2451 168 24799
+2452 168 24799
+2453 168 24799
+2454 168 24799
+2455 168 19395
+2456 168 45909
+2464 168 20765
+2473 168 53866
+2483 168 22252
+2494 168 26662
+2506 168 55597
+2679 168 27852657
+138 169 1
+2317 169 65520
+2680 169 27852657
+139 170 1
+1674 170 46993
+1675 170 49307
+1678 170 53855
+1679 170 15705
+1680 170 15705
+1681 170 15705
+1690 170 15705
+1700 170 15705
+1979 170 32371
+2025 170 52969
+2026 170 64255
+2035 170 5322
+2045 170 27991
+2056 170 11325
+2202 170 25785
+2208 170 44280
+2209 170 28170
+2210 170 46115
+2211 170 62083
+2212 170 62083
+2213 170 2105
+2214 170 29275
+2216 170 46530
+2217 170 11233
+2218 170 64654
+2219 170 46560
+2220 170 17125
+2221 170 20563
+2258 170 8616
+2259 170 37130
+2260 170 52447
+2262 170 1016
+2263 170 19217
+2264 170 16271
+2265 170 26932
+2266 170 46830
+2275 170 26267
+2313 170 32725
+2314 170 44614
+2315 170 30171
+2316 170 4043
+2318 170 31068
+2319 170 40843
+2320 170 35279
+2321 170 2272
+2330 170 22147
+2340 170 40301
+2379 170 15731
+2380 170 51058
+2381 170 2247
+2382 170 40472
+2383 170 31767
+2385 170 54269
+2386 170 45630
+2387 170 55657
+2396 170 8056
+2406 170 48780
+2417 170 5433
+2457 170 50761
+2458 170 7380
+2459 170 58203
+2460 170 19626
+2461 170 64086
+2462 170 41368
+2463 170 61213
+2464 170 57749
+2465 170 37493
+2474 170 19675
+2484 170 58052
+2495 170 65294
+2507 170 6491
+2681 170 27852657
+140 171 1
+2340 171 65520
+2682 171 27852657
+141 172 1
+142 172 1
+143 172 1
+144 172 1
+145 172 1
+149 172 1
+150 172 1
+151 172 1
+152 172 1
+158 172 1
+159 172 1
+160 172 1
+188 172 1
+189 172 1
+228 172 1
+1679 172 32761
+1680 172 32761
+1681 172 32761
+1690 172 32761
+1700 172 32761
+1979 172 32761
+2340 172 24573
+2683 172 27852657
+142 173 1
+528 173 1024
+529 173 14431
+534 173 32504
+564 173 5456
+566 173 60601
+568 173 20152
+569 173 20152
+578 173 20152
+610 173 31789
+611 173 31789
+612 173 48671
+613 173 24455
+616 173 37521
+617 173 53384
+618 173 53384
+627 173 8015
+637 173 53384
+794 173 31789
+795 173 31789
+796 173 48671
+797 173 24455
+798 173 57267
+800 173 37521
+801 173 53384
+802 173 53384
+811 173 8015
+821 173 41247
+886 173 53384
+1560 173 9206
+1561 173 8747
+1562 173 2436
+1563 173 62497
+1567 173 46940
+1568 173 489
+1569 173 59699
+1570 173 35861
+1571 173 48492
+1572 173 48492
+1573 173 20056
+1574 173 20056
+1576 173 16344
+1577 173 43231
+1578 173 11764
+1579 173 18475
+1580 173 4060
+1581 173 21089
+1618 173 15848
+1619 173 15848
+1620 173 16782
+1622 173 48601
+1623 173 39078
+1624 173 39072
+1625 173 62831
+1626 173 58414
+1635 173 37325
+1673 173 14959
+1674 173 14959
+1675 173 56504
+1676 173 37309
+1678 173 5883
+1679 173 19640
+1680 173 61218
+1681 173 43903
+1690 173 49808
+1700 173 12483
+1952 173 2649
+1953 173 2649
+1954 173 13490
+1955 173 26116
+1956 173 20158
+1958 173 1131
+1959 173 3539
+1960 173 186
+1969 173 26104
+1979 173 25306
+2045 173 12823
+2313 173 14375
+2314 173 14375
+2315 173 19164
+2316 173 5806
+2317 173 26379
+2318 173 61858
+2319 173 20081
+2320 173 59834
+2321 173 28443
+2330 173 763
+2340 173 54895
+2406 173 22479
+2484 173 43649
+2684 173 27852657
+143 174 1
+144 174 1
+145 174 1
+150 174 1
+151 174 1
+152 174 1
+158 174 1
+159 174 1
+160 174 1
+173 174 1
+174 174 1
+180 174 1
+181 174 1
+188 174 2
+189 174 2
+197 174 1
+198 174 1
+213 174 1
+220 174 1
+228 174 2
+237 174 2
+247 174 1
+1679 174 32761
+1680 174 32761
+1681 174 32761
+1688 174 32761
+1689 174 32761
+1690 174 1
+1691 174 32761
+1698 174 32761
+1699 174 32761
+1700 174 1
+1701 174 1
+1702 174 32761
+1977 174 32761
+1978 174 32761
+1979 174 1
+1980 174 1
+1981 174 1
+2047 174 32761
+2338 174 24572
+2339 174 24572
+2340 174 49144
+2341 174 49143
+2342 174 49142
+2408 174 49141
+2486 174 8190
+2685 174 27852657
+144 175 1
+606 175 64069
+614 175 46153
+621 175 7544
+623 175 30717
+626 175 8811
+627 175 8811
+628 175 8811
+629 175 28721
+630 175 28721
+631 175 36265
+632 175 36265
+635 175 55912
+636 175 45654
+637 175 45654
+638 175 54465
+639 175 45654
+813 175 28721
+814 175 28721
+815 175 36265
+816 175 36265
+817 175 16897
+819 175 55912
+820 175 45654
+821 175 45654
+822 175 54465
+823 175 25787
+888 175 45654
+1662 175 34048
+1663 175 2776
+1667 175 2667
+1668 175 2667
+1669 175 8049
+1670 175 21517
+1671 175 19737
+1672 175 19737
+1673 175 45287
+1674 175 45287
+1676 175 21386
+1677 175 31351
+1678 175 54760
+1679 175 16983
+1680 175 36407
+1681 175 16670
+1682 175 3480
+1683 175 3480
+1684 175 15739
+1686 175 63277
+1687 175 25186
+1688 175 17882
+1689 175 33778
+1690 175 21182
+1691 175 4512
+1692 175 28271
+1693 175 28271
+1694 175 40530
+1695 175 40530
+1697 175 33219
+1698 175 25749
+1699 175 30147
+1700 175 3360
+1701 175 30519
+1702 175 26007
+1971 175 40990
+1972 175 40990
+1973 175 16245
+1974 175 16245
+1975 175 22819
+1977 175 43218
+1978 175 6234
+1979 175 61233
+1980 175 39505
+1981 175 2897
+2047 175 42411
+2332 175 18184
+2333 175 18184
+2334 175 33857
+2335 175 33857
+2336 175 55315
+2337 175 35587
+2338 175 53281
+2339 175 11222
+2340 175 48067
+2341 175 59904
+2342 175 33397
+2408 175 33414
+2486 175 24098
+2686 175 27852657
+145 176 1
+152 176 1
+160 176 1
+174 176 1
+181 176 1
+189 176 2
+198 176 1
+213 176 1
+220 176 1
+228 176 2
+237 176 2
+247 176 1
+560 176 1
+566 176 1
+574 176 1
+1614 176 32761
+1615 176 32761
+1622 176 32761
+1623 176 32761
+1631 176 32761
+1632 176 32761
+1670 176 32761
+1678 176 32761
+1679 176 32761
+1680 176 32761
+1681 176 32761
+1687 176 1
+1688 176 32761
+1689 176 32761
+1690 176 1
+1691 176 32761
+1697 176 32761
+1698 176 32761
+1699 176 32761
+1700 176 1
+1701 176 1
+1702 176 32761
+1958 176 32761
+1959 176 32761
+1960 176 32761
+1967 176 32761
+1968 176 32761
+1969 176 1
+1970 176 32761
+1977 176 1
+1978 176 1
+1979 176 2
+1980 176 2
+1981 176 32762
+2043 176 32761
+2044 176 32761
+2045 176 1
+2046 176 1
+2047 176 32762
+2058 176 32761
+2311 176 1
+2312 176 1
+2319 176 24572
+2320 176 24572
+2321 176 24571
+2328 176 24572
+2329 176 49143
+2330 176 8193
+2331 176 49143
+2338 176 49143
+2339 176 8193
+2340 176 57335
+2341 176 16385
+2342 176 32763
+2404 176 49142
+2405 176 8192
+2406 176 57333
+2407 176 16383
+2408 176 2
+2419 176 32761
+2482 176 40951
+2483 176 12286
+2484 176 20476
+2485 176 57332
+2486 176 32761
+2509 176 4095
+2687 176 27852657
+146 177 1
+229 177 15581
+230 177 12923
+231 177 63964
+240 177 26595
+250 177 26595
+637 177 61605
+867 177 20990
+876 177 65061
+886 177 51249
+897 177 20738
+1360 177 42190
+1369 177 23331
+1413 177 62933
+1414 177 38228
+1423 177 14897
+1564 177 58979
+1572 177 10349
+1581 177 55172
+1635 177 43566
+1679 177 61581
+1680 177 39942
+1681 177 3649
+1690 177 42365
+1700 177 57720
+1843 177 56675
+1851 177 39556
+1860 177 25965
+1914 177 56910
+1979 177 48866
+2026 177 33474
+2035 177 18140
+2045 177 55805
+2056 177 12628
+2204 177 30744
+2211 177 49866
+2212 177 54218
+2213 177 13861
+2214 177 13861
+2216 177 13278
+2217 177 13278
+2218 177 13278
+2219 177 63495
+2220 177 11935
+2221 177 23238
+2258 177 19347
+2259 177 19347
+2260 177 19347
+2262 177 36639
+2263 177 36639
+2264 177 1556
+2265 177 22841
+2266 177 11104
+2275 177 38529
+2313 177 3857
+2314 177 3857
+2315 177 3857
+2316 177 3857
+2318 177 38649
+2319 177 7350
+2320 177 10123
+2321 177 10896
+2330 177 21396
+2340 177 52946
+2379 177 51667
+2380 177 51667
+2381 177 51667
+2382 177 51667
+2383 177 51667
+2385 177 16915
+2386 177 13512
+2387 177 32962
+2396 177 48472
+2406 177 38304
+2417 177 12684
+2457 177 44722
+2458 177 44722
+2459 177 44722
+2460 177 44722
+2461 177 44722
+2462 177 44722
+2463 177 27538
+2464 177 14665
+2465 177 53537
+2474 177 1504
+2484 177 14516
+2495 177 14904
+2507 177 62175
+2688 177 27852657
+146 178 1
+154 178 65520
+163 178 1
+175 178 4962
+183 178 60559
+192 178 16366
+200 178 12295
+201 178 19884
+202 178 3519
+214 178 19012
+222 178 46509
+231 178 4083
+241 178 58649
+247 178 3428
+248 178 45574
+249 178 33279
+250 178 32018
+251 178 56752
+252 178 1622
+601 178 41192
+609 178 24329
+618 178 16329
+628 178 29787
+639 178 4541
+820 178 52803
+821 178 47349
+822 178 60694
+823 178 45687
+888 178 42768
+1664 178 56906
+1671 178 61580
+1672 178 4674
+1673 178 64750
+1674 178 64750
+1676 178 35833
+1677 178 35833
+1678 178 35833
+1679 178 53367
+1680 178 44210
+1681 178 9259
+1682 178 33015
+1683 178 33015
+1684 178 33015
+1686 178 62615
+1687 178 62615
+1688 178 14532
+1689 178 3041
+1690 178 31828
+1691 178 15027
+1692 178 19048
+1693 178 19048
+1694 178 19048
+1695 178 19048
+1697 178 788
+1698 178 60866
+1699 178 42541
+1700 178 64445
+1701 178 34502
+1702 178 15078
+1971 178 37074
+1972 178 37074
+1973 178 37074
+1974 178 37074
+1975 178 37074
+1977 178 24216
+1978 178 10050
+1979 178 55461
+1980 178 64824
+1981 178 24456
+2047 178 24044
+2332 178 65222
+2333 178 65222
+2334 178 65222
+2335 178 65222
+2336 178 65222
+2337 178 65222
+2338 178 28920
+2339 178 19260
+2340 178 59239
+2341 178 29558
+2342 178 44332
+2408 178 54208
+2486 178 62838
+2689 178 27852657
+147 179 1
+155 179 1
+156 179 1
+184 179 1
+185 179 1
+186 179 1
+223 179 1
+224 179 1
+225 179 1
+226 179 1
+610 179 1
+611 179 1
+612 179 1
+613 179 1
+614 179 1
+1673 179 32761
+1674 179 32761
+1675 179 32761
+1676 179 32761
+1677 179 32761
+1678 179 32761
+2340 179 24573
+2690 179 27852657
+148 180 1
+2340 180 65520
+2691 180 27852657
+149 181 1
+528 181 8829
+529 181 50823
+534 181 19605
+564 181 28867
+566 181 37932
+568 181 42040
+569 181 42040
+578 181 42040
+610 181 9012
+611 181 9012
+612 181 37879
+613 181 15867
+616 181 58851
+617 181 38591
+618 181 38591
+627 181 15110
+637 181 38591
+794 181 9012
+795 181 9012
+796 181 37879
+797 181 15867
+798 181 61742
+800 181 58851
+801 181 38591
+802 181 38591
+811 181 15110
+821 181 11661
+886 181 38591
+1561 181 20547
+1562 181 32389
+1563 181 59025
+1567 181 36639
+1568 181 29869
+1569 181 41711
+1570 181 25664
+1571 181 13104
+1572 181 13104
+1573 181 59774
+1574 181 59774
+1576 181 49020
+1577 181 28189
+1578 181 34671
+1579 181 2455
+1580 181 64672
+1581 181 51568
+1618 181 47606
+1619 181 47606
+1620 181 37184
+1622 181 143
+1623 181 53704
+1624 181 43721
+1625 181 14241
+1626 181 12712
+1635 181 26665
+1673 181 39411
+1674 181 39411
+1675 181 28989
+1676 181 59010
+1678 181 61177
+1679 181 3701
+1680 181 10356
+1681 181 44650
+1690 181 59032
+1700 181 32367
+1952 181 10250
+1953 181 10250
+1954 181 28636
+1955 181 28426
+1956 181 1026
+1958 181 64366
+1959 181 15565
+1960 181 60474
+1969 181 53312
+1979 181 54954
+2045 181 22587
+2313 181 3350
+2314 181 3350
+2315 181 51832
+2316 181 61666
+2317 181 26468
+2318 181 6558
+2319 181 60678
+2320 181 52680
+2321 181 35538
+2330 181 63895
+2340 181 38413
+2406 181 62837
+2484 181 10398
+2692 181 27852657
+150 182 1
+158 182 1
+528 182 1
+529 182 1
+533 182 1
+534 182 1
+566 182 1
+1568 182 32761
+1569 182 32761
+1570 182 32761
+1576 182 32761
+1577 182 32761
+1578 182 32761
+1622 182 32761
+1623 182 32761
+1678 182 32761
+2320 182 24572
+2321 182 24572
+2329 182 1
+2330 182 24572
+2339 182 1
+2340 182 24572
+2405 182 1
+2406 182 24572
+2483 182 32761
+2484 182 4096
+2693 182 27852657
+151 183 1
+159 183 1
+197 183 65520
+606 183 32763
+614 183 2
+623 183 32078
+626 183 17260
+627 183 17260
+628 183 17260
+629 183 57776
+630 183 57776
+631 183 57776
+632 183 57776
+635 183 60040
+636 183 3969
+637 183 3969
+638 183 21229
+639 183 3969
+813 183 57776
+814 183 57776
+815 183 57776
+816 183 57776
+817 183 57776
+819 183 60040
+820 183 3969
+821 183 3969
+822 183 21229
+823 183 7938
+888 183 3969
+1663 183 5562
+1667 183 60245
+1668 183 60245
+1669 183 23390
+1670 183 26502
+1671 183 43980
+1672 183 43980
+1673 183 23087
+1674 183 23087
+1676 183 1015
+1677 183 33776
+1678 183 42974
+1679 183 2925
+1680 183 20482
+1681 183 42023
+1682 183 61794
+1683 183 61794
+1684 183 61794
+1686 183 12265
+1687 183 62820
+1688 183 37279
+1689 183 32199
+1690 183 28174
+1691 183 51672
+1692 183 50036
+1693 183 50036
+1694 183 50036
+1695 183 50036
+1697 183 62036
+1698 183 4393
+1699 183 21597
+1700 183 10389
+1701 183 55329
+1702 183 3657
+1971 183 7565
+1972 183 7565
+1973 183 7565
+1974 183 7565
+1975 183 7565
+1977 183 3802
+1978 183 64498
+1979 183 7594
+1980 183 62861
+1981 183 59495
+2047 183 55838
+2332 183 21126
+2333 183 21126
+2334 183 21126
+2335 183 21126
+2336 183 21126
+2337 183 20199
+2338 183 31539
+2339 183 31176
+2340 183 16602
+2341 183 58629
+2342 183 39386
+2408 183 20852
+2486 183 33382
+2694 183 27852657
+152 184 1
+160 184 1
+198 184 65520
+247 184 1
+623 184 61157
+626 184 20292
+627 184 20292
+628 184 20292
+629 184 24464
+630 184 24464
+631 184 24464
+632 184 24464
+635 184 2480
+636 184 21631
+637 184 21631
+638 184 41923
+639 184 21631
+813 184 24464
+814 184 24464
+815 184 24464
+816 184 24464
+817 184 24464
+819 184 2480
+820 184 21631
+821 184 21631
+822 184 41923
+823 184 43262
+888 184 21631
+1663 184 59959
+1667 184 10717
+1668 184 10717
+1669 184 10717
+1670 184 7605
+1671 184 21541
+1672 184 21541
+1673 184 37501
+1674 184 37501
+1676 184 28283
+1677 184 28283
+1678 184 19085
+1679 184 62596
+1680 184 12376
+1681 184 56356
+1682 184 32262
+1683 184 32262
+1684 184 32262
+1686 184 38568
+1687 184 53534
+1688 184 28242
+1689 184 14563
+1690 184 5428
+1691 184 14593
+1692 184 49166
+1693 184 49166
+1694 184 49166
+1695 184 49166
+1697 184 4960
+1698 184 43122
+1699 184 51625
+1700 184 27349
+1701 184 41924
+1702 184 27331
+1971 184 32489
+1972 184 32489
+1973 184 32489
+1974 184 32489
+1975 184 32489
+1977 184 32272
+1978 184 50003
+1979 184 52103
+1980 184 17083
+1981 184 65101
+2047 184 37770
+2332 184 48991
+2333 184 48991
+2334 184 48991
+2335 184 48991
+2336 184 48991
+2337 184 49918
+2338 184 33982
+2339 184 45726
+2340 184 51649
+2341 184 611
+2342 184 21845
+2408 184 24381
+2486 184 1841
+2695 184 27852657
+153 185 1
+154 185 1
+162 185 1
+182 185 1
+183 185 1
+191 185 2
+200 185 1
+221 185 1
+222 185 1
+229 185 18616
+230 185 18618
+231 185 18616
+238 185 18616
+239 185 18618
+240 185 37232
+241 185 18616
+248 185 18616
+249 185 18617
+250 185 37232
+251 185 37232
+252 185 18616
+536 185 65520
+537 185 65520
+538 185 65520
+562 185 18286
+567 185 65519
+568 185 48125
+569 185 29838
+576 185 65520
+577 185 48126
+578 185 59679
+579 185 29840
+609 185 18286
+617 185 48128
+618 185 29840
+626 185 19509
+627 185 42616
+628 185 12776
+636 185 36903
+637 185 1552
+638 185 20168
+639 185 37232
+793 185 18286
+800 185 46906
+801 185 29512
+802 185 11225
+809 185 46906
+811 185 4493
+812 185 58789
+820 185 7390
+821 185 11885
+822 185 48224
+823 185 54955
+884 185 18616
+885 185 54625
+886 185 47565
+887 185 65288
+888 185 7157
+899 185 36339
+1536 185 64721
+1537 185 64721
+1572 185 64721
+1579 185 40442
+1580 185 41146
+1581 185 41146
+1616 185 1758
+1617 185 47103
+1624 185 24795
+1625 185 33571
+1626 185 8665
+1633 185 49874
+1634 185 57946
+1635 185 24934
+1636 185 57415
+1672 185 45345
+1680 185 53373
+1681 185 14582
+1689 185 51947
+1690 185 36952
+1691 185 22370
+1698 185 14044
+1699 185 57919
+1700 185 62309
+1701 185 53828
+1702 185 23352
+1951 185 25919
+1958 185 25847
+1960 185 46156
+1965 185 43906
+1967 185 14675
+1968 185 962
+1969 185 20337
+1970 185 39702
+1971 185 35644
+1972 185 35644
+1973 185 35644
+1974 185 35644
+1977 185 45404
+1978 185 16468
+1979 185 13347
+1980 185 63011
+1981 185 34819
+2037 185 35644
+2038 185 35644
+2039 185 35644
+2040 185 35644
+2041 185 35644
+2043 185 32738
+2044 185 64942
+2045 185 57431
+2046 185 23265
+2047 185 18323
+2058 185 6856
+2307 185 50863
+2308 185 50863
+2309 185 50863
+2310 185 50863
+2311 185 31602
+2312 185 49963
+2313 185 63520
+2314 185 63520
+2316 185 40713
+2317 185 40713
+2318 185 40713
+2319 185 62641
+2320 185 64843
+2321 185 4357
+2322 185 44156
+2323 185 44156
+2324 185 44156
+2326 185 46101
+2327 185 46101
+2328 185 57847
+2329 185 58862
+2330 185 35252
+2331 185 30895
+2332 185 5321
+2333 185 5321
+2334 185 5321
+2335 185 5321
+2337 185 26764
+2338 185 55693
+2339 185 31728
+2340 185 49334
+2341 185 8206
+2342 185 63815
+2398 185 45933
+2399 185 45933
+2400 185 45933
+2401 185 45933
+2402 185 45933
+2404 185 7787
+2405 185 22676
+2406 185 51404
+2407 185 19873
+2408 185 41222
+2419 185 29365
+2476 185 28774
+2477 185 28774
+2478 185 28774
+2479 185 28774
+2480 185 28774
+2481 185 28774
+2482 185 42597
+2483 185 51791
+2484 185 29222
+2485 185 5509
+2486 185 15672
+2497 185 51068
+2509 185 63916
+2696 185 27852657
+154 186 1
+229 186 24985
+230 186 38044
+231 186 13436
+240 186 19774
+250 186 19774
+637 186 13874
+867 186 44885
+876 186 62795
+886 186 12873
+897 186 6973
+1360 186 42190
+1369 186 47694
+1413 186 52055
+1414 186 44415
+1423 186 62242
+1572 186 3807
+1581 186 31337
+1635 186 11318
+1679 186 8853
+1680 186 6800
+1681 186 3171
+1690 186 43937
+1700 186 27853
+1851 186 30710
+1860 186 36796
+1914 186 18057
+1979 186 14128
+2026 186 48975
+2035 186 45710
+2045 186 5080
+2056 186 25903
+2211 186 2010
+2212 186 37106
+2213 186 5657
+2214 186 5657
+2216 186 19778
+2217 186 19778
+2218 186 19778
+2219 186 764
+2220 186 34257
+2221 186 42151
+2258 186 50439
+2259 186 50439
+2260 186 50439
+2262 186 28631
+2263 186 28631
+2264 186 30049
+2265 186 45191
+2266 186 47482
+2275 186 631
+2313 186 40657
+2314 186 40657
+2315 186 40657
+2316 186 40657
+2318 186 6172
+2319 186 17865
+2320 186 38415
+2321 186 47386
+2330 186 57838
+2340 186 20113
+2379 186 63743
+2380 186 63743
+2381 186 63743
+2382 186 63743
+2383 186 63743
+2385 186 58981
+2386 186 57223
+2387 186 59830
+2396 186 3141
+2406 186 59630
+2417 186 31919
+2457 186 24799
+2458 186 24799
+2459 186 24799
+2460 186 24799
+2461 186 24799
+2462 186 24799
+2463 186 19395
+2464 186 45909
+2465 186 20765
+2474 186 53866
+2484 186 22252
+2495 186 26662
+2507 186 55597
+2697 186 27852657
+154 187 1
+163 187 65520
+183 187 19564
+192 187 34553
+200 187 3054
+201 187 35516
+202 187 962
+222 187 2437
+231 187 12492
+241 187 47199
+248 187 158
+249 187 27163
+250 187 65043
+251 187 42951
+252 187 62235
+609 187 55965
+618 187 34419
+628 187 54979
+639 187 62432
+821 187 20529
+822 187 65094
+823 187 30005
+888 187 29808
+1671 187 24352
+1672 187 40940
+1673 187 19610
+1674 187 19610
+1676 187 44291
+1677 187 44291
+1678 187 44291
+1679 187 42662
+1680 187 34816
+1681 187 24153
+1682 187 21231
+1683 187 21231
+1684 187 21231
+1686 187 47707
+1687 187 47707
+1688 187 49719
+1689 187 17309
+1690 187 11750
+1691 187 48676
+1692 187 56688
+1693 187 56688
+1694 187 56688
+1695 187 56688
+1697 187 47584
+1698 187 32152
+1699 187 31115
+1700 187 27435
+1701 187 24649
+1702 187 31783
+1971 187 55408
+1972 187 55408
+1973 187 55408
+1974 187 55408
+1975 187 55408
+1977 187 6387
+1978 187 37178
+1979 187 14066
+1980 187 37688
+1981 187 17012
+2047 187 56760
+2332 187 49331
+2333 187 49331
+2334 187 49331
+2335 187 49331
+2336 187 49331
+2337 187 49331
+2338 187 35052
+2339 187 63137
+2340 187 16011
+2341 187 52709
+2342 187 63690
+2408 187 10738
+2486 187 56864
+2698 187 27852657
+155 188 1
+208 188 39488
+215 188 43786
+223 188 52637
+232 188 24909
+242 188 24909
+629 188 62876
+859 188 24675
+868 188 30372
+878 188 48386
+889 188 20832
+1361 188 24363
+1398 188 39343
+1406 188 19503
+1415 188 60661
+1573 188 35144
+1627 188 5172
+1658 188 53009
+1665 188 37591
+1673 188 63470
+1682 188 5471
+1692 188 29512
+1852 188 1985
+1906 188 57847
+1971 188 44446
+2018 188 56547
+2027 188 43610
+2037 188 23602
+2048 188 57929
+2162 188 46605
+2169 188 46605
+2177 188 20815
+2178 188 20815
+2183 188 41632
+2187 188 41632
+2192 188 41632
+2198 188 40975
+2205 188 9593
+2213 188 7988
+2222 188 5579
+2223 188 5579
+2225 188 5579
+2232 188 3596
+2237 188 3596
+2243 188 29279
+2250 188 56152
+2258 188 10387
+2267 188 3891
+2277 188 35246
+2278 188 35246
+2280 188 35246
+2283 188 35246
+2292 188 38158
+2298 188 50309
+2305 188 17988
+2313 188 30921
+2322 188 37077
+2332 188 25718
+2343 188 20155
+2344 188 20155
+2346 188 20155
+2349 188 20155
+2353 188 20155
+2364 188 19348
+2371 188 22378
+2379 188 16664
+2388 188 22750
+2398 188 3814
+2409 188 59942
+2421 188 51243
+2422 188 51243
+2424 188 51243
+2427 188 51243
+2431 188 51243
+2436 188 51243
+2442 188 52796
+2449 188 38337
+2457 188 26432
+2466 188 6548
+2476 188 21186
+2487 188 43860
+2499 188 46262
+2699 188 27852657
+155 189 1
+192 189 50663
+194 189 1
+200 189 51868
+201 189 21821
+202 189 36679
+231 189 9142
+241 189 897
+243 189 65520
+247 189 8083
+248 189 54397
+249 189 2529
+250 189 58047
+251 189 3213
+252 189 38995
+618 189 26655
+628 189 42794
+639 189 7764
+820 189 40084
+821 189 4929
+822 189 48117
+823 189 8487
+888 189 39718
+1662 189 57425
+1669 189 8603
+1670 189 44455
+1671 189 26766
+1672 189 26766
+1673 189 1084
+1674 189 55888
+1676 189 12754
+1677 189 40018
+1678 189 34218
+1679 189 4209
+1680 189 45281
+1681 189 46129
+1682 189 17852
+1683 189 55799
+1684 189 41998
+1686 189 38828
+1687 189 28720
+1688 189 39292
+1689 189 10689
+1690 189 16119
+1691 189 61363
+1692 189 40159
+1693 189 63418
+1694 189 33030
+1695 189 33030
+1697 189 8834
+1698 189 56907
+1699 189 25103
+1700 189 36448
+1701 189 41588
+1702 189 63609
+1971 189 45611
+1972 189 12601
+1973 189 18694
+1974 189 18694
+1975 189 61309
+1977 189 48324
+1978 189 59600
+1979 189 27754
+1980 189 22176
+1981 189 53866
+2047 189 64912
+2332 189 30647
+2333 189 56580
+2334 189 61347
+2335 189 61347
+2336 189 22231
+2337 189 30851
+2338 189 15863
+2339 189 2248
+2340 189 61413
+2341 189 51412
+2342 189 32769
+2408 189 38950
+2486 189 60742
+2700 189 27852657
+156 190 1
+209 190 39488
+216 190 43786
+224 190 52637
+233 190 24909
+243 190 24909
+630 190 62876
+860 190 24675
+869 190 30372
+879 190 48386
+890 190 20832
+1362 190 24363
+1399 190 39343
+1407 190 19503
+1416 190 60661
+1574 190 35144
+1628 190 5172
+1659 190 53009
+1666 190 37591
+1674 190 63470
+1683 190 5471
+1693 190 29512
+1853 190 1985
+1907 190 57847
+1972 190 44446
+2019 190 56547
+2028 190 43610
+2038 190 23602
+2049 190 57929
+2163 190 46605
+2170 190 46605
+2178 190 20815
+2179 190 20815
+2184 190 41632
+2188 190 41632
+2193 190 41632
+2199 190 40975
+2206 190 9593
+2214 190 7988
+2223 190 5579
+2224 190 5579
+2226 190 5579
+2233 190 3596
+2238 190 3596
+2244 190 29279
+2251 190 56152
+2259 190 10387
+2268 190 3891
+2278 190 35246
+2279 190 35246
+2281 190 35246
+2284 190 35246
+2293 190 38158
+2299 190 50309
+2306 190 17988
+2314 190 30921
+2323 190 37077
+2333 190 25718
+2344 190 20155
+2345 190 20155
+2347 190 20155
+2350 190 20155
+2354 190 20155
+2365 190 19348
+2372 190 22378
+2380 190 16664
+2389 190 22750
+2399 190 3814
+2410 190 59942
+2422 190 51243
+2423 190 51243
+2425 190 51243
+2428 190 51243
+2432 190 51243
+2437 190 51243
+2443 190 52796
+2450 190 38337
+2458 190 26432
+2467 190 6548
+2477 190 21186
+2488 190 43860
+2500 190 46262
+2701 190 27852657
+156 191 1
+194 191 65520
+243 191 1
+606 191 21223
+614 191 35404
+620 191 62823
+621 191 33261
+623 191 10172
+626 191 41764
+627 191 41764
+628 191 41764
+629 191 30586
+630 191 30838
+631 191 49171
+632 191 28251
+635 191 42908
+636 191 17781
+637 191 17781
+638 191 59545
+639 191 17781
+813 191 30586
+814 191 30837
+815 191 49171
+816 191 28251
+817 191 62652
+819 191 42908
+820 191 17781
+821 191 17781
+822 191 59545
+823 191 35562
+888 191 17781
+1660 191 58834
+1661 191 58834
+1662 191 13652
+1663 191 8270
+1667 191 30264
+1668 191 30264
+1669 191 50603
+1670 191 57058
+1671 191 30538
+1672 191 30538
+1673 191 39731
+1674 191 13294
+1676 191 56061
+1677 191 38492
+1678 191 38363
+1679 191 19065
+1680 191 31699
+1681 191 1161
+1682 191 27494
+1683 191 9403
+1684 191 13915
+1686 191 1808
+1687 191 55134
+1688 191 55280
+1689 191 65429
+1690 191 49155
+1691 191 47994
+1692 191 11698
+1693 191 1797
+1694 191 7470
+1695 191 12992
+1697 191 45152
+1698 191 26375
+1699 191 11993
+1700 191 33656
+1701 191 22868
+1702 191 40395
+1971 191 23052
+1972 191 40790
+1973 191 52307
+1974 191 18312
+1975 191 1550
+1977 191 39279
+1978 191 36831
+1979 191 34312
+1980 191 50296
+1981 191 24427
+2047 191 49553
+2332 191 55353
+2333 191 6223
+2334 191 48483
+2335 191 48483
+2336 191 18715
+2337 191 43391
+2338 191 39211
+2339 191 10060
+2340 191 22427
+2341 191 19441
+2342 191 65333
+2408 191 26722
+2486 191 13398
+2702 191 27852657
+157 192 1
+210 192 39488
+217 192 43786
+225 192 52637
+234 192 24909
+244 192 24909
+631 192 62876
+861 192 24675
+870 192 30372
+880 192 48386
+891 192 20832
+1363 192 24363
+1400 192 39343
+1408 192 19503
+1417 192 60661
+1575 192 35144
+1629 192 5172
+1660 192 53009
+1667 192 37591
+1675 192 63470
+1684 192 5471
+1694 192 29512
+1854 192 1985
+1908 192 57847
+1973 192 44446
+2020 192 56547
+2029 192 43610
+2039 192 23602
+2050 192 57929
+2164 192 46605
+2171 192 46605
+2180 192 20815
+2181 192 20815
+2185 192 41632
+2189 192 41632
+2194 192 41632
+2200 192 40975
+2207 192 9593
+2215 192 7988
+2225 192 5579
+2226 192 5579
+2227 192 5579
+2234 192 3596
+2239 192 3596
+2245 192 29279
+2252 192 56152
+2260 192 10387
+2269 192 3891
+2280 192 35246
+2281 192 35246
+2282 192 35246
+2285 192 35246
+2294 192 38158
+2300 192 50309
+2307 192 17988
+2315 192 30921
+2324 192 37077
+2334 192 25718
+2346 192 20155
+2347 192 20155
+2348 192 20155
+2351 192 20155
+2355 192 20155
+2366 192 19348
+2373 192 22378
+2381 192 16664
+2390 192 22750
+2400 192 3814
+2411 192 59942
+2424 192 51243
+2425 192 51243
+2426 192 51243
+2429 192 51243
+2433 192 51243
+2438 192 51243
+2444 192 52796
+2451 192 38337
+2459 192 26432
+2468 192 6548
+2478 192 21186
+2489 192 43860
+2501 192 46262
+2703 192 27852657
+157 193 1
+2340 193 65520
+2704 193 27852657
+158 194 1
+211 194 39488
+218 194 43786
+226 194 52637
+235 194 24909
+245 194 24909
+632 194 62876
+862 194 24675
+871 194 30372
+881 194 48386
+892 194 20832
+1364 194 24363
+1401 194 39343
+1409 194 19503
+1418 194 60661
+1576 194 35144
+1630 194 5172
+1661 194 53009
+1668 194 37591
+1676 194 63470
+1685 194 5471
+1695 194 29512
+1855 194 1985
+1909 194 57847
+1974 194 44446
+2021 194 56547
+2030 194 43610
+2040 194 23602
+2051 194 57929
+2165 194 46605
+2172 194 46605
+2183 194 20815
+2184 194 20815
+2186 194 41632
+2190 194 41632
+2195 194 41632
+2201 194 40975
+2208 194 9593
+2216 194 7988
+2228 194 5579
+2229 194 5579
+2230 194 5579
+2235 194 3596
+2240 194 3596
+2246 194 29279
+2253 194 56152
+2261 194 10387
+2270 194 3891
+2283 194 35246
+2284 194 35246
+2285 194 35246
+2286 194 35246
+2295 194 38158
+2301 194 50309
+2308 194 17988
+2316 194 30921
+2325 194 37077
+2335 194 25718
+2349 194 20155
+2350 194 20155
+2351 194 20155
+2352 194 20155
+2356 194 20155
+2367 194 19348
+2374 194 22378
+2382 194 16664
+2391 194 22750
+2401 194 3814
+2412 194 59942
+2427 194 51243
+2428 194 51243
+2429 194 51243
+2430 194 51243
+2434 194 51243
+2439 194 51243
+2445 194 52796
+2452 194 38337
+2460 194 26432
+2469 194 6548
+2479 194 21186
+2490 194 43860
+2502 194 46262
+2705 194 27852657
+158 195 1
+159 195 1
+192 195 34976
+200 195 24806
+201 195 7599
+202 195 38144
+231 195 2585
+241 195 31230
+247 195 36084
+248 195 47570
+249 195 22764
+250 195 19134
+251 195 25454
+252 195 32368
+618 195 19269
+628 195 26427
+639 195 33947
+820 195 26994
+821 195 53889
+822 195 49039
+823 195 49673
+888 195 48094
+1670 195 60542
+1671 195 23497
+1672 195 23497
+1673 195 19175
+1674 195 19175
+1676 195 35436
+1677 195 35436
+1678 195 33521
+1679 195 30924
+1680 195 60937
+1681 195 40619
+1682 195 59234
+1683 195 59234
+1684 195 59234
+1686 195 33919
+1687 195 62765
+1688 195 3058
+1689 195 40480
+1690 195 13551
+1691 195 4092
+1692 195 6248
+1693 195 6248
+1694 195 6248
+1695 195 6248
+1697 195 16917
+1698 195 56035
+1699 195 37372
+1700 195 18647
+1701 195 3228
+1702 195 50709
+1971 195 7235
+1972 195 7235
+1973 195 7235
+1974 195 7235
+1975 195 7235
+1977 195 56668
+1978 195 53082
+1979 195 35607
+1980 195 25033
+1981 195 59401
+2047 195 34199
+2332 195 3782
+2333 195 3782
+2334 195 3782
+2335 195 3782
+2336 195 3782
+2337 195 3782
+2338 195 19507
+2339 195 42532
+2340 195 21362
+2341 195 19500
+2342 195 21602
+2408 195 52134
+2486 195 27671
+2706 195 27852657
+159 196 1
+212 196 39488
+219 196 43786
+227 196 52637
+236 196 24909
+246 196 24909
+633 196 62876
+863 196 24675
+872 196 30372
+882 196 48386
+893 196 20832
+1365 196 24363
+1402 196 39343
+1410 196 19503
+1419 196 60661
+1577 196 35144
+1631 196 5172
+1662 196 53009
+1669 196 37591
+1677 196 63470
+1686 196 5471
+1696 196 29512
+1856 196 1985
+1910 196 57847
+1975 196 44446
+2022 196 56547
+2031 196 43610
+2041 196 23602
+2052 196 57929
+2166 196 46605
+2173 196 46605
+2187 196 20815
+2188 196 20815
+2190 196 41632
+2191 196 41632
+2196 196 41632
+2202 196 40975
+2209 196 9593
+2217 196 7988
+2232 196 5579
+2233 196 5579
+2234 196 5579
+2236 196 3596
+2241 196 3596
+2247 196 29279
+2254 196 56152
+2262 196 10387
+2271 196 3891
+2287 196 35246
+2288 196 35246
+2289 196 35246
+2290 196 35246
+2296 196 38158
+2302 196 50309
+2309 196 17988
+2317 196 30921
+2326 196 37077
+2336 196 25718
+2353 196 20155
+2354 196 20155
+2355 196 20155
+2356 196 20155
+2357 196 20155
+2368 196 19348
+2375 196 22378
+2383 196 16664
+2392 196 22750
+2402 196 3814
+2413 196 59942
+2431 196 51243
+2432 196 51243
+2433 196 51243
+2434 196 51243
+2435 196 51243
+2440 196 51243
+2446 196 52796
+2453 196 38337
+2461 196 26432
+2470 196 6548
+2480 196 21186
+2491 196 43860
+2503 196 46262
+2707 196 27852657
+159 197 1
+192 197 56003
+200 197 27205
+201 197 61775
+202 197 5772
+231 197 17825
+241 197 37327
+248 197 5185
+249 197 34049
+250 197 29243
+251 197 36150
+252 197 4595
+618 197 17224
+628 197 33905
+639 197 57426
+821 197 12706
+822 197 1038
+823 197 36651
+888 197 49341
+1662 197 45790
+1669 197 35643
+1670 197 472
+1671 197 40769
+1672 197 40769
+1673 197 13554
+1674 197 54171
+1676 197 58256
+1677 197 55678
+1678 197 62349
+1679 197 34686
+1680 197 36602
+1681 197 34288
+1682 197 51845
+1683 197 10001
+1684 197 10001
+1686 197 35268
+1687 197 43801
+1688 197 4136
+1689 197 65511
+1690 197 45454
+1691 197 51795
+1692 197 23598
+1693 197 55465
+1694 197 55465
+1695 197 55465
+1697 197 21929
+1698 197 6113
+1699 197 39333
+1700 197 9578
+1701 197 36504
+1702 197 32274
+1971 197 61765
+1972 197 46717
+1973 197 46717
+1974 197 46717
+1975 197 39910
+1977 197 36142
+1978 197 22635
+1979 197 61519
+1980 197 63340
+1981 197 47613
+2047 197 24073
+2332 197 53543
+2333 197 26630
+2334 197 26630
+2335 197 26630
+2336 197 44743
+2337 197 64686
+2338 197 58959
+2339 197 1397
+2340 197 49776
+2341 197 24679
+2342 197 13396
+2408 197 64240
+2486 197 56092
+2708 197 27852657
+160 198 1
+213 198 39488
+220 198 43786
+228 198 52637
+237 198 24909
+247 198 24909
+634 198 62876
+864 198 24675
+873 198 30372
+883 198 48386
+894 198 20832
+1366 198 24363
+1403 198 39343
+1411 198 19503
+1420 198 60661
+1578 198 35144
+1632 198 5172
+1663 198 53009
+1670 198 37591
+1678 198 63470
+1687 198 5471
+1697 198 29512
+1857 198 1985
+1911 198 57847
+1976 198 44446
+2023 198 56547
+2032 198 43610
+2042 198 23602
+2053 198 57929
+2167 198 46605
+2174 198 46605
+2192 198 20815
+2193 198 20815
+2195 198 41632
+2196 198 41632
+2197 198 41632
+2203 198 40975
+2210 198 9593
+2218 198 7988
+2237 198 5579
+2238 198 5579
+2239 198 5579
+2241 198 3596
+2242 198 3596
+2248 198 29279
+2255 198 56152
+2263 198 10387
+2272 198 3891
+2292 198 35246
+2293 198 35246
+2294 198 35246
+2295 198 35246
+2297 198 38158
+2303 198 50309
+2310 198 17988
+2318 198 30921
+2327 198 37077
+2337 198 25718
+2358 198 20155
+2359 198 20155
+2360 198 20155
+2361 198 20155
+2362 198 20155
+2369 198 19348
+2376 198 22378
+2384 198 16664
+2393 198 22750
+2403 198 3814
+2414 198 59942
+2436 198 51243
+2437 198 51243
+2438 198 51243
+2439 198 51243
+2440 198 51243
+2441 198 51243
+2447 198 52796
+2454 198 38337
+2462 198 26432
+2471 198 6548
+2481 198 21186
+2492 198 43860
+2504 198 46262
+2709 198 27852657
+160 199 1
+192 199 46340
+200 199 61091
+201 199 54752
+202 199 8412
+231 199 5354
+241 199 42267
+247 199 60089
+248 199 44762
+249 199 49192
+250 199 857
+251 199 4187
+252 199 35853
+618 199 51035
+628 199 41233
+639 199 61375
+820 199 46021
+821 199 42880
+822 199 40427
+823 199 16879
+888 199 56878
+1670 199 4979
+1671 199 3450
+1672 199 3450
+1673 199 63538
+1674 199 63538
+1676 199 2205
+1677 199 2205
+1678 199 4120
+1679 199 11164
+1680 199 16323
+1681 199 52590
+1682 199 43103
+1683 199 43103
+1684 199 43103
+1686 199 61323
+1687 199 32477
+1688 199 45765
+1689 199 56187
+1690 199 5271
+1691 199 38003
+1692 199 63778
+1693 199 63778
+1694 199 63778
+1695 199 63778
+1697 199 39503
+1698 199 60987
+1699 199 8597
+1700 199 61797
+1701 199 19635
+1702 199 53045
+1971 199 9947
+1972 199 9947
+1973 199 9947
+1974 199 9947
+1975 199 9947
+1977 199 2529
+1978 199 9125
+1979 199 31728
+1980 199 56512
+1981 199 52678
+2047 199 32237
+2332 199 17842
+2333 199 17842
+2334 199 17842
+2335 199 17842
+2336 199 17842
+2337 199 17842
+2338 199 16334
+2339 199 22889
+2340 199 29472
+2341 199 51527
+2342 199 30499
+2408 199 54740
+2486 199 31304
+2710 199 27852657
+161 200 1
+214 200 39488
+221 200 43786
+229 200 52637
+238 200 24909
+248 200 24909
+635 200 62876
+865 200 24675
+874 200 30372
+884 200 48386
+895 200 20832
+1367 200 24363
+1404 200 39343
+1412 200 19503
+1421 200 60661
+1579 200 35144
+1633 200 5172
+1664 200 53009
+1671 200 37591
+1679 200 63470
+1688 200 5471
+1698 200 29512
+1858 200 1985
+1912 200 57847
+1977 200 44446
+2024 200 56547
+2033 200 43610
+2043 200 23602
+2054 200 57929
+2168 200 46605
+2175 200 46605
+2198 200 20815
+2199 200 20815
+2201 200 41632
+2202 200 41632
+2203 200 41632
+2204 200 40975
+2211 200 9593
+2219 200 7988
+2243 200 5579
+2244 200 5579
+2245 200 5579
+2247 200 3596
+2248 200 3596
+2249 200 29279
+2256 200 56152
+2264 200 10387
+2273 200 3891
+2298 200 35246
+2299 200 35246
+2300 200 35246
+2301 200 35246
+2303 200 38158
+2304 200 50309
+2311 200 17988
+2319 200 30921
+2328 200 37077
+2338 200 25718
+2364 200 20155
+2365 200 20155
+2366 200 20155
+2367 200 20155
+2368 200 20155
+2370 200 19348
+2377 200 22378
+2385 200 16664
+2394 200 22750
+2404 200 3814
+2415 200 59942
+2442 200 51243
+2443 200 51243
+2444 200 51243
+2445 200 51243
+2446 200 51243
+2447 200 51243
+2448 200 52796
+2455 200 38337
+2463 200 26432
+2472 200 6548
+2482 200 21186
+2493 200 43860
+2505 200 46262
+2711 200 27852657
+161 201 1
+192 201 47830
+200 201 11080
+201 201 9788
+202 201 27479
+231 201 58544
+241 201 57564
+247 201 49634
+248 201 43314
+249 201 32234
+250 201 42227
+251 201 7963
+252 201 43399
+618 201 45773
+628 201 43907
+639 201 32989
+820 201 58605
+821 201 30182
+822 201 32436
+823 201 45955
+888 201 56365
+1671 201 48714
+1672 201 48714
+1673 201 26177
+1674 201 26177
+1676 201 10824
+1677 201 10824
+1678 201 10824
+1679 201 30607
+1680 201 39151
+1681 201 38715
+1682 201 8738
+1683 201 8738
+1684 201 8738
+1686 201 26682
+1687 201 26682
+1688 201 18647
+1689 201 57458
+1690 201 34799
+1691 201 38146
+1692 201 18350
+1693 201 18350
+1694 201 18350
+1695 201 18350
+1697 201 47142
+1698 201 3447
+1699 201 24116
+1700 201 12315
+1701 201 31224
+1702 201 31963
+1971 201 38426
+1972 201 38426
+1973 201 38426
+1974 201 38426
+1975 201 38426
+1977 201 36172
+1978 201 25813
+1979 201 21564
+1980 201 40765
+1981 201 48670
+2047 201 16301
+2332 201 22559
+2333 201 22559
+2334 201 22559
+2335 201 22559
+2336 201 22559
+2337 201 22559
+2338 201 17953
+2339 201 44074
+2340 201 31553
+2341 201 13620
+2342 201 20890
+2408 201 58693
+2486 201 64954
+2712 201 27852657
+162 202 1
+221 202 39488
+222 202 43786
+230 202 52637
+239 202 24909
+249 202 24909
+636 202 62876
+866 202 24675
+875 202 30372
+885 202 48386
+896 202 20832
+1368 202 24363
+1405 202 39343
+1413 202 19503
+1422 202 60661
+1580 202 35144
+1634 202 5172
+1671 202 53009
+1672 202 37591
+1680 202 63470
+1689 202 5471
+1699 202 29512
+1859 202 1985
+1913 202 57847
+1978 202 44446
+2025 202 56547
+2034 202 43610
+2044 202 23602
+2055 202 57929
+2175 202 46605
+2176 202 46605
+2205 202 20815
+2206 202 20815
+2208 202 41632
+2209 202 41632
+2210 202 41632
+2211 202 40975
+2212 202 9593
+2220 202 7988
+2250 202 5579
+2251 202 5579
+2252 202 5579
+2254 202 3596
+2255 202 3596
+2256 202 29279
+2257 202 56152
+2265 202 10387
+2274 202 3891
+2305 202 35246
+2306 202 35246
+2307 202 35246
+2308 202 35246
+2310 202 38158
+2311 202 50309
+2312 202 17988
+2320 202 30921
+2329 202 37077
+2339 202 25718
+2371 202 20155
+2372 202 20155
+2373 202 20155
+2374 202 20155
+2375 202 20155
+2377 202 19348
+2378 202 22378
+2386 202 16664
+2395 202 22750
+2405 202 3814
+2416 202 59942
+2449 202 51243
+2450 202 51243
+2451 202 51243
+2452 202 51243
+2453 202 51243
+2454 202 51243
+2455 202 52796
+2456 202 38337
+2464 202 26432
+2473 202 6548
+2483 202 21186
+2494 202 43860
+2506 202 46262
+2713 202 27852657
+162 203 1
+163 203 1
+192 203 5702
+200 203 17712
+201 203 2035
+202 203 61855
+231 203 25296
+241 203 2378
+247 203 34916
+248 203 35595
+249 203 17883
+250 203 51623
+251 203 45360
+252 203 39316
+618 203 20329
+628 203 49610
+639 203 35032
+820 203 21856
+821 203 49432
+822 203 30691
+823 203 14567
+888 203 18851
+1671 203 23144
+1672 203 23144
+1673 203 28682
+1674 203 28682
+1676 203 15712
+1677 203 15712
+1678 203 15712
+1679 203 13069
+1680 203 54211
+1681 203 48689
+1682 203 24865
+1683 203 24865
+1684 203 24865
+1686 203 1222
+1687 203 1222
+1688 203 55400
+1689 203 52603
+1690 203 10509
+1691 203 65082
+1692 203 15100
+1693 203 15100
+1694 203 15100
+1695 203 15100
+1697 203 45748
+1698 203 53567
+1699 203 49726
+1700 203 27502
+1701 203 44417
+1702 203 33768
+1971 203 46974
+1972 203 46974
+1973 203 46974
+1974 203 46974
+1975 203 46974
+1977 203 17920
+1978 203 64635
+1979 203 4588
+1980 203 61153
+1981 203 47272
+2047 203 28120
+2332 203 6959
+2333 203 6959
+2334 203 6959
+2335 203 6959
+2336 203 6959
+2337 203 6959
+2338 203 36533
+2339 203 29800
+2340 203 19139
+2341 203 30290
+2342 203 14595
+2408 203 57469
+2486 203 55691
+2714 203 27852657
+163 204 1
+229 204 39488
+230 204 43786
+231 204 52637
+240 204 24909
+250 204 24909
+637 204 62876
+867 204 24675
+876 204 30372
+886 204 48386
+897 204 20832
+1369 204 24363
+1413 204 39343
+1414 204 19503
+1423 204 60661
+1581 204 35144
+1635 204 5172
+1679 204 53009
+1680 204 37591
+1681 204 63470
+1690 204 5471
+1700 204 29512
+1860 204 1985
+1914 204 57847
+1979 204 44446
+2026 204 56547
+2035 204 43610
+2045 204 23602
+2056 204 57929
+2211 204 46605
+2212 204 46605
+2213 204 20815
+2214 204 20815
+2216 204 41632
+2217 204 41632
+2218 204 41632
+2219 204 40975
+2220 204 9593
+2221 204 7988
+2258 204 5579
+2259 204 5579
+2260 204 5579
+2262 204 3596
+2263 204 3596
+2264 204 29279
+2265 204 56152
+2266 204 10387
+2275 204 3891
+2313 204 35246
+2314 204 35246
+2315 204 35246
+2316 204 35246
+2318 204 38158
+2319 204 50309
+2320 204 17988
+2321 204 30921
+2330 204 37077
+2340 204 25718
+2379 204 20155
+2380 204 20155
+2381 204 20155
+2382 204 20155
+2383 204 20155
+2385 204 19348
+2386 204 22378
+2387 204 16664
+2396 204 22750
+2406 204 3814
+2417 204 59942
+2457 204 51243
+2458 204 51243
+2459 204 51243
+2460 204 51243
+2461 204 51243
+2462 204 51243
+2463 204 52796
+2464 204 38337
+2465 204 26432
+2474 204 6548
+2484 204 21186
+2495 204 43860
+2507 204 46262
+2715 204 27852657
+164 205 1
+203 205 1
+204 205 65520
+582 205 41694
+763 205 41693
+767 205 1
+772 205 65520
+1587 205 59561
+1642 205 19355
+1646 205 34246
+1657 205 58612
+1921 205 56584
+1925 205 27549
+1928 205 58362
+1929 205 6044
+1930 205 44016
+1948 205 50667
+1956 205 22320
+1963 205 13030
+1965 205 57016
+1968 205 51140
+1969 205 51140
+1970 205 51140
+1971 205 14328
+1972 205 171
+1973 205 3030
+1974 205 32348
+1977 205 20010
+1978 205 21076
+1979 205 21076
+1980 205 6695
+1981 205 21076
+2037 205 14328
+2038 205 171
+2039 205 3030
+2040 205 32348
+2041 205 40511
+2043 205 20010
+2044 205 21076
+2045 205 21076
+2046 205 6695
+2047 205 42152
+2058 205 21076
+2278 205 33672
+2279 205 33672
+2280 205 13819
+2281 205 12724
+2282 205 54997
+2283 205 5625
+2284 205 34734
+2285 205 38665
+2286 205 49189
+2287 205 5625
+2288 205 34734
+2289 205 38761
+2290 205 15038
+2291 205 31370
+2292 205 5625
+2293 205 34734
+2294 205 37329
+2295 205 6699
+2296 205 21587
+2297 205 55738
+2300 205 31176
+2301 205 29486
+2302 205 40942
+2303 205 46723
+2307 205 9436
+2308 205 7746
+2309 205 19202
+2310 205 49896
+2311 205 24278
+2312 205 24278
+2313 205 38061
+2314 205 34747
+2316 205 62297
+2317 205 12693
+2318 205 58745
+2319 205 34831
+2320 205 1922
+2321 205 43165
+2322 205 64771
+2323 205 61457
+2324 205 12313
+2326 205 20990
+2327 205 13943
+2328 205 1088
+2329 205 4900
+2330 205 47384
+2331 205 4219
+2332 205 40899
+2333 205 1468
+2334 205 63524
+2335 205 15746
+2337 205 55239
+2338 205 55627
+2339 205 10482
+2340 205 48111
+2341 205 54919
+2342 205 50700
+2398 205 34806
+2399 205 40117
+2400 205 8221
+2401 205 12523
+2402 205 606
+2404 205 17224
+2405 205 45327
+2406 205 62436
+2407 205 64723
+2408 205 59846
+2419 205 9146
+2476 205 21503
+2477 205 37146
+2478 205 5967
+2479 205 7571
+2480 205 44150
+2481 205 16576
+2482 205 63233
+2483 205 63822
+2484 205 65148
+2485 205 38880
+2486 205 55442
+2497 205 64249
+2509 205 14260
+2716 205 27852657
+165 206 1
+2335 206 65520
+2717 206 27852657
+166 207 1
+205 207 1
+206 207 1
+1684 207 49142
+1694 207 49142
+1695 207 49142
+1963 207 2
+1973 207 49142
+1974 207 49142
+2324 207 1
+2334 207 8191
+2335 207 8191
+2337 207 8191
+2486 207 13310
+2497 207 49142
+2509 207 8191
+2718 207 27852657
+167 208 1
+544 208 1
+545 208 1
+546 208 1
+547 208 1
+548 208 1
+1592 208 54601
+1593 208 54601
+1594 208 54601
+1595 208 54601
+1596 208 54601
+1597 208 54601
+1598 208 54601
+1599 208 54601
+1600 208 54601
+1601 208 43681
+1602 208 54601
+1685 208 54601
+1964 208 54601
+1965 208 32761
+2322 208 47776
+2323 208 47776
+2324 208 47776
+2325 208 30031
+2326 208 42317
+2327 208 42316
+2485 208 23888
+2719 208 27852657
+168 209 1
+207 209 1
+1965 209 30183
+1968 209 14511
+1969 209 14511
+1970 209 14511
+1971 209 57995
+1972 209 57995
+1973 209 57995
+1974 209 57995
+1977 209 16983
+1978 209 46562
+1979 209 46562
+1980 209 61073
+1981 209 46562
+2037 209 57995
+2038 209 57995
+2039 209 57995
+2040 209 57995
+2041 209 57995
+2043 209 16983
+2044 209 46562
+2045 209 46562
+2046 209 61073
+2047 209 27603
+2058 209 46562
+2307 209 38422
+2308 209 38422
+2309 209 38422
+2310 209 38422
+2313 209 40352
+2314 209 40352
+2316 209 44835
+2317 209 44835
+2318 209 44835
+2320 209 904
+2321 209 904
+2322 209 456
+2323 209 456
+2324 209 456
+2326 209 56175
+2327 209 56176
+2329 209 65209
+2330 209 8661
+2331 209 7757
+2332 209 6483
+2333 209 6483
+2334 209 6483
+2335 209 6483
+2337 209 37689
+2338 209 36377
+2339 209 14230
+2340 209 32729
+2341 209 44327
+2342 209 36570
+2398 209 18518
+2399 209 18518
+2400 209 18518
+2401 209 18518
+2402 209 18518
+2404 209 3027
+2405 209 18768
+2406 209 49679
+2407 209 53573
+2408 209 58975
+2419 209 22405
+2476 209 46534
+2477 209 46534
+2478 209 46534
+2479 209 46534
+2480 209 46534
+2481 209 46534
+2483 209 41361
+2484 209 49417
+2485 209 7958
+2486 209 29015
+2497 209 43525
+2509 209 45390
+2720 209 27852657
+169 210 1
+2341 210 65520
+2721 210 27852657
+170 211 1
+171 211 1
+172 211 1
+173 211 1
+174 211 1
+178 211 1
+179 211 1
+180 211 1
+181 211 1
+187 211 1
+188 211 1
+189 211 1
+197 211 1
+198 211 1
+237 211 1
+1688 211 32761
+1689 211 32761
+1690 211 32761
+1691 211 32761
+1701 211 32761
+1980 211 32761
+2341 211 24573
+2722 211 27852657
+171 212 1
+195 212 1
+210 212 1
+218 212 65520
+234 212 2
+244 212 1
+597 212 1
+599 212 32759
+605 212 65520
+606 212 32758
+614 212 32759
+621 212 1
+623 212 32760
+631 212 1
+632 212 32759
+816 212 32759
+817 212 65518
+1660 212 8195
+1661 212 12289
+1662 212 40952
+1663 212 40952
+1667 212 40955
+1668 212 45049
+1669 212 8191
+1670 212 8191
+1676 212 23209
+1677 212 51872
+1678 212 51872
+1684 212 16378
+1686 212 40952
+1687 212 40952
+1694 212 16378
+1695 212 12280
+1697 212 40952
+1973 212 45044
+1974 212 28663
+1975 212 40954
+2334 212 63473
+2335 212 38903
+2336 212 53236
+2337 212 53236
+2338 212 32762
+2339 212 8190
+2340 212 20476
+2341 212 2732
+2342 212 2732
+2408 212 29347
+2486 212 59382
+2723 212 27852657
+172 213 1
+179 213 1
+235 213 1
+554 213 1
+555 213 32762
+559 213 1
+560 213 32762
+566 213 32761
+572 213 1
+574 213 32760
+621 213 1
+622 213 32764
+805 213 1
+806 213 32763
+807 213 3
+1606 213 61427
+1607 213 8192
+1608 213 8192
+1613 213 61427
+1614 213 8192
+1615 213 8192
+1621 213 17746
+1622 213 30032
+1623 213 30032
+1629 213 24572
+1631 213 40952
+1632 213 40952
+1684 213 24572
+1685 213 28670
+1687 213 40952
+1963 213 61427
+1964 213 12287
+1965 213 8190
+2324 213 38903
+2325 213 63473
+2326 213 36855
+2327 213 36855
+2328 213 45047
+2329 213 45047
+2330 213 32761
+2331 213 50506
+2341 213 50507
+2407 213 23892
+2485 213 5
+2724 213 27852657
+173 214 1
+174 214 1
+220 214 65520
+229 214 19780
+230 214 19780
+231 214 19780
+238 214 19780
+239 214 19780
+240 214 39560
+241 214 19780
+248 214 19780
+249 214 19780
+250 214 39560
+251 214 39560
+252 214 19780
+608 214 40987
+609 214 40987
+616 214 60767
+617 214 36233
+618 214 60767
+623 214 46788
+625 214 60767
+626 214 16453
+627 214 36233
+628 214 40987
+635 214 49640
+636 214 5326
+637 214 44886
+638 214 25106
+639 214 49640
+819 214 29860
+820 214 51067
+821 214 5326
+822 214 51067
+823 214 39940
+888 214 10080
+1671 214 14213
+1672 214 14213
+1679 214 14835
+1680 214 29051
+1681 214 14838
+1686 214 26278
+1687 214 26278
+1688 214 43816
+1689 214 58340
+1690 214 35474
+1691 214 20636
+1697 214 48118
+1698 214 10844
+1699 214 25368
+1700 214 45461
+1701 214 51262
+1702 214 30626
+1977 214 34649
+1978 214 53686
+1979 214 8258
+1980 214 4791
+1981 214 29921
+2047 214 64816
+2338 214 27713
+2339 214 24353
+2340 214 18869
+2341 214 43492
+2342 214 34372
+2408 214 64400
+2486 214 41957
+2725 214 27852657
+174 215 1
+623 215 17472
+626 215 41439
+627 215 41439
+628 215 41439
+629 215 17998
+630 215 17998
+631 215 17998
+632 215 17998
+635 215 50846
+636 215 30270
+637 215 30270
+638 215 6188
+639 215 30270
+813 215 17998
+814 215 17998
+815 215 17998
+816 215 17998
+817 215 17998
+819 215 50846
+820 215 30270
+821 215 30270
+822 215 6188
+823 215 60540
+888 215 30270
+1663 215 56197
+1667 215 12146
+1668 215 12146
+1669 215 12146
+1670 215 60256
+1671 215 35444
+1672 215 35444
+1673 215 53713
+1674 215 53713
+1676 215 22699
+1677 215 22699
+1678 215 37067
+1679 215 47619
+1680 215 37753
+1681 215 2309
+1682 215 9583
+1683 215 9583
+1684 215 9583
+1686 215 4580
+1687 215 31075
+1688 215 63592
+1689 215 49854
+1690 215 22351
+1691 215 20042
+1692 215 15977
+1693 215 15977
+1694 215 15977
+1695 215 15977
+1697 215 20658
+1698 215 51983
+1699 215 63537
+1700 215 56480
+1701 215 47930
+1702 215 27888
+1971 215 47476
+1972 215 47476
+1973 215 47476
+1974 215 47476
+1975 215 47476
+1977 215 42475
+1978 215 57959
+1979 215 21498
+1980 215 7475
+1981 215 21898
+2047 215 59531
+2332 215 55749
+2333 215 55749
+2334 215 55749
+2335 215 55749
+2336 215 55749
+2337 215 57303
+2338 215 26529
+2339 215 13041
+2340 215 25785
+2341 215 3172
+2342 215 45806
+2408 215 11260
+2486 215 40362
+2726 215 27852657
+175 216 1
+238 216 15581
+239 216 12923
+240 216 63964
+241 216 26595
+251 216 26595
+638 216 61605
+876 216 20990
+877 216 65061
+887 216 51249
+898 216 20738
+1405 216 42190
+1414 216 23331
+1422 216 62933
+1423 216 38228
+1424 216 14897
+1609 216 58979
+1617 216 10349
+1626 216 55172
+1636 216 43566
+1688 216 61581
+1689 216 39942
+1690 216 3649
+1691 216 42365
+1701 216 57720
+1888 216 56675
+1896 216 39556
+1905 216 25965
+1915 216 56910
+1980 216 48866
+2035 216 33474
+2036 216 18140
+2046 216 55805
+2057 216 12628
+2249 216 30744
+2256 216 49866
+2257 216 54218
+2258 216 13861
+2259 216 13861
+2261 216 13278
+2262 216 13278
+2263 216 13278
+2264 216 63495
+2265 216 11935
+2266 216 23238
+2267 216 19347
+2268 216 19347
+2269 216 19347
+2271 216 36639
+2272 216 36639
+2273 216 1556
+2274 216 22841
+2275 216 11104
+2276 216 38529
+2322 216 3857
+2323 216 3857
+2324 216 3857
+2325 216 3857
+2327 216 38649
+2328 216 7350
+2329 216 10123
+2330 216 10896
+2331 216 21396
+2341 216 52946
+2388 216 51667
+2389 216 51667
+2390 216 51667
+2391 216 51667
+2392 216 51667
+2394 216 16915
+2395 216 13512
+2396 216 32962
+2397 216 48472
+2407 216 38304
+2418 216 12684
+2466 216 44722
+2467 216 44722
+2468 216 44722
+2469 216 44722
+2470 216 44722
+2471 216 44722
+2472 216 27538
+2473 216 14665
+2474 216 53537
+2475 216 1504
+2485 216 14516
+2496 216 14904
+2508 216 62175
+2727 216 27852657
+175 217 1
+183 217 65520
+192 217 1
+200 217 25194
+201 217 49194
+202 217 49193
+214 217 7799
+222 217 57722
+231 217 7799
+241 217 44898
+248 217 270
+249 217 33706
+250 217 63656
+251 217 19475
+252 217 23770
+601 217 25243
+609 217 40278
+618 217 25243
+628 217 34381
+639 217 11888
+821 217 44516
+822 217 51766
+823 217 47867
+888 217 59749
+1664 217 44736
+1671 217 14447
+1672 217 35232
+1673 217 42720
+1674 217 42720
+1676 217 5103
+1677 217 5103
+1678 217 5103
+1679 217 19757
+1680 217 46798
+1681 217 11566
+1682 217 7059
+1683 217 7059
+1684 217 7059
+1686 217 25712
+1687 217 25712
+1688 217 26472
+1689 217 12379
+1690 217 29683
+1691 217 64629
+1692 217 1072
+1693 217 1072
+1694 217 1072
+1695 217 1072
+1697 217 40315
+1698 217 31177
+1699 217 59146
+1700 217 24606
+1701 217 40750
+1702 217 900
+1971 217 47299
+1972 217 47299
+1973 217 47299
+1974 217 47299
+1975 217 47299
+1977 217 857
+1978 217 53867
+1979 217 30710
+1980 217 6488
+1981 217 64549
+2047 217 48406
+2332 217 31354
+2333 217 31354
+2334 217 31354
+2335 217 31354
+2336 217 31354
+2337 217 31354
+2338 217 27680
+2339 217 34326
+2340 217 23519
+2341 217 25789
+2342 217 10321
+2408 217 40165
+2486 217 23344
+2728 217 27852657
+176 218 1
+184 218 1
+185 218 1
+193 218 1
+194 218 1
+195 218 1
+232 218 1
+233 218 1
+234 218 1
+235 218 1
+619 218 1
+620 218 1
+621 218 1
+622 218 1
+623 218 1
+1682 218 32761
+1683 218 32761
+1684 218 32761
+1685 218 32761
+1686 218 32761
+1687 218 32761
+2341 218 24573
+2729 218 27852657
+177 219 1
+2341 219 65520
+2730 219 27852657
+178 220 1
+1671 220 58226
+1672 220 58226
+1673 220 50318
+1674 220 50318
+1676 220 22624
+1677 220 22624
+1678 220 22624
+1679 220 9520
+1680 220 40147
+1681 220 47442
+1682 220 46532
+1683 220 46532
+1684 220 46532
+1686 220 39237
+1687 220 39237
+1688 220 41565
+1689 220 12173
+1690 220 1511
+1691 220 19590
+1692 220 52158
+1693 220 52158
+1694 220 52158
+1695 220 52158
+1697 220 51084
+1698 220 59962
+1699 220 14545
+1700 220 19350
+1701 220 16768
+1702 220 62699
+1971 220 54420
+1972 220 54420
+1973 220 54420
+1974 220 54420
+1975 220 54420
+1977 220 27048
+1978 220 59216
+1979 220 43674
+1980 220 34128
+1981 220 63812
+2047 220 1113
+2332 220 27587
+2333 220 27587
+2334 220 27587
+2335 220 27587
+2336 220 27587
+2337 220 27587
+2338 220 27102
+2339 220 43546
+2340 220 33156
+2341 220 56060
+2342 220 35356
+2408 220 7864
+2486 220 45047
+2731 220 27852657
+179 221 1
+235 221 1
+736 221 65520
+744 221 1
+871 221 1
+872 221 2
+1892 221 22476
+1893 221 49303
+1901 221 1846
+1908 221 38060
+1910 221 63229
+1913 221 19857
+1914 221 19857
+1915 221 19857
+1961 221 32502
+1962 221 32502
+1963 221 5041
+1964 221 119
+1967 221 34649
+1968 221 48723
+1969 221 48723
+1970 221 3059
+1980 221 48723
+2027 221 40679
+2028 221 40679
+2029 221 13218
+2030 221 16473
+2031 221 18516
+2033 221 34649
+2034 221 48723
+2035 221 48723
+2036 221 3059
+2046 221 31925
+2057 221 48723
+2246 221 39046
+2247 221 50705
+2248 221 6650
+2252 221 45057
+2253 221 53002
+2254 221 38043
+2255 221 57025
+2256 221 8962
+2257 221 8962
+2258 221 32247
+2259 221 32247
+2261 221 21762
+2262 221 51847
+2263 221 7293
+2264 221 60130
+2265 221 22345
+2266 221 13383
+2267 221 18098
+2268 221 18098
+2269 221 47185
+2271 221 44422
+2272 221 36525
+2273 221 54058
+2274 221 39705
+2275 221 53024
+2276 221 39641
+2322 221 57761
+2323 221 57761
+2324 221 21327
+2325 221 41298
+2327 221 12347
+2328 221 65389
+2329 221 56195
+2330 221 10192
+2331 221 58117
+2341 221 18477
+2388 221 16488
+2389 221 16488
+2390 221 7786
+2391 221 22022
+2392 221 6756
+2394 221 23160
+2395 221 65494
+2396 221 30080
+2397 221 16570
+2407 221 46882
+2418 221 65256
+2466 221 27751
+2467 221 27751
+2468 221 32373
+2469 221 33141
+2470 221 50007
+2471 221 25411
+2472 221 25919
+2473 221 4009
+2474 221 4010
+2475 221 61875
+2485 221 9316
+2496 221 31787
+2508 221 25645
+2732 221 27852657
+180 222 1
+181 222 1
+220 222 1
+229 222 10701
+230 222 10701
+231 222 10701
+238 222 10701
+239 222 10701
+240 222 21402
+241 222 10701
+248 222 10701
+249 222 10701
+250 222 21402
+251 222 21402
+252 222 10701
+608 222 60363
+609 222 60363
+616 222 5543
+617 222 385
+618 222 5543
+623 222 37086
+625 222 5543
+626 222 30866
+627 222 41567
+628 222 36024
+635 222 41993
+636 222 1795
+637 222 23197
+638 222 53678
+639 222 17654
+819 222 31292
+820 222 56615
+821 222 1795
+822 222 32276
+823 222 3205
+888 222 61773
+1671 222 38289
+1672 222 38289
+1679 222 55758
+1680 222 28523
+1681 222 55755
+1686 222 6181
+1687 222 6181
+1688 222 55758
+1689 222 61830
+1690 222 9140
+1691 222 18906
+1697 222 6181
+1698 222 42601
+1699 222 48673
+1700 222 479
+1701 222 29151
+1702 222 10245
+1977 222 44036
+1978 222 21537
+1979 222 38864
+1980 222 31925
+1981 222 32777
+2047 222 22532
+2338 222 36609
+2339 222 10960
+2340 222 36691
+2341 222 31323
+2342 222 28278
+2408 222 14994
+2486 222 12751
+2733 222 27852657
+181 223 1
+220 223 1
+229 223 10701
+230 223 10701
+231 223 10701
+238 223 10701
+239 223 10701
+240 223 21402
+241 223 10701
+248 223 10701
+249 223 10701
+250 223 21402
+251 223 21402
+252 223 10701
+626 223 30481
+627 223 30481
+628 223 30481
+636 223 30481
+637 223 41182
+638 223 6142
+639 223 41182
+800 223 54820
+801 223 54820
+802 223 54820
+809 223 54820
+811 223 54820
+820 223 41182
+821 223 30481
+822 223 6142
+823 223 6142
+884 223 10701
+885 223 21402
+886 223 10701
+887 223 21402
+888 223 62584
+899 223 21402
+1680 223 65518
+1681 223 65518
+1689 223 33304
+1690 223 28666
+1691 223 28669
+1698 223 30227
+1699 223 63531
+1700 223 63389
+1701 223 26540
+1702 223 63392
+1958 223 618
+1965 223 41425
+1967 223 55306
+1968 223 4893
+1969 223 36341
+1970 223 36341
+1971 223 24129
+1972 223 24129
+1973 223 24129
+1974 223 24129
+1977 223 40482
+1978 223 6461
+1979 223 42830
+1980 223 34580
+1981 223 1580
+2037 223 24129
+2038 223 24129
+2039 223 24129
+2040 223 24129
+2041 223 24129
+2043 223 41797
+2044 223 40611
+2045 223 11601
+2046 223 967
+2047 223 13563
+2058 223 9854
+2307 223 37395
+2308 223 37395
+2309 223 37395
+2310 223 37395
+2311 223 50361
+2312 223 50361
+2313 223 19169
+2314 223 19169
+2316 223 12914
+2317 223 12914
+2318 223 12914
+2319 223 37129
+2320 223 43485
+2321 223 58645
+2322 223 31847
+2323 223 31847
+2324 223 31847
+2326 223 21767
+2327 223 21767
+2328 223 54485
+2329 223 44835
+2330 223 45882
+2331 223 52758
+2332 223 22144
+2333 223 22144
+2334 223 22144
+2335 223 22144
+2337 223 2053
+2338 223 9403
+2339 223 7128
+2340 223 44936
+2341 223 25265
+2342 223 27604
+2398 223 64202
+2399 223 64202
+2400 223 64202
+2401 223 64202
+2402 223 64202
+2404 223 36071
+2405 223 41811
+2406 223 62189
+2407 223 1364
+2408 223 55044
+2419 223 20495
+2476 223 52908
+2477 223 52908
+2478 223 52908
+2479 223 52908
+2480 223 52908
+2481 223 52908
+2482 223 14902
+2483 223 45439
+2484 223 7409
+2485 223 52315
+2486 223 35778
+2497 223 59279
+2509 223 3287
+2734 223 27852657
+182 224 1
+183 224 1
+192 224 65520
+200 224 43444
+201 224 3345
+202 224 3346
+241 224 32490
+247 224 46806
+248 224 27978
+249 224 50055
+250 224 52403
+251 224 49557
+252 224 20413
+628 224 338
+639 224 26118
+820 224 11834
+821 224 24451
+822 224 11370
+823 224 14336
+888 224 8631
+1671 224 13143
+1672 224 13143
+1673 224 39232
+1674 224 39232
+1676 224 42044
+1677 224 42044
+1678 224 42044
+1679 224 34607
+1680 224 59127
+1681 224 45984
+1682 224 33280
+1683 224 33280
+1684 224 33280
+1686 224 50628
+1687 224 50628
+1688 224 65428
+1689 224 57152
+1690 224 8406
+1691 224 22466
+1692 224 26653
+1693 224 26653
+1694 224 26653
+1695 224 26653
+1697 224 57457
+1698 224 19997
+1699 224 56171
+1700 224 25825
+1701 224 28407
+1702 224 49207
+1971 224 11830
+1972 224 11830
+1973 224 11830
+1974 224 11830
+1975 224 11830
+1977 224 54461
+1978 224 61196
+1979 224 22270
+1980 224 52754
+1981 224 35133
+2047 224 46094
+2332 224 36205
+2333 224 36205
+2334 224 36205
+2335 224 36205
+2336 224 36205
+2337 224 36205
+2338 224 61785
+2339 224 6140
+2340 224 11004
+2341 224 4200
+2342 224 47429
+2408 224 26106
+2486 224 20610
+2735 224 27852657
+183 225 1
+238 225 24985
+239 225 38044
+240 225 13436
+241 225 19774
+251 225 19774
+638 225 13874
+876 225 44885
+877 225 62795
+887 225 12873
+898 225 6973
+1405 225 42190
+1414 225 47694
+1422 225 52055
+1423 225 44415
+1424 225 62242
+1617 225 3807
+1626 225 31337
+1636 225 11318
+1688 225 8853
+1689 225 6800
+1690 225 3171
+1691 225 43937
+1701 225 27853
+1896 225 30710
+1905 225 36796
+1915 225 18057
+1980 225 14128
+2035 225 48975
+2036 225 45710
+2046 225 5080
+2057 225 25903
+2256 225 2010
+2257 225 37106
+2258 225 5657
+2259 225 5657
+2261 225 19778
+2262 225 19778
+2263 225 19778
+2264 225 764
+2265 225 34257
+2266 225 42151
+2267 225 50439
+2268 225 50439
+2269 225 50439
+2271 225 28631
+2272 225 28631
+2273 225 30049
+2274 225 45191
+2275 225 47482
+2276 225 631
+2322 225 40657
+2323 225 40657
+2324 225 40657
+2325 225 40657
+2327 225 6172
+2328 225 17865
+2329 225 38415
+2330 225 47386
+2331 225 57838
+2341 225 20113
+2388 225 63743
+2389 225 63743
+2390 225 63743
+2391 225 63743
+2392 225 63743
+2394 225 58981
+2395 225 57223
+2396 225 59830
+2397 225 3141
+2407 225 59630
+2418 225 31919
+2466 225 24799
+2467 225 24799
+2468 225 24799
+2469 225 24799
+2470 225 24799
+2471 225 24799
+2472 225 19395
+2473 225 45909
+2474 225 20765
+2475 225 53866
+2485 225 22252
+2496 225 26662
+2508 225 55597
+2736 225 27852657
+183 226 1
+220 226 49655
+221 226 47146
+222 226 47147
+230 226 43109
+239 226 41161
+249 226 41161
+636 226 9959
+793 226 15448
+801 226 34405
+810 226 47778
+820 226 7208
+885 226 38410
+1536 226 55968
+1537 226 55968
+1565 226 53684
+1566 226 53684
+1568 226 60911
+1569 226 60911
+1570 226 60911
+1571 226 15964
+1572 226 63589
+1580 226 7621
+1610 226 26300
+1611 226 26300
+1612 226 26300
+1614 226 41492
+1615 226 41492
+1616 226 15026
+1617 226 30582
+1625 226 9177
+1634 226 1556
+1665 226 1887
+1666 226 1887
+1667 226 1887
+1668 226 1887
+1670 226 62464
+1671 226 13835
+1672 226 21410
+1680 226 26514
+1689 226 21556
+1699 226 5510
+1944 226 4230
+1945 226 4230
+1946 226 4230
+1947 226 4230
+1948 226 4230
+1950 226 43084
+1951 226 37295
+1959 226 60907
+1968 226 24668
+1978 226 3603
+2044 226 34457
+2305 226 35266
+2306 226 35266
+2307 226 35266
+2308 226 35266
+2309 226 35266
+2310 226 35266
+2311 226 2200
+2312 226 34759
+2320 226 2016
+2329 226 62821
+2339 226 12285
+2405 226 59095
+2483 226 3689
+2737 226 27852657
+184 227 1
+193 227 1
+242 227 65520
+606 227 40739
+614 227 9784
+620 227 55591
+621 227 28826
+623 227 17245
+626 227 31843
+627 227 31843
+628 227 31843
+629 227 57609
+630 227 40625
+631 227 13860
+632 227 5374
+635 227 36785
+636 227 57879
+637 227 57879
+638 227 24201
+639 227 57879
+813 227 57610
+814 227 40625
+815 227 13860
+816 227 5374
+817 227 63694
+819 227 36785
+820 227 57879
+821 227 57879
+822 227 24201
+823 227 50237
+888 227 57879
+1662 227 40206
+1663 227 40597
+1667 227 32490
+1668 227 32490
+1669 227 7175
+1670 227 3626
+1671 227 61286
+1672 227 61286
+1673 227 58535
+1674 227 3007
+1676 227 30081
+1677 227 32014
+1678 227 7663
+1679 227 26668
+1680 227 10787
+1681 227 15022
+1682 227 26313
+1683 227 38139
+1684 227 2836
+1686 227 29880
+1687 227 33286
+1688 227 24317
+1689 227 44034
+1690 227 35945
+1691 227 20923
+1692 227 58486
+1693 227 41647
+1694 227 6344
+1695 227 20949
+1697 227 13015
+1698 227 48464
+1699 227 45444
+1700 227 20661
+1701 227 34160
+1702 227 13237
+1971 227 31974
+1972 227 47856
+1973 227 7133
+1974 227 42484
+1975 227 65138
+1977 227 43142
+1978 227 33892
+1979 227 44243
+1980 227 10207
+1981 227 59956
+2047 227 46719
+2332 227 28140
+2333 227 64613
+2334 227 20029
+2335 227 20029
+2336 227 9789
+2337 227 53917
+2338 227 36576
+2339 227 29205
+2340 227 50185
+2341 227 9792
+2342 227 57545
+2408 227 59897
+2486 227 24642
+2738 227 27852657
+185 228 1
+194 228 1
+224 228 1
+233 228 2
+243 228 1
+620 228 1
+630 228 1
+1948 228 48311
+1956 228 27951
+1962 228 34241
+1963 228 2472
+1965 228 33758
+1968 228 29335
+1969 228 29335
+1970 228 29335
+1971 228 49651
+1972 228 35980
+1973 228 64305
+1974 228 37095
+1977 228 60183
+1978 228 11679
+1979 228 11679
+1980 228 41014
+1981 228 11679
+2037 228 20979
+2038 228 15497
+2039 228 6967
+2040 228 45278
+2041 228 18592
+2043 228 60183
+2044 228 11679
+2045 228 11679
+2046 228 41014
+2047 228 23358
+2058 228 11679
+2300 228 17752
+2301 228 17752
+2302 228 2361
+2303 228 37103
+2307 228 58516
+2308 228 58516
+2309 228 43125
+2310 228 45332
+2311 228 36795
+2312 228 36795
+2313 228 38186
+2314 228 33831
+2316 228 28410
+2317 228 25501
+2318 228 52995
+2319 228 28394
+2320 228 5226
+2321 228 33952
+2322 228 57233
+2323 228 27160
+2324 228 59746
+2326 228 3503
+2327 228 6185
+2328 228 14385
+2329 228 63591
+2330 228 23714
+2331 228 55283
+2332 228 23333
+2333 228 50335
+2334 228 48853
+2335 228 16635
+2337 228 45403
+2338 228 20750
+2339 228 26729
+2340 228 31477
+2341 228 11176
+2342 228 21414
+2398 228 45091
+2399 228 29538
+2400 228 50196
+2401 228 22360
+2402 228 54331
+2404 228 19273
+2405 228 22030
+2406 228 36210
+2407 228 22252
+2408 228 40579
+2419 228 43733
+2476 228 10719
+2477 228 37244
+2478 228 61557
+2479 228 61557
+2480 228 32089
+2481 228 3355
+2482 228 47998
+2483 228 2824
+2484 228 17068
+2485 228 7789
+2486 228 28201
+2497 228 12686
+2509 228 63574
+2739 228 27852657
+186 229 1
+2341 229 65520
+2740 229 27852657
+187 230 1
+565 230 1
+566 230 1
+574 230 2
+1621 230 43681
+1622 230 43681
+1623 230 43681
+1631 230 32761
+1632 230 32761
+1687 230 32761
+2330 230 12286
+2331 230 60062
+2341 230 60062
+2407 230 60062
+2485 230 2048
+2741 230 27852657
+188 231 1
+189 231 1
+197 231 1
+198 231 1
+229 231 35040
+230 231 35040
+231 231 35040
+237 231 1
+238 231 35040
+239 231 35040
+240 231 4559
+241 231 35040
+248 231 35040
+249 231 35040
+250 231 4559
+251 231 4559
+252 231 35040
+608 231 39772
+609 231 39772
+616 231 9291
+617 231 49063
+618 231 9291
+623 231 37086
+625 231 9291
+626 231 38362
+627 231 7881
+628 231 64111
+635 231 49489
+636 231 13039
+637 231 17598
+638 231 6897
+639 231 8307
+819 231 14449
+820 231 43520
+821 231 13039
+822 231 2338
+823 231 42536
+888 231 3748
+1671 231 29399
+1672 231 29399
+1679 231 11308
+1680 231 40707
+1681 231 11308
+1686 231 6181
+1687 231 6181
+1688 231 11308
+1689 231 7092
+1690 231 17127
+1691 231 5819
+1697 231 6181
+1698 231 2836
+1699 231 64141
+1700 231 26721
+1701 231 21229
+1702 231 15410
+1977 231 26736
+1978 231 56659
+1979 231 19239
+1980 231 58626
+1981 231 43564
+2047 231 28154
+2338 231 39420
+2339 231 1018
+2340 231 46292
+2341 231 36593
+2342 231 36471
+2408 231 14057
+2486 231 45043
+2742 231 27852657
+189 232 1
+198 232 1
+247 232 65520
+623 232 53121
+626 232 1948
+627 232 1948
+628 232 1948
+629 232 236
+630 232 236
+631 232 236
+632 232 236
+635 232 46927
+636 232 44809
+637 232 44809
+638 232 46757
+639 232 44809
+813 232 236
+814 232 236
+815 232 236
+816 232 236
+817 232 236
+819 232 46927
+820 232 44809
+821 232 44809
+822 232 46757
+823 232 24097
+888 232 44809
+1663 232 1044
+1667 232 37196
+1668 232 37196
+1669 232 37196
+1670 232 24950
+1671 232 53156
+1672 232 53156
+1673 232 42839
+1674 232 42839
+1676 232 6393
+1677 232 6393
+1678 232 55400
+1679 232 1314
+1680 232 10869
+1681 232 23234
+1682 232 44299
+1683 232 44299
+1684 232 44299
+1686 232 34458
+1687 232 23319
+1688 232 46092
+1689 232 16966
+1690 232 21948
+1691 232 64235
+1692 232 21579
+1693 232 21579
+1694 232 21579
+1695 232 21579
+1697 232 50349
+1698 232 49
+1699 232 24186
+1700 232 34987
+1701 232 57048
+1702 232 58334
+1971 232 26164
+1972 232 26164
+1973 232 26164
+1974 232 26164
+1975 232 26164
+1977 232 32257
+1978 232 57600
+1979 232 21818
+1980 232 17202
+1981 232 1070
+2047 232 8257
+2332 232 46528
+2333 232 46528
+2334 232 46528
+2335 232 46528
+2336 232 46528
+2337 232 46354
+2338 232 32969
+2339 232 60879
+2340 232 56348
+2341 232 53172
+2342 232 3125
+2408 232 7855
+2486 232 666
+2743 232 27852657
+190 233 1
+191 233 1
+192 233 1
+199 233 1
+200 233 1
+201 233 2
+202 233 1
+229 233 57719
+230 233 57719
+231 233 57719
+238 233 57720
+239 233 57720
+240 233 49919
+241 233 57721
+248 233 57719
+249 233 57719
+250 233 49917
+251 233 49918
+252 233 57719
+562 233 62793
+567 233 1
+568 233 60066
+569 233 62794
+576 233 1
+577 233 43174
+578 233 43175
+579 233 45902
+609 233 62793
+617 233 60065
+618 233 62793
+626 233 32643
+627 233 32645
+628 233 18481
+636 233 54991
+637 233 47189
+638 233 22496
+639 233 49917
+793 233 62793
+800 233 7802
+801 233 2346
+802 233 5074
+809 233 7801
+811 233 7803
+812 233 51358
+820 233 4017
+821 233 11819
+822 233 53028
+823 233 1671
+884 233 57719
+885 233 6745
+886 233 14547
+887 233 14929
+888 233 18946
+899 233 9473
+1536 233 26011
+1537 233 26011
+1572 233 26011
+1579 233 39510
+1580 233 39510
+1581 233 39510
+1616 233 50843
+1617 233 50320
+1624 233 54518
+1625 233 44864
+1626 233 60065
+1633 233 15008
+1634 233 57792
+1635 233 54187
+1636 233 33632
+1672 233 64998
+1680 233 58155
+1681 233 58678
+1689 233 2602
+1690 233 17376
+1691 233 44139
+1698 233 16024
+1699 233 41363
+1700 233 63958
+1701 233 22630
+1702 233 12123
+1951 233 60565
+1958 233 37222
+1960 233 4956
+1965 233 33690
+1967 233 22700
+1968 233 55978
+1969 233 37543
+1970 233 36017
+1971 233 58831
+1972 233 58831
+1973 233 58831
+1974 233 58831
+1977 233 43259
+1978 233 15990
+1979 233 13752
+1980 233 9113
+1981 233 39802
+2037 233 58831
+2038 233 58831
+2039 233 58831
+2040 233 58831
+2041 233 58831
+2043 233 47735
+2044 233 27687
+2045 233 2854
+2046 233 33652
+2047 233 48491
+2058 233 20812
+2307 233 45090
+2308 233 45090
+2309 233 45090
+2310 233 45090
+2311 233 47077
+2312 233 43958
+2313 233 29967
+2314 233 29967
+2316 233 10873
+2317 233 10873
+2318 233 10873
+2319 233 26355
+2320 233 12373
+2321 233 33936
+2322 233 23006
+2323 233 23006
+2324 233 23006
+2326 233 1782
+2327 233 1782
+2328 233 20576
+2329 233 57765
+2330 233 50380
+2331 233 26339
+2332 233 45166
+2333 233 45166
+2334 233 45166
+2335 233 45166
+2337 233 43885
+2338 233 1044
+2339 233 16633
+2340 233 16697
+2341 233 43362
+2342 233 43858
+2398 233 61227
+2399 233 61227
+2400 233 61227
+2401 233 61227
+2402 233 61227
+2404 233 21501
+2405 233 29649
+2406 233 13390
+2407 233 1687
+2408 233 65223
+2419 233 59977
+2476 233 13680
+2477 233 13680
+2478 233 13680
+2479 233 13680
+2480 233 13680
+2481 233 13680
+2482 233 17785
+2483 233 35343
+2484 233 64109
+2485 233 36794
+2486 233 51092
+2497 233 33931
+2509 233 41123
+2744 233 27852657
+191 234 1
+192 234 1
+200 234 60713
+201 234 21040
+202 234 21039
+241 234 63116
+247 234 63788
+248 234 7439
+249 234 12247
+250 234 25418
+251 234 5015
+252 234 28459
+628 234 19234
+639 234 59752
+820 234 51039
+821 234 65471
+822 234 19774
+823 234 28194
+888 234 62422
+1671 234 28201
+1672 234 28201
+1673 234 7167
+1674 234 7167
+1676 234 30653
+1677 234 30653
+1678 234 30653
+1679 234 14117
+1680 234 38146
+1681 234 9945
+1682 234 52575
+1683 234 52575
+1684 234 52575
+1686 234 35116
+1687 234 35116
+1688 234 368
+1689 234 51764
+1690 234 34875
+1691 234 26132
+1692 234 15419
+1693 234 15419
+1694 234 15419
+1695 234 15419
+1697 234 29000
+1698 234 65087
+1699 234 13491
+1700 234 54846
+1701 234 54247
+1702 234 64762
+1971 234 13314
+1972 234 13314
+1973 234 13314
+1974 234 13314
+1975 234 13314
+1977 234 21285
+1978 234 63636
+1979 234 58367
+1980 234 14573
+1981 234 14689
+2047 234 34570
+2332 234 60907
+2333 234 60907
+2334 234 60907
+2335 234 60907
+2336 234 60907
+2337 234 60907
+2338 234 55240
+2339 234 57879
+2340 234 60898
+2341 234 8104
+2342 234 22686
+2408 234 41094
+2486 234 56139
+2745 234 27852657
+192 235 1
+238 235 39488
+239 235 43786
+240 235 52637
+241 235 24909
+251 235 24909
+638 235 62876
+876 235 24675
+877 235 30372
+887 235 48386
+898 235 20832
+1414 235 24363
+1422 235 39343
+1423 235 19503
+1424 235 60661
+1626 235 35144
+1636 235 5172
+1688 235 53009
+1689 235 37591
+1690 235 63470
+1691 235 5471
+1701 235 29512
+1905 235 1985
+1915 235 57847
+1980 235 44446
+2035 235 56547
+2036 235 43610
+2046 235 23602
+2057 235 57929
+2256 235 46605
+2257 235 46605
+2258 235 20815
+2259 235 20815
+2261 235 41632
+2262 235 41632
+2263 235 41632
+2264 235 40975
+2265 235 9593
+2266 235 7988
+2267 235 5579
+2268 235 5579
+2269 235 5579
+2271 235 3596
+2272 235 3596
+2273 235 29279
+2274 235 56152
+2275 235 10387
+2276 235 3891
+2322 235 35246
+2323 235 35246
+2324 235 35246
+2325 235 35246
+2327 235 38158
+2328 235 50309
+2329 235 17988
+2330 235 30921
+2331 235 37077
+2341 235 25718
+2388 235 20155
+2389 235 20155
+2390 235 20155
+2391 235 20155
+2392 235 20155
+2394 235 19348
+2395 235 22378
+2396 235 16664
+2397 235 22750
+2407 235 3814
+2418 235 59942
+2466 235 51243
+2467 235 51243
+2468 235 51243
+2469 235 51243
+2470 235 51243
+2471 235 51243
+2472 235 52796
+2473 235 38337
+2474 235 26432
+2475 235 6548
+2485 235 21186
+2496 235 43860
+2508 235 46262
+2746 235 27852657
+192 236 1
+201 236 1
+228 236 35718
+229 236 18144
+230 236 18144
+231 236 6230
+240 236 18137
+250 236 18136
+637 236 23890
+801 236 30872
+802 236 51386
+811 236 16491
+821 236 11064
+886 236 5310
+1571 236 33434
+1572 236 33434
+1573 236 25938
+1574 236 25938
+1576 236 35
+1577 236 35
+1578 236 35
+1579 236 11439
+1580 236 2149
+1581 236 34236
+1618 236 5970
+1619 236 5970
+1620 236 5970
+1622 236 40250
+1623 236 40250
+1624 236 20550
+1625 236 20379
+1626 236 4824
+1635 236 36109
+1673 236 36577
+1674 236 36577
+1675 236 36577
+1676 236 36577
+1678 236 48004
+1679 236 27294
+1680 236 27835
+1681 236 61358
+1690 236 63902
+1700 236 8427
+1952 236 33347
+1953 236 33347
+1954 236 33347
+1955 236 33347
+1956 236 33347
+1958 236 29396
+1959 236 62826
+1960 236 19800
+1969 236 58877
+1979 236 61843
+2045 236 33148
+2313 236 5215
+2314 236 5215
+2315 236 5215
+2316 236 5215
+2317 236 5215
+2318 236 5215
+2319 236 37703
+2320 236 19912
+2321 236 39372
+2330 236 17221
+2340 236 61058
+2406 236 2367
+2484 236 14972
+2747 236 27852657
+193 237 1
+208 237 50782
+215 237 65326
+223 237 27542
+232 237 44870
+242 237 44869
+629 237 2974
+859 237 65421
+868 237 1844
+878 237 37143
+889 237 60769
+1398 237 50221
+1406 237 13316
+1415 237 13316
+1627 237 30878
+1658 237 62704
+1665 237 22657
+1673 237 8243
+1682 237 57521
+1692 237 36014
+1906 237 22333
+1971 237 32850
+2018 237 61996
+2027 237 58526
+2037 237 34952
+2048 237 31030
+2162 237 10601
+2169 237 10601
+2177 237 41409
+2178 237 41409
+2183 237 48727
+2187 237 48727
+2192 237 48727
+2198 237 30188
+2205 237 43382
+2213 237 32781
+2222 237 60138
+2223 237 60138
+2225 237 60138
+2232 237 22716
+2237 237 22716
+2243 237 65493
+2250 237 59667
+2258 237 2540
+2267 237 26614
+2277 237 56916
+2278 237 56916
+2280 237 56916
+2283 237 56916
+2292 237 23398
+2298 237 48750
+2305 237 51337
+2313 237 49218
+2322 237 20273
+2332 237 56116
+2343 237 17794
+2344 237 17794
+2346 237 17794
+2349 237 17794
+2353 237 17794
+2364 237 13507
+2371 237 9416
+2379 237 36393
+2388 237 59746
+2398 237 10327
+2409 237 54801
+2421 237 24217
+2422 237 24217
+2424 237 24217
+2427 237 24217
+2431 237 24217
+2436 237 24217
+2442 237 25361
+2449 237 25212
+2457 237 17596
+2466 237 63604
+2476 237 16003
+2487 237 58029
+2499 237 22986
+2748 237 27852657
+193 238 1
+194 238 1
+200 238 25927
+201 238 57482
+202 238 57482
+241 238 29438
+244 238 1
+247 238 3114
+248 238 32276
+249 238 6349
+250 238 29610
+251 238 4171
+252 238 32215
+628 238 40607
+639 238 27567
+820 238 65303
+821 238 14582
+822 238 26763
+823 238 56553
+888 238 61201
+1662 238 454
+1668 238 36229
+1669 238 54927
+1670 238 1144
+1671 238 7535
+1672 238 7535
+1673 238 50241
+1674 238 6922
+1676 238 6948
+1677 238 17591
+1678 238 30422
+1679 238 41133
+1680 238 56915
+1681 238 49380
+1682 238 21100
+1683 238 37567
+1684 238 23766
+1686 238 679
+1687 238 18093
+1688 238 3321
+1689 238 38189
+1690 238 37780
+1691 238 36922
+1692 238 21459
+1693 238 35013
+1694 238 4625
+1695 238 56392
+1697 238 2172
+1698 238 29917
+1699 238 26508
+1700 238 15056
+1701 238 29597
+1702 238 25826
+1971 238 53600
+1972 238 43400
+1973 238 49493
+1974 238 30510
+1975 238 52286
+1977 238 28251
+1978 238 35502
+1979 238 24166
+1980 238 8119
+1981 238 29945
+2047 238 44026
+2332 238 56948
+2333 238 43408
+2334 238 48175
+2335 238 16217
+2336 238 4879
+2337 238 19167
+2338 238 14942
+2339 238 27367
+2340 238 753
+2341 238 42253
+2342 238 48931
+2408 238 12705
+2486 238 51890
+2749 238 27852657
+194 239 1
+209 239 50782
+216 239 65326
+224 239 27542
+233 239 44870
+243 239 44869
+630 239 2974
+860 239 65421
+869 239 1844
+879 239 37143
+890 239 60769
+1399 239 50221
+1407 239 13316
+1416 239 13316
+1628 239 30878
+1659 239 62704
+1666 239 22657
+1674 239 8243
+1683 239 57521
+1693 239 36014
+1907 239 22333
+1972 239 32850
+2019 239 61996
+2028 239 58526
+2038 239 34952
+2049 239 31030
+2163 239 10601
+2170 239 10601
+2178 239 41409
+2179 239 41409
+2184 239 48727
+2188 239 48727
+2193 239 48727
+2199 239 30188
+2206 239 43382
+2214 239 32781
+2223 239 60138
+2224 239 60138
+2226 239 60138
+2233 239 22716
+2238 239 22716
+2244 239 65493
+2251 239 59667
+2259 239 2540
+2268 239 26614
+2278 239 56916
+2279 239 56916
+2281 239 56916
+2284 239 56916
+2293 239 23398
+2299 239 48750
+2306 239 51337
+2314 239 49218
+2323 239 20273
+2333 239 56116
+2344 239 17794
+2345 239 17794
+2347 239 17794
+2350 239 17794
+2354 239 17794
+2365 239 13507
+2372 239 9416
+2380 239 36393
+2389 239 59746
+2399 239 10327
+2410 239 54801
+2422 239 24217
+2423 239 24217
+2425 239 24217
+2428 239 24217
+2432 239 24217
+2437 239 24217
+2443 239 25361
+2450 239 25212
+2458 239 17596
+2467 239 63604
+2477 239 16003
+2488 239 58029
+2500 239 22986
+2750 239 27852657
+194 240 1
+200 240 26954
+201 240 38996
+202 240 38996
+241 240 65149
+248 240 44187
+249 240 56625
+250 240 37368
+251 240 31994
+252 240 5841
+628 240 45901
+639 240 10522
+821 240 15876
+822 240 13638
+823 240 20749
+888 240 16068
+1662 240 28332
+1669 240 25865
+1670 240 16981
+1671 240 50893
+1672 240 50893
+1673 240 20073
+1674 240 9057
+1676 240 33789
+1677 240 19956
+1678 240 60259
+1679 240 57299
+1680 240 21352
+1681 240 35980
+1682 240 33637
+1683 240 36435
+1684 240 33019
+1686 240 33903
+1687 240 20899
+1688 240 47346
+1689 240 35965
+1690 240 7523
+1691 240 20687
+1692 240 58460
+1693 240 64285
+1694 240 29118
+1695 240 29118
+1697 240 8268
+1698 240 32375
+1699 240 52953
+1700 240 15234
+1701 240 42618
+1702 240 9395
+1971 240 7848
+1972 240 63565
+1973 240 41449
+1974 240 41449
+1975 240 60814
+1977 240 54419
+1978 240 18811
+1979 240 12553
+1980 240 60483
+1981 240 13854
+2047 240 46390
+2332 240 16453
+2333 240 49210
+2334 240 23573
+2335 240 23573
+2336 240 42237
+2337 240 28774
+2338 240 14960
+2339 240 24310
+2340 240 23118
+2341 240 17336
+2342 240 59527
+2408 240 34371
+2486 240 41592
+2751 240 27852657
+195 241 1
+210 241 50782
+217 241 65326
+225 241 27542
+234 241 44870
+244 241 44869
+631 241 2974
+861 241 65421
+870 241 1844
+880 241 37143
+891 241 60769
+1400 241 50221
+1408 241 13316
+1417 241 13316
+1629 241 30878
+1660 241 62704
+1667 241 22657
+1675 241 8243
+1684 241 57521
+1694 241 36014
+1908 241 22333
+1973 241 32850
+2020 241 61996
+2029 241 58526
+2039 241 34952
+2050 241 31030
+2164 241 10601
+2171 241 10601
+2180 241 41409
+2181 241 41409
+2185 241 48727
+2189 241 48727
+2194 241 48727
+2200 241 30188
+2207 241 43382
+2215 241 32781
+2225 241 60138
+2226 241 60138
+2227 241 60138
+2234 241 22716
+2239 241 22716
+2245 241 65493
+2252 241 59667
+2260 241 2540
+2269 241 26614
+2280 241 56916
+2281 241 56916
+2282 241 56916
+2285 241 56916
+2294 241 23398
+2300 241 48750
+2307 241 51337
+2315 241 49218
+2324 241 20273
+2334 241 56116
+2346 241 17794
+2347 241 17794
+2348 241 17794
+2351 241 17794
+2355 241 17794
+2366 241 13507
+2373 241 9416
+2381 241 36393
+2390 241 59746
+2400 241 10327
+2411 241 54801
+2424 241 24217
+2425 241 24217
+2426 241 24217
+2429 241 24217
+2433 241 24217
+2438 241 24217
+2444 241 25361
+2451 241 25212
+2459 241 17596
+2468 241 63604
+2478 241 16003
+2489 241 58029
+2501 241 22986
+2752 241 27852657
+195 242 1
+244 242 65520
+605 242 9853
+606 242 23304
+614 242 49085
+621 242 25700
+623 242 15471
+626 242 54419
+627 242 54419
+628 242 54419
+629 242 34666
+630 242 34666
+631 242 42740
+632 242 15027
+635 242 20606
+636 242 2942
+637 242 2942
+638 242 57361
+639 242 2942
+813 242 34666
+814 242 34666
+815 242 42741
+816 242 15027
+817 242 49491
+819 242 20606
+820 242 2942
+821 242 2942
+822 242 57361
+823 242 5884
+888 242 2942
+1660 242 58834
+1661 242 43196
+1662 242 57087
+1663 242 42246
+1667 242 29440
+1668 242 6014
+1669 242 19905
+1670 242 9327
+1671 242 194
+1672 242 194
+1673 242 267
+1674 242 267
+1676 242 54733
+1677 242 60513
+1678 242 4826
+1679 242 24884
+1680 242 53783
+1681 242 53589
+1682 242 36439
+1683 242 36439
+1684 242 16090
+1686 242 49686
+1687 242 8717
+1688 242 57145
+1689 242 51126
+1690 242 6979
+1691 242 18911
+1692 242 57614
+1693 242 57614
+1694 242 38426
+1695 242 1757
+1697 242 47778
+1698 242 25470
+1699 242 30221
+1700 242 14804
+1701 242 37070
+1702 242 18159
+1971 242 60454
+1972 242 60454
+1973 242 7835
+1974 242 44264
+1975 242 47567
+1977 242 50250
+1978 242 54694
+1979 242 31850
+1980 242 38473
+1981 242 20655
+2047 242 2496
+2332 242 30867
+2333 242 30867
+2334 242 55661
+2335 242 60892
+2336 242 6037
+2337 242 63125
+2338 242 3770
+2339 242 54328
+2340 242 48894
+2341 242 33314
+2342 242 17946
+2408 242 41377
+2486 242 11644
+2753 242 27852657
+196 243 1
+211 243 50782
+218 243 65326
+226 243 27542
+235 243 44870
+245 243 44869
+632 243 2974
+862 243 65421
+871 243 1844
+881 243 37143
+892 243 60769
+1401 243 50221
+1409 243 13316
+1418 243 13316
+1630 243 30878
+1661 243 62704
+1668 243 22657
+1676 243 8243
+1685 243 57521
+1695 243 36014
+1909 243 22333
+1974 243 32850
+2021 243 61996
+2030 243 58526
+2040 243 34952
+2051 243 31030
+2165 243 10601
+2172 243 10601
+2183 243 41409
+2184 243 41409
+2186 243 48727
+2190 243 48727
+2195 243 48727
+2201 243 30188
+2208 243 43382
+2216 243 32781
+2228 243 60138
+2229 243 60138
+2230 243 60138
+2235 243 22716
+2240 243 22716
+2246 243 65493
+2253 243 59667
+2261 243 2540
+2270 243 26614
+2283 243 56916
+2284 243 56916
+2285 243 56916
+2286 243 56916
+2295 243 23398
+2301 243 48750
+2308 243 51337
+2316 243 49218
+2325 243 20273
+2335 243 56116
+2349 243 17794
+2350 243 17794
+2351 243 17794
+2352 243 17794
+2356 243 17794
+2367 243 13507
+2374 243 9416
+2382 243 36393
+2391 243 59746
+2401 243 10327
+2412 243 54801
+2427 243 24217
+2428 243 24217
+2429 243 24217
+2430 243 24217
+2434 243 24217
+2439 243 24217
+2445 243 25361
+2452 243 25212
+2460 243 17596
+2469 243 63604
+2479 243 16003
+2490 243 58029
+2502 243 22986
+2754 243 27852657
+196 244 1
+2341 244 65520
+2755 244 27852657
+197 245 1
+212 245 50782
+219 245 65326
+227 245 27542
+236 245 44870
+246 245 44869
+633 245 2974
+863 245 65421
+872 245 1844
+882 245 37143
+893 245 60769
+1402 245 50221
+1410 245 13316
+1419 245 13316
+1631 245 30878
+1662 245 62704
+1669 245 22657
+1677 245 8243
+1686 245 57521
+1696 245 36014
+1910 245 22333
+1975 245 32850
+2022 245 61996
+2031 245 58526
+2041 245 34952
+2052 245 31030
+2166 245 10601
+2173 245 10601
+2187 245 41409
+2188 245 41409
+2190 245 48727
+2191 245 48727
+2196 245 48727
+2202 245 30188
+2209 245 43382
+2217 245 32781
+2232 245 60138
+2233 245 60138
+2234 245 60138
+2236 245 22716
+2241 245 22716
+2247 245 65493
+2254 245 59667
+2262 245 2540
+2271 245 26614
+2287 245 56916
+2288 245 56916
+2289 245 56916
+2290 245 56916
+2296 245 23398
+2302 245 48750
+2309 245 51337
+2317 245 49218
+2326 245 20273
+2336 245 56116
+2353 245 17794
+2354 245 17794
+2355 245 17794
+2356 245 17794
+2357 245 17794
+2368 245 13507
+2375 245 9416
+2383 245 36393
+2392 245 59746
+2402 245 10327
+2413 245 54801
+2431 245 24217
+2432 245 24217
+2433 245 24217
+2434 245 24217
+2435 245 24217
+2440 245 24217
+2446 245 25361
+2453 245 25212
+2461 245 17596
+2470 245 63604
+2480 245 16003
+2491 245 58029
+2503 245 22986
+2756 245 27852657
+197 246 1
+200 246 56220
+201 246 36376
+202 246 36376
+241 246 40097
+247 246 35859
+248 246 13303
+249 246 22604
+250 246 28557
+251 246 8790
+252 246 5069
+628 246 13382
+639 246 36952
+820 246 25092
+821 246 16934
+822 246 52081
+823 246 60624
+888 246 28741
+1670 246 12749
+1671 246 26774
+1672 246 26774
+1673 246 36979
+1674 246 36979
+1676 246 36998
+1677 246 36998
+1678 246 38757
+1679 246 39005
+1680 246 34088
+1681 246 7314
+1682 246 20894
+1683 246 20894
+1684 246 20894
+1686 246 15880
+1687 246 4636
+1688 246 56671
+1689 246 50393
+1690 246 34990
+1691 246 46270
+1692 246 43308
+1693 246 43308
+1694 246 43308
+1695 246 43308
+1697 246 36522
+1698 246 46985
+1699 246 25890
+1700 246 13797
+1701 246 9029
+1702 246 44677
+1971 246 21248
+1972 246 21248
+1973 246 21248
+1974 246 21248
+1975 246 21248
+1977 246 21391
+1978 246 14626
+1979 246 19389
+1980 246 23699
+1981 246 29147
+2047 246 1045
+2332 246 50628
+2333 246 50628
+2334 246 50628
+2335 246 50628
+2336 246 50628
+2337 246 50628
+2338 246 30191
+2339 246 26888
+2340 246 3691
+2341 246 1696
+2342 246 36464
+2408 246 57955
+2486 246 42875
+2757 246 27852657
+198 247 1
+213 247 50782
+220 247 65326
+228 247 27542
+237 247 44870
+247 247 44869
+634 247 2974
+864 247 65421
+873 247 1844
+883 247 37143
+894 247 60769
+1403 247 50221
+1411 247 13316
+1420 247 13316
+1632 247 30878
+1663 247 62704
+1670 247 22657
+1678 247 8243
+1687 247 57521
+1697 247 36014
+1911 247 22333
+1976 247 32850
+2023 247 61996
+2032 247 58526
+2042 247 34952
+2053 247 31030
+2167 247 10601
+2174 247 10601
+2192 247 41409
+2193 247 41409
+2195 247 48727
+2196 247 48727
+2197 247 48727
+2203 247 30188
+2210 247 43382
+2218 247 32781
+2237 247 60138
+2238 247 60138
+2239 247 60138
+2241 247 22716
+2242 247 22716
+2248 247 65493
+2255 247 59667
+2263 247 2540
+2272 247 26614
+2292 247 56916
+2293 247 56916
+2294 247 56916
+2295 247 56916
+2297 247 23398
+2303 247 48750
+2310 247 51337
+2318 247 49218
+2327 247 20273
+2337 247 56116
+2358 247 17794
+2359 247 17794
+2360 247 17794
+2361 247 17794
+2362 247 17794
+2369 247 13507
+2376 247 9416
+2384 247 36393
+2393 247 59746
+2403 247 10327
+2414 247 54801
+2436 247 24217
+2437 247 24217
+2438 247 24217
+2439 247 24217
+2440 247 24217
+2441 247 24217
+2447 247 25361
+2454 247 25212
+2462 247 17596
+2471 247 63604
+2481 247 16003
+2492 247 58029
+2504 247 22986
+2758 247 27852657
+198 248 1
+200 248 47936
+201 248 54446
+202 248 54446
+241 248 6054
+247 248 44904
+248 248 21074
+249 248 38659
+250 248 42584
+251 248 7857
+252 248 56249
+628 248 4930
+639 248 12225
+820 248 65362
+821 248 30235
+822 248 60653
+823 248 42735
+888 248 21238
+1670 248 52772
+1671 248 23705
+1672 248 23705
+1673 248 6772
+1674 248 6772
+1676 248 38365
+1677 248 38365
+1678 248 36606
+1679 248 55125
+1680 248 6502
+1681 248 48318
+1682 248 38131
+1683 248 38131
+1684 248 38131
+1686 248 18827
+1687 248 30071
+1688 248 54745
+1689 248 15666
+1690 248 21438
+1691 248 44236
+1692 248 47188
+1693 248 47188
+1694 248 47188
+1695 248 47188
+1697 248 65314
+1698 248 61667
+1699 248 12871
+1700 248 64435
+1701 248 48676
+1702 248 21518
+1971 248 50154
+1972 248 50154
+1973 248 50154
+1974 248 50154
+1975 248 50154
+1977 248 32423
+1978 248 47591
+1979 248 24698
+1980 248 42610
+1981 248 51315
+2047 248 29406
+2332 248 3731
+2333 248 3731
+2334 248 3731
+2335 248 3731
+2336 248 3731
+2337 248 3731
+2338 248 14782
+2339 248 6426
+2340 248 10974
+2341 248 589
+2342 248 19958
+2408 248 5374
+2486 248 62906
+2759 248 27852657
+199 249 1
+214 249 50782
+221 249 65326
+229 249 27542
+238 249 44870
+248 249 44869
+635 249 2974
+865 249 65421
+874 249 1844
+884 249 37143
+895 249 60769
+1404 249 50221
+1412 249 13316
+1421 249 13316
+1633 249 30878
+1664 249 62704
+1671 249 22657
+1679 249 8243
+1688 249 57521
+1698 249 36014
+1912 249 22333
+1977 249 32850
+2024 249 61996
+2033 249 58526
+2043 249 34952
+2054 249 31030
+2168 249 10601
+2175 249 10601
+2198 249 41409
+2199 249 41409
+2201 249 48727
+2202 249 48727
+2203 249 48727
+2204 249 30188
+2211 249 43382
+2219 249 32781
+2243 249 60138
+2244 249 60138
+2245 249 60138
+2247 249 22716
+2248 249 22716
+2249 249 65493
+2256 249 59667
+2264 249 2540
+2273 249 26614
+2298 249 56916
+2299 249 56916
+2300 249 56916
+2301 249 56916
+2303 249 23398
+2304 249 48750
+2311 249 51337
+2319 249 49218
+2328 249 20273
+2338 249 56116
+2364 249 17794
+2365 249 17794
+2366 249 17794
+2367 249 17794
+2368 249 17794
+2370 249 13507
+2377 249 9416
+2385 249 36393
+2394 249 59746
+2404 249 10327
+2415 249 54801
+2442 249 24217
+2443 249 24217
+2444 249 24217
+2445 249 24217
+2446 249 24217
+2447 249 24217
+2448 249 25361
+2455 249 25212
+2463 249 17596
+2472 249 63604
+2482 249 16003
+2493 249 58029
+2505 249 22986
+2760 249 27852657
+199 250 1
+200 250 58152
+201 250 64391
+202 250 64391
+241 250 54740
+247 250 8155
+248 250 8153
+249 250 15523
+250 250 38979
+251 250 20117
+252 250 29768
+628 250 20423
+639 250 52414
+820 250 36345
+821 250 27598
+822 250 45774
+823 250 9159
+888 250 52034
+1671 250 27596
+1672 250 27596
+1673 250 35507
+1674 250 35507
+1676 250 21677
+1677 250 21677
+1678 250 21677
+1679 250 24308
+1680 250 62056
+1681 250 34460
+1682 250 11522
+1683 250 11522
+1684 250 11522
+1686 250 42610
+1687 250 42610
+1688 250 33274
+1689 250 3633
+1690 250 5697
+1691 250 24600
+1692 250 45087
+1693 250 45087
+1694 250 45087
+1695 250 45087
+1697 250 53022
+1698 250 23519
+1699 250 35417
+1700 250 43143
+1701 250 13605
+1702 250 35154
+1971 250 63986
+1972 250 63986
+1973 250 63986
+1974 250 63986
+1975 250 63986
+1977 250 45584
+1978 250 47510
+1979 250 35134
+1980 250 3149
+1981 250 10107
+2047 250 21548
+2332 250 46063
+2333 250 46063
+2334 250 46063
+2335 250 46063
+2336 250 46063
+2337 250 46063
+2338 250 48863
+2339 250 16395
+2340 250 12958
+2341 250 5566
+2342 250 49339
+2408 250 38488
+2486 250 38622
+2761 250 27852657
+200 251 1
+221 251 50782
+222 251 65326
+230 251 27542
+239 251 44870
+249 251 44869
+636 251 2974
+866 251 65421
+875 251 1844
+885 251 37143
+896 251 60769
+1405 251 50221
+1413 251 13316
+1422 251 13316
+1634 251 30878
+1671 251 62704
+1672 251 22657
+1680 251 8243
+1689 251 57521
+1699 251 36014
+1913 251 22333
+1978 251 32850
+2025 251 61996
+2034 251 58526
+2044 251 34952
+2055 251 31030
+2175 251 10601
+2176 251 10601
+2205 251 41409
+2206 251 41409
+2208 251 48727
+2209 251 48727
+2210 251 48727
+2211 251 30188
+2212 251 43382
+2220 251 32781
+2250 251 60138
+2251 251 60138
+2252 251 60138
+2254 251 22716
+2255 251 22716
+2256 251 65493
+2257 251 59667
+2265 251 2540
+2274 251 26614
+2305 251 56916
+2306 251 56916
+2307 251 56916
+2308 251 56916
+2310 251 23398
+2311 251 48750
+2312 251 51337
+2320 251 49218
+2329 251 20273
+2339 251 56116
+2371 251 17794
+2372 251 17794
+2373 251 17794
+2374 251 17794
+2375 251 17794
+2377 251 13507
+2378 251 9416
+2386 251 36393
+2395 251 59746
+2405 251 10327
+2416 251 54801
+2449 251 24217
+2450 251 24217
+2451 251 24217
+2452 251 24217
+2453 251 24217
+2454 251 24217
+2455 251 25361
+2456 251 25212
+2464 251 17596
+2473 251 63604
+2483 251 16003
+2494 251 58029
+2506 251 22986
+2762 251 27852657
+200 252 1
+237 252 49655
+238 252 47146
+239 252 47147
+240 252 43109
+241 252 41161
+251 252 41161
+638 252 9959
+810 252 15448
+811 252 34405
+812 252 47778
+822 252 7208
+887 252 38410
+1616 252 55968
+1617 252 55968
+1618 252 53684
+1619 252 53684
+1621 252 60911
+1622 252 60911
+1623 252 60911
+1624 252 15964
+1625 252 63589
+1626 252 7621
+1627 252 26300
+1628 252 26300
+1629 252 26300
+1631 252 41492
+1632 252 41492
+1633 252 15026
+1634 252 30582
+1635 252 9177
+1636 252 1556
+1682 252 1887
+1683 252 1887
+1684 252 1887
+1685 252 1887
+1687 252 62464
+1688 252 13835
+1689 252 21410
+1690 252 26514
+1691 252 21556
+1701 252 5510
+1961 252 4230
+1962 252 4230
+1963 252 4230
+1964 252 4230
+1965 252 4230
+1967 252 43084
+1968 252 37295
+1969 252 60907
+1970 252 24668
+1980 252 3603
+2046 252 34457
+2322 252 35266
+2323 252 35266
+2324 252 35266
+2325 252 35266
+2326 252 35266
+2327 252 35266
+2328 252 2200
+2329 252 34759
+2330 252 2016
+2331 252 62821
+2341 252 12285
+2407 252 59095
+2485 252 3689
+2763 252 27852657
+201 253 1
+229 253 50782
+230 253 65326
+231 253 27542
+240 253 44870
+250 253 44869
+637 253 2974
+867 253 65421
+876 253 1844
+886 253 37143
+897 253 60769
+1413 253 50221
+1414 253 13316
+1423 253 13316
+1635 253 30878
+1679 253 62704
+1680 253 22657
+1681 253 8243
+1690 253 57521
+1700 253 36014
+1914 253 22333
+1979 253 32850
+2026 253 61996
+2035 253 58526
+2045 253 34952
+2056 253 31030
+2211 253 10601
+2212 253 10601
+2213 253 41409
+2214 253 41409
+2216 253 48727
+2217 253 48727
+2218 253 48727
+2219 253 30188
+2220 253 43382
+2221 253 32781
+2258 253 60138
+2259 253 60138
+2260 253 60138
+2262 253 22716
+2263 253 22716
+2264 253 65493
+2265 253 59667
+2266 253 2540
+2275 253 26614
+2313 253 56916
+2314 253 56916
+2315 253 56916
+2316 253 56916
+2318 253 23398
+2319 253 48750
+2320 253 51337
+2321 253 49218
+2330 253 20273
+2340 253 56116
+2379 253 17794
+2380 253 17794
+2381 253 17794
+2382 253 17794
+2383 253 17794
+2385 253 13507
+2386 253 9416
+2387 253 36393
+2396 253 59746
+2406 253 10327
+2417 253 54801
+2457 253 24217
+2458 253 24217
+2459 253 24217
+2460 253 24217
+2461 253 24217
+2462 253 24217
+2463 253 25361
+2464 253 25212
+2465 253 17596
+2474 253 63604
+2484 253 16003
+2495 253 58029
+2507 253 22986
+2764 253 27852657
+201 254 1
+202 254 1
+237 254 35718
+238 254 18144
+239 254 18144
+240 254 6230
+241 254 18137
+251 254 18136
+638 254 23890
+810 254 30872
+811 254 51386
+812 254 16491
+822 254 11064
+887 254 5310
+1616 254 33434
+1617 254 33434
+1618 254 25938
+1619 254 25938
+1621 254 35
+1622 254 35
+1623 254 35
+1624 254 11439
+1625 254 2149
+1626 254 34236
+1627 254 5970
+1628 254 5970
+1629 254 5970
+1631 254 40250
+1632 254 40250
+1633 254 20550
+1634 254 20379
+1635 254 4824
+1636 254 36109
+1682 254 36577
+1683 254 36577
+1684 254 36577
+1685 254 36577
+1687 254 48004
+1688 254 27294
+1689 254 27835
+1690 254 61358
+1691 254 63902
+1701 254 8427
+1961 254 33347
+1962 254 33347
+1963 254 33347
+1964 254 33347
+1965 254 33347
+1967 254 29396
+1968 254 62826
+1969 254 19800
+1970 254 58877
+1980 254 61843
+2046 254 33148
+2322 254 5215
+2323 254 5215
+2324 254 5215
+2325 254 5215
+2326 254 5215
+2327 254 5215
+2328 254 37703
+2329 254 19912
+2330 254 39372
+2331 254 17221
+2341 254 61058
+2407 254 2367
+2485 254 14972
+2765 254 27852657
+202 255 1
+238 255 50782
+239 255 65326
+240 255 27542
+241 255 44870
+251 255 44869
+638 255 2974
+876 255 65421
+877 255 1844
+887 255 37143
+898 255 60769
+1422 255 50221
+1423 255 13316
+1424 255 13316
+1636 255 30878
+1688 255 62704
+1689 255 22657
+1690 255 8243
+1691 255 57521
+1701 255 36014
+1915 255 22333
+1980 255 32850
+2035 255 61996
+2036 255 58526
+2046 255 34952
+2057 255 31030
+2256 255 10601
+2257 255 10601
+2258 255 41409
+2259 255 41409
+2261 255 48727
+2262 255 48727
+2263 255 48727
+2264 255 30188
+2265 255 43382
+2266 255 32781
+2267 255 60138
+2268 255 60138
+2269 255 60138
+2271 255 22716
+2272 255 22716
+2273 255 65493
+2274 255 59667
+2275 255 2540
+2276 255 26614
+2322 255 56916
+2323 255 56916
+2324 255 56916
+2325 255 56916
+2327 255 23398
+2328 255 48750
+2329 255 51337
+2330 255 49218
+2331 255 20273
+2341 255 56116
+2388 255 17794
+2389 255 17794
+2390 255 17794
+2391 255 17794
+2392 255 17794
+2394 255 13507
+2395 255 9416
+2396 255 36393
+2397 255 59746
+2407 255 10327
+2418 255 54801
+2466 255 24217
+2467 255 24217
+2468 255 24217
+2469 255 24217
+2470 255 24217
+2471 255 24217
+2472 255 25361
+2473 255 25212
+2474 255 17596
+2475 255 63604
+2485 255 16003
+2496 255 58029
+2508 255 22986
+2766 255 27852657
+203 256 1
+210 256 5661
+217 256 52649
+225 256 48296
+234 256 13971
+244 256 13971
+631 256 11795
+796 256 56712
+805 256 20357
+815 256 9009
+880 256 11185
+1487 256 44686
+1510 256 36229
+1514 256 54735
+1519 256 41202
+1525 256 38198
+1532 256 38198
+1540 256 63921
+1541 256 60074
+1545 256 32072
+1549 256 33607
+1554 256 23281
+1560 256 48652
+1567 256 21854
+1575 256 49177
+1585 256 59920
+1586 256 23474
+1587 256 13089
+1594 256 39402
+1599 256 30310
+1605 256 17276
+1612 256 59468
+1620 256 57307
+1629 256 8130
+1640 256 39834
+1641 256 9131
+1642 256 13910
+1645 256 156
+1654 256 58818
+1660 256 41771
+1667 256 25191
+1675 256 47375
+1684 256 12526
+1694 256 9642
+1919 256 31074
+1920 256 18794
+1921 256 47003
+1924 256 28020
+1928 256 521
+1939 256 30725
+1946 256 61641
+1954 256 14513
+1963 256 46984
+1973 256 32892
+2039 256 53996
+2280 256 21976
+2281 256 536
+2282 256 30940
+2285 256 64503
+2289 256 36125
+2294 256 6493
+2300 256 25945
+2307 256 48506
+2315 256 62973
+2324 256 38991
+2334 256 25894
+2400 256 58952
+2478 256 28426
+2767 256 27852657
+204 257 1
+508 257 9853
+511 257 20114
+523 257 59101
+542 257 45901
+547 257 10525
+559 257 29266
+565 257 29266
+573 257 29266
+583 257 64835
+584 257 64835
+585 257 45215
+586 257 13457
+598 257 11904
+605 257 59606
+613 257 59606
+622 257 23351
+632 257 59606
+764 257 64835
+765 257 64835
+766 257 45215
+767 257 13456
+771 257 59192
+782 257 11904
+789 257 59606
+797 257 59606
+806 257 23351
+816 257 53691
+881 257 59606
+1484 257 49883
+1488 257 40591
+1493 257 25795
+1510 257 14299
+1511 257 56394
+1515 257 47102
+1520 257 6120
+1526 257 29473
+1533 257 29473
+1543 257 21576
+1544 257 21576
+1546 257 12982
+1550 257 9276
+1555 257 62390
+1561 257 31418
+1568 257 17463
+1576 257 53511
+1588 257 28060
+1589 257 28060
+1590 257 28938
+1595 257 24859
+1600 257 17629
+1606 257 47489
+1613 257 45768
+1621 257 41310
+1630 257 53320
+1643 257 49817
+1644 257 49817
+1645 257 50695
+1646 257 55277
+1655 257 2519
+1661 257 53392
+1668 257 1283
+1676 257 51867
+1685 257 17662
+1695 257 29863
+1922 257 5010
+1923 257 5010
+1924 257 544
+1925 257 38590
+1929 257 58441
+1940 257 63039
+1947 257 45839
+1955 257 31310
+1964 257 47584
+1974 257 10065
+2040 257 45723
+2283 257 57173
+2284 257 57173
+2285 257 34442
+2286 257 39673
+2290 257 15105
+2295 257 33200
+2301 257 31707
+2308 257 49289
+2316 257 57343
+2325 257 37704
+2335 257 39967
+2401 257 54936
+2479 257 35488
+2768 257 27852657
+205 258 1
+207 258 59727
+589 258 41525
+590 258 20236
+591 258 20236
+606 258 65478
+614 258 12089
+621 258 3500
+623 258 14455
+626 258 14913
+627 258 14913
+628 258 14913
+629 258 34422
+630 258 26675
+631 258 35055
+632 258 43515
+635 258 34339
+636 258 54465
+637 258 54465
+638 258 3857
+639 258 54465
+813 258 34422
+814 258 26675
+815 258 35055
+816 258 43515
+817 258 47857
+819 258 34339
+820 258 54465
+821 258 54465
+822 258 3857
+823 258 43409
+888 258 54465
+1638 258 49055
+1639 258 49055
+1640 258 51736
+1641 258 40230
+1642 258 56696
+1643 258 2422
+1644 258 16197
+1645 258 25982
+1646 258 34807
+1647 258 2422
+1648 258 16197
+1649 258 47740
+1650 258 5273
+1651 258 35987
+1652 258 2422
+1653 258 16197
+1654 258 56868
+1655 258 18164
+1656 258 38170
+1657 258 2183
+1660 258 18702
+1661 258 33501
+1662 258 26427
+1663 258 36407
+1667 258 27669
+1668 258 42468
+1669 258 35394
+1670 258 50306
+1671 258 14792
+1672 258 14792
+1673 258 27789
+1674 258 27323
+1676 258 1583
+1677 258 6586
+1678 258 44145
+1679 258 19029
+1680 258 58328
+1681 258 43536
+1682 258 29538
+1683 258 29072
+1684 258 55826
+1686 258 58161
+1687 258 25786
+1688 258 31085
+1689 258 4195
+1690 258 54432
+1691 258 10896
+1692 258 27619
+1693 258 27591
+1694 258 50163
+1695 258 21545
+1697 258 33584
+1698 258 40556
+1699 258 26997
+1700 258 5454
+1701 258 34707
+1702 258 23811
+1971 258 50681
+1972 258 37687
+1973 258 4934
+1974 258 19669
+1975 258 2924
+1977 258 29555
+1978 258 17817
+1979 258 24064
+1980 258 20117
+1981 258 58660
+2047 258 34849
+2332 258 41416
+2333 258 51253
+2334 258 1552
+2335 258 56985
+2336 258 19047
+2337 258 49616
+2338 258 21820
+2339 258 31761
+2340 258 24529
+2341 258 58769
+2342 258 26080
+2408 258 56104
+2486 258 18383
+2769 258 27852657
+206 259 1
+587 259 1
+588 259 1
+589 259 1
+590 259 1
+591 259 1
+1647 259 54601
+1648 259 54601
+1649 259 54601
+1650 259 54601
+1651 259 54601
+1652 259 54601
+1653 259 54601
+1654 259 54601
+1655 259 54601
+1656 259 43681
+1657 259 54601
+1695 259 54601
+1974 259 54601
+1975 259 32761
+2332 259 47776
+2333 259 47776
+2334 259 47776
+2335 259 30031
+2336 259 42317
+2337 259 42316
+2486 259 23888
+2770 259 27852657
+207 260 1
+1693 260 46993
+1694 260 49307
+1697 260 53855
+1698 260 15705
+1699 260 15705
+1700 260 15705
+1701 260 15705
+1702 260 15705
+1981 260 32371
+2044 260 52969
+2045 260 64255
+2046 260 5322
+2047 260 27991
+2058 260 11325
+2302 260 25785
+2308 260 44280
+2309 260 28170
+2310 260 46115
+2311 260 62083
+2312 260 62083
+2313 260 2105
+2314 260 29275
+2316 260 46530
+2317 260 11233
+2318 260 64654
+2319 260 46560
+2320 260 17125
+2321 260 20563
+2322 260 8616
+2323 260 37130
+2324 260 52447
+2326 260 1016
+2327 260 19217
+2328 260 16271
+2329 260 26932
+2330 260 46830
+2331 260 26267
+2332 260 32725
+2333 260 44614
+2334 260 30171
+2335 260 4043
+2337 260 31068
+2338 260 40843
+2339 260 35279
+2340 260 2272
+2341 260 22147
+2342 260 40301
+2398 260 15731
+2399 260 51058
+2400 260 2247
+2401 260 40472
+2402 260 31767
+2404 260 54269
+2405 260 45630
+2406 260 55657
+2407 260 8056
+2408 260 48780
+2419 260 5433
+2476 260 50761
+2477 260 7380
+2478 260 58203
+2479 260 19626
+2480 260 64086
+2481 260 41368
+2482 260 61213
+2483 260 57749
+2484 260 37493
+2485 260 19675
+2486 260 58052
+2497 260 65294
+2509 260 6491
+2771 260 27852657
+208 261 1
+2342 261 65520
+2772 261 27852657
+209 262 1
+210 262 1
+211 262 1
+212 262 1
+213 262 1
+217 262 1
+218 262 1
+219 262 1
+220 262 1
+226 262 1
+227 262 1
+228 262 1
+236 262 1
+237 262 1
+247 262 1
+1698 262 32761
+1699 262 32761
+1700 262 32761
+1701 262 32761
+1702 262 32761
+1981 262 32761
+2342 262 24573
+2773 262 27852657
+210 263 1
+605 263 1024
+606 263 14431
+614 263 32504
+621 263 5456
+623 263 60601
+626 263 20152
+627 263 20152
+628 263 20152
+629 263 31789
+630 263 31789
+631 263 48671
+632 263 24455
+635 263 37521
+636 263 53384
+637 263 53384
+638 263 8015
+639 263 53384
+813 263 31789
+814 263 31789
+815 263 48671
+816 263 24455
+817 263 57267
+819 263 37521
+820 263 53384
+821 263 53384
+822 263 8015
+823 263 41247
+888 263 53384
+1660 263 9206
+1661 263 8747
+1662 263 2436
+1663 263 62497
+1667 263 46940
+1668 263 489
+1669 263 59699
+1670 263 35861
+1671 263 48492
+1672 263 48492
+1673 263 20056
+1674 263 20056
+1676 263 16344
+1677 263 43231
+1678 263 11764
+1679 263 18475
+1680 263 4060
+1681 263 21089
+1682 263 15848
+1683 263 15848
+1684 263 16782
+1686 263 48601
+1687 263 39078
+1688 263 39072
+1689 263 62831
+1690 263 58414
+1691 263 37325
+1692 263 14959
+1693 263 14959
+1694 263 56504
+1695 263 37309
+1697 263 5883
+1698 263 19640
+1699 263 61218
+1700 263 43903
+1701 263 49808
+1702 263 12483
+1971 263 2649
+1972 263 2649
+1973 263 13490
+1974 263 26116
+1975 263 20158
+1977 263 1131
+1978 263 3539
+1979 263 186
+1980 263 26104
+1981 263 25306
+2047 263 12823
+2332 263 14375
+2333 263 14375
+2334 263 19164
+2335 263 5806
+2336 263 26379
+2337 263 61858
+2338 263 20081
+2339 263 59834
+2340 263 28443
+2341 263 763
+2342 263 54895
+2408 263 22479
+2486 263 43649
+2774 263 27852657
+211 264 1
+218 264 1
+245 264 1
+598 264 1
+599 264 32762
+605 264 1
+606 264 32762
+614 264 32761
+621 264 1
+623 264 32760
+631 264 1
+632 264 32764
+815 264 1
+816 264 32763
+817 264 3
+1661 264 61427
+1662 264 8192
+1663 264 8192
+1668 264 61427
+1669 264 8192
+1670 264 8192
+1676 264 17746
+1677 264 30032
+1678 264 30032
+1684 264 24572
+1686 264 40952
+1687 264 40952
+1694 264 24572
+1695 264 28670
+1697 264 40952
+1973 264 61427
+1974 264 12287
+1975 264 8190
+2334 264 38903
+2335 264 63473
+2336 264 36855
+2337 264 36855
+2338 264 45047
+2339 264 45047
+2340 264 32761
+2341 264 50506
+2342 264 50507
+2408 264 23892
+2486 264 5
+2775 264 27852657
+212 265 1
+2338 265 65520
+2776 265 27852657
+213 266 1
+220 266 1
+228 266 1
+237 266 1
+247 266 1
+623 266 1
+1686 266 54601
+1687 266 54601
+1697 266 32761
+1698 266 54601
+1699 266 54601
+1700 266 54601
+1701 266 54601
+1702 266 54601
+1977 266 54601
+1978 266 54601
+1979 266 54601
+1980 266 54601
+1981 266 43681
+2047 266 54601
+2338 266 47776
+2339 266 47776
+2340 266 47776
+2341 266 30031
+2342 266 42317
+2408 266 42316
+2486 266 23888
+2777 266 27852657
+214 267 1
+248 267 15581
+249 267 12923
+250 267 63964
+251 267 26595
+252 267 26595
+639 267 61605
+886 267 20990
+887 267 65061
+888 267 51249
+899 267 20738
+1617 267 42190
+1626 267 23331
+1634 267 62933
+1635 267 38228
+1636 267 14897
+1664 267 58979
+1672 267 10349
+1681 267 55172
+1691 267 43566
+1698 267 61581
+1699 267 39942
+1700 267 3649
+1701 267 42365
+1702 267 57720
+1943 267 56675
+1951 267 39556
+1960 267 25965
+1970 267 56910
+1981 267 48866
+2045 267 33474
+2046 267 18140
+2047 267 55805
+2058 267 12628
+2304 267 30744
+2311 267 49866
+2312 267 54218
+2313 267 13861
+2314 267 13861
+2316 267 13278
+2317 267 13278
+2318 267 13278
+2319 267 63495
+2320 267 11935
+2321 267 23238
+2322 267 19347
+2323 267 19347
+2324 267 19347
+2326 267 36639
+2327 267 36639
+2328 267 1556
+2329 267 22841
+2330 267 11104
+2331 267 38529
+2332 267 3857
+2333 267 3857
+2334 267 3857
+2335 267 3857
+2337 267 38649
+2338 267 7350
+2339 267 10123
+2340 267 10896
+2341 267 21396
+2342 267 52946
+2398 267 51667
+2399 267 51667
+2400 267 51667
+2401 267 51667
+2402 267 51667
+2404 267 16915
+2405 267 13512
+2406 267 32962
+2407 267 48472
+2408 267 38304
+2419 267 12684
+2476 267 44722
+2477 267 44722
+2478 267 44722
+2479 267 44722
+2480 267 44722
+2481 267 44722
+2482 267 27538
+2483 267 14665
+2484 267 53537
+2485 267 1504
+2486 267 14516
+2497 267 14904
+2509 267 62175
+2778 267 27852657
+215 268 1
+223 268 1
+224 268 1
+232 268 1
+233 268 1
+234 268 1
+242 268 1
+243 268 1
+244 268 1
+245 268 1
+629 268 1
+630 268 1
+631 268 1
+632 268 1
+633 268 1
+1692 268 32761
+1693 268 32761
+1694 268 32761
+1695 268 32761
+1696 268 32761
+1697 268 32761
+2342 268 24573
+2779 268 27852657
+216 269 1
+2342 269 65520
+2780 269 27852657
+217 270 1
+605 270 8829
+606 270 50823
+614 270 19605
+621 270 28867
+623 270 37932
+626 270 42040
+627 270 42040
+628 270 42040
+629 270 9012
+630 270 9012
+631 270 37879
+632 270 15867
+635 270 58851
+636 270 38591
+637 270 38591
+638 270 15110
+639 270 38591
+813 270 9012
+814 270 9012
+815 270 37879
+816 270 15867
+817 270 61742
+819 270 58851
+820 270 38591
+821 270 38591
+822 270 15110
+823 270 11661
+888 270 38591
+1661 270 20547
+1662 270 32389
+1663 270 59025
+1667 270 36639
+1668 270 29869
+1669 270 41711
+1670 270 25664
+1671 270 13104
+1672 270 13104
+1673 270 59774
+1674 270 59774
+1676 270 49020
+1677 270 28189
+1678 270 34671
+1679 270 2455
+1680 270 64672
+1681 270 51568
+1682 270 47606
+1683 270 47606
+1684 270 37184
+1686 270 143
+1687 270 53704
+1688 270 43721
+1689 270 14241
+1690 270 12712
+1691 270 26665
+1692 270 39411
+1693 270 39411
+1694 270 28989
+1695 270 59010
+1697 270 61177
+1698 270 3701
+1699 270 10356
+1700 270 44650
+1701 270 59032
+1702 270 32367
+1971 270 10250
+1972 270 10250
+1973 270 28636
+1974 270 28426
+1975 270 1026
+1977 270 64366
+1978 270 15565
+1979 270 60474
+1980 270 53312
+1981 270 54954
+2047 270 22587
+2332 270 3350
+2333 270 3350
+2334 270 51832
+2335 270 61666
+2336 270 26468
+2337 270 6558
+2338 270 60678
+2339 270 52680
+2340 270 35538
+2341 270 63895
+2342 270 38413
+2408 270 62837
+2486 270 10398
+2781 270 27852657
+218 271 1
+245 271 1
+789 271 65520
+798 271 1
+881 271 1
+882 271 2
+1947 271 22476
+1948 271 49303
+1956 271 1846
+1963 271 38060
+1965 271 63229
+1968 271 19857
+1969 271 19857
+1970 271 19857
+1971 271 32502
+1972 271 32502
+1973 271 5041
+1974 271 119
+1977 271 34649
+1978 271 48723
+1979 271 48723
+1980 271 3059
+1981 271 48723
+2037 271 40679
+2038 271 40679
+2039 271 13218
+2040 271 16473
+2041 271 18516
+2043 271 34649
+2044 271 48723
+2045 271 48723
+2046 271 3059
+2047 271 31925
+2058 271 48723
+2301 271 39046
+2302 271 50705
+2303 271 6650
+2307 271 45057
+2308 271 53002
+2309 271 38043
+2310 271 57025
+2311 271 8962
+2312 271 8962
+2313 271 32247
+2314 271 32247
+2316 271 21762
+2317 271 51847
+2318 271 7293
+2319 271 60130
+2320 271 22345
+2321 271 13383
+2322 271 18098
+2323 271 18098
+2324 271 47185
+2326 271 44422
+2327 271 36525
+2328 271 54058
+2329 271 39705
+2330 271 53024
+2331 271 39641
+2332 271 57761
+2333 271 57761
+2334 271 21327
+2335 271 41298
+2337 271 12347
+2338 271 65389
+2339 271 56195
+2340 271 10192
+2341 271 58117
+2342 271 18477
+2398 271 16488
+2399 271 16488
+2400 271 7786
+2401 271 22022
+2402 271 6756
+2404 271 23160
+2405 271 65494
+2406 271 30080
+2407 271 16570
+2408 271 46882
+2419 271 65256
+2476 271 27751
+2477 271 27751
+2478 271 32373
+2479 271 33141
+2480 271 50007
+2481 271 25411
+2482 271 25919
+2483 271 4009
+2484 271 4010
+2485 271 61875
+2486 271 9316
+2497 271 31787
+2509 271 25645
+2782 271 27852657
+219 272 1
+2339 272 65520
+2783 272 27852657
+220 273 1
+623 273 55797
+626 273 8578
+627 273 8578
+628 273 8578
+629 273 42079
+630 273 42079
+631 273 42079
+632 273 42079
+635 273 4599
+636 273 7348
+637 273 7348
+638 273 15926
+639 273 7348
+813 273 42079
+814 273 42079
+815 273 42079
+816 273 42079
+817 273 42079
+819 273 4599
+820 273 7348
+821 273 7348
+822 273 15926
+823 273 14696
+888 273 7348
+1667 273 21902
+1668 273 21902
+1669 273 21902
+1670 273 21902
+1673 273 43069
+1674 273 43069
+1676 273 36711
+1677 273 36711
+1678 273 36711
+1680 273 43406
+1681 273 43406
+1682 273 9099
+1683 273 9099
+1684 273 9099
+1686 273 4302
+1687 273 4302
+1689 273 62874
+1690 273 47206
+1691 273 3800
+1692 273 31511
+1693 273 31511
+1694 273 31511
+1695 273 31511
+1697 273 51234
+1698 273 27594
+1699 273 47847
+1700 273 62823
+1701 273 33812
+1702 273 30012
+1971 273 18625
+1972 273 18625
+1973 273 18625
+1974 273 18625
+1975 273 18625
+1977 273 48424
+1978 273 19201
+1979 273 38728
+1980 273 21611
+1981 273 11405
+2047 273 46914
+2332 273 25899
+2333 273 25899
+2334 273 25899
+2335 273 25899
+2336 273 25899
+2337 273 25899
+2339 273 58308
+2340 273 41707
+2341 273 48459
+2342 273 25652
+2408 273 9135
+2486 273 55897
+2784 273 27852657
+221 274 1
+222 274 1
+230 274 1
+239 274 1
+249 274 1
+616 274 65520
+623 274 51166
+625 274 65520
+626 274 46581
+627 274 41552
+628 274 41552
+629 274 35378
+630 274 35378
+631 274 35378
+632 274 35378
+635 274 46908
+636 274 1226
+637 274 16357
+638 274 62941
+639 274 21389
+813 274 35378
+814 274 35378
+815 274 35378
+816 274 35378
+817 274 35378
+819 274 46908
+820 274 1225
+821 274 16357
+822 274 62941
+823 274 42778
+888 274 21389
+1667 274 41571
+1668 274 41571
+1669 274 41571
+1670 274 41571
+1671 274 28669
+1672 274 28669
+1673 274 10238
+1674 274 10238
+1676 274 28957
+1677 274 28957
+1678 274 28957
+1679 274 53745
+1680 274 29667
+1681 274 998
+1682 274 36981
+1683 274 36981
+1684 274 36981
+1686 274 64158
+1687 274 64158
+1688 274 53745
+1689 274 55427
+1690 274 3564
+1691 274 2566
+1692 274 61512
+1693 274 61512
+1694 274 61512
+1695 274 61512
+1697 274 57128
+1698 274 55201
+1699 274 51943
+1700 274 47214
+1701 274 21863
+1702 274 19297
+1971 274 35322
+1972 274 35322
+1973 274 35322
+1974 274 35322
+1975 274 35322
+1977 274 30152
+1978 274 30234
+1979 274 29500
+1980 274 39036
+1981 274 35777
+2047 274 16480
+2332 274 45184
+2333 274 45184
+2334 274 45184
+2335 274 45184
+2336 274 45184
+2337 274 45184
+2338 274 11773
+2339 274 29123
+2340 274 32072
+2341 274 42409
+2342 274 35253
+2408 274 56644
+2486 274 5737
+2785 274 27852657
+222 275 1
+248 275 24985
+249 275 38044
+250 275 13436
+251 275 19774
+252 275 19774
+639 275 13874
+886 275 44885
+887 275 62795
+888 275 12873
+899 275 6973
+1617 275 42190
+1626 275 47694
+1634 275 52055
+1635 275 44415
+1636 275 62242
+1672 275 3807
+1681 275 31337
+1691 275 11318
+1698 275 8853
+1699 275 6800
+1700 275 3171
+1701 275 43937
+1702 275 27853
+1951 275 30710
+1960 275 36796
+1970 275 18057
+1981 275 14128
+2045 275 48975
+2046 275 45710
+2047 275 5080
+2058 275 25903
+2311 275 2010
+2312 275 37106
+2313 275 5657
+2314 275 5657
+2316 275 19778
+2317 275 19778
+2318 275 19778
+2319 275 764
+2320 275 34257
+2321 275 42151
+2322 275 50439
+2323 275 50439
+2324 275 50439
+2326 275 28631
+2327 275 28631
+2328 275 30049
+2329 275 45191
+2330 275 47482
+2331 275 631
+2332 275 40657
+2333 275 40657
+2334 275 40657
+2335 275 40657
+2337 275 6172
+2338 275 17865
+2339 275 38415
+2340 275 47386
+2341 275 57838
+2342 275 20113
+2398 275 63743
+2399 275 63743
+2400 275 63743
+2401 275 63743
+2402 275 63743
+2404 275 58981
+2405 275 57223
+2406 275 59830
+2407 275 3141
+2408 275 59630
+2419 275 31919
+2476 275 24799
+2477 275 24799
+2478 275 24799
+2479 275 24799
+2480 275 24799
+2481 275 24799
+2482 275 19395
+2483 275 45909
+2484 275 20765
+2485 275 53866
+2486 275 22252
+2497 275 26662
+2509 275 55597
+2786 275 27852657
+223 276 1
+606 276 8948
+614 276 24445
+620 276 1408
+621 276 19083
+623 276 36199
+626 276 20635
+627 276 20635
+628 276 20635
+629 276 22384
+630 276 36073
+631 276 53748
+632 276 15608
+635 276 25742
+636 276 259
+637 276 259
+638 276 20894
+639 276 259
+813 276 22384
+814 276 36073
+815 276 53748
+816 276 15608
+817 276 53742
+819 276 25742
+820 276 259
+821 276 259
+822 276 20894
+823 276 518
+888 276 259
+1662 276 4355
+1663 276 15223
+1667 276 48574
+1668 276 48574
+1669 276 52929
+1670 276 36729
+1671 276 54719
+1672 276 54719
+1673 276 60798
+1674 276 11643
+1676 276 63486
+1677 276 59737
+1678 276 36258
+1679 276 62745
+1680 276 54746
+1681 276 27
+1682 276 35550
+1683 276 23485
+1684 276 60397
+1686 276 28572
+1687 276 27559
+1688 276 11139
+1689 276 24141
+1690 276 38552
+1691 276 38525
+1692 276 20030
+1693 276 44820
+1694 276 16211
+1695 276 49455
+1697 276 59773
+1698 276 34549
+1699 276 21317
+1700 276 64826
+1701 276 22242
+1702 276 49238
+1971 276 33494
+1972 276 59546
+1973 276 33280
+1974 276 4063
+1975 276 5174
+1977 276 3829
+1978 276 2955
+1979 276 6087
+1980 276 50020
+1981 276 31757
+2047 276 48040
+2332 276 937
+2333 276 35097
+2334 276 2727
+2335 276 2727
+2336 276 13198
+2337 276 14963
+2338 276 51257
+2339 276 53714
+2340 276 64884
+2341 276 19570
+2342 276 47415
+2408 276 40935
+2486 276 57282
+2787 276 27852657
+224 277 1
+606 277 56573
+614 277 41076
+620 277 64113
+621 277 46438
+623 277 36692
+626 277 60976
+627 277 60976
+628 277 60976
+629 277 165
+630 277 51997
+631 277 34322
+632 277 6941
+635 277 31372
+636 277 25596
+637 277 25596
+638 277 21051
+639 277 25596
+813 277 165
+814 277 51997
+815 277 34322
+816 277 6941
+817 277 34328
+819 277 31372
+820 277 25596
+821 277 25596
+822 277 21051
+823 277 51192
+888 277 25596
+1662 277 61166
+1663 277 50298
+1667 277 24537
+1668 277 24537
+1669 277 20182
+1670 277 36382
+1671 277 10802
+1672 277 10802
+1673 277 16205
+1674 277 65360
+1676 277 44510
+1677 277 48259
+1678 277 6217
+1679 277 2776
+1680 277 64242
+1681 277 53440
+1682 277 9610
+1683 277 21675
+1684 277 50284
+1686 277 7908
+1687 277 8921
+1688 277 54382
+1689 277 9345
+1690 277 5473
+1691 277 17554
+1692 277 18456
+1693 277 59187
+1694 277 22275
+1695 277 54552
+1697 277 57372
+1698 277 46051
+1699 277 1976
+1700 277 30351
+1701 277 46426
+1702 277 28872
+1971 277 38568
+1972 277 12516
+1973 277 38782
+1974 277 2478
+1975 277 1367
+1977 277 7080
+1978 277 47583
+1979 277 3494
+1980 277 56286
+1981 277 2123
+2047 277 38772
+2332 277 55014
+2333 277 20854
+2334 277 53224
+2335 277 53224
+2336 277 42753
+2337 277 40988
+2338 277 14264
+2339 277 26639
+2340 277 28952
+2341 277 28348
+2342 277 53005
+2408 277 54323
+2486 277 58040
+2788 277 27852657
+225 278 1
+2342 278 65520
+2789 278 27852657
+226 279 1
+613 279 1
+614 279 1
+623 279 2
+1676 279 43681
+1677 279 43681
+1678 279 43681
+1686 279 32761
+1687 279 32761
+1697 279 32761
+2340 279 12286
+2341 279 60062
+2342 279 60062
+2408 279 60062
+2486 279 2048
+2790 279 27852657
+227 280 1
+2340 280 65520
+2791 280 27852657
+228 281 1
+229 281 9077
+230 281 9077
+231 281 9077
+238 281 9077
+239 281 9077
+240 281 18154
+241 281 9077
+248 281 9077
+249 281 9077
+250 281 18154
+251 281 18154
+252 281 9077
+608 281 36063
+609 281 36063
+616 281 45140
+617 281 15682
+618 281 45140
+623 281 19781
+625 281 45140
+626 281 30940
+627 281 40017
+628 281 60398
+635 281 63082
+636 281 48882
+637 281 1515
+638 281 16773
+639 281 21896
+819 281 54005
+820 281 39805
+821 281 48882
+822 281 64140
+823 281 16561
+888 281 3742
+1671 281 41448
+1672 281 41448
+1679 281 16400
+1680 281 57848
+1681 281 16400
+1686 281 14217
+1687 281 14217
+1688 281 16400
+1689 281 33038
+1690 281 5517
+1691 281 54638
+1697 281 14217
+1698 281 34808
+1699 281 51446
+1700 281 46010
+1701 281 59679
+1702 281 5041
+1977 281 57169
+1978 281 47677
+1979 281 42241
+1980 281 8543
+1981 281 30100
+2047 281 25059
+2338 281 34782
+2339 281 46678
+2340 281 44124
+2341 281 52275
+2342 281 62584
+2408 281 25571
+2486 281 37974
+2792 281 27852657
+229 282 1
+230 282 1
+231 282 1
+240 282 1
+250 282 1
+616 282 1
+623 282 25651
+626 282 23643
+627 282 23643
+628 282 23643
+629 282 59694
+630 282 59694
+631 282 59694
+632 282 59694
+635 282 55625
+636 282 48546
+637 282 48547
+638 282 6668
+639 282 48546
+813 282 59694
+814 282 59694
+815 282 59694
+816 282 59694
+817 282 59694
+819 282 55625
+820 282 48546
+821 282 48546
+822 282 6668
+823 282 31571
+888 282 48546
+1667 282 47914
+1668 282 47914
+1669 282 47914
+1670 282 47914
+1671 282 64397
+1672 282 64397
+1673 282 48637
+1674 282 48637
+1676 282 1446
+1677 282 1446
+1678 282 1446
+1679 282 50499
+1680 282 21552
+1681 282 22676
+1682 282 51457
+1683 282 51457
+1684 282 51457
+1686 282 16069
+1687 282 16069
+1688 282 40828
+1689 282 62703
+1690 282 37690
+1691 282 15014
+1692 282 13856
+1693 282 13856
+1694 282 13856
+1695 282 13856
+1697 282 47684
+1698 282 51572
+1699 282 29912
+1700 282 62598
+1701 282 24203
+1702 282 9189
+1971 282 4761
+1972 282 4761
+1973 282 4761
+1974 282 4761
+1975 282 4761
+1977 282 29346
+1978 282 38646
+1979 282 30968
+1980 282 21086
+1981 282 63594
+2047 282 54405
+2332 282 2807
+2333 282 2807
+2334 282 2807
+2335 282 2807
+2336 282 2807
+2337 282 2807
+2338 282 24565
+2339 282 44998
+2340 282 59432
+2341 282 19472
+2342 282 33921
+2408 282 60652
+2486 282 61837
+2793 282 27852657
+230 283 1
+231 283 1
+241 283 65520
+247 283 24631
+248 283 35648
+249 283 35648
+250 283 22650
+251 283 16736
+252 283 16737
+639 283 15652
+820 283 43437
+821 283 4643
+822 283 2463
+823 283 46100
+888 283 47185
+1671 283 48380
+1672 283 48380
+1673 283 10860
+1674 283 10860
+1676 283 63123
+1677 283 63123
+1678 283 63123
+1679 283 62812
+1680 283 57966
+1681 283 9586
+1682 283 11457
+1683 283 11457
+1684 283 11457
+1686 283 40780
+1687 283 40780
+1688 283 61937
+1689 283 23067
+1690 283 33808
+1691 283 24222
+1692 283 9843
+1693 283 9843
+1694 283 9843
+1695 283 9843
+1697 283 56428
+1698 283 22934
+1699 283 10121
+1700 283 55671
+1701 283 43885
+1702 283 37222
+1971 283 50398
+1972 283 50398
+1973 283 50398
+1974 283 50398
+1975 283 50398
+1977 283 17642
+1978 283 40007
+1979 283 31803
+1980 283 39461
+1981 283 26888
+2047 283 5853
+2332 283 21038
+2333 283 21038
+2334 283 21038
+2335 283 21038
+2336 283 21038
+2337 283 21038
+2338 283 46054
+2339 283 9377
+2340 283 8656
+2341 283 58708
+2342 283 43414
+2408 283 60997
+2486 283 37100
+2794 283 27852657
+231 284 1
+248 284 39488
+249 284 43786
+250 284 52637
+251 284 24909
+252 284 24909
+639 284 62876
+886 284 24675
+887 284 30372
+888 284 48386
+899 284 20832
+1626 284 24363
+1634 284 39343
+1635 284 19503
+1636 284 60661
+1681 284 35144
+1691 284 5172
+1698 284 53009
+1699 284 37591
+1700 284 63470
+1701 284 5471
+1702 284 29512
+1960 284 1985
+1970 284 57847
+1981 284 44446
+2045 284 56547
+2046 284 43610
+2047 284 23602
+2058 284 57929
+2311 284 46605
+2312 284 46605
+2313 284 20815
+2314 284 20815
+2316 284 41632
+2317 284 41632
+2318 284 41632
+2319 284 40975
+2320 284 9593
+2321 284 7988
+2322 284 5579
+2323 284 5579
+2324 284 5579
+2326 284 3596
+2327 284 3596
+2328 284 29279
+2329 284 56152
+2330 284 10387
+2331 284 3891
+2332 284 35246
+2333 284 35246
+2334 284 35246
+2335 284 35246
+2337 284 38158
+2338 284 50309
+2339 284 17988
+2340 284 30921
+2341 284 37077
+2342 284 25718
+2398 284 20155
+2399 284 20155
+2400 284 20155
+2401 284 20155
+2402 284 20155
+2404 284 19348
+2405 284 22378
+2406 284 16664
+2407 284 22750
+2408 284 3814
+2419 284 59942
+2476 284 51243
+2477 284 51243
+2478 284 51243
+2479 284 51243
+2480 284 51243
+2481 284 51243
+2482 284 52796
+2483 284 38337
+2484 284 26432
+2485 284 6548
+2486 284 21186
+2497 284 43860
+2509 284 46262
+2795 284 27852657
+232 285 1
+242 285 1
+606 285 60958
+614 285 24227
+620 285 64113
+621 285 44387
+623 285 26087
+626 285 9388
+627 285 9388
+628 285 9388
+629 285 37694
+630 285 50622
+631 285 30896
+632 285 23989
+635 285 61987
+636 285 61511
+637 285 61511
+638 285 5378
+639 285 61511
+813 285 37693
+814 285 50622
+815 285 30896
+816 285 23989
+817 285 61145
+819 285 61987
+820 285 61511
+821 285 61511
+822 285 5378
+823 285 57501
+888 285 61511
+1662 285 4611
+1663 285 32547
+1667 285 32506
+1668 285 32506
+1669 285 37117
+1670 285 45466
+1671 285 12289
+1672 285 12289
+1673 285 48686
+1674 285 24137
+1676 285 3911
+1677 285 58903
+1678 285 63517
+1679 285 27542
+1680 285 31258
+1681 285 18969
+1682 285 24484
+1683 285 28366
+1684 285 45452
+1686 285 60300
+1687 285 25647
+1688 285 1503
+1689 285 22431
+1690 285 326
+1691 285 46878
+1692 285 818
+1693 285 605
+1694 285 17691
+1695 285 41770
+1697 285 39466
+1698 285 45820
+1699 285 34271
+1700 285 20513
+1701 285 34038
+1702 285 52681
+1971 285 9231
+1972 285 58431
+1973 285 29282
+1974 285 9868
+1975 285 42699
+1977 285 44901
+1978 285 6259
+1979 285 23304
+1980 285 60557
+1981 285 26659
+2047 285 39499
+2332 285 25529
+2333 285 32322
+2334 285 13696
+2335 285 13696
+2336 285 32967
+2337 285 29570
+2338 285 52585
+2339 285 58712
+2340 285 54970
+2341 285 18725
+2342 285 45215
+2408 285 51852
+2486 285 45864
+2796 285 27852657
+233 286 1
+243 286 1
+606 286 4563
+614 286 41294
+620 286 1408
+621 286 62827
+623 286 47134
+626 286 51672
+627 286 51672
+628 286 51672
+629 286 38875
+630 286 25947
+631 286 45672
+632 286 52579
+635 286 4202
+636 286 52764
+637 286 52764
+638 286 38915
+639 286 52764
+813 286 38875
+814 286 25946
+815 286 45672
+816 286 52579
+817 286 15423
+819 286 4202
+820 286 52764
+821 286 52764
+822 286 38915
+823 286 40007
+888 286 52764
+1662 286 60910
+1663 286 32974
+1667 286 20335
+1668 286 20335
+1669 286 15724
+1670 286 7375
+1671 286 53232
+1672 286 53232
+1673 286 6018
+1674 286 30567
+1676 286 20927
+1677 286 31456
+1678 286 26842
+1679 286 37979
+1680 286 38318
+1681 286 50607
+1682 286 53862
+1683 286 49980
+1684 286 32894
+1686 286 35899
+1687 286 5031
+1688 286 64018
+1689 286 30692
+1690 286 832
+1691 286 15746
+1692 286 3438
+1693 286 3651
+1694 286 26771
+1695 286 2692
+1697 286 62672
+1698 286 23709
+1699 286 36086
+1700 286 63870
+1701 286 56184
+1702 286 40438
+1971 286 62493
+1972 286 13293
+1973 286 42442
+1974 286 61856
+1975 286 29025
+1977 286 54466
+1978 286 44165
+1979 286 53158
+1980 286 34436
+1981 286 60636
+2047 286 20198
+2332 286 20626
+2333 286 13833
+2334 286 32459
+2335 286 32459
+2336 286 13188
+2337 286 16585
+2338 286 12936
+2339 286 46681
+2340 286 13628
+2341 286 62278
+2342 286 27865
+2408 286 15272
+2486 286 5011
+2797 286 27852657
+234 287 1
+244 287 1
+245 287 1
+631 287 41694
+880 287 23828
+881 287 1
+882 287 1
+1694 287 25315
+1697 287 14892
+1947 287 41145
+1948 287 17973
+1956 287 41700
+1963 287 9734
+1965 287 57915
+1968 287 42926
+1969 287 42926
+1970 287 42926
+1971 287 4362
+1972 287 4362
+1973 287 63267
+1974 287 39704
+1977 287 12279
+1978 287 42888
+1979 287 42888
+1980 287 20293
+1981 287 42888
+2037 287 39000
+2038 287 39000
+2039 287 26798
+2040 287 24093
+2041 287 35645
+2043 287 12279
+2044 287 42888
+2045 287 42888
+2046 287 20293
+2047 287 20255
+2058 287 42888
+2301 287 61324
+2302 287 60444
+2303 287 922
+2307 287 54755
+2308 287 40792
+2309 287 39912
+2310 287 50479
+2311 287 21418
+2312 287 21418
+2313 287 6085
+2314 287 6085
+2316 287 1975
+2317 287 8901
+2318 287 20038
+2319 287 50851
+2320 287 50618
+2321 287 29200
+2322 287 653
+2323 287 653
+2324 287 23633
+2326 287 43055
+2327 287 47554
+2328 287 47457
+2329 287 41838
+2330 287 22660
+2331 287 58981
+2332 287 46307
+2333 287 46307
+2334 287 51824
+2335 287 51778
+2337 287 50493
+2338 287 55610
+2339 287 21560
+2340 287 10198
+2341 287 34534
+2342 287 53360
+2398 287 17740
+2399 287 17740
+2400 287 62662
+2401 287 58699
+2402 287 47943
+2404 287 49154
+2405 287 26350
+2406 287 62346
+2407 287 24281
+2408 287 13650
+2419 287 7950
+2476 287 22794
+2477 287 22794
+2478 287 6348
+2479 287 23996
+2480 287 59267
+2481 287 47418
+2482 287 63304
+2483 287 35441
+2484 287 50189
+2485 287 30119
+2486 287 14698
+2497 287 15421
+2509 287 9981
+2798 287 27852657
+235 288 1
+2342 288 65520
+2799 288 27852657
+236 289 1
+2341 289 65520
+2800 289 27852657
+237 290 1
+247 290 1
+623 290 23577
+626 290 45364
+627 290 45364
+628 290 45364
+629 290 56570
+630 290 56570
+631 290 56570
+632 290 56570
+635 290 33657
+636 290 1392
+637 290 1392
+638 290 46756
+639 290 1392
+813 290 56570
+814 290 56570
+815 290 56570
+816 290 56570
+817 290 56570
+819 290 33657
+820 290 1392
+821 290 1392
+822 290 46756
+823 290 2784
+888 290 1392
+1667 290 23897
+1668 290 23897
+1669 290 23897
+1670 290 23897
+1673 290 35717
+1674 290 35717
+1676 290 34288
+1677 290 34288
+1678 290 34288
+1680 290 32105
+1681 290 32105
+1682 290 60300
+1683 290 60300
+1684 290 60300
+1686 290 16149
+1687 290 16149
+1689 290 15894
+1690 290 45584
+1691 290 13479
+1692 290 31382
+1693 290 31382
+1694 290 31382
+1695 290 31382
+1697 290 62286
+1698 290 5379
+1699 290 5719
+1700 290 37885
+1701 290 17826
+1702 290 4347
+1971 290 3794
+1972 290 3794
+1973 290 3794
+1974 290 3794
+1975 290 3794
+1977 290 13742
+1978 290 39921
+1979 290 34004
+1980 290 656
+1981 290 25904
+2047 290 21557
+2332 290 22123
+2333 290 22123
+2334 290 22123
+2335 290 22123
+2336 290 22123
+2337 290 22123
+2339 290 18297
+2340 290 58891
+2341 290 7840
+2342 290 2509
+2408 290 25451
+2486 290 39980
+2801 290 27852657
+238 291 1
+239 291 1
+240 291 1
+241 291 1
+248 291 1
+249 291 1
+250 291 1
+251 291 2
+252 291 1
+623 291 53797
+625 291 1
+626 291 20818
+627 291 25847
+628 291 25847
+629 291 49773
+630 291 49773
+631 291 49773
+632 291 49773
+635 291 38066
+636 291 25851
+637 291 10719
+638 291 31535
+639 291 5688
+813 291 49773
+814 291 49773
+815 291 49773
+816 291 49773
+817 291 49773
+819 291 38065
+820 291 25850
+821 291 10718
+822 291 31533
+823 291 11373
+888 291 5686
+1667 291 53458
+1668 291 53458
+1669 291 53458
+1670 291 53458
+1671 291 1127
+1672 291 1127
+1673 291 8781
+1674 291 8781
+1676 291 63303
+1677 291 63303
+1678 291 63303
+1679 291 10931
+1680 291 38532
+1681 291 37405
+1682 291 23520
+1683 291 23520
+1684 291 23520
+1686 291 20799
+1687 291 20799
+1688 291 20602
+1689 291 23033
+1690 291 59974
+1691 291 22569
+1692 291 48163
+1693 291 48163
+1694 291 48163
+1695 291 48163
+1697 291 19478
+1698 291 56013
+1699 291 38111
+1700 291 25550
+1701 291 6057
+1702 291 49009
+1971 291 30948
+1972 291 30948
+1973 291 30948
+1974 291 30948
+1975 291 30948
+1977 291 20525
+1978 291 6904
+1979 291 23932
+1980 291 15421
+1981 291 34822
+2047 291 51334
+2332 291 6934
+2333 291 6934
+2334 291 6934
+2335 291 6934
+2336 291 6934
+2337 291 6934
+2338 291 32767
+2339 291 65355
+2340 291 43499
+2341 291 11259
+2342 291 42993
+2408 291 43386
+2486 291 34984
+2802 291 27852657
+239 292 1
+247 292 49655
+248 292 47146
+249 292 47147
+250 292 43109
+251 292 41161
+252 292 41161
+639 292 9959
+820 292 15448
+821 292 34405
+822 292 47778
+823 292 7208
+888 292 38410
+1671 292 55968
+1672 292 55968
+1673 292 53684
+1674 292 53684
+1676 292 60911
+1677 292 60911
+1678 292 60911
+1679 292 15964
+1680 292 63589
+1681 292 7621
+1682 292 26300
+1683 292 26300
+1684 292 26300
+1686 292 41492
+1687 292 41492
+1688 292 15026
+1689 292 30582
+1690 292 9177
+1691 292 1556
+1692 292 1887
+1693 292 1887
+1694 292 1887
+1695 292 1887
+1697 292 62464
+1698 292 13835
+1699 292 21410
+1700 292 26514
+1701 292 21556
+1702 292 5510
+1971 292 4230
+1972 292 4230
+1973 292 4230
+1974 292 4230
+1975 292 4230
+1977 292 43084
+1978 292 37295
+1979 292 60907
+1980 292 24668
+1981 292 3603
+2047 292 34457
+2332 292 35266
+2333 292 35266
+2334 292 35266
+2335 292 35266
+2336 292 35266
+2337 292 35266
+2338 292 2200
+2339 292 34759
+2340 292 2016
+2341 292 62821
+2342 292 12285
+2408 292 59095
+2486 292 3689
+2803 292 27852657
+240 293 1
+241 293 1
+247 293 35718
+248 293 18144
+249 293 18144
+250 293 6230
+251 293 18137
+252 293 18136
+639 293 23890
+820 293 30872
+821 293 51386
+822 293 16491
+823 293 11064
+888 293 5310
+1671 293 33434
+1672 293 33434
+1673 293 25938
+1674 293 25938
+1676 293 35
+1677 293 35
+1678 293 35
+1679 293 11439
+1680 293 2149
+1681 293 34236
+1682 293 5970
+1683 293 5970
+1684 293 5970
+1686 293 40250
+1687 293 40250
+1688 293 20550
+1689 293 20379
+1690 293 4824
+1691 293 36109
+1692 293 36577
+1693 293 36577
+1694 293 36577
+1695 293 36577
+1697 293 48004
+1698 293 27294
+1699 293 27835
+1700 293 61358
+1701 293 63902
+1702 293 8427
+1971 293 33347
+1972 293 33347
+1973 293 33347
+1974 293 33347
+1975 293 33347
+1977 293 29396
+1978 293 62826
+1979 293 19800
+1980 293 58877
+1981 293 61843
+2047 293 33148
+2332 293 5215
+2333 293 5215
+2334 293 5215
+2335 293 5215
+2336 293 5215
+2337 293 5215
+2338 293 37703
+2339 293 19912
+2340 293 39372
+2341 293 17221
+2342 293 61058
+2408 293 2367
+2486 293 14972
+2804 293 27852657
+241 294 1
+248 294 50782
+249 294 65326
+250 294 27542
+251 294 44870
+252 294 44869
+639 294 2974
+886 294 65421
+887 294 1844
+888 294 37143
+899 294 60769
+1634 294 50221
+1635 294 13316
+1636 294 13316
+1691 294 30878
+1698 294 62704
+1699 294 22657
+1700 294 8243
+1701 294 57521
+1702 294 36014
+1970 294 22333
+1981 294 32850
+2045 294 61996
+2046 294 58526
+2047 294 34952
+2058 294 31030
+2311 294 10601
+2312 294 10601
+2313 294 41409
+2314 294 41409
+2316 294 48727
+2317 294 48727
+2318 294 48727
+2319 294 30188
+2320 294 43382
+2321 294 32781
+2322 294 60138
+2323 294 60138
+2324 294 60138
+2326 294 22716
+2327 294 22716
+2328 294 65493
+2329 294 59667
+2330 294 2540
+2331 294 26614
+2332 294 56916
+2333 294 56916
+2334 294 56916
+2335 294 56916
+2337 294 23398
+2338 294 48750
+2339 294 51337
+2340 294 49218
+2341 294 20273
+2342 294 56116
+2398 294 17794
+2399 294 17794
+2400 294 17794
+2401 294 17794
+2402 294 17794
+2404 294 13507
+2405 294 9416
+2406 294 36393
+2407 294 59746
+2408 294 10327
+2419 294 54801
+2476 294 24217
+2477 294 24217
+2478 294 24217
+2479 294 24217
+2480 294 24217
+2481 294 24217
+2482 294 25361
+2483 294 25212
+2484 294 17596
+2485 294 63604
+2486 294 16003
+2497 294 58029
+2509 294 22986
+2805 294 27852657
+242 295 1
+243 295 1
+244 295 1
+247 295 5401
+248 295 64338
+249 295 64338
+250 295 64338
+251 295 64338
+252 295 64338
+639 295 53704
+820 295 14736
+821 295 36581
+822 295 19957
+823 295 15387
+888 295 26021
+1662 295 34479
+1668 295 36229
+1669 295 46247
+1670 295 26130
+1671 295 6327
+1672 295 6327
+1673 295 9907
+1674 295 56796
+1676 295 41893
+1677 295 1144
+1678 295 55650
+1679 295 40023
+1680 295 11289
+1681 295 4962
+1682 295 3315
+1683 295 64850
+1684 295 64850
+1686 295 49508
+1687 295 27096
+1688 295 53820
+1689 295 52303
+1690 295 5571
+1691 295 609
+1692 295 11010
+1693 295 10773
+1694 295 10773
+1695 295 62540
+1697 295 31873
+1698 295 52976
+1699 295 39968
+1700 295 22781
+1701 295 38906
+1702 295 10079
+1971 295 54414
+1972 295 65382
+1973 295 65382
+1974 295 46399
+1975 295 43678
+1977 295 15159
+1978 295 21366
+1979 295 45749
+1980 295 41289
+1981 295 8017
+2047 295 43310
+2332 295 57203
+2333 295 13179
+2334 295 13179
+2335 295 46742
+2336 295 51306
+2337 295 46029
+2338 295 18161
+2339 295 2763
+2340 295 27858
+2341 295 39229
+2342 295 40243
+2408 295 38090
+2486 295 15558
+2806 295 27852657
+243 296 1
+248 296 24493
+249 296 3748
+250 296 43011
+251 296 4674
+252 296 4674
+639 296 33024
+821 296 28385
+822 296 3931
+823 296 23950
+888 296 61121
+1662 296 55034
+1669 296 44058
+1670 296 49828
+1671 296 5773
+1672 296 5773
+1673 296 42582
+1674 296 38054
+1676 296 5352
+1677 296 39632
+1678 296 50225
+1679 296 29758
+1680 296 10456
+1681 296 4683
+1682 296 63066
+1683 296 50988
+1684 296 61373
+1686 296 7082
+1687 296 18153
+1688 296 7683
+1689 296 15845
+1690 296 21184
+1691 296 16501
+1692 296 18274
+1693 296 13764
+1694 296 8985
+1695 296 8985
+1697 296 63098
+1698 296 18544
+1699 296 6995
+1700 296 32159
+1701 296 55703
+1702 296 14240
+1971 296 57270
+1972 296 8148
+1973 296 45460
+1974 296 45460
+1975 296 7162
+1977 296 55468
+1978 296 5201
+1979 296 42450
+1980 296 55866
+1981 296 12829
+2047 296 37962
+2332 296 4094
+2333 296 22162
+2334 296 57279
+2335 296 57279
+2336 296 3406
+2337 296 55486
+2338 296 59374
+2339 296 37265
+2340 296 64555
+2341 296 18061
+2342 296 30495
+2408 296 52533
+2486 296 49879
+2807 296 27852657
+244 297 1
+248 297 5661
+249 297 52649
+250 297 48296
+251 297 13971
+252 297 13971
+639 297 11795
+821 297 56712
+822 297 20357
+823 297 9009
+888 297 11185
+1662 297 44686
+1668 297 36229
+1669 297 54735
+1670 297 41202
+1671 297 38198
+1672 297 38198
+1673 297 63921
+1674 297 60074
+1676 297 32072
+1677 297 33607
+1678 297 23281
+1679 297 48652
+1680 297 21854
+1681 297 49177
+1682 297 59920
+1683 297 23474
+1684 297 13089
+1686 297 39402
+1687 297 30310
+1688 297 17276
+1689 297 59468
+1690 297 57307
+1691 297 8130
+1692 297 39834
+1693 297 9131
+1694 297 13910
+1695 297 156
+1697 297 58818
+1698 297 41771
+1699 297 25191
+1700 297 47375
+1701 297 12526
+1702 297 9642
+1971 297 31074
+1972 297 18794
+1973 297 47003
+1974 297 28020
+1975 297 521
+1977 297 30725
+1978 297 61641
+1979 297 14513
+1980 297 46984
+1981 297 32892
+2047 297 53996
+2332 297 21976
+2333 297 536
+2334 297 30940
+2335 297 64503
+2336 297 36125
+2337 297 6493
+2338 297 25945
+2339 297 48506
+2340 297 62973
+2341 297 38991
+2342 297 25894
+2408 297 58952
+2486 297 28426
+2808 297 27852657
+245 298 1
+605 298 9853
+606 298 20114
+614 298 59101
+621 298 45901
+623 298 10525
+626 298 29266
+627 298 29266
+628 298 29266
+629 298 64835
+630 298 64835
+631 298 45215
+632 298 13457
+635 298 11904
+636 298 59606
+637 298 59606
+638 298 23351
+639 298 59606
+813 298 64835
+814 298 64835
+815 298 45215
+816 298 13456
+817 298 59192
+819 298 11904
+820 298 59606
+821 298 59606
+822 298 23351
+823 298 53691
+888 298 59606
+1661 298 49883
+1662 298 40591
+1663 298 25795
+1667 298 14299
+1668 298 56394
+1669 298 47102
+1670 298 6120
+1671 298 29473
+1672 298 29473
+1673 298 21576
+1674 298 21576
+1676 298 12982
+1677 298 9276
+1678 298 62390
+1679 298 31418
+1680 298 17463
+1681 298 53511
+1682 298 28060
+1683 298 28060
+1684 298 28938
+1686 298 24859
+1687 298 17629
+1688 298 47489
+1689 298 45768
+1690 298 41310
+1691 298 53320
+1692 298 49817
+1693 298 49817
+1694 298 50695
+1695 298 55277
+1697 298 2519
+1698 298 53392
+1699 298 1283
+1700 298 51867
+1701 298 17662
+1702 298 29863
+1971 298 5010
+1972 298 5010
+1973 298 544
+1974 298 38590
+1975 298 58441
+1977 298 63039
+1978 298 45839
+1979 298 31310
+1980 298 47584
+1981 298 10065
+2047 298 45723
+2332 298 57173
+2333 298 57173
+2334 298 34442
+2335 298 39673
+2336 298 15105
+2337 298 33200
+2338 298 31707
+2339 298 49289
+2340 298 57343
+2341 298 37704
+2342 298 39967
+2408 298 54936
+2486 298 35488
+2809 298 27852657
+246 299 1
+2342 299 65520
+2810 299 27852657
+247 300 1
+248 300 8550
+249 300 46662
+250 300 24909
+251 300 24248
+252 300 24248
+639 300 226
+821 300 50239
+822 300 3817
+823 300 25415
+888 300 49437
+1671 300 36940
+1672 300 36940
+1673 300 18261
+1674 300 18261
+1676 300 26143
+1677 300 26143
+1678 300 26143
+1679 300 29777
+1680 300 37323
+1681 300 383
+1682 300 16025
+1683 300 16025
+1684 300 16025
+1686 300 35106
+1687 300 35106
+1688 300 46994
+1689 300 63319
+1690 300 48395
+1691 300 48012
+1692 300 4949
+1693 300 4949
+1694 300 4949
+1695 300 4949
+1697 300 49649
+1698 300 24956
+1699 300 43993
+1700 300 31659
+1701 300 45429
+1702 300 55829
+1971 300 33594
+1972 300 33594
+1973 300 33594
+1974 300 33594
+1975 300 33594
+1977 300 47708
+1978 300 19185
+1979 300 16063
+1980 300 55255
+1981 300 61852
+2047 300 27244
+2332 300 10651
+2333 300 10651
+2334 300 10651
+2335 300 10651
+2336 300 10651
+2337 300 10651
+2338 300 8832
+2339 300 42979
+2340 300 51802
+2341 300 31688
+2342 300 6548
+2408 300 63951
+2486 300 40549
+2811 300 27852657
+253 301 1
+254 301 1
+256 301 1
+259 301 1
+260 301 1
+262 301 2
+265 301 1
+269 301 1
+270 301 1
+272 301 2
+275 301 2
+279 301 1
+903 301 32761
+904 301 32761
+906 301 32761
+909 301 32761
+910 301 32761
+912 301 1
+915 301 32761
+919 301 32761
+920 301 32761
+922 301 1
+925 301 1
+929 301 32761
+934 301 32761
+935 301 32761
+937 301 32761
+940 301 32761
+941 301 32761
+943 301 1
+946 301 32761
+950 301 1
+951 301 1
+953 301 2
+956 301 2
+960 301 32762
+965 301 32761
+966 301 32761
+968 301 1
+971 301 1
+975 301 32762
+980 301 32761
+1222 301 2
+1224 301 2
+1427 301 2
+1429 301 2
+1432 301 49142
+1434 301 49142
+1437 301 49140
+1705 301 2
+1707 301 2
+1710 301 49142
+1712 301 49142
+1715 301 49140
+1720 301 49142
+1722 301 32761
+1725 301 16380
+1729 301 32761
+2060 301 1
+2061 301 1
+2063 301 24572
+2064 301 24573
+2066 301 24572
+2069 301 24572
+2070 301 40953
+2072 301 3
+2075 301 40952
+2079 301 49143
+2080 301 3
+2082 301 57335
+2085 301 8194
+2089 301 32763
+2094 301 49142
+2095 301 2
+2097 301 57333
+2100 301 8192
+2104 301 2
+2109 301 32761
+2421 301 40951
+2422 301 48120
+2424 301 20478
+2427 301 44022
+2431 301 32761
+2499 301 4095
+2812 301 27852657
+253 302 1
+255 302 65520
+257 302 65519
+258 302 65520
+259 302 1
+261 302 65520
+263 302 65517
+264 302 65518
+266 302 65519
+267 302 65518
+268 302 65520
+269 302 1
+271 302 65520
+273 302 65517
+274 302 65518
+276 302 65517
+277 302 65515
+278 302 65518
+280 302 65519
+281 302 65518
+282 302 65518
+283 302 65520
+903 302 32761
+905 302 32760
+907 302 65520
+908 302 32760
+909 302 32761
+911 302 32760
+913 302 65519
+914 302 32759
+916 302 65520
+917 302 32759
+918 302 32760
+919 302 32761
+921 302 32760
+923 302 65519
+924 302 32759
+926 302 65519
+927 302 65518
+928 302 32759
+930 302 65520
+931 302 32759
+932 302 32759
+933 302 32760
+934 302 32761
+936 302 32760
+938 302 65520
+939 302 32760
+940 302 32761
+941 302 32761
+943 302 32761
+944 302 65520
+945 302 65520
+946 302 32761
+948 302 32760
+950 302 1
+951 302 32761
+952 302 32760
+953 302 32761
+954 302 65518
+955 302 32758
+956 302 1
+957 302 65519
+958 302 65517
+959 302 32759
+960 302 32761
+961 302 65519
+962 302 32757
+963 302 65518
+964 302 32759
+965 302 32761
+966 302 32761
+968 302 32761
+969 302 65520
+970 302 65520
+971 302 1
+973 302 65520
+975 302 1
+976 302 65520
+977 302 32758
+978 302 32759
+979 302 32759
+980 302 32761
+982 302 32760
+984 302 32760
+1723 302 65520
+1724 302 65520
+1726 302 65520
+1727 302 65519
+1728 302 65520
+1730 302 65520
+1731 302 65519
+1732 302 65519
+1733 302 65520
+2060 302 1
+2061 302 2
+2062 302 1
+2063 302 24572
+2064 302 3
+2065 302 40952
+2066 302 1
+2067 302 16380
+2068 302 40950
+2069 302 24572
+2070 302 24574
+2071 302 2
+2072 302 24572
+2073 302 16380
+2074 302 16378
+2075 302 24571
+2077 302 40948
+2078 302 65520
+2079 302 49143
+2080 302 24572
+2081 302 40950
+2083 302 40945
+2084 302 65516
+2085 302 24571
+2086 302 24566
+2087 302 49131
+2088 302 49136
+2090 302 24566
+2091 302 8183
+2092 302 32754
+2093 302 49138
+2094 302 49142
+2095 302 49143
+2096 302 1
+2097 302 24571
+2098 302 24570
+2099 302 24569
+2100 302 8192
+2101 302 16381
+2102 302 40948
+2103 302 16379
+2104 302 49141
+2105 302 40948
+2106 302 8185
+2107 302 65517
+2108 302 49138
+2109 302 49141
+2110 302 16380
+2111 302 65520
+2112 302 32760
+2113 302 16379
+2114 302 16380
+2226 302 65520
+2227 302 65520
+2281 302 65520
+2282 302 65520
+2284 302 40950
+2285 302 40950
+2286 302 40951
+2347 302 65520
+2348 302 65520
+2350 302 40950
+2351 302 40950
+2352 302 40951
+2354 302 40950
+2355 302 16380
+2356 302 57331
+2357 302 16380
+2421 302 40951
+2422 302 40951
+2424 302 32760
+2425 302 65520
+2426 302 65520
+2427 302 8190
+2428 302 45045
+2429 302 12283
+2430 302 12284
+2431 302 65520
+2432 302 12283
+2433 302 16377
+2434 302 61423
+2435 302 49139
+2436 302 40950
+2437 302 65520
+2438 302 4094
+2439 302 61425
+2440 302 65520
+2441 302 16380
+2499 302 16380
+2500 302 41461
+2501 302 51187
+2502 302 43510
+2503 302 12285
+2511 302 30713
+2813 302 27852657
+254 303 1
+255 303 1
+257 303 1
+260 303 1
+261 303 1
+263 303 2
+266 303 1
+270 303 1
+271 303 1
+273 303 2
+276 303 2
+280 303 1
+904 303 32761
+905 303 32761
+907 303 32761
+910 303 32761
+911 303 32761
+913 303 1
+916 303 32761
+920 303 32761
+921 303 32761
+923 303 1
+926 303 1
+930 303 32761
+935 303 32761
+936 303 32761
+938 303 32761
+941 303 32761
+942 303 32761
+944 303 1
+947 303 32761
+951 303 1
+952 303 1
+954 303 2
+957 303 2
+961 303 32762
+966 303 32761
+967 303 32761
+969 303 1
+972 303 1
+976 303 32762
+981 303 32761
+1223 303 2
+1225 303 2
+1428 303 2
+1430 303 2
+1433 303 49142
+1435 303 49142
+1438 303 49140
+1706 303 2
+1708 303 2
+1711 303 49142
+1713 303 49142
+1716 303 49140
+1721 303 49142
+1723 303 32761
+1726 303 16380
+1730 303 32761
+2061 303 1
+2062 303 1
+2064 303 24572
+2065 303 24573
+2067 303 24572
+2070 303 24572
+2071 303 40953
+2073 303 3
+2076 303 40952
+2080 303 49143
+2081 303 3
+2083 303 57335
+2086 303 8194
+2090 303 32763
+2095 303 49142
+2096 303 2
+2098 303 57333
+2101 303 8192
+2105 303 2
+2110 303 32761
+2422 303 40951
+2423 303 48120
+2425 303 20478
+2428 303 44022
+2432 303 32761
+2500 303 4095
+2814 303 27852657
+254 304 1
+255 304 1
+257 304 1
+263 304 1
+273 304 1
+904 304 32761
+905 304 32761
+907 304 32761
+913 304 32761
+923 304 32761
+935 304 32761
+936 304 32761
+938 304 32761
+944 304 32761
+954 304 1
+969 304 32761
+2064 304 24570
+2065 304 24570
+2066 304 65520
+2067 304 24570
+2070 304 65520
+2071 304 65520
+2072 304 65520
+2073 304 24570
+2083 304 49142
+2098 304 49141
+2425 304 8190
+2815 304 27852657
+255 305 1
+258 305 65520
+267 305 17288
+268 305 17287
+281 305 62914
+282 305 13837
+283 305 31124
+284 305 8752
+293 305 46980
+303 305 37861
+307 305 22005
+310 305 65089
+311 305 63787
+313 305 16179
+323 305 63355
+325 305 16611
+330 305 56983
+343 305 29930
+350 305 14445
+354 305 43635
+377 305 29930
+379 305 18023
+393 305 62648
+470 305 29930
+473 305 18023
+477 305 50392
+646 305 6146
+649 305 9300
+653 305 45084
+658 305 50044
+1721 305 33965
+1724 305 28286
+1727 305 17311
+1728 305 44851
+1731 305 7385
+1732 305 62261
+1733 305 8504
+1748 305 45469
+1753 305 25416
+1768 305 45338
+1794 305 37146
+1795 305 13463
+1800 305 63840
+1806 305 37508
+1813 305 37508
+1826 305 65480
+1827 305 29801
+1829 305 19378
+1830 305 33483
+1835 305 12794
+1841 305 35664
+1848 305 45762
+1856 305 8254
+1871 305 28532
+1872 305 35824
+1873 305 16801
+1875 305 50085
+1880 305 58919
+1886 305 52071
+1893 305 32180
+1901 305 58066
+1910 305 49812
+1926 305 22016
+1927 305 22305
+1928 305 51185
+1929 305 55963
+1935 305 26117
+1941 305 39898
+1948 305 19027
+1956 305 42644
+1965 305 23044
+1975 305 38753
+1992 305 51742
+1993 305 41223
+1994 305 1696
+1995 305 46469
+1996 305 22847
+2007 305 46057
+2014 305 4412
+2022 305 5696
+2031 305 4316
+2041 305 25974
+2052 305 52742
+2353 305 62611
+2354 305 4523
+2355 305 8744
+2356 305 56469
+2357 305 47932
+2362 305 61616
+2368 305 50405
+2375 305 54944
+2383 305 34328
+2392 305 12000
+2402 305 45126
+2413 305 18225
+2491 305 48536
+2816 305 27852657
+256 306 1
+257 306 1
+258 306 1
+262 306 1
+263 306 1
+264 306 2
+267 306 1
+272 306 1
+273 306 1
+274 306 2
+277 306 2
+281 306 1
+906 306 32761
+907 306 32761
+908 306 32761
+912 306 32761
+913 306 32761
+914 306 1
+917 306 32761
+922 306 32761
+923 306 32761
+924 306 1
+927 306 1
+931 306 32761
+937 306 32761
+938 306 32761
+939 306 32761
+943 306 32761
+944 306 32761
+945 306 1
+948 306 32761
+953 306 1
+954 306 1
+955 306 2
+958 306 2
+962 306 32762
+968 306 32761
+969 306 32761
+970 306 1
+973 306 1
+977 306 32762
+982 306 32761
+1225 306 2
+1226 306 2
+1430 306 2
+1431 306 2
+1435 306 49142
+1436 306 49142
+1439 306 49140
+1708 306 2
+1709 306 2
+1713 306 49142
+1714 306 49142
+1717 306 49140
+1723 306 49142
+1724 306 32761
+1727 306 16380
+1731 306 32761
+2064 306 1
+2065 306 1
+2066 306 24572
+2067 306 24573
+2068 306 24572
+2072 306 24572
+2073 306 40953
+2074 306 3
+2077 306 40952
+2082 306 49143
+2083 306 3
+2084 306 57335
+2087 306 8194
+2091 306 32763
+2097 306 49142
+2098 306 2
+2099 306 57333
+2102 306 8192
+2106 306 2
+2111 306 32761
+2424 306 40951
+2425 306 48120
+2426 306 20478
+2429 306 44022
+2433 306 32761
+2501 306 4095
+2817 306 27852657
+256 307 1
+257 307 1
+258 307 1
+264 307 1
+265 307 65520
+266 307 65520
+267 307 65520
+268 307 65520
+274 307 1
+275 307 65519
+276 307 65519
+277 307 65519
+278 307 65518
+279 307 65520
+280 307 65520
+281 307 65520
+282 307 65518
+283 307 65520
+906 307 32761
+907 307 32761
+908 307 32761
+914 307 32761
+915 307 32760
+916 307 32760
+917 307 32760
+918 307 32760
+924 307 32761
+925 307 65520
+926 307 65520
+927 307 65520
+928 307 32759
+929 307 32760
+930 307 32760
+931 307 32760
+932 307 32759
+933 307 32760
+937 307 32761
+938 307 32761
+939 307 32761
+943 307 32761
+944 307 32761
+945 307 1
+948 307 32761
+953 307 32761
+954 307 32761
+955 307 32762
+956 307 65520
+957 307 65520
+959 307 32759
+960 307 65520
+961 307 65520
+962 307 32760
+963 307 65518
+964 307 32759
+968 307 32761
+969 307 32761
+970 307 1
+973 307 1
+975 307 32760
+976 307 32760
+977 307 32761
+978 307 32759
+979 307 32759
+982 307 32761
+984 307 32760
+1723 307 32761
+1724 307 32761
+1726 307 32760
+1728 307 32760
+1730 307 32760
+1732 307 65520
+1733 307 32760
+2064 307 1
+2065 307 1
+2066 307 24572
+2067 307 24572
+2068 307 24571
+2072 307 24571
+2073 307 24570
+2074 307 49141
+2075 307 65520
+2076 307 65519
+2077 307 24569
+2078 307 65520
+2080 307 65520
+2081 307 65520
+2082 307 24570
+2083 307 49140
+2084 307 32762
+2085 307 16377
+2086 307 57326
+2087 307 65518
+2088 307 32756
+2089 307 16378
+2090 307 57328
+2091 307 40949
+2092 307 65515
+2093 307 32758
+2097 307 49142
+2098 307 8191
+2099 307 57332
+2101 307 65519
+2102 307 57331
+2103 307 65520
+2104 307 16379
+2105 307 57329
+2106 307 8190
+2107 307 65518
+2108 307 65519
+2111 307 32761
+2113 307 32760
+2424 307 40951
+2425 307 45046
+2426 307 53236
+2428 307 65520
+2429 307 20475
+2430 307 32760
+2431 307 24570
+2432 307 53235
+2433 307 12285
+2434 307 65520
+2435 307 32760
+2501 307 4095
+2503 307 61426
+2818 307 27852657
+257 308 1
+258 308 1
+267 308 24124
+268 308 24125
+281 308 37946
+282 308 3806
+283 308 27931
+293 308 23325
+303 308 63169
+307 308 2254
+310 308 57842
+311 308 35246
+313 308 13938
+323 308 27567
+325 308 21617
+330 308 36361
+350 308 49184
+354 308 34122
+379 308 52061
+393 308 9508
+473 308 52061
+477 308 34473
+649 308 21050
+653 308 15469
+658 308 39357
+1724 308 51956
+1727 308 54923
+1728 308 42223
+1731 308 15092
+1732 308 32581
+1733 308 55285
+1748 308 42692
+1753 308 59788
+1768 308 45079
+1794 308 37326
+1795 308 61062
+1800 308 18237
+1806 308 9078
+1813 308 9078
+1826 308 30880
+1827 308 31381
+1829 308 2644
+1830 308 28498
+1835 308 19633
+1841 308 13596
+1848 308 18834
+1856 308 9756
+1871 308 7627
+1872 308 1907
+1873 308 61087
+1875 308 50266
+1880 308 51553
+1886 308 54725
+1893 308 1841
+1901 308 21009
+1910 308 11253
+1926 308 35028
+1927 308 35456
+1928 308 53201
+1929 308 22810
+1935 308 2663
+1941 308 3794
+1948 308 60351
+1956 308 3044
+1965 308 19821
+1975 308 8568
+1992 308 47153
+1993 308 24758
+1994 308 47725
+1995 308 17299
+1996 308 26305
+2007 308 61423
+2014 308 3572
+2022 308 10656
+2031 308 50536
+2041 308 59845
+2052 308 51277
+2353 308 39490
+2354 308 63902
+2355 308 41676
+2356 308 3412
+2357 308 14819
+2362 308 25824
+2368 308 54056
+2375 308 40601
+2383 308 11429
+2392 308 60843
+2402 308 31351
+2413 308 43488
+2491 308 19138
+2819 308 27852657
+258 309 1
+924 309 22854
+927 309 2228
+931 309 2228
+962 309 41784
+977 309 17814
+982 309 43779
+986 309 40284
+987 309 48634
+995 309 51211
+1020 309 23397
+1028 309 10927
+1039 309 21655
+1112 309 34324
+1128 309 37670
+1226 309 36100
+1266 309 40168
+1431 309 36100
+1439 309 50223
+1709 309 10752
+1717 309 10778
+1731 309 23360
+2068 309 8695
+2074 309 12474
+2077 309 45324
+2084 309 859
+2087 309 26824
+2091 309 58982
+2106 309 27005
+2111 309 45692
+2126 309 30461
+2149 309 878
+2153 309 18948
+2158 309 62254
+2164 309 29740
+2171 309 29740
+2180 309 58542
+2181 309 13241
+2185 309 59075
+2189 309 28303
+2194 309 3232
+2200 309 19425
+2207 309 64737
+2215 309 34997
+2225 309 49830
+2226 309 39583
+2227 309 3967
+2234 309 53632
+2239 309 26217
+2245 309 47004
+2252 309 38899
+2260 309 10028
+2269 309 40552
+2280 309 59706
+2281 309 20057
+2282 309 12493
+2285 309 26413
+2294 309 14686
+2300 309 57787
+2307 309 56239
+2315 309 57185
+2324 309 48531
+2334 309 7979
+2346 309 2150
+2347 309 47244
+2348 309 14585
+2351 309 38867
+2355 309 56919
+2366 309 6618
+2373 309 27426
+2381 309 37935
+2390 309 16450
+2400 309 12311
+2411 309 4332
+2424 309 39456
+2425 309 48184
+2426 309 65303
+2429 309 57709
+2433 309 25755
+2438 309 12331
+2444 309 12609
+2451 309 58451
+2459 309 3803
+2468 309 61439
+2478 309 46395
+2489 309 5939
+2501 309 2263
+2820 309 27852657
+259 310 1
+267 310 43986
+268 310 43986
+271 310 1
+281 310 49814
+282 310 16329
+283 310 60315
+284 310 59992
+293 310 46946
+303 310 45408
+307 310 58777
+310 310 55404
+311 310 43785
+313 310 23438
+323 310 33668
+325 310 33555
+330 310 3524
+343 310 61958
+350 310 1702
+354 310 6470
+376 310 5488
+377 310 56470
+379 310 33860
+393 310 25713
+468 310 9584
+470 310 52374
+473 310 37956
+477 310 57298
+644 310 18991
+646 310 43223
+649 310 22259
+653 310 15213
+658 310 1112
+1719 310 25898
+1721 310 13207
+1724 310 1567
+1727 310 56679
+1728 310 37984
+1731 310 10280
+1732 310 62434
+1733 310 59066
+1748 310 64971
+1753 310 44812
+1768 310 42447
+1794 310 20337
+1795 310 40582
+1800 310 37130
+1806 310 54293
+1813 310 54293
+1826 310 23129
+1827 310 21805
+1829 310 55053
+1830 310 64209
+1835 310 35354
+1841 310 20674
+1848 310 60377
+1856 310 6084
+1871 310 46839
+1872 310 26551
+1873 310 34148
+1875 310 42998
+1880 310 51008
+1886 310 21725
+1893 310 24156
+1901 310 53430
+1910 310 47346
+1926 310 61892
+1927 310 51257
+1928 310 5741
+1929 310 28548
+1935 310 38955
+1941 310 24138
+1948 310 25921
+1956 310 65287
+1965 310 20567
+1975 310 38742
+1992 310 63268
+1993 310 39784
+1994 310 13995
+1995 310 60615
+1996 310 32371
+2007 310 6884
+2014 310 10660
+2022 310 42375
+2031 310 56007
+2041 310 31513
+2052 310 58292
+2353 310 47383
+2354 310 500
+2355 310 25963
+2356 310 47529
+2357 310 1690
+2362 310 37640
+2368 310 5174
+2375 310 21261
+2383 310 51650
+2392 310 31768
+2402 310 61495
+2413 310 31994
+2491 310 17668
+2821 310 27852657
+260 311 1
+261 311 1
+263 311 1
+266 311 1
+276 311 1
+910 311 54601
+911 311 54601
+913 311 54601
+916 311 54601
+926 311 54601
+943 311 10920
+944 311 10920
+945 311 10920
+946 311 10920
+948 311 10920
+957 311 43681
+959 311 54601
+963 311 54601
+972 311 54601
+974 311 54601
+978 311 43681
+983 311 54601
+1437 311 30031
+1438 311 7241
+1439 311 11871
+1440 311 11871
+1715 311 30031
+1716 311 7241
+1717 311 11871
+1718 311 11871
+1726 311 20891
+1727 311 54602
+1728 311 11871
+1869 311 1
+1924 311 1
+1925 311 32762
+1990 311 1
+1991 311 32762
+1995 311 32762
+2070 311 32761
+2071 311 32761
+2072 311 41633
+2073 311 11722
+2074 311 44482
+2075 311 54601
+2076 311 46026
+2077 311 31604
+2078 311 52643
+2085 311 60517
+2086 311 64228
+2087 311 21852
+2088 311 44909
+2092 311 57787
+2100 311 30485
+2101 311 21911
+2102 311 45057
+2103 311 23750
+2107 311 8419
+2112 311 16153
+2230 311 24572
+2285 311 24572
+2286 311 34585
+2351 311 61427
+2352 311 18202
+2356 311 30032
+2427 311 17973
+2428 311 26475
+2429 311 19324
+2430 311 53440
+2434 311 21613
+2439 311 56762
+2490 311 6144
+2502 311 23833
+2822 311 27852657
+260 312 1
+261 312 1
+263 312 1
+266 312 1
+270 312 1
+271 312 1
+273 312 1
+276 312 2
+280 312 1
+910 312 32761
+911 312 32761
+913 312 32761
+916 312 32761
+920 312 32761
+921 312 32761
+923 312 32761
+926 312 1
+930 312 32761
+951 312 32761
+952 312 32761
+954 312 32761
+957 312 1
+961 312 1
+976 312 32761
+2070 312 1
+2071 312 1
+2073 312 1
+2076 312 1
+2080 312 24571
+2081 312 24571
+2082 312 65520
+2083 312 24571
+2086 312 49143
+2090 312 49142
+2105 312 49141
+2432 312 8190
+2823 312 27852657
+261 313 1
+267 313 44779
+268 313 44779
+271 313 1
+281 313 43692
+282 313 43654
+283 313 22912
+284 313 59992
+293 313 61873
+303 313 56600
+307 313 17639
+310 313 17743
+311 313 37273
+313 313 1402
+323 313 55016
+325 313 49180
+330 313 43459
+343 313 61958
+350 313 38675
+354 313 42844
+377 313 61958
+379 313 46764
+393 313 44342
+470 313 61958
+473 313 46764
+477 313 2180
+646 313 62214
+649 313 12191
+653 313 40486
+658 313 28416
+1721 313 39105
+1724 313 34786
+1727 313 7101
+1728 313 49470
+1731 313 10704
+1732 313 2619
+1733 313 32858
+1748 313 26317
+1753 313 15173
+1768 313 28515
+1794 313 29297
+1795 313 45813
+1800 313 36868
+1806 313 13821
+1813 313 13821
+1826 313 21407
+1827 313 39226
+1829 313 8816
+1830 313 42453
+1835 313 63533
+1841 313 21070
+1848 313 44167
+1856 313 30346
+1871 313 29127
+1872 313 47878
+1873 313 44976
+1875 313 23795
+1880 313 22758
+1886 313 63543
+1893 313 41481
+1901 313 56436
+1910 313 26090
+1926 313 2831
+1927 313 36668
+1928 313 9958
+1929 313 10028
+1935 313 58226
+1941 313 31486
+1948 313 801
+1956 313 56522
+1965 313 40653
+1975 313 14563
+1992 313 36940
+1993 313 30519
+1994 313 4337
+1995 313 47513
+1996 313 54722
+2007 313 49786
+2014 313 46650
+2022 313 1623
+2031 313 57335
+2041 313 53790
+2052 313 39227
+2353 313 45222
+2354 313 24521
+2355 313 43957
+2356 313 10034
+2357 313 44741
+2362 313 44165
+2368 313 38995
+2375 313 28888
+2383 313 48661
+2392 313 58397
+2402 313 38428
+2413 313 39295
+2491 313 38020
+2824 313 27852657
+262 314 1
+263 314 1
+264 314 1
+265 314 1
+266 314 1
+267 314 2
+268 314 1
+275 314 1
+276 314 1
+277 314 2
+278 314 2
+282 314 1
+912 314 32761
+913 314 32761
+914 314 32761
+915 314 32761
+916 314 32761
+917 314 1
+918 314 32761
+925 314 32761
+926 314 32761
+927 314 1
+928 314 1
+932 314 32761
+943 314 32761
+944 314 32761
+945 314 32761
+946 314 32761
+947 314 32761
+948 314 1
+949 314 32761
+956 314 1
+957 314 1
+958 314 2
+959 314 2
+963 314 32762
+971 314 32761
+972 314 32761
+973 314 1
+974 314 1
+978 314 32762
+983 314 32761
+1230 314 2
+1231 314 2
+1435 314 2
+1436 314 2
+1438 314 49142
+1439 314 49142
+1440 314 49140
+1713 314 2
+1714 314 2
+1716 314 49142
+1717 314 49142
+1718 314 49140
+1726 314 49142
+1727 314 32761
+1728 314 16380
+1732 314 32761
+2070 314 1
+2071 314 1
+2072 314 24572
+2073 314 24573
+2074 314 24572
+2075 314 24572
+2076 314 40953
+2077 314 3
+2078 314 40952
+2085 314 49143
+2086 314 3
+2087 314 57335
+2088 314 8194
+2092 314 32763
+2100 314 49142
+2101 314 2
+2102 314 57333
+2103 314 8192
+2107 314 2
+2112 314 32761
+2427 314 40951
+2428 314 48120
+2429 314 20478
+2430 314 44022
+2434 314 32761
+2502 314 4095
+2825 314 27852657
+262 315 1
+263 315 1
+264 315 1
+265 315 1
+266 315 1
+267 315 2
+268 315 1
+275 315 1
+276 315 1
+277 315 2
+278 315 2
+282 315 1
+912 315 32761
+913 315 32761
+914 315 32761
+915 315 32761
+916 315 32761
+917 315 1
+918 315 32761
+925 315 32761
+926 315 32761
+927 315 1
+928 315 1
+932 315 32761
+956 315 32761
+957 315 32761
+958 315 1
+959 315 1
+963 315 1
+978 315 32761
+2072 315 1
+2073 315 1
+2074 315 1
+2075 315 1
+2076 315 1
+2077 315 2
+2078 315 1
+2082 315 1
+2083 315 1
+2084 315 1
+2085 315 24572
+2086 315 24572
+2087 315 49144
+2088 315 49143
+2092 315 49142
+2107 315 49141
+2434 315 8190
+2826 315 27852657
+263 316 1
+267 316 20706
+268 316 20706
+281 316 33101
+282 316 46936
+283 316 2121
+293 316 37474
+303 316 29473
+307 316 59641
+310 316 37661
+311 316 26357
+313 316 58344
+323 316 64018
+325 316 20683
+330 316 15123
+350 316 19180
+354 316 43587
+379 316 47129
+393 316 37082
+473 316 47129
+477 316 1940
+649 316 56598
+653 316 2238
+658 316 28998
+1724 316 6404
+1727 316 31526
+1728 316 7060
+1731 316 33466
+1732 316 834
+1733 316 12005
+1748 316 22816
+1753 316 20959
+1768 316 50404
+1794 316 12466
+1795 316 9154
+1800 316 58939
+1806 316 61304
+1813 316 61304
+1826 316 39009
+1827 316 21823
+1829 316 64029
+1830 316 4043
+1835 316 61324
+1841 316 59180
+1848 316 60862
+1856 316 65079
+1871 316 52816
+1872 316 39975
+1873 316 57499
+1875 316 30218
+1880 316 48495
+1886 316 34225
+1893 316 37810
+1901 316 17054
+1910 316 17496
+1926 316 24875
+1927 316 57449
+1928 316 38781
+1929 316 56127
+1935 316 843
+1941 316 915
+1948 316 48817
+1956 316 42868
+1965 316 58067
+1975 316 40571
+1992 316 63975
+1993 316 50218
+1994 316 50110
+1995 316 38058
+1996 316 22870
+2007 316 30785
+2014 316 63212
+2022 316 28639
+2031 316 6138
+2041 316 24115
+2052 316 49065
+2353 316 26402
+2354 316 33748
+2355 316 5708
+2356 316 62408
+2357 316 41903
+2362 316 46328
+2368 316 6784
+2375 316 65038
+2383 316 34283
+2392 316 3856
+2402 316 48816
+2413 316 3231
+2491 316 40266
+2827 316 27852657
+264 317 1
+267 317 44832
+268 317 44831
+281 317 210
+282 317 18745
+283 317 63576
+293 317 6586
+303 317 62953
+307 317 54422
+310 317 27860
+311 317 36213
+313 317 2693
+323 317 64073
+325 317 40354
+330 317 45274
+350 317 38906
+354 317 6751
+379 317 18392
+393 317 18242
+473 317 18392
+477 317 6835
+649 317 8923
+653 317 18540
+658 317 4636
+1724 317 59117
+1727 317 19431
+1728 317 53778
+1731 317 39748
+1732 317 28606
+1733 317 45985
+1748 317 1445
+1753 317 26922
+1768 317 9098
+1794 317 22760
+1795 317 16406
+1800 317 52642
+1806 317 19313
+1813 317 19313
+1826 317 10456
+1827 317 19461
+1829 317 26991
+1830 317 37559
+1835 317 32412
+1841 317 32702
+1848 317 38091
+1856 317 18778
+1871 317 22709
+1872 317 57403
+1873 317 64890
+1875 317 51499
+1880 317 53237
+1886 317 4599
+1893 317 62583
+1901 317 30636
+1910 317 11858
+1926 317 41003
+1927 317 45137
+1928 317 58224
+1929 317 55722
+1935 317 48816
+1941 317 59605
+1948 317 28828
+1956 317 4680
+1965 317 15285
+1975 317 3427
+1992 317 58010
+1993 317 61599
+1994 317 54593
+1995 317 8634
+1996 317 6417
+2007 317 20929
+2014 317 26255
+2022 317 27860
+2031 317 54996
+2041 317 14804
+2052 317 11377
+2353 317 34374
+2354 317 28475
+2355 317 26855
+2356 317 21589
+2357 317 35262
+2362 317 1585
+2368 317 60401
+2375 317 35645
+2383 317 23183
+2392 317 10647
+2402 317 16310
+2413 317 51952
+2491 317 61713
+2828 317 27852657
+265 318 1
+267 318 62791
+268 318 62791
+280 318 1
+281 318 45435
+282 318 1594
+283 318 64385
+293 318 58791
+303 318 27043
+307 318 32637
+311 318 59154
+313 318 29501
+323 318 59154
+325 318 29501
+330 318 39230
+350 318 23134
+354 318 22912
+393 318 39867
+477 318 34663
+653 318 53508
+658 318 6276
+1727 318 31303
+1728 318 16642
+1731 318 55930
+1732 318 34214
+1733 318 47826
+1748 318 14072
+1753 318 21609
+1768 318 35326
+1794 318 46295
+1795 318 15239
+1800 318 59807
+1806 318 50472
+1813 318 50472
+1826 318 15153
+1827 318 10447
+1829 318 17117
+1830 318 56492
+1835 318 57884
+1841 318 7934
+1848 318 18448
+1856 318 33497
+1871 318 29157
+1872 318 17366
+1873 318 65432
+1875 318 36461
+1880 318 34792
+1886 318 64732
+1893 318 53543
+1901 318 21919
+1910 318 53943
+1926 318 16169
+1927 318 12813
+1928 318 797
+1929 318 58890
+1935 318 7578
+1941 318 53531
+1948 318 16335
+1956 318 54889
+1965 318 19925
+1975 318 31503
+1992 318 57823
+1993 318 54048
+1994 318 13479
+1995 318 48296
+1996 318 18804
+2007 318 55008
+2014 318 46834
+2022 318 37818
+2031 318 55239
+2041 318 19857
+2052 318 53875
+2353 318 4776
+2354 318 51857
+2355 318 56730
+2356 318 6289
+2357 318 14684
+2362 318 50012
+2368 318 33444
+2375 318 27708
+2383 318 11567
+2392 318 25202
+2402 318 5919
+2413 318 63920
+2491 318 24339
+2829 318 27852657
+266 319 1
+267 319 65503
+268 319 65503
+280 319 65520
+281 319 6422
+282 319 63570
+283 319 63552
+293 319 52742
+303 319 34402
+307 319 45212
+311 319 40960
+313 319 48452
+323 319 40960
+325 319 48452
+330 319 46585
+350 319 23891
+354 319 17237
+393 319 56252
+477 319 11891
+653 319 42372
+658 319 40622
+1727 319 43072
+1728 319 39940
+1731 319 15581
+1732 319 44611
+1733 319 21921
+1748 319 22201
+1753 319 34130
+1768 319 53505
+1794 319 9505
+1795 319 59710
+1800 319 38801
+1806 319 48738
+1813 319 48738
+1826 319 26360
+1827 319 36082
+1829 319 13659
+1830 319 39904
+1835 319 35746
+1841 319 10434
+1848 319 13664
+1856 319 30447
+1871 319 27713
+1872 319 58582
+1873 319 24359
+1875 319 60192
+1880 319 65329
+1886 319 48829
+1893 319 24220
+1901 319 35327
+1910 319 4880
+1926 319 20114
+1927 319 26544
+1928 319 25858
+1929 319 56106
+1935 319 48425
+1941 319 13353
+1948 319 56292
+1956 319 43533
+1965 319 31166
+1975 319 26286
+1992 319 54947
+1993 319 12670
+1994 319 55502
+1995 319 60828
+1996 319 16349
+2007 319 42245
+2014 319 1966
+2022 319 50767
+2031 319 39369
+2041 319 3331
+2052 319 42566
+2353 319 33461
+2354 319 10554
+2355 319 9339
+2356 319 24130
+2357 319 61271
+2362 319 26435
+2368 319 53163
+2375 319 37774
+2383 319 58598
+2392 319 13603
+2402 319 53724
+2413 319 50176
+2491 319 21143
+2830 319 27852657
+267 320 1
+277 320 65513
+278 320 62893
+282 320 62893
+292 320 50271
+302 320 9143
+306 320 21765
+309 320 18275
+312 320 62626
+322 320 18275
+324 320 62626
+329 320 53833
+349 320 15380
+353 320 16295
+392 320 15301
+467 320 58322
+643 320 57564
+657 320 18627
+1717 320 53930
+1718 320 2807
+1727 320 3543
+1728 320 18186
+1732 320 37542
+1747 320 42322
+1752 320 55275
+1767 320 37835
+1790 320 41015
+1794 320 32385
+1799 320 18472
+1805 320 65026
+1812 320 65026
+1822 320 19852
+1823 320 63571
+1825 320 3600
+1829 320 15718
+1834 320 22132
+1840 320 50307
+1847 320 52559
+1855 320 53054
+1867 320 3957
+1868 320 37708
+1869 320 17122
+1874 320 55280
+1879 320 43004
+1885 320 36303
+1892 320 47494
+1900 320 36516
+1909 320 48983
+1922 320 49142
+1923 320 53598
+1924 320 29957
+1925 320 14197
+1934 320 44478
+1940 320 41890
+1947 320 17169
+1955 320 37100
+1964 320 48549
+1974 320 65087
+1988 320 62308
+1989 320 15332
+1990 320 47378
+1991 320 19325
+1995 320 7507
+2006 320 51866
+2013 320 11222
+2021 320 7023
+2030 320 7675
+2040 320 18033
+2051 320 18467
+2349 320 3107
+2350 320 51492
+2351 320 3931
+2352 320 52243
+2356 320 31488
+2361 320 13698
+2367 320 43871
+2374 320 57279
+2382 320 34186
+2391 320 8215
+2401 320 59343
+2412 320 59043
+2490 320 58291
+2831 320 27852657
+268 321 1
+282 321 65520
+927 321 25680
+928 321 3950
+932 321 3950
+963 321 58188
+978 321 32986
+983 321 44269
+988 321 23397
+996 321 36384
+1021 321 23397
+1029 321 36384
+1040 321 51755
+1113 321 59781
+1129 321 8062
+1267 321 13611
+1440 321 20802
+1718 321 21530
+1732 321 20131
+2077 321 16977
+2078 321 58522
+2087 321 42726
+2088 321 2598
+2092 321 17341
+2107 321 38977
+2112 321 14078
+2127 321 17501
+2150 321 29054
+2154 321 2319
+2159 321 8468
+2165 321 4421
+2172 321 4421
+2183 321 16347
+2184 321 32236
+2186 321 43411
+2190 321 11980
+2195 321 52987
+2201 321 20668
+2208 321 12409
+2216 321 7988
+2228 321 50284
+2229 321 20142
+2230 321 55003
+2235 321 63211
+2240 321 65361
+2246 321 29236
+2253 321 44853
+2261 321 40180
+2270 321 32192
+2283 321 64429
+2284 321 44358
+2285 321 28973
+2286 321 29538
+2295 321 62429
+2301 321 24261
+2308 321 37776
+2316 321 11512
+2325 321 60814
+2335 321 28622
+2349 321 38283
+2350 321 24963
+2351 321 28286
+2352 321 58827
+2356 321 63826
+2367 321 25184
+2374 321 59983
+2382 321 40915
+2391 321 48146
+2401 321 7629
+2412 321 44528
+2427 321 26808
+2428 321 1418
+2429 321 59306
+2430 321 59945
+2434 321 36802
+2439 321 64996
+2445 321 22547
+2452 321 20007
+2460 321 63362
+2469 321 59656
+2479 321 9249
+2490 321 41862
+2502 321 8239
+2832 321 27852657
+269 322 1
+271 322 65520
+273 322 65519
+274 322 65520
+276 322 65519
+277 322 65519
+278 322 65520
+280 322 65519
+281 322 65519
+282 322 65519
+283 322 65520
+919 322 54601
+921 322 10920
+923 322 21840
+924 322 10920
+926 322 21840
+927 322 21840
+928 322 10920
+930 322 21840
+931 322 21840
+932 322 21840
+933 322 10920
+950 322 54601
+952 322 10920
+954 322 21840
+955 322 10920
+959 322 54601
+961 322 21840
+962 322 21840
+964 322 10920
+978 322 43681
+979 322 54601
+984 322 54601
+1447 322 54603
+1448 322 12821
+1449 322 47242
+1450 322 47242
+1725 322 54603
+1726 322 12821
+1727 322 47242
+1728 322 47242
+1730 322 1898
+1731 322 21837
+1732 322 47241
+1733 322 65520
+1873 322 29123
+1928 322 29123
+1929 322 10924
+1994 322 29123
+1995 322 10924
+1996 322 10924
+2079 322 47776
+2080 322 65518
+2081 322 17742
+2082 322 53235
+2083 322 17505
+2084 322 65284
+2085 322 39586
+2086 322 2135
+2087 322 30981
+2088 322 31218
+2089 322 13650
+2090 322 17148
+2091 322 11809
+2092 322 13472
+2093 322 47775
+2104 322 13650
+2105 322 47181
+2106 322 41842
+2107 322 55790
+2108 322 6826
+2113 322 24571
+2234 322 55515
+2289 322 55515
+2290 322 51882
+2355 322 18658
+2356 322 53695
+2357 322 42774
+2431 322 23206
+2432 322 41692
+2433 322 47122
+2434 322 34518
+2435 322 15924
+2440 322 50733
+2491 322 59382
+2503 322 55914
+2833 322 27852657
+270 323 1
+271 323 1
+273 323 1
+276 323 1
+280 323 1
+920 323 54601
+921 323 54601
+923 323 54601
+926 323 54601
+930 323 54601
+953 323 10920
+954 323 10920
+955 323 10920
+956 323 10920
+958 323 10920
+961 323 43681
+963 323 54601
+964 323 54601
+976 323 54601
+978 323 54601
+979 323 43681
+984 323 54601
+1447 323 30031
+1448 323 7241
+1449 323 11871
+1450 323 11871
+1725 323 30031
+1726 323 7241
+1727 323 11871
+1728 323 11871
+1730 323 20891
+1731 323 54602
+1732 323 11871
+1873 323 1
+1928 323 1
+1929 323 32762
+1994 323 1
+1995 323 32762
+1996 323 32762
+2080 323 32761
+2081 323 32761
+2082 323 41633
+2083 323 11722
+2084 323 44482
+2085 323 54601
+2086 323 46026
+2087 323 31604
+2088 323 52643
+2089 323 60517
+2090 323 64228
+2091 323 21852
+2092 323 44909
+2093 323 57787
+2104 323 30485
+2105 323 21911
+2106 323 45057
+2107 323 23750
+2108 323 8419
+2113 323 16153
+2234 323 24572
+2289 323 24572
+2290 323 34585
+2355 323 61427
+2356 323 18202
+2357 323 30032
+2431 323 17973
+2432 323 26475
+2433 323 19324
+2434 323 53440
+2435 323 21613
+2440 323 56762
+2491 323 6144
+2503 323 23833
+2834 323 27852657
+271 324 1
+273 324 19751
+276 324 47257
+280 324 47257
+378 324 65490
+384 324 39509
+404 324 13825
+412 324 13825
+429 324 13825
+469 324 33084
+470 324 33084
+472 324 33053
+475 324 2654
+498 324 56541
+509 324 13831
+521 324 13831
+545 324 27656
+588 324 13831
+645 324 33084
+646 324 33084
+648 324 33053
+651 324 2654
+655 324 2654
+675 324 56541
+686 324 13831
+698 324 13831
+723 324 27656
+769 324 27662
+834 324 13831
+901 324 60278
+902 324 60278
+904 324 38602
+905 324 61338
+907 324 1060
+910 324 29308
+911 324 6941
+913 324 9520
+916 324 8460
+920 324 29308
+921 324 50089
+923 324 62756
+926 324 34231
+930 324 25771
+951 324 29308
+952 324 50089
+954 324 61334
+957 324 19087
+961 324 39868
+976 324 14097
+990 324 18879
+992 324 9697
+994 324 44854
+1000 324 31832
+1023 324 18569
+1025 324 9387
+1027 324 44544
+1034 324 1158
+1049 324 3470
+1069 324 3470
+1102 324 43036
+1103 324 57652
+1107 324 35948
+1111 324 5584
+1122 324 18537
+1138 324 55269
+1159 324 20984
+1189 324 17514
+1237 324 33079
+1238 324 47695
+1239 324 51165
+1246 324 59869
+1260 324 26180
+1278 324 53847
+1303 324 14858
+1336 324 17758
+1381 324 244
+1442 324 47087
+1443 324 61703
+1445 324 65173
+1448 324 23656
+1466 324 26102
+1486 324 65488
+1513 324 41246
+1548 324 38651
+1593 324 36561
+1648 324 36317
+1720 324 21204
+1721 324 20105
+1723 324 25870
+1726 324 52159
+1730 324 20797
+1765 324 6494
+1792 324 17617
+1827 324 12074
+1872 324 58212
+1927 324 20854
+1993 324 50058
+2080 324 19172
+2081 324 6266
+2083 324 54192
+2086 324 35122
+2090 324 29304
+2105 324 7132
+2125 324 50515
+2152 324 40533
+2188 324 63784
+2233 324 42736
+2288 324 18310
+2354 324 20117
+2432 324 23010
+2835 324 27852657
+272 325 1
+273 325 1
+274 325 1
+275 325 1
+276 325 1
+277 325 2
+278 325 1
+279 325 1
+280 325 1
+281 325 2
+282 325 2
+283 325 1
+922 325 32761
+923 325 32761
+924 325 32761
+925 325 32761
+926 325 32761
+927 325 1
+928 325 32761
+929 325 32761
+930 325 32761
+931 325 1
+932 325 1
+933 325 32761
+953 325 32761
+954 325 32761
+955 325 32761
+956 325 32761
+957 325 32761
+958 325 1
+959 325 32761
+960 325 1
+961 325 1
+962 325 2
+963 325 2
+964 325 32762
+975 325 32761
+976 325 32761
+977 325 1
+978 325 1
+979 325 32762
+984 325 32761
+1239 325 2
+1240 325 2
+1445 325 2
+1446 325 2
+1448 325 49142
+1449 325 49142
+1450 325 49140
+1723 325 2
+1724 325 2
+1726 325 49142
+1727 325 49142
+1728 325 49140
+1730 325 49142
+1731 325 32761
+1732 325 16380
+1733 325 32761
+2080 325 1
+2081 325 1
+2082 325 24572
+2083 325 24573
+2084 325 24572
+2085 325 24572
+2086 325 40953
+2087 325 3
+2088 325 40952
+2089 325 49143
+2090 325 3
+2091 325 57335
+2092 325 8194
+2093 325 32763
+2104 325 49142
+2105 325 2
+2106 325 57333
+2107 325 8192
+2108 325 2
+2113 325 32761
+2431 325 40951
+2432 325 48120
+2433 325 20478
+2434 325 44022
+2435 325 32761
+2503 325 4095
+2836 325 27852657
+272 326 1
+273 326 1
+274 326 1
+275 326 1
+276 326 1
+277 326 2
+278 326 1
+279 326 1
+280 326 1
+281 326 2
+282 326 2
+283 326 1
+922 326 32761
+923 326 32761
+924 326 32761
+925 326 32761
+926 326 32761
+927 326 1
+928 326 32761
+929 326 32761
+930 326 32761
+931 326 1
+932 326 1
+933 326 32761
+953 326 32761
+954 326 32761
+955 326 32761
+956 326 32761
+957 326 32761
+958 326 1
+959 326 32761
+960 326 1
+961 326 1
+962 326 2
+963 326 2
+964 326 32762
+975 326 32761
+976 326 32761
+977 326 1
+978 326 1
+979 326 32762
+984 326 32761
+1726 326 32761
+1727 326 32761
+1728 326 32761
+1730 326 32761
+1731 326 32761
+1732 326 1
+1733 326 32761
+2080 326 1
+2081 326 1
+2082 326 24572
+2083 326 24572
+2084 326 24571
+2085 326 24572
+2086 326 49143
+2087 326 8193
+2088 326 49143
+2089 326 49143
+2090 326 8193
+2091 326 57335
+2092 326 16385
+2093 326 32763
+2101 326 1
+2102 326 1
+2103 326 1
+2104 326 49142
+2105 326 8192
+2106 326 57333
+2107 326 16383
+2108 326 2
+2113 326 32761
+2428 326 32761
+2429 326 32761
+2430 326 32761
+2431 326 40951
+2432 326 12286
+2433 326 20476
+2434 326 57332
+2435 326 32761
+2503 326 4095
+2837 326 27852657
+273 327 1
+274 327 1
+277 327 31036
+278 327 31035
+281 327 10345
+282 327 31035
+923 327 8192
+924 327 8192
+926 327 20692
+927 327 18537
+928 327 10345
+930 327 20692
+931 327 42245
+932 327 31037
+933 327 20692
+958 327 46146
+959 327 46146
+962 327 62393
+963 327 9803
+964 327 36074
+976 327 44829
+977 327 20148
+978 327 44287
+979 327 10072
+984 327 60211
+1731 327 55139
+1732 327 27248
+1733 327 27248
+1873 327 58164
+1875 327 20401
+1893 327 17492
+1901 327 17492
+1910 327 17492
+1926 327 52319
+1927 327 52319
+1928 327 44962
+1929 327 43194
+1941 327 19728
+1948 327 25855
+1956 327 25855
+1965 327 43347
+1975 327 25855
+1992 327 52319
+1993 327 52319
+1994 327 44962
+1995 327 43194
+1996 327 43194
+2007 327 19728
+2014 327 25855
+2022 327 25855
+2031 327 43347
+2041 327 51710
+2052 327 25855
+2080 327 56470
+2081 327 56470
+2082 327 2431
+2083 327 31838
+2084 327 40889
+2085 327 56994
+2086 327 12701
+2087 327 49491
+2088 327 8602
+2089 327 37347
+2090 327 26480
+2091 327 12429
+2092 327 31616
+2093 327 2323
+2104 327 37347
+2105 327 12068
+2106 327 51272
+2107 327 34720
+2108 327 31245
+2113 327 28922
+2126 327 7498
+2127 327 29596
+2128 327 55647
+2133 327 32626
+2153 327 55897
+2154 327 12474
+2155 327 38525
+2160 327 41555
+2166 327 9888
+2173 327 9888
+2187 327 11456
+2188 327 39240
+2190 327 3796
+2191 327 29847
+2196 327 54975
+2202 327 15839
+2209 327 47673
+2217 327 37785
+2232 327 56270
+2233 327 18533
+2234 327 38421
+2236 327 50095
+2241 327 17200
+2247 327 64959
+2254 327 26780
+2262 327 28435
+2271 327 56171
+2287 327 33989
+2288 327 61773
+2289 327 16140
+2290 327 26975
+2296 327 39523
+2302 327 52285
+2309 327 49973
+2317 327 3870
+2326 327 17363
+2336 327 26713
+2353 327 29847
+2354 327 11453
+2355 327 60821
+2356 327 17805
+2357 327 60823
+2368 327 31496
+2375 327 61228
+2383 327 12087
+2392 327 22828
+2402 327 19357
+2413 327 58165
+2431 327 8890
+2432 327 51409
+2433 327 40929
+2434 327 45686
+2435 327 49815
+2440 327 9906
+2446 327 50857
+2453 327 49905
+2461 327 35949
+2470 327 51953
+2480 327 11579
+2491 327 56478
+2503 327 50903
+2838 327 27852657
+274 328 1
+931 328 22854
+932 328 2228
+933 328 2228
+964 328 41784
+979 328 17814
+984 328 43779
+991 328 40284
+993 328 48634
+997 328 51211
+1026 328 23397
+1030 328 10927
+1041 328 21655
+1114 328 34324
+1130 328 37670
+1240 328 36100
+1268 328 40168
+1446 328 36100
+1450 328 50223
+1724 328 10752
+1728 328 10778
+1733 328 23360
+2084 328 8695
+2087 328 12474
+2088 328 45324
+2091 328 859
+2092 328 26824
+2093 328 58982
+2108 328 27005
+2113 328 45692
+2128 328 30461
+2154 328 878
+2155 328 18948
+2160 328 62254
+2166 328 29740
+2173 328 29740
+2187 328 58542
+2188 328 13241
+2190 328 59075
+2191 328 28303
+2196 328 3232
+2202 328 19425
+2209 328 64737
+2217 328 34997
+2232 328 49830
+2233 328 39583
+2234 328 3967
+2236 328 53632
+2241 328 26217
+2247 328 47004
+2254 328 38899
+2262 328 10028
+2271 328 40552
+2287 328 59706
+2288 328 20057
+2289 328 12493
+2290 328 26413
+2296 328 14686
+2302 328 57787
+2309 328 56239
+2317 328 57185
+2326 328 48531
+2336 328 7979
+2353 328 2150
+2354 328 47244
+2355 328 14585
+2356 328 38867
+2357 328 56919
+2368 328 6618
+2375 328 27426
+2383 328 37935
+2392 328 16450
+2402 328 12311
+2413 328 4332
+2431 328 39456
+2432 328 48184
+2433 328 65303
+2434 328 57709
+2435 328 25755
+2440 328 12331
+2446 328 12609
+2453 328 58451
+2461 328 3803
+2470 328 61439
+2480 328 46395
+2491 328 5939
+2503 328 2263
+2839 328 27852657
+275 329 1
+276 329 1
+277 329 1
+278 329 1
+282 329 1
+925 329 54601
+926 329 54601
+927 329 54601
+928 329 54601
+932 329 54601
+956 329 54601
+961 329 10920
+962 329 10920
+964 329 10920
+976 329 10920
+977 329 10920
+978 329 10920
+979 329 21840
+984 329 10920
+1447 329 35490
+1448 329 24570
+1449 329 1
+1450 329 1
+1725 329 35490
+1726 329 24570
+1727 329 1
+1728 329 1
+1730 329 54601
+1731 329 3
+1732 329 43682
+1873 329 43680
+1928 329 43680
+1929 329 65520
+1994 329 43680
+1995 329 65520
+1996 329 65520
+2080 329 32761
+2081 329 32761
+2082 329 23888
+2083 329 23888
+2084 329 56648
+2085 329 58696
+2086 329 32078
+2087 329 49823
+2088 329 58696
+2089 329 5005
+2090 329 43908
+2091 329 61653
+2092 329 43226
+2093 329 37765
+2104 329 5005
+2105 329 61653
+2106 329 13877
+2107 329 22067
+2108 329 21612
+2113 329 49368
+2234 329 5459
+2289 329 5459
+2290 329 60968
+2355 329 46410
+2356 329 6369
+2357 329 60060
+2431 329 47548
+2432 329 54032
+2433 329 36288
+2434 329 60630
+2435 329 60971
+2440 329 43567
+2491 329 61425
+2503 329 20019
+2840 329 27852657
+276 330 1
+277 330 55177
+278 330 55177
+280 330 1
+281 330 40233
+282 330 55177
+923 330 65518
+924 330 65518
+926 330 58622
+927 330 62070
+928 330 62073
+930 330 58622
+931 330 7757
+932 330 573
+933 330 4021
+958 330 14868
+959 330 14868
+962 330 14073
+963 330 47982
+964 330 19897
+976 330 6899
+977 330 6316
+978 330 47409
+979 330 27731
+984 330 11855
+1731 330 65415
+1732 330 33810
+1733 330 33810
+1873 330 48619
+1875 330 28544
+1893 330 39771
+1901 330 39771
+1910 330 39771
+1926 330 43947
+1927 330 43947
+1928 330 27045
+1929 330 45796
+1941 330 22650
+1948 330 45447
+1956 330 45447
+1965 330 19697
+1975 330 45447
+1992 330 43947
+1993 330 43947
+1994 330 27045
+1995 330 45796
+1996 330 45796
+2007 330 22650
+2014 330 45447
+2022 330 45447
+2031 330 19697
+2041 330 25373
+2052 330 45447
+2080 330 3887
+2081 330 3887
+2082 330 10881
+2083 330 38264
+2084 330 34377
+2085 330 37057
+2086 330 38563
+2087 330 55183
+2088 330 20806
+2089 330 25573
+2090 330 46544
+2091 330 15271
+2092 330 61992
+2093 330 43988
+2104 330 25573
+2105 330 29376
+2106 330 13887
+2107 330 42916
+2108 330 29181
+2113 330 50714
+2126 330 37822
+2127 330 422
+2128 330 39797
+2133 330 38933
+2153 330 6646
+2154 330 34767
+2155 330 8621
+2160 330 47132
+2166 330 6570
+2173 330 6570
+2187 330 23515
+2188 330 56569
+2190 330 1409
+2191 330 40784
+2196 330 41895
+2202 330 64237
+2209 330 63522
+2217 330 56952
+2232 330 39217
+2233 330 6750
+2234 330 55968
+2236 330 25930
+2241 330 64863
+2247 330 29445
+2254 330 34174
+2262 330 25692
+2271 330 34261
+2287 330 55543
+2288 330 23076
+2289 330 6773
+2290 330 16506
+2296 330 56596
+2302 330 34303
+2309 330 33721
+2317 330 3128
+2326 330 57139
+2336 330 22878
+2353 330 41989
+2354 330 2361
+2355 330 29340
+2356 330 58797
+2357 330 3803
+2368 330 49871
+2375 330 23348
+2383 330 21350
+2392 330 30912
+2402 330 6063
+2413 330 48706
+2431 330 11201
+2432 330 15549
+2433 330 14712
+2434 330 52034
+2435 330 30184
+2440 330 16732
+2446 330 22381
+2453 330 14433
+2461 330 60344
+2470 330 1799
+2480 330 23716
+2491 330 34674
+2503 330 54144
+2841 330 27852657
+277 331 1
+281 331 65513
+282 331 62893
+283 331 62893
+293 331 50271
+303 331 9143
+307 331 21765
+311 331 18275
+313 331 62626
+323 331 18275
+325 331 62626
+330 331 53833
+350 331 15380
+354 331 16295
+393 331 15301
+477 331 58322
+653 331 57564
+658 331 18627
+1727 331 53930
+1728 331 2807
+1731 331 3543
+1732 331 18186
+1733 331 37542
+1748 331 42322
+1753 331 55275
+1768 331 37835
+1794 331 41015
+1795 331 32385
+1800 331 18472
+1806 331 65026
+1813 331 65026
+1826 331 19852
+1827 331 63571
+1829 331 3600
+1830 331 15718
+1835 331 22132
+1841 331 50307
+1848 331 52559
+1856 331 53054
+1871 331 3957
+1872 331 37708
+1873 331 17122
+1875 331 55280
+1880 331 43004
+1886 331 36303
+1893 331 47494
+1901 331 36516
+1910 331 48983
+1926 331 49142
+1927 331 53598
+1928 331 29957
+1929 331 14197
+1935 331 44478
+1941 331 41890
+1948 331 17169
+1956 331 37100
+1965 331 48549
+1975 331 65087
+1992 331 62308
+1993 331 15332
+1994 331 47378
+1995 331 19325
+1996 331 7507
+2007 331 51866
+2014 331 11222
+2022 331 7023
+2031 331 7675
+2041 331 18033
+2052 331 18467
+2353 331 3107
+2354 331 51492
+2355 331 3931
+2356 331 52243
+2357 331 31488
+2362 331 13698
+2368 331 43871
+2375 331 57279
+2383 331 34186
+2392 331 8215
+2402 331 59343
+2413 331 59043
+2491 331 58291
+2842 331 27852657
+278 332 1
+283 332 65520
+931 332 25680
+932 332 3950
+933 332 3950
+964 332 58188
+979 332 32986
+984 332 44269
+993 332 23397
+997 332 36384
+1026 332 23397
+1030 332 36384
+1041 332 51755
+1114 332 59781
+1130 332 8062
+1268 332 13611
+1450 332 20802
+1728 332 21530
+1733 332 20131
+2087 332 16977
+2088 332 58522
+2091 332 42726
+2092 332 2598
+2093 332 17341
+2108 332 38977
+2113 332 14078
+2128 332 17501
+2154 332 29054
+2155 332 2319
+2160 332 8468
+2166 332 4421
+2173 332 4421
+2187 332 16347
+2188 332 32236
+2190 332 43411
+2191 332 11980
+2196 332 52987
+2202 332 20668
+2209 332 12409
+2217 332 7988
+2232 332 50284
+2233 332 20142
+2234 332 55003
+2236 332 63211
+2241 332 65361
+2247 332 29236
+2254 332 44853
+2262 332 40180
+2271 332 32192
+2287 332 64429
+2288 332 44358
+2289 332 28973
+2290 332 29538
+2296 332 62429
+2302 332 24261
+2309 332 37776
+2317 332 11512
+2326 332 60814
+2336 332 28622
+2353 332 38283
+2354 332 24963
+2355 332 28286
+2356 332 58827
+2357 332 63826
+2368 332 25184
+2375 332 59983
+2383 332 40915
+2392 332 48146
+2402 332 7629
+2413 332 44528
+2431 332 26808
+2432 332 1418
+2433 332 59306
+2434 332 59945
+2435 332 36802
+2440 332 64996
+2446 332 22547
+2453 332 20007
+2461 332 63362
+2470 332 59656
+2480 332 9249
+2491 332 41862
+2503 332 8239
+2843 332 27852657
+279 333 1
+280 333 1
+281 333 1
+282 333 1
+283 333 1
+929 333 54601
+930 333 54601
+931 333 54601
+932 333 54601
+933 333 54601
+964 333 54601
+975 333 10920
+976 333 10920
+977 333 10920
+978 333 10920
+979 333 10920
+984 333 10920
+1447 333 60062
+1448 333 22316
+1449 333 65047
+1450 333 65047
+1725 333 60062
+1726 333 22316
+1727 333 65047
+1728 333 65047
+1730 333 27775
+1731 333 10920
+1732 333 54127
+1733 333 32761
+1873 333 1
+1928 333 1
+1929 333 32762
+1994 333 1
+1995 333 32762
+1996 333 32762
+2080 333 65520
+2081 333 65520
+2082 333 17745
+2083 333 65461
+2084 333 65462
+2085 333 43681
+2086 333 7359
+2087 333 1603
+2088 333 1662
+2089 333 37765
+2090 333 1443
+2091 333 7616
+2092 333 57173
+2093 333 2276
+2104 333 7735
+2105 333 36934
+2106 333 43107
+2107 333 62635
+2108 333 50961
+2113 333 48686
+2234 333 24572
+2289 333 24572
+2290 333 44595
+2355 333 61427
+2356 333 28212
+2357 333 51872
+2431 333 35946
+2432 333 4565
+2433 333 12236
+2434 333 61952
+2435 333 15925
+2440 333 910
+2491 333 6144
+2503 333 47152
+2844 333 27852657
+280 334 1
+281 334 19751
+282 334 47257
+283 334 47257
+385 334 65490
+387 334 39509
+406 334 13825
+414 334 13825
+432 334 13825
+478 334 33084
+479 334 33084
+480 334 33053
+481 334 2654
+501 334 56541
+512 334 13831
+524 334 13831
+548 334 27656
+591 334 13831
+654 334 33084
+655 334 33084
+656 334 33053
+657 334 2654
+658 334 2654
+678 334 56541
+689 334 13831
+701 334 13831
+726 334 27656
+772 334 27662
+837 334 13831
+920 334 60278
+921 334 60278
+922 334 38602
+923 334 61338
+924 334 1060
+925 334 29308
+926 334 6941
+927 334 9520
+928 334 8460
+929 334 29308
+930 334 50089
+931 334 62756
+932 334 34231
+933 334 25771
+960 334 29308
+961 334 50089
+962 334 61334
+963 334 19087
+964 334 39868
+979 334 14097
+995 334 18879
+996 334 9697
+997 334 44854
+1003 334 31832
+1028 334 18569
+1029 334 9387
+1030 334 44544
+1037 334 1158
+1052 334 3470
+1072 334 3470
+1110 334 43036
+1111 334 57652
+1113 334 35948
+1114 334 5584
+1125 334 18537
+1141 334 55269
+1162 334 20984
+1192 334 17514
+1245 334 33079
+1246 334 47695
+1247 334 51165
+1249 334 59869
+1263 334 26180
+1281 334 53847
+1306 334 14858
+1339 334 17758
+1384 334 244
+1451 334 47087
+1452 334 61703
+1453 334 65173
+1454 334 23656
+1469 334 26102
+1489 334 65488
+1516 334 41246
+1551 334 38651
+1596 334 36561
+1651 334 36317
+1729 334 21204
+1730 334 20105
+1731 334 25870
+1732 334 52159
+1733 334 20797
+1768 334 6494
+1795 334 17617
+1830 334 12074
+1875 334 58212
+1930 334 20854
+1996 334 50058
+2089 334 19172
+2090 334 6266
+2091 334 54192
+2092 334 35122
+2093 334 29304
+2108 334 7132
+2128 334 50515
+2155 334 40533
+2191 334 63784
+2236 334 42736
+2291 334 18310
+2357 334 20117
+2435 334 23010
+2845 334 27852657
+281 335 1
+931 335 8189
+932 335 49138
+933 335 49138
+964 335 44016
+979 335 49663
+984 335 54785
+997 335 33716
+1030 335 33716
+1041 335 31729
+1114 335 33716
+1130 335 46171
+1268 335 8948
+1733 335 17248
+2091 335 47835
+2092 335 10955
+2093 335 55590
+2108 335 55747
+2113 335 61575
+2128 335 56745
+2154 335 34360
+2155 335 63325
+2160 335 2955
+2166 335 27899
+2173 335 27899
+2187 335 34375
+2188 335 23029
+2190 335 4959
+2191 335 26590
+2196 335 57368
+2202 335 12976
+2209 335 23514
+2217 335 61136
+2232 335 43053
+2233 335 5699
+2234 335 61879
+2236 335 30622
+2241 335 48071
+2247 335 21260
+2254 335 44949
+2262 335 47176
+2271 335 51561
+2287 335 33879
+2288 335 24261
+2289 335 32415
+2290 335 49894
+2296 335 55583
+2302 335 61973
+2309 335 21508
+2317 335 4464
+2326 335 49865
+2336 335 63825
+2353 335 41148
+2354 335 61612
+2355 335 9653
+2356 335 9197
+2357 335 63291
+2368 335 63102
+2375 335 9967
+2383 335 4920
+2392 335 36304
+2402 335 2953
+2413 335 4649
+2431 335 60264
+2432 335 17026
+2433 335 25655
+2434 335 51153
+2435 335 33072
+2440 335 60
+2446 335 8
+2453 335 24631
+2461 335 17651
+2470 335 2306
+2480 335 3854
+2491 335 18615
+2503 335 5578
+2846 335 27852657
+282 336 1
+283 336 1
+931 336 21965
+932 336 24572
+933 336 24572
+964 336 48671
+979 336 52994
+984 336 28895
+997 336 31502
+1030 336 31502
+1041 336 57094
+1114 336 31502
+1130 336 49500
+1268 336 24373
+1733 336 41229
+2091 336 2398
+2092 336 6177
+2093 336 32374
+2108 336 60745
+2113 336 48097
+2128 336 17587
+2154 336 25412
+2155 336 34303
+2160 336 27893
+2166 336 24163
+2173 336 24163
+2187 336 58076
+2188 336 21289
+2190 336 18548
+2191 336 22298
+2196 336 7326
+2202 336 46384
+2209 336 48848
+2217 336 24685
+2232 336 27120
+2233 336 2701
+2234 336 32365
+2236 336 56419
+2241 336 64882
+2247 336 2984
+2254 336 55323
+2262 336 43625
+2271 336 18940
+2287 336 58718
+2288 336 19114
+2289 336 15272
+2290 336 36682
+2296 336 26839
+2302 336 15186
+2309 336 2836
+2317 336 8195
+2326 336 46082
+2336 336 27142
+2353 336 33908
+2354 336 38768
+2355 336 16905
+2356 336 28068
+2357 336 19726
+2368 336 62760
+2375 336 45267
+2383 336 52585
+2392 336 48652
+2402 336 42682
+2413 336 15540
+2431 336 26393
+2432 336 2011
+2433 336 8619
+2434 336 22783
+2435 336 46709
+2440 336 52353
+2446 336 40385
+2453 336 10257
+2461 336 36587
+2470 336 12580
+2480 336 62915
+2491 336 45133
+2503 336 33068
+2847 336 27852657
+284 337 1
+285 337 1
+287 337 1
+290 337 1
+294 337 1
+295 337 1
+297 337 1
+300 337 2
+304 337 1
+648 337 63715
+651 337 15989
+655 337 15989
+717 337 62404
+723 337 17281
+734 337 28460
+741 337 28460
+750 337 28460
+759 337 49315
+760 337 49315
+762 337 46198
+765 337 35115
+780 337 39215
+787 337 41932
+795 337 41932
+804 337 4871
+814 337 41932
+824 337 49315
+825 337 49315
+827 337 46198
+830 337 35115
+834 337 35115
+845 337 39215
+852 337 41932
+860 337 41932
+869 337 4871
+879 337 18343
+890 337 41932
+1703 337 19375
+1704 337 19375
+1705 337 56050
+1706 337 42175
+1708 337 22800
+1710 337 11290
+1711 337 62096
+1713 337 35323
+1716 337 12523
+1720 337 11290
+1721 337 11371
+1723 337 34292
+1726 337 49829
+1730 337 37306
+1735 337 11290
+1736 337 53857
+1738 337 28922
+1741 337 32449
+1745 337 52903
+1750 337 15597
+1758 337 63082
+1761 337 63706
+1765 337 50085
+1770 337 11880
+1785 337 44079
+1788 337 44703
+1792 337 31082
+1797 337 44777
+1803 337 16148
+1810 337 16148
+1817 337 30371
+1818 337 63148
+1823 337 15211
+1827 337 1590
+1832 337 15909
+1838 337 554
+1845 337 28316
+1853 337 12168
+1862 337 16248
+1863 337 49025
+1865 337 44321
+1872 337 20450
+1877 337 32330
+1883 337 18219
+1890 337 32814
+1898 337 14021
+1907 337 1853
+1917 337 62478
+1918 337 29734
+1920 337 25030
+1923 337 43181
+1932 337 53757
+1938 337 56946
+1945 337 51686
+1953 337 56415
+1962 337 59340
+1972 337 57487
+1983 337 26638
+1984 337 53017
+1986 337 17031
+1989 337 13691
+1993 337 37699
+2004 337 57373
+2011 337 25034
+2019 337 6301
+2028 337 56470
+2038 337 20347
+2049 337 28381
+2344 337 10511
+2345 337 44751
+2347 337 37470
+2350 337 40314
+2354 337 51159
+2359 337 33137
+2365 337 49843
+2372 337 1427
+2380 337 31116
+2389 337 11981
+2399 337 8546
+2410 337 24879
+2488 337 51883
+2848 337 27852657
+285 338 1
+286 338 1
+288 338 31036
+289 338 31035
+291 338 10345
+292 338 31035
+954 338 8192
+955 338 8192
+957 338 20692
+958 338 18537
+959 338 10345
+961 338 20692
+962 338 42245
+963 338 31037
+964 338 20692
+973 338 46146
+974 338 46146
+977 338 62393
+978 338 9803
+979 338 36074
+981 338 44829
+982 338 20148
+983 338 44287
+984 338 10072
+985 338 60211
+1746 338 55139
+1747 338 27248
+1748 338 27248
+1878 338 58164
+1880 338 20401
+1894 338 17492
+1902 338 17492
+1911 338 17492
+1931 338 52319
+1932 338 52319
+1933 338 44962
+1934 338 43194
+1942 338 19728
+1949 338 25855
+1957 338 25855
+1966 338 43347
+1976 338 25855
+1997 338 52319
+1998 338 52319
+1999 338 44962
+2000 338 43194
+2001 338 43194
+2008 338 19728
+2015 338 25855
+2023 338 25855
+2032 338 43347
+2042 338 51710
+2053 338 25855
+2095 338 56470
+2096 338 56470
+2097 338 2431
+2098 338 31838
+2099 338 40889
+2100 338 56994
+2101 338 12701
+2102 338 49491
+2103 338 8602
+2104 338 37347
+2105 338 26480
+2106 338 12429
+2107 338 31616
+2108 338 2323
+2109 338 37347
+2110 338 12068
+2111 338 51272
+2112 338 34720
+2113 338 31245
+2114 338 28922
+2131 338 7498
+2132 338 29596
+2133 338 55647
+2134 338 32626
+2158 338 55897
+2159 338 12474
+2160 338 38525
+2161 338 41555
+2167 338 9888
+2174 338 9888
+2192 338 11456
+2193 338 39240
+2195 338 3796
+2196 338 29847
+2197 338 54975
+2203 338 15839
+2210 338 47673
+2218 338 37785
+2237 338 56270
+2238 338 18533
+2239 338 38421
+2241 338 50095
+2242 338 17200
+2248 338 64959
+2255 338 26780
+2263 338 28435
+2272 338 56171
+2292 338 33989
+2293 338 61773
+2294 338 16140
+2295 338 26975
+2297 338 39523
+2303 338 52285
+2310 338 49973
+2318 338 3870
+2327 338 17363
+2337 338 26713
+2358 338 29847
+2359 338 11453
+2360 338 60821
+2361 338 17805
+2362 338 60823
+2369 338 31496
+2376 338 61228
+2384 338 12087
+2393 338 22828
+2403 338 19357
+2414 338 58165
+2436 338 8890
+2437 338 51409
+2438 338 40929
+2439 338 45686
+2440 338 49815
+2441 338 9906
+2447 338 50857
+2454 338 49905
+2462 338 35949
+2471 338 51953
+2481 338 11579
+2492 338 56478
+2504 338 50903
+2849 338 27852657
+286 339 1
+962 339 22854
+963 339 2228
+964 339 2228
+979 339 41784
+984 339 17814
+985 339 43779
+998 339 40284
+999 339 48634
+1003 339 51211
+1033 339 23397
+1037 339 10927
+1042 339 21655
+1125 339 34324
+1131 339 37670
+1254 339 36100
+1269 339 40168
+1460 339 36100
+1464 339 50223
+1739 339 10752
+1743 339 10778
+1748 339 23360
+2099 339 8695
+2102 339 12474
+2103 339 45324
+2106 339 859
+2107 339 26824
+2108 339 58982
+2113 339 27005
+2114 339 45692
+2133 339 30461
+2159 339 878
+2160 339 18948
+2161 339 62254
+2167 339 29740
+2174 339 29740
+2192 339 58542
+2193 339 13241
+2195 339 59075
+2196 339 28303
+2197 339 3232
+2203 339 19425
+2210 339 64737
+2218 339 34997
+2237 339 49830
+2238 339 39583
+2239 339 3967
+2241 339 53632
+2242 339 26217
+2248 339 47004
+2255 339 38899
+2263 339 10028
+2272 339 40552
+2292 339 59706
+2293 339 20057
+2294 339 12493
+2295 339 26413
+2297 339 14686
+2303 339 57787
+2310 339 56239
+2318 339 57185
+2327 339 48531
+2337 339 7979
+2358 339 2150
+2359 339 47244
+2360 339 14585
+2361 339 38867
+2362 339 56919
+2369 339 6618
+2376 339 27426
+2384 339 37935
+2393 339 16450
+2403 339 12311
+2414 339 4332
+2436 339 39456
+2437 339 48184
+2438 339 65303
+2439 339 57709
+2440 339 25755
+2441 339 12331
+2447 339 12609
+2454 339 58451
+2462 339 3803
+2471 339 61439
+2481 339 46395
+2492 339 5939
+2504 339 2263
+2850 339 27852657
+287 340 1
+288 340 55177
+289 340 55177
+290 340 1
+291 340 40233
+292 340 55177
+954 340 65518
+955 340 65518
+957 340 58622
+958 340 62070
+959 340 62073
+961 340 58622
+962 340 7757
+963 340 573
+964 340 4021
+973 340 14868
+974 340 14868
+977 340 14073
+978 340 47982
+979 340 19897
+981 340 6899
+982 340 6316
+983 340 47409
+984 340 27731
+985 340 11855
+1746 340 65415
+1747 340 33810
+1748 340 33810
+1878 340 48619
+1880 340 28544
+1894 340 39771
+1902 340 39771
+1911 340 39771
+1931 340 43947
+1932 340 43947
+1933 340 27045
+1934 340 45796
+1942 340 22650
+1949 340 45447
+1957 340 45447
+1966 340 19697
+1976 340 45447
+1997 340 43947
+1998 340 43947
+1999 340 27045
+2000 340 45796
+2001 340 45796
+2008 340 22650
+2015 340 45447
+2023 340 45447
+2032 340 19697
+2042 340 25373
+2053 340 45447
+2095 340 3887
+2096 340 3887
+2097 340 10881
+2098 340 38264
+2099 340 34377
+2100 340 37057
+2101 340 38563
+2102 340 55183
+2103 340 20806
+2104 340 25573
+2105 340 46544
+2106 340 15271
+2107 340 61992
+2108 340 43988
+2109 340 25573
+2110 340 29376
+2111 340 13887
+2112 340 42916
+2113 340 29181
+2114 340 50714
+2131 340 37822
+2132 340 422
+2133 340 39797
+2134 340 38933
+2158 340 6646
+2159 340 34767
+2160 340 8621
+2161 340 47132
+2167 340 6570
+2174 340 6570
+2192 340 23515
+2193 340 56569
+2195 340 1409
+2196 340 40784
+2197 340 41895
+2203 340 64237
+2210 340 63522
+2218 340 56952
+2237 340 39217
+2238 340 6750
+2239 340 55968
+2241 340 25930
+2242 340 64863
+2248 340 29445
+2255 340 34174
+2263 340 25692
+2272 340 34261
+2292 340 55543
+2293 340 23076
+2294 340 6773
+2295 340 16506
+2297 340 56596
+2303 340 34303
+2310 340 33721
+2318 340 3128
+2327 340 57139
+2337 340 22878
+2358 340 41989
+2359 340 2361
+2360 340 29340
+2361 340 58797
+2362 340 3803
+2369 340 49871
+2376 340 23348
+2384 340 21350
+2393 340 30912
+2403 340 6063
+2414 340 48706
+2436 340 11201
+2437 340 15549
+2438 340 14712
+2439 340 52034
+2440 340 30184
+2441 340 16732
+2447 340 22381
+2454 340 14433
+2462 340 60344
+2471 340 1799
+2481 340 23716
+2492 340 34674
+2504 340 54144
+2851 340 27852657
+288 341 1
+289 341 1
+291 341 61427
+292 341 43682
+293 341 43681
+301 341 61427
+302 341 43682
+303 341 21841
+307 341 43681
+1731 341 47967
+1732 341 12299
+1733 341 12299
+1748 341 39234
+1753 341 7091
+1754 341 45677
+1768 341 11626
+1795 341 11626
+1801 341 3685
+1830 341 11626
+1836 341 64460
+1881 341 20793
+1996 341 51049
+2351 341 9
+2352 341 9
+2355 341 65020
+2356 341 28948
+2357 341 30048
+2362 341 58569
+2363 341 59682
+2368 341 10447
+2374 341 49205
+2375 341 63045
+2376 341 4602
+2377 341 20831
+2378 341 20831
+2379 341 54499
+2380 341 3283
+2382 341 20034
+2383 341 34647
+2384 341 38323
+2385 341 44724
+2386 341 3827
+2387 341 48517
+2388 341 26144
+2389 341 38256
+2390 341 15077
+2392 341 2443
+2393 341 4873
+2394 341 59363
+2395 341 36412
+2396 341 7488
+2397 341 24492
+2398 341 15053
+2399 341 28496
+2400 341 52343
+2401 341 48911
+2403 341 1754
+2404 341 17734
+2405 341 22543
+2406 341 20901
+2407 341 3031
+2408 341 44060
+2409 341 52257
+2410 341 18995
+2411 341 34830
+2412 341 11749
+2413 341 17185
+2415 341 32286
+2416 341 62532
+2417 341 61567
+2418 341 29662
+2419 341 63615
+2420 341 19555
+2487 341 49515
+2488 341 30285
+2489 341 55149
+2490 341 60230
+2491 341 61882
+2492 341 31672
+2493 341 33718
+2494 341 26461
+2495 341 3400
+2496 341 64009
+2497 341 7466
+2498 341 43201
+2510 341 11026
+2852 341 27852657
+289 342 1
+293 342 65520
+962 342 25680
+963 342 3950
+964 342 3950
+979 342 58188
+984 342 32986
+985 342 44269
+999 342 23397
+1003 342 36384
+1033 342 23397
+1037 342 36384
+1042 342 51755
+1125 342 59781
+1131 342 8062
+1269 342 13611
+1464 342 20802
+1743 342 21530
+1748 342 20131
+2102 342 16977
+2103 342 58522
+2106 342 42726
+2107 342 2598
+2108 342 17341
+2113 342 38977
+2114 342 14078
+2133 342 17501
+2159 342 29054
+2160 342 2319
+2161 342 8468
+2167 342 4421
+2174 342 4421
+2192 342 16347
+2193 342 32236
+2195 342 43411
+2196 342 11980
+2197 342 52987
+2203 342 20668
+2210 342 12409
+2218 342 7988
+2237 342 50284
+2238 342 20142
+2239 342 55003
+2241 342 63211
+2242 342 65361
+2248 342 29236
+2255 342 44853
+2263 342 40180
+2272 342 32192
+2292 342 64429
+2293 342 44358
+2294 342 28973
+2295 342 29538
+2297 342 62429
+2303 342 24261
+2310 342 37776
+2318 342 11512
+2327 342 60814
+2337 342 28622
+2358 342 38283
+2359 342 24963
+2360 342 28286
+2361 342 58827
+2362 342 63826
+2369 342 25184
+2376 342 59983
+2384 342 40915
+2393 342 48146
+2403 342 7629
+2414 342 44528
+2436 342 26808
+2437 342 1418
+2438 342 59306
+2439 342 59945
+2440 342 36802
+2441 342 64996
+2447 342 22547
+2454 342 20007
+2462 342 63362
+2471 342 59656
+2481 342 9249
+2492 342 41862
+2504 342 8239
+2853 342 27852657
+290 343 1
+291 343 1
+292 343 1
+293 343 1
+300 343 1
+301 343 1
+302 343 1
+303 343 2
+307 343 1
+656 343 63715
+657 343 15989
+658 343 15989
+724 343 62404
+726 343 17281
+737 343 28460
+744 343 28460
+753 343 28460
+768 343 49315
+769 343 49315
+770 343 46198
+771 343 35115
+783 343 39215
+790 343 41932
+798 343 41932
+807 343 4871
+817 343 41932
+833 343 49315
+834 343 49315
+835 343 46198
+836 343 35115
+837 343 35115
+848 343 39215
+855 343 41932
+863 343 41932
+872 343 4871
+882 343 18343
+893 343 41932
+1720 343 19375
+1721 343 19375
+1722 343 56050
+1723 343 42175
+1724 343 22800
+1725 343 11290
+1726 343 62096
+1727 343 35323
+1728 343 12523
+1729 343 11290
+1730 343 11371
+1731 343 34292
+1732 343 49829
+1733 343 37306
+1744 343 11290
+1745 343 53857
+1746 343 28922
+1747 343 32449
+1748 343 52903
+1753 343 15597
+1766 343 63082
+1767 343 63706
+1768 343 50085
+1773 343 11880
+1793 343 44079
+1794 343 44703
+1795 343 31082
+1800 343 44777
+1806 343 16148
+1813 343 16148
+1826 343 30371
+1827 343 63148
+1829 343 15211
+1830 343 1590
+1835 343 15909
+1841 343 554
+1848 343 28316
+1856 343 12168
+1871 343 16248
+1872 343 49025
+1873 343 44321
+1875 343 20450
+1880 343 32330
+1886 343 18219
+1893 343 32814
+1901 343 14021
+1910 343 1853
+1926 343 62478
+1927 343 29734
+1928 343 25030
+1929 343 43181
+1935 343 53757
+1941 343 56946
+1948 343 51686
+1956 343 56415
+1965 343 59340
+1975 343 57487
+1992 343 26638
+1993 343 53017
+1994 343 17031
+1995 343 13691
+1996 343 37699
+2007 343 57373
+2014 343 25034
+2022 343 6301
+2031 343 56470
+2041 343 20347
+2052 343 28381
+2353 343 10511
+2354 343 44751
+2355 343 37470
+2356 343 40314
+2357 343 51159
+2362 343 33137
+2368 343 49843
+2375 343 1427
+2383 343 31116
+2392 343 11981
+2402 343 8546
+2413 343 24879
+2491 343 51883
+2854 343 27852657
+291 344 1
+962 344 8189
+963 344 49138
+964 344 49138
+979 344 44016
+984 344 49663
+985 344 54785
+1003 344 33716
+1037 344 33716
+1042 344 31729
+1125 344 33716
+1131 344 46171
+1269 344 8948
+1748 344 17248
+2106 344 47835
+2107 344 10955
+2108 344 55590
+2113 344 55747
+2114 344 61575
+2133 344 56745
+2159 344 34360
+2160 344 63325
+2161 344 2955
+2167 344 27899
+2174 344 27899
+2192 344 34375
+2193 344 23029
+2195 344 4959
+2196 344 26590
+2197 344 57368
+2203 344 12976
+2210 344 23514
+2218 344 61136
+2237 344 43053
+2238 344 5699
+2239 344 61879
+2241 344 30622
+2242 344 48071
+2248 344 21260
+2255 344 44949
+2263 344 47176
+2272 344 51561
+2292 344 33879
+2293 344 24261
+2294 344 32415
+2295 344 49894
+2297 344 55583
+2303 344 61973
+2310 344 21508
+2318 344 4464
+2327 344 49865
+2337 344 63825
+2358 344 41148
+2359 344 61612
+2360 344 9653
+2361 344 9197
+2362 344 63291
+2369 344 63102
+2376 344 9967
+2384 344 4920
+2393 344 36304
+2403 344 2953
+2414 344 4649
+2436 344 60264
+2437 344 17026
+2438 344 25655
+2439 344 51153
+2440 344 33072
+2441 344 60
+2447 344 8
+2454 344 24631
+2462 344 17651
+2471 344 2306
+2481 344 3854
+2492 344 18615
+2504 344 5578
+2855 344 27852657
+292 345 1
+293 345 1
+962 345 21965
+963 345 24572
+964 345 24572
+979 345 48671
+984 345 52994
+985 345 28895
+1003 345 31502
+1037 345 31502
+1042 345 57094
+1125 345 31502
+1131 345 49500
+1269 345 24373
+1748 345 41229
+2106 345 2398
+2107 345 6177
+2108 345 32374
+2113 345 60745
+2114 345 48097
+2133 345 17587
+2159 345 25412
+2160 345 34303
+2161 345 27893
+2167 345 24163
+2174 345 24163
+2192 345 58076
+2193 345 21289
+2195 345 18548
+2196 345 22298
+2197 345 7326
+2203 345 46384
+2210 345 48848
+2218 345 24685
+2237 345 27120
+2238 345 2701
+2239 345 32365
+2241 345 56419
+2242 345 64882
+2248 345 2984
+2255 345 55323
+2263 345 43625
+2272 345 18940
+2292 345 58718
+2293 345 19114
+2294 345 15272
+2295 345 36682
+2297 345 26839
+2303 345 15186
+2310 345 2836
+2318 345 8195
+2327 345 46082
+2337 345 27142
+2358 345 33908
+2359 345 38768
+2360 345 16905
+2361 345 28068
+2362 345 19726
+2369 345 62760
+2376 345 45267
+2384 345 52585
+2393 345 48652
+2403 345 42682
+2414 345 15540
+2436 345 26393
+2437 345 2011
+2438 345 8619
+2439 345 22783
+2440 345 46709
+2441 345 52353
+2447 345 40385
+2454 345 10257
+2462 345 36587
+2471 345 12580
+2481 345 62915
+2492 345 45133
+2504 345 33068
+2856 345 27852657
+293 346 1
+303 346 145
+307 346 144
+325 346 6890
+350 346 52007
+354 346 41032
+393 346 2422
+658 346 42056
+1731 346 10780
+1732 346 58612
+1733 346 58554
+1748 346 7003
+1753 346 25125
+1768 346 1148
+1794 346 47747
+1795 346 940
+1800 346 38532
+1806 346 42289
+1813 346 42289
+1826 346 25603
+1827 346 30908
+1829 346 33086
+1830 346 25360
+1835 346 48317
+1841 346 25873
+1848 346 37944
+1856 346 61176
+1871 346 46011
+1872 346 42075
+1873 346 44219
+1875 346 24593
+1880 346 34719
+1886 346 44949
+1893 346 2341
+1901 346 8321
+1910 346 12666
+1926 346 48286
+1927 346 49630
+1928 346 33712
+1929 346 9075
+1935 346 22702
+1941 346 41233
+1948 346 22021
+1956 346 59528
+1965 346 32058
+1975 346 19392
+1992 346 42561
+1993 346 50860
+1994 346 40866
+1995 346 32965
+1996 346 35588
+2007 346 57577
+2014 346 46180
+2022 346 42235
+2031 346 45043
+2041 346 17944
+2052 346 64073
+2353 346 27919
+2354 346 43689
+2355 346 53712
+2356 346 6220
+2357 346 21955
+2362 346 60662
+2368 346 61135
+2375 346 24300
+2383 346 7396
+2392 346 51763
+2402 346 29223
+2413 346 18450
+2491 346 22834
+2857 346 27852657
+294 347 1
+300 347 43681
+304 347 43681
+328 347 26301
+352 347 31288
+391 347 110
+1745 347 1179
+1750 347 18937
+1765 347 63096
+1792 347 37012
+1797 347 20171
+1803 347 6047
+1810 347 6047
+1817 347 29079
+1818 347 39113
+1823 347 16436
+1827 347 45823
+1832 347 22128
+1838 347 30601
+1845 347 24190
+1853 347 18143
+1862 347 661
+1863 347 45825
+1865 347 51569
+1872 347 47912
+1877 347 62187
+1883 347 33990
+1890 347 23429
+1898 347 46534
+1907 347 28391
+1917 347 3693
+1918 347 48533
+1920 347 976
+1923 347 976
+1932 347 10259
+1938 347 5443
+1945 347 34723
+1953 347 47773
+1962 347 45992
+1972 347 17601
+1983 347 28269
+1984 347 8879
+1986 347 12637
+1989 347 12637
+1993 347 12512
+2004 347 41504
+2011 347 33254
+2019 347 11511
+2028 347 9913
+2038 347 21413
+2049 347 3812
+2344 347 48641
+2345 347 30192
+2347 347 42606
+2350 347 42606
+2354 347 13970
+2359 347 22086
+2365 347 42800
+2372 347 28195
+2380 347 35762
+2389 347 31477
+2399 347 48664
+2410 347 41506
+2488 347 5756
+2858 347 27852657
+295 348 1
+296 348 1
+298 348 60493
+299 348 60492
+301 348 15133
+302 348 15135
+303 348 20164
+305 348 15133
+306 348 15135
+307 348 40328
+308 348 20164
+665 348 60500
+666 348 64247
+667 348 64247
+727 348 23068
+728 348 47760
+738 348 13548
+745 348 13548
+754 348 13548
+773 348 25824
+774 348 25824
+775 348 48892
+776 348 15524
+784 348 29304
+791 348 862
+799 348 862
+808 348 14410
+818 348 862
+838 348 25824
+839 348 25824
+840 348 48892
+841 348 15524
+842 348 15524
+849 348 29304
+856 348 862
+864 348 862
+873 348 14410
+883 348 1724
+894 348 862
+1735 348 55883
+1736 348 55883
+1737 348 31383
+1738 348 28636
+1739 348 38274
+1740 348 9162
+1741 348 15133
+1742 348 11453
+1743 348 38700
+1744 348 9162
+1745 348 15133
+1746 348 56194
+1747 348 56709
+1748 348 18009
+1749 348 9162
+1750 348 5075
+1751 348 3447
+1752 348 51524
+1753 348 5561
+1754 348 53073
+1771 348 51311
+1772 348 27223
+1773 348 59941
+1774 348 30289
+1798 348 29704
+1799 348 5616
+1800 348 38334
+1801 348 41400
+1807 348 45296
+1814 348 45296
+1831 348 38060
+1832 348 55343
+1834 348 41986
+1835 348 9183
+1836 348 53682
+1842 348 32375
+1849 348 34227
+1857 348 54452
+1876 348 58236
+1877 348 9998
+1878 348 18831
+1880 348 25390
+1881 348 55679
+1887 348 24991
+1894 348 13475
+1902 348 19042
+1911 348 30111
+1931 348 12466
+1932 348 29749
+1933 348 38582
+1934 348 5333
+1936 348 24034
+1942 348 4252
+1949 348 44339
+1957 348 27270
+1966 348 12639
+1976 348 48049
+1997 348 14236
+1998 348 1581
+1999 348 39114
+2000 348 43371
+2001 348 14193
+2008 348 7089
+2015 348 55079
+2023 348 2889
+2032 348 34387
+2042 348 25166
+2053 348 42638
+2358 348 57926
+2359 348 36053
+2360 348 55133
+2361 348 22734
+2362 348 832
+2363 348 36904
+2369 348 15522
+2376 348 1195
+2384 348 3421
+2393 348 17150
+2403 348 31308
+2414 348 12351
+2492 348 24490
+2859 348 27852657
+296 349 1
+307 349 56901
+308 349 56901
+314 349 36996
+315 349 30940
+316 349 34581
+326 349 2415
+327 349 63106
+331 349 59634
+355 349 6472
+389 349 19220
+394 349 43857
+484 349 19220
+488 349 23139
+659 349 44371
+663 349 38612
+667 349 26909
+1739 349 3590
+1742 349 41788
+1743 349 5143
+1746 349 11668
+1747 349 43137
+1748 349 37994
+1753 349 20743
+1754 349 12929
+1773 349 3411
+1799 349 26942
+1800 349 15818
+1801 349 32168
+1807 349 59145
+1814 349 59145
+1831 349 51431
+1832 349 62109
+1834 349 58663
+1835 349 10505
+1836 349 49647
+1842 349 23046
+1849 349 31345
+1857 349 37721
+1876 349 61325
+1877 349 5642
+1878 349 3586
+1880 349 28110
+1881 349 53823
+1887 349 43044
+1894 349 36334
+1902 349 29069
+1911 349 56869
+1931 349 52641
+1932 349 12526
+1933 349 8029
+1934 349 34996
+1936 349 49458
+1942 349 6424
+1949 349 30773
+1957 349 12683
+1966 349 31844
+1976 349 40496
+1997 349 56126
+1998 349 31554
+1999 349 35220
+2000 349 21586
+2001 349 12182
+2008 349 39101
+2015 349 59952
+2023 349 18419
+2032 349 29689
+2042 349 3269
+2053 349 28294
+2358 349 4338
+2359 349 64734
+2360 349 19280
+2361 349 52545
+2362 349 19126
+2363 349 44456
+2369 349 53591
+2376 349 14289
+2384 349 49993
+2393 349 25865
+2403 349 39988
+2414 349 31587
+2492 349 17129
+2860 349 27852657
+297 350 1
+298 350 1
+299 350 1
+300 350 1
+301 350 1
+302 350 2
+303 350 1
+304 350 1
+305 350 1
+306 350 2
+307 350 2
+308 350 1
+485 350 49144
+486 350 49143
+487 350 32760
+488 350 32760
+660 350 49144
+661 350 49143
+662 350 32760
+663 350 32760
+664 350 65520
+665 350 65515
+666 350 32760
+727 350 4
+775 350 4
+776 350 6
+840 350 4
+841 350 6
+842 350 6
+1735 350 65518
+1736 350 65518
+1737 350 53235
+1738 350 53235
+1739 350 53238
+1740 350 1
+1741 350 28667
+1742 350 28669
+1743 350 40952
+1744 350 35491
+1745 350 64157
+1746 350 23208
+1747 350 10925
+1748 350 35494
+1749 350 35491
+1750 350 23208
+1751 350 47780
+1752 350 6831
+1753 350 1370
+1754 350 31397
+1878 350 32767
+1933 350 32767
+1934 350 27318
+1999 350 49145
+2000 350 27307
+2001 350 32766
+2358 350 42317
+2359 350 3413
+2360 350 11601
+2361 350 43683
+2362 350 27300
+2363 350 682
+2414 350 24576
+2492 350 10928
+2861 350 27852657
+298 351 1
+299 351 1
+301 351 61427
+302 351 43682
+303 351 43681
+305 351 61427
+306 351 43682
+307 351 21841
+308 351 43681
+1753 351 25080
+1754 351 25080
+1801 351 48240
+1836 351 2747
+1881 351 1458
+2351 351 16378
+2352 351 16378
+2355 351 58700
+2356 351 62801
+2357 351 46423
+2362 351 9731
+2363 351 22229
+2368 351 44679
+2374 351 48461
+2375 351 30126
+2376 351 31562
+2377 351 53358
+2378 351 53358
+2379 351 63399
+2380 351 28531
+2382 351 5970
+2383 351 10721
+2384 351 30618
+2385 351 25126
+2386 351 13093
+2387 351 25256
+2388 351 32824
+2389 351 36055
+2390 351 44777
+2392 351 61670
+2393 351 28748
+2394 351 23191
+2395 351 17155
+2396 351 1439
+2397 351 41704
+2398 351 31486
+2399 351 14402
+2400 351 4819
+2401 351 59945
+2403 351 39690
+2404 351 6256
+2405 351 38637
+2406 351 15973
+2407 351 46751
+2408 351 5047
+2409 351 27699
+2410 351 63585
+2411 351 43020
+2412 351 22803
+2413 351 14532
+2415 351 4949
+2416 351 64051
+2417 351 19623
+2418 351 56007
+2419 351 13368
+2420 351 8321
+2487 351 62816
+2488 351 16411
+2489 351 19078
+2490 351 24133
+2491 351 10046
+2492 351 9197
+2493 351 18822
+2494 351 4910
+2495 351 47082
+2496 351 21890
+2497 351 20714
+2498 351 20311
+2510 351 64385
+2862 351 27852657
+299 352 1
+303 352 65520
+307 352 44995
+308 352 44996
+315 352 2415
+316 352 63106
+326 352 2415
+327 352 63106
+331 352 58093
+355 352 58379
+394 352 256
+488 352 42359
+663 352 17462
+667 352 48059
+1742 352 41811
+1743 352 8756
+1746 352 65436
+1747 352 18864
+1748 352 10108
+1753 352 50866
+1754 352 55669
+1773 352 51110
+1799 352 25845
+1800 352 1872
+1801 352 58322
+1807 352 44313
+1814 352 44313
+1831 352 47757
+1832 352 23014
+1834 352 54087
+1835 352 46852
+1836 352 64236
+1842 352 5598
+1849 352 47134
+1857 352 2821
+1876 352 17912
+1877 352 39197
+1878 352 1821
+1880 352 25592
+1881 352 65209
+1887 352 58705
+1894 352 43468
+1902 352 39823
+1911 352 37002
+1931 352 6717
+1932 352 44195
+1933 352 34215
+1934 352 60005
+1936 352 61787
+1942 352 5678
+1949 352 33547
+1957 352 15746
+1966 352 28442
+1976 352 56961
+1997 352 47533
+1998 352 44853
+1999 352 52569
+2000 352 43560
+2001 352 11424
+2008 352 35477
+2015 352 31481
+2023 352 1389
+2032 352 64437
+2042 352 20221
+2053 352 28781
+2358 352 55685
+2359 352 35426
+2360 352 22371
+2361 352 64867
+2362 352 46086
+2363 352 52252
+2369 352 39529
+2376 352 24736
+2384 352 63887
+2393 352 39641
+2403 352 3993
+2414 352 63984
+2492 352 14285
+2863 352 27852657
+300 353 1
+301 353 1
+302 353 1
+303 353 1
+304 353 1
+305 353 1
+306 353 1
+307 353 2
+308 353 1
+665 353 63715
+666 353 15989
+667 353 15989
+727 353 62404
+728 353 17281
+738 353 28460
+745 353 28460
+754 353 28460
+773 353 49315
+774 353 49315
+775 353 46198
+776 353 35115
+784 353 39215
+791 353 41932
+799 353 41932
+808 353 4871
+818 353 41932
+838 353 49315
+839 353 49315
+840 353 46198
+841 353 35115
+842 353 35115
+849 353 39215
+856 353 41932
+864 353 41932
+873 353 4871
+883 353 18343
+894 353 41932
+1735 353 19375
+1736 353 19375
+1737 353 56050
+1738 353 42175
+1739 353 22800
+1740 353 11290
+1741 353 62096
+1742 353 35323
+1743 353 12523
+1744 353 11290
+1745 353 11371
+1746 353 34292
+1747 353 49829
+1748 353 37306
+1749 353 11290
+1750 353 53857
+1751 353 28922
+1752 353 32449
+1753 353 52903
+1754 353 15597
+1771 353 63082
+1772 353 63706
+1773 353 50085
+1774 353 11880
+1798 353 44079
+1799 353 44703
+1800 353 31082
+1801 353 44777
+1807 353 16148
+1814 353 16148
+1831 353 30371
+1832 353 63148
+1834 353 15211
+1835 353 1590
+1836 353 15909
+1842 353 554
+1849 353 28316
+1857 353 12168
+1876 353 16248
+1877 353 49025
+1878 353 44321
+1880 353 20450
+1881 353 32330
+1887 353 18219
+1894 353 32814
+1902 353 14021
+1911 353 1853
+1931 353 62478
+1932 353 29734
+1933 353 25030
+1934 353 43181
+1936 353 53757
+1942 353 56946
+1949 353 51686
+1957 353 56415
+1966 353 59340
+1976 353 57487
+1997 353 26638
+1998 353 53017
+1999 353 17031
+2000 353 13691
+2001 353 37699
+2008 353 57373
+2015 353 25034
+2023 353 6301
+2032 353 56470
+2042 353 20347
+2053 353 28381
+2358 353 10511
+2359 353 44751
+2360 353 37470
+2361 353 40314
+2362 353 51159
+2363 353 33137
+2369 353 49843
+2376 353 1427
+2384 353 31116
+2393 353 11981
+2403 353 8546
+2414 353 24879
+2492 353 51883
+2864 353 27852657
+301 354 1
+307 354 55216
+308 354 55216
+331 354 20878
+355 354 41568
+394 354 29369
+1746 354 32754
+1747 354 65510
+1748 354 65510
+1753 354 33640
+1754 354 14837
+1773 354 31447
+1799 354 8249
+1800 354 24574
+1801 354 43006
+1807 354 29949
+1814 354 29949
+1831 354 22880
+1832 354 5194
+1834 354 64147
+1835 354 10555
+1836 354 51680
+1842 354 21127
+1849 354 63999
+1857 354 34050
+1876 354 34142
+1877 354 6741
+1878 354 21115
+1880 354 19194
+1881 354 61503
+1887 354 3087
+1894 354 10121
+1902 354 23350
+1911 354 54821
+1931 354 28070
+1932 354 27838
+1933 354 35966
+1934 354 14141
+1936 354 26434
+1942 354 52612
+1949 354 24534
+1957 354 56075
+1966 354 55044
+1976 354 223
+1997 354 56228
+1998 354 26325
+1999 354 11815
+2000 354 14733
+2001 354 29202
+2008 354 62741
+2015 354 15424
+2023 354 1924
+2032 354 3320
+2042 354 9045
+2053 354 8822
+2358 354 59741
+2359 354 4758
+2360 354 7870
+2361 354 16626
+2362 354 51870
+2363 354 1879
+2369 354 25368
+2376 354 37875
+2384 354 15208
+2393 354 59799
+2403 354 35328
+2414 354 42414
+2492 354 58440
+2865 354 27852657
+302 355 1
+303 355 1
+307 355 10354
+308 355 10353
+331 355 34941
+355 355 14543
+394 355 47021
+1746 355 22339
+1747 355 32765
+1748 355 32765
+1753 355 29714
+1754 355 18788
+1773 355 56692
+1799 355 43182
+1800 355 53642
+1801 355 5532
+1807 355 55332
+1814 355 55332
+1831 355 61025
+1832 355 1802
+1834 355 17846
+1835 355 28650
+1836 355 13020
+1842 355 58493
+1849 355 48678
+1857 355 58867
+1876 355 12347
+1877 355 3018
+1878 355 38240
+1880 355 40835
+1881 355 62837
+1887 355 13605
+1894 355 23090
+1902 355 59381
+1911 355 514
+1931 355 24612
+1932 355 16611
+1933 355 38339
+1934 355 5252
+1936 355 40011
+1942 355 17836
+1949 355 27608
+1957 355 12673
+1966 355 828
+1976 355 314
+1997 355 36203
+1998 355 34915
+1999 355 35879
+2000 355 21957
+2001 355 14456
+2008 355 50346
+2015 355 5347
+2023 355 62160
+2032 355 15394
+2042 355 15855
+2053 355 15541
+2358 355 25277
+2359 355 15345
+2360 355 48168
+2361 355 28755
+2362 355 45377
+2363 355 51275
+2369 355 8006
+2376 355 563
+2384 355 41600
+2393 355 20496
+2403 355 38363
+2414 355 62374
+2492 355 60943
+2866 355 27852657
+303 356 1
+307 356 145
+308 356 144
+327 356 6890
+351 356 52007
+355 356 41032
+394 356 2422
+667 356 42056
+1746 356 10780
+1747 356 58612
+1748 356 58554
+1753 356 7003
+1754 356 25125
+1773 356 1148
+1799 356 47747
+1800 356 940
+1801 356 38532
+1807 356 42289
+1814 356 42289
+1831 356 25603
+1832 356 30908
+1834 356 33086
+1835 356 25360
+1836 356 48317
+1842 356 25873
+1849 356 37944
+1857 356 61176
+1876 356 46011
+1877 356 42075
+1878 356 44219
+1880 356 24593
+1881 356 34719
+1887 356 44949
+1894 356 2341
+1902 356 8321
+1911 356 12666
+1931 356 48286
+1932 356 49630
+1933 356 33712
+1934 356 9075
+1936 356 22702
+1942 356 41233
+1949 356 22021
+1957 356 59528
+1966 356 32058
+1976 356 19392
+1997 356 42561
+1998 356 50860
+1999 356 40866
+2000 356 32965
+2001 356 35588
+2008 356 57577
+2015 356 46180
+2023 356 42235
+2032 356 45043
+2042 356 17944
+2053 356 64073
+2358 356 27919
+2359 356 43689
+2360 356 53712
+2361 356 6220
+2362 356 21955
+2363 356 60662
+2369 356 61135
+2376 356 24300
+2384 356 7396
+2393 356 51763
+2403 356 29223
+2414 356 18450
+2492 356 22834
+2867 356 27852657
+304 357 1
+307 357 43681
+308 357 43681
+331 357 26301
+355 357 31288
+394 357 110
+1753 357 1179
+1754 357 18937
+1773 357 63096
+1800 357 37012
+1801 357 20171
+1807 357 6047
+1814 357 6047
+1831 357 29079
+1832 357 39113
+1834 357 16436
+1835 357 45823
+1836 357 22128
+1842 357 30601
+1849 357 24190
+1857 357 18143
+1876 357 661
+1877 357 45825
+1878 357 51569
+1880 357 47912
+1881 357 62187
+1887 357 33990
+1894 357 23429
+1902 357 46534
+1911 357 28391
+1931 357 3693
+1932 357 48533
+1933 357 976
+1934 357 976
+1936 357 10259
+1942 357 5443
+1949 357 34723
+1957 357 47773
+1966 357 45992
+1976 357 17601
+1997 357 28269
+1998 357 8879
+1999 357 12637
+2000 357 12637
+2001 357 12512
+2008 357 41504
+2015 357 33254
+2023 357 11511
+2032 357 9913
+2042 357 21413
+2053 357 3812
+2358 357 48641
+2359 357 30192
+2360 357 42606
+2361 357 42606
+2362 357 13970
+2363 357 22086
+2369 357 42800
+2376 357 28195
+2384 357 35762
+2393 357 31477
+2403 357 48664
+2414 357 41506
+2492 357 5756
+2868 357 27852657
+305 358 1
+307 358 28737
+308 358 28737
+331 358 54030
+355 358 55705
+394 358 48843
+1753 358 27971
+1754 358 31853
+1773 358 38204
+1799 358 36146
+1800 358 47020
+1801 358 51155
+1807 358 58568
+1814 358 58568
+1831 358 61412
+1832 358 46148
+1834 358 48003
+1835 358 39029
+1836 358 30753
+1842 358 36176
+1849 358 9970
+1857 358 16923
+1876 358 6740
+1877 358 8876
+1878 358 3132
+1880 358 18761
+1881 358 59927
+1887 358 55308
+1894 358 13678
+1902 358 50901
+1911 358 33978
+1931 358 50513
+1932 358 57774
+1933 358 39810
+1934 358 55195
+1936 358 46407
+1942 358 44046
+1949 358 48295
+1957 358 7467
+1966 358 23378
+1976 358 54921
+1997 358 6161
+1998 358 28425
+1999 358 24667
+2000 358 64361
+2001 358 19370
+2008 358 15424
+2015 358 48190
+2023 358 18542
+2032 358 12265
+2042 358 16913
+2053 358 27513
+2358 358 54169
+2359 358 48008
+2360 358 35594
+2361 358 26679
+2362 358 4387
+2363 358 62496
+2369 358 10445
+2376 358 19466
+2384 358 46348
+2393 358 30291
+2403 358 7501
+2414 358 59118
+2492 358 12963
+2869 358 27852657
+306 359 1
+307 359 58625
+308 359 58625
+331 359 28245
+355 359 24171
+394 359 49545
+1753 359 54563
+1754 359 13544
+1773 359 54384
+1799 359 29375
+1800 359 31792
+1801 359 11786
+1807 359 7696
+1814 359 7696
+1831 359 5764
+1832 359 40730
+1834 359 37618
+1835 359 8305
+1836 359 49063
+1842 359 60537
+1849 359 3678
+1857 359 61503
+1876 359 54817
+1877 359 50130
+1878 359 50130
+1880 359 22407
+1881 359 22514
+1887 359 29304
+1894 359 65233
+1902 359 21920
+1911 359 25938
+1931 359 36435
+1932 359 28447
+1933 359 28447
+1934 359 13062
+1936 359 59264
+1942 359 57187
+1949 359 26164
+1957 359 13226
+1966 359 31628
+1976 359 5690
+1997 359 43525
+1998 359 40806
+1999 359 40806
+2000 359 1112
+2001 359 52069
+2008 359 23603
+2015 359 6911
+2023 359 46448
+2032 359 10159
+2042 359 21236
+2053 359 15546
+2358 359 23623
+2359 359 11406
+2360 359 11406
+2361 359 20321
+2362 359 31812
+2363 359 29848
+2369 359 19325
+2376 359 60648
+2384 359 24053
+2393 359 28207
+2403 359 203
+2414 359 37931
+2492 359 51196
+2870 359 27852657
+307 360 1
+2113 360 65520
+2871 360 27852657
+308 361 1
+2114 361 65520
+2872 361 27852657
+309 362 1
+322 362 1
+323 362 13876
+345 362 46928
+374 362 31625
+382 362 33728
+403 362 31099
+411 362 31099
+428 362 31099
+464 362 56887
+465 362 56887
+466 362 22991
+467 362 47845
+497 362 60942
+508 362 800
+520 362 800
+543 362 31899
+586 362 800
+640 362 56887
+641 362 56887
+642 362 22991
+643 362 47845
+653 362 8918
+674 362 60942
+685 362 800
+697 362 800
+722 362 31899
+767 362 1600
+832 362 800
+988 362 31632
+993 362 46325
+999 362 18520
+1020 362 55577
+1021 362 21688
+1026 362 36381
+1033 362 32708
+1048 362 59669
+1068 362 59669
+1098 362 23371
+1099 362 23371
+1101 362 4783
+1109 362 36755
+1120 362 34372
+1136 362 48460
+1157 362 8388
+1188 362 14240
+1232 362 50945
+1233 362 50945
+1234 362 61385
+1244 362 27107
+1258 362 30392
+1276 362 20088
+1301 362 52715
+1334 362 47823
+1379 362 33583
+1437 362 25145
+1438 362 25145
+1439 362 35585
+1440 362 19772
+1464 362 54810
+1484 362 58135
+1511 362 18089
+1546 362 58599
+1591 362 27952
+1646 362 59890
+1715 362 11499
+1716 362 11499
+1717 362 8245
+1718 362 34228
+1728 362 32429
+1763 362 11235
+1790 362 49233
+1825 362 16415
+1870 362 10982
+1925 362 17131
+1991 362 22762
+2075 362 34064
+2076 362 34064
+2077 362 53622
+2078 362 3916
+2088 362 6375
+2103 362 24389
+2123 362 39091
+2150 362 6104
+2186 362 33289
+2231 362 13154
+2286 362 59076
+2352 362 7500
+2430 362 4571
+2873 362 27852657
+310 363 1
+995 363 22854
+996 363 2228
+997 363 2228
+1003 363 41784
+1007 363 17814
+1008 363 43779
+1009 363 40284
+1010 363 48634
+1014 363 51211
+1048 363 23397
+1052 363 10927
+1056 363 21655
+1141 363 34324
+1144 363 37670
+1273 363 36100
+1287 363 40168
+1480 363 36100
+1484 363 50223
+1759 363 10752
+1763 363 10778
+1768 363 23360
+2119 363 8695
+2122 363 12474
+2123 363 45324
+2126 363 859
+2127 363 26824
+2128 363 58982
+2133 363 27005
+2134 363 45692
+2139 363 30461
+2165 363 878
+2166 363 18948
+2167 363 62254
+2168 363 29740
+2175 363 29740
+2198 363 58542
+2199 363 13241
+2201 363 59075
+2202 363 28303
+2203 363 3232
+2204 363 19425
+2211 363 64737
+2219 363 34997
+2243 363 49830
+2244 363 39583
+2245 363 3967
+2247 363 53632
+2248 363 26217
+2249 363 47004
+2256 363 38899
+2264 363 10028
+2273 363 40552
+2298 363 59706
+2299 363 20057
+2300 363 12493
+2301 363 26413
+2303 363 14686
+2304 363 57787
+2311 363 56239
+2319 363 57185
+2328 363 48531
+2338 363 7979
+2364 363 2150
+2365 363 47244
+2366 363 14585
+2367 363 38867
+2368 363 56919
+2370 363 6618
+2377 363 27426
+2385 363 37935
+2394 363 16450
+2404 363 12311
+2415 363 4332
+2442 363 39456
+2443 363 48184
+2444 363 65303
+2445 363 57709
+2446 363 25755
+2447 363 12331
+2448 363 12609
+2455 363 58451
+2463 363 3803
+2472 363 61439
+2482 363 46395
+2493 363 5939
+2505 363 2263
+2874 363 27852657
+311 364 1
+313 364 65520
+995 364 25680
+996 364 3950
+997 364 3950
+1003 364 58188
+1007 364 32986
+1008 364 44269
+1010 364 23397
+1014 364 36384
+1048 364 23397
+1052 364 36384
+1056 364 51755
+1141 364 59781
+1144 364 8062
+1287 364 13611
+1484 364 20802
+1763 364 21530
+1768 364 20131
+2122 364 16977
+2123 364 58522
+2126 364 42726
+2127 364 2598
+2128 364 17341
+2133 364 38977
+2134 364 14078
+2139 364 17501
+2165 364 29054
+2166 364 2319
+2167 364 8468
+2168 364 4421
+2175 364 4421
+2198 364 16347
+2199 364 32236
+2201 364 43411
+2202 364 11980
+2203 364 52987
+2204 364 20668
+2211 364 12409
+2219 364 7988
+2243 364 50284
+2244 364 20142
+2245 364 55003
+2247 364 63211
+2248 364 65361
+2249 364 29236
+2256 364 44853
+2264 364 40180
+2273 364 32192
+2298 364 64429
+2299 364 44358
+2300 364 28973
+2301 364 29538
+2303 364 62429
+2304 364 24261
+2311 364 37776
+2319 364 11512
+2328 364 60814
+2338 364 28622
+2364 364 38283
+2365 364 24963
+2366 364 28286
+2367 364 58827
+2368 364 63826
+2370 364 25184
+2377 364 59983
+2385 364 40915
+2394 364 48146
+2404 364 7629
+2415 364 44528
+2442 364 26808
+2443 364 1418
+2444 364 59306
+2445 364 59945
+2446 364 36802
+2447 364 64996
+2448 364 22547
+2455 364 20007
+2463 364 63362
+2472 364 59656
+2482 364 9249
+2493 364 41862
+2505 364 8239
+2875 364 27852657
+312 365 1
+313 365 1
+995 365 21965
+996 365 24572
+997 365 24572
+1003 365 48671
+1007 365 52994
+1008 365 28895
+1014 365 31502
+1052 365 31502
+1056 365 57094
+1141 365 31502
+1144 365 49500
+1287 365 24373
+1768 365 41229
+2126 365 2398
+2127 365 6177
+2128 365 32374
+2133 365 60745
+2134 365 48097
+2139 365 17587
+2165 365 25412
+2166 365 34303
+2167 365 27893
+2168 365 24163
+2175 365 24163
+2198 365 58076
+2199 365 21289
+2201 365 18548
+2202 365 22298
+2203 365 7326
+2204 365 46384
+2211 365 48848
+2219 365 24685
+2243 365 27120
+2244 365 2701
+2245 365 32365
+2247 365 56419
+2248 365 64882
+2249 365 2984
+2256 365 55323
+2264 365 43625
+2273 365 18940
+2298 365 58718
+2299 365 19114
+2300 365 15272
+2301 365 36682
+2303 365 26839
+2304 365 15186
+2311 365 2836
+2319 365 8195
+2328 365 46082
+2338 365 27142
+2364 365 33908
+2365 365 38768
+2366 365 16905
+2367 365 28068
+2368 365 19726
+2370 365 62760
+2377 365 45267
+2385 365 52585
+2394 365 48652
+2404 365 42682
+2415 365 15540
+2442 365 26393
+2443 365 2011
+2444 365 8619
+2445 365 22783
+2446 365 46709
+2447 365 52353
+2448 365 40385
+2455 365 10257
+2463 365 36587
+2472 365 12580
+2482 365 62915
+2493 365 45133
+2505 365 33068
+2876 365 27852657
+313 366 1
+325 366 1
+350 366 1
+658 366 1
+997 366 24572
+1007 366 40949
+1030 366 24572
+1041 366 40949
+1114 366 24572
+1130 366 40949
+1474 366 36036
+1731 366 47641
+1732 366 5936
+1733 366 63263
+1795 366 21124
+1830 366 14477
+1872 366 8203
+1873 366 49534
+1875 366 26485
+1893 366 24680
+1901 366 24680
+1910 366 24680
+1926 366 30007
+1927 366 28222
+1928 366 29618
+1929 366 40445
+1941 366 21075
+1948 366 20428
+1956 366 20428
+1965 366 45108
+1975 366 20428
+1992 366 30007
+1993 366 28222
+1994 366 29618
+1995 366 40445
+1996 366 5608
+2007 366 21075
+2014 366 20428
+2022 366 20428
+2031 366 45108
+2041 366 40856
+2052 366 20428
+2080 366 57486
+2081 366 57486
+2082 366 33219
+2083 366 11230
+2084 366 19265
+2085 366 40004
+2086 366 51503
+2087 366 64857
+2088 366 45592
+2089 366 40004
+2090 366 51503
+2091 366 42822
+2092 366 35541
+2093 366 2234
+2104 366 50025
+2105 366 45242
+2106 366 10258
+2107 366 2084
+2108 366 41508
+2113 366 39274
+2126 366 56125
+2127 366 38641
+2128 366 51501
+2133 366 44557
+2153 366 47121
+2154 366 29637
+2155 366 42497
+2160 366 57364
+2166 366 17582
+2173 366 17582
+2187 366 30257
+2188 366 30834
+2190 366 28388
+2191 366 14384
+2196 366 33952
+2202 366 11825
+2209 366 37107
+2217 366 19525
+2232 366 42919
+2233 366 38310
+2234 366 30095
+2236 366 51143
+2241 366 54069
+2247 366 14180
+2254 366 56315
+2262 366 46151
+2271 366 26626
+2287 366 1136
+2288 366 46030
+2289 366 22167
+2290 366 5039
+2296 366 29475
+2302 366 9588
+2309 366 28030
+2317 366 37484
+2326 366 39297
+2336 366 12671
+2353 366 17503
+2354 366 9825
+2355 366 22960
+2356 366 42588
+2357 366 48177
+2368 366 56617
+2375 366 58104
+2383 366 50589
+2392 366 3073
+2402 366 24687
+2413 366 12016
+2431 366 57493
+2432 366 47462
+2433 366 15026
+2434 366 19529
+2435 366 18484
+2440 366 43402
+2446 366 12761
+2453 366 29831
+2461 366 45290
+2470 366 32745
+2480 366 14847
+2491 366 1649
+2503 366 58285
+2877 366 27852657
+314 367 1
+317 367 56901
+318 367 56901
+319 367 36996
+320 367 30940
+321 367 34581
+332 367 2415
+333 367 63106
+334 367 59634
+357 367 6472
+395 367 19220
+399 367 43857
+496 367 19220
+497 367 23139
+673 367 44371
+674 367 38612
+678 367 26909
+1759 367 3590
+1762 367 41788
+1763 367 5143
+1766 367 11668
+1767 367 43137
+1768 367 37994
+1773 367 20743
+1774 367 12929
+1779 367 3411
+1805 367 26942
+1806 367 15818
+1807 367 32168
+1808 367 59145
+1815 367 59145
+1837 367 51431
+1838 367 62109
+1840 367 58663
+1841 367 10505
+1842 367 49647
+1843 367 23046
+1850 367 31345
+1858 367 37721
+1882 367 61325
+1883 367 5642
+1884 367 3586
+1886 367 28110
+1887 367 53823
+1888 367 43044
+1895 367 36334
+1903 367 29069
+1912 367 56869
+1937 367 52641
+1938 367 12526
+1939 367 8029
+1940 367 34996
+1942 367 49458
+1943 367 6424
+1950 367 30773
+1958 367 12683
+1967 367 31844
+1977 367 40496
+2003 367 56126
+2004 367 31554
+2005 367 35220
+2006 367 21586
+2007 367 12182
+2009 367 39101
+2016 367 59952
+2024 367 18419
+2033 367 29689
+2043 367 3269
+2054 367 28294
+2364 367 4338
+2365 367 64734
+2366 367 19280
+2367 367 52545
+2368 367 19126
+2369 367 44456
+2370 367 53591
+2377 367 14289
+2385 367 49993
+2394 367 25865
+2404 367 39988
+2415 367 31587
+2493 367 17129
+2878 367 27852657
+315 368 1
+316 368 65520
+317 368 44995
+318 368 44996
+320 368 2415
+321 368 63106
+332 368 2415
+333 368 63106
+334 368 58093
+357 368 58379
+399 368 256
+497 368 42359
+674 368 17462
+678 368 48059
+1762 368 41811
+1763 368 8756
+1766 368 65436
+1767 368 18864
+1768 368 10108
+1773 368 50866
+1774 368 55669
+1779 368 51110
+1805 368 25845
+1806 368 1872
+1807 368 58322
+1808 368 44313
+1815 368 44313
+1837 368 47757
+1838 368 23014
+1840 368 54087
+1841 368 46852
+1842 368 64236
+1843 368 5598
+1850 368 47134
+1858 368 2821
+1882 368 17912
+1883 368 39197
+1884 368 1821
+1886 368 25592
+1887 368 65209
+1888 368 58705
+1895 368 43468
+1903 368 39823
+1912 368 37002
+1937 368 6717
+1938 368 44195
+1939 368 34215
+1940 368 60005
+1942 368 61787
+1943 368 5678
+1950 368 33547
+1958 368 15746
+1967 368 28442
+1977 368 56961
+2003 368 47533
+2004 368 44853
+2005 368 52569
+2006 368 43560
+2007 368 11424
+2009 368 35477
+2016 368 31481
+2024 368 1389
+2033 368 64437
+2043 368 20221
+2054 368 28781
+2364 368 55685
+2365 368 35426
+2366 368 22371
+2367 368 64867
+2368 368 46086
+2369 368 52252
+2370 368 39529
+2377 368 24736
+2385 368 63887
+2394 368 39641
+2404 368 3993
+2415 368 63984
+2493 368 14285
+2879 368 27852657
+316 369 1
+317 369 145
+318 369 144
+333 369 6890
+356 369 52007
+357 369 41032
+399 369 2422
+678 369 42056
+1766 369 10780
+1767 369 58612
+1768 369 58554
+1773 369 7003
+1774 369 25125
+1779 369 1148
+1805 369 47747
+1806 369 940
+1807 369 38532
+1808 369 42289
+1815 369 42289
+1837 369 25603
+1838 369 30908
+1840 369 33086
+1841 369 25360
+1842 369 48317
+1843 369 25873
+1850 369 37944
+1858 369 61176
+1882 369 46011
+1883 369 42075
+1884 369 44219
+1886 369 24593
+1887 369 34719
+1888 369 44949
+1895 369 2341
+1903 369 8321
+1912 369 12666
+1937 369 48286
+1938 369 49630
+1939 369 33712
+1940 369 9075
+1942 369 22702
+1943 369 41233
+1950 369 22021
+1958 369 59528
+1967 369 32058
+1977 369 19392
+2003 369 42561
+2004 369 50860
+2005 369 40866
+2006 369 32965
+2007 369 35588
+2009 369 57577
+2016 369 46180
+2024 369 42235
+2033 369 45043
+2043 369 17944
+2054 369 64073
+2364 369 27919
+2365 369 43689
+2366 369 53712
+2367 369 6220
+2368 369 21955
+2369 369 60662
+2370 369 61135
+2377 369 24300
+2385 369 7396
+2394 369 51763
+2404 369 29223
+2415 369 18450
+2493 369 22834
+2880 369 27852657
+317 370 1
+318 370 1
+495 370 27647
+665 370 43417
+666 370 13288
+667 370 13288
+690 370 21894
+702 370 9762
+727 370 47841
+728 370 37227
+738 370 58255
+745 370 58255
+754 370 58255
+773 370 24850
+774 370 32597
+775 370 53707
+776 370 5678
+784 370 39670
+791 370 19323
+799 370 19323
+808 370 12057
+818 370 19323
+838 370 24850
+839 370 32597
+840 370 53707
+841 370 5678
+842 370 23187
+849 370 39670
+856 370 19323
+864 370 19323
+873 370 12057
+883 370 38646
+894 370 19323
+1735 370 37841
+1736 370 37841
+1737 370 54485
+1738 370 62151
+1739 370 24310
+1740 370 12147
+1741 370 20857
+1742 370 19094
+1743 370 60305
+1744 370 12147
+1745 370 20857
+1746 370 2647
+1747 370 25657
+1748 370 30873
+1749 370 12147
+1750 370 20857
+1751 370 21335
+1752 370 44368
+1753 370 59451
+1754 370 28578
+1771 370 22813
+1772 370 6768
+1773 370 44804
+1774 370 23200
+1798 370 56907
+1799 370 40862
+1800 370 57069
+1801 370 16221
+1807 370 21221
+1814 370 21221
+1831 370 19846
+1832 370 52628
+1834 370 32160
+1835 370 36290
+1836 370 49819
+1842 370 17434
+1849 370 9522
+1857 370 53822
+1876 370 5162
+1877 370 37944
+1878 370 26602
+1880 370 21501
+1881 370 10547
+1887 370 15280
+1894 370 65070
+1902 370 64082
+1911 370 10260
+1931 370 25990
+1932 370 58334
+1933 370 2019
+1934 370 41768
+1936 370 3633
+1942 370 56737
+1949 370 43564
+1957 370 57122
+1966 370 54243
+1976 370 43983
+1997 370 36202
+1998 370 44018
+1999 370 13549
+2000 370 9583
+2001 370 51813
+2008 370 30603
+2015 370 11759
+2023 370 29390
+2032 370 5721
+2042 370 760
+2053 370 22298
+2358 370 41308
+2359 370 57745
+2360 370 45153
+2361 370 31532
+2362 370 43449
+2363 370 51102
+2369 370 40136
+2376 370 2681
+2384 370 7977
+2393 370 21858
+2403 370 32751
+2414 370 9720
+2492 370 59854
+2881 370 27852657
+318 371 1
+331 371 41549
+355 371 15522
+394 371 16766
+1753 371 39556
+1754 371 6657
+1773 371 10545
+1800 371 18691
+1801 371 6287
+1807 371 63909
+1814 371 63909
+1831 371 57476
+1832 371 5334
+1834 371 45923
+1835 371 1246
+1836 371 27362
+1842 371 15375
+1849 371 44405
+1857 371 46017
+1876 371 27467
+1877 371 6536
+1878 371 6536
+1880 371 46488
+1881 371 25503
+1887 371 62532
+1894 371 9052
+1902 371 8532
+1911 371 28036
+1931 371 19437
+1932 371 1015
+1933 371 1015
+1934 371 1015
+1936 371 47025
+1942 371 49522
+1949 371 29492
+1957 371 29743
+1966 371 27022
+1976 371 64507
+1997 371 60344
+1998 371 51990
+1999 371 51990
+2000 371 51990
+2001 371 43627
+2008 371 7476
+2015 371 33653
+2023 371 4189
+2032 371 33903
+2042 371 58802
+2053 371 59816
+2358 371 12204
+2359 371 54816
+2360 371 54816
+2361 371 54816
+2362 371 53118
+2363 371 23251
+2369 371 58632
+2376 371 14826
+2384 371 9681
+2393 371 51392
+2403 371 15863
+2414 371 43191
+2492 371 40577
+2882 371 27852657
+319 372 1
+336 372 1
+338 372 1
+363 372 39112
+371 372 26409
+400 372 44175
+408 372 39411
+420 372 29285
+439 372 17453
+447 372 33638
+456 372 30762
+504 372 29437
+516 372 54149
+532 372 59374
+572 372 32601
+592 372 27937
+597 372 34537
+604 372 17084
+612 372 38973
+621 372 63925
+631 372 62086
+681 372 62917
+693 372 1743
+710 372 62021
+751 372 4598
+815 372 3164
+853 372 24708
+861 372 23163
+870 372 60683
+880 372 36333
+891 372 29734
+1766 372 8281
+1777 372 46828
+1789 372 52522
+1793 372 2181
+1798 372 55820
+1804 372 14303
+1811 372 18204
+1819 372 23702
+1820 372 57725
+1824 372 27753
+1828 372 10743
+1833 372 57996
+1839 372 21034
+1846 372 52605
+1854 372 5050
+1864 372 1539
+1865 372 57663
+1866 372 31016
+1873 372 8852
+1878 372 19415
+1884 372 55134
+1891 372 55197
+1899 372 37506
+1908 372 4196
+1919 372 9312
+1920 372 62061
+1921 372 46833
+1924 372 48872
+1933 372 38639
+1939 372 9325
+1946 372 38217
+1954 372 27846
+1963 372 4197
+1973 372 4160
+1985 372 22116
+1986 372 21837
+1987 372 7847
+1990 372 41407
+1994 372 26427
+2005 372 53488
+2012 372 18603
+2020 372 57355
+2029 372 43453
+2039 372 4310
+2050 372 15670
+2346 372 7017
+2347 372 49428
+2348 372 43651
+2351 372 5279
+2355 372 42084
+2360 372 10117
+2366 372 35447
+2373 372 9083
+2381 372 64489
+2390 372 60557
+2400 372 48949
+2411 372 4207
+2489 372 24703
+2883 372 27852657
+320 373 1
+337 373 65520
+366 373 65520
+401 373 27231
+409 373 38290
+421 373 57776
+440 373 28138
+448 373 17370
+457 373 25115
+505 373 31530
+517 373 33991
+533 373 28945
+573 373 19347
+593 373 40093
+598 373 8506
+605 373 45889
+613 373 62262
+622 373 64433
+632 373 4680
+682 373 44443
+694 373 21078
+711 373 25174
+752 373 5415
+816 373 15482
+854 373 60349
+862 373 33773
+871 373 28932
+881 373 23587
+892 373 12785
+1767 373 58753
+1778 373 55636
+1790 373 12999
+1794 373 16540
+1799 373 35840
+1805 373 16519
+1812 373 26404
+1822 373 64604
+1823 373 55186
+1825 373 59623
+1829 373 61638
+1834 373 17574
+1840 373 24599
+1847 373 42226
+1855 373 12643
+1867 373 32950
+1868 373 4392
+1869 373 4392
+1874 373 47489
+1879 373 43384
+1885 373 15020
+1892 373 12080
+1900 373 28357
+1909 373 31896
+1922 373 32333
+1923 373 30898
+1924 373 30898
+1925 373 28859
+1934 373 22664
+1940 373 18648
+1947 373 23748
+1955 373 62990
+1964 373 36091
+1974 373 22050
+1988 373 18694
+1989 373 20412
+1990 373 20412
+1991 373 52373
+1995 373 40292
+2006 373 40109
+2013 373 18041
+2021 373 12782
+2030 373 60895
+2040 373 41483
+2051 373 61236
+2349 373 23313
+2350 373 23538
+2351 373 23538
+2352 373 61910
+2356 373 18068
+2361 373 4688
+2367 373 29806
+2374 373 25566
+2382 373 27139
+2391 373 28705
+2401 373 10790
+2412 373 45489
+2490 373 24197
+2884 373 27852657
+321 374 1
+333 374 1
+356 374 1
+678 374 1
+1014 374 24572
+1016 374 40949
+1052 374 24572
+1056 374 40949
+1141 374 24572
+1144 374 40949
+1495 374 36036
+1766 374 47641
+1767 374 5936
+1768 374 63263
+1806 374 21124
+1841 374 14477
+1883 374 8203
+1884 374 49534
+1886 374 26485
+1895 374 24680
+1903 374 24680
+1912 374 24680
+1937 374 30007
+1938 374 28222
+1939 374 29618
+1940 374 40445
+1943 374 21075
+1950 374 20428
+1958 374 20428
+1967 374 45108
+1977 374 20428
+2003 374 30007
+2004 374 28222
+2005 374 29618
+2006 374 40445
+2007 374 5608
+2009 374 21075
+2016 374 20428
+2024 374 20428
+2033 374 45108
+2043 374 40856
+2054 374 20428
+2115 374 57486
+2116 374 57486
+2117 374 33219
+2118 374 11230
+2119 374 19265
+2120 374 40004
+2121 374 51503
+2122 374 64857
+2123 374 45592
+2124 374 40004
+2125 374 51503
+2126 374 42822
+2127 374 35541
+2128 374 2234
+2129 374 50025
+2130 374 45242
+2131 374 10258
+2132 374 2084
+2133 374 41508
+2134 374 39274
+2137 374 56125
+2138 374 38641
+2139 374 51501
+2140 374 44557
+2164 374 47121
+2165 374 29637
+2166 374 42497
+2167 374 57364
+2168 374 17582
+2175 374 17582
+2198 374 30257
+2199 374 30834
+2201 374 28388
+2202 374 14384
+2203 374 33952
+2204 374 11825
+2211 374 37107
+2219 374 19525
+2243 374 42919
+2244 374 38310
+2245 374 30095
+2247 374 51143
+2248 374 54069
+2249 374 14180
+2256 374 56315
+2264 374 46151
+2273 374 26626
+2298 374 1136
+2299 374 46030
+2300 374 22167
+2301 374 5039
+2303 374 29475
+2304 374 9588
+2311 374 28030
+2319 374 37484
+2328 374 39297
+2338 374 12671
+2364 374 17503
+2365 374 9825
+2366 374 22960
+2367 374 42588
+2368 374 48177
+2370 374 56617
+2377 374 58104
+2385 374 50589
+2394 374 3073
+2404 374 24687
+2415 374 12016
+2442 374 57493
+2443 374 47462
+2444 374 15026
+2445 374 19529
+2446 374 18484
+2447 374 43402
+2448 374 12761
+2455 374 29831
+2463 374 45290
+2472 374 32745
+2482 374 14847
+2493 374 1649
+2505 374 58285
+2885 374 27852657
+322 375 1
+963 375 46840
+978 375 43137
+983 375 61818
+988 375 22233
+996 375 51120
+1021 375 39567
+1029 375 10095
+1040 375 53485
+1113 375 59541
+1129 375 52505
+1267 375 41681
+1440 375 19960
+1718 375 46228
+1732 375 2479
+2077 375 21309
+2078 375 35091
+2087 375 23033
+2088 375 50852
+2092 375 45212
+2107 375 20058
+2112 375 3593
+2127 375 35095
+2150 375 19041
+2154 375 25233
+2159 375 7952
+2165 375 28430
+2172 375 28430
+2183 375 60933
+2184 375 57247
+2186 375 11790
+2190 375 9696
+2195 375 11280
+2201 375 56352
+2208 375 19074
+2216 375 56165
+2228 375 16681
+2229 375 43364
+2230 375 39958
+2235 375 3681
+2240 375 33152
+2246 375 28502
+2253 375 10502
+2261 375 60114
+2270 375 3949
+2283 375 24829
+2284 375 65258
+2285 375 51015
+2286 375 62510
+2295 375 38864
+2301 375 10729
+2308 375 58340
+2316 375 9446
+2325 375 12247
+2335 375 8298
+2349 375 30181
+2350 375 30269
+2351 375 63249
+2352 375 22608
+2356 375 44030
+2367 375 54392
+2374 375 40612
+2382 375 8603
+2391 375 23712
+2401 375 44961
+2412 375 36663
+2427 375 36433
+2428 375 21647
+2429 375 18012
+2430 375 9742
+2434 375 14660
+2439 375 19889
+2445 375 5775
+2452 375 22971
+2460 375 8560
+2469 375 48562
+2479 375 33441
+2490 375 55602
+2502 375 876
+2886 375 27852657
+323 376 1
+325 376 65520
+1028 376 25680
+1029 376 3950
+1030 376 3950
+1037 376 58188
+1041 376 32986
+1042 376 44269
+1048 376 23397
+1052 376 36384
+1068 376 23397
+1072 376 36384
+1077 376 51755
+1162 376 59781
+1167 376 8062
+1312 376 13611
+1511 376 20802
+1790 376 21530
+1795 376 20131
+2149 376 16977
+2150 376 58522
+2153 376 42726
+2154 376 2598
+2155 376 17341
+2160 376 38977
+2161 376 14078
+2166 376 17501
+2172 376 29054
+2173 376 2319
+2174 376 8468
+2175 376 4421
+2176 376 4421
+2205 376 16347
+2206 376 32236
+2208 376 43411
+2209 376 11980
+2210 376 52987
+2211 376 20668
+2212 376 12409
+2220 376 7988
+2250 376 50284
+2251 376 20142
+2252 376 55003
+2254 376 63211
+2255 376 65361
+2256 376 29236
+2257 376 44853
+2265 376 40180
+2274 376 32192
+2305 376 64429
+2306 376 44358
+2307 376 28973
+2308 376 29538
+2310 376 62429
+2311 376 24261
+2312 376 37776
+2320 376 11512
+2329 376 60814
+2339 376 28622
+2371 376 38283
+2372 376 24963
+2373 376 28286
+2374 376 58827
+2375 376 63826
+2377 376 25184
+2378 376 59983
+2386 376 40915
+2395 376 48146
+2405 376 7629
+2416 376 44528
+2449 376 26808
+2450 376 1418
+2451 376 59306
+2452 376 59945
+2453 376 36802
+2454 376 64996
+2455 376 22547
+2456 376 20007
+2464 376 63362
+2473 376 59656
+2483 376 9249
+2494 376 41862
+2506 376 8239
+2887 376 27852657
+324 377 1
+325 377 1
+1028 377 21965
+1029 377 24572
+1030 377 24572
+1037 377 48671
+1041 377 52994
+1042 377 28895
+1052 377 31502
+1072 377 31502
+1077 377 57094
+1162 377 31502
+1167 377 49500
+1312 377 24373
+1795 377 41229
+2153 377 2398
+2154 377 6177
+2155 377 32374
+2160 377 60745
+2161 377 48097
+2166 377 17587
+2172 377 25412
+2173 377 34303
+2174 377 27893
+2175 377 24163
+2176 377 24163
+2205 377 58076
+2206 377 21289
+2208 377 18548
+2209 377 22298
+2210 377 7326
+2211 377 46384
+2212 377 48848
+2220 377 24685
+2250 377 27120
+2251 377 2701
+2252 377 32365
+2254 377 56419
+2255 377 64882
+2256 377 2984
+2257 377 55323
+2265 377 43625
+2274 377 18940
+2305 377 58718
+2306 377 19114
+2307 377 15272
+2308 377 36682
+2310 377 26839
+2311 377 15186
+2312 377 2836
+2320 377 8195
+2329 377 46082
+2339 377 27142
+2371 377 33908
+2372 377 38768
+2373 377 16905
+2374 377 28068
+2375 377 19726
+2377 377 62760
+2378 377 45267
+2386 377 52585
+2395 377 48652
+2405 377 42682
+2416 377 15540
+2449 377 26393
+2450 377 2011
+2451 377 8619
+2452 377 22783
+2453 377 46709
+2454 377 52353
+2455 377 40385
+2456 377 10257
+2464 377 36587
+2473 377 12580
+2483 377 62915
+2494 377 45133
+2506 377 33068
+2888 377 27852657
+325 378 1
+964 378 46840
+979 378 43137
+984 378 61818
+997 378 7832
+1030 378 49662
+1041 378 57777
+1114 378 59541
+1130 378 54024
+1268 378 51190
+1733 378 48707
+2091 378 2930
+2092 378 54849
+2093 378 18779
+2108 378 60528
+2113 378 37952
+2128 378 21566
+2154 378 21936
+2155 378 13040
+2160 378 56248
+2166 378 30299
+2173 378 30299
+2187 378 35332
+2188 378 60279
+2190 378 35675
+2191 378 56993
+2196 378 21191
+2202 378 44012
+2209 378 5762
+2217 378 40984
+2232 378 31957
+2233 378 63802
+2234 378 56848
+2236 378 6552
+2241 378 37626
+2247 378 53219
+2254 378 59022
+2262 378 9551
+2271 378 34088
+2287 378 48012
+2288 378 13167
+2289 378 36070
+2290 378 6691
+2296 378 45361
+2302 378 41762
+2309 378 16508
+2317 378 35250
+2326 378 51033
+2336 378 16945
+2353 378 56627
+2354 378 1318
+2355 378 33611
+2356 378 12360
+2357 378 58385
+2368 378 35138
+2375 378 1095
+2383 378 6078
+2392 378 11195
+2402 378 16248
+2413 378 64824
+2431 378 14279
+2432 378 55585
+2433 378 63354
+2434 378 325
+2435 378 28842
+2440 378 41100
+2446 378 4281
+2453 378 32446
+2461 378 63687
+2470 378 56606
+2480 378 28447
+2491 378 27747
+2503 378 50214
+2889 378 27852657
+326 379 1
+327 379 65520
+330 379 44995
+331 379 44996
+332 379 2415
+333 379 63106
+337 379 2415
+340 379 63106
+341 379 58093
+362 379 58379
+407 379 256
+508 379 42359
+685 379 17462
+689 379 48059
+1789 379 41811
+1790 379 8756
+1793 379 65436
+1794 379 18864
+1795 379 10108
+1800 379 50866
+1801 379 55669
+1806 379 51110
+1812 379 25845
+1813 379 1872
+1814 379 58322
+1815 379 44313
+1816 379 44313
+1844 379 47757
+1845 379 23014
+1847 379 54087
+1848 379 46852
+1849 379 64236
+1850 379 5598
+1851 379 47134
+1859 379 2821
+1889 379 17912
+1890 379 39197
+1891 379 1821
+1893 379 25592
+1894 379 65209
+1895 379 58705
+1896 379 43468
+1904 379 39823
+1913 379 37002
+1944 379 6717
+1945 379 44195
+1946 379 34215
+1947 379 60005
+1949 379 61787
+1950 379 5678
+1951 379 33547
+1959 379 15746
+1968 379 28442
+1978 379 56961
+2010 379 47533
+2011 379 44853
+2012 379 52569
+2013 379 43560
+2014 379 11424
+2016 379 35477
+2017 379 31481
+2025 379 1389
+2034 379 64437
+2044 379 20221
+2055 379 28781
+2371 379 55685
+2372 379 35426
+2373 379 22371
+2374 379 64867
+2375 379 46086
+2376 379 52252
+2377 379 39529
+2378 379 24736
+2386 379 63887
+2395 379 39641
+2405 379 3993
+2416 379 63984
+2494 379 14285
+2890 379 27852657
+327 380 1
+330 380 145
+331 380 144
+340 380 6890
+361 380 52007
+362 380 41032
+407 380 2422
+689 380 42056
+1793 380 10780
+1794 380 58612
+1795 380 58554
+1800 380 7003
+1801 380 25125
+1806 380 1148
+1812 380 47747
+1813 380 940
+1814 380 38532
+1815 380 42289
+1816 380 42289
+1844 380 25603
+1845 380 30908
+1847 380 33086
+1848 380 25360
+1849 380 48317
+1850 380 25873
+1851 380 37944
+1859 380 61176
+1889 380 46011
+1890 380 42075
+1891 380 44219
+1893 380 24593
+1894 380 34719
+1895 380 44949
+1896 380 2341
+1904 380 8321
+1913 380 12666
+1944 380 48286
+1945 380 49630
+1946 380 33712
+1947 380 9075
+1949 380 22702
+1950 380 41233
+1951 380 22021
+1959 380 59528
+1968 380 32058
+1978 380 19392
+2010 380 42561
+2011 380 50860
+2012 380 40866
+2013 380 32965
+2014 380 35588
+2016 380 57577
+2017 380 46180
+2025 380 42235
+2034 380 45043
+2044 380 17944
+2055 380 64073
+2371 380 27919
+2372 380 43689
+2373 380 53712
+2374 380 6220
+2375 380 21955
+2376 380 60662
+2377 380 61135
+2378 380 24300
+2386 380 7396
+2395 380 51763
+2405 380 29223
+2416 380 18450
+2494 380 22834
+2891 380 27852657
+328 381 1
+330 381 43681
+331 381 43681
+341 381 26301
+362 381 31288
+407 381 110
+1800 381 1179
+1801 381 18937
+1806 381 63096
+1813 381 37012
+1814 381 20171
+1815 381 6047
+1816 381 6047
+1844 381 29079
+1845 381 39113
+1847 381 16436
+1848 381 45823
+1849 381 22128
+1850 381 30601
+1851 381 24190
+1859 381 18143
+1889 381 661
+1890 381 45825
+1891 381 51569
+1893 381 47912
+1894 381 62187
+1895 381 33990
+1896 381 23429
+1904 381 46534
+1913 381 28391
+1944 381 3693
+1945 381 48533
+1946 381 976
+1947 381 976
+1949 381 10259
+1950 381 5443
+1951 381 34723
+1959 381 47773
+1968 381 45992
+1978 381 17601
+2010 381 28269
+2011 381 8879
+2012 381 12637
+2013 381 12637
+2014 381 12512
+2016 381 41504
+2017 381 33254
+2025 381 11511
+2034 381 9913
+2044 381 21413
+2055 381 3812
+2371 381 48641
+2372 381 30192
+2373 381 42606
+2374 381 42606
+2375 381 13970
+2376 381 22086
+2377 381 42800
+2378 381 28195
+2386 381 35762
+2395 381 31477
+2405 381 48664
+2416 381 41506
+2494 381 5756
+2892 381 27852657
+329 382 1
+330 382 58625
+331 382 58625
+341 382 28245
+362 382 24171
+407 382 49545
+1800 382 54563
+1801 382 13544
+1806 382 54384
+1812 382 29375
+1813 382 31792
+1814 382 11786
+1815 382 7696
+1816 382 7696
+1844 382 5764
+1845 382 40730
+1847 382 37618
+1848 382 8305
+1849 382 49063
+1850 382 60537
+1851 382 3678
+1859 382 61503
+1889 382 54817
+1890 382 50130
+1891 382 50130
+1893 382 22407
+1894 382 22514
+1895 382 29304
+1896 382 65233
+1904 382 21920
+1913 382 25938
+1944 382 36435
+1945 382 28447
+1946 382 28447
+1947 382 13062
+1949 382 59264
+1950 382 57187
+1951 382 26164
+1959 382 13226
+1968 382 31628
+1978 382 5690
+2010 382 43525
+2011 382 40806
+2012 382 40806
+2013 382 1112
+2014 382 52069
+2016 382 23603
+2017 382 6911
+2025 382 46448
+2034 382 10159
+2044 382 21236
+2055 382 15546
+2371 382 23623
+2372 382 11406
+2373 382 11406
+2374 382 20321
+2375 382 31812
+2376 382 29848
+2377 382 19325
+2378 382 60648
+2386 382 24053
+2395 382 28207
+2405 382 203
+2416 382 37931
+2494 382 51196
+2893 382 27852657
+330 383 1
+331 383 1
+495 383 37874
+665 383 10285
+666 383 60982
+667 383 60982
+690 383 48012
+702 383 7
+727 383 16466
+728 383 4944
+738 383 27117
+745 383 27117
+754 383 27117
+773 383 43950
+774 383 36203
+775 383 13879
+776 383 10813
+784 383 35124
+791 383 14645
+799 383 14645
+808 383 41762
+818 383 14645
+838 383 43950
+839 383 36203
+840 383 13879
+841 383 10813
+842 383 56310
+849 383 35124
+856 383 14645
+864 383 14645
+873 383 41762
+883 383 29290
+894 383 14645
+1735 383 4741
+1736 383 4741
+1737 383 1996
+1738 383 5164
+1739 383 423
+1740 383 24316
+1741 383 51985
+1742 383 41148
+1743 383 40725
+1744 383 24316
+1745 383 51985
+1746 383 57691
+1747 383 60049
+1748 383 19324
+1749 383 24316
+1750 383 51985
+1751 383 632
+1752 383 12911
+1753 383 33379
+1754 383 14055
+1771 383 38326
+1772 383 14820
+1773 383 22396
+1774 383 42532
+1798 383 27958
+1799 383 4452
+1800 383 33857
+1801 383 39066
+1807 383 39708
+1814 383 39708
+1831 383 19721
+1832 383 51786
+1834 383 20678
+1835 383 19975
+1836 383 63906
+1842 383 32694
+1849 383 65096
+1857 383 25388
+1876 383 50819
+1877 383 17363
+1878 383 18135
+1880 383 28196
+1881 383 14277
+1887 383 24120
+1894 383 64847
+1902 383 34752
+1911 383 9364
+1931 383 19026
+1932 383 51529
+1933 383 31753
+1934 383 8233
+1936 383 56417
+1942 383 38301
+1949 383 2799
+1957 383 61686
+1966 383 60121
+1976 383 50757
+1997 383 54221
+1998 383 13716
+1999 383 61873
+2000 383 9021
+2001 383 9274
+2008 383 48436
+2015 383 59776
+2023 383 48495
+2032 383 46070
+2042 383 34298
+2053 383 49062
+2358 383 32851
+2359 383 8421
+2360 383 28275
+2361 383 65338
+2362 383 10629
+2363 383 23132
+2369 383 8217
+2376 383 33855
+2384 383 48209
+2393 383 12299
+2403 383 58274
+2414 383 18511
+2492 383 1930
+2894 383 27852657
+331 384 1
+355 384 11054
+394 384 2581
+1753 384 60281
+1754 384 31692
+1773 384 60533
+1800 384 52815
+1801 384 22206
+1807 384 27514
+1814 384 27514
+1831 384 36739
+1832 384 13864
+1834 384 31241
+1835 384 6264
+1836 384 6349
+1842 384 41469
+1849 384 38479
+1857 384 10965
+1876 384 22859
+1877 384 25751
+1878 384 25751
+1880 384 43757
+1881 384 61734
+1887 384 42359
+1894 384 23695
+1902 384 11967
+1911 384 1002
+1931 384 27673
+1932 384 37872
+1933 384 37872
+1934 384 37872
+1936 384 8866
+1942 384 28285
+1949 384 880
+1957 384 39746
+1966 384 27386
+1976 384 26384
+1997 384 5099
+1998 384 31562
+1999 384 31562
+2000 384 31562
+2001 384 53481
+2008 384 8400
+2015 384 41876
+2023 384 25263
+2032 384 26144
+2042 384 4767
+2053 384 43904
+2358 384 22260
+2359 384 23857
+2360 384 23857
+2361 384 23857
+2362 384 40169
+2363 384 54272
+2369 384 12977
+2376 384 32897
+2384 384 32922
+2393 384 34267
+2403 384 10488
+2414 384 60348
+2492 384 9628
+2895 384 27852657
+332 385 1
+1003 385 46840
+1007 385 43137
+1008 385 61818
+1010 385 22233
+1014 385 51120
+1048 385 39567
+1052 385 10095
+1056 385 53485
+1141 385 59541
+1144 385 52505
+1287 385 41681
+1484 385 19960
+1763 385 46228
+1768 385 2479
+2122 385 21309
+2123 385 35091
+2126 385 23033
+2127 385 50852
+2128 385 45212
+2133 385 20058
+2134 385 3593
+2139 385 35095
+2165 385 19041
+2166 385 25233
+2167 385 7952
+2168 385 28430
+2175 385 28430
+2198 385 60933
+2199 385 57247
+2201 385 11790
+2202 385 9696
+2203 385 11280
+2204 385 56352
+2211 385 19074
+2219 385 56165
+2243 385 16681
+2244 385 43364
+2245 385 39958
+2247 385 3681
+2248 385 33152
+2249 385 28502
+2256 385 10502
+2264 385 60114
+2273 385 3949
+2298 385 24829
+2299 385 65258
+2300 385 51015
+2301 385 62510
+2303 385 38864
+2304 385 10729
+2311 385 58340
+2319 385 9446
+2328 385 12247
+2338 385 8298
+2364 385 30181
+2365 385 30269
+2366 385 63249
+2367 385 22608
+2368 385 44030
+2370 385 54392
+2377 385 40612
+2385 385 8603
+2394 385 23712
+2404 385 44961
+2415 385 36663
+2442 385 36433
+2443 385 21647
+2444 385 18012
+2445 385 9742
+2446 385 14660
+2447 385 19889
+2448 385 5775
+2455 385 22971
+2463 385 8560
+2472 385 48562
+2482 385 33441
+2493 385 55602
+2505 385 876
+2896 385 27852657
+333 386 1
+340 386 1
+361 386 1
+689 386 1
+1052 386 24572
+1056 386 40949
+1072 386 24572
+1077 386 40949
+1162 386 24572
+1167 386 40949
+1522 386 36036
+1793 386 47641
+1794 386 5936
+1795 386 63263
+1813 386 21124
+1848 386 14477
+1890 386 8203
+1891 386 49534
+1893 386 26485
+1896 386 24680
+1904 386 24680
+1913 386 24680
+1944 386 30007
+1945 386 28222
+1946 386 29618
+1947 386 40445
+1950 386 21075
+1951 386 20428
+1959 386 20428
+1968 386 45108
+1978 386 20428
+2010 386 30007
+2011 386 28222
+2012 386 29618
+2013 386 40445
+2014 386 5608
+2016 386 21075
+2017 386 20428
+2025 386 20428
+2034 386 45108
+2044 386 40856
+2055 386 20428
+2142 386 57486
+2143 386 57486
+2144 386 33219
+2145 386 11230
+2146 386 19265
+2147 386 40004
+2148 386 51503
+2149 386 64857
+2150 386 45592
+2151 386 40004
+2152 386 51503
+2153 386 42822
+2154 386 35541
+2155 386 2234
+2156 386 50025
+2157 386 45242
+2158 386 10258
+2159 386 2084
+2160 386 41508
+2161 386 39274
+2164 386 56125
+2165 386 38641
+2166 386 51501
+2167 386 44557
+2171 386 47121
+2172 386 29637
+2173 386 42497
+2174 386 57364
+2175 386 17582
+2176 386 17582
+2205 386 30257
+2206 386 30834
+2208 386 28388
+2209 386 14384
+2210 386 33952
+2211 386 11825
+2212 386 37107
+2220 386 19525
+2250 386 42919
+2251 386 38310
+2252 386 30095
+2254 386 51143
+2255 386 54069
+2256 386 14180
+2257 386 56315
+2265 386 46151
+2274 386 26626
+2305 386 1136
+2306 386 46030
+2307 386 22167
+2308 386 5039
+2310 386 29475
+2311 386 9588
+2312 386 28030
+2320 386 37484
+2329 386 39297
+2339 386 12671
+2371 386 17503
+2372 386 9825
+2373 386 22960
+2374 386 42588
+2375 386 48177
+2377 386 56617
+2378 386 58104
+2386 386 50589
+2395 386 3073
+2405 386 24687
+2416 386 12016
+2449 386 57493
+2450 386 47462
+2451 386 15026
+2452 386 19529
+2453 386 18484
+2454 386 43402
+2455 386 12761
+2456 386 29831
+2464 386 45290
+2473 386 32745
+2483 386 14847
+2494 386 1649
+2506 386 58285
+2897 386 27852657
+334 387 1
+341 387 41549
+362 387 15522
+407 387 16766
+1800 387 39556
+1801 387 6657
+1806 387 10545
+1813 387 18691
+1814 387 6287
+1815 387 63909
+1816 387 63909
+1844 387 57476
+1845 387 5334
+1847 387 45923
+1848 387 1246
+1849 387 27362
+1850 387 15375
+1851 387 44405
+1859 387 46017
+1889 387 27467
+1890 387 6536
+1891 387 6536
+1893 387 46488
+1894 387 25503
+1895 387 62532
+1896 387 9052
+1904 387 8532
+1913 387 28036
+1944 387 19437
+1945 387 1015
+1946 387 1015
+1947 387 1015
+1949 387 47025
+1950 387 49522
+1951 387 29492
+1959 387 29743
+1968 387 27022
+1978 387 64507
+2010 387 60344
+2011 387 51990
+2012 387 51990
+2013 387 51990
+2014 387 43627
+2016 387 7476
+2017 387 33653
+2025 387 4189
+2034 387 33903
+2044 387 58802
+2055 387 59816
+2371 387 12204
+2372 387 54816
+2373 387 54816
+2374 387 54816
+2375 387 53118
+2376 387 23251
+2377 387 58632
+2378 387 14826
+2386 387 9681
+2395 387 51392
+2405 387 15863
+2416 387 43191
+2494 387 40577
+2898 387 27852657
+335 388 1
+342 388 65520
+358 388 1
+365 388 65518
+369 388 65518
+372 388 65520
+402 388 1
+410 388 65518
+417 388 65515
+422 388 65518
+441 388 65518
+449 388 65518
+458 388 65520
+518 388 65519
+529 388 65517
+534 388 65519
+560 388 65517
+566 388 65517
+574 388 65519
+606 388 65520
+614 388 65520
+623 388 65520
+695 388 65519
+706 388 65517
+712 388 65519
+753 388 2
+790 388 2
+798 388 2
+807 388 6
+817 388 4
+855 388 3
+863 388 3
+872 388 7
+882 388 8
+893 388 4
+1060 388 24566
+1081 388 65509
+1087 388 40943
+1179 388 16377
+1200 388 12
+1207 388 40967
+1215 388 12
+1317 388 51948
+1324 388 2804
+1350 388 31361
+1357 388 34177
+1365 388 31373
+1395 388 31349
+1402 388 58731
+1410 388 62710
+1419 388 31349
+1500 388 65515
+1534 388 16383
+1569 388 16401
+1577 388 18
+1614 388 2828
+1622 388 31373
+1631 388 31355
+1662 388 34172
+1669 388 9618
+1677 388 34184
+1686 388 34184
+1696 388 34178
+1779 388 49144
+1813 388 32765
+1841 388 16389
+1856 388 32756
+1875 388 49484
+1886 388 40971
+1893 388 4842
+1901 388 26701
+1910 388 59466
+1926 388 2872
+1927 388 2872
+1928 388 2872
+1929 388 2872
+1941 388 25368
+1948 388 25824
+1956 388 6427
+1965 388 57166
+1975 388 63221
+1992 388 2872
+1993 388 2872
+1994 388 2872
+1995 388 2872
+1996 388 2872
+2007 388 56717
+2014 388 48973
+2022 388 5010
+2031 388 6606
+2041 388 7520
+2052 388 43998
+2153 388 57329
+2154 388 57329
+2155 388 57329
+2160 388 57329
+2166 388 7493
+2173 388 48444
+2187 388 3824
+2188 388 3824
+2190 388 16695
+2191 388 16695
+2196 388 16695
+2202 388 2261
+2209 388 19884
+2217 388 36961
+2232 388 1602
+2233 388 1602
+2234 388 1602
+2236 388 36788
+2241 388 36788
+2247 388 49
+2254 388 43585
+2262 388 55228
+2271 388 18267
+2287 388 46053
+2288 388 46053
+2289 388 46053
+2290 388 46053
+2296 388 46007
+2302 388 5530
+2309 388 44070
+2317 388 33684
+2326 388 7291
+2336 388 54545
+2353 388 52987
+2354 388 52987
+2355 388 52987
+2356 388 52987
+2357 388 52987
+2368 388 17613
+2375 388 10905
+2383 388 9808
+2392 388 2780
+2402 388 64486
+2413 388 34511
+2431 388 37612
+2432 388 37612
+2433 388 37612
+2434 388 37612
+2435 388 37612
+2440 388 37612
+2446 388 20647
+2453 388 17471
+2461 388 64195
+2470 388 34326
+2480 388 59755
+2491 388 3800
+2503 388 25792
+2899 388 27852657
+335 389 1
+342 389 65520
+369 389 1
+706 389 2
+855 389 1
+1060 389 24572
+1061 389 6
+1087 389 40949
+1088 389 65515
+1207 389 24572
+1208 389 6
+1402 389 30029
+1403 389 54595
+1670 389 10926
+1813 389 47379
+1848 389 29028
+1891 389 49123
+1893 389 63405
+1896 389 17703
+1904 389 17703
+1913 389 17703
+1944 389 58793
+1945 389 58793
+1946 389 42395
+1947 389 42395
+1950 389 29178
+1951 389 54384
+1959 389 54384
+1968 389 6566
+1978 389 54384
+2010 389 58793
+2011 389 58793
+2012 389 42395
+2013 389 42395
+2014 389 5900
+2016 389 29178
+2017 389 54384
+2025 389 54384
+2034 389 6566
+2044 389 43247
+2055 389 54384
+2166 389 22596
+2167 389 7709
+2168 389 1
+2171 389 50009
+2172 389 50009
+2173 389 30119
+2174 389 36152
+2175 389 50616
+2176 389 50615
+2205 389 24876
+2206 389 24876
+2208 389 12036
+2209 389 32958
+2210 389 53084
+2211 389 26665
+2212 389 10880
+2220 389 25786
+2250 389 11273
+2251 389 11273
+2252 389 33767
+2254 389 11974
+2255 389 9485
+2256 389 61684
+2257 389 58026
+2265 389 64425
+2274 389 20894
+2305 389 28889
+2306 389 28889
+2307 389 51383
+2308 389 51383
+2310 389 48759
+2311 389 40189
+2312 389 58345
+2320 389 52814
+2329 389 60261
+2339 389 39367
+2371 389 1753
+2372 389 1753
+2373 389 41661
+2374 389 41661
+2375 389 18333
+2377 389 27197
+2378 389 62343
+2386 389 9563
+2395 389 36865
+2405 389 19627
+2416 389 45782
+2449 389 43498
+2450 389 43498
+2451 389 24560
+2452 389 24560
+2453 389 4506
+2454 389 40228
+2455 389 7555
+2456 389 62085
+2464 389 42247
+2473 389 63845
+2483 389 27187
+2494 389 47816
+2506 389 34377
+2900 389 27852657
+336 390 1
+337 390 1
+340 390 65520
+341 390 1
+514 390 41587
+687 390 46833
+688 390 40700
+689 390 40700
+694 390 53792
+695 390 40399
+706 390 57938
+735 390 21032
+737 390 58433
+740 390 61797
+747 390 61797
+756 390 61797
+786 390 48242
+787 390 44121
+788 390 10959
+789 390 51784
+792 390 37977
+793 390 18812
+801 390 18812
+810 390 15088
+820 390 18812
+851 390 48242
+852 390 44121
+853 390 10959
+854 390 51784
+855 390 22069
+857 390 37977
+858 390 18812
+866 390 18812
+875 390 15088
+885 390 37624
+896 390 18812
+1782 390 8001
+1783 390 8001
+1784 390 1713
+1785 390 44955
+1786 390 36954
+1787 390 61547
+1788 390 1783
+1789 390 53048
+1790 390 16094
+1791 390 20295
+1792 390 26052
+1793 390 55202
+1794 390 41887
+1795 390 25793
+1796 390 48992
+1797 390 54749
+1798 390 4054
+1799 390 50690
+1800 390 10328
+1801 390 50056
+1804 390 2178
+1805 390 11340
+1806 390 40496
+1807 390 27918
+1811 390 25378
+1812 390 4673
+1813 390 1188
+1814 390 64443
+1815 390 1503
+1816 390 1503
+1844 390 39211
+1845 390 46650
+1847 390 5557
+1848 390 39393
+1849 390 36276
+1850 390 45181
+1851 390 27794
+1859 390 26291
+1889 390 45238
+1890 390 52677
+1891 390 34866
+1893 390 58215
+1894 390 34271
+1895 390 19825
+1896 390 13412
+1904 390 17551
+1913 390 56781
+1944 390 30279
+1945 390 40742
+1946 390 14800
+1947 390 34845
+1949 390 39057
+1950 390 51124
+1951 390 51402
+1959 390 57705
+1968 390 43551
+1978 390 52291
+2010 390 56817
+2011 390 5992
+2012 390 29305
+2013 390 32035
+2014 390 65310
+2016 390 45350
+2017 390 39590
+2025 390 32365
+2034 390 16746
+2044 390 40191
+2055 390 53421
+2371 390 8454
+2372 390 25840
+2373 390 15791
+2374 390 25516
+2375 390 17301
+2376 390 10375
+2377 390 26026
+2378 390 8986
+2386 390 42370
+2395 390 41387
+2405 390 51509
+2416 390 22168
+2494 390 37625
+2901 390 27852657
+337 391 1
+1037 391 46840
+1041 391 43137
+1042 391 61818
+1048 391 22233
+1052 391 51120
+1068 391 39567
+1072 391 10095
+1077 391 53485
+1162 391 59541
+1167 391 52505
+1312 391 41681
+1511 391 19960
+1790 391 46228
+1795 391 2479
+2149 391 21309
+2150 391 35091
+2153 391 23033
+2154 391 50852
+2155 391 45212
+2160 391 20058
+2161 391 3593
+2166 391 35095
+2172 391 19041
+2173 391 25233
+2174 391 7952
+2175 391 28430
+2176 391 28430
+2205 391 60933
+2206 391 57247
+2208 391 11790
+2209 391 9696
+2210 391 11280
+2211 391 56352
+2212 391 19074
+2220 391 56165
+2250 391 16681
+2251 391 43364
+2252 391 39958
+2254 391 3681
+2255 391 33152
+2256 391 28502
+2257 391 10502
+2265 391 60114
+2274 391 3949
+2305 391 24829
+2306 391 65258
+2307 391 51015
+2308 391 62510
+2310 391 38864
+2311 391 10729
+2312 391 58340
+2320 391 9446
+2329 391 12247
+2339 391 8298
+2371 391 30181
+2372 391 30269
+2373 391 63249
+2374 391 22608
+2375 391 44030
+2377 391 54392
+2378 391 40612
+2386 391 8603
+2395 391 23712
+2405 391 44961
+2416 391 36663
+2449 391 36433
+2450 391 21647
+2451 391 18012
+2452 391 9742
+2453 391 14660
+2454 391 19889
+2455 391 5775
+2456 391 22971
+2464 391 8560
+2473 391 48562
+2483 391 33441
+2494 391 55602
+2506 391 876
+2902 391 27852657
+338 392 1
+339 392 1
+340 392 1
+360 392 1
+361 392 1
+406 392 1
+1070 392 32761
+1071 392 32761
+1072 392 32761
+1074 392 32761
+1075 392 32761
+1076 392 1
+1077 392 32761
+1161 392 32761
+1162 392 32761
+1165 392 32761
+1166 392 1
+1167 392 32761
+1306 392 32761
+1311 392 1
+1312 392 32761
+1522 392 32761
+2171 392 24571
+2172 392 24571
+2173 392 49142
+2174 392 49141
+2208 392 24571
+2209 392 49142
+2210 392 49141
+2254 392 49142
+2255 392 49141
+2310 392 49141
+2375 392 24572
+2453 392 4096
+2454 392 36857
+2456 392 8190
+2464 392 8190
+2473 392 8190
+2483 392 8190
+2494 392 8190
+2506 392 19965
+2903 392 27852657
+339 393 1
+340 393 1
+1522 393 41786
+1793 393 38370
+1794 393 14836
+1795 393 14836
+1812 393 20524
+1813 393 10492
+1848 393 40204
+1891 393 4820
+1893 393 44577
+1896 393 22533
+1904 393 22533
+1913 393 22533
+1944 393 54301
+1945 393 28634
+1946 393 25762
+1947 393 49015
+1950 393 15519
+1951 393 17219
+1959 393 17219
+1968 393 39752
+1978 393 17219
+2010 393 54301
+2011 393 28634
+2012 393 25762
+2013 393 49015
+2014 393 59267
+2016 393 15519
+2017 393 17219
+2025 393 17219
+2034 393 39752
+2044 393 34438
+2055 393 17219
+2142 393 9166
+2143 393 9166
+2144 393 3289
+2145 393 3190
+2146 393 59545
+2147 393 48904
+2148 393 41397
+2149 393 499
+2150 393 6475
+2151 393 48904
+2152 393 41397
+2153 393 64836
+2154 393 1079
+2155 393 60125
+2156 393 48904
+2157 393 41397
+2158 393 10548
+2159 393 7481
+2160 393 43521
+2161 393 48917
+2164 393 18263
+2165 393 14941
+2166 393 42071
+2167 393 1400
+2171 393 58906
+2172 393 47644
+2173 393 26163
+2174 393 26642
+2175 393 177
+2176 393 177
+2205 393 31053
+2206 393 65091
+2208 393 32598
+2209 393 21522
+2210 393 10634
+2211 393 18185
+2212 393 16991
+2220 393 16814
+2250 393 29429
+2251 393 63467
+2252 393 4628
+2254 393 57021
+2255 393 52766
+2256 393 28170
+2257 393 16486
+2265 393 54168
+2274 393 37354
+2305 393 60949
+2306 393 14594
+2307 393 28157
+2308 393 4385
+2310 393 57909
+2311 393 55763
+2312 393 9795
+2320 393 30090
+2329 393 30718
+2339 393 58885
+2371 393 57752
+2372 393 25004
+2373 393 30355
+2374 393 18959
+2375 393 46390
+2377 393 12389
+2378 393 64386
+2386 393 42395
+2395 393 30385
+2405 393 11760
+2416 393 18396
+2449 393 44562
+2450 393 12929
+2451 393 535
+2452 393 31229
+2453 393 49735
+2454 393 61326
+2455 393 1563
+2456 393 63581
+2464 393 58012
+2473 393 24968
+2483 393 57440
+2494 393 35753
+2506 393 28791
+2904 393 27852657
+340 394 1
+1037 394 46840
+1041 394 43137
+1042 394 61818
+1052 394 7832
+1072 394 49662
+1077 394 57777
+1162 394 59541
+1167 394 54024
+1312 394 51190
+1795 394 48707
+2153 394 2930
+2154 394 54849
+2155 394 18779
+2160 394 60528
+2161 394 37952
+2166 394 21566
+2172 394 21936
+2173 394 13040
+2174 394 56248
+2175 394 30299
+2176 394 30299
+2205 394 35332
+2206 394 60279
+2208 394 35675
+2209 394 56993
+2210 394 21191
+2211 394 44012
+2212 394 5762
+2220 394 40984
+2250 394 31957
+2251 394 63802
+2252 394 56848
+2254 394 6552
+2255 394 37626
+2256 394 53219
+2257 394 59022
+2265 394 9551
+2274 394 34088
+2305 394 48012
+2306 394 13167
+2307 394 36070
+2308 394 6691
+2310 394 45361
+2311 394 41762
+2312 394 16508
+2320 394 35250
+2329 394 51033
+2339 394 16945
+2371 394 56627
+2372 394 1318
+2373 394 33611
+2374 394 12360
+2375 394 58385
+2377 394 35138
+2378 394 1095
+2386 394 6078
+2395 394 11195
+2405 394 16248
+2416 394 64824
+2449 394 14279
+2450 394 55585
+2451 394 63354
+2452 394 325
+2453 394 28842
+2454 394 41100
+2455 394 4281
+2456 394 32446
+2464 394 63687
+2473 394 56606
+2483 394 28447
+2494 394 27747
+2506 394 50214
+2905 394 27852657
+341 395 1
+362 395 11054
+407 395 2581
+1800 395 60281
+1801 395 31692
+1806 395 60533
+1813 395 52815
+1814 395 22206
+1815 395 27514
+1816 395 27514
+1844 395 36739
+1845 395 13864
+1847 395 31241
+1848 395 6264
+1849 395 6349
+1850 395 41469
+1851 395 38479
+1859 395 10965
+1889 395 22859
+1890 395 25751
+1891 395 25751
+1893 395 43757
+1894 395 61734
+1895 395 42359
+1896 395 23695
+1904 395 11967
+1913 395 1002
+1944 395 27673
+1945 395 37872
+1946 395 37872
+1947 395 37872
+1949 395 8866
+1950 395 28285
+1951 395 880
+1959 395 39746
+1968 395 27386
+1978 395 26384
+2010 395 5099
+2011 395 31562
+2012 395 31562
+2013 395 31562
+2014 395 53481
+2016 395 8400
+2017 395 41876
+2025 395 25263
+2034 395 26144
+2044 395 4767
+2055 395 43904
+2371 395 22260
+2372 395 23857
+2373 395 23857
+2374 395 23857
+2375 395 40169
+2376 395 54272
+2377 395 12977
+2378 395 32897
+2386 395 32922
+2395 395 34267
+2405 395 10488
+2416 395 60348
+2494 395 9628
+2906 395 27852657
+342 396 1
+1182 396 27665
+1207 396 60764
+1218 396 37856
+1327 396 18245
+1368 396 3680
+1405 396 17626
+1413 396 56466
+1422 396 25121
+1537 396 18245
+1580 396 39674
+1634 396 8400
+1670 396 9479
+1671 396 15434
+1672 396 63329
+1680 396 53532
+1689 396 44681
+1699 396 61402
+1816 396 4560
+1859 396 7989
+1913 396 58510
+1978 396 3153
+2017 396 33429
+2025 396 17948
+2034 396 54622
+2044 396 42862
+2055 396 35590
+2166 396 39852
+2173 396 17017
+2174 396 64054
+2175 396 3840
+2176 396 56667
+2205 396 61502
+2206 396 41770
+2208 396 31666
+2209 396 33877
+2210 396 18098
+2211 396 56038
+2212 396 10397
+2220 396 27793
+2250 396 33885
+2251 396 55602
+2252 396 55602
+2254 396 57693
+2255 396 48227
+2256 396 44504
+2257 396 30778
+2265 396 32233
+2274 396 35346
+2305 396 6381
+2306 396 54898
+2307 396 54898
+2308 396 54898
+2310 396 44796
+2311 396 25096
+2312 396 42489
+2320 396 5561
+2329 396 49519
+2339 396 25671
+2371 396 6008
+2372 396 43168
+2373 396 43168
+2374 396 43168
+2375 396 49214
+2377 396 38225
+2378 396 40164
+2386 396 6615
+2395 396 29682
+2405 396 65158
+2416 396 25450
+2449 396 43011
+2450 396 17825
+2451 396 17825
+2452 396 17825
+2453 396 20295
+2454 396 19533
+2455 396 15629
+2456 396 29345
+2464 396 21389
+2473 396 22386
+2483 396 65112
+2494 396 55053
+2506 396 39384
+2907 396 27852657
+343 397 1
+377 397 56146
+379 397 9375
+470 397 63928
+473 397 1593
+477 397 63928
+646 397 9030
+649 397 56491
+653 397 9030
+658 397 56491
+1721 397 58237
+1724 397 7284
+1727 397 31213
+1728 397 23929
+1731 397 47392
+1732 397 62633
+1733 397 38704
+1748 397 54410
+1753 397 15706
+1768 397 26128
+1794 397 62336
+1795 397 34779
+1800 397 14093
+1806 397 58428
+1813 397 58428
+1826 397 37233
+1827 397 15590
+1829 397 8164
+1830 397 21818
+1835 397 11569
+1841 397 53512
+1848 397 38556
+1856 397 45649
+1871 397 21741
+1872 397 37580
+1873 397 33162
+1875 397 36129
+1880 397 56117
+1886 397 10666
+1893 397 51015
+1901 397 24626
+1910 397 44498
+1926 397 13177
+1927 397 47115
+1928 397 7801
+1929 397 57248
+1935 397 7031
+1941 397 49182
+1948 397 3749
+1956 397 58450
+1965 397 32084
+1975 397 53107
+1992 397 16583
+1993 397 46439
+1994 397 19464
+1995 397 42557
+1996 397 45494
+2007 397 11627
+2014 397 20219
+2022 397 10767
+2031 397 22992
+2041 397 61081
+2052 397 7974
+2353 397 36068
+2354 397 14107
+2355 397 28657
+2356 397 20415
+2357 397 31919
+2362 397 44816
+2368 397 45373
+2375 397 27220
+2383 397 703
+2392 397 6707
+2402 397 49963
+2413 397 57247
+2491 397 4303
+2908 397 27852657
+344 398 1
+346 398 1
+383 398 1
+1106 398 49142
+1110 398 49142
+1118 398 2
+1121 398 49142
+1245 398 49142
+1259 398 49142
+2183 398 1
+2187 398 8191
+2232 398 8191
+2353 398 8191
+2431 398 13310
+2436 398 49142
+2499 398 8191
+2909 398 27852657
+344 399 1
+345 399 1
+346 399 1
+349 399 2
+350 399 1
+384 399 65520
+1106 399 32761
+1109 399 32761
+1110 399 32761
+1113 399 1
+1114 399 32761
+1121 399 32761
+1124 399 1
+1125 399 1
+1130 399 32761
+1246 399 32760
+1260 399 32760
+2183 399 1
+2186 399 1
+2187 399 24572
+2190 399 49143
+2191 399 49142
+2196 399 49141
+2232 399 1
+2233 399 40950
+2353 399 1
+2354 399 40950
+2356 399 1
+2357 399 1
+2431 399 32761
+2432 399 28665
+2434 399 32761
+2435 399 32761
+2437 399 32760
+2440 399 32761
+2461 399 8190
+2499 399 1
+2500 399 40950
+2502 399 1
+2503 399 24572
+2910 399 27852657
+345 400 1
+350 400 65520
+1112 400 25680
+1113 400 3950
+1114 400 3950
+1125 400 58188
+1130 400 32986
+1131 400 44269
+1136 400 23397
+1141 400 36384
+1157 400 23397
+1162 400 36384
+1167 400 51755
+1192 400 59781
+1196 400 8062
+1345 400 13611
+1546 400 20802
+1825 400 21530
+1830 400 20131
+2185 400 16977
+2186 400 58522
+2189 400 42726
+2190 400 2598
+2191 400 17341
+2196 400 38977
+2197 400 14078
+2202 400 17501
+2208 400 29054
+2209 400 2319
+2210 400 8468
+2211 400 4421
+2212 400 4421
+2213 400 16347
+2214 400 32236
+2216 400 43411
+2217 400 11980
+2218 400 52987
+2219 400 20668
+2220 400 12409
+2221 400 7988
+2258 400 50284
+2259 400 20142
+2260 400 55003
+2262 400 63211
+2263 400 65361
+2264 400 29236
+2265 400 44853
+2266 400 40180
+2275 400 32192
+2313 400 64429
+2314 400 44358
+2315 400 28973
+2316 400 29538
+2318 400 62429
+2319 400 24261
+2320 400 37776
+2321 400 11512
+2330 400 60814
+2340 400 28622
+2379 400 38283
+2380 400 24963
+2381 400 28286
+2382 400 58827
+2383 400 63826
+2385 400 25184
+2386 400 59983
+2387 400 40915
+2396 400 48146
+2406 400 7629
+2417 400 44528
+2457 400 26808
+2458 400 1418
+2459 400 59306
+2460 400 59945
+2461 400 36802
+2462 400 64996
+2463 400 22547
+2464 400 20007
+2465 400 63362
+2474 400 59656
+2484 400 9249
+2495 400 41862
+2507 400 8239
+2911 400 27852657
+346 401 1
+347 401 1
+348 401 1
+349 401 1
+350 401 1
+1110 401 54601
+1111 401 54601
+1112 401 54601
+1113 401 54601
+1114 401 54601
+1125 401 54601
+1126 401 10920
+1127 401 10920
+1128 401 10920
+1129 401 10920
+1130 401 10920
+1131 401 10920
+1543 401 60062
+1544 401 22316
+1545 401 65047
+1546 401 65047
+1822 401 60062
+1823 401 22316
+1824 401 65047
+1825 401 65047
+1827 401 27775
+1828 401 10920
+1829 401 54127
+1830 401 32761
+1899 401 1
+1954 401 1
+1955 401 32762
+2020 401 1
+2021 401 32762
+2022 401 32762
+2178 401 65520
+2179 401 65520
+2180 401 17745
+2181 401 65461
+2182 401 65462
+2183 401 43681
+2184 401 7359
+2185 401 1603
+2186 401 1662
+2187 401 37765
+2188 401 1443
+2189 401 7616
+2190 401 57173
+2191 401 2276
+2192 401 7735
+2193 401 36934
+2194 401 43107
+2195 401 62635
+2196 401 50961
+2197 401 48686
+2260 401 24572
+2315 401 24572
+2316 401 44595
+2381 401 61427
+2382 401 28212
+2383 401 51872
+2457 401 35946
+2458 401 4565
+2459 401 12236
+2460 401 61952
+2461 401 15925
+2462 401 910
+2495 401 6144
+2507 401 47152
+2912 401 27852657
+347 402 1
+387 402 65520
+655 402 1
+656 402 1
+657 402 1
+658 402 1
+1111 402 49142
+1237 402 65519
+1238 402 65519
+1239 402 65519
+1245 402 16379
+1246 402 16379
+1249 402 32760
+1259 402 16379
+1260 402 32758
+1261 402 16379
+1263 402 65520
+1268 402 32760
+1442 402 65519
+1443 402 65519
+1445 402 65519
+1448 402 65519
+1465 402 16379
+1466 402 32758
+1467 402 16379
+1474 402 32760
+1720 402 65519
+1721 402 65519
+1723 402 65519
+1726 402 65519
+1729 402 65519
+1730 402 32757
+1731 402 32759
+1732 402 32759
+1733 402 32759
+2080 402 65520
+2081 402 65520
+2083 402 65520
+2086 402 65520
+2089 402 21840
+2090 402 38219
+2091 402 38220
+2092 402 38220
+2093 402 38220
+2104 402 21840
+2105 402 65519
+2106 402 65520
+2107 402 65520
+2108 402 38219
+2113 402 65520
+2188 402 21841
+2232 402 49140
+2233 402 62790
+2234 402 35490
+2236 402 16379
+2241 402 16380
+2287 402 49140
+2288 402 62790
+2289 402 35490
+2290 402 21840
+2296 402 16380
+2353 402 49140
+2354 402 62791
+2355 402 35491
+2356 402 21841
+2357 402 8190
+2431 402 28321
+2432 402 39579
+2433 402 5799
+2434 402 65519
+2435 402 15353
+2440 402 32757
+2470 402 57331
+2480 402 57331
+2491 402 57331
+2503 402 18085
+2913 402 27852657
+348 403 1
+1112 403 8189
+1113 403 49138
+1114 403 49138
+1125 403 44016
+1130 403 49663
+1131 403 54785
+1141 403 33716
+1162 403 33716
+1167 403 31729
+1192 403 33716
+1196 403 46171
+1345 403 8948
+1830 403 17248
+2189 403 47835
+2190 403 10955
+2191 403 55590
+2196 403 55747
+2197 403 61575
+2202 403 56745
+2208 403 34360
+2209 403 63325
+2210 403 2955
+2211 403 27899
+2212 403 27899
+2213 403 34375
+2214 403 23029
+2216 403 4959
+2217 403 26590
+2218 403 57368
+2219 403 12976
+2220 403 23514
+2221 403 61136
+2258 403 43053
+2259 403 5699
+2260 403 61879
+2262 403 30622
+2263 403 48071
+2264 403 21260
+2265 403 44949
+2266 403 47176
+2275 403 51561
+2313 403 33879
+2314 403 24261
+2315 403 32415
+2316 403 49894
+2318 403 55583
+2319 403 61973
+2320 403 21508
+2321 403 4464
+2330 403 49865
+2340 403 63825
+2379 403 41148
+2380 403 61612
+2381 403 9653
+2382 403 9197
+2383 403 63291
+2385 403 63102
+2386 403 9967
+2387 403 4920
+2396 403 36304
+2406 403 2953
+2417 403 4649
+2457 403 60264
+2458 403 17026
+2459 403 25655
+2460 403 51153
+2461 403 33072
+2462 403 60
+2463 403 8
+2464 403 24631
+2465 403 17651
+2474 403 2306
+2484 403 3854
+2495 403 18615
+2507 403 5578
+2914 403 27852657
+349 404 1
+350 404 1
+1112 404 21965
+1113 404 24572
+1114 404 24572
+1125 404 48671
+1130 404 52994
+1131 404 28895
+1141 404 31502
+1162 404 31502
+1167 404 57094
+1192 404 31502
+1196 404 49500
+1345 404 24373
+1830 404 41229
+2189 404 2398
+2190 404 6177
+2191 404 32374
+2196 404 60745
+2197 404 48097
+2202 404 17587
+2208 404 25412
+2209 404 34303
+2210 404 27893
+2211 404 24163
+2212 404 24163
+2213 404 58076
+2214 404 21289
+2216 404 18548
+2217 404 22298
+2218 404 7326
+2219 404 46384
+2220 404 48848
+2221 404 24685
+2258 404 27120
+2259 404 2701
+2260 404 32365
+2262 404 56419
+2263 404 64882
+2264 404 2984
+2265 404 55323
+2266 404 43625
+2275 404 18940
+2313 404 58718
+2314 404 19114
+2315 404 15272
+2316 404 36682
+2318 404 26839
+2319 404 15186
+2320 404 2836
+2321 404 8195
+2330 404 46082
+2340 404 27142
+2379 404 33908
+2380 404 38768
+2381 404 16905
+2382 404 28068
+2383 404 19726
+2385 404 62760
+2386 404 45267
+2387 404 52585
+2396 404 48652
+2406 404 42682
+2417 404 15540
+2457 404 26393
+2458 404 2011
+2459 404 8619
+2460 404 22783
+2461 404 46709
+2462 404 52353
+2463 404 40385
+2464 404 10257
+2465 404 36587
+2474 404 12580
+2484 404 62915
+2495 404 45133
+2507 404 33068
+2915 404 27852657
+350 405 1
+964 405 20208
+979 405 47236
+984 405 27028
+997 405 50531
+1030 405 23135
+1041 405 61425
+1114 405 10942
+1130 405 6454
+1268 405 29173
+1733 405 59071
+2091 405 14352
+2092 405 52498
+2093 405 5014
+2108 405 6454
+2113 405 14318
+2128 405 40077
+2154 405 6893
+2155 405 62299
+2160 405 59146
+2166 405 37352
+2173 405 37352
+2187 405 27023
+2188 405 26075
+2190 405 5545
+2191 405 44156
+2196 405 1671
+2202 405 26022
+2209 405 47401
+2217 405 10049
+2232 405 23737
+2233 405 381
+2234 405 19719
+2236 405 61956
+2241 405 36202
+2247 405 34239
+2254 405 29480
+2262 405 56162
+2271 405 46113
+2287 405 57128
+2288 405 60309
+2289 405 59879
+2290 405 28541
+2296 405 53773
+2302 405 2519
+2309 405 32035
+2317 405 19942
+2326 405 52402
+2336 405 6289
+2353 405 63909
+2354 405 21199
+2355 405 28972
+2356 405 47692
+2357 405 29641
+2368 405 52754
+2375 405 63453
+2383 405 43490
+2392 405 65218
+2402 405 42742
+2413 405 36453
+2431 405 37081
+2432 405 62608
+2433 405 60903
+2434 405 16727
+2435 405 58291
+2440 405 41710
+2446 405 46426
+2453 405 20941
+2461 405 4550
+2470 405 48521
+2480 405 59526
+2491 405 13998
+2503 405 2179
+2916 405 27852657
+351 406 1
+354 406 145
+355 406 144
+361 406 6890
+367 406 52007
+368 406 41032
+416 406 2422
+701 406 42056
+1828 406 10780
+1829 406 58612
+1830 406 58554
+1835 406 7003
+1836 406 25125
+1841 406 1148
+1847 406 47747
+1848 406 940
+1849 406 38532
+1850 406 42289
+1851 406 42289
+1852 406 25603
+1853 406 30908
+1855 406 33086
+1856 406 25360
+1857 406 48317
+1858 406 25873
+1859 406 37944
+1860 406 61176
+1897 406 46011
+1898 406 42075
+1899 406 44219
+1901 406 24593
+1902 406 34719
+1903 406 44949
+1904 406 2341
+1905 406 8321
+1914 406 12666
+1952 406 48286
+1953 406 49630
+1954 406 33712
+1955 406 9075
+1957 406 22702
+1958 406 41233
+1959 406 22021
+1960 406 59528
+1969 406 32058
+1979 406 19392
+2018 406 42561
+2019 406 50860
+2020 406 40866
+2021 406 32965
+2022 406 35588
+2024 406 57577
+2025 406 46180
+2026 406 42235
+2035 406 45043
+2045 406 17944
+2056 406 64073
+2379 406 27919
+2380 406 43689
+2381 406 53712
+2382 406 6220
+2383 406 21955
+2384 406 60662
+2385 406 61135
+2386 406 24300
+2387 406 7396
+2396 406 51763
+2406 406 29223
+2417 406 18450
+2495 406 22834
+2917 406 27852657
+352 407 1
+354 407 43681
+355 407 43681
+362 407 26301
+368 407 31288
+416 407 110
+1835 407 1179
+1836 407 18937
+1841 407 63096
+1848 407 37012
+1849 407 20171
+1850 407 6047
+1851 407 6047
+1852 407 29079
+1853 407 39113
+1855 407 16436
+1856 407 45823
+1857 407 22128
+1858 407 30601
+1859 407 24190
+1860 407 18143
+1897 407 661
+1898 407 45825
+1899 407 51569
+1901 407 47912
+1902 407 62187
+1903 407 33990
+1904 407 23429
+1905 407 46534
+1914 407 28391
+1952 407 3693
+1953 407 48533
+1954 407 976
+1955 407 976
+1957 407 10259
+1958 407 5443
+1959 407 34723
+1960 407 47773
+1969 407 45992
+1979 407 17601
+2018 407 28269
+2019 407 8879
+2020 407 12637
+2021 407 12637
+2022 407 12512
+2024 407 41504
+2025 407 33254
+2026 407 11511
+2035 407 9913
+2045 407 21413
+2056 407 3812
+2379 407 48641
+2380 407 30192
+2381 407 42606
+2382 407 42606
+2383 407 13970
+2384 407 22086
+2385 407 42800
+2386 407 28195
+2387 407 35762
+2396 407 31477
+2406 407 48664
+2417 407 41506
+2495 407 5756
+2918 407 27852657
+353 408 1
+354 408 58625
+355 408 58625
+362 408 28245
+368 408 24171
+416 408 49545
+1835 408 54563
+1836 408 13544
+1841 408 54384
+1847 408 29375
+1848 408 31792
+1849 408 11786
+1850 408 7696
+1851 408 7696
+1852 408 5764
+1853 408 40730
+1855 408 37618
+1856 408 8305
+1857 408 49063
+1858 408 60537
+1859 408 3678
+1860 408 61503
+1897 408 54817
+1898 408 50130
+1899 408 50130
+1901 408 22407
+1902 408 22514
+1903 408 29304
+1904 408 65233
+1905 408 21920
+1914 408 25938
+1952 408 36435
+1953 408 28447
+1954 408 28447
+1955 408 13062
+1957 408 59264
+1958 408 57187
+1959 408 26164
+1960 408 13226
+1969 408 31628
+1979 408 5690
+2018 408 43525
+2019 408 40806
+2020 408 40806
+2021 408 1112
+2022 408 52069
+2024 408 23603
+2025 408 6911
+2026 408 46448
+2035 408 10159
+2045 408 21236
+2056 408 15546
+2379 408 23623
+2380 408 11406
+2381 408 11406
+2382 408 20321
+2383 408 31812
+2384 408 29848
+2385 408 19325
+2386 408 60648
+2387 408 24053
+2396 408 28207
+2406 408 203
+2417 408 37931
+2495 408 51196
+2919 408 27852657
+354 409 1
+355 409 1
+1774 409 44539
+1801 409 44539
+1836 409 21504
+1881 409 62459
+1936 409 10052
+1994 409 34223
+1995 409 6670
+1996 409 6670
+2014 409 53439
+2022 409 6030
+2029 409 43037
+2031 409 38061
+2034 409 54123
+2035 409 54123
+2036 409 54123
+2037 409 23118
+2038 409 63806
+2039 409 44073
+2040 409 17582
+2043 409 27607
+2044 409 18527
+2045 409 18527
+2046 409 7129
+2047 409 18527
+2048 409 23118
+2049 409 63806
+2050 409 44073
+2051 409 17582
+2052 409 58127
+2054 409 27607
+2055 409 18527
+2056 409 18527
+2057 409 7129
+2058 409 37054
+2059 409 18527
+2344 409 11612
+2345 409 11612
+2346 409 10377
+2347 409 55750
+2348 409 44138
+2349 409 46204
+2350 409 51458
+2351 409 53296
+2352 409 9158
+2353 409 46204
+2354 409 51458
+2355 409 50131
+2356 409 63931
+2357 409 54773
+2358 409 46204
+2359 409 51458
+2360 409 28094
+2361 409 44666
+2362 409 42860
+2363 409 64360
+2366 409 61751
+2367 409 54722
+2368 409 60725
+2369 409 54554
+2373 409 34107
+2374 409 27078
+2375 409 33081
+2376 409 24020
+2377 409 56921
+2378 409 56921
+2379 409 12137
+2380 409 36593
+2382 409 44267
+2383 409 12480
+2384 409 5056
+2385 409 60329
+2386 409 11330
+2387 409 19930
+2388 409 61541
+2389 409 20476
+2390 409 41836
+2392 409 31301
+2393 409 56766
+2394 409 16864
+2395 409 13483
+2396 409 4873
+2397 409 50464
+2398 409 36902
+2399 409 37034
+2400 409 63216
+2401 409 36585
+2403 409 33687
+2404 409 51464
+2405 409 12207
+2406 409 3353
+2407 409 13281
+2408 409 28338
+2409 409 51283
+2410 409 1999
+2411 409 62200
+2412 409 44854
+2413 409 31952
+2415 409 37155
+2416 409 33002
+2417 409 59739
+2418 409 23884
+2419 409 7259
+2420 409 44442
+2487 409 63397
+2488 409 70
+2489 409 27966
+2490 409 39410
+2491 409 64491
+2492 409 44947
+2493 409 50444
+2494 409 20084
+2495 409 25702
+2496 409 62645
+2497 409 25937
+2498 409 20216
+2510 409 42173
+2920 409 27852657
+355 410 1
+2197 410 65520
+2921 410 27852657
+356 411 1
+361 411 1
+367 411 1
+701 411 1
+1141 411 24572
+1144 411 40949
+1162 411 24572
+1167 411 40949
+1192 411 24572
+1196 411 40949
+1557 411 36036
+1828 411 47641
+1829 411 5936
+1830 411 63263
+1848 411 21124
+1856 411 14477
+1898 411 8203
+1899 411 49534
+1901 411 26485
+1904 411 24680
+1905 411 24680
+1914 411 24680
+1952 411 30007
+1953 411 28222
+1954 411 29618
+1955 411 40445
+1958 411 21075
+1959 411 20428
+1960 411 20428
+1969 411 45108
+1979 411 20428
+2018 411 30007
+2019 411 28222
+2020 411 29618
+2021 411 40445
+2022 411 5608
+2024 411 21075
+2025 411 20428
+2026 411 20428
+2035 411 45108
+2045 411 40856
+2056 411 20428
+2178 411 57486
+2179 411 57486
+2180 411 33219
+2181 411 11230
+2182 411 19265
+2183 411 40004
+2184 411 51503
+2185 411 64857
+2186 411 45592
+2187 411 40004
+2188 411 51503
+2189 411 42822
+2190 411 35541
+2191 411 2234
+2192 411 50025
+2193 411 45242
+2194 411 10258
+2195 411 2084
+2196 411 41508
+2197 411 39274
+2200 411 56125
+2201 411 38641
+2202 411 51501
+2203 411 44557
+2207 411 47121
+2208 411 29637
+2209 411 42497
+2210 411 57364
+2211 411 17582
+2212 411 17582
+2213 411 30257
+2214 411 30834
+2216 411 28388
+2217 411 14384
+2218 411 33952
+2219 411 11825
+2220 411 37107
+2221 411 19525
+2258 411 42919
+2259 411 38310
+2260 411 30095
+2262 411 51143
+2263 411 54069
+2264 411 14180
+2265 411 56315
+2266 411 46151
+2275 411 26626
+2313 411 1136
+2314 411 46030
+2315 411 22167
+2316 411 5039
+2318 411 29475
+2319 411 9588
+2320 411 28030
+2321 411 37484
+2330 411 39297
+2340 411 12671
+2379 411 17503
+2380 411 9825
+2381 411 22960
+2382 411 42588
+2383 411 48177
+2385 411 56617
+2386 411 58104
+2387 411 50589
+2396 411 3073
+2406 411 24687
+2417 411 12016
+2457 411 57493
+2458 411 47462
+2459 411 15026
+2460 411 19529
+2461 411 18484
+2462 411 43402
+2463 411 12761
+2464 411 29831
+2465 411 45290
+2474 411 32745
+2484 411 14847
+2495 411 1649
+2507 411 58285
+2922 411 27852657
+357 412 1
+362 412 41549
+368 412 15522
+416 412 16766
+1835 412 39556
+1836 412 6657
+1841 412 10545
+1848 412 18691
+1849 412 6287
+1850 412 63909
+1851 412 63909
+1852 412 57476
+1853 412 5334
+1855 412 45923
+1856 412 1246
+1857 412 27362
+1858 412 15375
+1859 412 44405
+1860 412 46017
+1897 412 27467
+1898 412 6536
+1899 412 6536
+1901 412 46488
+1902 412 25503
+1903 412 62532
+1904 412 9052
+1905 412 8532
+1914 412 28036
+1952 412 19437
+1953 412 1015
+1954 412 1015
+1955 412 1015
+1957 412 47025
+1958 412 49522
+1959 412 29492
+1960 412 29743
+1969 412 27022
+1979 412 64507
+2018 412 60344
+2019 412 51990
+2020 412 51990
+2021 412 51990
+2022 412 43627
+2024 412 7476
+2025 412 33653
+2026 412 4189
+2035 412 33903
+2045 412 58802
+2056 412 59816
+2379 412 12204
+2380 412 54816
+2381 412 54816
+2382 412 54816
+2383 412 53118
+2384 412 23251
+2385 412 58632
+2386 412 14826
+2387 412 9681
+2396 412 51392
+2406 412 15863
+2417 412 43191
+2495 412 40577
+2923 412 27852657
+358 413 1
+365 413 65520
+372 413 1
+712 413 2
+863 413 1
+1149 413 24572
+1150 413 6
+1179 413 40949
+1180 413 65515
+1215 413 24572
+1216 413 6
+1410 413 30029
+1411 413 54595
+1678 413 10926
+1848 413 47379
+1856 413 29028
+1899 413 49123
+1901 413 63405
+1904 413 17703
+1905 413 17703
+1914 413 17703
+1952 413 58793
+1953 413 58793
+1954 413 42395
+1955 413 42395
+1958 413 29178
+1959 413 54384
+1960 413 54384
+1969 413 6566
+1979 413 54384
+2018 413 58793
+2019 413 58793
+2020 413 42395
+2021 413 42395
+2022 413 5900
+2024 413 29178
+2025 413 54384
+2026 413 54384
+2035 413 6566
+2045 413 43247
+2056 413 54384
+2202 413 22596
+2203 413 7709
+2204 413 1
+2207 413 50009
+2208 413 50009
+2209 413 30119
+2210 413 36152
+2211 413 50616
+2212 413 50615
+2213 413 24876
+2214 413 24876
+2216 413 12036
+2217 413 32958
+2218 413 53084
+2219 413 26665
+2220 413 10880
+2221 413 25786
+2258 413 11273
+2259 413 11273
+2260 413 33767
+2262 413 11974
+2263 413 9485
+2264 413 61684
+2265 413 58026
+2266 413 64425
+2275 413 20894
+2313 413 28889
+2314 413 28889
+2315 413 51383
+2316 413 51383
+2318 413 48759
+2319 413 40189
+2320 413 58345
+2321 413 52814
+2330 413 60261
+2340 413 39367
+2379 413 1753
+2380 413 1753
+2381 413 41661
+2382 413 41661
+2383 413 18333
+2385 413 27197
+2386 413 62343
+2387 413 9563
+2396 413 36865
+2406 413 19627
+2417 413 45782
+2457 413 43498
+2458 413 43498
+2459 413 24560
+2460 413 24560
+2461 413 4506
+2462 413 40228
+2463 413 7555
+2464 413 62085
+2465 413 42247
+2474 413 63845
+2484 413 27187
+2495 413 47816
+2507 413 34377
+2924 413 27852657
+359 414 1
+1125 414 46840
+1130 414 43137
+1131 414 61818
+1136 414 22233
+1141 414 51120
+1157 414 39567
+1162 414 10095
+1167 414 53485
+1192 414 59541
+1196 414 52505
+1345 414 41681
+1546 414 19960
+1825 414 46228
+1830 414 2479
+2185 414 21309
+2186 414 35091
+2189 414 23033
+2190 414 50852
+2191 414 45212
+2196 414 20058
+2197 414 3593
+2202 414 35095
+2208 414 19041
+2209 414 25233
+2210 414 7952
+2211 414 28430
+2212 414 28430
+2213 414 60933
+2214 414 57247
+2216 414 11790
+2217 414 9696
+2218 414 11280
+2219 414 56352
+2220 414 19074
+2221 414 56165
+2258 414 16681
+2259 414 43364
+2260 414 39958
+2262 414 3681
+2263 414 33152
+2264 414 28502
+2265 414 10502
+2266 414 60114
+2275 414 3949
+2313 414 24829
+2314 414 65258
+2315 414 51015
+2316 414 62510
+2318 414 38864
+2319 414 10729
+2320 414 58340
+2321 414 9446
+2330 414 12247
+2340 414 8298
+2379 414 30181
+2380 414 30269
+2381 414 63249
+2382 414 22608
+2383 414 44030
+2385 414 54392
+2386 414 40612
+2387 414 8603
+2396 414 23712
+2406 414 44961
+2417 414 36663
+2457 414 36433
+2458 414 21647
+2459 414 18012
+2460 414 9742
+2461 414 14660
+2462 414 19889
+2463 414 5775
+2464 414 22971
+2465 414 8560
+2474 414 48562
+2484 414 33441
+2495 414 55602
+2507 414 876
+2925 414 27852657
+359 415 1
+361 415 65520
+362 415 1
+695 415 644
+706 415 13571
+734 415 54280
+735 415 39051
+737 415 51717
+740 415 16766
+747 415 16766
+756 415 16766
+786 415 36501
+787 415 5328
+788 415 55620
+789 415 61274
+792 415 47722
+793 415 45994
+801 415 45994
+810 415 62760
+820 415 45994
+851 415 36501
+852 415 5328
+853 415 55620
+854 415 61274
+855 415 26550
+857 415 47722
+858 415 45994
+866 415 45994
+875 415 62760
+885 415 26467
+896 415 45994
+1791 415 41252
+1792 415 41252
+1793 415 41252
+1794 415 41252
+1795 415 41252
+1796 415 41252
+1800 415 41252
+1806 415 9774
+1807 415 14405
+1811 415 50682
+1812 415 50682
+1813 415 60456
+1814 415 18047
+1815 415 53752
+1816 415 53752
+1844 415 22725
+1845 415 62912
+1847 415 34417
+1848 415 49042
+1849 415 65262
+1850 415 61800
+1851 415 61707
+1859 415 7955
+1889 415 12597
+1890 415 48852
+1891 415 32295
+1893 415 54739
+1894 415 33300
+1895 415 56015
+1896 415 20207
+1904 415 20178
+1913 415 12223
+1944 415 36917
+1945 415 7651
+1946 415 56615
+1947 415 25018
+1949 415 6553
+1950 415 14742
+1951 415 22927
+1959 415 1613
+1968 415 23904
+1978 415 11681
+2010 415 16525
+2011 415 27931
+2012 415 64986
+2013 415 25033
+2014 415 24622
+2016 415 51662
+2017 415 29699
+2025 415 17627
+2034 415 41579
+2044 415 53206
+2055 415 41525
+2371 415 19763
+2372 415 45652
+2373 415 32747
+2374 415 32748
+2375 415 24651
+2376 415 47353
+2377 415 45437
+2378 415 11603
+2386 415 49649
+2395 415 49015
+2405 415 12636
+2416 415 3371
+2494 415 4566
+2926 415 27852657
+360 416 1
+361 416 1
+406 416 1
+1161 416 49142
+1162 416 49142
+1165 416 2
+1166 416 49142
+1306 416 49142
+1311 416 49142
+2208 416 1
+2209 416 8191
+2254 416 8191
+2375 416 8191
+2453 416 13310
+2454 416 49142
+2506 416 8191
+2927 416 27852657
+360 417 1
+361 417 1
+366 417 1
+367 417 1
+414 417 1
+1161 417 32761
+1162 417 32761
+1166 417 32761
+1191 417 32761
+1192 417 32761
+1195 417 32761
+1339 417 32761
+1344 417 32761
+2208 417 1
+2209 417 24572
+2216 417 1
+2217 417 24572
+2254 417 1
+2262 417 24572
+2375 417 1
+2383 417 24572
+2453 417 32761
+2461 417 4096
+2462 417 32761
+2506 417 1
+2507 417 24572
+2928 417 27852657
+361 418 1
+1125 418 46840
+1130 418 43137
+1131 418 61818
+1141 418 7832
+1162 418 49662
+1167 418 57777
+1192 418 59541
+1196 418 54024
+1345 418 51190
+1830 418 48707
+2189 418 2930
+2190 418 54849
+2191 418 18779
+2196 418 60528
+2197 418 37952
+2202 418 21566
+2208 418 21936
+2209 418 13040
+2210 418 56248
+2211 418 30299
+2212 418 30299
+2213 418 35332
+2214 418 60279
+2216 418 35675
+2217 418 56993
+2218 418 21191
+2219 418 44012
+2220 418 5762
+2221 418 40984
+2258 418 31957
+2259 418 63802
+2260 418 56848
+2262 418 6552
+2263 418 37626
+2264 418 53219
+2265 418 59022
+2266 418 9551
+2275 418 34088
+2313 418 48012
+2314 418 13167
+2315 418 36070
+2316 418 6691
+2318 418 45361
+2319 418 41762
+2320 418 16508
+2321 418 35250
+2330 418 51033
+2340 418 16945
+2379 418 56627
+2380 418 1318
+2381 418 33611
+2382 418 12360
+2383 418 58385
+2385 418 35138
+2386 418 1095
+2387 418 6078
+2396 418 11195
+2406 418 16248
+2417 418 64824
+2457 418 14279
+2458 418 55585
+2459 418 63354
+2460 418 325
+2461 418 28842
+2462 418 41100
+2463 418 4281
+2464 418 32446
+2465 418 63687
+2474 418 56606
+2484 418 28447
+2495 418 27747
+2507 418 50214
+2929 418 27852657
+362 419 1
+368 419 11054
+416 419 2581
+1835 419 60281
+1836 419 31692
+1841 419 60533
+1848 419 52815
+1849 419 22206
+1850 419 27514
+1851 419 27514
+1852 419 36739
+1853 419 13864
+1855 419 31241
+1856 419 6264
+1857 419 6349
+1858 419 41469
+1859 419 38479
+1860 419 10965
+1897 419 22859
+1898 419 25751
+1899 419 25751
+1901 419 43757
+1902 419 61734
+1903 419 42359
+1904 419 23695
+1905 419 11967
+1914 419 1002
+1952 419 27673
+1953 419 37872
+1954 419 37872
+1955 419 37872
+1957 419 8866
+1958 419 28285
+1959 419 880
+1960 419 39746
+1969 419 27386
+1979 419 26384
+2018 419 5099
+2019 419 31562
+2020 419 31562
+2021 419 31562
+2022 419 53481
+2024 419 8400
+2025 419 41876
+2026 419 25263
+2035 419 26144
+2045 419 4767
+2056 419 43904
+2379 419 22260
+2380 419 23857
+2381 419 23857
+2382 419 23857
+2383 419 40169
+2384 419 54272
+2385 419 12977
+2386 419 32897
+2387 419 32922
+2396 419 34267
+2406 419 10488
+2417 419 60348
+2495 419 9628
+2930 419 27852657
+363 420 1
+364 420 1
+365 420 1
+370 420 39112
+373 420 26409
+418 420 18065
+425 420 50631
+452 420 12209
+453 420 23695
+462 420 64994
+530 420 18065
+538 420 29937
+578 420 2151
+615 420 61001
+616 420 49039
+617 420 36830
+618 420 1456
+627 420 57710
+637 420 55032
+707 420 64660
+716 420 64625
+757 420 55994
+821 420 58388
+866 420 13112
+867 420 48135
+876 420 43950
+886 420 6927
+897 420 3571
+1849 420 31718
+1850 420 41530
+1851 420 26738
+1852 420 6933
+1853 420 6933
+1855 420 49317
+1856 420 49317
+1857 420 40025
+1858 420 12050
+1859 420 4102
+1860 420 13534
+1897 420 35061
+1898 420 35061
+1899 420 35061
+1901 420 40187
+1902 420 24831
+1903 420 59044
+1904 420 6564
+1905 420 54488
+1914 420 18133
+1952 420 35732
+1953 420 35732
+1954 420 35732
+1955 420 35732
+1957 420 2136
+1958 420 38290
+1959 420 19917
+1960 420 58462
+1969 420 8819
+1979 420 51554
+2018 420 43432
+2019 420 43432
+2020 420 43432
+2021 420 43432
+2022 420 43432
+2024 420 15430
+2025 420 17035
+2026 420 23508
+2035 420 16204
+2045 420 18614
+2056 420 4128
+2379 420 1159
+2380 420 1159
+2381 420 1159
+2382 420 1159
+2383 420 1159
+2384 420 1159
+2385 420 15070
+2386 420 24444
+2387 420 41295
+2396 420 11049
+2406 420 16371
+2417 420 43372
+2495 420 19751
+2931 420 27852657
+364 421 1
+1178 421 38841
+1179 421 38841
+1210 421 58174
+1215 421 4757
+1219 421 7347
+1360 421 41083
+1369 421 24500
+1413 421 50172
+1414 421 56977
+1423 421 39824
+1572 421 41083
+1581 421 53440
+1635 421 15012
+1678 421 46937
+1679 421 60234
+1680 421 10062
+1681 421 32894
+1690 421 51577
+1700 421 10868
+1851 421 42392
+1860 421 16987
+1914 421 41351
+1979 421 34565
+2025 421 37045
+2026 421 1211
+2035 421 44228
+2045 421 11243
+2056 421 53067
+2202 421 42528
+2208 421 32770
+2209 421 9565
+2210 421 13828
+2211 421 10296
+2212 421 59837
+2213 421 21590
+2214 421 14119
+2216 421 52358
+2217 421 35068
+2218 421 42225
+2219 421 51499
+2220 421 56967
+2221 421 45544
+2258 421 49485
+2259 421 48161
+2260 421 48161
+2262 421 30182
+2263 421 6088
+2264 421 27548
+2265 421 12618
+2266 421 61764
+2275 421 9678
+2313 421 56792
+2314 421 33273
+2315 421 33273
+2316 421 53688
+2318 421 20152
+2319 421 4564
+2320 421 27427
+2321 421 12068
+2330 421 29649
+2340 421 23716
+2379 421 24110
+2380 421 47610
+2381 421 47610
+2382 421 2363
+2383 421 58535
+2385 421 27608
+2386 421 31698
+2387 421 59326
+2396 421 16227
+2406 421 6147
+2417 421 59966
+2457 421 12109
+2458 421 48443
+2459 421 48443
+2460 421 41419
+2461 421 13932
+2462 421 20234
+2463 421 4233
+2464 421 51970
+2465 421 26841
+2474 421 17088
+2484 421 28745
+2495 421 43269
+2507 421 13749
+2932 421 27852657
+365 422 1
+1210 422 27665
+1215 422 60764
+1219 422 37856
+1360 422 18245
+1369 422 3680
+1413 422 17626
+1414 422 56466
+1423 422 25121
+1572 422 18245
+1581 422 39674
+1635 422 8400
+1678 422 9479
+1679 422 15434
+1680 422 63329
+1681 422 53532
+1690 422 44681
+1700 422 61402
+1851 422 4560
+1860 422 7989
+1914 422 58510
+1979 422 3153
+2025 422 33429
+2026 422 17948
+2035 422 54622
+2045 422 42862
+2056 422 35590
+2202 422 39852
+2209 422 17017
+2210 422 64054
+2211 422 3840
+2212 422 56667
+2213 422 61502
+2214 422 41770
+2216 422 31666
+2217 422 33877
+2218 422 18098
+2219 422 56038
+2220 422 10397
+2221 422 27793
+2258 422 33885
+2259 422 55602
+2260 422 55602
+2262 422 57693
+2263 422 48227
+2264 422 44504
+2265 422 30778
+2266 422 32233
+2275 422 35346
+2313 422 6381
+2314 422 54898
+2315 422 54898
+2316 422 54898
+2318 422 44796
+2319 422 25096
+2320 422 42489
+2321 422 5561
+2330 422 49519
+2340 422 25671
+2379 422 6008
+2380 422 43168
+2381 422 43168
+2382 422 43168
+2383 422 49214
+2385 422 38225
+2386 422 40164
+2387 422 6615
+2396 422 29682
+2406 422 65158
+2417 422 25450
+2457 422 43011
+2458 422 17825
+2459 422 17825
+2460 422 17825
+2461 422 20295
+2462 422 19533
+2463 422 15629
+2464 422 29345
+2465 422 21389
+2474 422 22386
+2484 422 65112
+2495 422 55053
+2507 422 39384
+2933 422 27852657
+366 423 1
+367 423 1
+414 423 1
+1191 423 49142
+1192 423 49142
+1194 423 2
+1195 423 49142
+1339 423 49142
+1344 423 49142
+2216 423 1
+2217 423 8191
+2262 423 8191
+2383 423 8191
+2461 423 13310
+2462 423 49142
+2507 423 8191
+2934 423 27852657
+367 424 1
+1125 424 20208
+1130 424 47236
+1131 424 27028
+1141 424 50531
+1162 424 23135
+1167 424 61425
+1192 424 10942
+1196 424 6454
+1345 424 29173
+1830 424 59071
+2189 424 14352
+2190 424 52498
+2191 424 5014
+2196 424 6454
+2197 424 14318
+2202 424 40077
+2208 424 6893
+2209 424 62299
+2210 424 59146
+2211 424 37352
+2212 424 37352
+2213 424 27023
+2214 424 26075
+2216 424 5545
+2217 424 44156
+2218 424 1671
+2219 424 26022
+2220 424 47401
+2221 424 10049
+2258 424 23737
+2259 424 381
+2260 424 19719
+2262 424 61956
+2263 424 36202
+2264 424 34239
+2265 424 29480
+2266 424 56162
+2275 424 46113
+2313 424 57128
+2314 424 60309
+2315 424 59879
+2316 424 28541
+2318 424 53773
+2319 424 2519
+2320 424 32035
+2321 424 19942
+2330 424 52402
+2340 424 6289
+2379 424 63909
+2380 424 21199
+2381 424 28972
+2382 424 47692
+2383 424 29641
+2385 424 52754
+2386 424 63453
+2387 424 43490
+2396 424 65218
+2406 424 42742
+2417 424 36453
+2457 424 37081
+2458 424 62608
+2459 424 60903
+2460 424 16727
+2461 424 58291
+2462 424 41710
+2463 424 46426
+2464 424 20941
+2465 424 4550
+2474 424 48521
+2484 424 59526
+2495 424 13998
+2507 424 2179
+2935 424 27852657
+368 425 1
+423 425 46340
+442 425 61091
+450 425 54752
+459 425 8412
+535 425 5354
+575 425 42267
+594 425 60089
+600 425 44762
+607 425 49192
+615 425 857
+624 425 4187
+634 425 35853
+713 425 51035
+754 425 41233
+818 425 61375
+856 425 46021
+864 425 42880
+873 425 40427
+883 425 16879
+894 425 56878
+1801 425 4979
+1807 425 3450
+1814 425 3450
+1831 425 63538
+1832 425 63538
+1834 425 2205
+1835 425 2205
+1836 425 4120
+1842 425 11164
+1849 425 16323
+1857 425 52590
+1876 425 43103
+1877 425 43103
+1878 425 43103
+1880 425 61323
+1881 425 32477
+1887 425 45765
+1894 425 56187
+1902 425 5271
+1911 425 38003
+1931 425 63778
+1932 425 63778
+1933 425 63778
+1934 425 63778
+1936 425 39503
+1942 425 60987
+1949 425 8597
+1957 425 61797
+1966 425 19635
+1976 425 53045
+1997 425 9947
+1998 425 9947
+1999 425 9947
+2000 425 9947
+2001 425 9947
+2008 425 2529
+2015 425 9125
+2023 425 31728
+2032 425 56512
+2042 425 52678
+2053 425 32237
+2358 425 17842
+2359 425 17842
+2360 425 17842
+2361 425 17842
+2362 425 17842
+2363 425 17842
+2369 425 16334
+2376 425 22889
+2384 425 29472
+2393 425 51527
+2403 425 30499
+2414 425 54740
+2492 425 31304
+2936 425 27852657
+369 426 1
+372 426 1
+712 426 1
+1410 426 54601
+1411 426 54601
+1678 426 10920
+1848 426 38901
+1856 426 28666
+1901 426 40980
+1904 426 3285
+1905 426 3285
+1914 426 3285
+1952 426 45842
+1953 426 45842
+1954 426 45842
+1955 426 45842
+1958 426 42535
+1959 426 38957
+1960 426 38957
+1969 426 42242
+1979 426 38957
+2018 426 45842
+2019 426 45842
+2020 426 45842
+2021 426 45842
+2022 426 45842
+2024 426 42535
+2025 426 38957
+2026 426 38957
+2035 426 42242
+2045 426 12393
+2056 426 38957
+2207 426 21831
+2208 426 21831
+2209 426 9289
+2210 426 9289
+2213 426 22893
+2214 426 22893
+2216 426 21602
+2217 426 9316
+2218 426 9316
+2220 426 55860
+2221 426 55860
+2258 426 8871
+2259 426 8871
+2260 426 8871
+2262 426 49851
+2263 426 49851
+2265 426 34308
+2266 426 55774
+2275 426 47690
+2313 426 61030
+2314 426 61030
+2315 426 61030
+2316 426 61030
+2318 426 63777
+2319 426 58647
+2320 426 40036
+2321 426 59531
+2330 426 55339
+2340 426 7649
+2379 426 9366
+2380 426 9366
+2381 426 9366
+2382 426 9366
+2383 426 9366
+2385 426 44549
+2386 426 10118
+2387 426 27959
+2396 426 49468
+2406 426 42675
+2417 426 35026
+2457 426 2632
+2458 426 2632
+2459 426 2632
+2460 426 2632
+2461 426 2632
+2462 426 2632
+2464 426 49978
+2465 426 31392
+2474 426 33092
+2484 426 59030
+2495 426 13709
+2507 426 60908
+2937 426 27852657
+370 427 1
+373 427 65520
+418 427 19564
+425 427 34553
+452 427 3054
+453 427 35516
+462 427 962
+530 427 2437
+538 427 12492
+578 427 47199
+616 427 158
+617 427 27163
+618 427 65043
+627 427 42951
+637 427 62235
+707 427 55965
+716 427 34419
+757 427 54979
+821 427 62432
+867 427 20529
+876 427 65094
+886 427 30005
+897 427 29808
+1850 427 24352
+1851 427 40940
+1852 427 19610
+1853 427 19610
+1855 427 44291
+1856 427 44291
+1857 427 44291
+1858 427 42662
+1859 427 34816
+1860 427 24153
+1897 427 21231
+1898 427 21231
+1899 427 21231
+1901 427 47707
+1902 427 47707
+1903 427 49719
+1904 427 17309
+1905 427 11750
+1914 427 48676
+1952 427 56688
+1953 427 56688
+1954 427 56688
+1955 427 56688
+1957 427 47584
+1958 427 32152
+1959 427 31115
+1960 427 27435
+1969 427 24649
+1979 427 31783
+2018 427 55408
+2019 427 55408
+2020 427 55408
+2021 427 55408
+2022 427 55408
+2024 427 6387
+2025 427 37178
+2026 427 14066
+2035 427 37688
+2045 427 17012
+2056 427 56760
+2379 427 49331
+2380 427 49331
+2381 427 49331
+2382 427 49331
+2383 427 49331
+2384 427 49331
+2385 427 35052
+2386 427 63137
+2387 427 16011
+2396 427 52709
+2406 427 63690
+2417 427 10738
+2495 427 56864
+2938 427 27852657
+371 428 1
+2387 428 65520
+2939 428 27852657
+372 429 1
+1215 429 60764
+1369 429 29970
+1413 429 6498
+1414 429 55492
+1423 429 25522
+1581 429 25997
+1635 429 10864
+1678 429 33539
+1679 429 40509
+1680 429 34011
+1681 429 10676
+1690 429 20737
+1700 429 35395
+1860 429 17112
+1914 429 38543
+1979 429 52050
+2025 429 8083
+2026 429 33374
+2035 429 37826
+2045 429 45545
+2056 429 28890
+2202 429 28366
+2209 429 17926
+2210 429 48106
+2211 429 28633
+2212 429 28633
+2213 429 32421
+2214 429 59272
+2216 429 57720
+2217 429 11259
+2218 429 43572
+2219 429 20604
+2220 429 26860
+2221 429 14028
+2258 429 41716
+2259 429 45273
+2260 429 45273
+2262 429 40997
+2263 429 32613
+2264 429 31004
+2265 429 45282
+2266 429 21315
+2275 429 60681
+2313 429 21002
+2314 429 32572
+2315 429 32572
+2316 429 32572
+2318 429 47173
+2319 429 49778
+2320 429 12048
+2321 429 50569
+2330 429 58078
+2340 429 22165
+2379 429 57804
+2380 429 29113
+2381 429 29113
+2382 429 29113
+2383 429 15181
+2385 429 56527
+2386 429 7445
+2387 429 5348
+2396 429 36029
+2406 429 40165
+2417 429 24289
+2457 429 2278
+2458 429 65300
+2459 429 65300
+2460 429 65300
+2461 429 47189
+2462 429 38209
+2463 429 22966
+2464 429 18197
+2465 429 15171
+2474 429 14075
+2484 429 10958
+2495 429 65058
+2507 429 24318
+2940 429 27852657
+374 430 1
+375 430 1
+381 430 57447
+382 430 5371
+386 430 5370
+427 430 9596
+431 430 64265
+440 430 48768
+448 430 48768
+457 430 48768
+540 430 18615
+541 430 18615
+542 430 28211
+543 430 31676
+554 430 23133
+559 430 4960
+565 430 4960
+573 430 53728
+622 430 4960
+719 430 18615
+720 430 18615
+721 430 28211
+722 430 31676
+725 430 31676
+731 430 23133
+736 430 4960
+743 430 4960
+752 430 53728
+806 430 9920
+871 430 4960
+1227 430 30878
+1228 430 30878
+1229 430 64188
+1230 430 19977
+1231 430 54620
+1232 430 13564
+1233 430 3620
+1234 430 45713
+1235 430 56614
+1241 430 13564
+1242 430 3620
+1243 430 7723
+1244 430 9512
+1248 430 18419
+1255 430 13564
+1256 430 3620
+1257 430 37901
+1258 430 46977
+1262 430 7942
+1267 430 55044
+1275 430 14312
+1276 430 49012
+1280 430 1793
+1285 430 30625
+1300 430 28171
+1301 430 62871
+1305 430 15652
+1310 430 62786
+1316 430 64681
+1323 430 64681
+1332 430 40375
+1333 430 48376
+1334 430 52476
+1338 430 5257
+1343 430 21570
+1349 430 6447
+1356 430 20600
+1364 430 21440
+1376 430 11441
+1377 430 19442
+1378 430 5360
+1383 430 54427
+1388 430 19531
+1394 430 36625
+1401 430 63246
+1409 430 30822
+1418 430 9382
+1588 430 34485
+1589 430 42486
+1590 430 28404
+1591 430 65191
+1600 430 64867
+1606 430 44381
+1613 430 27402
+1621 430 38793
+1630 430 54027
+1685 430 44645
+1867 430 32798
+1868 430 42089
+1869 430 33041
+1870 430 26134
+1874 430 15619
+1885 430 505
+1892 430 11974
+1900 430 13127
+1909 430 9511
+1964 430 30639
+2030 430 51515
+2228 430 39149
+2229 430 45662
+2230 430 14070
+2231 430 18649
+2235 430 17438
+2240 430 32997
+2246 430 12696
+2253 430 13413
+2261 430 36863
+2270 430 3061
+2325 430 62788
+2391 430 59003
+2469 430 61319
+2941 430 27852657
+375 431 1
+2352 431 65520
+2942 431 27852657
+376 432 1
+377 432 65520
+378 432 65519
+379 432 65520
+380 432 65519
+381 432 65519
+382 432 65520
+384 432 65519
+385 432 65519
+386 432 65519
+387 432 65520
+1236 432 54601
+1238 432 10920
+1239 432 21840
+1240 432 10920
+1242 432 21840
+1243 432 21840
+1244 432 10920
+1246 432 21840
+1247 432 21840
+1248 432 21840
+1249 432 10920
+1250 432 54601
+1251 432 10920
+1253 432 21840
+1254 432 10920
+1258 432 54601
+1260 432 21840
+1261 432 21840
+1263 432 10920
+1267 432 43681
+1268 432 54601
+1269 432 54601
+1588 432 54603
+1589 432 12821
+1590 432 47242
+1591 432 47242
+1867 432 54603
+1868 432 12821
+1869 432 47242
+1870 432 47242
+1872 432 1898
+1873 432 21837
+1874 432 47241
+1875 432 65520
+1908 432 29123
+1963 432 29123
+1964 432 10924
+2029 432 29123
+2030 432 10924
+2031 432 10924
+2222 432 47776
+2223 432 65518
+2224 432 17742
+2225 432 53235
+2226 432 17505
+2227 432 65284
+2228 432 39586
+2229 432 2135
+2230 432 30981
+2231 432 31218
+2232 432 13650
+2233 432 17148
+2234 432 11809
+2235 432 13472
+2236 432 47775
+2237 432 13650
+2238 432 47181
+2239 432 41842
+2240 432 55790
+2241 432 6826
+2242 432 24571
+2269 432 55515
+2324 432 55515
+2325 432 51882
+2390 432 18658
+2391 432 53695
+2392 432 42774
+2466 432 23206
+2467 432 41692
+2468 432 47122
+2469 432 34518
+2470 432 15924
+2471 432 50733
+2496 432 59382
+2508 432 55914
+2943 432 27852657
+377 433 1
+952 433 41849
+979 433 2444
+984 433 2444
+991 433 43336
+993 433 22185
+997 433 43336
+1041 433 54572
+1103 433 8184
+1130 433 32135
+1238 433 31954
+1240 433 49202
+1268 433 23757
+1443 433 31047
+1446 433 901
+1450 433 64620
+1721 433 27047
+1724 433 34562
+1728 433 30959
+1733 433 34562
+2081 433 31271
+2084 433 30069
+2087 433 12882
+2088 433 48334
+2091 433 17259
+2092 433 1639
+2093 433 18826
+2108 433 24449
+2113 433 15832
+2128 433 21458
+2154 433 47871
+2155 433 60961
+2160 433 24459
+2166 433 34271
+2173 433 34271
+2187 433 33481
+2188 433 33509
+2190 433 63690
+2191 433 18017
+2196 433 1943
+2202 433 56986
+2209 433 46034
+2217 433 11763
+2232 433 10243
+2233 433 11510
+2234 433 60360
+2236 433 4495
+2241 433 49980
+2247 433 31161
+2254 433 45012
+2262 433 38056
+2271 433 26293
+2287 433 27784
+2288 433 26029
+2289 433 11083
+2290 433 40170
+2296 433 2915
+2302 433 48109
+2309 433 9433
+2317 433 59380
+2326 433 20807
+2336 433 60035
+2353 433 29070
+2354 433 54154
+2355 433 20479
+2356 433 52046
+2357 433 50908
+2368 433 11901
+2375 433 29632
+2383 433 56537
+2392 433 29448
+2402 433 4609
+2413 433 10095
+2431 433 1537
+2432 433 7316
+2433 433 9346
+2434 433 1152
+2435 433 3424
+2440 433 34183
+2446 433 60625
+2453 433 7378
+2461 433 36670
+2470 433 49399
+2480 433 8778
+2491 433 9674
+2503 433 15957
+2944 433 27852657
+378 434 1
+379 434 1
+388 434 1
+389 434 1
+483 434 1
+484 434 1
+487 434 1
+1865 434 32761
+1866 434 32761
+1920 434 32761
+1921 434 32761
+1924 434 32761
+1986 434 32761
+1987 434 32761
+1990 434 32761
+1994 434 32761
+2347 434 24572
+2348 434 24572
+2350 434 1
+2351 434 24572
+2354 434 1
+2355 434 24572
+2359 434 1
+2360 434 24572
+2488 434 32761
+2489 434 4096
+2945 434 27852657
+379 435 1
+1247 435 22854
+1248 435 2228
+1249 435 2228
+1263 435 41784
+1268 435 17814
+1269 435 43779
+1273 435 40284
+1276 435 48634
+1281 435 51211
+1301 435 23397
+1306 435 10927
+1312 435 21655
+1339 435 34324
+1345 435 37670
+1375 435 36100
+1390 435 40168
+1587 435 36100
+1591 435 50223
+1866 435 10752
+1870 435 10778
+1875 435 23360
+2227 435 8695
+2230 435 12474
+2231 435 45324
+2234 435 859
+2235 435 26824
+2236 435 58982
+2241 435 27005
+2242 435 45692
+2247 435 30461
+2253 435 878
+2254 435 18948
+2255 435 62254
+2256 435 29740
+2257 435 29740
+2258 435 58542
+2259 435 13241
+2261 435 59075
+2262 435 28303
+2263 435 3232
+2264 435 19425
+2265 435 64737
+2266 435 34997
+2267 435 49830
+2268 435 39583
+2269 435 3967
+2271 435 53632
+2272 435 26217
+2273 435 47004
+2274 435 38899
+2275 435 10028
+2276 435 40552
+2322 435 59706
+2323 435 20057
+2324 435 12493
+2325 435 26413
+2327 435 14686
+2328 435 57787
+2329 435 56239
+2330 435 57185
+2331 435 48531
+2341 435 7979
+2388 435 2150
+2389 435 47244
+2390 435 14585
+2391 435 38867
+2392 435 56919
+2394 435 6618
+2395 435 27426
+2396 435 37935
+2397 435 16450
+2407 435 12311
+2418 435 4332
+2466 435 39456
+2467 435 48184
+2468 435 65303
+2469 435 57709
+2470 435 25755
+2471 435 12331
+2472 435 12609
+2473 435 58451
+2474 435 3803
+2475 435 61439
+2485 435 46395
+2496 435 5939
+2508 435 2263
+2946 435 27852657
+380 436 1
+381 436 55177
+382 436 55177
+384 436 1
+385 436 40233
+386 436 55177
+1239 436 65518
+1240 436 65518
+1242 436 58622
+1243 436 62070
+1244 436 62073
+1246 436 58622
+1247 436 7757
+1248 436 573
+1249 436 4021
+1257 436 14868
+1258 436 14868
+1261 436 14073
+1262 436 47982
+1263 436 19897
+1265 436 6899
+1266 436 6316
+1267 436 47409
+1268 436 27731
+1269 436 11855
+1873 436 65415
+1874 436 33810
+1875 436 33810
+1908 436 48619
+1910 436 28544
+1913 436 39771
+1914 436 39771
+1915 436 39771
+1961 436 43947
+1962 436 43947
+1963 436 27045
+1964 436 45796
+1967 436 22650
+1968 436 45447
+1969 436 45447
+1970 436 19697
+1980 436 45447
+2027 436 43947
+2028 436 43947
+2029 436 27045
+2030 436 45796
+2031 436 45796
+2033 436 22650
+2034 436 45447
+2035 436 45447
+2036 436 19697
+2046 436 25373
+2057 436 45447
+2223 436 3887
+2224 436 3887
+2225 436 10881
+2226 436 38264
+2227 436 34377
+2228 436 37057
+2229 436 38563
+2230 436 55183
+2231 436 20806
+2232 436 25573
+2233 436 46544
+2234 436 15271
+2235 436 61992
+2236 436 43988
+2237 436 25573
+2238 436 29376
+2239 436 13887
+2240 436 42916
+2241 436 29181
+2242 436 50714
+2245 436 37822
+2246 436 422
+2247 436 39797
+2248 436 38933
+2252 436 6646
+2253 436 34767
+2254 436 8621
+2255 436 47132
+2256 436 6570
+2257 436 6570
+2258 436 23515
+2259 436 56569
+2261 436 1409
+2262 436 40784
+2263 436 41895
+2264 436 64237
+2265 436 63522
+2266 436 56952
+2267 436 39217
+2268 436 6750
+2269 436 55968
+2271 436 25930
+2272 436 64863
+2273 436 29445
+2274 436 34174
+2275 436 25692
+2276 436 34261
+2322 436 55543
+2323 436 23076
+2324 436 6773
+2325 436 16506
+2327 436 56596
+2328 436 34303
+2329 436 33721
+2330 436 3128
+2331 436 57139
+2341 436 22878
+2388 436 41989
+2389 436 2361
+2390 436 29340
+2391 436 58797
+2392 436 3803
+2394 436 49871
+2395 436 23348
+2396 436 21350
+2397 436 30912
+2407 436 6063
+2418 436 48706
+2466 436 11201
+2467 436 15549
+2468 436 14712
+2469 436 52034
+2470 436 30184
+2471 436 16732
+2472 436 22381
+2473 436 14433
+2474 436 60344
+2475 436 1799
+2485 436 23716
+2496 436 34674
+2508 436 54144
+2947 436 27852657
+381 437 1
+385 437 65513
+386 437 62893
+387 437 62893
+390 437 50271
+393 437 9143
+394 437 21765
+396 437 18275
+398 437 62626
+403 437 18275
+406 437 62626
+407 437 53833
+414 437 15380
+416 437 16295
+435 437 15301
+543 437 58322
+722 437 57564
+726 437 18627
+1869 437 53930
+1870 437 2807
+1873 437 3543
+1874 437 18186
+1875 437 37542
+1880 437 42322
+1881 437 55275
+1886 437 37835
+1892 437 41015
+1893 437 32385
+1894 437 18472
+1895 437 65026
+1896 437 65026
+1897 437 19852
+1898 437 63571
+1900 437 3600
+1901 437 15718
+1902 437 22132
+1903 437 50307
+1904 437 52559
+1905 437 53054
+1906 437 3957
+1907 437 37708
+1908 437 17122
+1910 437 55280
+1911 437 43004
+1912 437 36303
+1913 437 47494
+1914 437 36516
+1915 437 48983
+1961 437 49142
+1962 437 53598
+1963 437 29957
+1964 437 14197
+1966 437 44478
+1967 437 41890
+1968 437 17169
+1969 437 37100
+1970 437 48549
+1980 437 65087
+2027 437 62308
+2028 437 15332
+2029 437 47378
+2030 437 19325
+2031 437 7507
+2033 437 51866
+2034 437 11222
+2035 437 7023
+2036 437 7675
+2046 437 18033
+2057 437 18467
+2388 437 3107
+2389 437 51492
+2390 437 3931
+2391 437 52243
+2392 437 31488
+2393 437 13698
+2394 437 43871
+2395 437 57279
+2396 437 34186
+2397 437 8215
+2407 437 59343
+2418 437 59043
+2496 437 58291
+2948 437 27852657
+382 438 1
+387 438 65520
+1247 438 25680
+1248 438 3950
+1249 438 3950
+1263 438 58188
+1268 438 32986
+1269 438 44269
+1276 438 23397
+1281 438 36384
+1301 438 23397
+1306 438 36384
+1312 438 51755
+1339 438 59781
+1345 438 8062
+1390 438 13611
+1591 438 20802
+1870 438 21530
+1875 438 20131
+2230 438 16977
+2231 438 58522
+2234 438 42726
+2235 438 2598
+2236 438 17341
+2241 438 38977
+2242 438 14078
+2247 438 17501
+2253 438 29054
+2254 438 2319
+2255 438 8468
+2256 438 4421
+2257 438 4421
+2258 438 16347
+2259 438 32236
+2261 438 43411
+2262 438 11980
+2263 438 52987
+2264 438 20668
+2265 438 12409
+2266 438 7988
+2267 438 50284
+2268 438 20142
+2269 438 55003
+2271 438 63211
+2272 438 65361
+2273 438 29236
+2274 438 44853
+2275 438 40180
+2276 438 32192
+2322 438 64429
+2323 438 44358
+2324 438 28973
+2325 438 29538
+2327 438 62429
+2328 438 24261
+2329 438 37776
+2330 438 11512
+2331 438 60814
+2341 438 28622
+2388 438 38283
+2389 438 24963
+2390 438 28286
+2391 438 58827
+2392 438 63826
+2394 438 25184
+2395 438 59983
+2396 438 40915
+2397 438 48146
+2407 438 7629
+2418 438 44528
+2466 438 26808
+2467 438 1418
+2468 438 59306
+2469 438 59945
+2470 438 36802
+2471 438 64996
+2472 438 22547
+2473 438 20007
+2474 438 63362
+2475 438 59656
+2485 438 9249
+2496 438 41862
+2508 438 8239
+2949 438 27852657
+383 439 1
+1245 439 54601
+1264 439 10920
+1470 439 10920
+1585 439 60060
+1640 439 60060
+1643 439 60060
+1764 439 43681
+1791 439 43681
+1826 439 43681
+1864 439 43679
+1871 439 10920
+1919 439 38220
+1922 439 38220
+1985 439 43681
+1988 439 43681
+1992 439 21841
+2124 439 30031
+2129 439 2
+2151 439 30031
+2156 439 2
+2187 439 30031
+2192 439 2
+2225 439 30031
+2232 439 17745
+2237 439 23207
+2280 439 34126
+2283 439 34126
+2292 439 9556
+2346 439 42316
+2349 439 42316
+2353 439 61426
+2424 439 34808
+2427 439 34808
+2431 439 27983
+2436 439 56649
+2442 439 43681
+2449 439 43681
+2457 439 43681
+2466 439 19793
+2476 439 19451
+2487 439 5460
+2499 439 39076
+2950 439 27852657
+383 440 1
+384 440 1
+385 440 1
+386 440 1
+387 440 1
+1245 440 54601
+1246 440 54601
+1247 440 54601
+1248 440 54601
+1249 440 54601
+1263 440 54601
+1264 440 10920
+1265 440 10920
+1266 440 10920
+1267 440 10920
+1268 440 10920
+1269 440 10920
+1588 440 60062
+1589 440 22316
+1590 440 65047
+1591 440 65047
+1867 440 60062
+1868 440 22316
+1869 440 65047
+1870 440 65047
+1872 440 27775
+1873 440 10920
+1874 440 54127
+1875 440 32761
+1908 440 1
+1963 440 1
+1964 440 32762
+2029 440 1
+2030 440 32762
+2031 440 32762
+2223 440 65520
+2224 440 65520
+2225 440 17745
+2226 440 65461
+2227 440 65462
+2228 440 43681
+2229 440 7359
+2230 440 1603
+2231 440 1662
+2232 440 37765
+2233 440 1443
+2234 440 7616
+2235 440 57173
+2236 440 2276
+2237 440 7735
+2238 440 36934
+2239 440 43107
+2240 440 62635
+2241 440 50961
+2242 440 48686
+2269 440 24572
+2324 440 24572
+2325 440 44595
+2390 440 61427
+2391 440 28212
+2392 440 51872
+2466 440 35946
+2467 440 4565
+2468 440 12236
+2469 440 61952
+2470 440 15925
+2471 440 910
+2496 440 6144
+2508 440 47152
+2951 440 27852657
+384 441 1
+387 441 1
+391 441 65520
+394 441 1
+492 441 1
+495 441 2
+1774 441 8177
+1801 441 8177
+1836 441 8177
+1881 441 16354
+1936 441 12049
+1994 441 38999
+1995 441 26865
+1996 441 26865
+2014 441 38628
+2022 441 28818
+2028 441 64184
+2029 441 27052
+2031 441 51802
+2034 441 25324
+2035 441 25324
+2036 441 25324
+2037 441 28927
+2038 441 18276
+2039 441 27642
+2040 441 48085
+2043 441 6508
+2044 441 42812
+2045 441 42812
+2046 441 2615
+2047 441 42812
+2048 441 28927
+2049 441 18276
+2050 441 27642
+2051 441 48085
+2052 441 33103
+2054 441 6508
+2055 441 42812
+2056 441 42812
+2057 441 2615
+2058 441 20103
+2059 441 42812
+2344 441 55575
+2345 441 55575
+2346 441 9300
+2347 441 44416
+2348 441 54362
+2349 441 41180
+2350 441 50458
+2351 441 7490
+2352 441 18649
+2353 441 41180
+2354 441 50459
+2355 441 47350
+2356 441 36590
+2357 441 17942
+2358 441 25255
+2359 441 16644
+2360 441 50680
+2361 441 2103
+2362 441 45339
+2363 441 64248
+2366 441 57673
+2367 441 12967
+2368 441 53727
+2369 441 59385
+2373 441 32366
+2374 441 53181
+2375 441 28420
+2376 441 32652
+2377 441 45870
+2378 441 45870
+2379 441 20737
+2380 441 10541
+2382 441 43470
+2383 441 33927
+2384 441 47792
+2385 441 6067
+2386 441 59080
+2387 441 13210
+2388 441 52079
+2389 441 19465
+2390 441 38790
+2392 441 26082
+2393 441 37547
+2394 441 53542
+2395 441 17498
+2396 441 21150
+2397 441 7940
+2398 441 38610
+2399 441 46009
+2400 441 14556
+2401 441 49204
+2403 441 44455
+2404 441 27069
+2405 441 24546
+2406 441 43262
+2407 441 7797
+2408 441 65378
+2409 441 36763
+2410 441 37527
+2411 441 64367
+2412 441 62010
+2413 441 18373
+2415 441 31357
+2416 441 23985
+2417 441 35991
+2418 441 27249
+2419 441 6684
+2420 441 6827
+2487 441 538
+2488 441 39384
+2489 441 31336
+2490 441 22014
+2491 441 62459
+2492 441 40150
+2493 441 51444
+2494 441 45765
+2495 441 49502
+2496 441 5731
+2497 441 63818
+2498 441 39267
+2510 441 12709
+2952 441 27852657
+385 442 1
+1247 442 8189
+1248 442 49138
+1249 442 49138
+1263 442 44016
+1268 442 49663
+1269 442 54785
+1281 442 33716
+1306 442 33716
+1312 442 31729
+1339 442 33716
+1345 442 46171
+1390 442 8948
+1875 442 17248
+2234 442 47835
+2235 442 10955
+2236 442 55590
+2241 442 55747
+2242 442 61575
+2247 442 56745
+2253 442 34360
+2254 442 63325
+2255 442 2955
+2256 442 27899
+2257 442 27899
+2258 442 34375
+2259 442 23029
+2261 442 4959
+2262 442 26590
+2263 442 57368
+2264 442 12976
+2265 442 23514
+2266 442 61136
+2267 442 43053
+2268 442 5699
+2269 442 61879
+2271 442 30622
+2272 442 48071
+2273 442 21260
+2274 442 44949
+2275 442 47176
+2276 442 51561
+2322 442 33879
+2323 442 24261
+2324 442 32415
+2325 442 49894
+2327 442 55583
+2328 442 61973
+2329 442 21508
+2330 442 4464
+2331 442 49865
+2341 442 63825
+2388 442 41148
+2389 442 61612
+2390 442 9653
+2391 442 9197
+2392 442 63291
+2394 442 63102
+2395 442 9967
+2396 442 4920
+2397 442 36304
+2407 442 2953
+2418 442 4649
+2466 442 60264
+2467 442 17026
+2468 442 25655
+2469 442 51153
+2470 442 33072
+2471 442 60
+2472 442 8
+2473 442 24631
+2474 442 17651
+2475 442 2306
+2485 442 3854
+2496 442 18615
+2508 442 5578
+2953 442 27852657
+386 443 1
+387 443 1
+1247 443 21965
+1248 443 24572
+1249 443 24572
+1263 443 48671
+1268 443 52994
+1269 443 28895
+1281 443 31502
+1306 443 31502
+1312 443 57094
+1339 443 31502
+1345 443 49500
+1390 443 24373
+1875 443 41229
+2234 443 2398
+2235 443 6177
+2236 443 32374
+2241 443 60745
+2242 443 48097
+2247 443 17587
+2253 443 25412
+2254 443 34303
+2255 443 27893
+2256 443 24163
+2257 443 24163
+2258 443 58076
+2259 443 21289
+2261 443 18548
+2262 443 22298
+2263 443 7326
+2264 443 46384
+2265 443 48848
+2266 443 24685
+2267 443 27120
+2268 443 2701
+2269 443 32365
+2271 443 56419
+2272 443 64882
+2273 443 2984
+2274 443 55323
+2275 443 43625
+2276 443 18940
+2322 443 58718
+2323 443 19114
+2324 443 15272
+2325 443 36682
+2327 443 26839
+2328 443 15186
+2329 443 2836
+2330 443 8195
+2331 443 46082
+2341 443 27142
+2388 443 33908
+2389 443 38768
+2390 443 16905
+2391 443 28068
+2392 443 19726
+2394 443 62760
+2395 443 45267
+2396 443 52585
+2397 443 48652
+2407 443 42682
+2418 443 15540
+2466 443 26393
+2467 443 2011
+2468 443 8619
+2469 443 22783
+2470 443 46709
+2471 443 52353
+2472 443 40385
+2473 443 10257
+2474 443 36587
+2475 443 12580
+2485 443 62915
+2496 443 45133
+2508 443 33068
+2954 443 27852657
+387 444 1
+1249 444 54601
+1268 444 10920
+1474 444 10920
+1594 444 60060
+1649 444 60060
+1650 444 60060
+1768 444 43681
+1795 444 43681
+1830 444 43681
+1873 444 43679
+1875 444 10920
+1928 444 38220
+1929 444 38220
+1994 444 43681
+1995 444 43681
+1996 444 21841
+2128 444 30031
+2133 444 2
+2155 444 30031
+2160 444 2
+2191 444 30031
+2196 444 2
+2234 444 30031
+2236 444 17745
+2241 444 23207
+2289 444 34126
+2290 444 34126
+2296 444 9556
+2355 444 42316
+2356 444 42316
+2357 444 61426
+2433 444 34808
+2434 444 34808
+2435 444 27983
+2440 444 56649
+2446 444 43681
+2453 444 43681
+2461 444 43681
+2470 444 19793
+2480 444 19451
+2491 444 5460
+2503 444 39076
+2955 444 27852657
+388 445 1
+389 445 1
+483 445 1
+484 445 1
+1738 445 43681
+1739 445 43681
+1742 445 43681
+1746 445 43681
+1751 445 43681
+1923 445 42731
+1924 445 33710
+1925 445 22790
+1989 445 42731
+1990 445 33710
+1991 445 22790
+1993 445 42731
+1995 445 22790
+2347 445 35610
+2348 445 35610
+2350 445 18042
+2351 445 17271
+2352 445 29437
+2354 445 18042
+2355 445 5698
+2356 445 29437
+2359 445 18043
+2360 445 17984
+2361 445 29437
+2488 445 12938
+2489 445 7834
+2490 445 26707
+2956 445 27852657
+389 446 1
+393 446 56901
+394 446 56901
+395 446 36996
+396 446 30940
+398 446 34581
+403 446 2415
+406 446 63106
+407 446 59634
+416 446 6472
+426 446 19220
+435 446 43857
+539 446 19220
+543 446 23139
+718 446 44371
+722 446 38612
+726 446 26909
+1866 446 3590
+1869 446 41788
+1870 446 5143
+1873 446 11668
+1874 446 43137
+1875 446 37994
+1880 446 20743
+1881 446 12929
+1886 446 3411
+1892 446 26942
+1893 446 15818
+1894 446 32168
+1895 446 59145
+1896 446 59145
+1897 446 51431
+1898 446 62109
+1900 446 58663
+1901 446 10505
+1902 446 49647
+1903 446 23046
+1904 446 31345
+1905 446 37721
+1906 446 61325
+1907 446 5642
+1908 446 3586
+1910 446 28110
+1911 446 53823
+1912 446 43044
+1913 446 36334
+1914 446 29069
+1915 446 56869
+1961 446 52641
+1962 446 12526
+1963 446 8029
+1964 446 34996
+1966 446 49458
+1967 446 6424
+1968 446 30773
+1969 446 12683
+1970 446 31844
+1980 446 40496
+2027 446 56126
+2028 446 31554
+2029 446 35220
+2030 446 21586
+2031 446 12182
+2033 446 39101
+2034 446 59952
+2035 446 18419
+2036 446 29689
+2046 446 3269
+2057 446 28294
+2388 446 4338
+2389 446 64734
+2390 446 19280
+2391 446 52545
+2392 446 19126
+2393 446 44456
+2394 446 53591
+2395 446 14289
+2396 446 49993
+2397 446 25865
+2407 446 39988
+2418 446 31587
+2496 446 17129
+2957 446 27852657
+390 447 1
+393 447 145
+394 447 144
+406 447 6890
+414 447 52007
+416 447 41032
+435 447 2422
+726 447 42056
+1873 447 10780
+1874 447 58612
+1875 447 58554
+1880 447 7003
+1881 447 25125
+1886 447 1148
+1892 447 47747
+1893 447 940
+1894 447 38532
+1895 447 42289
+1896 447 42289
+1897 447 25603
+1898 447 30908
+1900 447 33086
+1901 447 25360
+1902 447 48317
+1903 447 25873
+1904 447 37944
+1905 447 61176
+1906 447 46011
+1907 447 42075
+1908 447 44219
+1910 447 24593
+1911 447 34719
+1912 447 44949
+1913 447 2341
+1914 447 8321
+1915 447 12666
+1961 447 48286
+1962 447 49630
+1963 447 33712
+1964 447 9075
+1966 447 22702
+1967 447 41233
+1968 447 22021
+1969 447 59528
+1970 447 32058
+1980 447 19392
+2027 447 42561
+2028 447 50860
+2029 447 40866
+2030 447 32965
+2031 447 35588
+2033 447 57577
+2034 447 46180
+2035 447 42235
+2036 447 45043
+2046 447 17944
+2057 447 64073
+2388 447 27919
+2389 447 43689
+2390 447 53712
+2391 447 6220
+2392 447 21955
+2393 447 60662
+2394 447 61135
+2395 447 24300
+2396 447 7396
+2397 447 51763
+2407 447 29223
+2418 447 18450
+2496 447 22834
+2958 447 27852657
+391 448 1
+393 448 43681
+394 448 43681
+407 448 26301
+416 448 31288
+435 448 110
+1880 448 1179
+1881 448 18937
+1886 448 63096
+1893 448 37012
+1894 448 20171
+1895 448 6047
+1896 448 6047
+1897 448 29079
+1898 448 39113
+1900 448 16436
+1901 448 45823
+1902 448 22128
+1903 448 30601
+1904 448 24190
+1905 448 18143
+1906 448 661
+1907 448 45825
+1908 448 51569
+1910 448 47912
+1911 448 62187
+1912 448 33990
+1913 448 23429
+1914 448 46534
+1915 448 28391
+1961 448 3693
+1962 448 48533
+1963 448 976
+1964 448 976
+1966 448 10259
+1967 448 5443
+1968 448 34723
+1969 448 47773
+1970 448 45992
+1980 448 17601
+2027 448 28269
+2028 448 8879
+2029 448 12637
+2030 448 12637
+2031 448 12512
+2033 448 41504
+2034 448 33254
+2035 448 11511
+2036 448 9913
+2046 448 21413
+2057 448 3812
+2388 448 48641
+2389 448 30192
+2390 448 42606
+2391 448 42606
+2392 448 13970
+2393 448 22086
+2394 448 42800
+2395 448 28195
+2396 448 35762
+2397 448 31477
+2407 448 48664
+2418 448 41506
+2496 448 5756
+2959 448 27852657
+392 449 1
+393 449 58625
+394 449 58625
+407 449 28245
+416 449 24171
+435 449 49545
+1880 449 54563
+1881 449 13544
+1886 449 54384
+1892 449 29375
+1893 449 31792
+1894 449 11786
+1895 449 7696
+1896 449 7696
+1897 449 5764
+1898 449 40730
+1900 449 37618
+1901 449 8305
+1902 449 49063
+1903 449 60537
+1904 449 3678
+1905 449 61503
+1906 449 54817
+1907 449 50130
+1908 449 50130
+1910 449 22407
+1911 449 22514
+1912 449 29304
+1913 449 65233
+1914 449 21920
+1915 449 25938
+1961 449 36435
+1962 449 28447
+1963 449 28447
+1964 449 13062
+1966 449 59264
+1967 449 57187
+1968 449 26164
+1969 449 13226
+1970 449 31628
+1980 449 5690
+2027 449 43525
+2028 449 40806
+2029 449 40806
+2030 449 1112
+2031 449 52069
+2033 449 23603
+2034 449 6911
+2035 449 46448
+2036 449 10159
+2046 449 21236
+2057 449 15546
+2388 449 23623
+2389 449 11406
+2390 449 11406
+2391 449 20321
+2392 449 31812
+2393 449 29848
+2394 449 19325
+2395 449 60648
+2396 449 24053
+2397 449 28207
+2407 449 203
+2418 449 37931
+2496 449 51196
+2960 449 27852657
+393 450 1
+394 450 1
+495 450 1
+550 450 32766
+592 450 32766
+593 450 32766
+679 450 65520
+690 450 65520
+702 450 65520
+727 450 10
+728 450 2
+775 450 32764
+776 450 32764
+840 450 65519
+841 450 65519
+842 450 65518
+1773 450 40949
+1774 450 65515
+1800 450 40949
+1801 450 65515
+1835 450 40949
+1836 450 65515
+1878 450 16377
+1880 450 8195
+1881 450 57327
+1933 450 57328
+1934 450 57328
+1936 450 8191
+1999 450 8188
+2000 450 8188
+2001 450 16382
+2360 450 53236
+2361 450 53236
+2362 450 40951
+2363 450 53235
+2369 450 65520
+2376 450 65520
+2384 450 65520
+2393 450 12285
+2403 450 14337
+2414 450 32763
+2492 450 19446
+2961 450 27852657
+394 451 1
+2242 451 65520
+2962 451 27852657
+395 452 1
+496 452 1
+673 452 1
+1273 452 24572
+1480 452 24572
+1484 452 40955
+1759 452 61427
+1763 452 28666
+1766 452 33481
+1767 452 25476
+1768 452 62331
+1884 452 29498
+1886 452 21657
+1895 452 34245
+1903 452 34245
+1912 452 34245
+1937 452 33704
+1938 452 33704
+1939 452 63202
+1940 452 61248
+1943 452 62116
+1950 452 20895
+1958 452 20895
+1967 452 55140
+1977 452 20895
+2003 452 33704
+2004 452 33704
+2005 452 63202
+2006 452 61248
+2007 452 61248
+2009 452 62116
+2016 452 20895
+2024 452 20895
+2033 452 55140
+2043 452 41790
+2054 452 20895
+2115 452 37614
+2116 452 37614
+2117 452 8597
+2118 452 24513
+2119 452 25802
+2120 452 61573
+2121 452 21214
+2122 452 58683
+2123 452 32881
+2124 452 61573
+2125 452 21214
+2126 452 8750
+2127 452 30386
+2128 452 63026
+2129 452 61573
+2130 452 21214
+2131 452 27692
+2132 452 47992
+2133 452 23344
+2134 452 25839
+2137 452 58707
+2138 452 46105
+2139 452 53854
+2140 452 2001
+2164 452 27726
+2165 452 15124
+2166 452 22873
+2167 452 44290
+2168 452 10728
+2175 452 10728
+2198 452 36602
+2199 452 62002
+2201 452 16841
+2202 452 24590
+2203 452 33405
+2204 452 9392
+2211 452 27073
+2219 452 16345
+2243 452 44829
+2244 452 4708
+2245 452 64539
+2247 452 61189
+2248 452 63190
+2249 452 28334
+2256 452 29055
+2264 452 63134
+2273 452 46789
+2298 452 65025
+2299 452 24904
+2300 452 19214
+2301 452 36211
+2303 452 40177
+2304 452 7904
+2311 452 22571
+2319 452 30598
+2328 452 28857
+2338 452 47589
+2364 452 33484
+2365 452 19220
+2366 452 8813
+2367 452 65311
+2368 452 13009
+2370 452 30991
+2377 452 49254
+2385 452 64481
+2394 452 13317
+2404 452 54239
+2415 452 6650
+2442 452 56064
+2443 452 40008
+2444 452 41929
+2445 452 54610
+2446 452 62851
+2447 452 10287
+2448 452 38161
+2455 452 36492
+2463 452 64607
+2472 452 48892
+2482 452 14312
+2493 452 31436
+2505 452 4197
+2963 452 27852657
+396 453 1
+403 453 1
+405 453 13876
+413 453 46928
+427 453 31625
+431 453 33728
+440 453 31099
+448 453 31099
+457 453 31099
+540 453 56887
+541 453 56887
+542 453 22991
+543 453 47845
+554 453 60942
+559 453 800
+565 453 800
+573 453 31899
+622 453 800
+719 453 56887
+720 453 56887
+721 453 22991
+722 453 47845
+725 453 8918
+731 453 60942
+736 453 800
+743 453 800
+752 453 31899
+806 453 1600
+871 453 800
+1276 453 31632
+1280 453 46325
+1285 453 18520
+1300 453 55577
+1301 453 21688
+1305 453 36381
+1310 453 32708
+1316 453 59669
+1323 453 59669
+1332 453 23371
+1333 453 23371
+1334 453 4783
+1338 453 36755
+1343 453 34372
+1349 453 48460
+1356 453 8388
+1364 453 14240
+1376 453 50945
+1377 453 50945
+1378 453 61385
+1383 453 27107
+1388 453 30392
+1394 453 20088
+1401 453 52715
+1409 453 47823
+1418 453 33583
+1588 453 25145
+1589 453 25145
+1590 453 35585
+1591 453 19772
+1600 453 54810
+1606 453 58135
+1613 453 18089
+1621 453 58599
+1630 453 27952
+1685 453 59890
+1867 453 11499
+1868 453 11499
+1869 453 8245
+1870 453 34228
+1874 453 32429
+1885 453 11235
+1892 453 49233
+1900 453 16415
+1909 453 10982
+1964 453 17131
+2030 453 22762
+2228 453 34064
+2229 453 34064
+2230 453 53622
+2231 453 3916
+2235 453 6375
+2240 453 24389
+2246 453 39091
+2253 453 6104
+2261 453 33289
+2270 453 13154
+2325 453 59076
+2391 453 7500
+2469 453 4571
+2964 453 27852657
+397 454 1
+398 454 1
+405 454 1
+406 454 1
+725 454 1
+726 454 1
+1280 454 49142
+1281 454 49142
+1285 454 2
+1286 454 49142
+1305 454 49142
+1306 454 49142
+1310 454 2
+1311 454 49142
+1871 454 65519
+1872 454 65519
+1873 454 65519
+1874 454 32759
+1875 454 32759
+2232 454 21840
+2233 454 21840
+2234 454 21840
+2235 454 38220
+2236 454 38220
+2237 454 21840
+2238 454 21840
+2239 454 21840
+2240 454 21840
+2241 454 60060
+2242 454 21840
+2246 454 1
+2247 454 8191
+2253 454 1
+2254 454 8191
+2325 454 21841
+2391 454 21842
+2392 454 1
+2466 454 35490
+2467 454 35490
+2468 454 35490
+2469 454 38222
+2470 454 7507
+2471 454 46412
+2508 454 17746
+2965 454 27852657
+398 455 1
+406 455 1
+414 455 1
+726 455 1
+1281 455 24572
+1287 455 40949
+1306 455 24572
+1312 455 40949
+1339 455 24572
+1345 455 40949
+1602 455 36036
+1873 455 47641
+1874 455 5936
+1875 455 63263
+1893 455 21124
+1901 455 14477
+1907 455 8203
+1908 455 49534
+1910 455 26485
+1913 455 24680
+1914 455 24680
+1915 455 24680
+1961 455 30007
+1962 455 28222
+1963 455 29618
+1964 455 40445
+1967 455 21075
+1968 455 20428
+1969 455 20428
+1970 455 45108
+1980 455 20428
+2027 455 30007
+2028 455 28222
+2029 455 29618
+2030 455 40445
+2031 455 5608
+2033 455 21075
+2034 455 20428
+2035 455 20428
+2036 455 45108
+2046 455 40856
+2057 455 20428
+2223 455 57486
+2224 455 57486
+2225 455 33219
+2226 455 11230
+2227 455 19265
+2228 455 40004
+2229 455 51503
+2230 455 64857
+2231 455 45592
+2232 455 40004
+2233 455 51503
+2234 455 42822
+2235 455 35541
+2236 455 2234
+2237 455 50025
+2238 455 45242
+2239 455 10258
+2240 455 2084
+2241 455 41508
+2242 455 39274
+2245 455 56125
+2246 455 38641
+2247 455 51501
+2248 455 44557
+2252 455 47121
+2253 455 29637
+2254 455 42497
+2255 455 57364
+2256 455 17582
+2257 455 17582
+2258 455 30257
+2259 455 30834
+2261 455 28388
+2262 455 14384
+2263 455 33952
+2264 455 11825
+2265 455 37107
+2266 455 19525
+2267 455 42919
+2268 455 38310
+2269 455 30095
+2271 455 51143
+2272 455 54069
+2273 455 14180
+2274 455 56315
+2275 455 46151
+2276 455 26626
+2322 455 1136
+2323 455 46030
+2324 455 22167
+2325 455 5039
+2327 455 29475
+2328 455 9588
+2329 455 28030
+2330 455 37484
+2331 455 39297
+2341 455 12671
+2388 455 17503
+2389 455 9825
+2390 455 22960
+2391 455 42588
+2392 455 48177
+2394 455 56617
+2395 455 58104
+2396 455 50589
+2397 455 3073
+2407 455 24687
+2418 455 12016
+2466 455 57493
+2467 455 47462
+2468 455 15026
+2469 455 19529
+2470 455 18484
+2471 455 43402
+2472 455 12761
+2473 455 29831
+2474 455 45290
+2475 455 32745
+2485 455 14847
+2496 455 1649
+2508 455 58285
+2966 455 27852657
+399 456 1
+407 456 41549
+416 456 15522
+435 456 16766
+1880 456 39556
+1881 456 6657
+1886 456 10545
+1893 456 18691
+1894 456 6287
+1895 456 63909
+1896 456 63909
+1897 456 57476
+1898 456 5334
+1900 456 45923
+1901 456 1246
+1902 456 27362
+1903 456 15375
+1904 456 44405
+1905 456 46017
+1906 456 27467
+1907 456 6536
+1908 456 6536
+1910 456 46488
+1911 456 25503
+1912 456 62532
+1913 456 9052
+1914 456 8532
+1915 456 28036
+1961 456 19437
+1962 456 1015
+1963 456 1015
+1964 456 1015
+1966 456 47025
+1967 456 49522
+1968 456 29492
+1969 456 29743
+1970 456 27022
+1980 456 64507
+2027 456 60344
+2028 456 51990
+2029 456 51990
+2030 456 51990
+2031 456 43627
+2033 456 7476
+2034 456 33653
+2035 456 4189
+2036 456 33903
+2046 456 58802
+2057 456 59816
+2388 456 12204
+2389 456 54816
+2390 456 54816
+2391 456 54816
+2392 456 53118
+2393 456 23251
+2394 456 58632
+2395 456 14826
+2396 456 9681
+2397 456 51392
+2407 456 15863
+2418 456 43191
+2496 456 40577
+2967 456 27852657
+400 457 1
+409 457 1
+410 457 1
+418 457 39112
+425 457 26409
+436 457 44175
+444 457 39411
+453 457 29285
+461 457 17453
+462 457 33638
+463 457 30762
+556 457 29437
+562 457 54149
+569 457 59374
+579 457 32601
+624 457 27937
+625 457 34537
+626 457 17084
+627 457 38973
+628 457 63925
+638 457 62086
+733 457 62917
+740 457 1743
+748 457 62021
+758 457 4598
+822 457 3164
+875 457 24708
+876 457 23163
+877 457 60683
+887 457 36333
+898 457 29734
+1886 457 8281
+1888 457 46828
+1892 457 52522
+1893 457 2181
+1894 457 55820
+1895 457 14303
+1896 457 18204
+1897 457 23702
+1898 457 57725
+1900 457 27753
+1901 457 10743
+1902 457 57996
+1903 457 21034
+1904 457 52605
+1905 457 5050
+1906 457 1539
+1907 457 57663
+1908 457 31016
+1910 457 8852
+1911 457 19415
+1912 457 55134
+1913 457 55197
+1914 457 37506
+1915 457 4196
+1961 457 9312
+1962 457 62061
+1963 457 46833
+1964 457 48872
+1966 457 38639
+1967 457 9325
+1968 457 38217
+1969 457 27846
+1970 457 4197
+1980 457 4160
+2027 457 22116
+2028 457 21837
+2029 457 7847
+2030 457 41407
+2031 457 26427
+2033 457 53488
+2034 457 18603
+2035 457 57355
+2036 457 43453
+2046 457 4310
+2057 457 15670
+2388 457 7017
+2389 457 49428
+2390 457 43651
+2391 457 5279
+2392 457 42084
+2393 457 10117
+2394 457 35447
+2395 457 9083
+2396 457 64489
+2397 457 60557
+2407 457 48949
+2418 457 4207
+2496 457 24703
+2968 457 27852657
+401 458 1
+409 458 65520
+422 458 65520
+436 458 27231
+444 458 38290
+453 458 57776
+461 458 28138
+462 458 17370
+463 458 25115
+556 458 31530
+562 458 33991
+569 458 28945
+579 458 19347
+624 458 40093
+625 458 8506
+626 458 45889
+627 458 62262
+628 458 64433
+638 458 4680
+733 458 44443
+740 458 21078
+748 458 25174
+758 458 5415
+822 458 15482
+875 458 60349
+876 458 33773
+877 458 28932
+887 458 23587
+898 458 12785
+1886 458 58753
+1888 458 55636
+1892 458 12999
+1893 458 16540
+1894 458 35840
+1895 458 16519
+1896 458 26404
+1897 458 64604
+1898 458 55186
+1900 458 59623
+1901 458 61638
+1902 458 17574
+1903 458 24599
+1904 458 42226
+1905 458 12643
+1906 458 32950
+1907 458 4392
+1908 458 4392
+1910 458 47489
+1911 458 43384
+1912 458 15020
+1913 458 12080
+1914 458 28357
+1915 458 31896
+1961 458 32333
+1962 458 30898
+1963 458 30898
+1964 458 28859
+1966 458 22664
+1967 458 18648
+1968 458 23748
+1969 458 62990
+1970 458 36091
+1980 458 22050
+2027 458 18694
+2028 458 20412
+2029 458 20412
+2030 458 52373
+2031 458 40292
+2033 458 40109
+2034 458 18041
+2035 458 12782
+2036 458 60895
+2046 458 41483
+2057 458 61236
+2388 458 23313
+2389 458 23538
+2390 458 23538
+2391 458 61910
+2392 458 18068
+2393 458 4688
+2394 458 29806
+2395 458 25566
+2396 458 27139
+2397 458 28705
+2407 458 10790
+2418 458 45489
+2496 458 24197
+2969 458 27852657
+402 459 1
+410 459 65520
+422 459 1
+744 459 2
+872 459 1
+1292 459 24572
+1293 459 6
+1324 459 40949
+1325 459 65515
+1365 459 24572
+1366 459 6
+1419 459 30029
+1420 459 54595
+1687 459 10926
+1893 459 47379
+1901 459 29028
+1908 459 49123
+1910 459 63405
+1913 459 17703
+1914 459 17703
+1915 459 17703
+1961 459 58793
+1962 459 58793
+1963 459 42395
+1964 459 42395
+1967 459 29178
+1968 459 54384
+1969 459 54384
+1970 459 6566
+1980 459 54384
+2027 459 58793
+2028 459 58793
+2029 459 42395
+2030 459 42395
+2031 459 5900
+2033 459 29178
+2034 459 54384
+2035 459 54384
+2036 459 6566
+2046 459 43247
+2057 459 54384
+2247 459 22596
+2248 459 7709
+2249 459 1
+2252 459 50009
+2253 459 50009
+2254 459 30119
+2255 459 36152
+2256 459 50616
+2257 459 50615
+2258 459 24876
+2259 459 24876
+2261 459 12036
+2262 459 32958
+2263 459 53084
+2264 459 26665
+2265 459 10880
+2266 459 25786
+2267 459 11273
+2268 459 11273
+2269 459 33767
+2271 459 11974
+2272 459 9485
+2273 459 61684
+2274 459 58026
+2275 459 64425
+2276 459 20894
+2322 459 28889
+2323 459 28889
+2324 459 51383
+2325 459 51383
+2327 459 48759
+2328 459 40189
+2329 459 58345
+2330 459 52814
+2331 459 60261
+2341 459 39367
+2388 459 1753
+2389 459 1753
+2390 459 41661
+2391 459 41661
+2392 459 18333
+2394 459 27197
+2395 459 62343
+2396 459 9563
+2397 459 36865
+2407 459 19627
+2418 459 45782
+2466 459 43498
+2467 459 43498
+2468 459 24560
+2469 459 24560
+2470 459 4506
+2471 459 40228
+2472 459 7555
+2473 459 62085
+2474 459 42247
+2475 459 63845
+2485 459 27187
+2496 459 47816
+2508 459 34377
+2970 459 27852657
+403 460 1
+1263 460 46840
+1268 460 43137
+1269 460 61818
+1276 460 22233
+1281 460 51120
+1301 460 39567
+1306 460 10095
+1312 460 53485
+1339 460 59541
+1345 460 52505
+1390 460 41681
+1591 460 19960
+1870 460 46228
+1875 460 2479
+2230 460 21309
+2231 460 35091
+2234 460 23033
+2235 460 50852
+2236 460 45212
+2241 460 20058
+2242 460 3593
+2247 460 35095
+2253 460 19041
+2254 460 25233
+2255 460 7952
+2256 460 28430
+2257 460 28430
+2258 460 60933
+2259 460 57247
+2261 460 11790
+2262 460 9696
+2263 460 11280
+2264 460 56352
+2265 460 19074
+2266 460 56165
+2267 460 16681
+2268 460 43364
+2269 460 39958
+2271 460 3681
+2272 460 33152
+2273 460 28502
+2274 460 10502
+2275 460 60114
+2276 460 3949
+2322 460 24829
+2323 460 65258
+2324 460 51015
+2325 460 62510
+2327 460 38864
+2328 460 10729
+2329 460 58340
+2330 460 9446
+2331 460 12247
+2341 460 8298
+2388 460 30181
+2389 460 30269
+2390 460 63249
+2391 460 22608
+2392 460 44030
+2394 460 54392
+2395 460 40612
+2396 460 8603
+2397 460 23712
+2407 460 44961
+2418 460 36663
+2466 460 36433
+2467 460 21647
+2468 460 18012
+2469 460 9742
+2470 460 14660
+2471 460 19889
+2472 460 5775
+2473 460 22971
+2474 460 8560
+2475 460 48562
+2485 460 33441
+2496 460 55602
+2508 460 876
+2971 460 27852657
+404 461 1
+406 461 1
+1295 461 2
+1296 461 2
+1297 461 2
+1302 461 49142
+1303 461 32763
+1306 461 32761
+1307 461 49142
+1308 461 32763
+1311 461 1
+1312 461 32761
+1503 461 2
+1504 461 2
+1506 461 2
+1509 461 2
+1517 461 49142
+1518 461 32763
+1522 461 32761
+1782 461 2
+1783 461 2
+1785 461 2
+1788 461 2
+1791 461 2
+1792 461 4
+1793 461 2
+1794 461 2
+1795 461 2
+2142 461 1
+2143 461 1
+2145 461 1
+2148 461 1
+2151 461 43681
+2152 461 43682
+2153 461 43681
+2154 461 43681
+2155 461 43681
+2156 461 43681
+2157 461 43682
+2158 461 43681
+2159 461 43681
+2160 461 21841
+2161 461 43681
+2250 461 16381
+2251 461 24572
+2252 461 43681
+2254 461 49142
+2255 461 49141
+2305 461 16381
+2306 461 24572
+2307 461 43681
+2308 461 43681
+2310 461 49141
+2371 461 16381
+2372 461 24572
+2373 461 43681
+2374 461 43681
+2375 461 2
+2449 461 37200
+2450 461 34133
+2451 461 54603
+2452 461 54603
+2453 461 46415
+2454 461 13653
+2473 461 8190
+2483 461 8190
+2494 461 8190
+2506 461 65182
+2972 461 27852657
+405 462 1
+406 462 1
+1602 462 41786
+1873 462 38370
+1874 462 14836
+1875 462 14836
+1892 462 20524
+1893 462 10492
+1901 462 40204
+1908 462 4820
+1910 462 44577
+1913 462 22533
+1914 462 22533
+1915 462 22533
+1961 462 54301
+1962 462 28634
+1963 462 25762
+1964 462 49015
+1967 462 15519
+1968 462 17219
+1969 462 17219
+1970 462 39752
+1980 462 17219
+2027 462 54301
+2028 462 28634
+2029 462 25762
+2030 462 49015
+2031 462 59267
+2033 462 15519
+2034 462 17219
+2035 462 17219
+2036 462 39752
+2046 462 34438
+2057 462 17219
+2223 462 9166
+2224 462 9166
+2225 462 3289
+2226 462 3190
+2227 462 59545
+2228 462 48904
+2229 462 41397
+2230 462 499
+2231 462 6475
+2232 462 48904
+2233 462 41397
+2234 462 64836
+2235 462 1079
+2236 462 60125
+2237 462 48904
+2238 462 41397
+2239 462 10548
+2240 462 7481
+2241 462 43521
+2242 462 48917
+2245 462 18263
+2246 462 14941
+2247 462 42071
+2248 462 1400
+2252 462 58906
+2253 462 47644
+2254 462 26163
+2255 462 26642
+2256 462 177
+2257 462 177
+2258 462 31053
+2259 462 65091
+2261 462 32598
+2262 462 21522
+2263 462 10634
+2264 462 18185
+2265 462 16991
+2266 462 16814
+2267 462 29429
+2268 462 63467
+2269 462 4628
+2271 462 57021
+2272 462 52766
+2273 462 28170
+2274 462 16486
+2275 462 54168
+2276 462 37354
+2322 462 60949
+2323 462 14594
+2324 462 28157
+2325 462 4385
+2327 462 57909
+2328 462 55763
+2329 462 9795
+2330 462 30090
+2331 462 30718
+2341 462 58885
+2388 462 57752
+2389 462 25004
+2390 462 30355
+2391 462 18959
+2392 462 46390
+2394 462 12389
+2395 462 64386
+2396 462 42395
+2397 462 30385
+2407 462 11760
+2418 462 18396
+2466 462 44562
+2467 462 12929
+2468 462 535
+2469 462 31229
+2470 462 49735
+2471 462 61326
+2472 462 1563
+2473 462 63581
+2474 462 58012
+2475 462 24968
+2485 462 57440
+2496 462 35753
+2508 462 28791
+2973 462 27852657
+406 463 1
+1263 463 46840
+1268 463 43137
+1269 463 61818
+1281 463 7832
+1306 463 49662
+1312 463 57777
+1339 463 59541
+1345 463 54024
+1390 463 51190
+1875 463 48707
+2234 463 2930
+2235 463 54849
+2236 463 18779
+2241 463 60528
+2242 463 37952
+2247 463 21566
+2253 463 21936
+2254 463 13040
+2255 463 56248
+2256 463 30299
+2257 463 30299
+2258 463 35332
+2259 463 60279
+2261 463 35675
+2262 463 56993
+2263 463 21191
+2264 463 44012
+2265 463 5762
+2266 463 40984
+2267 463 31957
+2268 463 63802
+2269 463 56848
+2271 463 6552
+2272 463 37626
+2273 463 53219
+2274 463 59022
+2275 463 9551
+2276 463 34088
+2322 463 48012
+2323 463 13167
+2324 463 36070
+2325 463 6691
+2327 463 45361
+2328 463 41762
+2329 463 16508
+2330 463 35250
+2331 463 51033
+2341 463 16945
+2388 463 56627
+2389 463 1318
+2390 463 33611
+2391 463 12360
+2392 463 58385
+2394 463 35138
+2395 463 1095
+2396 463 6078
+2397 463 11195
+2407 463 16248
+2418 463 64824
+2466 463 14279
+2467 463 55585
+2468 463 63354
+2469 463 325
+2470 463 28842
+2471 463 41100
+2472 463 4281
+2473 463 32446
+2474 463 63687
+2475 463 56606
+2485 463 28447
+2496 463 27747
+2508 463 50214
+2974 463 27852657
+406 464 1
+407 464 65520
+514 464 1497
+687 464 684
+688 464 59789
+689 464 59789
+695 464 52908
+706 464 61210
+734 464 54280
+735 464 53509
+737 464 8622
+740 464 20707
+747 464 20707
+756 464 20707
+786 464 33689
+787 464 34913
+788 464 61526
+789 464 11010
+792 464 18003
+793 464 58902
+801 464 58902
+810 464 14088
+820 464 58902
+851 464 33689
+852 464 34913
+853 464 61526
+854 464 11010
+855 464 19922
+857 464 18003
+858 464 58902
+866 464 58902
+875 464 14088
+885 464 52283
+896 464 58902
+1782 464 23340
+1783 464 23340
+1784 464 49105
+1785 464 12189
+1786 464 54370
+1787 464 28066
+1788 464 31922
+1789 464 3934
+1790 464 15085
+1791 464 28066
+1792 464 31922
+1793 464 9725
+1794 464 5267
+1795 464 55703
+1796 464 56763
+1797 464 19367
+1798 464 61284
+1799 464 121
+1800 464 33114
+1801 464 42932
+1804 464 33194
+1805 464 12774
+1806 464 46524
+1807 464 43732
+1811 464 14177
+1812 464 59278
+1813 464 27507
+1814 464 474
+1815 464 29924
+1816 464 29924
+1844 464 41717
+1845 464 20776
+1847 464 58375
+1848 464 43153
+1849 464 6239
+1850 464 64504
+1851 464 62335
+1859 464 32411
+1889 464 30882
+1890 464 6009
+1891 464 51127
+1893 464 15988
+1894 464 13996
+1895 464 56209
+1896 464 37333
+1904 464 58901
+1913 464 26490
+1944 464 51558
+1945 464 52645
+1946 464 39228
+1947 464 779
+1949 464 53043
+1950 464 33185
+1951 464 64902
+1959 464 3948
+1968 464 33998
+1978 464 7508
+2010 464 28911
+2011 464 34582
+2012 464 7263
+2013 464 62747
+2014 464 39345
+2016 464 28133
+2017 464 47027
+2025 464 11743
+2034 464 17407
+2044 464 29888
+2055 464 22380
+2371 464 13828
+2372 464 11520
+2373 464 60725
+2374 464 25170
+2375 464 65298
+2376 464 27675
+2377 464 16957
+2378 464 39030
+2386 464 49849
+2395 464 9816
+2405 464 19681
+2416 464 34007
+2494 464 63918
+2975 464 27852657
+406 465 1
+1161 465 65519
+1162 465 65519
+1166 465 65519
+1191 465 65519
+1192 465 65519
+1195 465 65519
+1306 465 49140
+1311 465 49140
+1339 465 65519
+1344 465 65519
+1521 465 49140
+1556 465 65519
+2209 465 65520
+2217 465 65520
+2254 465 8190
+2262 465 65520
+2309 465 8190
+2317 465 65520
+2375 465 8190
+2383 465 65520
+2453 465 29687
+2461 465 16377
+2976 465 27852657
+406 466 1
+414 466 1
+432 466 1
+1306 466 32761
+1312 466 32760
+1339 466 32761
+1345 466 32760
+1384 466 32761
+1390 466 32760
+1522 466 32760
+1557 466 32760
+1602 466 65520
+1657 466 32760
+2167 466 65519
+2174 466 65519
+2203 466 16379
+2208 466 65519
+2209 466 65519
+2210 466 16377
+2216 466 65519
+2217 466 65519
+2218 466 16379
+2248 466 16379
+2254 466 65519
+2255 466 32757
+2262 466 65519
+2263 466 49138
+2272 466 32759
+2310 466 16378
+2318 466 32759
+2327 466 49139
+2337 466 16380
+2375 466 1
+2383 466 1
+2392 466 8193
+2447 466 49140
+2453 466 32761
+2454 466 40950
+2455 466 65520
+2456 466 65520
+2461 466 32761
+2462 466 24570
+2463 466 57330
+2464 466 57329
+2465 466 57330
+2470 466 55967
+2471 466 6825
+2472 466 57330
+2473 466 49139
+2474 466 40949
+2475 466 49140
+2481 466 45046
+2482 466 43680
+2483 466 35489
+2484 466 27299
+2485 466 19109
+2486 466 35490
+2493 466 43680
+2494 466 35489
+2495 466 27299
+2496 466 19109
+2497 466 5459
+2498 466 35490
+2504 466 57331
+2505 466 3411
+2506 466 25931
+2507 466 2385
+2508 466 50334
+2509 466 32931
+2510 466 16551
+2511 466 27045
+2977 466 27852657
+407 467 1
+416 467 11054
+435 467 2581
+1880 467 60281
+1881 467 31692
+1886 467 60533
+1893 467 52815
+1894 467 22206
+1895 467 27514
+1896 467 27514
+1897 467 36739
+1898 467 13864
+1900 467 31241
+1901 467 6264
+1902 467 6349
+1903 467 41469
+1904 467 38479
+1905 467 10965
+1906 467 22859
+1907 467 25751
+1908 467 25751
+1910 467 43757
+1911 467 61734
+1912 467 42359
+1913 467 23695
+1914 467 11967
+1915 467 1002
+1961 467 27673
+1962 467 37872
+1963 467 37872
+1964 467 37872
+1966 467 8866
+1967 467 28285
+1968 467 880
+1969 467 39746
+1970 467 27386
+1980 467 26384
+2027 467 5099
+2028 467 31562
+2029 467 31562
+2030 467 31562
+2031 467 53481
+2033 467 8400
+2034 467 41876
+2035 467 25263
+2036 467 26144
+2046 467 4767
+2057 467 43904
+2388 467 22260
+2389 467 23857
+2390 467 23857
+2391 467 23857
+2392 467 40169
+2393 467 54272
+2394 467 12977
+2395 467 32897
+2396 467 32922
+2397 467 34267
+2407 467 10488
+2418 467 60348
+2496 467 9628
+2978 467 27852657
+408 468 1
+409 468 1
+410 468 1
+418 468 39112
+425 468 26409
+444 468 18065
+453 468 50631
+461 468 12209
+462 468 23695
+463 468 64994
+562 468 18065
+569 468 29937
+579 468 2151
+624 468 61001
+625 468 49039
+626 468 36830
+627 468 1456
+628 468 57710
+638 468 55032
+740 468 64660
+748 468 64625
+758 468 55994
+822 468 58388
+875 468 13112
+876 468 48135
+877 468 43950
+887 468 6927
+898 468 3571
+1894 468 31718
+1895 468 41530
+1896 468 26738
+1897 468 6933
+1898 468 6933
+1900 468 49317
+1901 468 49317
+1902 468 40025
+1903 468 12050
+1904 468 4102
+1905 468 13534
+1906 468 35061
+1907 468 35061
+1908 468 35061
+1910 468 40187
+1911 468 24831
+1912 468 59044
+1913 468 6564
+1914 468 54488
+1915 468 18133
+1961 468 35732
+1962 468 35732
+1963 468 35732
+1964 468 35732
+1966 468 2136
+1967 468 38290
+1968 468 19917
+1969 468 58462
+1970 468 8819
+1980 468 51554
+2027 468 43432
+2028 468 43432
+2029 468 43432
+2030 468 43432
+2031 468 43432
+2033 468 15430
+2034 468 17035
+2035 468 23508
+2036 468 16204
+2046 468 18614
+2057 468 4128
+2388 468 1159
+2389 468 1159
+2390 468 1159
+2391 468 1159
+2392 468 1159
+2393 468 1159
+2394 468 15070
+2395 468 24444
+2396 468 41295
+2397 468 11049
+2407 468 16371
+2418 468 43372
+2496 468 19751
+2979 468 27852657
+409 469 1
+1323 469 38841
+1324 469 38841
+1360 469 58174
+1365 469 4757
+1369 469 7347
+1405 469 41083
+1414 469 24500
+1422 469 50172
+1423 469 56977
+1424 469 39824
+1617 469 41083
+1626 469 53440
+1636 469 15012
+1687 469 46937
+1688 469 60234
+1689 469 10062
+1690 469 32894
+1691 469 51577
+1701 469 10868
+1896 469 42392
+1905 469 16987
+1915 469 41351
+1980 469 34565
+2034 469 37045
+2035 469 1211
+2036 469 44228
+2046 469 11243
+2057 469 53067
+2247 469 42528
+2253 469 32770
+2254 469 9565
+2255 469 13828
+2256 469 10296
+2257 469 59837
+2258 469 21590
+2259 469 14119
+2261 469 52358
+2262 469 35068
+2263 469 42225
+2264 469 51499
+2265 469 56967
+2266 469 45544
+2267 469 49485
+2268 469 48161
+2269 469 48161
+2271 469 30182
+2272 469 6088
+2273 469 27548
+2274 469 12618
+2275 469 61764
+2276 469 9678
+2322 469 56792
+2323 469 33273
+2324 469 33273
+2325 469 53688
+2327 469 20152
+2328 469 4564
+2329 469 27427
+2330 469 12068
+2331 469 29649
+2341 469 23716
+2388 469 24110
+2389 469 47610
+2390 469 47610
+2391 469 2363
+2392 469 58535
+2394 469 27608
+2395 469 31698
+2396 469 59326
+2397 469 16227
+2407 469 6147
+2418 469 59966
+2466 469 12109
+2467 469 48443
+2468 469 48443
+2469 469 41419
+2470 469 13932
+2471 469 20234
+2472 469 4233
+2473 469 51970
+2474 469 26841
+2475 469 17088
+2485 469 28745
+2496 469 43269
+2508 469 13749
+2980 469 27852657
+410 470 1
+1178 470 65519
+1179 470 65519
+1180 470 65519
+1206 470 65519
+1207 470 65519
+1208 470 65519
+1324 470 49140
+1325 470 49140
+1357 470 65519
+1358 470 65519
+1535 470 49140
+1570 470 65519
+2212 470 65520
+2220 470 65520
+2257 470 8190
+2265 470 65520
+2312 470 8190
+2320 470 65520
+2378 470 8190
+2386 470 65520
+2456 470 29687
+2464 470 16377
+2981 470 27852657
+410 471 1
+422 471 65520
+449 471 65519
+458 471 65520
+1324 471 32761
+1325 471 32761
+1365 471 32760
+1366 471 32760
+1410 471 65520
+1411 471 65520
+1419 471 32760
+1420 471 32760
+1535 471 32761
+1570 471 32761
+1615 471 32761
+1623 471 65520
+1632 471 65520
+1670 471 32761
+1687 471 32760
+1895 471 32761
+1896 471 32761
+1903 471 32760
+1905 471 32760
+1912 471 32760
+1914 471 65520
+1915 471 32760
+1950 471 32761
+1951 471 32761
+1959 471 32761
+1967 471 32760
+1968 471 32761
+1969 471 65520
+1970 471 65520
+1978 471 32761
+1980 471 32760
+2016 471 32761
+2017 471 32761
+2025 471 32761
+2033 471 32760
+2034 471 32761
+2035 471 65520
+2036 471 65520
+2044 471 1
+2046 471 65520
+2055 471 32761
+2057 471 32760
+2175 471 1
+2176 471 1
+2211 471 2
+2212 471 2
+2219 471 1
+2220 471 1
+2256 471 24571
+2257 471 49142
+2264 471 40951
+2266 471 16379
+2273 471 40950
+2274 471 65520
+2275 471 32758
+2276 471 16379
+2311 471 24572
+2312 471 49143
+2319 471 2
+2320 471 49143
+2328 471 40950
+2329 471 49141
+2330 471 32758
+2331 471 32758
+2339 471 49142
+2341 471 16379
+2377 471 49142
+2378 471 8192
+2386 471 8191
+2387 471 65520
+2394 471 16379
+2395 471 8190
+2396 471 49137
+2397 471 49138
+2405 471 16382
+2407 471 49139
+2416 471 32761
+2418 471 32760
+2455 471 40951
+2456 471 12286
+2464 471 45046
+2465 471 32760
+2472 471 24570
+2473 471 12285
+2474 471 40949
+2475 471 8189
+2483 471 24571
+2485 471 40950
+2506 471 4095
+2508 471 61426
+2982 471 27852657
+411 472 1
+414 472 65520
+416 472 1
+737 472 644
+744 472 13571
+750 472 54280
+751 472 39051
+753 472 51717
+756 472 16766
+757 472 16766
+758 472 16766
+803 472 36501
+804 472 5328
+805 472 55620
+806 472 61274
+809 472 47722
+810 472 45994
+811 472 45994
+812 472 62760
+822 472 45994
+868 472 36501
+869 472 5328
+870 472 55620
+871 472 61274
+872 472 26550
+874 472 47722
+875 472 45994
+876 472 45994
+877 472 62760
+887 472 26467
+898 472 45994
+1871 472 41252
+1872 472 41252
+1873 472 41252
+1874 472 41252
+1875 472 41252
+1876 472 41252
+1880 472 41252
+1886 472 9774
+1887 472 14405
+1891 472 50682
+1892 472 50682
+1893 472 60456
+1894 472 18047
+1895 472 53752
+1896 472 53752
+1897 472 22725
+1898 472 62912
+1900 472 34417
+1901 472 49042
+1902 472 65262
+1903 472 61800
+1904 472 61707
+1905 472 7955
+1906 472 12597
+1907 472 48852
+1908 472 32295
+1910 472 54739
+1911 472 33300
+1912 472 56015
+1913 472 20207
+1914 472 20178
+1915 472 12223
+1961 472 36917
+1962 472 7651
+1963 472 56615
+1964 472 25018
+1966 472 6553
+1967 472 14742
+1968 472 22927
+1969 472 1613
+1970 472 23904
+1980 472 11681
+2027 472 16525
+2028 472 27931
+2029 472 64986
+2030 472 25033
+2031 472 24622
+2033 472 51662
+2034 472 29699
+2035 472 17627
+2036 472 41579
+2046 472 53206
+2057 472 41525
+2388 472 19763
+2389 472 45652
+2390 472 32747
+2391 472 32748
+2392 472 24651
+2393 472 47353
+2394 472 45437
+2395 472 11603
+2396 472 49649
+2397 472 49015
+2407 472 12636
+2418 472 3371
+2496 472 4566
+2983 472 27852657
+412 473 1
+415 473 1
+429 473 1
+430 473 1
+433 473 1
+434 473 1
+549 473 1
+550 473 1
+1898 473 32761
+1907 473 32761
+1908 473 32761
+1962 473 32761
+1963 473 32761
+2028 473 32761
+2029 473 32761
+2031 473 32761
+2380 473 1
+2389 473 24572
+2390 473 24572
+2392 473 24572
+2393 473 24572
+2403 473 1
+2496 473 4096
+2497 473 32761
+2498 473 32761
+2510 473 24572
+2984 473 27852657
+413 474 1
+414 474 1
+432 474 1
+1338 474 49142
+1339 474 49142
+1343 474 2
+1344 474 49142
+1384 474 49142
+1389 474 49142
+2261 474 1
+2262 474 8191
+2271 474 8191
+2392 474 8191
+2470 474 13310
+2471 474 49142
+2508 474 8191
+2985 474 27852657
+414 475 1
+1263 475 20208
+1268 475 47236
+1269 475 27028
+1281 475 50531
+1306 475 23135
+1312 475 61425
+1339 475 10942
+1345 475 6454
+1390 475 29173
+1875 475 59071
+2234 475 14352
+2235 475 52498
+2236 475 5014
+2241 475 6454
+2242 475 14318
+2247 475 40077
+2253 475 6893
+2254 475 62299
+2255 475 59146
+2256 475 37352
+2257 475 37352
+2258 475 27023
+2259 475 26075
+2261 475 5545
+2262 475 44156
+2263 475 1671
+2264 475 26022
+2265 475 47401
+2266 475 10049
+2267 475 23737
+2268 475 381
+2269 475 19719
+2271 475 61956
+2272 475 36202
+2273 475 34239
+2274 475 29480
+2275 475 56162
+2276 475 46113
+2322 475 57128
+2323 475 60309
+2324 475 59879
+2325 475 28541
+2327 475 53773
+2328 475 2519
+2329 475 32035
+2330 475 19942
+2331 475 52402
+2341 475 6289
+2388 475 63909
+2389 475 21199
+2390 475 28972
+2391 475 47692
+2392 475 29641
+2394 475 52754
+2395 475 63453
+2396 475 43490
+2397 475 65218
+2407 475 42742
+2418 475 36453
+2466 475 37081
+2467 475 62608
+2468 475 60903
+2469 475 16727
+2470 475 58291
+2471 475 41710
+2472 475 46426
+2473 475 20941
+2474 475 4550
+2475 475 48521
+2485 475 59526
+2496 475 13998
+2508 475 2179
+2986 475 27852657
+414 476 1
+416 476 65520
+526 476 1497
+699 476 684
+700 476 59789
+701 476 59789
+706 476 52908
+712 476 61210
+741 476 54280
+742 476 53509
+744 476 8622
+747 476 20707
+748 476 20707
+757 476 20707
+794 476 33689
+795 476 34913
+796 476 61526
+797 476 11010
+800 476 18003
+801 476 58902
+802 476 58902
+811 476 14088
+821 476 58902
+859 476 33689
+860 476 34913
+861 476 61526
+862 476 11010
+863 476 19922
+865 476 18003
+866 476 58902
+867 476 58902
+876 476 14088
+886 476 52283
+897 476 58902
+1817 476 23340
+1818 476 23340
+1819 476 49105
+1820 476 12189
+1821 476 54370
+1822 476 28066
+1823 476 31922
+1824 476 3934
+1825 476 15085
+1826 476 28066
+1827 476 31922
+1828 476 9725
+1829 476 5267
+1830 476 55703
+1831 476 56763
+1832 476 19367
+1833 476 61284
+1834 476 121
+1835 476 33114
+1836 476 42932
+1839 476 33194
+1840 476 12774
+1841 476 46524
+1842 476 43732
+1846 476 14177
+1847 476 59278
+1848 476 27507
+1849 476 474
+1850 476 29924
+1851 476 29924
+1852 476 41717
+1853 476 20776
+1855 476 58375
+1856 476 43153
+1857 476 6239
+1858 476 64504
+1859 476 62335
+1860 476 32411
+1897 476 30882
+1898 476 6009
+1899 476 51127
+1901 476 15988
+1902 476 13996
+1903 476 56209
+1904 476 37333
+1905 476 58901
+1914 476 26490
+1952 476 51558
+1953 476 52645
+1954 476 39228
+1955 476 779
+1957 476 53043
+1958 476 33185
+1959 476 64902
+1960 476 3948
+1969 476 33998
+1979 476 7508
+2018 476 28911
+2019 476 34582
+2020 476 7263
+2021 476 62747
+2022 476 39345
+2024 476 28133
+2025 476 47027
+2026 476 11743
+2035 476 17407
+2045 476 29888
+2056 476 22380
+2379 476 13828
+2380 476 11520
+2381 476 60725
+2382 476 25170
+2383 476 65298
+2384 476 27675
+2385 476 16957
+2386 476 39030
+2387 476 49849
+2396 476 9816
+2406 476 19681
+2417 476 34007
+2495 476 63918
+2987 476 27852657
+415 477 1
+433 477 1
+434 477 1
+549 477 1
+550 477 1
+1877 477 43681
+1878 477 43681
+1879 477 43681
+1880 477 43681
+1881 477 43681
+1898 477 54601
+1907 477 54601
+1908 477 54601
+1962 477 54601
+1963 477 54601
+2028 477 54601
+2029 477 54601
+2389 477 12286
+2390 477 12286
+2391 477 30031
+2392 477 30031
+2393 477 42317
+2496 477 23888
+2988 477 27852657
+416 478 1
+435 478 1
+594 478 65520
+728 478 53121
+738 478 1948
+745 478 1948
+754 478 1948
+773 478 236
+774 478 236
+775 478 236
+776 478 236
+784 478 46927
+791 478 44809
+799 478 44809
+808 478 46757
+818 478 44809
+838 478 236
+839 478 236
+840 478 236
+841 478 236
+842 478 236
+849 478 46927
+856 478 44809
+864 478 44809
+873 478 46757
+883 478 24097
+894 478 44809
+1774 478 1044
+1798 478 37196
+1799 478 37196
+1800 478 37196
+1801 478 24950
+1807 478 53156
+1814 478 53156
+1831 478 42839
+1832 478 42839
+1834 478 6393
+1835 478 6393
+1836 478 55400
+1842 478 1314
+1849 478 10869
+1857 478 23234
+1876 478 44299
+1877 478 44299
+1878 478 44299
+1880 478 34458
+1881 478 23319
+1887 478 46092
+1894 478 16966
+1902 478 21948
+1911 478 64235
+1931 478 21579
+1932 478 21579
+1933 478 21579
+1934 478 21579
+1936 478 50349
+1942 478 49
+1949 478 24186
+1957 478 34987
+1966 478 57048
+1976 478 58334
+1997 478 26164
+1998 478 26164
+1999 478 26164
+2000 478 26164
+2001 478 26164
+2008 478 32257
+2015 478 57600
+2023 478 21818
+2032 478 17202
+2042 478 1070
+2053 478 8257
+2358 478 46528
+2359 478 46528
+2360 478 46528
+2361 478 46528
+2362 478 46528
+2363 478 46354
+2369 478 32969
+2376 478 60879
+2384 478 56348
+2393 478 53172
+2403 478 3125
+2414 478 7855
+2492 478 666
+2989 478 27852657
+417 479 1
+1206 479 65519
+1207 479 65519
+1208 479 65519
+1214 479 65519
+1215 479 65519
+1216 479 65519
+1357 479 49140
+1358 479 49140
+1365 479 65519
+1366 479 65519
+1570 479 49140
+1578 479 65519
+2220 479 65520
+2221 479 65520
+2265 479 8190
+2266 479 65520
+2320 479 8190
+2321 479 65520
+2386 479 8190
+2387 479 65520
+2464 479 29687
+2465 479 16377
+2990 479 27852657
+417 480 1
+422 480 1
+449 480 1
+1357 480 32761
+1358 480 32761
+1365 480 32761
+1366 480 32761
+1410 480 32761
+1411 480 32761
+1623 480 32761
+2265 480 24572
+2266 480 24572
+2274 480 1
+2275 480 24572
+2320 480 1
+2321 480 1
+2329 480 1
+2330 480 24572
+2386 480 1
+2387 480 1
+2395 480 1
+2396 480 24572
+2464 480 32761
+2465 480 32761
+2473 480 32761
+2474 480 4096
+2991 480 27852657
+418 481 1
+425 481 65520
+444 481 19564
+453 481 34553
+461 481 3054
+462 481 35516
+463 481 962
+562 481 2437
+569 481 12492
+579 481 47199
+625 481 158
+626 481 27163
+627 481 65043
+628 481 42951
+638 481 62235
+740 481 55965
+748 481 34419
+758 481 54979
+822 481 62432
+876 481 20529
+877 481 65094
+887 481 30005
+898 481 29808
+1895 481 24352
+1896 481 40940
+1897 481 19610
+1898 481 19610
+1900 481 44291
+1901 481 44291
+1902 481 44291
+1903 481 42662
+1904 481 34816
+1905 481 24153
+1906 481 21231
+1907 481 21231
+1908 481 21231
+1910 481 47707
+1911 481 47707
+1912 481 49719
+1913 481 17309
+1914 481 11750
+1915 481 48676
+1961 481 56688
+1962 481 56688
+1963 481 56688
+1964 481 56688
+1966 481 47584
+1967 481 32152
+1968 481 31115
+1969 481 27435
+1970 481 24649
+1980 481 31783
+2027 481 55408
+2028 481 55408
+2029 481 55408
+2030 481 55408
+2031 481 55408
+2033 481 6387
+2034 481 37178
+2035 481 14066
+2036 481 37688
+2046 481 17012
+2057 481 56760
+2388 481 49331
+2389 481 49331
+2390 481 49331
+2391 481 49331
+2392 481 49331
+2393 481 49331
+2394 481 35052
+2395 481 63137
+2396 481 16011
+2397 481 52709
+2407 481 63690
+2418 481 10738
+2496 481 56864
+2992 481 27852657
+419 482 1
+455 482 65520
+531 482 61427
+571 482 39584
+611 482 58440
+620 482 45500
+630 482 5915
+709 482 61427
+750 482 39584
+795 482 51359
+804 482 25479
+814 482 17745
+860 482 58440
+869 482 45500
+879 482 17745
+890 482 5915
+1362 482 38845
+1399 482 21000
+1407 482 29780
+1416 482 56456
+1574 482 42821
+1628 482 42483
+1653 482 41650
+1659 482 57537
+1666 482 36537
+1674 482 11629
+1683 482 35592
+1693 482 49565
+1853 482 63246
+1907 482 22808
+1972 482 50557
+2011 482 43238
+2019 482 43209
+2028 482 25463
+2038 482 17594
+2049 482 16602
+2163 482 21965
+2170 482 21965
+2178 482 1981
+2179 482 1981
+2184 482 63314
+2188 482 63314
+2193 482 63314
+2199 482 56197
+2206 482 63411
+2214 482 30209
+2223 482 2108
+2224 482 2108
+2226 482 2108
+2233 482 33508
+2238 482 33508
+2244 482 59070
+2251 482 41384
+2259 482 17462
+2268 482 15566
+2278 482 27117
+2279 482 27117
+2281 482 27117
+2284 482 27117
+2293 482 9526
+2299 482 8738
+2306 482 26157
+2314 482 9649
+2323 482 38245
+2333 482 62484
+2344 482 28391
+2345 482 28391
+2347 482 28391
+2350 482 28391
+2354 482 28391
+2365 482 8051
+2372 482 63432
+2380 482 4024
+2389 482 30864
+2399 482 53860
+2410 482 16280
+2422 482 25328
+2423 482 25328
+2425 482 25328
+2428 482 25328
+2432 482 25328
+2437 482 25328
+2443 482 25033
+2450 482 51889
+2458 482 53618
+2467 482 63393
+2477 482 39043
+2488 482 11375
+2500 482 39789
+2993 482 27852657
+419 483 1
+455 483 65520
+620 483 1
+737 483 21223
+744 483 35404
+750 483 62823
+751 483 33261
+753 483 10172
+756 483 41764
+757 483 41764
+758 483 41764
+803 483 30586
+804 483 30838
+805 483 49171
+806 483 28251
+809 483 42908
+810 483 17781
+811 483 17781
+812 483 59545
+822 483 17781
+868 483 30586
+869 483 30837
+870 483 49171
+871 483 28251
+872 483 62652
+874 483 42908
+875 483 17781
+876 483 17781
+877 483 59545
+887 483 35562
+898 483 17781
+1884 483 58834
+1885 483 58834
+1886 483 13652
+1887 483 8270
+1891 483 30264
+1892 483 30264
+1893 483 50603
+1894 483 57058
+1895 483 30538
+1896 483 30538
+1897 483 39731
+1898 483 13294
+1900 483 56061
+1901 483 38492
+1902 483 38363
+1903 483 19065
+1904 483 31699
+1905 483 1161
+1906 483 27494
+1907 483 9403
+1908 483 13915
+1910 483 1808
+1911 483 55134
+1912 483 55280
+1913 483 65429
+1914 483 49155
+1915 483 47994
+1961 483 11698
+1962 483 1797
+1963 483 7470
+1964 483 12992
+1966 483 45152
+1967 483 26375
+1968 483 11993
+1969 483 33656
+1970 483 22868
+1980 483 40395
+2027 483 23052
+2028 483 40790
+2029 483 52307
+2030 483 18312
+2031 483 1550
+2033 483 39279
+2034 483 36831
+2035 483 34312
+2036 483 50296
+2046 483 24427
+2057 483 49553
+2388 483 55353
+2389 483 6223
+2390 483 48483
+2391 483 48483
+2392 483 18715
+2393 483 43391
+2394 483 39211
+2395 483 10060
+2396 483 22427
+2397 483 19441
+2407 483 65333
+2418 483 26722
+2496 483 13398
+2994 483 27852657
+420 484 1
+2396 484 65520
+2995 484 27852657
+421 485 1
+422 485 1
+453 485 34976
+461 485 24806
+462 485 7599
+463 485 38144
+569 485 2585
+579 485 31230
+624 485 36084
+625 485 47570
+626 485 22764
+627 485 19134
+628 485 25454
+638 485 32368
+748 485 19269
+758 485 26427
+822 485 33947
+875 485 26994
+876 485 53889
+877 485 49039
+887 485 49673
+898 485 48094
+1894 485 60542
+1895 485 23497
+1896 485 23497
+1897 485 19175
+1898 485 19175
+1900 485 35436
+1901 485 35436
+1902 485 33521
+1903 485 30924
+1904 485 60937
+1905 485 40619
+1906 485 59234
+1907 485 59234
+1908 485 59234
+1910 485 33919
+1911 485 62765
+1912 485 3058
+1913 485 40480
+1914 485 13551
+1915 485 4092
+1961 485 6248
+1962 485 6248
+1963 485 6248
+1964 485 6248
+1966 485 16917
+1967 485 56035
+1968 485 37372
+1969 485 18647
+1970 485 3228
+1980 485 50709
+2027 485 7235
+2028 485 7235
+2029 485 7235
+2030 485 7235
+2031 485 7235
+2033 485 56668
+2034 485 53082
+2035 485 35607
+2036 485 25033
+2046 485 59401
+2057 485 34199
+2388 485 3782
+2389 485 3782
+2390 485 3782
+2391 485 3782
+2392 485 3782
+2393 485 3782
+2394 485 19507
+2395 485 42532
+2396 485 21362
+2397 485 19500
+2407 485 21602
+2418 485 52134
+2496 485 27671
+2996 485 27852657
+422 486 1
+1365 486 60764
+1414 486 29970
+1422 486 6498
+1423 486 55492
+1424 486 25522
+1626 486 25997
+1636 486 10864
+1687 486 33539
+1688 486 40509
+1689 486 34011
+1690 486 10676
+1691 486 20737
+1701 486 35395
+1905 486 17112
+1915 486 38543
+1980 486 52050
+2034 486 8083
+2035 486 33374
+2036 486 37826
+2046 486 45545
+2057 486 28890
+2247 486 28366
+2254 486 17926
+2255 486 48106
+2256 486 28633
+2257 486 28633
+2258 486 32421
+2259 486 59272
+2261 486 57720
+2262 486 11259
+2263 486 43572
+2264 486 20604
+2265 486 26860
+2266 486 14028
+2267 486 41716
+2268 486 45273
+2269 486 45273
+2271 486 40997
+2272 486 32613
+2273 486 31004
+2274 486 45282
+2275 486 21315
+2276 486 60681
+2322 486 21002
+2323 486 32572
+2324 486 32572
+2325 486 32572
+2327 486 47173
+2328 486 49778
+2329 486 12048
+2330 486 50569
+2331 486 58078
+2341 486 22165
+2388 486 57804
+2389 486 29113
+2390 486 29113
+2391 486 29113
+2392 486 15181
+2394 486 56527
+2395 486 7445
+2396 486 5348
+2397 486 36029
+2407 486 40165
+2418 486 24289
+2466 486 2278
+2467 486 65300
+2468 486 65300
+2469 486 65300
+2470 486 47189
+2471 486 38209
+2472 486 22966
+2473 486 18197
+2474 486 15171
+2475 486 14075
+2485 486 10958
+2496 486 65058
+2508 486 24318
+2997 486 27852657
+423 487 1
+453 487 46340
+461 487 61091
+462 487 54752
+463 487 8412
+569 487 5354
+579 487 42267
+624 487 60089
+625 487 44762
+626 487 49192
+627 487 857
+628 487 4187
+638 487 35853
+748 487 51035
+758 487 41233
+822 487 61375
+875 487 46021
+876 487 42880
+877 487 40427
+887 487 16879
+898 487 56878
+1894 487 4979
+1895 487 3450
+1896 487 3450
+1897 487 63538
+1898 487 63538
+1900 487 2205
+1901 487 2205
+1902 487 4120
+1903 487 11164
+1904 487 16323
+1905 487 52590
+1906 487 43103
+1907 487 43103
+1908 487 43103
+1910 487 61323
+1911 487 32477
+1912 487 45765
+1913 487 56187
+1914 487 5271
+1915 487 38003
+1961 487 63778
+1962 487 63778
+1963 487 63778
+1964 487 63778
+1966 487 39503
+1967 487 60987
+1968 487 8597
+1969 487 61797
+1970 487 19635
+1980 487 53045
+2027 487 9947
+2028 487 9947
+2029 487 9947
+2030 487 9947
+2031 487 9947
+2033 487 2529
+2034 487 9125
+2035 487 31728
+2036 487 56512
+2046 487 52678
+2057 487 32237
+2388 487 17842
+2389 487 17842
+2390 487 17842
+2391 487 17842
+2392 487 17842
+2393 487 17842
+2394 487 16334
+2395 487 22889
+2396 487 29472
+2397 487 51527
+2407 487 30499
+2418 487 54740
+2496 487 31304
+2998 487 27852657
+424 488 1
+460 488 65520
+536 488 61427
+576 488 39584
+616 488 58440
+625 488 45500
+635 488 5915
+714 488 61427
+755 488 39584
+800 488 51359
+809 488 25479
+819 488 17745
+865 488 58440
+874 488 45500
+884 488 17745
+895 488 5915
+1367 488 38845
+1404 488 21000
+1412 488 29780
+1421 488 56456
+1579 488 42821
+1633 488 42483
+1663 488 41650
+1664 488 57537
+1671 488 36537
+1679 488 11629
+1688 488 35592
+1698 488 49565
+1858 488 63246
+1912 488 22808
+1977 488 50557
+2016 488 43238
+2024 488 43209
+2033 488 25463
+2043 488 17594
+2054 488 16602
+2168 488 21965
+2175 488 21965
+2198 488 1981
+2199 488 1981
+2201 488 63314
+2202 488 63314
+2203 488 63314
+2204 488 56197
+2211 488 63411
+2219 488 30209
+2243 488 2108
+2244 488 2108
+2245 488 2108
+2247 488 33508
+2248 488 33508
+2249 488 59070
+2256 488 41384
+2264 488 17462
+2273 488 15566
+2298 488 27117
+2299 488 27117
+2300 488 27117
+2301 488 27117
+2303 488 9526
+2304 488 8738
+2311 488 26157
+2319 488 9649
+2328 488 38245
+2338 488 62484
+2364 488 28391
+2365 488 28391
+2366 488 28391
+2367 488 28391
+2368 488 28391
+2370 488 8051
+2377 488 63432
+2385 488 4024
+2394 488 30864
+2404 488 53860
+2415 488 16280
+2442 488 25328
+2443 488 25328
+2444 488 25328
+2445 488 25328
+2446 488 25328
+2447 488 25328
+2448 488 25033
+2455 488 51889
+2463 488 53618
+2472 488 63393
+2482 488 39043
+2493 488 11375
+2505 488 39789
+2999 488 27852657
+424 489 1
+453 489 47830
+461 489 11080
+462 489 9788
+463 489 27479
+569 489 58544
+579 489 57564
+624 489 49634
+625 489 43314
+626 489 32234
+627 489 42227
+628 489 7963
+638 489 43399
+748 489 45773
+758 489 43907
+822 489 32989
+875 489 58605
+876 489 30182
+877 489 32436
+887 489 45955
+898 489 56365
+1895 489 48714
+1896 489 48714
+1897 489 26177
+1898 489 26177
+1900 489 10824
+1901 489 10824
+1902 489 10824
+1903 489 30607
+1904 489 39151
+1905 489 38715
+1906 489 8738
+1907 489 8738
+1908 489 8738
+1910 489 26682
+1911 489 26682
+1912 489 18647
+1913 489 57458
+1914 489 34799
+1915 489 38146
+1961 489 18350
+1962 489 18350
+1963 489 18350
+1964 489 18350
+1966 489 47142
+1967 489 3447
+1968 489 24116
+1969 489 12315
+1970 489 31224
+1980 489 31963
+2027 489 38426
+2028 489 38426
+2029 489 38426
+2030 489 38426
+2031 489 38426
+2033 489 36172
+2034 489 25813
+2035 489 21564
+2036 489 40765
+2046 489 48670
+2057 489 16301
+2388 489 22559
+2389 489 22559
+2390 489 22559
+2391 489 22559
+2392 489 22559
+2393 489 22559
+2394 489 17953
+2395 489 44074
+2396 489 31553
+2397 489 13620
+2407 489 20890
+2418 489 58693
+2496 489 64954
+3000 489 27852657
+425 490 1
+462 490 65520
+538 490 61427
+578 490 39584
+618 490 58440
+627 490 45500
+637 490 5915
+716 490 61427
+757 490 39584
+802 490 51359
+811 490 25479
+821 490 17745
+867 490 58440
+876 490 45500
+886 490 17745
+897 490 5915
+1369 490 38845
+1413 490 21000
+1414 490 29780
+1423 490 56456
+1581 490 42821
+1635 490 42483
+1678 490 41650
+1679 490 57537
+1680 490 36537
+1681 490 11629
+1690 490 35592
+1700 490 49565
+1860 490 63246
+1914 490 22808
+1979 490 50557
+2025 490 43238
+2026 490 43209
+2035 490 25463
+2045 490 17594
+2056 490 16602
+2211 490 21965
+2212 490 21965
+2213 490 1981
+2214 490 1981
+2216 490 63314
+2217 490 63314
+2218 490 63314
+2219 490 56197
+2220 490 63411
+2221 490 30209
+2258 490 2108
+2259 490 2108
+2260 490 2108
+2262 490 33508
+2263 490 33508
+2264 490 59070
+2265 490 41384
+2266 490 17462
+2275 490 15566
+2313 490 27117
+2314 490 27117
+2315 490 27117
+2316 490 27117
+2318 490 9526
+2319 490 8738
+2320 490 26157
+2321 490 9649
+2330 490 38245
+2340 490 62484
+2379 490 28391
+2380 490 28391
+2381 490 28391
+2382 490 28391
+2383 490 28391
+2385 490 8051
+2386 490 63432
+2387 490 4024
+2396 490 30864
+2406 490 53860
+2417 490 16280
+2457 490 25328
+2458 490 25328
+2459 490 25328
+2460 490 25328
+2461 490 25328
+2462 490 25328
+2463 490 25033
+2464 490 51889
+2465 490 53618
+2474 490 63393
+2484 490 39043
+2495 490 11375
+2507 490 39789
+3001 490 27852657
+426 491 1
+539 491 1
+718 491 1
+1375 491 24572
+1587 491 24572
+1591 491 40955
+1866 491 61427
+1870 491 28666
+1873 491 33481
+1874 491 25476
+1875 491 62331
+1908 491 29498
+1910 491 21657
+1913 491 34245
+1914 491 34245
+1915 491 34245
+1961 491 33704
+1962 491 33704
+1963 491 63202
+1964 491 61248
+1967 491 62116
+1968 491 20895
+1969 491 20895
+1970 491 55140
+1980 491 20895
+2027 491 33704
+2028 491 33704
+2029 491 63202
+2030 491 61248
+2031 491 61248
+2033 491 62116
+2034 491 20895
+2035 491 20895
+2036 491 55140
+2046 491 41790
+2057 491 20895
+2223 491 37614
+2224 491 37614
+2225 491 8597
+2226 491 24513
+2227 491 25802
+2228 491 61573
+2229 491 21214
+2230 491 58683
+2231 491 32881
+2232 491 61573
+2233 491 21214
+2234 491 8750
+2235 491 30386
+2236 491 63026
+2237 491 61573
+2238 491 21214
+2239 491 27692
+2240 491 47992
+2241 491 23344
+2242 491 25839
+2245 491 58707
+2246 491 46105
+2247 491 53854
+2248 491 2001
+2252 491 27726
+2253 491 15124
+2254 491 22873
+2255 491 44290
+2256 491 10728
+2257 491 10728
+2258 491 36602
+2259 491 62002
+2261 491 16841
+2262 491 24590
+2263 491 33405
+2264 491 9392
+2265 491 27073
+2266 491 16345
+2267 491 44829
+2268 491 4708
+2269 491 64539
+2271 491 61189
+2272 491 63190
+2273 491 28334
+2274 491 29055
+2275 491 63134
+2276 491 46789
+2322 491 65025
+2323 491 24904
+2324 491 19214
+2325 491 36211
+2327 491 40177
+2328 491 7904
+2329 491 22571
+2330 491 30598
+2331 491 28857
+2341 491 47589
+2388 491 33484
+2389 491 19220
+2390 491 8813
+2391 491 65311
+2392 491 13009
+2394 491 30991
+2395 491 49254
+2396 491 64481
+2397 491 13317
+2407 491 54239
+2418 491 6650
+2466 491 56064
+2467 491 40008
+2468 491 41929
+2469 491 54610
+2470 491 62851
+2471 491 10287
+2472 491 38161
+2473 491 36492
+2474 491 64607
+2475 491 48892
+2485 491 14312
+2496 491 31436
+2508 491 4197
+3002 491 27852657
+427 492 1
+428 492 1
+430 492 57447
+431 492 5371
+432 492 5370
+456 492 9596
+458 492 64265
+461 492 48768
+462 492 48768
+463 492 48768
+570 492 18615
+571 492 18615
+572 492 28211
+573 492 31676
+576 492 23133
+577 492 4960
+578 492 4960
+579 492 53728
+628 492 4960
+749 492 18615
+750 492 18615
+751 492 28211
+752 492 31676
+753 492 31676
+755 492 23133
+756 492 4960
+757 492 4960
+758 492 53728
+812 492 9920
+877 492 4960
+1371 492 30878
+1372 492 30878
+1373 492 64188
+1374 492 19977
+1375 492 54620
+1376 492 13564
+1377 492 3620
+1378 492 45713
+1379 492 56614
+1380 492 13564
+1381 492 3620
+1382 492 7723
+1383 492 9512
+1384 492 18419
+1385 492 13564
+1386 492 3620
+1387 492 37901
+1388 492 46977
+1389 492 7942
+1390 492 55044
+1393 492 14312
+1394 492 49012
+1395 492 1793
+1396 492 30625
+1400 492 28171
+1401 492 62871
+1402 492 15652
+1403 492 62786
+1404 492 64681
+1405 492 64681
+1406 492 40375
+1407 492 48376
+1409 492 52476
+1410 492 5257
+1411 492 21570
+1412 492 6447
+1413 492 20600
+1414 492 21440
+1415 492 11441
+1416 492 19442
+1417 492 5360
+1419 492 54427
+1420 492 19531
+1421 492 36625
+1422 492 63246
+1423 492 30822
+1424 492 9382
+1627 492 34485
+1628 492 42486
+1629 492 28404
+1630 492 65191
+1632 492 64867
+1633 492 44381
+1634 492 27402
+1635 492 38793
+1636 492 54027
+1691 492 44645
+1906 492 32798
+1907 492 42089
+1908 492 33041
+1909 492 26134
+1910 492 15619
+1912 492 505
+1913 492 11974
+1914 492 13127
+1915 492 9511
+1970 492 30639
+2036 492 51515
+2267 492 39149
+2268 492 45662
+2269 492 14070
+2270 492 18649
+2271 492 17438
+2272 492 32997
+2273 492 12696
+2274 492 13413
+2275 492 36863
+2276 492 3061
+2331 492 62788
+2397 492 59003
+2475 492 61319
+3003 492 27852657
+428 493 1
+2391 493 65520
+3004 493 27852657
+429 494 1
+432 494 1
+1371 494 2
+1372 494 2
+1374 494 2
+1380 494 49142
+1381 494 32763
+1384 494 32761
+1385 494 49142
+1386 494 32763
+1389 494 1
+1390 494 32761
+1583 494 2
+1584 494 2
+1586 494 2
+1589 494 2
+1597 494 49142
+1598 494 32763
+1602 494 32761
+1862 494 2
+1863 494 2
+1865 494 2
+1868 494 2
+1871 494 2
+1872 494 4
+1873 494 2
+1874 494 2
+1875 494 2
+2223 494 1
+2224 494 1
+2226 494 1
+2229 494 1
+2232 494 43681
+2233 494 43682
+2234 494 43681
+2235 494 43681
+2236 494 43681
+2237 494 43681
+2238 494 43682
+2239 494 43681
+2240 494 43681
+2241 494 21841
+2242 494 43681
+2267 494 16381
+2268 494 24572
+2269 494 43681
+2271 494 49142
+2272 494 49141
+2322 494 16381
+2323 494 24572
+2324 494 43681
+2325 494 43681
+2327 494 49141
+2388 494 16381
+2389 494 24572
+2390 494 43681
+2391 494 43681
+2392 494 2
+2466 494 37200
+2467 494 34133
+2468 494 54603
+2469 494 54603
+2470 494 46415
+2471 494 13653
+2475 494 8190
+2485 494 8190
+2496 494 8190
+2508 494 65182
+3005 494 27852657
+430 495 1
+1382 495 32761
+1387 495 32761
+1599 495 32761
+1600 495 32761
+2269 495 24571
+2324 495 24571
+2325 495 24571
+2390 495 24571
+2391 495 24571
+2392 495 24571
+2468 495 36856
+2469 495 36856
+2470 495 36856
+2471 495 36856
+2508 495 6655
+3006 495 27852657
+431 496 1
+432 496 1
+1382 496 21965
+1383 496 24572
+1384 496 24572
+1389 496 26175
+1390 496 1603
+1395 496 38276
+1401 496 36714
+1402 496 58699
+1403 496 1900
+1404 496 5383
+1405 496 5383
+1406 496 55261
+1407 496 30378
+1409 496 33751
+1410 496 35427
+1411 496 39308
+1412 496 17966
+1413 496 40004
+1414 496 34621
+1415 496 1992
+1416 496 25357
+1417 496 1402
+1419 496 30550
+1420 496 6269
+1421 496 13803
+1422 496 17967
+1423 496 24385
+1424 496 55285
+1627 496 30647
+1628 496 29061
+1629 496 34493
+1630 496 34930
+1632 496 22554
+1633 496 25932
+1634 496 23673
+1635 496 49711
+1636 496 5814
+1691 496 16050
+1906 496 55814
+1907 496 33833
+1908 496 34074
+1909 496 63108
+1910 496 46229
+1912 496 56819
+1913 496 34408
+1914 496 64671
+1915 496 34457
+1970 496 39160
+2036 496 23110
+2267 496 38929
+2268 496 55615
+2269 496 14680
+2270 496 55365
+2271 496 21040
+2272 496 26607
+2273 496 16608
+2274 496 64045
+2275 496 26175
+2276 496 30024
+2331 496 62797
+2397 496 51723
+2475 496 44680
+3007 496 27852657
+432 497 1
+1384 497 54601
+1390 497 10920
+1602 497 10920
+1629 497 60060
+1684 497 60060
+1685 497 60060
+1886 497 43681
+1893 497 43681
+1901 497 43681
+1908 497 43679
+1910 497 10920
+1963 497 38220
+1964 497 38220
+2029 497 43681
+2030 497 43681
+2031 497 21841
+2247 497 30031
+2248 497 2
+2254 497 30031
+2255 497 2
+2262 497 30031
+2263 497 2
+2269 497 30031
+2271 497 17745
+2272 497 23207
+2324 497 34126
+2325 497 34126
+2327 497 9556
+2390 497 42316
+2391 497 42316
+2392 497 61426
+2468 497 34808
+2469 497 34808
+2470 497 27983
+2471 497 56649
+2472 497 43681
+2473 497 43681
+2474 497 43681
+2475 497 19793
+2485 497 19451
+2496 497 5460
+2508 497 39076
+3008 497 27852657
+433 498 1
+552 498 15228
+724 498 43314
+725 498 26838
+726 498 26838
+737 498 11497
+744 498 48360
+750 498 8626
+751 498 59094
+753 498 50549
+756 498 62994
+757 498 62994
+758 498 62994
+803 498 64547
+804 498 10956
+805 498 42790
+806 498 63466
+809 498 30653
+810 498 60712
+811 498 60712
+812 498 58185
+822 498 60712
+868 498 64547
+869 498 10956
+870 498 42790
+871 498 63466
+872 498 48392
+874 498 30653
+875 498 60712
+876 498 60712
+877 498 58185
+887 498 55903
+898 498 60712
+1862 498 4809
+1863 498 4809
+1864 498 47592
+1865 498 22589
+1866 498 17780
+1867 498 2566
+1868 498 41247
+1869 498 42056
+1870 498 24276
+1871 498 2566
+1872 498 41247
+1873 498 43083
+1874 498 29878
+1875 498 5602
+1876 498 7191
+1877 498 6506
+1878 498 52676
+1879 498 31701
+1880 498 63088
+1881 498 57486
+1884 498 52094
+1885 498 28531
+1886 498 22682
+1887 498 49550
+1891 498 19079
+1892 498 61037
+1893 498 55188
+1894 498 47892
+1895 498 62581
+1896 498 62581
+1897 498 4358
+1898 498 46061
+1900 498 49531
+1901 498 20587
+1902 498 47239
+1903 498 5433
+1904 498 25489
+1905 498 28429
+1906 498 18569
+1907 498 58403
+1908 498 17365
+1910 498 49737
+1911 498 1863
+1912 498 52963
+1913 498 8673
+1914 498 43540
+1915 498 15111
+1961 498 27217
+1962 498 14263
+1963 498 58512
+1964 498 8280
+1966 498 19972
+1967 498 40318
+1968 498 34966
+1969 498 47978
+1970 498 35018
+1980 498 19907
+2027 498 51625
+2028 498 52637
+2029 498 2536
+2030 498 15772
+2031 498 59822
+2033 498 29063
+2034 498 34241
+2035 498 39258
+2036 498 19928
+2046 498 7425
+2057 498 53039
+2388 498 37342
+2389 498 22988
+2390 498 35680
+2391 498 25695
+2392 498 54973
+2393 498 42837
+2394 498 55891
+2395 498 64693
+2396 498 45746
+2397 498 40038
+2407 498 59355
+2418 498 5783
+2496 498 16280
+3009 498 27852657
+434 499 1
+540 499 65520
+541 499 4601
+542 499 30678
+543 499 30678
+550 499 1
+719 499 65520
+720 499 4601
+721 499 30678
+722 499 30678
+723 499 4602
+724 499 55441
+725 499 30678
+751 499 53758
+805 499 53758
+806 499 15116
+870 499 53758
+871 499 15116
+872 499 15116
+1862 499 5041
+1863 499 5041
+1864 499 49141
+1865 499 40376
+1866 499 35335
+1867 499 20160
+1868 499 53688
+1869 499 43881
+1870 499 8546
+1871 499 9240
+1872 499 42768
+1873 499 47150
+1874 499 45506
+1875 499 36960
+1876 499 9240
+1877 499 42768
+1878 499 50930
+1879 499 27865
+1880 499 61320
+1881 499 24360
+1908 499 63417
+1963 499 63417
+1964 499 20568
+2029 499 24988
+2030 499 36536
+2031 499 14696
+2388 499 27300
+2389 499 51227
+2390 499 50132
+2391 499 57266
+2392 499 26041
+2393 499 15646
+2418 499 63312
+2496 499 43544
+3010 499 27852657
+435 500 1
+442 500 47936
+450 500 54446
+459 500 54446
+575 500 6054
+594 500 44904
+600 500 21074
+607 500 38659
+615 500 42584
+624 500 7857
+634 500 56249
+754 500 4930
+818 500 12225
+856 500 65362
+864 500 30235
+873 500 60653
+883 500 42735
+894 500 21238
+1801 500 52772
+1807 500 23705
+1814 500 23705
+1831 500 6772
+1832 500 6772
+1834 500 38365
+1835 500 38365
+1836 500 36606
+1842 500 55125
+1849 500 6502
+1857 500 48318
+1876 500 38131
+1877 500 38131
+1878 500 38131
+1880 500 18827
+1881 500 30071
+1887 500 54745
+1894 500 15666
+1902 500 21438
+1911 500 44236
+1931 500 47188
+1932 500 47188
+1933 500 47188
+1934 500 47188
+1936 500 65314
+1942 500 61667
+1949 500 12871
+1957 500 64435
+1966 500 48676
+1976 500 21518
+1997 500 50154
+1998 500 50154
+1999 500 50154
+2000 500 50154
+2001 500 50154
+2008 500 32423
+2015 500 47591
+2023 500 24698
+2032 500 42610
+2042 500 51315
+2053 500 29406
+2358 500 3731
+2359 500 3731
+2360 500 3731
+2361 500 3731
+2362 500 3731
+2363 500 3731
+2369 500 14782
+2376 500 6426
+2384 500 10974
+2393 500 589
+2403 500 19958
+2414 500 5374
+2492 500 62906
+3011 500 27852657
+436 501 1
+444 501 65520
+453 501 1
+461 501 25194
+462 501 49194
+463 501 49193
+556 501 7799
+562 501 57722
+569 501 7799
+579 501 44898
+625 501 270
+626 501 33706
+627 501 63656
+628 501 19475
+638 501 23770
+733 501 25243
+740 501 40278
+748 501 25243
+758 501 34381
+822 501 11888
+876 501 44516
+877 501 51766
+887 501 47867
+898 501 59749
+1888 501 44736
+1895 501 14447
+1896 501 35232
+1897 501 42720
+1898 501 42720
+1900 501 5103
+1901 501 5103
+1902 501 5103
+1903 501 19757
+1904 501 46798
+1905 501 11566
+1906 501 7059
+1907 501 7059
+1908 501 7059
+1910 501 25712
+1911 501 25712
+1912 501 26472
+1913 501 12379
+1914 501 29683
+1915 501 64629
+1961 501 1072
+1962 501 1072
+1963 501 1072
+1964 501 1072
+1966 501 40315
+1967 501 31177
+1968 501 59146
+1969 501 24606
+1970 501 40750
+1980 501 900
+2027 501 47299
+2028 501 47299
+2029 501 47299
+2030 501 47299
+2031 501 47299
+2033 501 857
+2034 501 53867
+2035 501 30710
+2036 501 6488
+2046 501 64549
+2057 501 48406
+2388 501 31354
+2389 501 31354
+2390 501 31354
+2391 501 31354
+2392 501 31354
+2393 501 31354
+2394 501 27680
+2395 501 34326
+2396 501 23519
+2397 501 25789
+2407 501 10321
+2418 501 40165
+2496 501 23344
+3012 501 27852657
+437 502 1
+445 502 1
+446 502 1
+454 502 1
+455 502 1
+456 502 1
+570 502 1
+571 502 1
+572 502 1
+573 502 1
+749 502 1
+750 502 1
+751 502 1
+752 502 1
+753 502 1
+1906 502 32761
+1907 502 32761
+1908 502 32761
+1909 502 32761
+1910 502 32761
+1911 502 32761
+2397 502 24573
+3013 502 27852657
+438 503 1
+2397 503 65520
+3014 503 27852657
+439 504 1
+1895 504 58226
+1896 504 58226
+1897 504 50318
+1898 504 50318
+1900 504 22624
+1901 504 22624
+1902 504 22624
+1903 504 9520
+1904 504 40147
+1905 504 47442
+1906 504 46532
+1907 504 46532
+1908 504 46532
+1910 504 39237
+1911 504 39237
+1912 504 41565
+1913 504 12173
+1914 504 1511
+1915 504 19590
+1961 504 52158
+1962 504 52158
+1963 504 52158
+1964 504 52158
+1966 504 51084
+1967 504 59962
+1968 504 14545
+1969 504 19350
+1970 504 16768
+1980 504 62699
+2027 504 54420
+2028 504 54420
+2029 504 54420
+2030 504 54420
+2031 504 54420
+2033 504 27048
+2034 504 59216
+2035 504 43674
+2036 504 34128
+2046 504 63812
+2057 504 1113
+2388 504 27587
+2389 504 27587
+2390 504 27587
+2391 504 27587
+2392 504 27587
+2393 504 27587
+2394 504 27102
+2395 504 43546
+2396 504 33156
+2397 504 56060
+2407 504 35356
+2418 504 7864
+2496 504 45047
+3015 504 27852657
+440 505 1
+1395 505 42888
+1401 505 21816
+1402 505 28482
+1403 505 20744
+1404 505 49534
+1405 505 49534
+1406 505 47089
+1407 505 31442
+1409 505 22436
+1410 505 33747
+1411 505 55239
+1412 505 33134
+1413 505 17973
+1414 505 33960
+1415 505 41341
+1416 505 30447
+1417 505 30447
+1419 505 20889
+1420 505 55630
+1421 505 60156
+1422 505 49055
+1423 505 50622
+1424 505 16662
+1627 505 22043
+1628 505 49734
+1629 505 49734
+1630 505 20584
+1632 505 1485
+1633 505 45974
+1634 505 44482
+1635 505 30893
+1636 505 56328
+1691 505 39666
+1906 505 59251
+1907 505 30117
+1908 505 30117
+1909 505 36479
+1910 505 36420
+1912 505 57439
+1913 505 21613
+1914 505 2900
+1915 505 43950
+1970 505 46830
+2036 505 7164
+2267 505 46571
+2268 505 12779
+2269 505 12779
+2270 505 20057
+2271 505 17285
+2272 505 53216
+2273 505 6399
+2274 505 61358
+2275 505 58667
+2276 505 38655
+2331 505 12348
+2397 505 17135
+2475 505 9411
+3016 505 27852657
+441 506 1
+1356 506 65519
+1357 506 65519
+1358 506 65519
+1364 506 65519
+1365 506 65519
+1366 506 65519
+1402 506 49140
+1403 506 49140
+1410 506 65519
+1411 506 65519
+1615 506 49140
+1623 506 65519
+2265 506 65520
+2266 506 65520
+2274 506 8190
+2275 506 65520
+2329 506 8190
+2330 506 65520
+2395 506 8190
+2396 506 65520
+2473 506 29687
+2474 506 16377
+3017 506 27852657
+441 507 1
+449 507 1
+458 507 1
+1402 507 32761
+1403 507 32761
+1410 507 32761
+1411 507 32761
+1419 507 32761
+1420 507 32761
+1615 507 32761
+1623 507 32761
+1632 507 1
+1687 507 32761
+1903 507 32761
+1904 507 32761
+1905 507 32761
+1912 507 32761
+1913 507 32761
+1914 507 1
+1915 507 32761
+1967 507 32761
+1968 507 32761
+1969 507 1
+1970 507 1
+1980 507 32761
+2033 507 32761
+2034 507 32761
+2035 507 1
+2036 507 1
+2046 507 1
+2057 507 32761
+2256 507 1
+2257 507 1
+2264 507 24571
+2265 507 24571
+2266 507 24570
+2273 507 24571
+2274 507 49142
+2275 507 8191
+2276 507 49142
+2319 507 65520
+2320 507 65520
+2321 507 65520
+2328 507 24571
+2329 507 49142
+2330 507 8191
+2331 507 32763
+2341 507 49142
+2394 507 49142
+2395 507 8192
+2396 507 57333
+2397 507 16383
+2407 507 16382
+2418 507 32761
+2472 507 40951
+2473 507 12286
+2474 507 20476
+2475 507 57332
+2485 507 24571
+2508 507 4095
+3018 507 27852657
+442 508 1
+753 508 44666
+756 508 6705
+757 508 6705
+758 508 6705
+803 508 25916
+804 508 25916
+805 508 25916
+806 508 25916
+809 508 15602
+810 508 40274
+811 508 40274
+812 508 46979
+822 508 40274
+868 508 25916
+869 508 25916
+870 508 25916
+871 508 25916
+872 508 25916
+874 508 15602
+875 508 40274
+876 508 40274
+877 508 46979
+887 508 15027
+898 508 40274
+1887 508 39202
+1891 508 36446
+1892 508 36446
+1893 508 36446
+1894 508 21206
+1895 508 55236
+1896 508 55236
+1897 508 5670
+1898 508 5670
+1900 508 16549
+1901 508 16549
+1902 508 2100
+1903 508 40547
+1904 508 35024
+1905 508 45309
+1906 508 43840
+1907 508 43840
+1908 508 43840
+1910 508 10059
+1911 508 29789
+1912 508 59414
+1913 508 58321
+1914 508 9245
+1915 508 29457
+1961 508 19795
+1962 508 19795
+1963 508 19795
+1964 508 19795
+1966 508 51547
+1967 508 21984
+1968 508 64299
+1969 508 47740
+1970 508 37791
+1980 508 8334
+2027 508 13559
+2028 508 13559
+2029 508 13559
+2030 508 13559
+2031 508 13559
+2033 508 2866
+2034 508 41438
+2035 508 43393
+2036 508 14569
+2046 508 4322
+2057 508 61509
+2388 508 29862
+2389 508 29862
+2390 508 29862
+2391 508 29862
+2392 508 29862
+2393 508 1488
+2394 508 482
+2395 508 16234
+2396 508 26902
+2397 508 26947
+2407 508 61540
+2418 508 28482
+2496 508 1911
+3019 508 27852657
+443 509 1
+444 509 1
+451 509 1
+452 509 2
+453 509 1
+460 509 1
+461 509 2
+462 509 2
+463 509 1
+577 509 1
+578 509 1
+579 509 1
+810 509 65520
+811 509 65520
+812 509 65519
+822 509 65520
+875 509 65520
+876 509 65520
+877 509 65519
+887 509 65519
+898 509 65520
+1404 509 36857
+1405 509 36857
+1412 509 24573
+1413 509 61430
+1414 509 24573
+1421 509 24573
+1422 509 61430
+1423 509 49146
+1424 509 24573
+1634 509 36857
+1635 509 24573
+1636 509 24573
+1688 509 40954
+1689 509 40954
+1690 509 40954
+1691 509 40954
+1701 509 40954
+1903 509 65517
+1910 509 32187
+1912 509 12281
+1913 509 27772
+1914 509 7687
+1915 509 7687
+1961 509 9788
+1962 509 9788
+1963 509 9788
+1964 509 9788
+1967 509 40498
+1968 509 60917
+1969 509 39576
+1970 509 14131
+1980 509 14639
+2027 509 9788
+2028 509 9788
+2029 509 9788
+2030 509 9788
+2031 509 9788
+2033 509 65065
+2034 509 60912
+2035 509 39571
+2036 509 42792
+2046 509 41555
+2057 509 2349
+2252 509 11931
+2253 509 11931
+2254 509 11931
+2255 509 11931
+2256 509 4485
+2257 509 4485
+2258 509 13215
+2259 509 13215
+2261 509 627
+2262 509 627
+2263 509 627
+2264 509 44120
+2265 509 41305
+2266 509 36820
+2267 509 57110
+2268 509 57110
+2269 509 57110
+2271 509 7478
+2272 509 7478
+2273 509 15788
+2274 509 5129
+2275 509 23632
+2276 509 52333
+2322 509 26549
+2323 509 26549
+2324 509 26549
+2325 509 26549
+2327 509 45793
+2328 509 25580
+2329 509 21707
+2330 509 59799
+2331 509 56891
+2341 509 4560
+2388 509 1268
+2389 509 1268
+2390 509 1268
+2391 509 1268
+2392 509 1268
+2394 509 13687
+2395 509 53825
+2396 509 42591
+2397 509 26564
+2407 509 35360
+2418 509 57418
+2466 509 4078
+2467 509 4078
+2468 509 4078
+2469 509 4078
+2470 509 4078
+2471 509 4078
+2472 509 44695
+2473 509 42712
+2474 509 60758
+2475 509 28074
+2485 509 52423
+2496 509 50200
+2508 509 23170
+3020 509 27852657
+444 510 1
+461 510 35242
+462 510 112
+463 510 112
+579 510 14164
+635 510 4521
+636 510 7431
+637 510 52810
+638 510 15995
+639 510 30047
+758 510 41767
+823 510 13926
+897 510 11352
+898 510 10703
+899 510 10172
+900 510 59572
+1896 510 53383
+1905 510 50924
+1913 510 2972
+1914 510 28749
+1915 510 32807
+1951 510 37802
+1960 510 1676
+1970 510 25980
+1977 510 11937
+1978 510 19905
+1979 510 38514
+1980 510 58138
+1981 510 9226
+2017 510 56840
+2026 510 65257
+2036 510 13363
+2047 510 64809
+2056 510 4824
+2057 510 49515
+2058 510 21263
+2059 510 59149
+2377 510 52563
+2378 510 1938
+2379 510 7235
+2380 510 7235
+2382 510 17622
+2383 510 17622
+2384 510 17622
+2385 510 58429
+2386 510 60699
+2387 510 37008
+2388 510 22384
+2389 510 22384
+2390 510 22384
+2392 510 13729
+2393 510 13729
+2394 510 23328
+2395 510 62621
+2396 510 3343
+2397 510 62476
+2398 510 4476
+2399 510 4476
+2400 510 4476
+2401 510 4476
+2403 510 54600
+2404 510 25903
+2405 510 37676
+2406 510 24406
+2407 510 26558
+2408 510 37829
+2409 510 20242
+2410 510 20242
+2411 510 20242
+2412 510 20242
+2413 510 20242
+2415 510 54976
+2416 510 57345
+2417 510 35655
+2418 510 63659
+2419 510 7118
+2420 510 52415
+2487 510 34589
+2488 510 34589
+2489 510 34589
+2490 510 34589
+2491 510 34589
+2492 510 34589
+2493 510 21753
+2494 510 13249
+2495 510 10993
+2496 510 1059
+2497 510 10802
+2498 510 41347
+2510 510 58623
+3021 510 27852657
+444 511 1
+747 511 3322
+756 511 52312
+810 511 36027
+875 511 36027
+1326 511 5847
+1327 511 5847
+1353 511 57408
+1354 511 57408
+1356 511 15773
+1357 511 15773
+1358 511 15773
+1359 511 27820
+1360 511 25691
+1368 511 19844
+1398 511 37903
+1399 511 37903
+1400 511 37903
+1402 511 19053
+1403 511 19053
+1404 511 26346
+1405 511 38305
+1413 511 30195
+1422 511 10351
+1610 511 61661
+1611 511 61661
+1612 511 61661
+1613 511 61661
+1615 511 33316
+1616 511 3489
+1617 511 57760
+1625 511 23830
+1634 511 56841
+1689 511 46490
+1889 511 36764
+1890 511 36764
+1891 511 36764
+1892 511 36764
+1893 511 36764
+1895 511 13063
+1896 511 46558
+1904 511 41906
+1913 511 42760
+1968 511 45813
+2034 511 30474
+2250 511 46993
+2251 511 46993
+2252 511 46993
+2253 511 46993
+2254 511 46993
+2255 511 46993
+2256 511 28717
+2257 511 2266
+2265 511 25062
+2274 511 54778
+2329 511 12301
+2395 511 3465
+2473 511 42308
+3022 511 27852657
+445 512 1
+454 512 1
+619 512 65520
+737 512 40739
+744 512 9784
+750 512 55591
+751 512 28826
+753 512 17245
+756 512 31843
+757 512 31843
+758 512 31843
+803 512 57609
+804 512 40625
+805 512 13860
+806 512 5374
+809 512 36785
+810 512 57879
+811 512 57879
+812 512 24201
+822 512 57879
+868 512 57610
+869 512 40625
+870 512 13860
+871 512 5374
+872 512 63694
+874 512 36785
+875 512 57879
+876 512 57879
+877 512 24201
+887 512 50237
+898 512 57879
+1886 512 40206
+1887 512 40597
+1891 512 32490
+1892 512 32490
+1893 512 7175
+1894 512 3626
+1895 512 61286
+1896 512 61286
+1897 512 58535
+1898 512 3007
+1900 512 30081
+1901 512 32014
+1902 512 7663
+1903 512 26668
+1904 512 10787
+1905 512 15022
+1906 512 26313
+1907 512 38139
+1908 512 2836
+1910 512 29880
+1911 512 33286
+1912 512 24317
+1913 512 44034
+1914 512 35945
+1915 512 20923
+1961 512 58486
+1962 512 41647
+1963 512 6344
+1964 512 20949
+1966 512 13015
+1967 512 48464
+1968 512 45444
+1969 512 20661
+1970 512 34160
+1980 512 13237
+2027 512 31974
+2028 512 47856
+2029 512 7133
+2030 512 42484
+2031 512 65138
+2033 512 43142
+2034 512 33892
+2035 512 44243
+2036 512 10207
+2046 512 59956
+2057 512 46719
+2388 512 28140
+2389 512 64613
+2390 512 20029
+2391 512 20029
+2392 512 9789
+2393 512 53917
+2394 512 36576
+2395 512 29205
+2396 512 50185
+2397 512 9792
+2407 512 57545
+2418 512 59897
+2496 512 24642
+3023 512 27852657
+446 513 1
+455 513 1
+456 513 1
+571 513 1
+572 513 1
+750 513 1
+751 513 1
+753 513 1
+1407 513 49140
+1416 513 49140
+1417 513 49140
+1619 513 65519
+1628 513 49140
+1629 513 49140
+1907 513 32761
+1908 513 32761
+1910 513 32761
+2268 513 16380
+2269 513 16380
+2271 513 16380
+2272 513 16380
+2397 513 8192
+2407 513 1
+2418 513 1
+2475 513 56307
+2485 513 49140
+2496 513 32761
+2508 513 16380
+3024 513 27852657
+447 514 1
+2397 514 65520
+3025 514 27852657
+448 515 1
+449 515 1
+458 515 10083
+576 515 10080
+577 515 10080
+578 515 10080
+579 515 10080
+628 515 10080
+755 515 10080
+756 515 10080
+757 515 10080
+758 515 10080
+812 515 20160
+877 515 10080
+1409 515 25201
+1410 515 25201
+1411 515 25201
+1419 515 5041
+1420 515 5041
+1632 515 5041
+1633 515 60480
+1634 515 60480
+1635 515 60480
+1636 515 60480
+1691 515 60480
+1912 515 16380
+1913 515 16380
+1914 515 20160
+1915 515 20160
+1970 515 3779
+2036 515 8820
+2275 515 22681
+2276 515 55442
+2331 515 10081
+2397 515 43157
+2475 515 8821
+3026 515 27852657
+449 516 1
+458 516 1
+1410 516 49142
+1411 516 49142
+1419 516 49142
+1420 516 49142
+1623 516 2
+1632 516 49142
+2275 516 8191
+2276 516 8191
+2330 516 1
+2331 516 8191
+2396 516 1
+2397 516 8191
+2474 516 49142
+2475 516 13310
+3027 516 27852657
+450 517 1
+459 517 1
+624 517 65520
+753 517 53121
+756 517 1948
+757 517 1948
+758 517 1948
+803 517 236
+804 517 236
+805 517 236
+806 517 236
+809 517 46927
+810 517 44809
+811 517 44809
+812 517 46757
+822 517 44809
+868 517 236
+869 517 236
+870 517 236
+871 517 236
+872 517 236
+874 517 46927
+875 517 44809
+876 517 44809
+877 517 46757
+887 517 24097
+898 517 44809
+1887 517 1044
+1891 517 37196
+1892 517 37196
+1893 517 37196
+1894 517 24950
+1895 517 53156
+1896 517 53156
+1897 517 42839
+1898 517 42839
+1900 517 6393
+1901 517 6393
+1902 517 55400
+1903 517 1314
+1904 517 10869
+1905 517 23234
+1906 517 44299
+1907 517 44299
+1908 517 44299
+1910 517 34458
+1911 517 23319
+1912 517 46092
+1913 517 16966
+1914 517 21948
+1915 517 64235
+1961 517 21579
+1962 517 21579
+1963 517 21579
+1964 517 21579
+1966 517 50349
+1967 517 49
+1968 517 24186
+1969 517 34987
+1970 517 57048
+1980 517 58334
+2027 517 26164
+2028 517 26164
+2029 517 26164
+2030 517 26164
+2031 517 26164
+2033 517 32257
+2034 517 57600
+2035 517 21818
+2036 517 17202
+2046 517 1070
+2057 517 8257
+2388 517 46528
+2389 517 46528
+2390 517 46528
+2391 517 46528
+2392 517 46528
+2393 517 46354
+2394 517 32969
+2395 517 60879
+2396 517 56348
+2397 517 53172
+2407 517 3125
+2418 517 7855
+2496 517 666
+3028 517 27852657
+451 518 1
+460 518 1
+1422 518 60548
+1423 518 34985
+1424 518 34985
+1636 518 32106
+1687 518 39602
+1688 518 64328
+1689 518 54505
+1690 518 10181
+1691 518 31616
+1701 518 34495
+1915 518 27220
+1980 518 12906
+2034 518 58725
+2035 518 12630
+2036 518 3640
+2046 518 77
+2057 518 21666
+2256 518 15932
+2257 518 15932
+2258 518 30456
+2259 518 30456
+2261 518 46792
+2262 518 46792
+2263 518 46792
+2264 518 56354
+2265 518 21491
+2266 518 5559
+2267 518 21560
+2268 518 21560
+2269 518 21560
+2271 518 17896
+2272 518 17896
+2273 518 56500
+2274 518 52276
+2275 518 32209
+2276 518 12429
+2322 518 47586
+2323 518 47586
+2324 518 47586
+2325 518 47586
+2327 518 58778
+2328 518 14762
+2329 518 61146
+2330 518 10380
+2331 518 65215
+2341 518 54503
+2388 518 46567
+2389 518 46567
+2390 518 46567
+2391 518 46567
+2392 518 46567
+2394 518 41596
+2395 518 41956
+2396 518 37882
+2397 518 44311
+2407 518 22433
+2418 518 10324
+2466 518 44954
+2467 518 44954
+2468 518 44954
+2469 518 44954
+2470 518 44954
+2471 518 44954
+2472 518 19367
+2473 518 7294
+2474 518 31695
+2475 518 16089
+2485 518 34215
+2496 518 15733
+2508 518 3773
+3029 518 27852657
+452 519 1
+453 519 1
+461 519 60713
+462 519 21040
+463 519 21039
+579 519 63116
+624 519 63788
+625 519 7439
+626 519 12247
+627 519 25418
+628 519 5015
+638 519 28459
+758 519 19234
+822 519 59752
+875 519 51039
+876 519 65471
+877 519 19774
+887 519 28194
+898 519 62422
+1895 519 28201
+1896 519 28201
+1897 519 7167
+1898 519 7167
+1900 519 30653
+1901 519 30653
+1902 519 30653
+1903 519 14117
+1904 519 38146
+1905 519 9945
+1906 519 52575
+1907 519 52575
+1908 519 52575
+1910 519 35116
+1911 519 35116
+1912 519 368
+1913 519 51764
+1914 519 34875
+1915 519 26132
+1961 519 15419
+1962 519 15419
+1963 519 15419
+1964 519 15419
+1966 519 29000
+1967 519 65087
+1968 519 13491
+1969 519 54846
+1970 519 54247
+1980 519 64762
+2027 519 13314
+2028 519 13314
+2029 519 13314
+2030 519 13314
+2031 519 13314
+2033 519 21285
+2034 519 63636
+2035 519 58367
+2036 519 14573
+2046 519 14689
+2057 519 34570
+2388 519 60907
+2389 519 60907
+2390 519 60907
+2391 519 60907
+2392 519 60907
+2393 519 60907
+2394 519 55240
+2395 519 57879
+2396 519 60898
+2397 519 8104
+2407 519 22686
+2418 519 41094
+2496 519 56139
+3030 519 27852657
+453 520 1
+461 520 51474
+462 520 35594
+463 520 35593
+579 520 55049
+635 520 5856
+636 520 5230
+637 520 6628
+638 520 63044
+639 520 16979
+758 520 42394
+823 520 46600
+897 520 24088
+898 520 26592
+899 520 36955
+900 520 1055
+1905 520 38786
+1913 520 7663
+1914 520 65189
+1915 520 60951
+1960 520 39478
+1970 520 62067
+1977 520 42229
+1978 520 13107
+1979 520 28549
+1980 520 33091
+1981 520 2459
+2026 520 56576
+2036 520 50666
+2047 520 13602
+2056 520 60520
+2057 520 34335
+2058 520 14203
+2059 520 46768
+2377 520 59104
+2378 520 59104
+2379 520 60805
+2380 520 60805
+2382 520 57042
+2383 520 57042
+2384 520 57042
+2385 520 38257
+2386 520 53089
+2387 520 37753
+2388 520 4871
+2389 520 4871
+2390 520 4871
+2392 520 38373
+2393 520 38373
+2394 520 41063
+2395 520 13921
+2396 520 511
+2397 520 1263
+2398 520 11219
+2399 520 11219
+2400 520 11219
+2401 520 11219
+2403 520 62126
+2404 520 37707
+2405 520 22891
+2406 520 51269
+2407 520 64420
+2408 520 62493
+2409 520 47545
+2410 520 47545
+2411 520 47545
+2412 520 47545
+2413 520 47545
+2415 520 11529
+2416 520 55169
+2417 520 54336
+2418 520 59526
+2419 520 33974
+2420 520 44814
+2487 520 40747
+2488 520 40747
+2489 520 40747
+2490 520 40747
+2491 520 40747
+2492 520 40747
+2493 520 62126
+2494 520 20561
+2495 520 27735
+2496 520 22813
+2497 520 7672
+2498 520 13568
+2510 520 46060
+3031 520 27852657
+453 521 1
+462 521 1
+627 521 65520
+748 521 39805
+757 521 48171
+811 521 56248
+876 521 56249
+1359 521 19250
+1360 521 19250
+1361 521 2854
+1362 521 2854
+1364 521 5527
+1365 521 5527
+1366 521 5527
+1367 521 63540
+1368 521 35583
+1369 521 16333
+1406 521 22088
+1407 521 22088
+1408 521 22088
+1410 521 43901
+1411 521 43901
+1412 521 27660
+1413 521 57032
+1414 521 50754
+1423 521 34421
+1618 521 24415
+1619 521 24415
+1620 521 24415
+1621 521 24415
+1623 521 61054
+1624 521 1993
+1625 521 60567
+1626 521 61079
+1635 521 25184
+1690 521 56284
+1897 521 1709
+1898 521 1709
+1899 521 1709
+1900 521 1709
+1901 521 1709
+1903 521 13293
+1904 521 43713
+1905 521 12540
+1914 521 5645
+1969 521 51895
+2035 521 13869
+2258 521 51671
+2259 521 51671
+2260 521 51671
+2261 521 51671
+2262 521 51671
+2263 521 51671
+2264 521 17351
+2265 521 47973
+2266 521 57817
+2275 521 19171
+2330 521 39564
+2396 521 63310
+2474 521 2901
+3032 521 27852657
+454 522 1
+455 522 1
+461 522 25927
+462 522 57482
+463 522 57482
+579 522 29438
+621 522 1
+624 522 3114
+625 522 32276
+626 522 6349
+627 522 29610
+628 522 4171
+638 522 32215
+758 522 40607
+822 522 27567
+875 522 65303
+876 522 14582
+877 522 26763
+887 522 56553
+898 522 61201
+1886 522 454
+1892 522 36229
+1893 522 54927
+1894 522 1144
+1895 522 7535
+1896 522 7535
+1897 522 50241
+1898 522 6922
+1900 522 6948
+1901 522 17591
+1902 522 30422
+1903 522 41133
+1904 522 56915
+1905 522 49380
+1906 522 21100
+1907 522 37567
+1908 522 23766
+1910 522 679
+1911 522 18093
+1912 522 3321
+1913 522 38189
+1914 522 37780
+1915 522 36922
+1961 522 21459
+1962 522 35013
+1963 522 4625
+1964 522 56392
+1966 522 2172
+1967 522 29917
+1968 522 26508
+1969 522 15056
+1970 522 29597
+1980 522 25826
+2027 522 53600
+2028 522 43400
+2029 522 49493
+2030 522 30510
+2031 522 52286
+2033 522 28251
+2034 522 35502
+2035 522 24166
+2036 522 8119
+2046 522 29945
+2057 522 44026
+2388 522 56948
+2389 522 43408
+2390 522 48175
+2391 522 16217
+2392 522 4879
+2393 522 19167
+2394 522 14942
+2395 522 27367
+2396 522 753
+2397 522 42253
+2407 522 48931
+2418 522 12705
+2496 522 51890
+3033 522 27852657
+455 523 1
+1416 523 47570
+1422 523 41529
+1423 523 38730
+1424 523 38730
+1636 523 25299
+1683 523 17951
+1684 523 63403
+1687 523 58776
+1688 523 35507
+1689 523 59499
+1690 523 54418
+1691 523 63332
+1701 523 11242
+1915 523 39609
+1980 523 39129
+2034 523 26137
+2035 523 26347
+2036 523 60770
+2046 523 62897
+2057 523 35010
+2247 523 33143
+2253 523 57590
+2254 523 24419
+2255 523 46138
+2256 523 20690
+2257 523 20690
+2258 523 25944
+2259 523 42648
+2261 523 47077
+2262 523 986
+2263 523 25278
+2264 523 53075
+2265 523 17507
+2266 523 62338
+2267 523 61139
+2268 523 52890
+2269 523 5202
+2271 523 22236
+2272 523 52209
+2273 523 43784
+2274 523 36829
+2275 523 31635
+2276 523 28994
+2322 523 11646
+2323 523 15632
+2324 523 59744
+2325 523 33871
+2327 523 36857
+2328 523 41248
+2329 523 62524
+2330 523 51967
+2331 523 31300
+2341 523 35346
+2388 523 34675
+2389 523 11150
+2390 523 48268
+2391 523 24368
+2392 523 23953
+2394 523 1994
+2395 523 2541
+2396 523 30660
+2397 523 6360
+2407 523 45832
+2418 523 50798
+2466 523 48583
+2467 523 57253
+2468 523 44430
+2469 523 48281
+2470 523 3659
+2471 523 17863
+2472 523 9587
+2473 523 2202
+2474 523 20489
+2475 523 29689
+2485 523 1506
+2496 523 39189
+2508 523 65251
+3034 523 27852657
+456 524 1
+621 524 65520
+870 524 1
+1892 524 6403
+1893 524 15104
+1901 524 19223
+1908 524 3103
+1910 524 61044
+1913 524 42785
+1914 524 42785
+1915 524 42785
+1961 524 21397
+1962 524 21397
+1963 524 17311
+1964 524 4718
+1967 524 57016
+1968 524 60932
+1969 524 60932
+1970 524 38196
+1980 524 60932
+2027 524 44954
+2028 524 44954
+2029 524 60319
+2030 524 64115
+2031 524 63193
+2033 524 57016
+2034 524 60932
+2035 524 60932
+2036 524 38196
+2046 524 56343
+2057 524 60932
+2245 524 51817
+2246 524 14603
+2247 524 45528
+2248 524 31406
+2252 524 58769
+2253 524 2762
+2254 524 33687
+2255 524 19264
+2256 524 51655
+2257 524 51655
+2258 524 35089
+2259 524 35089
+2261 524 30337
+2262 524 631
+2263 524 32213
+2264 524 52607
+2265 524 1304
+2266 524 15170
+2267 524 32282
+2268 524 32282
+2269 524 39463
+2271 524 36692
+2272 524 60134
+2273 524 37311
+2274 524 24269
+2275 524 4673
+2276 524 55024
+2322 524 22279
+2323 524 22279
+2324 524 3003
+2325 524 50731
+2327 524 53813
+2328 524 17528
+2329 524 42100
+2330 524 50905
+2331 524 9091
+2341 524 19588
+2388 524 57898
+2389 524 57898
+2390 524 24968
+2391 524 8167
+2392 524 21322
+2394 524 58613
+2395 524 33406
+2396 524 28576
+2397 524 44219
+2407 524 42721
+2418 524 44637
+2466 524 3944
+2467 524 3944
+2468 524 27400
+2469 524 61535
+2470 524 18915
+2471 524 9182
+2472 524 44131
+2473 524 58241
+2474 524 8383
+2475 524 78
+2485 524 7729
+2496 524 19772
+2508 524 47788
+3035 524 27852657
+457 525 1
+2397 525 65520
+3036 525 27852657
+458 526 1
+1419 526 54601
+1420 526 54601
+1624 526 50274
+1625 526 50274
+1626 526 50274
+1632 526 54601
+1633 526 50274
+1634 526 50274
+1635 526 35027
+1636 526 50274
+1688 526 50274
+1689 526 50274
+1690 526 35027
+1691 526 35027
+1701 526 50274
+1895 526 64903
+1896 526 64903
+1903 526 49656
+1904 526 49038
+1905 526 49656
+1910 526 40797
+1912 526 49656
+1913 526 20604
+1914 526 5357
+1915 526 21222
+1967 526 45947
+1968 526 16895
+1969 526 51922
+1970 526 23488
+1980 526 2266
+2033 526 61194
+2034 526 32142
+2035 526 16895
+2036 526 53982
+2046 526 50273
+2057 526 32760
+2256 526 38864
+2257 526 38864
+2264 526 65006
+2265 526 38349
+2266 526 65006
+2271 526 39560
+2272 526 39560
+2273 526 65006
+2274 526 7056
+2275 526 47209
+2276 526 29979
+2327 526 39560
+2328 526 28535
+2329 526 36106
+2330 526 34613
+2331 526 65107
+2341 526 35128
+2394 526 7804
+2395 526 54470
+2396 526 52977
+2397 526 24416
+2407 526 56453
+2418 526 21325
+2472 526 40178
+2473 526 17848
+2474 526 37860
+2475 526 23090
+2485 526 43938
+2496 526 25807
+2508 526 24416
+3037 526 27852657
+459 527 1
+461 527 47936
+462 527 54446
+463 527 54446
+579 527 6054
+624 527 44904
+625 527 21074
+626 527 38659
+627 527 42584
+628 527 7857
+638 527 56249
+758 527 4930
+822 527 12225
+875 527 65362
+876 527 30235
+877 527 60653
+887 527 42735
+898 527 21238
+1894 527 52772
+1895 527 23705
+1896 527 23705
+1897 527 6772
+1898 527 6772
+1900 527 38365
+1901 527 38365
+1902 527 36606
+1903 527 55125
+1904 527 6502
+1905 527 48318
+1906 527 38131
+1907 527 38131
+1908 527 38131
+1910 527 18827
+1911 527 30071
+1912 527 54745
+1913 527 15666
+1914 527 21438
+1915 527 44236
+1961 527 47188
+1962 527 47188
+1963 527 47188
+1964 527 47188
+1966 527 65314
+1967 527 61667
+1968 527 12871
+1969 527 64435
+1970 527 48676
+1980 527 21518
+2027 527 50154
+2028 527 50154
+2029 527 50154
+2030 527 50154
+2031 527 50154
+2033 527 32423
+2034 527 47591
+2035 527 24698
+2036 527 42610
+2046 527 51315
+2057 527 29406
+2388 527 3731
+2389 527 3731
+2390 527 3731
+2391 527 3731
+2392 527 3731
+2393 527 3731
+2394 527 14782
+2395 527 6426
+2396 527 10974
+2397 527 589
+2407 527 19958
+2418 527 5374
+2496 527 62906
+3038 527 27852657
+460 528 1
+461 528 58152
+462 528 64391
+463 528 64391
+579 528 54740
+624 528 8155
+625 528 8153
+626 528 15523
+627 528 38979
+628 528 20117
+638 528 29768
+758 528 20423
+822 528 52414
+875 528 36345
+876 528 27598
+877 528 45774
+887 528 9159
+898 528 52034
+1895 528 27596
+1896 528 27596
+1897 528 35507
+1898 528 35507
+1900 528 21677
+1901 528 21677
+1902 528 21677
+1903 528 24308
+1904 528 62056
+1905 528 34460
+1906 528 11522
+1907 528 11522
+1908 528 11522
+1910 528 42610
+1911 528 42610
+1912 528 33274
+1913 528 3633
+1914 528 5697
+1915 528 24600
+1961 528 45087
+1962 528 45087
+1963 528 45087
+1964 528 45087
+1966 528 53022
+1967 528 23519
+1968 528 35417
+1969 528 43143
+1970 528 13605
+1980 528 35154
+2027 528 63986
+2028 528 63986
+2029 528 63986
+2030 528 63986
+2031 528 63986
+2033 528 45584
+2034 528 47510
+2035 528 35134
+2036 528 3149
+2046 528 10107
+2057 528 21548
+2388 528 46063
+2389 528 46063
+2390 528 46063
+2391 528 46063
+2392 528 46063
+2393 528 46063
+2394 528 48863
+2395 528 16395
+2396 528 12958
+2397 528 5566
+2407 528 49339
+2418 528 38488
+2496 528 38622
+3039 528 27852657
+461 529 1
+579 529 17746
+627 529 52981
+628 529 60062
+638 529 42316
+758 529 17746
+811 529 40441
+812 529 54603
+822 529 61427
+876 529 52981
+877 529 60062
+887 529 61427
+898 529 42316
+1422 529 1235
+1423 529 43318
+1424 529 43318
+1636 529 59650
+1687 529 46846
+1688 529 55023
+1689 529 3063
+1690 529 6304
+1691 529 14987
+1701 529 64176
+1915 529 15096
+1980 529 49381
+2034 529 63507
+2035 529 64924
+2036 529 41254
+2046 529 53577
+2057 529 2851
+2256 529 30283
+2257 529 30283
+2258 529 43249
+2259 529 43249
+2261 529 43433
+2262 529 43433
+2263 529 43433
+2264 529 55442
+2265 529 7348
+2266 529 42586
+2267 529 6332
+2268 529 6332
+2269 529 6332
+2271 529 56388
+2272 529 56388
+2273 529 56966
+2274 529 23985
+2275 529 27466
+2276 529 51071
+2322 529 38312
+2323 529 38312
+2324 529 38312
+2325 529 38312
+2327 529 28298
+2328 529 44497
+2329 529 38574
+2330 529 57930
+2331 529 63389
+2341 529 870
+2388 529 62653
+2389 529 62653
+2390 529 62653
+2391 529 62653
+2392 529 62653
+2394 529 31516
+2395 529 5511
+2396 529 62090
+2397 529 51440
+2407 529 34037
+2418 529 28032
+2466 529 13543
+2467 529 13543
+2468 529 13543
+2469 529 13543
+2470 529 13543
+2471 529 13543
+2472 529 27630
+2473 529 579
+2474 529 3616
+2475 529 37497
+2485 529 64138
+2496 529 12491
+2508 529 64099
+3040 529 27852657
+462 530 1
+463 530 1
+579 530 47776
+627 530 12540
+628 530 5459
+638 530 23205
+758 530 47776
+811 530 25080
+812 530 10918
+822 530 4094
+876 530 12540
+877 530 5459
+887 530 4094
+898 530 23205
+1422 530 18002
+1423 530 36331
+1424 530 36331
+1636 530 15487
+1687 530 3698
+1688 530 25286
+1689 530 7284
+1690 530 30591
+1691 530 39166
+1701 530 60010
+1915 530 18517
+1980 530 17222
+2034 530 61315
+2035 530 52562
+2036 530 14573
+2046 530 53605
+2057 530 30872
+2256 530 2827
+2257 530 2827
+2258 530 36158
+2259 530 36158
+2261 530 59159
+2262 530 59159
+2263 530 59159
+2264 530 10683
+2265 530 55413
+2266 530 52586
+2267 530 4806
+2268 530 4806
+2269 530 4806
+2271 530 8681
+2272 530 8681
+2273 530 23699
+2274 530 58260
+2275 530 7136
+2276 530 20733
+2322 530 41496
+2323 530 41496
+2324 530 41496
+2325 530 41496
+2327 530 2673
+2328 530 24857
+2329 530 53184
+2330 530 34562
+2331 530 62416
+2341 530 22353
+2388 530 33957
+2389 530 33957
+2390 530 33957
+2391 530 33957
+2392 530 33957
+2394 530 46385
+2395 530 53405
+2396 530 19851
+2397 530 54141
+2407 530 62164
+2418 530 28809
+2466 530 15722
+2467 530 15722
+2468 530 15722
+2469 530 15722
+2470 530 15722
+2471 530 15722
+2472 530 32392
+2473 530 50433
+2474 530 18474
+2475 530 63072
+2485 530 29241
+2496 530 53511
+2508 530 8353
+3041 530 27852657
+464 531 1
+640 531 1
+654 531 65520
+1437 531 6
+1715 531 24572
+1722 531 50858
+1725 531 27336
+1729 531 2764
+1864 531 16078
+1871 531 34821
+1889 531 22241
+1897 531 22241
+1906 531 22241
+1916 531 9082
+1917 531 9082
+1919 531 25160
+1922 531 17415
+1937 531 55245
+1944 531 56132
+1952 531 56132
+1961 531 12852
+1971 531 56132
+1982 531 9082
+1983 531 9082
+1985 531 25160
+1988 531 17415
+1992 531 17415
+2003 531 55245
+2010 531 56132
+2018 531 56132
+2027 531 12852
+2037 531 46743
+2048 531 56132
+2060 531 35224
+2061 531 35224
+2063 531 54027
+2064 531 59109
+2066 531 23885
+2069 531 9770
+2070 531 34011
+2072 531 13032
+2075 531 54668
+2079 531 9770
+2080 531 34011
+2082 531 23081
+2085 531 18207
+2089 531 29060
+2094 531 9770
+2095 531 34011
+2097 531 49997
+2100 531 47749
+2104 531 31657
+2109 531 2597
+2117 531 2604
+2120 531 30709
+2124 531 53633
+2129 531 13428
+2144 531 20636
+2147 531 48741
+2151 531 6144
+2156 531 54384
+2162 531 9516
+2169 531 9516
+2177 531 5936
+2178 531 15088
+2183 531 2699
+2187 531 25623
+2192 531 36447
+2198 531 12142
+2205 531 635
+2213 531 56640
+2222 531 13600
+2223 531 22752
+2225 531 61659
+2232 531 48926
+2237 531 62354
+2243 531 39058
+2250 531 58533
+2258 531 58933
+2267 531 2293
+2277 531 53941
+2278 531 63093
+2280 531 36479
+2283 531 44378
+2292 531 14897
+2298 531 42923
+2305 531 50876
+2313 531 36962
+2322 531 25377
+2332 531 23084
+2343 531 11001
+2344 531 18526
+2346 531 22483
+2349 531 61983
+2353 531 24222
+2364 531 55120
+2371 531 15986
+2379 531 58149
+2388 531 26104
+2398 531 52582
+2409 531 29498
+2421 531 62055
+2422 531 50318
+2424 531 33136
+2427 531 20101
+2431 531 12276
+2436 531 12972
+2442 531 22783
+2449 531 53037
+2457 531 49466
+2466 531 14932
+2476 531 31897
+2487 531 4525
+2499 531 61417
+3042 531 27852657
+464 532 1
+466 532 10345
+467 532 10345
+640 532 1
+642 532 10345
+643 532 10345
+652 532 14944
+653 532 1
+655 532 1
+656 532 40233
+657 532 55177
+1710 532 50595
+1711 532 50595
+1712 532 56301
+1713 532 41378
+1714 532 56304
+1715 532 19761
+1716 532 11734
+1717 532 13992
+1718 532 23209
+1723 532 65518
+1724 532 65518
+1726 532 50595
+1727 532 45093
+1728 532 15740
+1729 532 34840
+1730 532 27941
+1731 532 42597
+1732 532 31392
+1733 532 38861
+1737 532 5196
+1740 532 20277
+1742 532 26747
+1743 532 17798
+1746 532 13519
+1747 532 54472
+1748 532 64841
+1749 532 30681
+1750 532 37580
+1751 532 36443
+1752 532 23080
+1753 532 13099
+1754 532 52640
+1925 532 18480
+1991 532 18480
+1994 532 32539
+1995 532 33179
+1996 532 58380
+2029 532 33946
+2031 532 58372
+2034 532 58900
+2035 532 58900
+2036 532 58900
+2037 532 6473
+2038 532 6473
+2039 532 40419
+2040 532 34707
+2043 532 14348
+2044 532 38665
+2045 532 38665
+2046 532 32044
+2047 532 38665
+2048 532 6473
+2049 532 6473
+2050 532 40419
+2051 532 34707
+2052 532 34707
+2054 532 14348
+2055 532 38665
+2056 532 38665
+2057 532 32044
+2058 532 11809
+2059 532 38665
+2344 532 34473
+2345 532 34473
+2346 532 29701
+2347 532 63962
+2348 532 29489
+2349 532 15735
+2350 532 47411
+2351 532 36907
+2352 532 22506
+2353 532 48498
+2354 532 45749
+2355 532 21702
+2356 532 34815
+2357 532 40544
+2358 532 59595
+2359 532 32321
+2360 532 59095
+2361 532 61149
+2362 532 5122
+2363 532 30099
+2366 532 49745
+2367 532 24607
+2368 532 17874
+2369 532 35499
+2373 532 46884
+2374 532 21746
+2375 532 15013
+2376 532 25905
+2377 532 25684
+2378 532 25684
+2379 532 55626
+2380 532 35956
+2382 532 44741
+2383 532 38008
+2384 532 23762
+2385 532 45303
+2386 532 59661
+2387 532 33977
+2388 532 56096
+2389 532 36426
+2390 532 37208
+2392 532 60280
+2393 532 30258
+2394 532 57965
+2395 532 14960
+2396 532 62860
+2397 532 28883
+2398 532 54757
+2399 532 35087
+2400 532 35869
+2401 532 36665
+2403 532 31229
+2404 532 13011
+2405 532 64469
+2406 532 3532
+2407 532 41310
+2408 532 12427
+2409 532 62705
+2410 532 33026
+2411 532 28396
+2412 532 18381
+2413 532 59820
+2415 532 48520
+2416 532 46975
+2417 532 34497
+2418 532 46467
+2419 532 39439
+2420 532 27012
+2487 532 9193
+2488 532 26847
+2489 532 22025
+2490 532 32540
+2491 532 37780
+2492 532 35597
+2493 532 25523
+2494 532 12024
+2495 532 59424
+2496 532 19040
+2497 532 35828
+2498 532 53189
+2510 532 43583
+3043 532 27852657
+465 533 1
+641 533 1
+655 533 65520
+1438 533 6
+1716 533 24572
+1723 533 50858
+1726 533 27336
+1730 533 2764
+1865 533 16078
+1872 533 34821
+1890 533 22241
+1898 533 22241
+1907 533 22241
+1917 533 9082
+1918 533 9082
+1920 533 25160
+1923 533 17415
+1938 533 55245
+1945 533 56132
+1953 533 56132
+1962 533 12852
+1972 533 56132
+1983 533 9082
+1984 533 9082
+1986 533 25160
+1989 533 17415
+1993 533 17415
+2004 533 55245
+2011 533 56132
+2019 533 56132
+2028 533 12852
+2038 533 46743
+2049 533 56132
+2061 533 35224
+2062 533 35224
+2064 533 54027
+2065 533 59109
+2067 533 23885
+2070 533 9770
+2071 533 34011
+2073 533 13032
+2076 533 54668
+2080 533 9770
+2081 533 34011
+2083 533 23081
+2086 533 18207
+2090 533 29060
+2095 533 9770
+2096 533 34011
+2098 533 49997
+2101 533 47749
+2105 533 31657
+2110 533 2597
+2118 533 2604
+2121 533 30709
+2125 533 53633
+2130 533 13428
+2145 533 20636
+2148 533 48741
+2152 533 6144
+2157 533 54384
+2163 533 9516
+2170 533 9516
+2178 533 5936
+2179 533 15088
+2184 533 2699
+2188 533 25623
+2193 533 36447
+2199 533 12142
+2206 533 635
+2214 533 56640
+2223 533 13600
+2224 533 22752
+2226 533 61659
+2233 533 48926
+2238 533 62354
+2244 533 39058
+2251 533 58533
+2259 533 58933
+2268 533 2293
+2278 533 53941
+2279 533 63093
+2281 533 36479
+2284 533 44378
+2293 533 14897
+2299 533 42923
+2306 533 50876
+2314 533 36962
+2323 533 25377
+2333 533 23084
+2344 533 11001
+2345 533 18526
+2347 533 22483
+2350 533 61983
+2354 533 24222
+2365 533 55120
+2372 533 15986
+2380 533 58149
+2389 533 26104
+2399 533 52582
+2410 533 29498
+2422 533 62055
+2423 533 50318
+2425 533 33136
+2428 533 20101
+2432 533 12276
+2437 533 12972
+2443 533 22783
+2450 533 53037
+2458 533 49466
+2467 533 14932
+2477 533 31897
+2488 533 4525
+2500 533 61417
+3044 533 27852657
+465 534 1
+466 534 55177
+467 534 55177
+641 534 1
+642 534 55177
+643 534 55177
+652 534 50577
+655 534 65520
+656 534 25288
+657 534 10344
+1710 534 16816
+1711 534 16816
+1712 534 64661
+1713 534 15953
+1714 534 64658
+1715 534 64661
+1716 534 9057
+1717 534 60350
+1718 534 61213
+1723 534 3
+1724 534 3
+1726 534 16816
+1727 534 10348
+1728 534 3161
+1729 534 860
+1730 534 7759
+1731 534 58624
+1732 534 4308
+1733 534 62360
+1737 534 13074
+1740 534 9332
+1742 534 52406
+1743 534 24815
+1746 534 5493
+1747 534 43295
+1748 534 44914
+1749 534 64661
+1750 534 57762
+1751 534 12390
+1752 534 38987
+1753 534 33790
+1754 534 51236
+1994 534 48522
+1995 534 12310
+1996 534 12310
+2029 534 25269
+2031 534 51858
+2034 534 2166
+2035 534 2166
+2036 534 2166
+2037 534 53458
+2038 534 53458
+2039 534 13206
+2040 534 3030
+2043 534 31555
+2044 534 13892
+2045 534 13892
+2046 534 16058
+2047 534 13892
+2048 534 53458
+2049 534 53458
+2050 534 13206
+2051 534 3030
+2052 534 3030
+2054 534 31555
+2055 534 13892
+2056 534 13892
+2057 534 16058
+2058 534 27784
+2059 534 13892
+2344 534 65496
+2345 534 65496
+2346 534 20753
+2347 534 46912
+2348 534 46937
+2349 534 24658
+2350 534 51152
+2351 534 57047
+2352 534 37339
+2353 534 3028
+2354 534 58306
+2355 534 47677
+2356 534 44986
+2357 534 57220
+2358 534 46703
+2359 534 36436
+2360 534 8043
+2361 534 40641
+2362 534 4584
+2363 534 12885
+2366 534 7536
+2367 534 59282
+2368 534 36250
+2369 534 52750
+2373 534 13222
+2374 534 64968
+2375 534 41936
+2376 534 35404
+2377 534 54714
+2378 534 54714
+2379 534 21406
+2380 534 33858
+2382 534 37703
+2383 534 14671
+2384 534 59885
+2385 534 35441
+2386 534 15425
+2387 534 26232
+2388 534 21846
+2389 534 34298
+2390 534 18926
+2392 534 27157
+2393 534 14386
+2394 534 8261
+2395 534 33522
+2396 534 22602
+2397 534 61891
+2398 534 54050
+2399 534 981
+2400 534 51130
+2401 534 30446
+2403 534 58511
+2404 534 1028
+2405 534 39443
+2406 534 13065
+2407 534 34491
+2408 534 38121
+2409 534 27694
+2410 534 30003
+2411 534 34458
+2412 534 27794
+2413 534 2167
+2415 534 2207
+2416 534 9125
+2417 534 30901
+2418 534 21196
+2419 534 45286
+2420 534 7165
+2487 534 55456
+2488 534 39012
+2489 534 52526
+2490 534 57783
+2491 534 1096
+2492 534 55385
+2493 534 26682
+2494 534 104
+2495 534 12415
+2496 534 24795
+2497 534 53058
+2498 534 59528
+2510 534 38375
+3045 534 27852657
+466 535 1
+642 535 1
+1440 535 65515
+1718 535 40949
+1727 535 5908
+1728 535 35584
+1732 535 60156
+1869 535 35306
+1874 535 16243
+1892 535 34125
+1900 535 34125
+1909 535 34125
+1922 535 9507
+1923 535 9507
+1924 535 44813
+1925 535 1115
+1940 535 34232
+1947 535 1794
+1955 535 1794
+1964 535 35919
+1974 535 1794
+1988 535 9507
+1989 535 9507
+1990 535 44813
+1991 535 1115
+1995 535 1115
+2006 535 34232
+2013 535 1794
+2021 535 1794
+2030 535 35919
+2040 535 3588
+2051 535 1794
+2070 535 41860
+2071 535 41860
+2072 535 28870
+2073 535 23578
+2074 535 47239
+2075 535 42016
+2076 535 50810
+2077 535 46797
+2078 535 65079
+2085 535 42016
+2086 535 50810
+2087 535 26086
+2088 535 47352
+2092 535 47794
+2100 535 42016
+2101 535 50810
+2102 535 22576
+2103 535 11630
+2107 535 35256
+2112 535 52983
+2122 535 57382
+2123 535 713
+2127 535 11190
+2132 535 7246
+2149 535 24271
+2150 535 33123
+2154 535 43600
+2159 535 50133
+2165 535 40911
+2172 535 40911
+2183 535 44854
+2184 535 34704
+2186 535 39799
+2190 535 50276
+2195 535 140
+2201 535 8699
+2208 535 16962
+2216 535 41572
+2228 535 3689
+2229 535 59060
+2230 535 59307
+2235 535 54058
+2240 535 61304
+2246 535 5189
+2253 535 4329
+2261 535 37198
+2270 535 61147
+2283 535 1773
+2284 535 57144
+2285 535 57391
+2286 535 25628
+2295 535 22960
+2301 535 14018
+2308 535 58682
+2316 535 53106
+2325 535 45459
+2335 535 49833
+2349 535 61893
+2350 535 17230
+2351 535 28351
+2352 535 40487
+2356 535 2828
+2367 535 60816
+2374 535 43485
+2382 535 1604
+2391 535 39186
+2401 535 62257
+2412 535 12424
+2427 535 56462
+2428 535 3888
+2429 535 3695
+2430 535 39243
+2434 535 25241
+2439 535 62667
+2445 535 6917
+2452 535 2183
+2460 535 23082
+2469 535 23379
+2479 535 11191
+2490 535 43429
+2502 535 16543
+3046 535 27852657
+467 536 1
+643 536 1
+657 536 65520
+1440 536 6
+1718 536 24572
+1727 536 50858
+1728 536 27336
+1732 536 2764
+1869 536 16078
+1874 536 34821
+1892 536 22241
+1900 536 22241
+1909 536 22241
+1922 536 9082
+1923 536 9082
+1924 536 25160
+1925 536 17415
+1940 536 55245
+1947 536 56132
+1955 536 56132
+1964 536 12852
+1974 536 56132
+1988 536 9082
+1989 536 9082
+1990 536 25160
+1991 536 17415
+1995 536 17415
+2006 536 55245
+2013 536 56132
+2021 536 56132
+2030 536 12852
+2040 536 46743
+2051 536 56132
+2070 536 35224
+2071 536 35224
+2072 536 54027
+2073 536 59109
+2074 536 23885
+2075 536 9770
+2076 536 34011
+2077 536 13032
+2078 536 54668
+2085 536 9770
+2086 536 34011
+2087 536 23081
+2088 536 18207
+2092 536 29060
+2100 536 9770
+2101 536 34011
+2102 536 49997
+2103 536 47749
+2107 536 31657
+2112 536 2597
+2122 536 2604
+2123 536 30709
+2127 536 53633
+2132 536 13428
+2149 536 20636
+2150 536 48741
+2154 536 6144
+2159 536 54384
+2165 536 9516
+2172 536 9516
+2183 536 5936
+2184 536 15088
+2186 536 2699
+2190 536 25623
+2195 536 36447
+2201 536 12142
+2208 536 635
+2216 536 56640
+2228 536 13600
+2229 536 22752
+2230 536 61659
+2235 536 48926
+2240 536 62354
+2246 536 39058
+2253 536 58533
+2261 536 58933
+2270 536 2293
+2283 536 53941
+2284 536 63093
+2285 536 36479
+2286 536 44378
+2295 536 14897
+2301 536 42923
+2308 536 50876
+2316 536 36962
+2325 536 25377
+2335 536 23084
+2349 536 11001
+2350 536 18526
+2351 536 22483
+2352 536 61983
+2356 536 24222
+2367 536 55120
+2374 536 15986
+2382 536 58149
+2391 536 26104
+2401 536 52582
+2412 536 29498
+2427 536 62055
+2428 536 50318
+2429 536 33136
+2430 536 20101
+2434 536 12276
+2439 536 12972
+2445 536 22783
+2452 536 53037
+2460 536 49466
+2469 536 14932
+2479 536 31897
+2490 536 4525
+2502 536 61417
+3047 536 27852657
+468 537 1
+470 537 65520
+472 537 65519
+473 537 65520
+475 537 65519
+476 537 65519
+477 537 65520
+479 537 65519
+480 537 65519
+481 537 65519
+482 537 65520
+1441 537 54601
+1443 537 10920
+1445 537 21840
+1446 537 10920
+1448 537 21840
+1449 537 21840
+1450 537 10920
+1452 537 21840
+1453 537 21840
+1454 537 21840
+1455 537 10920
+1456 537 54601
+1457 537 10920
+1459 537 21840
+1460 537 10920
+1464 537 54601
+1466 537 21840
+1467 537 21840
+1469 537 10920
+1473 537 43681
+1474 537 54601
+1475 537 54601
+1643 537 54603
+1644 537 12821
+1645 537 47242
+1646 537 47242
+1922 537 54603
+1923 537 12821
+1924 537 47242
+1925 537 47242
+1927 537 1898
+1928 537 21837
+1929 537 47241
+1930 537 65520
+1963 537 29123
+1973 537 29123
+1974 537 10924
+2039 537 29123
+2040 537 10924
+2041 537 10924
+2277 537 47776
+2278 537 65518
+2279 537 17742
+2280 537 53235
+2281 537 17505
+2282 537 65284
+2283 537 39586
+2284 537 2135
+2285 537 30981
+2286 537 31218
+2287 537 13650
+2288 537 17148
+2289 537 11809
+2290 537 13472
+2291 537 47775
+2292 537 13650
+2293 537 47181
+2294 537 41842
+2295 537 55790
+2296 537 6826
+2297 537 24571
+2324 537 55515
+2334 537 55515
+2335 537 51882
+2400 537 18658
+2401 537 53695
+2402 537 42774
+2476 537 23206
+2477 537 41692
+2478 537 47122
+2479 537 34518
+2480 537 15924
+2481 537 50733
+2497 537 59382
+2509 537 55914
+3048 537 27852657
+469 538 1
+470 538 1
+472 538 1
+475 538 1
+479 538 1
+1442 538 54601
+1443 538 54601
+1445 538 54601
+1448 538 54601
+1452 538 54601
+1458 538 10920
+1459 538 10920
+1460 538 10920
+1461 538 10920
+1463 538 10920
+1466 538 43681
+1468 538 54601
+1469 538 54601
+1471 538 54601
+1473 538 54601
+1474 538 43681
+1475 538 54601
+1643 538 30031
+1644 538 7241
+1645 538 11871
+1646 538 11871
+1922 538 30031
+1923 538 7241
+1924 538 11871
+1925 538 11871
+1927 538 20891
+1928 538 54602
+1929 538 11871
+1963 538 1
+1973 538 1
+1974 538 32762
+2039 538 1
+2040 538 32762
+2041 538 32762
+2278 538 32761
+2279 538 32761
+2280 538 41633
+2281 538 11722
+2282 538 44482
+2283 538 54601
+2284 538 46026
+2285 538 31604
+2286 538 52643
+2287 538 60517
+2288 538 64228
+2289 538 21852
+2290 538 44909
+2291 538 57787
+2292 538 30485
+2293 538 21911
+2294 538 45057
+2295 538 23750
+2296 538 8419
+2297 538 16153
+2324 538 24572
+2334 538 24572
+2335 538 34585
+2400 538 61427
+2401 538 18202
+2402 538 30032
+2476 538 17973
+2477 538 26475
+2478 538 19324
+2479 538 53440
+2480 538 21613
+2481 538 56762
+2497 538 6144
+2509 538 23833
+3049 538 27852657
+470 539 1
+646 539 1
+952 539 20621
+979 539 14600
+984 539 14600
+991 539 40072
+993 539 25449
+997 539 40072
+1041 539 28635
+1103 539 20376
+1130 539 13454
+1238 539 20376
+1240 539 55157
+1268 539 54836
+1443 539 42205
+1446 539 17015
+1450 539 48506
+1721 539 54891
+1724 539 913
+1728 539 64608
+1733 539 913
+2081 539 4245
+2084 539 27756
+2087 539 29619
+2088 539 1863
+2091 539 38893
+2092 539 43400
+2093 539 41537
+2108 539 36802
+2113 539 61560
+2128 539 51496
+2154 539 64477
+2155 539 23113
+2160 539 33405
+2166 539 42592
+2173 539 42592
+2187 539 59613
+2188 539 9141
+2190 539 1510
+2191 539 4436
+2196 539 43196
+2202 539 63660
+2209 539 21930
+2217 539 44859
+2232 539 19616
+2233 539 52362
+2234 539 10440
+2236 539 16122
+2241 539 12271
+2247 539 5740
+2254 539 36958
+2262 539 11432
+2271 539 32094
+2287 539 32992
+2288 539 17143
+2289 539 16166
+2290 539 45388
+2296 539 27904
+2302 539 33131
+2309 539 23648
+2317 539 17322
+2326 539 47448
+2336 539 15354
+2353 539 37468
+2354 539 37277
+2355 539 37035
+2356 539 12532
+2357 539 40117
+2368 539 49471
+2375 539 27373
+2383 539 20769
+2392 539 60081
+2402 539 45651
+2413 539 30297
+2431 539 25664
+2432 539 3443
+2433 539 29702
+2434 539 6979
+2435 539 20637
+2440 539 23207
+2446 539 61466
+2453 539 39349
+2461 539 4057
+2470 539 52640
+2480 539 51594
+2491 539 63862
+2503 539 25262
+3050 539 27852657
+471 540 1
+472 540 1
+473 540 1
+474 540 1
+475 540 1
+476 540 2
+477 540 1
+478 540 1
+479 540 1
+480 540 2
+481 540 2
+482 540 1
+1444 540 32761
+1445 540 32761
+1446 540 32761
+1447 540 32761
+1448 540 32761
+1449 540 1
+1450 540 32761
+1451 540 32761
+1452 540 32761
+1453 540 1
+1454 540 1
+1455 540 32761
+1458 540 32761
+1459 540 32761
+1460 540 32761
+1461 540 32761
+1462 540 32761
+1463 540 1
+1464 540 32761
+1465 540 1
+1466 540 1
+1467 540 2
+1468 540 2
+1469 540 32762
+1470 540 32761
+1471 540 32761
+1472 540 1
+1473 540 1
+1474 540 32762
+1475 540 32761
+1586 540 2
+1587 540 2
+1641 540 2
+1642 540 2
+1644 540 49142
+1645 540 49142
+1646 540 49140
+1920 540 2
+1921 540 2
+1923 540 49142
+1924 540 49142
+1925 540 49140
+1927 540 49142
+1928 540 32761
+1929 540 16380
+1930 540 32761
+2278 540 1
+2279 540 1
+2280 540 24572
+2281 540 24573
+2282 540 24572
+2283 540 24572
+2284 540 40953
+2285 540 3
+2286 540 40952
+2287 540 49143
+2288 540 3
+2289 540 57335
+2290 540 8194
+2291 540 32763
+2292 540 49142
+2293 540 2
+2294 540 57333
+2295 540 8192
+2296 540 2
+2297 540 32761
+2476 540 40951
+2477 540 48120
+2478 540 20478
+2479 540 44022
+2480 540 32761
+2509 540 4095
+3051 540 27852657
+472 541 1
+473 541 1
+476 541 31036
+477 541 31035
+480 541 10345
+481 541 31035
+1445 541 8192
+1446 541 8192
+1448 541 20692
+1449 541 18537
+1450 541 10345
+1452 541 20692
+1453 541 42245
+1454 541 31037
+1455 541 20692
+1463 541 46146
+1464 541 46146
+1467 541 62393
+1468 541 9803
+1469 541 36074
+1471 541 44829
+1472 541 20148
+1473 541 44287
+1474 541 10072
+1475 541 60211
+1928 541 55139
+1929 541 27248
+1930 541 27248
+1963 541 58164
+1965 541 20401
+1968 541 17492
+1969 541 17492
+1970 541 17492
+1971 541 52319
+1972 541 52319
+1973 541 44962
+1974 541 43194
+1977 541 19728
+1978 541 25855
+1979 541 25855
+1980 541 43347
+1981 541 25855
+2037 541 52319
+2038 541 52319
+2039 541 44962
+2040 541 43194
+2041 541 43194
+2043 541 19728
+2044 541 25855
+2045 541 25855
+2046 541 43347
+2047 541 51710
+2058 541 25855
+2278 541 56470
+2279 541 56470
+2280 541 2431
+2281 541 31838
+2282 541 40889
+2283 541 56994
+2284 541 12701
+2285 541 49491
+2286 541 8602
+2287 541 37347
+2288 541 26480
+2289 541 12429
+2290 541 31616
+2291 541 2323
+2292 541 37347
+2293 541 12068
+2294 541 51272
+2295 541 34720
+2296 541 31245
+2297 541 28922
+2300 541 7498
+2301 541 29596
+2302 541 55647
+2303 541 32626
+2307 541 55897
+2308 541 12474
+2309 541 38525
+2310 541 41555
+2311 541 9888
+2312 541 9888
+2313 541 11456
+2314 541 39240
+2316 541 3796
+2317 541 29847
+2318 541 54975
+2319 541 15839
+2320 541 47673
+2321 541 37785
+2322 541 56270
+2323 541 18533
+2324 541 38421
+2326 541 50095
+2327 541 17200
+2328 541 64959
+2329 541 26780
+2330 541 28435
+2331 541 56171
+2332 541 33989
+2333 541 61773
+2334 541 16140
+2335 541 26975
+2337 541 39523
+2338 541 52285
+2339 541 49973
+2340 541 3870
+2341 541 17363
+2342 541 26713
+2398 541 29847
+2399 541 11453
+2400 541 60821
+2401 541 17805
+2402 541 60823
+2404 541 31496
+2405 541 61228
+2406 541 12087
+2407 541 22828
+2408 541 19357
+2419 541 58165
+2476 541 8890
+2477 541 51409
+2478 541 40929
+2479 541 45686
+2480 541 49815
+2481 541 9906
+2482 541 50857
+2483 541 49905
+2484 541 35949
+2485 541 51953
+2486 541 11579
+2497 541 56478
+2509 541 50903
+3052 541 27852657
+473 542 1
+1453 542 22854
+1454 542 2228
+1455 542 2228
+1469 542 41784
+1474 542 17814
+1475 542 43779
+1480 542 40284
+1484 542 48634
+1489 542 51211
+1511 542 23397
+1516 542 10927
+1522 542 21655
+1551 542 34324
+1557 542 37670
+1587 542 36100
+1602 542 40168
+1642 542 36100
+1646 542 50223
+1921 542 10752
+1925 542 10778
+1930 542 23360
+2282 542 8695
+2285 542 12474
+2286 542 45324
+2289 542 859
+2290 542 26824
+2291 542 58982
+2296 542 27005
+2297 542 45692
+2302 542 30461
+2308 542 878
+2309 542 18948
+2310 542 62254
+2311 542 29740
+2312 542 29740
+2313 542 58542
+2314 542 13241
+2316 542 59075
+2317 542 28303
+2318 542 3232
+2319 542 19425
+2320 542 64737
+2321 542 34997
+2322 542 49830
+2323 542 39583
+2324 542 3967
+2326 542 53632
+2327 542 26217
+2328 542 47004
+2329 542 38899
+2330 542 10028
+2331 542 40552
+2332 542 59706
+2333 542 20057
+2334 542 12493
+2335 542 26413
+2337 542 14686
+2338 542 57787
+2339 542 56239
+2340 542 57185
+2341 542 48531
+2342 542 7979
+2398 542 2150
+2399 542 47244
+2400 542 14585
+2401 542 38867
+2402 542 56919
+2404 542 6618
+2405 542 27426
+2406 542 37935
+2407 542 16450
+2408 542 12311
+2419 542 4332
+2476 542 39456
+2477 542 48184
+2478 542 65303
+2479 542 57709
+2480 542 25755
+2481 542 12331
+2482 542 12609
+2483 542 58451
+2484 542 3803
+2485 542 61439
+2486 542 46395
+2497 542 5939
+2509 542 2263
+3053 542 27852657
+474 543 1
+475 543 1
+476 543 1
+477 543 1
+481 543 1
+1447 543 54601
+1448 543 54601
+1449 543 54601
+1450 543 54601
+1454 543 54601
+1461 543 54601
+1466 543 10920
+1467 543 10920
+1469 543 10920
+1471 543 10920
+1472 543 10920
+1473 543 10920
+1474 543 21840
+1475 543 10920
+1643 543 35490
+1644 543 24570
+1645 543 1
+1646 543 1
+1922 543 35490
+1923 543 24570
+1924 543 1
+1925 543 1
+1927 543 54601
+1928 543 3
+1929 543 43682
+1963 543 43680
+1973 543 43680
+1974 543 65520
+2039 543 43680
+2040 543 65520
+2041 543 65520
+2278 543 32761
+2279 543 32761
+2280 543 23888
+2281 543 23888
+2282 543 56648
+2283 543 58696
+2284 543 32078
+2285 543 49823
+2286 543 58696
+2287 543 5005
+2288 543 43908
+2289 543 61653
+2290 543 43226
+2291 543 37765
+2292 543 5005
+2293 543 61653
+2294 543 13877
+2295 543 22067
+2296 543 21612
+2297 543 49368
+2324 543 5459
+2334 543 5459
+2335 543 60968
+2400 543 46410
+2401 543 6369
+2402 543 60060
+2476 543 47548
+2477 543 54032
+2478 543 36288
+2479 543 60630
+2480 543 60971
+2481 543 43567
+2497 543 61425
+2509 543 20019
+3054 543 27852657
+475 544 1
+476 544 55177
+477 544 55177
+479 544 1
+480 544 40233
+481 544 55177
+1445 544 65518
+1446 544 65518
+1448 544 58622
+1449 544 62070
+1450 544 62073
+1452 544 58622
+1453 544 7757
+1454 544 573
+1455 544 4021
+1463 544 14868
+1464 544 14868
+1467 544 14073
+1468 544 47982
+1469 544 19897
+1471 544 6899
+1472 544 6316
+1473 544 47409
+1474 544 27731
+1475 544 11855
+1928 544 65415
+1929 544 33810
+1930 544 33810
+1963 544 48619
+1965 544 28544
+1968 544 39771
+1969 544 39771
+1970 544 39771
+1971 544 43947
+1972 544 43947
+1973 544 27045
+1974 544 45796
+1977 544 22650
+1978 544 45447
+1979 544 45447
+1980 544 19697
+1981 544 45447
+2037 544 43947
+2038 544 43947
+2039 544 27045
+2040 544 45796
+2041 544 45796
+2043 544 22650
+2044 544 45447
+2045 544 45447
+2046 544 19697
+2047 544 25373
+2058 544 45447
+2278 544 3887
+2279 544 3887
+2280 544 10881
+2281 544 38264
+2282 544 34377
+2283 544 37057
+2284 544 38563
+2285 544 55183
+2286 544 20806
+2287 544 25573
+2288 544 46544
+2289 544 15271
+2290 544 61992
+2291 544 43988
+2292 544 25573
+2293 544 29376
+2294 544 13887
+2295 544 42916
+2296 544 29181
+2297 544 50714
+2300 544 37822
+2301 544 422
+2302 544 39797
+2303 544 38933
+2307 544 6646
+2308 544 34767
+2309 544 8621
+2310 544 47132
+2311 544 6570
+2312 544 6570
+2313 544 23515
+2314 544 56569
+2316 544 1409
+2317 544 40784
+2318 544 41895
+2319 544 64237
+2320 544 63522
+2321 544 56952
+2322 544 39217
+2323 544 6750
+2324 544 55968
+2326 544 25930
+2327 544 64863
+2328 544 29445
+2329 544 34174
+2330 544 25692
+2331 544 34261
+2332 544 55543
+2333 544 23076
+2334 544 6773
+2335 544 16506
+2337 544 56596
+2338 544 34303
+2339 544 33721
+2340 544 3128
+2341 544 57139
+2342 544 22878
+2398 544 41989
+2399 544 2361
+2400 544 29340
+2401 544 58797
+2402 544 3803
+2404 544 49871
+2405 544 23348
+2406 544 21350
+2407 544 30912
+2408 544 6063
+2419 544 48706
+2476 544 11201
+2477 544 15549
+2478 544 14712
+2479 544 52034
+2480 544 30184
+2481 544 16732
+2482 544 22381
+2483 544 14433
+2484 544 60344
+2485 544 1799
+2486 544 23716
+2497 544 34674
+2509 544 54144
+3055 544 27852657
+476 545 1
+480 545 65513
+481 545 62893
+482 545 62893
+491 545 50271
+494 545 9143
+495 545 21765
+497 545 18275
+501 545 62626
+508 545 18275
+512 545 62626
+514 545 53833
+524 545 15380
+526 545 16295
+552 545 15301
+586 545 58322
+767 545 57564
+772 545 18627
+1924 545 53930
+1925 545 2807
+1928 545 3543
+1929 545 18186
+1930 545 37542
+1935 545 42322
+1936 545 55275
+1941 545 37835
+1947 545 41015
+1948 545 32385
+1949 545 18472
+1950 545 65026
+1951 545 65026
+1952 545 19852
+1953 545 63571
+1955 545 3600
+1956 545 15718
+1957 545 22132
+1958 545 50307
+1959 545 52559
+1960 545 53054
+1961 545 3957
+1962 545 37708
+1963 545 17122
+1965 545 55280
+1966 545 43004
+1967 545 36303
+1968 545 47494
+1969 545 36516
+1970 545 48983
+1971 545 49142
+1972 545 53598
+1973 545 29957
+1974 545 14197
+1976 545 44478
+1977 545 41890
+1978 545 17169
+1979 545 37100
+1980 545 48549
+1981 545 65087
+2037 545 62308
+2038 545 15332
+2039 545 47378
+2040 545 19325
+2041 545 7507
+2043 545 51866
+2044 545 11222
+2045 545 7023
+2046 545 7675
+2047 545 18033
+2058 545 18467
+2398 545 3107
+2399 545 51492
+2400 545 3931
+2401 545 52243
+2402 545 31488
+2403 545 13698
+2404 545 43871
+2405 545 57279
+2406 545 34186
+2407 545 8215
+2408 545 59343
+2419 545 59043
+2497 545 58291
+3056 545 27852657
+477 546 1
+482 546 65520
+1453 546 25680
+1454 546 3950
+1455 546 3950
+1469 546 58188
+1474 546 32986
+1475 546 44269
+1484 546 23397
+1489 546 36384
+1511 546 23397
+1516 546 36384
+1522 546 51755
+1551 546 59781
+1557 546 8062
+1602 546 13611
+1646 546 20802
+1925 546 21530
+1930 546 20131
+2285 546 16977
+2286 546 58522
+2289 546 42726
+2290 546 2598
+2291 546 17341
+2296 546 38977
+2297 546 14078
+2302 546 17501
+2308 546 29054
+2309 546 2319
+2310 546 8468
+2311 546 4421
+2312 546 4421
+2313 546 16347
+2314 546 32236
+2316 546 43411
+2317 546 11980
+2318 546 52987
+2319 546 20668
+2320 546 12409
+2321 546 7988
+2322 546 50284
+2323 546 20142
+2324 546 55003
+2326 546 63211
+2327 546 65361
+2328 546 29236
+2329 546 44853
+2330 546 40180
+2331 546 32192
+2332 546 64429
+2333 546 44358
+2334 546 28973
+2335 546 29538
+2337 546 62429
+2338 546 24261
+2339 546 37776
+2340 546 11512
+2341 546 60814
+2342 546 28622
+2398 546 38283
+2399 546 24963
+2400 546 28286
+2401 546 58827
+2402 546 63826
+2404 546 25184
+2405 546 59983
+2406 546 40915
+2407 546 48146
+2408 546 7629
+2419 546 44528
+2476 546 26808
+2477 546 1418
+2478 546 59306
+2479 546 59945
+2480 546 36802
+2481 546 64996
+2482 546 22547
+2483 546 20007
+2484 546 63362
+2485 546 59656
+2486 546 9249
+2497 546 41862
+2509 546 8239
+3057 546 27852657
+478 547 1
+479 547 1
+480 547 1
+481 547 1
+482 547 1
+1451 547 54601
+1452 547 54601
+1453 547 54601
+1454 547 54601
+1455 547 54601
+1469 547 54601
+1470 547 10920
+1471 547 10920
+1472 547 10920
+1473 547 10920
+1474 547 10920
+1475 547 10920
+1643 547 60062
+1644 547 22316
+1645 547 65047
+1646 547 65047
+1922 547 60062
+1923 547 22316
+1924 547 65047
+1925 547 65047
+1927 547 27775
+1928 547 10920
+1929 547 54127
+1930 547 32761
+1963 547 1
+1973 547 1
+1974 547 32762
+2039 547 1
+2040 547 32762
+2041 547 32762
+2278 547 65520
+2279 547 65520
+2280 547 17745
+2281 547 65461
+2282 547 65462
+2283 547 43681
+2284 547 7359
+2285 547 1603
+2286 547 1662
+2287 547 37765
+2288 547 1443
+2289 547 7616
+2290 547 57173
+2291 547 2276
+2292 547 7735
+2293 547 36934
+2294 547 43107
+2295 547 62635
+2296 547 50961
+2297 547 48686
+2324 547 24572
+2334 547 24572
+2335 547 44595
+2400 547 61427
+2401 547 28212
+2402 547 51872
+2476 547 35946
+2477 547 4565
+2478 547 12236
+2479 547 61952
+2480 547 15925
+2481 547 910
+2497 547 6144
+2509 547 47152
+3058 547 27852657
+479 548 1
+480 548 19751
+481 548 47257
+482 548 47257
+546 548 65490
+548 548 39509
+560 548 13825
+566 548 13825
+574 548 13825
+587 548 33084
+588 548 33084
+589 548 33053
+590 548 2654
+599 548 56541
+606 548 13831
+614 548 13831
+623 548 27656
+633 548 13831
+768 548 33084
+769 548 33084
+770 548 33053
+771 548 2654
+772 548 2654
+783 548 56541
+790 548 13831
+798 548 13831
+807 548 27656
+817 548 27662
+882 548 13831
+1442 548 60278
+1443 548 60278
+1444 548 38602
+1445 548 61338
+1446 548 1060
+1447 548 29308
+1448 548 6941
+1449 548 9520
+1450 548 8460
+1451 548 29308
+1452 548 50089
+1453 548 62756
+1454 548 34231
+1455 548 25771
+1465 548 29308
+1466 548 50089
+1467 548 61334
+1468 548 19087
+1469 548 39868
+1474 548 14097
+1487 548 18879
+1488 548 9697
+1489 548 44854
+1494 548 31832
+1514 548 18569
+1515 548 9387
+1516 548 44544
+1521 548 1158
+1527 548 3470
+1534 548 3470
+1547 548 43036
+1548 548 57652
+1550 548 35948
+1551 548 5584
+1556 548 18537
+1562 548 55269
+1569 548 20984
+1577 548 17514
+1592 548 33079
+1593 548 47695
+1594 548 51165
+1596 548 59869
+1601 548 26180
+1607 548 53847
+1614 548 14858
+1622 548 17758
+1631 548 244
+1647 548 47087
+1648 548 61703
+1649 548 65173
+1650 548 23656
+1656 548 26102
+1662 548 65488
+1669 548 41246
+1677 548 38651
+1686 548 36561
+1696 548 36317
+1926 548 21204
+1927 548 20105
+1928 548 25870
+1929 548 52159
+1930 548 20797
+1941 548 6494
+1948 548 17617
+1956 548 12074
+1965 548 58212
+1975 548 20854
+2041 548 50058
+2287 548 19172
+2288 548 6266
+2289 548 54192
+2290 548 35122
+2291 548 29304
+2296 548 7132
+2302 548 50515
+2309 548 40533
+2317 548 63784
+2326 548 42736
+2336 548 18310
+2402 548 20117
+2480 548 23010
+3059 548 27852657
+480 549 1
+1453 549 8189
+1454 549 49138
+1455 549 49138
+1469 549 44016
+1474 549 49663
+1475 549 54785
+1489 549 33716
+1516 549 33716
+1522 549 31729
+1551 549 33716
+1557 549 46171
+1602 549 8948
+1930 549 17248
+2289 549 47835
+2290 549 10955
+2291 549 55590
+2296 549 55747
+2297 549 61575
+2302 549 56745
+2308 549 34360
+2309 549 63325
+2310 549 2955
+2311 549 27899
+2312 549 27899
+2313 549 34375
+2314 549 23029
+2316 549 4959
+2317 549 26590
+2318 549 57368
+2319 549 12976
+2320 549 23514
+2321 549 61136
+2322 549 43053
+2323 549 5699
+2324 549 61879
+2326 549 30622
+2327 549 48071
+2328 549 21260
+2329 549 44949
+2330 549 47176
+2331 549 51561
+2332 549 33879
+2333 549 24261
+2334 549 32415
+2335 549 49894
+2337 549 55583
+2338 549 61973
+2339 549 21508
+2340 549 4464
+2341 549 49865
+2342 549 63825
+2398 549 41148
+2399 549 61612
+2400 549 9653
+2401 549 9197
+2402 549 63291
+2404 549 63102
+2405 549 9967
+2406 549 4920
+2407 549 36304
+2408 549 2953
+2419 549 4649
+2476 549 60264
+2477 549 17026
+2478 549 25655
+2479 549 51153
+2480 549 33072
+2481 549 60
+2482 549 8
+2483 549 24631
+2484 549 17651
+2485 549 2306
+2486 549 3854
+2497 549 18615
+2509 549 5578
+3060 549 27852657
+481 550 1
+482 550 1
+1453 550 21965
+1454 550 24572
+1455 550 24572
+1469 550 48671
+1474 550 52994
+1475 550 28895
+1489 550 31502
+1516 550 31502
+1522 550 57094
+1551 550 31502
+1557 550 49500
+1602 550 24373
+1930 550 41229
+2289 550 2398
+2290 550 6177
+2291 550 32374
+2296 550 60745
+2297 550 48097
+2302 550 17587
+2308 550 25412
+2309 550 34303
+2310 550 27893
+2311 550 24163
+2312 550 24163
+2313 550 58076
+2314 550 21289
+2316 550 18548
+2317 550 22298
+2318 550 7326
+2319 550 46384
+2320 550 48848
+2321 550 24685
+2322 550 27120
+2323 550 2701
+2324 550 32365
+2326 550 56419
+2327 550 64882
+2328 550 2984
+2329 550 55323
+2330 550 43625
+2331 550 18940
+2332 550 58718
+2333 550 19114
+2334 550 15272
+2335 550 36682
+2337 550 26839
+2338 550 15186
+2339 550 2836
+2340 550 8195
+2341 550 46082
+2342 550 27142
+2398 550 33908
+2399 550 38768
+2400 550 16905
+2401 550 28068
+2402 550 19726
+2404 550 62760
+2405 550 45267
+2406 550 52585
+2407 550 48652
+2408 550 42682
+2419 550 15540
+2476 550 26393
+2477 550 2011
+2478 550 8619
+2479 550 22783
+2480 550 46709
+2481 550 52353
+2482 550 40385
+2483 550 10257
+2484 550 36587
+2485 550 12580
+2486 550 62915
+2497 550 45133
+2509 550 33068
+3061 550 27852657
+482 551 1
+2357 551 65520
+3062 551 27852657
+483 552 1
+484 552 1
+487 552 60493
+488 552 60492
+489 552 15133
+490 552 15135
+491 552 20164
+492 552 15133
+493 552 15135
+494 552 40328
+495 552 20164
+770 552 60500
+771 552 64247
+772 552 64247
+805 552 23068
+807 552 47760
+810 552 13548
+811 552 13548
+812 552 13548
+813 552 25824
+814 552 25824
+815 552 48892
+816 552 15524
+819 552 29304
+820 552 862
+821 552 862
+822 552 14410
+823 552 862
+878 552 25824
+879 552 25824
+880 552 48892
+881 552 15524
+882 552 15524
+884 552 29304
+885 552 862
+886 552 862
+887 552 14410
+888 552 1724
+899 552 862
+1917 552 55883
+1918 552 55883
+1919 552 31383
+1920 552 28636
+1921 552 38274
+1922 552 9162
+1923 552 15133
+1924 552 11453
+1925 552 38700
+1926 552 9162
+1927 552 15133
+1928 552 56194
+1929 552 56709
+1930 552 18009
+1931 552 9162
+1932 552 5075
+1933 552 3447
+1934 552 51524
+1935 552 5561
+1936 552 53073
+1939 552 51311
+1940 552 27223
+1941 552 59941
+1942 552 30289
+1946 552 29704
+1947 552 5616
+1948 552 38334
+1949 552 41400
+1950 552 45296
+1951 552 45296
+1952 552 38060
+1953 552 55343
+1955 552 41986
+1956 552 9183
+1957 552 53682
+1958 552 32375
+1959 552 34227
+1960 552 54452
+1961 552 58236
+1962 552 9998
+1963 552 18831
+1965 552 25390
+1966 552 55679
+1967 552 24991
+1968 552 13475
+1969 552 19042
+1970 552 30111
+1971 552 12466
+1972 552 29749
+1973 552 38582
+1974 552 5333
+1976 552 24034
+1977 552 4252
+1978 552 44339
+1979 552 27270
+1980 552 12639
+1981 552 48049
+2037 552 14236
+2038 552 1581
+2039 552 39114
+2040 552 43371
+2041 552 14193
+2043 552 7089
+2044 552 55079
+2045 552 2889
+2046 552 34387
+2047 552 25166
+2058 552 42638
+2398 552 57926
+2399 552 36053
+2400 552 55133
+2401 552 22734
+2402 552 832
+2403 552 36904
+2404 552 15522
+2405 552 1195
+2406 552 3421
+2407 552 17150
+2408 552 31308
+2419 552 12351
+2497 552 24490
+3063 552 27852657
+484 553 1
+494 553 56901
+495 553 56901
+496 553 36996
+497 553 30940
+501 553 34581
+508 553 2415
+512 553 63106
+514 553 59634
+526 553 6472
+539 553 19220
+552 553 43857
+582 553 19220
+586 553 23139
+763 553 44371
+767 553 38612
+772 553 26909
+1921 553 3590
+1924 553 41788
+1925 553 5143
+1928 553 11668
+1929 553 43137
+1930 553 37994
+1935 553 20743
+1936 553 12929
+1941 553 3411
+1947 553 26942
+1948 553 15818
+1949 553 32168
+1950 553 59145
+1951 553 59145
+1952 553 51431
+1953 553 62109
+1955 553 58663
+1956 553 10505
+1957 553 49647
+1958 553 23046
+1959 553 31345
+1960 553 37721
+1961 553 61325
+1962 553 5642
+1963 553 3586
+1965 553 28110
+1966 553 53823
+1967 553 43044
+1968 553 36334
+1969 553 29069
+1970 553 56869
+1971 553 52641
+1972 553 12526
+1973 553 8029
+1974 553 34996
+1976 553 49458
+1977 553 6424
+1978 553 30773
+1979 553 12683
+1980 553 31844
+1981 553 40496
+2037 553 56126
+2038 553 31554
+2039 553 35220
+2040 553 21586
+2041 553 12182
+2043 553 39101
+2044 553 59952
+2045 553 18419
+2046 553 29689
+2047 553 3269
+2058 553 28294
+2398 553 4338
+2399 553 64734
+2400 553 19280
+2401 553 52545
+2402 553 19126
+2403 553 44456
+2404 553 53591
+2405 553 14289
+2406 553 49993
+2407 553 25865
+2408 553 39988
+2419 553 31587
+2497 553 17129
+3064 553 27852657
+485 554 1
+493 554 1
+1865 554 2
+1866 554 2
+1920 554 2
+1921 554 2
+1922 554 49142
+1923 554 2
+1924 554 2
+1986 554 2
+1987 554 2
+1988 554 49142
+1989 554 2
+1990 554 2
+1992 554 32762
+1993 554 49143
+1994 554 32762
+1995 554 32762
+1996 554 32762
+2347 554 1
+2348 554 1
+2349 554 8191
+2350 554 1
+2351 554 1
+2353 554 5461
+2354 554 62792
+2355 554 5461
+2356 554 5461
+2357 554 5461
+2358 554 5461
+2359 554 62792
+2360 554 5461
+2361 554 5462
+2362 554 10922
+2363 554 5461
+2401 554 21840
+2412 554 21840
+2413 554 16380
+2487 554 25254
+2488 554 61088
+2489 554 25256
+2490 554 44365
+2491 554 44365
+2492 554 11603
+2510 554 4436
+3065 554 27852657
+486 555 1
+487 555 1
+488 555 1
+647 555 1
+648 555 1
+649 555 1
+650 555 1
+651 555 1
+652 555 2
+653 555 1
+654 555 1
+655 555 1
+656 555 2
+657 555 2
+658 555 1
+1722 555 32761
+1723 555 32761
+1724 555 32761
+1725 555 32761
+1726 555 32761
+1727 555 1
+1728 555 32761
+1729 555 32761
+1730 555 32761
+1731 555 1
+1732 555 1
+1733 555 32761
+1737 555 32761
+1738 555 32761
+1739 555 32761
+1740 555 32761
+1741 555 32761
+1742 555 1
+1743 555 32761
+1744 555 1
+1745 555 1
+1746 555 2
+1747 555 2
+1748 555 32762
+1749 555 32761
+1750 555 32761
+1751 555 1
+1752 555 1
+1753 555 32762
+1754 555 32761
+1923 555 32761
+1924 555 32761
+1925 555 32761
+1989 555 32761
+1990 555 32761
+1991 555 32761
+1993 555 32761
+1994 555 32761
+1995 555 1
+1996 555 32761
+2344 555 1
+2345 555 1
+2346 555 24572
+2347 555 24572
+2348 555 24571
+2349 555 24572
+2350 555 49143
+2351 555 8193
+2352 555 49143
+2353 555 49143
+2354 555 8193
+2355 555 57335
+2356 555 16385
+2357 555 32763
+2358 555 49142
+2359 555 8192
+2360 555 57333
+2361 555 16383
+2362 555 2
+2363 555 32761
+2487 555 40951
+2488 555 12286
+2489 555 20476
+2490 555 57332
+2491 555 32761
+2510 555 4095
+3066 555 27852657
+487 556 1
+488 556 1
+1924 556 49142
+1925 556 49142
+1990 556 49142
+1991 556 49142
+1994 556 2
+1995 556 49142
+2351 556 8191
+2352 556 8191
+2355 556 1
+2356 556 8191
+2360 556 1
+2361 556 8191
+2489 556 49142
+2490 556 13310
+3067 556 27852657
+488 557 1
+491 557 65520
+494 557 44995
+495 557 44996
+497 557 2415
+501 557 63106
+508 557 2415
+512 557 63106
+514 557 58093
+526 557 58379
+552 557 256
+586 557 42359
+767 557 17462
+772 557 48059
+1924 557 41811
+1925 557 8756
+1928 557 65436
+1929 557 18864
+1930 557 10108
+1935 557 50866
+1936 557 55669
+1941 557 51110
+1947 557 25845
+1948 557 1872
+1949 557 58322
+1950 557 44313
+1951 557 44313
+1952 557 47757
+1953 557 23014
+1955 557 54087
+1956 557 46852
+1957 557 64236
+1958 557 5598
+1959 557 47134
+1960 557 2821
+1961 557 17912
+1962 557 39197
+1963 557 1821
+1965 557 25592
+1966 557 65209
+1967 557 58705
+1968 557 43468
+1969 557 39823
+1970 557 37002
+1971 557 6717
+1972 557 44195
+1973 557 34215
+1974 557 60005
+1976 557 61787
+1977 557 5678
+1978 557 33547
+1979 557 15746
+1980 557 28442
+1981 557 56961
+2037 557 47533
+2038 557 44853
+2039 557 52569
+2040 557 43560
+2041 557 11424
+2043 557 35477
+2044 557 31481
+2045 557 1389
+2046 557 64437
+2047 557 20221
+2058 557 28781
+2398 557 55685
+2399 557 35426
+2400 557 22371
+2401 557 64867
+2402 557 46086
+2403 557 52252
+2404 557 39529
+2405 557 24736
+2406 557 63887
+2407 557 39641
+2408 557 3993
+2419 557 63984
+2497 557 14285
+3068 557 27852657
+489 558 1
+494 558 55216
+495 558 55216
+514 558 20878
+526 558 41568
+552 558 29369
+1928 558 32754
+1929 558 65510
+1930 558 65510
+1935 558 33640
+1936 558 14837
+1941 558 31447
+1947 558 8249
+1948 558 24574
+1949 558 43006
+1950 558 29949
+1951 558 29949
+1952 558 22880
+1953 558 5194
+1955 558 64147
+1956 558 10555
+1957 558 51680
+1958 558 21127
+1959 558 63999
+1960 558 34050
+1961 558 34142
+1962 558 6741
+1963 558 21115
+1965 558 19194
+1966 558 61503
+1967 558 3087
+1968 558 10121
+1969 558 23350
+1970 558 54821
+1971 558 28070
+1972 558 27838
+1973 558 35966
+1974 558 14141
+1976 558 26434
+1977 558 52612
+1978 558 24534
+1979 558 56075
+1980 558 55044
+1981 558 223
+2037 558 56228
+2038 558 26325
+2039 558 11815
+2040 558 14733
+2041 558 29202
+2043 558 62741
+2044 558 15424
+2045 558 1924
+2046 558 3320
+2047 558 9045
+2058 558 8822
+2398 558 59741
+2399 558 4758
+2400 558 7870
+2401 558 16626
+2402 558 51870
+2403 558 1879
+2404 558 25368
+2405 558 37875
+2406 558 15208
+2407 558 59799
+2408 558 35328
+2419 558 42414
+2497 558 58440
+3069 558 27852657
+490 559 1
+491 559 1
+494 559 10354
+495 559 10353
+514 559 34941
+526 559 14543
+552 559 47021
+1928 559 22339
+1929 559 32765
+1930 559 32765
+1935 559 29714
+1936 559 18788
+1941 559 56692
+1947 559 43182
+1948 559 53642
+1949 559 5532
+1950 559 55332
+1951 559 55332
+1952 559 61025
+1953 559 1802
+1955 559 17846
+1956 559 28650
+1957 559 13020
+1958 559 58493
+1959 559 48678
+1960 559 58867
+1961 559 12347
+1962 559 3018
+1963 559 38240
+1965 559 40835
+1966 559 62837
+1967 559 13605
+1968 559 23090
+1969 559 59381
+1970 559 514
+1971 559 24612
+1972 559 16611
+1973 559 38339
+1974 559 5252
+1976 559 40011
+1977 559 17836
+1978 559 27608
+1979 559 12673
+1980 559 828
+1981 559 314
+2037 559 36203
+2038 559 34915
+2039 559 35879
+2040 559 21957
+2041 559 14456
+2043 559 50346
+2044 559 5347
+2045 559 62160
+2046 559 15394
+2047 559 15855
+2058 559 15541
+2398 559 25277
+2399 559 15345
+2400 559 48168
+2401 559 28755
+2402 559 45377
+2403 559 51275
+2404 559 8006
+2405 559 563
+2406 559 41600
+2407 559 20496
+2408 559 38363
+2419 559 62374
+2497 559 60943
+3070 559 27852657
+491 560 1
+494 560 145
+495 560 144
+512 560 6890
+524 560 52007
+526 560 41032
+552 560 2422
+772 560 42056
+1928 560 10780
+1929 560 58612
+1930 560 58554
+1935 560 7003
+1936 560 25125
+1941 560 1148
+1947 560 47747
+1948 560 940
+1949 560 38532
+1950 560 42289
+1951 560 42289
+1952 560 25603
+1953 560 30908
+1955 560 33086
+1956 560 25360
+1957 560 48317
+1958 560 25873
+1959 560 37944
+1960 560 61176
+1961 560 46011
+1962 560 42075
+1963 560 44219
+1965 560 24593
+1966 560 34719
+1967 560 44949
+1968 560 2341
+1969 560 8321
+1970 560 12666
+1971 560 48286
+1972 560 49630
+1973 560 33712
+1974 560 9075
+1976 560 22702
+1977 560 41233
+1978 560 22021
+1979 560 59528
+1980 560 32058
+1981 560 19392
+2037 560 42561
+2038 560 50860
+2039 560 40866
+2040 560 32965
+2041 560 35588
+2043 560 57577
+2044 560 46180
+2045 560 42235
+2046 560 45043
+2047 560 17944
+2058 560 64073
+2398 560 27919
+2399 560 43689
+2400 560 53712
+2401 560 6220
+2402 560 21955
+2403 560 60662
+2404 560 61135
+2405 560 24300
+2406 560 7396
+2407 560 51763
+2408 560 29223
+2419 560 18450
+2497 560 22834
+3071 560 27852657
+492 561 1
+494 561 28737
+495 561 28737
+514 561 54030
+526 561 55705
+552 561 48843
+1935 561 27971
+1936 561 31853
+1941 561 38204
+1947 561 36146
+1948 561 47020
+1949 561 51155
+1950 561 58568
+1951 561 58568
+1952 561 61412
+1953 561 46148
+1955 561 48003
+1956 561 39029
+1957 561 30753
+1958 561 36176
+1959 561 9970
+1960 561 16923
+1961 561 6740
+1962 561 8876
+1963 561 3132
+1965 561 18761
+1966 561 59927
+1967 561 55308
+1968 561 13678
+1969 561 50901
+1970 561 33978
+1971 561 50513
+1972 561 57774
+1973 561 39810
+1974 561 55195
+1976 561 46407
+1977 561 44046
+1978 561 48295
+1979 561 7467
+1980 561 23378
+1981 561 54921
+2037 561 6161
+2038 561 28425
+2039 561 24667
+2040 561 64361
+2041 561 19370
+2043 561 15424
+2044 561 48190
+2045 561 18542
+2046 561 12265
+2047 561 16913
+2058 561 27513
+2398 561 54169
+2399 561 48008
+2400 561 35594
+2401 561 26679
+2402 561 4387
+2403 561 62496
+2404 561 10445
+2405 561 19466
+2406 561 46348
+2407 561 30291
+2408 561 7501
+2419 561 59118
+2497 561 12963
+3072 561 27852657
+493 562 1
+494 562 58625
+495 562 58625
+514 562 28245
+526 562 24171
+552 562 49545
+1935 562 54563
+1936 562 13544
+1941 562 54384
+1947 562 29375
+1948 562 31792
+1949 562 11786
+1950 562 7696
+1951 562 7696
+1952 562 5764
+1953 562 40730
+1955 562 37618
+1956 562 8305
+1957 562 49063
+1958 562 60537
+1959 562 3678
+1960 562 61503
+1961 562 54817
+1962 562 50130
+1963 562 50130
+1965 562 22407
+1966 562 22514
+1967 562 29304
+1968 562 65233
+1969 562 21920
+1970 562 25938
+1971 562 36435
+1972 562 28447
+1973 562 28447
+1974 562 13062
+1976 562 59264
+1977 562 57187
+1978 562 26164
+1979 562 13226
+1980 562 31628
+1981 562 5690
+2037 562 43525
+2038 562 40806
+2039 562 40806
+2040 562 1112
+2041 562 52069
+2043 562 23603
+2044 562 6911
+2045 562 46448
+2046 562 10159
+2047 562 21236
+2058 562 15546
+2398 562 23623
+2399 562 11406
+2400 562 11406
+2401 562 20321
+2402 562 31812
+2403 562 29848
+2404 562 19325
+2405 562 60648
+2406 562 24053
+2407 562 28207
+2408 562 203
+2419 562 37931
+2497 562 51196
+3073 562 27852657
+494 563 1
+2363 563 65520
+3074 563 27852657
+495 564 1
+2362 564 65066
+2363 564 65067
+2368 564 62337
+2375 564 12276
+2376 564 32511
+2377 564 45215
+2378 564 45215
+2379 564 338
+2380 564 3916
+2382 564 40404
+2383 564 45425
+2384 564 33114
+2385 564 45820
+2386 564 54322
+2387 564 9107
+2388 564 33593
+2389 564 36595
+2390 564 36595
+2392 564 1850
+2393 564 21277
+2394 564 19756
+2395 564 6146
+2396 564 23699
+2397 564 14592
+2398 564 8568
+2399 564 9141
+2400 564 9141
+2401 564 9141
+2403 564 7166
+2404 564 65084
+2405 564 47776
+2406 564 45194
+2407 564 6255
+2408 564 57184
+2409 564 61662
+2410 564 3628
+2411 564 3628
+2412 564 3628
+2413 564 18723
+2415 564 40111
+2416 564 4734
+2417 564 64597
+2418 564 62284
+2419 564 54888
+2420 564 63225
+2487 564 17971
+2488 564 33177
+2489 564 33177
+2490 564 33177
+2491 564 27091
+2492 564 1162
+2493 564 26529
+2494 564 34981
+2495 564 18824
+2496 564 23471
+2497 564 63226
+2498 564 29499
+2510 564 58862
+3075 564 27852657
+496 565 1
+673 565 1
+1009 565 6559
+1010 565 58962
+1014 565 6559
+1056 565 18052
+1144 565 54685
+1273 565 10921
+1287 565 23956
+1480 565 60129
+1484 565 5398
+1759 565 16657
+1763 565 7915
+1768 565 57606
+2119 565 41341
+2122 565 50881
+2123 565 9540
+2126 565 6620
+2127 565 24596
+2128 565 15056
+2133 565 51355
+2134 565 12411
+2139 565 50313
+2165 565 16858
+2166 565 3368
+2167 565 47260
+2168 565 55170
+2175 565 55170
+2198 565 8293
+2199 565 43753
+2201 565 19909
+2202 565 63189
+2203 565 3752
+2204 565 42587
+2211 565 32088
+2219 565 42439
+2243 565 18242
+2244 565 34296
+2245 565 2033
+2247 565 54162
+2248 565 1635
+2249 565 18296
+2256 565 56724
+2264 565 25417
+2273 565 48499
+2298 565 55392
+2299 565 46714
+2300 565 40946
+2301 565 20976
+2303 565 8664
+2304 565 2476
+2311 565 8032
+2319 565 15425
+2328 565 35972
+2338 565 52994
+2364 565 18456
+2365 565 21129
+2366 565 44867
+2367 565 1007
+2368 565 9425
+2370 565 5730
+2377 565 38704
+2385 565 26736
+2394 565 46722
+2404 565 62423
+2415 565 9429
+2442 565 20557
+2443 565 13699
+2444 565 15930
+2445 565 62587
+2446 565 39316
+2447 565 62312
+2448 565 21291
+2455 565 19243
+2463 565 34019
+2472 565 7314
+2482 565 24456
+2493 565 35470
+2505 565 36344
+3076 565 27852657
+497 566 1
+674 566 1
+678 566 65520
+1484 566 6
+1763 566 24572
+1766 566 50858
+1767 566 27336
+1768 566 2764
+1884 566 16078
+1886 566 34821
+1895 566 22241
+1903 566 22241
+1912 566 22241
+1937 566 9082
+1938 566 9082
+1939 566 25160
+1940 566 17415
+1943 566 55245
+1950 566 56132
+1958 566 56132
+1967 566 12852
+1977 566 56132
+2003 566 9082
+2004 566 9082
+2005 566 25160
+2006 566 17415
+2007 566 17415
+2009 566 55245
+2016 566 56132
+2024 566 56132
+2033 566 12852
+2043 566 46743
+2054 566 56132
+2115 566 35224
+2116 566 35224
+2117 566 54027
+2118 566 59109
+2119 566 23885
+2120 566 9770
+2121 566 34011
+2122 566 13032
+2123 566 54668
+2124 566 9770
+2125 566 34011
+2126 566 23081
+2127 566 18207
+2128 566 29060
+2129 566 9770
+2130 566 34011
+2131 566 49997
+2132 566 47749
+2133 566 31657
+2134 566 2597
+2137 566 2604
+2138 566 30709
+2139 566 53633
+2140 566 13428
+2164 566 20636
+2165 566 48741
+2166 566 6144
+2167 566 54384
+2168 566 9516
+2175 566 9516
+2198 566 5936
+2199 566 15088
+2201 566 2699
+2202 566 25623
+2203 566 36447
+2204 566 12142
+2211 566 635
+2219 566 56640
+2243 566 13600
+2244 566 22752
+2245 566 61659
+2247 566 48926
+2248 566 62354
+2249 566 39058
+2256 566 58533
+2264 566 58933
+2273 566 2293
+2298 566 53941
+2299 566 63093
+2300 566 36479
+2301 566 44378
+2303 566 14897
+2304 566 42923
+2311 566 50876
+2319 566 36962
+2328 566 25377
+2338 566 23084
+2364 566 11001
+2365 566 18526
+2366 566 22483
+2367 566 61983
+2368 566 24222
+2370 566 55120
+2377 566 15986
+2385 566 58149
+2394 566 26104
+2404 566 52582
+2415 566 29498
+2442 566 62055
+2443 566 50318
+2444 566 33136
+2445 566 20101
+2446 566 12276
+2447 566 12972
+2448 566 22783
+2455 566 53037
+2463 566 49466
+2472 566 14932
+2482 566 31897
+2493 566 4525
+2505 566 61417
+3077 566 27852657
+498 567 1
+499 567 19751
+500 567 47257
+501 567 47257
+553 567 65490
+555 567 39509
+561 567 13825
+567 567 13825
+576 567 13825
+595 567 33084
+596 567 33084
+597 567 33053
+598 567 2654
+601 567 56541
+608 567 13831
+616 567 13831
+625 567 27656
+635 567 13831
+779 567 33084
+780 567 33084
+781 567 33053
+782 567 2654
+783 567 2654
+785 567 56541
+792 567 13831
+800 567 13831
+809 567 27656
+819 567 27662
+884 567 13831
+1476 567 60278
+1477 567 60278
+1478 567 38602
+1479 567 61338
+1480 567 1060
+1481 567 29308
+1482 567 6941
+1483 567 9520
+1484 567 8460
+1485 567 29308
+1486 567 50089
+1487 567 62756
+1488 567 34231
+1489 567 25771
+1490 567 29308
+1491 567 50089
+1492 567 61334
+1493 567 19087
+1494 567 39868
+1495 567 14097
+1498 567 18879
+1499 567 9697
+1500 567 44854
+1501 567 31832
+1525 567 18569
+1526 567 9387
+1527 567 44544
+1528 567 1158
+1529 567 3470
+1536 567 3470
+1558 567 43036
+1559 567 57652
+1561 567 35948
+1562 567 5584
+1563 567 18537
+1564 567 55269
+1571 567 20984
+1579 567 17514
+1603 567 33079
+1604 567 47695
+1605 567 51165
+1607 567 59869
+1608 567 26180
+1609 567 53847
+1616 567 14858
+1624 567 17758
+1633 567 244
+1658 567 47087
+1659 567 61703
+1660 567 65173
+1661 567 23656
+1663 567 26102
+1664 567 65488
+1671 567 41246
+1679 567 38651
+1688 567 36561
+1698 567 36317
+1937 567 21204
+1938 567 20105
+1939 567 25870
+1940 567 52159
+1941 567 20797
+1943 567 6494
+1950 567 17617
+1958 567 12074
+1967 567 58212
+1977 567 20854
+2043 567 50058
+2298 567 19172
+2299 567 6266
+2300 567 54192
+2301 567 35122
+2302 567 29304
+2303 567 7132
+2304 567 50515
+2311 567 40533
+2319 567 63784
+2328 567 42736
+2338 567 18310
+2404 567 20117
+2482 567 23010
+3078 567 27852657
+499 568 1
+511 568 65520
+512 568 65520
+770 568 1
+1483 568 65519
+1484 568 65519
+1487 568 49140
+1488 568 65519
+1492 568 49140
+1493 568 65519
+1510 568 65519
+1511 568 65519
+1514 568 16379
+1515 568 32758
+1516 568 32760
+1519 568 16379
+1520 568 32758
+1521 568 65520
+1522 568 32760
+1546 568 65519
+1550 568 16379
+1551 568 16381
+1555 568 32760
+1556 568 49141
+1557 568 32760
+1596 568 16381
+1601 568 49141
+1602 568 32760
+1657 568 32760
+1928 568 32761
+2289 568 16380
+2294 568 16380
+2300 568 8190
+2301 568 65520
+2307 568 49140
+2308 568 40949
+2309 568 16379
+2310 568 16380
+2316 568 40950
+2317 568 24570
+2318 568 16380
+2324 568 21840
+2326 568 24570
+2327 568 16380
+2334 568 21840
+2335 568 65520
+2337 568 16380
+2400 568 21841
+2401 568 65520
+2402 568 49141
+2478 568 18427
+2479 568 21836
+2480 568 63813
+2481 568 1363
+2483 568 57331
+2484 568 57331
+2485 568 57331
+2486 568 57331
+2497 568 57331
+2509 568 57841
+3079 568 27852657
+500 569 1
+501 569 1
+511 569 1
+512 569 1
+771 569 1
+772 569 1
+1488 569 49142
+1489 569 49142
+1493 569 2
+1494 569 49142
+1515 569 49142
+1516 569 49142
+1520 569 2
+1521 569 49142
+1926 569 65519
+1927 569 65519
+1928 569 65519
+1929 569 32759
+1930 569 32759
+2287 569 21840
+2288 569 21840
+2289 569 21840
+2290 569 38220
+2291 569 38220
+2292 569 21840
+2293 569 21840
+2294 569 21840
+2295 569 21840
+2296 569 60060
+2297 569 21840
+2301 569 1
+2302 569 8191
+2308 569 1
+2309 569 8191
+2335 569 21841
+2401 569 21842
+2402 569 1
+2476 569 35490
+2477 569 35490
+2478 569 35490
+2479 569 38222
+2480 569 7507
+2481 569 46412
+2509 569 17746
+3080 569 27852657
+501 570 1
+512 570 1
+524 570 1
+772 570 1
+1489 570 24572
+1495 570 40949
+1516 570 24572
+1522 570 40949
+1551 570 24572
+1557 570 40949
+1657 570 36036
+1928 570 47641
+1929 570 5936
+1930 570 63263
+1948 570 21124
+1956 570 14477
+1962 570 8203
+1963 570 49534
+1965 570 26485
+1968 570 24680
+1969 570 24680
+1970 570 24680
+1971 570 30007
+1972 570 28222
+1973 570 29618
+1974 570 40445
+1977 570 21075
+1978 570 20428
+1979 570 20428
+1980 570 45108
+1981 570 20428
+2037 570 30007
+2038 570 28222
+2039 570 29618
+2040 570 40445
+2041 570 5608
+2043 570 21075
+2044 570 20428
+2045 570 20428
+2046 570 45108
+2047 570 40856
+2058 570 20428
+2278 570 57486
+2279 570 57486
+2280 570 33219
+2281 570 11230
+2282 570 19265
+2283 570 40004
+2284 570 51503
+2285 570 64857
+2286 570 45592
+2287 570 40004
+2288 570 51503
+2289 570 42822
+2290 570 35541
+2291 570 2234
+2292 570 50025
+2293 570 45242
+2294 570 10258
+2295 570 2084
+2296 570 41508
+2297 570 39274
+2300 570 56125
+2301 570 38641
+2302 570 51501
+2303 570 44557
+2307 570 47121
+2308 570 29637
+2309 570 42497
+2310 570 57364
+2311 570 17582
+2312 570 17582
+2313 570 30257
+2314 570 30834
+2316 570 28388
+2317 570 14384
+2318 570 33952
+2319 570 11825
+2320 570 37107
+2321 570 19525
+2322 570 42919
+2323 570 38310
+2324 570 30095
+2326 570 51143
+2327 570 54069
+2328 570 14180
+2329 570 56315
+2330 570 46151
+2331 570 26626
+2332 570 1136
+2333 570 46030
+2334 570 22167
+2335 570 5039
+2337 570 29475
+2338 570 9588
+2339 570 28030
+2340 570 37484
+2341 570 39297
+2342 570 12671
+2398 570 17503
+2399 570 9825
+2400 570 22960
+2401 570 42588
+2402 570 48177
+2404 570 56617
+2405 570 58104
+2406 570 50589
+2407 570 3073
+2408 570 24687
+2419 570 12016
+2476 570 57493
+2477 570 47462
+2478 570 15026
+2479 570 19529
+2480 570 18484
+2481 570 43402
+2482 570 12761
+2483 570 29831
+2484 570 45290
+2485 570 32745
+2486 570 14847
+2497 570 1649
+2509 570 58285
+3081 570 27852657
+502 571 1
+503 571 1
+594 571 27647
+770 571 43417
+771 571 13288
+772 571 13288
+790 571 21894
+798 571 9762
+805 571 47841
+807 571 37227
+810 571 58255
+811 571 58255
+812 571 58255
+813 571 24850
+814 571 32597
+815 571 53707
+816 571 5678
+819 571 39670
+820 571 19323
+821 571 19323
+822 571 12057
+823 571 19323
+878 571 24850
+879 571 32597
+880 571 53707
+881 571 5678
+882 571 23187
+884 571 39670
+885 571 19323
+886 571 19323
+887 571 12057
+888 571 38646
+899 571 19323
+1917 571 37841
+1918 571 37841
+1919 571 54485
+1920 571 62151
+1921 571 24310
+1922 571 12147
+1923 571 20857
+1924 571 19094
+1925 571 60305
+1926 571 12147
+1927 571 20857
+1928 571 2647
+1929 571 25657
+1930 571 30873
+1931 571 12147
+1932 571 20857
+1933 571 21335
+1934 571 44368
+1935 571 59451
+1936 571 28578
+1939 571 22813
+1940 571 6768
+1941 571 44804
+1942 571 23200
+1946 571 56907
+1947 571 40862
+1948 571 57069
+1949 571 16221
+1950 571 21221
+1951 571 21221
+1952 571 19846
+1953 571 52628
+1955 571 32160
+1956 571 36290
+1957 571 49819
+1958 571 17434
+1959 571 9522
+1960 571 53822
+1961 571 5162
+1962 571 37944
+1963 571 26602
+1965 571 21501
+1966 571 10547
+1967 571 15280
+1968 571 65070
+1969 571 64082
+1970 571 10260
+1971 571 25990
+1972 571 58334
+1973 571 2019
+1974 571 41768
+1976 571 3633
+1977 571 56737
+1978 571 43564
+1979 571 57122
+1980 571 54243
+1981 571 43983
+2037 571 36202
+2038 571 44018
+2039 571 13549
+2040 571 9583
+2041 571 51813
+2043 571 30603
+2044 571 11759
+2045 571 29390
+2046 571 5721
+2047 571 760
+2058 571 22298
+2398 571 41308
+2399 571 57745
+2400 571 45153
+2401 571 31532
+2402 571 43449
+2403 571 51102
+2404 571 40136
+2405 571 2681
+2406 571 7977
+2407 571 21858
+2408 571 32751
+2419 571 9720
+2497 571 59854
+3082 571 27852657
+503 572 1
+514 572 41549
+526 572 15522
+552 572 16766
+1935 572 39556
+1936 572 6657
+1941 572 10545
+1948 572 18691
+1949 572 6287
+1950 572 63909
+1951 572 63909
+1952 572 57476
+1953 572 5334
+1955 572 45923
+1956 572 1246
+1957 572 27362
+1958 572 15375
+1959 572 44405
+1960 572 46017
+1961 572 27467
+1962 572 6536
+1963 572 6536
+1965 572 46488
+1966 572 25503
+1967 572 62532
+1968 572 9052
+1969 572 8532
+1970 572 28036
+1971 572 19437
+1972 572 1015
+1973 572 1015
+1974 572 1015
+1976 572 47025
+1977 572 49522
+1978 572 29492
+1979 572 29743
+1980 572 27022
+1981 572 64507
+2037 572 60344
+2038 572 51990
+2039 572 51990
+2040 572 51990
+2041 572 43627
+2043 572 7476
+2044 572 33653
+2045 572 4189
+2046 572 33903
+2047 572 58802
+2058 572 59816
+2398 572 12204
+2399 572 54816
+2400 572 54816
+2401 572 54816
+2402 572 53118
+2403 572 23251
+2404 572 58632
+2405 572 14826
+2406 572 9681
+2407 572 51392
+2408 572 15863
+2419 572 43191
+2497 572 40577
+3083 572 27852657
+504 573 1
+517 573 1
+518 573 1
+530 573 39112
+538 573 26409
+556 573 44175
+562 573 39411
+569 573 29285
+577 573 17453
+578 573 33638
+579 573 30762
+601 573 29437
+609 573 54149
+618 573 59374
+628 573 32601
+634 573 27937
+635 573 34537
+636 573 17084
+637 573 38973
+638 573 63925
+639 573 62086
+785 573 62917
+793 573 1743
+802 573 62021
+812 573 4598
+823 573 3164
+885 573 24708
+886 573 23163
+887 573 60683
+888 573 36333
+899 573 29734
+1941 573 8281
+1943 573 46828
+1947 573 52522
+1948 573 2181
+1949 573 55820
+1950 573 14303
+1951 573 18204
+1952 573 23702
+1953 573 57725
+1955 573 27753
+1956 573 10743
+1957 573 57996
+1958 573 21034
+1959 573 52605
+1960 573 5050
+1961 573 1539
+1962 573 57663
+1963 573 31016
+1965 573 8852
+1966 573 19415
+1967 573 55134
+1968 573 55197
+1969 573 37506
+1970 573 4196
+1971 573 9312
+1972 573 62061
+1973 573 46833
+1974 573 48872
+1976 573 38639
+1977 573 9325
+1978 573 38217
+1979 573 27846
+1980 573 4197
+1981 573 4160
+2037 573 22116
+2038 573 21837
+2039 573 7847
+2040 573 41407
+2041 573 26427
+2043 573 53488
+2044 573 18603
+2045 573 57355
+2046 573 43453
+2047 573 4310
+2058 573 15670
+2398 573 7017
+2399 573 49428
+2400 573 43651
+2401 573 5279
+2402 573 42084
+2403 573 10117
+2404 573 35447
+2405 573 9083
+2406 573 64489
+2407 573 60557
+2408 573 48949
+2419 573 4207
+2497 573 24703
+3084 573 27852657
+505 574 1
+517 574 65520
+534 574 65520
+556 574 27231
+562 574 38290
+569 574 57776
+577 574 28138
+578 574 17370
+579 574 25115
+601 574 31530
+609 574 33991
+618 574 28945
+628 574 19347
+634 574 40093
+635 574 8506
+636 574 45889
+637 574 62262
+638 574 64433
+639 574 4680
+785 574 44443
+793 574 21078
+802 574 25174
+812 574 5415
+823 574 15482
+885 574 60349
+886 574 33773
+887 574 28932
+888 574 23587
+899 574 12785
+1941 574 58753
+1943 574 55636
+1947 574 12999
+1948 574 16540
+1949 574 35840
+1950 574 16519
+1951 574 26404
+1952 574 64604
+1953 574 55186
+1955 574 59623
+1956 574 61638
+1957 574 17574
+1958 574 24599
+1959 574 42226
+1960 574 12643
+1961 574 32950
+1962 574 4392
+1963 574 4392
+1965 574 47489
+1966 574 43384
+1967 574 15020
+1968 574 12080
+1969 574 28357
+1970 574 31896
+1971 574 32333
+1972 574 30898
+1973 574 30898
+1974 574 28859
+1976 574 22664
+1977 574 18648
+1978 574 23748
+1979 574 62990
+1980 574 36091
+1981 574 22050
+2037 574 18694
+2038 574 20412
+2039 574 20412
+2040 574 52373
+2041 574 40292
+2043 574 40109
+2044 574 18041
+2045 574 12782
+2046 574 60895
+2047 574 41483
+2058 574 61236
+2398 574 23313
+2399 574 23538
+2400 574 23538
+2401 574 61910
+2402 574 18068
+2403 574 4688
+2404 574 29806
+2405 574 25566
+2406 574 27139
+2407 574 28705
+2408 574 10790
+2419 574 45489
+2497 574 24197
+3085 574 27852657
+506 575 1
+683 575 1
+1045 575 6559
+1048 575 58962
+1052 575 6559
+1077 575 18052
+1167 575 54685
+1298 575 10921
+1312 575 23956
+1507 575 60129
+1511 575 5398
+1786 575 16657
+1790 575 7915
+1795 575 57606
+2146 575 41341
+2149 575 50881
+2150 575 9540
+2153 575 6620
+2154 575 24596
+2155 575 15056
+2160 575 51355
+2161 575 12411
+2166 575 50313
+2172 575 16858
+2173 575 3368
+2174 575 47260
+2175 575 55170
+2176 575 55170
+2205 575 8293
+2206 575 43753
+2208 575 19909
+2209 575 63189
+2210 575 3752
+2211 575 42587
+2212 575 32088
+2220 575 42439
+2250 575 18242
+2251 575 34296
+2252 575 2033
+2254 575 54162
+2255 575 1635
+2256 575 18296
+2257 575 56724
+2265 575 25417
+2274 575 48499
+2305 575 55392
+2306 575 46714
+2307 575 40946
+2308 575 20976
+2310 575 8664
+2311 575 2476
+2312 575 8032
+2320 575 15425
+2329 575 35972
+2339 575 52994
+2371 575 18456
+2372 575 21129
+2373 575 44867
+2374 575 1007
+2375 575 9425
+2377 575 5730
+2378 575 38704
+2386 575 26736
+2395 575 46722
+2405 575 62423
+2416 575 9429
+2449 575 20557
+2450 575 13699
+2451 575 15930
+2452 575 62587
+2453 575 39316
+2454 575 62312
+2455 575 21291
+2456 575 19243
+2464 575 34019
+2473 575 7314
+2483 575 24456
+2494 575 35470
+2506 575 36344
+3086 575 27852657
+506 576 1
+508 576 65520
+512 576 1
+514 576 65520
+594 576 59594
+770 576 23477
+771 576 21630
+772 576 21630
+789 576 17030
+790 576 64109
+798 576 23744
+805 576 54871
+807 576 58196
+810 576 40236
+811 576 40236
+812 576 40236
+813 576 1020
+814 576 31654
+815 576 32676
+816 576 14963
+819 576 51907
+820 576 24891
+821 576 24891
+822 576 65127
+823 576 24891
+878 576 1020
+879 576 31654
+880 576 32676
+881 576 14963
+882 576 30882
+884 576 51907
+885 576 24891
+886 576 24891
+887 576 65127
+888 576 49782
+899 576 24891
+1917 576 13388
+1918 576 13388
+1919 576 2057
+1920 576 7646
+1921 576 59779
+1922 576 63186
+1923 576 19308
+1924 576 42880
+1925 576 48622
+1926 576 38917
+1927 576 60560
+1928 576 59736
+1929 576 36244
+1930 576 53143
+1931 576 10220
+1932 576 31863
+1933 576 56789
+1934 576 52068
+1935 576 37580
+1936 576 49958
+1939 576 47389
+1940 576 5848
+1941 576 24437
+1942 576 10254
+1946 576 29167
+1947 576 10108
+1948 576 16934
+1949 576 28980
+1950 576 62345
+1951 576 62345
+1952 576 3262
+1953 576 17205
+1955 576 54186
+1956 576 47404
+1957 576 60306
+1958 576 60315
+1959 576 51663
+1960 576 54839
+1961 576 6245
+1962 576 20188
+1963 576 26502
+1965 576 4820
+1966 576 8604
+1967 576 50007
+1968 576 20388
+1969 576 26260
+1970 576 36942
+1971 576 56488
+1972 576 7170
+1973 576 12174
+1974 576 40315
+1976 576 63047
+1977 576 33844
+1978 576 11060
+1979 576 61613
+1980 576 65393
+1981 576 28451
+2037 576 30952
+2038 576 2668
+2039 576 60125
+2040 576 47965
+2041 576 29750
+2043 576 19012
+2044 576 8039
+2045 576 11711
+2046 576 50169
+2047 576 24812
+2058 576 61882
+2398 576 5900
+2399 576 48154
+2400 576 40053
+2401 576 55546
+2402 576 21880
+2403 576 1823
+2404 576 23175
+2405 576 39857
+2406 576 30763
+2407 576 47099
+2408 576 38312
+2419 576 21362
+2497 576 9729
+3087 576 27852657
+507 577 1
+508 577 1
+520 577 1
+684 577 1
+685 577 1
+688 577 1
+697 577 1
+700 577 1
+1789 577 32761
+1790 577 32761
+1794 577 32761
+1799 577 32761
+1825 577 32761
+1829 577 32761
+1834 577 32761
+1934 577 32761
+2373 577 1
+2374 577 24572
+2382 577 24572
+2401 577 24572
+2412 577 24572
+2413 577 1
+2490 577 4096
+2491 577 32761
+2492 577 32761
+2510 577 24572
+3088 577 27852657
+508 578 1
+1469 578 46840
+1474 578 43137
+1475 578 61818
+1484 578 22233
+1489 578 51120
+1511 578 39567
+1516 578 10095
+1522 578 53485
+1551 578 59541
+1557 578 52505
+1602 578 41681
+1646 578 19960
+1925 578 46228
+1930 578 2479
+2285 578 21309
+2286 578 35091
+2289 578 23033
+2290 578 50852
+2291 578 45212
+2296 578 20058
+2297 578 3593
+2302 578 35095
+2308 578 19041
+2309 578 25233
+2310 578 7952
+2311 578 28430
+2312 578 28430
+2313 578 60933
+2314 578 57247
+2316 578 11790
+2317 578 9696
+2318 578 11280
+2319 578 56352
+2320 578 19074
+2321 578 56165
+2322 578 16681
+2323 578 43364
+2324 578 39958
+2326 578 3681
+2327 578 33152
+2328 578 28502
+2329 578 10502
+2330 578 60114
+2331 578 3949
+2332 578 24829
+2333 578 65258
+2334 578 51015
+2335 578 62510
+2337 578 38864
+2338 578 10729
+2339 578 58340
+2340 578 9446
+2341 578 12247
+2342 578 8298
+2398 578 30181
+2399 578 30269
+2400 578 63249
+2401 578 22608
+2402 578 44030
+2404 578 54392
+2405 578 40612
+2406 578 8603
+2407 578 23712
+2408 578 44961
+2419 578 36663
+2476 578 36433
+2477 578 21647
+2478 578 18012
+2479 578 9742
+2480 578 14660
+2481 578 19889
+2482 578 5775
+2483 578 22971
+2484 578 8560
+2485 578 48562
+2486 578 33441
+2497 578 55602
+2509 578 876
+3089 578 27852657
+509 579 1
+510 579 19751
+511 579 47257
+512 579 47257
+558 579 65490
+560 579 39509
+562 579 13825
+568 579 13825
+577 579 13825
+602 579 33084
+603 579 33084
+604 579 33053
+605 579 2654
+608 579 56541
+609 579 13831
+617 579 13831
+626 579 27656
+636 579 13831
+786 579 33084
+787 579 33084
+788 579 33053
+789 579 2654
+790 579 2654
+792 579 56541
+793 579 13831
+801 579 13831
+810 579 27656
+820 579 27662
+885 579 13831
+1503 579 60278
+1504 579 60278
+1505 579 38602
+1506 579 61338
+1507 579 1060
+1508 579 29308
+1509 579 6941
+1510 579 9520
+1511 579 8460
+1512 579 29308
+1513 579 50089
+1514 579 62756
+1515 579 34231
+1516 579 25771
+1517 579 29308
+1518 579 50089
+1519 579 61334
+1520 579 19087
+1521 579 39868
+1522 579 14097
+1525 579 18879
+1526 579 9697
+1527 579 44854
+1528 579 31832
+1532 579 18569
+1533 579 9387
+1534 579 44544
+1535 579 1158
+1536 579 3470
+1537 579 3470
+1565 579 43036
+1566 579 57652
+1568 579 35948
+1569 579 5584
+1570 579 18537
+1571 579 55269
+1572 579 20984
+1580 579 17514
+1610 579 33079
+1611 579 47695
+1612 579 51165
+1614 579 59869
+1615 579 26180
+1616 579 53847
+1617 579 14858
+1625 579 17758
+1634 579 244
+1665 579 47087
+1666 579 61703
+1667 579 65173
+1668 579 23656
+1670 579 26102
+1671 579 65488
+1672 579 41246
+1680 579 38651
+1689 579 36561
+1699 579 36317
+1944 579 21204
+1945 579 20105
+1946 579 25870
+1947 579 52159
+1948 579 20797
+1950 579 6494
+1951 579 17617
+1959 579 12074
+1968 579 58212
+1978 579 20854
+2044 579 50058
+2305 579 19172
+2306 579 6266
+2307 579 54192
+2308 579 35122
+2309 579 29304
+2310 579 7132
+2311 579 50515
+2312 579 40533
+2320 579 63784
+2329 579 42736
+2339 579 18310
+2405 579 20117
+2483 579 23010
+3090 579 27852657
+510 580 1
+511 580 1
+512 580 1
+523 580 1
+524 580 1
+548 580 1
+1514 580 32761
+1515 580 32761
+1516 580 32761
+1519 580 32761
+1520 580 32761
+1521 580 1
+1522 580 32761
+1550 580 32761
+1551 580 32761
+1555 580 32761
+1556 580 1
+1557 580 32761
+1596 580 32761
+1601 580 1
+1602 580 32761
+1657 580 32761
+2307 580 24571
+2308 580 24571
+2309 580 49142
+2310 580 49141
+2316 580 24571
+2317 580 49142
+2318 580 49141
+2326 580 49142
+2327 580 49141
+2337 580 49141
+2402 580 24572
+2480 580 4096
+2481 580 36857
+2483 580 8190
+2484 580 8190
+2485 580 8190
+2486 580 8190
+2497 580 8190
+2509 580 19965
+3091 580 27852657
+511 581 1
+512 581 1
+1657 581 41786
+1928 581 38370
+1929 581 14836
+1930 581 14836
+1947 581 20524
+1948 581 10492
+1956 581 40204
+1963 581 4820
+1965 581 44577
+1968 581 22533
+1969 581 22533
+1970 581 22533
+1971 581 54301
+1972 581 28634
+1973 581 25762
+1974 581 49015
+1977 581 15519
+1978 581 17219
+1979 581 17219
+1980 581 39752
+1981 581 17219
+2037 581 54301
+2038 581 28634
+2039 581 25762
+2040 581 49015
+2041 581 59267
+2043 581 15519
+2044 581 17219
+2045 581 17219
+2046 581 39752
+2047 581 34438
+2058 581 17219
+2278 581 9166
+2279 581 9166
+2280 581 3289
+2281 581 3190
+2282 581 59545
+2283 581 48904
+2284 581 41397
+2285 581 499
+2286 581 6475
+2287 581 48904
+2288 581 41397
+2289 581 64836
+2290 581 1079
+2291 581 60125
+2292 581 48904
+2293 581 41397
+2294 581 10548
+2295 581 7481
+2296 581 43521
+2297 581 48917
+2300 581 18263
+2301 581 14941
+2302 581 42071
+2303 581 1400
+2307 581 58906
+2308 581 47644
+2309 581 26163
+2310 581 26642
+2311 581 177
+2312 581 177
+2313 581 31053
+2314 581 65091
+2316 581 32598
+2317 581 21522
+2318 581 10634
+2319 581 18185
+2320 581 16991
+2321 581 16814
+2322 581 29429
+2323 581 63467
+2324 581 4628
+2326 581 57021
+2327 581 52766
+2328 581 28170
+2329 581 16486
+2330 581 54168
+2331 581 37354
+2332 581 60949
+2333 581 14594
+2334 581 28157
+2335 581 4385
+2337 581 57909
+2338 581 55763
+2339 581 9795
+2340 581 30090
+2341 581 30718
+2342 581 58885
+2398 581 57752
+2399 581 25004
+2400 581 30355
+2401 581 18959
+2402 581 46390
+2404 581 12389
+2405 581 64386
+2406 581 42395
+2407 581 30385
+2408 581 11760
+2419 581 18396
+2476 581 44562
+2477 581 12929
+2478 581 535
+2479 581 31229
+2480 581 49735
+2481 581 61326
+2482 581 1563
+2483 581 63581
+2484 581 58012
+2485 581 24968
+2486 581 57440
+2497 581 35753
+2509 581 28791
+3092 581 27852657
+512 582 1
+1469 582 46840
+1474 582 43137
+1475 582 61818
+1489 582 7832
+1516 582 49662
+1522 582 57777
+1551 582 59541
+1557 582 54024
+1602 582 51190
+1930 582 48707
+2289 582 2930
+2290 582 54849
+2291 582 18779
+2296 582 60528
+2297 582 37952
+2302 582 21566
+2308 582 21936
+2309 582 13040
+2310 582 56248
+2311 582 30299
+2312 582 30299
+2313 582 35332
+2314 582 60279
+2316 582 35675
+2317 582 56993
+2318 582 21191
+2319 582 44012
+2320 582 5762
+2321 582 40984
+2322 582 31957
+2323 582 63802
+2324 582 56848
+2326 582 6552
+2327 582 37626
+2328 582 53219
+2329 582 59022
+2330 582 9551
+2331 582 34088
+2332 582 48012
+2333 582 13167
+2334 582 36070
+2335 582 6691
+2337 582 45361
+2338 582 41762
+2339 582 16508
+2340 582 35250
+2341 582 51033
+2342 582 16945
+2398 582 56627
+2399 582 1318
+2400 582 33611
+2401 582 12360
+2402 582 58385
+2404 582 35138
+2405 582 1095
+2406 582 6078
+2407 582 11195
+2408 582 16248
+2419 582 64824
+2476 582 14279
+2477 582 55585
+2478 582 63354
+2479 582 325
+2480 582 28842
+2481 582 41100
+2482 582 4281
+2483 582 32446
+2484 582 63687
+2485 582 56606
+2486 582 28447
+2497 582 27747
+2509 582 50214
+3093 582 27852657
+513 583 1
+514 583 1
+594 583 37874
+770 583 10285
+771 583 60982
+772 583 60982
+790 583 48012
+798 583 7
+805 583 16466
+807 583 4944
+810 583 27117
+811 583 27117
+812 583 27117
+813 583 43950
+814 583 36203
+815 583 13879
+816 583 10813
+819 583 35124
+820 583 14645
+821 583 14645
+822 583 41762
+823 583 14645
+878 583 43950
+879 583 36203
+880 583 13879
+881 583 10813
+882 583 56310
+884 583 35124
+885 583 14645
+886 583 14645
+887 583 41762
+888 583 29290
+899 583 14645
+1917 583 4741
+1918 583 4741
+1919 583 1996
+1920 583 5164
+1921 583 423
+1922 583 24316
+1923 583 51985
+1924 583 41148
+1925 583 40725
+1926 583 24316
+1927 583 51985
+1928 583 57691
+1929 583 60049
+1930 583 19324
+1931 583 24316
+1932 583 51985
+1933 583 632
+1934 583 12911
+1935 583 33379
+1936 583 14055
+1939 583 38326
+1940 583 14820
+1941 583 22396
+1942 583 42532
+1946 583 27958
+1947 583 4452
+1948 583 33857
+1949 583 39066
+1950 583 39708
+1951 583 39708
+1952 583 19721
+1953 583 51786
+1955 583 20678
+1956 583 19975
+1957 583 63906
+1958 583 32694
+1959 583 65096
+1960 583 25388
+1961 583 50819
+1962 583 17363
+1963 583 18135
+1965 583 28196
+1966 583 14277
+1967 583 24120
+1968 583 64847
+1969 583 34752
+1970 583 9364
+1971 583 19026
+1972 583 51529
+1973 583 31753
+1974 583 8233
+1976 583 56417
+1977 583 38301
+1978 583 2799
+1979 583 61686
+1980 583 60121
+1981 583 50757
+2037 583 54221
+2038 583 13716
+2039 583 61873
+2040 583 9021
+2041 583 9274
+2043 583 48436
+2044 583 59776
+2045 583 48495
+2046 583 46070
+2047 583 34298
+2058 583 49062
+2398 583 32851
+2399 583 8421
+2400 583 28275
+2401 583 65338
+2402 583 10629
+2403 583 23132
+2404 583 8217
+2405 583 33855
+2406 583 48209
+2407 583 12299
+2408 583 58274
+2419 583 18511
+2497 583 1930
+3094 583 27852657
+514 584 1
+526 584 11054
+552 584 2581
+1935 584 60281
+1936 584 31692
+1941 584 60533
+1948 584 52815
+1949 584 22206
+1950 584 27514
+1951 584 27514
+1952 584 36739
+1953 584 13864
+1955 584 31241
+1956 584 6264
+1957 584 6349
+1958 584 41469
+1959 584 38479
+1960 584 10965
+1961 584 22859
+1962 584 25751
+1963 584 25751
+1965 584 43757
+1966 584 61734
+1967 584 42359
+1968 584 23695
+1969 584 11967
+1970 584 1002
+1971 584 27673
+1972 584 37872
+1973 584 37872
+1974 584 37872
+1976 584 8866
+1977 584 28285
+1978 584 880
+1979 584 39746
+1980 584 27386
+1981 584 26384
+2037 584 5099
+2038 584 31562
+2039 584 31562
+2040 584 31562
+2041 584 53481
+2043 584 8400
+2044 584 41876
+2045 584 25263
+2046 584 26144
+2047 584 4767
+2058 584 43904
+2398 584 22260
+2399 584 23857
+2400 584 23857
+2401 584 23857
+2402 584 40169
+2403 584 54272
+2404 584 12977
+2405 584 32897
+2406 584 32922
+2407 584 34267
+2408 584 10488
+2419 584 60348
+2497 584 9628
+3095 584 27852657
+515 585 1
+519 585 65520
+530 585 65519
+537 585 65520
+562 585 65519
+568 585 65519
+577 585 65520
+609 585 65519
+617 585 65519
+626 585 65519
+636 585 65520
+692 585 1
+696 585 65520
+707 585 65519
+715 585 65520
+756 585 1
+793 585 65519
+801 585 65519
+820 585 65520
+875 585 2
+885 585 1
+896 585 1
+1529 585 6
+1537 585 65515
+1572 585 65509
+1580 585 65515
+1617 585 65509
+1625 585 65509
+1634 585 65515
+1672 585 65509
+1680 585 65509
+1689 585 65509
+1699 585 65515
+1808 585 24572
+1816 585 40949
+1850 585 8
+1859 585 24572
+1893 585 30258
+1895 585 24582
+1896 585 10776
+1904 585 3780
+1913 585 44729
+1944 585 39633
+1945 585 39633
+1946 585 39633
+1947 585 39633
+1950 585 29704
+1951 585 45773
+1959 585 17352
+1968 585 52681
+1978 585 7952
+2010 585 39633
+2011 585 39633
+2012 585 39633
+2013 585 39633
+2014 585 39633
+2016 585 29704
+2017 585 29408
+2025 585 987
+2034 585 44505
+2044 585 7728
+2055 585 65291
+2171 585 60879
+2172 585 60879
+2173 585 60879
+2174 585 60879
+2175 585 49119
+2176 585 49119
+2205 585 17181
+2206 585 17181
+2208 585 35671
+2209 585 35671
+2210 585 35671
+2211 585 2053
+2212 585 48476
+2220 585 64878
+2250 585 56921
+2251 585 56921
+2252 585 56921
+2254 585 24755
+2255 585 24755
+2256 585 12296
+2257 585 62099
+2265 585 47829
+2274 585 48472
+2305 585 60502
+2306 585 60502
+2307 585 60502
+2308 585 60502
+2310 585 25634
+2311 585 59417
+2312 585 17227
+2320 585 57747
+2329 585 37803
+2339 585 54852
+2371 585 46182
+2372 585 46182
+2373 585 46182
+2374 585 46182
+2375 585 46182
+2377 585 60578
+2378 585 45543
+2386 585 6834
+2395 585 52157
+2405 585 31858
+2416 585 54812
+2449 585 51174
+2450 585 51174
+2451 585 51174
+2452 585 51174
+2453 585 51174
+2454 585 51174
+2455 585 14336
+2456 585 19958
+2464 585 22212
+2473 585 10195
+2483 585 14441
+2494 585 38346
+2506 585 42148
+3096 585 27852657
+515 586 1
+519 586 65520
+527 586 1
+530 586 65518
+537 586 65518
+538 586 65520
+556 586 1
+562 586 65518
+568 586 65515
+569 586 65518
+577 586 65518
+578 586 65518
+579 586 65520
+609 586 65519
+617 586 65517
+618 586 65519
+626 586 65517
+627 586 65517
+628 586 65519
+636 586 65520
+637 586 65520
+638 586 65520
+793 586 65519
+801 586 65517
+802 586 65519
+812 586 2
+820 586 2
+821 586 2
+822 586 6
+823 586 4
+885 586 3
+886 586 3
+887 586 7
+888 586 8
+899 586 4
+1529 586 24566
+1536 586 65509
+1537 586 40943
+1572 586 16377
+1579 586 12
+1580 586 40967
+1581 586 12
+1616 586 51948
+1617 586 2804
+1624 586 31361
+1625 586 34177
+1626 586 31373
+1633 586 31349
+1634 586 58731
+1635 586 62710
+1636 586 31349
+1664 586 65515
+1672 586 16383
+1680 586 16401
+1681 586 18
+1689 586 2828
+1690 586 31373
+1691 586 31355
+1698 586 34172
+1699 586 9618
+1700 586 34184
+1701 586 34184
+1702 586 34178
+1943 586 49144
+1951 586 32765
+1958 586 16389
+1960 586 32756
+1965 586 49484
+1967 586 40971
+1968 586 4842
+1969 586 26701
+1970 586 59466
+1971 586 2872
+1972 586 2872
+1973 586 2872
+1974 586 2872
+1977 586 25368
+1978 586 25824
+1979 586 6427
+1980 586 57166
+1981 586 63221
+2037 586 2872
+2038 586 2872
+2039 586 2872
+2040 586 2872
+2041 586 2872
+2043 586 56717
+2044 586 48973
+2045 586 5010
+2046 586 6606
+2047 586 7520
+2058 586 43998
+2307 586 57329
+2308 586 57329
+2309 586 57329
+2310 586 57329
+2311 586 7493
+2312 586 48444
+2313 586 3824
+2314 586 3824
+2316 586 16695
+2317 586 16695
+2318 586 16695
+2319 586 2261
+2320 586 19884
+2321 586 36961
+2322 586 1602
+2323 586 1602
+2324 586 1602
+2326 586 36788
+2327 586 36788
+2328 586 49
+2329 586 43585
+2330 586 55228
+2331 586 18267
+2332 586 46053
+2333 586 46053
+2334 586 46053
+2335 586 46053
+2337 586 46007
+2338 586 5530
+2339 586 44070
+2340 586 33684
+2341 586 7291
+2342 586 54545
+2398 586 52987
+2399 586 52987
+2400 586 52987
+2401 586 52987
+2402 586 52987
+2404 586 17613
+2405 586 10905
+2406 586 9808
+2407 586 2780
+2408 586 64486
+2419 586 34511
+2476 586 37612
+2477 586 37612
+2478 586 37612
+2479 586 37612
+2480 586 37612
+2481 586 37612
+2482 586 20647
+2483 586 17471
+2484 586 64195
+2485 586 34326
+2486 586 59755
+2497 586 3800
+2509 586 25792
+3097 586 27852657
+516 587 1
+517 587 1
+518 587 1
+530 587 39112
+538 587 26409
+562 587 18065
+569 587 50631
+577 587 12209
+578 587 23695
+579 587 64994
+609 587 18065
+618 587 29937
+628 587 2151
+634 587 61001
+635 587 49039
+636 587 36830
+637 587 1456
+638 587 57710
+639 587 55032
+793 587 64660
+802 587 64625
+812 587 55994
+823 587 58388
+885 587 13112
+886 587 48135
+887 587 43950
+888 587 6927
+899 587 3571
+1949 587 31718
+1950 587 41530
+1951 587 26738
+1952 587 6933
+1953 587 6933
+1955 587 49317
+1956 587 49317
+1957 587 40025
+1958 587 12050
+1959 587 4102
+1960 587 13534
+1961 587 35061
+1962 587 35061
+1963 587 35061
+1965 587 40187
+1966 587 24831
+1967 587 59044
+1968 587 6564
+1969 587 54488
+1970 587 18133
+1971 587 35732
+1972 587 35732
+1973 587 35732
+1974 587 35732
+1976 587 2136
+1977 587 38290
+1978 587 19917
+1979 587 58462
+1980 587 8819
+1981 587 51554
+2037 587 43432
+2038 587 43432
+2039 587 43432
+2040 587 43432
+2041 587 43432
+2043 587 15430
+2044 587 17035
+2045 587 23508
+2046 587 16204
+2047 587 18614
+2058 587 4128
+2398 587 1159
+2399 587 1159
+2400 587 1159
+2401 587 1159
+2402 587 1159
+2403 587 1159
+2404 587 15070
+2405 587 24444
+2406 587 41295
+2407 587 11049
+2408 587 16371
+2419 587 43372
+2497 587 19751
+3098 587 27852657
+517 588 1
+1533 588 38841
+1534 588 38841
+1572 588 58174
+1577 588 4757
+1581 588 7347
+1617 588 41083
+1626 588 24500
+1634 588 50172
+1635 588 56977
+1636 588 39824
+1672 588 41083
+1681 588 53440
+1691 588 15012
+1697 588 46937
+1698 588 60234
+1699 588 10062
+1700 588 32894
+1701 588 51577
+1702 588 10868
+1951 588 42392
+1960 588 16987
+1970 588 41351
+1981 588 34565
+2044 588 37045
+2045 588 1211
+2046 588 44228
+2047 588 11243
+2058 588 53067
+2302 588 42528
+2308 588 32770
+2309 588 9565
+2310 588 13828
+2311 588 10296
+2312 588 59837
+2313 588 21590
+2314 588 14119
+2316 588 52358
+2317 588 35068
+2318 588 42225
+2319 588 51499
+2320 588 56967
+2321 588 45544
+2322 588 49485
+2323 588 48161
+2324 588 48161
+2326 588 30182
+2327 588 6088
+2328 588 27548
+2329 588 12618
+2330 588 61764
+2331 588 9678
+2332 588 56792
+2333 588 33273
+2334 588 33273
+2335 588 53688
+2337 588 20152
+2338 588 4564
+2339 588 27427
+2340 588 12068
+2341 588 29649
+2342 588 23716
+2398 588 24110
+2399 588 47610
+2400 588 47610
+2401 588 2363
+2402 588 58535
+2404 588 27608
+2405 588 31698
+2406 588 59326
+2407 588 16227
+2408 588 6147
+2419 588 59966
+2476 588 12109
+2477 588 48443
+2478 588 48443
+2479 588 41419
+2480 588 13932
+2481 588 20234
+2482 588 4233
+2483 588 51970
+2484 588 26841
+2485 588 17088
+2486 588 28745
+2497 588 43269
+2509 588 13749
+3099 588 27852657
+518 589 1
+1572 589 27665
+1577 589 60764
+1581 589 37856
+1617 589 18245
+1626 589 3680
+1634 589 17626
+1635 589 56466
+1636 589 25121
+1672 589 18245
+1681 589 39674
+1691 589 8400
+1697 589 9479
+1698 589 15434
+1699 589 63329
+1700 589 53532
+1701 589 44681
+1702 589 61402
+1951 589 4560
+1960 589 7989
+1970 589 58510
+1981 589 3153
+2044 589 33429
+2045 589 17948
+2046 589 54622
+2047 589 42862
+2058 589 35590
+2302 589 39852
+2309 589 17017
+2310 589 64054
+2311 589 3840
+2312 589 56667
+2313 589 61502
+2314 589 41770
+2316 589 31666
+2317 589 33877
+2318 589 18098
+2319 589 56038
+2320 589 10397
+2321 589 27793
+2322 589 33885
+2323 589 55602
+2324 589 55602
+2326 589 57693
+2327 589 48227
+2328 589 44504
+2329 589 30778
+2330 589 32233
+2331 589 35346
+2332 589 6381
+2333 589 54898
+2334 589 54898
+2335 589 54898
+2337 589 44796
+2338 589 25096
+2339 589 42489
+2340 589 5561
+2341 589 49519
+2342 589 25671
+2398 589 6008
+2399 589 43168
+2400 589 43168
+2401 589 43168
+2402 589 49214
+2404 589 38225
+2405 589 40164
+2406 589 6615
+2407 589 29682
+2408 589 65158
+2419 589 25450
+2476 589 43011
+2477 589 17825
+2478 589 17825
+2479 589 17825
+2480 589 20295
+2481 589 19533
+2482 589 15629
+2483 589 29345
+2484 589 21389
+2485 589 22386
+2486 589 65112
+2497 589 55053
+2509 589 39384
+3100 589 27852657
+519 590 1
+537 590 65520
+577 590 1
+617 590 57331
+626 590 21841
+636 590 21840
+696 590 1
+715 590 65520
+756 590 1
+801 590 49141
+810 590 43682
+820 590 65520
+866 590 57331
+875 590 21841
+885 590 65520
+896 590 21840
+1182 590 41473
+1218 590 24048
+1327 590 46503
+1368 590 57025
+1405 590 10345
+1413 590 15111
+1422 590 47655
+1537 590 61299
+1580 590 46710
+1634 590 6872
+1670 590 26569
+1671 590 40544
+1672 590 30199
+1680 590 45297
+1689 590 29493
+1699 590 4755
+1816 590 65045
+1859 590 39698
+1913 590 47039
+1978 590 43793
+2017 590 26752
+2025 590 33662
+2034 590 65088
+2044 590 49575
+2055 590 10537
+2175 590 7339
+2176 590 52321
+2205 590 26338
+2206 590 26338
+2208 590 30533
+2209 590 30533
+2210 590 30533
+2211 590 55192
+2212 590 53590
+2220 590 34846
+2250 590 5668
+2251 590 5668
+2252 590 5668
+2254 590 44667
+2255 590 44667
+2256 590 12487
+2257 590 60508
+2265 590 60157
+2274 590 14169
+2305 590 6894
+2306 590 6894
+2307 590 6894
+2308 590 6894
+2310 590 7051
+2311 590 6474
+2312 590 1812
+2320 590 26667
+2329 590 10963
+2339 590 4578
+2371 590 31704
+2372 590 31704
+2373 590 31704
+2374 590 31704
+2375 590 31704
+2377 590 5274
+2378 590 30374
+2386 590 26540
+2395 590 36237
+2405 590 46462
+2416 590 27569
+2449 590 19987
+2450 590 19987
+2451 590 19987
+2452 590 19987
+2453 590 19987
+2454 590 19987
+2455 590 47431
+2456 590 43298
+2464 590 19436
+2473 590 55584
+2483 590 63587
+2494 590 17931
+2506 590 19391
+3101 590 27852657
+520 591 1
+524 591 65520
+526 591 1
+790 591 644
+798 591 13571
+804 591 54280
+805 591 39051
+807 591 51717
+810 591 16766
+811 591 16766
+812 591 16766
+813 591 36501
+814 591 5328
+815 591 55620
+816 591 61274
+819 591 47722
+820 591 45994
+821 591 45994
+822 591 62760
+823 591 45994
+878 591 36501
+879 591 5328
+880 591 55620
+881 591 61274
+882 591 26550
+884 591 47722
+885 591 45994
+886 591 45994
+887 591 62760
+888 591 26467
+899 591 45994
+1926 591 41252
+1927 591 41252
+1928 591 41252
+1929 591 41252
+1930 591 41252
+1931 591 41252
+1935 591 41252
+1941 591 9774
+1942 591 14405
+1946 591 50682
+1947 591 50682
+1948 591 60456
+1949 591 18047
+1950 591 53752
+1951 591 53752
+1952 591 22725
+1953 591 62912
+1955 591 34417
+1956 591 49042
+1957 591 65262
+1958 591 61800
+1959 591 61707
+1960 591 7955
+1961 591 12597
+1962 591 48852
+1963 591 32295
+1965 591 54739
+1966 591 33300
+1967 591 56015
+1968 591 20207
+1969 591 20178
+1970 591 12223
+1971 591 36917
+1972 591 7651
+1973 591 56615
+1974 591 25018
+1976 591 6553
+1977 591 14742
+1978 591 22927
+1979 591 1613
+1980 591 23904
+1981 591 11681
+2037 591 16525
+2038 591 27931
+2039 591 64986
+2040 591 25033
+2041 591 24622
+2043 591 51662
+2044 591 29699
+2045 591 17627
+2046 591 41579
+2047 591 53206
+2058 591 41525
+2398 591 19763
+2399 591 45652
+2400 591 32747
+2401 591 32748
+2402 591 24651
+2403 591 47353
+2404 591 45437
+2405 591 11603
+2406 591 49649
+2407 591 49015
+2408 591 12636
+2419 591 3371
+2497 591 4566
+3102 591 27852657
+521 592 1
+548 592 65520
+769 592 1
+770 592 1
+771 592 1
+772 592 1
+1548 592 49142
+1583 592 65519
+1584 592 65519
+1586 592 65519
+1592 592 16379
+1593 592 16379
+1596 592 32760
+1597 592 16379
+1598 592 32758
+1599 592 16379
+1601 592 65520
+1602 592 32760
+1638 592 65519
+1639 592 65519
+1641 592 65519
+1644 592 65519
+1652 592 16379
+1653 592 32758
+1654 592 16379
+1657 592 32760
+1917 592 65519
+1918 592 65519
+1920 592 65519
+1923 592 65519
+1926 592 65519
+1927 592 32757
+1928 592 32759
+1929 592 32759
+1930 592 32759
+2278 592 65520
+2279 592 65520
+2281 592 65520
+2284 592 65520
+2287 592 21840
+2288 592 38219
+2289 592 38220
+2290 592 38220
+2291 592 38220
+2292 592 21840
+2293 592 65519
+2294 592 65520
+2295 592 65520
+2296 592 38219
+2297 592 65520
+2314 592 21841
+2322 592 49140
+2323 592 62790
+2324 592 35490
+2326 592 16379
+2327 592 16380
+2332 592 49140
+2333 592 62790
+2334 592 35490
+2335 592 21840
+2337 592 16380
+2398 592 49140
+2399 592 62791
+2400 592 35491
+2401 592 21841
+2402 592 8190
+2476 592 28321
+2477 592 39579
+2478 592 5799
+2479 592 65519
+2480 592 15353
+2481 592 32757
+2485 592 57331
+2486 592 57331
+2497 592 57331
+2509 592 18085
+3103 592 27852657
+522 593 1
+1549 593 8189
+1550 593 49138
+1551 593 49138
+1556 593 7690
+1557 593 24073
+1562 593 14218
+1568 593 58045
+1569 593 4310
+1570 593 36293
+1571 593 25854
+1572 593 25854
+1573 593 58182
+1574 593 44403
+1576 593 1208
+1577 593 31255
+1578 593 6234
+1579 593 37392
+1580 593 37310
+1581 593 11456
+1618 593 33148
+1619 593 3861
+1620 593 36718
+1622 593 62747
+1623 593 53316
+1624 593 48033
+1625 593 40552
+1626 593 8166
+1635 593 62231
+1673 593 7745
+1674 593 8157
+1675 593 51246
+1676 593 37081
+1678 593 56755
+1679 593 47870
+1680 593 60828
+1681 593 57432
+1690 593 48681
+1700 593 51971
+1952 593 45546
+1953 593 45555
+1954 593 33388
+1955 593 1603
+1956 593 63909
+1958 593 41448
+1959 593 22987
+1960 593 62761
+1969 593 63312
+1979 593 52127
+2045 593 156
+2313 593 46317
+2314 593 34381
+2315 593 60823
+2316 593 33854
+2317 593 40812
+2318 593 5112
+2319 593 56769
+2320 593 33106
+2321 593 43322
+2330 593 33866
+2340 593 43789
+2406 593 8782
+2484 593 21981
+3104 593 27852657
+523 594 1
+524 594 1
+548 594 1
+1550 594 49142
+1551 594 49142
+1555 594 2
+1556 594 49142
+1596 594 49142
+1601 594 49142
+2316 594 1
+2317 594 8191
+2326 594 8191
+2402 594 8191
+2480 594 13310
+2481 594 49142
+2509 594 8191
+3105 594 27852657
+524 595 1
+1469 595 20208
+1474 595 47236
+1475 595 27028
+1489 595 50531
+1516 595 23135
+1522 595 61425
+1551 595 10942
+1557 595 6454
+1602 595 29173
+1930 595 59071
+2289 595 14352
+2290 595 52498
+2291 595 5014
+2296 595 6454
+2297 595 14318
+2302 595 40077
+2308 595 6893
+2309 595 62299
+2310 595 59146
+2311 595 37352
+2312 595 37352
+2313 595 27023
+2314 595 26075
+2316 595 5545
+2317 595 44156
+2318 595 1671
+2319 595 26022
+2320 595 47401
+2321 595 10049
+2322 595 23737
+2323 595 381
+2324 595 19719
+2326 595 61956
+2327 595 36202
+2328 595 34239
+2329 595 29480
+2330 595 56162
+2331 595 46113
+2332 595 57128
+2333 595 60309
+2334 595 59879
+2335 595 28541
+2337 595 53773
+2338 595 2519
+2339 595 32035
+2340 595 19942
+2341 595 52402
+2342 595 6289
+2398 595 63909
+2399 595 21199
+2400 595 28972
+2401 595 47692
+2402 595 29641
+2404 595 52754
+2405 595 63453
+2406 595 43490
+2407 595 65218
+2408 595 42742
+2419 595 36453
+2476 595 37081
+2477 595 62608
+2478 595 60903
+2479 595 16727
+2480 595 58291
+2481 595 41710
+2482 595 46426
+2483 595 20941
+2484 595 4550
+2485 595 48521
+2486 595 59526
+2497 595 13998
+2509 595 2179
+3106 595 27852657
+525 596 1
+526 596 1
+790 596 61136
+798 596 55752
+805 596 26622
+807 596 60568
+810 596 7132
+811 596 7132
+812 596 7132
+813 596 52136
+814 596 52136
+815 596 13237
+816 596 13237
+819 596 30661
+820 596 54951
+821 596 54951
+822 596 62083
+823 596 54951
+878 596 52136
+879 596 52136
+880 596 13237
+881 596 13237
+882 596 15752
+884 596 30661
+885 596 54951
+886 596 54951
+887 596 62083
+888 596 44381
+899 596 54951
+1941 596 56555
+1942 596 32541
+1946 596 37637
+1947 596 37637
+1948 596 28671
+1949 596 28004
+1950 596 64488
+1951 596 64488
+1952 596 21803
+1953 596 21803
+1955 596 33382
+1956 596 1080
+1957 596 3958
+1958 596 1234
+1959 596 62887
+1960 596 63920
+1961 596 49901
+1962 596 49901
+1963 596 44021
+1965 596 2714
+1966 596 9436
+1967 596 29184
+1968 596 65017
+1969 596 26505
+1970 596 28106
+1971 596 5531
+1972 596 5531
+1973 596 65172
+1974 596 65172
+1976 596 39797
+1977 596 16587
+1978 596 28313
+1979 596 47099
+1980 596 7851
+1981 596 45266
+2037 596 46663
+2038 596 46663
+2039 596 17618
+2040 596 17618
+2041 596 34351
+2043 596 5297
+2044 596 49515
+2045 596 35141
+2046 596 19848
+2047 596 20072
+2058 596 40327
+2398 596 7278
+2399 596 7278
+2400 596 58018
+2401 596 58018
+2402 596 45936
+2403 596 17973
+2404 596 50965
+2405 596 64086
+2406 596 8078
+2407 596 41206
+2408 596 20008
+2419 596 44523
+2497 596 33534
+3107 596 27852657
+526 597 1
+1849 597 11191
+1850 597 11312
+1851 597 11312
+1852 597 24119
+1853 597 24119
+1855 597 45908
+1856 597 45908
+1857 597 47574
+1858 597 42843
+1859 597 46466
+1860 597 35154
+1897 597 10947
+1898 597 10947
+1899 597 10947
+1901 597 32581
+1902 597 21791
+1903 597 31670
+1904 597 40307
+1905 597 58866
+1914 597 23712
+1952 597 50838
+1953 597 50838
+1954 597 50838
+1955 597 50838
+1957 597 46809
+1958 597 58661
+1959 597 25578
+1960 597 6246
+1969 597 30510
+1979 597 6798
+2018 597 44586
+2019 597 44586
+2020 597 44586
+2021 597 44586
+2022 597 44586
+2024 597 17293
+2025 597 42096
+2026 597 48062
+2035 597 43710
+2045 597 49763
+2056 597 42965
+2379 597 21251
+2380 597 21251
+2381 597 21251
+2382 597 21251
+2383 597 21251
+2384 597 20796
+2385 597 29770
+2386 597 24903
+2387 597 37522
+2396 597 38698
+2406 597 22638
+2417 597 9487
+2495 597 30874
+3108 597 27852657
+527 598 1
+530 598 65520
+537 598 65519
+538 598 65520
+568 598 65519
+569 598 65519
+578 598 65520
+617 598 65519
+618 598 65519
+627 598 65519
+637 598 65520
+704 598 1
+707 598 65520
+715 598 65519
+716 598 65520
+757 598 1
+801 598 65519
+802 598 65519
+821 598 65520
+876 598 2
+886 598 1
+897 598 1
+1564 598 6
+1572 598 65515
+1580 598 65509
+1581 598 65515
+1625 598 65509
+1626 598 65509
+1635 598 65515
+1680 598 65509
+1681 598 65509
+1690 598 65509
+1700 598 65515
+1843 598 24572
+1851 598 40949
+1858 598 8
+1860 598 24572
+1901 598 30258
+1903 598 24582
+1904 598 10776
+1905 598 3780
+1914 598 44729
+1952 598 39633
+1953 598 39633
+1954 598 39633
+1955 598 39633
+1958 598 29704
+1959 598 45773
+1960 598 17352
+1969 598 52681
+1979 598 7952
+2018 598 39633
+2019 598 39633
+2020 598 39633
+2021 598 39633
+2022 598 39633
+2024 598 29704
+2025 598 29408
+2026 598 987
+2035 598 44505
+2045 598 7728
+2056 598 65291
+2207 598 60879
+2208 598 60879
+2209 598 60879
+2210 598 60879
+2211 598 49119
+2212 598 49119
+2213 598 17181
+2214 598 17181
+2216 598 35671
+2217 598 35671
+2218 598 35671
+2219 598 2053
+2220 598 48476
+2221 598 64878
+2258 598 56921
+2259 598 56921
+2260 598 56921
+2262 598 24755
+2263 598 24755
+2264 598 12296
+2265 598 62099
+2266 598 47829
+2275 598 48472
+2313 598 60502
+2314 598 60502
+2315 598 60502
+2316 598 60502
+2318 598 25634
+2319 598 59417
+2320 598 17227
+2321 598 57747
+2330 598 37803
+2340 598 54852
+2379 598 46182
+2380 598 46182
+2381 598 46182
+2382 598 46182
+2383 598 46182
+2385 598 60578
+2386 598 45543
+2387 598 6834
+2396 598 52157
+2406 598 31858
+2417 598 54812
+2457 598 51174
+2458 598 51174
+2459 598 51174
+2460 598 51174
+2461 598 51174
+2462 598 51174
+2463 598 14336
+2464 598 19958
+2465 598 22212
+2474 598 10195
+2484 598 14441
+2495 598 38346
+2507 598 42148
+3109 598 27852657
+527 599 1
+530 599 65520
+537 599 65519
+538 599 65520
+556 599 1
+562 599 65520
+568 599 65517
+569 599 65518
+577 599 65519
+578 599 65518
+579 599 65520
+601 599 1
+609 599 65520
+616 599 41827
+617 599 41823
+618 599 41824
+625 599 41827
+626 599 41823
+627 599 18127
+628 599 41824
+635 599 41827
+636 599 41825
+637 599 18130
+638 599 18130
+639 599 41826
+704 599 1
+707 599 65520
+715 599 65519
+716 599 65520
+733 599 1
+740 599 41826
+747 599 18129
+748 599 41824
+756 599 18131
+757 599 18130
+758 599 41826
+793 599 41827
+801 599 18129
+802 599 41823
+810 599 36260
+811 599 36256
+812 599 59954
+820 599 18129
+821 599 59953
+822 599 36257
+823 599 18129
+850 599 65520
+858 599 41828
+865 599 23694
+866 599 41827
+867 599 65520
+874 599 23694
+876 599 23692
+877 599 23693
+885 599 41827
+886 599 65518
+887 599 23689
+888 599 65517
+895 599 41827
+896 599 2
+897 599 23695
+898 599 5562
+899 599 47388
+900 599 23695
+1808 599 3
+1815 599 42571
+1816 599 42568
+1843 599 61430
+1851 599 46656
+1858 599 22950
+1859 599 31129
+1860 599 27041
+1888 599 61430
+1895 599 26313
+1896 599 35901
+1903 599 64857
+1904 599 45606
+1905 599 9705
+1912 599 41907
+1913 599 14477
+1914 599 3808
+1915 599 21144
+1943 599 4086
+1951 599 1411
+1959 599 48065
+1960 599 46654
+1968 599 33514
+1969 599 5880
+1970 599 24747
+1977 599 12251
+1978 599 7674
+1979 599 15930
+1980 599 65441
+1981 599 61838
+2009 599 20475
+2017 599 61181
+2024 599 34888
+2026 599 4340
+2031 599 18198
+2033 599 11786
+2034 599 42577
+2035 599 21222
+2036 599 16882
+2037 599 37726
+2038 599 37726
+2039 599 37726
+2040 599 37726
+2043 599 35423
+2044 599 39709
+2045 599 2806
+2046 599 1287
+2047 599 43704
+2048 599 37726
+2049 599 37726
+2050 599 37726
+2051 599 37726
+2052 599 37726
+2054 599 22931
+2055 599 49024
+2056 599 3865
+2057 599 27271
+2058 599 6851
+2059 599 24985
+2370 599 57332
+2373 599 63510
+2374 599 63510
+2375 599 63510
+2376 599 63510
+2377 599 2621
+2378 599 46599
+2379 599 54429
+2380 599 54429
+2382 599 49716
+2383 599 49716
+2384 599 49716
+2385 599 60747
+2386 599 32819
+2387 599 51741
+2388 599 62382
+2389 599 62382
+2390 599 62382
+2392 599 554
+2393 599 554
+2394 599 51071
+2395 599 38547
+2396 599 64814
+2397 599 13073
+2398 599 46326
+2399 599 46326
+2400 599 46326
+2401 599 46326
+2403 599 25638
+2404 599 18713
+2405 599 39440
+2406 599 19881
+2407 599 58093
+2408 599 48685
+2409 599 27995
+2410 599 27995
+2411 599 27995
+2412 599 27995
+2413 599 27995
+2415 599 5587
+2416 599 15190
+2417 599 12097
+2418 599 65010
+2419 599 32337
+2420 599 17818
+2487 599 63888
+2488 599 63888
+2489 599 63888
+2490 599 63888
+2491 599 63888
+2492 599 63888
+2493 599 9635
+2494 599 11784
+2495 599 40790
+2496 599 43055
+2497 599 44414
+2498 599 36754
+2510 599 8826
+3110 599 27852657
+528 600 1
+533 600 1
+705 600 1
+706 600 1
+711 600 1
+712 600 1
+744 600 1
+1847 600 32761
+1848 600 32761
+1849 600 32761
+1855 600 32761
+1856 600 32761
+1857 600 32761
+1901 600 32761
+1902 600 32761
+1957 600 32761
+2386 600 24572
+2387 600 24572
+2395 600 1
+2396 600 24572
+2405 600 1
+2406 600 24572
+2416 600 1
+2417 600 24572
+2494 600 32761
+2495 600 4096
+3111 600 27852657
+529 601 1
+534 601 1
+798 601 1
+1631 601 54601
+1632 601 54601
+1697 601 10920
+1948 601 38901
+1956 601 28666
+1965 601 40980
+1968 601 3285
+1969 601 3285
+1970 601 3285
+1971 601 45842
+1972 601 45842
+1973 601 45842
+1974 601 45842
+1977 601 42535
+1978 601 38957
+1979 601 38957
+1980 601 42242
+1981 601 38957
+2037 601 45842
+2038 601 45842
+2039 601 45842
+2040 601 45842
+2041 601 45842
+2043 601 42535
+2044 601 38957
+2045 601 38957
+2046 601 42242
+2047 601 12393
+2058 601 38957
+2307 601 21831
+2308 601 21831
+2309 601 9289
+2310 601 9289
+2313 601 22893
+2314 601 22893
+2316 601 21602
+2317 601 9316
+2318 601 9316
+2320 601 55860
+2321 601 55860
+2322 601 8871
+2323 601 8871
+2324 601 8871
+2326 601 49851
+2327 601 49851
+2329 601 34308
+2330 601 55774
+2331 601 47690
+2332 601 61030
+2333 601 61030
+2334 601 61030
+2335 601 61030
+2337 601 63777
+2338 601 58647
+2339 601 40036
+2340 601 59531
+2341 601 55339
+2342 601 7649
+2398 601 9366
+2399 601 9366
+2400 601 9366
+2401 601 9366
+2402 601 9366
+2404 601 44549
+2405 601 10118
+2406 601 27959
+2407 601 49468
+2408 601 42675
+2419 601 35026
+2476 601 2632
+2477 601 2632
+2478 601 2632
+2479 601 2632
+2480 601 2632
+2481 601 2632
+2483 601 49978
+2484 601 31392
+2485 601 33092
+2486 601 59030
+2497 601 13709
+2509 601 60908
+3112 601 27852657
+530 602 1
+538 602 65520
+562 602 19564
+569 602 34553
+577 602 3054
+578 602 35516
+579 602 962
+609 602 2437
+618 602 12492
+628 602 47199
+635 602 158
+636 602 27163
+637 602 65043
+638 602 42951
+639 602 62235
+793 602 55965
+802 602 34419
+812 602 54979
+823 602 62432
+886 602 20529
+887 602 65094
+888 602 30005
+899 602 29808
+1950 602 24352
+1951 602 40940
+1952 602 19610
+1953 602 19610
+1955 602 44291
+1956 602 44291
+1957 602 44291
+1958 602 42662
+1959 602 34816
+1960 602 24153
+1961 602 21231
+1962 602 21231
+1963 602 21231
+1965 602 47707
+1966 602 47707
+1967 602 49719
+1968 602 17309
+1969 602 11750
+1970 602 48676
+1971 602 56688
+1972 602 56688
+1973 602 56688
+1974 602 56688
+1976 602 47584
+1977 602 32152
+1978 602 31115
+1979 602 27435
+1980 602 24649
+1981 602 31783
+2037 602 55408
+2038 602 55408
+2039 602 55408
+2040 602 55408
+2041 602 55408
+2043 602 6387
+2044 602 37178
+2045 602 14066
+2046 602 37688
+2047 602 17012
+2058 602 56760
+2398 602 49331
+2399 602 49331
+2400 602 49331
+2401 602 49331
+2402 602 49331
+2403 602 49331
+2404 602 35052
+2405 602 63137
+2406 602 16011
+2407 602 52709
+2408 602 63690
+2419 602 10738
+2497 602 56864
+3113 602 27852657
+531 603 1
+571 603 65520
+620 603 65519
+630 603 65520
+804 603 65519
+814 603 65519
+879 603 65520
+2014 603 2067
+2022 603 29906
+2028 603 37417
+2029 603 16099
+2031 603 11996
+2034 603 38987
+2035 603 38987
+2036 603 38987
+2037 603 34667
+2038 603 6773
+2039 603 33697
+2040 603 32412
+2043 603 3317
+2044 603 58780
+2045 603 58780
+2046 603 32246
+2047 603 58780
+2048 603 34667
+2049 603 6773
+2050 603 33697
+2051 603 32412
+2052 603 38541
+2054 603 3317
+2055 603 58780
+2056 603 58780
+2057 603 32246
+2058 603 52039
+2059 603 58780
+2366 603 47769
+2367 603 47769
+2368 603 28880
+2369 603 59192
+2373 603 56178
+2374 603 56178
+2375 603 37289
+2376 603 25915
+2377 603 63277
+2378 603 63277
+2379 603 54348
+2380 603 33682
+2382 603 29485
+2383 603 63935
+2384 603 60498
+2385 603 19184
+2386 603 64685
+2387 603 1408
+2388 603 61801
+2389 603 60395
+2390 603 41319
+2392 603 13846
+2393 603 43962
+2394 603 55607
+2395 603 16707
+2396 603 53090
+2397 603 51682
+2398 603 52858
+2399 603 58108
+2400 603 62676
+2401 603 54966
+2403 603 32104
+2404 603 37116
+2405 603 38992
+2406 603 27575
+2407 603 24402
+2408 603 38241
+2409 603 8490
+2410 603 37386
+2411 603 60842
+2412 603 1423
+2413 603 62712
+2415 603 55625
+2416 603 36496
+2417 603 33774
+2418 603 63656
+2419 603 44990
+2420 603 6749
+2487 603 48472
+2488 603 17806
+2489 603 20434
+2490 603 20434
+2491 603 50905
+2492 603 46037
+2493 603 3498
+2494 603 33995
+2495 603 29980
+2496 603 50948
+2497 603 59412
+2498 603 23004
+2510 603 24914
+3114 603 27852657
+532 604 1
+2406 604 65520
+3115 604 27852657
+533 605 1
+534 605 1
+569 605 34976
+577 605 24806
+578 605 7599
+579 605 38144
+618 605 2585
+628 605 31230
+634 605 36084
+635 605 47570
+636 605 22764
+637 605 19134
+638 605 25454
+639 605 32368
+802 605 19269
+812 605 26427
+823 605 33947
+885 605 26994
+886 605 53889
+887 605 49039
+888 605 49673
+899 605 48094
+1949 605 60542
+1950 605 23497
+1951 605 23497
+1952 605 19175
+1953 605 19175
+1955 605 35436
+1956 605 35436
+1957 605 33521
+1958 605 30924
+1959 605 60937
+1960 605 40619
+1961 605 59234
+1962 605 59234
+1963 605 59234
+1965 605 33919
+1966 605 62765
+1967 605 3058
+1968 605 40480
+1969 605 13551
+1970 605 4092
+1971 605 6248
+1972 605 6248
+1973 605 6248
+1974 605 6248
+1976 605 16917
+1977 605 56035
+1978 605 37372
+1979 605 18647
+1980 605 3228
+1981 605 50709
+2037 605 7235
+2038 605 7235
+2039 605 7235
+2040 605 7235
+2041 605 7235
+2043 605 56668
+2044 605 53082
+2045 605 35607
+2046 605 25033
+2047 605 59401
+2058 605 34199
+2398 605 3782
+2399 605 3782
+2400 605 3782
+2401 605 3782
+2402 605 3782
+2403 605 3782
+2404 605 19507
+2405 605 42532
+2406 605 21362
+2407 605 19500
+2408 605 21602
+2419 605 52134
+2497 605 27671
+3116 605 27852657
+534 606 1
+1577 606 60764
+1626 606 29970
+1634 606 6498
+1635 606 55492
+1636 606 25522
+1681 606 25997
+1691 606 10864
+1697 606 33539
+1698 606 40509
+1699 606 34011
+1700 606 10676
+1701 606 20737
+1702 606 35395
+1960 606 17112
+1970 606 38543
+1981 606 52050
+2044 606 8083
+2045 606 33374
+2046 606 37826
+2047 606 45545
+2058 606 28890
+2302 606 28366
+2309 606 17926
+2310 606 48106
+2311 606 28633
+2312 606 28633
+2313 606 32421
+2314 606 59272
+2316 606 57720
+2317 606 11259
+2318 606 43572
+2319 606 20604
+2320 606 26860
+2321 606 14028
+2322 606 41716
+2323 606 45273
+2324 606 45273
+2326 606 40997
+2327 606 32613
+2328 606 31004
+2329 606 45282
+2330 606 21315
+2331 606 60681
+2332 606 21002
+2333 606 32572
+2334 606 32572
+2335 606 32572
+2337 606 47173
+2338 606 49778
+2339 606 12048
+2340 606 50569
+2341 606 58078
+2342 606 22165
+2398 606 57804
+2399 606 29113
+2400 606 29113
+2401 606 29113
+2402 606 15181
+2404 606 56527
+2405 606 7445
+2406 606 5348
+2407 606 36029
+2408 606 40165
+2419 606 24289
+2476 606 2278
+2477 606 65300
+2478 606 65300
+2479 606 65300
+2480 606 47189
+2481 606 38209
+2482 606 22966
+2483 606 18197
+2484 606 15171
+2485 606 14075
+2486 606 10958
+2497 606 65058
+2509 606 24318
+3117 606 27852657
+535 607 1
+569 607 46340
+577 607 61091
+578 607 54752
+579 607 8412
+618 607 5354
+628 607 42267
+634 607 60089
+635 607 44762
+636 607 49192
+637 607 857
+638 607 4187
+639 607 35853
+802 607 51035
+812 607 41233
+823 607 61375
+885 607 46021
+886 607 42880
+887 607 40427
+888 607 16879
+899 607 56878
+1949 607 4979
+1950 607 3450
+1951 607 3450
+1952 607 63538
+1953 607 63538
+1955 607 2205
+1956 607 2205
+1957 607 4120
+1958 607 11164
+1959 607 16323
+1960 607 52590
+1961 607 43103
+1962 607 43103
+1963 607 43103
+1965 607 61323
+1966 607 32477
+1967 607 45765
+1968 607 56187
+1969 607 5271
+1970 607 38003
+1971 607 63778
+1972 607 63778
+1973 607 63778
+1974 607 63778
+1976 607 39503
+1977 607 60987
+1978 607 8597
+1979 607 61797
+1980 607 19635
+1981 607 53045
+2037 607 9947
+2038 607 9947
+2039 607 9947
+2040 607 9947
+2041 607 9947
+2043 607 2529
+2044 607 9125
+2045 607 31728
+2046 607 56512
+2047 607 52678
+2058 607 32237
+2398 607 17842
+2399 607 17842
+2400 607 17842
+2401 607 17842
+2402 607 17842
+2403 607 17842
+2404 607 16334
+2405 607 22889
+2406 607 29472
+2407 607 51527
+2408 607 30499
+2419 607 54740
+2497 607 31304
+3118 607 27852657
+536 608 1
+537 608 1
+538 608 1
+569 608 1
+576 608 65520
+577 608 65520
+578 608 65520
+579 608 65520
+616 608 8837
+617 608 8837
+618 608 8838
+625 608 8835
+626 608 8835
+627 608 17672
+628 608 8834
+635 608 8836
+636 608 8836
+637 608 17673
+638 608 17671
+639 608 8836
+714 608 1
+715 608 1
+716 608 1
+740 608 64538
+747 608 52000
+748 608 52984
+755 608 65520
+756 608 20262
+757 608 8707
+758 608 21245
+793 608 64538
+801 608 52000
+802 608 52985
+810 608 28116
+811 608 5006
+812 608 51326
+820 608 7853
+821 608 5135
+822 608 47753
+823 608 17672
+858 608 64538
+865 608 56684
+866 608 43163
+867 608 44147
+874 608 56686
+876 608 33574
+877 608 23211
+885 608 61946
+886 608 29999
+887 608 30439
+888 608 7227
+895 608 8836
+896 608 62929
+897 608 42537
+898 608 357
+899 608 62303
+900 608 63912
+1815 608 25777
+1816 608 25777
+1851 608 25777
+1858 608 102
+1859 608 64919
+1860 608 64919
+1895 608 12804
+1896 608 64038
+1903 608 37267
+1904 608 63966
+1905 608 43252
+1912 608 37165
+1913 608 25213
+1914 608 48657
+1915 608 4803
+1951 608 51234
+1959 608 35610
+1960 608 43343
+1968 608 22738
+1969 608 34697
+1970 608 17035
+1977 608 6337
+1978 608 41027
+1979 608 54887
+1980 608 22987
+1981 608 10755
+2017 608 8686
+2024 608 60381
+2026 608 50281
+2031 608 2516
+2033 608 11807
+2034 608 14159
+2035 608 26882
+2036 608 35262
+2037 608 37005
+2038 608 37005
+2039 608 37005
+2040 608 37005
+2043 608 20392
+2044 608 21018
+2045 608 38662
+2046 608 27092
+2047 608 46582
+2048 608 37005
+2049 608 37005
+2050 608 37005
+2051 608 37005
+2052 608 37005
+2054 608 61885
+2055 608 37440
+2056 608 41224
+2057 608 17853
+2058 608 32393
+2059 608 62087
+2373 608 9045
+2374 608 9045
+2375 608 9045
+2376 608 9045
+2377 608 64579
+2378 608 1801
+2379 608 6564
+2380 608 6564
+2382 608 22278
+2383 608 22278
+2384 608 22278
+2385 608 14204
+2386 608 6049
+2387 608 14771
+2388 608 6725
+2389 608 6725
+2390 608 6725
+2392 608 33132
+2393 608 33132
+2394 608 5709
+2395 608 15595
+2396 608 20422
+2397 608 51382
+2398 608 58970
+2399 608 58970
+2400 608 58970
+2401 608 58970
+2403 608 60691
+2404 608 15380
+2405 608 21667
+2406 608 1741
+2407 608 26435
+2408 608 62370
+2409 608 45788
+2410 608 45788
+2411 608 45788
+2412 608 45788
+2413 608 45788
+2415 608 41968
+2416 608 41388
+2417 608 38303
+2418 608 13912
+2419 608 13708
+2420 608 36439
+2487 608 8362
+2488 608 8362
+2489 608 8362
+2490 608 8362
+2491 608 8362
+2492 608 8362
+2493 608 53849
+2494 608 58332
+2495 608 37039
+2496 608 24286
+2497 608 28436
+2498 608 57270
+2510 608 16848
+3119 608 27852657
+537 609 1
+538 609 1
+569 609 5702
+577 609 17712
+578 609 2035
+579 609 61855
+618 609 25296
+628 609 2378
+634 609 34916
+635 609 35595
+636 609 17883
+637 609 51623
+638 609 45360
+639 609 39316
+802 609 20329
+812 609 49610
+823 609 35032
+885 609 21856
+886 609 49432
+887 609 30691
+888 609 14567
+899 609 18851
+1950 609 23144
+1951 609 23144
+1952 609 28682
+1953 609 28682
+1955 609 15712
+1956 609 15712
+1957 609 15712
+1958 609 13069
+1959 609 54211
+1960 609 48689
+1961 609 24865
+1962 609 24865
+1963 609 24865
+1965 609 1222
+1966 609 1222
+1967 609 55400
+1968 609 52603
+1969 609 10509
+1970 609 65082
+1971 609 15100
+1972 609 15100
+1973 609 15100
+1974 609 15100
+1976 609 45748
+1977 609 53567
+1978 609 49726
+1979 609 27502
+1980 609 44417
+1981 609 33768
+2037 609 46974
+2038 609 46974
+2039 609 46974
+2040 609 46974
+2041 609 46974
+2043 609 17920
+2044 609 64635
+2045 609 4588
+2046 609 61153
+2047 609 47272
+2058 609 28120
+2398 609 6959
+2399 609 6959
+2400 609 6959
+2401 609 6959
+2402 609 6959
+2403 609 6959
+2404 609 36533
+2405 609 29800
+2406 609 19139
+2407 609 30290
+2408 609 14595
+2419 609 57469
+2497 609 55691
+3120 609 27852657
+538 610 1
+716 610 10234
+748 610 10099
+802 610 32024
+867 610 32024
+1209 610 19221
+1210 610 19221
+1211 610 56103
+1212 610 56103
+1214 610 5114
+1215 610 5114
+1216 610 5114
+1217 610 40240
+1218 610 9875
+1219 610 56175
+1361 610 20870
+1362 610 20870
+1363 610 20870
+1365 610 36137
+1366 610 36137
+1367 610 40583
+1368 610 48282
+1369 610 4148
+1414 610 13494
+1573 610 41383
+1574 610 41383
+1575 610 41383
+1576 610 41383
+1578 610 63516
+1579 610 13984
+1580 610 61791
+1581 610 65209
+1626 610 5735
+1681 610 57762
+1852 610 23287
+1853 610 23287
+1854 610 23287
+1855 610 23287
+1856 610 23287
+1858 610 25986
+1859 610 53399
+1860 610 38715
+1905 610 16183
+1960 610 51180
+2026 610 35668
+2213 610 41388
+2214 610 41388
+2215 610 41388
+2216 610 41388
+2217 610 41388
+2218 610 41388
+2219 610 32646
+2220 610 37955
+2221 610 10681
+2266 610 27804
+2321 610 33471
+2387 610 4501
+2465 610 35102
+3121 610 27852657
+539 611 1
+582 611 1
+763 611 1
+1587 611 24572
+1642 611 24572
+1646 611 40955
+1921 611 61427
+1925 611 28666
+1928 611 33481
+1929 611 25476
+1930 611 62331
+1963 611 29498
+1965 611 21657
+1968 611 34245
+1969 611 34245
+1970 611 34245
+1971 611 33704
+1972 611 33704
+1973 611 63202
+1974 611 61248
+1977 611 62116
+1978 611 20895
+1979 611 20895
+1980 611 55140
+1981 611 20895
+2037 611 33704
+2038 611 33704
+2039 611 63202
+2040 611 61248
+2041 611 61248
+2043 611 62116
+2044 611 20895
+2045 611 20895
+2046 611 55140
+2047 611 41790
+2058 611 20895
+2278 611 37614
+2279 611 37614
+2280 611 8597
+2281 611 24513
+2282 611 25802
+2283 611 61573
+2284 611 21214
+2285 611 58683
+2286 611 32881
+2287 611 61573
+2288 611 21214
+2289 611 8750
+2290 611 30386
+2291 611 63026
+2292 611 61573
+2293 611 21214
+2294 611 27692
+2295 611 47992
+2296 611 23344
+2297 611 25839
+2300 611 58707
+2301 611 46105
+2302 611 53854
+2303 611 2001
+2307 611 27726
+2308 611 15124
+2309 611 22873
+2310 611 44290
+2311 611 10728
+2312 611 10728
+2313 611 36602
+2314 611 62002
+2316 611 16841
+2317 611 24590
+2318 611 33405
+2319 611 9392
+2320 611 27073
+2321 611 16345
+2322 611 44829
+2323 611 4708
+2324 611 64539
+2326 611 61189
+2327 611 63190
+2328 611 28334
+2329 611 29055
+2330 611 63134
+2331 611 46789
+2332 611 65025
+2333 611 24904
+2334 611 19214
+2335 611 36211
+2337 611 40177
+2338 611 7904
+2339 611 22571
+2340 611 30598
+2341 611 28857
+2342 611 47589
+2398 611 33484
+2399 611 19220
+2400 611 8813
+2401 611 65311
+2402 611 13009
+2404 611 30991
+2405 611 49254
+2406 611 64481
+2407 611 13317
+2408 611 54239
+2419 611 6650
+2476 611 56064
+2477 611 40008
+2478 611 41929
+2479 611 54610
+2480 611 62851
+2481 611 10287
+2482 611 38161
+2483 611 36492
+2484 611 64607
+2485 611 48892
+2486 611 14312
+2497 611 31436
+2509 611 4197
+3122 611 27852657
+539 612 1
+582 612 1
+586 612 65520
+763 612 41694
+828 612 41693
+832 612 1
+837 612 65520
+1866 612 59561
+1921 612 19355
+1925 612 34246
+1936 612 58612
+1987 612 56584
+1991 612 27549
+1994 612 58362
+1995 612 6044
+1996 612 44016
+2014 612 50667
+2022 612 22320
+2029 612 13030
+2031 612 57016
+2034 612 51140
+2035 612 51140
+2036 612 51140
+2037 612 14328
+2038 612 171
+2039 612 3030
+2040 612 32348
+2043 612 20010
+2044 612 21076
+2045 612 21076
+2046 612 6695
+2047 612 21076
+2048 612 14328
+2049 612 171
+2050 612 3030
+2051 612 32348
+2052 612 40511
+2054 612 20010
+2055 612 21076
+2056 612 21076
+2057 612 6695
+2058 612 42152
+2059 612 21076
+2344 612 33672
+2345 612 33672
+2346 612 13819
+2347 612 12724
+2348 612 54997
+2349 612 5625
+2350 612 34734
+2351 612 38665
+2352 612 49189
+2353 612 5625
+2354 612 34734
+2355 612 38761
+2356 612 15038
+2357 612 31370
+2358 612 5625
+2359 612 34734
+2360 612 37329
+2361 612 6699
+2362 612 21587
+2363 612 55738
+2366 612 31176
+2367 612 29486
+2368 612 40942
+2369 612 46723
+2373 612 9436
+2374 612 7746
+2375 612 19202
+2376 612 49896
+2377 612 24278
+2378 612 24278
+2379 612 38061
+2380 612 34747
+2382 612 62297
+2383 612 12693
+2384 612 58745
+2385 612 34831
+2386 612 1922
+2387 612 43165
+2388 612 64771
+2389 612 61457
+2390 612 12313
+2392 612 20990
+2393 612 13943
+2394 612 1088
+2395 612 4900
+2396 612 47384
+2397 612 4219
+2398 612 40899
+2399 612 1468
+2400 612 63524
+2401 612 15746
+2403 612 55239
+2404 612 55627
+2405 612 10482
+2406 612 48111
+2407 612 54919
+2408 612 50700
+2409 612 34806
+2410 612 40117
+2411 612 8221
+2412 612 12523
+2413 612 606
+2415 612 17224
+2416 612 45327
+2417 612 62436
+2418 612 64723
+2419 612 59846
+2420 612 9146
+2487 612 21503
+2488 612 37146
+2489 612 5967
+2490 612 7571
+2491 612 44150
+2492 612 16576
+2493 612 63233
+2494 612 63822
+2495 612 65148
+2496 612 38880
+2497 612 55442
+2498 612 64249
+2510 612 14260
+3123 612 27852657
+540 613 1
+719 613 1
+723 613 65520
+1873 613 19079
+1874 613 45141
+1875 613 45141
+1908 613 22421
+1910 613 46422
+1913 613 45468
+1914 613 45468
+1915 613 45468
+1961 613 41168
+1962 613 41168
+1963 613 63589
+1964 613 56272
+1967 613 42575
+1968 613 36611
+1969 613 36611
+1970 613 16558
+1980 613 36611
+2027 613 41168
+2028 613 41168
+2029 613 63589
+2030 613 56272
+2031 613 12591
+2033 613 42575
+2034 613 36611
+2035 613 36611
+2036 613 16558
+2046 613 7701
+2057 613 36611
+2223 613 19653
+2224 613 19653
+2225 613 9395
+2226 613 46615
+2227 613 26962
+2228 613 60147
+2229 613 35441
+2230 613 32790
+2231 613 5828
+2232 613 58327
+2233 613 33621
+2234 613 7352
+2235 613 27629
+2236 613 21801
+2237 613 58327
+2238 613 33621
+2239 613 9789
+2240 613 40036
+2241 613 668
+2242 613 44388
+2245 613 10635
+2246 613 45631
+2247 613 7911
+2248 613 11060
+2252 613 31440
+2253 613 915
+2254 613 28716
+2255 613 59666
+2256 613 10180
+2257 613 10180
+2258 613 5221
+2259 613 20484
+2261 613 28611
+2262 613 56412
+2263 613 56837
+2264 613 20150
+2265 613 37392
+2266 613 27212
+2267 613 59469
+2268 613 9211
+2269 613 58745
+2271 613 22127
+2272 613 33187
+2273 613 22587
+2274 613 38491
+2275 613 38313
+2276 613 11101
+2322 613 64122
+2323 613 13864
+2324 613 63398
+2325 613 61845
+2327 613 17286
+2328 613 15953
+2329 613 4879
+2330 613 2553
+2331 613 51935
+2341 613 40834
+2388 613 50832
+2389 613 10860
+2390 613 58187
+2391 613 1205
+2392 613 39580
+2394 613 1680
+2395 613 17129
+2396 613 20316
+2397 613 32938
+2407 613 54571
+2418 613 13737
+2466 613 28088
+2467 613 38417
+2468 613 51719
+2469 613 56047
+2470 613 41151
+2471 613 40335
+2472 613 5259
+2473 613 19970
+2474 613 41543
+2475 613 54945
+2485 613 9721
+2496 613 60993
+2508 613 45970
+3124 613 27852657
+541 614 1
+542 614 1
+543 614 1
+720 614 1
+721 614 1
+722 614 1
+723 614 1
+724 614 1
+725 614 2
+726 614 1
+1374 614 2
+1375 614 2
+1586 614 2
+1587 614 2
+1589 614 49144
+1590 614 49144
+1591 614 49142
+1862 614 2
+1863 614 2
+1864 614 49142
+1865 614 49144
+1866 614 49142
+1867 614 49142
+1868 614 16384
+1869 614 3
+1870 614 16382
+1871 614 49142
+1872 614 16384
+1873 614 3
+1874 614 32764
+1875 614 16382
+2223 614 1
+2224 614 1
+2225 614 8191
+2226 614 8192
+2227 614 8191
+2228 614 8191
+2229 614 24572
+2230 614 32762
+2231 614 24571
+2232 614 8191
+2233 614 24572
+2234 614 32762
+2235 614 49142
+2236 614 24571
+2237 614 8191
+2238 614 24572
+2239 614 32762
+2240 614 49142
+2241 614 49142
+2242 614 24571
+2388 614 16381
+2389 614 24572
+2390 614 40952
+2391 614 49143
+2392 614 49142
+2466 614 56309
+2467 614 47099
+2468 614 5124
+2469 614 12289
+2470 614 28668
+2471 614 12286
+2496 614 8190
+2508 614 26618
+3125 614 27852657
+542 615 1
+721 615 1
+1591 615 65515
+1870 615 40949
+1873 615 5908
+1874 615 35584
+1875 615 60156
+1908 615 35306
+1910 615 16243
+1913 615 34125
+1914 615 34125
+1915 615 34125
+1961 615 9507
+1962 615 9507
+1963 615 44813
+1964 615 1115
+1967 615 34232
+1968 615 1794
+1969 615 1794
+1970 615 35919
+1980 615 1794
+2027 615 9507
+2028 615 9507
+2029 615 44813
+2030 615 1115
+2031 615 1115
+2033 615 34232
+2034 615 1794
+2035 615 1794
+2036 615 35919
+2046 615 3588
+2057 615 1794
+2223 615 41860
+2224 615 41860
+2225 615 28870
+2226 615 23578
+2227 615 47239
+2228 615 42016
+2229 615 50810
+2230 615 46797
+2231 615 65079
+2232 615 42016
+2233 615 50810
+2234 615 26086
+2235 615 47352
+2236 615 47794
+2237 615 42016
+2238 615 50810
+2239 615 22576
+2240 615 11630
+2241 615 35256
+2242 615 52983
+2245 615 57382
+2246 615 713
+2247 615 11190
+2248 615 7246
+2252 615 24271
+2253 615 33123
+2254 615 43600
+2255 615 50133
+2256 615 40911
+2257 615 40911
+2258 615 44854
+2259 615 34704
+2261 615 39799
+2262 615 50276
+2263 615 140
+2264 615 8699
+2265 615 16962
+2266 615 41572
+2267 615 3689
+2268 615 59060
+2269 615 59307
+2271 615 54058
+2272 615 61304
+2273 615 5189
+2274 615 4329
+2275 615 37198
+2276 615 61147
+2322 615 1773
+2323 615 57144
+2324 615 57391
+2325 615 25628
+2327 615 22960
+2328 615 14018
+2329 615 58682
+2330 615 53106
+2331 615 45459
+2341 615 49833
+2388 615 61893
+2389 615 17230
+2390 615 28351
+2391 615 40487
+2392 615 2828
+2394 615 60816
+2395 615 43485
+2396 615 1604
+2397 615 39186
+2407 615 62257
+2418 615 12424
+2466 615 56462
+2467 615 3888
+2468 615 3695
+2469 615 39243
+2470 615 25241
+2471 615 62667
+2472 615 6917
+2473 615 2183
+2474 615 23082
+2475 615 23379
+2485 615 11191
+2496 615 43429
+2508 615 16543
+3126 615 27852657
+543 616 1
+722 616 1
+726 616 65520
+1591 616 6
+1870 616 24572
+1873 616 50858
+1874 616 27336
+1875 616 2764
+1908 616 16078
+1910 616 34821
+1913 616 22241
+1914 616 22241
+1915 616 22241
+1961 616 9082
+1962 616 9082
+1963 616 25160
+1964 616 17415
+1967 616 55245
+1968 616 56132
+1969 616 56132
+1970 616 12852
+1980 616 56132
+2027 616 9082
+2028 616 9082
+2029 616 25160
+2030 616 17415
+2031 616 17415
+2033 616 55245
+2034 616 56132
+2035 616 56132
+2036 616 12852
+2046 616 46743
+2057 616 56132
+2223 616 35224
+2224 616 35224
+2225 616 54027
+2226 616 59109
+2227 616 23885
+2228 616 9770
+2229 616 34011
+2230 616 13032
+2231 616 54668
+2232 616 9770
+2233 616 34011
+2234 616 23081
+2235 616 18207
+2236 616 29060
+2237 616 9770
+2238 616 34011
+2239 616 49997
+2240 616 47749
+2241 616 31657
+2242 616 2597
+2245 616 2604
+2246 616 30709
+2247 616 53633
+2248 616 13428
+2252 616 20636
+2253 616 48741
+2254 616 6144
+2255 616 54384
+2256 616 9516
+2257 616 9516
+2258 616 5936
+2259 616 15088
+2261 616 2699
+2262 616 25623
+2263 616 36447
+2264 616 12142
+2265 616 635
+2266 616 56640
+2267 616 13600
+2268 616 22752
+2269 616 61659
+2271 616 48926
+2272 616 62354
+2273 616 39058
+2274 616 58533
+2275 616 58933
+2276 616 2293
+2322 616 53941
+2323 616 63093
+2324 616 36479
+2325 616 44378
+2327 616 14897
+2328 616 42923
+2329 616 50876
+2330 616 36962
+2331 616 25377
+2341 616 23084
+2388 616 11001
+2389 616 18526
+2390 616 22483
+2391 616 61983
+2392 616 24222
+2394 616 55120
+2395 616 15986
+2396 616 58149
+2397 616 26104
+2407 616 52582
+2418 616 29498
+2466 616 62055
+2467 616 50318
+2468 616 33136
+2469 616 20101
+2470 616 12276
+2471 616 12972
+2472 616 22783
+2473 616 53037
+2474 616 49466
+2475 616 14932
+2485 616 31897
+2496 616 4525
+2508 616 61417
+3127 616 27852657
+544 617 1
+545 617 1
+548 617 1
+1592 617 32761
+1593 617 32761
+1596 617 32761
+1597 617 32761
+1598 617 32761
+1601 617 1
+1602 617 32761
+1652 617 32761
+1653 617 32761
+1657 617 32761
+2322 617 24571
+2323 617 24571
+2326 617 49142
+2327 617 49141
+2332 617 24571
+2333 617 24571
+2337 617 49141
+2398 617 24571
+2399 617 24571
+2402 617 1
+2476 617 36856
+2477 617 36856
+2480 617 32761
+2481 617 1
+2485 617 8190
+2486 617 8190
+2497 617 8190
+2509 617 13310
+3128 617 27852657
+545 618 1
+548 618 1
+1583 618 2
+1584 618 2
+1586 618 2
+1592 618 49142
+1593 618 32763
+1596 618 32761
+1597 618 49142
+1598 618 32763
+1601 618 1
+1602 618 32761
+1638 618 2
+1639 618 2
+1641 618 2
+1644 618 2
+1652 618 49142
+1653 618 32763
+1657 618 32761
+1917 618 2
+1918 618 2
+1920 618 2
+1923 618 2
+1926 618 2
+1927 618 4
+1928 618 2
+1929 618 2
+1930 618 2
+2278 618 1
+2279 618 1
+2281 618 1
+2284 618 1
+2287 618 43681
+2288 618 43682
+2289 618 43681
+2290 618 43681
+2291 618 43681
+2292 618 43681
+2293 618 43682
+2294 618 43681
+2295 618 43681
+2296 618 21841
+2297 618 43681
+2322 618 16381
+2323 618 24572
+2324 618 43681
+2326 618 49142
+2327 618 49141
+2332 618 16381
+2333 618 24572
+2334 618 43681
+2335 618 43681
+2337 618 49141
+2398 618 16381
+2399 618 24572
+2400 618 43681
+2401 618 43681
+2402 618 2
+2476 618 37200
+2477 618 34133
+2478 618 54603
+2479 618 54603
+2480 618 46415
+2481 618 13653
+2485 618 8190
+2486 618 8190
+2497 618 8190
+2509 618 65182
+3129 618 27852657
+546 619 1
+1594 619 32761
+1599 619 32761
+1654 619 32761
+1655 619 32761
+2324 619 24571
+2334 619 24571
+2335 619 24571
+2400 619 24571
+2401 619 24571
+2402 619 24571
+2478 619 36856
+2479 619 36856
+2480 619 36856
+2481 619 36856
+2509 619 6655
+3130 619 27852657
+547 620 1
+548 620 1
+1594 620 21965
+1595 620 24572
+1596 620 24572
+1601 620 26175
+1602 620 1603
+1607 620 38276
+1613 620 36714
+1614 620 58699
+1615 620 1900
+1616 620 5383
+1617 620 5383
+1618 620 55261
+1619 620 30378
+1621 620 33751
+1622 620 35427
+1623 620 39308
+1624 620 17966
+1625 620 40004
+1626 620 34621
+1627 620 1992
+1628 620 25357
+1629 620 1402
+1631 620 30550
+1632 620 6269
+1633 620 13803
+1634 620 17967
+1635 620 24385
+1636 620 55285
+1682 620 30647
+1683 620 29061
+1684 620 34493
+1685 620 34930
+1687 620 22554
+1688 620 25932
+1689 620 23673
+1690 620 49711
+1691 620 5814
+1701 620 16050
+1961 620 55814
+1962 620 33833
+1963 620 34074
+1964 620 63108
+1965 620 46229
+1967 620 56819
+1968 620 34408
+1969 620 64671
+1970 620 34457
+1980 620 39160
+2046 620 23110
+2322 620 38929
+2323 620 55615
+2324 620 14680
+2325 620 55365
+2326 620 21040
+2327 620 26607
+2328 620 16608
+2329 620 64045
+2330 620 26175
+2331 620 30024
+2341 620 62797
+2407 620 51723
+2485 620 44680
+3131 620 27852657
+548 621 1
+1596 621 54601
+1602 621 10920
+1657 621 10920
+1684 621 60060
+1694 621 60060
+1695 621 60060
+1941 621 43681
+1948 621 43681
+1956 621 43681
+1963 621 43679
+1965 621 10920
+1973 621 38220
+1974 621 38220
+2039 621 43681
+2040 621 43681
+2041 621 21841
+2302 621 30031
+2303 621 2
+2309 621 30031
+2310 621 2
+2317 621 30031
+2318 621 2
+2324 621 30031
+2326 621 17745
+2327 621 23207
+2334 621 34126
+2335 621 34126
+2337 621 9556
+2400 621 42316
+2401 621 42316
+2402 621 61426
+2478 621 34808
+2479 621 34808
+2480 621 27983
+2481 621 56649
+2482 621 43681
+2483 621 43681
+2484 621 43681
+2485 621 19793
+2486 621 19451
+2497 621 5460
+2509 621 39076
+3132 621 27852657
+549 622 1
+594 622 15228
+770 622 43314
+771 622 26838
+772 622 26838
+790 622 11497
+798 622 48360
+804 622 8626
+805 622 59094
+807 622 50549
+810 622 62994
+811 622 62994
+812 622 62994
+813 622 64547
+814 622 10956
+815 622 42790
+816 622 63466
+819 622 30653
+820 622 60712
+821 622 60712
+822 622 58185
+823 622 60712
+878 622 64547
+879 622 10956
+880 622 42790
+881 622 63466
+882 622 48392
+884 622 30653
+885 622 60712
+886 622 60712
+887 622 58185
+888 622 55903
+899 622 60712
+1917 622 4809
+1918 622 4809
+1919 622 47592
+1920 622 22589
+1921 622 17780
+1922 622 2566
+1923 622 41247
+1924 622 42056
+1925 622 24276
+1926 622 2566
+1927 622 41247
+1928 622 43083
+1929 622 29878
+1930 622 5602
+1931 622 7191
+1932 622 6506
+1933 622 52676
+1934 622 31701
+1935 622 63088
+1936 622 57486
+1939 622 52094
+1940 622 28531
+1941 622 22682
+1942 622 49550
+1946 622 19079
+1947 622 61037
+1948 622 55188
+1949 622 47892
+1950 622 62581
+1951 622 62581
+1952 622 4358
+1953 622 46061
+1955 622 49531
+1956 622 20587
+1957 622 47239
+1958 622 5433
+1959 622 25489
+1960 622 28429
+1961 622 18569
+1962 622 58403
+1963 622 17365
+1965 622 49737
+1966 622 1863
+1967 622 52963
+1968 622 8673
+1969 622 43540
+1970 622 15111
+1971 622 27217
+1972 622 14263
+1973 622 58512
+1974 622 8280
+1976 622 19972
+1977 622 40318
+1978 622 34966
+1979 622 47978
+1980 622 35018
+1981 622 19907
+2037 622 51625
+2038 622 52637
+2039 622 2536
+2040 622 15772
+2041 622 59822
+2043 622 29063
+2044 622 34241
+2045 622 39258
+2046 622 19928
+2047 622 7425
+2058 622 53039
+2398 622 37342
+2399 622 22988
+2400 622 35680
+2401 622 25695
+2402 622 54973
+2403 622 42837
+2404 622 55891
+2405 622 64693
+2406 622 45746
+2407 622 40038
+2408 622 59355
+2419 622 5783
+2497 622 16280
+3133 622 27852657
+550 623 1
+592 623 1
+593 623 1
+1963 623 49142
+1973 623 49142
+1974 623 49142
+2029 623 2
+2039 623 49142
+2040 623 49142
+2390 623 1
+2400 623 8191
+2401 623 8191
+2403 623 8191
+2497 623 13310
+2498 623 49142
+2510 623 8191
+3134 623 27852657
+551 624 1
+552 624 1
+594 624 1
+621 624 32766
+631 624 32766
+632 624 32766
+783 624 65520
+790 624 65520
+798 624 65520
+805 624 10
+807 624 2
+815 624 32764
+816 624 32764
+880 624 65519
+881 624 65519
+882 624 65518
+1941 624 40949
+1942 624 65515
+1948 624 40949
+1949 624 65515
+1956 624 40949
+1957 624 65515
+1963 624 16377
+1965 624 8195
+1966 624 57327
+1973 624 57328
+1974 624 57328
+1976 624 8191
+2039 624 8188
+2040 624 8188
+2041 624 16382
+2400 624 53236
+2401 624 53236
+2402 624 40951
+2403 624 53235
+2404 624 65520
+2405 624 65520
+2406 624 65520
+2407 624 12285
+2408 624 14337
+2419 624 32763
+2497 624 19446
+3135 624 27852657
+552 625 1
+594 625 1
+2031 625 30183
+2034 625 14511
+2035 625 14511
+2036 625 14511
+2037 625 57995
+2038 625 57995
+2039 625 57995
+2040 625 57995
+2043 625 16983
+2044 625 46562
+2045 625 46562
+2046 625 61073
+2047 625 46562
+2048 625 57995
+2049 625 57995
+2050 625 57995
+2051 625 57995
+2052 625 57995
+2054 625 16983
+2055 625 46562
+2056 625 46562
+2057 625 61073
+2058 625 27603
+2059 625 46562
+2373 625 38422
+2374 625 38422
+2375 625 38422
+2376 625 38422
+2379 625 40352
+2380 625 40352
+2382 625 44835
+2383 625 44835
+2384 625 44835
+2386 625 904
+2387 625 904
+2388 625 456
+2389 625 456
+2390 625 456
+2392 625 56175
+2393 625 56176
+2395 625 65209
+2396 625 8661
+2397 625 7757
+2398 625 6483
+2399 625 6483
+2400 625 6483
+2401 625 6483
+2403 625 37689
+2404 625 36377
+2405 625 14230
+2406 625 32729
+2407 625 44327
+2408 625 36570
+2409 625 18518
+2410 625 18518
+2411 625 18518
+2412 625 18518
+2413 625 18518
+2415 625 3027
+2416 625 18768
+2417 625 49679
+2418 625 53573
+2419 625 58975
+2420 625 22405
+2487 625 46534
+2488 625 46534
+2489 625 46534
+2490 625 46534
+2491 625 46534
+2492 625 46534
+2494 625 41361
+2495 625 49417
+2496 625 7958
+2497 625 29015
+2498 625 43525
+2510 625 45390
+3136 625 27852657
+553 626 1
+572 626 1
+597 626 1
+605 626 65520
+621 626 2
+631 626 1
+781 626 1
+789 626 65520
+790 626 65520
+805 626 2
+815 626 2
+880 626 1
+1605 626 49142
+1629 626 49142
+1660 626 49142
+1661 626 49140
+1668 626 65519
+1684 626 32763
+1694 626 49142
+1695 626 49140
+1939 626 32763
+1940 626 49142
+1941 626 49142
+1947 626 16379
+1948 626 16379
+1963 626 49143
+1965 626 16381
+1973 626 49143
+1974 626 16380
+2039 626 1
+2040 626 32761
+2041 626 32761
+2300 626 16381
+2301 626 16381
+2302 626 16381
+2303 626 16381
+2324 626 40951
+2326 626 57331
+2327 626 57331
+2334 626 40951
+2335 626 40951
+2337 626 57331
+2401 626 49141
+2402 626 49141
+2404 626 1
+2405 626 57330
+2407 626 1
+2408 626 1
+2419 626 1
+2478 626 8190
+2479 626 8190
+2480 626 8190
+2481 626 8190
+2482 626 56309
+2483 626 16379
+2485 626 19453
+2486 626 3072
+2497 626 49143
+2509 626 21500
+3137 626 27852657
+554 627 1
+559 627 1
+622 627 1
+731 627 1
+732 627 1
+736 627 1
+737 627 1
+806 627 2
+871 627 1
+872 627 1
+1606 627 2
+1613 627 2
+1685 627 2
+1885 627 49142
+1886 627 49142
+1892 627 49142
+1893 627 49142
+1964 627 32763
+2030 627 32761
+2031 627 32761
+2391 627 16380
+2392 627 16380
+2394 627 8191
+2395 627 8191
+2407 627 1
+2418 627 2
+2472 627 49142
+2473 627 49142
+2485 627 2
+2496 627 26620
+2508 627 16380
+3138 627 27852657
+555 628 1
+807 628 1
+1568 628 2
+1569 628 2
+1570 628 2
+1576 628 2
+1577 628 2
+1578 628 2
+1607 628 49142
+1608 628 49142
+1614 628 2
+1615 628 2
+1622 628 2
+1623 628 2
+1670 628 16381
+1965 628 32759
+2320 628 1
+2321 628 1
+2326 628 38220
+2327 628 38220
+2328 628 8191
+2329 628 1
+2330 628 1
+2337 628 65520
+2338 628 21841
+2339 628 13651
+2340 628 21841
+2341 628 21841
+2342 628 21841
+2404 628 21841
+2405 628 13651
+2406 628 21841
+2407 628 21842
+2408 628 43682
+2419 628 21841
+2482 628 19111
+2483 628 54945
+2484 628 19113
+2485 628 32079
+2486 628 13650
+2497 628 13650
+2509 628 34125
+3139 628 27852657
+556 629 1
+562 629 65520
+569 629 1
+577 629 25194
+578 629 49194
+579 629 49193
+601 629 7799
+609 629 57722
+618 629 7799
+628 629 44898
+635 629 270
+636 629 33706
+637 629 63656
+638 629 19475
+639 629 23770
+785 629 25243
+793 629 40278
+802 629 25243
+812 629 34381
+823 629 11888
+886 629 44516
+887 629 51766
+888 629 47867
+899 629 59749
+1943 629 44736
+1950 629 14447
+1951 629 35232
+1952 629 42720
+1953 629 42720
+1955 629 5103
+1956 629 5103
+1957 629 5103
+1958 629 19757
+1959 629 46798
+1960 629 11566
+1961 629 7059
+1962 629 7059
+1963 629 7059
+1965 629 25712
+1966 629 25712
+1967 629 26472
+1968 629 12379
+1969 629 29683
+1970 629 64629
+1971 629 1072
+1972 629 1072
+1973 629 1072
+1974 629 1072
+1976 629 40315
+1977 629 31177
+1978 629 59146
+1979 629 24606
+1980 629 40750
+1981 629 900
+2037 629 47299
+2038 629 47299
+2039 629 47299
+2040 629 47299
+2041 629 47299
+2043 629 857
+2044 629 53867
+2045 629 30710
+2046 629 6488
+2047 629 64549
+2058 629 48406
+2398 629 31354
+2399 629 31354
+2400 629 31354
+2401 629 31354
+2402 629 31354
+2403 629 31354
+2404 629 27680
+2405 629 34326
+2406 629 23519
+2407 629 25789
+2408 629 10321
+2419 629 40165
+2497 629 23344
+3140 629 27852657
+557 630 1
+2407 630 65520
+3141 630 27852657
+558 631 1
+1950 631 58226
+1951 631 58226
+1952 631 50318
+1953 631 50318
+1955 631 22624
+1956 631 22624
+1957 631 22624
+1958 631 9520
+1959 631 40147
+1960 631 47442
+1961 631 46532
+1962 631 46532
+1963 631 46532
+1965 631 39237
+1966 631 39237
+1967 631 41565
+1968 631 12173
+1969 631 1511
+1970 631 19590
+1971 631 52158
+1972 631 52158
+1973 631 52158
+1974 631 52158
+1976 631 51084
+1977 631 59962
+1978 631 14545
+1979 631 19350
+1980 631 16768
+1981 631 62699
+2037 631 54420
+2038 631 54420
+2039 631 54420
+2040 631 54420
+2041 631 54420
+2043 631 27048
+2044 631 59216
+2045 631 43674
+2046 631 34128
+2047 631 63812
+2058 631 1113
+2398 631 27587
+2399 631 27587
+2400 631 27587
+2401 631 27587
+2402 631 27587
+2403 631 27587
+2404 631 27102
+2405 631 43546
+2406 631 33156
+2407 631 56060
+2408 631 35356
+2419 631 7864
+2497 631 45047
+3142 631 27852657
+559 632 1
+736 632 1
+744 632 65520
+872 632 65520
+1892 632 12025
+1893 632 62750
+1901 632 24380
+1908 632 13502
+1910 632 55378
+1913 632 53719
+1914 632 53719
+1915 632 53719
+1961 632 32281
+1962 632 32281
+1963 632 45783
+1964 632 44753
+1967 632 55880
+1968 632 65230
+1969 632 65230
+1970 632 53428
+1980 632 65230
+2027 632 32281
+2028 632 32281
+2029 632 45783
+2030 632 44753
+2031 632 17903
+2033 632 55880
+2034 632 65230
+2035 632 65230
+2036 632 53428
+2046 632 64939
+2057 632 65230
+2246 632 57761
+2247 632 45360
+2248 632 62047
+2252 632 33101
+2253 632 58002
+2254 632 6698
+2255 632 57160
+2256 632 10129
+2257 632 10129
+2258 632 48986
+2259 632 48986
+2261 632 44445
+2262 632 40154
+2263 632 51255
+2264 632 30719
+2265 632 57414
+2266 632 47285
+2267 632 43811
+2268 632 43811
+2269 632 16611
+2271 632 18297
+2272 632 17869
+2273 632 40479
+2274 632 498
+2275 632 55025
+2276 632 7740
+2322 632 51446
+2323 632 51446
+2324 632 24246
+2325 632 7809
+2327 632 19837
+2328 632 48154
+2329 632 44869
+2330 632 52325
+2331 632 59029
+2341 632 51289
+2388 632 57815
+2389 632 57815
+2390 632 14830
+2391 632 13570
+2392 632 31084
+2394 632 25342
+2395 632 47713
+2396 632 64262
+2397 632 16150
+2407 632 790
+2418 632 15021
+2466 632 23356
+2467 632 23356
+2468 632 9805
+2469 632 3288
+2470 632 42817
+2471 632 57663
+2472 632 25342
+2473 632 40566
+2474 632 10043
+2475 632 21806
+2485 632 60034
+2496 632 18633
+2508 632 60374
+3143 632 27852657
+560 633 1
+1568 633 65519
+1569 633 65519
+1570 633 65519
+1576 633 65519
+1577 633 65519
+1578 633 65519
+1614 633 49140
+1615 633 49140
+1622 633 65519
+1623 633 65519
+1670 633 49140
+1678 633 65519
+2320 633 65520
+2321 633 65520
+2329 633 8190
+2330 633 65520
+2339 633 8190
+2340 633 65520
+2405 633 8190
+2406 633 65520
+2483 633 29687
+2484 633 16377
+3144 633 27852657
+561 634 1
+562 634 1
+567 634 1
+568 634 2
+569 634 1
+576 634 1
+577 634 2
+578 634 2
+579 634 1
+626 634 1
+627 634 1
+628 634 1
+820 634 65520
+821 634 65520
+822 634 65519
+823 634 65520
+885 634 65520
+886 634 65520
+887 634 65519
+888 634 65519
+899 634 65520
+1616 634 36857
+1617 634 36857
+1624 634 24573
+1625 634 61430
+1626 634 24573
+1633 634 24573
+1634 634 61430
+1635 634 49146
+1636 634 24573
+1689 634 36857
+1690 634 24573
+1691 634 24573
+1698 634 40954
+1699 634 40954
+1700 634 40954
+1701 634 40954
+1702 634 40954
+1958 634 65517
+1965 634 32187
+1967 634 12281
+1968 634 27772
+1969 634 7687
+1970 634 7687
+1971 634 9788
+1972 634 9788
+1973 634 9788
+1974 634 9788
+1977 634 40498
+1978 634 60917
+1979 634 39576
+1980 634 14131
+1981 634 14639
+2037 634 9788
+2038 634 9788
+2039 634 9788
+2040 634 9788
+2041 634 9788
+2043 634 65065
+2044 634 60912
+2045 634 39571
+2046 634 42792
+2047 634 41555
+2058 634 2349
+2307 634 11931
+2308 634 11931
+2309 634 11931
+2310 634 11931
+2311 634 4485
+2312 634 4485
+2313 634 13215
+2314 634 13215
+2316 634 627
+2317 634 627
+2318 634 627
+2319 634 44120
+2320 634 41305
+2321 634 36820
+2322 634 57110
+2323 634 57110
+2324 634 57110
+2326 634 7478
+2327 634 7478
+2328 634 15788
+2329 634 5129
+2330 634 23632
+2331 634 52333
+2332 634 26549
+2333 634 26549
+2334 634 26549
+2335 634 26549
+2337 634 45793
+2338 634 25580
+2339 634 21707
+2340 634 59799
+2341 634 56891
+2342 634 4560
+2398 634 1268
+2399 634 1268
+2400 634 1268
+2401 634 1268
+2402 634 1268
+2404 634 13687
+2405 634 53825
+2406 634 42591
+2407 634 26564
+2408 634 35360
+2419 634 57418
+2476 634 4078
+2477 634 4078
+2478 634 4078
+2479 634 4078
+2480 634 4078
+2481 634 4078
+2482 634 44695
+2483 634 42712
+2484 634 60758
+2485 634 28074
+2486 634 52423
+2497 634 50200
+2509 634 23170
+3145 634 27852657
+562 635 1
+618 635 61427
+628 635 4094
+637 635 9811
+638 635 12739
+639 635 8645
+802 635 61427
+812 635 4094
+821 635 19622
+822 635 25478
+823 635 25935
+886 635 9811
+887 635 12739
+888 635 25935
+899 635 8645
+1572 635 34032
+1581 635 31489
+1617 635 52950
+1626 635 31371
+1634 635 58501
+1635 635 49097
+1636 635 49215
+1672 635 38154
+1681 635 18561
+1691 635 14020
+1697 635 3856
+1698 635 56325
+1699 635 63345
+1700 635 16430
+1701 635 21803
+1702 635 56998
+1951 635 44891
+1960 635 17777
+1970 635 23625
+1981 635 12817
+2044 635 5529
+2045 635 14366
+2046 635 5679
+2047 635 38037
+2058 635 16697
+2311 635 46659
+2312 635 61041
+2313 635 51028
+2314 635 51028
+2316 635 1059
+2317 635 1059
+2318 635 1059
+2319 635 46213
+2320 635 8888
+2321 635 5749
+2322 635 49272
+2323 635 49272
+2324 635 49272
+2326 635 63977
+2327 635 63977
+2328 635 59388
+2329 635 32659
+2330 635 51294
+2331 635 32585
+2332 635 20765
+2333 635 20765
+2334 635 20765
+2335 635 20765
+2337 635 10660
+2338 635 3486
+2339 635 6552
+2340 635 14306
+2341 635 30355
+2342 635 58181
+2398 635 7277
+2399 635 7277
+2400 635 7277
+2401 635 7277
+2402 635 7277
+2404 635 46709
+2405 635 51106
+2406 635 21313
+2407 635 53579
+2408 635 49067
+2419 635 46839
+2476 635 34151
+2477 635 34151
+2478 635 34151
+2479 635 34151
+2480 635 34151
+2481 635 34151
+2482 635 15401
+2483 635 64057
+2484 635 5855
+2485 635 57871
+2486 635 56643
+2497 635 38339
+2509 635 42734
+3146 635 27852657
+562 636 1
+569 636 65520
+579 636 1
+627 636 57331
+628 636 21841
+638 636 21840
+740 636 1
+748 636 65520
+758 636 1
+811 636 49141
+812 636 43682
+822 636 65520
+876 636 57331
+877 636 21841
+887 636 65520
+898 636 21840
+1360 636 41473
+1369 636 24048
+1405 636 46503
+1414 636 57025
+1422 636 10345
+1423 636 15111
+1424 636 47655
+1617 636 61299
+1626 636 46710
+1636 636 6872
+1687 636 26569
+1688 636 40544
+1689 636 30199
+1690 636 45297
+1691 636 29493
+1701 636 4755
+1896 636 65045
+1905 636 39698
+1915 636 47039
+1980 636 43793
+2034 636 26752
+2035 636 33662
+2036 636 65088
+2046 636 49575
+2057 636 10537
+2256 636 7339
+2257 636 52321
+2258 636 26338
+2259 636 26338
+2261 636 30533
+2262 636 30533
+2263 636 30533
+2264 636 55192
+2265 636 53590
+2266 636 34846
+2267 636 5668
+2268 636 5668
+2269 636 5668
+2271 636 44667
+2272 636 44667
+2273 636 12487
+2274 636 60508
+2275 636 60157
+2276 636 14169
+2322 636 6894
+2323 636 6894
+2324 636 6894
+2325 636 6894
+2327 636 7051
+2328 636 6474
+2329 636 1812
+2330 636 26667
+2331 636 10963
+2341 636 4578
+2388 636 31704
+2389 636 31704
+2390 636 31704
+2391 636 31704
+2392 636 31704
+2394 636 5274
+2395 636 30374
+2396 636 26540
+2397 636 36237
+2407 636 46462
+2418 636 27569
+2466 636 19987
+2467 636 19987
+2468 636 19987
+2469 636 19987
+2470 636 19987
+2471 636 19987
+2472 636 47431
+2473 636 43298
+2474 636 19436
+2475 636 55584
+2485 636 63587
+2496 636 17931
+2508 636 19391
+3147 636 27852657
+563 637 1
+571 637 1
+611 637 1
+620 637 2
+630 637 1
+804 637 1
+814 637 1
+2014 637 48311
+2022 637 27951
+2028 637 34241
+2029 637 2472
+2031 637 33758
+2034 637 29335
+2035 637 29335
+2036 637 29335
+2037 637 49651
+2038 637 35980
+2039 637 64305
+2040 637 37095
+2043 637 60183
+2044 637 11679
+2045 637 11679
+2046 637 41014
+2047 637 11679
+2048 637 20979
+2049 637 15497
+2050 637 6967
+2051 637 45278
+2052 637 18592
+2054 637 60183
+2055 637 11679
+2056 637 11679
+2057 637 41014
+2058 637 23358
+2059 637 11679
+2366 637 17752
+2367 637 17752
+2368 637 2361
+2369 637 37103
+2373 637 58516
+2374 637 58516
+2375 637 43125
+2376 637 45332
+2377 637 36795
+2378 637 36795
+2379 637 38186
+2380 637 33831
+2382 637 28410
+2383 637 25501
+2384 637 52995
+2385 637 28394
+2386 637 5226
+2387 637 33952
+2388 637 57233
+2389 637 27160
+2390 637 59746
+2392 637 3503
+2393 637 6185
+2394 637 14385
+2395 637 63591
+2396 637 23714
+2397 637 55283
+2398 637 23333
+2399 637 50335
+2400 637 48853
+2401 637 16635
+2403 637 45403
+2404 637 20750
+2405 637 26729
+2406 637 31477
+2407 637 11176
+2408 637 21414
+2409 637 45091
+2410 637 29538
+2411 637 50196
+2412 637 22360
+2413 637 54331
+2415 637 19273
+2416 637 22030
+2417 637 36210
+2418 637 22252
+2419 637 40579
+2420 637 43733
+2487 637 10719
+2488 637 37244
+2489 637 61557
+2490 637 61557
+2491 637 32089
+2492 637 3355
+2493 637 47998
+2494 637 2824
+2495 637 17068
+2496 637 7789
+2497 637 28201
+2498 637 12686
+2510 637 63574
+3148 637 27852657
+564 638 1
+2407 638 65520
+3149 638 27852657
+565 639 1
+743 639 1
+744 639 1
+753 639 1
+1900 639 49140
+1901 639 49140
+1910 639 49138
+2261 639 43680
+2262 639 43680
+2263 639 43680
+2271 639 65520
+2272 639 65520
+2327 639 65520
+2396 639 8191
+2397 639 8191
+2407 639 8191
+2418 639 8191
+2474 639 24570
+2475 639 60060
+2485 639 60060
+2496 639 24228
+2508 639 61425
+3150 639 27852657
+566 640 1
+574 640 1
+1622 640 49142
+1623 640 49142
+1631 640 49142
+1632 640 49142
+1678 640 2
+1687 640 49142
+2330 640 8191
+2331 640 8191
+2340 640 1
+2341 640 8191
+2406 640 1
+2407 640 8191
+2484 640 49142
+2485 640 13310
+3151 640 27852657
+567 641 1
+568 641 1
+569 641 1
+576 641 1
+577 641 1
+578 641 2
+579 641 1
+616 641 57719
+617 641 57719
+618 641 57719
+625 641 57720
+626 641 57720
+627 641 49919
+628 641 57721
+635 641 57719
+636 641 57719
+637 641 49917
+638 641 49918
+639 641 57719
+740 641 62793
+746 641 1
+747 641 60066
+748 641 62794
+755 641 1
+756 641 43174
+757 641 43175
+758 641 45902
+793 641 62793
+801 641 60065
+802 641 62793
+810 641 32643
+811 641 32645
+812 641 18481
+820 641 54991
+821 641 47189
+822 641 22496
+823 641 49917
+858 641 62793
+865 641 7802
+866 641 2346
+867 641 5074
+874 641 7801
+876 641 7803
+877 641 51358
+885 641 4017
+886 641 11819
+887 641 53028
+888 641 1671
+895 641 57719
+896 641 6745
+897 641 14547
+898 641 14929
+899 641 18946
+900 641 9473
+1815 641 26011
+1816 641 26011
+1851 641 26011
+1858 641 39510
+1859 641 39510
+1860 641 39510
+1895 641 50843
+1896 641 50320
+1903 641 54518
+1904 641 44864
+1905 641 60065
+1912 641 15008
+1913 641 57792
+1914 641 54187
+1915 641 33632
+1951 641 64998
+1959 641 58155
+1960 641 58678
+1968 641 2602
+1969 641 17376
+1970 641 44139
+1977 641 16024
+1978 641 41363
+1979 641 63958
+1980 641 22630
+1981 641 12123
+2017 641 60565
+2024 641 37222
+2026 641 4956
+2031 641 33690
+2033 641 22700
+2034 641 55978
+2035 641 37543
+2036 641 36017
+2037 641 58831
+2038 641 58831
+2039 641 58831
+2040 641 58831
+2043 641 43259
+2044 641 15990
+2045 641 13752
+2046 641 9113
+2047 641 39802
+2048 641 58831
+2049 641 58831
+2050 641 58831
+2051 641 58831
+2052 641 58831
+2054 641 47735
+2055 641 27687
+2056 641 2854
+2057 641 33652
+2058 641 48491
+2059 641 20812
+2373 641 45090
+2374 641 45090
+2375 641 45090
+2376 641 45090
+2377 641 47077
+2378 641 43958
+2379 641 29967
+2380 641 29967
+2382 641 10873
+2383 641 10873
+2384 641 10873
+2385 641 26355
+2386 641 12373
+2387 641 33936
+2388 641 23006
+2389 641 23006
+2390 641 23006
+2392 641 1782
+2393 641 1782
+2394 641 20576
+2395 641 57765
+2396 641 50380
+2397 641 26339
+2398 641 45166
+2399 641 45166
+2400 641 45166
+2401 641 45166
+2403 641 43885
+2404 641 1044
+2405 641 16633
+2406 641 16697
+2407 641 43362
+2408 641 43858
+2409 641 61227
+2410 641 61227
+2411 641 61227
+2412 641 61227
+2413 641 61227
+2415 641 21501
+2416 641 29649
+2417 641 13390
+2418 641 1687
+2419 641 65223
+2420 641 59977
+2487 641 13680
+2488 641 13680
+2489 641 13680
+2490 641 13680
+2491 641 13680
+2492 641 13680
+2493 641 17785
+2494 641 35343
+2495 641 64109
+2496 641 36794
+2497 641 51092
+2498 641 33931
+2510 641 41123
+3152 641 27852657
+568 642 1
+569 642 1
+577 642 60713
+578 642 21040
+579 642 21039
+628 642 63116
+634 642 63788
+635 642 7439
+636 642 12247
+637 642 25418
+638 642 5015
+639 642 28459
+812 642 19234
+823 642 59752
+885 642 51039
+886 642 65471
+887 642 19774
+888 642 28194
+899 642 62422
+1950 642 28201
+1951 642 28201
+1952 642 7167
+1953 642 7167
+1955 642 30653
+1956 642 30653
+1957 642 30653
+1958 642 14117
+1959 642 38146
+1960 642 9945
+1961 642 52575
+1962 642 52575
+1963 642 52575
+1965 642 35116
+1966 642 35116
+1967 642 368
+1968 642 51764
+1969 642 34875
+1970 642 26132
+1971 642 15419
+1972 642 15419
+1973 642 15419
+1974 642 15419
+1976 642 29000
+1977 642 65087
+1978 642 13491
+1979 642 54846
+1980 642 54247
+1981 642 64762
+2037 642 13314
+2038 642 13314
+2039 642 13314
+2040 642 13314
+2041 642 13314
+2043 642 21285
+2044 642 63636
+2045 642 58367
+2046 642 14573
+2047 642 14689
+2058 642 34570
+2398 642 60907
+2399 642 60907
+2400 642 60907
+2401 642 60907
+2402 642 60907
+2403 642 60907
+2404 642 55240
+2405 642 57879
+2406 642 60898
+2407 642 8104
+2408 642 22686
+2419 642 41094
+2497 642 56139
+3153 642 27852657
+569 643 1
+579 643 65520
+618 643 61427
+628 643 39584
+637 643 58440
+638 643 45500
+639 643 5915
+802 643 61427
+812 643 39584
+821 643 51359
+822 643 25479
+823 643 17745
+886 643 58440
+887 643 45500
+888 643 17745
+899 643 5915
+1626 643 38845
+1634 643 21000
+1635 643 29780
+1636 643 56456
+1681 643 42821
+1691 643 42483
+1697 643 41650
+1698 643 57537
+1699 643 36537
+1700 643 11629
+1701 643 35592
+1702 643 49565
+1960 643 63246
+1970 643 22808
+1981 643 50557
+2044 643 43238
+2045 643 43209
+2046 643 25463
+2047 643 17594
+2058 643 16602
+2311 643 21965
+2312 643 21965
+2313 643 1981
+2314 643 1981
+2316 643 63314
+2317 643 63314
+2318 643 63314
+2319 643 56197
+2320 643 63411
+2321 643 30209
+2322 643 2108
+2323 643 2108
+2324 643 2108
+2326 643 33508
+2327 643 33508
+2328 643 59070
+2329 643 41384
+2330 643 17462
+2331 643 15566
+2332 643 27117
+2333 643 27117
+2334 643 27117
+2335 643 27117
+2337 643 9526
+2338 643 8738
+2339 643 26157
+2340 643 9649
+2341 643 38245
+2342 643 62484
+2398 643 28391
+2399 643 28391
+2400 643 28391
+2401 643 28391
+2402 643 28391
+2404 643 8051
+2405 643 63432
+2406 643 4024
+2407 643 30864
+2408 643 53860
+2419 643 16280
+2476 643 25328
+2477 643 25328
+2478 643 25328
+2479 643 25328
+2480 643 25328
+2481 643 25328
+2482 643 25033
+2483 643 51889
+2484 643 53618
+2485 643 63393
+2486 643 39043
+2497 643 11375
+2509 643 39789
+3154 643 27852657
+570 644 1
+571 644 1
+577 644 25927
+578 644 57482
+579 644 57482
+628 644 29438
+631 644 1
+634 644 3114
+635 644 32276
+636 644 6349
+637 644 29610
+638 644 4171
+639 644 32215
+812 644 40607
+823 644 27567
+885 644 65303
+886 644 14582
+887 644 26763
+888 644 56553
+899 644 61201
+1941 644 454
+1947 644 36229
+1948 644 54927
+1949 644 1144
+1950 644 7535
+1951 644 7535
+1952 644 50241
+1953 644 6922
+1955 644 6948
+1956 644 17591
+1957 644 30422
+1958 644 41133
+1959 644 56915
+1960 644 49380
+1961 644 21100
+1962 644 37567
+1963 644 23766
+1965 644 679
+1966 644 18093
+1967 644 3321
+1968 644 38189
+1969 644 37780
+1970 644 36922
+1971 644 21459
+1972 644 35013
+1973 644 4625
+1974 644 56392
+1976 644 2172
+1977 644 29917
+1978 644 26508
+1979 644 15056
+1980 644 29597
+1981 644 25826
+2037 644 53600
+2038 644 43400
+2039 644 49493
+2040 644 30510
+2041 644 52286
+2043 644 28251
+2044 644 35502
+2045 644 24166
+2046 644 8119
+2047 644 29945
+2058 644 44026
+2398 644 56948
+2399 644 43408
+2400 644 48175
+2401 644 16217
+2402 644 4879
+2403 644 19167
+2404 644 14942
+2405 644 27367
+2406 644 753
+2407 644 42253
+2408 644 48931
+2419 644 12705
+2497 644 51890
+3155 644 27852657
+571 645 1
+1628 645 47570
+1634 645 41529
+1635 645 38730
+1636 645 38730
+1691 645 25299
+1693 645 17951
+1694 645 63403
+1697 645 58776
+1698 645 35507
+1699 645 59499
+1700 645 54418
+1701 645 63332
+1702 645 11242
+1970 645 39609
+1981 645 39129
+2044 645 26137
+2045 645 26347
+2046 645 60770
+2047 645 62897
+2058 645 35010
+2302 645 33143
+2308 645 57590
+2309 645 24419
+2310 645 46138
+2311 645 20690
+2312 645 20690
+2313 645 25944
+2314 645 42648
+2316 645 47077
+2317 645 986
+2318 645 25278
+2319 645 53075
+2320 645 17507
+2321 645 62338
+2322 645 61139
+2323 645 52890
+2324 645 5202
+2326 645 22236
+2327 645 52209
+2328 645 43784
+2329 645 36829
+2330 645 31635
+2331 645 28994
+2332 645 11646
+2333 645 15632
+2334 645 59744
+2335 645 33871
+2337 645 36857
+2338 645 41248
+2339 645 62524
+2340 645 51967
+2341 645 31300
+2342 645 35346
+2398 645 34675
+2399 645 11150
+2400 645 48268
+2401 645 24368
+2402 645 23953
+2404 645 1994
+2405 645 2541
+2406 645 30660
+2407 645 6360
+2408 645 45832
+2419 645 50798
+2476 645 48583
+2477 645 57253
+2478 645 44430
+2479 645 48281
+2480 645 3659
+2481 645 17863
+2482 645 9587
+2483 645 2202
+2484 645 20489
+2485 645 29689
+2486 645 1506
+2497 645 39189
+2509 645 65251
+3156 645 27852657
+572 646 1
+631 646 65520
+632 646 65520
+815 646 47654
+891 646 17866
+892 646 65520
+893 646 65520
+1973 646 14891
+1976 646 35737
+2013 646 48752
+2014 646 49655
+2022 646 8215
+2029 646 20430
+2031 646 2221
+2034 646 48818
+2035 646 48818
+2036 646 48818
+2037 646 24050
+2038 646 24050
+2039 646 58733
+2040 646 36810
+2043 646 50923
+2044 646 42709
+2045 646 42709
+2046 646 26006
+2047 646 42709
+2048 646 64834
+2049 646 64834
+2050 646 30322
+2051 646 32204
+2052 646 6543
+2054 646 50923
+2055 646 42709
+2056 646 42709
+2057 646 26006
+2058 646 19897
+2059 646 42709
+2366 646 47769
+2367 646 56163
+2368 646 62746
+2369 646 56719
+2373 646 42447
+2374 646 4852
+2375 646 11435
+2376 646 16874
+2377 646 5242
+2378 646 5242
+2379 646 33792
+2380 646 33792
+2382 646 30875
+2383 646 45925
+2384 646 58819
+2385 646 55706
+2386 646 58916
+2387 646 53674
+2388 646 36224
+2389 646 36224
+2390 646 51294
+2392 646 53904
+2393 646 38604
+2394 646 18213
+2395 646 26662
+2396 646 59334
+2397 646 5660
+2398 646 29961
+2399 646 29961
+2400 646 32310
+2401 646 11234
+2403 646 50602
+2404 646 23274
+2405 646 31210
+2406 646 39368
+2407 646 64020
+2408 646 33789
+2409 646 3486
+2410 646 3486
+2411 646 28378
+2412 646 30571
+2413 646 37471
+2415 646 33822
+2416 646 60801
+2417 646 62574
+2418 646 44589
+2419 646 29155
+2420 646 54126
+2487 646 58050
+2488 646 58050
+2489 646 56188
+2490 646 20892
+2491 646 9669
+2492 646 25396
+2493 646 65417
+2494 646 47252
+2495 646 63445
+2496 646 43472
+2497 646 289
+2498 646 40976
+2510 646 46188
+3157 646 27852657
+573 647 1
+2407 647 65520
+3158 647 27852657
+574 648 1
+1631 648 54601
+1632 648 54601
+1679 648 50274
+1680 648 50274
+1681 648 50274
+1687 648 54601
+1688 648 50274
+1689 648 50274
+1690 648 35027
+1691 648 50274
+1698 648 50274
+1699 648 50274
+1700 648 35027
+1701 648 35027
+1702 648 50274
+1950 648 64903
+1951 648 64903
+1958 648 49656
+1959 648 49038
+1960 648 49656
+1965 648 40797
+1967 648 49656
+1968 648 20604
+1969 648 5357
+1970 648 21222
+1977 648 45947
+1978 648 16895
+1979 648 51922
+1980 648 23488
+1981 648 2266
+2043 648 61194
+2044 648 32142
+2045 648 16895
+2046 648 53982
+2047 648 50273
+2058 648 32760
+2311 648 38864
+2312 648 38864
+2319 648 65006
+2320 648 38349
+2321 648 65006
+2326 648 39560
+2327 648 39560
+2328 648 65006
+2329 648 7056
+2330 648 47209
+2331 648 29979
+2337 648 39560
+2338 648 28535
+2339 648 36106
+2340 648 34613
+2341 648 65107
+2342 648 35128
+2404 648 7804
+2405 648 54470
+2406 648 52977
+2407 648 24416
+2408 648 56453
+2419 648 21325
+2482 648 40178
+2483 648 17848
+2484 648 37860
+2485 648 23090
+2486 648 43938
+2497 648 25807
+2509 648 24416
+3159 648 27852657
+575 649 1
+616 649 44487
+617 649 44487
+618 649 44487
+624 649 1
+625 649 44487
+626 649 44487
+627 649 23453
+628 649 44487
+635 649 44487
+636 649 44487
+637 649 23453
+638 649 23453
+639 649 44487
+740 649 4882
+747 649 9764
+748 649 4882
+756 649 50483
+757 649 50483
+758 649 45601
+793 649 4882
+801 649 9764
+802 649 4882
+810 649 54111
+811 649 54111
+812 649 24427
+820 649 3628
+821 649 48115
+822 649 22059
+823 649 43233
+858 649 4882
+865 649 21034
+866 649 30798
+867 649 25916
+874 649 21034
+876 649 21034
+877 649 35837
+885 649 63153
+886 649 18666
+887 649 22451
+888 649 52135
+895 649 44487
+896 649 38491
+897 649 59525
+898 649 23845
+899 649 21477
+900 649 33609
+1815 649 29684
+1816 649 29684
+1851 649 29684
+1858 649 35837
+1859 649 35837
+1860 649 35837
+1895 649 11045
+1896 649 46807
+1903 649 33468
+1904 649 44745
+1905 649 63459
+1912 649 63152
+1913 649 3379
+1914 649 58404
+1915 649 30782
+1951 649 35762
+1959 649 35759
+1960 649 65518
+1968 649 61047
+1969 649 788
+1970 649 28523
+1977 649 4814
+1978 649 60113
+1979 649 54869
+1980 649 52613
+1981 649 54872
+2017 649 27315
+2024 649 41298
+2026 649 38206
+2031 649 61714
+2033 649 38472
+2034 649 49971
+2035 649 25204
+2036 649 32331
+2037 649 24489
+2038 649 24489
+2039 649 24489
+2040 649 24489
+2043 649 8714
+2044 649 1337
+2045 649 40067
+2046 649 34410
+2047 649 11107
+2048 649 24489
+2049 649 24489
+2050 649 24489
+2051 649 24489
+2052 649 24489
+2054 649 1507
+2055 649 54234
+2056 649 32687
+2057 649 65067
+2058 649 6103
+2059 649 49868
+2373 649 13853
+2374 649 13853
+2375 649 13853
+2376 649 13853
+2377 649 34027
+2378 649 27936
+2379 649 13443
+2380 649 13443
+2382 649 58760
+2383 649 58760
+2384 649 58760
+2385 649 39842
+2386 649 19333
+2387 649 56918
+2388 649 45006
+2389 649 45006
+2390 649 45006
+2392 649 38354
+2393 649 38354
+2394 649 42052
+2395 649 27096
+2396 649 20383
+2397 649 56132
+2398 649 6198
+2399 649 6198
+2400 649 6198
+2401 649 6198
+2403 649 874
+2404 649 61269
+2405 649 30884
+2406 649 25065
+2407 649 19220
+2408 649 9622
+2409 649 8608
+2410 649 8608
+2411 649 8608
+2412 649 8608
+2413 649 8608
+2415 649 37246
+2416 649 34983
+2417 649 61368
+2418 649 58244
+2419 649 11659
+2420 649 18123
+2487 649 18383
+2488 649 18383
+2489 649 18383
+2490 649 18383
+2491 649 18383
+2492 649 18383
+2493 649 28752
+2494 649 25113
+2495 649 27741
+2496 649 59178
+2497 649 57955
+2498 649 56629
+2510 649 13342
+3160 649 27852657
+576 650 1
+577 650 58152
+578 650 64391
+579 650 64391
+628 650 54740
+634 650 8155
+635 650 8153
+636 650 15523
+637 650 38979
+638 650 20117
+639 650 29768
+812 650 20423
+823 650 52414
+885 650 36345
+886 650 27598
+887 650 45774
+888 650 9159
+899 650 52034
+1950 650 27596
+1951 650 27596
+1952 650 35507
+1953 650 35507
+1955 650 21677
+1956 650 21677
+1957 650 21677
+1958 650 24308
+1959 650 62056
+1960 650 34460
+1961 650 11522
+1962 650 11522
+1963 650 11522
+1965 650 42610
+1966 650 42610
+1967 650 33274
+1968 650 3633
+1969 650 5697
+1970 650 24600
+1971 650 45087
+1972 650 45087
+1973 650 45087
+1974 650 45087
+1976 650 53022
+1977 650 23519
+1978 650 35417
+1979 650 43143
+1980 650 13605
+1981 650 35154
+2037 650 63986
+2038 650 63986
+2039 650 63986
+2040 650 63986
+2041 650 63986
+2043 650 45584
+2044 650 47510
+2045 650 35134
+2046 650 3149
+2047 650 10107
+2058 650 21548
+2398 650 46063
+2399 650 46063
+2400 650 46063
+2401 650 46063
+2402 650 46063
+2403 650 46063
+2404 650 48863
+2405 650 16395
+2406 650 12958
+2407 650 5566
+2408 650 49339
+2419 650 38488
+2497 650 38622
+3161 650 27852657
+577 651 1
+628 651 17746
+637 651 52981
+638 651 60062
+639 651 42316
+812 651 17746
+821 651 40441
+822 651 54603
+823 651 61427
+886 651 52981
+887 651 60062
+888 651 61427
+899 651 42316
+1634 651 1235
+1635 651 43318
+1636 651 43318
+1691 651 59650
+1697 651 46846
+1698 651 55023
+1699 651 3063
+1700 651 6304
+1701 651 14987
+1702 651 64176
+1970 651 15096
+1981 651 49381
+2044 651 63507
+2045 651 64924
+2046 651 41254
+2047 651 53577
+2058 651 2851
+2311 651 30283
+2312 651 30283
+2313 651 43249
+2314 651 43249
+2316 651 43433
+2317 651 43433
+2318 651 43433
+2319 651 55442
+2320 651 7348
+2321 651 42586
+2322 651 6332
+2323 651 6332
+2324 651 6332
+2326 651 56388
+2327 651 56388
+2328 651 56966
+2329 651 23985
+2330 651 27466
+2331 651 51071
+2332 651 38312
+2333 651 38312
+2334 651 38312
+2335 651 38312
+2337 651 28298
+2338 651 44497
+2339 651 38574
+2340 651 57930
+2341 651 63389
+2342 651 870
+2398 651 62653
+2399 651 62653
+2400 651 62653
+2401 651 62653
+2402 651 62653
+2404 651 31516
+2405 651 5511
+2406 651 62090
+2407 651 51440
+2408 651 34037
+2419 651 28032
+2476 651 13543
+2477 651 13543
+2478 651 13543
+2479 651 13543
+2480 651 13543
+2481 651 13543
+2482 651 27630
+2483 651 579
+2484 651 3616
+2485 651 37497
+2486 651 64138
+2497 651 12491
+2509 651 64099
+3162 651 27852657
+578 652 1
+579 652 1
+628 652 47776
+637 652 12540
+638 652 5459
+639 652 23205
+812 652 47776
+821 652 25080
+822 652 10918
+823 652 4094
+886 652 12540
+887 652 5459
+888 652 4094
+899 652 23205
+1634 652 18002
+1635 652 36331
+1636 652 36331
+1691 652 15487
+1697 652 3698
+1698 652 25286
+1699 652 7284
+1700 652 30591
+1701 652 39166
+1702 652 60010
+1970 652 18517
+1981 652 17222
+2044 652 61315
+2045 652 52562
+2046 652 14573
+2047 652 53605
+2058 652 30872
+2311 652 2827
+2312 652 2827
+2313 652 36158
+2314 652 36158
+2316 652 59159
+2317 652 59159
+2318 652 59159
+2319 652 10683
+2320 652 55413
+2321 652 52586
+2322 652 4806
+2323 652 4806
+2324 652 4806
+2326 652 8681
+2327 652 8681
+2328 652 23699
+2329 652 58260
+2330 652 7136
+2331 652 20733
+2332 652 41496
+2333 652 41496
+2334 652 41496
+2335 652 41496
+2337 652 2673
+2338 652 24857
+2339 652 53184
+2340 652 34562
+2341 652 62416
+2342 652 22353
+2398 652 33957
+2399 652 33957
+2400 652 33957
+2401 652 33957
+2402 652 33957
+2404 652 46385
+2405 652 53405
+2406 652 19851
+2407 652 54141
+2408 652 62164
+2419 652 28809
+2476 652 15722
+2477 652 15722
+2478 652 15722
+2479 652 15722
+2480 652 15722
+2481 652 15722
+2482 652 32392
+2483 652 50433
+2484 652 18474
+2485 652 63072
+2486 652 29241
+2497 652 53511
+2509 652 8353
+3163 652 27852657
+579 653 1
+628 653 1
+757 653 22394
+758 653 30560
+812 653 38767
+877 653 38766
+1404 653 51103
+1405 653 51103
+1406 653 28487
+1407 653 28487
+1409 653 23802
+1410 653 23802
+1411 653 23802
+1412 653 54464
+1413 653 13107
+1414 653 27525
+1415 653 10270
+1416 653 10270
+1417 653 10270
+1419 653 58306
+1420 653 58306
+1421 653 42963
+1422 653 5339
+1423 653 7814
+1424 653 45810
+1627 653 64788
+1628 653 64788
+1629 653 64788
+1630 653 64788
+1632 653 25159
+1633 653 48831
+1634 653 63733
+1635 653 16421
+1636 653 23915
+1691 653 43626
+1906 653 50232
+1907 653 50232
+1908 653 50232
+1909 653 50232
+1910 653 50232
+1912 653 14825
+1913 653 19291
+1914 653 28248
+1915 653 20311
+1970 653 56729
+2036 653 29215
+2267 653 22690
+2268 653 22690
+2269 653 22690
+2270 653 22690
+2271 653 22690
+2272 653 22690
+2273 653 43196
+2274 653 59453
+2275 653 42016
+2276 653 61007
+2331 653 27332
+2397 653 13774
+2475 653 6843
+3164 653 27852657
+580 654 1
+761 654 1
+1657 654 40231
+1928 654 32085
+1929 654 26924
+1930 654 26924
+1948 654 773
+1956 654 15812
+1963 654 7406
+1965 654 24075
+1968 654 15973
+1969 654 15973
+1970 654 15973
+1971 654 463
+1972 654 31543
+1973 654 39555
+1974 654 12064
+1977 654 18444
+1978 654 49208
+1979 654 49208
+1980 654 65181
+1981 654 49208
+2037 654 463
+2038 654 31543
+2039 654 39555
+2040 654 12064
+2041 654 58956
+2043 654 18444
+2044 654 49208
+2045 654 49208
+2046 654 65181
+2047 654 32895
+2058 654 49208
+2278 654 9897
+2279 654 9897
+2280 654 1889
+2281 654 63421
+2282 654 53524
+2283 654 9199
+2284 654 11160
+2285 654 63739
+2286 654 10215
+2287 654 9199
+2288 654 11160
+2289 654 57110
+2290 654 60236
+2291 654 50021
+2292 654 9199
+2293 654 11160
+2294 654 13089
+2295 654 40669
+2296 654 55564
+2297 654 5543
+2300 654 31934
+2301 654 42300
+2302 654 27773
+2303 654 43566
+2307 654 36758
+2308 654 47124
+2309 654 32597
+2310 654 3931
+2311 654 30846
+2312 654 30846
+2313 654 18540
+2314 654 34624
+2316 654 46275
+2317 654 40157
+2318 654 14865
+2319 654 52874
+2320 654 26982
+2321 654 61657
+2322 654 37349
+2323 654 53433
+2324 654 5855
+2326 654 21708
+2327 654 35519
+2328 654 46118
+2329 654 28712
+2330 654 49684
+2331 654 53548
+2332 654 51959
+2333 654 42064
+2334 654 46495
+2335 654 14034
+2337 654 3091
+2338 654 25740
+2339 654 15830
+2340 654 54341
+2341 654 3097
+2342 654 15070
+2398 654 8834
+2399 654 14992
+2400 654 56535
+2401 654 23014
+2402 654 41633
+2404 654 43329
+2405 654 49700
+2406 654 11134
+2407 654 63385
+2408 654 62143
+2419 654 47073
+2476 654 27050
+2477 654 34353
+2478 654 9768
+2479 654 26732
+2480 654 49926
+2481 654 32468
+2482 654 34404
+2483 654 49494
+2484 654 39281
+2485 654 19282
+2486 654 59883
+2497 654 59216
+2509 654 48607
+3165 654 27852657
+581 655 1
+582 655 1
+762 655 1
+763 655 1
+1646 655 6
+1657 655 39823
+1925 655 24572
+1928 655 45130
+1929 655 62213
+1930 655 37641
+1948 655 37155
+1956 655 58953
+1963 655 49026
+1965 655 2121
+1968 655 57736
+1969 655 57736
+1970 655 57736
+1971 655 16749
+1972 655 24508
+1973 655 15860
+1974 655 23684
+1977 655 41368
+1978 655 20095
+1979 655 20095
+1980 655 12310
+1981 655 20095
+2037 655 16749
+2038 655 24508
+2039 655 15860
+2040 655 23684
+2041 655 24875
+2043 655 41368
+2044 655 20095
+2045 655 20095
+2046 655 12310
+2047 655 40190
+2058 655 20095
+2278 655 22917
+2279 655 22917
+2280 655 26266
+2281 655 58596
+2282 655 35679
+2283 655 47012
+2284 655 17521
+2285 655 14767
+2286 655 44609
+2287 655 47012
+2288 655 17521
+2289 655 50846
+2290 655 47764
+2291 655 3155
+2292 655 47012
+2293 655 17521
+2294 655 30130
+2295 655 57987
+2296 655 29394
+2297 655 26239
+2300 655 39213
+2301 655 18059
+2302 655 48227
+2303 655 22473
+2307 655 7191
+2308 655 51558
+2309 655 16205
+2310 655 30914
+2311 655 10668
+2312 655 10668
+2313 655 65246
+2314 655 58680
+2316 655 42913
+2317 655 34217
+2318 655 51594
+2319 655 6879
+2320 655 47990
+2321 655 37322
+2322 655 6851
+2323 655 285
+2324 655 46164
+2326 655 32064
+2327 655 57913
+2328 655 3867
+2329 655 51386
+2330 655 39756
+2331 655 2434
+2332 655 9965
+2333 655 4169
+2334 655 19821
+2335 655 17608
+2337 655 25031
+2338 655 55512
+2339 655 46028
+2340 655 58203
+2341 655 60860
+2342 655 58426
+2398 655 158
+2399 655 35137
+2400 655 35842
+2401 655 13887
+2402 655 65399
+2404 655 5569
+2405 655 19883
+2406 655 46049
+2407 655 62778
+2408 655 6509
+2419 655 13604
+2476 655 27819
+2477 655 3728
+2478 655 65484
+2479 655 25732
+2480 655 273
+2481 655 41274
+2482 655 38771
+2483 655 18512
+2484 655 10097
+2485 655 15407
+2486 655 19403
+2497 655 61124
+2509 655 63766
+3166 655 27852657
+582 656 1
+763 656 1
+1480 656 6559
+1484 656 58962
+1489 656 6559
+1522 656 18052
+1557 656 54685
+1587 656 10921
+1602 656 23956
+1642 656 60129
+1646 656 5398
+1921 656 16657
+1925 656 7915
+1930 656 57606
+2282 656 41341
+2285 656 50881
+2286 656 9540
+2289 656 6620
+2290 656 24596
+2291 656 15056
+2296 656 51355
+2297 656 12411
+2302 656 50313
+2308 656 16858
+2309 656 3368
+2310 656 47260
+2311 656 55170
+2312 656 55170
+2313 656 8293
+2314 656 43753
+2316 656 19909
+2317 656 63189
+2318 656 3752
+2319 656 42587
+2320 656 32088
+2321 656 42439
+2322 656 18242
+2323 656 34296
+2324 656 2033
+2326 656 54162
+2327 656 1635
+2328 656 18296
+2329 656 56724
+2330 656 25417
+2331 656 48499
+2332 656 55392
+2333 656 46714
+2334 656 40946
+2335 656 20976
+2337 656 8664
+2338 656 2476
+2339 656 8032
+2340 656 15425
+2341 656 35972
+2342 656 52994
+2398 656 18456
+2399 656 21129
+2400 656 44867
+2401 656 1007
+2402 656 9425
+2404 656 5730
+2405 656 38704
+2406 656 26736
+2407 656 46722
+2408 656 62423
+2419 656 9429
+2476 656 20557
+2477 656 13699
+2478 656 15930
+2479 656 62587
+2480 656 39316
+2481 656 62312
+2482 656 21291
+2483 656 19243
+2484 656 34019
+2485 656 7314
+2486 656 24456
+2497 656 35470
+2509 656 36344
+3167 656 27852657
+583 657 1
+829 657 65520
+834 657 1
+1936 657 335
+1994 657 45442
+1995 657 54188
+1996 657 54188
+2013 657 64940
+2014 657 27936
+2022 657 11352
+2029 657 39363
+2031 657 33493
+2034 657 17138
+2035 657 17138
+2036 657 17138
+2037 657 41096
+2038 657 45323
+2039 657 28963
+2040 657 65396
+2043 657 9940
+2044 657 53083
+2045 657 53083
+2046 657 4700
+2047 657 53083
+2048 657 41096
+2049 657 45323
+2050 657 28963
+2051 657 65396
+2052 657 30165
+2054 657 9940
+2055 657 53083
+2056 657 53083
+2057 657 4700
+2058 657 40645
+2059 657 53083
+2344 657 49981
+2345 657 49981
+2346 657 62112
+2347 657 51525
+2348 657 1544
+2349 657 10813
+2350 657 54858
+2351 657 34487
+2352 657 32943
+2353 657 12633
+2354 657 56678
+2355 657 17656
+2356 657 43460
+2357 657 10517
+2358 657 12633
+2359 657 56678
+2360 657 64476
+2361 657 25656
+2362 657 54486
+2363 657 43969
+2366 657 18405
+2367 657 37226
+2368 657 54306
+2369 657 8843
+2373 657 12817
+2374 657 4241
+2375 657 21321
+2376 657 28641
+2377 657 18641
+2378 657 18641
+2379 657 46819
+2380 657 16019
+2382 657 14377
+2383 657 46196
+2384 657 47394
+2385 657 4099
+2386 657 24090
+2387 657 5449
+2388 657 35797
+2389 657 4997
+2390 657 26074
+2392 657 7690
+2393 657 47307
+2394 657 60323
+2395 657 57644
+2396 657 31208
+2397 657 25759
+2398 657 22643
+2399 657 9457
+2400 657 1479
+2401 657 20212
+2403 657 511
+2404 657 54442
+2405 657 16910
+2406 657 26563
+2407 657 33693
+2408 657 7934
+2409 657 1932
+2410 657 22227
+2411 657 61420
+2412 657 39790
+2413 657 28187
+2415 657 49365
+2416 657 61572
+2417 657 19588
+2418 657 26801
+2419 657 21306
+2420 657 13372
+2487 657 38666
+2488 657 56717
+2489 657 39225
+2490 657 43948
+2491 657 54721
+2492 657 31183
+2493 657 37743
+2494 657 25938
+2495 657 5119
+2496 657 11343
+2497 657 31392
+2498 657 25666
+2510 657 8783
+3168 657 27852657
+584 658 1
+830 658 65520
+834 658 65520
+1994 658 18552
+1995 658 56398
+1996 658 56398
+2029 658 4812
+2031 658 52624
+2034 658 50882
+2035 658 50882
+2036 658 50882
+2037 658 20091
+2038 658 20091
+2039 658 24903
+2040 658 709
+2043 658 46973
+2044 658 17127
+2045 658 17127
+2046 658 2488
+2047 658 17127
+2048 658 20091
+2049 658 20091
+2050 658 24903
+2051 658 709
+2052 658 709
+2054 658 46973
+2055 658 17127
+2056 658 17127
+2057 658 2488
+2058 658 34254
+2059 658 17127
+2344 658 59609
+2345 658 59609
+2346 658 24583
+2347 658 22994
+2348 658 28906
+2349 658 9445
+2350 658 27049
+2351 658 60578
+2352 658 31672
+2353 658 9445
+2354 658 27049
+2355 658 56402
+2356 658 19094
+2357 658 52943
+2358 658 9445
+2359 658 27049
+2360 658 62775
+2361 658 39414
+2362 658 42461
+2363 658 55039
+2366 658 32194
+2367 658 14367
+2368 658 2083
+2369 658 31047
+2373 658 50816
+2374 658 32989
+2375 658 20705
+2376 658 37385
+2377 658 47297
+2378 658 47297
+2379 658 8572
+2380 658 39942
+2382 658 4030
+2383 658 57267
+2384 658 56120
+2385 658 61244
+2386 658 60036
+2387 658 12739
+2388 658 37300
+2389 658 3149
+2390 658 15350
+2392 658 19525
+2393 658 50572
+2394 658 2096
+2395 658 59845
+2396 658 37817
+2397 658 25078
+2398 658 8709
+2399 658 40080
+2400 658 52280
+2401 658 61895
+2403 658 30740
+2404 658 21850
+2405 658 10420
+2406 658 31035
+2407 658 17087
+2408 658 57530
+2409 658 19185
+2410 658 4312
+2411 658 20619
+2412 658 11615
+2413 658 49176
+2415 658 4716
+2416 658 12047
+2417 658 62646
+2418 658 48469
+2419 658 48823
+2420 658 56814
+2487 658 40244
+2488 658 2289
+2489 658 11266
+2490 658 40490
+2491 658 46180
+2492 658 8907
+2493 658 30207
+2494 658 13938
+2495 658 42204
+2496 658 58297
+2497 658 11844
+2498 658 67
+2510 658 3496
+3169 658 27852657
+585 659 1
+586 659 1
+831 659 65520
+832 659 65520
+837 659 1
+1994 659 37137
+1995 659 38335
+1996 659 38335
+2029 659 6729
+2031 659 40515
+2034 659 41537
+2035 659 41537
+2036 659 41537
+2037 659 60429
+2038 659 60429
+2039 659 1637
+2040 659 18488
+2043 659 4939
+2044 659 61190
+2045 659 61190
+2046 659 37206
+2047 659 61190
+2048 659 60429
+2049 659 60429
+2050 659 1637
+2051 659 18488
+2052 659 18488
+2054 659 4939
+2055 659 61190
+2056 659 61190
+2057 659 37206
+2058 659 56859
+2059 659 61190
+2344 659 1655
+2345 659 1655
+2346 659 48604
+2347 659 17720
+2348 659 16065
+2349 659 1955
+2350 659 47521
+2351 659 47420
+2352 659 31355
+2353 659 1955
+2354 659 47521
+2355 659 38478
+2356 659 16454
+2357 659 50620
+2358 659 1955
+2359 659 47521
+2360 659 32708
+2361 659 11679
+2362 659 61796
+2363 659 11176
+2366 659 19101
+2367 659 17599
+2368 659 21195
+2369 659 21805
+2373 659 52032
+2374 659 50530
+2375 659 54126
+2376 659 58332
+2377 659 30852
+2378 659 30852
+2379 659 28747
+2380 659 50120
+2382 659 6437
+2383 659 10033
+2384 659 12737
+2385 659 31847
+2386 659 1563
+2387 659 36232
+2388 659 11291
+2389 659 32664
+2390 659 39718
+2392 659 29317
+2393 659 51122
+2394 659 26077
+2395 659 50797
+2396 659 49202
+2397 659 12970
+2398 659 29795
+2399 659 51168
+2400 659 58223
+2401 659 64273
+2403 659 57717
+2404 659 55711
+2405 659 62492
+2406 659 47539
+2407 659 15928
+2408 659 2958
+2409 659 27951
+2410 659 26436
+2411 659 3550
+2412 659 3651
+2413 659 42255
+2415 659 42293
+2416 659 13243
+2417 659 39224
+2418 659 7296
+2419 659 34395
+2420 659 31437
+2487 659 10460
+2488 659 36312
+2489 659 64180
+2490 659 3562
+2491 659 62964
+2492 659 59973
+2493 659 54118
+2494 659 53056
+2495 659 43544
+2496 659 28912
+2497 659 22690
+2498 659 25816
+2510 659 31773
+3170 659 27852657
+586 660 1
+767 660 1
+772 660 65520
+1646 660 6
+1925 660 24572
+1928 660 50858
+1929 660 27336
+1930 660 2764
+1963 660 16078
+1965 660 34821
+1968 660 22241
+1969 660 22241
+1970 660 22241
+1971 660 9082
+1972 660 9082
+1973 660 25160
+1974 660 17415
+1977 660 55245
+1978 660 56132
+1979 660 56132
+1980 660 12852
+1981 660 56132
+2037 660 9082
+2038 660 9082
+2039 660 25160
+2040 660 17415
+2041 660 17415
+2043 660 55245
+2044 660 56132
+2045 660 56132
+2046 660 12852
+2047 660 46743
+2058 660 56132
+2278 660 35224
+2279 660 35224
+2280 660 54027
+2281 660 59109
+2282 660 23885
+2283 660 9770
+2284 660 34011
+2285 660 13032
+2286 660 54668
+2287 660 9770
+2288 660 34011
+2289 660 23081
+2290 660 18207
+2291 660 29060
+2292 660 9770
+2293 660 34011
+2294 660 49997
+2295 660 47749
+2296 660 31657
+2297 660 2597
+2300 660 2604
+2301 660 30709
+2302 660 53633
+2303 660 13428
+2307 660 20636
+2308 660 48741
+2309 660 6144
+2310 660 54384
+2311 660 9516
+2312 660 9516
+2313 660 5936
+2314 660 15088
+2316 660 2699
+2317 660 25623
+2318 660 36447
+2319 660 12142
+2320 660 635
+2321 660 56640
+2322 660 13600
+2323 660 22752
+2324 660 61659
+2326 660 48926
+2327 660 62354
+2328 660 39058
+2329 660 58533
+2330 660 58933
+2331 660 2293
+2332 660 53941
+2333 660 63093
+2334 660 36479
+2335 660 44378
+2337 660 14897
+2338 660 42923
+2339 660 50876
+2340 660 36962
+2341 660 25377
+2342 660 23084
+2398 660 11001
+2399 660 18526
+2400 660 22483
+2401 660 61983
+2402 660 24222
+2404 660 55120
+2405 660 15986
+2406 660 58149
+2407 660 26104
+2408 660 52582
+2419 660 29498
+2476 660 62055
+2477 660 50318
+2478 660 33136
+2479 660 20101
+2480 660 12276
+2481 660 12972
+2482 660 22783
+2483 660 53037
+2484 660 49466
+2485 660 14932
+2486 660 31897
+2497 660 4525
+2509 660 61417
+3171 660 27852657
+587 661 1
+588 661 1
+589 661 1
+590 661 1
+591 661 1
+621 661 43680
+631 661 43680
+632 661 65520
+815 661 43680
+816 661 65520
+817 661 65520
+1647 661 54601
+1648 661 54601
+1649 661 54601
+1650 661 54601
+1651 661 54601
+1652 661 54601
+1653 661 54601
+1654 661 54601
+1655 661 54601
+1656 661 43681
+1657 661 54601
+1684 661 5459
+1694 661 5459
+1695 661 5457
+1973 661 46410
+1974 661 16379
+1975 661 60060
+2332 661 47776
+2333 661 47776
+2334 661 43681
+2335 661 43681
+2336 661 55967
+2337 661 55966
+2408 661 61425
+2486 661 46068
+3172 661 27852657
+588 662 1
+589 662 19751
+590 662 47257
+591 662 47257
+621 662 65490
+623 662 39509
+626 662 13825
+627 662 13825
+628 662 13825
+629 662 33084
+630 662 33084
+631 662 33053
+632 662 2654
+635 662 56541
+636 662 13831
+637 662 13831
+638 662 27656
+639 662 13831
+813 662 33084
+814 662 33084
+815 662 33053
+816 662 2654
+817 662 2654
+819 662 56541
+820 662 13831
+821 662 13831
+822 662 27656
+823 662 27662
+888 662 13831
+1638 662 60278
+1639 662 60278
+1640 662 38602
+1641 662 61338
+1642 662 1060
+1643 662 29308
+1644 662 6941
+1645 662 9520
+1646 662 8460
+1647 662 29308
+1648 662 50089
+1649 662 62756
+1650 662 34231
+1651 662 25771
+1652 662 29308
+1653 662 50089
+1654 662 61334
+1655 662 19087
+1656 662 39868
+1657 662 14097
+1660 662 18879
+1661 662 9697
+1662 662 44854
+1663 662 31832
+1667 662 18569
+1668 662 9387
+1669 662 44544
+1670 662 1158
+1671 662 3470
+1672 662 3470
+1673 662 43036
+1674 662 57652
+1676 662 35948
+1677 662 5584
+1678 662 18537
+1679 662 55269
+1680 662 20984
+1681 662 17514
+1682 662 33079
+1683 662 47695
+1684 662 51165
+1686 662 59869
+1687 662 26180
+1688 662 53847
+1689 662 14858
+1690 662 17758
+1691 662 244
+1692 662 47087
+1693 662 61703
+1694 662 65173
+1695 662 23656
+1697 662 26102
+1698 662 65488
+1699 662 41246
+1700 662 38651
+1701 662 36561
+1702 662 36317
+1971 662 21204
+1972 662 20105
+1973 662 25870
+1974 662 52159
+1975 662 20797
+1977 662 6494
+1978 662 17617
+1979 662 12074
+1980 662 58212
+1981 662 20854
+2047 662 50058
+2332 662 19172
+2333 662 6266
+2334 662 54192
+2335 662 35122
+2336 662 29304
+2337 662 7132
+2338 662 50515
+2339 662 40533
+2340 662 63784
+2341 662 42736
+2342 662 18310
+2408 662 20117
+2486 662 23010
+3173 662 27852657
+589 663 1
+1649 663 8189
+1650 663 49138
+1651 663 49138
+1656 663 7690
+1657 663 24073
+1662 663 14218
+1668 663 58045
+1669 663 4310
+1670 663 36293
+1671 663 25854
+1672 663 25854
+1673 663 58182
+1674 663 44403
+1676 663 1208
+1677 663 31255
+1678 663 6234
+1679 663 37392
+1680 663 37310
+1681 663 11456
+1682 663 33148
+1683 663 3861
+1684 663 36718
+1686 663 62747
+1687 663 53316
+1688 663 48033
+1689 663 40552
+1690 663 8166
+1691 663 62231
+1692 663 7745
+1693 663 8157
+1694 663 51246
+1695 663 37081
+1697 663 56755
+1698 663 47870
+1699 663 60828
+1700 663 57432
+1701 663 48681
+1702 663 51971
+1971 663 45546
+1972 663 45555
+1973 663 33388
+1974 663 1603
+1975 663 63909
+1977 663 41448
+1978 663 22987
+1979 663 62761
+1980 663 63312
+1981 663 52127
+2047 663 156
+2332 663 46317
+2333 663 34381
+2334 663 60823
+2335 663 33854
+2336 663 40812
+2337 663 5112
+2338 663 56769
+2339 663 33106
+2340 663 43322
+2341 663 33866
+2342 663 43789
+2408 663 8782
+2486 663 21981
+3174 663 27852657
+590 664 1
+591 664 1
+1649 664 21965
+1650 664 24572
+1651 664 24572
+1656 664 26175
+1657 664 1603
+1662 664 38276
+1668 664 36714
+1669 664 58699
+1670 664 1900
+1671 664 5383
+1672 664 5383
+1673 664 55261
+1674 664 30378
+1676 664 33751
+1677 664 35427
+1678 664 39308
+1679 664 17966
+1680 664 40004
+1681 664 34621
+1682 664 1992
+1683 664 25357
+1684 664 1402
+1686 664 30550
+1687 664 6269
+1688 664 13803
+1689 664 17967
+1690 664 24385
+1691 664 55285
+1692 664 30647
+1693 664 29061
+1694 664 34493
+1695 664 34930
+1697 664 22554
+1698 664 25932
+1699 664 23673
+1700 664 49711
+1701 664 5814
+1702 664 16050
+1971 664 55814
+1972 664 33833
+1973 664 34074
+1974 664 63108
+1975 664 46229
+1977 664 56819
+1978 664 34408
+1979 664 64671
+1980 664 34457
+1981 664 39160
+2047 664 23110
+2332 664 38929
+2333 664 55615
+2334 664 14680
+2335 664 55365
+2336 664 21040
+2337 664 26607
+2338 664 16608
+2339 664 64045
+2340 664 26175
+2341 664 30024
+2342 664 62797
+2408 664 51723
+2486 664 44680
+3175 664 27852657
+591 665 1
+2402 665 65520
+3176 665 27852657
+592 666 1
+594 666 59727
+770 666 41525
+771 666 20236
+772 666 20236
+790 666 65478
+798 666 12089
+805 666 3500
+807 666 14455
+810 666 14913
+811 666 14913
+812 666 14913
+813 666 34422
+814 666 26675
+815 666 35055
+816 666 43515
+819 666 34339
+820 666 54465
+821 666 54465
+822 666 3857
+823 666 54465
+878 666 34422
+879 666 26675
+880 666 35055
+881 666 43515
+882 666 47857
+884 666 34339
+885 666 54465
+886 666 54465
+887 666 3857
+888 666 43409
+899 666 54465
+1917 666 49055
+1918 666 49055
+1919 666 51736
+1920 666 40230
+1921 666 56696
+1922 666 2422
+1923 666 16197
+1924 666 25982
+1925 666 34807
+1926 666 2422
+1927 666 16197
+1928 666 47740
+1929 666 5273
+1930 666 35987
+1931 666 2422
+1932 666 16197
+1933 666 56868
+1934 666 18164
+1935 666 38170
+1936 666 2183
+1939 666 18702
+1940 666 33501
+1941 666 26427
+1942 666 36407
+1946 666 27669
+1947 666 42468
+1948 666 35394
+1949 666 50306
+1950 666 14792
+1951 666 14792
+1952 666 27789
+1953 666 27323
+1955 666 1583
+1956 666 6586
+1957 666 44145
+1958 666 19029
+1959 666 58328
+1960 666 43536
+1961 666 29538
+1962 666 29072
+1963 666 55826
+1965 666 58161
+1966 666 25786
+1967 666 31085
+1968 666 4195
+1969 666 54432
+1970 666 10896
+1971 666 27619
+1972 666 27591
+1973 666 50163
+1974 666 21545
+1976 666 33584
+1977 666 40556
+1978 666 26997
+1979 666 5454
+1980 666 34707
+1981 666 23811
+2037 666 50681
+2038 666 37687
+2039 666 4934
+2040 666 19669
+2041 666 2924
+2043 666 29555
+2044 666 17817
+2045 666 24064
+2046 666 20117
+2047 666 58660
+2058 666 34849
+2398 666 41416
+2399 666 51253
+2400 666 1552
+2401 666 56985
+2402 666 19047
+2403 666 49616
+2404 666 21820
+2405 666 31761
+2406 666 24529
+2407 666 58769
+2408 666 26080
+2419 666 56104
+2497 666 18383
+3177 666 27852657
+593 667 1
+768 667 1
+769 667 1
+770 667 1
+771 667 1
+772 667 1
+1926 667 54601
+1927 667 54601
+1928 667 54601
+1929 667 54601
+1930 667 54601
+1931 667 54601
+1932 667 54601
+1933 667 54601
+1934 667 54601
+1935 667 43681
+1936 667 54601
+1974 667 54601
+2040 667 54601
+2041 667 32761
+2398 667 47776
+2399 667 47776
+2400 667 47776
+2401 667 30031
+2402 667 42317
+2403 667 42316
+2497 667 23888
+3178 667 27852657
+594 668 1
+1972 668 46993
+1973 668 49307
+1976 668 53855
+1977 668 15705
+1978 668 15705
+1979 668 15705
+1980 668 15705
+1981 668 15705
+2047 668 32371
+2055 668 52969
+2056 668 64255
+2057 668 5322
+2058 668 27991
+2059 668 11325
+2368 668 25785
+2374 668 44280
+2375 668 28170
+2376 668 46115
+2377 668 62083
+2378 668 62083
+2379 668 2105
+2380 668 29275
+2382 668 46530
+2383 668 11233
+2384 668 64654
+2385 668 46560
+2386 668 17125
+2387 668 20563
+2388 668 8616
+2389 668 37130
+2390 668 52447
+2392 668 1016
+2393 668 19217
+2394 668 16271
+2395 668 26932
+2396 668 46830
+2397 668 26267
+2398 668 32725
+2399 668 44614
+2400 668 30171
+2401 668 4043
+2403 668 31068
+2404 668 40843
+2405 668 35279
+2406 668 2272
+2407 668 22147
+2408 668 40301
+2409 668 15731
+2410 668 51058
+2411 668 2247
+2412 668 40472
+2413 668 31767
+2415 668 54269
+2416 668 45630
+2417 668 55657
+2418 668 8056
+2419 668 48780
+2420 668 5433
+2487 668 50761
+2488 668 7380
+2489 668 58203
+2490 668 19626
+2491 668 64086
+2492 668 41368
+2493 668 61213
+2494 668 57749
+2495 668 37493
+2496 668 19675
+2497 668 58052
+2498 668 65294
+2510 668 6491
+3179 668 27852657
+595 669 1
+2408 669 65520
+3180 669 27852657
+596 670 1
+597 670 1
+598 670 1
+599 670 1
+600 670 1
+604 670 1
+605 670 1
+606 670 1
+607 670 1
+613 670 1
+614 670 1
+615 670 1
+623 670 1
+624 670 1
+634 670 1
+1977 670 32761
+1978 670 32761
+1979 670 32761
+1980 670 32761
+1981 670 32761
+2047 670 32761
+2408 670 24573
+3181 670 27852657
+597 671 1
+781 671 1
+1947 671 18428
+1948 671 22294
+1956 671 42209
+1963 671 31579
+1965 671 49968
+1968 671 26204
+1969 671 26204
+1970 671 26204
+1971 671 43549
+1972 671 43549
+1973 671 49393
+1974 671 33054
+1977 671 13536
+1978 671 35932
+1979 671 35932
+1980 671 62136
+1981 671 35932
+2037 671 43549
+2038 671 43549
+2039 671 49393
+2040 671 33054
+2041 671 11424
+2043 671 13536
+2044 671 35932
+2045 671 35932
+2046 671 62136
+2047 671 6343
+2058 671 35932
+2300 671 10212
+2301 671 64368
+2302 671 28627
+2303 671 64050
+2307 671 40659
+2308 671 43162
+2309 671 7421
+2310 671 64946
+2311 671 57760
+2312 671 57760
+2313 671 32637
+2314 671 32637
+2316 671 44944
+2317 671 22016
+2318 671 5590
+2319 671 6461
+2320 671 64189
+2321 671 6429
+2322 671 57874
+2323 671 57874
+2324 671 26494
+2326 671 16031
+2327 671 35705
+2328 671 53208
+2329 671 11795
+2330 671 53812
+2331 671 47383
+2332 671 38810
+2333 671 38810
+2334 671 15426
+2335 671 47571
+2337 671 9022
+2338 671 29268
+2339 671 60103
+2340 671 34297
+2341 671 54385
+2342 671 7002
+2398 671 55273
+2399 671 55273
+2400 671 38767
+2401 671 10694
+2402 671 23256
+2404 671 6832
+2405 671 15625
+2406 671 46417
+2407 671 34885
+2408 671 62938
+2419 671 55936
+2476 671 44619
+2477 671 44619
+2478 671 17963
+2479 671 33719
+2480 671 41831
+2481 671 17060
+2482 671 53947
+2483 671 62525
+2484 671 24049
+2485 671 59456
+2486 671 48295
+2497 671 33879
+2509 671 53015
+3182 671 27852657
+598 672 1
+605 672 1
+632 672 1
+782 672 1
+783 672 1
+789 672 1
+790 672 1
+816 672 2
+881 672 1
+882 672 1
+1661 672 2
+1668 672 2
+1695 672 2
+1940 672 49142
+1941 672 49142
+1947 672 49142
+1948 672 49142
+1974 672 32763
+2040 672 32761
+2041 672 32761
+2401 672 16380
+2402 672 16380
+2404 672 8191
+2405 672 8191
+2408 672 1
+2419 672 2
+2482 672 49142
+2483 672 49142
+2486 672 2
+2497 672 26620
+2509 672 16380
+3183 672 27852657
+599 673 1
+606 673 1
+614 673 1
+621 673 2
+623 673 11187
+626 673 32246
+627 673 32246
+628 673 32246
+629 673 3546
+630 673 3546
+631 673 3548
+632 673 3548
+635 673 54078
+636 673 18843
+637 673 18843
+638 673 51089
+639 673 18843
+813 673 3546
+814 673 3546
+815 673 3548
+816 673 3548
+817 673 3549
+819 673 54078
+820 673 18843
+821 673 18843
+822 673 51089
+823 673 37686
+888 673 18843
+1662 673 24572
+1663 673 22036
+1667 673 15438
+1668 673 15438
+1669 673 40010
+1670 673 29514
+1671 673 23757
+1672 673 23757
+1673 673 5896
+1674 673 5896
+1676 673 55537
+1677 673 14588
+1678 673 28917
+1679 673 12590
+1680 673 16437
+1681 673 58201
+1682 673 3795
+1683 673 3795
+1684 673 52939
+1686 673 63077
+1687 673 2109
+1688 673 44093
+1689 673 7011
+1690 673 59154
+1691 673 953
+1692 673 53136
+1693 673 53136
+1694 673 36759
+1695 673 36759
+1697 673 45306
+1698 673 40956
+1699 673 29517
+1700 673 27706
+1701 673 746
+1702 673 65314
+1971 673 40089
+1972 673 40089
+1973 673 31901
+1974 673 31901
+1975 673 23707
+1977 673 17308
+1978 673 13759
+1979 673 1508
+1980 673 23279
+1981 673 22911
+2047 673 23118
+2332 673 15320
+2333 673 15320
+2334 673 27605
+2335 673 27605
+2336 673 39890
+2337 673 63521
+2338 673 28267
+2339 673 27411
+2340 673 35785
+2341 673 9431
+2342 673 59572
+2408 673 41965
+2486 673 3397
+3184 673 27852657
+600 674 1
+607 674 1
+615 674 1
+624 674 1
+634 674 1
+807 674 1
+1965 674 54601
+1966 674 54601
+1976 674 32761
+1977 674 54601
+1978 674 54601
+1979 674 54601
+1980 674 54601
+1981 674 54601
+2043 674 54601
+2044 674 54601
+2045 674 54601
+2046 674 54601
+2047 674 43681
+2058 674 54601
+2404 674 47776
+2405 674 47776
+2406 674 47776
+2407 674 30031
+2408 674 42317
+2419 674 42316
+2497 674 23888
+3185 674 27852657
+601 675 1
+635 675 15581
+636 675 12923
+637 675 63964
+638 675 26595
+639 675 26595
+823 675 61605
+897 675 20990
+898 675 65061
+899 675 51249
+900 675 20738
+1896 675 42190
+1905 675 23331
+1913 675 62933
+1914 675 38228
+1915 675 14897
+1943 675 58979
+1951 675 10349
+1960 675 55172
+1970 675 43566
+1977 675 61581
+1978 675 39942
+1979 675 3649
+1980 675 42365
+1981 675 57720
+2009 675 56675
+2017 675 39556
+2026 675 25965
+2036 675 56910
+2047 675 48866
+2056 675 33474
+2057 675 18140
+2058 675 55805
+2059 675 12628
+2370 675 30744
+2377 675 49866
+2378 675 54218
+2379 675 13861
+2380 675 13861
+2382 675 13278
+2383 675 13278
+2384 675 13278
+2385 675 63495
+2386 675 11935
+2387 675 23238
+2388 675 19347
+2389 675 19347
+2390 675 19347
+2392 675 36639
+2393 675 36639
+2394 675 1556
+2395 675 22841
+2396 675 11104
+2397 675 38529
+2398 675 3857
+2399 675 3857
+2400 675 3857
+2401 675 3857
+2403 675 38649
+2404 675 7350
+2405 675 10123
+2406 675 10896
+2407 675 21396
+2408 675 52946
+2409 675 51667
+2410 675 51667
+2411 675 51667
+2412 675 51667
+2413 675 51667
+2415 675 16915
+2416 675 13512
+2417 675 32962
+2418 675 48472
+2419 675 38304
+2420 675 12684
+2487 675 44722
+2488 675 44722
+2489 675 44722
+2490 675 44722
+2491 675 44722
+2492 675 44722
+2493 675 27538
+2494 675 14665
+2495 675 53537
+2496 675 1504
+2497 675 14516
+2498 675 14904
+2510 675 62175
+3186 675 27852657
+601 676 1
+792 676 31400
+800 676 60670
+809 676 18324
+819 676 19992
+884 676 19992
+1529 676 36935
+1536 676 36935
+1558 676 65172
+1559 676 65172
+1561 676 55824
+1562 676 55824
+1563 676 55824
+1564 676 62582
+1571 676 2673
+1579 676 31259
+1603 676 59560
+1604 676 59560
+1605 676 59560
+1607 676 17220
+1608 676 17220
+1609 676 19347
+1616 676 43931
+1624 676 63058
+1633 676 31799
+1658 676 37856
+1659 676 37856
+1660 676 37856
+1661 676 37856
+1663 676 4532
+1664 676 64459
+1671 676 63685
+1679 676 21743
+1688 676 16337
+1698 676 50059
+1937 676 6839
+1938 676 6839
+1939 676 6839
+1940 676 6839
+1941 676 6839
+1943 676 51252
+1950 676 31687
+1958 676 29883
+1967 676 45441
+1977 676 42273
+2043 676 37368
+2298 676 63771
+2299 676 63771
+2300 676 63771
+2301 676 63771
+2302 676 63771
+2303 676 63771
+2304 676 15775
+2311 676 58935
+2319 676 14546
+2328 676 11474
+2338 676 1495
+2404 676 62575
+2482 676 63496
+3187 676 27852657
+602 677 1
+610 677 1
+611 677 1
+619 677 1
+620 677 1
+621 677 1
+629 677 1
+630 677 1
+631 677 1
+632 677 1
+813 677 1
+814 677 1
+815 677 1
+816 677 1
+817 677 1
+1971 677 32761
+1972 677 32761
+1973 677 32761
+1974 677 32761
+1975 677 32761
+1976 677 32761
+2408 677 24573
+3188 677 27852657
+603 678 1
+2408 678 65520
+3189 678 27852657
+604 679 1
+789 679 8829
+790 679 50823
+798 679 19605
+805 679 28867
+807 679 37932
+810 679 42040
+811 679 42040
+812 679 42040
+813 679 9012
+814 679 9012
+815 679 37879
+816 679 15867
+819 679 58851
+820 679 38591
+821 679 38591
+822 679 15110
+823 679 38591
+878 679 9012
+879 679 9012
+880 679 37879
+881 679 15867
+882 679 61742
+884 679 58851
+885 679 38591
+886 679 38591
+887 679 15110
+888 679 11661
+899 679 38591
+1940 679 20547
+1941 679 32389
+1942 679 59025
+1946 679 36639
+1947 679 29869
+1948 679 41711
+1949 679 25664
+1950 679 13104
+1951 679 13104
+1952 679 59774
+1953 679 59774
+1955 679 49020
+1956 679 28189
+1957 679 34671
+1958 679 2455
+1959 679 64672
+1960 679 51568
+1961 679 47606
+1962 679 47606
+1963 679 37184
+1965 679 143
+1966 679 53704
+1967 679 43721
+1968 679 14241
+1969 679 12712
+1970 679 26665
+1971 679 39411
+1972 679 39411
+1973 679 28989
+1974 679 59010
+1976 679 61177
+1977 679 3701
+1978 679 10356
+1979 679 44650
+1980 679 59032
+1981 679 32367
+2037 679 10250
+2038 679 10250
+2039 679 28636
+2040 679 28426
+2041 679 1026
+2043 679 64366
+2044 679 15565
+2045 679 60474
+2046 679 53312
+2047 679 54954
+2058 679 22587
+2398 679 3350
+2399 679 3350
+2400 679 51832
+2401 679 61666
+2402 679 26468
+2403 679 6558
+2404 679 60678
+2405 679 52680
+2406 679 35538
+2407 679 63895
+2408 679 38413
+2419 679 62837
+2497 679 10398
+3190 679 27852657
+605 680 1
+632 680 1
+854 680 65520
+863 680 1
+892 680 1
+893 680 2
+2013 680 22476
+2014 680 49303
+2022 680 1846
+2029 680 38060
+2031 680 63229
+2034 680 19857
+2035 680 19857
+2036 680 19857
+2037 680 32502
+2038 680 32502
+2039 680 5041
+2040 680 119
+2043 680 34649
+2044 680 48723
+2045 680 48723
+2046 680 3059
+2047 680 48723
+2048 680 40679
+2049 680 40679
+2050 680 13218
+2051 680 16473
+2052 680 18516
+2054 680 34649
+2055 680 48723
+2056 680 48723
+2057 680 3059
+2058 680 31925
+2059 680 48723
+2367 680 39046
+2368 680 50705
+2369 680 6650
+2373 680 45057
+2374 680 53002
+2375 680 38043
+2376 680 57025
+2377 680 8962
+2378 680 8962
+2379 680 32247
+2380 680 32247
+2382 680 21762
+2383 680 51847
+2384 680 7293
+2385 680 60130
+2386 680 22345
+2387 680 13383
+2388 680 18098
+2389 680 18098
+2390 680 47185
+2392 680 44422
+2393 680 36525
+2394 680 54058
+2395 680 39705
+2396 680 53024
+2397 680 39641
+2398 680 57761
+2399 680 57761
+2400 680 21327
+2401 680 41298
+2403 680 12347
+2404 680 65389
+2405 680 56195
+2406 680 10192
+2407 680 58117
+2408 680 18477
+2409 680 16488
+2410 680 16488
+2411 680 7786
+2412 680 22022
+2413 680 6756
+2415 680 23160
+2416 680 65494
+2417 680 30080
+2418 680 16570
+2419 680 46882
+2420 680 65256
+2487 680 27751
+2488 680 27751
+2489 680 32373
+2490 680 33141
+2491 680 50007
+2492 680 25411
+2493 680 25919
+2494 680 4009
+2495 680 4010
+2496 680 61875
+2497 680 9316
+2498 680 31787
+2510 680 25645
+3191 680 27852657
+606 681 1
+1662 681 52253
+1669 681 13363
+1670 681 53938
+1671 681 11620
+1672 681 11620
+1673 681 43365
+1674 681 7510
+1676 681 20047
+1677 681 62043
+1678 681 15670
+1679 681 65454
+1680 681 49270
+1681 681 37650
+1682 681 49208
+1683 681 1582
+1684 681 1582
+1686 681 32034
+1687 681 19716
+1688 681 62230
+1689 681 34283
+1690 681 60070
+1691 681 22420
+1692 681 53974
+1693 681 36677
+1694 681 36677
+1695 681 36677
+1697 681 41930
+1698 681 42291
+1699 681 43610
+1700 681 16261
+1701 681 24533
+1702 681 2113
+1971 681 38900
+1972 681 7511
+1973 681 7511
+1974 681 7511
+1975 681 15688
+1977 681 58489
+1978 681 20826
+1979 681 3817
+1980 681 53517
+1981 681 63132
+2047 681 61019
+2332 681 37291
+2333 681 38405
+2334 681 38405
+2335 681 38405
+2336 681 543
+2337 681 33693
+2338 681 24308
+2339 681 9844
+2340 681 27130
+2341 681 48515
+2342 681 46534
+2408 681 18434
+2486 681 25667
+3192 681 27852657
+607 682 1
+807 682 55797
+810 682 8578
+811 682 8578
+812 682 8578
+813 682 42079
+814 682 42079
+815 682 42079
+816 682 42079
+819 682 4599
+820 682 7348
+821 682 7348
+822 682 15926
+823 682 7348
+878 682 42079
+879 682 42079
+880 682 42079
+881 682 42079
+882 682 42079
+884 682 4599
+885 682 7348
+886 682 7348
+887 682 15926
+888 682 14696
+899 682 7348
+1946 682 21902
+1947 682 21902
+1948 682 21902
+1949 682 21902
+1952 682 43069
+1953 682 43069
+1955 682 36711
+1956 682 36711
+1957 682 36711
+1959 682 43406
+1960 682 43406
+1961 682 9099
+1962 682 9099
+1963 682 9099
+1965 682 4302
+1966 682 4302
+1968 682 62874
+1969 682 47206
+1970 682 3800
+1971 682 31511
+1972 682 31511
+1973 682 31511
+1974 682 31511
+1976 682 51234
+1977 682 27594
+1978 682 47847
+1979 682 62823
+1980 682 33812
+1981 682 30012
+2037 682 18625
+2038 682 18625
+2039 682 18625
+2040 682 18625
+2041 682 18625
+2043 682 48424
+2044 682 19201
+2045 682 38728
+2046 682 21611
+2047 682 11405
+2058 682 46914
+2398 682 25899
+2399 682 25899
+2400 682 25899
+2401 682 25899
+2402 682 25899
+2403 682 25899
+2405 682 58308
+2406 682 41707
+2407 682 48459
+2408 682 25652
+2419 682 9135
+2497 682 55897
+3193 682 27852657
+608 683 1
+609 683 1
+617 683 1
+626 683 1
+636 683 1
+800 683 65520
+801 683 65520
+802 683 65520
+809 683 65520
+811 683 65520
+820 683 2
+822 683 1
+823 683 1
+885 683 1
+887 683 1
+888 683 2
+899 683 1
+1958 683 28660
+1965 683 3114
+1967 683 28660
+1968 683 25855
+1969 683 15813
+1970 683 15813
+1971 683 40681
+1972 683 40681
+1973 683 40681
+1974 683 40681
+1977 683 27626
+1978 683 17280
+1979 683 43467
+1980 683 52952
+1981 683 37139
+2037 683 40681
+2038 683 40681
+2039 683 40681
+2040 683 40681
+2041 683 40681
+2043 683 43997
+2044 683 25468
+2045 683 51655
+2046 683 57040
+2047 683 21037
+2058 683 49419
+2307 683 64686
+2308 683 64686
+2309 683 64686
+2310 683 64686
+2311 683 16354
+2312 683 16354
+2313 683 1968
+2314 683 1968
+2316 683 60804
+2317 683 60804
+2318 683 60804
+2319 683 29681
+2320 683 3722
+2321 683 52889
+2322 683 9323
+2323 683 9323
+2324 683 9323
+2326 683 64973
+2327 683 64973
+2328 683 29681
+2329 683 36542
+2330 683 61719
+2331 683 8830
+2332 683 51938
+2333 683 51938
+2334 683 51938
+2335 683 51938
+2337 683 1496
+2338 683 65404
+2339 683 19510
+2340 683 865
+2341 683 28581
+2342 683 19751
+2398 683 35768
+2399 683 35768
+2400 683 35768
+2401 683 35768
+2402 683 35768
+2404 683 58711
+2405 683 33928
+2406 683 28700
+2407 683 48545
+2408 683 19621
+2419 683 14201
+2476 683 23469
+2477 683 23469
+2478 683 23469
+2479 683 23469
+2480 683 23469
+2481 683 23469
+2482 683 44017
+2483 683 56114
+2484 683 21408
+2485 683 30198
+2486 683 31155
+2497 683 15333
+2509 683 19165
+3194 683 27852657
+609 684 1
+635 684 24985
+636 684 38044
+637 684 13436
+638 684 19774
+639 684 19774
+823 684 13874
+897 684 44885
+898 684 62795
+899 684 12873
+900 684 6973
+1896 684 42190
+1905 684 47694
+1913 684 52055
+1914 684 44415
+1915 684 62242
+1951 684 3807
+1960 684 31337
+1970 684 11318
+1977 684 8853
+1978 684 6800
+1979 684 3171
+1980 684 43937
+1981 684 27853
+2017 684 30710
+2026 684 36796
+2036 684 18057
+2047 684 14128
+2056 684 48975
+2057 684 45710
+2058 684 5080
+2059 684 25903
+2377 684 2010
+2378 684 37106
+2379 684 5657
+2380 684 5657
+2382 684 19778
+2383 684 19778
+2384 684 19778
+2385 684 764
+2386 684 34257
+2387 684 42151
+2388 684 50439
+2389 684 50439
+2390 684 50439
+2392 684 28631
+2393 684 28631
+2394 684 30049
+2395 684 45191
+2396 684 47482
+2397 684 631
+2398 684 40657
+2399 684 40657
+2400 684 40657
+2401 684 40657
+2403 684 6172
+2404 684 17865
+2405 684 38415
+2406 684 47386
+2407 684 57838
+2408 684 20113
+2409 684 63743
+2410 684 63743
+2411 684 63743
+2412 684 63743
+2413 684 63743
+2415 684 58981
+2416 684 57223
+2417 684 59830
+2418 684 3141
+2419 684 59630
+2420 684 31919
+2487 684 24799
+2488 684 24799
+2489 684 24799
+2490 684 24799
+2491 684 24799
+2492 684 24799
+2493 684 19395
+2494 684 45909
+2495 684 20765
+2496 684 53866
+2497 684 22252
+2498 684 26662
+2510 684 55597
+3195 684 27852657
+609 685 1
+793 685 1
+801 685 32894
+810 685 24863
+820 685 60253
+885 685 60253
+1536 685 24727
+1537 685 24727
+1565 685 15425
+1566 685 15425
+1568 685 11569
+1569 685 11569
+1570 685 11569
+1571 685 60875
+1572 685 8325
+1580 685 49119
+1610 685 45685
+1611 685 45685
+1612 685 45685
+1614 685 47868
+1615 685 47868
+1616 685 5660
+1617 685 24060
+1625 685 29208
+1634 685 45610
+1665 685 14252
+1666 685 14252
+1667 685 14252
+1668 685 14252
+1670 685 53793
+1671 685 51075
+1672 685 6901
+1680 685 3375
+1689 685 29807
+1699 685 49718
+1944 685 14448
+1945 685 14448
+1946 685 14448
+1947 685 14448
+1948 685 14448
+1950 685 33811
+1951 685 39419
+1959 685 54976
+1968 685 8400
+1978 685 41466
+2044 685 64428
+2305 685 29097
+2306 685 29097
+2307 685 29097
+2308 685 29097
+2309 685 29097
+2310 685 29097
+2311 685 46540
+2312 685 15791
+2320 685 29058
+2329 685 54944
+2339 685 40389
+2405 685 50739
+2483 685 43063
+3196 685 27852657
+610 686 1
+790 686 8948
+798 686 24445
+804 686 1408
+805 686 19083
+807 686 36199
+810 686 20635
+811 686 20635
+812 686 20635
+813 686 22384
+814 686 36073
+815 686 53748
+816 686 15608
+819 686 25742
+820 686 259
+821 686 259
+822 686 20894
+823 686 259
+878 686 22384
+879 686 36073
+880 686 53748
+881 686 15608
+882 686 53742
+884 686 25742
+885 686 259
+886 686 259
+887 686 20894
+888 686 518
+899 686 259
+1941 686 4355
+1942 686 15223
+1946 686 48574
+1947 686 48574
+1948 686 52929
+1949 686 36729
+1950 686 54719
+1951 686 54719
+1952 686 60798
+1953 686 11643
+1955 686 63486
+1956 686 59737
+1957 686 36258
+1958 686 62745
+1959 686 54746
+1960 686 27
+1961 686 35550
+1962 686 23485
+1963 686 60397
+1965 686 28572
+1966 686 27559
+1967 686 11139
+1968 686 24141
+1969 686 38552
+1970 686 38525
+1971 686 20030
+1972 686 44820
+1973 686 16211
+1974 686 49455
+1976 686 59773
+1977 686 34549
+1978 686 21317
+1979 686 64826
+1980 686 22242
+1981 686 49238
+2037 686 33494
+2038 686 59546
+2039 686 33280
+2040 686 4063
+2041 686 5174
+2043 686 3829
+2044 686 2955
+2045 686 6087
+2046 686 50020
+2047 686 31757
+2058 686 48040
+2398 686 937
+2399 686 35097
+2400 686 2727
+2401 686 2727
+2402 686 13198
+2403 686 14963
+2404 686 51257
+2405 686 53714
+2406 686 64884
+2407 686 19570
+2408 686 47415
+2419 686 40935
+2497 686 57282
+3197 686 27852657
+611 687 1
+620 687 1
+621 687 1
+630 687 1
+631 687 1
+632 687 1
+795 687 1
+804 687 1
+805 687 1
+814 687 2
+815 687 2
+816 687 2
+879 687 1
+880 687 1
+881 687 1
+882 687 1
+1674 687 2
+1683 687 2
+1684 687 2
+1693 687 2
+1694 687 2
+1695 687 2
+1953 687 49142
+1962 687 49142
+1963 687 49142
+1972 687 32763
+1973 687 32763
+1974 687 32763
+2038 687 32761
+2039 687 32761
+2040 687 32761
+2041 687 32761
+2399 687 16380
+2400 687 16380
+2401 687 16380
+2402 687 16380
+2408 687 8192
+2419 687 8193
+2486 687 49144
+2497 687 39930
+2509 687 16380
+3198 687 27852657
+612 688 1
+2408 688 65520
+3199 688 27852657
+613 689 1
+797 689 1
+798 689 1
+807 689 1
+1955 689 49140
+1956 689 49140
+1965 689 49138
+2316 689 43680
+2317 689 43680
+2318 689 43680
+2326 689 65520
+2327 689 65520
+2337 689 65520
+2406 689 8191
+2407 689 8191
+2408 689 8191
+2419 689 8191
+2484 689 24570
+2485 689 60060
+2486 689 60060
+2497 689 24228
+2509 689 61425
+3200 689 27852657
+614 690 1
+1662 690 63085
+1669 690 53975
+1670 690 13194
+1671 690 49813
+1672 690 49813
+1673 690 13047
+1674 690 20489
+1676 690 2269
+1677 690 28070
+1678 690 49488
+1679 690 57313
+1680 690 59669
+1681 690 9856
+1682 690 6775
+1683 690 17890
+1684 690 17890
+1686 690 55035
+1687 690 58741
+1688 690 42593
+1689 690 16023
+1690 690 50122
+1691 690 40266
+1692 690 60645
+1693 690 64840
+1694 690 64840
+1695 690 64840
+1697 690 40895
+1698 690 43337
+1699 690 14476
+1700 690 43911
+1701 690 64303
+1702 690 24037
+1971 690 58318
+1972 690 35032
+1973 690 35032
+1974 690 35032
+1975 690 10783
+1977 690 20581
+1978 690 44678
+1979 690 6893
+1980 690 55967
+1981 690 45266
+2047 690 21229
+2332 690 37413
+2333 690 15752
+2334 690 15752
+2335 690 15752
+2336 690 18048
+2337 690 25828
+2338 690 38894
+2339 690 21261
+2340 690 51835
+2341 690 45242
+2342 690 11062
+2408 690 45002
+2486 690 6465
+3201 690 27852657
+615 691 1
+616 691 9077
+617 691 9077
+618 691 9077
+625 691 9077
+626 691 9077
+627 691 18154
+628 691 9077
+635 691 9077
+636 691 9077
+637 691 18154
+638 691 18154
+639 691 9077
+792 691 36063
+793 691 36063
+800 691 45140
+801 691 15682
+802 691 45140
+807 691 19781
+809 691 45140
+810 691 30940
+811 691 40017
+812 691 60398
+819 691 63082
+820 691 48882
+821 691 1515
+822 691 16773
+823 691 21896
+884 691 54005
+885 691 39805
+886 691 48882
+887 691 64140
+888 691 16561
+899 691 3742
+1950 691 41448
+1951 691 41448
+1958 691 16400
+1959 691 57848
+1960 691 16400
+1965 691 14217
+1966 691 14217
+1967 691 16400
+1968 691 33038
+1969 691 5517
+1970 691 54638
+1976 691 14217
+1977 691 34808
+1978 691 51446
+1979 691 46010
+1980 691 59679
+1981 691 5041
+2043 691 57169
+2044 691 47677
+2045 691 42241
+2046 691 8543
+2047 691 30100
+2058 691 25059
+2404 691 34782
+2405 691 46678
+2406 691 44124
+2407 691 52275
+2408 691 62584
+2419 691 25571
+2497 691 37974
+3202 691 27852657
+616 692 1
+617 692 1
+618 692 1
+627 692 1
+637 692 1
+800 692 1
+801 692 1
+802 692 1
+811 692 1
+821 692 2
+886 692 1
+1958 692 49144
+1965 692 53425
+1967 692 36865
+1968 692 13498
+1969 692 14972
+1970 692 14972
+1971 692 36676
+1972 692 36676
+1973 692 36676
+1974 692 36676
+1977 692 787
+1978 692 34004
+1979 692 45551
+1980 692 18071
+1981 692 3099
+2037 692 36676
+2038 692 36676
+2039 692 36676
+2040 692 36676
+2041 692 36676
+2043 692 787
+2044 692 34004
+2045 692 45551
+2046 692 18071
+2047 692 6198
+2058 692 3099
+2307 692 58740
+2308 692 58740
+2309 692 58740
+2310 692 58740
+2311 692 55899
+2312 692 55899
+2313 692 16529
+2314 692 16529
+2316 692 19387
+2317 692 19387
+2318 692 19387
+2319 692 17468
+2320 692 11559
+2321 692 21181
+2322 692 51302
+2323 692 51302
+2324 692 51302
+2326 692 54978
+2327 692 54978
+2328 692 47855
+2329 692 25601
+2330 692 37463
+2331 692 16282
+2332 692 16394
+2333 692 16394
+2334 692 16394
+2335 692 16394
+2337 692 24717
+2338 692 356
+2339 692 33149
+2340 692 22526
+2341 692 36403
+2342 692 20121
+2398 692 48182
+2399 692 48182
+2400 692 48182
+2401 692 48182
+2402 692 48182
+2404 692 64006
+2405 692 37039
+2406 692 24828
+2407 692 58012
+2408 692 3915
+2419 692 49315
+2476 692 39004
+2477 692 39004
+2478 692 39004
+2479 692 39004
+2480 692 39004
+2481 692 39004
+2482 692 23585
+2483 692 53351
+2484 692 19192
+2485 692 19700
+2486 692 62176
+2497 692 19755
+2509 692 97
+3203 692 27852657
+617 693 1
+618 693 1
+628 693 65520
+634 693 24631
+635 693 35648
+636 693 35648
+637 693 22650
+638 693 16736
+639 693 16737
+823 693 15652
+885 693 43437
+886 693 4643
+887 693 2463
+888 693 46100
+899 693 47185
+1950 693 48380
+1951 693 48380
+1952 693 10860
+1953 693 10860
+1955 693 63123
+1956 693 63123
+1957 693 63123
+1958 693 62812
+1959 693 57966
+1960 693 9586
+1961 693 11457
+1962 693 11457
+1963 693 11457
+1965 693 40780
+1966 693 40780
+1967 693 61937
+1968 693 23067
+1969 693 33808
+1970 693 24222
+1971 693 9843
+1972 693 9843
+1973 693 9843
+1974 693 9843
+1976 693 56428
+1977 693 22934
+1978 693 10121
+1979 693 55671
+1980 693 43885
+1981 693 37222
+2037 693 50398
+2038 693 50398
+2039 693 50398
+2040 693 50398
+2041 693 50398
+2043 693 17642
+2044 693 40007
+2045 693 31803
+2046 693 39461
+2047 693 26888
+2058 693 5853
+2398 693 21038
+2399 693 21038
+2400 693 21038
+2401 693 21038
+2402 693 21038
+2403 693 21038
+2404 693 46054
+2405 693 9377
+2406 693 8656
+2407 693 58708
+2408 693 43414
+2419 693 60997
+2497 693 37100
+3204 693 27852657
+618 694 1
+635 694 39488
+636 694 43786
+637 694 52637
+638 694 24909
+639 694 24909
+823 694 62876
+897 694 24675
+898 694 30372
+899 694 48386
+900 694 20832
+1905 694 24363
+1913 694 39343
+1914 694 19503
+1915 694 60661
+1960 694 35144
+1970 694 5172
+1977 694 53009
+1978 694 37591
+1979 694 63470
+1980 694 5471
+1981 694 29512
+2026 694 1985
+2036 694 57847
+2047 694 44446
+2056 694 56547
+2057 694 43610
+2058 694 23602
+2059 694 57929
+2377 694 46605
+2378 694 46605
+2379 694 20815
+2380 694 20815
+2382 694 41632
+2383 694 41632
+2384 694 41632
+2385 694 40975
+2386 694 9593
+2387 694 7988
+2388 694 5579
+2389 694 5579
+2390 694 5579
+2392 694 3596
+2393 694 3596
+2394 694 29279
+2395 694 56152
+2396 694 10387
+2397 694 3891
+2398 694 35246
+2399 694 35246
+2400 694 35246
+2401 694 35246
+2403 694 38158
+2404 694 50309
+2405 694 17988
+2406 694 30921
+2407 694 37077
+2408 694 25718
+2409 694 20155
+2410 694 20155
+2411 694 20155
+2412 694 20155
+2413 694 20155
+2415 694 19348
+2416 694 22378
+2417 694 16664
+2418 694 22750
+2419 694 3814
+2420 694 59942
+2487 694 51243
+2488 694 51243
+2489 694 51243
+2490 694 51243
+2491 694 51243
+2492 694 51243
+2493 694 52796
+2494 694 38337
+2495 694 26432
+2496 694 6548
+2497 694 21186
+2498 694 43860
+2510 694 46262
+3205 694 27852657
+618 695 1
+802 695 10234
+811 695 10099
+821 695 32024
+886 695 32024
+1571 695 19221
+1572 695 19221
+1573 695 56103
+1574 695 56103
+1576 695 5114
+1577 695 5114
+1578 695 5114
+1579 695 40240
+1580 695 9875
+1581 695 56175
+1618 695 20870
+1619 695 20870
+1620 695 20870
+1622 695 36137
+1623 695 36137
+1624 695 40583
+1625 695 48282
+1626 695 4148
+1635 695 13494
+1673 695 41383
+1674 695 41383
+1675 695 41383
+1676 695 41383
+1678 695 63516
+1679 695 13984
+1680 695 61791
+1681 695 65209
+1690 695 5735
+1700 695 57762
+1952 695 23287
+1953 695 23287
+1954 695 23287
+1955 695 23287
+1956 695 23287
+1958 695 25986
+1959 695 53399
+1960 695 38715
+1969 695 16183
+1979 695 51180
+2045 695 35668
+2313 695 41388
+2314 695 41388
+2315 695 41388
+2316 695 41388
+2317 695 41388
+2318 695 41388
+2319 695 32646
+2320 695 37955
+2321 695 10681
+2330 695 27804
+2340 695 33471
+2406 695 4501
+2484 695 35102
+3206 695 27852657
+619 696 1
+629 696 1
+790 696 60958
+798 696 24227
+804 696 64113
+805 696 44387
+807 696 26087
+810 696 9388
+811 696 9388
+812 696 9388
+813 696 37694
+814 696 50622
+815 696 30896
+816 696 23989
+819 696 61987
+820 696 61511
+821 696 61511
+822 696 5378
+823 696 61511
+878 696 37693
+879 696 50622
+880 696 30896
+881 696 23989
+882 696 61145
+884 696 61987
+885 696 61511
+886 696 61511
+887 696 5378
+888 696 57501
+899 696 61511
+1941 696 4611
+1942 696 32547
+1946 696 32506
+1947 696 32506
+1948 696 37117
+1949 696 45466
+1950 696 12289
+1951 696 12289
+1952 696 48686
+1953 696 24137
+1955 696 3911
+1956 696 58903
+1957 696 63517
+1958 696 27542
+1959 696 31258
+1960 696 18969
+1961 696 24484
+1962 696 28366
+1963 696 45452
+1965 696 60300
+1966 696 25647
+1967 696 1503
+1968 696 22431
+1969 696 326
+1970 696 46878
+1971 696 818
+1972 696 605
+1973 696 17691
+1974 696 41770
+1976 696 39466
+1977 696 45820
+1978 696 34271
+1979 696 20513
+1980 696 34038
+1981 696 52681
+2037 696 9231
+2038 696 58431
+2039 696 29282
+2040 696 9868
+2041 696 42699
+2043 696 44901
+2044 696 6259
+2045 696 23304
+2046 696 60557
+2047 696 26659
+2058 696 39499
+2398 696 25529
+2399 696 32322
+2400 696 13696
+2401 696 13696
+2402 696 32967
+2403 696 29570
+2404 696 52585
+2405 696 58712
+2406 696 54970
+2407 696 18725
+2408 696 45215
+2419 696 51852
+2497 696 45864
+3207 696 27852657
+620 697 1
+630 697 1
+790 697 4563
+798 697 41294
+804 697 1408
+805 697 62827
+807 697 47134
+810 697 51672
+811 697 51672
+812 697 51672
+813 697 38875
+814 697 25947
+815 697 45672
+816 697 52579
+819 697 4202
+820 697 52764
+821 697 52764
+822 697 38915
+823 697 52764
+878 697 38875
+879 697 25946
+880 697 45672
+881 697 52579
+882 697 15423
+884 697 4202
+885 697 52764
+886 697 52764
+887 697 38915
+888 697 40007
+899 697 52764
+1941 697 60910
+1942 697 32974
+1946 697 20335
+1947 697 20335
+1948 697 15724
+1949 697 7375
+1950 697 53232
+1951 697 53232
+1952 697 6018
+1953 697 30567
+1955 697 20927
+1956 697 31456
+1957 697 26842
+1958 697 37979
+1959 697 38318
+1960 697 50607
+1961 697 53862
+1962 697 49980
+1963 697 32894
+1965 697 35899
+1966 697 5031
+1967 697 64018
+1968 697 30692
+1969 697 832
+1970 697 15746
+1971 697 3438
+1972 697 3651
+1973 697 26771
+1974 697 2692
+1976 697 62672
+1977 697 23709
+1978 697 36086
+1979 697 63870
+1980 697 56184
+1981 697 40438
+2037 697 62493
+2038 697 13293
+2039 697 42442
+2040 697 61856
+2041 697 29025
+2043 697 54466
+2044 697 44165
+2045 697 53158
+2046 697 34436
+2047 697 60636
+2058 697 20198
+2398 697 20626
+2399 697 13833
+2400 697 32459
+2401 697 32459
+2402 697 13188
+2403 697 16585
+2404 697 12936
+2405 697 46681
+2406 697 13628
+2407 697 62278
+2408 697 27865
+2419 697 15272
+2497 697 5011
+3208 697 27852657
+621 698 1
+631 698 1
+632 698 1
+815 698 41694
+891 698 23828
+892 698 1
+893 698 1
+1973 698 25315
+1976 698 14892
+2013 698 41145
+2014 698 17973
+2022 698 41700
+2029 698 9734
+2031 698 57915
+2034 698 42926
+2035 698 42926
+2036 698 42926
+2037 698 4362
+2038 698 4362
+2039 698 63267
+2040 698 39704
+2043 698 12279
+2044 698 42888
+2045 698 42888
+2046 698 20293
+2047 698 42888
+2048 698 39000
+2049 698 39000
+2050 698 26798
+2051 698 24093
+2052 698 35645
+2054 698 12279
+2055 698 42888
+2056 698 42888
+2057 698 20293
+2058 698 20255
+2059 698 42888
+2367 698 61324
+2368 698 60444
+2369 698 922
+2373 698 54755
+2374 698 40792
+2375 698 39912
+2376 698 50479
+2377 698 21418
+2378 698 21418
+2379 698 6085
+2380 698 6085
+2382 698 1975
+2383 698 8901
+2384 698 20038
+2385 698 50851
+2386 698 50618
+2387 698 29200
+2388 698 653
+2389 698 653
+2390 698 23633
+2392 698 43055
+2393 698 47554
+2394 698 47457
+2395 698 41838
+2396 698 22660
+2397 698 58981
+2398 698 46307
+2399 698 46307
+2400 698 51824
+2401 698 51778
+2403 698 50493
+2404 698 55610
+2405 698 21560
+2406 698 10198
+2407 698 34534
+2408 698 53360
+2409 698 17740
+2410 698 17740
+2411 698 62662
+2412 698 58699
+2413 698 47943
+2415 698 49154
+2416 698 26350
+2417 698 62346
+2418 698 24281
+2419 698 13650
+2420 698 7950
+2487 698 22794
+2488 698 22794
+2489 698 6348
+2490 698 23996
+2491 698 59267
+2492 698 47418
+2493 698 63304
+2494 698 35441
+2495 698 50189
+2496 698 30119
+2497 698 14698
+2498 698 15421
+2510 698 9981
+3209 698 27852657
+622 699 1
+2408 699 65520
+3210 699 27852657
+623 700 1
+1671 700 32475
+1672 700 32475
+1673 700 57552
+1674 700 57552
+1676 700 29212
+1677 700 29212
+1678 700 29212
+1679 700 44899
+1680 700 50853
+1681 700 18378
+1682 700 58761
+1683 700 58761
+1684 700 58761
+1686 700 21128
+1687 700 21128
+1688 700 11501
+1689 700 30393
+1690 700 19629
+1691 700 1251
+1692 700 3800
+1693 700 3800
+1694 700 3800
+1695 700 3800
+1697 700 54778
+1698 700 7871
+1699 700 28566
+1700 700 40174
+1701 700 19153
+1702 700 17902
+1971 700 28310
+1972 700 28310
+1973 700 28310
+1974 700 28310
+1975 700 28310
+1977 700 19505
+1978 700 45809
+1979 700 53833
+1980 700 41667
+1981 700 61911
+2047 700 44009
+2332 700 18240
+2333 700 18240
+2334 700 18240
+2335 700 18240
+2336 700 18240
+2337 700 18240
+2338 700 33572
+2339 700 13267
+2340 700 30582
+2341 700 10392
+2342 700 23971
+2408 700 55942
+2486 700 44121
+3211 700 27852657
+624 701 1
+634 701 1
+807 701 23577
+810 701 45364
+811 701 45364
+812 701 45364
+813 701 56570
+814 701 56570
+815 701 56570
+816 701 56570
+819 701 33657
+820 701 1392
+821 701 1392
+822 701 46756
+823 701 1392
+878 701 56570
+879 701 56570
+880 701 56570
+881 701 56570
+882 701 56570
+884 701 33657
+885 701 1392
+886 701 1392
+887 701 46756
+888 701 2784
+899 701 1392
+1946 701 23897
+1947 701 23897
+1948 701 23897
+1949 701 23897
+1952 701 35717
+1953 701 35717
+1955 701 34288
+1956 701 34288
+1957 701 34288
+1959 701 32105
+1960 701 32105
+1961 701 60300
+1962 701 60300
+1963 701 60300
+1965 701 16149
+1966 701 16149
+1968 701 15894
+1969 701 45584
+1970 701 13479
+1971 701 31382
+1972 701 31382
+1973 701 31382
+1974 701 31382
+1976 701 62286
+1977 701 5379
+1978 701 5719
+1979 701 37885
+1980 701 17826
+1981 701 4347
+2037 701 3794
+2038 701 3794
+2039 701 3794
+2040 701 3794
+2041 701 3794
+2043 701 13742
+2044 701 39921
+2045 701 34004
+2046 701 656
+2047 701 25904
+2058 701 21557
+2398 701 22123
+2399 701 22123
+2400 701 22123
+2401 701 22123
+2402 701 22123
+2403 701 22123
+2405 701 18297
+2406 701 58891
+2407 701 7840
+2408 701 2509
+2419 701 25451
+2497 701 39980
+3212 701 27852657
+625 702 1
+626 702 1
+627 702 1
+628 702 1
+638 702 1
+809 702 1
+820 702 65520
+821 702 65520
+823 702 65520
+885 702 65520
+886 702 65520
+887 702 65520
+888 702 65519
+899 702 65520
+1698 702 65515
+1699 702 65515
+1700 702 65515
+1701 702 65515
+1702 702 65515
+1958 702 12283
+1965 702 33143
+1967 702 24562
+1968 702 18449
+1969 702 52282
+1970 702 52282
+1971 702 36844
+1972 702 36844
+1973 702 36844
+1974 702 36844
+1977 702 12434
+1978 702 56056
+1979 702 41071
+1980 702 59553
+1981 702 64597
+2037 702 36844
+2038 702 36844
+2039 702 36844
+2040 702 36844
+2041 702 36844
+2043 702 12440
+2044 702 31490
+2045 702 16505
+2046 702 63653
+2047 702 2267
+2058 702 3185
+2307 702 45965
+2308 702 45965
+2309 702 45965
+2310 702 45965
+2311 702 1445
+2312 702 1445
+2313 702 22593
+2314 702 22593
+2316 702 5677
+2317 702 5677
+2318 702 5677
+2319 702 48053
+2320 702 38379
+2321 702 36934
+2322 702 658
+2323 702 658
+2324 702 658
+2326 702 22535
+2327 702 22535
+2328 702 17666
+2329 702 11634
+2330 702 64613
+2331 702 27679
+2332 702 39529
+2333 702 39529
+2334 702 39529
+2335 702 39529
+2337 702 39789
+2338 702 5305
+2339 702 11982
+2340 702 13883
+2341 702 45665
+2342 702 17984
+2398 702 13502
+2399 702 13502
+2400 702 13502
+2401 702 13502
+2402 702 13502
+2404 702 23510
+2405 702 11933
+2406 702 24615
+2407 702 61868
+2408 702 42761
+2419 702 51395
+2476 702 1052
+2477 702 1052
+2478 702 1052
+2479 702 1052
+2480 702 1052
+2481 702 1052
+2482 702 41936
+2483 702 11793
+2484 702 24945
+2485 702 45197
+2486 702 10455
+2497 702 40688
+2509 702 34910
+3213 702 27852657
+626 703 1
+637 703 4094
+638 703 21840
+639 703 21840
+821 703 4094
+822 703 21840
+823 703 43680
+888 703 21840
+1697 703 15277
+1698 703 61009
+1699 703 46213
+1700 703 28692
+1701 703 36777
+1702 703 36777
+1981 703 43135
+2044 703 3971
+2045 703 26938
+2046 703 13671
+2047 703 620
+2058 703 59783
+2311 703 866
+2312 703 866
+2313 703 31578
+2314 703 31578
+2316 703 64331
+2317 703 64331
+2318 703 64331
+2319 703 51480
+2320 703 36966
+2321 703 36100
+2322 703 14816
+2323 703 14816
+2324 703 14816
+2326 703 16381
+2327 703 16381
+2328 703 58199
+2329 703 30567
+2330 703 34207
+2331 703 63628
+2332 703 30829
+2333 703 30829
+2334 703 30829
+2335 703 30829
+2337 703 44611
+2338 703 32093
+2339 703 10890
+2340 703 64668
+2341 703 48946
+2342 703 8763
+2398 703 29837
+2399 703 29837
+2400 703 29837
+2401 703 29837
+2402 703 29837
+2404 703 27602
+2405 703 54015
+2406 703 41533
+2407 703 50913
+2408 703 63462
+2419 703 12005
+2476 703 3833
+2477 703 3833
+2478 703 3833
+2479 703 3833
+2480 703 3833
+2481 703 3833
+2482 703 3571
+2483 703 27115
+2484 703 35243
+2485 703 29234
+2486 703 28753
+2497 703 22648
+2509 703 13152
+3214 703 27852657
+627 704 1
+628 704 1
+637 704 61427
+638 704 43682
+639 704 43681
+821 704 61427
+822 704 43682
+823 704 21841
+888 704 43681
+1697 704 28141
+1698 704 59669
+1699 704 59669
+1700 704 42115
+1701 704 6447
+1702 704 6447
+1981 704 26139
+2044 704 25896
+2045 704 51656
+2046 704 17569
+2047 704 1025
+2058 704 46854
+2311 704 35847
+2312 704 35847
+2313 704 36847
+2314 704 36847
+2316 704 30169
+2317 704 30169
+2318 704 30169
+2319 704 49072
+2320 704 3209
+2321 704 32883
+2322 704 56375
+2323 704 56375
+2324 704 56375
+2326 704 14758
+2327 704 14758
+2328 704 62003
+2329 704 12571
+2330 704 44684
+2331 704 11801
+2332 704 14446
+2333 704 14446
+2334 704 14446
+2335 704 14446
+2337 704 10481
+2338 704 26419
+2339 704 17616
+2340 704 16122
+2341 704 40501
+2342 704 28630
+2398 704 61758
+2399 704 61758
+2400 704 61758
+2401 704 61758
+2402 704 61758
+2404 704 16057
+2405 704 28884
+2406 704 44511
+2407 704 1254
+2408 704 52269
+2419 704 12157
+2476 704 16924
+2477 704 16924
+2478 704 16924
+2479 704 16924
+2480 704 16924
+2481 704 16924
+2482 704 31308
+2483 704 58136
+2484 704 23568
+2485 704 7470
+2486 704 60252
+2497 704 55297
+2509 704 4023
+3215 704 27852657
+628 705 1
+635 705 50782
+636 705 65326
+637 705 27542
+638 705 44870
+639 705 44869
+823 705 2974
+897 705 65421
+898 705 1844
+899 705 37143
+900 705 60769
+1913 705 50221
+1914 705 13316
+1915 705 13316
+1970 705 30878
+1977 705 62704
+1978 705 22657
+1979 705 8243
+1980 705 57521
+1981 705 36014
+2036 705 22333
+2047 705 32850
+2056 705 61996
+2057 705 58526
+2058 705 34952
+2059 705 31030
+2377 705 10601
+2378 705 10601
+2379 705 41409
+2380 705 41409
+2382 705 48727
+2383 705 48727
+2384 705 48727
+2385 705 30188
+2386 705 43382
+2387 705 32781
+2388 705 60138
+2389 705 60138
+2390 705 60138
+2392 705 22716
+2393 705 22716
+2394 705 65493
+2395 705 59667
+2396 705 2540
+2397 705 26614
+2398 705 56916
+2399 705 56916
+2400 705 56916
+2401 705 56916
+2403 705 23398
+2404 705 48750
+2405 705 51337
+2406 705 49218
+2407 705 20273
+2408 705 56116
+2409 705 17794
+2410 705 17794
+2411 705 17794
+2412 705 17794
+2413 705 17794
+2415 705 13507
+2416 705 9416
+2417 705 36393
+2418 705 59746
+2419 705 10327
+2420 705 54801
+2487 705 24217
+2488 705 24217
+2489 705 24217
+2490 705 24217
+2491 705 24217
+2492 705 24217
+2493 705 25361
+2494 705 25212
+2495 705 17596
+2496 705 63604
+2497 705 16003
+2498 705 58029
+2510 705 22986
+3216 705 27852657
+628 706 1
+638 706 1
+811 706 22394
+812 706 30560
+822 706 38767
+887 706 38766
+1616 706 51103
+1617 706 51103
+1618 706 28487
+1619 706 28487
+1621 706 23802
+1622 706 23802
+1623 706 23802
+1624 706 54464
+1625 706 13107
+1626 706 27525
+1627 706 10270
+1628 706 10270
+1629 706 10270
+1631 706 58306
+1632 706 58306
+1633 706 42963
+1634 706 5339
+1635 706 7814
+1636 706 45810
+1682 706 64788
+1683 706 64788
+1684 706 64788
+1685 706 64788
+1687 706 25159
+1688 706 48831
+1689 706 63733
+1690 706 16421
+1691 706 23915
+1701 706 43626
+1961 706 50232
+1962 706 50232
+1963 706 50232
+1964 706 50232
+1965 706 50232
+1967 706 14825
+1968 706 19291
+1969 706 28248
+1970 706 20311
+1980 706 56729
+2046 706 29215
+2322 706 22690
+2323 706 22690
+2324 706 22690
+2325 706 22690
+2326 706 22690
+2327 706 22690
+2328 706 43196
+2329 706 59453
+2330 706 42016
+2331 706 61007
+2341 706 27332
+2407 706 13774
+2485 706 6843
+3217 706 27852657
+629 707 1
+878 707 65520
+1697 707 36909
+1698 707 728
+1699 707 728
+1700 707 728
+1701 707 728
+1702 707 728
+1981 707 62873
+2044 707 6901
+2045 707 61149
+2046 707 47269
+2047 707 35277
+2058 707 38653
+2302 707 58690
+2309 707 54352
+2310 707 62305
+2311 707 39592
+2312 707 39592
+2313 707 40359
+2314 707 9333
+2316 707 42050
+2317 707 65054
+2318 707 44982
+2319 707 47170
+2320 707 10656
+2321 707 36585
+2322 707 37372
+2323 707 50408
+2324 707 50408
+2326 707 52272
+2327 707 38682
+2328 707 3071
+2329 707 17712
+2330 707 55040
+2331 707 18455
+2332 707 18758
+2333 707 29036
+2334 707 29036
+2335 707 29036
+2337 707 39895
+2338 707 41989
+2339 707 35189
+2340 707 19326
+2341 707 62197
+2342 707 1978
+2398 707 62568
+2399 707 2884
+2400 707 2884
+2401 707 2884
+2402 707 44983
+2404 707 24347
+2405 707 40132
+2406 707 31021
+2407 707 25704
+2408 707 28520
+2419 707 24385
+2476 707 42385
+2477 707 2895
+2478 707 2895
+2479 707 2895
+2480 707 43602
+2481 707 432
+2482 707 47114
+2483 707 2757
+2484 707 16511
+2485 707 7364
+2486 707 60716
+2497 707 21681
+2509 707 52925
+3218 707 27852657
+630 708 1
+879 708 65520
+1694 708 63403
+1697 708 53596
+1698 708 5810
+1699 708 5810
+1700 708 5810
+1701 708 5810
+1702 708 5810
+1981 708 23290
+2044 708 54183
+2045 708 24771
+2046 708 58245
+2047 708 7635
+2058 708 55676
+2302 708 39775
+2308 708 57590
+2309 708 60297
+2310 708 44227
+2311 708 28171
+2312 708 28171
+2313 708 55502
+2314 708 62465
+2316 708 13725
+2317 708 56142
+2318 708 31922
+2319 708 36254
+2320 708 45152
+2321 708 16981
+2322 708 31329
+2323 708 20115
+2324 708 45797
+2326 708 25118
+2327 708 8914
+2328 708 1803
+2329 708 52036
+2330 708 47725
+2331 708 30744
+2332 708 28557
+2333 708 20853
+2334 708 27563
+2335 708 1690
+2337 708 41838
+2338 708 5750
+2339 708 36074
+2340 708 36577
+2341 708 50445
+2342 708 4777
+2398 708 4372
+2399 708 42802
+2400 708 34829
+2401 708 10929
+2402 708 55564
+2404 708 14089
+2405 708 40743
+2406 708 32284
+2407 708 43598
+2408 708 64796
+2419 708 37675
+2476 708 61161
+2477 708 41347
+2478 708 50642
+2479 708 54493
+2480 708 16275
+2481 708 41198
+2482 708 34889
+2483 708 25994
+2484 708 65177
+2485 708 36563
+2486 708 63173
+2497 708 21305
+2509 708 33842
+3219 708 27852657
+631 709 1
+880 709 65520
+1694 709 2118
+1697 709 42254
+1698 709 59711
+1699 709 59711
+1700 709 59711
+1701 709 59711
+1702 709 59711
+1981 709 59711
+2044 709 52501
+2045 709 32161
+2046 709 27551
+2047 709 51816
+2058 709 51816
+2302 709 17312
+2308 709 14781
+2309 709 49475
+2310 709 9252
+2311 709 29999
+2312 709 29999
+2313 709 1532
+2314 709 53927
+2316 709 13964
+2317 709 46306
+2318 709 17608
+2319 709 34889
+2320 709 60907
+2321 709 30908
+2322 709 44518
+2323 709 52330
+2324 709 26648
+2326 709 29077
+2327 709 62501
+2328 709 7016
+2329 709 33519
+2330 709 62924
+2331 709 32016
+2332 709 25569
+2333 709 34088
+2334 709 27378
+2335 709 58256
+2337 709 62966
+2338 709 35155
+2339 709 22493
+2340 709 60797
+2341 709 62768
+2342 709 4001
+2398 709 59975
+2399 709 59684
+2400 709 2136
+2401 709 17733
+2402 709 53765
+2404 709 30751
+2405 709 14588
+2406 709 9371
+2407 709 49278
+2408 709 12911
+2419 709 28381
+2476 709 44334
+2477 709 58979
+2478 709 49684
+2479 709 24414
+2480 709 56780
+2481 709 55607
+2482 709 39597
+2483 709 19006
+2484 709 25097
+2485 709 24853
+2486 709 40323
+2497 709 13086
+2509 709 62336
+3220 709 27852657
+632 710 1
+881 710 65520
+882 710 65520
+1947 710 6403
+1948 710 27898
+1956 710 36645
+1963 710 43995
+1965 710 19348
+1968 710 12050
+1969 710 12050
+1970 710 12050
+1971 710 41908
+1972 710 41908
+1973 710 20382
+1974 710 6172
+1977 710 31573
+1978 710 25310
+1979 710 25310
+1980 710 37360
+1981 710 25310
+2037 710 58297
+2038 710 58297
+2039 710 36771
+2040 710 38950
+2041 710 173
+2043 710 31573
+2044 710 25310
+2045 710 25310
+2046 710 37360
+2047 710 50620
+2058 710 25310
+2301 710 28307
+2302 710 54402
+2303 710 36310
+2307 710 46899
+2308 710 56413
+2309 710 16987
+2310 710 34912
+2311 710 25673
+2312 710 25673
+2313 710 62140
+2314 710 62140
+2316 710 56537
+2317 710 21661
+2318 710 20643
+2319 710 41598
+2320 710 42657
+2321 710 16984
+2322 710 4902
+2323 710 4902
+2324 710 19063
+2326 710 51908
+2327 710 18145
+2328 710 27718
+2329 710 37822
+2330 710 20726
+2331 710 3742
+2332 710 50190
+2333 710 50190
+2334 710 64351
+2335 710 36856
+2337 710 22609
+2338 710 20593
+2339 710 884
+2340 710 38795
+2341 710 5850
+2342 710 2108
+2398 710 7803
+2399 710 7803
+2400 710 9502
+2401 710 31024
+2402 710 47686
+2404 710 28077
+2405 710 11543
+2406 710 31014
+2407 710 19757
+2408 710 5055
+2419 710 43901
+2476 710 63182
+2477 710 63182
+2478 710 61105
+2479 710 29719
+2480 710 34011
+2481 710 49955
+2482 710 28563
+2483 710 52572
+2484 710 35553
+2485 710 26343
+2486 710 34757
+2497 710 29662
+2509 710 6227
+3221 710 27852657
+633 711 1
+2408 711 65520
+3222 711 27852657
+634 712 1
+635 712 8550
+636 712 46662
+637 712 24909
+638 712 24248
+639 712 24248
+823 712 226
+886 712 50239
+887 712 3817
+888 712 25415
+899 712 49437
+1950 712 36940
+1951 712 36940
+1952 712 18261
+1953 712 18261
+1955 712 26143
+1956 712 26143
+1957 712 26143
+1958 712 29777
+1959 712 37323
+1960 712 383
+1961 712 16025
+1962 712 16025
+1963 712 16025
+1965 712 35106
+1966 712 35106
+1967 712 46994
+1968 712 63319
+1969 712 48395
+1970 712 48012
+1971 712 4949
+1972 712 4949
+1973 712 4949
+1974 712 4949
+1976 712 49649
+1977 712 24956
+1978 712 43993
+1979 712 31659
+1980 712 45429
+1981 712 55829
+2037 712 33594
+2038 712 33594
+2039 712 33594
+2040 712 33594
+2041 712 33594
+2043 712 47708
+2044 712 19185
+2045 712 16063
+2046 712 55255
+2047 712 61852
+2058 712 27244
+2398 712 10651
+2399 712 10651
+2400 712 10651
+2401 712 10651
+2402 712 10651
+2403 712 10651
+2404 712 8832
+2405 712 42979
+2406 712 51802
+2407 712 31688
+2408 712 6548
+2419 712 63951
+2497 712 40549
+3223 712 27852657
+635 713 1
+636 713 1
+637 713 1
+638 713 1
+639 713 1
+823 713 1
+884 713 65520
+885 713 65520
+886 713 65520
+887 713 65520
+888 713 65520
+899 713 65520
+1698 713 6
+1699 713 6
+1700 713 6
+1701 713 6
+1702 713 6
+1958 713 16389
+1965 713 51087
+1967 713 16
+1968 713 59866
+1969 713 29440
+1970 713 29440
+1971 713 9809
+1972 713 9809
+1973 713 9809
+1974 713 9809
+1977 713 48100
+1978 713 43260
+1979 713 10932
+1980 713 5230
+1981 713 49506
+2037 713 9809
+2038 713 9809
+2039 713 9809
+2040 713 9809
+2041 713 9809
+2043 713 64483
+2044 713 59643
+2045 713 27315
+2046 713 38002
+2047 713 49861
+2058 713 361
+2307 713 43583
+2308 713 43583
+2309 713 43583
+2310 713 43583
+2311 713 32693
+2312 713 32693
+2313 713 13973
+2314 713 13973
+2316 713 41495
+2317 713 41495
+2318 713 41495
+2319 713 4091
+2320 713 17677
+2321 713 50505
+2322 713 18019
+2323 713 18019
+2324 713 18019
+2326 713 48948
+2327 713 48948
+2328 713 24577
+2329 713 61491
+2330 713 35052
+2331 713 50068
+2332 713 37631
+2333 713 37631
+2334 713 37631
+2335 713 37631
+2337 713 55670
+2338 713 34643
+2339 713 49085
+2340 713 40208
+2341 713 10077
+2342 713 25532
+2398 713 62454
+2399 713 62454
+2400 713 62454
+2401 713 62454
+2402 713 62454
+2404 713 50563
+2405 713 46347
+2406 713 36640
+2407 713 16432
+2408 713 31133
+2419 713 46556
+2476 713 64855
+2477 713 64855
+2478 713 64855
+2479 713 64855
+2480 713 64855
+2481 713 64855
+2482 713 28663
+2483 713 51679
+2484 713 33548
+2485 713 54222
+2486 713 49832
+2497 713 689
+2509 713 2143
+3224 713 27852657
+636 714 1
+637 714 1
+638 714 1
+639 714 1
+823 714 1
+885 714 65520
+886 714 65520
+887 714 65520
+888 714 65520
+899 714 65520
+1697 714 22075
+1698 714 39816
+1699 714 54612
+1700 714 26562
+1701 714 34292
+1702 714 34292
+1981 714 33113
+2044 714 40780
+2045 714 35000
+2046 714 18139
+2047 714 26496
+2058 714 27675
+2311 714 64035
+2312 714 64035
+2313 714 485
+2314 714 485
+2316 714 63420
+2317 714 63420
+2318 714 63420
+2319 714 1718
+2320 714 14586
+2321 714 16072
+2322 714 11100
+2323 714 11100
+2324 714 11100
+2326 714 186
+2327 714 186
+2328 714 43732
+2329 714 14471
+2330 714 56333
+2331 714 40261
+2332 714 5779
+2333 714 5779
+2334 714 5779
+2335 714 5779
+2337 714 20702
+2338 714 35927
+2339 714 51315
+2340 714 5687
+2341 714 2298
+2342 714 31130
+2398 714 7017
+2399 714 7017
+2400 714 7017
+2401 714 7017
+2402 714 7017
+2404 714 35176
+2405 714 8652
+2406 714 29360
+2407 714 32182
+2408 714 45795
+2419 714 4545
+2476 714 14635
+2477 714 14635
+2478 714 14635
+2479 714 14635
+2480 714 14635
+2481 714 14635
+2482 714 32883
+2483 714 56281
+2484 714 61777
+2485 714 38969
+2486 714 65317
+2497 714 33756
+2509 714 14719
+3225 714 27852657
+637 715 1
+821 715 10234
+822 715 10099
+823 715 32024
+888 715 32024
+1671 715 19221
+1672 715 19221
+1673 715 56103
+1674 715 56103
+1676 715 5114
+1677 715 5114
+1678 715 5114
+1679 715 40240
+1680 715 9875
+1681 715 56175
+1682 715 20870
+1683 715 20870
+1684 715 20870
+1686 715 36137
+1687 715 36137
+1688 715 40583
+1689 715 48282
+1690 715 4148
+1691 715 13494
+1692 715 41383
+1693 715 41383
+1694 715 41383
+1695 715 41383
+1697 715 63516
+1698 715 13984
+1699 715 61791
+1700 715 65209
+1701 715 5735
+1702 715 57762
+1971 715 23287
+1972 715 23287
+1973 715 23287
+1974 715 23287
+1975 715 23287
+1977 715 25986
+1978 715 53399
+1979 715 38715
+1980 715 16183
+1981 715 51180
+2047 715 35668
+2332 715 41388
+2333 715 41388
+2334 715 41388
+2335 715 41388
+2336 715 41388
+2337 715 41388
+2338 715 32646
+2339 715 37955
+2340 715 10681
+2341 715 27804
+2342 715 33471
+2408 715 4501
+2486 715 35102
+3226 715 27852657
+638 716 1
+639 716 1
+821 716 22394
+822 716 30560
+823 716 38767
+888 716 38766
+1671 716 51103
+1672 716 51103
+1673 716 28487
+1674 716 28487
+1676 716 23802
+1677 716 23802
+1678 716 23802
+1679 716 54464
+1680 716 13107
+1681 716 27525
+1682 716 10270
+1683 716 10270
+1684 716 10270
+1686 716 58306
+1687 716 58306
+1688 716 42963
+1689 716 5339
+1690 716 7814
+1691 716 45810
+1692 716 64788
+1693 716 64788
+1694 716 64788
+1695 716 64788
+1697 716 25159
+1698 716 48831
+1699 716 63733
+1700 716 16421
+1701 716 23915
+1702 716 43626
+1971 716 50232
+1972 716 50232
+1973 716 50232
+1974 716 50232
+1975 716 50232
+1977 716 14825
+1978 716 19291
+1979 716 28248
+1980 716 20311
+1981 716 56729
+2047 716 29215
+2332 716 22690
+2333 716 22690
+2334 716 22690
+2335 716 22690
+2336 716 22690
+2337 716 22690
+2338 716 43196
+2339 716 59453
+2340 716 42016
+2341 716 61007
+2342 716 27332
+2408 716 13774
+2486 716 6843
+3227 716 27852657
+640 717 1
+642 717 62791
+643 717 62791
+655 717 1
+656 717 45435
+657 717 1594
+658 717 64385
+667 717 58791
+671 717 27043
+672 717 32637
+674 717 59154
+678 717 29501
+685 717 59154
+689 717 29501
+691 717 39230
+701 717 23134
+703 717 22912
+729 717 39867
+767 717 34663
+832 717 53508
+837 717 6276
+1990 717 31303
+1991 717 16642
+1994 717 55930
+1995 717 34214
+1996 717 47826
+2001 717 14072
+2002 717 21609
+2007 717 35326
+2013 717 46295
+2014 717 15239
+2015 717 59807
+2016 717 50472
+2017 717 50472
+2018 717 15153
+2019 717 10447
+2021 717 17117
+2022 717 56492
+2023 717 57884
+2024 717 7934
+2025 717 18448
+2026 717 33497
+2027 717 29157
+2028 717 17366
+2029 717 65432
+2031 717 36461
+2032 717 34792
+2033 717 64732
+2034 717 53543
+2035 717 21919
+2036 717 53943
+2037 717 16169
+2038 717 12813
+2039 717 797
+2040 717 58890
+2042 717 7578
+2043 717 53531
+2044 717 16335
+2045 717 54889
+2046 717 19925
+2047 717 31503
+2048 717 57823
+2049 717 54048
+2050 717 13479
+2051 717 48296
+2052 717 18804
+2054 717 55008
+2055 717 46834
+2056 717 37818
+2057 717 55239
+2058 717 19857
+2059 717 53875
+2409 717 4776
+2410 717 51857
+2411 717 56730
+2412 717 6289
+2413 717 14684
+2414 717 50012
+2415 717 33444
+2416 717 27708
+2417 717 11567
+2418 717 25202
+2419 717 5919
+2420 717 63920
+2498 717 24339
+3228 717 27852657
+641 718 1
+642 718 65503
+643 718 65503
+655 718 65520
+656 718 6422
+657 718 63570
+658 718 63552
+667 718 52742
+671 718 34402
+672 718 45212
+674 718 40960
+678 718 48452
+685 718 40960
+689 718 48452
+691 718 46585
+701 718 23891
+703 718 17237
+729 718 56252
+767 718 11891
+832 718 42372
+837 718 40622
+1990 718 43072
+1991 718 39940
+1994 718 15581
+1995 718 44611
+1996 718 21921
+2001 718 22201
+2002 718 34130
+2007 718 53505
+2013 718 9505
+2014 718 59710
+2015 718 38801
+2016 718 48738
+2017 718 48738
+2018 718 26360
+2019 718 36082
+2021 718 13659
+2022 718 39904
+2023 718 35746
+2024 718 10434
+2025 718 13664
+2026 718 30447
+2027 718 27713
+2028 718 58582
+2029 718 24359
+2031 718 60192
+2032 718 65329
+2033 718 48829
+2034 718 24220
+2035 718 35327
+2036 718 4880
+2037 718 20114
+2038 718 26544
+2039 718 25858
+2040 718 56106
+2042 718 48425
+2043 718 13353
+2044 718 56292
+2045 718 43533
+2046 718 31166
+2047 718 26286
+2048 718 54947
+2049 718 12670
+2050 718 55502
+2051 718 60828
+2052 718 16349
+2054 718 42245
+2055 718 1966
+2056 718 50767
+2057 718 39369
+2058 718 3331
+2059 718 42566
+2409 718 33461
+2410 718 10554
+2411 718 9339
+2412 718 24130
+2413 718 61271
+2414 718 26435
+2415 718 53163
+2416 718 37774
+2417 718 58598
+2418 718 13603
+2419 718 53724
+2420 718 50176
+2498 718 21143
+3229 718 27852657
+642 719 1
+643 719 1
+652 719 57447
+653 719 5371
+657 719 5370
+721 719 9596
+725 719 64265
+736 719 48768
+743 719 48768
+752 719 48768
+764 719 18615
+765 719 18615
+766 719 28211
+767 719 31676
+782 719 23133
+789 719 4960
+797 719 4960
+806 719 53728
+816 719 4960
+829 719 18615
+830 719 18615
+831 719 28211
+832 719 31676
+836 719 31676
+847 719 23133
+854 719 4960
+862 719 4960
+871 719 53728
+881 719 9920
+892 719 4960
+1710 719 30878
+1711 719 30878
+1712 719 64188
+1713 719 19977
+1714 719 54620
+1715 719 13564
+1716 719 3620
+1717 719 45713
+1718 719 56614
+1725 719 13564
+1726 719 3620
+1727 719 7723
+1728 719 9512
+1732 719 18419
+1740 719 13564
+1741 719 3620
+1742 719 37901
+1743 719 46977
+1747 719 7942
+1752 719 55044
+1762 719 14312
+1763 719 49012
+1767 719 1793
+1772 719 30625
+1789 719 28171
+1790 719 62871
+1794 719 15652
+1799 719 62786
+1805 719 64681
+1812 719 64681
+1822 719 40375
+1823 719 48376
+1825 719 52476
+1829 719 5257
+1834 719 21570
+1840 719 6447
+1847 719 20600
+1855 719 21440
+1867 719 11441
+1868 719 19442
+1869 719 5360
+1874 719 54427
+1879 719 19531
+1885 719 36625
+1892 719 63246
+1900 719 30822
+1909 719 9382
+1922 719 34485
+1923 719 42486
+1924 719 28404
+1925 719 65191
+1934 719 64867
+1940 719 44381
+1947 719 27402
+1955 719 38793
+1964 719 54027
+1974 719 44645
+1988 719 32798
+1989 719 42089
+1990 719 33041
+1991 719 26134
+1995 719 15619
+2006 719 505
+2013 719 11974
+2021 719 13127
+2030 719 9511
+2040 719 30639
+2051 719 51515
+2349 719 39149
+2350 719 45662
+2351 719 14070
+2352 719 18649
+2356 719 17438
+2361 719 32997
+2367 719 12696
+2374 719 13413
+2382 719 36863
+2391 719 3061
+2401 719 62788
+2412 719 59003
+2490 719 61319
+3230 719 27852657
+643 720 1
+685 720 47761
+697 720 63751
+722 720 34851
+767 720 37939
+832 720 37939
+993 720 54862
+1021 720 16015
+1026 720 12259
+1033 720 31238
+1048 720 51478
+1068 720 51478
+1098 720 50978
+1099 720 53720
+1101 720 60560
+1109 720 1875
+1120 720 50826
+1136 720 39580
+1157 720 1051
+1188 720 15094
+1232 720 64044
+1233 720 42026
+1234 720 42026
+1244 720 54467
+1258 720 39438
+1276 720 18294
+1301 720 10566
+1334 720 44351
+1379 720 29257
+1437 720 14531
+1438 720 36432
+1439 720 36432
+1440 720 49948
+1464 720 40426
+1484 720 23804
+1511 720 56919
+1546 720 62768
+1591 720 60618
+1646 720 31361
+1715 720 44233
+1716 720 37555
+1717 720 37555
+1718 720 44123
+1728 720 57961
+1763 720 23509
+1790 720 58864
+1825 720 5802
+1870 720 62388
+1925 720 41206
+1991 720 38433
+2075 720 2137
+2076 720 13314
+2077 720 13314
+2078 720 31102
+2088 720 34174
+2103 720 37721
+2123 720 28816
+2150 720 3599
+2186 720 15846
+2231 720 61686
+2286 720 10816
+2352 720 64561
+2430 720 34249
+3231 720 27852657
+644 721 1
+646 721 65520
+648 721 65519
+649 721 65520
+651 721 65519
+652 721 65519
+653 721 65520
+655 721 65519
+656 721 65519
+657 721 65519
+658 721 65520
+1719 721 54601
+1721 721 10920
+1723 721 21840
+1724 721 10920
+1726 721 21840
+1727 721 21840
+1728 721 10920
+1730 721 21840
+1731 721 21840
+1732 721 21840
+1733 721 10920
+1734 721 54601
+1736 721 10920
+1738 721 21840
+1739 721 10920
+1743 721 54601
+1745 721 21840
+1746 721 21840
+1748 721 10920
+1752 721 43681
+1753 721 54601
+1754 721 54601
+1922 721 54603
+1923 721 12821
+1924 721 47242
+1925 721 47242
+1988 721 54603
+1989 721 12821
+1990 721 47242
+1991 721 47242
+1993 721 1898
+1994 721 21837
+1995 721 47241
+1996 721 65520
+2029 721 29123
+2039 721 29123
+2040 721 10924
+2050 721 29123
+2051 721 10924
+2052 721 10924
+2343 721 47776
+2344 721 65518
+2345 721 17742
+2346 721 53235
+2347 721 17505
+2348 721 65284
+2349 721 39586
+2350 721 2135
+2351 721 30981
+2352 721 31218
+2353 721 13650
+2354 721 17148
+2355 721 11809
+2356 721 13472
+2357 721 47775
+2358 721 13650
+2359 721 47181
+2360 721 41842
+2361 721 55790
+2362 721 6826
+2363 721 24571
+2390 721 55515
+2400 721 55515
+2401 721 51882
+2411 721 18658
+2412 721 53695
+2413 721 42774
+2487 721 23206
+2488 721 41692
+2489 721 47122
+2490 721 34518
+2491 721 15924
+2492 721 50733
+2498 721 59382
+2510 721 55914
+3232 721 27852657
+645 722 1
+646 722 1
+648 722 1
+651 722 1
+655 722 1
+1720 722 54601
+1721 722 54601
+1723 722 54601
+1726 722 54601
+1730 722 54601
+1737 722 10920
+1738 722 10920
+1739 722 10920
+1740 722 10920
+1742 722 10920
+1745 722 43681
+1747 722 54601
+1748 722 54601
+1750 722 54601
+1752 722 54601
+1753 722 43681
+1754 722 54601
+1922 722 30031
+1923 722 7241
+1924 722 11871
+1925 722 11871
+1988 722 30031
+1989 722 7241
+1990 722 11871
+1991 722 11871
+1993 722 20891
+1994 722 54602
+1995 722 11871
+2029 722 1
+2039 722 1
+2040 722 32762
+2050 722 1
+2051 722 32762
+2052 722 32762
+2344 722 32761
+2345 722 32761
+2346 722 41633
+2347 722 11722
+2348 722 44482
+2349 722 54601
+2350 722 46026
+2351 722 31604
+2352 722 52643
+2353 722 60517
+2354 722 64228
+2355 722 21852
+2356 722 44909
+2357 722 57787
+2358 722 30485
+2359 722 21911
+2360 722 45057
+2361 722 23750
+2362 722 8419
+2363 722 16153
+2390 722 24572
+2400 722 24572
+2401 722 34585
+2411 722 61427
+2412 722 18202
+2413 722 30032
+2487 722 17973
+2488 722 26475
+2489 722 19324
+2490 722 53440
+2491 722 21613
+2492 722 56762
+2498 722 6144
+2510 722 23833
+3233 722 27852657
+646 723 1
+648 723 19751
+651 723 47257
+655 723 47257
+717 723 65490
+723 723 39509
+734 723 13825
+741 723 13825
+750 723 13825
+759 723 33084
+760 723 33084
+762 723 33053
+765 723 2654
+780 723 56541
+787 723 13831
+795 723 13831
+804 723 27656
+814 723 13831
+824 723 33084
+825 723 33084
+827 723 33053
+830 723 2654
+834 723 2654
+845 723 56541
+852 723 13831
+860 723 13831
+869 723 27656
+879 723 27662
+890 723 13831
+1703 723 60278
+1704 723 60278
+1705 723 38602
+1706 723 61338
+1708 723 1060
+1710 723 29308
+1711 723 6941
+1713 723 9520
+1716 723 8460
+1720 723 29308
+1721 723 50089
+1723 723 62756
+1726 723 34231
+1730 723 25771
+1735 723 29308
+1736 723 50089
+1738 723 61334
+1741 723 19087
+1745 723 39868
+1750 723 14097
+1758 723 18879
+1761 723 9697
+1765 723 44854
+1770 723 31832
+1785 723 18569
+1788 723 9387
+1792 723 44544
+1797 723 1158
+1803 723 3470
+1810 723 3470
+1817 723 43036
+1818 723 57652
+1823 723 35948
+1827 723 5584
+1832 723 18537
+1838 723 55269
+1845 723 20984
+1853 723 17514
+1862 723 33079
+1863 723 47695
+1865 723 51165
+1872 723 59869
+1877 723 26180
+1883 723 53847
+1890 723 14858
+1898 723 17758
+1907 723 244
+1917 723 47087
+1918 723 61703
+1920 723 65173
+1923 723 23656
+1932 723 26102
+1938 723 65488
+1945 723 41246
+1953 723 38651
+1962 723 36561
+1972 723 36317
+1983 723 21204
+1984 723 20105
+1986 723 25870
+1989 723 52159
+1993 723 20797
+2004 723 6494
+2011 723 17617
+2019 723 12074
+2028 723 58212
+2038 723 20854
+2049 723 50058
+2344 723 19172
+2345 723 6266
+2347 723 54192
+2350 723 35122
+2354 723 29304
+2359 723 7132
+2365 723 50515
+2372 723 40533
+2380 723 63784
+2389 723 42736
+2399 723 18310
+2410 723 20117
+2488 723 23010
+3234 723 27852657
+647 724 1
+648 724 1
+649 724 1
+650 724 1
+651 724 1
+652 724 2
+653 724 1
+654 724 1
+655 724 1
+656 724 2
+657 724 2
+658 724 1
+1722 724 32761
+1723 724 32761
+1724 724 32761
+1725 724 32761
+1726 724 32761
+1727 724 1
+1728 724 32761
+1729 724 32761
+1730 724 32761
+1731 724 1
+1732 724 1
+1733 724 32761
+1737 724 32761
+1738 724 32761
+1739 724 32761
+1740 724 32761
+1741 724 32761
+1742 724 1
+1743 724 32761
+1744 724 1
+1745 724 1
+1746 724 2
+1747 724 2
+1748 724 32762
+1749 724 32761
+1750 724 32761
+1751 724 1
+1752 724 1
+1753 724 32762
+1754 724 32761
+1865 724 2
+1866 724 2
+1920 724 2
+1921 724 2
+1923 724 49142
+1924 724 49142
+1925 724 49140
+1986 724 2
+1987 724 2
+1989 724 49142
+1990 724 49142
+1991 724 49140
+1993 724 49142
+1994 724 32761
+1995 724 16380
+1996 724 32761
+2344 724 1
+2345 724 1
+2346 724 24572
+2347 724 24573
+2348 724 24572
+2349 724 24572
+2350 724 40953
+2351 724 3
+2352 724 40952
+2353 724 49143
+2354 724 3
+2355 724 57335
+2356 724 8194
+2357 724 32763
+2358 724 49142
+2359 724 2
+2360 724 57333
+2361 724 8192
+2362 724 2
+2363 724 32761
+2487 724 40951
+2488 724 48120
+2489 724 20478
+2490 724 44022
+2491 724 32761
+2510 724 4095
+3235 724 27852657
+647 725 1
+648 725 1
+649 725 1
+650 725 1
+651 725 1
+652 725 2
+653 725 1
+654 725 1
+655 725 1
+656 725 2
+657 725 2
+658 725 1
+2082 725 16380
+2083 725 16380
+2084 725 16380
+2085 725 16380
+2086 725 16380
+2087 725 32760
+2088 725 16380
+2089 725 16380
+2090 725 16380
+2091 725 32760
+2092 725 32760
+2093 725 16380
+2097 725 16380
+2098 725 16380
+2099 725 16380
+2100 725 16380
+2101 725 16380
+2102 725 32760
+2103 725 16380
+2104 725 32760
+2105 725 32760
+2106 725 65520
+2107 725 65520
+2108 725 49140
+2109 725 16380
+2110 725 16380
+2111 725 32760
+2112 725 32760
+2113 725 49140
+2114 725 16380
+2226 725 65519
+2227 725 65519
+2281 725 65519
+2282 725 65519
+2284 725 16379
+2285 725 16379
+2286 725 16381
+2346 725 1
+2347 725 65520
+2348 725 65520
+2349 725 1
+2350 725 16380
+2351 725 16381
+2352 725 16382
+2353 725 24572
+2354 725 40951
+2355 725 40953
+2356 725 57334
+2357 725 40952
+2422 725 65520
+2423 725 65520
+2424 725 49140
+2425 725 49139
+2426 725 49140
+2427 725 49140
+2428 725 32759
+2429 725 16379
+2430 725 32760
+2431 725 36855
+2432 725 20474
+2433 725 53235
+2434 725 36855
+2435 725 4095
+2436 725 36855
+2437 725 20474
+2438 725 53235
+2439 725 36855
+2440 725 8190
+2441 725 4095
+2491 725 8190
+2499 725 512
+2500 725 58864
+2501 725 44532
+2502 725 20988
+2503 725 2048
+2504 725 26618
+2511 725 17404
+3236 725 27852657
+648 726 1
+649 726 1
+652 726 31036
+653 726 31035
+656 726 10345
+657 726 31035
+1723 726 8192
+1724 726 8192
+1726 726 20692
+1727 726 18537
+1728 726 10345
+1730 726 20692
+1731 726 42245
+1732 726 31037
+1733 726 20692
+1742 726 46146
+1743 726 46146
+1746 726 62393
+1747 726 9803
+1748 726 36074
+1750 726 44829
+1751 726 20148
+1752 726 44287
+1753 726 10072
+1754 726 60211
+1994 726 55139
+1995 726 27248
+1996 726 27248
+2029 726 58164
+2031 726 20401
+2034 726 17492
+2035 726 17492
+2036 726 17492
+2037 726 52319
+2038 726 52319
+2039 726 44962
+2040 726 43194
+2043 726 19728
+2044 726 25855
+2045 726 25855
+2046 726 43347
+2047 726 25855
+2048 726 52319
+2049 726 52319
+2050 726 44962
+2051 726 43194
+2052 726 43194
+2054 726 19728
+2055 726 25855
+2056 726 25855
+2057 726 43347
+2058 726 51710
+2059 726 25855
+2344 726 56470
+2345 726 56470
+2346 726 2431
+2347 726 31838
+2348 726 40889
+2349 726 56994
+2350 726 12701
+2351 726 49491
+2352 726 8602
+2353 726 37347
+2354 726 26480
+2355 726 12429
+2356 726 31616
+2357 726 2323
+2358 726 37347
+2359 726 12068
+2360 726 51272
+2361 726 34720
+2362 726 31245
+2363 726 28922
+2366 726 7498
+2367 726 29596
+2368 726 55647
+2369 726 32626
+2373 726 55897
+2374 726 12474
+2375 726 38525
+2376 726 41555
+2377 726 9888
+2378 726 9888
+2379 726 11456
+2380 726 39240
+2382 726 3796
+2383 726 29847
+2384 726 54975
+2385 726 15839
+2386 726 47673
+2387 726 37785
+2388 726 56270
+2389 726 18533
+2390 726 38421
+2392 726 50095
+2393 726 17200
+2394 726 64959
+2395 726 26780
+2396 726 28435
+2397 726 56171
+2398 726 33989
+2399 726 61773
+2400 726 16140
+2401 726 26975
+2403 726 39523
+2404 726 52285
+2405 726 49973
+2406 726 3870
+2407 726 17363
+2408 726 26713
+2409 726 29847
+2410 726 11453
+2411 726 60821
+2412 726 17805
+2413 726 60823
+2415 726 31496
+2416 726 61228
+2417 726 12087
+2418 726 22828
+2419 726 19357
+2420 726 58165
+2487 726 8890
+2488 726 51409
+2489 726 40929
+2490 726 45686
+2491 726 49815
+2492 726 9906
+2493 726 50857
+2494 726 49905
+2495 726 35949
+2496 726 51953
+2497 726 11579
+2498 726 56478
+2510 726 50903
+3237 726 27852657
+649 727 1
+1731 727 22854
+1732 727 2228
+1733 727 2228
+1748 727 41784
+1753 727 17814
+1754 727 43779
+1759 727 40284
+1763 727 48634
+1768 727 51211
+1790 727 23397
+1795 727 10927
+1801 727 21655
+1830 727 34324
+1836 727 37670
+1866 727 36100
+1881 727 40168
+1921 727 36100
+1925 727 50223
+1987 727 10752
+1991 727 10778
+1996 727 23360
+2348 727 8695
+2351 727 12474
+2352 727 45324
+2355 727 859
+2356 727 26824
+2357 727 58982
+2362 727 27005
+2363 727 45692
+2368 727 30461
+2374 727 878
+2375 727 18948
+2376 727 62254
+2377 727 29740
+2378 727 29740
+2379 727 58542
+2380 727 13241
+2382 727 59075
+2383 727 28303
+2384 727 3232
+2385 727 19425
+2386 727 64737
+2387 727 34997
+2388 727 49830
+2389 727 39583
+2390 727 3967
+2392 727 53632
+2393 727 26217
+2394 727 47004
+2395 727 38899
+2396 727 10028
+2397 727 40552
+2398 727 59706
+2399 727 20057
+2400 727 12493
+2401 727 26413
+2403 727 14686
+2404 727 57787
+2405 727 56239
+2406 727 57185
+2407 727 48531
+2408 727 7979
+2409 727 2150
+2410 727 47244
+2411 727 14585
+2412 727 38867
+2413 727 56919
+2415 727 6618
+2416 727 27426
+2417 727 37935
+2418 727 16450
+2419 727 12311
+2420 727 4332
+2487 727 39456
+2488 727 48184
+2489 727 65303
+2490 727 57709
+2491 727 25755
+2492 727 12331
+2493 727 12609
+2494 727 58451
+2495 727 3803
+2496 727 61439
+2497 727 46395
+2498 727 5939
+2510 727 2263
+3238 727 27852657
+650 728 1
+651 728 1
+652 728 1
+653 728 1
+657 728 1
+1725 728 54601
+1726 728 54601
+1727 728 54601
+1728 728 54601
+1732 728 54601
+1740 728 54601
+1745 728 10920
+1746 728 10920
+1748 728 10920
+1750 728 10920
+1751 728 10920
+1752 728 10920
+1753 728 21840
+1754 728 10920
+1922 728 35490
+1923 728 24570
+1924 728 1
+1925 728 1
+1988 728 35490
+1989 728 24570
+1990 728 1
+1991 728 1
+1993 728 54601
+1994 728 3
+1995 728 43682
+2029 728 43680
+2039 728 43680
+2040 728 65520
+2050 728 43680
+2051 728 65520
+2052 728 65520
+2344 728 32761
+2345 728 32761
+2346 728 23888
+2347 728 23888
+2348 728 56648
+2349 728 58696
+2350 728 32078
+2351 728 49823
+2352 728 58696
+2353 728 5005
+2354 728 43908
+2355 728 61653
+2356 728 43226
+2357 728 37765
+2358 728 5005
+2359 728 61653
+2360 728 13877
+2361 728 22067
+2362 728 21612
+2363 728 49368
+2390 728 5459
+2400 728 5459
+2401 728 60968
+2411 728 46410
+2412 728 6369
+2413 728 60060
+2487 728 47548
+2488 728 54032
+2489 728 36288
+2490 728 60630
+2491 728 60971
+2492 728 43567
+2498 728 61425
+2510 728 20019
+3239 728 27852657
+651 729 1
+652 729 55177
+653 729 55177
+655 729 1
+656 729 40233
+657 729 55177
+1723 729 65518
+1724 729 65518
+1726 729 58622
+1727 729 62070
+1728 729 62073
+1730 729 58622
+1731 729 7757
+1732 729 573
+1733 729 4021
+1742 729 14868
+1743 729 14868
+1746 729 14073
+1747 729 47982
+1748 729 19897
+1750 729 6899
+1751 729 6316
+1752 729 47409
+1753 729 27731
+1754 729 11855
+1994 729 65415
+1995 729 33810
+1996 729 33810
+2029 729 48619
+2031 729 28544
+2034 729 39771
+2035 729 39771
+2036 729 39771
+2037 729 43947
+2038 729 43947
+2039 729 27045
+2040 729 45796
+2043 729 22650
+2044 729 45447
+2045 729 45447
+2046 729 19697
+2047 729 45447
+2048 729 43947
+2049 729 43947
+2050 729 27045
+2051 729 45796
+2052 729 45796
+2054 729 22650
+2055 729 45447
+2056 729 45447
+2057 729 19697
+2058 729 25373
+2059 729 45447
+2344 729 3887
+2345 729 3887
+2346 729 10881
+2347 729 38264
+2348 729 34377
+2349 729 37057
+2350 729 38563
+2351 729 55183
+2352 729 20806
+2353 729 25573
+2354 729 46544
+2355 729 15271
+2356 729 61992
+2357 729 43988
+2358 729 25573
+2359 729 29376
+2360 729 13887
+2361 729 42916
+2362 729 29181
+2363 729 50714
+2366 729 37822
+2367 729 422
+2368 729 39797
+2369 729 38933
+2373 729 6646
+2374 729 34767
+2375 729 8621
+2376 729 47132
+2377 729 6570
+2378 729 6570
+2379 729 23515
+2380 729 56569
+2382 729 1409
+2383 729 40784
+2384 729 41895
+2385 729 64237
+2386 729 63522
+2387 729 56952
+2388 729 39217
+2389 729 6750
+2390 729 55968
+2392 729 25930
+2393 729 64863
+2394 729 29445
+2395 729 34174
+2396 729 25692
+2397 729 34261
+2398 729 55543
+2399 729 23076
+2400 729 6773
+2401 729 16506
+2403 729 56596
+2404 729 34303
+2405 729 33721
+2406 729 3128
+2407 729 57139
+2408 729 22878
+2409 729 41989
+2410 729 2361
+2411 729 29340
+2412 729 58797
+2413 729 3803
+2415 729 49871
+2416 729 23348
+2417 729 21350
+2418 729 30912
+2419 729 6063
+2420 729 48706
+2487 729 11201
+2488 729 15549
+2489 729 14712
+2490 729 52034
+2491 729 30184
+2492 729 16732
+2493 729 22381
+2494 729 14433
+2495 729 60344
+2496 729 1799
+2497 729 23716
+2498 729 34674
+2510 729 54144
+3240 729 27852657
+652 730 1
+656 730 65513
+657 730 62893
+658 730 62893
+667 730 50271
+671 730 9143
+672 730 21765
+674 730 18275
+678 730 62626
+685 730 18275
+689 730 62626
+691 730 53833
+701 730 15380
+703 730 16295
+729 730 15301
+767 730 58322
+832 730 57564
+837 730 18627
+1990 730 53930
+1991 730 2807
+1994 730 3543
+1995 730 18186
+1996 730 37542
+2001 730 42322
+2002 730 55275
+2007 730 37835
+2013 730 41015
+2014 730 32385
+2015 730 18472
+2016 730 65026
+2017 730 65026
+2018 730 19852
+2019 730 63571
+2021 730 3600
+2022 730 15718
+2023 730 22132
+2024 730 50307
+2025 730 52559
+2026 730 53054
+2027 730 3957
+2028 730 37708
+2029 730 17122
+2031 730 55280
+2032 730 43004
+2033 730 36303
+2034 730 47494
+2035 730 36516
+2036 730 48983
+2037 730 49142
+2038 730 53598
+2039 730 29957
+2040 730 14197
+2042 730 44478
+2043 730 41890
+2044 730 17169
+2045 730 37100
+2046 730 48549
+2047 730 65087
+2048 730 62308
+2049 730 15332
+2050 730 47378
+2051 730 19325
+2052 730 7507
+2054 730 51866
+2055 730 11222
+2056 730 7023
+2057 730 7675
+2058 730 18033
+2059 730 18467
+2409 730 3107
+2410 730 51492
+2411 730 3931
+2412 730 52243
+2413 730 31488
+2414 730 13698
+2415 730 43871
+2416 730 57279
+2417 730 34186
+2418 730 8215
+2419 730 59343
+2420 730 59043
+2498 730 58291
+3241 730 27852657
+653 731 1
+658 731 65520
+1731 731 25680
+1732 731 3950
+1733 731 3950
+1748 731 58188
+1753 731 32986
+1754 731 44269
+1763 731 23397
+1768 731 36384
+1790 731 23397
+1795 731 36384
+1801 731 51755
+1830 731 59781
+1836 731 8062
+1881 731 13611
+1925 731 20802
+1991 731 21530
+1996 731 20131
+2351 731 16977
+2352 731 58522
+2355 731 42726
+2356 731 2598
+2357 731 17341
+2362 731 38977
+2363 731 14078
+2368 731 17501
+2374 731 29054
+2375 731 2319
+2376 731 8468
+2377 731 4421
+2378 731 4421
+2379 731 16347
+2380 731 32236
+2382 731 43411
+2383 731 11980
+2384 731 52987
+2385 731 20668
+2386 731 12409
+2387 731 7988
+2388 731 50284
+2389 731 20142
+2390 731 55003
+2392 731 63211
+2393 731 65361
+2394 731 29236
+2395 731 44853
+2396 731 40180
+2397 731 32192
+2398 731 64429
+2399 731 44358
+2400 731 28973
+2401 731 29538
+2403 731 62429
+2404 731 24261
+2405 731 37776
+2406 731 11512
+2407 731 60814
+2408 731 28622
+2409 731 38283
+2410 731 24963
+2411 731 28286
+2412 731 58827
+2413 731 63826
+2415 731 25184
+2416 731 59983
+2417 731 40915
+2418 731 48146
+2419 731 7629
+2420 731 44528
+2487 731 26808
+2488 731 1418
+2489 731 59306
+2490 731 59945
+2491 731 36802
+2492 731 64996
+2493 731 22547
+2494 731 20007
+2495 731 63362
+2496 731 59656
+2497 731 9249
+2498 731 41862
+2510 731 8239
+3242 731 27852657
+654 732 1
+655 732 1
+656 732 1
+657 732 1
+658 732 1
+1729 732 54601
+1730 732 54601
+1731 732 54601
+1732 732 54601
+1733 732 54601
+1748 732 54601
+1749 732 10920
+1750 732 10920
+1751 732 10920
+1752 732 10920
+1753 732 10920
+1754 732 10920
+1922 732 60062
+1923 732 22316
+1924 732 65047
+1925 732 65047
+1988 732 60062
+1989 732 22316
+1990 732 65047
+1991 732 65047
+1993 732 27775
+1994 732 10920
+1995 732 54127
+1996 732 32761
+2029 732 1
+2039 732 1
+2040 732 32762
+2050 732 1
+2051 732 32762
+2052 732 32762
+2344 732 65520
+2345 732 65520
+2346 732 17745
+2347 732 65461
+2348 732 65462
+2349 732 43681
+2350 732 7359
+2351 732 1603
+2352 732 1662
+2353 732 37765
+2354 732 1443
+2355 732 7616
+2356 732 57173
+2357 732 2276
+2358 732 7735
+2359 732 36934
+2360 732 43107
+2361 732 62635
+2362 732 50961
+2363 732 48686
+2390 732 24572
+2400 732 24572
+2401 732 44595
+2411 732 61427
+2412 732 28212
+2413 732 51872
+2487 732 35946
+2488 732 4565
+2489 732 12236
+2490 732 61952
+2491 732 15925
+2492 732 910
+2498 732 6144
+2510 732 47152
+3243 732 27852657
+655 733 1
+656 733 19751
+657 733 47257
+658 733 47257
+724 733 65490
+726 733 39509
+737 733 13825
+744 733 13825
+753 733 13825
+768 733 33084
+769 733 33084
+770 733 33053
+771 733 2654
+783 733 56541
+790 733 13831
+798 733 13831
+807 733 27656
+817 733 13831
+833 733 33084
+834 733 33084
+835 733 33053
+836 733 2654
+837 733 2654
+848 733 56541
+855 733 13831
+863 733 13831
+872 733 27656
+882 733 27662
+893 733 13831
+1720 733 60278
+1721 733 60278
+1722 733 38602
+1723 733 61338
+1724 733 1060
+1725 733 29308
+1726 733 6941
+1727 733 9520
+1728 733 8460
+1729 733 29308
+1730 733 50089
+1731 733 62756
+1732 733 34231
+1733 733 25771
+1744 733 29308
+1745 733 50089
+1746 733 61334
+1747 733 19087
+1748 733 39868
+1753 733 14097
+1766 733 18879
+1767 733 9697
+1768 733 44854
+1773 733 31832
+1793 733 18569
+1794 733 9387
+1795 733 44544
+1800 733 1158
+1806 733 3470
+1813 733 3470
+1826 733 43036
+1827 733 57652
+1829 733 35948
+1830 733 5584
+1835 733 18537
+1841 733 55269
+1848 733 20984
+1856 733 17514
+1871 733 33079
+1872 733 47695
+1873 733 51165
+1875 733 59869
+1880 733 26180
+1886 733 53847
+1893 733 14858
+1901 733 17758
+1910 733 244
+1926 733 47087
+1927 733 61703
+1928 733 65173
+1929 733 23656
+1935 733 26102
+1941 733 65488
+1948 733 41246
+1956 733 38651
+1965 733 36561
+1975 733 36317
+1992 733 21204
+1993 733 20105
+1994 733 25870
+1995 733 52159
+1996 733 20797
+2007 733 6494
+2014 733 17617
+2022 733 12074
+2031 733 58212
+2041 733 20854
+2052 733 50058
+2353 733 19172
+2354 733 6266
+2355 733 54192
+2356 733 35122
+2357 733 29304
+2362 733 7132
+2368 733 50515
+2375 733 40533
+2383 733 63784
+2392 733 42736
+2402 733 18310
+2413 733 20117
+2491 733 23010
+3244 733 27852657
+656 734 1
+1731 734 8189
+1732 734 49138
+1733 734 49138
+1748 734 44016
+1753 734 49663
+1754 734 54785
+1768 734 33716
+1795 734 33716
+1801 734 31729
+1830 734 33716
+1836 734 46171
+1881 734 8948
+1996 734 17248
+2355 734 47835
+2356 734 10955
+2357 734 55590
+2362 734 55747
+2363 734 61575
+2368 734 56745
+2374 734 34360
+2375 734 63325
+2376 734 2955
+2377 734 27899
+2378 734 27899
+2379 734 34375
+2380 734 23029
+2382 734 4959
+2383 734 26590
+2384 734 57368
+2385 734 12976
+2386 734 23514
+2387 734 61136
+2388 734 43053
+2389 734 5699
+2390 734 61879
+2392 734 30622
+2393 734 48071
+2394 734 21260
+2395 734 44949
+2396 734 47176
+2397 734 51561
+2398 734 33879
+2399 734 24261
+2400 734 32415
+2401 734 49894
+2403 734 55583
+2404 734 61973
+2405 734 21508
+2406 734 4464
+2407 734 49865
+2408 734 63825
+2409 734 41148
+2410 734 61612
+2411 734 9653
+2412 734 9197
+2413 734 63291
+2415 734 63102
+2416 734 9967
+2417 734 4920
+2418 734 36304
+2419 734 2953
+2420 734 4649
+2487 734 60264
+2488 734 17026
+2489 734 25655
+2490 734 51153
+2491 734 33072
+2492 734 60
+2493 734 8
+2494 734 24631
+2495 734 17651
+2496 734 2306
+2497 734 3854
+2498 734 18615
+2510 734 5578
+3245 734 27852657
+657 735 1
+658 735 1
+1731 735 21965
+1732 735 24572
+1733 735 24572
+1748 735 48671
+1753 735 52994
+1754 735 28895
+1768 735 31502
+1795 735 31502
+1801 735 57094
+1830 735 31502
+1836 735 49500
+1881 735 24373
+1996 735 41229
+2355 735 2398
+2356 735 6177
+2357 735 32374
+2362 735 60745
+2363 735 48097
+2368 735 17587
+2374 735 25412
+2375 735 34303
+2376 735 27893
+2377 735 24163
+2378 735 24163
+2379 735 58076
+2380 735 21289
+2382 735 18548
+2383 735 22298
+2384 735 7326
+2385 735 46384
+2386 735 48848
+2387 735 24685
+2388 735 27120
+2389 735 2701
+2390 735 32365
+2392 735 56419
+2393 735 64882
+2394 735 2984
+2395 735 55323
+2396 735 43625
+2397 735 18940
+2398 735 58718
+2399 735 19114
+2400 735 15272
+2401 735 36682
+2403 735 26839
+2404 735 15186
+2405 735 2836
+2406 735 8195
+2407 735 46082
+2408 735 27142
+2409 735 33908
+2410 735 38768
+2411 735 16905
+2412 735 28068
+2413 735 19726
+2415 735 62760
+2416 735 45267
+2417 735 52585
+2418 735 48652
+2419 735 42682
+2420 735 15540
+2487 735 26393
+2488 735 2011
+2489 735 8619
+2490 735 22783
+2491 735 46709
+2492 735 52353
+2493 735 40385
+2494 735 10257
+2495 735 36587
+2496 735 12580
+2497 735 62915
+2498 735 45133
+2510 735 33068
+3246 735 27852657
+658 736 1
+964 736 33896
+979 736 845
+984 736 32470
+997 736 7158
+1030 736 54151
+1041 736 61245
+1114 736 56465
+1130 736 30922
+1268 736 34007
+1733 736 56823
+2091 736 35023
+2092 736 37858
+2093 736 33557
+2108 736 28785
+2113 736 18386
+2128 736 34687
+2154 736 9590
+2155 736 41394
+2160 736 17830
+2166 736 52844
+2173 736 52844
+2187 736 12104
+2188 736 12636
+2190 736 14497
+2191 736 29040
+2196 736 57290
+2202 736 16530
+2209 736 38958
+2217 736 51635
+2232 736 27838
+2233 736 19934
+2234 736 60742
+2236 736 48130
+2241 736 38015
+2247 736 12861
+2254 736 53669
+2262 736 34233
+2271 736 48119
+2287 736 6431
+2288 736 10728
+2289 736 28022
+2290 736 1038
+2296 736 21182
+2302 736 55083
+2309 736 12475
+2317 736 15113
+2326 736 61757
+2336 736 13638
+2353 736 58354
+2354 736 13760
+2355 736 38193
+2356 736 30151
+2357 736 54879
+2368 736 46487
+2375 736 24128
+2383 736 4324
+2392 736 39856
+2402 736 37579
+2413 736 23941
+2431 736 59491
+2432 736 50142
+2433 736 45575
+2434 736 15720
+2435 736 18324
+2440 736 40532
+2446 736 10666
+2453 736 64837
+2461 736 30940
+2470 736 2764
+2480 736 34043
+2491 736 37058
+2503 736 60811
+3247 736 27852657
+659 737 1
+671 737 56901
+672 737 56901
+673 737 36996
+674 737 30940
+678 737 34581
+685 737 2415
+689 737 63106
+691 737 59634
+703 737 6472
+718 737 19220
+729 737 43857
+763 737 19220
+767 737 23139
+828 737 44371
+832 737 38612
+837 737 26909
+1987 737 3590
+1990 737 41788
+1991 737 5143
+1994 737 11668
+1995 737 43137
+1996 737 37994
+2001 737 20743
+2002 737 12929
+2007 737 3411
+2013 737 26942
+2014 737 15818
+2015 737 32168
+2016 737 59145
+2017 737 59145
+2018 737 51431
+2019 737 62109
+2021 737 58663
+2022 737 10505
+2023 737 49647
+2024 737 23046
+2025 737 31345
+2026 737 37721
+2027 737 61325
+2028 737 5642
+2029 737 3586
+2031 737 28110
+2032 737 53823
+2033 737 43044
+2034 737 36334
+2035 737 29069
+2036 737 56869
+2037 737 52641
+2038 737 12526
+2039 737 8029
+2040 737 34996
+2042 737 49458
+2043 737 6424
+2044 737 30773
+2045 737 12683
+2046 737 31844
+2047 737 40496
+2048 737 56126
+2049 737 31554
+2050 737 35220
+2051 737 21586
+2052 737 12182
+2054 737 39101
+2055 737 59952
+2056 737 18419
+2057 737 29689
+2058 737 3269
+2059 737 28294
+2409 737 4338
+2410 737 64734
+2411 737 19280
+2412 737 52545
+2413 737 19126
+2414 737 44456
+2415 737 53591
+2416 737 14289
+2417 737 49993
+2418 737 25865
+2419 737 39988
+2420 737 31587
+2498 737 17129
+3248 737 27852657
+660 738 1
+1990 738 4095
+1991 738 4095
+1994 738 63038
+1995 738 22601
+1996 738 18506
+2001 738 21334
+2002 738 2828
+2007 738 22267
+2013 738 1639
+2014 738 61282
+2015 738 26553
+2016 738 58022
+2017 738 58022
+2018 738 38659
+2019 738 19657
+2021 738 33081
+2022 738 2125
+2023 738 56986
+2024 738 40007
+2025 738 13062
+2026 738 20561
+2027 738 56666
+2028 738 7534
+2029 738 11661
+2031 738 39288
+2032 738 14799
+2033 738 18212
+2034 738 49123
+2035 738 17391
+2036 738 62351
+2037 738 19891
+2038 738 38644
+2039 738 17725
+2040 738 21476
+2042 738 34450
+2043 738 15733
+2044 738 24946
+2045 738 51391
+2046 738 60552
+2047 738 63722
+2048 738 15341
+2049 738 22822
+2050 738 5945
+2051 738 32182
+2052 738 13454
+2054 738 42615
+2055 738 45388
+2056 738 31912
+2057 738 53905
+2058 738 40695
+2059 738 42494
+2409 738 3038
+2410 738 12277
+2411 738 18601
+2412 738 11473
+2413 738 47603
+2414 738 58754
+2415 738 42133
+2416 738 54675
+2417 738 8799
+2418 738 35179
+2419 738 4352
+2420 738 22005
+2498 738 32897
+3249 738 27852657
+661 739 1
+662 739 1
+663 739 1
+664 739 1
+665 739 1
+666 739 2
+667 739 1
+668 739 1
+669 739 1
+670 739 2
+671 739 2
+672 739 1
+764 739 49144
+765 739 49143
+766 739 32760
+767 739 32760
+829 739 49144
+830 739 49143
+831 739 32760
+832 739 32760
+834 739 65520
+835 739 65515
+836 739 32760
+870 739 4
+880 739 4
+881 739 6
+891 739 4
+892 739 6
+893 739 6
+1983 739 65518
+1984 739 65518
+1985 739 53235
+1986 739 53235
+1987 739 53238
+1988 739 1
+1989 739 28667
+1990 739 28669
+1991 739 40952
+1992 739 35491
+1993 739 64157
+1994 739 23208
+1995 739 10925
+1996 739 35494
+1997 739 35491
+1998 739 23208
+1999 739 47780
+2000 739 6831
+2001 739 1370
+2002 739 31397
+2029 739 32767
+2039 739 32767
+2040 739 27318
+2050 739 49145
+2051 739 27307
+2052 739 32766
+2409 739 42317
+2410 739 3413
+2411 739 11601
+2412 739 43683
+2413 739 27300
+2414 739 682
+2420 739 24576
+2498 739 10928
+3250 739 27852657
+662 740 1
+671 740 61853
+672 740 61853
+674 740 63106
+678 740 2415
+685 740 63106
+689 740 2415
+691 740 23773
+703 740 63749
+729 740 44513
+767 740 23162
+832 740 48059
+837 740 17462
+1990 740 56472
+1991 740 24006
+1994 740 61146
+1995 740 46666
+1996 740 22660
+2001 740 54022
+2002 740 19669
+2007 740 62691
+2013 740 63408
+2014 740 43038
+2015 740 43246
+2016 740 26772
+2017 740 26772
+2018 740 16861
+2019 740 31356
+2021 740 33954
+2022 740 55079
+2023 740 38156
+2024 740 37603
+2025 740 38427
+2026 740 11655
+2027 740 28919
+2028 740 28848
+2029 740 11057
+2031 740 44005
+2032 740 48618
+2033 740 8421
+2034 740 18382
+2035 740 23118
+2036 740 11463
+2037 740 48122
+2038 740 20979
+2039 740 41768
+2040 740 14097
+2042 740 23549
+2043 740 43750
+2044 740 37231
+2045 740 32694
+2046 740 65368
+2047 740 53905
+2048 740 30578
+2049 740 9470
+2050 740 4827
+2051 740 13027
+2052 740 19385
+2054 740 47030
+2055 740 35096
+2056 740 20713
+2057 740 32710
+2058 740 40429
+2059 740 52045
+2409 740 25288
+2410 740 63560
+2411 740 27442
+2412 740 23899
+2413 740 22919
+2414 740 3858
+2415 740 58017
+2416 740 18671
+2417 740 20882
+2418 740 41016
+2419 740 53343
+2420 740 37819
+2498 740 51183
+3251 740 27852657
+663 741 1
+667 741 65520
+671 741 44995
+672 741 44996
+674 741 2415
+678 741 63106
+685 741 2415
+689 741 63106
+691 741 58093
+703 741 58379
+729 741 256
+767 741 42359
+832 741 17462
+837 741 48059
+1990 741 41811
+1991 741 8756
+1994 741 65436
+1995 741 18864
+1996 741 10108
+2001 741 50866
+2002 741 55669
+2007 741 51110
+2013 741 25845
+2014 741 1872
+2015 741 58322
+2016 741 44313
+2017 741 44313
+2018 741 47757
+2019 741 23014
+2021 741 54087
+2022 741 46852
+2023 741 64236
+2024 741 5598
+2025 741 47134
+2026 741 2821
+2027 741 17912
+2028 741 39197
+2029 741 1821
+2031 741 25592
+2032 741 65209
+2033 741 58705
+2034 741 43468
+2035 741 39823
+2036 741 37002
+2037 741 6717
+2038 741 44195
+2039 741 34215
+2040 741 60005
+2042 741 61787
+2043 741 5678
+2044 741 33547
+2045 741 15746
+2046 741 28442
+2047 741 56961
+2048 741 47533
+2049 741 44853
+2050 741 52569
+2051 741 43560
+2052 741 11424
+2054 741 35477
+2055 741 31481
+2056 741 1389
+2057 741 64437
+2058 741 20221
+2059 741 28781
+2409 741 55685
+2410 741 35426
+2411 741 22371
+2412 741 64867
+2413 741 46086
+2414 741 52252
+2415 741 39529
+2416 741 24736
+2417 741 63887
+2418 741 39641
+2419 741 3993
+2420 741 63984
+2498 741 14285
+3252 741 27852657
+664 742 1
+665 742 1
+666 742 1
+667 742 1
+668 742 1
+669 742 1
+670 742 1
+671 742 2
+672 742 1
+835 742 63715
+836 742 15989
+837 742 15989
+870 742 62404
+872 742 17281
+875 742 28460
+876 742 28460
+877 742 28460
+878 742 49315
+879 742 49315
+880 742 46198
+881 742 35115
+884 742 39215
+885 742 41932
+886 742 41932
+887 742 4871
+888 742 41932
+889 742 49315
+890 742 49315
+891 742 46198
+892 742 35115
+893 742 35115
+895 742 39215
+896 742 41932
+897 742 41932
+898 742 4871
+899 742 18343
+900 742 41932
+1983 742 19375
+1984 742 19375
+1985 742 56050
+1986 742 42175
+1987 742 22800
+1988 742 11290
+1989 742 62096
+1990 742 35323
+1991 742 12523
+1992 742 11290
+1993 742 11371
+1994 742 34292
+1995 742 49829
+1996 742 37306
+1997 742 11290
+1998 742 53857
+1999 742 28922
+2000 742 32449
+2001 742 52903
+2002 742 15597
+2005 742 63082
+2006 742 63706
+2007 742 50085
+2008 742 11880
+2012 742 44079
+2013 742 44703
+2014 742 31082
+2015 742 44777
+2016 742 16148
+2017 742 16148
+2018 742 30371
+2019 742 63148
+2021 742 15211
+2022 742 1590
+2023 742 15909
+2024 742 554
+2025 742 28316
+2026 742 12168
+2027 742 16248
+2028 742 49025
+2029 742 44321
+2031 742 20450
+2032 742 32330
+2033 742 18219
+2034 742 32814
+2035 742 14021
+2036 742 1853
+2037 742 62478
+2038 742 29734
+2039 742 25030
+2040 742 43181
+2042 742 53757
+2043 742 56946
+2044 742 51686
+2045 742 56415
+2046 742 59340
+2047 742 57487
+2048 742 26638
+2049 742 53017
+2050 742 17031
+2051 742 13691
+2052 742 37699
+2054 742 57373
+2055 742 25034
+2056 742 6301
+2057 742 56470
+2058 742 20347
+2059 742 28381
+2409 742 10511
+2410 742 44751
+2411 742 37470
+2412 742 40314
+2413 742 51159
+2414 742 33137
+2415 742 49843
+2416 742 1427
+2417 742 31116
+2418 742 11981
+2419 742 8546
+2420 742 24879
+2498 742 51883
+3253 742 27852657
+665 743 1
+671 743 55216
+672 743 55216
+691 743 20878
+703 743 41568
+729 743 29369
+1994 743 32754
+1995 743 65510
+1996 743 65510
+2001 743 33640
+2002 743 14837
+2007 743 31447
+2013 743 8249
+2014 743 24574
+2015 743 43006
+2016 743 29949
+2017 743 29949
+2018 743 22880
+2019 743 5194
+2021 743 64147
+2022 743 10555
+2023 743 51680
+2024 743 21127
+2025 743 63999
+2026 743 34050
+2027 743 34142
+2028 743 6741
+2029 743 21115
+2031 743 19194
+2032 743 61503
+2033 743 3087
+2034 743 10121
+2035 743 23350
+2036 743 54821
+2037 743 28070
+2038 743 27838
+2039 743 35966
+2040 743 14141
+2042 743 26434
+2043 743 52612
+2044 743 24534
+2045 743 56075
+2046 743 55044
+2047 743 223
+2048 743 56228
+2049 743 26325
+2050 743 11815
+2051 743 14733
+2052 743 29202
+2054 743 62741
+2055 743 15424
+2056 743 1924
+2057 743 3320
+2058 743 9045
+2059 743 8822
+2409 743 59741
+2410 743 4758
+2411 743 7870
+2412 743 16626
+2413 743 51870
+2414 743 1879
+2415 743 25368
+2416 743 37875
+2417 743 15208
+2418 743 59799
+2419 743 35328
+2420 743 42414
+2498 743 58440
+3254 743 27852657
+666 744 1
+667 744 1
+671 744 10354
+672 744 10353
+691 744 34941
+703 744 14543
+729 744 47021
+1994 744 22339
+1995 744 32765
+1996 744 32765
+2001 744 29714
+2002 744 18788
+2007 744 56692
+2013 744 43182
+2014 744 53642
+2015 744 5532
+2016 744 55332
+2017 744 55332
+2018 744 61025
+2019 744 1802
+2021 744 17846
+2022 744 28650
+2023 744 13020
+2024 744 58493
+2025 744 48678
+2026 744 58867
+2027 744 12347
+2028 744 3018
+2029 744 38240
+2031 744 40835
+2032 744 62837
+2033 744 13605
+2034 744 23090
+2035 744 59381
+2036 744 514
+2037 744 24612
+2038 744 16611
+2039 744 38339
+2040 744 5252
+2042 744 40011
+2043 744 17836
+2044 744 27608
+2045 744 12673
+2046 744 828
+2047 744 314
+2048 744 36203
+2049 744 34915
+2050 744 35879
+2051 744 21957
+2052 744 14456
+2054 744 50346
+2055 744 5347
+2056 744 62160
+2057 744 15394
+2058 744 15855
+2059 744 15541
+2409 744 25277
+2410 744 15345
+2411 744 48168
+2412 744 28755
+2413 744 45377
+2414 744 51275
+2415 744 8006
+2416 744 563
+2417 744 41600
+2418 744 20496
+2419 744 38363
+2420 744 62374
+2498 744 60943
+3255 744 27852657
+667 745 1
+671 745 145
+672 745 144
+689 745 6890
+701 745 52007
+703 745 41032
+729 745 2422
+837 745 42056
+1994 745 10780
+1995 745 58612
+1996 745 58554
+2001 745 7003
+2002 745 25125
+2007 745 1148
+2013 745 47747
+2014 745 940
+2015 745 38532
+2016 745 42289
+2017 745 42289
+2018 745 25603
+2019 745 30908
+2021 745 33086
+2022 745 25360
+2023 745 48317
+2024 745 25873
+2025 745 37944
+2026 745 61176
+2027 745 46011
+2028 745 42075
+2029 745 44219
+2031 745 24593
+2032 745 34719
+2033 745 44949
+2034 745 2341
+2035 745 8321
+2036 745 12666
+2037 745 48286
+2038 745 49630
+2039 745 33712
+2040 745 9075
+2042 745 22702
+2043 745 41233
+2044 745 22021
+2045 745 59528
+2046 745 32058
+2047 745 19392
+2048 745 42561
+2049 745 50860
+2050 745 40866
+2051 745 32965
+2052 745 35588
+2054 745 57577
+2055 745 46180
+2056 745 42235
+2057 745 45043
+2058 745 17944
+2059 745 64073
+2409 745 27919
+2410 745 43689
+2411 745 53712
+2412 745 6220
+2413 745 21955
+2414 745 60662
+2415 745 61135
+2416 745 24300
+2417 745 7396
+2418 745 51763
+2419 745 29223
+2420 745 18450
+2498 745 22834
+3256 745 27852657
+668 746 1
+671 746 43681
+672 746 43681
+691 746 26301
+703 746 31288
+729 746 110
+2001 746 1179
+2002 746 18937
+2007 746 63096
+2014 746 37012
+2015 746 20171
+2016 746 6047
+2017 746 6047
+2018 746 29079
+2019 746 39113
+2021 746 16436
+2022 746 45823
+2023 746 22128
+2024 746 30601
+2025 746 24190
+2026 746 18143
+2027 746 661
+2028 746 45825
+2029 746 51569
+2031 746 47912
+2032 746 62187
+2033 746 33990
+2034 746 23429
+2035 746 46534
+2036 746 28391
+2037 746 3693
+2038 746 48533
+2039 746 976
+2040 746 976
+2042 746 10259
+2043 746 5443
+2044 746 34723
+2045 746 47773
+2046 746 45992
+2047 746 17601
+2048 746 28269
+2049 746 8879
+2050 746 12637
+2051 746 12637
+2052 746 12512
+2054 746 41504
+2055 746 33254
+2056 746 11511
+2057 746 9913
+2058 746 21413
+2059 746 3812
+2409 746 48641
+2410 746 30192
+2411 746 42606
+2412 746 42606
+2413 746 13970
+2414 746 22086
+2415 746 42800
+2416 746 28195
+2417 746 35762
+2418 746 31477
+2419 746 48664
+2420 746 41506
+2498 746 5756
+3257 746 27852657
+669 747 1
+671 747 28737
+672 747 28737
+691 747 54030
+703 747 55705
+729 747 48843
+2001 747 27971
+2002 747 31853
+2007 747 38204
+2013 747 36146
+2014 747 47020
+2015 747 51155
+2016 747 58568
+2017 747 58568
+2018 747 61412
+2019 747 46148
+2021 747 48003
+2022 747 39029
+2023 747 30753
+2024 747 36176
+2025 747 9970
+2026 747 16923
+2027 747 6740
+2028 747 8876
+2029 747 3132
+2031 747 18761
+2032 747 59927
+2033 747 55308
+2034 747 13678
+2035 747 50901
+2036 747 33978
+2037 747 50513
+2038 747 57774
+2039 747 39810
+2040 747 55195
+2042 747 46407
+2043 747 44046
+2044 747 48295
+2045 747 7467
+2046 747 23378
+2047 747 54921
+2048 747 6161
+2049 747 28425
+2050 747 24667
+2051 747 64361
+2052 747 19370
+2054 747 15424
+2055 747 48190
+2056 747 18542
+2057 747 12265
+2058 747 16913
+2059 747 27513
+2409 747 54169
+2410 747 48008
+2411 747 35594
+2412 747 26679
+2413 747 4387
+2414 747 62496
+2415 747 10445
+2416 747 19466
+2417 747 46348
+2418 747 30291
+2419 747 7501
+2420 747 59118
+2498 747 12963
+3258 747 27852657
+670 748 1
+671 748 58625
+672 748 58625
+691 748 28245
+703 748 24171
+729 748 49545
+2001 748 54563
+2002 748 13544
+2007 748 54384
+2013 748 29375
+2014 748 31792
+2015 748 11786
+2016 748 7696
+2017 748 7696
+2018 748 5764
+2019 748 40730
+2021 748 37618
+2022 748 8305
+2023 748 49063
+2024 748 60537
+2025 748 3678
+2026 748 61503
+2027 748 54817
+2028 748 50130
+2029 748 50130
+2031 748 22407
+2032 748 22514
+2033 748 29304
+2034 748 65233
+2035 748 21920
+2036 748 25938
+2037 748 36435
+2038 748 28447
+2039 748 28447
+2040 748 13062
+2042 748 59264
+2043 748 57187
+2044 748 26164
+2045 748 13226
+2046 748 31628
+2047 748 5690
+2048 748 43525
+2049 748 40806
+2050 748 40806
+2051 748 1112
+2052 748 52069
+2054 748 23603
+2055 748 6911
+2056 748 46448
+2057 748 10159
+2058 748 21236
+2059 748 15546
+2409 748 23623
+2410 748 11406
+2411 748 11406
+2412 748 20321
+2413 748 31812
+2414 748 29848
+2415 748 19325
+2416 748 60648
+2417 748 24053
+2418 748 28207
+2419 748 203
+2420 748 37931
+2498 748 51196
+3259 748 27852657
+671 749 1
+1007 749 34706
+1041 749 17090
+1042 749 30050
+1056 749 11336
+1077 749 11336
+1126 749 9236
+1127 749 1519
+1129 749 65510
+1130 749 60566
+1131 749 39048
+1144 749 29829
+1167 749 27778
+1196 749 16442
+1264 749 40918
+1265 749 52609
+1266 749 52609
+1268 749 56702
+1269 749 28333
+1287 749 5376
+1312 749 38258
+1345 749 7479
+1390 749 56558
+1470 749 53014
+1471 749 28247
+1472 749 28247
+1473 749 28247
+1475 749 39447
+1495 749 28429
+1522 749 39037
+1557 749 53920
+1602 749 10698
+1657 749 19661
+1749 749 24699
+1750 749 54533
+1751 749 54533
+1752 749 54533
+1753 749 16746
+1774 749 31703
+1801 749 6168
+1836 749 3112
+1881 749 30012
+1936 749 10943
+2002 749 56803
+2109 749 16552
+2110 749 10162
+2111 749 10162
+2112 749 10162
+2113 749 43865
+2114 749 61532
+2134 749 57109
+2161 749 42749
+2197 749 33072
+2242 749 57068
+2297 749 53380
+2363 749 5623
+2441 749 28367
+3260 749 27852657
+672 750 1
+2363 750 65520
+3261 750 27852657
+673 751 1
+684 751 65520
+687 751 37768
+699 751 37184
+718 751 18083
+724 751 31076
+735 751 47386
+742 751 47386
+751 751 47386
+761 751 7183
+762 751 7183
+763 751 25266
+766 751 412
+781 751 53703
+788 751 55184
+796 751 55184
+805 751 37049
+815 751 55184
+826 751 7183
+827 751 7183
+828 751 25266
+831 751 412
+835 751 12743
+846 751 53703
+853 751 55184
+861 751 55184
+870 751 37049
+880 751 44847
+891 751 55184
+1759 751 5085
+1762 751 38974
+1766 751 25965
+1771 751 17132
+1786 751 15379
+1789 751 49268
+1793 751 36259
+1798 751 17063
+1804 751 6721
+1811 751 6721
+1819 751 44176
+1820 751 44176
+1824 751 37163
+1828 751 55117
+1833 751 19223
+1839 751 37968
+1846 751 30545
+1854 751 23824
+1864 751 54667
+1865 751 54667
+1866 751 7234
+1873 751 17311
+1878 751 693
+1884 751 63597
+1891 751 53067
+1899 751 53966
+1908 751 30142
+1919 751 26748
+1920 751 26748
+1921 751 44836
+1924 751 60649
+1933 751 48570
+1939 751 58210
+1946 751 27986
+1954 751 11965
+1963 751 15271
+1973 751 50650
+1985 751 8275
+1986 751 8275
+1987 751 25511
+1990 751 65049
+1994 751 19514
+2005 751 14457
+2012 751 44951
+2020 751 63804
+2029 751 28883
+2039 751 6666
+2050 751 21537
+2346 751 26845
+2347 751 26845
+2348 751 7216
+2351 751 56922
+2355 751 27434
+2360 751 38666
+2366 751 33408
+2373 751 3130
+2381 751 16047
+2390 751 21044
+2400 751 60468
+2411 751 57991
+2489 751 14487
+3262 751 27852657
+674 752 1
+685 752 1
+688 752 13876
+700 752 46928
+721 752 31625
+725 752 33728
+736 752 31099
+743 752 31099
+752 752 31099
+764 752 56887
+765 752 56887
+766 752 22991
+767 752 47845
+782 752 60942
+789 752 800
+797 752 800
+806 752 31899
+816 752 800
+829 752 56887
+830 752 56887
+831 752 22991
+832 752 47845
+836 752 8918
+847 752 60942
+854 752 800
+862 752 800
+871 752 31899
+881 752 1600
+892 752 800
+1763 752 31632
+1767 752 46325
+1772 752 18520
+1789 752 55577
+1790 752 21688
+1794 752 36381
+1799 752 32708
+1805 752 59669
+1812 752 59669
+1822 752 23371
+1823 752 23371
+1825 752 4783
+1829 752 36755
+1834 752 34372
+1840 752 48460
+1847 752 8388
+1855 752 14240
+1867 752 50945
+1868 752 50945
+1869 752 61385
+1874 752 27107
+1879 752 30392
+1885 752 20088
+1892 752 52715
+1900 752 47823
+1909 752 33583
+1922 752 25145
+1923 752 25145
+1924 752 35585
+1925 752 19772
+1934 752 54810
+1940 752 58135
+1947 752 18089
+1955 752 58599
+1964 752 27952
+1974 752 59890
+1988 752 11499
+1989 752 11499
+1990 752 8245
+1991 752 34228
+1995 752 32429
+2006 752 11235
+2013 752 49233
+2021 752 16415
+2030 752 10982
+2040 752 17131
+2051 752 22762
+2349 752 34064
+2350 752 34064
+2351 752 53622
+2352 752 3916
+2356 752 6375
+2361 752 24389
+2367 752 39091
+2374 752 6104
+2382 752 33289
+2391 752 13154
+2401 752 59076
+2412 752 7500
+2490 752 4571
+3263 752 27852657
+675 753 1
+676 753 19751
+677 753 47257
+678 753 47257
+730 753 65490
+732 753 39509
+739 753 13825
+746 753 13825
+755 753 13825
+779 753 33084
+780 753 33084
+781 753 33053
+782 753 2654
+785 753 56541
+792 753 13831
+800 753 13831
+809 753 27656
+819 753 13831
+844 753 33084
+845 753 33084
+846 753 33053
+847 753 2654
+848 753 2654
+850 753 56541
+857 753 13831
+865 753 13831
+874 753 27656
+884 753 27662
+895 753 13831
+1755 753 60278
+1756 753 60278
+1757 753 38602
+1758 753 61338
+1759 753 1060
+1760 753 29308
+1761 753 6941
+1762 753 9520
+1763 753 8460
+1764 753 29308
+1765 753 50089
+1766 753 62756
+1767 753 34231
+1768 753 25771
+1769 753 29308
+1770 753 50089
+1771 753 61334
+1772 753 19087
+1773 753 39868
+1774 753 14097
+1777 753 18879
+1778 753 9697
+1779 753 44854
+1780 753 31832
+1804 753 18569
+1805 753 9387
+1806 753 44544
+1807 753 1158
+1808 753 3470
+1815 753 3470
+1837 753 43036
+1838 753 57652
+1840 753 35948
+1841 753 5584
+1842 753 18537
+1843 753 55269
+1850 753 20984
+1858 753 17514
+1882 753 33079
+1883 753 47695
+1884 753 51165
+1886 753 59869
+1887 753 26180
+1888 753 53847
+1895 753 14858
+1903 753 17758
+1912 753 244
+1937 753 47087
+1938 753 61703
+1939 753 65173
+1940 753 23656
+1942 753 26102
+1943 753 65488
+1950 753 41246
+1958 753 38651
+1967 753 36561
+1977 753 36317
+2003 753 21204
+2004 753 20105
+2005 753 25870
+2006 753 52159
+2007 753 20797
+2009 753 6494
+2016 753 17617
+2024 753 12074
+2033 753 58212
+2043 753 20854
+2054 753 50058
+2364 753 19172
+2365 753 6266
+2366 753 54192
+2367 753 35122
+2368 753 29304
+2369 753 7132
+2370 753 50515
+2377 753 40533
+2385 753 63784
+2394 753 42736
+2404 753 18310
+2415 753 20117
+2493 753 23010
+3264 753 27852657
+676 754 1
+688 754 65520
+689 754 65520
+835 754 1
+1762 754 65519
+1763 754 65519
+1766 754 49140
+1767 754 65519
+1771 754 49140
+1772 754 65519
+1789 754 65519
+1790 754 65519
+1793 754 16379
+1794 754 32758
+1795 754 32760
+1798 754 16379
+1799 754 32758
+1800 754 65520
+1801 754 32760
+1825 754 65519
+1829 754 16379
+1830 754 16381
+1834 754 32760
+1835 754 49141
+1836 754 32760
+1875 754 16381
+1880 754 49141
+1881 754 32760
+1936 754 32760
+1994 754 32761
+2355 754 16380
+2360 754 16380
+2366 754 8190
+2367 754 65520
+2373 754 49140
+2374 754 40949
+2375 754 16379
+2376 754 16380
+2382 754 40950
+2383 754 24570
+2384 754 16380
+2390 754 21840
+2392 754 24570
+2393 754 16380
+2400 754 21840
+2401 754 65520
+2403 754 16380
+2411 754 21841
+2412 754 65520
+2413 754 49141
+2489 754 18427
+2490 754 21836
+2491 754 63813
+2492 754 1363
+2494 754 57331
+2495 754 57331
+2496 754 57331
+2497 754 57331
+2498 754 57331
+2510 754 57841
+3265 754 27852657
+677 755 1
+678 755 1
+688 755 1
+689 755 1
+836 755 1
+837 755 1
+1767 755 49142
+1768 755 49142
+1772 755 2
+1773 755 49142
+1794 755 49142
+1795 755 49142
+1799 755 2
+1800 755 49142
+1992 755 65519
+1993 755 65519
+1994 755 65519
+1995 755 32759
+1996 755 32759
+2353 755 21840
+2354 755 21840
+2355 755 21840
+2356 755 38220
+2357 755 38220
+2358 755 21840
+2359 755 21840
+2360 755 21840
+2361 755 21840
+2362 755 60060
+2363 755 21840
+2367 755 1
+2368 755 8191
+2374 755 1
+2375 755 8191
+2401 755 21841
+2412 755 21842
+2413 755 1
+2487 755 35490
+2488 755 35490
+2489 755 35490
+2490 755 38222
+2491 755 7507
+2492 755 46412
+2510 755 17746
+3266 755 27852657
+678 756 1
+689 756 1
+701 756 1
+837 756 1
+1768 756 24572
+1774 756 40949
+1795 756 24572
+1801 756 40949
+1830 756 24572
+1836 756 40949
+1936 756 36036
+1994 756 47641
+1995 756 5936
+1996 756 63263
+2014 756 21124
+2022 756 14477
+2028 756 8203
+2029 756 49534
+2031 756 26485
+2034 756 24680
+2035 756 24680
+2036 756 24680
+2037 756 30007
+2038 756 28222
+2039 756 29618
+2040 756 40445
+2043 756 21075
+2044 756 20428
+2045 756 20428
+2046 756 45108
+2047 756 20428
+2048 756 30007
+2049 756 28222
+2050 756 29618
+2051 756 40445
+2052 756 5608
+2054 756 21075
+2055 756 20428
+2056 756 20428
+2057 756 45108
+2058 756 40856
+2059 756 20428
+2344 756 57486
+2345 756 57486
+2346 756 33219
+2347 756 11230
+2348 756 19265
+2349 756 40004
+2350 756 51503
+2351 756 64857
+2352 756 45592
+2353 756 40004
+2354 756 51503
+2355 756 42822
+2356 756 35541
+2357 756 2234
+2358 756 50025
+2359 756 45242
+2360 756 10258
+2361 756 2084
+2362 756 41508
+2363 756 39274
+2366 756 56125
+2367 756 38641
+2368 756 51501
+2369 756 44557
+2373 756 47121
+2374 756 29637
+2375 756 42497
+2376 756 57364
+2377 756 17582
+2378 756 17582
+2379 756 30257
+2380 756 30834
+2382 756 28388
+2383 756 14384
+2384 756 33952
+2385 756 11825
+2386 756 37107
+2387 756 19525
+2388 756 42919
+2389 756 38310
+2390 756 30095
+2392 756 51143
+2393 756 54069
+2394 756 14180
+2395 756 56315
+2396 756 46151
+2397 756 26626
+2398 756 1136
+2399 756 46030
+2400 756 22167
+2401 756 5039
+2403 756 29475
+2404 756 9588
+2405 756 28030
+2406 756 37484
+2407 756 39297
+2408 756 12671
+2409 756 17503
+2410 756 9825
+2411 756 22960
+2412 756 42588
+2413 756 48177
+2415 756 56617
+2416 756 58104
+2417 756 50589
+2418 756 3073
+2419 756 24687
+2420 756 12016
+2487 756 57493
+2488 756 47462
+2489 756 15026
+2490 756 19529
+2491 756 18484
+2492 756 43402
+2493 756 12761
+2494 756 29831
+2495 756 45290
+2496 756 32745
+2497 756 14847
+2498 756 1649
+2510 756 58285
+3267 756 27852657
+679 757 1
+680 757 1
+778 757 27647
+835 757 43417
+836 757 13288
+837 757 13288
+855 757 21894
+863 757 9762
+870 757 47841
+872 757 37227
+875 757 58255
+876 757 58255
+877 757 58255
+878 757 24850
+879 757 32597
+880 757 53707
+881 757 5678
+884 757 39670
+885 757 19323
+886 757 19323
+887 757 12057
+888 757 19323
+889 757 24850
+890 757 32597
+891 757 53707
+892 757 5678
+893 757 23187
+895 757 39670
+896 757 19323
+897 757 19323
+898 757 12057
+899 757 38646
+900 757 19323
+1983 757 37841
+1984 757 37841
+1985 757 54485
+1986 757 62151
+1987 757 24310
+1988 757 12147
+1989 757 20857
+1990 757 19094
+1991 757 60305
+1992 757 12147
+1993 757 20857
+1994 757 2647
+1995 757 25657
+1996 757 30873
+1997 757 12147
+1998 757 20857
+1999 757 21335
+2000 757 44368
+2001 757 59451
+2002 757 28578
+2005 757 22813
+2006 757 6768
+2007 757 44804
+2008 757 23200
+2012 757 56907
+2013 757 40862
+2014 757 57069
+2015 757 16221
+2016 757 21221
+2017 757 21221
+2018 757 19846
+2019 757 52628
+2021 757 32160
+2022 757 36290
+2023 757 49819
+2024 757 17434
+2025 757 9522
+2026 757 53822
+2027 757 5162
+2028 757 37944
+2029 757 26602
+2031 757 21501
+2032 757 10547
+2033 757 15280
+2034 757 65070
+2035 757 64082
+2036 757 10260
+2037 757 25990
+2038 757 58334
+2039 757 2019
+2040 757 41768
+2042 757 3633
+2043 757 56737
+2044 757 43564
+2045 757 57122
+2046 757 54243
+2047 757 43983
+2048 757 36202
+2049 757 44018
+2050 757 13549
+2051 757 9583
+2052 757 51813
+2054 757 30603
+2055 757 11759
+2056 757 29390
+2057 757 5721
+2058 757 760
+2059 757 22298
+2409 757 41308
+2410 757 57745
+2411 757 45153
+2412 757 31532
+2413 757 43449
+2414 757 51102
+2415 757 40136
+2416 757 2681
+2417 757 7977
+2418 757 21858
+2419 757 32751
+2420 757 9720
+2498 757 59854
+3268 757 27852657
+680 758 1
+691 758 41549
+703 758 15522
+729 758 16766
+2001 758 39556
+2002 758 6657
+2007 758 10545
+2014 758 18691
+2015 758 6287
+2016 758 63909
+2017 758 63909
+2018 758 57476
+2019 758 5334
+2021 758 45923
+2022 758 1246
+2023 758 27362
+2024 758 15375
+2025 758 44405
+2026 758 46017
+2027 758 27467
+2028 758 6536
+2029 758 6536
+2031 758 46488
+2032 758 25503
+2033 758 62532
+2034 758 9052
+2035 758 8532
+2036 758 28036
+2037 758 19437
+2038 758 1015
+2039 758 1015
+2040 758 1015
+2042 758 47025
+2043 758 49522
+2044 758 29492
+2045 758 29743
+2046 758 27022
+2047 758 64507
+2048 758 60344
+2049 758 51990
+2050 758 51990
+2051 758 51990
+2052 758 43627
+2054 758 7476
+2055 758 33653
+2056 758 4189
+2057 758 33903
+2058 758 58802
+2059 758 59816
+2409 758 12204
+2410 758 54816
+2411 758 54816
+2412 758 54816
+2413 758 53118
+2414 758 23251
+2415 758 58632
+2416 758 14826
+2417 758 9681
+2418 758 51392
+2419 758 15863
+2420 758 43191
+2498 758 40577
+3269 758 27852657
+681 759 1
+694 759 1
+695 759 1
+707 759 39112
+716 759 26409
+733 759 44175
+740 759 39411
+748 759 29285
+756 759 17453
+757 759 33638
+758 759 30762
+785 759 29437
+793 759 54149
+802 759 59374
+812 759 32601
+818 759 27937
+819 759 34537
+820 759 17084
+821 759 38973
+822 759 63925
+823 759 62086
+850 759 62917
+858 759 1743
+867 759 62021
+877 759 4598
+888 759 3164
+896 759 24708
+897 759 23163
+898 759 60683
+899 759 36333
+900 759 29734
+2007 759 8281
+2009 759 46828
+2013 759 52522
+2014 759 2181
+2015 759 55820
+2016 759 14303
+2017 759 18204
+2018 759 23702
+2019 759 57725
+2021 759 27753
+2022 759 10743
+2023 759 57996
+2024 759 21034
+2025 759 52605
+2026 759 5050
+2027 759 1539
+2028 759 57663
+2029 759 31016
+2031 759 8852
+2032 759 19415
+2033 759 55134
+2034 759 55197
+2035 759 37506
+2036 759 4196
+2037 759 9312
+2038 759 62061
+2039 759 46833
+2040 759 48872
+2042 759 38639
+2043 759 9325
+2044 759 38217
+2045 759 27846
+2046 759 4197
+2047 759 4160
+2048 759 22116
+2049 759 21837
+2050 759 7847
+2051 759 41407
+2052 759 26427
+2054 759 53488
+2055 759 18603
+2056 759 57355
+2057 759 43453
+2058 759 4310
+2059 759 15670
+2409 759 7017
+2410 759 49428
+2411 759 43651
+2412 759 5279
+2413 759 42084
+2414 759 10117
+2415 759 35447
+2416 759 9083
+2417 759 64489
+2418 759 60557
+2419 759 48949
+2420 759 4207
+2498 759 24703
+3270 759 27852657
+682 760 1
+694 760 65520
+712 760 65520
+733 760 27231
+740 760 38290
+748 760 57776
+756 760 28138
+757 760 17370
+758 760 25115
+785 760 31530
+793 760 33991
+802 760 28945
+812 760 19347
+818 760 40093
+819 760 8506
+820 760 45889
+821 760 62262
+822 760 64433
+823 760 4680
+850 760 44443
+858 760 21078
+867 760 25174
+877 760 5415
+888 760 15482
+896 760 60349
+897 760 33773
+898 760 28932
+899 760 23587
+900 760 12785
+2007 760 58753
+2009 760 55636
+2013 760 12999
+2014 760 16540
+2015 760 35840
+2016 760 16519
+2017 760 26404
+2018 760 64604
+2019 760 55186
+2021 760 59623
+2022 760 61638
+2023 760 17574
+2024 760 24599
+2025 760 42226
+2026 760 12643
+2027 760 32950
+2028 760 4392
+2029 760 4392
+2031 760 47489
+2032 760 43384
+2033 760 15020
+2034 760 12080
+2035 760 28357
+2036 760 31896
+2037 760 32333
+2038 760 30898
+2039 760 30898
+2040 760 28859
+2042 760 22664
+2043 760 18648
+2044 760 23748
+2045 760 62990
+2046 760 36091
+2047 760 22050
+2048 760 18694
+2049 760 20412
+2050 760 20412
+2051 760 52373
+2052 760 40292
+2054 760 40109
+2055 760 18041
+2056 760 12782
+2057 760 60895
+2058 760 41483
+2059 760 61236
+2409 760 23313
+2410 760 23538
+2411 760 23538
+2412 760 61910
+2413 760 18068
+2414 760 4688
+2415 760 29806
+2416 760 25566
+2417 760 27139
+2418 760 28705
+2419 760 10790
+2420 760 45489
+2498 760 24197
+3271 760 27852657
+683 761 1
+685 761 65520
+689 761 1
+691 761 65520
+778 761 59594
+835 761 23477
+836 761 21630
+837 761 21630
+854 761 17030
+855 761 64109
+863 761 23744
+870 761 54871
+872 761 58196
+875 761 40236
+876 761 40236
+877 761 40236
+878 761 1020
+879 761 31654
+880 761 32676
+881 761 14963
+884 761 51907
+885 761 24891
+886 761 24891
+887 761 65127
+888 761 24891
+889 761 1020
+890 761 31654
+891 761 32676
+892 761 14963
+893 761 30882
+895 761 51907
+896 761 24891
+897 761 24891
+898 761 65127
+899 761 49782
+900 761 24891
+1983 761 13388
+1984 761 13388
+1985 761 2057
+1986 761 7646
+1987 761 59779
+1988 761 63186
+1989 761 19308
+1990 761 42880
+1991 761 48622
+1992 761 38917
+1993 761 60560
+1994 761 59736
+1995 761 36244
+1996 761 53143
+1997 761 10220
+1998 761 31863
+1999 761 56789
+2000 761 52068
+2001 761 37580
+2002 761 49958
+2005 761 47389
+2006 761 5848
+2007 761 24437
+2008 761 10254
+2012 761 29167
+2013 761 10108
+2014 761 16934
+2015 761 28980
+2016 761 62345
+2017 761 62345
+2018 761 3262
+2019 761 17205
+2021 761 54186
+2022 761 47404
+2023 761 60306
+2024 761 60315
+2025 761 51663
+2026 761 54839
+2027 761 6245
+2028 761 20188
+2029 761 26502
+2031 761 4820
+2032 761 8604
+2033 761 50007
+2034 761 20388
+2035 761 26260
+2036 761 36942
+2037 761 56488
+2038 761 7170
+2039 761 12174
+2040 761 40315
+2042 761 63047
+2043 761 33844
+2044 761 11060
+2045 761 61613
+2046 761 65393
+2047 761 28451
+2048 761 30952
+2049 761 2668
+2050 761 60125
+2051 761 47965
+2052 761 29750
+2054 761 19012
+2055 761 8039
+2056 761 11711
+2057 761 50169
+2058 761 24812
+2059 761 61882
+2409 761 5900
+2410 761 48154
+2411 761 40053
+2412 761 55546
+2413 761 21880
+2414 761 1823
+2415 761 23175
+2416 761 39857
+2417 761 30763
+2418 761 47099
+2419 761 38312
+2420 761 21362
+2498 761 9729
+3272 761 27852657
+684 762 1
+685 762 1
+689 762 65520
+691 762 1
+778 762 41587
+835 762 46833
+836 762 40700
+837 762 40700
+854 762 53792
+855 762 40399
+863 762 57938
+870 762 21032
+872 762 58433
+875 762 61797
+876 762 61797
+877 762 61797
+878 762 48242
+879 762 44121
+880 762 10959
+881 762 51784
+884 762 37977
+885 762 18812
+886 762 18812
+887 762 15088
+888 762 18812
+889 762 48242
+890 762 44121
+891 762 10959
+892 762 51784
+893 762 22069
+895 762 37977
+896 762 18812
+897 762 18812
+898 762 15088
+899 762 37624
+900 762 18812
+1983 762 8001
+1984 762 8001
+1985 762 1713
+1986 762 44955
+1987 762 36954
+1988 762 61547
+1989 762 1783
+1990 762 53048
+1991 762 16094
+1992 762 20295
+1993 762 26052
+1994 762 55202
+1995 762 41887
+1996 762 25793
+1997 762 48992
+1998 762 54749
+1999 762 4054
+2000 762 50690
+2001 762 10328
+2002 762 50056
+2005 762 2178
+2006 762 11340
+2007 762 40496
+2008 762 27918
+2012 762 25378
+2013 762 4673
+2014 762 1188
+2015 762 64443
+2016 762 1503
+2017 762 1503
+2018 762 39211
+2019 762 46650
+2021 762 5557
+2022 762 39393
+2023 762 36276
+2024 762 45181
+2025 762 27794
+2026 762 26291
+2027 762 45238
+2028 762 52677
+2029 762 34866
+2031 762 58215
+2032 762 34271
+2033 762 19825
+2034 762 13412
+2035 762 17551
+2036 762 56781
+2037 762 30279
+2038 762 40742
+2039 762 14800
+2040 762 34845
+2042 762 39057
+2043 762 51124
+2044 762 51402
+2045 762 57705
+2046 762 43551
+2047 762 52291
+2048 762 56817
+2049 762 5992
+2050 762 29305
+2051 762 32035
+2052 762 65310
+2054 762 45350
+2055 762 39590
+2056 762 32365
+2057 762 16746
+2058 762 40191
+2059 762 53421
+2409 762 8454
+2410 762 25840
+2411 762 15791
+2412 762 25516
+2413 762 17301
+2414 762 10375
+2415 762 26026
+2416 762 8986
+2417 762 42370
+2418 762 41387
+2419 762 51509
+2420 762 22168
+2498 762 37625
+3273 762 27852657
+685 763 1
+1748 763 46840
+1753 763 43137
+1754 763 61818
+1763 763 22233
+1768 763 51120
+1790 763 39567
+1795 763 10095
+1801 763 53485
+1830 763 59541
+1836 763 52505
+1881 763 41681
+1925 763 19960
+1991 763 46228
+1996 763 2479
+2351 763 21309
+2352 763 35091
+2355 763 23033
+2356 763 50852
+2357 763 45212
+2362 763 20058
+2363 763 3593
+2368 763 35095
+2374 763 19041
+2375 763 25233
+2376 763 7952
+2377 763 28430
+2378 763 28430
+2379 763 60933
+2380 763 57247
+2382 763 11790
+2383 763 9696
+2384 763 11280
+2385 763 56352
+2386 763 19074
+2387 763 56165
+2388 763 16681
+2389 763 43364
+2390 763 39958
+2392 763 3681
+2393 763 33152
+2394 763 28502
+2395 763 10502
+2396 763 60114
+2397 763 3949
+2398 763 24829
+2399 763 65258
+2400 763 51015
+2401 763 62510
+2403 763 38864
+2404 763 10729
+2405 763 58340
+2406 763 9446
+2407 763 12247
+2408 763 8298
+2409 763 30181
+2410 763 30269
+2411 763 63249
+2412 763 22608
+2413 763 44030
+2415 763 54392
+2416 763 40612
+2417 763 8603
+2418 763 23712
+2419 763 44961
+2420 763 36663
+2487 763 36433
+2488 763 21647
+2489 763 18012
+2490 763 9742
+2491 763 14660
+2492 763 19889
+2493 763 5775
+2494 763 22971
+2495 763 8560
+2496 763 48562
+2497 763 33441
+2498 763 55602
+2510 763 876
+3274 763 27852657
+686 764 1
+687 764 19751
+688 764 47257
+689 764 47257
+735 764 65490
+737 764 39509
+740 764 13825
+747 764 13825
+756 764 13825
+786 764 33084
+787 764 33084
+788 764 33053
+789 764 2654
+792 764 56541
+793 764 13831
+801 764 13831
+810 764 27656
+820 764 13831
+851 764 33084
+852 764 33084
+853 764 33053
+854 764 2654
+855 764 2654
+857 764 56541
+858 764 13831
+866 764 13831
+875 764 27656
+885 764 27662
+896 764 13831
+1782 764 60278
+1783 764 60278
+1784 764 38602
+1785 764 61338
+1786 764 1060
+1787 764 29308
+1788 764 6941
+1789 764 9520
+1790 764 8460
+1791 764 29308
+1792 764 50089
+1793 764 62756
+1794 764 34231
+1795 764 25771
+1796 764 29308
+1797 764 50089
+1798 764 61334
+1799 764 19087
+1800 764 39868
+1801 764 14097
+1804 764 18879
+1805 764 9697
+1806 764 44854
+1807 764 31832
+1811 764 18569
+1812 764 9387
+1813 764 44544
+1814 764 1158
+1815 764 3470
+1816 764 3470
+1844 764 43036
+1845 764 57652
+1847 764 35948
+1848 764 5584
+1849 764 18537
+1850 764 55269
+1851 764 20984
+1859 764 17514
+1889 764 33079
+1890 764 47695
+1891 764 51165
+1893 764 59869
+1894 764 26180
+1895 764 53847
+1896 764 14858
+1904 764 17758
+1913 764 244
+1944 764 47087
+1945 764 61703
+1946 764 65173
+1947 764 23656
+1949 764 26102
+1950 764 65488
+1951 764 41246
+1959 764 38651
+1968 764 36561
+1978 764 36317
+2010 764 21204
+2011 764 20105
+2012 764 25870
+2013 764 52159
+2014 764 20797
+2016 764 6494
+2017 764 17617
+2025 764 12074
+2034 764 58212
+2044 764 20854
+2055 764 50058
+2371 764 19172
+2372 764 6266
+2373 764 54192
+2374 764 35122
+2375 764 29304
+2376 764 7132
+2377 764 50515
+2378 764 40533
+2386 764 63784
+2395 764 42736
+2405 764 18310
+2416 764 20117
+2494 764 23010
+3275 764 27852657
+687 765 1
+688 765 1
+689 765 1
+700 765 1
+701 765 1
+726 765 1
+1793 765 32761
+1794 765 32761
+1795 765 32761
+1798 765 32761
+1799 765 32761
+1800 765 1
+1801 765 32761
+1829 765 32761
+1830 765 32761
+1834 765 32761
+1835 765 1
+1836 765 32761
+1875 765 32761
+1880 765 1
+1881 765 32761
+1936 765 32761
+2373 765 24571
+2374 765 24571
+2375 765 49142
+2376 765 49141
+2382 765 24571
+2383 765 49142
+2384 765 49141
+2392 765 49142
+2393 765 49141
+2403 765 49141
+2413 765 24572
+2491 765 4096
+2492 765 36857
+2494 765 8190
+2495 765 8190
+2496 765 8190
+2497 765 8190
+2498 765 8190
+2510 765 19965
+3276 765 27852657
+688 766 1
+689 766 1
+1936 766 41786
+1994 766 38370
+1995 766 14836
+1996 766 14836
+2013 766 20524
+2014 766 10492
+2022 766 40204
+2029 766 4820
+2031 766 44577
+2034 766 22533
+2035 766 22533
+2036 766 22533
+2037 766 54301
+2038 766 28634
+2039 766 25762
+2040 766 49015
+2043 766 15519
+2044 766 17219
+2045 766 17219
+2046 766 39752
+2047 766 17219
+2048 766 54301
+2049 766 28634
+2050 766 25762
+2051 766 49015
+2052 766 59267
+2054 766 15519
+2055 766 17219
+2056 766 17219
+2057 766 39752
+2058 766 34438
+2059 766 17219
+2344 766 9166
+2345 766 9166
+2346 766 3289
+2347 766 3190
+2348 766 59545
+2349 766 48904
+2350 766 41397
+2351 766 499
+2352 766 6475
+2353 766 48904
+2354 766 41397
+2355 766 64836
+2356 766 1079
+2357 766 60125
+2358 766 48904
+2359 766 41397
+2360 766 10548
+2361 766 7481
+2362 766 43521
+2363 766 48917
+2366 766 18263
+2367 766 14941
+2368 766 42071
+2369 766 1400
+2373 766 58906
+2374 766 47644
+2375 766 26163
+2376 766 26642
+2377 766 177
+2378 766 177
+2379 766 31053
+2380 766 65091
+2382 766 32598
+2383 766 21522
+2384 766 10634
+2385 766 18185
+2386 766 16991
+2387 766 16814
+2388 766 29429
+2389 766 63467
+2390 766 4628
+2392 766 57021
+2393 766 52766
+2394 766 28170
+2395 766 16486
+2396 766 54168
+2397 766 37354
+2398 766 60949
+2399 766 14594
+2400 766 28157
+2401 766 4385
+2403 766 57909
+2404 766 55763
+2405 766 9795
+2406 766 30090
+2407 766 30718
+2408 766 58885
+2409 766 57752
+2410 766 25004
+2411 766 30355
+2412 766 18959
+2413 766 46390
+2415 766 12389
+2416 766 64386
+2417 766 42395
+2418 766 30385
+2419 766 11760
+2420 766 18396
+2487 766 44562
+2488 766 12929
+2489 766 535
+2490 766 31229
+2491 766 49735
+2492 766 61326
+2493 766 1563
+2494 766 63581
+2495 766 58012
+2496 766 24968
+2497 766 57440
+2498 766 35753
+2510 766 28791
+3277 766 27852657
+689 767 1
+1748 767 46840
+1753 767 43137
+1754 767 61818
+1768 767 7832
+1795 767 49662
+1801 767 57777
+1830 767 59541
+1836 767 54024
+1881 767 51190
+1996 767 48707
+2355 767 2930
+2356 767 54849
+2357 767 18779
+2362 767 60528
+2363 767 37952
+2368 767 21566
+2374 767 21936
+2375 767 13040
+2376 767 56248
+2377 767 30299
+2378 767 30299
+2379 767 35332
+2380 767 60279
+2382 767 35675
+2383 767 56993
+2384 767 21191
+2385 767 44012
+2386 767 5762
+2387 767 40984
+2388 767 31957
+2389 767 63802
+2390 767 56848
+2392 767 6552
+2393 767 37626
+2394 767 53219
+2395 767 59022
+2396 767 9551
+2397 767 34088
+2398 767 48012
+2399 767 13167
+2400 767 36070
+2401 767 6691
+2403 767 45361
+2404 767 41762
+2405 767 16508
+2406 767 35250
+2407 767 51033
+2408 767 16945
+2409 767 56627
+2410 767 1318
+2411 767 33611
+2412 767 12360
+2413 767 58385
+2415 767 35138
+2416 767 1095
+2417 767 6078
+2418 767 11195
+2419 767 16248
+2420 767 64824
+2487 767 14279
+2488 767 55585
+2489 767 63354
+2490 767 325
+2491 767 28842
+2492 767 41100
+2493 767 4281
+2494 767 32446
+2495 767 63687
+2496 767 56606
+2497 767 28447
+2498 767 27747
+2510 767 50214
+3278 767 27852657
+689 768 1
+1037 768 33896
+1041 768 845
+1042 768 32470
+1052 768 7158
+1072 768 54151
+1077 768 61245
+1162 768 56465
+1167 768 30922
+1312 768 34007
+1795 768 56823
+2153 768 35023
+2154 768 37858
+2155 768 33557
+2160 768 28785
+2161 768 18386
+2166 768 34687
+2172 768 9590
+2173 768 41394
+2174 768 17830
+2175 768 52844
+2176 768 52844
+2205 768 12104
+2206 768 12636
+2208 768 14497
+2209 768 29040
+2210 768 57290
+2211 768 16530
+2212 768 38958
+2220 768 51635
+2250 768 27838
+2251 768 19934
+2252 768 60742
+2254 768 48130
+2255 768 38015
+2256 768 12861
+2257 768 53669
+2265 768 34233
+2274 768 48119
+2305 768 6431
+2306 768 10728
+2307 768 28022
+2308 768 1038
+2310 768 21182
+2311 768 55083
+2312 768 12475
+2320 768 15113
+2329 768 61757
+2339 768 13638
+2371 768 58354
+2372 768 13760
+2373 768 38193
+2374 768 30151
+2375 768 54879
+2377 768 46487
+2378 768 24128
+2386 768 4324
+2395 768 39856
+2405 768 37579
+2416 768 23941
+2449 768 59491
+2450 768 50142
+2451 768 45575
+2452 768 15720
+2453 768 18324
+2454 768 40532
+2455 768 10666
+2456 768 64837
+2464 768 30940
+2473 768 2764
+2483 768 34043
+2494 768 37058
+2506 768 60811
+3279 768 27852657
+690 769 1
+691 769 1
+778 769 37874
+835 769 10285
+836 769 60982
+837 769 60982
+855 769 48012
+863 769 7
+870 769 16466
+872 769 4944
+875 769 27117
+876 769 27117
+877 769 27117
+878 769 43950
+879 769 36203
+880 769 13879
+881 769 10813
+884 769 35124
+885 769 14645
+886 769 14645
+887 769 41762
+888 769 14645
+889 769 43950
+890 769 36203
+891 769 13879
+892 769 10813
+893 769 56310
+895 769 35124
+896 769 14645
+897 769 14645
+898 769 41762
+899 769 29290
+900 769 14645
+1983 769 4741
+1984 769 4741
+1985 769 1996
+1986 769 5164
+1987 769 423
+1988 769 24316
+1989 769 51985
+1990 769 41148
+1991 769 40725
+1992 769 24316
+1993 769 51985
+1994 769 57691
+1995 769 60049
+1996 769 19324
+1997 769 24316
+1998 769 51985
+1999 769 632
+2000 769 12911
+2001 769 33379
+2002 769 14055
+2005 769 38326
+2006 769 14820
+2007 769 22396
+2008 769 42532
+2012 769 27958
+2013 769 4452
+2014 769 33857
+2015 769 39066
+2016 769 39708
+2017 769 39708
+2018 769 19721
+2019 769 51786
+2021 769 20678
+2022 769 19975
+2023 769 63906
+2024 769 32694
+2025 769 65096
+2026 769 25388
+2027 769 50819
+2028 769 17363
+2029 769 18135
+2031 769 28196
+2032 769 14277
+2033 769 24120
+2034 769 64847
+2035 769 34752
+2036 769 9364
+2037 769 19026
+2038 769 51529
+2039 769 31753
+2040 769 8233
+2042 769 56417
+2043 769 38301
+2044 769 2799
+2045 769 61686
+2046 769 60121
+2047 769 50757
+2048 769 54221
+2049 769 13716
+2050 769 61873
+2051 769 9021
+2052 769 9274
+2054 769 48436
+2055 769 59776
+2056 769 48495
+2057 769 46070
+2058 769 34298
+2059 769 49062
+2409 769 32851
+2410 769 8421
+2411 769 28275
+2412 769 65338
+2413 769 10629
+2414 769 23132
+2415 769 8217
+2416 769 33855
+2417 769 48209
+2418 769 12299
+2419 769 58274
+2420 769 18511
+2498 769 1930
+3280 769 27852657
+691 770 1
+703 770 11054
+729 770 2581
+2001 770 60281
+2002 770 31692
+2007 770 60533
+2014 770 52815
+2015 770 22206
+2016 770 27514
+2017 770 27514
+2018 770 36739
+2019 770 13864
+2021 770 31241
+2022 770 6264
+2023 770 6349
+2024 770 41469
+2025 770 38479
+2026 770 10965
+2027 770 22859
+2028 770 25751
+2029 770 25751
+2031 770 43757
+2032 770 61734
+2033 770 42359
+2034 770 23695
+2035 770 11967
+2036 770 1002
+2037 770 27673
+2038 770 37872
+2039 770 37872
+2040 770 37872
+2042 770 8866
+2043 770 28285
+2044 770 880
+2045 770 39746
+2046 770 27386
+2047 770 26384
+2048 770 5099
+2049 770 31562
+2050 770 31562
+2051 770 31562
+2052 770 53481
+2054 770 8400
+2055 770 41876
+2056 770 25263
+2057 770 26144
+2058 770 4767
+2059 770 43904
+2409 770 22260
+2410 770 23857
+2411 770 23857
+2412 770 23857
+2413 770 40169
+2414 770 54272
+2415 770 12977
+2416 770 32897
+2417 770 32922
+2418 770 34267
+2419 770 10488
+2420 770 60348
+2498 770 9628
+3281 770 27852657
+692 771 1
+696 771 65520
+704 771 1
+707 771 65518
+715 771 65518
+716 771 65520
+733 771 1
+740 771 65518
+747 771 65515
+748 771 65518
+756 771 65518
+757 771 65518
+758 771 65520
+793 771 65519
+801 771 65517
+802 771 65519
+810 771 65517
+811 771 65517
+812 771 65519
+820 771 65520
+821 771 65520
+822 771 65520
+858 771 65519
+866 771 65517
+867 771 65519
+877 771 2
+885 771 2
+886 771 2
+887 771 6
+888 771 4
+896 771 3
+897 771 3
+898 771 7
+899 771 8
+900 771 4
+1808 771 24566
+1815 771 65509
+1816 771 40943
+1851 771 16377
+1858 771 12
+1859 771 40967
+1860 771 12
+1895 771 51948
+1896 771 2804
+1903 771 31361
+1904 771 34177
+1905 771 31373
+1912 771 31349
+1913 771 58731
+1914 771 62710
+1915 771 31349
+1943 771 65515
+1951 771 16383
+1959 771 16401
+1960 771 18
+1968 771 2828
+1969 771 31373
+1970 771 31355
+1977 771 34172
+1978 771 9618
+1979 771 34184
+1980 771 34184
+1981 771 34178
+2009 771 49144
+2017 771 32765
+2024 771 16389
+2026 771 32756
+2031 771 49484
+2033 771 40971
+2034 771 4842
+2035 771 26701
+2036 771 59466
+2037 771 2872
+2038 771 2872
+2039 771 2872
+2040 771 2872
+2043 771 25368
+2044 771 25824
+2045 771 6427
+2046 771 57166
+2047 771 63221
+2048 771 2872
+2049 771 2872
+2050 771 2872
+2051 771 2872
+2052 771 2872
+2054 771 56717
+2055 771 48973
+2056 771 5010
+2057 771 6606
+2058 771 7520
+2059 771 43998
+2373 771 57329
+2374 771 57329
+2375 771 57329
+2376 771 57329
+2377 771 7493
+2378 771 48444
+2379 771 3824
+2380 771 3824
+2382 771 16695
+2383 771 16695
+2384 771 16695
+2385 771 2261
+2386 771 19884
+2387 771 36961
+2388 771 1602
+2389 771 1602
+2390 771 1602
+2392 771 36788
+2393 771 36788
+2394 771 49
+2395 771 43585
+2396 771 55228
+2397 771 18267
+2398 771 46053
+2399 771 46053
+2400 771 46053
+2401 771 46053
+2403 771 46007
+2404 771 5530
+2405 771 44070
+2406 771 33684
+2407 771 7291
+2408 771 54545
+2409 771 52987
+2410 771 52987
+2411 771 52987
+2412 771 52987
+2413 771 52987
+2415 771 17613
+2416 771 10905
+2417 771 9808
+2418 771 2780
+2419 771 64486
+2420 771 34511
+2487 771 37612
+2488 771 37612
+2489 771 37612
+2490 771 37612
+2491 771 37612
+2492 771 37612
+2493 771 20647
+2494 771 17471
+2495 771 64195
+2496 771 34326
+2497 771 59755
+2498 771 3800
+2510 771 25792
+3282 771 27852657
+693 772 1
+694 772 1
+695 772 1
+707 772 39112
+716 772 26409
+740 772 18065
+748 772 50631
+756 772 12209
+757 772 23695
+758 772 64994
+793 772 18065
+802 772 29937
+812 772 2151
+818 772 61001
+819 772 49039
+820 772 36830
+821 772 1456
+822 772 57710
+823 772 55032
+858 772 64660
+867 772 64625
+877 772 55994
+888 772 58388
+896 772 13112
+897 772 48135
+898 772 43950
+899 772 6927
+900 772 3571
+2015 772 31718
+2016 772 41530
+2017 772 26738
+2018 772 6933
+2019 772 6933
+2021 772 49317
+2022 772 49317
+2023 772 40025
+2024 772 12050
+2025 772 4102
+2026 772 13534
+2027 772 35061
+2028 772 35061
+2029 772 35061
+2031 772 40187
+2032 772 24831
+2033 772 59044
+2034 772 6564
+2035 772 54488
+2036 772 18133
+2037 772 35732
+2038 772 35732
+2039 772 35732
+2040 772 35732
+2042 772 2136
+2043 772 38290
+2044 772 19917
+2045 772 58462
+2046 772 8819
+2047 772 51554
+2048 772 43432
+2049 772 43432
+2050 772 43432
+2051 772 43432
+2052 772 43432
+2054 772 15430
+2055 772 17035
+2056 772 23508
+2057 772 16204
+2058 772 18614
+2059 772 4128
+2409 772 1159
+2410 772 1159
+2411 772 1159
+2412 772 1159
+2413 772 1159
+2414 772 1159
+2415 772 15070
+2416 772 24444
+2417 772 41295
+2418 772 11049
+2419 772 16371
+2420 772 43372
+2498 772 19751
+3283 772 27852657
+694 773 1
+1812 773 38841
+1813 773 38841
+1851 773 58174
+1856 773 4757
+1860 773 7347
+1896 773 41083
+1905 773 24500
+1913 773 50172
+1914 773 56977
+1915 773 39824
+1951 773 41083
+1960 773 53440
+1970 773 15012
+1976 773 46937
+1977 773 60234
+1978 773 10062
+1979 773 32894
+1980 773 51577
+1981 773 10868
+2017 773 42392
+2026 773 16987
+2036 773 41351
+2047 773 34565
+2055 773 37045
+2056 773 1211
+2057 773 44228
+2058 773 11243
+2059 773 53067
+2368 773 42528
+2374 773 32770
+2375 773 9565
+2376 773 13828
+2377 773 10296
+2378 773 59837
+2379 773 21590
+2380 773 14119
+2382 773 52358
+2383 773 35068
+2384 773 42225
+2385 773 51499
+2386 773 56967
+2387 773 45544
+2388 773 49485
+2389 773 48161
+2390 773 48161
+2392 773 30182
+2393 773 6088
+2394 773 27548
+2395 773 12618
+2396 773 61764
+2397 773 9678
+2398 773 56792
+2399 773 33273
+2400 773 33273
+2401 773 53688
+2403 773 20152
+2404 773 4564
+2405 773 27427
+2406 773 12068
+2407 773 29649
+2408 773 23716
+2409 773 24110
+2410 773 47610
+2411 773 47610
+2412 773 2363
+2413 773 58535
+2415 773 27608
+2416 773 31698
+2417 773 59326
+2418 773 16227
+2419 773 6147
+2420 773 59966
+2487 773 12109
+2488 773 48443
+2489 773 48443
+2490 773 41419
+2491 773 13932
+2492 773 20234
+2493 773 4233
+2494 773 51970
+2495 773 26841
+2496 773 17088
+2497 773 28745
+2498 773 43269
+2510 773 13749
+3284 773 27852657
+695 774 1
+1851 774 27665
+1856 774 60764
+1860 774 37856
+1896 774 18245
+1905 774 3680
+1913 774 17626
+1914 774 56466
+1915 774 25121
+1951 774 18245
+1960 774 39674
+1970 774 8400
+1976 774 9479
+1977 774 15434
+1978 774 63329
+1979 774 53532
+1980 774 44681
+1981 774 61402
+2017 774 4560
+2026 774 7989
+2036 774 58510
+2047 774 3153
+2055 774 33429
+2056 774 17948
+2057 774 54622
+2058 774 42862
+2059 774 35590
+2368 774 39852
+2375 774 17017
+2376 774 64054
+2377 774 3840
+2378 774 56667
+2379 774 61502
+2380 774 41770
+2382 774 31666
+2383 774 33877
+2384 774 18098
+2385 774 56038
+2386 774 10397
+2387 774 27793
+2388 774 33885
+2389 774 55602
+2390 774 55602
+2392 774 57693
+2393 774 48227
+2394 774 44504
+2395 774 30778
+2396 774 32233
+2397 774 35346
+2398 774 6381
+2399 774 54898
+2400 774 54898
+2401 774 54898
+2403 774 44796
+2404 774 25096
+2405 774 42489
+2406 774 5561
+2407 774 49519
+2408 774 25671
+2409 774 6008
+2410 774 43168
+2411 774 43168
+2412 774 43168
+2413 774 49214
+2415 774 38225
+2416 774 40164
+2417 774 6615
+2418 774 29682
+2419 774 65158
+2420 774 25450
+2487 774 43011
+2488 774 17825
+2489 774 17825
+2490 774 17825
+2491 774 20295
+2492 774 19533
+2493 774 15629
+2494 774 29345
+2495 774 21389
+2496 774 22386
+2497 774 65112
+2498 774 55053
+2510 774 39384
+3285 774 27852657
+696 775 1
+707 775 47787
+740 775 42993
+793 775 46858
+858 775 46858
+1089 775 29020
+1090 775 29020
+1175 775 51808
+1176 775 51808
+1178 775 60527
+1179 775 60527
+1180 775 60527
+1181 775 23065
+1182 775 43383
+1210 775 14363
+1320 775 42131
+1321 775 42131
+1322 775 42131
+1324 775 33907
+1325 775 33907
+1326 775 31524
+1327 775 44767
+1360 775 39634
+1405 775 25271
+1530 775 18576
+1531 775 18576
+1532 775 18576
+1533 775 18576
+1535 775 45639
+1536 775 20927
+1537 775 59490
+1572 775 32295
+1617 775 47651
+1672 775 22380
+1809 775 59766
+1810 775 59766
+1811 775 59766
+1812 775 59766
+1813 775 59766
+1815 775 48825
+1816 775 27879
+1851 775 16929
+1896 775 58133
+1951 775 13395
+2017 775 37419
+2169 775 36748
+2170 775 36748
+2171 775 36748
+2172 775 36748
+2173 775 36748
+2174 775 36748
+2175 775 7499
+2176 775 39913
+2212 775 15682
+2257 775 42239
+2312 775 62541
+2378 775 47568
+2456 775 32244
+3286 775 27852657
+697 776 1
+701 776 65520
+703 776 1
+855 776 644
+863 776 13571
+869 776 54280
+870 776 39051
+872 776 51717
+875 776 16766
+876 776 16766
+877 776 16766
+878 776 36501
+879 776 5328
+880 776 55620
+881 776 61274
+884 776 47722
+885 776 45994
+886 776 45994
+887 776 62760
+888 776 45994
+889 776 36501
+890 776 5328
+891 776 55620
+892 776 61274
+893 776 26550
+895 776 47722
+896 776 45994
+897 776 45994
+898 776 62760
+899 776 26467
+900 776 45994
+1992 776 41252
+1993 776 41252
+1994 776 41252
+1995 776 41252
+1996 776 41252
+1997 776 41252
+2001 776 41252
+2007 776 9774
+2008 776 14405
+2012 776 50682
+2013 776 50682
+2014 776 60456
+2015 776 18047
+2016 776 53752
+2017 776 53752
+2018 776 22725
+2019 776 62912
+2021 776 34417
+2022 776 49042
+2023 776 65262
+2024 776 61800
+2025 776 61707
+2026 776 7955
+2027 776 12597
+2028 776 48852
+2029 776 32295
+2031 776 54739
+2032 776 33300
+2033 776 56015
+2034 776 20207
+2035 776 20178
+2036 776 12223
+2037 776 36917
+2038 776 7651
+2039 776 56615
+2040 776 25018
+2042 776 6553
+2043 776 14742
+2044 776 22927
+2045 776 1613
+2046 776 23904
+2047 776 11681
+2048 776 16525
+2049 776 27931
+2050 776 64986
+2051 776 25033
+2052 776 24622
+2054 776 51662
+2055 776 29699
+2056 776 17627
+2057 776 41579
+2058 776 53206
+2059 776 41525
+2409 776 19763
+2410 776 45652
+2411 776 32747
+2412 776 32748
+2413 776 24651
+2414 776 47353
+2415 776 45437
+2416 776 11603
+2417 776 49649
+2418 776 49015
+2419 776 12636
+2420 776 3371
+2498 776 4566
+3287 776 27852657
+698 777 1
+726 777 65520
+834 777 1
+835 777 1
+836 777 1
+837 777 1
+1827 777 49142
+1862 777 65519
+1863 777 65519
+1865 777 65519
+1871 777 16379
+1872 777 16379
+1875 777 32760
+1876 777 16379
+1877 777 32758
+1878 777 16379
+1880 777 65520
+1881 777 32760
+1917 777 65519
+1918 777 65519
+1920 777 65519
+1923 777 65519
+1931 777 16379
+1932 777 32758
+1933 777 16379
+1936 777 32760
+1983 777 65519
+1984 777 65519
+1986 777 65519
+1989 777 65519
+1992 777 65519
+1993 777 32757
+1994 777 32759
+1995 777 32759
+1996 777 32759
+2344 777 65520
+2345 777 65520
+2347 777 65520
+2350 777 65520
+2353 777 21840
+2354 777 38219
+2355 777 38220
+2356 777 38220
+2357 777 38220
+2358 777 21840
+2359 777 65519
+2360 777 65520
+2361 777 65520
+2362 777 38219
+2363 777 65520
+2380 777 21841
+2388 777 49140
+2389 777 62790
+2390 777 35490
+2392 777 16379
+2393 777 16380
+2398 777 49140
+2399 777 62790
+2400 777 35490
+2401 777 21840
+2403 777 16380
+2409 777 49140
+2410 777 62791
+2411 777 35491
+2412 777 21841
+2413 777 8190
+2487 777 28321
+2488 777 39579
+2489 777 5799
+2490 777 65519
+2491 777 15353
+2492 777 32757
+2496 777 57331
+2497 777 57331
+2498 777 57331
+2510 777 18085
+3288 777 27852657
+699 778 1
+1828 778 27130
+1829 778 18779
+1830 778 18779
+1899 778 22510
+1901 778 26578
+1904 778 30554
+1905 778 30554
+1914 778 30554
+1952 778 35838
+1953 778 35838
+1954 778 58348
+1955 778 26634
+1958 778 14727
+1959 778 18155
+1960 778 18155
+1969 778 48709
+1979 778 18155
+2018 778 35838
+2019 778 35838
+2020 778 58348
+2021 778 26634
+2022 778 26634
+2024 778 14727
+2025 778 18155
+2026 778 18155
+2035 778 48709
+2045 778 36310
+2056 778 18155
+2178 778 39202
+2179 778 39202
+2180 778 49662
+2181 778 36734
+2182 778 63053
+2183 778 51233
+2184 778 28651
+2185 778 29450
+2186 778 31918
+2187 778 51233
+2188 778 28651
+2189 778 55857
+2190 778 15492
+2191 778 49095
+2192 778 51233
+2193 778 28651
+2194 778 45975
+2195 778 57051
+2196 778 45262
+2197 778 61688
+2200 778 4302
+2201 778 43336
+2202 778 21424
+2203 778 2256
+2207 778 55228
+2208 778 28741
+2209 778 6829
+2210 778 31270
+2211 778 36555
+2212 778 36555
+2213 778 43624
+2214 778 8275
+2216 778 14272
+2217 778 57881
+2218 778 55835
+2219 778 22475
+2220 778 11466
+2221 778 40432
+2258 778 13410
+2259 778 43582
+2260 778 9036
+2262 778 17120
+2263 778 19376
+2264 778 12593
+2265 778 25292
+2266 778 60374
+2275 778 19942
+2313 778 26160
+2314 778 56332
+2315 778 21786
+2316 778 57645
+2318 778 49521
+2319 778 35434
+2320 778 7962
+2321 778 30568
+2330 778 25167
+2340 778 5225
+2379 778 57840
+2380 778 14199
+2381 778 39812
+2382 778 48351
+2383 778 21812
+2385 778 11954
+2386 778 56906
+2387 778 12580
+2396 778 1458
+2406 778 18027
+2417 778 12802
+2457 778 38758
+2458 778 9276
+2459 778 48290
+2460 778 56058
+2461 778 30091
+2462 778 33031
+2463 778 18466
+2464 778 7154
+2465 778 18616
+2474 778 8364
+2484 778 33523
+2495 778 11894
+2507 778 4048
+3289 778 27852657
+700 779 1
+701 779 1
+726 779 1
+1829 779 49142
+1830 779 49142
+1834 779 2
+1835 779 49142
+1875 779 49142
+1880 779 49142
+2382 779 1
+2383 779 8191
+2392 779 8191
+2413 779 8191
+2491 779 13310
+2492 779 49142
+2510 779 8191
+3290 779 27852657
+701 780 1
+1748 780 20208
+1753 780 47236
+1754 780 27028
+1768 780 50531
+1795 780 23135
+1801 780 61425
+1830 780 10942
+1836 780 6454
+1881 780 29173
+1996 780 59071
+2355 780 14352
+2356 780 52498
+2357 780 5014
+2362 780 6454
+2363 780 14318
+2368 780 40077
+2374 780 6893
+2375 780 62299
+2376 780 59146
+2377 780 37352
+2378 780 37352
+2379 780 27023
+2380 780 26075
+2382 780 5545
+2383 780 44156
+2384 780 1671
+2385 780 26022
+2386 780 47401
+2387 780 10049
+2388 780 23737
+2389 780 381
+2390 780 19719
+2392 780 61956
+2393 780 36202
+2394 780 34239
+2395 780 29480
+2396 780 56162
+2397 780 46113
+2398 780 57128
+2399 780 60309
+2400 780 59879
+2401 780 28541
+2403 780 53773
+2404 780 2519
+2405 780 32035
+2406 780 19942
+2407 780 52402
+2408 780 6289
+2409 780 63909
+2410 780 21199
+2411 780 28972
+2412 780 47692
+2413 780 29641
+2415 780 52754
+2416 780 63453
+2417 780 43490
+2418 780 65218
+2419 780 42742
+2420 780 36453
+2487 780 37081
+2488 780 62608
+2489 780 60903
+2490 780 16727
+2491 780 58291
+2492 780 41710
+2493 780 46426
+2494 780 20941
+2495 780 4550
+2496 780 48521
+2497 780 59526
+2498 780 13998
+2510 780 2179
+3291 780 27852657
+701 781 1
+1125 781 33896
+1130 781 845
+1131 781 32470
+1141 781 7158
+1162 781 54151
+1167 781 61245
+1192 781 56465
+1196 781 30922
+1345 781 34007
+1830 781 56823
+2189 781 35023
+2190 781 37858
+2191 781 33557
+2196 781 28785
+2197 781 18386
+2202 781 34687
+2208 781 9590
+2209 781 41394
+2210 781 17830
+2211 781 52844
+2212 781 52844
+2213 781 12104
+2214 781 12636
+2216 781 14497
+2217 781 29040
+2218 781 57290
+2219 781 16530
+2220 781 38958
+2221 781 51635
+2258 781 27838
+2259 781 19934
+2260 781 60742
+2262 781 48130
+2263 781 38015
+2264 781 12861
+2265 781 53669
+2266 781 34233
+2275 781 48119
+2313 781 6431
+2314 781 10728
+2315 781 28022
+2316 781 1038
+2318 781 21182
+2319 781 55083
+2320 781 12475
+2321 781 15113
+2330 781 61757
+2340 781 13638
+2379 781 58354
+2380 781 13760
+2381 781 38193
+2382 781 30151
+2383 781 54879
+2385 781 46487
+2386 781 24128
+2387 781 4324
+2396 781 39856
+2406 781 37579
+2417 781 23941
+2457 781 59491
+2458 781 50142
+2459 781 45575
+2460 781 15720
+2461 781 18324
+2462 781 40532
+2463 781 10666
+2464 781 64837
+2465 781 30940
+2474 781 2764
+2484 781 34043
+2495 781 37058
+2507 781 60811
+3292 781 27852657
+702 782 1
+703 782 1
+855 782 61136
+863 782 55752
+870 782 26622
+872 782 60568
+875 782 7132
+876 782 7132
+877 782 7132
+878 782 52136
+879 782 52136
+880 782 13237
+881 782 13237
+884 782 30661
+885 782 54951
+886 782 54951
+887 782 62083
+888 782 54951
+889 782 52136
+890 782 52136
+891 782 13237
+892 782 13237
+893 782 15752
+895 782 30661
+896 782 54951
+897 782 54951
+898 782 62083
+899 782 44381
+900 782 54951
+2007 782 56555
+2008 782 32541
+2012 782 37637
+2013 782 37637
+2014 782 28671
+2015 782 28004
+2016 782 64488
+2017 782 64488
+2018 782 21803
+2019 782 21803
+2021 782 33382
+2022 782 1080
+2023 782 3958
+2024 782 1234
+2025 782 62887
+2026 782 63920
+2027 782 49901
+2028 782 49901
+2029 782 44021
+2031 782 2714
+2032 782 9436
+2033 782 29184
+2034 782 65017
+2035 782 26505
+2036 782 28106
+2037 782 5531
+2038 782 5531
+2039 782 65172
+2040 782 65172
+2042 782 39797
+2043 782 16587
+2044 782 28313
+2045 782 47099
+2046 782 7851
+2047 782 45266
+2048 782 46663
+2049 782 46663
+2050 782 17618
+2051 782 17618
+2052 782 34351
+2054 782 5297
+2055 782 49515
+2056 782 35141
+2057 782 19848
+2058 782 20072
+2059 782 40327
+2409 782 7278
+2410 782 7278
+2411 782 58018
+2412 782 58018
+2413 782 45936
+2414 782 17973
+2415 782 50965
+2416 782 64086
+2417 782 8078
+2418 782 41206
+2419 782 20008
+2420 782 44523
+2498 782 33534
+3293 782 27852657
+703 783 1
+2384 783 65520
+3294 783 27852657
+704 784 1
+707 784 65520
+716 784 1
+733 784 4962
+740 784 60559
+748 784 16366
+756 784 12295
+757 784 19884
+758 784 3519
+785 784 19012
+793 784 46509
+802 784 4083
+812 784 58649
+818 784 3428
+819 784 45574
+820 784 33279
+821 784 32018
+822 784 56752
+823 784 1622
+850 784 41192
+858 784 24329
+867 784 16329
+877 784 29787
+888 784 4541
+896 784 52803
+897 784 47349
+898 784 60694
+899 784 45687
+900 784 42768
+2009 784 56906
+2016 784 61580
+2017 784 4674
+2018 784 64750
+2019 784 64750
+2021 784 35833
+2022 784 35833
+2023 784 35833
+2024 784 53367
+2025 784 44210
+2026 784 9259
+2027 784 33015
+2028 784 33015
+2029 784 33015
+2031 784 62615
+2032 784 62615
+2033 784 14532
+2034 784 3041
+2035 784 31828
+2036 784 15027
+2037 784 19048
+2038 784 19048
+2039 784 19048
+2040 784 19048
+2042 784 788
+2043 784 60866
+2044 784 42541
+2045 784 64445
+2046 784 34502
+2047 784 15078
+2048 784 37074
+2049 784 37074
+2050 784 37074
+2051 784 37074
+2052 784 37074
+2054 784 24216
+2055 784 10050
+2056 784 55461
+2057 784 64824
+2058 784 24456
+2059 784 24044
+2409 784 65222
+2410 784 65222
+2411 784 65222
+2412 784 65222
+2413 784 65222
+2414 784 65222
+2415 784 28920
+2416 784 19260
+2417 784 59239
+2418 784 29558
+2419 784 44332
+2420 784 54208
+2498 784 62838
+3295 784 27852657
+705 785 1
+706 785 1
+711 785 1
+712 785 1
+1910 785 54601
+1911 785 54601
+1958 785 20816
+1959 785 20816
+1960 785 20816
+1966 785 54601
+1967 785 20816
+1968 785 20816
+1969 785 41632
+1970 785 20816
+1977 785 20816
+1978 785 20816
+1979 785 41632
+1980 785 41632
+1981 785 20816
+2016 785 35957
+2017 785 35957
+2024 785 56773
+2025 785 5369
+2026 785 34933
+2031 785 6181
+2033 785 56773
+2034 785 7641
+2035 785 6617
+2036 785 37205
+2043 785 42256
+2044 785 58645
+2045 785 12916
+2046 785 15188
+2047 785 43504
+2054 785 21440
+2055 785 37829
+2056 785 36805
+2057 785 39077
+2058 785 24560
+2059 785 1872
+2377 785 27988
+2378 785 27988
+2385 785 19044
+2386 785 14272
+2387 785 51805
+2392 785 55631
+2393 785 55631
+2394 785 19044
+2395 785 43925
+2396 785 46494
+2397 785 42465
+2403 785 55631
+2404 785 45712
+2405 785 5072
+2406 785 63420
+2407 785 54080
+2408 785 11615
+2415 785 31599
+2416 785 56243
+2417 785 61355
+2418 785 16945
+2419 785 28163
+2420 785 16548
+2493 785 23418
+2494 785 41510
+2495 785 27059
+2496 785 40419
+2497 785 55219
+2498 785 7647
+2510 785 59300
+3296 785 27852657
+706 786 1
+712 786 1
+863 786 1
+1910 786 54601
+1911 786 54601
+1976 786 10920
+2014 786 38901
+2022 786 28666
+2031 786 40980
+2034 786 3285
+2035 786 3285
+2036 786 3285
+2037 786 45842
+2038 786 45842
+2039 786 45842
+2040 786 45842
+2043 786 42535
+2044 786 38957
+2045 786 38957
+2046 786 42242
+2047 786 38957
+2048 786 45842
+2049 786 45842
+2050 786 45842
+2051 786 45842
+2052 786 45842
+2054 786 42535
+2055 786 38957
+2056 786 38957
+2057 786 42242
+2058 786 12393
+2059 786 38957
+2373 786 21831
+2374 786 21831
+2375 786 9289
+2376 786 9289
+2379 786 22893
+2380 786 22893
+2382 786 21602
+2383 786 9316
+2384 786 9316
+2386 786 55860
+2387 786 55860
+2388 786 8871
+2389 786 8871
+2390 786 8871
+2392 786 49851
+2393 786 49851
+2395 786 34308
+2396 786 55774
+2397 786 47690
+2398 786 61030
+2399 786 61030
+2400 786 61030
+2401 786 61030
+2403 786 63777
+2404 786 58647
+2405 786 40036
+2406 786 59531
+2407 786 55339
+2408 786 7649
+2409 786 9366
+2410 786 9366
+2411 786 9366
+2412 786 9366
+2413 786 9366
+2415 786 44549
+2416 786 10118
+2417 786 27959
+2418 786 49468
+2419 786 42675
+2420 786 35026
+2487 786 2632
+2488 786 2632
+2489 786 2632
+2490 786 2632
+2491 786 2632
+2492 786 2632
+2494 786 49978
+2495 786 31392
+2496 786 33092
+2497 786 59030
+2498 786 13709
+2510 786 60908
+3297 786 27852657
+707 787 1
+716 787 65520
+740 787 19564
+748 787 34553
+756 787 3054
+757 787 35516
+758 787 962
+793 787 2437
+802 787 12492
+812 787 47199
+819 787 158
+820 787 27163
+821 787 65043
+822 787 42951
+823 787 62235
+858 787 55965
+867 787 34419
+877 787 54979
+888 787 62432
+897 787 20529
+898 787 65094
+899 787 30005
+900 787 29808
+2016 787 24352
+2017 787 40940
+2018 787 19610
+2019 787 19610
+2021 787 44291
+2022 787 44291
+2023 787 44291
+2024 787 42662
+2025 787 34816
+2026 787 24153
+2027 787 21231
+2028 787 21231
+2029 787 21231
+2031 787 47707
+2032 787 47707
+2033 787 49719
+2034 787 17309
+2035 787 11750
+2036 787 48676
+2037 787 56688
+2038 787 56688
+2039 787 56688
+2040 787 56688
+2042 787 47584
+2043 787 32152
+2044 787 31115
+2045 787 27435
+2046 787 24649
+2047 787 31783
+2048 787 55408
+2049 787 55408
+2050 787 55408
+2051 787 55408
+2052 787 55408
+2054 787 6387
+2055 787 37178
+2056 787 14066
+2057 787 37688
+2058 787 17012
+2059 787 56760
+2409 787 49331
+2410 787 49331
+2411 787 49331
+2412 787 49331
+2413 787 49331
+2414 787 49331
+2415 787 35052
+2416 787 63137
+2417 787 16011
+2418 787 52709
+2419 787 63690
+2420 787 10738
+2498 787 56864
+3298 787 27852657
+708 788 1
+859 788 58048
+868 788 43067
+878 788 34278
+889 788 34278
+1361 788 60996
+1398 788 33042
+1406 788 48670
+1415 788 53195
+1573 788 10054
+1627 788 43655
+1658 788 58725
+1665 788 49622
+1673 788 31226
+1682 788 4666
+1692 788 14206
+1852 788 49558
+1906 788 38666
+1971 788 35536
+2018 788 13107
+2027 788 12512
+2037 788 32045
+2048 788 42116
+2162 788 19154
+2169 788 19154
+2177 788 59343
+2178 788 59343
+2183 788 29539
+2187 788 29539
+2192 788 29539
+2198 788 39633
+2205 788 34937
+2213 788 51843
+2222 788 31528
+2223 788 31528
+2225 788 31528
+2232 788 30273
+2237 788 30273
+2243 788 3214
+2250 788 61362
+2258 788 61600
+2267 788 17015
+2277 788 17170
+2278 788 17170
+2280 788 17170
+2283 788 17170
+2292 788 20796
+2298 788 17173
+2305 788 18561
+2313 788 33926
+2322 788 19459
+2332 788 2475
+2343 788 29635
+2344 788 29635
+2346 788 29635
+2349 788 29635
+2353 788 29635
+2364 788 53309
+2371 788 11652
+2379 788 46933
+2388 788 1752
+2398 788 65428
+2409 788 20943
+2421 788 16895
+2422 788 16895
+2424 788 16895
+2427 788 16895
+2431 788 16895
+2436 788 16895
+2442 788 31939
+2449 788 5246
+2457 788 22862
+2466 788 6113
+2476 788 28642
+2487 788 4180
+2499 788 18735
+3299 788 27852657
+708 789 1
+748 789 50663
+750 789 1
+756 789 51868
+757 789 21821
+758 789 36679
+802 789 9142
+812 789 897
+814 789 65520
+818 789 8083
+819 789 54397
+820 789 2529
+821 789 58047
+822 789 3213
+823 789 38995
+867 789 26655
+877 789 42794
+888 789 7764
+896 789 40084
+897 789 4929
+898 789 48117
+899 789 8487
+900 789 39718
+2007 789 57425
+2014 789 8603
+2015 789 44455
+2016 789 26766
+2017 789 26766
+2018 789 1084
+2019 789 55888
+2021 789 12754
+2022 789 40018
+2023 789 34218
+2024 789 4209
+2025 789 45281
+2026 789 46129
+2027 789 17852
+2028 789 55799
+2029 789 41998
+2031 789 38828
+2032 789 28720
+2033 789 39292
+2034 789 10689
+2035 789 16119
+2036 789 61363
+2037 789 40159
+2038 789 63418
+2039 789 33030
+2040 789 33030
+2042 789 8834
+2043 789 56907
+2044 789 25103
+2045 789 36448
+2046 789 41588
+2047 789 63609
+2048 789 45611
+2049 789 12601
+2050 789 18694
+2051 789 18694
+2052 789 61309
+2054 789 48324
+2055 789 59600
+2056 789 27754
+2057 789 22176
+2058 789 53866
+2059 789 64912
+2409 789 30647
+2410 789 56580
+2411 789 61347
+2412 789 61347
+2413 789 22231
+2414 789 30851
+2415 789 15863
+2416 789 2248
+2417 789 61413
+2418 789 51412
+2419 789 32769
+2420 789 38950
+2498 789 60742
+3300 789 27852657
+709 790 1
+860 790 58048
+869 790 43067
+879 790 34278
+890 790 34278
+1362 790 60996
+1399 790 33042
+1407 790 48670
+1416 790 53195
+1574 790 10054
+1628 790 43655
+1659 790 58725
+1666 790 49622
+1674 790 31226
+1683 790 4666
+1693 790 14206
+1853 790 49558
+1907 790 38666
+1972 790 35536
+2019 790 13107
+2028 790 12512
+2038 790 32045
+2049 790 42116
+2163 790 19154
+2170 790 19154
+2178 790 59343
+2179 790 59343
+2184 790 29539
+2188 790 29539
+2193 790 29539
+2199 790 39633
+2206 790 34937
+2214 790 51843
+2223 790 31528
+2224 790 31528
+2226 790 31528
+2233 790 30273
+2238 790 30273
+2244 790 3214
+2251 790 61362
+2259 790 61600
+2268 790 17015
+2278 790 17170
+2279 790 17170
+2281 790 17170
+2284 790 17170
+2293 790 20796
+2299 790 17173
+2306 790 18561
+2314 790 33926
+2323 790 19459
+2333 790 2475
+2344 790 29635
+2345 790 29635
+2347 790 29635
+2350 790 29635
+2354 790 29635
+2365 790 53309
+2372 790 11652
+2380 790 46933
+2389 790 1752
+2399 790 65428
+2410 790 20943
+2422 790 16895
+2423 790 16895
+2425 790 16895
+2428 790 16895
+2432 790 16895
+2437 790 16895
+2443 790 31939
+2450 790 5246
+2458 790 22862
+2467 790 6113
+2477 790 28642
+2488 790 4180
+2500 790 18735
+3301 790 27852657
+709 791 1
+750 791 65520
+814 791 1
+855 791 21223
+863 791 35404
+869 791 62823
+870 791 33261
+872 791 10172
+875 791 41764
+876 791 41764
+877 791 41764
+878 791 30586
+879 791 30838
+880 791 49171
+881 791 28251
+884 791 42908
+885 791 17781
+886 791 17781
+887 791 59545
+888 791 17781
+889 791 30586
+890 791 30837
+891 791 49171
+892 791 28251
+893 791 62652
+895 791 42908
+896 791 17781
+897 791 17781
+898 791 59545
+899 791 35562
+900 791 17781
+2005 791 58834
+2006 791 58834
+2007 791 13652
+2008 791 8270
+2012 791 30264
+2013 791 30264
+2014 791 50603
+2015 791 57058
+2016 791 30538
+2017 791 30538
+2018 791 39731
+2019 791 13294
+2021 791 56061
+2022 791 38492
+2023 791 38363
+2024 791 19065
+2025 791 31699
+2026 791 1161
+2027 791 27494
+2028 791 9403
+2029 791 13915
+2031 791 1808
+2032 791 55134
+2033 791 55280
+2034 791 65429
+2035 791 49155
+2036 791 47994
+2037 791 11698
+2038 791 1797
+2039 791 7470
+2040 791 12992
+2042 791 45152
+2043 791 26375
+2044 791 11993
+2045 791 33656
+2046 791 22868
+2047 791 40395
+2048 791 23052
+2049 791 40790
+2050 791 52307
+2051 791 18312
+2052 791 1550
+2054 791 39279
+2055 791 36831
+2056 791 34312
+2057 791 50296
+2058 791 24427
+2059 791 49553
+2409 791 55353
+2410 791 6223
+2411 791 48483
+2412 791 48483
+2413 791 18715
+2414 791 43391
+2415 791 39211
+2416 791 10060
+2417 791 22427
+2418 791 19441
+2419 791 65333
+2420 791 26722
+2498 791 13398
+3302 791 27852657
+710 792 1
+861 792 58048
+870 792 43067
+880 792 34278
+891 792 34278
+1363 792 60996
+1400 792 33042
+1408 792 48670
+1417 792 53195
+1575 792 10054
+1629 792 43655
+1660 792 58725
+1667 792 49622
+1675 792 31226
+1684 792 4666
+1694 792 14206
+1854 792 49558
+1908 792 38666
+1973 792 35536
+2020 792 13107
+2029 792 12512
+2039 792 32045
+2050 792 42116
+2164 792 19154
+2171 792 19154
+2180 792 59343
+2181 792 59343
+2185 792 29539
+2189 792 29539
+2194 792 29539
+2200 792 39633
+2207 792 34937
+2215 792 51843
+2225 792 31528
+2226 792 31528
+2227 792 31528
+2234 792 30273
+2239 792 30273
+2245 792 3214
+2252 792 61362
+2260 792 61600
+2269 792 17015
+2280 792 17170
+2281 792 17170
+2282 792 17170
+2285 792 17170
+2294 792 20796
+2300 792 17173
+2307 792 18561
+2315 792 33926
+2324 792 19459
+2334 792 2475
+2346 792 29635
+2347 792 29635
+2348 792 29635
+2351 792 29635
+2355 792 29635
+2366 792 53309
+2373 792 11652
+2381 792 46933
+2390 792 1752
+2400 792 65428
+2411 792 20943
+2424 792 16895
+2425 792 16895
+2426 792 16895
+2429 792 16895
+2433 792 16895
+2438 792 16895
+2444 792 31939
+2451 792 5246
+2459 792 22862
+2468 792 6113
+2478 792 28642
+2489 792 4180
+2501 792 18735
+3303 792 27852657
+710 793 1
+2417 793 65520
+3304 793 27852657
+711 794 1
+862 794 58048
+871 794 43067
+881 794 34278
+892 794 34278
+1364 794 60996
+1401 794 33042
+1409 794 48670
+1418 794 53195
+1576 794 10054
+1630 794 43655
+1661 794 58725
+1668 794 49622
+1676 794 31226
+1685 794 4666
+1695 794 14206
+1855 794 49558
+1909 794 38666
+1974 794 35536
+2021 794 13107
+2030 794 12512
+2040 794 32045
+2051 794 42116
+2165 794 19154
+2172 794 19154
+2183 794 59343
+2184 794 59343
+2186 794 29539
+2190 794 29539
+2195 794 29539
+2201 794 39633
+2208 794 34937
+2216 794 51843
+2228 794 31528
+2229 794 31528
+2230 794 31528
+2235 794 30273
+2240 794 30273
+2246 794 3214
+2253 794 61362
+2261 794 61600
+2270 794 17015
+2283 794 17170
+2284 794 17170
+2285 794 17170
+2286 794 17170
+2295 794 20796
+2301 794 17173
+2308 794 18561
+2316 794 33926
+2325 794 19459
+2335 794 2475
+2349 794 29635
+2350 794 29635
+2351 794 29635
+2352 794 29635
+2356 794 29635
+2367 794 53309
+2374 794 11652
+2382 794 46933
+2391 794 1752
+2401 794 65428
+2412 794 20943
+2427 794 16895
+2428 794 16895
+2429 794 16895
+2430 794 16895
+2434 794 16895
+2439 794 16895
+2445 794 31939
+2452 794 5246
+2460 794 22862
+2469 794 6113
+2479 794 28642
+2490 794 4180
+2502 794 18735
+3305 794 27852657
+711 795 1
+712 795 1
+748 795 34976
+756 795 24806
+757 795 7599
+758 795 38144
+802 795 2585
+812 795 31230
+818 795 36084
+819 795 47570
+820 795 22764
+821 795 19134
+822 795 25454
+823 795 32368
+867 795 19269
+877 795 26427
+888 795 33947
+896 795 26994
+897 795 53889
+898 795 49039
+899 795 49673
+900 795 48094
+2015 795 60542
+2016 795 23497
+2017 795 23497
+2018 795 19175
+2019 795 19175
+2021 795 35436
+2022 795 35436
+2023 795 33521
+2024 795 30924
+2025 795 60937
+2026 795 40619
+2027 795 59234
+2028 795 59234
+2029 795 59234
+2031 795 33919
+2032 795 62765
+2033 795 3058
+2034 795 40480
+2035 795 13551
+2036 795 4092
+2037 795 6248
+2038 795 6248
+2039 795 6248
+2040 795 6248
+2042 795 16917
+2043 795 56035
+2044 795 37372
+2045 795 18647
+2046 795 3228
+2047 795 50709
+2048 795 7235
+2049 795 7235
+2050 795 7235
+2051 795 7235
+2052 795 7235
+2054 795 56668
+2055 795 53082
+2056 795 35607
+2057 795 25033
+2058 795 59401
+2059 795 34199
+2409 795 3782
+2410 795 3782
+2411 795 3782
+2412 795 3782
+2413 795 3782
+2414 795 3782
+2415 795 19507
+2416 795 42532
+2417 795 21362
+2418 795 19500
+2419 795 21602
+2420 795 52134
+2498 795 27671
+3306 795 27852657
+712 796 1
+863 796 58048
+872 796 43067
+882 796 34278
+893 796 34278
+1365 796 60996
+1402 796 33042
+1410 796 48670
+1419 796 53195
+1577 796 10054
+1631 796 43655
+1662 796 58725
+1669 796 49622
+1677 796 31226
+1686 796 4666
+1696 796 14206
+1856 796 49558
+1910 796 38666
+1975 796 35536
+2022 796 13107
+2031 796 12512
+2041 796 32045
+2052 796 42116
+2166 796 19154
+2173 796 19154
+2187 796 59343
+2188 796 59343
+2190 796 29539
+2191 796 29539
+2196 796 29539
+2202 796 39633
+2209 796 34937
+2217 796 51843
+2232 796 31528
+2233 796 31528
+2234 796 31528
+2236 796 30273
+2241 796 30273
+2247 796 3214
+2254 796 61362
+2262 796 61600
+2271 796 17015
+2287 796 17170
+2288 796 17170
+2289 796 17170
+2290 796 17170
+2296 796 20796
+2302 796 17173
+2309 796 18561
+2317 796 33926
+2326 796 19459
+2336 796 2475
+2353 796 29635
+2354 796 29635
+2355 796 29635
+2356 796 29635
+2357 796 29635
+2368 796 53309
+2375 796 11652
+2383 796 46933
+2392 796 1752
+2402 796 65428
+2413 796 20943
+2431 796 16895
+2432 796 16895
+2433 796 16895
+2434 796 16895
+2435 796 16895
+2440 796 16895
+2446 796 31939
+2453 796 5246
+2461 796 22862
+2470 796 6113
+2480 796 28642
+2491 796 4180
+2503 796 18735
+3307 796 27852657
+712 797 1
+748 797 56003
+756 797 27205
+757 797 61775
+758 797 5772
+802 797 17825
+812 797 37327
+819 797 5185
+820 797 34049
+821 797 29243
+822 797 36150
+823 797 4595
+867 797 17224
+877 797 33905
+888 797 57426
+897 797 12706
+898 797 1038
+899 797 36651
+900 797 49341
+2007 797 45790
+2014 797 35643
+2015 797 472
+2016 797 40769
+2017 797 40769
+2018 797 13554
+2019 797 54171
+2021 797 58256
+2022 797 55678
+2023 797 62349
+2024 797 34686
+2025 797 36602
+2026 797 34288
+2027 797 51845
+2028 797 10001
+2029 797 10001
+2031 797 35268
+2032 797 43801
+2033 797 4136
+2034 797 65511
+2035 797 45454
+2036 797 51795
+2037 797 23598
+2038 797 55465
+2039 797 55465
+2040 797 55465
+2042 797 21929
+2043 797 6113
+2044 797 39333
+2045 797 9578
+2046 797 36504
+2047 797 32274
+2048 797 61765
+2049 797 46717
+2050 797 46717
+2051 797 46717
+2052 797 39910
+2054 797 36142
+2055 797 22635
+2056 797 61519
+2057 797 63340
+2058 797 47613
+2059 797 24073
+2409 797 53543
+2410 797 26630
+2411 797 26630
+2412 797 26630
+2413 797 44743
+2414 797 64686
+2415 797 58959
+2416 797 1397
+2417 797 49776
+2418 797 24679
+2419 797 13396
+2420 797 64240
+2498 797 56092
+3308 797 27852657
+713 798 1
+864 798 58048
+873 798 43067
+883 798 34278
+894 798 34278
+1366 798 60996
+1403 798 33042
+1411 798 48670
+1420 798 53195
+1578 798 10054
+1632 798 43655
+1663 798 58725
+1670 798 49622
+1678 798 31226
+1687 798 4666
+1697 798 14206
+1857 798 49558
+1911 798 38666
+1976 798 35536
+2023 798 13107
+2032 798 12512
+2042 798 32045
+2053 798 42116
+2167 798 19154
+2174 798 19154
+2192 798 59343
+2193 798 59343
+2195 798 29539
+2196 798 29539
+2197 798 29539
+2203 798 39633
+2210 798 34937
+2218 798 51843
+2237 798 31528
+2238 798 31528
+2239 798 31528
+2241 798 30273
+2242 798 30273
+2248 798 3214
+2255 798 61362
+2263 798 61600
+2272 798 17015
+2292 798 17170
+2293 798 17170
+2294 798 17170
+2295 798 17170
+2297 798 20796
+2303 798 17173
+2310 798 18561
+2318 798 33926
+2327 798 19459
+2337 798 2475
+2358 798 29635
+2359 798 29635
+2360 798 29635
+2361 798 29635
+2362 798 29635
+2369 798 53309
+2376 798 11652
+2384 798 46933
+2393 798 1752
+2403 798 65428
+2414 798 20943
+2436 798 16895
+2437 798 16895
+2438 798 16895
+2439 798 16895
+2440 798 16895
+2441 798 16895
+2447 798 31939
+2454 798 5246
+2462 798 22862
+2471 798 6113
+2481 798 28642
+2492 798 4180
+2504 798 18735
+3309 798 27852657
+713 799 1
+748 799 46340
+756 799 61091
+757 799 54752
+758 799 8412
+802 799 5354
+812 799 42267
+818 799 60089
+819 799 44762
+820 799 49192
+821 799 857
+822 799 4187
+823 799 35853
+867 799 51035
+877 799 41233
+888 799 61375
+896 799 46021
+897 799 42880
+898 799 40427
+899 799 16879
+900 799 56878
+2015 799 4979
+2016 799 3450
+2017 799 3450
+2018 799 63538
+2019 799 63538
+2021 799 2205
+2022 799 2205
+2023 799 4120
+2024 799 11164
+2025 799 16323
+2026 799 52590
+2027 799 43103
+2028 799 43103
+2029 799 43103
+2031 799 61323
+2032 799 32477
+2033 799 45765
+2034 799 56187
+2035 799 5271
+2036 799 38003
+2037 799 63778
+2038 799 63778
+2039 799 63778
+2040 799 63778
+2042 799 39503
+2043 799 60987
+2044 799 8597
+2045 799 61797
+2046 799 19635
+2047 799 53045
+2048 799 9947
+2049 799 9947
+2050 799 9947
+2051 799 9947
+2052 799 9947
+2054 799 2529
+2055 799 9125
+2056 799 31728
+2057 799 56512
+2058 799 52678
+2059 799 32237
+2409 799 17842
+2410 799 17842
+2411 799 17842
+2412 799 17842
+2413 799 17842
+2414 799 17842
+2415 799 16334
+2416 799 22889
+2417 799 29472
+2418 799 51527
+2419 799 30499
+2420 799 54740
+2498 799 31304
+3310 799 27852657
+714 800 1
+865 800 58048
+874 800 43067
+884 800 34278
+895 800 34278
+1367 800 60996
+1404 800 33042
+1412 800 48670
+1421 800 53195
+1579 800 10054
+1633 800 43655
+1664 800 58725
+1671 800 49622
+1679 800 31226
+1688 800 4666
+1698 800 14206
+1858 800 49558
+1912 800 38666
+1977 800 35536
+2024 800 13107
+2033 800 12512
+2043 800 32045
+2054 800 42116
+2168 800 19154
+2175 800 19154
+2198 800 59343
+2199 800 59343
+2201 800 29539
+2202 800 29539
+2203 800 29539
+2204 800 39633
+2211 800 34937
+2219 800 51843
+2243 800 31528
+2244 800 31528
+2245 800 31528
+2247 800 30273
+2248 800 30273
+2249 800 3214
+2256 800 61362
+2264 800 61600
+2273 800 17015
+2298 800 17170
+2299 800 17170
+2300 800 17170
+2301 800 17170
+2303 800 20796
+2304 800 17173
+2311 800 18561
+2319 800 33926
+2328 800 19459
+2338 800 2475
+2364 800 29635
+2365 800 29635
+2366 800 29635
+2367 800 29635
+2368 800 29635
+2370 800 53309
+2377 800 11652
+2385 800 46933
+2394 800 1752
+2404 800 65428
+2415 800 20943
+2442 800 16895
+2443 800 16895
+2444 800 16895
+2445 800 16895
+2446 800 16895
+2447 800 16895
+2448 800 31939
+2455 800 5246
+2463 800 22862
+2472 800 6113
+2482 800 28642
+2493 800 4180
+2505 800 18735
+3311 800 27852657
+714 801 1
+748 801 47830
+756 801 11080
+757 801 9788
+758 801 27479
+802 801 58544
+812 801 57564
+818 801 49634
+819 801 43314
+820 801 32234
+821 801 42227
+822 801 7963
+823 801 43399
+867 801 45773
+877 801 43907
+888 801 32989
+896 801 58605
+897 801 30182
+898 801 32436
+899 801 45955
+900 801 56365
+2016 801 48714
+2017 801 48714
+2018 801 26177
+2019 801 26177
+2021 801 10824
+2022 801 10824
+2023 801 10824
+2024 801 30607
+2025 801 39151
+2026 801 38715
+2027 801 8738
+2028 801 8738
+2029 801 8738
+2031 801 26682
+2032 801 26682
+2033 801 18647
+2034 801 57458
+2035 801 34799
+2036 801 38146
+2037 801 18350
+2038 801 18350
+2039 801 18350
+2040 801 18350
+2042 801 47142
+2043 801 3447
+2044 801 24116
+2045 801 12315
+2046 801 31224
+2047 801 31963
+2048 801 38426
+2049 801 38426
+2050 801 38426
+2051 801 38426
+2052 801 38426
+2054 801 36172
+2055 801 25813
+2056 801 21564
+2057 801 40765
+2058 801 48670
+2059 801 16301
+2409 801 22559
+2410 801 22559
+2411 801 22559
+2412 801 22559
+2413 801 22559
+2414 801 22559
+2415 801 17953
+2416 801 44074
+2417 801 31553
+2418 801 13620
+2419 801 20890
+2420 801 58693
+2498 801 64954
+3312 801 27852657
+715 802 1
+866 802 58048
+875 802 43067
+885 802 34278
+896 802 34278
+1368 802 60996
+1405 802 33042
+1413 802 48670
+1422 802 53195
+1580 802 10054
+1634 802 43655
+1671 802 58725
+1672 802 49622
+1680 802 31226
+1689 802 4666
+1699 802 14206
+1859 802 49558
+1913 802 38666
+1978 802 35536
+2025 802 13107
+2034 802 12512
+2044 802 32045
+2055 802 42116
+2175 802 19154
+2176 802 19154
+2205 802 59343
+2206 802 59343
+2208 802 29539
+2209 802 29539
+2210 802 29539
+2211 802 39633
+2212 802 34937
+2220 802 51843
+2250 802 31528
+2251 802 31528
+2252 802 31528
+2254 802 30273
+2255 802 30273
+2256 802 3214
+2257 802 61362
+2265 802 61600
+2274 802 17015
+2305 802 17170
+2306 802 17170
+2307 802 17170
+2308 802 17170
+2310 802 20796
+2311 802 17173
+2312 802 18561
+2320 802 33926
+2329 802 19459
+2339 802 2475
+2371 802 29635
+2372 802 29635
+2373 802 29635
+2374 802 29635
+2375 802 29635
+2377 802 53309
+2378 802 11652
+2386 802 46933
+2395 802 1752
+2405 802 65428
+2416 802 20943
+2449 802 16895
+2450 802 16895
+2451 802 16895
+2452 802 16895
+2453 802 16895
+2454 802 16895
+2455 802 31939
+2456 802 5246
+2464 802 22862
+2473 802 6113
+2483 802 28642
+2494 802 4180
+2506 802 18735
+3313 802 27852657
+715 803 1
+716 803 1
+748 803 5702
+756 803 17712
+757 803 2035
+758 803 61855
+802 803 25296
+812 803 2378
+818 803 34916
+819 803 35595
+820 803 17883
+821 803 51623
+822 803 45360
+823 803 39316
+867 803 20329
+877 803 49610
+888 803 35032
+896 803 21856
+897 803 49432
+898 803 30691
+899 803 14567
+900 803 18851
+2016 803 23144
+2017 803 23144
+2018 803 28682
+2019 803 28682
+2021 803 15712
+2022 803 15712
+2023 803 15712
+2024 803 13069
+2025 803 54211
+2026 803 48689
+2027 803 24865
+2028 803 24865
+2029 803 24865
+2031 803 1222
+2032 803 1222
+2033 803 55400
+2034 803 52603
+2035 803 10509
+2036 803 65082
+2037 803 15100
+2038 803 15100
+2039 803 15100
+2040 803 15100
+2042 803 45748
+2043 803 53567
+2044 803 49726
+2045 803 27502
+2046 803 44417
+2047 803 33768
+2048 803 46974
+2049 803 46974
+2050 803 46974
+2051 803 46974
+2052 803 46974
+2054 803 17920
+2055 803 64635
+2056 803 4588
+2057 803 61153
+2058 803 47272
+2059 803 28120
+2409 803 6959
+2410 803 6959
+2411 803 6959
+2412 803 6959
+2413 803 6959
+2414 803 6959
+2415 803 36533
+2416 803 29800
+2417 803 19139
+2418 803 30290
+2419 803 14595
+2420 803 57469
+2498 803 55691
+3314 803 27852657
+716 804 1
+867 804 58048
+876 804 43067
+886 804 34278
+897 804 34278
+1369 804 60996
+1413 804 33042
+1414 804 48670
+1423 804 53195
+1581 804 10054
+1635 804 43655
+1679 804 58725
+1680 804 49622
+1681 804 31226
+1690 804 4666
+1700 804 14206
+1860 804 49558
+1914 804 38666
+1979 804 35536
+2026 804 13107
+2035 804 12512
+2045 804 32045
+2056 804 42116
+2211 804 19154
+2212 804 19154
+2213 804 59343
+2214 804 59343
+2216 804 29539
+2217 804 29539
+2218 804 29539
+2219 804 39633
+2220 804 34937
+2221 804 51843
+2258 804 31528
+2259 804 31528
+2260 804 31528
+2262 804 30273
+2263 804 30273
+2264 804 3214
+2265 804 61362
+2266 804 61600
+2275 804 17015
+2313 804 17170
+2314 804 17170
+2315 804 17170
+2316 804 17170
+2318 804 20796
+2319 804 17173
+2320 804 18561
+2321 804 33926
+2330 804 19459
+2340 804 2475
+2379 804 29635
+2380 804 29635
+2381 804 29635
+2382 804 29635
+2383 804 29635
+2385 804 53309
+2386 804 11652
+2387 804 46933
+2396 804 1752
+2406 804 65428
+2417 804 20943
+2457 804 16895
+2458 804 16895
+2459 804 16895
+2460 804 16895
+2461 804 16895
+2462 804 16895
+2463 804 31939
+2464 804 5246
+2465 804 22862
+2474 804 6113
+2484 804 28642
+2495 804 4180
+2507 804 18735
+3315 804 27852657
+717 805 1
+718 805 1
+762 805 1
+763 805 1
+766 805 1
+827 805 1
+828 805 1
+831 805 1
+835 805 1
+1865 805 49140
+1866 805 49140
+1920 805 49140
+1921 805 49140
+1923 805 65519
+1924 805 49140
+1986 805 32761
+1987 805 32761
+1990 805 32761
+1994 805 32761
+2347 805 16380
+2348 805 16380
+2351 805 16380
+2355 805 16380
+2360 805 16380
+2410 805 1
+2411 805 8192
+2488 805 49140
+2489 805 56307
+3316 805 27852657
+718 806 1
+763 806 1
+828 806 1
+1866 806 24572
+1921 806 24572
+1925 806 40955
+1987 806 61427
+1991 806 28666
+1994 806 33481
+1995 806 25476
+1996 806 62331
+2029 806 29498
+2031 806 21657
+2034 806 34245
+2035 806 34245
+2036 806 34245
+2037 806 33704
+2038 806 33704
+2039 806 63202
+2040 806 61248
+2043 806 62116
+2044 806 20895
+2045 806 20895
+2046 806 55140
+2047 806 20895
+2048 806 33704
+2049 806 33704
+2050 806 63202
+2051 806 61248
+2052 806 61248
+2054 806 62116
+2055 806 20895
+2056 806 20895
+2057 806 55140
+2058 806 41790
+2059 806 20895
+2344 806 37614
+2345 806 37614
+2346 806 8597
+2347 806 24513
+2348 806 25802
+2349 806 61573
+2350 806 21214
+2351 806 58683
+2352 806 32881
+2353 806 61573
+2354 806 21214
+2355 806 8750
+2356 806 30386
+2357 806 63026
+2358 806 61573
+2359 806 21214
+2360 806 27692
+2361 806 47992
+2362 806 23344
+2363 806 25839
+2366 806 58707
+2367 806 46105
+2368 806 53854
+2369 806 2001
+2373 806 27726
+2374 806 15124
+2375 806 22873
+2376 806 44290
+2377 806 10728
+2378 806 10728
+2379 806 36602
+2380 806 62002
+2382 806 16841
+2383 806 24590
+2384 806 33405
+2385 806 9392
+2386 806 27073
+2387 806 16345
+2388 806 44829
+2389 806 4708
+2390 806 64539
+2392 806 61189
+2393 806 63190
+2394 806 28334
+2395 806 29055
+2396 806 63134
+2397 806 46789
+2398 806 65025
+2399 806 24904
+2400 806 19214
+2401 806 36211
+2403 806 40177
+2404 806 7904
+2405 806 22571
+2406 806 30598
+2407 806 28857
+2408 806 47589
+2409 806 33484
+2410 806 19220
+2411 806 8813
+2412 806 65311
+2413 806 13009
+2415 806 30991
+2416 806 49254
+2417 806 64481
+2418 806 13317
+2419 806 54239
+2420 806 6650
+2487 806 56064
+2488 806 40008
+2489 806 41929
+2490 806 54610
+2491 806 62851
+2492 806 10287
+2493 806 38161
+2494 806 36492
+2495 806 64607
+2496 806 48892
+2497 806 14312
+2498 806 31436
+2510 806 4197
+3317 806 27852657
+719 807 1
+724 807 41339
+725 807 15556
+726 807 15556
+751 807 43989
+753 807 55300
+756 807 52563
+757 807 52563
+758 807 52563
+803 807 54924
+804 807 54924
+805 807 33392
+806 807 50994
+809 807 20431
+810 807 11150
+811 807 11150
+812 807 63713
+822 807 11150
+868 807 54924
+869 807 54924
+870 807 33392
+871 807 50994
+872 807 50994
+874 807 20431
+875 807 11150
+876 807 11150
+877 807 63713
+887 807 22300
+898 807 11150
+1862 807 11501
+1863 807 11501
+1864 807 420
+1865 807 25048
+1866 807 13547
+1867 807 39309
+1868 807 23505
+1869 807 8789
+1870 807 60763
+1871 807 50229
+1872 807 12052
+1873 807 5700
+1874 807 16824
+1875 807 21582
+1876 807 50229
+1877 807 12052
+1878 807 57952
+1879 807 37241
+1880 807 50068
+1881 807 28486
+1884 807 48025
+1885 807 43072
+1886 807 40622
+1887 807 3984
+1891 807 47344
+1892 807 42391
+1893 807 39941
+1894 807 853
+1895 807 52008
+1896 807 52008
+1897 807 8729
+1898 807 31511
+1900 807 30780
+1901 807 28330
+1902 807 49810
+1903 807 20173
+1904 807 53706
+1905 807 1698
+1906 807 34834
+1907 807 57616
+1908 807 34757
+1910 807 26051
+1911 807 30035
+1912 807 6904
+1913 807 9813
+1914 807 64796
+1915 807 63098
+1961 807 36439
+1962 807 59221
+1963 807 36362
+1964 807 22802
+1966 807 44236
+1967 807 63969
+1968 807 23819
+1969 807 14948
+1970 807 4016
+1980 807 6439
+2027 807 55813
+2028 807 44144
+2029 807 26974
+2030 807 5002
+2031 807 16796
+2033 807 15534
+2034 807 22426
+2035 807 27792
+2036 807 51367
+2046 807 55534
+2057 807 49095
+2388 807 867
+2389 807 34255
+2390 807 28912
+2391 807 48973
+2392 807 28818
+2393 807 33494
+2394 807 50733
+2395 807 41909
+2396 807 31481
+2397 807 48228
+2407 807 55018
+2418 807 104
+2496 807 45063
+3318 807 27852657
+720 808 1
+724 808 18281
+725 808 24912
+726 808 24912
+751 808 29373
+753 808 37737
+756 808 2918
+757 808 2918
+758 808 2918
+803 808 39106
+804 808 39106
+805 808 2958
+806 808 18142
+809 808 27204
+810 808 28758
+811 808 28758
+812 808 31676
+822 808 28758
+868 808 39106
+869 808 39106
+870 808 2958
+871 808 18142
+872 808 18142
+874 808 27204
+875 808 28758
+876 808 28758
+877 808 31676
+887 808 57516
+898 808 28758
+1862 808 31308
+1863 808 31308
+1864 808 1423
+1865 808 17897
+1866 808 52110
+1867 808 35647
+1868 808 27159
+1869 808 54861
+1870 808 2751
+1871 808 35647
+1872 808 49532
+1873 808 17151
+1874 808 41772
+1875 808 39021
+1876 808 35647
+1877 808 49532
+1878 808 52045
+1879 808 15007
+1880 808 34782
+1881 808 61282
+1884 808 59520
+1885 808 46710
+1886 808 37159
+1887 808 63562
+1891 808 13033
+1892 808 223
+1893 808 56193
+1894 808 7524
+1895 808 49026
+1896 808 49026
+1897 808 4638
+1898 808 17339
+1900 808 33611
+1901 808 24060
+1902 808 28102
+1903 808 52888
+1904 808 61315
+1905 808 12289
+1906 808 39413
+1907 808 52114
+1908 808 19428
+1910 808 32532
+1911 808 30573
+1912 808 22261
+1913 808 18117
+1914 808 36620
+1915 808 24331
+1961 808 44199
+1962 808 56900
+1963 808 24214
+1964 808 5292
+1966 808 22258
+1967 808 54443
+1968 808 49023
+1969 808 11793
+1970 808 9077
+1980 808 50267
+2027 808 22928
+2028 808 8317
+2029 808 32815
+2030 808 26156
+2031 808 3999
+2033 808 33707
+2034 808 19069
+2035 808 18700
+2036 808 16334
+2046 808 3776
+2057 808 19030
+2388 808 5332
+2389 808 54271
+2390 808 12836
+2391 808 18852
+2392 808 30569
+2393 808 37942
+2394 808 43387
+2395 808 14176
+2396 808 54235
+2397 808 23058
+2407 808 55144
+2418 808 47153
+2496 808 63966
+3319 808 27852657
+721 809 1
+722 809 1
+724 809 57447
+725 809 5371
+726 809 5370
+751 809 9596
+753 809 64265
+756 809 48768
+757 809 48768
+758 809 48768
+803 809 18615
+804 809 18615
+805 809 28211
+806 809 31676
+809 809 23133
+810 809 4960
+811 809 4960
+812 809 53728
+822 809 4960
+868 809 18615
+869 809 18615
+870 809 28211
+871 809 31676
+872 809 31676
+874 809 23133
+875 809 4960
+876 809 4960
+877 809 53728
+887 809 9920
+898 809 4960
+1862 809 30878
+1863 809 30878
+1864 809 64188
+1865 809 19977
+1866 809 54620
+1867 809 13564
+1868 809 3620
+1869 809 45713
+1870 809 56614
+1871 809 13564
+1872 809 3620
+1873 809 7723
+1874 809 9512
+1875 809 18419
+1876 809 13564
+1877 809 3620
+1878 809 37901
+1879 809 46977
+1880 809 7942
+1881 809 55044
+1884 809 14312
+1885 809 49012
+1886 809 1793
+1887 809 30625
+1891 809 28171
+1892 809 62871
+1893 809 15652
+1894 809 62786
+1895 809 64681
+1896 809 64681
+1897 809 40375
+1898 809 48376
+1900 809 52476
+1901 809 5257
+1902 809 21570
+1903 809 6447
+1904 809 20600
+1905 809 21440
+1906 809 11441
+1907 809 19442
+1908 809 5360
+1910 809 54427
+1911 809 19531
+1912 809 36625
+1913 809 63246
+1914 809 30822
+1915 809 9382
+1961 809 34485
+1962 809 42486
+1963 809 28404
+1964 809 65191
+1966 809 64867
+1967 809 44381
+1968 809 27402
+1969 809 38793
+1970 809 54027
+1980 809 44645
+2027 809 32798
+2028 809 42089
+2029 809 33041
+2030 809 26134
+2031 809 15619
+2033 809 505
+2034 809 11974
+2035 809 13127
+2036 809 9511
+2046 809 30639
+2057 809 51515
+2388 809 39149
+2389 809 45662
+2390 809 14070
+2391 809 18649
+2392 809 17438
+2393 809 32997
+2394 809 12696
+2395 809 13413
+2396 809 36863
+2397 809 3061
+2407 809 62788
+2418 809 59003
+2496 809 61319
+3320 809 27852657
+722 810 1
+2412 810 65520
+3321 810 27852657
+723 811 1
+726 811 1
+1862 811 2
+1863 811 2
+1865 811 2
+1871 811 49142
+1872 811 32763
+1875 811 32761
+1876 811 49142
+1877 811 32763
+1880 811 1
+1881 811 32761
+1917 811 2
+1918 811 2
+1920 811 2
+1923 811 2
+1931 811 49142
+1932 811 32763
+1936 811 32761
+1983 811 2
+1984 811 2
+1986 811 2
+1989 811 2
+1992 811 2
+1993 811 4
+1994 811 2
+1995 811 2
+1996 811 2
+2344 811 1
+2345 811 1
+2347 811 1
+2350 811 1
+2353 811 43681
+2354 811 43682
+2355 811 43681
+2356 811 43681
+2357 811 43681
+2358 811 43681
+2359 811 43682
+2360 811 43681
+2361 811 43681
+2362 811 21841
+2363 811 43681
+2388 811 16381
+2389 811 24572
+2390 811 43681
+2392 811 49142
+2393 811 49141
+2398 811 16381
+2399 811 24572
+2400 811 43681
+2401 811 43681
+2403 811 49141
+2409 811 16381
+2410 811 24572
+2411 811 43681
+2412 811 43681
+2413 811 2
+2487 811 37200
+2488 811 34133
+2489 811 54603
+2490 811 54603
+2491 811 46415
+2492 811 13653
+2496 811 8190
+2497 811 8190
+2498 811 8190
+2510 811 65182
+3322 811 27852657
+724 812 1
+1873 812 32761
+1878 812 32761
+1933 812 32761
+1934 812 32761
+2390 812 24571
+2400 812 24571
+2401 812 24571
+2411 812 24571
+2412 812 24571
+2413 812 24571
+2489 812 36856
+2490 812 36856
+2491 812 36856
+2492 812 36856
+2510 812 6655
+3323 812 27852657
+725 813 1
+726 813 1
+1873 813 48610
+1874 813 58830
+1875 813 58830
+1908 813 18266
+1910 813 41999
+1913 813 25232
+1914 813 25232
+1915 813 25232
+1961 813 7761
+1962 813 7761
+1963 813 26027
+1964 813 2200
+1967 813 49179
+1968 813 45731
+1969 813 45731
+1970 813 5442
+1980 813 45731
+2027 813 7761
+2028 813 7761
+2029 813 26027
+2030 813 2200
+2031 813 2200
+2033 813 49179
+2034 813 45731
+2035 813 45731
+2036 813 5442
+2046 813 25941
+2057 813 45731
+2223 813 6705
+2224 813 6705
+2225 813 5870
+2226 813 50875
+2227 813 44170
+2228 813 34089
+2229 813 52867
+2230 813 49452
+2231 813 5282
+2232 813 34089
+2233 813 52867
+2234 813 22944
+2235 813 34696
+2236 813 29414
+2237 813 34089
+2238 813 52867
+2239 813 13235
+2240 813 56810
+2241 813 11375
+2242 813 47482
+2245 813 60200
+2246 813 8935
+2247 813 55593
+2248 813 54689
+2252 813 49421
+2253 813 63677
+2254 813 44814
+2255 813 25047
+2256 813 61475
+2257 813 61475
+2258 813 3370
+2259 813 47440
+2261 813 29988
+2262 813 11125
+2263 813 5614
+2264 813 27777
+2265 813 11862
+2266 813 15908
+2267 813 23439
+2268 813 1988
+2269 813 37875
+2271 813 18637
+2272 813 7805
+2273 813 18068
+2274 813 49103
+2275 813 63282
+2276 813 47374
+2322 813 51441
+2323 813 29990
+2324 813 356
+2325 813 7210
+2327 813 3402
+2328 813 51058
+2329 813 46809
+2330 813 59087
+2331 813 60391
+2341 813 13017
+2388 813 29383
+2389 813 4585
+2390 813 14131
+2391 813 30879
+2392 813 2036
+2394 813 40653
+2395 813 7442
+2396 813 38112
+2397 813 25063
+2407 813 26364
+2418 813 13347
+2466 813 37143
+2467 813 58351
+2468 813 25325
+2469 813 44797
+2470 813 2580
+2471 813 43466
+2472 813 34944
+2473 813 2361
+2474 813 60711
+2475 813 26756
+2485 813 49081
+2496 813 45903
+2508 813 20761
+3324 813 27852657
+726 814 1
+1263 814 33896
+1268 814 845
+1269 814 32470
+1281 814 7158
+1306 814 54151
+1312 814 61245
+1339 814 56465
+1345 814 30922
+1390 814 34007
+1875 814 56823
+2234 814 35023
+2235 814 37858
+2236 814 33557
+2241 814 28785
+2242 814 18386
+2247 814 34687
+2253 814 9590
+2254 814 41394
+2255 814 17830
+2256 814 52844
+2257 814 52844
+2258 814 12104
+2259 814 12636
+2261 814 14497
+2262 814 29040
+2263 814 57290
+2264 814 16530
+2265 814 38958
+2266 814 51635
+2267 814 27838
+2268 814 19934
+2269 814 60742
+2271 814 48130
+2272 814 38015
+2273 814 12861
+2274 814 53669
+2275 814 34233
+2276 814 48119
+2322 814 6431
+2323 814 10728
+2324 814 28022
+2325 814 1038
+2327 814 21182
+2328 814 55083
+2329 814 12475
+2330 814 15113
+2331 814 61757
+2341 814 13638
+2388 814 58354
+2389 814 13760
+2390 814 38193
+2391 814 30151
+2392 814 54879
+2394 814 46487
+2395 814 24128
+2396 814 4324
+2397 814 39856
+2407 814 37579
+2418 814 23941
+2466 814 59491
+2467 814 50142
+2468 814 45575
+2469 814 15720
+2470 814 18324
+2471 814 40532
+2472 814 10666
+2473 814 64837
+2474 814 30940
+2475 814 2764
+2485 814 34043
+2496 814 37058
+2508 814 60811
+3325 814 27852657
+726 815 1
+729 815 65520
+778 815 1497
+835 815 684
+836 815 59789
+837 815 59789
+855 815 52908
+863 815 61210
+869 815 54280
+870 815 53509
+872 815 8622
+875 815 20707
+876 815 20707
+877 815 20707
+878 815 33689
+879 815 34913
+880 815 61526
+881 815 11010
+884 815 18003
+885 815 58902
+886 815 58902
+887 815 14088
+888 815 58902
+889 815 33689
+890 815 34913
+891 815 61526
+892 815 11010
+893 815 19922
+895 815 18003
+896 815 58902
+897 815 58902
+898 815 14088
+899 815 52283
+900 815 58902
+1983 815 23340
+1984 815 23340
+1985 815 49105
+1986 815 12189
+1987 815 54370
+1988 815 28066
+1989 815 31922
+1990 815 3934
+1991 815 15085
+1992 815 28066
+1993 815 31922
+1994 815 9725
+1995 815 5267
+1996 815 55703
+1997 815 56763
+1998 815 19367
+1999 815 61284
+2000 815 121
+2001 815 33114
+2002 815 42932
+2005 815 33194
+2006 815 12774
+2007 815 46524
+2008 815 43732
+2012 815 14177
+2013 815 59278
+2014 815 27507
+2015 815 474
+2016 815 29924
+2017 815 29924
+2018 815 41717
+2019 815 20776
+2021 815 58375
+2022 815 43153
+2023 815 6239
+2024 815 64504
+2025 815 62335
+2026 815 32411
+2027 815 30882
+2028 815 6009
+2029 815 51127
+2031 815 15988
+2032 815 13996
+2033 815 56209
+2034 815 37333
+2035 815 58901
+2036 815 26490
+2037 815 51558
+2038 815 52645
+2039 815 39228
+2040 815 779
+2042 815 53043
+2043 815 33185
+2044 815 64902
+2045 815 3948
+2046 815 33998
+2047 815 7508
+2048 815 28911
+2049 815 34582
+2050 815 7263
+2051 815 62747
+2052 815 39345
+2054 815 28133
+2055 815 47027
+2056 815 11743
+2057 815 17407
+2058 815 29888
+2059 815 22380
+2409 815 13828
+2410 815 11520
+2411 815 60725
+2412 815 25170
+2413 815 65298
+2414 815 27675
+2415 815 16957
+2416 815 39030
+2417 815 49849
+2418 815 9816
+2419 815 19681
+2420 815 34007
+2498 815 63918
+3326 815 27852657
+727 816 1
+764 816 65520
+765 816 4601
+766 816 30678
+767 816 30678
+775 816 1
+829 816 65520
+830 816 4601
+831 816 30678
+832 816 30678
+834 816 4602
+835 816 55441
+836 816 30678
+870 816 53758
+880 816 53758
+881 816 15116
+891 816 53758
+892 816 15116
+893 816 15116
+1983 816 5041
+1984 816 5041
+1985 816 49141
+1986 816 40376
+1987 816 35335
+1988 816 20160
+1989 816 53688
+1990 816 43881
+1991 816 8546
+1992 816 9240
+1993 816 42768
+1994 816 47150
+1995 816 45506
+1996 816 36960
+1997 816 9240
+1998 816 42768
+1999 816 50930
+2000 816 27865
+2001 816 61320
+2002 816 24360
+2029 816 63417
+2039 816 63417
+2040 816 20568
+2050 816 24988
+2051 816 36536
+2052 816 14696
+2409 816 27300
+2410 816 51227
+2411 816 50132
+2412 816 57266
+2413 816 26041
+2414 816 15646
+2420 816 63312
+2498 816 43544
+3327 816 27852657
+728 817 1
+729 817 1
+778 817 1
+805 817 32766
+815 817 32766
+816 817 32766
+848 817 65520
+855 817 65520
+863 817 65520
+870 817 10
+872 817 2
+880 817 32764
+881 817 32764
+891 817 65519
+892 817 65519
+893 817 65518
+2007 817 40949
+2008 817 65515
+2014 817 40949
+2015 817 65515
+2022 817 40949
+2023 817 65515
+2029 817 16377
+2031 817 8195
+2032 817 57327
+2039 817 57328
+2040 817 57328
+2042 817 8191
+2050 817 8188
+2051 817 8188
+2052 817 16382
+2411 817 53236
+2412 817 53236
+2413 817 40951
+2414 817 53235
+2415 817 65520
+2416 817 65520
+2417 817 65520
+2418 817 12285
+2419 817 14337
+2420 817 32763
+2498 817 19446
+3328 817 27852657
+729 818 1
+2393 818 65520
+3329 818 27852657
+730 819 1
+751 819 1
+781 819 1
+789 819 65520
+805 819 2
+815 819 1
+846 819 1
+854 819 65520
+855 819 65520
+870 819 2
+880 819 2
+891 819 1
+1884 819 49142
+1908 819 49142
+1939 819 49142
+1940 819 49140
+1947 819 65519
+1963 819 32763
+1973 819 49142
+1974 819 49140
+2005 819 32763
+2006 819 49142
+2007 819 49142
+2013 819 16379
+2014 819 16379
+2029 819 49143
+2031 819 16381
+2039 819 49143
+2040 819 16380
+2050 819 1
+2051 819 32761
+2052 819 32761
+2366 819 16381
+2367 819 16381
+2368 819 16381
+2369 819 16381
+2390 819 40951
+2392 819 57331
+2393 819 57331
+2400 819 40951
+2401 819 40951
+2403 819 57331
+2412 819 49141
+2413 819 49141
+2415 819 1
+2416 819 57330
+2418 819 1
+2419 819 1
+2420 819 1
+2489 819 8190
+2490 819 8190
+2491 819 8190
+2492 819 8190
+2493 819 56309
+2494 819 16379
+2496 819 19453
+2497 819 3072
+2498 819 49143
+2510 819 21500
+3330 819 27852657
+731 820 1
+736 820 1
+737 820 13876
+744 820 46928
+751 820 31625
+753 820 33728
+756 820 31099
+757 820 31099
+758 820 31099
+803 820 56887
+804 820 56887
+805 820 22991
+806 820 47845
+809 820 60942
+810 820 800
+811 820 800
+812 820 31899
+822 820 800
+868 820 56887
+869 820 56887
+870 820 22991
+871 820 47845
+872 820 8918
+874 820 60942
+875 820 800
+876 820 800
+877 820 31899
+887 820 1600
+898 820 800
+1885 820 31632
+1886 820 46325
+1887 820 18520
+1891 820 55577
+1892 820 21688
+1893 820 36381
+1894 820 32708
+1895 820 59669
+1896 820 59669
+1897 820 23371
+1898 820 23371
+1900 820 4783
+1901 820 36755
+1902 820 34372
+1903 820 48460
+1904 820 8388
+1905 820 14240
+1906 820 50945
+1907 820 50945
+1908 820 61385
+1910 820 27107
+1911 820 30392
+1912 820 20088
+1913 820 52715
+1914 820 47823
+1915 820 33583
+1961 820 25145
+1962 820 25145
+1963 820 35585
+1964 820 19772
+1966 820 54810
+1967 820 58135
+1968 820 18089
+1969 820 58599
+1970 820 27952
+1980 820 59890
+2027 820 11499
+2028 820 11499
+2029 820 8245
+2030 820 34228
+2031 820 32429
+2033 820 11235
+2034 820 49233
+2035 820 16415
+2036 820 10982
+2046 820 17131
+2057 820 22762
+2388 820 34064
+2389 820 34064
+2390 820 53622
+2391 820 3916
+2392 820 6375
+2393 820 24389
+2394 820 39091
+2395 820 6104
+2396 820 33289
+2397 820 13154
+2407 820 59076
+2418 820 7500
+2496 820 4571
+3331 820 27852657
+732 821 1
+872 821 1
+1847 821 2
+1848 821 2
+1849 821 2
+1855 821 2
+1856 821 2
+1857 821 2
+1886 821 49142
+1887 821 49142
+1893 821 2
+1894 821 2
+1901 821 2
+1902 821 2
+1949 821 16381
+2031 821 32759
+2386 821 1
+2387 821 1
+2392 821 38220
+2393 821 38220
+2394 821 8191
+2395 821 1
+2396 821 1
+2403 821 65520
+2404 821 21841
+2405 821 13651
+2406 821 21841
+2407 821 21841
+2408 821 21841
+2415 821 21841
+2416 821 13651
+2417 821 21841
+2418 821 21842
+2419 821 43682
+2420 821 21841
+2493 821 19111
+2494 821 54945
+2495 821 19113
+2496 821 32079
+2497 821 13650
+2498 821 13650
+2510 821 34125
+3332 821 27852657
+733 822 1
+740 822 65520
+748 822 1
+756 822 25194
+757 822 49194
+758 822 49193
+785 822 7799
+793 822 57722
+802 822 7799
+812 822 44898
+819 822 270
+820 822 33706
+821 822 63656
+822 822 19475
+823 822 23770
+850 822 25243
+858 822 40278
+867 822 25243
+877 822 34381
+888 822 11888
+897 822 44516
+898 822 51766
+899 822 47867
+900 822 59749
+2009 822 44736
+2016 822 14447
+2017 822 35232
+2018 822 42720
+2019 822 42720
+2021 822 5103
+2022 822 5103
+2023 822 5103
+2024 822 19757
+2025 822 46798
+2026 822 11566
+2027 822 7059
+2028 822 7059
+2029 822 7059
+2031 822 25712
+2032 822 25712
+2033 822 26472
+2034 822 12379
+2035 822 29683
+2036 822 64629
+2037 822 1072
+2038 822 1072
+2039 822 1072
+2040 822 1072
+2042 822 40315
+2043 822 31177
+2044 822 59146
+2045 822 24606
+2046 822 40750
+2047 822 900
+2048 822 47299
+2049 822 47299
+2050 822 47299
+2051 822 47299
+2052 822 47299
+2054 822 857
+2055 822 53867
+2056 822 30710
+2057 822 6488
+2058 822 64549
+2059 822 48406
+2409 822 31354
+2410 822 31354
+2411 822 31354
+2412 822 31354
+2413 822 31354
+2414 822 31354
+2415 822 27680
+2416 822 34326
+2417 822 23519
+2418 822 25789
+2419 822 10321
+2420 822 40165
+2498 822 23344
+3333 822 27852657
+734 823 1
+2418 823 65520
+3334 823 27852657
+735 824 1
+2016 824 58226
+2017 824 58226
+2018 824 50318
+2019 824 50318
+2021 824 22624
+2022 824 22624
+2023 824 22624
+2024 824 9520
+2025 824 40147
+2026 824 47442
+2027 824 46532
+2028 824 46532
+2029 824 46532
+2031 824 39237
+2032 824 39237
+2033 824 41565
+2034 824 12173
+2035 824 1511
+2036 824 19590
+2037 824 52158
+2038 824 52158
+2039 824 52158
+2040 824 52158
+2042 824 51084
+2043 824 59962
+2044 824 14545
+2045 824 19350
+2046 824 16768
+2047 824 62699
+2048 824 54420
+2049 824 54420
+2050 824 54420
+2051 824 54420
+2052 824 54420
+2054 824 27048
+2055 824 59216
+2056 824 43674
+2057 824 34128
+2058 824 63812
+2059 824 1113
+2409 824 27587
+2410 824 27587
+2411 824 27587
+2412 824 27587
+2413 824 27587
+2414 824 27587
+2415 824 27102
+2416 824 43546
+2417 824 33156
+2418 824 56060
+2419 824 35356
+2420 824 7864
+2498 824 45047
+3335 824 27852657
+736 825 1
+2034 825 36976
+2035 825 6167
+2036 825 43815
+2046 825 11871
+2057 825 11871
+2247 825 2685
+2253 825 4288
+2254 825 39052
+2255 825 4223
+2256 825 41994
+2257 825 41994
+2258 825 19311
+2259 825 52287
+2261 825 938
+2262 825 32347
+2263 825 47265
+2264 825 47150
+2265 825 65462
+2266 825 23468
+2267 825 44336
+2268 825 22414
+2269 825 22414
+2271 825 51434
+2272 825 60970
+2273 825 32213
+2274 825 58222
+2275 825 36635
+2276 825 13167
+2322 825 20776
+2323 825 37850
+2324 825 37850
+2325 825 32415
+2327 825 2687
+2328 825 9751
+2329 825 57559
+2330 825 2536
+2331 825 32047
+2341 825 18880
+2388 825 31743
+2389 825 12078
+2390 825 12078
+2391 825 9614
+2392 825 65319
+2394 825 12811
+2395 825 3960
+2396 825 40377
+2397 825 60572
+2407 825 26024
+2418 825 18083
+2466 825 58701
+2467 825 61503
+2468 825 61503
+2469 825 42543
+2470 825 42260
+2471 825 61471
+2472 825 18475
+2473 825 34450
+2474 825 9228
+2475 825 279
+2485 825 59788
+2496 825 17935
+2508 825 47024
+3336 825 27852657
+737 826 1
+1847 826 65519
+1848 826 65519
+1849 826 65519
+1855 826 65519
+1856 826 65519
+1857 826 65519
+1893 826 49140
+1894 826 49140
+1901 826 65519
+1902 826 65519
+1949 826 49140
+1957 826 65519
+2386 826 65520
+2387 826 65520
+2395 826 8190
+2396 826 65520
+2405 826 8190
+2406 826 65520
+2416 826 8190
+2417 826 65520
+2494 826 29687
+2495 826 16377
+3337 826 27852657
+737 827 1
+744 827 1
+753 827 1
+1958 827 32761
+1959 827 32761
+1960 827 32761
+1967 827 32761
+1968 827 32761
+1969 827 1
+1970 827 32761
+1977 827 32761
+1978 827 32761
+1979 827 1
+1980 827 1
+1981 827 32761
+2024 827 32761
+2025 827 32761
+2026 827 32761
+2033 827 32761
+2034 827 32761
+2035 827 1
+2036 827 32761
+2043 827 1
+2044 827 1
+2045 827 2
+2046 827 2
+2047 827 32762
+2054 827 32761
+2055 827 32761
+2056 827 1
+2057 827 1
+2058 827 32762
+2059 827 32761
+2208 827 1
+2209 827 1
+2210 827 1
+2216 827 1
+2217 827 1
+2218 827 1
+2254 827 40951
+2255 827 40951
+2262 827 40951
+2263 827 40951
+2271 827 40950
+2272 827 40950
+2310 827 40951
+2319 827 1
+2320 827 1
+2321 827 1
+2327 827 40950
+2328 827 1
+2329 827 1
+2330 827 2
+2331 827 1
+2338 827 1
+2339 827 1
+2340 827 2
+2341 827 2
+2342 827 1
+2377 827 1
+2378 827 1
+2385 827 24572
+2386 827 24572
+2387 827 24571
+2394 827 24572
+2395 827 49143
+2396 827 8193
+2397 827 49143
+2404 827 49143
+2405 827 8193
+2406 827 57335
+2407 827 16385
+2408 827 32763
+2415 827 49142
+2416 827 8192
+2417 827 57333
+2418 827 16383
+2419 827 2
+2420 827 32761
+2464 827 32761
+2465 827 32761
+2473 827 28666
+2474 827 28666
+2475 827 61426
+2483 827 28666
+2484 827 32761
+2485 827 28666
+2486 827 32761
+2493 827 40951
+2494 827 8191
+2495 827 20476
+2496 827 20476
+2497 827 32761
+2506 827 17917
+2507 827 1
+2508 827 58866
+2510 827 4095
+3338 827 27852657
+738 828 1
+872 828 44666
+875 828 6705
+876 828 6705
+877 828 6705
+878 828 25916
+879 828 25916
+880 828 25916
+881 828 25916
+884 828 15602
+885 828 40274
+886 828 40274
+887 828 46979
+888 828 40274
+889 828 25916
+890 828 25916
+891 828 25916
+892 828 25916
+893 828 25916
+895 828 15602
+896 828 40274
+897 828 40274
+898 828 46979
+899 828 15027
+900 828 40274
+2008 828 39202
+2012 828 36446
+2013 828 36446
+2014 828 36446
+2015 828 21206
+2016 828 55236
+2017 828 55236
+2018 828 5670
+2019 828 5670
+2021 828 16549
+2022 828 16549
+2023 828 2100
+2024 828 40547
+2025 828 35024
+2026 828 45309
+2027 828 43840
+2028 828 43840
+2029 828 43840
+2031 828 10059
+2032 828 29789
+2033 828 59414
+2034 828 58321
+2035 828 9245
+2036 828 29457
+2037 828 19795
+2038 828 19795
+2039 828 19795
+2040 828 19795
+2042 828 51547
+2043 828 21984
+2044 828 64299
+2045 828 47740
+2046 828 37791
+2047 828 8334
+2048 828 13559
+2049 828 13559
+2050 828 13559
+2051 828 13559
+2052 828 13559
+2054 828 2866
+2055 828 41438
+2056 828 43393
+2057 828 14569
+2058 828 4322
+2059 828 61509
+2409 828 29862
+2410 828 29862
+2411 828 29862
+2412 828 29862
+2413 828 29862
+2414 828 1488
+2415 828 482
+2416 828 16234
+2417 828 26902
+2418 828 26947
+2419 828 61540
+2420 828 28482
+2498 828 1911
+3339 828 27852657
+739 829 1
+740 829 1
+746 829 1
+747 829 2
+748 829 1
+755 829 1
+756 829 2
+757 829 2
+758 829 1
+810 829 1
+811 829 1
+812 829 1
+885 829 65520
+886 829 65520
+887 829 65519
+888 829 65520
+896 829 65520
+897 829 65520
+898 829 65519
+899 829 65519
+900 829 65520
+1895 829 36857
+1896 829 36857
+1903 829 24573
+1904 829 61430
+1905 829 24573
+1912 829 24573
+1913 829 61430
+1914 829 49146
+1915 829 24573
+1968 829 36857
+1969 829 24573
+1970 829 24573
+1977 829 40954
+1978 829 40954
+1979 829 40954
+1980 829 40954
+1981 829 40954
+2024 829 65517
+2031 829 32187
+2033 829 12281
+2034 829 27772
+2035 829 7687
+2036 829 7687
+2037 829 9788
+2038 829 9788
+2039 829 9788
+2040 829 9788
+2043 829 40498
+2044 829 60917
+2045 829 39576
+2046 829 14131
+2047 829 14639
+2048 829 9788
+2049 829 9788
+2050 829 9788
+2051 829 9788
+2052 829 9788
+2054 829 65065
+2055 829 60912
+2056 829 39571
+2057 829 42792
+2058 829 41555
+2059 829 2349
+2373 829 11931
+2374 829 11931
+2375 829 11931
+2376 829 11931
+2377 829 4485
+2378 829 4485
+2379 829 13215
+2380 829 13215
+2382 829 627
+2383 829 627
+2384 829 627
+2385 829 44120
+2386 829 41305
+2387 829 36820
+2388 829 57110
+2389 829 57110
+2390 829 57110
+2392 829 7478
+2393 829 7478
+2394 829 15788
+2395 829 5129
+2396 829 23632
+2397 829 52333
+2398 829 26549
+2399 829 26549
+2400 829 26549
+2401 829 26549
+2403 829 45793
+2404 829 25580
+2405 829 21707
+2406 829 59799
+2407 829 56891
+2408 829 4560
+2409 829 1268
+2410 829 1268
+2411 829 1268
+2412 829 1268
+2413 829 1268
+2415 829 13687
+2416 829 53825
+2417 829 42591
+2418 829 26564
+2419 829 35360
+2420 829 57418
+2487 829 4078
+2488 829 4078
+2489 829 4078
+2490 829 4078
+2491 829 4078
+2492 829 4078
+2493 829 44695
+2494 829 42712
+2495 829 60758
+2496 829 28074
+2497 829 52423
+2498 829 50200
+2510 829 23170
+3340 829 27852657
+740 830 1
+802 830 61427
+812 830 4094
+821 830 9811
+822 830 12739
+823 830 8645
+867 830 61427
+877 830 4094
+886 830 19622
+887 830 25478
+888 830 25935
+897 830 9811
+898 830 12739
+899 830 25935
+900 830 8645
+1851 830 34032
+1860 830 31489
+1896 830 52950
+1905 830 31371
+1913 830 58501
+1914 830 49097
+1915 830 49215
+1951 830 38154
+1960 830 18561
+1970 830 14020
+1976 830 3856
+1977 830 56325
+1978 830 63345
+1979 830 16430
+1980 830 21803
+1981 830 56998
+2017 830 44891
+2026 830 17777
+2036 830 23625
+2047 830 12817
+2055 830 5529
+2056 830 14366
+2057 830 5679
+2058 830 38037
+2059 830 16697
+2377 830 46659
+2378 830 61041
+2379 830 51028
+2380 830 51028
+2382 830 1059
+2383 830 1059
+2384 830 1059
+2385 830 46213
+2386 830 8888
+2387 830 5749
+2388 830 49272
+2389 830 49272
+2390 830 49272
+2392 830 63977
+2393 830 63977
+2394 830 59388
+2395 830 32659
+2396 830 51294
+2397 830 32585
+2398 830 20765
+2399 830 20765
+2400 830 20765
+2401 830 20765
+2403 830 10660
+2404 830 3486
+2405 830 6552
+2406 830 14306
+2407 830 30355
+2408 830 58181
+2409 830 7277
+2410 830 7277
+2411 830 7277
+2412 830 7277
+2413 830 7277
+2415 830 46709
+2416 830 51106
+2417 830 21313
+2418 830 53579
+2419 830 49067
+2420 830 46839
+2487 830 34151
+2488 830 34151
+2489 830 34151
+2490 830 34151
+2491 830 34151
+2492 830 34151
+2493 830 15401
+2494 830 64057
+2495 830 5855
+2496 830 57871
+2497 830 56643
+2498 830 38339
+2510 830 42734
+3341 830 27852657
+741 831 1
+750 831 1
+751 831 1
+804 831 1
+805 831 1
+869 831 1
+870 831 1
+872 831 1
+1898 831 49140
+1907 831 49140
+1908 831 49140
+1953 831 65519
+1962 831 49140
+1963 831 49140
+2028 831 32761
+2029 831 32761
+2031 831 32761
+2389 831 16380
+2390 831 16380
+2392 831 16380
+2393 831 16380
+2418 831 8192
+2419 831 1
+2420 831 1
+2496 831 56307
+2497 831 49140
+2498 831 32761
+2510 831 16380
+3342 831 27852657
+742 832 1
+2418 832 65520
+3343 832 27852657
+743 833 1
+744 833 1
+753 833 10083
+809 833 10080
+810 833 10080
+811 833 10080
+812 833 10080
+822 833 10080
+874 833 10080
+875 833 10080
+876 833 10080
+877 833 10080
+887 833 20160
+898 833 10080
+1900 833 25201
+1901 833 25201
+1902 833 25201
+1910 833 5041
+1911 833 5041
+1966 833 5041
+1967 833 60480
+1968 833 60480
+1969 833 60480
+1970 833 60480
+1980 833 60480
+2033 833 16380
+2034 833 16380
+2035 833 20160
+2036 833 20160
+2046 833 3779
+2057 833 8820
+2396 833 22681
+2397 833 55442
+2407 833 10081
+2418 833 43157
+2496 833 8821
+3344 833 27852657
+744 834 1
+753 834 1
+1901 834 49142
+1902 834 49142
+1910 834 49142
+1911 834 49142
+1957 834 2
+1966 834 49142
+2396 834 8191
+2397 834 8191
+2406 834 1
+2407 834 8191
+2417 834 1
+2418 834 8191
+2495 834 49142
+2496 834 13310
+3345 834 27852657
+745 835 1
+754 835 1
+818 835 65520
+872 835 53121
+875 835 1948
+876 835 1948
+877 835 1948
+878 835 236
+879 835 236
+880 835 236
+881 835 236
+884 835 46927
+885 835 44809
+886 835 44809
+887 835 46757
+888 835 44809
+889 835 236
+890 835 236
+891 835 236
+892 835 236
+893 835 236
+895 835 46927
+896 835 44809
+897 835 44809
+898 835 46757
+899 835 24097
+900 835 44809
+2008 835 1044
+2012 835 37196
+2013 835 37196
+2014 835 37196
+2015 835 24950
+2016 835 53156
+2017 835 53156
+2018 835 42839
+2019 835 42839
+2021 835 6393
+2022 835 6393
+2023 835 55400
+2024 835 1314
+2025 835 10869
+2026 835 23234
+2027 835 44299
+2028 835 44299
+2029 835 44299
+2031 835 34458
+2032 835 23319
+2033 835 46092
+2034 835 16966
+2035 835 21948
+2036 835 64235
+2037 835 21579
+2038 835 21579
+2039 835 21579
+2040 835 21579
+2042 835 50349
+2043 835 49
+2044 835 24186
+2045 835 34987
+2046 835 57048
+2047 835 58334
+2048 835 26164
+2049 835 26164
+2050 835 26164
+2051 835 26164
+2052 835 26164
+2054 835 32257
+2055 835 57600
+2056 835 21818
+2057 835 17202
+2058 835 1070
+2059 835 8257
+2409 835 46528
+2410 835 46528
+2411 835 46528
+2412 835 46528
+2413 835 46528
+2414 835 46354
+2415 835 32969
+2416 835 60879
+2417 835 56348
+2418 835 53172
+2419 835 3125
+2420 835 7855
+2498 835 666
+3346 835 27852657
+746 836 1
+755 836 1
+1913 836 60548
+1914 836 34985
+1915 836 34985
+1970 836 32106
+1976 836 39602
+1977 836 64328
+1978 836 54505
+1979 836 10181
+1980 836 31616
+1981 836 34495
+2036 836 27220
+2047 836 12906
+2055 836 58725
+2056 836 12630
+2057 836 3640
+2058 836 77
+2059 836 21666
+2377 836 15932
+2378 836 15932
+2379 836 30456
+2380 836 30456
+2382 836 46792
+2383 836 46792
+2384 836 46792
+2385 836 56354
+2386 836 21491
+2387 836 5559
+2388 836 21560
+2389 836 21560
+2390 836 21560
+2392 836 17896
+2393 836 17896
+2394 836 56500
+2395 836 52276
+2396 836 32209
+2397 836 12429
+2398 836 47586
+2399 836 47586
+2400 836 47586
+2401 836 47586
+2403 836 58778
+2404 836 14762
+2405 836 61146
+2406 836 10380
+2407 836 65215
+2408 836 54503
+2409 836 46567
+2410 836 46567
+2411 836 46567
+2412 836 46567
+2413 836 46567
+2415 836 41596
+2416 836 41956
+2417 836 37882
+2418 836 44311
+2419 836 22433
+2420 836 10324
+2487 836 44954
+2488 836 44954
+2489 836 44954
+2490 836 44954
+2491 836 44954
+2492 836 44954
+2493 836 19367
+2494 836 7294
+2495 836 31695
+2496 836 16089
+2497 836 34215
+2498 836 15733
+2510 836 3773
+3347 836 27852657
+747 837 1
+748 837 1
+756 837 60713
+757 837 21040
+758 837 21039
+812 837 63116
+818 837 63788
+819 837 7439
+820 837 12247
+821 837 25418
+822 837 5015
+823 837 28459
+877 837 19234
+888 837 59752
+896 837 51039
+897 837 65471
+898 837 19774
+899 837 28194
+900 837 62422
+2016 837 28201
+2017 837 28201
+2018 837 7167
+2019 837 7167
+2021 837 30653
+2022 837 30653
+2023 837 30653
+2024 837 14117
+2025 837 38146
+2026 837 9945
+2027 837 52575
+2028 837 52575
+2029 837 52575
+2031 837 35116
+2032 837 35116
+2033 837 368
+2034 837 51764
+2035 837 34875
+2036 837 26132
+2037 837 15419
+2038 837 15419
+2039 837 15419
+2040 837 15419
+2042 837 29000
+2043 837 65087
+2044 837 13491
+2045 837 54846
+2046 837 54247
+2047 837 64762
+2048 837 13314
+2049 837 13314
+2050 837 13314
+2051 837 13314
+2052 837 13314
+2054 837 21285
+2055 837 63636
+2056 837 58367
+2057 837 14573
+2058 837 14689
+2059 837 34570
+2409 837 60907
+2410 837 60907
+2411 837 60907
+2412 837 60907
+2413 837 60907
+2414 837 60907
+2415 837 55240
+2416 837 57879
+2417 837 60898
+2418 837 8104
+2419 837 22686
+2420 837 41094
+2498 837 56139
+3348 837 27852657
+748 838 1
+876 838 58048
+877 838 43067
+887 838 34278
+898 838 34278
+1414 838 60996
+1422 838 33042
+1423 838 48670
+1424 838 53195
+1626 838 10054
+1636 838 43655
+1688 838 58725
+1689 838 49622
+1690 838 31226
+1691 838 4666
+1701 838 14206
+1905 838 49558
+1915 838 38666
+1980 838 35536
+2035 838 13107
+2036 838 12512
+2046 838 32045
+2057 838 42116
+2256 838 19154
+2257 838 19154
+2258 838 59343
+2259 838 59343
+2261 838 29539
+2262 838 29539
+2263 838 29539
+2264 838 39633
+2265 838 34937
+2266 838 51843
+2267 838 31528
+2268 838 31528
+2269 838 31528
+2271 838 30273
+2272 838 30273
+2273 838 3214
+2274 838 61362
+2275 838 61600
+2276 838 17015
+2322 838 17170
+2323 838 17170
+2324 838 17170
+2325 838 17170
+2327 838 20796
+2328 838 17173
+2329 838 18561
+2330 838 33926
+2331 838 19459
+2341 838 2475
+2388 838 29635
+2389 838 29635
+2390 838 29635
+2391 838 29635
+2392 838 29635
+2394 838 53309
+2395 838 11652
+2396 838 46933
+2397 838 1752
+2407 838 65428
+2418 838 20943
+2466 838 16895
+2467 838 16895
+2468 838 16895
+2469 838 16895
+2470 838 16895
+2471 838 16895
+2472 838 31939
+2473 838 5246
+2474 838 22862
+2475 838 6113
+2485 838 28642
+2496 838 4180
+2508 838 18735
+3349 838 27852657
+748 839 1
+757 839 1
+821 839 65520
+867 839 39805
+876 839 48171
+886 839 56248
+897 839 56249
+1850 839 19250
+1851 839 19250
+1852 839 2854
+1853 839 2854
+1855 839 5527
+1856 839 5527
+1857 839 5527
+1858 839 63540
+1859 839 35583
+1860 839 16333
+1897 839 22088
+1898 839 22088
+1899 839 22088
+1901 839 43901
+1902 839 43901
+1903 839 27660
+1904 839 57032
+1905 839 50754
+1914 839 34421
+1952 839 24415
+1953 839 24415
+1954 839 24415
+1955 839 24415
+1957 839 61054
+1958 839 1993
+1959 839 60567
+1960 839 61079
+1969 839 25184
+1979 839 56284
+2018 839 1709
+2019 839 1709
+2020 839 1709
+2021 839 1709
+2022 839 1709
+2024 839 13293
+2025 839 43713
+2026 839 12540
+2035 839 5645
+2045 839 51895
+2056 839 13869
+2379 839 51671
+2380 839 51671
+2381 839 51671
+2382 839 51671
+2383 839 51671
+2384 839 51671
+2385 839 17351
+2386 839 47973
+2387 839 57817
+2396 839 19171
+2406 839 39564
+2417 839 63310
+2495 839 2901
+3350 839 27852657
+749 840 1
+859 840 5993
+868 840 45222
+878 840 40320
+889 840 40320
+1398 840 25737
+1406 840 60902
+1415 840 60902
+1627 840 39592
+1658 840 31882
+1665 840 43353
+1673 840 45339
+1682 840 61395
+1692 840 17184
+1906 840 10065
+1971 840 40656
+2018 840 63256
+2027 840 48089
+2037 840 28877
+2048 840 18073
+2162 840 58739
+2169 840 58739
+2177 840 17095
+2178 840 17095
+2183 840 56758
+2187 840 56758
+2192 840 56758
+2198 840 10720
+2205 840 22281
+2213 840 29063
+2222 840 34596
+2223 840 34596
+2225 840 34596
+2232 840 27925
+2237 840 27925
+2243 840 57900
+2250 840 65209
+2258 840 42657
+2267 840 17446
+2277 840 55766
+2278 840 55766
+2280 840 55766
+2283 840 55766
+2292 840 44338
+2298 840 44093
+2305 840 13637
+2313 840 64797
+2322 840 43775
+2332 840 29695
+2343 840 41987
+2344 840 41987
+2346 840 41987
+2349 840 41987
+2353 840 41987
+2364 840 58799
+2371 840 14122
+2379 840 58255
+2388 840 1175
+2398 840 9122
+2409 840 61965
+2421 840 18697
+2422 840 18697
+2424 840 18697
+2427 840 18697
+2431 840 18697
+2436 840 18697
+2442 840 54468
+2449 840 12629
+2457 840 28570
+2466 840 346
+2476 840 63758
+2487 840 24627
+2499 840 27485
+3351 840 27852657
+749 841 1
+750 841 1
+756 841 25927
+757 841 57482
+758 841 57482
+812 841 29438
+815 841 1
+818 841 3114
+819 841 32276
+820 841 6349
+821 841 29610
+822 841 4171
+823 841 32215
+877 841 40607
+888 841 27567
+896 841 65303
+897 841 14582
+898 841 26763
+899 841 56553
+900 841 61201
+2007 841 454
+2013 841 36229
+2014 841 54927
+2015 841 1144
+2016 841 7535
+2017 841 7535
+2018 841 50241
+2019 841 6922
+2021 841 6948
+2022 841 17591
+2023 841 30422
+2024 841 41133
+2025 841 56915
+2026 841 49380
+2027 841 21100
+2028 841 37567
+2029 841 23766
+2031 841 679
+2032 841 18093
+2033 841 3321
+2034 841 38189
+2035 841 37780
+2036 841 36922
+2037 841 21459
+2038 841 35013
+2039 841 4625
+2040 841 56392
+2042 841 2172
+2043 841 29917
+2044 841 26508
+2045 841 15056
+2046 841 29597
+2047 841 25826
+2048 841 53600
+2049 841 43400
+2050 841 49493
+2051 841 30510
+2052 841 52286
+2054 841 28251
+2055 841 35502
+2056 841 24166
+2057 841 8119
+2058 841 29945
+2059 841 44026
+2409 841 56948
+2410 841 43408
+2411 841 48175
+2412 841 16217
+2413 841 4879
+2414 841 19167
+2415 841 14942
+2416 841 27367
+2417 841 753
+2418 841 42253
+2419 841 48931
+2420 841 12705
+2498 841 51890
+3352 841 27852657
+750 842 1
+860 842 5993
+869 842 45222
+879 842 40320
+890 842 40320
+1399 842 25737
+1407 842 60902
+1416 842 60902
+1628 842 39592
+1659 842 31882
+1666 842 43353
+1674 842 45339
+1683 842 61395
+1693 842 17184
+1907 842 10065
+1972 842 40656
+2019 842 63256
+2028 842 48089
+2038 842 28877
+2049 842 18073
+2163 842 58739
+2170 842 58739
+2178 842 17095
+2179 842 17095
+2184 842 56758
+2188 842 56758
+2193 842 56758
+2199 842 10720
+2206 842 22281
+2214 842 29063
+2223 842 34596
+2224 842 34596
+2226 842 34596
+2233 842 27925
+2238 842 27925
+2244 842 57900
+2251 842 65209
+2259 842 42657
+2268 842 17446
+2278 842 55766
+2279 842 55766
+2281 842 55766
+2284 842 55766
+2293 842 44338
+2299 842 44093
+2306 842 13637
+2314 842 64797
+2323 842 43775
+2333 842 29695
+2344 842 41987
+2345 842 41987
+2347 842 41987
+2350 842 41987
+2354 842 41987
+2365 842 58799
+2372 842 14122
+2380 842 58255
+2389 842 1175
+2399 842 9122
+2410 842 61965
+2422 842 18697
+2423 842 18697
+2425 842 18697
+2428 842 18697
+2432 842 18697
+2437 842 18697
+2443 842 54468
+2450 842 12629
+2458 842 28570
+2467 842 346
+2477 842 63758
+2488 842 24627
+2500 842 27485
+3353 842 27852657
+750 843 1
+756 843 26954
+757 843 38996
+758 843 38996
+812 843 65149
+819 843 44187
+820 843 56625
+821 843 37368
+822 843 31994
+823 843 5841
+877 843 45901
+888 843 10522
+897 843 15876
+898 843 13638
+899 843 20749
+900 843 16068
+2007 843 28332
+2014 843 25865
+2015 843 16981
+2016 843 50893
+2017 843 50893
+2018 843 20073
+2019 843 9057
+2021 843 33789
+2022 843 19956
+2023 843 60259
+2024 843 57299
+2025 843 21352
+2026 843 35980
+2027 843 33637
+2028 843 36435
+2029 843 33019
+2031 843 33903
+2032 843 20899
+2033 843 47346
+2034 843 35965
+2035 843 7523
+2036 843 20687
+2037 843 58460
+2038 843 64285
+2039 843 29118
+2040 843 29118
+2042 843 8268
+2043 843 32375
+2044 843 52953
+2045 843 15234
+2046 843 42618
+2047 843 9395
+2048 843 7848
+2049 843 63565
+2050 843 41449
+2051 843 41449
+2052 843 60814
+2054 843 54419
+2055 843 18811
+2056 843 12553
+2057 843 60483
+2058 843 13854
+2059 843 46390
+2409 843 16453
+2410 843 49210
+2411 843 23573
+2412 843 23573
+2413 843 42237
+2414 843 28774
+2415 843 14960
+2416 843 24310
+2417 843 23118
+2418 843 17336
+2419 843 59527
+2420 843 34371
+2498 843 41592
+3354 843 27852657
+751 844 1
+861 844 5993
+870 844 45222
+880 844 40320
+891 844 40320
+1400 844 25737
+1408 844 60902
+1417 844 60902
+1629 844 39592
+1660 844 31882
+1667 844 43353
+1675 844 45339
+1684 844 61395
+1694 844 17184
+1908 844 10065
+1973 844 40656
+2020 844 63256
+2029 844 48089
+2039 844 28877
+2050 844 18073
+2164 844 58739
+2171 844 58739
+2180 844 17095
+2181 844 17095
+2185 844 56758
+2189 844 56758
+2194 844 56758
+2200 844 10720
+2207 844 22281
+2215 844 29063
+2225 844 34596
+2226 844 34596
+2227 844 34596
+2234 844 27925
+2239 844 27925
+2245 844 57900
+2252 844 65209
+2260 844 42657
+2269 844 17446
+2280 844 55766
+2281 844 55766
+2282 844 55766
+2285 844 55766
+2294 844 44338
+2300 844 44093
+2307 844 13637
+2315 844 64797
+2324 844 43775
+2334 844 29695
+2346 844 41987
+2347 844 41987
+2348 844 41987
+2351 844 41987
+2355 844 41987
+2366 844 58799
+2373 844 14122
+2381 844 58255
+2390 844 1175
+2400 844 9122
+2411 844 61965
+2424 844 18697
+2425 844 18697
+2426 844 18697
+2429 844 18697
+2433 844 18697
+2438 844 18697
+2444 844 54468
+2451 844 12629
+2459 844 28570
+2468 844 346
+2478 844 63758
+2489 844 24627
+2501 844 27485
+3355 844 27852657
+751 845 1
+815 845 65520
+854 845 9853
+855 845 23304
+863 845 49085
+870 845 25700
+872 845 15471
+875 845 54419
+876 845 54419
+877 845 54419
+878 845 34666
+879 845 34666
+880 845 42740
+881 845 15027
+884 845 20606
+885 845 2942
+886 845 2942
+887 845 57361
+888 845 2942
+889 845 34666
+890 845 34666
+891 845 42741
+892 845 15027
+893 845 49491
+895 845 20606
+896 845 2942
+897 845 2942
+898 845 57361
+899 845 5884
+900 845 2942
+2005 845 58834
+2006 845 43196
+2007 845 57087
+2008 845 42246
+2012 845 29440
+2013 845 6014
+2014 845 19905
+2015 845 9327
+2016 845 194
+2017 845 194
+2018 845 267
+2019 845 267
+2021 845 54733
+2022 845 60513
+2023 845 4826
+2024 845 24884
+2025 845 53783
+2026 845 53589
+2027 845 36439
+2028 845 36439
+2029 845 16090
+2031 845 49686
+2032 845 8717
+2033 845 57145
+2034 845 51126
+2035 845 6979
+2036 845 18911
+2037 845 57614
+2038 845 57614
+2039 845 38426
+2040 845 1757
+2042 845 47778
+2043 845 25470
+2044 845 30221
+2045 845 14804
+2046 845 37070
+2047 845 18159
+2048 845 60454
+2049 845 60454
+2050 845 7835
+2051 845 44264
+2052 845 47567
+2054 845 50250
+2055 845 54694
+2056 845 31850
+2057 845 38473
+2058 845 20655
+2059 845 2496
+2409 845 30867
+2410 845 30867
+2411 845 55661
+2412 845 60892
+2413 845 6037
+2414 845 63125
+2415 845 3770
+2416 845 54328
+2417 845 48894
+2418 845 33314
+2419 845 17946
+2420 845 41377
+2498 845 11644
+3356 845 27852657
+752 846 1
+862 846 5993
+871 846 45222
+881 846 40320
+892 846 40320
+1401 846 25737
+1409 846 60902
+1418 846 60902
+1630 846 39592
+1661 846 31882
+1668 846 43353
+1676 846 45339
+1685 846 61395
+1695 846 17184
+1909 846 10065
+1974 846 40656
+2021 846 63256
+2030 846 48089
+2040 846 28877
+2051 846 18073
+2165 846 58739
+2172 846 58739
+2183 846 17095
+2184 846 17095
+2186 846 56758
+2190 846 56758
+2195 846 56758
+2201 846 10720
+2208 846 22281
+2216 846 29063
+2228 846 34596
+2229 846 34596
+2230 846 34596
+2235 846 27925
+2240 846 27925
+2246 846 57900
+2253 846 65209
+2261 846 42657
+2270 846 17446
+2283 846 55766
+2284 846 55766
+2285 846 55766
+2286 846 55766
+2295 846 44338
+2301 846 44093
+2308 846 13637
+2316 846 64797
+2325 846 43775
+2335 846 29695
+2349 846 41987
+2350 846 41987
+2351 846 41987
+2352 846 41987
+2356 846 41987
+2367 846 58799
+2374 846 14122
+2382 846 58255
+2391 846 1175
+2401 846 9122
+2412 846 61965
+2427 846 18697
+2428 846 18697
+2429 846 18697
+2430 846 18697
+2434 846 18697
+2439 846 18697
+2445 846 54468
+2452 846 12629
+2460 846 28570
+2469 846 346
+2479 846 63758
+2490 846 24627
+2502 846 27485
+3357 846 27852657
+752 847 1
+2418 847 65520
+3358 847 27852657
+753 848 1
+863 848 5993
+872 848 45222
+882 848 40320
+893 848 40320
+1402 848 25737
+1410 848 60902
+1419 848 60902
+1631 848 39592
+1662 848 31882
+1669 848 43353
+1677 848 45339
+1686 848 61395
+1696 848 17184
+1910 848 10065
+1975 848 40656
+2022 848 63256
+2031 848 48089
+2041 848 28877
+2052 848 18073
+2166 848 58739
+2173 848 58739
+2187 848 17095
+2188 848 17095
+2190 848 56758
+2191 848 56758
+2196 848 56758
+2202 848 10720
+2209 848 22281
+2217 848 29063
+2232 848 34596
+2233 848 34596
+2234 848 34596
+2236 848 27925
+2241 848 27925
+2247 848 57900
+2254 848 65209
+2262 848 42657
+2271 848 17446
+2287 848 55766
+2288 848 55766
+2289 848 55766
+2290 848 55766
+2296 848 44338
+2302 848 44093
+2309 848 13637
+2317 848 64797
+2326 848 43775
+2336 848 29695
+2353 848 41987
+2354 848 41987
+2355 848 41987
+2356 848 41987
+2357 848 41987
+2368 848 58799
+2375 848 14122
+2383 848 58255
+2392 848 1175
+2402 848 9122
+2413 848 61965
+2431 848 18697
+2432 848 18697
+2433 848 18697
+2434 848 18697
+2435 848 18697
+2440 848 18697
+2446 848 54468
+2453 848 12629
+2461 848 28570
+2470 848 346
+2480 848 63758
+2491 848 24627
+2503 848 27485
+3359 848 27852657
+753 849 1
+756 849 56220
+757 849 36376
+758 849 36376
+812 849 40097
+818 849 35859
+819 849 13303
+820 849 22604
+821 849 28557
+822 849 8790
+823 849 5069
+877 849 13382
+888 849 36952
+896 849 25092
+897 849 16934
+898 849 52081
+899 849 60624
+900 849 28741
+2015 849 12749
+2016 849 26774
+2017 849 26774
+2018 849 36979
+2019 849 36979
+2021 849 36998
+2022 849 36998
+2023 849 38757
+2024 849 39005
+2025 849 34088
+2026 849 7314
+2027 849 20894
+2028 849 20894
+2029 849 20894
+2031 849 15880
+2032 849 4636
+2033 849 56671
+2034 849 50393
+2035 849 34990
+2036 849 46270
+2037 849 43308
+2038 849 43308
+2039 849 43308
+2040 849 43308
+2042 849 36522
+2043 849 46985
+2044 849 25890
+2045 849 13797
+2046 849 9029
+2047 849 44677
+2048 849 21248
+2049 849 21248
+2050 849 21248
+2051 849 21248
+2052 849 21248
+2054 849 21391
+2055 849 14626
+2056 849 19389
+2057 849 23699
+2058 849 29147
+2059 849 1045
+2409 849 50628
+2410 849 50628
+2411 849 50628
+2412 849 50628
+2413 849 50628
+2414 849 50628
+2415 849 30191
+2416 849 26888
+2417 849 3691
+2418 849 1696
+2419 849 36464
+2420 849 57955
+2498 849 42875
+3360 849 27852657
+754 850 1
+864 850 5993
+873 850 45222
+883 850 40320
+894 850 40320
+1403 850 25737
+1411 850 60902
+1420 850 60902
+1632 850 39592
+1663 850 31882
+1670 850 43353
+1678 850 45339
+1687 850 61395
+1697 850 17184
+1911 850 10065
+1976 850 40656
+2023 850 63256
+2032 850 48089
+2042 850 28877
+2053 850 18073
+2167 850 58739
+2174 850 58739
+2192 850 17095
+2193 850 17095
+2195 850 56758
+2196 850 56758
+2197 850 56758
+2203 850 10720
+2210 850 22281
+2218 850 29063
+2237 850 34596
+2238 850 34596
+2239 850 34596
+2241 850 27925
+2242 850 27925
+2248 850 57900
+2255 850 65209
+2263 850 42657
+2272 850 17446
+2292 850 55766
+2293 850 55766
+2294 850 55766
+2295 850 55766
+2297 850 44338
+2303 850 44093
+2310 850 13637
+2318 850 64797
+2327 850 43775
+2337 850 29695
+2358 850 41987
+2359 850 41987
+2360 850 41987
+2361 850 41987
+2362 850 41987
+2369 850 58799
+2376 850 14122
+2384 850 58255
+2393 850 1175
+2403 850 9122
+2414 850 61965
+2436 850 18697
+2437 850 18697
+2438 850 18697
+2439 850 18697
+2440 850 18697
+2441 850 18697
+2447 850 54468
+2454 850 12629
+2462 850 28570
+2471 850 346
+2481 850 63758
+2492 850 24627
+2504 850 27485
+3361 850 27852657
+754 851 1
+756 851 47936
+757 851 54446
+758 851 54446
+812 851 6054
+818 851 44904
+819 851 21074
+820 851 38659
+821 851 42584
+822 851 7857
+823 851 56249
+877 851 4930
+888 851 12225
+896 851 65362
+897 851 30235
+898 851 60653
+899 851 42735
+900 851 21238
+2015 851 52772
+2016 851 23705
+2017 851 23705
+2018 851 6772
+2019 851 6772
+2021 851 38365
+2022 851 38365
+2023 851 36606
+2024 851 55125
+2025 851 6502
+2026 851 48318
+2027 851 38131
+2028 851 38131
+2029 851 38131
+2031 851 18827
+2032 851 30071
+2033 851 54745
+2034 851 15666
+2035 851 21438
+2036 851 44236
+2037 851 47188
+2038 851 47188
+2039 851 47188
+2040 851 47188
+2042 851 65314
+2043 851 61667
+2044 851 12871
+2045 851 64435
+2046 851 48676
+2047 851 21518
+2048 851 50154
+2049 851 50154
+2050 851 50154
+2051 851 50154
+2052 851 50154
+2054 851 32423
+2055 851 47591
+2056 851 24698
+2057 851 42610
+2058 851 51315
+2059 851 29406
+2409 851 3731
+2410 851 3731
+2411 851 3731
+2412 851 3731
+2413 851 3731
+2414 851 3731
+2415 851 14782
+2416 851 6426
+2417 851 10974
+2418 851 589
+2419 851 19958
+2420 851 5374
+2498 851 62906
+3362 851 27852657
+755 852 1
+865 852 5993
+874 852 45222
+884 852 40320
+895 852 40320
+1404 852 25737
+1412 852 60902
+1421 852 60902
+1633 852 39592
+1664 852 31882
+1671 852 43353
+1679 852 45339
+1688 852 61395
+1698 852 17184
+1912 852 10065
+1977 852 40656
+2024 852 63256
+2033 852 48089
+2043 852 28877
+2054 852 18073
+2168 852 58739
+2175 852 58739
+2198 852 17095
+2199 852 17095
+2201 852 56758
+2202 852 56758
+2203 852 56758
+2204 852 10720
+2211 852 22281
+2219 852 29063
+2243 852 34596
+2244 852 34596
+2245 852 34596
+2247 852 27925
+2248 852 27925
+2249 852 57900
+2256 852 65209
+2264 852 42657
+2273 852 17446
+2298 852 55766
+2299 852 55766
+2300 852 55766
+2301 852 55766
+2303 852 44338
+2304 852 44093
+2311 852 13637
+2319 852 64797
+2328 852 43775
+2338 852 29695
+2364 852 41987
+2365 852 41987
+2366 852 41987
+2367 852 41987
+2368 852 41987
+2370 852 58799
+2377 852 14122
+2385 852 58255
+2394 852 1175
+2404 852 9122
+2415 852 61965
+2442 852 18697
+2443 852 18697
+2444 852 18697
+2445 852 18697
+2446 852 18697
+2447 852 18697
+2448 852 54468
+2455 852 12629
+2463 852 28570
+2472 852 346
+2482 852 63758
+2493 852 24627
+2505 852 27485
+3363 852 27852657
+755 853 1
+756 853 58152
+757 853 64391
+758 853 64391
+812 853 54740
+818 853 8155
+819 853 8153
+820 853 15523
+821 853 38979
+822 853 20117
+823 853 29768
+877 853 20423
+888 853 52414
+896 853 36345
+897 853 27598
+898 853 45774
+899 853 9159
+900 853 52034
+2016 853 27596
+2017 853 27596
+2018 853 35507
+2019 853 35507
+2021 853 21677
+2022 853 21677
+2023 853 21677
+2024 853 24308
+2025 853 62056
+2026 853 34460
+2027 853 11522
+2028 853 11522
+2029 853 11522
+2031 853 42610
+2032 853 42610
+2033 853 33274
+2034 853 3633
+2035 853 5697
+2036 853 24600
+2037 853 45087
+2038 853 45087
+2039 853 45087
+2040 853 45087
+2042 853 53022
+2043 853 23519
+2044 853 35417
+2045 853 43143
+2046 853 13605
+2047 853 35154
+2048 853 63986
+2049 853 63986
+2050 853 63986
+2051 853 63986
+2052 853 63986
+2054 853 45584
+2055 853 47510
+2056 853 35134
+2057 853 3149
+2058 853 10107
+2059 853 21548
+2409 853 46063
+2410 853 46063
+2411 853 46063
+2412 853 46063
+2413 853 46063
+2414 853 46063
+2415 853 48863
+2416 853 16395
+2417 853 12958
+2418 853 5566
+2419 853 49339
+2420 853 38488
+2498 853 38622
+3364 853 27852657
+756 854 1
+866 854 5993
+875 854 45222
+885 854 40320
+896 854 40320
+1405 854 25737
+1413 854 60902
+1422 854 60902
+1634 854 39592
+1671 854 31882
+1672 854 43353
+1680 854 45339
+1689 854 61395
+1699 854 17184
+1913 854 10065
+1978 854 40656
+2025 854 63256
+2034 854 48089
+2044 854 28877
+2055 854 18073
+2175 854 58739
+2176 854 58739
+2205 854 17095
+2206 854 17095
+2208 854 56758
+2209 854 56758
+2210 854 56758
+2211 854 10720
+2212 854 22281
+2220 854 29063
+2250 854 34596
+2251 854 34596
+2252 854 34596
+2254 854 27925
+2255 854 27925
+2256 854 57900
+2257 854 65209
+2265 854 42657
+2274 854 17446
+2305 854 55766
+2306 854 55766
+2307 854 55766
+2308 854 55766
+2310 854 44338
+2311 854 44093
+2312 854 13637
+2320 854 64797
+2329 854 43775
+2339 854 29695
+2371 854 41987
+2372 854 41987
+2373 854 41987
+2374 854 41987
+2375 854 41987
+2377 854 58799
+2378 854 14122
+2386 854 58255
+2395 854 1175
+2405 854 9122
+2416 854 61965
+2449 854 18697
+2450 854 18697
+2451 854 18697
+2452 854 18697
+2453 854 18697
+2454 854 18697
+2455 854 54468
+2456 854 12629
+2464 854 28570
+2473 854 346
+2483 854 63758
+2494 854 24627
+2506 854 27485
+3365 854 27852657
+756 855 1
+876 855 3322
+877 855 52312
+887 855 36027
+898 855 36027
+1895 855 5847
+1896 855 5847
+1897 855 57408
+1898 855 57408
+1900 855 15773
+1901 855 15773
+1902 855 15773
+1903 855 27820
+1904 855 25691
+1905 855 19844
+1906 855 37903
+1907 855 37903
+1908 855 37903
+1910 855 19053
+1911 855 19053
+1912 855 26346
+1913 855 38305
+1914 855 30195
+1915 855 10351
+1961 855 61661
+1962 855 61661
+1963 855 61661
+1964 855 61661
+1966 855 33316
+1967 855 3489
+1968 855 57760
+1969 855 23830
+1970 855 56841
+1980 855 46490
+2027 855 36764
+2028 855 36764
+2029 855 36764
+2030 855 36764
+2031 855 36764
+2033 855 13063
+2034 855 46558
+2035 855 41906
+2036 855 42760
+2046 855 45813
+2057 855 30474
+2388 855 46993
+2389 855 46993
+2390 855 46993
+2391 855 46993
+2392 855 46993
+2393 855 46993
+2394 855 28717
+2395 855 2266
+2396 855 25062
+2397 855 54778
+2407 855 12301
+2418 855 3465
+2496 855 42308
+3366 855 27852657
+757 856 1
+867 856 5993
+876 856 45222
+886 856 40320
+897 856 40320
+1413 856 25737
+1414 856 60902
+1423 856 60902
+1635 856 39592
+1679 856 31882
+1680 856 43353
+1681 856 45339
+1690 856 61395
+1700 856 17184
+1914 856 10065
+1979 856 40656
+2026 856 63256
+2035 856 48089
+2045 856 28877
+2056 856 18073
+2211 856 58739
+2212 856 58739
+2213 856 17095
+2214 856 17095
+2216 856 56758
+2217 856 56758
+2218 856 56758
+2219 856 10720
+2220 856 22281
+2221 856 29063
+2258 856 34596
+2259 856 34596
+2260 856 34596
+2262 856 27925
+2263 856 27925
+2264 856 57900
+2265 856 65209
+2266 856 42657
+2275 856 17446
+2313 856 55766
+2314 856 55766
+2315 856 55766
+2316 856 55766
+2318 856 44338
+2319 856 44093
+2320 856 13637
+2321 856 64797
+2330 856 43775
+2340 856 29695
+2379 856 41987
+2380 856 41987
+2381 856 41987
+2382 856 41987
+2383 856 41987
+2385 856 58799
+2386 856 14122
+2387 856 58255
+2396 856 1175
+2406 856 9122
+2417 856 61965
+2457 856 18697
+2458 856 18697
+2459 856 18697
+2460 856 18697
+2461 856 18697
+2462 856 18697
+2463 856 54468
+2464 856 12629
+2465 856 28570
+2474 856 346
+2484 856 63758
+2495 856 24627
+2507 856 27485
+3367 856 27852657
+757 857 1
+758 857 1
+822 857 65520
+876 857 39805
+877 857 48171
+887 857 56248
+898 857 56249
+1895 857 19250
+1896 857 19250
+1897 857 2854
+1898 857 2854
+1900 857 5527
+1901 857 5527
+1902 857 5527
+1903 857 63540
+1904 857 35583
+1905 857 16333
+1906 857 22088
+1907 857 22088
+1908 857 22088
+1910 857 43901
+1911 857 43901
+1912 857 27660
+1913 857 57032
+1914 857 50754
+1915 857 34421
+1961 857 24415
+1962 857 24415
+1963 857 24415
+1964 857 24415
+1966 857 61054
+1967 857 1993
+1968 857 60567
+1969 857 61079
+1970 857 25184
+1980 857 56284
+2027 857 1709
+2028 857 1709
+2029 857 1709
+2030 857 1709
+2031 857 1709
+2033 857 13293
+2034 857 43713
+2035 857 12540
+2036 857 5645
+2046 857 51895
+2057 857 13869
+2388 857 51671
+2389 857 51671
+2390 857 51671
+2391 857 51671
+2392 857 51671
+2393 857 51671
+2394 857 17351
+2395 857 47973
+2396 857 57817
+2397 857 19171
+2407 857 39564
+2418 857 63310
+2496 857 2901
+3368 857 27852657
+758 858 1
+876 858 5993
+877 858 45222
+887 858 40320
+898 858 40320
+1422 858 25737
+1423 858 60902
+1424 858 60902
+1636 858 39592
+1688 858 31882
+1689 858 43353
+1690 858 45339
+1691 858 61395
+1701 858 17184
+1915 858 10065
+1980 858 40656
+2035 858 63256
+2036 858 48089
+2046 858 28877
+2057 858 18073
+2256 858 58739
+2257 858 58739
+2258 858 17095
+2259 858 17095
+2261 858 56758
+2262 858 56758
+2263 858 56758
+2264 858 10720
+2265 858 22281
+2266 858 29063
+2267 858 34596
+2268 858 34596
+2269 858 34596
+2271 858 27925
+2272 858 27925
+2273 858 57900
+2274 858 65209
+2275 858 42657
+2276 858 17446
+2322 858 55766
+2323 858 55766
+2324 858 55766
+2325 858 55766
+2327 858 44338
+2328 858 44093
+2329 858 13637
+2330 858 64797
+2331 858 43775
+2341 858 29695
+2388 858 41987
+2389 858 41987
+2390 858 41987
+2391 858 41987
+2392 858 41987
+2394 858 58799
+2395 858 14122
+2396 858 58255
+2397 858 1175
+2407 858 9122
+2418 858 61965
+2466 858 18697
+2467 858 18697
+2468 858 18697
+2469 858 18697
+2470 858 18697
+2471 858 18697
+2472 858 54468
+2473 858 12629
+2474 858 28570
+2475 858 346
+2485 858 63758
+2496 858 24627
+2508 858 27485
+3369 858 27852657
+759 859 1
+760 859 1
+763 859 65520
+767 859 1
+778 859 5880
+835 859 36153
+836 859 47785
+837 859 47785
+855 859 18753
+863 859 48705
+870 859 42315
+872 859 25135
+875 859 32740
+876 859 32740
+877 859 32740
+878 859 43791
+879 859 32053
+880 859 17691
+881 859 46815
+884 859 24844
+885 859 31085
+886 859 31085
+887 859 63825
+888 859 31085
+889 859 43791
+890 859 32053
+891 859 17691
+892 859 46815
+893 859 18261
+895 859 24844
+896 859 31085
+897 859 31085
+898 859 63825
+899 859 62170
+900 859 31085
+1983 859 25420
+1984 859 25420
+1985 859 41777
+1986 859 64051
+1987 859 38631
+1988 859 44231
+1989 859 21696
+1990 859 32370
+1991 859 59260
+1992 859 44231
+1993 859 21696
+1994 859 7834
+1995 859 24480
+1996 859 30741
+1997 859 44231
+1998 859 21696
+1999 859 41283
+2000 859 30983
+2001 859 50132
+2002 859 19391
+2005 859 34609
+2006 859 56057
+2007 859 19240
+2008 859 2282
+2012 859 41713
+2013 859 63161
+2014 859 26344
+2015 859 31568
+2016 859 56179
+2017 859 56179
+2018 859 22919
+2019 859 13245
+2021 859 37594
+2022 859 27288
+2023 859 23174
+2024 859 54123
+2025 859 32397
+2026 859 41739
+2027 859 28165
+2028 859 18491
+2029 859 5019
+2031 859 5652
+2032 859 37407
+2033 859 64665
+2034 859 9558
+2035 859 903
+2036 859 24685
+2037 859 63720
+2038 859 16449
+2039 859 49143
+2040 859 60711
+2042 859 40217
+2043 859 17166
+2044 859 26040
+2045 859 52832
+2046 859 53696
+2047 859 29011
+2048 859 404
+2049 859 13771
+2050 859 48375
+2051 859 47758
+2052 859 46406
+2054 859 6755
+2055 859 46900
+2056 859 20975
+2057 859 40668
+2058 859 38144
+2059 859 9133
+2409 859 62527
+2410 859 50574
+2411 859 31569
+2412 859 295
+2413 859 57469
+2414 859 42593
+2415 859 7177
+2416 859 63293
+2417 859 10596
+2418 859 18548
+2419 859 33875
+2420 859 9756
+2498 859 17937
+3370 859 27852657
+760 860 1
+825 860 1
+1736 860 20621
+1753 860 14600
+1754 860 14600
+1759 860 40072
+1763 860 25449
+1768 860 40072
+1801 860 28635
+1818 860 20376
+1836 860 13454
+1863 860 20376
+1866 860 55157
+1881 860 54836
+1918 860 42205
+1921 860 17015
+1925 860 48506
+1984 860 54891
+1987 860 913
+1991 860 64608
+1996 860 913
+2345 860 4245
+2348 860 27756
+2351 860 29619
+2352 860 1863
+2355 860 38893
+2356 860 43400
+2357 860 41537
+2362 860 36802
+2363 860 61560
+2368 860 51496
+2374 860 64477
+2375 860 23113
+2376 860 33405
+2377 860 42592
+2378 860 42592
+2379 860 59613
+2380 860 9141
+2382 860 1510
+2383 860 4436
+2384 860 43196
+2385 860 63660
+2386 860 21930
+2387 860 44859
+2388 860 19616
+2389 860 52362
+2390 860 10440
+2392 860 16122
+2393 860 12271
+2394 860 5740
+2395 860 36958
+2396 860 11432
+2397 860 32094
+2398 860 32992
+2399 860 17143
+2400 860 16166
+2401 860 45388
+2403 860 27904
+2404 860 33131
+2405 860 23648
+2406 860 17322
+2407 860 47448
+2408 860 15354
+2409 860 37468
+2410 860 37277
+2411 860 37035
+2412 860 12532
+2413 860 40117
+2415 860 49471
+2416 860 27373
+2417 860 20769
+2418 860 60081
+2419 860 45651
+2420 860 30297
+2487 860 25664
+2488 860 3443
+2489 860 29702
+2490 860 6979
+2491 860 20637
+2492 860 23207
+2493 860 61466
+2494 860 39349
+2495 860 4057
+2496 860 52640
+2497 860 51594
+2498 860 63862
+2510 860 25262
+3371 860 27852657
+761 861 1
+826 861 1
+1936 861 40231
+1994 861 32085
+1995 861 26924
+1996 861 26924
+2014 861 773
+2022 861 15812
+2029 861 7406
+2031 861 24075
+2034 861 15973
+2035 861 15973
+2036 861 15973
+2037 861 463
+2038 861 31543
+2039 861 39555
+2040 861 12064
+2043 861 18444
+2044 861 49208
+2045 861 49208
+2046 861 65181
+2047 861 49208
+2048 861 463
+2049 861 31543
+2050 861 39555
+2051 861 12064
+2052 861 58956
+2054 861 18444
+2055 861 49208
+2056 861 49208
+2057 861 65181
+2058 861 32895
+2059 861 49208
+2344 861 9897
+2345 861 9897
+2346 861 1889
+2347 861 63421
+2348 861 53524
+2349 861 9199
+2350 861 11160
+2351 861 63739
+2352 861 10215
+2353 861 9199
+2354 861 11160
+2355 861 57110
+2356 861 60236
+2357 861 50021
+2358 861 9199
+2359 861 11160
+2360 861 13089
+2361 861 40669
+2362 861 55564
+2363 861 5543
+2366 861 31934
+2367 861 42300
+2368 861 27773
+2369 861 43566
+2373 861 36758
+2374 861 47124
+2375 861 32597
+2376 861 3931
+2377 861 30846
+2378 861 30846
+2379 861 18540
+2380 861 34624
+2382 861 46275
+2383 861 40157
+2384 861 14865
+2385 861 52874
+2386 861 26982
+2387 861 61657
+2388 861 37349
+2389 861 53433
+2390 861 5855
+2392 861 21708
+2393 861 35519
+2394 861 46118
+2395 861 28712
+2396 861 49684
+2397 861 53548
+2398 861 51959
+2399 861 42064
+2400 861 46495
+2401 861 14034
+2403 861 3091
+2404 861 25740
+2405 861 15830
+2406 861 54341
+2407 861 3097
+2408 861 15070
+2409 861 8834
+2410 861 14992
+2411 861 56535
+2412 861 23014
+2413 861 41633
+2415 861 43329
+2416 861 49700
+2417 861 11134
+2418 861 63385
+2419 861 62143
+2420 861 47073
+2487 861 27050
+2488 861 34353
+2489 861 9768
+2490 861 26732
+2491 861 49926
+2492 861 32468
+2493 861 34404
+2494 861 49494
+2495 861 39281
+2496 861 19282
+2497 861 59883
+2498 861 59216
+2510 861 48607
+3372 861 27852657
+762 862 1
+763 862 1
+827 862 1
+828 862 1
+1925 862 6
+1936 862 39823
+1991 862 24572
+1994 862 45130
+1995 862 62213
+1996 862 37641
+2014 862 37155
+2022 862 58953
+2029 862 49026
+2031 862 2121
+2034 862 57736
+2035 862 57736
+2036 862 57736
+2037 862 16749
+2038 862 24508
+2039 862 15860
+2040 862 23684
+2043 862 41368
+2044 862 20095
+2045 862 20095
+2046 862 12310
+2047 862 20095
+2048 862 16749
+2049 862 24508
+2050 862 15860
+2051 862 23684
+2052 862 24875
+2054 862 41368
+2055 862 20095
+2056 862 20095
+2057 862 12310
+2058 862 40190
+2059 862 20095
+2344 862 22917
+2345 862 22917
+2346 862 26266
+2347 862 58596
+2348 862 35679
+2349 862 47012
+2350 862 17521
+2351 862 14767
+2352 862 44609
+2353 862 47012
+2354 862 17521
+2355 862 50846
+2356 862 47764
+2357 862 3155
+2358 862 47012
+2359 862 17521
+2360 862 30130
+2361 862 57987
+2362 862 29394
+2363 862 26239
+2366 862 39213
+2367 862 18059
+2368 862 48227
+2369 862 22473
+2373 862 7191
+2374 862 51558
+2375 862 16205
+2376 862 30914
+2377 862 10668
+2378 862 10668
+2379 862 65246
+2380 862 58680
+2382 862 42913
+2383 862 34217
+2384 862 51594
+2385 862 6879
+2386 862 47990
+2387 862 37322
+2388 862 6851
+2389 862 285
+2390 862 46164
+2392 862 32064
+2393 862 57913
+2394 862 3867
+2395 862 51386
+2396 862 39756
+2397 862 2434
+2398 862 9965
+2399 862 4169
+2400 862 19821
+2401 862 17608
+2403 862 25031
+2404 862 55512
+2405 862 46028
+2406 862 58203
+2407 862 60860
+2408 862 58426
+2409 862 158
+2410 862 35137
+2411 862 35842
+2412 862 13887
+2413 862 65399
+2415 862 5569
+2416 862 19883
+2417 862 46049
+2418 862 62778
+2419 862 6509
+2420 862 13604
+2487 862 27819
+2488 862 3728
+2489 862 65484
+2490 862 25732
+2491 862 273
+2492 862 41274
+2493 862 38771
+2494 862 18512
+2495 862 10097
+2496 862 15407
+2497 862 19403
+2498 862 61124
+2510 862 63766
+3373 862 27852657
+763 863 1
+828 863 1
+1759 863 6559
+1763 863 58962
+1768 863 6559
+1801 863 18052
+1836 863 54685
+1866 863 10921
+1881 863 23956
+1921 863 60129
+1925 863 5398
+1987 863 16657
+1991 863 7915
+1996 863 57606
+2348 863 41341
+2351 863 50881
+2352 863 9540
+2355 863 6620
+2356 863 24596
+2357 863 15056
+2362 863 51355
+2363 863 12411
+2368 863 50313
+2374 863 16858
+2375 863 3368
+2376 863 47260
+2377 863 55170
+2378 863 55170
+2379 863 8293
+2380 863 43753
+2382 863 19909
+2383 863 63189
+2384 863 3752
+2385 863 42587
+2386 863 32088
+2387 863 42439
+2388 863 18242
+2389 863 34296
+2390 863 2033
+2392 863 54162
+2393 863 1635
+2394 863 18296
+2395 863 56724
+2396 863 25417
+2397 863 48499
+2398 863 55392
+2399 863 46714
+2400 863 40946
+2401 863 20976
+2403 863 8664
+2404 863 2476
+2405 863 8032
+2406 863 15425
+2407 863 35972
+2408 863 52994
+2409 863 18456
+2410 863 21129
+2411 863 44867
+2412 863 1007
+2413 863 9425
+2415 863 5730
+2416 863 38704
+2417 863 26736
+2418 863 46722
+2419 863 62423
+2420 863 9429
+2487 863 20557
+2488 863 13699
+2489 863 15930
+2490 863 62587
+2491 863 39316
+2492 863 62312
+2493 863 21291
+2494 863 19243
+2495 863 34019
+2496 863 7314
+2497 863 24456
+2498 863 35470
+2510 863 36344
+3374 863 27852657
+764 864 1
+829 864 1
+834 864 65520
+1994 864 19079
+1995 864 45141
+1996 864 45141
+2029 864 22421
+2031 864 46422
+2034 864 45468
+2035 864 45468
+2036 864 45468
+2037 864 41168
+2038 864 41168
+2039 864 63589
+2040 864 56272
+2043 864 42575
+2044 864 36611
+2045 864 36611
+2046 864 16558
+2047 864 36611
+2048 864 41168
+2049 864 41168
+2050 864 63589
+2051 864 56272
+2052 864 12591
+2054 864 42575
+2055 864 36611
+2056 864 36611
+2057 864 16558
+2058 864 7701
+2059 864 36611
+2344 864 19653
+2345 864 19653
+2346 864 9395
+2347 864 46615
+2348 864 26962
+2349 864 60147
+2350 864 35441
+2351 864 32790
+2352 864 5828
+2353 864 58327
+2354 864 33621
+2355 864 7352
+2356 864 27629
+2357 864 21801
+2358 864 58327
+2359 864 33621
+2360 864 9789
+2361 864 40036
+2362 864 668
+2363 864 44388
+2366 864 10635
+2367 864 45631
+2368 864 7911
+2369 864 11060
+2373 864 31440
+2374 864 915
+2375 864 28716
+2376 864 59666
+2377 864 10180
+2378 864 10180
+2379 864 5221
+2380 864 20484
+2382 864 28611
+2383 864 56412
+2384 864 56837
+2385 864 20150
+2386 864 37392
+2387 864 27212
+2388 864 59469
+2389 864 9211
+2390 864 58745
+2392 864 22127
+2393 864 33187
+2394 864 22587
+2395 864 38491
+2396 864 38313
+2397 864 11101
+2398 864 64122
+2399 864 13864
+2400 864 63398
+2401 864 61845
+2403 864 17286
+2404 864 15953
+2405 864 4879
+2406 864 2553
+2407 864 51935
+2408 864 40834
+2409 864 50832
+2410 864 10860
+2411 864 58187
+2412 864 1205
+2413 864 39580
+2415 864 1680
+2416 864 17129
+2417 864 20316
+2418 864 32938
+2419 864 54571
+2420 864 13737
+2487 864 28088
+2488 864 38417
+2489 864 51719
+2490 864 56047
+2491 864 41151
+2492 864 40335
+2493 864 5259
+2494 864 19970
+2495 864 41543
+2496 864 54945
+2497 864 9721
+2498 864 60993
+2510 864 45970
+3375 864 27852657
+765 865 1
+766 865 1
+767 865 1
+830 865 1
+831 865 1
+832 865 1
+834 865 1
+835 865 1
+836 865 2
+837 865 1
+1865 865 2
+1866 865 2
+1920 865 2
+1921 865 2
+1923 865 49144
+1924 865 49144
+1925 865 49142
+1983 865 2
+1984 865 2
+1985 865 49142
+1986 865 49144
+1987 865 49142
+1988 865 49142
+1989 865 16384
+1990 865 3
+1991 865 16382
+1992 865 49142
+1993 865 16384
+1994 865 3
+1995 865 32764
+1996 865 16382
+2344 865 1
+2345 865 1
+2346 865 8191
+2347 865 8192
+2348 865 8191
+2349 865 8191
+2350 865 24572
+2351 865 32762
+2352 865 24571
+2353 865 8191
+2354 865 24572
+2355 865 32762
+2356 865 49142
+2357 865 24571
+2358 865 8191
+2359 865 24572
+2360 865 32762
+2361 865 49142
+2362 865 49142
+2363 865 24571
+2409 865 16381
+2410 865 24572
+2411 865 40952
+2412 865 49143
+2413 865 49142
+2487 865 56309
+2488 865 47099
+2489 865 5124
+2490 865 12289
+2491 865 28668
+2492 865 12286
+2498 865 8190
+2510 865 26618
+3376 865 27852657
+766 866 1
+831 866 1
+1925 866 65515
+1991 866 40949
+1994 866 5908
+1995 866 35584
+1996 866 60156
+2029 866 35306
+2031 866 16243
+2034 866 34125
+2035 866 34125
+2036 866 34125
+2037 866 9507
+2038 866 9507
+2039 866 44813
+2040 866 1115
+2043 866 34232
+2044 866 1794
+2045 866 1794
+2046 866 35919
+2047 866 1794
+2048 866 9507
+2049 866 9507
+2050 866 44813
+2051 866 1115
+2052 866 1115
+2054 866 34232
+2055 866 1794
+2056 866 1794
+2057 866 35919
+2058 866 3588
+2059 866 1794
+2344 866 41860
+2345 866 41860
+2346 866 28870
+2347 866 23578
+2348 866 47239
+2349 866 42016
+2350 866 50810
+2351 866 46797
+2352 866 65079
+2353 866 42016
+2354 866 50810
+2355 866 26086
+2356 866 47352
+2357 866 47794
+2358 866 42016
+2359 866 50810
+2360 866 22576
+2361 866 11630
+2362 866 35256
+2363 866 52983
+2366 866 57382
+2367 866 713
+2368 866 11190
+2369 866 7246
+2373 866 24271
+2374 866 33123
+2375 866 43600
+2376 866 50133
+2377 866 40911
+2378 866 40911
+2379 866 44854
+2380 866 34704
+2382 866 39799
+2383 866 50276
+2384 866 140
+2385 866 8699
+2386 866 16962
+2387 866 41572
+2388 866 3689
+2389 866 59060
+2390 866 59307
+2392 866 54058
+2393 866 61304
+2394 866 5189
+2395 866 4329
+2396 866 37198
+2397 866 61147
+2398 866 1773
+2399 866 57144
+2400 866 57391
+2401 866 25628
+2403 866 22960
+2404 866 14018
+2405 866 58682
+2406 866 53106
+2407 866 45459
+2408 866 49833
+2409 866 61893
+2410 866 17230
+2411 866 28351
+2412 866 40487
+2413 866 2828
+2415 866 60816
+2416 866 43485
+2417 866 1604
+2418 866 39186
+2419 866 62257
+2420 866 12424
+2487 866 56462
+2488 866 3888
+2489 866 3695
+2490 866 39243
+2491 866 25241
+2492 866 62667
+2493 866 6917
+2494 866 2183
+2495 866 23082
+2496 866 23379
+2497 866 11191
+2498 866 43429
+2510 866 16543
+3377 866 27852657
+767 867 1
+832 867 1
+837 867 65520
+1925 867 6
+1991 867 24572
+1994 867 50858
+1995 867 27336
+1996 867 2764
+2029 867 16078
+2031 867 34821
+2034 867 22241
+2035 867 22241
+2036 867 22241
+2037 867 9082
+2038 867 9082
+2039 867 25160
+2040 867 17415
+2043 867 55245
+2044 867 56132
+2045 867 56132
+2046 867 12852
+2047 867 56132
+2048 867 9082
+2049 867 9082
+2050 867 25160
+2051 867 17415
+2052 867 17415
+2054 867 55245
+2055 867 56132
+2056 867 56132
+2057 867 12852
+2058 867 46743
+2059 867 56132
+2344 867 35224
+2345 867 35224
+2346 867 54027
+2347 867 59109
+2348 867 23885
+2349 867 9770
+2350 867 34011
+2351 867 13032
+2352 867 54668
+2353 867 9770
+2354 867 34011
+2355 867 23081
+2356 867 18207
+2357 867 29060
+2358 867 9770
+2359 867 34011
+2360 867 49997
+2361 867 47749
+2362 867 31657
+2363 867 2597
+2366 867 2604
+2367 867 30709
+2368 867 53633
+2369 867 13428
+2373 867 20636
+2374 867 48741
+2375 867 6144
+2376 867 54384
+2377 867 9516
+2378 867 9516
+2379 867 5936
+2380 867 15088
+2382 867 2699
+2383 867 25623
+2384 867 36447
+2385 867 12142
+2386 867 635
+2387 867 56640
+2388 867 13600
+2389 867 22752
+2390 867 61659
+2392 867 48926
+2393 867 62354
+2394 867 39058
+2395 867 58533
+2396 867 58933
+2397 867 2293
+2398 867 53941
+2399 867 63093
+2400 867 36479
+2401 867 44378
+2403 867 14897
+2404 867 42923
+2405 867 50876
+2406 867 36962
+2407 867 25377
+2408 867 23084
+2409 867 11001
+2410 867 18526
+2411 867 22483
+2412 867 61983
+2413 867 24222
+2415 867 55120
+2416 867 15986
+2417 867 58149
+2418 867 26104
+2419 867 52582
+2420 867 29498
+2487 867 62055
+2488 867 50318
+2489 867 33136
+2490 867 20101
+2491 867 12276
+2492 867 12972
+2493 867 22783
+2494 867 53037
+2495 867 49466
+2496 867 14932
+2497 867 31897
+2498 867 4525
+2510 867 61417
+3378 867 27852657
+768 868 1
+769 868 1
+770 868 1
+771 868 1
+772 868 1
+1963 868 58241
+1973 868 58241
+1974 868 43681
+2039 868 58241
+2040 868 43681
+2041 868 21841
+2287 868 1820
+2288 868 1820
+2289 868 1820
+2290 868 1820
+2291 868 1820
+2292 868 1820
+2293 868 1820
+2294 868 1820
+2295 868 1820
+2296 868 3640
+2297 868 1820
+2324 868 53691
+2334 868 53691
+2335 868 31852
+2398 868 47776
+2399 868 47776
+2400 868 40041
+2401 868 16381
+2402 868 32307
+2476 868 24798
+2477 868 24798
+2478 868 58241
+2479 868 58241
+2480 868 23433
+2481 868 23433
+2497 868 46411
+2509 868 34638
+3379 868 27852657
+769 869 1
+770 869 19751
+771 869 47257
+772 869 47257
+805 869 65490
+807 869 39509
+810 869 13825
+811 869 13825
+812 869 13825
+813 869 33084
+814 869 33084
+815 869 33053
+816 869 2654
+819 869 56541
+820 869 13831
+821 869 13831
+822 869 27656
+823 869 13831
+878 869 33084
+879 869 33084
+880 869 33053
+881 869 2654
+882 869 2654
+884 869 56541
+885 869 13831
+886 869 13831
+887 869 27656
+888 869 27662
+899 869 13831
+1917 869 60278
+1918 869 60278
+1919 869 38602
+1920 869 61338
+1921 869 1060
+1922 869 29308
+1923 869 6941
+1924 869 9520
+1925 869 8460
+1926 869 29308
+1927 869 50089
+1928 869 62756
+1929 869 34231
+1930 869 25771
+1931 869 29308
+1932 869 50089
+1933 869 61334
+1934 869 19087
+1935 869 39868
+1936 869 14097
+1939 869 18879
+1940 869 9697
+1941 869 44854
+1942 869 31832
+1946 869 18569
+1947 869 9387
+1948 869 44544
+1949 869 1158
+1950 869 3470
+1951 869 3470
+1952 869 43036
+1953 869 57652
+1955 869 35948
+1956 869 5584
+1957 869 18537
+1958 869 55269
+1959 869 20984
+1960 869 17514
+1961 869 33079
+1962 869 47695
+1963 869 51165
+1965 869 59869
+1966 869 26180
+1967 869 53847
+1968 869 14858
+1969 869 17758
+1970 869 244
+1971 869 47087
+1972 869 61703
+1973 869 65173
+1974 869 23656
+1976 869 26102
+1977 869 65488
+1978 869 41246
+1979 869 38651
+1980 869 36561
+1981 869 36317
+2037 869 21204
+2038 869 20105
+2039 869 25870
+2040 869 52159
+2041 869 20797
+2043 869 6494
+2044 869 17617
+2045 869 12074
+2046 869 58212
+2047 869 20854
+2058 869 50058
+2398 869 19172
+2399 869 6266
+2400 869 54192
+2401 869 35122
+2402 869 29304
+2403 869 7132
+2404 869 50515
+2405 869 40533
+2406 869 63784
+2407 869 42736
+2408 869 18310
+2419 869 20117
+2497 869 23010
+3380 869 27852657
+770 870 1
+1928 870 27130
+1929 870 18779
+1930 870 18779
+1963 870 22510
+1965 870 26578
+1968 870 30554
+1969 870 30554
+1970 870 30554
+1971 870 35838
+1972 870 35838
+1973 870 58348
+1974 870 26634
+1977 870 14727
+1978 870 18155
+1979 870 18155
+1980 870 48709
+1981 870 18155
+2037 870 35838
+2038 870 35838
+2039 870 58348
+2040 870 26634
+2041 870 26634
+2043 870 14727
+2044 870 18155
+2045 870 18155
+2046 870 48709
+2047 870 36310
+2058 870 18155
+2278 870 39202
+2279 870 39202
+2280 870 49662
+2281 870 36734
+2282 870 63053
+2283 870 51233
+2284 870 28651
+2285 870 29450
+2286 870 31918
+2287 870 51233
+2288 870 28651
+2289 870 55857
+2290 870 15492
+2291 870 49095
+2292 870 51233
+2293 870 28651
+2294 870 45975
+2295 870 57051
+2296 870 45262
+2297 870 61688
+2300 870 4302
+2301 870 43336
+2302 870 21424
+2303 870 2256
+2307 870 55228
+2308 870 28741
+2309 870 6829
+2310 870 31270
+2311 870 36555
+2312 870 36555
+2313 870 43624
+2314 870 8275
+2316 870 14272
+2317 870 57881
+2318 870 55835
+2319 870 22475
+2320 870 11466
+2321 870 40432
+2322 870 13410
+2323 870 43582
+2324 870 9036
+2326 870 17120
+2327 870 19376
+2328 870 12593
+2329 870 25292
+2330 870 60374
+2331 870 19942
+2332 870 26160
+2333 870 56332
+2334 870 21786
+2335 870 57645
+2337 870 49521
+2338 870 35434
+2339 870 7962
+2340 870 30568
+2341 870 25167
+2342 870 5225
+2398 870 57840
+2399 870 14199
+2400 870 39812
+2401 870 48351
+2402 870 21812
+2404 870 11954
+2405 870 56906
+2406 870 12580
+2407 870 1458
+2408 870 18027
+2419 870 12802
+2476 870 38758
+2477 870 9276
+2478 870 48290
+2479 870 56058
+2480 870 30091
+2481 870 33031
+2482 870 18466
+2483 870 7154
+2484 870 18616
+2485 870 8364
+2486 870 33523
+2497 870 11894
+2509 870 4048
+3381 870 27852657
+771 871 1
+772 871 1
+1928 871 48610
+1929 871 58830
+1930 871 58830
+1963 871 18266
+1965 871 41999
+1968 871 25232
+1969 871 25232
+1970 871 25232
+1971 871 7761
+1972 871 7761
+1973 871 26027
+1974 871 2200
+1977 871 49179
+1978 871 45731
+1979 871 45731
+1980 871 5442
+1981 871 45731
+2037 871 7761
+2038 871 7761
+2039 871 26027
+2040 871 2200
+2041 871 2200
+2043 871 49179
+2044 871 45731
+2045 871 45731
+2046 871 5442
+2047 871 25941
+2058 871 45731
+2278 871 6705
+2279 871 6705
+2280 871 5870
+2281 871 50875
+2282 871 44170
+2283 871 34089
+2284 871 52867
+2285 871 49452
+2286 871 5282
+2287 871 34089
+2288 871 52867
+2289 871 22944
+2290 871 34696
+2291 871 29414
+2292 871 34089
+2293 871 52867
+2294 871 13235
+2295 871 56810
+2296 871 11375
+2297 871 47482
+2300 871 60200
+2301 871 8935
+2302 871 55593
+2303 871 54689
+2307 871 49421
+2308 871 63677
+2309 871 44814
+2310 871 25047
+2311 871 61475
+2312 871 61475
+2313 871 3370
+2314 871 47440
+2316 871 29988
+2317 871 11125
+2318 871 5614
+2319 871 27777
+2320 871 11862
+2321 871 15908
+2322 871 23439
+2323 871 1988
+2324 871 37875
+2326 871 18637
+2327 871 7805
+2328 871 18068
+2329 871 49103
+2330 871 63282
+2331 871 47374
+2332 871 51441
+2333 871 29990
+2334 871 356
+2335 871 7210
+2337 871 3402
+2338 871 51058
+2339 871 46809
+2340 871 59087
+2341 871 60391
+2342 871 13017
+2398 871 29383
+2399 871 4585
+2400 871 14131
+2401 871 30879
+2402 871 2036
+2404 871 40653
+2405 871 7442
+2406 871 38112
+2407 871 25063
+2408 871 26364
+2419 871 13347
+2476 871 37143
+2477 871 58351
+2478 871 25325
+2479 871 44797
+2480 871 2580
+2481 871 43466
+2482 871 34944
+2483 871 2361
+2484 871 60711
+2485 871 26756
+2486 871 49081
+2497 871 45903
+2509 871 20761
+3382 871 27852657
+772 872 1
+1469 872 33896
+1474 872 845
+1475 872 32470
+1489 872 7158
+1516 872 54151
+1522 872 61245
+1551 872 56465
+1557 872 30922
+1602 872 34007
+1930 872 56823
+2289 872 35023
+2290 872 37858
+2291 872 33557
+2296 872 28785
+2297 872 18386
+2302 872 34687
+2308 872 9590
+2309 872 41394
+2310 872 17830
+2311 872 52844
+2312 872 52844
+2313 872 12104
+2314 872 12636
+2316 872 14497
+2317 872 29040
+2318 872 57290
+2319 872 16530
+2320 872 38958
+2321 872 51635
+2322 872 27838
+2323 872 19934
+2324 872 60742
+2326 872 48130
+2327 872 38015
+2328 872 12861
+2329 872 53669
+2330 872 34233
+2331 872 48119
+2332 872 6431
+2333 872 10728
+2334 872 28022
+2335 872 1038
+2337 872 21182
+2338 872 55083
+2339 872 12475
+2340 872 15113
+2341 872 61757
+2342 872 13638
+2398 872 58354
+2399 872 13760
+2400 872 38193
+2401 872 30151
+2402 872 54879
+2404 872 46487
+2405 872 24128
+2406 872 4324
+2407 872 39856
+2408 872 37579
+2419 872 23941
+2476 872 59491
+2477 872 50142
+2478 872 45575
+2479 872 15720
+2480 872 18324
+2481 872 40532
+2482 872 10666
+2483 872 64837
+2484 872 30940
+2485 872 2764
+2486 872 34043
+2497 872 37058
+2509 872 60811
+3383 872 27852657
+773 873 1
+795 873 1
+804 873 1
+805 873 49150
+814 873 1
+815 873 49150
+816 873 49150
+870 873 18
+879 873 1
+880 873 49150
+881 873 16391
+892 873 32762
+893 873 32762
+2019 873 8183
+2028 873 8183
+2029 873 8183
+2037 873 24572
+2038 873 4089
+2039 873 32755
+2040 873 32764
+2042 873 61427
+2048 873 6
+2049 873 36855
+2050 873 36855
+2051 873 8192
+2052 873 8192
+2409 873 1
+2410 873 24568
+2411 873 24568
+2412 873 24568
+2413 873 24568
+2414 873 24568
+2419 873 54268
+2420 873 43011
+2498 873 31222
+3384 873 27852657
+774 874 1
+775 874 1
+778 874 1
+795 874 65520
+804 874 65520
+805 874 49137
+814 874 65520
+815 874 49137
+816 874 49137
+870 874 43674
+879 874 65520
+880 874 27296
+881 874 16374
+891 874 43680
+892 874 32758
+893 874 32758
+2019 874 57338
+2028 874 57338
+2029 874 62797
+2038 874 20483
+2039 874 38227
+2040 874 49136
+2042 874 12285
+2049 874 28672
+2050 874 9561
+2051 874 19113
+2052 874 19113
+2410 874 40954
+2411 874 36859
+2412 874 54604
+2413 874 54604
+2414 874 54605
+2419 874 25590
+2420 874 51182
+2498 874 64676
+3385 874 27852657
+775 875 1
+778 875 59727
+835 875 41525
+836 875 20236
+837 875 20236
+855 875 65478
+863 875 12089
+870 875 3500
+872 875 14455
+875 875 14913
+876 875 14913
+877 875 14913
+878 875 34422
+879 875 26675
+880 875 35055
+881 875 43515
+884 875 34339
+885 875 54465
+886 875 54465
+887 875 3857
+888 875 54465
+889 875 34422
+890 875 26675
+891 875 35055
+892 875 43515
+893 875 47857
+895 875 34339
+896 875 54465
+897 875 54465
+898 875 3857
+899 875 43409
+900 875 54465
+1983 875 49055
+1984 875 49055
+1985 875 51736
+1986 875 40230
+1987 875 56696
+1988 875 2422
+1989 875 16197
+1990 875 25982
+1991 875 34807
+1992 875 2422
+1993 875 16197
+1994 875 47740
+1995 875 5273
+1996 875 35987
+1997 875 2422
+1998 875 16197
+1999 875 56868
+2000 875 18164
+2001 875 38170
+2002 875 2183
+2005 875 18702
+2006 875 33501
+2007 875 26427
+2008 875 36407
+2012 875 27669
+2013 875 42468
+2014 875 35394
+2015 875 50306
+2016 875 14792
+2017 875 14792
+2018 875 27789
+2019 875 27323
+2021 875 1583
+2022 875 6586
+2023 875 44145
+2024 875 19029
+2025 875 58328
+2026 875 43536
+2027 875 29538
+2028 875 29072
+2029 875 55826
+2031 875 58161
+2032 875 25786
+2033 875 31085
+2034 875 4195
+2035 875 54432
+2036 875 10896
+2037 875 27619
+2038 875 27591
+2039 875 50163
+2040 875 21545
+2042 875 33584
+2043 875 40556
+2044 875 26997
+2045 875 5454
+2046 875 34707
+2047 875 23811
+2048 875 50681
+2049 875 37687
+2050 875 4934
+2051 875 19669
+2052 875 2924
+2054 875 29555
+2055 875 17817
+2056 875 24064
+2057 875 20117
+2058 875 58660
+2059 875 34849
+2409 875 41416
+2410 875 51253
+2411 875 1552
+2412 875 56985
+2413 875 19047
+2414 875 49616
+2415 875 21820
+2416 875 31761
+2417 875 24529
+2418 875 58769
+2419 875 26080
+2420 875 56104
+2498 875 18383
+3386 875 27852657
+776 876 1
+833 876 1
+834 876 1
+835 876 1
+836 876 1
+837 876 1
+1992 876 54601
+1993 876 54601
+1994 876 54601
+1995 876 54601
+1996 876 54601
+1997 876 54601
+1998 876 54601
+1999 876 54601
+2000 876 54601
+2001 876 43681
+2002 876 54601
+2040 876 54601
+2051 876 54601
+2052 876 32761
+2409 876 47776
+2410 876 47776
+2411 876 47776
+2412 876 30031
+2413 876 42317
+2414 876 42316
+2498 876 23888
+3387 876 27852657
+777 877 1
+2414 877 65520
+3388 877 27852657
+778 878 1
+2015 878 11191
+2016 878 11312
+2017 878 11312
+2018 878 24119
+2019 878 24119
+2021 878 45908
+2022 878 45908
+2023 878 47574
+2024 878 42843
+2025 878 46466
+2026 878 35154
+2027 878 10947
+2028 878 10947
+2029 878 10947
+2031 878 32581
+2032 878 21791
+2033 878 31670
+2034 878 40307
+2035 878 58866
+2036 878 23712
+2037 878 50838
+2038 878 50838
+2039 878 50838
+2040 878 50838
+2042 878 46809
+2043 878 58661
+2044 878 25578
+2045 878 6246
+2046 878 30510
+2047 878 6798
+2048 878 44586
+2049 878 44586
+2050 878 44586
+2051 878 44586
+2052 878 44586
+2054 878 17293
+2055 878 42096
+2056 878 48062
+2057 878 43710
+2058 878 49763
+2059 878 42965
+2409 878 21251
+2410 878 21251
+2411 878 21251
+2412 878 21251
+2413 878 21251
+2414 878 20796
+2415 878 29770
+2416 878 24903
+2417 878 37522
+2418 878 38698
+2419 878 22638
+2420 878 9487
+2498 878 30874
+3389 878 27852657
+779 879 1
+2419 879 65520
+3390 879 27852657
+780 880 1
+781 880 1
+782 880 1
+783 880 1
+784 880 1
+788 880 1
+789 880 1
+790 880 1
+791 880 1
+797 880 1
+798 880 1
+799 880 1
+807 880 1
+808 880 1
+818 880 1
+2043 880 32761
+2044 880 32761
+2045 880 32761
+2046 880 32761
+2047 880 32761
+2058 880 32761
+2419 880 24573
+3391 880 27852657
+781 881 1
+846 881 1
+2013 881 18428
+2014 881 22294
+2022 881 42209
+2029 881 31579
+2031 881 49968
+2034 881 26204
+2035 881 26204
+2036 881 26204
+2037 881 43549
+2038 881 43549
+2039 881 49393
+2040 881 33054
+2043 881 13536
+2044 881 35932
+2045 881 35932
+2046 881 62136
+2047 881 35932
+2048 881 43549
+2049 881 43549
+2050 881 49393
+2051 881 33054
+2052 881 11424
+2054 881 13536
+2055 881 35932
+2056 881 35932
+2057 881 62136
+2058 881 6343
+2059 881 35932
+2366 881 10212
+2367 881 64368
+2368 881 28627
+2369 881 64050
+2373 881 40659
+2374 881 43162
+2375 881 7421
+2376 881 64946
+2377 881 57760
+2378 881 57760
+2379 881 32637
+2380 881 32637
+2382 881 44944
+2383 881 22016
+2384 881 5590
+2385 881 6461
+2386 881 64189
+2387 881 6429
+2388 881 57874
+2389 881 57874
+2390 881 26494
+2392 881 16031
+2393 881 35705
+2394 881 53208
+2395 881 11795
+2396 881 53812
+2397 881 47383
+2398 881 38810
+2399 881 38810
+2400 881 15426
+2401 881 47571
+2403 881 9022
+2404 881 29268
+2405 881 60103
+2406 881 34297
+2407 881 54385
+2408 881 7002
+2409 881 55273
+2410 881 55273
+2411 881 38767
+2412 881 10694
+2413 881 23256
+2415 881 6832
+2416 881 15625
+2417 881 46417
+2418 881 34885
+2419 881 62938
+2420 881 55936
+2487 881 44619
+2488 881 44619
+2489 881 17963
+2490 881 33719
+2491 881 41831
+2492 881 17060
+2493 881 53947
+2494 881 62525
+2495 881 24049
+2496 881 59456
+2497 881 48295
+2498 881 33879
+2510 881 53015
+3392 881 27852657
+782 882 1
+789 882 1
+816 882 1
+847 882 1
+848 882 1
+854 882 1
+855 882 1
+881 882 2
+892 882 1
+893 882 1
+1940 882 2
+1947 882 2
+1974 882 2
+2006 882 49142
+2007 882 49142
+2013 882 49142
+2014 882 49142
+2040 882 32763
+2051 882 32761
+2052 882 32761
+2412 882 16380
+2413 882 16380
+2415 882 8191
+2416 882 8191
+2419 882 1
+2420 882 2
+2493 882 49142
+2494 882 49142
+2497 882 2
+2498 882 26620
+2510 882 16380
+3393 882 27852657
+783 883 1
+1948 883 43305
+1956 883 39667
+1963 883 61444
+1965 883 17482
+1968 883 40521
+1969 883 40521
+1970 883 40521
+1971 883 27009
+1972 883 27009
+1973 883 22932
+1974 883 22932
+1977 883 31627
+1978 883 60588
+1979 883 60588
+1980 883 35588
+1981 883 60588
+2037 883 27009
+2038 883 27009
+2039 883 22932
+2040 883 22932
+2041 883 42116
+2043 883 31627
+2044 883 60588
+2045 883 60588
+2046 883 35588
+2047 883 55655
+2058 883 60588
+2302 883 4556
+2303 883 37937
+2307 883 59640
+2308 883 59640
+2309 883 25293
+2310 883 23934
+2311 883 26184
+2312 883 26184
+2313 883 48874
+2314 883 48874
+2316 883 61283
+2317 883 35358
+2318 883 35172
+2319 883 11128
+2320 883 12941
+2321 883 52278
+2322 883 25279
+2323 883 25279
+2324 883 26844
+2326 883 25532
+2327 883 10996
+2328 883 57250
+2329 883 49579
+2330 883 59305
+2331 883 7027
+2332 883 22072
+2333 883 22072
+2334 883 23637
+2335 883 23637
+2337 883 56228
+2338 883 50449
+2339 883 10828
+2340 883 38037
+2341 883 65133
+2342 883 58106
+2398 883 2507
+2399 883 2507
+2400 883 51411
+2401 883 51411
+2402 883 41256
+2404 883 51314
+2405 883 43844
+2406 883 54606
+2407 883 52667
+2408 883 25708
+2419 883 33123
+2476 883 47616
+2477 883 47616
+2478 883 905
+2479 883 905
+2480 883 55360
+2481 883 51322
+2482 883 43561
+2483 883 49386
+2484 883 42850
+2485 883 49606
+2486 883 17521
+2497 883 6298
+2509 883 29737
+3394 883 27852657
+784 884 1
+791 884 1
+799 884 1
+808 884 1
+818 884 1
+872 884 1
+2031 884 54601
+2032 884 54601
+2042 884 32761
+2043 884 54601
+2044 884 54601
+2045 884 54601
+2046 884 54601
+2047 884 54601
+2054 884 54601
+2055 884 54601
+2056 884 54601
+2057 884 54601
+2058 884 43681
+2059 884 54601
+2415 884 47776
+2416 884 47776
+2417 884 47776
+2418 884 30031
+2419 884 42317
+2420 884 42316
+2498 884 23888
+3395 884 27852657
+785 885 1
+793 885 65520
+801 885 65519
+802 885 65520
+810 885 65519
+811 885 65519
+812 885 65520
+820 885 65519
+821 885 65519
+822 885 65519
+823 885 65520
+850 885 1
+858 885 65520
+866 885 65519
+867 885 65520
+877 885 1
+885 885 65519
+886 885 65519
+888 885 65520
+898 885 2
+899 885 1
+900 885 1
+1943 885 6
+1951 885 65515
+1959 885 65509
+1960 885 65515
+1968 885 65509
+1969 885 65509
+1970 885 65515
+1978 885 65509
+1979 885 65509
+1980 885 65509
+1981 885 65515
+2009 885 24572
+2017 885 40949
+2024 885 8
+2026 885 24572
+2031 885 30258
+2033 885 24582
+2034 885 10776
+2035 885 3780
+2036 885 44729
+2037 885 39633
+2038 885 39633
+2039 885 39633
+2040 885 39633
+2043 885 29704
+2044 885 45773
+2045 885 17352
+2046 885 52681
+2047 885 7952
+2048 885 39633
+2049 885 39633
+2050 885 39633
+2051 885 39633
+2052 885 39633
+2054 885 29704
+2055 885 29408
+2056 885 987
+2057 885 44505
+2058 885 7728
+2059 885 65291
+2373 885 60879
+2374 885 60879
+2375 885 60879
+2376 885 60879
+2377 885 49119
+2378 885 49119
+2379 885 17181
+2380 885 17181
+2382 885 35671
+2383 885 35671
+2384 885 35671
+2385 885 2053
+2386 885 48476
+2387 885 64878
+2388 885 56921
+2389 885 56921
+2390 885 56921
+2392 885 24755
+2393 885 24755
+2394 885 12296
+2395 885 62099
+2396 885 47829
+2397 885 48472
+2398 885 60502
+2399 885 60502
+2400 885 60502
+2401 885 60502
+2403 885 25634
+2404 885 59417
+2405 885 17227
+2406 885 57747
+2407 885 37803
+2408 885 54852
+2409 885 46182
+2410 885 46182
+2411 885 46182
+2412 885 46182
+2413 885 46182
+2415 885 60578
+2416 885 45543
+2417 885 6834
+2418 885 52157
+2419 885 31858
+2420 885 54812
+2487 885 51174
+2488 885 51174
+2489 885 51174
+2490 885 51174
+2491 885 51174
+2492 885 51174
+2493 885 14336
+2494 885 19958
+2495 885 22212
+2496 885 10195
+2497 885 14441
+2498 885 38346
+2510 885 42148
+3396 885 27852657
+786 886 1
+794 886 1
+795 886 1
+803 886 1
+804 886 1
+805 886 1
+813 886 1
+814 886 1
+815 886 1
+816 886 1
+878 886 1
+879 886 1
+880 886 1
+881 886 1
+882 886 1
+2037 886 32761
+2038 886 32761
+2039 886 32761
+2040 886 32761
+2041 886 32761
+2042 886 32761
+2419 886 24573
+3397 886 27852657
+787 887 1
+2419 887 65520
+3398 887 27852657
+788 888 1
+854 888 8829
+855 888 50823
+863 888 19605
+870 888 28867
+872 888 37932
+875 888 42040
+876 888 42040
+877 888 42040
+878 888 9012
+879 888 9012
+880 888 37879
+881 888 15867
+884 888 58851
+885 888 38591
+886 888 38591
+887 888 15110
+888 888 38591
+889 888 9012
+890 888 9012
+891 888 37879
+892 888 15867
+893 888 61742
+895 888 58851
+896 888 38591
+897 888 38591
+898 888 15110
+899 888 11661
+900 888 38591
+2006 888 20547
+2007 888 32389
+2008 888 59025
+2012 888 36639
+2013 888 29869
+2014 888 41711
+2015 888 25664
+2016 888 13104
+2017 888 13104
+2018 888 59774
+2019 888 59774
+2021 888 49020
+2022 888 28189
+2023 888 34671
+2024 888 2455
+2025 888 64672
+2026 888 51568
+2027 888 47606
+2028 888 47606
+2029 888 37184
+2031 888 143
+2032 888 53704
+2033 888 43721
+2034 888 14241
+2035 888 12712
+2036 888 26665
+2037 888 39411
+2038 888 39411
+2039 888 28989
+2040 888 59010
+2042 888 61177
+2043 888 3701
+2044 888 10356
+2045 888 44650
+2046 888 59032
+2047 888 32367
+2048 888 10250
+2049 888 10250
+2050 888 28636
+2051 888 28426
+2052 888 1026
+2054 888 64366
+2055 888 15565
+2056 888 60474
+2057 888 53312
+2058 888 54954
+2059 888 22587
+2409 888 3350
+2410 888 3350
+2411 888 51832
+2412 888 61666
+2413 888 26468
+2414 888 6558
+2415 888 60678
+2416 888 52680
+2417 888 35538
+2418 888 63895
+2419 888 38413
+2420 888 62837
+2498 888 10398
+3399 888 27852657
+789 889 1
+854 889 1
+863 889 65520
+893 889 65520
+2013 889 12025
+2014 889 62750
+2022 889 24380
+2029 889 13502
+2031 889 55378
+2034 889 53719
+2035 889 53719
+2036 889 53719
+2037 889 32281
+2038 889 32281
+2039 889 45783
+2040 889 44753
+2043 889 55880
+2044 889 65230
+2045 889 65230
+2046 889 53428
+2047 889 65230
+2048 889 32281
+2049 889 32281
+2050 889 45783
+2051 889 44753
+2052 889 17903
+2054 889 55880
+2055 889 65230
+2056 889 65230
+2057 889 53428
+2058 889 64939
+2059 889 65230
+2367 889 57761
+2368 889 45360
+2369 889 62047
+2373 889 33101
+2374 889 58002
+2375 889 6698
+2376 889 57160
+2377 889 10129
+2378 889 10129
+2379 889 48986
+2380 889 48986
+2382 889 44445
+2383 889 40154
+2384 889 51255
+2385 889 30719
+2386 889 57414
+2387 889 47285
+2388 889 43811
+2389 889 43811
+2390 889 16611
+2392 889 18297
+2393 889 17869
+2394 889 40479
+2395 889 498
+2396 889 55025
+2397 889 7740
+2398 889 51446
+2399 889 51446
+2400 889 24246
+2401 889 7809
+2403 889 19837
+2404 889 48154
+2405 889 44869
+2406 889 52325
+2407 889 59029
+2408 889 51289
+2409 889 57815
+2410 889 57815
+2411 889 14830
+2412 889 13570
+2413 889 31084
+2415 889 25342
+2416 889 47713
+2417 889 64262
+2418 889 16150
+2419 889 790
+2420 889 15021
+2487 889 23356
+2488 889 23356
+2489 889 9805
+2490 889 3288
+2491 889 42817
+2492 889 57663
+2493 889 25342
+2494 889 40566
+2495 889 10043
+2496 889 21806
+2497 889 60034
+2498 889 18633
+2510 889 60374
+3400 889 27852657
+790 890 1
+798 890 1
+882 890 1
+1948 890 4676
+1956 890 27729
+1963 890 28658
+1965 890 40179
+1968 890 30658
+1969 890 30658
+1970 890 30658
+1971 890 60482
+1972 890 60482
+1973 890 23619
+1974 890 23619
+1977 890 1363
+1978 890 19984
+1979 890 19984
+1980 890 50642
+1981 890 19984
+2037 890 60482
+2038 890 60482
+2039 890 23619
+2040 890 23619
+2041 890 63635
+2043 890 1363
+2044 890 19984
+2045 890 19984
+2046 890 50642
+2047 890 39968
+2058 890 19984
+2302 890 17932
+2303 890 30019
+2307 890 28284
+2308 890 28284
+2309 890 19598
+2310 890 3896
+2311 890 2974
+2312 890 2974
+2313 890 12033
+2314 890 12033
+2316 890 17075
+2317 890 27422
+2318 890 55213
+2319 890 49532
+2320 890 17667
+2321 890 14693
+2322 890 49186
+2323 890 49186
+2324 890 13854
+2326 890 6700
+2327 890 889
+2328 890 25284
+2329 890 11534
+2330 890 51011
+2331 890 36318
+2332 890 1139
+2333 890 1139
+2334 890 31328
+2335 890 31328
+2337 890 45371
+2338 890 33462
+2339 890 6338
+2340 890 41973
+2341 890 34778
+2342 890 63981
+2398 890 959
+2399 890 959
+2400 890 23218
+2401 890 23218
+2402 890 37867
+2404 890 35689
+2405 890 29428
+2406 890 48946
+2407 890 4196
+2408 890 58628
+2419 890 60169
+2476 890 45437
+2477 890 45437
+2478 890 22275
+2479 890 22275
+2480 890 33642
+2481 890 30378
+2482 890 11121
+2483 890 8228
+2484 890 18992
+2485 890 21031
+2486 890 28815
+2497 890 62432
+2509 890 3581
+3401 890 27852657
+791 891 1
+872 891 55797
+875 891 8578
+876 891 8578
+877 891 8578
+878 891 42079
+879 891 42079
+880 891 42079
+881 891 42079
+884 891 4599
+885 891 7348
+886 891 7348
+887 891 15926
+888 891 7348
+889 891 42079
+890 891 42079
+891 891 42079
+892 891 42079
+893 891 42079
+895 891 4599
+896 891 7348
+897 891 7348
+898 891 15926
+899 891 14696
+900 891 7348
+2012 891 21902
+2013 891 21902
+2014 891 21902
+2015 891 21902
+2018 891 43069
+2019 891 43069
+2021 891 36711
+2022 891 36711
+2023 891 36711
+2025 891 43406
+2026 891 43406
+2027 891 9099
+2028 891 9099
+2029 891 9099
+2031 891 4302
+2032 891 4302
+2034 891 62874
+2035 891 47206
+2036 891 3800
+2037 891 31511
+2038 891 31511
+2039 891 31511
+2040 891 31511
+2042 891 51234
+2043 891 27594
+2044 891 47847
+2045 891 62823
+2046 891 33812
+2047 891 30012
+2048 891 18625
+2049 891 18625
+2050 891 18625
+2051 891 18625
+2052 891 18625
+2054 891 48424
+2055 891 19201
+2056 891 38728
+2057 891 21611
+2058 891 11405
+2059 891 46914
+2409 891 25899
+2410 891 25899
+2411 891 25899
+2412 891 25899
+2413 891 25899
+2414 891 25899
+2416 891 58308
+2417 891 41707
+2418 891 48459
+2419 891 25652
+2420 891 9135
+2498 891 55897
+3402 891 27852657
+792 892 1
+793 892 1
+801 892 1
+810 892 1
+820 892 1
+865 892 65520
+866 892 65520
+867 892 65520
+874 892 65520
+876 892 65520
+885 892 2
+887 892 1
+888 892 1
+896 892 1
+898 892 1
+899 892 2
+900 892 1
+2024 892 28660
+2031 892 3114
+2033 892 28660
+2034 892 25855
+2035 892 15813
+2036 892 15813
+2037 892 40681
+2038 892 40681
+2039 892 40681
+2040 892 40681
+2043 892 27626
+2044 892 17280
+2045 892 43467
+2046 892 52952
+2047 892 37139
+2048 892 40681
+2049 892 40681
+2050 892 40681
+2051 892 40681
+2052 892 40681
+2054 892 43997
+2055 892 25468
+2056 892 51655
+2057 892 57040
+2058 892 21037
+2059 892 49419
+2373 892 64686
+2374 892 64686
+2375 892 64686
+2376 892 64686
+2377 892 16354
+2378 892 16354
+2379 892 1968
+2380 892 1968
+2382 892 60804
+2383 892 60804
+2384 892 60804
+2385 892 29681
+2386 892 3722
+2387 892 52889
+2388 892 9323
+2389 892 9323
+2390 892 9323
+2392 892 64973
+2393 892 64973
+2394 892 29681
+2395 892 36542
+2396 892 61719
+2397 892 8830
+2398 892 51938
+2399 892 51938
+2400 892 51938
+2401 892 51938
+2403 892 1496
+2404 892 65404
+2405 892 19510
+2406 892 865
+2407 892 28581
+2408 892 19751
+2409 892 35768
+2410 892 35768
+2411 892 35768
+2412 892 35768
+2413 892 35768
+2415 892 58711
+2416 892 33928
+2417 892 28700
+2418 892 48545
+2419 892 19621
+2420 892 14201
+2487 892 23469
+2488 892 23469
+2489 892 23469
+2490 892 23469
+2491 892 23469
+2492 892 23469
+2493 892 44017
+2494 892 56114
+2495 892 21408
+2496 892 30198
+2497 892 31155
+2498 892 15333
+2510 892 19165
+3403 892 27852657
+793 893 1
+802 893 65520
+812 893 1
+821 893 57331
+822 893 21841
+823 893 21840
+858 893 1
+867 893 65520
+877 893 1
+886 893 49141
+887 893 43682
+888 893 65520
+897 893 57331
+898 893 21841
+899 893 65520
+900 893 21840
+1851 893 41473
+1860 893 24048
+1896 893 46503
+1905 893 57025
+1913 893 10345
+1914 893 15111
+1915 893 47655
+1951 893 61299
+1960 893 46710
+1970 893 6872
+1976 893 26569
+1977 893 40544
+1978 893 30199
+1979 893 45297
+1980 893 29493
+1981 893 4755
+2017 893 65045
+2026 893 39698
+2036 893 47039
+2047 893 43793
+2055 893 26752
+2056 893 33662
+2057 893 65088
+2058 893 49575
+2059 893 10537
+2377 893 7339
+2378 893 52321
+2379 893 26338
+2380 893 26338
+2382 893 30533
+2383 893 30533
+2384 893 30533
+2385 893 55192
+2386 893 53590
+2387 893 34846
+2388 893 5668
+2389 893 5668
+2390 893 5668
+2392 893 44667
+2393 893 44667
+2394 893 12487
+2395 893 60508
+2396 893 60157
+2397 893 14169
+2398 893 6894
+2399 893 6894
+2400 893 6894
+2401 893 6894
+2403 893 7051
+2404 893 6474
+2405 893 1812
+2406 893 26667
+2407 893 10963
+2408 893 4578
+2409 893 31704
+2410 893 31704
+2411 893 31704
+2412 893 31704
+2413 893 31704
+2415 893 5274
+2416 893 30374
+2417 893 26540
+2418 893 36237
+2419 893 46462
+2420 893 27569
+2487 893 19987
+2488 893 19987
+2489 893 19987
+2490 893 19987
+2491 893 19987
+2492 893 19987
+2493 893 47431
+2494 893 43298
+2495 893 19436
+2496 893 55584
+2497 893 63587
+2498 893 17931
+2510 893 19391
+3404 893 27852657
+794 894 1
+855 894 8948
+863 894 24445
+869 894 1408
+870 894 19083
+872 894 36199
+875 894 20635
+876 894 20635
+877 894 20635
+878 894 22384
+879 894 36073
+880 894 53748
+881 894 15608
+884 894 25742
+885 894 259
+886 894 259
+887 894 20894
+888 894 259
+889 894 22384
+890 894 36073
+891 894 53748
+892 894 15608
+893 894 53742
+895 894 25742
+896 894 259
+897 894 259
+898 894 20894
+899 894 518
+900 894 259
+2007 894 4355
+2008 894 15223
+2012 894 48574
+2013 894 48574
+2014 894 52929
+2015 894 36729
+2016 894 54719
+2017 894 54719
+2018 894 60798
+2019 894 11643
+2021 894 63486
+2022 894 59737
+2023 894 36258
+2024 894 62745
+2025 894 54746
+2026 894 27
+2027 894 35550
+2028 894 23485
+2029 894 60397
+2031 894 28572
+2032 894 27559
+2033 894 11139
+2034 894 24141
+2035 894 38552
+2036 894 38525
+2037 894 20030
+2038 894 44820
+2039 894 16211
+2040 894 49455
+2042 894 59773
+2043 894 34549
+2044 894 21317
+2045 894 64826
+2046 894 22242
+2047 894 49238
+2048 894 33494
+2049 894 59546
+2050 894 33280
+2051 894 4063
+2052 894 5174
+2054 894 3829
+2055 894 2955
+2056 894 6087
+2057 894 50020
+2058 894 31757
+2059 894 48040
+2409 894 937
+2410 894 35097
+2411 894 2727
+2412 894 2727
+2413 894 13198
+2414 894 14963
+2415 894 51257
+2416 894 53714
+2417 894 64884
+2418 894 19570
+2419 894 47415
+2420 894 40935
+2498 894 57282
+3405 894 27852657
+795 895 1
+804 895 1
+805 895 1
+814 895 1
+815 895 1
+816 895 1
+860 895 1
+869 895 1
+870 895 1
+879 895 2
+880 895 2
+881 895 2
+890 895 1
+891 895 1
+892 895 1
+893 895 1
+1953 895 2
+1962 895 2
+1963 895 2
+1972 895 2
+1973 895 2
+1974 895 2
+2019 895 49142
+2028 895 49142
+2029 895 49142
+2038 895 32763
+2039 895 32763
+2040 895 32763
+2049 895 32761
+2050 895 32761
+2051 895 32761
+2052 895 32761
+2410 895 16380
+2411 895 16380
+2412 895 16380
+2413 895 16380
+2419 895 8192
+2420 895 8193
+2497 895 49144
+2498 895 39930
+2510 895 16380
+3406 895 27852657
+796 896 1
+2419 896 65520
+3407 896 27852657
+797 897 1
+862 897 1
+863 897 1
+872 897 1
+2021 897 49140
+2022 897 49140
+2031 897 49138
+2382 897 43680
+2383 897 43680
+2384 897 43680
+2392 897 65520
+2393 897 65520
+2403 897 65520
+2417 897 8191
+2418 897 8191
+2419 897 8191
+2420 897 8191
+2495 897 24570
+2496 897 60060
+2497 897 60060
+2498 897 24228
+2510 897 61425
+3408 897 27852657
+798 898 1
+2302 898 34317
+2309 898 18625
+2310 898 51451
+2311 898 13808
+2312 898 13808
+2313 898 51603
+2314 898 44573
+2316 898 6872
+2317 898 6494
+2318 898 42955
+2319 898 18851
+2320 898 15862
+2321 898 2054
+2322 898 18023
+2323 898 10147
+2324 898 10147
+2326 898 51545
+2327 898 42508
+2328 898 14751
+2329 898 61517
+2330 898 57924
+2331 898 55870
+2332 898 31727
+2333 898 26426
+2334 898 26426
+2335 898 26426
+2337 898 13925
+2338 898 58355
+2339 898 18364
+2340 898 20224
+2341 898 50442
+2342 898 60093
+2398 898 580
+2399 898 9529
+2400 898 9529
+2401 898 9529
+2402 898 18789
+2404 898 41941
+2405 898 41770
+2406 898 13629
+2407 898 42198
+2408 898 5143
+2419 898 10571
+2476 898 13037
+2477 898 47656
+2478 898 47656
+2479 898 47656
+2480 898 61951
+2481 898 46820
+2482 898 40785
+2483 898 37945
+2484 898 40276
+2485 898 21057
+2486 898 25968
+2497 898 44841
+2509 898 57187
+3409 898 27852657
+799 899 1
+800 899 9077
+801 899 9077
+802 899 9077
+809 899 9077
+810 899 9077
+811 899 18154
+812 899 9077
+819 899 9077
+820 899 9077
+821 899 18154
+822 899 18154
+823 899 9077
+857 899 36063
+858 899 36063
+865 899 45140
+866 899 15682
+867 899 45140
+872 899 19781
+874 899 45140
+875 899 30940
+876 899 40017
+877 899 60398
+884 899 63082
+885 899 48882
+886 899 1515
+887 899 16773
+888 899 21896
+895 899 54005
+896 899 39805
+897 899 48882
+898 899 64140
+899 899 16561
+900 899 3742
+2016 899 41448
+2017 899 41448
+2024 899 16400
+2025 899 57848
+2026 899 16400
+2031 899 14217
+2032 899 14217
+2033 899 16400
+2034 899 33038
+2035 899 5517
+2036 899 54638
+2042 899 14217
+2043 899 34808
+2044 899 51446
+2045 899 46010
+2046 899 59679
+2047 899 5041
+2054 899 57169
+2055 899 47677
+2056 899 42241
+2057 899 8543
+2058 899 30100
+2059 899 25059
+2415 899 34782
+2416 899 46678
+2417 899 44124
+2418 899 52275
+2419 899 62584
+2420 899 25571
+2498 899 37974
+3410 899 27852657
+800 900 1
+801 900 1
+802 900 1
+811 900 1
+821 900 1
+865 900 1
+866 900 1
+867 900 1
+876 900 1
+886 900 2
+897 900 1
+2024 900 49144
+2031 900 53425
+2033 900 36865
+2034 900 13498
+2035 900 14972
+2036 900 14972
+2037 900 36676
+2038 900 36676
+2039 900 36676
+2040 900 36676
+2043 900 787
+2044 900 34004
+2045 900 45551
+2046 900 18071
+2047 900 3099
+2048 900 36676
+2049 900 36676
+2050 900 36676
+2051 900 36676
+2052 900 36676
+2054 900 787
+2055 900 34004
+2056 900 45551
+2057 900 18071
+2058 900 6198
+2059 900 3099
+2373 900 58740
+2374 900 58740
+2375 900 58740
+2376 900 58740
+2377 900 55899
+2378 900 55899
+2379 900 16529
+2380 900 16529
+2382 900 19387
+2383 900 19387
+2384 900 19387
+2385 900 17468
+2386 900 11559
+2387 900 21181
+2388 900 51302
+2389 900 51302
+2390 900 51302
+2392 900 54978
+2393 900 54978
+2394 900 47855
+2395 900 25601
+2396 900 37463
+2397 900 16282
+2398 900 16394
+2399 900 16394
+2400 900 16394
+2401 900 16394
+2403 900 24717
+2404 900 356
+2405 900 33149
+2406 900 22526
+2407 900 36403
+2408 900 20121
+2409 900 48182
+2410 900 48182
+2411 900 48182
+2412 900 48182
+2413 900 48182
+2415 900 64006
+2416 900 37039
+2417 900 24828
+2418 900 58012
+2419 900 3915
+2420 900 49315
+2487 900 39004
+2488 900 39004
+2489 900 39004
+2490 900 39004
+2491 900 39004
+2492 900 39004
+2493 900 23585
+2494 900 53351
+2495 900 19192
+2496 900 19700
+2497 900 62176
+2498 900 19755
+2510 900 97
+3411 900 27852657
+801 901 1
+802 901 1
+812 901 65520
+818 901 24631
+819 901 35648
+820 901 35648
+821 901 22650
+822 901 16736
+823 901 16737
+888 901 15652
+896 901 43437
+897 901 4643
+898 901 2463
+899 901 46100
+900 901 47185
+2016 901 48380
+2017 901 48380
+2018 901 10860
+2019 901 10860
+2021 901 63123
+2022 901 63123
+2023 901 63123
+2024 901 62812
+2025 901 57966
+2026 901 9586
+2027 901 11457
+2028 901 11457
+2029 901 11457
+2031 901 40780
+2032 901 40780
+2033 901 61937
+2034 901 23067
+2035 901 33808
+2036 901 24222
+2037 901 9843
+2038 901 9843
+2039 901 9843
+2040 901 9843
+2042 901 56428
+2043 901 22934
+2044 901 10121
+2045 901 55671
+2046 901 43885
+2047 901 37222
+2048 901 50398
+2049 901 50398
+2050 901 50398
+2051 901 50398
+2052 901 50398
+2054 901 17642
+2055 901 40007
+2056 901 31803
+2057 901 39461
+2058 901 26888
+2059 901 5853
+2409 901 21038
+2410 901 21038
+2411 901 21038
+2412 901 21038
+2413 901 21038
+2414 901 21038
+2415 901 46054
+2416 901 9377
+2417 901 8656
+2418 901 58708
+2419 901 43414
+2420 901 60997
+2498 901 37100
+3412 901 27852657
+802 902 1
+886 902 58048
+887 902 43067
+888 902 34278
+899 902 34278
+1626 902 60996
+1634 902 33042
+1635 902 48670
+1636 902 53195
+1681 902 10054
+1691 902 43655
+1698 902 58725
+1699 902 49622
+1700 902 31226
+1701 902 4666
+1702 902 14206
+1960 902 49558
+1970 902 38666
+1981 902 35536
+2045 902 13107
+2046 902 12512
+2047 902 32045
+2058 902 42116
+2311 902 19154
+2312 902 19154
+2313 902 59343
+2314 902 59343
+2316 902 29539
+2317 902 29539
+2318 902 29539
+2319 902 39633
+2320 902 34937
+2321 902 51843
+2322 902 31528
+2323 902 31528
+2324 902 31528
+2326 902 30273
+2327 902 30273
+2328 902 3214
+2329 902 61362
+2330 902 61600
+2331 902 17015
+2332 902 17170
+2333 902 17170
+2334 902 17170
+2335 902 17170
+2337 902 20796
+2338 902 17173
+2339 902 18561
+2340 902 33926
+2341 902 19459
+2342 902 2475
+2398 902 29635
+2399 902 29635
+2400 902 29635
+2401 902 29635
+2402 902 29635
+2404 902 53309
+2405 902 11652
+2406 902 46933
+2407 902 1752
+2408 902 65428
+2419 902 20943
+2476 902 16895
+2477 902 16895
+2478 902 16895
+2479 902 16895
+2480 902 16895
+2481 902 16895
+2482 902 31939
+2483 902 5246
+2484 902 22862
+2485 902 6113
+2486 902 28642
+2497 902 4180
+2509 902 18735
+3413 902 27852657
+802 903 1
+867 903 10234
+876 903 10099
+886 903 32024
+897 903 32024
+1850 903 19221
+1851 903 19221
+1852 903 56103
+1853 903 56103
+1855 903 5114
+1856 903 5114
+1857 903 5114
+1858 903 40240
+1859 903 9875
+1860 903 56175
+1897 903 20870
+1898 903 20870
+1899 903 20870
+1901 903 36137
+1902 903 36137
+1903 903 40583
+1904 903 48282
+1905 903 4148
+1914 903 13494
+1952 903 41383
+1953 903 41383
+1954 903 41383
+1955 903 41383
+1957 903 63516
+1958 903 13984
+1959 903 61791
+1960 903 65209
+1969 903 5735
+1979 903 57762
+2018 903 23287
+2019 903 23287
+2020 903 23287
+2021 903 23287
+2022 903 23287
+2024 903 25986
+2025 903 53399
+2026 903 38715
+2035 903 16183
+2045 903 51180
+2056 903 35668
+2379 903 41388
+2380 903 41388
+2381 903 41388
+2382 903 41388
+2383 903 41388
+2384 903 41388
+2385 903 32646
+2386 903 37955
+2387 903 10681
+2396 903 27804
+2406 903 33471
+2417 903 4501
+2495 903 35102
+3414 903 27852657
+803 904 1
+813 904 1
+855 904 60958
+863 904 24227
+869 904 64113
+870 904 44387
+872 904 26087
+875 904 9388
+876 904 9388
+877 904 9388
+878 904 37694
+879 904 50622
+880 904 30896
+881 904 23989
+884 904 61987
+885 904 61511
+886 904 61511
+887 904 5378
+888 904 61511
+889 904 37693
+890 904 50622
+891 904 30896
+892 904 23989
+893 904 61145
+895 904 61987
+896 904 61511
+897 904 61511
+898 904 5378
+899 904 57501
+900 904 61511
+2007 904 4611
+2008 904 32547
+2012 904 32506
+2013 904 32506
+2014 904 37117
+2015 904 45466
+2016 904 12289
+2017 904 12289
+2018 904 48686
+2019 904 24137
+2021 904 3911
+2022 904 58903
+2023 904 63517
+2024 904 27542
+2025 904 31258
+2026 904 18969
+2027 904 24484
+2028 904 28366
+2029 904 45452
+2031 904 60300
+2032 904 25647
+2033 904 1503
+2034 904 22431
+2035 904 326
+2036 904 46878
+2037 904 818
+2038 904 605
+2039 904 17691
+2040 904 41770
+2042 904 39466
+2043 904 45820
+2044 904 34271
+2045 904 20513
+2046 904 34038
+2047 904 52681
+2048 904 9231
+2049 904 58431
+2050 904 29282
+2051 904 9868
+2052 904 42699
+2054 904 44901
+2055 904 6259
+2056 904 23304
+2057 904 60557
+2058 904 26659
+2059 904 39499
+2409 904 25529
+2410 904 32322
+2411 904 13696
+2412 904 13696
+2413 904 32967
+2414 904 29570
+2415 904 52585
+2416 904 58712
+2417 904 54970
+2418 904 18725
+2419 904 45215
+2420 904 51852
+2498 904 45864
+3415 904 27852657
+804 905 1
+814 905 1
+855 905 4563
+863 905 41294
+869 905 1408
+870 905 62827
+872 905 47134
+875 905 51672
+876 905 51672
+877 905 51672
+878 905 38875
+879 905 25947
+880 905 45672
+881 905 52579
+884 905 4202
+885 905 52764
+886 905 52764
+887 905 38915
+888 905 52764
+889 905 38875
+890 905 25946
+891 905 45672
+892 905 52579
+893 905 15423
+895 905 4202
+896 905 52764
+897 905 52764
+898 905 38915
+899 905 40007
+900 905 52764
+2007 905 60910
+2008 905 32974
+2012 905 20335
+2013 905 20335
+2014 905 15724
+2015 905 7375
+2016 905 53232
+2017 905 53232
+2018 905 6018
+2019 905 30567
+2021 905 20927
+2022 905 31456
+2023 905 26842
+2024 905 37979
+2025 905 38318
+2026 905 50607
+2027 905 53862
+2028 905 49980
+2029 905 32894
+2031 905 35899
+2032 905 5031
+2033 905 64018
+2034 905 30692
+2035 905 832
+2036 905 15746
+2037 905 3438
+2038 905 3651
+2039 905 26771
+2040 905 2692
+2042 905 62672
+2043 905 23709
+2044 905 36086
+2045 905 63870
+2046 905 56184
+2047 905 40438
+2048 905 62493
+2049 905 13293
+2050 905 42442
+2051 905 61856
+2052 905 29025
+2054 905 54466
+2055 905 44165
+2056 905 53158
+2057 905 34436
+2058 905 60636
+2059 905 20198
+2409 905 20626
+2410 905 13833
+2411 905 32459
+2412 905 32459
+2413 905 13188
+2414 905 16585
+2415 905 12936
+2416 905 46681
+2417 905 13628
+2418 905 62278
+2419 905 27865
+2420 905 15272
+2498 905 5011
+3416 905 27852657
+805 906 1
+815 906 1
+891 906 65520
+2013 906 59118
+2014 906 28853
+2022 906 62574
+2029 906 19668
+2031 906 39519
+2034 906 10084
+2035 906 10084
+2036 906 10084
+2037 906 5703
+2038 906 5703
+2039 906 49245
+2040 906 63455
+2043 906 63672
+2044 906 12888
+2045 906 12888
+2046 906 22972
+2047 906 12888
+2048 906 63534
+2049 906 63534
+2050 906 27735
+2051 906 25556
+2052 906 44795
+2054 906 63672
+2055 906 12888
+2056 906 12888
+2057 906 22972
+2058 906 25776
+2059 906 12888
+2367 906 37214
+2368 906 58708
+2369 906 64713
+2373 906 44291
+2374 906 34777
+2375 906 56271
+2376 906 54048
+2377 906 36874
+2378 906 36874
+2379 906 5151
+2380 906 5151
+2382 906 43338
+2383 906 41249
+2384 906 14476
+2385 906 39912
+2386 906 13947
+2387 906 42594
+2388 906 36951
+2389 906 36951
+2390 906 45836
+2392 906 12714
+2393 906 52288
+2394 906 12519
+2395 906 10233
+2396 906 50336
+2397 906 7742
+2398 906 26371
+2399 906 26371
+2400 906 51450
+2401 906 13424
+2403 906 27645
+2404 906 1425
+2405 906 47877
+2406 906 54884
+2407 906 23461
+2408 906 15719
+2409 906 56637
+2410 906 56637
+2411 906 61344
+2412 906 39822
+2413 906 20797
+2415 906 27701
+2416 906 18542
+2417 906 36431
+2418 906 64240
+2419 906 12092
+2420 906 63424
+2487 906 29840
+2488 906 29840
+2489 906 2867
+2490 906 34253
+2491 906 35998
+2492 906 23318
+2493 906 25837
+2494 906 13444
+2495 906 32859
+2496 906 58343
+2497 906 20495
+2498 906 54092
+2510 906 61429
+3417 906 27852657
+806 907 1
+2419 907 65520
+3418 907 27852657
+807 908 1
+1965 908 54601
+1977 908 54601
+1978 908 54601
+1979 908 54601
+1980 908 54601
+1981 908 54601
+2043 908 54601
+2044 908 54601
+2045 908 54601
+2046 908 54601
+2047 908 43681
+2058 908 54601
+2338 908 1
+2339 908 1
+2340 908 1
+2341 908 1
+2342 908 1
+2404 908 47776
+2405 908 47776
+2406 908 47776
+2407 908 30031
+2408 908 42317
+2419 908 42316
+2485 908 54601
+2486 908 32761
+2497 908 23888
+3419 908 27852657
+808 909 1
+818 909 1
+872 909 23577
+875 909 45364
+876 909 45364
+877 909 45364
+878 909 56570
+879 909 56570
+880 909 56570
+881 909 56570
+884 909 33657
+885 909 1392
+886 909 1392
+887 909 46756
+888 909 1392
+889 909 56570
+890 909 56570
+891 909 56570
+892 909 56570
+893 909 56570
+895 909 33657
+896 909 1392
+897 909 1392
+898 909 46756
+899 909 2784
+900 909 1392
+2012 909 23897
+2013 909 23897
+2014 909 23897
+2015 909 23897
+2018 909 35717
+2019 909 35717
+2021 909 34288
+2022 909 34288
+2023 909 34288
+2025 909 32105
+2026 909 32105
+2027 909 60300
+2028 909 60300
+2029 909 60300
+2031 909 16149
+2032 909 16149
+2034 909 15894
+2035 909 45584
+2036 909 13479
+2037 909 31382
+2038 909 31382
+2039 909 31382
+2040 909 31382
+2042 909 62286
+2043 909 5379
+2044 909 5719
+2045 909 37885
+2046 909 17826
+2047 909 4347
+2048 909 3794
+2049 909 3794
+2050 909 3794
+2051 909 3794
+2052 909 3794
+2054 909 13742
+2055 909 39921
+2056 909 34004
+2057 909 656
+2058 909 25904
+2059 909 21557
+2409 909 22123
+2410 909 22123
+2411 909 22123
+2412 909 22123
+2413 909 22123
+2414 909 22123
+2416 909 18297
+2417 909 58891
+2418 909 7840
+2419 909 2509
+2420 909 25451
+2498 909 39980
+3420 909 27852657
+809 910 1
+810 910 1
+811 910 1
+812 910 1
+822 910 1
+874 910 1
+885 910 65520
+886 910 65520
+888 910 65520
+896 910 65520
+897 910 65520
+898 910 65520
+899 910 65519
+900 910 65520
+1977 910 65515
+1978 910 65515
+1979 910 65515
+1980 910 65515
+1981 910 65515
+2024 910 12283
+2031 910 33143
+2033 910 24562
+2034 910 18449
+2035 910 52282
+2036 910 52282
+2037 910 36844
+2038 910 36844
+2039 910 36844
+2040 910 36844
+2043 910 12434
+2044 910 56056
+2045 910 41071
+2046 910 59553
+2047 910 64597
+2048 910 36844
+2049 910 36844
+2050 910 36844
+2051 910 36844
+2052 910 36844
+2054 910 12440
+2055 910 31490
+2056 910 16505
+2057 910 63653
+2058 910 2267
+2059 910 3185
+2373 910 45965
+2374 910 45965
+2375 910 45965
+2376 910 45965
+2377 910 1445
+2378 910 1445
+2379 910 22593
+2380 910 22593
+2382 910 5677
+2383 910 5677
+2384 910 5677
+2385 910 48053
+2386 910 38379
+2387 910 36934
+2388 910 658
+2389 910 658
+2390 910 658
+2392 910 22535
+2393 910 22535
+2394 910 17666
+2395 910 11634
+2396 910 64613
+2397 910 27679
+2398 910 39529
+2399 910 39529
+2400 910 39529
+2401 910 39529
+2403 910 39789
+2404 910 5305
+2405 910 11982
+2406 910 13883
+2407 910 45665
+2408 910 17984
+2409 910 13502
+2410 910 13502
+2411 910 13502
+2412 910 13502
+2413 910 13502
+2415 910 23510
+2416 910 11933
+2417 910 24615
+2418 910 61868
+2419 910 42761
+2420 910 51395
+2487 910 1052
+2488 910 1052
+2489 910 1052
+2490 910 1052
+2491 910 1052
+2492 910 1052
+2493 910 41936
+2494 910 11793
+2495 910 24945
+2496 910 45197
+2497 910 10455
+2498 910 40688
+2510 910 34910
+3421 910 27852657
+810 911 1
+821 911 4094
+822 911 21840
+823 911 21840
+886 911 4094
+887 911 21840
+888 911 43680
+899 911 21840
+1976 911 15277
+1977 911 61009
+1978 911 46213
+1979 911 28692
+1980 911 36777
+1981 911 36777
+2047 911 43135
+2055 911 3971
+2056 911 26938
+2057 911 13671
+2058 911 620
+2059 911 59783
+2377 911 866
+2378 911 866
+2379 911 31578
+2380 911 31578
+2382 911 64331
+2383 911 64331
+2384 911 64331
+2385 911 51480
+2386 911 36966
+2387 911 36100
+2388 911 14816
+2389 911 14816
+2390 911 14816
+2392 911 16381
+2393 911 16381
+2394 911 58199
+2395 911 30567
+2396 911 34207
+2397 911 63628
+2398 911 30829
+2399 911 30829
+2400 911 30829
+2401 911 30829
+2403 911 44611
+2404 911 32093
+2405 911 10890
+2406 911 64668
+2407 911 48946
+2408 911 8763
+2409 911 29837
+2410 911 29837
+2411 911 29837
+2412 911 29837
+2413 911 29837
+2415 911 27602
+2416 911 54015
+2417 911 41533
+2418 911 50913
+2419 911 63462
+2420 911 12005
+2487 911 3833
+2488 911 3833
+2489 911 3833
+2490 911 3833
+2491 911 3833
+2492 911 3833
+2493 911 3571
+2494 911 27115
+2495 911 35243
+2496 911 29234
+2497 911 28753
+2498 911 22648
+2510 911 13152
+3422 911 27852657
+811 912 1
+812 912 1
+821 912 61427
+822 912 43682
+823 912 43681
+886 912 61427
+887 912 43682
+888 912 21841
+899 912 43681
+1976 912 28141
+1977 912 59669
+1978 912 59669
+1979 912 42115
+1980 912 6447
+1981 912 6447
+2047 912 26139
+2055 912 25896
+2056 912 51656
+2057 912 17569
+2058 912 1025
+2059 912 46854
+2377 912 35847
+2378 912 35847
+2379 912 36847
+2380 912 36847
+2382 912 30169
+2383 912 30169
+2384 912 30169
+2385 912 49072
+2386 912 3209
+2387 912 32883
+2388 912 56375
+2389 912 56375
+2390 912 56375
+2392 912 14758
+2393 912 14758
+2394 912 62003
+2395 912 12571
+2396 912 44684
+2397 912 11801
+2398 912 14446
+2399 912 14446
+2400 912 14446
+2401 912 14446
+2403 912 10481
+2404 912 26419
+2405 912 17616
+2406 912 16122
+2407 912 40501
+2408 912 28630
+2409 912 61758
+2410 912 61758
+2411 912 61758
+2412 912 61758
+2413 912 61758
+2415 912 16057
+2416 912 28884
+2417 912 44511
+2418 912 1254
+2419 912 52269
+2420 912 12157
+2487 912 16924
+2488 912 16924
+2489 912 16924
+2490 912 16924
+2491 912 16924
+2492 912 16924
+2493 912 31308
+2494 912 58136
+2495 912 23568
+2496 912 7470
+2497 912 60252
+2498 912 55297
+2510 912 4023
+3423 912 27852657
+812 913 1
+886 913 5993
+887 913 45222
+888 913 40320
+899 913 40320
+1634 913 25737
+1635 913 60902
+1636 913 60902
+1691 913 39592
+1698 913 31882
+1699 913 43353
+1700 913 45339
+1701 913 61395
+1702 913 17184
+1970 913 10065
+1981 913 40656
+2045 913 63256
+2046 913 48089
+2047 913 28877
+2058 913 18073
+2311 913 58739
+2312 913 58739
+2313 913 17095
+2314 913 17095
+2316 913 56758
+2317 913 56758
+2318 913 56758
+2319 913 10720
+2320 913 22281
+2321 913 29063
+2322 913 34596
+2323 913 34596
+2324 913 34596
+2326 913 27925
+2327 913 27925
+2328 913 57900
+2329 913 65209
+2330 913 42657
+2331 913 17446
+2332 913 55766
+2333 913 55766
+2334 913 55766
+2335 913 55766
+2337 913 44338
+2338 913 44093
+2339 913 13637
+2340 913 64797
+2341 913 43775
+2342 913 29695
+2398 913 41987
+2399 913 41987
+2400 913 41987
+2401 913 41987
+2402 913 41987
+2404 913 58799
+2405 913 14122
+2406 913 58255
+2407 913 1175
+2408 913 9122
+2419 913 61965
+2476 913 18697
+2477 913 18697
+2478 913 18697
+2479 913 18697
+2480 913 18697
+2481 913 18697
+2482 913 54468
+2483 913 12629
+2484 913 28570
+2485 913 346
+2486 913 63758
+2497 913 24627
+2509 913 27485
+3424 913 27852657
+812 914 1
+822 914 1
+876 914 22394
+877 914 30560
+887 914 38767
+898 914 38766
+1895 914 51103
+1896 914 51103
+1897 914 28487
+1898 914 28487
+1900 914 23802
+1901 914 23802
+1902 914 23802
+1903 914 54464
+1904 914 13107
+1905 914 27525
+1906 914 10270
+1907 914 10270
+1908 914 10270
+1910 914 58306
+1911 914 58306
+1912 914 42963
+1913 914 5339
+1914 914 7814
+1915 914 45810
+1961 914 64788
+1962 914 64788
+1963 914 64788
+1964 914 64788
+1966 914 25159
+1967 914 48831
+1968 914 63733
+1969 914 16421
+1970 914 23915
+1980 914 43626
+2027 914 50232
+2028 914 50232
+2029 914 50232
+2030 914 50232
+2031 914 50232
+2033 914 14825
+2034 914 19291
+2035 914 28248
+2036 914 20311
+2046 914 56729
+2057 914 29215
+2388 914 22690
+2389 914 22690
+2390 914 22690
+2391 914 22690
+2392 914 22690
+2393 914 22690
+2394 914 43196
+2395 914 59453
+2396 914 42016
+2397 914 61007
+2407 914 27332
+2418 914 13774
+2496 914 6843
+3425 914 27852657
+813 915 1
+859 915 32360
+868 915 56453
+878 915 15806
+889 915 15805
+1658 915 18619
+1665 915 50728
+1673 915 51252
+1682 915 47286
+1692 915 47286
+1971 915 53591
+2018 915 42748
+2027 915 11101
+2037 915 19395
+2048 915 57134
+2162 915 53026
+2169 915 53026
+2177 915 6948
+2178 915 6948
+2183 915 27683
+2187 915 27683
+2192 915 27683
+2198 915 37797
+2205 915 242
+2213 915 12737
+2222 915 56344
+2223 915 56344
+2225 915 56344
+2232 915 3285
+2237 915 3285
+2243 915 12102
+2250 915 4505
+2258 915 41547
+2267 915 28810
+2277 915 41990
+2278 915 41990
+2280 915 41990
+2283 915 41990
+2292 915 26152
+2298 915 57867
+2305 915 36389
+2313 915 45539
+2322 915 32122
+2332 915 17988
+2343 915 17981
+2344 915 17981
+2346 915 17981
+2349 915 17981
+2353 915 17981
+2364 915 50955
+2371 915 32645
+2379 915 18684
+2388 915 11335
+2398 915 44420
+2409 915 46658
+2421 915 4989
+2422 915 4989
+2424 915 4989
+2427 915 4989
+2431 915 4989
+2436 915 4989
+2442 915 10726
+2449 915 14412
+2457 915 22149
+2466 915 13512
+2476 915 26674
+2487 915 7891
+2499 915 3246
+3426 915 27852657
+813 916 1
+814 916 1
+815 916 1
+818 916 5401
+819 916 64338
+820 916 64338
+821 916 64338
+822 916 64338
+823 916 64338
+888 916 53704
+896 916 14736
+897 916 36581
+898 916 19957
+899 916 15387
+900 916 26021
+2007 916 34479
+2013 916 36229
+2014 916 46247
+2015 916 26130
+2016 916 6327
+2017 916 6327
+2018 916 9907
+2019 916 56796
+2021 916 41893
+2022 916 1144
+2023 916 55650
+2024 916 40023
+2025 916 11289
+2026 916 4962
+2027 916 3315
+2028 916 64850
+2029 916 64850
+2031 916 49508
+2032 916 27096
+2033 916 53820
+2034 916 52303
+2035 916 5571
+2036 916 609
+2037 916 11010
+2038 916 10773
+2039 916 10773
+2040 916 62540
+2042 916 31873
+2043 916 52976
+2044 916 39968
+2045 916 22781
+2046 916 38906
+2047 916 10079
+2048 916 54414
+2049 916 65382
+2050 916 65382
+2051 916 46399
+2052 916 43678
+2054 916 15159
+2055 916 21366
+2056 916 45749
+2057 916 41289
+2058 916 8017
+2059 916 43310
+2409 916 57203
+2410 916 13179
+2411 916 13179
+2412 916 46742
+2413 916 51306
+2414 916 46029
+2415 916 18161
+2416 916 2763
+2417 916 27858
+2418 916 39229
+2419 916 40243
+2420 916 38090
+2498 916 15558
+3427 916 27852657
+814 917 1
+860 917 32360
+869 917 56453
+879 917 15806
+890 917 15805
+1659 917 18619
+1666 917 50728
+1674 917 51252
+1683 917 47286
+1693 917 47286
+1972 917 53591
+2019 917 42748
+2028 917 11101
+2038 917 19395
+2049 917 57134
+2163 917 53026
+2170 917 53026
+2178 917 6948
+2179 917 6948
+2184 917 27683
+2188 917 27683
+2193 917 27683
+2199 917 37797
+2206 917 242
+2214 917 12737
+2223 917 56344
+2224 917 56344
+2226 917 56344
+2233 917 3285
+2238 917 3285
+2244 917 12102
+2251 917 4505
+2259 917 41547
+2268 917 28810
+2278 917 41990
+2279 917 41990
+2281 917 41990
+2284 917 41990
+2293 917 26152
+2299 917 57867
+2306 917 36389
+2314 917 45539
+2323 917 32122
+2333 917 17988
+2344 917 17981
+2345 917 17981
+2347 917 17981
+2350 917 17981
+2354 917 17981
+2365 917 50955
+2372 917 32645
+2380 917 18684
+2389 917 11335
+2399 917 44420
+2410 917 46658
+2422 917 4989
+2423 917 4989
+2425 917 4989
+2428 917 4989
+2432 917 4989
+2437 917 4989
+2443 917 10726
+2450 917 14412
+2458 917 22149
+2467 917 13512
+2477 917 26674
+2488 917 7891
+2500 917 3246
+3428 917 27852657
+814 918 1
+819 918 24493
+820 918 3748
+821 918 43011
+822 918 4674
+823 918 4674
+888 918 33024
+897 918 28385
+898 918 3931
+899 918 23950
+900 918 61121
+2007 918 55034
+2014 918 44058
+2015 918 49828
+2016 918 5773
+2017 918 5773
+2018 918 42582
+2019 918 38054
+2021 918 5352
+2022 918 39632
+2023 918 50225
+2024 918 29758
+2025 918 10456
+2026 918 4683
+2027 918 63066
+2028 918 50988
+2029 918 61373
+2031 918 7082
+2032 918 18153
+2033 918 7683
+2034 918 15845
+2035 918 21184
+2036 918 16501
+2037 918 18274
+2038 918 13764
+2039 918 8985
+2040 918 8985
+2042 918 63098
+2043 918 18544
+2044 918 6995
+2045 918 32159
+2046 918 55703
+2047 918 14240
+2048 918 57270
+2049 918 8148
+2050 918 45460
+2051 918 45460
+2052 918 7162
+2054 918 55468
+2055 918 5201
+2056 918 42450
+2057 918 55866
+2058 918 12829
+2059 918 37962
+2409 918 4094
+2410 918 22162
+2411 918 57279
+2412 918 57279
+2413 918 3406
+2414 918 55486
+2415 918 59374
+2416 918 37265
+2417 918 64555
+2418 918 18061
+2419 918 30495
+2420 918 52533
+2498 918 49879
+3429 918 27852657
+815 919 1
+861 919 32360
+870 919 56453
+880 919 15806
+891 919 15805
+1660 919 18619
+1667 919 50728
+1675 919 51252
+1684 919 47286
+1694 919 47286
+1973 919 53591
+2020 919 42748
+2029 919 11101
+2039 919 19395
+2050 919 57134
+2164 919 53026
+2171 919 53026
+2180 919 6948
+2181 919 6948
+2185 919 27683
+2189 919 27683
+2194 919 27683
+2200 919 37797
+2207 919 242
+2215 919 12737
+2225 919 56344
+2226 919 56344
+2227 919 56344
+2234 919 3285
+2239 919 3285
+2245 919 12102
+2252 919 4505
+2260 919 41547
+2269 919 28810
+2280 919 41990
+2281 919 41990
+2282 919 41990
+2285 919 41990
+2294 919 26152
+2300 919 57867
+2307 919 36389
+2315 919 45539
+2324 919 32122
+2334 919 17988
+2346 919 17981
+2347 919 17981
+2348 919 17981
+2351 919 17981
+2355 919 17981
+2366 919 50955
+2373 919 32645
+2381 919 18684
+2390 919 11335
+2400 919 44420
+2411 919 46658
+2424 919 4989
+2425 919 4989
+2426 919 4989
+2429 919 4989
+2433 919 4989
+2438 919 4989
+2444 919 10726
+2451 919 14412
+2459 919 22149
+2468 919 13512
+2478 919 26674
+2489 919 7891
+2501 919 3246
+3430 919 27852657
+815 920 1
+819 920 5661
+820 920 52649
+821 920 48296
+822 920 13971
+823 920 13971
+888 920 11795
+897 920 56712
+898 920 20357
+899 920 9009
+900 920 11185
+2007 920 44686
+2013 920 36229
+2014 920 54735
+2015 920 41202
+2016 920 38198
+2017 920 38198
+2018 920 63921
+2019 920 60074
+2021 920 32072
+2022 920 33607
+2023 920 23281
+2024 920 48652
+2025 920 21854
+2026 920 49177
+2027 920 59920
+2028 920 23474
+2029 920 13089
+2031 920 39402
+2032 920 30310
+2033 920 17276
+2034 920 59468
+2035 920 57307
+2036 920 8130
+2037 920 39834
+2038 920 9131
+2039 920 13910
+2040 920 156
+2042 920 58818
+2043 920 41771
+2044 920 25191
+2045 920 47375
+2046 920 12526
+2047 920 9642
+2048 920 31074
+2049 920 18794
+2050 920 47003
+2051 920 28020
+2052 920 521
+2054 920 30725
+2055 920 61641
+2056 920 14513
+2057 920 46984
+2058 920 32892
+2059 920 53996
+2409 920 21976
+2410 920 536
+2411 920 30940
+2412 920 64503
+2413 920 36125
+2414 920 6493
+2415 920 25945
+2416 920 48506
+2417 920 62973
+2418 920 38991
+2419 920 25894
+2420 920 58952
+2498 920 28426
+3431 920 27852657
+816 921 1
+862 921 32360
+871 921 56453
+881 921 15806
+892 921 15805
+1661 921 18619
+1668 921 50728
+1676 921 51252
+1685 921 47286
+1695 921 47286
+1974 921 53591
+2021 921 42748
+2030 921 11101
+2040 921 19395
+2051 921 57134
+2165 921 53026
+2172 921 53026
+2183 921 6948
+2184 921 6948
+2186 921 27683
+2190 921 27683
+2195 921 27683
+2201 921 37797
+2208 921 242
+2216 921 12737
+2228 921 56344
+2229 921 56344
+2230 921 56344
+2235 921 3285
+2240 921 3285
+2246 921 12102
+2253 921 4505
+2261 921 41547
+2270 921 28810
+2283 921 41990
+2284 921 41990
+2285 921 41990
+2286 921 41990
+2295 921 26152
+2301 921 57867
+2308 921 36389
+2316 921 45539
+2325 921 32122
+2335 921 17988
+2349 921 17981
+2350 921 17981
+2351 921 17981
+2352 921 17981
+2356 921 17981
+2367 921 50955
+2374 921 32645
+2382 921 18684
+2391 921 11335
+2401 921 44420
+2412 921 46658
+2427 921 4989
+2428 921 4989
+2429 921 4989
+2430 921 4989
+2434 921 4989
+2439 921 4989
+2445 921 10726
+2452 921 14412
+2460 921 22149
+2469 921 13512
+2479 921 26674
+2490 921 7891
+2502 921 3246
+3432 921 27852657
+816 922 1
+854 922 9853
+855 922 20114
+863 922 59101
+870 922 45901
+872 922 10525
+875 922 29266
+876 922 29266
+877 922 29266
+878 922 64835
+879 922 64835
+880 922 45215
+881 922 13457
+884 922 11904
+885 922 59606
+886 922 59606
+887 922 23351
+888 922 59606
+889 922 64835
+890 922 64835
+891 922 45215
+892 922 13456
+893 922 59192
+895 922 11904
+896 922 59606
+897 922 59606
+898 922 23351
+899 922 53691
+900 922 59606
+2006 922 49883
+2007 922 40591
+2008 922 25795
+2012 922 14299
+2013 922 56394
+2014 922 47102
+2015 922 6120
+2016 922 29473
+2017 922 29473
+2018 922 21576
+2019 922 21576
+2021 922 12982
+2022 922 9276
+2023 922 62390
+2024 922 31418
+2025 922 17463
+2026 922 53511
+2027 922 28060
+2028 922 28060
+2029 922 28938
+2031 922 24859
+2032 922 17629
+2033 922 47489
+2034 922 45768
+2035 922 41310
+2036 922 53320
+2037 922 49817
+2038 922 49817
+2039 922 50695
+2040 922 55277
+2042 922 2519
+2043 922 53392
+2044 922 1283
+2045 922 51867
+2046 922 17662
+2047 922 29863
+2048 922 5010
+2049 922 5010
+2050 922 544
+2051 922 38590
+2052 922 58441
+2054 922 63039
+2055 922 45839
+2056 922 31310
+2057 922 47584
+2058 922 10065
+2059 922 45723
+2409 922 57173
+2410 922 57173
+2411 922 34442
+2412 922 39673
+2413 922 15105
+2414 922 33200
+2415 922 31707
+2416 922 49289
+2417 922 57343
+2418 922 37704
+2419 922 39967
+2420 922 54936
+2498 922 35488
+3433 922 27852657
+817 923 1
+863 923 32360
+872 923 56453
+882 923 15806
+893 923 15805
+1662 923 18619
+1669 923 50728
+1677 923 51252
+1686 923 47286
+1696 923 47286
+1975 923 53591
+2022 923 42748
+2031 923 11101
+2041 923 19395
+2052 923 57134
+2166 923 53026
+2173 923 53026
+2187 923 6948
+2188 923 6948
+2190 923 27683
+2191 923 27683
+2196 923 27683
+2202 923 37797
+2209 923 242
+2217 923 12737
+2232 923 56344
+2233 923 56344
+2234 923 56344
+2236 923 3285
+2241 923 3285
+2247 923 12102
+2254 923 4505
+2262 923 41547
+2271 923 28810
+2287 923 41990
+2288 923 41990
+2289 923 41990
+2290 923 41990
+2296 923 26152
+2302 923 57867
+2309 923 36389
+2317 923 45539
+2326 923 32122
+2336 923 17988
+2353 923 17981
+2354 923 17981
+2355 923 17981
+2356 923 17981
+2357 923 17981
+2368 923 50955
+2375 923 32645
+2383 923 18684
+2392 923 11335
+2402 923 44420
+2413 923 46658
+2431 923 4989
+2432 923 4989
+2433 923 4989
+2434 923 4989
+2435 923 4989
+2440 923 4989
+2446 923 10726
+2453 923 14412
+2461 923 22149
+2470 923 13512
+2480 923 26674
+2491 923 7891
+2503 923 3246
+3434 923 27852657
+817 924 1
+2419 924 65520
+3435 924 27852657
+818 925 1
+864 925 32360
+873 925 56453
+883 925 15806
+894 925 15805
+1663 925 18619
+1670 925 50728
+1678 925 51252
+1687 925 47286
+1697 925 47286
+1976 925 53591
+2023 925 42748
+2032 925 11101
+2042 925 19395
+2053 925 57134
+2167 925 53026
+2174 925 53026
+2192 925 6948
+2193 925 6948
+2195 925 27683
+2196 925 27683
+2197 925 27683
+2203 925 37797
+2210 925 242
+2218 925 12737
+2237 925 56344
+2238 925 56344
+2239 925 56344
+2241 925 3285
+2242 925 3285
+2248 925 12102
+2255 925 4505
+2263 925 41547
+2272 925 28810
+2292 925 41990
+2293 925 41990
+2294 925 41990
+2295 925 41990
+2297 925 26152
+2303 925 57867
+2310 925 36389
+2318 925 45539
+2327 925 32122
+2337 925 17988
+2358 925 17981
+2359 925 17981
+2360 925 17981
+2361 925 17981
+2362 925 17981
+2369 925 50955
+2376 925 32645
+2384 925 18684
+2393 925 11335
+2403 925 44420
+2414 925 46658
+2436 925 4989
+2437 925 4989
+2438 925 4989
+2439 925 4989
+2440 925 4989
+2441 925 4989
+2447 925 10726
+2454 925 14412
+2462 925 22149
+2471 925 13512
+2481 925 26674
+2492 925 7891
+2504 925 3246
+3436 925 27852657
+818 926 1
+819 926 8550
+820 926 46662
+821 926 24909
+822 926 24248
+823 926 24248
+888 926 226
+897 926 50239
+898 926 3817
+899 926 25415
+900 926 49437
+2016 926 36940
+2017 926 36940
+2018 926 18261
+2019 926 18261
+2021 926 26143
+2022 926 26143
+2023 926 26143
+2024 926 29777
+2025 926 37323
+2026 926 383
+2027 926 16025
+2028 926 16025
+2029 926 16025
+2031 926 35106
+2032 926 35106
+2033 926 46994
+2034 926 63319
+2035 926 48395
+2036 926 48012
+2037 926 4949
+2038 926 4949
+2039 926 4949
+2040 926 4949
+2042 926 49649
+2043 926 24956
+2044 926 43993
+2045 926 31659
+2046 926 45429
+2047 926 55829
+2048 926 33594
+2049 926 33594
+2050 926 33594
+2051 926 33594
+2052 926 33594
+2054 926 47708
+2055 926 19185
+2056 926 16063
+2057 926 55255
+2058 926 61852
+2059 926 27244
+2409 926 10651
+2410 926 10651
+2411 926 10651
+2412 926 10651
+2413 926 10651
+2414 926 10651
+2415 926 8832
+2416 926 42979
+2417 926 51802
+2418 926 31688
+2419 926 6548
+2420 926 63951
+2498 926 40549
+3437 926 27852657
+819 927 1
+865 927 32360
+874 927 56453
+884 927 15806
+895 927 15805
+1664 927 18619
+1671 927 50728
+1679 927 51252
+1688 927 47286
+1698 927 47286
+1977 927 53591
+2024 927 42748
+2033 927 11101
+2043 927 19395
+2054 927 57134
+2168 927 53026
+2175 927 53026
+2198 927 6948
+2199 927 6948
+2201 927 27683
+2202 927 27683
+2203 927 27683
+2204 927 37797
+2211 927 242
+2219 927 12737
+2243 927 56344
+2244 927 56344
+2245 927 56344
+2247 927 3285
+2248 927 3285
+2249 927 12102
+2256 927 4505
+2264 927 41547
+2273 927 28810
+2298 927 41990
+2299 927 41990
+2300 927 41990
+2301 927 41990
+2303 927 26152
+2304 927 57867
+2311 927 36389
+2319 927 45539
+2328 927 32122
+2338 927 17988
+2364 927 17981
+2365 927 17981
+2366 927 17981
+2367 927 17981
+2368 927 17981
+2370 927 50955
+2377 927 32645
+2385 927 18684
+2394 927 11335
+2404 927 44420
+2415 927 46658
+2442 927 4989
+2443 927 4989
+2444 927 4989
+2445 927 4989
+2446 927 4989
+2447 927 4989
+2448 927 10726
+2455 927 14412
+2463 927 22149
+2472 927 13512
+2482 927 26674
+2493 927 7891
+2505 927 3246
+3438 927 27852657
+819 928 1
+885 928 31400
+886 928 60670
+887 928 18324
+888 928 19992
+899 928 19992
+1950 928 36935
+1951 928 36935
+1952 928 65172
+1953 928 65172
+1955 928 55824
+1956 928 55824
+1957 928 55824
+1958 928 62582
+1959 928 2673
+1960 928 31259
+1961 928 59560
+1962 928 59560
+1963 928 59560
+1965 928 17220
+1966 928 17220
+1967 928 19347
+1968 928 43931
+1969 928 63058
+1970 928 31799
+1971 928 37856
+1972 928 37856
+1973 928 37856
+1974 928 37856
+1976 928 4532
+1977 928 64459
+1978 928 63685
+1979 928 21743
+1980 928 16337
+1981 928 50059
+2037 928 6839
+2038 928 6839
+2039 928 6839
+2040 928 6839
+2041 928 6839
+2043 928 51252
+2044 928 31687
+2045 928 29883
+2046 928 45441
+2047 928 42273
+2058 928 37368
+2398 928 63771
+2399 928 63771
+2400 928 63771
+2401 928 63771
+2402 928 63771
+2403 928 63771
+2404 928 15775
+2405 928 58935
+2406 928 14546
+2407 928 11474
+2408 928 1495
+2419 928 62575
+2497 928 63496
+3439 928 27852657
+820 929 1
+866 929 32360
+875 929 56453
+885 929 15806
+896 929 15805
+1671 929 18619
+1672 929 50728
+1680 929 51252
+1689 929 47286
+1699 929 47286
+1978 929 53591
+2025 929 42748
+2034 929 11101
+2044 929 19395
+2055 929 57134
+2175 929 53026
+2176 929 53026
+2205 929 6948
+2206 929 6948
+2208 929 27683
+2209 929 27683
+2210 929 27683
+2211 929 37797
+2212 929 242
+2220 929 12737
+2250 929 56344
+2251 929 56344
+2252 929 56344
+2254 929 3285
+2255 929 3285
+2256 929 12102
+2257 929 4505
+2265 929 41547
+2274 929 28810
+2305 929 41990
+2306 929 41990
+2307 929 41990
+2308 929 41990
+2310 929 26152
+2311 929 57867
+2312 929 36389
+2320 929 45539
+2329 929 32122
+2339 929 17988
+2371 929 17981
+2372 929 17981
+2373 929 17981
+2374 929 17981
+2375 929 17981
+2377 929 50955
+2378 929 32645
+2386 929 18684
+2395 929 11335
+2405 929 44420
+2416 929 46658
+2449 929 4989
+2450 929 4989
+2451 929 4989
+2452 929 4989
+2453 929 4989
+2454 929 4989
+2455 929 10726
+2456 929 14412
+2464 929 22149
+2473 929 13512
+2483 929 26674
+2494 929 7891
+2506 929 3246
+3440 929 27852657
+820 930 1
+885 930 1
+886 930 32894
+887 930 24863
+888 930 60253
+899 930 60253
+1950 930 24727
+1951 930 24727
+1952 930 15425
+1953 930 15425
+1955 930 11569
+1956 930 11569
+1957 930 11569
+1958 930 60875
+1959 930 8325
+1960 930 49119
+1961 930 45685
+1962 930 45685
+1963 930 45685
+1965 930 47868
+1966 930 47868
+1967 930 5660
+1968 930 24060
+1969 930 29208
+1970 930 45610
+1971 930 14252
+1972 930 14252
+1973 930 14252
+1974 930 14252
+1976 930 53793
+1977 930 51075
+1978 930 6901
+1979 930 3375
+1980 930 29807
+1981 930 49718
+2037 930 14448
+2038 930 14448
+2039 930 14448
+2040 930 14448
+2041 930 14448
+2043 930 33811
+2044 930 39419
+2045 930 54976
+2046 930 8400
+2047 930 41466
+2058 930 64428
+2398 930 29097
+2399 930 29097
+2400 930 29097
+2401 930 29097
+2402 930 29097
+2403 930 29097
+2404 930 46540
+2405 930 15791
+2406 930 29058
+2407 930 54944
+2408 930 40389
+2419 930 50739
+2497 930 43063
+3441 930 27852657
+821 931 1
+867 931 32360
+876 931 56453
+886 931 15806
+897 931 15805
+1679 931 18619
+1680 931 50728
+1681 931 51252
+1690 931 47286
+1700 931 47286
+1979 931 53591
+2026 931 42748
+2035 931 11101
+2045 931 19395
+2056 931 57134
+2211 931 53026
+2212 931 53026
+2213 931 6948
+2214 931 6948
+2216 931 27683
+2217 931 27683
+2218 931 27683
+2219 931 37797
+2220 931 242
+2221 931 12737
+2258 931 56344
+2259 931 56344
+2260 931 56344
+2262 931 3285
+2263 931 3285
+2264 931 12102
+2265 931 4505
+2266 931 41547
+2275 931 28810
+2313 931 41990
+2314 931 41990
+2315 931 41990
+2316 931 41990
+2318 931 26152
+2319 931 57867
+2320 931 36389
+2321 931 45539
+2330 931 32122
+2340 931 17988
+2379 931 17981
+2380 931 17981
+2381 931 17981
+2382 931 17981
+2383 931 17981
+2385 931 50955
+2386 931 32645
+2387 931 18684
+2396 931 11335
+2406 931 44420
+2417 931 46658
+2457 931 4989
+2458 931 4989
+2459 931 4989
+2460 931 4989
+2461 931 4989
+2462 931 4989
+2463 931 10726
+2464 931 14412
+2465 931 22149
+2474 931 13512
+2484 931 26674
+2495 931 7891
+2507 931 3246
+3442 931 27852657
+821 932 1
+886 932 10234
+887 932 10099
+888 932 32024
+899 932 32024
+1950 932 19221
+1951 932 19221
+1952 932 56103
+1953 932 56103
+1955 932 5114
+1956 932 5114
+1957 932 5114
+1958 932 40240
+1959 932 9875
+1960 932 56175
+1961 932 20870
+1962 932 20870
+1963 932 20870
+1965 932 36137
+1966 932 36137
+1967 932 40583
+1968 932 48282
+1969 932 4148
+1970 932 13494
+1971 932 41383
+1972 932 41383
+1973 932 41383
+1974 932 41383
+1976 932 63516
+1977 932 13984
+1978 932 61791
+1979 932 65209
+1980 932 5735
+1981 932 57762
+2037 932 23287
+2038 932 23287
+2039 932 23287
+2040 932 23287
+2041 932 23287
+2043 932 25986
+2044 932 53399
+2045 932 38715
+2046 932 16183
+2047 932 51180
+2058 932 35668
+2398 932 41388
+2399 932 41388
+2400 932 41388
+2401 932 41388
+2402 932 41388
+2403 932 41388
+2404 932 32646
+2405 932 37955
+2406 932 10681
+2407 932 27804
+2408 932 33471
+2419 932 4501
+2497 932 35102
+3443 932 27852657
+822 933 1
+876 933 32360
+877 933 56453
+887 933 15806
+898 933 15805
+1688 933 18619
+1689 933 50728
+1690 933 51252
+1691 933 47286
+1701 933 47286
+1980 933 53591
+2035 933 42748
+2036 933 11101
+2046 933 19395
+2057 933 57134
+2256 933 53026
+2257 933 53026
+2258 933 6948
+2259 933 6948
+2261 933 27683
+2262 933 27683
+2263 933 27683
+2264 933 37797
+2265 933 242
+2266 933 12737
+2267 933 56344
+2268 933 56344
+2269 933 56344
+2271 933 3285
+2272 933 3285
+2273 933 12102
+2274 933 4505
+2275 933 41547
+2276 933 28810
+2322 933 41990
+2323 933 41990
+2324 933 41990
+2325 933 41990
+2327 933 26152
+2328 933 57867
+2329 933 36389
+2330 933 45539
+2331 933 32122
+2341 933 17988
+2388 933 17981
+2389 933 17981
+2390 933 17981
+2391 933 17981
+2392 933 17981
+2394 933 50955
+2395 933 32645
+2396 933 18684
+2397 933 11335
+2407 933 44420
+2418 933 46658
+2466 933 4989
+2467 933 4989
+2468 933 4989
+2469 933 4989
+2470 933 4989
+2471 933 4989
+2472 933 10726
+2473 933 14412
+2474 933 22149
+2475 933 13512
+2485 933 26674
+2496 933 7891
+2508 933 3246
+3444 933 27852657
+822 934 1
+823 934 1
+886 934 22394
+887 934 30560
+888 934 38767
+899 934 38766
+1950 934 51103
+1951 934 51103
+1952 934 28487
+1953 934 28487
+1955 934 23802
+1956 934 23802
+1957 934 23802
+1958 934 54464
+1959 934 13107
+1960 934 27525
+1961 934 10270
+1962 934 10270
+1963 934 10270
+1965 934 58306
+1966 934 58306
+1967 934 42963
+1968 934 5339
+1969 934 7814
+1970 934 45810
+1971 934 64788
+1972 934 64788
+1973 934 64788
+1974 934 64788
+1976 934 25159
+1977 934 48831
+1978 934 63733
+1979 934 16421
+1980 934 23915
+1981 934 43626
+2037 934 50232
+2038 934 50232
+2039 934 50232
+2040 934 50232
+2041 934 50232
+2043 934 14825
+2044 934 19291
+2045 934 28248
+2046 934 20311
+2047 934 56729
+2058 934 29215
+2398 934 22690
+2399 934 22690
+2400 934 22690
+2401 934 22690
+2402 934 22690
+2403 934 22690
+2404 934 43196
+2405 934 59453
+2406 934 42016
+2407 934 61007
+2408 934 27332
+2419 934 13774
+2497 934 6843
+3445 934 27852657
+823 935 1
+886 935 32360
+887 935 56453
+888 935 15806
+899 935 15805
+1698 935 18619
+1699 935 50728
+1700 935 51252
+1701 935 47286
+1702 935 47286
+1981 935 53591
+2045 935 42748
+2046 935 11101
+2047 935 19395
+2058 935 57134
+2311 935 53026
+2312 935 53026
+2313 935 6948
+2314 935 6948
+2316 935 27683
+2317 935 27683
+2318 935 27683
+2319 935 37797
+2320 935 242
+2321 935 12737
+2322 935 56344
+2323 935 56344
+2324 935 56344
+2326 935 3285
+2327 935 3285
+2328 935 12102
+2329 935 4505
+2330 935 41547
+2331 935 28810
+2332 935 41990
+2333 935 41990
+2334 935 41990
+2335 935 41990
+2337 935 26152
+2338 935 57867
+2339 935 36389
+2340 935 45539
+2341 935 32122
+2342 935 17988
+2398 935 17981
+2399 935 17981
+2400 935 17981
+2401 935 17981
+2402 935 17981
+2404 935 50955
+2405 935 32645
+2406 935 18684
+2407 935 11335
+2408 935 44420
+2419 935 46658
+2476 935 4989
+2477 935 4989
+2478 935 4989
+2479 935 4989
+2480 935 4989
+2481 935 4989
+2482 935 10726
+2483 935 14412
+2484 935 22149
+2485 935 13512
+2486 935 26674
+2497 935 7891
+2509 935 3246
+3446 935 27852657
+824 936 1
+825 936 1
+828 936 65520
+832 936 1
+835 936 38920
+836 936 53132
+837 936 53131
+870 936 26090
+872 936 35488
+875 936 4272
+876 936 4272
+877 936 4272
+878 936 62057
+879 936 62057
+880 936 22626
+881 936 36172
+884 936 49168
+885 936 50994
+886 936 50994
+887 936 55266
+888 936 50994
+889 936 62057
+890 936 62057
+891 936 22626
+892 936 36172
+893 936 36172
+895 936 49168
+896 936 50994
+897 936 50994
+898 936 55266
+899 936 36467
+900 936 50994
+1983 936 4749
+1984 936 4749
+1985 936 63763
+1986 936 55198
+1987 936 50449
+1988 936 51592
+1989 936 18479
+1990 936 43907
+1991 936 58979
+1992 936 51592
+1993 936 18479
+1994 936 11605
+1995 936 20756
+1996 936 27298
+1997 936 51592
+1998 936 18479
+1999 936 11540
+2000 936 32228
+2001 936 26785
+2002 936 65008
+2005 936 47170
+2006 936 30347
+2007 936 51168
+2008 936 9841
+2012 936 57477
+2013 936 40654
+2014 936 61475
+2015 936 40969
+2016 936 26238
+2017 936 26238
+2018 936 46938
+2019 936 23695
+2021 936 21364
+2022 936 42185
+2023 936 4856
+2024 936 37775
+2025 936 58555
+2026 936 32317
+2027 936 23122
+2028 936 65400
+2029 936 10323
+2031 936 17988
+2032 936 27829
+2033 936 37710
+2034 936 54681
+2035 936 32236
+2036 936 65440
+2037 936 10953
+2038 936 53231
+2039 936 63675
+2040 936 14806
+2042 936 10132
+2043 936 5113
+2044 936 64181
+2045 936 37384
+2046 936 11762
+2047 936 11843
+2048 936 18082
+2049 936 55794
+2050 936 43272
+2051 936 63575
+2052 936 46113
+2054 936 52087
+2055 936 48126
+2056 936 63124
+2057 936 22566
+2058 936 29060
+2059 936 17217
+2409 936 7635
+2410 936 45623
+2411 936 11333
+2412 936 12192
+2413 936 46271
+2414 936 11934
+2415 936 37742
+2416 936 15814
+2417 936 36828
+2418 936 4073
+2419 936 6274
+2420 936 55966
+2498 936 64803
+3447 936 27852657
+825 937 1
+852 937 24057
+860 937 12976
+869 937 11399
+879 937 37016
+890 937 37016
+1765 937 26048
+1792 937 46388
+1797 937 43950
+1803 937 51296
+1810 937 51296
+1817 937 41602
+1818 937 42448
+1823 937 29843
+1827 937 19040
+1832 937 30820
+1838 937 1958
+1845 937 42312
+1853 937 56537
+1862 937 45962
+1863 937 31548
+1865 937 1116
+1872 937 31003
+1877 937 40369
+1883 937 54244
+1890 937 13407
+1898 937 26881
+1907 937 35865
+1917 937 7473
+1918 937 34498
+1920 937 33589
+1923 937 33589
+1932 937 16837
+1938 937 9756
+1945 937 23986
+1953 937 32251
+1962 937 43750
+1972 937 7885
+1983 937 9630
+1984 937 13707
+1986 937 62827
+1989 937 62827
+1993 937 22575
+2004 937 45660
+2011 937 62282
+2019 937 47785
+2028 937 10344
+2038 937 40070
+2049 937 8929
+2344 937 24502
+2345 937 22358
+2347 937 35520
+2350 937 35520
+2354 937 24632
+2359 937 4113
+2365 937 38518
+2372 937 56275
+2380 937 15069
+2389 937 7201
+2399 937 33560
+2410 937 11882
+2488 937 15745
+3448 937 27852657
+826 938 1
+835 938 4605
+836 938 42704
+837 938 42704
+870 938 3574
+872 938 25902
+875 938 6722
+876 938 6722
+877 938 6722
+878 938 26451
+879 938 26451
+880 938 30025
+881 938 41612
+884 938 6937
+885 938 64227
+886 938 64227
+887 938 5428
+888 938 64227
+889 938 26451
+890 938 26451
+891 938 30025
+892 938 41612
+893 938 41612
+895 938 6937
+896 938 64227
+897 938 64227
+898 938 5428
+899 938 62933
+900 938 64227
+1983 938 34286
+1984 938 34286
+1985 938 6262
+1986 938 47632
+1987 938 13346
+1988 938 17482
+1989 938 25999
+1990 938 18243
+1991 938 4897
+1992 938 17482
+1993 938 25999
+1994 938 31614
+1995 938 4844
+1996 938 65468
+1997 938 17482
+1998 938 25999
+1999 938 31297
+2000 938 56760
+2001 938 2360
+2002 938 2413
+2005 938 3241
+2006 938 17966
+2007 938 26771
+2008 938 61098
+2012 938 24275
+2013 938 39000
+2014 938 47805
+2015 938 25416
+2016 938 16071
+2017 938 16071
+2018 938 31342
+2019 938 19769
+2021 938 365
+2022 938 9170
+2023 938 1506
+2024 938 2783
+2025 938 8364
+2026 938 57814
+2027 938 33131
+2028 938 21558
+2029 938 20341
+2031 938 16157
+2032 938 11734
+2033 938 2466
+2034 938 2575
+2035 938 59435
+2036 938 1621
+2037 938 57449
+2038 938 45876
+2039 938 44659
+2040 938 21767
+2042 938 50421
+2043 938 44088
+2044 938 64026
+2045 938 58333
+2046 938 33170
+2047 938 31549
+2048 938 58534
+2049 938 36904
+2050 938 51056
+2051 938 23182
+2052 938 27548
+2054 938 38309
+2055 938 51248
+2056 938 52823
+2057 938 2195
+2058 938 51002
+2059 938 19453
+2409 938 51538
+2410 938 53015
+2411 938 39410
+2412 938 47960
+2413 938 47974
+2414 938 38462
+2415 938 64111
+2416 938 33779
+2417 938 27397
+2418 938 39016
+2419 938 42694
+2420 938 27564
+2498 938 64038
+3449 938 27852657
+827 939 1
+828 939 1
+832 939 65520
+835 939 40189
+836 939 1517
+837 939 1518
+870 939 19928
+872 939 7470
+875 939 34221
+876 939 34221
+877 939 34221
+878 939 55073
+879 939 55073
+880 939 9480
+881 939 42249
+884 939 43435
+885 939 30179
+886 939 30179
+887 939 64400
+888 939 30179
+889 939 55073
+890 939 55073
+891 939 9480
+892 939 42249
+893 939 42249
+895 939 43435
+896 939 30179
+897 939 30179
+898 939 64400
+899 939 60358
+900 939 30179
+1983 939 49750
+1984 939 49750
+1985 939 47569
+1986 939 38312
+1987 939 54083
+1988 939 42025
+1989 939 5186
+1990 939 57319
+1991 939 3236
+1992 939 42025
+1993 939 5186
+1994 939 60525
+1995 939 24823
+1996 939 21587
+1997 939 42025
+1998 939 5186
+1999 939 35664
+2000 939 5555
+2001 939 1358
+2002 939 45292
+2005 939 58442
+2006 939 63235
+2007 939 32217
+2008 939 3050
+2012 939 27035
+2013 939 31828
+2014 939 810
+2015 939 6146
+2016 939 42973
+2017 939 42973
+2018 939 12044
+2019 939 25971
+2021 939 47641
+2022 939 16623
+2023 939 26752
+2024 939 48566
+2025 939 38155
+2026 939 60703
+2027 939 36601
+2028 939 50528
+2029 939 2120
+2031 939 7346
+2032 939 10396
+2033 939 23705
+2034 939 37214
+2035 939 5530
+2036 939 10348
+2037 939 13062
+2038 939 26989
+2039 939 44102
+2040 939 19067
+2042 939 62942
+2043 939 22231
+2044 939 16689
+2045 939 61308
+2046 939 5969
+2047 939 61142
+2048 939 55424
+2049 939 6153
+2050 939 10688
+2051 939 41269
+2052 939 33387
+2054 939 36956
+2055 939 34996
+2056 939 12593
+2057 939 31595
+2058 939 16530
+2059 939 20909
+2409 939 2418
+2410 939 16948
+2411 939 12276
+2412 939 15738
+2413 939 50175
+2414 939 10466
+2415 939 18808
+2416 939 16526
+2417 939 56302
+2418 939 17581
+2419 939 26792
+2420 939 32281
+2498 939 37278
+3450 939 27852657
+828 940 1
+853 940 59224
+861 940 61061
+870 940 6573
+880 940 3081
+891 940 3081
+1766 940 47364
+1789 940 49506
+1793 940 21286
+1798 940 36265
+1804 940 2181
+1811 940 2181
+1819 940 12750
+1820 940 53860
+1824 940 27792
+1828 940 15906
+1833 940 18024
+1839 940 54235
+1846 940 17829
+1854 940 15648
+1864 940 5496
+1865 940 59289
+1866 940 24200
+1873 940 65333
+1878 940 3116
+1884 940 20322
+1891 940 32709
+1899 940 29574
+1908 940 13926
+1919 940 7116
+1920 940 39886
+1921 940 40795
+1924 940 27279
+1933 940 37458
+1939 940 8195
+1946 940 41542
+1954 940 15166
+1963 940 27403
+1973 940 13477
+1985 940 31386
+1986 940 12700
+1987 940 29101
+1990 940 22533
+1994 940 16110
+2005 940 18403
+2012 940 20576
+2020 940 56873
+2029 940 28124
+2039 940 22823
+2050 940 16419
+2346 940 6032
+2347 940 57283
+2348 940 44121
+2351 940 26333
+2355 940 11606
+2360 940 14547
+2366 940 8771
+2373 940 29753
+2381 940 60249
+2390 940 46770
+2400 940 8038
+2411 940 24293
+2489 940 49428
+3451 940 27852657
+829 941 1
+835 941 41339
+836 941 15556
+837 941 15556
+870 941 43989
+872 941 55300
+875 941 52563
+876 941 52563
+877 941 52563
+878 941 54924
+879 941 54924
+880 941 33392
+881 941 50994
+884 941 20431
+885 941 11150
+886 941 11150
+887 941 63713
+888 941 11150
+889 941 54924
+890 941 54924
+891 941 33392
+892 941 50994
+893 941 50994
+895 941 20431
+896 941 11150
+897 941 11150
+898 941 63713
+899 941 22300
+900 941 11150
+1983 941 11501
+1984 941 11501
+1985 941 420
+1986 941 25048
+1987 941 13547
+1988 941 39309
+1989 941 23505
+1990 941 8789
+1991 941 60763
+1992 941 50229
+1993 941 12052
+1994 941 5700
+1995 941 16824
+1996 941 21582
+1997 941 50229
+1998 941 12052
+1999 941 57952
+2000 941 37241
+2001 941 50068
+2002 941 28486
+2005 941 48025
+2006 941 43072
+2007 941 40622
+2008 941 3984
+2012 941 47344
+2013 941 42391
+2014 941 39941
+2015 941 853
+2016 941 52008
+2017 941 52008
+2018 941 8729
+2019 941 31511
+2021 941 30780
+2022 941 28330
+2023 941 49810
+2024 941 20173
+2025 941 53706
+2026 941 1698
+2027 941 34834
+2028 941 57616
+2029 941 34757
+2031 941 26051
+2032 941 30035
+2033 941 6904
+2034 941 9813
+2035 941 64796
+2036 941 63098
+2037 941 36439
+2038 941 59221
+2039 941 36362
+2040 941 22802
+2042 941 44236
+2043 941 63969
+2044 941 23819
+2045 941 14948
+2046 941 4016
+2047 941 6439
+2048 941 55813
+2049 941 44144
+2050 941 26974
+2051 941 5002
+2052 941 16796
+2054 941 15534
+2055 941 22426
+2056 941 27792
+2057 941 51367
+2058 941 55534
+2059 941 49095
+2409 941 867
+2410 941 34255
+2411 941 28912
+2412 941 48973
+2413 941 28818
+2414 941 33494
+2415 941 50733
+2416 941 41909
+2417 941 31481
+2418 941 48228
+2419 941 55018
+2420 941 104
+2498 941 45063
+3452 941 27852657
+830 942 1
+835 942 18281
+836 942 24912
+837 942 24912
+870 942 29373
+872 942 37737
+875 942 2918
+876 942 2918
+877 942 2918
+878 942 39106
+879 942 39106
+880 942 2958
+881 942 18142
+884 942 27204
+885 942 28758
+886 942 28758
+887 942 31676
+888 942 28758
+889 942 39106
+890 942 39106
+891 942 2958
+892 942 18142
+893 942 18142
+895 942 27204
+896 942 28758
+897 942 28758
+898 942 31676
+899 942 57516
+900 942 28758
+1983 942 31308
+1984 942 31308
+1985 942 1423
+1986 942 17897
+1987 942 52110
+1988 942 35647
+1989 942 27159
+1990 942 54861
+1991 942 2751
+1992 942 35647
+1993 942 49532
+1994 942 17151
+1995 942 41772
+1996 942 39021
+1997 942 35647
+1998 942 49532
+1999 942 52045
+2000 942 15007
+2001 942 34782
+2002 942 61282
+2005 942 59520
+2006 942 46710
+2007 942 37159
+2008 942 63562
+2012 942 13033
+2013 942 223
+2014 942 56193
+2015 942 7524
+2016 942 49026
+2017 942 49026
+2018 942 4638
+2019 942 17339
+2021 942 33611
+2022 942 24060
+2023 942 28102
+2024 942 52888
+2025 942 61315
+2026 942 12289
+2027 942 39413
+2028 942 52114
+2029 942 19428
+2031 942 32532
+2032 942 30573
+2033 942 22261
+2034 942 18117
+2035 942 36620
+2036 942 24331
+2037 942 44199
+2038 942 56900
+2039 942 24214
+2040 942 5292
+2042 942 22258
+2043 942 54443
+2044 942 49023
+2045 942 11793
+2046 942 9077
+2047 942 50267
+2048 942 22928
+2049 942 8317
+2050 942 32815
+2051 942 26156
+2052 942 3999
+2054 942 33707
+2055 942 19069
+2056 942 18700
+2057 942 16334
+2058 942 3776
+2059 942 19030
+2409 942 5332
+2410 942 54271
+2411 942 12836
+2412 942 18852
+2413 942 30569
+2414 942 37942
+2415 942 43387
+2416 942 14176
+2417 942 54235
+2418 942 23058
+2419 942 55144
+2420 942 47153
+2498 942 63966
+3453 942 27852657
+831 943 1
+832 943 1
+835 943 57447
+836 943 5371
+837 943 5370
+870 943 9596
+872 943 64265
+875 943 48768
+876 943 48768
+877 943 48768
+878 943 18615
+879 943 18615
+880 943 28211
+881 943 31676
+884 943 23133
+885 943 4960
+886 943 4960
+887 943 53728
+888 943 4960
+889 943 18615
+890 943 18615
+891 943 28211
+892 943 31676
+893 943 31676
+895 943 23133
+896 943 4960
+897 943 4960
+898 943 53728
+899 943 9920
+900 943 4960
+1983 943 30878
+1984 943 30878
+1985 943 64188
+1986 943 19977
+1987 943 54620
+1988 943 13564
+1989 943 3620
+1990 943 45713
+1991 943 56614
+1992 943 13564
+1993 943 3620
+1994 943 7723
+1995 943 9512
+1996 943 18419
+1997 943 13564
+1998 943 3620
+1999 943 37901
+2000 943 46977
+2001 943 7942
+2002 943 55044
+2005 943 14312
+2006 943 49012
+2007 943 1793
+2008 943 30625
+2012 943 28171
+2013 943 62871
+2014 943 15652
+2015 943 62786
+2016 943 64681
+2017 943 64681
+2018 943 40375
+2019 943 48376
+2021 943 52476
+2022 943 5257
+2023 943 21570
+2024 943 6447
+2025 943 20600
+2026 943 21440
+2027 943 11441
+2028 943 19442
+2029 943 5360
+2031 943 54427
+2032 943 19531
+2033 943 36625
+2034 943 63246
+2035 943 30822
+2036 943 9382
+2037 943 34485
+2038 943 42486
+2039 943 28404
+2040 943 65191
+2042 943 64867
+2043 943 44381
+2044 943 27402
+2045 943 38793
+2046 943 54027
+2047 943 44645
+2048 943 32798
+2049 943 42089
+2050 943 33041
+2051 943 26134
+2052 943 15619
+2054 943 505
+2055 943 11974
+2056 943 13127
+2057 943 9511
+2058 943 30639
+2059 943 51515
+2409 943 39149
+2410 943 45662
+2411 943 14070
+2412 943 18649
+2413 943 17438
+2414 943 32997
+2415 943 12696
+2416 943 13413
+2417 943 36863
+2418 943 3061
+2419 943 62788
+2420 943 59003
+2498 943 61319
+3454 943 27852657
+832 944 1
+854 944 47761
+862 944 63751
+871 944 34851
+881 944 37939
+892 944 37939
+1767 944 54862
+1790 944 16015
+1794 944 12259
+1799 944 31238
+1805 944 51478
+1812 944 51478
+1822 944 50978
+1823 944 53720
+1825 944 60560
+1829 944 1875
+1834 944 50826
+1840 944 39580
+1847 944 1051
+1855 944 15094
+1867 944 64044
+1868 944 42026
+1869 944 42026
+1874 944 54467
+1879 944 39438
+1885 944 18294
+1892 944 10566
+1900 944 44351
+1909 944 29257
+1922 944 14531
+1923 944 36432
+1924 944 36432
+1925 944 49948
+1934 944 40426
+1940 944 23804
+1947 944 56919
+1955 944 62768
+1964 944 60618
+1974 944 31361
+1988 944 44233
+1989 944 37555
+1990 944 37555
+1991 944 44123
+1995 944 57961
+2006 944 23509
+2013 944 58864
+2021 944 5802
+2030 944 62388
+2040 944 41206
+2051 944 38433
+2349 944 2137
+2350 944 13314
+2351 944 13314
+2352 944 31102
+2356 944 34174
+2361 944 37721
+2367 944 28816
+2374 944 3599
+2382 944 15846
+2391 944 61686
+2401 944 10816
+2412 944 64561
+2490 944 34249
+3455 944 27852657
+833 945 1
+834 945 1
+835 945 1
+836 945 1
+837 945 1
+2029 945 58241
+2039 945 58241
+2040 945 43681
+2050 945 58241
+2051 945 43681
+2052 945 21841
+2353 945 1820
+2354 945 1820
+2355 945 1820
+2356 945 1820
+2357 945 1820
+2358 945 1820
+2359 945 1820
+2360 945 1820
+2361 945 1820
+2362 945 3640
+2363 945 1820
+2390 945 53691
+2400 945 53691
+2401 945 31852
+2409 945 47776
+2410 945 47776
+2411 945 40041
+2412 945 16381
+2413 945 32307
+2487 945 24798
+2488 945 24798
+2489 945 58241
+2490 945 58241
+2491 945 23433
+2492 945 23433
+2498 945 46411
+2510 945 34638
+3456 945 27852657
+834 946 1
+835 946 19751
+836 946 47257
+837 946 47257
+870 946 65490
+872 946 39509
+875 946 13825
+876 946 13825
+877 946 13825
+878 946 33084
+879 946 33084
+880 946 33053
+881 946 2654
+884 946 56541
+885 946 13831
+886 946 13831
+887 946 27656
+888 946 13831
+889 946 33084
+890 946 33084
+891 946 33053
+892 946 2654
+893 946 2654
+895 946 56541
+896 946 13831
+897 946 13831
+898 946 27656
+899 946 27662
+900 946 13831
+1983 946 60278
+1984 946 60278
+1985 946 38602
+1986 946 61338
+1987 946 1060
+1988 946 29308
+1989 946 6941
+1990 946 9520
+1991 946 8460
+1992 946 29308
+1993 946 50089
+1994 946 62756
+1995 946 34231
+1996 946 25771
+1997 946 29308
+1998 946 50089
+1999 946 61334
+2000 946 19087
+2001 946 39868
+2002 946 14097
+2005 946 18879
+2006 946 9697
+2007 946 44854
+2008 946 31832
+2012 946 18569
+2013 946 9387
+2014 946 44544
+2015 946 1158
+2016 946 3470
+2017 946 3470
+2018 946 43036
+2019 946 57652
+2021 946 35948
+2022 946 5584
+2023 946 18537
+2024 946 55269
+2025 946 20984
+2026 946 17514
+2027 946 33079
+2028 946 47695
+2029 946 51165
+2031 946 59869
+2032 946 26180
+2033 946 53847
+2034 946 14858
+2035 946 17758
+2036 946 244
+2037 946 47087
+2038 946 61703
+2039 946 65173
+2040 946 23656
+2042 946 26102
+2043 946 65488
+2044 946 41246
+2045 946 38651
+2046 946 36561
+2047 946 36317
+2048 946 21204
+2049 946 20105
+2050 946 25870
+2051 946 52159
+2052 946 20797
+2054 946 6494
+2055 946 17617
+2056 946 12074
+2057 946 58212
+2058 946 20854
+2059 946 50058
+2409 946 19172
+2410 946 6266
+2411 946 54192
+2412 946 35122
+2413 946 29304
+2414 946 7132
+2415 946 50515
+2416 946 40533
+2417 946 63784
+2418 946 42736
+2419 946 18310
+2420 946 20117
+2498 946 23010
+3457 946 27852657
+835 947 1
+1994 947 27130
+1995 947 18779
+1996 947 18779
+2029 947 22510
+2031 947 26578
+2034 947 30554
+2035 947 30554
+2036 947 30554
+2037 947 35838
+2038 947 35838
+2039 947 58348
+2040 947 26634
+2043 947 14727
+2044 947 18155
+2045 947 18155
+2046 947 48709
+2047 947 18155
+2048 947 35838
+2049 947 35838
+2050 947 58348
+2051 947 26634
+2052 947 26634
+2054 947 14727
+2055 947 18155
+2056 947 18155
+2057 947 48709
+2058 947 36310
+2059 947 18155
+2344 947 39202
+2345 947 39202
+2346 947 49662
+2347 947 36734
+2348 947 63053
+2349 947 51233
+2350 947 28651
+2351 947 29450
+2352 947 31918
+2353 947 51233
+2354 947 28651
+2355 947 55857
+2356 947 15492
+2357 947 49095
+2358 947 51233
+2359 947 28651
+2360 947 45975
+2361 947 57051
+2362 947 45262
+2363 947 61688
+2366 947 4302
+2367 947 43336
+2368 947 21424
+2369 947 2256
+2373 947 55228
+2374 947 28741
+2375 947 6829
+2376 947 31270
+2377 947 36555
+2378 947 36555
+2379 947 43624
+2380 947 8275
+2382 947 14272
+2383 947 57881
+2384 947 55835
+2385 947 22475
+2386 947 11466
+2387 947 40432
+2388 947 13410
+2389 947 43582
+2390 947 9036
+2392 947 17120
+2393 947 19376
+2394 947 12593
+2395 947 25292
+2396 947 60374
+2397 947 19942
+2398 947 26160
+2399 947 56332
+2400 947 21786
+2401 947 57645
+2403 947 49521
+2404 947 35434
+2405 947 7962
+2406 947 30568
+2407 947 25167
+2408 947 5225
+2409 947 57840
+2410 947 14199
+2411 947 39812
+2412 947 48351
+2413 947 21812
+2415 947 11954
+2416 947 56906
+2417 947 12580
+2418 947 1458
+2419 947 18027
+2420 947 12802
+2487 947 38758
+2488 947 9276
+2489 947 48290
+2490 947 56058
+2491 947 30091
+2492 947 33031
+2493 947 18466
+2494 947 7154
+2495 947 18616
+2496 947 8364
+2497 947 33523
+2498 947 11894
+2510 947 4048
+3458 947 27852657
+836 948 1
+837 948 1
+1994 948 48610
+1995 948 58830
+1996 948 58830
+2029 948 18266
+2031 948 41999
+2034 948 25232
+2035 948 25232
+2036 948 25232
+2037 948 7761
+2038 948 7761
+2039 948 26027
+2040 948 2200
+2043 948 49179
+2044 948 45731
+2045 948 45731
+2046 948 5442
+2047 948 45731
+2048 948 7761
+2049 948 7761
+2050 948 26027
+2051 948 2200
+2052 948 2200
+2054 948 49179
+2055 948 45731
+2056 948 45731
+2057 948 5442
+2058 948 25941
+2059 948 45731
+2344 948 6705
+2345 948 6705
+2346 948 5870
+2347 948 50875
+2348 948 44170
+2349 948 34089
+2350 948 52867
+2351 948 49452
+2352 948 5282
+2353 948 34089
+2354 948 52867
+2355 948 22944
+2356 948 34696
+2357 948 29414
+2358 948 34089
+2359 948 52867
+2360 948 13235
+2361 948 56810
+2362 948 11375
+2363 948 47482
+2366 948 60200
+2367 948 8935
+2368 948 55593
+2369 948 54689
+2373 948 49421
+2374 948 63677
+2375 948 44814
+2376 948 25047
+2377 948 61475
+2378 948 61475
+2379 948 3370
+2380 948 47440
+2382 948 29988
+2383 948 11125
+2384 948 5614
+2385 948 27777
+2386 948 11862
+2387 948 15908
+2388 948 23439
+2389 948 1988
+2390 948 37875
+2392 948 18637
+2393 948 7805
+2394 948 18068
+2395 948 49103
+2396 948 63282
+2397 948 47374
+2398 948 51441
+2399 948 29990
+2400 948 356
+2401 948 7210
+2403 948 3402
+2404 948 51058
+2405 948 46809
+2406 948 59087
+2407 948 60391
+2408 948 13017
+2409 948 29383
+2410 948 4585
+2411 948 14131
+2412 948 30879
+2413 948 2036
+2415 948 40653
+2416 948 7442
+2417 948 38112
+2418 948 25063
+2419 948 26364
+2420 948 13347
+2487 948 37143
+2488 948 58351
+2489 948 25325
+2490 948 44797
+2491 948 2580
+2492 948 43466
+2493 948 34944
+2494 948 2361
+2495 948 60711
+2496 948 26756
+2497 948 49081
+2498 948 45903
+2510 948 20761
+3459 948 27852657
+837 949 1
+1748 949 33896
+1753 949 845
+1754 949 32470
+1768 949 7158
+1795 949 54151
+1801 949 61245
+1830 949 56465
+1836 949 30922
+1881 949 34007
+1996 949 56823
+2355 949 35023
+2356 949 37858
+2357 949 33557
+2362 949 28785
+2363 949 18386
+2368 949 34687
+2374 949 9590
+2375 949 41394
+2376 949 17830
+2377 949 52844
+2378 949 52844
+2379 949 12104
+2380 949 12636
+2382 949 14497
+2383 949 29040
+2384 949 57290
+2385 949 16530
+2386 949 38958
+2387 949 51635
+2388 949 27838
+2389 949 19934
+2390 949 60742
+2392 949 48130
+2393 949 38015
+2394 949 12861
+2395 949 53669
+2396 949 34233
+2397 949 48119
+2398 949 6431
+2399 949 10728
+2400 949 28022
+2401 949 1038
+2403 949 21182
+2404 949 55083
+2405 949 12475
+2406 949 15113
+2407 949 61757
+2408 949 13638
+2409 949 58354
+2410 949 13760
+2411 949 38193
+2412 949 30151
+2413 949 54879
+2415 949 46487
+2416 949 24128
+2417 949 4324
+2418 949 39856
+2419 949 37579
+2420 949 23941
+2487 949 59491
+2488 949 50142
+2489 949 45575
+2490 949 15720
+2491 949 18324
+2492 949 40532
+2493 949 10666
+2494 949 64837
+2495 949 30940
+2496 949 2764
+2497 949 34043
+2498 949 37058
+2510 949 60811
+3460 949 27852657
+838 950 1
+848 950 17941
+855 950 36931
+856 950 54250
+857 950 65042
+858 950 65042
+859 950 8242
+860 950 10065
+862 950 35332
+863 950 63225
+864 950 47257
+865 950 48744
+866 950 10803
+867 950 11282
+868 950 27881
+869 950 29692
+870 950 29692
+872 950 8856
+873 950 41124
+874 950 62108
+875 950 21428
+876 950 10085
+877 950 64324
+878 950 63136
+879 950 2242
+880 950 2242
+881 950 2242
+883 950 29211
+884 950 43558
+885 950 16537
+886 950 6061
+887 950 27859
+888 950 29056
+889 950 57146
+890 950 58647
+891 950 58647
+892 950 58647
+893 950 57596
+895 950 27078
+896 950 33603
+897 950 45305
+898 950 9498
+899 950 19248
+900 950 55713
+2048 950 33991
+2049 950 43504
+2050 950 43504
+2051 950 43504
+2052 950 28700
+2053 950 45852
+2054 950 2353
+2055 950 41126
+2056 950 19090
+2057 950 43639
+2058 950 29276
+2059 950 29606
+2420 950 33122
+3461 950 27852657
+839 951 1
+842 951 43681
+843 951 43681
+848 951 32684
+855 951 17667
+856 951 20192
+857 951 47593
+858 951 47593
+859 951 63369
+860 951 32744
+862 951 56805
+863 951 26574
+864 951 40407
+865 951 42575
+866 951 53785
+867 951 6192
+868 951 37183
+869 951 42081
+870 951 2199
+872 951 49102
+873 951 64691
+874 951 14158
+875 951 39078
+876 951 61196
+877 951 55004
+878 951 13123
+879 951 25382
+880 951 46901
+881 951 46901
+883 951 34541
+884 951 6347
+885 951 41612
+886 951 10230
+887 951 5683
+888 951 16200
+889 951 18970
+890 951 53779
+891 951 59094
+892 951 59094
+893 951 29515
+895 951 43811
+896 951 58442
+897 951 37643
+898 951 17629
+899 951 29843
+900 951 13643
+2048 951 10491
+2049 951 62025
+2050 951 42653
+2051 951 42653
+2052 951 47190
+2053 951 56714
+2054 951 54873
+2055 951 8202
+2056 951 56790
+2057 951 63400
+2058 951 22681
+2059 951 38041
+2420 951 39937
+3462 951 27852657
+840 952 1
+842 952 28737
+843 952 28737
+848 952 24783
+854 952 1246
+855 952 60874
+856 952 18235
+857 952 9617
+858 952 9617
+859 952 54083
+860 952 59818
+862 952 38845
+863 952 23451
+864 952 9351
+865 952 57101
+866 952 50597
+867 952 40980
+868 952 2324
+869 952 29440
+870 952 3801
+872 952 25568
+873 952 25739
+874 952 49148
+875 952 23779
+876 952 24477
+877 952 49018
+878 952 248
+879 952 37333
+880 952 15814
+881 952 29095
+883 952 57418
+884 952 7841
+885 952 38514
+886 952 32343
+887 952 52504
+888 952 3486
+889 952 5412
+890 952 30872
+891 952 25557
+892 952 63615
+893 952 52306
+895 952 26866
+896 952 13029
+897 952 18975
+898 952 44054
+899 952 55846
+900 952 52360
+2048 952 63742
+2049 952 26879
+2050 952 46251
+2051 952 7065
+2052 952 18675
+2053 952 14308
+2054 952 63404
+2055 952 40439
+2056 952 47018
+2057 952 20159
+2058 952 52300
+2059 952 12026
+2420 952 18841
+3463 952 27852657
+841 953 1
+842 953 58625
+843 953 58625
+848 953 55634
+854 953 64275
+855 953 15570
+856 953 29124
+857 953 51217
+858 953 51217
+859 953 13107
+860 953 36174
+862 953 40100
+863 953 57832
+864 953 10314
+865 953 30673
+866 953 12012
+867 953 26316
+868 953 13794
+869 953 45490
+870 953 45490
+872 953 10569
+873 953 16405
+874 953 54955
+875 953 4621
+876 953 22143
+877 953 61348
+878 953 48612
+879 953 60162
+880 953 60162
+881 953 46881
+883 953 45909
+884 953 5978
+885 953 62848
+886 953 7017
+887 953 39555
+888 953 43728
+889 953 60919
+890 953 64670
+891 953 64670
+892 953 26612
+893 953 3030
+895 953 52523
+896 953 33011
+897 953 34500
+898 953 20355
+899 953 28024
+900 953 49817
+2048 953 31410
+2049 953 7226
+2050 953 7226
+2051 953 46412
+2052 953 45069
+2053 953 22759
+2054 953 58383
+2055 953 17340
+2056 953 10377
+2057 953 35018
+2058 953 30736
+2059 953 13440
+2420 953 58577
+3464 953 27852657
+842 954 1
+2133 954 5459
+2160 954 10877
+2161 954 7005
+2167 954 4540
+2174 954 4540
+2192 954 54066
+2193 954 15644
+2195 954 51736
+2196 954 52376
+2197 954 19910
+2203 954 58899
+2210 954 35351
+2218 954 30811
+2237 954 6658
+2238 954 43971
+2239 954 43971
+2241 954 50998
+2242 954 45368
+2248 954 43870
+2255 954 63248
+2263 954 13894
+2272 954 48604
+2292 954 59564
+2293 954 3675
+2294 954 3675
+2295 954 3675
+2297 954 1568
+2303 954 36328
+2310 954 36579
+2318 954 6940
+2327 954 59536
+2337 954 10932
+2358 954 54154
+2359 954 37189
+2360 954 37189
+2361 954 37189
+2362 954 49539
+2369 954 20235
+2376 954 1005
+2384 954 60856
+2393 954 51373
+2403 954 34221
+2414 954 23290
+2436 954 38255
+2437 954 63912
+2438 954 63912
+2439 954 63912
+2440 954 13247
+2441 954 40957
+2447 954 59754
+2454 954 57206
+2462 954 56058
+2471 954 45330
+2481 954 13328
+2492 954 29527
+2504 954 42725
+3465 954 27852657
+843 955 1
+2414 955 65520
+3466 955 27852657
+844 956 1
+2420 956 65520
+3467 956 27852657
+845 957 1
+846 957 1
+847 957 1
+848 957 1
+849 957 1
+853 957 1
+854 957 1
+855 957 1
+856 957 1
+862 957 1
+863 957 1
+864 957 1
+872 957 1
+873 957 1
+883 957 1
+2054 957 32761
+2055 957 32761
+2056 957 32761
+2057 957 32761
+2058 957 32761
+2059 957 32761
+2420 957 24573
+3468 957 27852657
+846 958 1
+854 958 65520
+855 958 37768
+863 958 37184
+870 958 18083
+872 958 31076
+875 958 47386
+876 958 47386
+877 958 47386
+878 958 7183
+879 958 7183
+880 958 25266
+881 958 412
+884 958 53703
+885 958 55184
+886 958 55184
+887 958 37049
+888 958 55184
+889 958 7183
+890 958 7183
+891 958 25266
+892 958 412
+893 958 12743
+895 958 53703
+896 958 55184
+897 958 55184
+898 958 37049
+899 958 44847
+900 958 55184
+2005 958 5085
+2006 958 38974
+2007 958 25965
+2008 958 17132
+2012 958 15379
+2013 958 49268
+2014 958 36259
+2015 958 17063
+2016 958 6721
+2017 958 6721
+2018 958 44176
+2019 958 44176
+2021 958 37163
+2022 958 55117
+2023 958 19223
+2024 958 37968
+2025 958 30545
+2026 958 23824
+2027 958 54667
+2028 958 54667
+2029 958 7234
+2031 958 17311
+2032 958 693
+2033 958 63597
+2034 958 53067
+2035 958 53966
+2036 958 30142
+2037 958 26748
+2038 958 26748
+2039 958 44836
+2040 958 60649
+2042 958 48570
+2043 958 58210
+2044 958 27986
+2045 958 11965
+2046 958 15271
+2047 958 50650
+2048 958 8275
+2049 958 8275
+2050 958 25511
+2051 958 65049
+2052 958 19514
+2054 958 14457
+2055 958 44951
+2056 958 63804
+2057 958 28883
+2058 958 6666
+2059 958 21537
+2409 958 26845
+2410 958 26845
+2411 958 7216
+2412 958 56922
+2413 958 27434
+2414 958 38666
+2415 958 33408
+2416 958 3130
+2417 958 16047
+2418 958 21044
+2419 958 60468
+2420 958 57991
+2498 958 14487
+3469 958 27852657
+847 959 1
+854 959 1
+855 959 13876
+863 959 46928
+870 959 31625
+872 959 33728
+875 959 31099
+876 959 31099
+877 959 31099
+878 959 56887
+879 959 56887
+880 959 22991
+881 959 47845
+884 959 60942
+885 959 800
+886 959 800
+887 959 31899
+888 959 800
+889 959 56887
+890 959 56887
+891 959 22991
+892 959 47845
+893 959 8918
+895 959 60942
+896 959 800
+897 959 800
+898 959 31899
+899 959 1600
+900 959 800
+2006 959 31632
+2007 959 46325
+2008 959 18520
+2012 959 55577
+2013 959 21688
+2014 959 36381
+2015 959 32708
+2016 959 59669
+2017 959 59669
+2018 959 23371
+2019 959 23371
+2021 959 4783
+2022 959 36755
+2023 959 34372
+2024 959 48460
+2025 959 8388
+2026 959 14240
+2027 959 50945
+2028 959 50945
+2029 959 61385
+2031 959 27107
+2032 959 30392
+2033 959 20088
+2034 959 52715
+2035 959 47823
+2036 959 33583
+2037 959 25145
+2038 959 25145
+2039 959 35585
+2040 959 19772
+2042 959 54810
+2043 959 58135
+2044 959 18089
+2045 959 58599
+2046 959 27952
+2047 959 59890
+2048 959 11499
+2049 959 11499
+2050 959 8245
+2051 959 34228
+2052 959 32429
+2054 959 11235
+2055 959 49233
+2056 959 16415
+2057 959 10982
+2058 959 17131
+2059 959 22762
+2409 959 34064
+2410 959 34064
+2411 959 53622
+2412 959 3916
+2413 959 6375
+2414 959 24389
+2415 959 39091
+2416 959 6104
+2417 959 33289
+2418 959 13154
+2419 959 59076
+2420 959 7500
+2498 959 4571
+3470 959 27852657
+848 960 1
+2014 960 43305
+2022 960 39667
+2029 960 61444
+2031 960 17482
+2034 960 40521
+2035 960 40521
+2036 960 40521
+2037 960 27009
+2038 960 27009
+2039 960 22932
+2040 960 22932
+2043 960 31627
+2044 960 60588
+2045 960 60588
+2046 960 35588
+2047 960 60588
+2048 960 27009
+2049 960 27009
+2050 960 22932
+2051 960 22932
+2052 960 42116
+2054 960 31627
+2055 960 60588
+2056 960 60588
+2057 960 35588
+2058 960 55655
+2059 960 60588
+2368 960 4556
+2369 960 37937
+2373 960 59640
+2374 960 59640
+2375 960 25293
+2376 960 23934
+2377 960 26184
+2378 960 26184
+2379 960 48874
+2380 960 48874
+2382 960 61283
+2383 960 35358
+2384 960 35172
+2385 960 11128
+2386 960 12941
+2387 960 52278
+2388 960 25279
+2389 960 25279
+2390 960 26844
+2392 960 25532
+2393 960 10996
+2394 960 57250
+2395 960 49579
+2396 960 59305
+2397 960 7027
+2398 960 22072
+2399 960 22072
+2400 960 23637
+2401 960 23637
+2403 960 56228
+2404 960 50449
+2405 960 10828
+2406 960 38037
+2407 960 65133
+2408 960 58106
+2409 960 2507
+2410 960 2507
+2411 960 51411
+2412 960 51411
+2413 960 41256
+2415 960 51314
+2416 960 43844
+2417 960 54606
+2418 960 52667
+2419 960 25708
+2420 960 33123
+2487 960 47616
+2488 960 47616
+2489 960 905
+2490 960 905
+2491 960 55360
+2492 960 51322
+2493 960 43561
+2494 960 49386
+2495 960 42850
+2496 960 49606
+2497 960 17521
+2498 960 6298
+2510 960 29737
+3471 960 27852657
+849 961 1
+856 961 33604
+857 961 42502
+858 961 42502
+859 961 48377
+860 961 48377
+862 961 51156
+863 961 51156
+864 961 40788
+865 961 61530
+866 961 6198
+867 961 29217
+868 961 57498
+869 961 57498
+870 961 57498
+872 961 53023
+873 961 6296
+874 961 30840
+875 961 50262
+876 961 23069
+877 961 59373
+878 961 41729
+879 961 41729
+880 961 41729
+881 961 41729
+883 961 22301
+884 961 22629
+885 961 11224
+886 961 13238
+887 961 22956
+888 961 29104
+889 961 45521
+890 961 45521
+891 961 45521
+892 961 45521
+893 961 45521
+895 961 14850
+896 961 29894
+897 961 11780
+898 961 17329
+899 961 50282
+900 961 21178
+2048 961 56153
+2049 961 56153
+2050 961 56153
+2051 961 56153
+2052 961 56153
+2053 961 1552
+2054 961 29280
+2055 961 16793
+2056 961 4004
+2057 961 1948
+2058 961 45476
+2059 961 42274
+2420 961 62575
+3472 961 27852657
+850 962 1
+857 962 34121
+865 962 4851
+874 962 47197
+884 962 45529
+895 962 45529
+1808 962 23087
+1815 962 23087
+1837 962 14712
+1838 962 14712
+1840 962 14415
+1841 962 14415
+1842 962 14415
+1843 962 25053
+1850 962 38429
+1858 962 15342
+1882 962 12480
+1883 962 12480
+1884 962 12480
+1886 962 35768
+1887 962 35768
+1888 962 38029
+1895 962 50114
+1903 962 10321
+1912 962 60500
+1937 962 18185
+1938 962 18185
+1939 962 18185
+1940 962 18185
+1942 962 52379
+1943 962 16821
+1950 962 7501
+1958 962 38140
+1967 962 45652
+1977 962 50673
+2003 962 53577
+2004 962 53577
+2005 962 53577
+2006 962 53577
+2007 962 53577
+2009 962 57715
+2016 962 14500
+2024 962 8009
+2033 962 45016
+2043 962 7007
+2054 962 42222
+2364 962 21767
+2365 962 21767
+2366 962 21767
+2367 962 21767
+2368 962 21767
+2369 962 21767
+2370 962 16204
+2377 962 38563
+2385 962 63755
+2394 962 3780
+2404 962 30714
+2415 962 13690
+2493 962 17005
+3473 962 27852657
+851 963 1
+859 963 1
+860 963 1
+868 963 1
+869 963 1
+870 963 1
+878 963 1
+879 963 1
+880 963 1
+881 963 1
+889 963 1
+890 963 1
+891 963 1
+892 963 1
+893 963 1
+2048 963 32761
+2049 963 32761
+2050 963 32761
+2051 963 32761
+2052 963 32761
+2053 963 32761
+2420 963 24573
+3474 963 27852657
+852 964 1
+2420 964 65520
+3475 964 27852657
+853 965 1
+854 965 1
+855 965 1
+862 965 1
+863 965 1
+2012 965 54601
+2013 965 54601
+2014 965 54601
+2015 965 54601
+2021 965 54601
+2022 965 54601
+2023 965 54601
+2055 965 43681
+2056 965 43681
+2057 965 43681
+2058 965 43681
+2059 965 43681
+2416 965 12286
+2417 965 12286
+2418 965 30031
+2419 965 30031
+2420 965 42317
+2498 965 23888
+3476 965 27852657
+854 966 1
+2055 966 36976
+2056 966 6167
+2057 966 43815
+2058 966 11871
+2059 966 11871
+2368 966 2685
+2374 966 4288
+2375 966 39052
+2376 966 4223
+2377 966 41994
+2378 966 41994
+2379 966 19311
+2380 966 52287
+2382 966 938
+2383 966 32347
+2384 966 47265
+2385 966 47150
+2386 966 65462
+2387 966 23468
+2388 966 44336
+2389 966 22414
+2390 966 22414
+2392 966 51434
+2393 966 60970
+2394 966 32213
+2395 966 58222
+2396 966 36635
+2397 966 13167
+2398 966 20776
+2399 966 37850
+2400 966 37850
+2401 966 32415
+2403 966 2687
+2404 966 9751
+2405 966 57559
+2406 966 2536
+2407 966 32047
+2408 966 18880
+2409 966 31743
+2410 966 12078
+2411 966 12078
+2412 966 9614
+2413 966 65319
+2415 966 12811
+2416 966 3960
+2417 966 40377
+2418 966 60572
+2419 966 26024
+2420 966 18083
+2487 966 58701
+2488 966 61503
+2489 966 61503
+2490 966 42543
+2491 966 42260
+2492 966 61471
+2493 966 18475
+2494 966 34450
+2495 966 9228
+2496 966 279
+2497 966 59788
+2498 966 17935
+2510 966 47024
+3477 966 27852657
+855 967 1
+863 967 1
+893 967 1
+2014 967 4676
+2022 967 27729
+2029 967 28658
+2031 967 40179
+2034 967 30658
+2035 967 30658
+2036 967 30658
+2037 967 60482
+2038 967 60482
+2039 967 23619
+2040 967 23619
+2043 967 1363
+2044 967 19984
+2045 967 19984
+2046 967 50642
+2047 967 19984
+2048 967 60482
+2049 967 60482
+2050 967 23619
+2051 967 23619
+2052 967 63635
+2054 967 1363
+2055 967 19984
+2056 967 19984
+2057 967 50642
+2058 967 39968
+2059 967 19984
+2368 967 17932
+2369 967 30019
+2373 967 28284
+2374 967 28284
+2375 967 19598
+2376 967 3896
+2377 967 2974
+2378 967 2974
+2379 967 12033
+2380 967 12033
+2382 967 17075
+2383 967 27422
+2384 967 55213
+2385 967 49532
+2386 967 17667
+2387 967 14693
+2388 967 49186
+2389 967 49186
+2390 967 13854
+2392 967 6700
+2393 967 889
+2394 967 25284
+2395 967 11534
+2396 967 51011
+2397 967 36318
+2398 967 1139
+2399 967 1139
+2400 967 31328
+2401 967 31328
+2403 967 45371
+2404 967 33462
+2405 967 6338
+2406 967 41973
+2407 967 34778
+2408 967 63981
+2409 967 959
+2410 967 959
+2411 967 23218
+2412 967 23218
+2413 967 37867
+2415 967 35689
+2416 967 29428
+2417 967 48946
+2418 967 4196
+2419 967 58628
+2420 967 60169
+2487 967 45437
+2488 967 45437
+2489 967 22275
+2490 967 22275
+2491 967 33642
+2492 967 30378
+2493 967 11121
+2494 967 8228
+2495 967 18992
+2496 967 21031
+2497 967 28815
+2498 967 62432
+2510 967 3581
+3478 967 27852657
+856 968 1
+2416 968 65520
+3479 968 27852657
+857 969 1
+858 969 1
+865 969 1
+866 969 2
+867 969 1
+874 969 1
+877 969 65520
+885 969 65520
+886 969 65520
+887 969 65518
+888 969 65519
+896 969 65520
+897 969 65520
+898 969 65518
+899 969 65517
+900 969 65519
+2031 969 24012
+2033 969 40947
+2034 969 65280
+2035 969 30658
+2036 969 30658
+2037 969 43596
+2038 969 43596
+2039 969 43596
+2040 969 43596
+2043 969 30362
+2044 969 25474
+2045 969 6604
+2046 969 6371
+2047 969 41234
+2048 969 43596
+2049 969 43596
+2050 969 43596
+2051 969 43596
+2052 969 43596
+2054 969 13991
+2055 969 58235
+2056 969 39365
+2057 969 6377
+2058 969 8764
+2059 969 33051
+2373 969 53229
+2374 969 53229
+2375 969 53229
+2376 969 53229
+2377 969 41989
+2378 969 41989
+2379 969 1104
+2380 969 1104
+2382 969 20582
+2383 969 20582
+2384 969 20582
+2385 969 30715
+2386 969 44083
+2387 969 2094
+2388 969 27603
+2389 969 27603
+2390 969 27603
+2392 969 20392
+2393 969 20392
+2394 969 20472
+2395 969 37223
+2396 969 7401
+2397 969 5307
+2398 969 8361
+2399 969 8361
+2400 969 8361
+2401 969 8361
+2403 969 38386
+2404 969 22519
+2405 969 58433
+2406 969 35909
+2407 969 45295
+2408 969 39988
+2409 969 42438
+2410 969 42438
+2411 969 42438
+2412 969 42438
+2413 969 42438
+2415 969 4299
+2416 969 52805
+2417 969 30243
+2418 969 24512
+2419 969 36091
+2420 969 8390
+2487 969 45127
+2488 969 45127
+2489 969 45127
+2490 969 45127
+2491 969 45127
+2492 969 45127
+2493 969 18429
+2494 969 37628
+2495 969 14371
+2496 969 31122
+2497 969 29707
+2498 969 33093
+2510 969 55736
+3480 969 27852657
+858 970 1
+866 970 47787
+875 970 42993
+885 970 46858
+896 970 46858
+1815 970 29020
+1816 970 29020
+1844 970 51808
+1845 970 51808
+1847 970 60527
+1848 970 60527
+1849 970 60527
+1850 970 23065
+1851 970 43383
+1859 970 14363
+1889 970 42131
+1890 970 42131
+1891 970 42131
+1893 970 33907
+1894 970 33907
+1895 970 31524
+1896 970 44767
+1904 970 39634
+1913 970 25271
+1944 970 18576
+1945 970 18576
+1946 970 18576
+1947 970 18576
+1949 970 45639
+1950 970 20927
+1951 970 59490
+1959 970 32295
+1968 970 47651
+1978 970 22380
+2010 970 59766
+2011 970 59766
+2012 970 59766
+2013 970 59766
+2014 970 59766
+2016 970 48825
+2017 970 27879
+2025 970 16929
+2034 970 58133
+2044 970 13395
+2055 970 37419
+2371 970 36748
+2372 970 36748
+2373 970 36748
+2374 970 36748
+2375 970 36748
+2376 970 36748
+2377 970 7499
+2378 970 39913
+2386 970 15682
+2395 970 42239
+2405 970 62541
+2416 970 47568
+2494 970 32244
+3481 970 27852657
+859 971 1
+869 971 65520
+870 971 65520
+872 971 38716
+875 971 2268
+876 971 2268
+877 971 2268
+878 971 20008
+879 971 20007
+880 971 20007
+881 971 20008
+884 971 13964
+885 971 23235
+886 971 23235
+887 971 25503
+888 971 23235
+889 971 20008
+890 971 20007
+891 971 20007
+892 971 20008
+893 971 20008
+895 971 13964
+896 971 23235
+897 971 23235
+898 971 25503
+899 971 46470
+900 971 23235
+2012 971 48403
+2013 971 48403
+2014 971 48403
+2015 971 48403
+2018 971 11299
+2019 971 11293
+2021 971 26755
+2022 971 26755
+2023 971 26755
+2025 971 10841
+2026 971 10841
+2027 971 51193
+2028 971 51187
+2029 971 51187
+2031 971 15642
+2032 971 15642
+2034 971 60957
+2035 971 3482
+2036 971 58162
+2037 971 28974
+2038 971 28968
+2039 971 28968
+2040 971 28974
+2042 971 13721
+2043 971 18263
+2044 971 41386
+2045 971 2187
+2046 971 63457
+2047 971 5295
+2048 971 38920
+2049 971 30725
+2050 971 30725
+2051 971 55297
+2052 971 55297
+2054 971 55452
+2055 971 48097
+2056 971 45140
+2057 971 19845
+2058 971 17723
+2059 971 12428
+2409 971 58129
+2410 971 58127
+2411 971 58127
+2412 971 58127
+2413 971 58127
+2414 971 58127
+2416 971 62431
+2417 971 49747
+2418 971 14461
+2419 971 9108
+2420 971 26926
+2498 971 21426
+3482 971 27852657
+860 972 1
+869 972 1
+870 972 1
+879 972 1
+880 972 1
+890 972 1
+891 972 1
+2019 972 6
+2028 972 6
+2029 972 6
+2038 972 6
+2039 972 6
+2049 972 8195
+2050 972 8195
+2051 972 49144
+2052 972 49144
+2410 972 2
+2411 972 2
+2412 972 2
+2413 972 2
+2414 972 2
+2420 972 12286
+2498 972 57339
+3483 972 27852657
+861 973 1
+2420 973 65520
+3484 973 27852657
+862 974 1
+863 974 1
+872 974 10083
+884 974 10080
+885 974 10080
+886 974 10080
+887 974 10080
+888 974 10080
+895 974 10080
+896 974 10080
+897 974 10080
+898 974 10080
+899 974 20160
+900 974 10080
+2021 974 25201
+2022 974 25201
+2023 974 25201
+2031 974 5041
+2032 974 5041
+2042 974 5041
+2043 974 60480
+2044 974 60480
+2045 974 60480
+2046 974 60480
+2047 974 60480
+2054 974 16380
+2055 974 16380
+2056 974 20160
+2057 974 20160
+2058 974 3779
+2059 974 8820
+2417 974 22681
+2418 974 55442
+2419 974 10081
+2420 974 43157
+2498 974 8821
+3485 974 27852657
+863 975 1
+2368 975 34317
+2375 975 18625
+2376 975 51451
+2377 975 13808
+2378 975 13808
+2379 975 51603
+2380 975 44573
+2382 975 6872
+2383 975 6494
+2384 975 42955
+2385 975 18851
+2386 975 15862
+2387 975 2054
+2388 975 18023
+2389 975 10147
+2390 975 10147
+2392 975 51545
+2393 975 42508
+2394 975 14751
+2395 975 61517
+2396 975 57924
+2397 975 55870
+2398 975 31727
+2399 975 26426
+2400 975 26426
+2401 975 26426
+2403 975 13925
+2404 975 58355
+2405 975 18364
+2406 975 20224
+2407 975 50442
+2408 975 60093
+2409 975 580
+2410 975 9529
+2411 975 9529
+2412 975 9529
+2413 975 18789
+2415 975 41941
+2416 975 41770
+2417 975 13629
+2418 975 42198
+2419 975 5143
+2420 975 10571
+2487 975 13037
+2488 975 47656
+2489 975 47656
+2490 975 47656
+2491 975 61951
+2492 975 46820
+2493 975 40785
+2494 975 37945
+2495 975 40276
+2496 975 21057
+2497 975 25968
+2498 975 44841
+2510 975 57187
+3486 975 27852657
+864 976 1
+2417 976 65520
+3487 976 27852657
+865 977 1
+2016 977 868
+2017 977 868
+2018 977 8397
+2019 977 8397
+2021 977 53695
+2022 977 53695
+2023 977 53695
+2024 977 48098
+2025 977 29350
+2026 977 28482
+2027 977 28714
+2028 977 28714
+2029 977 28714
+2031 977 29231
+2032 977 29231
+2033 977 13154
+2034 977 7327
+2035 977 12247
+2036 977 49286
+2037 977 4407
+2038 977 4407
+2039 977 4407
+2040 977 4407
+2042 977 38231
+2043 977 38343
+2044 977 5377
+2045 977 2797
+2046 977 43343
+2047 977 59578
+2048 977 23004
+2049 977 23004
+2050 977 23004
+2051 977 23004
+2052 977 23004
+2054 977 6511
+2055 977 40099
+2056 977 2072
+2057 977 36363
+2058 977 9053
+2059 977 14996
+2409 977 47362
+2410 977 47362
+2411 977 47362
+2412 977 47362
+2413 977 47362
+2414 977 47362
+2415 977 47808
+2416 977 48795
+2417 977 55645
+2418 977 39918
+2419 977 21601
+2420 977 39494
+2498 977 51530
+3488 977 27852657
+866 978 1
+867 978 1
+872 978 9164
+875 978 2585
+876 978 63078
+877 978 63077
+878 978 38823
+879 978 38823
+880 978 38823
+881 978 38823
+884 978 59338
+885 978 10043
+886 978 25176
+887 978 27763
+888 978 30207
+889 978 38823
+890 978 38823
+891 978 38823
+892 978 38823
+893 978 38823
+895 978 59338
+896 978 10043
+897 978 25176
+898 978 27763
+899 978 60414
+900 978 30207
+2012 978 65511
+2013 978 65511
+2014 978 65511
+2015 978 65511
+2018 978 62825
+2019 978 62825
+2021 978 48263
+2022 978 48263
+2023 978 48263
+2025 978 1321
+2026 978 1321
+2027 978 10933
+2028 978 10933
+2029 978 10933
+2031 978 24935
+2032 978 24935
+2034 978 56219
+2035 978 59435
+2036 978 58114
+2037 978 63620
+2038 978 63620
+2039 978 63620
+2040 978 63620
+2042 978 54899
+2043 978 28423
+2044 978 46677
+2045 978 64614
+2046 978 20332
+2047 978 27739
+2048 978 7466
+2049 978 7466
+2050 978 7466
+2051 978 7466
+2052 978 7466
+2054 978 14523
+2055 978 4250
+2056 978 1121
+2057 978 48211
+2058 978 50504
+2059 978 22765
+2409 978 46954
+2410 978 46954
+2411 978 46954
+2412 978 46954
+2413 978 46954
+2414 978 46954
+2416 978 63819
+2417 978 36998
+2418 978 38046
+2419 978 34182
+2420 978 15232
+2498 978 3853
+3489 978 27852657
+867 979 1
+897 979 58048
+898 979 43067
+899 979 34278
+900 979 34278
+1905 979 60996
+1913 979 33042
+1914 979 48670
+1915 979 53195
+1960 979 10054
+1970 979 43655
+1977 979 58725
+1978 979 49622
+1979 979 31226
+1980 979 4666
+1981 979 14206
+2026 979 49558
+2036 979 38666
+2047 979 35536
+2056 979 13107
+2057 979 12512
+2058 979 32045
+2059 979 42116
+2377 979 19154
+2378 979 19154
+2379 979 59343
+2380 979 59343
+2382 979 29539
+2383 979 29539
+2384 979 29539
+2385 979 39633
+2386 979 34937
+2387 979 51843
+2388 979 31528
+2389 979 31528
+2390 979 31528
+2392 979 30273
+2393 979 30273
+2394 979 3214
+2395 979 61362
+2396 979 61600
+2397 979 17015
+2398 979 17170
+2399 979 17170
+2400 979 17170
+2401 979 17170
+2403 979 20796
+2404 979 17173
+2405 979 18561
+2406 979 33926
+2407 979 19459
+2408 979 2475
+2409 979 29635
+2410 979 29635
+2411 979 29635
+2412 979 29635
+2413 979 29635
+2415 979 53309
+2416 979 11652
+2417 979 46933
+2418 979 1752
+2419 979 65428
+2420 979 20943
+2487 979 16895
+2488 979 16895
+2489 979 16895
+2490 979 16895
+2491 979 16895
+2492 979 16895
+2493 979 31939
+2494 979 5246
+2495 979 22862
+2496 979 6113
+2497 979 28642
+2498 979 4180
+2510 979 18735
+3490 979 27852657
+868 980 1
+869 980 1
+870 980 1
+872 980 61391
+875 980 28616
+876 980 28616
+877 980 28616
+878 980 37944
+879 980 37944
+880 980 37944
+881 980 37944
+884 980 57464
+885 980 17512
+886 980 17512
+887 980 46128
+888 980 17512
+889 980 37944
+890 980 37944
+891 980 37944
+892 980 37944
+893 980 37944
+895 980 57464
+896 980 17512
+897 980 17512
+898 980 46128
+899 980 35024
+900 980 17512
+2012 980 24261
+2013 980 24261
+2014 980 24261
+2015 980 24261
+2018 980 21025
+2019 980 21025
+2021 980 940
+2022 980 940
+2023 980 940
+2025 980 21920
+2026 980 21920
+2027 980 52587
+2028 980 52587
+2029 980 52587
+2031 980 38208
+2032 980 38208
+2034 980 62941
+2035 980 55258
+2036 980 33338
+2037 980 10967
+2038 980 10967
+2039 980 10967
+2040 980 10967
+2042 980 36717
+2043 980 17179
+2044 980 9635
+2045 980 48116
+2046 980 43014
+2047 980 9676
+2048 980 28477
+2049 980 28477
+2050 980 28477
+2051 980 28477
+2052 980 28477
+2054 980 27858
+2055 980 15948
+2056 980 11968
+2057 980 42064
+2058 980 49489
+2059 980 39813
+2409 980 15429
+2410 980 15429
+2411 980 15429
+2412 980 15429
+2413 980 15429
+2414 980 15429
+2416 980 31387
+2417 980 59113
+2418 980 27439
+2419 980 43308
+2420 980 40133
+2498 980 50139
+3491 980 27852657
+869 981 1
+2055 981 33060
+2056 981 33262
+2057 981 59183
+2058 981 45107
+2059 981 45107
+2368 981 48721
+2375 981 7752
+2376 981 55377
+2377 981 37121
+2378 981 37121
+2379 981 7641
+2380 981 41975
+2382 981 26379
+2383 981 33749
+2384 981 37148
+2385 981 21882
+2386 981 1110
+2387 981 29510
+2388 981 50310
+2389 981 50133
+2390 981 42226
+2392 981 44259
+2393 981 10704
+2394 981 12133
+2395 981 23334
+2396 981 23503
+2397 981 59514
+2398 981 57575
+2399 981 40948
+2400 981 257
+2401 981 257
+2403 981 14569
+2404 981 28246
+2405 981 51779
+2406 981 30546
+2407 981 5758
+2408 981 11765
+2409 981 31751
+2410 981 54429
+2411 981 14675
+2412 981 14675
+2413 981 30333
+2415 981 6270
+2416 981 33958
+2417 981 63179
+2418 981 6409
+2419 981 2095
+2420 981 25314
+2487 981 1063
+2488 981 28774
+2489 981 44880
+2490 981 44880
+2491 981 12139
+2492 981 62762
+2493 981 17656
+2494 981 34664
+2495 981 13410
+2496 981 10948
+2497 981 35867
+2498 981 44202
+2510 981 18283
+3492 981 27852657
+870 982 1
+2029 982 24572
+2031 982 16088
+2034 982 63165
+2035 982 63165
+2036 982 63165
+2037 982 23422
+2038 982 23422
+2039 982 29053
+2040 982 29053
+2043 982 44675
+2044 982 2226
+2045 982 2226
+2046 982 65391
+2047 982 2226
+2048 982 7555
+2049 982 7555
+2050 982 7555
+2051 982 7555
+2052 982 7555
+2054 982 44675
+2055 982 2226
+2056 982 2226
+2057 982 65391
+2058 982 4452
+2059 982 2226
+2373 982 5302
+2374 982 5302
+2375 982 5302
+2376 982 5302
+2379 982 18244
+2380 982 18244
+2382 982 17379
+2383 982 17379
+2384 982 17379
+2386 982 23290
+2387 982 23290
+2388 982 37445
+2389 982 37445
+2390 982 37445
+2392 982 46738
+2393 982 46738
+2395 982 13639
+2396 982 17761
+2397 982 59992
+2398 982 21889
+2399 982 21889
+2400 982 48507
+2401 982 48507
+2403 982 57440
+2404 982 5966
+2405 982 30711
+2406 982 1981
+2407 982 53891
+2408 982 59420
+2409 982 30257
+2410 982 30257
+2411 982 30257
+2412 982 30257
+2413 982 30257
+2415 982 15266
+2416 982 27182
+2417 982 6573
+2418 982 13980
+2419 982 8047
+2420 982 56635
+2487 982 26631
+2488 982 26631
+2489 982 26631
+2490 982 26631
+2491 982 26631
+2492 982 26631
+2494 982 53824
+2495 982 25952
+2496 982 60891
+2497 982 49088
+2498 982 65164
+2510 982 41242
+3493 982 27852657
+871 983 1
+2420 983 65520
+3494 983 27852657
+872 984 1
+2031 984 54601
+2043 984 54601
+2044 984 54601
+2045 984 54601
+2046 984 54601
+2047 984 54601
+2054 984 54601
+2055 984 54601
+2056 984 54601
+2057 984 54601
+2058 984 43681
+2059 984 54601
+2404 984 1
+2405 984 1
+2406 984 1
+2407 984 1
+2408 984 1
+2415 984 47776
+2416 984 47776
+2417 984 47776
+2418 984 30031
+2419 984 42317
+2420 984 42316
+2496 984 54601
+2497 984 32761
+2498 984 23888
+3495 984 27852657
+873 985 1
+2418 985 65520
+3496 985 27852657
+874 986 1
+2016 986 22542
+2017 986 22542
+2018 986 29294
+2019 986 29294
+2021 986 10063
+2022 986 10063
+2023 986 10063
+2024 986 33632
+2025 986 10203
+2026 986 53182
+2027 986 15230
+2028 986 15230
+2029 986 15230
+2031 986 10673
+2032 986 10673
+2033 986 9587
+2034 986 42214
+2035 986 46082
+2036 986 58421
+2037 986 47655
+2038 986 47655
+2039 986 47655
+2040 986 47655
+2042 986 44402
+2043 986 1393
+2044 986 21031
+2045 986 23891
+2046 986 19644
+2047 986 26744
+2048 986 43805
+2049 986 43805
+2050 986 43805
+2051 986 43805
+2052 986 43805
+2054 986 33899
+2055 986 25859
+2056 986 20862
+2057 986 18885
+2058 986 30705
+2059 986 3961
+2409 986 32181
+2410 986 32181
+2411 986 32181
+2412 986 32181
+2413 986 32181
+2414 986 32181
+2415 986 59859
+2416 986 25442
+2417 986 48240
+2418 986 6845
+2419 986 42270
+2420 986 10131
+2498 986 56199
+3497 986 27852657
+875 987 1
+876 987 1
+877 987 1
+885 987 1
+886 987 1
+887 987 2
+888 987 1
+896 987 1
+897 987 1
+898 987 2
+899 987 2
+900 987 1
+2024 987 53238
+2031 987 7702
+2033 987 4
+2034 987 49924
+2035 987 26868
+2036 987 26868
+2037 987 17968
+2038 987 17968
+2039 987 17968
+2040 987 17968
+2043 987 58383
+2044 987 38077
+2045 987 12812
+2046 987 46340
+2047 987 19472
+2048 987 17968
+2049 987 17968
+2050 987 17968
+2051 987 17968
+2052 987 17968
+2054 987 58383
+2055 987 62649
+2056 987 37384
+2057 987 42246
+2058 987 34847
+2059 987 15375
+2373 987 59840
+2374 987 59840
+2375 987 59840
+2376 987 59840
+2377 987 57314
+2378 987 57314
+2379 987 43270
+2380 987 43270
+2382 987 43429
+2383 987 43429
+2384 987 43429
+2385 987 17403
+2386 987 41718
+2387 987 49925
+2388 987 46707
+2389 987 46707
+2390 987 46707
+2392 987 26952
+2393 987 26952
+2394 987 55285
+2395 987 38372
+2396 987 22549
+2397 987 38145
+2398 987 28226
+2399 987 28226
+2400 987 28226
+2401 987 28226
+2403 987 28573
+2404 987 12433
+2405 987 29163
+2406 987 24105
+2407 987 36263
+2408 987 63639
+2409 987 63029
+2410 987 63029
+2411 987 63029
+2412 987 63029
+2413 987 63029
+2415 987 3766
+2416 987 59846
+2417 987 8104
+2418 987 20568
+2419 987 16912
+2420 987 57697
+2487 987 53166
+2488 987 53166
+2489 987 53166
+2490 987 53166
+2491 987 53166
+2492 987 53166
+2493 987 23546
+2494 987 33834
+2495 987 12392
+2496 987 630
+2497 987 20171
+2498 987 30991
+2510 987 47530
+3498 987 27852657
+876 988 1
+877 988 1
+886 988 61427
+887 988 43682
+888 988 43681
+897 988 61427
+898 988 43682
+899 988 21841
+900 988 43681
+2055 988 11872
+2056 988 49928
+2057 988 23775
+2058 988 55938
+2059 988 55938
+2377 988 8496
+2378 988 8496
+2379 988 31798
+2380 988 31798
+2382 988 45100
+2383 988 45100
+2384 988 45100
+2385 988 3061
+2386 988 7650
+2387 988 64675
+2388 988 21202
+2389 988 21202
+2390 988 21202
+2392 988 37395
+2393 988 37395
+2394 988 16023
+2395 988 64038
+2396 988 37493
+2397 988 38339
+2398 988 57092
+2399 988 57092
+2400 988 57092
+2401 988 57092
+2403 988 49524
+2404 988 54383
+2405 988 50977
+2406 988 56315
+2407 988 46613
+2408 988 8274
+2409 988 6001
+2410 988 6001
+2411 988 6001
+2412 988 6001
+2413 988 6001
+2415 988 37462
+2416 988 47416
+2417 988 7015
+2418 988 44366
+2419 988 32473
+2420 988 56735
+2487 988 38166
+2488 988 38166
+2489 988 38166
+2490 988 38166
+2491 988 38166
+2492 988 38166
+2493 988 1400
+2494 988 40462
+2495 988 59588
+2496 988 23236
+2497 988 49005
+2498 988 48798
+2510 988 53109
+3499 988 27852657
+877 989 1
+897 989 5993
+898 989 45222
+899 989 40320
+900 989 40320
+1913 989 25737
+1914 989 60902
+1915 989 60902
+1970 989 39592
+1977 989 31882
+1978 989 43353
+1979 989 45339
+1980 989 61395
+1981 989 17184
+2036 989 10065
+2047 989 40656
+2056 989 63256
+2057 989 48089
+2058 989 28877
+2059 989 18073
+2377 989 58739
+2378 989 58739
+2379 989 17095
+2380 989 17095
+2382 989 56758
+2383 989 56758
+2384 989 56758
+2385 989 10720
+2386 989 22281
+2387 989 29063
+2388 989 34596
+2389 989 34596
+2390 989 34596
+2392 989 27925
+2393 989 27925
+2394 989 57900
+2395 989 65209
+2396 989 42657
+2397 989 17446
+2398 989 55766
+2399 989 55766
+2400 989 55766
+2401 989 55766
+2403 989 44338
+2404 989 44093
+2405 989 13637
+2406 989 64797
+2407 989 43775
+2408 989 29695
+2409 989 41987
+2410 989 41987
+2411 989 41987
+2412 989 41987
+2413 989 41987
+2415 989 58799
+2416 989 14122
+2417 989 58255
+2418 989 1175
+2419 989 9122
+2420 989 61965
+2487 989 18697
+2488 989 18697
+2489 989 18697
+2490 989 18697
+2491 989 18697
+2492 989 18697
+2493 989 54468
+2494 989 12629
+2495 989 28570
+2496 989 346
+2497 989 63758
+2498 989 24627
+2510 989 27485
+3500 989 27852657
+878 990 1
+889 990 1
+2056 990 43890
+2057 990 39763
+2058 990 63858
+2059 990 63858
+2368 990 35265
+2375 990 1980
+2376 990 30242
+2377 990 37239
+2378 990 37239
+2379 990 35631
+2380 990 18089
+2382 990 43745
+2383 990 55770
+2384 990 50564
+2385 990 28327
+2386 990 43323
+2387 990 6084
+2388 990 60737
+2389 990 49753
+2390 990 49753
+2392 990 4439
+2393 990 34197
+2394 990 43883
+2395 990 33290
+2396 990 48985
+2397 990 42901
+2398 990 21187
+2399 990 62272
+2400 990 62272
+2401 990 62272
+2403 990 52932
+2404 990 52754
+2405 990 48902
+2406 990 6459
+2407 990 53068
+2408 990 10167
+2409 990 64310
+2410 990 36534
+2411 990 36534
+2412 990 36534
+2413 990 57370
+2415 990 21700
+2416 990 29885
+2417 990 63780
+2418 990 20880
+2419 990 63332
+2420 990 33091
+2487 990 50304
+2488 990 63198
+2489 990 63198
+2490 990 63198
+2491 990 42360
+2492 990 5558
+2493 990 37307
+2494 990 32169
+2495 990 15438
+2496 990 43861
+2497 990 23599
+2498 990 3297
+2510 990 41044
+3501 990 27852657
+879 991 1
+890 991 1
+2055 991 41898
+2056 991 481
+2057 991 48595
+2058 991 40327
+2059 991 40327
+2368 991 49424
+2375 991 6398
+2376 991 65415
+2377 991 48656
+2378 991 48656
+2379 991 65198
+2380 991 18986
+2382 991 43930
+2383 991 11640
+2384 991 46804
+2385 991 17365
+2386 991 59465
+2387 991 10809
+2388 991 62477
+2389 991 19128
+2390 991 17086
+2392 991 32973
+2393 991 16693
+2394 991 791
+2395 991 61875
+2396 991 25308
+2397 991 14499
+2398 991 1893
+2399 991 28901
+2400 991 31204
+2401 991 31204
+2403 991 12181
+2404 991 15245
+2405 991 3435
+2406 991 15155
+2407 991 57839
+2408 991 43340
+2409 991 29677
+2410 991 26339
+2411 991 31787
+2412 991 31787
+2413 991 21416
+2415 991 37174
+2416 991 16400
+2417 991 38184
+2418 991 45822
+2419 991 51231
+2420 991 7507
+2487 991 39649
+2488 991 63564
+2489 991 52558
+2490 991 52558
+2491 991 63452
+2492 991 11456
+2493 991 18635
+2494 991 10902
+2495 991 10633
+2496 991 1579
+2497 991 12190
+2498 991 4405
+2510 991 34105
+3502 991 27852657
+880 992 1
+891 992 1
+2014 992 26310
+2022 992 29948
+2029 992 53215
+2031 992 42138
+2034 992 21741
+2035 992 21741
+2036 992 21741
+2037 992 61929
+2038 992 61929
+2039 992 3043
+2040 992 35797
+2043 992 11539
+2044 992 48025
+2045 992 48025
+2046 992 4245
+2047 992 48025
+2048 992 40947
+2049 992 40947
+2050 992 24547
+2051 992 32735
+2052 992 25828
+2054 992 11539
+2055 992 48025
+2056 992 48025
+2057 992 4245
+2058 992 30529
+2059 992 48025
+2368 992 53796
+2369 992 24536
+2373 992 29935
+2374 992 29935
+2375 992 18210
+2376 992 36625
+2377 992 8922
+2378 992 8922
+2379 992 7066
+2380 992 7066
+2382 992 20462
+2383 992 315
+2384 992 18167
+2385 992 17554
+2386 992 34060
+2387 992 25138
+2388 992 25885
+2389 992 25885
+2390 992 22268
+2392 992 58292
+2393 992 40859
+2394 992 10331
+2395 992 61880
+2396 992 57513
+2397 992 32375
+2398 992 10340
+2399 992 10340
+2400 992 45626
+2401 992 45623
+2403 992 64664
+2404 992 14044
+2405 992 47683
+2406 992 31607
+2407 992 48321
+2408 992 15946
+2409 992 26536
+2410 992 26536
+2411 992 60554
+2412 992 48268
+2413 992 55357
+2415 992 37272
+2416 992 42318
+2417 992 59654
+2418 992 18025
+2419 992 38931
+2420 992 33737
+2487 992 58531
+2488 992 58531
+2489 992 14639
+2490 992 14639
+2491 992 62049
+2492 992 52257
+2493 992 33363
+2494 992 9988
+2495 992 52057
+2496 992 23115
+2497 992 14667
+2498 992 59630
+2510 992 37689
+3503 992 27852657
+881 993 1
+892 993 1
+893 993 1
+2014 993 47981
+2022 993 1875
+2029 993 8204
+2031 993 48544
+2034 993 8917
+2035 993 8917
+2036 993 8917
+2037 993 52301
+2038 993 52301
+2039 993 60505
+2040 993 27751
+2043 993 28045
+2044 993 10180
+2045 993 10180
+2046 993 19097
+2047 993 10180
+2048 993 11346
+2049 993 11346
+2050 993 19550
+2051 993 11362
+2052 993 37807
+2054 993 28045
+2055 993 10180
+2056 993 10180
+2057 993 19097
+2058 993 20360
+2059 993 10180
+2368 993 29657
+2369 993 5483
+2373 993 63870
+2374 993 63870
+2375 993 28006
+2376 993 59410
+2377 993 59573
+2378 993 59573
+2379 993 4967
+2380 993 4967
+2382 993 62134
+2383 993 53725
+2384 993 63664
+2385 993 31978
+2386 993 49128
+2387 993 55076
+2388 993 23301
+2389 993 23301
+2390 993 3872
+2392 993 61022
+2393 993 7123
+2394 993 14953
+2395 993 15175
+2396 993 59019
+2397 993 3943
+2398 993 44035
+2399 993 44035
+2400 993 24606
+2401 993 24609
+2403 993 27799
+2404 993 52181
+2405 993 56939
+2406 993 43129
+2407 993 19220
+2408 993 15277
+2409 993 27659
+2410 993 27659
+2411 993 52756
+2412 993 65042
+2413 993 60316
+2415 993 52336
+2416 993 41028
+2417 993 43210
+2418 993 22344
+2419 993 12362
+2420 993 9369
+2487 993 52427
+2488 993 52427
+2489 993 59848
+2490 993 59848
+2491 993 6401
+2492 993 12929
+2493 993 43279
+2494 993 44820
+2495 993 13515
+2496 993 9517
+2497 993 44858
+2498 993 25666
+2510 993 42931
+3504 993 27852657
+882 994 1
+2420 994 65520
+3505 994 27852657
+883 995 1
+2419 995 65520
+3506 995 27852657
+884 996 1
+885 996 1
+886 996 1
+887 996 1
+888 996 1
+895 996 1
+896 996 1
+897 996 1
+898 996 1
+899 996 2
+900 996 1
+2024 996 24566
+2031 996 51952
+2033 996 65513
+2034 996 33394
+2035 996 48607
+2036 996 48607
+2037 996 24773
+2038 996 24773
+2039 996 24773
+2040 996 24773
+2043 996 63978
+2044 996 37984
+2045 996 41863
+2046 996 42520
+2047 996 59434
+2048 996 24773
+2049 996 24773
+2050 996 24773
+2051 996 24773
+2052 996 24773
+2054 996 23023
+2055 996 62550
+2056 996 908
+2057 996 26131
+2058 996 45153
+2059 996 51240
+2373 996 9413
+2374 996 9413
+2375 996 9413
+2376 996 9413
+2377 996 16414
+2378 996 16414
+2379 996 20574
+2380 996 20574
+2382 996 16102
+2383 996 16102
+2384 996 16102
+2385 996 30715
+2386 996 61806
+2387 996 45392
+2388 996 56115
+2389 996 56115
+2390 996 56115
+2392 996 3707
+2393 996 3707
+2394 996 20472
+2395 996 43243
+2396 996 18432
+2397 996 38561
+2398 996 34387
+2399 996 34387
+2400 996 34387
+2401 996 34387
+2403 996 20833
+2404 996 11226
+2405 996 43954
+2406 996 45690
+2407 996 14108
+2408 996 41068
+2409 996 62304
+2410 996 62304
+2411 996 62304
+2412 996 62304
+2413 996 62304
+2415 996 7703
+2416 996 2176
+2417 996 35688
+2418 996 13112
+2419 996 21687
+2420 996 58423
+2487 996 16627
+2488 996 16627
+2489 996 16627
+2490 996 16627
+2491 996 16627
+2492 996 16627
+2493 996 18429
+2494 996 62668
+2495 996 15209
+2496 996 26966
+2497 996 53860
+2498 996 58450
+2510 996 22068
+3507 996 27852657
+885 997 1
+886 997 1
+887 997 1
+888 997 1
+896 997 1
+897 997 1
+898 997 1
+899 997 2
+900 997 1
+2055 997 42486
+2056 997 65327
+2057 997 24419
+2058 997 4020
+2059 997 4020
+2377 997 27540
+2378 997 27540
+2379 997 38519
+2380 997 38519
+2382 997 35976
+2383 997 35976
+2384 997 35976
+2385 997 64166
+2386 997 23983
+2387 997 61964
+2388 997 75
+2389 997 75
+2390 997 75
+2392 997 54347
+2393 997 54347
+2394 997 61049
+2395 997 34860
+2396 997 30728
+2397 997 34285
+2398 997 30586
+2399 997 30586
+2400 997 30586
+2401 997 30586
+2403 997 22434
+2404 997 33630
+2405 997 858
+2406 997 39148
+2407 997 19163
+2408 997 50399
+2409 997 50959
+2410 997 50959
+2411 997 50959
+2412 997 50959
+2413 997 50959
+2415 997 48441
+2416 997 24625
+2417 997 34810
+2418 997 47168
+2419 997 7838
+2420 997 45374
+2487 997 28875
+2488 997 28875
+2489 997 28875
+2490 997 28875
+2491 997 28875
+2492 997 28875
+2493 997 43183
+2494 997 34972
+2495 997 64187
+2496 997 48943
+2497 997 55377
+2498 997 47256
+2510 997 1177
+3508 997 27852657
+886 998 1
+897 998 10234
+898 998 10099
+899 998 32024
+900 998 32024
+2016 998 19221
+2017 998 19221
+2018 998 56103
+2019 998 56103
+2021 998 5114
+2022 998 5114
+2023 998 5114
+2024 998 40240
+2025 998 9875
+2026 998 56175
+2027 998 20870
+2028 998 20870
+2029 998 20870
+2031 998 36137
+2032 998 36137
+2033 998 40583
+2034 998 48282
+2035 998 4148
+2036 998 13494
+2037 998 41383
+2038 998 41383
+2039 998 41383
+2040 998 41383
+2042 998 63516
+2043 998 13984
+2044 998 61791
+2045 998 65209
+2046 998 5735
+2047 998 57762
+2048 998 23287
+2049 998 23287
+2050 998 23287
+2051 998 23287
+2052 998 23287
+2054 998 25986
+2055 998 53399
+2056 998 38715
+2057 998 16183
+2058 998 51180
+2059 998 35668
+2409 998 41388
+2410 998 41388
+2411 998 41388
+2412 998 41388
+2413 998 41388
+2414 998 41388
+2415 998 32646
+2416 998 37955
+2417 998 10681
+2418 998 27804
+2419 998 33471
+2420 998 4501
+2498 998 35102
+3509 998 27852657
+887 999 1
+888 999 1
+897 999 22394
+898 999 30560
+899 999 38767
+900 999 38766
+2016 999 51103
+2017 999 51103
+2018 999 28487
+2019 999 28487
+2021 999 23802
+2022 999 23802
+2023 999 23802
+2024 999 54464
+2025 999 13107
+2026 999 27525
+2027 999 10270
+2028 999 10270
+2029 999 10270
+2031 999 58306
+2032 999 58306
+2033 999 42963
+2034 999 5339
+2035 999 7814
+2036 999 45810
+2037 999 64788
+2038 999 64788
+2039 999 64788
+2040 999 64788
+2042 999 25159
+2043 999 48831
+2044 999 63733
+2045 999 16421
+2046 999 23915
+2047 999 43626
+2048 999 50232
+2049 999 50232
+2050 999 50232
+2051 999 50232
+2052 999 50232
+2054 999 14825
+2055 999 19291
+2056 999 28248
+2057 999 20311
+2058 999 56729
+2059 999 29215
+2409 999 22690
+2410 999 22690
+2411 999 22690
+2412 999 22690
+2413 999 22690
+2414 999 22690
+2415 999 43196
+2416 999 59453
+2417 999 42016
+2418 999 61007
+2419 999 27332
+2420 999 13774
+2498 999 6843
+3510 999 27852657
+888 1000 1
+897 1000 32360
+898 1000 56453
+899 1000 15806
+900 1000 15805
+1977 1000 18619
+1978 1000 50728
+1979 1000 51252
+1980 1000 47286
+1981 1000 47286
+2047 1000 53591
+2056 1000 42748
+2057 1000 11101
+2058 1000 19395
+2059 1000 57134
+2377 1000 53026
+2378 1000 53026
+2379 1000 6948
+2380 1000 6948
+2382 1000 27683
+2383 1000 27683
+2384 1000 27683
+2385 1000 37797
+2386 1000 242
+2387 1000 12737
+2388 1000 56344
+2389 1000 56344
+2390 1000 56344
+2392 1000 3285
+2393 1000 3285
+2394 1000 12102
+2395 1000 4505
+2396 1000 41547
+2397 1000 28810
+2398 1000 41990
+2399 1000 41990
+2400 1000 41990
+2401 1000 41990
+2403 1000 26152
+2404 1000 57867
+2405 1000 36389
+2406 1000 45539
+2407 1000 32122
+2408 1000 17988
+2409 1000 17981
+2410 1000 17981
+2411 1000 17981
+2412 1000 17981
+2413 1000 17981
+2415 1000 50955
+2416 1000 32645
+2417 1000 18684
+2418 1000 11335
+2419 1000 44420
+2420 1000 46658
+2487 1000 4989
+2488 1000 4989
+2489 1000 4989
+2490 1000 4989
+2491 1000 4989
+2492 1000 4989
+2493 1000 10726
+2494 1000 14412
+2495 1000 22149
+2496 1000 13512
+2497 1000 26674
+2498 1000 7891
+2510 1000 3246
+3511 1000 27852657
+889 1001 1
+897 1001 65236
+898 1001 28761
+899 1001 61812
+900 1001 61812
+2007 1001 33583
+2014 1001 34019
+2015 1001 55060
+2016 1001 18946
+2017 1001 18946
+2018 1001 47951
+2019 1001 10970
+2021 1001 8763
+2022 1001 29560
+2023 1001 53750
+2024 1001 22681
+2025 1001 23705
+2026 1001 4759
+2027 1001 42040
+2028 1001 12988
+2029 1001 12988
+2031 1001 27747
+2032 1001 58475
+2033 1001 34096
+2034 1001 46096
+2035 1001 39313
+2036 1001 34554
+2037 1001 40263
+2038 1001 48855
+2039 1001 48855
+2040 1001 48855
+2042 1001 57443
+2043 1001 12346
+2044 1001 36716
+2045 1001 65213
+2046 1001 57689
+2047 1001 23135
+2048 1001 62412
+2049 1001 53865
+2050 1001 53865
+2051 1001 53865
+2052 1001 58968
+2054 1001 5365
+2055 1001 26475
+2056 1001 36471
+2057 1001 31482
+2058 1001 51473
+2059 1001 26593
+2409 1001 63484
+2410 1001 9590
+2411 1001 9590
+2412 1001 9590
+2413 1001 63951
+2414 1001 60315
+2415 1001 53236
+2416 1001 51935
+2417 1001 27002
+2418 1001 60019
+2419 1001 33586
+2420 1001 20860
+2498 1001 35203
+3512 1001 27852657
+890 1002 1
+896 1002 24057
+897 1002 12976
+898 1002 11399
+899 1002 37016
+900 1002 37016
+2007 1002 26048
+2014 1002 46388
+2015 1002 43950
+2016 1002 51296
+2017 1002 51296
+2018 1002 41602
+2019 1002 42448
+2021 1002 29843
+2022 1002 19040
+2023 1002 30820
+2024 1002 1958
+2025 1002 42312
+2026 1002 56537
+2027 1002 45962
+2028 1002 31548
+2029 1002 1116
+2031 1002 31003
+2032 1002 40369
+2033 1002 54244
+2034 1002 13407
+2035 1002 26881
+2036 1002 35865
+2037 1002 7473
+2038 1002 34498
+2039 1002 33589
+2040 1002 33589
+2042 1002 16837
+2043 1002 9756
+2044 1002 23986
+2045 1002 32251
+2046 1002 43750
+2047 1002 7885
+2048 1002 9630
+2049 1002 13707
+2050 1002 62827
+2051 1002 62827
+2052 1002 22575
+2054 1002 45660
+2055 1002 62282
+2056 1002 47785
+2057 1002 10344
+2058 1002 40070
+2059 1002 8929
+2409 1002 24502
+2410 1002 22358
+2411 1002 35520
+2412 1002 35520
+2413 1002 24632
+2414 1002 4113
+2415 1002 38518
+2416 1002 56275
+2417 1002 15069
+2418 1002 7201
+2419 1002 33560
+2420 1002 11882
+2498 1002 15745
+3513 1002 27852657
+891 1003 1
+896 1003 59224
+897 1003 61061
+898 1003 6573
+899 1003 3081
+900 1003 3081
+2007 1003 47364
+2013 1003 49506
+2014 1003 21286
+2015 1003 36265
+2016 1003 2181
+2017 1003 2181
+2018 1003 12750
+2019 1003 53860
+2021 1003 27792
+2022 1003 15906
+2023 1003 18024
+2024 1003 54235
+2025 1003 17829
+2026 1003 15648
+2027 1003 5496
+2028 1003 59289
+2029 1003 24200
+2031 1003 65333
+2032 1003 3116
+2033 1003 20322
+2034 1003 32709
+2035 1003 29574
+2036 1003 13926
+2037 1003 7116
+2038 1003 39886
+2039 1003 40795
+2040 1003 27279
+2042 1003 37458
+2043 1003 8195
+2044 1003 41542
+2045 1003 15166
+2046 1003 27403
+2047 1003 13477
+2048 1003 31386
+2049 1003 12700
+2050 1003 29101
+2051 1003 22533
+2052 1003 16110
+2054 1003 18403
+2055 1003 20576
+2056 1003 56873
+2057 1003 28124
+2058 1003 22823
+2059 1003 16419
+2409 1003 6032
+2410 1003 57283
+2411 1003 44121
+2412 1003 26333
+2413 1003 11606
+2414 1003 14547
+2415 1003 8771
+2416 1003 29753
+2417 1003 60249
+2418 1003 46770
+2419 1003 8038
+2420 1003 24293
+2498 1003 49428
+3514 1003 27852657
+892 1004 1
+896 1004 47761
+897 1004 63751
+898 1004 34851
+899 1004 37939
+900 1004 37939
+2007 1004 54862
+2013 1004 16015
+2014 1004 12259
+2015 1004 31238
+2016 1004 51478
+2017 1004 51478
+2018 1004 50978
+2019 1004 53720
+2021 1004 60560
+2022 1004 1875
+2023 1004 50826
+2024 1004 39580
+2025 1004 1051
+2026 1004 15094
+2027 1004 64044
+2028 1004 42026
+2029 1004 42026
+2031 1004 54467
+2032 1004 39438
+2033 1004 18294
+2034 1004 10566
+2035 1004 44351
+2036 1004 29257
+2037 1004 14531
+2038 1004 36432
+2039 1004 36432
+2040 1004 49948
+2042 1004 40426
+2043 1004 23804
+2044 1004 56919
+2045 1004 62768
+2046 1004 60618
+2047 1004 31361
+2048 1004 44233
+2049 1004 37555
+2050 1004 37555
+2051 1004 44123
+2052 1004 57961
+2054 1004 23509
+2055 1004 58864
+2056 1004 5802
+2057 1004 62388
+2058 1004 41206
+2059 1004 38433
+2409 1004 2137
+2410 1004 13314
+2411 1004 13314
+2412 1004 31102
+2413 1004 34174
+2414 1004 37721
+2415 1004 28816
+2416 1004 3599
+2417 1004 15846
+2418 1004 61686
+2419 1004 10816
+2420 1004 64561
+2498 1004 34249
+3515 1004 27852657
+893 1005 1
+2368 1005 5459
+2375 1005 10877
+2376 1005 7005
+2377 1005 4540
+2378 1005 4540
+2379 1005 54066
+2380 1005 15644
+2382 1005 51736
+2383 1005 52376
+2384 1005 19910
+2385 1005 58899
+2386 1005 35351
+2387 1005 30811
+2388 1005 6658
+2389 1005 43971
+2390 1005 43971
+2392 1005 50998
+2393 1005 45368
+2394 1005 43870
+2395 1005 63248
+2396 1005 13894
+2397 1005 48604
+2398 1005 59564
+2399 1005 3675
+2400 1005 3675
+2401 1005 3675
+2403 1005 1568
+2404 1005 36328
+2405 1005 36579
+2406 1005 6940
+2407 1005 59536
+2408 1005 10932
+2409 1005 54154
+2410 1005 37189
+2411 1005 37189
+2412 1005 37189
+2413 1005 49539
+2415 1005 20235
+2416 1005 1005
+2417 1005 60856
+2418 1005 51373
+2419 1005 34221
+2420 1005 23290
+2487 1005 38255
+2488 1005 63912
+2489 1005 63912
+2490 1005 63912
+2491 1005 13247
+2492 1005 40957
+2493 1005 59754
+2494 1005 57206
+2495 1005 56058
+2496 1005 45330
+2497 1005 13328
+2498 1005 29527
+2510 1005 42725
+3516 1005 27852657
+894 1006 1
+2420 1006 65520
+3517 1006 27852657
+895 1007 1
+896 1007 34121
+897 1007 4851
+898 1007 47197
+899 1007 45529
+900 1007 45529
+2016 1007 23087
+2017 1007 23087
+2018 1007 14712
+2019 1007 14712
+2021 1007 14415
+2022 1007 14415
+2023 1007 14415
+2024 1007 25053
+2025 1007 38429
+2026 1007 15342
+2027 1007 12480
+2028 1007 12480
+2029 1007 12480
+2031 1007 35768
+2032 1007 35768
+2033 1007 38029
+2034 1007 50114
+2035 1007 10321
+2036 1007 60500
+2037 1007 18185
+2038 1007 18185
+2039 1007 18185
+2040 1007 18185
+2042 1007 52379
+2043 1007 16821
+2044 1007 7501
+2045 1007 38140
+2046 1007 45652
+2047 1007 50673
+2048 1007 53577
+2049 1007 53577
+2050 1007 53577
+2051 1007 53577
+2052 1007 53577
+2054 1007 57715
+2055 1007 14500
+2056 1007 8009
+2057 1007 45016
+2058 1007 7007
+2059 1007 42222
+2409 1007 21767
+2410 1007 21767
+2411 1007 21767
+2412 1007 21767
+2413 1007 21767
+2414 1007 21767
+2415 1007 16204
+2416 1007 38563
+2417 1007 63755
+2418 1007 3780
+2419 1007 30714
+2420 1007 13690
+2498 1007 17005
+3518 1007 27852657
+896 1008 1
+897 1008 47787
+898 1008 42993
+899 1008 46858
+900 1008 46858
+2016 1008 29020
+2017 1008 29020
+2018 1008 51808
+2019 1008 51808
+2021 1008 60527
+2022 1008 60527
+2023 1008 60527
+2024 1008 23065
+2025 1008 43383
+2026 1008 14363
+2027 1008 42131
+2028 1008 42131
+2029 1008 42131
+2031 1008 33907
+2032 1008 33907
+2033 1008 31524
+2034 1008 44767
+2035 1008 39634
+2036 1008 25271
+2037 1008 18576
+2038 1008 18576
+2039 1008 18576
+2040 1008 18576
+2042 1008 45639
+2043 1008 20927
+2044 1008 59490
+2045 1008 32295
+2046 1008 47651
+2047 1008 22380
+2048 1008 59766
+2049 1008 59766
+2050 1008 59766
+2051 1008 59766
+2052 1008 59766
+2054 1008 48825
+2055 1008 27879
+2056 1008 16929
+2057 1008 58133
+2058 1008 13395
+2059 1008 37419
+2409 1008 36748
+2410 1008 36748
+2411 1008 36748
+2412 1008 36748
+2413 1008 36748
+2414 1008 36748
+2415 1008 7499
+2416 1008 39913
+2417 1008 15682
+2418 1008 42239
+2419 1008 62541
+2420 1008 47568
+2498 1008 32244
+3519 1008 27852657
+901 1009 1
+902 1009 1
+908 1009 1
+917 1009 18093
+918 1009 18094
+931 1009 44766
+932 1009 39567
+933 1009 57661
+952 1009 46840
+964 1009 9224
+979 1009 10552
+984 1009 58989
+991 1009 34958
+993 1009 18254
+997 1009 52309
+1026 1009 53212
+1030 1009 17351
+1041 1009 44726
+1103 1009 22764
+1114 1009 5042
+1130 1009 62274
+1238 1009 22764
+1240 1009 47926
+1268 1009 9983
+1443 1009 22764
+1446 1009 47926
+1450 1009 46746
+1721 1009 26754
+1724 1009 39959
+1728 1009 43856
+1733 1009 1508
+2081 1009 2689
+2084 1009 65235
+2087 1009 6432
+2088 1009 50812
+2091 1009 1265
+2092 1009 361
+2093 1009 32
+2108 1009 56740
+2113 1009 34817
+2128 1009 18014
+2154 1009 58979
+2155 1009 21429
+2160 1009 62343
+2166 1009 7342
+2173 1009 7342
+2187 1009 50361
+2188 1009 29257
+2190 1009 13657
+2191 1009 32900
+2196 1009 54322
+2202 1009 9567
+2209 1009 32472
+2217 1009 25130
+2232 1009 21329
+2233 1009 11930
+2234 1009 3688
+2236 1009 29288
+2241 1009 33906
+2247 1009 5964
+2254 1009 12249
+2262 1009 43204
+2271 1009 18074
+2287 1009 23979
+2288 1009 9129
+2289 1009 45384
+2290 1009 45981
+2296 1009 27324
+2302 1009 30874
+2309 1009 55718
+2317 1009 6116
+2326 1009 42647
+2336 1009 24573
+2353 1009 13754
+2354 1009 20088
+2355 1009 6142
+2356 1009 11761
+2357 1009 47932
+2368 1009 58043
+2375 1009 43397
+2383 1009 63959
+2392 1009 45131
+2402 1009 23818
+2413 1009 64766
+2431 1009 52919
+2432 1009 22170
+2433 1009 33186
+2434 1009 60333
+2435 1009 6092
+2440 1009 28571
+2446 1009 48720
+2453 1009 41933
+2461 1009 15080
+2470 1009 49966
+2480 1009 65394
+2491 1009 27951
+2503 1009 4369
+3520 1009 27852657
+902 1010 1
+905 1010 53654
+911 1010 14438
+921 1010 14438
+952 1010 64852
+967 1010 50414
+989 1010 64977
+1018 1010 59053
+1022 1010 41452
+1031 1010 8401
+1043 1010 16452
+1063 1010 16452
+1091 1010 3505
+1092 1010 25738
+1096 1010 33357
+1103 1010 51901
+1115 1010 10055
+1133 1010 25280
+1153 1010 16248
+1183 1010 65317
+1220 1010 26568
+1221 1010 22309
+1223 1010 8838
+1238 1010 674
+1251 1010 25071
+1271 1010 59514
+1296 1010 15010
+1328 1010 37960
+1372 1010 38164
+1425 1010 35901
+1426 1010 34153
+1428 1010 62229
+1433 1010 60533
+1457 1010 47385
+1477 1010 38492
+1504 1010 52609
+1539 1010 63135
+1584 1010 49623
+1639 1010 11459
+1703 1010 21027
+1704 1010 37123
+1706 1010 9275
+1711 1010 6186
+1721 1010 29179
+1756 1010 18750
+1783 1010 14527
+1818 1010 43850
+1863 1010 26416
+1918 1010 59818
+1984 1010 48359
+2061 1010 10380
+2062 1010 7736
+2065 1010 15446
+2071 1010 54712
+2081 1010 43794
+2096 1010 7095
+2116 1010 30560
+2143 1010 13450
+2179 1010 17069
+2224 1010 6900
+2279 1010 23179
+2345 1010 38175
+2423 1010 64846
+3521 1010 27852657
+903 1011 1
+917 1011 49171
+918 1011 49171
+931 1011 17901
+932 1011 5635
+933 1011 54806
+952 1011 8752
+964 1011 36605
+979 1011 53903
+984 1011 6583
+991 1011 49731
+993 1011 52959
+997 1011 40295
+1026 1011 37169
+1030 1011 56085
+1041 1011 44615
+1103 1011 29930
+1114 1011 27733
+1130 1011 10636
+1238 1011 29930
+1240 1011 56624
+1268 1011 70
+1441 1011 38610
+1443 1011 56841
+1446 1011 29713
+1450 1011 34909
+1719 1011 64653
+1721 1011 7014
+1724 1011 50532
+1728 1011 676
+1733 1011 60159
+2079 1011 54983
+2081 1011 44503
+2084 1011 56139
+2087 1011 45297
+2088 1011 13927
+2091 1011 31110
+2092 1011 36107
+2093 1011 39827
+2108 1011 241
+2113 1011 21004
+2128 1011 37425
+2154 1011 49128
+2155 1011 58392
+2160 1011 28737
+2166 1011 33690
+2173 1011 33690
+2187 1011 52294
+2188 1011 25290
+2190 1011 13113
+2191 1011 8749
+2196 1011 3015
+2202 1011 38082
+2209 1011 14431
+2217 1011 46262
+2232 1011 22720
+2233 1011 29994
+2234 1011 13251
+2236 1011 21245
+2241 1011 40447
+2247 1011 64964
+2254 1011 45218
+2262 1011 39836
+2271 1011 59095
+2287 1011 65209
+2288 1011 65480
+2289 1011 60548
+2290 1011 43640
+2296 1011 42784
+2302 1011 17055
+2309 1011 58905
+2317 1011 10669
+2326 1011 8216
+2336 1011 14642
+2353 1011 14002
+2354 1011 10720
+2355 1011 8090
+2356 1011 22761
+2357 1011 52196
+2368 1011 10724
+2375 1011 44349
+2383 1011 24918
+2392 1011 40334
+2402 1011 45890
+2413 1011 31248
+2431 1011 48109
+2432 1011 3519
+2433 1011 53985
+2434 1011 35577
+2435 1011 2016
+2440 1011 3498
+2446 1011 36312
+2453 1011 63901
+2461 1011 12224
+2470 1011 33218
+2480 1011 37475
+2491 1011 64750
+2503 1011 42183
+3522 1011 27852657
+904 1012 1
+905 1012 1
+906 1012 1
+907 1012 2
+908 1012 1
+910 1012 5617
+911 1012 5617
+912 1012 29953
+913 1012 35571
+914 1012 29954
+915 1012 29952
+916 1012 35569
+917 1012 59905
+918 1012 29952
+923 1012 1
+924 1012 1
+926 1012 5617
+927 1012 29953
+928 1012 29952
+929 1012 35569
+930 1012 35569
+931 1012 35569
+932 1012 35569
+933 1012 35569
+958 1012 62899
+959 1012 62899
+962 1012 24593
+963 1012 2121
+964 1012 4743
+975 1012 29952
+976 1012 29952
+977 1012 54545
+978 1012 32073
+979 1012 33821
+984 1012 64647
+1731 1012 53494
+1732 1012 56925
+1733 1012 56925
+1873 1012 13784
+1875 1012 37530
+1893 1012 24310
+1901 1012 24310
+1910 1012 24310
+1926 1012 58815
+1927 1012 58815
+1928 1012 7078
+1929 1012 32374
+1941 1012 35868
+1948 1012 52946
+1956 1012 52946
+1965 1012 11735
+1975 1012 52946
+1992 1012 58815
+1993 1012 58815
+1994 1012 7078
+1995 1012 32374
+1996 1012 32374
+2007 1012 35868
+2014 1012 52946
+2022 1012 52946
+2031 1012 11735
+2041 1012 40371
+2052 1012 52946
+2080 1012 27004
+2081 1012 27004
+2082 1012 42231
+2083 1012 44963
+2084 1012 17959
+2085 1012 33411
+2086 1012 37314
+2087 1012 1917
+2088 1012 49479
+2089 1012 46259
+2090 1012 6080
+2091 1012 54085
+2092 1012 27799
+2093 1012 43841
+2104 1012 46263
+2105 1012 20748
+2106 1012 45987
+2107 1012 25760
+2108 1012 5724
+2113 1012 27404
+2126 1012 11799
+2127 1012 44563
+2128 1012 37924
+2133 1012 24007
+2153 1012 17415
+2154 1012 50179
+2155 1012 43540
+2160 1012 22984
+2166 1012 28021
+2173 1012 28021
+2187 1012 9988
+2188 1012 9879
+2190 1012 12003
+2191 1012 5364
+2196 1012 17572
+2202 1012 58489
+2209 1012 11709
+2217 1012 49209
+2232 1012 56792
+2233 1012 56683
+2234 1012 34049
+2236 1012 19540
+2241 1012 43547
+2247 1012 20420
+2254 1012 62240
+2262 1012 56202
+2271 1012 6993
+2287 1012 37206
+2288 1012 37097
+2289 1012 14463
+2290 1012 56343
+2296 1012 64405
+2302 1012 39065
+2309 1012 6485
+2317 1012 4884
+2326 1012 11043
+2336 1012 4050
+2353 1012 28548
+2354 1012 30916
+2355 1012 1899
+2356 1012 13591
+2357 1012 47676
+2368 1012 45945
+2375 1012 38466
+2383 1012 10378
+2392 1012 17432
+2402 1012 24632
+2413 1012 20582
+2431 1012 64654
+2432 1012 56562
+2433 1012 38940
+2434 1012 59235
+2435 1012 22398
+2440 1012 31810
+2446 1012 61338
+2453 1012 32506
+2461 1012 31045
+2470 1012 19650
+2480 1012 4353
+2491 1012 45813
+2503 1012 62406
+3523 1012 27852657
+905 1013 1
+908 1013 65520
+917 1013 17288
+918 1013 17287
+931 1013 62914
+932 1013 13837
+933 1013 31124
+952 1013 8752
+964 1013 46980
+979 1013 37861
+984 1013 22005
+991 1013 65089
+993 1013 63787
+997 1013 16179
+1026 1013 63355
+1030 1013 16611
+1041 1013 56983
+1103 1013 29930
+1114 1013 14445
+1130 1013 43635
+1238 1013 29930
+1240 1013 18023
+1268 1013 62648
+1443 1013 29930
+1446 1013 18023
+1450 1013 50392
+1721 1013 6146
+1724 1013 9300
+1728 1013 45084
+1733 1013 50044
+2081 1013 33965
+2084 1013 28286
+2087 1013 17311
+2088 1013 44851
+2091 1013 7385
+2092 1013 62261
+2093 1013 8504
+2108 1013 45469
+2113 1013 25416
+2128 1013 45338
+2154 1013 37146
+2155 1013 13463
+2160 1013 63840
+2166 1013 37508
+2173 1013 37508
+2187 1013 65480
+2188 1013 29801
+2190 1013 19378
+2191 1013 33483
+2196 1013 12794
+2202 1013 35664
+2209 1013 45762
+2217 1013 8254
+2232 1013 28532
+2233 1013 35824
+2234 1013 16801
+2236 1013 50085
+2241 1013 58919
+2247 1013 52071
+2254 1013 32180
+2262 1013 58066
+2271 1013 49812
+2287 1013 22016
+2288 1013 22305
+2289 1013 51185
+2290 1013 55963
+2296 1013 26117
+2302 1013 39898
+2309 1013 19027
+2317 1013 42644
+2326 1013 23044
+2336 1013 38753
+2353 1013 51742
+2354 1013 41223
+2355 1013 1696
+2356 1013 46469
+2357 1013 22847
+2368 1013 46057
+2375 1013 4412
+2383 1013 5696
+2392 1013 4316
+2402 1013 25974
+2413 1013 52742
+2431 1013 62611
+2432 1013 4523
+2433 1013 8744
+2434 1013 56469
+2435 1013 47932
+2440 1013 61616
+2446 1013 50405
+2453 1013 54944
+2461 1013 34328
+2470 1013 12000
+2480 1013 45126
+2491 1013 18225
+2503 1013 48536
+3524 1013 27852657
+906 1014 1
+917 1014 3872
+918 1014 3872
+931 1014 814
+932 1014 64747
+933 1014 3098
+964 1014 51099
+979 1014 55219
+984 1014 7218
+991 1014 64763
+993 1014 41409
+997 1014 45731
+1026 1014 40651
+1030 1014 46489
+1041 1014 13217
+1114 1014 21619
+1130 1014 61290
+1240 1014 39289
+1268 1014 24662
+1446 1014 39289
+1450 1014 9811
+1724 1014 57564
+1728 1014 59406
+1733 1014 43346
+2084 1014 14384
+2087 1014 13913
+2088 1014 27676
+2091 1014 43689
+2092 1014 53929
+2093 1014 45294
+2108 1014 38134
+2113 1014 33654
+2128 1014 25122
+2154 1014 585
+2155 1014 64980
+2160 1014 26017
+2166 1014 55871
+2173 1014 55871
+2187 1014 23323
+2188 1014 50796
+2190 1014 914
+2191 1014 31231
+2196 1014 57995
+2202 1014 13479
+2209 1014 6264
+2217 1014 15914
+2232 1014 47913
+2233 1014 12425
+2234 1014 4121
+2236 1014 9675
+2241 1014 57343
+2247 1014 43143
+2254 1014 10616
+2262 1014 63649
+2271 1014 47735
+2287 1014 65308
+2288 1014 56578
+2289 1014 52500
+2290 1014 14002
+2296 1014 59972
+2302 1014 2636
+2309 1014 27695
+2317 1014 9595
+2326 1014 17787
+2336 1014 35573
+2353 1014 26587
+2354 1014 5226
+2355 1014 9020
+2356 1014 1886
+2357 1014 48046
+2368 1014 41758
+2375 1014 34253
+2383 1014 35600
+2392 1014 61489
+2402 1014 65505
+2413 1014 29932
+2431 1014 46555
+2432 1014 29837
+2433 1014 4088
+2434 1014 41177
+2435 1014 55788
+2440 1014 17456
+2446 1014 48183
+2453 1014 27964
+2461 1014 26372
+2470 1014 37684
+2480 1014 54511
+2491 1014 54044
+2503 1014 60509
+3525 1014 27852657
+907 1015 1
+908 1015 1
+917 1015 24124
+918 1015 24125
+931 1015 37946
+932 1015 3806
+933 1015 27931
+964 1015 23325
+979 1015 63169
+984 1015 2254
+991 1015 57842
+993 1015 35246
+997 1015 13938
+1026 1015 27567
+1030 1015 21617
+1041 1015 36361
+1114 1015 49184
+1130 1015 34122
+1240 1015 52061
+1268 1015 9508
+1446 1015 52061
+1450 1015 34473
+1724 1015 21050
+1728 1015 15469
+1733 1015 39357
+2084 1015 51956
+2087 1015 54923
+2088 1015 42223
+2091 1015 15092
+2092 1015 32581
+2093 1015 55285
+2108 1015 42692
+2113 1015 59788
+2128 1015 45079
+2154 1015 37326
+2155 1015 61062
+2160 1015 18237
+2166 1015 9078
+2173 1015 9078
+2187 1015 30880
+2188 1015 31381
+2190 1015 2644
+2191 1015 28498
+2196 1015 19633
+2202 1015 13596
+2209 1015 18834
+2217 1015 9756
+2232 1015 7627
+2233 1015 1907
+2234 1015 61087
+2236 1015 50266
+2241 1015 51553
+2247 1015 54725
+2254 1015 1841
+2262 1015 21009
+2271 1015 11253
+2287 1015 35028
+2288 1015 35456
+2289 1015 53201
+2290 1015 22810
+2296 1015 2663
+2302 1015 3794
+2309 1015 60351
+2317 1015 3044
+2326 1015 19821
+2336 1015 8568
+2353 1015 47153
+2354 1015 24758
+2355 1015 47725
+2356 1015 17299
+2357 1015 26305
+2368 1015 61423
+2375 1015 3572
+2383 1015 10656
+2392 1015 50536
+2402 1015 59845
+2413 1015 51277
+2431 1015 39490
+2432 1015 63902
+2433 1015 41676
+2434 1015 3412
+2435 1015 14819
+2440 1015 25824
+2446 1015 54056
+2453 1015 40601
+2461 1015 11429
+2470 1015 60843
+2480 1015 31351
+2491 1015 43488
+2503 1015 19138
+3526 1015 27852657
+908 1016 1
+924 1016 42177
+927 1016 44805
+931 1016 44805
+962 1016 1618
+977 1016 52528
+982 1016 30194
+986 1016 49726
+987 1016 63041
+995 1016 17235
+1020 1016 47246
+1028 1016 33030
+1039 1016 38835
+1112 1016 14755
+1128 1016 29456
+1226 1016 17127
+1266 1016 26929
+1431 1016 17127
+1439 1016 55593
+1709 1016 16596
+1717 1016 56882
+1731 1016 34742
+2068 1016 11021
+2074 1016 1257
+2077 1016 41359
+2084 1016 44069
+2087 1016 50950
+2091 1016 46128
+2106 1016 54656
+2111 1016 51467
+2126 1016 42655
+2149 1016 2917
+2153 1016 36529
+2158 1016 62438
+2164 1016 60100
+2171 1016 60100
+2180 1016 29797
+2181 1016 48695
+2185 1016 49795
+2189 1016 39496
+2194 1016 54458
+2200 1016 6883
+2207 1016 18255
+2215 1016 23676
+2225 1016 6379
+2226 1016 6413
+2227 1016 52705
+2234 1016 46462
+2239 1016 45318
+2245 1016 61432
+2252 1016 41113
+2260 1016 32576
+2269 1016 8900
+2280 1016 8618
+2281 1016 43764
+2282 1016 23342
+2285 1016 39022
+2294 1016 58905
+2300 1016 22821
+2307 1016 55653
+2315 1016 906
+2324 1016 527
+2334 1016 57148
+2346 1016 57666
+2347 1016 24401
+2348 1016 37843
+2351 1016 61356
+2355 1016 9835
+2366 1016 39878
+2373 1016 21372
+2381 1016 57368
+2390 1016 11755
+2400 1016 25135
+2411 1016 33508
+2424 1016 25080
+2425 1016 31669
+2426 1016 7630
+2429 1016 26145
+2433 1016 59299
+2438 1016 1921
+2444 1016 10144
+2451 1016 18100
+2459 1016 2112
+2468 1016 5134
+2478 1016 45544
+2489 1016 26292
+2501 1016 24530
+3527 1016 27852657
+909 1017 1
+917 1017 43986
+918 1017 43986
+921 1017 1
+931 1017 49814
+932 1017 16329
+933 1017 60315
+952 1017 59992
+964 1017 46946
+979 1017 45408
+984 1017 58777
+991 1017 55404
+993 1017 43785
+997 1017 23438
+1026 1017 33668
+1030 1017 33555
+1041 1017 3524
+1103 1017 61958
+1114 1017 1702
+1130 1017 6470
+1236 1017 5488
+1238 1017 56470
+1240 1017 33860
+1268 1017 25713
+1441 1017 9584
+1443 1017 52374
+1446 1017 37956
+1450 1017 57298
+1719 1017 18991
+1721 1017 43223
+1724 1017 22259
+1728 1017 15213
+1733 1017 1112
+2079 1017 25898
+2081 1017 13207
+2084 1017 1567
+2087 1017 56679
+2088 1017 37984
+2091 1017 10280
+2092 1017 62434
+2093 1017 59066
+2108 1017 64971
+2113 1017 44812
+2128 1017 42447
+2154 1017 20337
+2155 1017 40582
+2160 1017 37130
+2166 1017 54293
+2173 1017 54293
+2187 1017 23129
+2188 1017 21805
+2190 1017 55053
+2191 1017 64209
+2196 1017 35354
+2202 1017 20674
+2209 1017 60377
+2217 1017 6084
+2232 1017 46839
+2233 1017 26551
+2234 1017 34148
+2236 1017 42998
+2241 1017 51008
+2247 1017 21725
+2254 1017 24156
+2262 1017 53430
+2271 1017 47346
+2287 1017 61892
+2288 1017 51257
+2289 1017 5741
+2290 1017 28548
+2296 1017 38955
+2302 1017 24138
+2309 1017 25921
+2317 1017 65287
+2326 1017 20567
+2336 1017 38742
+2353 1017 63268
+2354 1017 39784
+2355 1017 13995
+2356 1017 60615
+2357 1017 32371
+2368 1017 6884
+2375 1017 10660
+2383 1017 42375
+2392 1017 56007
+2402 1017 31513
+2413 1017 58292
+2431 1017 47383
+2432 1017 500
+2433 1017 25963
+2434 1017 47529
+2435 1017 1690
+2440 1017 37640
+2446 1017 5174
+2453 1017 21261
+2461 1017 51650
+2470 1017 31768
+2480 1017 61495
+2491 1017 31994
+2503 1017 17668
+3528 1017 27852657
+910 1018 1
+917 1018 64659
+918 1018 64659
+921 1018 65520
+931 1018 27470
+932 1018 58271
+933 1018 57409
+952 1018 5529
+964 1018 54075
+979 1018 12358
+984 1018 15692
+991 1018 10117
+993 1018 56490
+997 1018 59221
+1026 1018 1086
+1030 1018 49104
+1041 1018 7379
+1103 1018 3563
+1114 1018 50190
+1130 1018 15724
+1238 1018 3563
+1240 1018 37149
+1268 1018 62757
+1443 1018 3563
+1446 1018 37149
+1450 1018 25832
+1721 1018 3307
+1724 1018 62253
+1728 1018 64572
+1733 1018 50697
+2081 1018 26416
+2084 1018 24331
+2087 1018 31149
+2088 1018 2241
+2091 1018 37656
+2092 1018 21847
+2093 1018 36883
+2108 1018 10000
+2113 1018 20895
+2128 1018 8418
+2154 1018 22972
+2155 1018 52421
+2160 1018 24870
+2166 1018 18735
+2173 1018 18735
+2187 1018 58165
+2188 1018 3631
+2190 1018 12561
+2191 1018 2568
+2196 1018 58803
+2202 1018 52076
+2209 1018 29680
+2217 1018 10945
+2232 1018 30875
+2233 1018 63542
+2234 1018 1573
+2236 1018 23625
+2241 1018 43913
+2247 1018 42769
+2254 1018 30612
+2262 1018 10380
+2271 1018 64956
+2287 1018 6307
+2288 1018 36361
+2289 1018 32193
+2290 1018 56104
+2296 1018 7398
+2302 1018 16582
+2309 1018 21983
+2317 1018 37542
+2326 1018 55090
+2336 1018 55655
+2353 1018 62089
+2354 1018 8729
+2355 1018 29727
+2356 1018 13579
+2357 1018 55583
+2368 1018 50255
+2375 1018 56350
+2383 1018 13346
+2392 1018 50713
+2402 1018 1577
+2413 1018 11443
+2431 1018 31460
+2432 1018 56741
+2433 1018 44124
+2434 1018 30552
+2435 1018 62808
+2440 1018 33928
+2446 1018 50226
+2453 1018 6416
+2461 1018 3266
+2470 1018 13452
+2480 1018 26497
+2491 1018 30583
+2503 1018 53029
+3529 1018 27852657
+911 1019 1
+917 1019 44779
+918 1019 44779
+921 1019 1
+931 1019 43692
+932 1019 43654
+933 1019 22912
+952 1019 59992
+964 1019 61873
+979 1019 56600
+984 1019 17639
+991 1019 17743
+993 1019 37273
+997 1019 1402
+1026 1019 55016
+1030 1019 49180
+1041 1019 43459
+1103 1019 61958
+1114 1019 38675
+1130 1019 42844
+1238 1019 61958
+1240 1019 46764
+1268 1019 44342
+1443 1019 61958
+1446 1019 46764
+1450 1019 2180
+1721 1019 62214
+1724 1019 12191
+1728 1019 40486
+1733 1019 28416
+2081 1019 39105
+2084 1019 34786
+2087 1019 7101
+2088 1019 49470
+2091 1019 10704
+2092 1019 2619
+2093 1019 32858
+2108 1019 26317
+2113 1019 15173
+2128 1019 28515
+2154 1019 29297
+2155 1019 45813
+2160 1019 36868
+2166 1019 13821
+2173 1019 13821
+2187 1019 21407
+2188 1019 39226
+2190 1019 8816
+2191 1019 42453
+2196 1019 63533
+2202 1019 21070
+2209 1019 44167
+2217 1019 30346
+2232 1019 29127
+2233 1019 47878
+2234 1019 44976
+2236 1019 23795
+2241 1019 22758
+2247 1019 63543
+2254 1019 41481
+2262 1019 56436
+2271 1019 26090
+2287 1019 2831
+2288 1019 36668
+2289 1019 9958
+2290 1019 10028
+2296 1019 58226
+2302 1019 31486
+2309 1019 801
+2317 1019 56522
+2326 1019 40653
+2336 1019 14563
+2353 1019 36940
+2354 1019 30519
+2355 1019 4337
+2356 1019 47513
+2357 1019 54722
+2368 1019 49786
+2375 1019 46650
+2383 1019 1623
+2392 1019 57335
+2402 1019 53790
+2413 1019 39227
+2431 1019 45222
+2432 1019 24521
+2433 1019 43957
+2434 1019 10034
+2435 1019 44741
+2440 1019 44165
+2446 1019 38995
+2453 1019 28888
+2461 1019 48661
+2470 1019 58397
+2480 1019 38428
+2491 1019 39295
+2503 1019 38020
+3530 1019 27852657
+912 1020 1
+917 1020 60923
+918 1020 60923
+931 1020 5472
+932 1020 62634
+933 1020 58036
+964 1020 53252
+979 1020 40027
+984 1020 44811
+993 1020 50108
+997 1020 56230
+1026 1020 50108
+1030 1020 56230
+1041 1020 41830
+1114 1020 40817
+1130 1020 23694
+1268 1020 36565
+1450 1020 37997
+1728 1020 29979
+1733 1020 31947
+2087 1020 26657
+2088 1020 59264
+2091 1020 39212
+2092 1020 33735
+2093 1020 3877
+2108 1020 51580
+2113 1020 11954
+2128 1020 20924
+2154 1020 18375
+2155 1020 5898
+2160 1020 18314
+2166 1020 34986
+2173 1020 34986
+2187 1020 55979
+2188 1020 19440
+2190 1020 54733
+2191 1020 33775
+2196 1020 25286
+2202 1020 41769
+2209 1020 48905
+2217 1020 13919
+2232 1020 27851
+2233 1020 52640
+2234 1020 263
+2236 1020 35919
+2241 1020 28998
+2247 1020 55371
+2254 1020 64760
+2262 1020 3195
+2271 1020 54797
+2287 1020 30297
+2288 1020 11222
+2289 1020 41988
+2290 1020 55775
+2296 1020 39083
+2302 1020 6676
+2309 1020 42032
+2317 1020 8053
+2326 1020 50664
+2336 1020 61388
+2353 1020 58222
+2354 1020 52713
+2355 1020 54887
+2356 1020 31139
+2357 1020 7463
+2368 1020 28783
+2375 1020 20939
+2383 1020 9746
+2392 1020 35501
+2402 1020 62840
+2413 1020 1452
+2431 1020 19037
+2432 1020 53179
+2433 1020 52867
+2434 1020 48583
+2435 1020 26057
+2440 1020 16550
+2446 1020 20929
+2453 1020 45296
+2461 1020 34579
+2470 1020 53319
+2480 1020 17104
+2491 1020 65113
+2503 1020 28229
+3531 1020 27852657
+913 1021 1
+917 1021 20706
+918 1021 20706
+931 1021 33101
+932 1021 46936
+933 1021 2121
+964 1021 37474
+979 1021 29473
+984 1021 59641
+991 1021 37661
+993 1021 26357
+997 1021 58344
+1026 1021 64018
+1030 1021 20683
+1041 1021 15123
+1114 1021 19180
+1130 1021 43587
+1240 1021 47129
+1268 1021 37082
+1446 1021 47129
+1450 1021 1940
+1724 1021 56598
+1728 1021 2238
+1733 1021 28998
+2084 1021 6404
+2087 1021 31526
+2088 1021 7060
+2091 1021 33466
+2092 1021 834
+2093 1021 12005
+2108 1021 22816
+2113 1021 20959
+2128 1021 50404
+2154 1021 12466
+2155 1021 9154
+2160 1021 58939
+2166 1021 61304
+2173 1021 61304
+2187 1021 39009
+2188 1021 21823
+2190 1021 64029
+2191 1021 4043
+2196 1021 61324
+2202 1021 59180
+2209 1021 60862
+2217 1021 65079
+2232 1021 52816
+2233 1021 39975
+2234 1021 57499
+2236 1021 30218
+2241 1021 48495
+2247 1021 34225
+2254 1021 37810
+2262 1021 17054
+2271 1021 17496
+2287 1021 24875
+2288 1021 57449
+2289 1021 38781
+2290 1021 56127
+2296 1021 843
+2302 1021 915
+2309 1021 48817
+2317 1021 42868
+2326 1021 58067
+2336 1021 40571
+2353 1021 63975
+2354 1021 50218
+2355 1021 50110
+2356 1021 38058
+2357 1021 22870
+2368 1021 30785
+2375 1021 63212
+2383 1021 28639
+2392 1021 6138
+2402 1021 24115
+2413 1021 49065
+2431 1021 26402
+2432 1021 33748
+2433 1021 5708
+2434 1021 62408
+2435 1021 41903
+2440 1021 46328
+2446 1021 6784
+2453 1021 65038
+2461 1021 34283
+2470 1021 3856
+2480 1021 48816
+2491 1021 3231
+2503 1021 40266
+3532 1021 27852657
+914 1022 1
+917 1022 44832
+918 1022 44831
+931 1022 210
+932 1022 18745
+933 1022 63576
+964 1022 6586
+979 1022 62953
+984 1022 54422
+991 1022 27860
+993 1022 36213
+997 1022 2693
+1026 1022 64073
+1030 1022 40354
+1041 1022 45274
+1114 1022 38906
+1130 1022 6751
+1240 1022 18392
+1268 1022 18242
+1446 1022 18392
+1450 1022 6835
+1724 1022 8923
+1728 1022 18540
+1733 1022 4636
+2084 1022 59117
+2087 1022 19431
+2088 1022 53778
+2091 1022 39748
+2092 1022 28606
+2093 1022 45985
+2108 1022 1445
+2113 1022 26922
+2128 1022 9098
+2154 1022 22760
+2155 1022 16406
+2160 1022 52642
+2166 1022 19313
+2173 1022 19313
+2187 1022 10456
+2188 1022 19461
+2190 1022 26991
+2191 1022 37559
+2196 1022 32412
+2202 1022 32702
+2209 1022 38091
+2217 1022 18778
+2232 1022 22709
+2233 1022 57403
+2234 1022 64890
+2236 1022 51499
+2241 1022 53237
+2247 1022 4599
+2254 1022 62583
+2262 1022 30636
+2271 1022 11858
+2287 1022 41003
+2288 1022 45137
+2289 1022 58224
+2290 1022 55722
+2296 1022 48816
+2302 1022 59605
+2309 1022 28828
+2317 1022 4680
+2326 1022 15285
+2336 1022 3427
+2353 1022 58010
+2354 1022 61599
+2355 1022 54593
+2356 1022 8634
+2357 1022 6417
+2368 1022 20929
+2375 1022 26255
+2383 1022 27860
+2392 1022 54996
+2402 1022 14804
+2413 1022 11377
+2431 1022 34374
+2432 1022 28475
+2433 1022 26855
+2434 1022 21589
+2435 1022 35262
+2440 1022 1585
+2446 1022 60401
+2453 1022 35645
+2461 1022 23183
+2470 1022 10647
+2480 1022 16310
+2491 1022 51952
+2503 1022 61713
+3533 1022 27852657
+915 1023 1
+917 1023 62791
+918 1023 62791
+930 1023 1
+931 1023 45435
+932 1023 1594
+933 1023 64385
+964 1023 58791
+979 1023 27043
+984 1023 32637
+993 1023 59154
+997 1023 29501
+1026 1023 59154
+1030 1023 29501
+1041 1023 39230
+1114 1023 23134
+1130 1023 22912
+1268 1023 39867
+1450 1023 34663
+1728 1023 53508
+1733 1023 6276
+2087 1023 31303
+2088 1023 16642
+2091 1023 55930
+2092 1023 34214
+2093 1023 47826
+2108 1023 14072
+2113 1023 21609
+2128 1023 35326
+2154 1023 46295
+2155 1023 15239
+2160 1023 59807
+2166 1023 50472
+2173 1023 50472
+2187 1023 15153
+2188 1023 10447
+2190 1023 17117
+2191 1023 56492
+2196 1023 57884
+2202 1023 7934
+2209 1023 18448
+2217 1023 33497
+2232 1023 29157
+2233 1023 17366
+2234 1023 65432
+2236 1023 36461
+2241 1023 34792
+2247 1023 64732
+2254 1023 53543
+2262 1023 21919
+2271 1023 53943
+2287 1023 16169
+2288 1023 12813
+2289 1023 797
+2290 1023 58890
+2296 1023 7578
+2302 1023 53531
+2309 1023 16335
+2317 1023 54889
+2326 1023 19925
+2336 1023 31503
+2353 1023 57823
+2354 1023 54048
+2355 1023 13479
+2356 1023 48296
+2357 1023 18804
+2368 1023 55008
+2375 1023 46834
+2383 1023 37818
+2392 1023 55239
+2402 1023 19857
+2413 1023 53875
+2431 1023 4776
+2432 1023 51857
+2433 1023 56730
+2434 1023 6289
+2435 1023 14684
+2440 1023 50012
+2446 1023 33444
+2453 1023 27708
+2461 1023 11567
+2470 1023 25202
+2480 1023 5919
+2491 1023 63920
+2503 1023 24339
+3534 1023 27852657
+916 1024 1
+917 1024 65503
+918 1024 65503
+930 1024 65520
+931 1024 6422
+932 1024 63570
+933 1024 63552
+964 1024 52742
+979 1024 34402
+984 1024 45212
+993 1024 40960
+997 1024 48452
+1026 1024 40960
+1030 1024 48452
+1041 1024 46585
+1114 1024 23891
+1130 1024 17237
+1268 1024 56252
+1450 1024 11891
+1728 1024 42372
+1733 1024 40622
+2087 1024 43072
+2088 1024 39940
+2091 1024 15581
+2092 1024 44611
+2093 1024 21921
+2108 1024 22201
+2113 1024 34130
+2128 1024 53505
+2154 1024 9505
+2155 1024 59710
+2160 1024 38801
+2166 1024 48738
+2173 1024 48738
+2187 1024 26360
+2188 1024 36082
+2190 1024 13659
+2191 1024 39904
+2196 1024 35746
+2202 1024 10434
+2209 1024 13664
+2217 1024 30447
+2232 1024 27713
+2233 1024 58582
+2234 1024 24359
+2236 1024 60192
+2241 1024 65329
+2247 1024 48829
+2254 1024 24220
+2262 1024 35327
+2271 1024 4880
+2287 1024 20114
+2288 1024 26544
+2289 1024 25858
+2290 1024 56106
+2296 1024 48425
+2302 1024 13353
+2309 1024 56292
+2317 1024 43533
+2326 1024 31166
+2336 1024 26286
+2353 1024 54947
+2354 1024 12670
+2355 1024 55502
+2356 1024 60828
+2357 1024 16349
+2368 1024 42245
+2375 1024 1966
+2383 1024 50767
+2392 1024 39369
+2402 1024 3331
+2413 1024 42566
+2431 1024 33461
+2432 1024 10554
+2433 1024 9339
+2434 1024 24130
+2435 1024 61271
+2440 1024 26435
+2446 1024 53163
+2453 1024 37774
+2461 1024 58598
+2470 1024 13603
+2480 1024 53724
+2491 1024 50176
+2503 1024 21143
+3535 1024 27852657
+917 1025 1
+927 1025 65513
+928 1025 62893
+932 1025 62893
+963 1025 50271
+978 1025 9143
+983 1025 21765
+988 1025 18275
+996 1025 62626
+1021 1025 18275
+1029 1025 62626
+1040 1025 53833
+1113 1025 15380
+1129 1025 16295
+1267 1025 15301
+1440 1025 58322
+1718 1025 57564
+1732 1025 18627
+2077 1025 53930
+2078 1025 2807
+2087 1025 3543
+2088 1025 18186
+2092 1025 37542
+2107 1025 42322
+2112 1025 55275
+2127 1025 37835
+2150 1025 41015
+2154 1025 32385
+2159 1025 18472
+2165 1025 65026
+2172 1025 65026
+2183 1025 19852
+2184 1025 63571
+2186 1025 3600
+2190 1025 15718
+2195 1025 22132
+2201 1025 50307
+2208 1025 52559
+2216 1025 53054
+2228 1025 3957
+2229 1025 37708
+2230 1025 17122
+2235 1025 55280
+2240 1025 43004
+2246 1025 36303
+2253 1025 47494
+2261 1025 36516
+2270 1025 48983
+2283 1025 49142
+2284 1025 53598
+2285 1025 29957
+2286 1025 14197
+2295 1025 44478
+2301 1025 41890
+2308 1025 17169
+2316 1025 37100
+2325 1025 48549
+2335 1025 65087
+2349 1025 62308
+2350 1025 15332
+2351 1025 47378
+2352 1025 19325
+2356 1025 7507
+2367 1025 51866
+2374 1025 11222
+2382 1025 7023
+2391 1025 7675
+2401 1025 18033
+2412 1025 18467
+2427 1025 3107
+2428 1025 51492
+2429 1025 3931
+2430 1025 52243
+2434 1025 31488
+2439 1025 13698
+2445 1025 43871
+2452 1025 57279
+2460 1025 34186
+2469 1025 8215
+2479 1025 59343
+2490 1025 59043
+2502 1025 58291
+3536 1025 27852657
+918 1026 1
+927 1026 53615
+928 1026 2621
+932 1026 2620
+963 1026 29262
+978 1026 64799
+983 1026 38157
+988 1026 47246
+996 1026 11052
+1021 1026 47246
+1029 1026 11052
+1040 1026 24012
+1113 1026 58298
+1129 1026 4707
+1267 1026 64990
+1440 1026 7199
+1718 1026 7957
+1732 1026 42936
+2077 1026 11585
+2078 1026 62708
+2087 1026 55931
+2088 1026 18904
+2092 1026 46756
+2107 1026 15834
+2112 1026 21017
+2127 1026 36064
+2150 1026 50374
+2154 1026 1006
+2159 1026 62047
+2165 1026 33119
+2172 1026 33119
+2183 1026 2453
+2184 1026 13021
+2186 1026 40386
+2190 1026 18211
+2195 1026 11115
+2201 1026 33169
+2208 1026 46278
+2216 1026 13159
+2228 1026 50714
+2229 1026 43466
+2230 1026 36031
+2235 1026 55926
+2240 1026 40373
+2246 1026 43633
+2253 1026 49931
+2261 1026 6741
+2270 1026 59103
+2283 1026 36233
+2284 1026 40306
+2285 1026 58568
+2286 1026 14371
+2295 1026 53509
+2301 1026 33304
+2308 1026 61326
+2316 1026 3888
+2325 1026 22340
+2335 1026 28758
+2349 1026 12990
+2350 1026 43454
+2351 1026 31662
+2352 1026 7523
+2356 1026 532
+2367 1026 222
+2374 1026 15796
+2382 1026 37087
+2391 1026 3442
+2401 1026 58183
+2412 1026 29425
+2427 1026 34369
+2428 1026 44232
+2429 1026 48322
+2430 1026 20993
+2434 1026 23139
+2439 1026 17539
+2445 1026 17228
+2452 1026 9774
+2460 1026 62582
+2469 1026 15954
+2479 1026 25566
+2490 1026 7399
+2502 1026 28299
+3537 1026 27852657
+919 1027 1
+921 1027 65520
+931 1027 19059
+932 1027 39048
+933 1027 39048
+964 1027 48374
+979 1027 25912
+984 1027 16586
+991 1027 15795
+993 1027 49726
+997 1027 57404
+1030 1027 41609
+1041 1027 17706
+1114 1027 41609
+1130 1027 9059
+1236 1027 2970
+1238 1027 62551
+1240 1027 51364
+1268 1027 10440
+1441 1027 14409
+1443 1027 51112
+1446 1027 62803
+1450 1027 2718
+1719 1027 58266
+1721 1027 7255
+1724 1027 41670
+1728 1027 23851
+1733 1027 62210
+2079 1027 12672
+2081 1027 52849
+2084 1027 1651
+2087 1027 45206
+2088 1027 43555
+2091 1027 29446
+2092 1027 7835
+2093 1027 45849
+2108 1027 27802
+2113 1027 52010
+2128 1027 8465
+2154 1027 7064
+2155 1027 17585
+2160 1027 60765
+2166 1027 47221
+2173 1027 47221
+2187 1027 51833
+2188 1027 45765
+2190 1027 51697
+2191 1027 15390
+2196 1027 27609
+2202 1027 50802
+2209 1027 33443
+2217 1027 51743
+2232 1027 56023
+2233 1027 42620
+2234 1027 49215
+2236 1027 48982
+2241 1027 35971
+2247 1027 41859
+2254 1027 63205
+2262 1027 45498
+2271 1027 59276
+2287 1027 26062
+2288 1027 27042
+2289 1027 54431
+2290 1027 56201
+2296 1027 24775
+2302 1027 63190
+2309 1027 62006
+2317 1027 50876
+2326 1027 61440
+2336 1027 2164
+2353 1027 29489
+2354 1027 33276
+2355 1027 27082
+2356 1027 43236
+2357 1027 630
+2368 1027 26114
+2375 1027 43666
+2383 1027 46724
+2392 1027 26319
+2402 1027 56990
+2413 1027 54826
+2431 1027 23004
+2432 1027 101
+2433 1027 15188
+2434 1027 23295
+2435 1027 12861
+2440 1027 36073
+2446 1027 13168
+2453 1027 16023
+2461 1027 39481
+2470 1027 32610
+2480 1027 57628
+2491 1027 61500
+2503 1027 28976
+3538 1027 27852657
+920 1028 1
+921 1028 1
+923 1028 1
+926 1028 1
+930 1028 1
+953 1028 65520
+956 1028 65520
+958 1028 60492
+959 1028 60492
+962 1028 15131
+963 1028 15134
+964 1028 20163
+976 1028 65520
+977 1028 15131
+978 1028 15134
+979 1028 40326
+984 1028 20163
+1731 1028 38827
+1732 1028 32127
+1733 1028 32127
+1873 1028 44847
+1875 1028 34937
+1893 1028 7721
+1901 1028 7721
+1910 1028 7721
+1926 1028 29690
+1927 1028 29690
+1928 1028 9016
+1929 1028 217
+1941 1028 22852
+1948 1028 38146
+1956 1028 38146
+1965 1028 45867
+1975 1028 38146
+1992 1028 29690
+1993 1028 29690
+1994 1028 9016
+1995 1028 217
+1996 1028 217
+2007 1028 22852
+2014 1028 38146
+2022 1028 38146
+2031 1028 45867
+2041 1028 10771
+2052 1028 38146
+2080 1028 64221
+2081 1028 64221
+2082 1028 16759
+2083 1028 42964
+2084 1028 44264
+2085 1028 44939
+2086 1028 5072
+2087 1028 34910
+2088 1028 56167
+2089 1028 27031
+2090 1028 41058
+2091 1028 27408
+2092 1028 35508
+2093 1028 44862
+2104 1028 43402
+2105 1028 19737
+2106 1028 32888
+2107 1028 26009
+2108 1028 51286
+2113 1028 6424
+2126 1028 38842
+2127 1028 42041
+2128 1028 1927
+2133 1028 58384
+2153 1028 61228
+2154 1028 64427
+2155 1028 24313
+2160 1028 40656
+2166 1028 58004
+2173 1028 58004
+2187 1028 21613
+2188 1028 9354
+2190 1028 28735
+2191 1028 54142
+2196 1028 8163
+2202 1028 59331
+2209 1028 22103
+2217 1028 29620
+2232 1028 15256
+2233 1028 2997
+2234 1028 38286
+2236 1028 37848
+2241 1028 30711
+2247 1028 55916
+2254 1028 15132
+2262 1028 164
+2271 1028 36065
+2287 1028 885
+2288 1028 54147
+2289 1028 23915
+2290 1028 732
+2296 1028 28312
+2302 1028 61986
+2309 1028 30400
+2317 1028 8548
+2326 1028 3068
+2336 1028 32524
+2353 1028 49476
+2354 1028 7050
+2355 1028 31084
+2356 1028 13109
+2357 1028 35004
+2368 1028 60290
+2375 1028 38668
+2383 1028 50468
+2392 1028 11245
+2402 1028 39945
+2413 1028 7421
+2431 1028 22404
+2432 1028 52976
+2433 1028 34920
+2434 1028 47719
+2435 1028 51434
+2440 1028 5470
+2446 1028 42477
+2453 1028 29471
+2461 1028 4537
+2470 1028 7346
+2480 1028 47382
+2491 1028 27521
+2503 1028 6992
+3539 1028 27852657
+921 1029 1
+923 1029 53654
+926 1029 14438
+930 1029 14438
+961 1029 64852
+976 1029 50414
+994 1029 64977
+1025 1029 59053
+1027 1029 41452
+1034 1029 8401
+1049 1029 16452
+1069 1029 16452
+1102 1029 3505
+1103 1029 25738
+1107 1029 33357
+1111 1029 51901
+1122 1029 10055
+1138 1029 25280
+1159 1029 16248
+1189 1029 65317
+1237 1029 26568
+1238 1029 22309
+1239 1029 8838
+1246 1029 674
+1260 1029 25071
+1278 1029 59514
+1303 1029 15010
+1336 1029 37960
+1381 1029 38164
+1442 1029 35901
+1443 1029 34153
+1445 1029 62229
+1448 1029 60533
+1466 1029 47385
+1486 1029 38492
+1513 1029 52609
+1548 1029 63135
+1593 1029 49623
+1648 1029 11459
+1720 1029 21027
+1721 1029 37123
+1723 1029 9275
+1726 1029 6186
+1730 1029 29179
+1765 1029 18750
+1792 1029 14527
+1827 1029 43850
+1872 1029 26416
+1927 1029 59818
+1993 1029 48359
+2080 1029 10380
+2081 1029 7736
+2083 1029 15446
+2086 1029 54712
+2090 1029 43794
+2105 1029 7095
+2125 1029 30560
+2152 1029 13450
+2188 1029 17069
+2233 1029 6900
+2288 1029 23179
+2354 1029 38175
+2432 1029 64846
+3540 1029 27852657
+922 1030 1
+923 1030 1
+924 1030 1
+925 1030 1
+926 1030 1
+927 1030 2
+928 1030 1
+929 1030 1
+930 1030 1
+931 1030 2
+932 1030 2
+933 1030 1
+953 1030 1
+954 1030 1
+955 1030 1
+956 1030 1
+958 1030 1
+961 1030 65520
+962 1030 1
+975 1030 65520
+976 1030 65519
+977 1030 65520
+978 1030 65519
+979 1030 65518
+984 1030 65519
+1447 1030 13
+1448 1030 5709
+1449 1030 59840
+1450 1030 59840
+1725 1030 13
+1726 1030 5709
+1727 1030 59840
+1728 1030 59840
+1730 1030 5696
+1731 1030 32770
+1732 1030 59840
+1873 1030 11
+1928 1030 11
+1929 1030 32777
+1994 1030 11
+1995 1030 32777
+1996 1030 32777
+2080 1030 65512
+2081 1030 65512
+2082 1030 12286
+2083 1030 60710
+2084 1030 60719
+2085 1030 61434
+2086 1030 55551
+2087 1030 47908
+2088 1030 52710
+2089 1030 15008
+2090 1030 9125
+2091 1030 38158
+2092 1030 43149
+2093 1030 55960
+2104 1030 31397
+2105 1030 942
+2106 1030 29975
+2107 1030 14500
+2108 1030 1363
+2113 1030 10924
+2234 1030 8208
+2289 1030 8208
+2290 1030 51918
+2355 1030 20487
+2356 1030 2747
+2357 1030 24583
+2431 1030 30037
+2432 1030 19974
+2433 1030 58796
+2434 1030 47269
+2435 1030 10916
+2440 1030 12968
+2491 1030 2063
+2503 1030 53427
+3541 1030 27852657
+923 1031 1
+931 1031 63961
+932 1031 4425
+933 1031 4425
+964 1031 32093
+979 1031 40057
+984 1031 12389
+991 1031 15795
+993 1031 49726
+997 1031 35497
+1030 1031 19702
+1041 1031 4811
+1114 1031 19702
+1130 1031 2965
+1240 1031 48394
+1268 1031 5312
+1446 1031 48394
+1450 1031 17127
+1724 1031 48925
+1728 1031 16596
+1733 1031 16349
+2084 1031 54500
+2087 1031 10430
+2088 1031 21451
+2091 1031 9100
+2092 1031 18597
+2093 1031 44438
+2108 1031 13655
+2113 1031 23254
+2128 1031 28919
+2154 1031 58184
+2155 1031 59553
+2160 1031 51184
+2166 1031 7809
+2173 1031 7809
+2187 1031 53630
+2188 1031 61427
+2190 1031 43964
+2191 1031 39208
+2196 1031 35372
+2202 1031 10482
+2209 1031 60839
+2217 1031 53030
+2232 1031 14519
+2233 1031 63597
+2234 1031 30186
+2236 1031 24501
+2241 1031 12557
+2247 1031 61208
+2254 1031 13183
+2262 1031 15201
+2271 1031 27692
+2287 1031 37798
+2288 1031 43550
+2289 1031 8989
+2290 1031 30363
+2296 1031 30519
+2302 1031 7322
+2309 1031 8588
+2317 1031 64704
+2326 1031 50198
+2336 1031 22506
+2353 1031 41184
+2354 1031 61399
+2355 1031 38487
+2356 1031 39335
+2357 1031 38261
+2368 1031 43051
+2375 1031 62728
+2383 1031 29438
+2392 1031 56124
+2402 1031 63568
+2413 1031 41062
+2431 1031 62456
+2432 1031 13813
+2433 1031 12759
+2434 1031 35616
+2435 1031 4226
+2440 1031 48077
+2446 1031 37708
+2453 1031 39564
+2461 1031 4754
+2470 1031 25671
+2480 1031 28773
+2491 1031 43534
+2503 1031 2993
+3542 1031 27852657
+924 1032 1
+931 1032 42177
+932 1032 44805
+933 1032 44805
+964 1032 1618
+979 1032 52528
+984 1032 30194
+991 1032 49726
+993 1032 63041
+997 1032 17235
+1026 1032 47246
+1030 1032 33030
+1041 1032 38835
+1114 1032 14755
+1130 1032 29456
+1240 1032 17127
+1268 1032 26929
+1446 1032 17127
+1450 1032 55593
+1724 1032 16596
+1728 1032 56882
+1733 1032 34742
+2084 1032 11021
+2087 1032 1257
+2088 1032 41359
+2091 1032 44069
+2092 1032 50950
+2093 1032 46128
+2108 1032 54656
+2113 1032 51467
+2128 1032 42655
+2154 1032 2917
+2155 1032 36529
+2160 1032 62438
+2166 1032 60100
+2173 1032 60100
+2187 1032 29797
+2188 1032 48695
+2190 1032 49795
+2191 1032 39496
+2196 1032 54458
+2202 1032 6883
+2209 1032 18255
+2217 1032 23676
+2232 1032 6379
+2233 1032 6413
+2234 1032 52705
+2236 1032 46462
+2241 1032 45318
+2247 1032 61432
+2254 1032 41113
+2262 1032 32576
+2271 1032 8900
+2287 1032 8618
+2288 1032 43764
+2289 1032 23342
+2290 1032 39022
+2296 1032 58905
+2302 1032 22821
+2309 1032 55653
+2317 1032 906
+2326 1032 527
+2336 1032 57148
+2353 1032 57666
+2354 1032 24401
+2355 1032 37843
+2356 1032 61356
+2357 1032 9835
+2368 1032 39878
+2375 1032 21372
+2383 1032 57368
+2392 1032 11755
+2402 1032 25135
+2413 1032 33508
+2431 1032 25080
+2432 1032 31669
+2433 1032 7630
+2434 1032 26145
+2435 1032 59299
+2440 1032 1921
+2446 1032 10144
+2453 1032 18100
+2461 1032 2112
+2470 1032 5134
+2480 1032 45544
+2491 1032 26292
+2503 1032 24530
+3543 1032 27852657
+925 1033 1
+926 1033 1
+927 1033 1
+928 1033 1
+929 1033 1
+930 1033 1
+931 1033 1
+932 1033 2
+933 1033 1
+956 1033 1
+958 1033 5029
+959 1033 5029
+962 1033 50389
+963 1033 50387
+964 1033 45358
+975 1033 65520
+976 1033 65520
+977 1033 50388
+978 1033 50385
+979 1033 25192
+984 1033 45356
+1731 1033 36438
+1732 1033 50411
+1733 1033 50411
+1873 1033 8371
+1875 1033 22757
+1893 1033 25338
+1901 1033 25338
+1910 1033 25338
+1926 1033 28043
+1927 1033 28043
+1928 1033 36414
+1929 1033 42062
+1941 1033 17025
+1948 1033 26567
+1956 1033 26567
+1965 1033 51905
+1975 1033 26567
+1992 1033 28043
+1993 1033 28043
+1994 1033 36414
+1995 1033 42062
+1996 1033 42062
+2007 1033 17025
+2014 1033 26567
+2022 1033 26567
+2031 1033 51905
+2041 1033 53134
+2052 1033 26567
+2080 1033 64251
+2081 1033 64251
+2082 1033 30966
+2083 1033 7766
+2084 1033 9036
+2085 1033 56083
+2086 1033 25673
+2087 1033 19542
+2088 1033 10506
+2089 1033 59661
+2090 1033 44047
+2091 1033 56277
+2092 1033 11283
+2093 1033 777
+2104 1033 10529
+2105 1033 27486
+2106 1033 3401
+2107 1033 37626
+2108 1033 6837
+2113 1033 6060
+2126 1033 34070
+2127 1033 31559
+2128 1033 58335
+2133 1033 55516
+2153 1033 57933
+2154 1033 55422
+2155 1033 16677
+2160 1033 40634
+2166 1033 11881
+2173 1033 11881
+2187 1033 13553
+2188 1033 20612
+2190 1033 46837
+2191 1033 8092
+2196 1033 29538
+2202 1033 18561
+2209 1033 61198
+2217 1033 49317
+2232 1033 37939
+2233 1033 44998
+2234 1033 39224
+2236 1033 21660
+2241 1033 11655
+2247 1033 54893
+2254 1033 51288
+2262 1033 11935
+2271 1033 28139
+2287 1033 2480
+2288 1033 9539
+2289 1033 3765
+2290 1033 18600
+2296 1033 61199
+2302 1033 26001
+2309 1033 18187
+2317 1033 43573
+2326 1033 52278
+2336 1033 24139
+2353 1033 43111
+2354 1033 32663
+2355 1033 39883
+2356 1033 50256
+2357 1033 43321
+2368 1033 41608
+2375 1033 15814
+2383 1033 5200
+2392 1033 64457
+2402 1033 56410
+2413 1033 32271
+2431 1033 4368
+2432 1033 28721
+2433 1033 45471
+2434 1033 53726
+2435 1033 25012
+2440 1033 1568
+2446 1033 5758
+2453 1033 14103
+2461 1033 4570
+2470 1033 17624
+2480 1033 59482
+2491 1033 54392
+2503 1033 43360
+3544 1033 27852657
+926 1034 1
+930 1034 1
+931 1034 61484
+932 1034 59536
+933 1034 59536
+964 1034 57425
+979 1034 36134
+984 1034 38245
+997 1034 14717
+1030 1034 14717
+1041 1034 60122
+1114 1034 14717
+1130 1034 13831
+1268 1034 4385
+1733 1034 59199
+2087 1034 65413
+2088 1034 65413
+2091 1034 2830
+2092 1034 1676
+2093 1034 40607
+2108 1034 9146
+2113 1034 61541
+2128 1034 38012
+2154 1034 27872
+2155 1034 20182
+2160 1034 3578
+2166 1034 18541
+2173 1034 18541
+2187 1034 41729
+2188 1034 17854
+2190 1034 59645
+2191 1034 62362
+2196 1034 56473
+2202 1034 10716
+2209 1034 8059
+2217 1034 55039
+2232 1034 50106
+2233 1034 8846
+2234 1034 21578
+2236 1034 7659
+2241 1034 31244
+2247 1034 1034
+2254 1034 51360
+2262 1034 63427
+2271 1034 8388
+2287 1034 56077
+2288 1034 60401
+2289 1034 3776
+2290 1034 18597
+2296 1034 53736
+2302 1034 46015
+2309 1034 18817
+2317 1034 64609
+2326 1034 29982
+2336 1034 21594
+2353 1034 32992
+2354 1034 11525
+2355 1034 21318
+2356 1034 48188
+2357 1034 19591
+2368 1034 24052
+2375 1034 32451
+2383 1034 13574
+2392 1034 62716
+2402 1034 11343
+2413 1034 55270
+2431 1034 46888
+2432 1034 38177
+2433 1034 43712
+2434 1034 22066
+2435 1034 60769
+2440 1034 22442
+2446 1034 36705
+2453 1034 37944
+2461 1034 18916
+2470 1034 52905
+2480 1034 8804
+2491 1034 15839
+2503 1034 39877
+3545 1034 27852657
+927 1035 1
+931 1035 65513
+932 1035 62893
+933 1035 62893
+964 1035 50271
+979 1035 9143
+984 1035 21765
+993 1035 18275
+997 1035 62626
+1026 1035 18275
+1030 1035 62626
+1041 1035 53833
+1114 1035 15380
+1130 1035 16295
+1268 1035 15301
+1450 1035 58322
+1728 1035 57564
+1733 1035 18627
+2087 1035 53930
+2088 1035 2807
+2091 1035 3543
+2092 1035 18186
+2093 1035 37542
+2108 1035 42322
+2113 1035 55275
+2128 1035 37835
+2154 1035 41015
+2155 1035 32385
+2160 1035 18472
+2166 1035 65026
+2173 1035 65026
+2187 1035 19852
+2188 1035 63571
+2190 1035 3600
+2191 1035 15718
+2196 1035 22132
+2202 1035 50307
+2209 1035 52559
+2217 1035 53054
+2232 1035 3957
+2233 1035 37708
+2234 1035 17122
+2236 1035 55280
+2241 1035 43004
+2247 1035 36303
+2254 1035 47494
+2262 1035 36516
+2271 1035 48983
+2287 1035 49142
+2288 1035 53598
+2289 1035 29957
+2290 1035 14197
+2296 1035 44478
+2302 1035 41890
+2309 1035 17169
+2317 1035 37100
+2326 1035 48549
+2336 1035 65087
+2353 1035 62308
+2354 1035 15332
+2355 1035 47378
+2356 1035 19325
+2357 1035 7507
+2368 1035 51866
+2375 1035 11222
+2383 1035 7023
+2392 1035 7675
+2402 1035 18033
+2413 1035 18467
+2431 1035 3107
+2432 1035 51492
+2433 1035 3931
+2434 1035 52243
+2435 1035 31488
+2440 1035 13698
+2446 1035 43871
+2453 1035 57279
+2461 1035 34186
+2470 1035 8215
+2480 1035 59343
+2491 1035 59043
+2503 1035 58291
+3546 1035 27852657
+928 1036 1
+931 1036 53615
+932 1036 2621
+933 1036 2620
+964 1036 29262
+979 1036 64799
+984 1036 38157
+993 1036 47246
+997 1036 11052
+1026 1036 47246
+1030 1036 11052
+1041 1036 24012
+1114 1036 58298
+1130 1036 4707
+1268 1036 64990
+1450 1036 7199
+1728 1036 7957
+1733 1036 42936
+2087 1036 11585
+2088 1036 62708
+2091 1036 55931
+2092 1036 18904
+2093 1036 46756
+2108 1036 15834
+2113 1036 21017
+2128 1036 36064
+2154 1036 50374
+2155 1036 1006
+2160 1036 62047
+2166 1036 33119
+2173 1036 33119
+2187 1036 2453
+2188 1036 13021
+2190 1036 40386
+2191 1036 18211
+2196 1036 11115
+2202 1036 33169
+2209 1036 46278
+2217 1036 13159
+2232 1036 50714
+2233 1036 43466
+2234 1036 36031
+2236 1036 55926
+2241 1036 40373
+2247 1036 43633
+2254 1036 49931
+2262 1036 6741
+2271 1036 59103
+2287 1036 36233
+2288 1036 40306
+2289 1036 58568
+2290 1036 14371
+2296 1036 53509
+2302 1036 33304
+2309 1036 61326
+2317 1036 3888
+2326 1036 22340
+2336 1036 28758
+2353 1036 12990
+2354 1036 43454
+2355 1036 31662
+2356 1036 7523
+2357 1036 532
+2368 1036 222
+2375 1036 15796
+2383 1036 37087
+2392 1036 3442
+2402 1036 58183
+2413 1036 29425
+2431 1036 34369
+2432 1036 44232
+2433 1036 48322
+2434 1036 20993
+2435 1036 23139
+2440 1036 17539
+2446 1036 17228
+2453 1036 9774
+2461 1036 62582
+2470 1036 15954
+2480 1036 25566
+2491 1036 7399
+2503 1036 28299
+3547 1036 27852657
+929 1037 1
+930 1037 1
+931 1037 1
+932 1037 1
+933 1037 1
+964 1037 730
+979 1037 40184
+984 1037 39455
+997 1037 40376
+1030 1037 40376
+1041 1037 30895
+1114 1037 40376
+1130 1037 9343
+1268 1037 41048
+1733 1037 16888
+2091 1037 40979
+2092 1037 42252
+2093 1037 56953
+2108 1037 6332
+2113 1037 33763
+2128 1037 42175
+2154 1037 5924
+2155 1037 34319
+2160 1037 3749
+2166 1037 42563
+2173 1037 42563
+2187 1037 38356
+2188 1037 54608
+2190 1037 10210
+2191 1037 8798
+2196 1037 22439
+2202 1037 37051
+2209 1037 58657
+2217 1037 16094
+2232 1037 41077
+2233 1037 14902
+2234 1037 33166
+2236 1037 19543
+2241 1037 18865
+2247 1037 56659
+2254 1037 18041
+2262 1037 1663
+2271 1037 51090
+2287 1037 31493
+2288 1037 22852
+2289 1037 57900
+2290 1037 28496
+2296 1037 23244
+2302 1037 57602
+2309 1037 39648
+2317 1037 31951
+2326 1037 34382
+2336 1037 48813
+2353 1037 18770
+2354 1037 7290
+2355 1037 34127
+2356 1037 22450
+2357 1037 22628
+2368 1037 36688
+2375 1037 65125
+2383 1037 27793
+2392 1037 56356
+2402 1037 39344
+2413 1037 56052
+2431 1037 56763
+2432 1037 8121
+2433 1037 54142
+2434 1037 34265
+2435 1037 46430
+2440 1037 64352
+2446 1037 18125
+2453 1037 52879
+2461 1037 52526
+2470 1037 44965
+2480 1037 59572
+2491 1037 24980
+2503 1037 44955
+3548 1037 27852657
+930 1038 1
+931 1038 53654
+932 1038 14438
+933 1038 14438
+964 1038 64852
+979 1038 50414
+997 1038 64977
+1029 1038 59053
+1030 1038 41452
+1037 1038 8401
+1052 1038 16452
+1072 1038 16452
+1110 1038 3505
+1111 1038 25738
+1113 1038 33357
+1114 1038 51901
+1125 1038 10055
+1141 1038 25280
+1162 1038 16248
+1192 1038 65317
+1245 1038 26568
+1246 1038 22309
+1247 1038 8838
+1249 1038 674
+1263 1038 25071
+1281 1038 59514
+1306 1038 15010
+1339 1038 37960
+1384 1038 38164
+1451 1038 35901
+1452 1038 34153
+1453 1038 62229
+1454 1038 60533
+1469 1038 47385
+1489 1038 38492
+1516 1038 52609
+1551 1038 63135
+1596 1038 49623
+1651 1038 11459
+1729 1038 21027
+1730 1038 37123
+1731 1038 9275
+1732 1038 6186
+1733 1038 29179
+1768 1038 18750
+1795 1038 14527
+1830 1038 43850
+1875 1038 26416
+1930 1038 59818
+1996 1038 48359
+2089 1038 10380
+2090 1038 7736
+2091 1038 15446
+2092 1038 54712
+2093 1038 43794
+2108 1038 7095
+2128 1038 30560
+2155 1038 13450
+2191 1038 17069
+2236 1038 6900
+2291 1038 23179
+2357 1038 38175
+2435 1038 64846
+3549 1038 27852657
+934 1039 1
+948 1039 49171
+949 1039 49171
+962 1039 17901
+963 1039 5635
+964 1039 54806
+967 1039 8752
+979 1039 36605
+984 1039 53903
+985 1039 6583
+998 1039 49731
+999 1039 52959
+1003 1039 40295
+1033 1039 37169
+1037 1039 56085
+1042 1039 44615
+1115 1039 29930
+1125 1039 27733
+1131 1039 10636
+1251 1039 29930
+1254 1039 56624
+1269 1039 70
+1456 1039 38610
+1457 1039 56841
+1460 1039 29713
+1464 1039 34909
+1734 1039 64653
+1736 1039 7014
+1739 1039 50532
+1743 1039 676
+1748 1039 60159
+2094 1039 54983
+2096 1039 44503
+2099 1039 56139
+2102 1039 45297
+2103 1039 13927
+2106 1039 31110
+2107 1039 36107
+2108 1039 39827
+2113 1039 241
+2114 1039 21004
+2133 1039 37425
+2159 1039 49128
+2160 1039 58392
+2161 1039 28737
+2167 1039 33690
+2174 1039 33690
+2192 1039 52294
+2193 1039 25290
+2195 1039 13113
+2196 1039 8749
+2197 1039 3015
+2203 1039 38082
+2210 1039 14431
+2218 1039 46262
+2237 1039 22720
+2238 1039 29994
+2239 1039 13251
+2241 1039 21245
+2242 1039 40447
+2248 1039 64964
+2255 1039 45218
+2263 1039 39836
+2272 1039 59095
+2292 1039 65209
+2293 1039 65480
+2294 1039 60548
+2295 1039 43640
+2297 1039 42784
+2303 1039 17055
+2310 1039 58905
+2318 1039 10669
+2327 1039 8216
+2337 1039 14642
+2358 1039 14002
+2359 1039 10720
+2360 1039 8090
+2361 1039 22761
+2362 1039 52196
+2369 1039 10724
+2376 1039 44349
+2384 1039 24918
+2393 1039 40334
+2403 1039 45890
+2414 1039 31248
+2436 1039 48109
+2437 1039 3519
+2438 1039 53985
+2439 1039 35577
+2440 1039 2016
+2441 1039 3498
+2447 1039 36312
+2454 1039 63901
+2462 1039 12224
+2471 1039 33218
+2481 1039 37475
+2492 1039 64750
+2504 1039 42183
+3550 1039 27852657
+935 1040 1
+936 1040 1
+937 1040 1
+938 1040 2
+939 1040 1
+941 1040 5617
+942 1040 5617
+943 1040 29953
+944 1040 35571
+945 1040 29954
+946 1040 29952
+947 1040 35569
+948 1040 59905
+949 1040 29952
+954 1040 1
+955 1040 1
+957 1040 5617
+958 1040 29953
+959 1040 29952
+960 1040 35569
+961 1040 35569
+962 1040 35569
+963 1040 35569
+964 1040 35569
+973 1040 62899
+974 1040 62899
+977 1040 24593
+978 1040 2121
+979 1040 4743
+980 1040 29952
+981 1040 29952
+982 1040 54545
+983 1040 32073
+984 1040 33821
+985 1040 64647
+1746 1040 53494
+1747 1040 56925
+1748 1040 56925
+1878 1040 13784
+1880 1040 37530
+1894 1040 24310
+1902 1040 24310
+1911 1040 24310
+1931 1040 58815
+1932 1040 58815
+1933 1040 7078
+1934 1040 32374
+1942 1040 35868
+1949 1040 52946
+1957 1040 52946
+1966 1040 11735
+1976 1040 52946
+1997 1040 58815
+1998 1040 58815
+1999 1040 7078
+2000 1040 32374
+2001 1040 32374
+2008 1040 35868
+2015 1040 52946
+2023 1040 52946
+2032 1040 11735
+2042 1040 40371
+2053 1040 52946
+2095 1040 27004
+2096 1040 27004
+2097 1040 42231
+2098 1040 44963
+2099 1040 17959
+2100 1040 33411
+2101 1040 37314
+2102 1040 1917
+2103 1040 49479
+2104 1040 46259
+2105 1040 6080
+2106 1040 54085
+2107 1040 27799
+2108 1040 43841
+2109 1040 46263
+2110 1040 20748
+2111 1040 45987
+2112 1040 25760
+2113 1040 5724
+2114 1040 27404
+2131 1040 11799
+2132 1040 44563
+2133 1040 37924
+2134 1040 24007
+2158 1040 17415
+2159 1040 50179
+2160 1040 43540
+2161 1040 22984
+2167 1040 28021
+2174 1040 28021
+2192 1040 9988
+2193 1040 9879
+2195 1040 12003
+2196 1040 5364
+2197 1040 17572
+2203 1040 58489
+2210 1040 11709
+2218 1040 49209
+2237 1040 56792
+2238 1040 56683
+2239 1040 34049
+2241 1040 19540
+2242 1040 43547
+2248 1040 20420
+2255 1040 62240
+2263 1040 56202
+2272 1040 6993
+2292 1040 37206
+2293 1040 37097
+2294 1040 14463
+2295 1040 56343
+2297 1040 64405
+2303 1040 39065
+2310 1040 6485
+2318 1040 4884
+2327 1040 11043
+2337 1040 4050
+2358 1040 28548
+2359 1040 30916
+2360 1040 1899
+2361 1040 13591
+2362 1040 47676
+2369 1040 45945
+2376 1040 38466
+2384 1040 10378
+2393 1040 17432
+2403 1040 24632
+2414 1040 20582
+2436 1040 64654
+2437 1040 56562
+2438 1040 38940
+2439 1040 59235
+2440 1040 22398
+2441 1040 31810
+2447 1040 61338
+2454 1040 32506
+2462 1040 31045
+2471 1040 19650
+2481 1040 4353
+2492 1040 45813
+2504 1040 62406
+3551 1040 27852657
+936 1041 1
+939 1041 65520
+948 1041 17288
+949 1041 17287
+962 1041 62914
+963 1041 13837
+964 1041 31124
+967 1041 8752
+979 1041 46980
+984 1041 37861
+985 1041 22005
+998 1041 65089
+999 1041 63787
+1003 1041 16179
+1033 1041 63355
+1037 1041 16611
+1042 1041 56983
+1115 1041 29930
+1125 1041 14445
+1131 1041 43635
+1251 1041 29930
+1254 1041 18023
+1269 1041 62648
+1457 1041 29930
+1460 1041 18023
+1464 1041 50392
+1736 1041 6146
+1739 1041 9300
+1743 1041 45084
+1748 1041 50044
+2096 1041 33965
+2099 1041 28286
+2102 1041 17311
+2103 1041 44851
+2106 1041 7385
+2107 1041 62261
+2108 1041 8504
+2113 1041 45469
+2114 1041 25416
+2133 1041 45338
+2159 1041 37146
+2160 1041 13463
+2161 1041 63840
+2167 1041 37508
+2174 1041 37508
+2192 1041 65480
+2193 1041 29801
+2195 1041 19378
+2196 1041 33483
+2197 1041 12794
+2203 1041 35664
+2210 1041 45762
+2218 1041 8254
+2237 1041 28532
+2238 1041 35824
+2239 1041 16801
+2241 1041 50085
+2242 1041 58919
+2248 1041 52071
+2255 1041 32180
+2263 1041 58066
+2272 1041 49812
+2292 1041 22016
+2293 1041 22305
+2294 1041 51185
+2295 1041 55963
+2297 1041 26117
+2303 1041 39898
+2310 1041 19027
+2318 1041 42644
+2327 1041 23044
+2337 1041 38753
+2358 1041 51742
+2359 1041 41223
+2360 1041 1696
+2361 1041 46469
+2362 1041 22847
+2369 1041 46057
+2376 1041 4412
+2384 1041 5696
+2393 1041 4316
+2403 1041 25974
+2414 1041 52742
+2436 1041 62611
+2437 1041 4523
+2438 1041 8744
+2439 1041 56469
+2440 1041 47932
+2441 1041 61616
+2447 1041 50405
+2454 1041 54944
+2462 1041 34328
+2471 1041 12000
+2481 1041 45126
+2492 1041 18225
+2504 1041 48536
+3552 1041 27852657
+937 1042 1
+948 1042 3872
+949 1042 3872
+962 1042 814
+963 1042 64747
+964 1042 3098
+979 1042 51099
+984 1042 55219
+985 1042 7218
+998 1042 64763
+999 1042 41409
+1003 1042 45731
+1033 1042 40651
+1037 1042 46489
+1042 1042 13217
+1125 1042 21619
+1131 1042 61290
+1254 1042 39289
+1269 1042 24662
+1460 1042 39289
+1464 1042 9811
+1739 1042 57564
+1743 1042 59406
+1748 1042 43346
+2099 1042 14384
+2102 1042 13913
+2103 1042 27676
+2106 1042 43689
+2107 1042 53929
+2108 1042 45294
+2113 1042 38134
+2114 1042 33654
+2133 1042 25122
+2159 1042 585
+2160 1042 64980
+2161 1042 26017
+2167 1042 55871
+2174 1042 55871
+2192 1042 23323
+2193 1042 50796
+2195 1042 914
+2196 1042 31231
+2197 1042 57995
+2203 1042 13479
+2210 1042 6264
+2218 1042 15914
+2237 1042 47913
+2238 1042 12425
+2239 1042 4121
+2241 1042 9675
+2242 1042 57343
+2248 1042 43143
+2255 1042 10616
+2263 1042 63649
+2272 1042 47735
+2292 1042 65308
+2293 1042 56578
+2294 1042 52500
+2295 1042 14002
+2297 1042 59972
+2303 1042 2636
+2310 1042 27695
+2318 1042 9595
+2327 1042 17787
+2337 1042 35573
+2358 1042 26587
+2359 1042 5226
+2360 1042 9020
+2361 1042 1886
+2362 1042 48046
+2369 1042 41758
+2376 1042 34253
+2384 1042 35600
+2393 1042 61489
+2403 1042 65505
+2414 1042 29932
+2436 1042 46555
+2437 1042 29837
+2438 1042 4088
+2439 1042 41177
+2440 1042 55788
+2441 1042 17456
+2447 1042 48183
+2454 1042 27964
+2462 1042 26372
+2471 1042 37684
+2481 1042 54511
+2492 1042 54044
+2504 1042 60509
+3553 1042 27852657
+938 1043 1
+939 1043 1
+948 1043 24124
+949 1043 24125
+962 1043 37946
+963 1043 3806
+964 1043 27931
+979 1043 23325
+984 1043 63169
+985 1043 2254
+998 1043 57842
+999 1043 35246
+1003 1043 13938
+1033 1043 27567
+1037 1043 21617
+1042 1043 36361
+1125 1043 49184
+1131 1043 34122
+1254 1043 52061
+1269 1043 9508
+1460 1043 52061
+1464 1043 34473
+1739 1043 21050
+1743 1043 15469
+1748 1043 39357
+2099 1043 51956
+2102 1043 54923
+2103 1043 42223
+2106 1043 15092
+2107 1043 32581
+2108 1043 55285
+2113 1043 42692
+2114 1043 59788
+2133 1043 45079
+2159 1043 37326
+2160 1043 61062
+2161 1043 18237
+2167 1043 9078
+2174 1043 9078
+2192 1043 30880
+2193 1043 31381
+2195 1043 2644
+2196 1043 28498
+2197 1043 19633
+2203 1043 13596
+2210 1043 18834
+2218 1043 9756
+2237 1043 7627
+2238 1043 1907
+2239 1043 61087
+2241 1043 50266
+2242 1043 51553
+2248 1043 54725
+2255 1043 1841
+2263 1043 21009
+2272 1043 11253
+2292 1043 35028
+2293 1043 35456
+2294 1043 53201
+2295 1043 22810
+2297 1043 2663
+2303 1043 3794
+2310 1043 60351
+2318 1043 3044
+2327 1043 19821
+2337 1043 8568
+2358 1043 47153
+2359 1043 24758
+2360 1043 47725
+2361 1043 17299
+2362 1043 26305
+2369 1043 61423
+2376 1043 3572
+2384 1043 10656
+2393 1043 50536
+2403 1043 59845
+2414 1043 51277
+2436 1043 39490
+2437 1043 63902
+2438 1043 41676
+2439 1043 3412
+2440 1043 14819
+2441 1043 25824
+2447 1043 54056
+2454 1043 40601
+2462 1043 11429
+2471 1043 60843
+2481 1043 31351
+2492 1043 43488
+2504 1043 19138
+3554 1043 27852657
+939 1044 1
+977 1044 56901
+982 1044 56901
+986 1044 36996
+987 1044 30940
+995 1044 34581
+1020 1044 2415
+1028 1044 63106
+1039 1044 59634
+1128 1044 6472
+1226 1044 19220
+1266 1044 43857
+1431 1044 19220
+1439 1044 23139
+1709 1044 44371
+1717 1044 38612
+1731 1044 26909
+2068 1044 3590
+2074 1044 41788
+2077 1044 5143
+2084 1044 11668
+2087 1044 43137
+2091 1044 37994
+2106 1044 20743
+2111 1044 12929
+2126 1044 3411
+2149 1044 26942
+2153 1044 15818
+2158 1044 32168
+2164 1044 59145
+2171 1044 59145
+2180 1044 51431
+2181 1044 62109
+2185 1044 58663
+2189 1044 10505
+2194 1044 49647
+2200 1044 23046
+2207 1044 31345
+2215 1044 37721
+2225 1044 61325
+2226 1044 5642
+2227 1044 3586
+2234 1044 28110
+2239 1044 53823
+2245 1044 43044
+2252 1044 36334
+2260 1044 29069
+2269 1044 56869
+2280 1044 52641
+2281 1044 12526
+2282 1044 8029
+2285 1044 34996
+2294 1044 49458
+2300 1044 6424
+2307 1044 30773
+2315 1044 12683
+2324 1044 31844
+2334 1044 40496
+2346 1044 56126
+2347 1044 31554
+2348 1044 35220
+2351 1044 21586
+2355 1044 12182
+2366 1044 39101
+2373 1044 59952
+2381 1044 18419
+2390 1044 29689
+2400 1044 3269
+2411 1044 28294
+2424 1044 4338
+2425 1044 64734
+2426 1044 19280
+2429 1044 52545
+2433 1044 19126
+2438 1044 44456
+2444 1044 53591
+2451 1044 14289
+2459 1044 49993
+2468 1044 25865
+2478 1044 39988
+2489 1044 31587
+2501 1044 17129
+3555 1044 27852657
+940 1045 1
+948 1045 43986
+949 1045 43986
+952 1045 1
+962 1045 49814
+963 1045 16329
+964 1045 60315
+967 1045 59992
+979 1045 46946
+984 1045 45408
+985 1045 58777
+998 1045 55404
+999 1045 43785
+1003 1045 23438
+1033 1045 33668
+1037 1045 33555
+1042 1045 3524
+1115 1045 61958
+1125 1045 1702
+1131 1045 6470
+1250 1045 5488
+1251 1045 56470
+1254 1045 33860
+1269 1045 25713
+1456 1045 9584
+1457 1045 52374
+1460 1045 37956
+1464 1045 57298
+1734 1045 18991
+1736 1045 43223
+1739 1045 22259
+1743 1045 15213
+1748 1045 1112
+2094 1045 25898
+2096 1045 13207
+2099 1045 1567
+2102 1045 56679
+2103 1045 37984
+2106 1045 10280
+2107 1045 62434
+2108 1045 59066
+2113 1045 64971
+2114 1045 44812
+2133 1045 42447
+2159 1045 20337
+2160 1045 40582
+2161 1045 37130
+2167 1045 54293
+2174 1045 54293
+2192 1045 23129
+2193 1045 21805
+2195 1045 55053
+2196 1045 64209
+2197 1045 35354
+2203 1045 20674
+2210 1045 60377
+2218 1045 6084
+2237 1045 46839
+2238 1045 26551
+2239 1045 34148
+2241 1045 42998
+2242 1045 51008
+2248 1045 21725
+2255 1045 24156
+2263 1045 53430
+2272 1045 47346
+2292 1045 61892
+2293 1045 51257
+2294 1045 5741
+2295 1045 28548
+2297 1045 38955
+2303 1045 24138
+2310 1045 25921
+2318 1045 65287
+2327 1045 20567
+2337 1045 38742
+2358 1045 63268
+2359 1045 39784
+2360 1045 13995
+2361 1045 60615
+2362 1045 32371
+2369 1045 6884
+2376 1045 10660
+2384 1045 42375
+2393 1045 56007
+2403 1045 31513
+2414 1045 58292
+2436 1045 47383
+2437 1045 500
+2438 1045 25963
+2439 1045 47529
+2440 1045 1690
+2441 1045 37640
+2447 1045 5174
+2454 1045 21261
+2462 1045 51650
+2471 1045 31768
+2481 1045 61495
+2492 1045 31994
+2504 1045 17668
+3556 1045 27852657
+941 1046 1
+948 1046 64659
+949 1046 64659
+952 1046 65520
+962 1046 27470
+963 1046 58271
+964 1046 57409
+967 1046 5529
+979 1046 54075
+984 1046 12358
+985 1046 15692
+998 1046 10117
+999 1046 56490
+1003 1046 59221
+1033 1046 1086
+1037 1046 49104
+1042 1046 7379
+1115 1046 3563
+1125 1046 50190
+1131 1046 15724
+1251 1046 3563
+1254 1046 37149
+1269 1046 62757
+1457 1046 3563
+1460 1046 37149
+1464 1046 25832
+1736 1046 3307
+1739 1046 62253
+1743 1046 64572
+1748 1046 50697
+2096 1046 26416
+2099 1046 24331
+2102 1046 31149
+2103 1046 2241
+2106 1046 37656
+2107 1046 21847
+2108 1046 36883
+2113 1046 10000
+2114 1046 20895
+2133 1046 8418
+2159 1046 22972
+2160 1046 52421
+2161 1046 24870
+2167 1046 18735
+2174 1046 18735
+2192 1046 58165
+2193 1046 3631
+2195 1046 12561
+2196 1046 2568
+2197 1046 58803
+2203 1046 52076
+2210 1046 29680
+2218 1046 10945
+2237 1046 30875
+2238 1046 63542
+2239 1046 1573
+2241 1046 23625
+2242 1046 43913
+2248 1046 42769
+2255 1046 30612
+2263 1046 10380
+2272 1046 64956
+2292 1046 6307
+2293 1046 36361
+2294 1046 32193
+2295 1046 56104
+2297 1046 7398
+2303 1046 16582
+2310 1046 21983
+2318 1046 37542
+2327 1046 55090
+2337 1046 55655
+2358 1046 62089
+2359 1046 8729
+2360 1046 29727
+2361 1046 13579
+2362 1046 55583
+2369 1046 50255
+2376 1046 56350
+2384 1046 13346
+2393 1046 50713
+2403 1046 1577
+2414 1046 11443
+2436 1046 31460
+2437 1046 56741
+2438 1046 44124
+2439 1046 30552
+2440 1046 62808
+2441 1046 33928
+2447 1046 50226
+2454 1046 6416
+2462 1046 3266
+2471 1046 13452
+2481 1046 26497
+2492 1046 30583
+2504 1046 53029
+3557 1046 27852657
+942 1047 1
+948 1047 44779
+949 1047 44779
+952 1047 1
+962 1047 43692
+963 1047 43654
+964 1047 22912
+967 1047 59992
+979 1047 61873
+984 1047 56600
+985 1047 17639
+998 1047 17743
+999 1047 37273
+1003 1047 1402
+1033 1047 55016
+1037 1047 49180
+1042 1047 43459
+1115 1047 61958
+1125 1047 38675
+1131 1047 42844
+1251 1047 61958
+1254 1047 46764
+1269 1047 44342
+1457 1047 61958
+1460 1047 46764
+1464 1047 2180
+1736 1047 62214
+1739 1047 12191
+1743 1047 40486
+1748 1047 28416
+2096 1047 39105
+2099 1047 34786
+2102 1047 7101
+2103 1047 49470
+2106 1047 10704
+2107 1047 2619
+2108 1047 32858
+2113 1047 26317
+2114 1047 15173
+2133 1047 28515
+2159 1047 29297
+2160 1047 45813
+2161 1047 36868
+2167 1047 13821
+2174 1047 13821
+2192 1047 21407
+2193 1047 39226
+2195 1047 8816
+2196 1047 42453
+2197 1047 63533
+2203 1047 21070
+2210 1047 44167
+2218 1047 30346
+2237 1047 29127
+2238 1047 47878
+2239 1047 44976
+2241 1047 23795
+2242 1047 22758
+2248 1047 63543
+2255 1047 41481
+2263 1047 56436
+2272 1047 26090
+2292 1047 2831
+2293 1047 36668
+2294 1047 9958
+2295 1047 10028
+2297 1047 58226
+2303 1047 31486
+2310 1047 801
+2318 1047 56522
+2327 1047 40653
+2337 1047 14563
+2358 1047 36940
+2359 1047 30519
+2360 1047 4337
+2361 1047 47513
+2362 1047 54722
+2369 1047 49786
+2376 1047 46650
+2384 1047 1623
+2393 1047 57335
+2403 1047 53790
+2414 1047 39227
+2436 1047 45222
+2437 1047 24521
+2438 1047 43957
+2439 1047 10034
+2440 1047 44741
+2441 1047 44165
+2447 1047 38995
+2454 1047 28888
+2462 1047 48661
+2471 1047 58397
+2481 1047 38428
+2492 1047 39295
+2504 1047 38020
+3558 1047 27852657
+943 1048 1
+946 1048 1
+2077 1048 10992
+2078 1048 10992
+2090 1048 50725
+2091 1048 43775
+2092 1048 6732
+2093 1048 17724
+2108 1048 18972
+2113 1048 15635
+2114 1048 14387
+2123 1048 32670
+2128 1048 21152
+2150 1048 32670
+2155 1048 21152
+2161 1048 61843
+2191 1048 53822
+2197 1048 38893
+2242 1048 37802
+2286 1048 22052
+2352 1048 38572
+2357 1048 37890
+2429 1048 1405
+2430 1048 40007
+2433 1048 2439
+2434 1048 61308
+2435 1048 59480
+2440 1048 30173
+2441 1048 62691
+2446 1048 50531
+2452 1048 50371
+2453 1048 43913
+2454 1048 64699
+2455 1048 53747
+2456 1048 53747
+2457 1048 38809
+2458 1048 36207
+2460 1048 60927
+2461 1048 7395
+2462 1048 63096
+2463 1048 35724
+2464 1048 64092
+2465 1048 10345
+2466 1048 6349
+2467 1048 37305
+2468 1048 58731
+2470 1048 30615
+2471 1048 38367
+2472 1048 27505
+2473 1048 55841
+2474 1048 47282
+2475 1048 36937
+2476 1048 16434
+2477 1048 18399
+2478 1048 58380
+2479 1048 63745
+2481 1048 5683
+2482 1048 64814
+2483 1048 51336
+2484 1048 54729
+2485 1048 44264
+2486 1048 7327
+2487 1048 8092
+2488 1048 62102
+2489 1048 33865
+2490 1048 44850
+2491 1048 8638
+2493 1048 25074
+2494 1048 33475
+2495 1048 58984
+2496 1048 28415
+2497 1048 51155
+2498 1048 43828
+2499 1048 39735
+2500 1048 751
+2501 1048 11611
+2502 1048 26082
+2503 1048 47284
+2504 1048 32617
+2505 1048 25402
+2506 1048 21722
+2507 1048 58478
+2508 1048 17864
+2509 1048 55500
+2510 1048 29052
+2511 1048 56480
+3559 1048 27852657
+944 1049 1
+948 1049 20706
+949 1049 20706
+962 1049 33101
+963 1049 46936
+964 1049 2121
+979 1049 37474
+984 1049 29473
+985 1049 59641
+998 1049 37661
+999 1049 26357
+1003 1049 58344
+1033 1049 64018
+1037 1049 20683
+1042 1049 15123
+1125 1049 19180
+1131 1049 43587
+1254 1049 47129
+1269 1049 37082
+1460 1049 47129
+1464 1049 1940
+1739 1049 56598
+1743 1049 2238
+1748 1049 28998
+2099 1049 6404
+2102 1049 31526
+2103 1049 7060
+2106 1049 33466
+2107 1049 834
+2108 1049 12005
+2113 1049 22816
+2114 1049 20959
+2133 1049 50404
+2159 1049 12466
+2160 1049 9154
+2161 1049 58939
+2167 1049 61304
+2174 1049 61304
+2192 1049 39009
+2193 1049 21823
+2195 1049 64029
+2196 1049 4043
+2197 1049 61324
+2203 1049 59180
+2210 1049 60862
+2218 1049 65079
+2237 1049 52816
+2238 1049 39975
+2239 1049 57499
+2241 1049 30218
+2242 1049 48495
+2248 1049 34225
+2255 1049 37810
+2263 1049 17054
+2272 1049 17496
+2292 1049 24875
+2293 1049 57449
+2294 1049 38781
+2295 1049 56127
+2297 1049 843
+2303 1049 915
+2310 1049 48817
+2318 1049 42868
+2327 1049 58067
+2337 1049 40571
+2358 1049 63975
+2359 1049 50218
+2360 1049 50110
+2361 1049 38058
+2362 1049 22870
+2369 1049 30785
+2376 1049 63212
+2384 1049 28639
+2393 1049 6138
+2403 1049 24115
+2414 1049 49065
+2436 1049 26402
+2437 1049 33748
+2438 1049 5708
+2439 1049 62408
+2440 1049 41903
+2441 1049 46328
+2447 1049 6784
+2454 1049 65038
+2462 1049 34283
+2471 1049 3856
+2481 1049 48816
+2492 1049 3231
+2504 1049 40266
+3560 1049 27852657
+945 1050 1
+949 1050 65520
+955 1050 61427
+959 1050 39584
+962 1050 58440
+963 1050 45500
+964 1050 5915
+970 1050 61427
+974 1050 39584
+977 1050 51359
+978 1050 25479
+979 1050 17745
+982 1050 58440
+983 1050 45500
+984 1050 17745
+985 1050 5915
+2077 1050 63794
+2078 1050 63794
+2091 1050 38032
+2092 1050 12552
+2093 1050 10825
+2108 1050 45341
+2113 1050 64213
+2114 1050 29697
+2119 1050 10005
+2123 1050 21874
+2128 1050 44438
+2150 1050 31879
+2155 1050 34433
+2161 1050 15715
+2191 1050 791
+2197 1050 9931
+2227 1050 8023
+2242 1050 60873
+2282 1050 8023
+2286 1050 29534
+2348 1050 17290
+2352 1050 41396
+2357 1050 35105
+2426 1050 29074
+2429 1050 22588
+2430 1050 53438
+2433 1050 6171
+2434 1050 63136
+2435 1050 26185
+2440 1050 17078
+2441 1050 46508
+2446 1050 4978
+2452 1050 14154
+2453 1050 39823
+2454 1050 19981
+2455 1050 18652
+2456 1050 18652
+2457 1050 21704
+2458 1050 43675
+2460 1050 15501
+2461 1050 12490
+2462 1050 62236
+2463 1050 20518
+2464 1050 15758
+2465 1050 62627
+2466 1050 20128
+2467 1050 40027
+2468 1050 9619
+2470 1050 58775
+2471 1050 49472
+2472 1050 21414
+2473 1050 57124
+2474 1050 53295
+2475 1050 56189
+2476 1050 14815
+2477 1050 3226
+2478 1050 926
+2479 1050 61903
+2481 1050 53622
+2482 1050 54934
+2483 1050 46998
+2484 1050 30189
+2485 1050 48772
+2486 1050 58104
+2487 1050 39955
+2488 1050 40497
+2489 1050 1599
+2490 1050 26328
+2491 1050 30797
+2493 1050 24355
+2494 1050 63041
+2495 1050 18767
+2496 1050 31060
+2497 1050 59983
+2498 1050 1879
+2499 1050 6176
+2500 1050 37215
+2501 1050 14268
+2502 1050 42281
+2503 1050 56505
+2504 1050 49250
+2505 1050 959
+2506 1050 4092
+2507 1050 43802
+2508 1050 21211
+2509 1050 24147
+2510 1050 13501
+2511 1050 37582
+3561 1050 27852657
+946 1051 1
+948 1051 62791
+949 1051 62791
+961 1051 1
+962 1051 45435
+963 1051 1594
+964 1051 64385
+979 1051 58791
+984 1051 27043
+985 1051 32637
+999 1051 59154
+1003 1051 29501
+1033 1051 59154
+1037 1051 29501
+1042 1051 39230
+1125 1051 23134
+1131 1051 22912
+1269 1051 39867
+1464 1051 34663
+1743 1051 53508
+1748 1051 6276
+2102 1051 31303
+2103 1051 16642
+2106 1051 55930
+2107 1051 34214
+2108 1051 47826
+2113 1051 14072
+2114 1051 21609
+2133 1051 35326
+2159 1051 46295
+2160 1051 15239
+2161 1051 59807
+2167 1051 50472
+2174 1051 50472
+2192 1051 15153
+2193 1051 10447
+2195 1051 17117
+2196 1051 56492
+2197 1051 57884
+2203 1051 7934
+2210 1051 18448
+2218 1051 33497
+2237 1051 29157
+2238 1051 17366
+2239 1051 65432
+2241 1051 36461
+2242 1051 34792
+2248 1051 64732
+2255 1051 53543
+2263 1051 21919
+2272 1051 53943
+2292 1051 16169
+2293 1051 12813
+2294 1051 797
+2295 1051 58890
+2297 1051 7578
+2303 1051 53531
+2310 1051 16335
+2318 1051 54889
+2327 1051 19925
+2337 1051 31503
+2358 1051 57823
+2359 1051 54048
+2360 1051 13479
+2361 1051 48296
+2362 1051 18804
+2369 1051 55008
+2376 1051 46834
+2384 1051 37818
+2393 1051 55239
+2403 1051 19857
+2414 1051 53875
+2436 1051 4776
+2437 1051 51857
+2438 1051 56730
+2439 1051 6289
+2440 1051 14684
+2441 1051 50012
+2447 1051 33444
+2454 1051 27708
+2462 1051 11567
+2471 1051 25202
+2481 1051 5919
+2492 1051 63920
+2504 1051 24339
+3562 1051 27852657
+947 1052 1
+948 1052 65503
+949 1052 65503
+961 1052 65520
+962 1052 6422
+963 1052 63570
+964 1052 63552
+979 1052 52742
+984 1052 34402
+985 1052 45212
+999 1052 40960
+1003 1052 48452
+1033 1052 40960
+1037 1052 48452
+1042 1052 46585
+1125 1052 23891
+1131 1052 17237
+1269 1052 56252
+1464 1052 11891
+1743 1052 42372
+1748 1052 40622
+2102 1052 43072
+2103 1052 39940
+2106 1052 15581
+2107 1052 44611
+2108 1052 21921
+2113 1052 22201
+2114 1052 34130
+2133 1052 53505
+2159 1052 9505
+2160 1052 59710
+2161 1052 38801
+2167 1052 48738
+2174 1052 48738
+2192 1052 26360
+2193 1052 36082
+2195 1052 13659
+2196 1052 39904
+2197 1052 35746
+2203 1052 10434
+2210 1052 13664
+2218 1052 30447
+2237 1052 27713
+2238 1052 58582
+2239 1052 24359
+2241 1052 60192
+2242 1052 65329
+2248 1052 48829
+2255 1052 24220
+2263 1052 35327
+2272 1052 4880
+2292 1052 20114
+2293 1052 26544
+2294 1052 25858
+2295 1052 56106
+2297 1052 48425
+2303 1052 13353
+2310 1052 56292
+2318 1052 43533
+2327 1052 31166
+2337 1052 26286
+2358 1052 54947
+2359 1052 12670
+2360 1052 55502
+2361 1052 60828
+2362 1052 16349
+2369 1052 42245
+2376 1052 1966
+2384 1052 50767
+2393 1052 39369
+2403 1052 3331
+2414 1052 42566
+2436 1052 33461
+2437 1052 10554
+2438 1052 9339
+2439 1052 24130
+2440 1052 61271
+2441 1052 26435
+2447 1052 53163
+2454 1052 37774
+2462 1052 58598
+2471 1052 13603
+2481 1052 53724
+2492 1052 50176
+2504 1052 21143
+3563 1052 27852657
+948 1053 1
+949 1053 1
+959 1053 47776
+962 1053 12540
+963 1053 5459
+964 1053 23205
+974 1053 47776
+977 1053 25080
+978 1053 10918
+979 1053 4094
+982 1053 12540
+983 1053 5459
+984 1053 4094
+985 1053 23205
+2077 1053 32762
+2078 1053 32762
+2091 1053 53154
+2092 1053 48119
+2093 1053 15360
+2108 1053 19850
+2113 1053 65017
+2114 1053 60527
+2123 1053 17907
+2128 1053 60616
+2150 1053 17907
+2155 1053 60616
+2161 1053 43530
+2191 1053 13002
+2197 1053 16479
+2242 1053 17341
+2286 1053 11442
+2352 1053 31961
+2357 1053 62761
+2429 1053 43209
+2430 1053 8670
+2433 1053 59106
+2434 1053 52385
+2435 1053 4857
+2440 1053 12657
+2441 1053 22713
+2446 1053 2654
+2452 1053 24125
+2453 1053 36043
+2454 1053 23584
+2455 1053 12257
+2456 1053 12257
+2457 1053 22235
+2458 1053 44039
+2460 1053 2715
+2461 1053 26245
+2462 1053 19367
+2463 1053 13798
+2464 1053 43252
+2465 1053 30995
+2466 1053 15717
+2467 1053 28737
+2468 1053 48629
+2470 1053 10473
+2471 1053 55981
+2472 1053 27011
+2473 1053 12972
+2474 1053 49817
+2475 1053 18822
+2476 1053 29869
+2477 1053 22227
+2478 1053 56942
+2479 1053 61293
+2481 1053 46832
+2482 1053 39620
+2483 1053 7261
+2484 1053 38723
+2485 1053 24390
+2486 1053 5568
+2487 1053 52476
+2488 1053 51991
+2489 1053 40518
+2490 1053 43433
+2491 1053 65403
+2493 1053 21048
+2494 1053 36393
+2495 1053 43944
+2496 1053 14451
+2497 1053 51526
+2498 1053 45958
+2499 1053 61571
+2500 1053 64139
+2501 1053 15787
+2502 1053 62028
+2503 1053 11972
+2504 1053 22893
+2505 1053 10812
+2506 1053 52104
+2507 1053 53063
+2508 1053 4157
+2509 1053 8570
+2510 1053 38003
+2511 1053 8352
+3564 1053 27852657
+949 1054 1
+963 1054 65520
+978 1054 44995
+983 1054 44996
+988 1054 2415
+996 1054 63106
+1021 1054 2415
+1029 1054 63106
+1040 1054 58093
+1129 1054 58379
+1267 1054 256
+1440 1054 42359
+1718 1054 17462
+1732 1054 48059
+2077 1054 41811
+2078 1054 8756
+2087 1054 65436
+2088 1054 18864
+2092 1054 10108
+2107 1054 50866
+2112 1054 55669
+2127 1054 51110
+2150 1054 25845
+2154 1054 1872
+2159 1054 58322
+2165 1054 44313
+2172 1054 44313
+2183 1054 47757
+2184 1054 23014
+2186 1054 54087
+2190 1054 46852
+2195 1054 64236
+2201 1054 5598
+2208 1054 47134
+2216 1054 2821
+2228 1054 17912
+2229 1054 39197
+2230 1054 1821
+2235 1054 25592
+2240 1054 65209
+2246 1054 58705
+2253 1054 43468
+2261 1054 39823
+2270 1054 37002
+2283 1054 6717
+2284 1054 44195
+2285 1054 34215
+2286 1054 60005
+2295 1054 61787
+2301 1054 5678
+2308 1054 33547
+2316 1054 15746
+2325 1054 28442
+2335 1054 56961
+2349 1054 47533
+2350 1054 44853
+2351 1054 52569
+2352 1054 43560
+2356 1054 11424
+2367 1054 35477
+2374 1054 31481
+2382 1054 1389
+2391 1054 64437
+2401 1054 20221
+2412 1054 28781
+2427 1054 55685
+2428 1054 35426
+2429 1054 22371
+2430 1054 64867
+2434 1054 46086
+2439 1054 52252
+2445 1054 39529
+2452 1054 24736
+2460 1054 63887
+2469 1054 39641
+2479 1054 3993
+2490 1054 63984
+2502 1054 14285
+3565 1054 27852657
+950 1055 1
+952 1055 65520
+962 1055 19059
+963 1055 39048
+964 1055 39048
+979 1055 48374
+984 1055 25912
+985 1055 16586
+998 1055 15795
+999 1055 49726
+1003 1055 57404
+1037 1055 41609
+1042 1055 17706
+1125 1055 41609
+1131 1055 9059
+1250 1055 2970
+1251 1055 62551
+1254 1055 51364
+1269 1055 10440
+1456 1055 14409
+1457 1055 51112
+1460 1055 62803
+1464 1055 2718
+1734 1055 58266
+1736 1055 7255
+1739 1055 41670
+1743 1055 23851
+1748 1055 62210
+2094 1055 12672
+2096 1055 52849
+2099 1055 1651
+2102 1055 45206
+2103 1055 43555
+2106 1055 29446
+2107 1055 7835
+2108 1055 45849
+2113 1055 27802
+2114 1055 52010
+2133 1055 8465
+2159 1055 7064
+2160 1055 17585
+2161 1055 60765
+2167 1055 47221
+2174 1055 47221
+2192 1055 51833
+2193 1055 45765
+2195 1055 51697
+2196 1055 15390
+2197 1055 27609
+2203 1055 50802
+2210 1055 33443
+2218 1055 51743
+2237 1055 56023
+2238 1055 42620
+2239 1055 49215
+2241 1055 48982
+2242 1055 35971
+2248 1055 41859
+2255 1055 63205
+2263 1055 45498
+2272 1055 59276
+2292 1055 26062
+2293 1055 27042
+2294 1055 54431
+2295 1055 56201
+2297 1055 24775
+2303 1055 63190
+2310 1055 62006
+2318 1055 50876
+2327 1055 61440
+2337 1055 2164
+2358 1055 29489
+2359 1055 33276
+2360 1055 27082
+2361 1055 43236
+2362 1055 630
+2369 1055 26114
+2376 1055 43666
+2384 1055 46724
+2393 1055 26319
+2403 1055 56990
+2414 1055 54826
+2436 1055 23004
+2437 1055 101
+2438 1055 15188
+2439 1055 23295
+2440 1055 12861
+2441 1055 36073
+2447 1055 13168
+2454 1055 16023
+2462 1055 39481
+2471 1055 32610
+2481 1055 57628
+2492 1055 61500
+2504 1055 28976
+3566 1055 27852657
+951 1056 1
+952 1056 1
+954 1056 1
+957 1056 1
+961 1056 1
+968 1056 65520
+971 1056 65520
+973 1056 60492
+974 1056 60492
+977 1056 15131
+978 1056 15134
+979 1056 20163
+981 1056 65520
+982 1056 15131
+983 1056 15134
+984 1056 40326
+985 1056 20163
+1746 1056 38827
+1747 1056 32127
+1748 1056 32127
+1878 1056 44847
+1880 1056 34937
+1894 1056 7721
+1902 1056 7721
+1911 1056 7721
+1931 1056 29690
+1932 1056 29690
+1933 1056 9016
+1934 1056 217
+1942 1056 22852
+1949 1056 38146
+1957 1056 38146
+1966 1056 45867
+1976 1056 38146
+1997 1056 29690
+1998 1056 29690
+1999 1056 9016
+2000 1056 217
+2001 1056 217
+2008 1056 22852
+2015 1056 38146
+2023 1056 38146
+2032 1056 45867
+2042 1056 10771
+2053 1056 38146
+2095 1056 64221
+2096 1056 64221
+2097 1056 16759
+2098 1056 42964
+2099 1056 44264
+2100 1056 44939
+2101 1056 5072
+2102 1056 34910
+2103 1056 56167
+2104 1056 27031
+2105 1056 41058
+2106 1056 27408
+2107 1056 35508
+2108 1056 44862
+2109 1056 43402
+2110 1056 19737
+2111 1056 32888
+2112 1056 26009
+2113 1056 51286
+2114 1056 6424
+2131 1056 38842
+2132 1056 42041
+2133 1056 1927
+2134 1056 58384
+2158 1056 61228
+2159 1056 64427
+2160 1056 24313
+2161 1056 40656
+2167 1056 58004
+2174 1056 58004
+2192 1056 21613
+2193 1056 9354
+2195 1056 28735
+2196 1056 54142
+2197 1056 8163
+2203 1056 59331
+2210 1056 22103
+2218 1056 29620
+2237 1056 15256
+2238 1056 2997
+2239 1056 38286
+2241 1056 37848
+2242 1056 30711
+2248 1056 55916
+2255 1056 15132
+2263 1056 164
+2272 1056 36065
+2292 1056 885
+2293 1056 54147
+2294 1056 23915
+2295 1056 732
+2297 1056 28312
+2303 1056 61986
+2310 1056 30400
+2318 1056 8548
+2327 1056 3068
+2337 1056 32524
+2358 1056 49476
+2359 1056 7050
+2360 1056 31084
+2361 1056 13109
+2362 1056 35004
+2369 1056 60290
+2376 1056 38668
+2384 1056 50468
+2393 1056 11245
+2403 1056 39945
+2414 1056 7421
+2436 1056 22404
+2437 1056 52976
+2438 1056 34920
+2439 1056 47719
+2440 1056 51434
+2441 1056 5470
+2447 1056 42477
+2454 1056 29471
+2462 1056 4537
+2471 1056 7346
+2481 1056 47382
+2492 1056 27521
+2504 1056 6992
+3567 1056 27852657
+952 1057 1
+954 1057 1
+957 1057 1
+961 1057 1
+967 1057 1
+969 1057 1
+972 1057 1
+976 1057 2
+981 1057 1
+1723 1057 63715
+1726 1057 15989
+1730 1057 15989
+1865 1057 62404
+1872 1057 17281
+1890 1057 28460
+1898 1057 28460
+1907 1057 28460
+1917 1057 49315
+1918 1057 49315
+1920 1057 46198
+1923 1057 35115
+1938 1057 39215
+1945 1057 41932
+1953 1057 41932
+1962 1057 4871
+1972 1057 41932
+1983 1057 49315
+1984 1057 49315
+1986 1057 46198
+1989 1057 35115
+1993 1057 35115
+2004 1057 39215
+2011 1057 41932
+2019 1057 41932
+2028 1057 4871
+2038 1057 18343
+2049 1057 41932
+2061 1057 19375
+2062 1057 19375
+2064 1057 56050
+2065 1057 42175
+2067 1057 22800
+2070 1057 11290
+2071 1057 62096
+2073 1057 35323
+2076 1057 12523
+2080 1057 11290
+2081 1057 11371
+2083 1057 34292
+2086 1057 49829
+2090 1057 37306
+2095 1057 11290
+2096 1057 53857
+2098 1057 28922
+2101 1057 32449
+2105 1057 52903
+2110 1057 15597
+2118 1057 63082
+2121 1057 63706
+2125 1057 50085
+2130 1057 11880
+2145 1057 44079
+2148 1057 44703
+2152 1057 31082
+2157 1057 44777
+2163 1057 16148
+2170 1057 16148
+2178 1057 30371
+2179 1057 63148
+2184 1057 15211
+2188 1057 1590
+2193 1057 15909
+2199 1057 554
+2206 1057 28316
+2214 1057 12168
+2223 1057 16248
+2224 1057 49025
+2226 1057 44321
+2233 1057 20450
+2238 1057 32330
+2244 1057 18219
+2251 1057 32814
+2259 1057 14021
+2268 1057 1853
+2278 1057 62478
+2279 1057 29734
+2281 1057 25030
+2284 1057 43181
+2293 1057 53757
+2299 1057 56946
+2306 1057 51686
+2314 1057 56415
+2323 1057 59340
+2333 1057 57487
+2344 1057 26638
+2345 1057 53017
+2347 1057 17031
+2350 1057 13691
+2354 1057 37699
+2365 1057 57373
+2372 1057 25034
+2380 1057 6301
+2389 1057 56470
+2399 1057 20347
+2410 1057 28381
+2422 1057 10511
+2423 1057 44751
+2425 1057 37470
+2428 1057 40314
+2432 1057 51159
+2437 1057 33137
+2443 1057 49843
+2450 1057 1427
+2458 1057 31116
+2467 1057 11981
+2477 1057 8546
+2488 1057 24879
+2500 1057 51883
+3568 1057 27852657
+953 1058 1
+954 1058 1
+955 1058 1
+956 1058 1
+957 1058 1
+958 1058 2
+959 1058 1
+960 1058 1
+961 1058 1
+962 1058 2
+963 1058 2
+964 1058 1
+968 1058 1
+969 1058 1
+970 1058 1
+971 1058 1
+973 1058 1
+976 1058 65520
+977 1058 1
+980 1058 65520
+981 1058 65519
+982 1058 65520
+983 1058 65519
+984 1058 65518
+985 1058 65519
+1461 1058 13
+1462 1058 5709
+1463 1058 59840
+1464 1058 59840
+1740 1058 13
+1741 1058 5709
+1742 1058 59840
+1743 1058 59840
+1745 1058 5696
+1746 1058 32770
+1747 1058 59840
+1878 1058 11
+1933 1058 11
+1934 1058 32777
+1999 1058 11
+2000 1058 32777
+2001 1058 32777
+2095 1058 65512
+2096 1058 65512
+2097 1058 12286
+2098 1058 60710
+2099 1058 60719
+2100 1058 61434
+2101 1058 55551
+2102 1058 47908
+2103 1058 52710
+2104 1058 15008
+2105 1058 9125
+2106 1058 38158
+2107 1058 43149
+2108 1058 55960
+2109 1058 31397
+2110 1058 942
+2111 1058 29975
+2112 1058 14500
+2113 1058 1363
+2114 1058 10924
+2239 1058 8208
+2294 1058 8208
+2295 1058 51918
+2360 1058 20487
+2361 1058 2747
+2362 1058 24583
+2436 1058 30037
+2437 1058 19974
+2438 1058 58796
+2439 1058 47269
+2440 1058 10916
+2441 1058 12968
+2492 1058 2063
+2504 1058 53427
+3569 1058 27852657
+954 1059 1
+962 1059 63961
+963 1059 4425
+964 1059 4425
+979 1059 32093
+984 1059 40057
+985 1059 12389
+998 1059 15795
+999 1059 49726
+1003 1059 35497
+1037 1059 19702
+1042 1059 4811
+1125 1059 19702
+1131 1059 2965
+1254 1059 48394
+1269 1059 5312
+1460 1059 48394
+1464 1059 17127
+1739 1059 48925
+1743 1059 16596
+1748 1059 16349
+2099 1059 54500
+2102 1059 10430
+2103 1059 21451
+2106 1059 9100
+2107 1059 18597
+2108 1059 44438
+2113 1059 13655
+2114 1059 23254
+2133 1059 28919
+2159 1059 58184
+2160 1059 59553
+2161 1059 51184
+2167 1059 7809
+2174 1059 7809
+2192 1059 53630
+2193 1059 61427
+2195 1059 43964
+2196 1059 39208
+2197 1059 35372
+2203 1059 10482
+2210 1059 60839
+2218 1059 53030
+2237 1059 14519
+2238 1059 63597
+2239 1059 30186
+2241 1059 24501
+2242 1059 12557
+2248 1059 61208
+2255 1059 13183
+2263 1059 15201
+2272 1059 27692
+2292 1059 37798
+2293 1059 43550
+2294 1059 8989
+2295 1059 30363
+2297 1059 30519
+2303 1059 7322
+2310 1059 8588
+2318 1059 64704
+2327 1059 50198
+2337 1059 22506
+2358 1059 41184
+2359 1059 61399
+2360 1059 38487
+2361 1059 39335
+2362 1059 38261
+2369 1059 43051
+2376 1059 62728
+2384 1059 29438
+2393 1059 56124
+2403 1059 63568
+2414 1059 41062
+2436 1059 62456
+2437 1059 13813
+2438 1059 12759
+2439 1059 35616
+2440 1059 4226
+2441 1059 48077
+2447 1059 37708
+2454 1059 39564
+2462 1059 4754
+2471 1059 25671
+2481 1059 28773
+2492 1059 43534
+2504 1059 2993
+3570 1059 27852657
+955 1060 1
+962 1060 42177
+963 1060 44805
+964 1060 44805
+979 1060 1618
+984 1060 52528
+985 1060 30194
+998 1060 49726
+999 1060 63041
+1003 1060 17235
+1033 1060 47246
+1037 1060 33030
+1042 1060 38835
+1125 1060 14755
+1131 1060 29456
+1254 1060 17127
+1269 1060 26929
+1460 1060 17127
+1464 1060 55593
+1739 1060 16596
+1743 1060 56882
+1748 1060 34742
+2099 1060 11021
+2102 1060 1257
+2103 1060 41359
+2106 1060 44069
+2107 1060 50950
+2108 1060 46128
+2113 1060 54656
+2114 1060 51467
+2133 1060 42655
+2159 1060 2917
+2160 1060 36529
+2161 1060 62438
+2167 1060 60100
+2174 1060 60100
+2192 1060 29797
+2193 1060 48695
+2195 1060 49795
+2196 1060 39496
+2197 1060 54458
+2203 1060 6883
+2210 1060 18255
+2218 1060 23676
+2237 1060 6379
+2238 1060 6413
+2239 1060 52705
+2241 1060 46462
+2242 1060 45318
+2248 1060 61432
+2255 1060 41113
+2263 1060 32576
+2272 1060 8900
+2292 1060 8618
+2293 1060 43764
+2294 1060 23342
+2295 1060 39022
+2297 1060 58905
+2303 1060 22821
+2310 1060 55653
+2318 1060 906
+2327 1060 527
+2337 1060 57148
+2358 1060 57666
+2359 1060 24401
+2360 1060 37843
+2361 1060 61356
+2362 1060 9835
+2369 1060 39878
+2376 1060 21372
+2384 1060 57368
+2393 1060 11755
+2403 1060 25135
+2414 1060 33508
+2436 1060 25080
+2437 1060 31669
+2438 1060 7630
+2439 1060 26145
+2440 1060 59299
+2441 1060 1921
+2447 1060 10144
+2454 1060 18100
+2462 1060 2112
+2471 1060 5134
+2481 1060 45544
+2492 1060 26292
+2504 1060 24530
+3571 1060 27852657
+956 1061 1
+957 1061 1
+958 1061 1
+959 1061 1
+960 1061 1
+961 1061 1
+962 1061 1
+963 1061 2
+964 1061 1
+971 1061 1
+973 1061 5029
+974 1061 5029
+977 1061 50389
+978 1061 50387
+979 1061 45358
+980 1061 65520
+981 1061 65520
+982 1061 50388
+983 1061 50385
+984 1061 25192
+985 1061 45356
+1746 1061 36438
+1747 1061 50411
+1748 1061 50411
+1878 1061 8371
+1880 1061 22757
+1894 1061 25338
+1902 1061 25338
+1911 1061 25338
+1931 1061 28043
+1932 1061 28043
+1933 1061 36414
+1934 1061 42062
+1942 1061 17025
+1949 1061 26567
+1957 1061 26567
+1966 1061 51905
+1976 1061 26567
+1997 1061 28043
+1998 1061 28043
+1999 1061 36414
+2000 1061 42062
+2001 1061 42062
+2008 1061 17025
+2015 1061 26567
+2023 1061 26567
+2032 1061 51905
+2042 1061 53134
+2053 1061 26567
+2095 1061 64251
+2096 1061 64251
+2097 1061 30966
+2098 1061 7766
+2099 1061 9036
+2100 1061 56083
+2101 1061 25673
+2102 1061 19542
+2103 1061 10506
+2104 1061 59661
+2105 1061 44047
+2106 1061 56277
+2107 1061 11283
+2108 1061 777
+2109 1061 10529
+2110 1061 27486
+2111 1061 3401
+2112 1061 37626
+2113 1061 6837
+2114 1061 6060
+2131 1061 34070
+2132 1061 31559
+2133 1061 58335
+2134 1061 55516
+2158 1061 57933
+2159 1061 55422
+2160 1061 16677
+2161 1061 40634
+2167 1061 11881
+2174 1061 11881
+2192 1061 13553
+2193 1061 20612
+2195 1061 46837
+2196 1061 8092
+2197 1061 29538
+2203 1061 18561
+2210 1061 61198
+2218 1061 49317
+2237 1061 37939
+2238 1061 44998
+2239 1061 39224
+2241 1061 21660
+2242 1061 11655
+2248 1061 54893
+2255 1061 51288
+2263 1061 11935
+2272 1061 28139
+2292 1061 2480
+2293 1061 9539
+2294 1061 3765
+2295 1061 18600
+2297 1061 61199
+2303 1061 26001
+2310 1061 18187
+2318 1061 43573
+2327 1061 52278
+2337 1061 24139
+2358 1061 43111
+2359 1061 32663
+2360 1061 39883
+2361 1061 50256
+2362 1061 43321
+2369 1061 41608
+2376 1061 15814
+2384 1061 5200
+2393 1061 64457
+2403 1061 56410
+2414 1061 32271
+2436 1061 4368
+2437 1061 28721
+2438 1061 45471
+2439 1061 53726
+2440 1061 25012
+2441 1061 1568
+2447 1061 5758
+2454 1061 14103
+2462 1061 4570
+2471 1061 17624
+2481 1061 59482
+2492 1061 54392
+2504 1061 43360
+3572 1061 27852657
+957 1062 1
+961 1062 1
+962 1062 61484
+963 1062 59536
+964 1062 59536
+979 1062 57425
+984 1062 36134
+985 1062 38245
+1003 1062 14717
+1037 1062 14717
+1042 1062 60122
+1125 1062 14717
+1131 1062 13831
+1269 1062 4385
+1748 1062 59199
+2102 1062 65413
+2103 1062 65413
+2106 1062 2830
+2107 1062 1676
+2108 1062 40607
+2113 1062 9146
+2114 1062 61541
+2133 1062 38012
+2159 1062 27872
+2160 1062 20182
+2161 1062 3578
+2167 1062 18541
+2174 1062 18541
+2192 1062 41729
+2193 1062 17854
+2195 1062 59645
+2196 1062 62362
+2197 1062 56473
+2203 1062 10716
+2210 1062 8059
+2218 1062 55039
+2237 1062 50106
+2238 1062 8846
+2239 1062 21578
+2241 1062 7659
+2242 1062 31244
+2248 1062 1034
+2255 1062 51360
+2263 1062 63427
+2272 1062 8388
+2292 1062 56077
+2293 1062 60401
+2294 1062 3776
+2295 1062 18597
+2297 1062 53736
+2303 1062 46015
+2310 1062 18817
+2318 1062 64609
+2327 1062 29982
+2337 1062 21594
+2358 1062 32992
+2359 1062 11525
+2360 1062 21318
+2361 1062 48188
+2362 1062 19591
+2369 1062 24052
+2376 1062 32451
+2384 1062 13574
+2393 1062 62716
+2403 1062 11343
+2414 1062 55270
+2436 1062 46888
+2437 1062 38177
+2438 1062 43712
+2439 1062 22066
+2440 1062 60769
+2441 1062 22442
+2447 1062 36705
+2454 1062 37944
+2462 1062 18916
+2471 1062 52905
+2481 1062 8804
+2492 1062 15839
+2504 1062 39877
+3573 1062 27852657
+958 1063 1
+959 1063 1
+962 1063 61427
+963 1063 43682
+964 1063 43681
+977 1063 61427
+978 1063 43682
+979 1063 21841
+984 1063 43681
+2091 1063 47967
+2092 1063 12299
+2093 1063 12299
+2108 1063 39234
+2113 1063 7091
+2114 1063 45677
+2128 1063 11626
+2155 1063 11626
+2161 1063 3685
+2191 1063 11626
+2197 1063 64460
+2242 1063 20793
+2357 1063 51049
+2429 1063 9
+2430 1063 9
+2433 1063 65020
+2434 1063 28948
+2435 1063 30048
+2440 1063 58569
+2441 1063 59682
+2446 1063 10447
+2452 1063 49205
+2453 1063 63045
+2454 1063 4602
+2455 1063 20831
+2456 1063 20831
+2457 1063 54499
+2458 1063 3283
+2460 1063 20034
+2461 1063 34647
+2462 1063 38323
+2463 1063 44724
+2464 1063 3827
+2465 1063 48517
+2466 1063 26144
+2467 1063 38256
+2468 1063 15077
+2470 1063 2443
+2471 1063 4873
+2472 1063 59363
+2473 1063 36412
+2474 1063 7488
+2475 1063 24492
+2476 1063 15053
+2477 1063 28496
+2478 1063 52343
+2479 1063 48911
+2481 1063 1754
+2482 1063 17734
+2483 1063 22543
+2484 1063 20901
+2485 1063 3031
+2486 1063 44060
+2487 1063 52257
+2488 1063 18995
+2489 1063 34830
+2490 1063 11749
+2491 1063 17185
+2493 1063 32286
+2494 1063 62532
+2495 1063 61567
+2496 1063 29662
+2497 1063 63615
+2498 1063 19555
+2499 1063 49515
+2500 1063 30285
+2501 1063 55149
+2502 1063 60230
+2503 1063 61882
+2504 1063 31672
+2505 1063 33718
+2506 1063 26461
+2507 1063 3400
+2508 1063 64009
+2509 1063 7466
+2510 1063 43201
+2511 1063 11026
+3574 1063 27852657
+959 1064 1
+962 1064 53615
+963 1064 2621
+964 1064 2620
+979 1064 29262
+984 1064 64799
+985 1064 38157
+999 1064 47246
+1003 1064 11052
+1033 1064 47246
+1037 1064 11052
+1042 1064 24012
+1125 1064 58298
+1131 1064 4707
+1269 1064 64990
+1464 1064 7199
+1743 1064 7957
+1748 1064 42936
+2102 1064 11585
+2103 1064 62708
+2106 1064 55931
+2107 1064 18904
+2108 1064 46756
+2113 1064 15834
+2114 1064 21017
+2133 1064 36064
+2159 1064 50374
+2160 1064 1006
+2161 1064 62047
+2167 1064 33119
+2174 1064 33119
+2192 1064 2453
+2193 1064 13021
+2195 1064 40386
+2196 1064 18211
+2197 1064 11115
+2203 1064 33169
+2210 1064 46278
+2218 1064 13159
+2237 1064 50714
+2238 1064 43466
+2239 1064 36031
+2241 1064 55926
+2242 1064 40373
+2248 1064 43633
+2255 1064 49931
+2263 1064 6741
+2272 1064 59103
+2292 1064 36233
+2293 1064 40306
+2294 1064 58568
+2295 1064 14371
+2297 1064 53509
+2303 1064 33304
+2310 1064 61326
+2318 1064 3888
+2327 1064 22340
+2337 1064 28758
+2358 1064 12990
+2359 1064 43454
+2360 1064 31662
+2361 1064 7523
+2362 1064 532
+2369 1064 222
+2376 1064 15796
+2384 1064 37087
+2393 1064 3442
+2403 1064 58183
+2414 1064 29425
+2436 1064 34369
+2437 1064 44232
+2438 1064 48322
+2439 1064 20993
+2440 1064 23139
+2441 1064 17539
+2447 1064 17228
+2454 1064 9774
+2462 1064 62582
+2471 1064 15954
+2481 1064 25566
+2492 1064 7399
+2504 1064 28299
+3575 1064 27852657
+960 1065 1
+961 1065 1
+962 1065 1
+963 1065 1
+964 1065 1
+979 1065 730
+984 1065 40184
+985 1065 39455
+1003 1065 40376
+1037 1065 40376
+1042 1065 30895
+1125 1065 40376
+1131 1065 9343
+1269 1065 41048
+1748 1065 16888
+2106 1065 40979
+2107 1065 42252
+2108 1065 56953
+2113 1065 6332
+2114 1065 33763
+2133 1065 42175
+2159 1065 5924
+2160 1065 34319
+2161 1065 3749
+2167 1065 42563
+2174 1065 42563
+2192 1065 38356
+2193 1065 54608
+2195 1065 10210
+2196 1065 8798
+2197 1065 22439
+2203 1065 37051
+2210 1065 58657
+2218 1065 16094
+2237 1065 41077
+2238 1065 14902
+2239 1065 33166
+2241 1065 19543
+2242 1065 18865
+2248 1065 56659
+2255 1065 18041
+2263 1065 1663
+2272 1065 51090
+2292 1065 31493
+2293 1065 22852
+2294 1065 57900
+2295 1065 28496
+2297 1065 23244
+2303 1065 57602
+2310 1065 39648
+2318 1065 31951
+2327 1065 34382
+2337 1065 48813
+2358 1065 18770
+2359 1065 7290
+2360 1065 34127
+2361 1065 22450
+2362 1065 22628
+2369 1065 36688
+2376 1065 65125
+2384 1065 27793
+2393 1065 56356
+2403 1065 39344
+2414 1065 56052
+2436 1065 56763
+2437 1065 8121
+2438 1065 54142
+2439 1065 34265
+2440 1065 46430
+2441 1065 64352
+2447 1065 18125
+2454 1065 52879
+2462 1065 52526
+2471 1065 44965
+2481 1065 59572
+2492 1065 24980
+2504 1065 44955
+3576 1065 27852657
+961 1066 1
+962 1066 1
+963 1066 1
+964 1066 1
+976 1066 1
+977 1066 1
+978 1066 1
+979 1066 2
+984 1066 1
+1731 1066 63715
+1732 1066 15989
+1733 1066 15989
+1873 1066 62404
+1875 1066 17281
+1893 1066 28460
+1901 1066 28460
+1910 1066 28460
+1926 1066 49315
+1927 1066 49315
+1928 1066 46198
+1929 1066 35115
+1941 1066 39215
+1948 1066 41932
+1956 1066 41932
+1965 1066 4871
+1975 1066 41932
+1992 1066 49315
+1993 1066 49315
+1994 1066 46198
+1995 1066 35115
+1996 1066 35115
+2007 1066 39215
+2014 1066 41932
+2022 1066 41932
+2031 1066 4871
+2041 1066 18343
+2052 1066 41932
+2080 1066 19375
+2081 1066 19375
+2082 1066 56050
+2083 1066 42175
+2084 1066 22800
+2085 1066 11290
+2086 1066 62096
+2087 1066 35323
+2088 1066 12523
+2089 1066 11290
+2090 1066 11371
+2091 1066 34292
+2092 1066 49829
+2093 1066 37306
+2104 1066 11290
+2105 1066 53857
+2106 1066 28922
+2107 1066 32449
+2108 1066 52903
+2113 1066 15597
+2126 1066 63082
+2127 1066 63706
+2128 1066 50085
+2133 1066 11880
+2153 1066 44079
+2154 1066 44703
+2155 1066 31082
+2160 1066 44777
+2166 1066 16148
+2173 1066 16148
+2187 1066 30371
+2188 1066 63148
+2190 1066 15211
+2191 1066 1590
+2196 1066 15909
+2202 1066 554
+2209 1066 28316
+2217 1066 12168
+2232 1066 16248
+2233 1066 49025
+2234 1066 44321
+2236 1066 20450
+2241 1066 32330
+2247 1066 18219
+2254 1066 32814
+2262 1066 14021
+2271 1066 1853
+2287 1066 62478
+2288 1066 29734
+2289 1066 25030
+2290 1066 43181
+2296 1066 53757
+2302 1066 56946
+2309 1066 51686
+2317 1066 56415
+2326 1066 59340
+2336 1066 57487
+2353 1066 26638
+2354 1066 53017
+2355 1066 17031
+2356 1066 13691
+2357 1066 37699
+2368 1066 57373
+2375 1066 25034
+2383 1066 6301
+2392 1066 56470
+2402 1066 20347
+2413 1066 28381
+2431 1066 10511
+2432 1066 44751
+2433 1066 37470
+2434 1066 40314
+2435 1066 51159
+2440 1066 33137
+2446 1066 49843
+2453 1066 1427
+2461 1066 31116
+2470 1066 11981
+2480 1066 8546
+2491 1066 24879
+2503 1066 51883
+3577 1066 27852657
+962 1067 1
+979 1067 55216
+984 1067 55216
+1041 1067 20878
+1130 1067 41568
+1268 1067 29369
+2091 1067 32754
+2092 1067 65510
+2093 1067 65510
+2108 1067 33640
+2113 1067 14837
+2128 1067 31447
+2154 1067 8249
+2155 1067 24574
+2160 1067 43006
+2166 1067 29949
+2173 1067 29949
+2187 1067 22880
+2188 1067 5194
+2190 1067 64147
+2191 1067 10555
+2196 1067 51680
+2202 1067 21127
+2209 1067 63999
+2217 1067 34050
+2232 1067 34142
+2233 1067 6741
+2234 1067 21115
+2236 1067 19194
+2241 1067 61503
+2247 1067 3087
+2254 1067 10121
+2262 1067 23350
+2271 1067 54821
+2287 1067 28070
+2288 1067 27838
+2289 1067 35966
+2290 1067 14141
+2296 1067 26434
+2302 1067 52612
+2309 1067 24534
+2317 1067 56075
+2326 1067 55044
+2336 1067 223
+2353 1067 56228
+2354 1067 26325
+2355 1067 11815
+2356 1067 14733
+2357 1067 29202
+2368 1067 62741
+2375 1067 15424
+2383 1067 1924
+2392 1067 3320
+2402 1067 9045
+2413 1067 8822
+2431 1067 59741
+2432 1067 4758
+2433 1067 7870
+2434 1067 16626
+2435 1067 51870
+2440 1067 1879
+2446 1067 25368
+2453 1067 37875
+2461 1067 15208
+2470 1067 59799
+2480 1067 35328
+2491 1067 42414
+2503 1067 58440
+3578 1067 27852657
+963 1068 1
+964 1068 1
+979 1068 10354
+984 1068 10353
+1041 1068 34941
+1130 1068 14543
+1268 1068 47021
+2091 1068 22339
+2092 1068 32765
+2093 1068 32765
+2108 1068 29714
+2113 1068 18788
+2128 1068 56692
+2154 1068 43182
+2155 1068 53642
+2160 1068 5532
+2166 1068 55332
+2173 1068 55332
+2187 1068 61025
+2188 1068 1802
+2190 1068 17846
+2191 1068 28650
+2196 1068 13020
+2202 1068 58493
+2209 1068 48678
+2217 1068 58867
+2232 1068 12347
+2233 1068 3018
+2234 1068 38240
+2236 1068 40835
+2241 1068 62837
+2247 1068 13605
+2254 1068 23090
+2262 1068 59381
+2271 1068 514
+2287 1068 24612
+2288 1068 16611
+2289 1068 38339
+2290 1068 5252
+2296 1068 40011
+2302 1068 17836
+2309 1068 27608
+2317 1068 12673
+2326 1068 828
+2336 1068 314
+2353 1068 36203
+2354 1068 34915
+2355 1068 35879
+2356 1068 21957
+2357 1068 14456
+2368 1068 50346
+2375 1068 5347
+2383 1068 62160
+2392 1068 15394
+2402 1068 15855
+2413 1068 15541
+2431 1068 25277
+2432 1068 15345
+2433 1068 48168
+2434 1068 28755
+2435 1068 45377
+2440 1068 51275
+2446 1068 8006
+2453 1068 563
+2461 1068 41600
+2470 1068 20496
+2480 1068 38363
+2491 1068 62374
+2503 1068 60943
+3579 1068 27852657
+964 1069 1
+979 1069 145
+984 1069 144
+1030 1069 6890
+1114 1069 52007
+1130 1069 41032
+1268 1069 2422
+1733 1069 42056
+2091 1069 10780
+2092 1069 58612
+2093 1069 58554
+2108 1069 7003
+2113 1069 25125
+2128 1069 1148
+2154 1069 47747
+2155 1069 940
+2160 1069 38532
+2166 1069 42289
+2173 1069 42289
+2187 1069 25603
+2188 1069 30908
+2190 1069 33086
+2191 1069 25360
+2196 1069 48317
+2202 1069 25873
+2209 1069 37944
+2217 1069 61176
+2232 1069 46011
+2233 1069 42075
+2234 1069 44219
+2236 1069 24593
+2241 1069 34719
+2247 1069 44949
+2254 1069 2341
+2262 1069 8321
+2271 1069 12666
+2287 1069 48286
+2288 1069 49630
+2289 1069 33712
+2290 1069 9075
+2296 1069 22702
+2302 1069 41233
+2309 1069 22021
+2317 1069 59528
+2326 1069 32058
+2336 1069 19392
+2353 1069 42561
+2354 1069 50860
+2355 1069 40866
+2356 1069 32965
+2357 1069 35588
+2368 1069 57577
+2375 1069 46180
+2383 1069 42235
+2392 1069 45043
+2402 1069 17944
+2413 1069 64073
+2431 1069 27919
+2432 1069 43689
+2433 1069 53712
+2434 1069 6220
+2435 1069 21955
+2440 1069 60662
+2446 1069 61135
+2453 1069 24300
+2461 1069 7396
+2470 1069 51763
+2480 1069 29223
+2491 1069 18450
+2503 1069 22834
+3580 1069 27852657
+965 1070 1
+967 1070 65520
+984 1070 58225
+985 1070 58225
+998 1070 28525
+999 1070 36996
+1003 1070 28525
+1042 1070 17186
+1131 1070 59845
+1250 1070 57063
+1251 1070 8458
+1254 1070 37843
+1269 1070 41473
+1456 1070 57063
+1457 1070 8458
+1460 1070 37843
+1464 1070 27678
+1734 1070 51665
+1736 1070 13856
+1739 1070 7294
+1743 1070 58227
+1748 1070 7294
+2094 1070 48283
+2096 1070 17238
+2099 1070 44693
+2102 1070 9061
+2103 1070 29889
+2106 1070 21901
+2107 1070 60955
+2108 1070 31066
+2113 1070 16992
+2114 1070 32445
+2133 1070 46634
+2159 1070 18831
+2160 1070 51733
+2161 1070 59156
+2167 1070 48279
+2174 1070 48279
+2192 1070 59781
+2193 1070 60998
+2195 1070 6536
+2196 1070 21150
+2197 1070 12239
+2203 1070 50542
+2210 1070 37736
+2218 1070 54978
+2237 1070 52456
+2238 1070 32700
+2239 1070 42590
+2241 1070 56014
+2242 1070 3763
+2248 1070 57015
+2255 1070 18367
+2263 1070 6987
+2272 1070 17530
+2292 1070 57302
+2293 1070 29224
+2294 1070 25406
+2295 1070 17695
+2297 1070 17173
+2303 1070 6554
+2310 1070 41907
+2318 1070 1299
+2327 1070 16922
+2337 1070 64913
+2358 1070 23699
+2359 1070 3251
+2360 1070 40497
+2361 1070 11933
+2362 1070 26195
+2369 1070 61446
+2376 1070 45270
+2384 1070 38667
+2393 1070 9182
+2403 1070 29224
+2414 1070 29832
+2436 1070 17535
+2437 1070 50739
+2438 1070 52686
+2439 1070 12301
+2440 1070 33540
+2441 1070 36730
+2447 1070 44566
+2454 1070 16683
+2462 1070 58705
+2471 1070 20708
+2481 1070 5521
+2492 1070 49930
+2504 1070 17
+3581 1070 27852657
+966 1071 1
+967 1071 1
+968 1071 1
+969 1071 2
+970 1071 1
+971 1071 1
+974 1071 65520
+976 1071 65520
+977 1071 65520
+978 1071 65518
+979 1071 65519
+981 1071 65520
+982 1071 65520
+983 1071 65518
+984 1071 65517
+985 1071 65519
+1461 1071 32754
+1462 1071 2843
+1463 1071 29911
+1464 1071 29911
+1740 1071 32754
+1741 1071 2843
+1742 1071 29911
+1743 1071 29911
+1745 1071 35610
+1746 1071 11
+1747 1071 29911
+1878 1071 65511
+1933 1071 65511
+1934 1071 65506
+1999 1071 65511
+2000 1071 65506
+2001 1071 65506
+2095 1071 24572
+2096 1071 24572
+2097 1071 24572
+2098 1071 7835
+2099 1071 48784
+2100 1071 65519
+2101 1071 11390
+2102 1071 42371
+2103 1071 59108
+2104 1071 60054
+2105 1071 5925
+2106 1071 59340
+2107 1071 4497
+2108 1071 10910
+2109 1071 43683
+2110 1071 38686
+2111 1071 26580
+2112 1071 4503
+2113 1071 13637
+2114 1071 2727
+2239 1071 16364
+2294 1071 16364
+2295 1071 27256
+2360 1071 40940
+2361 1071 60044
+2362 1071 49126
+2436 1071 46408
+2437 1071 13736
+2438 1071 59767
+2439 1071 51598
+2440 1071 39585
+2441 1071 51872
+2492 1071 4081
+2504 1071 42637
+3582 1071 27852657
+967 1072 1
+976 1072 43681
+981 1072 43681
+1038 1072 26301
+1127 1072 31288
+1265 1072 110
+2105 1072 1179
+2110 1072 18937
+2125 1072 63096
+2152 1072 37012
+2157 1072 20171
+2163 1072 6047
+2170 1072 6047
+2178 1072 29079
+2179 1072 39113
+2184 1072 16436
+2188 1072 45823
+2193 1072 22128
+2199 1072 30601
+2206 1072 24190
+2214 1072 18143
+2223 1072 661
+2224 1072 45825
+2226 1072 51569
+2233 1072 47912
+2238 1072 62187
+2244 1072 33990
+2251 1072 23429
+2259 1072 46534
+2268 1072 28391
+2278 1072 3693
+2279 1072 48533
+2281 1072 976
+2284 1072 976
+2293 1072 10259
+2299 1072 5443
+2306 1072 34723
+2314 1072 47773
+2323 1072 45992
+2333 1072 17601
+2344 1072 28269
+2345 1072 8879
+2347 1072 12637
+2350 1072 12637
+2354 1072 12512
+2365 1072 41504
+2372 1072 33254
+2380 1072 11511
+2389 1072 9913
+2399 1072 21413
+2410 1072 3812
+2422 1072 48641
+2423 1072 30192
+2425 1072 42606
+2428 1072 42606
+2432 1072 13970
+2437 1072 22086
+2443 1072 42800
+2450 1072 28195
+2458 1072 35762
+2467 1072 31477
+2477 1072 48664
+2488 1072 41506
+2500 1072 5756
+3583 1072 27852657
+968 1073 1
+2102 1073 6897
+2103 1073 6897
+2106 1073 35038
+2107 1073 42347
+2108 1073 35450
+2113 1073 5775
+2114 1073 35846
+2133 1073 19291
+2159 1073 57389
+2160 1073 46502
+2161 1073 39641
+2167 1073 59745
+2174 1073 59745
+2192 1073 26580
+2193 1073 25477
+2195 1073 47085
+2196 1073 34689
+2197 1073 49380
+2203 1073 26820
+2210 1073 18732
+2218 1073 24508
+2237 1073 57494
+2238 1073 63136
+2239 1073 781
+2241 1073 46483
+2242 1073 41882
+2248 1073 34961
+2255 1073 55333
+2263 1073 33749
+2272 1073 9241
+2292 1073 29501
+2293 1073 16725
+2294 1073 62945
+2295 1073 23177
+2297 1073 47793
+2303 1073 13839
+2310 1073 45482
+2318 1073 866
+2327 1073 15400
+2337 1073 6159
+2358 1073 64492
+2359 1073 21958
+2360 1073 42778
+2361 1073 61959
+2362 1073 11466
+2369 1073 14278
+2376 1073 50397
+2384 1073 31574
+2393 1073 3360
+2403 1073 14435
+2414 1073 8276
+2436 1073 3924
+2437 1073 16803
+2438 1073 22468
+2439 1073 23968
+2440 1073 60144
+2441 1073 24734
+2447 1073 59739
+2454 1073 13495
+2462 1073 4760
+2471 1073 1716
+2481 1073 52164
+2492 1073 26127
+2504 1073 13877
+3584 1073 27852657
+969 1074 1
+970 1074 1
+973 1074 60493
+974 1074 60492
+977 1074 15133
+978 1074 15135
+979 1074 20164
+982 1074 15133
+983 1074 15135
+984 1074 40328
+985 1074 20164
+1746 1074 60500
+1747 1074 64247
+1748 1074 64247
+1878 1074 23068
+1880 1074 47760
+1894 1074 13548
+1902 1074 13548
+1911 1074 13548
+1931 1074 25824
+1932 1074 25824
+1933 1074 48892
+1934 1074 15524
+1942 1074 29304
+1949 1074 862
+1957 1074 862
+1966 1074 14410
+1976 1074 862
+1997 1074 25824
+1998 1074 25824
+1999 1074 48892
+2000 1074 15524
+2001 1074 15524
+2008 1074 29304
+2015 1074 862
+2023 1074 862
+2032 1074 14410
+2042 1074 1724
+2053 1074 862
+2095 1074 55883
+2096 1074 55883
+2097 1074 31383
+2098 1074 28636
+2099 1074 38274
+2100 1074 9162
+2101 1074 15133
+2102 1074 11453
+2103 1074 38700
+2104 1074 9162
+2105 1074 15133
+2106 1074 56194
+2107 1074 56709
+2108 1074 18009
+2109 1074 9162
+2110 1074 5075
+2111 1074 3447
+2112 1074 51524
+2113 1074 5561
+2114 1074 53073
+2131 1074 51311
+2132 1074 27223
+2133 1074 59941
+2134 1074 30289
+2158 1074 29704
+2159 1074 5616
+2160 1074 38334
+2161 1074 41400
+2167 1074 45296
+2174 1074 45296
+2192 1074 38060
+2193 1074 55343
+2195 1074 41986
+2196 1074 9183
+2197 1074 53682
+2203 1074 32375
+2210 1074 34227
+2218 1074 54452
+2237 1074 58236
+2238 1074 9998
+2239 1074 18831
+2241 1074 25390
+2242 1074 55679
+2248 1074 24991
+2255 1074 13475
+2263 1074 19042
+2272 1074 30111
+2292 1074 12466
+2293 1074 29749
+2294 1074 38582
+2295 1074 5333
+2297 1074 24034
+2303 1074 4252
+2310 1074 44339
+2318 1074 27270
+2327 1074 12639
+2337 1074 48049
+2358 1074 14236
+2359 1074 1581
+2360 1074 39114
+2361 1074 43371
+2362 1074 14193
+2369 1074 7089
+2376 1074 55079
+2384 1074 2889
+2393 1074 34387
+2403 1074 25166
+2414 1074 42638
+2436 1074 57926
+2437 1074 36053
+2438 1074 55133
+2439 1074 22734
+2440 1074 832
+2441 1074 36904
+2447 1074 15522
+2454 1074 1195
+2462 1074 3421
+2471 1074 17150
+2481 1074 31308
+2492 1074 12351
+2504 1074 24490
+3585 1074 27852657
+970 1075 1
+984 1075 56901
+985 1075 56901
+998 1075 36996
+999 1075 30940
+1003 1075 34581
+1033 1075 2415
+1037 1075 63106
+1042 1075 59634
+1131 1075 6472
+1254 1075 19220
+1269 1075 43857
+1460 1075 19220
+1464 1075 23139
+1739 1075 44371
+1743 1075 38612
+1748 1075 26909
+2099 1075 3590
+2102 1075 41788
+2103 1075 5143
+2106 1075 11668
+2107 1075 43137
+2108 1075 37994
+2113 1075 20743
+2114 1075 12929
+2133 1075 3411
+2159 1075 26942
+2160 1075 15818
+2161 1075 32168
+2167 1075 59145
+2174 1075 59145
+2192 1075 51431
+2193 1075 62109
+2195 1075 58663
+2196 1075 10505
+2197 1075 49647
+2203 1075 23046
+2210 1075 31345
+2218 1075 37721
+2237 1075 61325
+2238 1075 5642
+2239 1075 3586
+2241 1075 28110
+2242 1075 53823
+2248 1075 43044
+2255 1075 36334
+2263 1075 29069
+2272 1075 56869
+2292 1075 52641
+2293 1075 12526
+2294 1075 8029
+2295 1075 34996
+2297 1075 49458
+2303 1075 6424
+2310 1075 30773
+2318 1075 12683
+2327 1075 31844
+2337 1075 40496
+2358 1075 56126
+2359 1075 31554
+2360 1075 35220
+2361 1075 21586
+2362 1075 12182
+2369 1075 39101
+2376 1075 59952
+2384 1075 18419
+2393 1075 29689
+2403 1075 3269
+2414 1075 28294
+2436 1075 4338
+2437 1075 64734
+2438 1075 19280
+2439 1075 52545
+2440 1075 19126
+2441 1075 44456
+2447 1075 53591
+2454 1075 14289
+2462 1075 49993
+2471 1075 25865
+2481 1075 39988
+2492 1075 31587
+2504 1075 17129
+3586 1075 27852657
+971 1076 1
+2102 1076 4095
+2103 1076 4095
+2106 1076 63038
+2107 1076 22601
+2108 1076 18506
+2113 1076 21334
+2114 1076 2828
+2133 1076 22267
+2159 1076 1639
+2160 1076 61282
+2161 1076 26553
+2167 1076 58022
+2174 1076 58022
+2192 1076 38659
+2193 1076 19657
+2195 1076 33081
+2196 1076 2125
+2197 1076 56986
+2203 1076 40007
+2210 1076 13062
+2218 1076 20561
+2237 1076 56666
+2238 1076 7534
+2239 1076 11661
+2241 1076 39288
+2242 1076 14799
+2248 1076 18212
+2255 1076 49123
+2263 1076 17391
+2272 1076 62351
+2292 1076 19891
+2293 1076 38644
+2294 1076 17725
+2295 1076 21476
+2297 1076 34450
+2303 1076 15733
+2310 1076 24946
+2318 1076 51391
+2327 1076 60552
+2337 1076 63722
+2358 1076 15341
+2359 1076 22822
+2360 1076 5945
+2361 1076 32182
+2362 1076 13454
+2369 1076 42615
+2376 1076 45388
+2384 1076 31912
+2393 1076 53905
+2403 1076 40695
+2414 1076 42494
+2436 1076 3038
+2437 1076 12277
+2438 1076 18601
+2439 1076 11473
+2440 1076 47603
+2441 1076 58754
+2447 1076 42133
+2454 1076 54675
+2462 1076 8799
+2471 1076 35179
+2481 1076 4352
+2492 1076 22005
+2504 1076 32897
+3587 1076 27852657
+972 1077 1
+973 1077 1
+974 1077 1
+976 1077 1
+977 1077 1
+978 1077 2
+979 1077 1
+981 1077 1
+982 1077 1
+983 1077 2
+984 1077 2
+985 1077 1
+1461 1077 49144
+1462 1077 49143
+1463 1077 32760
+1464 1077 32760
+1740 1077 49144
+1741 1077 49143
+1742 1077 32760
+1743 1077 32760
+1745 1077 65520
+1746 1077 65515
+1747 1077 32760
+1878 1077 4
+1933 1077 4
+1934 1077 6
+1999 1077 4
+2000 1077 6
+2001 1077 6
+2095 1077 65518
+2096 1077 65518
+2097 1077 53235
+2098 1077 53235
+2099 1077 53238
+2100 1077 1
+2101 1077 28667
+2102 1077 28669
+2103 1077 40952
+2104 1077 35491
+2105 1077 64157
+2106 1077 23208
+2107 1077 10925
+2108 1077 35494
+2109 1077 35491
+2110 1077 23208
+2111 1077 47780
+2112 1077 6831
+2113 1077 1370
+2114 1077 31397
+2239 1077 32767
+2294 1077 32767
+2295 1077 27318
+2360 1077 49145
+2361 1077 27307
+2362 1077 32766
+2436 1077 42317
+2437 1077 3413
+2438 1077 11601
+2439 1077 43683
+2440 1077 27300
+2441 1077 682
+2492 1077 24576
+2504 1077 10928
+3588 1077 27852657
+973 1078 1
+974 1078 1
+977 1078 61427
+978 1078 43682
+979 1078 43681
+982 1078 61427
+983 1078 43682
+984 1078 21841
+985 1078 43681
+2113 1078 25080
+2114 1078 25080
+2161 1078 48240
+2197 1078 2747
+2242 1078 1458
+2429 1078 16378
+2430 1078 16378
+2433 1078 58700
+2434 1078 62801
+2435 1078 46423
+2440 1078 9731
+2441 1078 22229
+2446 1078 44679
+2452 1078 48461
+2453 1078 30126
+2454 1078 31562
+2455 1078 53358
+2456 1078 53358
+2457 1078 63399
+2458 1078 28531
+2460 1078 5970
+2461 1078 10721
+2462 1078 30618
+2463 1078 25126
+2464 1078 13093
+2465 1078 25256
+2466 1078 32824
+2467 1078 36055
+2468 1078 44777
+2470 1078 61670
+2471 1078 28748
+2472 1078 23191
+2473 1078 17155
+2474 1078 1439
+2475 1078 41704
+2476 1078 31486
+2477 1078 14402
+2478 1078 4819
+2479 1078 59945
+2481 1078 39690
+2482 1078 6256
+2483 1078 38637
+2484 1078 15973
+2485 1078 46751
+2486 1078 5047
+2487 1078 27699
+2488 1078 63585
+2489 1078 43020
+2490 1078 22803
+2491 1078 14532
+2493 1078 4949
+2494 1078 64051
+2495 1078 19623
+2496 1078 56007
+2497 1078 13368
+2498 1078 8321
+2499 1078 62816
+2500 1078 16411
+2501 1078 19078
+2502 1078 24133
+2503 1078 10046
+2504 1078 9197
+2505 1078 18822
+2506 1078 4910
+2507 1078 47082
+2508 1078 21890
+2509 1078 20714
+2510 1078 20311
+2511 1078 64385
+3589 1078 27852657
+974 1079 1
+979 1079 65520
+984 1079 44995
+985 1079 44996
+999 1079 2415
+1003 1079 63106
+1033 1079 2415
+1037 1079 63106
+1042 1079 58093
+1131 1079 58379
+1269 1079 256
+1464 1079 42359
+1743 1079 17462
+1748 1079 48059
+2102 1079 41811
+2103 1079 8756
+2106 1079 65436
+2107 1079 18864
+2108 1079 10108
+2113 1079 50866
+2114 1079 55669
+2133 1079 51110
+2159 1079 25845
+2160 1079 1872
+2161 1079 58322
+2167 1079 44313
+2174 1079 44313
+2192 1079 47757
+2193 1079 23014
+2195 1079 54087
+2196 1079 46852
+2197 1079 64236
+2203 1079 5598
+2210 1079 47134
+2218 1079 2821
+2237 1079 17912
+2238 1079 39197
+2239 1079 1821
+2241 1079 25592
+2242 1079 65209
+2248 1079 58705
+2255 1079 43468
+2263 1079 39823
+2272 1079 37002
+2292 1079 6717
+2293 1079 44195
+2294 1079 34215
+2295 1079 60005
+2297 1079 61787
+2303 1079 5678
+2310 1079 33547
+2318 1079 15746
+2327 1079 28442
+2337 1079 56961
+2358 1079 47533
+2359 1079 44853
+2360 1079 52569
+2361 1079 43560
+2362 1079 11424
+2369 1079 35477
+2376 1079 31481
+2384 1079 1389
+2393 1079 64437
+2403 1079 20221
+2414 1079 28781
+2436 1079 55685
+2437 1079 35426
+2438 1079 22371
+2439 1079 64867
+2440 1079 46086
+2441 1079 52252
+2447 1079 39529
+2454 1079 24736
+2462 1079 63887
+2471 1079 39641
+2481 1079 3993
+2492 1079 63984
+2504 1079 14285
+3590 1079 27852657
+975 1080 1
+976 1080 1
+977 1080 1
+978 1080 1
+979 1080 1
+980 1080 1
+981 1080 1
+982 1080 1
+983 1080 1
+984 1080 2
+985 1080 1
+1461 1080 32754
+1462 1080 62667
+1463 1080 2844
+1464 1080 2844
+1740 1080 32754
+1741 1080 62667
+1742 1080 2844
+1743 1080 2844
+1745 1080 29913
+1746 1080 1
+1747 1080 2844
+1878 1080 65515
+1933 1080 65515
+1934 1080 65512
+1999 1080 65515
+2000 1080 65512
+2001 1080 65512
+2095 1080 6
+2096 1080 6
+2097 1080 24572
+2098 1080 360
+2099 1080 354
+2100 1080 65519
+2101 1080 21367
+2102 1080 55903
+2103 1080 55549
+2104 1080 60066
+2105 1080 15914
+2106 1080 44397
+2107 1080 33711
+2108 1080 43683
+2109 1080 19111
+2110 1080 40480
+2111 1080 3442
+2112 1080 17322
+2113 1080 13651
+2114 1080 35489
+2239 1080 49131
+2294 1080 49131
+2295 1080 60035
+2360 1080 24564
+2361 1080 27291
+2362 1080 16373
+2436 1080 46408
+2437 1080 38131
+2438 1080 57626
+2439 1080 21415
+2440 1080 47778
+2441 1080 60061
+2492 1080 28657
+2504 1080 44693
+3591 1080 27852657
+976 1081 1
+977 1081 1
+978 1081 1
+979 1081 1
+981 1081 1
+982 1081 1
+983 1081 1
+984 1081 2
+985 1081 1
+1746 1081 63715
+1747 1081 15989
+1748 1081 15989
+1878 1081 62404
+1880 1081 17281
+1894 1081 28460
+1902 1081 28460
+1911 1081 28460
+1931 1081 49315
+1932 1081 49315
+1933 1081 46198
+1934 1081 35115
+1942 1081 39215
+1949 1081 41932
+1957 1081 41932
+1966 1081 4871
+1976 1081 41932
+1997 1081 49315
+1998 1081 49315
+1999 1081 46198
+2000 1081 35115
+2001 1081 35115
+2008 1081 39215
+2015 1081 41932
+2023 1081 41932
+2032 1081 4871
+2042 1081 18343
+2053 1081 41932
+2095 1081 19375
+2096 1081 19375
+2097 1081 56050
+2098 1081 42175
+2099 1081 22800
+2100 1081 11290
+2101 1081 62096
+2102 1081 35323
+2103 1081 12523
+2104 1081 11290
+2105 1081 11371
+2106 1081 34292
+2107 1081 49829
+2108 1081 37306
+2109 1081 11290
+2110 1081 53857
+2111 1081 28922
+2112 1081 32449
+2113 1081 52903
+2114 1081 15597
+2131 1081 63082
+2132 1081 63706
+2133 1081 50085
+2134 1081 11880
+2158 1081 44079
+2159 1081 44703
+2160 1081 31082
+2161 1081 44777
+2167 1081 16148
+2174 1081 16148
+2192 1081 30371
+2193 1081 63148
+2195 1081 15211
+2196 1081 1590
+2197 1081 15909
+2203 1081 554
+2210 1081 28316
+2218 1081 12168
+2237 1081 16248
+2238 1081 49025
+2239 1081 44321
+2241 1081 20450
+2242 1081 32330
+2248 1081 18219
+2255 1081 32814
+2263 1081 14021
+2272 1081 1853
+2292 1081 62478
+2293 1081 29734
+2294 1081 25030
+2295 1081 43181
+2297 1081 53757
+2303 1081 56946
+2310 1081 51686
+2318 1081 56415
+2327 1081 59340
+2337 1081 57487
+2358 1081 26638
+2359 1081 53017
+2360 1081 17031
+2361 1081 13691
+2362 1081 37699
+2369 1081 57373
+2376 1081 25034
+2384 1081 6301
+2393 1081 56470
+2403 1081 20347
+2414 1081 28381
+2436 1081 10511
+2437 1081 44751
+2438 1081 37470
+2439 1081 40314
+2440 1081 51159
+2441 1081 33137
+2447 1081 49843
+2454 1081 1427
+2462 1081 31116
+2471 1081 11981
+2481 1081 8546
+2492 1081 24879
+2504 1081 51883
+3592 1081 27852657
+977 1082 1
+984 1082 55216
+985 1082 55216
+1042 1082 20878
+1131 1082 41568
+1269 1082 29369
+2106 1082 32754
+2107 1082 65510
+2108 1082 65510
+2113 1082 33640
+2114 1082 14837
+2133 1082 31447
+2159 1082 8249
+2160 1082 24574
+2161 1082 43006
+2167 1082 29949
+2174 1082 29949
+2192 1082 22880
+2193 1082 5194
+2195 1082 64147
+2196 1082 10555
+2197 1082 51680
+2203 1082 21127
+2210 1082 63999
+2218 1082 34050
+2237 1082 34142
+2238 1082 6741
+2239 1082 21115
+2241 1082 19194
+2242 1082 61503
+2248 1082 3087
+2255 1082 10121
+2263 1082 23350
+2272 1082 54821
+2292 1082 28070
+2293 1082 27838
+2294 1082 35966
+2295 1082 14141
+2297 1082 26434
+2303 1082 52612
+2310 1082 24534
+2318 1082 56075
+2327 1082 55044
+2337 1082 223
+2358 1082 56228
+2359 1082 26325
+2360 1082 11815
+2361 1082 14733
+2362 1082 29202
+2369 1082 62741
+2376 1082 15424
+2384 1082 1924
+2393 1082 3320
+2403 1082 9045
+2414 1082 8822
+2436 1082 59741
+2437 1082 4758
+2438 1082 7870
+2439 1082 16626
+2440 1082 51870
+2441 1082 1879
+2447 1082 25368
+2454 1082 37875
+2462 1082 15208
+2471 1082 59799
+2481 1082 35328
+2492 1082 42414
+2504 1082 58440
+3593 1082 27852657
+978 1083 1
+979 1083 1
+984 1083 10354
+985 1083 10353
+1042 1083 34941
+1131 1083 14543
+1269 1083 47021
+2106 1083 22339
+2107 1083 32765
+2108 1083 32765
+2113 1083 29714
+2114 1083 18788
+2133 1083 56692
+2159 1083 43182
+2160 1083 53642
+2161 1083 5532
+2167 1083 55332
+2174 1083 55332
+2192 1083 61025
+2193 1083 1802
+2195 1083 17846
+2196 1083 28650
+2197 1083 13020
+2203 1083 58493
+2210 1083 48678
+2218 1083 58867
+2237 1083 12347
+2238 1083 3018
+2239 1083 38240
+2241 1083 40835
+2242 1083 62837
+2248 1083 13605
+2255 1083 23090
+2263 1083 59381
+2272 1083 514
+2292 1083 24612
+2293 1083 16611
+2294 1083 38339
+2295 1083 5252
+2297 1083 40011
+2303 1083 17836
+2310 1083 27608
+2318 1083 12673
+2327 1083 828
+2337 1083 314
+2358 1083 36203
+2359 1083 34915
+2360 1083 35879
+2361 1083 21957
+2362 1083 14456
+2369 1083 50346
+2376 1083 5347
+2384 1083 62160
+2393 1083 15394
+2403 1083 15855
+2414 1083 15541
+2436 1083 25277
+2437 1083 15345
+2438 1083 48168
+2439 1083 28755
+2440 1083 45377
+2441 1083 51275
+2447 1083 8006
+2454 1083 563
+2462 1083 41600
+2471 1083 20496
+2481 1083 38363
+2492 1083 62374
+2504 1083 60943
+3594 1083 27852657
+979 1084 1
+984 1084 145
+985 1084 144
+1037 1084 6890
+1125 1084 52007
+1131 1084 41032
+1269 1084 2422
+1748 1084 42056
+2106 1084 10780
+2107 1084 58612
+2108 1084 58554
+2113 1084 7003
+2114 1084 25125
+2133 1084 1148
+2159 1084 47747
+2160 1084 940
+2161 1084 38532
+2167 1084 42289
+2174 1084 42289
+2192 1084 25603
+2193 1084 30908
+2195 1084 33086
+2196 1084 25360
+2197 1084 48317
+2203 1084 25873
+2210 1084 37944
+2218 1084 61176
+2237 1084 46011
+2238 1084 42075
+2239 1084 44219
+2241 1084 24593
+2242 1084 34719
+2248 1084 44949
+2255 1084 2341
+2263 1084 8321
+2272 1084 12666
+2292 1084 48286
+2293 1084 49630
+2294 1084 33712
+2295 1084 9075
+2297 1084 22702
+2303 1084 41233
+2310 1084 22021
+2318 1084 59528
+2327 1084 32058
+2337 1084 19392
+2358 1084 42561
+2359 1084 50860
+2360 1084 40866
+2361 1084 32965
+2362 1084 35588
+2369 1084 57577
+2376 1084 46180
+2384 1084 42235
+2393 1084 45043
+2403 1084 17944
+2414 1084 64073
+2436 1084 27919
+2437 1084 43689
+2438 1084 53712
+2439 1084 6220
+2440 1084 21955
+2441 1084 60662
+2447 1084 61135
+2454 1084 24300
+2462 1084 7396
+2471 1084 51763
+2481 1084 29223
+2492 1084 18450
+2504 1084 22834
+3595 1084 27852657
+980 1085 1
+1042 1085 20187
+1131 1085 57940
+1269 1085 37055
+2113 1085 61646
+2114 1085 31683
+2133 1085 40553
+2160 1085 9396
+2161 1085 20716
+2167 1085 45067
+2174 1085 45067
+2192 1085 7219
+2193 1085 3284
+2195 1085 39935
+2196 1085 51695
+2197 1085 4870
+2203 1085 51351
+2210 1085 65177
+2218 1085 20110
+2237 1085 38560
+2238 1085 15104
+2239 1085 15104
+2241 1085 28140
+2242 1085 9685
+2248 1085 45278
+2255 1085 25348
+2263 1085 27912
+2272 1085 7802
+2292 1085 17389
+2293 1085 19471
+2294 1085 19471
+2295 1085 19471
+2297 1085 55282
+2303 1085 61844
+2310 1085 53109
+2318 1085 35284
+2327 1085 27358
+2337 1085 19556
+2358 1085 51786
+2359 1085 41985
+2360 1085 41985
+2361 1085 41985
+2362 1085 37813
+2369 1085 32756
+2376 1085 63387
+2384 1085 53062
+2393 1085 58842
+2403 1085 9064
+2414 1085 55029
+2436 1085 54287
+2437 1085 5337
+2438 1085 5337
+2439 1085 5337
+2440 1085 61025
+2441 1085 25638
+2447 1085 61154
+2454 1085 54886
+2462 1085 15251
+2471 1085 17845
+2481 1085 46069
+2492 1085 32863
+2504 1085 48959
+3596 1085 27852657
+981 1086 1
+984 1086 43681
+985 1086 43681
+1042 1086 26301
+1131 1086 31288
+1269 1086 110
+2113 1086 1179
+2114 1086 18937
+2133 1086 63096
+2160 1086 37012
+2161 1086 20171
+2167 1086 6047
+2174 1086 6047
+2192 1086 29079
+2193 1086 39113
+2195 1086 16436
+2196 1086 45823
+2197 1086 22128
+2203 1086 30601
+2210 1086 24190
+2218 1086 18143
+2237 1086 661
+2238 1086 45825
+2239 1086 51569
+2241 1086 47912
+2242 1086 62187
+2248 1086 33990
+2255 1086 23429
+2263 1086 46534
+2272 1086 28391
+2292 1086 3693
+2293 1086 48533
+2294 1086 976
+2295 1086 976
+2297 1086 10259
+2303 1086 5443
+2310 1086 34723
+2318 1086 47773
+2327 1086 45992
+2337 1086 17601
+2358 1086 28269
+2359 1086 8879
+2360 1086 12637
+2361 1086 12637
+2362 1086 12512
+2369 1086 41504
+2376 1086 33254
+2384 1086 11511
+2393 1086 9913
+2403 1086 21413
+2414 1086 3812
+2436 1086 48641
+2437 1086 30192
+2438 1086 42606
+2439 1086 42606
+2440 1086 13970
+2441 1086 22086
+2447 1086 42800
+2454 1086 28195
+2462 1086 35762
+2471 1086 31477
+2481 1086 48664
+2492 1086 41506
+2504 1086 5756
+3597 1086 27852657
+982 1087 1
+984 1087 28737
+985 1087 28737
+1042 1087 54030
+1131 1087 55705
+1269 1087 48843
+2113 1087 27971
+2114 1087 31853
+2133 1087 38204
+2159 1087 36146
+2160 1087 47020
+2161 1087 51155
+2167 1087 58568
+2174 1087 58568
+2192 1087 61412
+2193 1087 46148
+2195 1087 48003
+2196 1087 39029
+2197 1087 30753
+2203 1087 36176
+2210 1087 9970
+2218 1087 16923
+2237 1087 6740
+2238 1087 8876
+2239 1087 3132
+2241 1087 18761
+2242 1087 59927
+2248 1087 55308
+2255 1087 13678
+2263 1087 50901
+2272 1087 33978
+2292 1087 50513
+2293 1087 57774
+2294 1087 39810
+2295 1087 55195
+2297 1087 46407
+2303 1087 44046
+2310 1087 48295
+2318 1087 7467
+2327 1087 23378
+2337 1087 54921
+2358 1087 6161
+2359 1087 28425
+2360 1087 24667
+2361 1087 64361
+2362 1087 19370
+2369 1087 15424
+2376 1087 48190
+2384 1087 18542
+2393 1087 12265
+2403 1087 16913
+2414 1087 27513
+2436 1087 54169
+2437 1087 48008
+2438 1087 35594
+2439 1087 26679
+2440 1087 4387
+2441 1087 62496
+2447 1087 10445
+2454 1087 19466
+2462 1087 46348
+2471 1087 30291
+2481 1087 7501
+2492 1087 59118
+2504 1087 12963
+3598 1087 27852657
+983 1088 1
+984 1088 58625
+985 1088 58625
+1042 1088 28245
+1131 1088 24171
+1269 1088 49545
+2113 1088 54563
+2114 1088 13544
+2133 1088 54384
+2159 1088 29375
+2160 1088 31792
+2161 1088 11786
+2167 1088 7696
+2174 1088 7696
+2192 1088 5764
+2193 1088 40730
+2195 1088 37618
+2196 1088 8305
+2197 1088 49063
+2203 1088 60537
+2210 1088 3678
+2218 1088 61503
+2237 1088 54817
+2238 1088 50130
+2239 1088 50130
+2241 1088 22407
+2242 1088 22514
+2248 1088 29304
+2255 1088 65233
+2263 1088 21920
+2272 1088 25938
+2292 1088 36435
+2293 1088 28447
+2294 1088 28447
+2295 1088 13062
+2297 1088 59264
+2303 1088 57187
+2310 1088 26164
+2318 1088 13226
+2327 1088 31628
+2337 1088 5690
+2358 1088 43525
+2359 1088 40806
+2360 1088 40806
+2361 1088 1112
+2362 1088 52069
+2369 1088 23603
+2376 1088 6911
+2384 1088 46448
+2393 1088 10159
+2403 1088 21236
+2414 1088 15546
+2436 1088 23623
+2437 1088 11406
+2438 1088 11406
+2439 1088 20321
+2440 1088 31812
+2441 1088 29848
+2447 1088 19325
+2454 1088 60648
+2462 1088 24053
+2471 1088 28207
+2481 1088 203
+2492 1088 37931
+2504 1088 51196
+3599 1088 27852657
+986 1089 1
+991 1089 36421
+1019 1089 39501
+1024 1089 15488
+1032 1089 14930
+1045 1089 503
+1065 1089 503
+1093 1089 46956
+1094 1089 34662
+1097 1089 57053
+1105 1089 11318
+1117 1089 56538
+1134 1089 58186
+1154 1089 63446
+1186 1089 62943
+1224 1089 56204
+1225 1089 61015
+1226 1089 5436
+1240 1089 4478
+1254 1089 13094
+1273 1089 43432
+1298 1089 58734
+1331 1089 26437
+1375 1089 29015
+1429 1089 46455
+1430 1089 40018
+1431 1089 9545
+1436 1089 49133
+1460 1089 8814
+1480 1089 3153
+1507 1089 13701
+1542 1089 64246
+1587 1089 19245
+1642 1089 55751
+1707 1089 35787
+1708 1089 13541
+1709 1089 56759
+1714 1089 53209
+1724 1089 21830
+1759 1089 3524
+1786 1089 37148
+1821 1089 65294
+1866 1089 48082
+1921 1089 17595
+1987 1089 27365
+2066 1089 52726
+2067 1089 35015
+2068 1089 56568
+2074 1089 65117
+2084 1089 14255
+2099 1089 35460
+2119 1089 60330
+2146 1089 1363
+2182 1089 9525
+2227 1089 51739
+2282 1089 40937
+2348 1089 957
+2426 1089 24971
+3600 1089 27852657
+987 1090 1
+988 1090 1
+996 1090 65520
+1006 1090 1
+1473 1090 25432
+1727 1090 12336
+1728 1090 38596
+1732 1090 38596
+1790 1090 11729
+1794 1090 11865
+1829 1090 55222
+1869 1090 41332
+1874 1090 35415
+1892 1090 5569
+1900 1090 5569
+1909 1090 5569
+1922 1090 46105
+1923 1090 17102
+1924 1090 8970
+1925 1090 12824
+1940 1090 4376
+1947 1090 40487
+1955 1090 40487
+1964 1090 46056
+1974 1090 40487
+1988 1090 46105
+1989 1090 17102
+1990 1090 8970
+1991 1090 12824
+1995 1090 20654
+2006 1090 4376
+2013 1090 40487
+2021 1090 40487
+2030 1090 46056
+2040 1090 15453
+2051 1090 40487
+2070 1090 19430
+2071 1090 19430
+2072 1090 43840
+2073 1090 33112
+2074 1090 13682
+2075 1090 15520
+2076 1090 21187
+2077 1090 17000
+2078 1090 3318
+2085 1090 15520
+2086 1090 21187
+2087 1090 45665
+2088 1090 60959
+2092 1090 57641
+2100 1090 15520
+2101 1090 21187
+2102 1090 17603
+2103 1090 51850
+2107 1090 41611
+2112 1090 49491
+2122 1090 55056
+2123 1090 8339
+2127 1090 24285
+2132 1090 6194
+2149 1090 55995
+2150 1090 39145
+2154 1090 22211
+2159 1090 59888
+2165 1090 17010
+2172 1090 17010
+2183 1090 62763
+2184 1090 22111
+2186 1090 61615
+2190 1090 19058
+2195 1090 44937
+2201 1090 37148
+2208 1090 23368
+2216 1090 6358
+2228 1090 18880
+2229 1090 43749
+2230 1090 34245
+2235 1090 23172
+2240 1090 10114
+2246 1090 34750
+2253 1090 17376
+2261 1090 57380
+2270 1090 51022
+2283 1090 32730
+2284 1090 15014
+2285 1090 20627
+2286 1090 42856
+2295 1090 30480
+2301 1090 61006
+2308 1090 44727
+2316 1090 27637
+2325 1090 20649
+2335 1090 35148
+2349 1090 7399
+2350 1090 63186
+2351 1090 43520
+2352 1090 16627
+2356 1090 46688
+2367 1090 37098
+2374 1090 21119
+2382 1090 16669
+2391 1090 4697
+2401 1090 28490
+2412 1090 58863
+2427 1090 63973
+2428 1090 23483
+2429 1090 5157
+2430 1090 22480
+2434 1090 40144
+2439 1090 34123
+2445 1090 34569
+2452 1090 10300
+2460 1090 50789
+2469 1090 12493
+2479 1090 7290
+2490 1090 60363
+2502 1090 25003
+3601 1090 27852657
+988 1091 1
+993 1091 57589
+1021 1091 26020
+1026 1091 22286
+1033 1091 14366
+1048 1091 57570
+1068 1091 57570
+1098 1091 7814
+1099 1091 24449
+1101 1091 36151
+1109 1091 31012
+1120 1091 53853
+1136 1091 6662
+1157 1091 34880
+1188 1091 42831
+1232 1091 65470
+1233 1091 52325
+1234 1091 52325
+1244 1091 57470
+1258 1091 43430
+1276 1091 31637
+1301 1091 34779
+1334 1091 54413
+1379 1091 11582
+1437 1091 22247
+1438 1091 58697
+1439 1091 58697
+1440 1091 19109
+1464 1091 46787
+1484 1091 25087
+1511 1091 45373
+1546 1091 43376
+1591 1091 53982
+1646 1091 42400
+1715 1091 54026
+1716 1091 28423
+1717 1091 28423
+1718 1091 31973
+1728 1091 29874
+1763 1091 29149
+1790 1091 62547
+1825 1091 23177
+1870 1091 9621
+1925 1091 33569
+1991 1091 56690
+2075 1091 44831
+2076 1091 23820
+2077 1091 23820
+2078 1091 15271
+2088 1091 44244
+2103 1091 60014
+2123 1091 47262
+2150 1091 22343
+2186 1091 44069
+2231 1091 60873
+2286 1091 4112
+2352 1091 64382
+2430 1091 17319
+3602 1091 27852657
+989 1092 1
+990 1092 53654
+992 1092 14438
+994 1092 14438
+1000 1092 64852
+1004 1092 50414
+1011 1092 64977
+1046 1092 59053
+1049 1092 41452
+1053 1092 8401
+1057 1092 16452
+1078 1092 16452
+1132 1092 3505
+1133 1092 25738
+1135 1092 33357
+1138 1092 51901
+1142 1092 10055
+1146 1092 25280
+1169 1092 16248
+1197 1092 65317
+1270 1092 26568
+1271 1092 22309
+1272 1092 8838
+1278 1092 674
+1283 1092 25071
+1289 1092 59514
+1314 1092 15010
+1347 1092 37960
+1392 1092 38164
+1476 1092 35901
+1477 1092 34153
+1479 1092 62229
+1482 1092 60533
+1491 1092 47385
+1497 1092 38492
+1524 1092 52609
+1559 1092 63135
+1604 1092 49623
+1659 1092 11459
+1755 1092 21027
+1756 1092 37123
+1758 1092 9275
+1761 1092 6186
+1765 1092 29179
+1776 1092 18750
+1803 1092 14527
+1838 1092 43850
+1883 1092 26416
+1938 1092 59818
+2004 1092 48359
+2115 1092 10380
+2116 1092 7736
+2118 1092 15446
+2121 1092 54712
+2125 1092 43794
+2130 1092 7095
+2136 1092 30560
+2163 1092 13450
+2199 1092 17069
+2244 1092 6900
+2299 1092 23179
+2365 1092 38175
+2443 1092 64846
+3603 1092 27852657
+990 1093 1
+995 1093 63961
+996 1093 4425
+997 1093 4425
+1003 1093 32093
+1007 1093 40057
+1008 1093 12389
+1009 1093 15795
+1010 1093 49726
+1014 1093 35497
+1052 1093 19702
+1056 1093 4811
+1141 1093 19702
+1144 1093 2965
+1273 1093 48394
+1287 1093 5312
+1480 1093 48394
+1484 1093 17127
+1759 1093 48925
+1763 1093 16596
+1768 1093 16349
+2119 1093 54500
+2122 1093 10430
+2123 1093 21451
+2126 1093 9100
+2127 1093 18597
+2128 1093 44438
+2133 1093 13655
+2134 1093 23254
+2139 1093 28919
+2165 1093 58184
+2166 1093 59553
+2167 1093 51184
+2168 1093 7809
+2175 1093 7809
+2198 1093 53630
+2199 1093 61427
+2201 1093 43964
+2202 1093 39208
+2203 1093 35372
+2204 1093 10482
+2211 1093 60839
+2219 1093 53030
+2243 1093 14519
+2244 1093 63597
+2245 1093 30186
+2247 1093 24501
+2248 1093 12557
+2249 1093 61208
+2256 1093 13183
+2264 1093 15201
+2273 1093 27692
+2298 1093 37798
+2299 1093 43550
+2300 1093 8989
+2301 1093 30363
+2303 1093 30519
+2304 1093 7322
+2311 1093 8588
+2319 1093 64704
+2328 1093 50198
+2338 1093 22506
+2364 1093 41184
+2365 1093 61399
+2366 1093 38487
+2367 1093 39335
+2368 1093 38261
+2370 1093 43051
+2377 1093 62728
+2385 1093 29438
+2394 1093 56124
+2404 1093 63568
+2415 1093 41062
+2442 1093 62456
+2443 1093 13813
+2444 1093 12759
+2445 1093 35616
+2446 1093 4226
+2447 1093 48077
+2448 1093 37708
+2455 1093 39564
+2463 1093 4754
+2472 1093 25671
+2482 1093 28773
+2493 1093 43534
+2505 1093 2993
+3604 1093 27852657
+991 1094 1
+995 1094 42177
+996 1094 44805
+997 1094 44805
+1003 1094 1618
+1007 1094 52528
+1008 1094 30194
+1009 1094 49726
+1010 1094 63041
+1014 1094 17235
+1048 1094 47246
+1052 1094 33030
+1056 1094 38835
+1141 1094 14755
+1144 1094 29456
+1273 1094 17127
+1287 1094 26929
+1480 1094 17127
+1484 1094 55593
+1759 1094 16596
+1763 1094 56882
+1768 1094 34742
+2119 1094 11021
+2122 1094 1257
+2123 1094 41359
+2126 1094 44069
+2127 1094 50950
+2128 1094 46128
+2133 1094 54656
+2134 1094 51467
+2139 1094 42655
+2165 1094 2917
+2166 1094 36529
+2167 1094 62438
+2168 1094 60100
+2175 1094 60100
+2198 1094 29797
+2199 1094 48695
+2201 1094 49795
+2202 1094 39496
+2203 1094 54458
+2204 1094 6883
+2211 1094 18255
+2219 1094 23676
+2243 1094 6379
+2244 1094 6413
+2245 1094 52705
+2247 1094 46462
+2248 1094 45318
+2249 1094 61432
+2256 1094 41113
+2264 1094 32576
+2273 1094 8900
+2298 1094 8618
+2299 1094 43764
+2300 1094 23342
+2301 1094 39022
+2303 1094 58905
+2304 1094 22821
+2311 1094 55653
+2319 1094 906
+2328 1094 527
+2338 1094 57148
+2364 1094 57666
+2365 1094 24401
+2366 1094 37843
+2367 1094 61356
+2368 1094 9835
+2370 1094 39878
+2377 1094 21372
+2385 1094 57368
+2394 1094 11755
+2404 1094 25135
+2415 1094 33508
+2442 1094 25080
+2443 1094 31669
+2444 1094 7630
+2445 1094 26145
+2446 1094 59299
+2447 1094 1921
+2448 1094 10144
+2455 1094 18100
+2463 1094 2112
+2472 1094 5134
+2482 1094 45544
+2493 1094 26292
+2505 1094 24530
+3605 1094 27852657
+992 1095 1
+994 1095 1
+995 1095 61484
+996 1095 59536
+997 1095 59536
+1003 1095 57425
+1007 1095 36134
+1008 1095 38245
+1014 1095 14717
+1052 1095 14717
+1056 1095 60122
+1141 1095 14717
+1144 1095 13831
+1287 1095 4385
+1768 1095 59199
+2122 1095 65413
+2123 1095 65413
+2126 1095 2830
+2127 1095 1676
+2128 1095 40607
+2133 1095 9146
+2134 1095 61541
+2139 1095 38012
+2165 1095 27872
+2166 1095 20182
+2167 1095 3578
+2168 1095 18541
+2175 1095 18541
+2198 1095 41729
+2199 1095 17854
+2201 1095 59645
+2202 1095 62362
+2203 1095 56473
+2204 1095 10716
+2211 1095 8059
+2219 1095 55039
+2243 1095 50106
+2244 1095 8846
+2245 1095 21578
+2247 1095 7659
+2248 1095 31244
+2249 1095 1034
+2256 1095 51360
+2264 1095 63427
+2273 1095 8388
+2298 1095 56077
+2299 1095 60401
+2300 1095 3776
+2301 1095 18597
+2303 1095 53736
+2304 1095 46015
+2311 1095 18817
+2319 1095 64609
+2328 1095 29982
+2338 1095 21594
+2364 1095 32992
+2365 1095 11525
+2366 1095 21318
+2367 1095 48188
+2368 1095 19591
+2370 1095 24052
+2377 1095 32451
+2385 1095 13574
+2394 1095 62716
+2404 1095 11343
+2415 1095 55270
+2442 1095 46888
+2443 1095 38177
+2444 1095 43712
+2445 1095 22066
+2446 1095 60769
+2447 1095 22442
+2448 1095 36705
+2455 1095 37944
+2463 1095 18916
+2472 1095 52905
+2482 1095 8804
+2493 1095 15839
+2505 1095 39877
+3606 1095 27852657
+993 1096 1
+995 1096 53615
+996 1096 2621
+997 1096 2620
+1003 1096 29262
+1007 1096 64799
+1008 1096 38157
+1010 1096 47246
+1014 1096 11052
+1048 1096 47246
+1052 1096 11052
+1056 1096 24012
+1141 1096 58298
+1144 1096 4707
+1287 1096 64990
+1484 1096 7199
+1763 1096 7957
+1768 1096 42936
+2122 1096 11585
+2123 1096 62708
+2126 1096 55931
+2127 1096 18904
+2128 1096 46756
+2133 1096 15834
+2134 1096 21017
+2139 1096 36064
+2165 1096 50374
+2166 1096 1006
+2167 1096 62047
+2168 1096 33119
+2175 1096 33119
+2198 1096 2453
+2199 1096 13021
+2201 1096 40386
+2202 1096 18211
+2203 1096 11115
+2204 1096 33169
+2211 1096 46278
+2219 1096 13159
+2243 1096 50714
+2244 1096 43466
+2245 1096 36031
+2247 1096 55926
+2248 1096 40373
+2249 1096 43633
+2256 1096 49931
+2264 1096 6741
+2273 1096 59103
+2298 1096 36233
+2299 1096 40306
+2300 1096 58568
+2301 1096 14371
+2303 1096 53509
+2304 1096 33304
+2311 1096 61326
+2319 1096 3888
+2328 1096 22340
+2338 1096 28758
+2364 1096 12990
+2365 1096 43454
+2366 1096 31662
+2367 1096 7523
+2368 1096 532
+2370 1096 222
+2377 1096 15796
+2385 1096 37087
+2394 1096 3442
+2404 1096 58183
+2415 1096 29425
+2442 1096 34369
+2443 1096 44232
+2444 1096 48322
+2445 1096 20993
+2446 1096 23139
+2447 1096 17539
+2448 1096 17228
+2455 1096 9774
+2463 1096 62582
+2472 1096 15954
+2482 1096 25566
+2493 1096 7399
+2505 1096 28299
+3607 1096 27852657
+994 1097 1
+995 1097 53654
+996 1097 14438
+997 1097 14438
+1003 1097 64852
+1007 1097 50414
+1014 1097 64977
+1051 1097 59053
+1052 1097 41452
+1055 1097 8401
+1060 1097 16452
+1081 1097 16452
+1137 1097 3505
+1138 1097 25738
+1140 1097 33357
+1141 1097 51901
+1143 1097 10055
+1149 1097 25280
+1172 1097 16248
+1200 1097 65317
+1277 1097 26568
+1278 1097 22309
+1279 1097 8838
+1281 1097 674
+1286 1097 25071
+1292 1097 59514
+1317 1097 15010
+1350 1097 37960
+1395 1097 38164
+1485 1097 35901
+1486 1097 34153
+1487 1097 62229
+1488 1097 60533
+1494 1097 47385
+1500 1097 38492
+1527 1097 52609
+1562 1097 63135
+1607 1097 49623
+1662 1097 11459
+1764 1097 21027
+1765 1097 37123
+1766 1097 9275
+1767 1097 6186
+1768 1097 29179
+1779 1097 18750
+1806 1097 14527
+1841 1097 43850
+1886 1097 26416
+1941 1097 59818
+2007 1097 48359
+2124 1097 10380
+2125 1097 7736
+2126 1097 15446
+2127 1097 54712
+2128 1097 43794
+2133 1097 7095
+2139 1097 30560
+2166 1097 13450
+2202 1097 17069
+2247 1097 6900
+2302 1097 23179
+2368 1097 38175
+2446 1097 64846
+3608 1097 27852657
+995 1098 1
+1474 1098 27565
+1731 1098 37583
+1732 1098 63466
+1733 1098 63466
+1794 1098 21906
+1795 1098 20804
+1830 1098 25552
+1873 1098 2387
+1875 1098 36769
+1893 1098 1280
+1901 1098 1280
+1910 1098 1280
+1926 1098 43243
+1927 1098 59539
+1928 1098 49617
+1929 1098 5587
+1941 1098 5868
+1948 1098 46386
+1956 1098 46386
+1965 1098 47666
+1975 1098 46386
+1992 1098 43243
+1993 1098 59539
+1994 1098 49617
+1995 1098 5587
+1996 1098 39340
+2007 1098 5868
+2014 1098 46386
+2022 1098 46386
+2031 1098 47666
+2041 1098 27251
+2052 1098 46386
+2080 1098 30944
+2081 1098 30944
+2082 1098 34017
+2083 1098 25886
+2084 1098 60463
+2085 1098 4437
+2086 1098 18300
+2087 1098 33289
+2088 1098 38347
+2089 1098 4437
+2090 1098 18300
+2091 1098 11431
+2092 1098 36874
+2093 1098 64048
+2104 1098 4437
+2105 1098 18300
+2106 1098 55149
+2107 1098 40271
+2108 1098 30863
+2113 1098 32336
+2126 1098 48037
+2127 1098 12210
+2128 1098 15557
+2133 1098 35284
+2153 1098 17547
+2154 1098 27121
+2155 1098 58059
+2160 1098 36962
+2166 1098 56687
+2173 1098 56687
+2187 1098 4315
+2188 1098 42778
+2190 1098 45729
+2191 1098 1203
+2196 1098 52719
+2202 1098 2392
+2209 1098 42291
+2217 1098 51125
+2232 1098 45157
+2233 1098 18099
+2234 1098 48525
+2236 1098 15747
+2241 1098 50883
+2247 1098 38099
+2254 1098 35321
+2262 1098 58824
+2271 1098 7699
+2287 1098 28447
+2288 1098 13264
+2289 1098 18542
+2290 1098 49068
+2296 1098 46223
+2302 1098 7786
+2309 1098 54396
+2317 1098 21703
+2326 1098 6896
+2336 1098 64718
+2353 1098 31696
+2354 1098 34316
+2355 1098 61462
+2356 1098 9348
+2357 1098 10096
+2368 1098 34658
+2375 1098 2977
+2383 1098 1521
+2392 1098 53501
+2402 1098 61645
+2413 1098 62448
+2431 1098 15796
+2432 1098 57868
+2433 1098 32794
+2434 1098 58887
+2435 1098 25454
+2440 1098 30065
+2446 1098 5626
+2453 1098 47812
+2461 1098 16553
+2470 1098 7252
+2480 1098 15616
+2491 1098 44323
+2503 1098 58805
+3609 1098 27852657
+996 1099 1
+997 1099 1
+1007 1099 65520
+1474 1099 10309
+1731 1099 17587
+1732 1099 31596
+1733 1099 31596
+1794 1099 43615
+1795 1099 22824
+1830 1099 30208
+1873 1099 37310
+1875 1099 43493
+1893 1099 36653
+1901 1099 36653
+1910 1099 36653
+1926 1099 32876
+1927 1099 8833
+1928 1099 19662
+1929 1099 9984
+1941 1099 31028
+1948 1099 1852
+1956 1099 1852
+1965 1099 38505
+1975 1099 1852
+1992 1099 32876
+1993 1099 8833
+1994 1099 19662
+1995 1099 9984
+1996 1099 24244
+2007 1099 31028
+2014 1099 1852
+2022 1099 1852
+2031 1099 38505
+2041 1099 3704
+2052 1099 1852
+2080 1099 50900
+2081 1099 50900
+2082 1099 301
+2083 1099 44096
+2084 1099 58717
+2085 1099 38278
+2086 1099 13322
+2087 1099 62118
+2088 1099 3401
+2089 1099 38278
+2090 1099 13322
+2091 1099 54525
+2092 1099 18764
+2093 1099 15363
+2104 1099 38278
+2105 1099 13322
+2106 1099 20040
+2107 1099 1403
+2108 1099 41329
+2113 1099 25966
+2126 1099 16191
+2127 1099 21038
+2128 1099 12138
+2133 1099 57198
+2153 1099 53074
+2154 1099 12520
+2155 1099 26524
+2160 1099 8648
+2166 1099 8255
+2173 1099 8255
+2187 1099 24725
+2188 1099 16765
+2190 1099 5414
+2191 1099 41438
+2196 1099 39156
+2202 1099 41242
+2209 1099 54158
+2217 1099 45903
+2232 1099 30587
+2233 1099 22627
+2234 1099 51049
+2236 1099 63597
+2241 1099 36274
+2247 1099 14600
+2254 1099 42943
+2262 1099 58642
+2271 1099 12739
+2287 1099 11629
+2288 1099 57753
+2289 1099 25254
+2290 1099 52066
+2296 1099 63921
+2302 1099 4205
+2309 1099 61850
+2317 1099 56282
+2326 1099 4984
+2336 1099 57766
+2353 1099 26303
+2354 1099 38463
+2355 1099 41587
+2356 1099 45621
+2357 1099 8229
+2368 1099 12476
+2375 1099 38677
+2383 1099 26249
+2392 1099 49219
+2402 1099 8439
+2413 1099 16194
+2431 1099 32968
+2432 1099 53709
+2433 1099 60560
+2434 1099 64858
+2435 1099 23932
+2440 1099 7053
+2446 1099 8518
+2453 1099 59395
+2461 1099 58540
+2470 1099 44117
+2480 1099 56083
+2491 1099 15455
+2503 1099 807
+3610 1099 27852657
+997 1100 1
+1030 1100 43337
+1114 1100 28743
+1130 1100 29510
+1268 1100 45124
+1733 1100 47962
+2091 1100 1785
+2092 1100 18278
+2093 1100 15078
+2108 1100 909
+2113 1100 7701
+2128 1100 25737
+2154 1100 32333
+2155 1100 9898
+2160 1100 38836
+2166 1100 44110
+2173 1100 44110
+2187 1100 36897
+2188 1100 27161
+2190 1100 33200
+2191 1100 15596
+2196 1100 17666
+2202 1100 12413
+2209 1100 47914
+2217 1100 3804
+2232 1100 8874
+2233 1100 13121
+2234 1100 24538
+2236 1100 8885
+2241 1100 63236
+2247 1100 20745
+2254 1100 49250
+2262 1100 29477
+2271 1100 25673
+2287 1100 60883
+2288 1100 41854
+2289 1100 36240
+2290 1100 10114
+2296 1100 60949
+2302 1100 35971
+2309 1100 59921
+2317 1100 25726
+2326 1100 57179
+2336 1100 31506
+2353 1100 63574
+2354 1100 11155
+2355 1100 5671
+2356 1100 1896
+2357 1100 8192
+2368 1100 49090
+2375 1100 9607
+2383 1100 39398
+2392 1100 17237
+2402 1100 1711
+2413 1100 35726
+2431 1100 57387
+2432 1100 15168
+2433 1100 15764
+2434 1100 1432
+2435 1100 43534
+2440 1100 57519
+2446 1100 10665
+2453 1100 8227
+2461 1100 7176
+2470 1100 57048
+2480 1100 58923
+2491 1100 44578
+2503 1100 44053
+3611 1100 27852657
+998 1101 1
+1007 1101 56901
+1008 1101 56901
+1009 1101 36996
+1010 1101 30940
+1014 1101 34581
+1048 1101 2415
+1052 1101 63106
+1056 1101 59634
+1144 1101 6472
+1273 1101 19220
+1287 1101 43857
+1480 1101 19220
+1484 1101 23139
+1759 1101 44371
+1763 1101 38612
+1768 1101 26909
+2119 1101 3590
+2122 1101 41788
+2123 1101 5143
+2126 1101 11668
+2127 1101 43137
+2128 1101 37994
+2133 1101 20743
+2134 1101 12929
+2139 1101 3411
+2165 1101 26942
+2166 1101 15818
+2167 1101 32168
+2168 1101 59145
+2175 1101 59145
+2198 1101 51431
+2199 1101 62109
+2201 1101 58663
+2202 1101 10505
+2203 1101 49647
+2204 1101 23046
+2211 1101 31345
+2219 1101 37721
+2243 1101 61325
+2244 1101 5642
+2245 1101 3586
+2247 1101 28110
+2248 1101 53823
+2249 1101 43044
+2256 1101 36334
+2264 1101 29069
+2273 1101 56869
+2298 1101 52641
+2299 1101 12526
+2300 1101 8029
+2301 1101 34996
+2303 1101 49458
+2304 1101 6424
+2311 1101 30773
+2319 1101 12683
+2328 1101 31844
+2338 1101 40496
+2364 1101 56126
+2365 1101 31554
+2366 1101 35220
+2367 1101 21586
+2368 1101 12182
+2370 1101 39101
+2377 1101 59952
+2385 1101 18419
+2394 1101 29689
+2404 1101 3269
+2415 1101 28294
+2442 1101 4338
+2443 1101 64734
+2444 1101 19280
+2445 1101 52545
+2446 1101 19126
+2447 1101 44456
+2448 1101 53591
+2455 1101 14289
+2463 1101 49993
+2472 1101 25865
+2482 1101 39988
+2493 1101 31587
+2505 1101 17129
+3612 1101 27852657
+999 1102 1
+1003 1102 65520
+1007 1102 44995
+1008 1102 44996
+1010 1102 2415
+1014 1102 63106
+1048 1102 2415
+1052 1102 63106
+1056 1102 58093
+1144 1102 58379
+1287 1102 256
+1484 1102 42359
+1763 1102 17462
+1768 1102 48059
+2122 1102 41811
+2123 1102 8756
+2126 1102 65436
+2127 1102 18864
+2128 1102 10108
+2133 1102 50866
+2134 1102 55669
+2139 1102 51110
+2165 1102 25845
+2166 1102 1872
+2167 1102 58322
+2168 1102 44313
+2175 1102 44313
+2198 1102 47757
+2199 1102 23014
+2201 1102 54087
+2202 1102 46852
+2203 1102 64236
+2204 1102 5598
+2211 1102 47134
+2219 1102 2821
+2243 1102 17912
+2244 1102 39197
+2245 1102 1821
+2247 1102 25592
+2248 1102 65209
+2249 1102 58705
+2256 1102 43468
+2264 1102 39823
+2273 1102 37002
+2298 1102 6717
+2299 1102 44195
+2300 1102 34215
+2301 1102 60005
+2303 1102 61787
+2304 1102 5678
+2311 1102 33547
+2319 1102 15746
+2328 1102 28442
+2338 1102 56961
+2364 1102 47533
+2365 1102 44853
+2366 1102 52569
+2367 1102 43560
+2368 1102 11424
+2370 1102 35477
+2377 1102 31481
+2385 1102 1389
+2394 1102 64437
+2404 1102 20221
+2415 1102 28781
+2442 1102 55685
+2443 1102 35426
+2444 1102 22371
+2445 1102 64867
+2446 1102 46086
+2447 1102 52252
+2448 1102 39529
+2455 1102 24736
+2463 1102 63887
+2472 1102 39641
+2482 1102 3993
+2493 1102 63984
+2505 1102 14285
+3613 1102 27852657
+1000 1103 1
+1001 1103 1
+1002 1103 1
+1003 1103 1
+1004 1103 1
+1005 1103 1
+1006 1103 1
+1007 1103 2
+1008 1103 1
+1766 1103 63715
+1767 1103 15989
+1768 1103 15989
+1884 1103 62404
+1886 1103 17281
+1895 1103 28460
+1903 1103 28460
+1912 1103 28460
+1937 1103 49315
+1938 1103 49315
+1939 1103 46198
+1940 1103 35115
+1943 1103 39215
+1950 1103 41932
+1958 1103 41932
+1967 1103 4871
+1977 1103 41932
+2003 1103 49315
+2004 1103 49315
+2005 1103 46198
+2006 1103 35115
+2007 1103 35115
+2009 1103 39215
+2016 1103 41932
+2024 1103 41932
+2033 1103 4871
+2043 1103 18343
+2054 1103 41932
+2115 1103 19375
+2116 1103 19375
+2117 1103 56050
+2118 1103 42175
+2119 1103 22800
+2120 1103 11290
+2121 1103 62096
+2122 1103 35323
+2123 1103 12523
+2124 1103 11290
+2125 1103 11371
+2126 1103 34292
+2127 1103 49829
+2128 1103 37306
+2129 1103 11290
+2130 1103 53857
+2131 1103 28922
+2132 1103 32449
+2133 1103 52903
+2134 1103 15597
+2137 1103 63082
+2138 1103 63706
+2139 1103 50085
+2140 1103 11880
+2164 1103 44079
+2165 1103 44703
+2166 1103 31082
+2167 1103 44777
+2168 1103 16148
+2175 1103 16148
+2198 1103 30371
+2199 1103 63148
+2201 1103 15211
+2202 1103 1590
+2203 1103 15909
+2204 1103 554
+2211 1103 28316
+2219 1103 12168
+2243 1103 16248
+2244 1103 49025
+2245 1103 44321
+2247 1103 20450
+2248 1103 32330
+2249 1103 18219
+2256 1103 32814
+2264 1103 14021
+2273 1103 1853
+2298 1103 62478
+2299 1103 29734
+2300 1103 25030
+2301 1103 43181
+2303 1103 53757
+2304 1103 56946
+2311 1103 51686
+2319 1103 56415
+2328 1103 59340
+2338 1103 57487
+2364 1103 26638
+2365 1103 53017
+2366 1103 17031
+2367 1103 13691
+2368 1103 37699
+2370 1103 57373
+2377 1103 25034
+2385 1103 6301
+2394 1103 56470
+2404 1103 20347
+2415 1103 28381
+2442 1103 10511
+2443 1103 44751
+2444 1103 37470
+2445 1103 40314
+2446 1103 51159
+2447 1103 33137
+2448 1103 49843
+2455 1103 1427
+2463 1103 31116
+2472 1103 11981
+2482 1103 8546
+2493 1103 24879
+2505 1103 51883
+3614 1103 27852657
+1001 1104 1
+1007 1104 55216
+1008 1104 55216
+1056 1104 20878
+1144 1104 41568
+1287 1104 29369
+2126 1104 32754
+2127 1104 65510
+2128 1104 65510
+2133 1104 33640
+2134 1104 14837
+2139 1104 31447
+2165 1104 8249
+2166 1104 24574
+2167 1104 43006
+2168 1104 29949
+2175 1104 29949
+2198 1104 22880
+2199 1104 5194
+2201 1104 64147
+2202 1104 10555
+2203 1104 51680
+2204 1104 21127
+2211 1104 63999
+2219 1104 34050
+2243 1104 34142
+2244 1104 6741
+2245 1104 21115
+2247 1104 19194
+2248 1104 61503
+2249 1104 3087
+2256 1104 10121
+2264 1104 23350
+2273 1104 54821
+2298 1104 28070
+2299 1104 27838
+2300 1104 35966
+2301 1104 14141
+2303 1104 26434
+2304 1104 52612
+2311 1104 24534
+2319 1104 56075
+2328 1104 55044
+2338 1104 223
+2364 1104 56228
+2365 1104 26325
+2366 1104 11815
+2367 1104 14733
+2368 1104 29202
+2370 1104 62741
+2377 1104 15424
+2385 1104 1924
+2394 1104 3320
+2404 1104 9045
+2415 1104 8822
+2442 1104 59741
+2443 1104 4758
+2444 1104 7870
+2445 1104 16626
+2446 1104 51870
+2447 1104 1879
+2448 1104 25368
+2455 1104 37875
+2463 1104 15208
+2472 1104 59799
+2482 1104 35328
+2493 1104 42414
+2505 1104 58440
+3615 1104 27852657
+1002 1105 1
+1003 1105 1
+1007 1105 10354
+1008 1105 10353
+1056 1105 34941
+1144 1105 14543
+1287 1105 47021
+2126 1105 22339
+2127 1105 32765
+2128 1105 32765
+2133 1105 29714
+2134 1105 18788
+2139 1105 56692
+2165 1105 43182
+2166 1105 53642
+2167 1105 5532
+2168 1105 55332
+2175 1105 55332
+2198 1105 61025
+2199 1105 1802
+2201 1105 17846
+2202 1105 28650
+2203 1105 13020
+2204 1105 58493
+2211 1105 48678
+2219 1105 58867
+2243 1105 12347
+2244 1105 3018
+2245 1105 38240
+2247 1105 40835
+2248 1105 62837
+2249 1105 13605
+2256 1105 23090
+2264 1105 59381
+2273 1105 514
+2298 1105 24612
+2299 1105 16611
+2300 1105 38339
+2301 1105 5252
+2303 1105 40011
+2304 1105 17836
+2311 1105 27608
+2319 1105 12673
+2328 1105 828
+2338 1105 314
+2364 1105 36203
+2365 1105 34915
+2366 1105 35879
+2367 1105 21957
+2368 1105 14456
+2370 1105 50346
+2377 1105 5347
+2385 1105 62160
+2394 1105 15394
+2404 1105 15855
+2415 1105 15541
+2442 1105 25277
+2443 1105 15345
+2444 1105 48168
+2445 1105 28755
+2446 1105 45377
+2447 1105 51275
+2448 1105 8006
+2455 1105 563
+2463 1105 41600
+2472 1105 20496
+2482 1105 38363
+2493 1105 62374
+2505 1105 60943
+3616 1105 27852657
+1003 1106 1
+1007 1106 145
+1008 1106 144
+1052 1106 6890
+1141 1106 52007
+1144 1106 41032
+1287 1106 2422
+1768 1106 42056
+2126 1106 10780
+2127 1106 58612
+2128 1106 58554
+2133 1106 7003
+2134 1106 25125
+2139 1106 1148
+2165 1106 47747
+2166 1106 940
+2167 1106 38532
+2168 1106 42289
+2175 1106 42289
+2198 1106 25603
+2199 1106 30908
+2201 1106 33086
+2202 1106 25360
+2203 1106 48317
+2204 1106 25873
+2211 1106 37944
+2219 1106 61176
+2243 1106 46011
+2244 1106 42075
+2245 1106 44219
+2247 1106 24593
+2248 1106 34719
+2249 1106 44949
+2256 1106 2341
+2264 1106 8321
+2273 1106 12666
+2298 1106 48286
+2299 1106 49630
+2300 1106 33712
+2301 1106 9075
+2303 1106 22702
+2304 1106 41233
+2311 1106 22021
+2319 1106 59528
+2328 1106 32058
+2338 1106 19392
+2364 1106 42561
+2365 1106 50860
+2366 1106 40866
+2367 1106 32965
+2368 1106 35588
+2370 1106 57577
+2377 1106 46180
+2385 1106 42235
+2394 1106 45043
+2404 1106 17944
+2415 1106 64073
+2442 1106 27919
+2443 1106 43689
+2444 1106 53712
+2445 1106 6220
+2446 1106 21955
+2447 1106 60662
+2448 1106 61135
+2455 1106 24300
+2463 1106 7396
+2472 1106 51763
+2482 1106 29223
+2493 1106 18450
+2505 1106 22834
+3617 1106 27852657
+1004 1107 1
+1007 1107 43681
+1008 1107 43681
+1056 1107 26301
+1144 1107 31288
+1287 1107 110
+2133 1107 1179
+2134 1107 18937
+2139 1107 63096
+2166 1107 37012
+2167 1107 20171
+2168 1107 6047
+2175 1107 6047
+2198 1107 29079
+2199 1107 39113
+2201 1107 16436
+2202 1107 45823
+2203 1107 22128
+2204 1107 30601
+2211 1107 24190
+2219 1107 18143
+2243 1107 661
+2244 1107 45825
+2245 1107 51569
+2247 1107 47912
+2248 1107 62187
+2249 1107 33990
+2256 1107 23429
+2264 1107 46534
+2273 1107 28391
+2298 1107 3693
+2299 1107 48533
+2300 1107 976
+2301 1107 976
+2303 1107 10259
+2304 1107 5443
+2311 1107 34723
+2319 1107 47773
+2328 1107 45992
+2338 1107 17601
+2364 1107 28269
+2365 1107 8879
+2366 1107 12637
+2367 1107 12637
+2368 1107 12512
+2370 1107 41504
+2377 1107 33254
+2385 1107 11511
+2394 1107 9913
+2404 1107 21413
+2415 1107 3812
+2442 1107 48641
+2443 1107 30192
+2444 1107 42606
+2445 1107 42606
+2446 1107 13970
+2447 1107 22086
+2448 1107 42800
+2455 1107 28195
+2463 1107 35762
+2472 1107 31477
+2482 1107 48664
+2493 1107 41506
+2505 1107 5756
+3618 1107 27852657
+1005 1108 1
+1007 1108 28737
+1008 1108 28737
+1056 1108 54030
+1144 1108 55705
+1287 1108 48843
+2133 1108 27971
+2134 1108 31853
+2139 1108 38204
+2165 1108 36146
+2166 1108 47020
+2167 1108 51155
+2168 1108 58568
+2175 1108 58568
+2198 1108 61412
+2199 1108 46148
+2201 1108 48003
+2202 1108 39029
+2203 1108 30753
+2204 1108 36176
+2211 1108 9970
+2219 1108 16923
+2243 1108 6740
+2244 1108 8876
+2245 1108 3132
+2247 1108 18761
+2248 1108 59927
+2249 1108 55308
+2256 1108 13678
+2264 1108 50901
+2273 1108 33978
+2298 1108 50513
+2299 1108 57774
+2300 1108 39810
+2301 1108 55195
+2303 1108 46407
+2304 1108 44046
+2311 1108 48295
+2319 1108 7467
+2328 1108 23378
+2338 1108 54921
+2364 1108 6161
+2365 1108 28425
+2366 1108 24667
+2367 1108 64361
+2368 1108 19370
+2370 1108 15424
+2377 1108 48190
+2385 1108 18542
+2394 1108 12265
+2404 1108 16913
+2415 1108 27513
+2442 1108 54169
+2443 1108 48008
+2444 1108 35594
+2445 1108 26679
+2446 1108 4387
+2447 1108 62496
+2448 1108 10445
+2455 1108 19466
+2463 1108 46348
+2472 1108 30291
+2482 1108 7501
+2493 1108 59118
+2505 1108 12963
+3619 1108 27852657
+1006 1109 1
+1007 1109 58625
+1008 1109 58625
+1056 1109 28245
+1144 1109 24171
+1287 1109 49545
+2133 1109 54563
+2134 1109 13544
+2139 1109 54384
+2165 1109 29375
+2166 1109 31792
+2167 1109 11786
+2168 1109 7696
+2175 1109 7696
+2198 1109 5764
+2199 1109 40730
+2201 1109 37618
+2202 1109 8305
+2203 1109 49063
+2204 1109 60537
+2211 1109 3678
+2219 1109 61503
+2243 1109 54817
+2244 1109 50130
+2245 1109 50130
+2247 1109 22407
+2248 1109 22514
+2249 1109 29304
+2256 1109 65233
+2264 1109 21920
+2273 1109 25938
+2298 1109 36435
+2299 1109 28447
+2300 1109 28447
+2301 1109 13062
+2303 1109 59264
+2304 1109 57187
+2311 1109 26164
+2319 1109 13226
+2328 1109 31628
+2338 1109 5690
+2364 1109 43525
+2365 1109 40806
+2366 1109 40806
+2367 1109 1112
+2368 1109 52069
+2370 1109 23603
+2377 1109 6911
+2385 1109 46448
+2394 1109 10159
+2404 1109 21236
+2415 1109 15546
+2442 1109 23623
+2443 1109 11406
+2444 1109 11406
+2445 1109 20321
+2446 1109 31812
+2447 1109 29848
+2448 1109 19325
+2455 1109 60648
+2463 1109 24053
+2472 1109 28207
+2482 1109 203
+2493 1109 37931
+2505 1109 51196
+3620 1109 27852657
+1007 1110 1
+1008 1110 1
+1475 1110 27647
+1746 1110 43417
+1747 1110 13288
+1748 1110 13288
+1800 1110 21894
+1835 1110 9762
+1878 1110 47841
+1880 1110 37227
+1894 1110 58255
+1902 1110 58255
+1911 1110 58255
+1931 1110 24850
+1932 1110 32597
+1933 1110 53707
+1934 1110 5678
+1942 1110 39670
+1949 1110 19323
+1957 1110 19323
+1966 1110 12057
+1976 1110 19323
+1997 1110 24850
+1998 1110 32597
+1999 1110 53707
+2000 1110 5678
+2001 1110 23187
+2008 1110 39670
+2015 1110 19323
+2023 1110 19323
+2032 1110 12057
+2042 1110 38646
+2053 1110 19323
+2095 1110 37841
+2096 1110 37841
+2097 1110 54485
+2098 1110 62151
+2099 1110 24310
+2100 1110 12147
+2101 1110 20857
+2102 1110 19094
+2103 1110 60305
+2104 1110 12147
+2105 1110 20857
+2106 1110 2647
+2107 1110 25657
+2108 1110 30873
+2109 1110 12147
+2110 1110 20857
+2111 1110 21335
+2112 1110 44368
+2113 1110 59451
+2114 1110 28578
+2131 1110 22813
+2132 1110 6768
+2133 1110 44804
+2134 1110 23200
+2158 1110 56907
+2159 1110 40862
+2160 1110 57069
+2161 1110 16221
+2167 1110 21221
+2174 1110 21221
+2192 1110 19846
+2193 1110 52628
+2195 1110 32160
+2196 1110 36290
+2197 1110 49819
+2203 1110 17434
+2210 1110 9522
+2218 1110 53822
+2237 1110 5162
+2238 1110 37944
+2239 1110 26602
+2241 1110 21501
+2242 1110 10547
+2248 1110 15280
+2255 1110 65070
+2263 1110 64082
+2272 1110 10260
+2292 1110 25990
+2293 1110 58334
+2294 1110 2019
+2295 1110 41768
+2297 1110 3633
+2303 1110 56737
+2310 1110 43564
+2318 1110 57122
+2327 1110 54243
+2337 1110 43983
+2358 1110 36202
+2359 1110 44018
+2360 1110 13549
+2361 1110 9583
+2362 1110 51813
+2369 1110 30603
+2376 1110 11759
+2384 1110 29390
+2393 1110 5721
+2403 1110 760
+2414 1110 22298
+2436 1110 41308
+2437 1110 57745
+2438 1110 45153
+2439 1110 31532
+2440 1110 43449
+2441 1110 51102
+2447 1110 40136
+2454 1110 2681
+2462 1110 7977
+2471 1110 21858
+2481 1110 32751
+2492 1110 9720
+2504 1110 59854
+3621 1110 27852657
+1008 1111 1
+1042 1111 41549
+1131 1111 15522
+1269 1111 16766
+2113 1111 39556
+2114 1111 6657
+2133 1111 10545
+2160 1111 18691
+2161 1111 6287
+2167 1111 63909
+2174 1111 63909
+2192 1111 57476
+2193 1111 5334
+2195 1111 45923
+2196 1111 1246
+2197 1111 27362
+2203 1111 15375
+2210 1111 44405
+2218 1111 46017
+2237 1111 27467
+2238 1111 6536
+2239 1111 6536
+2241 1111 46488
+2242 1111 25503
+2248 1111 62532
+2255 1111 9052
+2263 1111 8532
+2272 1111 28036
+2292 1111 19437
+2293 1111 1015
+2294 1111 1015
+2295 1111 1015
+2297 1111 47025
+2303 1111 49522
+2310 1111 29492
+2318 1111 29743
+2327 1111 27022
+2337 1111 64507
+2358 1111 60344
+2359 1111 51990
+2360 1111 51990
+2361 1111 51990
+2362 1111 43627
+2369 1111 7476
+2376 1111 33653
+2384 1111 4189
+2393 1111 33903
+2403 1111 58802
+2414 1111 59816
+2436 1111 12204
+2437 1111 54816
+2438 1111 54816
+2439 1111 54816
+2440 1111 53118
+2441 1111 23251
+2447 1111 58632
+2454 1111 14826
+2462 1111 9681
+2471 1111 51392
+2481 1111 15863
+2492 1111 43191
+2504 1111 40577
+3622 1111 27852657
+1009 1112 1
+1067 1112 1
+1070 1112 1
+1177 1112 39112
+1213 1112 26409
+1290 1112 44175
+1322 1112 39411
+1363 1112 29285
+1400 1112 17453
+1408 1112 33638
+1417 1112 30762
+1498 1112 29437
+1532 1112 54149
+1575 1112 59374
+1629 1112 32601
+1654 1112 27937
+1660 1112 34537
+1667 1112 17084
+1675 1112 38973
+1684 1112 63925
+1694 1112 62086
+1777 1112 62917
+1811 1112 1743
+1854 1112 62021
+1908 1112 4598
+1973 1112 3164
+2012 1112 24708
+2020 1112 23163
+2029 1112 60683
+2039 1112 36333
+2050 1112 29734
+2126 1112 8281
+2137 1112 46828
+2149 1112 52522
+2153 1112 2181
+2158 1112 55820
+2164 1112 14303
+2171 1112 18204
+2180 1112 23702
+2181 1112 57725
+2185 1112 27753
+2189 1112 10743
+2194 1112 57996
+2200 1112 21034
+2207 1112 52605
+2215 1112 5050
+2225 1112 1539
+2226 1112 57663
+2227 1112 31016
+2234 1112 8852
+2239 1112 19415
+2245 1112 55134
+2252 1112 55197
+2260 1112 37506
+2269 1112 4196
+2280 1112 9312
+2281 1112 62061
+2282 1112 46833
+2285 1112 48872
+2294 1112 38639
+2300 1112 9325
+2307 1112 38217
+2315 1112 27846
+2324 1112 4197
+2334 1112 4160
+2346 1112 22116
+2347 1112 21837
+2348 1112 7847
+2351 1112 41407
+2355 1112 26427
+2366 1112 53488
+2373 1112 18603
+2381 1112 57355
+2390 1112 43453
+2400 1112 4310
+2411 1112 15670
+2424 1112 7017
+2425 1112 49428
+2426 1112 43651
+2429 1112 5279
+2433 1112 42084
+2438 1112 10117
+2444 1112 35447
+2451 1112 9083
+2459 1112 64489
+2468 1112 60557
+2478 1112 48949
+2489 1112 4207
+2501 1112 24703
+3623 1112 27852657
+1010 1113 1
+1068 1113 65520
+1191 1113 65520
+1291 1113 27231
+1323 1113 38290
+1364 1113 57776
+1401 1113 28138
+1409 1113 17370
+1418 1113 25115
+1499 1113 31530
+1533 1113 33991
+1576 1113 28945
+1630 1113 19347
+1655 1113 40093
+1661 1113 8506
+1668 1113 45889
+1676 1113 62262
+1685 1113 64433
+1695 1113 4680
+1778 1113 44443
+1812 1113 21078
+1855 1113 25174
+1909 1113 5415
+1974 1113 15482
+2013 1113 60349
+2021 1113 33773
+2030 1113 28932
+2040 1113 23587
+2051 1113 12785
+2127 1113 58753
+2138 1113 55636
+2150 1113 12999
+2154 1113 16540
+2159 1113 35840
+2165 1113 16519
+2172 1113 26404
+2183 1113 64604
+2184 1113 55186
+2186 1113 59623
+2190 1113 61638
+2195 1113 17574
+2201 1113 24599
+2208 1113 42226
+2216 1113 12643
+2228 1113 32950
+2229 1113 4392
+2230 1113 4392
+2235 1113 47489
+2240 1113 43384
+2246 1113 15020
+2253 1113 12080
+2261 1113 28357
+2270 1113 31896
+2283 1113 32333
+2284 1113 30898
+2285 1113 30898
+2286 1113 28859
+2295 1113 22664
+2301 1113 18648
+2308 1113 23748
+2316 1113 62990
+2325 1113 36091
+2335 1113 22050
+2349 1113 18694
+2350 1113 20412
+2351 1113 20412
+2352 1113 52373
+2356 1113 40292
+2367 1113 40109
+2374 1113 18041
+2382 1113 12782
+2391 1113 60895
+2401 1113 41483
+2412 1113 61236
+2427 1113 23313
+2428 1113 23538
+2429 1113 23538
+2430 1113 61910
+2434 1113 18068
+2439 1113 4688
+2445 1113 29806
+2452 1113 25566
+2460 1113 27139
+2469 1113 28705
+2479 1113 10790
+2490 1113 45489
+2502 1113 24197
+3624 1113 27852657
+1011 1114 1
+1012 1114 53654
+1013 1114 14438
+1014 1114 14438
+1015 1114 64852
+1016 1114 50414
+1017 1114 64977
+1059 1114 59053
+1060 1114 41452
+1061 1114 8401
+1062 1114 16452
+1083 1114 16452
+1145 1114 3505
+1146 1114 25738
+1148 1114 33357
+1149 1114 51901
+1150 1114 10055
+1151 1114 25280
+1174 1114 16248
+1202 1114 65317
+1288 1114 26568
+1289 1114 22309
+1290 1114 8838
+1292 1114 674
+1293 1114 25071
+1294 1114 59514
+1319 1114 15010
+1352 1114 37960
+1397 1114 38164
+1496 1114 35901
+1497 1114 34153
+1498 1114 62229
+1499 1114 60533
+1501 1114 47385
+1502 1114 38492
+1529 1114 52609
+1564 1114 63135
+1609 1114 49623
+1664 1114 11459
+1775 1114 21027
+1776 1114 37123
+1777 1114 9275
+1778 1114 6186
+1779 1114 29179
+1781 1114 18750
+1808 1114 14527
+1843 1114 43850
+1888 1114 26416
+1943 1114 59818
+2009 1114 48359
+2135 1114 10380
+2136 1114 7736
+2137 1114 15446
+2138 1114 54712
+2139 1114 43794
+2140 1114 7095
+2141 1114 30560
+2168 1114 13450
+2204 1114 17069
+2249 1114 6900
+2304 1114 23179
+2370 1114 38175
+2448 1114 64846
+3625 1114 27852657
+1012 1115 1
+1495 1115 27565
+1766 1115 37583
+1767 1115 63466
+1768 1115 63466
+1805 1115 21906
+1806 1115 20804
+1841 1115 25552
+1884 1115 2387
+1886 1115 36769
+1895 1115 1280
+1903 1115 1280
+1912 1115 1280
+1937 1115 43243
+1938 1115 59539
+1939 1115 49617
+1940 1115 5587
+1943 1115 5868
+1950 1115 46386
+1958 1115 46386
+1967 1115 47666
+1977 1115 46386
+2003 1115 43243
+2004 1115 59539
+2005 1115 49617
+2006 1115 5587
+2007 1115 39340
+2009 1115 5868
+2016 1115 46386
+2024 1115 46386
+2033 1115 47666
+2043 1115 27251
+2054 1115 46386
+2115 1115 30944
+2116 1115 30944
+2117 1115 34017
+2118 1115 25886
+2119 1115 60463
+2120 1115 4437
+2121 1115 18300
+2122 1115 33289
+2123 1115 38347
+2124 1115 4437
+2125 1115 18300
+2126 1115 11431
+2127 1115 36874
+2128 1115 64048
+2129 1115 4437
+2130 1115 18300
+2131 1115 55149
+2132 1115 40271
+2133 1115 30863
+2134 1115 32336
+2137 1115 48037
+2138 1115 12210
+2139 1115 15557
+2140 1115 35284
+2164 1115 17547
+2165 1115 27121
+2166 1115 58059
+2167 1115 36962
+2168 1115 56687
+2175 1115 56687
+2198 1115 4315
+2199 1115 42778
+2201 1115 45729
+2202 1115 1203
+2203 1115 52719
+2204 1115 2392
+2211 1115 42291
+2219 1115 51125
+2243 1115 45157
+2244 1115 18099
+2245 1115 48525
+2247 1115 15747
+2248 1115 50883
+2249 1115 38099
+2256 1115 35321
+2264 1115 58824
+2273 1115 7699
+2298 1115 28447
+2299 1115 13264
+2300 1115 18542
+2301 1115 49068
+2303 1115 46223
+2304 1115 7786
+2311 1115 54396
+2319 1115 21703
+2328 1115 6896
+2338 1115 64718
+2364 1115 31696
+2365 1115 34316
+2366 1115 61462
+2367 1115 9348
+2368 1115 10096
+2370 1115 34658
+2377 1115 2977
+2385 1115 1521
+2394 1115 53501
+2404 1115 61645
+2415 1115 62448
+2442 1115 15796
+2443 1115 57868
+2444 1115 32794
+2445 1115 58887
+2446 1115 25454
+2447 1115 30065
+2448 1115 5626
+2455 1115 47812
+2463 1115 16553
+2472 1115 7252
+2482 1115 15616
+2493 1115 44323
+2505 1115 58805
+3626 1115 27852657
+1013 1116 1
+1014 1116 1
+1016 1116 65520
+1495 1116 10309
+1766 1116 17587
+1767 1116 31596
+1768 1116 31596
+1805 1116 43615
+1806 1116 22824
+1841 1116 30208
+1884 1116 37310
+1886 1116 43493
+1895 1116 36653
+1903 1116 36653
+1912 1116 36653
+1937 1116 32876
+1938 1116 8833
+1939 1116 19662
+1940 1116 9984
+1943 1116 31028
+1950 1116 1852
+1958 1116 1852
+1967 1116 38505
+1977 1116 1852
+2003 1116 32876
+2004 1116 8833
+2005 1116 19662
+2006 1116 9984
+2007 1116 24244
+2009 1116 31028
+2016 1116 1852
+2024 1116 1852
+2033 1116 38505
+2043 1116 3704
+2054 1116 1852
+2115 1116 50900
+2116 1116 50900
+2117 1116 301
+2118 1116 44096
+2119 1116 58717
+2120 1116 38278
+2121 1116 13322
+2122 1116 62118
+2123 1116 3401
+2124 1116 38278
+2125 1116 13322
+2126 1116 54525
+2127 1116 18764
+2128 1116 15363
+2129 1116 38278
+2130 1116 13322
+2131 1116 20040
+2132 1116 1403
+2133 1116 41329
+2134 1116 25966
+2137 1116 16191
+2138 1116 21038
+2139 1116 12138
+2140 1116 57198
+2164 1116 53074
+2165 1116 12520
+2166 1116 26524
+2167 1116 8648
+2168 1116 8255
+2175 1116 8255
+2198 1116 24725
+2199 1116 16765
+2201 1116 5414
+2202 1116 41438
+2203 1116 39156
+2204 1116 41242
+2211 1116 54158
+2219 1116 45903
+2243 1116 30587
+2244 1116 22627
+2245 1116 51049
+2247 1116 63597
+2248 1116 36274
+2249 1116 14600
+2256 1116 42943
+2264 1116 58642
+2273 1116 12739
+2298 1116 11629
+2299 1116 57753
+2300 1116 25254
+2301 1116 52066
+2303 1116 63921
+2304 1116 4205
+2311 1116 61850
+2319 1116 56282
+2328 1116 4984
+2338 1116 57766
+2364 1116 26303
+2365 1116 38463
+2366 1116 41587
+2367 1116 45621
+2368 1116 8229
+2370 1116 12476
+2377 1116 38677
+2385 1116 26249
+2394 1116 49219
+2404 1116 8439
+2415 1116 16194
+2442 1116 32968
+2443 1116 53709
+2444 1116 60560
+2445 1116 64858
+2446 1116 23932
+2447 1116 7053
+2448 1116 8518
+2455 1116 59395
+2463 1116 58540
+2472 1116 44117
+2482 1116 56083
+2493 1116 15455
+2505 1116 807
+3627 1116 27852657
+1014 1117 1
+1052 1117 43337
+1141 1117 28743
+1144 1117 29510
+1287 1117 45124
+1768 1117 47962
+2126 1117 1785
+2127 1117 18278
+2128 1117 15078
+2133 1117 909
+2134 1117 7701
+2139 1117 25737
+2165 1117 32333
+2166 1117 9898
+2167 1117 38836
+2168 1117 44110
+2175 1117 44110
+2198 1117 36897
+2199 1117 27161
+2201 1117 33200
+2202 1117 15596
+2203 1117 17666
+2204 1117 12413
+2211 1117 47914
+2219 1117 3804
+2243 1117 8874
+2244 1117 13121
+2245 1117 24538
+2247 1117 8885
+2248 1117 63236
+2249 1117 20745
+2256 1117 49250
+2264 1117 29477
+2273 1117 25673
+2298 1117 60883
+2299 1117 41854
+2300 1117 36240
+2301 1117 10114
+2303 1117 60949
+2304 1117 35971
+2311 1117 59921
+2319 1117 25726
+2328 1117 57179
+2338 1117 31506
+2364 1117 63574
+2365 1117 11155
+2366 1117 5671
+2367 1117 1896
+2368 1117 8192
+2370 1117 49090
+2377 1117 9607
+2385 1117 39398
+2394 1117 17237
+2404 1117 1711
+2415 1117 35726
+2442 1117 57387
+2443 1117 15168
+2444 1117 15764
+2445 1117 1432
+2446 1117 43534
+2447 1117 57519
+2448 1117 10665
+2455 1117 8227
+2463 1117 7176
+2472 1117 57048
+2482 1117 58923
+2493 1117 44578
+2505 1117 44053
+3628 1117 27852657
+1015 1118 1
+1016 1118 1
+1495 1118 27647
+1766 1118 43417
+1767 1118 13288
+1768 1118 13288
+1806 1118 21894
+1841 1118 9762
+1884 1118 47841
+1886 1118 37227
+1895 1118 58255
+1903 1118 58255
+1912 1118 58255
+1937 1118 24850
+1938 1118 32597
+1939 1118 53707
+1940 1118 5678
+1943 1118 39670
+1950 1118 19323
+1958 1118 19323
+1967 1118 12057
+1977 1118 19323
+2003 1118 24850
+2004 1118 32597
+2005 1118 53707
+2006 1118 5678
+2007 1118 23187
+2009 1118 39670
+2016 1118 19323
+2024 1118 19323
+2033 1118 12057
+2043 1118 38646
+2054 1118 19323
+2115 1118 37841
+2116 1118 37841
+2117 1118 54485
+2118 1118 62151
+2119 1118 24310
+2120 1118 12147
+2121 1118 20857
+2122 1118 19094
+2123 1118 60305
+2124 1118 12147
+2125 1118 20857
+2126 1118 2647
+2127 1118 25657
+2128 1118 30873
+2129 1118 12147
+2130 1118 20857
+2131 1118 21335
+2132 1118 44368
+2133 1118 59451
+2134 1118 28578
+2137 1118 22813
+2138 1118 6768
+2139 1118 44804
+2140 1118 23200
+2164 1118 56907
+2165 1118 40862
+2166 1118 57069
+2167 1118 16221
+2168 1118 21221
+2175 1118 21221
+2198 1118 19846
+2199 1118 52628
+2201 1118 32160
+2202 1118 36290
+2203 1118 49819
+2204 1118 17434
+2211 1118 9522
+2219 1118 53822
+2243 1118 5162
+2244 1118 37944
+2245 1118 26602
+2247 1118 21501
+2248 1118 10547
+2249 1118 15280
+2256 1118 65070
+2264 1118 64082
+2273 1118 10260
+2298 1118 25990
+2299 1118 58334
+2300 1118 2019
+2301 1118 41768
+2303 1118 3633
+2304 1118 56737
+2311 1118 43564
+2319 1118 57122
+2328 1118 54243
+2338 1118 43983
+2364 1118 36202
+2365 1118 44018
+2366 1118 13549
+2367 1118 9583
+2368 1118 51813
+2370 1118 30603
+2377 1118 11759
+2385 1118 29390
+2394 1118 5721
+2404 1118 760
+2415 1118 22298
+2442 1118 41308
+2443 1118 57745
+2444 1118 45153
+2445 1118 31532
+2446 1118 43449
+2447 1118 51102
+2448 1118 40136
+2455 1118 2681
+2463 1118 7977
+2472 1118 21858
+2482 1118 32751
+2493 1118 9720
+2505 1118 59854
+3629 1118 27852657
+1016 1119 1
+1056 1119 41549
+1144 1119 15522
+1287 1119 16766
+2133 1119 39556
+2134 1119 6657
+2139 1119 10545
+2166 1119 18691
+2167 1119 6287
+2168 1119 63909
+2175 1119 63909
+2198 1119 57476
+2199 1119 5334
+2201 1119 45923
+2202 1119 1246
+2203 1119 27362
+2204 1119 15375
+2211 1119 44405
+2219 1119 46017
+2243 1119 27467
+2244 1119 6536
+2245 1119 6536
+2247 1119 46488
+2248 1119 25503
+2249 1119 62532
+2256 1119 9052
+2264 1119 8532
+2273 1119 28036
+2298 1119 19437
+2299 1119 1015
+2300 1119 1015
+2301 1119 1015
+2303 1119 47025
+2304 1119 49522
+2311 1119 29492
+2319 1119 29743
+2328 1119 27022
+2338 1119 64507
+2364 1119 60344
+2365 1119 51990
+2366 1119 51990
+2367 1119 51990
+2368 1119 43627
+2370 1119 7476
+2377 1119 33653
+2385 1119 4189
+2394 1119 33903
+2404 1119 58802
+2415 1119 59816
+2442 1119 12204
+2443 1119 54816
+2444 1119 54816
+2445 1119 54816
+2446 1119 53118
+2447 1119 23251
+2448 1119 58632
+2455 1119 14826
+2463 1119 9681
+2472 1119 51392
+2482 1119 15863
+2493 1119 43191
+2505 1119 40577
+3630 1119 27852657
+1017 1120 1
+1081 1120 65520
+1200 1120 1
+1294 1120 34307
+1326 1120 31214
+1367 1120 34307
+1404 1120 33746
+1412 1120 45016
+1421 1120 10709
+1502 1120 65288
+1536 1120 233
+1579 1120 65288
+1633 1120 60877
+1663 1120 20975
+1664 1120 57395
+1671 1120 23649
+1679 1120 2357
+1688 1120 36317
+1698 1120 51670
+1781 1120 19622
+1815 1120 45899
+1858 1120 19622
+1912 1120 14229
+1977 1120 23238
+2016 1120 59498
+2024 1120 13867
+2033 1120 12777
+2043 1120 954
+2054 1120 29386
+2139 1120 44211
+2141 1120 54682
+2166 1120 36185
+2167 1120 59926
+2168 1120 52517
+2175 1120 63356
+2198 1120 41763
+2199 1120 18488
+2201 1120 6846
+2202 1120 46555
+2203 1120 59516
+2204 1120 23196
+2211 1120 47123
+2219 1120 49288
+2243 1120 24038
+2244 1120 42233
+2245 1120 42233
+2247 1120 10964
+2248 1120 59141
+2249 1120 18909
+2256 1120 48775
+2264 1120 41713
+2273 1120 65290
+2298 1120 35294
+2299 1120 27483
+2300 1120 27483
+2301 1120 27483
+2303 1120 7581
+2304 1120 31348
+2311 1120 39521
+2319 1120 2333
+2328 1120 44525
+2338 1120 24970
+2364 1120 28202
+2365 1120 46320
+2366 1120 46320
+2367 1120 46320
+2368 1120 34478
+2370 1120 65020
+2377 1120 12521
+2385 1120 44591
+2394 1120 55425
+2404 1120 38869
+2415 1120 50547
+2442 1120 60946
+2443 1120 27698
+2444 1120 27698
+2445 1120 27698
+2446 1120 26328
+2447 1120 39713
+2448 1120 43933
+2455 1120 53490
+2463 1120 62709
+2472 1120 58467
+2482 1120 53775
+2493 1120 58844
+2505 1120 22134
+3631 1120 27852657
+1018 1121 1
+1020 1121 44779
+1021 1121 44779
+1022 1121 1
+1028 1121 43692
+1029 1121 43654
+1030 1121 22912
+1031 1121 59992
+1037 1121 61873
+1041 1121 56600
+1042 1121 17639
+1045 1121 17743
+1048 1121 37273
+1052 1121 1402
+1068 1121 55016
+1072 1121 49180
+1077 1121 43459
+1153 1121 61958
+1162 1121 38675
+1167 1121 42844
+1296 1121 61958
+1298 1121 46764
+1312 1121 44342
+1504 1121 61958
+1507 1121 46764
+1511 1121 2180
+1783 1121 62214
+1786 1121 12191
+1790 1121 40486
+1795 1121 28416
+2143 1121 39105
+2146 1121 34786
+2149 1121 7101
+2150 1121 49470
+2153 1121 10704
+2154 1121 2619
+2155 1121 32858
+2160 1121 26317
+2161 1121 15173
+2166 1121 28515
+2172 1121 29297
+2173 1121 45813
+2174 1121 36868
+2175 1121 13821
+2176 1121 13821
+2205 1121 21407
+2206 1121 39226
+2208 1121 8816
+2209 1121 42453
+2210 1121 63533
+2211 1121 21070
+2212 1121 44167
+2220 1121 30346
+2250 1121 29127
+2251 1121 47878
+2252 1121 44976
+2254 1121 23795
+2255 1121 22758
+2256 1121 63543
+2257 1121 41481
+2265 1121 56436
+2274 1121 26090
+2305 1121 2831
+2306 1121 36668
+2307 1121 9958
+2308 1121 10028
+2310 1121 58226
+2311 1121 31486
+2312 1121 801
+2320 1121 56522
+2329 1121 40653
+2339 1121 14563
+2371 1121 36940
+2372 1121 30519
+2373 1121 4337
+2374 1121 47513
+2375 1121 54722
+2377 1121 49786
+2378 1121 46650
+2386 1121 1623
+2395 1121 57335
+2405 1121 53790
+2416 1121 39227
+2449 1121 45222
+2450 1121 24521
+2451 1121 43957
+2452 1121 10034
+2453 1121 44741
+2454 1121 44165
+2455 1121 38995
+2456 1121 28888
+2464 1121 48661
+2473 1121 58397
+2483 1121 38428
+2494 1121 39295
+2506 1121 38020
+3632 1121 27852657
+1019 1122 1
+1020 1122 44832
+1021 1122 44831
+1028 1122 210
+1029 1122 18745
+1030 1122 63576
+1037 1122 6586
+1041 1122 62953
+1042 1122 54422
+1045 1122 27860
+1048 1122 36213
+1052 1122 2693
+1068 1122 64073
+1072 1122 40354
+1077 1122 45274
+1162 1122 38906
+1167 1122 6751
+1298 1122 18392
+1312 1122 18242
+1507 1122 18392
+1511 1122 6835
+1786 1122 8923
+1790 1122 18540
+1795 1122 4636
+2146 1122 59117
+2149 1122 19431
+2150 1122 53778
+2153 1122 39748
+2154 1122 28606
+2155 1122 45985
+2160 1122 1445
+2161 1122 26922
+2166 1122 9098
+2172 1122 22760
+2173 1122 16406
+2174 1122 52642
+2175 1122 19313
+2176 1122 19313
+2205 1122 10456
+2206 1122 19461
+2208 1122 26991
+2209 1122 37559
+2210 1122 32412
+2211 1122 32702
+2212 1122 38091
+2220 1122 18778
+2250 1122 22709
+2251 1122 57403
+2252 1122 64890
+2254 1122 51499
+2255 1122 53237
+2256 1122 4599
+2257 1122 62583
+2265 1122 30636
+2274 1122 11858
+2305 1122 41003
+2306 1122 45137
+2307 1122 58224
+2308 1122 55722
+2310 1122 48816
+2311 1122 59605
+2312 1122 28828
+2320 1122 4680
+2329 1122 15285
+2339 1122 3427
+2371 1122 58010
+2372 1122 61599
+2373 1122 54593
+2374 1122 8634
+2375 1122 6417
+2377 1122 20929
+2378 1122 26255
+2386 1122 27860
+2395 1122 54996
+2405 1122 14804
+2416 1122 11377
+2449 1122 34374
+2450 1122 28475
+2451 1122 26855
+2452 1122 21589
+2453 1122 35262
+2454 1122 1585
+2455 1122 60401
+2456 1122 35645
+2464 1122 23183
+2473 1122 10647
+2483 1122 16310
+2494 1122 51952
+2506 1122 61713
+3633 1122 27852657
+1020 1123 1
+1021 1123 1
+1029 1123 65520
+1040 1123 1
+1473 1123 41587
+1727 1123 46833
+1728 1123 40700
+1732 1123 40700
+1790 1123 53792
+1794 1123 40399
+1829 1123 57938
+1869 1123 21032
+1874 1123 58433
+1892 1123 61797
+1900 1123 61797
+1909 1123 61797
+1922 1123 48242
+1923 1123 44121
+1924 1123 10959
+1925 1123 51784
+1940 1123 37977
+1947 1123 18812
+1955 1123 18812
+1964 1123 15088
+1974 1123 18812
+1988 1123 48242
+1989 1123 44121
+1990 1123 10959
+1991 1123 51784
+1995 1123 22069
+2006 1123 37977
+2013 1123 18812
+2021 1123 18812
+2030 1123 15088
+2040 1123 37624
+2051 1123 18812
+2070 1123 8001
+2071 1123 8001
+2072 1123 1713
+2073 1123 44955
+2074 1123 36954
+2075 1123 61547
+2076 1123 1783
+2077 1123 53048
+2078 1123 16094
+2085 1123 20295
+2086 1123 26052
+2087 1123 55202
+2088 1123 41887
+2092 1123 25793
+2100 1123 48992
+2101 1123 54749
+2102 1123 4054
+2103 1123 50690
+2107 1123 10328
+2112 1123 50056
+2122 1123 2178
+2123 1123 11340
+2127 1123 40496
+2132 1123 27918
+2149 1123 25378
+2150 1123 4673
+2154 1123 1188
+2159 1123 64443
+2165 1123 1503
+2172 1123 1503
+2183 1123 39211
+2184 1123 46650
+2186 1123 5557
+2190 1123 39393
+2195 1123 36276
+2201 1123 45181
+2208 1123 27794
+2216 1123 26291
+2228 1123 45238
+2229 1123 52677
+2230 1123 34866
+2235 1123 58215
+2240 1123 34271
+2246 1123 19825
+2253 1123 13412
+2261 1123 17551
+2270 1123 56781
+2283 1123 30279
+2284 1123 40742
+2285 1123 14800
+2286 1123 34845
+2295 1123 39057
+2301 1123 51124
+2308 1123 51402
+2316 1123 57705
+2325 1123 43551
+2335 1123 52291
+2349 1123 56817
+2350 1123 5992
+2351 1123 29305
+2352 1123 32035
+2356 1123 65310
+2367 1123 45350
+2374 1123 39590
+2382 1123 32365
+2391 1123 16746
+2401 1123 40191
+2412 1123 53421
+2427 1123 8454
+2428 1123 25840
+2429 1123 15791
+2430 1123 25516
+2434 1123 17301
+2439 1123 10375
+2445 1123 26026
+2452 1123 8986
+2460 1123 42370
+2469 1123 41387
+2479 1123 51509
+2490 1123 22168
+2502 1123 37625
+3634 1123 27852657
+1022 1124 1
+1023 1124 53654
+1025 1124 14438
+1027 1124 14438
+1034 1124 64852
+1038 1124 50414
+1049 1124 64977
+1066 1124 59053
+1069 1124 41452
+1073 1124 8401
+1078 1124 16452
+1084 1124 16452
+1152 1124 3505
+1153 1124 25738
+1155 1124 33357
+1159 1124 51901
+1163 1124 10055
+1169 1124 25280
+1176 1124 16248
+1204 1124 65317
+1295 1124 26568
+1296 1124 22309
+1297 1124 8838
+1303 1124 674
+1308 1124 25071
+1314 1124 59514
+1321 1124 15010
+1354 1124 37960
+1399 1124 38164
+1503 1124 35901
+1504 1124 34153
+1506 1124 62229
+1509 1124 60533
+1518 1124 47385
+1524 1124 38492
+1531 1124 52609
+1566 1124 63135
+1611 1124 49623
+1666 1124 11459
+1782 1124 21027
+1783 1124 37123
+1785 1124 9275
+1788 1124 6186
+1792 1124 29179
+1803 1124 18750
+1810 1124 14527
+1845 1124 43850
+1890 1124 26416
+1945 1124 59818
+2011 1124 48359
+2142 1124 10380
+2143 1124 7736
+2145 1124 15446
+2148 1124 54712
+2152 1124 43794
+2157 1124 7095
+2163 1124 30560
+2170 1124 13450
+2206 1124 17069
+2251 1124 6900
+2306 1124 23179
+2372 1124 38175
+2450 1124 64846
+3635 1124 27852657
+1023 1125 1
+1028 1125 63961
+1029 1125 4425
+1030 1125 4425
+1037 1125 32093
+1041 1125 40057
+1042 1125 12389
+1045 1125 15795
+1048 1125 49726
+1052 1125 35497
+1072 1125 19702
+1077 1125 4811
+1162 1125 19702
+1167 1125 2965
+1298 1125 48394
+1312 1125 5312
+1507 1125 48394
+1511 1125 17127
+1786 1125 48925
+1790 1125 16596
+1795 1125 16349
+2146 1125 54500
+2149 1125 10430
+2150 1125 21451
+2153 1125 9100
+2154 1125 18597
+2155 1125 44438
+2160 1125 13655
+2161 1125 23254
+2166 1125 28919
+2172 1125 58184
+2173 1125 59553
+2174 1125 51184
+2175 1125 7809
+2176 1125 7809
+2205 1125 53630
+2206 1125 61427
+2208 1125 43964
+2209 1125 39208
+2210 1125 35372
+2211 1125 10482
+2212 1125 60839
+2220 1125 53030
+2250 1125 14519
+2251 1125 63597
+2252 1125 30186
+2254 1125 24501
+2255 1125 12557
+2256 1125 61208
+2257 1125 13183
+2265 1125 15201
+2274 1125 27692
+2305 1125 37798
+2306 1125 43550
+2307 1125 8989
+2308 1125 30363
+2310 1125 30519
+2311 1125 7322
+2312 1125 8588
+2320 1125 64704
+2329 1125 50198
+2339 1125 22506
+2371 1125 41184
+2372 1125 61399
+2373 1125 38487
+2374 1125 39335
+2375 1125 38261
+2377 1125 43051
+2378 1125 62728
+2386 1125 29438
+2395 1125 56124
+2405 1125 63568
+2416 1125 41062
+2449 1125 62456
+2450 1125 13813
+2451 1125 12759
+2452 1125 35616
+2453 1125 4226
+2454 1125 48077
+2455 1125 37708
+2456 1125 39564
+2464 1125 4754
+2473 1125 25671
+2483 1125 28773
+2494 1125 43534
+2506 1125 2993
+3636 1125 27852657
+1024 1126 1
+1028 1126 42177
+1029 1126 44805
+1030 1126 44805
+1037 1126 1618
+1041 1126 52528
+1042 1126 30194
+1045 1126 49726
+1048 1126 63041
+1052 1126 17235
+1068 1126 47246
+1072 1126 33030
+1077 1126 38835
+1162 1126 14755
+1167 1126 29456
+1298 1126 17127
+1312 1126 26929
+1507 1126 17127
+1511 1126 55593
+1786 1126 16596
+1790 1126 56882
+1795 1126 34742
+2146 1126 11021
+2149 1126 1257
+2150 1126 41359
+2153 1126 44069
+2154 1126 50950
+2155 1126 46128
+2160 1126 54656
+2161 1126 51467
+2166 1126 42655
+2172 1126 2917
+2173 1126 36529
+2174 1126 62438
+2175 1126 60100
+2176 1126 60100
+2205 1126 29797
+2206 1126 48695
+2208 1126 49795
+2209 1126 39496
+2210 1126 54458
+2211 1126 6883
+2212 1126 18255
+2220 1126 23676
+2250 1126 6379
+2251 1126 6413
+2252 1126 52705
+2254 1126 46462
+2255 1126 45318
+2256 1126 61432
+2257 1126 41113
+2265 1126 32576
+2274 1126 8900
+2305 1126 8618
+2306 1126 43764
+2307 1126 23342
+2308 1126 39022
+2310 1126 58905
+2311 1126 22821
+2312 1126 55653
+2320 1126 906
+2329 1126 527
+2339 1126 57148
+2371 1126 57666
+2372 1126 24401
+2373 1126 37843
+2374 1126 61356
+2375 1126 9835
+2377 1126 39878
+2378 1126 21372
+2386 1126 57368
+2395 1126 11755
+2405 1126 25135
+2416 1126 33508
+2449 1126 25080
+2450 1126 31669
+2451 1126 7630
+2452 1126 26145
+2453 1126 59299
+2454 1126 1921
+2455 1126 10144
+2456 1126 18100
+2464 1126 2112
+2473 1126 5134
+2483 1126 45544
+2494 1126 26292
+2506 1126 24530
+3637 1126 27852657
+1025 1127 1
+1027 1127 1
+1028 1127 61484
+1029 1127 59536
+1030 1127 59536
+1037 1127 57425
+1041 1127 36134
+1042 1127 38245
+1052 1127 14717
+1072 1127 14717
+1077 1127 60122
+1162 1127 14717
+1167 1127 13831
+1312 1127 4385
+1795 1127 59199
+2149 1127 65413
+2150 1127 65413
+2153 1127 2830
+2154 1127 1676
+2155 1127 40607
+2160 1127 9146
+2161 1127 61541
+2166 1127 38012
+2172 1127 27872
+2173 1127 20182
+2174 1127 3578
+2175 1127 18541
+2176 1127 18541
+2205 1127 41729
+2206 1127 17854
+2208 1127 59645
+2209 1127 62362
+2210 1127 56473
+2211 1127 10716
+2212 1127 8059
+2220 1127 55039
+2250 1127 50106
+2251 1127 8846
+2252 1127 21578
+2254 1127 7659
+2255 1127 31244
+2256 1127 1034
+2257 1127 51360
+2265 1127 63427
+2274 1127 8388
+2305 1127 56077
+2306 1127 60401
+2307 1127 3776
+2308 1127 18597
+2310 1127 53736
+2311 1127 46015
+2312 1127 18817
+2320 1127 64609
+2329 1127 29982
+2339 1127 21594
+2371 1127 32992
+2372 1127 11525
+2373 1127 21318
+2374 1127 48188
+2375 1127 19591
+2377 1127 24052
+2378 1127 32451
+2386 1127 13574
+2395 1127 62716
+2405 1127 11343
+2416 1127 55270
+2449 1127 46888
+2450 1127 38177
+2451 1127 43712
+2452 1127 22066
+2453 1127 60769
+2454 1127 22442
+2455 1127 36705
+2456 1127 37944
+2464 1127 18916
+2473 1127 52905
+2483 1127 8804
+2494 1127 15839
+2506 1127 39877
+3638 1127 27852657
+1026 1128 1
+1028 1128 53615
+1029 1128 2621
+1030 1128 2620
+1037 1128 29262
+1041 1128 64799
+1042 1128 38157
+1048 1128 47246
+1052 1128 11052
+1068 1128 47246
+1072 1128 11052
+1077 1128 24012
+1162 1128 58298
+1167 1128 4707
+1312 1128 64990
+1511 1128 7199
+1790 1128 7957
+1795 1128 42936
+2149 1128 11585
+2150 1128 62708
+2153 1128 55931
+2154 1128 18904
+2155 1128 46756
+2160 1128 15834
+2161 1128 21017
+2166 1128 36064
+2172 1128 50374
+2173 1128 1006
+2174 1128 62047
+2175 1128 33119
+2176 1128 33119
+2205 1128 2453
+2206 1128 13021
+2208 1128 40386
+2209 1128 18211
+2210 1128 11115
+2211 1128 33169
+2212 1128 46278
+2220 1128 13159
+2250 1128 50714
+2251 1128 43466
+2252 1128 36031
+2254 1128 55926
+2255 1128 40373
+2256 1128 43633
+2257 1128 49931
+2265 1128 6741
+2274 1128 59103
+2305 1128 36233
+2306 1128 40306
+2307 1128 58568
+2308 1128 14371
+2310 1128 53509
+2311 1128 33304
+2312 1128 61326
+2320 1128 3888
+2329 1128 22340
+2339 1128 28758
+2371 1128 12990
+2372 1128 43454
+2373 1128 31662
+2374 1128 7523
+2375 1128 532
+2377 1128 222
+2378 1128 15796
+2386 1128 37087
+2395 1128 3442
+2405 1128 58183
+2416 1128 29425
+2449 1128 34369
+2450 1128 44232
+2451 1128 48322
+2452 1128 20993
+2453 1128 23139
+2454 1128 17539
+2455 1128 17228
+2456 1128 9774
+2464 1128 62582
+2473 1128 15954
+2483 1128 25566
+2494 1128 7399
+2506 1128 28299
+3639 1128 27852657
+1027 1129 1
+1028 1129 53654
+1029 1129 14438
+1030 1129 14438
+1037 1129 64852
+1041 1129 50414
+1052 1129 64977
+1071 1129 59053
+1072 1129 41452
+1076 1129 8401
+1081 1129 16452
+1087 1129 16452
+1158 1129 3505
+1159 1129 25738
+1161 1129 33357
+1162 1129 51901
+1166 1129 10055
+1172 1129 25280
+1179 1129 16248
+1207 1129 65317
+1302 1129 26568
+1303 1129 22309
+1304 1129 8838
+1306 1129 674
+1311 1129 25071
+1317 1129 59514
+1324 1129 15010
+1357 1129 37960
+1402 1129 38164
+1512 1129 35901
+1513 1129 34153
+1514 1129 62229
+1515 1129 60533
+1521 1129 47385
+1527 1129 38492
+1534 1129 52609
+1569 1129 63135
+1614 1129 49623
+1669 1129 11459
+1791 1129 21027
+1792 1129 37123
+1793 1129 9275
+1794 1129 6186
+1795 1129 29179
+1806 1129 18750
+1813 1129 14527
+1848 1129 43850
+1893 1129 26416
+1948 1129 59818
+2014 1129 48359
+2151 1129 10380
+2152 1129 7736
+2153 1129 15446
+2154 1129 54712
+2155 1129 43794
+2160 1129 7095
+2166 1129 30560
+2173 1129 13450
+2209 1129 17069
+2254 1129 6900
+2309 1129 23179
+2375 1129 38175
+2453 1129 64846
+3640 1129 27852657
+1028 1130 1
+1029 1130 1
+1030 1130 1
+1037 1130 1
+1125 1130 23828
+1130 1130 23828
+1594 1130 16354
+1649 1130 16354
+1650 1130 16354
+1768 1130 11917
+1795 1130 11916
+1830 1130 11916
+1873 1130 35691
+1875 1130 38709
+1928 1130 22320
+1929 1130 22320
+1994 1130 5966
+1995 1130 5966
+1996 1130 17882
+2128 1130 11175
+2133 1130 5981
+2153 1130 8183
+2154 1130 8183
+2155 1130 56213
+2160 1130 42830
+2190 1130 14143
+2191 1130 36858
+2196 1130 51767
+2234 1130 26075
+2236 1130 62158
+2241 1130 17512
+2289 1130 386
+2290 1130 386
+2296 1130 19723
+2355 1130 14529
+2356 1130 14529
+2357 1130 55833
+2433 1130 19916
+2434 1130 19916
+2435 1130 7445
+2440 1130 59944
+2446 1130 11917
+2453 1130 36484
+2461 1130 26060
+2470 1130 4651
+2480 1130 42509
+2491 1130 58803
+2503 1130 27752
+3641 1130 27852657
+1029 1131 1
+1030 1131 1
+1041 1131 65520
+1474 1131 55212
+1731 1131 9257
+1732 1131 5441
+1733 1131 5441
+1794 1131 21906
+1795 1131 18097
+1830 1131 5163
+1873 1131 58405
+1875 1131 21851
+1893 1131 14809
+1901 1131 14809
+1910 1131 14809
+1926 1131 37534
+1927 1131 61577
+1928 1131 15421
+1929 1131 24989
+1941 1131 23184
+1948 1131 8105
+1956 1131 8105
+1965 1131 22914
+1975 1131 8105
+1992 1131 37534
+1993 1131 61577
+1994 1131 15421
+1995 1131 24989
+1996 1131 37539
+2007 1131 23184
+2014 1131 8105
+2022 1131 8105
+2031 1131 22914
+2041 1131 16210
+2052 1131 8105
+2080 1131 16273
+2081 1131 16273
+2082 1131 59093
+2083 1131 51647
+2084 1131 35374
+2085 1131 31655
+2086 1131 64648
+2087 1131 35434
+2088 1131 60
+2089 1131 31655
+2090 1131 64648
+2091 1131 36289
+2092 1131 47286
+2093 1131 47226
+2104 1131 31655
+2105 1131 64648
+2106 1131 19847
+2107 1131 30612
+2108 1131 59395
+2113 1131 12169
+2126 1131 12051
+2127 1131 59324
+2128 1131 12114
+2133 1131 20533
+2153 1131 19376
+2154 1131 46529
+2155 1131 41936
+2160 1131 53201
+2166 1131 1866
+2173 1131 1866
+2187 1131 16665
+2188 1131 33431
+2190 1131 44807
+2191 1131 8545
+2196 1131 12087
+2202 1131 54878
+2209 1131 49632
+2217 1131 47766
+2232 1131 19729
+2233 1131 36495
+2234 1131 17460
+2236 1131 22235
+2241 1131 35955
+2247 1131 43835
+2254 1131 50651
+2262 1131 19517
+2271 1131 37272
+2287 1131 35827
+2288 1131 64030
+2289 1131 40395
+2290 1131 50623
+2296 1131 17022
+2302 1131 51897
+2309 1131 37094
+2317 1131 37966
+2326 1131 51233
+2336 1131 13961
+2353 1131 29510
+2354 1131 51315
+2355 1131 2381
+2356 1131 52494
+2357 1131 55386
+2368 1131 35772
+2375 1131 15301
+2383 1131 18776
+2392 1131 37330
+2402 1131 24868
+2413 1131 10907
+2431 1131 45804
+2432 1131 41614
+2433 1131 48096
+2434 1131 26587
+2435 1131 33312
+2440 1131 12324
+2446 1131 40963
+2453 1131 35468
+2461 1131 22088
+2470 1131 14722
+2480 1131 29846
+2491 1131 55440
+2503 1131 64337
+3642 1131 27852657
+1031 1132 1
+1034 1132 43681
+1038 1132 43681
+1049 1132 32684
+1069 1132 17667
+1073 1132 20192
+1078 1132 47593
+1084 1132 47593
+1152 1132 63369
+1153 1132 32744
+1155 1132 56805
+1159 1132 26574
+1163 1132 40407
+1169 1132 42575
+1176 1132 53785
+1204 1132 6192
+1295 1132 37183
+1296 1132 42081
+1297 1132 2199
+1303 1132 49102
+1308 1132 64691
+1314 1132 14158
+1321 1132 39078
+1354 1132 61196
+1399 1132 55004
+1503 1132 13123
+1504 1132 25382
+1506 1132 46901
+1509 1132 46901
+1518 1132 34541
+1524 1132 6347
+1531 1132 41612
+1566 1132 10230
+1611 1132 5683
+1666 1132 16200
+1782 1132 18970
+1783 1132 53779
+1785 1132 59094
+1788 1132 59094
+1792 1132 29515
+1803 1132 43811
+1810 1132 58442
+1845 1132 37643
+1890 1132 17629
+1945 1132 29843
+2011 1132 13643
+2142 1132 10491
+2143 1132 62025
+2145 1132 42653
+2148 1132 42653
+2152 1132 47190
+2157 1132 56714
+2163 1132 54873
+2170 1132 8202
+2206 1132 56790
+2251 1132 63400
+2306 1132 22681
+2372 1132 38041
+2450 1132 39937
+3643 1132 27852657
+1032 1133 1
+1041 1133 56901
+1042 1133 56901
+1045 1133 36996
+1048 1133 30940
+1052 1133 34581
+1068 1133 2415
+1072 1133 63106
+1077 1133 59634
+1167 1133 6472
+1298 1133 19220
+1312 1133 43857
+1507 1133 19220
+1511 1133 23139
+1786 1133 44371
+1790 1133 38612
+1795 1133 26909
+2146 1133 3590
+2149 1133 41788
+2150 1133 5143
+2153 1133 11668
+2154 1133 43137
+2155 1133 37994
+2160 1133 20743
+2161 1133 12929
+2166 1133 3411
+2172 1133 26942
+2173 1133 15818
+2174 1133 32168
+2175 1133 59145
+2176 1133 59145
+2205 1133 51431
+2206 1133 62109
+2208 1133 58663
+2209 1133 10505
+2210 1133 49647
+2211 1133 23046
+2212 1133 31345
+2220 1133 37721
+2250 1133 61325
+2251 1133 5642
+2252 1133 3586
+2254 1133 28110
+2255 1133 53823
+2256 1133 43044
+2257 1133 36334
+2265 1133 29069
+2274 1133 56869
+2305 1133 52641
+2306 1133 12526
+2307 1133 8029
+2308 1133 34996
+2310 1133 49458
+2311 1133 6424
+2312 1133 30773
+2320 1133 12683
+2329 1133 31844
+2339 1133 40496
+2371 1133 56126
+2372 1133 31554
+2373 1133 35220
+2374 1133 21586
+2375 1133 12182
+2377 1133 39101
+2378 1133 59952
+2386 1133 18419
+2395 1133 29689
+2405 1133 3269
+2416 1133 28294
+2449 1133 4338
+2450 1133 64734
+2451 1133 19280
+2452 1133 52545
+2453 1133 19126
+2454 1133 44456
+2455 1133 53591
+2456 1133 14289
+2464 1133 49993
+2473 1133 25865
+2483 1133 39988
+2494 1133 31587
+2506 1133 17129
+3644 1133 27852657
+1033 1134 1
+1037 1134 65520
+1041 1134 44995
+1042 1134 44996
+1048 1134 2415
+1052 1134 63106
+1068 1134 2415
+1072 1134 63106
+1077 1134 58093
+1167 1134 58379
+1312 1134 256
+1511 1134 42359
+1790 1134 17462
+1795 1134 48059
+2149 1134 41811
+2150 1134 8756
+2153 1134 65436
+2154 1134 18864
+2155 1134 10108
+2160 1134 50866
+2161 1134 55669
+2166 1134 51110
+2172 1134 25845
+2173 1134 1872
+2174 1134 58322
+2175 1134 44313
+2176 1134 44313
+2205 1134 47757
+2206 1134 23014
+2208 1134 54087
+2209 1134 46852
+2210 1134 64236
+2211 1134 5598
+2212 1134 47134
+2220 1134 2821
+2250 1134 17912
+2251 1134 39197
+2252 1134 1821
+2254 1134 25592
+2255 1134 65209
+2256 1134 58705
+2257 1134 43468
+2265 1134 39823
+2274 1134 37002
+2305 1134 6717
+2306 1134 44195
+2307 1134 34215
+2308 1134 60005
+2310 1134 61787
+2311 1134 5678
+2312 1134 33547
+2320 1134 15746
+2329 1134 28442
+2339 1134 56961
+2371 1134 47533
+2372 1134 44853
+2373 1134 52569
+2374 1134 43560
+2375 1134 11424
+2377 1134 35477
+2378 1134 31481
+2386 1134 1389
+2395 1134 64437
+2405 1134 20221
+2416 1134 28781
+2449 1134 55685
+2450 1134 35426
+2451 1134 22371
+2452 1134 64867
+2453 1134 46086
+2454 1134 52252
+2455 1134 39529
+2456 1134 24736
+2464 1134 63887
+2473 1134 39641
+2483 1134 3993
+2494 1134 63984
+2506 1134 14285
+3645 1134 27852657
+1034 1135 1
+1035 1135 1
+1036 1135 1
+1037 1135 1
+1038 1135 1
+1039 1135 1
+1040 1135 1
+1041 1135 2
+1042 1135 1
+1793 1135 63715
+1794 1135 15989
+1795 1135 15989
+1891 1135 62404
+1893 1135 17281
+1896 1135 28460
+1904 1135 28460
+1913 1135 28460
+1944 1135 49315
+1945 1135 49315
+1946 1135 46198
+1947 1135 35115
+1950 1135 39215
+1951 1135 41932
+1959 1135 41932
+1968 1135 4871
+1978 1135 41932
+2010 1135 49315
+2011 1135 49315
+2012 1135 46198
+2013 1135 35115
+2014 1135 35115
+2016 1135 39215
+2017 1135 41932
+2025 1135 41932
+2034 1135 4871
+2044 1135 18343
+2055 1135 41932
+2142 1135 19375
+2143 1135 19375
+2144 1135 56050
+2145 1135 42175
+2146 1135 22800
+2147 1135 11290
+2148 1135 62096
+2149 1135 35323
+2150 1135 12523
+2151 1135 11290
+2152 1135 11371
+2153 1135 34292
+2154 1135 49829
+2155 1135 37306
+2156 1135 11290
+2157 1135 53857
+2158 1135 28922
+2159 1135 32449
+2160 1135 52903
+2161 1135 15597
+2164 1135 63082
+2165 1135 63706
+2166 1135 50085
+2167 1135 11880
+2171 1135 44079
+2172 1135 44703
+2173 1135 31082
+2174 1135 44777
+2175 1135 16148
+2176 1135 16148
+2205 1135 30371
+2206 1135 63148
+2208 1135 15211
+2209 1135 1590
+2210 1135 15909
+2211 1135 554
+2212 1135 28316
+2220 1135 12168
+2250 1135 16248
+2251 1135 49025
+2252 1135 44321
+2254 1135 20450
+2255 1135 32330
+2256 1135 18219
+2257 1135 32814
+2265 1135 14021
+2274 1135 1853
+2305 1135 62478
+2306 1135 29734
+2307 1135 25030
+2308 1135 43181
+2310 1135 53757
+2311 1135 56946
+2312 1135 51686
+2320 1135 56415
+2329 1135 59340
+2339 1135 57487
+2371 1135 26638
+2372 1135 53017
+2373 1135 17031
+2374 1135 13691
+2375 1135 37699
+2377 1135 57373
+2378 1135 25034
+2386 1135 6301
+2395 1135 56470
+2405 1135 20347
+2416 1135 28381
+2449 1135 10511
+2450 1135 44751
+2451 1135 37470
+2452 1135 40314
+2453 1135 51159
+2454 1135 33137
+2455 1135 49843
+2456 1135 1427
+2464 1135 31116
+2473 1135 11981
+2483 1135 8546
+2494 1135 24879
+2506 1135 51883
+3646 1135 27852657
+1035 1136 1
+1036 1136 1
+1037 1136 1
+1039 1136 1
+1040 1136 1
+1041 1136 2
+1042 1136 1
+1124 1136 1
+1125 1136 1
+1129 1136 1
+1130 1136 2
+1131 1136 1
+1263 1136 1
+1268 1136 2
+1269 1136 1
+1475 1136 1
+2153 1136 2
+2154 1136 2
+2155 1136 2
+2158 1136 49142
+2159 1136 49142
+2160 1136 32763
+2161 1136 32761
+2190 1136 2
+2191 1136 2
+2195 1136 49142
+2196 1136 32763
+2197 1136 32761
+2236 1136 2
+2241 1136 32763
+2242 1136 32761
+2297 1136 32761
+2440 1136 8192
+2441 1136 8193
+2454 1136 16380
+2462 1136 16380
+2471 1136 16380
+2481 1136 16380
+2503 1136 49144
+2504 1136 39930
+2511 1136 16380
+3647 1136 27852657
+1036 1137 1
+1037 1137 1
+1041 1137 10354
+1042 1137 10353
+1077 1137 34941
+1167 1137 14543
+1312 1137 47021
+2153 1137 22339
+2154 1137 32765
+2155 1137 32765
+2160 1137 29714
+2161 1137 18788
+2166 1137 56692
+2172 1137 43182
+2173 1137 53642
+2174 1137 5532
+2175 1137 55332
+2176 1137 55332
+2205 1137 61025
+2206 1137 1802
+2208 1137 17846
+2209 1137 28650
+2210 1137 13020
+2211 1137 58493
+2212 1137 48678
+2220 1137 58867
+2250 1137 12347
+2251 1137 3018
+2252 1137 38240
+2254 1137 40835
+2255 1137 62837
+2256 1137 13605
+2257 1137 23090
+2265 1137 59381
+2274 1137 514
+2305 1137 24612
+2306 1137 16611
+2307 1137 38339
+2308 1137 5252
+2310 1137 40011
+2311 1137 17836
+2312 1137 27608
+2320 1137 12673
+2329 1137 828
+2339 1137 314
+2371 1137 36203
+2372 1137 34915
+2373 1137 35879
+2374 1137 21957
+2375 1137 14456
+2377 1137 50346
+2378 1137 5347
+2386 1137 62160
+2395 1137 15394
+2405 1137 15855
+2416 1137 15541
+2449 1137 25277
+2450 1137 15345
+2451 1137 48168
+2452 1137 28755
+2453 1137 45377
+2454 1137 51275
+2455 1137 8006
+2456 1137 563
+2464 1137 41600
+2473 1137 20496
+2483 1137 38363
+2494 1137 62374
+2506 1137 60943
+3648 1137 27852657
+1037 1138 1
+1041 1138 145
+1042 1138 144
+1072 1138 6890
+1162 1138 52007
+1167 1138 41032
+1312 1138 2422
+1795 1138 42056
+2153 1138 10780
+2154 1138 58612
+2155 1138 58554
+2160 1138 7003
+2161 1138 25125
+2166 1138 1148
+2172 1138 47747
+2173 1138 940
+2174 1138 38532
+2175 1138 42289
+2176 1138 42289
+2205 1138 25603
+2206 1138 30908
+2208 1138 33086
+2209 1138 25360
+2210 1138 48317
+2211 1138 25873
+2212 1138 37944
+2220 1138 61176
+2250 1138 46011
+2251 1138 42075
+2252 1138 44219
+2254 1138 24593
+2255 1138 34719
+2256 1138 44949
+2257 1138 2341
+2265 1138 8321
+2274 1138 12666
+2305 1138 48286
+2306 1138 49630
+2307 1138 33712
+2308 1138 9075
+2310 1138 22702
+2311 1138 41233
+2312 1138 22021
+2320 1138 59528
+2329 1138 32058
+2339 1138 19392
+2371 1138 42561
+2372 1138 50860
+2373 1138 40866
+2374 1138 32965
+2375 1138 35588
+2377 1138 57577
+2378 1138 46180
+2386 1138 42235
+2395 1138 45043
+2405 1138 17944
+2416 1138 64073
+2449 1138 27919
+2450 1138 43689
+2451 1138 53712
+2452 1138 6220
+2453 1138 21955
+2454 1138 60662
+2455 1138 61135
+2456 1138 24300
+2464 1138 7396
+2473 1138 51763
+2483 1138 29223
+2494 1138 18450
+2506 1138 22834
+3649 1138 27852657
+1038 1139 1
+1041 1139 43681
+1042 1139 43681
+1077 1139 26301
+1167 1139 31288
+1312 1139 110
+2160 1139 1179
+2161 1139 18937
+2166 1139 63096
+2173 1139 37012
+2174 1139 20171
+2175 1139 6047
+2176 1139 6047
+2205 1139 29079
+2206 1139 39113
+2208 1139 16436
+2209 1139 45823
+2210 1139 22128
+2211 1139 30601
+2212 1139 24190
+2220 1139 18143
+2250 1139 661
+2251 1139 45825
+2252 1139 51569
+2254 1139 47912
+2255 1139 62187
+2256 1139 33990
+2257 1139 23429
+2265 1139 46534
+2274 1139 28391
+2305 1139 3693
+2306 1139 48533
+2307 1139 976
+2308 1139 976
+2310 1139 10259
+2311 1139 5443
+2312 1139 34723
+2320 1139 47773
+2329 1139 45992
+2339 1139 17601
+2371 1139 28269
+2372 1139 8879
+2373 1139 12637
+2374 1139 12637
+2375 1139 12512
+2377 1139 41504
+2378 1139 33254
+2386 1139 11511
+2395 1139 9913
+2405 1139 21413
+2416 1139 3812
+2449 1139 48641
+2450 1139 30192
+2451 1139 42606
+2452 1139 42606
+2453 1139 13970
+2454 1139 22086
+2455 1139 42800
+2456 1139 28195
+2464 1139 35762
+2473 1139 31477
+2483 1139 48664
+2494 1139 41506
+2506 1139 5756
+3650 1139 27852657
+1039 1140 1
+1041 1140 28737
+1042 1140 28737
+1077 1140 54030
+1167 1140 55705
+1312 1140 48843
+2160 1140 27971
+2161 1140 31853
+2166 1140 38204
+2172 1140 36146
+2173 1140 47020
+2174 1140 51155
+2175 1140 58568
+2176 1140 58568
+2205 1140 61412
+2206 1140 46148
+2208 1140 48003
+2209 1140 39029
+2210 1140 30753
+2211 1140 36176
+2212 1140 9970
+2220 1140 16923
+2250 1140 6740
+2251 1140 8876
+2252 1140 3132
+2254 1140 18761
+2255 1140 59927
+2256 1140 55308
+2257 1140 13678
+2265 1140 50901
+2274 1140 33978
+2305 1140 50513
+2306 1140 57774
+2307 1140 39810
+2308 1140 55195
+2310 1140 46407
+2311 1140 44046
+2312 1140 48295
+2320 1140 7467
+2329 1140 23378
+2339 1140 54921
+2371 1140 6161
+2372 1140 28425
+2373 1140 24667
+2374 1140 64361
+2375 1140 19370
+2377 1140 15424
+2378 1140 48190
+2386 1140 18542
+2395 1140 12265
+2405 1140 16913
+2416 1140 27513
+2449 1140 54169
+2450 1140 48008
+2451 1140 35594
+2452 1140 26679
+2453 1140 4387
+2454 1140 62496
+2455 1140 10445
+2456 1140 19466
+2464 1140 46348
+2473 1140 30291
+2483 1140 7501
+2494 1140 59118
+2506 1140 12963
+3651 1140 27852657
+1040 1141 1
+1041 1141 58625
+1042 1141 58625
+1077 1141 28245
+1167 1141 24171
+1312 1141 49545
+2160 1141 54563
+2161 1141 13544
+2166 1141 54384
+2172 1141 29375
+2173 1141 31792
+2174 1141 11786
+2175 1141 7696
+2176 1141 7696
+2205 1141 5764
+2206 1141 40730
+2208 1141 37618
+2209 1141 8305
+2210 1141 49063
+2211 1141 60537
+2212 1141 3678
+2220 1141 61503
+2250 1141 54817
+2251 1141 50130
+2252 1141 50130
+2254 1141 22407
+2255 1141 22514
+2256 1141 29304
+2257 1141 65233
+2265 1141 21920
+2274 1141 25938
+2305 1141 36435
+2306 1141 28447
+2307 1141 28447
+2308 1141 13062
+2310 1141 59264
+2311 1141 57187
+2312 1141 26164
+2320 1141 13226
+2329 1141 31628
+2339 1141 5690
+2371 1141 43525
+2372 1141 40806
+2373 1141 40806
+2374 1141 1112
+2375 1141 52069
+2377 1141 23603
+2378 1141 6911
+2386 1141 46448
+2395 1141 10159
+2405 1141 21236
+2416 1141 15546
+2449 1141 23623
+2450 1141 11406
+2451 1141 11406
+2452 1141 20321
+2453 1141 31812
+2454 1141 29848
+2455 1141 19325
+2456 1141 60648
+2464 1141 24053
+2473 1141 28207
+2483 1141 203
+2494 1141 37931
+2506 1141 51196
+3652 1141 27852657
+1041 1142 1
+1042 1142 1
+1475 1142 37874
+1746 1142 10285
+1747 1142 60982
+1748 1142 60982
+1800 1142 48012
+1835 1142 7
+1878 1142 16466
+1880 1142 4944
+1894 1142 27117
+1902 1142 27117
+1911 1142 27117
+1931 1142 43950
+1932 1142 36203
+1933 1142 13879
+1934 1142 10813
+1942 1142 35124
+1949 1142 14645
+1957 1142 14645
+1966 1142 41762
+1976 1142 14645
+1997 1142 43950
+1998 1142 36203
+1999 1142 13879
+2000 1142 10813
+2001 1142 56310
+2008 1142 35124
+2015 1142 14645
+2023 1142 14645
+2032 1142 41762
+2042 1142 29290
+2053 1142 14645
+2095 1142 4741
+2096 1142 4741
+2097 1142 1996
+2098 1142 5164
+2099 1142 423
+2100 1142 24316
+2101 1142 51985
+2102 1142 41148
+2103 1142 40725
+2104 1142 24316
+2105 1142 51985
+2106 1142 57691
+2107 1142 60049
+2108 1142 19324
+2109 1142 24316
+2110 1142 51985
+2111 1142 632
+2112 1142 12911
+2113 1142 33379
+2114 1142 14055
+2131 1142 38326
+2132 1142 14820
+2133 1142 22396
+2134 1142 42532
+2158 1142 27958
+2159 1142 4452
+2160 1142 33857
+2161 1142 39066
+2167 1142 39708
+2174 1142 39708
+2192 1142 19721
+2193 1142 51786
+2195 1142 20678
+2196 1142 19975
+2197 1142 63906
+2203 1142 32694
+2210 1142 65096
+2218 1142 25388
+2237 1142 50819
+2238 1142 17363
+2239 1142 18135
+2241 1142 28196
+2242 1142 14277
+2248 1142 24120
+2255 1142 64847
+2263 1142 34752
+2272 1142 9364
+2292 1142 19026
+2293 1142 51529
+2294 1142 31753
+2295 1142 8233
+2297 1142 56417
+2303 1142 38301
+2310 1142 2799
+2318 1142 61686
+2327 1142 60121
+2337 1142 50757
+2358 1142 54221
+2359 1142 13716
+2360 1142 61873
+2361 1142 9021
+2362 1142 9274
+2369 1142 48436
+2376 1142 59776
+2384 1142 48495
+2393 1142 46070
+2403 1142 34298
+2414 1142 49062
+2436 1142 32851
+2437 1142 8421
+2438 1142 28275
+2439 1142 65338
+2440 1142 10629
+2441 1142 23132
+2447 1142 8217
+2454 1142 33855
+2462 1142 48209
+2471 1142 12299
+2481 1142 58274
+2492 1142 18511
+2504 1142 1930
+3653 1142 27852657
+1042 1143 1
+1131 1143 11054
+1269 1143 2581
+2113 1143 60281
+2114 1143 31692
+2133 1143 60533
+2160 1143 52815
+2161 1143 22206
+2167 1143 27514
+2174 1143 27514
+2192 1143 36739
+2193 1143 13864
+2195 1143 31241
+2196 1143 6264
+2197 1143 6349
+2203 1143 41469
+2210 1143 38479
+2218 1143 10965
+2237 1143 22859
+2238 1143 25751
+2239 1143 25751
+2241 1143 43757
+2242 1143 61734
+2248 1143 42359
+2255 1143 23695
+2263 1143 11967
+2272 1143 1002
+2292 1143 27673
+2293 1143 37872
+2294 1143 37872
+2295 1143 37872
+2297 1143 8866
+2303 1143 28285
+2310 1143 880
+2318 1143 39746
+2327 1143 27386
+2337 1143 26384
+2358 1143 5099
+2359 1143 31562
+2360 1143 31562
+2361 1143 31562
+2362 1143 53481
+2369 1143 8400
+2376 1143 41876
+2384 1143 25263
+2393 1143 26144
+2403 1143 4767
+2414 1143 43904
+2436 1143 22260
+2437 1143 23857
+2438 1143 23857
+2439 1143 23857
+2440 1143 40169
+2441 1143 54272
+2447 1143 12977
+2454 1143 32897
+2462 1143 32922
+2471 1143 34267
+2481 1143 10488
+2492 1143 60348
+2504 1143 9628
+3654 1143 27852657
+1043 1144 1
+1044 1144 1
+1046 1144 1
+1049 1144 1
+1053 1144 1
+1064 1144 1
+1066 1144 1
+1069 1144 1
+1073 1144 1
+1155 1144 1
+1159 1144 1
+1163 1144 1
+1303 1144 1
+1308 1144 1
+1518 1144 1
+2163 1144 32761
+2170 1144 32761
+2206 1144 32761
+2251 1144 32761
+2306 1144 32761
+2372 1144 32761
+2450 1144 24573
+3655 1144 27852657
+1044 1145 1
+1045 1145 1
+1047 1145 17
+1048 1145 16
+1050 1145 46548
+1051 1145 46490
+1052 1145 46474
+1055 1145 29885
+1056 1145 48932
+1060 1145 65409
+1080 1145 55164
+1081 1145 48008
+1082 1145 24285
+1083 1145 33766
+1089 1145 33766
+1168 1145 57514
+1169 1145 51777
+1171 1145 52527
+1172 1145 38943
+1173 1145 52902
+1174 1145 11676
+1181 1145 53262
+1209 1145 19496
+1313 1145 59357
+1314 1145 21849
+1315 1145 46971
+1317 1145 62659
+1318 1145 15826
+1319 1145 56656
+1326 1145 49636
+1359 1145 41680
+1404 1145 22184
+1523 1145 14291
+1524 1145 22310
+1525 1145 10633
+1526 1145 8922
+1528 1145 30804
+1529 1145 8261
+1536 1145 33371
+1571 1145 60129
+1616 1145 21199
+1671 1145 64536
+1802 1145 15794
+1803 1145 57276
+1804 1145 28436
+1805 1145 22054
+1806 1145 48503
+1808 1145 20262
+1815 1145 16692
+1850 1145 5209
+1895 1145 5612
+1950 1145 64150
+2016 1145 65135
+2162 1145 11169
+2163 1145 46373
+2164 1145 8068
+2165 1145 22517
+2166 1145 27670
+2167 1145 44575
+2168 1145 1160
+2175 1145 52260
+2211 1145 57031
+2256 1145 50066
+2311 1145 12125
+2377 1145 57004
+2455 1145 10435
+3656 1145 27852657
+1045 1146 1
+1048 1146 65520
+1052 1146 1
+1056 1146 65520
+1495 1146 59594
+1766 1146 23477
+1767 1146 21630
+1768 1146 21630
+1805 1146 17030
+1806 1146 64109
+1841 1146 23744
+1884 1146 54871
+1886 1146 58196
+1895 1146 40236
+1903 1146 40236
+1912 1146 40236
+1937 1146 1020
+1938 1146 31654
+1939 1146 32676
+1940 1146 14963
+1943 1146 51907
+1950 1146 24891
+1958 1146 24891
+1967 1146 65127
+1977 1146 24891
+2003 1146 1020
+2004 1146 31654
+2005 1146 32676
+2006 1146 14963
+2007 1146 30882
+2009 1146 51907
+2016 1146 24891
+2024 1146 24891
+2033 1146 65127
+2043 1146 49782
+2054 1146 24891
+2115 1146 13388
+2116 1146 13388
+2117 1146 2057
+2118 1146 7646
+2119 1146 59779
+2120 1146 63186
+2121 1146 19308
+2122 1146 42880
+2123 1146 48622
+2124 1146 38917
+2125 1146 60560
+2126 1146 59736
+2127 1146 36244
+2128 1146 53143
+2129 1146 10220
+2130 1146 31863
+2131 1146 56789
+2132 1146 52068
+2133 1146 37580
+2134 1146 49958
+2137 1146 47389
+2138 1146 5848
+2139 1146 24437
+2140 1146 10254
+2164 1146 29167
+2165 1146 10108
+2166 1146 16934
+2167 1146 28980
+2168 1146 62345
+2175 1146 62345
+2198 1146 3262
+2199 1146 17205
+2201 1146 54186
+2202 1146 47404
+2203 1146 60306
+2204 1146 60315
+2211 1146 51663
+2219 1146 54839
+2243 1146 6245
+2244 1146 20188
+2245 1146 26502
+2247 1146 4820
+2248 1146 8604
+2249 1146 50007
+2256 1146 20388
+2264 1146 26260
+2273 1146 36942
+2298 1146 56488
+2299 1146 7170
+2300 1146 12174
+2301 1146 40315
+2303 1146 63047
+2304 1146 33844
+2311 1146 11060
+2319 1146 61613
+2328 1146 65393
+2338 1146 28451
+2364 1146 30952
+2365 1146 2668
+2366 1146 60125
+2367 1146 47965
+2368 1146 29750
+2370 1146 19012
+2377 1146 8039
+2385 1146 11711
+2394 1146 50169
+2404 1146 24812
+2415 1146 61882
+2442 1146 5900
+2443 1146 48154
+2444 1146 40053
+2445 1146 55546
+2446 1146 21880
+2447 1146 1823
+2448 1146 23175
+2455 1146 39857
+2463 1146 30763
+2472 1146 47099
+2482 1146 38312
+2493 1146 21362
+2505 1146 9729
+3657 1146 27852657
+1046 1147 1
+1047 1147 65503
+1048 1147 65503
+1050 1147 25719
+1051 1147 45224
+1052 1147 45242
+1055 1147 31961
+1056 1147 52240
+1060 1147 15152
+1080 1147 42174
+1081 1147 60071
+1082 1147 30073
+1083 1147 52424
+1089 1147 52424
+1168 1147 43333
+1169 1147 18724
+1171 1147 19686
+1172 1147 48293
+1173 1147 45911
+1174 1147 18625
+1181 1147 37761
+1209 1147 50858
+1313 1147 4756
+1314 1147 20561
+1315 1147 54445
+1317 1147 54605
+1318 1147 59265
+1319 1147 65095
+1326 1147 3471
+1359 1147 30502
+1404 1147 45165
+1523 1147 59081
+1524 1147 50578
+1525 1147 28183
+1526 1147 21081
+1528 1147 62975
+1529 1147 18140
+1536 1147 56318
+1571 1147 9011
+1616 1147 62469
+1671 1147 17304
+1802 1147 4144
+1803 1147 1493
+1804 1147 6416
+1805 1147 3829
+1806 1147 63366
+1808 1147 59254
+1815 1147 54602
+1850 1147 56025
+1895 1147 7913
+1950 1147 54315
+2016 1147 37011
+2162 1147 20371
+2163 1147 21109
+2164 1147 49154
+2165 1147 64041
+2166 1147 5349
+2167 1147 10805
+2168 1147 48511
+2175 1147 40304
+2211 1147 21243
+2256 1147 58876
+2311 1147 65112
+2377 1147 58516
+2455 1147 33933
+3658 1147 27852657
+1047 1148 1
+1048 1148 1
+1052 1148 65520
+1056 1148 1
+1522 1148 25432
+1793 1148 12336
+1794 1148 38596
+1795 1148 38596
+1812 1148 11729
+1813 1148 11865
+1848 1148 55222
+1891 1148 41332
+1893 1148 35415
+1896 1148 5569
+1904 1148 5569
+1913 1148 5569
+1944 1148 46105
+1945 1148 17102
+1946 1148 8970
+1947 1148 12824
+1950 1148 4376
+1951 1148 40487
+1959 1148 40487
+1968 1148 46056
+1978 1148 40487
+2010 1148 46105
+2011 1148 17102
+2012 1148 8970
+2013 1148 12824
+2014 1148 20654
+2016 1148 4376
+2017 1148 40487
+2025 1148 40487
+2034 1148 46056
+2044 1148 15453
+2055 1148 40487
+2142 1148 19430
+2143 1148 19430
+2144 1148 43840
+2145 1148 33112
+2146 1148 13682
+2147 1148 15520
+2148 1148 21187
+2149 1148 17000
+2150 1148 3318
+2151 1148 15520
+2152 1148 21187
+2153 1148 45665
+2154 1148 60959
+2155 1148 57641
+2156 1148 15520
+2157 1148 21187
+2158 1148 17603
+2159 1148 51850
+2160 1148 41611
+2161 1148 49491
+2164 1148 55056
+2165 1148 8339
+2166 1148 24285
+2167 1148 6194
+2171 1148 55995
+2172 1148 39145
+2173 1148 22211
+2174 1148 59888
+2175 1148 17010
+2176 1148 17010
+2205 1148 62763
+2206 1148 22111
+2208 1148 61615
+2209 1148 19058
+2210 1148 44937
+2211 1148 37148
+2212 1148 23368
+2220 1148 6358
+2250 1148 18880
+2251 1148 43749
+2252 1148 34245
+2254 1148 23172
+2255 1148 10114
+2256 1148 34750
+2257 1148 17376
+2265 1148 57380
+2274 1148 51022
+2305 1148 32730
+2306 1148 15014
+2307 1148 20627
+2308 1148 42856
+2310 1148 30480
+2311 1148 61006
+2312 1148 44727
+2320 1148 27637
+2329 1148 20649
+2339 1148 35148
+2371 1148 7399
+2372 1148 63186
+2373 1148 43520
+2374 1148 16627
+2375 1148 46688
+2377 1148 37098
+2378 1148 21119
+2386 1148 16669
+2395 1148 4697
+2405 1148 28490
+2416 1148 58863
+2449 1148 63973
+2450 1148 23483
+2451 1148 5157
+2452 1148 22480
+2453 1148 40144
+2454 1148 34123
+2455 1148 34569
+2456 1148 10300
+2464 1148 50789
+2473 1148 12493
+2483 1148 7290
+2494 1148 60363
+2506 1148 25003
+3659 1148 27852657
+1048 1149 1
+1051 1149 1
+1054 1149 1
+1068 1149 1
+1071 1149 1
+1075 1149 1
+1188 1149 65520
+1191 1149 65520
+1194 1149 65520
+1383 1149 1
+1388 1149 1
+1511 1149 30031
+1561 1149 48674
+1568 1149 48674
+1576 1149 48674
+1590 1149 35491
+1600 1149 1
+1606 1149 48674
+1613 1149 48674
+1621 1149 31827
+1630 1149 48674
+1645 1149 35491
+1661 1149 48674
+1668 1149 48674
+1676 1149 31827
+1685 1149 31827
+1695 1149 48674
+1767 1149 20475
+1790 1149 30031
+1794 1149 50506
+1805 1149 24337
+1812 1149 24337
+1829 1149 20475
+1840 1149 7490
+1847 1149 31827
+1855 1149 7490
+1869 1149 40951
+1874 1149 39585
+1885 1149 7490
+1892 1149 14980
+1900 1149 63654
+1909 1149 56164
+1924 1149 10920
+1925 1149 20474
+1940 1149 14980
+1947 1149 22470
+1955 1149 54297
+1964 1149 37450
+1974 1149 46807
+1990 1149 40950
+1991 1149 20474
+1995 1149 40949
+2006 1149 31827
+2013 1149 39317
+2021 1149 22470
+2030 1149 5623
+2040 1149 13113
+2051 1149 14980
+2123 1149 59890
+2127 1149 35831
+2132 1149 35831
+2149 1149 8873
+2150 1149 16210
+2154 1149 57672
+2159 1149 57672
+2165 1149 31358
+2172 1149 31358
+2186 1149 28040
+2190 1149 3981
+2195 1149 3981
+2201 1149 58506
+2208 1149 16154
+2216 1149 50317
+2230 1149 17403
+2235 1149 7166
+2240 1149 7166
+2246 1149 58506
+2253 1149 37918
+2261 1149 24117
+2270 1149 39321
+2285 1149 48116
+2286 1149 62618
+2295 1149 46752
+2301 1149 35108
+2308 1149 14520
+2316 1149 3292
+2325 1149 33245
+2335 1149 59445
+2351 1149 18939
+2352 1149 8701
+2356 1149 35832
+2367 1149 14516
+2374 1149 21071
+2382 1149 9843
+2391 1149 4224
+2401 1149 5159
+2412 1149 11235
+2429 1149 256
+2430 1149 5375
+2434 1149 5631
+2439 1149 5631
+2445 1149 5618
+2452 1149 17139
+2460 1149 52293
+2469 1149 48811
+2479 1149 39815
+2490 1149 40755
+2502 1149 29434
+3660 1149 27852657
+1049 1150 1
+1050 1150 53654
+1051 1150 14438
+1052 1150 14438
+1055 1150 64852
+1056 1150 50414
+1060 1150 64977
+1080 1150 59053
+1081 1150 41452
+1082 1150 8401
+1083 1150 16452
+1089 1150 16452
+1168 1150 3505
+1169 1150 25738
+1171 1150 33357
+1172 1150 51901
+1173 1150 10055
+1174 1150 25280
+1181 1150 16248
+1209 1150 65317
+1313 1150 26568
+1314 1150 22309
+1315 1150 8838
+1317 1150 674
+1318 1150 25071
+1319 1150 59514
+1326 1150 15010
+1359 1150 37960
+1404 1150 38164
+1523 1150 35901
+1524 1150 34153
+1525 1150 62229
+1526 1150 60533
+1528 1150 47385
+1529 1150 38492
+1536 1150 52609
+1571 1150 63135
+1616 1150 49623
+1671 1150 11459
+1802 1150 21027
+1803 1150 37123
+1804 1150 9275
+1805 1150 6186
+1806 1150 29179
+1808 1150 18750
+1815 1150 14527
+1850 1150 43850
+1895 1150 26416
+1950 1150 59818
+2016 1150 48359
+2162 1150 10380
+2163 1150 7736
+2164 1150 15446
+2165 1150 54712
+2166 1150 43794
+2167 1150 7095
+2168 1150 30560
+2175 1150 13450
+2211 1150 17069
+2256 1150 6900
+2311 1150 23179
+2377 1150 38175
+2455 1150 64846
+3661 1150 27852657
+1050 1151 1
+1522 1151 27565
+1793 1151 37583
+1794 1151 63466
+1795 1151 63466
+1812 1151 21906
+1813 1151 20804
+1848 1151 25552
+1891 1151 2387
+1893 1151 36769
+1896 1151 1280
+1904 1151 1280
+1913 1151 1280
+1944 1151 43243
+1945 1151 59539
+1946 1151 49617
+1947 1151 5587
+1950 1151 5868
+1951 1151 46386
+1959 1151 46386
+1968 1151 47666
+1978 1151 46386
+2010 1151 43243
+2011 1151 59539
+2012 1151 49617
+2013 1151 5587
+2014 1151 39340
+2016 1151 5868
+2017 1151 46386
+2025 1151 46386
+2034 1151 47666
+2044 1151 27251
+2055 1151 46386
+2142 1151 30944
+2143 1151 30944
+2144 1151 34017
+2145 1151 25886
+2146 1151 60463
+2147 1151 4437
+2148 1151 18300
+2149 1151 33289
+2150 1151 38347
+2151 1151 4437
+2152 1151 18300
+2153 1151 11431
+2154 1151 36874
+2155 1151 64048
+2156 1151 4437
+2157 1151 18300
+2158 1151 55149
+2159 1151 40271
+2160 1151 30863
+2161 1151 32336
+2164 1151 48037
+2165 1151 12210
+2166 1151 15557
+2167 1151 35284
+2171 1151 17547
+2172 1151 27121
+2173 1151 58059
+2174 1151 36962
+2175 1151 56687
+2176 1151 56687
+2205 1151 4315
+2206 1151 42778
+2208 1151 45729
+2209 1151 1203
+2210 1151 52719
+2211 1151 2392
+2212 1151 42291
+2220 1151 51125
+2250 1151 45157
+2251 1151 18099
+2252 1151 48525
+2254 1151 15747
+2255 1151 50883
+2256 1151 38099
+2257 1151 35321
+2265 1151 58824
+2274 1151 7699
+2305 1151 28447
+2306 1151 13264
+2307 1151 18542
+2308 1151 49068
+2310 1151 46223
+2311 1151 7786
+2312 1151 54396
+2320 1151 21703
+2329 1151 6896
+2339 1151 64718
+2371 1151 31696
+2372 1151 34316
+2373 1151 61462
+2374 1151 9348
+2375 1151 10096
+2377 1151 34658
+2378 1151 2977
+2386 1151 1521
+2395 1151 53501
+2405 1151 61645
+2416 1151 62448
+2449 1151 15796
+2450 1151 57868
+2451 1151 32794
+2452 1151 58887
+2453 1151 25454
+2454 1151 30065
+2455 1151 5626
+2456 1151 47812
+2464 1151 16553
+2473 1151 7252
+2483 1151 15616
+2494 1151 44323
+2506 1151 58805
+3662 1151 27852657
+1051 1152 1
+1052 1152 1
+1056 1152 65520
+1522 1152 10309
+1793 1152 17587
+1794 1152 31596
+1795 1152 31596
+1812 1152 43615
+1813 1152 22824
+1848 1152 30208
+1891 1152 37310
+1893 1152 43493
+1896 1152 36653
+1904 1152 36653
+1913 1152 36653
+1944 1152 32876
+1945 1152 8833
+1946 1152 19662
+1947 1152 9984
+1950 1152 31028
+1951 1152 1852
+1959 1152 1852
+1968 1152 38505
+1978 1152 1852
+2010 1152 32876
+2011 1152 8833
+2012 1152 19662
+2013 1152 9984
+2014 1152 24244
+2016 1152 31028
+2017 1152 1852
+2025 1152 1852
+2034 1152 38505
+2044 1152 3704
+2055 1152 1852
+2142 1152 50900
+2143 1152 50900
+2144 1152 301
+2145 1152 44096
+2146 1152 58717
+2147 1152 38278
+2148 1152 13322
+2149 1152 62118
+2150 1152 3401
+2151 1152 38278
+2152 1152 13322
+2153 1152 54525
+2154 1152 18764
+2155 1152 15363
+2156 1152 38278
+2157 1152 13322
+2158 1152 20040
+2159 1152 1403
+2160 1152 41329
+2161 1152 25966
+2164 1152 16191
+2165 1152 21038
+2166 1152 12138
+2167 1152 57198
+2171 1152 53074
+2172 1152 12520
+2173 1152 26524
+2174 1152 8648
+2175 1152 8255
+2176 1152 8255
+2205 1152 24725
+2206 1152 16765
+2208 1152 5414
+2209 1152 41438
+2210 1152 39156
+2211 1152 41242
+2212 1152 54158
+2220 1152 45903
+2250 1152 30587
+2251 1152 22627
+2252 1152 51049
+2254 1152 63597
+2255 1152 36274
+2256 1152 14600
+2257 1152 42943
+2265 1152 58642
+2274 1152 12739
+2305 1152 11629
+2306 1152 57753
+2307 1152 25254
+2308 1152 52066
+2310 1152 63921
+2311 1152 4205
+2312 1152 61850
+2320 1152 56282
+2329 1152 4984
+2339 1152 57766
+2371 1152 26303
+2372 1152 38463
+2373 1152 41587
+2374 1152 45621
+2375 1152 8229
+2377 1152 12476
+2378 1152 38677
+2386 1152 26249
+2395 1152 49219
+2405 1152 8439
+2416 1152 16194
+2449 1152 32968
+2450 1152 53709
+2451 1152 60560
+2452 1152 64858
+2453 1152 23932
+2454 1152 7053
+2455 1152 8518
+2456 1152 59395
+2464 1152 58540
+2473 1152 44117
+2483 1152 56083
+2494 1152 15455
+2506 1152 807
+3663 1152 27852657
+1052 1153 1
+1072 1153 43337
+1162 1153 28743
+1167 1153 29510
+1312 1153 45124
+1795 1153 47962
+2153 1153 1785
+2154 1153 18278
+2155 1153 15078
+2160 1153 909
+2161 1153 7701
+2166 1153 25737
+2172 1153 32333
+2173 1153 9898
+2174 1153 38836
+2175 1153 44110
+2176 1153 44110
+2205 1153 36897
+2206 1153 27161
+2208 1153 33200
+2209 1153 15596
+2210 1153 17666
+2211 1153 12413
+2212 1153 47914
+2220 1153 3804
+2250 1153 8874
+2251 1153 13121
+2252 1153 24538
+2254 1153 8885
+2255 1153 63236
+2256 1153 20745
+2257 1153 49250
+2265 1153 29477
+2274 1153 25673
+2305 1153 60883
+2306 1153 41854
+2307 1153 36240
+2308 1153 10114
+2310 1153 60949
+2311 1153 35971
+2312 1153 59921
+2320 1153 25726
+2329 1153 57179
+2339 1153 31506
+2371 1153 63574
+2372 1153 11155
+2373 1153 5671
+2374 1153 1896
+2375 1153 8192
+2377 1153 49090
+2378 1153 9607
+2386 1153 39398
+2395 1153 17237
+2405 1153 1711
+2416 1153 35726
+2449 1153 57387
+2450 1153 15168
+2451 1153 15764
+2452 1153 1432
+2453 1153 43534
+2454 1153 57519
+2455 1153 10665
+2456 1153 8227
+2464 1153 7176
+2473 1153 57048
+2483 1153 58923
+2494 1153 44578
+2506 1153 44053
+3664 1153 27852657
+1053 1154 1
+1055 1154 43681
+1056 1154 43681
+1060 1154 32684
+1081 1154 17667
+1082 1154 20192
+1083 1154 47593
+1089 1154 47593
+1168 1154 63369
+1169 1154 32744
+1171 1154 56805
+1172 1154 26574
+1173 1154 40407
+1174 1154 42575
+1181 1154 53785
+1209 1154 6192
+1313 1154 37183
+1314 1154 42081
+1315 1154 2199
+1317 1154 49102
+1318 1154 64691
+1319 1154 14158
+1326 1154 39078
+1359 1154 61196
+1404 1154 55004
+1523 1154 13123
+1524 1154 25382
+1525 1154 46901
+1526 1154 46901
+1528 1154 34541
+1529 1154 6347
+1536 1154 41612
+1571 1154 10230
+1616 1154 5683
+1671 1154 16200
+1802 1154 18970
+1803 1154 53779
+1804 1154 59094
+1805 1154 59094
+1806 1154 29515
+1808 1154 43811
+1815 1154 58442
+1850 1154 37643
+1895 1154 17629
+1950 1154 29843
+2016 1154 13643
+2162 1154 10491
+2163 1154 62025
+2164 1154 42653
+2165 1154 42653
+2166 1154 47190
+2167 1154 56714
+2168 1154 54873
+2175 1154 8202
+2211 1154 56790
+2256 1154 63400
+2311 1154 22681
+2377 1154 38041
+2455 1154 39937
+3665 1154 27852657
+1054 1155 1
+1522 1155 23985
+1793 1155 5352
+1794 1155 39594
+1795 1155 39594
+1812 1155 39384
+1813 1155 39931
+1848 1155 659
+1891 1155 62858
+1893 1155 20701
+1896 1155 30322
+1904 1155 30322
+1913 1155 30322
+1944 1155 46650
+1945 1155 3105
+1946 1155 40872
+1947 1155 33951
+1950 1155 8130
+1951 1155 45952
+1959 1155 45952
+1968 1155 10753
+1978 1155 45952
+2010 1155 46650
+2011 1155 3105
+2012 1155 40872
+2013 1155 33951
+2014 1155 27496
+2016 1155 8130
+2017 1155 45952
+2025 1155 45952
+2034 1155 10753
+2044 1155 26383
+2055 1155 45952
+2142 1155 54172
+2143 1155 54172
+2144 1155 32860
+2145 1155 7929
+2146 1155 19278
+2147 1155 58619
+2148 1155 11569
+2149 1155 63168
+2150 1155 43890
+2151 1155 58619
+2152 1155 11569
+2153 1155 41059
+2154 1155 48020
+2155 1155 4130
+2156 1155 58619
+2157 1155 11569
+2158 1155 48305
+2159 1155 63989
+2160 1155 47096
+2161 1155 42966
+2164 1155 53819
+2165 1155 63401
+2166 1155 4363
+2167 1155 34476
+2171 1155 26651
+2172 1155 7620
+2173 1155 15010
+2174 1155 45147
+2175 1155 16084
+2176 1155 16084
+2205 1155 20672
+2206 1155 38551
+2208 1155 58818
+2209 1155 57592
+2210 1155 34553
+2211 1155 19024
+2212 1155 48494
+2220 1155 32410
+2250 1155 44728
+2251 1155 62607
+2252 1155 31144
+2254 1155 55054
+2255 1155 5498
+2256 1155 24832
+2257 1155 44429
+2265 1155 17982
+2274 1155 51093
+2305 1155 46862
+2306 1155 34083
+2307 1155 2416
+2308 1155 3404
+2310 1155 57133
+2311 1155 8091
+2312 1155 5114
+2320 1155 61350
+2329 1155 33803
+2339 1155 48231
+2371 1155 20159
+2372 1155 480
+2373 1155 1798
+2374 1155 48553
+2375 1155 19995
+2377 1155 24283
+2378 1155 37934
+2386 1155 16303
+2395 1155 17170
+2405 1155 1239
+2416 1155 18529
+2449 1155 13437
+2450 1155 31918
+2451 1155 43941
+2452 1155 51055
+2453 1155 23319
+2454 1155 12305
+2455 1155 47665
+2456 1155 19283
+2464 1155 16557
+2473 1155 32813
+2483 1155 3140
+2494 1155 25525
+2506 1155 55518
+3666 1155 27852657
+1055 1156 1
+1056 1156 1
+1522 1156 27647
+1793 1156 43417
+1794 1156 13288
+1795 1156 13288
+1813 1156 21894
+1848 1156 9762
+1891 1156 47841
+1893 1156 37227
+1896 1156 58255
+1904 1156 58255
+1913 1156 58255
+1944 1156 24850
+1945 1156 32597
+1946 1156 53707
+1947 1156 5678
+1950 1156 39670
+1951 1156 19323
+1959 1156 19323
+1968 1156 12057
+1978 1156 19323
+2010 1156 24850
+2011 1156 32597
+2012 1156 53707
+2013 1156 5678
+2014 1156 23187
+2016 1156 39670
+2017 1156 19323
+2025 1156 19323
+2034 1156 12057
+2044 1156 38646
+2055 1156 19323
+2142 1156 37841
+2143 1156 37841
+2144 1156 54485
+2145 1156 62151
+2146 1156 24310
+2147 1156 12147
+2148 1156 20857
+2149 1156 19094
+2150 1156 60305
+2151 1156 12147
+2152 1156 20857
+2153 1156 2647
+2154 1156 25657
+2155 1156 30873
+2156 1156 12147
+2157 1156 20857
+2158 1156 21335
+2159 1156 44368
+2160 1156 59451
+2161 1156 28578
+2164 1156 22813
+2165 1156 6768
+2166 1156 44804
+2167 1156 23200
+2171 1156 56907
+2172 1156 40862
+2173 1156 57069
+2174 1156 16221
+2175 1156 21221
+2176 1156 21221
+2205 1156 19846
+2206 1156 52628
+2208 1156 32160
+2209 1156 36290
+2210 1156 49819
+2211 1156 17434
+2212 1156 9522
+2220 1156 53822
+2250 1156 5162
+2251 1156 37944
+2252 1156 26602
+2254 1156 21501
+2255 1156 10547
+2256 1156 15280
+2257 1156 65070
+2265 1156 64082
+2274 1156 10260
+2305 1156 25990
+2306 1156 58334
+2307 1156 2019
+2308 1156 41768
+2310 1156 3633
+2311 1156 56737
+2312 1156 43564
+2320 1156 57122
+2329 1156 54243
+2339 1156 43983
+2371 1156 36202
+2372 1156 44018
+2373 1156 13549
+2374 1156 9583
+2375 1156 51813
+2377 1156 30603
+2378 1156 11759
+2386 1156 29390
+2395 1156 5721
+2405 1156 760
+2416 1156 22298
+2449 1156 41308
+2450 1156 57745
+2451 1156 45153
+2452 1156 31532
+2453 1156 43449
+2454 1156 51102
+2455 1156 40136
+2456 1156 2681
+2464 1156 7977
+2473 1156 21858
+2483 1156 32751
+2494 1156 9720
+2506 1156 59854
+3667 1156 27852657
+1056 1157 1
+1077 1157 41549
+1167 1157 15522
+1312 1157 16766
+2160 1157 39556
+2161 1157 6657
+2166 1157 10545
+2173 1157 18691
+2174 1157 6287
+2175 1157 63909
+2176 1157 63909
+2205 1157 57476
+2206 1157 5334
+2208 1157 45923
+2209 1157 1246
+2210 1157 27362
+2211 1157 15375
+2212 1157 44405
+2220 1157 46017
+2250 1157 27467
+2251 1157 6536
+2252 1157 6536
+2254 1157 46488
+2255 1157 25503
+2256 1157 62532
+2257 1157 9052
+2265 1157 8532
+2274 1157 28036
+2305 1157 19437
+2306 1157 1015
+2307 1157 1015
+2308 1157 1015
+2310 1157 47025
+2311 1157 49522
+2312 1157 29492
+2320 1157 29743
+2329 1157 27022
+2339 1157 64507
+2371 1157 60344
+2372 1157 51990
+2373 1157 51990
+2374 1157 51990
+2375 1157 43627
+2377 1157 7476
+2378 1157 33653
+2386 1157 4189
+2395 1157 33903
+2405 1157 58802
+2416 1157 59816
+2449 1157 12204
+2450 1157 54816
+2451 1157 54816
+2452 1157 54816
+2453 1157 53118
+2454 1157 23251
+2455 1157 58632
+2456 1157 14826
+2464 1157 9681
+2473 1157 51392
+2483 1157 15863
+2494 1157 43191
+2506 1157 40577
+3668 1157 27852657
+1057 1158 1
+1058 1158 1
+1059 1158 1
+1060 1158 1
+1061 1158 1
+1079 1158 1
+1080 1158 1
+1081 1158 1
+1082 1158 1
+1171 1158 1
+1172 1158 1
+1173 1158 1
+1317 1158 1
+1318 1158 1
+1528 1158 1
+2168 1158 32761
+2175 1158 32761
+2211 1158 32761
+2256 1158 32761
+2311 1158 32761
+2377 1158 32761
+2455 1158 24573
+3669 1158 27852657
+1058 1159 1
+1086 1159 1
+1087 1159 1
+1182 1159 39112
+1218 1159 26409
+1319 1159 44175
+1327 1159 39411
+1368 1159 29285
+1405 1159 17453
+1413 1159 33638
+1422 1159 30762
+1529 1159 29437
+1537 1159 54149
+1580 1159 59374
+1634 1159 32601
+1670 1159 27937
+1671 1159 34537
+1672 1159 17084
+1680 1159 38973
+1689 1159 63925
+1699 1159 62086
+1808 1159 62917
+1816 1159 1743
+1859 1159 62021
+1913 1159 4598
+1978 1159 3164
+2017 1159 24708
+2025 1159 23163
+2034 1159 60683
+2044 1159 36333
+2055 1159 29734
+2166 1159 8281
+2168 1159 46828
+2172 1159 52522
+2173 1159 2181
+2174 1159 55820
+2175 1159 14303
+2176 1159 18204
+2205 1159 23702
+2206 1159 57725
+2208 1159 27753
+2209 1159 10743
+2210 1159 57996
+2211 1159 21034
+2212 1159 52605
+2220 1159 5050
+2250 1159 1539
+2251 1159 57663
+2252 1159 31016
+2254 1159 8852
+2255 1159 19415
+2256 1159 55134
+2257 1159 55197
+2265 1159 37506
+2274 1159 4196
+2305 1159 9312
+2306 1159 62061
+2307 1159 46833
+2308 1159 48872
+2310 1159 38639
+2311 1159 9325
+2312 1159 38217
+2320 1159 27846
+2329 1159 4197
+2339 1159 4160
+2371 1159 22116
+2372 1159 21837
+2373 1159 7847
+2374 1159 41407
+2375 1159 26427
+2377 1159 53488
+2378 1159 18603
+2386 1159 57355
+2395 1159 43453
+2405 1159 4310
+2416 1159 15670
+2449 1159 7017
+2450 1159 49428
+2451 1159 43651
+2452 1159 5279
+2453 1159 42084
+2454 1159 10117
+2455 1159 35447
+2456 1159 9083
+2464 1159 64489
+2473 1159 60557
+2483 1159 48949
+2494 1159 4207
+2506 1159 24703
+3670 1159 27852657
+1059 1160 1
+1086 1160 65520
+1207 1160 65520
+1319 1160 27231
+1327 1160 38290
+1368 1160 57776
+1405 1160 28138
+1413 1160 17370
+1422 1160 25115
+1529 1160 31530
+1537 1160 33991
+1580 1160 28945
+1634 1160 19347
+1670 1160 40093
+1671 1160 8506
+1672 1160 45889
+1680 1160 62262
+1689 1160 64433
+1699 1160 4680
+1808 1160 44443
+1816 1160 21078
+1859 1160 25174
+1913 1160 5415
+1978 1160 15482
+2017 1160 60349
+2025 1160 33773
+2034 1160 28932
+2044 1160 23587
+2055 1160 12785
+2166 1160 58753
+2168 1160 55636
+2172 1160 12999
+2173 1160 16540
+2174 1160 35840
+2175 1160 16519
+2176 1160 26404
+2205 1160 64604
+2206 1160 55186
+2208 1160 59623
+2209 1160 61638
+2210 1160 17574
+2211 1160 24599
+2212 1160 42226
+2220 1160 12643
+2250 1160 32950
+2251 1160 4392
+2252 1160 4392
+2254 1160 47489
+2255 1160 43384
+2256 1160 15020
+2257 1160 12080
+2265 1160 28357
+2274 1160 31896
+2305 1160 32333
+2306 1160 30898
+2307 1160 30898
+2308 1160 28859
+2310 1160 22664
+2311 1160 18648
+2312 1160 23748
+2320 1160 62990
+2329 1160 36091
+2339 1160 22050
+2371 1160 18694
+2372 1160 20412
+2373 1160 20412
+2374 1160 52373
+2375 1160 40292
+2377 1160 40109
+2378 1160 18041
+2386 1160 12782
+2395 1160 60895
+2405 1160 41483
+2416 1160 61236
+2449 1160 23313
+2450 1160 23538
+2451 1160 23538
+2452 1160 61910
+2453 1160 18068
+2454 1160 4688
+2455 1160 29806
+2456 1160 25566
+2464 1160 27139
+2473 1160 28705
+2483 1160 10790
+2494 1160 45489
+2506 1160 24197
+3671 1160 27852657
+1060 1161 1
+1087 1161 65520
+1207 1161 1
+1319 1161 34307
+1327 1161 31214
+1368 1161 34307
+1405 1161 33746
+1413 1161 45016
+1422 1161 10709
+1529 1161 65288
+1537 1161 233
+1580 1161 65288
+1634 1161 60877
+1670 1161 20975
+1671 1161 57395
+1672 1161 23649
+1680 1161 2357
+1689 1161 36317
+1699 1161 51670
+1808 1161 19622
+1816 1161 45899
+1859 1161 19622
+1913 1161 14229
+1978 1161 23238
+2017 1161 59498
+2025 1161 13867
+2034 1161 12777
+2044 1161 954
+2055 1161 29386
+2166 1161 44211
+2168 1161 54682
+2173 1161 36185
+2174 1161 59926
+2175 1161 52517
+2176 1161 63356
+2205 1161 41763
+2206 1161 18488
+2208 1161 6846
+2209 1161 46555
+2210 1161 59516
+2211 1161 23196
+2212 1161 47123
+2220 1161 49288
+2250 1161 24038
+2251 1161 42233
+2252 1161 42233
+2254 1161 10964
+2255 1161 59141
+2256 1161 18909
+2257 1161 48775
+2265 1161 41713
+2274 1161 65290
+2305 1161 35294
+2306 1161 27483
+2307 1161 27483
+2308 1161 27483
+2310 1161 7581
+2311 1161 31348
+2312 1161 39521
+2320 1161 2333
+2329 1161 44525
+2339 1161 24970
+2371 1161 28202
+2372 1161 46320
+2373 1161 46320
+2374 1161 46320
+2375 1161 34478
+2377 1161 65020
+2378 1161 12521
+2386 1161 44591
+2395 1161 55425
+2405 1161 38869
+2416 1161 50547
+2449 1161 60946
+2450 1161 27698
+2451 1161 27698
+2452 1161 27698
+2453 1161 26328
+2454 1161 39713
+2455 1161 43933
+2456 1161 53490
+2464 1161 62709
+2473 1161 58467
+2483 1161 53775
+2494 1161 58844
+2506 1161 22134
+3672 1161 27852657
+1061 1162 1
+1182 1162 25422
+1218 1162 40099
+1319 1162 53473
+1327 1162 31279
+1368 1162 52179
+1405 1162 48685
+1413 1162 4741
+1422 1162 58182
+1529 1162 28457
+1537 1162 56295
+1580 1162 36632
+1634 1162 60771
+1670 1162 17400
+1671 1162 46353
+1672 1162 63189
+1680 1162 874
+1689 1162 18523
+1699 1162 15934
+1808 1162 19884
+1816 1162 42049
+1859 1162 9571
+1913 1162 22410
+1978 1162 51761
+2017 1162 1626
+2025 1162 4927
+2034 1162 35050
+2044 1162 23267
+2055 1162 52961
+2168 1162 16898
+2174 1162 16541
+2175 1162 37243
+2176 1162 21054
+2205 1162 32969
+2206 1162 32969
+2208 1162 29538
+2209 1162 29538
+2210 1162 51122
+2211 1162 39081
+2212 1162 55703
+2220 1162 61356
+2250 1162 53406
+2251 1162 53406
+2252 1162 53406
+2254 1162 64677
+2255 1162 6760
+2256 1162 24768
+2257 1162 14397
+2265 1162 13748
+2274 1162 42272
+2305 1162 8361
+2306 1162 8361
+2307 1162 8361
+2308 1162 8361
+2310 1162 36799
+2311 1162 60882
+2312 1162 10821
+2320 1162 48684
+2329 1162 15550
+2339 1162 21407
+2371 1162 32805
+2372 1162 32805
+2373 1162 32805
+2374 1162 32805
+2375 1162 32805
+2377 1162 14661
+2378 1162 34456
+2386 1162 57728
+2395 1162 27055
+2405 1162 63393
+2416 1162 31408
+2449 1162 53237
+2450 1162 53237
+2451 1162 53237
+2452 1162 53237
+2453 1162 53237
+2454 1162 55057
+2455 1162 46075
+2456 1162 13368
+2464 1162 57451
+2473 1162 32604
+2483 1162 41088
+2494 1162 58153
+2506 1162 58328
+3673 1162 27852657
+1062 1163 1
+1089 1163 65520
+1181 1163 25814
+1217 1163 39706
+1294 1163 174
+1326 1163 48597
+1367 1163 2815
+1404 1163 34895
+1412 1163 40384
+1421 1163 11754
+1502 1163 106
+1536 1163 48665
+1579 1163 54694
+1633 1163 38483
+1663 1163 36780
+1664 1163 45878
+1671 1163 10983
+1679 1163 38668
+1688 1163 60904
+1698 1163 34175
+1781 1163 17673
+1815 1163 56986
+1858 1163 48356
+1912 1163 49461
+1977 1163 58949
+2016 1163 30044
+2024 1163 16142
+2033 1163 32871
+2043 1163 19791
+2054 1163 60538
+2141 1163 8600
+2168 1163 52285
+2175 1163 13482
+2198 1163 56127
+2199 1163 56127
+2201 1163 4015
+2202 1163 4015
+2203 1163 4015
+2204 1163 12281
+2211 1163 59574
+2219 1163 29216
+2243 1163 2506
+2244 1163 2506
+2245 1163 2506
+2247 1163 55185
+2248 1163 55185
+2249 1163 13073
+2256 1163 18446
+2264 1163 64136
+2273 1163 64061
+2298 1163 64500
+2299 1163 64500
+2300 1163 64500
+2301 1163 64500
+2303 1163 21373
+2304 1163 34855
+2311 1163 7746
+2319 1163 16461
+2328 1163 61423
+2338 1163 6137
+2364 1163 21878
+2365 1163 21878
+2366 1163 21878
+2367 1163 21878
+2368 1163 21878
+2370 1163 51653
+2377 1163 14199
+2385 1163 35775
+2394 1163 50617
+2404 1163 33153
+2415 1163 18682
+2442 1163 47516
+2443 1163 47516
+2444 1163 47516
+2445 1163 47516
+2446 1163 47516
+2447 1163 47516
+2448 1163 42303
+2455 1163 53184
+2463 1163 52447
+2472 1163 26124
+2482 1163 3065
+2493 1163 8997
+2505 1163 41986
+3674 1163 27852657
+1063 1164 1
+2450 1164 65520
+3675 1164 27852657
+1064 1165 1
+1065 1165 1
+1067 1165 17
+1068 1165 16
+1070 1165 46548
+1071 1165 46490
+1072 1165 46474
+1076 1165 29885
+1077 1165 48932
+1081 1165 65409
+1086 1165 55164
+1087 1165 48008
+1088 1165 24285
+1089 1165 33766
+1090 1165 33766
+1175 1165 57514
+1176 1165 51777
+1178 1165 52527
+1179 1165 38943
+1180 1165 52902
+1181 1165 11676
+1182 1165 53262
+1210 1165 19496
+1320 1165 59357
+1321 1165 21849
+1322 1165 46971
+1324 1165 62659
+1325 1165 15826
+1326 1165 56656
+1327 1165 49636
+1360 1165 41680
+1405 1165 22184
+1530 1165 14291
+1531 1165 22310
+1532 1165 10633
+1533 1165 8922
+1535 1165 30804
+1536 1165 8261
+1537 1165 33371
+1572 1165 60129
+1617 1165 21199
+1672 1165 64536
+1809 1165 15794
+1810 1165 57276
+1811 1165 28436
+1812 1165 22054
+1813 1165 48503
+1815 1165 20262
+1816 1165 16692
+1851 1165 5209
+1896 1165 5612
+1951 1165 64150
+2017 1165 65135
+2169 1165 11169
+2170 1165 46373
+2171 1165 8068
+2172 1165 22517
+2173 1165 27670
+2174 1165 44575
+2175 1165 1160
+2176 1165 52260
+2212 1165 57031
+2257 1165 50066
+2312 1165 12125
+2378 1165 57004
+2456 1165 10435
+3676 1165 27852657
+1065 1166 1
+1068 1166 65520
+1072 1166 1
+1077 1166 65520
+1522 1166 59594
+1793 1166 23477
+1794 1166 21630
+1795 1166 21630
+1812 1166 17030
+1813 1166 64109
+1848 1166 23744
+1891 1166 54871
+1893 1166 58196
+1896 1166 40236
+1904 1166 40236
+1913 1166 40236
+1944 1166 1020
+1945 1166 31654
+1946 1166 32676
+1947 1166 14963
+1950 1166 51907
+1951 1166 24891
+1959 1166 24891
+1968 1166 65127
+1978 1166 24891
+2010 1166 1020
+2011 1166 31654
+2012 1166 32676
+2013 1166 14963
+2014 1166 30882
+2016 1166 51907
+2017 1166 24891
+2025 1166 24891
+2034 1166 65127
+2044 1166 49782
+2055 1166 24891
+2142 1166 13388
+2143 1166 13388
+2144 1166 2057
+2145 1166 7646
+2146 1166 59779
+2147 1166 63186
+2148 1166 19308
+2149 1166 42880
+2150 1166 48622
+2151 1166 38917
+2152 1166 60560
+2153 1166 59736
+2154 1166 36244
+2155 1166 53143
+2156 1166 10220
+2157 1166 31863
+2158 1166 56789
+2159 1166 52068
+2160 1166 37580
+2161 1166 49958
+2164 1166 47389
+2165 1166 5848
+2166 1166 24437
+2167 1166 10254
+2171 1166 29167
+2172 1166 10108
+2173 1166 16934
+2174 1166 28980
+2175 1166 62345
+2176 1166 62345
+2205 1166 3262
+2206 1166 17205
+2208 1166 54186
+2209 1166 47404
+2210 1166 60306
+2211 1166 60315
+2212 1166 51663
+2220 1166 54839
+2250 1166 6245
+2251 1166 20188
+2252 1166 26502
+2254 1166 4820
+2255 1166 8604
+2256 1166 50007
+2257 1166 20388
+2265 1166 26260
+2274 1166 36942
+2305 1166 56488
+2306 1166 7170
+2307 1166 12174
+2308 1166 40315
+2310 1166 63047
+2311 1166 33844
+2312 1166 11060
+2320 1166 61613
+2329 1166 65393
+2339 1166 28451
+2371 1166 30952
+2372 1166 2668
+2373 1166 60125
+2374 1166 47965
+2375 1166 29750
+2377 1166 19012
+2378 1166 8039
+2386 1166 11711
+2395 1166 50169
+2405 1166 24812
+2416 1166 61882
+2449 1166 5900
+2450 1166 48154
+2451 1166 40053
+2452 1166 55546
+2453 1166 21880
+2454 1166 1823
+2455 1166 23175
+2456 1166 39857
+2464 1166 30763
+2473 1166 47099
+2483 1166 38312
+2494 1166 21362
+2506 1166 9729
+3677 1166 27852657
+1066 1167 1
+1067 1167 65503
+1068 1167 65503
+1070 1167 25719
+1071 1167 45224
+1072 1167 45242
+1076 1167 31961
+1077 1167 52240
+1081 1167 15152
+1086 1167 42174
+1087 1167 60071
+1088 1167 30073
+1089 1167 52424
+1090 1167 52424
+1175 1167 43333
+1176 1167 18724
+1178 1167 19686
+1179 1167 48293
+1180 1167 45911
+1181 1167 18625
+1182 1167 37761
+1210 1167 50858
+1320 1167 4756
+1321 1167 20561
+1322 1167 54445
+1324 1167 54605
+1325 1167 59265
+1326 1167 65095
+1327 1167 3471
+1360 1167 30502
+1405 1167 45165
+1530 1167 59081
+1531 1167 50578
+1532 1167 28183
+1533 1167 21081
+1535 1167 62975
+1536 1167 18140
+1537 1167 56318
+1572 1167 9011
+1617 1167 62469
+1672 1167 17304
+1809 1167 4144
+1810 1167 1493
+1811 1167 6416
+1812 1167 3829
+1813 1167 63366
+1815 1167 59254
+1816 1167 54602
+1851 1167 56025
+1896 1167 7913
+1951 1167 54315
+2017 1167 37011
+2169 1167 20371
+2170 1167 21109
+2171 1167 49154
+2172 1167 64041
+2173 1167 5349
+2174 1167 10805
+2175 1167 48511
+2176 1167 40304
+2212 1167 21243
+2257 1167 58876
+2312 1167 65112
+2378 1167 58516
+2456 1167 33933
+3678 1167 27852657
+1067 1168 1
+1068 1168 1
+1072 1168 65520
+1077 1168 1
+1522 1168 41587
+1793 1168 46833
+1794 1168 40700
+1795 1168 40700
+1812 1168 53792
+1813 1168 40399
+1848 1168 57938
+1891 1168 21032
+1893 1168 58433
+1896 1168 61797
+1904 1168 61797
+1913 1168 61797
+1944 1168 48242
+1945 1168 44121
+1946 1168 10959
+1947 1168 51784
+1950 1168 37977
+1951 1168 18812
+1959 1168 18812
+1968 1168 15088
+1978 1168 18812
+2010 1168 48242
+2011 1168 44121
+2012 1168 10959
+2013 1168 51784
+2014 1168 22069
+2016 1168 37977
+2017 1168 18812
+2025 1168 18812
+2034 1168 15088
+2044 1168 37624
+2055 1168 18812
+2142 1168 8001
+2143 1168 8001
+2144 1168 1713
+2145 1168 44955
+2146 1168 36954
+2147 1168 61547
+2148 1168 1783
+2149 1168 53048
+2150 1168 16094
+2151 1168 20295
+2152 1168 26052
+2153 1168 55202
+2154 1168 41887
+2155 1168 25793
+2156 1168 48992
+2157 1168 54749
+2158 1168 4054
+2159 1168 50690
+2160 1168 10328
+2161 1168 50056
+2164 1168 2178
+2165 1168 11340
+2166 1168 40496
+2167 1168 27918
+2171 1168 25378
+2172 1168 4673
+2173 1168 1188
+2174 1168 64443
+2175 1168 1503
+2176 1168 1503
+2205 1168 39211
+2206 1168 46650
+2208 1168 5557
+2209 1168 39393
+2210 1168 36276
+2211 1168 45181
+2212 1168 27794
+2220 1168 26291
+2250 1168 45238
+2251 1168 52677
+2252 1168 34866
+2254 1168 58215
+2255 1168 34271
+2256 1168 19825
+2257 1168 13412
+2265 1168 17551
+2274 1168 56781
+2305 1168 30279
+2306 1168 40742
+2307 1168 14800
+2308 1168 34845
+2310 1168 39057
+2311 1168 51124
+2312 1168 51402
+2320 1168 57705
+2329 1168 43551
+2339 1168 52291
+2371 1168 56817
+2372 1168 5992
+2373 1168 29305
+2374 1168 32035
+2375 1168 65310
+2377 1168 45350
+2378 1168 39590
+2386 1168 32365
+2395 1168 16746
+2405 1168 40191
+2416 1168 53421
+2449 1168 8454
+2450 1168 25840
+2451 1168 15791
+2452 1168 25516
+2453 1168 17301
+2454 1168 10375
+2455 1168 26026
+2456 1168 8986
+2464 1168 42370
+2473 1168 41387
+2483 1168 51509
+2494 1168 22168
+2506 1168 37625
+3679 1168 27852657
+1068 1169 1
+1323 1169 53696
+1364 1169 56319
+1401 1169 29992
+1409 1169 55032
+1418 1169 64234
+1533 1169 40387
+1576 1169 9894
+1630 1169 19956
+1661 1169 19411
+1668 1169 41046
+1676 1169 50716
+1685 1169 4144
+1695 1169 48422
+1812 1169 49468
+1855 1169 18098
+1909 1169 52392
+1974 1169 27416
+2021 1169 57582
+2030 1169 32856
+2040 1169 9947
+2051 1169 30953
+2127 1169 60295
+2150 1169 55144
+2154 1169 27352
+2159 1169 22746
+2165 1169 11115
+2172 1169 60667
+2183 1169 45657
+2184 1169 46543
+2186 1169 4381
+2190 1169 46699
+2195 1169 7949
+2201 1169 16240
+2208 1169 23510
+2216 1169 58609
+2228 1169 60379
+2229 1169 9775
+2230 1169 9775
+2235 1169 36276
+2240 1169 16890
+2246 1169 59726
+2253 1169 18418
+2261 1169 28237
+2270 1169 35078
+2283 1169 41569
+2284 1169 6112
+2285 1169 6112
+2286 1169 13899
+2295 1169 53893
+2301 1169 59826
+2308 1169 17273
+2316 1169 40150
+2325 1169 50053
+2335 1169 38679
+2349 1169 52977
+2350 1169 59995
+2351 1169 59995
+2352 1169 30176
+2356 1169 26643
+2367 1169 5833
+2374 1169 49812
+2382 1169 52336
+2391 1169 32276
+2401 1169 26980
+2412 1169 19360
+2427 1169 16012
+2428 1169 48967
+2429 1169 48967
+2430 1169 54282
+2434 1169 11691
+2439 1169 43009
+2445 1169 10524
+2452 1169 64391
+2460 1169 15403
+2469 1169 20355
+2479 1169 62671
+2490 1169 23934
+2502 1169 53866
+3680 1169 27852657
+1069 1170 1
+1070 1170 53654
+1071 1170 14438
+1072 1170 14438
+1076 1170 64852
+1077 1170 50414
+1081 1170 64977
+1086 1170 59053
+1087 1170 41452
+1088 1170 8401
+1089 1170 16452
+1090 1170 16452
+1175 1170 3505
+1176 1170 25738
+1178 1170 33357
+1179 1170 51901
+1180 1170 10055
+1181 1170 25280
+1182 1170 16248
+1210 1170 65317
+1320 1170 26568
+1321 1170 22309
+1322 1170 8838
+1324 1170 674
+1325 1170 25071
+1326 1170 59514
+1327 1170 15010
+1360 1170 37960
+1405 1170 38164
+1530 1170 35901
+1531 1170 34153
+1532 1170 62229
+1533 1170 60533
+1535 1170 47385
+1536 1170 38492
+1537 1170 52609
+1572 1170 63135
+1617 1170 49623
+1672 1170 11459
+1809 1170 21027
+1810 1170 37123
+1811 1170 9275
+1812 1170 6186
+1813 1170 29179
+1815 1170 18750
+1816 1170 14527
+1851 1170 43850
+1896 1170 26416
+1951 1170 59818
+2017 1170 48359
+2169 1170 10380
+2170 1170 7736
+2171 1170 15446
+2172 1170 54712
+2173 1170 43794
+2174 1170 7095
+2175 1170 30560
+2176 1170 13450
+2212 1170 17069
+2257 1170 6900
+2312 1170 23179
+2378 1170 38175
+2456 1170 64846
+3681 1170 27852657
+1070 1171 1
+1071 1171 1
+1072 1171 1
+1076 1171 1
+1166 1171 23828
+1167 1171 23828
+1612 1171 16354
+1667 1171 16354
+1668 1171 16354
+1806 1171 11917
+1813 1171 11916
+1848 1171 11916
+1891 1171 35691
+1893 1171 38709
+1946 1171 22320
+1947 1171 22320
+2012 1171 5966
+2013 1171 5966
+2014 1171 17882
+2166 1171 11175
+2167 1171 5981
+2171 1171 8183
+2172 1171 8183
+2173 1171 56213
+2174 1171 42830
+2208 1171 14143
+2209 1171 36858
+2210 1171 51767
+2252 1171 26075
+2254 1171 62158
+2255 1171 17512
+2307 1171 386
+2308 1171 386
+2310 1171 19723
+2373 1171 14529
+2374 1171 14529
+2375 1171 55833
+2451 1171 19916
+2452 1171 19916
+2453 1171 7445
+2454 1171 59944
+2455 1171 11917
+2456 1171 36484
+2464 1171 26060
+2473 1171 4651
+2483 1171 42509
+2494 1171 58803
+2506 1171 27752
+3682 1171 27852657
+1071 1172 1
+1072 1172 1
+1077 1172 65520
+1522 1172 55212
+1793 1172 9257
+1794 1172 5441
+1795 1172 5441
+1812 1172 21906
+1813 1172 18097
+1848 1172 5163
+1891 1172 58405
+1893 1172 21851
+1896 1172 14809
+1904 1172 14809
+1913 1172 14809
+1944 1172 37534
+1945 1172 61577
+1946 1172 15421
+1947 1172 24989
+1950 1172 23184
+1951 1172 8105
+1959 1172 8105
+1968 1172 22914
+1978 1172 8105
+2010 1172 37534
+2011 1172 61577
+2012 1172 15421
+2013 1172 24989
+2014 1172 37539
+2016 1172 23184
+2017 1172 8105
+2025 1172 8105
+2034 1172 22914
+2044 1172 16210
+2055 1172 8105
+2142 1172 16273
+2143 1172 16273
+2144 1172 59093
+2145 1172 51647
+2146 1172 35374
+2147 1172 31655
+2148 1172 64648
+2149 1172 35434
+2150 1172 60
+2151 1172 31655
+2152 1172 64648
+2153 1172 36289
+2154 1172 47286
+2155 1172 47226
+2156 1172 31655
+2157 1172 64648
+2158 1172 19847
+2159 1172 30612
+2160 1172 59395
+2161 1172 12169
+2164 1172 12051
+2165 1172 59324
+2166 1172 12114
+2167 1172 20533
+2171 1172 19376
+2172 1172 46529
+2173 1172 41936
+2174 1172 53201
+2175 1172 1866
+2176 1172 1866
+2205 1172 16665
+2206 1172 33431
+2208 1172 44807
+2209 1172 8545
+2210 1172 12087
+2211 1172 54878
+2212 1172 49632
+2220 1172 47766
+2250 1172 19729
+2251 1172 36495
+2252 1172 17460
+2254 1172 22235
+2255 1172 35955
+2256 1172 43835
+2257 1172 50651
+2265 1172 19517
+2274 1172 37272
+2305 1172 35827
+2306 1172 64030
+2307 1172 40395
+2308 1172 50623
+2310 1172 17022
+2311 1172 51897
+2312 1172 37094
+2320 1172 37966
+2329 1172 51233
+2339 1172 13961
+2371 1172 29510
+2372 1172 51315
+2373 1172 2381
+2374 1172 52494
+2375 1172 55386
+2377 1172 35772
+2378 1172 15301
+2386 1172 18776
+2395 1172 37330
+2405 1172 24868
+2416 1172 10907
+2449 1172 45804
+2450 1172 41614
+2451 1172 48096
+2452 1172 26587
+2453 1172 33312
+2454 1172 12324
+2455 1172 40963
+2456 1172 35468
+2464 1172 22088
+2473 1172 14722
+2483 1172 29846
+2494 1172 55440
+2506 1172 64337
+3683 1172 27852657
+1072 1173 1
+1324 1173 31297
+1365 1173 24706
+1402 1173 7915
+1410 1173 60674
+1419 1173 35968
+1534 1173 58147
+1577 1173 25199
+1631 1173 37141
+1662 1173 2043
+1669 1173 26774
+1677 1173 55059
+1686 1173 47831
+1696 1173 46658
+1813 1173 285
+1856 1173 16939
+1910 1173 53889
+1975 1173 32237
+2022 1173 547
+2031 1173 5921
+2041 1173 62893
+2052 1173 11793
+2128 1173 38973
+2155 1173 27290
+2160 1173 59243
+2166 1173 64740
+2173 1173 15199
+2187 1173 49296
+2188 1173 56265
+2190 1173 26992
+2191 1173 1811
+2196 1173 51482
+2202 1173 55438
+2209 1173 41260
+2217 1173 64516
+2232 1173 24016
+2233 1173 14078
+2234 1173 14078
+2236 1173 53625
+2241 1173 34407
+2247 1173 31338
+2254 1173 65247
+2262 1173 28114
+2271 1173 23571
+2287 1173 41362
+2288 1173 12794
+2289 1173 12794
+2290 1173 12794
+2296 1173 44026
+2302 1173 64155
+2309 1173 17202
+2317 1173 60743
+2326 1173 22902
+2336 1173 46518
+2353 1173 56637
+2354 1173 21026
+2355 1173 21026
+2356 1173 21026
+2357 1173 32910
+2368 1173 42548
+2375 1173 55098
+2383 1173 24461
+2392 1173 54115
+2402 1173 10166
+2413 1173 21567
+2431 1173 5068
+2432 1173 21647
+2433 1173 21647
+2434 1173 21647
+2435 1173 52446
+2440 1173 19333
+2446 1173 17961
+2453 1173 1072
+2461 1173 10805
+2470 1173 986
+2480 1173 33937
+2491 1173 63163
+2503 1173 11486
+3684 1173 27852657
+1073 1174 1
+1076 1174 43681
+1077 1174 43681
+1081 1174 32684
+1087 1174 17667
+1088 1174 20192
+1089 1174 47593
+1090 1174 47593
+1175 1174 63369
+1176 1174 32744
+1178 1174 56805
+1179 1174 26574
+1180 1174 40407
+1181 1174 42575
+1182 1174 53785
+1210 1174 6192
+1320 1174 37183
+1321 1174 42081
+1322 1174 2199
+1324 1174 49102
+1325 1174 64691
+1326 1174 14158
+1327 1174 39078
+1360 1174 61196
+1405 1174 55004
+1530 1174 13123
+1531 1174 25382
+1532 1174 46901
+1533 1174 46901
+1535 1174 34541
+1536 1174 6347
+1537 1174 41612
+1572 1174 10230
+1617 1174 5683
+1672 1174 16200
+1809 1174 18970
+1810 1174 53779
+1811 1174 59094
+1812 1174 59094
+1813 1174 29515
+1815 1174 43811
+1816 1174 58442
+1851 1174 37643
+1896 1174 17629
+1951 1174 29843
+2017 1174 13643
+2169 1174 10491
+2170 1174 62025
+2171 1174 42653
+2172 1174 42653
+2173 1174 47190
+2174 1174 56714
+2175 1174 54873
+2176 1174 8202
+2212 1174 56790
+2257 1174 63400
+2312 1174 22681
+2378 1174 38041
+2456 1174 39937
+3685 1174 27852657
+1074 1175 1
+1075 1175 1
+1076 1175 1
+1077 1175 1
+1612 1175 49149
+1667 1175 49149
+1668 1175 49149
+1806 1175 32759
+1813 1175 32759
+1848 1175 32759
+1891 1175 15
+1893 1175 32762
+1946 1175 49146
+1947 1175 49146
+2012 1175 65518
+2013 1175 65518
+2014 1175 32756
+2166 1175 28663
+2167 1175 65512
+2171 1175 6
+2172 1175 6
+2173 1175 28669
+2174 1175 8186
+2208 1175 40955
+2209 1175 4097
+2210 1175 12280
+2252 1175 57326
+2254 1175 36858
+2255 1175 45041
+2307 1175 20471
+2308 1175 20471
+2310 1175 36858
+2373 1175 12282
+2374 1175 12282
+2375 1175 24573
+2451 1175 14333
+2452 1175 14333
+2453 1175 28666
+2454 1175 53234
+2455 1175 32759
+2456 1175 32761
+2464 1175 59379
+2473 1175 6144
+2483 1175 9222
+2494 1175 36861
+2506 1175 54257
+3686 1175 27852657
+1075 1176 1
+1522 1176 41536
+1793 1176 29263
+1794 1176 60074
+1795 1176 60074
+1812 1176 26137
+1813 1176 21205
+1848 1176 55093
+1891 1176 31258
+1893 1176 55487
+1896 1176 42760
+1904 1176 42760
+1913 1176 42760
+1944 1176 18582
+1945 1176 62127
+1946 1176 52955
+1947 1176 11828
+1950 1176 35492
+1951 1176 23527
+1959 1176 23527
+1968 1176 766
+1978 1176 23527
+2010 1176 18582
+2011 1176 62127
+2012 1176 52955
+2013 1176 11828
+2014 1176 20798
+2016 1176 35492
+2017 1176 23527
+2025 1176 23527
+2034 1176 766
+2044 1176 47054
+2055 1176 23527
+2142 1176 55572
+2143 1176 55572
+2144 1176 55253
+2145 1176 48238
+2146 1176 58187
+2147 1176 8086
+2148 1176 1098
+2149 1176 52887
+2150 1176 60221
+2151 1176 8086
+2152 1176 1098
+2153 1176 23802
+2154 1176 18526
+2155 1176 23826
+2156 1176 8086
+2157 1176 1098
+2158 1176 18631
+2159 1176 7441
+2160 1176 19491
+2161 1176 61186
+2164 1176 22898
+2165 1176 32030
+2166 1176 37707
+2167 1176 42630
+2171 1176 25535
+2172 1176 63280
+2173 1176 2529
+2174 1176 27880
+2175 1176 11978
+2176 1176 11978
+2205 1176 2135
+2206 1176 52853
+2208 1176 33330
+2209 1176 23380
+2210 1176 19554
+2211 1176 29180
+2212 1176 28506
+2220 1176 16528
+2250 1176 28122
+2251 1176 13319
+2252 1176 43677
+2254 1176 55437
+2255 1176 28901
+2256 1176 22405
+2257 1176 20283
+2265 1176 58217
+2274 1176 41689
+2305 1176 60305
+2306 1176 10639
+2307 1176 41201
+2308 1176 54223
+2310 1176 57951
+2311 1176 38794
+2312 1176 34090
+2320 1176 35385
+2329 1176 10598
+2339 1176 34430
+2371 1176 55726
+2372 1176 28028
+2373 1176 1482
+2374 1176 60089
+2375 1176 45381
+2377 1176 44699
+2378 1176 42936
+2386 1176 25879
+2395 1176 21883
+2405 1176 54904
+2416 1176 20474
+2449 1176 24564
+2450 1176 10287
+2451 1176 40624
+2452 1176 44946
+2453 1176 32865
+2454 1176 52541
+2455 1176 65157
+2456 1176 64256
+2464 1176 9578
+2473 1176 39704
+2483 1176 34590
+2494 1176 39011
+2506 1176 32766
+3687 1176 27852657
+1076 1177 1
+1077 1177 1
+1522 1177 37874
+1793 1177 10285
+1794 1177 60982
+1795 1177 60982
+1813 1177 48012
+1848 1177 7
+1891 1177 16466
+1893 1177 4944
+1896 1177 27117
+1904 1177 27117
+1913 1177 27117
+1944 1177 43950
+1945 1177 36203
+1946 1177 13879
+1947 1177 10813
+1950 1177 35124
+1951 1177 14645
+1959 1177 14645
+1968 1177 41762
+1978 1177 14645
+2010 1177 43950
+2011 1177 36203
+2012 1177 13879
+2013 1177 10813
+2014 1177 56310
+2016 1177 35124
+2017 1177 14645
+2025 1177 14645
+2034 1177 41762
+2044 1177 29290
+2055 1177 14645
+2142 1177 4741
+2143 1177 4741
+2144 1177 1996
+2145 1177 5164
+2146 1177 423
+2147 1177 24316
+2148 1177 51985
+2149 1177 41148
+2150 1177 40725
+2151 1177 24316
+2152 1177 51985
+2153 1177 57691
+2154 1177 60049
+2155 1177 19324
+2156 1177 24316
+2157 1177 51985
+2158 1177 632
+2159 1177 12911
+2160 1177 33379
+2161 1177 14055
+2164 1177 38326
+2165 1177 14820
+2166 1177 22396
+2167 1177 42532
+2171 1177 27958
+2172 1177 4452
+2173 1177 33857
+2174 1177 39066
+2175 1177 39708
+2176 1177 39708
+2205 1177 19721
+2206 1177 51786
+2208 1177 20678
+2209 1177 19975
+2210 1177 63906
+2211 1177 32694
+2212 1177 65096
+2220 1177 25388
+2250 1177 50819
+2251 1177 17363
+2252 1177 18135
+2254 1177 28196
+2255 1177 14277
+2256 1177 24120
+2257 1177 64847
+2265 1177 34752
+2274 1177 9364
+2305 1177 19026
+2306 1177 51529
+2307 1177 31753
+2308 1177 8233
+2310 1177 56417
+2311 1177 38301
+2312 1177 2799
+2320 1177 61686
+2329 1177 60121
+2339 1177 50757
+2371 1177 54221
+2372 1177 13716
+2373 1177 61873
+2374 1177 9021
+2375 1177 9274
+2377 1177 48436
+2378 1177 59776
+2386 1177 48495
+2395 1177 46070
+2405 1177 34298
+2416 1177 49062
+2449 1177 32851
+2450 1177 8421
+2451 1177 28275
+2452 1177 65338
+2453 1177 10629
+2454 1177 23132
+2455 1177 8217
+2456 1177 33855
+2464 1177 48209
+2473 1177 12299
+2483 1177 58274
+2494 1177 18511
+2506 1177 1930
+3688 1177 27852657
+1077 1178 1
+1167 1178 11054
+1312 1178 2581
+2160 1178 60281
+2161 1178 31692
+2166 1178 60533
+2173 1178 52815
+2174 1178 22206
+2175 1178 27514
+2176 1178 27514
+2205 1178 36739
+2206 1178 13864
+2208 1178 31241
+2209 1178 6264
+2210 1178 6349
+2211 1178 41469
+2212 1178 38479
+2220 1178 10965
+2250 1178 22859
+2251 1178 25751
+2252 1178 25751
+2254 1178 43757
+2255 1178 61734
+2256 1178 42359
+2257 1178 23695
+2265 1178 11967
+2274 1178 1002
+2305 1178 27673
+2306 1178 37872
+2307 1178 37872
+2308 1178 37872
+2310 1178 8866
+2311 1178 28285
+2312 1178 880
+2320 1178 39746
+2329 1178 27386
+2339 1178 26384
+2371 1178 5099
+2372 1178 31562
+2373 1178 31562
+2374 1178 31562
+2375 1178 53481
+2377 1178 8400
+2378 1178 41876
+2386 1178 25263
+2395 1178 26144
+2405 1178 4767
+2416 1178 43904
+2449 1178 22260
+2450 1178 23857
+2451 1178 23857
+2452 1178 23857
+2453 1178 40169
+2454 1178 54272
+2455 1178 12977
+2456 1178 32897
+2464 1178 32922
+2473 1178 34267
+2483 1178 10488
+2494 1178 60348
+2506 1178 9628
+3689 1178 27852657
+1078 1179 1
+1079 1179 1
+1080 1179 1
+1081 1179 1
+1082 1179 1
+1085 1179 1
+1086 1179 1
+1087 1179 1
+1088 1179 1
+1178 1179 1
+1179 1179 1
+1180 1179 1
+1324 1179 1
+1325 1179 1
+1535 1179 1
+2175 1179 32761
+2176 1179 32761
+2212 1179 32761
+2257 1179 32761
+2312 1179 32761
+2378 1179 32761
+2456 1179 24573
+3690 1179 27852657
+1079 1180 1
+1080 1180 1
+1081 1180 1
+1082 1180 1
+1085 1180 1
+1086 1180 1
+1087 1180 1
+1088 1180 1
+1178 1180 1
+1179 1180 1
+1180 1180 1
+1324 1180 1
+1325 1180 1
+1535 1180 1
+2175 1180 32761
+2176 1180 32761
+2212 1180 32761
+2257 1180 32761
+2312 1180 32761
+2378 1180 32761
+2455 1180 1
+2456 1180 24573
+3691 1180 27852657
+1080 1181 1
+1081 1181 1
+1082 1181 1
+1086 1181 1
+1087 1181 1
+1088 1181 1
+1206 1181 65520
+1207 1181 65520
+1208 1181 65520
+1402 1181 1
+1403 1181 1
+1533 1181 30031
+1571 1181 48674
+1572 1181 48674
+1580 1181 48674
+1612 1181 35491
+1615 1181 1
+1616 1181 48674
+1617 1181 48674
+1625 1181 31827
+1634 1181 48674
+1667 1181 35491
+1671 1181 48674
+1672 1181 48674
+1680 1181 31827
+1689 1181 31827
+1699 1181 48674
+1806 1181 20475
+1812 1181 30031
+1813 1181 50506
+1815 1181 24337
+1816 1181 24337
+1848 1181 20475
+1850 1181 7490
+1851 1181 31827
+1859 1181 7490
+1891 1181 40951
+1893 1181 39585
+1895 1181 7490
+1896 1181 14980
+1904 1181 63654
+1913 1181 56164
+1946 1181 10920
+1947 1181 20474
+1950 1181 14980
+1951 1181 22470
+1959 1181 54297
+1968 1181 37450
+1978 1181 46807
+2012 1181 40950
+2013 1181 20474
+2014 1181 40949
+2016 1181 31827
+2017 1181 39317
+2025 1181 22470
+2034 1181 5623
+2044 1181 13113
+2055 1181 14980
+2165 1181 59890
+2166 1181 35831
+2167 1181 35831
+2171 1181 8873
+2172 1181 16210
+2173 1181 57672
+2174 1181 57672
+2175 1181 31358
+2176 1181 31358
+2208 1181 28040
+2209 1181 3981
+2210 1181 3981
+2211 1181 58506
+2212 1181 16154
+2220 1181 50317
+2252 1181 17403
+2254 1181 7166
+2255 1181 7166
+2256 1181 58506
+2257 1181 37918
+2265 1181 24117
+2274 1181 39321
+2307 1181 48116
+2308 1181 62618
+2310 1181 46752
+2311 1181 35108
+2312 1181 14520
+2320 1181 3292
+2329 1181 33245
+2339 1181 59445
+2373 1181 18939
+2374 1181 8701
+2375 1181 35832
+2377 1181 14516
+2378 1181 21071
+2386 1181 9843
+2395 1181 4224
+2405 1181 5159
+2416 1181 11235
+2451 1181 256
+2452 1181 5375
+2453 1181 5631
+2454 1181 5631
+2455 1181 5618
+2456 1181 17139
+2464 1181 52293
+2473 1181 48811
+2483 1181 39815
+2494 1181 40755
+2506 1181 29434
+3692 1181 27852657
+1081 1182 1
+1087 1182 1
+1207 1182 65520
+1402 1182 1
+1813 1182 20185
+1848 1182 2514
+1891 1182 14338
+1893 1182 53369
+1896 1182 42459
+1904 1182 42459
+1913 1182 42459
+1944 1182 7268
+1945 1182 7268
+1946 1182 21606
+1947 1182 21606
+1950 1182 13100
+1951 1182 52842
+1959 1182 52842
+1968 1182 29780
+1978 1182 52842
+2010 1182 7268
+2011 1182 7268
+2012 1182 21606
+2013 1182 21606
+2014 1182 24122
+2016 1182 13100
+2017 1182 52842
+2025 1182 52842
+2034 1182 29780
+2044 1182 40163
+2055 1182 52842
+2166 1182 36849
+2167 1182 55489
+2171 1182 12548
+2172 1182 12548
+2173 1182 53492
+2174 1182 62885
+2175 1182 28080
+2176 1182 28080
+2205 1182 11102
+2206 1182 11102
+2208 1182 29896
+2209 1182 43919
+2210 1182 26731
+2211 1182 20754
+2212 1182 53698
+2220 1182 25618
+2250 1182 3712
+2251 1182 3712
+2252 1182 10631
+2254 1182 36353
+2255 1182 42819
+2256 1182 6440
+2257 1182 58531
+2265 1182 27566
+2274 1182 1948
+2305 1182 49395
+2306 1182 49395
+2307 1182 56314
+2308 1182 56314
+2310 1182 18945
+2311 1182 19519
+2312 1182 35251
+2320 1182 60078
+2329 1182 45298
+2339 1182 43350
+2371 1182 8299
+2372 1182 8299
+2373 1182 15343
+2374 1182 15343
+2375 1182 9807
+2377 1182 60488
+2378 1182 35904
+2386 1182 39504
+2395 1182 50726
+2405 1182 25432
+2416 1182 47603
+2449 1182 48596
+2450 1182 48596
+2451 1182 59537
+2452 1182 59537
+2453 1182 55261
+2454 1182 65110
+2455 1182 58869
+2456 1182 39101
+2464 1182 53024
+2473 1182 30058
+2483 1182 36066
+2494 1182 17353
+2506 1182 16157
+3693 1182 27852657
+1082 1183 1
+1088 1183 1
+1208 1183 65520
+1403 1183 1
+1670 1183 65520
+1893 1183 21389
+1896 1183 28284
+1904 1183 28284
+1913 1183 28284
+1944 1183 11510
+1945 1183 11510
+1946 1183 11510
+1947 1183 11510
+1950 1183 56660
+1951 1183 45147
+1959 1183 45147
+1968 1183 7910
+1978 1183 45147
+2010 1183 11510
+2011 1183 11510
+2012 1183 11510
+2013 1183 11510
+2014 1183 11510
+2016 1183 56660
+2017 1183 45147
+2025 1183 45147
+2034 1183 7910
+2044 1183 24773
+2055 1183 45147
+2167 1183 21842
+2171 1183 53137
+2172 1183 53137
+2173 1183 53137
+2174 1183 40771
+2175 1183 1076
+2176 1183 1076
+2205 1183 9850
+2206 1183 9850
+2208 1183 21733
+2209 1183 21733
+2210 1183 54135
+2211 1183 8414
+2212 1183 26240
+2220 1183 25164
+2250 1183 62177
+2251 1183 62177
+2252 1183 62177
+2254 1183 33910
+2255 1183 16617
+2256 1183 3866
+2257 1183 10964
+2265 1183 35411
+2274 1183 10247
+2305 1183 17979
+2306 1183 17979
+2307 1183 17979
+2308 1183 17979
+2310 1183 60666
+2311 1183 16221
+2312 1183 24134
+2320 1183 45880
+2329 1183 61227
+2339 1183 50980
+2371 1183 38924
+2372 1183 38924
+2373 1183 38924
+2374 1183 38924
+2375 1183 38924
+2377 1183 63178
+2378 1183 38355
+2386 1183 56441
+2395 1183 8285
+2405 1183 33282
+2416 1183 47823
+2449 1183 8196
+2450 1183 8196
+2451 1183 8196
+2452 1183 8196
+2453 1183 8196
+2454 1183 26396
+2455 1183 36642
+2456 1183 45944
+2464 1183 18919
+2473 1183 38980
+2483 1183 26601
+2494 1183 33991
+2506 1183 50811
+3694 1183 27852657
+1083 1184 1
+1090 1184 65520
+1182 1184 25814
+1218 1184 39706
+1319 1184 174
+1327 1184 48597
+1368 1184 2815
+1405 1184 34895
+1413 1184 40384
+1422 1184 11754
+1529 1184 106
+1537 1184 48665
+1580 1184 54694
+1634 1184 38483
+1670 1184 36780
+1671 1184 45878
+1672 1184 10983
+1680 1184 38668
+1689 1184 60904
+1699 1184 34175
+1808 1184 17673
+1816 1184 56986
+1859 1184 48356
+1913 1184 49461
+1978 1184 58949
+2017 1184 30044
+2025 1184 16142
+2034 1184 32871
+2044 1184 19791
+2055 1184 60538
+2168 1184 8600
+2175 1184 52285
+2176 1184 13482
+2205 1184 56127
+2206 1184 56127
+2208 1184 4015
+2209 1184 4015
+2210 1184 4015
+2211 1184 12281
+2212 1184 59574
+2220 1184 29216
+2250 1184 2506
+2251 1184 2506
+2252 1184 2506
+2254 1184 55185
+2255 1184 55185
+2256 1184 13073
+2257 1184 18446
+2265 1184 64136
+2274 1184 64061
+2305 1184 64500
+2306 1184 64500
+2307 1184 64500
+2308 1184 64500
+2310 1184 21373
+2311 1184 34855
+2312 1184 7746
+2320 1184 16461
+2329 1184 61423
+2339 1184 6137
+2371 1184 21878
+2372 1184 21878
+2373 1184 21878
+2374 1184 21878
+2375 1184 21878
+2377 1184 51653
+2378 1184 14199
+2386 1184 35775
+2395 1184 50617
+2405 1184 33153
+2416 1184 18682
+2449 1184 47516
+2450 1184 47516
+2451 1184 47516
+2452 1184 47516
+2453 1184 47516
+2454 1184 47516
+2455 1184 42303
+2456 1184 53184
+2464 1184 52447
+2473 1184 26124
+2483 1184 3065
+2494 1184 8997
+2506 1184 41986
+3695 1184 27852657
+1084 1185 1
+2456 1185 65520
+3696 1185 27852657
+1085 1186 1
+1086 1186 1
+1087 1186 1
+1182 1186 39112
+1218 1186 26409
+1327 1186 18065
+1368 1186 50631
+1405 1186 12209
+1413 1186 23695
+1422 1186 64994
+1537 1186 18065
+1580 1186 29937
+1634 1186 2151
+1670 1186 61001
+1671 1186 49039
+1672 1186 36830
+1680 1186 1456
+1689 1186 57710
+1699 1186 55032
+1816 1186 64660
+1859 1186 64625
+1913 1186 55994
+1978 1186 58388
+2017 1186 13112
+2025 1186 48135
+2034 1186 43950
+2044 1186 6927
+2055 1186 3571
+2174 1186 31718
+2175 1186 41530
+2176 1186 26738
+2205 1186 6933
+2206 1186 6933
+2208 1186 49317
+2209 1186 49317
+2210 1186 40025
+2211 1186 12050
+2212 1186 4102
+2220 1186 13534
+2250 1186 35061
+2251 1186 35061
+2252 1186 35061
+2254 1186 40187
+2255 1186 24831
+2256 1186 59044
+2257 1186 6564
+2265 1186 54488
+2274 1186 18133
+2305 1186 35732
+2306 1186 35732
+2307 1186 35732
+2308 1186 35732
+2310 1186 2136
+2311 1186 38290
+2312 1186 19917
+2320 1186 58462
+2329 1186 8819
+2339 1186 51554
+2371 1186 43432
+2372 1186 43432
+2373 1186 43432
+2374 1186 43432
+2375 1186 43432
+2377 1186 15430
+2378 1186 17035
+2386 1186 23508
+2395 1186 16204
+2405 1186 18614
+2416 1186 4128
+2449 1186 1159
+2450 1186 1159
+2451 1186 1159
+2452 1186 1159
+2453 1186 1159
+2454 1186 1159
+2455 1186 15070
+2456 1186 24444
+2464 1186 41295
+2473 1186 11049
+2483 1186 16371
+2494 1186 43372
+2506 1186 19751
+3697 1186 27852657
+1086 1187 1
+1327 1187 53696
+1368 1187 56319
+1405 1187 29992
+1413 1187 55032
+1422 1187 64234
+1537 1187 40387
+1580 1187 9894
+1634 1187 19956
+1671 1187 19411
+1672 1187 41046
+1680 1187 50716
+1689 1187 4144
+1699 1187 48422
+1816 1187 49468
+1859 1187 18098
+1913 1187 52392
+1978 1187 27416
+2025 1187 57582
+2034 1187 32856
+2044 1187 9947
+2055 1187 30953
+2166 1187 60295
+2172 1187 55144
+2173 1187 27352
+2174 1187 22746
+2175 1187 11115
+2176 1187 60667
+2205 1187 45657
+2206 1187 46543
+2208 1187 4381
+2209 1187 46699
+2210 1187 7949
+2211 1187 16240
+2212 1187 23510
+2220 1187 58609
+2250 1187 60379
+2251 1187 9775
+2252 1187 9775
+2254 1187 36276
+2255 1187 16890
+2256 1187 59726
+2257 1187 18418
+2265 1187 28237
+2274 1187 35078
+2305 1187 41569
+2306 1187 6112
+2307 1187 6112
+2308 1187 13899
+2310 1187 53893
+2311 1187 59826
+2312 1187 17273
+2320 1187 40150
+2329 1187 50053
+2339 1187 38679
+2371 1187 52977
+2372 1187 59995
+2373 1187 59995
+2374 1187 30176
+2375 1187 26643
+2377 1187 5833
+2378 1187 49812
+2386 1187 52336
+2395 1187 32276
+2405 1187 26980
+2416 1187 19360
+2449 1187 16012
+2450 1187 48967
+2451 1187 48967
+2452 1187 54282
+2453 1187 11691
+2454 1187 43009
+2455 1187 10524
+2456 1187 64391
+2464 1187 15403
+2473 1187 20355
+2483 1187 62671
+2494 1187 23934
+2506 1187 53866
+3698 1187 27852657
+1087 1188 1
+1327 1188 31297
+1368 1188 24706
+1405 1188 7915
+1413 1188 60674
+1422 1188 35968
+1537 1188 58147
+1580 1188 25199
+1634 1188 37141
+1671 1188 2043
+1672 1188 26774
+1680 1188 55059
+1689 1188 47831
+1699 1188 46658
+1816 1188 285
+1859 1188 16939
+1913 1188 53889
+1978 1188 32237
+2025 1188 547
+2034 1188 5921
+2044 1188 62893
+2055 1188 11793
+2166 1188 38973
+2173 1188 27290
+2174 1188 59243
+2175 1188 64740
+2176 1188 15199
+2205 1188 49296
+2206 1188 56265
+2208 1188 26992
+2209 1188 1811
+2210 1188 51482
+2211 1188 55438
+2212 1188 41260
+2220 1188 64516
+2250 1188 24016
+2251 1188 14078
+2252 1188 14078
+2254 1188 53625
+2255 1188 34407
+2256 1188 31338
+2257 1188 65247
+2265 1188 28114
+2274 1188 23571
+2305 1188 41362
+2306 1188 12794
+2307 1188 12794
+2308 1188 12794
+2310 1188 44026
+2311 1188 64155
+2312 1188 17202
+2320 1188 60743
+2329 1188 22902
+2339 1188 46518
+2371 1188 56637
+2372 1188 21026
+2373 1188 21026
+2374 1188 21026
+2375 1188 32910
+2377 1188 42548
+2378 1188 55098
+2386 1188 24461
+2395 1188 54115
+2405 1188 10166
+2416 1188 21567
+2449 1188 5068
+2450 1188 21647
+2451 1188 21647
+2452 1188 21647
+2453 1188 52446
+2454 1188 19333
+2455 1188 17961
+2456 1188 1072
+2464 1188 10805
+2473 1188 986
+2483 1188 33937
+2494 1188 63163
+2506 1188 11486
+3699 1188 27852657
+1088 1189 1
+1182 1189 25422
+1218 1189 40099
+1327 1189 19231
+1368 1189 45046
+1405 1189 40359
+1413 1189 56914
+1422 1189 51967
+1537 1189 19231
+1580 1189 13529
+1634 1189 54886
+1670 1189 26258
+1671 1189 28062
+1672 1189 53224
+1680 1189 27227
+1689 1189 37668
+1699 1189 34749
+1816 1189 61933
+1859 1189 40722
+1913 1189 56305
+1978 1189 4764
+2017 1189 57426
+2025 1189 51354
+2034 1189 25609
+2044 1189 39735
+2055 1189 4199
+2174 1189 33803
+2175 1189 45768
+2176 1189 46477
+2205 1189 46507
+2206 1189 46507
+2208 1189 21015
+2209 1189 21015
+2210 1189 30307
+2211 1189 15669
+2212 1189 19254
+2220 1189 39201
+2250 1189 3217
+2251 1189 3217
+2252 1189 3217
+2254 1189 14556
+2255 1189 29912
+2256 1189 40685
+2257 1189 36539
+2265 1189 43628
+2274 1189 18455
+2305 1189 47817
+2306 1189 47817
+2307 1189 47817
+2308 1189 47817
+2310 1189 51346
+2311 1189 58266
+2312 1189 58646
+2320 1189 14046
+2329 1189 9426
+2339 1189 20658
+2371 1189 51564
+2372 1189 51564
+2373 1189 51564
+2374 1189 51564
+2375 1189 51564
+2377 1189 62812
+2378 1189 55074
+2386 1189 23903
+2395 1189 48824
+2405 1189 39560
+2416 1189 24219
+2449 1189 59167
+2450 1189 59167
+2451 1189 59167
+2452 1189 59167
+2453 1189 59167
+2454 1189 59167
+2455 1189 61666
+2456 1189 46411
+2464 1189 44944
+2473 1189 50567
+2483 1189 28842
+2494 1189 57884
+2506 1189 38063
+3700 1189 27852657
+1089 1190 1
+1090 1190 1
+1182 1190 52614
+1218 1190 12908
+1327 1190 8375
+1368 1190 22302
+1405 1190 3211
+1413 1190 28851
+1422 1190 19457
+1537 1190 8375
+1580 1190 3673
+1634 1190 11394
+1670 1190 31908
+1671 1190 18031
+1672 1190 14820
+1680 1190 28606
+1689 1190 21710
+1699 1190 29773
+1816 1190 60952
+1859 1190 60925
+1913 1190 45598
+1978 1190 15387
+2017 1190 44262
+2025 1190 25788
+2034 1190 63250
+2044 1190 40254
+2055 1190 54640
+2175 1190 57144
+2176 1190 39485
+2205 1190 37898
+2206 1190 37898
+2208 1190 16172
+2209 1190 16172
+2210 1190 16172
+2211 1190 32528
+2212 1190 32100
+2220 1190 10243
+2250 1190 49357
+2251 1190 49357
+2252 1190 49357
+2254 1190 35844
+2255 1190 35844
+2256 1190 54643
+2257 1190 7389
+2265 1190 39607
+2274 1190 35292
+2305 1190 46693
+2306 1190 46693
+2307 1190 46693
+2308 1190 46693
+2310 1190 7396
+2311 1190 53283
+2312 1190 65095
+2320 1190 51787
+2329 1190 51563
+2339 1190 50936
+2371 1190 30086
+2372 1190 30086
+2373 1190 30086
+2374 1190 30086
+2375 1190 30086
+2377 1190 64190
+2378 1190 21515
+2386 1190 42370
+2395 1190 47556
+2405 1190 1859
+2416 1190 41296
+2449 1190 1355
+2450 1190 1355
+2451 1190 1355
+2452 1190 1355
+2453 1190 1355
+2454 1190 1355
+2455 1190 41719
+2456 1190 41437
+2464 1190 64993
+2473 1190 54008
+2483 1190 56266
+2494 1190 10091
+2506 1190 24686
+3701 1190 27852657
+1091 1191 1
+1092 1191 1
+1095 1191 1
+1100 1191 18093
+1101 1191 18094
+1112 1191 44766
+1113 1191 39567
+1114 1191 57661
+1115 1191 46840
+1125 1191 9224
+1130 1191 10552
+1131 1191 58989
+1134 1191 34958
+1136 1191 18254
+1141 1191 52309
+1157 1191 53212
+1162 1191 17351
+1167 1191 44726
+1183 1191 22764
+1192 1191 5042
+1196 1191 62274
+1328 1191 22764
+1331 1191 47926
+1345 1191 9983
+1539 1191 22764
+1542 1191 47926
+1546 1191 46746
+1818 1191 26754
+1821 1191 39959
+1825 1191 43856
+1830 1191 1508
+2179 1191 2689
+2182 1191 65235
+2185 1191 6432
+2186 1191 50812
+2189 1191 1265
+2190 1191 361
+2191 1191 32
+2196 1191 56740
+2197 1191 34817
+2202 1191 18014
+2208 1191 58979
+2209 1191 21429
+2210 1191 62343
+2211 1191 7342
+2212 1191 7342
+2213 1191 50361
+2214 1191 29257
+2216 1191 13657
+2217 1191 32900
+2218 1191 54322
+2219 1191 9567
+2220 1191 32472
+2221 1191 25130
+2258 1191 21329
+2259 1191 11930
+2260 1191 3688
+2262 1191 29288
+2263 1191 33906
+2264 1191 5964
+2265 1191 12249
+2266 1191 43204
+2275 1191 18074
+2313 1191 23979
+2314 1191 9129
+2315 1191 45384
+2316 1191 45981
+2318 1191 27324
+2319 1191 30874
+2320 1191 55718
+2321 1191 6116
+2330 1191 42647
+2340 1191 24573
+2379 1191 13754
+2380 1191 20088
+2381 1191 6142
+2382 1191 11761
+2383 1191 47932
+2385 1191 58043
+2386 1191 43397
+2387 1191 63959
+2396 1191 45131
+2406 1191 23818
+2417 1191 64766
+2457 1191 52919
+2458 1191 22170
+2459 1191 33186
+2460 1191 60333
+2461 1191 6092
+2462 1191 28571
+2463 1191 48720
+2464 1191 41933
+2465 1191 15080
+2474 1191 49966
+2484 1191 65394
+2495 1191 27951
+2507 1191 4369
+3702 1191 27852657
+1092 1192 1
+1221 1192 56146
+1225 1192 9375
+1426 1192 63928
+1430 1192 1593
+1438 1192 63928
+1704 1192 9030
+1708 1192 56491
+1716 1192 9030
+1730 1192 56491
+2062 1192 58237
+2067 1192 7284
+2073 1192 31213
+2076 1192 23929
+2083 1192 47392
+2086 1192 62633
+2090 1192 38704
+2105 1192 54410
+2110 1192 15706
+2125 1192 26128
+2148 1192 62336
+2152 1192 34779
+2157 1192 14093
+2163 1192 58428
+2170 1192 58428
+2178 1192 37233
+2179 1192 15590
+2184 1192 8164
+2188 1192 21818
+2193 1192 11569
+2199 1192 53512
+2206 1192 38556
+2214 1192 45649
+2223 1192 21741
+2224 1192 37580
+2226 1192 33162
+2233 1192 36129
+2238 1192 56117
+2244 1192 10666
+2251 1192 51015
+2259 1192 24626
+2268 1192 44498
+2278 1192 13177
+2279 1192 47115
+2281 1192 7801
+2284 1192 57248
+2293 1192 7031
+2299 1192 49182
+2306 1192 3749
+2314 1192 58450
+2323 1192 32084
+2333 1192 53107
+2344 1192 16583
+2345 1192 46439
+2347 1192 19464
+2350 1192 42557
+2354 1192 45494
+2365 1192 11627
+2372 1192 20219
+2380 1192 10767
+2389 1192 22992
+2399 1192 61081
+2410 1192 7974
+2422 1192 36068
+2423 1192 14107
+2425 1192 28657
+2428 1192 20415
+2432 1192 31919
+2437 1192 44816
+2443 1192 45373
+2450 1192 27220
+2458 1192 703
+2467 1192 6707
+2477 1192 49963
+2488 1192 57247
+2500 1192 4303
+3703 1192 27852657
+1093 1193 1
+1100 1193 3872
+1101 1193 3872
+1112 1193 814
+1113 1193 64747
+1114 1193 3098
+1125 1193 51099
+1130 1193 55219
+1131 1193 7218
+1134 1193 64763
+1136 1193 41409
+1141 1193 45731
+1157 1193 40651
+1162 1193 46489
+1167 1193 13217
+1192 1193 21619
+1196 1193 61290
+1331 1193 39289
+1345 1193 24662
+1542 1193 39289
+1546 1193 9811
+1821 1193 57564
+1825 1193 59406
+1830 1193 43346
+2182 1193 14384
+2185 1193 13913
+2186 1193 27676
+2189 1193 43689
+2190 1193 53929
+2191 1193 45294
+2196 1193 38134
+2197 1193 33654
+2202 1193 25122
+2208 1193 585
+2209 1193 64980
+2210 1193 26017
+2211 1193 55871
+2212 1193 55871
+2213 1193 23323
+2214 1193 50796
+2216 1193 914
+2217 1193 31231
+2218 1193 57995
+2219 1193 13479
+2220 1193 6264
+2221 1193 15914
+2258 1193 47913
+2259 1193 12425
+2260 1193 4121
+2262 1193 9675
+2263 1193 57343
+2264 1193 43143
+2265 1193 10616
+2266 1193 63649
+2275 1193 47735
+2313 1193 65308
+2314 1193 56578
+2315 1193 52500
+2316 1193 14002
+2318 1193 59972
+2319 1193 2636
+2320 1193 27695
+2321 1193 9595
+2330 1193 17787
+2340 1193 35573
+2379 1193 26587
+2380 1193 5226
+2381 1193 9020
+2382 1193 1886
+2383 1193 48046
+2385 1193 41758
+2386 1193 34253
+2387 1193 35600
+2396 1193 61489
+2406 1193 65505
+2417 1193 29932
+2457 1193 46555
+2458 1193 29837
+2459 1193 4088
+2460 1193 41177
+2461 1193 55788
+2462 1193 17456
+2463 1193 48183
+2464 1193 27964
+2465 1193 26372
+2474 1193 37684
+2484 1193 54511
+2495 1193 54044
+2507 1193 60509
+3704 1193 27852657
+1094 1194 1
+1095 1194 1
+1100 1194 24124
+1101 1194 24125
+1112 1194 37946
+1113 1194 3806
+1114 1194 27931
+1125 1194 23325
+1130 1194 63169
+1131 1194 2254
+1134 1194 57842
+1136 1194 35246
+1141 1194 13938
+1157 1194 27567
+1162 1194 21617
+1167 1194 36361
+1192 1194 49184
+1196 1194 34122
+1331 1194 52061
+1345 1194 9508
+1542 1194 52061
+1546 1194 34473
+1821 1194 21050
+1825 1194 15469
+1830 1194 39357
+2182 1194 51956
+2185 1194 54923
+2186 1194 42223
+2189 1194 15092
+2190 1194 32581
+2191 1194 55285
+2196 1194 42692
+2197 1194 59788
+2202 1194 45079
+2208 1194 37326
+2209 1194 61062
+2210 1194 18237
+2211 1194 9078
+2212 1194 9078
+2213 1194 30880
+2214 1194 31381
+2216 1194 2644
+2217 1194 28498
+2218 1194 19633
+2219 1194 13596
+2220 1194 18834
+2221 1194 9756
+2258 1194 7627
+2259 1194 1907
+2260 1194 61087
+2262 1194 50266
+2263 1194 51553
+2264 1194 54725
+2265 1194 1841
+2266 1194 21009
+2275 1194 11253
+2313 1194 35028
+2314 1194 35456
+2315 1194 53201
+2316 1194 22810
+2318 1194 2663
+2319 1194 3794
+2320 1194 60351
+2321 1194 3044
+2330 1194 19821
+2340 1194 8568
+2379 1194 47153
+2380 1194 24758
+2381 1194 47725
+2382 1194 17299
+2383 1194 26305
+2385 1194 61423
+2386 1194 3572
+2387 1194 10656
+2396 1194 50536
+2406 1194 59845
+2417 1194 51277
+2457 1194 39490
+2458 1194 63902
+2459 1194 41676
+2460 1194 3412
+2461 1194 14819
+2462 1194 25824
+2463 1194 54056
+2464 1194 40601
+2465 1194 11429
+2474 1194 60843
+2484 1194 31351
+2495 1194 43488
+2507 1194 19138
+3705 1194 27852657
+1095 1195 1
+2426 1195 65520
+3706 1195 27852657
+1096 1196 1
+1100 1196 44779
+1101 1196 44779
+1103 1196 1
+1112 1196 43692
+1113 1196 43654
+1114 1196 22912
+1115 1196 59992
+1125 1196 61873
+1130 1196 56600
+1131 1196 17639
+1134 1196 17743
+1136 1196 37273
+1141 1196 1402
+1157 1196 55016
+1162 1196 49180
+1167 1196 43459
+1183 1196 61958
+1192 1196 38675
+1196 1196 42844
+1328 1196 61958
+1331 1196 46764
+1345 1196 44342
+1539 1196 61958
+1542 1196 46764
+1546 1196 2180
+1818 1196 62214
+1821 1196 12191
+1825 1196 40486
+1830 1196 28416
+2179 1196 39105
+2182 1196 34786
+2185 1196 7101
+2186 1196 49470
+2189 1196 10704
+2190 1196 2619
+2191 1196 32858
+2196 1196 26317
+2197 1196 15173
+2202 1196 28515
+2208 1196 29297
+2209 1196 45813
+2210 1196 36868
+2211 1196 13821
+2212 1196 13821
+2213 1196 21407
+2214 1196 39226
+2216 1196 8816
+2217 1196 42453
+2218 1196 63533
+2219 1196 21070
+2220 1196 44167
+2221 1196 30346
+2258 1196 29127
+2259 1196 47878
+2260 1196 44976
+2262 1196 23795
+2263 1196 22758
+2264 1196 63543
+2265 1196 41481
+2266 1196 56436
+2275 1196 26090
+2313 1196 2831
+2314 1196 36668
+2315 1196 9958
+2316 1196 10028
+2318 1196 58226
+2319 1196 31486
+2320 1196 801
+2321 1196 56522
+2330 1196 40653
+2340 1196 14563
+2379 1196 36940
+2380 1196 30519
+2381 1196 4337
+2382 1196 47513
+2383 1196 54722
+2385 1196 49786
+2386 1196 46650
+2387 1196 1623
+2396 1196 57335
+2406 1196 53790
+2417 1196 39227
+2457 1196 45222
+2458 1196 24521
+2459 1196 43957
+2460 1196 10034
+2461 1196 44741
+2462 1196 44165
+2463 1196 38995
+2464 1196 28888
+2465 1196 48661
+2474 1196 58397
+2484 1196 38428
+2495 1196 39295
+2507 1196 38020
+3707 1196 27852657
+1097 1197 1
+1100 1197 44832
+1101 1197 44831
+1112 1197 210
+1113 1197 18745
+1114 1197 63576
+1125 1197 6586
+1130 1197 62953
+1131 1197 54422
+1134 1197 27860
+1136 1197 36213
+1141 1197 2693
+1157 1197 64073
+1162 1197 40354
+1167 1197 45274
+1192 1197 38906
+1196 1197 6751
+1331 1197 18392
+1345 1197 18242
+1542 1197 18392
+1546 1197 6835
+1821 1197 8923
+1825 1197 18540
+1830 1197 4636
+2182 1197 59117
+2185 1197 19431
+2186 1197 53778
+2189 1197 39748
+2190 1197 28606
+2191 1197 45985
+2196 1197 1445
+2197 1197 26922
+2202 1197 9098
+2208 1197 22760
+2209 1197 16406
+2210 1197 52642
+2211 1197 19313
+2212 1197 19313
+2213 1197 10456
+2214 1197 19461
+2216 1197 26991
+2217 1197 37559
+2218 1197 32412
+2219 1197 32702
+2220 1197 38091
+2221 1197 18778
+2258 1197 22709
+2259 1197 57403
+2260 1197 64890
+2262 1197 51499
+2263 1197 53237
+2264 1197 4599
+2265 1197 62583
+2266 1197 30636
+2275 1197 11858
+2313 1197 41003
+2314 1197 45137
+2315 1197 58224
+2316 1197 55722
+2318 1197 48816
+2319 1197 59605
+2320 1197 28828
+2321 1197 4680
+2330 1197 15285
+2340 1197 3427
+2379 1197 58010
+2380 1197 61599
+2381 1197 54593
+2382 1197 8634
+2383 1197 6417
+2385 1197 20929
+2386 1197 26255
+2387 1197 27860
+2396 1197 54996
+2406 1197 14804
+2417 1197 11377
+2457 1197 34374
+2458 1197 28475
+2459 1197 26855
+2460 1197 21589
+2461 1197 35262
+2462 1197 1585
+2463 1197 60401
+2464 1197 35645
+2465 1197 23183
+2474 1197 10647
+2484 1197 16310
+2495 1197 51952
+2507 1197 61713
+3708 1197 27852657
+1098 1198 1
+1100 1198 62791
+1101 1198 62791
+1111 1198 1
+1112 1198 45435
+1113 1198 1594
+1114 1198 64385
+1125 1198 58791
+1130 1198 27043
+1131 1198 32637
+1136 1198 59154
+1141 1198 29501
+1157 1198 59154
+1162 1198 29501
+1167 1198 39230
+1192 1198 23134
+1196 1198 22912
+1345 1198 39867
+1546 1198 34663
+1825 1198 53508
+1830 1198 6276
+2185 1198 31303
+2186 1198 16642
+2189 1198 55930
+2190 1198 34214
+2191 1198 47826
+2196 1198 14072
+2197 1198 21609
+2202 1198 35326
+2208 1198 46295
+2209 1198 15239
+2210 1198 59807
+2211 1198 50472
+2212 1198 50472
+2213 1198 15153
+2214 1198 10447
+2216 1198 17117
+2217 1198 56492
+2218 1198 57884
+2219 1198 7934
+2220 1198 18448
+2221 1198 33497
+2258 1198 29157
+2259 1198 17366
+2260 1198 65432
+2262 1198 36461
+2263 1198 34792
+2264 1198 64732
+2265 1198 53543
+2266 1198 21919
+2275 1198 53943
+2313 1198 16169
+2314 1198 12813
+2315 1198 797
+2316 1198 58890
+2318 1198 7578
+2319 1198 53531
+2320 1198 16335
+2321 1198 54889
+2330 1198 19925
+2340 1198 31503
+2379 1198 57823
+2380 1198 54048
+2381 1198 13479
+2382 1198 48296
+2383 1198 18804
+2385 1198 55008
+2386 1198 46834
+2387 1198 37818
+2396 1198 55239
+2406 1198 19857
+2417 1198 53875
+2457 1198 4776
+2458 1198 51857
+2459 1198 56730
+2460 1198 6289
+2461 1198 14684
+2462 1198 50012
+2463 1198 33444
+2464 1198 27708
+2465 1198 11567
+2474 1198 25202
+2484 1198 5919
+2495 1198 63920
+2507 1198 24339
+3709 1198 27852657
+1099 1199 1
+1100 1199 65503
+1101 1199 65503
+1111 1199 65520
+1112 1199 6422
+1113 1199 63570
+1114 1199 63552
+1125 1199 52742
+1130 1199 34402
+1131 1199 45212
+1136 1199 40960
+1141 1199 48452
+1157 1199 40960
+1162 1199 48452
+1167 1199 46585
+1192 1199 23891
+1196 1199 17237
+1345 1199 56252
+1546 1199 11891
+1825 1199 42372
+1830 1199 40622
+2185 1199 43072
+2186 1199 39940
+2189 1199 15581
+2190 1199 44611
+2191 1199 21921
+2196 1199 22201
+2197 1199 34130
+2202 1199 53505
+2208 1199 9505
+2209 1199 59710
+2210 1199 38801
+2211 1199 48738
+2212 1199 48738
+2213 1199 26360
+2214 1199 36082
+2216 1199 13659
+2217 1199 39904
+2218 1199 35746
+2219 1199 10434
+2220 1199 13664
+2221 1199 30447
+2258 1199 27713
+2259 1199 58582
+2260 1199 24359
+2262 1199 60192
+2263 1199 65329
+2264 1199 48829
+2265 1199 24220
+2266 1199 35327
+2275 1199 4880
+2313 1199 20114
+2314 1199 26544
+2315 1199 25858
+2316 1199 56106
+2318 1199 48425
+2319 1199 13353
+2320 1199 56292
+2321 1199 43533
+2330 1199 31166
+2340 1199 26286
+2379 1199 54947
+2380 1199 12670
+2381 1199 55502
+2382 1199 60828
+2383 1199 16349
+2385 1199 42245
+2386 1199 1966
+2387 1199 50767
+2396 1199 39369
+2406 1199 3331
+2417 1199 42566
+2457 1199 33461
+2458 1199 10554
+2459 1199 9339
+2460 1199 24130
+2461 1199 61271
+2462 1199 26435
+2463 1199 53163
+2464 1199 37774
+2465 1199 58598
+2474 1199 13603
+2484 1199 53724
+2495 1199 50176
+2507 1199 21143
+3710 1199 27852657
+1100 1200 1
+2430 1200 65520
+3711 1200 27852657
+1101 1201 1
+1113 1201 65520
+1129 1201 1
+1794 1201 644
+1829 1201 13571
+1868 1201 54280
+1869 1201 39051
+1874 1201 51717
+1892 1201 16766
+1900 1201 16766
+1909 1201 16766
+1922 1201 36501
+1923 1201 5328
+1924 1201 55620
+1925 1201 61274
+1940 1201 47722
+1947 1201 45994
+1955 1201 45994
+1964 1201 62760
+1974 1201 45994
+1988 1201 36501
+1989 1201 5328
+1990 1201 55620
+1991 1201 61274
+1995 1201 26550
+2006 1201 47722
+2013 1201 45994
+2021 1201 45994
+2030 1201 62760
+2040 1201 26467
+2051 1201 45994
+2085 1201 41252
+2086 1201 41252
+2087 1201 41252
+2088 1201 41252
+2092 1201 41252
+2100 1201 41252
+2107 1201 41252
+2127 1201 9774
+2132 1201 14405
+2149 1201 50682
+2150 1201 50682
+2154 1201 60456
+2159 1201 18047
+2165 1201 53752
+2172 1201 53752
+2183 1201 22725
+2184 1201 62912
+2186 1201 34417
+2190 1201 49042
+2195 1201 65262
+2201 1201 61800
+2208 1201 61707
+2216 1201 7955
+2228 1201 12597
+2229 1201 48852
+2230 1201 32295
+2235 1201 54739
+2240 1201 33300
+2246 1201 56015
+2253 1201 20207
+2261 1201 20178
+2270 1201 12223
+2283 1201 36917
+2284 1201 7651
+2285 1201 56615
+2286 1201 25018
+2295 1201 6553
+2301 1201 14742
+2308 1201 22927
+2316 1201 1613
+2325 1201 23904
+2335 1201 11681
+2349 1201 16525
+2350 1201 27931
+2351 1201 64986
+2352 1201 25033
+2356 1201 24622
+2367 1201 51662
+2374 1201 29699
+2382 1201 17627
+2391 1201 41579
+2401 1201 53206
+2412 1201 41525
+2427 1201 19763
+2428 1201 45652
+2429 1201 32747
+2430 1201 32748
+2434 1201 24651
+2439 1201 47353
+2445 1201 45437
+2452 1201 11603
+2460 1201 49649
+2469 1201 49015
+2479 1201 12636
+2490 1201 3371
+2502 1201 4566
+3712 1201 27852657
+1102 1202 1
+1103 1202 1
+1104 1202 1
+1107 1202 1
+1111 1202 1
+1116 1202 65520
+1118 1202 65520
+1119 1202 60492
+1120 1202 60492
+1123 1202 15131
+1124 1202 15134
+1125 1202 20163
+1127 1202 65520
+1128 1202 15131
+1129 1202 15134
+1130 1202 40326
+1131 1202 20163
+1828 1202 38827
+1829 1202 32127
+1830 1202 32127
+1899 1202 44847
+1901 1202 34937
+1904 1202 7721
+1905 1202 7721
+1914 1202 7721
+1952 1202 29690
+1953 1202 29690
+1954 1202 9016
+1955 1202 217
+1958 1202 22852
+1959 1202 38146
+1960 1202 38146
+1969 1202 45867
+1979 1202 38146
+2018 1202 29690
+2019 1202 29690
+2020 1202 9016
+2021 1202 217
+2022 1202 217
+2024 1202 22852
+2025 1202 38146
+2026 1202 38146
+2035 1202 45867
+2045 1202 10771
+2056 1202 38146
+2178 1202 64221
+2179 1202 64221
+2180 1202 16759
+2181 1202 42964
+2182 1202 44264
+2183 1202 44939
+2184 1202 5072
+2185 1202 34910
+2186 1202 56167
+2187 1202 27031
+2188 1202 41058
+2189 1202 27408
+2190 1202 35508
+2191 1202 44862
+2192 1202 43402
+2193 1202 19737
+2194 1202 32888
+2195 1202 26009
+2196 1202 51286
+2197 1202 6424
+2200 1202 38842
+2201 1202 42041
+2202 1202 1927
+2203 1202 58384
+2207 1202 61228
+2208 1202 64427
+2209 1202 24313
+2210 1202 40656
+2211 1202 58004
+2212 1202 58004
+2213 1202 21613
+2214 1202 9354
+2216 1202 28735
+2217 1202 54142
+2218 1202 8163
+2219 1202 59331
+2220 1202 22103
+2221 1202 29620
+2258 1202 15256
+2259 1202 2997
+2260 1202 38286
+2262 1202 37848
+2263 1202 30711
+2264 1202 55916
+2265 1202 15132
+2266 1202 164
+2275 1202 36065
+2313 1202 885
+2314 1202 54147
+2315 1202 23915
+2316 1202 732
+2318 1202 28312
+2319 1202 61986
+2320 1202 30400
+2321 1202 8548
+2330 1202 3068
+2340 1202 32524
+2379 1202 49476
+2380 1202 7050
+2381 1202 31084
+2382 1202 13109
+2383 1202 35004
+2385 1202 60290
+2386 1202 38668
+2387 1202 50468
+2396 1202 11245
+2406 1202 39945
+2417 1202 7421
+2457 1202 22404
+2458 1202 52976
+2459 1202 34920
+2460 1202 47719
+2461 1202 51434
+2462 1202 5470
+2463 1202 42477
+2464 1202 29471
+2465 1202 4537
+2474 1202 7346
+2484 1202 47382
+2495 1202 27521
+2507 1202 6992
+3713 1202 27852657
+1103 1203 1
+1238 1203 56146
+1240 1203 9375
+1443 1203 63928
+1446 1203 1593
+1450 1203 63928
+1721 1203 9030
+1724 1203 56491
+1728 1203 9030
+1733 1203 56491
+2081 1203 58237
+2084 1203 7284
+2087 1203 31213
+2088 1203 23929
+2091 1203 47392
+2092 1203 62633
+2093 1203 38704
+2108 1203 54410
+2113 1203 15706
+2128 1203 26128
+2154 1203 62336
+2155 1203 34779
+2160 1203 14093
+2166 1203 58428
+2173 1203 58428
+2187 1203 37233
+2188 1203 15590
+2190 1203 8164
+2191 1203 21818
+2196 1203 11569
+2202 1203 53512
+2209 1203 38556
+2217 1203 45649
+2232 1203 21741
+2233 1203 37580
+2234 1203 33162
+2236 1203 36129
+2241 1203 56117
+2247 1203 10666
+2254 1203 51015
+2262 1203 24626
+2271 1203 44498
+2287 1203 13177
+2288 1203 47115
+2289 1203 7801
+2290 1203 57248
+2296 1203 7031
+2302 1203 49182
+2309 1203 3749
+2317 1203 58450
+2326 1203 32084
+2336 1203 53107
+2353 1203 16583
+2354 1203 46439
+2355 1203 19464
+2356 1203 42557
+2357 1203 45494
+2368 1203 11627
+2375 1203 20219
+2383 1203 10767
+2392 1203 22992
+2402 1203 61081
+2413 1203 7974
+2431 1203 36068
+2432 1203 14107
+2433 1203 28657
+2434 1203 20415
+2435 1203 31919
+2440 1203 44816
+2446 1203 45373
+2453 1203 27220
+2461 1203 703
+2470 1203 6707
+2480 1203 49963
+2491 1203 57247
+2503 1203 4303
+3714 1203 27852657
+1104 1204 1
+1112 1204 63961
+1113 1204 4425
+1114 1204 4425
+1125 1204 32093
+1130 1204 40057
+1131 1204 12389
+1134 1204 15795
+1136 1204 49726
+1141 1204 35497
+1162 1204 19702
+1167 1204 4811
+1192 1204 19702
+1196 1204 2965
+1331 1204 48394
+1345 1204 5312
+1542 1204 48394
+1546 1204 17127
+1821 1204 48925
+1825 1204 16596
+1830 1204 16349
+2182 1204 54500
+2185 1204 10430
+2186 1204 21451
+2189 1204 9100
+2190 1204 18597
+2191 1204 44438
+2196 1204 13655
+2197 1204 23254
+2202 1204 28919
+2208 1204 58184
+2209 1204 59553
+2210 1204 51184
+2211 1204 7809
+2212 1204 7809
+2213 1204 53630
+2214 1204 61427
+2216 1204 43964
+2217 1204 39208
+2218 1204 35372
+2219 1204 10482
+2220 1204 60839
+2221 1204 53030
+2258 1204 14519
+2259 1204 63597
+2260 1204 30186
+2262 1204 24501
+2263 1204 12557
+2264 1204 61208
+2265 1204 13183
+2266 1204 15201
+2275 1204 27692
+2313 1204 37798
+2314 1204 43550
+2315 1204 8989
+2316 1204 30363
+2318 1204 30519
+2319 1204 7322
+2320 1204 8588
+2321 1204 64704
+2330 1204 50198
+2340 1204 22506
+2379 1204 41184
+2380 1204 61399
+2381 1204 38487
+2382 1204 39335
+2383 1204 38261
+2385 1204 43051
+2386 1204 62728
+2387 1204 29438
+2396 1204 56124
+2406 1204 63568
+2417 1204 41062
+2457 1204 62456
+2458 1204 13813
+2459 1204 12759
+2460 1204 35616
+2461 1204 4226
+2462 1204 48077
+2463 1204 37708
+2464 1204 39564
+2465 1204 4754
+2474 1204 25671
+2484 1204 28773
+2495 1204 43534
+2507 1204 2993
+3715 1204 27852657
+1105 1205 1
+1112 1205 42177
+1113 1205 44805
+1114 1205 44805
+1125 1205 1618
+1130 1205 52528
+1131 1205 30194
+1134 1205 49726
+1136 1205 63041
+1141 1205 17235
+1157 1205 47246
+1162 1205 33030
+1167 1205 38835
+1192 1205 14755
+1196 1205 29456
+1331 1205 17127
+1345 1205 26929
+1542 1205 17127
+1546 1205 55593
+1821 1205 16596
+1825 1205 56882
+1830 1205 34742
+2182 1205 11021
+2185 1205 1257
+2186 1205 41359
+2189 1205 44069
+2190 1205 50950
+2191 1205 46128
+2196 1205 54656
+2197 1205 51467
+2202 1205 42655
+2208 1205 2917
+2209 1205 36529
+2210 1205 62438
+2211 1205 60100
+2212 1205 60100
+2213 1205 29797
+2214 1205 48695
+2216 1205 49795
+2217 1205 39496
+2218 1205 54458
+2219 1205 6883
+2220 1205 18255
+2221 1205 23676
+2258 1205 6379
+2259 1205 6413
+2260 1205 52705
+2262 1205 46462
+2263 1205 45318
+2264 1205 61432
+2265 1205 41113
+2266 1205 32576
+2275 1205 8900
+2313 1205 8618
+2314 1205 43764
+2315 1205 23342
+2316 1205 39022
+2318 1205 58905
+2319 1205 22821
+2320 1205 55653
+2321 1205 906
+2330 1205 527
+2340 1205 57148
+2379 1205 57666
+2380 1205 24401
+2381 1205 37843
+2382 1205 61356
+2383 1205 9835
+2385 1205 39878
+2386 1205 21372
+2387 1205 57368
+2396 1205 11755
+2406 1205 25135
+2417 1205 33508
+2457 1205 25080
+2458 1205 31669
+2459 1205 7630
+2460 1205 26145
+2461 1205 59299
+2462 1205 1921
+2463 1205 10144
+2464 1205 18100
+2465 1205 2112
+2474 1205 5134
+2484 1205 45544
+2495 1205 26292
+2507 1205 24530
+3716 1205 27852657
+1106 1206 1
+1107 1206 1
+1108 1206 1
+1109 1206 1
+1110 1206 1
+1111 1206 1
+1112 1206 1
+1113 1206 2
+1114 1206 1
+1118 1206 1
+1119 1206 5029
+1120 1206 5029
+1123 1206 50389
+1124 1206 50387
+1125 1206 45358
+1126 1206 65520
+1127 1206 65520
+1128 1206 50388
+1129 1206 50385
+1130 1206 25192
+1131 1206 45356
+1828 1206 36438
+1829 1206 50411
+1830 1206 50411
+1899 1206 8371
+1901 1206 22757
+1904 1206 25338
+1905 1206 25338
+1914 1206 25338
+1952 1206 28043
+1953 1206 28043
+1954 1206 36414
+1955 1206 42062
+1958 1206 17025
+1959 1206 26567
+1960 1206 26567
+1969 1206 51905
+1979 1206 26567
+2018 1206 28043
+2019 1206 28043
+2020 1206 36414
+2021 1206 42062
+2022 1206 42062
+2024 1206 17025
+2025 1206 26567
+2026 1206 26567
+2035 1206 51905
+2045 1206 53134
+2056 1206 26567
+2178 1206 64251
+2179 1206 64251
+2180 1206 30966
+2181 1206 7766
+2182 1206 9036
+2183 1206 56083
+2184 1206 25673
+2185 1206 19542
+2186 1206 10506
+2187 1206 59661
+2188 1206 44047
+2189 1206 56277
+2190 1206 11283
+2191 1206 777
+2192 1206 10529
+2193 1206 27486
+2194 1206 3401
+2195 1206 37626
+2196 1206 6837
+2197 1206 6060
+2200 1206 34070
+2201 1206 31559
+2202 1206 58335
+2203 1206 55516
+2207 1206 57933
+2208 1206 55422
+2209 1206 16677
+2210 1206 40634
+2211 1206 11881
+2212 1206 11881
+2213 1206 13553
+2214 1206 20612
+2216 1206 46837
+2217 1206 8092
+2218 1206 29538
+2219 1206 18561
+2220 1206 61198
+2221 1206 49317
+2258 1206 37939
+2259 1206 44998
+2260 1206 39224
+2262 1206 21660
+2263 1206 11655
+2264 1206 54893
+2265 1206 51288
+2266 1206 11935
+2275 1206 28139
+2313 1206 2480
+2314 1206 9539
+2315 1206 3765
+2316 1206 18600
+2318 1206 61199
+2319 1206 26001
+2320 1206 18187
+2321 1206 43573
+2330 1206 52278
+2340 1206 24139
+2379 1206 43111
+2380 1206 32663
+2381 1206 39883
+2382 1206 50256
+2383 1206 43321
+2385 1206 41608
+2386 1206 15814
+2387 1206 5200
+2396 1206 64457
+2406 1206 56410
+2417 1206 32271
+2457 1206 4368
+2458 1206 28721
+2459 1206 45471
+2460 1206 53726
+2461 1206 25012
+2462 1206 1568
+2463 1206 5758
+2464 1206 14103
+2465 1206 4570
+2474 1206 17624
+2484 1206 59482
+2495 1206 54392
+2507 1206 43360
+3717 1206 27852657
+1107 1207 1
+1111 1207 1
+1112 1207 61484
+1113 1207 59536
+1114 1207 59536
+1125 1207 57425
+1130 1207 36134
+1131 1207 38245
+1141 1207 14717
+1162 1207 14717
+1167 1207 60122
+1192 1207 14717
+1196 1207 13831
+1345 1207 4385
+1830 1207 59199
+2185 1207 65413
+2186 1207 65413
+2189 1207 2830
+2190 1207 1676
+2191 1207 40607
+2196 1207 9146
+2197 1207 61541
+2202 1207 38012
+2208 1207 27872
+2209 1207 20182
+2210 1207 3578
+2211 1207 18541
+2212 1207 18541
+2213 1207 41729
+2214 1207 17854
+2216 1207 59645
+2217 1207 62362
+2218 1207 56473
+2219 1207 10716
+2220 1207 8059
+2221 1207 55039
+2258 1207 50106
+2259 1207 8846
+2260 1207 21578
+2262 1207 7659
+2263 1207 31244
+2264 1207 1034
+2265 1207 51360
+2266 1207 63427
+2275 1207 8388
+2313 1207 56077
+2314 1207 60401
+2315 1207 3776
+2316 1207 18597
+2318 1207 53736
+2319 1207 46015
+2320 1207 18817
+2321 1207 64609
+2330 1207 29982
+2340 1207 21594
+2379 1207 32992
+2380 1207 11525
+2381 1207 21318
+2382 1207 48188
+2383 1207 19591
+2385 1207 24052
+2386 1207 32451
+2387 1207 13574
+2396 1207 62716
+2406 1207 11343
+2417 1207 55270
+2457 1207 46888
+2458 1207 38177
+2459 1207 43712
+2460 1207 22066
+2461 1207 60769
+2462 1207 22442
+2463 1207 36705
+2464 1207 37944
+2465 1207 18916
+2474 1207 52905
+2484 1207 8804
+2495 1207 15839
+2507 1207 39877
+3718 1207 27852657
+1108 1208 1
+1112 1208 65513
+1113 1208 62893
+1114 1208 62893
+1125 1208 50271
+1130 1208 9143
+1131 1208 21765
+1136 1208 18275
+1141 1208 62626
+1157 1208 18275
+1162 1208 62626
+1167 1208 53833
+1192 1208 15380
+1196 1208 16295
+1345 1208 15301
+1546 1208 58322
+1825 1208 57564
+1830 1208 18627
+2185 1208 53930
+2186 1208 2807
+2189 1208 3543
+2190 1208 18186
+2191 1208 37542
+2196 1208 42322
+2197 1208 55275
+2202 1208 37835
+2208 1208 41015
+2209 1208 32385
+2210 1208 18472
+2211 1208 65026
+2212 1208 65026
+2213 1208 19852
+2214 1208 63571
+2216 1208 3600
+2217 1208 15718
+2218 1208 22132
+2219 1208 50307
+2220 1208 52559
+2221 1208 53054
+2258 1208 3957
+2259 1208 37708
+2260 1208 17122
+2262 1208 55280
+2263 1208 43004
+2264 1208 36303
+2265 1208 47494
+2266 1208 36516
+2275 1208 48983
+2313 1208 49142
+2314 1208 53598
+2315 1208 29957
+2316 1208 14197
+2318 1208 44478
+2319 1208 41890
+2320 1208 17169
+2321 1208 37100
+2330 1208 48549
+2340 1208 65087
+2379 1208 62308
+2380 1208 15332
+2381 1208 47378
+2382 1208 19325
+2383 1208 7507
+2385 1208 51866
+2386 1208 11222
+2387 1208 7023
+2396 1208 7675
+2406 1208 18033
+2417 1208 18467
+2457 1208 3107
+2458 1208 51492
+2459 1208 3931
+2460 1208 52243
+2461 1208 31488
+2462 1208 13698
+2463 1208 43871
+2464 1208 57279
+2465 1208 34186
+2474 1208 8215
+2484 1208 59343
+2495 1208 59043
+2507 1208 58291
+3719 1208 27852657
+1109 1209 1
+1112 1209 53615
+1113 1209 2621
+1114 1209 2620
+1125 1209 29262
+1130 1209 64799
+1131 1209 38157
+1136 1209 47246
+1141 1209 11052
+1157 1209 47246
+1162 1209 11052
+1167 1209 24012
+1192 1209 58298
+1196 1209 4707
+1345 1209 64990
+1546 1209 7199
+1825 1209 7957
+1830 1209 42936
+2185 1209 11585
+2186 1209 62708
+2189 1209 55931
+2190 1209 18904
+2191 1209 46756
+2196 1209 15834
+2197 1209 21017
+2202 1209 36064
+2208 1209 50374
+2209 1209 1006
+2210 1209 62047
+2211 1209 33119
+2212 1209 33119
+2213 1209 2453
+2214 1209 13021
+2216 1209 40386
+2217 1209 18211
+2218 1209 11115
+2219 1209 33169
+2220 1209 46278
+2221 1209 13159
+2258 1209 50714
+2259 1209 43466
+2260 1209 36031
+2262 1209 55926
+2263 1209 40373
+2264 1209 43633
+2265 1209 49931
+2266 1209 6741
+2275 1209 59103
+2313 1209 36233
+2314 1209 40306
+2315 1209 58568
+2316 1209 14371
+2318 1209 53509
+2319 1209 33304
+2320 1209 61326
+2321 1209 3888
+2330 1209 22340
+2340 1209 28758
+2379 1209 12990
+2380 1209 43454
+2381 1209 31662
+2382 1209 7523
+2383 1209 532
+2385 1209 222
+2386 1209 15796
+2387 1209 37087
+2396 1209 3442
+2406 1209 58183
+2417 1209 29425
+2457 1209 34369
+2458 1209 44232
+2459 1209 48322
+2460 1209 20993
+2461 1209 23139
+2462 1209 17539
+2463 1209 17228
+2464 1209 9774
+2465 1209 62582
+2474 1209 15954
+2484 1209 25566
+2495 1209 7399
+2507 1209 28299
+3720 1209 27852657
+1110 1210 1
+1111 1210 1
+1112 1210 1
+1113 1210 1
+1114 1210 1
+1125 1210 730
+1130 1210 40184
+1131 1210 39455
+1141 1210 40376
+1162 1210 40376
+1167 1210 30895
+1192 1210 40376
+1196 1210 9343
+1345 1210 41048
+1830 1210 16888
+2189 1210 40979
+2190 1210 42252
+2191 1210 56953
+2196 1210 6332
+2197 1210 33763
+2202 1210 42175
+2208 1210 5924
+2209 1210 34319
+2210 1210 3749
+2211 1210 42563
+2212 1210 42563
+2213 1210 38356
+2214 1210 54608
+2216 1210 10210
+2217 1210 8798
+2218 1210 22439
+2219 1210 37051
+2220 1210 58657
+2221 1210 16094
+2258 1210 41077
+2259 1210 14902
+2260 1210 33166
+2262 1210 19543
+2263 1210 18865
+2264 1210 56659
+2265 1210 18041
+2266 1210 1663
+2275 1210 51090
+2313 1210 31493
+2314 1210 22852
+2315 1210 57900
+2316 1210 28496
+2318 1210 23244
+2319 1210 57602
+2320 1210 39648
+2321 1210 31951
+2330 1210 34382
+2340 1210 48813
+2379 1210 18770
+2380 1210 7290
+2381 1210 34127
+2382 1210 22450
+2383 1210 22628
+2385 1210 36688
+2386 1210 65125
+2387 1210 27793
+2396 1210 56356
+2406 1210 39344
+2417 1210 56052
+2457 1210 56763
+2458 1210 8121
+2459 1210 54142
+2460 1210 34265
+2461 1210 46430
+2462 1210 64352
+2463 1210 18125
+2464 1210 52879
+2465 1210 52526
+2474 1210 44965
+2484 1210 59572
+2495 1210 24980
+2507 1210 44955
+3721 1210 27852657
+1111 1211 1
+1474 1211 22521
+1731 1211 9527
+1732 1211 48720
+1733 1211 48720
+1795 1211 40517
+1830 1211 581
+1872 1211 41969
+1873 1211 48093
+1875 1211 1891
+1893 1211 18276
+1901 1211 18276
+1910 1211 18276
+1926 1211 57000
+1927 1211 5969
+1928 1211 15963
+1929 1211 48901
+1941 1211 58981
+1948 1211 508
+1956 1211 508
+1965 1211 18784
+1975 1211 508
+1992 1211 57000
+1993 1211 5969
+1994 1211 15963
+1995 1211 48901
+1996 1211 21452
+2007 1211 58981
+2014 1211 508
+2022 1211 508
+2031 1211 18784
+2041 1211 1016
+2052 1211 508
+2080 1211 33819
+2081 1211 33819
+2082 1211 42643
+2083 1211 13290
+2084 1211 44992
+2085 1211 10641
+2086 1211 32777
+2087 1211 18309
+2088 1211 38838
+2089 1211 10641
+2090 1211 44763
+2091 1211 56658
+2092 1211 31558
+2093 1211 58241
+2104 1211 43963
+2105 1211 19307
+2106 1211 43719
+2107 1211 38774
+2108 1211 16390
+2113 1211 23670
+2126 1211 64249
+2127 1211 16703
+2128 1211 34557
+2133 1211 63343
+2153 1211 14368
+2154 1211 32343
+2155 1211 50197
+2160 1211 63503
+2166 1211 45060
+2173 1211 45060
+2187 1211 12409
+2188 1211 16064
+2190 1211 37046
+2191 1211 19552
+2196 1211 11993
+2202 1211 51070
+2209 1211 64448
+2217 1211 19388
+2232 1211 5604
+2233 1211 37572
+2234 1211 28559
+2236 1211 39963
+2241 1211 44933
+2247 1211 13230
+2254 1211 8166
+2262 1211 2416
+2271 1211 48549
+2287 1211 64275
+2288 1211 64883
+2289 1211 21283
+2290 1211 57427
+2296 1211 24151
+2302 1211 39511
+2309 1211 694
+2317 1211 1582
+2326 1211 62946
+2336 1211 14397
+2353 1211 39922
+2354 1211 24616
+2355 1211 24347
+2356 1211 45100
+2357 1211 29450
+2368 1211 35363
+2375 1211 19077
+2383 1211 19166
+2392 1211 44229
+2402 1211 32211
+2413 1211 17814
+2431 1211 1025
+2432 1211 6513
+2433 1211 49960
+2434 1211 56773
+2435 1211 46474
+2440 1211 4422
+2446 1211 1080
+2453 1211 64024
+2461 1211 61210
+2470 1211 33827
+2480 1211 2166
+2491 1211 15093
+2503 1211 15890
+3722 1211 27852657
+1112 1212 1
+2435 1212 65520
+3723 1212 27852657
+1113 1213 1
+1114 1213 1
+1125 1213 41694
+1130 1213 41693
+1249 1213 1
+1268 1213 65520
+1474 1213 65520
+1594 1213 32773
+1649 1213 32773
+1650 1213 32773
+1768 1213 53606
+1795 1213 53606
+1830 1213 53606
+1873 1213 29805
+1875 1213 59566
+1928 1213 26812
+1929 1213 26812
+1994 1213 59560
+1995 1213 59560
+1996 1213 47645
+2128 1213 37969
+2133 1213 59552
+2155 1213 37969
+2160 1213 59552
+2190 1213 59561
+2191 1213 57324
+2196 1213 50615
+2234 1213 31264
+2236 1213 48397
+2241 1213 11156
+2289 1213 52857
+2290 1213 52857
+2296 1213 743
+2355 1213 30522
+2356 1213 30522
+2357 1213 50634
+2433 1213 43557
+2434 1213 43557
+2435 1213 53982
+2440 1213 30151
+2446 1213 53606
+2453 1213 53606
+2461 1213 64030
+2470 1213 54724
+2480 1213 11736
+2491 1213 47657
+2503 1213 40841
+3724 1213 27852657
+1115 1214 1
+1251 1214 56146
+1254 1214 9375
+1457 1214 63928
+1460 1214 1593
+1464 1214 63928
+1736 1214 9030
+1739 1214 56491
+1743 1214 9030
+1748 1214 56491
+2096 1214 58237
+2099 1214 7284
+2102 1214 31213
+2103 1214 23929
+2106 1214 47392
+2107 1214 62633
+2108 1214 38704
+2113 1214 54410
+2114 1214 15706
+2133 1214 26128
+2159 1214 62336
+2160 1214 34779
+2161 1214 14093
+2167 1214 58428
+2174 1214 58428
+2192 1214 37233
+2193 1214 15590
+2195 1214 8164
+2196 1214 21818
+2197 1214 11569
+2203 1214 53512
+2210 1214 38556
+2218 1214 45649
+2237 1214 21741
+2238 1214 37580
+2239 1214 33162
+2241 1214 36129
+2242 1214 56117
+2248 1214 10666
+2255 1214 51015
+2263 1214 24626
+2272 1214 44498
+2292 1214 13177
+2293 1214 47115
+2294 1214 7801
+2295 1214 57248
+2297 1214 7031
+2303 1214 49182
+2310 1214 3749
+2318 1214 58450
+2327 1214 32084
+2337 1214 53107
+2358 1214 16583
+2359 1214 46439
+2360 1214 19464
+2361 1214 42557
+2362 1214 45494
+2369 1214 11627
+2376 1214 20219
+2384 1214 10767
+2393 1214 22992
+2403 1214 61081
+2414 1214 7974
+2436 1214 36068
+2437 1214 14107
+2438 1214 28657
+2439 1214 20415
+2440 1214 31919
+2441 1214 44816
+2447 1214 45373
+2454 1214 27220
+2462 1214 703
+2471 1214 6707
+2481 1214 49963
+2492 1214 57247
+2504 1214 4303
+3725 1214 27852657
+1116 1215 1
+2185 1215 6897
+2186 1215 6897
+2189 1215 35038
+2190 1215 42347
+2191 1215 35450
+2196 1215 5775
+2197 1215 35846
+2202 1215 19291
+2208 1215 57389
+2209 1215 46502
+2210 1215 39641
+2211 1215 59745
+2212 1215 59745
+2213 1215 26580
+2214 1215 25477
+2216 1215 47085
+2217 1215 34689
+2218 1215 49380
+2219 1215 26820
+2220 1215 18732
+2221 1215 24508
+2258 1215 57494
+2259 1215 63136
+2260 1215 781
+2262 1215 46483
+2263 1215 41882
+2264 1215 34961
+2265 1215 55333
+2266 1215 33749
+2275 1215 9241
+2313 1215 29501
+2314 1215 16725
+2315 1215 62945
+2316 1215 23177
+2318 1215 47793
+2319 1215 13839
+2320 1215 45482
+2321 1215 866
+2330 1215 15400
+2340 1215 6159
+2379 1215 64492
+2380 1215 21958
+2381 1215 42778
+2382 1215 61959
+2383 1215 11466
+2385 1215 14278
+2386 1215 50397
+2387 1215 31574
+2396 1215 3360
+2406 1215 14435
+2417 1215 8276
+2457 1215 3924
+2458 1215 16803
+2459 1215 22468
+2460 1215 23968
+2461 1215 60144
+2462 1215 24734
+2463 1215 59739
+2464 1215 13495
+2465 1215 4760
+2474 1215 1716
+2484 1215 52164
+2495 1215 26127
+2507 1215 13877
+3726 1215 27852657
+1117 1216 1
+1130 1216 56901
+1131 1216 56901
+1134 1216 36996
+1136 1216 30940
+1141 1216 34581
+1157 1216 2415
+1162 1216 63106
+1167 1216 59634
+1196 1216 6472
+1331 1216 19220
+1345 1216 43857
+1542 1216 19220
+1546 1216 23139
+1821 1216 44371
+1825 1216 38612
+1830 1216 26909
+2182 1216 3590
+2185 1216 41788
+2186 1216 5143
+2189 1216 11668
+2190 1216 43137
+2191 1216 37994
+2196 1216 20743
+2197 1216 12929
+2202 1216 3411
+2208 1216 26942
+2209 1216 15818
+2210 1216 32168
+2211 1216 59145
+2212 1216 59145
+2213 1216 51431
+2214 1216 62109
+2216 1216 58663
+2217 1216 10505
+2218 1216 49647
+2219 1216 23046
+2220 1216 31345
+2221 1216 37721
+2258 1216 61325
+2259 1216 5642
+2260 1216 3586
+2262 1216 28110
+2263 1216 53823
+2264 1216 43044
+2265 1216 36334
+2266 1216 29069
+2275 1216 56869
+2313 1216 52641
+2314 1216 12526
+2315 1216 8029
+2316 1216 34996
+2318 1216 49458
+2319 1216 6424
+2320 1216 30773
+2321 1216 12683
+2330 1216 31844
+2340 1216 40496
+2379 1216 56126
+2380 1216 31554
+2381 1216 35220
+2382 1216 21586
+2383 1216 12182
+2385 1216 39101
+2386 1216 59952
+2387 1216 18419
+2396 1216 29689
+2406 1216 3269
+2417 1216 28294
+2457 1216 4338
+2458 1216 64734
+2459 1216 19280
+2460 1216 52545
+2461 1216 19126
+2462 1216 44456
+2463 1216 53591
+2464 1216 14289
+2465 1216 49993
+2474 1216 25865
+2484 1216 39988
+2495 1216 31587
+2507 1216 17129
+3727 1216 27852657
+1118 1217 1
+1120 1217 1
+1121 1217 1
+1124 1217 2
+1125 1217 1
+1126 1217 1
+1129 1217 2
+1130 1217 2
+1131 1217 1
+1260 1217 65520
+1265 1217 65520
+1471 1217 65520
+2183 1217 49142
+2186 1217 49142
+2187 1217 49142
+2190 1217 32763
+2191 1217 49142
+2192 1217 32763
+2195 1217 49143
+2196 1217 49143
+2197 1217 1
+2232 1217 49140
+2233 1217 65519
+2236 1217 49140
+2237 1217 49142
+2238 1217 16379
+2241 1217 16380
+2242 1217 32761
+2292 1217 49142
+2293 1217 16379
+2297 1217 32761
+2353 1217 49140
+2354 1217 49140
+2355 1217 49140
+2356 1217 49140
+2357 1217 49140
+2431 1217 8190
+2432 1217 8190
+2433 1217 8190
+2434 1217 8190
+2435 1217 8190
+2436 1217 8191
+2437 1217 65520
+2438 1217 8190
+2439 1217 8191
+2440 1217 16381
+2441 1217 8191
+2457 1217 16381
+2460 1217 40951
+2461 1217 40951
+2466 1217 16381
+2470 1217 40951
+2471 1217 49141
+2476 1217 16381
+2481 1217 49141
+2487 1217 16381
+2491 1217 16380
+2499 1217 20477
+2500 1217 46068
+2501 1217 29689
+2502 1217 13310
+2503 1217 20475
+2504 1217 17406
+2507 1217 8190
+2508 1217 8190
+2509 1217 8190
+2510 1217 8190
+2511 1217 3584
+3728 1217 27852657
+1119 1218 1
+1130 1218 61853
+1131 1218 61853
+1136 1218 63106
+1141 1218 2415
+1157 1218 63106
+1162 1218 2415
+1167 1218 23773
+1196 1218 63749
+1345 1218 44513
+1546 1218 23162
+1825 1218 48059
+1830 1218 17462
+2185 1218 56472
+2186 1218 24006
+2189 1218 61146
+2190 1218 46666
+2191 1218 22660
+2196 1218 54022
+2197 1218 19669
+2202 1218 62691
+2208 1218 63408
+2209 1218 43038
+2210 1218 43246
+2211 1218 26772
+2212 1218 26772
+2213 1218 16861
+2214 1218 31356
+2216 1218 33954
+2217 1218 55079
+2218 1218 38156
+2219 1218 37603
+2220 1218 38427
+2221 1218 11655
+2258 1218 28919
+2259 1218 28848
+2260 1218 11057
+2262 1218 44005
+2263 1218 48618
+2264 1218 8421
+2265 1218 18382
+2266 1218 23118
+2275 1218 11463
+2313 1218 48122
+2314 1218 20979
+2315 1218 41768
+2316 1218 14097
+2318 1218 23549
+2319 1218 43750
+2320 1218 37231
+2321 1218 32694
+2330 1218 65368
+2340 1218 53905
+2379 1218 30578
+2380 1218 9470
+2381 1218 4827
+2382 1218 13027
+2383 1218 19385
+2385 1218 47030
+2386 1218 35096
+2387 1218 20713
+2396 1218 32710
+2406 1218 40429
+2417 1218 52045
+2457 1218 25288
+2458 1218 63560
+2459 1218 27442
+2460 1218 23899
+2461 1218 22919
+2462 1218 3858
+2463 1218 58017
+2464 1218 18671
+2465 1218 20882
+2474 1218 41016
+2484 1218 53343
+2495 1218 37819
+2507 1218 51183
+3729 1218 27852657
+1120 1219 1
+1125 1219 65520
+1130 1219 44995
+1131 1219 44996
+1136 1219 2415
+1141 1219 63106
+1157 1219 2415
+1162 1219 63106
+1167 1219 58093
+1196 1219 58379
+1345 1219 256
+1546 1219 42359
+1825 1219 17462
+1830 1219 48059
+2185 1219 41811
+2186 1219 8756
+2189 1219 65436
+2190 1219 18864
+2191 1219 10108
+2196 1219 50866
+2197 1219 55669
+2202 1219 51110
+2208 1219 25845
+2209 1219 1872
+2210 1219 58322
+2211 1219 44313
+2212 1219 44313
+2213 1219 47757
+2214 1219 23014
+2216 1219 54087
+2217 1219 46852
+2218 1219 64236
+2219 1219 5598
+2220 1219 47134
+2221 1219 2821
+2258 1219 17912
+2259 1219 39197
+2260 1219 1821
+2262 1219 25592
+2263 1219 65209
+2264 1219 58705
+2265 1219 43468
+2266 1219 39823
+2275 1219 37002
+2313 1219 6717
+2314 1219 44195
+2315 1219 34215
+2316 1219 60005
+2318 1219 61787
+2319 1219 5678
+2320 1219 33547
+2321 1219 15746
+2330 1219 28442
+2340 1219 56961
+2379 1219 47533
+2380 1219 44853
+2381 1219 52569
+2382 1219 43560
+2383 1219 11424
+2385 1219 35477
+2386 1219 31481
+2387 1219 1389
+2396 1219 64437
+2406 1219 20221
+2417 1219 28781
+2457 1219 55685
+2458 1219 35426
+2459 1219 22371
+2460 1219 64867
+2461 1219 46086
+2462 1219 52252
+2463 1219 39529
+2464 1219 24736
+2465 1219 63887
+2474 1219 39641
+2484 1219 3993
+2495 1219 63984
+2507 1219 14285
+3730 1219 27852657
+1121 1220 1
+1122 1220 1
+1123 1220 1
+1124 1220 1
+1125 1220 1
+1126 1220 1
+1127 1220 1
+1128 1220 1
+1129 1220 1
+1130 1220 2
+1131 1220 1
+1543 1220 32754
+1544 1220 62667
+1545 1220 2844
+1546 1220 2844
+1822 1220 32754
+1823 1220 62667
+1824 1220 2844
+1825 1220 2844
+1827 1220 29913
+1828 1220 1
+1829 1220 2844
+1899 1220 65515
+1954 1220 65515
+1955 1220 65512
+2020 1220 65515
+2021 1220 65512
+2022 1220 65512
+2178 1220 6
+2179 1220 6
+2180 1220 24572
+2181 1220 360
+2182 1220 354
+2183 1220 65519
+2184 1220 21367
+2185 1220 55903
+2186 1220 55549
+2187 1220 60066
+2188 1220 15914
+2189 1220 44397
+2190 1220 33711
+2191 1220 43683
+2192 1220 19111
+2193 1220 40480
+2194 1220 3442
+2195 1220 17322
+2196 1220 13651
+2197 1220 35489
+2260 1220 49131
+2315 1220 49131
+2316 1220 60035
+2381 1220 24564
+2382 1220 27291
+2383 1220 16373
+2457 1220 46408
+2458 1220 38131
+2459 1220 57626
+2460 1220 21415
+2461 1220 47778
+2462 1220 60061
+2495 1220 28657
+2507 1220 44693
+3731 1220 27852657
+1122 1221 1
+1123 1221 1
+1124 1221 1
+1125 1221 1
+1127 1221 1
+1128 1221 1
+1129 1221 1
+1130 1221 2
+1131 1221 1
+1828 1221 63715
+1829 1221 15989
+1830 1221 15989
+1899 1221 62404
+1901 1221 17281
+1904 1221 28460
+1905 1221 28460
+1914 1221 28460
+1952 1221 49315
+1953 1221 49315
+1954 1221 46198
+1955 1221 35115
+1958 1221 39215
+1959 1221 41932
+1960 1221 41932
+1969 1221 4871
+1979 1221 41932
+2018 1221 49315
+2019 1221 49315
+2020 1221 46198
+2021 1221 35115
+2022 1221 35115
+2024 1221 39215
+2025 1221 41932
+2026 1221 41932
+2035 1221 4871
+2045 1221 18343
+2056 1221 41932
+2178 1221 19375
+2179 1221 19375
+2180 1221 56050
+2181 1221 42175
+2182 1221 22800
+2183 1221 11290
+2184 1221 62096
+2185 1221 35323
+2186 1221 12523
+2187 1221 11290
+2188 1221 11371
+2189 1221 34292
+2190 1221 49829
+2191 1221 37306
+2192 1221 11290
+2193 1221 53857
+2194 1221 28922
+2195 1221 32449
+2196 1221 52903
+2197 1221 15597
+2200 1221 63082
+2201 1221 63706
+2202 1221 50085
+2203 1221 11880
+2207 1221 44079
+2208 1221 44703
+2209 1221 31082
+2210 1221 44777
+2211 1221 16148
+2212 1221 16148
+2213 1221 30371
+2214 1221 63148
+2216 1221 15211
+2217 1221 1590
+2218 1221 15909
+2219 1221 554
+2220 1221 28316
+2221 1221 12168
+2258 1221 16248
+2259 1221 49025
+2260 1221 44321
+2262 1221 20450
+2263 1221 32330
+2264 1221 18219
+2265 1221 32814
+2266 1221 14021
+2275 1221 1853
+2313 1221 62478
+2314 1221 29734
+2315 1221 25030
+2316 1221 43181
+2318 1221 53757
+2319 1221 56946
+2320 1221 51686
+2321 1221 56415
+2330 1221 59340
+2340 1221 57487
+2379 1221 26638
+2380 1221 53017
+2381 1221 17031
+2382 1221 13691
+2383 1221 37699
+2385 1221 57373
+2386 1221 25034
+2387 1221 6301
+2396 1221 56470
+2406 1221 20347
+2417 1221 28381
+2457 1221 10511
+2458 1221 44751
+2459 1221 37470
+2460 1221 40314
+2461 1221 51159
+2462 1221 33137
+2463 1221 49843
+2464 1221 1427
+2465 1221 31116
+2474 1221 11981
+2484 1221 8546
+2495 1221 24879
+2507 1221 51883
+3732 1221 27852657
+1123 1222 1
+1130 1222 55216
+1131 1222 55216
+1167 1222 20878
+1196 1222 41568
+1345 1222 29369
+2189 1222 32754
+2190 1222 65510
+2191 1222 65510
+2196 1222 33640
+2197 1222 14837
+2202 1222 31447
+2208 1222 8249
+2209 1222 24574
+2210 1222 43006
+2211 1222 29949
+2212 1222 29949
+2213 1222 22880
+2214 1222 5194
+2216 1222 64147
+2217 1222 10555
+2218 1222 51680
+2219 1222 21127
+2220 1222 63999
+2221 1222 34050
+2258 1222 34142
+2259 1222 6741
+2260 1222 21115
+2262 1222 19194
+2263 1222 61503
+2264 1222 3087
+2265 1222 10121
+2266 1222 23350
+2275 1222 54821
+2313 1222 28070
+2314 1222 27838
+2315 1222 35966
+2316 1222 14141
+2318 1222 26434
+2319 1222 52612
+2320 1222 24534
+2321 1222 56075
+2330 1222 55044
+2340 1222 223
+2379 1222 56228
+2380 1222 26325
+2381 1222 11815
+2382 1222 14733
+2383 1222 29202
+2385 1222 62741
+2386 1222 15424
+2387 1222 1924
+2396 1222 3320
+2406 1222 9045
+2417 1222 8822
+2457 1222 59741
+2458 1222 4758
+2459 1222 7870
+2460 1222 16626
+2461 1222 51870
+2462 1222 1879
+2463 1222 25368
+2464 1222 37875
+2465 1222 15208
+2474 1222 59799
+2484 1222 35328
+2495 1222 42414
+2507 1222 58440
+3733 1222 27852657
+1124 1223 1
+1125 1223 1
+1130 1223 10354
+1131 1223 10353
+1167 1223 34941
+1196 1223 14543
+1345 1223 47021
+2189 1223 22339
+2190 1223 32765
+2191 1223 32765
+2196 1223 29714
+2197 1223 18788
+2202 1223 56692
+2208 1223 43182
+2209 1223 53642
+2210 1223 5532
+2211 1223 55332
+2212 1223 55332
+2213 1223 61025
+2214 1223 1802
+2216 1223 17846
+2217 1223 28650
+2218 1223 13020
+2219 1223 58493
+2220 1223 48678
+2221 1223 58867
+2258 1223 12347
+2259 1223 3018
+2260 1223 38240
+2262 1223 40835
+2263 1223 62837
+2264 1223 13605
+2265 1223 23090
+2266 1223 59381
+2275 1223 514
+2313 1223 24612
+2314 1223 16611
+2315 1223 38339
+2316 1223 5252
+2318 1223 40011
+2319 1223 17836
+2320 1223 27608
+2321 1223 12673
+2330 1223 828
+2340 1223 314
+2379 1223 36203
+2380 1223 34915
+2381 1223 35879
+2382 1223 21957
+2383 1223 14456
+2385 1223 50346
+2386 1223 5347
+2387 1223 62160
+2396 1223 15394
+2406 1223 15855
+2417 1223 15541
+2457 1223 25277
+2458 1223 15345
+2459 1223 48168
+2460 1223 28755
+2461 1223 45377
+2462 1223 51275
+2463 1223 8006
+2464 1223 563
+2465 1223 41600
+2474 1223 20496
+2484 1223 38363
+2495 1223 62374
+2507 1223 60943
+3734 1223 27852657
+1125 1224 1
+1130 1224 145
+1131 1224 144
+1162 1224 6890
+1192 1224 52007
+1196 1224 41032
+1345 1224 2422
+1830 1224 42056
+2189 1224 10780
+2190 1224 58612
+2191 1224 58554
+2196 1224 7003
+2197 1224 25125
+2202 1224 1148
+2208 1224 47747
+2209 1224 940
+2210 1224 38532
+2211 1224 42289
+2212 1224 42289
+2213 1224 25603
+2214 1224 30908
+2216 1224 33086
+2217 1224 25360
+2218 1224 48317
+2219 1224 25873
+2220 1224 37944
+2221 1224 61176
+2258 1224 46011
+2259 1224 42075
+2260 1224 44219
+2262 1224 24593
+2263 1224 34719
+2264 1224 44949
+2265 1224 2341
+2266 1224 8321
+2275 1224 12666
+2313 1224 48286
+2314 1224 49630
+2315 1224 33712
+2316 1224 9075
+2318 1224 22702
+2319 1224 41233
+2320 1224 22021
+2321 1224 59528
+2330 1224 32058
+2340 1224 19392
+2379 1224 42561
+2380 1224 50860
+2381 1224 40866
+2382 1224 32965
+2383 1224 35588
+2385 1224 57577
+2386 1224 46180
+2387 1224 42235
+2396 1224 45043
+2406 1224 17944
+2417 1224 64073
+2457 1224 27919
+2458 1224 43689
+2459 1224 53712
+2460 1224 6220
+2461 1224 21955
+2462 1224 60662
+2463 1224 61135
+2464 1224 24300
+2465 1224 7396
+2474 1224 51763
+2484 1224 29223
+2495 1224 18450
+2507 1224 22834
+3735 1224 27852657
+1126 1225 1
+1167 1225 20187
+1196 1225 57940
+1345 1225 37055
+2196 1225 61646
+2197 1225 31683
+2202 1225 40553
+2209 1225 9396
+2210 1225 20716
+2211 1225 45067
+2212 1225 45067
+2213 1225 7219
+2214 1225 3284
+2216 1225 39935
+2217 1225 51695
+2218 1225 4870
+2219 1225 51351
+2220 1225 65177
+2221 1225 20110
+2258 1225 38560
+2259 1225 15104
+2260 1225 15104
+2262 1225 28140
+2263 1225 9685
+2264 1225 45278
+2265 1225 25348
+2266 1225 27912
+2275 1225 7802
+2313 1225 17389
+2314 1225 19471
+2315 1225 19471
+2316 1225 19471
+2318 1225 55282
+2319 1225 61844
+2320 1225 53109
+2321 1225 35284
+2330 1225 27358
+2340 1225 19556
+2379 1225 51786
+2380 1225 41985
+2381 1225 41985
+2382 1225 41985
+2383 1225 37813
+2385 1225 32756
+2386 1225 63387
+2387 1225 53062
+2396 1225 58842
+2406 1225 9064
+2417 1225 55029
+2457 1225 54287
+2458 1225 5337
+2459 1225 5337
+2460 1225 5337
+2461 1225 61025
+2462 1225 25638
+2463 1225 61154
+2464 1225 54886
+2465 1225 15251
+2474 1225 17845
+2484 1225 46069
+2495 1225 32863
+2507 1225 48959
+3736 1225 27852657
+1127 1226 1
+1130 1226 43681
+1131 1226 43681
+1167 1226 26301
+1196 1226 31288
+1345 1226 110
+2196 1226 1179
+2197 1226 18937
+2202 1226 63096
+2209 1226 37012
+2210 1226 20171
+2211 1226 6047
+2212 1226 6047
+2213 1226 29079
+2214 1226 39113
+2216 1226 16436
+2217 1226 45823
+2218 1226 22128
+2219 1226 30601
+2220 1226 24190
+2221 1226 18143
+2258 1226 661
+2259 1226 45825
+2260 1226 51569
+2262 1226 47912
+2263 1226 62187
+2264 1226 33990
+2265 1226 23429
+2266 1226 46534
+2275 1226 28391
+2313 1226 3693
+2314 1226 48533
+2315 1226 976
+2316 1226 976
+2318 1226 10259
+2319 1226 5443
+2320 1226 34723
+2321 1226 47773
+2330 1226 45992
+2340 1226 17601
+2379 1226 28269
+2380 1226 8879
+2381 1226 12637
+2382 1226 12637
+2383 1226 12512
+2385 1226 41504
+2386 1226 33254
+2387 1226 11511
+2396 1226 9913
+2406 1226 21413
+2417 1226 3812
+2457 1226 48641
+2458 1226 30192
+2459 1226 42606
+2460 1226 42606
+2461 1226 13970
+2462 1226 22086
+2463 1226 42800
+2464 1226 28195
+2465 1226 35762
+2474 1226 31477
+2484 1226 48664
+2495 1226 41506
+2507 1226 5756
+3737 1226 27852657
+1128 1227 1
+1130 1227 28737
+1131 1227 28737
+1167 1227 54030
+1196 1227 55705
+1345 1227 48843
+2196 1227 27971
+2197 1227 31853
+2202 1227 38204
+2208 1227 36146
+2209 1227 47020
+2210 1227 51155
+2211 1227 58568
+2212 1227 58568
+2213 1227 61412
+2214 1227 46148
+2216 1227 48003
+2217 1227 39029
+2218 1227 30753
+2219 1227 36176
+2220 1227 9970
+2221 1227 16923
+2258 1227 6740
+2259 1227 8876
+2260 1227 3132
+2262 1227 18761
+2263 1227 59927
+2264 1227 55308
+2265 1227 13678
+2266 1227 50901
+2275 1227 33978
+2313 1227 50513
+2314 1227 57774
+2315 1227 39810
+2316 1227 55195
+2318 1227 46407
+2319 1227 44046
+2320 1227 48295
+2321 1227 7467
+2330 1227 23378
+2340 1227 54921
+2379 1227 6161
+2380 1227 28425
+2381 1227 24667
+2382 1227 64361
+2383 1227 19370
+2385 1227 15424
+2386 1227 48190
+2387 1227 18542
+2396 1227 12265
+2406 1227 16913
+2417 1227 27513
+2457 1227 54169
+2458 1227 48008
+2459 1227 35594
+2460 1227 26679
+2461 1227 4387
+2462 1227 62496
+2463 1227 10445
+2464 1227 19466
+2465 1227 46348
+2474 1227 30291
+2484 1227 7501
+2495 1227 59118
+2507 1227 12963
+3738 1227 27852657
+1129 1228 1
+1130 1228 58625
+1131 1228 58625
+1167 1228 28245
+1196 1228 24171
+1345 1228 49545
+2196 1228 54563
+2197 1228 13544
+2202 1228 54384
+2208 1228 29375
+2209 1228 31792
+2210 1228 11786
+2211 1228 7696
+2212 1228 7696
+2213 1228 5764
+2214 1228 40730
+2216 1228 37618
+2217 1228 8305
+2218 1228 49063
+2219 1228 60537
+2220 1228 3678
+2221 1228 61503
+2258 1228 54817
+2259 1228 50130
+2260 1228 50130
+2262 1228 22407
+2263 1228 22514
+2264 1228 29304
+2265 1228 65233
+2266 1228 21920
+2275 1228 25938
+2313 1228 36435
+2314 1228 28447
+2315 1228 28447
+2316 1228 13062
+2318 1228 59264
+2319 1228 57187
+2320 1228 26164
+2321 1228 13226
+2330 1228 31628
+2340 1228 5690
+2379 1228 43525
+2380 1228 40806
+2381 1228 40806
+2382 1228 1112
+2383 1228 52069
+2385 1228 23603
+2386 1228 6911
+2387 1228 46448
+2396 1228 10159
+2406 1228 21236
+2417 1228 15546
+2457 1228 23623
+2458 1228 11406
+2459 1228 11406
+2460 1228 20321
+2461 1228 31812
+2462 1228 29848
+2463 1228 19325
+2464 1228 60648
+2465 1228 24053
+2474 1228 28207
+2484 1228 203
+2495 1228 37931
+2507 1228 51196
+3739 1228 27852657
+1130 1229 1
+1131 1229 1
+2134 1229 44539
+2161 1229 44539
+2197 1229 21504
+2242 1229 62459
+2297 1229 10052
+2355 1229 34223
+2356 1229 6670
+2357 1229 6670
+2375 1229 53439
+2383 1229 6030
+2390 1229 43037
+2392 1229 38061
+2395 1229 54123
+2396 1229 54123
+2397 1229 54123
+2398 1229 23118
+2399 1229 63806
+2400 1229 44073
+2401 1229 17582
+2404 1229 27607
+2405 1229 18527
+2406 1229 18527
+2407 1229 7129
+2408 1229 18527
+2409 1229 23118
+2410 1229 63806
+2411 1229 44073
+2412 1229 17582
+2413 1229 58127
+2415 1229 27607
+2416 1229 18527
+2417 1229 18527
+2418 1229 7129
+2419 1229 37054
+2420 1229 18527
+2422 1229 11612
+2423 1229 11612
+2424 1229 10377
+2425 1229 55750
+2426 1229 44138
+2427 1229 46204
+2428 1229 51458
+2429 1229 53296
+2430 1229 9158
+2431 1229 46204
+2432 1229 51458
+2433 1229 50131
+2434 1229 63931
+2435 1229 54773
+2436 1229 46204
+2437 1229 51458
+2438 1229 28094
+2439 1229 44666
+2440 1229 42860
+2441 1229 64360
+2444 1229 61751
+2445 1229 54722
+2446 1229 60725
+2447 1229 54554
+2451 1229 34107
+2452 1229 27078
+2453 1229 33081
+2454 1229 24020
+2455 1229 56921
+2456 1229 56921
+2457 1229 12137
+2458 1229 36593
+2460 1229 44267
+2461 1229 12480
+2462 1229 5056
+2463 1229 60329
+2464 1229 11330
+2465 1229 19930
+2466 1229 61541
+2467 1229 20476
+2468 1229 41836
+2470 1229 31301
+2471 1229 56766
+2472 1229 16864
+2473 1229 13483
+2474 1229 4873
+2475 1229 50464
+2476 1229 36902
+2477 1229 37034
+2478 1229 63216
+2479 1229 36585
+2481 1229 33687
+2482 1229 51464
+2483 1229 12207
+2484 1229 3353
+2485 1229 13281
+2486 1229 28338
+2487 1229 51283
+2488 1229 1999
+2489 1229 62200
+2490 1229 44854
+2491 1229 31952
+2493 1229 37155
+2494 1229 33002
+2495 1229 59739
+2496 1229 23884
+2497 1229 7259
+2498 1229 44442
+2499 1229 63397
+2500 1229 70
+2501 1229 27966
+2502 1229 39410
+2503 1229 64491
+2504 1229 44947
+2505 1229 50444
+2506 1229 20084
+2507 1229 25702
+2508 1229 62645
+2509 1229 25937
+2510 1229 20216
+2511 1229 42173
+3740 1229 27852657
+1132 1230 1
+1133 1230 1
+1270 1230 1
+1271 1230 1
+1272 1230 1
+1476 1230 1
+1477 1230 1
+1479 1230 1
+1482 1230 1
+1755 1230 1
+1756 1230 1
+1758 1230 1
+1761 1230 1
+1765 1230 1
+2115 1230 32761
+2116 1230 32761
+2118 1230 32761
+2121 1230 32761
+2125 1230 32761
+2130 1230 32761
+2442 1230 1
+2443 1230 24573
+3741 1230 27852657
+1133 1231 1
+1271 1231 56146
+1273 1231 9375
+1477 1231 63928
+1480 1231 1593
+1484 1231 63928
+1756 1231 9030
+1759 1231 56491
+1763 1231 9030
+1768 1231 56491
+2116 1231 58237
+2119 1231 7284
+2122 1231 31213
+2123 1231 23929
+2126 1231 47392
+2127 1231 62633
+2128 1231 38704
+2133 1231 54410
+2134 1231 15706
+2139 1231 26128
+2165 1231 62336
+2166 1231 34779
+2167 1231 14093
+2168 1231 58428
+2175 1231 58428
+2198 1231 37233
+2199 1231 15590
+2201 1231 8164
+2202 1231 21818
+2203 1231 11569
+2204 1231 53512
+2211 1231 38556
+2219 1231 45649
+2243 1231 21741
+2244 1231 37580
+2245 1231 33162
+2247 1231 36129
+2248 1231 56117
+2249 1231 10666
+2256 1231 51015
+2264 1231 24626
+2273 1231 44498
+2298 1231 13177
+2299 1231 47115
+2300 1231 7801
+2301 1231 57248
+2303 1231 7031
+2304 1231 49182
+2311 1231 3749
+2319 1231 58450
+2328 1231 32084
+2338 1231 53107
+2364 1231 16583
+2365 1231 46439
+2366 1231 19464
+2367 1231 42557
+2368 1231 45494
+2370 1231 11627
+2377 1231 20219
+2385 1231 10767
+2394 1231 22992
+2404 1231 61081
+2415 1231 7974
+2442 1231 36068
+2443 1231 14107
+2444 1231 28657
+2445 1231 20415
+2446 1231 31919
+2447 1231 44816
+2448 1231 45373
+2455 1231 27220
+2463 1231 703
+2472 1231 6707
+2482 1231 49963
+2493 1231 57247
+2505 1231 4303
+3742 1231 27852657
+1134 1232 1
+1139 1232 36421
+1156 1232 39501
+1160 1232 15488
+1164 1232 14930
+1170 1232 503
+1177 1232 503
+1184 1232 46956
+1185 1232 34662
+1187 1232 57053
+1190 1232 11318
+1193 1232 56538
+1198 1232 58186
+1205 1232 63446
+1213 1232 62943
+1329 1232 56204
+1330 1232 61015
+1331 1232 5436
+1337 1232 4478
+1342 1232 13094
+1348 1232 43432
+1355 1232 58734
+1363 1232 26437
+1408 1232 29015
+1540 1232 46455
+1541 1232 40018
+1542 1232 9545
+1545 1232 49133
+1554 1232 8814
+1560 1232 3153
+1567 1232 13701
+1575 1232 64246
+1620 1232 19245
+1675 1232 55751
+1819 1232 35787
+1820 1232 13541
+1821 1232 56759
+1824 1232 53209
+1828 1232 21830
+1839 1232 3524
+1846 1232 37148
+1854 1232 65294
+1899 1232 48082
+1954 1232 17595
+2020 1232 27365
+2180 1232 52726
+2181 1232 35015
+2182 1232 56568
+2185 1232 65117
+2189 1232 14255
+2194 1232 35460
+2200 1232 60330
+2207 1232 1363
+2215 1232 9525
+2260 1232 51739
+2315 1232 40937
+2381 1232 957
+2459 1232 24971
+3743 1232 27852657
+1135 1233 1
+1138 1233 1
+1142 1233 1
+1278 1233 1
+1279 1233 1
+1283 1233 1
+1284 1233 1
+1491 1233 1
+1492 1233 1
+1493 1233 1
+2199 1233 32761
+2244 1233 32761
+2245 1233 32761
+2299 1233 32761
+2300 1233 32761
+2301 1233 32761
+2365 1233 32761
+2366 1233 32761
+2367 1233 32761
+2368 1233 32761
+2443 1233 24572
+2444 1233 24572
+2445 1233 24572
+2446 1233 24572
+2447 1233 24572
+2505 1233 4096
+3744 1233 27852657
+1136 1234 1
+1141 1234 65520
+1144 1234 1
+1806 1234 644
+1841 1234 13571
+1883 1234 54280
+1884 1234 39051
+1886 1234 51717
+1895 1234 16766
+1903 1234 16766
+1912 1234 16766
+1937 1234 36501
+1938 1234 5328
+1939 1234 55620
+1940 1234 61274
+1943 1234 47722
+1950 1234 45994
+1958 1234 45994
+1967 1234 62760
+1977 1234 45994
+2003 1234 36501
+2004 1234 5328
+2005 1234 55620
+2006 1234 61274
+2007 1234 26550
+2009 1234 47722
+2016 1234 45994
+2024 1234 45994
+2033 1234 62760
+2043 1234 26467
+2054 1234 45994
+2124 1234 41252
+2125 1234 41252
+2126 1234 41252
+2127 1234 41252
+2128 1234 41252
+2129 1234 41252
+2133 1234 41252
+2139 1234 9774
+2140 1234 14405
+2164 1234 50682
+2165 1234 50682
+2166 1234 60456
+2167 1234 18047
+2168 1234 53752
+2175 1234 53752
+2198 1234 22725
+2199 1234 62912
+2201 1234 34417
+2202 1234 49042
+2203 1234 65262
+2204 1234 61800
+2211 1234 61707
+2219 1234 7955
+2243 1234 12597
+2244 1234 48852
+2245 1234 32295
+2247 1234 54739
+2248 1234 33300
+2249 1234 56015
+2256 1234 20207
+2264 1234 20178
+2273 1234 12223
+2298 1234 36917
+2299 1234 7651
+2300 1234 56615
+2301 1234 25018
+2303 1234 6553
+2304 1234 14742
+2311 1234 22927
+2319 1234 1613
+2328 1234 23904
+2338 1234 11681
+2364 1234 16525
+2365 1234 27931
+2366 1234 64986
+2367 1234 25033
+2368 1234 24622
+2370 1234 51662
+2377 1234 29699
+2385 1234 17627
+2394 1234 41579
+2404 1234 53206
+2415 1234 41525
+2442 1234 19763
+2443 1234 45652
+2444 1234 32747
+2445 1234 32748
+2446 1234 24651
+2447 1234 47353
+2448 1234 45437
+2455 1234 11603
+2463 1234 49649
+2472 1234 49015
+2482 1234 12636
+2493 1234 3371
+2505 1234 4566
+3745 1234 27852657
+1137 1235 1
+1495 1235 31311
+1766 1235 25638
+1767 1235 30561
+1768 1235 30561
+1806 1235 43354
+1841 1235 14596
+1883 1235 12311
+1884 1235 45426
+1886 1235 57655
+1895 1235 53350
+1903 1235 53350
+1912 1235 53350
+1937 1235 62852
+1938 1235 1327
+1939 1235 44073
+1940 1235 47911
+1943 1235 13547
+1950 1235 4051
+1958 1235 4051
+1967 1235 57401
+1977 1235 4051
+2003 1235 62852
+2004 1235 1327
+2005 1235 44073
+2006 1235 47911
+2007 1235 44499
+2009 1235 13547
+2016 1235 4051
+2024 1235 4051
+2033 1235 57401
+2043 1235 8102
+2054 1235 4051
+2115 1235 53402
+2116 1235 53402
+2117 1235 30691
+2118 1235 3264
+2119 1235 15383
+2120 1235 50375
+2121 1235 1562
+2122 1235 63053
+2123 1235 47670
+2124 1235 2380
+2125 1235 7102
+2126 1235 57271
+2127 1235 26180
+2128 1235 44031
+2129 1235 39446
+2130 1235 61694
+2131 1235 7757
+2132 1235 31183
+2133 1235 44107
+2134 1235 76
+2137 1235 43531
+2138 1235 56652
+2139 1235 12990
+2140 1235 1767
+2164 1235 61505
+2165 1235 9105
+2166 1235 30964
+2167 1235 57799
+2168 1235 40785
+2175 1235 40785
+2198 1235 5870
+2199 1235 41321
+2201 1235 21550
+2202 1235 63071
+2203 1235 43148
+2204 1235 46855
+2211 1235 8693
+2219 1235 33429
+2243 1235 43423
+2244 1235 46629
+2245 1235 24121
+2247 1235 38225
+2248 1235 14259
+2249 1235 30684
+2256 1235 3201
+2264 1235 29105
+2273 1235 61197
+2298 1235 43890
+2299 1235 39822
+2300 1235 26169
+2301 1235 43675
+2303 1235 8346
+2304 1235 46445
+2311 1235 23578
+2319 1235 59863
+2328 1235 52292
+2338 1235 56616
+2364 1235 27221
+2365 1235 20697
+2366 1235 52112
+2367 1235 27937
+2368 1235 18177
+2370 1235 60888
+2377 1235 46689
+2385 1235 34297
+2394 1235 6
+2404 1235 10337
+2415 1235 19242
+2442 1235 53437
+2443 1235 35495
+2444 1235 17487
+2445 1235 1928
+2446 1235 12312
+2447 1235 43061
+2448 1235 6635
+2455 1235 11244
+2463 1235 24047
+2472 1235 12095
+2482 1235 6444
+2493 1235 31300
+2505 1235 58721
+3746 1235 27852657
+1138 1236 1
+1495 1236 22521
+1766 1236 9527
+1767 1236 48720
+1768 1236 48720
+1806 1236 40517
+1841 1236 581
+1883 1236 41969
+1884 1236 48093
+1886 1236 1891
+1895 1236 18276
+1903 1236 18276
+1912 1236 18276
+1937 1236 57000
+1938 1236 5969
+1939 1236 15963
+1940 1236 48901
+1943 1236 58981
+1950 1236 508
+1958 1236 508
+1967 1236 18784
+1977 1236 508
+2003 1236 57000
+2004 1236 5969
+2005 1236 15963
+2006 1236 48901
+2007 1236 21452
+2009 1236 58981
+2016 1236 508
+2024 1236 508
+2033 1236 18784
+2043 1236 1016
+2054 1236 508
+2115 1236 33819
+2116 1236 33819
+2117 1236 42643
+2118 1236 13290
+2119 1236 44992
+2120 1236 10641
+2121 1236 32777
+2122 1236 18309
+2123 1236 38838
+2124 1236 10641
+2125 1236 44763
+2126 1236 56658
+2127 1236 31558
+2128 1236 58241
+2129 1236 43963
+2130 1236 19307
+2131 1236 43719
+2132 1236 38774
+2133 1236 16390
+2134 1236 23670
+2137 1236 64249
+2138 1236 16703
+2139 1236 34557
+2140 1236 63343
+2164 1236 14368
+2165 1236 32343
+2166 1236 50197
+2167 1236 63503
+2168 1236 45060
+2175 1236 45060
+2198 1236 12409
+2199 1236 16064
+2201 1236 37046
+2202 1236 19552
+2203 1236 11993
+2204 1236 51070
+2211 1236 64448
+2219 1236 19388
+2243 1236 5604
+2244 1236 37572
+2245 1236 28559
+2247 1236 39963
+2248 1236 44933
+2249 1236 13230
+2256 1236 8166
+2264 1236 2416
+2273 1236 48549
+2298 1236 64275
+2299 1236 64883
+2300 1236 21283
+2301 1236 57427
+2303 1236 24151
+2304 1236 39511
+2311 1236 694
+2319 1236 1582
+2328 1236 62946
+2338 1236 14397
+2364 1236 39922
+2365 1236 24616
+2366 1236 24347
+2367 1236 45100
+2368 1236 29450
+2370 1236 35363
+2377 1236 19077
+2385 1236 19166
+2394 1236 44229
+2404 1236 32211
+2415 1236 17814
+2442 1236 1025
+2443 1236 6513
+2444 1236 49960
+2445 1236 56773
+2446 1236 46474
+2447 1236 4422
+2448 1236 1080
+2455 1236 64024
+2463 1236 61210
+2472 1236 33827
+2482 1236 2166
+2493 1236 15093
+2505 1236 15890
+3747 1236 27852657
+1139 1237 1
+1557 1237 27565
+1828 1237 37583
+1829 1237 63466
+1830 1237 63466
+1847 1237 21906
+1848 1237 20804
+1856 1237 25552
+1899 1237 2387
+1901 1237 36769
+1904 1237 1280
+1905 1237 1280
+1914 1237 1280
+1952 1237 43243
+1953 1237 59539
+1954 1237 49617
+1955 1237 5587
+1958 1237 5868
+1959 1237 46386
+1960 1237 46386
+1969 1237 47666
+1979 1237 46386
+2018 1237 43243
+2019 1237 59539
+2020 1237 49617
+2021 1237 5587
+2022 1237 39340
+2024 1237 5868
+2025 1237 46386
+2026 1237 46386
+2035 1237 47666
+2045 1237 27251
+2056 1237 46386
+2178 1237 30944
+2179 1237 30944
+2180 1237 34017
+2181 1237 25886
+2182 1237 60463
+2183 1237 4437
+2184 1237 18300
+2185 1237 33289
+2186 1237 38347
+2187 1237 4437
+2188 1237 18300
+2189 1237 11431
+2190 1237 36874
+2191 1237 64048
+2192 1237 4437
+2193 1237 18300
+2194 1237 55149
+2195 1237 40271
+2196 1237 30863
+2197 1237 32336
+2200 1237 48037
+2201 1237 12210
+2202 1237 15557
+2203 1237 35284
+2207 1237 17547
+2208 1237 27121
+2209 1237 58059
+2210 1237 36962
+2211 1237 56687
+2212 1237 56687
+2213 1237 4315
+2214 1237 42778
+2216 1237 45729
+2217 1237 1203
+2218 1237 52719
+2219 1237 2392
+2220 1237 42291
+2221 1237 51125
+2258 1237 45157
+2259 1237 18099
+2260 1237 48525
+2262 1237 15747
+2263 1237 50883
+2264 1237 38099
+2265 1237 35321
+2266 1237 58824
+2275 1237 7699
+2313 1237 28447
+2314 1237 13264
+2315 1237 18542
+2316 1237 49068
+2318 1237 46223
+2319 1237 7786
+2320 1237 54396
+2321 1237 21703
+2330 1237 6896
+2340 1237 64718
+2379 1237 31696
+2380 1237 34316
+2381 1237 61462
+2382 1237 9348
+2383 1237 10096
+2385 1237 34658
+2386 1237 2977
+2387 1237 1521
+2396 1237 53501
+2406 1237 61645
+2417 1237 62448
+2457 1237 15796
+2458 1237 57868
+2459 1237 32794
+2460 1237 58887
+2461 1237 25454
+2462 1237 30065
+2463 1237 5626
+2464 1237 47812
+2465 1237 16553
+2474 1237 7252
+2484 1237 15616
+2495 1237 44323
+2507 1237 58805
+3748 1237 27852657
+1140 1238 1
+1141 1238 1
+1144 1238 65520
+1557 1238 10309
+1828 1238 17587
+1829 1238 31596
+1830 1238 31596
+1847 1238 43615
+1848 1238 22824
+1856 1238 30208
+1899 1238 37310
+1901 1238 43493
+1904 1238 36653
+1905 1238 36653
+1914 1238 36653
+1952 1238 32876
+1953 1238 8833
+1954 1238 19662
+1955 1238 9984
+1958 1238 31028
+1959 1238 1852
+1960 1238 1852
+1969 1238 38505
+1979 1238 1852
+2018 1238 32876
+2019 1238 8833
+2020 1238 19662
+2021 1238 9984
+2022 1238 24244
+2024 1238 31028
+2025 1238 1852
+2026 1238 1852
+2035 1238 38505
+2045 1238 3704
+2056 1238 1852
+2178 1238 50900
+2179 1238 50900
+2180 1238 301
+2181 1238 44096
+2182 1238 58717
+2183 1238 38278
+2184 1238 13322
+2185 1238 62118
+2186 1238 3401
+2187 1238 38278
+2188 1238 13322
+2189 1238 54525
+2190 1238 18764
+2191 1238 15363
+2192 1238 38278
+2193 1238 13322
+2194 1238 20040
+2195 1238 1403
+2196 1238 41329
+2197 1238 25966
+2200 1238 16191
+2201 1238 21038
+2202 1238 12138
+2203 1238 57198
+2207 1238 53074
+2208 1238 12520
+2209 1238 26524
+2210 1238 8648
+2211 1238 8255
+2212 1238 8255
+2213 1238 24725
+2214 1238 16765
+2216 1238 5414
+2217 1238 41438
+2218 1238 39156
+2219 1238 41242
+2220 1238 54158
+2221 1238 45903
+2258 1238 30587
+2259 1238 22627
+2260 1238 51049
+2262 1238 63597
+2263 1238 36274
+2264 1238 14600
+2265 1238 42943
+2266 1238 58642
+2275 1238 12739
+2313 1238 11629
+2314 1238 57753
+2315 1238 25254
+2316 1238 52066
+2318 1238 63921
+2319 1238 4205
+2320 1238 61850
+2321 1238 56282
+2330 1238 4984
+2340 1238 57766
+2379 1238 26303
+2380 1238 38463
+2381 1238 41587
+2382 1238 45621
+2383 1238 8229
+2385 1238 12476
+2386 1238 38677
+2387 1238 26249
+2396 1238 49219
+2406 1238 8439
+2417 1238 16194
+2457 1238 32968
+2458 1238 53709
+2459 1238 60560
+2460 1238 64858
+2461 1238 23932
+2462 1238 7053
+2463 1238 8518
+2464 1238 59395
+2465 1238 58540
+2474 1238 44117
+2484 1238 56083
+2495 1238 15455
+2507 1238 807
+3749 1238 27852657
+1141 1239 1
+1162 1239 43337
+1192 1239 28743
+1196 1239 29510
+1345 1239 45124
+1830 1239 47962
+2189 1239 1785
+2190 1239 18278
+2191 1239 15078
+2196 1239 909
+2197 1239 7701
+2202 1239 25737
+2208 1239 32333
+2209 1239 9898
+2210 1239 38836
+2211 1239 44110
+2212 1239 44110
+2213 1239 36897
+2214 1239 27161
+2216 1239 33200
+2217 1239 15596
+2218 1239 17666
+2219 1239 12413
+2220 1239 47914
+2221 1239 3804
+2258 1239 8874
+2259 1239 13121
+2260 1239 24538
+2262 1239 8885
+2263 1239 63236
+2264 1239 20745
+2265 1239 49250
+2266 1239 29477
+2275 1239 25673
+2313 1239 60883
+2314 1239 41854
+2315 1239 36240
+2316 1239 10114
+2318 1239 60949
+2319 1239 35971
+2320 1239 59921
+2321 1239 25726
+2330 1239 57179
+2340 1239 31506
+2379 1239 63574
+2380 1239 11155
+2381 1239 5671
+2382 1239 1896
+2383 1239 8192
+2385 1239 49090
+2386 1239 9607
+2387 1239 39398
+2396 1239 17237
+2406 1239 1711
+2417 1239 35726
+2457 1239 57387
+2458 1239 15168
+2459 1239 15764
+2460 1239 1432
+2461 1239 43534
+2462 1239 57519
+2463 1239 10665
+2464 1239 8227
+2465 1239 7176
+2474 1239 57048
+2484 1239 58923
+2495 1239 44578
+2507 1239 44053
+3750 1239 27852657
+1142 1240 1
+1283 1240 1
+1284 1240 1
+1491 1240 1
+1492 1240 1
+2130 1240 43681
+2131 1240 43681
+2132 1240 43681
+2133 1240 43681
+2134 1240 43681
+2199 1240 54601
+2244 1240 54601
+2245 1240 54601
+2299 1240 54601
+2300 1240 54601
+2365 1240 54601
+2366 1240 54601
+2443 1240 12286
+2444 1240 12286
+2445 1240 30031
+2446 1240 30031
+2447 1240 42317
+2505 1240 23888
+3751 1240 27852657
+1143 1241 1
+1144 1241 1
+2375 1241 40385
+2383 1241 27039
+2390 1241 47648
+2392 1241 37787
+2395 1241 45443
+2396 1241 45443
+2397 1241 45443
+2398 1241 20881
+2399 1241 20881
+2400 1241 3008
+2401 1241 3008
+2404 1241 39410
+2405 1241 59969
+2406 1241 59969
+2407 1241 39891
+2408 1241 59969
+2409 1241 20881
+2410 1241 20881
+2411 1241 3008
+2412 1241 3008
+2413 1241 30047
+2415 1241 39410
+2416 1241 59969
+2417 1241 59969
+2418 1241 39891
+2419 1241 54417
+2420 1241 59969
+2446 1241 19368
+2447 1241 26572
+2451 1241 11847
+2452 1241 11847
+2453 1241 29871
+2454 1241 10703
+2455 1241 10487
+2456 1241 10487
+2457 1241 13024
+2458 1241 13024
+2460 1241 24481
+2461 1241 18073
+2462 1241 38648
+2463 1241 31102
+2464 1241 41455
+2465 1241 30968
+2466 1241 2773
+2467 1241 2773
+2468 1241 14680
+2470 1241 11239
+2471 1241 36746
+2472 1241 4322
+2473 1241 16637
+2474 1241 62285
+2475 1241 31317
+2476 1241 52393
+2477 1241 52393
+2478 1241 64300
+2479 1241 64300
+2481 1241 57171
+2482 1241 44219
+2483 1241 35369
+2484 1241 10937
+2485 1241 45119
+2486 1241 13802
+2487 1241 47368
+2488 1241 47368
+2489 1241 32473
+2490 1241 32473
+2491 1241 40044
+2493 1241 51983
+2494 1241 19358
+2495 1241 59685
+2496 1241 58429
+2497 1241 14009
+2498 1241 207
+2499 1241 43192
+2500 1241 43192
+2501 1241 38725
+2502 1241 38725
+2503 1241 17074
+2504 1241 35683
+2505 1241 55393
+2506 1241 12225
+2507 1241 17083
+2508 1241 19262
+2509 1241 42860
+2510 1241 54741
+2511 1241 19199
+3752 1241 27852657
+1144 1242 1
+1167 1242 41549
+1196 1242 15522
+1345 1242 16766
+2196 1242 39556
+2197 1242 6657
+2202 1242 10545
+2209 1242 18691
+2210 1242 6287
+2211 1242 63909
+2212 1242 63909
+2213 1242 57476
+2214 1242 5334
+2216 1242 45923
+2217 1242 1246
+2218 1242 27362
+2219 1242 15375
+2220 1242 44405
+2221 1242 46017
+2258 1242 27467
+2259 1242 6536
+2260 1242 6536
+2262 1242 46488
+2263 1242 25503
+2264 1242 62532
+2265 1242 9052
+2266 1242 8532
+2275 1242 28036
+2313 1242 19437
+2314 1242 1015
+2315 1242 1015
+2316 1242 1015
+2318 1242 47025
+2319 1242 49522
+2320 1242 29492
+2321 1242 29743
+2330 1242 27022
+2340 1242 64507
+2379 1242 60344
+2380 1242 51990
+2381 1242 51990
+2382 1242 51990
+2383 1242 43627
+2385 1242 7476
+2386 1242 33653
+2387 1242 4189
+2396 1242 33903
+2406 1242 58802
+2417 1242 59816
+2457 1242 12204
+2458 1242 54816
+2459 1242 54816
+2460 1242 54816
+2461 1242 53118
+2462 1242 23251
+2463 1242 58632
+2464 1242 14826
+2465 1242 9681
+2474 1242 51392
+2484 1242 15863
+2495 1242 43191
+2507 1242 40577
+3753 1242 27852657
+1145 1243 1
+2463 1243 65520
+3754 1243 27852657
+1146 1244 1
+1147 1244 1
+1148 1244 1
+1149 1244 1
+1150 1244 1
+1170 1244 1
+1171 1244 1
+1172 1244 1
+1173 1244 1
+1199 1244 1
+1200 1244 1
+1201 1244 1
+1350 1244 1
+1351 1244 1
+1563 1244 1
+2204 1244 32761
+2211 1244 32761
+2219 1244 32761
+2264 1244 32761
+2319 1244 32761
+2385 1244 32761
+2463 1244 24573
+3755 1244 27852657
+1147 1245 1
+1178 1245 1
+1179 1245 1
+1210 1245 39112
+1219 1245 26409
+1352 1245 44175
+1360 1245 39411
+1369 1245 29285
+1413 1245 17453
+1414 1245 33638
+1423 1245 30762
+1564 1245 29437
+1572 1245 54149
+1581 1245 59374
+1635 1245 32601
+1678 1245 27937
+1679 1245 34537
+1680 1245 17084
+1681 1245 38973
+1690 1245 63925
+1700 1245 62086
+1843 1245 62917
+1851 1245 1743
+1860 1245 62021
+1914 1245 4598
+1979 1245 3164
+2025 1245 24708
+2026 1245 23163
+2035 1245 60683
+2045 1245 36333
+2056 1245 29734
+2202 1245 8281
+2204 1245 46828
+2208 1245 52522
+2209 1245 2181
+2210 1245 55820
+2211 1245 14303
+2212 1245 18204
+2213 1245 23702
+2214 1245 57725
+2216 1245 27753
+2217 1245 10743
+2218 1245 57996
+2219 1245 21034
+2220 1245 52605
+2221 1245 5050
+2258 1245 1539
+2259 1245 57663
+2260 1245 31016
+2262 1245 8852
+2263 1245 19415
+2264 1245 55134
+2265 1245 55197
+2266 1245 37506
+2275 1245 4196
+2313 1245 9312
+2314 1245 62061
+2315 1245 46833
+2316 1245 48872
+2318 1245 38639
+2319 1245 9325
+2320 1245 38217
+2321 1245 27846
+2330 1245 4197
+2340 1245 4160
+2379 1245 22116
+2380 1245 21837
+2381 1245 7847
+2382 1245 41407
+2383 1245 26427
+2385 1245 53488
+2386 1245 18603
+2387 1245 57355
+2396 1245 43453
+2406 1245 4310
+2417 1245 15670
+2457 1245 7017
+2458 1245 49428
+2459 1245 43651
+2460 1245 5279
+2461 1245 42084
+2462 1245 10117
+2463 1245 35447
+2464 1245 9083
+2465 1245 64489
+2474 1245 60557
+2484 1245 48949
+2495 1245 4207
+2507 1245 24703
+3756 1245 27852657
+1148 1246 1
+1178 1246 65520
+1215 1246 65520
+1352 1246 27231
+1360 1246 38290
+1369 1246 57776
+1413 1246 28138
+1414 1246 17370
+1423 1246 25115
+1564 1246 31530
+1572 1246 33991
+1581 1246 28945
+1635 1246 19347
+1678 1246 40093
+1679 1246 8506
+1680 1246 45889
+1681 1246 62262
+1690 1246 64433
+1700 1246 4680
+1843 1246 44443
+1851 1246 21078
+1860 1246 25174
+1914 1246 5415
+1979 1246 15482
+2025 1246 60349
+2026 1246 33773
+2035 1246 28932
+2045 1246 23587
+2056 1246 12785
+2202 1246 58753
+2204 1246 55636
+2208 1246 12999
+2209 1246 16540
+2210 1246 35840
+2211 1246 16519
+2212 1246 26404
+2213 1246 64604
+2214 1246 55186
+2216 1246 59623
+2217 1246 61638
+2218 1246 17574
+2219 1246 24599
+2220 1246 42226
+2221 1246 12643
+2258 1246 32950
+2259 1246 4392
+2260 1246 4392
+2262 1246 47489
+2263 1246 43384
+2264 1246 15020
+2265 1246 12080
+2266 1246 28357
+2275 1246 31896
+2313 1246 32333
+2314 1246 30898
+2315 1246 30898
+2316 1246 28859
+2318 1246 22664
+2319 1246 18648
+2320 1246 23748
+2321 1246 62990
+2330 1246 36091
+2340 1246 22050
+2379 1246 18694
+2380 1246 20412
+2381 1246 20412
+2382 1246 52373
+2383 1246 40292
+2385 1246 40109
+2386 1246 18041
+2387 1246 12782
+2396 1246 60895
+2406 1246 41483
+2417 1246 61236
+2457 1246 23313
+2458 1246 23538
+2459 1246 23538
+2460 1246 61910
+2461 1246 18068
+2462 1246 4688
+2463 1246 29806
+2464 1246 25566
+2465 1246 27139
+2474 1246 28705
+2484 1246 10790
+2495 1246 45489
+2507 1246 24197
+3757 1246 27852657
+1149 1247 1
+1179 1247 65520
+1215 1247 1
+1352 1247 34307
+1360 1247 31214
+1369 1247 34307
+1413 1247 33746
+1414 1247 45016
+1423 1247 10709
+1564 1247 65288
+1572 1247 233
+1581 1247 65288
+1635 1247 60877
+1678 1247 20975
+1679 1247 57395
+1680 1247 23649
+1681 1247 2357
+1690 1247 36317
+1700 1247 51670
+1843 1247 19622
+1851 1247 45899
+1860 1247 19622
+1914 1247 14229
+1979 1247 23238
+2025 1247 59498
+2026 1247 13867
+2035 1247 12777
+2045 1247 954
+2056 1247 29386
+2202 1247 44211
+2204 1247 54682
+2209 1247 36185
+2210 1247 59926
+2211 1247 52517
+2212 1247 63356
+2213 1247 41763
+2214 1247 18488
+2216 1247 6846
+2217 1247 46555
+2218 1247 59516
+2219 1247 23196
+2220 1247 47123
+2221 1247 49288
+2258 1247 24038
+2259 1247 42233
+2260 1247 42233
+2262 1247 10964
+2263 1247 59141
+2264 1247 18909
+2265 1247 48775
+2266 1247 41713
+2275 1247 65290
+2313 1247 35294
+2314 1247 27483
+2315 1247 27483
+2316 1247 27483
+2318 1247 7581
+2319 1247 31348
+2320 1247 39521
+2321 1247 2333
+2330 1247 44525
+2340 1247 24970
+2379 1247 28202
+2380 1247 46320
+2381 1247 46320
+2382 1247 46320
+2383 1247 34478
+2385 1247 65020
+2386 1247 12521
+2387 1247 44591
+2396 1247 55425
+2406 1247 38869
+2417 1247 50547
+2457 1247 60946
+2458 1247 27698
+2459 1247 27698
+2460 1247 27698
+2461 1247 26328
+2462 1247 39713
+2463 1247 43933
+2464 1247 53490
+2465 1247 62709
+2474 1247 58467
+2484 1247 53775
+2495 1247 58844
+2507 1247 22134
+3758 1247 27852657
+1150 1248 1
+1210 1248 25422
+1219 1248 40099
+1352 1248 53473
+1360 1248 31279
+1369 1248 52179
+1413 1248 48685
+1414 1248 4741
+1423 1248 58182
+1564 1248 28457
+1572 1248 56295
+1581 1248 36632
+1635 1248 60771
+1678 1248 17400
+1679 1248 46353
+1680 1248 63189
+1681 1248 874
+1690 1248 18523
+1700 1248 15934
+1843 1248 19884
+1851 1248 42049
+1860 1248 9571
+1914 1248 22410
+1979 1248 51761
+2025 1248 1626
+2026 1248 4927
+2035 1248 35050
+2045 1248 23267
+2056 1248 52961
+2204 1248 16898
+2210 1248 16541
+2211 1248 37243
+2212 1248 21054
+2213 1248 32969
+2214 1248 32969
+2216 1248 29538
+2217 1248 29538
+2218 1248 51122
+2219 1248 39081
+2220 1248 55703
+2221 1248 61356
+2258 1248 53406
+2259 1248 53406
+2260 1248 53406
+2262 1248 64677
+2263 1248 6760
+2264 1248 24768
+2265 1248 14397
+2266 1248 13748
+2275 1248 42272
+2313 1248 8361
+2314 1248 8361
+2315 1248 8361
+2316 1248 8361
+2318 1248 36799
+2319 1248 60882
+2320 1248 10821
+2321 1248 48684
+2330 1248 15550
+2340 1248 21407
+2379 1248 32805
+2380 1248 32805
+2381 1248 32805
+2382 1248 32805
+2383 1248 32805
+2385 1248 14661
+2386 1248 34456
+2387 1248 57728
+2396 1248 27055
+2406 1248 63393
+2417 1248 31408
+2457 1248 53237
+2458 1248 53237
+2459 1248 53237
+2460 1248 53237
+2461 1248 53237
+2462 1248 55057
+2463 1248 46075
+2464 1248 13368
+2465 1248 57451
+2474 1248 32604
+2484 1248 41088
+2495 1248 58153
+2507 1248 58328
+3759 1248 27852657
+1151 1249 1
+1181 1249 65520
+1217 1249 1
+1294 1249 4962
+1326 1249 60559
+1367 1249 16366
+1404 1249 12295
+1412 1249 19884
+1421 1249 3519
+1502 1249 19012
+1536 1249 46509
+1579 1249 4083
+1633 1249 58649
+1663 1249 3428
+1664 1249 45574
+1671 1249 33279
+1679 1249 32018
+1688 1249 56752
+1698 1249 1622
+1781 1249 41192
+1815 1249 24329
+1858 1249 16329
+1912 1249 29787
+1977 1249 4541
+2016 1249 52803
+2024 1249 47349
+2033 1249 60694
+2043 1249 45687
+2054 1249 42768
+2141 1249 56906
+2168 1249 61580
+2175 1249 4674
+2198 1249 64750
+2199 1249 64750
+2201 1249 35833
+2202 1249 35833
+2203 1249 35833
+2204 1249 53367
+2211 1249 44210
+2219 1249 9259
+2243 1249 33015
+2244 1249 33015
+2245 1249 33015
+2247 1249 62615
+2248 1249 62615
+2249 1249 14532
+2256 1249 3041
+2264 1249 31828
+2273 1249 15027
+2298 1249 19048
+2299 1249 19048
+2300 1249 19048
+2301 1249 19048
+2303 1249 788
+2304 1249 60866
+2311 1249 42541
+2319 1249 64445
+2328 1249 34502
+2338 1249 15078
+2364 1249 37074
+2365 1249 37074
+2366 1249 37074
+2367 1249 37074
+2368 1249 37074
+2370 1249 24216
+2377 1249 10050
+2385 1249 55461
+2394 1249 64824
+2404 1249 24456
+2415 1249 24044
+2442 1249 65222
+2443 1249 65222
+2444 1249 65222
+2445 1249 65222
+2446 1249 65222
+2447 1249 65222
+2448 1249 28920
+2455 1249 19260
+2463 1249 59239
+2472 1249 29558
+2482 1249 44332
+2493 1249 54208
+2505 1249 62838
+3760 1249 27852657
+1152 1250 1
+1153 1250 1
+1295 1250 1
+1296 1250 1
+1297 1250 1
+1503 1250 1
+1504 1250 1
+1506 1250 1
+1509 1250 1
+1782 1250 1
+1783 1250 1
+1785 1250 1
+1788 1250 1
+1792 1250 1
+2142 1250 32761
+2143 1250 32761
+2145 1250 32761
+2148 1250 32761
+2152 1250 32761
+2157 1250 32761
+2449 1250 1
+2450 1250 24573
+3761 1250 27852657
+1153 1251 1
+1296 1251 56146
+1298 1251 9375
+1504 1251 63928
+1507 1251 1593
+1511 1251 63928
+1783 1251 9030
+1786 1251 56491
+1790 1251 9030
+1795 1251 56491
+2143 1251 58237
+2146 1251 7284
+2149 1251 31213
+2150 1251 23929
+2153 1251 47392
+2154 1251 62633
+2155 1251 38704
+2160 1251 54410
+2161 1251 15706
+2166 1251 26128
+2172 1251 62336
+2173 1251 34779
+2174 1251 14093
+2175 1251 58428
+2176 1251 58428
+2205 1251 37233
+2206 1251 15590
+2208 1251 8164
+2209 1251 21818
+2210 1251 11569
+2211 1251 53512
+2212 1251 38556
+2220 1251 45649
+2250 1251 21741
+2251 1251 37580
+2252 1251 33162
+2254 1251 36129
+2255 1251 56117
+2256 1251 10666
+2257 1251 51015
+2265 1251 24626
+2274 1251 44498
+2305 1251 13177
+2306 1251 47115
+2307 1251 7801
+2308 1251 57248
+2310 1251 7031
+2311 1251 49182
+2312 1251 3749
+2320 1251 58450
+2329 1251 32084
+2339 1251 53107
+2371 1251 16583
+2372 1251 46439
+2373 1251 19464
+2374 1251 42557
+2375 1251 45494
+2377 1251 11627
+2378 1251 20219
+2386 1251 10767
+2395 1251 22992
+2405 1251 61081
+2416 1251 7974
+2449 1251 36068
+2450 1251 14107
+2451 1251 28657
+2452 1251 20415
+2453 1251 31919
+2454 1251 44816
+2455 1251 45373
+2456 1251 27220
+2464 1251 703
+2473 1251 6707
+2483 1251 49963
+2494 1251 57247
+2506 1251 4303
+3762 1251 27852657
+1154 1252 1
+1157 1252 65520
+1162 1252 1
+1167 1252 65520
+1557 1252 59594
+1828 1252 23477
+1829 1252 21630
+1830 1252 21630
+1847 1252 17030
+1848 1252 64109
+1856 1252 23744
+1899 1252 54871
+1901 1252 58196
+1904 1252 40236
+1905 1252 40236
+1914 1252 40236
+1952 1252 1020
+1953 1252 31654
+1954 1252 32676
+1955 1252 14963
+1958 1252 51907
+1959 1252 24891
+1960 1252 24891
+1969 1252 65127
+1979 1252 24891
+2018 1252 1020
+2019 1252 31654
+2020 1252 32676
+2021 1252 14963
+2022 1252 30882
+2024 1252 51907
+2025 1252 24891
+2026 1252 24891
+2035 1252 65127
+2045 1252 49782
+2056 1252 24891
+2178 1252 13388
+2179 1252 13388
+2180 1252 2057
+2181 1252 7646
+2182 1252 59779
+2183 1252 63186
+2184 1252 19308
+2185 1252 42880
+2186 1252 48622
+2187 1252 38917
+2188 1252 60560
+2189 1252 59736
+2190 1252 36244
+2191 1252 53143
+2192 1252 10220
+2193 1252 31863
+2194 1252 56789
+2195 1252 52068
+2196 1252 37580
+2197 1252 49958
+2200 1252 47389
+2201 1252 5848
+2202 1252 24437
+2203 1252 10254
+2207 1252 29167
+2208 1252 10108
+2209 1252 16934
+2210 1252 28980
+2211 1252 62345
+2212 1252 62345
+2213 1252 3262
+2214 1252 17205
+2216 1252 54186
+2217 1252 47404
+2218 1252 60306
+2219 1252 60315
+2220 1252 51663
+2221 1252 54839
+2258 1252 6245
+2259 1252 20188
+2260 1252 26502
+2262 1252 4820
+2263 1252 8604
+2264 1252 50007
+2265 1252 20388
+2266 1252 26260
+2275 1252 36942
+2313 1252 56488
+2314 1252 7170
+2315 1252 12174
+2316 1252 40315
+2318 1252 63047
+2319 1252 33844
+2320 1252 11060
+2321 1252 61613
+2330 1252 65393
+2340 1252 28451
+2379 1252 30952
+2380 1252 2668
+2381 1252 60125
+2382 1252 47965
+2383 1252 29750
+2385 1252 19012
+2386 1252 8039
+2387 1252 11711
+2396 1252 50169
+2406 1252 24812
+2417 1252 61882
+2457 1252 5900
+2458 1252 48154
+2459 1252 40053
+2460 1252 55546
+2461 1252 21880
+2462 1252 1823
+2463 1252 23175
+2464 1252 39857
+2465 1252 30763
+2474 1252 47099
+2484 1252 38312
+2495 1252 21362
+2507 1252 9729
+3763 1252 27852657
+1155 1253 1
+1159 1253 1
+1163 1253 1
+1303 1253 1
+1304 1253 1
+1308 1253 1
+1309 1253 1
+1518 1253 1
+1519 1253 1
+1520 1253 1
+2206 1253 32761
+2251 1253 32761
+2252 1253 32761
+2306 1253 32761
+2307 1253 32761
+2308 1253 32761
+2372 1253 32761
+2373 1253 32761
+2374 1253 32761
+2375 1253 32761
+2450 1253 24572
+2451 1253 24572
+2452 1253 24572
+2453 1253 24572
+2454 1253 24572
+2506 1253 4096
+3764 1253 27852657
+1156 1254 1
+1157 1254 1
+1162 1254 65520
+1167 1254 1
+1557 1254 41587
+1828 1254 46833
+1829 1254 40700
+1830 1254 40700
+1847 1254 53792
+1848 1254 40399
+1856 1254 57938
+1899 1254 21032
+1901 1254 58433
+1904 1254 61797
+1905 1254 61797
+1914 1254 61797
+1952 1254 48242
+1953 1254 44121
+1954 1254 10959
+1955 1254 51784
+1958 1254 37977
+1959 1254 18812
+1960 1254 18812
+1969 1254 15088
+1979 1254 18812
+2018 1254 48242
+2019 1254 44121
+2020 1254 10959
+2021 1254 51784
+2022 1254 22069
+2024 1254 37977
+2025 1254 18812
+2026 1254 18812
+2035 1254 15088
+2045 1254 37624
+2056 1254 18812
+2178 1254 8001
+2179 1254 8001
+2180 1254 1713
+2181 1254 44955
+2182 1254 36954
+2183 1254 61547
+2184 1254 1783
+2185 1254 53048
+2186 1254 16094
+2187 1254 20295
+2188 1254 26052
+2189 1254 55202
+2190 1254 41887
+2191 1254 25793
+2192 1254 48992
+2193 1254 54749
+2194 1254 4054
+2195 1254 50690
+2196 1254 10328
+2197 1254 50056
+2200 1254 2178
+2201 1254 11340
+2202 1254 40496
+2203 1254 27918
+2207 1254 25378
+2208 1254 4673
+2209 1254 1188
+2210 1254 64443
+2211 1254 1503
+2212 1254 1503
+2213 1254 39211
+2214 1254 46650
+2216 1254 5557
+2217 1254 39393
+2218 1254 36276
+2219 1254 45181
+2220 1254 27794
+2221 1254 26291
+2258 1254 45238
+2259 1254 52677
+2260 1254 34866
+2262 1254 58215
+2263 1254 34271
+2264 1254 19825
+2265 1254 13412
+2266 1254 17551
+2275 1254 56781
+2313 1254 30279
+2314 1254 40742
+2315 1254 14800
+2316 1254 34845
+2318 1254 39057
+2319 1254 51124
+2320 1254 51402
+2321 1254 57705
+2330 1254 43551
+2340 1254 52291
+2379 1254 56817
+2380 1254 5992
+2381 1254 29305
+2382 1254 32035
+2383 1254 65310
+2385 1254 45350
+2386 1254 39590
+2387 1254 32365
+2396 1254 16746
+2406 1254 40191
+2417 1254 53421
+2457 1254 8454
+2458 1254 25840
+2459 1254 15791
+2460 1254 25516
+2461 1254 17301
+2462 1254 10375
+2463 1254 26026
+2464 1254 8986
+2465 1254 42370
+2474 1254 41387
+2484 1254 51509
+2495 1254 22168
+2507 1254 37625
+3765 1254 27852657
+1157 1255 1
+1162 1255 65520
+1167 1255 1
+1813 1255 644
+1848 1255 13571
+1890 1255 54280
+1891 1255 39051
+1893 1255 51717
+1896 1255 16766
+1904 1255 16766
+1913 1255 16766
+1944 1255 36501
+1945 1255 5328
+1946 1255 55620
+1947 1255 61274
+1950 1255 47722
+1951 1255 45994
+1959 1255 45994
+1968 1255 62760
+1978 1255 45994
+2010 1255 36501
+2011 1255 5328
+2012 1255 55620
+2013 1255 61274
+2014 1255 26550
+2016 1255 47722
+2017 1255 45994
+2025 1255 45994
+2034 1255 62760
+2044 1255 26467
+2055 1255 45994
+2151 1255 41252
+2152 1255 41252
+2153 1255 41252
+2154 1255 41252
+2155 1255 41252
+2156 1255 41252
+2160 1255 41252
+2166 1255 9774
+2167 1255 14405
+2171 1255 50682
+2172 1255 50682
+2173 1255 60456
+2174 1255 18047
+2175 1255 53752
+2176 1255 53752
+2205 1255 22725
+2206 1255 62912
+2208 1255 34417
+2209 1255 49042
+2210 1255 65262
+2211 1255 61800
+2212 1255 61707
+2220 1255 7955
+2250 1255 12597
+2251 1255 48852
+2252 1255 32295
+2254 1255 54739
+2255 1255 33300
+2256 1255 56015
+2257 1255 20207
+2265 1255 20178
+2274 1255 12223
+2305 1255 36917
+2306 1255 7651
+2307 1255 56615
+2308 1255 25018
+2310 1255 6553
+2311 1255 14742
+2312 1255 22927
+2320 1255 1613
+2329 1255 23904
+2339 1255 11681
+2371 1255 16525
+2372 1255 27931
+2373 1255 64986
+2374 1255 25033
+2375 1255 24622
+2377 1255 51662
+2378 1255 29699
+2386 1255 17627
+2395 1255 41579
+2405 1255 53206
+2416 1255 41525
+2449 1255 19763
+2450 1255 45652
+2451 1255 32747
+2452 1255 32748
+2453 1255 24651
+2454 1255 47353
+2455 1255 45437
+2456 1255 11603
+2464 1255 49649
+2473 1255 49015
+2483 1255 12636
+2494 1255 3371
+2506 1255 4566
+3766 1255 27852657
+1158 1256 1
+1522 1256 31311
+1793 1256 25638
+1794 1256 30561
+1795 1256 30561
+1813 1256 43354
+1848 1256 14596
+1890 1256 12311
+1891 1256 45426
+1893 1256 57655
+1896 1256 53350
+1904 1256 53350
+1913 1256 53350
+1944 1256 62852
+1945 1256 1327
+1946 1256 44073
+1947 1256 47911
+1950 1256 13547
+1951 1256 4051
+1959 1256 4051
+1968 1256 57401
+1978 1256 4051
+2010 1256 62852
+2011 1256 1327
+2012 1256 44073
+2013 1256 47911
+2014 1256 44499
+2016 1256 13547
+2017 1256 4051
+2025 1256 4051
+2034 1256 57401
+2044 1256 8102
+2055 1256 4051
+2142 1256 53402
+2143 1256 53402
+2144 1256 30691
+2145 1256 3264
+2146 1256 15383
+2147 1256 50375
+2148 1256 1562
+2149 1256 63053
+2150 1256 47670
+2151 1256 2380
+2152 1256 7102
+2153 1256 57271
+2154 1256 26180
+2155 1256 44031
+2156 1256 39446
+2157 1256 61694
+2158 1256 7757
+2159 1256 31183
+2160 1256 44107
+2161 1256 76
+2164 1256 43531
+2165 1256 56652
+2166 1256 12990
+2167 1256 1767
+2171 1256 61505
+2172 1256 9105
+2173 1256 30964
+2174 1256 57799
+2175 1256 40785
+2176 1256 40785
+2205 1256 5870
+2206 1256 41321
+2208 1256 21550
+2209 1256 63071
+2210 1256 43148
+2211 1256 46855
+2212 1256 8693
+2220 1256 33429
+2250 1256 43423
+2251 1256 46629
+2252 1256 24121
+2254 1256 38225
+2255 1256 14259
+2256 1256 30684
+2257 1256 3201
+2265 1256 29105
+2274 1256 61197
+2305 1256 43890
+2306 1256 39822
+2307 1256 26169
+2308 1256 43675
+2310 1256 8346
+2311 1256 46445
+2312 1256 23578
+2320 1256 59863
+2329 1256 52292
+2339 1256 56616
+2371 1256 27221
+2372 1256 20697
+2373 1256 52112
+2374 1256 27937
+2375 1256 18177
+2377 1256 60888
+2378 1256 46689
+2386 1256 34297
+2395 1256 6
+2405 1256 10337
+2416 1256 19242
+2449 1256 53437
+2450 1256 35495
+2451 1256 17487
+2452 1256 1928
+2453 1256 12312
+2454 1256 43061
+2455 1256 6635
+2456 1256 11244
+2464 1256 24047
+2473 1256 12095
+2483 1256 6444
+2494 1256 31300
+2506 1256 58721
+3767 1256 27852657
+1159 1257 1
+1522 1257 22521
+1793 1257 9527
+1794 1257 48720
+1795 1257 48720
+1813 1257 40517
+1848 1257 581
+1890 1257 41969
+1891 1257 48093
+1893 1257 1891
+1896 1257 18276
+1904 1257 18276
+1913 1257 18276
+1944 1257 57000
+1945 1257 5969
+1946 1257 15963
+1947 1257 48901
+1950 1257 58981
+1951 1257 508
+1959 1257 508
+1968 1257 18784
+1978 1257 508
+2010 1257 57000
+2011 1257 5969
+2012 1257 15963
+2013 1257 48901
+2014 1257 21452
+2016 1257 58981
+2017 1257 508
+2025 1257 508
+2034 1257 18784
+2044 1257 1016
+2055 1257 508
+2142 1257 33819
+2143 1257 33819
+2144 1257 42643
+2145 1257 13290
+2146 1257 44992
+2147 1257 10641
+2148 1257 32777
+2149 1257 18309
+2150 1257 38838
+2151 1257 10641
+2152 1257 44763
+2153 1257 56658
+2154 1257 31558
+2155 1257 58241
+2156 1257 43963
+2157 1257 19307
+2158 1257 43719
+2159 1257 38774
+2160 1257 16390
+2161 1257 23670
+2164 1257 64249
+2165 1257 16703
+2166 1257 34557
+2167 1257 63343
+2171 1257 14368
+2172 1257 32343
+2173 1257 50197
+2174 1257 63503
+2175 1257 45060
+2176 1257 45060
+2205 1257 12409
+2206 1257 16064
+2208 1257 37046
+2209 1257 19552
+2210 1257 11993
+2211 1257 51070
+2212 1257 64448
+2220 1257 19388
+2250 1257 5604
+2251 1257 37572
+2252 1257 28559
+2254 1257 39963
+2255 1257 44933
+2256 1257 13230
+2257 1257 8166
+2265 1257 2416
+2274 1257 48549
+2305 1257 64275
+2306 1257 64883
+2307 1257 21283
+2308 1257 57427
+2310 1257 24151
+2311 1257 39511
+2312 1257 694
+2320 1257 1582
+2329 1257 62946
+2339 1257 14397
+2371 1257 39922
+2372 1257 24616
+2373 1257 24347
+2374 1257 45100
+2375 1257 29450
+2377 1257 35363
+2378 1257 19077
+2386 1257 19166
+2395 1257 44229
+2405 1257 32211
+2416 1257 17814
+2449 1257 1025
+2450 1257 6513
+2451 1257 49960
+2452 1257 56773
+2453 1257 46474
+2454 1257 4422
+2455 1257 1080
+2456 1257 64024
+2464 1257 61210
+2473 1257 33827
+2483 1257 2166
+2494 1257 15093
+2506 1257 15890
+3768 1257 27852657
+1160 1258 1
+1161 1258 1
+1162 1258 1
+1166 1258 1
+1195 1258 23828
+1196 1258 23828
+1620 1258 16354
+1675 1258 16354
+1676 1258 16354
+1841 1258 11917
+1848 1258 11916
+1856 1258 11916
+1899 1258 35691
+1901 1258 38709
+1954 1258 22320
+1955 1258 22320
+2020 1258 5966
+2021 1258 5966
+2022 1258 17882
+2202 1258 11175
+2203 1258 5981
+2207 1258 8183
+2208 1258 8183
+2209 1258 56213
+2210 1258 42830
+2216 1258 14143
+2217 1258 36858
+2218 1258 51767
+2260 1258 26075
+2262 1258 62158
+2263 1258 17512
+2315 1258 386
+2316 1258 386
+2318 1258 19723
+2381 1258 14529
+2382 1258 14529
+2383 1258 55833
+2459 1258 19916
+2460 1258 19916
+2461 1258 7445
+2462 1258 59944
+2463 1258 11917
+2464 1258 36484
+2465 1258 26060
+2474 1258 4651
+2484 1258 42509
+2495 1258 58803
+2507 1258 27752
+3769 1258 27852657
+1161 1259 1
+1162 1259 1
+1167 1259 65520
+1557 1259 55212
+1828 1259 9257
+1829 1259 5441
+1830 1259 5441
+1847 1259 21906
+1848 1259 18097
+1856 1259 5163
+1899 1259 58405
+1901 1259 21851
+1904 1259 14809
+1905 1259 14809
+1914 1259 14809
+1952 1259 37534
+1953 1259 61577
+1954 1259 15421
+1955 1259 24989
+1958 1259 23184
+1959 1259 8105
+1960 1259 8105
+1969 1259 22914
+1979 1259 8105
+2018 1259 37534
+2019 1259 61577
+2020 1259 15421
+2021 1259 24989
+2022 1259 37539
+2024 1259 23184
+2025 1259 8105
+2026 1259 8105
+2035 1259 22914
+2045 1259 16210
+2056 1259 8105
+2178 1259 16273
+2179 1259 16273
+2180 1259 59093
+2181 1259 51647
+2182 1259 35374
+2183 1259 31655
+2184 1259 64648
+2185 1259 35434
+2186 1259 60
+2187 1259 31655
+2188 1259 64648
+2189 1259 36289
+2190 1259 47286
+2191 1259 47226
+2192 1259 31655
+2193 1259 64648
+2194 1259 19847
+2195 1259 30612
+2196 1259 59395
+2197 1259 12169
+2200 1259 12051
+2201 1259 59324
+2202 1259 12114
+2203 1259 20533
+2207 1259 19376
+2208 1259 46529
+2209 1259 41936
+2210 1259 53201
+2211 1259 1866
+2212 1259 1866
+2213 1259 16665
+2214 1259 33431
+2216 1259 44807
+2217 1259 8545
+2218 1259 12087
+2219 1259 54878
+2220 1259 49632
+2221 1259 47766
+2258 1259 19729
+2259 1259 36495
+2260 1259 17460
+2262 1259 22235
+2263 1259 35955
+2264 1259 43835
+2265 1259 50651
+2266 1259 19517
+2275 1259 37272
+2313 1259 35827
+2314 1259 64030
+2315 1259 40395
+2316 1259 50623
+2318 1259 17022
+2319 1259 51897
+2320 1259 37094
+2321 1259 37966
+2330 1259 51233
+2340 1259 13961
+2379 1259 29510
+2380 1259 51315
+2381 1259 2381
+2382 1259 52494
+2383 1259 55386
+2385 1259 35772
+2386 1259 15301
+2387 1259 18776
+2396 1259 37330
+2406 1259 24868
+2417 1259 10907
+2457 1259 45804
+2458 1259 41614
+2459 1259 48096
+2460 1259 26587
+2461 1259 33312
+2462 1259 12324
+2463 1259 40963
+2464 1259 35468
+2465 1259 22088
+2474 1259 14722
+2484 1259 29846
+2495 1259 55440
+2507 1259 64337
+3770 1259 27852657
+1162 1260 1
+1192 1260 1
+1384 1260 65520
+1795 1260 32763
+1830 1260 2
+1875 1260 32078
+1893 1260 17260
+1901 1260 17260
+1910 1260 17260
+1926 1260 57776
+1927 1260 57776
+1928 1260 57776
+1929 1260 57776
+1941 1260 60040
+1948 1260 3969
+1956 1260 3969
+1965 1260 21229
+1975 1260 3969
+1992 1260 57776
+1993 1260 57776
+1994 1260 57776
+1995 1260 57776
+1996 1260 57776
+2007 1260 60040
+2014 1260 3969
+2022 1260 3969
+2031 1260 21229
+2041 1260 7938
+2052 1260 3969
+2133 1260 5562
+2153 1260 60245
+2154 1260 60245
+2155 1260 23390
+2160 1260 26502
+2166 1260 43980
+2173 1260 43980
+2187 1260 23087
+2188 1260 23087
+2190 1260 1015
+2191 1260 33776
+2196 1260 42974
+2202 1260 2925
+2209 1260 20482
+2217 1260 42023
+2232 1260 61794
+2233 1260 61794
+2234 1260 61794
+2236 1260 12265
+2241 1260 62820
+2247 1260 37279
+2254 1260 32199
+2262 1260 28174
+2271 1260 51672
+2287 1260 50036
+2288 1260 50036
+2289 1260 50036
+2290 1260 50036
+2296 1260 62036
+2302 1260 4393
+2309 1260 21597
+2317 1260 10389
+2326 1260 55329
+2336 1260 3657
+2353 1260 7565
+2354 1260 7565
+2355 1260 7565
+2356 1260 7565
+2357 1260 7565
+2368 1260 3802
+2375 1260 64498
+2383 1260 7594
+2392 1260 62861
+2402 1260 59495
+2413 1260 55838
+2431 1260 21126
+2432 1260 21126
+2433 1260 21126
+2434 1260 21126
+2435 1260 21126
+2440 1260 20199
+2446 1260 31539
+2453 1260 31176
+2461 1260 16602
+2470 1260 58629
+2480 1260 39386
+2491 1260 20852
+2503 1260 33382
+3771 1260 27852657
+1163 1261 1
+1308 1261 1
+1309 1261 1
+1518 1261 1
+1519 1261 1
+2157 1261 43681
+2158 1261 43681
+2159 1261 43681
+2160 1261 43681
+2161 1261 43681
+2206 1261 54601
+2251 1261 54601
+2252 1261 54601
+2306 1261 54601
+2307 1261 54601
+2372 1261 54601
+2373 1261 54601
+2450 1261 12286
+2451 1261 12286
+2452 1261 30031
+2453 1261 30031
+2454 1261 42317
+2506 1261 23888
+3772 1261 27852657
+1164 1262 1
+1165 1262 1
+1166 1262 1
+1167 1262 1
+1620 1262 49149
+1675 1262 49149
+1676 1262 49149
+1841 1262 32759
+1848 1262 32759
+1856 1262 32759
+1899 1262 15
+1901 1262 32762
+1954 1262 49146
+1955 1262 49146
+2020 1262 65518
+2021 1262 65518
+2022 1262 32756
+2202 1262 28663
+2203 1262 65512
+2207 1262 6
+2208 1262 6
+2209 1262 28669
+2210 1262 8186
+2216 1262 40955
+2217 1262 4097
+2218 1262 12280
+2260 1262 57326
+2262 1262 36858
+2263 1262 45041
+2315 1262 20471
+2316 1262 20471
+2318 1262 36858
+2381 1262 12282
+2382 1262 12282
+2383 1262 24573
+2459 1262 14333
+2460 1262 14333
+2461 1262 28666
+2462 1262 53234
+2463 1262 32759
+2464 1262 32761
+2465 1262 59379
+2474 1262 6144
+2484 1262 9222
+2495 1262 36861
+2507 1262 54257
+3773 1262 27852657
+1165 1263 1
+1166 1263 1
+1167 1263 1
+1194 1263 1
+1195 1263 1
+1196 1263 1
+1344 1263 1
+1345 1263 1
+1557 1263 1
+2208 1263 49140
+2209 1263 49140
+2210 1263 32761
+2216 1263 49140
+2217 1263 49140
+2218 1263 32761
+2254 1263 65519
+2262 1263 49140
+2263 1263 32761
+2318 1263 32761
+2454 1263 1
+2462 1263 8192
+2464 1263 16380
+2465 1263 16380
+2474 1263 16380
+2484 1263 16380
+2495 1263 16380
+2506 1263 49140
+2507 1263 56307
+3774 1263 27852657
+1166 1264 1
+1167 1264 1
+1195 1264 1
+1196 1264 1
+2271 1264 6
+2272 1264 24572
+2337 1264 40949
+2375 1264 49652
+2383 1264 36855
+2392 1264 6493
+2395 1264 58151
+2396 1264 58151
+2397 1264 58151
+2398 1264 50058
+2399 1264 50058
+2400 1264 50058
+2401 1264 50058
+2404 1264 10669
+2405 1264 59100
+2406 1264 59100
+2407 1264 51730
+2408 1264 59100
+2409 1264 50058
+2410 1264 50058
+2411 1264 50058
+2412 1264 50058
+2413 1264 50058
+2415 1264 10669
+2416 1264 59100
+2417 1264 59100
+2418 1264 51730
+2419 1264 52679
+2420 1264 59100
+2447 1264 57553
+2451 1264 7774
+2452 1264 7774
+2453 1264 9118
+2454 1264 40866
+2455 1264 58184
+2456 1264 58184
+2457 1264 9708
+2458 1264 9708
+2460 1264 50294
+2461 1264 7808
+2462 1264 41910
+2463 1264 19466
+2464 1264 2353
+2465 1264 9690
+2466 1264 63968
+2467 1264 63968
+2468 1264 63968
+2470 1264 27194
+2471 1264 49796
+2472 1264 56319
+2473 1264 43266
+2474 1264 17154
+2475 1264 7464
+2476 1264 30079
+2477 1264 30079
+2478 1264 30079
+2479 1264 30079
+2481 1264 38477
+2482 1264 54812
+2483 1264 43234
+2484 1264 41597
+2485 1264 47573
+2486 1264 40109
+2487 1264 46997
+2488 1264 46997
+2489 1264 46997
+2490 1264 46997
+2491 1264 46997
+2493 1264 65466
+2494 1264 7714
+2495 1264 52891
+2496 1264 37689
+2497 1264 4077
+2498 1264 29489
+2499 1264 64233
+2500 1264 64233
+2501 1264 64233
+2502 1264 64233
+2503 1264 64233
+2504 1264 40
+2505 1264 35084
+2506 1264 16667
+2507 1264 3513
+2508 1264 2400
+2509 1264 26635
+2510 1264 22669
+2511 1264 32882
+3775 1264 27852657
+1167 1265 1
+1196 1265 11054
+1345 1265 2581
+2196 1265 60281
+2197 1265 31692
+2202 1265 60533
+2209 1265 52815
+2210 1265 22206
+2211 1265 27514
+2212 1265 27514
+2213 1265 36739
+2214 1265 13864
+2216 1265 31241
+2217 1265 6264
+2218 1265 6349
+2219 1265 41469
+2220 1265 38479
+2221 1265 10965
+2258 1265 22859
+2259 1265 25751
+2260 1265 25751
+2262 1265 43757
+2263 1265 61734
+2264 1265 42359
+2265 1265 23695
+2266 1265 11967
+2275 1265 1002
+2313 1265 27673
+2314 1265 37872
+2315 1265 37872
+2316 1265 37872
+2318 1265 8866
+2319 1265 28285
+2320 1265 880
+2321 1265 39746
+2330 1265 27386
+2340 1265 26384
+2379 1265 5099
+2380 1265 31562
+2381 1265 31562
+2382 1265 31562
+2383 1265 53481
+2385 1265 8400
+2386 1265 41876
+2387 1265 25263
+2396 1265 26144
+2406 1265 4767
+2417 1265 43904
+2457 1265 22260
+2458 1265 23857
+2459 1265 23857
+2460 1265 23857
+2461 1265 40169
+2462 1265 54272
+2463 1265 12977
+2464 1265 32897
+2465 1265 32922
+2474 1265 34267
+2484 1265 10488
+2495 1265 60348
+2507 1265 9628
+3776 1265 27852657
+1168 1266 1
+2464 1266 65520
+3777 1266 27852657
+1169 1267 1
+1170 1267 1
+1171 1267 1
+1172 1267 1
+1173 1267 1
+1177 1267 1
+1178 1267 1
+1179 1267 1
+1180 1267 1
+1206 1267 1
+1207 1267 1
+1208 1267 1
+1357 1267 1
+1358 1267 1
+1570 1267 1
+2211 1267 32761
+2212 1267 32761
+2220 1267 32761
+2265 1267 32761
+2320 1267 32761
+2386 1267 32761
+2464 1267 24573
+3778 1267 27852657
+1170 1268 1
+1171 1268 1
+1172 1268 1
+1173 1268 1
+1177 1268 1
+1178 1268 1
+1179 1268 1
+1180 1268 1
+1206 1268 1
+1207 1268 1
+1208 1268 1
+1357 1268 1
+1358 1268 1
+1570 1268 1
+2211 1268 32761
+2212 1268 32761
+2220 1268 32761
+2265 1268 32761
+2320 1268 32761
+2386 1268 32761
+2463 1268 1
+2464 1268 24573
+3779 1268 27852657
+1171 1269 1
+1172 1269 1
+1173 1269 1
+1178 1269 1
+1179 1269 1
+1180 1269 1
+1214 1269 65520
+1215 1269 65520
+1216 1269 65520
+1410 1269 1
+1411 1269 1
+1568 1269 30031
+1579 1269 48674
+1580 1269 48674
+1581 1269 48674
+1620 1269 35491
+1623 1269 1
+1624 1269 48674
+1625 1269 48674
+1626 1269 31827
+1635 1269 48674
+1675 1269 35491
+1679 1269 48674
+1680 1269 48674
+1681 1269 31827
+1690 1269 31827
+1700 1269 48674
+1841 1269 20475
+1847 1269 30031
+1848 1269 50506
+1850 1269 24337
+1851 1269 24337
+1856 1269 20475
+1858 1269 7490
+1859 1269 31827
+1860 1269 7490
+1899 1269 40951
+1901 1269 39585
+1903 1269 7490
+1904 1269 14980
+1905 1269 63654
+1914 1269 56164
+1954 1269 10920
+1955 1269 20474
+1958 1269 14980
+1959 1269 22470
+1960 1269 54297
+1969 1269 37450
+1979 1269 46807
+2020 1269 40950
+2021 1269 20474
+2022 1269 40949
+2024 1269 31827
+2025 1269 39317
+2026 1269 22470
+2035 1269 5623
+2045 1269 13113
+2056 1269 14980
+2201 1269 59890
+2202 1269 35831
+2203 1269 35831
+2207 1269 8873
+2208 1269 16210
+2209 1269 57672
+2210 1269 57672
+2211 1269 31358
+2212 1269 31358
+2216 1269 28040
+2217 1269 3981
+2218 1269 3981
+2219 1269 58506
+2220 1269 16154
+2221 1269 50317
+2260 1269 17403
+2262 1269 7166
+2263 1269 7166
+2264 1269 58506
+2265 1269 37918
+2266 1269 24117
+2275 1269 39321
+2315 1269 48116
+2316 1269 62618
+2318 1269 46752
+2319 1269 35108
+2320 1269 14520
+2321 1269 3292
+2330 1269 33245
+2340 1269 59445
+2381 1269 18939
+2382 1269 8701
+2383 1269 35832
+2385 1269 14516
+2386 1269 21071
+2387 1269 9843
+2396 1269 4224
+2406 1269 5159
+2417 1269 11235
+2459 1269 256
+2460 1269 5375
+2461 1269 5631
+2462 1269 5631
+2463 1269 5618
+2464 1269 17139
+2465 1269 52293
+2474 1269 48811
+2484 1269 39815
+2495 1269 40755
+2507 1269 29434
+3780 1269 27852657
+1172 1270 1
+1179 1270 1
+1215 1270 65520
+1410 1270 1
+1848 1270 20185
+1856 1270 2514
+1899 1270 14338
+1901 1270 53369
+1904 1270 42459
+1905 1270 42459
+1914 1270 42459
+1952 1270 7268
+1953 1270 7268
+1954 1270 21606
+1955 1270 21606
+1958 1270 13100
+1959 1270 52842
+1960 1270 52842
+1969 1270 29780
+1979 1270 52842
+2018 1270 7268
+2019 1270 7268
+2020 1270 21606
+2021 1270 21606
+2022 1270 24122
+2024 1270 13100
+2025 1270 52842
+2026 1270 52842
+2035 1270 29780
+2045 1270 40163
+2056 1270 52842
+2202 1270 36849
+2203 1270 55489
+2207 1270 12548
+2208 1270 12548
+2209 1270 53492
+2210 1270 62885
+2211 1270 28080
+2212 1270 28080
+2213 1270 11102
+2214 1270 11102
+2216 1270 29896
+2217 1270 43919
+2218 1270 26731
+2219 1270 20754
+2220 1270 53698
+2221 1270 25618
+2258 1270 3712
+2259 1270 3712
+2260 1270 10631
+2262 1270 36353
+2263 1270 42819
+2264 1270 6440
+2265 1270 58531
+2266 1270 27566
+2275 1270 1948
+2313 1270 49395
+2314 1270 49395
+2315 1270 56314
+2316 1270 56314
+2318 1270 18945
+2319 1270 19519
+2320 1270 35251
+2321 1270 60078
+2330 1270 45298
+2340 1270 43350
+2379 1270 8299
+2380 1270 8299
+2381 1270 15343
+2382 1270 15343
+2383 1270 9807
+2385 1270 60488
+2386 1270 35904
+2387 1270 39504
+2396 1270 50726
+2406 1270 25432
+2417 1270 47603
+2457 1270 48596
+2458 1270 48596
+2459 1270 59537
+2460 1270 59537
+2461 1270 55261
+2462 1270 65110
+2463 1270 58869
+2464 1270 39101
+2465 1270 53024
+2474 1270 30058
+2484 1270 36066
+2495 1270 17353
+2507 1270 16157
+3781 1270 27852657
+1173 1271 1
+1180 1271 1
+1216 1271 65520
+1411 1271 1
+1678 1271 65520
+1901 1271 21389
+1904 1271 28284
+1905 1271 28284
+1914 1271 28284
+1952 1271 11510
+1953 1271 11510
+1954 1271 11510
+1955 1271 11510
+1958 1271 56660
+1959 1271 45147
+1960 1271 45147
+1969 1271 7910
+1979 1271 45147
+2018 1271 11510
+2019 1271 11510
+2020 1271 11510
+2021 1271 11510
+2022 1271 11510
+2024 1271 56660
+2025 1271 45147
+2026 1271 45147
+2035 1271 7910
+2045 1271 24773
+2056 1271 45147
+2203 1271 21842
+2207 1271 53137
+2208 1271 53137
+2209 1271 53137
+2210 1271 40771
+2211 1271 1076
+2212 1271 1076
+2213 1271 9850
+2214 1271 9850
+2216 1271 21733
+2217 1271 21733
+2218 1271 54135
+2219 1271 8414
+2220 1271 26240
+2221 1271 25164
+2258 1271 62177
+2259 1271 62177
+2260 1271 62177
+2262 1271 33910
+2263 1271 16617
+2264 1271 3866
+2265 1271 10964
+2266 1271 35411
+2275 1271 10247
+2313 1271 17979
+2314 1271 17979
+2315 1271 17979
+2316 1271 17979
+2318 1271 60666
+2319 1271 16221
+2320 1271 24134
+2321 1271 45880
+2330 1271 61227
+2340 1271 50980
+2379 1271 38924
+2380 1271 38924
+2381 1271 38924
+2382 1271 38924
+2383 1271 38924
+2385 1271 63178
+2386 1271 38355
+2387 1271 56441
+2396 1271 8285
+2406 1271 33282
+2417 1271 47823
+2457 1271 8196
+2458 1271 8196
+2459 1271 8196
+2460 1271 8196
+2461 1271 8196
+2462 1271 26396
+2463 1271 36642
+2464 1271 45944
+2465 1271 18919
+2474 1271 38980
+2484 1271 26601
+2495 1271 33991
+2507 1271 50811
+3782 1271 27852657
+1174 1272 1
+1182 1272 65520
+1210 1272 25814
+1219 1272 39706
+1352 1272 174
+1360 1272 48597
+1369 1272 2815
+1413 1272 34895
+1414 1272 40384
+1423 1272 11754
+1564 1272 106
+1572 1272 48665
+1581 1272 54694
+1635 1272 38483
+1678 1272 36780
+1679 1272 45878
+1680 1272 10983
+1681 1272 38668
+1690 1272 60904
+1700 1272 34175
+1843 1272 17673
+1851 1272 56986
+1860 1272 48356
+1914 1272 49461
+1979 1272 58949
+2025 1272 30044
+2026 1272 16142
+2035 1272 32871
+2045 1272 19791
+2056 1272 60538
+2204 1272 8600
+2211 1272 52285
+2212 1272 13482
+2213 1272 56127
+2214 1272 56127
+2216 1272 4015
+2217 1272 4015
+2218 1272 4015
+2219 1272 12281
+2220 1272 59574
+2221 1272 29216
+2258 1272 2506
+2259 1272 2506
+2260 1272 2506
+2262 1272 55185
+2263 1272 55185
+2264 1272 13073
+2265 1272 18446
+2266 1272 64136
+2275 1272 64061
+2313 1272 64500
+2314 1272 64500
+2315 1272 64500
+2316 1272 64500
+2318 1272 21373
+2319 1272 34855
+2320 1272 7746
+2321 1272 16461
+2330 1272 61423
+2340 1272 6137
+2379 1272 21878
+2380 1272 21878
+2381 1272 21878
+2382 1272 21878
+2383 1272 21878
+2385 1272 51653
+2386 1272 14199
+2387 1272 35775
+2396 1272 50617
+2406 1272 33153
+2417 1272 18682
+2457 1272 47516
+2458 1272 47516
+2459 1272 47516
+2460 1272 47516
+2461 1272 47516
+2462 1272 47516
+2463 1272 42303
+2464 1272 53184
+2465 1272 52447
+2474 1272 26124
+2484 1272 3065
+2495 1272 8997
+2507 1272 41986
+3783 1272 27852657
+1175 1273 1
+1203 1273 1
+1204 1273 1
+1353 1273 1
+1354 1273 1
+1355 1273 1
+1565 1273 1
+1566 1273 1
+1567 1273 1
+1568 1273 1
+1844 1273 1
+1845 1273 1
+1846 1273 1
+1847 1273 1
+1848 1273 1
+2205 1273 32761
+2206 1273 32761
+2207 1273 32761
+2208 1273 32761
+2209 1273 32761
+2210 1273 32761
+2464 1273 24573
+3784 1273 27852657
+1176 1274 1
+2464 1274 65520
+3785 1274 27852657
+1177 1275 1
+1178 1275 1
+1179 1275 1
+1210 1275 39112
+1219 1275 26409
+1360 1275 18065
+1369 1275 50631
+1413 1275 12209
+1414 1275 23695
+1423 1275 64994
+1572 1275 18065
+1581 1275 29937
+1635 1275 2151
+1678 1275 61001
+1679 1275 49039
+1680 1275 36830
+1681 1275 1456
+1690 1275 57710
+1700 1275 55032
+1851 1275 64660
+1860 1275 64625
+1914 1275 55994
+1979 1275 58388
+2025 1275 13112
+2026 1275 48135
+2035 1275 43950
+2045 1275 6927
+2056 1275 3571
+2210 1275 31718
+2211 1275 41530
+2212 1275 26738
+2213 1275 6933
+2214 1275 6933
+2216 1275 49317
+2217 1275 49317
+2218 1275 40025
+2219 1275 12050
+2220 1275 4102
+2221 1275 13534
+2258 1275 35061
+2259 1275 35061
+2260 1275 35061
+2262 1275 40187
+2263 1275 24831
+2264 1275 59044
+2265 1275 6564
+2266 1275 54488
+2275 1275 18133
+2313 1275 35732
+2314 1275 35732
+2315 1275 35732
+2316 1275 35732
+2318 1275 2136
+2319 1275 38290
+2320 1275 19917
+2321 1275 58462
+2330 1275 8819
+2340 1275 51554
+2379 1275 43432
+2380 1275 43432
+2381 1275 43432
+2382 1275 43432
+2383 1275 43432
+2385 1275 15430
+2386 1275 17035
+2387 1275 23508
+2396 1275 16204
+2406 1275 18614
+2417 1275 4128
+2457 1275 1159
+2458 1275 1159
+2459 1275 1159
+2460 1275 1159
+2461 1275 1159
+2462 1275 1159
+2463 1275 15070
+2464 1275 24444
+2465 1275 41295
+2474 1275 11049
+2484 1275 16371
+2495 1275 43372
+2507 1275 19751
+3786 1275 27852657
+1178 1276 1
+1360 1276 53696
+1369 1276 56319
+1413 1276 29992
+1414 1276 55032
+1423 1276 64234
+1572 1276 40387
+1581 1276 9894
+1635 1276 19956
+1679 1276 19411
+1680 1276 41046
+1681 1276 50716
+1690 1276 4144
+1700 1276 48422
+1851 1276 49468
+1860 1276 18098
+1914 1276 52392
+1979 1276 27416
+2026 1276 57582
+2035 1276 32856
+2045 1276 9947
+2056 1276 30953
+2202 1276 60295
+2208 1276 55144
+2209 1276 27352
+2210 1276 22746
+2211 1276 11115
+2212 1276 60667
+2213 1276 45657
+2214 1276 46543
+2216 1276 4381
+2217 1276 46699
+2218 1276 7949
+2219 1276 16240
+2220 1276 23510
+2221 1276 58609
+2258 1276 60379
+2259 1276 9775
+2260 1276 9775
+2262 1276 36276
+2263 1276 16890
+2264 1276 59726
+2265 1276 18418
+2266 1276 28237
+2275 1276 35078
+2313 1276 41569
+2314 1276 6112
+2315 1276 6112
+2316 1276 13899
+2318 1276 53893
+2319 1276 59826
+2320 1276 17273
+2321 1276 40150
+2330 1276 50053
+2340 1276 38679
+2379 1276 52977
+2380 1276 59995
+2381 1276 59995
+2382 1276 30176
+2383 1276 26643
+2385 1276 5833
+2386 1276 49812
+2387 1276 52336
+2396 1276 32276
+2406 1276 26980
+2417 1276 19360
+2457 1276 16012
+2458 1276 48967
+2459 1276 48967
+2460 1276 54282
+2461 1276 11691
+2462 1276 43009
+2463 1276 10524
+2464 1276 64391
+2465 1276 15403
+2474 1276 20355
+2484 1276 62671
+2495 1276 23934
+2507 1276 53866
+3787 1276 27852657
+1179 1277 1
+1360 1277 31297
+1369 1277 24706
+1413 1277 7915
+1414 1277 60674
+1423 1277 35968
+1572 1277 58147
+1581 1277 25199
+1635 1277 37141
+1679 1277 2043
+1680 1277 26774
+1681 1277 55059
+1690 1277 47831
+1700 1277 46658
+1851 1277 285
+1860 1277 16939
+1914 1277 53889
+1979 1277 32237
+2026 1277 547
+2035 1277 5921
+2045 1277 62893
+2056 1277 11793
+2202 1277 38973
+2209 1277 27290
+2210 1277 59243
+2211 1277 64740
+2212 1277 15199
+2213 1277 49296
+2214 1277 56265
+2216 1277 26992
+2217 1277 1811
+2218 1277 51482
+2219 1277 55438
+2220 1277 41260
+2221 1277 64516
+2258 1277 24016
+2259 1277 14078
+2260 1277 14078
+2262 1277 53625
+2263 1277 34407
+2264 1277 31338
+2265 1277 65247
+2266 1277 28114
+2275 1277 23571
+2313 1277 41362
+2314 1277 12794
+2315 1277 12794
+2316 1277 12794
+2318 1277 44026
+2319 1277 64155
+2320 1277 17202
+2321 1277 60743
+2330 1277 22902
+2340 1277 46518
+2379 1277 56637
+2380 1277 21026
+2381 1277 21026
+2382 1277 21026
+2383 1277 32910
+2385 1277 42548
+2386 1277 55098
+2387 1277 24461
+2396 1277 54115
+2406 1277 10166
+2417 1277 21567
+2457 1277 5068
+2458 1277 21647
+2459 1277 21647
+2460 1277 21647
+2461 1277 52446
+2462 1277 19333
+2463 1277 17961
+2464 1277 1072
+2465 1277 10805
+2474 1277 986
+2484 1277 33937
+2495 1277 63163
+2507 1277 11486
+3788 1277 27852657
+1180 1278 1
+1210 1278 25422
+1219 1278 40099
+1360 1278 19231
+1369 1278 45046
+1413 1278 40359
+1414 1278 56914
+1423 1278 51967
+1572 1278 19231
+1581 1278 13529
+1635 1278 54886
+1678 1278 26258
+1679 1278 28062
+1680 1278 53224
+1681 1278 27227
+1690 1278 37668
+1700 1278 34749
+1851 1278 61933
+1860 1278 40722
+1914 1278 56305
+1979 1278 4764
+2025 1278 57426
+2026 1278 51354
+2035 1278 25609
+2045 1278 39735
+2056 1278 4199
+2210 1278 33803
+2211 1278 45768
+2212 1278 46477
+2213 1278 46507
+2214 1278 46507
+2216 1278 21015
+2217 1278 21015
+2218 1278 30307
+2219 1278 15669
+2220 1278 19254
+2221 1278 39201
+2258 1278 3217
+2259 1278 3217
+2260 1278 3217
+2262 1278 14556
+2263 1278 29912
+2264 1278 40685
+2265 1278 36539
+2266 1278 43628
+2275 1278 18455
+2313 1278 47817
+2314 1278 47817
+2315 1278 47817
+2316 1278 47817
+2318 1278 51346
+2319 1278 58266
+2320 1278 58646
+2321 1278 14046
+2330 1278 9426
+2340 1278 20658
+2379 1278 51564
+2380 1278 51564
+2381 1278 51564
+2382 1278 51564
+2383 1278 51564
+2385 1278 62812
+2386 1278 55074
+2387 1278 23903
+2396 1278 48824
+2406 1278 39560
+2417 1278 24219
+2457 1278 59167
+2458 1278 59167
+2459 1278 59167
+2460 1278 59167
+2461 1278 59167
+2462 1278 59167
+2463 1278 61666
+2464 1278 46411
+2465 1278 44944
+2474 1278 50567
+2484 1278 28842
+2495 1278 57884
+2507 1278 38063
+3789 1278 27852657
+1181 1279 1
+1182 1279 1
+1210 1279 52614
+1219 1279 12908
+1360 1279 8375
+1369 1279 22302
+1413 1279 3211
+1414 1279 28851
+1423 1279 19457
+1572 1279 8375
+1581 1279 3673
+1635 1279 11394
+1678 1279 31908
+1679 1279 18031
+1680 1279 14820
+1681 1279 28606
+1690 1279 21710
+1700 1279 29773
+1851 1279 60952
+1860 1279 60925
+1914 1279 45598
+1979 1279 15387
+2025 1279 44262
+2026 1279 25788
+2035 1279 63250
+2045 1279 40254
+2056 1279 54640
+2211 1279 57144
+2212 1279 39485
+2213 1279 37898
+2214 1279 37898
+2216 1279 16172
+2217 1279 16172
+2218 1279 16172
+2219 1279 32528
+2220 1279 32100
+2221 1279 10243
+2258 1279 49357
+2259 1279 49357
+2260 1279 49357
+2262 1279 35844
+2263 1279 35844
+2264 1279 54643
+2265 1279 7389
+2266 1279 39607
+2275 1279 35292
+2313 1279 46693
+2314 1279 46693
+2315 1279 46693
+2316 1279 46693
+2318 1279 7396
+2319 1279 53283
+2320 1279 65095
+2321 1279 51787
+2330 1279 51563
+2340 1279 50936
+2379 1279 30086
+2380 1279 30086
+2381 1279 30086
+2382 1279 30086
+2383 1279 30086
+2385 1279 64190
+2386 1279 21515
+2387 1279 42370
+2396 1279 47556
+2406 1279 1859
+2417 1279 41296
+2457 1279 1355
+2458 1279 1355
+2459 1279 1355
+2460 1279 1355
+2461 1279 1355
+2462 1279 1355
+2463 1279 41719
+2464 1279 41437
+2465 1279 64993
+2474 1279 54008
+2484 1279 56266
+2495 1279 10091
+2507 1279 24686
+3790 1279 27852657
+1182 1280 1
+1218 1280 65520
+1327 1280 19564
+1368 1280 34553
+1405 1280 3054
+1413 1280 35516
+1422 1280 962
+1537 1280 2437
+1580 1280 12492
+1634 1280 47199
+1671 1280 158
+1672 1280 27163
+1680 1280 65043
+1689 1280 42951
+1699 1280 62235
+1816 1280 55965
+1859 1280 34419
+1913 1280 54979
+1978 1280 62432
+2025 1280 20529
+2034 1280 65094
+2044 1280 30005
+2055 1280 29808
+2175 1280 24352
+2176 1280 40940
+2205 1280 19610
+2206 1280 19610
+2208 1280 44291
+2209 1280 44291
+2210 1280 44291
+2211 1280 42662
+2212 1280 34816
+2220 1280 24153
+2250 1280 21231
+2251 1280 21231
+2252 1280 21231
+2254 1280 47707
+2255 1280 47707
+2256 1280 49719
+2257 1280 17309
+2265 1280 11750
+2274 1280 48676
+2305 1280 56688
+2306 1280 56688
+2307 1280 56688
+2308 1280 56688
+2310 1280 47584
+2311 1280 32152
+2312 1280 31115
+2320 1280 27435
+2329 1280 24649
+2339 1280 31783
+2371 1280 55408
+2372 1280 55408
+2373 1280 55408
+2374 1280 55408
+2375 1280 55408
+2377 1280 6387
+2378 1280 37178
+2386 1280 14066
+2395 1280 37688
+2405 1280 17012
+2416 1280 56760
+2449 1280 49331
+2450 1280 49331
+2451 1280 49331
+2452 1280 49331
+2453 1280 49331
+2454 1280 49331
+2455 1280 35052
+2456 1280 63137
+2464 1280 16011
+2473 1280 52709
+2483 1280 63690
+2494 1280 10738
+2506 1280 56864
+3791 1280 27852657
+1183 1281 1
+1328 1281 56146
+1331 1281 9375
+1539 1281 63928
+1542 1281 1593
+1546 1281 63928
+1818 1281 9030
+1821 1281 56491
+1825 1281 9030
+1830 1281 56491
+2179 1281 58237
+2182 1281 7284
+2185 1281 31213
+2186 1281 23929
+2189 1281 47392
+2190 1281 62633
+2191 1281 38704
+2196 1281 54410
+2197 1281 15706
+2202 1281 26128
+2208 1281 62336
+2209 1281 34779
+2210 1281 14093
+2211 1281 58428
+2212 1281 58428
+2213 1281 37233
+2214 1281 15590
+2216 1281 8164
+2217 1281 21818
+2218 1281 11569
+2219 1281 53512
+2220 1281 38556
+2221 1281 45649
+2258 1281 21741
+2259 1281 37580
+2260 1281 33162
+2262 1281 36129
+2263 1281 56117
+2264 1281 10666
+2265 1281 51015
+2266 1281 24626
+2275 1281 44498
+2313 1281 13177
+2314 1281 47115
+2315 1281 7801
+2316 1281 57248
+2318 1281 7031
+2319 1281 49182
+2320 1281 3749
+2321 1281 58450
+2330 1281 32084
+2340 1281 53107
+2379 1281 16583
+2380 1281 46439
+2381 1281 19464
+2382 1281 42557
+2383 1281 45494
+2385 1281 11627
+2386 1281 20219
+2387 1281 10767
+2396 1281 22992
+2406 1281 61081
+2417 1281 7974
+2457 1281 36068
+2458 1281 14107
+2459 1281 28657
+2460 1281 20415
+2461 1281 31919
+2462 1281 44816
+2463 1281 45373
+2464 1281 27220
+2465 1281 703
+2474 1281 6707
+2484 1281 49963
+2495 1281 57247
+2507 1281 4303
+3792 1281 27852657
+1184 1282 1
+1187 1282 60923
+1188 1282 60923
+1190 1282 29929
+1191 1282 51105
+1192 1282 55703
+1195 1282 37451
+1196 1282 47269
+1200 1282 10361
+1206 1282 51674
+1207 1282 31279
+1208 1282 60743
+1209 1282 21644
+1210 1282 21644
+1211 1282 32741
+1212 1282 47623
+1214 1282 23122
+1215 1282 60807
+1216 1282 25749
+1217 1282 36260
+1218 1282 60117
+1219 1282 38473
+1361 1282 21791
+1362 1282 26392
+1363 1282 42274
+1365 1282 41254
+1366 1282 41651
+1367 1282 14578
+1368 1282 44626
+1369 1282 6012
+1414 1282 33060
+1573 1282 49951
+1574 1282 19609
+1575 1282 46154
+1576 1282 34371
+1578 1282 48647
+1579 1282 9484
+1580 1282 65007
+1581 1282 55181
+1626 1282 21246
+1681 1282 53707
+1852 1282 63450
+1853 1282 44858
+1854 1282 37076
+1855 1282 25049
+1856 1282 31546
+1858 1282 162
+1859 1282 27692
+1860 1282 7912
+1905 1282 10833
+1960 1282 40924
+2026 1282 52738
+2213 1282 10849
+2214 1282 63843
+2215 1282 18897
+2216 1282 9117
+2217 1282 30962
+2218 1282 37207
+2219 1282 6483
+2220 1282 19196
+2221 1282 59686
+2266 1282 55273
+2321 1282 52639
+2387 1282 63657
+2465 1282 48682
+3793 1282 27852657
+1185 1283 1
+1186 1283 1
+1187 1283 17
+1188 1283 16
+1190 1283 46548
+1191 1283 46490
+1192 1283 46474
+1195 1283 29885
+1196 1283 48932
+1200 1283 65409
+1206 1283 55164
+1207 1283 48008
+1208 1283 24285
+1209 1283 33766
+1210 1283 33766
+1211 1283 57514
+1212 1283 51777
+1214 1283 52527
+1215 1283 38943
+1216 1283 52902
+1217 1283 11676
+1218 1283 53262
+1219 1283 19496
+1361 1283 59357
+1362 1283 21849
+1363 1283 46971
+1365 1283 62659
+1366 1283 15826
+1367 1283 56656
+1368 1283 49636
+1369 1283 41680
+1414 1283 22184
+1573 1283 14291
+1574 1283 22310
+1575 1283 10633
+1576 1283 8922
+1578 1283 30804
+1579 1283 8261
+1580 1283 33371
+1581 1283 60129
+1626 1283 21199
+1681 1283 64536
+1852 1283 15794
+1853 1283 57276
+1854 1283 28436
+1855 1283 22054
+1856 1283 48503
+1858 1283 20262
+1859 1283 16692
+1860 1283 5209
+1905 1283 5612
+1960 1283 64150
+2026 1283 65135
+2213 1283 11169
+2214 1283 46373
+2215 1283 8068
+2216 1283 22517
+2217 1283 27670
+2218 1283 44575
+2219 1283 1160
+2220 1283 52260
+2221 1283 57031
+2266 1283 50066
+2321 1283 12125
+2387 1283 57004
+2465 1283 10435
+3794 1283 27852657
+1186 1284 1
+2459 1284 65520
+3795 1284 27852657
+1187 1285 1
+2460 1285 65520
+3796 1285 27852657
+1188 1286 1
+1192 1286 65520
+1196 1286 1
+1848 1286 644
+1856 1286 13571
+1898 1286 54280
+1899 1286 39051
+1901 1286 51717
+1904 1286 16766
+1905 1286 16766
+1914 1286 16766
+1952 1286 36501
+1953 1286 5328
+1954 1286 55620
+1955 1286 61274
+1958 1286 47722
+1959 1286 45994
+1960 1286 45994
+1969 1286 62760
+1979 1286 45994
+2018 1286 36501
+2019 1286 5328
+2020 1286 55620
+2021 1286 61274
+2022 1286 26550
+2024 1286 47722
+2025 1286 45994
+2026 1286 45994
+2035 1286 62760
+2045 1286 26467
+2056 1286 45994
+2187 1286 41252
+2188 1286 41252
+2189 1286 41252
+2190 1286 41252
+2191 1286 41252
+2192 1286 41252
+2196 1286 41252
+2202 1286 9774
+2203 1286 14405
+2207 1286 50682
+2208 1286 50682
+2209 1286 60456
+2210 1286 18047
+2211 1286 53752
+2212 1286 53752
+2213 1286 22725
+2214 1286 62912
+2216 1286 34417
+2217 1286 49042
+2218 1286 65262
+2219 1286 61800
+2220 1286 61707
+2221 1286 7955
+2258 1286 12597
+2259 1286 48852
+2260 1286 32295
+2262 1286 54739
+2263 1286 33300
+2264 1286 56015
+2265 1286 20207
+2266 1286 20178
+2275 1286 12223
+2313 1286 36917
+2314 1286 7651
+2315 1286 56615
+2316 1286 25018
+2318 1286 6553
+2319 1286 14742
+2320 1286 22927
+2321 1286 1613
+2330 1286 23904
+2340 1286 11681
+2379 1286 16525
+2380 1286 27931
+2381 1286 64986
+2382 1286 25033
+2383 1286 24622
+2385 1286 51662
+2386 1286 29699
+2387 1286 17627
+2396 1286 41579
+2406 1286 53206
+2417 1286 41525
+2457 1286 19763
+2458 1286 45652
+2459 1286 32747
+2460 1286 32748
+2461 1286 24651
+2462 1286 47353
+2463 1286 45437
+2464 1286 11603
+2465 1286 49649
+2474 1286 49015
+2484 1286 12636
+2495 1286 3371
+2507 1286 4566
+3797 1286 27852657
+1189 1287 1
+1557 1287 22521
+1828 1287 9527
+1829 1287 48720
+1830 1287 48720
+1848 1287 40517
+1856 1287 581
+1898 1287 41969
+1899 1287 48093
+1901 1287 1891
+1904 1287 18276
+1905 1287 18276
+1914 1287 18276
+1952 1287 57000
+1953 1287 5969
+1954 1287 15963
+1955 1287 48901
+1958 1287 58981
+1959 1287 508
+1960 1287 508
+1969 1287 18784
+1979 1287 508
+2018 1287 57000
+2019 1287 5969
+2020 1287 15963
+2021 1287 48901
+2022 1287 21452
+2024 1287 58981
+2025 1287 508
+2026 1287 508
+2035 1287 18784
+2045 1287 1016
+2056 1287 508
+2178 1287 33819
+2179 1287 33819
+2180 1287 42643
+2181 1287 13290
+2182 1287 44992
+2183 1287 10641
+2184 1287 32777
+2185 1287 18309
+2186 1287 38838
+2187 1287 10641
+2188 1287 44763
+2189 1287 56658
+2190 1287 31558
+2191 1287 58241
+2192 1287 43963
+2193 1287 19307
+2194 1287 43719
+2195 1287 38774
+2196 1287 16390
+2197 1287 23670
+2200 1287 64249
+2201 1287 16703
+2202 1287 34557
+2203 1287 63343
+2207 1287 14368
+2208 1287 32343
+2209 1287 50197
+2210 1287 63503
+2211 1287 45060
+2212 1287 45060
+2213 1287 12409
+2214 1287 16064
+2216 1287 37046
+2217 1287 19552
+2218 1287 11993
+2219 1287 51070
+2220 1287 64448
+2221 1287 19388
+2258 1287 5604
+2259 1287 37572
+2260 1287 28559
+2262 1287 39963
+2263 1287 44933
+2264 1287 13230
+2265 1287 8166
+2266 1287 2416
+2275 1287 48549
+2313 1287 64275
+2314 1287 64883
+2315 1287 21283
+2316 1287 57427
+2318 1287 24151
+2319 1287 39511
+2320 1287 694
+2321 1287 1582
+2330 1287 62946
+2340 1287 14397
+2379 1287 39922
+2380 1287 24616
+2381 1287 24347
+2382 1287 45100
+2383 1287 29450
+2385 1287 35363
+2386 1287 19077
+2387 1287 19166
+2396 1287 44229
+2406 1287 32211
+2417 1287 17814
+2457 1287 1025
+2458 1287 6513
+2459 1287 49960
+2460 1287 56773
+2461 1287 46474
+2462 1287 4422
+2463 1287 1080
+2464 1287 64024
+2465 1287 61210
+2474 1287 33827
+2484 1287 2166
+2495 1287 15093
+2507 1287 15890
+3798 1287 27852657
+1190 1288 1
+2461 1288 65520
+3799 1288 27852657
+1191 1289 1
+1192 1289 1
+1195 1289 41694
+1196 1289 41693
+1339 1289 1
+1345 1289 65520
+1557 1289 65520
+1620 1289 32773
+1675 1289 32773
+1676 1289 32773
+1841 1289 53606
+1848 1289 53606
+1856 1289 53606
+1899 1289 29805
+1901 1289 59566
+1954 1289 26812
+1955 1289 26812
+2020 1289 59560
+2021 1289 59560
+2022 1289 47645
+2202 1289 37969
+2203 1289 59552
+2209 1289 37969
+2210 1289 59552
+2216 1289 59561
+2217 1289 57324
+2218 1289 50615
+2260 1289 31264
+2262 1289 48397
+2263 1289 11156
+2315 1289 52857
+2316 1289 52857
+2318 1289 743
+2381 1289 30522
+2382 1289 30522
+2383 1289 50634
+2459 1289 43557
+2460 1289 43557
+2461 1289 53982
+2462 1289 30151
+2463 1289 53606
+2464 1289 53606
+2465 1289 64030
+2474 1289 54724
+2484 1289 11736
+2495 1289 47657
+2507 1289 40841
+3800 1289 27852657
+1192 1290 1
+1365 1290 56003
+1402 1290 27205
+1410 1290 61775
+1419 1290 5772
+1577 1290 17825
+1631 1290 37327
+1662 1290 5185
+1669 1290 34049
+1677 1290 29243
+1686 1290 36150
+1696 1290 4595
+1856 1290 17224
+1910 1290 33905
+1975 1290 57426
+2022 1290 12706
+2031 1290 1038
+2041 1290 36651
+2052 1290 49341
+2128 1290 45790
+2155 1290 35643
+2160 1290 472
+2166 1290 40769
+2173 1290 40769
+2187 1290 13554
+2188 1290 54171
+2190 1290 58256
+2191 1290 55678
+2196 1290 62349
+2202 1290 34686
+2209 1290 36602
+2217 1290 34288
+2232 1290 51845
+2233 1290 10001
+2234 1290 10001
+2236 1290 35268
+2241 1290 43801
+2247 1290 4136
+2254 1290 65511
+2262 1290 45454
+2271 1290 51795
+2287 1290 23598
+2288 1290 55465
+2289 1290 55465
+2290 1290 55465
+2296 1290 21929
+2302 1290 6113
+2309 1290 39333
+2317 1290 9578
+2326 1290 36504
+2336 1290 32274
+2353 1290 61765
+2354 1290 46717
+2355 1290 46717
+2356 1290 46717
+2357 1290 39910
+2368 1290 36142
+2375 1290 22635
+2383 1290 61519
+2392 1290 63340
+2402 1290 47613
+2413 1290 24073
+2431 1290 53543
+2432 1290 26630
+2433 1290 26630
+2434 1290 26630
+2435 1290 44743
+2440 1290 64686
+2446 1290 58959
+2453 1290 1397
+2461 1290 49776
+2470 1290 24679
+2480 1290 13396
+2491 1290 64240
+2503 1290 56092
+3801 1290 27852657
+1193 1291 1
+1195 1291 28737
+1196 1291 28737
+1200 1291 24783
+1206 1291 1246
+1207 1291 60874
+1208 1291 18235
+1209 1291 9617
+1210 1291 9617
+1211 1291 54083
+1212 1291 59818
+1214 1291 38845
+1215 1291 23451
+1216 1291 9351
+1217 1291 57101
+1218 1291 50597
+1219 1291 40980
+1361 1291 2324
+1362 1291 29440
+1363 1291 3801
+1365 1291 25568
+1366 1291 25739
+1367 1291 49148
+1368 1291 23779
+1369 1291 24477
+1414 1291 49018
+1573 1291 248
+1574 1291 37333
+1575 1291 15814
+1576 1291 29095
+1578 1291 57418
+1579 1291 7841
+1580 1291 38514
+1581 1291 32343
+1626 1291 52504
+1681 1291 3486
+1852 1291 5412
+1853 1291 30872
+1854 1291 25557
+1855 1291 63615
+1856 1291 52306
+1858 1291 26866
+1859 1291 13029
+1860 1291 18975
+1905 1291 44054
+1960 1291 55846
+2026 1291 52360
+2213 1291 63742
+2214 1291 26879
+2215 1291 46251
+2216 1291 7065
+2217 1291 18675
+2218 1291 14308
+2219 1291 63404
+2220 1291 40439
+2221 1291 47018
+2266 1291 20159
+2321 1291 52300
+2387 1291 12026
+2465 1291 18841
+3802 1291 27852657
+1194 1292 1
+1195 1292 1
+1196 1292 1
+1620 1292 16372
+1675 1292 16372
+1676 1292 16372
+1841 1292 32762
+1848 1292 32762
+1856 1292 32762
+1899 1292 65506
+1901 1292 32759
+1954 1292 16375
+1955 1292 16375
+2020 1292 3
+2021 1292 3
+2022 1292 32765
+2202 1292 36858
+2203 1292 9
+2209 1292 36858
+2210 1292 9
+2216 1292 24572
+2217 1292 61430
+2218 1292 61436
+2260 1292 8195
+2262 1292 28663
+2263 1292 4103
+2315 1292 45050
+2316 1292 45050
+2318 1292 12286
+2381 1292 53239
+2382 1292 53239
+2383 1292 40948
+2459 1292 51188
+2460 1292 51188
+2461 1292 36855
+2462 1292 24573
+2463 1292 32762
+2464 1292 32762
+2465 1292 6144
+2474 1292 59379
+2484 1292 56301
+2495 1292 28662
+2507 1292 3082
+3803 1292 27852657
+1195 1293 1
+1196 1293 1
+1848 1293 61136
+1856 1293 55752
+1899 1293 26622
+1901 1293 60568
+1904 1293 7132
+1905 1293 7132
+1914 1293 7132
+1952 1293 52136
+1953 1293 52136
+1954 1293 13237
+1955 1293 13237
+1958 1293 30661
+1959 1293 54951
+1960 1293 54951
+1969 1293 62083
+1979 1293 54951
+2018 1293 52136
+2019 1293 52136
+2020 1293 13237
+2021 1293 13237
+2022 1293 15752
+2024 1293 30661
+2025 1293 54951
+2026 1293 54951
+2035 1293 62083
+2045 1293 44381
+2056 1293 54951
+2202 1293 56555
+2203 1293 32541
+2207 1293 37637
+2208 1293 37637
+2209 1293 28671
+2210 1293 28004
+2211 1293 64488
+2212 1293 64488
+2213 1293 21803
+2214 1293 21803
+2216 1293 33382
+2217 1293 1080
+2218 1293 3958
+2219 1293 1234
+2220 1293 62887
+2221 1293 63920
+2258 1293 49901
+2259 1293 49901
+2260 1293 44021
+2262 1293 2714
+2263 1293 9436
+2264 1293 29184
+2265 1293 65017
+2266 1293 26505
+2275 1293 28106
+2313 1293 5531
+2314 1293 5531
+2315 1293 65172
+2316 1293 65172
+2318 1293 39797
+2319 1293 16587
+2320 1293 28313
+2321 1293 47099
+2330 1293 7851
+2340 1293 45266
+2379 1293 46663
+2380 1293 46663
+2381 1293 17618
+2382 1293 17618
+2383 1293 34351
+2385 1293 5297
+2386 1293 49515
+2387 1293 35141
+2396 1293 19848
+2406 1293 20072
+2417 1293 40327
+2457 1293 7278
+2458 1293 7278
+2459 1293 58018
+2460 1293 58018
+2461 1293 45936
+2462 1293 17973
+2463 1293 50965
+2464 1293 64086
+2465 1293 8078
+2474 1293 41206
+2484 1293 20008
+2495 1293 44523
+2507 1293 33534
+3804 1293 27852657
+1196 1294 1
+1366 1294 46340
+1403 1294 61091
+1411 1294 54752
+1420 1294 8412
+1578 1294 5354
+1632 1294 42267
+1657 1294 60089
+1663 1294 44762
+1670 1294 49192
+1678 1294 857
+1687 1294 4187
+1697 1294 35853
+1857 1294 51035
+1911 1294 41233
+1976 1294 61375
+2015 1294 46021
+2023 1294 42880
+2032 1294 40427
+2042 1294 16879
+2053 1294 56878
+2161 1294 4979
+2167 1294 3450
+2174 1294 3450
+2192 1294 63538
+2193 1294 63538
+2195 1294 2205
+2196 1294 2205
+2197 1294 4120
+2203 1294 11164
+2210 1294 16323
+2218 1294 52590
+2237 1294 43103
+2238 1294 43103
+2239 1294 43103
+2241 1294 61323
+2242 1294 32477
+2248 1294 45765
+2255 1294 56187
+2263 1294 5271
+2272 1294 38003
+2292 1294 63778
+2293 1294 63778
+2294 1294 63778
+2295 1294 63778
+2297 1294 39503
+2303 1294 60987
+2310 1294 8597
+2318 1294 61797
+2327 1294 19635
+2337 1294 53045
+2358 1294 9947
+2359 1294 9947
+2360 1294 9947
+2361 1294 9947
+2362 1294 9947
+2369 1294 2529
+2376 1294 9125
+2384 1294 31728
+2393 1294 56512
+2403 1294 52678
+2414 1294 32237
+2436 1294 17842
+2437 1294 17842
+2438 1294 17842
+2439 1294 17842
+2440 1294 17842
+2441 1294 17842
+2447 1294 16334
+2454 1294 22889
+2462 1294 29472
+2471 1294 51527
+2481 1294 30499
+2492 1294 54740
+2504 1294 31304
+3805 1294 27852657
+1197 1295 1
+1198 1295 1
+1199 1295 1
+1200 1295 1
+1201 1295 1
+1205 1295 1
+1206 1295 1
+1207 1295 1
+1208 1295 1
+1214 1295 1
+1215 1295 1
+1216 1295 1
+1365 1295 1
+1366 1295 1
+1578 1295 1
+2219 1295 32761
+2220 1295 32761
+2221 1295 32761
+2266 1295 32761
+2321 1295 32761
+2387 1295 32761
+2465 1295 24573
+3806 1295 27852657
+1198 1296 1
+1200 1296 36421
+1206 1296 39501
+1207 1296 15488
+1208 1296 14930
+1209 1296 503
+1210 1296 503
+1211 1296 46956
+1212 1296 34662
+1214 1296 57053
+1215 1296 11318
+1216 1296 56538
+1217 1296 58186
+1218 1296 63446
+1219 1296 62943
+1361 1296 56204
+1362 1296 61015
+1363 1296 5436
+1365 1296 4478
+1366 1296 13094
+1367 1296 43432
+1368 1296 58734
+1369 1296 26437
+1414 1296 29015
+1573 1296 46455
+1574 1296 40018
+1575 1296 9545
+1576 1296 49133
+1578 1296 8814
+1579 1296 3153
+1580 1296 13701
+1581 1296 64246
+1626 1296 19245
+1681 1296 55751
+1852 1296 35787
+1853 1296 13541
+1854 1296 56759
+1855 1296 53209
+1856 1296 21830
+1858 1296 3524
+1859 1296 37148
+1860 1296 65294
+1905 1296 48082
+1960 1296 17595
+2026 1296 27365
+2213 1296 52726
+2214 1296 35015
+2215 1296 56568
+2216 1296 65117
+2217 1296 14255
+2218 1296 35460
+2219 1296 60330
+2220 1296 1363
+2221 1296 9525
+2266 1296 51739
+2321 1296 40937
+2387 1296 957
+2465 1296 24971
+3807 1296 27852657
+1199 1297 1
+1200 1297 1
+1201 1297 1
+1206 1297 1
+1207 1297 1
+1208 1297 1
+1214 1297 1
+1215 1297 1
+1216 1297 1
+1350 1297 1
+1351 1297 1
+1357 1297 1
+1358 1297 1
+1365 1297 2
+1366 1297 2
+1410 1297 1
+1411 1297 1
+1563 1297 1
+1570 1297 1
+1578 1297 2
+1623 1297 2
+1678 1297 1
+2219 1297 32761
+2220 1297 32761
+2221 1297 32761
+2264 1297 32761
+2265 1297 32761
+2266 1297 1
+2275 1297 32761
+2319 1297 32761
+2320 1297 32761
+2321 1297 1
+2330 1297 1
+2340 1297 32761
+2385 1297 32761
+2386 1297 32761
+2387 1297 1
+2396 1297 1
+2406 1297 1
+2417 1297 32761
+2463 1297 24572
+2464 1297 24572
+2465 1297 49144
+2474 1297 49143
+2484 1297 49142
+2495 1297 49141
+2507 1297 8190
+3808 1297 27852657
+1200 1298 1
+1848 1298 64069
+1856 1298 46153
+1899 1298 7544
+1901 1298 30717
+1904 1298 8811
+1905 1298 8811
+1914 1298 8811
+1952 1298 28721
+1953 1298 28721
+1954 1298 36265
+1955 1298 36265
+1958 1298 55912
+1959 1298 45654
+1960 1298 45654
+1969 1298 54465
+1979 1298 45654
+2018 1298 28721
+2019 1298 28721
+2020 1298 36265
+2021 1298 36265
+2022 1298 16897
+2024 1298 55912
+2025 1298 45654
+2026 1298 45654
+2035 1298 54465
+2045 1298 25787
+2056 1298 45654
+2202 1298 34048
+2203 1298 2776
+2207 1298 2667
+2208 1298 2667
+2209 1298 8049
+2210 1298 21517
+2211 1298 19737
+2212 1298 19737
+2213 1298 45287
+2214 1298 45287
+2216 1298 21386
+2217 1298 31351
+2218 1298 54760
+2219 1298 16983
+2220 1298 36407
+2221 1298 16670
+2258 1298 3480
+2259 1298 3480
+2260 1298 15739
+2262 1298 63277
+2263 1298 25186
+2264 1298 17882
+2265 1298 33778
+2266 1298 21182
+2275 1298 4512
+2313 1298 28271
+2314 1298 28271
+2315 1298 40530
+2316 1298 40530
+2318 1298 33219
+2319 1298 25749
+2320 1298 30147
+2321 1298 3360
+2330 1298 30519
+2340 1298 26007
+2379 1298 40990
+2380 1298 40990
+2381 1298 16245
+2382 1298 16245
+2383 1298 22819
+2385 1298 43218
+2386 1298 6234
+2387 1298 61233
+2396 1298 39505
+2406 1298 2897
+2417 1298 42411
+2457 1298 18184
+2458 1298 18184
+2459 1298 33857
+2460 1298 33857
+2461 1298 55315
+2462 1298 35587
+2463 1298 53281
+2464 1298 11222
+2465 1298 48067
+2474 1298 59904
+2484 1298 33397
+2495 1298 33414
+2507 1298 24098
+3809 1298 27852657
+1201 1299 1
+1901 1299 7261
+1904 1299 26277
+1905 1299 26277
+1914 1299 26277
+1952 1299 46622
+1953 1299 46622
+1954 1299 46622
+1955 1299 46622
+1958 1299 65290
+1959 1299 21768
+1960 1299 21768
+1969 1299 48045
+1979 1299 21768
+2018 1299 46622
+2019 1299 46622
+2020 1299 46622
+2021 1299 46622
+2022 1299 46622
+2024 1299 65290
+2025 1299 21768
+2026 1299 21768
+2035 1299 48045
+2045 1299 43536
+2056 1299 21768
+2203 1299 7770
+2207 1299 59302
+2208 1299 59302
+2209 1299 59302
+2210 1299 20699
+2211 1299 61249
+2212 1299 61249
+2213 1299 32327
+2214 1299 32327
+2216 1299 39775
+2217 1299 39775
+2218 1299 39250
+2219 1299 63043
+2220 1299 10681
+2221 1299 14953
+2258 1299 26462
+2259 1299 26462
+2260 1299 26462
+2262 1299 52210
+2263 1299 33542
+2264 1299 14611
+2265 1299 26324
+2266 1299 62568
+2275 1299 47615
+2313 1299 4640
+2314 1299 4640
+2315 1299 4640
+2316 1299 4640
+2318 1299 42489
+2319 1299 13225
+2320 1299 20936
+2321 1299 48610
+2330 1299 26151
+2340 1299 44057
+2379 1299 63635
+2380 1299 63635
+2381 1299 63635
+2382 1299 63635
+2383 1299 63635
+2385 1299 38806
+2386 1299 15652
+2387 1299 52068
+2396 1299 36902
+2406 1299 43506
+2417 1299 64970
+2457 1299 4269
+2458 1299 4269
+2459 1299 4269
+2460 1299 4269
+2461 1299 4269
+2462 1299 2974
+2463 1299 25771
+2464 1299 30777
+2465 1299 36269
+2474 1299 32675
+2484 1299 31099
+2495 1299 61929
+2507 1299 3952
+3810 1299 27852657
+1202 1300 1
+1210 1300 65520
+1219 1300 1
+1352 1300 4962
+1360 1300 60559
+1369 1300 16366
+1413 1300 12295
+1414 1300 19884
+1423 1300 3519
+1564 1300 19012
+1572 1300 46509
+1581 1300 4083
+1635 1300 58649
+1678 1300 3428
+1679 1300 45574
+1680 1300 33279
+1681 1300 32018
+1690 1300 56752
+1700 1300 1622
+1843 1300 41192
+1851 1300 24329
+1860 1300 16329
+1914 1300 29787
+1979 1300 4541
+2025 1300 52803
+2026 1300 47349
+2035 1300 60694
+2045 1300 45687
+2056 1300 42768
+2204 1300 56906
+2211 1300 61580
+2212 1300 4674
+2213 1300 64750
+2214 1300 64750
+2216 1300 35833
+2217 1300 35833
+2218 1300 35833
+2219 1300 53367
+2220 1300 44210
+2221 1300 9259
+2258 1300 33015
+2259 1300 33015
+2260 1300 33015
+2262 1300 62615
+2263 1300 62615
+2264 1300 14532
+2265 1300 3041
+2266 1300 31828
+2275 1300 15027
+2313 1300 19048
+2314 1300 19048
+2315 1300 19048
+2316 1300 19048
+2318 1300 788
+2319 1300 60866
+2320 1300 42541
+2321 1300 64445
+2330 1300 34502
+2340 1300 15078
+2379 1300 37074
+2380 1300 37074
+2381 1300 37074
+2382 1300 37074
+2383 1300 37074
+2385 1300 24216
+2386 1300 10050
+2387 1300 55461
+2396 1300 64824
+2406 1300 24456
+2417 1300 24044
+2457 1300 65222
+2458 1300 65222
+2459 1300 65222
+2460 1300 65222
+2461 1300 65222
+2462 1300 65222
+2463 1300 28920
+2464 1300 19260
+2465 1300 59239
+2474 1300 29558
+2484 1300 44332
+2495 1300 54208
+2507 1300 62838
+3811 1300 27852657
+1203 1301 1
+1211 1301 1
+1212 1301 1
+1361 1301 1
+1362 1301 1
+1363 1301 1
+1573 1301 1
+1574 1301 1
+1575 1301 1
+1576 1301 1
+1852 1301 1
+1853 1301 1
+1854 1301 1
+1855 1301 1
+1856 1301 1
+2213 1301 32761
+2214 1301 32761
+2215 1301 32761
+2216 1301 32761
+2217 1301 32761
+2218 1301 32761
+2465 1301 24573
+3812 1301 27852657
+1204 1302 1
+2465 1302 65520
+3813 1302 27852657
+1205 1303 1
+1206 1303 1
+1207 1303 1
+1208 1303 1
+1209 1303 44189
+1210 1303 44189
+1211 1303 28417
+1212 1303 28417
+1214 1303 48406
+1215 1303 48406
+1216 1303 48406
+1217 1303 64566
+1218 1303 28935
+1219 1303 50267
+1361 1303 20151
+1362 1303 20151
+1363 1303 20151
+1365 1303 20589
+1366 1303 20589
+1367 1303 11607
+1368 1303 13496
+1369 1303 6642
+1414 1303 21896
+1573 1303 35584
+1574 1303 35584
+1575 1303 35584
+1576 1303 35584
+1578 1303 32230
+1579 1303 60649
+1580 1303 7436
+1581 1303 58578
+1626 1303 37988
+1681 1303 16092
+1852 1303 16121
+1853 1303 16121
+1854 1303 16121
+1855 1303 16121
+1856 1303 16121
+1858 1303 39622
+1859 1303 38238
+1860 1303 52556
+1905 1303 59890
+1960 1303 12794
+2026 1303 62223
+2213 1303 26657
+2214 1303 26657
+2215 1303 26657
+2216 1303 26657
+2217 1303 26657
+2218 1303 26657
+2219 1303 45433
+2220 1303 40293
+2221 1303 30897
+2266 1303 3659
+2321 1303 35978
+2387 1303 51521
+2465 1303 1310
+3814 1303 27852657
+1206 1304 1
+1207 1304 1
+1208 1304 1
+1214 1304 1
+1215 1304 1
+1216 1304 1
+1410 1304 65520
+1411 1304 65520
+1579 1304 6146
+1580 1304 6146
+1581 1304 6146
+1623 1304 65520
+1624 1304 6146
+1625 1304 6146
+1626 1304 12292
+1635 1304 6146
+1679 1304 6146
+1680 1304 6146
+1681 1304 12292
+1690 1304 12292
+1700 1304 6146
+1850 1304 46342
+1851 1304 46342
+1858 1304 52488
+1859 1304 33309
+1860 1304 52488
+1901 1304 28435
+1903 1304 52488
+1904 1304 19675
+1905 1304 25821
+1914 1304 38854
+1958 1304 8548
+1959 1304 41256
+1960 1304 53548
+1969 1304 39914
+1979 1304 1060
+2024 1304 2402
+2025 1304 35110
+2026 1304 41256
+2035 1304 27622
+2045 1304 49203
+2056 1304 54289
+2211 1304 28635
+2212 1304 28635
+2219 1304 16778
+2220 1304 53605
+2221 1304 24970
+2262 1304 59340
+2263 1304 59340
+2264 1304 16778
+2265 1304 64055
+2266 1304 32264
+2275 1304 7294
+2318 1304 59340
+2319 1304 53333
+2320 1304 35089
+2321 1304 61750
+2330 1304 3125
+2340 1304 61352
+2385 1304 6969
+2386 1304 55674
+2387 1304 16814
+2396 1304 29372
+2406 1304 27585
+2417 1304 31754
+2463 1304 56055
+2464 1304 13025
+2465 1304 46495
+2474 1304 19570
+2484 1304 61812
+2495 1304 19639
+2507 1304 37326
+3815 1304 27852657
+1207 1305 1
+1215 1305 1
+1410 1305 65520
+1848 1305 32763
+1856 1305 2
+1901 1305 32078
+1904 1305 17260
+1905 1305 17260
+1914 1305 17260
+1952 1305 57776
+1953 1305 57776
+1954 1305 57776
+1955 1305 57776
+1958 1305 60040
+1959 1305 3969
+1960 1305 3969
+1969 1305 21229
+1979 1305 3969
+2018 1305 57776
+2019 1305 57776
+2020 1305 57776
+2021 1305 57776
+2022 1305 57776
+2024 1305 60040
+2025 1305 3969
+2026 1305 3969
+2035 1305 21229
+2045 1305 7938
+2056 1305 3969
+2203 1305 5562
+2207 1305 60245
+2208 1305 60245
+2209 1305 23390
+2210 1305 26502
+2211 1305 43980
+2212 1305 43980
+2213 1305 23087
+2214 1305 23087
+2216 1305 1015
+2217 1305 33776
+2218 1305 42974
+2219 1305 2925
+2220 1305 20482
+2221 1305 42023
+2258 1305 61794
+2259 1305 61794
+2260 1305 61794
+2262 1305 12265
+2263 1305 62820
+2264 1305 37279
+2265 1305 32199
+2266 1305 28174
+2275 1305 51672
+2313 1305 50036
+2314 1305 50036
+2315 1305 50036
+2316 1305 50036
+2318 1305 62036
+2319 1305 4393
+2320 1305 21597
+2321 1305 10389
+2330 1305 55329
+2340 1305 3657
+2379 1305 7565
+2380 1305 7565
+2381 1305 7565
+2382 1305 7565
+2383 1305 7565
+2385 1305 3802
+2386 1305 64498
+2387 1305 7594
+2396 1305 62861
+2406 1305 59495
+2417 1305 55838
+2457 1305 21126
+2458 1305 21126
+2459 1305 21126
+2460 1305 21126
+2461 1305 21126
+2462 1305 20199
+2463 1305 31539
+2464 1305 31176
+2465 1305 16602
+2474 1305 58629
+2484 1305 39386
+2495 1305 20852
+2507 1305 33382
+3816 1305 27852657
+1208 1306 1
+1216 1306 1
+1411 1306 65520
+1678 1306 1
+1901 1306 61157
+1904 1306 20292
+1905 1306 20292
+1914 1306 20292
+1952 1306 24464
+1953 1306 24464
+1954 1306 24464
+1955 1306 24464
+1958 1306 2480
+1959 1306 21631
+1960 1306 21631
+1969 1306 41923
+1979 1306 21631
+2018 1306 24464
+2019 1306 24464
+2020 1306 24464
+2021 1306 24464
+2022 1306 24464
+2024 1306 2480
+2025 1306 21631
+2026 1306 21631
+2035 1306 41923
+2045 1306 43262
+2056 1306 21631
+2203 1306 59959
+2207 1306 10717
+2208 1306 10717
+2209 1306 10717
+2210 1306 7605
+2211 1306 21541
+2212 1306 21541
+2213 1306 37501
+2214 1306 37501
+2216 1306 28283
+2217 1306 28283
+2218 1306 19085
+2219 1306 62596
+2220 1306 12376
+2221 1306 56356
+2258 1306 32262
+2259 1306 32262
+2260 1306 32262
+2262 1306 38568
+2263 1306 53534
+2264 1306 28242
+2265 1306 14563
+2266 1306 5428
+2275 1306 14593
+2313 1306 49166
+2314 1306 49166
+2315 1306 49166
+2316 1306 49166
+2318 1306 4960
+2319 1306 43122
+2320 1306 51625
+2321 1306 27349
+2330 1306 41924
+2340 1306 27331
+2379 1306 32489
+2380 1306 32489
+2381 1306 32489
+2382 1306 32489
+2383 1306 32489
+2385 1306 32272
+2386 1306 50003
+2387 1306 52103
+2396 1306 17083
+2406 1306 65101
+2417 1306 37770
+2457 1306 48991
+2458 1306 48991
+2459 1306 48991
+2460 1306 48991
+2461 1306 48991
+2462 1306 49918
+2463 1306 33982
+2464 1306 45726
+2465 1306 51649
+2474 1306 611
+2484 1306 21845
+2495 1306 24381
+2507 1306 1841
+3817 1306 27852657
+1209 1307 1
+1210 1307 1
+1217 1307 1
+1218 1307 2
+1219 1307 1
+1359 1307 5617
+1360 1307 5617
+1367 1307 29953
+1368 1307 35571
+1369 1307 29954
+1412 1307 29952
+1413 1307 35569
+1414 1307 59905
+1423 1307 29952
+1580 1307 1
+1581 1307 1
+1625 1307 5617
+1626 1307 29953
+1635 1307 29952
+1679 1307 35569
+1680 1307 35569
+1681 1307 35569
+1690 1307 35569
+1700 1307 35569
+1901 1307 11673
+1904 1307 47459
+1905 1307 44837
+1914 1307 44837
+1952 1307 43134
+1953 1307 43134
+1954 1307 43134
+1955 1307 43134
+1958 1307 24083
+1959 1307 10638
+1960 1307 35231
+1969 1307 60218
+1979 1307 15381
+2018 1307 43134
+2019 1307 43134
+2020 1307 43134
+2021 1307 43134
+2022 1307 43134
+2024 1307 54035
+2025 1307 40590
+2026 1307 65183
+2035 1307 24649
+2045 1307 55097
+2056 1307 9764
+2207 1307 45700
+2208 1307 45700
+2209 1307 45700
+2210 1307 45700
+2211 1307 62309
+2212 1307 62309
+2213 1307 49949
+2214 1307 49949
+2216 1307 44841
+2217 1307 44841
+2218 1307 44841
+2219 1307 25159
+2220 1307 47468
+2221 1307 50680
+2258 1307 35832
+2259 1307 35832
+2260 1307 35832
+2262 1307 13986
+2263 1307 13986
+2264 1307 3004
+2265 1307 16662
+2266 1307 29192
+2275 1307 44033
+2313 1307 26641
+2314 1307 26641
+2315 1307 26641
+2316 1307 26641
+2318 1307 23312
+2319 1307 29308
+2320 1307 39134
+2321 1307 11041
+2330 1307 54862
+2340 1307 10829
+2379 1307 6766
+2380 1307 6766
+2381 1307 6766
+2382 1307 6766
+2383 1307 6766
+2385 1307 63181
+2386 1307 29928
+2387 1307 61372
+2396 1307 37591
+2406 1307 23777
+2417 1307 12948
+2457 1307 18453
+2458 1307 18453
+2459 1307 18453
+2460 1307 18453
+2461 1307 18453
+2462 1307 18453
+2463 1307 46498
+2464 1307 23140
+2465 1307 60044
+2474 1307 54628
+2484 1307 11462
+2495 1307 51512
+2507 1307 31474
+3818 1307 27852657
+1210 1308 1
+1219 1308 65520
+1360 1308 19564
+1369 1308 34553
+1413 1308 3054
+1414 1308 35516
+1423 1308 962
+1572 1308 2437
+1581 1308 12492
+1635 1308 47199
+1679 1308 158
+1680 1308 27163
+1681 1308 65043
+1690 1308 42951
+1700 1308 62235
+1851 1308 55965
+1860 1308 34419
+1914 1308 54979
+1979 1308 62432
+2026 1308 20529
+2035 1308 65094
+2045 1308 30005
+2056 1308 29808
+2211 1308 24352
+2212 1308 40940
+2213 1308 19610
+2214 1308 19610
+2216 1308 44291
+2217 1308 44291
+2218 1308 44291
+2219 1308 42662
+2220 1308 34816
+2221 1308 24153
+2258 1308 21231
+2259 1308 21231
+2260 1308 21231
+2262 1308 47707
+2263 1308 47707
+2264 1308 49719
+2265 1308 17309
+2266 1308 11750
+2275 1308 48676
+2313 1308 56688
+2314 1308 56688
+2315 1308 56688
+2316 1308 56688
+2318 1308 47584
+2319 1308 32152
+2320 1308 31115
+2321 1308 27435
+2330 1308 24649
+2340 1308 31783
+2379 1308 55408
+2380 1308 55408
+2381 1308 55408
+2382 1308 55408
+2383 1308 55408
+2385 1308 6387
+2386 1308 37178
+2387 1308 14066
+2396 1308 37688
+2406 1308 17012
+2417 1308 56760
+2457 1308 49331
+2458 1308 49331
+2459 1308 49331
+2460 1308 49331
+2461 1308 49331
+2462 1308 49331
+2463 1308 35052
+2464 1308 63137
+2465 1308 16011
+2474 1308 52709
+2484 1308 63690
+2495 1308 10738
+2507 1308 56864
+3819 1308 27852657
+1211 1309 1
+1369 1309 50663
+1407 1309 1
+1413 1309 51868
+1414 1309 21821
+1423 1309 36679
+1581 1309 9142
+1635 1309 897
+1674 1309 65520
+1678 1309 8083
+1679 1309 54397
+1680 1309 2529
+1681 1309 58047
+1690 1309 3213
+1700 1309 38995
+1860 1309 26655
+1914 1309 42794
+1979 1309 7764
+2025 1309 40084
+2026 1309 4929
+2035 1309 48117
+2045 1309 8487
+2056 1309 39718
+2202 1309 57425
+2209 1309 8603
+2210 1309 44455
+2211 1309 26766
+2212 1309 26766
+2213 1309 1084
+2214 1309 55888
+2216 1309 12754
+2217 1309 40018
+2218 1309 34218
+2219 1309 4209
+2220 1309 45281
+2221 1309 46129
+2258 1309 17852
+2259 1309 55799
+2260 1309 41998
+2262 1309 38828
+2263 1309 28720
+2264 1309 39292
+2265 1309 10689
+2266 1309 16119
+2275 1309 61363
+2313 1309 40159
+2314 1309 63418
+2315 1309 33030
+2316 1309 33030
+2318 1309 8834
+2319 1309 56907
+2320 1309 25103
+2321 1309 36448
+2330 1309 41588
+2340 1309 63609
+2379 1309 45611
+2380 1309 12601
+2381 1309 18694
+2382 1309 18694
+2383 1309 61309
+2385 1309 48324
+2386 1309 59600
+2387 1309 27754
+2396 1309 22176
+2406 1309 53866
+2417 1309 64912
+2457 1309 30647
+2458 1309 56580
+2459 1309 61347
+2460 1309 61347
+2461 1309 22231
+2462 1309 30851
+2463 1309 15863
+2464 1309 2248
+2465 1309 61413
+2474 1309 51412
+2484 1309 32769
+2495 1309 38950
+2507 1309 60742
+3820 1309 27852657
+1212 1310 1
+1407 1310 65520
+1674 1310 1
+1848 1310 21223
+1856 1310 35404
+1898 1310 62823
+1899 1310 33261
+1901 1310 10172
+1904 1310 41764
+1905 1310 41764
+1914 1310 41764
+1952 1310 30586
+1953 1310 30838
+1954 1310 49171
+1955 1310 28251
+1958 1310 42908
+1959 1310 17781
+1960 1310 17781
+1969 1310 59545
+1979 1310 17781
+2018 1310 30586
+2019 1310 30837
+2020 1310 49171
+2021 1310 28251
+2022 1310 62652
+2024 1310 42908
+2025 1310 17781
+2026 1310 17781
+2035 1310 59545
+2045 1310 35562
+2056 1310 17781
+2200 1310 58834
+2201 1310 58834
+2202 1310 13652
+2203 1310 8270
+2207 1310 30264
+2208 1310 30264
+2209 1310 50603
+2210 1310 57058
+2211 1310 30538
+2212 1310 30538
+2213 1310 39731
+2214 1310 13294
+2216 1310 56061
+2217 1310 38492
+2218 1310 38363
+2219 1310 19065
+2220 1310 31699
+2221 1310 1161
+2258 1310 27494
+2259 1310 9403
+2260 1310 13915
+2262 1310 1808
+2263 1310 55134
+2264 1310 55280
+2265 1310 65429
+2266 1310 49155
+2275 1310 47994
+2313 1310 11698
+2314 1310 1797
+2315 1310 7470
+2316 1310 12992
+2318 1310 45152
+2319 1310 26375
+2320 1310 11993
+2321 1310 33656
+2330 1310 22868
+2340 1310 40395
+2379 1310 23052
+2380 1310 40790
+2381 1310 52307
+2382 1310 18312
+2383 1310 1550
+2385 1310 39279
+2386 1310 36831
+2387 1310 34312
+2396 1310 50296
+2406 1310 24427
+2417 1310 49553
+2457 1310 55353
+2458 1310 6223
+2459 1310 48483
+2460 1310 48483
+2461 1310 18715
+2462 1310 43391
+2463 1310 39211
+2464 1310 10060
+2465 1310 22427
+2474 1310 19441
+2484 1310 65333
+2495 1310 26722
+2507 1310 13398
+3821 1310 27852657
+1213 1311 1
+2465 1311 65520
+3822 1311 27852657
+1214 1312 1
+1215 1312 1
+1369 1312 34976
+1413 1312 24806
+1414 1312 7599
+1423 1312 38144
+1581 1312 2585
+1635 1312 31230
+1678 1312 36084
+1679 1312 47570
+1680 1312 22764
+1681 1312 19134
+1690 1312 25454
+1700 1312 32368
+1860 1312 19269
+1914 1312 26427
+1979 1312 33947
+2025 1312 26994
+2026 1312 53889
+2035 1312 49039
+2045 1312 49673
+2056 1312 48094
+2210 1312 60542
+2211 1312 23497
+2212 1312 23497
+2213 1312 19175
+2214 1312 19175
+2216 1312 35436
+2217 1312 35436
+2218 1312 33521
+2219 1312 30924
+2220 1312 60937
+2221 1312 40619
+2258 1312 59234
+2259 1312 59234
+2260 1312 59234
+2262 1312 33919
+2263 1312 62765
+2264 1312 3058
+2265 1312 40480
+2266 1312 13551
+2275 1312 4092
+2313 1312 6248
+2314 1312 6248
+2315 1312 6248
+2316 1312 6248
+2318 1312 16917
+2319 1312 56035
+2320 1312 37372
+2321 1312 18647
+2330 1312 3228
+2340 1312 50709
+2379 1312 7235
+2380 1312 7235
+2381 1312 7235
+2382 1312 7235
+2383 1312 7235
+2385 1312 56668
+2386 1312 53082
+2387 1312 35607
+2396 1312 25033
+2406 1312 59401
+2417 1312 34199
+2457 1312 3782
+2458 1312 3782
+2459 1312 3782
+2460 1312 3782
+2461 1312 3782
+2462 1312 3782
+2463 1312 19507
+2464 1312 42532
+2465 1312 21362
+2474 1312 19500
+2484 1312 21602
+2495 1312 52134
+2507 1312 27671
+3823 1312 27852657
+1215 1313 1
+1369 1313 56003
+1413 1313 27205
+1414 1313 61775
+1423 1313 5772
+1581 1313 17825
+1635 1313 37327
+1679 1313 5185
+1680 1313 34049
+1681 1313 29243
+1690 1313 36150
+1700 1313 4595
+1860 1313 17224
+1914 1313 33905
+1979 1313 57426
+2026 1313 12706
+2035 1313 1038
+2045 1313 36651
+2056 1313 49341
+2202 1313 45790
+2209 1313 35643
+2210 1313 472
+2211 1313 40769
+2212 1313 40769
+2213 1313 13554
+2214 1313 54171
+2216 1313 58256
+2217 1313 55678
+2218 1313 62349
+2219 1313 34686
+2220 1313 36602
+2221 1313 34288
+2258 1313 51845
+2259 1313 10001
+2260 1313 10001
+2262 1313 35268
+2263 1313 43801
+2264 1313 4136
+2265 1313 65511
+2266 1313 45454
+2275 1313 51795
+2313 1313 23598
+2314 1313 55465
+2315 1313 55465
+2316 1313 55465
+2318 1313 21929
+2319 1313 6113
+2320 1313 39333
+2321 1313 9578
+2330 1313 36504
+2340 1313 32274
+2379 1313 61765
+2380 1313 46717
+2381 1313 46717
+2382 1313 46717
+2383 1313 39910
+2385 1313 36142
+2386 1313 22635
+2387 1313 61519
+2396 1313 63340
+2406 1313 47613
+2417 1313 24073
+2457 1313 53543
+2458 1313 26630
+2459 1313 26630
+2460 1313 26630
+2461 1313 44743
+2462 1313 64686
+2463 1313 58959
+2464 1313 1397
+2465 1313 49776
+2474 1313 24679
+2484 1313 13396
+2495 1313 64240
+2507 1313 56092
+3824 1313 27852657
+1216 1314 1
+1369 1314 46340
+1413 1314 61091
+1414 1314 54752
+1423 1314 8412
+1581 1314 5354
+1635 1314 42267
+1678 1314 60089
+1679 1314 44762
+1680 1314 49192
+1681 1314 857
+1690 1314 4187
+1700 1314 35853
+1860 1314 51035
+1914 1314 41233
+1979 1314 61375
+2025 1314 46021
+2026 1314 42880
+2035 1314 40427
+2045 1314 16879
+2056 1314 56878
+2210 1314 4979
+2211 1314 3450
+2212 1314 3450
+2213 1314 63538
+2214 1314 63538
+2216 1314 2205
+2217 1314 2205
+2218 1314 4120
+2219 1314 11164
+2220 1314 16323
+2221 1314 52590
+2258 1314 43103
+2259 1314 43103
+2260 1314 43103
+2262 1314 61323
+2263 1314 32477
+2264 1314 45765
+2265 1314 56187
+2266 1314 5271
+2275 1314 38003
+2313 1314 63778
+2314 1314 63778
+2315 1314 63778
+2316 1314 63778
+2318 1314 39503
+2319 1314 60987
+2320 1314 8597
+2321 1314 61797
+2330 1314 19635
+2340 1314 53045
+2379 1314 9947
+2380 1314 9947
+2381 1314 9947
+2382 1314 9947
+2383 1314 9947
+2385 1314 2529
+2386 1314 9125
+2387 1314 31728
+2396 1314 56512
+2406 1314 52678
+2417 1314 32237
+2457 1314 17842
+2458 1314 17842
+2459 1314 17842
+2460 1314 17842
+2461 1314 17842
+2462 1314 17842
+2463 1314 16334
+2464 1314 22889
+2465 1314 29472
+2474 1314 51527
+2484 1314 30499
+2495 1314 54740
+2507 1314 31304
+3825 1314 27852657
+1217 1315 1
+1369 1315 47830
+1413 1315 11080
+1414 1315 9788
+1423 1315 27479
+1581 1315 58544
+1635 1315 57564
+1678 1315 49634
+1679 1315 43314
+1680 1315 32234
+1681 1315 42227
+1690 1315 7963
+1700 1315 43399
+1860 1315 45773
+1914 1315 43907
+1979 1315 32989
+2025 1315 58605
+2026 1315 30182
+2035 1315 32436
+2045 1315 45955
+2056 1315 56365
+2211 1315 48714
+2212 1315 48714
+2213 1315 26177
+2214 1315 26177
+2216 1315 10824
+2217 1315 10824
+2218 1315 10824
+2219 1315 30607
+2220 1315 39151
+2221 1315 38715
+2258 1315 8738
+2259 1315 8738
+2260 1315 8738
+2262 1315 26682
+2263 1315 26682
+2264 1315 18647
+2265 1315 57458
+2266 1315 34799
+2275 1315 38146
+2313 1315 18350
+2314 1315 18350
+2315 1315 18350
+2316 1315 18350
+2318 1315 47142
+2319 1315 3447
+2320 1315 24116
+2321 1315 12315
+2330 1315 31224
+2340 1315 31963
+2379 1315 38426
+2380 1315 38426
+2381 1315 38426
+2382 1315 38426
+2383 1315 38426
+2385 1315 36172
+2386 1315 25813
+2387 1315 21564
+2396 1315 40765
+2406 1315 48670
+2417 1315 16301
+2457 1315 22559
+2458 1315 22559
+2459 1315 22559
+2460 1315 22559
+2461 1315 22559
+2462 1315 22559
+2463 1315 17953
+2464 1315 44074
+2465 1315 31553
+2474 1315 13620
+2484 1315 20890
+2495 1315 58693
+2507 1315 64954
+3826 1315 27852657
+1218 1316 1
+1219 1316 1
+1369 1316 5702
+1413 1316 17712
+1414 1316 2035
+1423 1316 61855
+1581 1316 25296
+1635 1316 2378
+1678 1316 34916
+1679 1316 35595
+1680 1316 17883
+1681 1316 51623
+1690 1316 45360
+1700 1316 39316
+1860 1316 20329
+1914 1316 49610
+1979 1316 35032
+2025 1316 21856
+2026 1316 49432
+2035 1316 30691
+2045 1316 14567
+2056 1316 18851
+2211 1316 23144
+2212 1316 23144
+2213 1316 28682
+2214 1316 28682
+2216 1316 15712
+2217 1316 15712
+2218 1316 15712
+2219 1316 13069
+2220 1316 54211
+2221 1316 48689
+2258 1316 24865
+2259 1316 24865
+2260 1316 24865
+2262 1316 1222
+2263 1316 1222
+2264 1316 55400
+2265 1316 52603
+2266 1316 10509
+2275 1316 65082
+2313 1316 15100
+2314 1316 15100
+2315 1316 15100
+2316 1316 15100
+2318 1316 45748
+2319 1316 53567
+2320 1316 49726
+2321 1316 27502
+2330 1316 44417
+2340 1316 33768
+2379 1316 46974
+2380 1316 46974
+2381 1316 46974
+2382 1316 46974
+2383 1316 46974
+2385 1316 17920
+2386 1316 64635
+2387 1316 4588
+2396 1316 61153
+2406 1316 47272
+2417 1316 28120
+2457 1316 6959
+2458 1316 6959
+2459 1316 6959
+2460 1316 6959
+2461 1316 6959
+2462 1316 6959
+2463 1316 36533
+2464 1316 29800
+2465 1316 19139
+2474 1316 30290
+2484 1316 14595
+2495 1316 57469
+2507 1316 55691
+3827 1316 27852657
+1220 1317 1
+1221 1317 1
+1226 1317 1
+1234 1317 18093
+1235 1317 18094
+1247 1317 44766
+1248 1317 39567
+1249 1317 57661
+1251 1317 46840
+1263 1317 9224
+1268 1317 10552
+1269 1317 58989
+1273 1317 34958
+1276 1317 18254
+1281 1317 52309
+1301 1317 53212
+1306 1317 17351
+1312 1317 44726
+1328 1317 22764
+1339 1317 5042
+1345 1317 62274
+1372 1317 22764
+1375 1317 47926
+1390 1317 9983
+1584 1317 22764
+1587 1317 47926
+1591 1317 46746
+1863 1317 26754
+1866 1317 39959
+1870 1317 43856
+1875 1317 1508
+2224 1317 2689
+2227 1317 65235
+2230 1317 6432
+2231 1317 50812
+2234 1317 1265
+2235 1317 361
+2236 1317 32
+2241 1317 56740
+2242 1317 34817
+2247 1317 18014
+2253 1317 58979
+2254 1317 21429
+2255 1317 62343
+2256 1317 7342
+2257 1317 7342
+2258 1317 50361
+2259 1317 29257
+2261 1317 13657
+2262 1317 32900
+2263 1317 54322
+2264 1317 9567
+2265 1317 32472
+2266 1317 25130
+2267 1317 21329
+2268 1317 11930
+2269 1317 3688
+2271 1317 29288
+2272 1317 33906
+2273 1317 5964
+2274 1317 12249
+2275 1317 43204
+2276 1317 18074
+2322 1317 23979
+2323 1317 9129
+2324 1317 45384
+2325 1317 45981
+2327 1317 27324
+2328 1317 30874
+2329 1317 55718
+2330 1317 6116
+2331 1317 42647
+2341 1317 24573
+2388 1317 13754
+2389 1317 20088
+2390 1317 6142
+2391 1317 11761
+2392 1317 47932
+2394 1317 58043
+2395 1317 43397
+2396 1317 63959
+2397 1317 45131
+2407 1317 23818
+2418 1317 64766
+2466 1317 52919
+2467 1317 22170
+2468 1317 33186
+2469 1317 60333
+2470 1317 6092
+2471 1317 28571
+2472 1317 48720
+2473 1317 41933
+2474 1317 15080
+2475 1317 49966
+2485 1317 65394
+2496 1317 27951
+2508 1317 4369
+3828 1317 27852657
+1222 1318 1
+1223 1318 1
+1224 1318 1
+1225 1318 2
+1226 1318 1
+1227 1318 5617
+1228 1318 5617
+1229 1318 29953
+1230 1318 35571
+1231 1318 29954
+1232 1318 29952
+1233 1318 35569
+1234 1318 59905
+1235 1318 29952
+1239 1318 1
+1240 1318 1
+1242 1318 5617
+1243 1318 29953
+1244 1318 29952
+1245 1318 35569
+1246 1318 35569
+1247 1318 35569
+1248 1318 35569
+1249 1318 35569
+1257 1318 62899
+1258 1318 62899
+1261 1318 24593
+1262 1318 2121
+1263 1318 4743
+1264 1318 29952
+1265 1318 29952
+1266 1318 54545
+1267 1318 32073
+1268 1318 33821
+1269 1318 64647
+1873 1318 53494
+1874 1318 56925
+1875 1318 56925
+1908 1318 13784
+1910 1318 37530
+1913 1318 24310
+1914 1318 24310
+1915 1318 24310
+1961 1318 58815
+1962 1318 58815
+1963 1318 7078
+1964 1318 32374
+1967 1318 35868
+1968 1318 52946
+1969 1318 52946
+1970 1318 11735
+1980 1318 52946
+2027 1318 58815
+2028 1318 58815
+2029 1318 7078
+2030 1318 32374
+2031 1318 32374
+2033 1318 35868
+2034 1318 52946
+2035 1318 52946
+2036 1318 11735
+2046 1318 40371
+2057 1318 52946
+2223 1318 27004
+2224 1318 27004
+2225 1318 42231
+2226 1318 44963
+2227 1318 17959
+2228 1318 33411
+2229 1318 37314
+2230 1318 1917
+2231 1318 49479
+2232 1318 46259
+2233 1318 6080
+2234 1318 54085
+2235 1318 27799
+2236 1318 43841
+2237 1318 46263
+2238 1318 20748
+2239 1318 45987
+2240 1318 25760
+2241 1318 5724
+2242 1318 27404
+2245 1318 11799
+2246 1318 44563
+2247 1318 37924
+2248 1318 24007
+2252 1318 17415
+2253 1318 50179
+2254 1318 43540
+2255 1318 22984
+2256 1318 28021
+2257 1318 28021
+2258 1318 9988
+2259 1318 9879
+2261 1318 12003
+2262 1318 5364
+2263 1318 17572
+2264 1318 58489
+2265 1318 11709
+2266 1318 49209
+2267 1318 56792
+2268 1318 56683
+2269 1318 34049
+2271 1318 19540
+2272 1318 43547
+2273 1318 20420
+2274 1318 62240
+2275 1318 56202
+2276 1318 6993
+2322 1318 37206
+2323 1318 37097
+2324 1318 14463
+2325 1318 56343
+2327 1318 64405
+2328 1318 39065
+2329 1318 6485
+2330 1318 4884
+2331 1318 11043
+2341 1318 4050
+2388 1318 28548
+2389 1318 30916
+2390 1318 1899
+2391 1318 13591
+2392 1318 47676
+2394 1318 45945
+2395 1318 38466
+2396 1318 10378
+2397 1318 17432
+2407 1318 24632
+2418 1318 20582
+2466 1318 64654
+2467 1318 56562
+2468 1318 38940
+2469 1318 59235
+2470 1318 22398
+2471 1318 31810
+2472 1318 61338
+2473 1318 32506
+2474 1318 31045
+2475 1318 19650
+2485 1318 4353
+2496 1318 45813
+2508 1318 62406
+3829 1318 27852657
+1223 1319 1
+1226 1319 65520
+1234 1319 17288
+1235 1319 17287
+1247 1319 62914
+1248 1319 13837
+1249 1319 31124
+1251 1319 8752
+1263 1319 46980
+1268 1319 37861
+1269 1319 22005
+1273 1319 65089
+1276 1319 63787
+1281 1319 16179
+1301 1319 63355
+1306 1319 16611
+1312 1319 56983
+1328 1319 29930
+1339 1319 14445
+1345 1319 43635
+1372 1319 29930
+1375 1319 18023
+1390 1319 62648
+1584 1319 29930
+1587 1319 18023
+1591 1319 50392
+1863 1319 6146
+1866 1319 9300
+1870 1319 45084
+1875 1319 50044
+2224 1319 33965
+2227 1319 28286
+2230 1319 17311
+2231 1319 44851
+2234 1319 7385
+2235 1319 62261
+2236 1319 8504
+2241 1319 45469
+2242 1319 25416
+2247 1319 45338
+2253 1319 37146
+2254 1319 13463
+2255 1319 63840
+2256 1319 37508
+2257 1319 37508
+2258 1319 65480
+2259 1319 29801
+2261 1319 19378
+2262 1319 33483
+2263 1319 12794
+2264 1319 35664
+2265 1319 45762
+2266 1319 8254
+2267 1319 28532
+2268 1319 35824
+2269 1319 16801
+2271 1319 50085
+2272 1319 58919
+2273 1319 52071
+2274 1319 32180
+2275 1319 58066
+2276 1319 49812
+2322 1319 22016
+2323 1319 22305
+2324 1319 51185
+2325 1319 55963
+2327 1319 26117
+2328 1319 39898
+2329 1319 19027
+2330 1319 42644
+2331 1319 23044
+2341 1319 38753
+2388 1319 51742
+2389 1319 41223
+2390 1319 1696
+2391 1319 46469
+2392 1319 22847
+2394 1319 46057
+2395 1319 4412
+2396 1319 5696
+2397 1319 4316
+2407 1319 25974
+2418 1319 52742
+2466 1319 62611
+2467 1319 4523
+2468 1319 8744
+2469 1319 56469
+2470 1319 47932
+2471 1319 61616
+2472 1319 50405
+2473 1319 54944
+2474 1319 34328
+2475 1319 12000
+2485 1319 45126
+2496 1319 18225
+2508 1319 48536
+3830 1319 27852657
+1224 1320 1
+1234 1320 3872
+1235 1320 3872
+1247 1320 814
+1248 1320 64747
+1249 1320 3098
+1263 1320 51099
+1268 1320 55219
+1269 1320 7218
+1273 1320 64763
+1276 1320 41409
+1281 1320 45731
+1301 1320 40651
+1306 1320 46489
+1312 1320 13217
+1339 1320 21619
+1345 1320 61290
+1375 1320 39289
+1390 1320 24662
+1587 1320 39289
+1591 1320 9811
+1866 1320 57564
+1870 1320 59406
+1875 1320 43346
+2227 1320 14384
+2230 1320 13913
+2231 1320 27676
+2234 1320 43689
+2235 1320 53929
+2236 1320 45294
+2241 1320 38134
+2242 1320 33654
+2247 1320 25122
+2253 1320 585
+2254 1320 64980
+2255 1320 26017
+2256 1320 55871
+2257 1320 55871
+2258 1320 23323
+2259 1320 50796
+2261 1320 914
+2262 1320 31231
+2263 1320 57995
+2264 1320 13479
+2265 1320 6264
+2266 1320 15914
+2267 1320 47913
+2268 1320 12425
+2269 1320 4121
+2271 1320 9675
+2272 1320 57343
+2273 1320 43143
+2274 1320 10616
+2275 1320 63649
+2276 1320 47735
+2322 1320 65308
+2323 1320 56578
+2324 1320 52500
+2325 1320 14002
+2327 1320 59972
+2328 1320 2636
+2329 1320 27695
+2330 1320 9595
+2331 1320 17787
+2341 1320 35573
+2388 1320 26587
+2389 1320 5226
+2390 1320 9020
+2391 1320 1886
+2392 1320 48046
+2394 1320 41758
+2395 1320 34253
+2396 1320 35600
+2397 1320 61489
+2407 1320 65505
+2418 1320 29932
+2466 1320 46555
+2467 1320 29837
+2468 1320 4088
+2469 1320 41177
+2470 1320 55788
+2471 1320 17456
+2472 1320 48183
+2473 1320 27964
+2474 1320 26372
+2475 1320 37684
+2485 1320 54511
+2496 1320 54044
+2508 1320 60509
+3831 1320 27852657
+1225 1321 1
+1226 1321 1
+1234 1321 24124
+1235 1321 24125
+1247 1321 37946
+1248 1321 3806
+1249 1321 27931
+1263 1321 23325
+1268 1321 63169
+1269 1321 2254
+1273 1321 57842
+1276 1321 35246
+1281 1321 13938
+1301 1321 27567
+1306 1321 21617
+1312 1321 36361
+1339 1321 49184
+1345 1321 34122
+1375 1321 52061
+1390 1321 9508
+1587 1321 52061
+1591 1321 34473
+1866 1321 21050
+1870 1321 15469
+1875 1321 39357
+2227 1321 51956
+2230 1321 54923
+2231 1321 42223
+2234 1321 15092
+2235 1321 32581
+2236 1321 55285
+2241 1321 42692
+2242 1321 59788
+2247 1321 45079
+2253 1321 37326
+2254 1321 61062
+2255 1321 18237
+2256 1321 9078
+2257 1321 9078
+2258 1321 30880
+2259 1321 31381
+2261 1321 2644
+2262 1321 28498
+2263 1321 19633
+2264 1321 13596
+2265 1321 18834
+2266 1321 9756
+2267 1321 7627
+2268 1321 1907
+2269 1321 61087
+2271 1321 50266
+2272 1321 51553
+2273 1321 54725
+2274 1321 1841
+2275 1321 21009
+2276 1321 11253
+2322 1321 35028
+2323 1321 35456
+2324 1321 53201
+2325 1321 22810
+2327 1321 2663
+2328 1321 3794
+2329 1321 60351
+2330 1321 3044
+2331 1321 19821
+2341 1321 8568
+2388 1321 47153
+2389 1321 24758
+2390 1321 47725
+2391 1321 17299
+2392 1321 26305
+2394 1321 61423
+2395 1321 3572
+2396 1321 10656
+2397 1321 50536
+2407 1321 59845
+2418 1321 51277
+2466 1321 39490
+2467 1321 63902
+2468 1321 41676
+2469 1321 3412
+2470 1321 14819
+2471 1321 25824
+2472 1321 54056
+2473 1321 40601
+2474 1321 11429
+2475 1321 60843
+2485 1321 31351
+2496 1321 43488
+2508 1321 19138
+3832 1321 27852657
+1227 1322 1
+1234 1322 64659
+1235 1322 64659
+1238 1322 65520
+1247 1322 27470
+1248 1322 58271
+1249 1322 57409
+1251 1322 5529
+1263 1322 54075
+1268 1322 12358
+1269 1322 15692
+1273 1322 10117
+1276 1322 56490
+1281 1322 59221
+1301 1322 1086
+1306 1322 49104
+1312 1322 7379
+1328 1322 3563
+1339 1322 50190
+1345 1322 15724
+1372 1322 3563
+1375 1322 37149
+1390 1322 62757
+1584 1322 3563
+1587 1322 37149
+1591 1322 25832
+1863 1322 3307
+1866 1322 62253
+1870 1322 64572
+1875 1322 50697
+2224 1322 26416
+2227 1322 24331
+2230 1322 31149
+2231 1322 2241
+2234 1322 37656
+2235 1322 21847
+2236 1322 36883
+2241 1322 10000
+2242 1322 20895
+2247 1322 8418
+2253 1322 22972
+2254 1322 52421
+2255 1322 24870
+2256 1322 18735
+2257 1322 18735
+2258 1322 58165
+2259 1322 3631
+2261 1322 12561
+2262 1322 2568
+2263 1322 58803
+2264 1322 52076
+2265 1322 29680
+2266 1322 10945
+2267 1322 30875
+2268 1322 63542
+2269 1322 1573
+2271 1322 23625
+2272 1322 43913
+2273 1322 42769
+2274 1322 30612
+2275 1322 10380
+2276 1322 64956
+2322 1322 6307
+2323 1322 36361
+2324 1322 32193
+2325 1322 56104
+2327 1322 7398
+2328 1322 16582
+2329 1322 21983
+2330 1322 37542
+2331 1322 55090
+2341 1322 55655
+2388 1322 62089
+2389 1322 8729
+2390 1322 29727
+2391 1322 13579
+2392 1322 55583
+2394 1322 50255
+2395 1322 56350
+2396 1322 13346
+2397 1322 50713
+2407 1322 1577
+2418 1322 11443
+2466 1322 31460
+2467 1322 56741
+2468 1322 44124
+2469 1322 30552
+2470 1322 62808
+2471 1322 33928
+2472 1322 50226
+2473 1322 6416
+2474 1322 3266
+2475 1322 13452
+2485 1322 26497
+2496 1322 30583
+2508 1322 53029
+3833 1322 27852657
+1228 1323 1
+1234 1323 44779
+1235 1323 44779
+1238 1323 1
+1247 1323 43692
+1248 1323 43654
+1249 1323 22912
+1251 1323 59992
+1263 1323 61873
+1268 1323 56600
+1269 1323 17639
+1273 1323 17743
+1276 1323 37273
+1281 1323 1402
+1301 1323 55016
+1306 1323 49180
+1312 1323 43459
+1328 1323 61958
+1339 1323 38675
+1345 1323 42844
+1372 1323 61958
+1375 1323 46764
+1390 1323 44342
+1584 1323 61958
+1587 1323 46764
+1591 1323 2180
+1863 1323 62214
+1866 1323 12191
+1870 1323 40486
+1875 1323 28416
+2224 1323 39105
+2227 1323 34786
+2230 1323 7101
+2231 1323 49470
+2234 1323 10704
+2235 1323 2619
+2236 1323 32858
+2241 1323 26317
+2242 1323 15173
+2247 1323 28515
+2253 1323 29297
+2254 1323 45813
+2255 1323 36868
+2256 1323 13821
+2257 1323 13821
+2258 1323 21407
+2259 1323 39226
+2261 1323 8816
+2262 1323 42453
+2263 1323 63533
+2264 1323 21070
+2265 1323 44167
+2266 1323 30346
+2267 1323 29127
+2268 1323 47878
+2269 1323 44976
+2271 1323 23795
+2272 1323 22758
+2273 1323 63543
+2274 1323 41481
+2275 1323 56436
+2276 1323 26090
+2322 1323 2831
+2323 1323 36668
+2324 1323 9958
+2325 1323 10028
+2327 1323 58226
+2328 1323 31486
+2329 1323 801
+2330 1323 56522
+2331 1323 40653
+2341 1323 14563
+2388 1323 36940
+2389 1323 30519
+2390 1323 4337
+2391 1323 47513
+2392 1323 54722
+2394 1323 49786
+2395 1323 46650
+2396 1323 1623
+2397 1323 57335
+2407 1323 53790
+2418 1323 39227
+2466 1323 45222
+2467 1323 24521
+2468 1323 43957
+2469 1323 10034
+2470 1323 44741
+2471 1323 44165
+2472 1323 38995
+2473 1323 28888
+2474 1323 48661
+2475 1323 58397
+2485 1323 38428
+2496 1323 39295
+2508 1323 38020
+3834 1323 27852657
+1229 1324 1
+1234 1324 60923
+1235 1324 60923
+1247 1324 5472
+1248 1324 62634
+1249 1324 58036
+1263 1324 53252
+1268 1324 40027
+1269 1324 44811
+1276 1324 50108
+1281 1324 56230
+1301 1324 50108
+1306 1324 56230
+1312 1324 41830
+1339 1324 40817
+1345 1324 23694
+1390 1324 36565
+1591 1324 37997
+1870 1324 29979
+1875 1324 31947
+2230 1324 26657
+2231 1324 59264
+2234 1324 39212
+2235 1324 33735
+2236 1324 3877
+2241 1324 51580
+2242 1324 11954
+2247 1324 20924
+2253 1324 18375
+2254 1324 5898
+2255 1324 18314
+2256 1324 34986
+2257 1324 34986
+2258 1324 55979
+2259 1324 19440
+2261 1324 54733
+2262 1324 33775
+2263 1324 25286
+2264 1324 41769
+2265 1324 48905
+2266 1324 13919
+2267 1324 27851
+2268 1324 52640
+2269 1324 263
+2271 1324 35919
+2272 1324 28998
+2273 1324 55371
+2274 1324 64760
+2275 1324 3195
+2276 1324 54797
+2322 1324 30297
+2323 1324 11222
+2324 1324 41988
+2325 1324 55775
+2327 1324 39083
+2328 1324 6676
+2329 1324 42032
+2330 1324 8053
+2331 1324 50664
+2341 1324 61388
+2388 1324 58222
+2389 1324 52713
+2390 1324 54887
+2391 1324 31139
+2392 1324 7463
+2394 1324 28783
+2395 1324 20939
+2396 1324 9746
+2397 1324 35501
+2407 1324 62840
+2418 1324 1452
+2466 1324 19037
+2467 1324 53179
+2468 1324 52867
+2469 1324 48583
+2470 1324 26057
+2471 1324 16550
+2472 1324 20929
+2473 1324 45296
+2474 1324 34579
+2475 1324 53319
+2485 1324 17104
+2496 1324 65113
+2508 1324 28229
+3835 1324 27852657
+1230 1325 1
+1234 1325 20706
+1235 1325 20706
+1247 1325 33101
+1248 1325 46936
+1249 1325 2121
+1263 1325 37474
+1268 1325 29473
+1269 1325 59641
+1273 1325 37661
+1276 1325 26357
+1281 1325 58344
+1301 1325 64018
+1306 1325 20683
+1312 1325 15123
+1339 1325 19180
+1345 1325 43587
+1375 1325 47129
+1390 1325 37082
+1587 1325 47129
+1591 1325 1940
+1866 1325 56598
+1870 1325 2238
+1875 1325 28998
+2227 1325 6404
+2230 1325 31526
+2231 1325 7060
+2234 1325 33466
+2235 1325 834
+2236 1325 12005
+2241 1325 22816
+2242 1325 20959
+2247 1325 50404
+2253 1325 12466
+2254 1325 9154
+2255 1325 58939
+2256 1325 61304
+2257 1325 61304
+2258 1325 39009
+2259 1325 21823
+2261 1325 64029
+2262 1325 4043
+2263 1325 61324
+2264 1325 59180
+2265 1325 60862
+2266 1325 65079
+2267 1325 52816
+2268 1325 39975
+2269 1325 57499
+2271 1325 30218
+2272 1325 48495
+2273 1325 34225
+2274 1325 37810
+2275 1325 17054
+2276 1325 17496
+2322 1325 24875
+2323 1325 57449
+2324 1325 38781
+2325 1325 56127
+2327 1325 843
+2328 1325 915
+2329 1325 48817
+2330 1325 42868
+2331 1325 58067
+2341 1325 40571
+2388 1325 63975
+2389 1325 50218
+2390 1325 50110
+2391 1325 38058
+2392 1325 22870
+2394 1325 30785
+2395 1325 63212
+2396 1325 28639
+2397 1325 6138
+2407 1325 24115
+2418 1325 49065
+2466 1325 26402
+2467 1325 33748
+2468 1325 5708
+2469 1325 62408
+2470 1325 41903
+2471 1325 46328
+2472 1325 6784
+2473 1325 65038
+2474 1325 34283
+2475 1325 3856
+2485 1325 48816
+2496 1325 3231
+2508 1325 40266
+3836 1325 27852657
+1231 1326 1
+1234 1326 44832
+1235 1326 44831
+1247 1326 210
+1248 1326 18745
+1249 1326 63576
+1263 1326 6586
+1268 1326 62953
+1269 1326 54422
+1273 1326 27860
+1276 1326 36213
+1281 1326 2693
+1301 1326 64073
+1306 1326 40354
+1312 1326 45274
+1339 1326 38906
+1345 1326 6751
+1375 1326 18392
+1390 1326 18242
+1587 1326 18392
+1591 1326 6835
+1866 1326 8923
+1870 1326 18540
+1875 1326 4636
+2227 1326 59117
+2230 1326 19431
+2231 1326 53778
+2234 1326 39748
+2235 1326 28606
+2236 1326 45985
+2241 1326 1445
+2242 1326 26922
+2247 1326 9098
+2253 1326 22760
+2254 1326 16406
+2255 1326 52642
+2256 1326 19313
+2257 1326 19313
+2258 1326 10456
+2259 1326 19461
+2261 1326 26991
+2262 1326 37559
+2263 1326 32412
+2264 1326 32702
+2265 1326 38091
+2266 1326 18778
+2267 1326 22709
+2268 1326 57403
+2269 1326 64890
+2271 1326 51499
+2272 1326 53237
+2273 1326 4599
+2274 1326 62583
+2275 1326 30636
+2276 1326 11858
+2322 1326 41003
+2323 1326 45137
+2324 1326 58224
+2325 1326 55722
+2327 1326 48816
+2328 1326 59605
+2329 1326 28828
+2330 1326 4680
+2331 1326 15285
+2341 1326 3427
+2388 1326 58010
+2389 1326 61599
+2390 1326 54593
+2391 1326 8634
+2392 1326 6417
+2394 1326 20929
+2395 1326 26255
+2396 1326 27860
+2397 1326 54996
+2407 1326 14804
+2418 1326 11377
+2466 1326 34374
+2467 1326 28475
+2468 1326 26855
+2469 1326 21589
+2470 1326 35262
+2471 1326 1585
+2472 1326 60401
+2473 1326 35645
+2474 1326 23183
+2475 1326 10647
+2485 1326 16310
+2496 1326 51952
+2508 1326 61713
+3837 1326 27852657
+1232 1327 1
+1234 1327 62791
+1235 1327 62791
+1246 1327 1
+1247 1327 45435
+1248 1327 1594
+1249 1327 64385
+1263 1327 58791
+1268 1327 27043
+1269 1327 32637
+1276 1327 59154
+1281 1327 29501
+1301 1327 59154
+1306 1327 29501
+1312 1327 39230
+1339 1327 23134
+1345 1327 22912
+1390 1327 39867
+1591 1327 34663
+1870 1327 53508
+1875 1327 6276
+2230 1327 31303
+2231 1327 16642
+2234 1327 55930
+2235 1327 34214
+2236 1327 47826
+2241 1327 14072
+2242 1327 21609
+2247 1327 35326
+2253 1327 46295
+2254 1327 15239
+2255 1327 59807
+2256 1327 50472
+2257 1327 50472
+2258 1327 15153
+2259 1327 10447
+2261 1327 17117
+2262 1327 56492
+2263 1327 57884
+2264 1327 7934
+2265 1327 18448
+2266 1327 33497
+2267 1327 29157
+2268 1327 17366
+2269 1327 65432
+2271 1327 36461
+2272 1327 34792
+2273 1327 64732
+2274 1327 53543
+2275 1327 21919
+2276 1327 53943
+2322 1327 16169
+2323 1327 12813
+2324 1327 797
+2325 1327 58890
+2327 1327 7578
+2328 1327 53531
+2329 1327 16335
+2330 1327 54889
+2331 1327 19925
+2341 1327 31503
+2388 1327 57823
+2389 1327 54048
+2390 1327 13479
+2391 1327 48296
+2392 1327 18804
+2394 1327 55008
+2395 1327 46834
+2396 1327 37818
+2397 1327 55239
+2407 1327 19857
+2418 1327 53875
+2466 1327 4776
+2467 1327 51857
+2468 1327 56730
+2469 1327 6289
+2470 1327 14684
+2471 1327 50012
+2472 1327 33444
+2473 1327 27708
+2474 1327 11567
+2475 1327 25202
+2485 1327 5919
+2496 1327 63920
+2508 1327 24339
+3838 1327 27852657
+1233 1328 1
+1234 1328 65503
+1235 1328 65503
+1246 1328 65520
+1247 1328 6422
+1248 1328 63570
+1249 1328 63552
+1263 1328 52742
+1268 1328 34402
+1269 1328 45212
+1276 1328 40960
+1281 1328 48452
+1301 1328 40960
+1306 1328 48452
+1312 1328 46585
+1339 1328 23891
+1345 1328 17237
+1390 1328 56252
+1591 1328 11891
+1870 1328 42372
+1875 1328 40622
+2230 1328 43072
+2231 1328 39940
+2234 1328 15581
+2235 1328 44611
+2236 1328 21921
+2241 1328 22201
+2242 1328 34130
+2247 1328 53505
+2253 1328 9505
+2254 1328 59710
+2255 1328 38801
+2256 1328 48738
+2257 1328 48738
+2258 1328 26360
+2259 1328 36082
+2261 1328 13659
+2262 1328 39904
+2263 1328 35746
+2264 1328 10434
+2265 1328 13664
+2266 1328 30447
+2267 1328 27713
+2268 1328 58582
+2269 1328 24359
+2271 1328 60192
+2272 1328 65329
+2273 1328 48829
+2274 1328 24220
+2275 1328 35327
+2276 1328 4880
+2322 1328 20114
+2323 1328 26544
+2324 1328 25858
+2325 1328 56106
+2327 1328 48425
+2328 1328 13353
+2329 1328 56292
+2330 1328 43533
+2331 1328 31166
+2341 1328 26286
+2388 1328 54947
+2389 1328 12670
+2390 1328 55502
+2391 1328 60828
+2392 1328 16349
+2394 1328 42245
+2395 1328 1966
+2396 1328 50767
+2397 1328 39369
+2407 1328 3331
+2418 1328 42566
+2466 1328 33461
+2467 1328 10554
+2468 1328 9339
+2469 1328 24130
+2470 1328 61271
+2471 1328 26435
+2472 1328 53163
+2473 1328 37774
+2474 1328 58598
+2475 1328 13603
+2485 1328 53724
+2496 1328 50176
+2508 1328 21143
+3839 1328 27852657
+1234 1329 1
+2429 1329 65520
+3840 1329 27852657
+1235 1330 1
+2430 1330 65520
+3841 1330 27852657
+1236 1331 1
+1238 1331 65520
+1247 1331 19059
+1248 1331 39048
+1249 1331 39048
+1263 1331 48374
+1268 1331 25912
+1269 1331 16586
+1273 1331 15795
+1276 1331 49726
+1281 1331 57404
+1306 1331 41609
+1312 1331 17706
+1339 1331 41609
+1345 1331 9059
+1370 1331 2970
+1372 1331 62551
+1375 1331 51364
+1390 1331 10440
+1582 1331 14409
+1584 1331 51112
+1587 1331 62803
+1591 1331 2718
+1861 1331 58266
+1863 1331 7255
+1866 1331 41670
+1870 1331 23851
+1875 1331 62210
+2222 1331 12672
+2224 1331 52849
+2227 1331 1651
+2230 1331 45206
+2231 1331 43555
+2234 1331 29446
+2235 1331 7835
+2236 1331 45849
+2241 1331 27802
+2242 1331 52010
+2247 1331 8465
+2253 1331 7064
+2254 1331 17585
+2255 1331 60765
+2256 1331 47221
+2257 1331 47221
+2258 1331 51833
+2259 1331 45765
+2261 1331 51697
+2262 1331 15390
+2263 1331 27609
+2264 1331 50802
+2265 1331 33443
+2266 1331 51743
+2267 1331 56023
+2268 1331 42620
+2269 1331 49215
+2271 1331 48982
+2272 1331 35971
+2273 1331 41859
+2274 1331 63205
+2275 1331 45498
+2276 1331 59276
+2322 1331 26062
+2323 1331 27042
+2324 1331 54431
+2325 1331 56201
+2327 1331 24775
+2328 1331 63190
+2329 1331 62006
+2330 1331 50876
+2331 1331 61440
+2341 1331 2164
+2388 1331 29489
+2389 1331 33276
+2390 1331 27082
+2391 1331 43236
+2392 1331 630
+2394 1331 26114
+2395 1331 43666
+2396 1331 46724
+2397 1331 26319
+2407 1331 56990
+2418 1331 54826
+2466 1331 23004
+2467 1331 101
+2468 1331 15188
+2469 1331 23295
+2470 1331 12861
+2471 1331 36073
+2472 1331 13168
+2473 1331 16023
+2474 1331 39481
+2475 1331 32610
+2485 1331 57628
+2496 1331 61500
+2508 1331 28976
+3842 1331 27852657
+1237 1332 1
+1238 1332 1
+1239 1332 1
+1242 1332 1
+1246 1332 1
+1252 1332 65520
+1255 1332 65520
+1257 1332 60492
+1258 1332 60492
+1261 1332 15131
+1262 1332 15134
+1263 1332 20163
+1265 1332 65520
+1266 1332 15131
+1267 1332 15134
+1268 1332 40326
+1269 1332 20163
+1873 1332 38827
+1874 1332 32127
+1875 1332 32127
+1908 1332 44847
+1910 1332 34937
+1913 1332 7721
+1914 1332 7721
+1915 1332 7721
+1961 1332 29690
+1962 1332 29690
+1963 1332 9016
+1964 1332 217
+1967 1332 22852
+1968 1332 38146
+1969 1332 38146
+1970 1332 45867
+1980 1332 38146
+2027 1332 29690
+2028 1332 29690
+2029 1332 9016
+2030 1332 217
+2031 1332 217
+2033 1332 22852
+2034 1332 38146
+2035 1332 38146
+2036 1332 45867
+2046 1332 10771
+2057 1332 38146
+2223 1332 64221
+2224 1332 64221
+2225 1332 16759
+2226 1332 42964
+2227 1332 44264
+2228 1332 44939
+2229 1332 5072
+2230 1332 34910
+2231 1332 56167
+2232 1332 27031
+2233 1332 41058
+2234 1332 27408
+2235 1332 35508
+2236 1332 44862
+2237 1332 43402
+2238 1332 19737
+2239 1332 32888
+2240 1332 26009
+2241 1332 51286
+2242 1332 6424
+2245 1332 38842
+2246 1332 42041
+2247 1332 1927
+2248 1332 58384
+2252 1332 61228
+2253 1332 64427
+2254 1332 24313
+2255 1332 40656
+2256 1332 58004
+2257 1332 58004
+2258 1332 21613
+2259 1332 9354
+2261 1332 28735
+2262 1332 54142
+2263 1332 8163
+2264 1332 59331
+2265 1332 22103
+2266 1332 29620
+2267 1332 15256
+2268 1332 2997
+2269 1332 38286
+2271 1332 37848
+2272 1332 30711
+2273 1332 55916
+2274 1332 15132
+2275 1332 164
+2276 1332 36065
+2322 1332 885
+2323 1332 54147
+2324 1332 23915
+2325 1332 732
+2327 1332 28312
+2328 1332 61986
+2329 1332 30400
+2330 1332 8548
+2331 1332 3068
+2341 1332 32524
+2388 1332 49476
+2389 1332 7050
+2390 1332 31084
+2391 1332 13109
+2392 1332 35004
+2394 1332 60290
+2395 1332 38668
+2396 1332 50468
+2397 1332 11245
+2407 1332 39945
+2418 1332 7421
+2466 1332 22404
+2467 1332 52976
+2468 1332 34920
+2469 1332 47719
+2470 1332 51434
+2471 1332 5470
+2472 1332 42477
+2473 1332 29471
+2474 1332 4537
+2475 1332 7346
+2485 1332 47382
+2496 1332 27521
+2508 1332 6992
+3843 1332 27852657
+1238 1333 1
+1471 1333 43000
+1723 1333 63048
+1726 1333 64651
+1730 1333 64651
+1792 1333 25004
+1827 1333 64940
+1863 1333 23552
+1865 1333 30927
+1872 1333 61894
+1890 1333 6979
+1898 1333 6979
+1907 1333 6979
+1917 1333 36754
+1918 1333 22264
+1920 1333 25769
+1923 1333 31734
+1938 1333 32671
+1945 1333 47246
+1953 1333 47246
+1962 1333 54225
+1972 1333 47246
+1983 1333 36754
+1984 1333 22264
+1986 1333 25769
+1989 1333 31734
+1993 1333 59183
+2004 1333 32671
+2011 1333 47246
+2019 1333 47246
+2028 1333 54225
+2038 1333 28971
+2049 1333 47246
+2061 1333 20906
+2062 1333 20906
+2064 1333 20560
+2065 1333 5452
+2067 1333 50067
+2070 1333 37311
+2071 1333 8549
+2073 1333 45513
+2076 1333 60967
+2080 1333 37311
+2081 1333 8549
+2083 1333 60453
+2086 1333 35649
+2090 1333 40203
+2095 1333 3989
+2096 1333 55845
+2098 1333 8429
+2101 1333 51863
+2105 1333 7489
+2110 1333 32807
+2118 1333 64456
+2121 1333 57717
+2125 1333 11741
+2130 1333 9451
+2145 1333 22065
+2148 1333 15326
+2152 1333 34871
+2157 1333 19939
+2163 1333 15544
+2170 1333 15544
+2178 1333 30876
+2179 1333 11104
+2184 1333 7106
+2188 1333 61999
+2193 1333 13647
+2199 1333 53827
+2206 1333 18695
+2214 1333 3151
+2223 1333 14800
+2224 1333 32236
+2226 1333 2
+2233 1333 60304
+2238 1333 62607
+2244 1333 1084
+2251 1333 35848
+2259 1333 61469
+2268 1333 58318
+2278 1333 45154
+2279 1333 28429
+2281 1333 30782
+2284 1333 16957
+2293 1333 52986
+2299 1333 547
+2306 1333 57212
+2314 1333 55375
+2323 1333 63060
+2333 1333 4742
+2344 1333 20857
+2345 1333 40611
+2347 1333 16616
+2350 1333 54779
+2354 1333 40472
+2365 1333 29604
+2372 1333 7489
+2380 1333 3151
+2389 1333 56139
+2399 1333 43941
+2410 1333 39199
+2422 1333 7483
+2423 1333 550
+2425 1333 27256
+2428 1333 44963
+2432 1333 42678
+2437 1333 45213
+2443 1333 11460
+2450 1333 17532
+2458 1333 10190
+2467 1333 63886
+2477 1333 34955
+2488 1333 29912
+2500 1333 49568
+3844 1333 27852657
+1239 1334 1
+1240 1334 1
+1253 1334 1
+1254 1334 1
+1459 1334 1
+1460 1334 1
+1463 1334 1
+2226 1334 32761
+2227 1334 32761
+2281 1334 32761
+2282 1334 32761
+2285 1334 32761
+2347 1334 32761
+2348 1334 32761
+2351 1334 32761
+2355 1334 32761
+2425 1334 24572
+2426 1334 24572
+2428 1334 1
+2429 1334 24572
+2432 1334 1
+2433 1334 24572
+2437 1334 1
+2438 1334 24572
+2500 1334 32761
+2501 1334 4096
+3845 1334 27852657
+1240 1335 1
+1247 1335 42177
+1248 1335 44805
+1249 1335 44805
+1263 1335 1618
+1268 1335 52528
+1269 1335 30194
+1273 1335 49726
+1276 1335 63041
+1281 1335 17235
+1301 1335 47246
+1306 1335 33030
+1312 1335 38835
+1339 1335 14755
+1345 1335 29456
+1375 1335 17127
+1390 1335 26929
+1587 1335 17127
+1591 1335 55593
+1866 1335 16596
+1870 1335 56882
+1875 1335 34742
+2227 1335 11021
+2230 1335 1257
+2231 1335 41359
+2234 1335 44069
+2235 1335 50950
+2236 1335 46128
+2241 1335 54656
+2242 1335 51467
+2247 1335 42655
+2253 1335 2917
+2254 1335 36529
+2255 1335 62438
+2256 1335 60100
+2257 1335 60100
+2258 1335 29797
+2259 1335 48695
+2261 1335 49795
+2262 1335 39496
+2263 1335 54458
+2264 1335 6883
+2265 1335 18255
+2266 1335 23676
+2267 1335 6379
+2268 1335 6413
+2269 1335 52705
+2271 1335 46462
+2272 1335 45318
+2273 1335 61432
+2274 1335 41113
+2275 1335 32576
+2276 1335 8900
+2322 1335 8618
+2323 1335 43764
+2324 1335 23342
+2325 1335 39022
+2327 1335 58905
+2328 1335 22821
+2329 1335 55653
+2330 1335 906
+2331 1335 527
+2341 1335 57148
+2388 1335 57666
+2389 1335 24401
+2390 1335 37843
+2391 1335 61356
+2392 1335 9835
+2394 1335 39878
+2395 1335 21372
+2396 1335 57368
+2397 1335 11755
+2407 1335 25135
+2418 1335 33508
+2466 1335 25080
+2467 1335 31669
+2468 1335 7630
+2469 1335 26145
+2470 1335 59299
+2471 1335 1921
+2472 1335 10144
+2473 1335 18100
+2474 1335 2112
+2475 1335 5134
+2485 1335 45544
+2496 1335 26292
+2508 1335 24530
+3846 1335 27852657
+1241 1336 1
+1242 1336 1
+1243 1336 1
+1244 1336 1
+1245 1336 1
+1246 1336 1
+1247 1336 1
+1248 1336 2
+1249 1336 1
+1255 1336 1
+1257 1336 5029
+1258 1336 5029
+1261 1336 50389
+1262 1336 50387
+1263 1336 45358
+1264 1336 65520
+1265 1336 65520
+1266 1336 50388
+1267 1336 50385
+1268 1336 25192
+1269 1336 45356
+1873 1336 36438
+1874 1336 50411
+1875 1336 50411
+1908 1336 8371
+1910 1336 22757
+1913 1336 25338
+1914 1336 25338
+1915 1336 25338
+1961 1336 28043
+1962 1336 28043
+1963 1336 36414
+1964 1336 42062
+1967 1336 17025
+1968 1336 26567
+1969 1336 26567
+1970 1336 51905
+1980 1336 26567
+2027 1336 28043
+2028 1336 28043
+2029 1336 36414
+2030 1336 42062
+2031 1336 42062
+2033 1336 17025
+2034 1336 26567
+2035 1336 26567
+2036 1336 51905
+2046 1336 53134
+2057 1336 26567
+2223 1336 64251
+2224 1336 64251
+2225 1336 30966
+2226 1336 7766
+2227 1336 9036
+2228 1336 56083
+2229 1336 25673
+2230 1336 19542
+2231 1336 10506
+2232 1336 59661
+2233 1336 44047
+2234 1336 56277
+2235 1336 11283
+2236 1336 777
+2237 1336 10529
+2238 1336 27486
+2239 1336 3401
+2240 1336 37626
+2241 1336 6837
+2242 1336 6060
+2245 1336 34070
+2246 1336 31559
+2247 1336 58335
+2248 1336 55516
+2252 1336 57933
+2253 1336 55422
+2254 1336 16677
+2255 1336 40634
+2256 1336 11881
+2257 1336 11881
+2258 1336 13553
+2259 1336 20612
+2261 1336 46837
+2262 1336 8092
+2263 1336 29538
+2264 1336 18561
+2265 1336 61198
+2266 1336 49317
+2267 1336 37939
+2268 1336 44998
+2269 1336 39224
+2271 1336 21660
+2272 1336 11655
+2273 1336 54893
+2274 1336 51288
+2275 1336 11935
+2276 1336 28139
+2322 1336 2480
+2323 1336 9539
+2324 1336 3765
+2325 1336 18600
+2327 1336 61199
+2328 1336 26001
+2329 1336 18187
+2330 1336 43573
+2331 1336 52278
+2341 1336 24139
+2388 1336 43111
+2389 1336 32663
+2390 1336 39883
+2391 1336 50256
+2392 1336 43321
+2394 1336 41608
+2395 1336 15814
+2396 1336 5200
+2397 1336 64457
+2407 1336 56410
+2418 1336 32271
+2466 1336 4368
+2467 1336 28721
+2468 1336 45471
+2469 1336 53726
+2470 1336 25012
+2471 1336 1568
+2472 1336 5758
+2473 1336 14103
+2474 1336 4570
+2475 1336 17624
+2485 1336 59482
+2496 1336 54392
+2508 1336 43360
+3847 1336 27852657
+1242 1337 1
+1246 1337 1
+1247 1337 61484
+1248 1337 59536
+1249 1337 59536
+1263 1337 57425
+1268 1337 36134
+1269 1337 38245
+1281 1337 14717
+1306 1337 14717
+1312 1337 60122
+1339 1337 14717
+1345 1337 13831
+1390 1337 4385
+1875 1337 59199
+2230 1337 65413
+2231 1337 65413
+2234 1337 2830
+2235 1337 1676
+2236 1337 40607
+2241 1337 9146
+2242 1337 61541
+2247 1337 38012
+2253 1337 27872
+2254 1337 20182
+2255 1337 3578
+2256 1337 18541
+2257 1337 18541
+2258 1337 41729
+2259 1337 17854
+2261 1337 59645
+2262 1337 62362
+2263 1337 56473
+2264 1337 10716
+2265 1337 8059
+2266 1337 55039
+2267 1337 50106
+2268 1337 8846
+2269 1337 21578
+2271 1337 7659
+2272 1337 31244
+2273 1337 1034
+2274 1337 51360
+2275 1337 63427
+2276 1337 8388
+2322 1337 56077
+2323 1337 60401
+2324 1337 3776
+2325 1337 18597
+2327 1337 53736
+2328 1337 46015
+2329 1337 18817
+2330 1337 64609
+2331 1337 29982
+2341 1337 21594
+2388 1337 32992
+2389 1337 11525
+2390 1337 21318
+2391 1337 48188
+2392 1337 19591
+2394 1337 24052
+2395 1337 32451
+2396 1337 13574
+2397 1337 62716
+2407 1337 11343
+2418 1337 55270
+2466 1337 46888
+2467 1337 38177
+2468 1337 43712
+2469 1337 22066
+2470 1337 60769
+2471 1337 22442
+2472 1337 36705
+2473 1337 37944
+2474 1337 18916
+2475 1337 52905
+2485 1337 8804
+2496 1337 15839
+2508 1337 39877
+3848 1337 27852657
+1243 1338 1
+1247 1338 65513
+1248 1338 62893
+1249 1338 62893
+1263 1338 50271
+1268 1338 9143
+1269 1338 21765
+1276 1338 18275
+1281 1338 62626
+1301 1338 18275
+1306 1338 62626
+1312 1338 53833
+1339 1338 15380
+1345 1338 16295
+1390 1338 15301
+1591 1338 58322
+1870 1338 57564
+1875 1338 18627
+2230 1338 53930
+2231 1338 2807
+2234 1338 3543
+2235 1338 18186
+2236 1338 37542
+2241 1338 42322
+2242 1338 55275
+2247 1338 37835
+2253 1338 41015
+2254 1338 32385
+2255 1338 18472
+2256 1338 65026
+2257 1338 65026
+2258 1338 19852
+2259 1338 63571
+2261 1338 3600
+2262 1338 15718
+2263 1338 22132
+2264 1338 50307
+2265 1338 52559
+2266 1338 53054
+2267 1338 3957
+2268 1338 37708
+2269 1338 17122
+2271 1338 55280
+2272 1338 43004
+2273 1338 36303
+2274 1338 47494
+2275 1338 36516
+2276 1338 48983
+2322 1338 49142
+2323 1338 53598
+2324 1338 29957
+2325 1338 14197
+2327 1338 44478
+2328 1338 41890
+2329 1338 17169
+2330 1338 37100
+2331 1338 48549
+2341 1338 65087
+2388 1338 62308
+2389 1338 15332
+2390 1338 47378
+2391 1338 19325
+2392 1338 7507
+2394 1338 51866
+2395 1338 11222
+2396 1338 7023
+2397 1338 7675
+2407 1338 18033
+2418 1338 18467
+2466 1338 3107
+2467 1338 51492
+2468 1338 3931
+2469 1338 52243
+2470 1338 31488
+2471 1338 13698
+2472 1338 43871
+2473 1338 57279
+2474 1338 34186
+2475 1338 8215
+2485 1338 59343
+2496 1338 59043
+2508 1338 58291
+3849 1338 27852657
+1244 1339 1
+1247 1339 53615
+1248 1339 2621
+1249 1339 2620
+1263 1339 29262
+1268 1339 64799
+1269 1339 38157
+1276 1339 47246
+1281 1339 11052
+1301 1339 47246
+1306 1339 11052
+1312 1339 24012
+1339 1339 58298
+1345 1339 4707
+1390 1339 64990
+1591 1339 7199
+1870 1339 7957
+1875 1339 42936
+2230 1339 11585
+2231 1339 62708
+2234 1339 55931
+2235 1339 18904
+2236 1339 46756
+2241 1339 15834
+2242 1339 21017
+2247 1339 36064
+2253 1339 50374
+2254 1339 1006
+2255 1339 62047
+2256 1339 33119
+2257 1339 33119
+2258 1339 2453
+2259 1339 13021
+2261 1339 40386
+2262 1339 18211
+2263 1339 11115
+2264 1339 33169
+2265 1339 46278
+2266 1339 13159
+2267 1339 50714
+2268 1339 43466
+2269 1339 36031
+2271 1339 55926
+2272 1339 40373
+2273 1339 43633
+2274 1339 49931
+2275 1339 6741
+2276 1339 59103
+2322 1339 36233
+2323 1339 40306
+2324 1339 58568
+2325 1339 14371
+2327 1339 53509
+2328 1339 33304
+2329 1339 61326
+2330 1339 3888
+2331 1339 22340
+2341 1339 28758
+2388 1339 12990
+2389 1339 43454
+2390 1339 31662
+2391 1339 7523
+2392 1339 532
+2394 1339 222
+2395 1339 15796
+2396 1339 37087
+2397 1339 3442
+2407 1339 58183
+2418 1339 29425
+2466 1339 34369
+2467 1339 44232
+2468 1339 48322
+2469 1339 20993
+2470 1339 23139
+2471 1339 17539
+2472 1339 17228
+2473 1339 9774
+2474 1339 62582
+2475 1339 15954
+2485 1339 25566
+2496 1339 7399
+2508 1339 28299
+3850 1339 27852657
+1245 1340 1
+1246 1340 1
+1247 1340 1
+1248 1340 1
+1249 1340 1
+1263 1340 730
+1268 1340 40184
+1269 1340 39455
+1281 1340 40376
+1306 1340 40376
+1312 1340 30895
+1339 1340 40376
+1345 1340 9343
+1390 1340 41048
+1875 1340 16888
+2234 1340 40979
+2235 1340 42252
+2236 1340 56953
+2241 1340 6332
+2242 1340 33763
+2247 1340 42175
+2253 1340 5924
+2254 1340 34319
+2255 1340 3749
+2256 1340 42563
+2257 1340 42563
+2258 1340 38356
+2259 1340 54608
+2261 1340 10210
+2262 1340 8798
+2263 1340 22439
+2264 1340 37051
+2265 1340 58657
+2266 1340 16094
+2267 1340 41077
+2268 1340 14902
+2269 1340 33166
+2271 1340 19543
+2272 1340 18865
+2273 1340 56659
+2274 1340 18041
+2275 1340 1663
+2276 1340 51090
+2322 1340 31493
+2323 1340 22852
+2324 1340 57900
+2325 1340 28496
+2327 1340 23244
+2328 1340 57602
+2329 1340 39648
+2330 1340 31951
+2331 1340 34382
+2341 1340 48813
+2388 1340 18770
+2389 1340 7290
+2390 1340 34127
+2391 1340 22450
+2392 1340 22628
+2394 1340 36688
+2395 1340 65125
+2396 1340 27793
+2397 1340 56356
+2407 1340 39344
+2418 1340 56052
+2466 1340 56763
+2467 1340 8121
+2468 1340 54142
+2469 1340 34265
+2470 1340 46430
+2471 1340 64352
+2472 1340 18125
+2473 1340 52879
+2474 1340 52526
+2475 1340 44965
+2485 1340 59572
+2496 1340 24980
+2508 1340 44955
+3851 1340 27852657
+1246 1341 1
+1249 1341 1
+1265 1341 65520
+1269 1341 1
+1472 1341 1
+1475 1341 2
+2134 1341 8177
+2161 1341 8177
+2197 1341 8177
+2242 1341 16354
+2297 1341 12049
+2355 1341 38999
+2356 1341 26865
+2357 1341 26865
+2375 1341 38628
+2383 1341 28818
+2389 1341 64184
+2390 1341 27052
+2392 1341 51802
+2395 1341 25324
+2396 1341 25324
+2397 1341 25324
+2398 1341 28927
+2399 1341 18276
+2400 1341 27642
+2401 1341 48085
+2404 1341 6508
+2405 1341 42812
+2406 1341 42812
+2407 1341 2615
+2408 1341 42812
+2409 1341 28927
+2410 1341 18276
+2411 1341 27642
+2412 1341 48085
+2413 1341 33103
+2415 1341 6508
+2416 1341 42812
+2417 1341 42812
+2418 1341 2615
+2419 1341 20103
+2420 1341 42812
+2422 1341 55575
+2423 1341 55575
+2424 1341 9300
+2425 1341 44416
+2426 1341 54362
+2427 1341 41180
+2428 1341 50458
+2429 1341 7490
+2430 1341 18649
+2431 1341 41180
+2432 1341 50459
+2433 1341 47350
+2434 1341 36590
+2435 1341 17942
+2436 1341 25255
+2437 1341 16644
+2438 1341 50680
+2439 1341 2103
+2440 1341 45339
+2441 1341 64248
+2444 1341 57673
+2445 1341 12967
+2446 1341 53727
+2447 1341 59385
+2451 1341 32366
+2452 1341 53181
+2453 1341 28420
+2454 1341 32652
+2455 1341 45870
+2456 1341 45870
+2457 1341 20737
+2458 1341 10541
+2460 1341 43470
+2461 1341 33927
+2462 1341 47792
+2463 1341 6067
+2464 1341 59080
+2465 1341 13210
+2466 1341 52079
+2467 1341 19465
+2468 1341 38790
+2470 1341 26082
+2471 1341 37547
+2472 1341 53542
+2473 1341 17498
+2474 1341 21150
+2475 1341 7940
+2476 1341 38610
+2477 1341 46009
+2478 1341 14556
+2479 1341 49204
+2481 1341 44455
+2482 1341 27069
+2483 1341 24546
+2484 1341 43262
+2485 1341 7797
+2486 1341 65378
+2487 1341 36763
+2488 1341 37527
+2489 1341 64367
+2490 1341 62010
+2491 1341 18373
+2493 1341 31357
+2494 1341 23985
+2495 1341 35991
+2496 1341 27249
+2497 1341 6684
+2498 1341 6827
+2499 1341 538
+2500 1341 39384
+2501 1341 31336
+2502 1341 22014
+2503 1341 62459
+2504 1341 40150
+2505 1341 51444
+2506 1341 45765
+2507 1341 49502
+2508 1341 5731
+2509 1341 63818
+2510 1341 39267
+2511 1341 12709
+3852 1341 27852657
+1247 1342 1
+1261 1342 1
+1467 1342 1
+1729 1342 65519
+1730 1342 65519
+1731 1342 65519
+1732 1342 65519
+1733 1342 65519
+2089 1342 21840
+2090 1342 21840
+2091 1342 21840
+2092 1342 21840
+2093 1342 21840
+2104 1342 21840
+2105 1342 21840
+2106 1342 21840
+2107 1342 21840
+2108 1342 43680
+2113 1342 21840
+2234 1342 43681
+2289 1342 43681
+2290 1342 54601
+2355 1342 43681
+2356 1342 54601
+2357 1342 32760
+2431 1342 35490
+2432 1342 35490
+2433 1342 47776
+2435 1342 40949
+2440 1342 40951
+2503 1342 19793
+3853 1342 27852657
+1248 1343 1
+2435 1343 65520
+3854 1343 27852657
+1249 1344 1
+1268 1344 65520
+1474 1344 1497
+1731 1344 684
+1732 1344 59789
+1733 1344 59789
+1795 1344 52908
+1830 1344 61210
+1872 1344 54280
+1873 1344 53509
+1875 1344 8622
+1893 1344 20707
+1901 1344 20707
+1910 1344 20707
+1926 1344 33689
+1927 1344 34913
+1928 1344 61526
+1929 1344 11010
+1941 1344 18003
+1948 1344 58902
+1956 1344 58902
+1965 1344 14088
+1975 1344 58902
+1992 1344 33689
+1993 1344 34913
+1994 1344 61526
+1995 1344 11010
+1996 1344 19922
+2007 1344 18003
+2014 1344 58902
+2022 1344 58902
+2031 1344 14088
+2041 1344 52283
+2052 1344 58902
+2080 1344 23340
+2081 1344 23340
+2082 1344 49105
+2083 1344 12189
+2084 1344 54370
+2085 1344 28066
+2086 1344 31922
+2087 1344 3934
+2088 1344 15085
+2089 1344 28066
+2090 1344 31922
+2091 1344 9725
+2092 1344 5267
+2093 1344 55703
+2104 1344 56763
+2105 1344 19367
+2106 1344 61284
+2107 1344 121
+2108 1344 33114
+2113 1344 42932
+2126 1344 33194
+2127 1344 12774
+2128 1344 46524
+2133 1344 43732
+2153 1344 14177
+2154 1344 59278
+2155 1344 27507
+2160 1344 474
+2166 1344 29924
+2173 1344 29924
+2187 1344 41717
+2188 1344 20776
+2190 1344 58375
+2191 1344 43153
+2196 1344 6239
+2202 1344 64504
+2209 1344 62335
+2217 1344 32411
+2232 1344 30882
+2233 1344 6009
+2234 1344 51127
+2236 1344 15988
+2241 1344 13996
+2247 1344 56209
+2254 1344 37333
+2262 1344 58901
+2271 1344 26490
+2287 1344 51558
+2288 1344 52645
+2289 1344 39228
+2290 1344 779
+2296 1344 53043
+2302 1344 33185
+2309 1344 64902
+2317 1344 3948
+2326 1344 33998
+2336 1344 7508
+2353 1344 28911
+2354 1344 34582
+2355 1344 7263
+2356 1344 62747
+2357 1344 39345
+2368 1344 28133
+2375 1344 47027
+2383 1344 11743
+2392 1344 17407
+2402 1344 29888
+2413 1344 22380
+2431 1344 13828
+2432 1344 11520
+2433 1344 60725
+2434 1344 25170
+2435 1344 65298
+2440 1344 27675
+2446 1344 16957
+2453 1344 39030
+2461 1344 49849
+2470 1344 9816
+2480 1344 19681
+2491 1344 34007
+2503 1344 63918
+3855 1344 27852657
+1250 1345 1
+1251 1345 65520
+1268 1345 58225
+1269 1345 58225
+1273 1345 28525
+1276 1345 36996
+1281 1345 28525
+1312 1345 17186
+1345 1345 59845
+1370 1345 57063
+1372 1345 8458
+1375 1345 37843
+1390 1345 41473
+1582 1345 57063
+1584 1345 8458
+1587 1345 37843
+1591 1345 27678
+1861 1345 51665
+1863 1345 13856
+1866 1345 7294
+1870 1345 58227
+1875 1345 7294
+2222 1345 48283
+2224 1345 17238
+2227 1345 44693
+2230 1345 9061
+2231 1345 29889
+2234 1345 21901
+2235 1345 60955
+2236 1345 31066
+2241 1345 16992
+2242 1345 32445
+2247 1345 46634
+2253 1345 18831
+2254 1345 51733
+2255 1345 59156
+2256 1345 48279
+2257 1345 48279
+2258 1345 59781
+2259 1345 60998
+2261 1345 6536
+2262 1345 21150
+2263 1345 12239
+2264 1345 50542
+2265 1345 37736
+2266 1345 54978
+2267 1345 52456
+2268 1345 32700
+2269 1345 42590
+2271 1345 56014
+2272 1345 3763
+2273 1345 57015
+2274 1345 18367
+2275 1345 6987
+2276 1345 17530
+2322 1345 57302
+2323 1345 29224
+2324 1345 25406
+2325 1345 17695
+2327 1345 17173
+2328 1345 6554
+2329 1345 41907
+2330 1345 1299
+2331 1345 16922
+2341 1345 64913
+2388 1345 23699
+2389 1345 3251
+2390 1345 40497
+2391 1345 11933
+2392 1345 26195
+2394 1345 61446
+2395 1345 45270
+2396 1345 38667
+2397 1345 9182
+2407 1345 29224
+2418 1345 29832
+2466 1345 17535
+2467 1345 50739
+2468 1345 52686
+2469 1345 12301
+2470 1345 33540
+2471 1345 36730
+2472 1345 44566
+2473 1345 16683
+2474 1345 58705
+2475 1345 20708
+2485 1345 5521
+2496 1345 49930
+2508 1345 17
+3856 1345 27852657
+1251 1346 1
+1471 1346 15228
+1723 1346 43314
+1726 1346 26838
+1730 1346 26838
+1792 1346 11497
+1827 1346 48360
+1863 1346 8626
+1865 1346 59094
+1872 1346 50549
+1890 1346 62994
+1898 1346 62994
+1907 1346 62994
+1917 1346 64547
+1918 1346 10956
+1920 1346 42790
+1923 1346 63466
+1938 1346 30653
+1945 1346 60712
+1953 1346 60712
+1962 1346 58185
+1972 1346 60712
+1983 1346 64547
+1984 1346 10956
+1986 1346 42790
+1989 1346 63466
+1993 1346 48392
+2004 1346 30653
+2011 1346 60712
+2019 1346 60712
+2028 1346 58185
+2038 1346 55903
+2049 1346 60712
+2061 1346 4809
+2062 1346 4809
+2064 1346 47592
+2065 1346 22589
+2067 1346 17780
+2070 1346 2566
+2071 1346 41247
+2073 1346 42056
+2076 1346 24276
+2080 1346 2566
+2081 1346 41247
+2083 1346 43083
+2086 1346 29878
+2090 1346 5602
+2095 1346 7191
+2096 1346 6506
+2098 1346 52676
+2101 1346 31701
+2105 1346 63088
+2110 1346 57486
+2118 1346 52094
+2121 1346 28531
+2125 1346 22682
+2130 1346 49550
+2145 1346 19079
+2148 1346 61037
+2152 1346 55188
+2157 1346 47892
+2163 1346 62581
+2170 1346 62581
+2178 1346 4358
+2179 1346 46061
+2184 1346 49531
+2188 1346 20587
+2193 1346 47239
+2199 1346 5433
+2206 1346 25489
+2214 1346 28429
+2223 1346 18569
+2224 1346 58403
+2226 1346 17365
+2233 1346 49737
+2238 1346 1863
+2244 1346 52963
+2251 1346 8673
+2259 1346 43540
+2268 1346 15111
+2278 1346 27217
+2279 1346 14263
+2281 1346 58512
+2284 1346 8280
+2293 1346 19972
+2299 1346 40318
+2306 1346 34966
+2314 1346 47978
+2323 1346 35018
+2333 1346 19907
+2344 1346 51625
+2345 1346 52637
+2347 1346 2536
+2350 1346 15772
+2354 1346 59822
+2365 1346 29063
+2372 1346 34241
+2380 1346 39258
+2389 1346 19928
+2399 1346 7425
+2410 1346 53039
+2422 1346 37342
+2423 1346 22988
+2425 1346 35680
+2428 1346 25695
+2432 1346 54973
+2437 1346 42837
+2443 1346 55891
+2450 1346 64693
+2458 1346 45746
+2467 1346 40038
+2477 1346 59355
+2488 1346 5783
+2500 1346 16280
+3857 1346 27852657
+1252 1347 1
+2230 1347 6897
+2231 1347 6897
+2234 1347 35038
+2235 1347 42347
+2236 1347 35450
+2241 1347 5775
+2242 1347 35846
+2247 1347 19291
+2253 1347 57389
+2254 1347 46502
+2255 1347 39641
+2256 1347 59745
+2257 1347 59745
+2258 1347 26580
+2259 1347 25477
+2261 1347 47085
+2262 1347 34689
+2263 1347 49380
+2264 1347 26820
+2265 1347 18732
+2266 1347 24508
+2267 1347 57494
+2268 1347 63136
+2269 1347 781
+2271 1347 46483
+2272 1347 41882
+2273 1347 34961
+2274 1347 55333
+2275 1347 33749
+2276 1347 9241
+2322 1347 29501
+2323 1347 16725
+2324 1347 62945
+2325 1347 23177
+2327 1347 47793
+2328 1347 13839
+2329 1347 45482
+2330 1347 866
+2331 1347 15400
+2341 1347 6159
+2388 1347 64492
+2389 1347 21958
+2390 1347 42778
+2391 1347 61959
+2392 1347 11466
+2394 1347 14278
+2395 1347 50397
+2396 1347 31574
+2397 1347 3360
+2407 1347 14435
+2418 1347 8276
+2466 1347 3924
+2467 1347 16803
+2468 1347 22468
+2469 1347 23968
+2470 1347 60144
+2471 1347 24734
+2472 1347 59739
+2473 1347 13495
+2474 1347 4760
+2475 1347 1716
+2485 1347 52164
+2496 1347 26127
+2508 1347 13877
+3858 1347 27852657
+1253 1348 1
+1254 1348 1
+1459 1348 1
+1460 1348 1
+2098 1348 43681
+2099 1348 43681
+2102 1348 43681
+2106 1348 43681
+2111 1348 43681
+2284 1348 42731
+2285 1348 33710
+2286 1348 22790
+2350 1348 42731
+2351 1348 33710
+2352 1348 22790
+2354 1348 42731
+2356 1348 22790
+2425 1348 35610
+2426 1348 35610
+2428 1348 18042
+2429 1348 17271
+2430 1348 29437
+2432 1348 18042
+2433 1348 5698
+2434 1348 29437
+2437 1348 18043
+2438 1348 17984
+2439 1348 29437
+2500 1348 12938
+2501 1348 7834
+2502 1348 26707
+3859 1348 27852657
+1254 1349 1
+1268 1349 56901
+1269 1349 56901
+1273 1349 36996
+1276 1349 30940
+1281 1349 34581
+1301 1349 2415
+1306 1349 63106
+1312 1349 59634
+1345 1349 6472
+1375 1349 19220
+1390 1349 43857
+1587 1349 19220
+1591 1349 23139
+1866 1349 44371
+1870 1349 38612
+1875 1349 26909
+2227 1349 3590
+2230 1349 41788
+2231 1349 5143
+2234 1349 11668
+2235 1349 43137
+2236 1349 37994
+2241 1349 20743
+2242 1349 12929
+2247 1349 3411
+2253 1349 26942
+2254 1349 15818
+2255 1349 32168
+2256 1349 59145
+2257 1349 59145
+2258 1349 51431
+2259 1349 62109
+2261 1349 58663
+2262 1349 10505
+2263 1349 49647
+2264 1349 23046
+2265 1349 31345
+2266 1349 37721
+2267 1349 61325
+2268 1349 5642
+2269 1349 3586
+2271 1349 28110
+2272 1349 53823
+2273 1349 43044
+2274 1349 36334
+2275 1349 29069
+2276 1349 56869
+2322 1349 52641
+2323 1349 12526
+2324 1349 8029
+2325 1349 34996
+2327 1349 49458
+2328 1349 6424
+2329 1349 30773
+2330 1349 12683
+2331 1349 31844
+2341 1349 40496
+2388 1349 56126
+2389 1349 31554
+2390 1349 35220
+2391 1349 21586
+2392 1349 12182
+2394 1349 39101
+2395 1349 59952
+2396 1349 18419
+2397 1349 29689
+2407 1349 3269
+2418 1349 28294
+2466 1349 4338
+2467 1349 64734
+2468 1349 19280
+2469 1349 52545
+2470 1349 19126
+2471 1349 44456
+2472 1349 53591
+2473 1349 14289
+2474 1349 49993
+2475 1349 25865
+2485 1349 39988
+2496 1349 31587
+2508 1349 17129
+3860 1349 27852657
+1255 1350 1
+2230 1350 4095
+2231 1350 4095
+2234 1350 63038
+2235 1350 22601
+2236 1350 18506
+2241 1350 21334
+2242 1350 2828
+2247 1350 22267
+2253 1350 1639
+2254 1350 61282
+2255 1350 26553
+2256 1350 58022
+2257 1350 58022
+2258 1350 38659
+2259 1350 19657
+2261 1350 33081
+2262 1350 2125
+2263 1350 56986
+2264 1350 40007
+2265 1350 13062
+2266 1350 20561
+2267 1350 56666
+2268 1350 7534
+2269 1350 11661
+2271 1350 39288
+2272 1350 14799
+2273 1350 18212
+2274 1350 49123
+2275 1350 17391
+2276 1350 62351
+2322 1350 19891
+2323 1350 38644
+2324 1350 17725
+2325 1350 21476
+2327 1350 34450
+2328 1350 15733
+2329 1350 24946
+2330 1350 51391
+2331 1350 60552
+2341 1350 63722
+2388 1350 15341
+2389 1350 22822
+2390 1350 5945
+2391 1350 32182
+2392 1350 13454
+2394 1350 42615
+2395 1350 45388
+2396 1350 31912
+2397 1350 53905
+2407 1350 40695
+2418 1350 42494
+2466 1350 3038
+2467 1350 12277
+2468 1350 18601
+2469 1350 11473
+2470 1350 47603
+2471 1350 58754
+2472 1350 42133
+2473 1350 54675
+2474 1350 8799
+2475 1350 35179
+2485 1350 4352
+2496 1350 22005
+2508 1350 32897
+3861 1350 27852657
+1256 1351 1
+1257 1351 1
+1258 1351 1
+1260 1351 1
+1261 1351 1
+1262 1351 2
+1263 1351 1
+1265 1351 1
+1266 1351 1
+1267 1351 2
+1268 1351 2
+1269 1351 1
+1588 1351 49144
+1589 1351 49143
+1590 1351 32760
+1591 1351 32760
+1867 1351 49144
+1868 1351 49143
+1869 1351 32760
+1870 1351 32760
+1872 1351 65520
+1873 1351 65515
+1874 1351 32760
+1908 1351 4
+1963 1351 4
+1964 1351 6
+2029 1351 4
+2030 1351 6
+2031 1351 6
+2223 1351 65518
+2224 1351 65518
+2225 1351 53235
+2226 1351 53235
+2227 1351 53238
+2228 1351 1
+2229 1351 28667
+2230 1351 28669
+2231 1351 40952
+2232 1351 35491
+2233 1351 64157
+2234 1351 23208
+2235 1351 10925
+2236 1351 35494
+2237 1351 35491
+2238 1351 23208
+2239 1351 47780
+2240 1351 6831
+2241 1351 1370
+2242 1351 31397
+2269 1351 32767
+2324 1351 32767
+2325 1351 27318
+2390 1351 49145
+2391 1351 27307
+2392 1351 32766
+2466 1351 42317
+2467 1351 3413
+2468 1351 11601
+2469 1351 43683
+2470 1351 27300
+2471 1351 682
+2496 1351 24576
+2508 1351 10928
+3862 1351 27852657
+1257 1352 1
+1268 1352 61853
+1269 1352 61853
+1276 1352 63106
+1281 1352 2415
+1301 1352 63106
+1306 1352 2415
+1312 1352 23773
+1345 1352 63749
+1390 1352 44513
+1591 1352 23162
+1870 1352 48059
+1875 1352 17462
+2230 1352 56472
+2231 1352 24006
+2234 1352 61146
+2235 1352 46666
+2236 1352 22660
+2241 1352 54022
+2242 1352 19669
+2247 1352 62691
+2253 1352 63408
+2254 1352 43038
+2255 1352 43246
+2256 1352 26772
+2257 1352 26772
+2258 1352 16861
+2259 1352 31356
+2261 1352 33954
+2262 1352 55079
+2263 1352 38156
+2264 1352 37603
+2265 1352 38427
+2266 1352 11655
+2267 1352 28919
+2268 1352 28848
+2269 1352 11057
+2271 1352 44005
+2272 1352 48618
+2273 1352 8421
+2274 1352 18382
+2275 1352 23118
+2276 1352 11463
+2322 1352 48122
+2323 1352 20979
+2324 1352 41768
+2325 1352 14097
+2327 1352 23549
+2328 1352 43750
+2329 1352 37231
+2330 1352 32694
+2331 1352 65368
+2341 1352 53905
+2388 1352 30578
+2389 1352 9470
+2390 1352 4827
+2391 1352 13027
+2392 1352 19385
+2394 1352 47030
+2395 1352 35096
+2396 1352 20713
+2397 1352 32710
+2407 1352 40429
+2418 1352 52045
+2466 1352 25288
+2467 1352 63560
+2468 1352 27442
+2469 1352 23899
+2470 1352 22919
+2471 1352 3858
+2472 1352 58017
+2473 1352 18671
+2474 1352 20882
+2475 1352 41016
+2485 1352 53343
+2496 1352 37819
+2508 1352 51183
+3863 1352 27852657
+1258 1353 1
+1263 1353 65520
+1268 1353 44995
+1269 1353 44996
+1276 1353 2415
+1281 1353 63106
+1301 1353 2415
+1306 1353 63106
+1312 1353 58093
+1345 1353 58379
+1390 1353 256
+1591 1353 42359
+1870 1353 17462
+1875 1353 48059
+2230 1353 41811
+2231 1353 8756
+2234 1353 65436
+2235 1353 18864
+2236 1353 10108
+2241 1353 50866
+2242 1353 55669
+2247 1353 51110
+2253 1353 25845
+2254 1353 1872
+2255 1353 58322
+2256 1353 44313
+2257 1353 44313
+2258 1353 47757
+2259 1353 23014
+2261 1353 54087
+2262 1353 46852
+2263 1353 64236
+2264 1353 5598
+2265 1353 47134
+2266 1353 2821
+2267 1353 17912
+2268 1353 39197
+2269 1353 1821
+2271 1353 25592
+2272 1353 65209
+2273 1353 58705
+2274 1353 43468
+2275 1353 39823
+2276 1353 37002
+2322 1353 6717
+2323 1353 44195
+2324 1353 34215
+2325 1353 60005
+2327 1353 61787
+2328 1353 5678
+2329 1353 33547
+2330 1353 15746
+2331 1353 28442
+2341 1353 56961
+2388 1353 47533
+2389 1353 44853
+2390 1353 52569
+2391 1353 43560
+2392 1353 11424
+2394 1353 35477
+2395 1353 31481
+2396 1353 1389
+2397 1353 64437
+2407 1353 20221
+2418 1353 28781
+2466 1353 55685
+2467 1353 35426
+2468 1353 22371
+2469 1353 64867
+2470 1353 46086
+2471 1353 52252
+2472 1353 39529
+2473 1353 24736
+2474 1353 63887
+2475 1353 39641
+2485 1353 3993
+2496 1353 63984
+2508 1353 14285
+3864 1353 27852657
+1259 1354 1
+1260 1354 1
+1263 1354 1
+1264 1354 1
+1265 1354 1
+1268 1354 2
+1269 1354 1
+1470 1354 1
+1471 1354 1
+1475 1354 1
+2232 1354 2
+2233 1354 2
+2236 1354 2
+2237 1354 49142
+2238 1354 49142
+2241 1354 32763
+2242 1354 32761
+2292 1354 49142
+2293 1354 49142
+2297 1354 32761
+2436 1354 8191
+2437 1354 8191
+2440 1354 1
+2441 1354 2
+2471 1354 16380
+2481 1354 16380
+2499 1354 49142
+2500 1354 49142
+2503 1354 2
+2504 1354 26620
+2511 1354 16380
+3865 1354 27852657
+1260 1355 1
+1261 1355 1
+1262 1355 1
+1263 1355 1
+1265 1355 1
+1266 1355 1
+1267 1355 1
+1268 1355 2
+1269 1355 1
+1873 1355 63715
+1874 1355 15989
+1875 1355 15989
+1908 1355 62404
+1910 1355 17281
+1913 1355 28460
+1914 1355 28460
+1915 1355 28460
+1961 1355 49315
+1962 1355 49315
+1963 1355 46198
+1964 1355 35115
+1967 1355 39215
+1968 1355 41932
+1969 1355 41932
+1970 1355 4871
+1980 1355 41932
+2027 1355 49315
+2028 1355 49315
+2029 1355 46198
+2030 1355 35115
+2031 1355 35115
+2033 1355 39215
+2034 1355 41932
+2035 1355 41932
+2036 1355 4871
+2046 1355 18343
+2057 1355 41932
+2223 1355 19375
+2224 1355 19375
+2225 1355 56050
+2226 1355 42175
+2227 1355 22800
+2228 1355 11290
+2229 1355 62096
+2230 1355 35323
+2231 1355 12523
+2232 1355 11290
+2233 1355 11371
+2234 1355 34292
+2235 1355 49829
+2236 1355 37306
+2237 1355 11290
+2238 1355 53857
+2239 1355 28922
+2240 1355 32449
+2241 1355 52903
+2242 1355 15597
+2245 1355 63082
+2246 1355 63706
+2247 1355 50085
+2248 1355 11880
+2252 1355 44079
+2253 1355 44703
+2254 1355 31082
+2255 1355 44777
+2256 1355 16148
+2257 1355 16148
+2258 1355 30371
+2259 1355 63148
+2261 1355 15211
+2262 1355 1590
+2263 1355 15909
+2264 1355 554
+2265 1355 28316
+2266 1355 12168
+2267 1355 16248
+2268 1355 49025
+2269 1355 44321
+2271 1355 20450
+2272 1355 32330
+2273 1355 18219
+2274 1355 32814
+2275 1355 14021
+2276 1355 1853
+2322 1355 62478
+2323 1355 29734
+2324 1355 25030
+2325 1355 43181
+2327 1355 53757
+2328 1355 56946
+2329 1355 51686
+2330 1355 56415
+2331 1355 59340
+2341 1355 57487
+2388 1355 26638
+2389 1355 53017
+2390 1355 17031
+2391 1355 13691
+2392 1355 37699
+2394 1355 57373
+2395 1355 25034
+2396 1355 6301
+2397 1355 56470
+2407 1355 20347
+2418 1355 28381
+2466 1355 10511
+2467 1355 44751
+2468 1355 37470
+2469 1355 40314
+2470 1355 51159
+2471 1355 33137
+2472 1355 49843
+2473 1355 1427
+2474 1355 31116
+2475 1355 11981
+2485 1355 8546
+2496 1355 24879
+2508 1355 51883
+3866 1355 27852657
+1261 1356 1
+1266 1356 1
+1472 1356 1
+1473 1356 1
+2239 1356 49140
+2294 1356 49140
+2353 1356 16383
+2354 1356 16383
+2355 1356 16383
+2356 1356 16383
+2357 1356 16383
+2431 1356 35491
+2432 1356 35491
+2433 1356 35491
+2434 1356 35491
+2435 1356 35491
+2436 1356 35491
+2437 1356 35491
+2438 1356 43682
+2439 1356 43682
+2440 1356 13652
+2441 1356 43682
+2468 1356 43680
+2478 1356 43680
+2479 1356 35490
+2489 1356 43680
+2490 1356 35490
+2491 1356 40951
+2499 1356 342
+2500 1356 342
+2501 1356 24912
+2502 1356 60744
+2503 1356 61770
+2504 1356 9555
+2511 1356 61596
+3867 1356 27852657
+1262 1357 1
+1263 1357 1
+1268 1357 10354
+1269 1357 10353
+1312 1357 34941
+1345 1357 14543
+1390 1357 47021
+2234 1357 22339
+2235 1357 32765
+2236 1357 32765
+2241 1357 29714
+2242 1357 18788
+2247 1357 56692
+2253 1357 43182
+2254 1357 53642
+2255 1357 5532
+2256 1357 55332
+2257 1357 55332
+2258 1357 61025
+2259 1357 1802
+2261 1357 17846
+2262 1357 28650
+2263 1357 13020
+2264 1357 58493
+2265 1357 48678
+2266 1357 58867
+2267 1357 12347
+2268 1357 3018
+2269 1357 38240
+2271 1357 40835
+2272 1357 62837
+2273 1357 13605
+2274 1357 23090
+2275 1357 59381
+2276 1357 514
+2322 1357 24612
+2323 1357 16611
+2324 1357 38339
+2325 1357 5252
+2327 1357 40011
+2328 1357 17836
+2329 1357 27608
+2330 1357 12673
+2331 1357 828
+2341 1357 314
+2388 1357 36203
+2389 1357 34915
+2390 1357 35879
+2391 1357 21957
+2392 1357 14456
+2394 1357 50346
+2395 1357 5347
+2396 1357 62160
+2397 1357 15394
+2407 1357 15855
+2418 1357 15541
+2466 1357 25277
+2467 1357 15345
+2468 1357 48168
+2469 1357 28755
+2470 1357 45377
+2471 1357 51275
+2472 1357 8006
+2473 1357 563
+2474 1357 41600
+2475 1357 20496
+2485 1357 38363
+2496 1357 62374
+2508 1357 60943
+3868 1357 27852657
+1263 1358 1
+1268 1358 145
+1269 1358 144
+1306 1358 6890
+1339 1358 52007
+1345 1358 41032
+1390 1358 2422
+1875 1358 42056
+2234 1358 10780
+2235 1358 58612
+2236 1358 58554
+2241 1358 7003
+2242 1358 25125
+2247 1358 1148
+2253 1358 47747
+2254 1358 940
+2255 1358 38532
+2256 1358 42289
+2257 1358 42289
+2258 1358 25603
+2259 1358 30908
+2261 1358 33086
+2262 1358 25360
+2263 1358 48317
+2264 1358 25873
+2265 1358 37944
+2266 1358 61176
+2267 1358 46011
+2268 1358 42075
+2269 1358 44219
+2271 1358 24593
+2272 1358 34719
+2273 1358 44949
+2274 1358 2341
+2275 1358 8321
+2276 1358 12666
+2322 1358 48286
+2323 1358 49630
+2324 1358 33712
+2325 1358 9075
+2327 1358 22702
+2328 1358 41233
+2329 1358 22021
+2330 1358 59528
+2331 1358 32058
+2341 1358 19392
+2388 1358 42561
+2389 1358 50860
+2390 1358 40866
+2391 1358 32965
+2392 1358 35588
+2394 1358 57577
+2395 1358 46180
+2396 1358 42235
+2397 1358 45043
+2407 1358 17944
+2418 1358 64073
+2466 1358 27919
+2467 1358 43689
+2468 1358 53712
+2469 1358 6220
+2470 1358 21955
+2471 1358 60662
+2472 1358 61135
+2473 1358 24300
+2474 1358 7396
+2475 1358 51763
+2485 1358 29223
+2496 1358 18450
+2508 1358 22834
+3869 1358 27852657
+1264 1359 1
+1312 1359 20187
+1345 1359 57940
+1390 1359 37055
+2241 1359 61646
+2242 1359 31683
+2247 1359 40553
+2254 1359 9396
+2255 1359 20716
+2256 1359 45067
+2257 1359 45067
+2258 1359 7219
+2259 1359 3284
+2261 1359 39935
+2262 1359 51695
+2263 1359 4870
+2264 1359 51351
+2265 1359 65177
+2266 1359 20110
+2267 1359 38560
+2268 1359 15104
+2269 1359 15104
+2271 1359 28140
+2272 1359 9685
+2273 1359 45278
+2274 1359 25348
+2275 1359 27912
+2276 1359 7802
+2322 1359 17389
+2323 1359 19471
+2324 1359 19471
+2325 1359 19471
+2327 1359 55282
+2328 1359 61844
+2329 1359 53109
+2330 1359 35284
+2331 1359 27358
+2341 1359 19556
+2388 1359 51786
+2389 1359 41985
+2390 1359 41985
+2391 1359 41985
+2392 1359 37813
+2394 1359 32756
+2395 1359 63387
+2396 1359 53062
+2397 1359 58842
+2407 1359 9064
+2418 1359 55029
+2466 1359 54287
+2467 1359 5337
+2468 1359 5337
+2469 1359 5337
+2470 1359 61025
+2471 1359 25638
+2472 1359 61154
+2473 1359 54886
+2474 1359 15251
+2475 1359 17845
+2485 1359 46069
+2496 1359 32863
+2508 1359 48959
+3870 1359 27852657
+1265 1360 1
+1268 1360 43681
+1269 1360 43681
+1312 1360 26301
+1345 1360 31288
+1390 1360 110
+2241 1360 1179
+2242 1360 18937
+2247 1360 63096
+2254 1360 37012
+2255 1360 20171
+2256 1360 6047
+2257 1360 6047
+2258 1360 29079
+2259 1360 39113
+2261 1360 16436
+2262 1360 45823
+2263 1360 22128
+2264 1360 30601
+2265 1360 24190
+2266 1360 18143
+2267 1360 661
+2268 1360 45825
+2269 1360 51569
+2271 1360 47912
+2272 1360 62187
+2273 1360 33990
+2274 1360 23429
+2275 1360 46534
+2276 1360 28391
+2322 1360 3693
+2323 1360 48533
+2324 1360 976
+2325 1360 976
+2327 1360 10259
+2328 1360 5443
+2329 1360 34723
+2330 1360 47773
+2331 1360 45992
+2341 1360 17601
+2388 1360 28269
+2389 1360 8879
+2390 1360 12637
+2391 1360 12637
+2392 1360 12512
+2394 1360 41504
+2395 1360 33254
+2396 1360 11511
+2397 1360 9913
+2407 1360 21413
+2418 1360 3812
+2466 1360 48641
+2467 1360 30192
+2468 1360 42606
+2469 1360 42606
+2470 1360 13970
+2471 1360 22086
+2472 1360 42800
+2473 1360 28195
+2474 1360 35762
+2475 1360 31477
+2485 1360 48664
+2496 1360 41506
+2508 1360 5756
+3871 1360 27852657
+1266 1361 1
+1268 1361 28737
+1269 1361 28737
+1312 1361 54030
+1345 1361 55705
+1390 1361 48843
+2241 1361 27971
+2242 1361 31853
+2247 1361 38204
+2253 1361 36146
+2254 1361 47020
+2255 1361 51155
+2256 1361 58568
+2257 1361 58568
+2258 1361 61412
+2259 1361 46148
+2261 1361 48003
+2262 1361 39029
+2263 1361 30753
+2264 1361 36176
+2265 1361 9970
+2266 1361 16923
+2267 1361 6740
+2268 1361 8876
+2269 1361 3132
+2271 1361 18761
+2272 1361 59927
+2273 1361 55308
+2274 1361 13678
+2275 1361 50901
+2276 1361 33978
+2322 1361 50513
+2323 1361 57774
+2324 1361 39810
+2325 1361 55195
+2327 1361 46407
+2328 1361 44046
+2329 1361 48295
+2330 1361 7467
+2331 1361 23378
+2341 1361 54921
+2388 1361 6161
+2389 1361 28425
+2390 1361 24667
+2391 1361 64361
+2392 1361 19370
+2394 1361 15424
+2395 1361 48190
+2396 1361 18542
+2397 1361 12265
+2407 1361 16913
+2418 1361 27513
+2466 1361 54169
+2467 1361 48008
+2468 1361 35594
+2469 1361 26679
+2470 1361 4387
+2471 1361 62496
+2472 1361 10445
+2473 1361 19466
+2474 1361 46348
+2475 1361 30291
+2485 1361 7501
+2496 1361 59118
+2508 1361 12963
+3872 1361 27852657
+1267 1362 1
+1268 1362 58625
+1269 1362 58625
+1312 1362 28245
+1345 1362 24171
+1390 1362 49545
+2241 1362 54563
+2242 1362 13544
+2247 1362 54384
+2253 1362 29375
+2254 1362 31792
+2255 1362 11786
+2256 1362 7696
+2257 1362 7696
+2258 1362 5764
+2259 1362 40730
+2261 1362 37618
+2262 1362 8305
+2263 1362 49063
+2264 1362 60537
+2265 1362 3678
+2266 1362 61503
+2267 1362 54817
+2268 1362 50130
+2269 1362 50130
+2271 1362 22407
+2272 1362 22514
+2273 1362 29304
+2274 1362 65233
+2275 1362 21920
+2276 1362 25938
+2322 1362 36435
+2323 1362 28447
+2324 1362 28447
+2325 1362 13062
+2327 1362 59264
+2328 1362 57187
+2329 1362 26164
+2330 1362 13226
+2331 1362 31628
+2341 1362 5690
+2388 1362 43525
+2389 1362 40806
+2390 1362 40806
+2391 1362 1112
+2392 1362 52069
+2394 1362 23603
+2395 1362 6911
+2396 1362 46448
+2397 1362 10159
+2407 1362 21236
+2418 1362 15546
+2466 1362 23623
+2467 1362 11406
+2468 1362 11406
+2469 1362 20321
+2470 1362 31812
+2471 1362 29848
+2472 1362 19325
+2473 1362 60648
+2474 1362 24053
+2475 1362 28207
+2485 1362 203
+2496 1362 37931
+2508 1362 51196
+3873 1362 27852657
+1268 1363 1
+1269 1363 1
+1475 1363 1
+1599 1363 32766
+1654 1363 32766
+1655 1363 32766
+1773 1363 65520
+1800 1363 65520
+1835 1363 65520
+1878 1363 10
+1880 1363 2
+1933 1363 32764
+1934 1363 32764
+1999 1363 65519
+2000 1363 65519
+2001 1363 65518
+2133 1363 40949
+2134 1363 65515
+2160 1363 40949
+2161 1363 65515
+2196 1363 40949
+2197 1363 65515
+2239 1363 16377
+2241 1363 8195
+2242 1363 57327
+2294 1363 57328
+2295 1363 57328
+2297 1363 8191
+2360 1363 8188
+2361 1363 8188
+2362 1363 16382
+2438 1363 53236
+2439 1363 53236
+2440 1363 40951
+2441 1363 53235
+2447 1363 65520
+2454 1363 65520
+2462 1363 65520
+2471 1363 12285
+2481 1363 14337
+2492 1363 32763
+2504 1363 19446
+3874 1363 27852657
+1270 1364 1
+1271 1364 1
+1273 1364 65520
+1278 1364 30031
+1281 1364 30030
+1283 1364 30031
+1287 1364 35491
+1476 1364 1
+1477 1364 1
+1480 1364 65520
+1482 1364 59824
+1483 1364 5697
+1484 1364 5698
+1492 1364 35490
+1495 1364 5460
+1559 1364 30031
+1604 1364 30031
+1605 1364 43689
+1659 1364 30031
+1660 1364 43689
+1661 1364 43689
+1755 1364 1
+1756 1364 1
+1759 1364 65520
+1761 1364 59824
+1762 1364 5697
+1763 1364 5698
+1765 1364 59824
+1767 1364 5698
+1779 1364 60060
+1806 1364 60060
+1841 1364 60060
+1884 1364 7296
+1886 1364 31398
+1938 1364 30031
+1939 1364 50968
+1940 1364 45054
+2005 1364 7279
+2006 1364 1365
+2007 1364 61425
+2115 1364 32761
+2116 1364 32761
+2118 1364 41663
+2119 1364 8902
+2121 1364 9971
+2122 1364 54482
+2123 1364 45580
+2125 1364 9971
+2126 1364 50565
+2127 1364 45580
+2130 1364 9971
+2131 1364 50565
+2132 1364 45580
+2139 1364 64837
+2140 1364 32755
+2166 1364 64837
+2167 1364 32755
+2199 1364 48796
+2202 1364 64837
+2203 1364 32755
+2243 1364 59890
+2244 1364 56133
+2245 1364 55221
+2247 1364 17238
+2248 1364 18595
+2298 1364 59890
+2299 1364 2385
+2300 1364 64947
+2301 1364 23548
+2303 1364 23890
+2364 1364 44023
+2365 1364 28493
+2366 1364 52152
+2367 1364 53007
+2368 1364 49598
+2442 1364 12286
+2443 1364 37872
+2444 1364 16972
+2445 1364 59173
+2446 1364 65122
+2447 1364 54541
+2448 1364 60060
+2455 1364 60060
+2463 1364 60060
+2472 1364 32846
+2482 1364 21336
+2493 1364 33878
+2505 1364 53044
+3875 1364 27852657
+1271 1365 1
+1272 1365 1
+1274 1365 1
+1278 1365 1
+1283 1365 1
+1297 1365 1
+1299 1365 1
+1303 1365 1
+1308 1365 1
+1333 1365 1
+1336 1365 1
+1341 1365 1
+1381 1365 1
+1386 1365 1
+1598 1365 1
+2244 1365 32761
+2251 1365 32761
+2259 1365 32761
+2268 1365 32761
+2323 1365 32761
+2389 1365 32761
+2467 1365 24573
+3876 1365 27852657
+1272 1366 1
+1273 1366 1
+1479 1366 1
+1480 1366 1
+1482 1366 5698
+1483 1366 59824
+1484 1366 59823
+1758 1366 1
+1759 1366 1
+1761 1366 5698
+1762 1366 59824
+1763 1366 59823
+1765 1366 5698
+1767 1366 59823
+2118 1366 56619
+2119 1366 56619
+2121 1366 22790
+2122 1366 11039
+2123 1366 19941
+2125 1366 22790
+2126 1366 14956
+2127 1366 19941
+2130 1366 22790
+2131 1366 14956
+2132 1366 19941
+2443 1366 53415
+2444 1366 30803
+2445 1366 36321
+3877 1366 27852657
+1273 1367 1
+1375 1367 1
+1480 1367 1
+1510 1367 65520
+1587 1367 2
+1642 1367 1
+1759 1367 1
+1766 1367 32759
+1789 1367 65520
+1793 1367 32758
+1828 1367 32759
+1866 1367 1
+1873 1367 32760
+1921 1367 1
+1924 1367 32759
+1990 1367 32759
+1994 1367 65518
+2119 1367 8195
+2122 1367 12289
+2126 1367 40952
+2131 1367 40952
+2146 1367 40955
+2149 1367 45049
+2153 1367 8191
+2158 1367 8191
+2185 1367 23209
+2189 1367 51872
+2194 1367 51872
+2227 1367 16378
+2234 1367 40952
+2239 1367 40952
+2282 1367 16378
+2285 1367 12280
+2294 1367 40952
+2348 1367 45044
+2351 1367 28663
+2355 1367 40954
+2426 1367 63473
+2429 1367 38903
+2433 1367 53236
+2438 1367 53236
+2444 1367 32762
+2451 1367 8190
+2459 1367 20476
+2468 1367 2732
+2478 1367 2732
+2489 1367 29347
+2501 1367 59382
+3878 1367 27852657
+1274 1368 1
+1275 1368 65503
+1276 1368 65503
+1279 1368 25719
+1280 1368 45224
+1281 1368 45242
+1286 1368 31961
+1287 1368 52240
+1292 1368 15152
+1316 1368 42174
+1317 1368 60071
+1318 1368 30073
+1319 1368 52424
+1326 1368 52424
+1346 1368 43333
+1347 1368 18724
+1349 1368 19686
+1350 1368 48293
+1351 1368 45911
+1352 1368 18625
+1359 1368 37761
+1367 1368 50858
+1391 1368 4756
+1392 1368 20561
+1393 1368 54445
+1395 1368 54605
+1396 1368 59265
+1397 1368 65095
+1404 1368 3471
+1412 1368 30502
+1421 1368 45165
+1603 1368 59081
+1604 1368 50578
+1605 1368 28183
+1606 1368 21081
+1608 1368 62975
+1609 1368 18140
+1616 1368 56318
+1624 1368 9011
+1633 1368 62469
+1688 1368 17304
+1882 1368 4144
+1883 1368 1493
+1884 1368 6416
+1885 1368 3829
+1886 1368 63366
+1888 1368 59254
+1895 1368 54602
+1903 1368 56025
+1912 1368 7913
+1967 1368 54315
+2033 1368 37011
+2243 1368 20371
+2244 1368 21109
+2245 1368 49154
+2246 1368 64041
+2247 1368 5349
+2248 1368 10805
+2249 1368 48511
+2256 1368 40304
+2264 1368 21243
+2273 1368 58876
+2328 1368 65112
+2394 1368 58516
+2472 1368 33933
+3879 1368 27852657
+1275 1369 1
+1276 1369 1
+1281 1369 65520
+1287 1369 1
+1602 1369 25432
+1873 1369 12336
+1874 1369 38596
+1875 1369 38596
+1892 1369 11729
+1893 1369 11865
+1901 1369 55222
+1908 1369 41332
+1910 1369 35415
+1913 1369 5569
+1914 1369 5569
+1915 1369 5569
+1961 1369 46105
+1962 1369 17102
+1963 1369 8970
+1964 1369 12824
+1967 1369 4376
+1968 1369 40487
+1969 1369 40487
+1970 1369 46056
+1980 1369 40487
+2027 1369 46105
+2028 1369 17102
+2029 1369 8970
+2030 1369 12824
+2031 1369 20654
+2033 1369 4376
+2034 1369 40487
+2035 1369 40487
+2036 1369 46056
+2046 1369 15453
+2057 1369 40487
+2223 1369 19430
+2224 1369 19430
+2225 1369 43840
+2226 1369 33112
+2227 1369 13682
+2228 1369 15520
+2229 1369 21187
+2230 1369 17000
+2231 1369 3318
+2232 1369 15520
+2233 1369 21187
+2234 1369 45665
+2235 1369 60959
+2236 1369 57641
+2237 1369 15520
+2238 1369 21187
+2239 1369 17603
+2240 1369 51850
+2241 1369 41611
+2242 1369 49491
+2245 1369 55056
+2246 1369 8339
+2247 1369 24285
+2248 1369 6194
+2252 1369 55995
+2253 1369 39145
+2254 1369 22211
+2255 1369 59888
+2256 1369 17010
+2257 1369 17010
+2258 1369 62763
+2259 1369 22111
+2261 1369 61615
+2262 1369 19058
+2263 1369 44937
+2264 1369 37148
+2265 1369 23368
+2266 1369 6358
+2267 1369 18880
+2268 1369 43749
+2269 1369 34245
+2271 1369 23172
+2272 1369 10114
+2273 1369 34750
+2274 1369 17376
+2275 1369 57380
+2276 1369 51022
+2322 1369 32730
+2323 1369 15014
+2324 1369 20627
+2325 1369 42856
+2327 1369 30480
+2328 1369 61006
+2329 1369 44727
+2330 1369 27637
+2331 1369 20649
+2341 1369 35148
+2388 1369 7399
+2389 1369 63186
+2390 1369 43520
+2391 1369 16627
+2392 1369 46688
+2394 1369 37098
+2395 1369 21119
+2396 1369 16669
+2397 1369 4697
+2407 1369 28490
+2418 1369 58863
+2466 1369 63973
+2467 1369 23483
+2468 1369 5157
+2469 1369 22480
+2470 1369 40144
+2471 1369 34123
+2472 1369 34569
+2473 1369 10300
+2474 1369 50789
+2475 1369 12493
+2485 1369 7290
+2496 1369 60363
+2508 1369 25003
+3880 1369 27852657
+1276 1370 1
+1280 1370 57589
+1301 1370 26020
+1305 1370 22286
+1310 1370 14366
+1316 1370 57570
+1323 1370 57570
+1332 1370 7814
+1333 1370 24449
+1334 1370 36151
+1338 1370 31012
+1343 1370 53853
+1349 1370 6662
+1356 1370 34880
+1364 1370 42831
+1376 1370 65470
+1377 1370 52325
+1378 1370 52325
+1383 1370 57470
+1388 1370 43430
+1394 1370 31637
+1401 1370 34779
+1409 1370 54413
+1418 1370 11582
+1588 1370 22247
+1589 1370 58697
+1590 1370 58697
+1591 1370 19109
+1600 1370 46787
+1606 1370 25087
+1613 1370 45373
+1621 1370 43376
+1630 1370 53982
+1685 1370 42400
+1867 1370 54026
+1868 1370 28423
+1869 1370 28423
+1870 1370 31973
+1874 1370 29874
+1885 1370 29149
+1892 1370 62547
+1900 1370 23177
+1909 1370 9621
+1964 1370 33569
+2030 1370 56690
+2228 1370 44831
+2229 1370 23820
+2230 1370 23820
+2231 1370 15271
+2235 1370 44244
+2240 1370 60014
+2246 1370 47262
+2253 1370 22343
+2261 1370 44069
+2270 1370 60873
+2325 1370 4112
+2391 1370 64382
+2469 1370 17319
+3881 1370 27852657
+1277 1371 1
+1278 1371 1
+1281 1371 1
+1282 1371 1
+1283 1371 1
+1287 1371 65520
+1492 1371 65520
+1495 1371 65519
+1605 1371 16361
+1660 1371 16361
+1661 1371 16361
+1779 1371 2
+1806 1371 2
+1841 1371 2
+1884 1371 43644
+1886 1371 32755
+1939 1371 60047
+1940 1371 16367
+2005 1371 43686
+2006 1371 6
+2007 1371 8
+2139 1371 49144
+2140 1371 12
+2166 1371 49144
+2167 1371 12
+2202 1371 49144
+2203 1371 12
+2243 1371 61427
+2244 1371 61427
+2245 1371 39595
+2247 1371 4085
+2248 1371 36863
+2298 1371 36855
+2299 1371 36855
+2300 1371 35497
+2301 1371 24581
+2303 1371 20470
+2364 1371 8183
+2365 1371 8183
+2366 1371 51869
+2367 1371 35490
+2368 1371 19102
+2442 1371 12285
+2443 1371 12285
+2444 1371 32759
+2445 1371 15014
+2446 1371 39585
+2447 1371 15017
+2448 1371 2
+2455 1371 2
+2463 1371 2
+2472 1371 59378
+2482 1371 39911
+2493 1371 16365
+2505 1371 36009
+3882 1371 27852657
+1278 1372 1
+1495 1372 43000
+1766 1372 63048
+1767 1372 64651
+1768 1372 64651
+1806 1372 25004
+1841 1372 64940
+1883 1372 23552
+1884 1372 30927
+1886 1372 61894
+1895 1372 6979
+1903 1372 6979
+1912 1372 6979
+1937 1372 36754
+1938 1372 22264
+1939 1372 25769
+1940 1372 31734
+1943 1372 32671
+1950 1372 47246
+1958 1372 47246
+1967 1372 54225
+1977 1372 47246
+2003 1372 36754
+2004 1372 22264
+2005 1372 25769
+2006 1372 31734
+2007 1372 59183
+2009 1372 32671
+2016 1372 47246
+2024 1372 47246
+2033 1372 54225
+2043 1372 28971
+2054 1372 47246
+2115 1372 20906
+2116 1372 20906
+2117 1372 20560
+2118 1372 5452
+2119 1372 50067
+2120 1372 37311
+2121 1372 8549
+2122 1372 45513
+2123 1372 60967
+2124 1372 37311
+2125 1372 8549
+2126 1372 60453
+2127 1372 35649
+2128 1372 40203
+2129 1372 3989
+2130 1372 55845
+2131 1372 8429
+2132 1372 51863
+2133 1372 7489
+2134 1372 32807
+2137 1372 64456
+2138 1372 57717
+2139 1372 11741
+2140 1372 9451
+2164 1372 22065
+2165 1372 15326
+2166 1372 34871
+2167 1372 19939
+2168 1372 15544
+2175 1372 15544
+2198 1372 30876
+2199 1372 11104
+2201 1372 7106
+2202 1372 61999
+2203 1372 13647
+2204 1372 53827
+2211 1372 18695
+2219 1372 3151
+2243 1372 14800
+2244 1372 32236
+2245 1372 2
+2247 1372 60304
+2248 1372 62607
+2249 1372 1084
+2256 1372 35848
+2264 1372 61469
+2273 1372 58318
+2298 1372 45154
+2299 1372 28429
+2300 1372 30782
+2301 1372 16957
+2303 1372 52986
+2304 1372 547
+2311 1372 57212
+2319 1372 55375
+2328 1372 63060
+2338 1372 4742
+2364 1372 20857
+2365 1372 40611
+2366 1372 16616
+2367 1372 54779
+2368 1372 40472
+2370 1372 29604
+2377 1372 7489
+2385 1372 3151
+2394 1372 56139
+2404 1372 43941
+2415 1372 39199
+2442 1372 7483
+2443 1372 550
+2444 1372 27256
+2445 1372 44963
+2446 1372 42678
+2447 1372 45213
+2448 1372 11460
+2455 1372 17532
+2463 1372 10190
+2472 1372 63886
+2482 1372 34955
+2493 1372 29912
+2505 1372 49568
+3883 1372 27852657
+1279 1373 1
+1284 1373 1
+1382 1373 1
+1387 1373 1
+1492 1373 1
+1520 1373 65520
+1599 1373 2
+1654 1373 1
+2245 1373 32761
+2269 1373 32761
+2300 1373 32761
+2308 1373 32760
+2324 1373 1
+2334 1373 32761
+2366 1373 32761
+2374 1373 32760
+2375 1373 32760
+2390 1373 1
+2400 1373 1
+2411 1373 32761
+2444 1373 24572
+2445 1373 1
+2446 1373 1
+2447 1373 1
+2452 1373 40950
+2453 1373 40950
+2454 1373 40950
+2468 1373 49143
+2470 1373 1
+2471 1373 1
+2478 1373 49142
+2481 1373 1
+2489 1373 49141
+2501 1373 8190
+2505 1373 32761
+2506 1373 28665
+2508 1373 32761
+2509 1373 32761
+2510 1373 32761
+2511 1373 24572
+3884 1373 27852657
+1280 1374 1
+1281 1374 1
+1287 1374 65520
+1602 1374 10309
+1873 1374 17587
+1874 1374 31596
+1875 1374 31596
+1892 1374 43615
+1893 1374 22824
+1901 1374 30208
+1908 1374 37310
+1910 1374 43493
+1913 1374 36653
+1914 1374 36653
+1915 1374 36653
+1961 1374 32876
+1962 1374 8833
+1963 1374 19662
+1964 1374 9984
+1967 1374 31028
+1968 1374 1852
+1969 1374 1852
+1970 1374 38505
+1980 1374 1852
+2027 1374 32876
+2028 1374 8833
+2029 1374 19662
+2030 1374 9984
+2031 1374 24244
+2033 1374 31028
+2034 1374 1852
+2035 1374 1852
+2036 1374 38505
+2046 1374 3704
+2057 1374 1852
+2223 1374 50900
+2224 1374 50900
+2225 1374 301
+2226 1374 44096
+2227 1374 58717
+2228 1374 38278
+2229 1374 13322
+2230 1374 62118
+2231 1374 3401
+2232 1374 38278
+2233 1374 13322
+2234 1374 54525
+2235 1374 18764
+2236 1374 15363
+2237 1374 38278
+2238 1374 13322
+2239 1374 20040
+2240 1374 1403
+2241 1374 41329
+2242 1374 25966
+2245 1374 16191
+2246 1374 21038
+2247 1374 12138
+2248 1374 57198
+2252 1374 53074
+2253 1374 12520
+2254 1374 26524
+2255 1374 8648
+2256 1374 8255
+2257 1374 8255
+2258 1374 24725
+2259 1374 16765
+2261 1374 5414
+2262 1374 41438
+2263 1374 39156
+2264 1374 41242
+2265 1374 54158
+2266 1374 45903
+2267 1374 30587
+2268 1374 22627
+2269 1374 51049
+2271 1374 63597
+2272 1374 36274
+2273 1374 14600
+2274 1374 42943
+2275 1374 58642
+2276 1374 12739
+2322 1374 11629
+2323 1374 57753
+2324 1374 25254
+2325 1374 52066
+2327 1374 63921
+2328 1374 4205
+2329 1374 61850
+2330 1374 56282
+2331 1374 4984
+2341 1374 57766
+2388 1374 26303
+2389 1374 38463
+2390 1374 41587
+2391 1374 45621
+2392 1374 8229
+2394 1374 12476
+2395 1374 38677
+2396 1374 26249
+2397 1374 49219
+2407 1374 8439
+2418 1374 16194
+2466 1374 32968
+2467 1374 53709
+2468 1374 60560
+2469 1374 64858
+2470 1374 23932
+2471 1374 7053
+2472 1374 8518
+2473 1374 59395
+2474 1374 58540
+2475 1374 44117
+2485 1374 56083
+2496 1374 15455
+2508 1374 807
+3885 1374 27852657
+1281 1375 1
+1306 1375 43337
+1339 1375 28743
+1345 1375 29510
+1390 1375 45124
+1875 1375 47962
+2234 1375 1785
+2235 1375 18278
+2236 1375 15078
+2241 1375 909
+2242 1375 7701
+2247 1375 25737
+2253 1375 32333
+2254 1375 9898
+2255 1375 38836
+2256 1375 44110
+2257 1375 44110
+2258 1375 36897
+2259 1375 27161
+2261 1375 33200
+2262 1375 15596
+2263 1375 17666
+2264 1375 12413
+2265 1375 47914
+2266 1375 3804
+2267 1375 8874
+2268 1375 13121
+2269 1375 24538
+2271 1375 8885
+2272 1375 63236
+2273 1375 20745
+2274 1375 49250
+2275 1375 29477
+2276 1375 25673
+2322 1375 60883
+2323 1375 41854
+2324 1375 36240
+2325 1375 10114
+2327 1375 60949
+2328 1375 35971
+2329 1375 59921
+2330 1375 25726
+2331 1375 57179
+2341 1375 31506
+2388 1375 63574
+2389 1375 11155
+2390 1375 5671
+2391 1375 1896
+2392 1375 8192
+2394 1375 49090
+2395 1375 9607
+2396 1375 39398
+2397 1375 17237
+2407 1375 1711
+2418 1375 35726
+2466 1375 57387
+2467 1375 15168
+2468 1375 15764
+2469 1375 1432
+2470 1375 43534
+2471 1375 57519
+2472 1375 10665
+2473 1375 8227
+2474 1375 7176
+2475 1375 57048
+2485 1375 58923
+2496 1375 44578
+2508 1375 44053
+3886 1375 27852657
+1282 1376 1
+1495 1376 48416
+1766 1376 34704
+1767 1376 26436
+1768 1376 26436
+1806 1376 11049
+1841 1376 46316
+1883 1376 56895
+1884 1376 45039
+1886 1376 56663
+1895 1376 59350
+1903 1376 59350
+1912 1376 59350
+1937 1376 57938
+1938 1376 53275
+1939 1376 13474
+1940 1376 1296
+1943 1376 47455
+1950 1376 32963
+1958 1376 32963
+1967 1376 26792
+1977 1376 32963
+2003 1376 57938
+2004 1376 53275
+2005 1376 13474
+2006 1376 1296
+2007 1376 52792
+2009 1376 47455
+2016 1376 32963
+2024 1376 32963
+2033 1376 26792
+2043 1376 405
+2054 1376 32963
+2115 1376 56547
+2116 1376 56547
+2117 1376 18877
+2118 1376 11500
+2119 1376 20474
+2120 1376 10106
+2121 1376 43669
+2122 1376 34072
+2123 1376 13598
+2124 1376 10106
+2125 1376 43669
+2126 1376 7181
+2127 1376 63771
+2128 1376 50173
+2129 1376 12259
+2130 1376 19667
+2131 1376 11798
+2132 1376 57037
+2133 1376 44694
+2134 1376 60042
+2137 1376 11649
+2138 1376 48078
+2139 1376 16189
+2140 1376 60749
+2164 1376 46035
+2165 1376 16943
+2166 1376 50575
+2167 1376 10613
+2168 1376 36554
+2175 1376 36554
+2198 1376 49122
+2199 1376 13526
+2201 1376 2031
+2202 1376 4304
+2203 1376 26029
+2204 1376 58740
+2211 1376 47139
+2219 1376 10585
+2243 1376 57037
+2244 1376 23310
+2245 1376 65245
+2247 1376 33512
+2248 1376 28398
+2249 1376 5013
+2256 1376 57955
+2264 1376 41948
+2273 1376 31363
+2298 1376 63399
+2299 1376 21941
+2300 1376 35543
+2301 1376 30441
+2303 1376 7819
+2304 1376 27659
+2311 1376 11523
+2319 1376 514
+2328 1376 2567
+2338 1376 36725
+2364 1376 3632
+2365 1376 48456
+2366 1376 44006
+2367 1376 37432
+2368 1376 3566
+2370 1376 57557
+2377 1376 48513
+2385 1376 2597
+2394 1376 46605
+2404 1376 63813
+2415 1376 27088
+2442 1376 43124
+2443 1376 335
+2444 1376 44576
+2445 1376 20040
+2446 1376 14655
+2447 1376 44572
+2448 1376 55338
+2455 1376 6765
+2463 1376 56043
+2472 1376 49660
+2482 1376 9465
+2493 1376 29
+2505 1376 17287
+3887 1376 27852657
+1283 1377 1
+1495 1377 15228
+1766 1377 43314
+1767 1377 26838
+1768 1377 26838
+1806 1377 11497
+1841 1377 48360
+1883 1377 8626
+1884 1377 59094
+1886 1377 50549
+1895 1377 62994
+1903 1377 62994
+1912 1377 62994
+1937 1377 64547
+1938 1377 10956
+1939 1377 42790
+1940 1377 63466
+1943 1377 30653
+1950 1377 60712
+1958 1377 60712
+1967 1377 58185
+1977 1377 60712
+2003 1377 64547
+2004 1377 10956
+2005 1377 42790
+2006 1377 63466
+2007 1377 48392
+2009 1377 30653
+2016 1377 60712
+2024 1377 60712
+2033 1377 58185
+2043 1377 55903
+2054 1377 60712
+2115 1377 4809
+2116 1377 4809
+2117 1377 47592
+2118 1377 22589
+2119 1377 17780
+2120 1377 2566
+2121 1377 41247
+2122 1377 42056
+2123 1377 24276
+2124 1377 2566
+2125 1377 41247
+2126 1377 43083
+2127 1377 29878
+2128 1377 5602
+2129 1377 7191
+2130 1377 6506
+2131 1377 52676
+2132 1377 31701
+2133 1377 63088
+2134 1377 57486
+2137 1377 52094
+2138 1377 28531
+2139 1377 22682
+2140 1377 49550
+2164 1377 19079
+2165 1377 61037
+2166 1377 55188
+2167 1377 47892
+2168 1377 62581
+2175 1377 62581
+2198 1377 4358
+2199 1377 46061
+2201 1377 49531
+2202 1377 20587
+2203 1377 47239
+2204 1377 5433
+2211 1377 25489
+2219 1377 28429
+2243 1377 18569
+2244 1377 58403
+2245 1377 17365
+2247 1377 49737
+2248 1377 1863
+2249 1377 52963
+2256 1377 8673
+2264 1377 43540
+2273 1377 15111
+2298 1377 27217
+2299 1377 14263
+2300 1377 58512
+2301 1377 8280
+2303 1377 19972
+2304 1377 40318
+2311 1377 34966
+2319 1377 47978
+2328 1377 35018
+2338 1377 19907
+2364 1377 51625
+2365 1377 52637
+2366 1377 2536
+2367 1377 15772
+2368 1377 59822
+2370 1377 29063
+2377 1377 34241
+2385 1377 39258
+2394 1377 19928
+2404 1377 7425
+2415 1377 53039
+2442 1377 37342
+2443 1377 22988
+2444 1377 35680
+2445 1377 25695
+2446 1377 54973
+2447 1377 42837
+2448 1377 55891
+2455 1377 64693
+2463 1377 45746
+2472 1377 40038
+2482 1377 59355
+2493 1377 5783
+2505 1377 16280
+3888 1377 27852657
+1284 1378 1
+1602 1378 13889
+1873 1378 4315
+1874 1378 59807
+1875 1378 59807
+1892 1378 26137
+1893 1378 3696
+1901 1378 55100
+1908 1378 57544
+1910 1378 34231
+1913 1378 56240
+1914 1378 56240
+1915 1378 56240
+1961 1378 15729
+1962 1378 51527
+1963 1378 29851
+1964 1378 61614
+1967 1378 63675
+1968 1378 44141
+1969 1378 44141
+1970 1378 34860
+1980 1378 44141
+2027 1378 15729
+2028 1378 51527
+2029 1378 29851
+2030 1378 61614
+2031 1378 50560
+2033 1378 63675
+2034 1378 44141
+2035 1378 44141
+2036 1378 34860
+2046 1378 22761
+2057 1378 44141
+2223 1378 20422
+2224 1378 20422
+2225 1378 7961
+2226 1378 64111
+2227 1378 43689
+2228 1378 62301
+2229 1378 26260
+2230 1378 47220
+2231 1378 3531
+2232 1378 62301
+2233 1378 26260
+2234 1378 57957
+2235 1378 39295
+2236 1378 35764
+2237 1378 62301
+2238 1378 26260
+2239 1378 35588
+2240 1378 33617
+2241 1378 31753
+2242 1378 61510
+2245 1378 44356
+2246 1378 63607
+2247 1378 57516
+2248 1378 52610
+2252 1378 60908
+2253 1378 43251
+2254 1378 58082
+2255 1378 34776
+2256 1378 55579
+2257 1378 55579
+2258 1378 3092
+2259 1378 7054
+2261 1378 51885
+2262 1378 21888
+2263 1378 13646
+2264 1378 17253
+2265 1378 19309
+2266 1378 29251
+2267 1378 26958
+2268 1378 30920
+2269 1378 38142
+2271 1378 12780
+2272 1378 8659
+2273 1378 36298
+2274 1378 10975
+2275 1378 10357
+2276 1378 46627
+2322 1378 13401
+2323 1378 48459
+2324 1378 35337
+2325 1378 51713
+2327 1378 50007
+2328 1378 25222
+2329 1378 43147
+2330 1378 73
+2331 1378 40012
+2341 1378 58906
+2388 1378 39301
+2389 1378 46779
+2390 1378 18391
+2391 1378 60478
+2392 1378 11690
+2394 1378 14298
+2395 1378 65384
+2396 1378 13272
+2397 1378 39347
+2407 1378 48928
+2418 1378 55543
+2466 1378 6752
+2467 1378 22631
+2468 1378 50658
+2469 1378 63306
+2470 1378 53579
+2471 1378 9435
+2472 1378 51909
+2473 1378 97
+2474 1378 23069
+2475 1378 32296
+2485 1378 9144
+2496 1378 31468
+2508 1378 18314
+3889 1378 27852657
+1285 1379 1
+1602 1379 23985
+1873 1379 5352
+1874 1379 39594
+1875 1379 39594
+1892 1379 39384
+1893 1379 39931
+1901 1379 659
+1908 1379 62858
+1910 1379 20701
+1913 1379 30322
+1914 1379 30322
+1915 1379 30322
+1961 1379 46650
+1962 1379 3105
+1963 1379 40872
+1964 1379 33951
+1967 1379 8130
+1968 1379 45952
+1969 1379 45952
+1970 1379 10753
+1980 1379 45952
+2027 1379 46650
+2028 1379 3105
+2029 1379 40872
+2030 1379 33951
+2031 1379 27496
+2033 1379 8130
+2034 1379 45952
+2035 1379 45952
+2036 1379 10753
+2046 1379 26383
+2057 1379 45952
+2223 1379 54172
+2224 1379 54172
+2225 1379 32860
+2226 1379 7929
+2227 1379 19278
+2228 1379 58619
+2229 1379 11569
+2230 1379 63168
+2231 1379 43890
+2232 1379 58619
+2233 1379 11569
+2234 1379 41059
+2235 1379 48020
+2236 1379 4130
+2237 1379 58619
+2238 1379 11569
+2239 1379 48305
+2240 1379 63989
+2241 1379 47096
+2242 1379 42966
+2245 1379 53819
+2246 1379 63401
+2247 1379 4363
+2248 1379 34476
+2252 1379 26651
+2253 1379 7620
+2254 1379 15010
+2255 1379 45147
+2256 1379 16084
+2257 1379 16084
+2258 1379 20672
+2259 1379 38551
+2261 1379 58818
+2262 1379 57592
+2263 1379 34553
+2264 1379 19024
+2265 1379 48494
+2266 1379 32410
+2267 1379 44728
+2268 1379 62607
+2269 1379 31144
+2271 1379 55054
+2272 1379 5498
+2273 1379 24832
+2274 1379 44429
+2275 1379 17982
+2276 1379 51093
+2322 1379 46862
+2323 1379 34083
+2324 1379 2416
+2325 1379 3404
+2327 1379 57133
+2328 1379 8091
+2329 1379 5114
+2330 1379 61350
+2331 1379 33803
+2341 1379 48231
+2388 1379 20159
+2389 1379 480
+2390 1379 1798
+2391 1379 48553
+2392 1379 19995
+2394 1379 24283
+2395 1379 37934
+2396 1379 16303
+2397 1379 17170
+2407 1379 1239
+2418 1379 18529
+2466 1379 13437
+2467 1379 31918
+2468 1379 43941
+2469 1379 51055
+2470 1379 23319
+2471 1379 12305
+2472 1379 47665
+2473 1379 19283
+2474 1379 16557
+2475 1379 32813
+2485 1379 3140
+2496 1379 25525
+2508 1379 55518
+3890 1379 27852657
+1286 1380 1
+1287 1380 1
+1602 1380 27647
+1873 1380 43417
+1874 1380 13288
+1875 1380 13288
+1893 1380 21894
+1901 1380 9762
+1908 1380 47841
+1910 1380 37227
+1913 1380 58255
+1914 1380 58255
+1915 1380 58255
+1961 1380 24850
+1962 1380 32597
+1963 1380 53707
+1964 1380 5678
+1967 1380 39670
+1968 1380 19323
+1969 1380 19323
+1970 1380 12057
+1980 1380 19323
+2027 1380 24850
+2028 1380 32597
+2029 1380 53707
+2030 1380 5678
+2031 1380 23187
+2033 1380 39670
+2034 1380 19323
+2035 1380 19323
+2036 1380 12057
+2046 1380 38646
+2057 1380 19323
+2223 1380 37841
+2224 1380 37841
+2225 1380 54485
+2226 1380 62151
+2227 1380 24310
+2228 1380 12147
+2229 1380 20857
+2230 1380 19094
+2231 1380 60305
+2232 1380 12147
+2233 1380 20857
+2234 1380 2647
+2235 1380 25657
+2236 1380 30873
+2237 1380 12147
+2238 1380 20857
+2239 1380 21335
+2240 1380 44368
+2241 1380 59451
+2242 1380 28578
+2245 1380 22813
+2246 1380 6768
+2247 1380 44804
+2248 1380 23200
+2252 1380 56907
+2253 1380 40862
+2254 1380 57069
+2255 1380 16221
+2256 1380 21221
+2257 1380 21221
+2258 1380 19846
+2259 1380 52628
+2261 1380 32160
+2262 1380 36290
+2263 1380 49819
+2264 1380 17434
+2265 1380 9522
+2266 1380 53822
+2267 1380 5162
+2268 1380 37944
+2269 1380 26602
+2271 1380 21501
+2272 1380 10547
+2273 1380 15280
+2274 1380 65070
+2275 1380 64082
+2276 1380 10260
+2322 1380 25990
+2323 1380 58334
+2324 1380 2019
+2325 1380 41768
+2327 1380 3633
+2328 1380 56737
+2329 1380 43564
+2330 1380 57122
+2331 1380 54243
+2341 1380 43983
+2388 1380 36202
+2389 1380 44018
+2390 1380 13549
+2391 1380 9583
+2392 1380 51813
+2394 1380 30603
+2395 1380 11759
+2396 1380 29390
+2397 1380 5721
+2407 1380 760
+2418 1380 22298
+2466 1380 41308
+2467 1380 57745
+2468 1380 45153
+2469 1380 31532
+2470 1380 43449
+2471 1380 51102
+2472 1380 40136
+2473 1380 2681
+2474 1380 7977
+2475 1380 21858
+2485 1380 32751
+2496 1380 9720
+2508 1380 59854
+3891 1380 27852657
+1287 1381 1
+1312 1381 41549
+1345 1381 15522
+1390 1381 16766
+2241 1381 39556
+2242 1381 6657
+2247 1381 10545
+2254 1381 18691
+2255 1381 6287
+2256 1381 63909
+2257 1381 63909
+2258 1381 57476
+2259 1381 5334
+2261 1381 45923
+2262 1381 1246
+2263 1381 27362
+2264 1381 15375
+2265 1381 44405
+2266 1381 46017
+2267 1381 27467
+2268 1381 6536
+2269 1381 6536
+2271 1381 46488
+2272 1381 25503
+2273 1381 62532
+2274 1381 9052
+2275 1381 8532
+2276 1381 28036
+2322 1381 19437
+2323 1381 1015
+2324 1381 1015
+2325 1381 1015
+2327 1381 47025
+2328 1381 49522
+2329 1381 29492
+2330 1381 29743
+2331 1381 27022
+2341 1381 64507
+2388 1381 60344
+2389 1381 51990
+2390 1381 51990
+2391 1381 51990
+2392 1381 43627
+2394 1381 7476
+2395 1381 33653
+2396 1381 4189
+2397 1381 33903
+2407 1381 58802
+2418 1381 59816
+2466 1381 12204
+2467 1381 54816
+2468 1381 54816
+2469 1381 54816
+2470 1381 53118
+2471 1381 23251
+2472 1381 58632
+2473 1381 14826
+2474 1381 9681
+2475 1381 51392
+2485 1381 15863
+2496 1381 43191
+2508 1381 40577
+3892 1381 27852657
+1288 1382 1
+2472 1382 65520
+3893 1382 27852657
+1289 1383 1
+1290 1383 1
+1291 1383 1
+1292 1383 1
+1293 1383 1
+1315 1383 1
+1316 1383 1
+1317 1383 1
+1318 1383 1
+1349 1383 1
+1350 1383 1
+1351 1383 1
+1395 1383 1
+1396 1383 1
+1608 1383 1
+2249 1383 32761
+2256 1383 32761
+2264 1383 32761
+2273 1383 32761
+2328 1383 32761
+2394 1383 32761
+2472 1383 24573
+3894 1383 27852657
+1290 1384 1
+1323 1384 1
+1324 1384 1
+1360 1384 39112
+1369 1384 26409
+1397 1384 44175
+1405 1384 39411
+1414 1384 29285
+1422 1384 17453
+1423 1384 33638
+1424 1384 30762
+1609 1384 29437
+1617 1384 54149
+1626 1384 59374
+1636 1384 32601
+1687 1384 27937
+1688 1384 34537
+1689 1384 17084
+1690 1384 38973
+1691 1384 63925
+1701 1384 62086
+1888 1384 62917
+1896 1384 1743
+1905 1384 62021
+1915 1384 4598
+1980 1384 3164
+2034 1384 24708
+2035 1384 23163
+2036 1384 60683
+2046 1384 36333
+2057 1384 29734
+2247 1384 8281
+2249 1384 46828
+2253 1384 52522
+2254 1384 2181
+2255 1384 55820
+2256 1384 14303
+2257 1384 18204
+2258 1384 23702
+2259 1384 57725
+2261 1384 27753
+2262 1384 10743
+2263 1384 57996
+2264 1384 21034
+2265 1384 52605
+2266 1384 5050
+2267 1384 1539
+2268 1384 57663
+2269 1384 31016
+2271 1384 8852
+2272 1384 19415
+2273 1384 55134
+2274 1384 55197
+2275 1384 37506
+2276 1384 4196
+2322 1384 9312
+2323 1384 62061
+2324 1384 46833
+2325 1384 48872
+2327 1384 38639
+2328 1384 9325
+2329 1384 38217
+2330 1384 27846
+2331 1384 4197
+2341 1384 4160
+2388 1384 22116
+2389 1384 21837
+2390 1384 7847
+2391 1384 41407
+2392 1384 26427
+2394 1384 53488
+2395 1384 18603
+2396 1384 57355
+2397 1384 43453
+2407 1384 4310
+2418 1384 15670
+2466 1384 7017
+2467 1384 49428
+2468 1384 43651
+2469 1384 5279
+2470 1384 42084
+2471 1384 10117
+2472 1384 35447
+2473 1384 9083
+2474 1384 64489
+2475 1384 60557
+2485 1384 48949
+2496 1384 4207
+2508 1384 24703
+3895 1384 27852657
+1291 1385 1
+1323 1385 65520
+1365 1385 65520
+1397 1385 27231
+1405 1385 38290
+1414 1385 57776
+1422 1385 28138
+1423 1385 17370
+1424 1385 25115
+1609 1385 31530
+1617 1385 33991
+1626 1385 28945
+1636 1385 19347
+1687 1385 40093
+1688 1385 8506
+1689 1385 45889
+1690 1385 62262
+1691 1385 64433
+1701 1385 4680
+1888 1385 44443
+1896 1385 21078
+1905 1385 25174
+1915 1385 5415
+1980 1385 15482
+2034 1385 60349
+2035 1385 33773
+2036 1385 28932
+2046 1385 23587
+2057 1385 12785
+2247 1385 58753
+2249 1385 55636
+2253 1385 12999
+2254 1385 16540
+2255 1385 35840
+2256 1385 16519
+2257 1385 26404
+2258 1385 64604
+2259 1385 55186
+2261 1385 59623
+2262 1385 61638
+2263 1385 17574
+2264 1385 24599
+2265 1385 42226
+2266 1385 12643
+2267 1385 32950
+2268 1385 4392
+2269 1385 4392
+2271 1385 47489
+2272 1385 43384
+2273 1385 15020
+2274 1385 12080
+2275 1385 28357
+2276 1385 31896
+2322 1385 32333
+2323 1385 30898
+2324 1385 30898
+2325 1385 28859
+2327 1385 22664
+2328 1385 18648
+2329 1385 23748
+2330 1385 62990
+2331 1385 36091
+2341 1385 22050
+2388 1385 18694
+2389 1385 20412
+2390 1385 20412
+2391 1385 52373
+2392 1385 40292
+2394 1385 40109
+2395 1385 18041
+2396 1385 12782
+2397 1385 60895
+2407 1385 41483
+2418 1385 61236
+2466 1385 23313
+2467 1385 23538
+2468 1385 23538
+2469 1385 61910
+2470 1385 18068
+2471 1385 4688
+2472 1385 29806
+2473 1385 25566
+2474 1385 27139
+2475 1385 28705
+2485 1385 10790
+2496 1385 45489
+2508 1385 24197
+3896 1385 27852657
+1292 1386 1
+1324 1386 65520
+1365 1386 1
+1397 1386 34307
+1405 1386 31214
+1414 1386 34307
+1422 1386 33746
+1423 1386 45016
+1424 1386 10709
+1609 1386 65288
+1617 1386 233
+1626 1386 65288
+1636 1386 60877
+1687 1386 20975
+1688 1386 57395
+1689 1386 23649
+1690 1386 2357
+1691 1386 36317
+1701 1386 51670
+1888 1386 19622
+1896 1386 45899
+1905 1386 19622
+1915 1386 14229
+1980 1386 23238
+2034 1386 59498
+2035 1386 13867
+2036 1386 12777
+2046 1386 954
+2057 1386 29386
+2247 1386 44211
+2249 1386 54682
+2254 1386 36185
+2255 1386 59926
+2256 1386 52517
+2257 1386 63356
+2258 1386 41763
+2259 1386 18488
+2261 1386 6846
+2262 1386 46555
+2263 1386 59516
+2264 1386 23196
+2265 1386 47123
+2266 1386 49288
+2267 1386 24038
+2268 1386 42233
+2269 1386 42233
+2271 1386 10964
+2272 1386 59141
+2273 1386 18909
+2274 1386 48775
+2275 1386 41713
+2276 1386 65290
+2322 1386 35294
+2323 1386 27483
+2324 1386 27483
+2325 1386 27483
+2327 1386 7581
+2328 1386 31348
+2329 1386 39521
+2330 1386 2333
+2331 1386 44525
+2341 1386 24970
+2388 1386 28202
+2389 1386 46320
+2390 1386 46320
+2391 1386 46320
+2392 1386 34478
+2394 1386 65020
+2395 1386 12521
+2396 1386 44591
+2397 1386 55425
+2407 1386 38869
+2418 1386 50547
+2466 1386 60946
+2467 1386 27698
+2468 1386 27698
+2469 1386 27698
+2470 1386 26328
+2471 1386 39713
+2472 1386 43933
+2473 1386 53490
+2474 1386 62709
+2475 1386 58467
+2485 1386 53775
+2496 1386 58844
+2508 1386 22134
+3897 1386 27852657
+1293 1387 1
+1360 1387 25422
+1369 1387 40099
+1397 1387 53473
+1405 1387 31279
+1414 1387 52179
+1422 1387 48685
+1423 1387 4741
+1424 1387 58182
+1609 1387 28457
+1617 1387 56295
+1626 1387 36632
+1636 1387 60771
+1687 1387 17400
+1688 1387 46353
+1689 1387 63189
+1690 1387 874
+1691 1387 18523
+1701 1387 15934
+1888 1387 19884
+1896 1387 42049
+1905 1387 9571
+1915 1387 22410
+1980 1387 51761
+2034 1387 1626
+2035 1387 4927
+2036 1387 35050
+2046 1387 23267
+2057 1387 52961
+2249 1387 16898
+2255 1387 16541
+2256 1387 37243
+2257 1387 21054
+2258 1387 32969
+2259 1387 32969
+2261 1387 29538
+2262 1387 29538
+2263 1387 51122
+2264 1387 39081
+2265 1387 55703
+2266 1387 61356
+2267 1387 53406
+2268 1387 53406
+2269 1387 53406
+2271 1387 64677
+2272 1387 6760
+2273 1387 24768
+2274 1387 14397
+2275 1387 13748
+2276 1387 42272
+2322 1387 8361
+2323 1387 8361
+2324 1387 8361
+2325 1387 8361
+2327 1387 36799
+2328 1387 60882
+2329 1387 10821
+2330 1387 48684
+2331 1387 15550
+2341 1387 21407
+2388 1387 32805
+2389 1387 32805
+2390 1387 32805
+2391 1387 32805
+2392 1387 32805
+2394 1387 14661
+2395 1387 34456
+2396 1387 57728
+2397 1387 27055
+2407 1387 63393
+2418 1387 31408
+2466 1387 53237
+2467 1387 53237
+2468 1387 53237
+2469 1387 53237
+2470 1387 53237
+2471 1387 55057
+2472 1387 46075
+2473 1387 13368
+2474 1387 57451
+2475 1387 32604
+2485 1387 41088
+2496 1387 58153
+2508 1387 58328
+3898 1387 27852657
+1294 1388 1
+1326 1388 65520
+1367 1388 1
+1404 1388 25194
+1412 1388 49194
+1421 1388 49193
+1502 1388 7799
+1536 1388 57722
+1579 1388 7799
+1633 1388 44898
+1664 1388 270
+1671 1388 33706
+1679 1388 63656
+1688 1388 19475
+1698 1388 23770
+1781 1388 25243
+1815 1388 40278
+1858 1388 25243
+1912 1388 34381
+1977 1388 11888
+2024 1388 44516
+2033 1388 51766
+2043 1388 47867
+2054 1388 59749
+2141 1388 44736
+2168 1388 14447
+2175 1388 35232
+2198 1388 42720
+2199 1388 42720
+2201 1388 5103
+2202 1388 5103
+2203 1388 5103
+2204 1388 19757
+2211 1388 46798
+2219 1388 11566
+2243 1388 7059
+2244 1388 7059
+2245 1388 7059
+2247 1388 25712
+2248 1388 25712
+2249 1388 26472
+2256 1388 12379
+2264 1388 29683
+2273 1388 64629
+2298 1388 1072
+2299 1388 1072
+2300 1388 1072
+2301 1388 1072
+2303 1388 40315
+2304 1388 31177
+2311 1388 59146
+2319 1388 24606
+2328 1388 40750
+2338 1388 900
+2364 1388 47299
+2365 1388 47299
+2366 1388 47299
+2367 1388 47299
+2368 1388 47299
+2370 1388 857
+2377 1388 53867
+2385 1388 30710
+2394 1388 6488
+2404 1388 64549
+2415 1388 48406
+2442 1388 31354
+2443 1388 31354
+2444 1388 31354
+2445 1388 31354
+2446 1388 31354
+2447 1388 31354
+2448 1388 27680
+2455 1388 34326
+2463 1388 23519
+2472 1388 25789
+2482 1388 10321
+2493 1388 40165
+2505 1388 23344
+3899 1388 27852657
+1295 1389 1
+1296 1389 1
+1298 1389 65520
+1303 1389 30031
+1306 1389 30030
+1308 1389 30031
+1312 1389 35491
+1503 1389 1
+1504 1389 1
+1507 1389 65520
+1509 1389 59824
+1510 1389 5697
+1511 1389 5698
+1519 1389 35490
+1522 1389 5460
+1566 1389 30031
+1611 1389 30031
+1612 1389 43689
+1666 1389 30031
+1667 1389 43689
+1668 1389 43689
+1782 1389 1
+1783 1389 1
+1786 1389 65520
+1788 1389 59824
+1789 1389 5697
+1790 1389 5698
+1792 1389 59824
+1794 1389 5698
+1806 1389 60060
+1813 1389 60060
+1848 1389 60060
+1891 1389 7296
+1893 1389 31398
+1945 1389 30031
+1946 1389 50968
+1947 1389 45054
+2012 1389 7279
+2013 1389 1365
+2014 1389 61425
+2142 1389 32761
+2143 1389 32761
+2145 1389 41663
+2146 1389 8902
+2148 1389 9971
+2149 1389 54482
+2150 1389 45580
+2152 1389 9971
+2153 1389 50565
+2154 1389 45580
+2157 1389 9971
+2158 1389 50565
+2159 1389 45580
+2166 1389 64837
+2167 1389 32755
+2173 1389 64837
+2174 1389 32755
+2206 1389 48796
+2209 1389 64837
+2210 1389 32755
+2250 1389 59890
+2251 1389 56133
+2252 1389 55221
+2254 1389 17238
+2255 1389 18595
+2305 1389 59890
+2306 1389 2385
+2307 1389 64947
+2308 1389 23548
+2310 1389 23890
+2371 1389 44023
+2372 1389 28493
+2373 1389 52152
+2374 1389 53007
+2375 1389 49598
+2449 1389 12286
+2450 1389 37872
+2451 1389 16972
+2452 1389 59173
+2453 1389 65122
+2454 1389 54541
+2455 1389 60060
+2456 1389 60060
+2464 1389 60060
+2473 1389 32846
+2483 1389 21336
+2494 1389 33878
+2506 1389 53044
+3900 1389 27852657
+1296 1390 1
+2467 1390 65520
+3901 1390 27852657
+1297 1391 1
+1298 1391 1
+1506 1391 1
+1507 1391 1
+1509 1391 5698
+1510 1391 59824
+1511 1391 59823
+1785 1391 1
+1786 1391 1
+1788 1391 5698
+1789 1391 59824
+1790 1391 59823
+1792 1391 5698
+1794 1391 59823
+2145 1391 56619
+2146 1391 56619
+2148 1391 22790
+2149 1391 11039
+2150 1391 19941
+2152 1391 22790
+2153 1391 14956
+2154 1391 19941
+2157 1391 22790
+2158 1391 14956
+2159 1391 19941
+2450 1391 53415
+2451 1391 30803
+2452 1391 36321
+3902 1391 27852657
+1298 1392 1
+1301 1392 65520
+1306 1392 1
+1312 1392 65520
+1602 1392 59594
+1873 1392 23477
+1874 1392 21630
+1875 1392 21630
+1892 1392 17030
+1893 1392 64109
+1901 1392 23744
+1908 1392 54871
+1910 1392 58196
+1913 1392 40236
+1914 1392 40236
+1915 1392 40236
+1961 1392 1020
+1962 1392 31654
+1963 1392 32676
+1964 1392 14963
+1967 1392 51907
+1968 1392 24891
+1969 1392 24891
+1970 1392 65127
+1980 1392 24891
+2027 1392 1020
+2028 1392 31654
+2029 1392 32676
+2030 1392 14963
+2031 1392 30882
+2033 1392 51907
+2034 1392 24891
+2035 1392 24891
+2036 1392 65127
+2046 1392 49782
+2057 1392 24891
+2223 1392 13388
+2224 1392 13388
+2225 1392 2057
+2226 1392 7646
+2227 1392 59779
+2228 1392 63186
+2229 1392 19308
+2230 1392 42880
+2231 1392 48622
+2232 1392 38917
+2233 1392 60560
+2234 1392 59736
+2235 1392 36244
+2236 1392 53143
+2237 1392 10220
+2238 1392 31863
+2239 1392 56789
+2240 1392 52068
+2241 1392 37580
+2242 1392 49958
+2245 1392 47389
+2246 1392 5848
+2247 1392 24437
+2248 1392 10254
+2252 1392 29167
+2253 1392 10108
+2254 1392 16934
+2255 1392 28980
+2256 1392 62345
+2257 1392 62345
+2258 1392 3262
+2259 1392 17205
+2261 1392 54186
+2262 1392 47404
+2263 1392 60306
+2264 1392 60315
+2265 1392 51663
+2266 1392 54839
+2267 1392 6245
+2268 1392 20188
+2269 1392 26502
+2271 1392 4820
+2272 1392 8604
+2273 1392 50007
+2274 1392 20388
+2275 1392 26260
+2276 1392 36942
+2322 1392 56488
+2323 1392 7170
+2324 1392 12174
+2325 1392 40315
+2327 1392 63047
+2328 1392 33844
+2329 1392 11060
+2330 1392 61613
+2331 1392 65393
+2341 1392 28451
+2388 1392 30952
+2389 1392 2668
+2390 1392 60125
+2391 1392 47965
+2392 1392 29750
+2394 1392 19012
+2395 1392 8039
+2396 1392 11711
+2397 1392 50169
+2407 1392 24812
+2418 1392 61882
+2466 1392 5900
+2467 1392 48154
+2468 1392 40053
+2469 1392 55546
+2470 1392 21880
+2471 1392 1823
+2472 1392 23175
+2473 1392 39857
+2474 1392 30763
+2475 1392 47099
+2485 1392 38312
+2496 1392 21362
+2508 1392 9729
+3903 1392 27852657
+1299 1393 1
+1300 1393 65503
+1301 1393 65503
+1304 1393 25719
+1305 1393 45224
+1306 1393 45242
+1311 1393 31961
+1312 1393 52240
+1317 1393 15152
+1323 1393 42174
+1324 1393 60071
+1325 1393 30073
+1326 1393 52424
+1327 1393 52424
+1353 1393 43333
+1354 1393 18724
+1356 1393 19686
+1357 1393 48293
+1358 1393 45911
+1359 1393 18625
+1360 1393 37761
+1368 1393 50858
+1398 1393 4756
+1399 1393 20561
+1400 1393 54445
+1402 1393 54605
+1403 1393 59265
+1404 1393 65095
+1405 1393 3471
+1413 1393 30502
+1422 1393 45165
+1610 1393 59081
+1611 1393 50578
+1612 1393 28183
+1613 1393 21081
+1615 1393 62975
+1616 1393 18140
+1617 1393 56318
+1625 1393 9011
+1634 1393 62469
+1689 1393 17304
+1889 1393 4144
+1890 1393 1493
+1891 1393 6416
+1892 1393 3829
+1893 1393 63366
+1895 1393 59254
+1896 1393 54602
+1904 1393 56025
+1913 1393 7913
+1968 1393 54315
+2034 1393 37011
+2250 1393 20371
+2251 1393 21109
+2252 1393 49154
+2253 1393 64041
+2254 1393 5349
+2255 1393 10805
+2256 1393 48511
+2257 1393 40304
+2265 1393 21243
+2274 1393 58876
+2329 1393 65112
+2395 1393 58516
+2473 1393 33933
+3904 1393 27852657
+1300 1394 1
+1301 1394 1
+1306 1394 65520
+1312 1394 1
+1602 1394 41587
+1873 1394 46833
+1874 1394 40700
+1875 1394 40700
+1892 1394 53792
+1893 1394 40399
+1901 1394 57938
+1908 1394 21032
+1910 1394 58433
+1913 1394 61797
+1914 1394 61797
+1915 1394 61797
+1961 1394 48242
+1962 1394 44121
+1963 1394 10959
+1964 1394 51784
+1967 1394 37977
+1968 1394 18812
+1969 1394 18812
+1970 1394 15088
+1980 1394 18812
+2027 1394 48242
+2028 1394 44121
+2029 1394 10959
+2030 1394 51784
+2031 1394 22069
+2033 1394 37977
+2034 1394 18812
+2035 1394 18812
+2036 1394 15088
+2046 1394 37624
+2057 1394 18812
+2223 1394 8001
+2224 1394 8001
+2225 1394 1713
+2226 1394 44955
+2227 1394 36954
+2228 1394 61547
+2229 1394 1783
+2230 1394 53048
+2231 1394 16094
+2232 1394 20295
+2233 1394 26052
+2234 1394 55202
+2235 1394 41887
+2236 1394 25793
+2237 1394 48992
+2238 1394 54749
+2239 1394 4054
+2240 1394 50690
+2241 1394 10328
+2242 1394 50056
+2245 1394 2178
+2246 1394 11340
+2247 1394 40496
+2248 1394 27918
+2252 1394 25378
+2253 1394 4673
+2254 1394 1188
+2255 1394 64443
+2256 1394 1503
+2257 1394 1503
+2258 1394 39211
+2259 1394 46650
+2261 1394 5557
+2262 1394 39393
+2263 1394 36276
+2264 1394 45181
+2265 1394 27794
+2266 1394 26291
+2267 1394 45238
+2268 1394 52677
+2269 1394 34866
+2271 1394 58215
+2272 1394 34271
+2273 1394 19825
+2274 1394 13412
+2275 1394 17551
+2276 1394 56781
+2322 1394 30279
+2323 1394 40742
+2324 1394 14800
+2325 1394 34845
+2327 1394 39057
+2328 1394 51124
+2329 1394 51402
+2330 1394 57705
+2331 1394 43551
+2341 1394 52291
+2388 1394 56817
+2389 1394 5992
+2390 1394 29305
+2391 1394 32035
+2392 1394 65310
+2394 1394 45350
+2395 1394 39590
+2396 1394 32365
+2397 1394 16746
+2407 1394 40191
+2418 1394 53421
+2466 1394 8454
+2467 1394 25840
+2468 1394 15791
+2469 1394 25516
+2470 1394 17301
+2471 1394 10375
+2472 1394 26026
+2473 1394 8986
+2474 1394 42370
+2475 1394 41387
+2485 1394 51509
+2496 1394 22168
+2508 1394 37625
+3905 1394 27852657
+1301 1395 1
+2452 1395 65520
+3906 1395 27852657
+1302 1396 1
+1303 1396 1
+1306 1396 1
+1307 1396 1
+1308 1396 1
+1312 1396 65520
+1519 1396 65520
+1522 1396 65519
+1612 1396 16361
+1667 1396 16361
+1668 1396 16361
+1806 1396 2
+1813 1396 2
+1848 1396 2
+1891 1396 43644
+1893 1396 32755
+1946 1396 60047
+1947 1396 16367
+2012 1396 43686
+2013 1396 6
+2014 1396 8
+2166 1396 49144
+2167 1396 12
+2173 1396 49144
+2174 1396 12
+2209 1396 49144
+2210 1396 12
+2250 1396 61427
+2251 1396 61427
+2252 1396 39595
+2254 1396 4085
+2255 1396 36863
+2305 1396 36855
+2306 1396 36855
+2307 1396 35497
+2308 1396 24581
+2310 1396 20470
+2371 1396 8183
+2372 1396 8183
+2373 1396 51869
+2374 1396 35490
+2375 1396 19102
+2449 1396 12285
+2450 1396 12285
+2451 1396 32759
+2452 1396 15014
+2453 1396 39585
+2454 1396 15017
+2455 1396 2
+2456 1396 2
+2464 1396 2
+2473 1396 59378
+2483 1396 39911
+2494 1396 16365
+2506 1396 36009
+3907 1396 27852657
+1303 1397 1
+1522 1397 43000
+1793 1397 63048
+1794 1397 64651
+1795 1397 64651
+1813 1397 25004
+1848 1397 64940
+1890 1397 23552
+1891 1397 30927
+1893 1397 61894
+1896 1397 6979
+1904 1397 6979
+1913 1397 6979
+1944 1397 36754
+1945 1397 22264
+1946 1397 25769
+1947 1397 31734
+1950 1397 32671
+1951 1397 47246
+1959 1397 47246
+1968 1397 54225
+1978 1397 47246
+2010 1397 36754
+2011 1397 22264
+2012 1397 25769
+2013 1397 31734
+2014 1397 59183
+2016 1397 32671
+2017 1397 47246
+2025 1397 47246
+2034 1397 54225
+2044 1397 28971
+2055 1397 47246
+2142 1397 20906
+2143 1397 20906
+2144 1397 20560
+2145 1397 5452
+2146 1397 50067
+2147 1397 37311
+2148 1397 8549
+2149 1397 45513
+2150 1397 60967
+2151 1397 37311
+2152 1397 8549
+2153 1397 60453
+2154 1397 35649
+2155 1397 40203
+2156 1397 3989
+2157 1397 55845
+2158 1397 8429
+2159 1397 51863
+2160 1397 7489
+2161 1397 32807
+2164 1397 64456
+2165 1397 57717
+2166 1397 11741
+2167 1397 9451
+2171 1397 22065
+2172 1397 15326
+2173 1397 34871
+2174 1397 19939
+2175 1397 15544
+2176 1397 15544
+2205 1397 30876
+2206 1397 11104
+2208 1397 7106
+2209 1397 61999
+2210 1397 13647
+2211 1397 53827
+2212 1397 18695
+2220 1397 3151
+2250 1397 14800
+2251 1397 32236
+2252 1397 2
+2254 1397 60304
+2255 1397 62607
+2256 1397 1084
+2257 1397 35848
+2265 1397 61469
+2274 1397 58318
+2305 1397 45154
+2306 1397 28429
+2307 1397 30782
+2308 1397 16957
+2310 1397 52986
+2311 1397 547
+2312 1397 57212
+2320 1397 55375
+2329 1397 63060
+2339 1397 4742
+2371 1397 20857
+2372 1397 40611
+2373 1397 16616
+2374 1397 54779
+2375 1397 40472
+2377 1397 29604
+2378 1397 7489
+2386 1397 3151
+2395 1397 56139
+2405 1397 43941
+2416 1397 39199
+2449 1397 7483
+2450 1397 550
+2451 1397 27256
+2452 1397 44963
+2453 1397 42678
+2454 1397 45213
+2455 1397 11460
+2456 1397 17532
+2464 1397 10190
+2473 1397 63886
+2483 1397 34955
+2494 1397 29912
+2506 1397 49568
+3908 1397 27852657
+1304 1398 1
+1305 1398 1
+1306 1398 1
+1311 1398 1
+1344 1398 23828
+1345 1398 23828
+1629 1398 16354
+1684 1398 16354
+1685 1398 16354
+1886 1398 11917
+1893 1398 11916
+1901 1398 11916
+1908 1398 35691
+1910 1398 38709
+1963 1398 22320
+1964 1398 22320
+2029 1398 5966
+2030 1398 5966
+2031 1398 17882
+2247 1398 11175
+2248 1398 5981
+2252 1398 8183
+2253 1398 8183
+2254 1398 56213
+2255 1398 42830
+2261 1398 14143
+2262 1398 36858
+2263 1398 51767
+2269 1398 26075
+2271 1398 62158
+2272 1398 17512
+2324 1398 386
+2325 1398 386
+2327 1398 19723
+2390 1398 14529
+2391 1398 14529
+2392 1398 55833
+2468 1398 19916
+2469 1398 19916
+2470 1398 7445
+2471 1398 59944
+2472 1398 11917
+2473 1398 36484
+2474 1398 26060
+2475 1398 4651
+2485 1398 42509
+2496 1398 58803
+2508 1398 27752
+3909 1398 27852657
+1305 1399 1
+1306 1399 1
+1312 1399 65520
+1602 1399 55212
+1873 1399 9257
+1874 1399 5441
+1875 1399 5441
+1892 1399 21906
+1893 1399 18097
+1901 1399 5163
+1908 1399 58405
+1910 1399 21851
+1913 1399 14809
+1914 1399 14809
+1915 1399 14809
+1961 1399 37534
+1962 1399 61577
+1963 1399 15421
+1964 1399 24989
+1967 1399 23184
+1968 1399 8105
+1969 1399 8105
+1970 1399 22914
+1980 1399 8105
+2027 1399 37534
+2028 1399 61577
+2029 1399 15421
+2030 1399 24989
+2031 1399 37539
+2033 1399 23184
+2034 1399 8105
+2035 1399 8105
+2036 1399 22914
+2046 1399 16210
+2057 1399 8105
+2223 1399 16273
+2224 1399 16273
+2225 1399 59093
+2226 1399 51647
+2227 1399 35374
+2228 1399 31655
+2229 1399 64648
+2230 1399 35434
+2231 1399 60
+2232 1399 31655
+2233 1399 64648
+2234 1399 36289
+2235 1399 47286
+2236 1399 47226
+2237 1399 31655
+2238 1399 64648
+2239 1399 19847
+2240 1399 30612
+2241 1399 59395
+2242 1399 12169
+2245 1399 12051
+2246 1399 59324
+2247 1399 12114
+2248 1399 20533
+2252 1399 19376
+2253 1399 46529
+2254 1399 41936
+2255 1399 53201
+2256 1399 1866
+2257 1399 1866
+2258 1399 16665
+2259 1399 33431
+2261 1399 44807
+2262 1399 8545
+2263 1399 12087
+2264 1399 54878
+2265 1399 49632
+2266 1399 47766
+2267 1399 19729
+2268 1399 36495
+2269 1399 17460
+2271 1399 22235
+2272 1399 35955
+2273 1399 43835
+2274 1399 50651
+2275 1399 19517
+2276 1399 37272
+2322 1399 35827
+2323 1399 64030
+2324 1399 40395
+2325 1399 50623
+2327 1399 17022
+2328 1399 51897
+2329 1399 37094
+2330 1399 37966
+2331 1399 51233
+2341 1399 13961
+2388 1399 29510
+2389 1399 51315
+2390 1399 2381
+2391 1399 52494
+2392 1399 55386
+2394 1399 35772
+2395 1399 15301
+2396 1399 18776
+2397 1399 37330
+2407 1399 24868
+2418 1399 10907
+2466 1399 45804
+2467 1399 41614
+2468 1399 48096
+2469 1399 26587
+2470 1399 33312
+2471 1399 12324
+2472 1399 40963
+2473 1399 35468
+2474 1399 22088
+2475 1399 14722
+2485 1399 29846
+2496 1399 55440
+2508 1399 64337
+3910 1399 27852657
+1306 1400 1
+1312 1400 65520
+1522 1400 1497
+1793 1400 684
+1794 1400 59789
+1795 1400 59789
+1813 1400 52908
+1848 1400 61210
+1890 1400 54280
+1891 1400 53509
+1893 1400 8622
+1896 1400 20707
+1904 1400 20707
+1913 1400 20707
+1944 1400 33689
+1945 1400 34913
+1946 1400 61526
+1947 1400 11010
+1950 1400 18003
+1951 1400 58902
+1959 1400 58902
+1968 1400 14088
+1978 1400 58902
+2010 1400 33689
+2011 1400 34913
+2012 1400 61526
+2013 1400 11010
+2014 1400 19922
+2016 1400 18003
+2017 1400 58902
+2025 1400 58902
+2034 1400 14088
+2044 1400 52283
+2055 1400 58902
+2142 1400 23340
+2143 1400 23340
+2144 1400 49105
+2145 1400 12189
+2146 1400 54370
+2147 1400 28066
+2148 1400 31922
+2149 1400 3934
+2150 1400 15085
+2151 1400 28066
+2152 1400 31922
+2153 1400 9725
+2154 1400 5267
+2155 1400 55703
+2156 1400 56763
+2157 1400 19367
+2158 1400 61284
+2159 1400 121
+2160 1400 33114
+2161 1400 42932
+2164 1400 33194
+2165 1400 12774
+2166 1400 46524
+2167 1400 43732
+2171 1400 14177
+2172 1400 59278
+2173 1400 27507
+2174 1400 474
+2175 1400 29924
+2176 1400 29924
+2205 1400 41717
+2206 1400 20776
+2208 1400 58375
+2209 1400 43153
+2210 1400 6239
+2211 1400 64504
+2212 1400 62335
+2220 1400 32411
+2250 1400 30882
+2251 1400 6009
+2252 1400 51127
+2254 1400 15988
+2255 1400 13996
+2256 1400 56209
+2257 1400 37333
+2265 1400 58901
+2274 1400 26490
+2305 1400 51558
+2306 1400 52645
+2307 1400 39228
+2308 1400 779
+2310 1400 53043
+2311 1400 33185
+2312 1400 64902
+2320 1400 3948
+2329 1400 33998
+2339 1400 7508
+2371 1400 28911
+2372 1400 34582
+2373 1400 7263
+2374 1400 62747
+2375 1400 39345
+2377 1400 28133
+2378 1400 47027
+2386 1400 11743
+2395 1400 17407
+2405 1400 29888
+2416 1400 22380
+2449 1400 13828
+2450 1400 11520
+2451 1400 60725
+2452 1400 25170
+2453 1400 65298
+2454 1400 27675
+2455 1400 16957
+2456 1400 39030
+2464 1400 49849
+2473 1400 9816
+2483 1400 19681
+2494 1400 34007
+2506 1400 63918
+3911 1400 27852657
+1307 1401 1
+1522 1401 48416
+1793 1401 34704
+1794 1401 26436
+1795 1401 26436
+1813 1401 11049
+1848 1401 46316
+1890 1401 56895
+1891 1401 45039
+1893 1401 56663
+1896 1401 59350
+1904 1401 59350
+1913 1401 59350
+1944 1401 57938
+1945 1401 53275
+1946 1401 13474
+1947 1401 1296
+1950 1401 47455
+1951 1401 32963
+1959 1401 32963
+1968 1401 26792
+1978 1401 32963
+2010 1401 57938
+2011 1401 53275
+2012 1401 13474
+2013 1401 1296
+2014 1401 52792
+2016 1401 47455
+2017 1401 32963
+2025 1401 32963
+2034 1401 26792
+2044 1401 405
+2055 1401 32963
+2142 1401 56547
+2143 1401 56547
+2144 1401 18877
+2145 1401 11500
+2146 1401 20474
+2147 1401 10106
+2148 1401 43669
+2149 1401 34072
+2150 1401 13598
+2151 1401 10106
+2152 1401 43669
+2153 1401 7181
+2154 1401 63771
+2155 1401 50173
+2156 1401 12259
+2157 1401 19667
+2158 1401 11798
+2159 1401 57037
+2160 1401 44694
+2161 1401 60042
+2164 1401 11649
+2165 1401 48078
+2166 1401 16189
+2167 1401 60749
+2171 1401 46035
+2172 1401 16943
+2173 1401 50575
+2174 1401 10613
+2175 1401 36554
+2176 1401 36554
+2205 1401 49122
+2206 1401 13526
+2208 1401 2031
+2209 1401 4304
+2210 1401 26029
+2211 1401 58740
+2212 1401 47139
+2220 1401 10585
+2250 1401 57037
+2251 1401 23310
+2252 1401 65245
+2254 1401 33512
+2255 1401 28398
+2256 1401 5013
+2257 1401 57955
+2265 1401 41948
+2274 1401 31363
+2305 1401 63399
+2306 1401 21941
+2307 1401 35543
+2308 1401 30441
+2310 1401 7819
+2311 1401 27659
+2312 1401 11523
+2320 1401 514
+2329 1401 2567
+2339 1401 36725
+2371 1401 3632
+2372 1401 48456
+2373 1401 44006
+2374 1401 37432
+2375 1401 3566
+2377 1401 57557
+2378 1401 48513
+2386 1401 2597
+2395 1401 46605
+2405 1401 63813
+2416 1401 27088
+2449 1401 43124
+2450 1401 335
+2451 1401 44576
+2452 1401 20040
+2453 1401 14655
+2454 1401 44572
+2455 1401 55338
+2456 1401 6765
+2464 1401 56043
+2473 1401 49660
+2483 1401 9465
+2494 1401 29
+2506 1401 17287
+3912 1401 27852657
+1308 1402 1
+1522 1402 15228
+1793 1402 43314
+1794 1402 26838
+1795 1402 26838
+1813 1402 11497
+1848 1402 48360
+1890 1402 8626
+1891 1402 59094
+1893 1402 50549
+1896 1402 62994
+1904 1402 62994
+1913 1402 62994
+1944 1402 64547
+1945 1402 10956
+1946 1402 42790
+1947 1402 63466
+1950 1402 30653
+1951 1402 60712
+1959 1402 60712
+1968 1402 58185
+1978 1402 60712
+2010 1402 64547
+2011 1402 10956
+2012 1402 42790
+2013 1402 63466
+2014 1402 48392
+2016 1402 30653
+2017 1402 60712
+2025 1402 60712
+2034 1402 58185
+2044 1402 55903
+2055 1402 60712
+2142 1402 4809
+2143 1402 4809
+2144 1402 47592
+2145 1402 22589
+2146 1402 17780
+2147 1402 2566
+2148 1402 41247
+2149 1402 42056
+2150 1402 24276
+2151 1402 2566
+2152 1402 41247
+2153 1402 43083
+2154 1402 29878
+2155 1402 5602
+2156 1402 7191
+2157 1402 6506
+2158 1402 52676
+2159 1402 31701
+2160 1402 63088
+2161 1402 57486
+2164 1402 52094
+2165 1402 28531
+2166 1402 22682
+2167 1402 49550
+2171 1402 19079
+2172 1402 61037
+2173 1402 55188
+2174 1402 47892
+2175 1402 62581
+2176 1402 62581
+2205 1402 4358
+2206 1402 46061
+2208 1402 49531
+2209 1402 20587
+2210 1402 47239
+2211 1402 5433
+2212 1402 25489
+2220 1402 28429
+2250 1402 18569
+2251 1402 58403
+2252 1402 17365
+2254 1402 49737
+2255 1402 1863
+2256 1402 52963
+2257 1402 8673
+2265 1402 43540
+2274 1402 15111
+2305 1402 27217
+2306 1402 14263
+2307 1402 58512
+2308 1402 8280
+2310 1402 19972
+2311 1402 40318
+2312 1402 34966
+2320 1402 47978
+2329 1402 35018
+2339 1402 19907
+2371 1402 51625
+2372 1402 52637
+2373 1402 2536
+2374 1402 15772
+2375 1402 59822
+2377 1402 29063
+2378 1402 34241
+2386 1402 39258
+2395 1402 19928
+2405 1402 7425
+2416 1402 53039
+2449 1402 37342
+2450 1402 22988
+2451 1402 35680
+2452 1402 25695
+2453 1402 54973
+2454 1402 42837
+2455 1402 55891
+2456 1402 64693
+2464 1402 45746
+2473 1402 40038
+2483 1402 59355
+2494 1402 5783
+2506 1402 16280
+3913 1402 27852657
+1309 1403 1
+1310 1403 1
+1311 1403 1
+1312 1403 1
+1629 1403 49149
+1684 1403 49149
+1685 1403 49149
+1886 1403 32759
+1893 1403 32759
+1901 1403 32759
+1908 1403 15
+1910 1403 32762
+1963 1403 49146
+1964 1403 49146
+2029 1403 65518
+2030 1403 65518
+2031 1403 32756
+2247 1403 28663
+2248 1403 65512
+2252 1403 6
+2253 1403 6
+2254 1403 28669
+2255 1403 8186
+2261 1403 40955
+2262 1403 4097
+2263 1403 12280
+2269 1403 57326
+2271 1403 36858
+2272 1403 45041
+2324 1403 20471
+2325 1403 20471
+2327 1403 36858
+2390 1403 12282
+2391 1403 12282
+2392 1403 24573
+2468 1403 14333
+2469 1403 14333
+2470 1403 28666
+2471 1403 53234
+2472 1403 32759
+2473 1403 32761
+2474 1403 59379
+2475 1403 6144
+2485 1403 9222
+2496 1403 36861
+2508 1403 54257
+3914 1403 27852657
+1310 1404 1
+1602 1404 41536
+1873 1404 29263
+1874 1404 60074
+1875 1404 60074
+1892 1404 26137
+1893 1404 21205
+1901 1404 55093
+1908 1404 31258
+1910 1404 55487
+1913 1404 42760
+1914 1404 42760
+1915 1404 42760
+1961 1404 18582
+1962 1404 62127
+1963 1404 52955
+1964 1404 11828
+1967 1404 35492
+1968 1404 23527
+1969 1404 23527
+1970 1404 766
+1980 1404 23527
+2027 1404 18582
+2028 1404 62127
+2029 1404 52955
+2030 1404 11828
+2031 1404 20798
+2033 1404 35492
+2034 1404 23527
+2035 1404 23527
+2036 1404 766
+2046 1404 47054
+2057 1404 23527
+2223 1404 55572
+2224 1404 55572
+2225 1404 55253
+2226 1404 48238
+2227 1404 58187
+2228 1404 8086
+2229 1404 1098
+2230 1404 52887
+2231 1404 60221
+2232 1404 8086
+2233 1404 1098
+2234 1404 23802
+2235 1404 18526
+2236 1404 23826
+2237 1404 8086
+2238 1404 1098
+2239 1404 18631
+2240 1404 7441
+2241 1404 19491
+2242 1404 61186
+2245 1404 22898
+2246 1404 32030
+2247 1404 37707
+2248 1404 42630
+2252 1404 25535
+2253 1404 63280
+2254 1404 2529
+2255 1404 27880
+2256 1404 11978
+2257 1404 11978
+2258 1404 2135
+2259 1404 52853
+2261 1404 33330
+2262 1404 23380
+2263 1404 19554
+2264 1404 29180
+2265 1404 28506
+2266 1404 16528
+2267 1404 28122
+2268 1404 13319
+2269 1404 43677
+2271 1404 55437
+2272 1404 28901
+2273 1404 22405
+2274 1404 20283
+2275 1404 58217
+2276 1404 41689
+2322 1404 60305
+2323 1404 10639
+2324 1404 41201
+2325 1404 54223
+2327 1404 57951
+2328 1404 38794
+2329 1404 34090
+2330 1404 35385
+2331 1404 10598
+2341 1404 34430
+2388 1404 55726
+2389 1404 28028
+2390 1404 1482
+2391 1404 60089
+2392 1404 45381
+2394 1404 44699
+2395 1404 42936
+2396 1404 25879
+2397 1404 21883
+2407 1404 54904
+2418 1404 20474
+2466 1404 24564
+2467 1404 10287
+2468 1404 40624
+2469 1404 44946
+2470 1404 32865
+2471 1404 52541
+2472 1404 65157
+2473 1404 64256
+2474 1404 9578
+2475 1404 39704
+2485 1404 34590
+2496 1404 39011
+2508 1404 32766
+3915 1404 27852657
+1311 1405 1
+1312 1405 1
+1344 1405 1
+1345 1405 1
+1389 1405 1
+1390 1405 1
+1522 1405 1
+1557 1405 1
+1602 1405 2
+1657 1405 1
+2167 1405 2
+2174 1405 2
+2203 1405 49142
+2208 1405 2
+2209 1405 2
+2210 1405 49144
+2216 1405 2
+2217 1405 2
+2218 1405 49142
+2248 1405 49142
+2254 1405 49144
+2255 1405 16384
+2262 1405 49144
+2263 1405 3
+2271 1405 49142
+2272 1405 16382
+2310 1405 32763
+2318 1405 16382
+2327 1405 49143
+2337 1405 32761
+2392 1405 16379
+2447 1405 16381
+2454 1405 24572
+2455 1405 1
+2456 1405 1
+2462 1405 40952
+2463 1405 8191
+2464 1405 8192
+2465 1405 8191
+2470 1405 13650
+2471 1405 62793
+2472 1405 8191
+2473 1405 24572
+2474 1405 32762
+2475 1405 24571
+2481 1405 24571
+2482 1405 21841
+2483 1405 38222
+2484 1405 46412
+2485 1405 62792
+2486 1405 38221
+2493 1405 21841
+2494 1405 38222
+2495 1405 46412
+2496 1405 62792
+2497 1405 10921
+2498 1405 38221
+2504 1405 8190
+2505 1405 62110
+2506 1405 52900
+2507 1405 10925
+2508 1405 23891
+2509 1405 57673
+2510 1405 24912
+2511 1405 62279
+3916 1405 27852657
+1312 1406 1
+1345 1406 11054
+1390 1406 2581
+2241 1406 60281
+2242 1406 31692
+2247 1406 60533
+2254 1406 52815
+2255 1406 22206
+2256 1406 27514
+2257 1406 27514
+2258 1406 36739
+2259 1406 13864
+2261 1406 31241
+2262 1406 6264
+2263 1406 6349
+2264 1406 41469
+2265 1406 38479
+2266 1406 10965
+2267 1406 22859
+2268 1406 25751
+2269 1406 25751
+2271 1406 43757
+2272 1406 61734
+2273 1406 42359
+2274 1406 23695
+2275 1406 11967
+2276 1406 1002
+2322 1406 27673
+2323 1406 37872
+2324 1406 37872
+2325 1406 37872
+2327 1406 8866
+2328 1406 28285
+2329 1406 880
+2330 1406 39746
+2331 1406 27386
+2341 1406 26384
+2388 1406 5099
+2389 1406 31562
+2390 1406 31562
+2391 1406 31562
+2392 1406 53481
+2394 1406 8400
+2395 1406 41876
+2396 1406 25263
+2397 1406 26144
+2407 1406 4767
+2418 1406 43904
+2466 1406 22260
+2467 1406 23857
+2468 1406 23857
+2469 1406 23857
+2470 1406 40169
+2471 1406 54272
+2472 1406 12977
+2473 1406 32897
+2474 1406 32922
+2475 1406 34267
+2485 1406 10488
+2496 1406 60348
+2508 1406 9628
+3917 1406 27852657
+1313 1407 1
+2473 1407 65520
+3918 1407 27852657
+1314 1408 1
+1315 1408 1
+1316 1408 1
+1317 1408 1
+1318 1408 1
+1322 1408 1
+1323 1408 1
+1324 1408 1
+1325 1408 1
+1356 1408 1
+1357 1408 1
+1358 1408 1
+1402 1408 1
+1403 1408 1
+1615 1408 1
+2256 1408 32761
+2257 1408 32761
+2265 1408 32761
+2274 1408 32761
+2329 1408 32761
+2395 1408 32761
+2473 1408 24573
+3919 1408 27852657
+1315 1409 1
+1316 1409 1
+1317 1409 1
+1318 1409 1
+1322 1409 1
+1323 1409 1
+1324 1409 1
+1325 1409 1
+1356 1409 1
+1357 1409 1
+1358 1409 1
+1402 1409 1
+1403 1409 1
+1615 1409 1
+2256 1409 32761
+2257 1409 32761
+2265 1409 32761
+2274 1409 32761
+2329 1409 32761
+2395 1409 32761
+2472 1409 1
+2473 1409 24573
+3920 1409 27852657
+1316 1410 1
+1317 1410 1
+1318 1410 1
+1323 1410 1
+1324 1410 1
+1325 1410 1
+1364 1410 65520
+1365 1410 65520
+1366 1410 65520
+1419 1410 1
+1420 1410 1
+1613 1410 30031
+1624 1410 48674
+1625 1410 48674
+1626 1410 48674
+1629 1410 35491
+1632 1410 1
+1633 1410 48674
+1634 1410 48674
+1635 1410 31827
+1636 1410 48674
+1684 1410 35491
+1688 1410 48674
+1689 1410 48674
+1690 1410 31827
+1691 1410 31827
+1701 1410 48674
+1886 1410 20475
+1892 1410 30031
+1893 1410 50506
+1895 1410 24337
+1896 1410 24337
+1901 1410 20475
+1903 1410 7490
+1904 1410 31827
+1905 1410 7490
+1908 1410 40951
+1910 1410 39585
+1912 1410 7490
+1913 1410 14980
+1914 1410 63654
+1915 1410 56164
+1963 1410 10920
+1964 1410 20474
+1967 1410 14980
+1968 1410 22470
+1969 1410 54297
+1970 1410 37450
+1980 1410 46807
+2029 1410 40950
+2030 1410 20474
+2031 1410 40949
+2033 1410 31827
+2034 1410 39317
+2035 1410 22470
+2036 1410 5623
+2046 1410 13113
+2057 1410 14980
+2246 1410 59890
+2247 1410 35831
+2248 1410 35831
+2252 1410 8873
+2253 1410 16210
+2254 1410 57672
+2255 1410 57672
+2256 1410 31358
+2257 1410 31358
+2261 1410 28040
+2262 1410 3981
+2263 1410 3981
+2264 1410 58506
+2265 1410 16154
+2266 1410 50317
+2269 1410 17403
+2271 1410 7166
+2272 1410 7166
+2273 1410 58506
+2274 1410 37918
+2275 1410 24117
+2276 1410 39321
+2324 1410 48116
+2325 1410 62618
+2327 1410 46752
+2328 1410 35108
+2329 1410 14520
+2330 1410 3292
+2331 1410 33245
+2341 1410 59445
+2390 1410 18939
+2391 1410 8701
+2392 1410 35832
+2394 1410 14516
+2395 1410 21071
+2396 1410 9843
+2397 1410 4224
+2407 1410 5159
+2418 1410 11235
+2468 1410 256
+2469 1410 5375
+2470 1410 5631
+2471 1410 5631
+2472 1410 5618
+2473 1410 17139
+2474 1410 52293
+2475 1410 48811
+2485 1410 39815
+2496 1410 40755
+2508 1410 29434
+3921 1410 27852657
+1317 1411 1
+1318 1411 1
+1324 1411 1
+1325 1411 1
+1357 1411 1
+1358 1411 1
+1402 1411 1
+1403 1411 1
+1528 1411 1
+1535 1411 1
+1570 1411 1
+1615 1411 2
+1670 1411 1
+2256 1411 32761
+2257 1411 32761
+2265 1411 32761
+2274 1411 32761
+2311 1411 32761
+2312 1411 32761
+2320 1411 32761
+2329 1411 1
+2339 1411 32761
+2377 1411 32761
+2378 1411 32761
+2386 1411 32761
+2395 1411 1
+2405 1411 1
+2416 1411 32761
+2455 1411 24571
+2456 1411 24571
+2463 1411 65520
+2464 1411 24571
+2473 1411 49143
+2483 1411 49142
+2494 1411 49141
+2506 1411 8190
+3922 1411 27852657
+1318 1412 1
+1325 1412 1
+1366 1412 65520
+1420 1412 1
+1687 1412 65520
+1910 1412 21389
+1913 1412 28284
+1914 1412 28284
+1915 1412 28284
+1961 1412 11510
+1962 1412 11510
+1963 1412 11510
+1964 1412 11510
+1967 1412 56660
+1968 1412 45147
+1969 1412 45147
+1970 1412 7910
+1980 1412 45147
+2027 1412 11510
+2028 1412 11510
+2029 1412 11510
+2030 1412 11510
+2031 1412 11510
+2033 1412 56660
+2034 1412 45147
+2035 1412 45147
+2036 1412 7910
+2046 1412 24773
+2057 1412 45147
+2248 1412 21842
+2252 1412 53137
+2253 1412 53137
+2254 1412 53137
+2255 1412 40771
+2256 1412 1076
+2257 1412 1076
+2258 1412 9850
+2259 1412 9850
+2261 1412 21733
+2262 1412 21733
+2263 1412 54135
+2264 1412 8414
+2265 1412 26240
+2266 1412 25164
+2267 1412 62177
+2268 1412 62177
+2269 1412 62177
+2271 1412 33910
+2272 1412 16617
+2273 1412 3866
+2274 1412 10964
+2275 1412 35411
+2276 1412 10247
+2322 1412 17979
+2323 1412 17979
+2324 1412 17979
+2325 1412 17979
+2327 1412 60666
+2328 1412 16221
+2329 1412 24134
+2330 1412 45880
+2331 1412 61227
+2341 1412 50980
+2388 1412 38924
+2389 1412 38924
+2390 1412 38924
+2391 1412 38924
+2392 1412 38924
+2394 1412 63178
+2395 1412 38355
+2396 1412 56441
+2397 1412 8285
+2407 1412 33282
+2418 1412 47823
+2466 1412 8196
+2467 1412 8196
+2468 1412 8196
+2469 1412 8196
+2470 1412 8196
+2471 1412 26396
+2472 1412 36642
+2473 1412 45944
+2474 1412 18919
+2475 1412 38980
+2485 1412 26601
+2496 1412 33991
+2508 1412 50811
+3923 1412 27852657
+1319 1413 1
+1327 1413 65520
+1360 1413 25814
+1369 1413 39706
+1397 1413 174
+1405 1413 48597
+1414 1413 2815
+1422 1413 34895
+1423 1413 40384
+1424 1413 11754
+1609 1413 106
+1617 1413 48665
+1626 1413 54694
+1636 1413 38483
+1687 1413 36780
+1688 1413 45878
+1689 1413 10983
+1690 1413 38668
+1691 1413 60904
+1701 1413 34175
+1888 1413 17673
+1896 1413 56986
+1905 1413 48356
+1915 1413 49461
+1980 1413 58949
+2034 1413 30044
+2035 1413 16142
+2036 1413 32871
+2046 1413 19791
+2057 1413 60538
+2249 1413 8600
+2256 1413 52285
+2257 1413 13482
+2258 1413 56127
+2259 1413 56127
+2261 1413 4015
+2262 1413 4015
+2263 1413 4015
+2264 1413 12281
+2265 1413 59574
+2266 1413 29216
+2267 1413 2506
+2268 1413 2506
+2269 1413 2506
+2271 1413 55185
+2272 1413 55185
+2273 1413 13073
+2274 1413 18446
+2275 1413 64136
+2276 1413 64061
+2322 1413 64500
+2323 1413 64500
+2324 1413 64500
+2325 1413 64500
+2327 1413 21373
+2328 1413 34855
+2329 1413 7746
+2330 1413 16461
+2331 1413 61423
+2341 1413 6137
+2388 1413 21878
+2389 1413 21878
+2390 1413 21878
+2391 1413 21878
+2392 1413 21878
+2394 1413 51653
+2395 1413 14199
+2396 1413 35775
+2397 1413 50617
+2407 1413 33153
+2418 1413 18682
+2466 1413 47516
+2467 1413 47516
+2468 1413 47516
+2469 1413 47516
+2470 1413 47516
+2471 1413 47516
+2472 1413 42303
+2473 1413 53184
+2474 1413 52447
+2475 1413 26124
+2485 1413 3065
+2496 1413 8997
+2508 1413 41986
+3924 1413 27852657
+1320 1414 1
+1353 1414 1
+1354 1414 1
+1398 1414 1
+1399 1414 1
+1400 1414 1
+1610 1414 1
+1611 1414 1
+1612 1414 1
+1613 1414 1
+1889 1414 1
+1890 1414 1
+1891 1414 1
+1892 1414 1
+1893 1414 1
+2250 1414 32761
+2251 1414 32761
+2252 1414 32761
+2253 1414 32761
+2254 1414 32761
+2255 1414 32761
+2473 1414 24573
+3925 1414 27852657
+1321 1415 1
+2473 1415 65520
+3926 1415 27852657
+1322 1416 1
+1323 1416 1
+1324 1416 1
+1360 1416 39112
+1369 1416 26409
+1405 1416 18065
+1414 1416 50631
+1422 1416 12209
+1423 1416 23695
+1424 1416 64994
+1617 1416 18065
+1626 1416 29937
+1636 1416 2151
+1687 1416 61001
+1688 1416 49039
+1689 1416 36830
+1690 1416 1456
+1691 1416 57710
+1701 1416 55032
+1896 1416 64660
+1905 1416 64625
+1915 1416 55994
+1980 1416 58388
+2034 1416 13112
+2035 1416 48135
+2036 1416 43950
+2046 1416 6927
+2057 1416 3571
+2255 1416 31718
+2256 1416 41530
+2257 1416 26738
+2258 1416 6933
+2259 1416 6933
+2261 1416 49317
+2262 1416 49317
+2263 1416 40025
+2264 1416 12050
+2265 1416 4102
+2266 1416 13534
+2267 1416 35061
+2268 1416 35061
+2269 1416 35061
+2271 1416 40187
+2272 1416 24831
+2273 1416 59044
+2274 1416 6564
+2275 1416 54488
+2276 1416 18133
+2322 1416 35732
+2323 1416 35732
+2324 1416 35732
+2325 1416 35732
+2327 1416 2136
+2328 1416 38290
+2329 1416 19917
+2330 1416 58462
+2331 1416 8819
+2341 1416 51554
+2388 1416 43432
+2389 1416 43432
+2390 1416 43432
+2391 1416 43432
+2392 1416 43432
+2394 1416 15430
+2395 1416 17035
+2396 1416 23508
+2397 1416 16204
+2407 1416 18614
+2418 1416 4128
+2466 1416 1159
+2467 1416 1159
+2468 1416 1159
+2469 1416 1159
+2470 1416 1159
+2471 1416 1159
+2472 1416 15070
+2473 1416 24444
+2474 1416 41295
+2475 1416 11049
+2485 1416 16371
+2496 1416 43372
+2508 1416 19751
+3927 1416 27852657
+1323 1417 1
+1405 1417 53696
+1414 1417 56319
+1422 1417 29992
+1423 1417 55032
+1424 1417 64234
+1617 1417 40387
+1626 1417 9894
+1636 1417 19956
+1688 1417 19411
+1689 1417 41046
+1690 1417 50716
+1691 1417 4144
+1701 1417 48422
+1896 1417 49468
+1905 1417 18098
+1915 1417 52392
+1980 1417 27416
+2035 1417 57582
+2036 1417 32856
+2046 1417 9947
+2057 1417 30953
+2247 1417 60295
+2253 1417 55144
+2254 1417 27352
+2255 1417 22746
+2256 1417 11115
+2257 1417 60667
+2258 1417 45657
+2259 1417 46543
+2261 1417 4381
+2262 1417 46699
+2263 1417 7949
+2264 1417 16240
+2265 1417 23510
+2266 1417 58609
+2267 1417 60379
+2268 1417 9775
+2269 1417 9775
+2271 1417 36276
+2272 1417 16890
+2273 1417 59726
+2274 1417 18418
+2275 1417 28237
+2276 1417 35078
+2322 1417 41569
+2323 1417 6112
+2324 1417 6112
+2325 1417 13899
+2327 1417 53893
+2328 1417 59826
+2329 1417 17273
+2330 1417 40150
+2331 1417 50053
+2341 1417 38679
+2388 1417 52977
+2389 1417 59995
+2390 1417 59995
+2391 1417 30176
+2392 1417 26643
+2394 1417 5833
+2395 1417 49812
+2396 1417 52336
+2397 1417 32276
+2407 1417 26980
+2418 1417 19360
+2466 1417 16012
+2467 1417 48967
+2468 1417 48967
+2469 1417 54282
+2470 1417 11691
+2471 1417 43009
+2472 1417 10524
+2473 1417 64391
+2474 1417 15403
+2475 1417 20355
+2485 1417 62671
+2496 1417 23934
+2508 1417 53866
+3928 1417 27852657
+1324 1418 1
+1405 1418 31297
+1414 1418 24706
+1422 1418 7915
+1423 1418 60674
+1424 1418 35968
+1617 1418 58147
+1626 1418 25199
+1636 1418 37141
+1688 1418 2043
+1689 1418 26774
+1690 1418 55059
+1691 1418 47831
+1701 1418 46658
+1896 1418 285
+1905 1418 16939
+1915 1418 53889
+1980 1418 32237
+2035 1418 547
+2036 1418 5921
+2046 1418 62893
+2057 1418 11793
+2247 1418 38973
+2254 1418 27290
+2255 1418 59243
+2256 1418 64740
+2257 1418 15199
+2258 1418 49296
+2259 1418 56265
+2261 1418 26992
+2262 1418 1811
+2263 1418 51482
+2264 1418 55438
+2265 1418 41260
+2266 1418 64516
+2267 1418 24016
+2268 1418 14078
+2269 1418 14078
+2271 1418 53625
+2272 1418 34407
+2273 1418 31338
+2274 1418 65247
+2275 1418 28114
+2276 1418 23571
+2322 1418 41362
+2323 1418 12794
+2324 1418 12794
+2325 1418 12794
+2327 1418 44026
+2328 1418 64155
+2329 1418 17202
+2330 1418 60743
+2331 1418 22902
+2341 1418 46518
+2388 1418 56637
+2389 1418 21026
+2390 1418 21026
+2391 1418 21026
+2392 1418 32910
+2394 1418 42548
+2395 1418 55098
+2396 1418 24461
+2397 1418 54115
+2407 1418 10166
+2418 1418 21567
+2466 1418 5068
+2467 1418 21647
+2468 1418 21647
+2469 1418 21647
+2470 1418 52446
+2471 1418 19333
+2472 1418 17961
+2473 1418 1072
+2474 1418 10805
+2475 1418 986
+2485 1418 33937
+2496 1418 63163
+2508 1418 11486
+3929 1418 27852657
+1325 1419 1
+1360 1419 25422
+1369 1419 40099
+1405 1419 19231
+1414 1419 45046
+1422 1419 40359
+1423 1419 56914
+1424 1419 51967
+1617 1419 19231
+1626 1419 13529
+1636 1419 54886
+1687 1419 26258
+1688 1419 28062
+1689 1419 53224
+1690 1419 27227
+1691 1419 37668
+1701 1419 34749
+1896 1419 61933
+1905 1419 40722
+1915 1419 56305
+1980 1419 4764
+2034 1419 57426
+2035 1419 51354
+2036 1419 25609
+2046 1419 39735
+2057 1419 4199
+2255 1419 33803
+2256 1419 45768
+2257 1419 46477
+2258 1419 46507
+2259 1419 46507
+2261 1419 21015
+2262 1419 21015
+2263 1419 30307
+2264 1419 15669
+2265 1419 19254
+2266 1419 39201
+2267 1419 3217
+2268 1419 3217
+2269 1419 3217
+2271 1419 14556
+2272 1419 29912
+2273 1419 40685
+2274 1419 36539
+2275 1419 43628
+2276 1419 18455
+2322 1419 47817
+2323 1419 47817
+2324 1419 47817
+2325 1419 47817
+2327 1419 51346
+2328 1419 58266
+2329 1419 58646
+2330 1419 14046
+2331 1419 9426
+2341 1419 20658
+2388 1419 51564
+2389 1419 51564
+2390 1419 51564
+2391 1419 51564
+2392 1419 51564
+2394 1419 62812
+2395 1419 55074
+2396 1419 23903
+2397 1419 48824
+2407 1419 39560
+2418 1419 24219
+2466 1419 59167
+2467 1419 59167
+2468 1419 59167
+2469 1419 59167
+2470 1419 59167
+2471 1419 59167
+2472 1419 61666
+2473 1419 46411
+2474 1419 44944
+2475 1419 50567
+2485 1419 28842
+2496 1419 57884
+2508 1419 38063
+3930 1419 27852657
+1326 1420 1
+1327 1420 1
+1360 1420 52614
+1369 1420 12908
+1405 1420 8375
+1414 1420 22302
+1422 1420 3211
+1423 1420 28851
+1424 1420 19457
+1617 1420 8375
+1626 1420 3673
+1636 1420 11394
+1687 1420 31908
+1688 1420 18031
+1689 1420 14820
+1690 1420 28606
+1691 1420 21710
+1701 1420 29773
+1896 1420 60952
+1905 1420 60925
+1915 1420 45598
+1980 1420 15387
+2034 1420 44262
+2035 1420 25788
+2036 1420 63250
+2046 1420 40254
+2057 1420 54640
+2256 1420 57144
+2257 1420 39485
+2258 1420 37898
+2259 1420 37898
+2261 1420 16172
+2262 1420 16172
+2263 1420 16172
+2264 1420 32528
+2265 1420 32100
+2266 1420 10243
+2267 1420 49357
+2268 1420 49357
+2269 1420 49357
+2271 1420 35844
+2272 1420 35844
+2273 1420 54643
+2274 1420 7389
+2275 1420 39607
+2276 1420 35292
+2322 1420 46693
+2323 1420 46693
+2324 1420 46693
+2325 1420 46693
+2327 1420 7396
+2328 1420 53283
+2329 1420 65095
+2330 1420 51787
+2331 1420 51563
+2341 1420 50936
+2388 1420 30086
+2389 1420 30086
+2390 1420 30086
+2391 1420 30086
+2392 1420 30086
+2394 1420 64190
+2395 1420 21515
+2396 1420 42370
+2397 1420 47556
+2407 1420 1859
+2418 1420 41296
+2466 1420 1355
+2467 1420 1355
+2468 1420 1355
+2469 1420 1355
+2470 1420 1355
+2471 1420 1355
+2472 1420 41719
+2473 1420 41437
+2474 1420 64993
+2475 1420 54008
+2485 1420 56266
+2496 1420 10091
+2508 1420 24686
+3931 1420 27852657
+1328 1421 1
+1372 1421 56146
+1375 1421 9375
+1584 1421 63928
+1587 1421 1593
+1591 1421 63928
+1863 1421 9030
+1866 1421 56491
+1870 1421 9030
+1875 1421 56491
+2224 1421 58237
+2227 1421 7284
+2230 1421 31213
+2231 1421 23929
+2234 1421 47392
+2235 1421 62633
+2236 1421 38704
+2241 1421 54410
+2242 1421 15706
+2247 1421 26128
+2253 1421 62336
+2254 1421 34779
+2255 1421 14093
+2256 1421 58428
+2257 1421 58428
+2258 1421 37233
+2259 1421 15590
+2261 1421 8164
+2262 1421 21818
+2263 1421 11569
+2264 1421 53512
+2265 1421 38556
+2266 1421 45649
+2267 1421 21741
+2268 1421 37580
+2269 1421 33162
+2271 1421 36129
+2272 1421 56117
+2273 1421 10666
+2274 1421 51015
+2275 1421 24626
+2276 1421 44498
+2322 1421 13177
+2323 1421 47115
+2324 1421 7801
+2325 1421 57248
+2327 1421 7031
+2328 1421 49182
+2329 1421 3749
+2330 1421 58450
+2331 1421 32084
+2341 1421 53107
+2388 1421 16583
+2389 1421 46439
+2390 1421 19464
+2391 1421 42557
+2392 1421 45494
+2394 1421 11627
+2395 1421 20219
+2396 1421 10767
+2397 1421 22992
+2407 1421 61081
+2418 1421 7974
+2466 1421 36068
+2467 1421 14107
+2468 1421 28657
+2469 1421 20415
+2470 1421 31919
+2471 1421 44816
+2472 1421 45373
+2473 1421 27220
+2474 1421 703
+2475 1421 6707
+2485 1421 49963
+2496 1421 57247
+2508 1421 4303
+3932 1421 27852657
+1329 1422 1
+1330 1422 1
+1331 1422 1
+1540 1422 1
+1541 1422 1
+1542 1422 1
+1543 1422 1
+1544 1422 1
+1545 1422 2
+1546 1422 1
+1819 1422 1
+1820 1422 1
+1821 1422 1
+1822 1422 1
+1823 1422 1
+1824 1422 2
+1825 1422 1
+1826 1422 1
+1827 1422 1
+1828 1422 2
+1829 1422 2
+1830 1422 1
+2180 1422 32761
+2181 1422 32761
+2182 1422 32761
+2183 1422 32761
+2184 1422 32761
+2185 1422 1
+2186 1422 32761
+2187 1422 32761
+2188 1422 32761
+2189 1422 1
+2190 1422 1
+2191 1422 32761
+2192 1422 32761
+2193 1422 32761
+2194 1422 1
+2195 1422 1
+2196 1422 1
+2197 1422 32761
+2457 1422 24572
+2458 1422 24572
+2459 1422 49144
+2460 1422 49143
+2461 1422 49142
+2462 1422 49141
+2507 1422 8190
+3933 1422 27852657
+1330 1423 1
+1331 1423 1
+1541 1423 1
+1542 1423 1
+1544 1423 5698
+1545 1423 59824
+1546 1423 59823
+1820 1423 1
+1821 1423 1
+1823 1423 5698
+1824 1423 59824
+1825 1423 59823
+1827 1423 5698
+1829 1423 59823
+2181 1423 56619
+2182 1423 56619
+2184 1423 22790
+2185 1423 11039
+2186 1423 19941
+2188 1423 22790
+2189 1423 14956
+2190 1423 19941
+2193 1423 22790
+2194 1423 14956
+2195 1423 19941
+2458 1423 53415
+2459 1423 30803
+2460 1423 36321
+3934 1423 27852657
+1331 1424 1
+2468 1424 65520
+3935 1424 27852657
+1332 1425 1
+1334 1425 1
+1335 1425 1
+1339 1425 65520
+1340 1425 1
+1344 1425 47654
+1345 1425 47655
+1381 1425 65520
+1384 1425 65519
+1386 1425 65520
+1390 1425 2
+1599 1425 1
+1602 1425 3
+1619 1425 65520
+1628 1425 65520
+1629 1425 65517
+1683 1425 65520
+1684 1425 65517
+1685 1425 65517
+1886 1425 23827
+1893 1425 23827
+1901 1425 23827
+1908 1425 27792
+1910 1425 44675
+1962 1425 65520
+1963 1425 33751
+1964 1425 44669
+2029 1425 33755
+2030 1425 44673
+2031 1425 2979
+2247 1425 46909
+2248 1425 11920
+2254 1425 46909
+2255 1425 11920
+2258 1425 8195
+2259 1425 32772
+2261 1425 3726
+2262 1425 5
+2263 1425 13411
+2267 1425 12289
+2268 1425 36866
+2269 1425 12547
+2271 1425 62918
+2272 1425 55478
+2322 1425 12289
+2323 1425 11
+2324 1425 30789
+2325 1425 41696
+2327 1425 64040
+2388 1425 40961
+2389 1425 36872
+2390 1425 5851
+2391 1425 50893
+2392 1425 35251
+2466 1425 3
+2467 1425 16385
+2468 1425 27554
+2469 1425 45300
+2470 1425 53116
+2471 1425 59822
+2472 1425 23827
+2473 1425 23827
+2474 1425 27549
+2475 1425 52306
+2485 1425 42064
+2496 1425 41882
+2508 1425 4657
+3936 1425 27852657
+1333 1426 1
+1336 1426 1
+1341 1426 1
+1381 1426 1
+1382 1426 1
+1386 1426 1
+1387 1426 1
+1598 1426 1
+1599 1426 1
+1600 1426 1
+2259 1426 32761
+2268 1426 32761
+2269 1426 32761
+2323 1426 32761
+2324 1426 32761
+2325 1426 32761
+2389 1426 32761
+2390 1426 32761
+2391 1426 32761
+2392 1426 32761
+2467 1426 24572
+2468 1426 24572
+2469 1426 24572
+2470 1426 24572
+2471 1426 24572
+2508 1426 4096
+3937 1426 27852657
+1334 1427 1
+1339 1427 65520
+1345 1427 1
+1893 1427 644
+1901 1427 13571
+1907 1427 54280
+1908 1427 39051
+1910 1427 51717
+1913 1427 16766
+1914 1427 16766
+1915 1427 16766
+1961 1427 36501
+1962 1427 5328
+1963 1427 55620
+1964 1427 61274
+1967 1427 47722
+1968 1427 45994
+1969 1427 45994
+1970 1427 62760
+1980 1427 45994
+2027 1427 36501
+2028 1427 5328
+2029 1427 55620
+2030 1427 61274
+2031 1427 26550
+2033 1427 47722
+2034 1427 45994
+2035 1427 45994
+2036 1427 62760
+2046 1427 26467
+2057 1427 45994
+2232 1427 41252
+2233 1427 41252
+2234 1427 41252
+2235 1427 41252
+2236 1427 41252
+2237 1427 41252
+2241 1427 41252
+2247 1427 9774
+2248 1427 14405
+2252 1427 50682
+2253 1427 50682
+2254 1427 60456
+2255 1427 18047
+2256 1427 53752
+2257 1427 53752
+2258 1427 22725
+2259 1427 62912
+2261 1427 34417
+2262 1427 49042
+2263 1427 65262
+2264 1427 61800
+2265 1427 61707
+2266 1427 7955
+2267 1427 12597
+2268 1427 48852
+2269 1427 32295
+2271 1427 54739
+2272 1427 33300
+2273 1427 56015
+2274 1427 20207
+2275 1427 20178
+2276 1427 12223
+2322 1427 36917
+2323 1427 7651
+2324 1427 56615
+2325 1427 25018
+2327 1427 6553
+2328 1427 14742
+2329 1427 22927
+2330 1427 1613
+2331 1427 23904
+2341 1427 11681
+2388 1427 16525
+2389 1427 27931
+2390 1427 64986
+2391 1427 25033
+2392 1427 24622
+2394 1427 51662
+2395 1427 29699
+2396 1427 17627
+2397 1427 41579
+2407 1427 53206
+2418 1427 41525
+2466 1427 19763
+2467 1427 45652
+2468 1427 32747
+2469 1427 32748
+2470 1427 24651
+2471 1427 47353
+2472 1427 45437
+2473 1427 11603
+2474 1427 49649
+2475 1427 49015
+2485 1427 12636
+2496 1427 3371
+2508 1427 4566
+3938 1427 27852657
+1335 1428 1
+1602 1428 31311
+1873 1428 25638
+1874 1428 30561
+1875 1428 30561
+1893 1428 43354
+1901 1428 14596
+1907 1428 12311
+1908 1428 45426
+1910 1428 57655
+1913 1428 53350
+1914 1428 53350
+1915 1428 53350
+1961 1428 62852
+1962 1428 1327
+1963 1428 44073
+1964 1428 47911
+1967 1428 13547
+1968 1428 4051
+1969 1428 4051
+1970 1428 57401
+1980 1428 4051
+2027 1428 62852
+2028 1428 1327
+2029 1428 44073
+2030 1428 47911
+2031 1428 44499
+2033 1428 13547
+2034 1428 4051
+2035 1428 4051
+2036 1428 57401
+2046 1428 8102
+2057 1428 4051
+2223 1428 53402
+2224 1428 53402
+2225 1428 30691
+2226 1428 3264
+2227 1428 15383
+2228 1428 50375
+2229 1428 1562
+2230 1428 63053
+2231 1428 47670
+2232 1428 2380
+2233 1428 7102
+2234 1428 57271
+2235 1428 26180
+2236 1428 44031
+2237 1428 39446
+2238 1428 61694
+2239 1428 7757
+2240 1428 31183
+2241 1428 44107
+2242 1428 76
+2245 1428 43531
+2246 1428 56652
+2247 1428 12990
+2248 1428 1767
+2252 1428 61505
+2253 1428 9105
+2254 1428 30964
+2255 1428 57799
+2256 1428 40785
+2257 1428 40785
+2258 1428 5870
+2259 1428 41321
+2261 1428 21550
+2262 1428 63071
+2263 1428 43148
+2264 1428 46855
+2265 1428 8693
+2266 1428 33429
+2267 1428 43423
+2268 1428 46629
+2269 1428 24121
+2271 1428 38225
+2272 1428 14259
+2273 1428 30684
+2274 1428 3201
+2275 1428 29105
+2276 1428 61197
+2322 1428 43890
+2323 1428 39822
+2324 1428 26169
+2325 1428 43675
+2327 1428 8346
+2328 1428 46445
+2329 1428 23578
+2330 1428 59863
+2331 1428 52292
+2341 1428 56616
+2388 1428 27221
+2389 1428 20697
+2390 1428 52112
+2391 1428 27937
+2392 1428 18177
+2394 1428 60888
+2395 1428 46689
+2396 1428 34297
+2397 1428 6
+2407 1428 10337
+2418 1428 19242
+2466 1428 53437
+2467 1428 35495
+2468 1428 17487
+2469 1428 1928
+2470 1428 12312
+2471 1428 43061
+2472 1428 6635
+2473 1428 11244
+2474 1428 24047
+2475 1428 12095
+2485 1428 6444
+2496 1428 31300
+2508 1428 58721
+3939 1428 27852657
+1336 1429 1
+1341 1429 1
+1381 1429 1
+1382 1429 1
+1386 1429 1
+1387 1429 1
+1598 1429 1
+1599 1429 1
+2259 1429 32761
+2268 1429 32761
+2269 1429 32761
+2323 1429 32761
+2324 1429 32761
+2389 1429 32761
+2390 1429 32761
+2392 1429 32761
+2458 1429 1
+2467 1429 24572
+2468 1429 24572
+2470 1429 24572
+2471 1429 24572
+2481 1429 1
+2508 1429 4096
+2509 1429 32761
+2510 1429 32761
+2511 1429 24572
+3940 1429 27852657
+1337 1430 1
+1342 1430 1
+1554 1430 1
+1826 1430 65519
+1827 1430 65519
+1828 1430 65519
+1829 1430 65519
+1830 1430 65519
+2187 1430 21840
+2188 1430 21840
+2189 1430 21840
+2190 1430 21840
+2191 1430 21840
+2192 1430 21840
+2193 1430 21840
+2194 1430 21840
+2195 1430 21840
+2196 1430 43680
+2197 1430 21840
+2260 1430 43681
+2315 1430 43681
+2316 1430 54601
+2381 1430 43681
+2382 1430 54601
+2383 1430 32760
+2457 1430 35490
+2458 1430 35490
+2459 1430 47776
+2461 1430 40949
+2462 1430 40951
+2507 1430 19793
+3941 1430 27852657
+1338 1431 1
+1339 1431 1
+1344 1431 41694
+1345 1431 41693
+1384 1431 1
+1390 1431 65520
+1602 1431 65520
+1629 1431 32773
+1684 1431 32773
+1685 1431 32773
+1886 1431 53606
+1893 1431 53606
+1901 1431 53606
+1908 1431 29805
+1910 1431 59566
+1963 1431 26812
+1964 1431 26812
+2029 1431 59560
+2030 1431 59560
+2031 1431 47645
+2247 1431 37969
+2248 1431 59552
+2254 1431 37969
+2255 1431 59552
+2261 1431 59561
+2262 1431 57324
+2263 1431 50615
+2269 1431 31264
+2271 1431 48397
+2272 1431 11156
+2324 1431 52857
+2325 1431 52857
+2327 1431 743
+2390 1431 30522
+2391 1431 30522
+2392 1431 50634
+2468 1431 43557
+2469 1431 43557
+2470 1431 53982
+2471 1431 30151
+2472 1431 53606
+2473 1431 53606
+2474 1431 64030
+2475 1431 54724
+2485 1431 11736
+2496 1431 47657
+2508 1431 40841
+3942 1431 27852657
+1339 1432 1
+1345 1432 65520
+1557 1432 1497
+1828 1432 684
+1829 1432 59789
+1830 1432 59789
+1848 1432 52908
+1856 1432 61210
+1898 1432 54280
+1899 1432 53509
+1901 1432 8622
+1904 1432 20707
+1905 1432 20707
+1914 1432 20707
+1952 1432 33689
+1953 1432 34913
+1954 1432 61526
+1955 1432 11010
+1958 1432 18003
+1959 1432 58902
+1960 1432 58902
+1969 1432 14088
+1979 1432 58902
+2018 1432 33689
+2019 1432 34913
+2020 1432 61526
+2021 1432 11010
+2022 1432 19922
+2024 1432 18003
+2025 1432 58902
+2026 1432 58902
+2035 1432 14088
+2045 1432 52283
+2056 1432 58902
+2178 1432 23340
+2179 1432 23340
+2180 1432 49105
+2181 1432 12189
+2182 1432 54370
+2183 1432 28066
+2184 1432 31922
+2185 1432 3934
+2186 1432 15085
+2187 1432 28066
+2188 1432 31922
+2189 1432 9725
+2190 1432 5267
+2191 1432 55703
+2192 1432 56763
+2193 1432 19367
+2194 1432 61284
+2195 1432 121
+2196 1432 33114
+2197 1432 42932
+2200 1432 33194
+2201 1432 12774
+2202 1432 46524
+2203 1432 43732
+2207 1432 14177
+2208 1432 59278
+2209 1432 27507
+2210 1432 474
+2211 1432 29924
+2212 1432 29924
+2213 1432 41717
+2214 1432 20776
+2216 1432 58375
+2217 1432 43153
+2218 1432 6239
+2219 1432 64504
+2220 1432 62335
+2221 1432 32411
+2258 1432 30882
+2259 1432 6009
+2260 1432 51127
+2262 1432 15988
+2263 1432 13996
+2264 1432 56209
+2265 1432 37333
+2266 1432 58901
+2275 1432 26490
+2313 1432 51558
+2314 1432 52645
+2315 1432 39228
+2316 1432 779
+2318 1432 53043
+2319 1432 33185
+2320 1432 64902
+2321 1432 3948
+2330 1432 33998
+2340 1432 7508
+2379 1432 28911
+2380 1432 34582
+2381 1432 7263
+2382 1432 62747
+2383 1432 39345
+2385 1432 28133
+2386 1432 47027
+2387 1432 11743
+2396 1432 17407
+2406 1432 29888
+2417 1432 22380
+2457 1432 13828
+2458 1432 11520
+2459 1432 60725
+2460 1432 25170
+2461 1432 65298
+2462 1432 27675
+2463 1432 16957
+2464 1432 39030
+2465 1432 49849
+2474 1432 9816
+2484 1432 19681
+2495 1432 34007
+2507 1432 63918
+3943 1432 27852657
+1340 1433 1
+1602 1433 13187
+1873 1433 31040
+1874 1433 46029
+1875 1433 46029
+1893 1433 27498
+1901 1433 18988
+1907 1433 8626
+1908 1433 7109
+1910 1433 62293
+1913 1433 53263
+1914 1433 53263
+1915 1433 53263
+1961 1433 23057
+1962 1433 51609
+1963 1433 63975
+1964 1433 19029
+1967 1433 19816
+1968 1433 54737
+1969 1433 54737
+1970 1433 42479
+1980 1433 54737
+2027 1433 23057
+2028 1433 51609
+2029 1433 63975
+2030 1433 19029
+2031 1433 56726
+2033 1433 19816
+2034 1433 54737
+2035 1433 54737
+2036 1433 42479
+2046 1433 43953
+2057 1433 54737
+2223 1433 1640
+2224 1433 1640
+2225 1433 41292
+2226 1433 61156
+2227 1433 59516
+2228 1433 32571
+2229 1433 63104
+2230 1433 53614
+2231 1433 59619
+2232 1433 32571
+2233 1433 63104
+2234 1433 44364
+2235 1433 30576
+2236 1433 36478
+2237 1433 56401
+2238 1433 3887
+2239 1433 9808
+2240 1433 61206
+2241 1433 55664
+2242 1433 19186
+2245 1433 56456
+2246 1433 4940
+2247 1433 3742
+2248 1433 28914
+2252 1433 4829
+2253 1433 18834
+2254 1433 17636
+2255 1433 6695
+2256 1433 28110
+2257 1433 28110
+2258 1433 31679
+2259 1433 37575
+2261 1433 8475
+2262 1433 62890
+2263 1433 62464
+2264 1433 56213
+2265 1433 4536
+2266 1433 41947
+2267 1433 43524
+2268 1433 47551
+2269 1433 47509
+2271 1433 20671
+2272 1433 30957
+2273 1433 48018
+2274 1433 60764
+2275 1433 4882
+2276 1433 28456
+2322 1433 38609
+2323 1433 41709
+2324 1433 8864
+2325 1433 39799
+2327 1433 16583
+2328 1433 35872
+2329 1433 48368
+2330 1433 20002
+2331 1433 25834
+2341 1433 62899
+2388 1433 17137
+2389 1433 28371
+2390 1433 23090
+2391 1433 3386
+2392 1433 23117
+2394 1433 14698
+2395 1433 52217
+2396 1433 36269
+2397 1433 57154
+2407 1433 117
+2418 1433 2739
+2466 1433 8764
+2467 1433 29213
+2468 1433 63703
+2469 1433 36894
+2470 1433 25499
+2471 1433 43242
+2472 1433 22367
+2473 1433 15249
+2474 1433 51287
+2475 1433 10400
+2485 1433 2702
+2496 1433 11008
+2508 1433 14836
+3944 1433 27852657
+1341 1434 1
+1386 1434 1
+1387 1434 1
+1598 1434 1
+1599 1434 1
+2238 1434 43681
+2239 1434 43681
+2240 1434 43681
+2241 1434 43681
+2242 1434 43681
+2259 1434 54601
+2268 1434 54601
+2269 1434 54601
+2323 1434 54601
+2324 1434 54601
+2389 1434 54601
+2390 1434 54601
+2467 1434 12286
+2468 1434 12286
+2469 1434 30031
+2470 1434 30031
+2471 1434 42317
+2508 1434 23888
+3945 1434 27852657
+1342 1435 1
+1543 1435 65520
+1544 1435 4601
+1545 1435 30678
+1546 1435 30678
+1554 1435 1
+1822 1435 65520
+1823 1435 4601
+1824 1435 30678
+1825 1435 30678
+1827 1435 4602
+1828 1435 55441
+1829 1435 30678
+1899 1435 53758
+1954 1435 53758
+1955 1435 15116
+2020 1435 53758
+2021 1435 15116
+2022 1435 15116
+2178 1435 5041
+2179 1435 5041
+2180 1435 49141
+2181 1435 40376
+2182 1435 35335
+2183 1435 20160
+2184 1435 53688
+2185 1435 43881
+2186 1435 8546
+2187 1435 9240
+2188 1435 42768
+2189 1435 47150
+2190 1435 45506
+2191 1435 36960
+2192 1435 9240
+2193 1435 42768
+2194 1435 50930
+2195 1435 27865
+2196 1435 61320
+2197 1435 24360
+2260 1435 63417
+2315 1435 63417
+2316 1435 20568
+2381 1435 24988
+2382 1435 36536
+2383 1435 14696
+2457 1435 27300
+2458 1435 51227
+2459 1435 50132
+2460 1435 57266
+2461 1435 26041
+2462 1435 15646
+2495 1435 63312
+2507 1435 43544
+3946 1435 27852657
+1343 1436 1
+1344 1436 1
+1345 1436 1
+1629 1436 16372
+1684 1436 16372
+1685 1436 16372
+1886 1436 32762
+1893 1436 32762
+1901 1436 32762
+1908 1436 65506
+1910 1436 32759
+1963 1436 16375
+1964 1436 16375
+2029 1436 3
+2030 1436 3
+2031 1436 32765
+2247 1436 36858
+2248 1436 9
+2254 1436 36858
+2255 1436 9
+2261 1436 24572
+2262 1436 61430
+2263 1436 61436
+2269 1436 8195
+2271 1436 28663
+2272 1436 4103
+2324 1436 45050
+2325 1436 45050
+2327 1436 12286
+2390 1436 53239
+2391 1436 53239
+2392 1436 40948
+2468 1436 51188
+2469 1436 51188
+2470 1436 36855
+2471 1436 24573
+2472 1436 32762
+2473 1436 32762
+2474 1436 6144
+2475 1436 59379
+2485 1436 56301
+2496 1436 28662
+2508 1436 3082
+3947 1436 27852657
+1344 1437 1
+1345 1437 1
+1893 1437 61136
+1901 1437 55752
+1908 1437 26622
+1910 1437 60568
+1913 1437 7132
+1914 1437 7132
+1915 1437 7132
+1961 1437 52136
+1962 1437 52136
+1963 1437 13237
+1964 1437 13237
+1967 1437 30661
+1968 1437 54951
+1969 1437 54951
+1970 1437 62083
+1980 1437 54951
+2027 1437 52136
+2028 1437 52136
+2029 1437 13237
+2030 1437 13237
+2031 1437 15752
+2033 1437 30661
+2034 1437 54951
+2035 1437 54951
+2036 1437 62083
+2046 1437 44381
+2057 1437 54951
+2247 1437 56555
+2248 1437 32541
+2252 1437 37637
+2253 1437 37637
+2254 1437 28671
+2255 1437 28004
+2256 1437 64488
+2257 1437 64488
+2258 1437 21803
+2259 1437 21803
+2261 1437 33382
+2262 1437 1080
+2263 1437 3958
+2264 1437 1234
+2265 1437 62887
+2266 1437 63920
+2267 1437 49901
+2268 1437 49901
+2269 1437 44021
+2271 1437 2714
+2272 1437 9436
+2273 1437 29184
+2274 1437 65017
+2275 1437 26505
+2276 1437 28106
+2322 1437 5531
+2323 1437 5531
+2324 1437 65172
+2325 1437 65172
+2327 1437 39797
+2328 1437 16587
+2329 1437 28313
+2330 1437 47099
+2331 1437 7851
+2341 1437 45266
+2388 1437 46663
+2389 1437 46663
+2390 1437 17618
+2391 1437 17618
+2392 1437 34351
+2394 1437 5297
+2395 1437 49515
+2396 1437 35141
+2397 1437 19848
+2407 1437 20072
+2418 1437 40327
+2466 1437 7278
+2467 1437 7278
+2468 1437 58018
+2469 1437 58018
+2470 1437 45936
+2471 1437 17973
+2472 1437 50965
+2473 1437 64086
+2474 1437 8078
+2475 1437 41206
+2485 1437 20008
+2496 1437 44523
+2508 1437 33534
+3948 1437 27852657
+1345 1438 1
+1390 1438 1
+1657 1438 65520
+1880 1438 53121
+1894 1438 1948
+1902 1438 1948
+1911 1438 1948
+1931 1438 236
+1932 1438 236
+1933 1438 236
+1934 1438 236
+1942 1438 46927
+1949 1438 44809
+1957 1438 44809
+1966 1438 46757
+1976 1438 44809
+1997 1438 236
+1998 1438 236
+1999 1438 236
+2000 1438 236
+2001 1438 236
+2008 1438 46927
+2015 1438 44809
+2023 1438 44809
+2032 1438 46757
+2042 1438 24097
+2053 1438 44809
+2134 1438 1044
+2158 1438 37196
+2159 1438 37196
+2160 1438 37196
+2161 1438 24950
+2167 1438 53156
+2174 1438 53156
+2192 1438 42839
+2193 1438 42839
+2195 1438 6393
+2196 1438 6393
+2197 1438 55400
+2203 1438 1314
+2210 1438 10869
+2218 1438 23234
+2237 1438 44299
+2238 1438 44299
+2239 1438 44299
+2241 1438 34458
+2242 1438 23319
+2248 1438 46092
+2255 1438 16966
+2263 1438 21948
+2272 1438 64235
+2292 1438 21579
+2293 1438 21579
+2294 1438 21579
+2295 1438 21579
+2297 1438 50349
+2303 1438 49
+2310 1438 24186
+2318 1438 34987
+2327 1438 57048
+2337 1438 58334
+2358 1438 26164
+2359 1438 26164
+2360 1438 26164
+2361 1438 26164
+2362 1438 26164
+2369 1438 32257
+2376 1438 57600
+2384 1438 21818
+2393 1438 17202
+2403 1438 1070
+2414 1438 8257
+2436 1438 46528
+2437 1438 46528
+2438 1438 46528
+2439 1438 46528
+2440 1438 46528
+2441 1438 46354
+2447 1438 32969
+2454 1438 60879
+2462 1438 56348
+2471 1438 53172
+2481 1438 3125
+2492 1438 7855
+2504 1438 666
+3949 1438 27852657
+1346 1439 1
+2474 1439 65520
+3950 1439 27852657
+1347 1440 1
+1348 1440 1
+1349 1440 1
+1350 1440 1
+1351 1440 1
+1355 1440 1
+1356 1440 1
+1357 1440 1
+1358 1440 1
+1364 1440 1
+1365 1440 1
+1366 1440 1
+1410 1440 1
+1411 1440 1
+1623 1440 1
+2264 1440 32761
+2265 1440 32761
+2266 1440 32761
+2275 1440 32761
+2330 1440 32761
+2396 1440 32761
+2474 1440 24573
+3951 1440 27852657
+1348 1441 1
+1408 1441 1
+1560 1441 1
+1568 1441 65520
+1620 1441 2
+1675 1441 1
+1839 1441 1
+1841 1441 32759
+1847 1441 65520
+1848 1441 32758
+1856 1441 32759
+1899 1441 1
+1901 1441 32760
+1954 1441 1
+1955 1441 32759
+2021 1441 32759
+2022 1441 65518
+2200 1441 8195
+2201 1441 12289
+2202 1441 40952
+2203 1441 40952
+2207 1441 40955
+2208 1441 45049
+2209 1441 8191
+2210 1441 8191
+2216 1441 23209
+2217 1441 51872
+2218 1441 51872
+2260 1441 16378
+2262 1441 40952
+2263 1441 40952
+2315 1441 16378
+2316 1441 12280
+2318 1441 40952
+2381 1441 45044
+2382 1441 28663
+2383 1441 40954
+2459 1441 63473
+2460 1441 38903
+2461 1441 53236
+2462 1441 53236
+2463 1441 32762
+2464 1441 8190
+2465 1441 20476
+2474 1441 2732
+2484 1441 2732
+2495 1441 29347
+2507 1441 59382
+3952 1441 27852657
+1349 1442 1
+1350 1442 1
+1351 1442 1
+1356 1442 1
+1357 1442 1
+1358 1442 1
+1364 1442 1
+1365 1442 1
+1366 1442 1
+1395 1442 1
+1396 1442 1
+1402 1442 1
+1403 1442 1
+1410 1442 2
+1411 1442 2
+1419 1442 1
+1420 1442 1
+1608 1442 1
+1615 1442 1
+1623 1442 2
+1632 1442 2
+1687 1442 1
+2264 1442 32761
+2265 1442 32761
+2266 1442 32761
+2273 1442 32761
+2274 1442 32761
+2275 1442 1
+2276 1442 32761
+2328 1442 32761
+2329 1442 32761
+2330 1442 1
+2331 1442 1
+2341 1442 32761
+2394 1442 32761
+2395 1442 32761
+2396 1442 1
+2397 1442 1
+2407 1442 1
+2418 1442 32761
+2472 1442 24572
+2473 1442 24572
+2474 1442 49144
+2475 1442 49143
+2485 1442 49142
+2496 1442 49141
+2508 1442 8190
+3953 1442 27852657
+1350 1443 1
+1351 1443 1
+1357 1443 1
+1358 1443 1
+1365 1443 1
+1366 1443 1
+1395 1443 1
+1396 1443 1
+1402 1443 1
+1403 1443 1
+1410 1443 2
+1411 1443 2
+1419 1443 1
+1420 1443 1
+1608 1443 1
+1615 1443 1
+1623 1443 2
+1632 1443 2
+1687 1443 1
+2264 1443 32761
+2265 1443 32761
+2266 1443 32761
+2273 1443 32761
+2274 1443 32761
+2275 1443 1
+2276 1443 32761
+2328 1443 32761
+2329 1443 32761
+2330 1443 1
+2331 1443 1
+2341 1443 32761
+2394 1443 32761
+2395 1443 32761
+2396 1443 1
+2397 1443 1
+2407 1443 1
+2418 1443 32761
+2463 1443 1
+2464 1443 1
+2465 1443 1
+2472 1443 24572
+2473 1443 24572
+2474 1443 49144
+2475 1443 49143
+2485 1443 49142
+2496 1443 49141
+2508 1443 8190
+3954 1443 27852657
+1351 1444 1
+1910 1444 7261
+1913 1444 26277
+1914 1444 26277
+1915 1444 26277
+1961 1444 46622
+1962 1444 46622
+1963 1444 46622
+1964 1444 46622
+1967 1444 65290
+1968 1444 21768
+1969 1444 21768
+1970 1444 48045
+1980 1444 21768
+2027 1444 46622
+2028 1444 46622
+2029 1444 46622
+2030 1444 46622
+2031 1444 46622
+2033 1444 65290
+2034 1444 21768
+2035 1444 21768
+2036 1444 48045
+2046 1444 43536
+2057 1444 21768
+2248 1444 7770
+2252 1444 59302
+2253 1444 59302
+2254 1444 59302
+2255 1444 20699
+2256 1444 61249
+2257 1444 61249
+2258 1444 32327
+2259 1444 32327
+2261 1444 39775
+2262 1444 39775
+2263 1444 39250
+2264 1444 63043
+2265 1444 10681
+2266 1444 14953
+2267 1444 26462
+2268 1444 26462
+2269 1444 26462
+2271 1444 52210
+2272 1444 33542
+2273 1444 14611
+2274 1444 26324
+2275 1444 62568
+2276 1444 47615
+2322 1444 4640
+2323 1444 4640
+2324 1444 4640
+2325 1444 4640
+2327 1444 42489
+2328 1444 13225
+2329 1444 20936
+2330 1444 48610
+2331 1444 26151
+2341 1444 44057
+2388 1444 63635
+2389 1444 63635
+2390 1444 63635
+2391 1444 63635
+2392 1444 63635
+2394 1444 38806
+2395 1444 15652
+2396 1444 52068
+2397 1444 36902
+2407 1444 43506
+2418 1444 64970
+2466 1444 4269
+2467 1444 4269
+2468 1444 4269
+2469 1444 4269
+2470 1444 4269
+2471 1444 2974
+2472 1444 25771
+2473 1444 30777
+2474 1444 36269
+2475 1444 32675
+2485 1444 31099
+2496 1444 61929
+2508 1444 3952
+3955 1444 27852657
+1352 1445 1
+1360 1445 65520
+1369 1445 1
+1397 1445 4962
+1405 1445 60559
+1414 1445 16366
+1422 1445 12295
+1423 1445 19884
+1424 1445 3519
+1609 1445 19012
+1617 1445 46509
+1626 1445 4083
+1636 1445 58649
+1687 1445 3428
+1688 1445 45574
+1689 1445 33279
+1690 1445 32018
+1691 1445 56752
+1701 1445 1622
+1888 1445 41192
+1896 1445 24329
+1905 1445 16329
+1915 1445 29787
+1980 1445 4541
+2034 1445 52803
+2035 1445 47349
+2036 1445 60694
+2046 1445 45687
+2057 1445 42768
+2249 1445 56906
+2256 1445 61580
+2257 1445 4674
+2258 1445 64750
+2259 1445 64750
+2261 1445 35833
+2262 1445 35833
+2263 1445 35833
+2264 1445 53367
+2265 1445 44210
+2266 1445 9259
+2267 1445 33015
+2268 1445 33015
+2269 1445 33015
+2271 1445 62615
+2272 1445 62615
+2273 1445 14532
+2274 1445 3041
+2275 1445 31828
+2276 1445 15027
+2322 1445 19048
+2323 1445 19048
+2324 1445 19048
+2325 1445 19048
+2327 1445 788
+2328 1445 60866
+2329 1445 42541
+2330 1445 64445
+2331 1445 34502
+2341 1445 15078
+2388 1445 37074
+2389 1445 37074
+2390 1445 37074
+2391 1445 37074
+2392 1445 37074
+2394 1445 24216
+2395 1445 10050
+2396 1445 55461
+2397 1445 64824
+2407 1445 24456
+2418 1445 24044
+2466 1445 65222
+2467 1445 65222
+2468 1445 65222
+2469 1445 65222
+2470 1445 65222
+2471 1445 65222
+2472 1445 28920
+2473 1445 19260
+2474 1445 59239
+2475 1445 29558
+2485 1445 44332
+2496 1445 54208
+2508 1445 62838
+3956 1445 27852657
+1353 1446 1
+1361 1446 1
+1362 1446 1
+1406 1446 1
+1407 1446 1
+1408 1446 1
+1618 1446 1
+1619 1446 1
+1620 1446 1
+1621 1446 1
+1897 1446 1
+1898 1446 1
+1899 1446 1
+1900 1446 1
+1901 1446 1
+2258 1446 32761
+2259 1446 32761
+2260 1446 32761
+2261 1446 32761
+2262 1446 32761
+2263 1446 32761
+2474 1446 24573
+3957 1446 27852657
+1354 1447 1
+2474 1447 65520
+3958 1447 27852657
+1355 1448 1
+2211 1448 58226
+2212 1448 58226
+2213 1448 50318
+2214 1448 50318
+2216 1448 22624
+2217 1448 22624
+2218 1448 22624
+2219 1448 9520
+2220 1448 40147
+2221 1448 47442
+2258 1448 46532
+2259 1448 46532
+2260 1448 46532
+2262 1448 39237
+2263 1448 39237
+2264 1448 41565
+2265 1448 12173
+2266 1448 1511
+2275 1448 19590
+2313 1448 52158
+2314 1448 52158
+2315 1448 52158
+2316 1448 52158
+2318 1448 51084
+2319 1448 59962
+2320 1448 14545
+2321 1448 19350
+2330 1448 16768
+2340 1448 62699
+2379 1448 54420
+2380 1448 54420
+2381 1448 54420
+2382 1448 54420
+2383 1448 54420
+2385 1448 27048
+2386 1448 59216
+2387 1448 43674
+2396 1448 34128
+2406 1448 63812
+2417 1448 1113
+2457 1448 27587
+2458 1448 27587
+2459 1448 27587
+2460 1448 27587
+2461 1448 27587
+2462 1448 27587
+2463 1448 27102
+2464 1448 43546
+2465 1448 33156
+2474 1448 56060
+2484 1448 35356
+2495 1448 7864
+2507 1448 45047
+3959 1448 27852657
+1356 1449 1
+1357 1449 1
+1358 1449 1
+1364 1449 1
+1365 1449 1
+1366 1449 1
+1419 1449 65520
+1420 1449 65520
+1624 1449 6146
+1625 1449 6146
+1626 1449 6146
+1632 1449 65520
+1633 1449 6146
+1634 1449 6146
+1635 1449 12292
+1636 1449 6146
+1688 1449 6146
+1689 1449 6146
+1690 1449 12292
+1691 1449 12292
+1701 1449 6146
+1895 1449 46342
+1896 1449 46342
+1903 1449 52488
+1904 1449 33309
+1905 1449 52488
+1910 1449 28435
+1912 1449 52488
+1913 1449 19675
+1914 1449 25821
+1915 1449 38854
+1967 1449 8548
+1968 1449 41256
+1969 1449 53548
+1970 1449 39914
+1980 1449 1060
+2033 1449 2402
+2034 1449 35110
+2035 1449 41256
+2036 1449 27622
+2046 1449 49203
+2057 1449 54289
+2256 1449 28635
+2257 1449 28635
+2264 1449 16778
+2265 1449 53605
+2266 1449 24970
+2271 1449 59340
+2272 1449 59340
+2273 1449 16778
+2274 1449 64055
+2275 1449 32264
+2276 1449 7294
+2327 1449 59340
+2328 1449 53333
+2329 1449 35089
+2330 1449 61750
+2331 1449 3125
+2341 1449 61352
+2394 1449 6969
+2395 1449 55674
+2396 1449 16814
+2397 1449 29372
+2407 1449 27585
+2418 1449 31754
+2472 1449 56055
+2473 1449 13025
+2474 1449 46495
+2475 1449 19570
+2485 1449 61812
+2496 1449 19639
+2508 1449 37326
+3960 1449 27852657
+1357 1450 1
+1365 1450 1
+1419 1450 65520
+1893 1450 32763
+1901 1450 2
+1910 1450 32078
+1913 1450 17260
+1914 1450 17260
+1915 1450 17260
+1961 1450 57776
+1962 1450 57776
+1963 1450 57776
+1964 1450 57776
+1967 1450 60040
+1968 1450 3969
+1969 1450 3969
+1970 1450 21229
+1980 1450 3969
+2027 1450 57776
+2028 1450 57776
+2029 1450 57776
+2030 1450 57776
+2031 1450 57776
+2033 1450 60040
+2034 1450 3969
+2035 1450 3969
+2036 1450 21229
+2046 1450 7938
+2057 1450 3969
+2248 1450 5562
+2252 1450 60245
+2253 1450 60245
+2254 1450 23390
+2255 1450 26502
+2256 1450 43980
+2257 1450 43980
+2258 1450 23087
+2259 1450 23087
+2261 1450 1015
+2262 1450 33776
+2263 1450 42974
+2264 1450 2925
+2265 1450 20482
+2266 1450 42023
+2267 1450 61794
+2268 1450 61794
+2269 1450 61794
+2271 1450 12265
+2272 1450 62820
+2273 1450 37279
+2274 1450 32199
+2275 1450 28174
+2276 1450 51672
+2322 1450 50036
+2323 1450 50036
+2324 1450 50036
+2325 1450 50036
+2327 1450 62036
+2328 1450 4393
+2329 1450 21597
+2330 1450 10389
+2331 1450 55329
+2341 1450 3657
+2388 1450 7565
+2389 1450 7565
+2390 1450 7565
+2391 1450 7565
+2392 1450 7565
+2394 1450 3802
+2395 1450 64498
+2396 1450 7594
+2397 1450 62861
+2407 1450 59495
+2418 1450 55838
+2466 1450 21126
+2467 1450 21126
+2468 1450 21126
+2469 1450 21126
+2470 1450 21126
+2471 1450 20199
+2472 1450 31539
+2473 1450 31176
+2474 1450 16602
+2475 1450 58629
+2485 1450 39386
+2496 1450 20852
+2508 1450 33382
+3961 1450 27852657
+1358 1451 1
+1366 1451 1
+1420 1451 65520
+1687 1451 1
+1910 1451 61157
+1913 1451 20292
+1914 1451 20292
+1915 1451 20292
+1961 1451 24464
+1962 1451 24464
+1963 1451 24464
+1964 1451 24464
+1967 1451 2480
+1968 1451 21631
+1969 1451 21631
+1970 1451 41923
+1980 1451 21631
+2027 1451 24464
+2028 1451 24464
+2029 1451 24464
+2030 1451 24464
+2031 1451 24464
+2033 1451 2480
+2034 1451 21631
+2035 1451 21631
+2036 1451 41923
+2046 1451 43262
+2057 1451 21631
+2248 1451 59959
+2252 1451 10717
+2253 1451 10717
+2254 1451 10717
+2255 1451 7605
+2256 1451 21541
+2257 1451 21541
+2258 1451 37501
+2259 1451 37501
+2261 1451 28283
+2262 1451 28283
+2263 1451 19085
+2264 1451 62596
+2265 1451 12376
+2266 1451 56356
+2267 1451 32262
+2268 1451 32262
+2269 1451 32262
+2271 1451 38568
+2272 1451 53534
+2273 1451 28242
+2274 1451 14563
+2275 1451 5428
+2276 1451 14593
+2322 1451 49166
+2323 1451 49166
+2324 1451 49166
+2325 1451 49166
+2327 1451 4960
+2328 1451 43122
+2329 1451 51625
+2330 1451 27349
+2331 1451 41924
+2341 1451 27331
+2388 1451 32489
+2389 1451 32489
+2390 1451 32489
+2391 1451 32489
+2392 1451 32489
+2394 1451 32272
+2395 1451 50003
+2396 1451 52103
+2397 1451 17083
+2407 1451 65101
+2418 1451 37770
+2466 1451 48991
+2467 1451 48991
+2468 1451 48991
+2469 1451 48991
+2470 1451 48991
+2471 1451 49918
+2472 1451 33982
+2473 1451 45726
+2474 1451 51649
+2475 1451 611
+2485 1451 21845
+2496 1451 24381
+2508 1451 1841
+3962 1451 27852657
+1359 1452 1
+1360 1452 1
+1367 1452 1
+1368 1452 2
+1369 1452 1
+1404 1452 5617
+1405 1452 5617
+1412 1452 29953
+1413 1452 35571
+1414 1452 29954
+1421 1452 29952
+1422 1452 35569
+1423 1452 59905
+1424 1452 29952
+1625 1452 1
+1626 1452 1
+1634 1452 5617
+1635 1452 29953
+1636 1452 29952
+1688 1452 35569
+1689 1452 35569
+1690 1452 35569
+1691 1452 35569
+1701 1452 35569
+1910 1452 11673
+1913 1452 47459
+1914 1452 44837
+1915 1452 44837
+1961 1452 43134
+1962 1452 43134
+1963 1452 43134
+1964 1452 43134
+1967 1452 24083
+1968 1452 10638
+1969 1452 35231
+1970 1452 60218
+1980 1452 15381
+2027 1452 43134
+2028 1452 43134
+2029 1452 43134
+2030 1452 43134
+2031 1452 43134
+2033 1452 54035
+2034 1452 40590
+2035 1452 65183
+2036 1452 24649
+2046 1452 55097
+2057 1452 9764
+2252 1452 45700
+2253 1452 45700
+2254 1452 45700
+2255 1452 45700
+2256 1452 62309
+2257 1452 62309
+2258 1452 49949
+2259 1452 49949
+2261 1452 44841
+2262 1452 44841
+2263 1452 44841
+2264 1452 25159
+2265 1452 47468
+2266 1452 50680
+2267 1452 35832
+2268 1452 35832
+2269 1452 35832
+2271 1452 13986
+2272 1452 13986
+2273 1452 3004
+2274 1452 16662
+2275 1452 29192
+2276 1452 44033
+2322 1452 26641
+2323 1452 26641
+2324 1452 26641
+2325 1452 26641
+2327 1452 23312
+2328 1452 29308
+2329 1452 39134
+2330 1452 11041
+2331 1452 54862
+2341 1452 10829
+2388 1452 6766
+2389 1452 6766
+2390 1452 6766
+2391 1452 6766
+2392 1452 6766
+2394 1452 63181
+2395 1452 29928
+2396 1452 61372
+2397 1452 37591
+2407 1452 23777
+2418 1452 12948
+2466 1452 18453
+2467 1452 18453
+2468 1452 18453
+2469 1452 18453
+2470 1452 18453
+2471 1452 18453
+2472 1452 46498
+2473 1452 23140
+2474 1452 60044
+2475 1452 54628
+2485 1452 11462
+2496 1452 51512
+2508 1452 31474
+3963 1452 27852657
+1360 1453 1
+1369 1453 65520
+1405 1453 19564
+1414 1453 34553
+1422 1453 3054
+1423 1453 35516
+1424 1453 962
+1617 1453 2437
+1626 1453 12492
+1636 1453 47199
+1688 1453 158
+1689 1453 27163
+1690 1453 65043
+1691 1453 42951
+1701 1453 62235
+1896 1453 55965
+1905 1453 34419
+1915 1453 54979
+1980 1453 62432
+2035 1453 20529
+2036 1453 65094
+2046 1453 30005
+2057 1453 29808
+2256 1453 24352
+2257 1453 40940
+2258 1453 19610
+2259 1453 19610
+2261 1453 44291
+2262 1453 44291
+2263 1453 44291
+2264 1453 42662
+2265 1453 34816
+2266 1453 24153
+2267 1453 21231
+2268 1453 21231
+2269 1453 21231
+2271 1453 47707
+2272 1453 47707
+2273 1453 49719
+2274 1453 17309
+2275 1453 11750
+2276 1453 48676
+2322 1453 56688
+2323 1453 56688
+2324 1453 56688
+2325 1453 56688
+2327 1453 47584
+2328 1453 32152
+2329 1453 31115
+2330 1453 27435
+2331 1453 24649
+2341 1453 31783
+2388 1453 55408
+2389 1453 55408
+2390 1453 55408
+2391 1453 55408
+2392 1453 55408
+2394 1453 6387
+2395 1453 37178
+2396 1453 14066
+2397 1453 37688
+2407 1453 17012
+2418 1453 56760
+2466 1453 49331
+2467 1453 49331
+2468 1453 49331
+2469 1453 49331
+2470 1453 49331
+2471 1453 49331
+2472 1453 35052
+2473 1453 63137
+2474 1453 16011
+2475 1453 52709
+2485 1453 63690
+2496 1453 10738
+2508 1453 56864
+3964 1453 27852657
+1361 1454 1
+1414 1454 50663
+1416 1454 1
+1422 1454 51868
+1423 1454 21821
+1424 1454 36679
+1626 1454 9142
+1636 1454 897
+1683 1454 65520
+1687 1454 8083
+1688 1454 54397
+1689 1454 2529
+1690 1454 58047
+1691 1454 3213
+1701 1454 38995
+1905 1454 26655
+1915 1454 42794
+1980 1454 7764
+2034 1454 40084
+2035 1454 4929
+2036 1454 48117
+2046 1454 8487
+2057 1454 39718
+2247 1454 57425
+2254 1454 8603
+2255 1454 44455
+2256 1454 26766
+2257 1454 26766
+2258 1454 1084
+2259 1454 55888
+2261 1454 12754
+2262 1454 40018
+2263 1454 34218
+2264 1454 4209
+2265 1454 45281
+2266 1454 46129
+2267 1454 17852
+2268 1454 55799
+2269 1454 41998
+2271 1454 38828
+2272 1454 28720
+2273 1454 39292
+2274 1454 10689
+2275 1454 16119
+2276 1454 61363
+2322 1454 40159
+2323 1454 63418
+2324 1454 33030
+2325 1454 33030
+2327 1454 8834
+2328 1454 56907
+2329 1454 25103
+2330 1454 36448
+2331 1454 41588
+2341 1454 63609
+2388 1454 45611
+2389 1454 12601
+2390 1454 18694
+2391 1454 18694
+2392 1454 61309
+2394 1454 48324
+2395 1454 59600
+2396 1454 27754
+2397 1454 22176
+2407 1454 53866
+2418 1454 64912
+2466 1454 30647
+2467 1454 56580
+2468 1454 61347
+2469 1454 61347
+2470 1454 22231
+2471 1454 30851
+2472 1454 15863
+2473 1454 2248
+2474 1454 61413
+2475 1454 51412
+2485 1454 32769
+2496 1454 38950
+2508 1454 60742
+3965 1454 27852657
+1362 1455 1
+1416 1455 65520
+1683 1455 1
+1893 1455 21223
+1901 1455 35404
+1907 1455 62823
+1908 1455 33261
+1910 1455 10172
+1913 1455 41764
+1914 1455 41764
+1915 1455 41764
+1961 1455 30586
+1962 1455 30838
+1963 1455 49171
+1964 1455 28251
+1967 1455 42908
+1968 1455 17781
+1969 1455 17781
+1970 1455 59545
+1980 1455 17781
+2027 1455 30586
+2028 1455 30837
+2029 1455 49171
+2030 1455 28251
+2031 1455 62652
+2033 1455 42908
+2034 1455 17781
+2035 1455 17781
+2036 1455 59545
+2046 1455 35562
+2057 1455 17781
+2245 1455 58834
+2246 1455 58834
+2247 1455 13652
+2248 1455 8270
+2252 1455 30264
+2253 1455 30264
+2254 1455 50603
+2255 1455 57058
+2256 1455 30538
+2257 1455 30538
+2258 1455 39731
+2259 1455 13294
+2261 1455 56061
+2262 1455 38492
+2263 1455 38363
+2264 1455 19065
+2265 1455 31699
+2266 1455 1161
+2267 1455 27494
+2268 1455 9403
+2269 1455 13915
+2271 1455 1808
+2272 1455 55134
+2273 1455 55280
+2274 1455 65429
+2275 1455 49155
+2276 1455 47994
+2322 1455 11698
+2323 1455 1797
+2324 1455 7470
+2325 1455 12992
+2327 1455 45152
+2328 1455 26375
+2329 1455 11993
+2330 1455 33656
+2331 1455 22868
+2341 1455 40395
+2388 1455 23052
+2389 1455 40790
+2390 1455 52307
+2391 1455 18312
+2392 1455 1550
+2394 1455 39279
+2395 1455 36831
+2396 1455 34312
+2397 1455 50296
+2407 1455 24427
+2418 1455 49553
+2466 1455 55353
+2467 1455 6223
+2468 1455 48483
+2469 1455 48483
+2470 1455 18715
+2471 1455 43391
+2472 1455 39211
+2473 1455 10060
+2474 1455 22427
+2475 1455 19441
+2485 1455 65333
+2496 1455 26722
+2508 1455 13398
+3966 1455 27852657
+1363 1456 1
+2474 1456 65520
+3967 1456 27852657
+1364 1457 1
+1365 1457 1
+1414 1457 34976
+1422 1457 24806
+1423 1457 7599
+1424 1457 38144
+1626 1457 2585
+1636 1457 31230
+1687 1457 36084
+1688 1457 47570
+1689 1457 22764
+1690 1457 19134
+1691 1457 25454
+1701 1457 32368
+1905 1457 19269
+1915 1457 26427
+1980 1457 33947
+2034 1457 26994
+2035 1457 53889
+2036 1457 49039
+2046 1457 49673
+2057 1457 48094
+2255 1457 60542
+2256 1457 23497
+2257 1457 23497
+2258 1457 19175
+2259 1457 19175
+2261 1457 35436
+2262 1457 35436
+2263 1457 33521
+2264 1457 30924
+2265 1457 60937
+2266 1457 40619
+2267 1457 59234
+2268 1457 59234
+2269 1457 59234
+2271 1457 33919
+2272 1457 62765
+2273 1457 3058
+2274 1457 40480
+2275 1457 13551
+2276 1457 4092
+2322 1457 6248
+2323 1457 6248
+2324 1457 6248
+2325 1457 6248
+2327 1457 16917
+2328 1457 56035
+2329 1457 37372
+2330 1457 18647
+2331 1457 3228
+2341 1457 50709
+2388 1457 7235
+2389 1457 7235
+2390 1457 7235
+2391 1457 7235
+2392 1457 7235
+2394 1457 56668
+2395 1457 53082
+2396 1457 35607
+2397 1457 25033
+2407 1457 59401
+2418 1457 34199
+2466 1457 3782
+2467 1457 3782
+2468 1457 3782
+2469 1457 3782
+2470 1457 3782
+2471 1457 3782
+2472 1457 19507
+2473 1457 42532
+2474 1457 21362
+2475 1457 19500
+2485 1457 21602
+2496 1457 52134
+2508 1457 27671
+3968 1457 27852657
+1365 1458 1
+1414 1458 56003
+1422 1458 27205
+1423 1458 61775
+1424 1458 5772
+1626 1458 17825
+1636 1458 37327
+1688 1458 5185
+1689 1458 34049
+1690 1458 29243
+1691 1458 36150
+1701 1458 4595
+1905 1458 17224
+1915 1458 33905
+1980 1458 57426
+2035 1458 12706
+2036 1458 1038
+2046 1458 36651
+2057 1458 49341
+2247 1458 45790
+2254 1458 35643
+2255 1458 472
+2256 1458 40769
+2257 1458 40769
+2258 1458 13554
+2259 1458 54171
+2261 1458 58256
+2262 1458 55678
+2263 1458 62349
+2264 1458 34686
+2265 1458 36602
+2266 1458 34288
+2267 1458 51845
+2268 1458 10001
+2269 1458 10001
+2271 1458 35268
+2272 1458 43801
+2273 1458 4136
+2274 1458 65511
+2275 1458 45454
+2276 1458 51795
+2322 1458 23598
+2323 1458 55465
+2324 1458 55465
+2325 1458 55465
+2327 1458 21929
+2328 1458 6113
+2329 1458 39333
+2330 1458 9578
+2331 1458 36504
+2341 1458 32274
+2388 1458 61765
+2389 1458 46717
+2390 1458 46717
+2391 1458 46717
+2392 1458 39910
+2394 1458 36142
+2395 1458 22635
+2396 1458 61519
+2397 1458 63340
+2407 1458 47613
+2418 1458 24073
+2466 1458 53543
+2467 1458 26630
+2468 1458 26630
+2469 1458 26630
+2470 1458 44743
+2471 1458 64686
+2472 1458 58959
+2473 1458 1397
+2474 1458 49776
+2475 1458 24679
+2485 1458 13396
+2496 1458 64240
+2508 1458 56092
+3969 1458 27852657
+1366 1459 1
+1414 1459 46340
+1422 1459 61091
+1423 1459 54752
+1424 1459 8412
+1626 1459 5354
+1636 1459 42267
+1687 1459 60089
+1688 1459 44762
+1689 1459 49192
+1690 1459 857
+1691 1459 4187
+1701 1459 35853
+1905 1459 51035
+1915 1459 41233
+1980 1459 61375
+2034 1459 46021
+2035 1459 42880
+2036 1459 40427
+2046 1459 16879
+2057 1459 56878
+2255 1459 4979
+2256 1459 3450
+2257 1459 3450
+2258 1459 63538
+2259 1459 63538
+2261 1459 2205
+2262 1459 2205
+2263 1459 4120
+2264 1459 11164
+2265 1459 16323
+2266 1459 52590
+2267 1459 43103
+2268 1459 43103
+2269 1459 43103
+2271 1459 61323
+2272 1459 32477
+2273 1459 45765
+2274 1459 56187
+2275 1459 5271
+2276 1459 38003
+2322 1459 63778
+2323 1459 63778
+2324 1459 63778
+2325 1459 63778
+2327 1459 39503
+2328 1459 60987
+2329 1459 8597
+2330 1459 61797
+2331 1459 19635
+2341 1459 53045
+2388 1459 9947
+2389 1459 9947
+2390 1459 9947
+2391 1459 9947
+2392 1459 9947
+2394 1459 2529
+2395 1459 9125
+2396 1459 31728
+2397 1459 56512
+2407 1459 52678
+2418 1459 32237
+2466 1459 17842
+2467 1459 17842
+2468 1459 17842
+2469 1459 17842
+2470 1459 17842
+2471 1459 17842
+2472 1459 16334
+2473 1459 22889
+2474 1459 29472
+2475 1459 51527
+2485 1459 30499
+2496 1459 54740
+2508 1459 31304
+3970 1459 27852657
+1367 1460 1
+1414 1460 47830
+1422 1460 11080
+1423 1460 9788
+1424 1460 27479
+1626 1460 58544
+1636 1460 57564
+1687 1460 49634
+1688 1460 43314
+1689 1460 32234
+1690 1460 42227
+1691 1460 7963
+1701 1460 43399
+1905 1460 45773
+1915 1460 43907
+1980 1460 32989
+2034 1460 58605
+2035 1460 30182
+2036 1460 32436
+2046 1460 45955
+2057 1460 56365
+2256 1460 48714
+2257 1460 48714
+2258 1460 26177
+2259 1460 26177
+2261 1460 10824
+2262 1460 10824
+2263 1460 10824
+2264 1460 30607
+2265 1460 39151
+2266 1460 38715
+2267 1460 8738
+2268 1460 8738
+2269 1460 8738
+2271 1460 26682
+2272 1460 26682
+2273 1460 18647
+2274 1460 57458
+2275 1460 34799
+2276 1460 38146
+2322 1460 18350
+2323 1460 18350
+2324 1460 18350
+2325 1460 18350
+2327 1460 47142
+2328 1460 3447
+2329 1460 24116
+2330 1460 12315
+2331 1460 31224
+2341 1460 31963
+2388 1460 38426
+2389 1460 38426
+2390 1460 38426
+2391 1460 38426
+2392 1460 38426
+2394 1460 36172
+2395 1460 25813
+2396 1460 21564
+2397 1460 40765
+2407 1460 48670
+2418 1460 16301
+2466 1460 22559
+2467 1460 22559
+2468 1460 22559
+2469 1460 22559
+2470 1460 22559
+2471 1460 22559
+2472 1460 17953
+2473 1460 44074
+2474 1460 31553
+2475 1460 13620
+2485 1460 20890
+2496 1460 58693
+2508 1460 64954
+3971 1460 27852657
+1368 1461 1
+1369 1461 1
+1414 1461 5702
+1422 1461 17712
+1423 1461 2035
+1424 1461 61855
+1626 1461 25296
+1636 1461 2378
+1687 1461 34916
+1688 1461 35595
+1689 1461 17883
+1690 1461 51623
+1691 1461 45360
+1701 1461 39316
+1905 1461 20329
+1915 1461 49610
+1980 1461 35032
+2034 1461 21856
+2035 1461 49432
+2036 1461 30691
+2046 1461 14567
+2057 1461 18851
+2256 1461 23144
+2257 1461 23144
+2258 1461 28682
+2259 1461 28682
+2261 1461 15712
+2262 1461 15712
+2263 1461 15712
+2264 1461 13069
+2265 1461 54211
+2266 1461 48689
+2267 1461 24865
+2268 1461 24865
+2269 1461 24865
+2271 1461 1222
+2272 1461 1222
+2273 1461 55400
+2274 1461 52603
+2275 1461 10509
+2276 1461 65082
+2322 1461 15100
+2323 1461 15100
+2324 1461 15100
+2325 1461 15100
+2327 1461 45748
+2328 1461 53567
+2329 1461 49726
+2330 1461 27502
+2331 1461 44417
+2341 1461 33768
+2388 1461 46974
+2389 1461 46974
+2390 1461 46974
+2391 1461 46974
+2392 1461 46974
+2394 1461 17920
+2395 1461 64635
+2396 1461 4588
+2397 1461 61153
+2407 1461 47272
+2418 1461 28120
+2466 1461 6959
+2467 1461 6959
+2468 1461 6959
+2469 1461 6959
+2470 1461 6959
+2471 1461 6959
+2472 1461 36533
+2473 1461 29800
+2474 1461 19139
+2475 1461 30290
+2485 1461 14595
+2496 1461 57469
+2508 1461 55691
+3972 1461 27852657
+1370 1462 1
+1372 1462 65520
+1375 1462 1
+1582 1462 48077
+1584 1462 17444
+1587 1462 48077
+1591 1462 17444
+1861 1462 10591
+1863 1462 54930
+1866 1462 10591
+1870 1462 54930
+1875 1462 10591
+2222 1462 51229
+2224 1462 14292
+2227 1462 51229
+2230 1462 64807
+2231 1462 13578
+2234 1462 11085
+2235 1462 19771
+2236 1462 6193
+2241 1462 64007
+2242 1462 57814
+2247 1462 3545
+2253 1462 47843
+2254 1462 32128
+2255 1462 20710
+2256 1462 19661
+2257 1462 19661
+2258 1462 57821
+2259 1462 25161
+2261 1462 7650
+2262 1462 35344
+2263 1462 35169
+2264 1462 27856
+2265 1462 46799
+2266 1462 27138
+2267 1462 5566
+2268 1462 32002
+2269 1462 27839
+2271 1462 22376
+2272 1462 36490
+2273 1462 56045
+2274 1462 36997
+2275 1462 27407
+2276 1462 269
+2322 1462 62464
+2323 1462 22988
+2324 1462 63548
+2325 1462 25746
+2327 1462 13036
+2328 1462 58172
+2329 1462 55763
+2330 1462 47301
+2331 1462 26481
+2341 1462 26212
+2388 1462 48011
+2389 1462 30178
+2390 1462 18619
+2391 1462 27055
+2392 1462 63294
+2394 1462 31639
+2395 1462 59347
+2396 1462 34193
+2397 1462 51270
+2407 1462 57945
+2418 1462 31733
+2466 1462 29622
+2467 1462 61407
+2468 1462 29721
+2469 1462 25862
+2470 1462 26894
+2471 1462 422
+2472 1462 5700
+2473 1462 22386
+2474 1462 13125
+2475 1462 29084
+2485 1462 42128
+2496 1462 13822
+2508 1462 55940
+3973 1462 27852657
+1371 1463 1
+1372 1463 1
+1375 1463 65520
+1381 1463 30031
+1384 1463 30030
+1386 1463 30031
+1390 1463 35491
+1583 1463 1
+1584 1463 1
+1587 1463 65520
+1589 1463 59824
+1590 1463 5697
+1591 1463 5698
+1599 1463 35490
+1602 1463 5460
+1619 1463 30031
+1628 1463 30031
+1629 1463 43689
+1683 1463 30031
+1684 1463 43689
+1685 1463 43689
+1862 1463 1
+1863 1463 1
+1866 1463 65520
+1868 1463 59824
+1869 1463 5697
+1870 1463 5698
+1872 1463 59824
+1874 1463 5698
+1886 1463 60060
+1893 1463 60060
+1901 1463 60060
+1908 1463 7296
+1910 1463 31398
+1962 1463 30031
+1963 1463 50968
+1964 1463 45054
+2029 1463 7279
+2030 1463 1365
+2031 1463 61425
+2223 1463 32761
+2224 1463 32761
+2226 1463 41663
+2227 1463 8902
+2229 1463 9971
+2230 1463 54482
+2231 1463 45580
+2233 1463 9971
+2234 1463 50565
+2235 1463 45580
+2238 1463 9971
+2239 1463 50565
+2240 1463 45580
+2247 1463 64837
+2248 1463 32755
+2254 1463 64837
+2255 1463 32755
+2259 1463 48796
+2262 1463 64837
+2263 1463 32755
+2267 1463 59890
+2268 1463 56133
+2269 1463 55221
+2271 1463 17238
+2272 1463 18595
+2322 1463 59890
+2323 1463 2385
+2324 1463 64947
+2325 1463 23548
+2327 1463 23890
+2388 1463 44023
+2389 1463 28493
+2390 1463 52152
+2391 1463 53007
+2392 1463 49598
+2466 1463 12286
+2467 1463 37872
+2468 1463 16972
+2469 1463 59173
+2470 1463 65122
+2471 1463 54541
+2472 1463 60060
+2473 1463 60060
+2474 1463 60060
+2475 1463 32846
+2485 1463 21336
+2496 1463 33878
+2508 1463 53044
+3974 1463 27852657
+1372 1464 1
+1399 1464 26954
+1407 1464 38996
+1416 1464 38996
+1628 1464 65149
+1659 1464 44187
+1666 1464 56625
+1674 1464 37368
+1683 1464 31994
+1693 1464 5841
+1907 1464 45901
+1972 1464 10522
+2019 1464 15876
+2028 1464 13638
+2038 1464 20749
+2049 1464 16068
+2125 1464 28332
+2152 1464 25865
+2157 1464 16981
+2163 1464 50893
+2170 1464 50893
+2178 1464 20073
+2179 1464 9057
+2184 1464 33789
+2188 1464 19956
+2193 1464 60259
+2199 1464 57299
+2206 1464 21352
+2214 1464 35980
+2223 1464 33637
+2224 1464 36435
+2226 1464 33019
+2233 1464 33903
+2238 1464 20899
+2244 1464 47346
+2251 1464 35965
+2259 1464 7523
+2268 1464 20687
+2278 1464 58460
+2279 1464 64285
+2281 1464 29118
+2284 1464 29118
+2293 1464 8268
+2299 1464 32375
+2306 1464 52953
+2314 1464 15234
+2323 1464 42618
+2333 1464 9395
+2344 1464 7848
+2345 1464 63565
+2347 1464 41449
+2350 1464 41449
+2354 1464 60814
+2365 1464 54419
+2372 1464 18811
+2380 1464 12553
+2389 1464 60483
+2399 1464 13854
+2410 1464 46390
+2422 1464 16453
+2423 1464 49210
+2425 1464 23573
+2428 1464 23573
+2432 1464 42237
+2437 1464 28774
+2443 1464 14960
+2450 1464 24310
+2458 1464 23118
+2467 1464 17336
+2477 1464 59527
+2488 1464 34371
+2500 1464 41592
+3975 1464 27852657
+1373 1465 1
+1374 1465 1
+1375 1465 1
+1585 1465 1
+1586 1465 1
+1587 1465 1
+1588 1465 1
+1589 1465 1
+1590 1465 2
+1591 1465 1
+1864 1465 1
+1865 1465 1
+1866 1465 1
+1867 1465 1
+1868 1465 1
+1869 1465 2
+1870 1465 1
+1871 1465 1
+1872 1465 1
+1873 1465 2
+1874 1465 2
+1875 1465 1
+2225 1465 32761
+2226 1465 32761
+2227 1465 32761
+2228 1465 32761
+2229 1465 32761
+2230 1465 1
+2231 1465 32761
+2232 1465 32761
+2233 1465 32761
+2234 1465 1
+2235 1465 1
+2236 1465 32761
+2237 1465 32761
+2238 1465 32761
+2239 1465 1
+2240 1465 1
+2241 1465 1
+2242 1465 32761
+2466 1465 24572
+2467 1465 24572
+2468 1465 49144
+2469 1465 49143
+2470 1465 49142
+2471 1465 49141
+2508 1465 8190
+3976 1465 27852657
+1374 1466 1
+1375 1466 1
+1586 1466 1
+1587 1466 1
+1589 1466 5698
+1590 1466 59824
+1591 1466 59823
+1865 1466 1
+1866 1466 1
+1868 1466 5698
+1869 1466 59824
+1870 1466 59823
+1872 1466 5698
+1874 1466 59823
+2226 1466 56619
+2227 1466 56619
+2229 1466 22790
+2230 1466 11039
+2231 1466 19941
+2233 1466 22790
+2234 1466 14956
+2235 1466 19941
+2238 1466 22790
+2239 1466 14956
+2240 1466 19941
+2467 1466 53415
+2468 1466 30803
+2469 1466 36321
+3977 1466 27852657
+1375 1467 1
+1642 1467 65520
+1789 1467 9853
+1793 1467 23304
+1828 1467 49085
+1866 1467 25700
+1873 1467 15471
+1891 1467 54419
+1899 1467 54419
+1908 1467 54419
+1919 1467 34666
+1920 1467 34666
+1921 1467 42740
+1924 1467 15027
+1939 1467 20606
+1946 1467 2942
+1954 1467 2942
+1963 1467 57361
+1973 1467 2942
+1985 1467 34666
+1986 1467 34666
+1987 1467 42741
+1990 1467 15027
+1994 1467 49491
+2005 1467 20606
+2012 1467 2942
+2020 1467 2942
+2029 1467 57361
+2039 1467 5884
+2050 1467 2942
+2119 1467 58834
+2122 1467 43196
+2126 1467 57087
+2131 1467 42246
+2146 1467 29440
+2149 1467 6014
+2153 1467 19905
+2158 1467 9327
+2164 1467 194
+2171 1467 194
+2180 1467 267
+2181 1467 267
+2185 1467 54733
+2189 1467 60513
+2194 1467 4826
+2200 1467 24884
+2207 1467 53783
+2215 1467 53589
+2225 1467 36439
+2226 1467 36439
+2227 1467 16090
+2234 1467 49686
+2239 1467 8717
+2245 1467 57145
+2252 1467 51126
+2260 1467 6979
+2269 1467 18911
+2280 1467 57614
+2281 1467 57614
+2282 1467 38426
+2285 1467 1757
+2294 1467 47778
+2300 1467 25470
+2307 1467 30221
+2315 1467 14804
+2324 1467 37070
+2334 1467 18159
+2346 1467 60454
+2347 1467 60454
+2348 1467 7835
+2351 1467 44264
+2355 1467 47567
+2366 1467 50250
+2373 1467 54694
+2381 1467 31850
+2390 1467 38473
+2400 1467 20655
+2411 1467 2496
+2424 1467 30867
+2425 1467 30867
+2426 1467 55661
+2429 1467 60892
+2433 1467 6037
+2438 1467 63125
+2444 1467 3770
+2451 1467 54328
+2459 1467 48894
+2468 1467 33314
+2478 1467 17946
+2489 1467 41377
+2501 1467 11644
+3978 1467 27852657
+1376 1468 1
+1378 1468 62791
+1379 1468 62791
+1382 1468 30888
+1383 1468 39541
+1384 1468 42271
+1389 1468 36936
+1390 1468 60186
+1395 1468 39425
+1401 1468 27653
+1402 1468 15843
+1403 1468 46903
+1404 1468 4872
+1405 1468 4872
+1406 1468 55486
+1407 1468 9
+1409 1468 17288
+1410 1468 1617
+1411 1468 37846
+1412 1468 46571
+1413 1468 32187
+1414 1468 27315
+1415 1468 19335
+1416 1468 4641
+1417 1468 13028
+1419 1468 3625
+1420 1468 24318
+1421 1468 42119
+1422 1468 55663
+1423 1468 60616
+1424 1468 33301
+1627 1468 6621
+1628 1468 22735
+1629 1468 65163
+1630 1468 6829
+1632 1468 17640
+1633 1468 28535
+1634 1468 12588
+1635 1468 64691
+1636 1468 29475
+1691 1468 61695
+1906 1468 60603
+1907 1468 41951
+1908 1468 20250
+1909 1468 21571
+1910 1468 5488
+1912 1468 9823
+1913 1468 51726
+1914 1468 56057
+1915 1468 8437
+1970 1468 45655
+2036 1468 49481
+2267 1468 26065
+2268 1468 38288
+2269 1468 727
+2270 1468 21421
+2271 1468 24253
+2272 1468 28441
+2273 1468 28149
+2274 1468 53735
+2275 1468 48921
+2276 1468 31396
+2331 1468 37558
+2397 1468 4988
+2475 1468 53306
+3979 1468 27852657
+1377 1469 1
+1378 1469 65503
+1379 1469 65503
+1382 1469 25719
+1383 1469 45224
+1384 1469 45242
+1389 1469 31961
+1390 1469 52240
+1395 1469 15152
+1401 1469 42174
+1402 1469 60071
+1403 1469 30073
+1404 1469 52424
+1405 1469 52424
+1406 1469 43333
+1407 1469 18724
+1409 1469 19686
+1410 1469 48293
+1411 1469 45911
+1412 1469 18625
+1413 1469 37761
+1414 1469 50858
+1415 1469 4756
+1416 1469 20561
+1417 1469 54445
+1419 1469 54605
+1420 1469 59265
+1421 1469 65095
+1422 1469 3471
+1423 1469 30502
+1424 1469 45165
+1627 1469 59081
+1628 1469 50578
+1629 1469 28183
+1630 1469 21081
+1632 1469 62975
+1633 1469 18140
+1634 1469 56318
+1635 1469 9011
+1636 1469 62469
+1691 1469 17304
+1906 1469 4144
+1907 1469 1493
+1908 1469 6416
+1909 1469 3829
+1910 1469 63366
+1912 1469 59254
+1913 1469 54602
+1914 1469 56025
+1915 1469 7913
+1970 1469 54315
+2036 1469 37011
+2267 1469 20371
+2268 1469 21109
+2269 1469 49154
+2270 1469 64041
+2271 1469 5349
+2272 1469 10805
+2273 1469 48511
+2274 1469 40304
+2275 1469 21243
+2276 1469 58876
+2331 1469 65112
+2397 1469 58516
+2475 1469 33933
+3980 1469 27852657
+1378 1470 1
+1645 1470 65520
+1790 1470 9853
+1794 1470 23304
+1829 1470 49085
+1869 1470 25700
+1874 1470 15471
+1892 1470 54419
+1900 1470 54419
+1909 1470 54419
+1922 1470 34666
+1923 1470 34666
+1924 1470 42740
+1925 1470 15027
+1940 1470 20606
+1947 1470 2942
+1955 1470 2942
+1964 1470 57361
+1974 1470 2942
+1988 1470 34666
+1989 1470 34666
+1990 1470 42741
+1991 1470 15027
+1995 1470 49491
+2006 1470 20606
+2013 1470 2942
+2021 1470 2942
+2030 1470 57361
+2040 1470 5884
+2051 1470 2942
+2122 1470 58834
+2123 1470 43196
+2127 1470 57087
+2132 1470 42246
+2149 1470 29440
+2150 1470 6014
+2154 1470 19905
+2159 1470 9327
+2165 1470 194
+2172 1470 194
+2183 1470 267
+2184 1470 267
+2186 1470 54733
+2190 1470 60513
+2195 1470 4826
+2201 1470 24884
+2208 1470 53783
+2216 1470 53589
+2228 1470 36439
+2229 1470 36439
+2230 1470 16090
+2235 1470 49686
+2240 1470 8717
+2246 1470 57145
+2253 1470 51126
+2261 1470 6979
+2270 1470 18911
+2283 1470 57614
+2284 1470 57614
+2285 1470 38426
+2286 1470 1757
+2295 1470 47778
+2301 1470 25470
+2308 1470 30221
+2316 1470 14804
+2325 1470 37070
+2335 1470 18159
+2349 1470 60454
+2350 1470 60454
+2351 1470 7835
+2352 1470 44264
+2356 1470 47567
+2367 1470 50250
+2374 1470 54694
+2382 1470 31850
+2391 1470 38473
+2401 1470 20655
+2412 1470 2496
+2427 1470 30867
+2428 1470 30867
+2429 1470 55661
+2430 1470 60892
+2434 1470 6037
+2439 1470 63125
+2445 1470 3770
+2452 1470 54328
+2460 1470 48894
+2469 1470 33314
+2479 1470 17946
+2490 1470 41377
+2502 1470 11644
+3981 1470 27852657
+1379 1471 1
+2469 1471 65520
+3982 1471 27852657
+1380 1472 1
+1381 1472 1
+1384 1472 1
+1385 1472 1
+1386 1472 1
+1390 1472 65520
+1599 1472 65520
+1602 1472 65519
+1629 1472 16361
+1684 1472 16361
+1685 1472 16361
+1886 1472 2
+1893 1472 2
+1901 1472 2
+1908 1472 43644
+1910 1472 32755
+1963 1472 60047
+1964 1472 16367
+2029 1472 43686
+2030 1472 6
+2031 1472 8
+2247 1472 49144
+2248 1472 12
+2254 1472 49144
+2255 1472 12
+2262 1472 49144
+2263 1472 12
+2267 1472 61427
+2268 1472 61427
+2269 1472 39595
+2271 1472 4085
+2272 1472 36863
+2322 1472 36855
+2323 1472 36855
+2324 1472 35497
+2325 1472 24581
+2327 1472 20470
+2388 1472 8183
+2389 1472 8183
+2390 1472 51869
+2391 1472 35490
+2392 1472 19102
+2466 1472 12285
+2467 1472 12285
+2468 1472 32759
+2469 1472 15014
+2470 1472 39585
+2471 1472 15017
+2472 1472 2
+2473 1472 2
+2474 1472 2
+2475 1472 59378
+2485 1472 39911
+2496 1472 16365
+2508 1472 36009
+3983 1472 27852657
+1381 1473 1
+1602 1473 43000
+1873 1473 63048
+1874 1473 64651
+1875 1473 64651
+1893 1473 25004
+1901 1473 64940
+1907 1473 23552
+1908 1473 30927
+1910 1473 61894
+1913 1473 6979
+1914 1473 6979
+1915 1473 6979
+1961 1473 36754
+1962 1473 22264
+1963 1473 25769
+1964 1473 31734
+1967 1473 32671
+1968 1473 47246
+1969 1473 47246
+1970 1473 54225
+1980 1473 47246
+2027 1473 36754
+2028 1473 22264
+2029 1473 25769
+2030 1473 31734
+2031 1473 59183
+2033 1473 32671
+2034 1473 47246
+2035 1473 47246
+2036 1473 54225
+2046 1473 28971
+2057 1473 47246
+2223 1473 20906
+2224 1473 20906
+2225 1473 20560
+2226 1473 5452
+2227 1473 50067
+2228 1473 37311
+2229 1473 8549
+2230 1473 45513
+2231 1473 60967
+2232 1473 37311
+2233 1473 8549
+2234 1473 60453
+2235 1473 35649
+2236 1473 40203
+2237 1473 3989
+2238 1473 55845
+2239 1473 8429
+2240 1473 51863
+2241 1473 7489
+2242 1473 32807
+2245 1473 64456
+2246 1473 57717
+2247 1473 11741
+2248 1473 9451
+2252 1473 22065
+2253 1473 15326
+2254 1473 34871
+2255 1473 19939
+2256 1473 15544
+2257 1473 15544
+2258 1473 30876
+2259 1473 11104
+2261 1473 7106
+2262 1473 61999
+2263 1473 13647
+2264 1473 53827
+2265 1473 18695
+2266 1473 3151
+2267 1473 14800
+2268 1473 32236
+2269 1473 2
+2271 1473 60304
+2272 1473 62607
+2273 1473 1084
+2274 1473 35848
+2275 1473 61469
+2276 1473 58318
+2322 1473 45154
+2323 1473 28429
+2324 1473 30782
+2325 1473 16957
+2327 1473 52986
+2328 1473 547
+2329 1473 57212
+2330 1473 55375
+2331 1473 63060
+2341 1473 4742
+2388 1473 20857
+2389 1473 40611
+2390 1473 16616
+2391 1473 54779
+2392 1473 40472
+2394 1473 29604
+2395 1473 7489
+2396 1473 3151
+2397 1473 56139
+2407 1473 43941
+2418 1473 39199
+2466 1473 7483
+2467 1473 550
+2468 1473 27256
+2469 1473 44963
+2470 1473 42678
+2471 1473 45213
+2472 1473 11460
+2473 1473 17532
+2474 1473 10190
+2475 1473 63886
+2485 1473 34955
+2496 1473 29912
+2508 1473 49568
+3984 1473 27852657
+1382 1474 1
+1387 1474 1
+1599 1474 1
+1871 1474 65519
+1872 1474 65519
+1873 1474 65519
+1874 1474 65519
+1875 1474 65519
+2232 1474 21840
+2233 1474 21840
+2234 1474 21840
+2235 1474 21840
+2236 1474 21840
+2237 1474 21840
+2238 1474 21840
+2239 1474 21840
+2240 1474 21840
+2241 1474 43680
+2242 1474 21840
+2269 1474 43681
+2324 1474 43681
+2325 1474 54601
+2390 1474 43681
+2391 1474 54601
+2392 1474 32760
+2466 1474 35490
+2467 1474 35490
+2468 1474 47776
+2470 1474 40949
+2471 1474 40951
+2508 1474 19793
+3985 1474 27852657
+1383 1475 1
+2470 1475 65520
+3986 1475 27852657
+1384 1476 1
+1390 1476 65520
+1602 1476 1497
+1873 1476 684
+1874 1476 59789
+1875 1476 59789
+1893 1476 52908
+1901 1476 61210
+1907 1476 54280
+1908 1476 53509
+1910 1476 8622
+1913 1476 20707
+1914 1476 20707
+1915 1476 20707
+1961 1476 33689
+1962 1476 34913
+1963 1476 61526
+1964 1476 11010
+1967 1476 18003
+1968 1476 58902
+1969 1476 58902
+1970 1476 14088
+1980 1476 58902
+2027 1476 33689
+2028 1476 34913
+2029 1476 61526
+2030 1476 11010
+2031 1476 19922
+2033 1476 18003
+2034 1476 58902
+2035 1476 58902
+2036 1476 14088
+2046 1476 52283
+2057 1476 58902
+2223 1476 23340
+2224 1476 23340
+2225 1476 49105
+2226 1476 12189
+2227 1476 54370
+2228 1476 28066
+2229 1476 31922
+2230 1476 3934
+2231 1476 15085
+2232 1476 28066
+2233 1476 31922
+2234 1476 9725
+2235 1476 5267
+2236 1476 55703
+2237 1476 56763
+2238 1476 19367
+2239 1476 61284
+2240 1476 121
+2241 1476 33114
+2242 1476 42932
+2245 1476 33194
+2246 1476 12774
+2247 1476 46524
+2248 1476 43732
+2252 1476 14177
+2253 1476 59278
+2254 1476 27507
+2255 1476 474
+2256 1476 29924
+2257 1476 29924
+2258 1476 41717
+2259 1476 20776
+2261 1476 58375
+2262 1476 43153
+2263 1476 6239
+2264 1476 64504
+2265 1476 62335
+2266 1476 32411
+2267 1476 30882
+2268 1476 6009
+2269 1476 51127
+2271 1476 15988
+2272 1476 13996
+2273 1476 56209
+2274 1476 37333
+2275 1476 58901
+2276 1476 26490
+2322 1476 51558
+2323 1476 52645
+2324 1476 39228
+2325 1476 779
+2327 1476 53043
+2328 1476 33185
+2329 1476 64902
+2330 1476 3948
+2331 1476 33998
+2341 1476 7508
+2388 1476 28911
+2389 1476 34582
+2390 1476 7263
+2391 1476 62747
+2392 1476 39345
+2394 1476 28133
+2395 1476 47027
+2396 1476 11743
+2397 1476 17407
+2407 1476 29888
+2418 1476 22380
+2466 1476 13828
+2467 1476 11520
+2468 1476 60725
+2469 1476 25170
+2470 1476 65298
+2471 1476 27675
+2472 1476 16957
+2473 1476 39030
+2474 1476 49849
+2475 1476 9816
+2485 1476 19681
+2496 1476 34007
+2508 1476 63918
+3987 1476 27852657
+1385 1477 1
+1602 1477 48416
+1873 1477 34704
+1874 1477 26436
+1875 1477 26436
+1893 1477 11049
+1901 1477 46316
+1907 1477 56895
+1908 1477 45039
+1910 1477 56663
+1913 1477 59350
+1914 1477 59350
+1915 1477 59350
+1961 1477 57938
+1962 1477 53275
+1963 1477 13474
+1964 1477 1296
+1967 1477 47455
+1968 1477 32963
+1969 1477 32963
+1970 1477 26792
+1980 1477 32963
+2027 1477 57938
+2028 1477 53275
+2029 1477 13474
+2030 1477 1296
+2031 1477 52792
+2033 1477 47455
+2034 1477 32963
+2035 1477 32963
+2036 1477 26792
+2046 1477 405
+2057 1477 32963
+2223 1477 56547
+2224 1477 56547
+2225 1477 18877
+2226 1477 11500
+2227 1477 20474
+2228 1477 10106
+2229 1477 43669
+2230 1477 34072
+2231 1477 13598
+2232 1477 10106
+2233 1477 43669
+2234 1477 7181
+2235 1477 63771
+2236 1477 50173
+2237 1477 12259
+2238 1477 19667
+2239 1477 11798
+2240 1477 57037
+2241 1477 44694
+2242 1477 60042
+2245 1477 11649
+2246 1477 48078
+2247 1477 16189
+2248 1477 60749
+2252 1477 46035
+2253 1477 16943
+2254 1477 50575
+2255 1477 10613
+2256 1477 36554
+2257 1477 36554
+2258 1477 49122
+2259 1477 13526
+2261 1477 2031
+2262 1477 4304
+2263 1477 26029
+2264 1477 58740
+2265 1477 47139
+2266 1477 10585
+2267 1477 57037
+2268 1477 23310
+2269 1477 65245
+2271 1477 33512
+2272 1477 28398
+2273 1477 5013
+2274 1477 57955
+2275 1477 41948
+2276 1477 31363
+2322 1477 63399
+2323 1477 21941
+2324 1477 35543
+2325 1477 30441
+2327 1477 7819
+2328 1477 27659
+2329 1477 11523
+2330 1477 514
+2331 1477 2567
+2341 1477 36725
+2388 1477 3632
+2389 1477 48456
+2390 1477 44006
+2391 1477 37432
+2392 1477 3566
+2394 1477 57557
+2395 1477 48513
+2396 1477 2597
+2397 1477 46605
+2407 1477 63813
+2418 1477 27088
+2466 1477 43124
+2467 1477 335
+2468 1477 44576
+2469 1477 20040
+2470 1477 14655
+2471 1477 44572
+2472 1477 55338
+2473 1477 6765
+2474 1477 56043
+2475 1477 49660
+2485 1477 9465
+2496 1477 29
+2508 1477 17287
+3988 1477 27852657
+1386 1478 1
+1602 1478 15228
+1873 1478 43314
+1874 1478 26838
+1875 1478 26838
+1893 1478 11497
+1901 1478 48360
+1907 1478 8626
+1908 1478 59094
+1910 1478 50549
+1913 1478 62994
+1914 1478 62994
+1915 1478 62994
+1961 1478 64547
+1962 1478 10956
+1963 1478 42790
+1964 1478 63466
+1967 1478 30653
+1968 1478 60712
+1969 1478 60712
+1970 1478 58185
+1980 1478 60712
+2027 1478 64547
+2028 1478 10956
+2029 1478 42790
+2030 1478 63466
+2031 1478 48392
+2033 1478 30653
+2034 1478 60712
+2035 1478 60712
+2036 1478 58185
+2046 1478 55903
+2057 1478 60712
+2223 1478 4809
+2224 1478 4809
+2225 1478 47592
+2226 1478 22589
+2227 1478 17780
+2228 1478 2566
+2229 1478 41247
+2230 1478 42056
+2231 1478 24276
+2232 1478 2566
+2233 1478 41247
+2234 1478 43083
+2235 1478 29878
+2236 1478 5602
+2237 1478 7191
+2238 1478 6506
+2239 1478 52676
+2240 1478 31701
+2241 1478 63088
+2242 1478 57486
+2245 1478 52094
+2246 1478 28531
+2247 1478 22682
+2248 1478 49550
+2252 1478 19079
+2253 1478 61037
+2254 1478 55188
+2255 1478 47892
+2256 1478 62581
+2257 1478 62581
+2258 1478 4358
+2259 1478 46061
+2261 1478 49531
+2262 1478 20587
+2263 1478 47239
+2264 1478 5433
+2265 1478 25489
+2266 1478 28429
+2267 1478 18569
+2268 1478 58403
+2269 1478 17365
+2271 1478 49737
+2272 1478 1863
+2273 1478 52963
+2274 1478 8673
+2275 1478 43540
+2276 1478 15111
+2322 1478 27217
+2323 1478 14263
+2324 1478 58512
+2325 1478 8280
+2327 1478 19972
+2328 1478 40318
+2329 1478 34966
+2330 1478 47978
+2331 1478 35018
+2341 1478 19907
+2388 1478 51625
+2389 1478 52637
+2390 1478 2536
+2391 1478 15772
+2392 1478 59822
+2394 1478 29063
+2395 1478 34241
+2396 1478 39258
+2397 1478 19928
+2407 1478 7425
+2418 1478 53039
+2466 1478 37342
+2467 1478 22988
+2468 1478 35680
+2469 1478 25695
+2470 1478 54973
+2471 1478 42837
+2472 1478 55891
+2473 1478 64693
+2474 1478 45746
+2475 1478 40038
+2485 1478 59355
+2496 1478 5783
+2508 1478 16280
+3989 1478 27852657
+1387 1479 1
+1588 1479 65520
+1589 1479 4601
+1590 1479 30678
+1591 1479 30678
+1599 1479 1
+1867 1479 65520
+1868 1479 4601
+1869 1479 30678
+1870 1479 30678
+1872 1479 4602
+1873 1479 55441
+1874 1479 30678
+1908 1479 53758
+1963 1479 53758
+1964 1479 15116
+2029 1479 53758
+2030 1479 15116
+2031 1479 15116
+2223 1479 5041
+2224 1479 5041
+2225 1479 49141
+2226 1479 40376
+2227 1479 35335
+2228 1479 20160
+2229 1479 53688
+2230 1479 43881
+2231 1479 8546
+2232 1479 9240
+2233 1479 42768
+2234 1479 47150
+2235 1479 45506
+2236 1479 36960
+2237 1479 9240
+2238 1479 42768
+2239 1479 50930
+2240 1479 27865
+2241 1479 61320
+2242 1479 24360
+2269 1479 63417
+2324 1479 63417
+2325 1479 20568
+2390 1479 24988
+2391 1479 36536
+2392 1479 14696
+2466 1479 27300
+2467 1479 51227
+2468 1479 50132
+2469 1479 57266
+2470 1479 26041
+2471 1479 15646
+2496 1479 63312
+2508 1479 43544
+3990 1479 27852657
+1388 1480 1
+1389 1480 58625
+1390 1480 58625
+1395 1480 55634
+1401 1480 64275
+1402 1480 15570
+1403 1480 29124
+1404 1480 51217
+1405 1480 51217
+1406 1480 13107
+1407 1480 36174
+1409 1480 40100
+1410 1480 57832
+1411 1480 10314
+1412 1480 30673
+1413 1480 12012
+1414 1480 26316
+1415 1480 13794
+1416 1480 45490
+1417 1480 45490
+1419 1480 10569
+1420 1480 16405
+1421 1480 54955
+1422 1480 4621
+1423 1480 22143
+1424 1480 61348
+1627 1480 48612
+1628 1480 60162
+1629 1480 60162
+1630 1480 46881
+1632 1480 45909
+1633 1480 5978
+1634 1480 62848
+1635 1480 7017
+1636 1480 39555
+1691 1480 43728
+1906 1480 60919
+1907 1480 64670
+1908 1480 64670
+1909 1480 26612
+1910 1480 3030
+1912 1480 52523
+1913 1480 33011
+1914 1480 34500
+1915 1480 20355
+1970 1480 28024
+2036 1480 49817
+2267 1480 31410
+2268 1480 7226
+2269 1480 7226
+2270 1480 46412
+2271 1480 45069
+2272 1480 22759
+2273 1480 58383
+2274 1480 17340
+2275 1480 10377
+2276 1480 35018
+2331 1480 30736
+2397 1480 13440
+2475 1480 58577
+3991 1480 27852657
+1389 1481 1
+1390 1481 1
+1602 1481 1
+1629 1481 32766
+1684 1481 32766
+1685 1481 32766
+1886 1481 65520
+1893 1481 65520
+1901 1481 65520
+1908 1481 10
+1910 1481 2
+1963 1481 32764
+1964 1481 32764
+2029 1481 65519
+2030 1481 65519
+2031 1481 65518
+2247 1481 40949
+2248 1481 65515
+2254 1481 40949
+2255 1481 65515
+2262 1481 40949
+2263 1481 65515
+2269 1481 16377
+2271 1481 8195
+2272 1481 57327
+2324 1481 57328
+2325 1481 57328
+2327 1481 8191
+2390 1481 8188
+2391 1481 8188
+2392 1481 16382
+2468 1481 53236
+2469 1481 53236
+2470 1481 40951
+2471 1481 53235
+2472 1481 65520
+2473 1481 65520
+2474 1481 65520
+2475 1481 12285
+2485 1481 14337
+2496 1481 32763
+2508 1481 19446
+3992 1481 27852657
+1390 1482 1
+1403 1482 47936
+1411 1482 54446
+1420 1482 54446
+1632 1482 6054
+1657 1482 44904
+1663 1482 21074
+1670 1482 38659
+1678 1482 42584
+1687 1482 7857
+1697 1482 56249
+1911 1482 4930
+1976 1482 12225
+2015 1482 65362
+2023 1482 30235
+2032 1482 60653
+2042 1482 42735
+2053 1482 21238
+2161 1482 52772
+2167 1482 23705
+2174 1482 23705
+2192 1482 6772
+2193 1482 6772
+2195 1482 38365
+2196 1482 38365
+2197 1482 36606
+2203 1482 55125
+2210 1482 6502
+2218 1482 48318
+2237 1482 38131
+2238 1482 38131
+2239 1482 38131
+2241 1482 18827
+2242 1482 30071
+2248 1482 54745
+2255 1482 15666
+2263 1482 21438
+2272 1482 44236
+2292 1482 47188
+2293 1482 47188
+2294 1482 47188
+2295 1482 47188
+2297 1482 65314
+2303 1482 61667
+2310 1482 12871
+2318 1482 64435
+2327 1482 48676
+2337 1482 21518
+2358 1482 50154
+2359 1482 50154
+2360 1482 50154
+2361 1482 50154
+2362 1482 50154
+2369 1482 32423
+2376 1482 47591
+2384 1482 24698
+2393 1482 42610
+2403 1482 51315
+2414 1482 29406
+2436 1482 3731
+2437 1482 3731
+2438 1482 3731
+2439 1482 3731
+2440 1482 3731
+2441 1482 3731
+2447 1482 14782
+2454 1482 6426
+2462 1482 10974
+2471 1482 589
+2481 1482 19958
+2492 1482 5374
+2504 1482 62906
+3993 1482 27852657
+1391 1483 1
+2475 1483 65520
+3994 1483 27852657
+1392 1484 1
+1393 1484 1
+1394 1484 1
+1395 1484 1
+1396 1484 1
+1400 1484 1
+1401 1484 1
+1402 1484 1
+1403 1484 1
+1409 1484 1
+1410 1484 1
+1411 1484 1
+1419 1484 1
+1420 1484 1
+1632 1484 1
+2273 1484 32761
+2274 1484 32761
+2275 1484 32761
+2276 1484 32761
+2331 1484 32761
+2397 1484 32761
+2475 1484 24573
+3995 1484 27852657
+1393 1485 1
+1417 1485 1
+1605 1485 1
+1613 1485 65520
+1629 1485 2
+1684 1485 1
+1884 1485 1
+1886 1485 32759
+1892 1485 65520
+1893 1485 32758
+1901 1485 32759
+1908 1485 1
+1910 1485 32760
+1963 1485 1
+1964 1485 32759
+2030 1485 32759
+2031 1485 65518
+2245 1485 8195
+2246 1485 12289
+2247 1485 40952
+2248 1485 40952
+2252 1485 40955
+2253 1485 45049
+2254 1485 8191
+2255 1485 8191
+2261 1485 23209
+2262 1485 51872
+2263 1485 51872
+2269 1485 16378
+2271 1485 40952
+2272 1485 40952
+2324 1485 16378
+2325 1485 12280
+2327 1485 40952
+2390 1485 45044
+2391 1485 28663
+2392 1485 40954
+2468 1485 63473
+2469 1485 38903
+2470 1485 53236
+2471 1485 53236
+2472 1485 32762
+2473 1485 8190
+2474 1485 20476
+2475 1485 2732
+2485 1485 2732
+2496 1485 29347
+2508 1485 59382
+3996 1485 27852657
+1394 1486 1
+1395 1486 57589
+1401 1486 26020
+1402 1486 22286
+1403 1486 14366
+1404 1486 57570
+1405 1486 57570
+1406 1486 7814
+1407 1486 24449
+1409 1486 36151
+1410 1486 31012
+1411 1486 53853
+1412 1486 6662
+1413 1486 34880
+1414 1486 42831
+1415 1486 65470
+1416 1486 52325
+1417 1486 52325
+1419 1486 57470
+1420 1486 43430
+1421 1486 31637
+1422 1486 34779
+1423 1486 54413
+1424 1486 11582
+1627 1486 22247
+1628 1486 58697
+1629 1486 58697
+1630 1486 19109
+1632 1486 46787
+1633 1486 25087
+1634 1486 45373
+1635 1486 43376
+1636 1486 53982
+1691 1486 42400
+1906 1486 54026
+1907 1486 28423
+1908 1486 28423
+1909 1486 31973
+1910 1486 29874
+1912 1486 29149
+1913 1486 62547
+1914 1486 23177
+1915 1486 9621
+1970 1486 33569
+2036 1486 56690
+2267 1486 44831
+2268 1486 23820
+2269 1486 23820
+2270 1486 15271
+2271 1486 44244
+2272 1486 60014
+2273 1486 47262
+2274 1486 22343
+2275 1486 44069
+2276 1486 60873
+2331 1486 4112
+2397 1486 64382
+2475 1486 17319
+3997 1486 27852657
+1395 1487 1
+1396 1487 1
+1615 1487 65520
+1624 1487 19780
+1625 1487 19780
+1626 1487 19780
+1633 1487 19780
+1634 1487 19780
+1635 1487 39560
+1636 1487 19780
+1688 1487 19780
+1689 1487 19780
+1690 1487 39560
+1691 1487 39560
+1701 1487 19780
+1895 1487 40987
+1896 1487 40987
+1903 1487 60767
+1904 1487 36233
+1905 1487 60767
+1910 1487 46788
+1912 1487 60767
+1913 1487 16453
+1914 1487 36233
+1915 1487 40987
+1967 1487 49640
+1968 1487 5326
+1969 1487 44886
+1970 1487 25106
+1980 1487 49640
+2033 1487 29860
+2034 1487 51067
+2035 1487 5326
+2036 1487 51067
+2046 1487 39940
+2057 1487 10080
+2256 1487 14213
+2257 1487 14213
+2264 1487 14835
+2265 1487 29051
+2266 1487 14838
+2271 1487 26278
+2272 1487 26278
+2273 1487 43816
+2274 1487 58340
+2275 1487 35474
+2276 1487 20636
+2327 1487 48118
+2328 1487 10844
+2329 1487 25368
+2330 1487 45461
+2331 1487 51262
+2341 1487 30626
+2394 1487 34649
+2395 1487 53686
+2396 1487 8258
+2397 1487 4791
+2407 1487 29921
+2418 1487 64816
+2472 1487 27713
+2473 1487 24353
+2474 1487 18869
+2475 1487 43492
+2485 1487 34372
+2496 1487 64400
+2508 1487 41957
+3998 1487 27852657
+1396 1488 1
+1910 1488 17472
+1913 1488 41439
+1914 1488 41439
+1915 1488 41439
+1961 1488 17998
+1962 1488 17998
+1963 1488 17998
+1964 1488 17998
+1967 1488 50846
+1968 1488 30270
+1969 1488 30270
+1970 1488 6188
+1980 1488 30270
+2027 1488 17998
+2028 1488 17998
+2029 1488 17998
+2030 1488 17998
+2031 1488 17998
+2033 1488 50846
+2034 1488 30270
+2035 1488 30270
+2036 1488 6188
+2046 1488 60540
+2057 1488 30270
+2248 1488 56197
+2252 1488 12146
+2253 1488 12146
+2254 1488 12146
+2255 1488 60256
+2256 1488 35444
+2257 1488 35444
+2258 1488 53713
+2259 1488 53713
+2261 1488 22699
+2262 1488 22699
+2263 1488 37067
+2264 1488 47619
+2265 1488 37753
+2266 1488 2309
+2267 1488 9583
+2268 1488 9583
+2269 1488 9583
+2271 1488 4580
+2272 1488 31075
+2273 1488 63592
+2274 1488 49854
+2275 1488 22351
+2276 1488 20042
+2322 1488 15977
+2323 1488 15977
+2324 1488 15977
+2325 1488 15977
+2327 1488 20658
+2328 1488 51983
+2329 1488 63537
+2330 1488 56480
+2331 1488 47930
+2341 1488 27888
+2388 1488 47476
+2389 1488 47476
+2390 1488 47476
+2391 1488 47476
+2392 1488 47476
+2394 1488 42475
+2395 1488 57959
+2396 1488 21498
+2397 1488 7475
+2407 1488 21898
+2418 1488 59531
+2466 1488 55749
+2467 1488 55749
+2468 1488 55749
+2469 1488 55749
+2470 1488 55749
+2471 1488 57303
+2472 1488 26529
+2473 1488 13041
+2474 1488 25785
+2475 1488 3172
+2485 1488 45806
+2496 1488 11260
+2508 1488 40362
+3999 1488 27852657
+1397 1489 1
+1405 1489 65520
+1414 1489 1
+1422 1489 25194
+1423 1489 49194
+1424 1489 49193
+1609 1489 7799
+1617 1489 57722
+1626 1489 7799
+1636 1489 44898
+1688 1489 270
+1689 1489 33706
+1690 1489 63656
+1691 1489 19475
+1701 1489 23770
+1888 1489 25243
+1896 1489 40278
+1905 1489 25243
+1915 1489 34381
+1980 1489 11888
+2035 1489 44516
+2036 1489 51766
+2046 1489 47867
+2057 1489 59749
+2249 1489 44736
+2256 1489 14447
+2257 1489 35232
+2258 1489 42720
+2259 1489 42720
+2261 1489 5103
+2262 1489 5103
+2263 1489 5103
+2264 1489 19757
+2265 1489 46798
+2266 1489 11566
+2267 1489 7059
+2268 1489 7059
+2269 1489 7059
+2271 1489 25712
+2272 1489 25712
+2273 1489 26472
+2274 1489 12379
+2275 1489 29683
+2276 1489 64629
+2322 1489 1072
+2323 1489 1072
+2324 1489 1072
+2325 1489 1072
+2327 1489 40315
+2328 1489 31177
+2329 1489 59146
+2330 1489 24606
+2331 1489 40750
+2341 1489 900
+2388 1489 47299
+2389 1489 47299
+2390 1489 47299
+2391 1489 47299
+2392 1489 47299
+2394 1489 857
+2395 1489 53867
+2396 1489 30710
+2397 1489 6488
+2407 1489 64549
+2418 1489 48406
+2466 1489 31354
+2467 1489 31354
+2468 1489 31354
+2469 1489 31354
+2470 1489 31354
+2471 1489 31354
+2472 1489 27680
+2473 1489 34326
+2474 1489 23519
+2475 1489 25789
+2485 1489 10321
+2496 1489 40165
+2508 1489 23344
+4000 1489 27852657
+1398 1490 1
+1406 1490 1
+1407 1490 1
+1415 1490 1
+1416 1490 1
+1417 1490 1
+1627 1490 1
+1628 1490 1
+1629 1490 1
+1630 1490 1
+1906 1490 1
+1907 1490 1
+1908 1490 1
+1909 1490 1
+1910 1490 1
+2267 1490 32761
+2268 1490 32761
+2269 1490 32761
+2270 1490 32761
+2271 1490 32761
+2272 1490 32761
+2475 1490 24573
+4001 1490 27852657
+1399 1491 1
+2475 1491 65520
+4002 1491 27852657
+1400 1492 1
+2256 1492 58226
+2257 1492 58226
+2258 1492 50318
+2259 1492 50318
+2261 1492 22624
+2262 1492 22624
+2263 1492 22624
+2264 1492 9520
+2265 1492 40147
+2266 1492 47442
+2267 1492 46532
+2268 1492 46532
+2269 1492 46532
+2271 1492 39237
+2272 1492 39237
+2273 1492 41565
+2274 1492 12173
+2275 1492 1511
+2276 1492 19590
+2322 1492 52158
+2323 1492 52158
+2324 1492 52158
+2325 1492 52158
+2327 1492 51084
+2328 1492 59962
+2329 1492 14545
+2330 1492 19350
+2331 1492 16768
+2341 1492 62699
+2388 1492 54420
+2389 1492 54420
+2390 1492 54420
+2391 1492 54420
+2392 1492 54420
+2394 1492 27048
+2395 1492 59216
+2396 1492 43674
+2397 1492 34128
+2407 1492 63812
+2418 1492 1113
+2466 1492 27587
+2467 1492 27587
+2468 1492 27587
+2469 1492 27587
+2470 1492 27587
+2471 1492 27587
+2472 1492 27102
+2473 1492 43546
+2474 1492 33156
+2475 1492 56060
+2485 1492 35356
+2496 1492 7864
+2508 1492 45047
+4003 1492 27852657
+1401 1493 1
+2473 1493 65520
+4004 1493 27852657
+1402 1494 1
+1403 1494 1
+1615 1494 1
+1624 1494 10701
+1625 1494 10701
+1626 1494 10701
+1633 1494 10701
+1634 1494 10701
+1635 1494 21402
+1636 1494 10701
+1688 1494 10701
+1689 1494 10701
+1690 1494 21402
+1691 1494 21402
+1701 1494 10701
+1895 1494 60363
+1896 1494 60363
+1903 1494 5543
+1904 1494 385
+1905 1494 5543
+1910 1494 37086
+1912 1494 5543
+1913 1494 30866
+1914 1494 41567
+1915 1494 36024
+1967 1494 41993
+1968 1494 1795
+1969 1494 23197
+1970 1494 53678
+1980 1494 17654
+2033 1494 31292
+2034 1494 56615
+2035 1494 1795
+2036 1494 32276
+2046 1494 3205
+2057 1494 61773
+2256 1494 38289
+2257 1494 38289
+2264 1494 55758
+2265 1494 28523
+2266 1494 55755
+2271 1494 6181
+2272 1494 6181
+2273 1494 55758
+2274 1494 61830
+2275 1494 9140
+2276 1494 18906
+2327 1494 6181
+2328 1494 42601
+2329 1494 48673
+2330 1494 479
+2331 1494 29151
+2341 1494 10245
+2394 1494 44036
+2395 1494 21537
+2396 1494 38864
+2397 1494 31925
+2407 1494 32777
+2418 1494 22532
+2472 1494 36609
+2473 1494 10960
+2474 1494 36691
+2475 1494 31323
+2485 1494 28278
+2496 1494 14994
+2508 1494 12751
+4005 1494 27852657
+1403 1495 1
+1910 1495 44666
+1913 1495 6705
+1914 1495 6705
+1915 1495 6705
+1961 1495 25916
+1962 1495 25916
+1963 1495 25916
+1964 1495 25916
+1967 1495 15602
+1968 1495 40274
+1969 1495 40274
+1970 1495 46979
+1980 1495 40274
+2027 1495 25916
+2028 1495 25916
+2029 1495 25916
+2030 1495 25916
+2031 1495 25916
+2033 1495 15602
+2034 1495 40274
+2035 1495 40274
+2036 1495 46979
+2046 1495 15027
+2057 1495 40274
+2248 1495 39202
+2252 1495 36446
+2253 1495 36446
+2254 1495 36446
+2255 1495 21206
+2256 1495 55236
+2257 1495 55236
+2258 1495 5670
+2259 1495 5670
+2261 1495 16549
+2262 1495 16549
+2263 1495 2100
+2264 1495 40547
+2265 1495 35024
+2266 1495 45309
+2267 1495 43840
+2268 1495 43840
+2269 1495 43840
+2271 1495 10059
+2272 1495 29789
+2273 1495 59414
+2274 1495 58321
+2275 1495 9245
+2276 1495 29457
+2322 1495 19795
+2323 1495 19795
+2324 1495 19795
+2325 1495 19795
+2327 1495 51547
+2328 1495 21984
+2329 1495 64299
+2330 1495 47740
+2331 1495 37791
+2341 1495 8334
+2388 1495 13559
+2389 1495 13559
+2390 1495 13559
+2391 1495 13559
+2392 1495 13559
+2394 1495 2866
+2395 1495 41438
+2396 1495 43393
+2397 1495 14569
+2407 1495 4322
+2418 1495 61509
+2466 1495 29862
+2467 1495 29862
+2468 1495 29862
+2469 1495 29862
+2470 1495 29862
+2471 1495 1488
+2472 1495 482
+2473 1495 16234
+2474 1495 26902
+2475 1495 26947
+2485 1495 61540
+2496 1495 28482
+2508 1495 1911
+4006 1495 27852657
+1404 1496 1
+1405 1496 1
+1414 1496 65520
+1422 1496 43444
+1423 1496 3345
+1424 1496 3346
+1636 1496 32490
+1687 1496 46806
+1688 1496 27978
+1689 1496 50055
+1690 1496 52403
+1691 1496 49557
+1701 1496 20413
+1915 1496 338
+1980 1496 26118
+2034 1496 11834
+2035 1496 24451
+2036 1496 11370
+2046 1496 14336
+2057 1496 8631
+2256 1496 13143
+2257 1496 13143
+2258 1496 39232
+2259 1496 39232
+2261 1496 42044
+2262 1496 42044
+2263 1496 42044
+2264 1496 34607
+2265 1496 59127
+2266 1496 45984
+2267 1496 33280
+2268 1496 33280
+2269 1496 33280
+2271 1496 50628
+2272 1496 50628
+2273 1496 65428
+2274 1496 57152
+2275 1496 8406
+2276 1496 22466
+2322 1496 26653
+2323 1496 26653
+2324 1496 26653
+2325 1496 26653
+2327 1496 57457
+2328 1496 19997
+2329 1496 56171
+2330 1496 25825
+2331 1496 28407
+2341 1496 49207
+2388 1496 11830
+2389 1496 11830
+2390 1496 11830
+2391 1496 11830
+2392 1496 11830
+2394 1496 54461
+2395 1496 61196
+2396 1496 22270
+2397 1496 52754
+2407 1496 35133
+2418 1496 46094
+2466 1496 36205
+2467 1496 36205
+2468 1496 36205
+2469 1496 36205
+2470 1496 36205
+2471 1496 36205
+2472 1496 61785
+2473 1496 6140
+2474 1496 11004
+2475 1496 4200
+2485 1496 47429
+2496 1496 26106
+2508 1496 20610
+4007 1496 27852657
+1405 1497 1
+1422 1497 35242
+1423 1497 112
+1424 1497 112
+1636 1497 14164
+1698 1497 4521
+1699 1497 7431
+1700 1497 52810
+1701 1497 15995
+1702 1497 30047
+1915 1497 41767
+1981 1497 13926
+2056 1497 11352
+2057 1497 10703
+2058 1497 10172
+2059 1497 59572
+2257 1497 53383
+2266 1497 50924
+2274 1497 2972
+2275 1497 28749
+2276 1497 32807
+2312 1497 37802
+2321 1497 1676
+2331 1497 25980
+2338 1497 11937
+2339 1497 19905
+2340 1497 38514
+2341 1497 58138
+2342 1497 9226
+2378 1497 56840
+2387 1497 65257
+2397 1497 13363
+2408 1497 64809
+2417 1497 4824
+2418 1497 49515
+2419 1497 21263
+2420 1497 59149
+2455 1497 52563
+2456 1497 1938
+2457 1497 7235
+2458 1497 7235
+2460 1497 17622
+2461 1497 17622
+2462 1497 17622
+2463 1497 58429
+2464 1497 60699
+2465 1497 37008
+2466 1497 22384
+2467 1497 22384
+2468 1497 22384
+2470 1497 13729
+2471 1497 13729
+2472 1497 23328
+2473 1497 62621
+2474 1497 3343
+2475 1497 62476
+2476 1497 4476
+2477 1497 4476
+2478 1497 4476
+2479 1497 4476
+2481 1497 54600
+2482 1497 25903
+2483 1497 37676
+2484 1497 24406
+2485 1497 26558
+2486 1497 37829
+2487 1497 20242
+2488 1497 20242
+2489 1497 20242
+2490 1497 20242
+2491 1497 20242
+2493 1497 54976
+2494 1497 57345
+2495 1497 35655
+2496 1497 63659
+2497 1497 7118
+2498 1497 52415
+2499 1497 34589
+2500 1497 34589
+2501 1497 34589
+2502 1497 34589
+2503 1497 34589
+2504 1497 34589
+2505 1497 21753
+2506 1497 13249
+2507 1497 10993
+2508 1497 1059
+2509 1497 10802
+2510 1497 41347
+2511 1497 58623
+4008 1497 27852657
+1406 1498 1
+1415 1498 1
+1682 1498 65520
+1893 1498 40739
+1901 1498 9784
+1907 1498 55591
+1908 1498 28826
+1910 1498 17245
+1913 1498 31843
+1914 1498 31843
+1915 1498 31843
+1961 1498 57609
+1962 1498 40625
+1963 1498 13860
+1964 1498 5374
+1967 1498 36785
+1968 1498 57879
+1969 1498 57879
+1970 1498 24201
+1980 1498 57879
+2027 1498 57610
+2028 1498 40625
+2029 1498 13860
+2030 1498 5374
+2031 1498 63694
+2033 1498 36785
+2034 1498 57879
+2035 1498 57879
+2036 1498 24201
+2046 1498 50237
+2057 1498 57879
+2247 1498 40206
+2248 1498 40597
+2252 1498 32490
+2253 1498 32490
+2254 1498 7175
+2255 1498 3626
+2256 1498 61286
+2257 1498 61286
+2258 1498 58535
+2259 1498 3007
+2261 1498 30081
+2262 1498 32014
+2263 1498 7663
+2264 1498 26668
+2265 1498 10787
+2266 1498 15022
+2267 1498 26313
+2268 1498 38139
+2269 1498 2836
+2271 1498 29880
+2272 1498 33286
+2273 1498 24317
+2274 1498 44034
+2275 1498 35945
+2276 1498 20923
+2322 1498 58486
+2323 1498 41647
+2324 1498 6344
+2325 1498 20949
+2327 1498 13015
+2328 1498 48464
+2329 1498 45444
+2330 1498 20661
+2331 1498 34160
+2341 1498 13237
+2388 1498 31974
+2389 1498 47856
+2390 1498 7133
+2391 1498 42484
+2392 1498 65138
+2394 1498 43142
+2395 1498 33892
+2396 1498 44243
+2397 1498 10207
+2407 1498 59956
+2418 1498 46719
+2466 1498 28140
+2467 1498 64613
+2468 1498 20029
+2469 1498 20029
+2470 1498 9789
+2471 1498 53917
+2472 1498 36576
+2473 1498 29205
+2474 1498 50185
+2475 1498 9792
+2485 1498 57545
+2496 1498 59897
+2508 1498 24642
+4009 1498 27852657
+1407 1499 1
+1416 1499 1
+1683 1499 65520
+1893 1499 21592
+1901 1499 232
+1907 1499 9930
+1908 1499 56896
+1910 1499 55655
+1913 1499 7640
+1914 1499 7640
+1915 1499 7640
+1961 1499 20167
+1962 1499 37151
+1963 1499 36222
+1964 1499 40663
+1967 1499 11419
+1968 1499 55953
+1969 1499 55953
+1970 1499 63593
+1980 1499 55953
+2027 1499 20167
+2028 1499 37152
+2029 1499 36222
+2030 1499 40663
+2031 1499 59136
+2033 1499 11419
+2034 1499 55953
+2035 1499 55953
+2036 1499 63593
+2046 1499 46385
+2057 1499 55953
+2245 1499 6687
+2246 1499 6687
+2247 1499 8819
+2248 1499 8473
+2252 1499 33479
+2253 1499 33479
+2254 1499 35611
+2255 1499 8756
+2256 1499 33514
+2257 1499 33514
+2258 1499 2957
+2259 1499 58485
+2261 1499 38345
+2262 1499 26926
+2263 1499 29036
+2264 1499 45387
+2265 1499 40286
+2266 1499 6772
+2267 1499 13792
+2268 1499 1966
+2269 1499 58496
+2271 1499 49204
+2272 1499 14016
+2273 1499 31548
+2274 1499 39285
+2275 1499 26461
+2276 1499 19689
+2322 1499 23302
+2323 1499 40141
+2324 1499 29989
+2325 1499 56635
+2327 1499 28204
+2328 1499 58810
+2329 1499 29199
+2330 1499 25192
+2331 1499 10884
+2341 1499 56716
+2388 1499 1182
+2389 1499 50821
+2390 1499 8655
+2391 1499 40442
+2392 1499 34336
+2394 1499 45739
+2395 1499 48144
+2396 1499 52795
+2397 1499 33629
+2407 1499 22748
+2418 1499 31553
+2466 1499 64653
+2467 1499 28180
+2468 1499 25239
+2469 1499 25239
+2470 1499 245
+2471 1499 48166
+2472 1499 56882
+2473 1499 26769
+2474 1499 55171
+2475 1499 34448
+2485 1499 64485
+2496 1499 46176
+2508 1499 9808
+4010 1499 27852657
+1408 1500 1
+2475 1500 65520
+4011 1500 27852657
+1409 1501 1
+2474 1501 65520
+4012 1501 27852657
+1410 1502 1
+1411 1502 1
+1419 1502 1
+1420 1502 1
+1624 1502 35040
+1625 1502 35040
+1626 1502 35040
+1632 1502 1
+1633 1502 35040
+1634 1502 35040
+1635 1502 4559
+1636 1502 35040
+1688 1502 35040
+1689 1502 35040
+1690 1502 4559
+1691 1502 4559
+1701 1502 35040
+1895 1502 39772
+1896 1502 39772
+1903 1502 9291
+1904 1502 49063
+1905 1502 9291
+1910 1502 37086
+1912 1502 9291
+1913 1502 38362
+1914 1502 7881
+1915 1502 64111
+1967 1502 49489
+1968 1502 13039
+1969 1502 17598
+1970 1502 6897
+1980 1502 8307
+2033 1502 14449
+2034 1502 43520
+2035 1502 13039
+2036 1502 2338
+2046 1502 42536
+2057 1502 3748
+2256 1502 29399
+2257 1502 29399
+2264 1502 11308
+2265 1502 40707
+2266 1502 11308
+2271 1502 6181
+2272 1502 6181
+2273 1502 11308
+2274 1502 7092
+2275 1502 17127
+2276 1502 5819
+2327 1502 6181
+2328 1502 2836
+2329 1502 64141
+2330 1502 26721
+2331 1502 21229
+2341 1502 15410
+2394 1502 26736
+2395 1502 56659
+2396 1502 19239
+2397 1502 58626
+2407 1502 43564
+2418 1502 28154
+2472 1502 39420
+2473 1502 1018
+2474 1502 46292
+2475 1502 36593
+2485 1502 36471
+2496 1502 14057
+2508 1502 45043
+4013 1502 27852657
+1411 1503 1
+1420 1503 1
+1687 1503 65520
+1910 1503 53121
+1913 1503 1948
+1914 1503 1948
+1915 1503 1948
+1961 1503 236
+1962 1503 236
+1963 1503 236
+1964 1503 236
+1967 1503 46927
+1968 1503 44809
+1969 1503 44809
+1970 1503 46757
+1980 1503 44809
+2027 1503 236
+2028 1503 236
+2029 1503 236
+2030 1503 236
+2031 1503 236
+2033 1503 46927
+2034 1503 44809
+2035 1503 44809
+2036 1503 46757
+2046 1503 24097
+2057 1503 44809
+2248 1503 1044
+2252 1503 37196
+2253 1503 37196
+2254 1503 37196
+2255 1503 24950
+2256 1503 53156
+2257 1503 53156
+2258 1503 42839
+2259 1503 42839
+2261 1503 6393
+2262 1503 6393
+2263 1503 55400
+2264 1503 1314
+2265 1503 10869
+2266 1503 23234
+2267 1503 44299
+2268 1503 44299
+2269 1503 44299
+2271 1503 34458
+2272 1503 23319
+2273 1503 46092
+2274 1503 16966
+2275 1503 21948
+2276 1503 64235
+2322 1503 21579
+2323 1503 21579
+2324 1503 21579
+2325 1503 21579
+2327 1503 50349
+2328 1503 49
+2329 1503 24186
+2330 1503 34987
+2331 1503 57048
+2341 1503 58334
+2388 1503 26164
+2389 1503 26164
+2390 1503 26164
+2391 1503 26164
+2392 1503 26164
+2394 1503 32257
+2395 1503 57600
+2396 1503 21818
+2397 1503 17202
+2407 1503 1070
+2418 1503 8257
+2466 1503 46528
+2467 1503 46528
+2468 1503 46528
+2469 1503 46528
+2470 1503 46528
+2471 1503 46354
+2472 1503 32969
+2473 1503 60879
+2474 1503 56348
+2475 1503 53172
+2485 1503 3125
+2496 1503 7855
+2508 1503 666
+4014 1503 27852657
+1412 1504 1
+1422 1504 54365
+1423 1504 65168
+1424 1504 65168
+1636 1504 54898
+1687 1504 50484
+1688 1504 47291
+1689 1504 58447
+1690 1504 45292
+1691 1504 60330
+1701 1504 5079
+1915 1504 5111
+1980 1504 11230
+2034 1504 37618
+2035 1504 40025
+2036 1504 41008
+2046 1504 3814
+2057 1504 63184
+2256 1504 19800
+2257 1504 19800
+2258 1504 25297
+2259 1504 25297
+2261 1504 27456
+2262 1504 27456
+2263 1504 27456
+2264 1504 7413
+2265 1504 44640
+2266 1504 24840
+2267 1504 48715
+2268 1504 48715
+2269 1504 48715
+2271 1504 14484
+2272 1504 14484
+2273 1504 53495
+2274 1504 19857
+2275 1504 25491
+2276 1504 44130
+2322 1504 44340
+2323 1504 44340
+2324 1504 44340
+2325 1504 44340
+2327 1504 51431
+2328 1504 56803
+2329 1504 49567
+2330 1504 2368
+2331 1504 22248
+2341 1504 9324
+2388 1504 2728
+2389 1504 2728
+2390 1504 2728
+2391 1504 2728
+2392 1504 2728
+2394 1504 39222
+2395 1504 47325
+2396 1504 53801
+2397 1504 27977
+2407 1504 32523
+2418 1504 23722
+2466 1504 16269
+2467 1504 16269
+2468 1504 16269
+2469 1504 16269
+2470 1504 16269
+2471 1504 16269
+2472 1504 8734
+2473 1504 53263
+2474 1504 17396
+2475 1504 23113
+2485 1504 8058
+2496 1504 33021
+2508 1504 64137
+4015 1504 27852657
+1413 1505 1
+1414 1505 1
+1422 1505 60713
+1423 1505 21040
+1424 1505 21039
+1636 1505 63116
+1687 1505 63788
+1688 1505 7439
+1689 1505 12247
+1690 1505 25418
+1691 1505 5015
+1701 1505 28459
+1915 1505 19234
+1980 1505 59752
+2034 1505 51039
+2035 1505 65471
+2036 1505 19774
+2046 1505 28194
+2057 1505 62422
+2256 1505 28201
+2257 1505 28201
+2258 1505 7167
+2259 1505 7167
+2261 1505 30653
+2262 1505 30653
+2263 1505 30653
+2264 1505 14117
+2265 1505 38146
+2266 1505 9945
+2267 1505 52575
+2268 1505 52575
+2269 1505 52575
+2271 1505 35116
+2272 1505 35116
+2273 1505 368
+2274 1505 51764
+2275 1505 34875
+2276 1505 26132
+2322 1505 15419
+2323 1505 15419
+2324 1505 15419
+2325 1505 15419
+2327 1505 29000
+2328 1505 65087
+2329 1505 13491
+2330 1505 54846
+2331 1505 54247
+2341 1505 64762
+2388 1505 13314
+2389 1505 13314
+2390 1505 13314
+2391 1505 13314
+2392 1505 13314
+2394 1505 21285
+2395 1505 63636
+2396 1505 58367
+2397 1505 14573
+2407 1505 14689
+2418 1505 34570
+2466 1505 60907
+2467 1505 60907
+2468 1505 60907
+2469 1505 60907
+2470 1505 60907
+2471 1505 60907
+2472 1505 55240
+2473 1505 57879
+2474 1505 60898
+2475 1505 8104
+2485 1505 22686
+2496 1505 41094
+2508 1505 56139
+4016 1505 27852657
+1414 1506 1
+1422 1506 51474
+1423 1506 35594
+1424 1506 35593
+1636 1506 55049
+1698 1506 5856
+1699 1506 5230
+1700 1506 6628
+1701 1506 63044
+1702 1506 16979
+1915 1506 42394
+1981 1506 46600
+2056 1506 24088
+2057 1506 26592
+2058 1506 36955
+2059 1506 1055
+2266 1506 38786
+2274 1506 7663
+2275 1506 65189
+2276 1506 60951
+2321 1506 39478
+2331 1506 62067
+2338 1506 42229
+2339 1506 13107
+2340 1506 28549
+2341 1506 33091
+2342 1506 2459
+2387 1506 56576
+2397 1506 50666
+2408 1506 13602
+2417 1506 60520
+2418 1506 34335
+2419 1506 14203
+2420 1506 46768
+2455 1506 59104
+2456 1506 59104
+2457 1506 60805
+2458 1506 60805
+2460 1506 57042
+2461 1506 57042
+2462 1506 57042
+2463 1506 38257
+2464 1506 53089
+2465 1506 37753
+2466 1506 4871
+2467 1506 4871
+2468 1506 4871
+2470 1506 38373
+2471 1506 38373
+2472 1506 41063
+2473 1506 13921
+2474 1506 511
+2475 1506 1263
+2476 1506 11219
+2477 1506 11219
+2478 1506 11219
+2479 1506 11219
+2481 1506 62126
+2482 1506 37707
+2483 1506 22891
+2484 1506 51269
+2485 1506 64420
+2486 1506 62493
+2487 1506 47545
+2488 1506 47545
+2489 1506 47545
+2490 1506 47545
+2491 1506 47545
+2493 1506 11529
+2494 1506 55169
+2495 1506 54336
+2496 1506 59526
+2497 1506 33974
+2498 1506 44814
+2499 1506 40747
+2500 1506 40747
+2501 1506 40747
+2502 1506 40747
+2503 1506 40747
+2504 1506 40747
+2505 1506 62126
+2506 1506 20561
+2507 1506 27735
+2508 1506 22813
+2509 1506 7672
+2510 1506 13568
+2511 1506 46060
+4017 1506 27852657
+1415 1507 1
+1416 1507 1
+1422 1507 25927
+1423 1507 57482
+1424 1507 57482
+1636 1507 29438
+1684 1507 1
+1687 1507 3114
+1688 1507 32276
+1689 1507 6349
+1690 1507 29610
+1691 1507 4171
+1701 1507 32215
+1915 1507 40607
+1980 1507 27567
+2034 1507 65303
+2035 1507 14582
+2036 1507 26763
+2046 1507 56553
+2057 1507 61201
+2247 1507 454
+2253 1507 36229
+2254 1507 54927
+2255 1507 1144
+2256 1507 7535
+2257 1507 7535
+2258 1507 50241
+2259 1507 6922
+2261 1507 6948
+2262 1507 17591
+2263 1507 30422
+2264 1507 41133
+2265 1507 56915
+2266 1507 49380
+2267 1507 21100
+2268 1507 37567
+2269 1507 23766
+2271 1507 679
+2272 1507 18093
+2273 1507 3321
+2274 1507 38189
+2275 1507 37780
+2276 1507 36922
+2322 1507 21459
+2323 1507 35013
+2324 1507 4625
+2325 1507 56392
+2327 1507 2172
+2328 1507 29917
+2329 1507 26508
+2330 1507 15056
+2331 1507 29597
+2341 1507 25826
+2388 1507 53600
+2389 1507 43400
+2390 1507 49493
+2391 1507 30510
+2392 1507 52286
+2394 1507 28251
+2395 1507 35502
+2396 1507 24166
+2397 1507 8119
+2407 1507 29945
+2418 1507 44026
+2466 1507 56948
+2467 1507 43408
+2468 1507 48175
+2469 1507 16217
+2470 1507 4879
+2471 1507 19167
+2472 1507 14942
+2473 1507 27367
+2474 1507 753
+2475 1507 42253
+2485 1507 48931
+2496 1507 12705
+2508 1507 51890
+4018 1507 27852657
+1416 1508 1
+1422 1508 26954
+1423 1508 38996
+1424 1508 38996
+1636 1508 65149
+1688 1508 44187
+1689 1508 56625
+1690 1508 37368
+1691 1508 31994
+1701 1508 5841
+1915 1508 45901
+1980 1508 10522
+2035 1508 15876
+2036 1508 13638
+2046 1508 20749
+2057 1508 16068
+2247 1508 28332
+2254 1508 25865
+2255 1508 16981
+2256 1508 50893
+2257 1508 50893
+2258 1508 20073
+2259 1508 9057
+2261 1508 33789
+2262 1508 19956
+2263 1508 60259
+2264 1508 57299
+2265 1508 21352
+2266 1508 35980
+2267 1508 33637
+2268 1508 36435
+2269 1508 33019
+2271 1508 33903
+2272 1508 20899
+2273 1508 47346
+2274 1508 35965
+2275 1508 7523
+2276 1508 20687
+2322 1508 58460
+2323 1508 64285
+2324 1508 29118
+2325 1508 29118
+2327 1508 8268
+2328 1508 32375
+2329 1508 52953
+2330 1508 15234
+2331 1508 42618
+2341 1508 9395
+2388 1508 7848
+2389 1508 63565
+2390 1508 41449
+2391 1508 41449
+2392 1508 60814
+2394 1508 54419
+2395 1508 18811
+2396 1508 12553
+2397 1508 60483
+2407 1508 13854
+2418 1508 46390
+2466 1508 16453
+2467 1508 49210
+2468 1508 23573
+2469 1508 23573
+2470 1508 42237
+2471 1508 28774
+2472 1508 14960
+2473 1508 24310
+2474 1508 23118
+2475 1508 17336
+2485 1508 59527
+2496 1508 34371
+2508 1508 41592
+4019 1508 27852657
+1417 1509 1
+1684 1509 65520
+1892 1509 9853
+1893 1509 23304
+1901 1509 49085
+1908 1509 25700
+1910 1509 15471
+1913 1509 54419
+1914 1509 54419
+1915 1509 54419
+1961 1509 34666
+1962 1509 34666
+1963 1509 42740
+1964 1509 15027
+1967 1509 20606
+1968 1509 2942
+1969 1509 2942
+1970 1509 57361
+1980 1509 2942
+2027 1509 34666
+2028 1509 34666
+2029 1509 42741
+2030 1509 15027
+2031 1509 49491
+2033 1509 20606
+2034 1509 2942
+2035 1509 2942
+2036 1509 57361
+2046 1509 5884
+2057 1509 2942
+2245 1509 58834
+2246 1509 43196
+2247 1509 57087
+2248 1509 42246
+2252 1509 29440
+2253 1509 6014
+2254 1509 19905
+2255 1509 9327
+2256 1509 194
+2257 1509 194
+2258 1509 267
+2259 1509 267
+2261 1509 54733
+2262 1509 60513
+2263 1509 4826
+2264 1509 24884
+2265 1509 53783
+2266 1509 53589
+2267 1509 36439
+2268 1509 36439
+2269 1509 16090
+2271 1509 49686
+2272 1509 8717
+2273 1509 57145
+2274 1509 51126
+2275 1509 6979
+2276 1509 18911
+2322 1509 57614
+2323 1509 57614
+2324 1509 38426
+2325 1509 1757
+2327 1509 47778
+2328 1509 25470
+2329 1509 30221
+2330 1509 14804
+2331 1509 37070
+2341 1509 18159
+2388 1509 60454
+2389 1509 60454
+2390 1509 7835
+2391 1509 44264
+2392 1509 47567
+2394 1509 50250
+2395 1509 54694
+2396 1509 31850
+2397 1509 38473
+2407 1509 20655
+2418 1509 2496
+2466 1509 30867
+2467 1509 30867
+2468 1509 55661
+2469 1509 60892
+2470 1509 6037
+2471 1509 63125
+2472 1509 3770
+2473 1509 54328
+2474 1509 48894
+2475 1509 33314
+2485 1509 17946
+2496 1509 41377
+2508 1509 11644
+4020 1509 27852657
+1418 1510 1
+2475 1510 65520
+4021 1510 27852657
+1419 1511 1
+1422 1511 56220
+1423 1511 36376
+1424 1511 36376
+1636 1511 40097
+1687 1511 35859
+1688 1511 13303
+1689 1511 22604
+1690 1511 28557
+1691 1511 8790
+1701 1511 5069
+1915 1511 13382
+1980 1511 36952
+2034 1511 25092
+2035 1511 16934
+2036 1511 52081
+2046 1511 60624
+2057 1511 28741
+2255 1511 12749
+2256 1511 26774
+2257 1511 26774
+2258 1511 36979
+2259 1511 36979
+2261 1511 36998
+2262 1511 36998
+2263 1511 38757
+2264 1511 39005
+2265 1511 34088
+2266 1511 7314
+2267 1511 20894
+2268 1511 20894
+2269 1511 20894
+2271 1511 15880
+2272 1511 4636
+2273 1511 56671
+2274 1511 50393
+2275 1511 34990
+2276 1511 46270
+2322 1511 43308
+2323 1511 43308
+2324 1511 43308
+2325 1511 43308
+2327 1511 36522
+2328 1511 46985
+2329 1511 25890
+2330 1511 13797
+2331 1511 9029
+2341 1511 44677
+2388 1511 21248
+2389 1511 21248
+2390 1511 21248
+2391 1511 21248
+2392 1511 21248
+2394 1511 21391
+2395 1511 14626
+2396 1511 19389
+2397 1511 23699
+2407 1511 29147
+2418 1511 1045
+2466 1511 50628
+2467 1511 50628
+2468 1511 50628
+2469 1511 50628
+2470 1511 50628
+2471 1511 50628
+2472 1511 30191
+2473 1511 26888
+2474 1511 3691
+2475 1511 1696
+2485 1511 36464
+2496 1511 57955
+2508 1511 42875
+4022 1511 27852657
+1420 1512 1
+1422 1512 47936
+1423 1512 54446
+1424 1512 54446
+1636 1512 6054
+1687 1512 44904
+1688 1512 21074
+1689 1512 38659
+1690 1512 42584
+1691 1512 7857
+1701 1512 56249
+1915 1512 4930
+1980 1512 12225
+2034 1512 65362
+2035 1512 30235
+2036 1512 60653
+2046 1512 42735
+2057 1512 21238
+2255 1512 52772
+2256 1512 23705
+2257 1512 23705
+2258 1512 6772
+2259 1512 6772
+2261 1512 38365
+2262 1512 38365
+2263 1512 36606
+2264 1512 55125
+2265 1512 6502
+2266 1512 48318
+2267 1512 38131
+2268 1512 38131
+2269 1512 38131
+2271 1512 18827
+2272 1512 30071
+2273 1512 54745
+2274 1512 15666
+2275 1512 21438
+2276 1512 44236
+2322 1512 47188
+2323 1512 47188
+2324 1512 47188
+2325 1512 47188
+2327 1512 65314
+2328 1512 61667
+2329 1512 12871
+2330 1512 64435
+2331 1512 48676
+2341 1512 21518
+2388 1512 50154
+2389 1512 50154
+2390 1512 50154
+2391 1512 50154
+2392 1512 50154
+2394 1512 32423
+2395 1512 47591
+2396 1512 24698
+2397 1512 42610
+2407 1512 51315
+2418 1512 29406
+2466 1512 3731
+2467 1512 3731
+2468 1512 3731
+2469 1512 3731
+2470 1512 3731
+2471 1512 3731
+2472 1512 14782
+2473 1512 6426
+2474 1512 10974
+2475 1512 589
+2485 1512 19958
+2496 1512 5374
+2508 1512 62906
+4023 1512 27852657
+1421 1513 1
+1422 1513 58152
+1423 1513 64391
+1424 1513 64391
+1636 1513 54740
+1687 1513 8155
+1688 1513 8153
+1689 1513 15523
+1690 1513 38979
+1691 1513 20117
+1701 1513 29768
+1915 1513 20423
+1980 1513 52414
+2034 1513 36345
+2035 1513 27598
+2036 1513 45774
+2046 1513 9159
+2057 1513 52034
+2256 1513 27596
+2257 1513 27596
+2258 1513 35507
+2259 1513 35507
+2261 1513 21677
+2262 1513 21677
+2263 1513 21677
+2264 1513 24308
+2265 1513 62056
+2266 1513 34460
+2267 1513 11522
+2268 1513 11522
+2269 1513 11522
+2271 1513 42610
+2272 1513 42610
+2273 1513 33274
+2274 1513 3633
+2275 1513 5697
+2276 1513 24600
+2322 1513 45087
+2323 1513 45087
+2324 1513 45087
+2325 1513 45087
+2327 1513 53022
+2328 1513 23519
+2329 1513 35417
+2330 1513 43143
+2331 1513 13605
+2341 1513 35154
+2388 1513 63986
+2389 1513 63986
+2390 1513 63986
+2391 1513 63986
+2392 1513 63986
+2394 1513 45584
+2395 1513 47510
+2396 1513 35134
+2397 1513 3149
+2407 1513 10107
+2418 1513 21548
+2466 1513 46063
+2467 1513 46063
+2468 1513 46063
+2469 1513 46063
+2470 1513 46063
+2471 1513 46063
+2472 1513 48863
+2473 1513 16395
+2474 1513 12958
+2475 1513 5566
+2485 1513 49339
+2496 1513 38488
+2508 1513 38622
+4024 1513 27852657
+1425 1514 1
+1426 1514 1
+1431 1514 1
+1439 1514 18093
+1440 1514 18094
+1453 1514 44766
+1454 1514 39567
+1455 1514 57661
+1457 1514 46840
+1469 1514 9224
+1474 1514 10552
+1475 1514 58989
+1480 1514 34958
+1484 1514 18254
+1489 1514 52309
+1511 1514 53212
+1516 1514 17351
+1522 1514 44726
+1539 1514 22764
+1551 1514 5042
+1557 1514 62274
+1584 1514 22764
+1587 1514 47926
+1602 1514 9983
+1639 1514 22764
+1642 1514 47926
+1646 1514 46746
+1918 1514 26754
+1921 1514 39959
+1925 1514 43856
+1930 1514 1508
+2279 1514 2689
+2282 1514 65235
+2285 1514 6432
+2286 1514 50812
+2289 1514 1265
+2290 1514 361
+2291 1514 32
+2296 1514 56740
+2297 1514 34817
+2302 1514 18014
+2308 1514 58979
+2309 1514 21429
+2310 1514 62343
+2311 1514 7342
+2312 1514 7342
+2313 1514 50361
+2314 1514 29257
+2316 1514 13657
+2317 1514 32900
+2318 1514 54322
+2319 1514 9567
+2320 1514 32472
+2321 1514 25130
+2322 1514 21329
+2323 1514 11930
+2324 1514 3688
+2326 1514 29288
+2327 1514 33906
+2328 1514 5964
+2329 1514 12249
+2330 1514 43204
+2331 1514 18074
+2332 1514 23979
+2333 1514 9129
+2334 1514 45384
+2335 1514 45981
+2337 1514 27324
+2338 1514 30874
+2339 1514 55718
+2340 1514 6116
+2341 1514 42647
+2342 1514 24573
+2398 1514 13754
+2399 1514 20088
+2400 1514 6142
+2401 1514 11761
+2402 1514 47932
+2404 1514 58043
+2405 1514 43397
+2406 1514 63959
+2407 1514 45131
+2408 1514 23818
+2419 1514 64766
+2476 1514 52919
+2477 1514 22170
+2478 1514 33186
+2479 1514 60333
+2480 1514 6092
+2481 1514 28571
+2482 1514 48720
+2483 1514 41933
+2484 1514 15080
+2485 1514 49966
+2486 1514 65394
+2497 1514 27951
+2509 1514 4369
+4025 1514 27852657
+1427 1515 1
+1428 1515 1
+1429 1515 1
+1430 1515 2
+1431 1515 1
+1432 1515 5617
+1433 1515 5617
+1434 1515 29953
+1435 1515 35571
+1436 1515 29954
+1437 1515 29952
+1438 1515 35569
+1439 1515 59905
+1440 1515 29952
+1445 1515 1
+1446 1515 1
+1448 1515 5617
+1449 1515 29953
+1450 1515 29952
+1451 1515 35569
+1452 1515 35569
+1453 1515 35569
+1454 1515 35569
+1455 1515 35569
+1463 1515 62899
+1464 1515 62899
+1467 1515 24593
+1468 1515 2121
+1469 1515 4743
+1470 1515 29952
+1471 1515 29952
+1472 1515 54545
+1473 1515 32073
+1474 1515 33821
+1475 1515 64647
+1928 1515 53494
+1929 1515 56925
+1930 1515 56925
+1963 1515 13784
+1965 1515 37530
+1968 1515 24310
+1969 1515 24310
+1970 1515 24310
+1971 1515 58815
+1972 1515 58815
+1973 1515 7078
+1974 1515 32374
+1977 1515 35868
+1978 1515 52946
+1979 1515 52946
+1980 1515 11735
+1981 1515 52946
+2037 1515 58815
+2038 1515 58815
+2039 1515 7078
+2040 1515 32374
+2041 1515 32374
+2043 1515 35868
+2044 1515 52946
+2045 1515 52946
+2046 1515 11735
+2047 1515 40371
+2058 1515 52946
+2278 1515 27004
+2279 1515 27004
+2280 1515 42231
+2281 1515 44963
+2282 1515 17959
+2283 1515 33411
+2284 1515 37314
+2285 1515 1917
+2286 1515 49479
+2287 1515 46259
+2288 1515 6080
+2289 1515 54085
+2290 1515 27799
+2291 1515 43841
+2292 1515 46263
+2293 1515 20748
+2294 1515 45987
+2295 1515 25760
+2296 1515 5724
+2297 1515 27404
+2300 1515 11799
+2301 1515 44563
+2302 1515 37924
+2303 1515 24007
+2307 1515 17415
+2308 1515 50179
+2309 1515 43540
+2310 1515 22984
+2311 1515 28021
+2312 1515 28021
+2313 1515 9988
+2314 1515 9879
+2316 1515 12003
+2317 1515 5364
+2318 1515 17572
+2319 1515 58489
+2320 1515 11709
+2321 1515 49209
+2322 1515 56792
+2323 1515 56683
+2324 1515 34049
+2326 1515 19540
+2327 1515 43547
+2328 1515 20420
+2329 1515 62240
+2330 1515 56202
+2331 1515 6993
+2332 1515 37206
+2333 1515 37097
+2334 1515 14463
+2335 1515 56343
+2337 1515 64405
+2338 1515 39065
+2339 1515 6485
+2340 1515 4884
+2341 1515 11043
+2342 1515 4050
+2398 1515 28548
+2399 1515 30916
+2400 1515 1899
+2401 1515 13591
+2402 1515 47676
+2404 1515 45945
+2405 1515 38466
+2406 1515 10378
+2407 1515 17432
+2408 1515 24632
+2419 1515 20582
+2476 1515 64654
+2477 1515 56562
+2478 1515 38940
+2479 1515 59235
+2480 1515 22398
+2481 1515 31810
+2482 1515 61338
+2483 1515 32506
+2484 1515 31045
+2485 1515 19650
+2486 1515 4353
+2497 1515 45813
+2509 1515 62406
+4026 1515 27852657
+1428 1516 1
+1431 1516 65520
+1439 1516 17288
+1440 1516 17287
+1453 1516 62914
+1454 1516 13837
+1455 1516 31124
+1457 1516 8752
+1469 1516 46980
+1474 1516 37861
+1475 1516 22005
+1480 1516 65089
+1484 1516 63787
+1489 1516 16179
+1511 1516 63355
+1516 1516 16611
+1522 1516 56983
+1539 1516 29930
+1551 1516 14445
+1557 1516 43635
+1584 1516 29930
+1587 1516 18023
+1602 1516 62648
+1639 1516 29930
+1642 1516 18023
+1646 1516 50392
+1918 1516 6146
+1921 1516 9300
+1925 1516 45084
+1930 1516 50044
+2279 1516 33965
+2282 1516 28286
+2285 1516 17311
+2286 1516 44851
+2289 1516 7385
+2290 1516 62261
+2291 1516 8504
+2296 1516 45469
+2297 1516 25416
+2302 1516 45338
+2308 1516 37146
+2309 1516 13463
+2310 1516 63840
+2311 1516 37508
+2312 1516 37508
+2313 1516 65480
+2314 1516 29801
+2316 1516 19378
+2317 1516 33483
+2318 1516 12794
+2319 1516 35664
+2320 1516 45762
+2321 1516 8254
+2322 1516 28532
+2323 1516 35824
+2324 1516 16801
+2326 1516 50085
+2327 1516 58919
+2328 1516 52071
+2329 1516 32180
+2330 1516 58066
+2331 1516 49812
+2332 1516 22016
+2333 1516 22305
+2334 1516 51185
+2335 1516 55963
+2337 1516 26117
+2338 1516 39898
+2339 1516 19027
+2340 1516 42644
+2341 1516 23044
+2342 1516 38753
+2398 1516 51742
+2399 1516 41223
+2400 1516 1696
+2401 1516 46469
+2402 1516 22847
+2404 1516 46057
+2405 1516 4412
+2406 1516 5696
+2407 1516 4316
+2408 1516 25974
+2419 1516 52742
+2476 1516 62611
+2477 1516 4523
+2478 1516 8744
+2479 1516 56469
+2480 1516 47932
+2481 1516 61616
+2482 1516 50405
+2483 1516 54944
+2484 1516 34328
+2485 1516 12000
+2486 1516 45126
+2497 1516 18225
+2509 1516 48536
+4027 1516 27852657
+1429 1517 1
+1439 1517 3872
+1440 1517 3872
+1453 1517 814
+1454 1517 64747
+1455 1517 3098
+1469 1517 51099
+1474 1517 55219
+1475 1517 7218
+1480 1517 64763
+1484 1517 41409
+1489 1517 45731
+1511 1517 40651
+1516 1517 46489
+1522 1517 13217
+1551 1517 21619
+1557 1517 61290
+1587 1517 39289
+1602 1517 24662
+1642 1517 39289
+1646 1517 9811
+1921 1517 57564
+1925 1517 59406
+1930 1517 43346
+2282 1517 14384
+2285 1517 13913
+2286 1517 27676
+2289 1517 43689
+2290 1517 53929
+2291 1517 45294
+2296 1517 38134
+2297 1517 33654
+2302 1517 25122
+2308 1517 585
+2309 1517 64980
+2310 1517 26017
+2311 1517 55871
+2312 1517 55871
+2313 1517 23323
+2314 1517 50796
+2316 1517 914
+2317 1517 31231
+2318 1517 57995
+2319 1517 13479
+2320 1517 6264
+2321 1517 15914
+2322 1517 47913
+2323 1517 12425
+2324 1517 4121
+2326 1517 9675
+2327 1517 57343
+2328 1517 43143
+2329 1517 10616
+2330 1517 63649
+2331 1517 47735
+2332 1517 65308
+2333 1517 56578
+2334 1517 52500
+2335 1517 14002
+2337 1517 59972
+2338 1517 2636
+2339 1517 27695
+2340 1517 9595
+2341 1517 17787
+2342 1517 35573
+2398 1517 26587
+2399 1517 5226
+2400 1517 9020
+2401 1517 1886
+2402 1517 48046
+2404 1517 41758
+2405 1517 34253
+2406 1517 35600
+2407 1517 61489
+2408 1517 65505
+2419 1517 29932
+2476 1517 46555
+2477 1517 29837
+2478 1517 4088
+2479 1517 41177
+2480 1517 55788
+2481 1517 17456
+2482 1517 48183
+2483 1517 27964
+2484 1517 26372
+2485 1517 37684
+2486 1517 54511
+2497 1517 54044
+2509 1517 60509
+4028 1517 27852657
+1430 1518 1
+1431 1518 1
+1439 1518 24124
+1440 1518 24125
+1453 1518 37946
+1454 1518 3806
+1455 1518 27931
+1469 1518 23325
+1474 1518 63169
+1475 1518 2254
+1480 1518 57842
+1484 1518 35246
+1489 1518 13938
+1511 1518 27567
+1516 1518 21617
+1522 1518 36361
+1551 1518 49184
+1557 1518 34122
+1587 1518 52061
+1602 1518 9508
+1642 1518 52061
+1646 1518 34473
+1921 1518 21050
+1925 1518 15469
+1930 1518 39357
+2282 1518 51956
+2285 1518 54923
+2286 1518 42223
+2289 1518 15092
+2290 1518 32581
+2291 1518 55285
+2296 1518 42692
+2297 1518 59788
+2302 1518 45079
+2308 1518 37326
+2309 1518 61062
+2310 1518 18237
+2311 1518 9078
+2312 1518 9078
+2313 1518 30880
+2314 1518 31381
+2316 1518 2644
+2317 1518 28498
+2318 1518 19633
+2319 1518 13596
+2320 1518 18834
+2321 1518 9756
+2322 1518 7627
+2323 1518 1907
+2324 1518 61087
+2326 1518 50266
+2327 1518 51553
+2328 1518 54725
+2329 1518 1841
+2330 1518 21009
+2331 1518 11253
+2332 1518 35028
+2333 1518 35456
+2334 1518 53201
+2335 1518 22810
+2337 1518 2663
+2338 1518 3794
+2339 1518 60351
+2340 1518 3044
+2341 1518 19821
+2342 1518 8568
+2398 1518 47153
+2399 1518 24758
+2400 1518 47725
+2401 1518 17299
+2402 1518 26305
+2404 1518 61423
+2405 1518 3572
+2406 1518 10656
+2407 1518 50536
+2408 1518 59845
+2419 1518 51277
+2476 1518 39490
+2477 1518 63902
+2478 1518 41676
+2479 1518 3412
+2480 1518 14819
+2481 1518 25824
+2482 1518 54056
+2483 1518 40601
+2484 1518 11429
+2485 1518 60843
+2486 1518 31351
+2497 1518 43488
+2509 1518 19138
+4029 1518 27852657
+1432 1519 1
+1433 1519 1
+1435 1519 1
+1438 1519 1
+1710 1519 1
+1711 1519 1
+1713 1519 1
+1716 1519 1
+1720 1519 1
+1721 1519 1
+1723 1519 1
+1726 1519 2
+1730 1519 1
+2070 1519 32761
+2071 1519 32761
+2073 1519 32761
+2076 1519 32761
+2080 1519 32761
+2081 1519 32761
+2083 1519 32761
+2086 1519 1
+2090 1519 32761
+2095 1519 32761
+2096 1519 32761
+2098 1519 32761
+2101 1519 1
+2105 1519 1
+2110 1519 32761
+2422 1519 24571
+2423 1519 24571
+2424 1519 65520
+2425 1519 24571
+2428 1519 49143
+2432 1519 49142
+2437 1519 49141
+2500 1519 8190
+4030 1519 27852657
+1433 1520 1
+1439 1520 5086
+1440 1520 5086
+1711 1520 1
+1717 1520 5086
+1718 1520 5086
+1721 1520 1
+1724 1520 30029
+1727 1520 35278
+1728 1520 42117
+1731 1520 34184
+1732 1520 37031
+2061 1520 44835
+2062 1520 44835
+2065 1520 44832
+2066 1520 13170
+2067 1520 21347
+2068 1520 21350
+2070 1520 25301
+2071 1520 63237
+2072 1520 63136
+2073 1520 30607
+2074 1520 33564
+2075 1520 49966
+2076 1520 4798
+2077 1520 42035
+2078 1520 29821
+2081 1520 37936
+2083 1520 12430
+2084 1520 1786
+2086 1520 61410
+2087 1520 39879
+2088 1520 60781
+2089 1520 15555
+2090 1520 56612
+2091 1520 54767
+2092 1520 18030
+2093 1520 52591
+2096 1520 37936
+2097 1520 22297
+2099 1520 54877
+2100 1520 21299
+2102 1520 51570
+2103 1520 30262
+2106 1520 12827
+2107 1520 25731
+2108 1520 24602
+2109 1520 49966
+2110 1520 8909
+2111 1520 23581
+2112 1520 7701
+2113 1520 22473
+2114 1520 50462
+2355 1520 39135
+2356 1520 23743
+2357 1520 23743
+2390 1520 32646
+2392 1520 11155
+2395 1520 33867
+2396 1520 33867
+2397 1520 33867
+2398 1520 59041
+2399 1520 59041
+2400 1520 26166
+2401 1520 16331
+2404 1520 13594
+2405 1520 36076
+2406 1520 36076
+2407 1520 4422
+2408 1520 36076
+2409 1520 59041
+2410 1520 59041
+2411 1520 26166
+2412 1520 16331
+2413 1520 16331
+2415 1520 13594
+2416 1520 36076
+2417 1520 36076
+2418 1520 4422
+2419 1520 6631
+2420 1520 36076
+2422 1520 33422
+2423 1520 2603
+2424 1520 11060
+2425 1520 30746
+2426 1520 59706
+2427 1520 40041
+2428 1520 46601
+2429 1520 34651
+2430 1520 11813
+2431 1520 15643
+2432 1520 58015
+2433 1520 61579
+2434 1520 47143
+2435 1520 4105
+2436 1520 14119
+2437 1520 22495
+2438 1520 9942
+2439 1520 57734
+2440 1520 52958
+2441 1520 48853
+2444 1520 38153
+2445 1520 21058
+2446 1520 24296
+2447 1520 34903
+2451 1520 33223
+2452 1520 16128
+2453 1520 19366
+2454 1520 33211
+2455 1520 10799
+2456 1520 10799
+2457 1520 10179
+2458 1520 51480
+2460 1520 43294
+2461 1520 46532
+2462 1520 43282
+2463 1520 3933
+2464 1520 37812
+2465 1520 27013
+2466 1520 46280
+2467 1520 22060
+2468 1520 52385
+2470 1520 15794
+2471 1520 50697
+2472 1520 4568
+2473 1520 10137
+2474 1520 7644
+2475 1520 46152
+2476 1520 49240
+2477 1520 25020
+2478 1520 55345
+2479 1520 36338
+2481 1520 21980
+2482 1520 20611
+2483 1520 28211
+2484 1520 22873
+2485 1520 61497
+2486 1520 15345
+2487 1520 49235
+2488 1520 20195
+2489 1520 45913
+2490 1520 26521
+2491 1520 43007
+2493 1520 10278
+2494 1520 54014
+2495 1520 33497
+2496 1520 6351
+2497 1520 33631
+2498 1520 18286
+2499 1520 23030
+2500 1520 23885
+2501 1520 35291
+2502 1520 61525
+2503 1520 18556
+2504 1520 37716
+2505 1520 44576
+2506 1520 16872
+2507 1520 48465
+2508 1520 30771
+2509 1520 14309
+2510 1520 62267
+2511 1520 19831
+4031 1520 27852657
+1434 1521 1
+1435 1521 1
+1436 1521 1
+1437 1521 1
+1438 1521 1
+1439 1521 2
+1440 1521 1
+1712 1521 1
+1713 1521 1
+1714 1521 1
+1715 1521 1
+1716 1521 1
+1717 1521 2
+1718 1521 1
+1725 1521 1
+1726 1521 1
+1727 1521 2
+1728 1521 2
+1732 1521 1
+2072 1521 32761
+2073 1521 32761
+2074 1521 32761
+2075 1521 32761
+2076 1521 32761
+2077 1521 1
+2078 1521 32761
+2085 1521 32761
+2086 1521 32761
+2087 1521 1
+2088 1521 1
+2092 1521 32761
+2100 1521 32761
+2101 1521 32761
+2102 1521 1
+2103 1521 1
+2107 1521 1
+2112 1521 32761
+2424 1521 1
+2425 1521 1
+2426 1521 1
+2427 1521 24572
+2428 1521 24572
+2429 1521 49144
+2430 1521 49143
+2434 1521 49142
+2439 1521 49141
+2502 1521 8190
+4032 1521 27852657
+1435 1522 1
+1439 1522 31032
+1440 1522 31032
+1713 1522 1
+1717 1522 31032
+1718 1522 31032
+1724 1522 35491
+1727 1522 10340
+1728 1522 31029
+1731 1522 65520
+1732 1522 65518
+2066 1522 7516
+2067 1522 64854
+2068 1522 64854
+2070 1522 844
+2071 1522 844
+2072 1522 42642
+2073 1522 13808
+2074 1522 12291
+2075 1522 35126
+2076 1522 7524
+2077 1522 58428
+2078 1522 45470
+2083 1522 27651
+2084 1522 359
+2086 1522 54302
+2087 1522 6750
+2088 1522 17023
+2089 1522 30395
+2090 1522 46778
+2091 1522 55656
+2092 1522 18331
+2093 1522 46778
+2097 1522 53950
+2099 1522 38229
+2100 1522 660
+2102 1522 54405
+2103 1522 39558
+2106 1522 4529
+2107 1522 24084
+2108 1522 43151
+2109 1522 35126
+2110 1522 18743
+2111 1522 14394
+2112 1522 5753
+2113 1522 11489
+2114 1522 15116
+2355 1522 8087
+2356 1522 33291
+2357 1522 33291
+2390 1522 56293
+2392 1522 52095
+2395 1522 10909
+2396 1522 10909
+2397 1522 10909
+2398 1522 41338
+2399 1522 41338
+2400 1522 32110
+2401 1522 18245
+2404 1522 47274
+2405 1522 27980
+2406 1522 27980
+2407 1522 38889
+2408 1522 27980
+2409 1522 41338
+2410 1522 41338
+2411 1522 32110
+2412 1522 18245
+2413 1522 18245
+2415 1522 47274
+2416 1522 27980
+2417 1522 27980
+2418 1522 38889
+2419 1522 55960
+2420 1522 27980
+2422 1522 9793
+2423 1522 9793
+2424 1522 56377
+2425 1522 29821
+2426 1522 53986
+2427 1522 30184
+2428 1522 167
+2429 1522 22052
+2430 1522 11961
+2431 1522 12169
+2432 1522 28703
+2433 1522 17646
+2434 1522 16804
+2435 1522 56566
+2436 1522 42650
+2437 1522 15821
+2438 1522 46101
+2439 1522 5364
+2440 1522 46901
+2441 1522 55856
+2444 1522 19442
+2445 1522 59841
+2446 1522 4038
+2447 1522 61004
+2451 1522 32894
+2452 1522 7772
+2453 1522 17490
+2454 1522 18653
+2455 1522 22738
+2456 1522 22738
+2457 1522 7684
+2458 1522 32521
+2460 1522 43451
+2461 1522 53169
+2462 1522 29210
+2463 1522 31877
+2464 1522 57027
+2465 1522 34289
+2466 1522 16192
+2467 1522 41029
+2468 1522 5888
+2470 1522 37284
+2471 1522 32767
+2472 1522 48352
+2473 1522 56122
+2474 1522 29619
+2475 1522 60851
+2476 1522 56359
+2477 1522 15675
+2478 1522 46055
+2479 1522 874
+2481 1522 7407
+2482 1522 4391
+2483 1522 47314
+2484 1522 35219
+2485 1522 7551
+2486 1522 12221
+2487 1522 34890
+2488 1522 61801
+2489 1522 18139
+2490 1522 47285
+2491 1522 31629
+2493 1522 43271
+2494 1522 54337
+2495 1522 63219
+2496 1522 51275
+2497 1522 58441
+2498 1522 46220
+2499 1522 43887
+2500 1522 9215
+2501 1522 2183
+2502 1522 40767
+2503 1522 5872
+2504 1522 19060
+2505 1522 25121
+2506 1522 38941
+2507 1522 4781
+2508 1522 5907
+2509 1522 27647
+2510 1522 35119
+2511 1522 2974
+4033 1522 27852657
+1436 1523 1
+1439 1523 4
+1440 1523 3
+1714 1523 1
+1717 1523 4
+1718 1523 3
+1724 1523 30030
+1727 1523 5
+1728 1523 6
+1731 1523 1
+1732 1523 3
+2066 1523 58005
+2067 1523 667
+2068 1523 667
+2070 1523 38811
+2071 1523 38811
+2072 1523 9084
+2073 1523 20244
+2074 1523 47627
+2075 1523 16600
+2076 1523 39028
+2077 1523 63561
+2078 1523 16601
+2083 1523 37870
+2084 1523 65162
+2086 1523 6045
+2087 1523 21700
+2088 1523 219
+2089 1523 48921
+2090 1523 32538
+2091 1523 23660
+2092 1523 16156
+2093 1523 32538
+2097 1523 13296
+2099 1523 27292
+2100 1523 28656
+2102 1523 39401
+2103 1523 22351
+2106 1523 25145
+2107 1523 27999
+2108 1523 5648
+2109 1523 16600
+2110 1523 32983
+2111 1523 1485
+2112 1523 11843
+2113 1523 44724
+2114 1523 6093
+2355 1523 54655
+2356 1523 36389
+2357 1523 36389
+2390 1523 2141
+2392 1523 46420
+2395 1523 43459
+2396 1523 43459
+2397 1523 43459
+2398 1523 36294
+2399 1523 36294
+2400 1523 38435
+2401 1523 32312
+2404 1523 10373
+2405 1523 16587
+2406 1523 16587
+2407 1523 60046
+2408 1523 16587
+2409 1523 36294
+2410 1523 36294
+2411 1523 38435
+2412 1523 32312
+2413 1523 32312
+2415 1523 10373
+2416 1523 16587
+2417 1523 16587
+2418 1523 60046
+2419 1523 33174
+2420 1523 16587
+2422 1523 65061
+2423 1523 65061
+2424 1523 25262
+2425 1523 23606
+2426 1523 55629
+2427 1523 19753
+2428 1523 22468
+2429 1523 20483
+2430 1523 60406
+2431 1523 20860
+2432 1523 22218
+2433 1523 43228
+2434 1523 8012
+2435 1523 13130
+2436 1523 44508
+2437 1523 28538
+2438 1523 26454
+2439 1523 40098
+2440 1523 11891
+2441 1523 64282
+2444 1523 34863
+2445 1523 54473
+2446 1523 44952
+2447 1523 30619
+2451 1523 3628
+2452 1523 23238
+2453 1523 13717
+2454 1523 55384
+2455 1523 9344
+2456 1523 9344
+2457 1523 62564
+2458 1523 55581
+2460 1523 7828
+2461 1523 63828
+2462 1523 59584
+2463 1523 6910
+2464 1523 64134
+2465 1523 54790
+2466 1523 36847
+2467 1523 29864
+2468 1523 12753
+2470 1523 22318
+2471 1523 52937
+2472 1523 20037
+2473 1523 47147
+2474 1523 54012
+2475 1523 64743
+2476 1523 46962
+2477 1523 39979
+2478 1523 22868
+2479 1523 9991
+2481 1523 9147
+2482 1523 16754
+2483 1523 63975
+2484 1523 23377
+2485 1523 57968
+2486 1523 58746
+2487 1523 2308
+2488 1523 46231
+2489 1523 1328
+2490 1523 61535
+2491 1523 10369
+2493 1523 28703
+2494 1523 30294
+2495 1523 1244
+2496 1523 61436
+2497 1523 12991
+2498 1523 19766
+2499 1523 22249
+2500 1523 28603
+2501 1523 8136
+2502 1523 18574
+2503 1523 1335
+2504 1523 35892
+2505 1523 47847
+2506 1523 24895
+2507 1523 47966
+2508 1523 30223
+2509 1523 6065
+2510 1523 34421
+2511 1523 46370
+4034 1523 27852657
+1437 1524 1
+1439 1524 10345
+1440 1524 10345
+1715 1524 1
+1717 1524 10345
+1718 1524 10345
+1727 1524 14944
+1728 1524 1
+1730 1524 1
+1731 1524 40233
+1732 1524 55177
+2070 1524 50595
+2071 1524 50595
+2072 1524 56301
+2073 1524 41378
+2074 1524 56304
+2075 1524 19761
+2076 1524 11734
+2077 1524 13992
+2078 1524 23209
+2083 1524 65518
+2084 1524 65518
+2086 1524 50595
+2087 1524 45093
+2088 1524 15740
+2089 1524 34840
+2090 1524 27941
+2091 1524 42597
+2092 1524 31392
+2093 1524 38861
+2097 1524 5196
+2100 1524 20277
+2102 1524 26747
+2103 1524 17798
+2106 1524 13519
+2107 1524 54472
+2108 1524 64841
+2109 1524 30681
+2110 1524 37580
+2111 1524 36443
+2112 1524 23080
+2113 1524 13099
+2114 1524 52640
+2286 1524 18480
+2352 1524 18480
+2355 1524 32539
+2356 1524 33179
+2357 1524 58380
+2390 1524 33946
+2392 1524 58372
+2395 1524 58900
+2396 1524 58900
+2397 1524 58900
+2398 1524 6473
+2399 1524 6473
+2400 1524 40419
+2401 1524 34707
+2404 1524 14348
+2405 1524 38665
+2406 1524 38665
+2407 1524 32044
+2408 1524 38665
+2409 1524 6473
+2410 1524 6473
+2411 1524 40419
+2412 1524 34707
+2413 1524 34707
+2415 1524 14348
+2416 1524 38665
+2417 1524 38665
+2418 1524 32044
+2419 1524 11809
+2420 1524 38665
+2422 1524 34473
+2423 1524 34473
+2424 1524 29701
+2425 1524 63962
+2426 1524 29489
+2427 1524 15735
+2428 1524 47411
+2429 1524 36907
+2430 1524 22506
+2431 1524 48498
+2432 1524 45749
+2433 1524 21702
+2434 1524 34815
+2435 1524 40544
+2436 1524 59595
+2437 1524 32321
+2438 1524 59095
+2439 1524 61149
+2440 1524 5122
+2441 1524 30099
+2444 1524 49745
+2445 1524 24607
+2446 1524 17874
+2447 1524 35499
+2451 1524 46884
+2452 1524 21746
+2453 1524 15013
+2454 1524 25905
+2455 1524 25684
+2456 1524 25684
+2457 1524 55626
+2458 1524 35956
+2460 1524 44741
+2461 1524 38008
+2462 1524 23762
+2463 1524 45303
+2464 1524 59661
+2465 1524 33977
+2466 1524 56096
+2467 1524 36426
+2468 1524 37208
+2470 1524 60280
+2471 1524 30258
+2472 1524 57965
+2473 1524 14960
+2474 1524 62860
+2475 1524 28883
+2476 1524 54757
+2477 1524 35087
+2478 1524 35869
+2479 1524 36665
+2481 1524 31229
+2482 1524 13011
+2483 1524 64469
+2484 1524 3532
+2485 1524 41310
+2486 1524 12427
+2487 1524 62705
+2488 1524 33026
+2489 1524 28396
+2490 1524 18381
+2491 1524 59820
+2493 1524 48520
+2494 1524 46975
+2495 1524 34497
+2496 1524 46467
+2497 1524 39439
+2498 1524 27012
+2499 1524 9193
+2500 1524 26847
+2501 1524 22025
+2502 1524 32540
+2503 1524 37780
+2504 1524 35597
+2505 1524 25523
+2506 1524 12024
+2507 1524 59424
+2508 1524 19040
+2509 1524 35828
+2510 1524 53189
+2511 1524 43583
+4035 1524 27852657
+1438 1525 1
+1439 1525 55177
+1440 1525 55177
+1716 1525 1
+1717 1525 55177
+1718 1525 55177
+1727 1525 50577
+1730 1525 65520
+1731 1525 25288
+1732 1525 10344
+2070 1525 16816
+2071 1525 16816
+2072 1525 64661
+2073 1525 15953
+2074 1525 64658
+2075 1525 64661
+2076 1525 9057
+2077 1525 60350
+2078 1525 61213
+2083 1525 3
+2084 1525 3
+2086 1525 16816
+2087 1525 10348
+2088 1525 3161
+2089 1525 860
+2090 1525 7759
+2091 1525 58624
+2092 1525 4308
+2093 1525 62360
+2097 1525 13074
+2100 1525 9332
+2102 1525 52406
+2103 1525 24815
+2106 1525 5493
+2107 1525 43295
+2108 1525 44914
+2109 1525 64661
+2110 1525 57762
+2111 1525 12390
+2112 1525 38987
+2113 1525 33790
+2114 1525 51236
+2355 1525 48522
+2356 1525 12310
+2357 1525 12310
+2390 1525 25269
+2392 1525 51858
+2395 1525 2166
+2396 1525 2166
+2397 1525 2166
+2398 1525 53458
+2399 1525 53458
+2400 1525 13206
+2401 1525 3030
+2404 1525 31555
+2405 1525 13892
+2406 1525 13892
+2407 1525 16058
+2408 1525 13892
+2409 1525 53458
+2410 1525 53458
+2411 1525 13206
+2412 1525 3030
+2413 1525 3030
+2415 1525 31555
+2416 1525 13892
+2417 1525 13892
+2418 1525 16058
+2419 1525 27784
+2420 1525 13892
+2422 1525 65496
+2423 1525 65496
+2424 1525 20753
+2425 1525 46912
+2426 1525 46937
+2427 1525 24658
+2428 1525 51152
+2429 1525 57047
+2430 1525 37339
+2431 1525 3028
+2432 1525 58306
+2433 1525 47677
+2434 1525 44986
+2435 1525 57220
+2436 1525 46703
+2437 1525 36436
+2438 1525 8043
+2439 1525 40641
+2440 1525 4584
+2441 1525 12885
+2444 1525 7536
+2445 1525 59282
+2446 1525 36250
+2447 1525 52750
+2451 1525 13222
+2452 1525 64968
+2453 1525 41936
+2454 1525 35404
+2455 1525 54714
+2456 1525 54714
+2457 1525 21406
+2458 1525 33858
+2460 1525 37703
+2461 1525 14671
+2462 1525 59885
+2463 1525 35441
+2464 1525 15425
+2465 1525 26232
+2466 1525 21846
+2467 1525 34298
+2468 1525 18926
+2470 1525 27157
+2471 1525 14386
+2472 1525 8261
+2473 1525 33522
+2474 1525 22602
+2475 1525 61891
+2476 1525 54050
+2477 1525 981
+2478 1525 51130
+2479 1525 30446
+2481 1525 58511
+2482 1525 1028
+2483 1525 39443
+2484 1525 13065
+2485 1525 34491
+2486 1525 38121
+2487 1525 27694
+2488 1525 30003
+2489 1525 34458
+2490 1525 27794
+2491 1525 2167
+2493 1525 2207
+2494 1525 9125
+2495 1525 30901
+2496 1525 21196
+2497 1525 45286
+2498 1525 7165
+2499 1525 55456
+2500 1525 39012
+2501 1525 52526
+2502 1525 57783
+2503 1525 1096
+2504 1525 55385
+2505 1525 26682
+2506 1525 104
+2507 1525 12415
+2508 1525 24795
+2509 1525 53058
+2510 1525 59528
+2511 1525 38375
+4036 1525 27852657
+1439 1526 1
+1440 1526 1
+1727 1526 34029
+1728 1526 18499
+1732 1526 18499
+1869 1526 56084
+1874 1526 11797
+1892 1526 23546
+1900 1526 23546
+1909 1526 23546
+1922 1526 51091
+1923 1526 51091
+1924 1526 41654
+1925 1526 24145
+1940 1526 63639
+1947 1526 42722
+1955 1526 42722
+1964 1526 747
+1974 1526 42722
+1988 1526 51091
+1989 1526 51091
+1990 1526 41654
+1991 1526 24145
+1995 1526 24145
+2006 1526 63639
+2013 1526 42722
+2021 1526 42722
+2030 1526 747
+2040 1526 19923
+2051 1526 42722
+2070 1526 19165
+2071 1526 19165
+2072 1526 12017
+2073 1526 28754
+2074 1526 9589
+2075 1526 56786
+2076 1526 62265
+2077 1526 34774
+2078 1526 25185
+2085 1526 56786
+2086 1526 62265
+2087 1526 12523
+2088 1526 15557
+2092 1526 55893
+2100 1526 56786
+2101 1526 62265
+2102 1526 54281
+2103 1526 35352
+2107 1526 17610
+2112 1526 27238
+2122 1526 57964
+2123 1526 179
+2127 1526 58957
+2132 1526 46480
+2149 1526 50019
+2150 1526 57755
+2154 1526 51012
+2159 1526 31792
+2165 1526 17071
+2172 1526 17071
+2183 1526 14477
+2184 1526 16144
+2186 1526 31495
+2190 1526 24752
+2195 1526 13268
+2201 1526 60629
+2208 1526 36881
+2216 1526 19810
+2228 1526 35111
+2229 1526 36778
+2230 1526 57151
+2235 1526 20004
+2240 1526 963
+2246 1526 36866
+2253 1526 48964
+2261 1526 13382
+2270 1526 59093
+2283 1526 53836
+2284 1526 55503
+2285 1526 10355
+2286 1526 1422
+2295 1526 13759
+2301 1526 25574
+2308 1526 59485
+2316 1526 21511
+2325 1526 25013
+2335 1526 31441
+2349 1526 22620
+2350 1526 23580
+2351 1526 64154
+2352 1526 21899
+2356 1526 45584
+2367 1526 50188
+2374 1526 21393
+2382 1526 62156
+2391 1526 31433
+2401 1526 14527
+2412 1526 48607
+2427 1526 45829
+2428 1526 30121
+2429 1526 26358
+2430 1526 19855
+2434 1526 38241
+2439 1526 59219
+2445 1526 2196
+2452 1526 8451
+2460 1526 17833
+2469 1526 38492
+2479 1526 8507
+2490 1526 61157
+2502 1526 35982
+4037 1526 27852657
+1441 1527 1
+1443 1527 65520
+1453 1527 19059
+1454 1527 39048
+1455 1527 39048
+1469 1527 48374
+1474 1527 25912
+1475 1527 16586
+1480 1527 15795
+1484 1527 49726
+1489 1527 57404
+1516 1527 41609
+1522 1527 17706
+1551 1527 41609
+1557 1527 9059
+1582 1527 2970
+1584 1527 62551
+1587 1527 51364
+1602 1527 10440
+1637 1527 14409
+1639 1527 51112
+1642 1527 62803
+1646 1527 2718
+1916 1527 58266
+1918 1527 7255
+1921 1527 41670
+1925 1527 23851
+1930 1527 62210
+2277 1527 12672
+2279 1527 52849
+2282 1527 1651
+2285 1527 45206
+2286 1527 43555
+2289 1527 29446
+2290 1527 7835
+2291 1527 45849
+2296 1527 27802
+2297 1527 52010
+2302 1527 8465
+2308 1527 7064
+2309 1527 17585
+2310 1527 60765
+2311 1527 47221
+2312 1527 47221
+2313 1527 51833
+2314 1527 45765
+2316 1527 51697
+2317 1527 15390
+2318 1527 27609
+2319 1527 50802
+2320 1527 33443
+2321 1527 51743
+2322 1527 56023
+2323 1527 42620
+2324 1527 49215
+2326 1527 48982
+2327 1527 35971
+2328 1527 41859
+2329 1527 63205
+2330 1527 45498
+2331 1527 59276
+2332 1527 26062
+2333 1527 27042
+2334 1527 54431
+2335 1527 56201
+2337 1527 24775
+2338 1527 63190
+2339 1527 62006
+2340 1527 50876
+2341 1527 61440
+2342 1527 2164
+2398 1527 29489
+2399 1527 33276
+2400 1527 27082
+2401 1527 43236
+2402 1527 630
+2404 1527 26114
+2405 1527 43666
+2406 1527 46724
+2407 1527 26319
+2408 1527 56990
+2419 1527 54826
+2476 1527 23004
+2477 1527 101
+2478 1527 15188
+2479 1527 23295
+2480 1527 12861
+2481 1527 36073
+2482 1527 13168
+2483 1527 16023
+2484 1527 39481
+2485 1527 32610
+2486 1527 57628
+2497 1527 61500
+2509 1527 28976
+4038 1527 27852657
+1442 1528 1
+1443 1528 1
+1445 1528 1
+1448 1528 1
+1452 1528 1
+1458 1528 65520
+1461 1528 65520
+1463 1528 60492
+1464 1528 60492
+1467 1528 15131
+1468 1528 15134
+1469 1528 20163
+1471 1528 65520
+1472 1528 15131
+1473 1528 15134
+1474 1528 40326
+1475 1528 20163
+1928 1528 38827
+1929 1528 32127
+1930 1528 32127
+1963 1528 44847
+1965 1528 34937
+1968 1528 7721
+1969 1528 7721
+1970 1528 7721
+1971 1528 29690
+1972 1528 29690
+1973 1528 9016
+1974 1528 217
+1977 1528 22852
+1978 1528 38146
+1979 1528 38146
+1980 1528 45867
+1981 1528 38146
+2037 1528 29690
+2038 1528 29690
+2039 1528 9016
+2040 1528 217
+2041 1528 217
+2043 1528 22852
+2044 1528 38146
+2045 1528 38146
+2046 1528 45867
+2047 1528 10771
+2058 1528 38146
+2278 1528 64221
+2279 1528 64221
+2280 1528 16759
+2281 1528 42964
+2282 1528 44264
+2283 1528 44939
+2284 1528 5072
+2285 1528 34910
+2286 1528 56167
+2287 1528 27031
+2288 1528 41058
+2289 1528 27408
+2290 1528 35508
+2291 1528 44862
+2292 1528 43402
+2293 1528 19737
+2294 1528 32888
+2295 1528 26009
+2296 1528 51286
+2297 1528 6424
+2300 1528 38842
+2301 1528 42041
+2302 1528 1927
+2303 1528 58384
+2307 1528 61228
+2308 1528 64427
+2309 1528 24313
+2310 1528 40656
+2311 1528 58004
+2312 1528 58004
+2313 1528 21613
+2314 1528 9354
+2316 1528 28735
+2317 1528 54142
+2318 1528 8163
+2319 1528 59331
+2320 1528 22103
+2321 1528 29620
+2322 1528 15256
+2323 1528 2997
+2324 1528 38286
+2326 1528 37848
+2327 1528 30711
+2328 1528 55916
+2329 1528 15132
+2330 1528 164
+2331 1528 36065
+2332 1528 885
+2333 1528 54147
+2334 1528 23915
+2335 1528 732
+2337 1528 28312
+2338 1528 61986
+2339 1528 30400
+2340 1528 8548
+2341 1528 3068
+2342 1528 32524
+2398 1528 49476
+2399 1528 7050
+2400 1528 31084
+2401 1528 13109
+2402 1528 35004
+2404 1528 60290
+2405 1528 38668
+2406 1528 50468
+2407 1528 11245
+2408 1528 39945
+2419 1528 7421
+2476 1528 22404
+2477 1528 52976
+2478 1528 34920
+2479 1528 47719
+2480 1528 51434
+2481 1528 5470
+2482 1528 42477
+2483 1528 29471
+2484 1528 4537
+2485 1528 7346
+2486 1528 47382
+2497 1528 27521
+2509 1528 6992
+4039 1528 27852657
+1443 1529 1
+1445 1529 53654
+1448 1529 14438
+1452 1529 14438
+1466 1529 64852
+1471 1529 50414
+1486 1529 64977
+1509 1529 59053
+1513 1529 41452
+1518 1529 8401
+1524 1529 16452
+1531 1529 16452
+1538 1529 3505
+1539 1529 25738
+1544 1529 33357
+1548 1529 51901
+1553 1529 10055
+1559 1529 25280
+1566 1529 16248
+1574 1529 65317
+1583 1529 26568
+1584 1529 22309
+1586 1529 8838
+1593 1529 674
+1598 1529 25071
+1604 1529 59514
+1611 1529 15010
+1619 1529 37960
+1628 1529 38164
+1638 1529 35901
+1639 1529 34153
+1641 1529 62229
+1644 1529 60533
+1653 1529 47385
+1659 1529 38492
+1666 1529 52609
+1674 1529 63135
+1683 1529 49623
+1693 1529 11459
+1917 1529 21027
+1918 1529 37123
+1920 1529 9275
+1923 1529 6186
+1927 1529 29179
+1938 1529 18750
+1945 1529 14527
+1953 1529 43850
+1962 1529 26416
+1972 1529 59818
+2038 1529 48359
+2278 1529 10380
+2279 1529 7736
+2281 1529 15446
+2284 1529 54712
+2288 1529 43794
+2293 1529 7095
+2299 1529 30560
+2306 1529 13450
+2314 1529 17069
+2323 1529 6900
+2333 1529 23179
+2399 1529 38175
+2477 1529 64846
+4040 1529 27852657
+1444 1530 1
+1445 1530 1
+1446 1530 1
+1447 1530 1
+1448 1530 1
+1449 1530 2
+1450 1530 1
+1451 1530 1
+1452 1530 1
+1453 1530 2
+1454 1530 2
+1455 1530 1
+1458 1530 1
+1459 1530 1
+1460 1530 1
+1461 1530 1
+1463 1530 1
+1466 1530 65520
+1467 1530 1
+1470 1530 65520
+1471 1530 65519
+1472 1530 65520
+1473 1530 65519
+1474 1530 65518
+1475 1530 65519
+1643 1530 13
+1644 1530 5709
+1645 1530 59840
+1646 1530 59840
+1922 1530 13
+1923 1530 5709
+1924 1530 59840
+1925 1530 59840
+1927 1530 5696
+1928 1530 32770
+1929 1530 59840
+1963 1530 11
+1973 1530 11
+1974 1530 32777
+2039 1530 11
+2040 1530 32777
+2041 1530 32777
+2278 1530 65512
+2279 1530 65512
+2280 1530 12286
+2281 1530 60710
+2282 1530 60719
+2283 1530 61434
+2284 1530 55551
+2285 1530 47908
+2286 1530 52710
+2287 1530 15008
+2288 1530 9125
+2289 1530 38158
+2290 1530 43149
+2291 1530 55960
+2292 1530 31397
+2293 1530 942
+2294 1530 29975
+2295 1530 14500
+2296 1530 1363
+2297 1530 10924
+2324 1530 8208
+2334 1530 8208
+2335 1530 51918
+2400 1530 20487
+2401 1530 2747
+2402 1530 24583
+2476 1530 30037
+2477 1530 19974
+2478 1530 58796
+2479 1530 47269
+2480 1530 10916
+2481 1530 12968
+2497 1530 2063
+2509 1530 53427
+4041 1530 27852657
+1445 1531 1
+1453 1531 63961
+1454 1531 4425
+1455 1531 4425
+1469 1531 32093
+1474 1531 40057
+1475 1531 12389
+1480 1531 15795
+1484 1531 49726
+1489 1531 35497
+1516 1531 19702
+1522 1531 4811
+1551 1531 19702
+1557 1531 2965
+1587 1531 48394
+1602 1531 5312
+1642 1531 48394
+1646 1531 17127
+1921 1531 48925
+1925 1531 16596
+1930 1531 16349
+2282 1531 54500
+2285 1531 10430
+2286 1531 21451
+2289 1531 9100
+2290 1531 18597
+2291 1531 44438
+2296 1531 13655
+2297 1531 23254
+2302 1531 28919
+2308 1531 58184
+2309 1531 59553
+2310 1531 51184
+2311 1531 7809
+2312 1531 7809
+2313 1531 53630
+2314 1531 61427
+2316 1531 43964
+2317 1531 39208
+2318 1531 35372
+2319 1531 10482
+2320 1531 60839
+2321 1531 53030
+2322 1531 14519
+2323 1531 63597
+2324 1531 30186
+2326 1531 24501
+2327 1531 12557
+2328 1531 61208
+2329 1531 13183
+2330 1531 15201
+2331 1531 27692
+2332 1531 37798
+2333 1531 43550
+2334 1531 8989
+2335 1531 30363
+2337 1531 30519
+2338 1531 7322
+2339 1531 8588
+2340 1531 64704
+2341 1531 50198
+2342 1531 22506
+2398 1531 41184
+2399 1531 61399
+2400 1531 38487
+2401 1531 39335
+2402 1531 38261
+2404 1531 43051
+2405 1531 62728
+2406 1531 29438
+2407 1531 56124
+2408 1531 63568
+2419 1531 41062
+2476 1531 62456
+2477 1531 13813
+2478 1531 12759
+2479 1531 35616
+2480 1531 4226
+2481 1531 48077
+2482 1531 37708
+2483 1531 39564
+2484 1531 4754
+2485 1531 25671
+2486 1531 28773
+2497 1531 43534
+2509 1531 2993
+4042 1531 27852657
+1446 1532 1
+1453 1532 42177
+1454 1532 44805
+1455 1532 44805
+1469 1532 1618
+1474 1532 52528
+1475 1532 30194
+1480 1532 49726
+1484 1532 63041
+1489 1532 17235
+1511 1532 47246
+1516 1532 33030
+1522 1532 38835
+1551 1532 14755
+1557 1532 29456
+1587 1532 17127
+1602 1532 26929
+1642 1532 17127
+1646 1532 55593
+1921 1532 16596
+1925 1532 56882
+1930 1532 34742
+2282 1532 11021
+2285 1532 1257
+2286 1532 41359
+2289 1532 44069
+2290 1532 50950
+2291 1532 46128
+2296 1532 54656
+2297 1532 51467
+2302 1532 42655
+2308 1532 2917
+2309 1532 36529
+2310 1532 62438
+2311 1532 60100
+2312 1532 60100
+2313 1532 29797
+2314 1532 48695
+2316 1532 49795
+2317 1532 39496
+2318 1532 54458
+2319 1532 6883
+2320 1532 18255
+2321 1532 23676
+2322 1532 6379
+2323 1532 6413
+2324 1532 52705
+2326 1532 46462
+2327 1532 45318
+2328 1532 61432
+2329 1532 41113
+2330 1532 32576
+2331 1532 8900
+2332 1532 8618
+2333 1532 43764
+2334 1532 23342
+2335 1532 39022
+2337 1532 58905
+2338 1532 22821
+2339 1532 55653
+2340 1532 906
+2341 1532 527
+2342 1532 57148
+2398 1532 57666
+2399 1532 24401
+2400 1532 37843
+2401 1532 61356
+2402 1532 9835
+2404 1532 39878
+2405 1532 21372
+2406 1532 57368
+2407 1532 11755
+2408 1532 25135
+2419 1532 33508
+2476 1532 25080
+2477 1532 31669
+2478 1532 7630
+2479 1532 26145
+2480 1532 59299
+2481 1532 1921
+2482 1532 10144
+2483 1532 18100
+2484 1532 2112
+2485 1532 5134
+2486 1532 45544
+2497 1532 26292
+2509 1532 24530
+4043 1532 27852657
+1447 1533 1
+1448 1533 1
+1449 1533 1
+1450 1533 1
+1451 1533 1
+1452 1533 1
+1453 1533 1
+1454 1533 2
+1455 1533 1
+1461 1533 1
+1463 1533 5029
+1464 1533 5029
+1467 1533 50389
+1468 1533 50387
+1469 1533 45358
+1470 1533 65520
+1471 1533 65520
+1472 1533 50388
+1473 1533 50385
+1474 1533 25192
+1475 1533 45356
+1928 1533 36438
+1929 1533 50411
+1930 1533 50411
+1963 1533 8371
+1965 1533 22757
+1968 1533 25338
+1969 1533 25338
+1970 1533 25338
+1971 1533 28043
+1972 1533 28043
+1973 1533 36414
+1974 1533 42062
+1977 1533 17025
+1978 1533 26567
+1979 1533 26567
+1980 1533 51905
+1981 1533 26567
+2037 1533 28043
+2038 1533 28043
+2039 1533 36414
+2040 1533 42062
+2041 1533 42062
+2043 1533 17025
+2044 1533 26567
+2045 1533 26567
+2046 1533 51905
+2047 1533 53134
+2058 1533 26567
+2278 1533 64251
+2279 1533 64251
+2280 1533 30966
+2281 1533 7766
+2282 1533 9036
+2283 1533 56083
+2284 1533 25673
+2285 1533 19542
+2286 1533 10506
+2287 1533 59661
+2288 1533 44047
+2289 1533 56277
+2290 1533 11283
+2291 1533 777
+2292 1533 10529
+2293 1533 27486
+2294 1533 3401
+2295 1533 37626
+2296 1533 6837
+2297 1533 6060
+2300 1533 34070
+2301 1533 31559
+2302 1533 58335
+2303 1533 55516
+2307 1533 57933
+2308 1533 55422
+2309 1533 16677
+2310 1533 40634
+2311 1533 11881
+2312 1533 11881
+2313 1533 13553
+2314 1533 20612
+2316 1533 46837
+2317 1533 8092
+2318 1533 29538
+2319 1533 18561
+2320 1533 61198
+2321 1533 49317
+2322 1533 37939
+2323 1533 44998
+2324 1533 39224
+2326 1533 21660
+2327 1533 11655
+2328 1533 54893
+2329 1533 51288
+2330 1533 11935
+2331 1533 28139
+2332 1533 2480
+2333 1533 9539
+2334 1533 3765
+2335 1533 18600
+2337 1533 61199
+2338 1533 26001
+2339 1533 18187
+2340 1533 43573
+2341 1533 52278
+2342 1533 24139
+2398 1533 43111
+2399 1533 32663
+2400 1533 39883
+2401 1533 50256
+2402 1533 43321
+2404 1533 41608
+2405 1533 15814
+2406 1533 5200
+2407 1533 64457
+2408 1533 56410
+2419 1533 32271
+2476 1533 4368
+2477 1533 28721
+2478 1533 45471
+2479 1533 53726
+2480 1533 25012
+2481 1533 1568
+2482 1533 5758
+2483 1533 14103
+2484 1533 4570
+2485 1533 17624
+2486 1533 59482
+2497 1533 54392
+2509 1533 43360
+4044 1533 27852657
+1448 1534 1
+1452 1534 1
+1453 1534 61484
+1454 1534 59536
+1455 1534 59536
+1469 1534 57425
+1474 1534 36134
+1475 1534 38245
+1489 1534 14717
+1516 1534 14717
+1522 1534 60122
+1551 1534 14717
+1557 1534 13831
+1602 1534 4385
+1930 1534 59199
+2285 1534 65413
+2286 1534 65413
+2289 1534 2830
+2290 1534 1676
+2291 1534 40607
+2296 1534 9146
+2297 1534 61541
+2302 1534 38012
+2308 1534 27872
+2309 1534 20182
+2310 1534 3578
+2311 1534 18541
+2312 1534 18541
+2313 1534 41729
+2314 1534 17854
+2316 1534 59645
+2317 1534 62362
+2318 1534 56473
+2319 1534 10716
+2320 1534 8059
+2321 1534 55039
+2322 1534 50106
+2323 1534 8846
+2324 1534 21578
+2326 1534 7659
+2327 1534 31244
+2328 1534 1034
+2329 1534 51360
+2330 1534 63427
+2331 1534 8388
+2332 1534 56077
+2333 1534 60401
+2334 1534 3776
+2335 1534 18597
+2337 1534 53736
+2338 1534 46015
+2339 1534 18817
+2340 1534 64609
+2341 1534 29982
+2342 1534 21594
+2398 1534 32992
+2399 1534 11525
+2400 1534 21318
+2401 1534 48188
+2402 1534 19591
+2404 1534 24052
+2405 1534 32451
+2406 1534 13574
+2407 1534 62716
+2408 1534 11343
+2419 1534 55270
+2476 1534 46888
+2477 1534 38177
+2478 1534 43712
+2479 1534 22066
+2480 1534 60769
+2481 1534 22442
+2482 1534 36705
+2483 1534 37944
+2484 1534 18916
+2485 1534 52905
+2486 1534 8804
+2497 1534 15839
+2509 1534 39877
+4045 1534 27852657
+1449 1535 1
+1453 1535 65513
+1454 1535 62893
+1455 1535 62893
+1469 1535 50271
+1474 1535 9143
+1475 1535 21765
+1484 1535 18275
+1489 1535 62626
+1511 1535 18275
+1516 1535 62626
+1522 1535 53833
+1551 1535 15380
+1557 1535 16295
+1602 1535 15301
+1646 1535 58322
+1925 1535 57564
+1930 1535 18627
+2285 1535 53930
+2286 1535 2807
+2289 1535 3543
+2290 1535 18186
+2291 1535 37542
+2296 1535 42322
+2297 1535 55275
+2302 1535 37835
+2308 1535 41015
+2309 1535 32385
+2310 1535 18472
+2311 1535 65026
+2312 1535 65026
+2313 1535 19852
+2314 1535 63571
+2316 1535 3600
+2317 1535 15718
+2318 1535 22132
+2319 1535 50307
+2320 1535 52559
+2321 1535 53054
+2322 1535 3957
+2323 1535 37708
+2324 1535 17122
+2326 1535 55280
+2327 1535 43004
+2328 1535 36303
+2329 1535 47494
+2330 1535 36516
+2331 1535 48983
+2332 1535 49142
+2333 1535 53598
+2334 1535 29957
+2335 1535 14197
+2337 1535 44478
+2338 1535 41890
+2339 1535 17169
+2340 1535 37100
+2341 1535 48549
+2342 1535 65087
+2398 1535 62308
+2399 1535 15332
+2400 1535 47378
+2401 1535 19325
+2402 1535 7507
+2404 1535 51866
+2405 1535 11222
+2406 1535 7023
+2407 1535 7675
+2408 1535 18033
+2419 1535 18467
+2476 1535 3107
+2477 1535 51492
+2478 1535 3931
+2479 1535 52243
+2480 1535 31488
+2481 1535 13698
+2482 1535 43871
+2483 1535 57279
+2484 1535 34186
+2485 1535 8215
+2486 1535 59343
+2497 1535 59043
+2509 1535 58291
+4046 1535 27852657
+1450 1536 1
+1453 1536 53615
+1454 1536 2621
+1455 1536 2620
+1469 1536 29262
+1474 1536 64799
+1475 1536 38157
+1484 1536 47246
+1489 1536 11052
+1511 1536 47246
+1516 1536 11052
+1522 1536 24012
+1551 1536 58298
+1557 1536 4707
+1602 1536 64990
+1646 1536 7199
+1925 1536 7957
+1930 1536 42936
+2285 1536 11585
+2286 1536 62708
+2289 1536 55931
+2290 1536 18904
+2291 1536 46756
+2296 1536 15834
+2297 1536 21017
+2302 1536 36064
+2308 1536 50374
+2309 1536 1006
+2310 1536 62047
+2311 1536 33119
+2312 1536 33119
+2313 1536 2453
+2314 1536 13021
+2316 1536 40386
+2317 1536 18211
+2318 1536 11115
+2319 1536 33169
+2320 1536 46278
+2321 1536 13159
+2322 1536 50714
+2323 1536 43466
+2324 1536 36031
+2326 1536 55926
+2327 1536 40373
+2328 1536 43633
+2329 1536 49931
+2330 1536 6741
+2331 1536 59103
+2332 1536 36233
+2333 1536 40306
+2334 1536 58568
+2335 1536 14371
+2337 1536 53509
+2338 1536 33304
+2339 1536 61326
+2340 1536 3888
+2341 1536 22340
+2342 1536 28758
+2398 1536 12990
+2399 1536 43454
+2400 1536 31662
+2401 1536 7523
+2402 1536 532
+2404 1536 222
+2405 1536 15796
+2406 1536 37087
+2407 1536 3442
+2408 1536 58183
+2419 1536 29425
+2476 1536 34369
+2477 1536 44232
+2478 1536 48322
+2479 1536 20993
+2480 1536 23139
+2481 1536 17539
+2482 1536 17228
+2483 1536 9774
+2484 1536 62582
+2485 1536 15954
+2486 1536 25566
+2497 1536 7399
+2509 1536 28299
+4047 1536 27852657
+1451 1537 1
+1452 1537 1
+1453 1537 1
+1454 1537 1
+1455 1537 1
+1469 1537 730
+1474 1537 40184
+1475 1537 39455
+1489 1537 40376
+1516 1537 40376
+1522 1537 30895
+1551 1537 40376
+1557 1537 9343
+1602 1537 41048
+1930 1537 16888
+2289 1537 40979
+2290 1537 42252
+2291 1537 56953
+2296 1537 6332
+2297 1537 33763
+2302 1537 42175
+2308 1537 5924
+2309 1537 34319
+2310 1537 3749
+2311 1537 42563
+2312 1537 42563
+2313 1537 38356
+2314 1537 54608
+2316 1537 10210
+2317 1537 8798
+2318 1537 22439
+2319 1537 37051
+2320 1537 58657
+2321 1537 16094
+2322 1537 41077
+2323 1537 14902
+2324 1537 33166
+2326 1537 19543
+2327 1537 18865
+2328 1537 56659
+2329 1537 18041
+2330 1537 1663
+2331 1537 51090
+2332 1537 31493
+2333 1537 22852
+2334 1537 57900
+2335 1537 28496
+2337 1537 23244
+2338 1537 57602
+2339 1537 39648
+2340 1537 31951
+2341 1537 34382
+2342 1537 48813
+2398 1537 18770
+2399 1537 7290
+2400 1537 34127
+2401 1537 22450
+2402 1537 22628
+2404 1537 36688
+2405 1537 65125
+2406 1537 27793
+2407 1537 56356
+2408 1537 39344
+2419 1537 56052
+2476 1537 56763
+2477 1537 8121
+2478 1537 54142
+2479 1537 34265
+2480 1537 46430
+2481 1537 64352
+2482 1537 18125
+2483 1537 52879
+2484 1537 52526
+2485 1537 44965
+2486 1537 59572
+2497 1537 24980
+2509 1537 44955
+4048 1537 27852657
+1452 1538 1
+1453 1538 53654
+1454 1538 14438
+1455 1538 14438
+1469 1538 64852
+1474 1538 50414
+1489 1538 64977
+1515 1538 59053
+1516 1538 41452
+1521 1538 8401
+1527 1538 16452
+1534 1538 16452
+1547 1538 3505
+1548 1538 25738
+1550 1538 33357
+1551 1538 51901
+1556 1538 10055
+1562 1538 25280
+1569 1538 16248
+1577 1538 65317
+1592 1538 26568
+1593 1538 22309
+1594 1538 8838
+1596 1538 674
+1601 1538 25071
+1607 1538 59514
+1614 1538 15010
+1622 1538 37960
+1631 1538 38164
+1647 1538 35901
+1648 1538 34153
+1649 1538 62229
+1650 1538 60533
+1656 1538 47385
+1662 1538 38492
+1669 1538 52609
+1677 1538 63135
+1686 1538 49623
+1696 1538 11459
+1926 1538 21027
+1927 1538 37123
+1928 1538 9275
+1929 1538 6186
+1930 1538 29179
+1941 1538 18750
+1948 1538 14527
+1956 1538 43850
+1965 1538 26416
+1975 1538 59818
+2041 1538 48359
+2287 1538 10380
+2288 1538 7736
+2289 1538 15446
+2290 1538 54712
+2291 1538 43794
+2296 1538 7095
+2302 1538 30560
+2309 1538 13450
+2317 1538 17069
+2326 1538 6900
+2336 1538 23179
+2402 1538 38175
+2480 1538 64846
+4049 1538 27852657
+1453 1539 1
+2433 1539 65520
+4050 1539 27852657
+1454 1540 1
+2434 1540 65520
+4051 1540 27852657
+1455 1541 1
+2435 1541 65520
+4052 1541 27852657
+1456 1542 1
+1457 1542 65520
+1474 1542 58225
+1475 1542 58225
+1480 1542 28525
+1484 1542 36996
+1489 1542 28525
+1522 1542 17186
+1557 1542 59845
+1582 1542 57063
+1584 1542 8458
+1587 1542 37843
+1602 1542 41473
+1637 1542 57063
+1639 1542 8458
+1642 1542 37843
+1646 1542 27678
+1916 1542 51665
+1918 1542 13856
+1921 1542 7294
+1925 1542 58227
+1930 1542 7294
+2277 1542 48283
+2279 1542 17238
+2282 1542 44693
+2285 1542 9061
+2286 1542 29889
+2289 1542 21901
+2290 1542 60955
+2291 1542 31066
+2296 1542 16992
+2297 1542 32445
+2302 1542 46634
+2308 1542 18831
+2309 1542 51733
+2310 1542 59156
+2311 1542 48279
+2312 1542 48279
+2313 1542 59781
+2314 1542 60998
+2316 1542 6536
+2317 1542 21150
+2318 1542 12239
+2319 1542 50542
+2320 1542 37736
+2321 1542 54978
+2322 1542 52456
+2323 1542 32700
+2324 1542 42590
+2326 1542 56014
+2327 1542 3763
+2328 1542 57015
+2329 1542 18367
+2330 1542 6987
+2331 1542 17530
+2332 1542 57302
+2333 1542 29224
+2334 1542 25406
+2335 1542 17695
+2337 1542 17173
+2338 1542 6554
+2339 1542 41907
+2340 1542 1299
+2341 1542 16922
+2342 1542 64913
+2398 1542 23699
+2399 1542 3251
+2400 1542 40497
+2401 1542 11933
+2402 1542 26195
+2404 1542 61446
+2405 1542 45270
+2406 1542 38667
+2407 1542 9182
+2408 1542 29224
+2419 1542 29832
+2476 1542 17535
+2477 1542 50739
+2478 1542 52686
+2479 1542 12301
+2480 1542 33540
+2481 1542 36730
+2482 1542 44566
+2483 1542 16683
+2484 1542 58705
+2485 1542 20708
+2486 1542 5521
+2497 1542 49930
+2509 1542 17
+4053 1542 27852657
+1457 1543 1
+1459 1543 1
+1471 1543 1
+1539 1543 65520
+1584 1543 65520
+1586 1543 49137
+1639 1543 65520
+1641 1543 49137
+1644 1543 49137
+1865 1543 43674
+1918 1543 65520
+1920 1543 27296
+1923 1543 16374
+1986 1543 43680
+1989 1543 32758
+1993 1543 32758
+2179 1543 57338
+2224 1543 57338
+2226 1543 62797
+2279 1543 20483
+2281 1543 38227
+2284 1543 49136
+2293 1543 12285
+2345 1543 28672
+2347 1543 9561
+2350 1543 19113
+2354 1543 19113
+2423 1543 40954
+2425 1543 36859
+2428 1543 54604
+2432 1543 54604
+2437 1543 54605
+2477 1543 25590
+2488 1543 51182
+2500 1543 64676
+4054 1543 27852657
+1458 1544 1
+1459 1544 1
+1460 1544 1
+1464 1544 65520
+1470 1544 1
+1471 1544 1
+1472 1544 2
+1473 1544 1
+1475 1544 1
+2226 1544 2
+2227 1544 2
+2278 1544 2
+2279 1544 2
+2280 1544 49144
+2281 1544 49146
+2282 1544 49144
+2283 1544 2
+2284 1544 4
+2285 1544 4
+2286 1544 16381
+2292 1544 32763
+2293 1544 16382
+2294 1544 49143
+2297 1544 1
+2344 1544 2
+2345 1544 2
+2346 1544 49144
+2347 1544 49146
+2348 1544 49144
+2349 1544 2
+2350 1544 4
+2351 1544 4
+2352 1544 16381
+2353 1544 32760
+2354 1544 32762
+2355 1544 16381
+2356 1544 49141
+2357 1544 32760
+2422 1544 1
+2423 1544 1
+2424 1544 8192
+2425 1544 8193
+2426 1544 8192
+2427 1544 1
+2428 1544 2
+2429 1544 2
+2430 1544 57331
+2431 1544 27301
+2432 1544 27302
+2433 1544 35492
+2434 1544 19111
+2435 1544 27301
+2436 1544 27302
+2437 1544 27303
+2438 1544 35494
+2439 1544 19112
+2440 1544 54603
+2441 1544 27303
+2476 1544 16381
+2477 1544 24571
+2478 1544 40951
+2479 1544 43681
+2487 1544 16381
+2488 1544 24571
+2489 1544 40951
+2490 1544 43681
+2491 1544 32760
+2499 1544 21845
+2500 1544 35157
+2501 1544 42324
+2502 1544 3758
+2503 1544 51872
+2504 1544 19113
+2509 1544 8190
+2510 1544 8190
+2511 1544 51871
+4055 1544 27852657
+1459 1545 1
+1460 1545 1
+1463 1545 60493
+1464 1545 60492
+1467 1545 15133
+1468 1545 15135
+1469 1545 20164
+1472 1545 15133
+1473 1545 15135
+1474 1545 40328
+1475 1545 20164
+1928 1545 60500
+1929 1545 64247
+1930 1545 64247
+1963 1545 23068
+1965 1545 47760
+1968 1545 13548
+1969 1545 13548
+1970 1545 13548
+1971 1545 25824
+1972 1545 25824
+1973 1545 48892
+1974 1545 15524
+1977 1545 29304
+1978 1545 862
+1979 1545 862
+1980 1545 14410
+1981 1545 862
+2037 1545 25824
+2038 1545 25824
+2039 1545 48892
+2040 1545 15524
+2041 1545 15524
+2043 1545 29304
+2044 1545 862
+2045 1545 862
+2046 1545 14410
+2047 1545 1724
+2058 1545 862
+2278 1545 55883
+2279 1545 55883
+2280 1545 31383
+2281 1545 28636
+2282 1545 38274
+2283 1545 9162
+2284 1545 15133
+2285 1545 11453
+2286 1545 38700
+2287 1545 9162
+2288 1545 15133
+2289 1545 56194
+2290 1545 56709
+2291 1545 18009
+2292 1545 9162
+2293 1545 5075
+2294 1545 3447
+2295 1545 51524
+2296 1545 5561
+2297 1545 53073
+2300 1545 51311
+2301 1545 27223
+2302 1545 59941
+2303 1545 30289
+2307 1545 29704
+2308 1545 5616
+2309 1545 38334
+2310 1545 41400
+2311 1545 45296
+2312 1545 45296
+2313 1545 38060
+2314 1545 55343
+2316 1545 41986
+2317 1545 9183
+2318 1545 53682
+2319 1545 32375
+2320 1545 34227
+2321 1545 54452
+2322 1545 58236
+2323 1545 9998
+2324 1545 18831
+2326 1545 25390
+2327 1545 55679
+2328 1545 24991
+2329 1545 13475
+2330 1545 19042
+2331 1545 30111
+2332 1545 12466
+2333 1545 29749
+2334 1545 38582
+2335 1545 5333
+2337 1545 24034
+2338 1545 4252
+2339 1545 44339
+2340 1545 27270
+2341 1545 12639
+2342 1545 48049
+2398 1545 14236
+2399 1545 1581
+2400 1545 39114
+2401 1545 43371
+2402 1545 14193
+2404 1545 7089
+2405 1545 55079
+2406 1545 2889
+2407 1545 34387
+2408 1545 25166
+2419 1545 42638
+2476 1545 57926
+2477 1545 36053
+2478 1545 55133
+2479 1545 22734
+2480 1545 832
+2481 1545 36904
+2482 1545 15522
+2483 1545 1195
+2484 1545 3421
+2485 1545 17150
+2486 1545 31308
+2497 1545 12351
+2509 1545 24490
+4056 1545 27852657
+1460 1546 1
+1474 1546 56901
+1475 1546 56901
+1480 1546 36996
+1484 1546 30940
+1489 1546 34581
+1511 1546 2415
+1516 1546 63106
+1522 1546 59634
+1557 1546 6472
+1587 1546 19220
+1602 1546 43857
+1642 1546 19220
+1646 1546 23139
+1921 1546 44371
+1925 1546 38612
+1930 1546 26909
+2282 1546 3590
+2285 1546 41788
+2286 1546 5143
+2289 1546 11668
+2290 1546 43137
+2291 1546 37994
+2296 1546 20743
+2297 1546 12929
+2302 1546 3411
+2308 1546 26942
+2309 1546 15818
+2310 1546 32168
+2311 1546 59145
+2312 1546 59145
+2313 1546 51431
+2314 1546 62109
+2316 1546 58663
+2317 1546 10505
+2318 1546 49647
+2319 1546 23046
+2320 1546 31345
+2321 1546 37721
+2322 1546 61325
+2323 1546 5642
+2324 1546 3586
+2326 1546 28110
+2327 1546 53823
+2328 1546 43044
+2329 1546 36334
+2330 1546 29069
+2331 1546 56869
+2332 1546 52641
+2333 1546 12526
+2334 1546 8029
+2335 1546 34996
+2337 1546 49458
+2338 1546 6424
+2339 1546 30773
+2340 1546 12683
+2341 1546 31844
+2342 1546 40496
+2398 1546 56126
+2399 1546 31554
+2400 1546 35220
+2401 1546 21586
+2402 1546 12182
+2404 1546 39101
+2405 1546 59952
+2406 1546 18419
+2407 1546 29689
+2408 1546 3269
+2419 1546 28294
+2476 1546 4338
+2477 1546 64734
+2478 1546 19280
+2479 1546 52545
+2480 1546 19126
+2481 1546 44456
+2482 1546 53591
+2483 1546 14289
+2484 1546 49993
+2485 1546 25865
+2486 1546 39988
+2497 1546 31587
+2509 1546 17129
+4057 1546 27852657
+1461 1547 1
+1473 1547 1
+2226 1547 2
+2227 1547 2
+2281 1547 2
+2282 1547 2
+2283 1547 49142
+2284 1547 2
+2285 1547 2
+2347 1547 2
+2348 1547 2
+2349 1547 49142
+2350 1547 2
+2351 1547 2
+2353 1547 32762
+2354 1547 49143
+2355 1547 32762
+2356 1547 32762
+2357 1547 32762
+2425 1547 1
+2426 1547 1
+2427 1547 8191
+2428 1547 1
+2429 1547 1
+2431 1547 5461
+2432 1547 62792
+2433 1547 5461
+2434 1547 5461
+2435 1547 5461
+2436 1547 5461
+2437 1547 62792
+2438 1547 5461
+2439 1547 5462
+2440 1547 10922
+2441 1547 5461
+2479 1547 21840
+2490 1547 21840
+2491 1547 16380
+2499 1547 25254
+2500 1547 61088
+2501 1547 25256
+2502 1547 44365
+2503 1547 44365
+2504 1547 11603
+2511 1547 4436
+4058 1547 27852657
+1462 1548 1
+1463 1548 1
+1464 1548 1
+1722 1548 1
+1723 1548 1
+1724 1548 1
+1725 1548 1
+1726 1548 1
+1727 1548 2
+1728 1548 1
+1729 1548 1
+1730 1548 1
+1731 1548 2
+1732 1548 2
+1733 1548 1
+2082 1548 32761
+2083 1548 32761
+2084 1548 32761
+2085 1548 32761
+2086 1548 32761
+2087 1548 1
+2088 1548 32761
+2089 1548 32761
+2090 1548 32761
+2091 1548 1
+2092 1548 1
+2093 1548 32761
+2097 1548 32761
+2098 1548 32761
+2099 1548 32761
+2100 1548 32761
+2101 1548 32761
+2102 1548 1
+2103 1548 32761
+2104 1548 1
+2105 1548 1
+2106 1548 2
+2107 1548 2
+2108 1548 32762
+2109 1548 32761
+2110 1548 32761
+2111 1548 1
+2112 1548 1
+2113 1548 32762
+2114 1548 32761
+2284 1548 32761
+2285 1548 32761
+2286 1548 32761
+2350 1548 32761
+2351 1548 32761
+2352 1548 32761
+2354 1548 32761
+2355 1548 32761
+2356 1548 1
+2357 1548 32761
+2422 1548 1
+2423 1548 1
+2424 1548 24572
+2425 1548 24572
+2426 1548 24571
+2427 1548 24572
+2428 1548 49143
+2429 1548 8193
+2430 1548 49143
+2431 1548 49143
+2432 1548 8193
+2433 1548 57335
+2434 1548 16385
+2435 1548 32763
+2436 1548 49142
+2437 1548 8192
+2438 1548 57333
+2439 1548 16383
+2440 1548 2
+2441 1548 32761
+2499 1548 40951
+2500 1548 12286
+2501 1548 20476
+2502 1548 57332
+2503 1548 32761
+2511 1548 4095
+4059 1548 27852657
+1463 1549 1
+1464 1549 1
+2285 1549 49142
+2286 1549 49142
+2351 1549 49142
+2352 1549 49142
+2355 1549 2
+2356 1549 49142
+2429 1549 8191
+2430 1549 8191
+2433 1549 1
+2434 1549 8191
+2438 1549 1
+2439 1549 8191
+2501 1549 49142
+2502 1549 13310
+4060 1549 27852657
+1464 1550 1
+1469 1550 65520
+1474 1550 44995
+1475 1550 44996
+1484 1550 2415
+1489 1550 63106
+1511 1550 2415
+1516 1550 63106
+1522 1550 58093
+1557 1550 58379
+1602 1550 256
+1646 1550 42359
+1925 1550 17462
+1930 1550 48059
+2285 1550 41811
+2286 1550 8756
+2289 1550 65436
+2290 1550 18864
+2291 1550 10108
+2296 1550 50866
+2297 1550 55669
+2302 1550 51110
+2308 1550 25845
+2309 1550 1872
+2310 1550 58322
+2311 1550 44313
+2312 1550 44313
+2313 1550 47757
+2314 1550 23014
+2316 1550 54087
+2317 1550 46852
+2318 1550 64236
+2319 1550 5598
+2320 1550 47134
+2321 1550 2821
+2322 1550 17912
+2323 1550 39197
+2324 1550 1821
+2326 1550 25592
+2327 1550 65209
+2328 1550 58705
+2329 1550 43468
+2330 1550 39823
+2331 1550 37002
+2332 1550 6717
+2333 1550 44195
+2334 1550 34215
+2335 1550 60005
+2337 1550 61787
+2338 1550 5678
+2339 1550 33547
+2340 1550 15746
+2341 1550 28442
+2342 1550 56961
+2398 1550 47533
+2399 1550 44853
+2400 1550 52569
+2401 1550 43560
+2402 1550 11424
+2404 1550 35477
+2405 1550 31481
+2406 1550 1389
+2407 1550 64437
+2408 1550 20221
+2419 1550 28781
+2476 1550 55685
+2477 1550 35426
+2478 1550 22371
+2479 1550 64867
+2480 1550 46086
+2481 1550 52252
+2482 1550 39529
+2483 1550 24736
+2484 1550 63887
+2485 1550 39641
+2486 1550 3993
+2497 1550 63984
+2509 1550 14285
+4061 1550 27852657
+1465 1551 1
+1466 1551 1
+1467 1551 1
+1468 1551 1
+1469 1551 1
+1470 1551 1
+1471 1551 1
+1472 1551 1
+1473 1551 1
+1474 1551 2
+1475 1551 1
+1643 1551 32754
+1644 1551 62667
+1645 1551 2844
+1646 1551 2844
+1922 1551 32754
+1923 1551 62667
+1924 1551 2844
+1925 1551 2844
+1927 1551 29913
+1928 1551 1
+1929 1551 2844
+1963 1551 65515
+1973 1551 65515
+1974 1551 65512
+2039 1551 65515
+2040 1551 65512
+2041 1551 65512
+2278 1551 6
+2279 1551 6
+2280 1551 24572
+2281 1551 360
+2282 1551 354
+2283 1551 65519
+2284 1551 21367
+2285 1551 55903
+2286 1551 55549
+2287 1551 60066
+2288 1551 15914
+2289 1551 44397
+2290 1551 33711
+2291 1551 43683
+2292 1551 19111
+2293 1551 40480
+2294 1551 3442
+2295 1551 17322
+2296 1551 13651
+2297 1551 35489
+2324 1551 49131
+2334 1551 49131
+2335 1551 60035
+2400 1551 24564
+2401 1551 27291
+2402 1551 16373
+2476 1551 46408
+2477 1551 38131
+2478 1551 57626
+2479 1551 21415
+2480 1551 47778
+2481 1551 60061
+2497 1551 28657
+2509 1551 44693
+4062 1551 27852657
+1466 1552 1
+1467 1552 1
+1468 1552 1
+1469 1552 1
+1471 1552 1
+1472 1552 1
+1473 1552 1
+1474 1552 2
+1475 1552 1
+1928 1552 63715
+1929 1552 15989
+1930 1552 15989
+1963 1552 62404
+1965 1552 17281
+1968 1552 28460
+1969 1552 28460
+1970 1552 28460
+1971 1552 49315
+1972 1552 49315
+1973 1552 46198
+1974 1552 35115
+1977 1552 39215
+1978 1552 41932
+1979 1552 41932
+1980 1552 4871
+1981 1552 41932
+2037 1552 49315
+2038 1552 49315
+2039 1552 46198
+2040 1552 35115
+2041 1552 35115
+2043 1552 39215
+2044 1552 41932
+2045 1552 41932
+2046 1552 4871
+2047 1552 18343
+2058 1552 41932
+2278 1552 19375
+2279 1552 19375
+2280 1552 56050
+2281 1552 42175
+2282 1552 22800
+2283 1552 11290
+2284 1552 62096
+2285 1552 35323
+2286 1552 12523
+2287 1552 11290
+2288 1552 11371
+2289 1552 34292
+2290 1552 49829
+2291 1552 37306
+2292 1552 11290
+2293 1552 53857
+2294 1552 28922
+2295 1552 32449
+2296 1552 52903
+2297 1552 15597
+2300 1552 63082
+2301 1552 63706
+2302 1552 50085
+2303 1552 11880
+2307 1552 44079
+2308 1552 44703
+2309 1552 31082
+2310 1552 44777
+2311 1552 16148
+2312 1552 16148
+2313 1552 30371
+2314 1552 63148
+2316 1552 15211
+2317 1552 1590
+2318 1552 15909
+2319 1552 554
+2320 1552 28316
+2321 1552 12168
+2322 1552 16248
+2323 1552 49025
+2324 1552 44321
+2326 1552 20450
+2327 1552 32330
+2328 1552 18219
+2329 1552 32814
+2330 1552 14021
+2331 1552 1853
+2332 1552 62478
+2333 1552 29734
+2334 1552 25030
+2335 1552 43181
+2337 1552 53757
+2338 1552 56946
+2339 1552 51686
+2340 1552 56415
+2341 1552 59340
+2342 1552 57487
+2398 1552 26638
+2399 1552 53017
+2400 1552 17031
+2401 1552 13691
+2402 1552 37699
+2404 1552 57373
+2405 1552 25034
+2406 1552 6301
+2407 1552 56470
+2408 1552 20347
+2419 1552 28381
+2476 1552 10511
+2477 1552 44751
+2478 1552 37470
+2479 1552 40314
+2480 1552 51159
+2481 1552 33137
+2482 1552 49843
+2483 1552 1427
+2484 1552 31116
+2485 1552 11981
+2486 1552 8546
+2497 1552 24879
+2509 1552 51883
+4063 1552 27852657
+1467 1553 1
+1474 1553 55216
+1475 1553 55216
+1522 1553 20878
+1557 1553 41568
+1602 1553 29369
+2289 1553 32754
+2290 1553 65510
+2291 1553 65510
+2296 1553 33640
+2297 1553 14837
+2302 1553 31447
+2308 1553 8249
+2309 1553 24574
+2310 1553 43006
+2311 1553 29949
+2312 1553 29949
+2313 1553 22880
+2314 1553 5194
+2316 1553 64147
+2317 1553 10555
+2318 1553 51680
+2319 1553 21127
+2320 1553 63999
+2321 1553 34050
+2322 1553 34142
+2323 1553 6741
+2324 1553 21115
+2326 1553 19194
+2327 1553 61503
+2328 1553 3087
+2329 1553 10121
+2330 1553 23350
+2331 1553 54821
+2332 1553 28070
+2333 1553 27838
+2334 1553 35966
+2335 1553 14141
+2337 1553 26434
+2338 1553 52612
+2339 1553 24534
+2340 1553 56075
+2341 1553 55044
+2342 1553 223
+2398 1553 56228
+2399 1553 26325
+2400 1553 11815
+2401 1553 14733
+2402 1553 29202
+2404 1553 62741
+2405 1553 15424
+2406 1553 1924
+2407 1553 3320
+2408 1553 9045
+2419 1553 8822
+2476 1553 59741
+2477 1553 4758
+2478 1553 7870
+2479 1553 16626
+2480 1553 51870
+2481 1553 1879
+2482 1553 25368
+2483 1553 37875
+2484 1553 15208
+2485 1553 59799
+2486 1553 35328
+2497 1553 42414
+2509 1553 58440
+4064 1553 27852657
+1468 1554 1
+1469 1554 1
+1474 1554 10354
+1475 1554 10353
+1522 1554 34941
+1557 1554 14543
+1602 1554 47021
+2289 1554 22339
+2290 1554 32765
+2291 1554 32765
+2296 1554 29714
+2297 1554 18788
+2302 1554 56692
+2308 1554 43182
+2309 1554 53642
+2310 1554 5532
+2311 1554 55332
+2312 1554 55332
+2313 1554 61025
+2314 1554 1802
+2316 1554 17846
+2317 1554 28650
+2318 1554 13020
+2319 1554 58493
+2320 1554 48678
+2321 1554 58867
+2322 1554 12347
+2323 1554 3018
+2324 1554 38240
+2326 1554 40835
+2327 1554 62837
+2328 1554 13605
+2329 1554 23090
+2330 1554 59381
+2331 1554 514
+2332 1554 24612
+2333 1554 16611
+2334 1554 38339
+2335 1554 5252
+2337 1554 40011
+2338 1554 17836
+2339 1554 27608
+2340 1554 12673
+2341 1554 828
+2342 1554 314
+2398 1554 36203
+2399 1554 34915
+2400 1554 35879
+2401 1554 21957
+2402 1554 14456
+2404 1554 50346
+2405 1554 5347
+2406 1554 62160
+2407 1554 15394
+2408 1554 15855
+2419 1554 15541
+2476 1554 25277
+2477 1554 15345
+2478 1554 48168
+2479 1554 28755
+2480 1554 45377
+2481 1554 51275
+2482 1554 8006
+2483 1554 563
+2484 1554 41600
+2485 1554 20496
+2486 1554 38363
+2497 1554 62374
+2509 1554 60943
+4065 1554 27852657
+1469 1555 1
+1474 1555 145
+1475 1555 144
+1516 1555 6890
+1551 1555 52007
+1557 1555 41032
+1602 1555 2422
+1930 1555 42056
+2289 1555 10780
+2290 1555 58612
+2291 1555 58554
+2296 1555 7003
+2297 1555 25125
+2302 1555 1148
+2308 1555 47747
+2309 1555 940
+2310 1555 38532
+2311 1555 42289
+2312 1555 42289
+2313 1555 25603
+2314 1555 30908
+2316 1555 33086
+2317 1555 25360
+2318 1555 48317
+2319 1555 25873
+2320 1555 37944
+2321 1555 61176
+2322 1555 46011
+2323 1555 42075
+2324 1555 44219
+2326 1555 24593
+2327 1555 34719
+2328 1555 44949
+2329 1555 2341
+2330 1555 8321
+2331 1555 12666
+2332 1555 48286
+2333 1555 49630
+2334 1555 33712
+2335 1555 9075
+2337 1555 22702
+2338 1555 41233
+2339 1555 22021
+2340 1555 59528
+2341 1555 32058
+2342 1555 19392
+2398 1555 42561
+2399 1555 50860
+2400 1555 40866
+2401 1555 32965
+2402 1555 35588
+2404 1555 57577
+2405 1555 46180
+2406 1555 42235
+2407 1555 45043
+2408 1555 17944
+2419 1555 64073
+2476 1555 27919
+2477 1555 43689
+2478 1555 53712
+2479 1555 6220
+2480 1555 21955
+2481 1555 60662
+2482 1555 61135
+2483 1555 24300
+2484 1555 7396
+2485 1555 51763
+2486 1555 29223
+2497 1555 18450
+2509 1555 22834
+4066 1555 27852657
+1470 1556 1
+1522 1556 20187
+1557 1556 57940
+1602 1556 37055
+2296 1556 61646
+2297 1556 31683
+2302 1556 40553
+2309 1556 9396
+2310 1556 20716
+2311 1556 45067
+2312 1556 45067
+2313 1556 7219
+2314 1556 3284
+2316 1556 39935
+2317 1556 51695
+2318 1556 4870
+2319 1556 51351
+2320 1556 65177
+2321 1556 20110
+2322 1556 38560
+2323 1556 15104
+2324 1556 15104
+2326 1556 28140
+2327 1556 9685
+2328 1556 45278
+2329 1556 25348
+2330 1556 27912
+2331 1556 7802
+2332 1556 17389
+2333 1556 19471
+2334 1556 19471
+2335 1556 19471
+2337 1556 55282
+2338 1556 61844
+2339 1556 53109
+2340 1556 35284
+2341 1556 27358
+2342 1556 19556
+2398 1556 51786
+2399 1556 41985
+2400 1556 41985
+2401 1556 41985
+2402 1556 37813
+2404 1556 32756
+2405 1556 63387
+2406 1556 53062
+2407 1556 58842
+2408 1556 9064
+2419 1556 55029
+2476 1556 54287
+2477 1556 5337
+2478 1556 5337
+2479 1556 5337
+2480 1556 61025
+2481 1556 25638
+2482 1556 61154
+2483 1556 54886
+2484 1556 15251
+2485 1556 17845
+2486 1556 46069
+2497 1556 32863
+2509 1556 48959
+4067 1556 27852657
+1471 1557 1
+1474 1557 43681
+1475 1557 43681
+1522 1557 26301
+1557 1557 31288
+1602 1557 110
+2296 1557 1179
+2297 1557 18937
+2302 1557 63096
+2309 1557 37012
+2310 1557 20171
+2311 1557 6047
+2312 1557 6047
+2313 1557 29079
+2314 1557 39113
+2316 1557 16436
+2317 1557 45823
+2318 1557 22128
+2319 1557 30601
+2320 1557 24190
+2321 1557 18143
+2322 1557 661
+2323 1557 45825
+2324 1557 51569
+2326 1557 47912
+2327 1557 62187
+2328 1557 33990
+2329 1557 23429
+2330 1557 46534
+2331 1557 28391
+2332 1557 3693
+2333 1557 48533
+2334 1557 976
+2335 1557 976
+2337 1557 10259
+2338 1557 5443
+2339 1557 34723
+2340 1557 47773
+2341 1557 45992
+2342 1557 17601
+2398 1557 28269
+2399 1557 8879
+2400 1557 12637
+2401 1557 12637
+2402 1557 12512
+2404 1557 41504
+2405 1557 33254
+2406 1557 11511
+2407 1557 9913
+2408 1557 21413
+2419 1557 3812
+2476 1557 48641
+2477 1557 30192
+2478 1557 42606
+2479 1557 42606
+2480 1557 13970
+2481 1557 22086
+2482 1557 42800
+2483 1557 28195
+2484 1557 35762
+2485 1557 31477
+2486 1557 48664
+2497 1557 41506
+2509 1557 5756
+4068 1557 27852657
+1472 1558 1
+1474 1558 28737
+1475 1558 28737
+1522 1558 54030
+1557 1558 55705
+1602 1558 48843
+2296 1558 27971
+2297 1558 31853
+2302 1558 38204
+2308 1558 36146
+2309 1558 47020
+2310 1558 51155
+2311 1558 58568
+2312 1558 58568
+2313 1558 61412
+2314 1558 46148
+2316 1558 48003
+2317 1558 39029
+2318 1558 30753
+2319 1558 36176
+2320 1558 9970
+2321 1558 16923
+2322 1558 6740
+2323 1558 8876
+2324 1558 3132
+2326 1558 18761
+2327 1558 59927
+2328 1558 55308
+2329 1558 13678
+2330 1558 50901
+2331 1558 33978
+2332 1558 50513
+2333 1558 57774
+2334 1558 39810
+2335 1558 55195
+2337 1558 46407
+2338 1558 44046
+2339 1558 48295
+2340 1558 7467
+2341 1558 23378
+2342 1558 54921
+2398 1558 6161
+2399 1558 28425
+2400 1558 24667
+2401 1558 64361
+2402 1558 19370
+2404 1558 15424
+2405 1558 48190
+2406 1558 18542
+2407 1558 12265
+2408 1558 16913
+2419 1558 27513
+2476 1558 54169
+2477 1558 48008
+2478 1558 35594
+2479 1558 26679
+2480 1558 4387
+2481 1558 62496
+2482 1558 10445
+2483 1558 19466
+2484 1558 46348
+2485 1558 30291
+2486 1558 7501
+2497 1558 59118
+2509 1558 12963
+4069 1558 27852657
+1473 1559 1
+1474 1559 58625
+1475 1559 58625
+1522 1559 28245
+1557 1559 24171
+1602 1559 49545
+2296 1559 54563
+2297 1559 13544
+2302 1559 54384
+2308 1559 29375
+2309 1559 31792
+2310 1559 11786
+2311 1559 7696
+2312 1559 7696
+2313 1559 5764
+2314 1559 40730
+2316 1559 37618
+2317 1559 8305
+2318 1559 49063
+2319 1559 60537
+2320 1559 3678
+2321 1559 61503
+2322 1559 54817
+2323 1559 50130
+2324 1559 50130
+2326 1559 22407
+2327 1559 22514
+2328 1559 29304
+2329 1559 65233
+2330 1559 21920
+2331 1559 25938
+2332 1559 36435
+2333 1559 28447
+2334 1559 28447
+2335 1559 13062
+2337 1559 59264
+2338 1559 57187
+2339 1559 26164
+2340 1559 13226
+2341 1559 31628
+2342 1559 5690
+2398 1559 43525
+2399 1559 40806
+2400 1559 40806
+2401 1559 1112
+2402 1559 52069
+2404 1559 23603
+2405 1559 6911
+2406 1559 46448
+2407 1559 10159
+2408 1559 21236
+2419 1559 15546
+2476 1559 23623
+2477 1559 11406
+2478 1559 11406
+2479 1559 20321
+2480 1559 31812
+2481 1559 29848
+2482 1559 19325
+2483 1559 60648
+2484 1559 24053
+2485 1559 28207
+2486 1559 203
+2497 1559 37931
+2509 1559 51196
+4070 1559 27852657
+1474 1560 1
+2441 1560 65520
+4071 1560 27852657
+1475 1561 1
+2440 1561 65066
+2441 1561 65067
+2446 1561 62337
+2453 1561 12276
+2454 1561 32511
+2455 1561 45215
+2456 1561 45215
+2457 1561 338
+2458 1561 3916
+2460 1561 40404
+2461 1561 45425
+2462 1561 33114
+2463 1561 45820
+2464 1561 54322
+2465 1561 9107
+2466 1561 33593
+2467 1561 36595
+2468 1561 36595
+2470 1561 1850
+2471 1561 21277
+2472 1561 19756
+2473 1561 6146
+2474 1561 23699
+2475 1561 14592
+2476 1561 8568
+2477 1561 9141
+2478 1561 9141
+2479 1561 9141
+2481 1561 7166
+2482 1561 65084
+2483 1561 47776
+2484 1561 45194
+2485 1561 6255
+2486 1561 57184
+2487 1561 61662
+2488 1561 3628
+2489 1561 3628
+2490 1561 3628
+2491 1561 18723
+2493 1561 40111
+2494 1561 4734
+2495 1561 64597
+2496 1561 62284
+2497 1561 54888
+2498 1561 63225
+2499 1561 17971
+2500 1561 33177
+2501 1561 33177
+2502 1561 33177
+2503 1561 27091
+2504 1561 1162
+2505 1561 26529
+2506 1561 34981
+2507 1561 18824
+2508 1561 23471
+2509 1561 63226
+2510 1561 29499
+2511 1561 58862
+4072 1561 27852657
+1476 1562 1
+1477 1562 1
+1480 1562 65520
+1484 1562 1
+1495 1562 5880
+1766 1562 36153
+1767 1562 47785
+1768 1562 47785
+1806 1562 18753
+1841 1562 48705
+1884 1562 42315
+1886 1562 25135
+1895 1562 32740
+1903 1562 32740
+1912 1562 32740
+1937 1562 43791
+1938 1562 32053
+1939 1562 17691
+1940 1562 46815
+1943 1562 24844
+1950 1562 31085
+1958 1562 31085
+1967 1562 63825
+1977 1562 31085
+2003 1562 43791
+2004 1562 32053
+2005 1562 17691
+2006 1562 46815
+2007 1562 18261
+2009 1562 24844
+2016 1562 31085
+2024 1562 31085
+2033 1562 63825
+2043 1562 62170
+2054 1562 31085
+2115 1562 25420
+2116 1562 25420
+2117 1562 41777
+2118 1562 64051
+2119 1562 38631
+2120 1562 44231
+2121 1562 21696
+2122 1562 32370
+2123 1562 59260
+2124 1562 44231
+2125 1562 21696
+2126 1562 7834
+2127 1562 24480
+2128 1562 30741
+2129 1562 44231
+2130 1562 21696
+2131 1562 41283
+2132 1562 30983
+2133 1562 50132
+2134 1562 19391
+2137 1562 34609
+2138 1562 56057
+2139 1562 19240
+2140 1562 2282
+2164 1562 41713
+2165 1562 63161
+2166 1562 26344
+2167 1562 31568
+2168 1562 56179
+2175 1562 56179
+2198 1562 22919
+2199 1562 13245
+2201 1562 37594
+2202 1562 27288
+2203 1562 23174
+2204 1562 54123
+2211 1562 32397
+2219 1562 41739
+2243 1562 28165
+2244 1562 18491
+2245 1562 5019
+2247 1562 5652
+2248 1562 37407
+2249 1562 64665
+2256 1562 9558
+2264 1562 903
+2273 1562 24685
+2298 1562 63720
+2299 1562 16449
+2300 1562 49143
+2301 1562 60711
+2303 1562 40217
+2304 1562 17166
+2311 1562 26040
+2319 1562 52832
+2328 1562 53696
+2338 1562 29011
+2364 1562 404
+2365 1562 13771
+2366 1562 48375
+2367 1562 47758
+2368 1562 46406
+2370 1562 6755
+2377 1562 46900
+2385 1562 20975
+2394 1562 40668
+2404 1562 38144
+2415 1562 9133
+2442 1562 62527
+2443 1562 50574
+2444 1562 31569
+2445 1562 295
+2446 1562 57469
+2447 1562 42593
+2448 1562 7177
+2455 1562 63293
+2463 1562 10596
+2472 1562 18548
+2482 1562 33875
+2493 1562 9756
+2505 1562 17937
+4073 1562 27852657
+1477 1563 1
+1479 1563 1
+1482 1563 1
+1486 1563 1
+1491 1563 1
+1506 1563 1
+1509 1563 1
+1513 1563 1
+1518 1563 1
+1544 1563 1
+1548 1563 1
+1553 1563 1
+1593 1563 1
+1598 1563 1
+1653 1563 1
+2299 1563 32761
+2306 1563 32761
+2314 1563 32761
+2323 1563 32761
+2333 1563 32761
+2399 1563 32761
+2477 1563 24573
+4074 1563 27852657
+1478 1564 1
+1495 1564 27565
+1766 1564 23418
+1767 1564 46784
+1768 1564 46784
+1806 1564 4381
+1841 1564 65034
+1884 1564 40932
+1886 1564 28749
+1895 1564 22503
+1903 1564 22503
+1912 1564 22503
+1937 1564 22793
+1938 1564 9073
+1939 1564 9550
+1940 1564 17171
+1943 1564 815
+1950 1564 16583
+1958 1564 16583
+1967 1564 39086
+1977 1564 16583
+2003 1564 22793
+2004 1564 9073
+2005 1564 9550
+2006 1564 17171
+2007 1564 2964
+2009 1564 815
+2016 1564 16583
+2024 1564 16583
+2033 1564 39086
+2043 1564 33166
+2054 1564 16583
+2115 1564 62597
+2116 1564 62597
+2117 1564 58810
+2118 1564 43483
+2119 1564 46407
+2120 1564 54728
+2121 1564 18276
+2122 1564 4517
+2123 1564 23631
+2124 1564 54728
+2125 1564 18276
+2126 1564 23822
+2127 1564 39828
+2128 1564 16197
+2129 1564 54728
+2130 1564 18276
+2131 1564 3581
+2132 1564 21658
+2133 1564 47029
+2134 1564 30832
+2137 1564 12034
+2138 1564 28136
+2139 1564 181
+2140 1564 47385
+2164 1564 56992
+2165 1564 7573
+2166 1564 45139
+2167 1564 32740
+2168 1564 32393
+2175 1564 32393
+2198 1564 27163
+2199 1564 45988
+2201 1564 59149
+2202 1564 59357
+2203 1564 64966
+2204 1564 16646
+2211 1564 50894
+2219 1564 18501
+2243 1564 27868
+2244 1564 46693
+2245 1564 51762
+2247 1564 47492
+2248 1564 50755
+2249 1564 16552
+2256 1564 34187
+2264 1564 60802
+2273 1564 42301
+2298 1564 55962
+2299 1564 48732
+2300 1564 24175
+2301 1564 7851
+2303 1564 58
+2304 1564 21442
+2311 1564 45458
+2319 1564 53319
+2328 1564 34883
+2338 1564 58103
+2364 1564 48077
+2365 1564 23299
+2366 1564 27266
+2367 1564 24770
+2368 1564 36651
+2370 1564 58827
+2377 1564 16316
+2385 1564 15843
+2394 1564 5885
+2404 1564 25771
+2415 1564 33189
+2442 1564 31503
+2443 1564 5650
+2444 1564 56586
+2445 1564 48447
+2446 1564 5556
+2447 1564 47343
+2448 1564 47884
+2455 1564 62847
+2463 1564 41905
+2472 1564 21104
+2482 1564 993
+2493 1564 46956
+2505 1564 60693
+4075 1564 27852657
+1479 1565 1
+1480 1565 1
+1484 1565 65520
+1495 1565 29861
+1766 1565 62139
+1767 1565 14817
+1768 1565 14817
+1806 1565 10941
+1841 1565 29443
+1884 1565 22912
+1886 1565 41432
+1895 1565 21981
+1903 1565 21981
+1912 1565 21981
+1937 1565 18535
+1938 1565 48446
+1939 1565 8277
+1940 1565 54134
+1943 1565 59787
+1950 1565 42320
+1958 1565 42320
+1967 1565 64301
+1977 1565 42320
+2003 1565 18535
+2004 1565 48446
+2005 1565 8277
+2006 1565 54134
+2007 1565 47967
+2009 1565 59787
+2016 1565 42320
+2024 1565 42320
+2033 1565 64301
+2043 1565 19119
+2054 1565 42320
+2115 1565 61176
+2116 1565 61176
+2117 1565 2342
+2118 1565 38592
+2119 1565 42937
+2120 1565 22162
+2121 1565 2062
+2122 1565 35148
+2123 1565 57732
+2124 1565 22162
+2125 1565 2062
+2126 1565 62174
+2127 1565 46398
+2128 1565 54187
+2129 1565 22162
+2130 1565 2062
+2131 1565 8692
+2132 1565 11223
+2133 1565 13687
+2134 1565 25021
+2137 1565 23044
+2138 1565 32219
+2139 1565 15438
+2140 1565 21489
+2164 1565 37073
+2165 1565 46248
+2166 1565 29467
+2167 1565 49490
+2168 1565 40470
+2175 1565 40470
+2198 1565 17274
+2199 1565 35933
+2201 1565 55423
+2202 1565 19331
+2203 1565 24918
+2204 1565 18930
+2211 1565 27889
+2219 1565 52940
+2243 1565 45065
+2244 1565 63724
+2245 1565 33467
+2247 1565 63768
+2248 1565 38839
+2249 1565 2123
+2256 1565 48971
+2264 1565 51933
+2273 1565 64514
+2298 1565 21855
+2299 1565 14113
+2300 1565 51381
+2301 1565 45113
+2303 1565 35593
+2304 1565 33240
+2311 1565 3027
+2319 1565 32043
+2328 1565 21281
+2338 1565 22288
+2364 1565 10070
+2365 1565 35252
+2366 1565 37306
+2367 1565 25714
+2368 1565 3700
+2370 1565 41946
+2377 1565 13193
+2385 1565 47633
+2394 1565 50225
+2404 1565 61405
+2415 1565 39117
+2442 1565 46333
+2443 1565 58130
+2444 1565 4321
+2445 1565 58147
+2446 1565 35423
+2447 1565 42809
+2448 1565 58008
+2455 1565 62331
+2463 1565 53315
+2472 1565 12268
+2482 1565 44892
+2493 1565 22308
+2505 1565 27175
+4076 1565 27852657
+1480 1566 1
+1789 1566 1024
+1793 1566 14431
+1828 1566 32504
+1866 1566 5456
+1873 1566 60601
+1891 1566 20152
+1899 1566 20152
+1908 1566 20152
+1919 1566 31789
+1920 1566 31789
+1921 1566 48671
+1924 1566 24455
+1939 1566 37521
+1946 1566 53384
+1954 1566 53384
+1963 1566 8015
+1973 1566 53384
+1985 1566 31789
+1986 1566 31789
+1987 1566 48671
+1990 1566 24455
+1994 1566 57267
+2005 1566 37521
+2012 1566 53384
+2020 1566 53384
+2029 1566 8015
+2039 1566 41247
+2050 1566 53384
+2119 1566 9206
+2122 1566 8747
+2126 1566 2436
+2131 1566 62497
+2146 1566 46940
+2149 1566 489
+2153 1566 59699
+2158 1566 35861
+2164 1566 48492
+2171 1566 48492
+2180 1566 20056
+2181 1566 20056
+2185 1566 16344
+2189 1566 43231
+2194 1566 11764
+2200 1566 18475
+2207 1566 4060
+2215 1566 21089
+2225 1566 15848
+2226 1566 15848
+2227 1566 16782
+2234 1566 48601
+2239 1566 39078
+2245 1566 39072
+2252 1566 62831
+2260 1566 58414
+2269 1566 37325
+2280 1566 14959
+2281 1566 14959
+2282 1566 56504
+2285 1566 37309
+2294 1566 5883
+2300 1566 19640
+2307 1566 61218
+2315 1566 43903
+2324 1566 49808
+2334 1566 12483
+2346 1566 2649
+2347 1566 2649
+2348 1566 13490
+2351 1566 26116
+2355 1566 20158
+2366 1566 1131
+2373 1566 3539
+2381 1566 186
+2390 1566 26104
+2400 1566 25306
+2411 1566 12823
+2424 1566 14375
+2425 1566 14375
+2426 1566 19164
+2429 1566 5806
+2433 1566 26379
+2438 1566 61858
+2444 1566 20081
+2451 1566 59834
+2459 1566 28443
+2468 1566 763
+2478 1566 54895
+2489 1566 22479
+2501 1566 43649
+4077 1566 27852657
+1481 1567 1
+1766 1567 22779
+1767 1567 45350
+1768 1567 45350
+1884 1567 38372
+1886 1567 9264
+1895 1567 1706
+1903 1567 1706
+1912 1567 1706
+1937 1567 37144
+1938 1567 37144
+1939 1567 9995
+1940 1567 34496
+1943 1567 33868
+1950 1567 38953
+1958 1567 38953
+1967 1567 40659
+1977 1567 38953
+2003 1567 37144
+2004 1567 37144
+2005 1567 9995
+2006 1567 34496
+2007 1567 34496
+2009 1567 33868
+2016 1567 38953
+2024 1567 38953
+2033 1567 40659
+2043 1567 12385
+2054 1567 38953
+2115 1567 41137
+2116 1567 41137
+2117 1567 53215
+2118 1567 30249
+2119 1567 54633
+2120 1567 50788
+2121 1567 6972
+2122 1567 58937
+2123 1567 4304
+2124 1567 50788
+2125 1567 6972
+2126 1567 4726
+2127 1567 49342
+2128 1567 45038
+2129 1567 50788
+2130 1567 6972
+2131 1567 22522
+2132 1567 60549
+2133 1567 42375
+2134 1567 62858
+2137 1567 13377
+2138 1567 60002
+2139 1567 25587
+2140 1567 18255
+2164 1567 10898
+2165 1567 57523
+2166 1567 23108
+2167 1567 46882
+2168 1567 6613
+2175 1567 6613
+2198 1567 9358
+2199 1567 14085
+2201 1567 16507
+2202 1567 47613
+2203 1567 52491
+2204 1567 24
+2211 1567 31267
+2219 1567 24654
+2243 1567 17025
+2244 1567 21752
+2245 1567 25444
+2247 1567 32582
+2248 1567 50837
+2249 1567 17820
+2256 1567 4260
+2264 1567 10542
+2273 1567 51409
+2298 1567 8147
+2299 1567 12874
+2300 1567 16566
+2301 1567 45928
+2303 1567 25273
+2304 1567 24465
+2311 1567 14066
+2319 1567 55665
+2328 1567 32611
+2338 1567 46723
+2364 1567 20016
+2365 1567 17581
+2366 1567 16496
+2367 1567 61481
+2368 1567 38998
+2370 1567 40095
+2377 1567 19771
+2385 1567 19196
+2394 1567 22079
+2404 1567 32341
+2415 1567 51139
+2442 1567 48826
+2443 1567 25641
+2444 1567 12409
+2445 1567 8132
+2446 1567 22317
+2447 1567 11650
+2448 1567 16115
+2455 1567 54229
+2463 1567 60719
+2472 1567 47117
+2482 1567 30174
+2493 1567 42130
+2505 1567 3725
+4078 1567 27852657
+1482 1568 1
+1766 1568 41196
+1767 1568 14157
+1768 1568 14157
+1884 1568 13882
+1886 1568 16743
+1895 1568 12207
+1903 1568 12207
+1912 1568 12207
+1937 1568 48629
+1938 1568 48629
+1939 1568 62511
+1940 1568 62955
+1943 1568 25649
+1950 1568 28198
+1958 1568 28198
+1967 1568 40405
+1977 1568 28198
+2003 1568 48629
+2004 1568 48629
+2005 1568 62511
+2006 1568 62955
+2007 1568 62955
+2009 1568 25649
+2016 1568 28198
+2024 1568 28198
+2033 1568 40405
+2043 1568 56396
+2054 1568 28198
+2115 1568 16359
+2116 1568 16359
+2117 1568 40601
+2118 1568 1351
+2119 1568 50513
+2120 1568 44698
+2121 1568 57288
+2122 1568 36433
+2123 1568 51441
+2124 1568 44698
+2125 1568 57288
+2126 1568 30162
+2127 1568 23457
+2128 1568 37537
+2129 1568 44698
+2130 1568 57288
+2131 1568 40513
+2132 1568 23109
+2133 1568 62553
+2134 1568 25016
+2137 1568 28314
+2138 1568 17927
+2139 1568 54922
+2140 1568 31571
+2164 1568 32045
+2165 1568 21658
+2166 1568 58653
+2167 1568 6776
+2168 1568 53348
+2175 1568 53348
+2198 1568 58203
+2199 1568 30444
+2201 1568 59390
+2202 1568 30864
+2203 1568 34121
+2204 1568 42649
+2211 1568 14604
+2219 1568 26777
+2243 1568 24383
+2244 1568 62145
+2245 1568 38102
+2247 1568 6308
+2248 1568 37879
+2249 1568 53000
+2256 1568 2522
+2264 1568 43708
+2273 1568 16931
+2298 1568 32908
+2299 1568 5149
+2300 1568 46627
+2301 1568 7074
+2303 1568 26559
+2304 1568 10331
+2311 1568 26907
+2319 1568 23265
+2328 1568 44192
+2338 1568 27261
+2364 1568 13142
+2365 1568 31350
+2366 1568 53948
+2367 1568 64171
+2368 1568 6475
+2370 1568 53729
+2377 1568 28285
+2385 1568 52092
+2394 1568 56475
+2404 1568 39418
+2415 1568 12157
+2442 1568 50684
+2443 1568 24531
+2444 1568 50051
+2445 1568 39983
+2446 1568 59732
+2447 1568 15260
+2448 1568 39840
+2455 1568 15832
+2463 1568 55357
+2472 1568 44905
+2482 1568 7897
+2493 1568 24375
+2505 1568 28684
+4079 1568 27852657
+1483 1569 1
+1484 1569 1
+1489 1569 65520
+1495 1569 1
+1657 1569 25432
+1928 1569 12336
+1929 1569 38596
+1930 1569 38596
+1947 1569 11729
+1948 1569 11865
+1956 1569 55222
+1963 1569 41332
+1965 1569 35415
+1968 1569 5569
+1969 1569 5569
+1970 1569 5569
+1971 1569 46105
+1972 1569 17102
+1973 1569 8970
+1974 1569 12824
+1977 1569 4376
+1978 1569 40487
+1979 1569 40487
+1980 1569 46056
+1981 1569 40487
+2037 1569 46105
+2038 1569 17102
+2039 1569 8970
+2040 1569 12824
+2041 1569 20654
+2043 1569 4376
+2044 1569 40487
+2045 1569 40487
+2046 1569 46056
+2047 1569 15453
+2058 1569 40487
+2278 1569 19430
+2279 1569 19430
+2280 1569 43840
+2281 1569 33112
+2282 1569 13682
+2283 1569 15520
+2284 1569 21187
+2285 1569 17000
+2286 1569 3318
+2287 1569 15520
+2288 1569 21187
+2289 1569 45665
+2290 1569 60959
+2291 1569 57641
+2292 1569 15520
+2293 1569 21187
+2294 1569 17603
+2295 1569 51850
+2296 1569 41611
+2297 1569 49491
+2300 1569 55056
+2301 1569 8339
+2302 1569 24285
+2303 1569 6194
+2307 1569 55995
+2308 1569 39145
+2309 1569 22211
+2310 1569 59888
+2311 1569 17010
+2312 1569 17010
+2313 1569 62763
+2314 1569 22111
+2316 1569 61615
+2317 1569 19058
+2318 1569 44937
+2319 1569 37148
+2320 1569 23368
+2321 1569 6358
+2322 1569 18880
+2323 1569 43749
+2324 1569 34245
+2326 1569 23172
+2327 1569 10114
+2328 1569 34750
+2329 1569 17376
+2330 1569 57380
+2331 1569 51022
+2332 1569 32730
+2333 1569 15014
+2334 1569 20627
+2335 1569 42856
+2337 1569 30480
+2338 1569 61006
+2339 1569 44727
+2340 1569 27637
+2341 1569 20649
+2342 1569 35148
+2398 1569 7399
+2399 1569 63186
+2400 1569 43520
+2401 1569 16627
+2402 1569 46688
+2404 1569 37098
+2405 1569 21119
+2406 1569 16669
+2407 1569 4697
+2408 1569 28490
+2419 1569 58863
+2476 1569 63973
+2477 1569 23483
+2478 1569 5157
+2479 1569 22480
+2480 1569 40144
+2481 1569 34123
+2482 1569 34569
+2483 1569 10300
+2484 1569 50789
+2485 1569 12493
+2486 1569 7290
+2497 1569 60363
+2509 1569 25003
+4080 1569 27852657
+1484 1570 1
+1511 1570 1
+1646 1570 1
+1763 1570 1
+1767 1570 32762
+1790 1570 1
+1794 1570 32762
+1829 1570 32761
+1869 1570 1
+1874 1570 32760
+1924 1570 1
+1925 1570 32764
+1990 1570 1
+1991 1570 32763
+1995 1570 3
+2123 1570 61427
+2127 1570 8192
+2132 1570 8192
+2150 1570 61427
+2154 1570 8192
+2159 1570 8192
+2186 1570 17746
+2190 1570 30032
+2195 1570 30032
+2230 1570 24572
+2235 1570 40952
+2240 1570 40952
+2285 1570 24572
+2286 1570 28670
+2295 1570 40952
+2351 1570 61427
+2352 1570 12287
+2356 1570 8190
+2429 1570 38903
+2430 1570 63473
+2434 1570 36855
+2439 1570 36855
+2445 1570 45047
+2452 1570 45047
+2460 1570 32761
+2469 1570 50506
+2479 1570 50507
+2490 1570 23892
+2502 1570 5
+4081 1570 27852657
+1485 1571 1
+1487 1571 11868
+1488 1571 51084
+1489 1571 51084
+1494 1571 670
+1495 1571 15107
+1500 1571 3670
+1526 1571 6468
+1527 1571 24379
+1528 1571 4776
+1529 1571 16947
+1536 1571 16947
+1558 1571 65330
+1559 1571 6520
+1561 1571 51232
+1562 1571 33010
+1563 1571 59358
+1564 1571 40540
+1571 1571 49734
+1579 1571 32787
+1603 1571 1464
+1604 1571 43705
+1605 1571 57176
+1607 1571 33626
+1608 1571 28915
+1609 1571 33754
+1616 1571 46392
+1624 1571 10825
+1633 1571 43559
+1658 1571 60704
+1659 1571 15923
+1660 1571 53368
+1661 1571 55064
+1663 1571 59816
+1664 1571 4048
+1671 1571 52423
+1679 1571 31890
+1688 1571 44719
+1698 1571 1160
+1937 1571 37998
+1938 1571 22953
+1939 1571 50801
+1940 1571 53890
+1941 1571 29396
+1943 1571 51119
+1950 1571 27621
+1958 1571 63380
+1967 1571 8458
+1977 1571 56265
+2043 1571 55105
+2298 1571 27031
+2299 1571 48157
+2300 1571 40447
+2301 1571 1181
+2302 1571 20862
+2303 1571 9897
+2304 1571 44622
+2311 1571 47124
+2319 1571 41304
+2328 1571 1145
+2338 1571 7299
+2404 1571 60410
+2482 1571 43710
+4082 1571 27852657
+1486 1572 1
+1487 1572 53654
+1488 1572 14438
+1489 1572 14438
+1494 1572 64852
+1495 1572 50414
+1500 1572 64977
+1526 1572 59053
+1527 1572 41452
+1528 1572 8401
+1529 1572 16452
+1536 1572 16452
+1558 1572 3505
+1559 1572 25738
+1561 1572 33357
+1562 1572 51901
+1563 1572 10055
+1564 1572 25280
+1571 1572 16248
+1579 1572 65317
+1603 1572 26568
+1604 1572 22309
+1605 1572 8838
+1607 1572 674
+1608 1572 25071
+1609 1572 59514
+1616 1572 15010
+1624 1572 37960
+1633 1572 38164
+1658 1572 35901
+1659 1572 34153
+1660 1572 62229
+1661 1572 60533
+1663 1572 47385
+1664 1572 38492
+1671 1572 52609
+1679 1572 63135
+1688 1572 49623
+1698 1572 11459
+1937 1572 21027
+1938 1572 37123
+1939 1572 9275
+1940 1572 6186
+1941 1572 29179
+1943 1572 18750
+1950 1572 14527
+1958 1572 43850
+1967 1572 26416
+1977 1572 59818
+2043 1572 48359
+2298 1572 10380
+2299 1572 7736
+2300 1572 15446
+2301 1572 54712
+2302 1572 43794
+2303 1572 7095
+2304 1572 30560
+2311 1572 13450
+2319 1572 17069
+2328 1572 6900
+2338 1572 23179
+2404 1572 38175
+2482 1572 64846
+4083 1572 27852657
+1487 1573 1
+1657 1573 27565
+1928 1573 37583
+1929 1573 63466
+1930 1573 63466
+1947 1573 21906
+1948 1573 20804
+1956 1573 25552
+1963 1573 2387
+1965 1573 36769
+1968 1573 1280
+1969 1573 1280
+1970 1573 1280
+1971 1573 43243
+1972 1573 59539
+1973 1573 49617
+1974 1573 5587
+1977 1573 5868
+1978 1573 46386
+1979 1573 46386
+1980 1573 47666
+1981 1573 46386
+2037 1573 43243
+2038 1573 59539
+2039 1573 49617
+2040 1573 5587
+2041 1573 39340
+2043 1573 5868
+2044 1573 46386
+2045 1573 46386
+2046 1573 47666
+2047 1573 27251
+2058 1573 46386
+2278 1573 30944
+2279 1573 30944
+2280 1573 34017
+2281 1573 25886
+2282 1573 60463
+2283 1573 4437
+2284 1573 18300
+2285 1573 33289
+2286 1573 38347
+2287 1573 4437
+2288 1573 18300
+2289 1573 11431
+2290 1573 36874
+2291 1573 64048
+2292 1573 4437
+2293 1573 18300
+2294 1573 55149
+2295 1573 40271
+2296 1573 30863
+2297 1573 32336
+2300 1573 48037
+2301 1573 12210
+2302 1573 15557
+2303 1573 35284
+2307 1573 17547
+2308 1573 27121
+2309 1573 58059
+2310 1573 36962
+2311 1573 56687
+2312 1573 56687
+2313 1573 4315
+2314 1573 42778
+2316 1573 45729
+2317 1573 1203
+2318 1573 52719
+2319 1573 2392
+2320 1573 42291
+2321 1573 51125
+2322 1573 45157
+2323 1573 18099
+2324 1573 48525
+2326 1573 15747
+2327 1573 50883
+2328 1573 38099
+2329 1573 35321
+2330 1573 58824
+2331 1573 7699
+2332 1573 28447
+2333 1573 13264
+2334 1573 18542
+2335 1573 49068
+2337 1573 46223
+2338 1573 7786
+2339 1573 54396
+2340 1573 21703
+2341 1573 6896
+2342 1573 64718
+2398 1573 31696
+2399 1573 34316
+2400 1573 61462
+2401 1573 9348
+2402 1573 10096
+2404 1573 34658
+2405 1573 2977
+2406 1573 1521
+2407 1573 53501
+2408 1573 61645
+2419 1573 62448
+2476 1573 15796
+2477 1573 57868
+2478 1573 32794
+2479 1573 58887
+2480 1573 25454
+2481 1573 30065
+2482 1573 5626
+2483 1573 47812
+2484 1573 16553
+2485 1573 7252
+2486 1573 15616
+2497 1573 44323
+2509 1573 58805
+4084 1573 27852657
+1488 1574 1
+1489 1574 1
+1495 1574 65520
+1657 1574 10309
+1928 1574 17587
+1929 1574 31596
+1930 1574 31596
+1947 1574 43615
+1948 1574 22824
+1956 1574 30208
+1963 1574 37310
+1965 1574 43493
+1968 1574 36653
+1969 1574 36653
+1970 1574 36653
+1971 1574 32876
+1972 1574 8833
+1973 1574 19662
+1974 1574 9984
+1977 1574 31028
+1978 1574 1852
+1979 1574 1852
+1980 1574 38505
+1981 1574 1852
+2037 1574 32876
+2038 1574 8833
+2039 1574 19662
+2040 1574 9984
+2041 1574 24244
+2043 1574 31028
+2044 1574 1852
+2045 1574 1852
+2046 1574 38505
+2047 1574 3704
+2058 1574 1852
+2278 1574 50900
+2279 1574 50900
+2280 1574 301
+2281 1574 44096
+2282 1574 58717
+2283 1574 38278
+2284 1574 13322
+2285 1574 62118
+2286 1574 3401
+2287 1574 38278
+2288 1574 13322
+2289 1574 54525
+2290 1574 18764
+2291 1574 15363
+2292 1574 38278
+2293 1574 13322
+2294 1574 20040
+2295 1574 1403
+2296 1574 41329
+2297 1574 25966
+2300 1574 16191
+2301 1574 21038
+2302 1574 12138
+2303 1574 57198
+2307 1574 53074
+2308 1574 12520
+2309 1574 26524
+2310 1574 8648
+2311 1574 8255
+2312 1574 8255
+2313 1574 24725
+2314 1574 16765
+2316 1574 5414
+2317 1574 41438
+2318 1574 39156
+2319 1574 41242
+2320 1574 54158
+2321 1574 45903
+2322 1574 30587
+2323 1574 22627
+2324 1574 51049
+2326 1574 63597
+2327 1574 36274
+2328 1574 14600
+2329 1574 42943
+2330 1574 58642
+2331 1574 12739
+2332 1574 11629
+2333 1574 57753
+2334 1574 25254
+2335 1574 52066
+2337 1574 63921
+2338 1574 4205
+2339 1574 61850
+2340 1574 56282
+2341 1574 4984
+2342 1574 57766
+2398 1574 26303
+2399 1574 38463
+2400 1574 41587
+2401 1574 45621
+2402 1574 8229
+2404 1574 12476
+2405 1574 38677
+2406 1574 26249
+2407 1574 49219
+2408 1574 8439
+2419 1574 16194
+2476 1574 32968
+2477 1574 53709
+2478 1574 60560
+2479 1574 64858
+2480 1574 23932
+2481 1574 7053
+2482 1574 8518
+2483 1574 59395
+2484 1574 58540
+2485 1574 44117
+2486 1574 56083
+2497 1574 15455
+2509 1574 807
+4085 1574 27852657
+1489 1575 1
+1516 1575 43337
+1551 1575 28743
+1557 1575 29510
+1602 1575 45124
+1930 1575 47962
+2289 1575 1785
+2290 1575 18278
+2291 1575 15078
+2296 1575 909
+2297 1575 7701
+2302 1575 25737
+2308 1575 32333
+2309 1575 9898
+2310 1575 38836
+2311 1575 44110
+2312 1575 44110
+2313 1575 36897
+2314 1575 27161
+2316 1575 33200
+2317 1575 15596
+2318 1575 17666
+2319 1575 12413
+2320 1575 47914
+2321 1575 3804
+2322 1575 8874
+2323 1575 13121
+2324 1575 24538
+2326 1575 8885
+2327 1575 63236
+2328 1575 20745
+2329 1575 49250
+2330 1575 29477
+2331 1575 25673
+2332 1575 60883
+2333 1575 41854
+2334 1575 36240
+2335 1575 10114
+2337 1575 60949
+2338 1575 35971
+2339 1575 59921
+2340 1575 25726
+2341 1575 57179
+2342 1575 31506
+2398 1575 63574
+2399 1575 11155
+2400 1575 5671
+2401 1575 1896
+2402 1575 8192
+2404 1575 49090
+2405 1575 9607
+2406 1575 39398
+2407 1575 17237
+2408 1575 1711
+2419 1575 35726
+2476 1575 57387
+2477 1575 15168
+2478 1575 15764
+2479 1575 1432
+2480 1575 43534
+2481 1575 57519
+2482 1575 10665
+2483 1575 8227
+2484 1575 7176
+2485 1575 57048
+2486 1575 58923
+2497 1575 44578
+2509 1575 44053
+4086 1575 27852657
+1490 1576 1
+1559 1576 1
+1604 1576 1
+1605 1576 49150
+1659 1576 1
+1660 1576 49150
+1661 1576 49150
+1884 1576 18
+1938 1576 1
+1939 1576 49150
+1940 1576 16391
+2006 1576 32762
+2007 1576 32762
+2199 1576 8183
+2244 1576 8183
+2245 1576 8183
+2298 1576 24572
+2299 1576 4089
+2300 1576 32755
+2301 1576 32764
+2303 1576 61427
+2364 1576 6
+2365 1576 36855
+2366 1576 36855
+2367 1576 8192
+2368 1576 8192
+2442 1576 1
+2443 1576 24568
+2444 1576 24568
+2445 1576 24568
+2446 1576 24568
+2447 1576 24568
+2482 1576 54268
+2493 1576 43011
+2505 1576 31222
+4087 1576 27852657
+1491 1577 1
+1492 1577 1
+1495 1577 1
+1559 1577 65520
+1604 1577 65520
+1605 1577 49137
+1659 1577 65520
+1660 1577 49137
+1661 1577 49137
+1884 1577 43674
+1938 1577 65520
+1939 1577 27296
+1940 1577 16374
+2005 1577 43680
+2006 1577 32758
+2007 1577 32758
+2199 1577 57338
+2244 1577 57338
+2245 1577 62797
+2299 1577 20483
+2300 1577 38227
+2301 1577 49136
+2303 1577 12285
+2365 1577 28672
+2366 1577 9561
+2367 1577 19113
+2368 1577 19113
+2443 1577 40954
+2444 1577 36859
+2445 1577 54604
+2446 1577 54604
+2447 1577 54605
+2482 1577 25590
+2493 1577 51182
+2505 1577 64676
+4088 1577 27852657
+1492 1578 1
+1657 1578 13889
+1928 1578 4315
+1929 1578 59807
+1930 1578 59807
+1947 1578 26137
+1948 1578 3696
+1956 1578 55100
+1963 1578 57544
+1965 1578 34231
+1968 1578 56240
+1969 1578 56240
+1970 1578 56240
+1971 1578 15729
+1972 1578 51527
+1973 1578 29851
+1974 1578 61614
+1977 1578 63675
+1978 1578 44141
+1979 1578 44141
+1980 1578 34860
+1981 1578 44141
+2037 1578 15729
+2038 1578 51527
+2039 1578 29851
+2040 1578 61614
+2041 1578 50560
+2043 1578 63675
+2044 1578 44141
+2045 1578 44141
+2046 1578 34860
+2047 1578 22761
+2058 1578 44141
+2278 1578 20422
+2279 1578 20422
+2280 1578 7961
+2281 1578 64111
+2282 1578 43689
+2283 1578 62301
+2284 1578 26260
+2285 1578 47220
+2286 1578 3531
+2287 1578 62301
+2288 1578 26260
+2289 1578 57957
+2290 1578 39295
+2291 1578 35764
+2292 1578 62301
+2293 1578 26260
+2294 1578 35588
+2295 1578 33617
+2296 1578 31753
+2297 1578 61510
+2300 1578 44356
+2301 1578 63607
+2302 1578 57516
+2303 1578 52610
+2307 1578 60908
+2308 1578 43251
+2309 1578 58082
+2310 1578 34776
+2311 1578 55579
+2312 1578 55579
+2313 1578 3092
+2314 1578 7054
+2316 1578 51885
+2317 1578 21888
+2318 1578 13646
+2319 1578 17253
+2320 1578 19309
+2321 1578 29251
+2322 1578 26958
+2323 1578 30920
+2324 1578 38142
+2326 1578 12780
+2327 1578 8659
+2328 1578 36298
+2329 1578 10975
+2330 1578 10357
+2331 1578 46627
+2332 1578 13401
+2333 1578 48459
+2334 1578 35337
+2335 1578 51713
+2337 1578 50007
+2338 1578 25222
+2339 1578 43147
+2340 1578 73
+2341 1578 40012
+2342 1578 58906
+2398 1578 39301
+2399 1578 46779
+2400 1578 18391
+2401 1578 60478
+2402 1578 11690
+2404 1578 14298
+2405 1578 65384
+2406 1578 13272
+2407 1578 39347
+2408 1578 48928
+2419 1578 55543
+2476 1578 6752
+2477 1578 22631
+2478 1578 50658
+2479 1578 63306
+2480 1578 53579
+2481 1578 9435
+2482 1578 51909
+2483 1578 97
+2484 1578 23069
+2485 1578 32296
+2486 1578 9144
+2497 1578 31468
+2509 1578 18314
+4089 1578 27852657
+1493 1579 1
+1520 1579 1
+1655 1579 1
+2301 1579 32761
+2308 1579 32761
+2335 1579 32761
+2367 1579 32761
+2368 1579 32761
+2374 1579 32761
+2375 1579 32761
+2401 1579 1
+2412 1579 32761
+2413 1579 32761
+2445 1579 24571
+2446 1579 24571
+2447 1579 24571
+2452 1579 24571
+2453 1579 24571
+2454 1579 24571
+2479 1579 49142
+2481 1579 1
+2490 1579 49141
+2491 1579 49141
+2502 1579 8190
+2503 1579 8190
+2504 1579 8190
+2505 1579 36856
+2506 1579 36856
+2509 1579 32761
+2510 1579 1
+2511 1579 13310
+4090 1579 27852657
+1494 1580 1
+1495 1580 1
+1657 1580 27647
+1928 1580 43417
+1929 1580 13288
+1930 1580 13288
+1948 1580 21894
+1956 1580 9762
+1963 1580 47841
+1965 1580 37227
+1968 1580 58255
+1969 1580 58255
+1970 1580 58255
+1971 1580 24850
+1972 1580 32597
+1973 1580 53707
+1974 1580 5678
+1977 1580 39670
+1978 1580 19323
+1979 1580 19323
+1980 1580 12057
+1981 1580 19323
+2037 1580 24850
+2038 1580 32597
+2039 1580 53707
+2040 1580 5678
+2041 1580 23187
+2043 1580 39670
+2044 1580 19323
+2045 1580 19323
+2046 1580 12057
+2047 1580 38646
+2058 1580 19323
+2278 1580 37841
+2279 1580 37841
+2280 1580 54485
+2281 1580 62151
+2282 1580 24310
+2283 1580 12147
+2284 1580 20857
+2285 1580 19094
+2286 1580 60305
+2287 1580 12147
+2288 1580 20857
+2289 1580 2647
+2290 1580 25657
+2291 1580 30873
+2292 1580 12147
+2293 1580 20857
+2294 1580 21335
+2295 1580 44368
+2296 1580 59451
+2297 1580 28578
+2300 1580 22813
+2301 1580 6768
+2302 1580 44804
+2303 1580 23200
+2307 1580 56907
+2308 1580 40862
+2309 1580 57069
+2310 1580 16221
+2311 1580 21221
+2312 1580 21221
+2313 1580 19846
+2314 1580 52628
+2316 1580 32160
+2317 1580 36290
+2318 1580 49819
+2319 1580 17434
+2320 1580 9522
+2321 1580 53822
+2322 1580 5162
+2323 1580 37944
+2324 1580 26602
+2326 1580 21501
+2327 1580 10547
+2328 1580 15280
+2329 1580 65070
+2330 1580 64082
+2331 1580 10260
+2332 1580 25990
+2333 1580 58334
+2334 1580 2019
+2335 1580 41768
+2337 1580 3633
+2338 1580 56737
+2339 1580 43564
+2340 1580 57122
+2341 1580 54243
+2342 1580 43983
+2398 1580 36202
+2399 1580 44018
+2400 1580 13549
+2401 1580 9583
+2402 1580 51813
+2404 1580 30603
+2405 1580 11759
+2406 1580 29390
+2407 1580 5721
+2408 1580 760
+2419 1580 22298
+2476 1580 41308
+2477 1580 57745
+2478 1580 45153
+2479 1580 31532
+2480 1580 43449
+2481 1580 51102
+2482 1580 40136
+2483 1580 2681
+2484 1580 7977
+2485 1580 21858
+2486 1580 32751
+2497 1580 9720
+2509 1580 59854
+4091 1580 27852657
+1495 1581 1
+1522 1581 41549
+1557 1581 15522
+1602 1581 16766
+2296 1581 39556
+2297 1581 6657
+2302 1581 10545
+2309 1581 18691
+2310 1581 6287
+2311 1581 63909
+2312 1581 63909
+2313 1581 57476
+2314 1581 5334
+2316 1581 45923
+2317 1581 1246
+2318 1581 27362
+2319 1581 15375
+2320 1581 44405
+2321 1581 46017
+2322 1581 27467
+2323 1581 6536
+2324 1581 6536
+2326 1581 46488
+2327 1581 25503
+2328 1581 62532
+2329 1581 9052
+2330 1581 8532
+2331 1581 28036
+2332 1581 19437
+2333 1581 1015
+2334 1581 1015
+2335 1581 1015
+2337 1581 47025
+2338 1581 49522
+2339 1581 29492
+2340 1581 29743
+2341 1581 27022
+2342 1581 64507
+2398 1581 60344
+2399 1581 51990
+2400 1581 51990
+2401 1581 51990
+2402 1581 43627
+2404 1581 7476
+2405 1581 33653
+2406 1581 4189
+2407 1581 33903
+2408 1581 58802
+2419 1581 59816
+2476 1581 12204
+2477 1581 54816
+2478 1581 54816
+2479 1581 54816
+2480 1581 53118
+2481 1581 23251
+2482 1581 58632
+2483 1581 14826
+2484 1581 9681
+2485 1581 51392
+2486 1581 15863
+2497 1581 43191
+2509 1581 40577
+4092 1581 27852657
+1496 1582 1
+2482 1582 65520
+4093 1582 27852657
+1497 1583 1
+1498 1583 1
+1499 1583 1
+1500 1583 1
+1501 1583 1
+1525 1583 1
+1526 1583 1
+1527 1583 1
+1528 1583 1
+1561 1583 1
+1562 1583 1
+1563 1583 1
+1607 1583 1
+1608 1583 1
+1663 1583 1
+2304 1583 32761
+2311 1583 32761
+2319 1583 32761
+2328 1583 32761
+2338 1583 32761
+2404 1583 32761
+2482 1583 24573
+4094 1583 27852657
+1498 1584 1
+1533 1584 1
+1534 1584 1
+1572 1584 39112
+1581 1584 26409
+1609 1584 44175
+1617 1584 39411
+1626 1584 29285
+1634 1584 17453
+1635 1584 33638
+1636 1584 30762
+1664 1584 29437
+1672 1584 54149
+1681 1584 59374
+1691 1584 32601
+1697 1584 27937
+1698 1584 34537
+1699 1584 17084
+1700 1584 38973
+1701 1584 63925
+1702 1584 62086
+1943 1584 62917
+1951 1584 1743
+1960 1584 62021
+1970 1584 4598
+1981 1584 3164
+2044 1584 24708
+2045 1584 23163
+2046 1584 60683
+2047 1584 36333
+2058 1584 29734
+2302 1584 8281
+2304 1584 46828
+2308 1584 52522
+2309 1584 2181
+2310 1584 55820
+2311 1584 14303
+2312 1584 18204
+2313 1584 23702
+2314 1584 57725
+2316 1584 27753
+2317 1584 10743
+2318 1584 57996
+2319 1584 21034
+2320 1584 52605
+2321 1584 5050
+2322 1584 1539
+2323 1584 57663
+2324 1584 31016
+2326 1584 8852
+2327 1584 19415
+2328 1584 55134
+2329 1584 55197
+2330 1584 37506
+2331 1584 4196
+2332 1584 9312
+2333 1584 62061
+2334 1584 46833
+2335 1584 48872
+2337 1584 38639
+2338 1584 9325
+2339 1584 38217
+2340 1584 27846
+2341 1584 4197
+2342 1584 4160
+2398 1584 22116
+2399 1584 21837
+2400 1584 7847
+2401 1584 41407
+2402 1584 26427
+2404 1584 53488
+2405 1584 18603
+2406 1584 57355
+2407 1584 43453
+2408 1584 4310
+2419 1584 15670
+2476 1584 7017
+2477 1584 49428
+2478 1584 43651
+2479 1584 5279
+2480 1584 42084
+2481 1584 10117
+2482 1584 35447
+2483 1584 9083
+2484 1584 64489
+2485 1584 60557
+2486 1584 48949
+2497 1584 4207
+2509 1584 24703
+4095 1584 27852657
+1499 1585 1
+1533 1585 65520
+1577 1585 65520
+1609 1585 27231
+1617 1585 38290
+1626 1585 57776
+1634 1585 28138
+1635 1585 17370
+1636 1585 25115
+1664 1585 31530
+1672 1585 33991
+1681 1585 28945
+1691 1585 19347
+1697 1585 40093
+1698 1585 8506
+1699 1585 45889
+1700 1585 62262
+1701 1585 64433
+1702 1585 4680
+1943 1585 44443
+1951 1585 21078
+1960 1585 25174
+1970 1585 5415
+1981 1585 15482
+2044 1585 60349
+2045 1585 33773
+2046 1585 28932
+2047 1585 23587
+2058 1585 12785
+2302 1585 58753
+2304 1585 55636
+2308 1585 12999
+2309 1585 16540
+2310 1585 35840
+2311 1585 16519
+2312 1585 26404
+2313 1585 64604
+2314 1585 55186
+2316 1585 59623
+2317 1585 61638
+2318 1585 17574
+2319 1585 24599
+2320 1585 42226
+2321 1585 12643
+2322 1585 32950
+2323 1585 4392
+2324 1585 4392
+2326 1585 47489
+2327 1585 43384
+2328 1585 15020
+2329 1585 12080
+2330 1585 28357
+2331 1585 31896
+2332 1585 32333
+2333 1585 30898
+2334 1585 30898
+2335 1585 28859
+2337 1585 22664
+2338 1585 18648
+2339 1585 23748
+2340 1585 62990
+2341 1585 36091
+2342 1585 22050
+2398 1585 18694
+2399 1585 20412
+2400 1585 20412
+2401 1585 52373
+2402 1585 40292
+2404 1585 40109
+2405 1585 18041
+2406 1585 12782
+2407 1585 60895
+2408 1585 41483
+2419 1585 61236
+2476 1585 23313
+2477 1585 23538
+2478 1585 23538
+2479 1585 61910
+2480 1585 18068
+2481 1585 4688
+2482 1585 29806
+2483 1585 25566
+2484 1585 27139
+2485 1585 28705
+2486 1585 10790
+2497 1585 45489
+2509 1585 24197
+4096 1585 27852657
+1500 1586 1
+1534 1586 65520
+1577 1586 1
+1609 1586 34307
+1617 1586 31214
+1626 1586 34307
+1634 1586 33746
+1635 1586 45016
+1636 1586 10709
+1664 1586 65288
+1672 1586 233
+1681 1586 65288
+1691 1586 60877
+1697 1586 20975
+1698 1586 57395
+1699 1586 23649
+1700 1586 2357
+1701 1586 36317
+1702 1586 51670
+1943 1586 19622
+1951 1586 45899
+1960 1586 19622
+1970 1586 14229
+1981 1586 23238
+2044 1586 59498
+2045 1586 13867
+2046 1586 12777
+2047 1586 954
+2058 1586 29386
+2302 1586 44211
+2304 1586 54682
+2309 1586 36185
+2310 1586 59926
+2311 1586 52517
+2312 1586 63356
+2313 1586 41763
+2314 1586 18488
+2316 1586 6846
+2317 1586 46555
+2318 1586 59516
+2319 1586 23196
+2320 1586 47123
+2321 1586 49288
+2322 1586 24038
+2323 1586 42233
+2324 1586 42233
+2326 1586 10964
+2327 1586 59141
+2328 1586 18909
+2329 1586 48775
+2330 1586 41713
+2331 1586 65290
+2332 1586 35294
+2333 1586 27483
+2334 1586 27483
+2335 1586 27483
+2337 1586 7581
+2338 1586 31348
+2339 1586 39521
+2340 1586 2333
+2341 1586 44525
+2342 1586 24970
+2398 1586 28202
+2399 1586 46320
+2400 1586 46320
+2401 1586 46320
+2402 1586 34478
+2404 1586 65020
+2405 1586 12521
+2406 1586 44591
+2407 1586 55425
+2408 1586 38869
+2419 1586 50547
+2476 1586 60946
+2477 1586 27698
+2478 1586 27698
+2479 1586 27698
+2480 1586 26328
+2481 1586 39713
+2482 1586 43933
+2483 1586 53490
+2484 1586 62709
+2485 1586 58467
+2486 1586 53775
+2497 1586 58844
+2509 1586 22134
+4097 1586 27852657
+1501 1587 1
+1572 1587 25422
+1581 1587 40099
+1609 1587 53473
+1617 1587 31279
+1626 1587 52179
+1634 1587 48685
+1635 1587 4741
+1636 1587 58182
+1664 1587 28457
+1672 1587 56295
+1681 1587 36632
+1691 1587 60771
+1697 1587 17400
+1698 1587 46353
+1699 1587 63189
+1700 1587 874
+1701 1587 18523
+1702 1587 15934
+1943 1587 19884
+1951 1587 42049
+1960 1587 9571
+1970 1587 22410
+1981 1587 51761
+2044 1587 1626
+2045 1587 4927
+2046 1587 35050
+2047 1587 23267
+2058 1587 52961
+2304 1587 16898
+2310 1587 16541
+2311 1587 37243
+2312 1587 21054
+2313 1587 32969
+2314 1587 32969
+2316 1587 29538
+2317 1587 29538
+2318 1587 51122
+2319 1587 39081
+2320 1587 55703
+2321 1587 61356
+2322 1587 53406
+2323 1587 53406
+2324 1587 53406
+2326 1587 64677
+2327 1587 6760
+2328 1587 24768
+2329 1587 14397
+2330 1587 13748
+2331 1587 42272
+2332 1587 8361
+2333 1587 8361
+2334 1587 8361
+2335 1587 8361
+2337 1587 36799
+2338 1587 60882
+2339 1587 10821
+2340 1587 48684
+2341 1587 15550
+2342 1587 21407
+2398 1587 32805
+2399 1587 32805
+2400 1587 32805
+2401 1587 32805
+2402 1587 32805
+2404 1587 14661
+2405 1587 34456
+2406 1587 57728
+2407 1587 27055
+2408 1587 63393
+2419 1587 31408
+2476 1587 53237
+2477 1587 53237
+2478 1587 53237
+2479 1587 53237
+2480 1587 53237
+2481 1587 55057
+2482 1587 46075
+2483 1587 13368
+2484 1587 57451
+2485 1587 32604
+2486 1587 41088
+2497 1587 58153
+2509 1587 58328
+4098 1587 27852657
+1503 1588 1
+1504 1588 1
+1507 1588 65520
+1511 1588 1
+1522 1588 5880
+1793 1588 36153
+1794 1588 47785
+1795 1588 47785
+1813 1588 18753
+1848 1588 48705
+1891 1588 42315
+1893 1588 25135
+1896 1588 32740
+1904 1588 32740
+1913 1588 32740
+1944 1588 43791
+1945 1588 32053
+1946 1588 17691
+1947 1588 46815
+1950 1588 24844
+1951 1588 31085
+1959 1588 31085
+1968 1588 63825
+1978 1588 31085
+2010 1588 43791
+2011 1588 32053
+2012 1588 17691
+2013 1588 46815
+2014 1588 18261
+2016 1588 24844
+2017 1588 31085
+2025 1588 31085
+2034 1588 63825
+2044 1588 62170
+2055 1588 31085
+2142 1588 25420
+2143 1588 25420
+2144 1588 41777
+2145 1588 64051
+2146 1588 38631
+2147 1588 44231
+2148 1588 21696
+2149 1588 32370
+2150 1588 59260
+2151 1588 44231
+2152 1588 21696
+2153 1588 7834
+2154 1588 24480
+2155 1588 30741
+2156 1588 44231
+2157 1588 21696
+2158 1588 41283
+2159 1588 30983
+2160 1588 50132
+2161 1588 19391
+2164 1588 34609
+2165 1588 56057
+2166 1588 19240
+2167 1588 2282
+2171 1588 41713
+2172 1588 63161
+2173 1588 26344
+2174 1588 31568
+2175 1588 56179
+2176 1588 56179
+2205 1588 22919
+2206 1588 13245
+2208 1588 37594
+2209 1588 27288
+2210 1588 23174
+2211 1588 54123
+2212 1588 32397
+2220 1588 41739
+2250 1588 28165
+2251 1588 18491
+2252 1588 5019
+2254 1588 5652
+2255 1588 37407
+2256 1588 64665
+2257 1588 9558
+2265 1588 903
+2274 1588 24685
+2305 1588 63720
+2306 1588 16449
+2307 1588 49143
+2308 1588 60711
+2310 1588 40217
+2311 1588 17166
+2312 1588 26040
+2320 1588 52832
+2329 1588 53696
+2339 1588 29011
+2371 1588 404
+2372 1588 13771
+2373 1588 48375
+2374 1588 47758
+2375 1588 46406
+2377 1588 6755
+2378 1588 46900
+2386 1588 20975
+2395 1588 40668
+2405 1588 38144
+2416 1588 9133
+2449 1588 62527
+2450 1588 50574
+2451 1588 31569
+2452 1588 295
+2453 1588 57469
+2454 1588 42593
+2455 1588 7177
+2456 1588 63293
+2464 1588 10596
+2473 1588 18548
+2483 1588 33875
+2494 1588 9756
+2506 1588 17937
+4099 1588 27852657
+1504 1589 1
+2477 1589 65520
+4100 1589 27852657
+1505 1590 1
+1522 1590 27565
+1793 1590 23418
+1794 1590 46784
+1795 1590 46784
+1813 1590 4381
+1848 1590 65034
+1891 1590 40932
+1893 1590 28749
+1896 1590 22503
+1904 1590 22503
+1913 1590 22503
+1944 1590 22793
+1945 1590 9073
+1946 1590 9550
+1947 1590 17171
+1950 1590 815
+1951 1590 16583
+1959 1590 16583
+1968 1590 39086
+1978 1590 16583
+2010 1590 22793
+2011 1590 9073
+2012 1590 9550
+2013 1590 17171
+2014 1590 2964
+2016 1590 815
+2017 1590 16583
+2025 1590 16583
+2034 1590 39086
+2044 1590 33166
+2055 1590 16583
+2142 1590 62597
+2143 1590 62597
+2144 1590 58810
+2145 1590 43483
+2146 1590 46407
+2147 1590 54728
+2148 1590 18276
+2149 1590 4517
+2150 1590 23631
+2151 1590 54728
+2152 1590 18276
+2153 1590 23822
+2154 1590 39828
+2155 1590 16197
+2156 1590 54728
+2157 1590 18276
+2158 1590 3581
+2159 1590 21658
+2160 1590 47029
+2161 1590 30832
+2164 1590 12034
+2165 1590 28136
+2166 1590 181
+2167 1590 47385
+2171 1590 56992
+2172 1590 7573
+2173 1590 45139
+2174 1590 32740
+2175 1590 32393
+2176 1590 32393
+2205 1590 27163
+2206 1590 45988
+2208 1590 59149
+2209 1590 59357
+2210 1590 64966
+2211 1590 16646
+2212 1590 50894
+2220 1590 18501
+2250 1590 27868
+2251 1590 46693
+2252 1590 51762
+2254 1590 47492
+2255 1590 50755
+2256 1590 16552
+2257 1590 34187
+2265 1590 60802
+2274 1590 42301
+2305 1590 55962
+2306 1590 48732
+2307 1590 24175
+2308 1590 7851
+2310 1590 58
+2311 1590 21442
+2312 1590 45458
+2320 1590 53319
+2329 1590 34883
+2339 1590 58103
+2371 1590 48077
+2372 1590 23299
+2373 1590 27266
+2374 1590 24770
+2375 1590 36651
+2377 1590 58827
+2378 1590 16316
+2386 1590 15843
+2395 1590 5885
+2405 1590 25771
+2416 1590 33189
+2449 1590 31503
+2450 1590 5650
+2451 1590 56586
+2452 1590 48447
+2453 1590 5556
+2454 1590 47343
+2455 1590 47884
+2456 1590 62847
+2464 1590 41905
+2473 1590 21104
+2483 1590 993
+2494 1590 46956
+2506 1590 60693
+4101 1590 27852657
+1506 1591 1
+1507 1591 1
+1511 1591 65520
+1522 1591 29861
+1793 1591 62139
+1794 1591 14817
+1795 1591 14817
+1813 1591 10941
+1848 1591 29443
+1891 1591 22912
+1893 1591 41432
+1896 1591 21981
+1904 1591 21981
+1913 1591 21981
+1944 1591 18535
+1945 1591 48446
+1946 1591 8277
+1947 1591 54134
+1950 1591 59787
+1951 1591 42320
+1959 1591 42320
+1968 1591 64301
+1978 1591 42320
+2010 1591 18535
+2011 1591 48446
+2012 1591 8277
+2013 1591 54134
+2014 1591 47967
+2016 1591 59787
+2017 1591 42320
+2025 1591 42320
+2034 1591 64301
+2044 1591 19119
+2055 1591 42320
+2142 1591 61176
+2143 1591 61176
+2144 1591 2342
+2145 1591 38592
+2146 1591 42937
+2147 1591 22162
+2148 1591 2062
+2149 1591 35148
+2150 1591 57732
+2151 1591 22162
+2152 1591 2062
+2153 1591 62174
+2154 1591 46398
+2155 1591 54187
+2156 1591 22162
+2157 1591 2062
+2158 1591 8692
+2159 1591 11223
+2160 1591 13687
+2161 1591 25021
+2164 1591 23044
+2165 1591 32219
+2166 1591 15438
+2167 1591 21489
+2171 1591 37073
+2172 1591 46248
+2173 1591 29467
+2174 1591 49490
+2175 1591 40470
+2176 1591 40470
+2205 1591 17274
+2206 1591 35933
+2208 1591 55423
+2209 1591 19331
+2210 1591 24918
+2211 1591 18930
+2212 1591 27889
+2220 1591 52940
+2250 1591 45065
+2251 1591 63724
+2252 1591 33467
+2254 1591 63768
+2255 1591 38839
+2256 1591 2123
+2257 1591 48971
+2265 1591 51933
+2274 1591 64514
+2305 1591 21855
+2306 1591 14113
+2307 1591 51381
+2308 1591 45113
+2310 1591 35593
+2311 1591 33240
+2312 1591 3027
+2320 1591 32043
+2329 1591 21281
+2339 1591 22288
+2371 1591 10070
+2372 1591 35252
+2373 1591 37306
+2374 1591 25714
+2375 1591 3700
+2377 1591 41946
+2378 1591 13193
+2386 1591 47633
+2395 1591 50225
+2405 1591 61405
+2416 1591 39117
+2449 1591 46333
+2450 1591 58130
+2451 1591 4321
+2452 1591 58147
+2453 1591 35423
+2454 1591 42809
+2455 1591 58008
+2456 1591 62331
+2464 1591 53315
+2473 1591 12268
+2483 1591 44892
+2494 1591 22308
+2506 1591 27175
+4102 1591 27852657
+1507 1592 1
+1511 1592 65520
+1516 1592 1
+1522 1592 65520
+1657 1592 59594
+1928 1592 23477
+1929 1592 21630
+1930 1592 21630
+1947 1592 17030
+1948 1592 64109
+1956 1592 23744
+1963 1592 54871
+1965 1592 58196
+1968 1592 40236
+1969 1592 40236
+1970 1592 40236
+1971 1592 1020
+1972 1592 31654
+1973 1592 32676
+1974 1592 14963
+1977 1592 51907
+1978 1592 24891
+1979 1592 24891
+1980 1592 65127
+1981 1592 24891
+2037 1592 1020
+2038 1592 31654
+2039 1592 32676
+2040 1592 14963
+2041 1592 30882
+2043 1592 51907
+2044 1592 24891
+2045 1592 24891
+2046 1592 65127
+2047 1592 49782
+2058 1592 24891
+2278 1592 13388
+2279 1592 13388
+2280 1592 2057
+2281 1592 7646
+2282 1592 59779
+2283 1592 63186
+2284 1592 19308
+2285 1592 42880
+2286 1592 48622
+2287 1592 38917
+2288 1592 60560
+2289 1592 59736
+2290 1592 36244
+2291 1592 53143
+2292 1592 10220
+2293 1592 31863
+2294 1592 56789
+2295 1592 52068
+2296 1592 37580
+2297 1592 49958
+2300 1592 47389
+2301 1592 5848
+2302 1592 24437
+2303 1592 10254
+2307 1592 29167
+2308 1592 10108
+2309 1592 16934
+2310 1592 28980
+2311 1592 62345
+2312 1592 62345
+2313 1592 3262
+2314 1592 17205
+2316 1592 54186
+2317 1592 47404
+2318 1592 60306
+2319 1592 60315
+2320 1592 51663
+2321 1592 54839
+2322 1592 6245
+2323 1592 20188
+2324 1592 26502
+2326 1592 4820
+2327 1592 8604
+2328 1592 50007
+2329 1592 20388
+2330 1592 26260
+2331 1592 36942
+2332 1592 56488
+2333 1592 7170
+2334 1592 12174
+2335 1592 40315
+2337 1592 63047
+2338 1592 33844
+2339 1592 11060
+2340 1592 61613
+2341 1592 65393
+2342 1592 28451
+2398 1592 30952
+2399 1592 2668
+2400 1592 60125
+2401 1592 47965
+2402 1592 29750
+2404 1592 19012
+2405 1592 8039
+2406 1592 11711
+2407 1592 50169
+2408 1592 24812
+2419 1592 61882
+2476 1592 5900
+2477 1592 48154
+2478 1592 40053
+2479 1592 55546
+2480 1592 21880
+2481 1592 1823
+2482 1592 23175
+2483 1592 39857
+2484 1592 30763
+2485 1592 47099
+2486 1592 38312
+2497 1592 21362
+2509 1592 9729
+4103 1592 27852657
+1508 1593 1
+1793 1593 22779
+1794 1593 45350
+1795 1593 45350
+1891 1593 38372
+1893 1593 9264
+1896 1593 1706
+1904 1593 1706
+1913 1593 1706
+1944 1593 37144
+1945 1593 37144
+1946 1593 9995
+1947 1593 34496
+1950 1593 33868
+1951 1593 38953
+1959 1593 38953
+1968 1593 40659
+1978 1593 38953
+2010 1593 37144
+2011 1593 37144
+2012 1593 9995
+2013 1593 34496
+2014 1593 34496
+2016 1593 33868
+2017 1593 38953
+2025 1593 38953
+2034 1593 40659
+2044 1593 12385
+2055 1593 38953
+2142 1593 41137
+2143 1593 41137
+2144 1593 53215
+2145 1593 30249
+2146 1593 54633
+2147 1593 50788
+2148 1593 6972
+2149 1593 58937
+2150 1593 4304
+2151 1593 50788
+2152 1593 6972
+2153 1593 4726
+2154 1593 49342
+2155 1593 45038
+2156 1593 50788
+2157 1593 6972
+2158 1593 22522
+2159 1593 60549
+2160 1593 42375
+2161 1593 62858
+2164 1593 13377
+2165 1593 60002
+2166 1593 25587
+2167 1593 18255
+2171 1593 10898
+2172 1593 57523
+2173 1593 23108
+2174 1593 46882
+2175 1593 6613
+2176 1593 6613
+2205 1593 9358
+2206 1593 14085
+2208 1593 16507
+2209 1593 47613
+2210 1593 52491
+2211 1593 24
+2212 1593 31267
+2220 1593 24654
+2250 1593 17025
+2251 1593 21752
+2252 1593 25444
+2254 1593 32582
+2255 1593 50837
+2256 1593 17820
+2257 1593 4260
+2265 1593 10542
+2274 1593 51409
+2305 1593 8147
+2306 1593 12874
+2307 1593 16566
+2308 1593 45928
+2310 1593 25273
+2311 1593 24465
+2312 1593 14066
+2320 1593 55665
+2329 1593 32611
+2339 1593 46723
+2371 1593 20016
+2372 1593 17581
+2373 1593 16496
+2374 1593 61481
+2375 1593 38998
+2377 1593 40095
+2378 1593 19771
+2386 1593 19196
+2395 1593 22079
+2405 1593 32341
+2416 1593 51139
+2449 1593 48826
+2450 1593 25641
+2451 1593 12409
+2452 1593 8132
+2453 1593 22317
+2454 1593 11650
+2455 1593 16115
+2456 1593 54229
+2464 1593 60719
+2473 1593 47117
+2483 1593 30174
+2494 1593 42130
+2506 1593 3725
+4104 1593 27852657
+1509 1594 1
+1793 1594 41196
+1794 1594 14157
+1795 1594 14157
+1891 1594 13882
+1893 1594 16743
+1896 1594 12207
+1904 1594 12207
+1913 1594 12207
+1944 1594 48629
+1945 1594 48629
+1946 1594 62511
+1947 1594 62955
+1950 1594 25649
+1951 1594 28198
+1959 1594 28198
+1968 1594 40405
+1978 1594 28198
+2010 1594 48629
+2011 1594 48629
+2012 1594 62511
+2013 1594 62955
+2014 1594 62955
+2016 1594 25649
+2017 1594 28198
+2025 1594 28198
+2034 1594 40405
+2044 1594 56396
+2055 1594 28198
+2142 1594 16359
+2143 1594 16359
+2144 1594 40601
+2145 1594 1351
+2146 1594 50513
+2147 1594 44698
+2148 1594 57288
+2149 1594 36433
+2150 1594 51441
+2151 1594 44698
+2152 1594 57288
+2153 1594 30162
+2154 1594 23457
+2155 1594 37537
+2156 1594 44698
+2157 1594 57288
+2158 1594 40513
+2159 1594 23109
+2160 1594 62553
+2161 1594 25016
+2164 1594 28314
+2165 1594 17927
+2166 1594 54922
+2167 1594 31571
+2171 1594 32045
+2172 1594 21658
+2173 1594 58653
+2174 1594 6776
+2175 1594 53348
+2176 1594 53348
+2205 1594 58203
+2206 1594 30444
+2208 1594 59390
+2209 1594 30864
+2210 1594 34121
+2211 1594 42649
+2212 1594 14604
+2220 1594 26777
+2250 1594 24383
+2251 1594 62145
+2252 1594 38102
+2254 1594 6308
+2255 1594 37879
+2256 1594 53000
+2257 1594 2522
+2265 1594 43708
+2274 1594 16931
+2305 1594 32908
+2306 1594 5149
+2307 1594 46627
+2308 1594 7074
+2310 1594 26559
+2311 1594 10331
+2312 1594 26907
+2320 1594 23265
+2329 1594 44192
+2339 1594 27261
+2371 1594 13142
+2372 1594 31350
+2373 1594 53948
+2374 1594 64171
+2375 1594 6475
+2377 1594 53729
+2378 1594 28285
+2386 1594 52092
+2395 1594 56475
+2405 1594 39418
+2416 1594 12157
+2449 1594 50684
+2450 1594 24531
+2451 1594 50051
+2452 1594 39983
+2453 1594 59732
+2454 1594 15260
+2455 1594 39840
+2456 1594 15832
+2464 1594 55357
+2473 1594 44905
+2483 1594 7897
+2494 1594 24375
+2506 1594 28684
+4105 1594 27852657
+1510 1595 1
+1511 1595 1
+1546 1595 1
+1789 1595 1
+1790 1595 1
+1794 1595 1
+1825 1595 1
+1829 1595 1
+2149 1595 32761
+2150 1595 32761
+2154 1595 32761
+2159 1595 32761
+2186 1595 32761
+2190 1595 32761
+2195 1595 32761
+2295 1595 32761
+2451 1595 1
+2452 1595 24572
+2460 1595 24572
+2479 1595 24572
+2490 1595 24572
+2491 1595 1
+2502 1595 4096
+2503 1595 32761
+2504 1595 32761
+2511 1595 24572
+4106 1595 27852657
+1511 1596 1
+1790 1596 56692
+1794 1596 14698
+1829 1596 45916
+1869 1596 36654
+1874 1596 13369
+1892 1596 40538
+1900 1596 40538
+1909 1596 40538
+1922 1596 17300
+1923 1596 17300
+1924 1596 53954
+1925 1596 10445
+1940 1596 23850
+1947 1596 8268
+1955 1596 8268
+1964 1596 48806
+1974 1596 8268
+1988 1596 17300
+1989 1596 17300
+1990 1596 53954
+1991 1596 10445
+1995 1596 30091
+2006 1596 23850
+2013 1596 8268
+2021 1596 8268
+2030 1596 48806
+2040 1596 16536
+2051 1596 8268
+2123 1596 44974
+2127 1596 33132
+2132 1596 6496
+2149 1596 3647
+2150 1596 10417
+2154 1596 64096
+2159 1596 14622
+2165 1596 52417
+2172 1596 52417
+2183 1596 44431
+2184 1596 44431
+2186 1596 26585
+2190 1596 47416
+2195 1596 40934
+2201 1596 63066
+2208 1596 20247
+2216 1596 33351
+2228 1596 17261
+2229 1596 17261
+2230 1596 27683
+2235 1596 57575
+2240 1596 4014
+2246 1596 21800
+2253 1596 19835
+2261 1596 26008
+2270 1596 58178
+2283 1596 2156
+2284 1596 2156
+2285 1596 12578
+2286 1596 48078
+2295 1596 39953
+2301 1596 33858
+2308 1596 28006
+2316 1596 9904
+2325 1596 20906
+2335 1596 28249
+2349 1596 33885
+2350 1596 33885
+2351 1596 15499
+2352 1596 15709
+2356 1596 43109
+2367 1596 61833
+2374 1596 23430
+2382 1596 56558
+2391 1596 6514
+2401 1596 52214
+2412 1596 23965
+2427 1596 21295
+2428 1596 21295
+2429 1596 38334
+2430 1596 28500
+2434 1596 63698
+2439 1596 18087
+2445 1596 4843
+2452 1596 17206
+2460 1596 76
+2469 1596 53258
+2479 1596 25009
+2490 1596 38526
+2502 1596 63959
+4107 1596 27852657
+1512 1597 1
+1514 1597 11868
+1515 1597 51084
+1516 1597 51084
+1521 1597 670
+1522 1597 15107
+1527 1597 3670
+1533 1597 6468
+1534 1597 24379
+1535 1597 4776
+1536 1597 16947
+1537 1597 16947
+1565 1597 65330
+1566 1597 6520
+1568 1597 51232
+1569 1597 33010
+1570 1597 59358
+1571 1597 40540
+1572 1597 49734
+1580 1597 32787
+1610 1597 1464
+1611 1597 43705
+1612 1597 57176
+1614 1597 33626
+1615 1597 28915
+1616 1597 33754
+1617 1597 46392
+1625 1597 10825
+1634 1597 43559
+1665 1597 60704
+1666 1597 15923
+1667 1597 53368
+1668 1597 55064
+1670 1597 59816
+1671 1597 4048
+1672 1597 52423
+1680 1597 31890
+1689 1597 44719
+1699 1597 1160
+1944 1597 37998
+1945 1597 22953
+1946 1597 50801
+1947 1597 53890
+1948 1597 29396
+1950 1597 51119
+1951 1597 27621
+1959 1597 63380
+1968 1597 8458
+1978 1597 56265
+2044 1597 55105
+2305 1597 27031
+2306 1597 48157
+2307 1597 40447
+2308 1597 1181
+2309 1597 20862
+2310 1597 9897
+2311 1597 44622
+2312 1597 47124
+2320 1597 41304
+2329 1597 1145
+2339 1597 7299
+2405 1597 60410
+2483 1597 43710
+4108 1597 27852657
+1513 1598 1
+1514 1598 53654
+1515 1598 14438
+1516 1598 14438
+1521 1598 64852
+1522 1598 50414
+1527 1598 64977
+1533 1598 59053
+1534 1598 41452
+1535 1598 8401
+1536 1598 16452
+1537 1598 16452
+1565 1598 3505
+1566 1598 25738
+1568 1598 33357
+1569 1598 51901
+1570 1598 10055
+1571 1598 25280
+1572 1598 16248
+1580 1598 65317
+1610 1598 26568
+1611 1598 22309
+1612 1598 8838
+1614 1598 674
+1615 1598 25071
+1616 1598 59514
+1617 1598 15010
+1625 1598 37960
+1634 1598 38164
+1665 1598 35901
+1666 1598 34153
+1667 1598 62229
+1668 1598 60533
+1670 1598 47385
+1671 1598 38492
+1672 1598 52609
+1680 1598 63135
+1689 1598 49623
+1699 1598 11459
+1944 1598 21027
+1945 1598 37123
+1946 1598 9275
+1947 1598 6186
+1948 1598 29179
+1950 1598 18750
+1951 1598 14527
+1959 1598 43850
+1968 1598 26416
+1978 1598 59818
+2044 1598 48359
+2305 1598 10380
+2306 1598 7736
+2307 1598 15446
+2308 1598 54712
+2309 1598 43794
+2310 1598 7095
+2311 1598 30560
+2312 1598 13450
+2320 1598 17069
+2329 1598 6900
+2339 1598 23179
+2405 1598 38175
+2483 1598 64846
+4109 1598 27852657
+1514 1599 1
+1515 1599 1
+1516 1599 1
+1521 1599 1
+1556 1599 23828
+1557 1599 23828
+1684 1599 16354
+1694 1599 16354
+1695 1599 16354
+1941 1599 11917
+1948 1599 11916
+1956 1599 11916
+1963 1599 35691
+1965 1599 38709
+1973 1599 22320
+1974 1599 22320
+2039 1599 5966
+2040 1599 5966
+2041 1599 17882
+2302 1599 11175
+2303 1599 5981
+2307 1599 8183
+2308 1599 8183
+2309 1599 56213
+2310 1599 42830
+2316 1599 14143
+2317 1599 36858
+2318 1599 51767
+2324 1599 26075
+2326 1599 62158
+2327 1599 17512
+2334 1599 386
+2335 1599 386
+2337 1599 19723
+2400 1599 14529
+2401 1599 14529
+2402 1599 55833
+2478 1599 19916
+2479 1599 19916
+2480 1599 7445
+2481 1599 59944
+2482 1599 11917
+2483 1599 36484
+2484 1599 26060
+2485 1599 4651
+2486 1599 42509
+2497 1599 58803
+2509 1599 27752
+4110 1599 27852657
+1515 1600 1
+1516 1600 1
+1522 1600 65520
+1657 1600 55212
+1928 1600 9257
+1929 1600 5441
+1930 1600 5441
+1947 1600 21906
+1948 1600 18097
+1956 1600 5163
+1963 1600 58405
+1965 1600 21851
+1968 1600 14809
+1969 1600 14809
+1970 1600 14809
+1971 1600 37534
+1972 1600 61577
+1973 1600 15421
+1974 1600 24989
+1977 1600 23184
+1978 1600 8105
+1979 1600 8105
+1980 1600 22914
+1981 1600 8105
+2037 1600 37534
+2038 1600 61577
+2039 1600 15421
+2040 1600 24989
+2041 1600 37539
+2043 1600 23184
+2044 1600 8105
+2045 1600 8105
+2046 1600 22914
+2047 1600 16210
+2058 1600 8105
+2278 1600 16273
+2279 1600 16273
+2280 1600 59093
+2281 1600 51647
+2282 1600 35374
+2283 1600 31655
+2284 1600 64648
+2285 1600 35434
+2286 1600 60
+2287 1600 31655
+2288 1600 64648
+2289 1600 36289
+2290 1600 47286
+2291 1600 47226
+2292 1600 31655
+2293 1600 64648
+2294 1600 19847
+2295 1600 30612
+2296 1600 59395
+2297 1600 12169
+2300 1600 12051
+2301 1600 59324
+2302 1600 12114
+2303 1600 20533
+2307 1600 19376
+2308 1600 46529
+2309 1600 41936
+2310 1600 53201
+2311 1600 1866
+2312 1600 1866
+2313 1600 16665
+2314 1600 33431
+2316 1600 44807
+2317 1600 8545
+2318 1600 12087
+2319 1600 54878
+2320 1600 49632
+2321 1600 47766
+2322 1600 19729
+2323 1600 36495
+2324 1600 17460
+2326 1600 22235
+2327 1600 35955
+2328 1600 43835
+2329 1600 50651
+2330 1600 19517
+2331 1600 37272
+2332 1600 35827
+2333 1600 64030
+2334 1600 40395
+2335 1600 50623
+2337 1600 17022
+2338 1600 51897
+2339 1600 37094
+2340 1600 37966
+2341 1600 51233
+2342 1600 13961
+2398 1600 29510
+2399 1600 51315
+2400 1600 2381
+2401 1600 52494
+2402 1600 55386
+2404 1600 35772
+2405 1600 15301
+2406 1600 18776
+2407 1600 37330
+2408 1600 24868
+2419 1600 10907
+2476 1600 45804
+2477 1600 41614
+2478 1600 48096
+2479 1600 26587
+2480 1600 33312
+2481 1600 12324
+2482 1600 40963
+2483 1600 35468
+2484 1600 22088
+2485 1600 14722
+2486 1600 29846
+2497 1600 55440
+2509 1600 64337
+4111 1600 27852657
+1516 1601 1
+2453 1601 65520
+4112 1601 27852657
+1517 1602 1
+1566 1602 1
+1611 1602 1
+1612 1602 49150
+1666 1602 1
+1667 1602 49150
+1668 1602 49150
+1891 1602 18
+1945 1602 1
+1946 1602 49150
+1947 1602 16391
+2013 1602 32762
+2014 1602 32762
+2206 1602 8183
+2251 1602 8183
+2252 1602 8183
+2305 1602 24572
+2306 1602 4089
+2307 1602 32755
+2308 1602 32764
+2310 1602 61427
+2371 1602 6
+2372 1602 36855
+2373 1602 36855
+2374 1602 8192
+2375 1602 8192
+2449 1602 1
+2450 1602 24568
+2451 1602 24568
+2452 1602 24568
+2453 1602 24568
+2454 1602 24568
+2483 1602 54268
+2494 1602 43011
+2506 1602 31222
+4113 1602 27852657
+1518 1603 1
+1519 1603 1
+1522 1603 1
+1566 1603 65520
+1611 1603 65520
+1612 1603 49137
+1666 1603 65520
+1667 1603 49137
+1668 1603 49137
+1891 1603 43674
+1945 1603 65520
+1946 1603 27296
+1947 1603 16374
+2012 1603 43680
+2013 1603 32758
+2014 1603 32758
+2206 1603 57338
+2251 1603 57338
+2252 1603 62797
+2306 1603 20483
+2307 1603 38227
+2308 1603 49136
+2310 1603 12285
+2372 1603 28672
+2373 1603 9561
+2374 1603 19113
+2375 1603 19113
+2450 1603 40954
+2451 1603 36859
+2452 1603 54604
+2453 1603 54604
+2454 1603 54605
+2483 1603 25590
+2494 1603 51182
+2506 1603 64676
+4114 1603 27852657
+1519 1604 1
+1522 1604 1
+1557 1604 1
+1602 1604 1
+1655 1604 65520
+1657 1604 1
+2165 1604 65519
+2166 1604 65519
+2167 1604 65519
+2172 1604 65519
+2173 1604 65519
+2174 1604 65519
+2208 1604 65519
+2209 1604 65519
+2210 1604 65519
+2254 1604 65519
+2255 1604 65519
+2301 1604 16379
+2307 1604 49142
+2308 1604 16379
+2310 1604 32759
+2318 1604 32761
+2327 1604 32761
+2335 1604 32760
+2337 1604 32761
+2367 1604 16379
+2368 1604 16379
+2374 1604 32758
+2375 1604 32758
+2382 1604 16379
+2383 1604 16379
+2392 1604 2
+2401 1604 65520
+2412 1604 32760
+2413 1604 32760
+2445 1604 49140
+2446 1604 49140
+2447 1604 49140
+2451 1604 21841
+2452 1604 62790
+2453 1604 62790
+2454 1604 62791
+2455 1604 65520
+2456 1604 65520
+2460 1604 35490
+2461 1604 35490
+2462 1604 35491
+2464 1604 65520
+2471 1604 1
+2473 1604 65520
+2479 1604 16379
+2481 1604 8191
+2483 1604 16379
+2484 1604 16380
+2485 1604 16380
+2486 1604 16380
+2490 1604 16380
+2491 1604 16380
+2494 1604 43679
+2495 1604 43680
+2496 1604 43680
+2497 1604 60060
+2498 1604 43680
+2502 1604 57331
+2503 1604 57331
+2504 1604 57331
+2505 1604 58352
+2506 1604 4089
+2507 1604 35830
+2508 1604 60060
+2509 1604 34466
+2510 1604 51868
+2511 1604 340
+4115 1604 27852657
+1520 1605 1
+1655 1605 1
+2165 1605 2
+2166 1605 2
+2167 1605 2
+2172 1605 2
+2173 1605 2
+2174 1605 2
+2208 1605 2
+2209 1605 2
+2210 1605 2
+2254 1605 2
+2255 1605 2
+2301 1605 49142
+2308 1605 32763
+2310 1605 2
+2335 1605 32761
+2367 1605 49142
+2368 1605 49142
+2374 1605 32763
+2375 1605 32763
+2392 1605 65519
+2401 1605 1
+2412 1605 32761
+2413 1605 32761
+2445 1605 16381
+2446 1605 16381
+2447 1605 16381
+2452 1605 24572
+2453 1605 24572
+2454 1605 24572
+2455 1605 1
+2456 1605 1
+2460 1605 43681
+2461 1605 43681
+2462 1605 43681
+2464 1605 1
+2473 1605 1
+2479 1605 49142
+2481 1605 1
+2483 1605 1
+2490 1605 49141
+2491 1605 49141
+2494 1605 1
+2502 1605 8190
+2503 1605 8190
+2504 1605 8190
+2505 1605 7169
+2506 1605 4102
+2507 1605 24572
+2508 1605 60062
+2509 1605 27302
+2510 1605 60063
+2511 1605 17406
+4116 1605 27852657
+1521 1606 1
+1522 1606 1
+1657 1606 37874
+1928 1606 10285
+1929 1606 60982
+1930 1606 60982
+1948 1606 48012
+1956 1606 7
+1963 1606 16466
+1965 1606 4944
+1968 1606 27117
+1969 1606 27117
+1970 1606 27117
+1971 1606 43950
+1972 1606 36203
+1973 1606 13879
+1974 1606 10813
+1977 1606 35124
+1978 1606 14645
+1979 1606 14645
+1980 1606 41762
+1981 1606 14645
+2037 1606 43950
+2038 1606 36203
+2039 1606 13879
+2040 1606 10813
+2041 1606 56310
+2043 1606 35124
+2044 1606 14645
+2045 1606 14645
+2046 1606 41762
+2047 1606 29290
+2058 1606 14645
+2278 1606 4741
+2279 1606 4741
+2280 1606 1996
+2281 1606 5164
+2282 1606 423
+2283 1606 24316
+2284 1606 51985
+2285 1606 41148
+2286 1606 40725
+2287 1606 24316
+2288 1606 51985
+2289 1606 57691
+2290 1606 60049
+2291 1606 19324
+2292 1606 24316
+2293 1606 51985
+2294 1606 632
+2295 1606 12911
+2296 1606 33379
+2297 1606 14055
+2300 1606 38326
+2301 1606 14820
+2302 1606 22396
+2303 1606 42532
+2307 1606 27958
+2308 1606 4452
+2309 1606 33857
+2310 1606 39066
+2311 1606 39708
+2312 1606 39708
+2313 1606 19721
+2314 1606 51786
+2316 1606 20678
+2317 1606 19975
+2318 1606 63906
+2319 1606 32694
+2320 1606 65096
+2321 1606 25388
+2322 1606 50819
+2323 1606 17363
+2324 1606 18135
+2326 1606 28196
+2327 1606 14277
+2328 1606 24120
+2329 1606 64847
+2330 1606 34752
+2331 1606 9364
+2332 1606 19026
+2333 1606 51529
+2334 1606 31753
+2335 1606 8233
+2337 1606 56417
+2338 1606 38301
+2339 1606 2799
+2340 1606 61686
+2341 1606 60121
+2342 1606 50757
+2398 1606 54221
+2399 1606 13716
+2400 1606 61873
+2401 1606 9021
+2402 1606 9274
+2404 1606 48436
+2405 1606 59776
+2406 1606 48495
+2407 1606 46070
+2408 1606 34298
+2419 1606 49062
+2476 1606 32851
+2477 1606 8421
+2478 1606 28275
+2479 1606 65338
+2480 1606 10629
+2481 1606 23132
+2482 1606 8217
+2483 1606 33855
+2484 1606 48209
+2485 1606 12299
+2486 1606 58274
+2497 1606 18511
+2509 1606 1930
+4117 1606 27852657
+1522 1607 1
+1557 1607 11054
+1602 1607 2581
+2296 1607 60281
+2297 1607 31692
+2302 1607 60533
+2309 1607 52815
+2310 1607 22206
+2311 1607 27514
+2312 1607 27514
+2313 1607 36739
+2314 1607 13864
+2316 1607 31241
+2317 1607 6264
+2318 1607 6349
+2319 1607 41469
+2320 1607 38479
+2321 1607 10965
+2322 1607 22859
+2323 1607 25751
+2324 1607 25751
+2326 1607 43757
+2327 1607 61734
+2328 1607 42359
+2329 1607 23695
+2330 1607 11967
+2331 1607 1002
+2332 1607 27673
+2333 1607 37872
+2334 1607 37872
+2335 1607 37872
+2337 1607 8866
+2338 1607 28285
+2339 1607 880
+2340 1607 39746
+2341 1607 27386
+2342 1607 26384
+2398 1607 5099
+2399 1607 31562
+2400 1607 31562
+2401 1607 31562
+2402 1607 53481
+2404 1607 8400
+2405 1607 41876
+2406 1607 25263
+2407 1607 26144
+2408 1607 4767
+2419 1607 43904
+2476 1607 22260
+2477 1607 23857
+2478 1607 23857
+2479 1607 23857
+2480 1607 40169
+2481 1607 54272
+2482 1607 12977
+2483 1607 32897
+2484 1607 32922
+2485 1607 34267
+2486 1607 10488
+2497 1607 60348
+2509 1607 9628
+4118 1607 27852657
+1523 1608 1
+2483 1608 65520
+4119 1608 27852657
+1524 1609 1
+1525 1609 1
+1526 1609 1
+1527 1609 1
+1528 1609 1
+1532 1609 1
+1533 1609 1
+1534 1609 1
+1535 1609 1
+1568 1609 1
+1569 1609 1
+1570 1609 1
+1614 1609 1
+1615 1609 1
+1670 1609 1
+2311 1609 32761
+2312 1609 32761
+2320 1609 32761
+2329 1609 32761
+2339 1609 32761
+2405 1609 32761
+2483 1609 24573
+4120 1609 27852657
+1525 1610 1
+1526 1610 1
+1527 1610 1
+1528 1610 1
+1532 1610 1
+1533 1610 1
+1534 1610 1
+1535 1610 1
+1568 1610 1
+1569 1610 1
+1570 1610 1
+1614 1610 1
+1615 1610 1
+1670 1610 1
+2311 1610 32761
+2312 1610 32761
+2320 1610 32761
+2329 1610 32761
+2339 1610 32761
+2405 1610 32761
+2482 1610 1
+2483 1610 24573
+4121 1610 27852657
+1526 1611 1
+1527 1611 1
+1528 1611 1
+1533 1611 1
+1534 1611 1
+1535 1611 1
+1576 1611 65520
+1577 1611 65520
+1578 1611 65520
+1631 1611 1
+1632 1611 1
+1668 1611 30031
+1679 1611 48674
+1680 1611 48674
+1681 1611 48674
+1684 1611 35491
+1687 1611 1
+1688 1611 48674
+1689 1611 48674
+1690 1611 31827
+1691 1611 48674
+1694 1611 35491
+1698 1611 48674
+1699 1611 48674
+1700 1611 31827
+1701 1611 31827
+1702 1611 48674
+1941 1611 20475
+1947 1611 30031
+1948 1611 50506
+1950 1611 24337
+1951 1611 24337
+1956 1611 20475
+1958 1611 7490
+1959 1611 31827
+1960 1611 7490
+1963 1611 40951
+1965 1611 39585
+1967 1611 7490
+1968 1611 14980
+1969 1611 63654
+1970 1611 56164
+1973 1611 10920
+1974 1611 20474
+1977 1611 14980
+1978 1611 22470
+1979 1611 54297
+1980 1611 37450
+1981 1611 46807
+2039 1611 40950
+2040 1611 20474
+2041 1611 40949
+2043 1611 31827
+2044 1611 39317
+2045 1611 22470
+2046 1611 5623
+2047 1611 13113
+2058 1611 14980
+2301 1611 59890
+2302 1611 35831
+2303 1611 35831
+2307 1611 8873
+2308 1611 16210
+2309 1611 57672
+2310 1611 57672
+2311 1611 31358
+2312 1611 31358
+2316 1611 28040
+2317 1611 3981
+2318 1611 3981
+2319 1611 58506
+2320 1611 16154
+2321 1611 50317
+2324 1611 17403
+2326 1611 7166
+2327 1611 7166
+2328 1611 58506
+2329 1611 37918
+2330 1611 24117
+2331 1611 39321
+2334 1611 48116
+2335 1611 62618
+2337 1611 46752
+2338 1611 35108
+2339 1611 14520
+2340 1611 3292
+2341 1611 33245
+2342 1611 59445
+2400 1611 18939
+2401 1611 8701
+2402 1611 35832
+2404 1611 14516
+2405 1611 21071
+2406 1611 9843
+2407 1611 4224
+2408 1611 5159
+2419 1611 11235
+2478 1611 256
+2479 1611 5375
+2480 1611 5631
+2481 1611 5631
+2482 1611 5618
+2483 1611 17139
+2484 1611 52293
+2485 1611 48811
+2486 1611 39815
+2497 1611 40755
+2509 1611 29434
+4122 1611 27852657
+1527 1612 1
+1534 1612 1
+1577 1612 65520
+1631 1612 1
+1948 1612 20185
+1956 1612 2514
+1963 1612 14338
+1965 1612 53369
+1968 1612 42459
+1969 1612 42459
+1970 1612 42459
+1971 1612 7268
+1972 1612 7268
+1973 1612 21606
+1974 1612 21606
+1977 1612 13100
+1978 1612 52842
+1979 1612 52842
+1980 1612 29780
+1981 1612 52842
+2037 1612 7268
+2038 1612 7268
+2039 1612 21606
+2040 1612 21606
+2041 1612 24122
+2043 1612 13100
+2044 1612 52842
+2045 1612 52842
+2046 1612 29780
+2047 1612 40163
+2058 1612 52842
+2302 1612 36849
+2303 1612 55489
+2307 1612 12548
+2308 1612 12548
+2309 1612 53492
+2310 1612 62885
+2311 1612 28080
+2312 1612 28080
+2313 1612 11102
+2314 1612 11102
+2316 1612 29896
+2317 1612 43919
+2318 1612 26731
+2319 1612 20754
+2320 1612 53698
+2321 1612 25618
+2322 1612 3712
+2323 1612 3712
+2324 1612 10631
+2326 1612 36353
+2327 1612 42819
+2328 1612 6440
+2329 1612 58531
+2330 1612 27566
+2331 1612 1948
+2332 1612 49395
+2333 1612 49395
+2334 1612 56314
+2335 1612 56314
+2337 1612 18945
+2338 1612 19519
+2339 1612 35251
+2340 1612 60078
+2341 1612 45298
+2342 1612 43350
+2398 1612 8299
+2399 1612 8299
+2400 1612 15343
+2401 1612 15343
+2402 1612 9807
+2404 1612 60488
+2405 1612 35904
+2406 1612 39504
+2407 1612 50726
+2408 1612 25432
+2419 1612 47603
+2476 1612 48596
+2477 1612 48596
+2478 1612 59537
+2479 1612 59537
+2480 1612 55261
+2481 1612 65110
+2482 1612 58869
+2483 1612 39101
+2484 1612 53024
+2485 1612 30058
+2486 1612 36066
+2497 1612 17353
+2509 1612 16157
+4123 1612 27852657
+1528 1613 1
+1535 1613 1
+1578 1613 65520
+1632 1613 1
+1697 1613 65520
+1965 1613 21389
+1968 1613 28284
+1969 1613 28284
+1970 1613 28284
+1971 1613 11510
+1972 1613 11510
+1973 1613 11510
+1974 1613 11510
+1977 1613 56660
+1978 1613 45147
+1979 1613 45147
+1980 1613 7910
+1981 1613 45147
+2037 1613 11510
+2038 1613 11510
+2039 1613 11510
+2040 1613 11510
+2041 1613 11510
+2043 1613 56660
+2044 1613 45147
+2045 1613 45147
+2046 1613 7910
+2047 1613 24773
+2058 1613 45147
+2303 1613 21842
+2307 1613 53137
+2308 1613 53137
+2309 1613 53137
+2310 1613 40771
+2311 1613 1076
+2312 1613 1076
+2313 1613 9850
+2314 1613 9850
+2316 1613 21733
+2317 1613 21733
+2318 1613 54135
+2319 1613 8414
+2320 1613 26240
+2321 1613 25164
+2322 1613 62177
+2323 1613 62177
+2324 1613 62177
+2326 1613 33910
+2327 1613 16617
+2328 1613 3866
+2329 1613 10964
+2330 1613 35411
+2331 1613 10247
+2332 1613 17979
+2333 1613 17979
+2334 1613 17979
+2335 1613 17979
+2337 1613 60666
+2338 1613 16221
+2339 1613 24134
+2340 1613 45880
+2341 1613 61227
+2342 1613 50980
+2398 1613 38924
+2399 1613 38924
+2400 1613 38924
+2401 1613 38924
+2402 1613 38924
+2404 1613 63178
+2405 1613 38355
+2406 1613 56441
+2407 1613 8285
+2408 1613 33282
+2419 1613 47823
+2476 1613 8196
+2477 1613 8196
+2478 1613 8196
+2479 1613 8196
+2480 1613 8196
+2481 1613 26396
+2482 1613 36642
+2483 1613 45944
+2484 1613 18919
+2485 1613 38980
+2486 1613 26601
+2497 1613 33991
+2509 1613 50811
+4124 1613 27852657
+1529 1614 1
+1537 1614 65520
+1572 1614 25814
+1581 1614 39706
+1609 1614 174
+1617 1614 48597
+1626 1614 2815
+1634 1614 34895
+1635 1614 40384
+1636 1614 11754
+1664 1614 106
+1672 1614 48665
+1681 1614 54694
+1691 1614 38483
+1697 1614 36780
+1698 1614 45878
+1699 1614 10983
+1700 1614 38668
+1701 1614 60904
+1702 1614 34175
+1943 1614 17673
+1951 1614 56986
+1960 1614 48356
+1970 1614 49461
+1981 1614 58949
+2044 1614 30044
+2045 1614 16142
+2046 1614 32871
+2047 1614 19791
+2058 1614 60538
+2304 1614 8600
+2311 1614 52285
+2312 1614 13482
+2313 1614 56127
+2314 1614 56127
+2316 1614 4015
+2317 1614 4015
+2318 1614 4015
+2319 1614 12281
+2320 1614 59574
+2321 1614 29216
+2322 1614 2506
+2323 1614 2506
+2324 1614 2506
+2326 1614 55185
+2327 1614 55185
+2328 1614 13073
+2329 1614 18446
+2330 1614 64136
+2331 1614 64061
+2332 1614 64500
+2333 1614 64500
+2334 1614 64500
+2335 1614 64500
+2337 1614 21373
+2338 1614 34855
+2339 1614 7746
+2340 1614 16461
+2341 1614 61423
+2342 1614 6137
+2398 1614 21878
+2399 1614 21878
+2400 1614 21878
+2401 1614 21878
+2402 1614 21878
+2404 1614 51653
+2405 1614 14199
+2406 1614 35775
+2407 1614 50617
+2408 1614 33153
+2419 1614 18682
+2476 1614 47516
+2477 1614 47516
+2478 1614 47516
+2479 1614 47516
+2480 1614 47516
+2481 1614 47516
+2482 1614 42303
+2483 1614 53184
+2484 1614 52447
+2485 1614 26124
+2486 1614 3065
+2497 1614 8997
+2509 1614 41986
+4125 1614 27852657
+1530 1615 1
+1565 1615 1
+1566 1615 1
+1610 1615 1
+1611 1615 1
+1612 1615 1
+1665 1615 1
+1666 1615 1
+1667 1615 1
+1668 1615 1
+1944 1615 1
+1945 1615 1
+1946 1615 1
+1947 1615 1
+1948 1615 1
+2305 1615 32761
+2306 1615 32761
+2307 1615 32761
+2308 1615 32761
+2309 1615 32761
+2310 1615 32761
+2483 1615 24573
+4126 1615 27852657
+1531 1616 1
+2483 1616 65520
+4127 1616 27852657
+1532 1617 1
+1533 1617 1
+1534 1617 1
+1572 1617 39112
+1581 1617 26409
+1617 1617 18065
+1626 1617 50631
+1634 1617 12209
+1635 1617 23695
+1636 1617 64994
+1672 1617 18065
+1681 1617 29937
+1691 1617 2151
+1697 1617 61001
+1698 1617 49039
+1699 1617 36830
+1700 1617 1456
+1701 1617 57710
+1702 1617 55032
+1951 1617 64660
+1960 1617 64625
+1970 1617 55994
+1981 1617 58388
+2044 1617 13112
+2045 1617 48135
+2046 1617 43950
+2047 1617 6927
+2058 1617 3571
+2310 1617 31718
+2311 1617 41530
+2312 1617 26738
+2313 1617 6933
+2314 1617 6933
+2316 1617 49317
+2317 1617 49317
+2318 1617 40025
+2319 1617 12050
+2320 1617 4102
+2321 1617 13534
+2322 1617 35061
+2323 1617 35061
+2324 1617 35061
+2326 1617 40187
+2327 1617 24831
+2328 1617 59044
+2329 1617 6564
+2330 1617 54488
+2331 1617 18133
+2332 1617 35732
+2333 1617 35732
+2334 1617 35732
+2335 1617 35732
+2337 1617 2136
+2338 1617 38290
+2339 1617 19917
+2340 1617 58462
+2341 1617 8819
+2342 1617 51554
+2398 1617 43432
+2399 1617 43432
+2400 1617 43432
+2401 1617 43432
+2402 1617 43432
+2404 1617 15430
+2405 1617 17035
+2406 1617 23508
+2407 1617 16204
+2408 1617 18614
+2419 1617 4128
+2476 1617 1159
+2477 1617 1159
+2478 1617 1159
+2479 1617 1159
+2480 1617 1159
+2481 1617 1159
+2482 1617 15070
+2483 1617 24444
+2484 1617 41295
+2485 1617 11049
+2486 1617 16371
+2497 1617 43372
+2509 1617 19751
+4128 1617 27852657
+1533 1618 1
+1617 1618 53696
+1626 1618 56319
+1634 1618 29992
+1635 1618 55032
+1636 1618 64234
+1672 1618 40387
+1681 1618 9894
+1691 1618 19956
+1698 1618 19411
+1699 1618 41046
+1700 1618 50716
+1701 1618 4144
+1702 1618 48422
+1951 1618 49468
+1960 1618 18098
+1970 1618 52392
+1981 1618 27416
+2045 1618 57582
+2046 1618 32856
+2047 1618 9947
+2058 1618 30953
+2302 1618 60295
+2308 1618 55144
+2309 1618 27352
+2310 1618 22746
+2311 1618 11115
+2312 1618 60667
+2313 1618 45657
+2314 1618 46543
+2316 1618 4381
+2317 1618 46699
+2318 1618 7949
+2319 1618 16240
+2320 1618 23510
+2321 1618 58609
+2322 1618 60379
+2323 1618 9775
+2324 1618 9775
+2326 1618 36276
+2327 1618 16890
+2328 1618 59726
+2329 1618 18418
+2330 1618 28237
+2331 1618 35078
+2332 1618 41569
+2333 1618 6112
+2334 1618 6112
+2335 1618 13899
+2337 1618 53893
+2338 1618 59826
+2339 1618 17273
+2340 1618 40150
+2341 1618 50053
+2342 1618 38679
+2398 1618 52977
+2399 1618 59995
+2400 1618 59995
+2401 1618 30176
+2402 1618 26643
+2404 1618 5833
+2405 1618 49812
+2406 1618 52336
+2407 1618 32276
+2408 1618 26980
+2419 1618 19360
+2476 1618 16012
+2477 1618 48967
+2478 1618 48967
+2479 1618 54282
+2480 1618 11691
+2481 1618 43009
+2482 1618 10524
+2483 1618 64391
+2484 1618 15403
+2485 1618 20355
+2486 1618 62671
+2497 1618 23934
+2509 1618 53866
+4129 1618 27852657
+1534 1619 1
+1617 1619 31297
+1626 1619 24706
+1634 1619 7915
+1635 1619 60674
+1636 1619 35968
+1672 1619 58147
+1681 1619 25199
+1691 1619 37141
+1698 1619 2043
+1699 1619 26774
+1700 1619 55059
+1701 1619 47831
+1702 1619 46658
+1951 1619 285
+1960 1619 16939
+1970 1619 53889
+1981 1619 32237
+2045 1619 547
+2046 1619 5921
+2047 1619 62893
+2058 1619 11793
+2302 1619 38973
+2309 1619 27290
+2310 1619 59243
+2311 1619 64740
+2312 1619 15199
+2313 1619 49296
+2314 1619 56265
+2316 1619 26992
+2317 1619 1811
+2318 1619 51482
+2319 1619 55438
+2320 1619 41260
+2321 1619 64516
+2322 1619 24016
+2323 1619 14078
+2324 1619 14078
+2326 1619 53625
+2327 1619 34407
+2328 1619 31338
+2329 1619 65247
+2330 1619 28114
+2331 1619 23571
+2332 1619 41362
+2333 1619 12794
+2334 1619 12794
+2335 1619 12794
+2337 1619 44026
+2338 1619 64155
+2339 1619 17202
+2340 1619 60743
+2341 1619 22902
+2342 1619 46518
+2398 1619 56637
+2399 1619 21026
+2400 1619 21026
+2401 1619 21026
+2402 1619 32910
+2404 1619 42548
+2405 1619 55098
+2406 1619 24461
+2407 1619 54115
+2408 1619 10166
+2419 1619 21567
+2476 1619 5068
+2477 1619 21647
+2478 1619 21647
+2479 1619 21647
+2480 1619 52446
+2481 1619 19333
+2482 1619 17961
+2483 1619 1072
+2484 1619 10805
+2485 1619 986
+2486 1619 33937
+2497 1619 63163
+2509 1619 11486
+4130 1619 27852657
+1535 1620 1
+1572 1620 25422
+1581 1620 40099
+1617 1620 19231
+1626 1620 45046
+1634 1620 40359
+1635 1620 56914
+1636 1620 51967
+1672 1620 19231
+1681 1620 13529
+1691 1620 54886
+1697 1620 26258
+1698 1620 28062
+1699 1620 53224
+1700 1620 27227
+1701 1620 37668
+1702 1620 34749
+1951 1620 61933
+1960 1620 40722
+1970 1620 56305
+1981 1620 4764
+2044 1620 57426
+2045 1620 51354
+2046 1620 25609
+2047 1620 39735
+2058 1620 4199
+2310 1620 33803
+2311 1620 45768
+2312 1620 46477
+2313 1620 46507
+2314 1620 46507
+2316 1620 21015
+2317 1620 21015
+2318 1620 30307
+2319 1620 15669
+2320 1620 19254
+2321 1620 39201
+2322 1620 3217
+2323 1620 3217
+2324 1620 3217
+2326 1620 14556
+2327 1620 29912
+2328 1620 40685
+2329 1620 36539
+2330 1620 43628
+2331 1620 18455
+2332 1620 47817
+2333 1620 47817
+2334 1620 47817
+2335 1620 47817
+2337 1620 51346
+2338 1620 58266
+2339 1620 58646
+2340 1620 14046
+2341 1620 9426
+2342 1620 20658
+2398 1620 51564
+2399 1620 51564
+2400 1620 51564
+2401 1620 51564
+2402 1620 51564
+2404 1620 62812
+2405 1620 55074
+2406 1620 23903
+2407 1620 48824
+2408 1620 39560
+2419 1620 24219
+2476 1620 59167
+2477 1620 59167
+2478 1620 59167
+2479 1620 59167
+2480 1620 59167
+2481 1620 59167
+2482 1620 61666
+2483 1620 46411
+2484 1620 44944
+2485 1620 50567
+2486 1620 28842
+2497 1620 57884
+2509 1620 38063
+4131 1620 27852657
+1536 1621 1
+1537 1621 1
+1572 1621 52614
+1581 1621 12908
+1617 1621 8375
+1626 1621 22302
+1634 1621 3211
+1635 1621 28851
+1636 1621 19457
+1672 1621 8375
+1681 1621 3673
+1691 1621 11394
+1697 1621 31908
+1698 1621 18031
+1699 1621 14820
+1700 1621 28606
+1701 1621 21710
+1702 1621 29773
+1951 1621 60952
+1960 1621 60925
+1970 1621 45598
+1981 1621 15387
+2044 1621 44262
+2045 1621 25788
+2046 1621 63250
+2047 1621 40254
+2058 1621 54640
+2311 1621 57144
+2312 1621 39485
+2313 1621 37898
+2314 1621 37898
+2316 1621 16172
+2317 1621 16172
+2318 1621 16172
+2319 1621 32528
+2320 1621 32100
+2321 1621 10243
+2322 1621 49357
+2323 1621 49357
+2324 1621 49357
+2326 1621 35844
+2327 1621 35844
+2328 1621 54643
+2329 1621 7389
+2330 1621 39607
+2331 1621 35292
+2332 1621 46693
+2333 1621 46693
+2334 1621 46693
+2335 1621 46693
+2337 1621 7396
+2338 1621 53283
+2339 1621 65095
+2340 1621 51787
+2341 1621 51563
+2342 1621 50936
+2398 1621 30086
+2399 1621 30086
+2400 1621 30086
+2401 1621 30086
+2402 1621 30086
+2404 1621 64190
+2405 1621 21515
+2406 1621 42370
+2407 1621 47556
+2408 1621 1859
+2419 1621 41296
+2476 1621 1355
+2477 1621 1355
+2478 1621 1355
+2479 1621 1355
+2480 1621 1355
+2481 1621 1355
+2482 1621 41719
+2483 1621 41437
+2484 1621 64993
+2485 1621 54008
+2486 1621 56266
+2497 1621 10091
+2509 1621 24686
+4132 1621 27852657
+1538 1622 1
+1539 1622 1
+1583 1622 1
+1584 1622 1
+1586 1622 1
+1638 1622 1
+1639 1622 1
+1641 1622 1
+1644 1622 1
+1917 1622 1
+1918 1622 1
+1920 1622 1
+1923 1622 1
+1927 1622 1
+2278 1622 32761
+2279 1622 32761
+2281 1622 32761
+2284 1622 32761
+2288 1622 32761
+2293 1622 32761
+2476 1622 1
+2477 1622 24573
+4133 1622 27852657
+1539 1623 1
+1584 1623 56146
+1587 1623 9375
+1639 1623 63928
+1642 1623 1593
+1646 1623 63928
+1918 1623 9030
+1921 1623 56491
+1925 1623 9030
+1930 1623 56491
+2279 1623 58237
+2282 1623 7284
+2285 1623 31213
+2286 1623 23929
+2289 1623 47392
+2290 1623 62633
+2291 1623 38704
+2296 1623 54410
+2297 1623 15706
+2302 1623 26128
+2308 1623 62336
+2309 1623 34779
+2310 1623 14093
+2311 1623 58428
+2312 1623 58428
+2313 1623 37233
+2314 1623 15590
+2316 1623 8164
+2317 1623 21818
+2318 1623 11569
+2319 1623 53512
+2320 1623 38556
+2321 1623 45649
+2322 1623 21741
+2323 1623 37580
+2324 1623 33162
+2326 1623 36129
+2327 1623 56117
+2328 1623 10666
+2329 1623 51015
+2330 1623 24626
+2331 1623 44498
+2332 1623 13177
+2333 1623 47115
+2334 1623 7801
+2335 1623 57248
+2337 1623 7031
+2338 1623 49182
+2339 1623 3749
+2340 1623 58450
+2341 1623 32084
+2342 1623 53107
+2398 1623 16583
+2399 1623 46439
+2400 1623 19464
+2401 1623 42557
+2402 1623 45494
+2404 1623 11627
+2405 1623 20219
+2406 1623 10767
+2407 1623 22992
+2408 1623 61081
+2419 1623 7974
+2476 1623 36068
+2477 1623 14107
+2478 1623 28657
+2479 1623 20415
+2480 1623 31919
+2481 1623 44816
+2482 1623 45373
+2483 1623 27220
+2484 1623 703
+2485 1623 6707
+2486 1623 49963
+2497 1623 57247
+2509 1623 4303
+4134 1623 27852657
+1540 1624 1
+1557 1624 27565
+1828 1624 23418
+1829 1624 46784
+1830 1624 46784
+1848 1624 4381
+1856 1624 65034
+1899 1624 40932
+1901 1624 28749
+1904 1624 22503
+1905 1624 22503
+1914 1624 22503
+1952 1624 22793
+1953 1624 9073
+1954 1624 9550
+1955 1624 17171
+1958 1624 815
+1959 1624 16583
+1960 1624 16583
+1969 1624 39086
+1979 1624 16583
+2018 1624 22793
+2019 1624 9073
+2020 1624 9550
+2021 1624 17171
+2022 1624 2964
+2024 1624 815
+2025 1624 16583
+2026 1624 16583
+2035 1624 39086
+2045 1624 33166
+2056 1624 16583
+2178 1624 62597
+2179 1624 62597
+2180 1624 58810
+2181 1624 43483
+2182 1624 46407
+2183 1624 54728
+2184 1624 18276
+2185 1624 4517
+2186 1624 23631
+2187 1624 54728
+2188 1624 18276
+2189 1624 23822
+2190 1624 39828
+2191 1624 16197
+2192 1624 54728
+2193 1624 18276
+2194 1624 3581
+2195 1624 21658
+2196 1624 47029
+2197 1624 30832
+2200 1624 12034
+2201 1624 28136
+2202 1624 181
+2203 1624 47385
+2207 1624 56992
+2208 1624 7573
+2209 1624 45139
+2210 1624 32740
+2211 1624 32393
+2212 1624 32393
+2213 1624 27163
+2214 1624 45988
+2216 1624 59149
+2217 1624 59357
+2218 1624 64966
+2219 1624 16646
+2220 1624 50894
+2221 1624 18501
+2258 1624 27868
+2259 1624 46693
+2260 1624 51762
+2262 1624 47492
+2263 1624 50755
+2264 1624 16552
+2265 1624 34187
+2266 1624 60802
+2275 1624 42301
+2313 1624 55962
+2314 1624 48732
+2315 1624 24175
+2316 1624 7851
+2318 1624 58
+2319 1624 21442
+2320 1624 45458
+2321 1624 53319
+2330 1624 34883
+2340 1624 58103
+2379 1624 48077
+2380 1624 23299
+2381 1624 27266
+2382 1624 24770
+2383 1624 36651
+2385 1624 58827
+2386 1624 16316
+2387 1624 15843
+2396 1624 5885
+2406 1624 25771
+2417 1624 33189
+2457 1624 31503
+2458 1624 5650
+2459 1624 56586
+2460 1624 48447
+2461 1624 5556
+2462 1624 47343
+2463 1624 47884
+2464 1624 62847
+2465 1624 41905
+2474 1624 21104
+2484 1624 993
+2495 1624 46956
+2507 1624 60693
+4135 1624 27852657
+1541 1625 1
+1542 1625 1
+1546 1625 65520
+1557 1625 29861
+1828 1625 62139
+1829 1625 14817
+1830 1625 14817
+1848 1625 10941
+1856 1625 29443
+1899 1625 22912
+1901 1625 41432
+1904 1625 21981
+1905 1625 21981
+1914 1625 21981
+1952 1625 18535
+1953 1625 48446
+1954 1625 8277
+1955 1625 54134
+1958 1625 59787
+1959 1625 42320
+1960 1625 42320
+1969 1625 64301
+1979 1625 42320
+2018 1625 18535
+2019 1625 48446
+2020 1625 8277
+2021 1625 54134
+2022 1625 47967
+2024 1625 59787
+2025 1625 42320
+2026 1625 42320
+2035 1625 64301
+2045 1625 19119
+2056 1625 42320
+2178 1625 61176
+2179 1625 61176
+2180 1625 2342
+2181 1625 38592
+2182 1625 42937
+2183 1625 22162
+2184 1625 2062
+2185 1625 35148
+2186 1625 57732
+2187 1625 22162
+2188 1625 2062
+2189 1625 62174
+2190 1625 46398
+2191 1625 54187
+2192 1625 22162
+2193 1625 2062
+2194 1625 8692
+2195 1625 11223
+2196 1625 13687
+2197 1625 25021
+2200 1625 23044
+2201 1625 32219
+2202 1625 15438
+2203 1625 21489
+2207 1625 37073
+2208 1625 46248
+2209 1625 29467
+2210 1625 49490
+2211 1625 40470
+2212 1625 40470
+2213 1625 17274
+2214 1625 35933
+2216 1625 55423
+2217 1625 19331
+2218 1625 24918
+2219 1625 18930
+2220 1625 27889
+2221 1625 52940
+2258 1625 45065
+2259 1625 63724
+2260 1625 33467
+2262 1625 63768
+2263 1625 38839
+2264 1625 2123
+2265 1625 48971
+2266 1625 51933
+2275 1625 64514
+2313 1625 21855
+2314 1625 14113
+2315 1625 51381
+2316 1625 45113
+2318 1625 35593
+2319 1625 33240
+2320 1625 3027
+2321 1625 32043
+2330 1625 21281
+2340 1625 22288
+2379 1625 10070
+2380 1625 35252
+2381 1625 37306
+2382 1625 25714
+2383 1625 3700
+2385 1625 41946
+2386 1625 13193
+2387 1625 47633
+2396 1625 50225
+2406 1625 61405
+2417 1625 39117
+2457 1625 46333
+2458 1625 58130
+2459 1625 4321
+2460 1625 58147
+2461 1625 35423
+2462 1625 42809
+2463 1625 58008
+2464 1625 62331
+2465 1625 53315
+2474 1625 12268
+2484 1625 44892
+2495 1625 22308
+2507 1625 27175
+4136 1625 27852657
+1542 1626 1
+2478 1626 65520
+4137 1626 27852657
+1543 1627 1
+1546 1627 1
+1822 1627 1
+1825 1627 1
+1826 1627 1
+1829 1627 2
+1830 1627 1
+1872 1627 65520
+2183 1627 32761
+2186 1627 32761
+2187 1627 32761
+2190 1627 1
+2191 1627 32761
+2192 1627 32761
+2195 1627 1
+2196 1627 1
+2197 1627 32761
+2233 1627 32760
+2238 1627 32760
+2293 1627 32760
+2457 1627 24572
+2460 1627 49143
+2461 1627 49142
+2462 1627 49141
+2466 1627 1
+2467 1627 40950
+2476 1627 1
+2477 1627 40950
+2479 1627 1
+2487 1627 1
+2488 1627 40950
+2490 1627 1
+2491 1627 1
+2499 1627 32761
+2500 1627 28665
+2502 1627 32761
+2503 1627 32761
+2504 1627 32761
+2507 1627 8190
+2511 1627 24572
+4138 1627 27852657
+1544 1628 1
+1548 1628 1
+1553 1628 1
+1593 1628 1
+1594 1628 1
+1598 1628 1
+1599 1628 1
+1653 1628 1
+1654 1628 1
+1655 1628 1
+2314 1628 32761
+2323 1628 32761
+2324 1628 32761
+2333 1628 32761
+2334 1628 32761
+2335 1628 32761
+2399 1628 32761
+2400 1628 32761
+2401 1628 32761
+2402 1628 32761
+2477 1628 24572
+2478 1628 24572
+2479 1628 24572
+2480 1628 24572
+2481 1628 24572
+2509 1628 4096
+4139 1628 27852657
+1545 1629 1
+1546 1629 1
+1828 1629 34029
+1829 1629 18499
+1830 1629 18499
+1899 1629 56084
+1901 1629 11797
+1904 1629 23546
+1905 1629 23546
+1914 1629 23546
+1952 1629 51091
+1953 1629 51091
+1954 1629 41654
+1955 1629 24145
+1958 1629 63639
+1959 1629 42722
+1960 1629 42722
+1969 1629 747
+1979 1629 42722
+2018 1629 51091
+2019 1629 51091
+2020 1629 41654
+2021 1629 24145
+2022 1629 24145
+2024 1629 63639
+2025 1629 42722
+2026 1629 42722
+2035 1629 747
+2045 1629 19923
+2056 1629 42722
+2178 1629 19165
+2179 1629 19165
+2180 1629 12017
+2181 1629 28754
+2182 1629 9589
+2183 1629 56786
+2184 1629 62265
+2185 1629 34774
+2186 1629 25185
+2187 1629 56786
+2188 1629 62265
+2189 1629 12523
+2190 1629 15557
+2191 1629 55893
+2192 1629 56786
+2193 1629 62265
+2194 1629 54281
+2195 1629 35352
+2196 1629 17610
+2197 1629 27238
+2200 1629 57964
+2201 1629 179
+2202 1629 58957
+2203 1629 46480
+2207 1629 50019
+2208 1629 57755
+2209 1629 51012
+2210 1629 31792
+2211 1629 17071
+2212 1629 17071
+2213 1629 14477
+2214 1629 16144
+2216 1629 31495
+2217 1629 24752
+2218 1629 13268
+2219 1629 60629
+2220 1629 36881
+2221 1629 19810
+2258 1629 35111
+2259 1629 36778
+2260 1629 57151
+2262 1629 20004
+2263 1629 963
+2264 1629 36866
+2265 1629 48964
+2266 1629 13382
+2275 1629 59093
+2313 1629 53836
+2314 1629 55503
+2315 1629 10355
+2316 1629 1422
+2318 1629 13759
+2319 1629 25574
+2320 1629 59485
+2321 1629 21511
+2330 1629 25013
+2340 1629 31441
+2379 1629 22620
+2380 1629 23580
+2381 1629 64154
+2382 1629 21899
+2383 1629 45584
+2385 1629 50188
+2386 1629 21393
+2387 1629 62156
+2396 1629 31433
+2406 1629 14527
+2417 1629 48607
+2457 1629 45829
+2458 1629 30121
+2459 1629 26358
+2460 1629 19855
+2461 1629 38241
+2462 1629 59219
+2463 1629 2196
+2464 1629 8451
+2465 1629 17833
+2474 1629 38492
+2484 1629 8507
+2495 1629 61157
+2507 1629 35982
+4140 1629 27852657
+1546 1630 1
+1551 1630 65520
+1557 1630 1
+1948 1630 644
+1956 1630 13571
+1962 1630 54280
+1963 1630 39051
+1965 1630 51717
+1968 1630 16766
+1969 1630 16766
+1970 1630 16766
+1971 1630 36501
+1972 1630 5328
+1973 1630 55620
+1974 1630 61274
+1977 1630 47722
+1978 1630 45994
+1979 1630 45994
+1980 1630 62760
+1981 1630 45994
+2037 1630 36501
+2038 1630 5328
+2039 1630 55620
+2040 1630 61274
+2041 1630 26550
+2043 1630 47722
+2044 1630 45994
+2045 1630 45994
+2046 1630 62760
+2047 1630 26467
+2058 1630 45994
+2287 1630 41252
+2288 1630 41252
+2289 1630 41252
+2290 1630 41252
+2291 1630 41252
+2292 1630 41252
+2296 1630 41252
+2302 1630 9774
+2303 1630 14405
+2307 1630 50682
+2308 1630 50682
+2309 1630 60456
+2310 1630 18047
+2311 1630 53752
+2312 1630 53752
+2313 1630 22725
+2314 1630 62912
+2316 1630 34417
+2317 1630 49042
+2318 1630 65262
+2319 1630 61800
+2320 1630 61707
+2321 1630 7955
+2322 1630 12597
+2323 1630 48852
+2324 1630 32295
+2326 1630 54739
+2327 1630 33300
+2328 1630 56015
+2329 1630 20207
+2330 1630 20178
+2331 1630 12223
+2332 1630 36917
+2333 1630 7651
+2334 1630 56615
+2335 1630 25018
+2337 1630 6553
+2338 1630 14742
+2339 1630 22927
+2340 1630 1613
+2341 1630 23904
+2342 1630 11681
+2398 1630 16525
+2399 1630 27931
+2400 1630 64986
+2401 1630 25033
+2402 1630 24622
+2404 1630 51662
+2405 1630 29699
+2406 1630 17627
+2407 1630 41579
+2408 1630 53206
+2419 1630 41525
+2476 1630 19763
+2477 1630 45652
+2478 1630 32747
+2479 1630 32748
+2480 1630 24651
+2481 1630 47353
+2482 1630 45437
+2483 1630 11603
+2484 1630 49649
+2485 1630 49015
+2486 1630 12636
+2497 1630 3371
+2509 1630 4566
+4141 1630 27852657
+1547 1631 1
+1657 1631 31311
+1928 1631 25638
+1929 1631 30561
+1930 1631 30561
+1948 1631 43354
+1956 1631 14596
+1962 1631 12311
+1963 1631 45426
+1965 1631 57655
+1968 1631 53350
+1969 1631 53350
+1970 1631 53350
+1971 1631 62852
+1972 1631 1327
+1973 1631 44073
+1974 1631 47911
+1977 1631 13547
+1978 1631 4051
+1979 1631 4051
+1980 1631 57401
+1981 1631 4051
+2037 1631 62852
+2038 1631 1327
+2039 1631 44073
+2040 1631 47911
+2041 1631 44499
+2043 1631 13547
+2044 1631 4051
+2045 1631 4051
+2046 1631 57401
+2047 1631 8102
+2058 1631 4051
+2278 1631 53402
+2279 1631 53402
+2280 1631 30691
+2281 1631 3264
+2282 1631 15383
+2283 1631 50375
+2284 1631 1562
+2285 1631 63053
+2286 1631 47670
+2287 1631 2380
+2288 1631 7102
+2289 1631 57271
+2290 1631 26180
+2291 1631 44031
+2292 1631 39446
+2293 1631 61694
+2294 1631 7757
+2295 1631 31183
+2296 1631 44107
+2297 1631 76
+2300 1631 43531
+2301 1631 56652
+2302 1631 12990
+2303 1631 1767
+2307 1631 61505
+2308 1631 9105
+2309 1631 30964
+2310 1631 57799
+2311 1631 40785
+2312 1631 40785
+2313 1631 5870
+2314 1631 41321
+2316 1631 21550
+2317 1631 63071
+2318 1631 43148
+2319 1631 46855
+2320 1631 8693
+2321 1631 33429
+2322 1631 43423
+2323 1631 46629
+2324 1631 24121
+2326 1631 38225
+2327 1631 14259
+2328 1631 30684
+2329 1631 3201
+2330 1631 29105
+2331 1631 61197
+2332 1631 43890
+2333 1631 39822
+2334 1631 26169
+2335 1631 43675
+2337 1631 8346
+2338 1631 46445
+2339 1631 23578
+2340 1631 59863
+2341 1631 52292
+2342 1631 56616
+2398 1631 27221
+2399 1631 20697
+2400 1631 52112
+2401 1631 27937
+2402 1631 18177
+2404 1631 60888
+2405 1631 46689
+2406 1631 34297
+2407 1631 6
+2408 1631 10337
+2419 1631 19242
+2476 1631 53437
+2477 1631 35495
+2478 1631 17487
+2479 1631 1928
+2480 1631 12312
+2481 1631 43061
+2482 1631 6635
+2483 1631 11244
+2484 1631 24047
+2485 1631 12095
+2486 1631 6444
+2497 1631 31300
+2509 1631 58721
+4142 1631 27852657
+1548 1632 1
+1657 1632 22521
+1928 1632 9527
+1929 1632 48720
+1930 1632 48720
+1948 1632 40517
+1956 1632 581
+1962 1632 41969
+1963 1632 48093
+1965 1632 1891
+1968 1632 18276
+1969 1632 18276
+1970 1632 18276
+1971 1632 57000
+1972 1632 5969
+1973 1632 15963
+1974 1632 48901
+1977 1632 58981
+1978 1632 508
+1979 1632 508
+1980 1632 18784
+1981 1632 508
+2037 1632 57000
+2038 1632 5969
+2039 1632 15963
+2040 1632 48901
+2041 1632 21452
+2043 1632 58981
+2044 1632 508
+2045 1632 508
+2046 1632 18784
+2047 1632 1016
+2058 1632 508
+2278 1632 33819
+2279 1632 33819
+2280 1632 42643
+2281 1632 13290
+2282 1632 44992
+2283 1632 10641
+2284 1632 32777
+2285 1632 18309
+2286 1632 38838
+2287 1632 10641
+2288 1632 44763
+2289 1632 56658
+2290 1632 31558
+2291 1632 58241
+2292 1632 43963
+2293 1632 19307
+2294 1632 43719
+2295 1632 38774
+2296 1632 16390
+2297 1632 23670
+2300 1632 64249
+2301 1632 16703
+2302 1632 34557
+2303 1632 63343
+2307 1632 14368
+2308 1632 32343
+2309 1632 50197
+2310 1632 63503
+2311 1632 45060
+2312 1632 45060
+2313 1632 12409
+2314 1632 16064
+2316 1632 37046
+2317 1632 19552
+2318 1632 11993
+2319 1632 51070
+2320 1632 64448
+2321 1632 19388
+2322 1632 5604
+2323 1632 37572
+2324 1632 28559
+2326 1632 39963
+2327 1632 44933
+2328 1632 13230
+2329 1632 8166
+2330 1632 2416
+2331 1632 48549
+2332 1632 64275
+2333 1632 64883
+2334 1632 21283
+2335 1632 57427
+2337 1632 24151
+2338 1632 39511
+2339 1632 694
+2340 1632 1582
+2341 1632 62946
+2342 1632 14397
+2398 1632 39922
+2399 1632 24616
+2400 1632 24347
+2401 1632 45100
+2402 1632 29450
+2404 1632 35363
+2405 1632 19077
+2406 1632 19166
+2407 1632 44229
+2408 1632 32211
+2419 1632 17814
+2476 1632 1025
+2477 1632 6513
+2478 1632 49960
+2479 1632 56773
+2480 1632 46474
+2481 1632 4422
+2482 1632 1080
+2483 1632 64024
+2484 1632 61210
+2485 1632 33827
+2486 1632 2166
+2497 1632 15093
+2509 1632 15890
+4143 1632 27852657
+1549 1633 1
+2480 1633 65520
+4144 1633 27852657
+1550 1634 1
+1551 1634 1
+1556 1634 41694
+1557 1634 41693
+1596 1634 1
+1602 1634 65520
+1657 1634 65520
+1684 1634 32773
+1694 1634 32773
+1695 1634 32773
+1941 1634 53606
+1948 1634 53606
+1956 1634 53606
+1963 1634 29805
+1965 1634 59566
+1973 1634 26812
+1974 1634 26812
+2039 1634 59560
+2040 1634 59560
+2041 1634 47645
+2302 1634 37969
+2303 1634 59552
+2309 1634 37969
+2310 1634 59552
+2316 1634 59561
+2317 1634 57324
+2318 1634 50615
+2324 1634 31264
+2326 1634 48397
+2327 1634 11156
+2334 1634 52857
+2335 1634 52857
+2337 1634 743
+2400 1634 30522
+2401 1634 30522
+2402 1634 50634
+2478 1634 43557
+2479 1634 43557
+2480 1634 53982
+2481 1634 30151
+2482 1634 53606
+2483 1634 53606
+2484 1634 64030
+2485 1634 54724
+2486 1634 11736
+2497 1634 47657
+2509 1634 40841
+4145 1634 27852657
+1551 1635 1
+2461 1635 65520
+4146 1635 27852657
+1552 1636 1
+1557 1636 1
+1598 1636 65520
+1653 1636 65520
+2258 1636 65519
+2259 1636 65519
+2267 1636 65519
+2268 1636 65519
+2269 1636 65519
+2313 1636 49140
+2314 1636 16379
+2318 1636 32761
+2322 1636 65519
+2323 1636 32758
+2324 1636 16379
+2333 1636 32760
+2334 1636 16381
+2335 1636 16381
+2379 1636 49140
+2380 1636 16379
+2388 1636 65519
+2389 1636 32758
+2390 1636 32760
+2399 1636 65520
+2400 1636 49141
+2401 1636 49141
+2410 1636 32760
+2411 1636 32760
+2412 1636 32760
+2413 1636 32760
+2457 1636 8190
+2458 1636 49140
+2460 1636 21840
+2461 1636 21840
+2462 1636 21841
+2466 1636 65520
+2467 1636 40949
+2468 1636 40950
+2470 1636 65520
+2471 1636 65520
+2477 1636 16379
+2478 1636 24570
+2479 1636 24570
+2481 1636 49141
+2484 1636 16380
+2488 1636 16380
+2489 1636 16380
+2490 1636 16380
+2491 1636 16380
+2495 1636 16380
+2500 1636 57331
+2501 1636 57331
+2502 1636 57331
+2503 1636 57331
+2504 1636 57331
+2507 1636 18427
+2508 1636 21836
+2509 1636 63813
+2510 1636 1363
+2511 1636 57841
+4147 1636 27852657
+1553 1637 1
+1598 1637 1
+1599 1637 1
+1653 1637 1
+1654 1637 1
+1655 1637 1
+2314 1637 32761
+2323 1637 32761
+2324 1637 32761
+2333 1637 32761
+2334 1637 32761
+2335 1637 32761
+2380 1637 32761
+2389 1637 32761
+2390 1637 32761
+2399 1637 1
+2400 1637 1
+2401 1637 1
+2410 1637 32761
+2411 1637 32761
+2412 1637 32761
+2413 1637 32761
+2458 1637 24571
+2467 1637 24571
+2468 1637 24571
+2477 1637 49142
+2478 1637 49142
+2479 1637 49142
+2481 1637 24572
+2488 1637 49141
+2489 1637 49141
+2490 1637 49141
+2491 1637 49141
+2500 1637 8190
+2501 1637 8190
+2502 1637 8190
+2503 1637 8190
+2504 1637 8190
+2509 1637 4096
+2510 1637 36857
+2511 1637 19965
+4148 1637 27852657
+1554 1638 1
+1557 1638 59727
+1828 1638 41525
+1829 1638 20236
+1830 1638 20236
+1848 1638 65478
+1856 1638 12089
+1899 1638 3500
+1901 1638 14455
+1904 1638 14913
+1905 1638 14913
+1914 1638 14913
+1952 1638 34422
+1953 1638 26675
+1954 1638 35055
+1955 1638 43515
+1958 1638 34339
+1959 1638 54465
+1960 1638 54465
+1969 1638 3857
+1979 1638 54465
+2018 1638 34422
+2019 1638 26675
+2020 1638 35055
+2021 1638 43515
+2022 1638 47857
+2024 1638 34339
+2025 1638 54465
+2026 1638 54465
+2035 1638 3857
+2045 1638 43409
+2056 1638 54465
+2178 1638 49055
+2179 1638 49055
+2180 1638 51736
+2181 1638 40230
+2182 1638 56696
+2183 1638 2422
+2184 1638 16197
+2185 1638 25982
+2186 1638 34807
+2187 1638 2422
+2188 1638 16197
+2189 1638 47740
+2190 1638 5273
+2191 1638 35987
+2192 1638 2422
+2193 1638 16197
+2194 1638 56868
+2195 1638 18164
+2196 1638 38170
+2197 1638 2183
+2200 1638 18702
+2201 1638 33501
+2202 1638 26427
+2203 1638 36407
+2207 1638 27669
+2208 1638 42468
+2209 1638 35394
+2210 1638 50306
+2211 1638 14792
+2212 1638 14792
+2213 1638 27789
+2214 1638 27323
+2216 1638 1583
+2217 1638 6586
+2218 1638 44145
+2219 1638 19029
+2220 1638 58328
+2221 1638 43536
+2258 1638 29538
+2259 1638 29072
+2260 1638 55826
+2262 1638 58161
+2263 1638 25786
+2264 1638 31085
+2265 1638 4195
+2266 1638 54432
+2275 1638 10896
+2313 1638 27619
+2314 1638 27591
+2315 1638 50163
+2316 1638 21545
+2318 1638 33584
+2319 1638 40556
+2320 1638 26997
+2321 1638 5454
+2330 1638 34707
+2340 1638 23811
+2379 1638 50681
+2380 1638 37687
+2381 1638 4934
+2382 1638 19669
+2383 1638 2924
+2385 1638 29555
+2386 1638 17817
+2387 1638 24064
+2396 1638 20117
+2406 1638 58660
+2417 1638 34849
+2457 1638 41416
+2458 1638 51253
+2459 1638 1552
+2460 1638 56985
+2461 1638 19047
+2462 1638 49616
+2463 1638 21820
+2464 1638 31761
+2465 1638 24529
+2474 1638 58769
+2484 1638 26080
+2495 1638 56104
+2507 1638 18383
+4149 1638 27852657
+1555 1639 1
+2316 1639 32761
+2382 1639 32761
+2383 1639 32761
+2392 1639 32761
+2460 1639 24571
+2461 1639 24571
+2462 1639 24571
+2470 1639 24571
+2471 1639 24571
+2481 1639 24571
+2507 1639 36856
+2508 1639 36856
+2509 1639 36856
+2510 1639 36856
+2511 1639 6655
+4150 1639 27852657
+1556 1640 1
+1557 1640 1
+1948 1640 61136
+1956 1640 55752
+1963 1640 26622
+1965 1640 60568
+1968 1640 7132
+1969 1640 7132
+1970 1640 7132
+1971 1640 52136
+1972 1640 52136
+1973 1640 13237
+1974 1640 13237
+1977 1640 30661
+1978 1640 54951
+1979 1640 54951
+1980 1640 62083
+1981 1640 54951
+2037 1640 52136
+2038 1640 52136
+2039 1640 13237
+2040 1640 13237
+2041 1640 15752
+2043 1640 30661
+2044 1640 54951
+2045 1640 54951
+2046 1640 62083
+2047 1640 44381
+2058 1640 54951
+2302 1640 56555
+2303 1640 32541
+2307 1640 37637
+2308 1640 37637
+2309 1640 28671
+2310 1640 28004
+2311 1640 64488
+2312 1640 64488
+2313 1640 21803
+2314 1640 21803
+2316 1640 33382
+2317 1640 1080
+2318 1640 3958
+2319 1640 1234
+2320 1640 62887
+2321 1640 63920
+2322 1640 49901
+2323 1640 49901
+2324 1640 44021
+2326 1640 2714
+2327 1640 9436
+2328 1640 29184
+2329 1640 65017
+2330 1640 26505
+2331 1640 28106
+2332 1640 5531
+2333 1640 5531
+2334 1640 65172
+2335 1640 65172
+2337 1640 39797
+2338 1640 16587
+2339 1640 28313
+2340 1640 47099
+2341 1640 7851
+2342 1640 45266
+2398 1640 46663
+2399 1640 46663
+2400 1640 17618
+2401 1640 17618
+2402 1640 34351
+2404 1640 5297
+2405 1640 49515
+2406 1640 35141
+2407 1640 19848
+2408 1640 20072
+2419 1640 40327
+2476 1640 7278
+2477 1640 7278
+2478 1640 58018
+2479 1640 58018
+2480 1640 45936
+2481 1640 17973
+2482 1640 50965
+2483 1640 64086
+2484 1640 8078
+2485 1640 41206
+2486 1640 20008
+2497 1640 44523
+2509 1640 33534
+4151 1640 27852657
+1557 1641 1
+2210 1641 11191
+2211 1641 11312
+2212 1641 11312
+2213 1641 24119
+2214 1641 24119
+2216 1641 45908
+2217 1641 45908
+2218 1641 47574
+2219 1641 42843
+2220 1641 46466
+2221 1641 35154
+2258 1641 10947
+2259 1641 10947
+2260 1641 10947
+2262 1641 32581
+2263 1641 21791
+2264 1641 31670
+2265 1641 40307
+2266 1641 58866
+2275 1641 23712
+2313 1641 50838
+2314 1641 50838
+2315 1641 50838
+2316 1641 50838
+2318 1641 46809
+2319 1641 58661
+2320 1641 25578
+2321 1641 6246
+2330 1641 30510
+2340 1641 6798
+2379 1641 44586
+2380 1641 44586
+2381 1641 44586
+2382 1641 44586
+2383 1641 44586
+2385 1641 17293
+2386 1641 42096
+2387 1641 48062
+2396 1641 43710
+2406 1641 49763
+2417 1641 42965
+2457 1641 21251
+2458 1641 21251
+2459 1641 21251
+2460 1641 21251
+2461 1641 21251
+2462 1641 20796
+2463 1641 29770
+2464 1641 24903
+2465 1641 37522
+2474 1641 38698
+2484 1641 22638
+2495 1641 9487
+2507 1641 30874
+4152 1641 27852657
+1558 1642 1
+2484 1642 65520
+4153 1642 27852657
+1559 1643 1
+1560 1643 1
+1561 1643 1
+1562 1643 1
+1563 1643 1
+1567 1643 1
+1568 1643 1
+1569 1643 1
+1570 1643 1
+1576 1643 1
+1577 1643 1
+1578 1643 1
+1622 1643 1
+1623 1643 1
+1678 1643 1
+2319 1643 32761
+2320 1643 32761
+2321 1643 32761
+2330 1643 32761
+2340 1643 32761
+2406 1643 32761
+2484 1643 24573
+4154 1643 27852657
+1560 1644 1
+1847 1644 1024
+1848 1644 14431
+1856 1644 32504
+1899 1644 5456
+1901 1644 60601
+1904 1644 20152
+1905 1644 20152
+1914 1644 20152
+1952 1644 31789
+1953 1644 31789
+1954 1644 48671
+1955 1644 24455
+1958 1644 37521
+1959 1644 53384
+1960 1644 53384
+1969 1644 8015
+1979 1644 53384
+2018 1644 31789
+2019 1644 31789
+2020 1644 48671
+2021 1644 24455
+2022 1644 57267
+2024 1644 37521
+2025 1644 53384
+2026 1644 53384
+2035 1644 8015
+2045 1644 41247
+2056 1644 53384
+2200 1644 9206
+2201 1644 8747
+2202 1644 2436
+2203 1644 62497
+2207 1644 46940
+2208 1644 489
+2209 1644 59699
+2210 1644 35861
+2211 1644 48492
+2212 1644 48492
+2213 1644 20056
+2214 1644 20056
+2216 1644 16344
+2217 1644 43231
+2218 1644 11764
+2219 1644 18475
+2220 1644 4060
+2221 1644 21089
+2258 1644 15848
+2259 1644 15848
+2260 1644 16782
+2262 1644 48601
+2263 1644 39078
+2264 1644 39072
+2265 1644 62831
+2266 1644 58414
+2275 1644 37325
+2313 1644 14959
+2314 1644 14959
+2315 1644 56504
+2316 1644 37309
+2318 1644 5883
+2319 1644 19640
+2320 1644 61218
+2321 1644 43903
+2330 1644 49808
+2340 1644 12483
+2379 1644 2649
+2380 1644 2649
+2381 1644 13490
+2382 1644 26116
+2383 1644 20158
+2385 1644 1131
+2386 1644 3539
+2387 1644 186
+2396 1644 26104
+2406 1644 25306
+2417 1644 12823
+2457 1644 14375
+2458 1644 14375
+2459 1644 19164
+2460 1644 5806
+2461 1644 26379
+2462 1644 61858
+2463 1644 20081
+2464 1644 59834
+2465 1644 28443
+2474 1644 763
+2484 1644 54895
+2495 1644 22479
+2507 1644 43649
+4155 1644 27852657
+1561 1645 1
+1562 1645 1
+1563 1645 1
+1568 1645 1
+1569 1645 1
+1570 1645 1
+1576 1645 1
+1577 1645 1
+1578 1645 1
+1607 1645 1
+1608 1645 1
+1614 1645 1
+1615 1645 1
+1622 1645 2
+1623 1645 2
+1631 1645 1
+1632 1645 1
+1663 1645 1
+1670 1645 1
+1678 1645 2
+1687 1645 2
+1697 1645 1
+2319 1645 32761
+2320 1645 32761
+2321 1645 32761
+2328 1645 32761
+2329 1645 32761
+2330 1645 1
+2331 1645 32761
+2338 1645 32761
+2339 1645 32761
+2340 1645 1
+2341 1645 1
+2342 1645 32761
+2404 1645 32761
+2405 1645 32761
+2406 1645 1
+2407 1645 1
+2408 1645 1
+2419 1645 32761
+2482 1645 24572
+2483 1645 24572
+2484 1645 49144
+2485 1645 49143
+2486 1645 49142
+2497 1645 49141
+2509 1645 8190
+4156 1645 27852657
+1562 1646 1
+1948 1646 64069
+1956 1646 46153
+1963 1646 7544
+1965 1646 30717
+1968 1646 8811
+1969 1646 8811
+1970 1646 8811
+1971 1646 28721
+1972 1646 28721
+1973 1646 36265
+1974 1646 36265
+1977 1646 55912
+1978 1646 45654
+1979 1646 45654
+1980 1646 54465
+1981 1646 45654
+2037 1646 28721
+2038 1646 28721
+2039 1646 36265
+2040 1646 36265
+2041 1646 16897
+2043 1646 55912
+2044 1646 45654
+2045 1646 45654
+2046 1646 54465
+2047 1646 25787
+2058 1646 45654
+2302 1646 34048
+2303 1646 2776
+2307 1646 2667
+2308 1646 2667
+2309 1646 8049
+2310 1646 21517
+2311 1646 19737
+2312 1646 19737
+2313 1646 45287
+2314 1646 45287
+2316 1646 21386
+2317 1646 31351
+2318 1646 54760
+2319 1646 16983
+2320 1646 36407
+2321 1646 16670
+2322 1646 3480
+2323 1646 3480
+2324 1646 15739
+2326 1646 63277
+2327 1646 25186
+2328 1646 17882
+2329 1646 33778
+2330 1646 21182
+2331 1646 4512
+2332 1646 28271
+2333 1646 28271
+2334 1646 40530
+2335 1646 40530
+2337 1646 33219
+2338 1646 25749
+2339 1646 30147
+2340 1646 3360
+2341 1646 30519
+2342 1646 26007
+2398 1646 40990
+2399 1646 40990
+2400 1646 16245
+2401 1646 16245
+2402 1646 22819
+2404 1646 43218
+2405 1646 6234
+2406 1646 61233
+2407 1646 39505
+2408 1646 2897
+2419 1646 42411
+2476 1646 18184
+2477 1646 18184
+2478 1646 33857
+2479 1646 33857
+2480 1646 55315
+2481 1646 35587
+2482 1646 53281
+2483 1646 11222
+2484 1646 48067
+2485 1646 59904
+2486 1646 33397
+2497 1646 33414
+2509 1646 24098
+4157 1646 27852657
+1563 1647 1
+1570 1647 1
+1578 1647 1
+1608 1647 1
+1615 1647 1
+1623 1647 2
+1632 1647 1
+1663 1647 1
+1670 1647 1
+1678 1647 2
+1687 1647 2
+1697 1647 1
+1893 1647 1
+1901 1647 1
+1910 1647 1
+2254 1647 32761
+2255 1647 32761
+2262 1647 32761
+2263 1647 32761
+2271 1647 32761
+2272 1647 32761
+2310 1647 32761
+2318 1647 32761
+2319 1647 32761
+2320 1647 32761
+2321 1647 32761
+2327 1647 1
+2328 1647 32761
+2329 1647 32761
+2330 1647 1
+2331 1647 32761
+2337 1647 32761
+2338 1647 32761
+2339 1647 32761
+2340 1647 1
+2341 1647 1
+2342 1647 32761
+2385 1647 32761
+2386 1647 32761
+2387 1647 32761
+2394 1647 32761
+2395 1647 32761
+2396 1647 1
+2397 1647 32761
+2404 1647 1
+2405 1647 1
+2406 1647 2
+2407 1647 2
+2408 1647 32762
+2415 1647 32761
+2416 1647 32761
+2417 1647 1
+2418 1647 1
+2419 1647 32762
+2420 1647 32761
+2455 1647 1
+2456 1647 1
+2463 1647 24572
+2464 1647 24572
+2465 1647 24571
+2472 1647 24572
+2473 1647 49143
+2474 1647 8193
+2475 1647 49143
+2482 1647 49143
+2483 1647 8193
+2484 1647 57335
+2485 1647 16385
+2486 1647 32763
+2493 1647 49142
+2494 1647 8192
+2495 1647 57333
+2496 1647 16383
+2497 1647 2
+2498 1647 32761
+2505 1647 40951
+2506 1647 12286
+2507 1647 20476
+2508 1647 57332
+2509 1647 32761
+2511 1647 4095
+4158 1647 27852657
+1564 1648 1
+1572 1648 65520
+1580 1648 65519
+1581 1648 65520
+1609 1648 1
+1617 1648 65520
+1625 1648 65517
+1626 1648 65518
+1634 1648 65519
+1635 1648 65518
+1636 1648 65520
+1664 1648 1
+1672 1648 65520
+1679 1648 41827
+1680 1648 41823
+1681 1648 41824
+1688 1648 41827
+1689 1648 41823
+1690 1648 18127
+1691 1648 41824
+1698 1648 41827
+1699 1648 41825
+1700 1648 18130
+1701 1648 18130
+1702 1648 41826
+1843 1648 1
+1851 1648 65520
+1859 1648 65519
+1860 1648 65520
+1888 1648 1
+1896 1648 41826
+1904 1648 18129
+1905 1648 41824
+1913 1648 18131
+1914 1648 18130
+1915 1648 41826
+1951 1648 41827
+1959 1648 18129
+1960 1648 41823
+1968 1648 36260
+1969 1648 36256
+1970 1648 59954
+1978 1648 18129
+1979 1648 59953
+1980 1648 36257
+1981 1648 18129
+2009 1648 65520
+2017 1648 41828
+2024 1648 23694
+2025 1648 41827
+2026 1648 65520
+2033 1648 23694
+2035 1648 23692
+2036 1648 23693
+2044 1648 41827
+2045 1648 65518
+2046 1648 23689
+2047 1648 65517
+2054 1648 41827
+2055 1648 2
+2056 1648 23695
+2057 1648 5562
+2058 1648 47388
+2059 1648 23695
+2168 1648 3
+2175 1648 42571
+2176 1648 42568
+2204 1648 61430
+2212 1648 46656
+2219 1648 22950
+2220 1648 31129
+2221 1648 27041
+2249 1648 61430
+2256 1648 26313
+2257 1648 35901
+2264 1648 64857
+2265 1648 45606
+2266 1648 9705
+2273 1648 41907
+2274 1648 14477
+2275 1648 3808
+2276 1648 21144
+2304 1648 4086
+2312 1648 1411
+2320 1648 48065
+2321 1648 46654
+2329 1648 33514
+2330 1648 5880
+2331 1648 24747
+2338 1648 12251
+2339 1648 7674
+2340 1648 15930
+2341 1648 65441
+2342 1648 61838
+2370 1648 20475
+2378 1648 61181
+2385 1648 34888
+2387 1648 4340
+2392 1648 18198
+2394 1648 11786
+2395 1648 42577
+2396 1648 21222
+2397 1648 16882
+2398 1648 37726
+2399 1648 37726
+2400 1648 37726
+2401 1648 37726
+2404 1648 35423
+2405 1648 39709
+2406 1648 2806
+2407 1648 1287
+2408 1648 43704
+2409 1648 37726
+2410 1648 37726
+2411 1648 37726
+2412 1648 37726
+2413 1648 37726
+2415 1648 22931
+2416 1648 49024
+2417 1648 3865
+2418 1648 27271
+2419 1648 6851
+2420 1648 24985
+2448 1648 57332
+2451 1648 63510
+2452 1648 63510
+2453 1648 63510
+2454 1648 63510
+2455 1648 2621
+2456 1648 46599
+2457 1648 54429
+2458 1648 54429
+2460 1648 49716
+2461 1648 49716
+2462 1648 49716
+2463 1648 60747
+2464 1648 32819
+2465 1648 51741
+2466 1648 62382
+2467 1648 62382
+2468 1648 62382
+2470 1648 554
+2471 1648 554
+2472 1648 51071
+2473 1648 38547
+2474 1648 64814
+2475 1648 13073
+2476 1648 46326
+2477 1648 46326
+2478 1648 46326
+2479 1648 46326
+2481 1648 25638
+2482 1648 18713
+2483 1648 39440
+2484 1648 19881
+2485 1648 58093
+2486 1648 48685
+2487 1648 27995
+2488 1648 27995
+2489 1648 27995
+2490 1648 27995
+2491 1648 27995
+2493 1648 5587
+2494 1648 15190
+2495 1648 12097
+2496 1648 65010
+2497 1648 32337
+2498 1648 17818
+2499 1648 63888
+2500 1648 63888
+2501 1648 63888
+2502 1648 63888
+2503 1648 63888
+2504 1648 63888
+2505 1648 9635
+2506 1648 11784
+2507 1648 40790
+2508 1648 43055
+2509 1648 44414
+2510 1648 36754
+2511 1648 8826
+4159 1648 27852657
+1565 1649 1
+1573 1649 1
+1574 1649 1
+1618 1649 1
+1619 1649 1
+1620 1649 1
+1673 1649 1
+1674 1649 1
+1675 1649 1
+1676 1649 1
+1952 1649 1
+1953 1649 1
+1954 1649 1
+1955 1649 1
+1956 1649 1
+2313 1649 32761
+2314 1649 32761
+2315 1649 32761
+2316 1649 32761
+2317 1649 32761
+2318 1649 32761
+2484 1649 24573
+4160 1649 27852657
+1566 1650 1
+2484 1650 65520
+4161 1650 27852657
+1567 1651 1
+1847 1651 8829
+1848 1651 50823
+1856 1651 19605
+1899 1651 28867
+1901 1651 37932
+1904 1651 42040
+1905 1651 42040
+1914 1651 42040
+1952 1651 9012
+1953 1651 9012
+1954 1651 37879
+1955 1651 15867
+1958 1651 58851
+1959 1651 38591
+1960 1651 38591
+1969 1651 15110
+1979 1651 38591
+2018 1651 9012
+2019 1651 9012
+2020 1651 37879
+2021 1651 15867
+2022 1651 61742
+2024 1651 58851
+2025 1651 38591
+2026 1651 38591
+2035 1651 15110
+2045 1651 11661
+2056 1651 38591
+2201 1651 20547
+2202 1651 32389
+2203 1651 59025
+2207 1651 36639
+2208 1651 29869
+2209 1651 41711
+2210 1651 25664
+2211 1651 13104
+2212 1651 13104
+2213 1651 59774
+2214 1651 59774
+2216 1651 49020
+2217 1651 28189
+2218 1651 34671
+2219 1651 2455
+2220 1651 64672
+2221 1651 51568
+2258 1651 47606
+2259 1651 47606
+2260 1651 37184
+2262 1651 143
+2263 1651 53704
+2264 1651 43721
+2265 1651 14241
+2266 1651 12712
+2275 1651 26665
+2313 1651 39411
+2314 1651 39411
+2315 1651 28989
+2316 1651 59010
+2318 1651 61177
+2319 1651 3701
+2320 1651 10356
+2321 1651 44650
+2330 1651 59032
+2340 1651 32367
+2379 1651 10250
+2380 1651 10250
+2381 1651 28636
+2382 1651 28426
+2383 1651 1026
+2385 1651 64366
+2386 1651 15565
+2387 1651 60474
+2396 1651 53312
+2406 1651 54954
+2417 1651 22587
+2457 1651 3350
+2458 1651 3350
+2459 1651 51832
+2460 1651 61666
+2461 1651 26468
+2462 1651 6558
+2463 1651 60678
+2464 1651 52680
+2465 1651 35538
+2474 1651 63895
+2484 1651 38413
+2495 1651 62837
+2507 1651 10398
+4162 1651 27852657
+1568 1652 1
+1576 1652 1
+1847 1652 1
+1848 1652 1
+1855 1652 1
+1856 1652 1
+1901 1652 1
+2208 1652 32761
+2209 1652 32761
+2210 1652 32761
+2216 1652 32761
+2217 1652 32761
+2218 1652 32761
+2262 1652 32761
+2263 1652 32761
+2318 1652 32761
+2464 1652 24572
+2465 1652 24572
+2473 1652 1
+2474 1652 24572
+2483 1652 1
+2484 1652 24572
+2494 1652 1
+2495 1652 24572
+2506 1652 32761
+2507 1652 4096
+4163 1652 27852657
+1569 1653 1
+1577 1653 1
+1631 1653 65520
+1948 1653 32763
+1956 1653 2
+1965 1653 32078
+1968 1653 17260
+1969 1653 17260
+1970 1653 17260
+1971 1653 57776
+1972 1653 57776
+1973 1653 57776
+1974 1653 57776
+1977 1653 60040
+1978 1653 3969
+1979 1653 3969
+1980 1653 21229
+1981 1653 3969
+2037 1653 57776
+2038 1653 57776
+2039 1653 57776
+2040 1653 57776
+2041 1653 57776
+2043 1653 60040
+2044 1653 3969
+2045 1653 3969
+2046 1653 21229
+2047 1653 7938
+2058 1653 3969
+2303 1653 5562
+2307 1653 60245
+2308 1653 60245
+2309 1653 23390
+2310 1653 26502
+2311 1653 43980
+2312 1653 43980
+2313 1653 23087
+2314 1653 23087
+2316 1653 1015
+2317 1653 33776
+2318 1653 42974
+2319 1653 2925
+2320 1653 20482
+2321 1653 42023
+2322 1653 61794
+2323 1653 61794
+2324 1653 61794
+2326 1653 12265
+2327 1653 62820
+2328 1653 37279
+2329 1653 32199
+2330 1653 28174
+2331 1653 51672
+2332 1653 50036
+2333 1653 50036
+2334 1653 50036
+2335 1653 50036
+2337 1653 62036
+2338 1653 4393
+2339 1653 21597
+2340 1653 10389
+2341 1653 55329
+2342 1653 3657
+2398 1653 7565
+2399 1653 7565
+2400 1653 7565
+2401 1653 7565
+2402 1653 7565
+2404 1653 3802
+2405 1653 64498
+2406 1653 7594
+2407 1653 62861
+2408 1653 59495
+2419 1653 55838
+2476 1653 21126
+2477 1653 21126
+2478 1653 21126
+2479 1653 21126
+2480 1653 21126
+2481 1653 20199
+2482 1653 31539
+2483 1653 31176
+2484 1653 16602
+2485 1653 58629
+2486 1653 39386
+2497 1653 20852
+2509 1653 33382
+4164 1653 27852657
+1570 1654 1
+1578 1654 1
+1632 1654 65520
+1697 1654 1
+1965 1654 61157
+1968 1654 20292
+1969 1654 20292
+1970 1654 20292
+1971 1654 24464
+1972 1654 24464
+1973 1654 24464
+1974 1654 24464
+1977 1654 2480
+1978 1654 21631
+1979 1654 21631
+1980 1654 41923
+1981 1654 21631
+2037 1654 24464
+2038 1654 24464
+2039 1654 24464
+2040 1654 24464
+2041 1654 24464
+2043 1654 2480
+2044 1654 21631
+2045 1654 21631
+2046 1654 41923
+2047 1654 43262
+2058 1654 21631
+2303 1654 59959
+2307 1654 10717
+2308 1654 10717
+2309 1654 10717
+2310 1654 7605
+2311 1654 21541
+2312 1654 21541
+2313 1654 37501
+2314 1654 37501
+2316 1654 28283
+2317 1654 28283
+2318 1654 19085
+2319 1654 62596
+2320 1654 12376
+2321 1654 56356
+2322 1654 32262
+2323 1654 32262
+2324 1654 32262
+2326 1654 38568
+2327 1654 53534
+2328 1654 28242
+2329 1654 14563
+2330 1654 5428
+2331 1654 14593
+2332 1654 49166
+2333 1654 49166
+2334 1654 49166
+2335 1654 49166
+2337 1654 4960
+2338 1654 43122
+2339 1654 51625
+2340 1654 27349
+2341 1654 41924
+2342 1654 27331
+2398 1654 32489
+2399 1654 32489
+2400 1654 32489
+2401 1654 32489
+2402 1654 32489
+2404 1654 32272
+2405 1654 50003
+2406 1654 52103
+2407 1654 17083
+2408 1654 65101
+2419 1654 37770
+2476 1654 48991
+2477 1654 48991
+2478 1654 48991
+2479 1654 48991
+2480 1654 48991
+2481 1654 49918
+2482 1654 33982
+2483 1654 45726
+2484 1654 51649
+2485 1654 611
+2486 1654 21845
+2497 1654 24381
+2509 1654 1841
+4165 1654 27852657
+1571 1655 1
+1572 1655 1
+1580 1655 1
+1616 1655 1
+1617 1655 1
+1625 1655 2
+1634 1655 1
+1671 1655 1
+1672 1655 1
+1679 1655 18616
+1680 1655 18618
+1681 1655 18616
+1688 1655 18616
+1689 1655 18618
+1690 1655 37232
+1691 1655 18616
+1698 1655 18616
+1699 1655 18617
+1700 1655 37232
+1701 1655 37232
+1702 1655 18616
+1858 1655 65520
+1859 1655 65520
+1860 1655 65520
+1896 1655 18286
+1903 1655 65519
+1904 1655 48125
+1905 1655 29838
+1912 1655 65520
+1913 1655 48126
+1914 1655 59679
+1915 1655 29840
+1951 1655 18286
+1959 1655 48128
+1960 1655 29840
+1968 1655 19509
+1969 1655 42616
+1970 1655 12776
+1978 1655 36903
+1979 1655 1552
+1980 1655 20168
+1981 1655 37232
+2017 1655 18286
+2024 1655 46906
+2025 1655 29512
+2026 1655 11225
+2033 1655 46906
+2035 1655 4493
+2036 1655 58789
+2044 1655 7390
+2045 1655 11885
+2046 1655 48224
+2047 1655 54955
+2054 1655 18616
+2055 1655 54625
+2056 1655 47565
+2057 1655 65288
+2058 1655 7157
+2059 1655 36339
+2175 1655 64721
+2176 1655 64721
+2212 1655 64721
+2219 1655 40442
+2220 1655 41146
+2221 1655 41146
+2256 1655 1758
+2257 1655 47103
+2264 1655 24795
+2265 1655 33571
+2266 1655 8665
+2273 1655 49874
+2274 1655 57946
+2275 1655 24934
+2276 1655 57415
+2312 1655 45345
+2320 1655 53373
+2321 1655 14582
+2329 1655 51947
+2330 1655 36952
+2331 1655 22370
+2338 1655 14044
+2339 1655 57919
+2340 1655 62309
+2341 1655 53828
+2342 1655 23352
+2378 1655 25919
+2385 1655 25847
+2387 1655 46156
+2392 1655 43906
+2394 1655 14675
+2395 1655 962
+2396 1655 20337
+2397 1655 39702
+2398 1655 35644
+2399 1655 35644
+2400 1655 35644
+2401 1655 35644
+2404 1655 45404
+2405 1655 16468
+2406 1655 13347
+2407 1655 63011
+2408 1655 34819
+2409 1655 35644
+2410 1655 35644
+2411 1655 35644
+2412 1655 35644
+2413 1655 35644
+2415 1655 32738
+2416 1655 64942
+2417 1655 57431
+2418 1655 23265
+2419 1655 18323
+2420 1655 6856
+2451 1655 50863
+2452 1655 50863
+2453 1655 50863
+2454 1655 50863
+2455 1655 31602
+2456 1655 49963
+2457 1655 63520
+2458 1655 63520
+2460 1655 40713
+2461 1655 40713
+2462 1655 40713
+2463 1655 62641
+2464 1655 64843
+2465 1655 4357
+2466 1655 44156
+2467 1655 44156
+2468 1655 44156
+2470 1655 46101
+2471 1655 46101
+2472 1655 57847
+2473 1655 58862
+2474 1655 35252
+2475 1655 30895
+2476 1655 5321
+2477 1655 5321
+2478 1655 5321
+2479 1655 5321
+2481 1655 26764
+2482 1655 55693
+2483 1655 31728
+2484 1655 49334
+2485 1655 8206
+2486 1655 63815
+2487 1655 45933
+2488 1655 45933
+2489 1655 45933
+2490 1655 45933
+2491 1655 45933
+2493 1655 7787
+2494 1655 22676
+2495 1655 51404
+2496 1655 19873
+2497 1655 41222
+2498 1655 29365
+2499 1655 28774
+2500 1655 28774
+2501 1655 28774
+2502 1655 28774
+2503 1655 28774
+2504 1655 28774
+2505 1655 42597
+2506 1655 51791
+2507 1655 29222
+2508 1655 5509
+2509 1655 15672
+2510 1655 51068
+2511 1655 63916
+4166 1655 27852657
+1572 1656 1
+1581 1656 65520
+1617 1656 19564
+1626 1656 34553
+1634 1656 3054
+1635 1656 35516
+1636 1656 962
+1672 1656 2437
+1681 1656 12492
+1691 1656 47199
+1698 1656 158
+1699 1656 27163
+1700 1656 65043
+1701 1656 42951
+1702 1656 62235
+1951 1656 55965
+1960 1656 34419
+1970 1656 54979
+1981 1656 62432
+2045 1656 20529
+2046 1656 65094
+2047 1656 30005
+2058 1656 29808
+2311 1656 24352
+2312 1656 40940
+2313 1656 19610
+2314 1656 19610
+2316 1656 44291
+2317 1656 44291
+2318 1656 44291
+2319 1656 42662
+2320 1656 34816
+2321 1656 24153
+2322 1656 21231
+2323 1656 21231
+2324 1656 21231
+2326 1656 47707
+2327 1656 47707
+2328 1656 49719
+2329 1656 17309
+2330 1656 11750
+2331 1656 48676
+2332 1656 56688
+2333 1656 56688
+2334 1656 56688
+2335 1656 56688
+2337 1656 47584
+2338 1656 32152
+2339 1656 31115
+2340 1656 27435
+2341 1656 24649
+2342 1656 31783
+2398 1656 55408
+2399 1656 55408
+2400 1656 55408
+2401 1656 55408
+2402 1656 55408
+2404 1656 6387
+2405 1656 37178
+2406 1656 14066
+2407 1656 37688
+2408 1656 17012
+2419 1656 56760
+2476 1656 49331
+2477 1656 49331
+2478 1656 49331
+2479 1656 49331
+2480 1656 49331
+2481 1656 49331
+2482 1656 35052
+2483 1656 63137
+2484 1656 16011
+2485 1656 52709
+2486 1656 63690
+2497 1656 10738
+2509 1656 56864
+4167 1656 27852657
+1573 1657 1
+1626 1657 50663
+1628 1657 1
+1634 1657 51868
+1635 1657 21821
+1636 1657 36679
+1681 1657 9142
+1691 1657 897
+1693 1657 65520
+1697 1657 8083
+1698 1657 54397
+1699 1657 2529
+1700 1657 58047
+1701 1657 3213
+1702 1657 38995
+1960 1657 26655
+1970 1657 42794
+1981 1657 7764
+2044 1657 40084
+2045 1657 4929
+2046 1657 48117
+2047 1657 8487
+2058 1657 39718
+2302 1657 57425
+2309 1657 8603
+2310 1657 44455
+2311 1657 26766
+2312 1657 26766
+2313 1657 1084
+2314 1657 55888
+2316 1657 12754
+2317 1657 40018
+2318 1657 34218
+2319 1657 4209
+2320 1657 45281
+2321 1657 46129
+2322 1657 17852
+2323 1657 55799
+2324 1657 41998
+2326 1657 38828
+2327 1657 28720
+2328 1657 39292
+2329 1657 10689
+2330 1657 16119
+2331 1657 61363
+2332 1657 40159
+2333 1657 63418
+2334 1657 33030
+2335 1657 33030
+2337 1657 8834
+2338 1657 56907
+2339 1657 25103
+2340 1657 36448
+2341 1657 41588
+2342 1657 63609
+2398 1657 45611
+2399 1657 12601
+2400 1657 18694
+2401 1657 18694
+2402 1657 61309
+2404 1657 48324
+2405 1657 59600
+2406 1657 27754
+2407 1657 22176
+2408 1657 53866
+2419 1657 64912
+2476 1657 30647
+2477 1657 56580
+2478 1657 61347
+2479 1657 61347
+2480 1657 22231
+2481 1657 30851
+2482 1657 15863
+2483 1657 2248
+2484 1657 61413
+2485 1657 51412
+2486 1657 32769
+2497 1657 38950
+2509 1657 60742
+4168 1657 27852657
+1574 1658 1
+1628 1658 65520
+1683 1658 65519
+1693 1658 65520
+1962 1658 65519
+1972 1658 65519
+2038 1658 65520
+2375 1658 2067
+2383 1658 29906
+2389 1658 37417
+2390 1658 16099
+2392 1658 11996
+2395 1658 38987
+2396 1658 38987
+2397 1658 38987
+2398 1658 34667
+2399 1658 6773
+2400 1658 33697
+2401 1658 32412
+2404 1658 3317
+2405 1658 58780
+2406 1658 58780
+2407 1658 32246
+2408 1658 58780
+2409 1658 34667
+2410 1658 6773
+2411 1658 33697
+2412 1658 32412
+2413 1658 38541
+2415 1658 3317
+2416 1658 58780
+2417 1658 58780
+2418 1658 32246
+2419 1658 52039
+2420 1658 58780
+2444 1658 47769
+2445 1658 47769
+2446 1658 28880
+2447 1658 59192
+2451 1658 56178
+2452 1658 56178
+2453 1658 37289
+2454 1658 25915
+2455 1658 63277
+2456 1658 63277
+2457 1658 54348
+2458 1658 33682
+2460 1658 29485
+2461 1658 63935
+2462 1658 60498
+2463 1658 19184
+2464 1658 64685
+2465 1658 1408
+2466 1658 61801
+2467 1658 60395
+2468 1658 41319
+2470 1658 13846
+2471 1658 43962
+2472 1658 55607
+2473 1658 16707
+2474 1658 53090
+2475 1658 51682
+2476 1658 52858
+2477 1658 58108
+2478 1658 62676
+2479 1658 54966
+2481 1658 32104
+2482 1658 37116
+2483 1658 38992
+2484 1658 27575
+2485 1658 24402
+2486 1658 38241
+2487 1658 8490
+2488 1658 37386
+2489 1658 60842
+2490 1658 1423
+2491 1658 62712
+2493 1658 55625
+2494 1658 36496
+2495 1658 33774
+2496 1658 63656
+2497 1658 44990
+2498 1658 6749
+2499 1658 48472
+2500 1658 17806
+2501 1658 20434
+2502 1658 20434
+2503 1658 50905
+2504 1658 46037
+2505 1658 3498
+2506 1658 33995
+2507 1658 29980
+2508 1658 50948
+2509 1658 59412
+2510 1658 23004
+2511 1658 24914
+4169 1658 27852657
+1575 1659 1
+2484 1659 65520
+4170 1659 27852657
+1576 1660 1
+1577 1660 1
+1626 1660 34976
+1634 1660 24806
+1635 1660 7599
+1636 1660 38144
+1681 1660 2585
+1691 1660 31230
+1697 1660 36084
+1698 1660 47570
+1699 1660 22764
+1700 1660 19134
+1701 1660 25454
+1702 1660 32368
+1960 1660 19269
+1970 1660 26427
+1981 1660 33947
+2044 1660 26994
+2045 1660 53889
+2046 1660 49039
+2047 1660 49673
+2058 1660 48094
+2310 1660 60542
+2311 1660 23497
+2312 1660 23497
+2313 1660 19175
+2314 1660 19175
+2316 1660 35436
+2317 1660 35436
+2318 1660 33521
+2319 1660 30924
+2320 1660 60937
+2321 1660 40619
+2322 1660 59234
+2323 1660 59234
+2324 1660 59234
+2326 1660 33919
+2327 1660 62765
+2328 1660 3058
+2329 1660 40480
+2330 1660 13551
+2331 1660 4092
+2332 1660 6248
+2333 1660 6248
+2334 1660 6248
+2335 1660 6248
+2337 1660 16917
+2338 1660 56035
+2339 1660 37372
+2340 1660 18647
+2341 1660 3228
+2342 1660 50709
+2398 1660 7235
+2399 1660 7235
+2400 1660 7235
+2401 1660 7235
+2402 1660 7235
+2404 1660 56668
+2405 1660 53082
+2406 1660 35607
+2407 1660 25033
+2408 1660 59401
+2419 1660 34199
+2476 1660 3782
+2477 1660 3782
+2478 1660 3782
+2479 1660 3782
+2480 1660 3782
+2481 1660 3782
+2482 1660 19507
+2483 1660 42532
+2484 1660 21362
+2485 1660 19500
+2486 1660 21602
+2497 1660 52134
+2509 1660 27671
+4171 1660 27852657
+1577 1661 1
+1626 1661 56003
+1634 1661 27205
+1635 1661 61775
+1636 1661 5772
+1681 1661 17825
+1691 1661 37327
+1698 1661 5185
+1699 1661 34049
+1700 1661 29243
+1701 1661 36150
+1702 1661 4595
+1960 1661 17224
+1970 1661 33905
+1981 1661 57426
+2045 1661 12706
+2046 1661 1038
+2047 1661 36651
+2058 1661 49341
+2302 1661 45790
+2309 1661 35643
+2310 1661 472
+2311 1661 40769
+2312 1661 40769
+2313 1661 13554
+2314 1661 54171
+2316 1661 58256
+2317 1661 55678
+2318 1661 62349
+2319 1661 34686
+2320 1661 36602
+2321 1661 34288
+2322 1661 51845
+2323 1661 10001
+2324 1661 10001
+2326 1661 35268
+2327 1661 43801
+2328 1661 4136
+2329 1661 65511
+2330 1661 45454
+2331 1661 51795
+2332 1661 23598
+2333 1661 55465
+2334 1661 55465
+2335 1661 55465
+2337 1661 21929
+2338 1661 6113
+2339 1661 39333
+2340 1661 9578
+2341 1661 36504
+2342 1661 32274
+2398 1661 61765
+2399 1661 46717
+2400 1661 46717
+2401 1661 46717
+2402 1661 39910
+2404 1661 36142
+2405 1661 22635
+2406 1661 61519
+2407 1661 63340
+2408 1661 47613
+2419 1661 24073
+2476 1661 53543
+2477 1661 26630
+2478 1661 26630
+2479 1661 26630
+2480 1661 44743
+2481 1661 64686
+2482 1661 58959
+2483 1661 1397
+2484 1661 49776
+2485 1661 24679
+2486 1661 13396
+2497 1661 64240
+2509 1661 56092
+4172 1661 27852657
+1578 1662 1
+1626 1662 46340
+1634 1662 61091
+1635 1662 54752
+1636 1662 8412
+1681 1662 5354
+1691 1662 42267
+1697 1662 60089
+1698 1662 44762
+1699 1662 49192
+1700 1662 857
+1701 1662 4187
+1702 1662 35853
+1960 1662 51035
+1970 1662 41233
+1981 1662 61375
+2044 1662 46021
+2045 1662 42880
+2046 1662 40427
+2047 1662 16879
+2058 1662 56878
+2310 1662 4979
+2311 1662 3450
+2312 1662 3450
+2313 1662 63538
+2314 1662 63538
+2316 1662 2205
+2317 1662 2205
+2318 1662 4120
+2319 1662 11164
+2320 1662 16323
+2321 1662 52590
+2322 1662 43103
+2323 1662 43103
+2324 1662 43103
+2326 1662 61323
+2327 1662 32477
+2328 1662 45765
+2329 1662 56187
+2330 1662 5271
+2331 1662 38003
+2332 1662 63778
+2333 1662 63778
+2334 1662 63778
+2335 1662 63778
+2337 1662 39503
+2338 1662 60987
+2339 1662 8597
+2340 1662 61797
+2341 1662 19635
+2342 1662 53045
+2398 1662 9947
+2399 1662 9947
+2400 1662 9947
+2401 1662 9947
+2402 1662 9947
+2404 1662 2529
+2405 1662 9125
+2406 1662 31728
+2407 1662 56512
+2408 1662 52678
+2419 1662 32237
+2476 1662 17842
+2477 1662 17842
+2478 1662 17842
+2479 1662 17842
+2480 1662 17842
+2481 1662 17842
+2482 1662 16334
+2483 1662 22889
+2484 1662 29472
+2485 1662 51527
+2486 1662 30499
+2497 1662 54740
+2509 1662 31304
+4173 1662 27852657
+1579 1663 1
+1580 1663 1
+1581 1663 1
+1626 1663 1
+1633 1663 65520
+1634 1663 65520
+1635 1663 65520
+1636 1663 65520
+1679 1663 8837
+1680 1663 8837
+1681 1663 8838
+1688 1663 8835
+1689 1663 8835
+1690 1663 17672
+1691 1663 8834
+1698 1663 8836
+1699 1663 8836
+1700 1663 17673
+1701 1663 17671
+1702 1663 8836
+1858 1663 1
+1859 1663 1
+1860 1663 1
+1896 1663 64538
+1904 1663 52000
+1905 1663 52984
+1912 1663 65520
+1913 1663 20262
+1914 1663 8707
+1915 1663 21245
+1951 1663 64538
+1959 1663 52000
+1960 1663 52985
+1968 1663 28116
+1969 1663 5006
+1970 1663 51326
+1978 1663 7853
+1979 1663 5135
+1980 1663 47753
+1981 1663 17672
+2017 1663 64538
+2024 1663 56684
+2025 1663 43163
+2026 1663 44147
+2033 1663 56686
+2035 1663 33574
+2036 1663 23211
+2044 1663 61946
+2045 1663 29999
+2046 1663 30439
+2047 1663 7227
+2054 1663 8836
+2055 1663 62929
+2056 1663 42537
+2057 1663 357
+2058 1663 62303
+2059 1663 63912
+2175 1663 25777
+2176 1663 25777
+2212 1663 25777
+2219 1663 102
+2220 1663 64919
+2221 1663 64919
+2256 1663 12804
+2257 1663 64038
+2264 1663 37267
+2265 1663 63966
+2266 1663 43252
+2273 1663 37165
+2274 1663 25213
+2275 1663 48657
+2276 1663 4803
+2312 1663 51234
+2320 1663 35610
+2321 1663 43343
+2329 1663 22738
+2330 1663 34697
+2331 1663 17035
+2338 1663 6337
+2339 1663 41027
+2340 1663 54887
+2341 1663 22987
+2342 1663 10755
+2378 1663 8686
+2385 1663 60381
+2387 1663 50281
+2392 1663 2516
+2394 1663 11807
+2395 1663 14159
+2396 1663 26882
+2397 1663 35262
+2398 1663 37005
+2399 1663 37005
+2400 1663 37005
+2401 1663 37005
+2404 1663 20392
+2405 1663 21018
+2406 1663 38662
+2407 1663 27092
+2408 1663 46582
+2409 1663 37005
+2410 1663 37005
+2411 1663 37005
+2412 1663 37005
+2413 1663 37005
+2415 1663 61885
+2416 1663 37440
+2417 1663 41224
+2418 1663 17853
+2419 1663 32393
+2420 1663 62087
+2451 1663 9045
+2452 1663 9045
+2453 1663 9045
+2454 1663 9045
+2455 1663 64579
+2456 1663 1801
+2457 1663 6564
+2458 1663 6564
+2460 1663 22278
+2461 1663 22278
+2462 1663 22278
+2463 1663 14204
+2464 1663 6049
+2465 1663 14771
+2466 1663 6725
+2467 1663 6725
+2468 1663 6725
+2470 1663 33132
+2471 1663 33132
+2472 1663 5709
+2473 1663 15595
+2474 1663 20422
+2475 1663 51382
+2476 1663 58970
+2477 1663 58970
+2478 1663 58970
+2479 1663 58970
+2481 1663 60691
+2482 1663 15380
+2483 1663 21667
+2484 1663 1741
+2485 1663 26435
+2486 1663 62370
+2487 1663 45788
+2488 1663 45788
+2489 1663 45788
+2490 1663 45788
+2491 1663 45788
+2493 1663 41968
+2494 1663 41388
+2495 1663 38303
+2496 1663 13912
+2497 1663 13708
+2498 1663 36439
+2499 1663 8362
+2500 1663 8362
+2501 1663 8362
+2502 1663 8362
+2503 1663 8362
+2504 1663 8362
+2505 1663 53849
+2506 1663 58332
+2507 1663 37039
+2508 1663 24286
+2509 1663 28436
+2510 1663 57270
+2511 1663 16848
+4174 1663 27852657
+1580 1664 1
+1581 1664 1
+1626 1664 5702
+1634 1664 17712
+1635 1664 2035
+1636 1664 61855
+1681 1664 25296
+1691 1664 2378
+1697 1664 34916
+1698 1664 35595
+1699 1664 17883
+1700 1664 51623
+1701 1664 45360
+1702 1664 39316
+1960 1664 20329
+1970 1664 49610
+1981 1664 35032
+2044 1664 21856
+2045 1664 49432
+2046 1664 30691
+2047 1664 14567
+2058 1664 18851
+2311 1664 23144
+2312 1664 23144
+2313 1664 28682
+2314 1664 28682
+2316 1664 15712
+2317 1664 15712
+2318 1664 15712
+2319 1664 13069
+2320 1664 54211
+2321 1664 48689
+2322 1664 24865
+2323 1664 24865
+2324 1664 24865
+2326 1664 1222
+2327 1664 1222
+2328 1664 55400
+2329 1664 52603
+2330 1664 10509
+2331 1664 65082
+2332 1664 15100
+2333 1664 15100
+2334 1664 15100
+2335 1664 15100
+2337 1664 45748
+2338 1664 53567
+2339 1664 49726
+2340 1664 27502
+2341 1664 44417
+2342 1664 33768
+2398 1664 46974
+2399 1664 46974
+2400 1664 46974
+2401 1664 46974
+2402 1664 46974
+2404 1664 17920
+2405 1664 64635
+2406 1664 4588
+2407 1664 61153
+2408 1664 47272
+2419 1664 28120
+2476 1664 6959
+2477 1664 6959
+2478 1664 6959
+2479 1664 6959
+2480 1664 6959
+2481 1664 6959
+2482 1664 36533
+2483 1664 29800
+2484 1664 19139
+2485 1664 30290
+2486 1664 14595
+2497 1664 57469
+2509 1664 55691
+4175 1664 27852657
+1582 1665 1
+1584 1665 65520
+1587 1665 1
+1637 1665 48077
+1639 1665 17444
+1642 1665 48077
+1646 1665 17444
+1916 1665 10591
+1918 1665 54930
+1921 1665 10591
+1925 1665 54930
+1930 1665 10591
+2277 1665 51229
+2279 1665 14292
+2282 1665 51229
+2285 1665 64807
+2286 1665 13578
+2289 1665 11085
+2290 1665 19771
+2291 1665 6193
+2296 1665 64007
+2297 1665 57814
+2302 1665 3545
+2308 1665 47843
+2309 1665 32128
+2310 1665 20710
+2311 1665 19661
+2312 1665 19661
+2313 1665 57821
+2314 1665 25161
+2316 1665 7650
+2317 1665 35344
+2318 1665 35169
+2319 1665 27856
+2320 1665 46799
+2321 1665 27138
+2322 1665 5566
+2323 1665 32002
+2324 1665 27839
+2326 1665 22376
+2327 1665 36490
+2328 1665 56045
+2329 1665 36997
+2330 1665 27407
+2331 1665 269
+2332 1665 62464
+2333 1665 22988
+2334 1665 63548
+2335 1665 25746
+2337 1665 13036
+2338 1665 58172
+2339 1665 55763
+2340 1665 47301
+2341 1665 26481
+2342 1665 26212
+2398 1665 48011
+2399 1665 30178
+2400 1665 18619
+2401 1665 27055
+2402 1665 63294
+2404 1665 31639
+2405 1665 59347
+2406 1665 34193
+2407 1665 51270
+2408 1665 57945
+2419 1665 31733
+2476 1665 29622
+2477 1665 61407
+2478 1665 29721
+2479 1665 25862
+2480 1665 26894
+2481 1665 422
+2482 1665 5700
+2483 1665 22386
+2484 1665 13125
+2485 1665 29084
+2486 1665 42128
+2497 1665 13822
+2509 1665 55940
+4176 1665 27852657
+1583 1666 1
+1584 1666 1
+1587 1666 65520
+1593 1666 30031
+1596 1666 30030
+1598 1666 30031
+1602 1666 35491
+1638 1666 1
+1639 1666 1
+1642 1666 65520
+1644 1666 59824
+1645 1666 5697
+1646 1666 5698
+1654 1666 35490
+1657 1666 5460
+1674 1666 30031
+1683 1666 30031
+1684 1666 43689
+1693 1666 30031
+1694 1666 43689
+1695 1666 43689
+1917 1666 1
+1918 1666 1
+1921 1666 65520
+1923 1666 59824
+1924 1666 5697
+1925 1666 5698
+1927 1666 59824
+1929 1666 5698
+1941 1666 60060
+1948 1666 60060
+1956 1666 60060
+1963 1666 7296
+1965 1666 31398
+1972 1666 30031
+1973 1666 50968
+1974 1666 45054
+2039 1666 7279
+2040 1666 1365
+2041 1666 61425
+2278 1666 32761
+2279 1666 32761
+2281 1666 41663
+2282 1666 8902
+2284 1666 9971
+2285 1666 54482
+2286 1666 45580
+2288 1666 9971
+2289 1666 50565
+2290 1666 45580
+2293 1666 9971
+2294 1666 50565
+2295 1666 45580
+2302 1666 64837
+2303 1666 32755
+2309 1666 64837
+2310 1666 32755
+2314 1666 48796
+2317 1666 64837
+2318 1666 32755
+2322 1666 59890
+2323 1666 56133
+2324 1666 55221
+2326 1666 17238
+2327 1666 18595
+2332 1666 59890
+2333 1666 2385
+2334 1666 64947
+2335 1666 23548
+2337 1666 23890
+2398 1666 44023
+2399 1666 28493
+2400 1666 52152
+2401 1666 53007
+2402 1666 49598
+2476 1666 12286
+2477 1666 37872
+2478 1666 16972
+2479 1666 59173
+2480 1666 65122
+2481 1666 54541
+2482 1666 60060
+2483 1666 60060
+2484 1666 60060
+2485 1666 32846
+2486 1666 21336
+2497 1666 33878
+2509 1666 53044
+4177 1666 27852657
+1584 1667 1
+1639 1667 1
+1792 1667 4563
+1827 1667 41294
+1863 1667 1408
+1865 1667 62827
+1872 1667 47134
+1890 1667 51672
+1898 1667 51672
+1907 1667 51672
+1917 1667 38875
+1918 1667 25947
+1920 1667 45672
+1923 1667 52579
+1938 1667 4202
+1945 1667 52764
+1953 1667 52764
+1962 1667 38915
+1972 1667 52764
+1983 1667 38875
+1984 1667 25946
+1986 1667 45672
+1989 1667 52579
+1993 1667 15423
+2004 1667 4202
+2011 1667 52764
+2019 1667 52764
+2028 1667 38915
+2038 1667 40007
+2049 1667 52764
+2125 1667 60910
+2130 1667 32974
+2145 1667 20335
+2148 1667 20335
+2152 1667 15724
+2157 1667 7375
+2163 1667 53232
+2170 1667 53232
+2178 1667 6018
+2179 1667 30567
+2184 1667 20927
+2188 1667 31456
+2193 1667 26842
+2199 1667 37979
+2206 1667 38318
+2214 1667 50607
+2223 1667 53862
+2224 1667 49980
+2226 1667 32894
+2233 1667 35899
+2238 1667 5031
+2244 1667 64018
+2251 1667 30692
+2259 1667 832
+2268 1667 15746
+2278 1667 3438
+2279 1667 3651
+2281 1667 26771
+2284 1667 2692
+2293 1667 62672
+2299 1667 23709
+2306 1667 36086
+2314 1667 63870
+2323 1667 56184
+2333 1667 40438
+2344 1667 62493
+2345 1667 13293
+2347 1667 42442
+2350 1667 61856
+2354 1667 29025
+2365 1667 54466
+2372 1667 44165
+2380 1667 53158
+2389 1667 34436
+2399 1667 60636
+2410 1667 20198
+2422 1667 20626
+2423 1667 13833
+2425 1667 32459
+2428 1667 32459
+2432 1667 13188
+2437 1667 16585
+2443 1667 12936
+2450 1667 46681
+2458 1667 13628
+2467 1667 62278
+2477 1667 27865
+2488 1667 15272
+2500 1667 5011
+4178 1667 27852657
+1585 1668 1
+1586 1668 1
+1587 1668 1
+1640 1668 1
+1641 1668 1
+1642 1668 1
+1643 1668 1
+1644 1668 1
+1645 1668 2
+1646 1668 1
+1919 1668 1
+1920 1668 1
+1921 1668 1
+1922 1668 1
+1923 1668 1
+1924 1668 2
+1925 1668 1
+1926 1668 1
+1927 1668 1
+1928 1668 2
+1929 1668 2
+1930 1668 1
+2280 1668 32761
+2281 1668 32761
+2282 1668 32761
+2283 1668 32761
+2284 1668 32761
+2285 1668 1
+2286 1668 32761
+2287 1668 32761
+2288 1668 32761
+2289 1668 1
+2290 1668 1
+2291 1668 32761
+2292 1668 32761
+2293 1668 32761
+2294 1668 1
+2295 1668 1
+2296 1668 1
+2297 1668 32761
+2476 1668 24572
+2477 1668 24572
+2478 1668 49144
+2479 1668 49143
+2480 1668 49142
+2481 1668 49141
+2509 1668 8190
+4179 1668 27852657
+1586 1669 1
+1587 1669 1
+1641 1669 1
+1642 1669 1
+1644 1669 5698
+1645 1669 59824
+1646 1669 59823
+1920 1669 1
+1921 1669 1
+1923 1669 5698
+1924 1669 59824
+1925 1669 59823
+1927 1669 5698
+1929 1669 59823
+2281 1669 56619
+2282 1669 56619
+2284 1669 22790
+2285 1669 11039
+2286 1669 19941
+2288 1669 22790
+2289 1669 14956
+2290 1669 19941
+2293 1669 22790
+2294 1669 14956
+2295 1669 19941
+2477 1669 53415
+2478 1669 30803
+2479 1669 36321
+4180 1669 27852657
+1587 1670 1
+1642 1670 1
+1646 1670 65520
+1921 1670 41694
+1987 1670 41693
+1991 1670 1
+1996 1670 65520
+2227 1670 59561
+2282 1670 19355
+2286 1670 34246
+2297 1670 58612
+2348 1670 56584
+2352 1670 27549
+2355 1670 58362
+2356 1670 6044
+2357 1670 44016
+2375 1670 50667
+2383 1670 22320
+2390 1670 13030
+2392 1670 57016
+2395 1670 51140
+2396 1670 51140
+2397 1670 51140
+2398 1670 14328
+2399 1670 171
+2400 1670 3030
+2401 1670 32348
+2404 1670 20010
+2405 1670 21076
+2406 1670 21076
+2407 1670 6695
+2408 1670 21076
+2409 1670 14328
+2410 1670 171
+2411 1670 3030
+2412 1670 32348
+2413 1670 40511
+2415 1670 20010
+2416 1670 21076
+2417 1670 21076
+2418 1670 6695
+2419 1670 42152
+2420 1670 21076
+2422 1670 33672
+2423 1670 33672
+2424 1670 13819
+2425 1670 12724
+2426 1670 54997
+2427 1670 5625
+2428 1670 34734
+2429 1670 38665
+2430 1670 49189
+2431 1670 5625
+2432 1670 34734
+2433 1670 38761
+2434 1670 15038
+2435 1670 31370
+2436 1670 5625
+2437 1670 34734
+2438 1670 37329
+2439 1670 6699
+2440 1670 21587
+2441 1670 55738
+2444 1670 31176
+2445 1670 29486
+2446 1670 40942
+2447 1670 46723
+2451 1670 9436
+2452 1670 7746
+2453 1670 19202
+2454 1670 49896
+2455 1670 24278
+2456 1670 24278
+2457 1670 38061
+2458 1670 34747
+2460 1670 62297
+2461 1670 12693
+2462 1670 58745
+2463 1670 34831
+2464 1670 1922
+2465 1670 43165
+2466 1670 64771
+2467 1670 61457
+2468 1670 12313
+2470 1670 20990
+2471 1670 13943
+2472 1670 1088
+2473 1670 4900
+2474 1670 47384
+2475 1670 4219
+2476 1670 40899
+2477 1670 1468
+2478 1670 63524
+2479 1670 15746
+2481 1670 55239
+2482 1670 55627
+2483 1670 10482
+2484 1670 48111
+2485 1670 54919
+2486 1670 50700
+2487 1670 34806
+2488 1670 40117
+2489 1670 8221
+2490 1670 12523
+2491 1670 606
+2493 1670 17224
+2494 1670 45327
+2495 1670 62436
+2496 1670 64723
+2497 1670 59846
+2498 1670 9146
+2499 1670 21503
+2500 1670 37146
+2501 1670 5967
+2502 1670 7571
+2503 1670 44150
+2504 1670 16576
+2505 1670 63233
+2506 1670 63822
+2507 1670 65148
+2508 1670 38880
+2509 1670 55442
+2510 1670 64249
+2511 1670 14260
+4181 1670 27852657
+1588 1671 1
+1873 1671 22779
+1874 1671 45350
+1875 1671 45350
+1908 1671 38372
+1910 1671 9264
+1913 1671 1706
+1914 1671 1706
+1915 1671 1706
+1961 1671 37144
+1962 1671 37144
+1963 1671 9995
+1964 1671 34496
+1967 1671 33868
+1968 1671 38953
+1969 1671 38953
+1970 1671 40659
+1980 1671 38953
+2027 1671 37144
+2028 1671 37144
+2029 1671 9995
+2030 1671 34496
+2031 1671 34496
+2033 1671 33868
+2034 1671 38953
+2035 1671 38953
+2036 1671 40659
+2046 1671 12385
+2057 1671 38953
+2223 1671 41137
+2224 1671 41137
+2225 1671 53215
+2226 1671 30249
+2227 1671 54633
+2228 1671 50788
+2229 1671 6972
+2230 1671 58937
+2231 1671 4304
+2232 1671 50788
+2233 1671 6972
+2234 1671 4726
+2235 1671 49342
+2236 1671 45038
+2237 1671 50788
+2238 1671 6972
+2239 1671 22522
+2240 1671 60549
+2241 1671 42375
+2242 1671 62858
+2245 1671 13377
+2246 1671 60002
+2247 1671 25587
+2248 1671 18255
+2252 1671 10898
+2253 1671 57523
+2254 1671 23108
+2255 1671 46882
+2256 1671 6613
+2257 1671 6613
+2258 1671 9358
+2259 1671 14085
+2261 1671 16507
+2262 1671 47613
+2263 1671 52491
+2264 1671 24
+2265 1671 31267
+2266 1671 24654
+2267 1671 17025
+2268 1671 21752
+2269 1671 25444
+2271 1671 32582
+2272 1671 50837
+2273 1671 17820
+2274 1671 4260
+2275 1671 10542
+2276 1671 51409
+2322 1671 8147
+2323 1671 12874
+2324 1671 16566
+2325 1671 45928
+2327 1671 25273
+2328 1671 24465
+2329 1671 14066
+2330 1671 55665
+2331 1671 32611
+2341 1671 46723
+2388 1671 20016
+2389 1671 17581
+2390 1671 16496
+2391 1671 61481
+2392 1671 38998
+2394 1671 40095
+2395 1671 19771
+2396 1671 19196
+2397 1671 22079
+2407 1671 32341
+2418 1671 51139
+2466 1671 48826
+2467 1671 25641
+2468 1671 12409
+2469 1671 8132
+2470 1671 22317
+2471 1671 11650
+2472 1671 16115
+2473 1671 54229
+2474 1671 60719
+2475 1671 47117
+2485 1671 30174
+2496 1671 42130
+2508 1671 3725
+4182 1671 27852657
+1589 1672 1
+1873 1672 41196
+1874 1672 14157
+1875 1672 14157
+1908 1672 13882
+1910 1672 16743
+1913 1672 12207
+1914 1672 12207
+1915 1672 12207
+1961 1672 48629
+1962 1672 48629
+1963 1672 62511
+1964 1672 62955
+1967 1672 25649
+1968 1672 28198
+1969 1672 28198
+1970 1672 40405
+1980 1672 28198
+2027 1672 48629
+2028 1672 48629
+2029 1672 62511
+2030 1672 62955
+2031 1672 62955
+2033 1672 25649
+2034 1672 28198
+2035 1672 28198
+2036 1672 40405
+2046 1672 56396
+2057 1672 28198
+2223 1672 16359
+2224 1672 16359
+2225 1672 40601
+2226 1672 1351
+2227 1672 50513
+2228 1672 44698
+2229 1672 57288
+2230 1672 36433
+2231 1672 51441
+2232 1672 44698
+2233 1672 57288
+2234 1672 30162
+2235 1672 23457
+2236 1672 37537
+2237 1672 44698
+2238 1672 57288
+2239 1672 40513
+2240 1672 23109
+2241 1672 62553
+2242 1672 25016
+2245 1672 28314
+2246 1672 17927
+2247 1672 54922
+2248 1672 31571
+2252 1672 32045
+2253 1672 21658
+2254 1672 58653
+2255 1672 6776
+2256 1672 53348
+2257 1672 53348
+2258 1672 58203
+2259 1672 30444
+2261 1672 59390
+2262 1672 30864
+2263 1672 34121
+2264 1672 42649
+2265 1672 14604
+2266 1672 26777
+2267 1672 24383
+2268 1672 62145
+2269 1672 38102
+2271 1672 6308
+2272 1672 37879
+2273 1672 53000
+2274 1672 2522
+2275 1672 43708
+2276 1672 16931
+2322 1672 32908
+2323 1672 5149
+2324 1672 46627
+2325 1672 7074
+2327 1672 26559
+2328 1672 10331
+2329 1672 26907
+2330 1672 23265
+2331 1672 44192
+2341 1672 27261
+2388 1672 13142
+2389 1672 31350
+2390 1672 53948
+2391 1672 64171
+2392 1672 6475
+2394 1672 53729
+2395 1672 28285
+2396 1672 52092
+2397 1672 56475
+2407 1672 39418
+2418 1672 12157
+2466 1672 50684
+2467 1672 24531
+2468 1672 50051
+2469 1672 39983
+2470 1672 59732
+2471 1672 15260
+2472 1672 39840
+2473 1672 15832
+2474 1672 55357
+2475 1672 44905
+2485 1672 7897
+2496 1672 24375
+2508 1672 28684
+4183 1672 27852657
+1590 1673 1
+1591 1673 1
+1873 1673 34029
+1874 1673 18499
+1875 1673 18499
+1908 1673 56084
+1910 1673 11797
+1913 1673 23546
+1914 1673 23546
+1915 1673 23546
+1961 1673 51091
+1962 1673 51091
+1963 1673 41654
+1964 1673 24145
+1967 1673 63639
+1968 1673 42722
+1969 1673 42722
+1970 1673 747
+1980 1673 42722
+2027 1673 51091
+2028 1673 51091
+2029 1673 41654
+2030 1673 24145
+2031 1673 24145
+2033 1673 63639
+2034 1673 42722
+2035 1673 42722
+2036 1673 747
+2046 1673 19923
+2057 1673 42722
+2223 1673 19165
+2224 1673 19165
+2225 1673 12017
+2226 1673 28754
+2227 1673 9589
+2228 1673 56786
+2229 1673 62265
+2230 1673 34774
+2231 1673 25185
+2232 1673 56786
+2233 1673 62265
+2234 1673 12523
+2235 1673 15557
+2236 1673 55893
+2237 1673 56786
+2238 1673 62265
+2239 1673 54281
+2240 1673 35352
+2241 1673 17610
+2242 1673 27238
+2245 1673 57964
+2246 1673 179
+2247 1673 58957
+2248 1673 46480
+2252 1673 50019
+2253 1673 57755
+2254 1673 51012
+2255 1673 31792
+2256 1673 17071
+2257 1673 17071
+2258 1673 14477
+2259 1673 16144
+2261 1673 31495
+2262 1673 24752
+2263 1673 13268
+2264 1673 60629
+2265 1673 36881
+2266 1673 19810
+2267 1673 35111
+2268 1673 36778
+2269 1673 57151
+2271 1673 20004
+2272 1673 963
+2273 1673 36866
+2274 1673 48964
+2275 1673 13382
+2276 1673 59093
+2322 1673 53836
+2323 1673 55503
+2324 1673 10355
+2325 1673 1422
+2327 1673 13759
+2328 1673 25574
+2329 1673 59485
+2330 1673 21511
+2331 1673 25013
+2341 1673 31441
+2388 1673 22620
+2389 1673 23580
+2390 1673 64154
+2391 1673 21899
+2392 1673 45584
+2394 1673 50188
+2395 1673 21393
+2396 1673 62156
+2397 1673 31433
+2407 1673 14527
+2418 1673 48607
+2466 1673 45829
+2467 1673 30121
+2468 1673 26358
+2469 1673 19855
+2470 1673 38241
+2471 1673 59219
+2472 1673 2196
+2473 1673 8451
+2474 1673 17833
+2475 1673 38492
+2485 1673 8507
+2496 1673 61157
+2508 1673 35982
+4184 1673 27852657
+1591 1674 1
+2479 1674 65520
+4185 1674 27852657
+1592 1675 1
+1593 1675 1
+1596 1675 1
+1597 1675 1
+1598 1675 1
+1602 1675 65520
+1654 1675 65520
+1657 1675 65519
+1684 1675 16361
+1694 1675 16361
+1695 1675 16361
+1941 1675 2
+1948 1675 2
+1956 1675 2
+1963 1675 43644
+1965 1675 32755
+1973 1675 60047
+1974 1675 16367
+2039 1675 43686
+2040 1675 6
+2041 1675 8
+2302 1675 49144
+2303 1675 12
+2309 1675 49144
+2310 1675 12
+2317 1675 49144
+2318 1675 12
+2322 1675 61427
+2323 1675 61427
+2324 1675 39595
+2326 1675 4085
+2327 1675 36863
+2332 1675 36855
+2333 1675 36855
+2334 1675 35497
+2335 1675 24581
+2337 1675 20470
+2398 1675 8183
+2399 1675 8183
+2400 1675 51869
+2401 1675 35490
+2402 1675 19102
+2476 1675 12285
+2477 1675 12285
+2478 1675 32759
+2479 1675 15014
+2480 1675 39585
+2481 1675 15017
+2482 1675 2
+2483 1675 2
+2484 1675 2
+2485 1675 59378
+2486 1675 39911
+2497 1675 16365
+2509 1675 36009
+4186 1675 27852657
+1593 1676 1
+1657 1676 43000
+1928 1676 63048
+1929 1676 64651
+1930 1676 64651
+1948 1676 25004
+1956 1676 64940
+1962 1676 23552
+1963 1676 30927
+1965 1676 61894
+1968 1676 6979
+1969 1676 6979
+1970 1676 6979
+1971 1676 36754
+1972 1676 22264
+1973 1676 25769
+1974 1676 31734
+1977 1676 32671
+1978 1676 47246
+1979 1676 47246
+1980 1676 54225
+1981 1676 47246
+2037 1676 36754
+2038 1676 22264
+2039 1676 25769
+2040 1676 31734
+2041 1676 59183
+2043 1676 32671
+2044 1676 47246
+2045 1676 47246
+2046 1676 54225
+2047 1676 28971
+2058 1676 47246
+2278 1676 20906
+2279 1676 20906
+2280 1676 20560
+2281 1676 5452
+2282 1676 50067
+2283 1676 37311
+2284 1676 8549
+2285 1676 45513
+2286 1676 60967
+2287 1676 37311
+2288 1676 8549
+2289 1676 60453
+2290 1676 35649
+2291 1676 40203
+2292 1676 3989
+2293 1676 55845
+2294 1676 8429
+2295 1676 51863
+2296 1676 7489
+2297 1676 32807
+2300 1676 64456
+2301 1676 57717
+2302 1676 11741
+2303 1676 9451
+2307 1676 22065
+2308 1676 15326
+2309 1676 34871
+2310 1676 19939
+2311 1676 15544
+2312 1676 15544
+2313 1676 30876
+2314 1676 11104
+2316 1676 7106
+2317 1676 61999
+2318 1676 13647
+2319 1676 53827
+2320 1676 18695
+2321 1676 3151
+2322 1676 14800
+2323 1676 32236
+2324 1676 2
+2326 1676 60304
+2327 1676 62607
+2328 1676 1084
+2329 1676 35848
+2330 1676 61469
+2331 1676 58318
+2332 1676 45154
+2333 1676 28429
+2334 1676 30782
+2335 1676 16957
+2337 1676 52986
+2338 1676 547
+2339 1676 57212
+2340 1676 55375
+2341 1676 63060
+2342 1676 4742
+2398 1676 20857
+2399 1676 40611
+2400 1676 16616
+2401 1676 54779
+2402 1676 40472
+2404 1676 29604
+2405 1676 7489
+2406 1676 3151
+2407 1676 56139
+2408 1676 43941
+2419 1676 39199
+2476 1676 7483
+2477 1676 550
+2478 1676 27256
+2479 1676 44963
+2480 1676 42678
+2481 1676 45213
+2482 1676 11460
+2483 1676 17532
+2484 1676 10190
+2485 1676 63886
+2486 1676 34955
+2497 1676 29912
+2509 1676 49568
+4187 1676 27852657
+1594 1677 1
+1599 1677 1
+1654 1677 1
+1926 1677 65519
+1927 1677 65519
+1928 1677 65519
+1929 1677 65519
+1930 1677 65519
+2287 1677 21840
+2288 1677 21840
+2289 1677 21840
+2290 1677 21840
+2291 1677 21840
+2292 1677 21840
+2293 1677 21840
+2294 1677 21840
+2295 1677 21840
+2296 1677 43680
+2297 1677 21840
+2324 1677 43681
+2334 1677 43681
+2335 1677 54601
+2400 1677 43681
+2401 1677 54601
+2402 1677 32760
+2476 1677 35490
+2477 1677 35490
+2478 1677 47776
+2480 1677 40949
+2481 1677 40951
+2509 1677 19793
+4188 1677 27852657
+1595 1678 1
+2480 1678 65520
+4189 1678 27852657
+1596 1679 1
+1602 1679 65520
+1657 1679 1497
+1928 1679 684
+1929 1679 59789
+1930 1679 59789
+1948 1679 52908
+1956 1679 61210
+1962 1679 54280
+1963 1679 53509
+1965 1679 8622
+1968 1679 20707
+1969 1679 20707
+1970 1679 20707
+1971 1679 33689
+1972 1679 34913
+1973 1679 61526
+1974 1679 11010
+1977 1679 18003
+1978 1679 58902
+1979 1679 58902
+1980 1679 14088
+1981 1679 58902
+2037 1679 33689
+2038 1679 34913
+2039 1679 61526
+2040 1679 11010
+2041 1679 19922
+2043 1679 18003
+2044 1679 58902
+2045 1679 58902
+2046 1679 14088
+2047 1679 52283
+2058 1679 58902
+2278 1679 23340
+2279 1679 23340
+2280 1679 49105
+2281 1679 12189
+2282 1679 54370
+2283 1679 28066
+2284 1679 31922
+2285 1679 3934
+2286 1679 15085
+2287 1679 28066
+2288 1679 31922
+2289 1679 9725
+2290 1679 5267
+2291 1679 55703
+2292 1679 56763
+2293 1679 19367
+2294 1679 61284
+2295 1679 121
+2296 1679 33114
+2297 1679 42932
+2300 1679 33194
+2301 1679 12774
+2302 1679 46524
+2303 1679 43732
+2307 1679 14177
+2308 1679 59278
+2309 1679 27507
+2310 1679 474
+2311 1679 29924
+2312 1679 29924
+2313 1679 41717
+2314 1679 20776
+2316 1679 58375
+2317 1679 43153
+2318 1679 6239
+2319 1679 64504
+2320 1679 62335
+2321 1679 32411
+2322 1679 30882
+2323 1679 6009
+2324 1679 51127
+2326 1679 15988
+2327 1679 13996
+2328 1679 56209
+2329 1679 37333
+2330 1679 58901
+2331 1679 26490
+2332 1679 51558
+2333 1679 52645
+2334 1679 39228
+2335 1679 779
+2337 1679 53043
+2338 1679 33185
+2339 1679 64902
+2340 1679 3948
+2341 1679 33998
+2342 1679 7508
+2398 1679 28911
+2399 1679 34582
+2400 1679 7263
+2401 1679 62747
+2402 1679 39345
+2404 1679 28133
+2405 1679 47027
+2406 1679 11743
+2407 1679 17407
+2408 1679 29888
+2419 1679 22380
+2476 1679 13828
+2477 1679 11520
+2478 1679 60725
+2479 1679 25170
+2480 1679 65298
+2481 1679 27675
+2482 1679 16957
+2483 1679 39030
+2484 1679 49849
+2485 1679 9816
+2486 1679 19681
+2497 1679 34007
+2509 1679 63918
+4190 1679 27852657
+1597 1680 1
+1598 1680 1
+1602 1680 1
+1652 1680 1
+1653 1680 1
+1657 1680 1
+2322 1680 49142
+2323 1680 49142
+2327 1680 32761
+2332 1680 49142
+2333 1680 49142
+2337 1680 32761
+2388 1680 2
+2389 1680 2
+2392 1680 2
+2398 1680 49142
+2399 1680 49142
+2466 1680 1
+2467 1680 1
+2470 1680 1
+2471 1680 2
+2476 1680 8191
+2477 1680 8191
+2481 1680 2
+2485 1680 16380
+2486 1680 16380
+2497 1680 16380
+2508 1680 32763
+2509 1680 26620
+2510 1680 2
+2511 1680 1
+4191 1680 27852657
+1598 1681 1
+1657 1681 15228
+1928 1681 43314
+1929 1681 26838
+1930 1681 26838
+1948 1681 11497
+1956 1681 48360
+1962 1681 8626
+1963 1681 59094
+1965 1681 50549
+1968 1681 62994
+1969 1681 62994
+1970 1681 62994
+1971 1681 64547
+1972 1681 10956
+1973 1681 42790
+1974 1681 63466
+1977 1681 30653
+1978 1681 60712
+1979 1681 60712
+1980 1681 58185
+1981 1681 60712
+2037 1681 64547
+2038 1681 10956
+2039 1681 42790
+2040 1681 63466
+2041 1681 48392
+2043 1681 30653
+2044 1681 60712
+2045 1681 60712
+2046 1681 58185
+2047 1681 55903
+2058 1681 60712
+2278 1681 4809
+2279 1681 4809
+2280 1681 47592
+2281 1681 22589
+2282 1681 17780
+2283 1681 2566
+2284 1681 41247
+2285 1681 42056
+2286 1681 24276
+2287 1681 2566
+2288 1681 41247
+2289 1681 43083
+2290 1681 29878
+2291 1681 5602
+2292 1681 7191
+2293 1681 6506
+2294 1681 52676
+2295 1681 31701
+2296 1681 63088
+2297 1681 57486
+2300 1681 52094
+2301 1681 28531
+2302 1681 22682
+2303 1681 49550
+2307 1681 19079
+2308 1681 61037
+2309 1681 55188
+2310 1681 47892
+2311 1681 62581
+2312 1681 62581
+2313 1681 4358
+2314 1681 46061
+2316 1681 49531
+2317 1681 20587
+2318 1681 47239
+2319 1681 5433
+2320 1681 25489
+2321 1681 28429
+2322 1681 18569
+2323 1681 58403
+2324 1681 17365
+2326 1681 49737
+2327 1681 1863
+2328 1681 52963
+2329 1681 8673
+2330 1681 43540
+2331 1681 15111
+2332 1681 27217
+2333 1681 14263
+2334 1681 58512
+2335 1681 8280
+2337 1681 19972
+2338 1681 40318
+2339 1681 34966
+2340 1681 47978
+2341 1681 35018
+2342 1681 19907
+2398 1681 51625
+2399 1681 52637
+2400 1681 2536
+2401 1681 15772
+2402 1681 59822
+2404 1681 29063
+2405 1681 34241
+2406 1681 39258
+2407 1681 19928
+2408 1681 7425
+2419 1681 53039
+2476 1681 37342
+2477 1681 22988
+2478 1681 35680
+2479 1681 25695
+2480 1681 54973
+2481 1681 42837
+2482 1681 55891
+2483 1681 64693
+2484 1681 45746
+2485 1681 40038
+2486 1681 59355
+2497 1681 5783
+2509 1681 16280
+4192 1681 27852657
+1599 1682 1
+1654 1682 1
+1655 1682 1
+2324 1682 49142
+2334 1682 49142
+2335 1682 49142
+2390 1682 2
+2400 1682 49142
+2401 1682 49142
+2468 1682 1
+2478 1682 8191
+2479 1682 8191
+2481 1682 8191
+2509 1682 13310
+2510 1682 49142
+2511 1682 8191
+4193 1682 27852657
+1600 1683 1
+1871 1683 1
+1872 1683 1
+1873 1683 1
+1874 1683 1
+1875 1683 1
+2232 1683 54601
+2233 1683 54601
+2234 1683 54601
+2235 1683 54601
+2236 1683 54601
+2237 1683 54601
+2238 1683 54601
+2239 1683 54601
+2240 1683 54601
+2241 1683 43681
+2242 1683 54601
+2325 1683 54601
+2391 1683 54601
+2392 1683 32761
+2466 1683 47776
+2467 1683 47776
+2468 1683 47776
+2469 1683 30031
+2470 1683 42317
+2471 1683 42316
+2508 1683 23888
+4194 1683 27852657
+1601 1684 1
+1602 1684 1
+1657 1684 1
+1684 1684 32766
+1694 1684 32766
+1695 1684 32766
+1941 1684 65520
+1948 1684 65520
+1956 1684 65520
+1963 1684 10
+1965 1684 2
+1973 1684 32764
+1974 1684 32764
+2039 1684 65519
+2040 1684 65519
+2041 1684 65518
+2302 1684 40949
+2303 1684 65515
+2309 1684 40949
+2310 1684 65515
+2317 1684 40949
+2318 1684 65515
+2324 1684 16377
+2326 1684 8195
+2327 1684 57327
+2334 1684 57328
+2335 1684 57328
+2337 1684 8191
+2400 1684 8188
+2401 1684 8188
+2402 1684 16382
+2478 1684 53236
+2479 1684 53236
+2480 1684 40951
+2481 1684 53235
+2482 1684 65520
+2483 1684 65520
+2484 1684 65520
+2485 1684 12285
+2486 1684 14337
+2497 1684 32763
+2509 1684 19446
+4195 1684 27852657
+1602 1685 1
+1657 1685 1
+2392 1685 30183
+2395 1685 14511
+2396 1685 14511
+2397 1685 14511
+2398 1685 57995
+2399 1685 57995
+2400 1685 57995
+2401 1685 57995
+2404 1685 16983
+2405 1685 46562
+2406 1685 46562
+2407 1685 61073
+2408 1685 46562
+2409 1685 57995
+2410 1685 57995
+2411 1685 57995
+2412 1685 57995
+2413 1685 57995
+2415 1685 16983
+2416 1685 46562
+2417 1685 46562
+2418 1685 61073
+2419 1685 27603
+2420 1685 46562
+2451 1685 38422
+2452 1685 38422
+2453 1685 38422
+2454 1685 38422
+2457 1685 40352
+2458 1685 40352
+2460 1685 44835
+2461 1685 44835
+2462 1685 44835
+2464 1685 904
+2465 1685 904
+2466 1685 456
+2467 1685 456
+2468 1685 456
+2470 1685 56175
+2471 1685 56176
+2473 1685 65209
+2474 1685 8661
+2475 1685 7757
+2476 1685 6483
+2477 1685 6483
+2478 1685 6483
+2479 1685 6483
+2481 1685 37689
+2482 1685 36377
+2483 1685 14230
+2484 1685 32729
+2485 1685 44327
+2486 1685 36570
+2487 1685 18518
+2488 1685 18518
+2489 1685 18518
+2490 1685 18518
+2491 1685 18518
+2493 1685 3027
+2494 1685 18768
+2495 1685 49679
+2496 1685 53573
+2497 1685 58975
+2498 1685 22405
+2499 1685 46534
+2500 1685 46534
+2501 1685 46534
+2502 1685 46534
+2503 1685 46534
+2504 1685 46534
+2506 1685 41361
+2507 1685 49417
+2508 1685 7958
+2509 1685 29015
+2510 1685 43525
+2511 1685 45390
+4196 1685 27852657
+1603 1686 1
+2485 1686 65520
+4197 1686 27852657
+1604 1687 1
+1605 1687 1
+1606 1687 1
+1607 1687 1
+1608 1687 1
+1612 1687 1
+1613 1687 1
+1614 1687 1
+1615 1687 1
+1621 1687 1
+1622 1687 1
+1623 1687 1
+1631 1687 1
+1632 1687 1
+1687 1687 1
+2328 1687 32761
+2329 1687 32761
+2330 1687 32761
+2331 1687 32761
+2341 1687 32761
+2407 1687 32761
+2485 1687 24573
+4198 1687 27852657
+1605 1688 1
+1629 1688 1
+1660 1688 1
+1668 1688 65520
+1684 1688 2
+1694 1688 1
+1939 1688 1
+1941 1688 32759
+1947 1688 65520
+1948 1688 32758
+1956 1688 32759
+1963 1688 1
+1965 1688 32760
+1973 1688 1
+1974 1688 32759
+2040 1688 32759
+2041 1688 65518
+2300 1688 8195
+2301 1688 12289
+2302 1688 40952
+2303 1688 40952
+2307 1688 40955
+2308 1688 45049
+2309 1688 8191
+2310 1688 8191
+2316 1688 23209
+2317 1688 51872
+2318 1688 51872
+2324 1688 16378
+2326 1688 40952
+2327 1688 40952
+2334 1688 16378
+2335 1688 12280
+2337 1688 40952
+2400 1688 45044
+2401 1688 28663
+2402 1688 40954
+2478 1688 63473
+2479 1688 38903
+2480 1688 53236
+2481 1688 53236
+2482 1688 32762
+2483 1688 8190
+2484 1688 20476
+2485 1688 2732
+2486 1688 2732
+2497 1688 29347
+2509 1688 59382
+4199 1688 27852657
+1606 1689 1
+1613 1689 1
+1685 1689 1
+1885 1689 1
+1886 1689 32762
+1892 1689 1
+1893 1689 32762
+1901 1689 32761
+1908 1689 1
+1910 1689 32760
+1963 1689 1
+1964 1689 32764
+2029 1689 1
+2030 1689 32763
+2031 1689 3
+2246 1689 61427
+2247 1689 8192
+2248 1689 8192
+2253 1689 61427
+2254 1689 8192
+2255 1689 8192
+2261 1689 17746
+2262 1689 30032
+2263 1689 30032
+2269 1689 24572
+2271 1689 40952
+2272 1689 40952
+2324 1689 24572
+2325 1689 28670
+2327 1689 40952
+2390 1689 61427
+2391 1689 12287
+2392 1689 8190
+2468 1689 38903
+2469 1689 63473
+2470 1689 36855
+2471 1689 36855
+2472 1689 45047
+2473 1689 45047
+2474 1689 32761
+2475 1689 50506
+2485 1689 50507
+2496 1689 23892
+2508 1689 5
+4200 1689 27852657
+1607 1690 1
+1608 1690 1
+1670 1690 65520
+1679 1690 19780
+1680 1690 19780
+1681 1690 19780
+1688 1690 19780
+1689 1690 19780
+1690 1690 39560
+1691 1690 19780
+1698 1690 19780
+1699 1690 19780
+1700 1690 39560
+1701 1690 39560
+1702 1690 19780
+1950 1690 40987
+1951 1690 40987
+1958 1690 60767
+1959 1690 36233
+1960 1690 60767
+1965 1690 46788
+1967 1690 60767
+1968 1690 16453
+1969 1690 36233
+1970 1690 40987
+1977 1690 49640
+1978 1690 5326
+1979 1690 44886
+1980 1690 25106
+1981 1690 49640
+2043 1690 29860
+2044 1690 51067
+2045 1690 5326
+2046 1690 51067
+2047 1690 39940
+2058 1690 10080
+2311 1690 14213
+2312 1690 14213
+2319 1690 14835
+2320 1690 29051
+2321 1690 14838
+2326 1690 26278
+2327 1690 26278
+2328 1690 43816
+2329 1690 58340
+2330 1690 35474
+2331 1690 20636
+2337 1690 48118
+2338 1690 10844
+2339 1690 25368
+2340 1690 45461
+2341 1690 51262
+2342 1690 30626
+2404 1690 34649
+2405 1690 53686
+2406 1690 8258
+2407 1690 4791
+2408 1690 29921
+2419 1690 64816
+2482 1690 27713
+2483 1690 24353
+2484 1690 18869
+2485 1690 43492
+2486 1690 34372
+2497 1690 64400
+2509 1690 41957
+4201 1690 27852657
+1608 1691 1
+1965 1691 17472
+1968 1691 41439
+1969 1691 41439
+1970 1691 41439
+1971 1691 17998
+1972 1691 17998
+1973 1691 17998
+1974 1691 17998
+1977 1691 50846
+1978 1691 30270
+1979 1691 30270
+1980 1691 6188
+1981 1691 30270
+2037 1691 17998
+2038 1691 17998
+2039 1691 17998
+2040 1691 17998
+2041 1691 17998
+2043 1691 50846
+2044 1691 30270
+2045 1691 30270
+2046 1691 6188
+2047 1691 60540
+2058 1691 30270
+2303 1691 56197
+2307 1691 12146
+2308 1691 12146
+2309 1691 12146
+2310 1691 60256
+2311 1691 35444
+2312 1691 35444
+2313 1691 53713
+2314 1691 53713
+2316 1691 22699
+2317 1691 22699
+2318 1691 37067
+2319 1691 47619
+2320 1691 37753
+2321 1691 2309
+2322 1691 9583
+2323 1691 9583
+2324 1691 9583
+2326 1691 4580
+2327 1691 31075
+2328 1691 63592
+2329 1691 49854
+2330 1691 22351
+2331 1691 20042
+2332 1691 15977
+2333 1691 15977
+2334 1691 15977
+2335 1691 15977
+2337 1691 20658
+2338 1691 51983
+2339 1691 63537
+2340 1691 56480
+2341 1691 47930
+2342 1691 27888
+2398 1691 47476
+2399 1691 47476
+2400 1691 47476
+2401 1691 47476
+2402 1691 47476
+2404 1691 42475
+2405 1691 57959
+2406 1691 21498
+2407 1691 7475
+2408 1691 21898
+2419 1691 59531
+2476 1691 55749
+2477 1691 55749
+2478 1691 55749
+2479 1691 55749
+2480 1691 55749
+2481 1691 57303
+2482 1691 26529
+2483 1691 13041
+2484 1691 25785
+2485 1691 3172
+2486 1691 45806
+2497 1691 11260
+2509 1691 40362
+4202 1691 27852657
+1609 1692 1
+1617 1692 65520
+1626 1692 1
+1634 1692 25194
+1635 1692 49194
+1636 1692 49193
+1664 1692 7799
+1672 1692 57722
+1681 1692 7799
+1691 1692 44898
+1698 1692 270
+1699 1692 33706
+1700 1692 63656
+1701 1692 19475
+1702 1692 23770
+1943 1692 25243
+1951 1692 40278
+1960 1692 25243
+1970 1692 34381
+1981 1692 11888
+2045 1692 44516
+2046 1692 51766
+2047 1692 47867
+2058 1692 59749
+2304 1692 44736
+2311 1692 14447
+2312 1692 35232
+2313 1692 42720
+2314 1692 42720
+2316 1692 5103
+2317 1692 5103
+2318 1692 5103
+2319 1692 19757
+2320 1692 46798
+2321 1692 11566
+2322 1692 7059
+2323 1692 7059
+2324 1692 7059
+2326 1692 25712
+2327 1692 25712
+2328 1692 26472
+2329 1692 12379
+2330 1692 29683
+2331 1692 64629
+2332 1692 1072
+2333 1692 1072
+2334 1692 1072
+2335 1692 1072
+2337 1692 40315
+2338 1692 31177
+2339 1692 59146
+2340 1692 24606
+2341 1692 40750
+2342 1692 900
+2398 1692 47299
+2399 1692 47299
+2400 1692 47299
+2401 1692 47299
+2402 1692 47299
+2404 1692 857
+2405 1692 53867
+2406 1692 30710
+2407 1692 6488
+2408 1692 64549
+2419 1692 48406
+2476 1692 31354
+2477 1692 31354
+2478 1692 31354
+2479 1692 31354
+2480 1692 31354
+2481 1692 31354
+2482 1692 27680
+2483 1692 34326
+2484 1692 23519
+2485 1692 25789
+2486 1692 10321
+2497 1692 40165
+2509 1692 23344
+4203 1692 27852657
+1610 1693 1
+1618 1693 1
+1619 1693 1
+1627 1693 1
+1628 1693 1
+1629 1693 1
+1682 1693 1
+1683 1693 1
+1684 1693 1
+1685 1693 1
+1961 1693 1
+1962 1693 1
+1963 1693 1
+1964 1693 1
+1965 1693 1
+2322 1693 32761
+2323 1693 32761
+2324 1693 32761
+2325 1693 32761
+2326 1693 32761
+2327 1693 32761
+2485 1693 24573
+4204 1693 27852657
+1611 1694 1
+2485 1694 65520
+4205 1694 27852657
+1612 1695 1
+2311 1695 58226
+2312 1695 58226
+2313 1695 50318
+2314 1695 50318
+2316 1695 22624
+2317 1695 22624
+2318 1695 22624
+2319 1695 9520
+2320 1695 40147
+2321 1695 47442
+2322 1695 46532
+2323 1695 46532
+2324 1695 46532
+2326 1695 39237
+2327 1695 39237
+2328 1695 41565
+2329 1695 12173
+2330 1695 1511
+2331 1695 19590
+2332 1695 52158
+2333 1695 52158
+2334 1695 52158
+2335 1695 52158
+2337 1695 51084
+2338 1695 59962
+2339 1695 14545
+2340 1695 19350
+2341 1695 16768
+2342 1695 62699
+2398 1695 54420
+2399 1695 54420
+2400 1695 54420
+2401 1695 54420
+2402 1695 54420
+2404 1695 27048
+2405 1695 59216
+2406 1695 43674
+2407 1695 34128
+2408 1695 63812
+2419 1695 1113
+2476 1695 27587
+2477 1695 27587
+2478 1695 27587
+2479 1695 27587
+2480 1695 27587
+2481 1695 27587
+2482 1695 27102
+2483 1695 43546
+2484 1695 33156
+2485 1695 56060
+2486 1695 35356
+2497 1695 7864
+2509 1695 45047
+4206 1695 27852657
+1613 1696 1
+1892 1696 56692
+1893 1696 14698
+1901 1696 45916
+1908 1696 36654
+1910 1696 13369
+1913 1696 40538
+1914 1696 40538
+1915 1696 40538
+1961 1696 17300
+1962 1696 17300
+1963 1696 53954
+1964 1696 10445
+1967 1696 23850
+1968 1696 8268
+1969 1696 8268
+1970 1696 48806
+1980 1696 8268
+2027 1696 17300
+2028 1696 17300
+2029 1696 53954
+2030 1696 10445
+2031 1696 30091
+2033 1696 23850
+2034 1696 8268
+2035 1696 8268
+2036 1696 48806
+2046 1696 16536
+2057 1696 8268
+2246 1696 44974
+2247 1696 33132
+2248 1696 6496
+2252 1696 3647
+2253 1696 10417
+2254 1696 64096
+2255 1696 14622
+2256 1696 52417
+2257 1696 52417
+2258 1696 44431
+2259 1696 44431
+2261 1696 26585
+2262 1696 47416
+2263 1696 40934
+2264 1696 63066
+2265 1696 20247
+2266 1696 33351
+2267 1696 17261
+2268 1696 17261
+2269 1696 27683
+2271 1696 57575
+2272 1696 4014
+2273 1696 21800
+2274 1696 19835
+2275 1696 26008
+2276 1696 58178
+2322 1696 2156
+2323 1696 2156
+2324 1696 12578
+2325 1696 48078
+2327 1696 39953
+2328 1696 33858
+2329 1696 28006
+2330 1696 9904
+2331 1696 20906
+2341 1696 28249
+2388 1696 33885
+2389 1696 33885
+2390 1696 15499
+2391 1696 15709
+2392 1696 43109
+2394 1696 61833
+2395 1696 23430
+2396 1696 56558
+2397 1696 6514
+2407 1696 52214
+2418 1696 23965
+2466 1696 21295
+2467 1696 21295
+2468 1696 38334
+2469 1696 28500
+2470 1696 63698
+2471 1696 18087
+2472 1696 4843
+2473 1696 17206
+2474 1696 76
+2475 1696 53258
+2485 1696 25009
+2496 1696 38526
+2508 1696 63959
+4207 1696 27852657
+1614 1697 1
+1615 1697 1
+1670 1697 1
+1679 1697 10701
+1680 1697 10701
+1681 1697 10701
+1688 1697 10701
+1689 1697 10701
+1690 1697 21402
+1691 1697 10701
+1698 1697 10701
+1699 1697 10701
+1700 1697 21402
+1701 1697 21402
+1702 1697 10701
+1950 1697 60363
+1951 1697 60363
+1958 1697 5543
+1959 1697 385
+1960 1697 5543
+1965 1697 37086
+1967 1697 5543
+1968 1697 30866
+1969 1697 41567
+1970 1697 36024
+1977 1697 41993
+1978 1697 1795
+1979 1697 23197
+1980 1697 53678
+1981 1697 17654
+2043 1697 31292
+2044 1697 56615
+2045 1697 1795
+2046 1697 32276
+2047 1697 3205
+2058 1697 61773
+2311 1697 38289
+2312 1697 38289
+2319 1697 55758
+2320 1697 28523
+2321 1697 55755
+2326 1697 6181
+2327 1697 6181
+2328 1697 55758
+2329 1697 61830
+2330 1697 9140
+2331 1697 18906
+2337 1697 6181
+2338 1697 42601
+2339 1697 48673
+2340 1697 479
+2341 1697 29151
+2342 1697 10245
+2404 1697 44036
+2405 1697 21537
+2406 1697 38864
+2407 1697 31925
+2408 1697 32777
+2419 1697 22532
+2482 1697 36609
+2483 1697 10960
+2484 1697 36691
+2485 1697 31323
+2486 1697 28278
+2497 1697 14994
+2509 1697 12751
+4208 1697 27852657
+1615 1698 1
+1670 1698 1
+1679 1698 10701
+1680 1698 10701
+1681 1698 10701
+1688 1698 10701
+1689 1698 10701
+1690 1698 21402
+1691 1698 10701
+1698 1698 10701
+1699 1698 10701
+1700 1698 21402
+1701 1698 21402
+1702 1698 10701
+1968 1698 30481
+1969 1698 30481
+1970 1698 30481
+1978 1698 30481
+1979 1698 41182
+1980 1698 6142
+1981 1698 41182
+2024 1698 54820
+2025 1698 54820
+2026 1698 54820
+2033 1698 54820
+2035 1698 54820
+2044 1698 41182
+2045 1698 30481
+2046 1698 6142
+2047 1698 6142
+2054 1698 10701
+2055 1698 21402
+2056 1698 10701
+2057 1698 21402
+2058 1698 62584
+2059 1698 21402
+2320 1698 65518
+2321 1698 65518
+2329 1698 33304
+2330 1698 28666
+2331 1698 28669
+2338 1698 30227
+2339 1698 63531
+2340 1698 63389
+2341 1698 26540
+2342 1698 63392
+2385 1698 618
+2392 1698 41425
+2394 1698 55306
+2395 1698 4893
+2396 1698 36341
+2397 1698 36341
+2398 1698 24129
+2399 1698 24129
+2400 1698 24129
+2401 1698 24129
+2404 1698 40482
+2405 1698 6461
+2406 1698 42830
+2407 1698 34580
+2408 1698 1580
+2409 1698 24129
+2410 1698 24129
+2411 1698 24129
+2412 1698 24129
+2413 1698 24129
+2415 1698 41797
+2416 1698 40611
+2417 1698 11601
+2418 1698 967
+2419 1698 13563
+2420 1698 9854
+2451 1698 37395
+2452 1698 37395
+2453 1698 37395
+2454 1698 37395
+2455 1698 50361
+2456 1698 50361
+2457 1698 19169
+2458 1698 19169
+2460 1698 12914
+2461 1698 12914
+2462 1698 12914
+2463 1698 37129
+2464 1698 43485
+2465 1698 58645
+2466 1698 31847
+2467 1698 31847
+2468 1698 31847
+2470 1698 21767
+2471 1698 21767
+2472 1698 54485
+2473 1698 44835
+2474 1698 45882
+2475 1698 52758
+2476 1698 22144
+2477 1698 22144
+2478 1698 22144
+2479 1698 22144
+2481 1698 2053
+2482 1698 9403
+2483 1698 7128
+2484 1698 44936
+2485 1698 25265
+2486 1698 27604
+2487 1698 64202
+2488 1698 64202
+2489 1698 64202
+2490 1698 64202
+2491 1698 64202
+2493 1698 36071
+2494 1698 41811
+2495 1698 62189
+2496 1698 1364
+2497 1698 55044
+2498 1698 20495
+2499 1698 52908
+2500 1698 52908
+2501 1698 52908
+2502 1698 52908
+2503 1698 52908
+2504 1698 52908
+2505 1698 14902
+2506 1698 45439
+2507 1698 7409
+2508 1698 52315
+2509 1698 35778
+2510 1698 59279
+2511 1698 3287
+4209 1698 27852657
+1616 1699 1
+1617 1699 1
+1626 1699 65520
+1634 1699 43444
+1635 1699 3345
+1636 1699 3346
+1691 1699 32490
+1697 1699 46806
+1698 1699 27978
+1699 1699 50055
+1700 1699 52403
+1701 1699 49557
+1702 1699 20413
+1970 1699 338
+1981 1699 26118
+2044 1699 11834
+2045 1699 24451
+2046 1699 11370
+2047 1699 14336
+2058 1699 8631
+2311 1699 13143
+2312 1699 13143
+2313 1699 39232
+2314 1699 39232
+2316 1699 42044
+2317 1699 42044
+2318 1699 42044
+2319 1699 34607
+2320 1699 59127
+2321 1699 45984
+2322 1699 33280
+2323 1699 33280
+2324 1699 33280
+2326 1699 50628
+2327 1699 50628
+2328 1699 65428
+2329 1699 57152
+2330 1699 8406
+2331 1699 22466
+2332 1699 26653
+2333 1699 26653
+2334 1699 26653
+2335 1699 26653
+2337 1699 57457
+2338 1699 19997
+2339 1699 56171
+2340 1699 25825
+2341 1699 28407
+2342 1699 49207
+2398 1699 11830
+2399 1699 11830
+2400 1699 11830
+2401 1699 11830
+2402 1699 11830
+2404 1699 54461
+2405 1699 61196
+2406 1699 22270
+2407 1699 52754
+2408 1699 35133
+2419 1699 46094
+2476 1699 36205
+2477 1699 36205
+2478 1699 36205
+2479 1699 36205
+2480 1699 36205
+2481 1699 36205
+2482 1699 61785
+2483 1699 6140
+2484 1699 11004
+2485 1699 4200
+2486 1699 47429
+2497 1699 26106
+2509 1699 20610
+4210 1699 27852657
+1617 1700 1
+1670 1700 49655
+1671 1700 47146
+1672 1700 47147
+1680 1700 43109
+1689 1700 41161
+1699 1700 41161
+1978 1700 9959
+2017 1700 15448
+2025 1700 34405
+2034 1700 47778
+2044 1700 7208
+2055 1700 38410
+2175 1700 55968
+2176 1700 55968
+2205 1700 53684
+2206 1700 53684
+2208 1700 60911
+2209 1700 60911
+2210 1700 60911
+2211 1700 15964
+2212 1700 63589
+2220 1700 7621
+2250 1700 26300
+2251 1700 26300
+2252 1700 26300
+2254 1700 41492
+2255 1700 41492
+2256 1700 15026
+2257 1700 30582
+2265 1700 9177
+2274 1700 1556
+2305 1700 1887
+2306 1700 1887
+2307 1700 1887
+2308 1700 1887
+2310 1700 62464
+2311 1700 13835
+2312 1700 21410
+2320 1700 26514
+2329 1700 21556
+2339 1700 5510
+2371 1700 4230
+2372 1700 4230
+2373 1700 4230
+2374 1700 4230
+2375 1700 4230
+2377 1700 43084
+2378 1700 37295
+2386 1700 60907
+2395 1700 24668
+2405 1700 3603
+2416 1700 34457
+2449 1700 35266
+2450 1700 35266
+2451 1700 35266
+2452 1700 35266
+2453 1700 35266
+2454 1700 35266
+2455 1700 2200
+2456 1700 34759
+2464 1700 2016
+2473 1700 62821
+2483 1700 12285
+2494 1700 59095
+2506 1700 3689
+4211 1700 27852657
+1618 1701 1
+1627 1701 1
+1692 1701 65520
+1948 1701 40739
+1956 1701 9784
+1962 1701 55591
+1963 1701 28826
+1965 1701 17245
+1968 1701 31843
+1969 1701 31843
+1970 1701 31843
+1971 1701 57609
+1972 1701 40625
+1973 1701 13860
+1974 1701 5374
+1977 1701 36785
+1978 1701 57879
+1979 1701 57879
+1980 1701 24201
+1981 1701 57879
+2037 1701 57610
+2038 1701 40625
+2039 1701 13860
+2040 1701 5374
+2041 1701 63694
+2043 1701 36785
+2044 1701 57879
+2045 1701 57879
+2046 1701 24201
+2047 1701 50237
+2058 1701 57879
+2302 1701 40206
+2303 1701 40597
+2307 1701 32490
+2308 1701 32490
+2309 1701 7175
+2310 1701 3626
+2311 1701 61286
+2312 1701 61286
+2313 1701 58535
+2314 1701 3007
+2316 1701 30081
+2317 1701 32014
+2318 1701 7663
+2319 1701 26668
+2320 1701 10787
+2321 1701 15022
+2322 1701 26313
+2323 1701 38139
+2324 1701 2836
+2326 1701 29880
+2327 1701 33286
+2328 1701 24317
+2329 1701 44034
+2330 1701 35945
+2331 1701 20923
+2332 1701 58486
+2333 1701 41647
+2334 1701 6344
+2335 1701 20949
+2337 1701 13015
+2338 1701 48464
+2339 1701 45444
+2340 1701 20661
+2341 1701 34160
+2342 1701 13237
+2398 1701 31974
+2399 1701 47856
+2400 1701 7133
+2401 1701 42484
+2402 1701 65138
+2404 1701 43142
+2405 1701 33892
+2406 1701 44243
+2407 1701 10207
+2408 1701 59956
+2419 1701 46719
+2476 1701 28140
+2477 1701 64613
+2478 1701 20029
+2479 1701 20029
+2480 1701 9789
+2481 1701 53917
+2482 1701 36576
+2483 1701 29205
+2484 1701 50185
+2485 1701 9792
+2486 1701 57545
+2497 1701 59897
+2509 1701 24642
+4212 1701 27852657
+1619 1702 1
+1628 1702 1
+1674 1702 1
+1683 1702 2
+1693 1702 1
+1962 1702 1
+1972 1702 1
+2375 1702 48311
+2383 1702 27951
+2389 1702 34241
+2390 1702 2472
+2392 1702 33758
+2395 1702 29335
+2396 1702 29335
+2397 1702 29335
+2398 1702 49651
+2399 1702 35980
+2400 1702 64305
+2401 1702 37095
+2404 1702 60183
+2405 1702 11679
+2406 1702 11679
+2407 1702 41014
+2408 1702 11679
+2409 1702 20979
+2410 1702 15497
+2411 1702 6967
+2412 1702 45278
+2413 1702 18592
+2415 1702 60183
+2416 1702 11679
+2417 1702 11679
+2418 1702 41014
+2419 1702 23358
+2420 1702 11679
+2444 1702 17752
+2445 1702 17752
+2446 1702 2361
+2447 1702 37103
+2451 1702 58516
+2452 1702 58516
+2453 1702 43125
+2454 1702 45332
+2455 1702 36795
+2456 1702 36795
+2457 1702 38186
+2458 1702 33831
+2460 1702 28410
+2461 1702 25501
+2462 1702 52995
+2463 1702 28394
+2464 1702 5226
+2465 1702 33952
+2466 1702 57233
+2467 1702 27160
+2468 1702 59746
+2470 1702 3503
+2471 1702 6185
+2472 1702 14385
+2473 1702 63591
+2474 1702 23714
+2475 1702 55283
+2476 1702 23333
+2477 1702 50335
+2478 1702 48853
+2479 1702 16635
+2481 1702 45403
+2482 1702 20750
+2483 1702 26729
+2484 1702 31477
+2485 1702 11176
+2486 1702 21414
+2487 1702 45091
+2488 1702 29538
+2489 1702 50196
+2490 1702 22360
+2491 1702 54331
+2493 1702 19273
+2494 1702 22030
+2495 1702 36210
+2496 1702 22252
+2497 1702 40579
+2498 1702 43733
+2499 1702 10719
+2500 1702 37244
+2501 1702 61557
+2502 1702 61557
+2503 1702 32089
+2504 1702 3355
+2505 1702 47998
+2506 1702 2824
+2507 1702 17068
+2508 1702 7789
+2509 1702 28201
+2510 1702 12686
+2511 1702 63574
+4213 1702 27852657
+1620 1703 1
+2485 1703 65520
+4214 1703 27852657
+1621 1704 1
+1900 1704 1
+1901 1704 1
+1910 1704 2
+2261 1704 43681
+2262 1704 43681
+2263 1704 43681
+2271 1704 32761
+2272 1704 32761
+2327 1704 32761
+2474 1704 12286
+2475 1704 60062
+2485 1704 60062
+2496 1704 60062
+2508 1704 2048
+4215 1704 27852657
+1622 1705 1
+1623 1705 1
+1631 1705 1
+1632 1705 1
+1679 1705 35040
+1680 1705 35040
+1681 1705 35040
+1687 1705 1
+1688 1705 35040
+1689 1705 35040
+1690 1705 4559
+1691 1705 35040
+1698 1705 35040
+1699 1705 35040
+1700 1705 4559
+1701 1705 4559
+1702 1705 35040
+1950 1705 39772
+1951 1705 39772
+1958 1705 9291
+1959 1705 49063
+1960 1705 9291
+1965 1705 37086
+1967 1705 9291
+1968 1705 38362
+1969 1705 7881
+1970 1705 64111
+1977 1705 49489
+1978 1705 13039
+1979 1705 17598
+1980 1705 6897
+1981 1705 8307
+2043 1705 14449
+2044 1705 43520
+2045 1705 13039
+2046 1705 2338
+2047 1705 42536
+2058 1705 3748
+2311 1705 29399
+2312 1705 29399
+2319 1705 11308
+2320 1705 40707
+2321 1705 11308
+2326 1705 6181
+2327 1705 6181
+2328 1705 11308
+2329 1705 7092
+2330 1705 17127
+2331 1705 5819
+2337 1705 6181
+2338 1705 2836
+2339 1705 64141
+2340 1705 26721
+2341 1705 21229
+2342 1705 15410
+2404 1705 26736
+2405 1705 56659
+2406 1705 19239
+2407 1705 58626
+2408 1705 43564
+2419 1705 28154
+2482 1705 39420
+2483 1705 1018
+2484 1705 46292
+2485 1705 36593
+2486 1705 36471
+2497 1705 14057
+2509 1705 45043
+4216 1705 27852657
+1623 1706 1
+1632 1706 1
+1697 1706 65520
+1965 1706 53121
+1968 1706 1948
+1969 1706 1948
+1970 1706 1948
+1971 1706 236
+1972 1706 236
+1973 1706 236
+1974 1706 236
+1977 1706 46927
+1978 1706 44809
+1979 1706 44809
+1980 1706 46757
+1981 1706 44809
+2037 1706 236
+2038 1706 236
+2039 1706 236
+2040 1706 236
+2041 1706 236
+2043 1706 46927
+2044 1706 44809
+2045 1706 44809
+2046 1706 46757
+2047 1706 24097
+2058 1706 44809
+2303 1706 1044
+2307 1706 37196
+2308 1706 37196
+2309 1706 37196
+2310 1706 24950
+2311 1706 53156
+2312 1706 53156
+2313 1706 42839
+2314 1706 42839
+2316 1706 6393
+2317 1706 6393
+2318 1706 55400
+2319 1706 1314
+2320 1706 10869
+2321 1706 23234
+2322 1706 44299
+2323 1706 44299
+2324 1706 44299
+2326 1706 34458
+2327 1706 23319
+2328 1706 46092
+2329 1706 16966
+2330 1706 21948
+2331 1706 64235
+2332 1706 21579
+2333 1706 21579
+2334 1706 21579
+2335 1706 21579
+2337 1706 50349
+2338 1706 49
+2339 1706 24186
+2340 1706 34987
+2341 1706 57048
+2342 1706 58334
+2398 1706 26164
+2399 1706 26164
+2400 1706 26164
+2401 1706 26164
+2402 1706 26164
+2404 1706 32257
+2405 1706 57600
+2406 1706 21818
+2407 1706 17202
+2408 1706 1070
+2419 1706 8257
+2476 1706 46528
+2477 1706 46528
+2478 1706 46528
+2479 1706 46528
+2480 1706 46528
+2481 1706 46354
+2482 1706 32969
+2483 1706 60879
+2484 1706 56348
+2485 1706 53172
+2486 1706 3125
+2497 1706 7855
+2509 1706 666
+4217 1706 27852657
+1624 1707 1
+1625 1707 1
+1626 1707 1
+1633 1707 1
+1634 1707 1
+1635 1707 2
+1636 1707 1
+1679 1707 57719
+1680 1707 57719
+1681 1707 57719
+1688 1707 57720
+1689 1707 57720
+1690 1707 49919
+1691 1707 57721
+1698 1707 57719
+1699 1707 57719
+1700 1707 49917
+1701 1707 49918
+1702 1707 57719
+1896 1707 62793
+1903 1707 1
+1904 1707 60066
+1905 1707 62794
+1912 1707 1
+1913 1707 43174
+1914 1707 43175
+1915 1707 45902
+1951 1707 62793
+1959 1707 60065
+1960 1707 62793
+1968 1707 32643
+1969 1707 32645
+1970 1707 18481
+1978 1707 54991
+1979 1707 47189
+1980 1707 22496
+1981 1707 49917
+2017 1707 62793
+2024 1707 7802
+2025 1707 2346
+2026 1707 5074
+2033 1707 7801
+2035 1707 7803
+2036 1707 51358
+2044 1707 4017
+2045 1707 11819
+2046 1707 53028
+2047 1707 1671
+2054 1707 57719
+2055 1707 6745
+2056 1707 14547
+2057 1707 14929
+2058 1707 18946
+2059 1707 9473
+2175 1707 26011
+2176 1707 26011
+2212 1707 26011
+2219 1707 39510
+2220 1707 39510
+2221 1707 39510
+2256 1707 50843
+2257 1707 50320
+2264 1707 54518
+2265 1707 44864
+2266 1707 60065
+2273 1707 15008
+2274 1707 57792
+2275 1707 54187
+2276 1707 33632
+2312 1707 64998
+2320 1707 58155
+2321 1707 58678
+2329 1707 2602
+2330 1707 17376
+2331 1707 44139
+2338 1707 16024
+2339 1707 41363
+2340 1707 63958
+2341 1707 22630
+2342 1707 12123
+2378 1707 60565
+2385 1707 37222
+2387 1707 4956
+2392 1707 33690
+2394 1707 22700
+2395 1707 55978
+2396 1707 37543
+2397 1707 36017
+2398 1707 58831
+2399 1707 58831
+2400 1707 58831
+2401 1707 58831
+2404 1707 43259
+2405 1707 15990
+2406 1707 13752
+2407 1707 9113
+2408 1707 39802
+2409 1707 58831
+2410 1707 58831
+2411 1707 58831
+2412 1707 58831
+2413 1707 58831
+2415 1707 47735
+2416 1707 27687
+2417 1707 2854
+2418 1707 33652
+2419 1707 48491
+2420 1707 20812
+2451 1707 45090
+2452 1707 45090
+2453 1707 45090
+2454 1707 45090
+2455 1707 47077
+2456 1707 43958
+2457 1707 29967
+2458 1707 29967
+2460 1707 10873
+2461 1707 10873
+2462 1707 10873
+2463 1707 26355
+2464 1707 12373
+2465 1707 33936
+2466 1707 23006
+2467 1707 23006
+2468 1707 23006
+2470 1707 1782
+2471 1707 1782
+2472 1707 20576
+2473 1707 57765
+2474 1707 50380
+2475 1707 26339
+2476 1707 45166
+2477 1707 45166
+2478 1707 45166
+2479 1707 45166
+2481 1707 43885
+2482 1707 1044
+2483 1707 16633
+2484 1707 16697
+2485 1707 43362
+2486 1707 43858
+2487 1707 61227
+2488 1707 61227
+2489 1707 61227
+2490 1707 61227
+2491 1707 61227
+2493 1707 21501
+2494 1707 29649
+2495 1707 13390
+2496 1707 1687
+2497 1707 65223
+2498 1707 59977
+2499 1707 13680
+2500 1707 13680
+2501 1707 13680
+2502 1707 13680
+2503 1707 13680
+2504 1707 13680
+2505 1707 17785
+2506 1707 35343
+2507 1707 64109
+2508 1707 36794
+2509 1707 51092
+2510 1707 33931
+2511 1707 41123
+4218 1707 27852657
+1625 1708 1
+1626 1708 1
+1634 1708 60713
+1635 1708 21040
+1636 1708 21039
+1691 1708 63116
+1697 1708 63788
+1698 1708 7439
+1699 1708 12247
+1700 1708 25418
+1701 1708 5015
+1702 1708 28459
+1970 1708 19234
+1981 1708 59752
+2044 1708 51039
+2045 1708 65471
+2046 1708 19774
+2047 1708 28194
+2058 1708 62422
+2311 1708 28201
+2312 1708 28201
+2313 1708 7167
+2314 1708 7167
+2316 1708 30653
+2317 1708 30653
+2318 1708 30653
+2319 1708 14117
+2320 1708 38146
+2321 1708 9945
+2322 1708 52575
+2323 1708 52575
+2324 1708 52575
+2326 1708 35116
+2327 1708 35116
+2328 1708 368
+2329 1708 51764
+2330 1708 34875
+2331 1708 26132
+2332 1708 15419
+2333 1708 15419
+2334 1708 15419
+2335 1708 15419
+2337 1708 29000
+2338 1708 65087
+2339 1708 13491
+2340 1708 54846
+2341 1708 54247
+2342 1708 64762
+2398 1708 13314
+2399 1708 13314
+2400 1708 13314
+2401 1708 13314
+2402 1708 13314
+2404 1708 21285
+2405 1708 63636
+2406 1708 58367
+2407 1708 14573
+2408 1708 14689
+2419 1708 34570
+2476 1708 60907
+2477 1708 60907
+2478 1708 60907
+2479 1708 60907
+2480 1708 60907
+2481 1708 60907
+2482 1708 55240
+2483 1708 57879
+2484 1708 60898
+2485 1708 8104
+2486 1708 22686
+2497 1708 41094
+2509 1708 56139
+4219 1708 27852657
+1626 1709 1
+1635 1709 1
+1678 1709 35718
+1679 1709 18144
+1680 1709 18144
+1681 1709 6230
+1690 1709 18137
+1700 1709 18136
+1979 1709 23890
+2025 1709 30872
+2026 1709 51386
+2035 1709 16491
+2045 1709 11064
+2056 1709 5310
+2211 1709 33434
+2212 1709 33434
+2213 1709 25938
+2214 1709 25938
+2216 1709 35
+2217 1709 35
+2218 1709 35
+2219 1709 11439
+2220 1709 2149
+2221 1709 34236
+2258 1709 5970
+2259 1709 5970
+2260 1709 5970
+2262 1709 40250
+2263 1709 40250
+2264 1709 20550
+2265 1709 20379
+2266 1709 4824
+2275 1709 36109
+2313 1709 36577
+2314 1709 36577
+2315 1709 36577
+2316 1709 36577
+2318 1709 48004
+2319 1709 27294
+2320 1709 27835
+2321 1709 61358
+2330 1709 63902
+2340 1709 8427
+2379 1709 33347
+2380 1709 33347
+2381 1709 33347
+2382 1709 33347
+2383 1709 33347
+2385 1709 29396
+2386 1709 62826
+2387 1709 19800
+2396 1709 58877
+2406 1709 61843
+2417 1709 33148
+2457 1709 5215
+2458 1709 5215
+2459 1709 5215
+2460 1709 5215
+2461 1709 5215
+2462 1709 5215
+2463 1709 37703
+2464 1709 19912
+2465 1709 39372
+2474 1709 17221
+2484 1709 61058
+2495 1709 2367
+2507 1709 14972
+4220 1709 27852657
+1627 1710 1
+1628 1710 1
+1634 1710 25927
+1635 1710 57482
+1636 1710 57482
+1691 1710 29438
+1694 1710 1
+1697 1710 3114
+1698 1710 32276
+1699 1710 6349
+1700 1710 29610
+1701 1710 4171
+1702 1710 32215
+1970 1710 40607
+1981 1710 27567
+2044 1710 65303
+2045 1710 14582
+2046 1710 26763
+2047 1710 56553
+2058 1710 61201
+2302 1710 454
+2308 1710 36229
+2309 1710 54927
+2310 1710 1144
+2311 1710 7535
+2312 1710 7535
+2313 1710 50241
+2314 1710 6922
+2316 1710 6948
+2317 1710 17591
+2318 1710 30422
+2319 1710 41133
+2320 1710 56915
+2321 1710 49380
+2322 1710 21100
+2323 1710 37567
+2324 1710 23766
+2326 1710 679
+2327 1710 18093
+2328 1710 3321
+2329 1710 38189
+2330 1710 37780
+2331 1710 36922
+2332 1710 21459
+2333 1710 35013
+2334 1710 4625
+2335 1710 56392
+2337 1710 2172
+2338 1710 29917
+2339 1710 26508
+2340 1710 15056
+2341 1710 29597
+2342 1710 25826
+2398 1710 53600
+2399 1710 43400
+2400 1710 49493
+2401 1710 30510
+2402 1710 52286
+2404 1710 28251
+2405 1710 35502
+2406 1710 24166
+2407 1710 8119
+2408 1710 29945
+2419 1710 44026
+2476 1710 56948
+2477 1710 43408
+2478 1710 48175
+2479 1710 16217
+2480 1710 4879
+2481 1710 19167
+2482 1710 14942
+2483 1710 27367
+2484 1710 753
+2485 1710 42253
+2486 1710 48931
+2497 1710 12705
+2509 1710 51890
+4221 1710 27852657
+1628 1711 1
+1634 1711 26954
+1635 1711 38996
+1636 1711 38996
+1691 1711 65149
+1698 1711 44187
+1699 1711 56625
+1700 1711 37368
+1701 1711 31994
+1702 1711 5841
+1970 1711 45901
+1981 1711 10522
+2045 1711 15876
+2046 1711 13638
+2047 1711 20749
+2058 1711 16068
+2302 1711 28332
+2309 1711 25865
+2310 1711 16981
+2311 1711 50893
+2312 1711 50893
+2313 1711 20073
+2314 1711 9057
+2316 1711 33789
+2317 1711 19956
+2318 1711 60259
+2319 1711 57299
+2320 1711 21352
+2321 1711 35980
+2322 1711 33637
+2323 1711 36435
+2324 1711 33019
+2326 1711 33903
+2327 1711 20899
+2328 1711 47346
+2329 1711 35965
+2330 1711 7523
+2331 1711 20687
+2332 1711 58460
+2333 1711 64285
+2334 1711 29118
+2335 1711 29118
+2337 1711 8268
+2338 1711 32375
+2339 1711 52953
+2340 1711 15234
+2341 1711 42618
+2342 1711 9395
+2398 1711 7848
+2399 1711 63565
+2400 1711 41449
+2401 1711 41449
+2402 1711 60814
+2404 1711 54419
+2405 1711 18811
+2406 1711 12553
+2407 1711 60483
+2408 1711 13854
+2419 1711 46390
+2476 1711 16453
+2477 1711 49210
+2478 1711 23573
+2479 1711 23573
+2480 1711 42237
+2481 1711 28774
+2482 1711 14960
+2483 1711 24310
+2484 1711 23118
+2485 1711 17336
+2486 1711 59527
+2497 1711 34371
+2509 1711 41592
+4222 1711 27852657
+1629 1712 1
+1694 1712 65520
+1695 1712 65520
+1973 1712 47654
+2050 1712 17866
+2051 1712 65520
+2052 1712 65520
+2334 1712 14891
+2337 1712 35737
+2374 1712 48752
+2375 1712 49655
+2383 1712 8215
+2390 1712 20430
+2392 1712 2221
+2395 1712 48818
+2396 1712 48818
+2397 1712 48818
+2398 1712 24050
+2399 1712 24050
+2400 1712 58733
+2401 1712 36810
+2404 1712 50923
+2405 1712 42709
+2406 1712 42709
+2407 1712 26006
+2408 1712 42709
+2409 1712 64834
+2410 1712 64834
+2411 1712 30322
+2412 1712 32204
+2413 1712 6543
+2415 1712 50923
+2416 1712 42709
+2417 1712 42709
+2418 1712 26006
+2419 1712 19897
+2420 1712 42709
+2444 1712 47769
+2445 1712 56163
+2446 1712 62746
+2447 1712 56719
+2451 1712 42447
+2452 1712 4852
+2453 1712 11435
+2454 1712 16874
+2455 1712 5242
+2456 1712 5242
+2457 1712 33792
+2458 1712 33792
+2460 1712 30875
+2461 1712 45925
+2462 1712 58819
+2463 1712 55706
+2464 1712 58916
+2465 1712 53674
+2466 1712 36224
+2467 1712 36224
+2468 1712 51294
+2470 1712 53904
+2471 1712 38604
+2472 1712 18213
+2473 1712 26662
+2474 1712 59334
+2475 1712 5660
+2476 1712 29961
+2477 1712 29961
+2478 1712 32310
+2479 1712 11234
+2481 1712 50602
+2482 1712 23274
+2483 1712 31210
+2484 1712 39368
+2485 1712 64020
+2486 1712 33789
+2487 1712 3486
+2488 1712 3486
+2489 1712 28378
+2490 1712 30571
+2491 1712 37471
+2493 1712 33822
+2494 1712 60801
+2495 1712 62574
+2496 1712 44589
+2497 1712 29155
+2498 1712 54126
+2499 1712 58050
+2500 1712 58050
+2501 1712 56188
+2502 1712 20892
+2503 1712 9669
+2504 1712 25396
+2505 1712 65417
+2506 1712 47252
+2507 1712 63445
+2508 1712 43472
+2509 1712 289
+2510 1712 40976
+2511 1712 46188
+4223 1712 27852657
+1630 1713 1
+2485 1713 65520
+4224 1713 27852657
+1631 1714 1
+1634 1714 56220
+1635 1714 36376
+1636 1714 36376
+1691 1714 40097
+1697 1714 35859
+1698 1714 13303
+1699 1714 22604
+1700 1714 28557
+1701 1714 8790
+1702 1714 5069
+1970 1714 13382
+1981 1714 36952
+2044 1714 25092
+2045 1714 16934
+2046 1714 52081
+2047 1714 60624
+2058 1714 28741
+2310 1714 12749
+2311 1714 26774
+2312 1714 26774
+2313 1714 36979
+2314 1714 36979
+2316 1714 36998
+2317 1714 36998
+2318 1714 38757
+2319 1714 39005
+2320 1714 34088
+2321 1714 7314
+2322 1714 20894
+2323 1714 20894
+2324 1714 20894
+2326 1714 15880
+2327 1714 4636
+2328 1714 56671
+2329 1714 50393
+2330 1714 34990
+2331 1714 46270
+2332 1714 43308
+2333 1714 43308
+2334 1714 43308
+2335 1714 43308
+2337 1714 36522
+2338 1714 46985
+2339 1714 25890
+2340 1714 13797
+2341 1714 9029
+2342 1714 44677
+2398 1714 21248
+2399 1714 21248
+2400 1714 21248
+2401 1714 21248
+2402 1714 21248
+2404 1714 21391
+2405 1714 14626
+2406 1714 19389
+2407 1714 23699
+2408 1714 29147
+2419 1714 1045
+2476 1714 50628
+2477 1714 50628
+2478 1714 50628
+2479 1714 50628
+2480 1714 50628
+2481 1714 50628
+2482 1714 30191
+2483 1714 26888
+2484 1714 3691
+2485 1714 1696
+2486 1714 36464
+2497 1714 57955
+2509 1714 42875
+4225 1714 27852657
+1632 1715 1
+1679 1715 44487
+1680 1715 44487
+1681 1715 44487
+1687 1715 1
+1688 1715 44487
+1689 1715 44487
+1690 1715 23453
+1691 1715 44487
+1698 1715 44487
+1699 1715 44487
+1700 1715 23453
+1701 1715 23453
+1702 1715 44487
+1896 1715 4882
+1904 1715 9764
+1905 1715 4882
+1913 1715 50483
+1914 1715 50483
+1915 1715 45601
+1951 1715 4882
+1959 1715 9764
+1960 1715 4882
+1968 1715 54111
+1969 1715 54111
+1970 1715 24427
+1978 1715 3628
+1979 1715 48115
+1980 1715 22059
+1981 1715 43233
+2017 1715 4882
+2024 1715 21034
+2025 1715 30798
+2026 1715 25916
+2033 1715 21034
+2035 1715 21034
+2036 1715 35837
+2044 1715 63153
+2045 1715 18666
+2046 1715 22451
+2047 1715 52135
+2054 1715 44487
+2055 1715 38491
+2056 1715 59525
+2057 1715 23845
+2058 1715 21477
+2059 1715 33609
+2175 1715 29684
+2176 1715 29684
+2212 1715 29684
+2219 1715 35837
+2220 1715 35837
+2221 1715 35837
+2256 1715 11045
+2257 1715 46807
+2264 1715 33468
+2265 1715 44745
+2266 1715 63459
+2273 1715 63152
+2274 1715 3379
+2275 1715 58404
+2276 1715 30782
+2312 1715 35762
+2320 1715 35759
+2321 1715 65518
+2329 1715 61047
+2330 1715 788
+2331 1715 28523
+2338 1715 4814
+2339 1715 60113
+2340 1715 54869
+2341 1715 52613
+2342 1715 54872
+2378 1715 27315
+2385 1715 41298
+2387 1715 38206
+2392 1715 61714
+2394 1715 38472
+2395 1715 49971
+2396 1715 25204
+2397 1715 32331
+2398 1715 24489
+2399 1715 24489
+2400 1715 24489
+2401 1715 24489
+2404 1715 8714
+2405 1715 1337
+2406 1715 40067
+2407 1715 34410
+2408 1715 11107
+2409 1715 24489
+2410 1715 24489
+2411 1715 24489
+2412 1715 24489
+2413 1715 24489
+2415 1715 1507
+2416 1715 54234
+2417 1715 32687
+2418 1715 65067
+2419 1715 6103
+2420 1715 49868
+2451 1715 13853
+2452 1715 13853
+2453 1715 13853
+2454 1715 13853
+2455 1715 34027
+2456 1715 27936
+2457 1715 13443
+2458 1715 13443
+2460 1715 58760
+2461 1715 58760
+2462 1715 58760
+2463 1715 39842
+2464 1715 19333
+2465 1715 56918
+2466 1715 45006
+2467 1715 45006
+2468 1715 45006
+2470 1715 38354
+2471 1715 38354
+2472 1715 42052
+2473 1715 27096
+2474 1715 20383
+2475 1715 56132
+2476 1715 6198
+2477 1715 6198
+2478 1715 6198
+2479 1715 6198
+2481 1715 874
+2482 1715 61269
+2483 1715 30884
+2484 1715 25065
+2485 1715 19220
+2486 1715 9622
+2487 1715 8608
+2488 1715 8608
+2489 1715 8608
+2490 1715 8608
+2491 1715 8608
+2493 1715 37246
+2494 1715 34983
+2495 1715 61368
+2496 1715 58244
+2497 1715 11659
+2498 1715 18123
+2499 1715 18383
+2500 1715 18383
+2501 1715 18383
+2502 1715 18383
+2503 1715 18383
+2504 1715 18383
+2505 1715 28752
+2506 1715 25113
+2507 1715 27741
+2508 1715 59178
+2509 1715 57955
+2510 1715 56629
+2511 1715 13342
+4226 1715 27852657
+1633 1716 1
+1634 1716 58152
+1635 1716 64391
+1636 1716 64391
+1691 1716 54740
+1697 1716 8155
+1698 1716 8153
+1699 1716 15523
+1700 1716 38979
+1701 1716 20117
+1702 1716 29768
+1970 1716 20423
+1981 1716 52414
+2044 1716 36345
+2045 1716 27598
+2046 1716 45774
+2047 1716 9159
+2058 1716 52034
+2311 1716 27596
+2312 1716 27596
+2313 1716 35507
+2314 1716 35507
+2316 1716 21677
+2317 1716 21677
+2318 1716 21677
+2319 1716 24308
+2320 1716 62056
+2321 1716 34460
+2322 1716 11522
+2323 1716 11522
+2324 1716 11522
+2326 1716 42610
+2327 1716 42610
+2328 1716 33274
+2329 1716 3633
+2330 1716 5697
+2331 1716 24600
+2332 1716 45087
+2333 1716 45087
+2334 1716 45087
+2335 1716 45087
+2337 1716 53022
+2338 1716 23519
+2339 1716 35417
+2340 1716 43143
+2341 1716 13605
+2342 1716 35154
+2398 1716 63986
+2399 1716 63986
+2400 1716 63986
+2401 1716 63986
+2402 1716 63986
+2404 1716 45584
+2405 1716 47510
+2406 1716 35134
+2407 1716 3149
+2408 1716 10107
+2419 1716 21548
+2476 1716 46063
+2477 1716 46063
+2478 1716 46063
+2479 1716 46063
+2480 1716 46063
+2481 1716 46063
+2482 1716 48863
+2483 1716 16395
+2484 1716 12958
+2485 1716 5566
+2486 1716 49339
+2497 1716 38488
+2509 1716 38622
+4227 1716 27852657
+1634 1717 1
+1687 1717 49655
+1688 1717 47146
+1689 1717 47147
+1690 1717 43109
+1691 1717 41161
+1701 1717 41161
+1980 1717 9959
+2034 1717 15448
+2035 1717 34405
+2036 1717 47778
+2046 1717 7208
+2057 1717 38410
+2256 1717 55968
+2257 1717 55968
+2258 1717 53684
+2259 1717 53684
+2261 1717 60911
+2262 1717 60911
+2263 1717 60911
+2264 1717 15964
+2265 1717 63589
+2266 1717 7621
+2267 1717 26300
+2268 1717 26300
+2269 1717 26300
+2271 1717 41492
+2272 1717 41492
+2273 1717 15026
+2274 1717 30582
+2275 1717 9177
+2276 1717 1556
+2322 1717 1887
+2323 1717 1887
+2324 1717 1887
+2325 1717 1887
+2327 1717 62464
+2328 1717 13835
+2329 1717 21410
+2330 1717 26514
+2331 1717 21556
+2341 1717 5510
+2388 1717 4230
+2389 1717 4230
+2390 1717 4230
+2391 1717 4230
+2392 1717 4230
+2394 1717 43084
+2395 1717 37295
+2396 1717 60907
+2397 1717 24668
+2407 1717 3603
+2418 1717 34457
+2466 1717 35266
+2467 1717 35266
+2468 1717 35266
+2469 1717 35266
+2470 1717 35266
+2471 1717 35266
+2472 1717 2200
+2473 1717 34759
+2474 1717 2016
+2475 1717 62821
+2485 1717 12285
+2496 1717 59095
+2508 1717 3689
+4228 1717 27852657
+1635 1718 1
+1636 1718 1
+1687 1718 35718
+1688 1718 18144
+1689 1718 18144
+1690 1718 6230
+1691 1718 18137
+1701 1718 18136
+1980 1718 23890
+2034 1718 30872
+2035 1718 51386
+2036 1718 16491
+2046 1718 11064
+2057 1718 5310
+2256 1718 33434
+2257 1718 33434
+2258 1718 25938
+2259 1718 25938
+2261 1718 35
+2262 1718 35
+2263 1718 35
+2264 1718 11439
+2265 1718 2149
+2266 1718 34236
+2267 1718 5970
+2268 1718 5970
+2269 1718 5970
+2271 1718 40250
+2272 1718 40250
+2273 1718 20550
+2274 1718 20379
+2275 1718 4824
+2276 1718 36109
+2322 1718 36577
+2323 1718 36577
+2324 1718 36577
+2325 1718 36577
+2327 1718 48004
+2328 1718 27294
+2329 1718 27835
+2330 1718 61358
+2331 1718 63902
+2341 1718 8427
+2388 1718 33347
+2389 1718 33347
+2390 1718 33347
+2391 1718 33347
+2392 1718 33347
+2394 1718 29396
+2395 1718 62826
+2396 1718 19800
+2397 1718 58877
+2407 1718 61843
+2418 1718 33148
+2466 1718 5215
+2467 1718 5215
+2468 1718 5215
+2469 1718 5215
+2470 1718 5215
+2471 1718 5215
+2472 1718 37703
+2473 1718 19912
+2474 1718 39372
+2475 1718 17221
+2485 1718 61058
+2496 1718 2367
+2508 1718 14972
+4229 1718 27852657
+1637 1719 1
+1638 1719 1
+1640 1719 1
+1652 1719 5401
+1658 1719 64338
+1665 1719 64338
+1673 1719 64338
+1682 1719 64338
+1692 1719 64338
+1971 1719 53704
+2010 1719 14736
+2018 1719 36581
+2027 1719 19957
+2037 1719 15387
+2048 1719 26021
+2124 1719 34479
+2147 1719 36229
+2151 1719 46247
+2156 1719 26130
+2162 1719 6327
+2169 1719 6327
+2177 1719 9907
+2178 1719 56796
+2183 1719 41893
+2187 1719 1144
+2192 1719 55650
+2198 1719 40023
+2205 1719 11289
+2213 1719 4962
+2222 1719 3315
+2223 1719 64850
+2225 1719 64850
+2232 1719 49508
+2237 1719 27096
+2243 1719 53820
+2250 1719 52303
+2258 1719 5571
+2267 1719 609
+2277 1719 11010
+2278 1719 10773
+2280 1719 10773
+2283 1719 62540
+2292 1719 31873
+2298 1719 52976
+2305 1719 39968
+2313 1719 22781
+2322 1719 38906
+2332 1719 10079
+2343 1719 54414
+2344 1719 65382
+2346 1719 65382
+2349 1719 46399
+2353 1719 43678
+2364 1719 15159
+2371 1719 21366
+2379 1719 45749
+2388 1719 41289
+2398 1719 8017
+2409 1719 43310
+2421 1719 57203
+2422 1719 13179
+2424 1719 13179
+2427 1719 46742
+2431 1719 51306
+2436 1719 46029
+2442 1719 18161
+2449 1719 2763
+2457 1719 27858
+2466 1719 39229
+2476 1719 40243
+2487 1719 38090
+2499 1719 15558
+4230 1719 27852657
+1638 1720 1
+1639 1720 1
+1642 1720 65520
+1646 1720 1
+1657 1720 5880
+1928 1720 36153
+1929 1720 47785
+1930 1720 47785
+1948 1720 18753
+1956 1720 48705
+1963 1720 42315
+1965 1720 25135
+1968 1720 32740
+1969 1720 32740
+1970 1720 32740
+1971 1720 43791
+1972 1720 32053
+1973 1720 17691
+1974 1720 46815
+1977 1720 24844
+1978 1720 31085
+1979 1720 31085
+1980 1720 63825
+1981 1720 31085
+2037 1720 43791
+2038 1720 32053
+2039 1720 17691
+2040 1720 46815
+2041 1720 18261
+2043 1720 24844
+2044 1720 31085
+2045 1720 31085
+2046 1720 63825
+2047 1720 62170
+2058 1720 31085
+2278 1720 25420
+2279 1720 25420
+2280 1720 41777
+2281 1720 64051
+2282 1720 38631
+2283 1720 44231
+2284 1720 21696
+2285 1720 32370
+2286 1720 59260
+2287 1720 44231
+2288 1720 21696
+2289 1720 7834
+2290 1720 24480
+2291 1720 30741
+2292 1720 44231
+2293 1720 21696
+2294 1720 41283
+2295 1720 30983
+2296 1720 50132
+2297 1720 19391
+2300 1720 34609
+2301 1720 56057
+2302 1720 19240
+2303 1720 2282
+2307 1720 41713
+2308 1720 63161
+2309 1720 26344
+2310 1720 31568
+2311 1720 56179
+2312 1720 56179
+2313 1720 22919
+2314 1720 13245
+2316 1720 37594
+2317 1720 27288
+2318 1720 23174
+2319 1720 54123
+2320 1720 32397
+2321 1720 41739
+2322 1720 28165
+2323 1720 18491
+2324 1720 5019
+2326 1720 5652
+2327 1720 37407
+2328 1720 64665
+2329 1720 9558
+2330 1720 903
+2331 1720 24685
+2332 1720 63720
+2333 1720 16449
+2334 1720 49143
+2335 1720 60711
+2337 1720 40217
+2338 1720 17166
+2339 1720 26040
+2340 1720 52832
+2341 1720 53696
+2342 1720 29011
+2398 1720 404
+2399 1720 13771
+2400 1720 48375
+2401 1720 47758
+2402 1720 46406
+2404 1720 6755
+2405 1720 46900
+2406 1720 20975
+2407 1720 40668
+2408 1720 38144
+2419 1720 9133
+2476 1720 62527
+2477 1720 50574
+2478 1720 31569
+2479 1720 295
+2480 1720 57469
+2481 1720 42593
+2482 1720 7177
+2483 1720 63293
+2484 1720 10596
+2485 1720 18548
+2486 1720 33875
+2497 1720 9756
+2509 1720 17937
+4231 1720 27852657
+1639 1721 1
+1659 1721 24493
+1666 1721 3748
+1674 1721 43011
+1683 1721 4674
+1693 1721 4674
+1972 1721 33024
+2019 1721 28385
+2028 1721 3931
+2038 1721 23950
+2049 1721 61121
+2125 1721 55034
+2152 1721 44058
+2157 1721 49828
+2163 1721 5773
+2170 1721 5773
+2178 1721 42582
+2179 1721 38054
+2184 1721 5352
+2188 1721 39632
+2193 1721 50225
+2199 1721 29758
+2206 1721 10456
+2214 1721 4683
+2223 1721 63066
+2224 1721 50988
+2226 1721 61373
+2233 1721 7082
+2238 1721 18153
+2244 1721 7683
+2251 1721 15845
+2259 1721 21184
+2268 1721 16501
+2278 1721 18274
+2279 1721 13764
+2281 1721 8985
+2284 1721 8985
+2293 1721 63098
+2299 1721 18544
+2306 1721 6995
+2314 1721 32159
+2323 1721 55703
+2333 1721 14240
+2344 1721 57270
+2345 1721 8148
+2347 1721 45460
+2350 1721 45460
+2354 1721 7162
+2365 1721 55468
+2372 1721 5201
+2380 1721 42450
+2389 1721 55866
+2399 1721 12829
+2410 1721 37962
+2422 1721 4094
+2423 1721 22162
+2425 1721 57279
+2428 1721 57279
+2432 1721 3406
+2437 1721 55486
+2443 1721 59374
+2450 1721 37265
+2458 1721 64555
+2467 1721 18061
+2477 1721 30495
+2488 1721 52533
+2500 1721 49879
+4232 1721 27852657
+1640 1722 1
+1657 1722 27565
+1928 1722 23418
+1929 1722 46784
+1930 1722 46784
+1948 1722 4381
+1956 1722 65034
+1963 1722 40932
+1965 1722 28749
+1968 1722 22503
+1969 1722 22503
+1970 1722 22503
+1971 1722 22793
+1972 1722 9073
+1973 1722 9550
+1974 1722 17171
+1977 1722 815
+1978 1722 16583
+1979 1722 16583
+1980 1722 39086
+1981 1722 16583
+2037 1722 22793
+2038 1722 9073
+2039 1722 9550
+2040 1722 17171
+2041 1722 2964
+2043 1722 815
+2044 1722 16583
+2045 1722 16583
+2046 1722 39086
+2047 1722 33166
+2058 1722 16583
+2278 1722 62597
+2279 1722 62597
+2280 1722 58810
+2281 1722 43483
+2282 1722 46407
+2283 1722 54728
+2284 1722 18276
+2285 1722 4517
+2286 1722 23631
+2287 1722 54728
+2288 1722 18276
+2289 1722 23822
+2290 1722 39828
+2291 1722 16197
+2292 1722 54728
+2293 1722 18276
+2294 1722 3581
+2295 1722 21658
+2296 1722 47029
+2297 1722 30832
+2300 1722 12034
+2301 1722 28136
+2302 1722 181
+2303 1722 47385
+2307 1722 56992
+2308 1722 7573
+2309 1722 45139
+2310 1722 32740
+2311 1722 32393
+2312 1722 32393
+2313 1722 27163
+2314 1722 45988
+2316 1722 59149
+2317 1722 59357
+2318 1722 64966
+2319 1722 16646
+2320 1722 50894
+2321 1722 18501
+2322 1722 27868
+2323 1722 46693
+2324 1722 51762
+2326 1722 47492
+2327 1722 50755
+2328 1722 16552
+2329 1722 34187
+2330 1722 60802
+2331 1722 42301
+2332 1722 55962
+2333 1722 48732
+2334 1722 24175
+2335 1722 7851
+2337 1722 58
+2338 1722 21442
+2339 1722 45458
+2340 1722 53319
+2341 1722 34883
+2342 1722 58103
+2398 1722 48077
+2399 1722 23299
+2400 1722 27266
+2401 1722 24770
+2402 1722 36651
+2404 1722 58827
+2405 1722 16316
+2406 1722 15843
+2407 1722 5885
+2408 1722 25771
+2419 1722 33189
+2476 1722 31503
+2477 1722 5650
+2478 1722 56586
+2479 1722 48447
+2480 1722 5556
+2481 1722 47343
+2482 1722 47884
+2483 1722 62847
+2484 1722 41905
+2485 1722 21104
+2486 1722 993
+2497 1722 46956
+2509 1722 60693
+4233 1722 27852657
+1641 1723 1
+1642 1723 1
+1646 1723 65520
+1657 1723 29861
+1928 1723 62139
+1929 1723 14817
+1930 1723 14817
+1948 1723 10941
+1956 1723 29443
+1963 1723 22912
+1965 1723 41432
+1968 1723 21981
+1969 1723 21981
+1970 1723 21981
+1971 1723 18535
+1972 1723 48446
+1973 1723 8277
+1974 1723 54134
+1977 1723 59787
+1978 1723 42320
+1979 1723 42320
+1980 1723 64301
+1981 1723 42320
+2037 1723 18535
+2038 1723 48446
+2039 1723 8277
+2040 1723 54134
+2041 1723 47967
+2043 1723 59787
+2044 1723 42320
+2045 1723 42320
+2046 1723 64301
+2047 1723 19119
+2058 1723 42320
+2278 1723 61176
+2279 1723 61176
+2280 1723 2342
+2281 1723 38592
+2282 1723 42937
+2283 1723 22162
+2284 1723 2062
+2285 1723 35148
+2286 1723 57732
+2287 1723 22162
+2288 1723 2062
+2289 1723 62174
+2290 1723 46398
+2291 1723 54187
+2292 1723 22162
+2293 1723 2062
+2294 1723 8692
+2295 1723 11223
+2296 1723 13687
+2297 1723 25021
+2300 1723 23044
+2301 1723 32219
+2302 1723 15438
+2303 1723 21489
+2307 1723 37073
+2308 1723 46248
+2309 1723 29467
+2310 1723 49490
+2311 1723 40470
+2312 1723 40470
+2313 1723 17274
+2314 1723 35933
+2316 1723 55423
+2317 1723 19331
+2318 1723 24918
+2319 1723 18930
+2320 1723 27889
+2321 1723 52940
+2322 1723 45065
+2323 1723 63724
+2324 1723 33467
+2326 1723 63768
+2327 1723 38839
+2328 1723 2123
+2329 1723 48971
+2330 1723 51933
+2331 1723 64514
+2332 1723 21855
+2333 1723 14113
+2334 1723 51381
+2335 1723 45113
+2337 1723 35593
+2338 1723 33240
+2339 1723 3027
+2340 1723 32043
+2341 1723 21281
+2342 1723 22288
+2398 1723 10070
+2399 1723 35252
+2400 1723 37306
+2401 1723 25714
+2402 1723 3700
+2404 1723 41946
+2405 1723 13193
+2406 1723 47633
+2407 1723 50225
+2408 1723 61405
+2419 1723 39117
+2476 1723 46333
+2477 1723 58130
+2478 1723 4321
+2479 1723 58147
+2480 1723 35423
+2481 1723 42809
+2482 1723 58008
+2483 1723 62331
+2484 1723 53315
+2485 1723 12268
+2486 1723 44892
+2497 1723 22308
+2509 1723 27175
+4234 1723 27852657
+1642 1724 1
+1660 1724 5661
+1667 1724 52649
+1675 1724 48296
+1684 1724 13971
+1694 1724 13971
+1973 1724 11795
+2020 1724 56712
+2029 1724 20357
+2039 1724 9009
+2050 1724 11185
+2126 1724 44686
+2149 1724 36229
+2153 1724 54735
+2158 1724 41202
+2164 1724 38198
+2171 1724 38198
+2180 1724 63921
+2181 1724 60074
+2185 1724 32072
+2189 1724 33607
+2194 1724 23281
+2200 1724 48652
+2207 1724 21854
+2215 1724 49177
+2225 1724 59920
+2226 1724 23474
+2227 1724 13089
+2234 1724 39402
+2239 1724 30310
+2245 1724 17276
+2252 1724 59468
+2260 1724 57307
+2269 1724 8130
+2280 1724 39834
+2281 1724 9131
+2282 1724 13910
+2285 1724 156
+2294 1724 58818
+2300 1724 41771
+2307 1724 25191
+2315 1724 47375
+2324 1724 12526
+2334 1724 9642
+2346 1724 31074
+2347 1724 18794
+2348 1724 47003
+2351 1724 28020
+2355 1724 521
+2366 1724 30725
+2373 1724 61641
+2381 1724 14513
+2390 1724 46984
+2400 1724 32892
+2411 1724 53996
+2424 1724 21976
+2425 1724 536
+2426 1724 30940
+2429 1724 64503
+2433 1724 36125
+2438 1724 6493
+2444 1724 25945
+2451 1724 48506
+2459 1724 62973
+2468 1724 38991
+2478 1724 25894
+2489 1724 58952
+2501 1724 28426
+4235 1724 27852657
+1643 1725 1
+1988 1725 65520
+1993 1725 1
+2297 1725 335
+2355 1725 45442
+2356 1725 54188
+2357 1725 54188
+2374 1725 64940
+2375 1725 27936
+2383 1725 11352
+2390 1725 39363
+2392 1725 33493
+2395 1725 17138
+2396 1725 17138
+2397 1725 17138
+2398 1725 41096
+2399 1725 45323
+2400 1725 28963
+2401 1725 65396
+2404 1725 9940
+2405 1725 53083
+2406 1725 53083
+2407 1725 4700
+2408 1725 53083
+2409 1725 41096
+2410 1725 45323
+2411 1725 28963
+2412 1725 65396
+2413 1725 30165
+2415 1725 9940
+2416 1725 53083
+2417 1725 53083
+2418 1725 4700
+2419 1725 40645
+2420 1725 53083
+2422 1725 49981
+2423 1725 49981
+2424 1725 62112
+2425 1725 51525
+2426 1725 1544
+2427 1725 10813
+2428 1725 54858
+2429 1725 34487
+2430 1725 32943
+2431 1725 12633
+2432 1725 56678
+2433 1725 17656
+2434 1725 43460
+2435 1725 10517
+2436 1725 12633
+2437 1725 56678
+2438 1725 64476
+2439 1725 25656
+2440 1725 54486
+2441 1725 43969
+2444 1725 18405
+2445 1725 37226
+2446 1725 54306
+2447 1725 8843
+2451 1725 12817
+2452 1725 4241
+2453 1725 21321
+2454 1725 28641
+2455 1725 18641
+2456 1725 18641
+2457 1725 46819
+2458 1725 16019
+2460 1725 14377
+2461 1725 46196
+2462 1725 47394
+2463 1725 4099
+2464 1725 24090
+2465 1725 5449
+2466 1725 35797
+2467 1725 4997
+2468 1725 26074
+2470 1725 7690
+2471 1725 47307
+2472 1725 60323
+2473 1725 57644
+2474 1725 31208
+2475 1725 25759
+2476 1725 22643
+2477 1725 9457
+2478 1725 1479
+2479 1725 20212
+2481 1725 511
+2482 1725 54442
+2483 1725 16910
+2484 1725 26563
+2485 1725 33693
+2486 1725 7934
+2487 1725 1932
+2488 1725 22227
+2489 1725 61420
+2490 1725 39790
+2491 1725 28187
+2493 1725 49365
+2494 1725 61572
+2495 1725 19588
+2496 1725 26801
+2497 1725 21306
+2498 1725 13372
+2499 1725 38666
+2500 1725 56717
+2501 1725 39225
+2502 1725 43948
+2503 1725 54721
+2504 1725 31183
+2505 1725 37743
+2506 1725 25938
+2507 1725 5119
+2508 1725 11343
+2509 1725 31392
+2510 1725 25666
+2511 1725 8783
+4236 1725 27852657
+1644 1726 1
+1989 1726 65520
+1993 1726 65520
+2355 1726 18552
+2356 1726 56398
+2357 1726 56398
+2390 1726 4812
+2392 1726 52624
+2395 1726 50882
+2396 1726 50882
+2397 1726 50882
+2398 1726 20091
+2399 1726 20091
+2400 1726 24903
+2401 1726 709
+2404 1726 46973
+2405 1726 17127
+2406 1726 17127
+2407 1726 2488
+2408 1726 17127
+2409 1726 20091
+2410 1726 20091
+2411 1726 24903
+2412 1726 709
+2413 1726 709
+2415 1726 46973
+2416 1726 17127
+2417 1726 17127
+2418 1726 2488
+2419 1726 34254
+2420 1726 17127
+2422 1726 59609
+2423 1726 59609
+2424 1726 24583
+2425 1726 22994
+2426 1726 28906
+2427 1726 9445
+2428 1726 27049
+2429 1726 60578
+2430 1726 31672
+2431 1726 9445
+2432 1726 27049
+2433 1726 56402
+2434 1726 19094
+2435 1726 52943
+2436 1726 9445
+2437 1726 27049
+2438 1726 62775
+2439 1726 39414
+2440 1726 42461
+2441 1726 55039
+2444 1726 32194
+2445 1726 14367
+2446 1726 2083
+2447 1726 31047
+2451 1726 50816
+2452 1726 32989
+2453 1726 20705
+2454 1726 37385
+2455 1726 47297
+2456 1726 47297
+2457 1726 8572
+2458 1726 39942
+2460 1726 4030
+2461 1726 57267
+2462 1726 56120
+2463 1726 61244
+2464 1726 60036
+2465 1726 12739
+2466 1726 37300
+2467 1726 3149
+2468 1726 15350
+2470 1726 19525
+2471 1726 50572
+2472 1726 2096
+2473 1726 59845
+2474 1726 37817
+2475 1726 25078
+2476 1726 8709
+2477 1726 40080
+2478 1726 52280
+2479 1726 61895
+2481 1726 30740
+2482 1726 21850
+2483 1726 10420
+2484 1726 31035
+2485 1726 17087
+2486 1726 57530
+2487 1726 19185
+2488 1726 4312
+2489 1726 20619
+2490 1726 11615
+2491 1726 49176
+2493 1726 4716
+2494 1726 12047
+2495 1726 62646
+2496 1726 48469
+2497 1726 48823
+2498 1726 56814
+2499 1726 40244
+2500 1726 2289
+2501 1726 11266
+2502 1726 40490
+2503 1726 46180
+2504 1726 8907
+2505 1726 30207
+2506 1726 13938
+2507 1726 42204
+2508 1726 58297
+2509 1726 11844
+2510 1726 67
+2511 1726 3496
+4237 1726 27852657
+1645 1727 1
+1646 1727 1
+1990 1727 65520
+1991 1727 65520
+1996 1727 1
+2355 1727 37137
+2356 1727 38335
+2357 1727 38335
+2390 1727 6729
+2392 1727 40515
+2395 1727 41537
+2396 1727 41537
+2397 1727 41537
+2398 1727 60429
+2399 1727 60429
+2400 1727 1637
+2401 1727 18488
+2404 1727 4939
+2405 1727 61190
+2406 1727 61190
+2407 1727 37206
+2408 1727 61190
+2409 1727 60429
+2410 1727 60429
+2411 1727 1637
+2412 1727 18488
+2413 1727 18488
+2415 1727 4939
+2416 1727 61190
+2417 1727 61190
+2418 1727 37206
+2419 1727 56859
+2420 1727 61190
+2422 1727 1655
+2423 1727 1655
+2424 1727 48604
+2425 1727 17720
+2426 1727 16065
+2427 1727 1955
+2428 1727 47521
+2429 1727 47420
+2430 1727 31355
+2431 1727 1955
+2432 1727 47521
+2433 1727 38478
+2434 1727 16454
+2435 1727 50620
+2436 1727 1955
+2437 1727 47521
+2438 1727 32708
+2439 1727 11679
+2440 1727 61796
+2441 1727 11176
+2444 1727 19101
+2445 1727 17599
+2446 1727 21195
+2447 1727 21805
+2451 1727 52032
+2452 1727 50530
+2453 1727 54126
+2454 1727 58332
+2455 1727 30852
+2456 1727 30852
+2457 1727 28747
+2458 1727 50120
+2460 1727 6437
+2461 1727 10033
+2462 1727 12737
+2463 1727 31847
+2464 1727 1563
+2465 1727 36232
+2466 1727 11291
+2467 1727 32664
+2468 1727 39718
+2470 1727 29317
+2471 1727 51122
+2472 1727 26077
+2473 1727 50797
+2474 1727 49202
+2475 1727 12970
+2476 1727 29795
+2477 1727 51168
+2478 1727 58223
+2479 1727 64273
+2481 1727 57717
+2482 1727 55711
+2483 1727 62492
+2484 1727 47539
+2485 1727 15928
+2486 1727 2958
+2487 1727 27951
+2488 1727 26436
+2489 1727 3550
+2490 1727 3651
+2491 1727 42255
+2493 1727 42293
+2494 1727 13243
+2495 1727 39224
+2496 1727 7296
+2497 1727 34395
+2498 1727 31437
+2499 1727 10460
+2500 1727 36312
+2501 1727 64180
+2502 1727 3562
+2503 1727 62964
+2504 1727 59973
+2505 1727 54118
+2506 1727 53056
+2507 1727 43544
+2508 1727 28912
+2509 1727 22690
+2510 1727 25816
+2511 1727 31773
+4238 1727 27852657
+1646 1728 1
+1790 1728 9853
+1794 1728 20114
+1829 1728 59101
+1869 1728 45901
+1874 1728 10525
+1892 1728 29266
+1900 1728 29266
+1909 1728 29266
+1922 1728 64835
+1923 1728 64835
+1924 1728 45215
+1925 1728 13457
+1940 1728 11904
+1947 1728 59606
+1955 1728 59606
+1964 1728 23351
+1974 1728 59606
+1988 1728 64835
+1989 1728 64835
+1990 1728 45215
+1991 1728 13456
+1995 1728 59192
+2006 1728 11904
+2013 1728 59606
+2021 1728 59606
+2030 1728 23351
+2040 1728 53691
+2051 1728 59606
+2123 1728 49883
+2127 1728 40591
+2132 1728 25795
+2149 1728 14299
+2150 1728 56394
+2154 1728 47102
+2159 1728 6120
+2165 1728 29473
+2172 1728 29473
+2183 1728 21576
+2184 1728 21576
+2186 1728 12982
+2190 1728 9276
+2195 1728 62390
+2201 1728 31418
+2208 1728 17463
+2216 1728 53511
+2228 1728 28060
+2229 1728 28060
+2230 1728 28938
+2235 1728 24859
+2240 1728 17629
+2246 1728 47489
+2253 1728 45768
+2261 1728 41310
+2270 1728 53320
+2283 1728 49817
+2284 1728 49817
+2285 1728 50695
+2286 1728 55277
+2295 1728 2519
+2301 1728 53392
+2308 1728 1283
+2316 1728 51867
+2325 1728 17662
+2335 1728 29863
+2349 1728 5010
+2350 1728 5010
+2351 1728 544
+2352 1728 38590
+2356 1728 58441
+2367 1728 63039
+2374 1728 45839
+2382 1728 31310
+2391 1728 47584
+2401 1728 10065
+2412 1728 45723
+2427 1728 57173
+2428 1728 57173
+2429 1728 34442
+2430 1728 39673
+2434 1728 15105
+2439 1728 33200
+2445 1728 31707
+2452 1728 49289
+2460 1728 57343
+2469 1728 37704
+2479 1728 39967
+2490 1728 54936
+2502 1728 35488
+4239 1728 27852657
+1647 1729 1
+1649 1729 11868
+1650 1729 51084
+1651 1729 51084
+1656 1729 670
+1657 1729 15107
+1662 1729 3670
+1668 1729 6468
+1669 1729 24379
+1670 1729 4776
+1671 1729 16947
+1672 1729 16947
+1673 1729 65330
+1674 1729 6520
+1676 1729 51232
+1677 1729 33010
+1678 1729 59358
+1679 1729 40540
+1680 1729 49734
+1681 1729 32787
+1682 1729 1464
+1683 1729 43705
+1684 1729 57176
+1686 1729 33626
+1687 1729 28915
+1688 1729 33754
+1689 1729 46392
+1690 1729 10825
+1691 1729 43559
+1692 1729 60704
+1693 1729 15923
+1694 1729 53368
+1695 1729 55064
+1697 1729 59816
+1698 1729 4048
+1699 1729 52423
+1700 1729 31890
+1701 1729 44719
+1702 1729 1160
+1971 1729 37998
+1972 1729 22953
+1973 1729 50801
+1974 1729 53890
+1975 1729 29396
+1977 1729 51119
+1978 1729 27621
+1979 1729 63380
+1980 1729 8458
+1981 1729 56265
+2047 1729 55105
+2332 1729 27031
+2333 1729 48157
+2334 1729 40447
+2335 1729 1181
+2336 1729 20862
+2337 1729 9897
+2338 1729 44622
+2339 1729 47124
+2340 1729 41304
+2341 1729 1145
+2342 1729 7299
+2408 1729 60410
+2486 1729 43710
+4240 1729 27852657
+1648 1730 1
+1649 1730 53654
+1650 1730 14438
+1651 1730 14438
+1656 1730 64852
+1657 1730 50414
+1662 1730 64977
+1668 1730 59053
+1669 1730 41452
+1670 1730 8401
+1671 1730 16452
+1672 1730 16452
+1673 1730 3505
+1674 1730 25738
+1676 1730 33357
+1677 1730 51901
+1678 1730 10055
+1679 1730 25280
+1680 1730 16248
+1681 1730 65317
+1682 1730 26568
+1683 1730 22309
+1684 1730 8838
+1686 1730 674
+1687 1730 25071
+1688 1730 59514
+1689 1730 15010
+1690 1730 37960
+1691 1730 38164
+1692 1730 35901
+1693 1730 34153
+1694 1730 62229
+1695 1730 60533
+1697 1730 47385
+1698 1730 38492
+1699 1730 52609
+1700 1730 63135
+1701 1730 49623
+1702 1730 11459
+1971 1730 21027
+1972 1730 37123
+1973 1730 9275
+1974 1730 6186
+1975 1730 29179
+1977 1730 18750
+1978 1730 14527
+1979 1730 43850
+1980 1730 26416
+1981 1730 59818
+2047 1730 48359
+2332 1730 10380
+2333 1730 7736
+2334 1730 15446
+2335 1730 54712
+2336 1730 43794
+2337 1730 7095
+2338 1730 30560
+2339 1730 13450
+2340 1730 17069
+2341 1730 6900
+2342 1730 23179
+2408 1730 38175
+2486 1730 64846
+4241 1730 27852657
+1649 1731 1
+1662 1731 5661
+1669 1731 52649
+1677 1731 48296
+1686 1731 13971
+1696 1731 13971
+1975 1731 11795
+2022 1731 56712
+2031 1731 20357
+2041 1731 9009
+2052 1731 11185
+2128 1731 44686
+2154 1731 36229
+2155 1731 54735
+2160 1731 41202
+2166 1731 38198
+2173 1731 38198
+2187 1731 63921
+2188 1731 60074
+2190 1731 32072
+2191 1731 33607
+2196 1731 23281
+2202 1731 48652
+2209 1731 21854
+2217 1731 49177
+2232 1731 59920
+2233 1731 23474
+2234 1731 13089
+2236 1731 39402
+2241 1731 30310
+2247 1731 17276
+2254 1731 59468
+2262 1731 57307
+2271 1731 8130
+2287 1731 39834
+2288 1731 9131
+2289 1731 13910
+2290 1731 156
+2296 1731 58818
+2302 1731 41771
+2309 1731 25191
+2317 1731 47375
+2326 1731 12526
+2336 1731 9642
+2353 1731 31074
+2354 1731 18794
+2355 1731 47003
+2356 1731 28020
+2357 1731 521
+2368 1731 30725
+2375 1731 61641
+2383 1731 14513
+2392 1731 46984
+2402 1731 32892
+2413 1731 53996
+2431 1731 21976
+2432 1731 536
+2433 1731 30940
+2434 1731 64503
+2435 1731 36125
+2440 1731 6493
+2446 1731 25945
+2453 1731 48506
+2461 1731 62973
+2470 1731 38991
+2480 1731 25894
+2491 1731 58952
+2503 1731 28426
+4242 1731 27852657
+1650 1732 1
+1794 1732 9853
+1795 1732 20114
+1830 1732 59101
+1873 1732 45901
+1875 1732 10525
+1893 1732 29266
+1901 1732 29266
+1910 1732 29266
+1926 1732 64835
+1927 1732 64835
+1928 1732 45215
+1929 1732 13457
+1941 1732 11904
+1948 1732 59606
+1956 1732 59606
+1965 1732 23351
+1975 1732 59606
+1992 1732 64835
+1993 1732 64835
+1994 1732 45215
+1995 1732 13456
+1996 1732 59192
+2007 1732 11904
+2014 1732 59606
+2022 1732 59606
+2031 1732 23351
+2041 1732 53691
+2052 1732 59606
+2127 1732 49883
+2128 1732 40591
+2133 1732 25795
+2153 1732 14299
+2154 1732 56394
+2155 1732 47102
+2160 1732 6120
+2166 1732 29473
+2173 1732 29473
+2187 1732 21576
+2188 1732 21576
+2190 1732 12982
+2191 1732 9276
+2196 1732 62390
+2202 1732 31418
+2209 1732 17463
+2217 1732 53511
+2232 1732 28060
+2233 1732 28060
+2234 1732 28938
+2236 1732 24859
+2241 1732 17629
+2247 1732 47489
+2254 1732 45768
+2262 1732 41310
+2271 1732 53320
+2287 1732 49817
+2288 1732 49817
+2289 1732 50695
+2290 1732 55277
+2296 1732 2519
+2302 1732 53392
+2309 1732 1283
+2317 1732 51867
+2326 1732 17662
+2336 1732 29863
+2353 1732 5010
+2354 1732 5010
+2355 1732 544
+2356 1732 38590
+2357 1732 58441
+2368 1732 63039
+2375 1732 45839
+2383 1732 31310
+2392 1732 47584
+2402 1732 10065
+2413 1732 45723
+2431 1732 57173
+2432 1732 57173
+2433 1732 34442
+2434 1732 39673
+2435 1732 15105
+2440 1732 33200
+2446 1732 31707
+2453 1732 49289
+2461 1732 57343
+2470 1732 37704
+2480 1732 39967
+2491 1732 54936
+2503 1732 35488
+4243 1732 27852657
+1651 1733 1
+2480 1733 65520
+4244 1733 27852657
+1652 1734 1
+1674 1734 1
+1683 1734 1
+1684 1734 49150
+1693 1734 1
+1694 1734 49150
+1695 1734 49150
+1963 1734 18
+1972 1734 1
+1973 1734 49150
+1974 1734 16391
+2040 1734 32762
+2041 1734 32762
+2314 1734 8183
+2323 1734 8183
+2324 1734 8183
+2332 1734 24572
+2333 1734 4089
+2334 1734 32755
+2335 1734 32764
+2337 1734 61427
+2398 1734 6
+2399 1734 36855
+2400 1734 36855
+2401 1734 8192
+2402 1734 8192
+2476 1734 1
+2477 1734 24568
+2478 1734 24568
+2479 1734 24568
+2480 1734 24568
+2481 1734 24568
+2486 1734 54268
+2497 1734 43011
+2509 1734 31222
+4245 1734 27852657
+1653 1735 1
+1654 1735 1
+1657 1735 1
+1674 1735 65520
+1683 1735 65520
+1684 1735 49137
+1693 1735 65520
+1694 1735 49137
+1695 1735 49137
+1963 1735 43674
+1972 1735 65520
+1973 1735 27296
+1974 1735 16374
+2039 1735 43680
+2040 1735 32758
+2041 1735 32758
+2314 1735 57338
+2323 1735 57338
+2324 1735 62797
+2333 1735 20483
+2334 1735 38227
+2335 1735 49136
+2337 1735 12285
+2399 1735 28672
+2400 1735 9561
+2401 1735 19113
+2402 1735 19113
+2477 1735 40954
+2478 1735 36859
+2479 1735 54604
+2480 1735 54604
+2481 1735 54605
+2486 1735 25590
+2497 1735 51182
+2509 1735 64676
+4246 1735 27852657
+1654 1736 1
+1657 1736 59727
+1928 1736 41525
+1929 1736 20236
+1930 1736 20236
+1948 1736 65478
+1956 1736 12089
+1963 1736 3500
+1965 1736 14455
+1968 1736 14913
+1969 1736 14913
+1970 1736 14913
+1971 1736 34422
+1972 1736 26675
+1973 1736 35055
+1974 1736 43515
+1977 1736 34339
+1978 1736 54465
+1979 1736 54465
+1980 1736 3857
+1981 1736 54465
+2037 1736 34422
+2038 1736 26675
+2039 1736 35055
+2040 1736 43515
+2041 1736 47857
+2043 1736 34339
+2044 1736 54465
+2045 1736 54465
+2046 1736 3857
+2047 1736 43409
+2058 1736 54465
+2278 1736 49055
+2279 1736 49055
+2280 1736 51736
+2281 1736 40230
+2282 1736 56696
+2283 1736 2422
+2284 1736 16197
+2285 1736 25982
+2286 1736 34807
+2287 1736 2422
+2288 1736 16197
+2289 1736 47740
+2290 1736 5273
+2291 1736 35987
+2292 1736 2422
+2293 1736 16197
+2294 1736 56868
+2295 1736 18164
+2296 1736 38170
+2297 1736 2183
+2300 1736 18702
+2301 1736 33501
+2302 1736 26427
+2303 1736 36407
+2307 1736 27669
+2308 1736 42468
+2309 1736 35394
+2310 1736 50306
+2311 1736 14792
+2312 1736 14792
+2313 1736 27789
+2314 1736 27323
+2316 1736 1583
+2317 1736 6586
+2318 1736 44145
+2319 1736 19029
+2320 1736 58328
+2321 1736 43536
+2322 1736 29538
+2323 1736 29072
+2324 1736 55826
+2326 1736 58161
+2327 1736 25786
+2328 1736 31085
+2329 1736 4195
+2330 1736 54432
+2331 1736 10896
+2332 1736 27619
+2333 1736 27591
+2334 1736 50163
+2335 1736 21545
+2337 1736 33584
+2338 1736 40556
+2339 1736 26997
+2340 1736 5454
+2341 1736 34707
+2342 1736 23811
+2398 1736 50681
+2399 1736 37687
+2400 1736 4934
+2401 1736 19669
+2402 1736 2924
+2404 1736 29555
+2405 1736 17817
+2406 1736 24064
+2407 1736 20117
+2408 1736 58660
+2419 1736 34849
+2476 1736 41416
+2477 1736 51253
+2478 1736 1552
+2479 1736 56985
+2480 1736 19047
+2481 1736 49616
+2482 1736 21820
+2483 1736 31761
+2484 1736 24529
+2485 1736 58769
+2486 1736 26080
+2497 1736 56104
+2509 1736 18383
+4247 1736 27852657
+1655 1737 1
+1926 1737 1
+1927 1737 1
+1928 1737 1
+1929 1737 1
+1930 1737 1
+2287 1737 54601
+2288 1737 54601
+2289 1737 54601
+2290 1737 54601
+2291 1737 54601
+2292 1737 54601
+2293 1737 54601
+2294 1737 54601
+2295 1737 54601
+2296 1737 43681
+2297 1737 54601
+2335 1737 54601
+2401 1737 54601
+2402 1737 32761
+2476 1737 47776
+2477 1737 47776
+2478 1737 47776
+2479 1737 30031
+2480 1737 42317
+2481 1737 42316
+2509 1737 23888
+4248 1737 27852657
+1656 1738 1
+2481 1738 65520
+4249 1738 27852657
+1657 1739 1
+2333 1739 46993
+2334 1739 49307
+2337 1739 53855
+2338 1739 15705
+2339 1739 15705
+2340 1739 15705
+2341 1739 15705
+2342 1739 15705
+2408 1739 32371
+2416 1739 52969
+2417 1739 64255
+2418 1739 5322
+2419 1739 27991
+2420 1739 11325
+2446 1739 25785
+2452 1739 44280
+2453 1739 28170
+2454 1739 46115
+2455 1739 62083
+2456 1739 62083
+2457 1739 2105
+2458 1739 29275
+2460 1739 46530
+2461 1739 11233
+2462 1739 64654
+2463 1739 46560
+2464 1739 17125
+2465 1739 20563
+2466 1739 8616
+2467 1739 37130
+2468 1739 52447
+2470 1739 1016
+2471 1739 19217
+2472 1739 16271
+2473 1739 26932
+2474 1739 46830
+2475 1739 26267
+2476 1739 32725
+2477 1739 44614
+2478 1739 30171
+2479 1739 4043
+2481 1739 31068
+2482 1739 40843
+2483 1739 35279
+2484 1739 2272
+2485 1739 22147
+2486 1739 40301
+2487 1739 15731
+2488 1739 51058
+2489 1739 2247
+2490 1739 40472
+2491 1739 31767
+2493 1739 54269
+2494 1739 45630
+2495 1739 55657
+2496 1739 8056
+2497 1739 48780
+2498 1739 5433
+2499 1739 50761
+2500 1739 7380
+2501 1739 58203
+2502 1739 19626
+2503 1739 64086
+2504 1739 41368
+2505 1739 61213
+2506 1739 57749
+2507 1739 37493
+2508 1739 19675
+2509 1739 58052
+2510 1739 65294
+2511 1739 6491
+4250 1739 27852657
+1658 1740 1
+2486 1740 65520
+4251 1740 27852657
+1659 1741 1
+1660 1741 1
+1661 1741 1
+1662 1741 1
+1663 1741 1
+1667 1741 1
+1668 1741 1
+1669 1741 1
+1670 1741 1
+1676 1741 1
+1677 1741 1
+1678 1741 1
+1686 1741 1
+1687 1741 1
+1697 1741 1
+2338 1741 32761
+2339 1741 32761
+2340 1741 32761
+2341 1741 32761
+2342 1741 32761
+2408 1741 32761
+2486 1741 24573
+4252 1741 27852657
+1660 1742 1
+1947 1742 1024
+1948 1742 14431
+1956 1742 32504
+1963 1742 5456
+1965 1742 60601
+1968 1742 20152
+1969 1742 20152
+1970 1742 20152
+1971 1742 31789
+1972 1742 31789
+1973 1742 48671
+1974 1742 24455
+1977 1742 37521
+1978 1742 53384
+1979 1742 53384
+1980 1742 8015
+1981 1742 53384
+2037 1742 31789
+2038 1742 31789
+2039 1742 48671
+2040 1742 24455
+2041 1742 57267
+2043 1742 37521
+2044 1742 53384
+2045 1742 53384
+2046 1742 8015
+2047 1742 41247
+2058 1742 53384
+2300 1742 9206
+2301 1742 8747
+2302 1742 2436
+2303 1742 62497
+2307 1742 46940
+2308 1742 489
+2309 1742 59699
+2310 1742 35861
+2311 1742 48492
+2312 1742 48492
+2313 1742 20056
+2314 1742 20056
+2316 1742 16344
+2317 1742 43231
+2318 1742 11764
+2319 1742 18475
+2320 1742 4060
+2321 1742 21089
+2322 1742 15848
+2323 1742 15848
+2324 1742 16782
+2326 1742 48601
+2327 1742 39078
+2328 1742 39072
+2329 1742 62831
+2330 1742 58414
+2331 1742 37325
+2332 1742 14959
+2333 1742 14959
+2334 1742 56504
+2335 1742 37309
+2337 1742 5883
+2338 1742 19640
+2339 1742 61218
+2340 1742 43903
+2341 1742 49808
+2342 1742 12483
+2398 1742 2649
+2399 1742 2649
+2400 1742 13490
+2401 1742 26116
+2402 1742 20158
+2404 1742 1131
+2405 1742 3539
+2406 1742 186
+2407 1742 26104
+2408 1742 25306
+2419 1742 12823
+2476 1742 14375
+2477 1742 14375
+2478 1742 19164
+2479 1742 5806
+2480 1742 26379
+2481 1742 61858
+2482 1742 20081
+2483 1742 59834
+2484 1742 28443
+2485 1742 763
+2486 1742 54895
+2497 1742 22479
+2509 1742 43649
+4253 1742 27852657
+1661 1743 1
+1668 1743 1
+1695 1743 1
+1940 1743 1
+1941 1743 32762
+1947 1743 1
+1948 1743 32762
+1956 1743 32761
+1963 1743 1
+1965 1743 32760
+1973 1743 1
+1974 1743 32764
+2039 1743 1
+2040 1743 32763
+2041 1743 3
+2301 1743 61427
+2302 1743 8192
+2303 1743 8192
+2308 1743 61427
+2309 1743 8192
+2310 1743 8192
+2316 1743 17746
+2317 1743 30032
+2318 1743 30032
+2324 1743 24572
+2326 1743 40952
+2327 1743 40952
+2334 1743 24572
+2335 1743 28670
+2337 1743 40952
+2400 1743 61427
+2401 1743 12287
+2402 1743 8190
+2478 1743 38903
+2479 1743 63473
+2480 1743 36855
+2481 1743 36855
+2482 1743 45047
+2483 1743 45047
+2484 1743 32761
+2485 1743 50506
+2486 1743 50507
+2497 1743 23892
+2509 1743 5
+4254 1743 27852657
+1662 1744 1
+2482 1744 65520
+4255 1744 27852657
+1663 1745 1
+1670 1745 1
+1678 1745 1
+1687 1745 1
+1697 1745 1
+1965 1745 1
+2326 1745 54601
+2327 1745 54601
+2337 1745 32761
+2338 1745 54601
+2339 1745 54601
+2340 1745 54601
+2341 1745 54601
+2342 1745 54601
+2404 1745 54601
+2405 1745 54601
+2406 1745 54601
+2407 1745 54601
+2408 1745 43681
+2419 1745 54601
+2482 1745 47776
+2483 1745 47776
+2484 1745 47776
+2485 1745 30031
+2486 1745 42317
+2497 1745 42316
+2509 1745 23888
+4256 1745 27852657
+1664 1746 1
+1698 1746 15581
+1699 1746 12923
+1700 1746 63964
+1701 1746 26595
+1702 1746 26595
+1981 1746 61605
+2056 1746 20990
+2057 1746 65061
+2058 1746 51249
+2059 1746 20738
+2257 1746 42190
+2266 1746 23331
+2274 1746 62933
+2275 1746 38228
+2276 1746 14897
+2304 1746 58979
+2312 1746 10349
+2321 1746 55172
+2331 1746 43566
+2338 1746 61581
+2339 1746 39942
+2340 1746 3649
+2341 1746 42365
+2342 1746 57720
+2370 1746 56675
+2378 1746 39556
+2387 1746 25965
+2397 1746 56910
+2408 1746 48866
+2417 1746 33474
+2418 1746 18140
+2419 1746 55805
+2420 1746 12628
+2448 1746 30744
+2455 1746 49866
+2456 1746 54218
+2457 1746 13861
+2458 1746 13861
+2460 1746 13278
+2461 1746 13278
+2462 1746 13278
+2463 1746 63495
+2464 1746 11935
+2465 1746 23238
+2466 1746 19347
+2467 1746 19347
+2468 1746 19347
+2470 1746 36639
+2471 1746 36639
+2472 1746 1556
+2473 1746 22841
+2474 1746 11104
+2475 1746 38529
+2476 1746 3857
+2477 1746 3857
+2478 1746 3857
+2479 1746 3857
+2481 1746 38649
+2482 1746 7350
+2483 1746 10123
+2484 1746 10896
+2485 1746 21396
+2486 1746 52946
+2487 1746 51667
+2488 1746 51667
+2489 1746 51667
+2490 1746 51667
+2491 1746 51667
+2493 1746 16915
+2494 1746 13512
+2495 1746 32962
+2496 1746 48472
+2497 1746 38304
+2498 1746 12684
+2499 1746 44722
+2500 1746 44722
+2501 1746 44722
+2502 1746 44722
+2503 1746 44722
+2504 1746 44722
+2505 1746 27538
+2506 1746 14665
+2507 1746 53537
+2508 1746 1504
+2509 1746 14516
+2510 1746 14904
+2511 1746 62175
+4257 1746 27852657
+1665 1747 1
+1673 1747 1
+1674 1747 1
+1682 1747 1
+1683 1747 1
+1684 1747 1
+1692 1747 1
+1693 1747 1
+1694 1747 1
+1695 1747 1
+1971 1747 1
+1972 1747 1
+1973 1747 1
+1974 1747 1
+1975 1747 1
+2332 1747 32761
+2333 1747 32761
+2334 1747 32761
+2335 1747 32761
+2336 1747 32761
+2337 1747 32761
+2486 1747 24573
+4258 1747 27852657
+1666 1748 1
+2486 1748 65520
+4259 1748 27852657
+1667 1749 1
+1947 1749 8829
+1948 1749 50823
+1956 1749 19605
+1963 1749 28867
+1965 1749 37932
+1968 1749 42040
+1969 1749 42040
+1970 1749 42040
+1971 1749 9012
+1972 1749 9012
+1973 1749 37879
+1974 1749 15867
+1977 1749 58851
+1978 1749 38591
+1979 1749 38591
+1980 1749 15110
+1981 1749 38591
+2037 1749 9012
+2038 1749 9012
+2039 1749 37879
+2040 1749 15867
+2041 1749 61742
+2043 1749 58851
+2044 1749 38591
+2045 1749 38591
+2046 1749 15110
+2047 1749 11661
+2058 1749 38591
+2301 1749 20547
+2302 1749 32389
+2303 1749 59025
+2307 1749 36639
+2308 1749 29869
+2309 1749 41711
+2310 1749 25664
+2311 1749 13104
+2312 1749 13104
+2313 1749 59774
+2314 1749 59774
+2316 1749 49020
+2317 1749 28189
+2318 1749 34671
+2319 1749 2455
+2320 1749 64672
+2321 1749 51568
+2322 1749 47606
+2323 1749 47606
+2324 1749 37184
+2326 1749 143
+2327 1749 53704
+2328 1749 43721
+2329 1749 14241
+2330 1749 12712
+2331 1749 26665
+2332 1749 39411
+2333 1749 39411
+2334 1749 28989
+2335 1749 59010
+2337 1749 61177
+2338 1749 3701
+2339 1749 10356
+2340 1749 44650
+2341 1749 59032
+2342 1749 32367
+2398 1749 10250
+2399 1749 10250
+2400 1749 28636
+2401 1749 28426
+2402 1749 1026
+2404 1749 64366
+2405 1749 15565
+2406 1749 60474
+2407 1749 53312
+2408 1749 54954
+2419 1749 22587
+2476 1749 3350
+2477 1749 3350
+2478 1749 51832
+2479 1749 61666
+2480 1749 26468
+2481 1749 6558
+2482 1749 60678
+2483 1749 52680
+2484 1749 35538
+2485 1749 63895
+2486 1749 38413
+2497 1749 62837
+2509 1749 10398
+4260 1749 27852657
+1668 1750 1
+1695 1750 1
+2013 1750 65520
+2022 1750 1
+2051 1750 1
+2052 1750 2
+2374 1750 22476
+2375 1750 49303
+2383 1750 1846
+2390 1750 38060
+2392 1750 63229
+2395 1750 19857
+2396 1750 19857
+2397 1750 19857
+2398 1750 32502
+2399 1750 32502
+2400 1750 5041
+2401 1750 119
+2404 1750 34649
+2405 1750 48723
+2406 1750 48723
+2407 1750 3059
+2408 1750 48723
+2409 1750 40679
+2410 1750 40679
+2411 1750 13218
+2412 1750 16473
+2413 1750 18516
+2415 1750 34649
+2416 1750 48723
+2417 1750 48723
+2418 1750 3059
+2419 1750 31925
+2420 1750 48723
+2445 1750 39046
+2446 1750 50705
+2447 1750 6650
+2451 1750 45057
+2452 1750 53002
+2453 1750 38043
+2454 1750 57025
+2455 1750 8962
+2456 1750 8962
+2457 1750 32247
+2458 1750 32247
+2460 1750 21762
+2461 1750 51847
+2462 1750 7293
+2463 1750 60130
+2464 1750 22345
+2465 1750 13383
+2466 1750 18098
+2467 1750 18098
+2468 1750 47185
+2470 1750 44422
+2471 1750 36525
+2472 1750 54058
+2473 1750 39705
+2474 1750 53024
+2475 1750 39641
+2476 1750 57761
+2477 1750 57761
+2478 1750 21327
+2479 1750 41298
+2481 1750 12347
+2482 1750 65389
+2483 1750 56195
+2484 1750 10192
+2485 1750 58117
+2486 1750 18477
+2487 1750 16488
+2488 1750 16488
+2489 1750 7786
+2490 1750 22022
+2491 1750 6756
+2493 1750 23160
+2494 1750 65494
+2495 1750 30080
+2496 1750 16570
+2497 1750 46882
+2498 1750 65256
+2499 1750 27751
+2500 1750 27751
+2501 1750 32373
+2502 1750 33141
+2503 1750 50007
+2504 1750 25411
+2505 1750 25919
+2506 1750 4009
+2507 1750 4010
+2508 1750 61875
+2509 1750 9316
+2510 1750 31787
+2511 1750 25645
+4261 1750 27852657
+1669 1751 1
+2483 1751 65520
+4262 1751 27852657
+1670 1752 1
+1965 1752 55797
+1968 1752 8578
+1969 1752 8578
+1970 1752 8578
+1971 1752 42079
+1972 1752 42079
+1973 1752 42079
+1974 1752 42079
+1977 1752 4599
+1978 1752 7348
+1979 1752 7348
+1980 1752 15926
+1981 1752 7348
+2037 1752 42079
+2038 1752 42079
+2039 1752 42079
+2040 1752 42079
+2041 1752 42079
+2043 1752 4599
+2044 1752 7348
+2045 1752 7348
+2046 1752 15926
+2047 1752 14696
+2058 1752 7348
+2307 1752 21902
+2308 1752 21902
+2309 1752 21902
+2310 1752 21902
+2313 1752 43069
+2314 1752 43069
+2316 1752 36711
+2317 1752 36711
+2318 1752 36711
+2320 1752 43406
+2321 1752 43406
+2322 1752 9099
+2323 1752 9099
+2324 1752 9099
+2326 1752 4302
+2327 1752 4302
+2329 1752 62874
+2330 1752 47206
+2331 1752 3800
+2332 1752 31511
+2333 1752 31511
+2334 1752 31511
+2335 1752 31511
+2337 1752 51234
+2338 1752 27594
+2339 1752 47847
+2340 1752 62823
+2341 1752 33812
+2342 1752 30012
+2398 1752 18625
+2399 1752 18625
+2400 1752 18625
+2401 1752 18625
+2402 1752 18625
+2404 1752 48424
+2405 1752 19201
+2406 1752 38728
+2407 1752 21611
+2408 1752 11405
+2419 1752 46914
+2476 1752 25899
+2477 1752 25899
+2478 1752 25899
+2479 1752 25899
+2480 1752 25899
+2481 1752 25899
+2483 1752 58308
+2484 1752 41707
+2485 1752 48459
+2486 1752 25652
+2497 1752 9135
+2509 1752 55897
+4263 1752 27852657
+1671 1753 1
+1672 1753 1
+1680 1753 1
+1689 1753 1
+1699 1753 1
+1958 1753 65520
+1965 1753 51166
+1967 1753 65520
+1968 1753 46581
+1969 1753 41552
+1970 1753 41552
+1971 1753 35378
+1972 1753 35378
+1973 1753 35378
+1974 1753 35378
+1977 1753 46908
+1978 1753 1226
+1979 1753 16357
+1980 1753 62941
+1981 1753 21389
+2037 1753 35378
+2038 1753 35378
+2039 1753 35378
+2040 1753 35378
+2041 1753 35378
+2043 1753 46908
+2044 1753 1225
+2045 1753 16357
+2046 1753 62941
+2047 1753 42778
+2058 1753 21389
+2307 1753 41571
+2308 1753 41571
+2309 1753 41571
+2310 1753 41571
+2311 1753 28669
+2312 1753 28669
+2313 1753 10238
+2314 1753 10238
+2316 1753 28957
+2317 1753 28957
+2318 1753 28957
+2319 1753 53745
+2320 1753 29667
+2321 1753 998
+2322 1753 36981
+2323 1753 36981
+2324 1753 36981
+2326 1753 64158
+2327 1753 64158
+2328 1753 53745
+2329 1753 55427
+2330 1753 3564
+2331 1753 2566
+2332 1753 61512
+2333 1753 61512
+2334 1753 61512
+2335 1753 61512
+2337 1753 57128
+2338 1753 55201
+2339 1753 51943
+2340 1753 47214
+2341 1753 21863
+2342 1753 19297
+2398 1753 35322
+2399 1753 35322
+2400 1753 35322
+2401 1753 35322
+2402 1753 35322
+2404 1753 30152
+2405 1753 30234
+2406 1753 29500
+2407 1753 39036
+2408 1753 35777
+2419 1753 16480
+2476 1753 45184
+2477 1753 45184
+2478 1753 45184
+2479 1753 45184
+2480 1753 45184
+2481 1753 45184
+2482 1753 11773
+2483 1753 29123
+2484 1753 32072
+2485 1753 42409
+2486 1753 35253
+2497 1753 56644
+2509 1753 5737
+4264 1753 27852657
+1672 1754 1
+1698 1754 24985
+1699 1754 38044
+1700 1754 13436
+1701 1754 19774
+1702 1754 19774
+1981 1754 13874
+2056 1754 44885
+2057 1754 62795
+2058 1754 12873
+2059 1754 6973
+2257 1754 42190
+2266 1754 47694
+2274 1754 52055
+2275 1754 44415
+2276 1754 62242
+2312 1754 3807
+2321 1754 31337
+2331 1754 11318
+2338 1754 8853
+2339 1754 6800
+2340 1754 3171
+2341 1754 43937
+2342 1754 27853
+2378 1754 30710
+2387 1754 36796
+2397 1754 18057
+2408 1754 14128
+2417 1754 48975
+2418 1754 45710
+2419 1754 5080
+2420 1754 25903
+2455 1754 2010
+2456 1754 37106
+2457 1754 5657
+2458 1754 5657
+2460 1754 19778
+2461 1754 19778
+2462 1754 19778
+2463 1754 764
+2464 1754 34257
+2465 1754 42151
+2466 1754 50439
+2467 1754 50439
+2468 1754 50439
+2470 1754 28631
+2471 1754 28631
+2472 1754 30049
+2473 1754 45191
+2474 1754 47482
+2475 1754 631
+2476 1754 40657
+2477 1754 40657
+2478 1754 40657
+2479 1754 40657
+2481 1754 6172
+2482 1754 17865
+2483 1754 38415
+2484 1754 47386
+2485 1754 57838
+2486 1754 20113
+2487 1754 63743
+2488 1754 63743
+2489 1754 63743
+2490 1754 63743
+2491 1754 63743
+2493 1754 58981
+2494 1754 57223
+2495 1754 59830
+2496 1754 3141
+2497 1754 59630
+2498 1754 31919
+2499 1754 24799
+2500 1754 24799
+2501 1754 24799
+2502 1754 24799
+2503 1754 24799
+2504 1754 24799
+2505 1754 19395
+2506 1754 45909
+2507 1754 20765
+2508 1754 53866
+2509 1754 22252
+2510 1754 26662
+2511 1754 55597
+4265 1754 27852657
+1673 1755 1
+1948 1755 8948
+1956 1755 24445
+1962 1755 1408
+1963 1755 19083
+1965 1755 36199
+1968 1755 20635
+1969 1755 20635
+1970 1755 20635
+1971 1755 22384
+1972 1755 36073
+1973 1755 53748
+1974 1755 15608
+1977 1755 25742
+1978 1755 259
+1979 1755 259
+1980 1755 20894
+1981 1755 259
+2037 1755 22384
+2038 1755 36073
+2039 1755 53748
+2040 1755 15608
+2041 1755 53742
+2043 1755 25742
+2044 1755 259
+2045 1755 259
+2046 1755 20894
+2047 1755 518
+2058 1755 259
+2302 1755 4355
+2303 1755 15223
+2307 1755 48574
+2308 1755 48574
+2309 1755 52929
+2310 1755 36729
+2311 1755 54719
+2312 1755 54719
+2313 1755 60798
+2314 1755 11643
+2316 1755 63486
+2317 1755 59737
+2318 1755 36258
+2319 1755 62745
+2320 1755 54746
+2321 1755 27
+2322 1755 35550
+2323 1755 23485
+2324 1755 60397
+2326 1755 28572
+2327 1755 27559
+2328 1755 11139
+2329 1755 24141
+2330 1755 38552
+2331 1755 38525
+2332 1755 20030
+2333 1755 44820
+2334 1755 16211
+2335 1755 49455
+2337 1755 59773
+2338 1755 34549
+2339 1755 21317
+2340 1755 64826
+2341 1755 22242
+2342 1755 49238
+2398 1755 33494
+2399 1755 59546
+2400 1755 33280
+2401 1755 4063
+2402 1755 5174
+2404 1755 3829
+2405 1755 2955
+2406 1755 6087
+2407 1755 50020
+2408 1755 31757
+2419 1755 48040
+2476 1755 937
+2477 1755 35097
+2478 1755 2727
+2479 1755 2727
+2480 1755 13198
+2481 1755 14963
+2482 1755 51257
+2483 1755 53714
+2484 1755 64884
+2485 1755 19570
+2486 1755 47415
+2497 1755 40935
+2509 1755 57282
+4266 1755 27852657
+1674 1756 1
+1948 1756 56573
+1956 1756 41076
+1962 1756 64113
+1963 1756 46438
+1965 1756 36692
+1968 1756 60976
+1969 1756 60976
+1970 1756 60976
+1971 1756 165
+1972 1756 51997
+1973 1756 34322
+1974 1756 6941
+1977 1756 31372
+1978 1756 25596
+1979 1756 25596
+1980 1756 21051
+1981 1756 25596
+2037 1756 165
+2038 1756 51997
+2039 1756 34322
+2040 1756 6941
+2041 1756 34328
+2043 1756 31372
+2044 1756 25596
+2045 1756 25596
+2046 1756 21051
+2047 1756 51192
+2058 1756 25596
+2302 1756 61166
+2303 1756 50298
+2307 1756 24537
+2308 1756 24537
+2309 1756 20182
+2310 1756 36382
+2311 1756 10802
+2312 1756 10802
+2313 1756 16205
+2314 1756 65360
+2316 1756 44510
+2317 1756 48259
+2318 1756 6217
+2319 1756 2776
+2320 1756 64242
+2321 1756 53440
+2322 1756 9610
+2323 1756 21675
+2324 1756 50284
+2326 1756 7908
+2327 1756 8921
+2328 1756 54382
+2329 1756 9345
+2330 1756 5473
+2331 1756 17554
+2332 1756 18456
+2333 1756 59187
+2334 1756 22275
+2335 1756 54552
+2337 1756 57372
+2338 1756 46051
+2339 1756 1976
+2340 1756 30351
+2341 1756 46426
+2342 1756 28872
+2398 1756 38568
+2399 1756 12516
+2400 1756 38782
+2401 1756 2478
+2402 1756 1367
+2404 1756 7080
+2405 1756 47583
+2406 1756 3494
+2407 1756 56286
+2408 1756 2123
+2419 1756 38772
+2476 1756 55014
+2477 1756 20854
+2478 1756 53224
+2479 1756 53224
+2480 1756 42753
+2481 1756 40988
+2482 1756 14264
+2483 1756 26639
+2484 1756 28952
+2485 1756 28348
+2486 1756 53005
+2497 1756 54323
+2509 1756 58040
+4267 1756 27852657
+1675 1757 1
+2486 1757 65520
+4268 1757 27852657
+1676 1758 1
+1955 1758 1
+1956 1758 1
+1965 1758 2
+2316 1758 43681
+2317 1758 43681
+2318 1758 43681
+2326 1758 32761
+2327 1758 32761
+2337 1758 32761
+2484 1758 12286
+2485 1758 60062
+2486 1758 60062
+2497 1758 60062
+2509 1758 2048
+4269 1758 27852657
+1677 1759 1
+2484 1759 65520
+4270 1759 27852657
+1678 1760 1
+1679 1760 9077
+1680 1760 9077
+1681 1760 9077
+1688 1760 9077
+1689 1760 9077
+1690 1760 18154
+1691 1760 9077
+1698 1760 9077
+1699 1760 9077
+1700 1760 18154
+1701 1760 18154
+1702 1760 9077
+1950 1760 36063
+1951 1760 36063
+1958 1760 45140
+1959 1760 15682
+1960 1760 45140
+1965 1760 19781
+1967 1760 45140
+1968 1760 30940
+1969 1760 40017
+1970 1760 60398
+1977 1760 63082
+1978 1760 48882
+1979 1760 1515
+1980 1760 16773
+1981 1760 21896
+2043 1760 54005
+2044 1760 39805
+2045 1760 48882
+2046 1760 64140
+2047 1760 16561
+2058 1760 3742
+2311 1760 41448
+2312 1760 41448
+2319 1760 16400
+2320 1760 57848
+2321 1760 16400
+2326 1760 14217
+2327 1760 14217
+2328 1760 16400
+2329 1760 33038
+2330 1760 5517
+2331 1760 54638
+2337 1760 14217
+2338 1760 34808
+2339 1760 51446
+2340 1760 46010
+2341 1760 59679
+2342 1760 5041
+2404 1760 57169
+2405 1760 47677
+2406 1760 42241
+2407 1760 8543
+2408 1760 30100
+2419 1760 25059
+2482 1760 34782
+2483 1760 46678
+2484 1760 44124
+2485 1760 52275
+2486 1760 62584
+2497 1760 25571
+2509 1760 37974
+4271 1760 27852657
+1679 1761 1
+1680 1761 1
+1681 1761 1
+1690 1761 1
+1700 1761 1
+1958 1761 1
+1965 1761 25651
+1968 1761 23643
+1969 1761 23643
+1970 1761 23643
+1971 1761 59694
+1972 1761 59694
+1973 1761 59694
+1974 1761 59694
+1977 1761 55625
+1978 1761 48546
+1979 1761 48547
+1980 1761 6668
+1981 1761 48546
+2037 1761 59694
+2038 1761 59694
+2039 1761 59694
+2040 1761 59694
+2041 1761 59694
+2043 1761 55625
+2044 1761 48546
+2045 1761 48546
+2046 1761 6668
+2047 1761 31571
+2058 1761 48546
+2307 1761 47914
+2308 1761 47914
+2309 1761 47914
+2310 1761 47914
+2311 1761 64397
+2312 1761 64397
+2313 1761 48637
+2314 1761 48637
+2316 1761 1446
+2317 1761 1446
+2318 1761 1446
+2319 1761 50499
+2320 1761 21552
+2321 1761 22676
+2322 1761 51457
+2323 1761 51457
+2324 1761 51457
+2326 1761 16069
+2327 1761 16069
+2328 1761 40828
+2329 1761 62703
+2330 1761 37690
+2331 1761 15014
+2332 1761 13856
+2333 1761 13856
+2334 1761 13856
+2335 1761 13856
+2337 1761 47684
+2338 1761 51572
+2339 1761 29912
+2340 1761 62598
+2341 1761 24203
+2342 1761 9189
+2398 1761 4761
+2399 1761 4761
+2400 1761 4761
+2401 1761 4761
+2402 1761 4761
+2404 1761 29346
+2405 1761 38646
+2406 1761 30968
+2407 1761 21086
+2408 1761 63594
+2419 1761 54405
+2476 1761 2807
+2477 1761 2807
+2478 1761 2807
+2479 1761 2807
+2480 1761 2807
+2481 1761 2807
+2482 1761 24565
+2483 1761 44998
+2484 1761 59432
+2485 1761 19472
+2486 1761 33921
+2497 1761 60652
+2509 1761 61837
+4272 1761 27852657
+1680 1762 1
+1681 1762 1
+1691 1762 65520
+1697 1762 24631
+1698 1762 35648
+1699 1762 35648
+1700 1762 22650
+1701 1762 16736
+1702 1762 16737
+1981 1762 15652
+2044 1762 43437
+2045 1762 4643
+2046 1762 2463
+2047 1762 46100
+2058 1762 47185
+2311 1762 48380
+2312 1762 48380
+2313 1762 10860
+2314 1762 10860
+2316 1762 63123
+2317 1762 63123
+2318 1762 63123
+2319 1762 62812
+2320 1762 57966
+2321 1762 9586
+2322 1762 11457
+2323 1762 11457
+2324 1762 11457
+2326 1762 40780
+2327 1762 40780
+2328 1762 61937
+2329 1762 23067
+2330 1762 33808
+2331 1762 24222
+2332 1762 9843
+2333 1762 9843
+2334 1762 9843
+2335 1762 9843
+2337 1762 56428
+2338 1762 22934
+2339 1762 10121
+2340 1762 55671
+2341 1762 43885
+2342 1762 37222
+2398 1762 50398
+2399 1762 50398
+2400 1762 50398
+2401 1762 50398
+2402 1762 50398
+2404 1762 17642
+2405 1762 40007
+2406 1762 31803
+2407 1762 39461
+2408 1762 26888
+2419 1762 5853
+2476 1762 21038
+2477 1762 21038
+2478 1762 21038
+2479 1762 21038
+2480 1762 21038
+2481 1762 21038
+2482 1762 46054
+2483 1762 9377
+2484 1762 8656
+2485 1762 58708
+2486 1762 43414
+2497 1762 60997
+2509 1762 37100
+4273 1762 27852657
+1681 1763 1
+1698 1763 39488
+1699 1763 43786
+1700 1763 52637
+1701 1763 24909
+1702 1763 24909
+1981 1763 62876
+2056 1763 24675
+2057 1763 30372
+2058 1763 48386
+2059 1763 20832
+2266 1763 24363
+2274 1763 39343
+2275 1763 19503
+2276 1763 60661
+2321 1763 35144
+2331 1763 5172
+2338 1763 53009
+2339 1763 37591
+2340 1763 63470
+2341 1763 5471
+2342 1763 29512
+2387 1763 1985
+2397 1763 57847
+2408 1763 44446
+2417 1763 56547
+2418 1763 43610
+2419 1763 23602
+2420 1763 57929
+2455 1763 46605
+2456 1763 46605
+2457 1763 20815
+2458 1763 20815
+2460 1763 41632
+2461 1763 41632
+2462 1763 41632
+2463 1763 40975
+2464 1763 9593
+2465 1763 7988
+2466 1763 5579
+2467 1763 5579
+2468 1763 5579
+2470 1763 3596
+2471 1763 3596
+2472 1763 29279
+2473 1763 56152
+2474 1763 10387
+2475 1763 3891
+2476 1763 35246
+2477 1763 35246
+2478 1763 35246
+2479 1763 35246
+2481 1763 38158
+2482 1763 50309
+2483 1763 17988
+2484 1763 30921
+2485 1763 37077
+2486 1763 25718
+2487 1763 20155
+2488 1763 20155
+2489 1763 20155
+2490 1763 20155
+2491 1763 20155
+2493 1763 19348
+2494 1763 22378
+2495 1763 16664
+2496 1763 22750
+2497 1763 3814
+2498 1763 59942
+2499 1763 51243
+2500 1763 51243
+2501 1763 51243
+2502 1763 51243
+2503 1763 51243
+2504 1763 51243
+2505 1763 52796
+2506 1763 38337
+2507 1763 26432
+2508 1763 6548
+2509 1763 21186
+2510 1763 43860
+2511 1763 46262
+4274 1763 27852657
+1682 1764 1
+1692 1764 1
+1948 1764 60958
+1956 1764 24227
+1962 1764 64113
+1963 1764 44387
+1965 1764 26087
+1968 1764 9388
+1969 1764 9388
+1970 1764 9388
+1971 1764 37694
+1972 1764 50622
+1973 1764 30896
+1974 1764 23989
+1977 1764 61987
+1978 1764 61511
+1979 1764 61511
+1980 1764 5378
+1981 1764 61511
+2037 1764 37693
+2038 1764 50622
+2039 1764 30896
+2040 1764 23989
+2041 1764 61145
+2043 1764 61987
+2044 1764 61511
+2045 1764 61511
+2046 1764 5378
+2047 1764 57501
+2058 1764 61511
+2302 1764 4611
+2303 1764 32547
+2307 1764 32506
+2308 1764 32506
+2309 1764 37117
+2310 1764 45466
+2311 1764 12289
+2312 1764 12289
+2313 1764 48686
+2314 1764 24137
+2316 1764 3911
+2317 1764 58903
+2318 1764 63517
+2319 1764 27542
+2320 1764 31258
+2321 1764 18969
+2322 1764 24484
+2323 1764 28366
+2324 1764 45452
+2326 1764 60300
+2327 1764 25647
+2328 1764 1503
+2329 1764 22431
+2330 1764 326
+2331 1764 46878
+2332 1764 818
+2333 1764 605
+2334 1764 17691
+2335 1764 41770
+2337 1764 39466
+2338 1764 45820
+2339 1764 34271
+2340 1764 20513
+2341 1764 34038
+2342 1764 52681
+2398 1764 9231
+2399 1764 58431
+2400 1764 29282
+2401 1764 9868
+2402 1764 42699
+2404 1764 44901
+2405 1764 6259
+2406 1764 23304
+2407 1764 60557
+2408 1764 26659
+2419 1764 39499
+2476 1764 25529
+2477 1764 32322
+2478 1764 13696
+2479 1764 13696
+2480 1764 32967
+2481 1764 29570
+2482 1764 52585
+2483 1764 58712
+2484 1764 54970
+2485 1764 18725
+2486 1764 45215
+2497 1764 51852
+2509 1764 45864
+4275 1764 27852657
+1683 1765 1
+1693 1765 1
+1948 1765 4563
+1956 1765 41294
+1962 1765 1408
+1963 1765 62827
+1965 1765 47134
+1968 1765 51672
+1969 1765 51672
+1970 1765 51672
+1971 1765 38875
+1972 1765 25947
+1973 1765 45672
+1974 1765 52579
+1977 1765 4202
+1978 1765 52764
+1979 1765 52764
+1980 1765 38915
+1981 1765 52764
+2037 1765 38875
+2038 1765 25946
+2039 1765 45672
+2040 1765 52579
+2041 1765 15423
+2043 1765 4202
+2044 1765 52764
+2045 1765 52764
+2046 1765 38915
+2047 1765 40007
+2058 1765 52764
+2302 1765 60910
+2303 1765 32974
+2307 1765 20335
+2308 1765 20335
+2309 1765 15724
+2310 1765 7375
+2311 1765 53232
+2312 1765 53232
+2313 1765 6018
+2314 1765 30567
+2316 1765 20927
+2317 1765 31456
+2318 1765 26842
+2319 1765 37979
+2320 1765 38318
+2321 1765 50607
+2322 1765 53862
+2323 1765 49980
+2324 1765 32894
+2326 1765 35899
+2327 1765 5031
+2328 1765 64018
+2329 1765 30692
+2330 1765 832
+2331 1765 15746
+2332 1765 3438
+2333 1765 3651
+2334 1765 26771
+2335 1765 2692
+2337 1765 62672
+2338 1765 23709
+2339 1765 36086
+2340 1765 63870
+2341 1765 56184
+2342 1765 40438
+2398 1765 62493
+2399 1765 13293
+2400 1765 42442
+2401 1765 61856
+2402 1765 29025
+2404 1765 54466
+2405 1765 44165
+2406 1765 53158
+2407 1765 34436
+2408 1765 60636
+2419 1765 20198
+2476 1765 20626
+2477 1765 13833
+2478 1765 32459
+2479 1765 32459
+2480 1765 13188
+2481 1765 16585
+2482 1765 12936
+2483 1765 46681
+2484 1765 13628
+2485 1765 62278
+2486 1765 27865
+2497 1765 15272
+2509 1765 5011
+4276 1765 27852657
+1684 1766 1
+1694 1766 1
+1695 1766 1
+1973 1766 41694
+2050 1766 23828
+2051 1766 1
+2052 1766 1
+2334 1766 25315
+2337 1766 14892
+2374 1766 41145
+2375 1766 17973
+2383 1766 41700
+2390 1766 9734
+2392 1766 57915
+2395 1766 42926
+2396 1766 42926
+2397 1766 42926
+2398 1766 4362
+2399 1766 4362
+2400 1766 63267
+2401 1766 39704
+2404 1766 12279
+2405 1766 42888
+2406 1766 42888
+2407 1766 20293
+2408 1766 42888
+2409 1766 39000
+2410 1766 39000
+2411 1766 26798
+2412 1766 24093
+2413 1766 35645
+2415 1766 12279
+2416 1766 42888
+2417 1766 42888
+2418 1766 20293
+2419 1766 20255
+2420 1766 42888
+2445 1766 61324
+2446 1766 60444
+2447 1766 922
+2451 1766 54755
+2452 1766 40792
+2453 1766 39912
+2454 1766 50479
+2455 1766 21418
+2456 1766 21418
+2457 1766 6085
+2458 1766 6085
+2460 1766 1975
+2461 1766 8901
+2462 1766 20038
+2463 1766 50851
+2464 1766 50618
+2465 1766 29200
+2466 1766 653
+2467 1766 653
+2468 1766 23633
+2470 1766 43055
+2471 1766 47554
+2472 1766 47457
+2473 1766 41838
+2474 1766 22660
+2475 1766 58981
+2476 1766 46307
+2477 1766 46307
+2478 1766 51824
+2479 1766 51778
+2481 1766 50493
+2482 1766 55610
+2483 1766 21560
+2484 1766 10198
+2485 1766 34534
+2486 1766 53360
+2487 1766 17740
+2488 1766 17740
+2489 1766 62662
+2490 1766 58699
+2491 1766 47943
+2493 1766 49154
+2494 1766 26350
+2495 1766 62346
+2496 1766 24281
+2497 1766 13650
+2498 1766 7950
+2499 1766 22794
+2500 1766 22794
+2501 1766 6348
+2502 1766 23996
+2503 1766 59267
+2504 1766 47418
+2505 1766 63304
+2506 1766 35441
+2507 1766 50189
+2508 1766 30119
+2509 1766 14698
+2510 1766 15421
+2511 1766 9981
+4277 1766 27852657
+1685 1767 1
+2486 1767 65520
+4278 1767 27852657
+1686 1768 1
+2485 1768 65520
+4279 1768 27852657
+1687 1769 1
+1697 1769 1
+1965 1769 23577
+1968 1769 45364
+1969 1769 45364
+1970 1769 45364
+1971 1769 56570
+1972 1769 56570
+1973 1769 56570
+1974 1769 56570
+1977 1769 33657
+1978 1769 1392
+1979 1769 1392
+1980 1769 46756
+1981 1769 1392
+2037 1769 56570
+2038 1769 56570
+2039 1769 56570
+2040 1769 56570
+2041 1769 56570
+2043 1769 33657
+2044 1769 1392
+2045 1769 1392
+2046 1769 46756
+2047 1769 2784
+2058 1769 1392
+2307 1769 23897
+2308 1769 23897
+2309 1769 23897
+2310 1769 23897
+2313 1769 35717
+2314 1769 35717
+2316 1769 34288
+2317 1769 34288
+2318 1769 34288
+2320 1769 32105
+2321 1769 32105
+2322 1769 60300
+2323 1769 60300
+2324 1769 60300
+2326 1769 16149
+2327 1769 16149
+2329 1769 15894
+2330 1769 45584
+2331 1769 13479
+2332 1769 31382
+2333 1769 31382
+2334 1769 31382
+2335 1769 31382
+2337 1769 62286
+2338 1769 5379
+2339 1769 5719
+2340 1769 37885
+2341 1769 17826
+2342 1769 4347
+2398 1769 3794
+2399 1769 3794
+2400 1769 3794
+2401 1769 3794
+2402 1769 3794
+2404 1769 13742
+2405 1769 39921
+2406 1769 34004
+2407 1769 656
+2408 1769 25904
+2419 1769 21557
+2476 1769 22123
+2477 1769 22123
+2478 1769 22123
+2479 1769 22123
+2480 1769 22123
+2481 1769 22123
+2483 1769 18297
+2484 1769 58891
+2485 1769 7840
+2486 1769 2509
+2497 1769 25451
+2509 1769 39980
+4280 1769 27852657
+1688 1770 1
+1689 1770 1
+1690 1770 1
+1691 1770 1
+1698 1770 1
+1699 1770 1
+1700 1770 1
+1701 1770 2
+1702 1770 1
+1965 1770 53797
+1967 1770 1
+1968 1770 20818
+1969 1770 25847
+1970 1770 25847
+1971 1770 49773
+1972 1770 49773
+1973 1770 49773
+1974 1770 49773
+1977 1770 38066
+1978 1770 25851
+1979 1770 10719
+1980 1770 31535
+1981 1770 5688
+2037 1770 49773
+2038 1770 49773
+2039 1770 49773
+2040 1770 49773
+2041 1770 49773
+2043 1770 38065
+2044 1770 25850
+2045 1770 10718
+2046 1770 31533
+2047 1770 11373
+2058 1770 5686
+2307 1770 53458
+2308 1770 53458
+2309 1770 53458
+2310 1770 53458
+2311 1770 1127
+2312 1770 1127
+2313 1770 8781
+2314 1770 8781
+2316 1770 63303
+2317 1770 63303
+2318 1770 63303
+2319 1770 10931
+2320 1770 38532
+2321 1770 37405
+2322 1770 23520
+2323 1770 23520
+2324 1770 23520
+2326 1770 20799
+2327 1770 20799
+2328 1770 20602
+2329 1770 23033
+2330 1770 59974
+2331 1770 22569
+2332 1770 48163
+2333 1770 48163
+2334 1770 48163
+2335 1770 48163
+2337 1770 19478
+2338 1770 56013
+2339 1770 38111
+2340 1770 25550
+2341 1770 6057
+2342 1770 49009
+2398 1770 30948
+2399 1770 30948
+2400 1770 30948
+2401 1770 30948
+2402 1770 30948
+2404 1770 20525
+2405 1770 6904
+2406 1770 23932
+2407 1770 15421
+2408 1770 34822
+2419 1770 51334
+2476 1770 6934
+2477 1770 6934
+2478 1770 6934
+2479 1770 6934
+2480 1770 6934
+2481 1770 6934
+2482 1770 32767
+2483 1770 65355
+2484 1770 43499
+2485 1770 11259
+2486 1770 42993
+2497 1770 43386
+2509 1770 34984
+4281 1770 27852657
+1689 1771 1
+1697 1771 49655
+1698 1771 47146
+1699 1771 47147
+1700 1771 43109
+1701 1771 41161
+1702 1771 41161
+1981 1771 9959
+2044 1771 15448
+2045 1771 34405
+2046 1771 47778
+2047 1771 7208
+2058 1771 38410
+2311 1771 55968
+2312 1771 55968
+2313 1771 53684
+2314 1771 53684
+2316 1771 60911
+2317 1771 60911
+2318 1771 60911
+2319 1771 15964
+2320 1771 63589
+2321 1771 7621
+2322 1771 26300
+2323 1771 26300
+2324 1771 26300
+2326 1771 41492
+2327 1771 41492
+2328 1771 15026
+2329 1771 30582
+2330 1771 9177
+2331 1771 1556
+2332 1771 1887
+2333 1771 1887
+2334 1771 1887
+2335 1771 1887
+2337 1771 62464
+2338 1771 13835
+2339 1771 21410
+2340 1771 26514
+2341 1771 21556
+2342 1771 5510
+2398 1771 4230
+2399 1771 4230
+2400 1771 4230
+2401 1771 4230
+2402 1771 4230
+2404 1771 43084
+2405 1771 37295
+2406 1771 60907
+2407 1771 24668
+2408 1771 3603
+2419 1771 34457
+2476 1771 35266
+2477 1771 35266
+2478 1771 35266
+2479 1771 35266
+2480 1771 35266
+2481 1771 35266
+2482 1771 2200
+2483 1771 34759
+2484 1771 2016
+2485 1771 62821
+2486 1771 12285
+2497 1771 59095
+2509 1771 3689
+4282 1771 27852657
+1690 1772 1
+1691 1772 1
+1697 1772 35718
+1698 1772 18144
+1699 1772 18144
+1700 1772 6230
+1701 1772 18137
+1702 1772 18136
+1981 1772 23890
+2044 1772 30872
+2045 1772 51386
+2046 1772 16491
+2047 1772 11064
+2058 1772 5310
+2311 1772 33434
+2312 1772 33434
+2313 1772 25938
+2314 1772 25938
+2316 1772 35
+2317 1772 35
+2318 1772 35
+2319 1772 11439
+2320 1772 2149
+2321 1772 34236
+2322 1772 5970
+2323 1772 5970
+2324 1772 5970
+2326 1772 40250
+2327 1772 40250
+2328 1772 20550
+2329 1772 20379
+2330 1772 4824
+2331 1772 36109
+2332 1772 36577
+2333 1772 36577
+2334 1772 36577
+2335 1772 36577
+2337 1772 48004
+2338 1772 27294
+2339 1772 27835
+2340 1772 61358
+2341 1772 63902
+2342 1772 8427
+2398 1772 33347
+2399 1772 33347
+2400 1772 33347
+2401 1772 33347
+2402 1772 33347
+2404 1772 29396
+2405 1772 62826
+2406 1772 19800
+2407 1772 58877
+2408 1772 61843
+2419 1772 33148
+2476 1772 5215
+2477 1772 5215
+2478 1772 5215
+2479 1772 5215
+2480 1772 5215
+2481 1772 5215
+2482 1772 37703
+2483 1772 19912
+2484 1772 39372
+2485 1772 17221
+2486 1772 61058
+2497 1772 2367
+2509 1772 14972
+4283 1772 27852657
+1691 1773 1
+1698 1773 50782
+1699 1773 65326
+1700 1773 27542
+1701 1773 44870
+1702 1773 44869
+1981 1773 2974
+2056 1773 65421
+2057 1773 1844
+2058 1773 37143
+2059 1773 60769
+2274 1773 50221
+2275 1773 13316
+2276 1773 13316
+2331 1773 30878
+2338 1773 62704
+2339 1773 22657
+2340 1773 8243
+2341 1773 57521
+2342 1773 36014
+2397 1773 22333
+2408 1773 32850
+2417 1773 61996
+2418 1773 58526
+2419 1773 34952
+2420 1773 31030
+2455 1773 10601
+2456 1773 10601
+2457 1773 41409
+2458 1773 41409
+2460 1773 48727
+2461 1773 48727
+2462 1773 48727
+2463 1773 30188
+2464 1773 43382
+2465 1773 32781
+2466 1773 60138
+2467 1773 60138
+2468 1773 60138
+2470 1773 22716
+2471 1773 22716
+2472 1773 65493
+2473 1773 59667
+2474 1773 2540
+2475 1773 26614
+2476 1773 56916
+2477 1773 56916
+2478 1773 56916
+2479 1773 56916
+2481 1773 23398
+2482 1773 48750
+2483 1773 51337
+2484 1773 49218
+2485 1773 20273
+2486 1773 56116
+2487 1773 17794
+2488 1773 17794
+2489 1773 17794
+2490 1773 17794
+2491 1773 17794
+2493 1773 13507
+2494 1773 9416
+2495 1773 36393
+2496 1773 59746
+2497 1773 10327
+2498 1773 54801
+2499 1773 24217
+2500 1773 24217
+2501 1773 24217
+2502 1773 24217
+2503 1773 24217
+2504 1773 24217
+2505 1773 25361
+2506 1773 25212
+2507 1773 17596
+2508 1773 63604
+2509 1773 16003
+2510 1773 58029
+2511 1773 22986
+4284 1773 27852657
+1692 1774 1
+1693 1774 1
+1694 1774 1
+1697 1774 5401
+1698 1774 64338
+1699 1774 64338
+1700 1774 64338
+1701 1774 64338
+1702 1774 64338
+1981 1774 53704
+2044 1774 14736
+2045 1774 36581
+2046 1774 19957
+2047 1774 15387
+2058 1774 26021
+2302 1774 34479
+2308 1774 36229
+2309 1774 46247
+2310 1774 26130
+2311 1774 6327
+2312 1774 6327
+2313 1774 9907
+2314 1774 56796
+2316 1774 41893
+2317 1774 1144
+2318 1774 55650
+2319 1774 40023
+2320 1774 11289
+2321 1774 4962
+2322 1774 3315
+2323 1774 64850
+2324 1774 64850
+2326 1774 49508
+2327 1774 27096
+2328 1774 53820
+2329 1774 52303
+2330 1774 5571
+2331 1774 609
+2332 1774 11010
+2333 1774 10773
+2334 1774 10773
+2335 1774 62540
+2337 1774 31873
+2338 1774 52976
+2339 1774 39968
+2340 1774 22781
+2341 1774 38906
+2342 1774 10079
+2398 1774 54414
+2399 1774 65382
+2400 1774 65382
+2401 1774 46399
+2402 1774 43678
+2404 1774 15159
+2405 1774 21366
+2406 1774 45749
+2407 1774 41289
+2408 1774 8017
+2419 1774 43310
+2476 1774 57203
+2477 1774 13179
+2478 1774 13179
+2479 1774 46742
+2480 1774 51306
+2481 1774 46029
+2482 1774 18161
+2483 1774 2763
+2484 1774 27858
+2485 1774 39229
+2486 1774 40243
+2497 1774 38090
+2509 1774 15558
+4285 1774 27852657
+1693 1775 1
+1698 1775 24493
+1699 1775 3748
+1700 1775 43011
+1701 1775 4674
+1702 1775 4674
+1981 1775 33024
+2045 1775 28385
+2046 1775 3931
+2047 1775 23950
+2058 1775 61121
+2302 1775 55034
+2309 1775 44058
+2310 1775 49828
+2311 1775 5773
+2312 1775 5773
+2313 1775 42582
+2314 1775 38054
+2316 1775 5352
+2317 1775 39632
+2318 1775 50225
+2319 1775 29758
+2320 1775 10456
+2321 1775 4683
+2322 1775 63066
+2323 1775 50988
+2324 1775 61373
+2326 1775 7082
+2327 1775 18153
+2328 1775 7683
+2329 1775 15845
+2330 1775 21184
+2331 1775 16501
+2332 1775 18274
+2333 1775 13764
+2334 1775 8985
+2335 1775 8985
+2337 1775 63098
+2338 1775 18544
+2339 1775 6995
+2340 1775 32159
+2341 1775 55703
+2342 1775 14240
+2398 1775 57270
+2399 1775 8148
+2400 1775 45460
+2401 1775 45460
+2402 1775 7162
+2404 1775 55468
+2405 1775 5201
+2406 1775 42450
+2407 1775 55866
+2408 1775 12829
+2419 1775 37962
+2476 1775 4094
+2477 1775 22162
+2478 1775 57279
+2479 1775 57279
+2480 1775 3406
+2481 1775 55486
+2482 1775 59374
+2483 1775 37265
+2484 1775 64555
+2485 1775 18061
+2486 1775 30495
+2497 1775 52533
+2509 1775 49879
+4286 1775 27852657
+1694 1776 1
+1698 1776 5661
+1699 1776 52649
+1700 1776 48296
+1701 1776 13971
+1702 1776 13971
+1981 1776 11795
+2045 1776 56712
+2046 1776 20357
+2047 1776 9009
+2058 1776 11185
+2302 1776 44686
+2308 1776 36229
+2309 1776 54735
+2310 1776 41202
+2311 1776 38198
+2312 1776 38198
+2313 1776 63921
+2314 1776 60074
+2316 1776 32072
+2317 1776 33607
+2318 1776 23281
+2319 1776 48652
+2320 1776 21854
+2321 1776 49177
+2322 1776 59920
+2323 1776 23474
+2324 1776 13089
+2326 1776 39402
+2327 1776 30310
+2328 1776 17276
+2329 1776 59468
+2330 1776 57307
+2331 1776 8130
+2332 1776 39834
+2333 1776 9131
+2334 1776 13910
+2335 1776 156
+2337 1776 58818
+2338 1776 41771
+2339 1776 25191
+2340 1776 47375
+2341 1776 12526
+2342 1776 9642
+2398 1776 31074
+2399 1776 18794
+2400 1776 47003
+2401 1776 28020
+2402 1776 521
+2404 1776 30725
+2405 1776 61641
+2406 1776 14513
+2407 1776 46984
+2408 1776 32892
+2419 1776 53996
+2476 1776 21976
+2477 1776 536
+2478 1776 30940
+2479 1776 64503
+2480 1776 36125
+2481 1776 6493
+2482 1776 25945
+2483 1776 48506
+2484 1776 62973
+2485 1776 38991
+2486 1776 25894
+2497 1776 58952
+2509 1776 28426
+4287 1776 27852657
+1695 1777 1
+1947 1777 9853
+1948 1777 20114
+1956 1777 59101
+1963 1777 45901
+1965 1777 10525
+1968 1777 29266
+1969 1777 29266
+1970 1777 29266
+1971 1777 64835
+1972 1777 64835
+1973 1777 45215
+1974 1777 13457
+1977 1777 11904
+1978 1777 59606
+1979 1777 59606
+1980 1777 23351
+1981 1777 59606
+2037 1777 64835
+2038 1777 64835
+2039 1777 45215
+2040 1777 13456
+2041 1777 59192
+2043 1777 11904
+2044 1777 59606
+2045 1777 59606
+2046 1777 23351
+2047 1777 53691
+2058 1777 59606
+2301 1777 49883
+2302 1777 40591
+2303 1777 25795
+2307 1777 14299
+2308 1777 56394
+2309 1777 47102
+2310 1777 6120
+2311 1777 29473
+2312 1777 29473
+2313 1777 21576
+2314 1777 21576
+2316 1777 12982
+2317 1777 9276
+2318 1777 62390
+2319 1777 31418
+2320 1777 17463
+2321 1777 53511
+2322 1777 28060
+2323 1777 28060
+2324 1777 28938
+2326 1777 24859
+2327 1777 17629
+2328 1777 47489
+2329 1777 45768
+2330 1777 41310
+2331 1777 53320
+2332 1777 49817
+2333 1777 49817
+2334 1777 50695
+2335 1777 55277
+2337 1777 2519
+2338 1777 53392
+2339 1777 1283
+2340 1777 51867
+2341 1777 17662
+2342 1777 29863
+2398 1777 5010
+2399 1777 5010
+2400 1777 544
+2401 1777 38590
+2402 1777 58441
+2404 1777 63039
+2405 1777 45839
+2406 1777 31310
+2407 1777 47584
+2408 1777 10065
+2419 1777 45723
+2476 1777 57173
+2477 1777 57173
+2478 1777 34442
+2479 1777 39673
+2480 1777 15105
+2481 1777 33200
+2482 1777 31707
+2483 1777 49289
+2484 1777 57343
+2485 1777 37704
+2486 1777 39967
+2497 1777 54936
+2509 1777 35488
+4288 1777 27852657
+1696 1778 1
+2486 1778 65520
+4289 1778 27852657
+1697 1779 1
+1698 1779 8550
+1699 1779 46662
+1700 1779 24909
+1701 1779 24248
+1702 1779 24248
+1981 1779 226
+2045 1779 50239
+2046 1779 3817
+2047 1779 25415
+2058 1779 49437
+2311 1779 36940
+2312 1779 36940
+2313 1779 18261
+2314 1779 18261
+2316 1779 26143
+2317 1779 26143
+2318 1779 26143
+2319 1779 29777
+2320 1779 37323
+2321 1779 383
+2322 1779 16025
+2323 1779 16025
+2324 1779 16025
+2326 1779 35106
+2327 1779 35106
+2328 1779 46994
+2329 1779 63319
+2330 1779 48395
+2331 1779 48012
+2332 1779 4949
+2333 1779 4949
+2334 1779 4949
+2335 1779 4949
+2337 1779 49649
+2338 1779 24956
+2339 1779 43993
+2340 1779 31659
+2341 1779 45429
+2342 1779 55829
+2398 1779 33594
+2399 1779 33594
+2400 1779 33594
+2401 1779 33594
+2402 1779 33594
+2404 1779 47708
+2405 1779 19185
+2406 1779 16063
+2407 1779 55255
+2408 1779 61852
+2419 1779 27244
+2476 1779 10651
+2477 1779 10651
+2478 1779 10651
+2479 1779 10651
+2480 1779 10651
+2481 1779 10651
+2482 1779 8832
+2483 1779 42979
+2484 1779 51802
+2485 1779 31688
+2486 1779 6548
+2497 1779 63951
+2509 1779 40549
+4290 1779 27852657
+1703 1780 1
+1704 1780 1
+1709 1780 1
+1717 1780 18093
+1718 1780 18094
+1731 1780 44766
+1732 1780 39567
+1733 1780 57661
+1736 1780 46840
+1748 1780 9224
+1753 1780 10552
+1754 1780 58989
+1759 1780 34958
+1763 1780 18254
+1768 1780 52309
+1790 1780 53212
+1795 1780 17351
+1801 1780 44726
+1818 1780 22764
+1830 1780 5042
+1836 1780 62274
+1863 1780 22764
+1866 1780 47926
+1881 1780 9983
+1918 1780 22764
+1921 1780 47926
+1925 1780 46746
+1984 1780 26754
+1987 1780 39959
+1991 1780 43856
+1996 1780 1508
+2345 1780 2689
+2348 1780 65235
+2351 1780 6432
+2352 1780 50812
+2355 1780 1265
+2356 1780 361
+2357 1780 32
+2362 1780 56740
+2363 1780 34817
+2368 1780 18014
+2374 1780 58979
+2375 1780 21429
+2376 1780 62343
+2377 1780 7342
+2378 1780 7342
+2379 1780 50361
+2380 1780 29257
+2382 1780 13657
+2383 1780 32900
+2384 1780 54322
+2385 1780 9567
+2386 1780 32472
+2387 1780 25130
+2388 1780 21329
+2389 1780 11930
+2390 1780 3688
+2392 1780 29288
+2393 1780 33906
+2394 1780 5964
+2395 1780 12249
+2396 1780 43204
+2397 1780 18074
+2398 1780 23979
+2399 1780 9129
+2400 1780 45384
+2401 1780 45981
+2403 1780 27324
+2404 1780 30874
+2405 1780 55718
+2406 1780 6116
+2407 1780 42647
+2408 1780 24573
+2409 1780 13754
+2410 1780 20088
+2411 1780 6142
+2412 1780 11761
+2413 1780 47932
+2415 1780 58043
+2416 1780 43397
+2417 1780 63959
+2418 1780 45131
+2419 1780 23818
+2420 1780 64766
+2487 1780 52919
+2488 1780 22170
+2489 1780 33186
+2490 1780 60333
+2491 1780 6092
+2492 1780 28571
+2493 1780 48720
+2494 1780 41933
+2495 1780 15080
+2496 1780 49966
+2497 1780 65394
+2498 1780 27951
+2510 1780 4369
+4291 1780 27852657
+1705 1781 1
+1706 1781 1
+1707 1781 1
+1708 1781 2
+1709 1781 1
+1710 1781 5617
+1711 1781 5617
+1712 1781 29953
+1713 1781 35571
+1714 1781 29954
+1715 1781 29952
+1716 1781 35569
+1717 1781 59905
+1718 1781 29952
+1723 1781 1
+1724 1781 1
+1726 1781 5617
+1727 1781 29953
+1728 1781 29952
+1729 1781 35569
+1730 1781 35569
+1731 1781 35569
+1732 1781 35569
+1733 1781 35569
+1742 1781 62899
+1743 1781 62899
+1746 1781 24593
+1747 1781 2121
+1748 1781 4743
+1749 1781 29952
+1750 1781 29952
+1751 1781 54545
+1752 1781 32073
+1753 1781 33821
+1754 1781 64647
+1994 1781 53494
+1995 1781 56925
+1996 1781 56925
+2029 1781 13784
+2031 1781 37530
+2034 1781 24310
+2035 1781 24310
+2036 1781 24310
+2037 1781 58815
+2038 1781 58815
+2039 1781 7078
+2040 1781 32374
+2043 1781 35868
+2044 1781 52946
+2045 1781 52946
+2046 1781 11735
+2047 1781 52946
+2048 1781 58815
+2049 1781 58815
+2050 1781 7078
+2051 1781 32374
+2052 1781 32374
+2054 1781 35868
+2055 1781 52946
+2056 1781 52946
+2057 1781 11735
+2058 1781 40371
+2059 1781 52946
+2344 1781 27004
+2345 1781 27004
+2346 1781 42231
+2347 1781 44963
+2348 1781 17959
+2349 1781 33411
+2350 1781 37314
+2351 1781 1917
+2352 1781 49479
+2353 1781 46259
+2354 1781 6080
+2355 1781 54085
+2356 1781 27799
+2357 1781 43841
+2358 1781 46263
+2359 1781 20748
+2360 1781 45987
+2361 1781 25760
+2362 1781 5724
+2363 1781 27404
+2366 1781 11799
+2367 1781 44563
+2368 1781 37924
+2369 1781 24007
+2373 1781 17415
+2374 1781 50179
+2375 1781 43540
+2376 1781 22984
+2377 1781 28021
+2378 1781 28021
+2379 1781 9988
+2380 1781 9879
+2382 1781 12003
+2383 1781 5364
+2384 1781 17572
+2385 1781 58489
+2386 1781 11709
+2387 1781 49209
+2388 1781 56792
+2389 1781 56683
+2390 1781 34049
+2392 1781 19540
+2393 1781 43547
+2394 1781 20420
+2395 1781 62240
+2396 1781 56202
+2397 1781 6993
+2398 1781 37206
+2399 1781 37097
+2400 1781 14463
+2401 1781 56343
+2403 1781 64405
+2404 1781 39065
+2405 1781 6485
+2406 1781 4884
+2407 1781 11043
+2408 1781 4050
+2409 1781 28548
+2410 1781 30916
+2411 1781 1899
+2412 1781 13591
+2413 1781 47676
+2415 1781 45945
+2416 1781 38466
+2417 1781 10378
+2418 1781 17432
+2419 1781 24632
+2420 1781 20582
+2487 1781 64654
+2488 1781 56562
+2489 1781 38940
+2490 1781 59235
+2491 1781 22398
+2492 1781 31810
+2493 1781 61338
+2494 1781 32506
+2495 1781 31045
+2496 1781 19650
+2497 1781 4353
+2498 1781 45813
+2510 1781 62406
+4292 1781 27852657
+1706 1782 1
+1709 1782 65520
+1717 1782 17288
+1718 1782 17287
+1731 1782 62914
+1732 1782 13837
+1733 1782 31124
+1736 1782 8752
+1748 1782 46980
+1753 1782 37861
+1754 1782 22005
+1759 1782 65089
+1763 1782 63787
+1768 1782 16179
+1790 1782 63355
+1795 1782 16611
+1801 1782 56983
+1818 1782 29930
+1830 1782 14445
+1836 1782 43635
+1863 1782 29930
+1866 1782 18023
+1881 1782 62648
+1918 1782 29930
+1921 1782 18023
+1925 1782 50392
+1984 1782 6146
+1987 1782 9300
+1991 1782 45084
+1996 1782 50044
+2345 1782 33965
+2348 1782 28286
+2351 1782 17311
+2352 1782 44851
+2355 1782 7385
+2356 1782 62261
+2357 1782 8504
+2362 1782 45469
+2363 1782 25416
+2368 1782 45338
+2374 1782 37146
+2375 1782 13463
+2376 1782 63840
+2377 1782 37508
+2378 1782 37508
+2379 1782 65480
+2380 1782 29801
+2382 1782 19378
+2383 1782 33483
+2384 1782 12794
+2385 1782 35664
+2386 1782 45762
+2387 1782 8254
+2388 1782 28532
+2389 1782 35824
+2390 1782 16801
+2392 1782 50085
+2393 1782 58919
+2394 1782 52071
+2395 1782 32180
+2396 1782 58066
+2397 1782 49812
+2398 1782 22016
+2399 1782 22305
+2400 1782 51185
+2401 1782 55963
+2403 1782 26117
+2404 1782 39898
+2405 1782 19027
+2406 1782 42644
+2407 1782 23044
+2408 1782 38753
+2409 1782 51742
+2410 1782 41223
+2411 1782 1696
+2412 1782 46469
+2413 1782 22847
+2415 1782 46057
+2416 1782 4412
+2417 1782 5696
+2418 1782 4316
+2419 1782 25974
+2420 1782 52742
+2487 1782 62611
+2488 1782 4523
+2489 1782 8744
+2490 1782 56469
+2491 1782 47932
+2492 1782 61616
+2493 1782 50405
+2494 1782 54944
+2495 1782 34328
+2496 1782 12000
+2497 1782 45126
+2498 1782 18225
+2510 1782 48536
+4293 1782 27852657
+1707 1783 1
+1717 1783 3872
+1718 1783 3872
+1731 1783 814
+1732 1783 64747
+1733 1783 3098
+1748 1783 51099
+1753 1783 55219
+1754 1783 7218
+1759 1783 64763
+1763 1783 41409
+1768 1783 45731
+1790 1783 40651
+1795 1783 46489
+1801 1783 13217
+1830 1783 21619
+1836 1783 61290
+1866 1783 39289
+1881 1783 24662
+1921 1783 39289
+1925 1783 9811
+1987 1783 57564
+1991 1783 59406
+1996 1783 43346
+2348 1783 14384
+2351 1783 13913
+2352 1783 27676
+2355 1783 43689
+2356 1783 53929
+2357 1783 45294
+2362 1783 38134
+2363 1783 33654
+2368 1783 25122
+2374 1783 585
+2375 1783 64980
+2376 1783 26017
+2377 1783 55871
+2378 1783 55871
+2379 1783 23323
+2380 1783 50796
+2382 1783 914
+2383 1783 31231
+2384 1783 57995
+2385 1783 13479
+2386 1783 6264
+2387 1783 15914
+2388 1783 47913
+2389 1783 12425
+2390 1783 4121
+2392 1783 9675
+2393 1783 57343
+2394 1783 43143
+2395 1783 10616
+2396 1783 63649
+2397 1783 47735
+2398 1783 65308
+2399 1783 56578
+2400 1783 52500
+2401 1783 14002
+2403 1783 59972
+2404 1783 2636
+2405 1783 27695
+2406 1783 9595
+2407 1783 17787
+2408 1783 35573
+2409 1783 26587
+2410 1783 5226
+2411 1783 9020
+2412 1783 1886
+2413 1783 48046
+2415 1783 41758
+2416 1783 34253
+2417 1783 35600
+2418 1783 61489
+2419 1783 65505
+2420 1783 29932
+2487 1783 46555
+2488 1783 29837
+2489 1783 4088
+2490 1783 41177
+2491 1783 55788
+2492 1783 17456
+2493 1783 48183
+2494 1783 27964
+2495 1783 26372
+2496 1783 37684
+2497 1783 54511
+2498 1783 54044
+2510 1783 60509
+4294 1783 27852657
+1708 1784 1
+1709 1784 1
+1717 1784 24124
+1718 1784 24125
+1731 1784 37946
+1732 1784 3806
+1733 1784 27931
+1748 1784 23325
+1753 1784 63169
+1754 1784 2254
+1759 1784 57842
+1763 1784 35246
+1768 1784 13938
+1790 1784 27567
+1795 1784 21617
+1801 1784 36361
+1830 1784 49184
+1836 1784 34122
+1866 1784 52061
+1881 1784 9508
+1921 1784 52061
+1925 1784 34473
+1987 1784 21050
+1991 1784 15469
+1996 1784 39357
+2348 1784 51956
+2351 1784 54923
+2352 1784 42223
+2355 1784 15092
+2356 1784 32581
+2357 1784 55285
+2362 1784 42692
+2363 1784 59788
+2368 1784 45079
+2374 1784 37326
+2375 1784 61062
+2376 1784 18237
+2377 1784 9078
+2378 1784 9078
+2379 1784 30880
+2380 1784 31381
+2382 1784 2644
+2383 1784 28498
+2384 1784 19633
+2385 1784 13596
+2386 1784 18834
+2387 1784 9756
+2388 1784 7627
+2389 1784 1907
+2390 1784 61087
+2392 1784 50266
+2393 1784 51553
+2394 1784 54725
+2395 1784 1841
+2396 1784 21009
+2397 1784 11253
+2398 1784 35028
+2399 1784 35456
+2400 1784 53201
+2401 1784 22810
+2403 1784 2663
+2404 1784 3794
+2405 1784 60351
+2406 1784 3044
+2407 1784 19821
+2408 1784 8568
+2409 1784 47153
+2410 1784 24758
+2411 1784 47725
+2412 1784 17299
+2413 1784 26305
+2415 1784 61423
+2416 1784 3572
+2417 1784 10656
+2418 1784 50536
+2419 1784 59845
+2420 1784 51277
+2487 1784 39490
+2488 1784 63902
+2489 1784 41676
+2490 1784 3412
+2491 1784 14819
+2492 1784 25824
+2493 1784 54056
+2494 1784 40601
+2495 1784 11429
+2496 1784 60843
+2497 1784 31351
+2498 1784 43488
+2510 1784 19138
+4295 1784 27852657
+1710 1785 1
+1717 1785 64659
+1718 1785 64659
+1721 1785 65520
+1731 1785 27470
+1732 1785 58271
+1733 1785 57409
+1736 1785 5529
+1748 1785 54075
+1753 1785 12358
+1754 1785 15692
+1759 1785 10117
+1763 1785 56490
+1768 1785 59221
+1790 1785 1086
+1795 1785 49104
+1801 1785 7379
+1818 1785 3563
+1830 1785 50190
+1836 1785 15724
+1863 1785 3563
+1866 1785 37149
+1881 1785 62757
+1918 1785 3563
+1921 1785 37149
+1925 1785 25832
+1984 1785 3307
+1987 1785 62253
+1991 1785 64572
+1996 1785 50697
+2345 1785 26416
+2348 1785 24331
+2351 1785 31149
+2352 1785 2241
+2355 1785 37656
+2356 1785 21847
+2357 1785 36883
+2362 1785 10000
+2363 1785 20895
+2368 1785 8418
+2374 1785 22972
+2375 1785 52421
+2376 1785 24870
+2377 1785 18735
+2378 1785 18735
+2379 1785 58165
+2380 1785 3631
+2382 1785 12561
+2383 1785 2568
+2384 1785 58803
+2385 1785 52076
+2386 1785 29680
+2387 1785 10945
+2388 1785 30875
+2389 1785 63542
+2390 1785 1573
+2392 1785 23625
+2393 1785 43913
+2394 1785 42769
+2395 1785 30612
+2396 1785 10380
+2397 1785 64956
+2398 1785 6307
+2399 1785 36361
+2400 1785 32193
+2401 1785 56104
+2403 1785 7398
+2404 1785 16582
+2405 1785 21983
+2406 1785 37542
+2407 1785 55090
+2408 1785 55655
+2409 1785 62089
+2410 1785 8729
+2411 1785 29727
+2412 1785 13579
+2413 1785 55583
+2415 1785 50255
+2416 1785 56350
+2417 1785 13346
+2418 1785 50713
+2419 1785 1577
+2420 1785 11443
+2487 1785 31460
+2488 1785 56741
+2489 1785 44124
+2490 1785 30552
+2491 1785 62808
+2492 1785 33928
+2493 1785 50226
+2494 1785 6416
+2495 1785 3266
+2496 1785 13452
+2497 1785 26497
+2498 1785 30583
+2510 1785 53029
+4296 1785 27852657
+1711 1786 1
+1717 1786 44779
+1718 1786 44779
+1721 1786 1
+1731 1786 43692
+1732 1786 43654
+1733 1786 22912
+1736 1786 59992
+1748 1786 61873
+1753 1786 56600
+1754 1786 17639
+1759 1786 17743
+1763 1786 37273
+1768 1786 1402
+1790 1786 55016
+1795 1786 49180
+1801 1786 43459
+1818 1786 61958
+1830 1786 38675
+1836 1786 42844
+1863 1786 61958
+1866 1786 46764
+1881 1786 44342
+1918 1786 61958
+1921 1786 46764
+1925 1786 2180
+1984 1786 62214
+1987 1786 12191
+1991 1786 40486
+1996 1786 28416
+2345 1786 39105
+2348 1786 34786
+2351 1786 7101
+2352 1786 49470
+2355 1786 10704
+2356 1786 2619
+2357 1786 32858
+2362 1786 26317
+2363 1786 15173
+2368 1786 28515
+2374 1786 29297
+2375 1786 45813
+2376 1786 36868
+2377 1786 13821
+2378 1786 13821
+2379 1786 21407
+2380 1786 39226
+2382 1786 8816
+2383 1786 42453
+2384 1786 63533
+2385 1786 21070
+2386 1786 44167
+2387 1786 30346
+2388 1786 29127
+2389 1786 47878
+2390 1786 44976
+2392 1786 23795
+2393 1786 22758
+2394 1786 63543
+2395 1786 41481
+2396 1786 56436
+2397 1786 26090
+2398 1786 2831
+2399 1786 36668
+2400 1786 9958
+2401 1786 10028
+2403 1786 58226
+2404 1786 31486
+2405 1786 801
+2406 1786 56522
+2407 1786 40653
+2408 1786 14563
+2409 1786 36940
+2410 1786 30519
+2411 1786 4337
+2412 1786 47513
+2413 1786 54722
+2415 1786 49786
+2416 1786 46650
+2417 1786 1623
+2418 1786 57335
+2419 1786 53790
+2420 1786 39227
+2487 1786 45222
+2488 1786 24521
+2489 1786 43957
+2490 1786 10034
+2491 1786 44741
+2492 1786 44165
+2493 1786 38995
+2494 1786 28888
+2495 1786 48661
+2496 1786 58397
+2497 1786 38428
+2498 1786 39295
+2510 1786 38020
+4297 1786 27852657
+1712 1787 1
+1717 1787 60923
+1718 1787 60923
+1731 1787 5472
+1732 1787 62634
+1733 1787 58036
+1748 1787 53252
+1753 1787 40027
+1754 1787 44811
+1763 1787 50108
+1768 1787 56230
+1790 1787 50108
+1795 1787 56230
+1801 1787 41830
+1830 1787 40817
+1836 1787 23694
+1881 1787 36565
+1925 1787 37997
+1991 1787 29979
+1996 1787 31947
+2351 1787 26657
+2352 1787 59264
+2355 1787 39212
+2356 1787 33735
+2357 1787 3877
+2362 1787 51580
+2363 1787 11954
+2368 1787 20924
+2374 1787 18375
+2375 1787 5898
+2376 1787 18314
+2377 1787 34986
+2378 1787 34986
+2379 1787 55979
+2380 1787 19440
+2382 1787 54733
+2383 1787 33775
+2384 1787 25286
+2385 1787 41769
+2386 1787 48905
+2387 1787 13919
+2388 1787 27851
+2389 1787 52640
+2390 1787 263
+2392 1787 35919
+2393 1787 28998
+2394 1787 55371
+2395 1787 64760
+2396 1787 3195
+2397 1787 54797
+2398 1787 30297
+2399 1787 11222
+2400 1787 41988
+2401 1787 55775
+2403 1787 39083
+2404 1787 6676
+2405 1787 42032
+2406 1787 8053
+2407 1787 50664
+2408 1787 61388
+2409 1787 58222
+2410 1787 52713
+2411 1787 54887
+2412 1787 31139
+2413 1787 7463
+2415 1787 28783
+2416 1787 20939
+2417 1787 9746
+2418 1787 35501
+2419 1787 62840
+2420 1787 1452
+2487 1787 19037
+2488 1787 53179
+2489 1787 52867
+2490 1787 48583
+2491 1787 26057
+2492 1787 16550
+2493 1787 20929
+2494 1787 45296
+2495 1787 34579
+2496 1787 53319
+2497 1787 17104
+2498 1787 65113
+2510 1787 28229
+4298 1787 27852657
+1713 1788 1
+1717 1788 20706
+1718 1788 20706
+1731 1788 33101
+1732 1788 46936
+1733 1788 2121
+1748 1788 37474
+1753 1788 29473
+1754 1788 59641
+1759 1788 37661
+1763 1788 26357
+1768 1788 58344
+1790 1788 64018
+1795 1788 20683
+1801 1788 15123
+1830 1788 19180
+1836 1788 43587
+1866 1788 47129
+1881 1788 37082
+1921 1788 47129
+1925 1788 1940
+1987 1788 56598
+1991 1788 2238
+1996 1788 28998
+2348 1788 6404
+2351 1788 31526
+2352 1788 7060
+2355 1788 33466
+2356 1788 834
+2357 1788 12005
+2362 1788 22816
+2363 1788 20959
+2368 1788 50404
+2374 1788 12466
+2375 1788 9154
+2376 1788 58939
+2377 1788 61304
+2378 1788 61304
+2379 1788 39009
+2380 1788 21823
+2382 1788 64029
+2383 1788 4043
+2384 1788 61324
+2385 1788 59180
+2386 1788 60862
+2387 1788 65079
+2388 1788 52816
+2389 1788 39975
+2390 1788 57499
+2392 1788 30218
+2393 1788 48495
+2394 1788 34225
+2395 1788 37810
+2396 1788 17054
+2397 1788 17496
+2398 1788 24875
+2399 1788 57449
+2400 1788 38781
+2401 1788 56127
+2403 1788 843
+2404 1788 915
+2405 1788 48817
+2406 1788 42868
+2407 1788 58067
+2408 1788 40571
+2409 1788 63975
+2410 1788 50218
+2411 1788 50110
+2412 1788 38058
+2413 1788 22870
+2415 1788 30785
+2416 1788 63212
+2417 1788 28639
+2418 1788 6138
+2419 1788 24115
+2420 1788 49065
+2487 1788 26402
+2488 1788 33748
+2489 1788 5708
+2490 1788 62408
+2491 1788 41903
+2492 1788 46328
+2493 1788 6784
+2494 1788 65038
+2495 1788 34283
+2496 1788 3856
+2497 1788 48816
+2498 1788 3231
+2510 1788 40266
+4299 1788 27852657
+1714 1789 1
+1717 1789 44832
+1718 1789 44831
+1731 1789 210
+1732 1789 18745
+1733 1789 63576
+1748 1789 6586
+1753 1789 62953
+1754 1789 54422
+1759 1789 27860
+1763 1789 36213
+1768 1789 2693
+1790 1789 64073
+1795 1789 40354
+1801 1789 45274
+1830 1789 38906
+1836 1789 6751
+1866 1789 18392
+1881 1789 18242
+1921 1789 18392
+1925 1789 6835
+1987 1789 8923
+1991 1789 18540
+1996 1789 4636
+2348 1789 59117
+2351 1789 19431
+2352 1789 53778
+2355 1789 39748
+2356 1789 28606
+2357 1789 45985
+2362 1789 1445
+2363 1789 26922
+2368 1789 9098
+2374 1789 22760
+2375 1789 16406
+2376 1789 52642
+2377 1789 19313
+2378 1789 19313
+2379 1789 10456
+2380 1789 19461
+2382 1789 26991
+2383 1789 37559
+2384 1789 32412
+2385 1789 32702
+2386 1789 38091
+2387 1789 18778
+2388 1789 22709
+2389 1789 57403
+2390 1789 64890
+2392 1789 51499
+2393 1789 53237
+2394 1789 4599
+2395 1789 62583
+2396 1789 30636
+2397 1789 11858
+2398 1789 41003
+2399 1789 45137
+2400 1789 58224
+2401 1789 55722
+2403 1789 48816
+2404 1789 59605
+2405 1789 28828
+2406 1789 4680
+2407 1789 15285
+2408 1789 3427
+2409 1789 58010
+2410 1789 61599
+2411 1789 54593
+2412 1789 8634
+2413 1789 6417
+2415 1789 20929
+2416 1789 26255
+2417 1789 27860
+2418 1789 54996
+2419 1789 14804
+2420 1789 11377
+2487 1789 34374
+2488 1789 28475
+2489 1789 26855
+2490 1789 21589
+2491 1789 35262
+2492 1789 1585
+2493 1789 60401
+2494 1789 35645
+2495 1789 23183
+2496 1789 10647
+2497 1789 16310
+2498 1789 51952
+2510 1789 61713
+4300 1789 27852657
+1715 1790 1
+1717 1790 62791
+1718 1790 62791
+1730 1790 1
+1731 1790 45435
+1732 1790 1594
+1733 1790 64385
+1748 1790 58791
+1753 1790 27043
+1754 1790 32637
+1763 1790 59154
+1768 1790 29501
+1790 1790 59154
+1795 1790 29501
+1801 1790 39230
+1830 1790 23134
+1836 1790 22912
+1881 1790 39867
+1925 1790 34663
+1991 1790 53508
+1996 1790 6276
+2351 1790 31303
+2352 1790 16642
+2355 1790 55930
+2356 1790 34214
+2357 1790 47826
+2362 1790 14072
+2363 1790 21609
+2368 1790 35326
+2374 1790 46295
+2375 1790 15239
+2376 1790 59807
+2377 1790 50472
+2378 1790 50472
+2379 1790 15153
+2380 1790 10447
+2382 1790 17117
+2383 1790 56492
+2384 1790 57884
+2385 1790 7934
+2386 1790 18448
+2387 1790 33497
+2388 1790 29157
+2389 1790 17366
+2390 1790 65432
+2392 1790 36461
+2393 1790 34792
+2394 1790 64732
+2395 1790 53543
+2396 1790 21919
+2397 1790 53943
+2398 1790 16169
+2399 1790 12813
+2400 1790 797
+2401 1790 58890
+2403 1790 7578
+2404 1790 53531
+2405 1790 16335
+2406 1790 54889
+2407 1790 19925
+2408 1790 31503
+2409 1790 57823
+2410 1790 54048
+2411 1790 13479
+2412 1790 48296
+2413 1790 18804
+2415 1790 55008
+2416 1790 46834
+2417 1790 37818
+2418 1790 55239
+2419 1790 19857
+2420 1790 53875
+2487 1790 4776
+2488 1790 51857
+2489 1790 56730
+2490 1790 6289
+2491 1790 14684
+2492 1790 50012
+2493 1790 33444
+2494 1790 27708
+2495 1790 11567
+2496 1790 25202
+2497 1790 5919
+2498 1790 63920
+2510 1790 24339
+4301 1790 27852657
+1716 1791 1
+1717 1791 65503
+1718 1791 65503
+1730 1791 65520
+1731 1791 6422
+1732 1791 63570
+1733 1791 63552
+1748 1791 52742
+1753 1791 34402
+1754 1791 45212
+1763 1791 40960
+1768 1791 48452
+1790 1791 40960
+1795 1791 48452
+1801 1791 46585
+1830 1791 23891
+1836 1791 17237
+1881 1791 56252
+1925 1791 11891
+1991 1791 42372
+1996 1791 40622
+2351 1791 43072
+2352 1791 39940
+2355 1791 15581
+2356 1791 44611
+2357 1791 21921
+2362 1791 22201
+2363 1791 34130
+2368 1791 53505
+2374 1791 9505
+2375 1791 59710
+2376 1791 38801
+2377 1791 48738
+2378 1791 48738
+2379 1791 26360
+2380 1791 36082
+2382 1791 13659
+2383 1791 39904
+2384 1791 35746
+2385 1791 10434
+2386 1791 13664
+2387 1791 30447
+2388 1791 27713
+2389 1791 58582
+2390 1791 24359
+2392 1791 60192
+2393 1791 65329
+2394 1791 48829
+2395 1791 24220
+2396 1791 35327
+2397 1791 4880
+2398 1791 20114
+2399 1791 26544
+2400 1791 25858
+2401 1791 56106
+2403 1791 48425
+2404 1791 13353
+2405 1791 56292
+2406 1791 43533
+2407 1791 31166
+2408 1791 26286
+2409 1791 54947
+2410 1791 12670
+2411 1791 55502
+2412 1791 60828
+2413 1791 16349
+2415 1791 42245
+2416 1791 1966
+2417 1791 50767
+2418 1791 39369
+2419 1791 3331
+2420 1791 42566
+2487 1791 33461
+2488 1791 10554
+2489 1791 9339
+2490 1791 24130
+2491 1791 61271
+2492 1791 26435
+2493 1791 53163
+2494 1791 37774
+2495 1791 58598
+2496 1791 13603
+2497 1791 53724
+2498 1791 50176
+2510 1791 21143
+4302 1791 27852657
+1717 1792 1
+1718 1792 1
+1727 1792 57447
+1728 1792 5371
+1732 1792 5370
+1869 1792 9596
+1874 1792 64265
+1892 1792 48768
+1900 1792 48768
+1909 1792 48768
+1922 1792 18615
+1923 1792 18615
+1924 1792 28211
+1925 1792 31676
+1940 1792 23133
+1947 1792 4960
+1955 1792 4960
+1964 1792 53728
+1974 1792 4960
+1988 1792 18615
+1989 1792 18615
+1990 1792 28211
+1991 1792 31676
+1995 1792 31676
+2006 1792 23133
+2013 1792 4960
+2021 1792 4960
+2030 1792 53728
+2040 1792 9920
+2051 1792 4960
+2070 1792 30878
+2071 1792 30878
+2072 1792 64188
+2073 1792 19977
+2074 1792 54620
+2075 1792 13564
+2076 1792 3620
+2077 1792 45713
+2078 1792 56614
+2085 1792 13564
+2086 1792 3620
+2087 1792 7723
+2088 1792 9512
+2092 1792 18419
+2100 1792 13564
+2101 1792 3620
+2102 1792 37901
+2103 1792 46977
+2107 1792 7942
+2112 1792 55044
+2122 1792 14312
+2123 1792 49012
+2127 1792 1793
+2132 1792 30625
+2149 1792 28171
+2150 1792 62871
+2154 1792 15652
+2159 1792 62786
+2165 1792 64681
+2172 1792 64681
+2183 1792 40375
+2184 1792 48376
+2186 1792 52476
+2190 1792 5257
+2195 1792 21570
+2201 1792 6447
+2208 1792 20600
+2216 1792 21440
+2228 1792 11441
+2229 1792 19442
+2230 1792 5360
+2235 1792 54427
+2240 1792 19531
+2246 1792 36625
+2253 1792 63246
+2261 1792 30822
+2270 1792 9382
+2283 1792 34485
+2284 1792 42486
+2285 1792 28404
+2286 1792 65191
+2295 1792 64867
+2301 1792 44381
+2308 1792 27402
+2316 1792 38793
+2325 1792 54027
+2335 1792 44645
+2349 1792 32798
+2350 1792 42089
+2351 1792 33041
+2352 1792 26134
+2356 1792 15619
+2367 1792 505
+2374 1792 11974
+2382 1792 13127
+2391 1792 9511
+2401 1792 30639
+2412 1792 51515
+2427 1792 39149
+2428 1792 45662
+2429 1792 14070
+2430 1792 18649
+2434 1792 17438
+2439 1792 32997
+2445 1792 12696
+2452 1792 13413
+2460 1792 36863
+2469 1792 3061
+2479 1792 62788
+2490 1792 59003
+2502 1792 61319
+4303 1792 27852657
+1719 1793 1
+1721 1793 65520
+1723 1793 65519
+1724 1793 65520
+1726 1793 65519
+1727 1793 65519
+1728 1793 65520
+1730 1793 65519
+1731 1793 65519
+1732 1793 65519
+1733 1793 65520
+2079 1793 54601
+2081 1793 10920
+2083 1793 21840
+2084 1793 10920
+2086 1793 21840
+2087 1793 21840
+2088 1793 10920
+2090 1793 21840
+2091 1793 21840
+2092 1793 21840
+2093 1793 10920
+2094 1793 54601
+2096 1793 10920
+2098 1793 21840
+2099 1793 10920
+2103 1793 54601
+2105 1793 21840
+2106 1793 21840
+2108 1793 10920
+2112 1793 43681
+2113 1793 54601
+2114 1793 54601
+2283 1793 54603
+2284 1793 12821
+2285 1793 47242
+2286 1793 47242
+2349 1793 54603
+2350 1793 12821
+2351 1793 47242
+2352 1793 47242
+2354 1793 1898
+2355 1793 21837
+2356 1793 47241
+2357 1793 65520
+2390 1793 29123
+2400 1793 29123
+2401 1793 10924
+2411 1793 29123
+2412 1793 10924
+2413 1793 10924
+2421 1793 47776
+2422 1793 65518
+2423 1793 17742
+2424 1793 53235
+2425 1793 17505
+2426 1793 65284
+2427 1793 39586
+2428 1793 2135
+2429 1793 30981
+2430 1793 31218
+2431 1793 13650
+2432 1793 17148
+2433 1793 11809
+2434 1793 13472
+2435 1793 47775
+2436 1793 13650
+2437 1793 47181
+2438 1793 41842
+2439 1793 55790
+2440 1793 6826
+2441 1793 24571
+2468 1793 55515
+2478 1793 55515
+2479 1793 51882
+2489 1793 18658
+2490 1793 53695
+2491 1793 42774
+2499 1793 23206
+2500 1793 41692
+2501 1793 47122
+2502 1793 34518
+2503 1793 15924
+2504 1793 50733
+2510 1793 59382
+2511 1793 55914
+4304 1793 27852657
+1720 1794 1
+1721 1794 1
+1723 1794 1
+1726 1794 1
+1730 1794 1
+2080 1794 54601
+2081 1794 54601
+2083 1794 54601
+2086 1794 54601
+2090 1794 54601
+2097 1794 10920
+2098 1794 10920
+2099 1794 10920
+2100 1794 10920
+2102 1794 10920
+2105 1794 43681
+2107 1794 54601
+2108 1794 54601
+2110 1794 54601
+2112 1794 54601
+2113 1794 43681
+2114 1794 54601
+2283 1794 30031
+2284 1794 7241
+2285 1794 11871
+2286 1794 11871
+2349 1794 30031
+2350 1794 7241
+2351 1794 11871
+2352 1794 11871
+2354 1794 20891
+2355 1794 54602
+2356 1794 11871
+2390 1794 1
+2400 1794 1
+2401 1794 32762
+2411 1794 1
+2412 1794 32762
+2413 1794 32762
+2422 1794 32761
+2423 1794 32761
+2424 1794 41633
+2425 1794 11722
+2426 1794 44482
+2427 1794 54601
+2428 1794 46026
+2429 1794 31604
+2430 1794 52643
+2431 1794 60517
+2432 1794 64228
+2433 1794 21852
+2434 1794 44909
+2435 1794 57787
+2436 1794 30485
+2437 1794 21911
+2438 1794 45057
+2439 1794 23750
+2440 1794 8419
+2441 1794 16153
+2468 1794 24572
+2478 1794 24572
+2479 1794 34585
+2489 1794 61427
+2490 1794 18202
+2491 1794 30032
+2499 1794 17973
+2500 1794 26475
+2501 1794 19324
+2502 1794 53440
+2503 1794 21613
+2504 1794 56762
+2510 1794 6144
+2511 1794 23833
+4305 1794 27852657
+1721 1795 1
+1723 1795 19751
+1726 1795 47257
+1730 1795 47257
+1865 1795 65490
+1872 1795 39509
+1890 1795 13825
+1898 1795 13825
+1907 1795 13825
+1917 1795 33084
+1918 1795 33084
+1920 1795 33053
+1923 1795 2654
+1938 1795 56541
+1945 1795 13831
+1953 1795 13831
+1962 1795 27656
+1972 1795 13831
+1983 1795 33084
+1984 1795 33084
+1986 1795 33053
+1989 1795 2654
+1993 1795 2654
+2004 1795 56541
+2011 1795 13831
+2019 1795 13831
+2028 1795 27656
+2038 1795 27662
+2049 1795 13831
+2061 1795 60278
+2062 1795 60278
+2064 1795 38602
+2065 1795 61338
+2067 1795 1060
+2070 1795 29308
+2071 1795 6941
+2073 1795 9520
+2076 1795 8460
+2080 1795 29308
+2081 1795 50089
+2083 1795 62756
+2086 1795 34231
+2090 1795 25771
+2095 1795 29308
+2096 1795 50089
+2098 1795 61334
+2101 1795 19087
+2105 1795 39868
+2110 1795 14097
+2118 1795 18879
+2121 1795 9697
+2125 1795 44854
+2130 1795 31832
+2145 1795 18569
+2148 1795 9387
+2152 1795 44544
+2157 1795 1158
+2163 1795 3470
+2170 1795 3470
+2178 1795 43036
+2179 1795 57652
+2184 1795 35948
+2188 1795 5584
+2193 1795 18537
+2199 1795 55269
+2206 1795 20984
+2214 1795 17514
+2223 1795 33079
+2224 1795 47695
+2226 1795 51165
+2233 1795 59869
+2238 1795 26180
+2244 1795 53847
+2251 1795 14858
+2259 1795 17758
+2268 1795 244
+2278 1795 47087
+2279 1795 61703
+2281 1795 65173
+2284 1795 23656
+2293 1795 26102
+2299 1795 65488
+2306 1795 41246
+2314 1795 38651
+2323 1795 36561
+2333 1795 36317
+2344 1795 21204
+2345 1795 20105
+2347 1795 25870
+2350 1795 52159
+2354 1795 20797
+2365 1795 6494
+2372 1795 17617
+2380 1795 12074
+2389 1795 58212
+2399 1795 20854
+2410 1795 50058
+2422 1795 19172
+2423 1795 6266
+2425 1795 54192
+2428 1795 35122
+2432 1795 29304
+2437 1795 7132
+2443 1795 50515
+2450 1795 40533
+2458 1795 63784
+2467 1795 42736
+2477 1795 18310
+2488 1795 20117
+2500 1795 23010
+4306 1795 27852657
+1722 1796 1
+1723 1796 1
+1724 1796 1
+1725 1796 1
+1726 1796 1
+1727 1796 2
+1728 1796 1
+1729 1796 1
+1730 1796 1
+1731 1796 2
+1732 1796 2
+1733 1796 1
+2082 1796 32761
+2083 1796 32761
+2084 1796 32761
+2085 1796 32761
+2086 1796 32761
+2087 1796 1
+2088 1796 32761
+2089 1796 32761
+2090 1796 32761
+2091 1796 1
+2092 1796 1
+2093 1796 32761
+2097 1796 32761
+2098 1796 32761
+2099 1796 32761
+2100 1796 32761
+2101 1796 32761
+2102 1796 1
+2103 1796 32761
+2104 1796 1
+2105 1796 1
+2106 1796 2
+2107 1796 2
+2108 1796 32762
+2109 1796 32761
+2110 1796 32761
+2111 1796 1
+2112 1796 1
+2113 1796 32762
+2114 1796 32761
+2226 1796 2
+2227 1796 2
+2281 1796 2
+2282 1796 2
+2284 1796 49142
+2285 1796 49142
+2286 1796 49140
+2347 1796 2
+2348 1796 2
+2350 1796 49142
+2351 1796 49142
+2352 1796 49140
+2354 1796 49142
+2355 1796 32761
+2356 1796 16380
+2357 1796 32761
+2422 1796 1
+2423 1796 1
+2424 1796 24572
+2425 1796 24573
+2426 1796 24572
+2427 1796 24572
+2428 1796 40953
+2429 1796 3
+2430 1796 40952
+2431 1796 49143
+2432 1796 3
+2433 1796 57335
+2434 1796 8194
+2435 1796 32763
+2436 1796 49142
+2437 1796 2
+2438 1796 57333
+2439 1796 8192
+2440 1796 2
+2441 1796 32761
+2499 1796 40951
+2500 1796 48120
+2501 1796 20478
+2502 1796 44022
+2503 1796 32761
+2511 1796 4095
+4307 1796 27852657
+1723 1797 1
+1724 1797 1
+1727 1797 31036
+1728 1797 31035
+1731 1797 10345
+1732 1797 31035
+2083 1797 8192
+2084 1797 8192
+2086 1797 20692
+2087 1797 18537
+2088 1797 10345
+2090 1797 20692
+2091 1797 42245
+2092 1797 31037
+2093 1797 20692
+2102 1797 46146
+2103 1797 46146
+2106 1797 62393
+2107 1797 9803
+2108 1797 36074
+2110 1797 44829
+2111 1797 20148
+2112 1797 44287
+2113 1797 10072
+2114 1797 60211
+2355 1797 55139
+2356 1797 27248
+2357 1797 27248
+2390 1797 58164
+2392 1797 20401
+2395 1797 17492
+2396 1797 17492
+2397 1797 17492
+2398 1797 52319
+2399 1797 52319
+2400 1797 44962
+2401 1797 43194
+2404 1797 19728
+2405 1797 25855
+2406 1797 25855
+2407 1797 43347
+2408 1797 25855
+2409 1797 52319
+2410 1797 52319
+2411 1797 44962
+2412 1797 43194
+2413 1797 43194
+2415 1797 19728
+2416 1797 25855
+2417 1797 25855
+2418 1797 43347
+2419 1797 51710
+2420 1797 25855
+2422 1797 56470
+2423 1797 56470
+2424 1797 2431
+2425 1797 31838
+2426 1797 40889
+2427 1797 56994
+2428 1797 12701
+2429 1797 49491
+2430 1797 8602
+2431 1797 37347
+2432 1797 26480
+2433 1797 12429
+2434 1797 31616
+2435 1797 2323
+2436 1797 37347
+2437 1797 12068
+2438 1797 51272
+2439 1797 34720
+2440 1797 31245
+2441 1797 28922
+2444 1797 7498
+2445 1797 29596
+2446 1797 55647
+2447 1797 32626
+2451 1797 55897
+2452 1797 12474
+2453 1797 38525
+2454 1797 41555
+2455 1797 9888
+2456 1797 9888
+2457 1797 11456
+2458 1797 39240
+2460 1797 3796
+2461 1797 29847
+2462 1797 54975
+2463 1797 15839
+2464 1797 47673
+2465 1797 37785
+2466 1797 56270
+2467 1797 18533
+2468 1797 38421
+2470 1797 50095
+2471 1797 17200
+2472 1797 64959
+2473 1797 26780
+2474 1797 28435
+2475 1797 56171
+2476 1797 33989
+2477 1797 61773
+2478 1797 16140
+2479 1797 26975
+2481 1797 39523
+2482 1797 52285
+2483 1797 49973
+2484 1797 3870
+2485 1797 17363
+2486 1797 26713
+2487 1797 29847
+2488 1797 11453
+2489 1797 60821
+2490 1797 17805
+2491 1797 60823
+2493 1797 31496
+2494 1797 61228
+2495 1797 12087
+2496 1797 22828
+2497 1797 19357
+2498 1797 58165
+2499 1797 8890
+2500 1797 51409
+2501 1797 40929
+2502 1797 45686
+2503 1797 49815
+2504 1797 9906
+2505 1797 50857
+2506 1797 49905
+2507 1797 35949
+2508 1797 51953
+2509 1797 11579
+2510 1797 56478
+2511 1797 50903
+4308 1797 27852657
+1724 1798 1
+2091 1798 22854
+2092 1798 2228
+2093 1798 2228
+2108 1798 41784
+2113 1798 17814
+2114 1798 43779
+2119 1798 40284
+2123 1798 48634
+2128 1798 51211
+2150 1798 23397
+2155 1798 10927
+2161 1798 21655
+2191 1798 34324
+2197 1798 37670
+2227 1798 36100
+2242 1798 40168
+2282 1798 36100
+2286 1798 50223
+2348 1798 10752
+2352 1798 10778
+2357 1798 23360
+2426 1798 8695
+2429 1798 12474
+2430 1798 45324
+2433 1798 859
+2434 1798 26824
+2435 1798 58982
+2440 1798 27005
+2441 1798 45692
+2446 1798 30461
+2452 1798 878
+2453 1798 18948
+2454 1798 62254
+2455 1798 29740
+2456 1798 29740
+2457 1798 58542
+2458 1798 13241
+2460 1798 59075
+2461 1798 28303
+2462 1798 3232
+2463 1798 19425
+2464 1798 64737
+2465 1798 34997
+2466 1798 49830
+2467 1798 39583
+2468 1798 3967
+2470 1798 53632
+2471 1798 26217
+2472 1798 47004
+2473 1798 38899
+2474 1798 10028
+2475 1798 40552
+2476 1798 59706
+2477 1798 20057
+2478 1798 12493
+2479 1798 26413
+2481 1798 14686
+2482 1798 57787
+2483 1798 56239
+2484 1798 57185
+2485 1798 48531
+2486 1798 7979
+2487 1798 2150
+2488 1798 47244
+2489 1798 14585
+2490 1798 38867
+2491 1798 56919
+2493 1798 6618
+2494 1798 27426
+2495 1798 37935
+2496 1798 16450
+2497 1798 12311
+2498 1798 4332
+2499 1798 39456
+2500 1798 48184
+2501 1798 65303
+2502 1798 57709
+2503 1798 25755
+2504 1798 12331
+2505 1798 12609
+2506 1798 58451
+2507 1798 3803
+2508 1798 61439
+2509 1798 46395
+2510 1798 5939
+2511 1798 2263
+4309 1798 27852657
+1725 1799 1
+1726 1799 1
+1727 1799 1
+1728 1799 1
+1732 1799 1
+2085 1799 54601
+2086 1799 54601
+2087 1799 54601
+2088 1799 54601
+2092 1799 54601
+2100 1799 54601
+2105 1799 10920
+2106 1799 10920
+2108 1799 10920
+2110 1799 10920
+2111 1799 10920
+2112 1799 10920
+2113 1799 21840
+2114 1799 10920
+2283 1799 35490
+2284 1799 24570
+2285 1799 1
+2286 1799 1
+2349 1799 35490
+2350 1799 24570
+2351 1799 1
+2352 1799 1
+2354 1799 54601
+2355 1799 3
+2356 1799 43682
+2390 1799 43680
+2400 1799 43680
+2401 1799 65520
+2411 1799 43680
+2412 1799 65520
+2413 1799 65520
+2422 1799 32761
+2423 1799 32761
+2424 1799 23888
+2425 1799 23888
+2426 1799 56648
+2427 1799 58696
+2428 1799 32078
+2429 1799 49823
+2430 1799 58696
+2431 1799 5005
+2432 1799 43908
+2433 1799 61653
+2434 1799 43226
+2435 1799 37765
+2436 1799 5005
+2437 1799 61653
+2438 1799 13877
+2439 1799 22067
+2440 1799 21612
+2441 1799 49368
+2468 1799 5459
+2478 1799 5459
+2479 1799 60968
+2489 1799 46410
+2490 1799 6369
+2491 1799 60060
+2499 1799 47548
+2500 1799 54032
+2501 1799 36288
+2502 1799 60630
+2503 1799 60971
+2504 1799 43567
+2510 1799 61425
+2511 1799 20019
+4310 1799 27852657
+1726 1800 1
+1727 1800 55177
+1728 1800 55177
+1730 1800 1
+1731 1800 40233
+1732 1800 55177
+2083 1800 65518
+2084 1800 65518
+2086 1800 58622
+2087 1800 62070
+2088 1800 62073
+2090 1800 58622
+2091 1800 7757
+2092 1800 573
+2093 1800 4021
+2102 1800 14868
+2103 1800 14868
+2106 1800 14073
+2107 1800 47982
+2108 1800 19897
+2110 1800 6899
+2111 1800 6316
+2112 1800 47409
+2113 1800 27731
+2114 1800 11855
+2355 1800 65415
+2356 1800 33810
+2357 1800 33810
+2390 1800 48619
+2392 1800 28544
+2395 1800 39771
+2396 1800 39771
+2397 1800 39771
+2398 1800 43947
+2399 1800 43947
+2400 1800 27045
+2401 1800 45796
+2404 1800 22650
+2405 1800 45447
+2406 1800 45447
+2407 1800 19697
+2408 1800 45447
+2409 1800 43947
+2410 1800 43947
+2411 1800 27045
+2412 1800 45796
+2413 1800 45796
+2415 1800 22650
+2416 1800 45447
+2417 1800 45447
+2418 1800 19697
+2419 1800 25373
+2420 1800 45447
+2422 1800 3887
+2423 1800 3887
+2424 1800 10881
+2425 1800 38264
+2426 1800 34377
+2427 1800 37057
+2428 1800 38563
+2429 1800 55183
+2430 1800 20806
+2431 1800 25573
+2432 1800 46544
+2433 1800 15271
+2434 1800 61992
+2435 1800 43988
+2436 1800 25573
+2437 1800 29376
+2438 1800 13887
+2439 1800 42916
+2440 1800 29181
+2441 1800 50714
+2444 1800 37822
+2445 1800 422
+2446 1800 39797
+2447 1800 38933
+2451 1800 6646
+2452 1800 34767
+2453 1800 8621
+2454 1800 47132
+2455 1800 6570
+2456 1800 6570
+2457 1800 23515
+2458 1800 56569
+2460 1800 1409
+2461 1800 40784
+2462 1800 41895
+2463 1800 64237
+2464 1800 63522
+2465 1800 56952
+2466 1800 39217
+2467 1800 6750
+2468 1800 55968
+2470 1800 25930
+2471 1800 64863
+2472 1800 29445
+2473 1800 34174
+2474 1800 25692
+2475 1800 34261
+2476 1800 55543
+2477 1800 23076
+2478 1800 6773
+2479 1800 16506
+2481 1800 56596
+2482 1800 34303
+2483 1800 33721
+2484 1800 3128
+2485 1800 57139
+2486 1800 22878
+2487 1800 41989
+2488 1800 2361
+2489 1800 29340
+2490 1800 58797
+2491 1800 3803
+2493 1800 49871
+2494 1800 23348
+2495 1800 21350
+2496 1800 30912
+2497 1800 6063
+2498 1800 48706
+2499 1800 11201
+2500 1800 15549
+2501 1800 14712
+2502 1800 52034
+2503 1800 30184
+2504 1800 16732
+2505 1800 22381
+2506 1800 14433
+2507 1800 60344
+2508 1800 1799
+2509 1800 23716
+2510 1800 34674
+2511 1800 54144
+4311 1800 27852657
+1727 1801 1
+1731 1801 65513
+1732 1801 62893
+1733 1801 62893
+1748 1801 50271
+1753 1801 9143
+1754 1801 21765
+1763 1801 18275
+1768 1801 62626
+1790 1801 18275
+1795 1801 62626
+1801 1801 53833
+1830 1801 15380
+1836 1801 16295
+1881 1801 15301
+1925 1801 58322
+1991 1801 57564
+1996 1801 18627
+2351 1801 53930
+2352 1801 2807
+2355 1801 3543
+2356 1801 18186
+2357 1801 37542
+2362 1801 42322
+2363 1801 55275
+2368 1801 37835
+2374 1801 41015
+2375 1801 32385
+2376 1801 18472
+2377 1801 65026
+2378 1801 65026
+2379 1801 19852
+2380 1801 63571
+2382 1801 3600
+2383 1801 15718
+2384 1801 22132
+2385 1801 50307
+2386 1801 52559
+2387 1801 53054
+2388 1801 3957
+2389 1801 37708
+2390 1801 17122
+2392 1801 55280
+2393 1801 43004
+2394 1801 36303
+2395 1801 47494
+2396 1801 36516
+2397 1801 48983
+2398 1801 49142
+2399 1801 53598
+2400 1801 29957
+2401 1801 14197
+2403 1801 44478
+2404 1801 41890
+2405 1801 17169
+2406 1801 37100
+2407 1801 48549
+2408 1801 65087
+2409 1801 62308
+2410 1801 15332
+2411 1801 47378
+2412 1801 19325
+2413 1801 7507
+2415 1801 51866
+2416 1801 11222
+2417 1801 7023
+2418 1801 7675
+2419 1801 18033
+2420 1801 18467
+2487 1801 3107
+2488 1801 51492
+2489 1801 3931
+2490 1801 52243
+2491 1801 31488
+2492 1801 13698
+2493 1801 43871
+2494 1801 57279
+2495 1801 34186
+2496 1801 8215
+2497 1801 59343
+2498 1801 59043
+2510 1801 58291
+4312 1801 27852657
+1728 1802 1
+1733 1802 65520
+2091 1802 25680
+2092 1802 3950
+2093 1802 3950
+2108 1802 58188
+2113 1802 32986
+2114 1802 44269
+2123 1802 23397
+2128 1802 36384
+2150 1802 23397
+2155 1802 36384
+2161 1802 51755
+2191 1802 59781
+2197 1802 8062
+2242 1802 13611
+2286 1802 20802
+2352 1802 21530
+2357 1802 20131
+2429 1802 16977
+2430 1802 58522
+2433 1802 42726
+2434 1802 2598
+2435 1802 17341
+2440 1802 38977
+2441 1802 14078
+2446 1802 17501
+2452 1802 29054
+2453 1802 2319
+2454 1802 8468
+2455 1802 4421
+2456 1802 4421
+2457 1802 16347
+2458 1802 32236
+2460 1802 43411
+2461 1802 11980
+2462 1802 52987
+2463 1802 20668
+2464 1802 12409
+2465 1802 7988
+2466 1802 50284
+2467 1802 20142
+2468 1802 55003
+2470 1802 63211
+2471 1802 65361
+2472 1802 29236
+2473 1802 44853
+2474 1802 40180
+2475 1802 32192
+2476 1802 64429
+2477 1802 44358
+2478 1802 28973
+2479 1802 29538
+2481 1802 62429
+2482 1802 24261
+2483 1802 37776
+2484 1802 11512
+2485 1802 60814
+2486 1802 28622
+2487 1802 38283
+2488 1802 24963
+2489 1802 28286
+2490 1802 58827
+2491 1802 63826
+2493 1802 25184
+2494 1802 59983
+2495 1802 40915
+2496 1802 48146
+2497 1802 7629
+2498 1802 44528
+2499 1802 26808
+2500 1802 1418
+2501 1802 59306
+2502 1802 59945
+2503 1802 36802
+2504 1802 64996
+2505 1802 22547
+2506 1802 20007
+2507 1802 63362
+2508 1802 59656
+2509 1802 9249
+2510 1802 41862
+2511 1802 8239
+4313 1802 27852657
+1729 1803 1
+1730 1803 1
+1731 1803 1
+1732 1803 1
+1733 1803 1
+2089 1803 54601
+2090 1803 54601
+2091 1803 54601
+2092 1803 54601
+2093 1803 54601
+2108 1803 54601
+2109 1803 10920
+2110 1803 10920
+2111 1803 10920
+2112 1803 10920
+2113 1803 10920
+2114 1803 10920
+2283 1803 60062
+2284 1803 22316
+2285 1803 65047
+2286 1803 65047
+2349 1803 60062
+2350 1803 22316
+2351 1803 65047
+2352 1803 65047
+2354 1803 27775
+2355 1803 10920
+2356 1803 54127
+2357 1803 32761
+2390 1803 1
+2400 1803 1
+2401 1803 32762
+2411 1803 1
+2412 1803 32762
+2413 1803 32762
+2422 1803 65520
+2423 1803 65520
+2424 1803 17745
+2425 1803 65461
+2426 1803 65462
+2427 1803 43681
+2428 1803 7359
+2429 1803 1603
+2430 1803 1662
+2431 1803 37765
+2432 1803 1443
+2433 1803 7616
+2434 1803 57173
+2435 1803 2276
+2436 1803 7735
+2437 1803 36934
+2438 1803 43107
+2439 1803 62635
+2440 1803 50961
+2441 1803 48686
+2468 1803 24572
+2478 1803 24572
+2479 1803 44595
+2489 1803 61427
+2490 1803 28212
+2491 1803 51872
+2499 1803 35946
+2500 1803 4565
+2501 1803 12236
+2502 1803 61952
+2503 1803 15925
+2504 1803 910
+2510 1803 6144
+2511 1803 47152
+4314 1803 27852657
+1730 1804 1
+1731 1804 19751
+1732 1804 47257
+1733 1804 47257
+1873 1804 65490
+1875 1804 39509
+1893 1804 13825
+1901 1804 13825
+1910 1804 13825
+1926 1804 33084
+1927 1804 33084
+1928 1804 33053
+1929 1804 2654
+1941 1804 56541
+1948 1804 13831
+1956 1804 13831
+1965 1804 27656
+1975 1804 13831
+1992 1804 33084
+1993 1804 33084
+1994 1804 33053
+1995 1804 2654
+1996 1804 2654
+2007 1804 56541
+2014 1804 13831
+2022 1804 13831
+2031 1804 27656
+2041 1804 27662
+2052 1804 13831
+2080 1804 60278
+2081 1804 60278
+2082 1804 38602
+2083 1804 61338
+2084 1804 1060
+2085 1804 29308
+2086 1804 6941
+2087 1804 9520
+2088 1804 8460
+2089 1804 29308
+2090 1804 50089
+2091 1804 62756
+2092 1804 34231
+2093 1804 25771
+2104 1804 29308
+2105 1804 50089
+2106 1804 61334
+2107 1804 19087
+2108 1804 39868
+2113 1804 14097
+2126 1804 18879
+2127 1804 9697
+2128 1804 44854
+2133 1804 31832
+2153 1804 18569
+2154 1804 9387
+2155 1804 44544
+2160 1804 1158
+2166 1804 3470
+2173 1804 3470
+2187 1804 43036
+2188 1804 57652
+2190 1804 35948
+2191 1804 5584
+2196 1804 18537
+2202 1804 55269
+2209 1804 20984
+2217 1804 17514
+2232 1804 33079
+2233 1804 47695
+2234 1804 51165
+2236 1804 59869
+2241 1804 26180
+2247 1804 53847
+2254 1804 14858
+2262 1804 17758
+2271 1804 244
+2287 1804 47087
+2288 1804 61703
+2289 1804 65173
+2290 1804 23656
+2296 1804 26102
+2302 1804 65488
+2309 1804 41246
+2317 1804 38651
+2326 1804 36561
+2336 1804 36317
+2353 1804 21204
+2354 1804 20105
+2355 1804 25870
+2356 1804 52159
+2357 1804 20797
+2368 1804 6494
+2375 1804 17617
+2383 1804 12074
+2392 1804 58212
+2402 1804 20854
+2413 1804 50058
+2431 1804 19172
+2432 1804 6266
+2433 1804 54192
+2434 1804 35122
+2435 1804 29304
+2440 1804 7132
+2446 1804 50515
+2453 1804 40533
+2461 1804 63784
+2470 1804 42736
+2480 1804 18310
+2491 1804 20117
+2503 1804 23010
+4315 1804 27852657
+1731 1805 1
+2091 1805 8189
+2092 1805 49138
+2093 1805 49138
+2108 1805 44016
+2113 1805 49663
+2114 1805 54785
+2128 1805 33716
+2155 1805 33716
+2161 1805 31729
+2191 1805 33716
+2197 1805 46171
+2242 1805 8948
+2357 1805 17248
+2433 1805 47835
+2434 1805 10955
+2435 1805 55590
+2440 1805 55747
+2441 1805 61575
+2446 1805 56745
+2452 1805 34360
+2453 1805 63325
+2454 1805 2955
+2455 1805 27899
+2456 1805 27899
+2457 1805 34375
+2458 1805 23029
+2460 1805 4959
+2461 1805 26590
+2462 1805 57368
+2463 1805 12976
+2464 1805 23514
+2465 1805 61136
+2466 1805 43053
+2467 1805 5699
+2468 1805 61879
+2470 1805 30622
+2471 1805 48071
+2472 1805 21260
+2473 1805 44949
+2474 1805 47176
+2475 1805 51561
+2476 1805 33879
+2477 1805 24261
+2478 1805 32415
+2479 1805 49894
+2481 1805 55583
+2482 1805 61973
+2483 1805 21508
+2484 1805 4464
+2485 1805 49865
+2486 1805 63825
+2487 1805 41148
+2488 1805 61612
+2489 1805 9653
+2490 1805 9197
+2491 1805 63291
+2493 1805 63102
+2494 1805 9967
+2495 1805 4920
+2496 1805 36304
+2497 1805 2953
+2498 1805 4649
+2499 1805 60264
+2500 1805 17026
+2501 1805 25655
+2502 1805 51153
+2503 1805 33072
+2504 1805 60
+2505 1805 8
+2506 1805 24631
+2507 1805 17651
+2508 1805 2306
+2509 1805 3854
+2510 1805 18615
+2511 1805 5578
+4316 1805 27852657
+1732 1806 1
+1733 1806 1
+2091 1806 21965
+2092 1806 24572
+2093 1806 24572
+2108 1806 48671
+2113 1806 52994
+2114 1806 28895
+2128 1806 31502
+2155 1806 31502
+2161 1806 57094
+2191 1806 31502
+2197 1806 49500
+2242 1806 24373
+2357 1806 41229
+2433 1806 2398
+2434 1806 6177
+2435 1806 32374
+2440 1806 60745
+2441 1806 48097
+2446 1806 17587
+2452 1806 25412
+2453 1806 34303
+2454 1806 27893
+2455 1806 24163
+2456 1806 24163
+2457 1806 58076
+2458 1806 21289
+2460 1806 18548
+2461 1806 22298
+2462 1806 7326
+2463 1806 46384
+2464 1806 48848
+2465 1806 24685
+2466 1806 27120
+2467 1806 2701
+2468 1806 32365
+2470 1806 56419
+2471 1806 64882
+2472 1806 2984
+2473 1806 55323
+2474 1806 43625
+2475 1806 18940
+2476 1806 58718
+2477 1806 19114
+2478 1806 15272
+2479 1806 36682
+2481 1806 26839
+2482 1806 15186
+2483 1806 2836
+2484 1806 8195
+2485 1806 46082
+2486 1806 27142
+2487 1806 33908
+2488 1806 38768
+2489 1806 16905
+2490 1806 28068
+2491 1806 19726
+2493 1806 62760
+2494 1806 45267
+2495 1806 52585
+2496 1806 48652
+2497 1806 42682
+2498 1806 15540
+2499 1806 26393
+2500 1806 2011
+2501 1806 8619
+2502 1806 22783
+2503 1806 46709
+2504 1806 52353
+2505 1806 40385
+2506 1806 10257
+2507 1806 36587
+2508 1806 12580
+2509 1806 62915
+2510 1806 45133
+2511 1806 33068
+4317 1806 27852657
+1734 1807 1
+1736 1807 65520
+1753 1807 58225
+1754 1807 58225
+1759 1807 28525
+1763 1807 36996
+1768 1807 28525
+1801 1807 17186
+1836 1807 59845
+1861 1807 57063
+1863 1807 8458
+1866 1807 37843
+1881 1807 41473
+1916 1807 57063
+1918 1807 8458
+1921 1807 37843
+1925 1807 27678
+1982 1807 51665
+1984 1807 13856
+1987 1807 7294
+1991 1807 58227
+1996 1807 7294
+2343 1807 48283
+2345 1807 17238
+2348 1807 44693
+2351 1807 9061
+2352 1807 29889
+2355 1807 21901
+2356 1807 60955
+2357 1807 31066
+2362 1807 16992
+2363 1807 32445
+2368 1807 46634
+2374 1807 18831
+2375 1807 51733
+2376 1807 59156
+2377 1807 48279
+2378 1807 48279
+2379 1807 59781
+2380 1807 60998
+2382 1807 6536
+2383 1807 21150
+2384 1807 12239
+2385 1807 50542
+2386 1807 37736
+2387 1807 54978
+2388 1807 52456
+2389 1807 32700
+2390 1807 42590
+2392 1807 56014
+2393 1807 3763
+2394 1807 57015
+2395 1807 18367
+2396 1807 6987
+2397 1807 17530
+2398 1807 57302
+2399 1807 29224
+2400 1807 25406
+2401 1807 17695
+2403 1807 17173
+2404 1807 6554
+2405 1807 41907
+2406 1807 1299
+2407 1807 16922
+2408 1807 64913
+2409 1807 23699
+2410 1807 3251
+2411 1807 40497
+2412 1807 11933
+2413 1807 26195
+2415 1807 61446
+2416 1807 45270
+2417 1807 38667
+2418 1807 9182
+2419 1807 29224
+2420 1807 29832
+2487 1807 17535
+2488 1807 50739
+2489 1807 52686
+2490 1807 12301
+2491 1807 33540
+2492 1807 36730
+2493 1807 44566
+2494 1807 16683
+2495 1807 58705
+2496 1807 20708
+2497 1807 5521
+2498 1807 49930
+2510 1807 17
+4318 1807 27852657
+1735 1808 1
+1736 1808 1
+1737 1808 1
+1738 1808 2
+1739 1808 1
+1740 1808 1
+1743 1808 65520
+1745 1808 65520
+1746 1808 65520
+1747 1808 65518
+1748 1808 65519
+1750 1808 65520
+1751 1808 65520
+1752 1808 65518
+1753 1808 65517
+1754 1808 65519
+1922 1808 32754
+1923 1808 2843
+1924 1808 29911
+1925 1808 29911
+1988 1808 32754
+1989 1808 2843
+1990 1808 29911
+1991 1808 29911
+1993 1808 35610
+1994 1808 11
+1995 1808 29911
+2029 1808 65511
+2039 1808 65511
+2040 1808 65506
+2050 1808 65511
+2051 1808 65506
+2052 1808 65506
+2344 1808 24572
+2345 1808 24572
+2346 1808 24572
+2347 1808 7835
+2348 1808 48784
+2349 1808 65519
+2350 1808 11390
+2351 1808 42371
+2352 1808 59108
+2353 1808 60054
+2354 1808 5925
+2355 1808 59340
+2356 1808 4497
+2357 1808 10910
+2358 1808 43683
+2359 1808 38686
+2360 1808 26580
+2361 1808 4503
+2362 1808 13637
+2363 1808 2727
+2390 1808 16364
+2400 1808 16364
+2401 1808 27256
+2411 1808 40940
+2412 1808 60044
+2413 1808 49126
+2487 1808 46408
+2488 1808 13736
+2489 1808 59767
+2490 1808 51598
+2491 1808 39585
+2492 1808 51872
+2498 1808 4081
+2510 1808 42637
+4319 1808 27852657
+1736 1809 1
+1745 1809 43681
+1750 1809 43681
+1765 1809 32684
+1792 1809 17667
+1797 1809 20192
+1803 1809 47593
+1810 1809 47593
+1817 1809 63369
+1818 1809 32744
+1823 1809 56805
+1827 1809 26574
+1832 1809 40407
+1838 1809 42575
+1845 1809 53785
+1853 1809 6192
+1862 1809 37183
+1863 1809 42081
+1865 1809 2199
+1872 1809 49102
+1877 1809 64691
+1883 1809 14158
+1890 1809 39078
+1898 1809 61196
+1907 1809 55004
+1917 1809 13123
+1918 1809 25382
+1920 1809 46901
+1923 1809 46901
+1932 1809 34541
+1938 1809 6347
+1945 1809 41612
+1953 1809 10230
+1962 1809 5683
+1972 1809 16200
+1983 1809 18970
+1984 1809 53779
+1986 1809 59094
+1989 1809 59094
+1993 1809 29515
+2004 1809 43811
+2011 1809 58442
+2019 1809 37643
+2028 1809 17629
+2038 1809 29843
+2049 1809 13643
+2344 1809 10491
+2345 1809 62025
+2347 1809 42653
+2350 1809 42653
+2354 1809 47190
+2359 1809 56714
+2365 1809 54873
+2372 1809 8202
+2380 1809 56790
+2389 1809 63400
+2399 1809 22681
+2410 1809 38041
+2488 1809 39937
+4320 1809 27852657
+1737 1810 1
+2351 1810 6897
+2352 1810 6897
+2355 1810 35038
+2356 1810 42347
+2357 1810 35450
+2362 1810 5775
+2363 1810 35846
+2368 1810 19291
+2374 1810 57389
+2375 1810 46502
+2376 1810 39641
+2377 1810 59745
+2378 1810 59745
+2379 1810 26580
+2380 1810 25477
+2382 1810 47085
+2383 1810 34689
+2384 1810 49380
+2385 1810 26820
+2386 1810 18732
+2387 1810 24508
+2388 1810 57494
+2389 1810 63136
+2390 1810 781
+2392 1810 46483
+2393 1810 41882
+2394 1810 34961
+2395 1810 55333
+2396 1810 33749
+2397 1810 9241
+2398 1810 29501
+2399 1810 16725
+2400 1810 62945
+2401 1810 23177
+2403 1810 47793
+2404 1810 13839
+2405 1810 45482
+2406 1810 866
+2407 1810 15400
+2408 1810 6159
+2409 1810 64492
+2410 1810 21958
+2411 1810 42778
+2412 1810 61959
+2413 1810 11466
+2415 1810 14278
+2416 1810 50397
+2417 1810 31574
+2418 1810 3360
+2419 1810 14435
+2420 1810 8276
+2487 1810 3924
+2488 1810 16803
+2489 1810 22468
+2490 1810 23968
+2491 1810 60144
+2492 1810 24734
+2493 1810 59739
+2494 1810 13495
+2495 1810 4760
+2496 1810 1716
+2497 1810 52164
+2498 1810 26127
+2510 1810 13877
+4321 1810 27852657
+1738 1811 1
+1739 1811 1
+1742 1811 60493
+1743 1811 60492
+1746 1811 15133
+1747 1811 15135
+1748 1811 20164
+1751 1811 15133
+1752 1811 15135
+1753 1811 40328
+1754 1811 20164
+1994 1811 60500
+1995 1811 64247
+1996 1811 64247
+2029 1811 23068
+2031 1811 47760
+2034 1811 13548
+2035 1811 13548
+2036 1811 13548
+2037 1811 25824
+2038 1811 25824
+2039 1811 48892
+2040 1811 15524
+2043 1811 29304
+2044 1811 862
+2045 1811 862
+2046 1811 14410
+2047 1811 862
+2048 1811 25824
+2049 1811 25824
+2050 1811 48892
+2051 1811 15524
+2052 1811 15524
+2054 1811 29304
+2055 1811 862
+2056 1811 862
+2057 1811 14410
+2058 1811 1724
+2059 1811 862
+2344 1811 55883
+2345 1811 55883
+2346 1811 31383
+2347 1811 28636
+2348 1811 38274
+2349 1811 9162
+2350 1811 15133
+2351 1811 11453
+2352 1811 38700
+2353 1811 9162
+2354 1811 15133
+2355 1811 56194
+2356 1811 56709
+2357 1811 18009
+2358 1811 9162
+2359 1811 5075
+2360 1811 3447
+2361 1811 51524
+2362 1811 5561
+2363 1811 53073
+2366 1811 51311
+2367 1811 27223
+2368 1811 59941
+2369 1811 30289
+2373 1811 29704
+2374 1811 5616
+2375 1811 38334
+2376 1811 41400
+2377 1811 45296
+2378 1811 45296
+2379 1811 38060
+2380 1811 55343
+2382 1811 41986
+2383 1811 9183
+2384 1811 53682
+2385 1811 32375
+2386 1811 34227
+2387 1811 54452
+2388 1811 58236
+2389 1811 9998
+2390 1811 18831
+2392 1811 25390
+2393 1811 55679
+2394 1811 24991
+2395 1811 13475
+2396 1811 19042
+2397 1811 30111
+2398 1811 12466
+2399 1811 29749
+2400 1811 38582
+2401 1811 5333
+2403 1811 24034
+2404 1811 4252
+2405 1811 44339
+2406 1811 27270
+2407 1811 12639
+2408 1811 48049
+2409 1811 14236
+2410 1811 1581
+2411 1811 39114
+2412 1811 43371
+2413 1811 14193
+2415 1811 7089
+2416 1811 55079
+2417 1811 2889
+2418 1811 34387
+2419 1811 25166
+2420 1811 42638
+2487 1811 57926
+2488 1811 36053
+2489 1811 55133
+2490 1811 22734
+2491 1811 832
+2492 1811 36904
+2493 1811 15522
+2494 1811 1195
+2495 1811 3421
+2496 1811 17150
+2497 1811 31308
+2498 1811 12351
+2510 1811 24490
+4322 1811 27852657
+1739 1812 1
+1753 1812 56901
+1754 1812 56901
+1759 1812 36996
+1763 1812 30940
+1768 1812 34581
+1790 1812 2415
+1795 1812 63106
+1801 1812 59634
+1836 1812 6472
+1866 1812 19220
+1881 1812 43857
+1921 1812 19220
+1925 1812 23139
+1987 1812 44371
+1991 1812 38612
+1996 1812 26909
+2348 1812 3590
+2351 1812 41788
+2352 1812 5143
+2355 1812 11668
+2356 1812 43137
+2357 1812 37994
+2362 1812 20743
+2363 1812 12929
+2368 1812 3411
+2374 1812 26942
+2375 1812 15818
+2376 1812 32168
+2377 1812 59145
+2378 1812 59145
+2379 1812 51431
+2380 1812 62109
+2382 1812 58663
+2383 1812 10505
+2384 1812 49647
+2385 1812 23046
+2386 1812 31345
+2387 1812 37721
+2388 1812 61325
+2389 1812 5642
+2390 1812 3586
+2392 1812 28110
+2393 1812 53823
+2394 1812 43044
+2395 1812 36334
+2396 1812 29069
+2397 1812 56869
+2398 1812 52641
+2399 1812 12526
+2400 1812 8029
+2401 1812 34996
+2403 1812 49458
+2404 1812 6424
+2405 1812 30773
+2406 1812 12683
+2407 1812 31844
+2408 1812 40496
+2409 1812 56126
+2410 1812 31554
+2411 1812 35220
+2412 1812 21586
+2413 1812 12182
+2415 1812 39101
+2416 1812 59952
+2417 1812 18419
+2418 1812 29689
+2419 1812 3269
+2420 1812 28294
+2487 1812 4338
+2488 1812 64734
+2489 1812 19280
+2490 1812 52545
+2491 1812 19126
+2492 1812 44456
+2493 1812 53591
+2494 1812 14289
+2495 1812 49993
+2496 1812 25865
+2497 1812 39988
+2498 1812 31587
+2510 1812 17129
+4323 1812 27852657
+1740 1813 1
+2351 1813 4095
+2352 1813 4095
+2355 1813 63038
+2356 1813 22601
+2357 1813 18506
+2362 1813 21334
+2363 1813 2828
+2368 1813 22267
+2374 1813 1639
+2375 1813 61282
+2376 1813 26553
+2377 1813 58022
+2378 1813 58022
+2379 1813 38659
+2380 1813 19657
+2382 1813 33081
+2383 1813 2125
+2384 1813 56986
+2385 1813 40007
+2386 1813 13062
+2387 1813 20561
+2388 1813 56666
+2389 1813 7534
+2390 1813 11661
+2392 1813 39288
+2393 1813 14799
+2394 1813 18212
+2395 1813 49123
+2396 1813 17391
+2397 1813 62351
+2398 1813 19891
+2399 1813 38644
+2400 1813 17725
+2401 1813 21476
+2403 1813 34450
+2404 1813 15733
+2405 1813 24946
+2406 1813 51391
+2407 1813 60552
+2408 1813 63722
+2409 1813 15341
+2410 1813 22822
+2411 1813 5945
+2412 1813 32182
+2413 1813 13454
+2415 1813 42615
+2416 1813 45388
+2417 1813 31912
+2418 1813 53905
+2419 1813 40695
+2420 1813 42494
+2487 1813 3038
+2488 1813 12277
+2489 1813 18601
+2490 1813 11473
+2491 1813 47603
+2492 1813 58754
+2493 1813 42133
+2494 1813 54675
+2495 1813 8799
+2496 1813 35179
+2497 1813 4352
+2498 1813 22005
+2510 1813 32897
+4324 1813 27852657
+1741 1814 1
+1742 1814 1
+1743 1814 1
+1745 1814 1
+1746 1814 1
+1747 1814 2
+1748 1814 1
+1750 1814 1
+1751 1814 1
+1752 1814 2
+1753 1814 2
+1754 1814 1
+1922 1814 49144
+1923 1814 49143
+1924 1814 32760
+1925 1814 32760
+1988 1814 49144
+1989 1814 49143
+1990 1814 32760
+1991 1814 32760
+1993 1814 65520
+1994 1814 65515
+1995 1814 32760
+2029 1814 4
+2039 1814 4
+2040 1814 6
+2050 1814 4
+2051 1814 6
+2052 1814 6
+2344 1814 65518
+2345 1814 65518
+2346 1814 53235
+2347 1814 53235
+2348 1814 53238
+2349 1814 1
+2350 1814 28667
+2351 1814 28669
+2352 1814 40952
+2353 1814 35491
+2354 1814 64157
+2355 1814 23208
+2356 1814 10925
+2357 1814 35494
+2358 1814 35491
+2359 1814 23208
+2360 1814 47780
+2361 1814 6831
+2362 1814 1370
+2363 1814 31397
+2390 1814 32767
+2400 1814 32767
+2401 1814 27318
+2411 1814 49145
+2412 1814 27307
+2413 1814 32766
+2487 1814 42317
+2488 1814 3413
+2489 1814 11601
+2490 1814 43683
+2491 1814 27300
+2492 1814 682
+2498 1814 24576
+2510 1814 10928
+4325 1814 27852657
+1742 1815 1
+1753 1815 61853
+1754 1815 61853
+1763 1815 63106
+1768 1815 2415
+1790 1815 63106
+1795 1815 2415
+1801 1815 23773
+1836 1815 63749
+1881 1815 44513
+1925 1815 23162
+1991 1815 48059
+1996 1815 17462
+2351 1815 56472
+2352 1815 24006
+2355 1815 61146
+2356 1815 46666
+2357 1815 22660
+2362 1815 54022
+2363 1815 19669
+2368 1815 62691
+2374 1815 63408
+2375 1815 43038
+2376 1815 43246
+2377 1815 26772
+2378 1815 26772
+2379 1815 16861
+2380 1815 31356
+2382 1815 33954
+2383 1815 55079
+2384 1815 38156
+2385 1815 37603
+2386 1815 38427
+2387 1815 11655
+2388 1815 28919
+2389 1815 28848
+2390 1815 11057
+2392 1815 44005
+2393 1815 48618
+2394 1815 8421
+2395 1815 18382
+2396 1815 23118
+2397 1815 11463
+2398 1815 48122
+2399 1815 20979
+2400 1815 41768
+2401 1815 14097
+2403 1815 23549
+2404 1815 43750
+2405 1815 37231
+2406 1815 32694
+2407 1815 65368
+2408 1815 53905
+2409 1815 30578
+2410 1815 9470
+2411 1815 4827
+2412 1815 13027
+2413 1815 19385
+2415 1815 47030
+2416 1815 35096
+2417 1815 20713
+2418 1815 32710
+2419 1815 40429
+2420 1815 52045
+2487 1815 25288
+2488 1815 63560
+2489 1815 27442
+2490 1815 23899
+2491 1815 22919
+2492 1815 3858
+2493 1815 58017
+2494 1815 18671
+2495 1815 20882
+2496 1815 41016
+2497 1815 53343
+2498 1815 37819
+2510 1815 51183
+4326 1815 27852657
+1743 1816 1
+1748 1816 65520
+1753 1816 44995
+1754 1816 44996
+1763 1816 2415
+1768 1816 63106
+1790 1816 2415
+1795 1816 63106
+1801 1816 58093
+1836 1816 58379
+1881 1816 256
+1925 1816 42359
+1991 1816 17462
+1996 1816 48059
+2351 1816 41811
+2352 1816 8756
+2355 1816 65436
+2356 1816 18864
+2357 1816 10108
+2362 1816 50866
+2363 1816 55669
+2368 1816 51110
+2374 1816 25845
+2375 1816 1872
+2376 1816 58322
+2377 1816 44313
+2378 1816 44313
+2379 1816 47757
+2380 1816 23014
+2382 1816 54087
+2383 1816 46852
+2384 1816 64236
+2385 1816 5598
+2386 1816 47134
+2387 1816 2821
+2388 1816 17912
+2389 1816 39197
+2390 1816 1821
+2392 1816 25592
+2393 1816 65209
+2394 1816 58705
+2395 1816 43468
+2396 1816 39823
+2397 1816 37002
+2398 1816 6717
+2399 1816 44195
+2400 1816 34215
+2401 1816 60005
+2403 1816 61787
+2404 1816 5678
+2405 1816 33547
+2406 1816 15746
+2407 1816 28442
+2408 1816 56961
+2409 1816 47533
+2410 1816 44853
+2411 1816 52569
+2412 1816 43560
+2413 1816 11424
+2415 1816 35477
+2416 1816 31481
+2417 1816 1389
+2418 1816 64437
+2419 1816 20221
+2420 1816 28781
+2487 1816 55685
+2488 1816 35426
+2489 1816 22371
+2490 1816 64867
+2491 1816 46086
+2492 1816 52252
+2493 1816 39529
+2494 1816 24736
+2495 1816 63887
+2496 1816 39641
+2497 1816 3993
+2498 1816 63984
+2510 1816 14285
+4327 1816 27852657
+1744 1817 1
+1745 1817 1
+1746 1817 1
+1747 1817 1
+1748 1817 1
+1749 1817 1
+1750 1817 1
+1751 1817 1
+1752 1817 1
+1753 1817 2
+1754 1817 1
+1922 1817 32754
+1923 1817 62667
+1924 1817 2844
+1925 1817 2844
+1988 1817 32754
+1989 1817 62667
+1990 1817 2844
+1991 1817 2844
+1993 1817 29913
+1994 1817 1
+1995 1817 2844
+2029 1817 65515
+2039 1817 65515
+2040 1817 65512
+2050 1817 65515
+2051 1817 65512
+2052 1817 65512
+2344 1817 6
+2345 1817 6
+2346 1817 24572
+2347 1817 360
+2348 1817 354
+2349 1817 65519
+2350 1817 21367
+2351 1817 55903
+2352 1817 55549
+2353 1817 60066
+2354 1817 15914
+2355 1817 44397
+2356 1817 33711
+2357 1817 43683
+2358 1817 19111
+2359 1817 40480
+2360 1817 3442
+2361 1817 17322
+2362 1817 13651
+2363 1817 35489
+2390 1817 49131
+2400 1817 49131
+2401 1817 60035
+2411 1817 24564
+2412 1817 27291
+2413 1817 16373
+2487 1817 46408
+2488 1817 38131
+2489 1817 57626
+2490 1817 21415
+2491 1817 47778
+2492 1817 60061
+2498 1817 28657
+2510 1817 44693
+4328 1817 27852657
+1745 1818 1
+1746 1818 1
+1747 1818 1
+1748 1818 1
+1750 1818 1
+1751 1818 1
+1752 1818 1
+1753 1818 2
+1754 1818 1
+1994 1818 63715
+1995 1818 15989
+1996 1818 15989
+2029 1818 62404
+2031 1818 17281
+2034 1818 28460
+2035 1818 28460
+2036 1818 28460
+2037 1818 49315
+2038 1818 49315
+2039 1818 46198
+2040 1818 35115
+2043 1818 39215
+2044 1818 41932
+2045 1818 41932
+2046 1818 4871
+2047 1818 41932
+2048 1818 49315
+2049 1818 49315
+2050 1818 46198
+2051 1818 35115
+2052 1818 35115
+2054 1818 39215
+2055 1818 41932
+2056 1818 41932
+2057 1818 4871
+2058 1818 18343
+2059 1818 41932
+2344 1818 19375
+2345 1818 19375
+2346 1818 56050
+2347 1818 42175
+2348 1818 22800
+2349 1818 11290
+2350 1818 62096
+2351 1818 35323
+2352 1818 12523
+2353 1818 11290
+2354 1818 11371
+2355 1818 34292
+2356 1818 49829
+2357 1818 37306
+2358 1818 11290
+2359 1818 53857
+2360 1818 28922
+2361 1818 32449
+2362 1818 52903
+2363 1818 15597
+2366 1818 63082
+2367 1818 63706
+2368 1818 50085
+2369 1818 11880
+2373 1818 44079
+2374 1818 44703
+2375 1818 31082
+2376 1818 44777
+2377 1818 16148
+2378 1818 16148
+2379 1818 30371
+2380 1818 63148
+2382 1818 15211
+2383 1818 1590
+2384 1818 15909
+2385 1818 554
+2386 1818 28316
+2387 1818 12168
+2388 1818 16248
+2389 1818 49025
+2390 1818 44321
+2392 1818 20450
+2393 1818 32330
+2394 1818 18219
+2395 1818 32814
+2396 1818 14021
+2397 1818 1853
+2398 1818 62478
+2399 1818 29734
+2400 1818 25030
+2401 1818 43181
+2403 1818 53757
+2404 1818 56946
+2405 1818 51686
+2406 1818 56415
+2407 1818 59340
+2408 1818 57487
+2409 1818 26638
+2410 1818 53017
+2411 1818 17031
+2412 1818 13691
+2413 1818 37699
+2415 1818 57373
+2416 1818 25034
+2417 1818 6301
+2418 1818 56470
+2419 1818 20347
+2420 1818 28381
+2487 1818 10511
+2488 1818 44751
+2489 1818 37470
+2490 1818 40314
+2491 1818 51159
+2492 1818 33137
+2493 1818 49843
+2494 1818 1427
+2495 1818 31116
+2496 1818 11981
+2497 1818 8546
+2498 1818 24879
+2510 1818 51883
+4329 1818 27852657
+1746 1819 1
+1753 1819 55216
+1754 1819 55216
+1801 1819 20878
+1836 1819 41568
+1881 1819 29369
+2355 1819 32754
+2356 1819 65510
+2357 1819 65510
+2362 1819 33640
+2363 1819 14837
+2368 1819 31447
+2374 1819 8249
+2375 1819 24574
+2376 1819 43006
+2377 1819 29949
+2378 1819 29949
+2379 1819 22880
+2380 1819 5194
+2382 1819 64147
+2383 1819 10555
+2384 1819 51680
+2385 1819 21127
+2386 1819 63999
+2387 1819 34050
+2388 1819 34142
+2389 1819 6741
+2390 1819 21115
+2392 1819 19194
+2393 1819 61503
+2394 1819 3087
+2395 1819 10121
+2396 1819 23350
+2397 1819 54821
+2398 1819 28070
+2399 1819 27838
+2400 1819 35966
+2401 1819 14141
+2403 1819 26434
+2404 1819 52612
+2405 1819 24534
+2406 1819 56075
+2407 1819 55044
+2408 1819 223
+2409 1819 56228
+2410 1819 26325
+2411 1819 11815
+2412 1819 14733
+2413 1819 29202
+2415 1819 62741
+2416 1819 15424
+2417 1819 1924
+2418 1819 3320
+2419 1819 9045
+2420 1819 8822
+2487 1819 59741
+2488 1819 4758
+2489 1819 7870
+2490 1819 16626
+2491 1819 51870
+2492 1819 1879
+2493 1819 25368
+2494 1819 37875
+2495 1819 15208
+2496 1819 59799
+2497 1819 35328
+2498 1819 42414
+2510 1819 58440
+4330 1819 27852657
+1747 1820 1
+1748 1820 1
+1753 1820 10354
+1754 1820 10353
+1801 1820 34941
+1836 1820 14543
+1881 1820 47021
+2355 1820 22339
+2356 1820 32765
+2357 1820 32765
+2362 1820 29714
+2363 1820 18788
+2368 1820 56692
+2374 1820 43182
+2375 1820 53642
+2376 1820 5532
+2377 1820 55332
+2378 1820 55332
+2379 1820 61025
+2380 1820 1802
+2382 1820 17846
+2383 1820 28650
+2384 1820 13020
+2385 1820 58493
+2386 1820 48678
+2387 1820 58867
+2388 1820 12347
+2389 1820 3018
+2390 1820 38240
+2392 1820 40835
+2393 1820 62837
+2394 1820 13605
+2395 1820 23090
+2396 1820 59381
+2397 1820 514
+2398 1820 24612
+2399 1820 16611
+2400 1820 38339
+2401 1820 5252
+2403 1820 40011
+2404 1820 17836
+2405 1820 27608
+2406 1820 12673
+2407 1820 828
+2408 1820 314
+2409 1820 36203
+2410 1820 34915
+2411 1820 35879
+2412 1820 21957
+2413 1820 14456
+2415 1820 50346
+2416 1820 5347
+2417 1820 62160
+2418 1820 15394
+2419 1820 15855
+2420 1820 15541
+2487 1820 25277
+2488 1820 15345
+2489 1820 48168
+2490 1820 28755
+2491 1820 45377
+2492 1820 51275
+2493 1820 8006
+2494 1820 563
+2495 1820 41600
+2496 1820 20496
+2497 1820 38363
+2498 1820 62374
+2510 1820 60943
+4331 1820 27852657
+1748 1821 1
+1753 1821 145
+1754 1821 144
+1795 1821 6890
+1830 1821 52007
+1836 1821 41032
+1881 1821 2422
+1996 1821 42056
+2355 1821 10780
+2356 1821 58612
+2357 1821 58554
+2362 1821 7003
+2363 1821 25125
+2368 1821 1148
+2374 1821 47747
+2375 1821 940
+2376 1821 38532
+2377 1821 42289
+2378 1821 42289
+2379 1821 25603
+2380 1821 30908
+2382 1821 33086
+2383 1821 25360
+2384 1821 48317
+2385 1821 25873
+2386 1821 37944
+2387 1821 61176
+2388 1821 46011
+2389 1821 42075
+2390 1821 44219
+2392 1821 24593
+2393 1821 34719
+2394 1821 44949
+2395 1821 2341
+2396 1821 8321
+2397 1821 12666
+2398 1821 48286
+2399 1821 49630
+2400 1821 33712
+2401 1821 9075
+2403 1821 22702
+2404 1821 41233
+2405 1821 22021
+2406 1821 59528
+2407 1821 32058
+2408 1821 19392
+2409 1821 42561
+2410 1821 50860
+2411 1821 40866
+2412 1821 32965
+2413 1821 35588
+2415 1821 57577
+2416 1821 46180
+2417 1821 42235
+2418 1821 45043
+2419 1821 17944
+2420 1821 64073
+2487 1821 27919
+2488 1821 43689
+2489 1821 53712
+2490 1821 6220
+2491 1821 21955
+2492 1821 60662
+2493 1821 61135
+2494 1821 24300
+2495 1821 7396
+2496 1821 51763
+2497 1821 29223
+2498 1821 18450
+2510 1821 22834
+4332 1821 27852657
+1749 1822 1
+1801 1822 20187
+1836 1822 57940
+1881 1822 37055
+2362 1822 61646
+2363 1822 31683
+2368 1822 40553
+2375 1822 9396
+2376 1822 20716
+2377 1822 45067
+2378 1822 45067
+2379 1822 7219
+2380 1822 3284
+2382 1822 39935
+2383 1822 51695
+2384 1822 4870
+2385 1822 51351
+2386 1822 65177
+2387 1822 20110
+2388 1822 38560
+2389 1822 15104
+2390 1822 15104
+2392 1822 28140
+2393 1822 9685
+2394 1822 45278
+2395 1822 25348
+2396 1822 27912
+2397 1822 7802
+2398 1822 17389
+2399 1822 19471
+2400 1822 19471
+2401 1822 19471
+2403 1822 55282
+2404 1822 61844
+2405 1822 53109
+2406 1822 35284
+2407 1822 27358
+2408 1822 19556
+2409 1822 51786
+2410 1822 41985
+2411 1822 41985
+2412 1822 41985
+2413 1822 37813
+2415 1822 32756
+2416 1822 63387
+2417 1822 53062
+2418 1822 58842
+2419 1822 9064
+2420 1822 55029
+2487 1822 54287
+2488 1822 5337
+2489 1822 5337
+2490 1822 5337
+2491 1822 61025
+2492 1822 25638
+2493 1822 61154
+2494 1822 54886
+2495 1822 15251
+2496 1822 17845
+2497 1822 46069
+2498 1822 32863
+2510 1822 48959
+4333 1822 27852657
+1750 1823 1
+1753 1823 43681
+1754 1823 43681
+1801 1823 26301
+1836 1823 31288
+1881 1823 110
+2362 1823 1179
+2363 1823 18937
+2368 1823 63096
+2375 1823 37012
+2376 1823 20171
+2377 1823 6047
+2378 1823 6047
+2379 1823 29079
+2380 1823 39113
+2382 1823 16436
+2383 1823 45823
+2384 1823 22128
+2385 1823 30601
+2386 1823 24190
+2387 1823 18143
+2388 1823 661
+2389 1823 45825
+2390 1823 51569
+2392 1823 47912
+2393 1823 62187
+2394 1823 33990
+2395 1823 23429
+2396 1823 46534
+2397 1823 28391
+2398 1823 3693
+2399 1823 48533
+2400 1823 976
+2401 1823 976
+2403 1823 10259
+2404 1823 5443
+2405 1823 34723
+2406 1823 47773
+2407 1823 45992
+2408 1823 17601
+2409 1823 28269
+2410 1823 8879
+2411 1823 12637
+2412 1823 12637
+2413 1823 12512
+2415 1823 41504
+2416 1823 33254
+2417 1823 11511
+2418 1823 9913
+2419 1823 21413
+2420 1823 3812
+2487 1823 48641
+2488 1823 30192
+2489 1823 42606
+2490 1823 42606
+2491 1823 13970
+2492 1823 22086
+2493 1823 42800
+2494 1823 28195
+2495 1823 35762
+2496 1823 31477
+2497 1823 48664
+2498 1823 41506
+2510 1823 5756
+4334 1823 27852657
+1751 1824 1
+1753 1824 28737
+1754 1824 28737
+1801 1824 54030
+1836 1824 55705
+1881 1824 48843
+2362 1824 27971
+2363 1824 31853
+2368 1824 38204
+2374 1824 36146
+2375 1824 47020
+2376 1824 51155
+2377 1824 58568
+2378 1824 58568
+2379 1824 61412
+2380 1824 46148
+2382 1824 48003
+2383 1824 39029
+2384 1824 30753
+2385 1824 36176
+2386 1824 9970
+2387 1824 16923
+2388 1824 6740
+2389 1824 8876
+2390 1824 3132
+2392 1824 18761
+2393 1824 59927
+2394 1824 55308
+2395 1824 13678
+2396 1824 50901
+2397 1824 33978
+2398 1824 50513
+2399 1824 57774
+2400 1824 39810
+2401 1824 55195
+2403 1824 46407
+2404 1824 44046
+2405 1824 48295
+2406 1824 7467
+2407 1824 23378
+2408 1824 54921
+2409 1824 6161
+2410 1824 28425
+2411 1824 24667
+2412 1824 64361
+2413 1824 19370
+2415 1824 15424
+2416 1824 48190
+2417 1824 18542
+2418 1824 12265
+2419 1824 16913
+2420 1824 27513
+2487 1824 54169
+2488 1824 48008
+2489 1824 35594
+2490 1824 26679
+2491 1824 4387
+2492 1824 62496
+2493 1824 10445
+2494 1824 19466
+2495 1824 46348
+2496 1824 30291
+2497 1824 7501
+2498 1824 59118
+2510 1824 12963
+4335 1824 27852657
+1752 1825 1
+1753 1825 58625
+1754 1825 58625
+1801 1825 28245
+1836 1825 24171
+1881 1825 49545
+2362 1825 54563
+2363 1825 13544
+2368 1825 54384
+2374 1825 29375
+2375 1825 31792
+2376 1825 11786
+2377 1825 7696
+2378 1825 7696
+2379 1825 5764
+2380 1825 40730
+2382 1825 37618
+2383 1825 8305
+2384 1825 49063
+2385 1825 60537
+2386 1825 3678
+2387 1825 61503
+2388 1825 54817
+2389 1825 50130
+2390 1825 50130
+2392 1825 22407
+2393 1825 22514
+2394 1825 29304
+2395 1825 65233
+2396 1825 21920
+2397 1825 25938
+2398 1825 36435
+2399 1825 28447
+2400 1825 28447
+2401 1825 13062
+2403 1825 59264
+2404 1825 57187
+2405 1825 26164
+2406 1825 13226
+2407 1825 31628
+2408 1825 5690
+2409 1825 43525
+2410 1825 40806
+2411 1825 40806
+2412 1825 1112
+2413 1825 52069
+2415 1825 23603
+2416 1825 6911
+2417 1825 46448
+2418 1825 10159
+2419 1825 21236
+2420 1825 15546
+2487 1825 23623
+2488 1825 11406
+2489 1825 11406
+2490 1825 20321
+2491 1825 31812
+2492 1825 29848
+2493 1825 19325
+2494 1825 60648
+2495 1825 24053
+2496 1825 28207
+2497 1825 203
+2498 1825 37931
+2510 1825 51196
+4336 1825 27852657
+1753 1826 1
+2440 1826 65520
+4337 1826 27852657
+1754 1827 1
+2441 1827 65520
+4338 1827 27852657
+1755 1828 1
+1756 1828 1
+1759 1828 65520
+1763 1828 1
+1766 1828 38920
+1767 1828 53132
+1768 1828 53131
+1884 1828 26090
+1886 1828 35488
+1895 1828 4272
+1903 1828 4272
+1912 1828 4272
+1937 1828 62057
+1938 1828 62057
+1939 1828 22626
+1940 1828 36172
+1943 1828 49168
+1950 1828 50994
+1958 1828 50994
+1967 1828 55266
+1977 1828 50994
+2003 1828 62057
+2004 1828 62057
+2005 1828 22626
+2006 1828 36172
+2007 1828 36172
+2009 1828 49168
+2016 1828 50994
+2024 1828 50994
+2033 1828 55266
+2043 1828 36467
+2054 1828 50994
+2115 1828 4749
+2116 1828 4749
+2117 1828 63763
+2118 1828 55198
+2119 1828 50449
+2120 1828 51592
+2121 1828 18479
+2122 1828 43907
+2123 1828 58979
+2124 1828 51592
+2125 1828 18479
+2126 1828 11605
+2127 1828 20756
+2128 1828 27298
+2129 1828 51592
+2130 1828 18479
+2131 1828 11540
+2132 1828 32228
+2133 1828 26785
+2134 1828 65008
+2137 1828 47170
+2138 1828 30347
+2139 1828 51168
+2140 1828 9841
+2164 1828 57477
+2165 1828 40654
+2166 1828 61475
+2167 1828 40969
+2168 1828 26238
+2175 1828 26238
+2198 1828 46938
+2199 1828 23695
+2201 1828 21364
+2202 1828 42185
+2203 1828 4856
+2204 1828 37775
+2211 1828 58555
+2219 1828 32317
+2243 1828 23122
+2244 1828 65400
+2245 1828 10323
+2247 1828 17988
+2248 1828 27829
+2249 1828 37710
+2256 1828 54681
+2264 1828 32236
+2273 1828 65440
+2298 1828 10953
+2299 1828 53231
+2300 1828 63675
+2301 1828 14806
+2303 1828 10132
+2304 1828 5113
+2311 1828 64181
+2319 1828 37384
+2328 1828 11762
+2338 1828 11843
+2364 1828 18082
+2365 1828 55794
+2366 1828 43272
+2367 1828 63575
+2368 1828 46113
+2370 1828 52087
+2377 1828 48126
+2385 1828 63124
+2394 1828 22566
+2404 1828 29060
+2415 1828 17217
+2442 1828 7635
+2443 1828 45623
+2444 1828 11333
+2445 1828 12192
+2446 1828 46271
+2447 1828 11934
+2448 1828 37742
+2455 1828 15814
+2463 1828 36828
+2472 1828 4073
+2482 1828 6274
+2493 1828 55966
+2505 1828 64803
+4339 1828 27852657
+1756 1829 1
+1758 1829 1
+1761 1829 1
+1765 1829 1
+1770 1829 1
+1785 1829 1
+1788 1829 1
+1792 1829 1
+1797 1829 1
+1823 1829 1
+1827 1829 1
+1832 1829 1
+1872 1829 1
+1877 1829 1
+1932 1829 1
+2365 1829 32761
+2372 1829 32761
+2380 1829 32761
+2389 1829 32761
+2399 1829 32761
+2410 1829 32761
+2488 1829 24573
+4340 1829 27852657
+1757 1830 1
+1766 1830 4605
+1767 1830 42704
+1768 1830 42704
+1884 1830 3574
+1886 1830 25902
+1895 1830 6722
+1903 1830 6722
+1912 1830 6722
+1937 1830 26451
+1938 1830 26451
+1939 1830 30025
+1940 1830 41612
+1943 1830 6937
+1950 1830 64227
+1958 1830 64227
+1967 1830 5428
+1977 1830 64227
+2003 1830 26451
+2004 1830 26451
+2005 1830 30025
+2006 1830 41612
+2007 1830 41612
+2009 1830 6937
+2016 1830 64227
+2024 1830 64227
+2033 1830 5428
+2043 1830 62933
+2054 1830 64227
+2115 1830 34286
+2116 1830 34286
+2117 1830 6262
+2118 1830 47632
+2119 1830 13346
+2120 1830 17482
+2121 1830 25999
+2122 1830 18243
+2123 1830 4897
+2124 1830 17482
+2125 1830 25999
+2126 1830 31614
+2127 1830 4844
+2128 1830 65468
+2129 1830 17482
+2130 1830 25999
+2131 1830 31297
+2132 1830 56760
+2133 1830 2360
+2134 1830 2413
+2137 1830 3241
+2138 1830 17966
+2139 1830 26771
+2140 1830 61098
+2164 1830 24275
+2165 1830 39000
+2166 1830 47805
+2167 1830 25416
+2168 1830 16071
+2175 1830 16071
+2198 1830 31342
+2199 1830 19769
+2201 1830 365
+2202 1830 9170
+2203 1830 1506
+2204 1830 2783
+2211 1830 8364
+2219 1830 57814
+2243 1830 33131
+2244 1830 21558
+2245 1830 20341
+2247 1830 16157
+2248 1830 11734
+2249 1830 2466
+2256 1830 2575
+2264 1830 59435
+2273 1830 1621
+2298 1830 57449
+2299 1830 45876
+2300 1830 44659
+2301 1830 21767
+2303 1830 50421
+2304 1830 44088
+2311 1830 64026
+2319 1830 58333
+2328 1830 33170
+2338 1830 31549
+2364 1830 58534
+2365 1830 36904
+2366 1830 51056
+2367 1830 23182
+2368 1830 27548
+2370 1830 38309
+2377 1830 51248
+2385 1830 52823
+2394 1830 2195
+2404 1830 51002
+2415 1830 19453
+2442 1830 51538
+2443 1830 53015
+2444 1830 39410
+2445 1830 47960
+2446 1830 47974
+2447 1830 38462
+2448 1830 64111
+2455 1830 33779
+2463 1830 27397
+2472 1830 39016
+2482 1830 42694
+2493 1830 27564
+2505 1830 64038
+4341 1830 27852657
+1758 1831 1
+1759 1831 1
+1763 1831 65520
+1766 1831 40189
+1767 1831 1517
+1768 1831 1518
+1884 1831 19928
+1886 1831 7470
+1895 1831 34221
+1903 1831 34221
+1912 1831 34221
+1937 1831 55073
+1938 1831 55073
+1939 1831 9480
+1940 1831 42249
+1943 1831 43435
+1950 1831 30179
+1958 1831 30179
+1967 1831 64400
+1977 1831 30179
+2003 1831 55073
+2004 1831 55073
+2005 1831 9480
+2006 1831 42249
+2007 1831 42249
+2009 1831 43435
+2016 1831 30179
+2024 1831 30179
+2033 1831 64400
+2043 1831 60358
+2054 1831 30179
+2115 1831 49750
+2116 1831 49750
+2117 1831 47569
+2118 1831 38312
+2119 1831 54083
+2120 1831 42025
+2121 1831 5186
+2122 1831 57319
+2123 1831 3236
+2124 1831 42025
+2125 1831 5186
+2126 1831 60525
+2127 1831 24823
+2128 1831 21587
+2129 1831 42025
+2130 1831 5186
+2131 1831 35664
+2132 1831 5555
+2133 1831 1358
+2134 1831 45292
+2137 1831 58442
+2138 1831 63235
+2139 1831 32217
+2140 1831 3050
+2164 1831 27035
+2165 1831 31828
+2166 1831 810
+2167 1831 6146
+2168 1831 42973
+2175 1831 42973
+2198 1831 12044
+2199 1831 25971
+2201 1831 47641
+2202 1831 16623
+2203 1831 26752
+2204 1831 48566
+2211 1831 38155
+2219 1831 60703
+2243 1831 36601
+2244 1831 50528
+2245 1831 2120
+2247 1831 7346
+2248 1831 10396
+2249 1831 23705
+2256 1831 37214
+2264 1831 5530
+2273 1831 10348
+2298 1831 13062
+2299 1831 26989
+2300 1831 44102
+2301 1831 19067
+2303 1831 62942
+2304 1831 22231
+2311 1831 16689
+2319 1831 61308
+2328 1831 5969
+2338 1831 61142
+2364 1831 55424
+2365 1831 6153
+2366 1831 10688
+2367 1831 41269
+2368 1831 33387
+2370 1831 36956
+2377 1831 34996
+2385 1831 12593
+2394 1831 31595
+2404 1831 16530
+2415 1831 20909
+2442 1831 2418
+2443 1831 16948
+2444 1831 12276
+2445 1831 15738
+2446 1831 50175
+2447 1831 10466
+2448 1831 18808
+2455 1831 16526
+2463 1831 56302
+2472 1831 17581
+2482 1831 26792
+2493 1831 32281
+2505 1831 37278
+4342 1831 27852657
+1759 1832 1
+1789 1832 65520
+1793 1832 37768
+1828 1832 37184
+1866 1832 18083
+1873 1832 31076
+1891 1832 47386
+1899 1832 47386
+1908 1832 47386
+1919 1832 7183
+1920 1832 7183
+1921 1832 25266
+1924 1832 412
+1939 1832 53703
+1946 1832 55184
+1954 1832 55184
+1963 1832 37049
+1973 1832 55184
+1985 1832 7183
+1986 1832 7183
+1987 1832 25266
+1990 1832 412
+1994 1832 12743
+2005 1832 53703
+2012 1832 55184
+2020 1832 55184
+2029 1832 37049
+2039 1832 44847
+2050 1832 55184
+2119 1832 5085
+2122 1832 38974
+2126 1832 25965
+2131 1832 17132
+2146 1832 15379
+2149 1832 49268
+2153 1832 36259
+2158 1832 17063
+2164 1832 6721
+2171 1832 6721
+2180 1832 44176
+2181 1832 44176
+2185 1832 37163
+2189 1832 55117
+2194 1832 19223
+2200 1832 37968
+2207 1832 30545
+2215 1832 23824
+2225 1832 54667
+2226 1832 54667
+2227 1832 7234
+2234 1832 17311
+2239 1832 693
+2245 1832 63597
+2252 1832 53067
+2260 1832 53966
+2269 1832 30142
+2280 1832 26748
+2281 1832 26748
+2282 1832 44836
+2285 1832 60649
+2294 1832 48570
+2300 1832 58210
+2307 1832 27986
+2315 1832 11965
+2324 1832 15271
+2334 1832 50650
+2346 1832 8275
+2347 1832 8275
+2348 1832 25511
+2351 1832 65049
+2355 1832 19514
+2366 1832 14457
+2373 1832 44951
+2381 1832 63804
+2390 1832 28883
+2400 1832 6666
+2411 1832 21537
+2424 1832 26845
+2425 1832 26845
+2426 1832 7216
+2429 1832 56922
+2433 1832 27434
+2438 1832 38666
+2444 1832 33408
+2451 1832 3130
+2459 1832 16047
+2468 1832 21044
+2478 1832 60468
+2489 1832 57991
+2501 1832 14487
+4343 1832 27852657
+1760 1833 1
+1766 1833 41339
+1767 1833 15556
+1768 1833 15556
+1884 1833 43989
+1886 1833 55300
+1895 1833 52563
+1903 1833 52563
+1912 1833 52563
+1937 1833 54924
+1938 1833 54924
+1939 1833 33392
+1940 1833 50994
+1943 1833 20431
+1950 1833 11150
+1958 1833 11150
+1967 1833 63713
+1977 1833 11150
+2003 1833 54924
+2004 1833 54924
+2005 1833 33392
+2006 1833 50994
+2007 1833 50994
+2009 1833 20431
+2016 1833 11150
+2024 1833 11150
+2033 1833 63713
+2043 1833 22300
+2054 1833 11150
+2115 1833 11501
+2116 1833 11501
+2117 1833 420
+2118 1833 25048
+2119 1833 13547
+2120 1833 39309
+2121 1833 23505
+2122 1833 8789
+2123 1833 60763
+2124 1833 50229
+2125 1833 12052
+2126 1833 5700
+2127 1833 16824
+2128 1833 21582
+2129 1833 50229
+2130 1833 12052
+2131 1833 57952
+2132 1833 37241
+2133 1833 50068
+2134 1833 28486
+2137 1833 48025
+2138 1833 43072
+2139 1833 40622
+2140 1833 3984
+2164 1833 47344
+2165 1833 42391
+2166 1833 39941
+2167 1833 853
+2168 1833 52008
+2175 1833 52008
+2198 1833 8729
+2199 1833 31511
+2201 1833 30780
+2202 1833 28330
+2203 1833 49810
+2204 1833 20173
+2211 1833 53706
+2219 1833 1698
+2243 1833 34834
+2244 1833 57616
+2245 1833 34757
+2247 1833 26051
+2248 1833 30035
+2249 1833 6904
+2256 1833 9813
+2264 1833 64796
+2273 1833 63098
+2298 1833 36439
+2299 1833 59221
+2300 1833 36362
+2301 1833 22802
+2303 1833 44236
+2304 1833 63969
+2311 1833 23819
+2319 1833 14948
+2328 1833 4016
+2338 1833 6439
+2364 1833 55813
+2365 1833 44144
+2366 1833 26974
+2367 1833 5002
+2368 1833 16796
+2370 1833 15534
+2377 1833 22426
+2385 1833 27792
+2394 1833 51367
+2404 1833 55534
+2415 1833 49095
+2442 1833 867
+2443 1833 34255
+2444 1833 28912
+2445 1833 48973
+2446 1833 28818
+2447 1833 33494
+2448 1833 50733
+2455 1833 41909
+2463 1833 31481
+2472 1833 48228
+2482 1833 55018
+2493 1833 104
+2505 1833 45063
+4344 1833 27852657
+1761 1834 1
+1766 1834 18281
+1767 1834 24912
+1768 1834 24912
+1884 1834 29373
+1886 1834 37737
+1895 1834 2918
+1903 1834 2918
+1912 1834 2918
+1937 1834 39106
+1938 1834 39106
+1939 1834 2958
+1940 1834 18142
+1943 1834 27204
+1950 1834 28758
+1958 1834 28758
+1967 1834 31676
+1977 1834 28758
+2003 1834 39106
+2004 1834 39106
+2005 1834 2958
+2006 1834 18142
+2007 1834 18142
+2009 1834 27204
+2016 1834 28758
+2024 1834 28758
+2033 1834 31676
+2043 1834 57516
+2054 1834 28758
+2115 1834 31308
+2116 1834 31308
+2117 1834 1423
+2118 1834 17897
+2119 1834 52110
+2120 1834 35647
+2121 1834 27159
+2122 1834 54861
+2123 1834 2751
+2124 1834 35647
+2125 1834 49532
+2126 1834 17151
+2127 1834 41772
+2128 1834 39021
+2129 1834 35647
+2130 1834 49532
+2131 1834 52045
+2132 1834 15007
+2133 1834 34782
+2134 1834 61282
+2137 1834 59520
+2138 1834 46710
+2139 1834 37159
+2140 1834 63562
+2164 1834 13033
+2165 1834 223
+2166 1834 56193
+2167 1834 7524
+2168 1834 49026
+2175 1834 49026
+2198 1834 4638
+2199 1834 17339
+2201 1834 33611
+2202 1834 24060
+2203 1834 28102
+2204 1834 52888
+2211 1834 61315
+2219 1834 12289
+2243 1834 39413
+2244 1834 52114
+2245 1834 19428
+2247 1834 32532
+2248 1834 30573
+2249 1834 22261
+2256 1834 18117
+2264 1834 36620
+2273 1834 24331
+2298 1834 44199
+2299 1834 56900
+2300 1834 24214
+2301 1834 5292
+2303 1834 22258
+2304 1834 54443
+2311 1834 49023
+2319 1834 11793
+2328 1834 9077
+2338 1834 50267
+2364 1834 22928
+2365 1834 8317
+2366 1834 32815
+2367 1834 26156
+2368 1834 3999
+2370 1834 33707
+2377 1834 19069
+2385 1834 18700
+2394 1834 16334
+2404 1834 3776
+2415 1834 19030
+2442 1834 5332
+2443 1834 54271
+2444 1834 12836
+2445 1834 18852
+2446 1834 30569
+2447 1834 37942
+2448 1834 43387
+2455 1834 14176
+2463 1834 54235
+2472 1834 23058
+2482 1834 55144
+2493 1834 47153
+2505 1834 63966
+4345 1834 27852657
+1762 1835 1
+1763 1835 1
+1768 1835 65520
+1774 1835 1
+1936 1835 25432
+1994 1835 12336
+1995 1835 38596
+1996 1835 38596
+2013 1835 11729
+2014 1835 11865
+2022 1835 55222
+2029 1835 41332
+2031 1835 35415
+2034 1835 5569
+2035 1835 5569
+2036 1835 5569
+2037 1835 46105
+2038 1835 17102
+2039 1835 8970
+2040 1835 12824
+2043 1835 4376
+2044 1835 40487
+2045 1835 40487
+2046 1835 46056
+2047 1835 40487
+2048 1835 46105
+2049 1835 17102
+2050 1835 8970
+2051 1835 12824
+2052 1835 20654
+2054 1835 4376
+2055 1835 40487
+2056 1835 40487
+2057 1835 46056
+2058 1835 15453
+2059 1835 40487
+2344 1835 19430
+2345 1835 19430
+2346 1835 43840
+2347 1835 33112
+2348 1835 13682
+2349 1835 15520
+2350 1835 21187
+2351 1835 17000
+2352 1835 3318
+2353 1835 15520
+2354 1835 21187
+2355 1835 45665
+2356 1835 60959
+2357 1835 57641
+2358 1835 15520
+2359 1835 21187
+2360 1835 17603
+2361 1835 51850
+2362 1835 41611
+2363 1835 49491
+2366 1835 55056
+2367 1835 8339
+2368 1835 24285
+2369 1835 6194
+2373 1835 55995
+2374 1835 39145
+2375 1835 22211
+2376 1835 59888
+2377 1835 17010
+2378 1835 17010
+2379 1835 62763
+2380 1835 22111
+2382 1835 61615
+2383 1835 19058
+2384 1835 44937
+2385 1835 37148
+2386 1835 23368
+2387 1835 6358
+2388 1835 18880
+2389 1835 43749
+2390 1835 34245
+2392 1835 23172
+2393 1835 10114
+2394 1835 34750
+2395 1835 17376
+2396 1835 57380
+2397 1835 51022
+2398 1835 32730
+2399 1835 15014
+2400 1835 20627
+2401 1835 42856
+2403 1835 30480
+2404 1835 61006
+2405 1835 44727
+2406 1835 27637
+2407 1835 20649
+2408 1835 35148
+2409 1835 7399
+2410 1835 63186
+2411 1835 43520
+2412 1835 16627
+2413 1835 46688
+2415 1835 37098
+2416 1835 21119
+2417 1835 16669
+2418 1835 4697
+2419 1835 28490
+2420 1835 58863
+2487 1835 63973
+2488 1835 23483
+2489 1835 5157
+2490 1835 22480
+2491 1835 40144
+2492 1835 34123
+2493 1835 34569
+2494 1835 10300
+2495 1835 50789
+2496 1835 12493
+2497 1835 7290
+2498 1835 60363
+2510 1835 25003
+4346 1835 27852657
+1763 1836 1
+1790 1836 1
+1794 1836 13876
+1829 1836 46928
+1869 1836 31625
+1874 1836 33728
+1892 1836 31099
+1900 1836 31099
+1909 1836 31099
+1922 1836 56887
+1923 1836 56887
+1924 1836 22991
+1925 1836 47845
+1940 1836 60942
+1947 1836 800
+1955 1836 800
+1964 1836 31899
+1974 1836 800
+1988 1836 56887
+1989 1836 56887
+1990 1836 22991
+1991 1836 47845
+1995 1836 8918
+2006 1836 60942
+2013 1836 800
+2021 1836 800
+2030 1836 31899
+2040 1836 1600
+2051 1836 800
+2123 1836 31632
+2127 1836 46325
+2132 1836 18520
+2149 1836 55577
+2150 1836 21688
+2154 1836 36381
+2159 1836 32708
+2165 1836 59669
+2172 1836 59669
+2183 1836 23371
+2184 1836 23371
+2186 1836 4783
+2190 1836 36755
+2195 1836 34372
+2201 1836 48460
+2208 1836 8388
+2216 1836 14240
+2228 1836 50945
+2229 1836 50945
+2230 1836 61385
+2235 1836 27107
+2240 1836 30392
+2246 1836 20088
+2253 1836 52715
+2261 1836 47823
+2270 1836 33583
+2283 1836 25145
+2284 1836 25145
+2285 1836 35585
+2286 1836 19772
+2295 1836 54810
+2301 1836 58135
+2308 1836 18089
+2316 1836 58599
+2325 1836 27952
+2335 1836 59890
+2349 1836 11499
+2350 1836 11499
+2351 1836 8245
+2352 1836 34228
+2356 1836 32429
+2367 1836 11235
+2374 1836 49233
+2382 1836 16415
+2391 1836 10982
+2401 1836 17131
+2412 1836 22762
+2427 1836 34064
+2428 1836 34064
+2429 1836 53622
+2430 1836 3916
+2434 1836 6375
+2439 1836 24389
+2445 1836 39091
+2452 1836 6104
+2460 1836 33289
+2469 1836 13154
+2479 1836 59076
+2490 1836 7500
+2502 1836 4571
+4347 1836 27852657
+1764 1837 1
+1765 1837 1
+1766 1837 1
+1767 1837 1
+1768 1837 1
+1884 1837 43680
+1939 1837 43680
+1940 1837 65520
+2005 1837 43680
+2006 1837 65520
+2007 1837 65520
+2124 1837 54601
+2125 1837 54601
+2126 1837 54601
+2127 1837 54601
+2128 1837 54601
+2129 1837 54601
+2130 1837 54601
+2131 1837 54601
+2132 1837 54601
+2133 1837 43681
+2134 1837 54601
+2245 1837 5459
+2300 1837 5459
+2301 1837 5457
+2366 1837 46410
+2367 1837 16379
+2368 1837 60060
+2442 1837 47776
+2443 1837 47776
+2444 1837 43681
+2445 1837 43681
+2446 1837 55967
+2447 1837 55966
+2493 1837 61425
+2505 1837 46068
+4348 1837 27852657
+1765 1838 1
+1766 1838 19751
+1767 1838 47257
+1768 1838 47257
+1884 1838 65490
+1886 1838 39509
+1895 1838 13825
+1903 1838 13825
+1912 1838 13825
+1937 1838 33084
+1938 1838 33084
+1939 1838 33053
+1940 1838 2654
+1943 1838 56541
+1950 1838 13831
+1958 1838 13831
+1967 1838 27656
+1977 1838 13831
+2003 1838 33084
+2004 1838 33084
+2005 1838 33053
+2006 1838 2654
+2007 1838 2654
+2009 1838 56541
+2016 1838 13831
+2024 1838 13831
+2033 1838 27656
+2043 1838 27662
+2054 1838 13831
+2115 1838 60278
+2116 1838 60278
+2117 1838 38602
+2118 1838 61338
+2119 1838 1060
+2120 1838 29308
+2121 1838 6941
+2122 1838 9520
+2123 1838 8460
+2124 1838 29308
+2125 1838 50089
+2126 1838 62756
+2127 1838 34231
+2128 1838 25771
+2129 1838 29308
+2130 1838 50089
+2131 1838 61334
+2132 1838 19087
+2133 1838 39868
+2134 1838 14097
+2137 1838 18879
+2138 1838 9697
+2139 1838 44854
+2140 1838 31832
+2164 1838 18569
+2165 1838 9387
+2166 1838 44544
+2167 1838 1158
+2168 1838 3470
+2175 1838 3470
+2198 1838 43036
+2199 1838 57652
+2201 1838 35948
+2202 1838 5584
+2203 1838 18537
+2204 1838 55269
+2211 1838 20984
+2219 1838 17514
+2243 1838 33079
+2244 1838 47695
+2245 1838 51165
+2247 1838 59869
+2248 1838 26180
+2249 1838 53847
+2256 1838 14858
+2264 1838 17758
+2273 1838 244
+2298 1838 47087
+2299 1838 61703
+2300 1838 65173
+2301 1838 23656
+2303 1838 26102
+2304 1838 65488
+2311 1838 41246
+2319 1838 38651
+2328 1838 36561
+2338 1838 36317
+2364 1838 21204
+2365 1838 20105
+2366 1838 25870
+2367 1838 52159
+2368 1838 20797
+2370 1838 6494
+2377 1838 17617
+2385 1838 12074
+2394 1838 58212
+2404 1838 20854
+2415 1838 50058
+2442 1838 19172
+2443 1838 6266
+2444 1838 54192
+2445 1838 35122
+2446 1838 29304
+2447 1838 7132
+2448 1838 50515
+2455 1838 40533
+2463 1838 63784
+2472 1838 42736
+2482 1838 18310
+2493 1838 20117
+2505 1838 23010
+4349 1838 27852657
+1766 1839 1
+1794 1839 65520
+1795 1839 65520
+1994 1839 1
+2122 1839 65519
+2123 1839 65519
+2126 1839 49140
+2127 1839 65519
+2131 1839 49140
+2132 1839 65519
+2149 1839 65519
+2150 1839 65519
+2153 1839 16379
+2154 1839 32758
+2155 1839 32760
+2158 1839 16379
+2159 1839 32758
+2160 1839 65520
+2161 1839 32760
+2186 1839 65519
+2190 1839 16379
+2191 1839 16381
+2195 1839 32760
+2196 1839 49141
+2197 1839 32760
+2236 1839 16381
+2241 1839 49141
+2242 1839 32760
+2297 1839 32760
+2355 1839 32761
+2433 1839 16380
+2438 1839 16380
+2444 1839 8190
+2445 1839 65520
+2451 1839 49140
+2452 1839 40949
+2453 1839 16379
+2454 1839 16380
+2460 1839 40950
+2461 1839 24570
+2462 1839 16380
+2468 1839 21840
+2470 1839 24570
+2471 1839 16380
+2478 1839 21840
+2479 1839 65520
+2481 1839 16380
+2489 1839 21841
+2490 1839 65520
+2491 1839 49141
+2501 1839 18427
+2502 1839 21836
+2503 1839 63813
+2504 1839 1363
+2506 1839 57331
+2507 1839 57331
+2508 1839 57331
+2509 1839 57331
+2510 1839 57331
+2511 1839 57841
+4350 1839 27852657
+1767 1840 1
+1768 1840 1
+1794 1840 1
+1795 1840 1
+1995 1840 1
+1996 1840 1
+2127 1840 49142
+2128 1840 49142
+2132 1840 2
+2133 1840 49142
+2154 1840 49142
+2155 1840 49142
+2159 1840 2
+2160 1840 49142
+2353 1840 65519
+2354 1840 65519
+2355 1840 65519
+2356 1840 32759
+2357 1840 32759
+2431 1840 21840
+2432 1840 21840
+2433 1840 21840
+2434 1840 38220
+2435 1840 38220
+2436 1840 21840
+2437 1840 21840
+2438 1840 21840
+2439 1840 21840
+2440 1840 60060
+2441 1840 21840
+2445 1840 1
+2446 1840 8191
+2452 1840 1
+2453 1840 8191
+2479 1840 21841
+2490 1840 21842
+2491 1840 1
+2499 1840 35490
+2500 1840 35490
+2501 1840 35490
+2502 1840 38222
+2503 1840 7507
+2504 1840 46412
+2511 1840 17746
+4351 1840 27852657
+1768 1841 1
+1795 1841 1
+1830 1841 1
+1996 1841 1
+2128 1841 24572
+2134 1841 40949
+2155 1841 24572
+2161 1841 40949
+2191 1841 24572
+2197 1841 40949
+2297 1841 36036
+2355 1841 47641
+2356 1841 5936
+2357 1841 63263
+2375 1841 21124
+2383 1841 14477
+2389 1841 8203
+2390 1841 49534
+2392 1841 26485
+2395 1841 24680
+2396 1841 24680
+2397 1841 24680
+2398 1841 30007
+2399 1841 28222
+2400 1841 29618
+2401 1841 40445
+2404 1841 21075
+2405 1841 20428
+2406 1841 20428
+2407 1841 45108
+2408 1841 20428
+2409 1841 30007
+2410 1841 28222
+2411 1841 29618
+2412 1841 40445
+2413 1841 5608
+2415 1841 21075
+2416 1841 20428
+2417 1841 20428
+2418 1841 45108
+2419 1841 40856
+2420 1841 20428
+2422 1841 57486
+2423 1841 57486
+2424 1841 33219
+2425 1841 11230
+2426 1841 19265
+2427 1841 40004
+2428 1841 51503
+2429 1841 64857
+2430 1841 45592
+2431 1841 40004
+2432 1841 51503
+2433 1841 42822
+2434 1841 35541
+2435 1841 2234
+2436 1841 50025
+2437 1841 45242
+2438 1841 10258
+2439 1841 2084
+2440 1841 41508
+2441 1841 39274
+2444 1841 56125
+2445 1841 38641
+2446 1841 51501
+2447 1841 44557
+2451 1841 47121
+2452 1841 29637
+2453 1841 42497
+2454 1841 57364
+2455 1841 17582
+2456 1841 17582
+2457 1841 30257
+2458 1841 30834
+2460 1841 28388
+2461 1841 14384
+2462 1841 33952
+2463 1841 11825
+2464 1841 37107
+2465 1841 19525
+2466 1841 42919
+2467 1841 38310
+2468 1841 30095
+2470 1841 51143
+2471 1841 54069
+2472 1841 14180
+2473 1841 56315
+2474 1841 46151
+2475 1841 26626
+2476 1841 1136
+2477 1841 46030
+2478 1841 22167
+2479 1841 5039
+2481 1841 29475
+2482 1841 9588
+2483 1841 28030
+2484 1841 37484
+2485 1841 39297
+2486 1841 12671
+2487 1841 17503
+2488 1841 9825
+2489 1841 22960
+2490 1841 42588
+2491 1841 48177
+2493 1841 56617
+2494 1841 58104
+2495 1841 50589
+2496 1841 3073
+2497 1841 24687
+2498 1841 12016
+2499 1841 57493
+2500 1841 47462
+2501 1841 15026
+2502 1841 19529
+2503 1841 18484
+2504 1841 43402
+2505 1841 12761
+2506 1841 29831
+2507 1841 45290
+2508 1841 32745
+2509 1841 14847
+2510 1841 1649
+2511 1841 58285
+4352 1841 27852657
+1769 1842 1
+1779 1842 17941
+1806 1842 36931
+1807 1842 54250
+1808 1842 65042
+1815 1842 65042
+1837 1842 8242
+1838 1842 10065
+1840 1842 35332
+1841 1842 63225
+1842 1842 47257
+1843 1842 48744
+1850 1842 10803
+1858 1842 11282
+1882 1842 27881
+1883 1842 29692
+1884 1842 29692
+1886 1842 8856
+1887 1842 41124
+1888 1842 62108
+1895 1842 21428
+1903 1842 10085
+1912 1842 64324
+1937 1842 63136
+1938 1842 2242
+1939 1842 2242
+1940 1842 2242
+1942 1842 29211
+1943 1842 43558
+1950 1842 16537
+1958 1842 6061
+1967 1842 27859
+1977 1842 29056
+2003 1842 57146
+2004 1842 58647
+2005 1842 58647
+2006 1842 58647
+2007 1842 57596
+2009 1842 27078
+2016 1842 33603
+2024 1842 45305
+2033 1842 9498
+2043 1842 19248
+2054 1842 55713
+2364 1842 33991
+2365 1842 43504
+2366 1842 43504
+2367 1842 43504
+2368 1842 28700
+2369 1842 45852
+2370 1842 2353
+2377 1842 41126
+2385 1842 19090
+2394 1842 43639
+2404 1842 29276
+2415 1842 29606
+2493 1842 33122
+4353 1842 27852657
+1770 1843 1
+1773 1843 43681
+1774 1843 43681
+1779 1843 32684
+1806 1843 17667
+1807 1843 20192
+1808 1843 47593
+1815 1843 47593
+1837 1843 63369
+1838 1843 32744
+1840 1843 56805
+1841 1843 26574
+1842 1843 40407
+1843 1843 42575
+1850 1843 53785
+1858 1843 6192
+1882 1843 37183
+1883 1843 42081
+1884 1843 2199
+1886 1843 49102
+1887 1843 64691
+1888 1843 14158
+1895 1843 39078
+1903 1843 61196
+1912 1843 55004
+1937 1843 13123
+1938 1843 25382
+1939 1843 46901
+1940 1843 46901
+1942 1843 34541
+1943 1843 6347
+1950 1843 41612
+1958 1843 10230
+1967 1843 5683
+1977 1843 16200
+2003 1843 18970
+2004 1843 53779
+2005 1843 59094
+2006 1843 59094
+2007 1843 29515
+2009 1843 43811
+2016 1843 58442
+2024 1843 37643
+2033 1843 17629
+2043 1843 29843
+2054 1843 13643
+2364 1843 10491
+2365 1843 62025
+2366 1843 42653
+2367 1843 42653
+2368 1843 47190
+2369 1843 56714
+2370 1843 54873
+2377 1843 8202
+2385 1843 56790
+2394 1843 63400
+2404 1843 22681
+2415 1843 38041
+2493 1843 39937
+4354 1843 27852657
+1771 1844 1
+1936 1844 13889
+1994 1844 4315
+1995 1844 59807
+1996 1844 59807
+2013 1844 26137
+2014 1844 3696
+2022 1844 55100
+2029 1844 57544
+2031 1844 34231
+2034 1844 56240
+2035 1844 56240
+2036 1844 56240
+2037 1844 15729
+2038 1844 51527
+2039 1844 29851
+2040 1844 61614
+2043 1844 63675
+2044 1844 44141
+2045 1844 44141
+2046 1844 34860
+2047 1844 44141
+2048 1844 15729
+2049 1844 51527
+2050 1844 29851
+2051 1844 61614
+2052 1844 50560
+2054 1844 63675
+2055 1844 44141
+2056 1844 44141
+2057 1844 34860
+2058 1844 22761
+2059 1844 44141
+2344 1844 20422
+2345 1844 20422
+2346 1844 7961
+2347 1844 64111
+2348 1844 43689
+2349 1844 62301
+2350 1844 26260
+2351 1844 47220
+2352 1844 3531
+2353 1844 62301
+2354 1844 26260
+2355 1844 57957
+2356 1844 39295
+2357 1844 35764
+2358 1844 62301
+2359 1844 26260
+2360 1844 35588
+2361 1844 33617
+2362 1844 31753
+2363 1844 61510
+2366 1844 44356
+2367 1844 63607
+2368 1844 57516
+2369 1844 52610
+2373 1844 60908
+2374 1844 43251
+2375 1844 58082
+2376 1844 34776
+2377 1844 55579
+2378 1844 55579
+2379 1844 3092
+2380 1844 7054
+2382 1844 51885
+2383 1844 21888
+2384 1844 13646
+2385 1844 17253
+2386 1844 19309
+2387 1844 29251
+2388 1844 26958
+2389 1844 30920
+2390 1844 38142
+2392 1844 12780
+2393 1844 8659
+2394 1844 36298
+2395 1844 10975
+2396 1844 10357
+2397 1844 46627
+2398 1844 13401
+2399 1844 48459
+2400 1844 35337
+2401 1844 51713
+2403 1844 50007
+2404 1844 25222
+2405 1844 43147
+2406 1844 73
+2407 1844 40012
+2408 1844 58906
+2409 1844 39301
+2410 1844 46779
+2411 1844 18391
+2412 1844 60478
+2413 1844 11690
+2415 1844 14298
+2416 1844 65384
+2417 1844 13272
+2418 1844 39347
+2419 1844 48928
+2420 1844 55543
+2487 1844 6752
+2488 1844 22631
+2489 1844 50658
+2490 1844 63306
+2491 1844 53579
+2492 1844 9435
+2493 1844 51909
+2494 1844 97
+2495 1844 23069
+2496 1844 32296
+2497 1844 9144
+2498 1844 31468
+2510 1844 18314
+4355 1844 27852657
+1772 1845 1
+1936 1845 23985
+1994 1845 5352
+1995 1845 39594
+1996 1845 39594
+2013 1845 39384
+2014 1845 39931
+2022 1845 659
+2029 1845 62858
+2031 1845 20701
+2034 1845 30322
+2035 1845 30322
+2036 1845 30322
+2037 1845 46650
+2038 1845 3105
+2039 1845 40872
+2040 1845 33951
+2043 1845 8130
+2044 1845 45952
+2045 1845 45952
+2046 1845 10753
+2047 1845 45952
+2048 1845 46650
+2049 1845 3105
+2050 1845 40872
+2051 1845 33951
+2052 1845 27496
+2054 1845 8130
+2055 1845 45952
+2056 1845 45952
+2057 1845 10753
+2058 1845 26383
+2059 1845 45952
+2344 1845 54172
+2345 1845 54172
+2346 1845 32860
+2347 1845 7929
+2348 1845 19278
+2349 1845 58619
+2350 1845 11569
+2351 1845 63168
+2352 1845 43890
+2353 1845 58619
+2354 1845 11569
+2355 1845 41059
+2356 1845 48020
+2357 1845 4130
+2358 1845 58619
+2359 1845 11569
+2360 1845 48305
+2361 1845 63989
+2362 1845 47096
+2363 1845 42966
+2366 1845 53819
+2367 1845 63401
+2368 1845 4363
+2369 1845 34476
+2373 1845 26651
+2374 1845 7620
+2375 1845 15010
+2376 1845 45147
+2377 1845 16084
+2378 1845 16084
+2379 1845 20672
+2380 1845 38551
+2382 1845 58818
+2383 1845 57592
+2384 1845 34553
+2385 1845 19024
+2386 1845 48494
+2387 1845 32410
+2388 1845 44728
+2389 1845 62607
+2390 1845 31144
+2392 1845 55054
+2393 1845 5498
+2394 1845 24832
+2395 1845 44429
+2396 1845 17982
+2397 1845 51093
+2398 1845 46862
+2399 1845 34083
+2400 1845 2416
+2401 1845 3404
+2403 1845 57133
+2404 1845 8091
+2405 1845 5114
+2406 1845 61350
+2407 1845 33803
+2408 1845 48231
+2409 1845 20159
+2410 1845 480
+2411 1845 1798
+2412 1845 48553
+2413 1845 19995
+2415 1845 24283
+2416 1845 37934
+2417 1845 16303
+2418 1845 17170
+2419 1845 1239
+2420 1845 18529
+2487 1845 13437
+2488 1845 31918
+2489 1845 43941
+2490 1845 51055
+2491 1845 23319
+2492 1845 12305
+2493 1845 47665
+2494 1845 19283
+2495 1845 16557
+2496 1845 32813
+2497 1845 3140
+2498 1845 25525
+2510 1845 55518
+4356 1845 27852657
+1773 1846 1
+1774 1846 1
+1936 1846 27647
+1994 1846 43417
+1995 1846 13288
+1996 1846 13288
+2014 1846 21894
+2022 1846 9762
+2029 1846 47841
+2031 1846 37227
+2034 1846 58255
+2035 1846 58255
+2036 1846 58255
+2037 1846 24850
+2038 1846 32597
+2039 1846 53707
+2040 1846 5678
+2043 1846 39670
+2044 1846 19323
+2045 1846 19323
+2046 1846 12057
+2047 1846 19323
+2048 1846 24850
+2049 1846 32597
+2050 1846 53707
+2051 1846 5678
+2052 1846 23187
+2054 1846 39670
+2055 1846 19323
+2056 1846 19323
+2057 1846 12057
+2058 1846 38646
+2059 1846 19323
+2344 1846 37841
+2345 1846 37841
+2346 1846 54485
+2347 1846 62151
+2348 1846 24310
+2349 1846 12147
+2350 1846 20857
+2351 1846 19094
+2352 1846 60305
+2353 1846 12147
+2354 1846 20857
+2355 1846 2647
+2356 1846 25657
+2357 1846 30873
+2358 1846 12147
+2359 1846 20857
+2360 1846 21335
+2361 1846 44368
+2362 1846 59451
+2363 1846 28578
+2366 1846 22813
+2367 1846 6768
+2368 1846 44804
+2369 1846 23200
+2373 1846 56907
+2374 1846 40862
+2375 1846 57069
+2376 1846 16221
+2377 1846 21221
+2378 1846 21221
+2379 1846 19846
+2380 1846 52628
+2382 1846 32160
+2383 1846 36290
+2384 1846 49819
+2385 1846 17434
+2386 1846 9522
+2387 1846 53822
+2388 1846 5162
+2389 1846 37944
+2390 1846 26602
+2392 1846 21501
+2393 1846 10547
+2394 1846 15280
+2395 1846 65070
+2396 1846 64082
+2397 1846 10260
+2398 1846 25990
+2399 1846 58334
+2400 1846 2019
+2401 1846 41768
+2403 1846 3633
+2404 1846 56737
+2405 1846 43564
+2406 1846 57122
+2407 1846 54243
+2408 1846 43983
+2409 1846 36202
+2410 1846 44018
+2411 1846 13549
+2412 1846 9583
+2413 1846 51813
+2415 1846 30603
+2416 1846 11759
+2417 1846 29390
+2418 1846 5721
+2419 1846 760
+2420 1846 22298
+2487 1846 41308
+2488 1846 57745
+2489 1846 45153
+2490 1846 31532
+2491 1846 43449
+2492 1846 51102
+2493 1846 40136
+2494 1846 2681
+2495 1846 7977
+2496 1846 21858
+2497 1846 32751
+2498 1846 9720
+2510 1846 59854
+4357 1846 27852657
+1774 1847 1
+1801 1847 41549
+1836 1847 15522
+1881 1847 16766
+2362 1847 39556
+2363 1847 6657
+2368 1847 10545
+2375 1847 18691
+2376 1847 6287
+2377 1847 63909
+2378 1847 63909
+2379 1847 57476
+2380 1847 5334
+2382 1847 45923
+2383 1847 1246
+2384 1847 27362
+2385 1847 15375
+2386 1847 44405
+2387 1847 46017
+2388 1847 27467
+2389 1847 6536
+2390 1847 6536
+2392 1847 46488
+2393 1847 25503
+2394 1847 62532
+2395 1847 9052
+2396 1847 8532
+2397 1847 28036
+2398 1847 19437
+2399 1847 1015
+2400 1847 1015
+2401 1847 1015
+2403 1847 47025
+2404 1847 49522
+2405 1847 29492
+2406 1847 29743
+2407 1847 27022
+2408 1847 64507
+2409 1847 60344
+2410 1847 51990
+2411 1847 51990
+2412 1847 51990
+2413 1847 43627
+2415 1847 7476
+2416 1847 33653
+2417 1847 4189
+2418 1847 33903
+2419 1847 58802
+2420 1847 59816
+2487 1847 12204
+2488 1847 54816
+2489 1847 54816
+2490 1847 54816
+2491 1847 53118
+2492 1847 23251
+2493 1847 58632
+2494 1847 14826
+2495 1847 9681
+2496 1847 51392
+2497 1847 15863
+2498 1847 43191
+2510 1847 40577
+4358 1847 27852657
+1775 1848 1
+2493 1848 65520
+4359 1848 27852657
+1776 1849 1
+1777 1849 1
+1778 1849 1
+1779 1849 1
+1780 1849 1
+1804 1849 1
+1805 1849 1
+1806 1849 1
+1807 1849 1
+1840 1849 1
+1841 1849 1
+1842 1849 1
+1886 1849 1
+1887 1849 1
+1942 1849 1
+2370 1849 32761
+2377 1849 32761
+2385 1849 32761
+2394 1849 32761
+2404 1849 32761
+2415 1849 32761
+2493 1849 24573
+4360 1849 27852657
+1777 1850 1
+1812 1850 1
+1813 1850 1
+1851 1850 39112
+1860 1850 26409
+1888 1850 44175
+1896 1850 39411
+1905 1850 29285
+1913 1850 17453
+1914 1850 33638
+1915 1850 30762
+1943 1850 29437
+1951 1850 54149
+1960 1850 59374
+1970 1850 32601
+1976 1850 27937
+1977 1850 34537
+1978 1850 17084
+1979 1850 38973
+1980 1850 63925
+1981 1850 62086
+2009 1850 62917
+2017 1850 1743
+2026 1850 62021
+2036 1850 4598
+2047 1850 3164
+2055 1850 24708
+2056 1850 23163
+2057 1850 60683
+2058 1850 36333
+2059 1850 29734
+2368 1850 8281
+2370 1850 46828
+2374 1850 52522
+2375 1850 2181
+2376 1850 55820
+2377 1850 14303
+2378 1850 18204
+2379 1850 23702
+2380 1850 57725
+2382 1850 27753
+2383 1850 10743
+2384 1850 57996
+2385 1850 21034
+2386 1850 52605
+2387 1850 5050
+2388 1850 1539
+2389 1850 57663
+2390 1850 31016
+2392 1850 8852
+2393 1850 19415
+2394 1850 55134
+2395 1850 55197
+2396 1850 37506
+2397 1850 4196
+2398 1850 9312
+2399 1850 62061
+2400 1850 46833
+2401 1850 48872
+2403 1850 38639
+2404 1850 9325
+2405 1850 38217
+2406 1850 27846
+2407 1850 4197
+2408 1850 4160
+2409 1850 22116
+2410 1850 21837
+2411 1850 7847
+2412 1850 41407
+2413 1850 26427
+2415 1850 53488
+2416 1850 18603
+2417 1850 57355
+2418 1850 43453
+2419 1850 4310
+2420 1850 15670
+2487 1850 7017
+2488 1850 49428
+2489 1850 43651
+2490 1850 5279
+2491 1850 42084
+2492 1850 10117
+2493 1850 35447
+2494 1850 9083
+2495 1850 64489
+2496 1850 60557
+2497 1850 48949
+2498 1850 4207
+2510 1850 24703
+4361 1850 27852657
+1778 1851 1
+1812 1851 65520
+1856 1851 65520
+1888 1851 27231
+1896 1851 38290
+1905 1851 57776
+1913 1851 28138
+1914 1851 17370
+1915 1851 25115
+1943 1851 31530
+1951 1851 33991
+1960 1851 28945
+1970 1851 19347
+1976 1851 40093
+1977 1851 8506
+1978 1851 45889
+1979 1851 62262
+1980 1851 64433
+1981 1851 4680
+2009 1851 44443
+2017 1851 21078
+2026 1851 25174
+2036 1851 5415
+2047 1851 15482
+2055 1851 60349
+2056 1851 33773
+2057 1851 28932
+2058 1851 23587
+2059 1851 12785
+2368 1851 58753
+2370 1851 55636
+2374 1851 12999
+2375 1851 16540
+2376 1851 35840
+2377 1851 16519
+2378 1851 26404
+2379 1851 64604
+2380 1851 55186
+2382 1851 59623
+2383 1851 61638
+2384 1851 17574
+2385 1851 24599
+2386 1851 42226
+2387 1851 12643
+2388 1851 32950
+2389 1851 4392
+2390 1851 4392
+2392 1851 47489
+2393 1851 43384
+2394 1851 15020
+2395 1851 12080
+2396 1851 28357
+2397 1851 31896
+2398 1851 32333
+2399 1851 30898
+2400 1851 30898
+2401 1851 28859
+2403 1851 22664
+2404 1851 18648
+2405 1851 23748
+2406 1851 62990
+2407 1851 36091
+2408 1851 22050
+2409 1851 18694
+2410 1851 20412
+2411 1851 20412
+2412 1851 52373
+2413 1851 40292
+2415 1851 40109
+2416 1851 18041
+2417 1851 12782
+2418 1851 60895
+2419 1851 41483
+2420 1851 61236
+2487 1851 23313
+2488 1851 23538
+2489 1851 23538
+2490 1851 61910
+2491 1851 18068
+2492 1851 4688
+2493 1851 29806
+2494 1851 25566
+2495 1851 27139
+2496 1851 28705
+2497 1851 10790
+2498 1851 45489
+2510 1851 24197
+4362 1851 27852657
+1779 1852 1
+1813 1852 65520
+1856 1852 1
+2022 1852 2
+2052 1852 1
+2139 1852 24572
+2140 1852 6
+2173 1852 40949
+2174 1852 65515
+2217 1852 24572
+2218 1852 6
+2271 1852 30029
+2272 1852 54595
+2337 1852 10926
+2375 1852 47379
+2383 1852 29028
+2390 1852 49123
+2392 1852 63405
+2395 1852 17703
+2396 1852 17703
+2397 1852 17703
+2398 1852 58793
+2399 1852 58793
+2400 1852 42395
+2401 1852 42395
+2404 1852 29178
+2405 1852 54384
+2406 1852 54384
+2407 1852 6566
+2408 1852 54384
+2409 1852 58793
+2410 1852 58793
+2411 1852 42395
+2412 1852 42395
+2413 1852 5900
+2415 1852 29178
+2416 1852 54384
+2417 1852 54384
+2418 1852 6566
+2419 1852 43247
+2420 1852 54384
+2446 1852 22596
+2447 1852 7709
+2448 1852 1
+2451 1852 50009
+2452 1852 50009
+2453 1852 30119
+2454 1852 36152
+2455 1852 50616
+2456 1852 50615
+2457 1852 24876
+2458 1852 24876
+2460 1852 12036
+2461 1852 32958
+2462 1852 53084
+2463 1852 26665
+2464 1852 10880
+2465 1852 25786
+2466 1852 11273
+2467 1852 11273
+2468 1852 33767
+2470 1852 11974
+2471 1852 9485
+2472 1852 61684
+2473 1852 58026
+2474 1852 64425
+2475 1852 20894
+2476 1852 28889
+2477 1852 28889
+2478 1852 51383
+2479 1852 51383
+2481 1852 48759
+2482 1852 40189
+2483 1852 58345
+2484 1852 52814
+2485 1852 60261
+2486 1852 39367
+2487 1852 1753
+2488 1852 1753
+2489 1852 41661
+2490 1852 41661
+2491 1852 18333
+2493 1852 27197
+2494 1852 62343
+2495 1852 9563
+2496 1852 36865
+2497 1852 19627
+2498 1852 45782
+2499 1852 43498
+2500 1852 43498
+2501 1852 24560
+2502 1852 24560
+2503 1852 4506
+2504 1852 40228
+2505 1852 7555
+2506 1852 62085
+2507 1852 42247
+2508 1852 63845
+2509 1852 27187
+2510 1852 47816
+2511 1852 34377
+4363 1852 27852657
+1780 1853 1
+1851 1853 25422
+1860 1853 40099
+1888 1853 53473
+1896 1853 31279
+1905 1853 52179
+1913 1853 48685
+1914 1853 4741
+1915 1853 58182
+1943 1853 28457
+1951 1853 56295
+1960 1853 36632
+1970 1853 60771
+1976 1853 17400
+1977 1853 46353
+1978 1853 63189
+1979 1853 874
+1980 1853 18523
+1981 1853 15934
+2009 1853 19884
+2017 1853 42049
+2026 1853 9571
+2036 1853 22410
+2047 1853 51761
+2055 1853 1626
+2056 1853 4927
+2057 1853 35050
+2058 1853 23267
+2059 1853 52961
+2370 1853 16898
+2376 1853 16541
+2377 1853 37243
+2378 1853 21054
+2379 1853 32969
+2380 1853 32969
+2382 1853 29538
+2383 1853 29538
+2384 1853 51122
+2385 1853 39081
+2386 1853 55703
+2387 1853 61356
+2388 1853 53406
+2389 1853 53406
+2390 1853 53406
+2392 1853 64677
+2393 1853 6760
+2394 1853 24768
+2395 1853 14397
+2396 1853 13748
+2397 1853 42272
+2398 1853 8361
+2399 1853 8361
+2400 1853 8361
+2401 1853 8361
+2403 1853 36799
+2404 1853 60882
+2405 1853 10821
+2406 1853 48684
+2407 1853 15550
+2408 1853 21407
+2409 1853 32805
+2410 1853 32805
+2411 1853 32805
+2412 1853 32805
+2413 1853 32805
+2415 1853 14661
+2416 1853 34456
+2417 1853 57728
+2418 1853 27055
+2419 1853 63393
+2420 1853 31408
+2487 1853 53237
+2488 1853 53237
+2489 1853 53237
+2490 1853 53237
+2491 1853 53237
+2492 1853 55057
+2493 1853 46075
+2494 1853 13368
+2495 1853 57451
+2496 1853 32604
+2497 1853 41088
+2498 1853 58153
+2510 1853 58328
+4364 1853 27852657
+1782 1854 1
+1783 1854 1
+1786 1854 65520
+1790 1854 1
+1793 1854 38920
+1794 1854 53132
+1795 1854 53131
+1891 1854 26090
+1893 1854 35488
+1896 1854 4272
+1904 1854 4272
+1913 1854 4272
+1944 1854 62057
+1945 1854 62057
+1946 1854 22626
+1947 1854 36172
+1950 1854 49168
+1951 1854 50994
+1959 1854 50994
+1968 1854 55266
+1978 1854 50994
+2010 1854 62057
+2011 1854 62057
+2012 1854 22626
+2013 1854 36172
+2014 1854 36172
+2016 1854 49168
+2017 1854 50994
+2025 1854 50994
+2034 1854 55266
+2044 1854 36467
+2055 1854 50994
+2142 1854 4749
+2143 1854 4749
+2144 1854 63763
+2145 1854 55198
+2146 1854 50449
+2147 1854 51592
+2148 1854 18479
+2149 1854 43907
+2150 1854 58979
+2151 1854 51592
+2152 1854 18479
+2153 1854 11605
+2154 1854 20756
+2155 1854 27298
+2156 1854 51592
+2157 1854 18479
+2158 1854 11540
+2159 1854 32228
+2160 1854 26785
+2161 1854 65008
+2164 1854 47170
+2165 1854 30347
+2166 1854 51168
+2167 1854 9841
+2171 1854 57477
+2172 1854 40654
+2173 1854 61475
+2174 1854 40969
+2175 1854 26238
+2176 1854 26238
+2205 1854 46938
+2206 1854 23695
+2208 1854 21364
+2209 1854 42185
+2210 1854 4856
+2211 1854 37775
+2212 1854 58555
+2220 1854 32317
+2250 1854 23122
+2251 1854 65400
+2252 1854 10323
+2254 1854 17988
+2255 1854 27829
+2256 1854 37710
+2257 1854 54681
+2265 1854 32236
+2274 1854 65440
+2305 1854 10953
+2306 1854 53231
+2307 1854 63675
+2308 1854 14806
+2310 1854 10132
+2311 1854 5113
+2312 1854 64181
+2320 1854 37384
+2329 1854 11762
+2339 1854 11843
+2371 1854 18082
+2372 1854 55794
+2373 1854 43272
+2374 1854 63575
+2375 1854 46113
+2377 1854 52087
+2378 1854 48126
+2386 1854 63124
+2395 1854 22566
+2405 1854 29060
+2416 1854 17217
+2449 1854 7635
+2450 1854 45623
+2451 1854 11333
+2452 1854 12192
+2453 1854 46271
+2454 1854 11934
+2455 1854 37742
+2456 1854 15814
+2464 1854 36828
+2473 1854 4073
+2483 1854 6274
+2494 1854 55966
+2506 1854 64803
+4365 1854 27852657
+1783 1855 1
+2488 1855 65520
+4366 1855 27852657
+1784 1856 1
+1793 1856 4605
+1794 1856 42704
+1795 1856 42704
+1891 1856 3574
+1893 1856 25902
+1896 1856 6722
+1904 1856 6722
+1913 1856 6722
+1944 1856 26451
+1945 1856 26451
+1946 1856 30025
+1947 1856 41612
+1950 1856 6937
+1951 1856 64227
+1959 1856 64227
+1968 1856 5428
+1978 1856 64227
+2010 1856 26451
+2011 1856 26451
+2012 1856 30025
+2013 1856 41612
+2014 1856 41612
+2016 1856 6937
+2017 1856 64227
+2025 1856 64227
+2034 1856 5428
+2044 1856 62933
+2055 1856 64227
+2142 1856 34286
+2143 1856 34286
+2144 1856 6262
+2145 1856 47632
+2146 1856 13346
+2147 1856 17482
+2148 1856 25999
+2149 1856 18243
+2150 1856 4897
+2151 1856 17482
+2152 1856 25999
+2153 1856 31614
+2154 1856 4844
+2155 1856 65468
+2156 1856 17482
+2157 1856 25999
+2158 1856 31297
+2159 1856 56760
+2160 1856 2360
+2161 1856 2413
+2164 1856 3241
+2165 1856 17966
+2166 1856 26771
+2167 1856 61098
+2171 1856 24275
+2172 1856 39000
+2173 1856 47805
+2174 1856 25416
+2175 1856 16071
+2176 1856 16071
+2205 1856 31342
+2206 1856 19769
+2208 1856 365
+2209 1856 9170
+2210 1856 1506
+2211 1856 2783
+2212 1856 8364
+2220 1856 57814
+2250 1856 33131
+2251 1856 21558
+2252 1856 20341
+2254 1856 16157
+2255 1856 11734
+2256 1856 2466
+2257 1856 2575
+2265 1856 59435
+2274 1856 1621
+2305 1856 57449
+2306 1856 45876
+2307 1856 44659
+2308 1856 21767
+2310 1856 50421
+2311 1856 44088
+2312 1856 64026
+2320 1856 58333
+2329 1856 33170
+2339 1856 31549
+2371 1856 58534
+2372 1856 36904
+2373 1856 51056
+2374 1856 23182
+2375 1856 27548
+2377 1856 38309
+2378 1856 51248
+2386 1856 52823
+2395 1856 2195
+2405 1856 51002
+2416 1856 19453
+2449 1856 51538
+2450 1856 53015
+2451 1856 39410
+2452 1856 47960
+2453 1856 47974
+2454 1856 38462
+2455 1856 64111
+2456 1856 33779
+2464 1856 27397
+2473 1856 39016
+2483 1856 42694
+2494 1856 27564
+2506 1856 64038
+4367 1856 27852657
+1785 1857 1
+1786 1857 1
+1790 1857 65520
+1793 1857 40189
+1794 1857 1517
+1795 1857 1518
+1891 1857 19928
+1893 1857 7470
+1896 1857 34221
+1904 1857 34221
+1913 1857 34221
+1944 1857 55073
+1945 1857 55073
+1946 1857 9480
+1947 1857 42249
+1950 1857 43435
+1951 1857 30179
+1959 1857 30179
+1968 1857 64400
+1978 1857 30179
+2010 1857 55073
+2011 1857 55073
+2012 1857 9480
+2013 1857 42249
+2014 1857 42249
+2016 1857 43435
+2017 1857 30179
+2025 1857 30179
+2034 1857 64400
+2044 1857 60358
+2055 1857 30179
+2142 1857 49750
+2143 1857 49750
+2144 1857 47569
+2145 1857 38312
+2146 1857 54083
+2147 1857 42025
+2148 1857 5186
+2149 1857 57319
+2150 1857 3236
+2151 1857 42025
+2152 1857 5186
+2153 1857 60525
+2154 1857 24823
+2155 1857 21587
+2156 1857 42025
+2157 1857 5186
+2158 1857 35664
+2159 1857 5555
+2160 1857 1358
+2161 1857 45292
+2164 1857 58442
+2165 1857 63235
+2166 1857 32217
+2167 1857 3050
+2171 1857 27035
+2172 1857 31828
+2173 1857 810
+2174 1857 6146
+2175 1857 42973
+2176 1857 42973
+2205 1857 12044
+2206 1857 25971
+2208 1857 47641
+2209 1857 16623
+2210 1857 26752
+2211 1857 48566
+2212 1857 38155
+2220 1857 60703
+2250 1857 36601
+2251 1857 50528
+2252 1857 2120
+2254 1857 7346
+2255 1857 10396
+2256 1857 23705
+2257 1857 37214
+2265 1857 5530
+2274 1857 10348
+2305 1857 13062
+2306 1857 26989
+2307 1857 44102
+2308 1857 19067
+2310 1857 62942
+2311 1857 22231
+2312 1857 16689
+2320 1857 61308
+2329 1857 5969
+2339 1857 61142
+2371 1857 55424
+2372 1857 6153
+2373 1857 10688
+2374 1857 41269
+2375 1857 33387
+2377 1857 36956
+2378 1857 34996
+2386 1857 12593
+2395 1857 31595
+2405 1857 16530
+2416 1857 20909
+2449 1857 2418
+2450 1857 16948
+2451 1857 12276
+2452 1857 15738
+2453 1857 50175
+2454 1857 10466
+2455 1857 18808
+2456 1857 16526
+2464 1857 56302
+2473 1857 17581
+2483 1857 26792
+2494 1857 32281
+2506 1857 37278
+4368 1857 27852657
+1786 1858 1
+1790 1858 65520
+1795 1858 1
+1801 1858 65520
+1936 1858 59594
+1994 1858 23477
+1995 1858 21630
+1996 1858 21630
+2013 1858 17030
+2014 1858 64109
+2022 1858 23744
+2029 1858 54871
+2031 1858 58196
+2034 1858 40236
+2035 1858 40236
+2036 1858 40236
+2037 1858 1020
+2038 1858 31654
+2039 1858 32676
+2040 1858 14963
+2043 1858 51907
+2044 1858 24891
+2045 1858 24891
+2046 1858 65127
+2047 1858 24891
+2048 1858 1020
+2049 1858 31654
+2050 1858 32676
+2051 1858 14963
+2052 1858 30882
+2054 1858 51907
+2055 1858 24891
+2056 1858 24891
+2057 1858 65127
+2058 1858 49782
+2059 1858 24891
+2344 1858 13388
+2345 1858 13388
+2346 1858 2057
+2347 1858 7646
+2348 1858 59779
+2349 1858 63186
+2350 1858 19308
+2351 1858 42880
+2352 1858 48622
+2353 1858 38917
+2354 1858 60560
+2355 1858 59736
+2356 1858 36244
+2357 1858 53143
+2358 1858 10220
+2359 1858 31863
+2360 1858 56789
+2361 1858 52068
+2362 1858 37580
+2363 1858 49958
+2366 1858 47389
+2367 1858 5848
+2368 1858 24437
+2369 1858 10254
+2373 1858 29167
+2374 1858 10108
+2375 1858 16934
+2376 1858 28980
+2377 1858 62345
+2378 1858 62345
+2379 1858 3262
+2380 1858 17205
+2382 1858 54186
+2383 1858 47404
+2384 1858 60306
+2385 1858 60315
+2386 1858 51663
+2387 1858 54839
+2388 1858 6245
+2389 1858 20188
+2390 1858 26502
+2392 1858 4820
+2393 1858 8604
+2394 1858 50007
+2395 1858 20388
+2396 1858 26260
+2397 1858 36942
+2398 1858 56488
+2399 1858 7170
+2400 1858 12174
+2401 1858 40315
+2403 1858 63047
+2404 1858 33844
+2405 1858 11060
+2406 1858 61613
+2407 1858 65393
+2408 1858 28451
+2409 1858 30952
+2410 1858 2668
+2411 1858 60125
+2412 1858 47965
+2413 1858 29750
+2415 1858 19012
+2416 1858 8039
+2417 1858 11711
+2418 1858 50169
+2419 1858 24812
+2420 1858 61882
+2487 1858 5900
+2488 1858 48154
+2489 1858 40053
+2490 1858 55546
+2491 1858 21880
+2492 1858 1823
+2493 1858 23175
+2494 1858 39857
+2495 1858 30763
+2496 1858 47099
+2497 1858 38312
+2498 1858 21362
+2510 1858 9729
+4369 1858 27852657
+1787 1859 1
+1793 1859 41339
+1794 1859 15556
+1795 1859 15556
+1891 1859 43989
+1893 1859 55300
+1896 1859 52563
+1904 1859 52563
+1913 1859 52563
+1944 1859 54924
+1945 1859 54924
+1946 1859 33392
+1947 1859 50994
+1950 1859 20431
+1951 1859 11150
+1959 1859 11150
+1968 1859 63713
+1978 1859 11150
+2010 1859 54924
+2011 1859 54924
+2012 1859 33392
+2013 1859 50994
+2014 1859 50994
+2016 1859 20431
+2017 1859 11150
+2025 1859 11150
+2034 1859 63713
+2044 1859 22300
+2055 1859 11150
+2142 1859 11501
+2143 1859 11501
+2144 1859 420
+2145 1859 25048
+2146 1859 13547
+2147 1859 39309
+2148 1859 23505
+2149 1859 8789
+2150 1859 60763
+2151 1859 50229
+2152 1859 12052
+2153 1859 5700
+2154 1859 16824
+2155 1859 21582
+2156 1859 50229
+2157 1859 12052
+2158 1859 57952
+2159 1859 37241
+2160 1859 50068
+2161 1859 28486
+2164 1859 48025
+2165 1859 43072
+2166 1859 40622
+2167 1859 3984
+2171 1859 47344
+2172 1859 42391
+2173 1859 39941
+2174 1859 853
+2175 1859 52008
+2176 1859 52008
+2205 1859 8729
+2206 1859 31511
+2208 1859 30780
+2209 1859 28330
+2210 1859 49810
+2211 1859 20173
+2212 1859 53706
+2220 1859 1698
+2250 1859 34834
+2251 1859 57616
+2252 1859 34757
+2254 1859 26051
+2255 1859 30035
+2256 1859 6904
+2257 1859 9813
+2265 1859 64796
+2274 1859 63098
+2305 1859 36439
+2306 1859 59221
+2307 1859 36362
+2308 1859 22802
+2310 1859 44236
+2311 1859 63969
+2312 1859 23819
+2320 1859 14948
+2329 1859 4016
+2339 1859 6439
+2371 1859 55813
+2372 1859 44144
+2373 1859 26974
+2374 1859 5002
+2375 1859 16796
+2377 1859 15534
+2378 1859 22426
+2386 1859 27792
+2395 1859 51367
+2405 1859 55534
+2416 1859 49095
+2449 1859 867
+2450 1859 34255
+2451 1859 28912
+2452 1859 48973
+2453 1859 28818
+2454 1859 33494
+2455 1859 50733
+2456 1859 41909
+2464 1859 31481
+2473 1859 48228
+2483 1859 55018
+2494 1859 104
+2506 1859 45063
+4370 1859 27852657
+1788 1860 1
+1793 1860 18281
+1794 1860 24912
+1795 1860 24912
+1891 1860 29373
+1893 1860 37737
+1896 1860 2918
+1904 1860 2918
+1913 1860 2918
+1944 1860 39106
+1945 1860 39106
+1946 1860 2958
+1947 1860 18142
+1950 1860 27204
+1951 1860 28758
+1959 1860 28758
+1968 1860 31676
+1978 1860 28758
+2010 1860 39106
+2011 1860 39106
+2012 1860 2958
+2013 1860 18142
+2014 1860 18142
+2016 1860 27204
+2017 1860 28758
+2025 1860 28758
+2034 1860 31676
+2044 1860 57516
+2055 1860 28758
+2142 1860 31308
+2143 1860 31308
+2144 1860 1423
+2145 1860 17897
+2146 1860 52110
+2147 1860 35647
+2148 1860 27159
+2149 1860 54861
+2150 1860 2751
+2151 1860 35647
+2152 1860 49532
+2153 1860 17151
+2154 1860 41772
+2155 1860 39021
+2156 1860 35647
+2157 1860 49532
+2158 1860 52045
+2159 1860 15007
+2160 1860 34782
+2161 1860 61282
+2164 1860 59520
+2165 1860 46710
+2166 1860 37159
+2167 1860 63562
+2171 1860 13033
+2172 1860 223
+2173 1860 56193
+2174 1860 7524
+2175 1860 49026
+2176 1860 49026
+2205 1860 4638
+2206 1860 17339
+2208 1860 33611
+2209 1860 24060
+2210 1860 28102
+2211 1860 52888
+2212 1860 61315
+2220 1860 12289
+2250 1860 39413
+2251 1860 52114
+2252 1860 19428
+2254 1860 32532
+2255 1860 30573
+2256 1860 22261
+2257 1860 18117
+2265 1860 36620
+2274 1860 24331
+2305 1860 44199
+2306 1860 56900
+2307 1860 24214
+2308 1860 5292
+2310 1860 22258
+2311 1860 54443
+2312 1860 49023
+2320 1860 11793
+2329 1860 9077
+2339 1860 50267
+2371 1860 22928
+2372 1860 8317
+2373 1860 32815
+2374 1860 26156
+2375 1860 3999
+2377 1860 33707
+2378 1860 19069
+2386 1860 18700
+2395 1860 16334
+2405 1860 3776
+2416 1860 19030
+2449 1860 5332
+2450 1860 54271
+2451 1860 12836
+2452 1860 18852
+2453 1860 30569
+2454 1860 37942
+2455 1860 43387
+2456 1860 14176
+2464 1860 54235
+2473 1860 23058
+2483 1860 55144
+2494 1860 47153
+2506 1860 63966
+4371 1860 27852657
+1789 1861 1
+1790 1861 1
+1795 1861 65520
+1801 1861 1
+1936 1861 41587
+1994 1861 46833
+1995 1861 40700
+1996 1861 40700
+2013 1861 53792
+2014 1861 40399
+2022 1861 57938
+2029 1861 21032
+2031 1861 58433
+2034 1861 61797
+2035 1861 61797
+2036 1861 61797
+2037 1861 48242
+2038 1861 44121
+2039 1861 10959
+2040 1861 51784
+2043 1861 37977
+2044 1861 18812
+2045 1861 18812
+2046 1861 15088
+2047 1861 18812
+2048 1861 48242
+2049 1861 44121
+2050 1861 10959
+2051 1861 51784
+2052 1861 22069
+2054 1861 37977
+2055 1861 18812
+2056 1861 18812
+2057 1861 15088
+2058 1861 37624
+2059 1861 18812
+2344 1861 8001
+2345 1861 8001
+2346 1861 1713
+2347 1861 44955
+2348 1861 36954
+2349 1861 61547
+2350 1861 1783
+2351 1861 53048
+2352 1861 16094
+2353 1861 20295
+2354 1861 26052
+2355 1861 55202
+2356 1861 41887
+2357 1861 25793
+2358 1861 48992
+2359 1861 54749
+2360 1861 4054
+2361 1861 50690
+2362 1861 10328
+2363 1861 50056
+2366 1861 2178
+2367 1861 11340
+2368 1861 40496
+2369 1861 27918
+2373 1861 25378
+2374 1861 4673
+2375 1861 1188
+2376 1861 64443
+2377 1861 1503
+2378 1861 1503
+2379 1861 39211
+2380 1861 46650
+2382 1861 5557
+2383 1861 39393
+2384 1861 36276
+2385 1861 45181
+2386 1861 27794
+2387 1861 26291
+2388 1861 45238
+2389 1861 52677
+2390 1861 34866
+2392 1861 58215
+2393 1861 34271
+2394 1861 19825
+2395 1861 13412
+2396 1861 17551
+2397 1861 56781
+2398 1861 30279
+2399 1861 40742
+2400 1861 14800
+2401 1861 34845
+2403 1861 39057
+2404 1861 51124
+2405 1861 51402
+2406 1861 57705
+2407 1861 43551
+2408 1861 52291
+2409 1861 56817
+2410 1861 5992
+2411 1861 29305
+2412 1861 32035
+2413 1861 65310
+2415 1861 45350
+2416 1861 39590
+2417 1861 32365
+2418 1861 16746
+2419 1861 40191
+2420 1861 53421
+2487 1861 8454
+2488 1861 25840
+2489 1861 15791
+2490 1861 25516
+2491 1861 17301
+2492 1861 10375
+2493 1861 26026
+2494 1861 8986
+2495 1861 42370
+2496 1861 41387
+2497 1861 51509
+2498 1861 22168
+2510 1861 37625
+4372 1861 27852657
+1790 1862 1
+2108 1862 46840
+2113 1862 43137
+2114 1862 61818
+2123 1862 22233
+2128 1862 51120
+2150 1862 39567
+2155 1862 10095
+2161 1862 53485
+2191 1862 59541
+2197 1862 52505
+2242 1862 41681
+2286 1862 19960
+2352 1862 46228
+2357 1862 2479
+2429 1862 21309
+2430 1862 35091
+2433 1862 23033
+2434 1862 50852
+2435 1862 45212
+2440 1862 20058
+2441 1862 3593
+2446 1862 35095
+2452 1862 19041
+2453 1862 25233
+2454 1862 7952
+2455 1862 28430
+2456 1862 28430
+2457 1862 60933
+2458 1862 57247
+2460 1862 11790
+2461 1862 9696
+2462 1862 11280
+2463 1862 56352
+2464 1862 19074
+2465 1862 56165
+2466 1862 16681
+2467 1862 43364
+2468 1862 39958
+2470 1862 3681
+2471 1862 33152
+2472 1862 28502
+2473 1862 10502
+2474 1862 60114
+2475 1862 3949
+2476 1862 24829
+2477 1862 65258
+2478 1862 51015
+2479 1862 62510
+2481 1862 38864
+2482 1862 10729
+2483 1862 58340
+2484 1862 9446
+2485 1862 12247
+2486 1862 8298
+2487 1862 30181
+2488 1862 30269
+2489 1862 63249
+2490 1862 22608
+2491 1862 44030
+2493 1862 54392
+2494 1862 40612
+2495 1862 8603
+2496 1862 23712
+2497 1862 44961
+2498 1862 36663
+2499 1862 36433
+2500 1862 21647
+2501 1862 18012
+2502 1862 9742
+2503 1862 14660
+2504 1862 19889
+2505 1862 5775
+2506 1862 22971
+2507 1862 8560
+2508 1862 48562
+2509 1862 33441
+2510 1862 55602
+2511 1862 876
+4373 1862 27852657
+1791 1863 1
+1792 1863 1
+1793 1863 1
+1794 1863 1
+1795 1863 1
+1891 1863 43680
+1946 1863 43680
+1947 1863 65520
+2012 1863 43680
+2013 1863 65520
+2014 1863 65520
+2151 1863 54601
+2152 1863 54601
+2153 1863 54601
+2154 1863 54601
+2155 1863 54601
+2156 1863 54601
+2157 1863 54601
+2158 1863 54601
+2159 1863 54601
+2160 1863 43681
+2161 1863 54601
+2252 1863 5459
+2307 1863 5459
+2308 1863 5457
+2373 1863 46410
+2374 1863 16379
+2375 1863 60060
+2449 1863 47776
+2450 1863 47776
+2451 1863 43681
+2452 1863 43681
+2453 1863 55967
+2454 1863 55966
+2494 1863 61425
+2506 1863 46068
+4374 1863 27852657
+1792 1864 1
+1793 1864 19751
+1794 1864 47257
+1795 1864 47257
+1891 1864 65490
+1893 1864 39509
+1896 1864 13825
+1904 1864 13825
+1913 1864 13825
+1944 1864 33084
+1945 1864 33084
+1946 1864 33053
+1947 1864 2654
+1950 1864 56541
+1951 1864 13831
+1959 1864 13831
+1968 1864 27656
+1978 1864 13831
+2010 1864 33084
+2011 1864 33084
+2012 1864 33053
+2013 1864 2654
+2014 1864 2654
+2016 1864 56541
+2017 1864 13831
+2025 1864 13831
+2034 1864 27656
+2044 1864 27662
+2055 1864 13831
+2142 1864 60278
+2143 1864 60278
+2144 1864 38602
+2145 1864 61338
+2146 1864 1060
+2147 1864 29308
+2148 1864 6941
+2149 1864 9520
+2150 1864 8460
+2151 1864 29308
+2152 1864 50089
+2153 1864 62756
+2154 1864 34231
+2155 1864 25771
+2156 1864 29308
+2157 1864 50089
+2158 1864 61334
+2159 1864 19087
+2160 1864 39868
+2161 1864 14097
+2164 1864 18879
+2165 1864 9697
+2166 1864 44854
+2167 1864 31832
+2171 1864 18569
+2172 1864 9387
+2173 1864 44544
+2174 1864 1158
+2175 1864 3470
+2176 1864 3470
+2205 1864 43036
+2206 1864 57652
+2208 1864 35948
+2209 1864 5584
+2210 1864 18537
+2211 1864 55269
+2212 1864 20984
+2220 1864 17514
+2250 1864 33079
+2251 1864 47695
+2252 1864 51165
+2254 1864 59869
+2255 1864 26180
+2256 1864 53847
+2257 1864 14858
+2265 1864 17758
+2274 1864 244
+2305 1864 47087
+2306 1864 61703
+2307 1864 65173
+2308 1864 23656
+2310 1864 26102
+2311 1864 65488
+2312 1864 41246
+2320 1864 38651
+2329 1864 36561
+2339 1864 36317
+2371 1864 21204
+2372 1864 20105
+2373 1864 25870
+2374 1864 52159
+2375 1864 20797
+2377 1864 6494
+2378 1864 17617
+2386 1864 12074
+2395 1864 58212
+2405 1864 20854
+2416 1864 50058
+2449 1864 19172
+2450 1864 6266
+2451 1864 54192
+2452 1864 35122
+2453 1864 29304
+2454 1864 7132
+2455 1864 50515
+2456 1864 40533
+2464 1864 63784
+2473 1864 42736
+2483 1864 18310
+2494 1864 20117
+2506 1864 23010
+4375 1864 27852657
+1793 1865 1
+1794 1865 1
+1795 1865 1
+1829 1865 1
+1830 1865 1
+1875 1865 1
+2153 1865 32761
+2154 1865 32761
+2155 1865 32761
+2158 1865 32761
+2159 1865 32761
+2160 1865 1
+2161 1865 32761
+2190 1865 32761
+2191 1865 32761
+2195 1865 32761
+2196 1865 1
+2197 1865 32761
+2236 1865 32761
+2241 1865 1
+2242 1865 32761
+2297 1865 32761
+2451 1865 24571
+2452 1865 24571
+2453 1865 49142
+2454 1865 49141
+2460 1865 24571
+2461 1865 49142
+2462 1865 49141
+2470 1865 49142
+2471 1865 49141
+2481 1865 49141
+2491 1865 24572
+2503 1865 4096
+2504 1865 36857
+2506 1865 8190
+2507 1865 8190
+2508 1865 8190
+2509 1865 8190
+2510 1865 8190
+2511 1865 19965
+4376 1865 27852657
+1794 1866 1
+1795 1866 1
+2297 1866 41786
+2355 1866 38370
+2356 1866 14836
+2357 1866 14836
+2374 1866 20524
+2375 1866 10492
+2383 1866 40204
+2390 1866 4820
+2392 1866 44577
+2395 1866 22533
+2396 1866 22533
+2397 1866 22533
+2398 1866 54301
+2399 1866 28634
+2400 1866 25762
+2401 1866 49015
+2404 1866 15519
+2405 1866 17219
+2406 1866 17219
+2407 1866 39752
+2408 1866 17219
+2409 1866 54301
+2410 1866 28634
+2411 1866 25762
+2412 1866 49015
+2413 1866 59267
+2415 1866 15519
+2416 1866 17219
+2417 1866 17219
+2418 1866 39752
+2419 1866 34438
+2420 1866 17219
+2422 1866 9166
+2423 1866 9166
+2424 1866 3289
+2425 1866 3190
+2426 1866 59545
+2427 1866 48904
+2428 1866 41397
+2429 1866 499
+2430 1866 6475
+2431 1866 48904
+2432 1866 41397
+2433 1866 64836
+2434 1866 1079
+2435 1866 60125
+2436 1866 48904
+2437 1866 41397
+2438 1866 10548
+2439 1866 7481
+2440 1866 43521
+2441 1866 48917
+2444 1866 18263
+2445 1866 14941
+2446 1866 42071
+2447 1866 1400
+2451 1866 58906
+2452 1866 47644
+2453 1866 26163
+2454 1866 26642
+2455 1866 177
+2456 1866 177
+2457 1866 31053
+2458 1866 65091
+2460 1866 32598
+2461 1866 21522
+2462 1866 10634
+2463 1866 18185
+2464 1866 16991
+2465 1866 16814
+2466 1866 29429
+2467 1866 63467
+2468 1866 4628
+2470 1866 57021
+2471 1866 52766
+2472 1866 28170
+2473 1866 16486
+2474 1866 54168
+2475 1866 37354
+2476 1866 60949
+2477 1866 14594
+2478 1866 28157
+2479 1866 4385
+2481 1866 57909
+2482 1866 55763
+2483 1866 9795
+2484 1866 30090
+2485 1866 30718
+2486 1866 58885
+2487 1866 57752
+2488 1866 25004
+2489 1866 30355
+2490 1866 18959
+2491 1866 46390
+2493 1866 12389
+2494 1866 64386
+2495 1866 42395
+2496 1866 30385
+2497 1866 11760
+2498 1866 18396
+2499 1866 44562
+2500 1866 12929
+2501 1866 535
+2502 1866 31229
+2503 1866 49735
+2504 1866 61326
+2505 1866 1563
+2506 1866 63581
+2507 1866 58012
+2508 1866 24968
+2509 1866 57440
+2510 1866 35753
+2511 1866 28791
+4377 1866 27852657
+1795 1867 1
+2108 1867 46840
+2113 1867 43137
+2114 1867 61818
+2128 1867 7832
+2155 1867 49662
+2161 1867 57777
+2191 1867 59541
+2197 1867 54024
+2242 1867 51190
+2357 1867 48707
+2433 1867 2930
+2434 1867 54849
+2435 1867 18779
+2440 1867 60528
+2441 1867 37952
+2446 1867 21566
+2452 1867 21936
+2453 1867 13040
+2454 1867 56248
+2455 1867 30299
+2456 1867 30299
+2457 1867 35332
+2458 1867 60279
+2460 1867 35675
+2461 1867 56993
+2462 1867 21191
+2463 1867 44012
+2464 1867 5762
+2465 1867 40984
+2466 1867 31957
+2467 1867 63802
+2468 1867 56848
+2470 1867 6552
+2471 1867 37626
+2472 1867 53219
+2473 1867 59022
+2474 1867 9551
+2475 1867 34088
+2476 1867 48012
+2477 1867 13167
+2478 1867 36070
+2479 1867 6691
+2481 1867 45361
+2482 1867 41762
+2483 1867 16508
+2484 1867 35250
+2485 1867 51033
+2486 1867 16945
+2487 1867 56627
+2488 1867 1318
+2489 1867 33611
+2490 1867 12360
+2491 1867 58385
+2493 1867 35138
+2494 1867 1095
+2495 1867 6078
+2496 1867 11195
+2497 1867 16248
+2498 1867 64824
+2499 1867 14279
+2500 1867 55585
+2501 1867 63354
+2502 1867 325
+2503 1867 28842
+2504 1867 41100
+2505 1867 4281
+2506 1867 32446
+2507 1867 63687
+2508 1867 56606
+2509 1867 28447
+2510 1867 27747
+2511 1867 50214
+4378 1867 27852657
+1796 1868 1
+1806 1868 17941
+1813 1868 36931
+1814 1868 54250
+1815 1868 65042
+1816 1868 65042
+1844 1868 8242
+1845 1868 10065
+1847 1868 35332
+1848 1868 63225
+1849 1868 47257
+1850 1868 48744
+1851 1868 10803
+1859 1868 11282
+1889 1868 27881
+1890 1868 29692
+1891 1868 29692
+1893 1868 8856
+1894 1868 41124
+1895 1868 62108
+1896 1868 21428
+1904 1868 10085
+1913 1868 64324
+1944 1868 63136
+1945 1868 2242
+1946 1868 2242
+1947 1868 2242
+1949 1868 29211
+1950 1868 43558
+1951 1868 16537
+1959 1868 6061
+1968 1868 27859
+1978 1868 29056
+2010 1868 57146
+2011 1868 58647
+2012 1868 58647
+2013 1868 58647
+2014 1868 57596
+2016 1868 27078
+2017 1868 33603
+2025 1868 45305
+2034 1868 9498
+2044 1868 19248
+2055 1868 55713
+2371 1868 33991
+2372 1868 43504
+2373 1868 43504
+2374 1868 43504
+2375 1868 28700
+2376 1868 45852
+2377 1868 2353
+2378 1868 41126
+2386 1868 19090
+2395 1868 43639
+2405 1868 29276
+2416 1868 29606
+2494 1868 33122
+4379 1868 27852657
+1797 1869 1
+1800 1869 43681
+1801 1869 43681
+1806 1869 32684
+1813 1869 17667
+1814 1869 20192
+1815 1869 47593
+1816 1869 47593
+1844 1869 63369
+1845 1869 32744
+1847 1869 56805
+1848 1869 26574
+1849 1869 40407
+1850 1869 42575
+1851 1869 53785
+1859 1869 6192
+1889 1869 37183
+1890 1869 42081
+1891 1869 2199
+1893 1869 49102
+1894 1869 64691
+1895 1869 14158
+1896 1869 39078
+1904 1869 61196
+1913 1869 55004
+1944 1869 13123
+1945 1869 25382
+1946 1869 46901
+1947 1869 46901
+1949 1869 34541
+1950 1869 6347
+1951 1869 41612
+1959 1869 10230
+1968 1869 5683
+1978 1869 16200
+2010 1869 18970
+2011 1869 53779
+2012 1869 59094
+2013 1869 59094
+2014 1869 29515
+2016 1869 43811
+2017 1869 58442
+2025 1869 37643
+2034 1869 17629
+2044 1869 29843
+2055 1869 13643
+2371 1869 10491
+2372 1869 62025
+2373 1869 42653
+2374 1869 42653
+2375 1869 47190
+2376 1869 56714
+2377 1869 54873
+2378 1869 8202
+2386 1869 56790
+2395 1869 63400
+2405 1869 22681
+2416 1869 38041
+2494 1869 39937
+4380 1869 27852657
+1798 1870 1
+1799 1870 1
+1800 1870 1
+1801 1870 1
+1963 1870 49149
+1973 1870 49149
+1974 1870 49149
+2007 1870 32759
+2014 1870 32759
+2022 1870 32759
+2029 1870 15
+2031 1870 32762
+2039 1870 49146
+2040 1870 49146
+2050 1870 65518
+2051 1870 65518
+2052 1870 32756
+2368 1870 28663
+2369 1870 65512
+2373 1870 6
+2374 1870 6
+2375 1870 28669
+2376 1870 8186
+2382 1870 40955
+2383 1870 4097
+2384 1870 12280
+2390 1870 57326
+2392 1870 36858
+2393 1870 45041
+2400 1870 20471
+2401 1870 20471
+2403 1870 36858
+2411 1870 12282
+2412 1870 12282
+2413 1870 24573
+2489 1870 14333
+2490 1870 14333
+2491 1870 28666
+2492 1870 53234
+2493 1870 32759
+2494 1870 32761
+2495 1870 59379
+2496 1870 6144
+2497 1870 9222
+2498 1870 36861
+2510 1870 54257
+4381 1870 27852657
+1799 1871 1
+1936 1871 41536
+1994 1871 29263
+1995 1871 60074
+1996 1871 60074
+2013 1871 26137
+2014 1871 21205
+2022 1871 55093
+2029 1871 31258
+2031 1871 55487
+2034 1871 42760
+2035 1871 42760
+2036 1871 42760
+2037 1871 18582
+2038 1871 62127
+2039 1871 52955
+2040 1871 11828
+2043 1871 35492
+2044 1871 23527
+2045 1871 23527
+2046 1871 766
+2047 1871 23527
+2048 1871 18582
+2049 1871 62127
+2050 1871 52955
+2051 1871 11828
+2052 1871 20798
+2054 1871 35492
+2055 1871 23527
+2056 1871 23527
+2057 1871 766
+2058 1871 47054
+2059 1871 23527
+2344 1871 55572
+2345 1871 55572
+2346 1871 55253
+2347 1871 48238
+2348 1871 58187
+2349 1871 8086
+2350 1871 1098
+2351 1871 52887
+2352 1871 60221
+2353 1871 8086
+2354 1871 1098
+2355 1871 23802
+2356 1871 18526
+2357 1871 23826
+2358 1871 8086
+2359 1871 1098
+2360 1871 18631
+2361 1871 7441
+2362 1871 19491
+2363 1871 61186
+2366 1871 22898
+2367 1871 32030
+2368 1871 37707
+2369 1871 42630
+2373 1871 25535
+2374 1871 63280
+2375 1871 2529
+2376 1871 27880
+2377 1871 11978
+2378 1871 11978
+2379 1871 2135
+2380 1871 52853
+2382 1871 33330
+2383 1871 23380
+2384 1871 19554
+2385 1871 29180
+2386 1871 28506
+2387 1871 16528
+2388 1871 28122
+2389 1871 13319
+2390 1871 43677
+2392 1871 55437
+2393 1871 28901
+2394 1871 22405
+2395 1871 20283
+2396 1871 58217
+2397 1871 41689
+2398 1871 60305
+2399 1871 10639
+2400 1871 41201
+2401 1871 54223
+2403 1871 57951
+2404 1871 38794
+2405 1871 34090
+2406 1871 35385
+2407 1871 10598
+2408 1871 34430
+2409 1871 55726
+2410 1871 28028
+2411 1871 1482
+2412 1871 60089
+2413 1871 45381
+2415 1871 44699
+2416 1871 42936
+2417 1871 25879
+2418 1871 21883
+2419 1871 54904
+2420 1871 20474
+2487 1871 24564
+2488 1871 10287
+2489 1871 40624
+2490 1871 44946
+2491 1871 32865
+2492 1871 52541
+2493 1871 65157
+2494 1871 64256
+2495 1871 9578
+2496 1871 39704
+2497 1871 34590
+2498 1871 39011
+2510 1871 32766
+4382 1871 27852657
+1800 1872 1
+1801 1872 1
+1936 1872 37874
+1994 1872 10285
+1995 1872 60982
+1996 1872 60982
+2014 1872 48012
+2022 1872 7
+2029 1872 16466
+2031 1872 4944
+2034 1872 27117
+2035 1872 27117
+2036 1872 27117
+2037 1872 43950
+2038 1872 36203
+2039 1872 13879
+2040 1872 10813
+2043 1872 35124
+2044 1872 14645
+2045 1872 14645
+2046 1872 41762
+2047 1872 14645
+2048 1872 43950
+2049 1872 36203
+2050 1872 13879
+2051 1872 10813
+2052 1872 56310
+2054 1872 35124
+2055 1872 14645
+2056 1872 14645
+2057 1872 41762
+2058 1872 29290
+2059 1872 14645
+2344 1872 4741
+2345 1872 4741
+2346 1872 1996
+2347 1872 5164
+2348 1872 423
+2349 1872 24316
+2350 1872 51985
+2351 1872 41148
+2352 1872 40725
+2353 1872 24316
+2354 1872 51985
+2355 1872 57691
+2356 1872 60049
+2357 1872 19324
+2358 1872 24316
+2359 1872 51985
+2360 1872 632
+2361 1872 12911
+2362 1872 33379
+2363 1872 14055
+2366 1872 38326
+2367 1872 14820
+2368 1872 22396
+2369 1872 42532
+2373 1872 27958
+2374 1872 4452
+2375 1872 33857
+2376 1872 39066
+2377 1872 39708
+2378 1872 39708
+2379 1872 19721
+2380 1872 51786
+2382 1872 20678
+2383 1872 19975
+2384 1872 63906
+2385 1872 32694
+2386 1872 65096
+2387 1872 25388
+2388 1872 50819
+2389 1872 17363
+2390 1872 18135
+2392 1872 28196
+2393 1872 14277
+2394 1872 24120
+2395 1872 64847
+2396 1872 34752
+2397 1872 9364
+2398 1872 19026
+2399 1872 51529
+2400 1872 31753
+2401 1872 8233
+2403 1872 56417
+2404 1872 38301
+2405 1872 2799
+2406 1872 61686
+2407 1872 60121
+2408 1872 50757
+2409 1872 54221
+2410 1872 13716
+2411 1872 61873
+2412 1872 9021
+2413 1872 9274
+2415 1872 48436
+2416 1872 59776
+2417 1872 48495
+2418 1872 46070
+2419 1872 34298
+2420 1872 49062
+2487 1872 32851
+2488 1872 8421
+2489 1872 28275
+2490 1872 65338
+2491 1872 10629
+2492 1872 23132
+2493 1872 8217
+2494 1872 33855
+2495 1872 48209
+2496 1872 12299
+2497 1872 58274
+2498 1872 18511
+2510 1872 1930
+4383 1872 27852657
+1801 1873 1
+1836 1873 11054
+1881 1873 2581
+2362 1873 60281
+2363 1873 31692
+2368 1873 60533
+2375 1873 52815
+2376 1873 22206
+2377 1873 27514
+2378 1873 27514
+2379 1873 36739
+2380 1873 13864
+2382 1873 31241
+2383 1873 6264
+2384 1873 6349
+2385 1873 41469
+2386 1873 38479
+2387 1873 10965
+2388 1873 22859
+2389 1873 25751
+2390 1873 25751
+2392 1873 43757
+2393 1873 61734
+2394 1873 42359
+2395 1873 23695
+2396 1873 11967
+2397 1873 1002
+2398 1873 27673
+2399 1873 37872
+2400 1873 37872
+2401 1873 37872
+2403 1873 8866
+2404 1873 28285
+2405 1873 880
+2406 1873 39746
+2407 1873 27386
+2408 1873 26384
+2409 1873 5099
+2410 1873 31562
+2411 1873 31562
+2412 1873 31562
+2413 1873 53481
+2415 1873 8400
+2416 1873 41876
+2417 1873 25263
+2418 1873 26144
+2419 1873 4767
+2420 1873 43904
+2487 1873 22260
+2488 1873 23857
+2489 1873 23857
+2490 1873 23857
+2491 1873 40169
+2492 1873 54272
+2493 1873 12977
+2494 1873 32897
+2495 1873 32922
+2496 1873 34267
+2497 1873 10488
+2498 1873 60348
+2510 1873 9628
+4384 1873 27852657
+1802 1874 1
+2494 1874 65520
+4385 1874 27852657
+1803 1875 1
+1804 1875 1
+1805 1875 1
+1806 1875 1
+1807 1875 1
+1811 1875 1
+1812 1875 1
+1813 1875 1
+1814 1875 1
+1847 1875 1
+1848 1875 1
+1849 1875 1
+1893 1875 1
+1894 1875 1
+1949 1875 1
+2377 1875 32761
+2378 1875 32761
+2386 1875 32761
+2395 1875 32761
+2405 1875 32761
+2416 1875 32761
+2494 1875 24573
+4386 1875 27852657
+1804 1876 1
+1805 1876 1
+1806 1876 1
+1807 1876 1
+1811 1876 1
+1812 1876 1
+1813 1876 1
+1814 1876 1
+1847 1876 1
+1848 1876 1
+1849 1876 1
+1893 1876 1
+1894 1876 1
+1949 1876 1
+2377 1876 32761
+2378 1876 32761
+2386 1876 32761
+2395 1876 32761
+2405 1876 32761
+2416 1876 32761
+2493 1876 1
+2494 1876 24573
+4387 1876 27852657
+1805 1877 1
+1806 1877 1
+1807 1877 1
+1812 1877 1
+1813 1877 1
+1814 1877 1
+1855 1877 65520
+1856 1877 65520
+1857 1877 65520
+1910 1877 1
+1911 1877 1
+1947 1877 30031
+1958 1877 48674
+1959 1877 48674
+1960 1877 48674
+1963 1877 35491
+1966 1877 1
+1967 1877 48674
+1968 1877 48674
+1969 1877 31827
+1970 1877 48674
+1973 1877 35491
+1977 1877 48674
+1978 1877 48674
+1979 1877 31827
+1980 1877 31827
+1981 1877 48674
+2007 1877 20475
+2013 1877 30031
+2014 1877 50506
+2016 1877 24337
+2017 1877 24337
+2022 1877 20475
+2024 1877 7490
+2025 1877 31827
+2026 1877 7490
+2029 1877 40951
+2031 1877 39585
+2033 1877 7490
+2034 1877 14980
+2035 1877 63654
+2036 1877 56164
+2039 1877 10920
+2040 1877 20474
+2043 1877 14980
+2044 1877 22470
+2045 1877 54297
+2046 1877 37450
+2047 1877 46807
+2050 1877 40950
+2051 1877 20474
+2052 1877 40949
+2054 1877 31827
+2055 1877 39317
+2056 1877 22470
+2057 1877 5623
+2058 1877 13113
+2059 1877 14980
+2367 1877 59890
+2368 1877 35831
+2369 1877 35831
+2373 1877 8873
+2374 1877 16210
+2375 1877 57672
+2376 1877 57672
+2377 1877 31358
+2378 1877 31358
+2382 1877 28040
+2383 1877 3981
+2384 1877 3981
+2385 1877 58506
+2386 1877 16154
+2387 1877 50317
+2390 1877 17403
+2392 1877 7166
+2393 1877 7166
+2394 1877 58506
+2395 1877 37918
+2396 1877 24117
+2397 1877 39321
+2400 1877 48116
+2401 1877 62618
+2403 1877 46752
+2404 1877 35108
+2405 1877 14520
+2406 1877 3292
+2407 1877 33245
+2408 1877 59445
+2411 1877 18939
+2412 1877 8701
+2413 1877 35832
+2415 1877 14516
+2416 1877 21071
+2417 1877 9843
+2418 1877 4224
+2419 1877 5159
+2420 1877 11235
+2489 1877 256
+2490 1877 5375
+2491 1877 5631
+2492 1877 5631
+2493 1877 5618
+2494 1877 17139
+2495 1877 52293
+2496 1877 48811
+2497 1877 39815
+2498 1877 40755
+2510 1877 29434
+4388 1877 27852657
+1806 1878 1
+1813 1878 1
+1848 1878 1
+2014 1878 1
+2166 1878 49140
+2167 1878 49140
+2173 1878 49140
+2174 1878 49140
+2202 1878 65519
+2203 1878 65519
+2209 1878 49140
+2210 1878 49140
+2247 1878 65519
+2248 1878 65519
+2254 1878 65519
+2255 1878 65519
+2262 1878 65519
+2263 1878 65519
+2271 1878 65519
+2272 1878 65519
+2327 1878 65519
+2375 1878 32761
+2392 1878 2
+2453 1878 16380
+2454 1878 16380
+2455 1878 8190
+2456 1878 8190
+2463 1878 65520
+2464 1878 8190
+2470 1878 43681
+2471 1878 43681
+2472 1878 65520
+2473 1878 65520
+2474 1878 65520
+2475 1878 65520
+2481 1878 1
+2482 1878 43680
+2483 1878 43680
+2484 1878 43680
+2485 1878 43679
+2486 1878 43680
+2493 1878 43680
+2494 1878 43681
+2495 1878 43680
+2496 1878 43679
+2497 1878 21839
+2498 1878 43680
+2505 1878 46408
+2506 1878 23886
+2507 1878 46408
+2508 1878 27297
+2509 1878 51871
+2510 1878 51871
+2511 1878 31396
+4389 1878 27852657
+1807 1879 1
+1814 1879 1
+1857 1879 65520
+1911 1879 1
+1976 1879 65520
+2031 1879 21389
+2034 1879 28284
+2035 1879 28284
+2036 1879 28284
+2037 1879 11510
+2038 1879 11510
+2039 1879 11510
+2040 1879 11510
+2043 1879 56660
+2044 1879 45147
+2045 1879 45147
+2046 1879 7910
+2047 1879 45147
+2048 1879 11510
+2049 1879 11510
+2050 1879 11510
+2051 1879 11510
+2052 1879 11510
+2054 1879 56660
+2055 1879 45147
+2056 1879 45147
+2057 1879 7910
+2058 1879 24773
+2059 1879 45147
+2369 1879 21842
+2373 1879 53137
+2374 1879 53137
+2375 1879 53137
+2376 1879 40771
+2377 1879 1076
+2378 1879 1076
+2379 1879 9850
+2380 1879 9850
+2382 1879 21733
+2383 1879 21733
+2384 1879 54135
+2385 1879 8414
+2386 1879 26240
+2387 1879 25164
+2388 1879 62177
+2389 1879 62177
+2390 1879 62177
+2392 1879 33910
+2393 1879 16617
+2394 1879 3866
+2395 1879 10964
+2396 1879 35411
+2397 1879 10247
+2398 1879 17979
+2399 1879 17979
+2400 1879 17979
+2401 1879 17979
+2403 1879 60666
+2404 1879 16221
+2405 1879 24134
+2406 1879 45880
+2407 1879 61227
+2408 1879 50980
+2409 1879 38924
+2410 1879 38924
+2411 1879 38924
+2412 1879 38924
+2413 1879 38924
+2415 1879 63178
+2416 1879 38355
+2417 1879 56441
+2418 1879 8285
+2419 1879 33282
+2420 1879 47823
+2487 1879 8196
+2488 1879 8196
+2489 1879 8196
+2490 1879 8196
+2491 1879 8196
+2492 1879 26396
+2493 1879 36642
+2494 1879 45944
+2495 1879 18919
+2496 1879 38980
+2497 1879 26601
+2498 1879 33991
+2510 1879 50811
+4390 1879 27852657
+1808 1880 1
+1816 1880 65520
+1843 1880 1
+1851 1880 65518
+1859 1880 65518
+1860 1880 65520
+1888 1880 1
+1896 1880 65518
+1904 1880 65515
+1905 1880 65518
+1913 1880 65518
+1914 1880 65518
+1915 1880 65520
+1951 1880 65519
+1959 1880 65517
+1960 1880 65519
+1968 1880 65517
+1969 1880 65517
+1970 1880 65519
+1978 1880 65520
+1979 1880 65520
+1980 1880 65520
+2017 1880 65519
+2025 1880 65517
+2026 1880 65519
+2036 1880 2
+2044 1880 2
+2045 1880 2
+2046 1880 6
+2047 1880 4
+2055 1880 3
+2056 1880 3
+2057 1880 7
+2058 1880 8
+2059 1880 4
+2168 1880 24566
+2175 1880 65509
+2176 1880 40943
+2212 1880 16377
+2219 1880 12
+2220 1880 40967
+2221 1880 12
+2256 1880 51948
+2257 1880 2804
+2264 1880 31361
+2265 1880 34177
+2266 1880 31373
+2273 1880 31349
+2274 1880 58731
+2275 1880 62710
+2276 1880 31349
+2304 1880 65515
+2312 1880 16383
+2320 1880 16401
+2321 1880 18
+2329 1880 2828
+2330 1880 31373
+2331 1880 31355
+2338 1880 34172
+2339 1880 9618
+2340 1880 34184
+2341 1880 34184
+2342 1880 34178
+2370 1880 49144
+2378 1880 32765
+2385 1880 16389
+2387 1880 32756
+2392 1880 49484
+2394 1880 40971
+2395 1880 4842
+2396 1880 26701
+2397 1880 59466
+2398 1880 2872
+2399 1880 2872
+2400 1880 2872
+2401 1880 2872
+2404 1880 25368
+2405 1880 25824
+2406 1880 6427
+2407 1880 57166
+2408 1880 63221
+2409 1880 2872
+2410 1880 2872
+2411 1880 2872
+2412 1880 2872
+2413 1880 2872
+2415 1880 56717
+2416 1880 48973
+2417 1880 5010
+2418 1880 6606
+2419 1880 7520
+2420 1880 43998
+2451 1880 57329
+2452 1880 57329
+2453 1880 57329
+2454 1880 57329
+2455 1880 7493
+2456 1880 48444
+2457 1880 3824
+2458 1880 3824
+2460 1880 16695
+2461 1880 16695
+2462 1880 16695
+2463 1880 2261
+2464 1880 19884
+2465 1880 36961
+2466 1880 1602
+2467 1880 1602
+2468 1880 1602
+2470 1880 36788
+2471 1880 36788
+2472 1880 49
+2473 1880 43585
+2474 1880 55228
+2475 1880 18267
+2476 1880 46053
+2477 1880 46053
+2478 1880 46053
+2479 1880 46053
+2481 1880 46007
+2482 1880 5530
+2483 1880 44070
+2484 1880 33684
+2485 1880 7291
+2486 1880 54545
+2487 1880 52987
+2488 1880 52987
+2489 1880 52987
+2490 1880 52987
+2491 1880 52987
+2493 1880 17613
+2494 1880 10905
+2495 1880 9808
+2496 1880 2780
+2497 1880 64486
+2498 1880 34511
+2499 1880 37612
+2500 1880 37612
+2501 1880 37612
+2502 1880 37612
+2503 1880 37612
+2504 1880 37612
+2505 1880 20647
+2506 1880 17471
+2507 1880 64195
+2508 1880 34326
+2509 1880 59755
+2510 1880 3800
+2511 1880 25792
+4391 1880 27852657
+1809 1881 1
+1844 1881 1
+1845 1881 1
+1889 1881 1
+1890 1881 1
+1891 1881 1
+1944 1881 1
+1945 1881 1
+1946 1881 1
+1947 1881 1
+2010 1881 1
+2011 1881 1
+2012 1881 1
+2013 1881 1
+2014 1881 1
+2371 1881 32761
+2372 1881 32761
+2373 1881 32761
+2374 1881 32761
+2375 1881 32761
+2376 1881 32761
+2494 1881 24573
+4392 1881 27852657
+1810 1882 1
+2494 1882 65520
+4393 1882 27852657
+1811 1883 1
+1812 1883 1
+1813 1883 1
+1851 1883 39112
+1860 1883 26409
+1896 1883 18065
+1905 1883 50631
+1913 1883 12209
+1914 1883 23695
+1915 1883 64994
+1951 1883 18065
+1960 1883 29937
+1970 1883 2151
+1976 1883 61001
+1977 1883 49039
+1978 1883 36830
+1979 1883 1456
+1980 1883 57710
+1981 1883 55032
+2017 1883 64660
+2026 1883 64625
+2036 1883 55994
+2047 1883 58388
+2055 1883 13112
+2056 1883 48135
+2057 1883 43950
+2058 1883 6927
+2059 1883 3571
+2376 1883 31718
+2377 1883 41530
+2378 1883 26738
+2379 1883 6933
+2380 1883 6933
+2382 1883 49317
+2383 1883 49317
+2384 1883 40025
+2385 1883 12050
+2386 1883 4102
+2387 1883 13534
+2388 1883 35061
+2389 1883 35061
+2390 1883 35061
+2392 1883 40187
+2393 1883 24831
+2394 1883 59044
+2395 1883 6564
+2396 1883 54488
+2397 1883 18133
+2398 1883 35732
+2399 1883 35732
+2400 1883 35732
+2401 1883 35732
+2403 1883 2136
+2404 1883 38290
+2405 1883 19917
+2406 1883 58462
+2407 1883 8819
+2408 1883 51554
+2409 1883 43432
+2410 1883 43432
+2411 1883 43432
+2412 1883 43432
+2413 1883 43432
+2415 1883 15430
+2416 1883 17035
+2417 1883 23508
+2418 1883 16204
+2419 1883 18614
+2420 1883 4128
+2487 1883 1159
+2488 1883 1159
+2489 1883 1159
+2490 1883 1159
+2491 1883 1159
+2492 1883 1159
+2493 1883 15070
+2494 1883 24444
+2495 1883 41295
+2496 1883 11049
+2497 1883 16371
+2498 1883 43372
+2510 1883 19751
+4394 1883 27852657
+1812 1884 1
+2172 1884 38841
+2173 1884 38841
+2212 1884 58174
+2217 1884 4757
+2221 1884 7347
+2257 1884 41083
+2266 1884 24500
+2274 1884 50172
+2275 1884 56977
+2276 1884 39824
+2312 1884 41083
+2321 1884 53440
+2331 1884 15012
+2337 1884 46937
+2338 1884 60234
+2339 1884 10062
+2340 1884 32894
+2341 1884 51577
+2342 1884 10868
+2378 1884 42392
+2387 1884 16987
+2397 1884 41351
+2408 1884 34565
+2416 1884 37045
+2417 1884 1211
+2418 1884 44228
+2419 1884 11243
+2420 1884 53067
+2446 1884 42528
+2452 1884 32770
+2453 1884 9565
+2454 1884 13828
+2455 1884 10296
+2456 1884 59837
+2457 1884 21590
+2458 1884 14119
+2460 1884 52358
+2461 1884 35068
+2462 1884 42225
+2463 1884 51499
+2464 1884 56967
+2465 1884 45544
+2466 1884 49485
+2467 1884 48161
+2468 1884 48161
+2470 1884 30182
+2471 1884 6088
+2472 1884 27548
+2473 1884 12618
+2474 1884 61764
+2475 1884 9678
+2476 1884 56792
+2477 1884 33273
+2478 1884 33273
+2479 1884 53688
+2481 1884 20152
+2482 1884 4564
+2483 1884 27427
+2484 1884 12068
+2485 1884 29649
+2486 1884 23716
+2487 1884 24110
+2488 1884 47610
+2489 1884 47610
+2490 1884 2363
+2491 1884 58535
+2493 1884 27608
+2494 1884 31698
+2495 1884 59326
+2496 1884 16227
+2497 1884 6147
+2498 1884 59966
+2499 1884 12109
+2500 1884 48443
+2501 1884 48443
+2502 1884 41419
+2503 1884 13932
+2504 1884 20234
+2505 1884 4233
+2506 1884 51970
+2507 1884 26841
+2508 1884 17088
+2509 1884 28745
+2510 1884 43269
+2511 1884 13749
+4395 1884 27852657
+1813 1885 1
+2212 1885 27665
+2217 1885 60764
+2221 1885 37856
+2257 1885 18245
+2266 1885 3680
+2274 1885 17626
+2275 1885 56466
+2276 1885 25121
+2312 1885 18245
+2321 1885 39674
+2331 1885 8400
+2337 1885 9479
+2338 1885 15434
+2339 1885 63329
+2340 1885 53532
+2341 1885 44681
+2342 1885 61402
+2378 1885 4560
+2387 1885 7989
+2397 1885 58510
+2408 1885 3153
+2416 1885 33429
+2417 1885 17948
+2418 1885 54622
+2419 1885 42862
+2420 1885 35590
+2446 1885 39852
+2453 1885 17017
+2454 1885 64054
+2455 1885 3840
+2456 1885 56667
+2457 1885 61502
+2458 1885 41770
+2460 1885 31666
+2461 1885 33877
+2462 1885 18098
+2463 1885 56038
+2464 1885 10397
+2465 1885 27793
+2466 1885 33885
+2467 1885 55602
+2468 1885 55602
+2470 1885 57693
+2471 1885 48227
+2472 1885 44504
+2473 1885 30778
+2474 1885 32233
+2475 1885 35346
+2476 1885 6381
+2477 1885 54898
+2478 1885 54898
+2479 1885 54898
+2481 1885 44796
+2482 1885 25096
+2483 1885 42489
+2484 1885 5561
+2485 1885 49519
+2486 1885 25671
+2487 1885 6008
+2488 1885 43168
+2489 1885 43168
+2490 1885 43168
+2491 1885 49214
+2493 1885 38225
+2494 1885 40164
+2495 1885 6615
+2496 1885 29682
+2497 1885 65158
+2498 1885 25450
+2499 1885 43011
+2500 1885 17825
+2501 1885 17825
+2502 1885 17825
+2503 1885 20295
+2504 1885 19533
+2505 1885 15629
+2506 1885 29345
+2507 1885 21389
+2508 1885 22386
+2509 1885 65112
+2510 1885 55053
+2511 1885 39384
+4396 1885 27852657
+1814 1886 1
+1851 1886 25422
+1860 1886 40099
+1896 1886 19231
+1905 1886 45046
+1913 1886 40359
+1914 1886 56914
+1915 1886 51967
+1951 1886 19231
+1960 1886 13529
+1970 1886 54886
+1976 1886 26258
+1977 1886 28062
+1978 1886 53224
+1979 1886 27227
+1980 1886 37668
+1981 1886 34749
+2017 1886 61933
+2026 1886 40722
+2036 1886 56305
+2047 1886 4764
+2055 1886 57426
+2056 1886 51354
+2057 1886 25609
+2058 1886 39735
+2059 1886 4199
+2376 1886 33803
+2377 1886 45768
+2378 1886 46477
+2379 1886 46507
+2380 1886 46507
+2382 1886 21015
+2383 1886 21015
+2384 1886 30307
+2385 1886 15669
+2386 1886 19254
+2387 1886 39201
+2388 1886 3217
+2389 1886 3217
+2390 1886 3217
+2392 1886 14556
+2393 1886 29912
+2394 1886 40685
+2395 1886 36539
+2396 1886 43628
+2397 1886 18455
+2398 1886 47817
+2399 1886 47817
+2400 1886 47817
+2401 1886 47817
+2403 1886 51346
+2404 1886 58266
+2405 1886 58646
+2406 1886 14046
+2407 1886 9426
+2408 1886 20658
+2409 1886 51564
+2410 1886 51564
+2411 1886 51564
+2412 1886 51564
+2413 1886 51564
+2415 1886 62812
+2416 1886 55074
+2417 1886 23903
+2418 1886 48824
+2419 1886 39560
+2420 1886 24219
+2487 1886 59167
+2488 1886 59167
+2489 1886 59167
+2490 1886 59167
+2491 1886 59167
+2492 1886 59167
+2493 1886 61666
+2494 1886 46411
+2495 1886 44944
+2496 1886 50567
+2497 1886 28842
+2498 1886 57884
+2510 1886 38063
+4397 1886 27852657
+1815 1887 1
+1816 1887 1
+1851 1887 1
+1858 1887 65520
+1859 1887 65520
+1860 1887 65520
+1896 1887 1
+1903 1887 65519
+1904 1887 65519
+1905 1887 65518
+1912 1887 65520
+1913 1887 65520
+1914 1887 65518
+1915 1887 65520
+1951 1887 1
+1960 1887 65520
+1969 1887 65519
+1970 1887 65520
+2017 1887 1
+2026 1887 65520
+2035 1887 65519
+2036 1887 65520
+2175 1887 24572
+2176 1887 24572
+2212 1887 24572
+2219 1887 40949
+2220 1887 40949
+2221 1887 40949
+2256 1887 24570
+2257 1887 49142
+2264 1887 57328
+2265 1887 16377
+2266 1887 32756
+2273 1887 16379
+2274 1887 40949
+2275 1887 8186
+2276 1887 16379
+2312 1887 24572
+2321 1887 40949
+2329 1887 24570
+2330 1887 57328
+2331 1887 16379
+2338 1887 49136
+2339 1887 49136
+2340 1887 49136
+2341 1887 49136
+2342 1887 49136
+2378 1887 57327
+2385 1887 16377
+2387 1887 8194
+2392 1887 35473
+2394 1887 40951
+2395 1887 50285
+2396 1887 32067
+2397 1887 23873
+2398 1887 52682
+2399 1887 52682
+2400 1887 52682
+2401 1887 52682
+2404 1887 64781
+2405 1887 7839
+2406 1887 46325
+2407 1887 63860
+2408 1887 31792
+2409 1887 52682
+2410 1887 52682
+2411 1887 52682
+2412 1887 52682
+2413 1887 52682
+2415 1887 15645
+2416 1887 24224
+2417 1887 62710
+2418 1887 14724
+2419 1887 47218
+2420 1887 64562
+2451 1887 54834
+2452 1887 54834
+2453 1887 54834
+2454 1887 54834
+2455 1887 97
+2456 1887 12382
+2457 1887 45141
+2458 1887 45141
+2460 1887 35584
+2461 1887 35584
+2462 1887 35584
+2463 1887 6318
+2464 1887 15141
+2465 1887 2759
+2466 1887 62329
+2467 1887 62329
+2468 1887 62329
+2470 1887 46930
+2471 1887 46930
+2472 1887 2711
+2473 1887 21305
+2474 1887 47963
+2475 1887 45204
+2476 1887 20140
+2477 1887 20140
+2478 1887 20140
+2479 1887 20140
+2481 1887 51988
+2482 1887 54743
+2483 1887 17545
+2484 1887 14960
+2485 1887 35188
+2486 1887 55503
+2487 1887 1416
+2488 1887 1416
+2489 1887 1416
+2490 1887 1416
+2491 1887 1416
+2493 1887 20047
+2494 1887 22451
+2495 1887 39998
+2496 1887 37394
+2497 1887 59027
+2498 1887 3524
+2499 1887 1867
+2500 1887 1867
+2501 1887 1867
+2502 1887 1867
+2503 1887 1867
+2504 1887 1867
+2505 1887 34100
+2506 1887 7722
+2507 1887 19655
+2508 1887 15210
+2509 1887 57829
+2510 1887 57747
+2511 1887 13281
+4398 1887 27852657
+1817 1888 1
+1818 1888 1
+1862 1888 1
+1863 1888 1
+1865 1888 1
+1917 1888 1
+1918 1888 1
+1920 1888 1
+1923 1888 1
+1983 1888 1
+1984 1888 1
+1986 1888 1
+1989 1888 1
+1993 1888 1
+2344 1888 32761
+2345 1888 32761
+2347 1888 32761
+2350 1888 32761
+2354 1888 32761
+2359 1888 32761
+2487 1888 1
+2488 1888 24573
+4399 1888 27852657
+1818 1889 1
+1863 1889 56146
+1866 1889 9375
+1918 1889 63928
+1921 1889 1593
+1925 1889 63928
+1984 1889 9030
+1987 1889 56491
+1991 1889 9030
+1996 1889 56491
+2345 1889 58237
+2348 1889 7284
+2351 1889 31213
+2352 1889 23929
+2355 1889 47392
+2356 1889 62633
+2357 1889 38704
+2362 1889 54410
+2363 1889 15706
+2368 1889 26128
+2374 1889 62336
+2375 1889 34779
+2376 1889 14093
+2377 1889 58428
+2378 1889 58428
+2379 1889 37233
+2380 1889 15590
+2382 1889 8164
+2383 1889 21818
+2384 1889 11569
+2385 1889 53512
+2386 1889 38556
+2387 1889 45649
+2388 1889 21741
+2389 1889 37580
+2390 1889 33162
+2392 1889 36129
+2393 1889 56117
+2394 1889 10666
+2395 1889 51015
+2396 1889 24626
+2397 1889 44498
+2398 1889 13177
+2399 1889 47115
+2400 1889 7801
+2401 1889 57248
+2403 1889 7031
+2404 1889 49182
+2405 1889 3749
+2406 1889 58450
+2407 1889 32084
+2408 1889 53107
+2409 1889 16583
+2410 1889 46439
+2411 1889 19464
+2412 1889 42557
+2413 1889 45494
+2415 1889 11627
+2416 1889 20219
+2417 1889 10767
+2418 1889 22992
+2419 1889 61081
+2420 1889 7974
+2487 1889 36068
+2488 1889 14107
+2489 1889 28657
+2490 1889 20415
+2491 1889 31919
+2492 1889 44816
+2493 1889 45373
+2494 1889 27220
+2495 1889 703
+2496 1889 6707
+2497 1889 49963
+2498 1889 57247
+2510 1889 4303
+4400 1889 27852657
+1819 1890 1
+1828 1890 4605
+1829 1890 42704
+1830 1890 42704
+1899 1890 3574
+1901 1890 25902
+1904 1890 6722
+1905 1890 6722
+1914 1890 6722
+1952 1890 26451
+1953 1890 26451
+1954 1890 30025
+1955 1890 41612
+1958 1890 6937
+1959 1890 64227
+1960 1890 64227
+1969 1890 5428
+1979 1890 64227
+2018 1890 26451
+2019 1890 26451
+2020 1890 30025
+2021 1890 41612
+2022 1890 41612
+2024 1890 6937
+2025 1890 64227
+2026 1890 64227
+2035 1890 5428
+2045 1890 62933
+2056 1890 64227
+2178 1890 34286
+2179 1890 34286
+2180 1890 6262
+2181 1890 47632
+2182 1890 13346
+2183 1890 17482
+2184 1890 25999
+2185 1890 18243
+2186 1890 4897
+2187 1890 17482
+2188 1890 25999
+2189 1890 31614
+2190 1890 4844
+2191 1890 65468
+2192 1890 17482
+2193 1890 25999
+2194 1890 31297
+2195 1890 56760
+2196 1890 2360
+2197 1890 2413
+2200 1890 3241
+2201 1890 17966
+2202 1890 26771
+2203 1890 61098
+2207 1890 24275
+2208 1890 39000
+2209 1890 47805
+2210 1890 25416
+2211 1890 16071
+2212 1890 16071
+2213 1890 31342
+2214 1890 19769
+2216 1890 365
+2217 1890 9170
+2218 1890 1506
+2219 1890 2783
+2220 1890 8364
+2221 1890 57814
+2258 1890 33131
+2259 1890 21558
+2260 1890 20341
+2262 1890 16157
+2263 1890 11734
+2264 1890 2466
+2265 1890 2575
+2266 1890 59435
+2275 1890 1621
+2313 1890 57449
+2314 1890 45876
+2315 1890 44659
+2316 1890 21767
+2318 1890 50421
+2319 1890 44088
+2320 1890 64026
+2321 1890 58333
+2330 1890 33170
+2340 1890 31549
+2379 1890 58534
+2380 1890 36904
+2381 1890 51056
+2382 1890 23182
+2383 1890 27548
+2385 1890 38309
+2386 1890 51248
+2387 1890 52823
+2396 1890 2195
+2406 1890 51002
+2417 1890 19453
+2457 1890 51538
+2458 1890 53015
+2459 1890 39410
+2460 1890 47960
+2461 1890 47974
+2462 1890 38462
+2463 1890 64111
+2464 1890 33779
+2465 1890 27397
+2474 1890 39016
+2484 1890 42694
+2495 1890 27564
+2507 1890 64038
+4401 1890 27852657
+1820 1891 1
+1821 1891 1
+1825 1891 65520
+1828 1891 40189
+1829 1891 1517
+1830 1891 1518
+1899 1891 19928
+1901 1891 7470
+1904 1891 34221
+1905 1891 34221
+1914 1891 34221
+1952 1891 55073
+1953 1891 55073
+1954 1891 9480
+1955 1891 42249
+1958 1891 43435
+1959 1891 30179
+1960 1891 30179
+1969 1891 64400
+1979 1891 30179
+2018 1891 55073
+2019 1891 55073
+2020 1891 9480
+2021 1891 42249
+2022 1891 42249
+2024 1891 43435
+2025 1891 30179
+2026 1891 30179
+2035 1891 64400
+2045 1891 60358
+2056 1891 30179
+2178 1891 49750
+2179 1891 49750
+2180 1891 47569
+2181 1891 38312
+2182 1891 54083
+2183 1891 42025
+2184 1891 5186
+2185 1891 57319
+2186 1891 3236
+2187 1891 42025
+2188 1891 5186
+2189 1891 60525
+2190 1891 24823
+2191 1891 21587
+2192 1891 42025
+2193 1891 5186
+2194 1891 35664
+2195 1891 5555
+2196 1891 1358
+2197 1891 45292
+2200 1891 58442
+2201 1891 63235
+2202 1891 32217
+2203 1891 3050
+2207 1891 27035
+2208 1891 31828
+2209 1891 810
+2210 1891 6146
+2211 1891 42973
+2212 1891 42973
+2213 1891 12044
+2214 1891 25971
+2216 1891 47641
+2217 1891 16623
+2218 1891 26752
+2219 1891 48566
+2220 1891 38155
+2221 1891 60703
+2258 1891 36601
+2259 1891 50528
+2260 1891 2120
+2262 1891 7346
+2263 1891 10396
+2264 1891 23705
+2265 1891 37214
+2266 1891 5530
+2275 1891 10348
+2313 1891 13062
+2314 1891 26989
+2315 1891 44102
+2316 1891 19067
+2318 1891 62942
+2319 1891 22231
+2320 1891 16689
+2321 1891 61308
+2330 1891 5969
+2340 1891 61142
+2379 1891 55424
+2380 1891 6153
+2381 1891 10688
+2382 1891 41269
+2383 1891 33387
+2385 1891 36956
+2386 1891 34996
+2387 1891 12593
+2396 1891 31595
+2406 1891 16530
+2417 1891 20909
+2457 1891 2418
+2458 1891 16948
+2459 1891 12276
+2460 1891 15738
+2461 1891 50175
+2462 1891 10466
+2463 1891 18808
+2464 1891 16526
+2465 1891 56302
+2474 1891 17581
+2484 1891 26792
+2495 1891 32281
+2507 1891 37278
+4402 1891 27852657
+1821 1892 1
+2489 1892 65520
+4403 1892 27852657
+1822 1893 1
+1825 1893 1
+1826 1893 1
+1830 1893 65520
+1831 1893 1
+1835 1893 47654
+1836 1893 47655
+1872 1893 65520
+1875 1893 65519
+1877 1893 65520
+1881 1893 2
+1933 1893 1
+1936 1893 3
+1953 1893 65520
+1962 1893 65520
+1963 1893 65517
+1972 1893 65520
+1973 1893 65517
+1974 1893 65517
+2007 1893 23827
+2014 1893 23827
+2022 1893 23827
+2029 1893 27792
+2031 1893 44675
+2038 1893 65520
+2039 1893 33751
+2040 1893 44669
+2050 1893 33755
+2051 1893 44673
+2052 1893 2979
+2368 1893 46909
+2369 1893 11920
+2375 1893 46909
+2376 1893 11920
+2379 1893 8195
+2380 1893 32772
+2382 1893 3726
+2383 1893 5
+2384 1893 13411
+2388 1893 12289
+2389 1893 36866
+2390 1893 12547
+2392 1893 62918
+2393 1893 55478
+2398 1893 12289
+2399 1893 11
+2400 1893 30789
+2401 1893 41696
+2403 1893 64040
+2409 1893 40961
+2410 1893 36872
+2411 1893 5851
+2412 1893 50893
+2413 1893 35251
+2487 1893 3
+2488 1893 16385
+2489 1893 27554
+2490 1893 45300
+2491 1893 53116
+2492 1893 59822
+2493 1893 23827
+2494 1893 23827
+2495 1893 27549
+2496 1893 52306
+2497 1893 42064
+2498 1893 41882
+2510 1893 4657
+4404 1893 27852657
+1823 1894 1
+1827 1894 1
+1832 1894 1
+1872 1894 1
+1873 1894 1
+1877 1894 1
+1878 1894 1
+1932 1894 1
+1933 1894 1
+1934 1894 1
+2380 1894 32761
+2389 1894 32761
+2390 1894 32761
+2399 1894 32761
+2400 1894 32761
+2401 1894 32761
+2410 1894 32761
+2411 1894 32761
+2412 1894 32761
+2413 1894 32761
+2488 1894 24572
+2489 1894 24572
+2490 1894 24572
+2491 1894 24572
+2492 1894 24572
+2510 1894 4096
+4405 1894 27852657
+1824 1895 1
+1825 1895 1
+1828 1895 57447
+1829 1895 5371
+1830 1895 5370
+1899 1895 9596
+1901 1895 64265
+1904 1895 48768
+1905 1895 48768
+1914 1895 48768
+1952 1895 18615
+1953 1895 18615
+1954 1895 28211
+1955 1895 31676
+1958 1895 23133
+1959 1895 4960
+1960 1895 4960
+1969 1895 53728
+1979 1895 4960
+2018 1895 18615
+2019 1895 18615
+2020 1895 28211
+2021 1895 31676
+2022 1895 31676
+2024 1895 23133
+2025 1895 4960
+2026 1895 4960
+2035 1895 53728
+2045 1895 9920
+2056 1895 4960
+2178 1895 30878
+2179 1895 30878
+2180 1895 64188
+2181 1895 19977
+2182 1895 54620
+2183 1895 13564
+2184 1895 3620
+2185 1895 45713
+2186 1895 56614
+2187 1895 13564
+2188 1895 3620
+2189 1895 7723
+2190 1895 9512
+2191 1895 18419
+2192 1895 13564
+2193 1895 3620
+2194 1895 37901
+2195 1895 46977
+2196 1895 7942
+2197 1895 55044
+2200 1895 14312
+2201 1895 49012
+2202 1895 1793
+2203 1895 30625
+2207 1895 28171
+2208 1895 62871
+2209 1895 15652
+2210 1895 62786
+2211 1895 64681
+2212 1895 64681
+2213 1895 40375
+2214 1895 48376
+2216 1895 52476
+2217 1895 5257
+2218 1895 21570
+2219 1895 6447
+2220 1895 20600
+2221 1895 21440
+2258 1895 11441
+2259 1895 19442
+2260 1895 5360
+2262 1895 54427
+2263 1895 19531
+2264 1895 36625
+2265 1895 63246
+2266 1895 30822
+2275 1895 9382
+2313 1895 34485
+2314 1895 42486
+2315 1895 28404
+2316 1895 65191
+2318 1895 64867
+2319 1895 44381
+2320 1895 27402
+2321 1895 38793
+2330 1895 54027
+2340 1895 44645
+2379 1895 32798
+2380 1895 42089
+2381 1895 33041
+2382 1895 26134
+2383 1895 15619
+2385 1895 505
+2386 1895 11974
+2387 1895 13127
+2396 1895 9511
+2406 1895 30639
+2417 1895 51515
+2457 1895 39149
+2458 1895 45662
+2459 1895 14070
+2460 1895 18649
+2461 1895 17438
+2462 1895 32997
+2463 1895 12696
+2464 1895 13413
+2465 1895 36863
+2474 1895 3061
+2484 1895 62788
+2495 1895 59003
+2507 1895 61319
+4406 1895 27852657
+1825 1896 1
+1830 1896 65520
+1836 1896 1
+2014 1896 644
+2022 1896 13571
+2028 1896 54280
+2029 1896 39051
+2031 1896 51717
+2034 1896 16766
+2035 1896 16766
+2036 1896 16766
+2037 1896 36501
+2038 1896 5328
+2039 1896 55620
+2040 1896 61274
+2043 1896 47722
+2044 1896 45994
+2045 1896 45994
+2046 1896 62760
+2047 1896 45994
+2048 1896 36501
+2049 1896 5328
+2050 1896 55620
+2051 1896 61274
+2052 1896 26550
+2054 1896 47722
+2055 1896 45994
+2056 1896 45994
+2057 1896 62760
+2058 1896 26467
+2059 1896 45994
+2353 1896 41252
+2354 1896 41252
+2355 1896 41252
+2356 1896 41252
+2357 1896 41252
+2358 1896 41252
+2362 1896 41252
+2368 1896 9774
+2369 1896 14405
+2373 1896 50682
+2374 1896 50682
+2375 1896 60456
+2376 1896 18047
+2377 1896 53752
+2378 1896 53752
+2379 1896 22725
+2380 1896 62912
+2382 1896 34417
+2383 1896 49042
+2384 1896 65262
+2385 1896 61800
+2386 1896 61707
+2387 1896 7955
+2388 1896 12597
+2389 1896 48852
+2390 1896 32295
+2392 1896 54739
+2393 1896 33300
+2394 1896 56015
+2395 1896 20207
+2396 1896 20178
+2397 1896 12223
+2398 1896 36917
+2399 1896 7651
+2400 1896 56615
+2401 1896 25018
+2403 1896 6553
+2404 1896 14742
+2405 1896 22927
+2406 1896 1613
+2407 1896 23904
+2408 1896 11681
+2409 1896 16525
+2410 1896 27931
+2411 1896 64986
+2412 1896 25033
+2413 1896 24622
+2415 1896 51662
+2416 1896 29699
+2417 1896 17627
+2418 1896 41579
+2419 1896 53206
+2420 1896 41525
+2487 1896 19763
+2488 1896 45652
+2489 1896 32747
+2490 1896 32748
+2491 1896 24651
+2492 1896 47353
+2493 1896 45437
+2494 1896 11603
+2495 1896 49649
+2496 1896 49015
+2497 1896 12636
+2498 1896 3371
+2510 1896 4566
+4407 1896 27852657
+1826 1897 1
+1993 1897 65520
+1994 1897 65520
+1995 1897 65520
+1996 1897 65520
+2187 1897 54601
+2188 1897 5459
+2192 1897 54601
+2196 1897 17869
+2197 1897 17869
+2233 1897 5459
+2283 1897 60062
+2284 1897 22316
+2285 1897 65047
+2286 1897 65047
+2324 1897 40955
+2334 1897 40955
+2335 1897 40955
+2349 1897 60062
+2350 1897 22316
+2351 1897 65047
+2352 1897 65047
+2354 1897 60535
+2355 1897 43680
+2356 1897 32286
+2357 1897 32760
+2368 1897 58075
+2375 1897 58075
+2383 1897 36235
+2390 1897 15895
+2392 1897 26309
+2400 1897 50884
+2401 1897 12665
+2411 1897 9929
+2412 1897 37231
+2413 1897 29785
+2422 1897 65520
+2423 1897 65520
+2424 1897 17745
+2425 1897 65461
+2426 1897 65462
+2427 1897 43681
+2428 1897 7359
+2429 1897 1603
+2430 1897 1662
+2431 1897 55511
+2432 1897 2809
+2433 1897 8982
+2434 1897 10763
+2435 1897 9101
+2436 1897 55511
+2437 1897 44670
+2438 1897 46748
+2439 1897 754
+2440 1897 8192
+2441 1897 64612
+2446 1897 37041
+2447 1897 20845
+2453 1897 37041
+2454 1897 20845
+2457 1897 47776
+2458 1897 10009
+2460 1897 36771
+2461 1897 1591
+2462 1897 41423
+2467 1897 10009
+2468 1897 5213
+2470 1897 45605
+2471 1897 40762
+2477 1897 10009
+2478 1897 42255
+2479 1897 29524
+2481 1897 7633
+2488 1897 10008
+2489 1897 3722
+2490 1897 18967
+2491 1897 54853
+2499 1897 35946
+2500 1897 18214
+2501 1897 13693
+2502 1897 8808
+2503 1897 12294
+2504 1897 18561
+2505 1897 58075
+2506 1897 58075
+2507 1897 55376
+2508 1897 6277
+2509 1897 43648
+2510 1897 33088
+2511 1897 11843
+4408 1897 27852657
+1827 1898 1
+1875 1898 65520
+1993 1898 1
+1994 1898 1
+1995 1898 1
+1996 1898 1
+2188 1898 49142
+2223 1898 65519
+2224 1898 65519
+2226 1898 65519
+2232 1898 16379
+2233 1898 16379
+2236 1898 32760
+2237 1898 16379
+2238 1898 32758
+2239 1898 16379
+2241 1898 65520
+2242 1898 32760
+2278 1898 65519
+2279 1898 65519
+2281 1898 65519
+2284 1898 65519
+2292 1898 16379
+2293 1898 32758
+2294 1898 16379
+2297 1898 32760
+2344 1898 65519
+2345 1898 65519
+2347 1898 65519
+2350 1898 65519
+2353 1898 65519
+2354 1898 32757
+2355 1898 32759
+2356 1898 32759
+2357 1898 32759
+2422 1898 65520
+2423 1898 65520
+2425 1898 65520
+2428 1898 65520
+2431 1898 21840
+2432 1898 38219
+2433 1898 38220
+2434 1898 38220
+2435 1898 38220
+2436 1898 21840
+2437 1898 65519
+2438 1898 65520
+2439 1898 65520
+2440 1898 38219
+2441 1898 65520
+2458 1898 21841
+2466 1898 49140
+2467 1898 62790
+2468 1898 35490
+2470 1898 16379
+2471 1898 16380
+2476 1898 49140
+2477 1898 62790
+2478 1898 35490
+2479 1898 21840
+2481 1898 16380
+2487 1898 49140
+2488 1898 62791
+2489 1898 35491
+2490 1898 21841
+2491 1898 8190
+2499 1898 28321
+2500 1898 39579
+2501 1898 5799
+2502 1898 65519
+2503 1898 15353
+2504 1898 32757
+2508 1898 57331
+2509 1898 57331
+2510 1898 57331
+2511 1898 18085
+4409 1898 27852657
+1828 1899 1
+2189 1899 8189
+2190 1899 49138
+2191 1899 49138
+2196 1899 7690
+2197 1899 24073
+2202 1899 14218
+2208 1899 58045
+2209 1899 4310
+2210 1899 36293
+2211 1899 25854
+2212 1899 25854
+2213 1899 58182
+2214 1899 44403
+2216 1899 1208
+2217 1899 31255
+2218 1899 6234
+2219 1899 37392
+2220 1899 37310
+2221 1899 11456
+2258 1899 33148
+2259 1899 3861
+2260 1899 36718
+2262 1899 62747
+2263 1899 53316
+2264 1899 48033
+2265 1899 40552
+2266 1899 8166
+2275 1899 62231
+2313 1899 7745
+2314 1899 8157
+2315 1899 51246
+2316 1899 37081
+2318 1899 56755
+2319 1899 47870
+2320 1899 60828
+2321 1899 57432
+2330 1899 48681
+2340 1899 51971
+2379 1899 45546
+2380 1899 45555
+2381 1899 33388
+2382 1899 1603
+2383 1899 63909
+2385 1899 41448
+2386 1899 22987
+2387 1899 62761
+2396 1899 63312
+2406 1899 52127
+2417 1899 156
+2457 1899 46317
+2458 1899 34381
+2459 1899 60823
+2460 1899 33854
+2461 1899 40812
+2462 1899 5112
+2463 1899 56769
+2464 1899 33106
+2465 1899 43322
+2474 1899 33866
+2484 1899 43789
+2495 1899 8782
+2507 1899 21981
+4410 1899 27852657
+1829 1900 1
+1830 1900 1
+1875 1900 1
+2190 1900 49142
+2191 1900 49142
+2195 1900 2
+2196 1900 49142
+2236 1900 49142
+2241 1900 49142
+2460 1900 1
+2461 1900 8191
+2470 1900 8191
+2491 1900 8191
+2503 1900 13310
+2504 1900 49142
+2511 1900 8191
+4411 1900 27852657
+1830 1901 1
+2108 1901 20208
+2113 1901 47236
+2114 1901 27028
+2128 1901 50531
+2155 1901 23135
+2161 1901 61425
+2191 1901 10942
+2197 1901 6454
+2242 1901 29173
+2357 1901 59071
+2433 1901 14352
+2434 1901 52498
+2435 1901 5014
+2440 1901 6454
+2441 1901 14318
+2446 1901 40077
+2452 1901 6893
+2453 1901 62299
+2454 1901 59146
+2455 1901 37352
+2456 1901 37352
+2457 1901 27023
+2458 1901 26075
+2460 1901 5545
+2461 1901 44156
+2462 1901 1671
+2463 1901 26022
+2464 1901 47401
+2465 1901 10049
+2466 1901 23737
+2467 1901 381
+2468 1901 19719
+2470 1901 61956
+2471 1901 36202
+2472 1901 34239
+2473 1901 29480
+2474 1901 56162
+2475 1901 46113
+2476 1901 57128
+2477 1901 60309
+2478 1901 59879
+2479 1901 28541
+2481 1901 53773
+2482 1901 2519
+2483 1901 32035
+2484 1901 19942
+2485 1901 52402
+2486 1901 6289
+2487 1901 63909
+2488 1901 21199
+2489 1901 28972
+2490 1901 47692
+2491 1901 29641
+2493 1901 52754
+2494 1901 63453
+2495 1901 43490
+2496 1901 65218
+2497 1901 42742
+2498 1901 36453
+2499 1901 37081
+2500 1901 62608
+2501 1901 60903
+2502 1901 16727
+2503 1901 58291
+2504 1901 41710
+2505 1901 46426
+2506 1901 20941
+2507 1901 4550
+2508 1901 48521
+2509 1901 59526
+2510 1901 13998
+2511 1901 2179
+4412 1901 27852657
+1831 1902 1
+1936 1902 13187
+1994 1902 31040
+1995 1902 46029
+1996 1902 46029
+2014 1902 27498
+2022 1902 18988
+2028 1902 8626
+2029 1902 7109
+2031 1902 62293
+2034 1902 53263
+2035 1902 53263
+2036 1902 53263
+2037 1902 23057
+2038 1902 51609
+2039 1902 63975
+2040 1902 19029
+2043 1902 19816
+2044 1902 54737
+2045 1902 54737
+2046 1902 42479
+2047 1902 54737
+2048 1902 23057
+2049 1902 51609
+2050 1902 63975
+2051 1902 19029
+2052 1902 56726
+2054 1902 19816
+2055 1902 54737
+2056 1902 54737
+2057 1902 42479
+2058 1902 43953
+2059 1902 54737
+2344 1902 1640
+2345 1902 1640
+2346 1902 41292
+2347 1902 61156
+2348 1902 59516
+2349 1902 32571
+2350 1902 63104
+2351 1902 53614
+2352 1902 59619
+2353 1902 32571
+2354 1902 63104
+2355 1902 44364
+2356 1902 30576
+2357 1902 36478
+2358 1902 56401
+2359 1902 3887
+2360 1902 9808
+2361 1902 61206
+2362 1902 55664
+2363 1902 19186
+2366 1902 56456
+2367 1902 4940
+2368 1902 3742
+2369 1902 28914
+2373 1902 4829
+2374 1902 18834
+2375 1902 17636
+2376 1902 6695
+2377 1902 28110
+2378 1902 28110
+2379 1902 31679
+2380 1902 37575
+2382 1902 8475
+2383 1902 62890
+2384 1902 62464
+2385 1902 56213
+2386 1902 4536
+2387 1902 41947
+2388 1902 43524
+2389 1902 47551
+2390 1902 47509
+2392 1902 20671
+2393 1902 30957
+2394 1902 48018
+2395 1902 60764
+2396 1902 4882
+2397 1902 28456
+2398 1902 38609
+2399 1902 41709
+2400 1902 8864
+2401 1902 39799
+2403 1902 16583
+2404 1902 35872
+2405 1902 48368
+2406 1902 20002
+2407 1902 25834
+2408 1902 62899
+2409 1902 17137
+2410 1902 28371
+2411 1902 23090
+2412 1902 3386
+2413 1902 23117
+2415 1902 14698
+2416 1902 52217
+2417 1902 36269
+2418 1902 57154
+2419 1902 117
+2420 1902 2739
+2487 1902 8764
+2488 1902 29213
+2489 1902 63703
+2490 1902 36894
+2491 1902 25499
+2492 1902 43242
+2493 1902 22367
+2494 1902 15249
+2495 1902 51287
+2496 1902 10400
+2497 1902 2702
+2498 1902 11008
+2510 1902 14836
+4413 1902 27852657
+1832 1903 1
+1877 1903 1
+1878 1903 1
+1932 1903 1
+1933 1903 1
+2359 1903 43681
+2360 1903 43681
+2361 1903 43681
+2362 1903 43681
+2363 1903 43681
+2380 1903 54601
+2389 1903 54601
+2390 1903 54601
+2399 1903 54601
+2400 1903 54601
+2410 1903 54601
+2411 1903 54601
+2488 1903 12286
+2489 1903 12286
+2490 1903 30031
+2491 1903 30031
+2492 1903 42317
+2510 1903 23888
+4414 1903 27852657
+1833 1904 1
+1835 1904 28737
+1836 1904 28737
+1841 1904 24783
+1847 1904 1246
+1848 1904 60874
+1849 1904 18235
+1850 1904 9617
+1851 1904 9617
+1852 1904 54083
+1853 1904 59818
+1855 1904 38845
+1856 1904 23451
+1857 1904 9351
+1858 1904 57101
+1859 1904 50597
+1860 1904 40980
+1897 1904 2324
+1898 1904 29440
+1899 1904 3801
+1901 1904 25568
+1902 1904 25739
+1903 1904 49148
+1904 1904 23779
+1905 1904 24477
+1914 1904 49018
+1952 1904 248
+1953 1904 37333
+1954 1904 15814
+1955 1904 29095
+1957 1904 57418
+1958 1904 7841
+1959 1904 38514
+1960 1904 32343
+1969 1904 52504
+1979 1904 3486
+2018 1904 5412
+2019 1904 30872
+2020 1904 25557
+2021 1904 63615
+2022 1904 52306
+2024 1904 26866
+2025 1904 13029
+2026 1904 18975
+2035 1904 44054
+2045 1904 55846
+2056 1904 52360
+2379 1904 63742
+2380 1904 26879
+2381 1904 46251
+2382 1904 7065
+2383 1904 18675
+2384 1904 14308
+2385 1904 63404
+2386 1904 40439
+2387 1904 47018
+2396 1904 20159
+2406 1904 52300
+2417 1904 12026
+2495 1904 18841
+4415 1904 27852657
+1834 1905 1
+1835 1905 1
+1836 1905 1
+1963 1905 16372
+1973 1905 16372
+1974 1905 16372
+2007 1905 32762
+2014 1905 32762
+2022 1905 32762
+2029 1905 65506
+2031 1905 32759
+2039 1905 16375
+2040 1905 16375
+2050 1905 3
+2051 1905 3
+2052 1905 32765
+2368 1905 36858
+2369 1905 9
+2375 1905 36858
+2376 1905 9
+2382 1905 24572
+2383 1905 61430
+2384 1905 61436
+2390 1905 8195
+2392 1905 28663
+2393 1905 4103
+2400 1905 45050
+2401 1905 45050
+2403 1905 12286
+2411 1905 53239
+2412 1905 53239
+2413 1905 40948
+2489 1905 51188
+2490 1905 51188
+2491 1905 36855
+2492 1905 24573
+2493 1905 32762
+2494 1905 32762
+2495 1905 6144
+2496 1905 59379
+2497 1905 56301
+2498 1905 28662
+2510 1905 3082
+4416 1905 27852657
+1835 1906 1
+1836 1906 1
+2014 1906 61136
+2022 1906 55752
+2029 1906 26622
+2031 1906 60568
+2034 1906 7132
+2035 1906 7132
+2036 1906 7132
+2037 1906 52136
+2038 1906 52136
+2039 1906 13237
+2040 1906 13237
+2043 1906 30661
+2044 1906 54951
+2045 1906 54951
+2046 1906 62083
+2047 1906 54951
+2048 1906 52136
+2049 1906 52136
+2050 1906 13237
+2051 1906 13237
+2052 1906 15752
+2054 1906 30661
+2055 1906 54951
+2056 1906 54951
+2057 1906 62083
+2058 1906 44381
+2059 1906 54951
+2368 1906 56555
+2369 1906 32541
+2373 1906 37637
+2374 1906 37637
+2375 1906 28671
+2376 1906 28004
+2377 1906 64488
+2378 1906 64488
+2379 1906 21803
+2380 1906 21803
+2382 1906 33382
+2383 1906 1080
+2384 1906 3958
+2385 1906 1234
+2386 1906 62887
+2387 1906 63920
+2388 1906 49901
+2389 1906 49901
+2390 1906 44021
+2392 1906 2714
+2393 1906 9436
+2394 1906 29184
+2395 1906 65017
+2396 1906 26505
+2397 1906 28106
+2398 1906 5531
+2399 1906 5531
+2400 1906 65172
+2401 1906 65172
+2403 1906 39797
+2404 1906 16587
+2405 1906 28313
+2406 1906 47099
+2407 1906 7851
+2408 1906 45266
+2409 1906 46663
+2410 1906 46663
+2411 1906 17618
+2412 1906 17618
+2413 1906 34351
+2415 1906 5297
+2416 1906 49515
+2417 1906 35141
+2418 1906 19848
+2419 1906 20072
+2420 1906 40327
+2487 1906 7278
+2488 1906 7278
+2489 1906 58018
+2490 1906 58018
+2491 1906 45936
+2492 1906 17973
+2493 1906 50965
+2494 1906 64086
+2495 1906 8078
+2496 1906 41206
+2497 1906 20008
+2498 1906 44523
+2510 1906 33534
+4417 1906 27852657
+1836 1907 1
+2462 1907 65520
+4418 1907 27852657
+1837 1908 1
+2495 1908 65520
+4419 1908 27852657
+1838 1909 1
+1839 1909 1
+1840 1909 1
+1841 1909 1
+1842 1909 1
+1846 1909 1
+1847 1909 1
+1848 1909 1
+1849 1909 1
+1855 1909 1
+1856 1909 1
+1857 1909 1
+1901 1909 1
+1902 1909 1
+1957 1909 1
+2385 1909 32761
+2386 1909 32761
+2387 1909 32761
+2396 1909 32761
+2406 1909 32761
+2417 1909 32761
+2495 1909 24573
+4420 1909 27852657
+1839 1910 1
+1847 1910 65520
+1848 1910 37768
+1856 1910 37184
+1899 1910 18083
+1901 1910 31076
+1904 1910 47386
+1905 1910 47386
+1914 1910 47386
+1952 1910 7183
+1953 1910 7183
+1954 1910 25266
+1955 1910 412
+1958 1910 53703
+1959 1910 55184
+1960 1910 55184
+1969 1910 37049
+1979 1910 55184
+2018 1910 7183
+2019 1910 7183
+2020 1910 25266
+2021 1910 412
+2022 1910 12743
+2024 1910 53703
+2025 1910 55184
+2026 1910 55184
+2035 1910 37049
+2045 1910 44847
+2056 1910 55184
+2200 1910 5085
+2201 1910 38974
+2202 1910 25965
+2203 1910 17132
+2207 1910 15379
+2208 1910 49268
+2209 1910 36259
+2210 1910 17063
+2211 1910 6721
+2212 1910 6721
+2213 1910 44176
+2214 1910 44176
+2216 1910 37163
+2217 1910 55117
+2218 1910 19223
+2219 1910 37968
+2220 1910 30545
+2221 1910 23824
+2258 1910 54667
+2259 1910 54667
+2260 1910 7234
+2262 1910 17311
+2263 1910 693
+2264 1910 63597
+2265 1910 53067
+2266 1910 53966
+2275 1910 30142
+2313 1910 26748
+2314 1910 26748
+2315 1910 44836
+2316 1910 60649
+2318 1910 48570
+2319 1910 58210
+2320 1910 27986
+2321 1910 11965
+2330 1910 15271
+2340 1910 50650
+2379 1910 8275
+2380 1910 8275
+2381 1910 25511
+2382 1910 65049
+2383 1910 19514
+2385 1910 14457
+2386 1910 44951
+2387 1910 63804
+2396 1910 28883
+2406 1910 6666
+2417 1910 21537
+2457 1910 26845
+2458 1910 26845
+2459 1910 7216
+2460 1910 56922
+2461 1910 27434
+2462 1910 38666
+2463 1910 33408
+2464 1910 3130
+2465 1910 16047
+2474 1910 21044
+2484 1910 60468
+2495 1910 57991
+2507 1910 14487
+4421 1910 27852657
+1840 1911 1
+1841 1911 1
+1842 1911 1
+1847 1911 1
+1848 1911 1
+1849 1911 1
+1855 1911 1
+1856 1911 1
+1857 1911 1
+1886 1911 1
+1887 1911 1
+1893 1911 1
+1894 1911 1
+1901 1911 2
+1902 1911 2
+1910 1911 1
+1911 1911 1
+1942 1911 1
+1949 1911 1
+1957 1911 2
+1966 1911 2
+1976 1911 1
+2385 1911 32761
+2386 1911 32761
+2387 1911 32761
+2394 1911 32761
+2395 1911 32761
+2396 1911 1
+2397 1911 32761
+2404 1911 32761
+2405 1911 32761
+2406 1911 1
+2407 1911 1
+2408 1911 32761
+2415 1911 32761
+2416 1911 32761
+2417 1911 1
+2418 1911 1
+2419 1911 1
+2420 1911 32761
+2493 1911 24572
+2494 1911 24572
+2495 1911 49144
+2496 1911 49143
+2497 1911 49142
+2498 1911 49141
+2510 1911 8190
+4422 1911 27852657
+1841 1912 1
+1848 1912 1
+1856 1912 1
+1910 1912 65520
+2007 1912 1
+2014 1912 1
+2022 1912 2
+2031 1912 1
+2052 1912 1
+2166 1912 2
+2167 1912 2
+2173 1912 2
+2174 1912 2
+2202 1912 49144
+2203 1912 49144
+2208 1912 2
+2209 1912 49146
+2210 1912 49146
+2216 1912 2
+2217 1912 49144
+2218 1912 49144
+2247 1912 2
+2248 1912 2
+2254 1912 4
+2255 1912 4
+2262 1912 4
+2263 1912 4
+2271 1912 16381
+2272 1912 16381
+2310 1912 2
+2318 1912 49142
+2327 1912 16381
+2368 1912 32763
+2375 1912 16382
+2383 1912 49143
+2392 1912 32761
+2413 1912 1
+2446 1912 16381
+2447 1912 16381
+2453 1912 24571
+2454 1912 24571
+2455 1912 1
+2456 1912 1
+2461 1912 40951
+2462 1912 40951
+2463 1912 8192
+2464 1912 8193
+2465 1912 8192
+2470 1912 38221
+2471 1912 38221
+2472 1912 1
+2473 1912 2
+2474 1912 2
+2475 1912 57331
+2481 1912 16380
+2482 1912 21841
+2483 1912 21842
+2484 1912 30032
+2485 1912 13651
+2486 1912 21841
+2493 1912 21842
+2494 1912 21843
+2495 1912 30034
+2496 1912 13652
+2497 1912 43683
+2498 1912 21843
+2503 1912 8190
+2504 1912 8190
+2505 1912 45733
+2506 1912 59045
+2507 1912 691
+2508 1912 51534
+2509 1912 40270
+2510 1912 40271
+2511 1912 63815
+4423 1912 27852657
+1842 1913 1
+2031 1913 7261
+2034 1913 26277
+2035 1913 26277
+2036 1913 26277
+2037 1913 46622
+2038 1913 46622
+2039 1913 46622
+2040 1913 46622
+2043 1913 65290
+2044 1913 21768
+2045 1913 21768
+2046 1913 48045
+2047 1913 21768
+2048 1913 46622
+2049 1913 46622
+2050 1913 46622
+2051 1913 46622
+2052 1913 46622
+2054 1913 65290
+2055 1913 21768
+2056 1913 21768
+2057 1913 48045
+2058 1913 43536
+2059 1913 21768
+2369 1913 7770
+2373 1913 59302
+2374 1913 59302
+2375 1913 59302
+2376 1913 20699
+2377 1913 61249
+2378 1913 61249
+2379 1913 32327
+2380 1913 32327
+2382 1913 39775
+2383 1913 39775
+2384 1913 39250
+2385 1913 63043
+2386 1913 10681
+2387 1913 14953
+2388 1913 26462
+2389 1913 26462
+2390 1913 26462
+2392 1913 52210
+2393 1913 33542
+2394 1913 14611
+2395 1913 26324
+2396 1913 62568
+2397 1913 47615
+2398 1913 4640
+2399 1913 4640
+2400 1913 4640
+2401 1913 4640
+2403 1913 42489
+2404 1913 13225
+2405 1913 20936
+2406 1913 48610
+2407 1913 26151
+2408 1913 44057
+2409 1913 63635
+2410 1913 63635
+2411 1913 63635
+2412 1913 63635
+2413 1913 63635
+2415 1913 38806
+2416 1913 15652
+2417 1913 52068
+2418 1913 36902
+2419 1913 43506
+2420 1913 64970
+2487 1913 4269
+2488 1913 4269
+2489 1913 4269
+2490 1913 4269
+2491 1913 4269
+2492 1913 2974
+2493 1913 25771
+2494 1913 30777
+2495 1913 36269
+2496 1913 32675
+2497 1913 31099
+2498 1913 61929
+2510 1913 3952
+4424 1913 27852657
+1843 1914 1
+1851 1914 65520
+1860 1914 1
+1888 1914 4962
+1896 1914 60559
+1905 1914 16366
+1913 1914 12295
+1914 1914 19884
+1915 1914 3519
+1943 1914 19012
+1951 1914 46509
+1960 1914 4083
+1970 1914 58649
+1976 1914 3428
+1977 1914 45574
+1978 1914 33279
+1979 1914 32018
+1980 1914 56752
+1981 1914 1622
+2009 1914 41192
+2017 1914 24329
+2026 1914 16329
+2036 1914 29787
+2047 1914 4541
+2055 1914 52803
+2056 1914 47349
+2057 1914 60694
+2058 1914 45687
+2059 1914 42768
+2370 1914 56906
+2377 1914 61580
+2378 1914 4674
+2379 1914 64750
+2380 1914 64750
+2382 1914 35833
+2383 1914 35833
+2384 1914 35833
+2385 1914 53367
+2386 1914 44210
+2387 1914 9259
+2388 1914 33015
+2389 1914 33015
+2390 1914 33015
+2392 1914 62615
+2393 1914 62615
+2394 1914 14532
+2395 1914 3041
+2396 1914 31828
+2397 1914 15027
+2398 1914 19048
+2399 1914 19048
+2400 1914 19048
+2401 1914 19048
+2403 1914 788
+2404 1914 60866
+2405 1914 42541
+2406 1914 64445
+2407 1914 34502
+2408 1914 15078
+2409 1914 37074
+2410 1914 37074
+2411 1914 37074
+2412 1914 37074
+2413 1914 37074
+2415 1914 24216
+2416 1914 10050
+2417 1914 55461
+2418 1914 64824
+2419 1914 24456
+2420 1914 24044
+2487 1914 65222
+2488 1914 65222
+2489 1914 65222
+2490 1914 65222
+2491 1914 65222
+2492 1914 65222
+2493 1914 28920
+2494 1914 19260
+2495 1914 59239
+2496 1914 29558
+2497 1914 44332
+2498 1914 54208
+2510 1914 62838
+4425 1914 27852657
+1844 1915 1
+1852 1915 1
+1853 1915 1
+1897 1915 1
+1898 1915 1
+1899 1915 1
+1952 1915 1
+1953 1915 1
+1954 1915 1
+1955 1915 1
+2018 1915 1
+2019 1915 1
+2020 1915 1
+2021 1915 1
+2022 1915 1
+2379 1915 32761
+2380 1915 32761
+2381 1915 32761
+2382 1915 32761
+2383 1915 32761
+2384 1915 32761
+2495 1915 24573
+4426 1915 27852657
+1845 1916 1
+2495 1916 65520
+4427 1916 27852657
+1846 1917 1
+1847 1917 1
+1848 1917 1
+1855 1917 1
+1856 1917 1
+2207 1917 54601
+2208 1917 54601
+2209 1917 54601
+2210 1917 54601
+2216 1917 54601
+2217 1917 54601
+2218 1917 54601
+2386 1917 43681
+2387 1917 43681
+2396 1917 43681
+2406 1917 43681
+2417 1917 43681
+2464 1917 12286
+2465 1917 12286
+2474 1917 30031
+2484 1917 30031
+2495 1917 42317
+2507 1917 23888
+4428 1917 27852657
+1847 1918 1
+1848 1918 1
+1855 1918 1
+1856 1918 1
+2271 1918 54601
+2272 1918 54601
+2319 1918 20816
+2320 1918 20816
+2321 1918 20816
+2327 1918 54601
+2328 1918 20816
+2329 1918 20816
+2330 1918 41632
+2331 1918 20816
+2338 1918 20816
+2339 1918 20816
+2340 1918 41632
+2341 1918 41632
+2342 1918 20816
+2377 1918 35957
+2378 1918 35957
+2385 1918 56773
+2386 1918 5369
+2387 1918 34933
+2392 1918 6181
+2394 1918 56773
+2395 1918 7641
+2396 1918 6617
+2397 1918 37205
+2404 1918 42256
+2405 1918 58645
+2406 1918 12916
+2407 1918 15188
+2408 1918 43504
+2415 1918 21440
+2416 1918 37829
+2417 1918 36805
+2418 1918 39077
+2419 1918 24560
+2420 1918 1872
+2455 1918 27988
+2456 1918 27988
+2463 1918 19044
+2464 1918 14272
+2465 1918 51805
+2470 1918 55631
+2471 1918 55631
+2472 1918 19044
+2473 1918 43925
+2474 1918 46494
+2475 1918 42465
+2481 1918 55631
+2482 1918 45712
+2483 1918 5072
+2484 1918 63420
+2485 1918 54080
+2486 1918 11615
+2493 1918 31599
+2494 1918 56243
+2495 1918 61355
+2496 1918 16945
+2497 1918 28163
+2498 1918 16548
+2505 1918 23418
+2506 1918 41510
+2507 1918 27059
+2508 1918 40419
+2509 1918 55219
+2510 1918 7647
+2511 1918 59300
+4429 1918 27852657
+1848 1919 1
+1856 1919 1
+2022 1919 1
+2271 1919 54601
+2272 1919 54601
+2337 1919 10920
+2375 1919 38901
+2383 1919 28666
+2392 1919 40980
+2395 1919 3285
+2396 1919 3285
+2397 1919 3285
+2398 1919 45842
+2399 1919 45842
+2400 1919 45842
+2401 1919 45842
+2404 1919 42535
+2405 1919 38957
+2406 1919 38957
+2407 1919 42242
+2408 1919 38957
+2409 1919 45842
+2410 1919 45842
+2411 1919 45842
+2412 1919 45842
+2413 1919 45842
+2415 1919 42535
+2416 1919 38957
+2417 1919 38957
+2418 1919 42242
+2419 1919 12393
+2420 1919 38957
+2451 1919 21831
+2452 1919 21831
+2453 1919 9289
+2454 1919 9289
+2457 1919 22893
+2458 1919 22893
+2460 1919 21602
+2461 1919 9316
+2462 1919 9316
+2464 1919 55860
+2465 1919 55860
+2466 1919 8871
+2467 1919 8871
+2468 1919 8871
+2470 1919 49851
+2471 1919 49851
+2473 1919 34308
+2474 1919 55774
+2475 1919 47690
+2476 1919 61030
+2477 1919 61030
+2478 1919 61030
+2479 1919 61030
+2481 1919 63777
+2482 1919 58647
+2483 1919 40036
+2484 1919 59531
+2485 1919 55339
+2486 1919 7649
+2487 1919 9366
+2488 1919 9366
+2489 1919 9366
+2490 1919 9366
+2491 1919 9366
+2493 1919 44549
+2494 1919 10118
+2495 1919 27959
+2496 1919 49468
+2497 1919 42675
+2498 1919 35026
+2499 1919 2632
+2500 1919 2632
+2501 1919 2632
+2502 1919 2632
+2503 1919 2632
+2504 1919 2632
+2506 1919 49978
+2507 1919 31392
+2508 1919 33092
+2509 1919 59030
+2510 1919 13709
+2511 1919 60908
+4430 1919 27852657
+1849 1920 1
+1857 1920 1
+1911 1920 65520
+1976 1920 1
+2031 1920 61157
+2034 1920 20292
+2035 1920 20292
+2036 1920 20292
+2037 1920 24464
+2038 1920 24464
+2039 1920 24464
+2040 1920 24464
+2043 1920 2480
+2044 1920 21631
+2045 1920 21631
+2046 1920 41923
+2047 1920 21631
+2048 1920 24464
+2049 1920 24464
+2050 1920 24464
+2051 1920 24464
+2052 1920 24464
+2054 1920 2480
+2055 1920 21631
+2056 1920 21631
+2057 1920 41923
+2058 1920 43262
+2059 1920 21631
+2369 1920 59959
+2373 1920 10717
+2374 1920 10717
+2375 1920 10717
+2376 1920 7605
+2377 1920 21541
+2378 1920 21541
+2379 1920 37501
+2380 1920 37501
+2382 1920 28283
+2383 1920 28283
+2384 1920 19085
+2385 1920 62596
+2386 1920 12376
+2387 1920 56356
+2388 1920 32262
+2389 1920 32262
+2390 1920 32262
+2392 1920 38568
+2393 1920 53534
+2394 1920 28242
+2395 1920 14563
+2396 1920 5428
+2397 1920 14593
+2398 1920 49166
+2399 1920 49166
+2400 1920 49166
+2401 1920 49166
+2403 1920 4960
+2404 1920 43122
+2405 1920 51625
+2406 1920 27349
+2407 1920 41924
+2408 1920 27331
+2409 1920 32489
+2410 1920 32489
+2411 1920 32489
+2412 1920 32489
+2413 1920 32489
+2415 1920 32272
+2416 1920 50003
+2417 1920 52103
+2418 1920 17083
+2419 1920 65101
+2420 1920 37770
+2487 1920 48991
+2488 1920 48991
+2489 1920 48991
+2490 1920 48991
+2491 1920 48991
+2492 1920 49918
+2493 1920 33982
+2494 1920 45726
+2495 1920 51649
+2496 1920 611
+2497 1920 21845
+2498 1920 24381
+2510 1920 1841
+4431 1920 27852657
+1850 1921 1
+1851 1921 1
+1858 1921 1
+1859 1921 2
+1860 1921 1
+1903 1921 1
+1904 1921 2
+1905 1921 2
+1914 1921 1
+1959 1921 1
+1960 1921 1
+1969 1921 1
+2025 1921 1
+2026 1921 1
+2035 1921 1
+2256 1921 19538
+2257 1921 19538
+2264 1921 41418
+2265 1921 60956
+2266 1921 41418
+2273 1921 41418
+2274 1921 60956
+2275 1921 17315
+2276 1921 41418
+2329 1921 19538
+2330 1921 41418
+2331 1921 41418
+2338 1921 24103
+2339 1921 24103
+2340 1921 24103
+2341 1921 24103
+2342 1921 24103
+2385 1921 36859
+2392 1921 14325
+2395 1921 18874
+2396 1921 34507
+2397 1921 34507
+2398 1921 27713
+2399 1921 27713
+2400 1921 27713
+2401 1921 27713
+2404 1921 63743
+2405 1921 34531
+2406 1921 38388
+2407 1921 56934
+2408 1921 22427
+2409 1921 27713
+2410 1921 27713
+2411 1921 27713
+2412 1921 27713
+2413 1921 27713
+2415 1921 39640
+2416 1921 10428
+2417 1921 14285
+2418 1921 32831
+2419 1921 38066
+2420 1921 39742
+2451 1921 39657
+2452 1921 39657
+2453 1921 39657
+2454 1921 39657
+2455 1921 61107
+2456 1921 61107
+2457 1921 61173
+2458 1921 61173
+2460 1921 58157
+2461 1921 58157
+2462 1921 58157
+2463 1921 16563
+2464 1921 8500
+2465 1921 12914
+2466 1921 21618
+2467 1921 21618
+2468 1921 21618
+2470 1921 16577
+2471 1921 16577
+2472 1921 59940
+2473 1921 25059
+2474 1921 10972
+2475 1921 63579
+2476 1921 13363
+2477 1921 13363
+2478 1921 13363
+2479 1921 13363
+2481 1921 39483
+2482 1921 29958
+2483 1921 8583
+2484 1921 43002
+2485 1921 58086
+2486 1921 60028
+2487 1921 45093
+2488 1921 45093
+2489 1921 45093
+2490 1921 45093
+2491 1921 45093
+2493 1921 62327
+2494 1921 12050
+2495 1921 56465
+2496 1921 64649
+2497 1921 37598
+2498 1921 43091
+2499 1921 7677
+2500 1921 7677
+2501 1921 7677
+2502 1921 7677
+2503 1921 7677
+2504 1921 7677
+2505 1921 16236
+2506 1921 41252
+2507 1921 24490
+2508 1921 25232
+2509 1921 12217
+2510 1921 52852
+2511 1921 45825
+4432 1921 27852657
+1851 1922 1
+1860 1922 65520
+1896 1922 19564
+1905 1922 34553
+1913 1922 3054
+1914 1922 35516
+1915 1922 962
+1951 1922 2437
+1960 1922 12492
+1970 1922 47199
+1977 1922 158
+1978 1922 27163
+1979 1922 65043
+1980 1922 42951
+1981 1922 62235
+2017 1922 55965
+2026 1922 34419
+2036 1922 54979
+2047 1922 62432
+2056 1922 20529
+2057 1922 65094
+2058 1922 30005
+2059 1922 29808
+2377 1922 24352
+2378 1922 40940
+2379 1922 19610
+2380 1922 19610
+2382 1922 44291
+2383 1922 44291
+2384 1922 44291
+2385 1922 42662
+2386 1922 34816
+2387 1922 24153
+2388 1922 21231
+2389 1922 21231
+2390 1922 21231
+2392 1922 47707
+2393 1922 47707
+2394 1922 49719
+2395 1922 17309
+2396 1922 11750
+2397 1922 48676
+2398 1922 56688
+2399 1922 56688
+2400 1922 56688
+2401 1922 56688
+2403 1922 47584
+2404 1922 32152
+2405 1922 31115
+2406 1922 27435
+2407 1922 24649
+2408 1922 31783
+2409 1922 55408
+2410 1922 55408
+2411 1922 55408
+2412 1922 55408
+2413 1922 55408
+2415 1922 6387
+2416 1922 37178
+2417 1922 14066
+2418 1922 37688
+2419 1922 17012
+2420 1922 56760
+2487 1922 49331
+2488 1922 49331
+2489 1922 49331
+2490 1922 49331
+2491 1922 49331
+2492 1922 49331
+2493 1922 35052
+2494 1922 63137
+2495 1922 16011
+2496 1922 52709
+2497 1922 63690
+2498 1922 10738
+2510 1922 56864
+4433 1922 27852657
+1852 1923 1
+1905 1923 50663
+1907 1923 1
+1913 1923 51868
+1914 1923 21821
+1915 1923 36679
+1960 1923 9142
+1970 1923 897
+1972 1923 65520
+1976 1923 8083
+1977 1923 54397
+1978 1923 2529
+1979 1923 58047
+1980 1923 3213
+1981 1923 38995
+2026 1923 26655
+2036 1923 42794
+2047 1923 7764
+2055 1923 40084
+2056 1923 4929
+2057 1923 48117
+2058 1923 8487
+2059 1923 39718
+2368 1923 57425
+2375 1923 8603
+2376 1923 44455
+2377 1923 26766
+2378 1923 26766
+2379 1923 1084
+2380 1923 55888
+2382 1923 12754
+2383 1923 40018
+2384 1923 34218
+2385 1923 4209
+2386 1923 45281
+2387 1923 46129
+2388 1923 17852
+2389 1923 55799
+2390 1923 41998
+2392 1923 38828
+2393 1923 28720
+2394 1923 39292
+2395 1923 10689
+2396 1923 16119
+2397 1923 61363
+2398 1923 40159
+2399 1923 63418
+2400 1923 33030
+2401 1923 33030
+2403 1923 8834
+2404 1923 56907
+2405 1923 25103
+2406 1923 36448
+2407 1923 41588
+2408 1923 63609
+2409 1923 45611
+2410 1923 12601
+2411 1923 18694
+2412 1923 18694
+2413 1923 61309
+2415 1923 48324
+2416 1923 59600
+2417 1923 27754
+2418 1923 22176
+2419 1923 53866
+2420 1923 64912
+2487 1923 30647
+2488 1923 56580
+2489 1923 61347
+2490 1923 61347
+2491 1923 22231
+2492 1923 30851
+2493 1923 15863
+2494 1923 2248
+2495 1923 61413
+2496 1923 51412
+2497 1923 32769
+2498 1923 38950
+2510 1923 60742
+4434 1923 27852657
+1853 1924 1
+1907 1924 65520
+1972 1924 1
+2014 1924 21223
+2022 1924 35404
+2028 1924 62823
+2029 1924 33261
+2031 1924 10172
+2034 1924 41764
+2035 1924 41764
+2036 1924 41764
+2037 1924 30586
+2038 1924 30838
+2039 1924 49171
+2040 1924 28251
+2043 1924 42908
+2044 1924 17781
+2045 1924 17781
+2046 1924 59545
+2047 1924 17781
+2048 1924 30586
+2049 1924 30837
+2050 1924 49171
+2051 1924 28251
+2052 1924 62652
+2054 1924 42908
+2055 1924 17781
+2056 1924 17781
+2057 1924 59545
+2058 1924 35562
+2059 1924 17781
+2366 1924 58834
+2367 1924 58834
+2368 1924 13652
+2369 1924 8270
+2373 1924 30264
+2374 1924 30264
+2375 1924 50603
+2376 1924 57058
+2377 1924 30538
+2378 1924 30538
+2379 1924 39731
+2380 1924 13294
+2382 1924 56061
+2383 1924 38492
+2384 1924 38363
+2385 1924 19065
+2386 1924 31699
+2387 1924 1161
+2388 1924 27494
+2389 1924 9403
+2390 1924 13915
+2392 1924 1808
+2393 1924 55134
+2394 1924 55280
+2395 1924 65429
+2396 1924 49155
+2397 1924 47994
+2398 1924 11698
+2399 1924 1797
+2400 1924 7470
+2401 1924 12992
+2403 1924 45152
+2404 1924 26375
+2405 1924 11993
+2406 1924 33656
+2407 1924 22868
+2408 1924 40395
+2409 1924 23052
+2410 1924 40790
+2411 1924 52307
+2412 1924 18312
+2413 1924 1550
+2415 1924 39279
+2416 1924 36831
+2417 1924 34312
+2418 1924 50296
+2419 1924 24427
+2420 1924 49553
+2487 1924 55353
+2488 1924 6223
+2489 1924 48483
+2490 1924 48483
+2491 1924 18715
+2492 1924 43391
+2493 1924 39211
+2494 1924 10060
+2495 1924 22427
+2496 1924 19441
+2497 1924 65333
+2498 1924 26722
+2510 1924 13398
+4435 1924 27852657
+1854 1925 1
+2495 1925 65520
+4436 1925 27852657
+1855 1926 1
+1856 1926 1
+1905 1926 34976
+1913 1926 24806
+1914 1926 7599
+1915 1926 38144
+1960 1926 2585
+1970 1926 31230
+1976 1926 36084
+1977 1926 47570
+1978 1926 22764
+1979 1926 19134
+1980 1926 25454
+1981 1926 32368
+2026 1926 19269
+2036 1926 26427
+2047 1926 33947
+2055 1926 26994
+2056 1926 53889
+2057 1926 49039
+2058 1926 49673
+2059 1926 48094
+2376 1926 60542
+2377 1926 23497
+2378 1926 23497
+2379 1926 19175
+2380 1926 19175
+2382 1926 35436
+2383 1926 35436
+2384 1926 33521
+2385 1926 30924
+2386 1926 60937
+2387 1926 40619
+2388 1926 59234
+2389 1926 59234
+2390 1926 59234
+2392 1926 33919
+2393 1926 62765
+2394 1926 3058
+2395 1926 40480
+2396 1926 13551
+2397 1926 4092
+2398 1926 6248
+2399 1926 6248
+2400 1926 6248
+2401 1926 6248
+2403 1926 16917
+2404 1926 56035
+2405 1926 37372
+2406 1926 18647
+2407 1926 3228
+2408 1926 50709
+2409 1926 7235
+2410 1926 7235
+2411 1926 7235
+2412 1926 7235
+2413 1926 7235
+2415 1926 56668
+2416 1926 53082
+2417 1926 35607
+2418 1926 25033
+2419 1926 59401
+2420 1926 34199
+2487 1926 3782
+2488 1926 3782
+2489 1926 3782
+2490 1926 3782
+2491 1926 3782
+2492 1926 3782
+2493 1926 19507
+2494 1926 42532
+2495 1926 21362
+2496 1926 19500
+2497 1926 21602
+2498 1926 52134
+2510 1926 27671
+4437 1926 27852657
+1856 1927 1
+2217 1927 60764
+2266 1927 29970
+2274 1927 6498
+2275 1927 55492
+2276 1927 25522
+2321 1927 25997
+2331 1927 10864
+2337 1927 33539
+2338 1927 40509
+2339 1927 34011
+2340 1927 10676
+2341 1927 20737
+2342 1927 35395
+2387 1927 17112
+2397 1927 38543
+2408 1927 52050
+2416 1927 8083
+2417 1927 33374
+2418 1927 37826
+2419 1927 45545
+2420 1927 28890
+2446 1927 28366
+2453 1927 17926
+2454 1927 48106
+2455 1927 28633
+2456 1927 28633
+2457 1927 32421
+2458 1927 59272
+2460 1927 57720
+2461 1927 11259
+2462 1927 43572
+2463 1927 20604
+2464 1927 26860
+2465 1927 14028
+2466 1927 41716
+2467 1927 45273
+2468 1927 45273
+2470 1927 40997
+2471 1927 32613
+2472 1927 31004
+2473 1927 45282
+2474 1927 21315
+2475 1927 60681
+2476 1927 21002
+2477 1927 32572
+2478 1927 32572
+2479 1927 32572
+2481 1927 47173
+2482 1927 49778
+2483 1927 12048
+2484 1927 50569
+2485 1927 58078
+2486 1927 22165
+2487 1927 57804
+2488 1927 29113
+2489 1927 29113
+2490 1927 29113
+2491 1927 15181
+2493 1927 56527
+2494 1927 7445
+2495 1927 5348
+2496 1927 36029
+2497 1927 40165
+2498 1927 24289
+2499 1927 2278
+2500 1927 65300
+2501 1927 65300
+2502 1927 65300
+2503 1927 47189
+2504 1927 38209
+2505 1927 22966
+2506 1927 18197
+2507 1927 15171
+2508 1927 14075
+2509 1927 10958
+2510 1927 65058
+2511 1927 24318
+4438 1927 27852657
+1857 1928 1
+1905 1928 46340
+1913 1928 61091
+1914 1928 54752
+1915 1928 8412
+1960 1928 5354
+1970 1928 42267
+1976 1928 60089
+1977 1928 44762
+1978 1928 49192
+1979 1928 857
+1980 1928 4187
+1981 1928 35853
+2026 1928 51035
+2036 1928 41233
+2047 1928 61375
+2055 1928 46021
+2056 1928 42880
+2057 1928 40427
+2058 1928 16879
+2059 1928 56878
+2376 1928 4979
+2377 1928 3450
+2378 1928 3450
+2379 1928 63538
+2380 1928 63538
+2382 1928 2205
+2383 1928 2205
+2384 1928 4120
+2385 1928 11164
+2386 1928 16323
+2387 1928 52590
+2388 1928 43103
+2389 1928 43103
+2390 1928 43103
+2392 1928 61323
+2393 1928 32477
+2394 1928 45765
+2395 1928 56187
+2396 1928 5271
+2397 1928 38003
+2398 1928 63778
+2399 1928 63778
+2400 1928 63778
+2401 1928 63778
+2403 1928 39503
+2404 1928 60987
+2405 1928 8597
+2406 1928 61797
+2407 1928 19635
+2408 1928 53045
+2409 1928 9947
+2410 1928 9947
+2411 1928 9947
+2412 1928 9947
+2413 1928 9947
+2415 1928 2529
+2416 1928 9125
+2417 1928 31728
+2418 1928 56512
+2419 1928 52678
+2420 1928 32237
+2487 1928 17842
+2488 1928 17842
+2489 1928 17842
+2490 1928 17842
+2491 1928 17842
+2492 1928 17842
+2493 1928 16334
+2494 1928 22889
+2495 1928 29472
+2496 1928 51527
+2497 1928 30499
+2498 1928 54740
+2510 1928 31304
+4439 1928 27852657
+1858 1929 1
+1905 1929 47830
+1913 1929 11080
+1914 1929 9788
+1915 1929 27479
+1960 1929 58544
+1970 1929 57564
+1976 1929 49634
+1977 1929 43314
+1978 1929 32234
+1979 1929 42227
+1980 1929 7963
+1981 1929 43399
+2026 1929 45773
+2036 1929 43907
+2047 1929 32989
+2055 1929 58605
+2056 1929 30182
+2057 1929 32436
+2058 1929 45955
+2059 1929 56365
+2377 1929 48714
+2378 1929 48714
+2379 1929 26177
+2380 1929 26177
+2382 1929 10824
+2383 1929 10824
+2384 1929 10824
+2385 1929 30607
+2386 1929 39151
+2387 1929 38715
+2388 1929 8738
+2389 1929 8738
+2390 1929 8738
+2392 1929 26682
+2393 1929 26682
+2394 1929 18647
+2395 1929 57458
+2396 1929 34799
+2397 1929 38146
+2398 1929 18350
+2399 1929 18350
+2400 1929 18350
+2401 1929 18350
+2403 1929 47142
+2404 1929 3447
+2405 1929 24116
+2406 1929 12315
+2407 1929 31224
+2408 1929 31963
+2409 1929 38426
+2410 1929 38426
+2411 1929 38426
+2412 1929 38426
+2413 1929 38426
+2415 1929 36172
+2416 1929 25813
+2417 1929 21564
+2418 1929 40765
+2419 1929 48670
+2420 1929 16301
+2487 1929 22559
+2488 1929 22559
+2489 1929 22559
+2490 1929 22559
+2491 1929 22559
+2492 1929 22559
+2493 1929 17953
+2494 1929 44074
+2495 1929 31553
+2496 1929 13620
+2497 1929 20890
+2498 1929 58693
+2510 1929 64954
+4440 1929 27852657
+1859 1930 1
+1860 1930 1
+1905 1930 5702
+1913 1930 17712
+1914 1930 2035
+1915 1930 61855
+1960 1930 25296
+1970 1930 2378
+1976 1930 34916
+1977 1930 35595
+1978 1930 17883
+1979 1930 51623
+1980 1930 45360
+1981 1930 39316
+2026 1930 20329
+2036 1930 49610
+2047 1930 35032
+2055 1930 21856
+2056 1930 49432
+2057 1930 30691
+2058 1930 14567
+2059 1930 18851
+2377 1930 23144
+2378 1930 23144
+2379 1930 28682
+2380 1930 28682
+2382 1930 15712
+2383 1930 15712
+2384 1930 15712
+2385 1930 13069
+2386 1930 54211
+2387 1930 48689
+2388 1930 24865
+2389 1930 24865
+2390 1930 24865
+2392 1930 1222
+2393 1930 1222
+2394 1930 55400
+2395 1930 52603
+2396 1930 10509
+2397 1930 65082
+2398 1930 15100
+2399 1930 15100
+2400 1930 15100
+2401 1930 15100
+2403 1930 45748
+2404 1930 53567
+2405 1930 49726
+2406 1930 27502
+2407 1930 44417
+2408 1930 33768
+2409 1930 46974
+2410 1930 46974
+2411 1930 46974
+2412 1930 46974
+2413 1930 46974
+2415 1930 17920
+2416 1930 64635
+2417 1930 4588
+2418 1930 61153
+2419 1930 47272
+2420 1930 28120
+2487 1930 6959
+2488 1930 6959
+2489 1930 6959
+2490 1930 6959
+2491 1930 6959
+2492 1930 6959
+2493 1930 36533
+2494 1930 29800
+2495 1930 19139
+2496 1930 30290
+2497 1930 14595
+2498 1930 57469
+2510 1930 55691
+4441 1930 27852657
+1861 1931 1
+1863 1931 65520
+1866 1931 1
+1916 1931 48077
+1918 1931 17444
+1921 1931 48077
+1925 1931 17444
+1982 1931 10591
+1984 1931 54930
+1987 1931 10591
+1991 1931 54930
+1996 1931 10591
+2343 1931 51229
+2345 1931 14292
+2348 1931 51229
+2351 1931 64807
+2352 1931 13578
+2355 1931 11085
+2356 1931 19771
+2357 1931 6193
+2362 1931 64007
+2363 1931 57814
+2368 1931 3545
+2374 1931 47843
+2375 1931 32128
+2376 1931 20710
+2377 1931 19661
+2378 1931 19661
+2379 1931 57821
+2380 1931 25161
+2382 1931 7650
+2383 1931 35344
+2384 1931 35169
+2385 1931 27856
+2386 1931 46799
+2387 1931 27138
+2388 1931 5566
+2389 1931 32002
+2390 1931 27839
+2392 1931 22376
+2393 1931 36490
+2394 1931 56045
+2395 1931 36997
+2396 1931 27407
+2397 1931 269
+2398 1931 62464
+2399 1931 22988
+2400 1931 63548
+2401 1931 25746
+2403 1931 13036
+2404 1931 58172
+2405 1931 55763
+2406 1931 47301
+2407 1931 26481
+2408 1931 26212
+2409 1931 48011
+2410 1931 30178
+2411 1931 18619
+2412 1931 27055
+2413 1931 63294
+2415 1931 31639
+2416 1931 59347
+2417 1931 34193
+2418 1931 51270
+2419 1931 57945
+2420 1931 31733
+2487 1931 29622
+2488 1931 61407
+2489 1931 29721
+2490 1931 25862
+2491 1931 26894
+2492 1931 422
+2493 1931 5700
+2494 1931 22386
+2495 1931 13125
+2496 1931 29084
+2497 1931 42128
+2498 1931 13822
+2510 1931 55940
+4442 1931 27852657
+1862 1932 1
+1863 1932 1
+1866 1932 65520
+1872 1932 30031
+1875 1932 30030
+1877 1932 30031
+1881 1932 35491
+1917 1932 1
+1918 1932 1
+1921 1932 65520
+1923 1932 59824
+1924 1932 5697
+1925 1932 5698
+1933 1932 35490
+1936 1932 5460
+1953 1932 30031
+1962 1932 30031
+1963 1932 43689
+1972 1932 30031
+1973 1932 43689
+1974 1932 43689
+1983 1932 1
+1984 1932 1
+1987 1932 65520
+1989 1932 59824
+1990 1932 5697
+1991 1932 5698
+1993 1932 59824
+1995 1932 5698
+2007 1932 60060
+2014 1932 60060
+2022 1932 60060
+2029 1932 7296
+2031 1932 31398
+2038 1932 30031
+2039 1932 50968
+2040 1932 45054
+2050 1932 7279
+2051 1932 1365
+2052 1932 61425
+2344 1932 32761
+2345 1932 32761
+2347 1932 41663
+2348 1932 8902
+2350 1932 9971
+2351 1932 54482
+2352 1932 45580
+2354 1932 9971
+2355 1932 50565
+2356 1932 45580
+2359 1932 9971
+2360 1932 50565
+2361 1932 45580
+2368 1932 64837
+2369 1932 32755
+2375 1932 64837
+2376 1932 32755
+2380 1932 48796
+2383 1932 64837
+2384 1932 32755
+2388 1932 59890
+2389 1932 56133
+2390 1932 55221
+2392 1932 17238
+2393 1932 18595
+2398 1932 59890
+2399 1932 2385
+2400 1932 64947
+2401 1932 23548
+2403 1932 23890
+2409 1932 44023
+2410 1932 28493
+2411 1932 52152
+2412 1932 53007
+2413 1932 49598
+2487 1932 12286
+2488 1932 37872
+2489 1932 16972
+2490 1932 59173
+2491 1932 65122
+2492 1932 54541
+2493 1932 60060
+2494 1932 60060
+2495 1932 60060
+2496 1932 32846
+2497 1932 21336
+2498 1932 33878
+2510 1932 53044
+4443 1932 27852657
+1863 1933 1
+2096 1933 41849
+2113 1933 2444
+2114 1933 2444
+2119 1933 43336
+2123 1933 22185
+2128 1933 43336
+2161 1933 54572
+2179 1933 8184
+2197 1933 32135
+2224 1933 31954
+2227 1933 49202
+2242 1933 23757
+2279 1933 31047
+2282 1933 901
+2286 1933 64620
+2345 1933 27047
+2348 1933 34562
+2352 1933 30959
+2357 1933 34562
+2423 1933 31271
+2426 1933 30069
+2429 1933 12882
+2430 1933 48334
+2433 1933 17259
+2434 1933 1639
+2435 1933 18826
+2440 1933 24449
+2441 1933 15832
+2446 1933 21458
+2452 1933 47871
+2453 1933 60961
+2454 1933 24459
+2455 1933 34271
+2456 1933 34271
+2457 1933 33481
+2458 1933 33509
+2460 1933 63690
+2461 1933 18017
+2462 1933 1943
+2463 1933 56986
+2464 1933 46034
+2465 1933 11763
+2466 1933 10243
+2467 1933 11510
+2468 1933 60360
+2470 1933 4495
+2471 1933 49980
+2472 1933 31161
+2473 1933 45012
+2474 1933 38056
+2475 1933 26293
+2476 1933 27784
+2477 1933 26029
+2478 1933 11083
+2479 1933 40170
+2481 1933 2915
+2482 1933 48109
+2483 1933 9433
+2484 1933 59380
+2485 1933 20807
+2486 1933 60035
+2487 1933 29070
+2488 1933 54154
+2489 1933 20479
+2490 1933 52046
+2491 1933 50908
+2493 1933 11901
+2494 1933 29632
+2495 1933 56537
+2496 1933 29448
+2497 1933 4609
+2498 1933 10095
+2499 1933 1537
+2500 1933 7316
+2501 1933 9346
+2502 1933 1152
+2503 1933 3424
+2504 1933 34183
+2505 1933 60625
+2506 1933 7378
+2507 1933 36670
+2508 1933 49399
+2509 1933 8778
+2510 1933 9674
+2511 1933 15957
+4444 1933 27852657
+1864 1934 1
+1865 1934 1
+1866 1934 1
+1919 1934 1
+1920 1934 1
+1921 1934 1
+1922 1934 1
+1923 1934 1
+1924 1934 2
+1925 1934 1
+1985 1934 1
+1986 1934 1
+1987 1934 1
+1988 1934 1
+1989 1934 1
+1990 1934 2
+1991 1934 1
+1992 1934 1
+1993 1934 1
+1994 1934 2
+1995 1934 2
+1996 1934 1
+2346 1934 32761
+2347 1934 32761
+2348 1934 32761
+2349 1934 32761
+2350 1934 32761
+2351 1934 1
+2352 1934 32761
+2353 1934 32761
+2354 1934 32761
+2355 1934 1
+2356 1934 1
+2357 1934 32761
+2358 1934 32761
+2359 1934 32761
+2360 1934 1
+2361 1934 1
+2362 1934 1
+2363 1934 32761
+2487 1934 24572
+2488 1934 24572
+2489 1934 49144
+2490 1934 49143
+2491 1934 49142
+2492 1934 49141
+2510 1934 8190
+4445 1934 27852657
+1865 1935 1
+1866 1935 1
+1920 1935 1
+1921 1935 1
+1924 1935 1
+1986 1935 1
+1987 1935 1
+1990 1935 1
+1994 1935 1
+2226 1935 49140
+2227 1935 49140
+2281 1935 49140
+2282 1935 49140
+2284 1935 65519
+2285 1935 49140
+2347 1935 32761
+2348 1935 32761
+2351 1935 32761
+2355 1935 32761
+2425 1935 16380
+2426 1935 16380
+2429 1935 16380
+2433 1935 16380
+2438 1935 16380
+2488 1935 1
+2489 1935 8192
+2500 1935 49140
+2501 1935 56307
+4446 1935 27852657
+1866 1936 1
+1921 1936 1
+1987 1936 1
+2227 1936 24572
+2282 1936 24572
+2286 1936 40955
+2348 1936 61427
+2352 1936 28666
+2355 1936 33481
+2356 1936 25476
+2357 1936 62331
+2390 1936 29498
+2392 1936 21657
+2395 1936 34245
+2396 1936 34245
+2397 1936 34245
+2398 1936 33704
+2399 1936 33704
+2400 1936 63202
+2401 1936 61248
+2404 1936 62116
+2405 1936 20895
+2406 1936 20895
+2407 1936 55140
+2408 1936 20895
+2409 1936 33704
+2410 1936 33704
+2411 1936 63202
+2412 1936 61248
+2413 1936 61248
+2415 1936 62116
+2416 1936 20895
+2417 1936 20895
+2418 1936 55140
+2419 1936 41790
+2420 1936 20895
+2422 1936 37614
+2423 1936 37614
+2424 1936 8597
+2425 1936 24513
+2426 1936 25802
+2427 1936 61573
+2428 1936 21214
+2429 1936 58683
+2430 1936 32881
+2431 1936 61573
+2432 1936 21214
+2433 1936 8750
+2434 1936 30386
+2435 1936 63026
+2436 1936 61573
+2437 1936 21214
+2438 1936 27692
+2439 1936 47992
+2440 1936 23344
+2441 1936 25839
+2444 1936 58707
+2445 1936 46105
+2446 1936 53854
+2447 1936 2001
+2451 1936 27726
+2452 1936 15124
+2453 1936 22873
+2454 1936 44290
+2455 1936 10728
+2456 1936 10728
+2457 1936 36602
+2458 1936 62002
+2460 1936 16841
+2461 1936 24590
+2462 1936 33405
+2463 1936 9392
+2464 1936 27073
+2465 1936 16345
+2466 1936 44829
+2467 1936 4708
+2468 1936 64539
+2470 1936 61189
+2471 1936 63190
+2472 1936 28334
+2473 1936 29055
+2474 1936 63134
+2475 1936 46789
+2476 1936 65025
+2477 1936 24904
+2478 1936 19214
+2479 1936 36211
+2481 1936 40177
+2482 1936 7904
+2483 1936 22571
+2484 1936 30598
+2485 1936 28857
+2486 1936 47589
+2487 1936 33484
+2488 1936 19220
+2489 1936 8813
+2490 1936 65311
+2491 1936 13009
+2493 1936 30991
+2494 1936 49254
+2495 1936 64481
+2496 1936 13317
+2497 1936 54239
+2498 1936 6650
+2499 1936 56064
+2500 1936 40008
+2501 1936 41929
+2502 1936 54610
+2503 1936 62851
+2504 1936 10287
+2505 1936 38161
+2506 1936 36492
+2507 1936 64607
+2508 1936 48892
+2509 1936 14312
+2510 1936 31436
+2511 1936 4197
+4447 1936 27852657
+1867 1937 1
+1873 1937 41339
+1874 1937 15556
+1875 1937 15556
+1908 1937 43989
+1910 1937 55300
+1913 1937 52563
+1914 1937 52563
+1915 1937 52563
+1961 1937 54924
+1962 1937 54924
+1963 1937 33392
+1964 1937 50994
+1967 1937 20431
+1968 1937 11150
+1969 1937 11150
+1970 1937 63713
+1980 1937 11150
+2027 1937 54924
+2028 1937 54924
+2029 1937 33392
+2030 1937 50994
+2031 1937 50994
+2033 1937 20431
+2034 1937 11150
+2035 1937 11150
+2036 1937 63713
+2046 1937 22300
+2057 1937 11150
+2223 1937 11501
+2224 1937 11501
+2225 1937 420
+2226 1937 25048
+2227 1937 13547
+2228 1937 39309
+2229 1937 23505
+2230 1937 8789
+2231 1937 60763
+2232 1937 50229
+2233 1937 12052
+2234 1937 5700
+2235 1937 16824
+2236 1937 21582
+2237 1937 50229
+2238 1937 12052
+2239 1937 57952
+2240 1937 37241
+2241 1937 50068
+2242 1937 28486
+2245 1937 48025
+2246 1937 43072
+2247 1937 40622
+2248 1937 3984
+2252 1937 47344
+2253 1937 42391
+2254 1937 39941
+2255 1937 853
+2256 1937 52008
+2257 1937 52008
+2258 1937 8729
+2259 1937 31511
+2261 1937 30780
+2262 1937 28330
+2263 1937 49810
+2264 1937 20173
+2265 1937 53706
+2266 1937 1698
+2267 1937 34834
+2268 1937 57616
+2269 1937 34757
+2271 1937 26051
+2272 1937 30035
+2273 1937 6904
+2274 1937 9813
+2275 1937 64796
+2276 1937 63098
+2322 1937 36439
+2323 1937 59221
+2324 1937 36362
+2325 1937 22802
+2327 1937 44236
+2328 1937 63969
+2329 1937 23819
+2330 1937 14948
+2331 1937 4016
+2341 1937 6439
+2388 1937 55813
+2389 1937 44144
+2390 1937 26974
+2391 1937 5002
+2392 1937 16796
+2394 1937 15534
+2395 1937 22426
+2396 1937 27792
+2397 1937 51367
+2407 1937 55534
+2418 1937 49095
+2466 1937 867
+2467 1937 34255
+2468 1937 28912
+2469 1937 48973
+2470 1937 28818
+2471 1937 33494
+2472 1937 50733
+2473 1937 41909
+2474 1937 31481
+2475 1937 48228
+2485 1937 55018
+2496 1937 104
+2508 1937 45063
+4448 1937 27852657
+1868 1938 1
+1873 1938 18281
+1874 1938 24912
+1875 1938 24912
+1908 1938 29373
+1910 1938 37737
+1913 1938 2918
+1914 1938 2918
+1915 1938 2918
+1961 1938 39106
+1962 1938 39106
+1963 1938 2958
+1964 1938 18142
+1967 1938 27204
+1968 1938 28758
+1969 1938 28758
+1970 1938 31676
+1980 1938 28758
+2027 1938 39106
+2028 1938 39106
+2029 1938 2958
+2030 1938 18142
+2031 1938 18142
+2033 1938 27204
+2034 1938 28758
+2035 1938 28758
+2036 1938 31676
+2046 1938 57516
+2057 1938 28758
+2223 1938 31308
+2224 1938 31308
+2225 1938 1423
+2226 1938 17897
+2227 1938 52110
+2228 1938 35647
+2229 1938 27159
+2230 1938 54861
+2231 1938 2751
+2232 1938 35647
+2233 1938 49532
+2234 1938 17151
+2235 1938 41772
+2236 1938 39021
+2237 1938 35647
+2238 1938 49532
+2239 1938 52045
+2240 1938 15007
+2241 1938 34782
+2242 1938 61282
+2245 1938 59520
+2246 1938 46710
+2247 1938 37159
+2248 1938 63562
+2252 1938 13033
+2253 1938 223
+2254 1938 56193
+2255 1938 7524
+2256 1938 49026
+2257 1938 49026
+2258 1938 4638
+2259 1938 17339
+2261 1938 33611
+2262 1938 24060
+2263 1938 28102
+2264 1938 52888
+2265 1938 61315
+2266 1938 12289
+2267 1938 39413
+2268 1938 52114
+2269 1938 19428
+2271 1938 32532
+2272 1938 30573
+2273 1938 22261
+2274 1938 18117
+2275 1938 36620
+2276 1938 24331
+2322 1938 44199
+2323 1938 56900
+2324 1938 24214
+2325 1938 5292
+2327 1938 22258
+2328 1938 54443
+2329 1938 49023
+2330 1938 11793
+2331 1938 9077
+2341 1938 50267
+2388 1938 22928
+2389 1938 8317
+2390 1938 32815
+2391 1938 26156
+2392 1938 3999
+2394 1938 33707
+2395 1938 19069
+2396 1938 18700
+2397 1938 16334
+2407 1938 3776
+2418 1938 19030
+2466 1938 5332
+2467 1938 54271
+2468 1938 12836
+2469 1938 18852
+2470 1938 30569
+2471 1938 37942
+2472 1938 43387
+2473 1938 14176
+2474 1938 54235
+2475 1938 23058
+2485 1938 55144
+2496 1938 47153
+2508 1938 63966
+4449 1938 27852657
+1869 1939 1
+1870 1939 1
+1873 1939 57447
+1874 1939 5371
+1875 1939 5370
+1908 1939 9596
+1910 1939 64265
+1913 1939 48768
+1914 1939 48768
+1915 1939 48768
+1961 1939 18615
+1962 1939 18615
+1963 1939 28211
+1964 1939 31676
+1967 1939 23133
+1968 1939 4960
+1969 1939 4960
+1970 1939 53728
+1980 1939 4960
+2027 1939 18615
+2028 1939 18615
+2029 1939 28211
+2030 1939 31676
+2031 1939 31676
+2033 1939 23133
+2034 1939 4960
+2035 1939 4960
+2036 1939 53728
+2046 1939 9920
+2057 1939 4960
+2223 1939 30878
+2224 1939 30878
+2225 1939 64188
+2226 1939 19977
+2227 1939 54620
+2228 1939 13564
+2229 1939 3620
+2230 1939 45713
+2231 1939 56614
+2232 1939 13564
+2233 1939 3620
+2234 1939 7723
+2235 1939 9512
+2236 1939 18419
+2237 1939 13564
+2238 1939 3620
+2239 1939 37901
+2240 1939 46977
+2241 1939 7942
+2242 1939 55044
+2245 1939 14312
+2246 1939 49012
+2247 1939 1793
+2248 1939 30625
+2252 1939 28171
+2253 1939 62871
+2254 1939 15652
+2255 1939 62786
+2256 1939 64681
+2257 1939 64681
+2258 1939 40375
+2259 1939 48376
+2261 1939 52476
+2262 1939 5257
+2263 1939 21570
+2264 1939 6447
+2265 1939 20600
+2266 1939 21440
+2267 1939 11441
+2268 1939 19442
+2269 1939 5360
+2271 1939 54427
+2272 1939 19531
+2273 1939 36625
+2274 1939 63246
+2275 1939 30822
+2276 1939 9382
+2322 1939 34485
+2323 1939 42486
+2324 1939 28404
+2325 1939 65191
+2327 1939 64867
+2328 1939 44381
+2329 1939 27402
+2330 1939 38793
+2331 1939 54027
+2341 1939 44645
+2388 1939 32798
+2389 1939 42089
+2390 1939 33041
+2391 1939 26134
+2392 1939 15619
+2394 1939 505
+2395 1939 11974
+2396 1939 13127
+2397 1939 9511
+2407 1939 30639
+2418 1939 51515
+2466 1939 39149
+2467 1939 45662
+2468 1939 14070
+2469 1939 18649
+2470 1939 17438
+2471 1939 32997
+2472 1939 12696
+2473 1939 13413
+2474 1939 36863
+2475 1939 3061
+2485 1939 62788
+2496 1939 59003
+2508 1939 61319
+4450 1939 27852657
+1870 1940 1
+2490 1940 65520
+4451 1940 27852657
+1871 1941 1
+1872 1941 1
+1875 1941 1
+2232 1941 32761
+2233 1941 32761
+2236 1941 32761
+2237 1941 32761
+2238 1941 32761
+2241 1941 1
+2242 1941 32761
+2292 1941 32761
+2293 1941 32761
+2297 1941 32761
+2466 1941 24571
+2467 1941 24571
+2470 1941 49142
+2471 1941 49141
+2476 1941 24571
+2477 1941 24571
+2481 1941 49141
+2487 1941 24571
+2488 1941 24571
+2491 1941 1
+2499 1941 36856
+2500 1941 36856
+2503 1941 32761
+2504 1941 1
+2508 1941 8190
+2509 1941 8190
+2510 1941 8190
+2511 1941 13310
+4452 1941 27852657
+1872 1942 1
+1875 1942 1
+2223 1942 2
+2224 1942 2
+2226 1942 2
+2232 1942 49142
+2233 1942 32763
+2236 1942 32761
+2237 1942 49142
+2238 1942 32763
+2241 1942 1
+2242 1942 32761
+2278 1942 2
+2279 1942 2
+2281 1942 2
+2284 1942 2
+2292 1942 49142
+2293 1942 32763
+2297 1942 32761
+2344 1942 2
+2345 1942 2
+2347 1942 2
+2350 1942 2
+2353 1942 2
+2354 1942 4
+2355 1942 2
+2356 1942 2
+2357 1942 2
+2422 1942 1
+2423 1942 1
+2425 1942 1
+2428 1942 1
+2431 1942 43681
+2432 1942 43682
+2433 1942 43681
+2434 1942 43681
+2435 1942 43681
+2436 1942 43681
+2437 1942 43682
+2438 1942 43681
+2439 1942 43681
+2440 1942 21841
+2441 1942 43681
+2466 1942 16381
+2467 1942 24572
+2468 1942 43681
+2470 1942 49142
+2471 1942 49141
+2476 1942 16381
+2477 1942 24572
+2478 1942 43681
+2479 1942 43681
+2481 1942 49141
+2487 1942 16381
+2488 1942 24572
+2489 1942 43681
+2490 1942 43681
+2491 1942 2
+2499 1942 37200
+2500 1942 34133
+2501 1942 54603
+2502 1942 54603
+2503 1942 46415
+2504 1942 13653
+2508 1942 8190
+2509 1942 8190
+2510 1942 8190
+2511 1942 65182
+4453 1942 27852657
+1873 1943 1
+2234 1943 32761
+2239 1943 32761
+2294 1943 32761
+2295 1943 32761
+2468 1943 24571
+2478 1943 24571
+2479 1943 24571
+2489 1943 24571
+2490 1943 24571
+2491 1943 24571
+2501 1943 36856
+2502 1943 36856
+2503 1943 36856
+2504 1943 36856
+2511 1943 6655
+4454 1943 27852657
+1874 1944 1
+1875 1944 1
+2234 1944 21965
+2235 1944 24572
+2236 1944 24572
+2241 1944 26175
+2242 1944 1603
+2247 1944 38276
+2253 1944 36714
+2254 1944 58699
+2255 1944 1900
+2256 1944 5383
+2257 1944 5383
+2258 1944 55261
+2259 1944 30378
+2261 1944 33751
+2262 1944 35427
+2263 1944 39308
+2264 1944 17966
+2265 1944 40004
+2266 1944 34621
+2267 1944 1992
+2268 1944 25357
+2269 1944 1402
+2271 1944 30550
+2272 1944 6269
+2273 1944 13803
+2274 1944 17967
+2275 1944 24385
+2276 1944 55285
+2322 1944 30647
+2323 1944 29061
+2324 1944 34493
+2325 1944 34930
+2327 1944 22554
+2328 1944 25932
+2329 1944 23673
+2330 1944 49711
+2331 1944 5814
+2341 1944 16050
+2388 1944 55814
+2389 1944 33833
+2390 1944 34074
+2391 1944 63108
+2392 1944 46229
+2394 1944 56819
+2395 1944 34408
+2396 1944 64671
+2397 1944 34457
+2407 1944 39160
+2418 1944 23110
+2466 1944 38929
+2467 1944 55615
+2468 1944 14680
+2469 1944 55365
+2470 1944 21040
+2471 1944 26607
+2472 1944 16608
+2473 1944 64045
+2474 1944 26175
+2475 1944 30024
+2485 1944 62797
+2496 1944 51723
+2508 1944 44680
+4455 1944 27852657
+1875 1945 1
+2236 1945 54601
+2242 1945 10920
+2297 1945 10920
+2324 1945 60060
+2334 1945 60060
+2335 1945 60060
+2368 1945 43681
+2375 1945 43681
+2383 1945 43681
+2390 1945 43679
+2392 1945 10920
+2400 1945 38220
+2401 1945 38220
+2411 1945 43681
+2412 1945 43681
+2413 1945 21841
+2446 1945 30031
+2447 1945 2
+2453 1945 30031
+2454 1945 2
+2461 1945 30031
+2462 1945 2
+2468 1945 30031
+2470 1945 17745
+2471 1945 23207
+2478 1945 34126
+2479 1945 34126
+2481 1945 9556
+2489 1945 42316
+2490 1945 42316
+2491 1945 61426
+2501 1945 34808
+2502 1945 34808
+2503 1945 27983
+2504 1945 56649
+2505 1945 43681
+2506 1945 43681
+2507 1945 43681
+2508 1945 19793
+2509 1945 19451
+2510 1945 5460
+2511 1945 39076
+4456 1945 27852657
+1876 1946 1
+1936 1946 48416
+1994 1946 34704
+1995 1946 26436
+1996 1946 26436
+2014 1946 11049
+2022 1946 46316
+2028 1946 56895
+2029 1946 45039
+2031 1946 56663
+2034 1946 59350
+2035 1946 59350
+2036 1946 59350
+2037 1946 57938
+2038 1946 53275
+2039 1946 13474
+2040 1946 1296
+2043 1946 47455
+2044 1946 32963
+2045 1946 32963
+2046 1946 26792
+2047 1946 32963
+2048 1946 57938
+2049 1946 53275
+2050 1946 13474
+2051 1946 1296
+2052 1946 52792
+2054 1946 47455
+2055 1946 32963
+2056 1946 32963
+2057 1946 26792
+2058 1946 405
+2059 1946 32963
+2344 1946 56547
+2345 1946 56547
+2346 1946 18877
+2347 1946 11500
+2348 1946 20474
+2349 1946 10106
+2350 1946 43669
+2351 1946 34072
+2352 1946 13598
+2353 1946 10106
+2354 1946 43669
+2355 1946 7181
+2356 1946 63771
+2357 1946 50173
+2358 1946 12259
+2359 1946 19667
+2360 1946 11798
+2361 1946 57037
+2362 1946 44694
+2363 1946 60042
+2366 1946 11649
+2367 1946 48078
+2368 1946 16189
+2369 1946 60749
+2373 1946 46035
+2374 1946 16943
+2375 1946 50575
+2376 1946 10613
+2377 1946 36554
+2378 1946 36554
+2379 1946 49122
+2380 1946 13526
+2382 1946 2031
+2383 1946 4304
+2384 1946 26029
+2385 1946 58740
+2386 1946 47139
+2387 1946 10585
+2388 1946 57037
+2389 1946 23310
+2390 1946 65245
+2392 1946 33512
+2393 1946 28398
+2394 1946 5013
+2395 1946 57955
+2396 1946 41948
+2397 1946 31363
+2398 1946 63399
+2399 1946 21941
+2400 1946 35543
+2401 1946 30441
+2403 1946 7819
+2404 1946 27659
+2405 1946 11523
+2406 1946 514
+2407 1946 2567
+2408 1946 36725
+2409 1946 3632
+2410 1946 48456
+2411 1946 44006
+2412 1946 37432
+2413 1946 3566
+2415 1946 57557
+2416 1946 48513
+2417 1946 2597
+2418 1946 46605
+2419 1946 63813
+2420 1946 27088
+2487 1946 43124
+2488 1946 335
+2489 1946 44576
+2490 1946 20040
+2491 1946 14655
+2492 1946 44572
+2493 1946 55338
+2494 1946 6765
+2495 1946 56043
+2496 1946 49660
+2497 1946 9465
+2498 1946 29
+2510 1946 17287
+4457 1946 27852657
+1877 1947 1
+1936 1947 15228
+1994 1947 43314
+1995 1947 26838
+1996 1947 26838
+2014 1947 11497
+2022 1947 48360
+2028 1947 8626
+2029 1947 59094
+2031 1947 50549
+2034 1947 62994
+2035 1947 62994
+2036 1947 62994
+2037 1947 64547
+2038 1947 10956
+2039 1947 42790
+2040 1947 63466
+2043 1947 30653
+2044 1947 60712
+2045 1947 60712
+2046 1947 58185
+2047 1947 60712
+2048 1947 64547
+2049 1947 10956
+2050 1947 42790
+2051 1947 63466
+2052 1947 48392
+2054 1947 30653
+2055 1947 60712
+2056 1947 60712
+2057 1947 58185
+2058 1947 55903
+2059 1947 60712
+2344 1947 4809
+2345 1947 4809
+2346 1947 47592
+2347 1947 22589
+2348 1947 17780
+2349 1947 2566
+2350 1947 41247
+2351 1947 42056
+2352 1947 24276
+2353 1947 2566
+2354 1947 41247
+2355 1947 43083
+2356 1947 29878
+2357 1947 5602
+2358 1947 7191
+2359 1947 6506
+2360 1947 52676
+2361 1947 31701
+2362 1947 63088
+2363 1947 57486
+2366 1947 52094
+2367 1947 28531
+2368 1947 22682
+2369 1947 49550
+2373 1947 19079
+2374 1947 61037
+2375 1947 55188
+2376 1947 47892
+2377 1947 62581
+2378 1947 62581
+2379 1947 4358
+2380 1947 46061
+2382 1947 49531
+2383 1947 20587
+2384 1947 47239
+2385 1947 5433
+2386 1947 25489
+2387 1947 28429
+2388 1947 18569
+2389 1947 58403
+2390 1947 17365
+2392 1947 49737
+2393 1947 1863
+2394 1947 52963
+2395 1947 8673
+2396 1947 43540
+2397 1947 15111
+2398 1947 27217
+2399 1947 14263
+2400 1947 58512
+2401 1947 8280
+2403 1947 19972
+2404 1947 40318
+2405 1947 34966
+2406 1947 47978
+2407 1947 35018
+2408 1947 19907
+2409 1947 51625
+2410 1947 52637
+2411 1947 2536
+2412 1947 15772
+2413 1947 59822
+2415 1947 29063
+2416 1947 34241
+2417 1947 39258
+2418 1947 19928
+2419 1947 7425
+2420 1947 53039
+2487 1947 37342
+2488 1947 22988
+2489 1947 35680
+2490 1947 25695
+2491 1947 54973
+2492 1947 42837
+2493 1947 55891
+2494 1947 64693
+2495 1947 45746
+2496 1947 40038
+2497 1947 59355
+2498 1947 5783
+2510 1947 16280
+4458 1947 27852657
+1878 1948 1
+1922 1948 65520
+1923 1948 4601
+1924 1948 30678
+1925 1948 30678
+1933 1948 1
+1988 1948 65520
+1989 1948 4601
+1990 1948 30678
+1991 1948 30678
+1993 1948 4602
+1994 1948 55441
+1995 1948 30678
+2029 1948 53758
+2039 1948 53758
+2040 1948 15116
+2050 1948 53758
+2051 1948 15116
+2052 1948 15116
+2344 1948 5041
+2345 1948 5041
+2346 1948 49141
+2347 1948 40376
+2348 1948 35335
+2349 1948 20160
+2350 1948 53688
+2351 1948 43881
+2352 1948 8546
+2353 1948 9240
+2354 1948 42768
+2355 1948 47150
+2356 1948 45506
+2357 1948 36960
+2358 1948 9240
+2359 1948 42768
+2360 1948 50930
+2361 1948 27865
+2362 1948 61320
+2363 1948 24360
+2390 1948 63417
+2400 1948 63417
+2401 1948 20568
+2411 1948 24988
+2412 1948 36536
+2413 1948 14696
+2487 1948 27300
+2488 1948 51227
+2489 1948 50132
+2490 1948 57266
+2491 1948 26041
+2492 1948 15646
+2498 1948 63312
+2510 1948 43544
+4459 1948 27852657
+1879 1949 1
+1880 1949 58625
+1881 1949 58625
+1886 1949 55634
+1892 1949 64275
+1893 1949 15570
+1894 1949 29124
+1895 1949 51217
+1896 1949 51217
+1897 1949 13107
+1898 1949 36174
+1900 1949 40100
+1901 1949 57832
+1902 1949 10314
+1903 1949 30673
+1904 1949 12012
+1905 1949 26316
+1906 1949 13794
+1907 1949 45490
+1908 1949 45490
+1910 1949 10569
+1911 1949 16405
+1912 1949 54955
+1913 1949 4621
+1914 1949 22143
+1915 1949 61348
+1961 1949 48612
+1962 1949 60162
+1963 1949 60162
+1964 1949 46881
+1966 1949 45909
+1967 1949 5978
+1968 1949 62848
+1969 1949 7017
+1970 1949 39555
+1980 1949 43728
+2027 1949 60919
+2028 1949 64670
+2029 1949 64670
+2030 1949 26612
+2031 1949 3030
+2033 1949 52523
+2034 1949 33011
+2035 1949 34500
+2036 1949 20355
+2046 1949 28024
+2057 1949 49817
+2388 1949 31410
+2389 1949 7226
+2390 1949 7226
+2391 1949 46412
+2392 1949 45069
+2393 1949 22759
+2394 1949 58383
+2395 1949 17340
+2396 1949 10377
+2397 1949 35018
+2407 1949 30736
+2418 1949 13440
+2496 1949 58577
+4460 1949 27852657
+1880 1950 1
+1881 1950 1
+1936 1950 1
+1963 1950 32766
+1973 1950 32766
+1974 1950 32766
+2007 1950 65520
+2014 1950 65520
+2022 1950 65520
+2029 1950 10
+2031 1950 2
+2039 1950 32764
+2040 1950 32764
+2050 1950 65519
+2051 1950 65519
+2052 1950 65518
+2368 1950 40949
+2369 1950 65515
+2375 1950 40949
+2376 1950 65515
+2383 1950 40949
+2384 1950 65515
+2390 1950 16377
+2392 1950 8195
+2393 1950 57327
+2400 1950 57328
+2401 1950 57328
+2403 1950 8191
+2411 1950 8188
+2412 1950 8188
+2413 1950 16382
+2489 1950 53236
+2490 1950 53236
+2491 1950 40951
+2492 1950 53235
+2493 1950 65520
+2494 1950 65520
+2495 1950 65520
+2496 1950 12285
+2497 1950 14337
+2498 1950 32763
+2510 1950 19446
+4461 1950 27852657
+1881 1951 1
+2471 1951 65520
+4462 1951 27852657
+1882 1952 1
+2496 1952 65520
+4463 1952 27852657
+1883 1953 1
+1884 1953 1
+1885 1953 1
+1886 1953 1
+1887 1953 1
+1891 1953 1
+1892 1953 1
+1893 1953 1
+1894 1953 1
+1900 1953 1
+1901 1953 1
+1902 1953 1
+1910 1953 1
+1911 1953 1
+1966 1953 1
+2394 1953 32761
+2395 1953 32761
+2396 1953 32761
+2397 1953 32761
+2407 1953 32761
+2418 1953 32761
+2496 1953 24573
+4464 1953 27852657
+1884 1954 1
+1908 1954 1
+1939 1954 1
+1947 1954 65520
+1963 1954 2
+1973 1954 1
+2005 1954 1
+2013 1954 65520
+2014 1954 65520
+2029 1954 2
+2039 1954 2
+2050 1954 1
+2245 1954 49142
+2269 1954 49142
+2300 1954 49142
+2301 1954 49140
+2308 1954 65519
+2324 1954 32763
+2334 1954 49142
+2335 1954 49140
+2366 1954 32763
+2367 1954 49142
+2368 1954 49142
+2374 1954 16379
+2375 1954 16379
+2390 1954 49143
+2392 1954 16381
+2400 1954 49143
+2401 1954 16380
+2411 1954 1
+2412 1954 32761
+2413 1954 32761
+2444 1954 16381
+2445 1954 16381
+2446 1954 16381
+2447 1954 16381
+2468 1954 40951
+2470 1954 57331
+2471 1954 57331
+2478 1954 40951
+2479 1954 40951
+2481 1954 57331
+2490 1954 49141
+2491 1954 49141
+2493 1954 1
+2494 1954 57330
+2496 1954 1
+2497 1954 1
+2498 1954 1
+2501 1954 8190
+2502 1954 8190
+2503 1954 8190
+2504 1954 8190
+2505 1954 56309
+2506 1954 16379
+2508 1954 19453
+2509 1954 3072
+2510 1954 49143
+2511 1954 21500
+4465 1954 27852657
+1885 1955 1
+1892 1955 1
+1893 1955 13876
+1901 1955 46928
+1908 1955 31625
+1910 1955 33728
+1913 1955 31099
+1914 1955 31099
+1915 1955 31099
+1961 1955 56887
+1962 1955 56887
+1963 1955 22991
+1964 1955 47845
+1967 1955 60942
+1968 1955 800
+1969 1955 800
+1970 1955 31899
+1980 1955 800
+2027 1955 56887
+2028 1955 56887
+2029 1955 22991
+2030 1955 47845
+2031 1955 8918
+2033 1955 60942
+2034 1955 800
+2035 1955 800
+2036 1955 31899
+2046 1955 1600
+2057 1955 800
+2246 1955 31632
+2247 1955 46325
+2248 1955 18520
+2252 1955 55577
+2253 1955 21688
+2254 1955 36381
+2255 1955 32708
+2256 1955 59669
+2257 1955 59669
+2258 1955 23371
+2259 1955 23371
+2261 1955 4783
+2262 1955 36755
+2263 1955 34372
+2264 1955 48460
+2265 1955 8388
+2266 1955 14240
+2267 1955 50945
+2268 1955 50945
+2269 1955 61385
+2271 1955 27107
+2272 1955 30392
+2273 1955 20088
+2274 1955 52715
+2275 1955 47823
+2276 1955 33583
+2322 1955 25145
+2323 1955 25145
+2324 1955 35585
+2325 1955 19772
+2327 1955 54810
+2328 1955 58135
+2329 1955 18089
+2330 1955 58599
+2331 1955 27952
+2341 1955 59890
+2388 1955 11499
+2389 1955 11499
+2390 1955 8245
+2391 1955 34228
+2392 1955 32429
+2394 1955 11235
+2395 1955 49233
+2396 1955 16415
+2397 1955 10982
+2407 1955 17131
+2418 1955 22762
+2466 1955 34064
+2467 1955 34064
+2468 1955 53622
+2469 1955 3916
+2470 1955 6375
+2471 1955 24389
+2472 1955 39091
+2473 1955 6104
+2474 1955 33289
+2475 1955 13154
+2485 1955 59076
+2496 1955 7500
+2508 1955 4571
+4466 1955 27852657
+1886 1956 1
+2031 1956 1
+2208 1956 2
+2209 1956 2
+2210 1956 2
+2216 1956 2
+2217 1956 2
+2218 1956 2
+2247 1956 49142
+2248 1956 49142
+2254 1956 2
+2255 1956 2
+2262 1956 2
+2263 1956 2
+2310 1956 16381
+2392 1956 32759
+2464 1956 1
+2465 1956 1
+2470 1956 38220
+2471 1956 38220
+2472 1956 8191
+2473 1956 1
+2474 1956 1
+2481 1956 65520
+2482 1956 21841
+2483 1956 13651
+2484 1956 21841
+2485 1956 21841
+2486 1956 21841
+2493 1956 21841
+2494 1956 13651
+2495 1956 21841
+2496 1956 21842
+2497 1956 43682
+2498 1956 21841
+2505 1956 19111
+2506 1956 54945
+2507 1956 19113
+2508 1956 32079
+2509 1956 13650
+2510 1956 13650
+2511 1956 34125
+4467 1956 27852657
+1887 1957 1
+2031 1957 17472
+2034 1957 41439
+2035 1957 41439
+2036 1957 41439
+2037 1957 17998
+2038 1957 17998
+2039 1957 17998
+2040 1957 17998
+2043 1957 50846
+2044 1957 30270
+2045 1957 30270
+2046 1957 6188
+2047 1957 30270
+2048 1957 17998
+2049 1957 17998
+2050 1957 17998
+2051 1957 17998
+2052 1957 17998
+2054 1957 50846
+2055 1957 30270
+2056 1957 30270
+2057 1957 6188
+2058 1957 60540
+2059 1957 30270
+2369 1957 56197
+2373 1957 12146
+2374 1957 12146
+2375 1957 12146
+2376 1957 60256
+2377 1957 35444
+2378 1957 35444
+2379 1957 53713
+2380 1957 53713
+2382 1957 22699
+2383 1957 22699
+2384 1957 37067
+2385 1957 47619
+2386 1957 37753
+2387 1957 2309
+2388 1957 9583
+2389 1957 9583
+2390 1957 9583
+2392 1957 4580
+2393 1957 31075
+2394 1957 63592
+2395 1957 49854
+2396 1957 22351
+2397 1957 20042
+2398 1957 15977
+2399 1957 15977
+2400 1957 15977
+2401 1957 15977
+2403 1957 20658
+2404 1957 51983
+2405 1957 63537
+2406 1957 56480
+2407 1957 47930
+2408 1957 27888
+2409 1957 47476
+2410 1957 47476
+2411 1957 47476
+2412 1957 47476
+2413 1957 47476
+2415 1957 42475
+2416 1957 57959
+2417 1957 21498
+2418 1957 7475
+2419 1957 21898
+2420 1957 59531
+2487 1957 55749
+2488 1957 55749
+2489 1957 55749
+2490 1957 55749
+2491 1957 55749
+2492 1957 57303
+2493 1957 26529
+2494 1957 13041
+2495 1957 25785
+2496 1957 3172
+2497 1957 45806
+2498 1957 11260
+2510 1957 40362
+4468 1957 27852657
+1888 1958 1
+1896 1958 65520
+1905 1958 1
+1913 1958 25194
+1914 1958 49194
+1915 1958 49193
+1943 1958 7799
+1951 1958 57722
+1960 1958 7799
+1970 1958 44898
+1977 1958 270
+1978 1958 33706
+1979 1958 63656
+1980 1958 19475
+1981 1958 23770
+2009 1958 25243
+2017 1958 40278
+2026 1958 25243
+2036 1958 34381
+2047 1958 11888
+2056 1958 44516
+2057 1958 51766
+2058 1958 47867
+2059 1958 59749
+2370 1958 44736
+2377 1958 14447
+2378 1958 35232
+2379 1958 42720
+2380 1958 42720
+2382 1958 5103
+2383 1958 5103
+2384 1958 5103
+2385 1958 19757
+2386 1958 46798
+2387 1958 11566
+2388 1958 7059
+2389 1958 7059
+2390 1958 7059
+2392 1958 25712
+2393 1958 25712
+2394 1958 26472
+2395 1958 12379
+2396 1958 29683
+2397 1958 64629
+2398 1958 1072
+2399 1958 1072
+2400 1958 1072
+2401 1958 1072
+2403 1958 40315
+2404 1958 31177
+2405 1958 59146
+2406 1958 24606
+2407 1958 40750
+2408 1958 900
+2409 1958 47299
+2410 1958 47299
+2411 1958 47299
+2412 1958 47299
+2413 1958 47299
+2415 1958 857
+2416 1958 53867
+2417 1958 30710
+2418 1958 6488
+2419 1958 64549
+2420 1958 48406
+2487 1958 31354
+2488 1958 31354
+2489 1958 31354
+2490 1958 31354
+2491 1958 31354
+2492 1958 31354
+2493 1958 27680
+2494 1958 34326
+2495 1958 23519
+2496 1958 25789
+2497 1958 10321
+2498 1958 40165
+2510 1958 23344
+4469 1958 27852657
+1889 1959 1
+1897 1959 1
+1898 1959 1
+1906 1959 1
+1907 1959 1
+1908 1959 1
+1961 1959 1
+1962 1959 1
+1963 1959 1
+1964 1959 1
+2027 1959 1
+2028 1959 1
+2029 1959 1
+2030 1959 1
+2031 1959 1
+2388 1959 32761
+2389 1959 32761
+2390 1959 32761
+2391 1959 32761
+2392 1959 32761
+2393 1959 32761
+2496 1959 24573
+4470 1959 27852657
+1890 1960 1
+2496 1960 65520
+4471 1960 27852657
+1891 1961 1
+2377 1961 58226
+2378 1961 58226
+2379 1961 50318
+2380 1961 50318
+2382 1961 22624
+2383 1961 22624
+2384 1961 22624
+2385 1961 9520
+2386 1961 40147
+2387 1961 47442
+2388 1961 46532
+2389 1961 46532
+2390 1961 46532
+2392 1961 39237
+2393 1961 39237
+2394 1961 41565
+2395 1961 12173
+2396 1961 1511
+2397 1961 19590
+2398 1961 52158
+2399 1961 52158
+2400 1961 52158
+2401 1961 52158
+2403 1961 51084
+2404 1961 59962
+2405 1961 14545
+2406 1961 19350
+2407 1961 16768
+2408 1961 62699
+2409 1961 54420
+2410 1961 54420
+2411 1961 54420
+2412 1961 54420
+2413 1961 54420
+2415 1961 27048
+2416 1961 59216
+2417 1961 43674
+2418 1961 34128
+2419 1961 63812
+2420 1961 1113
+2487 1961 27587
+2488 1961 27587
+2489 1961 27587
+2490 1961 27587
+2491 1961 27587
+2492 1961 27587
+2493 1961 27102
+2494 1961 43546
+2495 1961 33156
+2496 1961 56060
+2497 1961 35356
+2498 1961 7864
+2510 1961 45047
+4472 1961 27852657
+1892 1962 1
+2247 1962 42888
+2253 1962 21816
+2254 1962 28482
+2255 1962 20744
+2256 1962 49534
+2257 1962 49534
+2258 1962 47089
+2259 1962 31442
+2261 1962 22436
+2262 1962 33747
+2263 1962 55239
+2264 1962 33134
+2265 1962 17973
+2266 1962 33960
+2267 1962 41341
+2268 1962 30447
+2269 1962 30447
+2271 1962 20889
+2272 1962 55630
+2273 1962 60156
+2274 1962 49055
+2275 1962 50622
+2276 1962 16662
+2322 1962 22043
+2323 1962 49734
+2324 1962 49734
+2325 1962 20584
+2327 1962 1485
+2328 1962 45974
+2329 1962 44482
+2330 1962 30893
+2331 1962 56328
+2341 1962 39666
+2388 1962 59251
+2389 1962 30117
+2390 1962 30117
+2391 1962 36479
+2392 1962 36420
+2394 1962 57439
+2395 1962 21613
+2396 1962 2900
+2397 1962 43950
+2407 1962 46830
+2418 1962 7164
+2466 1962 46571
+2467 1962 12779
+2468 1962 12779
+2469 1962 20057
+2470 1962 17285
+2471 1962 53216
+2472 1962 6399
+2473 1962 61358
+2474 1962 58667
+2475 1962 38655
+2485 1962 12348
+2496 1962 17135
+2508 1962 9411
+4473 1962 27852657
+1893 1963 1
+2208 1963 65519
+2209 1963 65519
+2210 1963 65519
+2216 1963 65519
+2217 1963 65519
+2218 1963 65519
+2254 1963 49140
+2255 1963 49140
+2262 1963 65519
+2263 1963 65519
+2310 1963 49140
+2318 1963 65519
+2464 1963 65520
+2465 1963 65520
+2473 1963 8190
+2474 1963 65520
+2483 1963 8190
+2484 1963 65520
+2494 1963 8190
+2495 1963 65520
+2506 1963 29687
+2507 1963 16377
+4474 1963 27852657
+1894 1964 1
+2031 1964 44666
+2034 1964 6705
+2035 1964 6705
+2036 1964 6705
+2037 1964 25916
+2038 1964 25916
+2039 1964 25916
+2040 1964 25916
+2043 1964 15602
+2044 1964 40274
+2045 1964 40274
+2046 1964 46979
+2047 1964 40274
+2048 1964 25916
+2049 1964 25916
+2050 1964 25916
+2051 1964 25916
+2052 1964 25916
+2054 1964 15602
+2055 1964 40274
+2056 1964 40274
+2057 1964 46979
+2058 1964 15027
+2059 1964 40274
+2369 1964 39202
+2373 1964 36446
+2374 1964 36446
+2375 1964 36446
+2376 1964 21206
+2377 1964 55236
+2378 1964 55236
+2379 1964 5670
+2380 1964 5670
+2382 1964 16549
+2383 1964 16549
+2384 1964 2100
+2385 1964 40547
+2386 1964 35024
+2387 1964 45309
+2388 1964 43840
+2389 1964 43840
+2390 1964 43840
+2392 1964 10059
+2393 1964 29789
+2394 1964 59414
+2395 1964 58321
+2396 1964 9245
+2397 1964 29457
+2398 1964 19795
+2399 1964 19795
+2400 1964 19795
+2401 1964 19795
+2403 1964 51547
+2404 1964 21984
+2405 1964 64299
+2406 1964 47740
+2407 1964 37791
+2408 1964 8334
+2409 1964 13559
+2410 1964 13559
+2411 1964 13559
+2412 1964 13559
+2413 1964 13559
+2415 1964 2866
+2416 1964 41438
+2417 1964 43393
+2418 1964 14569
+2419 1964 4322
+2420 1964 61509
+2487 1964 29862
+2488 1964 29862
+2489 1964 29862
+2490 1964 29862
+2491 1964 29862
+2492 1964 1488
+2493 1964 482
+2494 1964 16234
+2495 1964 26902
+2496 1964 26947
+2497 1964 61540
+2498 1964 28482
+2510 1964 1911
+4475 1964 27852657
+1895 1965 1
+1896 1965 1
+1903 1965 1
+1904 1965 2
+1905 1965 1
+1912 1965 1
+1913 1965 2
+1914 1965 2
+1915 1965 1
+1968 1965 1
+1969 1965 1
+1970 1965 1
+2044 1965 65520
+2045 1965 65520
+2046 1965 65519
+2047 1965 65520
+2055 1965 65520
+2056 1965 65520
+2057 1965 65519
+2058 1965 65519
+2059 1965 65520
+2256 1965 36857
+2257 1965 36857
+2264 1965 24573
+2265 1965 61430
+2266 1965 24573
+2273 1965 24573
+2274 1965 61430
+2275 1965 49146
+2276 1965 24573
+2329 1965 36857
+2330 1965 24573
+2331 1965 24573
+2338 1965 40954
+2339 1965 40954
+2340 1965 40954
+2341 1965 40954
+2342 1965 40954
+2385 1965 65517
+2392 1965 32187
+2394 1965 12281
+2395 1965 27772
+2396 1965 7687
+2397 1965 7687
+2398 1965 9788
+2399 1965 9788
+2400 1965 9788
+2401 1965 9788
+2404 1965 40498
+2405 1965 60917
+2406 1965 39576
+2407 1965 14131
+2408 1965 14639
+2409 1965 9788
+2410 1965 9788
+2411 1965 9788
+2412 1965 9788
+2413 1965 9788
+2415 1965 65065
+2416 1965 60912
+2417 1965 39571
+2418 1965 42792
+2419 1965 41555
+2420 1965 2349
+2451 1965 11931
+2452 1965 11931
+2453 1965 11931
+2454 1965 11931
+2455 1965 4485
+2456 1965 4485
+2457 1965 13215
+2458 1965 13215
+2460 1965 627
+2461 1965 627
+2462 1965 627
+2463 1965 44120
+2464 1965 41305
+2465 1965 36820
+2466 1965 57110
+2467 1965 57110
+2468 1965 57110
+2470 1965 7478
+2471 1965 7478
+2472 1965 15788
+2473 1965 5129
+2474 1965 23632
+2475 1965 52333
+2476 1965 26549
+2477 1965 26549
+2478 1965 26549
+2479 1965 26549
+2481 1965 45793
+2482 1965 25580
+2483 1965 21707
+2484 1965 59799
+2485 1965 56891
+2486 1965 4560
+2487 1965 1268
+2488 1965 1268
+2489 1965 1268
+2490 1965 1268
+2491 1965 1268
+2493 1965 13687
+2494 1965 53825
+2495 1965 42591
+2496 1965 26564
+2497 1965 35360
+2498 1965 57418
+2499 1965 4078
+2500 1965 4078
+2501 1965 4078
+2502 1965 4078
+2503 1965 4078
+2504 1965 4078
+2505 1965 44695
+2506 1965 42712
+2507 1965 60758
+2508 1965 28074
+2509 1965 52423
+2510 1965 50200
+2511 1965 23170
+4476 1965 27852657
+1896 1966 1
+1960 1966 61427
+1970 1966 4094
+1979 1966 9811
+1980 1966 12739
+1981 1966 8645
+2026 1966 61427
+2036 1966 4094
+2045 1966 19622
+2046 1966 25478
+2047 1966 25935
+2056 1966 9811
+2057 1966 12739
+2058 1966 25935
+2059 1966 8645
+2212 1966 34032
+2221 1966 31489
+2257 1966 52950
+2266 1966 31371
+2274 1966 58501
+2275 1966 49097
+2276 1966 49215
+2312 1966 38154
+2321 1966 18561
+2331 1966 14020
+2337 1966 3856
+2338 1966 56325
+2339 1966 63345
+2340 1966 16430
+2341 1966 21803
+2342 1966 56998
+2378 1966 44891
+2387 1966 17777
+2397 1966 23625
+2408 1966 12817
+2416 1966 5529
+2417 1966 14366
+2418 1966 5679
+2419 1966 38037
+2420 1966 16697
+2455 1966 46659
+2456 1966 61041
+2457 1966 51028
+2458 1966 51028
+2460 1966 1059
+2461 1966 1059
+2462 1966 1059
+2463 1966 46213
+2464 1966 8888
+2465 1966 5749
+2466 1966 49272
+2467 1966 49272
+2468 1966 49272
+2470 1966 63977
+2471 1966 63977
+2472 1966 59388
+2473 1966 32659
+2474 1966 51294
+2475 1966 32585
+2476 1966 20765
+2477 1966 20765
+2478 1966 20765
+2479 1966 20765
+2481 1966 10660
+2482 1966 3486
+2483 1966 6552
+2484 1966 14306
+2485 1966 30355
+2486 1966 58181
+2487 1966 7277
+2488 1966 7277
+2489 1966 7277
+2490 1966 7277
+2491 1966 7277
+2493 1966 46709
+2494 1966 51106
+2495 1966 21313
+2496 1966 53579
+2497 1966 49067
+2498 1966 46839
+2499 1966 34151
+2500 1966 34151
+2501 1966 34151
+2502 1966 34151
+2503 1966 34151
+2504 1966 34151
+2505 1966 15401
+2506 1966 64057
+2507 1966 5855
+2508 1966 57871
+2509 1966 56643
+2510 1966 38339
+2511 1966 42734
+4477 1966 27852657
+1897 1967 1
+1906 1967 1
+1971 1967 65520
+2014 1967 40739
+2022 1967 9784
+2028 1967 55591
+2029 1967 28826
+2031 1967 17245
+2034 1967 31843
+2035 1967 31843
+2036 1967 31843
+2037 1967 57609
+2038 1967 40625
+2039 1967 13860
+2040 1967 5374
+2043 1967 36785
+2044 1967 57879
+2045 1967 57879
+2046 1967 24201
+2047 1967 57879
+2048 1967 57610
+2049 1967 40625
+2050 1967 13860
+2051 1967 5374
+2052 1967 63694
+2054 1967 36785
+2055 1967 57879
+2056 1967 57879
+2057 1967 24201
+2058 1967 50237
+2059 1967 57879
+2368 1967 40206
+2369 1967 40597
+2373 1967 32490
+2374 1967 32490
+2375 1967 7175
+2376 1967 3626
+2377 1967 61286
+2378 1967 61286
+2379 1967 58535
+2380 1967 3007
+2382 1967 30081
+2383 1967 32014
+2384 1967 7663
+2385 1967 26668
+2386 1967 10787
+2387 1967 15022
+2388 1967 26313
+2389 1967 38139
+2390 1967 2836
+2392 1967 29880
+2393 1967 33286
+2394 1967 24317
+2395 1967 44034
+2396 1967 35945
+2397 1967 20923
+2398 1967 58486
+2399 1967 41647
+2400 1967 6344
+2401 1967 20949
+2403 1967 13015
+2404 1967 48464
+2405 1967 45444
+2406 1967 20661
+2407 1967 34160
+2408 1967 13237
+2409 1967 31974
+2410 1967 47856
+2411 1967 7133
+2412 1967 42484
+2413 1967 65138
+2415 1967 43142
+2416 1967 33892
+2417 1967 44243
+2418 1967 10207
+2419 1967 59956
+2420 1967 46719
+2487 1967 28140
+2488 1967 64613
+2489 1967 20029
+2490 1967 20029
+2491 1967 9789
+2492 1967 53917
+2493 1967 36576
+2494 1967 29205
+2495 1967 50185
+2496 1967 9792
+2497 1967 57545
+2498 1967 59897
+2510 1967 24642
+4478 1967 27852657
+1898 1968 1
+1907 1968 1
+1908 1968 1
+1962 1968 1
+1963 1968 1
+2028 1968 1
+2029 1968 1
+2031 1968 1
+2259 1968 49140
+2268 1968 49140
+2269 1968 49140
+2314 1968 65519
+2323 1968 49140
+2324 1968 49140
+2389 1968 32761
+2390 1968 32761
+2392 1968 32761
+2467 1968 16380
+2468 1968 16380
+2470 1968 16380
+2471 1968 16380
+2496 1968 8192
+2497 1968 1
+2498 1968 1
+2508 1968 56307
+2509 1968 49140
+2510 1968 32761
+2511 1968 16380
+4479 1968 27852657
+1899 1969 1
+2496 1969 65520
+4480 1969 27852657
+1900 1970 1
+1901 1970 1
+1910 1970 10083
+1967 1970 10080
+1968 1970 10080
+1969 1970 10080
+1970 1970 10080
+1980 1970 10080
+2033 1970 10080
+2034 1970 10080
+2035 1970 10080
+2036 1970 10080
+2046 1970 20160
+2057 1970 10080
+2261 1970 25201
+2262 1970 25201
+2263 1970 25201
+2271 1970 5041
+2272 1970 5041
+2327 1970 5041
+2328 1970 60480
+2329 1970 60480
+2330 1970 60480
+2331 1970 60480
+2341 1970 60480
+2394 1970 16380
+2395 1970 16380
+2396 1970 20160
+2397 1970 20160
+2407 1970 3779
+2418 1970 8820
+2474 1970 22681
+2475 1970 55442
+2485 1970 10081
+2496 1970 43157
+2508 1970 8821
+4481 1970 27852657
+1901 1971 1
+1910 1971 1
+2262 1971 49142
+2263 1971 49142
+2271 1971 49142
+2272 1971 49142
+2318 1971 2
+2327 1971 49142
+2474 1971 8191
+2475 1971 8191
+2484 1971 1
+2485 1971 8191
+2495 1971 1
+2496 1971 8191
+2507 1971 49142
+2508 1971 13310
+4482 1971 27852657
+1902 1972 1
+1911 1972 1
+1976 1972 65520
+2031 1972 53121
+2034 1972 1948
+2035 1972 1948
+2036 1972 1948
+2037 1972 236
+2038 1972 236
+2039 1972 236
+2040 1972 236
+2043 1972 46927
+2044 1972 44809
+2045 1972 44809
+2046 1972 46757
+2047 1972 44809
+2048 1972 236
+2049 1972 236
+2050 1972 236
+2051 1972 236
+2052 1972 236
+2054 1972 46927
+2055 1972 44809
+2056 1972 44809
+2057 1972 46757
+2058 1972 24097
+2059 1972 44809
+2369 1972 1044
+2373 1972 37196
+2374 1972 37196
+2375 1972 37196
+2376 1972 24950
+2377 1972 53156
+2378 1972 53156
+2379 1972 42839
+2380 1972 42839
+2382 1972 6393
+2383 1972 6393
+2384 1972 55400
+2385 1972 1314
+2386 1972 10869
+2387 1972 23234
+2388 1972 44299
+2389 1972 44299
+2390 1972 44299
+2392 1972 34458
+2393 1972 23319
+2394 1972 46092
+2395 1972 16966
+2396 1972 21948
+2397 1972 64235
+2398 1972 21579
+2399 1972 21579
+2400 1972 21579
+2401 1972 21579
+2403 1972 50349
+2404 1972 49
+2405 1972 24186
+2406 1972 34987
+2407 1972 57048
+2408 1972 58334
+2409 1972 26164
+2410 1972 26164
+2411 1972 26164
+2412 1972 26164
+2413 1972 26164
+2415 1972 32257
+2416 1972 57600
+2417 1972 21818
+2418 1972 17202
+2419 1972 1070
+2420 1972 8257
+2487 1972 46528
+2488 1972 46528
+2489 1972 46528
+2490 1972 46528
+2491 1972 46528
+2492 1972 46354
+2493 1972 32969
+2494 1972 60879
+2495 1972 56348
+2496 1972 53172
+2497 1972 3125
+2498 1972 7855
+2510 1972 666
+4483 1972 27852657
+1903 1973 1
+1912 1973 1
+2274 1973 60548
+2275 1973 34985
+2276 1973 34985
+2331 1973 32106
+2337 1973 39602
+2338 1973 64328
+2339 1973 54505
+2340 1973 10181
+2341 1973 31616
+2342 1973 34495
+2397 1973 27220
+2408 1973 12906
+2416 1973 58725
+2417 1973 12630
+2418 1973 3640
+2419 1973 77
+2420 1973 21666
+2455 1973 15932
+2456 1973 15932
+2457 1973 30456
+2458 1973 30456
+2460 1973 46792
+2461 1973 46792
+2462 1973 46792
+2463 1973 56354
+2464 1973 21491
+2465 1973 5559
+2466 1973 21560
+2467 1973 21560
+2468 1973 21560
+2470 1973 17896
+2471 1973 17896
+2472 1973 56500
+2473 1973 52276
+2474 1973 32209
+2475 1973 12429
+2476 1973 47586
+2477 1973 47586
+2478 1973 47586
+2479 1973 47586
+2481 1973 58778
+2482 1973 14762
+2483 1973 61146
+2484 1973 10380
+2485 1973 65215
+2486 1973 54503
+2487 1973 46567
+2488 1973 46567
+2489 1973 46567
+2490 1973 46567
+2491 1973 46567
+2493 1973 41596
+2494 1973 41956
+2495 1973 37882
+2496 1973 44311
+2497 1973 22433
+2498 1973 10324
+2499 1973 44954
+2500 1973 44954
+2501 1973 44954
+2502 1973 44954
+2503 1973 44954
+2504 1973 44954
+2505 1973 19367
+2506 1973 7294
+2507 1973 31695
+2508 1973 16089
+2509 1973 34215
+2510 1973 15733
+2511 1973 3773
+4484 1973 27852657
+1904 1974 1
+1905 1974 1
+1913 1974 60713
+1914 1974 21040
+1915 1974 21039
+1970 1974 63116
+1976 1974 63788
+1977 1974 7439
+1978 1974 12247
+1979 1974 25418
+1980 1974 5015
+1981 1974 28459
+2036 1974 19234
+2047 1974 59752
+2055 1974 51039
+2056 1974 65471
+2057 1974 19774
+2058 1974 28194
+2059 1974 62422
+2377 1974 28201
+2378 1974 28201
+2379 1974 7167
+2380 1974 7167
+2382 1974 30653
+2383 1974 30653
+2384 1974 30653
+2385 1974 14117
+2386 1974 38146
+2387 1974 9945
+2388 1974 52575
+2389 1974 52575
+2390 1974 52575
+2392 1974 35116
+2393 1974 35116
+2394 1974 368
+2395 1974 51764
+2396 1974 34875
+2397 1974 26132
+2398 1974 15419
+2399 1974 15419
+2400 1974 15419
+2401 1974 15419
+2403 1974 29000
+2404 1974 65087
+2405 1974 13491
+2406 1974 54846
+2407 1974 54247
+2408 1974 64762
+2409 1974 13314
+2410 1974 13314
+2411 1974 13314
+2412 1974 13314
+2413 1974 13314
+2415 1974 21285
+2416 1974 63636
+2417 1974 58367
+2418 1974 14573
+2419 1974 14689
+2420 1974 34570
+2487 1974 60907
+2488 1974 60907
+2489 1974 60907
+2490 1974 60907
+2491 1974 60907
+2492 1974 60907
+2493 1974 55240
+2494 1974 57879
+2495 1974 60898
+2496 1974 8104
+2497 1974 22686
+2498 1974 41094
+2510 1974 56139
+4485 1974 27852657
+1905 1975 1
+1915 1975 65520
+1960 1975 61427
+1970 1975 39584
+1979 1975 58440
+1980 1975 45500
+1981 1975 5915
+2026 1975 61427
+2036 1975 39584
+2045 1975 51359
+2046 1975 25479
+2047 1975 17745
+2056 1975 58440
+2057 1975 45500
+2058 1975 17745
+2059 1975 5915
+2266 1975 38845
+2274 1975 21000
+2275 1975 29780
+2276 1975 56456
+2321 1975 42821
+2331 1975 42483
+2337 1975 41650
+2338 1975 57537
+2339 1975 36537
+2340 1975 11629
+2341 1975 35592
+2342 1975 49565
+2387 1975 63246
+2397 1975 22808
+2408 1975 50557
+2416 1975 43238
+2417 1975 43209
+2418 1975 25463
+2419 1975 17594
+2420 1975 16602
+2455 1975 21965
+2456 1975 21965
+2457 1975 1981
+2458 1975 1981
+2460 1975 63314
+2461 1975 63314
+2462 1975 63314
+2463 1975 56197
+2464 1975 63411
+2465 1975 30209
+2466 1975 2108
+2467 1975 2108
+2468 1975 2108
+2470 1975 33508
+2471 1975 33508
+2472 1975 59070
+2473 1975 41384
+2474 1975 17462
+2475 1975 15566
+2476 1975 27117
+2477 1975 27117
+2478 1975 27117
+2479 1975 27117
+2481 1975 9526
+2482 1975 8738
+2483 1975 26157
+2484 1975 9649
+2485 1975 38245
+2486 1975 62484
+2487 1975 28391
+2488 1975 28391
+2489 1975 28391
+2490 1975 28391
+2491 1975 28391
+2493 1975 8051
+2494 1975 63432
+2495 1975 4024
+2496 1975 30864
+2497 1975 53860
+2498 1975 16280
+2499 1975 25328
+2500 1975 25328
+2501 1975 25328
+2502 1975 25328
+2503 1975 25328
+2504 1975 25328
+2505 1975 25033
+2506 1975 51889
+2507 1975 53618
+2508 1975 63393
+2509 1975 39043
+2510 1975 11375
+2511 1975 39789
+4486 1975 27852657
+1906 1976 1
+1907 1976 1
+1913 1976 25927
+1914 1976 57482
+1915 1976 57482
+1970 1976 29438
+1973 1976 1
+1976 1976 3114
+1977 1976 32276
+1978 1976 6349
+1979 1976 29610
+1980 1976 4171
+1981 1976 32215
+2036 1976 40607
+2047 1976 27567
+2055 1976 65303
+2056 1976 14582
+2057 1976 26763
+2058 1976 56553
+2059 1976 61201
+2368 1976 454
+2374 1976 36229
+2375 1976 54927
+2376 1976 1144
+2377 1976 7535
+2378 1976 7535
+2379 1976 50241
+2380 1976 6922
+2382 1976 6948
+2383 1976 17591
+2384 1976 30422
+2385 1976 41133
+2386 1976 56915
+2387 1976 49380
+2388 1976 21100
+2389 1976 37567
+2390 1976 23766
+2392 1976 679
+2393 1976 18093
+2394 1976 3321
+2395 1976 38189
+2396 1976 37780
+2397 1976 36922
+2398 1976 21459
+2399 1976 35013
+2400 1976 4625
+2401 1976 56392
+2403 1976 2172
+2404 1976 29917
+2405 1976 26508
+2406 1976 15056
+2407 1976 29597
+2408 1976 25826
+2409 1976 53600
+2410 1976 43400
+2411 1976 49493
+2412 1976 30510
+2413 1976 52286
+2415 1976 28251
+2416 1976 35502
+2417 1976 24166
+2418 1976 8119
+2419 1976 29945
+2420 1976 44026
+2487 1976 56948
+2488 1976 43408
+2489 1976 48175
+2490 1976 16217
+2491 1976 4879
+2492 1976 19167
+2493 1976 14942
+2494 1976 27367
+2495 1976 753
+2496 1976 42253
+2497 1976 48931
+2498 1976 12705
+2510 1976 51890
+4487 1976 27852657
+1907 1977 1
+2268 1977 47570
+2274 1977 41529
+2275 1977 38730
+2276 1977 38730
+2331 1977 25299
+2333 1977 17951
+2334 1977 63403
+2337 1977 58776
+2338 1977 35507
+2339 1977 59499
+2340 1977 54418
+2341 1977 63332
+2342 1977 11242
+2397 1977 39609
+2408 1977 39129
+2416 1977 26137
+2417 1977 26347
+2418 1977 60770
+2419 1977 62897
+2420 1977 35010
+2446 1977 33143
+2452 1977 57590
+2453 1977 24419
+2454 1977 46138
+2455 1977 20690
+2456 1977 20690
+2457 1977 25944
+2458 1977 42648
+2460 1977 47077
+2461 1977 986
+2462 1977 25278
+2463 1977 53075
+2464 1977 17507
+2465 1977 62338
+2466 1977 61139
+2467 1977 52890
+2468 1977 5202
+2470 1977 22236
+2471 1977 52209
+2472 1977 43784
+2473 1977 36829
+2474 1977 31635
+2475 1977 28994
+2476 1977 11646
+2477 1977 15632
+2478 1977 59744
+2479 1977 33871
+2481 1977 36857
+2482 1977 41248
+2483 1977 62524
+2484 1977 51967
+2485 1977 31300
+2486 1977 35346
+2487 1977 34675
+2488 1977 11150
+2489 1977 48268
+2490 1977 24368
+2491 1977 23953
+2493 1977 1994
+2494 1977 2541
+2495 1977 30660
+2496 1977 6360
+2497 1977 45832
+2498 1977 50798
+2499 1977 48583
+2500 1977 57253
+2501 1977 44430
+2502 1977 48281
+2503 1977 3659
+2504 1977 17863
+2505 1977 9587
+2506 1977 2202
+2507 1977 20489
+2508 1977 29689
+2509 1977 1506
+2510 1977 39189
+2511 1977 65251
+4488 1977 27852657
+1908 1978 1
+1973 1978 65520
+2050 1978 1
+2374 1978 6403
+2375 1978 15104
+2383 1978 19223
+2390 1978 3103
+2392 1978 61044
+2395 1978 42785
+2396 1978 42785
+2397 1978 42785
+2398 1978 21397
+2399 1978 21397
+2400 1978 17311
+2401 1978 4718
+2404 1978 57016
+2405 1978 60932
+2406 1978 60932
+2407 1978 38196
+2408 1978 60932
+2409 1978 44954
+2410 1978 44954
+2411 1978 60319
+2412 1978 64115
+2413 1978 63193
+2415 1978 57016
+2416 1978 60932
+2417 1978 60932
+2418 1978 38196
+2419 1978 56343
+2420 1978 60932
+2444 1978 51817
+2445 1978 14603
+2446 1978 45528
+2447 1978 31406
+2451 1978 58769
+2452 1978 2762
+2453 1978 33687
+2454 1978 19264
+2455 1978 51655
+2456 1978 51655
+2457 1978 35089
+2458 1978 35089
+2460 1978 30337
+2461 1978 631
+2462 1978 32213
+2463 1978 52607
+2464 1978 1304
+2465 1978 15170
+2466 1978 32282
+2467 1978 32282
+2468 1978 39463
+2470 1978 36692
+2471 1978 60134
+2472 1978 37311
+2473 1978 24269
+2474 1978 4673
+2475 1978 55024
+2476 1978 22279
+2477 1978 22279
+2478 1978 3003
+2479 1978 50731
+2481 1978 53813
+2482 1978 17528
+2483 1978 42100
+2484 1978 50905
+2485 1978 9091
+2486 1978 19588
+2487 1978 57898
+2488 1978 57898
+2489 1978 24968
+2490 1978 8167
+2491 1978 21322
+2493 1978 58613
+2494 1978 33406
+2495 1978 28576
+2496 1978 44219
+2497 1978 42721
+2498 1978 44637
+2499 1978 3944
+2500 1978 3944
+2501 1978 27400
+2502 1978 61535
+2503 1978 18915
+2504 1978 9182
+2505 1978 44131
+2506 1978 58241
+2507 1978 8383
+2508 1978 78
+2509 1978 7729
+2510 1978 19772
+2511 1978 47788
+4489 1978 27852657
+1909 1979 1
+2496 1979 65520
+4490 1979 27852657
+1910 1980 1
+2271 1980 54601
+2272 1980 54601
+2319 1980 50274
+2320 1980 50274
+2321 1980 50274
+2327 1980 54601
+2328 1980 50274
+2329 1980 50274
+2330 1980 35027
+2331 1980 50274
+2338 1980 50274
+2339 1980 50274
+2340 1980 35027
+2341 1980 35027
+2342 1980 50274
+2377 1980 64903
+2378 1980 64903
+2385 1980 49656
+2386 1980 49038
+2387 1980 49656
+2392 1980 40797
+2394 1980 49656
+2395 1980 20604
+2396 1980 5357
+2397 1980 21222
+2404 1980 45947
+2405 1980 16895
+2406 1980 51922
+2407 1980 23488
+2408 1980 2266
+2415 1980 61194
+2416 1980 32142
+2417 1980 16895
+2418 1980 53982
+2419 1980 50273
+2420 1980 32760
+2455 1980 38864
+2456 1980 38864
+2463 1980 65006
+2464 1980 38349
+2465 1980 65006
+2470 1980 39560
+2471 1980 39560
+2472 1980 65006
+2473 1980 7056
+2474 1980 47209
+2475 1980 29979
+2481 1980 39560
+2482 1980 28535
+2483 1980 36106
+2484 1980 34613
+2485 1980 65107
+2486 1980 35128
+2493 1980 7804
+2494 1980 54470
+2495 1980 52977
+2496 1980 24416
+2497 1980 56453
+2498 1980 21325
+2505 1980 40178
+2506 1980 17848
+2507 1980 37860
+2508 1980 23090
+2509 1980 43938
+2510 1980 25807
+2511 1980 24416
+4491 1980 27852657
+1911 1981 1
+1913 1981 47936
+1914 1981 54446
+1915 1981 54446
+1970 1981 6054
+1976 1981 44904
+1977 1981 21074
+1978 1981 38659
+1979 1981 42584
+1980 1981 7857
+1981 1981 56249
+2036 1981 4930
+2047 1981 12225
+2055 1981 65362
+2056 1981 30235
+2057 1981 60653
+2058 1981 42735
+2059 1981 21238
+2376 1981 52772
+2377 1981 23705
+2378 1981 23705
+2379 1981 6772
+2380 1981 6772
+2382 1981 38365
+2383 1981 38365
+2384 1981 36606
+2385 1981 55125
+2386 1981 6502
+2387 1981 48318
+2388 1981 38131
+2389 1981 38131
+2390 1981 38131
+2392 1981 18827
+2393 1981 30071
+2394 1981 54745
+2395 1981 15666
+2396 1981 21438
+2397 1981 44236
+2398 1981 47188
+2399 1981 47188
+2400 1981 47188
+2401 1981 47188
+2403 1981 65314
+2404 1981 61667
+2405 1981 12871
+2406 1981 64435
+2407 1981 48676
+2408 1981 21518
+2409 1981 50154
+2410 1981 50154
+2411 1981 50154
+2412 1981 50154
+2413 1981 50154
+2415 1981 32423
+2416 1981 47591
+2417 1981 24698
+2418 1981 42610
+2419 1981 51315
+2420 1981 29406
+2487 1981 3731
+2488 1981 3731
+2489 1981 3731
+2490 1981 3731
+2491 1981 3731
+2492 1981 3731
+2493 1981 14782
+2494 1981 6426
+2495 1981 10974
+2496 1981 589
+2497 1981 19958
+2498 1981 5374
+2510 1981 62906
+4492 1981 27852657
+1912 1982 1
+1913 1982 58152
+1914 1982 64391
+1915 1982 64391
+1970 1982 54740
+1976 1982 8155
+1977 1982 8153
+1978 1982 15523
+1979 1982 38979
+1980 1982 20117
+1981 1982 29768
+2036 1982 20423
+2047 1982 52414
+2055 1982 36345
+2056 1982 27598
+2057 1982 45774
+2058 1982 9159
+2059 1982 52034
+2377 1982 27596
+2378 1982 27596
+2379 1982 35507
+2380 1982 35507
+2382 1982 21677
+2383 1982 21677
+2384 1982 21677
+2385 1982 24308
+2386 1982 62056
+2387 1982 34460
+2388 1982 11522
+2389 1982 11522
+2390 1982 11522
+2392 1982 42610
+2393 1982 42610
+2394 1982 33274
+2395 1982 3633
+2396 1982 5697
+2397 1982 24600
+2398 1982 45087
+2399 1982 45087
+2400 1982 45087
+2401 1982 45087
+2403 1982 53022
+2404 1982 23519
+2405 1982 35417
+2406 1982 43143
+2407 1982 13605
+2408 1982 35154
+2409 1982 63986
+2410 1982 63986
+2411 1982 63986
+2412 1982 63986
+2413 1982 63986
+2415 1982 45584
+2416 1982 47510
+2417 1982 35134
+2418 1982 3149
+2419 1982 10107
+2420 1982 21548
+2487 1982 46063
+2488 1982 46063
+2489 1982 46063
+2490 1982 46063
+2491 1982 46063
+2492 1982 46063
+2493 1982 48863
+2494 1982 16395
+2495 1982 12958
+2496 1982 5566
+2497 1982 49339
+2498 1982 38488
+2510 1982 38622
+4493 1982 27852657
+1913 1983 1
+1970 1983 17746
+1979 1983 52981
+1980 1983 60062
+1981 1983 42316
+2036 1983 17746
+2045 1983 40441
+2046 1983 54603
+2047 1983 61427
+2056 1983 52981
+2057 1983 60062
+2058 1983 61427
+2059 1983 42316
+2274 1983 1235
+2275 1983 43318
+2276 1983 43318
+2331 1983 59650
+2337 1983 46846
+2338 1983 55023
+2339 1983 3063
+2340 1983 6304
+2341 1983 14987
+2342 1983 64176
+2397 1983 15096
+2408 1983 49381
+2416 1983 63507
+2417 1983 64924
+2418 1983 41254
+2419 1983 53577
+2420 1983 2851
+2455 1983 30283
+2456 1983 30283
+2457 1983 43249
+2458 1983 43249
+2460 1983 43433
+2461 1983 43433
+2462 1983 43433
+2463 1983 55442
+2464 1983 7348
+2465 1983 42586
+2466 1983 6332
+2467 1983 6332
+2468 1983 6332
+2470 1983 56388
+2471 1983 56388
+2472 1983 56966
+2473 1983 23985
+2474 1983 27466
+2475 1983 51071
+2476 1983 38312
+2477 1983 38312
+2478 1983 38312
+2479 1983 38312
+2481 1983 28298
+2482 1983 44497
+2483 1983 38574
+2484 1983 57930
+2485 1983 63389
+2486 1983 870
+2487 1983 62653
+2488 1983 62653
+2489 1983 62653
+2490 1983 62653
+2491 1983 62653
+2493 1983 31516
+2494 1983 5511
+2495 1983 62090
+2496 1983 51440
+2497 1983 34037
+2498 1983 28032
+2499 1983 13543
+2500 1983 13543
+2501 1983 13543
+2502 1983 13543
+2503 1983 13543
+2504 1983 13543
+2505 1983 27630
+2506 1983 579
+2507 1983 3616
+2508 1983 37497
+2509 1983 64138
+2510 1983 12491
+2511 1983 64099
+4494 1983 27852657
+1914 1984 1
+1915 1984 1
+1970 1984 47776
+1979 1984 12540
+1980 1984 5459
+1981 1984 23205
+2036 1984 47776
+2045 1984 25080
+2046 1984 10918
+2047 1984 4094
+2056 1984 12540
+2057 1984 5459
+2058 1984 4094
+2059 1984 23205
+2274 1984 18002
+2275 1984 36331
+2276 1984 36331
+2331 1984 15487
+2337 1984 3698
+2338 1984 25286
+2339 1984 7284
+2340 1984 30591
+2341 1984 39166
+2342 1984 60010
+2397 1984 18517
+2408 1984 17222
+2416 1984 61315
+2417 1984 52562
+2418 1984 14573
+2419 1984 53605
+2420 1984 30872
+2455 1984 2827
+2456 1984 2827
+2457 1984 36158
+2458 1984 36158
+2460 1984 59159
+2461 1984 59159
+2462 1984 59159
+2463 1984 10683
+2464 1984 55413
+2465 1984 52586
+2466 1984 4806
+2467 1984 4806
+2468 1984 4806
+2470 1984 8681
+2471 1984 8681
+2472 1984 23699
+2473 1984 58260
+2474 1984 7136
+2475 1984 20733
+2476 1984 41496
+2477 1984 41496
+2478 1984 41496
+2479 1984 41496
+2481 1984 2673
+2482 1984 24857
+2483 1984 53184
+2484 1984 34562
+2485 1984 62416
+2486 1984 22353
+2487 1984 33957
+2488 1984 33957
+2489 1984 33957
+2490 1984 33957
+2491 1984 33957
+2493 1984 46385
+2494 1984 53405
+2495 1984 19851
+2496 1984 54141
+2497 1984 62164
+2498 1984 28809
+2499 1984 15722
+2500 1984 15722
+2501 1984 15722
+2502 1984 15722
+2503 1984 15722
+2504 1984 15722
+2505 1984 32392
+2506 1984 50433
+2507 1984 18474
+2508 1984 63072
+2509 1984 29241
+2510 1984 53511
+2511 1984 8353
+4495 1984 27852657
+1916 1985 1
+1982 1985 1
+2096 1985 20621
+2113 1985 14600
+2114 1985 14600
+2119 1985 33513
+2123 1985 32008
+2128 1985 33513
+2161 1985 10583
+2179 1985 20376
+2197 1985 24290
+2222 1985 41209
+2224 1985 44688
+2227 1985 19924
+2242 1985 30880
+2277 1985 889
+2279 1985 41316
+2282 1985 23296
+2286 1985 42225
+2343 1985 51445
+2345 1985 3446
+2348 1985 35701
+2352 1985 29820
+2357 1985 35701
+2421 1985 14016
+2423 1985 55750
+2426 1985 431
+2429 1985 35721
+2430 1985 35290
+2433 1985 8455
+2434 1985 64970
+2435 1985 29680
+2440 1985 6053
+2441 1985 1035
+2446 1985 34799
+2452 1985 28291
+2453 1985 10921
+2454 1985 22151
+2455 1985 2543
+2456 1985 2543
+2457 1985 21912
+2458 1985 15197
+2460 1985 31314
+2461 1985 35914
+2462 1985 56980
+2463 1985 43121
+2464 1985 52161
+2465 1985 49618
+2466 1985 4479
+2467 1985 16480
+2468 1985 7746
+2470 1985 25552
+2471 1985 50213
+2472 1985 50449
+2473 1985 32057
+2474 1985 9577
+2475 1985 25480
+2476 1985 41263
+2477 1985 57617
+2478 1985 25173
+2479 1985 28826
+2481 1985 42149
+2482 1985 54970
+2483 1985 22500
+2484 1985 9083
+2485 1985 26572
+2486 1985 1092
+2487 1985 35096
+2488 1985 18312
+2489 1985 41686
+2490 1985 41060
+2491 1985 36565
+2493 1985 62714
+2494 1985 2226
+2495 1985 62312
+2496 1985 65445
+2497 1985 51973
+2498 1985 50881
+2499 1985 35362
+2500 1985 36912
+2501 1985 59201
+2502 1985 51507
+2503 1985 35310
+2504 1985 51197
+2505 1985 58383
+2506 1985 4741
+2507 1985 20471
+2508 1985 3349
+2509 1985 15151
+2510 1985 6681
+2511 1985 51177
+4496 1985 27852657
+1917 1986 1
+1918 1986 1
+1921 1986 65520
+1925 1986 1
+1936 1986 5880
+1994 1986 36153
+1995 1986 47785
+1996 1986 47785
+2014 1986 18753
+2022 1986 48705
+2029 1986 42315
+2031 1986 25135
+2034 1986 32740
+2035 1986 32740
+2036 1986 32740
+2037 1986 43791
+2038 1986 32053
+2039 1986 17691
+2040 1986 46815
+2043 1986 24844
+2044 1986 31085
+2045 1986 31085
+2046 1986 63825
+2047 1986 31085
+2048 1986 43791
+2049 1986 32053
+2050 1986 17691
+2051 1986 46815
+2052 1986 18261
+2054 1986 24844
+2055 1986 31085
+2056 1986 31085
+2057 1986 63825
+2058 1986 62170
+2059 1986 31085
+2344 1986 25420
+2345 1986 25420
+2346 1986 41777
+2347 1986 64051
+2348 1986 38631
+2349 1986 44231
+2350 1986 21696
+2351 1986 32370
+2352 1986 59260
+2353 1986 44231
+2354 1986 21696
+2355 1986 7834
+2356 1986 24480
+2357 1986 30741
+2358 1986 44231
+2359 1986 21696
+2360 1986 41283
+2361 1986 30983
+2362 1986 50132
+2363 1986 19391
+2366 1986 34609
+2367 1986 56057
+2368 1986 19240
+2369 1986 2282
+2373 1986 41713
+2374 1986 63161
+2375 1986 26344
+2376 1986 31568
+2377 1986 56179
+2378 1986 56179
+2379 1986 22919
+2380 1986 13245
+2382 1986 37594
+2383 1986 27288
+2384 1986 23174
+2385 1986 54123
+2386 1986 32397
+2387 1986 41739
+2388 1986 28165
+2389 1986 18491
+2390 1986 5019
+2392 1986 5652
+2393 1986 37407
+2394 1986 64665
+2395 1986 9558
+2396 1986 903
+2397 1986 24685
+2398 1986 63720
+2399 1986 16449
+2400 1986 49143
+2401 1986 60711
+2403 1986 40217
+2404 1986 17166
+2405 1986 26040
+2406 1986 52832
+2407 1986 53696
+2408 1986 29011
+2409 1986 404
+2410 1986 13771
+2411 1986 48375
+2412 1986 47758
+2413 1986 46406
+2415 1986 6755
+2416 1986 46900
+2417 1986 20975
+2418 1986 40668
+2419 1986 38144
+2420 1986 9133
+2487 1986 62527
+2488 1986 50574
+2489 1986 31569
+2490 1986 295
+2491 1986 57469
+2492 1986 42593
+2493 1986 7177
+2494 1986 63293
+2495 1986 10596
+2496 1986 18548
+2497 1986 33875
+2498 1986 9756
+2510 1986 17937
+4497 1986 27852657
+1918 1987 1
+1984 1987 1
+2096 1987 20621
+2113 1987 14600
+2114 1987 14600
+2119 1987 40072
+2123 1987 25449
+2128 1987 40072
+2161 1987 28635
+2179 1987 20376
+2197 1987 13454
+2224 1987 20376
+2227 1987 55157
+2242 1987 54836
+2279 1987 42205
+2282 1987 17015
+2286 1987 48506
+2345 1987 54891
+2348 1987 913
+2352 1987 64608
+2357 1987 913
+2423 1987 4245
+2426 1987 27756
+2429 1987 29619
+2430 1987 1863
+2433 1987 38893
+2434 1987 43400
+2435 1987 41537
+2440 1987 36802
+2441 1987 61560
+2446 1987 51496
+2452 1987 64477
+2453 1987 23113
+2454 1987 33405
+2455 1987 42592
+2456 1987 42592
+2457 1987 59613
+2458 1987 9141
+2460 1987 1510
+2461 1987 4436
+2462 1987 43196
+2463 1987 63660
+2464 1987 21930
+2465 1987 44859
+2466 1987 19616
+2467 1987 52362
+2468 1987 10440
+2470 1987 16122
+2471 1987 12271
+2472 1987 5740
+2473 1987 36958
+2474 1987 11432
+2475 1987 32094
+2476 1987 32992
+2477 1987 17143
+2478 1987 16166
+2479 1987 45388
+2481 1987 27904
+2482 1987 33131
+2483 1987 23648
+2484 1987 17322
+2485 1987 47448
+2486 1987 15354
+2487 1987 37468
+2488 1987 37277
+2489 1987 37035
+2490 1987 12532
+2491 1987 40117
+2493 1987 49471
+2494 1987 27373
+2495 1987 20769
+2496 1987 60081
+2497 1987 45651
+2498 1987 30297
+2499 1987 25664
+2500 1987 3443
+2501 1987 29702
+2502 1987 6979
+2503 1987 20637
+2504 1987 23207
+2505 1987 61466
+2506 1987 39349
+2507 1987 4057
+2508 1987 52640
+2509 1987 51594
+2510 1987 63862
+2511 1987 25262
+4498 1987 27852657
+1919 1988 1
+1985 1988 1
+2297 1988 40231
+2355 1988 32085
+2356 1988 26924
+2357 1988 26924
+2375 1988 773
+2383 1988 15812
+2390 1988 7406
+2392 1988 24075
+2395 1988 15973
+2396 1988 15973
+2397 1988 15973
+2398 1988 463
+2399 1988 31543
+2400 1988 39555
+2401 1988 12064
+2404 1988 18444
+2405 1988 49208
+2406 1988 49208
+2407 1988 65181
+2408 1988 49208
+2409 1988 463
+2410 1988 31543
+2411 1988 39555
+2412 1988 12064
+2413 1988 58956
+2415 1988 18444
+2416 1988 49208
+2417 1988 49208
+2418 1988 65181
+2419 1988 32895
+2420 1988 49208
+2422 1988 9897
+2423 1988 9897
+2424 1988 1889
+2425 1988 63421
+2426 1988 53524
+2427 1988 9199
+2428 1988 11160
+2429 1988 63739
+2430 1988 10215
+2431 1988 9199
+2432 1988 11160
+2433 1988 57110
+2434 1988 60236
+2435 1988 50021
+2436 1988 9199
+2437 1988 11160
+2438 1988 13089
+2439 1988 40669
+2440 1988 55564
+2441 1988 5543
+2444 1988 31934
+2445 1988 42300
+2446 1988 27773
+2447 1988 43566
+2451 1988 36758
+2452 1988 47124
+2453 1988 32597
+2454 1988 3931
+2455 1988 30846
+2456 1988 30846
+2457 1988 18540
+2458 1988 34624
+2460 1988 46275
+2461 1988 40157
+2462 1988 14865
+2463 1988 52874
+2464 1988 26982
+2465 1988 61657
+2466 1988 37349
+2467 1988 53433
+2468 1988 5855
+2470 1988 21708
+2471 1988 35519
+2472 1988 46118
+2473 1988 28712
+2474 1988 49684
+2475 1988 53548
+2476 1988 51959
+2477 1988 42064
+2478 1988 46495
+2479 1988 14034
+2481 1988 3091
+2482 1988 25740
+2483 1988 15830
+2484 1988 54341
+2485 1988 3097
+2486 1988 15070
+2487 1988 8834
+2488 1988 14992
+2489 1988 56535
+2490 1988 23014
+2491 1988 41633
+2493 1988 43329
+2494 1988 49700
+2495 1988 11134
+2496 1988 63385
+2497 1988 62143
+2498 1988 47073
+2499 1988 27050
+2500 1988 34353
+2501 1988 9768
+2502 1988 26732
+2503 1988 49926
+2504 1988 32468
+2505 1988 34404
+2506 1988 49494
+2507 1988 39281
+2508 1988 19282
+2509 1988 59883
+2510 1988 59216
+2511 1988 48607
+4499 1988 27852657
+1920 1989 1
+1921 1989 1
+1986 1989 1
+1987 1989 1
+2286 1989 6
+2297 1989 39823
+2352 1989 24572
+2355 1989 45130
+2356 1989 62213
+2357 1989 37641
+2375 1989 37155
+2383 1989 58953
+2390 1989 49026
+2392 1989 2121
+2395 1989 57736
+2396 1989 57736
+2397 1989 57736
+2398 1989 16749
+2399 1989 24508
+2400 1989 15860
+2401 1989 23684
+2404 1989 41368
+2405 1989 20095
+2406 1989 20095
+2407 1989 12310
+2408 1989 20095
+2409 1989 16749
+2410 1989 24508
+2411 1989 15860
+2412 1989 23684
+2413 1989 24875
+2415 1989 41368
+2416 1989 20095
+2417 1989 20095
+2418 1989 12310
+2419 1989 40190
+2420 1989 20095
+2422 1989 22917
+2423 1989 22917
+2424 1989 26266
+2425 1989 58596
+2426 1989 35679
+2427 1989 47012
+2428 1989 17521
+2429 1989 14767
+2430 1989 44609
+2431 1989 47012
+2432 1989 17521
+2433 1989 50846
+2434 1989 47764
+2435 1989 3155
+2436 1989 47012
+2437 1989 17521
+2438 1989 30130
+2439 1989 57987
+2440 1989 29394
+2441 1989 26239
+2444 1989 39213
+2445 1989 18059
+2446 1989 48227
+2447 1989 22473
+2451 1989 7191
+2452 1989 51558
+2453 1989 16205
+2454 1989 30914
+2455 1989 10668
+2456 1989 10668
+2457 1989 65246
+2458 1989 58680
+2460 1989 42913
+2461 1989 34217
+2462 1989 51594
+2463 1989 6879
+2464 1989 47990
+2465 1989 37322
+2466 1989 6851
+2467 1989 285
+2468 1989 46164
+2470 1989 32064
+2471 1989 57913
+2472 1989 3867
+2473 1989 51386
+2474 1989 39756
+2475 1989 2434
+2476 1989 9965
+2477 1989 4169
+2478 1989 19821
+2479 1989 17608
+2481 1989 25031
+2482 1989 55512
+2483 1989 46028
+2484 1989 58203
+2485 1989 60860
+2486 1989 58426
+2487 1989 158
+2488 1989 35137
+2489 1989 35842
+2490 1989 13887
+2491 1989 65399
+2493 1989 5569
+2494 1989 19883
+2495 1989 46049
+2496 1989 62778
+2497 1989 6509
+2498 1989 13604
+2499 1989 27819
+2500 1989 3728
+2501 1989 65484
+2502 1989 25732
+2503 1989 273
+2504 1989 41274
+2505 1989 38771
+2506 1989 18512
+2507 1989 10097
+2508 1989 15407
+2509 1989 19403
+2510 1989 61124
+2511 1989 63766
+4500 1989 27852657
+1921 1990 1
+1987 1990 1
+2119 1990 6559
+2123 1990 58962
+2128 1990 6559
+2161 1990 18052
+2197 1990 54685
+2227 1990 10921
+2242 1990 23956
+2282 1990 60129
+2286 1990 5398
+2348 1990 16657
+2352 1990 7915
+2357 1990 57606
+2426 1990 41341
+2429 1990 50881
+2430 1990 9540
+2433 1990 6620
+2434 1990 24596
+2435 1990 15056
+2440 1990 51355
+2441 1990 12411
+2446 1990 50313
+2452 1990 16858
+2453 1990 3368
+2454 1990 47260
+2455 1990 55170
+2456 1990 55170
+2457 1990 8293
+2458 1990 43753
+2460 1990 19909
+2461 1990 63189
+2462 1990 3752
+2463 1990 42587
+2464 1990 32088
+2465 1990 42439
+2466 1990 18242
+2467 1990 34296
+2468 1990 2033
+2470 1990 54162
+2471 1990 1635
+2472 1990 18296
+2473 1990 56724
+2474 1990 25417
+2475 1990 48499
+2476 1990 55392
+2477 1990 46714
+2478 1990 40946
+2479 1990 20976
+2481 1990 8664
+2482 1990 2476
+2483 1990 8032
+2484 1990 15425
+2485 1990 35972
+2486 1990 52994
+2487 1990 18456
+2488 1990 21129
+2489 1990 44867
+2490 1990 1007
+2491 1990 9425
+2493 1990 5730
+2494 1990 38704
+2495 1990 26736
+2496 1990 46722
+2497 1990 62423
+2498 1990 9429
+2499 1990 20557
+2500 1990 13699
+2501 1990 15930
+2502 1990 62587
+2503 1990 39316
+2504 1990 62312
+2505 1990 21291
+2506 1990 19243
+2507 1990 34019
+2508 1990 7314
+2509 1990 24456
+2510 1990 35470
+2511 1990 36344
+4501 1990 27852657
+1922 1991 1
+1988 1991 1
+1993 1991 65520
+2355 1991 19079
+2356 1991 45141
+2357 1991 45141
+2390 1991 22421
+2392 1991 46422
+2395 1991 45468
+2396 1991 45468
+2397 1991 45468
+2398 1991 41168
+2399 1991 41168
+2400 1991 63589
+2401 1991 56272
+2404 1991 42575
+2405 1991 36611
+2406 1991 36611
+2407 1991 16558
+2408 1991 36611
+2409 1991 41168
+2410 1991 41168
+2411 1991 63589
+2412 1991 56272
+2413 1991 12591
+2415 1991 42575
+2416 1991 36611
+2417 1991 36611
+2418 1991 16558
+2419 1991 7701
+2420 1991 36611
+2422 1991 19653
+2423 1991 19653
+2424 1991 9395
+2425 1991 46615
+2426 1991 26962
+2427 1991 60147
+2428 1991 35441
+2429 1991 32790
+2430 1991 5828
+2431 1991 58327
+2432 1991 33621
+2433 1991 7352
+2434 1991 27629
+2435 1991 21801
+2436 1991 58327
+2437 1991 33621
+2438 1991 9789
+2439 1991 40036
+2440 1991 668
+2441 1991 44388
+2444 1991 10635
+2445 1991 45631
+2446 1991 7911
+2447 1991 11060
+2451 1991 31440
+2452 1991 915
+2453 1991 28716
+2454 1991 59666
+2455 1991 10180
+2456 1991 10180
+2457 1991 5221
+2458 1991 20484
+2460 1991 28611
+2461 1991 56412
+2462 1991 56837
+2463 1991 20150
+2464 1991 37392
+2465 1991 27212
+2466 1991 59469
+2467 1991 9211
+2468 1991 58745
+2470 1991 22127
+2471 1991 33187
+2472 1991 22587
+2473 1991 38491
+2474 1991 38313
+2475 1991 11101
+2476 1991 64122
+2477 1991 13864
+2478 1991 63398
+2479 1991 61845
+2481 1991 17286
+2482 1991 15953
+2483 1991 4879
+2484 1991 2553
+2485 1991 51935
+2486 1991 40834
+2487 1991 50832
+2488 1991 10860
+2489 1991 58187
+2490 1991 1205
+2491 1991 39580
+2493 1991 1680
+2494 1991 17129
+2495 1991 20316
+2496 1991 32938
+2497 1991 54571
+2498 1991 13737
+2499 1991 28088
+2500 1991 38417
+2501 1991 51719
+2502 1991 56047
+2503 1991 41151
+2504 1991 40335
+2505 1991 5259
+2506 1991 19970
+2507 1991 41543
+2508 1991 54945
+2509 1991 9721
+2510 1991 60993
+2511 1991 45970
+4502 1991 27852657
+1923 1992 1
+1924 1992 1
+1925 1992 1
+1989 1992 1
+1990 1992 1
+1991 1992 1
+1993 1992 1
+1994 1992 1
+1995 1992 2
+1996 1992 1
+2226 1992 2
+2227 1992 2
+2281 1992 2
+2282 1992 2
+2284 1992 49144
+2285 1992 49144
+2286 1992 49142
+2344 1992 2
+2345 1992 2
+2346 1992 49142
+2347 1992 49144
+2348 1992 49142
+2349 1992 49142
+2350 1992 16384
+2351 1992 3
+2352 1992 16382
+2353 1992 49142
+2354 1992 16384
+2355 1992 3
+2356 1992 32764
+2357 1992 16382
+2422 1992 1
+2423 1992 1
+2424 1992 8191
+2425 1992 8192
+2426 1992 8191
+2427 1992 8191
+2428 1992 24572
+2429 1992 32762
+2430 1992 24571
+2431 1992 8191
+2432 1992 24572
+2433 1992 32762
+2434 1992 49142
+2435 1992 24571
+2436 1992 8191
+2437 1992 24572
+2438 1992 32762
+2439 1992 49142
+2440 1992 49142
+2441 1992 24571
+2487 1992 16381
+2488 1992 24572
+2489 1992 40952
+2490 1992 49143
+2491 1992 49142
+2499 1992 56309
+2500 1992 47099
+2501 1992 5124
+2502 1992 12289
+2503 1992 28668
+2504 1992 12286
+2510 1992 8190
+2511 1992 26618
+4503 1992 27852657
+1924 1993 1
+1990 1993 1
+2286 1993 65515
+2352 1993 40949
+2355 1993 5908
+2356 1993 35584
+2357 1993 60156
+2390 1993 35306
+2392 1993 16243
+2395 1993 34125
+2396 1993 34125
+2397 1993 34125
+2398 1993 9507
+2399 1993 9507
+2400 1993 44813
+2401 1993 1115
+2404 1993 34232
+2405 1993 1794
+2406 1993 1794
+2407 1993 35919
+2408 1993 1794
+2409 1993 9507
+2410 1993 9507
+2411 1993 44813
+2412 1993 1115
+2413 1993 1115
+2415 1993 34232
+2416 1993 1794
+2417 1993 1794
+2418 1993 35919
+2419 1993 3588
+2420 1993 1794
+2422 1993 41860
+2423 1993 41860
+2424 1993 28870
+2425 1993 23578
+2426 1993 47239
+2427 1993 42016
+2428 1993 50810
+2429 1993 46797
+2430 1993 65079
+2431 1993 42016
+2432 1993 50810
+2433 1993 26086
+2434 1993 47352
+2435 1993 47794
+2436 1993 42016
+2437 1993 50810
+2438 1993 22576
+2439 1993 11630
+2440 1993 35256
+2441 1993 52983
+2444 1993 57382
+2445 1993 713
+2446 1993 11190
+2447 1993 7246
+2451 1993 24271
+2452 1993 33123
+2453 1993 43600
+2454 1993 50133
+2455 1993 40911
+2456 1993 40911
+2457 1993 44854
+2458 1993 34704
+2460 1993 39799
+2461 1993 50276
+2462 1993 140
+2463 1993 8699
+2464 1993 16962
+2465 1993 41572
+2466 1993 3689
+2467 1993 59060
+2468 1993 59307
+2470 1993 54058
+2471 1993 61304
+2472 1993 5189
+2473 1993 4329
+2474 1993 37198
+2475 1993 61147
+2476 1993 1773
+2477 1993 57144
+2478 1993 57391
+2479 1993 25628
+2481 1993 22960
+2482 1993 14018
+2483 1993 58682
+2484 1993 53106
+2485 1993 45459
+2486 1993 49833
+2487 1993 61893
+2488 1993 17230
+2489 1993 28351
+2490 1993 40487
+2491 1993 2828
+2493 1993 60816
+2494 1993 43485
+2495 1993 1604
+2496 1993 39186
+2497 1993 62257
+2498 1993 12424
+2499 1993 56462
+2500 1993 3888
+2501 1993 3695
+2502 1993 39243
+2503 1993 25241
+2504 1993 62667
+2505 1993 6917
+2506 1993 2183
+2507 1993 23082
+2508 1993 23379
+2509 1993 11191
+2510 1993 43429
+2511 1993 16543
+4504 1993 27852657
+1925 1994 1
+1991 1994 1
+1996 1994 65520
+2286 1994 6
+2352 1994 24572
+2355 1994 50858
+2356 1994 27336
+2357 1994 2764
+2390 1994 16078
+2392 1994 34821
+2395 1994 22241
+2396 1994 22241
+2397 1994 22241
+2398 1994 9082
+2399 1994 9082
+2400 1994 25160
+2401 1994 17415
+2404 1994 55245
+2405 1994 56132
+2406 1994 56132
+2407 1994 12852
+2408 1994 56132
+2409 1994 9082
+2410 1994 9082
+2411 1994 25160
+2412 1994 17415
+2413 1994 17415
+2415 1994 55245
+2416 1994 56132
+2417 1994 56132
+2418 1994 12852
+2419 1994 46743
+2420 1994 56132
+2422 1994 35224
+2423 1994 35224
+2424 1994 54027
+2425 1994 59109
+2426 1994 23885
+2427 1994 9770
+2428 1994 34011
+2429 1994 13032
+2430 1994 54668
+2431 1994 9770
+2432 1994 34011
+2433 1994 23081
+2434 1994 18207
+2435 1994 29060
+2436 1994 9770
+2437 1994 34011
+2438 1994 49997
+2439 1994 47749
+2440 1994 31657
+2441 1994 2597
+2444 1994 2604
+2445 1994 30709
+2446 1994 53633
+2447 1994 13428
+2451 1994 20636
+2452 1994 48741
+2453 1994 6144
+2454 1994 54384
+2455 1994 9516
+2456 1994 9516
+2457 1994 5936
+2458 1994 15088
+2460 1994 2699
+2461 1994 25623
+2462 1994 36447
+2463 1994 12142
+2464 1994 635
+2465 1994 56640
+2466 1994 13600
+2467 1994 22752
+2468 1994 61659
+2470 1994 48926
+2471 1994 62354
+2472 1994 39058
+2473 1994 58533
+2474 1994 58933
+2475 1994 2293
+2476 1994 53941
+2477 1994 63093
+2478 1994 36479
+2479 1994 44378
+2481 1994 14897
+2482 1994 42923
+2483 1994 50876
+2484 1994 36962
+2485 1994 25377
+2486 1994 23084
+2487 1994 11001
+2488 1994 18526
+2489 1994 22483
+2490 1994 61983
+2491 1994 24222
+2493 1994 55120
+2494 1994 15986
+2495 1994 58149
+2496 1994 26104
+2497 1994 52582
+2498 1994 29498
+2499 1994 62055
+2500 1994 50318
+2501 1994 33136
+2502 1994 20101
+2503 1994 12276
+2504 1994 12972
+2505 1994 22783
+2506 1994 53037
+2507 1994 49466
+2508 1994 14932
+2509 1994 31897
+2510 1994 4525
+2511 1994 61417
+4505 1994 27852657
+1926 1995 1
+1927 1995 1
+1928 1995 1
+1929 1995 1
+1930 1995 1
+1963 1995 43680
+1973 1995 43680
+1974 1995 65520
+2039 1995 43680
+2040 1995 65520
+2041 1995 65520
+2287 1995 54601
+2288 1995 54601
+2289 1995 54601
+2290 1995 54601
+2291 1995 54601
+2292 1995 54601
+2293 1995 54601
+2294 1995 54601
+2295 1995 54601
+2296 1995 43681
+2297 1995 54601
+2324 1995 5459
+2334 1995 5459
+2335 1995 5457
+2400 1995 46410
+2401 1995 16379
+2402 1995 60060
+2476 1995 47776
+2477 1995 47776
+2478 1995 43681
+2479 1995 43681
+2480 1995 55967
+2481 1995 55966
+2497 1995 61425
+2509 1995 46068
+4506 1995 27852657
+1927 1996 1
+1928 1996 19751
+1929 1996 47257
+1930 1996 47257
+1963 1996 65490
+1965 1996 39509
+1968 1996 13825
+1969 1996 13825
+1970 1996 13825
+1971 1996 33084
+1972 1996 33084
+1973 1996 33053
+1974 1996 2654
+1977 1996 56541
+1978 1996 13831
+1979 1996 13831
+1980 1996 27656
+1981 1996 13831
+2037 1996 33084
+2038 1996 33084
+2039 1996 33053
+2040 1996 2654
+2041 1996 2654
+2043 1996 56541
+2044 1996 13831
+2045 1996 13831
+2046 1996 27656
+2047 1996 27662
+2058 1996 13831
+2278 1996 60278
+2279 1996 60278
+2280 1996 38602
+2281 1996 61338
+2282 1996 1060
+2283 1996 29308
+2284 1996 6941
+2285 1996 9520
+2286 1996 8460
+2287 1996 29308
+2288 1996 50089
+2289 1996 62756
+2290 1996 34231
+2291 1996 25771
+2292 1996 29308
+2293 1996 50089
+2294 1996 61334
+2295 1996 19087
+2296 1996 39868
+2297 1996 14097
+2300 1996 18879
+2301 1996 9697
+2302 1996 44854
+2303 1996 31832
+2307 1996 18569
+2308 1996 9387
+2309 1996 44544
+2310 1996 1158
+2311 1996 3470
+2312 1996 3470
+2313 1996 43036
+2314 1996 57652
+2316 1996 35948
+2317 1996 5584
+2318 1996 18537
+2319 1996 55269
+2320 1996 20984
+2321 1996 17514
+2322 1996 33079
+2323 1996 47695
+2324 1996 51165
+2326 1996 59869
+2327 1996 26180
+2328 1996 53847
+2329 1996 14858
+2330 1996 17758
+2331 1996 244
+2332 1996 47087
+2333 1996 61703
+2334 1996 65173
+2335 1996 23656
+2337 1996 26102
+2338 1996 65488
+2339 1996 41246
+2340 1996 38651
+2341 1996 36561
+2342 1996 36317
+2398 1996 21204
+2399 1996 20105
+2400 1996 25870
+2401 1996 52159
+2402 1996 20797
+2404 1996 6494
+2405 1996 17617
+2406 1996 12074
+2407 1996 58212
+2408 1996 20854
+2419 1996 50058
+2476 1996 19172
+2477 1996 6266
+2478 1996 54192
+2479 1996 35122
+2480 1996 29304
+2481 1996 7132
+2482 1996 50515
+2483 1996 40533
+2484 1996 63784
+2485 1996 42736
+2486 1996 18310
+2497 1996 20117
+2509 1996 23010
+4507 1996 27852657
+1928 1997 1
+2289 1997 8189
+2290 1997 49138
+2291 1997 49138
+2296 1997 7690
+2297 1997 24073
+2302 1997 14218
+2308 1997 58045
+2309 1997 4310
+2310 1997 36293
+2311 1997 25854
+2312 1997 25854
+2313 1997 58182
+2314 1997 44403
+2316 1997 1208
+2317 1997 31255
+2318 1997 6234
+2319 1997 37392
+2320 1997 37310
+2321 1997 11456
+2322 1997 33148
+2323 1997 3861
+2324 1997 36718
+2326 1997 62747
+2327 1997 53316
+2328 1997 48033
+2329 1997 40552
+2330 1997 8166
+2331 1997 62231
+2332 1997 7745
+2333 1997 8157
+2334 1997 51246
+2335 1997 37081
+2337 1997 56755
+2338 1997 47870
+2339 1997 60828
+2340 1997 57432
+2341 1997 48681
+2342 1997 51971
+2398 1997 45546
+2399 1997 45555
+2400 1997 33388
+2401 1997 1603
+2402 1997 63909
+2404 1997 41448
+2405 1997 22987
+2406 1997 62761
+2407 1997 63312
+2408 1997 52127
+2419 1997 156
+2476 1997 46317
+2477 1997 34381
+2478 1997 60823
+2479 1997 33854
+2480 1997 40812
+2481 1997 5112
+2482 1997 56769
+2483 1997 33106
+2484 1997 43322
+2485 1997 33866
+2486 1997 43789
+2497 1997 8782
+2509 1997 21981
+4508 1997 27852657
+1929 1998 1
+1930 1998 1
+2289 1998 21965
+2290 1998 24572
+2291 1998 24572
+2296 1998 26175
+2297 1998 1603
+2302 1998 38276
+2308 1998 36714
+2309 1998 58699
+2310 1998 1900
+2311 1998 5383
+2312 1998 5383
+2313 1998 55261
+2314 1998 30378
+2316 1998 33751
+2317 1998 35427
+2318 1998 39308
+2319 1998 17966
+2320 1998 40004
+2321 1998 34621
+2322 1998 1992
+2323 1998 25357
+2324 1998 1402
+2326 1998 30550
+2327 1998 6269
+2328 1998 13803
+2329 1998 17967
+2330 1998 24385
+2331 1998 55285
+2332 1998 30647
+2333 1998 29061
+2334 1998 34493
+2335 1998 34930
+2337 1998 22554
+2338 1998 25932
+2339 1998 23673
+2340 1998 49711
+2341 1998 5814
+2342 1998 16050
+2398 1998 55814
+2399 1998 33833
+2400 1998 34074
+2401 1998 63108
+2402 1998 46229
+2404 1998 56819
+2405 1998 34408
+2406 1998 64671
+2407 1998 34457
+2408 1998 39160
+2419 1998 23110
+2476 1998 38929
+2477 1998 55615
+2478 1998 14680
+2479 1998 55365
+2480 1998 21040
+2481 1998 26607
+2482 1998 16608
+2483 1998 64045
+2484 1998 26175
+2485 1998 30024
+2486 1998 62797
+2497 1998 51723
+2509 1998 44680
+4509 1998 27852657
+1930 1999 1
+2491 1999 65520
+4510 1999 27852657
+1931 2000 1
+1953 2000 1
+1962 2000 1
+1963 2000 49150
+1972 2000 1
+1973 2000 49150
+1974 2000 49150
+2029 2000 18
+2038 2000 1
+2039 2000 49150
+2040 2000 16391
+2051 2000 32762
+2052 2000 32762
+2380 2000 8183
+2389 2000 8183
+2390 2000 8183
+2398 2000 24572
+2399 2000 4089
+2400 2000 32755
+2401 2000 32764
+2403 2000 61427
+2409 2000 6
+2410 2000 36855
+2411 2000 36855
+2412 2000 8192
+2413 2000 8192
+2487 2000 1
+2488 2000 24568
+2489 2000 24568
+2490 2000 24568
+2491 2000 24568
+2492 2000 24568
+2497 2000 54268
+2498 2000 43011
+2510 2000 31222
+4511 2000 27852657
+1932 2001 1
+1933 2001 1
+1936 2001 1
+1953 2001 65520
+1962 2001 65520
+1963 2001 49137
+1972 2001 65520
+1973 2001 49137
+1974 2001 49137
+2029 2001 43674
+2038 2001 65520
+2039 2001 27296
+2040 2001 16374
+2050 2001 43680
+2051 2001 32758
+2052 2001 32758
+2380 2001 57338
+2389 2001 57338
+2390 2001 62797
+2399 2001 20483
+2400 2001 38227
+2401 2001 49136
+2403 2001 12285
+2410 2001 28672
+2411 2001 9561
+2412 2001 19113
+2413 2001 19113
+2488 2001 40954
+2489 2001 36859
+2490 2001 54604
+2491 2001 54604
+2492 2001 54605
+2497 2001 25590
+2498 2001 51182
+2510 2001 64676
+4512 2001 27852657
+1933 2002 1
+1936 2002 59727
+1994 2002 41525
+1995 2002 20236
+1996 2002 20236
+2014 2002 65478
+2022 2002 12089
+2029 2002 3500
+2031 2002 14455
+2034 2002 14913
+2035 2002 14913
+2036 2002 14913
+2037 2002 34422
+2038 2002 26675
+2039 2002 35055
+2040 2002 43515
+2043 2002 34339
+2044 2002 54465
+2045 2002 54465
+2046 2002 3857
+2047 2002 54465
+2048 2002 34422
+2049 2002 26675
+2050 2002 35055
+2051 2002 43515
+2052 2002 47857
+2054 2002 34339
+2055 2002 54465
+2056 2002 54465
+2057 2002 3857
+2058 2002 43409
+2059 2002 54465
+2344 2002 49055
+2345 2002 49055
+2346 2002 51736
+2347 2002 40230
+2348 2002 56696
+2349 2002 2422
+2350 2002 16197
+2351 2002 25982
+2352 2002 34807
+2353 2002 2422
+2354 2002 16197
+2355 2002 47740
+2356 2002 5273
+2357 2002 35987
+2358 2002 2422
+2359 2002 16197
+2360 2002 56868
+2361 2002 18164
+2362 2002 38170
+2363 2002 2183
+2366 2002 18702
+2367 2002 33501
+2368 2002 26427
+2369 2002 36407
+2373 2002 27669
+2374 2002 42468
+2375 2002 35394
+2376 2002 50306
+2377 2002 14792
+2378 2002 14792
+2379 2002 27789
+2380 2002 27323
+2382 2002 1583
+2383 2002 6586
+2384 2002 44145
+2385 2002 19029
+2386 2002 58328
+2387 2002 43536
+2388 2002 29538
+2389 2002 29072
+2390 2002 55826
+2392 2002 58161
+2393 2002 25786
+2394 2002 31085
+2395 2002 4195
+2396 2002 54432
+2397 2002 10896
+2398 2002 27619
+2399 2002 27591
+2400 2002 50163
+2401 2002 21545
+2403 2002 33584
+2404 2002 40556
+2405 2002 26997
+2406 2002 5454
+2407 2002 34707
+2408 2002 23811
+2409 2002 50681
+2410 2002 37687
+2411 2002 4934
+2412 2002 19669
+2413 2002 2924
+2415 2002 29555
+2416 2002 17817
+2417 2002 24064
+2418 2002 20117
+2419 2002 58660
+2420 2002 34849
+2487 2002 41416
+2488 2002 51253
+2489 2002 1552
+2490 2002 56985
+2491 2002 19047
+2492 2002 49616
+2493 2002 21820
+2494 2002 31761
+2495 2002 24529
+2496 2002 58769
+2497 2002 26080
+2498 2002 56104
+2510 2002 18383
+4513 2002 27852657
+1934 2003 1
+1992 2003 1
+1993 2003 1
+1994 2003 1
+1995 2003 1
+1996 2003 1
+2353 2003 54601
+2354 2003 54601
+2355 2003 54601
+2356 2003 54601
+2357 2003 54601
+2358 2003 54601
+2359 2003 54601
+2360 2003 54601
+2361 2003 54601
+2362 2003 43681
+2363 2003 54601
+2401 2003 54601
+2412 2003 54601
+2413 2003 32761
+2487 2003 47776
+2488 2003 47776
+2489 2003 47776
+2490 2003 30031
+2491 2003 42317
+2492 2003 42316
+2510 2003 23888
+4514 2003 27852657
+1935 2004 1
+2492 2004 65520
+4515 2004 27852657
+1936 2005 1
+2376 2005 11191
+2377 2005 11312
+2378 2005 11312
+2379 2005 24119
+2380 2005 24119
+2382 2005 45908
+2383 2005 45908
+2384 2005 47574
+2385 2005 42843
+2386 2005 46466
+2387 2005 35154
+2388 2005 10947
+2389 2005 10947
+2390 2005 10947
+2392 2005 32581
+2393 2005 21791
+2394 2005 31670
+2395 2005 40307
+2396 2005 58866
+2397 2005 23712
+2398 2005 50838
+2399 2005 50838
+2400 2005 50838
+2401 2005 50838
+2403 2005 46809
+2404 2005 58661
+2405 2005 25578
+2406 2005 6246
+2407 2005 30510
+2408 2005 6798
+2409 2005 44586
+2410 2005 44586
+2411 2005 44586
+2412 2005 44586
+2413 2005 44586
+2415 2005 17293
+2416 2005 42096
+2417 2005 48062
+2418 2005 43710
+2419 2005 49763
+2420 2005 42965
+2487 2005 21251
+2488 2005 21251
+2489 2005 21251
+2490 2005 21251
+2491 2005 21251
+2492 2005 20796
+2493 2005 29770
+2494 2005 24903
+2495 2005 37522
+2496 2005 38698
+2497 2005 22638
+2498 2005 9487
+2510 2005 30874
+4516 2005 27852657
+1937 2006 1
+2497 2006 65520
+4517 2006 27852657
+1938 2007 1
+1939 2007 1
+1940 2007 1
+1941 2007 1
+1942 2007 1
+1946 2007 1
+1947 2007 1
+1948 2007 1
+1949 2007 1
+1955 2007 1
+1956 2007 1
+1957 2007 1
+1965 2007 1
+1966 2007 1
+1976 2007 1
+2404 2007 32761
+2405 2007 32761
+2406 2007 32761
+2407 2007 32761
+2408 2007 32761
+2419 2007 32761
+2497 2007 24573
+4518 2007 27852657
+1939 2008 1
+2005 2008 1
+2374 2008 18428
+2375 2008 22294
+2383 2008 42209
+2390 2008 31579
+2392 2008 49968
+2395 2008 26204
+2396 2008 26204
+2397 2008 26204
+2398 2008 43549
+2399 2008 43549
+2400 2008 49393
+2401 2008 33054
+2404 2008 13536
+2405 2008 35932
+2406 2008 35932
+2407 2008 62136
+2408 2008 35932
+2409 2008 43549
+2410 2008 43549
+2411 2008 49393
+2412 2008 33054
+2413 2008 11424
+2415 2008 13536
+2416 2008 35932
+2417 2008 35932
+2418 2008 62136
+2419 2008 6343
+2420 2008 35932
+2444 2008 10212
+2445 2008 64368
+2446 2008 28627
+2447 2008 64050
+2451 2008 40659
+2452 2008 43162
+2453 2008 7421
+2454 2008 64946
+2455 2008 57760
+2456 2008 57760
+2457 2008 32637
+2458 2008 32637
+2460 2008 44944
+2461 2008 22016
+2462 2008 5590
+2463 2008 6461
+2464 2008 64189
+2465 2008 6429
+2466 2008 57874
+2467 2008 57874
+2468 2008 26494
+2470 2008 16031
+2471 2008 35705
+2472 2008 53208
+2473 2008 11795
+2474 2008 53812
+2475 2008 47383
+2476 2008 38810
+2477 2008 38810
+2478 2008 15426
+2479 2008 47571
+2481 2008 9022
+2482 2008 29268
+2483 2008 60103
+2484 2008 34297
+2485 2008 54385
+2486 2008 7002
+2487 2008 55273
+2488 2008 55273
+2489 2008 38767
+2490 2008 10694
+2491 2008 23256
+2493 2008 6832
+2494 2008 15625
+2495 2008 46417
+2496 2008 34885
+2497 2008 62938
+2498 2008 55936
+2499 2008 44619
+2500 2008 44619
+2501 2008 17963
+2502 2008 33719
+2503 2008 41831
+2504 2008 17060
+2505 2008 53947
+2506 2008 62525
+2507 2008 24049
+2508 2008 59456
+2509 2008 48295
+2510 2008 33879
+2511 2008 53015
+4519 2008 27852657
+1940 2009 1
+1947 2009 1
+1974 2009 1
+2006 2009 1
+2007 2009 1
+2013 2009 1
+2014 2009 1
+2040 2009 2
+2051 2009 1
+2052 2009 1
+2301 2009 2
+2308 2009 2
+2335 2009 2
+2367 2009 49142
+2368 2009 49142
+2374 2009 49142
+2375 2009 49142
+2401 2009 32763
+2412 2009 32761
+2413 2009 32761
+2490 2009 16380
+2491 2009 16380
+2493 2009 8191
+2494 2009 8191
+2497 2009 1
+2498 2009 2
+2505 2009 49142
+2506 2009 49142
+2509 2009 2
+2510 2009 26620
+2511 2009 16380
+4520 2009 27852657
+1941 2010 1
+1948 2010 1
+1956 2010 1
+1963 2010 2
+1965 2010 11187
+1968 2010 32246
+1969 2010 32246
+1970 2010 32246
+1971 2010 3546
+1972 2010 3546
+1973 2010 3548
+1974 2010 3548
+1977 2010 54078
+1978 2010 18843
+1979 2010 18843
+1980 2010 51089
+1981 2010 18843
+2037 2010 3546
+2038 2010 3546
+2039 2010 3548
+2040 2010 3548
+2041 2010 3549
+2043 2010 54078
+2044 2010 18843
+2045 2010 18843
+2046 2010 51089
+2047 2010 37686
+2058 2010 18843
+2302 2010 24572
+2303 2010 22036
+2307 2010 15438
+2308 2010 15438
+2309 2010 40010
+2310 2010 29514
+2311 2010 23757
+2312 2010 23757
+2313 2010 5896
+2314 2010 5896
+2316 2010 55537
+2317 2010 14588
+2318 2010 28917
+2319 2010 12590
+2320 2010 16437
+2321 2010 58201
+2322 2010 3795
+2323 2010 3795
+2324 2010 52939
+2326 2010 63077
+2327 2010 2109
+2328 2010 44093
+2329 2010 7011
+2330 2010 59154
+2331 2010 953
+2332 2010 53136
+2333 2010 53136
+2334 2010 36759
+2335 2010 36759
+2337 2010 45306
+2338 2010 40956
+2339 2010 29517
+2340 2010 27706
+2341 2010 746
+2342 2010 65314
+2398 2010 40089
+2399 2010 40089
+2400 2010 31901
+2401 2010 31901
+2402 2010 23707
+2404 2010 17308
+2405 2010 13759
+2406 2010 1508
+2407 2010 23279
+2408 2010 22911
+2419 2010 23118
+2476 2010 15320
+2477 2010 15320
+2478 2010 27605
+2479 2010 27605
+2480 2010 39890
+2481 2010 63521
+2482 2010 28267
+2483 2010 27411
+2484 2010 35785
+2485 2010 9431
+2486 2010 59572
+2497 2010 41965
+2509 2010 3397
+4521 2010 27852657
+1942 2011 1
+1949 2011 1
+1957 2011 1
+1966 2011 1
+1976 2011 1
+2031 2011 1
+2392 2011 54601
+2393 2011 54601
+2403 2011 32761
+2404 2011 54601
+2405 2011 54601
+2406 2011 54601
+2407 2011 54601
+2408 2011 54601
+2415 2011 54601
+2416 2011 54601
+2417 2011 54601
+2418 2011 54601
+2419 2011 43681
+2420 2011 54601
+2493 2011 47776
+2494 2011 47776
+2495 2011 47776
+2496 2011 30031
+2497 2011 42317
+2498 2011 42316
+2510 2011 23888
+4522 2011 27852657
+1943 2012 1
+1951 2012 65520
+1959 2012 65519
+1960 2012 65520
+1968 2012 65519
+1969 2012 65519
+1970 2012 65520
+1978 2012 65519
+1979 2012 65519
+1980 2012 65519
+1981 2012 65520
+2009 2012 1
+2017 2012 65520
+2025 2012 65519
+2026 2012 65520
+2036 2012 1
+2044 2012 65519
+2045 2012 65519
+2047 2012 65520
+2057 2012 2
+2058 2012 1
+2059 2012 1
+2304 2012 6
+2312 2012 65515
+2320 2012 65509
+2321 2012 65515
+2329 2012 65509
+2330 2012 65509
+2331 2012 65515
+2339 2012 65509
+2340 2012 65509
+2341 2012 65509
+2342 2012 65515
+2370 2012 24572
+2378 2012 40949
+2385 2012 8
+2387 2012 24572
+2392 2012 30258
+2394 2012 24582
+2395 2012 10776
+2396 2012 3780
+2397 2012 44729
+2398 2012 39633
+2399 2012 39633
+2400 2012 39633
+2401 2012 39633
+2404 2012 29704
+2405 2012 45773
+2406 2012 17352
+2407 2012 52681
+2408 2012 7952
+2409 2012 39633
+2410 2012 39633
+2411 2012 39633
+2412 2012 39633
+2413 2012 39633
+2415 2012 29704
+2416 2012 29408
+2417 2012 987
+2418 2012 44505
+2419 2012 7728
+2420 2012 65291
+2451 2012 60879
+2452 2012 60879
+2453 2012 60879
+2454 2012 60879
+2455 2012 49119
+2456 2012 49119
+2457 2012 17181
+2458 2012 17181
+2460 2012 35671
+2461 2012 35671
+2462 2012 35671
+2463 2012 2053
+2464 2012 48476
+2465 2012 64878
+2466 2012 56921
+2467 2012 56921
+2468 2012 56921
+2470 2012 24755
+2471 2012 24755
+2472 2012 12296
+2473 2012 62099
+2474 2012 47829
+2475 2012 48472
+2476 2012 60502
+2477 2012 60502
+2478 2012 60502
+2479 2012 60502
+2481 2012 25634
+2482 2012 59417
+2483 2012 17227
+2484 2012 57747
+2485 2012 37803
+2486 2012 54852
+2487 2012 46182
+2488 2012 46182
+2489 2012 46182
+2490 2012 46182
+2491 2012 46182
+2493 2012 60578
+2494 2012 45543
+2495 2012 6834
+2496 2012 52157
+2497 2012 31858
+2498 2012 54812
+2499 2012 51174
+2500 2012 51174
+2501 2012 51174
+2502 2012 51174
+2503 2012 51174
+2504 2012 51174
+2505 2012 14336
+2506 2012 19958
+2507 2012 22212
+2508 2012 10195
+2509 2012 14441
+2510 2012 38346
+2511 2012 42148
+4523 2012 27852657
+1944 2013 1
+1952 2013 1
+1953 2013 1
+1961 2013 1
+1962 2013 1
+1963 2013 1
+1971 2013 1
+1972 2013 1
+1973 2013 1
+1974 2013 1
+2037 2013 1
+2038 2013 1
+2039 2013 1
+2040 2013 1
+2041 2013 1
+2398 2013 32761
+2399 2013 32761
+2400 2013 32761
+2401 2013 32761
+2402 2013 32761
+2403 2013 32761
+2497 2013 24573
+4524 2013 27852657
+1945 2014 1
+2497 2014 65520
+4525 2014 27852657
+1946 2015 1
+2013 2015 8829
+2014 2015 50823
+2022 2015 19605
+2029 2015 28867
+2031 2015 37932
+2034 2015 42040
+2035 2015 42040
+2036 2015 42040
+2037 2015 9012
+2038 2015 9012
+2039 2015 37879
+2040 2015 15867
+2043 2015 58851
+2044 2015 38591
+2045 2015 38591
+2046 2015 15110
+2047 2015 38591
+2048 2015 9012
+2049 2015 9012
+2050 2015 37879
+2051 2015 15867
+2052 2015 61742
+2054 2015 58851
+2055 2015 38591
+2056 2015 38591
+2057 2015 15110
+2058 2015 11661
+2059 2015 38591
+2367 2015 20547
+2368 2015 32389
+2369 2015 59025
+2373 2015 36639
+2374 2015 29869
+2375 2015 41711
+2376 2015 25664
+2377 2015 13104
+2378 2015 13104
+2379 2015 59774
+2380 2015 59774
+2382 2015 49020
+2383 2015 28189
+2384 2015 34671
+2385 2015 2455
+2386 2015 64672
+2387 2015 51568
+2388 2015 47606
+2389 2015 47606
+2390 2015 37184
+2392 2015 143
+2393 2015 53704
+2394 2015 43721
+2395 2015 14241
+2396 2015 12712
+2397 2015 26665
+2398 2015 39411
+2399 2015 39411
+2400 2015 28989
+2401 2015 59010
+2403 2015 61177
+2404 2015 3701
+2405 2015 10356
+2406 2015 44650
+2407 2015 59032
+2408 2015 32367
+2409 2015 10250
+2410 2015 10250
+2411 2015 28636
+2412 2015 28426
+2413 2015 1026
+2415 2015 64366
+2416 2015 15565
+2417 2015 60474
+2418 2015 53312
+2419 2015 54954
+2420 2015 22587
+2487 2015 3350
+2488 2015 3350
+2489 2015 51832
+2490 2015 61666
+2491 2015 26468
+2492 2015 6558
+2493 2015 60678
+2494 2015 52680
+2495 2015 35538
+2496 2015 63895
+2497 2015 38413
+2498 2015 62837
+2510 2015 10398
+4526 2015 27852657
+1947 2016 1
+2013 2016 1
+2022 2016 65520
+2052 2016 65520
+2374 2016 12025
+2375 2016 62750
+2383 2016 24380
+2390 2016 13502
+2392 2016 55378
+2395 2016 53719
+2396 2016 53719
+2397 2016 53719
+2398 2016 32281
+2399 2016 32281
+2400 2016 45783
+2401 2016 44753
+2404 2016 55880
+2405 2016 65230
+2406 2016 65230
+2407 2016 53428
+2408 2016 65230
+2409 2016 32281
+2410 2016 32281
+2411 2016 45783
+2412 2016 44753
+2413 2016 17903
+2415 2016 55880
+2416 2016 65230
+2417 2016 65230
+2418 2016 53428
+2419 2016 64939
+2420 2016 65230
+2445 2016 57761
+2446 2016 45360
+2447 2016 62047
+2451 2016 33101
+2452 2016 58002
+2453 2016 6698
+2454 2016 57160
+2455 2016 10129
+2456 2016 10129
+2457 2016 48986
+2458 2016 48986
+2460 2016 44445
+2461 2016 40154
+2462 2016 51255
+2463 2016 30719
+2464 2016 57414
+2465 2016 47285
+2466 2016 43811
+2467 2016 43811
+2468 2016 16611
+2470 2016 18297
+2471 2016 17869
+2472 2016 40479
+2473 2016 498
+2474 2016 55025
+2475 2016 7740
+2476 2016 51446
+2477 2016 51446
+2478 2016 24246
+2479 2016 7809
+2481 2016 19837
+2482 2016 48154
+2483 2016 44869
+2484 2016 52325
+2485 2016 59029
+2486 2016 51289
+2487 2016 57815
+2488 2016 57815
+2489 2016 14830
+2490 2016 13570
+2491 2016 31084
+2493 2016 25342
+2494 2016 47713
+2495 2016 64262
+2496 2016 16150
+2497 2016 790
+2498 2016 15021
+2499 2016 23356
+2500 2016 23356
+2501 2016 9805
+2502 2016 3288
+2503 2016 42817
+2504 2016 57663
+2505 2016 25342
+2506 2016 40566
+2507 2016 10043
+2508 2016 21806
+2509 2016 60034
+2510 2016 18633
+2511 2016 60374
+4527 2016 27852657
+1948 2017 1
+2302 2017 52253
+2309 2017 13363
+2310 2017 53938
+2311 2017 11620
+2312 2017 11620
+2313 2017 43365
+2314 2017 7510
+2316 2017 20047
+2317 2017 62043
+2318 2017 15670
+2319 2017 65454
+2320 2017 49270
+2321 2017 37650
+2322 2017 49208
+2323 2017 1582
+2324 2017 1582
+2326 2017 32034
+2327 2017 19716
+2328 2017 62230
+2329 2017 34283
+2330 2017 60070
+2331 2017 22420
+2332 2017 53974
+2333 2017 36677
+2334 2017 36677
+2335 2017 36677
+2337 2017 41930
+2338 2017 42291
+2339 2017 43610
+2340 2017 16261
+2341 2017 24533
+2342 2017 2113
+2398 2017 38900
+2399 2017 7511
+2400 2017 7511
+2401 2017 7511
+2402 2017 15688
+2404 2017 58489
+2405 2017 20826
+2406 2017 3817
+2407 2017 53517
+2408 2017 63132
+2419 2017 61019
+2476 2017 37291
+2477 2017 38405
+2478 2017 38405
+2479 2017 38405
+2480 2017 543
+2481 2017 33693
+2482 2017 24308
+2483 2017 9844
+2484 2017 27130
+2485 2017 48515
+2486 2017 46534
+2497 2017 18434
+2509 2017 25667
+4528 2017 27852657
+1949 2018 1
+2031 2018 55797
+2034 2018 8578
+2035 2018 8578
+2036 2018 8578
+2037 2018 42079
+2038 2018 42079
+2039 2018 42079
+2040 2018 42079
+2043 2018 4599
+2044 2018 7348
+2045 2018 7348
+2046 2018 15926
+2047 2018 7348
+2048 2018 42079
+2049 2018 42079
+2050 2018 42079
+2051 2018 42079
+2052 2018 42079
+2054 2018 4599
+2055 2018 7348
+2056 2018 7348
+2057 2018 15926
+2058 2018 14696
+2059 2018 7348
+2373 2018 21902
+2374 2018 21902
+2375 2018 21902
+2376 2018 21902
+2379 2018 43069
+2380 2018 43069
+2382 2018 36711
+2383 2018 36711
+2384 2018 36711
+2386 2018 43406
+2387 2018 43406
+2388 2018 9099
+2389 2018 9099
+2390 2018 9099
+2392 2018 4302
+2393 2018 4302
+2395 2018 62874
+2396 2018 47206
+2397 2018 3800
+2398 2018 31511
+2399 2018 31511
+2400 2018 31511
+2401 2018 31511
+2403 2018 51234
+2404 2018 27594
+2405 2018 47847
+2406 2018 62823
+2407 2018 33812
+2408 2018 30012
+2409 2018 18625
+2410 2018 18625
+2411 2018 18625
+2412 2018 18625
+2413 2018 18625
+2415 2018 48424
+2416 2018 19201
+2417 2018 38728
+2418 2018 21611
+2419 2018 11405
+2420 2018 46914
+2487 2018 25899
+2488 2018 25899
+2489 2018 25899
+2490 2018 25899
+2491 2018 25899
+2492 2018 25899
+2494 2018 58308
+2495 2018 41707
+2496 2018 48459
+2497 2018 25652
+2498 2018 9135
+2510 2018 55897
+4529 2018 27852657
+1950 2019 1
+1951 2019 1
+1959 2019 1
+1968 2019 1
+1978 2019 1
+2024 2019 65520
+2025 2019 65520
+2026 2019 65520
+2033 2019 65520
+2035 2019 65520
+2044 2019 2
+2046 2019 1
+2047 2019 1
+2055 2019 1
+2057 2019 1
+2058 2019 2
+2059 2019 1
+2385 2019 28660
+2392 2019 3114
+2394 2019 28660
+2395 2019 25855
+2396 2019 15813
+2397 2019 15813
+2398 2019 40681
+2399 2019 40681
+2400 2019 40681
+2401 2019 40681
+2404 2019 27626
+2405 2019 17280
+2406 2019 43467
+2407 2019 52952
+2408 2019 37139
+2409 2019 40681
+2410 2019 40681
+2411 2019 40681
+2412 2019 40681
+2413 2019 40681
+2415 2019 43997
+2416 2019 25468
+2417 2019 51655
+2418 2019 57040
+2419 2019 21037
+2420 2019 49419
+2451 2019 64686
+2452 2019 64686
+2453 2019 64686
+2454 2019 64686
+2455 2019 16354
+2456 2019 16354
+2457 2019 1968
+2458 2019 1968
+2460 2019 60804
+2461 2019 60804
+2462 2019 60804
+2463 2019 29681
+2464 2019 3722
+2465 2019 52889
+2466 2019 9323
+2467 2019 9323
+2468 2019 9323
+2470 2019 64973
+2471 2019 64973
+2472 2019 29681
+2473 2019 36542
+2474 2019 61719
+2475 2019 8830
+2476 2019 51938
+2477 2019 51938
+2478 2019 51938
+2479 2019 51938
+2481 2019 1496
+2482 2019 65404
+2483 2019 19510
+2484 2019 865
+2485 2019 28581
+2486 2019 19751
+2487 2019 35768
+2488 2019 35768
+2489 2019 35768
+2490 2019 35768
+2491 2019 35768
+2493 2019 58711
+2494 2019 33928
+2495 2019 28700
+2496 2019 48545
+2497 2019 19621
+2498 2019 14201
+2499 2019 23469
+2500 2019 23469
+2501 2019 23469
+2502 2019 23469
+2503 2019 23469
+2504 2019 23469
+2505 2019 44017
+2506 2019 56114
+2507 2019 21408
+2508 2019 30198
+2509 2019 31155
+2510 2019 15333
+2511 2019 19165
+4530 2019 27852657
+1951 2020 1
+1960 2020 65520
+1970 2020 1
+1979 2020 57331
+1980 2020 21841
+1981 2020 21840
+2017 2020 1
+2026 2020 65520
+2036 2020 1
+2045 2020 49141
+2046 2020 43682
+2047 2020 65520
+2056 2020 57331
+2057 2020 21841
+2058 2020 65520
+2059 2020 21840
+2212 2020 41473
+2221 2020 24048
+2257 2020 46503
+2266 2020 57025
+2274 2020 10345
+2275 2020 15111
+2276 2020 47655
+2312 2020 61299
+2321 2020 46710
+2331 2020 6872
+2337 2020 26569
+2338 2020 40544
+2339 2020 30199
+2340 2020 45297
+2341 2020 29493
+2342 2020 4755
+2378 2020 65045
+2387 2020 39698
+2397 2020 47039
+2408 2020 43793
+2416 2020 26752
+2417 2020 33662
+2418 2020 65088
+2419 2020 49575
+2420 2020 10537
+2455 2020 7339
+2456 2020 52321
+2457 2020 26338
+2458 2020 26338
+2460 2020 30533
+2461 2020 30533
+2462 2020 30533
+2463 2020 55192
+2464 2020 53590
+2465 2020 34846
+2466 2020 5668
+2467 2020 5668
+2468 2020 5668
+2470 2020 44667
+2471 2020 44667
+2472 2020 12487
+2473 2020 60508
+2474 2020 60157
+2475 2020 14169
+2476 2020 6894
+2477 2020 6894
+2478 2020 6894
+2479 2020 6894
+2481 2020 7051
+2482 2020 6474
+2483 2020 1812
+2484 2020 26667
+2485 2020 10963
+2486 2020 4578
+2487 2020 31704
+2488 2020 31704
+2489 2020 31704
+2490 2020 31704
+2491 2020 31704
+2493 2020 5274
+2494 2020 30374
+2495 2020 26540
+2496 2020 36237
+2497 2020 46462
+2498 2020 27569
+2499 2020 19987
+2500 2020 19987
+2501 2020 19987
+2502 2020 19987
+2503 2020 19987
+2504 2020 19987
+2505 2020 47431
+2506 2020 43298
+2507 2020 19436
+2508 2020 55584
+2509 2020 63587
+2510 2020 17931
+2511 2020 19391
+4531 2020 27852657
+1952 2021 1
+2014 2021 8948
+2022 2021 24445
+2028 2021 1408
+2029 2021 19083
+2031 2021 36199
+2034 2021 20635
+2035 2021 20635
+2036 2021 20635
+2037 2021 22384
+2038 2021 36073
+2039 2021 53748
+2040 2021 15608
+2043 2021 25742
+2044 2021 259
+2045 2021 259
+2046 2021 20894
+2047 2021 259
+2048 2021 22384
+2049 2021 36073
+2050 2021 53748
+2051 2021 15608
+2052 2021 53742
+2054 2021 25742
+2055 2021 259
+2056 2021 259
+2057 2021 20894
+2058 2021 518
+2059 2021 259
+2368 2021 4355
+2369 2021 15223
+2373 2021 48574
+2374 2021 48574
+2375 2021 52929
+2376 2021 36729
+2377 2021 54719
+2378 2021 54719
+2379 2021 60798
+2380 2021 11643
+2382 2021 63486
+2383 2021 59737
+2384 2021 36258
+2385 2021 62745
+2386 2021 54746
+2387 2021 27
+2388 2021 35550
+2389 2021 23485
+2390 2021 60397
+2392 2021 28572
+2393 2021 27559
+2394 2021 11139
+2395 2021 24141
+2396 2021 38552
+2397 2021 38525
+2398 2021 20030
+2399 2021 44820
+2400 2021 16211
+2401 2021 49455
+2403 2021 59773
+2404 2021 34549
+2405 2021 21317
+2406 2021 64826
+2407 2021 22242
+2408 2021 49238
+2409 2021 33494
+2410 2021 59546
+2411 2021 33280
+2412 2021 4063
+2413 2021 5174
+2415 2021 3829
+2416 2021 2955
+2417 2021 6087
+2418 2021 50020
+2419 2021 31757
+2420 2021 48040
+2487 2021 937
+2488 2021 35097
+2489 2021 2727
+2490 2021 2727
+2491 2021 13198
+2492 2021 14963
+2493 2021 51257
+2494 2021 53714
+2495 2021 64884
+2496 2021 19570
+2497 2021 47415
+2498 2021 40935
+2510 2021 57282
+4532 2021 27852657
+1953 2022 1
+1962 2022 1
+1963 2022 1
+1972 2022 1
+1973 2022 1
+1974 2022 1
+2019 2022 1
+2028 2022 1
+2029 2022 1
+2038 2022 2
+2039 2022 2
+2040 2022 2
+2049 2022 1
+2050 2022 1
+2051 2022 1
+2052 2022 1
+2314 2022 2
+2323 2022 2
+2324 2022 2
+2333 2022 2
+2334 2022 2
+2335 2022 2
+2380 2022 49142
+2389 2022 49142
+2390 2022 49142
+2399 2022 32763
+2400 2022 32763
+2401 2022 32763
+2410 2022 32761
+2411 2022 32761
+2412 2022 32761
+2413 2022 32761
+2488 2022 16380
+2489 2022 16380
+2490 2022 16380
+2491 2022 16380
+2497 2022 8192
+2498 2022 8193
+2509 2022 49144
+2510 2022 39930
+2511 2022 16380
+4533 2022 27852657
+1954 2023 1
+2497 2023 65520
+4534 2023 27852657
+1955 2024 1
+2021 2024 1
+2022 2024 1
+2031 2024 1
+2382 2024 49140
+2383 2024 49140
+2392 2024 49138
+2460 2024 43680
+2461 2024 43680
+2462 2024 43680
+2470 2024 65520
+2471 2024 65520
+2481 2024 65520
+2495 2024 8191
+2496 2024 8191
+2497 2024 8191
+2498 2024 8191
+2507 2024 24570
+2508 2024 60060
+2509 2024 60060
+2510 2024 24228
+2511 2024 61425
+4535 2024 27852657
+1956 2025 1
+2302 2025 63085
+2309 2025 53975
+2310 2025 13194
+2311 2025 49813
+2312 2025 49813
+2313 2025 13047
+2314 2025 20489
+2316 2025 2269
+2317 2025 28070
+2318 2025 49488
+2319 2025 57313
+2320 2025 59669
+2321 2025 9856
+2322 2025 6775
+2323 2025 17890
+2324 2025 17890
+2326 2025 55035
+2327 2025 58741
+2328 2025 42593
+2329 2025 16023
+2330 2025 50122
+2331 2025 40266
+2332 2025 60645
+2333 2025 64840
+2334 2025 64840
+2335 2025 64840
+2337 2025 40895
+2338 2025 43337
+2339 2025 14476
+2340 2025 43911
+2341 2025 64303
+2342 2025 24037
+2398 2025 58318
+2399 2025 35032
+2400 2025 35032
+2401 2025 35032
+2402 2025 10783
+2404 2025 20581
+2405 2025 44678
+2406 2025 6893
+2407 2025 55967
+2408 2025 45266
+2419 2025 21229
+2476 2025 37413
+2477 2025 15752
+2478 2025 15752
+2479 2025 15752
+2480 2025 18048
+2481 2025 25828
+2482 2025 38894
+2483 2025 21261
+2484 2025 51835
+2485 2025 45242
+2486 2025 11062
+2497 2025 45002
+2509 2025 6465
+4536 2025 27852657
+1957 2026 1
+1958 2026 9077
+1959 2026 9077
+1960 2026 9077
+1967 2026 9077
+1968 2026 9077
+1969 2026 18154
+1970 2026 9077
+1977 2026 9077
+1978 2026 9077
+1979 2026 18154
+1980 2026 18154
+1981 2026 9077
+2016 2026 36063
+2017 2026 36063
+2024 2026 45140
+2025 2026 15682
+2026 2026 45140
+2031 2026 19781
+2033 2026 45140
+2034 2026 30940
+2035 2026 40017
+2036 2026 60398
+2043 2026 63082
+2044 2026 48882
+2045 2026 1515
+2046 2026 16773
+2047 2026 21896
+2054 2026 54005
+2055 2026 39805
+2056 2026 48882
+2057 2026 64140
+2058 2026 16561
+2059 2026 3742
+2377 2026 41448
+2378 2026 41448
+2385 2026 16400
+2386 2026 57848
+2387 2026 16400
+2392 2026 14217
+2393 2026 14217
+2394 2026 16400
+2395 2026 33038
+2396 2026 5517
+2397 2026 54638
+2403 2026 14217
+2404 2026 34808
+2405 2026 51446
+2406 2026 46010
+2407 2026 59679
+2408 2026 5041
+2415 2026 57169
+2416 2026 47677
+2417 2026 42241
+2418 2026 8543
+2419 2026 30100
+2420 2026 25059
+2493 2026 34782
+2494 2026 46678
+2495 2026 44124
+2496 2026 52275
+2497 2026 62584
+2498 2026 25571
+2510 2026 37974
+4537 2026 27852657
+1958 2027 1
+1959 2027 1
+1960 2027 1
+1969 2027 1
+1979 2027 1
+2024 2027 1
+2025 2027 1
+2026 2027 1
+2035 2027 1
+2045 2027 2
+2056 2027 1
+2385 2027 49144
+2392 2027 53425
+2394 2027 36865
+2395 2027 13498
+2396 2027 14972
+2397 2027 14972
+2398 2027 36676
+2399 2027 36676
+2400 2027 36676
+2401 2027 36676
+2404 2027 787
+2405 2027 34004
+2406 2027 45551
+2407 2027 18071
+2408 2027 3099
+2409 2027 36676
+2410 2027 36676
+2411 2027 36676
+2412 2027 36676
+2413 2027 36676
+2415 2027 787
+2416 2027 34004
+2417 2027 45551
+2418 2027 18071
+2419 2027 6198
+2420 2027 3099
+2451 2027 58740
+2452 2027 58740
+2453 2027 58740
+2454 2027 58740
+2455 2027 55899
+2456 2027 55899
+2457 2027 16529
+2458 2027 16529
+2460 2027 19387
+2461 2027 19387
+2462 2027 19387
+2463 2027 17468
+2464 2027 11559
+2465 2027 21181
+2466 2027 51302
+2467 2027 51302
+2468 2027 51302
+2470 2027 54978
+2471 2027 54978
+2472 2027 47855
+2473 2027 25601
+2474 2027 37463
+2475 2027 16282
+2476 2027 16394
+2477 2027 16394
+2478 2027 16394
+2479 2027 16394
+2481 2027 24717
+2482 2027 356
+2483 2027 33149
+2484 2027 22526
+2485 2027 36403
+2486 2027 20121
+2487 2027 48182
+2488 2027 48182
+2489 2027 48182
+2490 2027 48182
+2491 2027 48182
+2493 2027 64006
+2494 2027 37039
+2495 2027 24828
+2496 2027 58012
+2497 2027 3915
+2498 2027 49315
+2499 2027 39004
+2500 2027 39004
+2501 2027 39004
+2502 2027 39004
+2503 2027 39004
+2504 2027 39004
+2505 2027 23585
+2506 2027 53351
+2507 2027 19192
+2508 2027 19700
+2509 2027 62176
+2510 2027 19755
+2511 2027 97
+4538 2027 27852657
+1959 2028 1
+1960 2028 1
+1970 2028 65520
+1976 2028 24631
+1977 2028 35648
+1978 2028 35648
+1979 2028 22650
+1980 2028 16736
+1981 2028 16737
+2047 2028 15652
+2055 2028 43437
+2056 2028 4643
+2057 2028 2463
+2058 2028 46100
+2059 2028 47185
+2377 2028 48380
+2378 2028 48380
+2379 2028 10860
+2380 2028 10860
+2382 2028 63123
+2383 2028 63123
+2384 2028 63123
+2385 2028 62812
+2386 2028 57966
+2387 2028 9586
+2388 2028 11457
+2389 2028 11457
+2390 2028 11457
+2392 2028 40780
+2393 2028 40780
+2394 2028 61937
+2395 2028 23067
+2396 2028 33808
+2397 2028 24222
+2398 2028 9843
+2399 2028 9843
+2400 2028 9843
+2401 2028 9843
+2403 2028 56428
+2404 2028 22934
+2405 2028 10121
+2406 2028 55671
+2407 2028 43885
+2408 2028 37222
+2409 2028 50398
+2410 2028 50398
+2411 2028 50398
+2412 2028 50398
+2413 2028 50398
+2415 2028 17642
+2416 2028 40007
+2417 2028 31803
+2418 2028 39461
+2419 2028 26888
+2420 2028 5853
+2487 2028 21038
+2488 2028 21038
+2489 2028 21038
+2490 2028 21038
+2491 2028 21038
+2492 2028 21038
+2493 2028 46054
+2494 2028 9377
+2495 2028 8656
+2496 2028 58708
+2497 2028 43414
+2498 2028 60997
+2510 2028 37100
+4539 2028 27852657
+1960 2029 1
+2026 2029 10234
+2035 2029 10099
+2045 2029 32024
+2056 2029 32024
+2211 2029 19221
+2212 2029 19221
+2213 2029 56103
+2214 2029 56103
+2216 2029 5114
+2217 2029 5114
+2218 2029 5114
+2219 2029 40240
+2220 2029 9875
+2221 2029 56175
+2258 2029 20870
+2259 2029 20870
+2260 2029 20870
+2262 2029 36137
+2263 2029 36137
+2264 2029 40583
+2265 2029 48282
+2266 2029 4148
+2275 2029 13494
+2313 2029 41383
+2314 2029 41383
+2315 2029 41383
+2316 2029 41383
+2318 2029 63516
+2319 2029 13984
+2320 2029 61791
+2321 2029 65209
+2330 2029 5735
+2340 2029 57762
+2379 2029 23287
+2380 2029 23287
+2381 2029 23287
+2382 2029 23287
+2383 2029 23287
+2385 2029 25986
+2386 2029 53399
+2387 2029 38715
+2396 2029 16183
+2406 2029 51180
+2417 2029 35668
+2457 2029 41388
+2458 2029 41388
+2459 2029 41388
+2460 2029 41388
+2461 2029 41388
+2462 2029 41388
+2463 2029 32646
+2464 2029 37955
+2465 2029 10681
+2474 2029 27804
+2484 2029 33471
+2495 2029 4501
+2507 2029 35102
+4540 2029 27852657
+1961 2030 1
+1971 2030 1
+2014 2030 60958
+2022 2030 24227
+2028 2030 64113
+2029 2030 44387
+2031 2030 26087
+2034 2030 9388
+2035 2030 9388
+2036 2030 9388
+2037 2030 37694
+2038 2030 50622
+2039 2030 30896
+2040 2030 23989
+2043 2030 61987
+2044 2030 61511
+2045 2030 61511
+2046 2030 5378
+2047 2030 61511
+2048 2030 37693
+2049 2030 50622
+2050 2030 30896
+2051 2030 23989
+2052 2030 61145
+2054 2030 61987
+2055 2030 61511
+2056 2030 61511
+2057 2030 5378
+2058 2030 57501
+2059 2030 61511
+2368 2030 4611
+2369 2030 32547
+2373 2030 32506
+2374 2030 32506
+2375 2030 37117
+2376 2030 45466
+2377 2030 12289
+2378 2030 12289
+2379 2030 48686
+2380 2030 24137
+2382 2030 3911
+2383 2030 58903
+2384 2030 63517
+2385 2030 27542
+2386 2030 31258
+2387 2030 18969
+2388 2030 24484
+2389 2030 28366
+2390 2030 45452
+2392 2030 60300
+2393 2030 25647
+2394 2030 1503
+2395 2030 22431
+2396 2030 326
+2397 2030 46878
+2398 2030 818
+2399 2030 605
+2400 2030 17691
+2401 2030 41770
+2403 2030 39466
+2404 2030 45820
+2405 2030 34271
+2406 2030 20513
+2407 2030 34038
+2408 2030 52681
+2409 2030 9231
+2410 2030 58431
+2411 2030 29282
+2412 2030 9868
+2413 2030 42699
+2415 2030 44901
+2416 2030 6259
+2417 2030 23304
+2418 2030 60557
+2419 2030 26659
+2420 2030 39499
+2487 2030 25529
+2488 2030 32322
+2489 2030 13696
+2490 2030 13696
+2491 2030 32967
+2492 2030 29570
+2493 2030 52585
+2494 2030 58712
+2495 2030 54970
+2496 2030 18725
+2497 2030 45215
+2498 2030 51852
+2510 2030 45864
+4541 2030 27852657
+1962 2031 1
+1972 2031 1
+2014 2031 4563
+2022 2031 41294
+2028 2031 1408
+2029 2031 62827
+2031 2031 47134
+2034 2031 51672
+2035 2031 51672
+2036 2031 51672
+2037 2031 38875
+2038 2031 25947
+2039 2031 45672
+2040 2031 52579
+2043 2031 4202
+2044 2031 52764
+2045 2031 52764
+2046 2031 38915
+2047 2031 52764
+2048 2031 38875
+2049 2031 25946
+2050 2031 45672
+2051 2031 52579
+2052 2031 15423
+2054 2031 4202
+2055 2031 52764
+2056 2031 52764
+2057 2031 38915
+2058 2031 40007
+2059 2031 52764
+2368 2031 60910
+2369 2031 32974
+2373 2031 20335
+2374 2031 20335
+2375 2031 15724
+2376 2031 7375
+2377 2031 53232
+2378 2031 53232
+2379 2031 6018
+2380 2031 30567
+2382 2031 20927
+2383 2031 31456
+2384 2031 26842
+2385 2031 37979
+2386 2031 38318
+2387 2031 50607
+2388 2031 53862
+2389 2031 49980
+2390 2031 32894
+2392 2031 35899
+2393 2031 5031
+2394 2031 64018
+2395 2031 30692
+2396 2031 832
+2397 2031 15746
+2398 2031 3438
+2399 2031 3651
+2400 2031 26771
+2401 2031 2692
+2403 2031 62672
+2404 2031 23709
+2405 2031 36086
+2406 2031 63870
+2407 2031 56184
+2408 2031 40438
+2409 2031 62493
+2410 2031 13293
+2411 2031 42442
+2412 2031 61856
+2413 2031 29025
+2415 2031 54466
+2416 2031 44165
+2417 2031 53158
+2418 2031 34436
+2419 2031 60636
+2420 2031 20198
+2487 2031 20626
+2488 2031 13833
+2489 2031 32459
+2490 2031 32459
+2491 2031 13188
+2492 2031 16585
+2493 2031 12936
+2494 2031 46681
+2495 2031 13628
+2496 2031 62278
+2497 2031 27865
+2498 2031 15272
+2510 2031 5011
+4542 2031 27852657
+1963 2032 1
+1973 2032 1
+2050 2032 65520
+2374 2032 59118
+2375 2032 28853
+2383 2032 62574
+2390 2032 19668
+2392 2032 39519
+2395 2032 10084
+2396 2032 10084
+2397 2032 10084
+2398 2032 5703
+2399 2032 5703
+2400 2032 49245
+2401 2032 63455
+2404 2032 63672
+2405 2032 12888
+2406 2032 12888
+2407 2032 22972
+2408 2032 12888
+2409 2032 63534
+2410 2032 63534
+2411 2032 27735
+2412 2032 25556
+2413 2032 44795
+2415 2032 63672
+2416 2032 12888
+2417 2032 12888
+2418 2032 22972
+2419 2032 25776
+2420 2032 12888
+2445 2032 37214
+2446 2032 58708
+2447 2032 64713
+2451 2032 44291
+2452 2032 34777
+2453 2032 56271
+2454 2032 54048
+2455 2032 36874
+2456 2032 36874
+2457 2032 5151
+2458 2032 5151
+2460 2032 43338
+2461 2032 41249
+2462 2032 14476
+2463 2032 39912
+2464 2032 13947
+2465 2032 42594
+2466 2032 36951
+2467 2032 36951
+2468 2032 45836
+2470 2032 12714
+2471 2032 52288
+2472 2032 12519
+2473 2032 10233
+2474 2032 50336
+2475 2032 7742
+2476 2032 26371
+2477 2032 26371
+2478 2032 51450
+2479 2032 13424
+2481 2032 27645
+2482 2032 1425
+2483 2032 47877
+2484 2032 54884
+2485 2032 23461
+2486 2032 15719
+2487 2032 56637
+2488 2032 56637
+2489 2032 61344
+2490 2032 39822
+2491 2032 20797
+2493 2032 27701
+2494 2032 18542
+2495 2032 36431
+2496 2032 64240
+2497 2032 12092
+2498 2032 63424
+2499 2032 29840
+2500 2032 29840
+2501 2032 2867
+2502 2032 34253
+2503 2032 35998
+2504 2032 23318
+2505 2032 25837
+2506 2032 13444
+2507 2032 32859
+2508 2032 58343
+2509 2032 20495
+2510 2032 54092
+2511 2032 61429
+4543 2032 27852657
+1964 2033 1
+2497 2033 65520
+4544 2033 27852657
+1965 2034 1
+2311 2034 32475
+2312 2034 32475
+2313 2034 57552
+2314 2034 57552
+2316 2034 29212
+2317 2034 29212
+2318 2034 29212
+2319 2034 44899
+2320 2034 50853
+2321 2034 18378
+2322 2034 58761
+2323 2034 58761
+2324 2034 58761
+2326 2034 21128
+2327 2034 21128
+2328 2034 11501
+2329 2034 30393
+2330 2034 19629
+2331 2034 1251
+2332 2034 3800
+2333 2034 3800
+2334 2034 3800
+2335 2034 3800
+2337 2034 54778
+2338 2034 7871
+2339 2034 28566
+2340 2034 40174
+2341 2034 19153
+2342 2034 17902
+2398 2034 28310
+2399 2034 28310
+2400 2034 28310
+2401 2034 28310
+2402 2034 28310
+2404 2034 19505
+2405 2034 45809
+2406 2034 53833
+2407 2034 41667
+2408 2034 61911
+2419 2034 44009
+2476 2034 18240
+2477 2034 18240
+2478 2034 18240
+2479 2034 18240
+2480 2034 18240
+2481 2034 18240
+2482 2034 33572
+2483 2034 13267
+2484 2034 30582
+2485 2034 10392
+2486 2034 23971
+2497 2034 55942
+2509 2034 44121
+4545 2034 27852657
+1966 2035 1
+1976 2035 1
+2031 2035 23577
+2034 2035 45364
+2035 2035 45364
+2036 2035 45364
+2037 2035 56570
+2038 2035 56570
+2039 2035 56570
+2040 2035 56570
+2043 2035 33657
+2044 2035 1392
+2045 2035 1392
+2046 2035 46756
+2047 2035 1392
+2048 2035 56570
+2049 2035 56570
+2050 2035 56570
+2051 2035 56570
+2052 2035 56570
+2054 2035 33657
+2055 2035 1392
+2056 2035 1392
+2057 2035 46756
+2058 2035 2784
+2059 2035 1392
+2373 2035 23897
+2374 2035 23897
+2375 2035 23897
+2376 2035 23897
+2379 2035 35717
+2380 2035 35717
+2382 2035 34288
+2383 2035 34288
+2384 2035 34288
+2386 2035 32105
+2387 2035 32105
+2388 2035 60300
+2389 2035 60300
+2390 2035 60300
+2392 2035 16149
+2393 2035 16149
+2395 2035 15894
+2396 2035 45584
+2397 2035 13479
+2398 2035 31382
+2399 2035 31382
+2400 2035 31382
+2401 2035 31382
+2403 2035 62286
+2404 2035 5379
+2405 2035 5719
+2406 2035 37885
+2407 2035 17826
+2408 2035 4347
+2409 2035 3794
+2410 2035 3794
+2411 2035 3794
+2412 2035 3794
+2413 2035 3794
+2415 2035 13742
+2416 2035 39921
+2417 2035 34004
+2418 2035 656
+2419 2035 25904
+2420 2035 21557
+2487 2035 22123
+2488 2035 22123
+2489 2035 22123
+2490 2035 22123
+2491 2035 22123
+2492 2035 22123
+2494 2035 18297
+2495 2035 58891
+2496 2035 7840
+2497 2035 2509
+2498 2035 25451
+2510 2035 39980
+4546 2035 27852657
+1967 2036 1
+1968 2036 1
+1969 2036 1
+1970 2036 1
+1980 2036 1
+2033 2036 1
+2044 2036 65520
+2045 2036 65520
+2047 2036 65520
+2055 2036 65520
+2056 2036 65520
+2057 2036 65520
+2058 2036 65519
+2059 2036 65520
+2338 2036 65515
+2339 2036 65515
+2340 2036 65515
+2341 2036 65515
+2342 2036 65515
+2385 2036 12283
+2392 2036 33143
+2394 2036 24562
+2395 2036 18449
+2396 2036 52282
+2397 2036 52282
+2398 2036 36844
+2399 2036 36844
+2400 2036 36844
+2401 2036 36844
+2404 2036 12434
+2405 2036 56056
+2406 2036 41071
+2407 2036 59553
+2408 2036 64597
+2409 2036 36844
+2410 2036 36844
+2411 2036 36844
+2412 2036 36844
+2413 2036 36844
+2415 2036 12440
+2416 2036 31490
+2417 2036 16505
+2418 2036 63653
+2419 2036 2267
+2420 2036 3185
+2451 2036 45965
+2452 2036 45965
+2453 2036 45965
+2454 2036 45965
+2455 2036 1445
+2456 2036 1445
+2457 2036 22593
+2458 2036 22593
+2460 2036 5677
+2461 2036 5677
+2462 2036 5677
+2463 2036 48053
+2464 2036 38379
+2465 2036 36934
+2466 2036 658
+2467 2036 658
+2468 2036 658
+2470 2036 22535
+2471 2036 22535
+2472 2036 17666
+2473 2036 11634
+2474 2036 64613
+2475 2036 27679
+2476 2036 39529
+2477 2036 39529
+2478 2036 39529
+2479 2036 39529
+2481 2036 39789
+2482 2036 5305
+2483 2036 11982
+2484 2036 13883
+2485 2036 45665
+2486 2036 17984
+2487 2036 13502
+2488 2036 13502
+2489 2036 13502
+2490 2036 13502
+2491 2036 13502
+2493 2036 23510
+2494 2036 11933
+2495 2036 24615
+2496 2036 61868
+2497 2036 42761
+2498 2036 51395
+2499 2036 1052
+2500 2036 1052
+2501 2036 1052
+2502 2036 1052
+2503 2036 1052
+2504 2036 1052
+2505 2036 41936
+2506 2036 11793
+2507 2036 24945
+2508 2036 45197
+2509 2036 10455
+2510 2036 40688
+2511 2036 34910
+4547 2036 27852657
+1968 2037 1
+1979 2037 4094
+1980 2037 21840
+1981 2037 21840
+2045 2037 4094
+2046 2037 21840
+2047 2037 43680
+2058 2037 21840
+2337 2037 15277
+2338 2037 61009
+2339 2037 46213
+2340 2037 28692
+2341 2037 36777
+2342 2037 36777
+2408 2037 43135
+2416 2037 3971
+2417 2037 26938
+2418 2037 13671
+2419 2037 620
+2420 2037 59783
+2455 2037 866
+2456 2037 866
+2457 2037 31578
+2458 2037 31578
+2460 2037 64331
+2461 2037 64331
+2462 2037 64331
+2463 2037 51480
+2464 2037 36966
+2465 2037 36100
+2466 2037 14816
+2467 2037 14816
+2468 2037 14816
+2470 2037 16381
+2471 2037 16381
+2472 2037 58199
+2473 2037 30567
+2474 2037 34207
+2475 2037 63628
+2476 2037 30829
+2477 2037 30829
+2478 2037 30829
+2479 2037 30829
+2481 2037 44611
+2482 2037 32093
+2483 2037 10890
+2484 2037 64668
+2485 2037 48946
+2486 2037 8763
+2487 2037 29837
+2488 2037 29837
+2489 2037 29837
+2490 2037 29837
+2491 2037 29837
+2493 2037 27602
+2494 2037 54015
+2495 2037 41533
+2496 2037 50913
+2497 2037 63462
+2498 2037 12005
+2499 2037 3833
+2500 2037 3833
+2501 2037 3833
+2502 2037 3833
+2503 2037 3833
+2504 2037 3833
+2505 2037 3571
+2506 2037 27115
+2507 2037 35243
+2508 2037 29234
+2509 2037 28753
+2510 2037 22648
+2511 2037 13152
+4548 2037 27852657
+1969 2038 1
+1970 2038 1
+1979 2038 61427
+1980 2038 43682
+1981 2038 43681
+2045 2038 61427
+2046 2038 43682
+2047 2038 21841
+2058 2038 43681
+2337 2038 28141
+2338 2038 59669
+2339 2038 59669
+2340 2038 42115
+2341 2038 6447
+2342 2038 6447
+2408 2038 26139
+2416 2038 25896
+2417 2038 51656
+2418 2038 17569
+2419 2038 1025
+2420 2038 46854
+2455 2038 35847
+2456 2038 35847
+2457 2038 36847
+2458 2038 36847
+2460 2038 30169
+2461 2038 30169
+2462 2038 30169
+2463 2038 49072
+2464 2038 3209
+2465 2038 32883
+2466 2038 56375
+2467 2038 56375
+2468 2038 56375
+2470 2038 14758
+2471 2038 14758
+2472 2038 62003
+2473 2038 12571
+2474 2038 44684
+2475 2038 11801
+2476 2038 14446
+2477 2038 14446
+2478 2038 14446
+2479 2038 14446
+2481 2038 10481
+2482 2038 26419
+2483 2038 17616
+2484 2038 16122
+2485 2038 40501
+2486 2038 28630
+2487 2038 61758
+2488 2038 61758
+2489 2038 61758
+2490 2038 61758
+2491 2038 61758
+2493 2038 16057
+2494 2038 28884
+2495 2038 44511
+2496 2038 1254
+2497 2038 52269
+2498 2038 12157
+2499 2038 16924
+2500 2038 16924
+2501 2038 16924
+2502 2038 16924
+2503 2038 16924
+2504 2038 16924
+2505 2038 31308
+2506 2038 58136
+2507 2038 23568
+2508 2038 7470
+2509 2038 60252
+2510 2038 55297
+2511 2038 4023
+4549 2038 27852657
+1970 2039 1
+1980 2039 1
+2035 2039 22394
+2036 2039 30560
+2046 2039 38767
+2057 2039 38766
+2256 2039 51103
+2257 2039 51103
+2258 2039 28487
+2259 2039 28487
+2261 2039 23802
+2262 2039 23802
+2263 2039 23802
+2264 2039 54464
+2265 2039 13107
+2266 2039 27525
+2267 2039 10270
+2268 2039 10270
+2269 2039 10270
+2271 2039 58306
+2272 2039 58306
+2273 2039 42963
+2274 2039 5339
+2275 2039 7814
+2276 2039 45810
+2322 2039 64788
+2323 2039 64788
+2324 2039 64788
+2325 2039 64788
+2327 2039 25159
+2328 2039 48831
+2329 2039 63733
+2330 2039 16421
+2331 2039 23915
+2341 2039 43626
+2388 2039 50232
+2389 2039 50232
+2390 2039 50232
+2391 2039 50232
+2392 2039 50232
+2394 2039 14825
+2395 2039 19291
+2396 2039 28248
+2397 2039 20311
+2407 2039 56729
+2418 2039 29215
+2466 2039 22690
+2467 2039 22690
+2468 2039 22690
+2469 2039 22690
+2470 2039 22690
+2471 2039 22690
+2472 2039 43196
+2473 2039 59453
+2474 2039 42016
+2475 2039 61007
+2485 2039 27332
+2496 2039 13774
+2508 2039 6843
+4550 2039 27852657
+1971 2040 1
+2048 2040 65520
+2337 2040 36909
+2338 2040 728
+2339 2040 728
+2340 2040 728
+2341 2040 728
+2342 2040 728
+2408 2040 62873
+2416 2040 6901
+2417 2040 61149
+2418 2040 47269
+2419 2040 35277
+2420 2040 38653
+2446 2040 58690
+2453 2040 54352
+2454 2040 62305
+2455 2040 39592
+2456 2040 39592
+2457 2040 40359
+2458 2040 9333
+2460 2040 42050
+2461 2040 65054
+2462 2040 44982
+2463 2040 47170
+2464 2040 10656
+2465 2040 36585
+2466 2040 37372
+2467 2040 50408
+2468 2040 50408
+2470 2040 52272
+2471 2040 38682
+2472 2040 3071
+2473 2040 17712
+2474 2040 55040
+2475 2040 18455
+2476 2040 18758
+2477 2040 29036
+2478 2040 29036
+2479 2040 29036
+2481 2040 39895
+2482 2040 41989
+2483 2040 35189
+2484 2040 19326
+2485 2040 62197
+2486 2040 1978
+2487 2040 62568
+2488 2040 2884
+2489 2040 2884
+2490 2040 2884
+2491 2040 44983
+2493 2040 24347
+2494 2040 40132
+2495 2040 31021
+2496 2040 25704
+2497 2040 28520
+2498 2040 24385
+2499 2040 42385
+2500 2040 2895
+2501 2040 2895
+2502 2040 2895
+2503 2040 43602
+2504 2040 432
+2505 2040 47114
+2506 2040 2757
+2507 2040 16511
+2508 2040 7364
+2509 2040 60716
+2510 2040 21681
+2511 2040 52925
+4551 2040 27852657
+1972 2041 1
+2049 2041 65520
+2334 2041 63403
+2337 2041 53596
+2338 2041 5810
+2339 2041 5810
+2340 2041 5810
+2341 2041 5810
+2342 2041 5810
+2408 2041 23290
+2416 2041 54183
+2417 2041 24771
+2418 2041 58245
+2419 2041 7635
+2420 2041 55676
+2446 2041 39775
+2452 2041 57590
+2453 2041 60297
+2454 2041 44227
+2455 2041 28171
+2456 2041 28171
+2457 2041 55502
+2458 2041 62465
+2460 2041 13725
+2461 2041 56142
+2462 2041 31922
+2463 2041 36254
+2464 2041 45152
+2465 2041 16981
+2466 2041 31329
+2467 2041 20115
+2468 2041 45797
+2470 2041 25118
+2471 2041 8914
+2472 2041 1803
+2473 2041 52036
+2474 2041 47725
+2475 2041 30744
+2476 2041 28557
+2477 2041 20853
+2478 2041 27563
+2479 2041 1690
+2481 2041 41838
+2482 2041 5750
+2483 2041 36074
+2484 2041 36577
+2485 2041 50445
+2486 2041 4777
+2487 2041 4372
+2488 2041 42802
+2489 2041 34829
+2490 2041 10929
+2491 2041 55564
+2493 2041 14089
+2494 2041 40743
+2495 2041 32284
+2496 2041 43598
+2497 2041 64796
+2498 2041 37675
+2499 2041 61161
+2500 2041 41347
+2501 2041 50642
+2502 2041 54493
+2503 2041 16275
+2504 2041 41198
+2505 2041 34889
+2506 2041 25994
+2507 2041 65177
+2508 2041 36563
+2509 2041 63173
+2510 2041 21305
+2511 2041 33842
+4552 2041 27852657
+1973 2042 1
+2050 2042 65520
+2334 2042 2118
+2337 2042 42254
+2338 2042 59711
+2339 2042 59711
+2340 2042 59711
+2341 2042 59711
+2342 2042 59711
+2408 2042 59711
+2416 2042 52501
+2417 2042 32161
+2418 2042 27551
+2419 2042 51816
+2420 2042 51816
+2446 2042 17312
+2452 2042 14781
+2453 2042 49475
+2454 2042 9252
+2455 2042 29999
+2456 2042 29999
+2457 2042 1532
+2458 2042 53927
+2460 2042 13964
+2461 2042 46306
+2462 2042 17608
+2463 2042 34889
+2464 2042 60907
+2465 2042 30908
+2466 2042 44518
+2467 2042 52330
+2468 2042 26648
+2470 2042 29077
+2471 2042 62501
+2472 2042 7016
+2473 2042 33519
+2474 2042 62924
+2475 2042 32016
+2476 2042 25569
+2477 2042 34088
+2478 2042 27378
+2479 2042 58256
+2481 2042 62966
+2482 2042 35155
+2483 2042 22493
+2484 2042 60797
+2485 2042 62768
+2486 2042 4001
+2487 2042 59975
+2488 2042 59684
+2489 2042 2136
+2490 2042 17733
+2491 2042 53765
+2493 2042 30751
+2494 2042 14588
+2495 2042 9371
+2496 2042 49278
+2497 2042 12911
+2498 2042 28381
+2499 2042 44334
+2500 2042 58979
+2501 2042 49684
+2502 2042 24414
+2503 2042 56780
+2504 2042 55607
+2505 2042 39597
+2506 2042 19006
+2507 2042 25097
+2508 2042 24853
+2509 2042 40323
+2510 2042 13086
+2511 2042 62336
+4553 2042 27852657
+1974 2043 1
+2051 2043 65520
+2052 2043 65520
+2374 2043 6403
+2375 2043 27898
+2383 2043 36645
+2390 2043 43995
+2392 2043 19348
+2395 2043 12050
+2396 2043 12050
+2397 2043 12050
+2398 2043 41908
+2399 2043 41908
+2400 2043 20382
+2401 2043 6172
+2404 2043 31573
+2405 2043 25310
+2406 2043 25310
+2407 2043 37360
+2408 2043 25310
+2409 2043 58297
+2410 2043 58297
+2411 2043 36771
+2412 2043 38950
+2413 2043 173
+2415 2043 31573
+2416 2043 25310
+2417 2043 25310
+2418 2043 37360
+2419 2043 50620
+2420 2043 25310
+2445 2043 28307
+2446 2043 54402
+2447 2043 36310
+2451 2043 46899
+2452 2043 56413
+2453 2043 16987
+2454 2043 34912
+2455 2043 25673
+2456 2043 25673
+2457 2043 62140
+2458 2043 62140
+2460 2043 56537
+2461 2043 21661
+2462 2043 20643
+2463 2043 41598
+2464 2043 42657
+2465 2043 16984
+2466 2043 4902
+2467 2043 4902
+2468 2043 19063
+2470 2043 51908
+2471 2043 18145
+2472 2043 27718
+2473 2043 37822
+2474 2043 20726
+2475 2043 3742
+2476 2043 50190
+2477 2043 50190
+2478 2043 64351
+2479 2043 36856
+2481 2043 22609
+2482 2043 20593
+2483 2043 884
+2484 2043 38795
+2485 2043 5850
+2486 2043 2108
+2487 2043 7803
+2488 2043 7803
+2489 2043 9502
+2490 2043 31024
+2491 2043 47686
+2493 2043 28077
+2494 2043 11543
+2495 2043 31014
+2496 2043 19757
+2497 2043 5055
+2498 2043 43901
+2499 2043 63182
+2500 2043 63182
+2501 2043 61105
+2502 2043 29719
+2503 2043 34011
+2504 2043 49955
+2505 2043 28563
+2506 2043 52572
+2507 2043 35553
+2508 2043 26343
+2509 2043 34757
+2510 2043 29662
+2511 2043 6227
+4554 2043 27852657
+1975 2044 1
+2497 2044 65520
+4555 2044 27852657
+1976 2045 1
+1977 2045 8550
+1978 2045 46662
+1979 2045 24909
+1980 2045 24248
+1981 2045 24248
+2047 2045 226
+2056 2045 50239
+2057 2045 3817
+2058 2045 25415
+2059 2045 49437
+2377 2045 36940
+2378 2045 36940
+2379 2045 18261
+2380 2045 18261
+2382 2045 26143
+2383 2045 26143
+2384 2045 26143
+2385 2045 29777
+2386 2045 37323
+2387 2045 383
+2388 2045 16025
+2389 2045 16025
+2390 2045 16025
+2392 2045 35106
+2393 2045 35106
+2394 2045 46994
+2395 2045 63319
+2396 2045 48395
+2397 2045 48012
+2398 2045 4949
+2399 2045 4949
+2400 2045 4949
+2401 2045 4949
+2403 2045 49649
+2404 2045 24956
+2405 2045 43993
+2406 2045 31659
+2407 2045 45429
+2408 2045 55829
+2409 2045 33594
+2410 2045 33594
+2411 2045 33594
+2412 2045 33594
+2413 2045 33594
+2415 2045 47708
+2416 2045 19185
+2417 2045 16063
+2418 2045 55255
+2419 2045 61852
+2420 2045 27244
+2487 2045 10651
+2488 2045 10651
+2489 2045 10651
+2490 2045 10651
+2491 2045 10651
+2492 2045 10651
+2493 2045 8832
+2494 2045 42979
+2495 2045 51802
+2496 2045 31688
+2497 2045 6548
+2498 2045 63951
+2510 2045 40549
+4556 2045 27852657
+1977 2046 1
+1978 2046 1
+1979 2046 1
+1980 2046 1
+1981 2046 1
+2047 2046 1
+2054 2046 65520
+2055 2046 65520
+2056 2046 65520
+2057 2046 65520
+2058 2046 65520
+2059 2046 65520
+2338 2046 6
+2339 2046 6
+2340 2046 6
+2341 2046 6
+2342 2046 6
+2385 2046 16389
+2392 2046 51087
+2394 2046 16
+2395 2046 59866
+2396 2046 29440
+2397 2046 29440
+2398 2046 9809
+2399 2046 9809
+2400 2046 9809
+2401 2046 9809
+2404 2046 48100
+2405 2046 43260
+2406 2046 10932
+2407 2046 5230
+2408 2046 49506
+2409 2046 9809
+2410 2046 9809
+2411 2046 9809
+2412 2046 9809
+2413 2046 9809
+2415 2046 64483
+2416 2046 59643
+2417 2046 27315
+2418 2046 38002
+2419 2046 49861
+2420 2046 361
+2451 2046 43583
+2452 2046 43583
+2453 2046 43583
+2454 2046 43583
+2455 2046 32693
+2456 2046 32693
+2457 2046 13973
+2458 2046 13973
+2460 2046 41495
+2461 2046 41495
+2462 2046 41495
+2463 2046 4091
+2464 2046 17677
+2465 2046 50505
+2466 2046 18019
+2467 2046 18019
+2468 2046 18019
+2470 2046 48948
+2471 2046 48948
+2472 2046 24577
+2473 2046 61491
+2474 2046 35052
+2475 2046 50068
+2476 2046 37631
+2477 2046 37631
+2478 2046 37631
+2479 2046 37631
+2481 2046 55670
+2482 2046 34643
+2483 2046 49085
+2484 2046 40208
+2485 2046 10077
+2486 2046 25532
+2487 2046 62454
+2488 2046 62454
+2489 2046 62454
+2490 2046 62454
+2491 2046 62454
+2493 2046 50563
+2494 2046 46347
+2495 2046 36640
+2496 2046 16432
+2497 2046 31133
+2498 2046 46556
+2499 2046 64855
+2500 2046 64855
+2501 2046 64855
+2502 2046 64855
+2503 2046 64855
+2504 2046 64855
+2505 2046 28663
+2506 2046 51679
+2507 2046 33548
+2508 2046 54222
+2509 2046 49832
+2510 2046 689
+2511 2046 2143
+4557 2046 27852657
+1978 2047 1
+1979 2047 1
+1980 2047 1
+1981 2047 1
+2047 2047 1
+2055 2047 65520
+2056 2047 65520
+2057 2047 65520
+2058 2047 65520
+2059 2047 65520
+2337 2047 22075
+2338 2047 39816
+2339 2047 54612
+2340 2047 26562
+2341 2047 34292
+2342 2047 34292
+2408 2047 33113
+2416 2047 40780
+2417 2047 35000
+2418 2047 18139
+2419 2047 26496
+2420 2047 27675
+2455 2047 64035
+2456 2047 64035
+2457 2047 485
+2458 2047 485
+2460 2047 63420
+2461 2047 63420
+2462 2047 63420
+2463 2047 1718
+2464 2047 14586
+2465 2047 16072
+2466 2047 11100
+2467 2047 11100
+2468 2047 11100
+2470 2047 186
+2471 2047 186
+2472 2047 43732
+2473 2047 14471
+2474 2047 56333
+2475 2047 40261
+2476 2047 5779
+2477 2047 5779
+2478 2047 5779
+2479 2047 5779
+2481 2047 20702
+2482 2047 35927
+2483 2047 51315
+2484 2047 5687
+2485 2047 2298
+2486 2047 31130
+2487 2047 7017
+2488 2047 7017
+2489 2047 7017
+2490 2047 7017
+2491 2047 7017
+2493 2047 35176
+2494 2047 8652
+2495 2047 29360
+2496 2047 32182
+2497 2047 45795
+2498 2047 4545
+2499 2047 14635
+2500 2047 14635
+2501 2047 14635
+2502 2047 14635
+2503 2047 14635
+2504 2047 14635
+2505 2047 32883
+2506 2047 56281
+2507 2047 61777
+2508 2047 38969
+2509 2047 65317
+2510 2047 33756
+2511 2047 14719
+4558 2047 27852657
+1979 2048 1
+2045 2048 10234
+2046 2048 10099
+2047 2048 32024
+2058 2048 32024
+2311 2048 19221
+2312 2048 19221
+2313 2048 56103
+2314 2048 56103
+2316 2048 5114
+2317 2048 5114
+2318 2048 5114
+2319 2048 40240
+2320 2048 9875
+2321 2048 56175
+2322 2048 20870
+2323 2048 20870
+2324 2048 20870
+2326 2048 36137
+2327 2048 36137
+2328 2048 40583
+2329 2048 48282
+2330 2048 4148
+2331 2048 13494
+2332 2048 41383
+2333 2048 41383
+2334 2048 41383
+2335 2048 41383
+2337 2048 63516
+2338 2048 13984
+2339 2048 61791
+2340 2048 65209
+2341 2048 5735
+2342 2048 57762
+2398 2048 23287
+2399 2048 23287
+2400 2048 23287
+2401 2048 23287
+2402 2048 23287
+2404 2048 25986
+2405 2048 53399
+2406 2048 38715
+2407 2048 16183
+2408 2048 51180
+2419 2048 35668
+2476 2048 41388
+2477 2048 41388
+2478 2048 41388
+2479 2048 41388
+2480 2048 41388
+2481 2048 41388
+2482 2048 32646
+2483 2048 37955
+2484 2048 10681
+2485 2048 27804
+2486 2048 33471
+2497 2048 4501
+2509 2048 35102
+4559 2048 27852657
+1980 2049 1
+1981 2049 1
+2045 2049 22394
+2046 2049 30560
+2047 2049 38767
+2058 2049 38766
+2311 2049 51103
+2312 2049 51103
+2313 2049 28487
+2314 2049 28487
+2316 2049 23802
+2317 2049 23802
+2318 2049 23802
+2319 2049 54464
+2320 2049 13107
+2321 2049 27525
+2322 2049 10270
+2323 2049 10270
+2324 2049 10270
+2326 2049 58306
+2327 2049 58306
+2328 2049 42963
+2329 2049 5339
+2330 2049 7814
+2331 2049 45810
+2332 2049 64788
+2333 2049 64788
+2334 2049 64788
+2335 2049 64788
+2337 2049 25159
+2338 2049 48831
+2339 2049 63733
+2340 2049 16421
+2341 2049 23915
+2342 2049 43626
+2398 2049 50232
+2399 2049 50232
+2400 2049 50232
+2401 2049 50232
+2402 2049 50232
+2404 2049 14825
+2405 2049 19291
+2406 2049 28248
+2407 2049 20311
+2408 2049 56729
+2419 2049 29215
+2476 2049 22690
+2477 2049 22690
+2478 2049 22690
+2479 2049 22690
+2480 2049 22690
+2481 2049 22690
+2482 2049 43196
+2483 2049 59453
+2484 2049 42016
+2485 2049 61007
+2486 2049 27332
+2497 2049 13774
+2509 2049 6843
+4560 2049 27852657
+1982 2050 1
+2018 2050 65236
+2027 2050 28761
+2037 2050 61812
+2048 2050 61812
+2124 2050 33583
+2151 2050 34019
+2156 2050 55060
+2162 2050 18946
+2169 2050 18946
+2177 2050 47951
+2178 2050 10970
+2183 2050 8763
+2187 2050 29560
+2192 2050 53750
+2198 2050 22681
+2205 2050 23705
+2213 2050 4759
+2222 2050 42040
+2223 2050 12988
+2225 2050 12988
+2232 2050 27747
+2237 2050 58475
+2243 2050 34096
+2250 2050 46096
+2258 2050 39313
+2267 2050 34554
+2277 2050 40263
+2278 2050 48855
+2280 2050 48855
+2283 2050 48855
+2292 2050 57443
+2298 2050 12346
+2305 2050 36716
+2313 2050 65213
+2322 2050 57689
+2332 2050 23135
+2343 2050 62412
+2344 2050 53865
+2346 2050 53865
+2349 2050 53865
+2353 2050 58968
+2364 2050 5365
+2371 2050 26475
+2379 2050 36471
+2388 2050 31482
+2398 2050 51473
+2409 2050 26593
+2421 2050 63484
+2422 2050 9590
+2424 2050 9590
+2427 2050 9590
+2431 2050 63951
+2436 2050 60315
+2442 2050 53236
+2449 2050 51935
+2457 2050 27002
+2466 2050 60019
+2476 2050 33586
+2487 2050 20860
+2499 2050 35203
+4561 2050 27852657
+1983 2051 1
+1984 2051 1
+1987 2051 65520
+1991 2051 1
+1994 2051 38920
+1995 2051 53132
+1996 2051 53131
+2029 2051 26090
+2031 2051 35488
+2034 2051 4272
+2035 2051 4272
+2036 2051 4272
+2037 2051 62057
+2038 2051 62057
+2039 2051 22626
+2040 2051 36172
+2043 2051 49168
+2044 2051 50994
+2045 2051 50994
+2046 2051 55266
+2047 2051 50994
+2048 2051 62057
+2049 2051 62057
+2050 2051 22626
+2051 2051 36172
+2052 2051 36172
+2054 2051 49168
+2055 2051 50994
+2056 2051 50994
+2057 2051 55266
+2058 2051 36467
+2059 2051 50994
+2344 2051 4749
+2345 2051 4749
+2346 2051 63763
+2347 2051 55198
+2348 2051 50449
+2349 2051 51592
+2350 2051 18479
+2351 2051 43907
+2352 2051 58979
+2353 2051 51592
+2354 2051 18479
+2355 2051 11605
+2356 2051 20756
+2357 2051 27298
+2358 2051 51592
+2359 2051 18479
+2360 2051 11540
+2361 2051 32228
+2362 2051 26785
+2363 2051 65008
+2366 2051 47170
+2367 2051 30347
+2368 2051 51168
+2369 2051 9841
+2373 2051 57477
+2374 2051 40654
+2375 2051 61475
+2376 2051 40969
+2377 2051 26238
+2378 2051 26238
+2379 2051 46938
+2380 2051 23695
+2382 2051 21364
+2383 2051 42185
+2384 2051 4856
+2385 2051 37775
+2386 2051 58555
+2387 2051 32317
+2388 2051 23122
+2389 2051 65400
+2390 2051 10323
+2392 2051 17988
+2393 2051 27829
+2394 2051 37710
+2395 2051 54681
+2396 2051 32236
+2397 2051 65440
+2398 2051 10953
+2399 2051 53231
+2400 2051 63675
+2401 2051 14806
+2403 2051 10132
+2404 2051 5113
+2405 2051 64181
+2406 2051 37384
+2407 2051 11762
+2408 2051 11843
+2409 2051 18082
+2410 2051 55794
+2411 2051 43272
+2412 2051 63575
+2413 2051 46113
+2415 2051 52087
+2416 2051 48126
+2417 2051 63124
+2418 2051 22566
+2419 2051 29060
+2420 2051 17217
+2487 2051 7635
+2488 2051 45623
+2489 2051 11333
+2490 2051 12192
+2491 2051 46271
+2492 2051 11934
+2493 2051 37742
+2494 2051 15814
+2495 2051 36828
+2496 2051 4073
+2497 2051 6274
+2498 2051 55966
+2510 2051 64803
+4562 2051 27852657
+1984 2052 1
+2011 2052 24057
+2019 2052 12976
+2028 2052 11399
+2038 2052 37016
+2049 2052 37016
+2125 2052 26048
+2152 2052 46388
+2157 2052 43950
+2163 2052 51296
+2170 2052 51296
+2178 2052 41602
+2179 2052 42448
+2184 2052 29843
+2188 2052 19040
+2193 2052 30820
+2199 2052 1958
+2206 2052 42312
+2214 2052 56537
+2223 2052 45962
+2224 2052 31548
+2226 2052 1116
+2233 2052 31003
+2238 2052 40369
+2244 2052 54244
+2251 2052 13407
+2259 2052 26881
+2268 2052 35865
+2278 2052 7473
+2279 2052 34498
+2281 2052 33589
+2284 2052 33589
+2293 2052 16837
+2299 2052 9756
+2306 2052 23986
+2314 2052 32251
+2323 2052 43750
+2333 2052 7885
+2344 2052 9630
+2345 2052 13707
+2347 2052 62827
+2350 2052 62827
+2354 2052 22575
+2365 2052 45660
+2372 2052 62282
+2380 2052 47785
+2389 2052 10344
+2399 2052 40070
+2410 2052 8929
+2422 2052 24502
+2423 2052 22358
+2425 2052 35520
+2428 2052 35520
+2432 2052 24632
+2437 2052 4113
+2443 2052 38518
+2450 2052 56275
+2458 2052 15069
+2467 2052 7201
+2477 2052 33560
+2488 2052 11882
+2500 2052 15745
+4563 2052 27852657
+1985 2053 1
+1994 2053 4605
+1995 2053 42704
+1996 2053 42704
+2029 2053 3574
+2031 2053 25902
+2034 2053 6722
+2035 2053 6722
+2036 2053 6722
+2037 2053 26451
+2038 2053 26451
+2039 2053 30025
+2040 2053 41612
+2043 2053 6937
+2044 2053 64227
+2045 2053 64227
+2046 2053 5428
+2047 2053 64227
+2048 2053 26451
+2049 2053 26451
+2050 2053 30025
+2051 2053 41612
+2052 2053 41612
+2054 2053 6937
+2055 2053 64227
+2056 2053 64227
+2057 2053 5428
+2058 2053 62933
+2059 2053 64227
+2344 2053 34286
+2345 2053 34286
+2346 2053 6262
+2347 2053 47632
+2348 2053 13346
+2349 2053 17482
+2350 2053 25999
+2351 2053 18243
+2352 2053 4897
+2353 2053 17482
+2354 2053 25999
+2355 2053 31614
+2356 2053 4844
+2357 2053 65468
+2358 2053 17482
+2359 2053 25999
+2360 2053 31297
+2361 2053 56760
+2362 2053 2360
+2363 2053 2413
+2366 2053 3241
+2367 2053 17966
+2368 2053 26771
+2369 2053 61098
+2373 2053 24275
+2374 2053 39000
+2375 2053 47805
+2376 2053 25416
+2377 2053 16071
+2378 2053 16071
+2379 2053 31342
+2380 2053 19769
+2382 2053 365
+2383 2053 9170
+2384 2053 1506
+2385 2053 2783
+2386 2053 8364
+2387 2053 57814
+2388 2053 33131
+2389 2053 21558
+2390 2053 20341
+2392 2053 16157
+2393 2053 11734
+2394 2053 2466
+2395 2053 2575
+2396 2053 59435
+2397 2053 1621
+2398 2053 57449
+2399 2053 45876
+2400 2053 44659
+2401 2053 21767
+2403 2053 50421
+2404 2053 44088
+2405 2053 64026
+2406 2053 58333
+2407 2053 33170
+2408 2053 31549
+2409 2053 58534
+2410 2053 36904
+2411 2053 51056
+2412 2053 23182
+2413 2053 27548
+2415 2053 38309
+2416 2053 51248
+2417 2053 52823
+2418 2053 2195
+2419 2053 51002
+2420 2053 19453
+2487 2053 51538
+2488 2053 53015
+2489 2053 39410
+2490 2053 47960
+2491 2053 47974
+2492 2053 38462
+2493 2053 64111
+2494 2053 33779
+2495 2053 27397
+2496 2053 39016
+2497 2053 42694
+2498 2053 27564
+2510 2053 64038
+4564 2053 27852657
+1986 2054 1
+1987 2054 1
+1991 2054 65520
+1994 2054 40189
+1995 2054 1517
+1996 2054 1518
+2029 2054 19928
+2031 2054 7470
+2034 2054 34221
+2035 2054 34221
+2036 2054 34221
+2037 2054 55073
+2038 2054 55073
+2039 2054 9480
+2040 2054 42249
+2043 2054 43435
+2044 2054 30179
+2045 2054 30179
+2046 2054 64400
+2047 2054 30179
+2048 2054 55073
+2049 2054 55073
+2050 2054 9480
+2051 2054 42249
+2052 2054 42249
+2054 2054 43435
+2055 2054 30179
+2056 2054 30179
+2057 2054 64400
+2058 2054 60358
+2059 2054 30179
+2344 2054 49750
+2345 2054 49750
+2346 2054 47569
+2347 2054 38312
+2348 2054 54083
+2349 2054 42025
+2350 2054 5186
+2351 2054 57319
+2352 2054 3236
+2353 2054 42025
+2354 2054 5186
+2355 2054 60525
+2356 2054 24823
+2357 2054 21587
+2358 2054 42025
+2359 2054 5186
+2360 2054 35664
+2361 2054 5555
+2362 2054 1358
+2363 2054 45292
+2366 2054 58442
+2367 2054 63235
+2368 2054 32217
+2369 2054 3050
+2373 2054 27035
+2374 2054 31828
+2375 2054 810
+2376 2054 6146
+2377 2054 42973
+2378 2054 42973
+2379 2054 12044
+2380 2054 25971
+2382 2054 47641
+2383 2054 16623
+2384 2054 26752
+2385 2054 48566
+2386 2054 38155
+2387 2054 60703
+2388 2054 36601
+2389 2054 50528
+2390 2054 2120
+2392 2054 7346
+2393 2054 10396
+2394 2054 23705
+2395 2054 37214
+2396 2054 5530
+2397 2054 10348
+2398 2054 13062
+2399 2054 26989
+2400 2054 44102
+2401 2054 19067
+2403 2054 62942
+2404 2054 22231
+2405 2054 16689
+2406 2054 61308
+2407 2054 5969
+2408 2054 61142
+2409 2054 55424
+2410 2054 6153
+2411 2054 10688
+2412 2054 41269
+2413 2054 33387
+2415 2054 36956
+2416 2054 34996
+2417 2054 12593
+2418 2054 31595
+2419 2054 16530
+2420 2054 20909
+2487 2054 2418
+2488 2054 16948
+2489 2054 12276
+2490 2054 15738
+2491 2054 50175
+2492 2054 10466
+2493 2054 18808
+2494 2054 16526
+2495 2054 56302
+2496 2054 17581
+2497 2054 26792
+2498 2054 32281
+2510 2054 37278
+4565 2054 27852657
+1987 2055 1
+2012 2055 59224
+2020 2055 61061
+2029 2055 6573
+2039 2055 3081
+2050 2055 3081
+2126 2055 47364
+2149 2055 49506
+2153 2055 21286
+2158 2055 36265
+2164 2055 2181
+2171 2055 2181
+2180 2055 12750
+2181 2055 53860
+2185 2055 27792
+2189 2055 15906
+2194 2055 18024
+2200 2055 54235
+2207 2055 17829
+2215 2055 15648
+2225 2055 5496
+2226 2055 59289
+2227 2055 24200
+2234 2055 65333
+2239 2055 3116
+2245 2055 20322
+2252 2055 32709
+2260 2055 29574
+2269 2055 13926
+2280 2055 7116
+2281 2055 39886
+2282 2055 40795
+2285 2055 27279
+2294 2055 37458
+2300 2055 8195
+2307 2055 41542
+2315 2055 15166
+2324 2055 27403
+2334 2055 13477
+2346 2055 31386
+2347 2055 12700
+2348 2055 29101
+2351 2055 22533
+2355 2055 16110
+2366 2055 18403
+2373 2055 20576
+2381 2055 56873
+2390 2055 28124
+2400 2055 22823
+2411 2055 16419
+2424 2055 6032
+2425 2055 57283
+2426 2055 44121
+2429 2055 26333
+2433 2055 11606
+2438 2055 14547
+2444 2055 8771
+2451 2055 29753
+2459 2055 60249
+2468 2055 46770
+2478 2055 8038
+2489 2055 24293
+2501 2055 49428
+4566 2055 27852657
+1988 2056 1
+1994 2056 41339
+1995 2056 15556
+1996 2056 15556
+2029 2056 43989
+2031 2056 55300
+2034 2056 52563
+2035 2056 52563
+2036 2056 52563
+2037 2056 54924
+2038 2056 54924
+2039 2056 33392
+2040 2056 50994
+2043 2056 20431
+2044 2056 11150
+2045 2056 11150
+2046 2056 63713
+2047 2056 11150
+2048 2056 54924
+2049 2056 54924
+2050 2056 33392
+2051 2056 50994
+2052 2056 50994
+2054 2056 20431
+2055 2056 11150
+2056 2056 11150
+2057 2056 63713
+2058 2056 22300
+2059 2056 11150
+2344 2056 11501
+2345 2056 11501
+2346 2056 420
+2347 2056 25048
+2348 2056 13547
+2349 2056 39309
+2350 2056 23505
+2351 2056 8789
+2352 2056 60763
+2353 2056 50229
+2354 2056 12052
+2355 2056 5700
+2356 2056 16824
+2357 2056 21582
+2358 2056 50229
+2359 2056 12052
+2360 2056 57952
+2361 2056 37241
+2362 2056 50068
+2363 2056 28486
+2366 2056 48025
+2367 2056 43072
+2368 2056 40622
+2369 2056 3984
+2373 2056 47344
+2374 2056 42391
+2375 2056 39941
+2376 2056 853
+2377 2056 52008
+2378 2056 52008
+2379 2056 8729
+2380 2056 31511
+2382 2056 30780
+2383 2056 28330
+2384 2056 49810
+2385 2056 20173
+2386 2056 53706
+2387 2056 1698
+2388 2056 34834
+2389 2056 57616
+2390 2056 34757
+2392 2056 26051
+2393 2056 30035
+2394 2056 6904
+2395 2056 9813
+2396 2056 64796
+2397 2056 63098
+2398 2056 36439
+2399 2056 59221
+2400 2056 36362
+2401 2056 22802
+2403 2056 44236
+2404 2056 63969
+2405 2056 23819
+2406 2056 14948
+2407 2056 4016
+2408 2056 6439
+2409 2056 55813
+2410 2056 44144
+2411 2056 26974
+2412 2056 5002
+2413 2056 16796
+2415 2056 15534
+2416 2056 22426
+2417 2056 27792
+2418 2056 51367
+2419 2056 55534
+2420 2056 49095
+2487 2056 867
+2488 2056 34255
+2489 2056 28912
+2490 2056 48973
+2491 2056 28818
+2492 2056 33494
+2493 2056 50733
+2494 2056 41909
+2495 2056 31481
+2496 2056 48228
+2497 2056 55018
+2498 2056 104
+2510 2056 45063
+4567 2056 27852657
+1989 2057 1
+1994 2057 18281
+1995 2057 24912
+1996 2057 24912
+2029 2057 29373
+2031 2057 37737
+2034 2057 2918
+2035 2057 2918
+2036 2057 2918
+2037 2057 39106
+2038 2057 39106
+2039 2057 2958
+2040 2057 18142
+2043 2057 27204
+2044 2057 28758
+2045 2057 28758
+2046 2057 31676
+2047 2057 28758
+2048 2057 39106
+2049 2057 39106
+2050 2057 2958
+2051 2057 18142
+2052 2057 18142
+2054 2057 27204
+2055 2057 28758
+2056 2057 28758
+2057 2057 31676
+2058 2057 57516
+2059 2057 28758
+2344 2057 31308
+2345 2057 31308
+2346 2057 1423
+2347 2057 17897
+2348 2057 52110
+2349 2057 35647
+2350 2057 27159
+2351 2057 54861
+2352 2057 2751
+2353 2057 35647
+2354 2057 49532
+2355 2057 17151
+2356 2057 41772
+2357 2057 39021
+2358 2057 35647
+2359 2057 49532
+2360 2057 52045
+2361 2057 15007
+2362 2057 34782
+2363 2057 61282
+2366 2057 59520
+2367 2057 46710
+2368 2057 37159
+2369 2057 63562
+2373 2057 13033
+2374 2057 223
+2375 2057 56193
+2376 2057 7524
+2377 2057 49026
+2378 2057 49026
+2379 2057 4638
+2380 2057 17339
+2382 2057 33611
+2383 2057 24060
+2384 2057 28102
+2385 2057 52888
+2386 2057 61315
+2387 2057 12289
+2388 2057 39413
+2389 2057 52114
+2390 2057 19428
+2392 2057 32532
+2393 2057 30573
+2394 2057 22261
+2395 2057 18117
+2396 2057 36620
+2397 2057 24331
+2398 2057 44199
+2399 2057 56900
+2400 2057 24214
+2401 2057 5292
+2403 2057 22258
+2404 2057 54443
+2405 2057 49023
+2406 2057 11793
+2407 2057 9077
+2408 2057 50267
+2409 2057 22928
+2410 2057 8317
+2411 2057 32815
+2412 2057 26156
+2413 2057 3999
+2415 2057 33707
+2416 2057 19069
+2417 2057 18700
+2418 2057 16334
+2419 2057 3776
+2420 2057 19030
+2487 2057 5332
+2488 2057 54271
+2489 2057 12836
+2490 2057 18852
+2491 2057 30569
+2492 2057 37942
+2493 2057 43387
+2494 2057 14176
+2495 2057 54235
+2496 2057 23058
+2497 2057 55144
+2498 2057 47153
+2510 2057 63966
+4568 2057 27852657
+1990 2058 1
+1991 2058 1
+1994 2058 57447
+1995 2058 5371
+1996 2058 5370
+2029 2058 9596
+2031 2058 64265
+2034 2058 48768
+2035 2058 48768
+2036 2058 48768
+2037 2058 18615
+2038 2058 18615
+2039 2058 28211
+2040 2058 31676
+2043 2058 23133
+2044 2058 4960
+2045 2058 4960
+2046 2058 53728
+2047 2058 4960
+2048 2058 18615
+2049 2058 18615
+2050 2058 28211
+2051 2058 31676
+2052 2058 31676
+2054 2058 23133
+2055 2058 4960
+2056 2058 4960
+2057 2058 53728
+2058 2058 9920
+2059 2058 4960
+2344 2058 30878
+2345 2058 30878
+2346 2058 64188
+2347 2058 19977
+2348 2058 54620
+2349 2058 13564
+2350 2058 3620
+2351 2058 45713
+2352 2058 56614
+2353 2058 13564
+2354 2058 3620
+2355 2058 7723
+2356 2058 9512
+2357 2058 18419
+2358 2058 13564
+2359 2058 3620
+2360 2058 37901
+2361 2058 46977
+2362 2058 7942
+2363 2058 55044
+2366 2058 14312
+2367 2058 49012
+2368 2058 1793
+2369 2058 30625
+2373 2058 28171
+2374 2058 62871
+2375 2058 15652
+2376 2058 62786
+2377 2058 64681
+2378 2058 64681
+2379 2058 40375
+2380 2058 48376
+2382 2058 52476
+2383 2058 5257
+2384 2058 21570
+2385 2058 6447
+2386 2058 20600
+2387 2058 21440
+2388 2058 11441
+2389 2058 19442
+2390 2058 5360
+2392 2058 54427
+2393 2058 19531
+2394 2058 36625
+2395 2058 63246
+2396 2058 30822
+2397 2058 9382
+2398 2058 34485
+2399 2058 42486
+2400 2058 28404
+2401 2058 65191
+2403 2058 64867
+2404 2058 44381
+2405 2058 27402
+2406 2058 38793
+2407 2058 54027
+2408 2058 44645
+2409 2058 32798
+2410 2058 42089
+2411 2058 33041
+2412 2058 26134
+2413 2058 15619
+2415 2058 505
+2416 2058 11974
+2417 2058 13127
+2418 2058 9511
+2419 2058 30639
+2420 2058 51515
+2487 2058 39149
+2488 2058 45662
+2489 2058 14070
+2490 2058 18649
+2491 2058 17438
+2492 2058 32997
+2493 2058 12696
+2494 2058 13413
+2495 2058 36863
+2496 2058 3061
+2497 2058 62788
+2498 2058 59003
+2510 2058 61319
+4569 2058 27852657
+1991 2059 1
+2013 2059 47761
+2021 2059 63751
+2030 2059 34851
+2040 2059 37939
+2051 2059 37939
+2127 2059 54862
+2150 2059 16015
+2154 2059 12259
+2159 2059 31238
+2165 2059 51478
+2172 2059 51478
+2183 2059 50978
+2184 2059 53720
+2186 2059 60560
+2190 2059 1875
+2195 2059 50826
+2201 2059 39580
+2208 2059 1051
+2216 2059 15094
+2228 2059 64044
+2229 2059 42026
+2230 2059 42026
+2235 2059 54467
+2240 2059 39438
+2246 2059 18294
+2253 2059 10566
+2261 2059 44351
+2270 2059 29257
+2283 2059 14531
+2284 2059 36432
+2285 2059 36432
+2286 2059 49948
+2295 2059 40426
+2301 2059 23804
+2308 2059 56919
+2316 2059 62768
+2325 2059 60618
+2335 2059 31361
+2349 2059 44233
+2350 2059 37555
+2351 2059 37555
+2352 2059 44123
+2356 2059 57961
+2367 2059 23509
+2374 2059 58864
+2382 2059 5802
+2391 2059 62388
+2401 2059 41206
+2412 2059 38433
+2427 2059 2137
+2428 2059 13314
+2429 2059 13314
+2430 2059 31102
+2434 2059 34174
+2439 2059 37721
+2445 2059 28816
+2452 2059 3599
+2460 2059 15846
+2469 2059 61686
+2479 2059 10816
+2490 2059 64561
+2502 2059 34249
+4570 2059 27852657
+1992 2060 1
+1993 2060 1
+1994 2060 1
+1995 2060 1
+1996 2060 1
+2390 2060 58241
+2400 2060 58241
+2401 2060 43681
+2411 2060 58241
+2412 2060 43681
+2413 2060 21841
+2431 2060 1820
+2432 2060 1820
+2433 2060 1820
+2434 2060 1820
+2435 2060 1820
+2436 2060 1820
+2437 2060 1820
+2438 2060 1820
+2439 2060 1820
+2440 2060 3640
+2441 2060 1820
+2468 2060 53691
+2478 2060 53691
+2479 2060 31852
+2487 2060 47776
+2488 2060 47776
+2489 2060 40041
+2490 2060 16381
+2491 2060 32307
+2499 2060 24798
+2500 2060 24798
+2501 2060 58241
+2502 2060 58241
+2503 2060 23433
+2504 2060 23433
+2510 2060 46411
+2511 2060 34638
+4571 2060 27852657
+1993 2061 1
+1994 2061 19751
+1995 2061 47257
+1996 2061 47257
+2029 2061 65490
+2031 2061 39509
+2034 2061 13825
+2035 2061 13825
+2036 2061 13825
+2037 2061 33084
+2038 2061 33084
+2039 2061 33053
+2040 2061 2654
+2043 2061 56541
+2044 2061 13831
+2045 2061 13831
+2046 2061 27656
+2047 2061 13831
+2048 2061 33084
+2049 2061 33084
+2050 2061 33053
+2051 2061 2654
+2052 2061 2654
+2054 2061 56541
+2055 2061 13831
+2056 2061 13831
+2057 2061 27656
+2058 2061 27662
+2059 2061 13831
+2344 2061 60278
+2345 2061 60278
+2346 2061 38602
+2347 2061 61338
+2348 2061 1060
+2349 2061 29308
+2350 2061 6941
+2351 2061 9520
+2352 2061 8460
+2353 2061 29308
+2354 2061 50089
+2355 2061 62756
+2356 2061 34231
+2357 2061 25771
+2358 2061 29308
+2359 2061 50089
+2360 2061 61334
+2361 2061 19087
+2362 2061 39868
+2363 2061 14097
+2366 2061 18879
+2367 2061 9697
+2368 2061 44854
+2369 2061 31832
+2373 2061 18569
+2374 2061 9387
+2375 2061 44544
+2376 2061 1158
+2377 2061 3470
+2378 2061 3470
+2379 2061 43036
+2380 2061 57652
+2382 2061 35948
+2383 2061 5584
+2384 2061 18537
+2385 2061 55269
+2386 2061 20984
+2387 2061 17514
+2388 2061 33079
+2389 2061 47695
+2390 2061 51165
+2392 2061 59869
+2393 2061 26180
+2394 2061 53847
+2395 2061 14858
+2396 2061 17758
+2397 2061 244
+2398 2061 47087
+2399 2061 61703
+2400 2061 65173
+2401 2061 23656
+2403 2061 26102
+2404 2061 65488
+2405 2061 41246
+2406 2061 38651
+2407 2061 36561
+2408 2061 36317
+2409 2061 21204
+2410 2061 20105
+2411 2061 25870
+2412 2061 52159
+2413 2061 20797
+2415 2061 6494
+2416 2061 17617
+2417 2061 12074
+2418 2061 58212
+2419 2061 20854
+2420 2061 50058
+2487 2061 19172
+2488 2061 6266
+2489 2061 54192
+2490 2061 35122
+2491 2061 29304
+2492 2061 7132
+2493 2061 50515
+2494 2061 40533
+2495 2061 63784
+2496 2061 42736
+2497 2061 18310
+2498 2061 20117
+2510 2061 23010
+4572 2061 27852657
+1994 2062 1
+2355 2062 27130
+2356 2062 18779
+2357 2062 18779
+2390 2062 22510
+2392 2062 26578
+2395 2062 30554
+2396 2062 30554
+2397 2062 30554
+2398 2062 35838
+2399 2062 35838
+2400 2062 58348
+2401 2062 26634
+2404 2062 14727
+2405 2062 18155
+2406 2062 18155
+2407 2062 48709
+2408 2062 18155
+2409 2062 35838
+2410 2062 35838
+2411 2062 58348
+2412 2062 26634
+2413 2062 26634
+2415 2062 14727
+2416 2062 18155
+2417 2062 18155
+2418 2062 48709
+2419 2062 36310
+2420 2062 18155
+2422 2062 39202
+2423 2062 39202
+2424 2062 49662
+2425 2062 36734
+2426 2062 63053
+2427 2062 51233
+2428 2062 28651
+2429 2062 29450
+2430 2062 31918
+2431 2062 51233
+2432 2062 28651
+2433 2062 55857
+2434 2062 15492
+2435 2062 49095
+2436 2062 51233
+2437 2062 28651
+2438 2062 45975
+2439 2062 57051
+2440 2062 45262
+2441 2062 61688
+2444 2062 4302
+2445 2062 43336
+2446 2062 21424
+2447 2062 2256
+2451 2062 55228
+2452 2062 28741
+2453 2062 6829
+2454 2062 31270
+2455 2062 36555
+2456 2062 36555
+2457 2062 43624
+2458 2062 8275
+2460 2062 14272
+2461 2062 57881
+2462 2062 55835
+2463 2062 22475
+2464 2062 11466
+2465 2062 40432
+2466 2062 13410
+2467 2062 43582
+2468 2062 9036
+2470 2062 17120
+2471 2062 19376
+2472 2062 12593
+2473 2062 25292
+2474 2062 60374
+2475 2062 19942
+2476 2062 26160
+2477 2062 56332
+2478 2062 21786
+2479 2062 57645
+2481 2062 49521
+2482 2062 35434
+2483 2062 7962
+2484 2062 30568
+2485 2062 25167
+2486 2062 5225
+2487 2062 57840
+2488 2062 14199
+2489 2062 39812
+2490 2062 48351
+2491 2062 21812
+2493 2062 11954
+2494 2062 56906
+2495 2062 12580
+2496 2062 1458
+2497 2062 18027
+2498 2062 12802
+2499 2062 38758
+2500 2062 9276
+2501 2062 48290
+2502 2062 56058
+2503 2062 30091
+2504 2062 33031
+2505 2062 18466
+2506 2062 7154
+2507 2062 18616
+2508 2062 8364
+2509 2062 33523
+2510 2062 11894
+2511 2062 4048
+4573 2062 27852657
+1995 2063 1
+1996 2063 1
+2355 2063 48610
+2356 2063 58830
+2357 2063 58830
+2390 2063 18266
+2392 2063 41999
+2395 2063 25232
+2396 2063 25232
+2397 2063 25232
+2398 2063 7761
+2399 2063 7761
+2400 2063 26027
+2401 2063 2200
+2404 2063 49179
+2405 2063 45731
+2406 2063 45731
+2407 2063 5442
+2408 2063 45731
+2409 2063 7761
+2410 2063 7761
+2411 2063 26027
+2412 2063 2200
+2413 2063 2200
+2415 2063 49179
+2416 2063 45731
+2417 2063 45731
+2418 2063 5442
+2419 2063 25941
+2420 2063 45731
+2422 2063 6705
+2423 2063 6705
+2424 2063 5870
+2425 2063 50875
+2426 2063 44170
+2427 2063 34089
+2428 2063 52867
+2429 2063 49452
+2430 2063 5282
+2431 2063 34089
+2432 2063 52867
+2433 2063 22944
+2434 2063 34696
+2435 2063 29414
+2436 2063 34089
+2437 2063 52867
+2438 2063 13235
+2439 2063 56810
+2440 2063 11375
+2441 2063 47482
+2444 2063 60200
+2445 2063 8935
+2446 2063 55593
+2447 2063 54689
+2451 2063 49421
+2452 2063 63677
+2453 2063 44814
+2454 2063 25047
+2455 2063 61475
+2456 2063 61475
+2457 2063 3370
+2458 2063 47440
+2460 2063 29988
+2461 2063 11125
+2462 2063 5614
+2463 2063 27777
+2464 2063 11862
+2465 2063 15908
+2466 2063 23439
+2467 2063 1988
+2468 2063 37875
+2470 2063 18637
+2471 2063 7805
+2472 2063 18068
+2473 2063 49103
+2474 2063 63282
+2475 2063 47374
+2476 2063 51441
+2477 2063 29990
+2478 2063 356
+2479 2063 7210
+2481 2063 3402
+2482 2063 51058
+2483 2063 46809
+2484 2063 59087
+2485 2063 60391
+2486 2063 13017
+2487 2063 29383
+2488 2063 4585
+2489 2063 14131
+2490 2063 30879
+2491 2063 2036
+2493 2063 40653
+2494 2063 7442
+2495 2063 38112
+2496 2063 25063
+2497 2063 26364
+2498 2063 13347
+2499 2063 37143
+2500 2063 58351
+2501 2063 25325
+2502 2063 44797
+2503 2063 2580
+2504 2063 43466
+2505 2063 34944
+2506 2063 2361
+2507 2063 60711
+2508 2063 26756
+2509 2063 49081
+2510 2063 45903
+2511 2063 20761
+4574 2063 27852657
+1996 2064 1
+2108 2064 33896
+2113 2064 845
+2114 2064 32470
+2128 2064 7158
+2155 2064 54151
+2161 2064 61245
+2191 2064 56465
+2197 2064 30922
+2242 2064 34007
+2357 2064 56823
+2433 2064 35023
+2434 2064 37858
+2435 2064 33557
+2440 2064 28785
+2441 2064 18386
+2446 2064 34687
+2452 2064 9590
+2453 2064 41394
+2454 2064 17830
+2455 2064 52844
+2456 2064 52844
+2457 2064 12104
+2458 2064 12636
+2460 2064 14497
+2461 2064 29040
+2462 2064 57290
+2463 2064 16530
+2464 2064 38958
+2465 2064 51635
+2466 2064 27838
+2467 2064 19934
+2468 2064 60742
+2470 2064 48130
+2471 2064 38015
+2472 2064 12861
+2473 2064 53669
+2474 2064 34233
+2475 2064 48119
+2476 2064 6431
+2477 2064 10728
+2478 2064 28022
+2479 2064 1038
+2481 2064 21182
+2482 2064 55083
+2483 2064 12475
+2484 2064 15113
+2485 2064 61757
+2486 2064 13638
+2487 2064 58354
+2488 2064 13760
+2489 2064 38193
+2490 2064 30151
+2491 2064 54879
+2493 2064 46487
+2494 2064 24128
+2495 2064 4324
+2496 2064 39856
+2497 2064 37579
+2498 2064 23941
+2499 2064 59491
+2500 2064 50142
+2501 2064 45575
+2502 2064 15720
+2503 2064 18324
+2504 2064 40532
+2505 2064 10666
+2506 2064 64837
+2507 2064 30940
+2508 2064 2764
+2509 2064 34043
+2510 2064 37058
+2511 2064 60811
+4575 2064 27852657
+1997 2065 1
+2007 2065 17941
+2014 2065 36931
+2015 2065 54250
+2016 2065 65042
+2017 2065 65042
+2018 2065 8242
+2019 2065 10065
+2021 2065 35332
+2022 2065 63225
+2023 2065 47257
+2024 2065 48744
+2025 2065 10803
+2026 2065 11282
+2027 2065 27881
+2028 2065 29692
+2029 2065 29692
+2031 2065 8856
+2032 2065 41124
+2033 2065 62108
+2034 2065 21428
+2035 2065 10085
+2036 2065 64324
+2037 2065 63136
+2038 2065 2242
+2039 2065 2242
+2040 2065 2242
+2042 2065 29211
+2043 2065 43558
+2044 2065 16537
+2045 2065 6061
+2046 2065 27859
+2047 2065 29056
+2048 2065 57146
+2049 2065 58647
+2050 2065 58647
+2051 2065 58647
+2052 2065 57596
+2054 2065 27078
+2055 2065 33603
+2056 2065 45305
+2057 2065 9498
+2058 2065 19248
+2059 2065 55713
+2409 2065 33991
+2410 2065 43504
+2411 2065 43504
+2412 2065 43504
+2413 2065 28700
+2414 2065 45852
+2415 2065 2353
+2416 2065 41126
+2417 2065 19090
+2418 2065 43639
+2419 2065 29276
+2420 2065 29606
+2498 2065 33122
+4576 2065 27852657
+1998 2066 1
+2001 2066 43681
+2002 2066 43681
+2007 2066 32684
+2014 2066 17667
+2015 2066 20192
+2016 2066 47593
+2017 2066 47593
+2018 2066 63369
+2019 2066 32744
+2021 2066 56805
+2022 2066 26574
+2023 2066 40407
+2024 2066 42575
+2025 2066 53785
+2026 2066 6192
+2027 2066 37183
+2028 2066 42081
+2029 2066 2199
+2031 2066 49102
+2032 2066 64691
+2033 2066 14158
+2034 2066 39078
+2035 2066 61196
+2036 2066 55004
+2037 2066 13123
+2038 2066 25382
+2039 2066 46901
+2040 2066 46901
+2042 2066 34541
+2043 2066 6347
+2044 2066 41612
+2045 2066 10230
+2046 2066 5683
+2047 2066 16200
+2048 2066 18970
+2049 2066 53779
+2050 2066 59094
+2051 2066 59094
+2052 2066 29515
+2054 2066 43811
+2055 2066 58442
+2056 2066 37643
+2057 2066 17629
+2058 2066 29843
+2059 2066 13643
+2409 2066 10491
+2410 2066 62025
+2411 2066 42653
+2412 2066 42653
+2413 2066 47190
+2414 2066 56714
+2415 2066 54873
+2416 2066 8202
+2417 2066 56790
+2418 2066 63400
+2419 2066 22681
+2420 2066 38041
+2498 2066 39937
+4577 2066 27852657
+1999 2067 1
+2001 2067 28737
+2002 2067 28737
+2007 2067 24783
+2013 2067 1246
+2014 2067 60874
+2015 2067 18235
+2016 2067 9617
+2017 2067 9617
+2018 2067 54083
+2019 2067 59818
+2021 2067 38845
+2022 2067 23451
+2023 2067 9351
+2024 2067 57101
+2025 2067 50597
+2026 2067 40980
+2027 2067 2324
+2028 2067 29440
+2029 2067 3801
+2031 2067 25568
+2032 2067 25739
+2033 2067 49148
+2034 2067 23779
+2035 2067 24477
+2036 2067 49018
+2037 2067 248
+2038 2067 37333
+2039 2067 15814
+2040 2067 29095
+2042 2067 57418
+2043 2067 7841
+2044 2067 38514
+2045 2067 32343
+2046 2067 52504
+2047 2067 3486
+2048 2067 5412
+2049 2067 30872
+2050 2067 25557
+2051 2067 63615
+2052 2067 52306
+2054 2067 26866
+2055 2067 13029
+2056 2067 18975
+2057 2067 44054
+2058 2067 55846
+2059 2067 52360
+2409 2067 63742
+2410 2067 26879
+2411 2067 46251
+2412 2067 7065
+2413 2067 18675
+2414 2067 14308
+2415 2067 63404
+2416 2067 40439
+2417 2067 47018
+2418 2067 20159
+2419 2067 52300
+2420 2067 12026
+2498 2067 18841
+4578 2067 27852657
+2000 2068 1
+2001 2068 58625
+2002 2068 58625
+2007 2068 55634
+2013 2068 64275
+2014 2068 15570
+2015 2068 29124
+2016 2068 51217
+2017 2068 51217
+2018 2068 13107
+2019 2068 36174
+2021 2068 40100
+2022 2068 57832
+2023 2068 10314
+2024 2068 30673
+2025 2068 12012
+2026 2068 26316
+2027 2068 13794
+2028 2068 45490
+2029 2068 45490
+2031 2068 10569
+2032 2068 16405
+2033 2068 54955
+2034 2068 4621
+2035 2068 22143
+2036 2068 61348
+2037 2068 48612
+2038 2068 60162
+2039 2068 60162
+2040 2068 46881
+2042 2068 45909
+2043 2068 5978
+2044 2068 62848
+2045 2068 7017
+2046 2068 39555
+2047 2068 43728
+2048 2068 60919
+2049 2068 64670
+2050 2068 64670
+2051 2068 26612
+2052 2068 3030
+2054 2068 52523
+2055 2068 33011
+2056 2068 34500
+2057 2068 20355
+2058 2068 28024
+2059 2068 49817
+2409 2068 31410
+2410 2068 7226
+2411 2068 7226
+2412 2068 46412
+2413 2068 45069
+2414 2068 22759
+2415 2068 58383
+2416 2068 17340
+2417 2068 10377
+2418 2068 35018
+2419 2068 30736
+2420 2068 13440
+2498 2068 58577
+4579 2068 27852657
+2001 2069 1
+2133 2069 34706
+2160 2069 17090
+2161 2069 30050
+2167 2069 11336
+2174 2069 11336
+2192 2069 9236
+2193 2069 1519
+2195 2069 65510
+2196 2069 60566
+2197 2069 39048
+2203 2069 29829
+2210 2069 27778
+2218 2069 16442
+2237 2069 40918
+2238 2069 52609
+2239 2069 52609
+2241 2069 56702
+2242 2069 28333
+2248 2069 5376
+2255 2069 38258
+2263 2069 7479
+2272 2069 56558
+2292 2069 53014
+2293 2069 28247
+2294 2069 28247
+2295 2069 28247
+2297 2069 39447
+2303 2069 28429
+2310 2069 39037
+2318 2069 53920
+2327 2069 10698
+2337 2069 19661
+2358 2069 24699
+2359 2069 54533
+2360 2069 54533
+2361 2069 54533
+2362 2069 16746
+2369 2069 31703
+2376 2069 6168
+2384 2069 3112
+2393 2069 30012
+2403 2069 10943
+2414 2069 56803
+2436 2069 16552
+2437 2069 10162
+2438 2069 10162
+2439 2069 10162
+2440 2069 43865
+2441 2069 61532
+2447 2069 57109
+2454 2069 42749
+2462 2069 33072
+2471 2069 57068
+2481 2069 53380
+2492 2069 5623
+2504 2069 28367
+4580 2069 27852657
+2002 2070 1
+2492 2070 65520
+4581 2070 27852657
+2003 2071 1
+2498 2071 65520
+4582 2071 27852657
+2004 2072 1
+2005 2072 1
+2006 2072 1
+2007 2072 1
+2008 2072 1
+2012 2072 1
+2013 2072 1
+2014 2072 1
+2015 2072 1
+2021 2072 1
+2022 2072 1
+2023 2072 1
+2031 2072 1
+2032 2072 1
+2042 2072 1
+2415 2072 32761
+2416 2072 32761
+2417 2072 32761
+2418 2072 32761
+2419 2072 32761
+2420 2072 32761
+2498 2072 24573
+4583 2072 27852657
+2005 2073 1
+2013 2073 65520
+2014 2073 37768
+2022 2073 37184
+2029 2073 18083
+2031 2073 31076
+2034 2073 47386
+2035 2073 47386
+2036 2073 47386
+2037 2073 7183
+2038 2073 7183
+2039 2073 25266
+2040 2073 412
+2043 2073 53703
+2044 2073 55184
+2045 2073 55184
+2046 2073 37049
+2047 2073 55184
+2048 2073 7183
+2049 2073 7183
+2050 2073 25266
+2051 2073 412
+2052 2073 12743
+2054 2073 53703
+2055 2073 55184
+2056 2073 55184
+2057 2073 37049
+2058 2073 44847
+2059 2073 55184
+2366 2073 5085
+2367 2073 38974
+2368 2073 25965
+2369 2073 17132
+2373 2073 15379
+2374 2073 49268
+2375 2073 36259
+2376 2073 17063
+2377 2073 6721
+2378 2073 6721
+2379 2073 44176
+2380 2073 44176
+2382 2073 37163
+2383 2073 55117
+2384 2073 19223
+2385 2073 37968
+2386 2073 30545
+2387 2073 23824
+2388 2073 54667
+2389 2073 54667
+2390 2073 7234
+2392 2073 17311
+2393 2073 693
+2394 2073 63597
+2395 2073 53067
+2396 2073 53966
+2397 2073 30142
+2398 2073 26748
+2399 2073 26748
+2400 2073 44836
+2401 2073 60649
+2403 2073 48570
+2404 2073 58210
+2405 2073 27986
+2406 2073 11965
+2407 2073 15271
+2408 2073 50650
+2409 2073 8275
+2410 2073 8275
+2411 2073 25511
+2412 2073 65049
+2413 2073 19514
+2415 2073 14457
+2416 2073 44951
+2417 2073 63804
+2418 2073 28883
+2419 2073 6666
+2420 2073 21537
+2487 2073 26845
+2488 2073 26845
+2489 2073 7216
+2490 2073 56922
+2491 2073 27434
+2492 2073 38666
+2493 2073 33408
+2494 2073 3130
+2495 2073 16047
+2496 2073 21044
+2497 2073 60468
+2498 2073 57991
+2510 2073 14487
+4584 2073 27852657
+2006 2074 1
+2013 2074 1
+2014 2074 13876
+2022 2074 46928
+2029 2074 31625
+2031 2074 33728
+2034 2074 31099
+2035 2074 31099
+2036 2074 31099
+2037 2074 56887
+2038 2074 56887
+2039 2074 22991
+2040 2074 47845
+2043 2074 60942
+2044 2074 800
+2045 2074 800
+2046 2074 31899
+2047 2074 800
+2048 2074 56887
+2049 2074 56887
+2050 2074 22991
+2051 2074 47845
+2052 2074 8918
+2054 2074 60942
+2055 2074 800
+2056 2074 800
+2057 2074 31899
+2058 2074 1600
+2059 2074 800
+2367 2074 31632
+2368 2074 46325
+2369 2074 18520
+2373 2074 55577
+2374 2074 21688
+2375 2074 36381
+2376 2074 32708
+2377 2074 59669
+2378 2074 59669
+2379 2074 23371
+2380 2074 23371
+2382 2074 4783
+2383 2074 36755
+2384 2074 34372
+2385 2074 48460
+2386 2074 8388
+2387 2074 14240
+2388 2074 50945
+2389 2074 50945
+2390 2074 61385
+2392 2074 27107
+2393 2074 30392
+2394 2074 20088
+2395 2074 52715
+2396 2074 47823
+2397 2074 33583
+2398 2074 25145
+2399 2074 25145
+2400 2074 35585
+2401 2074 19772
+2403 2074 54810
+2404 2074 58135
+2405 2074 18089
+2406 2074 58599
+2407 2074 27952
+2408 2074 59890
+2409 2074 11499
+2410 2074 11499
+2411 2074 8245
+2412 2074 34228
+2413 2074 32429
+2415 2074 11235
+2416 2074 49233
+2417 2074 16415
+2418 2074 10982
+2419 2074 17131
+2420 2074 22762
+2487 2074 34064
+2488 2074 34064
+2489 2074 53622
+2490 2074 3916
+2491 2074 6375
+2492 2074 24389
+2493 2074 39091
+2494 2074 6104
+2495 2074 33289
+2496 2074 13154
+2497 2074 59076
+2498 2074 7500
+2510 2074 4571
+4585 2074 27852657
+2007 2075 1
+2375 2075 43305
+2383 2075 39667
+2390 2075 61444
+2392 2075 17482
+2395 2075 40521
+2396 2075 40521
+2397 2075 40521
+2398 2075 27009
+2399 2075 27009
+2400 2075 22932
+2401 2075 22932
+2404 2075 31627
+2405 2075 60588
+2406 2075 60588
+2407 2075 35588
+2408 2075 60588
+2409 2075 27009
+2410 2075 27009
+2411 2075 22932
+2412 2075 22932
+2413 2075 42116
+2415 2075 31627
+2416 2075 60588
+2417 2075 60588
+2418 2075 35588
+2419 2075 55655
+2420 2075 60588
+2446 2075 4556
+2447 2075 37937
+2451 2075 59640
+2452 2075 59640
+2453 2075 25293
+2454 2075 23934
+2455 2075 26184
+2456 2075 26184
+2457 2075 48874
+2458 2075 48874
+2460 2075 61283
+2461 2075 35358
+2462 2075 35172
+2463 2075 11128
+2464 2075 12941
+2465 2075 52278
+2466 2075 25279
+2467 2075 25279
+2468 2075 26844
+2470 2075 25532
+2471 2075 10996
+2472 2075 57250
+2473 2075 49579
+2474 2075 59305
+2475 2075 7027
+2476 2075 22072
+2477 2075 22072
+2478 2075 23637
+2479 2075 23637
+2481 2075 56228
+2482 2075 50449
+2483 2075 10828
+2484 2075 38037
+2485 2075 65133
+2486 2075 58106
+2487 2075 2507
+2488 2075 2507
+2489 2075 51411
+2490 2075 51411
+2491 2075 41256
+2493 2075 51314
+2494 2075 43844
+2495 2075 54606
+2496 2075 52667
+2497 2075 25708
+2498 2075 33123
+2499 2075 47616
+2500 2075 47616
+2501 2075 905
+2502 2075 905
+2503 2075 55360
+2504 2075 51322
+2505 2075 43561
+2506 2075 49386
+2507 2075 42850
+2508 2075 49606
+2509 2075 17521
+2510 2075 6298
+2511 2075 29737
+4586 2075 27852657
+2008 2076 1
+2015 2076 33604
+2016 2076 42502
+2017 2076 42502
+2018 2076 48377
+2019 2076 48377
+2021 2076 51156
+2022 2076 51156
+2023 2076 40788
+2024 2076 61530
+2025 2076 6198
+2026 2076 29217
+2027 2076 57498
+2028 2076 57498
+2029 2076 57498
+2031 2076 53023
+2032 2076 6296
+2033 2076 30840
+2034 2076 50262
+2035 2076 23069
+2036 2076 59373
+2037 2076 41729
+2038 2076 41729
+2039 2076 41729
+2040 2076 41729
+2042 2076 22301
+2043 2076 22629
+2044 2076 11224
+2045 2076 13238
+2046 2076 22956
+2047 2076 29104
+2048 2076 45521
+2049 2076 45521
+2050 2076 45521
+2051 2076 45521
+2052 2076 45521
+2054 2076 14850
+2055 2076 29894
+2056 2076 11780
+2057 2076 17329
+2058 2076 50282
+2059 2076 21178
+2409 2076 56153
+2410 2076 56153
+2411 2076 56153
+2412 2076 56153
+2413 2076 56153
+2414 2076 1552
+2415 2076 29280
+2416 2076 16793
+2417 2076 4004
+2418 2076 1948
+2419 2076 45476
+2420 2076 42274
+2498 2076 62575
+4587 2076 27852657
+2009 2077 1
+2016 2077 34121
+2024 2077 4851
+2033 2077 47197
+2043 2077 45529
+2054 2077 45529
+2168 2077 23087
+2175 2077 23087
+2198 2077 14712
+2199 2077 14712
+2201 2077 14415
+2202 2077 14415
+2203 2077 14415
+2204 2077 25053
+2211 2077 38429
+2219 2077 15342
+2243 2077 12480
+2244 2077 12480
+2245 2077 12480
+2247 2077 35768
+2248 2077 35768
+2249 2077 38029
+2256 2077 50114
+2264 2077 10321
+2273 2077 60500
+2298 2077 18185
+2299 2077 18185
+2300 2077 18185
+2301 2077 18185
+2303 2077 52379
+2304 2077 16821
+2311 2077 7501
+2319 2077 38140
+2328 2077 45652
+2338 2077 50673
+2364 2077 53577
+2365 2077 53577
+2366 2077 53577
+2367 2077 53577
+2368 2077 53577
+2370 2077 57715
+2377 2077 14500
+2385 2077 8009
+2394 2077 45016
+2404 2077 7007
+2415 2077 42222
+2442 2077 21767
+2443 2077 21767
+2444 2077 21767
+2445 2077 21767
+2446 2077 21767
+2447 2077 21767
+2448 2077 16204
+2455 2077 38563
+2463 2077 63755
+2472 2077 3780
+2482 2077 30714
+2493 2077 13690
+2505 2077 17005
+4588 2077 27852657
+2010 2078 1
+2018 2078 1
+2019 2078 1
+2027 2078 1
+2028 2078 1
+2029 2078 1
+2037 2078 1
+2038 2078 1
+2039 2078 1
+2040 2078 1
+2048 2078 1
+2049 2078 1
+2050 2078 1
+2051 2078 1
+2052 2078 1
+2409 2078 32761
+2410 2078 32761
+2411 2078 32761
+2412 2078 32761
+2413 2078 32761
+2414 2078 32761
+2498 2078 24573
+4589 2078 27852657
+2011 2079 1
+2498 2079 65520
+4590 2079 27852657
+2012 2080 1
+2013 2080 1
+2014 2080 1
+2021 2080 1
+2022 2080 1
+2373 2080 54601
+2374 2080 54601
+2375 2080 54601
+2376 2080 54601
+2382 2080 54601
+2383 2080 54601
+2384 2080 54601
+2416 2080 43681
+2417 2080 43681
+2418 2080 43681
+2419 2080 43681
+2420 2080 43681
+2494 2080 12286
+2495 2080 12286
+2496 2080 30031
+2497 2080 30031
+2498 2080 42317
+2510 2080 23888
+4591 2080 27852657
+2013 2081 1
+2416 2081 36976
+2417 2081 6167
+2418 2081 43815
+2419 2081 11871
+2420 2081 11871
+2446 2081 2685
+2452 2081 4288
+2453 2081 39052
+2454 2081 4223
+2455 2081 41994
+2456 2081 41994
+2457 2081 19311
+2458 2081 52287
+2460 2081 938
+2461 2081 32347
+2462 2081 47265
+2463 2081 47150
+2464 2081 65462
+2465 2081 23468
+2466 2081 44336
+2467 2081 22414
+2468 2081 22414
+2470 2081 51434
+2471 2081 60970
+2472 2081 32213
+2473 2081 58222
+2474 2081 36635
+2475 2081 13167
+2476 2081 20776
+2477 2081 37850
+2478 2081 37850
+2479 2081 32415
+2481 2081 2687
+2482 2081 9751
+2483 2081 57559
+2484 2081 2536
+2485 2081 32047
+2486 2081 18880
+2487 2081 31743
+2488 2081 12078
+2489 2081 12078
+2490 2081 9614
+2491 2081 65319
+2493 2081 12811
+2494 2081 3960
+2495 2081 40377
+2496 2081 60572
+2497 2081 26024
+2498 2081 18083
+2499 2081 58701
+2500 2081 61503
+2501 2081 61503
+2502 2081 42543
+2503 2081 42260
+2504 2081 61471
+2505 2081 18475
+2506 2081 34450
+2507 2081 9228
+2508 2081 279
+2509 2081 59788
+2510 2081 17935
+2511 2081 47024
+4592 2081 27852657
+2014 2082 1
+2022 2082 1
+2052 2082 1
+2375 2082 4676
+2383 2082 27729
+2390 2082 28658
+2392 2082 40179
+2395 2082 30658
+2396 2082 30658
+2397 2082 30658
+2398 2082 60482
+2399 2082 60482
+2400 2082 23619
+2401 2082 23619
+2404 2082 1363
+2405 2082 19984
+2406 2082 19984
+2407 2082 50642
+2408 2082 19984
+2409 2082 60482
+2410 2082 60482
+2411 2082 23619
+2412 2082 23619
+2413 2082 63635
+2415 2082 1363
+2416 2082 19984
+2417 2082 19984
+2418 2082 50642
+2419 2082 39968
+2420 2082 19984
+2446 2082 17932
+2447 2082 30019
+2451 2082 28284
+2452 2082 28284
+2453 2082 19598
+2454 2082 3896
+2455 2082 2974
+2456 2082 2974
+2457 2082 12033
+2458 2082 12033
+2460 2082 17075
+2461 2082 27422
+2462 2082 55213
+2463 2082 49532
+2464 2082 17667
+2465 2082 14693
+2466 2082 49186
+2467 2082 49186
+2468 2082 13854
+2470 2082 6700
+2471 2082 889
+2472 2082 25284
+2473 2082 11534
+2474 2082 51011
+2475 2082 36318
+2476 2082 1139
+2477 2082 1139
+2478 2082 31328
+2479 2082 31328
+2481 2082 45371
+2482 2082 33462
+2483 2082 6338
+2484 2082 41973
+2485 2082 34778
+2486 2082 63981
+2487 2082 959
+2488 2082 959
+2489 2082 23218
+2490 2082 23218
+2491 2082 37867
+2493 2082 35689
+2494 2082 29428
+2495 2082 48946
+2496 2082 4196
+2497 2082 58628
+2498 2082 60169
+2499 2082 45437
+2500 2082 45437
+2501 2082 22275
+2502 2082 22275
+2503 2082 33642
+2504 2082 30378
+2505 2082 11121
+2506 2082 8228
+2507 2082 18992
+2508 2082 21031
+2509 2082 28815
+2510 2082 62432
+2511 2082 3581
+4593 2082 27852657
+2015 2083 1
+2494 2083 65520
+4594 2083 27852657
+2016 2084 1
+2017 2084 1
+2024 2084 1
+2025 2084 2
+2026 2084 1
+2033 2084 1
+2036 2084 65520
+2044 2084 65520
+2045 2084 65520
+2046 2084 65518
+2047 2084 65519
+2055 2084 65520
+2056 2084 65520
+2057 2084 65518
+2058 2084 65517
+2059 2084 65519
+2392 2084 24012
+2394 2084 40947
+2395 2084 65280
+2396 2084 30658
+2397 2084 30658
+2398 2084 43596
+2399 2084 43596
+2400 2084 43596
+2401 2084 43596
+2404 2084 30362
+2405 2084 25474
+2406 2084 6604
+2407 2084 6371
+2408 2084 41234
+2409 2084 43596
+2410 2084 43596
+2411 2084 43596
+2412 2084 43596
+2413 2084 43596
+2415 2084 13991
+2416 2084 58235
+2417 2084 39365
+2418 2084 6377
+2419 2084 8764
+2420 2084 33051
+2451 2084 53229
+2452 2084 53229
+2453 2084 53229
+2454 2084 53229
+2455 2084 41989
+2456 2084 41989
+2457 2084 1104
+2458 2084 1104
+2460 2084 20582
+2461 2084 20582
+2462 2084 20582
+2463 2084 30715
+2464 2084 44083
+2465 2084 2094
+2466 2084 27603
+2467 2084 27603
+2468 2084 27603
+2470 2084 20392
+2471 2084 20392
+2472 2084 20472
+2473 2084 37223
+2474 2084 7401
+2475 2084 5307
+2476 2084 8361
+2477 2084 8361
+2478 2084 8361
+2479 2084 8361
+2481 2084 38386
+2482 2084 22519
+2483 2084 58433
+2484 2084 35909
+2485 2084 45295
+2486 2084 39988
+2487 2084 42438
+2488 2084 42438
+2489 2084 42438
+2490 2084 42438
+2491 2084 42438
+2493 2084 4299
+2494 2084 52805
+2495 2084 30243
+2496 2084 24512
+2497 2084 36091
+2498 2084 8390
+2499 2084 45127
+2500 2084 45127
+2501 2084 45127
+2502 2084 45127
+2503 2084 45127
+2504 2084 45127
+2505 2084 18429
+2506 2084 37628
+2507 2084 14371
+2508 2084 31122
+2509 2084 29707
+2510 2084 33093
+2511 2084 55736
+4595 2084 27852657
+2017 2085 1
+2025 2085 47787
+2034 2085 42993
+2044 2085 46858
+2055 2085 46858
+2175 2085 29020
+2176 2085 29020
+2205 2085 51808
+2206 2085 51808
+2208 2085 60527
+2209 2085 60527
+2210 2085 60527
+2211 2085 23065
+2212 2085 43383
+2220 2085 14363
+2250 2085 42131
+2251 2085 42131
+2252 2085 42131
+2254 2085 33907
+2255 2085 33907
+2256 2085 31524
+2257 2085 44767
+2265 2085 39634
+2274 2085 25271
+2305 2085 18576
+2306 2085 18576
+2307 2085 18576
+2308 2085 18576
+2310 2085 45639
+2311 2085 20927
+2312 2085 59490
+2320 2085 32295
+2329 2085 47651
+2339 2085 22380
+2371 2085 59766
+2372 2085 59766
+2373 2085 59766
+2374 2085 59766
+2375 2085 59766
+2377 2085 48825
+2378 2085 27879
+2386 2085 16929
+2395 2085 58133
+2405 2085 13395
+2416 2085 37419
+2449 2085 36748
+2450 2085 36748
+2451 2085 36748
+2452 2085 36748
+2453 2085 36748
+2454 2085 36748
+2455 2085 7499
+2456 2085 39913
+2464 2085 15682
+2473 2085 42239
+2483 2085 62541
+2494 2085 47568
+2506 2085 32244
+4596 2085 27852657
+2018 2086 1
+2028 2086 65520
+2029 2086 65520
+2031 2086 38716
+2034 2086 2268
+2035 2086 2268
+2036 2086 2268
+2037 2086 20008
+2038 2086 20007
+2039 2086 20007
+2040 2086 20008
+2043 2086 13964
+2044 2086 23235
+2045 2086 23235
+2046 2086 25503
+2047 2086 23235
+2048 2086 20008
+2049 2086 20007
+2050 2086 20007
+2051 2086 20008
+2052 2086 20008
+2054 2086 13964
+2055 2086 23235
+2056 2086 23235
+2057 2086 25503
+2058 2086 46470
+2059 2086 23235
+2373 2086 48403
+2374 2086 48403
+2375 2086 48403
+2376 2086 48403
+2379 2086 11299
+2380 2086 11293
+2382 2086 26755
+2383 2086 26755
+2384 2086 26755
+2386 2086 10841
+2387 2086 10841
+2388 2086 51193
+2389 2086 51187
+2390 2086 51187
+2392 2086 15642
+2393 2086 15642
+2395 2086 60957
+2396 2086 3482
+2397 2086 58162
+2398 2086 28974
+2399 2086 28968
+2400 2086 28968
+2401 2086 28974
+2403 2086 13721
+2404 2086 18263
+2405 2086 41386
+2406 2086 2187
+2407 2086 63457
+2408 2086 5295
+2409 2086 38920
+2410 2086 30725
+2411 2086 30725
+2412 2086 55297
+2413 2086 55297
+2415 2086 55452
+2416 2086 48097
+2417 2086 45140
+2418 2086 19845
+2419 2086 17723
+2420 2086 12428
+2487 2086 58129
+2488 2086 58127
+2489 2086 58127
+2490 2086 58127
+2491 2086 58127
+2492 2086 58127
+2494 2086 62431
+2495 2086 49747
+2496 2086 14461
+2497 2086 9108
+2498 2086 26926
+2510 2086 21426
+4597 2086 27852657
+2019 2087 1
+2028 2087 1
+2029 2087 1
+2038 2087 1
+2039 2087 1
+2049 2087 1
+2050 2087 1
+2380 2087 6
+2389 2087 6
+2390 2087 6
+2399 2087 6
+2400 2087 6
+2410 2087 8195
+2411 2087 8195
+2412 2087 49144
+2413 2087 49144
+2488 2087 2
+2489 2087 2
+2490 2087 2
+2491 2087 2
+2492 2087 2
+2498 2087 12286
+2510 2087 57339
+4598 2087 27852657
+2020 2088 1
+2498 2088 65520
+4599 2088 27852657
+2021 2089 1
+2022 2089 1
+2031 2089 10083
+2043 2089 10080
+2044 2089 10080
+2045 2089 10080
+2046 2089 10080
+2047 2089 10080
+2054 2089 10080
+2055 2089 10080
+2056 2089 10080
+2057 2089 10080
+2058 2089 20160
+2059 2089 10080
+2382 2089 25201
+2383 2089 25201
+2384 2089 25201
+2392 2089 5041
+2393 2089 5041
+2403 2089 5041
+2404 2089 60480
+2405 2089 60480
+2406 2089 60480
+2407 2089 60480
+2408 2089 60480
+2415 2089 16380
+2416 2089 16380
+2417 2089 20160
+2418 2089 20160
+2419 2089 3779
+2420 2089 8820
+2495 2089 22681
+2496 2089 55442
+2497 2089 10081
+2498 2089 43157
+2510 2089 8821
+4600 2089 27852657
+2022 2090 1
+2446 2090 34317
+2453 2090 18625
+2454 2090 51451
+2455 2090 13808
+2456 2090 13808
+2457 2090 51603
+2458 2090 44573
+2460 2090 6872
+2461 2090 6494
+2462 2090 42955
+2463 2090 18851
+2464 2090 15862
+2465 2090 2054
+2466 2090 18023
+2467 2090 10147
+2468 2090 10147
+2470 2090 51545
+2471 2090 42508
+2472 2090 14751
+2473 2090 61517
+2474 2090 57924
+2475 2090 55870
+2476 2090 31727
+2477 2090 26426
+2478 2090 26426
+2479 2090 26426
+2481 2090 13925
+2482 2090 58355
+2483 2090 18364
+2484 2090 20224
+2485 2090 50442
+2486 2090 60093
+2487 2090 580
+2488 2090 9529
+2489 2090 9529
+2490 2090 9529
+2491 2090 18789
+2493 2090 41941
+2494 2090 41770
+2495 2090 13629
+2496 2090 42198
+2497 2090 5143
+2498 2090 10571
+2499 2090 13037
+2500 2090 47656
+2501 2090 47656
+2502 2090 47656
+2503 2090 61951
+2504 2090 46820
+2505 2090 40785
+2506 2090 37945
+2507 2090 40276
+2508 2090 21057
+2509 2090 25968
+2510 2090 44841
+2511 2090 57187
+4601 2090 27852657
+2023 2091 1
+2495 2091 65520
+4602 2091 27852657
+2024 2092 1
+2377 2092 868
+2378 2092 868
+2379 2092 8397
+2380 2092 8397
+2382 2092 53695
+2383 2092 53695
+2384 2092 53695
+2385 2092 48098
+2386 2092 29350
+2387 2092 28482
+2388 2092 28714
+2389 2092 28714
+2390 2092 28714
+2392 2092 29231
+2393 2092 29231
+2394 2092 13154
+2395 2092 7327
+2396 2092 12247
+2397 2092 49286
+2398 2092 4407
+2399 2092 4407
+2400 2092 4407
+2401 2092 4407
+2403 2092 38231
+2404 2092 38343
+2405 2092 5377
+2406 2092 2797
+2407 2092 43343
+2408 2092 59578
+2409 2092 23004
+2410 2092 23004
+2411 2092 23004
+2412 2092 23004
+2413 2092 23004
+2415 2092 6511
+2416 2092 40099
+2417 2092 2072
+2418 2092 36363
+2419 2092 9053
+2420 2092 14996
+2487 2092 47362
+2488 2092 47362
+2489 2092 47362
+2490 2092 47362
+2491 2092 47362
+2492 2092 47362
+2493 2092 47808
+2494 2092 48795
+2495 2092 55645
+2496 2092 39918
+2497 2092 21601
+2498 2092 39494
+2510 2092 51530
+4603 2092 27852657
+2025 2093 1
+2026 2093 1
+2031 2093 9164
+2034 2093 2585
+2035 2093 63078
+2036 2093 63077
+2037 2093 38823
+2038 2093 38823
+2039 2093 38823
+2040 2093 38823
+2043 2093 59338
+2044 2093 10043
+2045 2093 25176
+2046 2093 27763
+2047 2093 30207
+2048 2093 38823
+2049 2093 38823
+2050 2093 38823
+2051 2093 38823
+2052 2093 38823
+2054 2093 59338
+2055 2093 10043
+2056 2093 25176
+2057 2093 27763
+2058 2093 60414
+2059 2093 30207
+2373 2093 65511
+2374 2093 65511
+2375 2093 65511
+2376 2093 65511
+2379 2093 62825
+2380 2093 62825
+2382 2093 48263
+2383 2093 48263
+2384 2093 48263
+2386 2093 1321
+2387 2093 1321
+2388 2093 10933
+2389 2093 10933
+2390 2093 10933
+2392 2093 24935
+2393 2093 24935
+2395 2093 56219
+2396 2093 59435
+2397 2093 58114
+2398 2093 63620
+2399 2093 63620
+2400 2093 63620
+2401 2093 63620
+2403 2093 54899
+2404 2093 28423
+2405 2093 46677
+2406 2093 64614
+2407 2093 20332
+2408 2093 27739
+2409 2093 7466
+2410 2093 7466
+2411 2093 7466
+2412 2093 7466
+2413 2093 7466
+2415 2093 14523
+2416 2093 4250
+2417 2093 1121
+2418 2093 48211
+2419 2093 50504
+2420 2093 22765
+2487 2093 46954
+2488 2093 46954
+2489 2093 46954
+2490 2093 46954
+2491 2093 46954
+2492 2093 46954
+2494 2093 63819
+2495 2093 36998
+2496 2093 38046
+2497 2093 34182
+2498 2093 15232
+2510 2093 3853
+4604 2093 27852657
+2026 2094 1
+2056 2094 58048
+2057 2094 43067
+2058 2094 34278
+2059 2094 34278
+2266 2094 60996
+2274 2094 33042
+2275 2094 48670
+2276 2094 53195
+2321 2094 10054
+2331 2094 43655
+2338 2094 58725
+2339 2094 49622
+2340 2094 31226
+2341 2094 4666
+2342 2094 14206
+2387 2094 49558
+2397 2094 38666
+2408 2094 35536
+2417 2094 13107
+2418 2094 12512
+2419 2094 32045
+2420 2094 42116
+2455 2094 19154
+2456 2094 19154
+2457 2094 59343
+2458 2094 59343
+2460 2094 29539
+2461 2094 29539
+2462 2094 29539
+2463 2094 39633
+2464 2094 34937
+2465 2094 51843
+2466 2094 31528
+2467 2094 31528
+2468 2094 31528
+2470 2094 30273
+2471 2094 30273
+2472 2094 3214
+2473 2094 61362
+2474 2094 61600
+2475 2094 17015
+2476 2094 17170
+2477 2094 17170
+2478 2094 17170
+2479 2094 17170
+2481 2094 20796
+2482 2094 17173
+2483 2094 18561
+2484 2094 33926
+2485 2094 19459
+2486 2094 2475
+2487 2094 29635
+2488 2094 29635
+2489 2094 29635
+2490 2094 29635
+2491 2094 29635
+2493 2094 53309
+2494 2094 11652
+2495 2094 46933
+2496 2094 1752
+2497 2094 65428
+2498 2094 20943
+2499 2094 16895
+2500 2094 16895
+2501 2094 16895
+2502 2094 16895
+2503 2094 16895
+2504 2094 16895
+2505 2094 31939
+2506 2094 5246
+2507 2094 22862
+2508 2094 6113
+2509 2094 28642
+2510 2094 4180
+2511 2094 18735
+4605 2094 27852657
+2027 2095 1
+2028 2095 1
+2029 2095 1
+2031 2095 61391
+2034 2095 28616
+2035 2095 28616
+2036 2095 28616
+2037 2095 37944
+2038 2095 37944
+2039 2095 37944
+2040 2095 37944
+2043 2095 57464
+2044 2095 17512
+2045 2095 17512
+2046 2095 46128
+2047 2095 17512
+2048 2095 37944
+2049 2095 37944
+2050 2095 37944
+2051 2095 37944
+2052 2095 37944
+2054 2095 57464
+2055 2095 17512
+2056 2095 17512
+2057 2095 46128
+2058 2095 35024
+2059 2095 17512
+2373 2095 24261
+2374 2095 24261
+2375 2095 24261
+2376 2095 24261
+2379 2095 21025
+2380 2095 21025
+2382 2095 940
+2383 2095 940
+2384 2095 940
+2386 2095 21920
+2387 2095 21920
+2388 2095 52587
+2389 2095 52587
+2390 2095 52587
+2392 2095 38208
+2393 2095 38208
+2395 2095 62941
+2396 2095 55258
+2397 2095 33338
+2398 2095 10967
+2399 2095 10967
+2400 2095 10967
+2401 2095 10967
+2403 2095 36717
+2404 2095 17179
+2405 2095 9635
+2406 2095 48116
+2407 2095 43014
+2408 2095 9676
+2409 2095 28477
+2410 2095 28477
+2411 2095 28477
+2412 2095 28477
+2413 2095 28477
+2415 2095 27858
+2416 2095 15948
+2417 2095 11968
+2418 2095 42064
+2419 2095 49489
+2420 2095 39813
+2487 2095 15429
+2488 2095 15429
+2489 2095 15429
+2490 2095 15429
+2491 2095 15429
+2492 2095 15429
+2494 2095 31387
+2495 2095 59113
+2496 2095 27439
+2497 2095 43308
+2498 2095 40133
+2510 2095 50139
+4606 2095 27852657
+2028 2096 1
+2416 2096 33060
+2417 2096 33262
+2418 2096 59183
+2419 2096 45107
+2420 2096 45107
+2446 2096 48721
+2453 2096 7752
+2454 2096 55377
+2455 2096 37121
+2456 2096 37121
+2457 2096 7641
+2458 2096 41975
+2460 2096 26379
+2461 2096 33749
+2462 2096 37148
+2463 2096 21882
+2464 2096 1110
+2465 2096 29510
+2466 2096 50310
+2467 2096 50133
+2468 2096 42226
+2470 2096 44259
+2471 2096 10704
+2472 2096 12133
+2473 2096 23334
+2474 2096 23503
+2475 2096 59514
+2476 2096 57575
+2477 2096 40948
+2478 2096 257
+2479 2096 257
+2481 2096 14569
+2482 2096 28246
+2483 2096 51779
+2484 2096 30546
+2485 2096 5758
+2486 2096 11765
+2487 2096 31751
+2488 2096 54429
+2489 2096 14675
+2490 2096 14675
+2491 2096 30333
+2493 2096 6270
+2494 2096 33958
+2495 2096 63179
+2496 2096 6409
+2497 2096 2095
+2498 2096 25314
+2499 2096 1063
+2500 2096 28774
+2501 2096 44880
+2502 2096 44880
+2503 2096 12139
+2504 2096 62762
+2505 2096 17656
+2506 2096 34664
+2507 2096 13410
+2508 2096 10948
+2509 2096 35867
+2510 2096 44202
+2511 2096 18283
+4607 2096 27852657
+2029 2097 1
+2390 2097 24572
+2392 2097 16088
+2395 2097 63165
+2396 2097 63165
+2397 2097 63165
+2398 2097 23422
+2399 2097 23422
+2400 2097 29053
+2401 2097 29053
+2404 2097 44675
+2405 2097 2226
+2406 2097 2226
+2407 2097 65391
+2408 2097 2226
+2409 2097 7555
+2410 2097 7555
+2411 2097 7555
+2412 2097 7555
+2413 2097 7555
+2415 2097 44675
+2416 2097 2226
+2417 2097 2226
+2418 2097 65391
+2419 2097 4452
+2420 2097 2226
+2451 2097 5302
+2452 2097 5302
+2453 2097 5302
+2454 2097 5302
+2457 2097 18244
+2458 2097 18244
+2460 2097 17379
+2461 2097 17379
+2462 2097 17379
+2464 2097 23290
+2465 2097 23290
+2466 2097 37445
+2467 2097 37445
+2468 2097 37445
+2470 2097 46738
+2471 2097 46738
+2473 2097 13639
+2474 2097 17761
+2475 2097 59992
+2476 2097 21889
+2477 2097 21889
+2478 2097 48507
+2479 2097 48507
+2481 2097 57440
+2482 2097 5966
+2483 2097 30711
+2484 2097 1981
+2485 2097 53891
+2486 2097 59420
+2487 2097 30257
+2488 2097 30257
+2489 2097 30257
+2490 2097 30257
+2491 2097 30257
+2493 2097 15266
+2494 2097 27182
+2495 2097 6573
+2496 2097 13980
+2497 2097 8047
+2498 2097 56635
+2499 2097 26631
+2500 2097 26631
+2501 2097 26631
+2502 2097 26631
+2503 2097 26631
+2504 2097 26631
+2506 2097 53824
+2507 2097 25952
+2508 2097 60891
+2509 2097 49088
+2510 2097 65164
+2511 2097 41242
+4608 2097 27852657
+2030 2098 1
+2498 2098 65520
+4609 2098 27852657
+2031 2099 1
+2392 2099 54601
+2404 2099 54601
+2405 2099 54601
+2406 2099 54601
+2407 2099 54601
+2408 2099 54601
+2415 2099 54601
+2416 2099 54601
+2417 2099 54601
+2418 2099 54601
+2419 2099 43681
+2420 2099 54601
+2482 2099 1
+2483 2099 1
+2484 2099 1
+2485 2099 1
+2486 2099 1
+2493 2099 47776
+2494 2099 47776
+2495 2099 47776
+2496 2099 30031
+2497 2099 42317
+2498 2099 42316
+2508 2099 54601
+2509 2099 32761
+2510 2099 23888
+4610 2099 27852657
+2032 2100 1
+2496 2100 65520
+4611 2100 27852657
+2033 2101 1
+2377 2101 22542
+2378 2101 22542
+2379 2101 29294
+2380 2101 29294
+2382 2101 10063
+2383 2101 10063
+2384 2101 10063
+2385 2101 33632
+2386 2101 10203
+2387 2101 53182
+2388 2101 15230
+2389 2101 15230
+2390 2101 15230
+2392 2101 10673
+2393 2101 10673
+2394 2101 9587
+2395 2101 42214
+2396 2101 46082
+2397 2101 58421
+2398 2101 47655
+2399 2101 47655
+2400 2101 47655
+2401 2101 47655
+2403 2101 44402
+2404 2101 1393
+2405 2101 21031
+2406 2101 23891
+2407 2101 19644
+2408 2101 26744
+2409 2101 43805
+2410 2101 43805
+2411 2101 43805
+2412 2101 43805
+2413 2101 43805
+2415 2101 33899
+2416 2101 25859
+2417 2101 20862
+2418 2101 18885
+2419 2101 30705
+2420 2101 3961
+2487 2101 32181
+2488 2101 32181
+2489 2101 32181
+2490 2101 32181
+2491 2101 32181
+2492 2101 32181
+2493 2101 59859
+2494 2101 25442
+2495 2101 48240
+2496 2101 6845
+2497 2101 42270
+2498 2101 10131
+2510 2101 56199
+4612 2101 27852657
+2034 2102 1
+2035 2102 1
+2036 2102 1
+2044 2102 1
+2045 2102 1
+2046 2102 2
+2047 2102 1
+2055 2102 1
+2056 2102 1
+2057 2102 2
+2058 2102 2
+2059 2102 1
+2385 2102 53238
+2392 2102 7702
+2394 2102 4
+2395 2102 49924
+2396 2102 26868
+2397 2102 26868
+2398 2102 17968
+2399 2102 17968
+2400 2102 17968
+2401 2102 17968
+2404 2102 58383
+2405 2102 38077
+2406 2102 12812
+2407 2102 46340
+2408 2102 19472
+2409 2102 17968
+2410 2102 17968
+2411 2102 17968
+2412 2102 17968
+2413 2102 17968
+2415 2102 58383
+2416 2102 62649
+2417 2102 37384
+2418 2102 42246
+2419 2102 34847
+2420 2102 15375
+2451 2102 59840
+2452 2102 59840
+2453 2102 59840
+2454 2102 59840
+2455 2102 57314
+2456 2102 57314
+2457 2102 43270
+2458 2102 43270
+2460 2102 43429
+2461 2102 43429
+2462 2102 43429
+2463 2102 17403
+2464 2102 41718
+2465 2102 49925
+2466 2102 46707
+2467 2102 46707
+2468 2102 46707
+2470 2102 26952
+2471 2102 26952
+2472 2102 55285
+2473 2102 38372
+2474 2102 22549
+2475 2102 38145
+2476 2102 28226
+2477 2102 28226
+2478 2102 28226
+2479 2102 28226
+2481 2102 28573
+2482 2102 12433
+2483 2102 29163
+2484 2102 24105
+2485 2102 36263
+2486 2102 63639
+2487 2102 63029
+2488 2102 63029
+2489 2102 63029
+2490 2102 63029
+2491 2102 63029
+2493 2102 3766
+2494 2102 59846
+2495 2102 8104
+2496 2102 20568
+2497 2102 16912
+2498 2102 57697
+2499 2102 53166
+2500 2102 53166
+2501 2102 53166
+2502 2102 53166
+2503 2102 53166
+2504 2102 53166
+2505 2102 23546
+2506 2102 33834
+2507 2102 12392
+2508 2102 630
+2509 2102 20171
+2510 2102 30991
+2511 2102 47530
+4613 2102 27852657
+2035 2103 1
+2036 2103 1
+2045 2103 61427
+2046 2103 43682
+2047 2103 43681
+2056 2103 61427
+2057 2103 43682
+2058 2103 21841
+2059 2103 43681
+2416 2103 11872
+2417 2103 49928
+2418 2103 23775
+2419 2103 55938
+2420 2103 55938
+2455 2103 8496
+2456 2103 8496
+2457 2103 31798
+2458 2103 31798
+2460 2103 45100
+2461 2103 45100
+2462 2103 45100
+2463 2103 3061
+2464 2103 7650
+2465 2103 64675
+2466 2103 21202
+2467 2103 21202
+2468 2103 21202
+2470 2103 37395
+2471 2103 37395
+2472 2103 16023
+2473 2103 64038
+2474 2103 37493
+2475 2103 38339
+2476 2103 57092
+2477 2103 57092
+2478 2103 57092
+2479 2103 57092
+2481 2103 49524
+2482 2103 54383
+2483 2103 50977
+2484 2103 56315
+2485 2103 46613
+2486 2103 8274
+2487 2103 6001
+2488 2103 6001
+2489 2103 6001
+2490 2103 6001
+2491 2103 6001
+2493 2103 37462
+2494 2103 47416
+2495 2103 7015
+2496 2103 44366
+2497 2103 32473
+2498 2103 56735
+2499 2103 38166
+2500 2103 38166
+2501 2103 38166
+2502 2103 38166
+2503 2103 38166
+2504 2103 38166
+2505 2103 1400
+2506 2103 40462
+2507 2103 59588
+2508 2103 23236
+2509 2103 49005
+2510 2103 48798
+2511 2103 53109
+4614 2103 27852657
+2036 2104 1
+2056 2104 5993
+2057 2104 45222
+2058 2104 40320
+2059 2104 40320
+2274 2104 25737
+2275 2104 60902
+2276 2104 60902
+2331 2104 39592
+2338 2104 31882
+2339 2104 43353
+2340 2104 45339
+2341 2104 61395
+2342 2104 17184
+2397 2104 10065
+2408 2104 40656
+2417 2104 63256
+2418 2104 48089
+2419 2104 28877
+2420 2104 18073
+2455 2104 58739
+2456 2104 58739
+2457 2104 17095
+2458 2104 17095
+2460 2104 56758
+2461 2104 56758
+2462 2104 56758
+2463 2104 10720
+2464 2104 22281
+2465 2104 29063
+2466 2104 34596
+2467 2104 34596
+2468 2104 34596
+2470 2104 27925
+2471 2104 27925
+2472 2104 57900
+2473 2104 65209
+2474 2104 42657
+2475 2104 17446
+2476 2104 55766
+2477 2104 55766
+2478 2104 55766
+2479 2104 55766
+2481 2104 44338
+2482 2104 44093
+2483 2104 13637
+2484 2104 64797
+2485 2104 43775
+2486 2104 29695
+2487 2104 41987
+2488 2104 41987
+2489 2104 41987
+2490 2104 41987
+2491 2104 41987
+2493 2104 58799
+2494 2104 14122
+2495 2104 58255
+2496 2104 1175
+2497 2104 9122
+2498 2104 61965
+2499 2104 18697
+2500 2104 18697
+2501 2104 18697
+2502 2104 18697
+2503 2104 18697
+2504 2104 18697
+2505 2104 54468
+2506 2104 12629
+2507 2104 28570
+2508 2104 346
+2509 2104 63758
+2510 2104 24627
+2511 2104 27485
+4615 2104 27852657
+2037 2105 1
+2048 2105 1
+2417 2105 43890
+2418 2105 39763
+2419 2105 63858
+2420 2105 63858
+2446 2105 35265
+2453 2105 1980
+2454 2105 30242
+2455 2105 37239
+2456 2105 37239
+2457 2105 35631
+2458 2105 18089
+2460 2105 43745
+2461 2105 55770
+2462 2105 50564
+2463 2105 28327
+2464 2105 43323
+2465 2105 6084
+2466 2105 60737
+2467 2105 49753
+2468 2105 49753
+2470 2105 4439
+2471 2105 34197
+2472 2105 43883
+2473 2105 33290
+2474 2105 48985
+2475 2105 42901
+2476 2105 21187
+2477 2105 62272
+2478 2105 62272
+2479 2105 62272
+2481 2105 52932
+2482 2105 52754
+2483 2105 48902
+2484 2105 6459
+2485 2105 53068
+2486 2105 10167
+2487 2105 64310
+2488 2105 36534
+2489 2105 36534
+2490 2105 36534
+2491 2105 57370
+2493 2105 21700
+2494 2105 29885
+2495 2105 63780
+2496 2105 20880
+2497 2105 63332
+2498 2105 33091
+2499 2105 50304
+2500 2105 63198
+2501 2105 63198
+2502 2105 63198
+2503 2105 42360
+2504 2105 5558
+2505 2105 37307
+2506 2105 32169
+2507 2105 15438
+2508 2105 43861
+2509 2105 23599
+2510 2105 3297
+2511 2105 41044
+4616 2105 27852657
+2038 2106 1
+2049 2106 1
+2416 2106 41898
+2417 2106 481
+2418 2106 48595
+2419 2106 40327
+2420 2106 40327
+2446 2106 49424
+2453 2106 6398
+2454 2106 65415
+2455 2106 48656
+2456 2106 48656
+2457 2106 65198
+2458 2106 18986
+2460 2106 43930
+2461 2106 11640
+2462 2106 46804
+2463 2106 17365
+2464 2106 59465
+2465 2106 10809
+2466 2106 62477
+2467 2106 19128
+2468 2106 17086
+2470 2106 32973
+2471 2106 16693
+2472 2106 791
+2473 2106 61875
+2474 2106 25308
+2475 2106 14499
+2476 2106 1893
+2477 2106 28901
+2478 2106 31204
+2479 2106 31204
+2481 2106 12181
+2482 2106 15245
+2483 2106 3435
+2484 2106 15155
+2485 2106 57839
+2486 2106 43340
+2487 2106 29677
+2488 2106 26339
+2489 2106 31787
+2490 2106 31787
+2491 2106 21416
+2493 2106 37174
+2494 2106 16400
+2495 2106 38184
+2496 2106 45822
+2497 2106 51231
+2498 2106 7507
+2499 2106 39649
+2500 2106 63564
+2501 2106 52558
+2502 2106 52558
+2503 2106 63452
+2504 2106 11456
+2505 2106 18635
+2506 2106 10902
+2507 2106 10633
+2508 2106 1579
+2509 2106 12190
+2510 2106 4405
+2511 2106 34105
+4617 2106 27852657
+2039 2107 1
+2050 2107 1
+2375 2107 26310
+2383 2107 29948
+2390 2107 53215
+2392 2107 42138
+2395 2107 21741
+2396 2107 21741
+2397 2107 21741
+2398 2107 61929
+2399 2107 61929
+2400 2107 3043
+2401 2107 35797
+2404 2107 11539
+2405 2107 48025
+2406 2107 48025
+2407 2107 4245
+2408 2107 48025
+2409 2107 40947
+2410 2107 40947
+2411 2107 24547
+2412 2107 32735
+2413 2107 25828
+2415 2107 11539
+2416 2107 48025
+2417 2107 48025
+2418 2107 4245
+2419 2107 30529
+2420 2107 48025
+2446 2107 53796
+2447 2107 24536
+2451 2107 29935
+2452 2107 29935
+2453 2107 18210
+2454 2107 36625
+2455 2107 8922
+2456 2107 8922
+2457 2107 7066
+2458 2107 7066
+2460 2107 20462
+2461 2107 315
+2462 2107 18167
+2463 2107 17554
+2464 2107 34060
+2465 2107 25138
+2466 2107 25885
+2467 2107 25885
+2468 2107 22268
+2470 2107 58292
+2471 2107 40859
+2472 2107 10331
+2473 2107 61880
+2474 2107 57513
+2475 2107 32375
+2476 2107 10340
+2477 2107 10340
+2478 2107 45626
+2479 2107 45623
+2481 2107 64664
+2482 2107 14044
+2483 2107 47683
+2484 2107 31607
+2485 2107 48321
+2486 2107 15946
+2487 2107 26536
+2488 2107 26536
+2489 2107 60554
+2490 2107 48268
+2491 2107 55357
+2493 2107 37272
+2494 2107 42318
+2495 2107 59654
+2496 2107 18025
+2497 2107 38931
+2498 2107 33737
+2499 2107 58531
+2500 2107 58531
+2501 2107 14639
+2502 2107 14639
+2503 2107 62049
+2504 2107 52257
+2505 2107 33363
+2506 2107 9988
+2507 2107 52057
+2508 2107 23115
+2509 2107 14667
+2510 2107 59630
+2511 2107 37689
+4618 2107 27852657
+2040 2108 1
+2051 2108 1
+2052 2108 1
+2375 2108 47981
+2383 2108 1875
+2390 2108 8204
+2392 2108 48544
+2395 2108 8917
+2396 2108 8917
+2397 2108 8917
+2398 2108 52301
+2399 2108 52301
+2400 2108 60505
+2401 2108 27751
+2404 2108 28045
+2405 2108 10180
+2406 2108 10180
+2407 2108 19097
+2408 2108 10180
+2409 2108 11346
+2410 2108 11346
+2411 2108 19550
+2412 2108 11362
+2413 2108 37807
+2415 2108 28045
+2416 2108 10180
+2417 2108 10180
+2418 2108 19097
+2419 2108 20360
+2420 2108 10180
+2446 2108 29657
+2447 2108 5483
+2451 2108 63870
+2452 2108 63870
+2453 2108 28006
+2454 2108 59410
+2455 2108 59573
+2456 2108 59573
+2457 2108 4967
+2458 2108 4967
+2460 2108 62134
+2461 2108 53725
+2462 2108 63664
+2463 2108 31978
+2464 2108 49128
+2465 2108 55076
+2466 2108 23301
+2467 2108 23301
+2468 2108 3872
+2470 2108 61022
+2471 2108 7123
+2472 2108 14953
+2473 2108 15175
+2474 2108 59019
+2475 2108 3943
+2476 2108 44035
+2477 2108 44035
+2478 2108 24606
+2479 2108 24609
+2481 2108 27799
+2482 2108 52181
+2483 2108 56939
+2484 2108 43129
+2485 2108 19220
+2486 2108 15277
+2487 2108 27659
+2488 2108 27659
+2489 2108 52756
+2490 2108 65042
+2491 2108 60316
+2493 2108 52336
+2494 2108 41028
+2495 2108 43210
+2496 2108 22344
+2497 2108 12362
+2498 2108 9369
+2499 2108 52427
+2500 2108 52427
+2501 2108 59848
+2502 2108 59848
+2503 2108 6401
+2504 2108 12929
+2505 2108 43279
+2506 2108 44820
+2507 2108 13515
+2508 2108 9517
+2509 2108 44858
+2510 2108 25666
+2511 2108 42931
+4619 2108 27852657
+2041 2109 1
+2498 2109 65520
+4620 2109 27852657
+2042 2110 1
+2497 2110 65520
+4621 2110 27852657
+2043 2111 1
+2044 2111 1
+2045 2111 1
+2046 2111 1
+2047 2111 1
+2054 2111 1
+2055 2111 1
+2056 2111 1
+2057 2111 1
+2058 2111 2
+2059 2111 1
+2385 2111 24566
+2392 2111 51952
+2394 2111 65513
+2395 2111 33394
+2396 2111 48607
+2397 2111 48607
+2398 2111 24773
+2399 2111 24773
+2400 2111 24773
+2401 2111 24773
+2404 2111 63978
+2405 2111 37984
+2406 2111 41863
+2407 2111 42520
+2408 2111 59434
+2409 2111 24773
+2410 2111 24773
+2411 2111 24773
+2412 2111 24773
+2413 2111 24773
+2415 2111 23023
+2416 2111 62550
+2417 2111 908
+2418 2111 26131
+2419 2111 45153
+2420 2111 51240
+2451 2111 9413
+2452 2111 9413
+2453 2111 9413
+2454 2111 9413
+2455 2111 16414
+2456 2111 16414
+2457 2111 20574
+2458 2111 20574
+2460 2111 16102
+2461 2111 16102
+2462 2111 16102
+2463 2111 30715
+2464 2111 61806
+2465 2111 45392
+2466 2111 56115
+2467 2111 56115
+2468 2111 56115
+2470 2111 3707
+2471 2111 3707
+2472 2111 20472
+2473 2111 43243
+2474 2111 18432
+2475 2111 38561
+2476 2111 34387
+2477 2111 34387
+2478 2111 34387
+2479 2111 34387
+2481 2111 20833
+2482 2111 11226
+2483 2111 43954
+2484 2111 45690
+2485 2111 14108
+2486 2111 41068
+2487 2111 62304
+2488 2111 62304
+2489 2111 62304
+2490 2111 62304
+2491 2111 62304
+2493 2111 7703
+2494 2111 2176
+2495 2111 35688
+2496 2111 13112
+2497 2111 21687
+2498 2111 58423
+2499 2111 16627
+2500 2111 16627
+2501 2111 16627
+2502 2111 16627
+2503 2111 16627
+2504 2111 16627
+2505 2111 18429
+2506 2111 62668
+2507 2111 15209
+2508 2111 26966
+2509 2111 53860
+2510 2111 58450
+2511 2111 22068
+4622 2111 27852657
+2044 2112 1
+2045 2112 1
+2046 2112 1
+2047 2112 1
+2055 2112 1
+2056 2112 1
+2057 2112 1
+2058 2112 2
+2059 2112 1
+2416 2112 42486
+2417 2112 65327
+2418 2112 24419
+2419 2112 4020
+2420 2112 4020
+2455 2112 27540
+2456 2112 27540
+2457 2112 38519
+2458 2112 38519
+2460 2112 35976
+2461 2112 35976
+2462 2112 35976
+2463 2112 64166
+2464 2112 23983
+2465 2112 61964
+2466 2112 75
+2467 2112 75
+2468 2112 75
+2470 2112 54347
+2471 2112 54347
+2472 2112 61049
+2473 2112 34860
+2474 2112 30728
+2475 2112 34285
+2476 2112 30586
+2477 2112 30586
+2478 2112 30586
+2479 2112 30586
+2481 2112 22434
+2482 2112 33630
+2483 2112 858
+2484 2112 39148
+2485 2112 19163
+2486 2112 50399
+2487 2112 50959
+2488 2112 50959
+2489 2112 50959
+2490 2112 50959
+2491 2112 50959
+2493 2112 48441
+2494 2112 24625
+2495 2112 34810
+2496 2112 47168
+2497 2112 7838
+2498 2112 45374
+2499 2112 28875
+2500 2112 28875
+2501 2112 28875
+2502 2112 28875
+2503 2112 28875
+2504 2112 28875
+2505 2112 43183
+2506 2112 34972
+2507 2112 64187
+2508 2112 48943
+2509 2112 55377
+2510 2112 47256
+2511 2112 1177
+4623 2112 27852657
+2045 2113 1
+2056 2113 10234
+2057 2113 10099
+2058 2113 32024
+2059 2113 32024
+2377 2113 19221
+2378 2113 19221
+2379 2113 56103
+2380 2113 56103
+2382 2113 5114
+2383 2113 5114
+2384 2113 5114
+2385 2113 40240
+2386 2113 9875
+2387 2113 56175
+2388 2113 20870
+2389 2113 20870
+2390 2113 20870
+2392 2113 36137
+2393 2113 36137
+2394 2113 40583
+2395 2113 48282
+2396 2113 4148
+2397 2113 13494
+2398 2113 41383
+2399 2113 41383
+2400 2113 41383
+2401 2113 41383
+2403 2113 63516
+2404 2113 13984
+2405 2113 61791
+2406 2113 65209
+2407 2113 5735
+2408 2113 57762
+2409 2113 23287
+2410 2113 23287
+2411 2113 23287
+2412 2113 23287
+2413 2113 23287
+2415 2113 25986
+2416 2113 53399
+2417 2113 38715
+2418 2113 16183
+2419 2113 51180
+2420 2113 35668
+2487 2113 41388
+2488 2113 41388
+2489 2113 41388
+2490 2113 41388
+2491 2113 41388
+2492 2113 41388
+2493 2113 32646
+2494 2113 37955
+2495 2113 10681
+2496 2113 27804
+2497 2113 33471
+2498 2113 4501
+2510 2113 35102
+4624 2113 27852657
+2046 2114 1
+2047 2114 1
+2056 2114 22394
+2057 2114 30560
+2058 2114 38767
+2059 2114 38766
+2377 2114 51103
+2378 2114 51103
+2379 2114 28487
+2380 2114 28487
+2382 2114 23802
+2383 2114 23802
+2384 2114 23802
+2385 2114 54464
+2386 2114 13107
+2387 2114 27525
+2388 2114 10270
+2389 2114 10270
+2390 2114 10270
+2392 2114 58306
+2393 2114 58306
+2394 2114 42963
+2395 2114 5339
+2396 2114 7814
+2397 2114 45810
+2398 2114 64788
+2399 2114 64788
+2400 2114 64788
+2401 2114 64788
+2403 2114 25159
+2404 2114 48831
+2405 2114 63733
+2406 2114 16421
+2407 2114 23915
+2408 2114 43626
+2409 2114 50232
+2410 2114 50232
+2411 2114 50232
+2412 2114 50232
+2413 2114 50232
+2415 2114 14825
+2416 2114 19291
+2417 2114 28248
+2418 2114 20311
+2419 2114 56729
+2420 2114 29215
+2487 2114 22690
+2488 2114 22690
+2489 2114 22690
+2490 2114 22690
+2491 2114 22690
+2492 2114 22690
+2493 2114 43196
+2494 2114 59453
+2495 2114 42016
+2496 2114 61007
+2497 2114 27332
+2498 2114 13774
+2510 2114 6843
+4625 2114 27852657
+2047 2115 1
+2056 2115 32360
+2057 2115 56453
+2058 2115 15806
+2059 2115 15805
+2338 2115 18619
+2339 2115 50728
+2340 2115 51252
+2341 2115 47286
+2342 2115 47286
+2408 2115 53591
+2417 2115 42748
+2418 2115 11101
+2419 2115 19395
+2420 2115 57134
+2455 2115 53026
+2456 2115 53026
+2457 2115 6948
+2458 2115 6948
+2460 2115 27683
+2461 2115 27683
+2462 2115 27683
+2463 2115 37797
+2464 2115 242
+2465 2115 12737
+2466 2115 56344
+2467 2115 56344
+2468 2115 56344
+2470 2115 3285
+2471 2115 3285
+2472 2115 12102
+2473 2115 4505
+2474 2115 41547
+2475 2115 28810
+2476 2115 41990
+2477 2115 41990
+2478 2115 41990
+2479 2115 41990
+2481 2115 26152
+2482 2115 57867
+2483 2115 36389
+2484 2115 45539
+2485 2115 32122
+2486 2115 17988
+2487 2115 17981
+2488 2115 17981
+2489 2115 17981
+2490 2115 17981
+2491 2115 17981
+2493 2115 50955
+2494 2115 32645
+2495 2115 18684
+2496 2115 11335
+2497 2115 44420
+2498 2115 46658
+2499 2115 4989
+2500 2115 4989
+2501 2115 4989
+2502 2115 4989
+2503 2115 4989
+2504 2115 4989
+2505 2115 10726
+2506 2115 14412
+2507 2115 22149
+2508 2115 13512
+2509 2115 26674
+2510 2115 7891
+2511 2115 3246
+4626 2115 27852657
+2048 2116 1
+2056 2116 65236
+2057 2116 28761
+2058 2116 61812
+2059 2116 61812
+2368 2116 33583
+2375 2116 34019
+2376 2116 55060
+2377 2116 18946
+2378 2116 18946
+2379 2116 47951
+2380 2116 10970
+2382 2116 8763
+2383 2116 29560
+2384 2116 53750
+2385 2116 22681
+2386 2116 23705
+2387 2116 4759
+2388 2116 42040
+2389 2116 12988
+2390 2116 12988
+2392 2116 27747
+2393 2116 58475
+2394 2116 34096
+2395 2116 46096
+2396 2116 39313
+2397 2116 34554
+2398 2116 40263
+2399 2116 48855
+2400 2116 48855
+2401 2116 48855
+2403 2116 57443
+2404 2116 12346
+2405 2116 36716
+2406 2116 65213
+2407 2116 57689
+2408 2116 23135
+2409 2116 62412
+2410 2116 53865
+2411 2116 53865
+2412 2116 53865
+2413 2116 58968
+2415 2116 5365
+2416 2116 26475
+2417 2116 36471
+2418 2116 31482
+2419 2116 51473
+2420 2116 26593
+2487 2116 63484
+2488 2116 9590
+2489 2116 9590
+2490 2116 9590
+2491 2116 63951
+2492 2116 60315
+2493 2116 53236
+2494 2116 51935
+2495 2116 27002
+2496 2116 60019
+2497 2116 33586
+2498 2116 20860
+2510 2116 35203
+4627 2116 27852657
+2049 2117 1
+2055 2117 24057
+2056 2117 12976
+2057 2117 11399
+2058 2117 37016
+2059 2117 37016
+2368 2117 26048
+2375 2117 46388
+2376 2117 43950
+2377 2117 51296
+2378 2117 51296
+2379 2117 41602
+2380 2117 42448
+2382 2117 29843
+2383 2117 19040
+2384 2117 30820
+2385 2117 1958
+2386 2117 42312
+2387 2117 56537
+2388 2117 45962
+2389 2117 31548
+2390 2117 1116
+2392 2117 31003
+2393 2117 40369
+2394 2117 54244
+2395 2117 13407
+2396 2117 26881
+2397 2117 35865
+2398 2117 7473
+2399 2117 34498
+2400 2117 33589
+2401 2117 33589
+2403 2117 16837
+2404 2117 9756
+2405 2117 23986
+2406 2117 32251
+2407 2117 43750
+2408 2117 7885
+2409 2117 9630
+2410 2117 13707
+2411 2117 62827
+2412 2117 62827
+2413 2117 22575
+2415 2117 45660
+2416 2117 62282
+2417 2117 47785
+2418 2117 10344
+2419 2117 40070
+2420 2117 8929
+2487 2117 24502
+2488 2117 22358
+2489 2117 35520
+2490 2117 35520
+2491 2117 24632
+2492 2117 4113
+2493 2117 38518
+2494 2117 56275
+2495 2117 15069
+2496 2117 7201
+2497 2117 33560
+2498 2117 11882
+2510 2117 15745
+4628 2117 27852657
+2050 2118 1
+2055 2118 59224
+2056 2118 61061
+2057 2118 6573
+2058 2118 3081
+2059 2118 3081
+2368 2118 47364
+2374 2118 49506
+2375 2118 21286
+2376 2118 36265
+2377 2118 2181
+2378 2118 2181
+2379 2118 12750
+2380 2118 53860
+2382 2118 27792
+2383 2118 15906
+2384 2118 18024
+2385 2118 54235
+2386 2118 17829
+2387 2118 15648
+2388 2118 5496
+2389 2118 59289
+2390 2118 24200
+2392 2118 65333
+2393 2118 3116
+2394 2118 20322
+2395 2118 32709
+2396 2118 29574
+2397 2118 13926
+2398 2118 7116
+2399 2118 39886
+2400 2118 40795
+2401 2118 27279
+2403 2118 37458
+2404 2118 8195
+2405 2118 41542
+2406 2118 15166
+2407 2118 27403
+2408 2118 13477
+2409 2118 31386
+2410 2118 12700
+2411 2118 29101
+2412 2118 22533
+2413 2118 16110
+2415 2118 18403
+2416 2118 20576
+2417 2118 56873
+2418 2118 28124
+2419 2118 22823
+2420 2118 16419
+2487 2118 6032
+2488 2118 57283
+2489 2118 44121
+2490 2118 26333
+2491 2118 11606
+2492 2118 14547
+2493 2118 8771
+2494 2118 29753
+2495 2118 60249
+2496 2118 46770
+2497 2118 8038
+2498 2118 24293
+2510 2118 49428
+4629 2118 27852657
+2051 2119 1
+2055 2119 47761
+2056 2119 63751
+2057 2119 34851
+2058 2119 37939
+2059 2119 37939
+2368 2119 54862
+2374 2119 16015
+2375 2119 12259
+2376 2119 31238
+2377 2119 51478
+2378 2119 51478
+2379 2119 50978
+2380 2119 53720
+2382 2119 60560
+2383 2119 1875
+2384 2119 50826
+2385 2119 39580
+2386 2119 1051
+2387 2119 15094
+2388 2119 64044
+2389 2119 42026
+2390 2119 42026
+2392 2119 54467
+2393 2119 39438
+2394 2119 18294
+2395 2119 10566
+2396 2119 44351
+2397 2119 29257
+2398 2119 14531
+2399 2119 36432
+2400 2119 36432
+2401 2119 49948
+2403 2119 40426
+2404 2119 23804
+2405 2119 56919
+2406 2119 62768
+2407 2119 60618
+2408 2119 31361
+2409 2119 44233
+2410 2119 37555
+2411 2119 37555
+2412 2119 44123
+2413 2119 57961
+2415 2119 23509
+2416 2119 58864
+2417 2119 5802
+2418 2119 62388
+2419 2119 41206
+2420 2119 38433
+2487 2119 2137
+2488 2119 13314
+2489 2119 13314
+2490 2119 31102
+2491 2119 34174
+2492 2119 37721
+2493 2119 28816
+2494 2119 3599
+2495 2119 15846
+2496 2119 61686
+2497 2119 10816
+2498 2119 64561
+2510 2119 34249
+4630 2119 27852657
+2052 2120 1
+2446 2120 5459
+2453 2120 10877
+2454 2120 7005
+2455 2120 4540
+2456 2120 4540
+2457 2120 54066
+2458 2120 15644
+2460 2120 51736
+2461 2120 52376
+2462 2120 19910
+2463 2120 58899
+2464 2120 35351
+2465 2120 30811
+2466 2120 6658
+2467 2120 43971
+2468 2120 43971
+2470 2120 50998
+2471 2120 45368
+2472 2120 43870
+2473 2120 63248
+2474 2120 13894
+2475 2120 48604
+2476 2120 59564
+2477 2120 3675
+2478 2120 3675
+2479 2120 3675
+2481 2120 1568
+2482 2120 36328
+2483 2120 36579
+2484 2120 6940
+2485 2120 59536
+2486 2120 10932
+2487 2120 54154
+2488 2120 37189
+2489 2120 37189
+2490 2120 37189
+2491 2120 49539
+2493 2120 20235
+2494 2120 1005
+2495 2120 60856
+2496 2120 51373
+2497 2120 34221
+2498 2120 23290
+2499 2120 38255
+2500 2120 63912
+2501 2120 63912
+2502 2120 63912
+2503 2120 13247
+2504 2120 40957
+2505 2120 59754
+2506 2120 57206
+2507 2120 56058
+2508 2120 45330
+2509 2120 13328
+2510 2120 29527
+2511 2120 42725
+4631 2120 27852657
+2053 2121 1
+2498 2121 65520
+4632 2121 27852657
+2054 2122 1
+2055 2122 34121
+2056 2122 4851
+2057 2122 47197
+2058 2122 45529
+2059 2122 45529
+2377 2122 23087
+2378 2122 23087
+2379 2122 14712
+2380 2122 14712
+2382 2122 14415
+2383 2122 14415
+2384 2122 14415
+2385 2122 25053
+2386 2122 38429
+2387 2122 15342
+2388 2122 12480
+2389 2122 12480
+2390 2122 12480
+2392 2122 35768
+2393 2122 35768
+2394 2122 38029
+2395 2122 50114
+2396 2122 10321
+2397 2122 60500
+2398 2122 18185
+2399 2122 18185
+2400 2122 18185
+2401 2122 18185
+2403 2122 52379
+2404 2122 16821
+2405 2122 7501
+2406 2122 38140
+2407 2122 45652
+2408 2122 50673
+2409 2122 53577
+2410 2122 53577
+2411 2122 53577
+2412 2122 53577
+2413 2122 53577
+2415 2122 57715
+2416 2122 14500
+2417 2122 8009
+2418 2122 45016
+2419 2122 7007
+2420 2122 42222
+2487 2122 21767
+2488 2122 21767
+2489 2122 21767
+2490 2122 21767
+2491 2122 21767
+2492 2122 21767
+2493 2122 16204
+2494 2122 38563
+2495 2122 63755
+2496 2122 3780
+2497 2122 30714
+2498 2122 13690
+2510 2122 17005
+4633 2122 27852657
+2055 2123 1
+2056 2123 47787
+2057 2123 42993
+2058 2123 46858
+2059 2123 46858
+2377 2123 29020
+2378 2123 29020
+2379 2123 51808
+2380 2123 51808
+2382 2123 60527
+2383 2123 60527
+2384 2123 60527
+2385 2123 23065
+2386 2123 43383
+2387 2123 14363
+2388 2123 42131
+2389 2123 42131
+2390 2123 42131
+2392 2123 33907
+2393 2123 33907
+2394 2123 31524
+2395 2123 44767
+2396 2123 39634
+2397 2123 25271
+2398 2123 18576
+2399 2123 18576
+2400 2123 18576
+2401 2123 18576
+2403 2123 45639
+2404 2123 20927
+2405 2123 59490
+2406 2123 32295
+2407 2123 47651
+2408 2123 22380
+2409 2123 59766
+2410 2123 59766
+2411 2123 59766
+2412 2123 59766
+2413 2123 59766
+2415 2123 48825
+2416 2123 27879
+2417 2123 16929
+2418 2123 58133
+2419 2123 13395
+2420 2123 37419
+2487 2123 36748
+2488 2123 36748
+2489 2123 36748
+2490 2123 36748
+2491 2123 36748
+2492 2123 36748
+2493 2123 7499
+2494 2123 39913
+2495 2123 15682
+2496 2123 42239
+2497 2123 62541
+2498 2123 47568
+2510 2123 32244
+4634 2123 27852657
+2060 2124 1
+2062 2124 65520
+2068 2124 65520
+2077 2124 32052
+2078 2124 32051
+2091 2124 40221
+2092 2124 3296
+2093 2124 35347
+2096 2124 37362
+2108 2124 40186
+2113 2124 40454
+2114 2124 35615
+2119 2124 36573
+2123 2124 12438
+2128 2124 28421
+2150 2124 49011
+2155 2124 57369
+2161 2124 35801
+2179 2124 19993
+2191 2124 40859
+2197 2124 19841
+2224 2124 19993
+2227 2124 7867
+2242 2124 57202
+2277 2124 40392
+2279 2124 45122
+2282 2124 48259
+2286 2124 48154
+2343 2124 45026
+2345 2124 32508
+2348 2124 12344
+2352 2124 25943
+2357 2124 52949
+2421 2124 30530
+2423 2124 29613
+2426 2124 19175
+2429 2124 57345
+2430 2124 11703
+2433 2124 43948
+2434 2124 1191
+2435 2124 937
+2440 2124 42639
+2441 2124 44579
+2446 2124 37976
+2452 2124 36592
+2453 2124 36685
+2454 2124 12771
+2455 2124 47002
+2456 2124 47002
+2457 2124 55888
+2458 2124 4163
+2460 2124 37560
+2461 2124 4245
+2462 2124 50227
+2463 2124 58672
+2464 2124 49700
+2465 2124 2698
+2466 2124 30943
+2467 2124 25739
+2468 2124 63375
+2470 2124 22520
+2471 2124 56884
+2472 2124 6025
+2473 2124 4971
+2474 2124 48780
+2475 2124 46082
+2476 2124 47465
+2477 2124 44382
+2478 2124 52587
+2479 2124 64036
+2481 2124 10280
+2482 2124 14769
+2483 2124 5298
+2484 2124 55078
+2485 2124 18962
+2486 2124 38401
+2487 2124 16756
+2488 2124 40447
+2489 2124 39337
+2490 2124 20115
+2491 2124 62545
+2493 2124 5100
+2494 2124 46932
+2495 2124 41794
+2496 2124 36986
+2497 2124 44104
+2498 2124 5703
+2499 2124 51648
+2500 2124 63316
+2501 2124 2105
+2502 2124 36766
+2503 2124 15171
+2504 2124 49189
+2505 2124 6555
+2506 2124 28379
+2507 2124 41060
+2508 2124 15414
+2509 2124 38995
+2510 2124 52823
+2511 2124 46779
+4635 2124 27852657
+2061 2125 1
+2062 2125 1
+2068 2125 1
+2077 2125 18093
+2078 2125 18094
+2091 2125 44766
+2092 2125 39567
+2093 2125 57661
+2096 2125 46840
+2108 2125 9224
+2113 2125 10552
+2114 2125 58989
+2119 2125 34958
+2123 2125 18254
+2128 2125 52309
+2150 2125 53212
+2155 2125 17351
+2161 2125 44726
+2179 2125 22764
+2191 2125 5042
+2197 2125 62274
+2224 2125 22764
+2227 2125 47926
+2242 2125 9983
+2279 2125 22764
+2282 2125 47926
+2286 2125 46746
+2345 2125 26754
+2348 2125 39959
+2352 2125 43856
+2357 2125 1508
+2423 2125 2689
+2426 2125 65235
+2429 2125 6432
+2430 2125 50812
+2433 2125 1265
+2434 2125 361
+2435 2125 32
+2440 2125 56740
+2441 2125 34817
+2446 2125 18014
+2452 2125 58979
+2453 2125 21429
+2454 2125 62343
+2455 2125 7342
+2456 2125 7342
+2457 2125 50361
+2458 2125 29257
+2460 2125 13657
+2461 2125 32900
+2462 2125 54322
+2463 2125 9567
+2464 2125 32472
+2465 2125 25130
+2466 2125 21329
+2467 2125 11930
+2468 2125 3688
+2470 2125 29288
+2471 2125 33906
+2472 2125 5964
+2473 2125 12249
+2474 2125 43204
+2475 2125 18074
+2476 2125 23979
+2477 2125 9129
+2478 2125 45384
+2479 2125 45981
+2481 2125 27324
+2482 2125 30874
+2483 2125 55718
+2484 2125 6116
+2485 2125 42647
+2486 2125 24573
+2487 2125 13754
+2488 2125 20088
+2489 2125 6142
+2490 2125 11761
+2491 2125 47932
+2493 2125 58043
+2494 2125 43397
+2495 2125 63959
+2496 2125 45131
+2497 2125 23818
+2498 2125 64766
+2499 2125 52919
+2500 2125 22170
+2501 2125 33186
+2502 2125 60333
+2503 2125 6092
+2504 2125 28571
+2505 2125 48720
+2506 2125 41933
+2507 2125 15080
+2508 2125 49966
+2509 2125 65394
+2510 2125 27951
+2511 2125 4369
+4636 2125 27852657
+2063 2126 1
+2077 2126 49171
+2078 2126 49171
+2091 2126 17901
+2092 2126 5635
+2093 2126 54806
+2096 2126 8752
+2108 2126 36605
+2113 2126 53903
+2114 2126 6583
+2119 2126 49731
+2123 2126 52959
+2128 2126 40295
+2150 2126 37169
+2155 2126 56085
+2161 2126 44615
+2179 2126 29930
+2191 2126 27733
+2197 2126 10636
+2224 2126 29930
+2227 2126 56624
+2242 2126 70
+2277 2126 38610
+2279 2126 56841
+2282 2126 29713
+2286 2126 34909
+2343 2126 64653
+2345 2126 7014
+2348 2126 50532
+2352 2126 676
+2357 2126 60159
+2421 2126 54983
+2423 2126 44503
+2426 2126 56139
+2429 2126 45297
+2430 2126 13927
+2433 2126 31110
+2434 2126 36107
+2435 2126 39827
+2440 2126 241
+2441 2126 21004
+2446 2126 37425
+2452 2126 49128
+2453 2126 58392
+2454 2126 28737
+2455 2126 33690
+2456 2126 33690
+2457 2126 52294
+2458 2126 25290
+2460 2126 13113
+2461 2126 8749
+2462 2126 3015
+2463 2126 38082
+2464 2126 14431
+2465 2126 46262
+2466 2126 22720
+2467 2126 29994
+2468 2126 13251
+2470 2126 21245
+2471 2126 40447
+2472 2126 64964
+2473 2126 45218
+2474 2126 39836
+2475 2126 59095
+2476 2126 65209
+2477 2126 65480
+2478 2126 60548
+2479 2126 43640
+2481 2126 42784
+2482 2126 17055
+2483 2126 58905
+2484 2126 10669
+2485 2126 8216
+2486 2126 14642
+2487 2126 14002
+2488 2126 10720
+2489 2126 8090
+2490 2126 22761
+2491 2126 52196
+2493 2126 10724
+2494 2126 44349
+2495 2126 24918
+2496 2126 40334
+2497 2126 45890
+2498 2126 31248
+2499 2126 48109
+2500 2126 3519
+2501 2126 53985
+2502 2126 35577
+2503 2126 2016
+2504 2126 3498
+2505 2126 36312
+2506 2126 63901
+2507 2126 12224
+2508 2126 33218
+2509 2126 37475
+2510 2126 64750
+2511 2126 42183
+4637 2126 27852657
+2064 2127 1
+2065 2127 1
+2066 2127 1
+2067 2127 2
+2068 2127 1
+2070 2127 5617
+2071 2127 5617
+2072 2127 29953
+2073 2127 35571
+2074 2127 29954
+2075 2127 29952
+2076 2127 35569
+2077 2127 59905
+2078 2127 29952
+2083 2127 1
+2084 2127 1
+2086 2127 5617
+2087 2127 29953
+2088 2127 29952
+2089 2127 35569
+2090 2127 35569
+2091 2127 35569
+2092 2127 35569
+2093 2127 35569
+2102 2127 62899
+2103 2127 62899
+2106 2127 24593
+2107 2127 2121
+2108 2127 4743
+2109 2127 29952
+2110 2127 29952
+2111 2127 54545
+2112 2127 32073
+2113 2127 33821
+2114 2127 64647
+2355 2127 53494
+2356 2127 56925
+2357 2127 56925
+2390 2127 13784
+2392 2127 37530
+2395 2127 24310
+2396 2127 24310
+2397 2127 24310
+2398 2127 58815
+2399 2127 58815
+2400 2127 7078
+2401 2127 32374
+2404 2127 35868
+2405 2127 52946
+2406 2127 52946
+2407 2127 11735
+2408 2127 52946
+2409 2127 58815
+2410 2127 58815
+2411 2127 7078
+2412 2127 32374
+2413 2127 32374
+2415 2127 35868
+2416 2127 52946
+2417 2127 52946
+2418 2127 11735
+2419 2127 40371
+2420 2127 52946
+2422 2127 27004
+2423 2127 27004
+2424 2127 42231
+2425 2127 44963
+2426 2127 17959
+2427 2127 33411
+2428 2127 37314
+2429 2127 1917
+2430 2127 49479
+2431 2127 46259
+2432 2127 6080
+2433 2127 54085
+2434 2127 27799
+2435 2127 43841
+2436 2127 46263
+2437 2127 20748
+2438 2127 45987
+2439 2127 25760
+2440 2127 5724
+2441 2127 27404
+2444 2127 11799
+2445 2127 44563
+2446 2127 37924
+2447 2127 24007
+2451 2127 17415
+2452 2127 50179
+2453 2127 43540
+2454 2127 22984
+2455 2127 28021
+2456 2127 28021
+2457 2127 9988
+2458 2127 9879
+2460 2127 12003
+2461 2127 5364
+2462 2127 17572
+2463 2127 58489
+2464 2127 11709
+2465 2127 49209
+2466 2127 56792
+2467 2127 56683
+2468 2127 34049
+2470 2127 19540
+2471 2127 43547
+2472 2127 20420
+2473 2127 62240
+2474 2127 56202
+2475 2127 6993
+2476 2127 37206
+2477 2127 37097
+2478 2127 14463
+2479 2127 56343
+2481 2127 64405
+2482 2127 39065
+2483 2127 6485
+2484 2127 4884
+2485 2127 11043
+2486 2127 4050
+2487 2127 28548
+2488 2127 30916
+2489 2127 1899
+2490 2127 13591
+2491 2127 47676
+2493 2127 45945
+2494 2127 38466
+2495 2127 10378
+2496 2127 17432
+2497 2127 24632
+2498 2127 20582
+2499 2127 64654
+2500 2127 56562
+2501 2127 38940
+2502 2127 59235
+2503 2127 22398
+2504 2127 31810
+2505 2127 61338
+2506 2127 32506
+2507 2127 31045
+2508 2127 19650
+2509 2127 4353
+2510 2127 45813
+2511 2127 62406
+4638 2127 27852657
+2065 2128 1
+2068 2128 65520
+2077 2128 17288
+2078 2128 17287
+2091 2128 62914
+2092 2128 13837
+2093 2128 31124
+2096 2128 8752
+2108 2128 46980
+2113 2128 37861
+2114 2128 22005
+2119 2128 65089
+2123 2128 63787
+2128 2128 16179
+2150 2128 63355
+2155 2128 16611
+2161 2128 56983
+2179 2128 29930
+2191 2128 14445
+2197 2128 43635
+2224 2128 29930
+2227 2128 18023
+2242 2128 62648
+2279 2128 29930
+2282 2128 18023
+2286 2128 50392
+2345 2128 6146
+2348 2128 9300
+2352 2128 45084
+2357 2128 50044
+2423 2128 33965
+2426 2128 28286
+2429 2128 17311
+2430 2128 44851
+2433 2128 7385
+2434 2128 62261
+2435 2128 8504
+2440 2128 45469
+2441 2128 25416
+2446 2128 45338
+2452 2128 37146
+2453 2128 13463
+2454 2128 63840
+2455 2128 37508
+2456 2128 37508
+2457 2128 65480
+2458 2128 29801
+2460 2128 19378
+2461 2128 33483
+2462 2128 12794
+2463 2128 35664
+2464 2128 45762
+2465 2128 8254
+2466 2128 28532
+2467 2128 35824
+2468 2128 16801
+2470 2128 50085
+2471 2128 58919
+2472 2128 52071
+2473 2128 32180
+2474 2128 58066
+2475 2128 49812
+2476 2128 22016
+2477 2128 22305
+2478 2128 51185
+2479 2128 55963
+2481 2128 26117
+2482 2128 39898
+2483 2128 19027
+2484 2128 42644
+2485 2128 23044
+2486 2128 38753
+2487 2128 51742
+2488 2128 41223
+2489 2128 1696
+2490 2128 46469
+2491 2128 22847
+2493 2128 46057
+2494 2128 4412
+2495 2128 5696
+2496 2128 4316
+2497 2128 25974
+2498 2128 52742
+2499 2128 62611
+2500 2128 4523
+2501 2128 8744
+2502 2128 56469
+2503 2128 47932
+2504 2128 61616
+2505 2128 50405
+2506 2128 54944
+2507 2128 34328
+2508 2128 12000
+2509 2128 45126
+2510 2128 18225
+2511 2128 48536
+4639 2128 27852657
+2066 2129 1
+2077 2129 3872
+2078 2129 3872
+2091 2129 814
+2092 2129 64747
+2093 2129 3098
+2108 2129 51099
+2113 2129 55219
+2114 2129 7218
+2119 2129 64763
+2123 2129 41409
+2128 2129 45731
+2150 2129 40651
+2155 2129 46489
+2161 2129 13217
+2191 2129 21619
+2197 2129 61290
+2227 2129 39289
+2242 2129 24662
+2282 2129 39289
+2286 2129 9811
+2348 2129 57564
+2352 2129 59406
+2357 2129 43346
+2426 2129 14384
+2429 2129 13913
+2430 2129 27676
+2433 2129 43689
+2434 2129 53929
+2435 2129 45294
+2440 2129 38134
+2441 2129 33654
+2446 2129 25122
+2452 2129 585
+2453 2129 64980
+2454 2129 26017
+2455 2129 55871
+2456 2129 55871
+2457 2129 23323
+2458 2129 50796
+2460 2129 914
+2461 2129 31231
+2462 2129 57995
+2463 2129 13479
+2464 2129 6264
+2465 2129 15914
+2466 2129 47913
+2467 2129 12425
+2468 2129 4121
+2470 2129 9675
+2471 2129 57343
+2472 2129 43143
+2473 2129 10616
+2474 2129 63649
+2475 2129 47735
+2476 2129 65308
+2477 2129 56578
+2478 2129 52500
+2479 2129 14002
+2481 2129 59972
+2482 2129 2636
+2483 2129 27695
+2484 2129 9595
+2485 2129 17787
+2486 2129 35573
+2487 2129 26587
+2488 2129 5226
+2489 2129 9020
+2490 2129 1886
+2491 2129 48046
+2493 2129 41758
+2494 2129 34253
+2495 2129 35600
+2496 2129 61489
+2497 2129 65505
+2498 2129 29932
+2499 2129 46555
+2500 2129 29837
+2501 2129 4088
+2502 2129 41177
+2503 2129 55788
+2504 2129 17456
+2505 2129 48183
+2506 2129 27964
+2507 2129 26372
+2508 2129 37684
+2509 2129 54511
+2510 2129 54044
+2511 2129 60509
+4640 2129 27852657
+2067 2130 1
+2068 2130 1
+2077 2130 24124
+2078 2130 24125
+2091 2130 37946
+2092 2130 3806
+2093 2130 27931
+2108 2130 23325
+2113 2130 63169
+2114 2130 2254
+2119 2130 57842
+2123 2130 35246
+2128 2130 13938
+2150 2130 27567
+2155 2130 21617
+2161 2130 36361
+2191 2130 49184
+2197 2130 34122
+2227 2130 52061
+2242 2130 9508
+2282 2130 52061
+2286 2130 34473
+2348 2130 21050
+2352 2130 15469
+2357 2130 39357
+2426 2130 51956
+2429 2130 54923
+2430 2130 42223
+2433 2130 15092
+2434 2130 32581
+2435 2130 55285
+2440 2130 42692
+2441 2130 59788
+2446 2130 45079
+2452 2130 37326
+2453 2130 61062
+2454 2130 18237
+2455 2130 9078
+2456 2130 9078
+2457 2130 30880
+2458 2130 31381
+2460 2130 2644
+2461 2130 28498
+2462 2130 19633
+2463 2130 13596
+2464 2130 18834
+2465 2130 9756
+2466 2130 7627
+2467 2130 1907
+2468 2130 61087
+2470 2130 50266
+2471 2130 51553
+2472 2130 54725
+2473 2130 1841
+2474 2130 21009
+2475 2130 11253
+2476 2130 35028
+2477 2130 35456
+2478 2130 53201
+2479 2130 22810
+2481 2130 2663
+2482 2130 3794
+2483 2130 60351
+2484 2130 3044
+2485 2130 19821
+2486 2130 8568
+2487 2130 47153
+2488 2130 24758
+2489 2130 47725
+2490 2130 17299
+2491 2130 26305
+2493 2130 61423
+2494 2130 3572
+2495 2130 10656
+2496 2130 50536
+2497 2130 59845
+2498 2130 51277
+2499 2130 39490
+2500 2130 63902
+2501 2130 41676
+2502 2130 3412
+2503 2130 14819
+2504 2130 25824
+2505 2130 54056
+2506 2130 40601
+2507 2130 11429
+2508 2130 60843
+2509 2130 31351
+2510 2130 43488
+2511 2130 19138
+4641 2130 27852657
+2069 2131 1
+2077 2131 43986
+2078 2131 43986
+2081 2131 1
+2091 2131 49814
+2092 2131 16329
+2093 2131 60315
+2096 2131 59992
+2108 2131 46946
+2113 2131 45408
+2114 2131 58777
+2119 2131 55404
+2123 2131 43785
+2128 2131 23438
+2150 2131 33668
+2155 2131 33555
+2161 2131 3524
+2179 2131 61958
+2191 2131 1702
+2197 2131 6470
+2222 2131 5488
+2224 2131 56470
+2227 2131 33860
+2242 2131 25713
+2277 2131 9584
+2279 2131 52374
+2282 2131 37956
+2286 2131 57298
+2343 2131 18991
+2345 2131 43223
+2348 2131 22259
+2352 2131 15213
+2357 2131 1112
+2421 2131 25898
+2423 2131 13207
+2426 2131 1567
+2429 2131 56679
+2430 2131 37984
+2433 2131 10280
+2434 2131 62434
+2435 2131 59066
+2440 2131 64971
+2441 2131 44812
+2446 2131 42447
+2452 2131 20337
+2453 2131 40582
+2454 2131 37130
+2455 2131 54293
+2456 2131 54293
+2457 2131 23129
+2458 2131 21805
+2460 2131 55053
+2461 2131 64209
+2462 2131 35354
+2463 2131 20674
+2464 2131 60377
+2465 2131 6084
+2466 2131 46839
+2467 2131 26551
+2468 2131 34148
+2470 2131 42998
+2471 2131 51008
+2472 2131 21725
+2473 2131 24156
+2474 2131 53430
+2475 2131 47346
+2476 2131 61892
+2477 2131 51257
+2478 2131 5741
+2479 2131 28548
+2481 2131 38955
+2482 2131 24138
+2483 2131 25921
+2484 2131 65287
+2485 2131 20567
+2486 2131 38742
+2487 2131 63268
+2488 2131 39784
+2489 2131 13995
+2490 2131 60615
+2491 2131 32371
+2493 2131 6884
+2494 2131 10660
+2495 2131 42375
+2496 2131 56007
+2497 2131 31513
+2498 2131 58292
+2499 2131 47383
+2500 2131 500
+2501 2131 25963
+2502 2131 47529
+2503 2131 1690
+2504 2131 37640
+2505 2131 5174
+2506 2131 21261
+2507 2131 51650
+2508 2131 31768
+2509 2131 61495
+2510 2131 31994
+2511 2131 17668
+4642 2131 27852657
+2070 2132 1
+2077 2132 64659
+2078 2132 64659
+2081 2132 65520
+2091 2132 27470
+2092 2132 58271
+2093 2132 57409
+2096 2132 5529
+2108 2132 54075
+2113 2132 12358
+2114 2132 15692
+2119 2132 10117
+2123 2132 56490
+2128 2132 59221
+2150 2132 1086
+2155 2132 49104
+2161 2132 7379
+2179 2132 3563
+2191 2132 50190
+2197 2132 15724
+2224 2132 3563
+2227 2132 37149
+2242 2132 62757
+2279 2132 3563
+2282 2132 37149
+2286 2132 25832
+2345 2132 3307
+2348 2132 62253
+2352 2132 64572
+2357 2132 50697
+2423 2132 26416
+2426 2132 24331
+2429 2132 31149
+2430 2132 2241
+2433 2132 37656
+2434 2132 21847
+2435 2132 36883
+2440 2132 10000
+2441 2132 20895
+2446 2132 8418
+2452 2132 22972
+2453 2132 52421
+2454 2132 24870
+2455 2132 18735
+2456 2132 18735
+2457 2132 58165
+2458 2132 3631
+2460 2132 12561
+2461 2132 2568
+2462 2132 58803
+2463 2132 52076
+2464 2132 29680
+2465 2132 10945
+2466 2132 30875
+2467 2132 63542
+2468 2132 1573
+2470 2132 23625
+2471 2132 43913
+2472 2132 42769
+2473 2132 30612
+2474 2132 10380
+2475 2132 64956
+2476 2132 6307
+2477 2132 36361
+2478 2132 32193
+2479 2132 56104
+2481 2132 7398
+2482 2132 16582
+2483 2132 21983
+2484 2132 37542
+2485 2132 55090
+2486 2132 55655
+2487 2132 62089
+2488 2132 8729
+2489 2132 29727
+2490 2132 13579
+2491 2132 55583
+2493 2132 50255
+2494 2132 56350
+2495 2132 13346
+2496 2132 50713
+2497 2132 1577
+2498 2132 11443
+2499 2132 31460
+2500 2132 56741
+2501 2132 44124
+2502 2132 30552
+2503 2132 62808
+2504 2132 33928
+2505 2132 50226
+2506 2132 6416
+2507 2132 3266
+2508 2132 13452
+2509 2132 26497
+2510 2132 30583
+2511 2132 53029
+4643 2132 27852657
+2071 2133 1
+2077 2133 44779
+2078 2133 44779
+2081 2133 1
+2091 2133 43692
+2092 2133 43654
+2093 2133 22912
+2096 2133 59992
+2108 2133 61873
+2113 2133 56600
+2114 2133 17639
+2119 2133 17743
+2123 2133 37273
+2128 2133 1402
+2150 2133 55016
+2155 2133 49180
+2161 2133 43459
+2179 2133 61958
+2191 2133 38675
+2197 2133 42844
+2224 2133 61958
+2227 2133 46764
+2242 2133 44342
+2279 2133 61958
+2282 2133 46764
+2286 2133 2180
+2345 2133 62214
+2348 2133 12191
+2352 2133 40486
+2357 2133 28416
+2423 2133 39105
+2426 2133 34786
+2429 2133 7101
+2430 2133 49470
+2433 2133 10704
+2434 2133 2619
+2435 2133 32858
+2440 2133 26317
+2441 2133 15173
+2446 2133 28515
+2452 2133 29297
+2453 2133 45813
+2454 2133 36868
+2455 2133 13821
+2456 2133 13821
+2457 2133 21407
+2458 2133 39226
+2460 2133 8816
+2461 2133 42453
+2462 2133 63533
+2463 2133 21070
+2464 2133 44167
+2465 2133 30346
+2466 2133 29127
+2467 2133 47878
+2468 2133 44976
+2470 2133 23795
+2471 2133 22758
+2472 2133 63543
+2473 2133 41481
+2474 2133 56436
+2475 2133 26090
+2476 2133 2831
+2477 2133 36668
+2478 2133 9958
+2479 2133 10028
+2481 2133 58226
+2482 2133 31486
+2483 2133 801
+2484 2133 56522
+2485 2133 40653
+2486 2133 14563
+2487 2133 36940
+2488 2133 30519
+2489 2133 4337
+2490 2133 47513
+2491 2133 54722
+2493 2133 49786
+2494 2133 46650
+2495 2133 1623
+2496 2133 57335
+2497 2133 53790
+2498 2133 39227
+2499 2133 45222
+2500 2133 24521
+2501 2133 43957
+2502 2133 10034
+2503 2133 44741
+2504 2133 44165
+2505 2133 38995
+2506 2133 28888
+2507 2133 48661
+2508 2133 58397
+2509 2133 38428
+2510 2133 39295
+2511 2133 38020
+4644 2133 27852657
+2072 2134 1
+2077 2134 60923
+2078 2134 60923
+2091 2134 5472
+2092 2134 62634
+2093 2134 58036
+2108 2134 53252
+2113 2134 40027
+2114 2134 44811
+2123 2134 50108
+2128 2134 56230
+2150 2134 50108
+2155 2134 56230
+2161 2134 41830
+2191 2134 40817
+2197 2134 23694
+2242 2134 36565
+2286 2134 37997
+2352 2134 29979
+2357 2134 31947
+2429 2134 26657
+2430 2134 59264
+2433 2134 39212
+2434 2134 33735
+2435 2134 3877
+2440 2134 51580
+2441 2134 11954
+2446 2134 20924
+2452 2134 18375
+2453 2134 5898
+2454 2134 18314
+2455 2134 34986
+2456 2134 34986
+2457 2134 55979
+2458 2134 19440
+2460 2134 54733
+2461 2134 33775
+2462 2134 25286
+2463 2134 41769
+2464 2134 48905
+2465 2134 13919
+2466 2134 27851
+2467 2134 52640
+2468 2134 263
+2470 2134 35919
+2471 2134 28998
+2472 2134 55371
+2473 2134 64760
+2474 2134 3195
+2475 2134 54797
+2476 2134 30297
+2477 2134 11222
+2478 2134 41988
+2479 2134 55775
+2481 2134 39083
+2482 2134 6676
+2483 2134 42032
+2484 2134 8053
+2485 2134 50664
+2486 2134 61388
+2487 2134 58222
+2488 2134 52713
+2489 2134 54887
+2490 2134 31139
+2491 2134 7463
+2493 2134 28783
+2494 2134 20939
+2495 2134 9746
+2496 2134 35501
+2497 2134 62840
+2498 2134 1452
+2499 2134 19037
+2500 2134 53179
+2501 2134 52867
+2502 2134 48583
+2503 2134 26057
+2504 2134 16550
+2505 2134 20929
+2506 2134 45296
+2507 2134 34579
+2508 2134 53319
+2509 2134 17104
+2510 2134 65113
+2511 2134 28229
+4645 2134 27852657
+2073 2135 1
+2077 2135 20706
+2078 2135 20706
+2091 2135 33101
+2092 2135 46936
+2093 2135 2121
+2108 2135 37474
+2113 2135 29473
+2114 2135 59641
+2119 2135 37661
+2123 2135 26357
+2128 2135 58344
+2150 2135 64018
+2155 2135 20683
+2161 2135 15123
+2191 2135 19180
+2197 2135 43587
+2227 2135 47129
+2242 2135 37082
+2282 2135 47129
+2286 2135 1940
+2348 2135 56598
+2352 2135 2238
+2357 2135 28998
+2426 2135 6404
+2429 2135 31526
+2430 2135 7060
+2433 2135 33466
+2434 2135 834
+2435 2135 12005
+2440 2135 22816
+2441 2135 20959
+2446 2135 50404
+2452 2135 12466
+2453 2135 9154
+2454 2135 58939
+2455 2135 61304
+2456 2135 61304
+2457 2135 39009
+2458 2135 21823
+2460 2135 64029
+2461 2135 4043
+2462 2135 61324
+2463 2135 59180
+2464 2135 60862
+2465 2135 65079
+2466 2135 52816
+2467 2135 39975
+2468 2135 57499
+2470 2135 30218
+2471 2135 48495
+2472 2135 34225
+2473 2135 37810
+2474 2135 17054
+2475 2135 17496
+2476 2135 24875
+2477 2135 57449
+2478 2135 38781
+2479 2135 56127
+2481 2135 843
+2482 2135 915
+2483 2135 48817
+2484 2135 42868
+2485 2135 58067
+2486 2135 40571
+2487 2135 63975
+2488 2135 50218
+2489 2135 50110
+2490 2135 38058
+2491 2135 22870
+2493 2135 30785
+2494 2135 63212
+2495 2135 28639
+2496 2135 6138
+2497 2135 24115
+2498 2135 49065
+2499 2135 26402
+2500 2135 33748
+2501 2135 5708
+2502 2135 62408
+2503 2135 41903
+2504 2135 46328
+2505 2135 6784
+2506 2135 65038
+2507 2135 34283
+2508 2135 3856
+2509 2135 48816
+2510 2135 3231
+2511 2135 40266
+4646 2135 27852657
+2074 2136 1
+2077 2136 44832
+2078 2136 44831
+2091 2136 210
+2092 2136 18745
+2093 2136 63576
+2108 2136 6586
+2113 2136 62953
+2114 2136 54422
+2119 2136 27860
+2123 2136 36213
+2128 2136 2693
+2150 2136 64073
+2155 2136 40354
+2161 2136 45274
+2191 2136 38906
+2197 2136 6751
+2227 2136 18392
+2242 2136 18242
+2282 2136 18392
+2286 2136 6835
+2348 2136 8923
+2352 2136 18540
+2357 2136 4636
+2426 2136 59117
+2429 2136 19431
+2430 2136 53778
+2433 2136 39748
+2434 2136 28606
+2435 2136 45985
+2440 2136 1445
+2441 2136 26922
+2446 2136 9098
+2452 2136 22760
+2453 2136 16406
+2454 2136 52642
+2455 2136 19313
+2456 2136 19313
+2457 2136 10456
+2458 2136 19461
+2460 2136 26991
+2461 2136 37559
+2462 2136 32412
+2463 2136 32702
+2464 2136 38091
+2465 2136 18778
+2466 2136 22709
+2467 2136 57403
+2468 2136 64890
+2470 2136 51499
+2471 2136 53237
+2472 2136 4599
+2473 2136 62583
+2474 2136 30636
+2475 2136 11858
+2476 2136 41003
+2477 2136 45137
+2478 2136 58224
+2479 2136 55722
+2481 2136 48816
+2482 2136 59605
+2483 2136 28828
+2484 2136 4680
+2485 2136 15285
+2486 2136 3427
+2487 2136 58010
+2488 2136 61599
+2489 2136 54593
+2490 2136 8634
+2491 2136 6417
+2493 2136 20929
+2494 2136 26255
+2495 2136 27860
+2496 2136 54996
+2497 2136 14804
+2498 2136 11377
+2499 2136 34374
+2500 2136 28475
+2501 2136 26855
+2502 2136 21589
+2503 2136 35262
+2504 2136 1585
+2505 2136 60401
+2506 2136 35645
+2507 2136 23183
+2508 2136 10647
+2509 2136 16310
+2510 2136 51952
+2511 2136 61713
+4647 2136 27852657
+2075 2137 1
+2077 2137 62791
+2078 2137 62791
+2090 2137 1
+2091 2137 45435
+2092 2137 1594
+2093 2137 64385
+2108 2137 58791
+2113 2137 27043
+2114 2137 32637
+2123 2137 59154
+2128 2137 29501
+2150 2137 59154
+2155 2137 29501
+2161 2137 39230
+2191 2137 23134
+2197 2137 22912
+2242 2137 39867
+2286 2137 34663
+2352 2137 53508
+2357 2137 6276
+2429 2137 31303
+2430 2137 16642
+2433 2137 55930
+2434 2137 34214
+2435 2137 47826
+2440 2137 14072
+2441 2137 21609
+2446 2137 35326
+2452 2137 46295
+2453 2137 15239
+2454 2137 59807
+2455 2137 50472
+2456 2137 50472
+2457 2137 15153
+2458 2137 10447
+2460 2137 17117
+2461 2137 56492
+2462 2137 57884
+2463 2137 7934
+2464 2137 18448
+2465 2137 33497
+2466 2137 29157
+2467 2137 17366
+2468 2137 65432
+2470 2137 36461
+2471 2137 34792
+2472 2137 64732
+2473 2137 53543
+2474 2137 21919
+2475 2137 53943
+2476 2137 16169
+2477 2137 12813
+2478 2137 797
+2479 2137 58890
+2481 2137 7578
+2482 2137 53531
+2483 2137 16335
+2484 2137 54889
+2485 2137 19925
+2486 2137 31503
+2487 2137 57823
+2488 2137 54048
+2489 2137 13479
+2490 2137 48296
+2491 2137 18804
+2493 2137 55008
+2494 2137 46834
+2495 2137 37818
+2496 2137 55239
+2497 2137 19857
+2498 2137 53875
+2499 2137 4776
+2500 2137 51857
+2501 2137 56730
+2502 2137 6289
+2503 2137 14684
+2504 2137 50012
+2505 2137 33444
+2506 2137 27708
+2507 2137 11567
+2508 2137 25202
+2509 2137 5919
+2510 2137 63920
+2511 2137 24339
+4648 2137 27852657
+2076 2138 1
+2077 2138 65503
+2078 2138 65503
+2090 2138 65520
+2091 2138 6422
+2092 2138 63570
+2093 2138 63552
+2108 2138 52742
+2113 2138 34402
+2114 2138 45212
+2123 2138 40960
+2128 2138 48452
+2150 2138 40960
+2155 2138 48452
+2161 2138 46585
+2191 2138 23891
+2197 2138 17237
+2242 2138 56252
+2286 2138 11891
+2352 2138 42372
+2357 2138 40622
+2429 2138 43072
+2430 2138 39940
+2433 2138 15581
+2434 2138 44611
+2435 2138 21921
+2440 2138 22201
+2441 2138 34130
+2446 2138 53505
+2452 2138 9505
+2453 2138 59710
+2454 2138 38801
+2455 2138 48738
+2456 2138 48738
+2457 2138 26360
+2458 2138 36082
+2460 2138 13659
+2461 2138 39904
+2462 2138 35746
+2463 2138 10434
+2464 2138 13664
+2465 2138 30447
+2466 2138 27713
+2467 2138 58582
+2468 2138 24359
+2470 2138 60192
+2471 2138 65329
+2472 2138 48829
+2473 2138 24220
+2474 2138 35327
+2475 2138 4880
+2476 2138 20114
+2477 2138 26544
+2478 2138 25858
+2479 2138 56106
+2481 2138 48425
+2482 2138 13353
+2483 2138 56292
+2484 2138 43533
+2485 2138 31166
+2486 2138 26286
+2487 2138 54947
+2488 2138 12670
+2489 2138 55502
+2490 2138 60828
+2491 2138 16349
+2493 2138 42245
+2494 2138 1966
+2495 2138 50767
+2496 2138 39369
+2497 2138 3331
+2498 2138 42566
+2499 2138 33461
+2500 2138 10554
+2501 2138 9339
+2502 2138 24130
+2503 2138 61271
+2504 2138 26435
+2505 2138 53163
+2506 2138 37774
+2507 2138 58598
+2508 2138 13603
+2509 2138 53724
+2510 2138 50176
+2511 2138 21143
+4649 2138 27852657
+2079 2139 1
+2081 2139 65520
+2091 2139 19059
+2092 2139 39048
+2093 2139 39048
+2108 2139 48374
+2113 2139 25912
+2114 2139 16586
+2119 2139 15795
+2123 2139 49726
+2128 2139 57404
+2155 2139 41609
+2161 2139 17706
+2191 2139 41609
+2197 2139 9059
+2222 2139 2970
+2224 2139 62551
+2227 2139 51364
+2242 2139 10440
+2277 2139 14409
+2279 2139 51112
+2282 2139 62803
+2286 2139 2718
+2343 2139 58266
+2345 2139 7255
+2348 2139 41670
+2352 2139 23851
+2357 2139 62210
+2421 2139 12672
+2423 2139 52849
+2426 2139 1651
+2429 2139 45206
+2430 2139 43555
+2433 2139 29446
+2434 2139 7835
+2435 2139 45849
+2440 2139 27802
+2441 2139 52010
+2446 2139 8465
+2452 2139 7064
+2453 2139 17585
+2454 2139 60765
+2455 2139 47221
+2456 2139 47221
+2457 2139 51833
+2458 2139 45765
+2460 2139 51697
+2461 2139 15390
+2462 2139 27609
+2463 2139 50802
+2464 2139 33443
+2465 2139 51743
+2466 2139 56023
+2467 2139 42620
+2468 2139 49215
+2470 2139 48982
+2471 2139 35971
+2472 2139 41859
+2473 2139 63205
+2474 2139 45498
+2475 2139 59276
+2476 2139 26062
+2477 2139 27042
+2478 2139 54431
+2479 2139 56201
+2481 2139 24775
+2482 2139 63190
+2483 2139 62006
+2484 2139 50876
+2485 2139 61440
+2486 2139 2164
+2487 2139 29489
+2488 2139 33276
+2489 2139 27082
+2490 2139 43236
+2491 2139 630
+2493 2139 26114
+2494 2139 43666
+2495 2139 46724
+2496 2139 26319
+2497 2139 56990
+2498 2139 54826
+2499 2139 23004
+2500 2139 101
+2501 2139 15188
+2502 2139 23295
+2503 2139 12861
+2504 2139 36073
+2505 2139 13168
+2506 2139 16023
+2507 2139 39481
+2508 2139 32610
+2509 2139 57628
+2510 2139 61500
+2511 2139 28976
+4650 2139 27852657
+2080 2140 1
+2081 2140 1
+2083 2140 1
+2086 2140 1
+2090 2140 1
+2097 2140 65520
+2100 2140 65520
+2102 2140 60492
+2103 2140 60492
+2106 2140 15131
+2107 2140 15134
+2108 2140 20163
+2110 2140 65520
+2111 2140 15131
+2112 2140 15134
+2113 2140 40326
+2114 2140 20163
+2355 2140 38827
+2356 2140 32127
+2357 2140 32127
+2390 2140 44847
+2392 2140 34937
+2395 2140 7721
+2396 2140 7721
+2397 2140 7721
+2398 2140 29690
+2399 2140 29690
+2400 2140 9016
+2401 2140 217
+2404 2140 22852
+2405 2140 38146
+2406 2140 38146
+2407 2140 45867
+2408 2140 38146
+2409 2140 29690
+2410 2140 29690
+2411 2140 9016
+2412 2140 217
+2413 2140 217
+2415 2140 22852
+2416 2140 38146
+2417 2140 38146
+2418 2140 45867
+2419 2140 10771
+2420 2140 38146
+2422 2140 64221
+2423 2140 64221
+2424 2140 16759
+2425 2140 42964
+2426 2140 44264
+2427 2140 44939
+2428 2140 5072
+2429 2140 34910
+2430 2140 56167
+2431 2140 27031
+2432 2140 41058
+2433 2140 27408
+2434 2140 35508
+2435 2140 44862
+2436 2140 43402
+2437 2140 19737
+2438 2140 32888
+2439 2140 26009
+2440 2140 51286
+2441 2140 6424
+2444 2140 38842
+2445 2140 42041
+2446 2140 1927
+2447 2140 58384
+2451 2140 61228
+2452 2140 64427
+2453 2140 24313
+2454 2140 40656
+2455 2140 58004
+2456 2140 58004
+2457 2140 21613
+2458 2140 9354
+2460 2140 28735
+2461 2140 54142
+2462 2140 8163
+2463 2140 59331
+2464 2140 22103
+2465 2140 29620
+2466 2140 15256
+2467 2140 2997
+2468 2140 38286
+2470 2140 37848
+2471 2140 30711
+2472 2140 55916
+2473 2140 15132
+2474 2140 164
+2475 2140 36065
+2476 2140 885
+2477 2140 54147
+2478 2140 23915
+2479 2140 732
+2481 2140 28312
+2482 2140 61986
+2483 2140 30400
+2484 2140 8548
+2485 2140 3068
+2486 2140 32524
+2487 2140 49476
+2488 2140 7050
+2489 2140 31084
+2490 2140 13109
+2491 2140 35004
+2493 2140 60290
+2494 2140 38668
+2495 2140 50468
+2496 2140 11245
+2497 2140 39945
+2498 2140 7421
+2499 2140 22404
+2500 2140 52976
+2501 2140 34920
+2502 2140 47719
+2503 2140 51434
+2504 2140 5470
+2505 2140 42477
+2506 2140 29471
+2507 2140 4537
+2508 2140 7346
+2509 2140 47382
+2510 2140 27521
+2511 2140 6992
+4651 2140 27852657
+2081 2141 1
+2083 2141 53654
+2086 2141 14438
+2090 2141 14438
+2105 2141 64852
+2110 2141 50414
+2125 2141 64977
+2148 2141 59053
+2152 2141 41452
+2157 2141 8401
+2163 2141 16452
+2170 2141 16452
+2178 2141 3505
+2179 2141 25738
+2184 2141 33357
+2188 2141 51901
+2193 2141 10055
+2199 2141 25280
+2206 2141 16248
+2214 2141 65317
+2223 2141 26568
+2224 2141 22309
+2226 2141 8838
+2233 2141 674
+2238 2141 25071
+2244 2141 59514
+2251 2141 15010
+2259 2141 37960
+2268 2141 38164
+2278 2141 35901
+2279 2141 34153
+2281 2141 62229
+2284 2141 60533
+2293 2141 47385
+2299 2141 38492
+2306 2141 52609
+2314 2141 63135
+2323 2141 49623
+2333 2141 11459
+2344 2141 21027
+2345 2141 37123
+2347 2141 9275
+2350 2141 6186
+2354 2141 29179
+2365 2141 18750
+2372 2141 14527
+2380 2141 43850
+2389 2141 26416
+2399 2141 59818
+2410 2141 48359
+2422 2141 10380
+2423 2141 7736
+2425 2141 15446
+2428 2141 54712
+2432 2141 43794
+2437 2141 7095
+2443 2141 30560
+2450 2141 13450
+2458 2141 17069
+2467 2141 6900
+2477 2141 23179
+2488 2141 38175
+2500 2141 64846
+4652 2141 27852657
+2082 2142 1
+2083 2142 1
+2084 2142 1
+2085 2142 1
+2086 2142 1
+2087 2142 2
+2088 2142 1
+2089 2142 1
+2090 2142 1
+2091 2142 2
+2092 2142 2
+2093 2142 1
+2097 2142 1
+2098 2142 1
+2099 2142 1
+2100 2142 1
+2102 2142 1
+2105 2142 65520
+2106 2142 1
+2109 2142 65520
+2110 2142 65519
+2111 2142 65520
+2112 2142 65519
+2113 2142 65518
+2114 2142 65519
+2283 2142 13
+2284 2142 5709
+2285 2142 59840
+2286 2142 59840
+2349 2142 13
+2350 2142 5709
+2351 2142 59840
+2352 2142 59840
+2354 2142 5696
+2355 2142 32770
+2356 2142 59840
+2390 2142 11
+2400 2142 11
+2401 2142 32777
+2411 2142 11
+2412 2142 32777
+2413 2142 32777
+2422 2142 65512
+2423 2142 65512
+2424 2142 12286
+2425 2142 60710
+2426 2142 60719
+2427 2142 61434
+2428 2142 55551
+2429 2142 47908
+2430 2142 52710
+2431 2142 15008
+2432 2142 9125
+2433 2142 38158
+2434 2142 43149
+2435 2142 55960
+2436 2142 31397
+2437 2142 942
+2438 2142 29975
+2439 2142 14500
+2440 2142 1363
+2441 2142 10924
+2468 2142 8208
+2478 2142 8208
+2479 2142 51918
+2489 2142 20487
+2490 2142 2747
+2491 2142 24583
+2499 2142 30037
+2500 2142 19974
+2501 2142 58796
+2502 2142 47269
+2503 2142 10916
+2504 2142 12968
+2510 2142 2063
+2511 2142 53427
+4653 2142 27852657
+2083 2143 1
+2091 2143 63961
+2092 2143 4425
+2093 2143 4425
+2108 2143 32093
+2113 2143 40057
+2114 2143 12389
+2119 2143 15795
+2123 2143 49726
+2128 2143 35497
+2155 2143 19702
+2161 2143 4811
+2191 2143 19702
+2197 2143 2965
+2227 2143 48394
+2242 2143 5312
+2282 2143 48394
+2286 2143 17127
+2348 2143 48925
+2352 2143 16596
+2357 2143 16349
+2426 2143 54500
+2429 2143 10430
+2430 2143 21451
+2433 2143 9100
+2434 2143 18597
+2435 2143 44438
+2440 2143 13655
+2441 2143 23254
+2446 2143 28919
+2452 2143 58184
+2453 2143 59553
+2454 2143 51184
+2455 2143 7809
+2456 2143 7809
+2457 2143 53630
+2458 2143 61427
+2460 2143 43964
+2461 2143 39208
+2462 2143 35372
+2463 2143 10482
+2464 2143 60839
+2465 2143 53030
+2466 2143 14519
+2467 2143 63597
+2468 2143 30186
+2470 2143 24501
+2471 2143 12557
+2472 2143 61208
+2473 2143 13183
+2474 2143 15201
+2475 2143 27692
+2476 2143 37798
+2477 2143 43550
+2478 2143 8989
+2479 2143 30363
+2481 2143 30519
+2482 2143 7322
+2483 2143 8588
+2484 2143 64704
+2485 2143 50198
+2486 2143 22506
+2487 2143 41184
+2488 2143 61399
+2489 2143 38487
+2490 2143 39335
+2491 2143 38261
+2493 2143 43051
+2494 2143 62728
+2495 2143 29438
+2496 2143 56124
+2497 2143 63568
+2498 2143 41062
+2499 2143 62456
+2500 2143 13813
+2501 2143 12759
+2502 2143 35616
+2503 2143 4226
+2504 2143 48077
+2505 2143 37708
+2506 2143 39564
+2507 2143 4754
+2508 2143 25671
+2509 2143 28773
+2510 2143 43534
+2511 2143 2993
+4654 2143 27852657
+2084 2144 1
+2091 2144 42177
+2092 2144 44805
+2093 2144 44805
+2108 2144 1618
+2113 2144 52528
+2114 2144 30194
+2119 2144 49726
+2123 2144 63041
+2128 2144 17235
+2150 2144 47246
+2155 2144 33030
+2161 2144 38835
+2191 2144 14755
+2197 2144 29456
+2227 2144 17127
+2242 2144 26929
+2282 2144 17127
+2286 2144 55593
+2348 2144 16596
+2352 2144 56882
+2357 2144 34742
+2426 2144 11021
+2429 2144 1257
+2430 2144 41359
+2433 2144 44069
+2434 2144 50950
+2435 2144 46128
+2440 2144 54656
+2441 2144 51467
+2446 2144 42655
+2452 2144 2917
+2453 2144 36529
+2454 2144 62438
+2455 2144 60100
+2456 2144 60100
+2457 2144 29797
+2458 2144 48695
+2460 2144 49795
+2461 2144 39496
+2462 2144 54458
+2463 2144 6883
+2464 2144 18255
+2465 2144 23676
+2466 2144 6379
+2467 2144 6413
+2468 2144 52705
+2470 2144 46462
+2471 2144 45318
+2472 2144 61432
+2473 2144 41113
+2474 2144 32576
+2475 2144 8900
+2476 2144 8618
+2477 2144 43764
+2478 2144 23342
+2479 2144 39022
+2481 2144 58905
+2482 2144 22821
+2483 2144 55653
+2484 2144 906
+2485 2144 527
+2486 2144 57148
+2487 2144 57666
+2488 2144 24401
+2489 2144 37843
+2490 2144 61356
+2491 2144 9835
+2493 2144 39878
+2494 2144 21372
+2495 2144 57368
+2496 2144 11755
+2497 2144 25135
+2498 2144 33508
+2499 2144 25080
+2500 2144 31669
+2501 2144 7630
+2502 2144 26145
+2503 2144 59299
+2504 2144 1921
+2505 2144 10144
+2506 2144 18100
+2507 2144 2112
+2508 2144 5134
+2509 2144 45544
+2510 2144 26292
+2511 2144 24530
+4655 2144 27852657
+2085 2145 1
+2086 2145 1
+2087 2145 1
+2088 2145 1
+2089 2145 1
+2090 2145 1
+2091 2145 1
+2092 2145 2
+2093 2145 1
+2100 2145 1
+2102 2145 5029
+2103 2145 5029
+2106 2145 50389
+2107 2145 50387
+2108 2145 45358
+2109 2145 65520
+2110 2145 65520
+2111 2145 50388
+2112 2145 50385
+2113 2145 25192
+2114 2145 45356
+2355 2145 36438
+2356 2145 50411
+2357 2145 50411
+2390 2145 8371
+2392 2145 22757
+2395 2145 25338
+2396 2145 25338
+2397 2145 25338
+2398 2145 28043
+2399 2145 28043
+2400 2145 36414
+2401 2145 42062
+2404 2145 17025
+2405 2145 26567
+2406 2145 26567
+2407 2145 51905
+2408 2145 26567
+2409 2145 28043
+2410 2145 28043
+2411 2145 36414
+2412 2145 42062
+2413 2145 42062
+2415 2145 17025
+2416 2145 26567
+2417 2145 26567
+2418 2145 51905
+2419 2145 53134
+2420 2145 26567
+2422 2145 64251
+2423 2145 64251
+2424 2145 30966
+2425 2145 7766
+2426 2145 9036
+2427 2145 56083
+2428 2145 25673
+2429 2145 19542
+2430 2145 10506
+2431 2145 59661
+2432 2145 44047
+2433 2145 56277
+2434 2145 11283
+2435 2145 777
+2436 2145 10529
+2437 2145 27486
+2438 2145 3401
+2439 2145 37626
+2440 2145 6837
+2441 2145 6060
+2444 2145 34070
+2445 2145 31559
+2446 2145 58335
+2447 2145 55516
+2451 2145 57933
+2452 2145 55422
+2453 2145 16677
+2454 2145 40634
+2455 2145 11881
+2456 2145 11881
+2457 2145 13553
+2458 2145 20612
+2460 2145 46837
+2461 2145 8092
+2462 2145 29538
+2463 2145 18561
+2464 2145 61198
+2465 2145 49317
+2466 2145 37939
+2467 2145 44998
+2468 2145 39224
+2470 2145 21660
+2471 2145 11655
+2472 2145 54893
+2473 2145 51288
+2474 2145 11935
+2475 2145 28139
+2476 2145 2480
+2477 2145 9539
+2478 2145 3765
+2479 2145 18600
+2481 2145 61199
+2482 2145 26001
+2483 2145 18187
+2484 2145 43573
+2485 2145 52278
+2486 2145 24139
+2487 2145 43111
+2488 2145 32663
+2489 2145 39883
+2490 2145 50256
+2491 2145 43321
+2493 2145 41608
+2494 2145 15814
+2495 2145 5200
+2496 2145 64457
+2497 2145 56410
+2498 2145 32271
+2499 2145 4368
+2500 2145 28721
+2501 2145 45471
+2502 2145 53726
+2503 2145 25012
+2504 2145 1568
+2505 2145 5758
+2506 2145 14103
+2507 2145 4570
+2508 2145 17624
+2509 2145 59482
+2510 2145 54392
+2511 2145 43360
+4656 2145 27852657
+2086 2146 1
+2090 2146 1
+2091 2146 61484
+2092 2146 59536
+2093 2146 59536
+2108 2146 57425
+2113 2146 36134
+2114 2146 38245
+2128 2146 14717
+2155 2146 14717
+2161 2146 60122
+2191 2146 14717
+2197 2146 13831
+2242 2146 4385
+2357 2146 59199
+2429 2146 65413
+2430 2146 65413
+2433 2146 2830
+2434 2146 1676
+2435 2146 40607
+2440 2146 9146
+2441 2146 61541
+2446 2146 38012
+2452 2146 27872
+2453 2146 20182
+2454 2146 3578
+2455 2146 18541
+2456 2146 18541
+2457 2146 41729
+2458 2146 17854
+2460 2146 59645
+2461 2146 62362
+2462 2146 56473
+2463 2146 10716
+2464 2146 8059
+2465 2146 55039
+2466 2146 50106
+2467 2146 8846
+2468 2146 21578
+2470 2146 7659
+2471 2146 31244
+2472 2146 1034
+2473 2146 51360
+2474 2146 63427
+2475 2146 8388
+2476 2146 56077
+2477 2146 60401
+2478 2146 3776
+2479 2146 18597
+2481 2146 53736
+2482 2146 46015
+2483 2146 18817
+2484 2146 64609
+2485 2146 29982
+2486 2146 21594
+2487 2146 32992
+2488 2146 11525
+2489 2146 21318
+2490 2146 48188
+2491 2146 19591
+2493 2146 24052
+2494 2146 32451
+2495 2146 13574
+2496 2146 62716
+2497 2146 11343
+2498 2146 55270
+2499 2146 46888
+2500 2146 38177
+2501 2146 43712
+2502 2146 22066
+2503 2146 60769
+2504 2146 22442
+2505 2146 36705
+2506 2146 37944
+2507 2146 18916
+2508 2146 52905
+2509 2146 8804
+2510 2146 15839
+2511 2146 39877
+4657 2146 27852657
+2087 2147 1
+2091 2147 65513
+2092 2147 62893
+2093 2147 62893
+2108 2147 50271
+2113 2147 9143
+2114 2147 21765
+2123 2147 18275
+2128 2147 62626
+2150 2147 18275
+2155 2147 62626
+2161 2147 53833
+2191 2147 15380
+2197 2147 16295
+2242 2147 15301
+2286 2147 58322
+2352 2147 57564
+2357 2147 18627
+2429 2147 53930
+2430 2147 2807
+2433 2147 3543
+2434 2147 18186
+2435 2147 37542
+2440 2147 42322
+2441 2147 55275
+2446 2147 37835
+2452 2147 41015
+2453 2147 32385
+2454 2147 18472
+2455 2147 65026
+2456 2147 65026
+2457 2147 19852
+2458 2147 63571
+2460 2147 3600
+2461 2147 15718
+2462 2147 22132
+2463 2147 50307
+2464 2147 52559
+2465 2147 53054
+2466 2147 3957
+2467 2147 37708
+2468 2147 17122
+2470 2147 55280
+2471 2147 43004
+2472 2147 36303
+2473 2147 47494
+2474 2147 36516
+2475 2147 48983
+2476 2147 49142
+2477 2147 53598
+2478 2147 29957
+2479 2147 14197
+2481 2147 44478
+2482 2147 41890
+2483 2147 17169
+2484 2147 37100
+2485 2147 48549
+2486 2147 65087
+2487 2147 62308
+2488 2147 15332
+2489 2147 47378
+2490 2147 19325
+2491 2147 7507
+2493 2147 51866
+2494 2147 11222
+2495 2147 7023
+2496 2147 7675
+2497 2147 18033
+2498 2147 18467
+2499 2147 3107
+2500 2147 51492
+2501 2147 3931
+2502 2147 52243
+2503 2147 31488
+2504 2147 13698
+2505 2147 43871
+2506 2147 57279
+2507 2147 34186
+2508 2147 8215
+2509 2147 59343
+2510 2147 59043
+2511 2147 58291
+4658 2147 27852657
+2088 2148 1
+2091 2148 53615
+2092 2148 2621
+2093 2148 2620
+2108 2148 29262
+2113 2148 64799
+2114 2148 38157
+2123 2148 47246
+2128 2148 11052
+2150 2148 47246
+2155 2148 11052
+2161 2148 24012
+2191 2148 58298
+2197 2148 4707
+2242 2148 64990
+2286 2148 7199
+2352 2148 7957
+2357 2148 42936
+2429 2148 11585
+2430 2148 62708
+2433 2148 55931
+2434 2148 18904
+2435 2148 46756
+2440 2148 15834
+2441 2148 21017
+2446 2148 36064
+2452 2148 50374
+2453 2148 1006
+2454 2148 62047
+2455 2148 33119
+2456 2148 33119
+2457 2148 2453
+2458 2148 13021
+2460 2148 40386
+2461 2148 18211
+2462 2148 11115
+2463 2148 33169
+2464 2148 46278
+2465 2148 13159
+2466 2148 50714
+2467 2148 43466
+2468 2148 36031
+2470 2148 55926
+2471 2148 40373
+2472 2148 43633
+2473 2148 49931
+2474 2148 6741
+2475 2148 59103
+2476 2148 36233
+2477 2148 40306
+2478 2148 58568
+2479 2148 14371
+2481 2148 53509
+2482 2148 33304
+2483 2148 61326
+2484 2148 3888
+2485 2148 22340
+2486 2148 28758
+2487 2148 12990
+2488 2148 43454
+2489 2148 31662
+2490 2148 7523
+2491 2148 532
+2493 2148 222
+2494 2148 15796
+2495 2148 37087
+2496 2148 3442
+2497 2148 58183
+2498 2148 29425
+2499 2148 34369
+2500 2148 44232
+2501 2148 48322
+2502 2148 20993
+2503 2148 23139
+2504 2148 17539
+2505 2148 17228
+2506 2148 9774
+2507 2148 62582
+2508 2148 15954
+2509 2148 25566
+2510 2148 7399
+2511 2148 28299
+4659 2148 27852657
+2089 2149 1
+2090 2149 1
+2091 2149 1
+2092 2149 1
+2093 2149 1
+2108 2149 730
+2113 2149 40184
+2114 2149 39455
+2128 2149 40376
+2155 2149 40376
+2161 2149 30895
+2191 2149 40376
+2197 2149 9343
+2242 2149 41048
+2357 2149 16888
+2433 2149 40979
+2434 2149 42252
+2435 2149 56953
+2440 2149 6332
+2441 2149 33763
+2446 2149 42175
+2452 2149 5924
+2453 2149 34319
+2454 2149 3749
+2455 2149 42563
+2456 2149 42563
+2457 2149 38356
+2458 2149 54608
+2460 2149 10210
+2461 2149 8798
+2462 2149 22439
+2463 2149 37051
+2464 2149 58657
+2465 2149 16094
+2466 2149 41077
+2467 2149 14902
+2468 2149 33166
+2470 2149 19543
+2471 2149 18865
+2472 2149 56659
+2473 2149 18041
+2474 2149 1663
+2475 2149 51090
+2476 2149 31493
+2477 2149 22852
+2478 2149 57900
+2479 2149 28496
+2481 2149 23244
+2482 2149 57602
+2483 2149 39648
+2484 2149 31951
+2485 2149 34382
+2486 2149 48813
+2487 2149 18770
+2488 2149 7290
+2489 2149 34127
+2490 2149 22450
+2491 2149 22628
+2493 2149 36688
+2494 2149 65125
+2495 2149 27793
+2496 2149 56356
+2497 2149 39344
+2498 2149 56052
+2499 2149 56763
+2500 2149 8121
+2501 2149 54142
+2502 2149 34265
+2503 2149 46430
+2504 2149 64352
+2505 2149 18125
+2506 2149 52879
+2507 2149 52526
+2508 2149 44965
+2509 2149 59572
+2510 2149 24980
+2511 2149 44955
+4660 2149 27852657
+2090 2150 1
+2091 2150 53654
+2092 2150 14438
+2093 2150 14438
+2108 2150 64852
+2113 2150 50414
+2128 2150 64977
+2154 2150 59053
+2155 2150 41452
+2160 2150 8401
+2166 2150 16452
+2173 2150 16452
+2187 2150 3505
+2188 2150 25738
+2190 2150 33357
+2191 2150 51901
+2196 2150 10055
+2202 2150 25280
+2209 2150 16248
+2217 2150 65317
+2232 2150 26568
+2233 2150 22309
+2234 2150 8838
+2236 2150 674
+2241 2150 25071
+2247 2150 59514
+2254 2150 15010
+2262 2150 37960
+2271 2150 38164
+2287 2150 35901
+2288 2150 34153
+2289 2150 62229
+2290 2150 60533
+2296 2150 47385
+2302 2150 38492
+2309 2150 52609
+2317 2150 63135
+2326 2150 49623
+2336 2150 11459
+2353 2150 21027
+2354 2150 37123
+2355 2150 9275
+2356 2150 6186
+2357 2150 29179
+2368 2150 18750
+2375 2150 14527
+2383 2150 43850
+2392 2150 26416
+2402 2150 59818
+2413 2150 48359
+2431 2150 10380
+2432 2150 7736
+2433 2150 15446
+2434 2150 54712
+2435 2150 43794
+2440 2150 7095
+2446 2150 30560
+2453 2150 13450
+2461 2150 17069
+2470 2150 6900
+2480 2150 23179
+2491 2150 38175
+2503 2150 64846
+4661 2150 27852657
+2094 2151 1
+2096 2151 65520
+2113 2151 58225
+2114 2151 58225
+2119 2151 28525
+2123 2151 36996
+2128 2151 28525
+2161 2151 17186
+2197 2151 59845
+2222 2151 57063
+2224 2151 8458
+2227 2151 37843
+2242 2151 41473
+2277 2151 57063
+2279 2151 8458
+2282 2151 37843
+2286 2151 27678
+2343 2151 51665
+2345 2151 13856
+2348 2151 7294
+2352 2151 58227
+2357 2151 7294
+2421 2151 48283
+2423 2151 17238
+2426 2151 44693
+2429 2151 9061
+2430 2151 29889
+2433 2151 21901
+2434 2151 60955
+2435 2151 31066
+2440 2151 16992
+2441 2151 32445
+2446 2151 46634
+2452 2151 18831
+2453 2151 51733
+2454 2151 59156
+2455 2151 48279
+2456 2151 48279
+2457 2151 59781
+2458 2151 60998
+2460 2151 6536
+2461 2151 21150
+2462 2151 12239
+2463 2151 50542
+2464 2151 37736
+2465 2151 54978
+2466 2151 52456
+2467 2151 32700
+2468 2151 42590
+2470 2151 56014
+2471 2151 3763
+2472 2151 57015
+2473 2151 18367
+2474 2151 6987
+2475 2151 17530
+2476 2151 57302
+2477 2151 29224
+2478 2151 25406
+2479 2151 17695
+2481 2151 17173
+2482 2151 6554
+2483 2151 41907
+2484 2151 1299
+2485 2151 16922
+2486 2151 64913
+2487 2151 23699
+2488 2151 3251
+2489 2151 40497
+2490 2151 11933
+2491 2151 26195
+2493 2151 61446
+2494 2151 45270
+2495 2151 38667
+2496 2151 9182
+2497 2151 29224
+2498 2151 29832
+2499 2151 17535
+2500 2151 50739
+2501 2151 52686
+2502 2151 12301
+2503 2151 33540
+2504 2151 36730
+2505 2151 44566
+2506 2151 16683
+2507 2151 58705
+2508 2151 20708
+2509 2151 5521
+2510 2151 49930
+2511 2151 17
+4662 2151 27852657
+2095 2152 1
+2096 2152 1
+2097 2152 1
+2098 2152 2
+2099 2152 1
+2100 2152 1
+2103 2152 65520
+2105 2152 65520
+2106 2152 65520
+2107 2152 65518
+2108 2152 65519
+2110 2152 65520
+2111 2152 65520
+2112 2152 65518
+2113 2152 65517
+2114 2152 65519
+2283 2152 32754
+2284 2152 2843
+2285 2152 29911
+2286 2152 29911
+2349 2152 32754
+2350 2152 2843
+2351 2152 29911
+2352 2152 29911
+2354 2152 35610
+2355 2152 11
+2356 2152 29911
+2390 2152 65511
+2400 2152 65511
+2401 2152 65506
+2411 2152 65511
+2412 2152 65506
+2413 2152 65506
+2422 2152 24572
+2423 2152 24572
+2424 2152 24572
+2425 2152 7835
+2426 2152 48784
+2427 2152 65519
+2428 2152 11390
+2429 2152 42371
+2430 2152 59108
+2431 2152 60054
+2432 2152 5925
+2433 2152 59340
+2434 2152 4497
+2435 2152 10910
+2436 2152 43683
+2437 2152 38686
+2438 2152 26580
+2439 2152 4503
+2440 2152 13637
+2441 2152 2727
+2468 2152 16364
+2478 2152 16364
+2479 2152 27256
+2489 2152 40940
+2490 2152 60044
+2491 2152 49126
+2499 2152 46408
+2500 2152 13736
+2501 2152 59767
+2502 2152 51598
+2503 2152 39585
+2504 2152 51872
+2510 2152 4081
+2511 2152 42637
+4663 2152 27852657
+2096 2153 1
+2105 2153 43681
+2110 2153 43681
+2125 2153 32684
+2152 2153 17667
+2157 2153 20192
+2163 2153 47593
+2170 2153 47593
+2178 2153 63369
+2179 2153 32744
+2184 2153 56805
+2188 2153 26574
+2193 2153 40407
+2199 2153 42575
+2206 2153 53785
+2214 2153 6192
+2223 2153 37183
+2224 2153 42081
+2226 2153 2199
+2233 2153 49102
+2238 2153 64691
+2244 2153 14158
+2251 2153 39078
+2259 2153 61196
+2268 2153 55004
+2278 2153 13123
+2279 2153 25382
+2281 2153 46901
+2284 2153 46901
+2293 2153 34541
+2299 2153 6347
+2306 2153 41612
+2314 2153 10230
+2323 2153 5683
+2333 2153 16200
+2344 2153 18970
+2345 2153 53779
+2347 2153 59094
+2350 2153 59094
+2354 2153 29515
+2365 2153 43811
+2372 2153 58442
+2380 2153 37643
+2389 2153 17629
+2399 2153 29843
+2410 2153 13643
+2422 2153 10491
+2423 2153 62025
+2425 2153 42653
+2428 2153 42653
+2432 2153 47190
+2437 2153 56714
+2443 2153 54873
+2450 2153 8202
+2458 2153 56790
+2467 2153 63400
+2477 2153 22681
+2488 2153 38041
+2500 2153 39937
+4664 2153 27852657
+2097 2154 1
+2429 2154 6897
+2430 2154 6897
+2433 2154 35038
+2434 2154 42347
+2435 2154 35450
+2440 2154 5775
+2441 2154 35846
+2446 2154 19291
+2452 2154 57389
+2453 2154 46502
+2454 2154 39641
+2455 2154 59745
+2456 2154 59745
+2457 2154 26580
+2458 2154 25477
+2460 2154 47085
+2461 2154 34689
+2462 2154 49380
+2463 2154 26820
+2464 2154 18732
+2465 2154 24508
+2466 2154 57494
+2467 2154 63136
+2468 2154 781
+2470 2154 46483
+2471 2154 41882
+2472 2154 34961
+2473 2154 55333
+2474 2154 33749
+2475 2154 9241
+2476 2154 29501
+2477 2154 16725
+2478 2154 62945
+2479 2154 23177
+2481 2154 47793
+2482 2154 13839
+2483 2154 45482
+2484 2154 866
+2485 2154 15400
+2486 2154 6159
+2487 2154 64492
+2488 2154 21958
+2489 2154 42778
+2490 2154 61959
+2491 2154 11466
+2493 2154 14278
+2494 2154 50397
+2495 2154 31574
+2496 2154 3360
+2497 2154 14435
+2498 2154 8276
+2499 2154 3924
+2500 2154 16803
+2501 2154 22468
+2502 2154 23968
+2503 2154 60144
+2504 2154 24734
+2505 2154 59739
+2506 2154 13495
+2507 2154 4760
+2508 2154 1716
+2509 2154 52164
+2510 2154 26127
+2511 2154 13877
+4665 2154 27852657
+2098 2155 1
+2099 2155 1
+2102 2155 60493
+2103 2155 60492
+2106 2155 15133
+2107 2155 15135
+2108 2155 20164
+2111 2155 15133
+2112 2155 15135
+2113 2155 40328
+2114 2155 20164
+2355 2155 60500
+2356 2155 64247
+2357 2155 64247
+2390 2155 23068
+2392 2155 47760
+2395 2155 13548
+2396 2155 13548
+2397 2155 13548
+2398 2155 25824
+2399 2155 25824
+2400 2155 48892
+2401 2155 15524
+2404 2155 29304
+2405 2155 862
+2406 2155 862
+2407 2155 14410
+2408 2155 862
+2409 2155 25824
+2410 2155 25824
+2411 2155 48892
+2412 2155 15524
+2413 2155 15524
+2415 2155 29304
+2416 2155 862
+2417 2155 862
+2418 2155 14410
+2419 2155 1724
+2420 2155 862
+2422 2155 55883
+2423 2155 55883
+2424 2155 31383
+2425 2155 28636
+2426 2155 38274
+2427 2155 9162
+2428 2155 15133
+2429 2155 11453
+2430 2155 38700
+2431 2155 9162
+2432 2155 15133
+2433 2155 56194
+2434 2155 56709
+2435 2155 18009
+2436 2155 9162
+2437 2155 5075
+2438 2155 3447
+2439 2155 51524
+2440 2155 5561
+2441 2155 53073
+2444 2155 51311
+2445 2155 27223
+2446 2155 59941
+2447 2155 30289
+2451 2155 29704
+2452 2155 5616
+2453 2155 38334
+2454 2155 41400
+2455 2155 45296
+2456 2155 45296
+2457 2155 38060
+2458 2155 55343
+2460 2155 41986
+2461 2155 9183
+2462 2155 53682
+2463 2155 32375
+2464 2155 34227
+2465 2155 54452
+2466 2155 58236
+2467 2155 9998
+2468 2155 18831
+2470 2155 25390
+2471 2155 55679
+2472 2155 24991
+2473 2155 13475
+2474 2155 19042
+2475 2155 30111
+2476 2155 12466
+2477 2155 29749
+2478 2155 38582
+2479 2155 5333
+2481 2155 24034
+2482 2155 4252
+2483 2155 44339
+2484 2155 27270
+2485 2155 12639
+2486 2155 48049
+2487 2155 14236
+2488 2155 1581
+2489 2155 39114
+2490 2155 43371
+2491 2155 14193
+2493 2155 7089
+2494 2155 55079
+2495 2155 2889
+2496 2155 34387
+2497 2155 25166
+2498 2155 42638
+2499 2155 57926
+2500 2155 36053
+2501 2155 55133
+2502 2155 22734
+2503 2155 832
+2504 2155 36904
+2505 2155 15522
+2506 2155 1195
+2507 2155 3421
+2508 2155 17150
+2509 2155 31308
+2510 2155 12351
+2511 2155 24490
+4666 2155 27852657
+2099 2156 1
+2113 2156 56901
+2114 2156 56901
+2119 2156 36996
+2123 2156 30940
+2128 2156 34581
+2150 2156 2415
+2155 2156 63106
+2161 2156 59634
+2197 2156 6472
+2227 2156 19220
+2242 2156 43857
+2282 2156 19220
+2286 2156 23139
+2348 2156 44371
+2352 2156 38612
+2357 2156 26909
+2426 2156 3590
+2429 2156 41788
+2430 2156 5143
+2433 2156 11668
+2434 2156 43137
+2435 2156 37994
+2440 2156 20743
+2441 2156 12929
+2446 2156 3411
+2452 2156 26942
+2453 2156 15818
+2454 2156 32168
+2455 2156 59145
+2456 2156 59145
+2457 2156 51431
+2458 2156 62109
+2460 2156 58663
+2461 2156 10505
+2462 2156 49647
+2463 2156 23046
+2464 2156 31345
+2465 2156 37721
+2466 2156 61325
+2467 2156 5642
+2468 2156 3586
+2470 2156 28110
+2471 2156 53823
+2472 2156 43044
+2473 2156 36334
+2474 2156 29069
+2475 2156 56869
+2476 2156 52641
+2477 2156 12526
+2478 2156 8029
+2479 2156 34996
+2481 2156 49458
+2482 2156 6424
+2483 2156 30773
+2484 2156 12683
+2485 2156 31844
+2486 2156 40496
+2487 2156 56126
+2488 2156 31554
+2489 2156 35220
+2490 2156 21586
+2491 2156 12182
+2493 2156 39101
+2494 2156 59952
+2495 2156 18419
+2496 2156 29689
+2497 2156 3269
+2498 2156 28294
+2499 2156 4338
+2500 2156 64734
+2501 2156 19280
+2502 2156 52545
+2503 2156 19126
+2504 2156 44456
+2505 2156 53591
+2506 2156 14289
+2507 2156 49993
+2508 2156 25865
+2509 2156 39988
+2510 2156 31587
+2511 2156 17129
+4667 2156 27852657
+2100 2157 1
+2429 2157 4095
+2430 2157 4095
+2433 2157 63038
+2434 2157 22601
+2435 2157 18506
+2440 2157 21334
+2441 2157 2828
+2446 2157 22267
+2452 2157 1639
+2453 2157 61282
+2454 2157 26553
+2455 2157 58022
+2456 2157 58022
+2457 2157 38659
+2458 2157 19657
+2460 2157 33081
+2461 2157 2125
+2462 2157 56986
+2463 2157 40007
+2464 2157 13062
+2465 2157 20561
+2466 2157 56666
+2467 2157 7534
+2468 2157 11661
+2470 2157 39288
+2471 2157 14799
+2472 2157 18212
+2473 2157 49123
+2474 2157 17391
+2475 2157 62351
+2476 2157 19891
+2477 2157 38644
+2478 2157 17725
+2479 2157 21476
+2481 2157 34450
+2482 2157 15733
+2483 2157 24946
+2484 2157 51391
+2485 2157 60552
+2486 2157 63722
+2487 2157 15341
+2488 2157 22822
+2489 2157 5945
+2490 2157 32182
+2491 2157 13454
+2493 2157 42615
+2494 2157 45388
+2495 2157 31912
+2496 2157 53905
+2497 2157 40695
+2498 2157 42494
+2499 2157 3038
+2500 2157 12277
+2501 2157 18601
+2502 2157 11473
+2503 2157 47603
+2504 2157 58754
+2505 2157 42133
+2506 2157 54675
+2507 2157 8799
+2508 2157 35179
+2509 2157 4352
+2510 2157 22005
+2511 2157 32897
+4668 2157 27852657
+2101 2158 1
+2102 2158 1
+2103 2158 1
+2105 2158 1
+2106 2158 1
+2107 2158 2
+2108 2158 1
+2110 2158 1
+2111 2158 1
+2112 2158 2
+2113 2158 2
+2114 2158 1
+2283 2158 49144
+2284 2158 49143
+2285 2158 32760
+2286 2158 32760
+2349 2158 49144
+2350 2158 49143
+2351 2158 32760
+2352 2158 32760
+2354 2158 65520
+2355 2158 65515
+2356 2158 32760
+2390 2158 4
+2400 2158 4
+2401 2158 6
+2411 2158 4
+2412 2158 6
+2413 2158 6
+2422 2158 65518
+2423 2158 65518
+2424 2158 53235
+2425 2158 53235
+2426 2158 53238
+2427 2158 1
+2428 2158 28667
+2429 2158 28669
+2430 2158 40952
+2431 2158 35491
+2432 2158 64157
+2433 2158 23208
+2434 2158 10925
+2435 2158 35494
+2436 2158 35491
+2437 2158 23208
+2438 2158 47780
+2439 2158 6831
+2440 2158 1370
+2441 2158 31397
+2468 2158 32767
+2478 2158 32767
+2479 2158 27318
+2489 2158 49145
+2490 2158 27307
+2491 2158 32766
+2499 2158 42317
+2500 2158 3413
+2501 2158 11601
+2502 2158 43683
+2503 2158 27300
+2504 2158 682
+2510 2158 24576
+2511 2158 10928
+4669 2158 27852657
+2102 2159 1
+2113 2159 61853
+2114 2159 61853
+2123 2159 63106
+2128 2159 2415
+2150 2159 63106
+2155 2159 2415
+2161 2159 23773
+2197 2159 63749
+2242 2159 44513
+2286 2159 23162
+2352 2159 48059
+2357 2159 17462
+2429 2159 56472
+2430 2159 24006
+2433 2159 61146
+2434 2159 46666
+2435 2159 22660
+2440 2159 54022
+2441 2159 19669
+2446 2159 62691
+2452 2159 63408
+2453 2159 43038
+2454 2159 43246
+2455 2159 26772
+2456 2159 26772
+2457 2159 16861
+2458 2159 31356
+2460 2159 33954
+2461 2159 55079
+2462 2159 38156
+2463 2159 37603
+2464 2159 38427
+2465 2159 11655
+2466 2159 28919
+2467 2159 28848
+2468 2159 11057
+2470 2159 44005
+2471 2159 48618
+2472 2159 8421
+2473 2159 18382
+2474 2159 23118
+2475 2159 11463
+2476 2159 48122
+2477 2159 20979
+2478 2159 41768
+2479 2159 14097
+2481 2159 23549
+2482 2159 43750
+2483 2159 37231
+2484 2159 32694
+2485 2159 65368
+2486 2159 53905
+2487 2159 30578
+2488 2159 9470
+2489 2159 4827
+2490 2159 13027
+2491 2159 19385
+2493 2159 47030
+2494 2159 35096
+2495 2159 20713
+2496 2159 32710
+2497 2159 40429
+2498 2159 52045
+2499 2159 25288
+2500 2159 63560
+2501 2159 27442
+2502 2159 23899
+2503 2159 22919
+2504 2159 3858
+2505 2159 58017
+2506 2159 18671
+2507 2159 20882
+2508 2159 41016
+2509 2159 53343
+2510 2159 37819
+2511 2159 51183
+4670 2159 27852657
+2103 2160 1
+2108 2160 65520
+2113 2160 44995
+2114 2160 44996
+2123 2160 2415
+2128 2160 63106
+2150 2160 2415
+2155 2160 63106
+2161 2160 58093
+2197 2160 58379
+2242 2160 256
+2286 2160 42359
+2352 2160 17462
+2357 2160 48059
+2429 2160 41811
+2430 2160 8756
+2433 2160 65436
+2434 2160 18864
+2435 2160 10108
+2440 2160 50866
+2441 2160 55669
+2446 2160 51110
+2452 2160 25845
+2453 2160 1872
+2454 2160 58322
+2455 2160 44313
+2456 2160 44313
+2457 2160 47757
+2458 2160 23014
+2460 2160 54087
+2461 2160 46852
+2462 2160 64236
+2463 2160 5598
+2464 2160 47134
+2465 2160 2821
+2466 2160 17912
+2467 2160 39197
+2468 2160 1821
+2470 2160 25592
+2471 2160 65209
+2472 2160 58705
+2473 2160 43468
+2474 2160 39823
+2475 2160 37002
+2476 2160 6717
+2477 2160 44195
+2478 2160 34215
+2479 2160 60005
+2481 2160 61787
+2482 2160 5678
+2483 2160 33547
+2484 2160 15746
+2485 2160 28442
+2486 2160 56961
+2487 2160 47533
+2488 2160 44853
+2489 2160 52569
+2490 2160 43560
+2491 2160 11424
+2493 2160 35477
+2494 2160 31481
+2495 2160 1389
+2496 2160 64437
+2497 2160 20221
+2498 2160 28781
+2499 2160 55685
+2500 2160 35426
+2501 2160 22371
+2502 2160 64867
+2503 2160 46086
+2504 2160 52252
+2505 2160 39529
+2506 2160 24736
+2507 2160 63887
+2508 2160 39641
+2509 2160 3993
+2510 2160 63984
+2511 2160 14285
+4671 2160 27852657
+2104 2161 1
+2105 2161 1
+2106 2161 1
+2107 2161 1
+2108 2161 1
+2109 2161 1
+2110 2161 1
+2111 2161 1
+2112 2161 1
+2113 2161 2
+2114 2161 1
+2283 2161 32754
+2284 2161 62667
+2285 2161 2844
+2286 2161 2844
+2349 2161 32754
+2350 2161 62667
+2351 2161 2844
+2352 2161 2844
+2354 2161 29913
+2355 2161 1
+2356 2161 2844
+2390 2161 65515
+2400 2161 65515
+2401 2161 65512
+2411 2161 65515
+2412 2161 65512
+2413 2161 65512
+2422 2161 6
+2423 2161 6
+2424 2161 24572
+2425 2161 360
+2426 2161 354
+2427 2161 65519
+2428 2161 21367
+2429 2161 55903
+2430 2161 55549
+2431 2161 60066
+2432 2161 15914
+2433 2161 44397
+2434 2161 33711
+2435 2161 43683
+2436 2161 19111
+2437 2161 40480
+2438 2161 3442
+2439 2161 17322
+2440 2161 13651
+2441 2161 35489
+2468 2161 49131
+2478 2161 49131
+2479 2161 60035
+2489 2161 24564
+2490 2161 27291
+2491 2161 16373
+2499 2161 46408
+2500 2161 38131
+2501 2161 57626
+2502 2161 21415
+2503 2161 47778
+2504 2161 60061
+2510 2161 28657
+2511 2161 44693
+4672 2161 27852657
+2105 2162 1
+2106 2162 1
+2107 2162 1
+2108 2162 1
+2110 2162 1
+2111 2162 1
+2112 2162 1
+2113 2162 2
+2114 2162 1
+2355 2162 63715
+2356 2162 15989
+2357 2162 15989
+2390 2162 62404
+2392 2162 17281
+2395 2162 28460
+2396 2162 28460
+2397 2162 28460
+2398 2162 49315
+2399 2162 49315
+2400 2162 46198
+2401 2162 35115
+2404 2162 39215
+2405 2162 41932
+2406 2162 41932
+2407 2162 4871
+2408 2162 41932
+2409 2162 49315
+2410 2162 49315
+2411 2162 46198
+2412 2162 35115
+2413 2162 35115
+2415 2162 39215
+2416 2162 41932
+2417 2162 41932
+2418 2162 4871
+2419 2162 18343
+2420 2162 41932
+2422 2162 19375
+2423 2162 19375
+2424 2162 56050
+2425 2162 42175
+2426 2162 22800
+2427 2162 11290
+2428 2162 62096
+2429 2162 35323
+2430 2162 12523
+2431 2162 11290
+2432 2162 11371
+2433 2162 34292
+2434 2162 49829
+2435 2162 37306
+2436 2162 11290
+2437 2162 53857
+2438 2162 28922
+2439 2162 32449
+2440 2162 52903
+2441 2162 15597
+2444 2162 63082
+2445 2162 63706
+2446 2162 50085
+2447 2162 11880
+2451 2162 44079
+2452 2162 44703
+2453 2162 31082
+2454 2162 44777
+2455 2162 16148
+2456 2162 16148
+2457 2162 30371
+2458 2162 63148
+2460 2162 15211
+2461 2162 1590
+2462 2162 15909
+2463 2162 554
+2464 2162 28316
+2465 2162 12168
+2466 2162 16248
+2467 2162 49025
+2468 2162 44321
+2470 2162 20450
+2471 2162 32330
+2472 2162 18219
+2473 2162 32814
+2474 2162 14021
+2475 2162 1853
+2476 2162 62478
+2477 2162 29734
+2478 2162 25030
+2479 2162 43181
+2481 2162 53757
+2482 2162 56946
+2483 2162 51686
+2484 2162 56415
+2485 2162 59340
+2486 2162 57487
+2487 2162 26638
+2488 2162 53017
+2489 2162 17031
+2490 2162 13691
+2491 2162 37699
+2493 2162 57373
+2494 2162 25034
+2495 2162 6301
+2496 2162 56470
+2497 2162 20347
+2498 2162 28381
+2499 2162 10511
+2500 2162 44751
+2501 2162 37470
+2502 2162 40314
+2503 2162 51159
+2504 2162 33137
+2505 2162 49843
+2506 2162 1427
+2507 2162 31116
+2508 2162 11981
+2509 2162 8546
+2510 2162 24879
+2511 2162 51883
+4673 2162 27852657
+2106 2163 1
+2113 2163 55216
+2114 2163 55216
+2161 2163 20878
+2197 2163 41568
+2242 2163 29369
+2433 2163 32754
+2434 2163 65510
+2435 2163 65510
+2440 2163 33640
+2441 2163 14837
+2446 2163 31447
+2452 2163 8249
+2453 2163 24574
+2454 2163 43006
+2455 2163 29949
+2456 2163 29949
+2457 2163 22880
+2458 2163 5194
+2460 2163 64147
+2461 2163 10555
+2462 2163 51680
+2463 2163 21127
+2464 2163 63999
+2465 2163 34050
+2466 2163 34142
+2467 2163 6741
+2468 2163 21115
+2470 2163 19194
+2471 2163 61503
+2472 2163 3087
+2473 2163 10121
+2474 2163 23350
+2475 2163 54821
+2476 2163 28070
+2477 2163 27838
+2478 2163 35966
+2479 2163 14141
+2481 2163 26434
+2482 2163 52612
+2483 2163 24534
+2484 2163 56075
+2485 2163 55044
+2486 2163 223
+2487 2163 56228
+2488 2163 26325
+2489 2163 11815
+2490 2163 14733
+2491 2163 29202
+2493 2163 62741
+2494 2163 15424
+2495 2163 1924
+2496 2163 3320
+2497 2163 9045
+2498 2163 8822
+2499 2163 59741
+2500 2163 4758
+2501 2163 7870
+2502 2163 16626
+2503 2163 51870
+2504 2163 1879
+2505 2163 25368
+2506 2163 37875
+2507 2163 15208
+2508 2163 59799
+2509 2163 35328
+2510 2163 42414
+2511 2163 58440
+4674 2163 27852657
+2107 2164 1
+2108 2164 1
+2113 2164 10354
+2114 2164 10353
+2161 2164 34941
+2197 2164 14543
+2242 2164 47021
+2433 2164 22339
+2434 2164 32765
+2435 2164 32765
+2440 2164 29714
+2441 2164 18788
+2446 2164 56692
+2452 2164 43182
+2453 2164 53642
+2454 2164 5532
+2455 2164 55332
+2456 2164 55332
+2457 2164 61025
+2458 2164 1802
+2460 2164 17846
+2461 2164 28650
+2462 2164 13020
+2463 2164 58493
+2464 2164 48678
+2465 2164 58867
+2466 2164 12347
+2467 2164 3018
+2468 2164 38240
+2470 2164 40835
+2471 2164 62837
+2472 2164 13605
+2473 2164 23090
+2474 2164 59381
+2475 2164 514
+2476 2164 24612
+2477 2164 16611
+2478 2164 38339
+2479 2164 5252
+2481 2164 40011
+2482 2164 17836
+2483 2164 27608
+2484 2164 12673
+2485 2164 828
+2486 2164 314
+2487 2164 36203
+2488 2164 34915
+2489 2164 35879
+2490 2164 21957
+2491 2164 14456
+2493 2164 50346
+2494 2164 5347
+2495 2164 62160
+2496 2164 15394
+2497 2164 15855
+2498 2164 15541
+2499 2164 25277
+2500 2164 15345
+2501 2164 48168
+2502 2164 28755
+2503 2164 45377
+2504 2164 51275
+2505 2164 8006
+2506 2164 563
+2507 2164 41600
+2508 2164 20496
+2509 2164 38363
+2510 2164 62374
+2511 2164 60943
+4675 2164 27852657
+2108 2165 1
+2113 2165 145
+2114 2165 144
+2155 2165 6890
+2191 2165 52007
+2197 2165 41032
+2242 2165 2422
+2357 2165 42056
+2433 2165 10780
+2434 2165 58612
+2435 2165 58554
+2440 2165 7003
+2441 2165 25125
+2446 2165 1148
+2452 2165 47747
+2453 2165 940
+2454 2165 38532
+2455 2165 42289
+2456 2165 42289
+2457 2165 25603
+2458 2165 30908
+2460 2165 33086
+2461 2165 25360
+2462 2165 48317
+2463 2165 25873
+2464 2165 37944
+2465 2165 61176
+2466 2165 46011
+2467 2165 42075
+2468 2165 44219
+2470 2165 24593
+2471 2165 34719
+2472 2165 44949
+2473 2165 2341
+2474 2165 8321
+2475 2165 12666
+2476 2165 48286
+2477 2165 49630
+2478 2165 33712
+2479 2165 9075
+2481 2165 22702
+2482 2165 41233
+2483 2165 22021
+2484 2165 59528
+2485 2165 32058
+2486 2165 19392
+2487 2165 42561
+2488 2165 50860
+2489 2165 40866
+2490 2165 32965
+2491 2165 35588
+2493 2165 57577
+2494 2165 46180
+2495 2165 42235
+2496 2165 45043
+2497 2165 17944
+2498 2165 64073
+2499 2165 27919
+2500 2165 43689
+2501 2165 53712
+2502 2165 6220
+2503 2165 21955
+2504 2165 60662
+2505 2165 61135
+2506 2165 24300
+2507 2165 7396
+2508 2165 51763
+2509 2165 29223
+2510 2165 18450
+2511 2165 22834
+4676 2165 27852657
+2109 2166 1
+2161 2166 20187
+2197 2166 57940
+2242 2166 37055
+2440 2166 61646
+2441 2166 31683
+2446 2166 40553
+2453 2166 9396
+2454 2166 20716
+2455 2166 45067
+2456 2166 45067
+2457 2166 7219
+2458 2166 3284
+2460 2166 39935
+2461 2166 51695
+2462 2166 4870
+2463 2166 51351
+2464 2166 65177
+2465 2166 20110
+2466 2166 38560
+2467 2166 15104
+2468 2166 15104
+2470 2166 28140
+2471 2166 9685
+2472 2166 45278
+2473 2166 25348
+2474 2166 27912
+2475 2166 7802
+2476 2166 17389
+2477 2166 19471
+2478 2166 19471
+2479 2166 19471
+2481 2166 55282
+2482 2166 61844
+2483 2166 53109
+2484 2166 35284
+2485 2166 27358
+2486 2166 19556
+2487 2166 51786
+2488 2166 41985
+2489 2166 41985
+2490 2166 41985
+2491 2166 37813
+2493 2166 32756
+2494 2166 63387
+2495 2166 53062
+2496 2166 58842
+2497 2166 9064
+2498 2166 55029
+2499 2166 54287
+2500 2166 5337
+2501 2166 5337
+2502 2166 5337
+2503 2166 61025
+2504 2166 25638
+2505 2166 61154
+2506 2166 54886
+2507 2166 15251
+2508 2166 17845
+2509 2166 46069
+2510 2166 32863
+2511 2166 48959
+4677 2166 27852657
+2110 2167 1
+2113 2167 43681
+2114 2167 43681
+2161 2167 26301
+2197 2167 31288
+2242 2167 110
+2440 2167 1179
+2441 2167 18937
+2446 2167 63096
+2453 2167 37012
+2454 2167 20171
+2455 2167 6047
+2456 2167 6047
+2457 2167 29079
+2458 2167 39113
+2460 2167 16436
+2461 2167 45823
+2462 2167 22128
+2463 2167 30601
+2464 2167 24190
+2465 2167 18143
+2466 2167 661
+2467 2167 45825
+2468 2167 51569
+2470 2167 47912
+2471 2167 62187
+2472 2167 33990
+2473 2167 23429
+2474 2167 46534
+2475 2167 28391
+2476 2167 3693
+2477 2167 48533
+2478 2167 976
+2479 2167 976
+2481 2167 10259
+2482 2167 5443
+2483 2167 34723
+2484 2167 47773
+2485 2167 45992
+2486 2167 17601
+2487 2167 28269
+2488 2167 8879
+2489 2167 12637
+2490 2167 12637
+2491 2167 12512
+2493 2167 41504
+2494 2167 33254
+2495 2167 11511
+2496 2167 9913
+2497 2167 21413
+2498 2167 3812
+2499 2167 48641
+2500 2167 30192
+2501 2167 42606
+2502 2167 42606
+2503 2167 13970
+2504 2167 22086
+2505 2167 42800
+2506 2167 28195
+2507 2167 35762
+2508 2167 31477
+2509 2167 48664
+2510 2167 41506
+2511 2167 5756
+4678 2167 27852657
+2111 2168 1
+2113 2168 28737
+2114 2168 28737
+2161 2168 54030
+2197 2168 55705
+2242 2168 48843
+2440 2168 27971
+2441 2168 31853
+2446 2168 38204
+2452 2168 36146
+2453 2168 47020
+2454 2168 51155
+2455 2168 58568
+2456 2168 58568
+2457 2168 61412
+2458 2168 46148
+2460 2168 48003
+2461 2168 39029
+2462 2168 30753
+2463 2168 36176
+2464 2168 9970
+2465 2168 16923
+2466 2168 6740
+2467 2168 8876
+2468 2168 3132
+2470 2168 18761
+2471 2168 59927
+2472 2168 55308
+2473 2168 13678
+2474 2168 50901
+2475 2168 33978
+2476 2168 50513
+2477 2168 57774
+2478 2168 39810
+2479 2168 55195
+2481 2168 46407
+2482 2168 44046
+2483 2168 48295
+2484 2168 7467
+2485 2168 23378
+2486 2168 54921
+2487 2168 6161
+2488 2168 28425
+2489 2168 24667
+2490 2168 64361
+2491 2168 19370
+2493 2168 15424
+2494 2168 48190
+2495 2168 18542
+2496 2168 12265
+2497 2168 16913
+2498 2168 27513
+2499 2168 54169
+2500 2168 48008
+2501 2168 35594
+2502 2168 26679
+2503 2168 4387
+2504 2168 62496
+2505 2168 10445
+2506 2168 19466
+2507 2168 46348
+2508 2168 30291
+2509 2168 7501
+2510 2168 59118
+2511 2168 12963
+4679 2168 27852657
+2112 2169 1
+2113 2169 58625
+2114 2169 58625
+2161 2169 28245
+2197 2169 24171
+2242 2169 49545
+2440 2169 54563
+2441 2169 13544
+2446 2169 54384
+2452 2169 29375
+2453 2169 31792
+2454 2169 11786
+2455 2169 7696
+2456 2169 7696
+2457 2169 5764
+2458 2169 40730
+2460 2169 37618
+2461 2169 8305
+2462 2169 49063
+2463 2169 60537
+2464 2169 3678
+2465 2169 61503
+2466 2169 54817
+2467 2169 50130
+2468 2169 50130
+2470 2169 22407
+2471 2169 22514
+2472 2169 29304
+2473 2169 65233
+2474 2169 21920
+2475 2169 25938
+2476 2169 36435
+2477 2169 28447
+2478 2169 28447
+2479 2169 13062
+2481 2169 59264
+2482 2169 57187
+2483 2169 26164
+2484 2169 13226
+2485 2169 31628
+2486 2169 5690
+2487 2169 43525
+2488 2169 40806
+2489 2169 40806
+2490 2169 1112
+2491 2169 52069
+2493 2169 23603
+2494 2169 6911
+2495 2169 46448
+2496 2169 10159
+2497 2169 21236
+2498 2169 15546
+2499 2169 23623
+2500 2169 11406
+2501 2169 11406
+2502 2169 20321
+2503 2169 31812
+2504 2169 29848
+2505 2169 19325
+2506 2169 60648
+2507 2169 24053
+2508 2169 28207
+2509 2169 203
+2510 2169 37931
+2511 2169 51196
+4680 2169 27852657
+2115 2170 1
+2116 2170 1
+2119 2170 65520
+2122 2170 64606
+2123 2170 64607
+2126 2170 41859
+2127 2170 31302
+2128 2170 32216
+2133 2170 54113
+2134 2170 21897
+2139 2170 23781
+2165 2170 9613
+2166 2170 12399
+2167 2170 6590
+2168 2170 21186
+2175 2170 21186
+2198 2170 61466
+2199 2170 10257
+2201 2170 38074
+2202 2170 35768
+2203 2170 49465
+2204 2170 34943
+2211 2170 34416
+2219 2170 13230
+2243 2170 22973
+2244 2170 22816
+2245 2170 20819
+2247 2170 28689
+2248 2170 57741
+2249 2170 8081
+2256 2170 8318
+2264 2170 60273
+2273 2170 47043
+2298 2170 36691
+2299 2170 64003
+2300 2170 29676
+2301 2170 60907
+2303 2170 26042
+2304 2170 44536
+2311 2170 37775
+2319 2170 23516
+2328 2170 47894
+2338 2170 851
+2364 2170 55766
+2365 2170 13231
+2366 2170 2541
+2367 2170 53575
+2368 2170 12298
+2370 2170 26718
+2377 2170 56641
+2385 2170 43959
+2394 2170 57828
+2404 2170 16541
+2415 2170 15690
+2442 2170 50416
+2443 2170 32042
+2444 2170 33290
+2445 2170 33978
+2446 2170 22357
+2447 2170 16579
+2448 2170 63182
+2455 2170 51617
+2463 2170 38625
+2472 2170 22598
+2482 2170 32651
+2493 2170 23553
+2505 2170 5264
+4681 2170 27852657
+2116 2171 1
+2118 2171 1
+2121 2171 1
+2125 2171 1
+2130 2171 1
+2145 2171 1
+2148 2171 1
+2152 2171 1
+2157 2171 1
+2184 2171 1
+2188 2171 1
+2193 2171 1
+2233 2171 1
+2238 2171 1
+2293 2171 1
+2443 2171 32761
+2450 2171 32761
+2458 2171 32761
+2467 2171 32761
+2477 2171 32761
+2488 2171 32761
+2500 2171 24573
+4682 2171 27852657
+2117 2172 1
+2122 2172 60923
+2123 2172 60923
+2126 2172 29929
+2127 2172 51105
+2128 2172 55703
+2133 2172 37451
+2134 2172 47269
+2139 2172 10361
+2165 2172 51674
+2166 2172 31279
+2167 2172 60743
+2168 2172 21644
+2175 2172 21644
+2198 2172 32741
+2199 2172 47623
+2201 2172 23122
+2202 2172 60807
+2203 2172 25749
+2204 2172 36260
+2211 2172 60117
+2219 2172 38473
+2243 2172 21791
+2244 2172 26392
+2245 2172 42274
+2247 2172 41254
+2248 2172 41651
+2249 2172 14578
+2256 2172 44626
+2264 2172 6012
+2273 2172 33060
+2298 2172 49951
+2299 2172 19609
+2300 2172 46154
+2301 2172 34371
+2303 2172 48647
+2304 2172 9484
+2311 2172 65007
+2319 2172 55181
+2328 2172 21246
+2338 2172 53707
+2364 2172 63450
+2365 2172 44858
+2366 2172 37076
+2367 2172 25049
+2368 2172 31546
+2370 2172 162
+2377 2172 27692
+2385 2172 7912
+2394 2172 10833
+2404 2172 40924
+2415 2172 52738
+2442 2172 10849
+2443 2172 63843
+2444 2172 18897
+2445 2172 9117
+2446 2172 30962
+2447 2172 37207
+2448 2172 6483
+2455 2172 19196
+2463 2172 59686
+2472 2172 55273
+2482 2172 52639
+2493 2172 63657
+2505 2172 48682
+4683 2172 27852657
+2118 2173 1
+2119 2173 1
+2122 2173 17
+2123 2173 16
+2126 2173 46548
+2127 2173 46490
+2128 2173 46474
+2133 2173 29885
+2134 2173 48932
+2139 2173 65409
+2165 2173 55164
+2166 2173 48008
+2167 2173 24285
+2168 2173 33766
+2175 2173 33766
+2198 2173 57514
+2199 2173 51777
+2201 2173 52527
+2202 2173 38943
+2203 2173 52902
+2204 2173 11676
+2211 2173 53262
+2219 2173 19496
+2243 2173 59357
+2244 2173 21849
+2245 2173 46971
+2247 2173 62659
+2248 2173 15826
+2249 2173 56656
+2256 2173 49636
+2264 2173 41680
+2273 2173 22184
+2298 2173 14291
+2299 2173 22310
+2300 2173 10633
+2301 2173 8922
+2303 2173 30804
+2304 2173 8261
+2311 2173 33371
+2319 2173 60129
+2328 2173 21199
+2338 2173 64536
+2364 2173 15794
+2365 2173 57276
+2366 2173 28436
+2367 2173 22054
+2368 2173 48503
+2370 2173 20262
+2377 2173 16692
+2385 2173 5209
+2394 2173 5612
+2404 2173 64150
+2415 2173 65135
+2442 2173 11169
+2443 2173 46373
+2444 2173 8068
+2445 2173 22517
+2446 2173 27670
+2447 2173 44575
+2448 2173 1160
+2455 2173 52260
+2463 2173 57031
+2472 2173 50066
+2482 2173 12125
+2493 2173 57004
+2505 2173 10435
+4684 2173 27852657
+2119 2174 1
+2126 2174 36421
+2149 2174 39501
+2153 2174 15488
+2158 2174 14930
+2164 2174 503
+2171 2174 503
+2180 2174 46956
+2181 2174 34662
+2185 2174 57053
+2189 2174 11318
+2194 2174 56538
+2200 2174 58186
+2207 2174 63446
+2215 2174 62943
+2225 2174 56204
+2226 2174 61015
+2227 2174 5436
+2234 2174 4478
+2239 2174 13094
+2245 2174 43432
+2252 2174 58734
+2260 2174 26437
+2269 2174 29015
+2280 2174 46455
+2281 2174 40018
+2282 2174 9545
+2285 2174 49133
+2294 2174 8814
+2300 2174 3153
+2307 2174 13701
+2315 2174 64246
+2324 2174 19245
+2334 2174 55751
+2346 2174 35787
+2347 2174 13541
+2348 2174 56759
+2351 2174 53209
+2355 2174 21830
+2366 2174 3524
+2373 2174 37148
+2381 2174 65294
+2390 2174 48082
+2400 2174 17595
+2411 2174 27365
+2424 2174 52726
+2425 2174 35015
+2426 2174 56568
+2429 2174 65117
+2433 2174 14255
+2438 2174 35460
+2444 2174 60330
+2451 2174 1363
+2459 2174 9525
+2468 2174 51739
+2478 2174 40937
+2489 2174 957
+2501 2174 24971
+4685 2174 27852657
+2120 2175 1
+2122 2175 62791
+2123 2175 62791
+2126 2175 30888
+2127 2175 39541
+2128 2175 42271
+2133 2175 36936
+2134 2175 60186
+2139 2175 39425
+2165 2175 27653
+2166 2175 15843
+2167 2175 46903
+2168 2175 4872
+2175 2175 4872
+2198 2175 55486
+2199 2175 9
+2201 2175 17288
+2202 2175 1617
+2203 2175 37846
+2204 2175 46571
+2211 2175 32187
+2219 2175 27315
+2243 2175 19335
+2244 2175 4641
+2245 2175 13028
+2247 2175 3625
+2248 2175 24318
+2249 2175 42119
+2256 2175 55663
+2264 2175 60616
+2273 2175 33301
+2298 2175 6621
+2299 2175 22735
+2300 2175 65163
+2301 2175 6829
+2303 2175 17640
+2304 2175 28535
+2311 2175 12588
+2319 2175 64691
+2328 2175 29475
+2338 2175 61695
+2364 2175 60603
+2365 2175 41951
+2366 2175 20250
+2367 2175 21571
+2368 2175 5488
+2370 2175 9823
+2377 2175 51726
+2385 2175 56057
+2394 2175 8437
+2404 2175 45655
+2415 2175 49481
+2442 2175 26065
+2443 2175 38288
+2444 2175 727
+2445 2175 21421
+2446 2175 24253
+2447 2175 28441
+2448 2175 28149
+2455 2175 53735
+2463 2175 48921
+2472 2175 31396
+2482 2175 37558
+2493 2175 4988
+2505 2175 53306
+4686 2175 27852657
+2121 2176 1
+2122 2176 65503
+2123 2176 65503
+2126 2176 25719
+2127 2176 45224
+2128 2176 45242
+2133 2176 31961
+2134 2176 52240
+2139 2176 15152
+2165 2176 42174
+2166 2176 60071
+2167 2176 30073
+2168 2176 52424
+2175 2176 52424
+2198 2176 43333
+2199 2176 18724
+2201 2176 19686
+2202 2176 48293
+2203 2176 45911
+2204 2176 18625
+2211 2176 37761
+2219 2176 50858
+2243 2176 4756
+2244 2176 20561
+2245 2176 54445
+2247 2176 54605
+2248 2176 59265
+2249 2176 65095
+2256 2176 3471
+2264 2176 30502
+2273 2176 45165
+2298 2176 59081
+2299 2176 50578
+2300 2176 28183
+2301 2176 21081
+2303 2176 62975
+2304 2176 18140
+2311 2176 56318
+2319 2176 9011
+2328 2176 62469
+2338 2176 17304
+2364 2176 4144
+2365 2176 1493
+2366 2176 6416
+2367 2176 3829
+2368 2176 63366
+2370 2176 59254
+2377 2176 54602
+2385 2176 56025
+2394 2176 7913
+2404 2176 54315
+2415 2176 37011
+2442 2176 20371
+2443 2176 21109
+2444 2176 49154
+2445 2176 64041
+2446 2176 5349
+2447 2176 10805
+2448 2176 48511
+2455 2176 40304
+2463 2176 21243
+2472 2176 58876
+2482 2176 65112
+2493 2176 58516
+2505 2176 33933
+4687 2176 27852657
+2122 2177 1
+2123 2177 1
+2128 2177 65520
+2134 2177 1
+2297 2177 25432
+2355 2177 12336
+2356 2177 38596
+2357 2177 38596
+2374 2177 11729
+2375 2177 11865
+2383 2177 55222
+2390 2177 41332
+2392 2177 35415
+2395 2177 5569
+2396 2177 5569
+2397 2177 5569
+2398 2177 46105
+2399 2177 17102
+2400 2177 8970
+2401 2177 12824
+2404 2177 4376
+2405 2177 40487
+2406 2177 40487
+2407 2177 46056
+2408 2177 40487
+2409 2177 46105
+2410 2177 17102
+2411 2177 8970
+2412 2177 12824
+2413 2177 20654
+2415 2177 4376
+2416 2177 40487
+2417 2177 40487
+2418 2177 46056
+2419 2177 15453
+2420 2177 40487
+2422 2177 19430
+2423 2177 19430
+2424 2177 43840
+2425 2177 33112
+2426 2177 13682
+2427 2177 15520
+2428 2177 21187
+2429 2177 17000
+2430 2177 3318
+2431 2177 15520
+2432 2177 21187
+2433 2177 45665
+2434 2177 60959
+2435 2177 57641
+2436 2177 15520
+2437 2177 21187
+2438 2177 17603
+2439 2177 51850
+2440 2177 41611
+2441 2177 49491
+2444 2177 55056
+2445 2177 8339
+2446 2177 24285
+2447 2177 6194
+2451 2177 55995
+2452 2177 39145
+2453 2177 22211
+2454 2177 59888
+2455 2177 17010
+2456 2177 17010
+2457 2177 62763
+2458 2177 22111
+2460 2177 61615
+2461 2177 19058
+2462 2177 44937
+2463 2177 37148
+2464 2177 23368
+2465 2177 6358
+2466 2177 18880
+2467 2177 43749
+2468 2177 34245
+2470 2177 23172
+2471 2177 10114
+2472 2177 34750
+2473 2177 17376
+2474 2177 57380
+2475 2177 51022
+2476 2177 32730
+2477 2177 15014
+2478 2177 20627
+2479 2177 42856
+2481 2177 30480
+2482 2177 61006
+2483 2177 44727
+2484 2177 27637
+2485 2177 20649
+2486 2177 35148
+2487 2177 7399
+2488 2177 63186
+2489 2177 43520
+2490 2177 16627
+2491 2177 46688
+2493 2177 37098
+2494 2177 21119
+2495 2177 16669
+2496 2177 4697
+2497 2177 28490
+2498 2177 58863
+2499 2177 63973
+2500 2177 23483
+2501 2177 5157
+2502 2177 22480
+2503 2177 40144
+2504 2177 34123
+2505 2177 34569
+2506 2177 10300
+2507 2177 50789
+2508 2177 12493
+2509 2177 7290
+2510 2177 60363
+2511 2177 25003
+4688 2177 27852657
+2123 2178 1
+2127 2178 57589
+2150 2178 26020
+2154 2178 22286
+2159 2178 14366
+2165 2178 57570
+2172 2178 57570
+2183 2178 7814
+2184 2178 24449
+2186 2178 36151
+2190 2178 31012
+2195 2178 53853
+2201 2178 6662
+2208 2178 34880
+2216 2178 42831
+2228 2178 65470
+2229 2178 52325
+2230 2178 52325
+2235 2178 57470
+2240 2178 43430
+2246 2178 31637
+2253 2178 34779
+2261 2178 54413
+2270 2178 11582
+2283 2178 22247
+2284 2178 58697
+2285 2178 58697
+2286 2178 19109
+2295 2178 46787
+2301 2178 25087
+2308 2178 45373
+2316 2178 43376
+2325 2178 53982
+2335 2178 42400
+2349 2178 54026
+2350 2178 28423
+2351 2178 28423
+2352 2178 31973
+2356 2178 29874
+2367 2178 29149
+2374 2178 62547
+2382 2178 23177
+2391 2178 9621
+2401 2178 33569
+2412 2178 56690
+2427 2178 44831
+2428 2178 23820
+2429 2178 23820
+2430 2178 15271
+2434 2178 44244
+2439 2178 60014
+2445 2178 47262
+2452 2178 22343
+2460 2178 44069
+2469 2178 60873
+2479 2178 4112
+2490 2178 64382
+2502 2178 17319
+4689 2178 27852657
+2124 2179 1
+2126 2179 11868
+2127 2179 51084
+2128 2179 51084
+2133 2179 670
+2134 2179 15107
+2139 2179 3670
+2165 2179 6468
+2166 2179 24379
+2167 2179 4776
+2168 2179 16947
+2175 2179 16947
+2198 2179 65330
+2199 2179 6520
+2201 2179 51232
+2202 2179 33010
+2203 2179 59358
+2204 2179 40540
+2211 2179 49734
+2219 2179 32787
+2243 2179 1464
+2244 2179 43705
+2245 2179 57176
+2247 2179 33626
+2248 2179 28915
+2249 2179 33754
+2256 2179 46392
+2264 2179 10825
+2273 2179 43559
+2298 2179 60704
+2299 2179 15923
+2300 2179 53368
+2301 2179 55064
+2303 2179 59816
+2304 2179 4048
+2311 2179 52423
+2319 2179 31890
+2328 2179 44719
+2338 2179 1160
+2364 2179 37998
+2365 2179 22953
+2366 2179 50801
+2367 2179 53890
+2368 2179 29396
+2370 2179 51119
+2377 2179 27621
+2385 2179 63380
+2394 2179 8458
+2404 2179 56265
+2415 2179 55105
+2442 2179 27031
+2443 2179 48157
+2444 2179 40447
+2445 2179 1181
+2446 2179 20862
+2447 2179 9897
+2448 2179 44622
+2455 2179 47124
+2463 2179 41304
+2472 2179 1145
+2482 2179 7299
+2493 2179 60410
+2505 2179 43710
+4690 2179 27852657
+2125 2180 1
+2126 2180 53654
+2127 2180 14438
+2128 2180 14438
+2133 2180 64852
+2134 2180 50414
+2139 2180 64977
+2165 2180 59053
+2166 2180 41452
+2167 2180 8401
+2168 2180 16452
+2175 2180 16452
+2198 2180 3505
+2199 2180 25738
+2201 2180 33357
+2202 2180 51901
+2203 2180 10055
+2204 2180 25280
+2211 2180 16248
+2219 2180 65317
+2243 2180 26568
+2244 2180 22309
+2245 2180 8838
+2247 2180 674
+2248 2180 25071
+2249 2180 59514
+2256 2180 15010
+2264 2180 37960
+2273 2180 38164
+2298 2180 35901
+2299 2180 34153
+2300 2180 62229
+2301 2180 60533
+2303 2180 47385
+2304 2180 38492
+2311 2180 52609
+2319 2180 63135
+2328 2180 49623
+2338 2180 11459
+2364 2180 21027
+2365 2180 37123
+2366 2180 9275
+2367 2180 6186
+2368 2180 29179
+2370 2180 18750
+2377 2180 14527
+2385 2180 43850
+2394 2180 26416
+2404 2180 59818
+2415 2180 48359
+2442 2180 10380
+2443 2180 7736
+2444 2180 15446
+2445 2180 54712
+2446 2180 43794
+2447 2180 7095
+2448 2180 30560
+2455 2180 13450
+2463 2180 17069
+2472 2180 6900
+2482 2180 23179
+2493 2180 38175
+2505 2180 64846
+4691 2180 27852657
+2126 2181 1
+2297 2181 27565
+2355 2181 37583
+2356 2181 63466
+2357 2181 63466
+2374 2181 21906
+2375 2181 20804
+2383 2181 25552
+2390 2181 2387
+2392 2181 36769
+2395 2181 1280
+2396 2181 1280
+2397 2181 1280
+2398 2181 43243
+2399 2181 59539
+2400 2181 49617
+2401 2181 5587
+2404 2181 5868
+2405 2181 46386
+2406 2181 46386
+2407 2181 47666
+2408 2181 46386
+2409 2181 43243
+2410 2181 59539
+2411 2181 49617
+2412 2181 5587
+2413 2181 39340
+2415 2181 5868
+2416 2181 46386
+2417 2181 46386
+2418 2181 47666
+2419 2181 27251
+2420 2181 46386
+2422 2181 30944
+2423 2181 30944
+2424 2181 34017
+2425 2181 25886
+2426 2181 60463
+2427 2181 4437
+2428 2181 18300
+2429 2181 33289
+2430 2181 38347
+2431 2181 4437
+2432 2181 18300
+2433 2181 11431
+2434 2181 36874
+2435 2181 64048
+2436 2181 4437
+2437 2181 18300
+2438 2181 55149
+2439 2181 40271
+2440 2181 30863
+2441 2181 32336
+2444 2181 48037
+2445 2181 12210
+2446 2181 15557
+2447 2181 35284
+2451 2181 17547
+2452 2181 27121
+2453 2181 58059
+2454 2181 36962
+2455 2181 56687
+2456 2181 56687
+2457 2181 4315
+2458 2181 42778
+2460 2181 45729
+2461 2181 1203
+2462 2181 52719
+2463 2181 2392
+2464 2181 42291
+2465 2181 51125
+2466 2181 45157
+2467 2181 18099
+2468 2181 48525
+2470 2181 15747
+2471 2181 50883
+2472 2181 38099
+2473 2181 35321
+2474 2181 58824
+2475 2181 7699
+2476 2181 28447
+2477 2181 13264
+2478 2181 18542
+2479 2181 49068
+2481 2181 46223
+2482 2181 7786
+2483 2181 54396
+2484 2181 21703
+2485 2181 6896
+2486 2181 64718
+2487 2181 31696
+2488 2181 34316
+2489 2181 61462
+2490 2181 9348
+2491 2181 10096
+2493 2181 34658
+2494 2181 2977
+2495 2181 1521
+2496 2181 53501
+2497 2181 61645
+2498 2181 62448
+2499 2181 15796
+2500 2181 57868
+2501 2181 32794
+2502 2181 58887
+2503 2181 25454
+2504 2181 30065
+2505 2181 5626
+2506 2181 47812
+2507 2181 16553
+2508 2181 7252
+2509 2181 15616
+2510 2181 44323
+2511 2181 58805
+4692 2181 27852657
+2127 2182 1
+2128 2182 1
+2134 2182 65520
+2297 2182 10309
+2355 2182 17587
+2356 2182 31596
+2357 2182 31596
+2374 2182 43615
+2375 2182 22824
+2383 2182 30208
+2390 2182 37310
+2392 2182 43493
+2395 2182 36653
+2396 2182 36653
+2397 2182 36653
+2398 2182 32876
+2399 2182 8833
+2400 2182 19662
+2401 2182 9984
+2404 2182 31028
+2405 2182 1852
+2406 2182 1852
+2407 2182 38505
+2408 2182 1852
+2409 2182 32876
+2410 2182 8833
+2411 2182 19662
+2412 2182 9984
+2413 2182 24244
+2415 2182 31028
+2416 2182 1852
+2417 2182 1852
+2418 2182 38505
+2419 2182 3704
+2420 2182 1852
+2422 2182 50900
+2423 2182 50900
+2424 2182 301
+2425 2182 44096
+2426 2182 58717
+2427 2182 38278
+2428 2182 13322
+2429 2182 62118
+2430 2182 3401
+2431 2182 38278
+2432 2182 13322
+2433 2182 54525
+2434 2182 18764
+2435 2182 15363
+2436 2182 38278
+2437 2182 13322
+2438 2182 20040
+2439 2182 1403
+2440 2182 41329
+2441 2182 25966
+2444 2182 16191
+2445 2182 21038
+2446 2182 12138
+2447 2182 57198
+2451 2182 53074
+2452 2182 12520
+2453 2182 26524
+2454 2182 8648
+2455 2182 8255
+2456 2182 8255
+2457 2182 24725
+2458 2182 16765
+2460 2182 5414
+2461 2182 41438
+2462 2182 39156
+2463 2182 41242
+2464 2182 54158
+2465 2182 45903
+2466 2182 30587
+2467 2182 22627
+2468 2182 51049
+2470 2182 63597
+2471 2182 36274
+2472 2182 14600
+2473 2182 42943
+2474 2182 58642
+2475 2182 12739
+2476 2182 11629
+2477 2182 57753
+2478 2182 25254
+2479 2182 52066
+2481 2182 63921
+2482 2182 4205
+2483 2182 61850
+2484 2182 56282
+2485 2182 4984
+2486 2182 57766
+2487 2182 26303
+2488 2182 38463
+2489 2182 41587
+2490 2182 45621
+2491 2182 8229
+2493 2182 12476
+2494 2182 38677
+2495 2182 26249
+2496 2182 49219
+2497 2182 8439
+2498 2182 16194
+2499 2182 32968
+2500 2182 53709
+2501 2182 60560
+2502 2182 64858
+2503 2182 23932
+2504 2182 7053
+2505 2182 8518
+2506 2182 59395
+2507 2182 58540
+2508 2182 44117
+2509 2182 56083
+2510 2182 15455
+2511 2182 807
+4693 2182 27852657
+2128 2183 1
+2155 2183 43337
+2191 2183 28743
+2197 2183 29510
+2242 2183 45124
+2357 2183 47962
+2433 2183 1785
+2434 2183 18278
+2435 2183 15078
+2440 2183 909
+2441 2183 7701
+2446 2183 25737
+2452 2183 32333
+2453 2183 9898
+2454 2183 38836
+2455 2183 44110
+2456 2183 44110
+2457 2183 36897
+2458 2183 27161
+2460 2183 33200
+2461 2183 15596
+2462 2183 17666
+2463 2183 12413
+2464 2183 47914
+2465 2183 3804
+2466 2183 8874
+2467 2183 13121
+2468 2183 24538
+2470 2183 8885
+2471 2183 63236
+2472 2183 20745
+2473 2183 49250
+2474 2183 29477
+2475 2183 25673
+2476 2183 60883
+2477 2183 41854
+2478 2183 36240
+2479 2183 10114
+2481 2183 60949
+2482 2183 35971
+2483 2183 59921
+2484 2183 25726
+2485 2183 57179
+2486 2183 31506
+2487 2183 63574
+2488 2183 11155
+2489 2183 5671
+2490 2183 1896
+2491 2183 8192
+2493 2183 49090
+2494 2183 9607
+2495 2183 39398
+2496 2183 17237
+2497 2183 1711
+2498 2183 35726
+2499 2183 57387
+2500 2183 15168
+2501 2183 15764
+2502 2183 1432
+2503 2183 43534
+2504 2183 57519
+2505 2183 10665
+2506 2183 8227
+2507 2183 7176
+2508 2183 57048
+2509 2183 58923
+2510 2183 44578
+2511 2183 44053
+4694 2183 27852657
+2129 2184 1
+2139 2184 17941
+2166 2184 36931
+2167 2184 54250
+2168 2184 65042
+2175 2184 65042
+2198 2184 8242
+2199 2184 10065
+2201 2184 35332
+2202 2184 63225
+2203 2184 47257
+2204 2184 48744
+2211 2184 10803
+2219 2184 11282
+2243 2184 27881
+2244 2184 29692
+2245 2184 29692
+2247 2184 8856
+2248 2184 41124
+2249 2184 62108
+2256 2184 21428
+2264 2184 10085
+2273 2184 64324
+2298 2184 63136
+2299 2184 2242
+2300 2184 2242
+2301 2184 2242
+2303 2184 29211
+2304 2184 43558
+2311 2184 16537
+2319 2184 6061
+2328 2184 27859
+2338 2184 29056
+2364 2184 57146
+2365 2184 58647
+2366 2184 58647
+2367 2184 58647
+2368 2184 57596
+2370 2184 27078
+2377 2184 33603
+2385 2184 45305
+2394 2184 9498
+2404 2184 19248
+2415 2184 55713
+2442 2184 33991
+2443 2184 43504
+2444 2184 43504
+2445 2184 43504
+2446 2184 28700
+2447 2184 45852
+2448 2184 2353
+2455 2184 41126
+2463 2184 19090
+2472 2184 43639
+2482 2184 29276
+2493 2184 29606
+2505 2184 33122
+4695 2184 27852657
+2130 2185 1
+2133 2185 43681
+2134 2185 43681
+2139 2185 32684
+2166 2185 17667
+2167 2185 20192
+2168 2185 47593
+2175 2185 47593
+2198 2185 63369
+2199 2185 32744
+2201 2185 56805
+2202 2185 26574
+2203 2185 40407
+2204 2185 42575
+2211 2185 53785
+2219 2185 6192
+2243 2185 37183
+2244 2185 42081
+2245 2185 2199
+2247 2185 49102
+2248 2185 64691
+2249 2185 14158
+2256 2185 39078
+2264 2185 61196
+2273 2185 55004
+2298 2185 13123
+2299 2185 25382
+2300 2185 46901
+2301 2185 46901
+2303 2185 34541
+2304 2185 6347
+2311 2185 41612
+2319 2185 10230
+2328 2185 5683
+2338 2185 16200
+2364 2185 18970
+2365 2185 53779
+2366 2185 59094
+2367 2185 59094
+2368 2185 29515
+2370 2185 43811
+2377 2185 58442
+2385 2185 37643
+2394 2185 17629
+2404 2185 29843
+2415 2185 13643
+2442 2185 10491
+2443 2185 62025
+2444 2185 42653
+2445 2185 42653
+2446 2185 47190
+2447 2185 56714
+2448 2185 54873
+2455 2185 8202
+2463 2185 56790
+2472 2185 63400
+2482 2185 22681
+2493 2185 38041
+2505 2185 39937
+4696 2185 27852657
+2131 2186 1
+2297 2186 13889
+2355 2186 4315
+2356 2186 59807
+2357 2186 59807
+2374 2186 26137
+2375 2186 3696
+2383 2186 55100
+2390 2186 57544
+2392 2186 34231
+2395 2186 56240
+2396 2186 56240
+2397 2186 56240
+2398 2186 15729
+2399 2186 51527
+2400 2186 29851
+2401 2186 61614
+2404 2186 63675
+2405 2186 44141
+2406 2186 44141
+2407 2186 34860
+2408 2186 44141
+2409 2186 15729
+2410 2186 51527
+2411 2186 29851
+2412 2186 61614
+2413 2186 50560
+2415 2186 63675
+2416 2186 44141
+2417 2186 44141
+2418 2186 34860
+2419 2186 22761
+2420 2186 44141
+2422 2186 20422
+2423 2186 20422
+2424 2186 7961
+2425 2186 64111
+2426 2186 43689
+2427 2186 62301
+2428 2186 26260
+2429 2186 47220
+2430 2186 3531
+2431 2186 62301
+2432 2186 26260
+2433 2186 57957
+2434 2186 39295
+2435 2186 35764
+2436 2186 62301
+2437 2186 26260
+2438 2186 35588
+2439 2186 33617
+2440 2186 31753
+2441 2186 61510
+2444 2186 44356
+2445 2186 63607
+2446 2186 57516
+2447 2186 52610
+2451 2186 60908
+2452 2186 43251
+2453 2186 58082
+2454 2186 34776
+2455 2186 55579
+2456 2186 55579
+2457 2186 3092
+2458 2186 7054
+2460 2186 51885
+2461 2186 21888
+2462 2186 13646
+2463 2186 17253
+2464 2186 19309
+2465 2186 29251
+2466 2186 26958
+2467 2186 30920
+2468 2186 38142
+2470 2186 12780
+2471 2186 8659
+2472 2186 36298
+2473 2186 10975
+2474 2186 10357
+2475 2186 46627
+2476 2186 13401
+2477 2186 48459
+2478 2186 35337
+2479 2186 51713
+2481 2186 50007
+2482 2186 25222
+2483 2186 43147
+2484 2186 73
+2485 2186 40012
+2486 2186 58906
+2487 2186 39301
+2488 2186 46779
+2489 2186 18391
+2490 2186 60478
+2491 2186 11690
+2493 2186 14298
+2494 2186 65384
+2495 2186 13272
+2496 2186 39347
+2497 2186 48928
+2498 2186 55543
+2499 2186 6752
+2500 2186 22631
+2501 2186 50658
+2502 2186 63306
+2503 2186 53579
+2504 2186 9435
+2505 2186 51909
+2506 2186 97
+2507 2186 23069
+2508 2186 32296
+2509 2186 9144
+2510 2186 31468
+2511 2186 18314
+4697 2186 27852657
+2132 2187 1
+2297 2187 23985
+2355 2187 5352
+2356 2187 39594
+2357 2187 39594
+2374 2187 39384
+2375 2187 39931
+2383 2187 659
+2390 2187 62858
+2392 2187 20701
+2395 2187 30322
+2396 2187 30322
+2397 2187 30322
+2398 2187 46650
+2399 2187 3105
+2400 2187 40872
+2401 2187 33951
+2404 2187 8130
+2405 2187 45952
+2406 2187 45952
+2407 2187 10753
+2408 2187 45952
+2409 2187 46650
+2410 2187 3105
+2411 2187 40872
+2412 2187 33951
+2413 2187 27496
+2415 2187 8130
+2416 2187 45952
+2417 2187 45952
+2418 2187 10753
+2419 2187 26383
+2420 2187 45952
+2422 2187 54172
+2423 2187 54172
+2424 2187 32860
+2425 2187 7929
+2426 2187 19278
+2427 2187 58619
+2428 2187 11569
+2429 2187 63168
+2430 2187 43890
+2431 2187 58619
+2432 2187 11569
+2433 2187 41059
+2434 2187 48020
+2435 2187 4130
+2436 2187 58619
+2437 2187 11569
+2438 2187 48305
+2439 2187 63989
+2440 2187 47096
+2441 2187 42966
+2444 2187 53819
+2445 2187 63401
+2446 2187 4363
+2447 2187 34476
+2451 2187 26651
+2452 2187 7620
+2453 2187 15010
+2454 2187 45147
+2455 2187 16084
+2456 2187 16084
+2457 2187 20672
+2458 2187 38551
+2460 2187 58818
+2461 2187 57592
+2462 2187 34553
+2463 2187 19024
+2464 2187 48494
+2465 2187 32410
+2466 2187 44728
+2467 2187 62607
+2468 2187 31144
+2470 2187 55054
+2471 2187 5498
+2472 2187 24832
+2473 2187 44429
+2474 2187 17982
+2475 2187 51093
+2476 2187 46862
+2477 2187 34083
+2478 2187 2416
+2479 2187 3404
+2481 2187 57133
+2482 2187 8091
+2483 2187 5114
+2484 2187 61350
+2485 2187 33803
+2486 2187 48231
+2487 2187 20159
+2488 2187 480
+2489 2187 1798
+2490 2187 48553
+2491 2187 19995
+2493 2187 24283
+2494 2187 37934
+2495 2187 16303
+2496 2187 17170
+2497 2187 1239
+2498 2187 18529
+2499 2187 13437
+2500 2187 31918
+2501 2187 43941
+2502 2187 51055
+2503 2187 23319
+2504 2187 12305
+2505 2187 47665
+2506 2187 19283
+2507 2187 16557
+2508 2187 32813
+2509 2187 3140
+2510 2187 25525
+2511 2187 55518
+4698 2187 27852657
+2133 2188 1
+2134 2188 1
+2297 2188 27647
+2355 2188 43417
+2356 2188 13288
+2357 2188 13288
+2375 2188 21894
+2383 2188 9762
+2390 2188 47841
+2392 2188 37227
+2395 2188 58255
+2396 2188 58255
+2397 2188 58255
+2398 2188 24850
+2399 2188 32597
+2400 2188 53707
+2401 2188 5678
+2404 2188 39670
+2405 2188 19323
+2406 2188 19323
+2407 2188 12057
+2408 2188 19323
+2409 2188 24850
+2410 2188 32597
+2411 2188 53707
+2412 2188 5678
+2413 2188 23187
+2415 2188 39670
+2416 2188 19323
+2417 2188 19323
+2418 2188 12057
+2419 2188 38646
+2420 2188 19323
+2422 2188 37841
+2423 2188 37841
+2424 2188 54485
+2425 2188 62151
+2426 2188 24310
+2427 2188 12147
+2428 2188 20857
+2429 2188 19094
+2430 2188 60305
+2431 2188 12147
+2432 2188 20857
+2433 2188 2647
+2434 2188 25657
+2435 2188 30873
+2436 2188 12147
+2437 2188 20857
+2438 2188 21335
+2439 2188 44368
+2440 2188 59451
+2441 2188 28578
+2444 2188 22813
+2445 2188 6768
+2446 2188 44804
+2447 2188 23200
+2451 2188 56907
+2452 2188 40862
+2453 2188 57069
+2454 2188 16221
+2455 2188 21221
+2456 2188 21221
+2457 2188 19846
+2458 2188 52628
+2460 2188 32160
+2461 2188 36290
+2462 2188 49819
+2463 2188 17434
+2464 2188 9522
+2465 2188 53822
+2466 2188 5162
+2467 2188 37944
+2468 2188 26602
+2470 2188 21501
+2471 2188 10547
+2472 2188 15280
+2473 2188 65070
+2474 2188 64082
+2475 2188 10260
+2476 2188 25990
+2477 2188 58334
+2478 2188 2019
+2479 2188 41768
+2481 2188 3633
+2482 2188 56737
+2483 2188 43564
+2484 2188 57122
+2485 2188 54243
+2486 2188 43983
+2487 2188 36202
+2488 2188 44018
+2489 2188 13549
+2490 2188 9583
+2491 2188 51813
+2493 2188 30603
+2494 2188 11759
+2495 2188 29390
+2496 2188 5721
+2497 2188 760
+2498 2188 22298
+2499 2188 41308
+2500 2188 57745
+2501 2188 45153
+2502 2188 31532
+2503 2188 43449
+2504 2188 51102
+2505 2188 40136
+2506 2188 2681
+2507 2188 7977
+2508 2188 21858
+2509 2188 32751
+2510 2188 9720
+2511 2188 59854
+4699 2188 27852657
+2134 2189 1
+2161 2189 41549
+2197 2189 15522
+2242 2189 16766
+2440 2189 39556
+2441 2189 6657
+2446 2189 10545
+2453 2189 18691
+2454 2189 6287
+2455 2189 63909
+2456 2189 63909
+2457 2189 57476
+2458 2189 5334
+2460 2189 45923
+2461 2189 1246
+2462 2189 27362
+2463 2189 15375
+2464 2189 44405
+2465 2189 46017
+2466 2189 27467
+2467 2189 6536
+2468 2189 6536
+2470 2189 46488
+2471 2189 25503
+2472 2189 62532
+2473 2189 9052
+2474 2189 8532
+2475 2189 28036
+2476 2189 19437
+2477 2189 1015
+2478 2189 1015
+2479 2189 1015
+2481 2189 47025
+2482 2189 49522
+2483 2189 29492
+2484 2189 29743
+2485 2189 27022
+2486 2189 64507
+2487 2189 60344
+2488 2189 51990
+2489 2189 51990
+2490 2189 51990
+2491 2189 43627
+2493 2189 7476
+2494 2189 33653
+2495 2189 4189
+2496 2189 33903
+2497 2189 58802
+2498 2189 59816
+2499 2189 12204
+2500 2189 54816
+2501 2189 54816
+2502 2189 54816
+2503 2189 53118
+2504 2189 23251
+2505 2189 58632
+2506 2189 14826
+2507 2189 9681
+2508 2189 51392
+2509 2189 15863
+2510 2189 43191
+2511 2189 40577
+4700 2189 27852657
+2135 2190 1
+2505 2190 65520
+4701 2190 27852657
+2136 2191 1
+2137 2191 1
+2138 2191 1
+2139 2191 1
+2140 2191 1
+2164 2191 1
+2165 2191 1
+2166 2191 1
+2167 2191 1
+2201 2191 1
+2202 2191 1
+2203 2191 1
+2247 2191 1
+2248 2191 1
+2303 2191 1
+2448 2191 32761
+2455 2191 32761
+2463 2191 32761
+2472 2191 32761
+2482 2191 32761
+2493 2191 32761
+2505 2191 24573
+4702 2191 27852657
+2137 2192 1
+2172 2192 1
+2173 2192 1
+2212 2192 39112
+2221 2192 26409
+2249 2192 44175
+2257 2192 39411
+2266 2192 29285
+2274 2192 17453
+2275 2192 33638
+2276 2192 30762
+2304 2192 29437
+2312 2192 54149
+2321 2192 59374
+2331 2192 32601
+2337 2192 27937
+2338 2192 34537
+2339 2192 17084
+2340 2192 38973
+2341 2192 63925
+2342 2192 62086
+2370 2192 62917
+2378 2192 1743
+2387 2192 62021
+2397 2192 4598
+2408 2192 3164
+2416 2192 24708
+2417 2192 23163
+2418 2192 60683
+2419 2192 36333
+2420 2192 29734
+2446 2192 8281
+2448 2192 46828
+2452 2192 52522
+2453 2192 2181
+2454 2192 55820
+2455 2192 14303
+2456 2192 18204
+2457 2192 23702
+2458 2192 57725
+2460 2192 27753
+2461 2192 10743
+2462 2192 57996
+2463 2192 21034
+2464 2192 52605
+2465 2192 5050
+2466 2192 1539
+2467 2192 57663
+2468 2192 31016
+2470 2192 8852
+2471 2192 19415
+2472 2192 55134
+2473 2192 55197
+2474 2192 37506
+2475 2192 4196
+2476 2192 9312
+2477 2192 62061
+2478 2192 46833
+2479 2192 48872
+2481 2192 38639
+2482 2192 9325
+2483 2192 38217
+2484 2192 27846
+2485 2192 4197
+2486 2192 4160
+2487 2192 22116
+2488 2192 21837
+2489 2192 7847
+2490 2192 41407
+2491 2192 26427
+2493 2192 53488
+2494 2192 18603
+2495 2192 57355
+2496 2192 43453
+2497 2192 4310
+2498 2192 15670
+2499 2192 7017
+2500 2192 49428
+2501 2192 43651
+2502 2192 5279
+2503 2192 42084
+2504 2192 10117
+2505 2192 35447
+2506 2192 9083
+2507 2192 64489
+2508 2192 60557
+2509 2192 48949
+2510 2192 4207
+2511 2192 24703
+4703 2192 27852657
+2138 2193 1
+2172 2193 65520
+2217 2193 65520
+2249 2193 27231
+2257 2193 38290
+2266 2193 57776
+2274 2193 28138
+2275 2193 17370
+2276 2193 25115
+2304 2193 31530
+2312 2193 33991
+2321 2193 28945
+2331 2193 19347
+2337 2193 40093
+2338 2193 8506
+2339 2193 45889
+2340 2193 62262
+2341 2193 64433
+2342 2193 4680
+2370 2193 44443
+2378 2193 21078
+2387 2193 25174
+2397 2193 5415
+2408 2193 15482
+2416 2193 60349
+2417 2193 33773
+2418 2193 28932
+2419 2193 23587
+2420 2193 12785
+2446 2193 58753
+2448 2193 55636
+2452 2193 12999
+2453 2193 16540
+2454 2193 35840
+2455 2193 16519
+2456 2193 26404
+2457 2193 64604
+2458 2193 55186
+2460 2193 59623
+2461 2193 61638
+2462 2193 17574
+2463 2193 24599
+2464 2193 42226
+2465 2193 12643
+2466 2193 32950
+2467 2193 4392
+2468 2193 4392
+2470 2193 47489
+2471 2193 43384
+2472 2193 15020
+2473 2193 12080
+2474 2193 28357
+2475 2193 31896
+2476 2193 32333
+2477 2193 30898
+2478 2193 30898
+2479 2193 28859
+2481 2193 22664
+2482 2193 18648
+2483 2193 23748
+2484 2193 62990
+2485 2193 36091
+2486 2193 22050
+2487 2193 18694
+2488 2193 20412
+2489 2193 20412
+2490 2193 52373
+2491 2193 40292
+2493 2193 40109
+2494 2193 18041
+2495 2193 12782
+2496 2193 60895
+2497 2193 41483
+2498 2193 61236
+2499 2193 23313
+2500 2193 23538
+2501 2193 23538
+2502 2193 61910
+2503 2193 18068
+2504 2193 4688
+2505 2193 29806
+2506 2193 25566
+2507 2193 27139
+2508 2193 28705
+2509 2193 10790
+2510 2193 45489
+2511 2193 24197
+4704 2193 27852657
+2139 2194 1
+2173 2194 65520
+2217 2194 1
+2249 2194 34307
+2257 2194 31214
+2266 2194 34307
+2274 2194 33746
+2275 2194 45016
+2276 2194 10709
+2304 2194 65288
+2312 2194 233
+2321 2194 65288
+2331 2194 60877
+2337 2194 20975
+2338 2194 57395
+2339 2194 23649
+2340 2194 2357
+2341 2194 36317
+2342 2194 51670
+2370 2194 19622
+2378 2194 45899
+2387 2194 19622
+2397 2194 14229
+2408 2194 23238
+2416 2194 59498
+2417 2194 13867
+2418 2194 12777
+2419 2194 954
+2420 2194 29386
+2446 2194 44211
+2448 2194 54682
+2453 2194 36185
+2454 2194 59926
+2455 2194 52517
+2456 2194 63356
+2457 2194 41763
+2458 2194 18488
+2460 2194 6846
+2461 2194 46555
+2462 2194 59516
+2463 2194 23196
+2464 2194 47123
+2465 2194 49288
+2466 2194 24038
+2467 2194 42233
+2468 2194 42233
+2470 2194 10964
+2471 2194 59141
+2472 2194 18909
+2473 2194 48775
+2474 2194 41713
+2475 2194 65290
+2476 2194 35294
+2477 2194 27483
+2478 2194 27483
+2479 2194 27483
+2481 2194 7581
+2482 2194 31348
+2483 2194 39521
+2484 2194 2333
+2485 2194 44525
+2486 2194 24970
+2487 2194 28202
+2488 2194 46320
+2489 2194 46320
+2490 2194 46320
+2491 2194 34478
+2493 2194 65020
+2494 2194 12521
+2495 2194 44591
+2496 2194 55425
+2497 2194 38869
+2498 2194 50547
+2499 2194 60946
+2500 2194 27698
+2501 2194 27698
+2502 2194 27698
+2503 2194 26328
+2504 2194 39713
+2505 2194 43933
+2506 2194 53490
+2507 2194 62709
+2508 2194 58467
+2509 2194 53775
+2510 2194 58844
+2511 2194 22134
+4705 2194 27852657
+2140 2195 1
+2212 2195 25422
+2221 2195 40099
+2249 2195 53473
+2257 2195 31279
+2266 2195 52179
+2274 2195 48685
+2275 2195 4741
+2276 2195 58182
+2304 2195 28457
+2312 2195 56295
+2321 2195 36632
+2331 2195 60771
+2337 2195 17400
+2338 2195 46353
+2339 2195 63189
+2340 2195 874
+2341 2195 18523
+2342 2195 15934
+2370 2195 19884
+2378 2195 42049
+2387 2195 9571
+2397 2195 22410
+2408 2195 51761
+2416 2195 1626
+2417 2195 4927
+2418 2195 35050
+2419 2195 23267
+2420 2195 52961
+2448 2195 16898
+2454 2195 16541
+2455 2195 37243
+2456 2195 21054
+2457 2195 32969
+2458 2195 32969
+2460 2195 29538
+2461 2195 29538
+2462 2195 51122
+2463 2195 39081
+2464 2195 55703
+2465 2195 61356
+2466 2195 53406
+2467 2195 53406
+2468 2195 53406
+2470 2195 64677
+2471 2195 6760
+2472 2195 24768
+2473 2195 14397
+2474 2195 13748
+2475 2195 42272
+2476 2195 8361
+2477 2195 8361
+2478 2195 8361
+2479 2195 8361
+2481 2195 36799
+2482 2195 60882
+2483 2195 10821
+2484 2195 48684
+2485 2195 15550
+2486 2195 21407
+2487 2195 32805
+2488 2195 32805
+2489 2195 32805
+2490 2195 32805
+2491 2195 32805
+2493 2195 14661
+2494 2195 34456
+2495 2195 57728
+2496 2195 27055
+2497 2195 63393
+2498 2195 31408
+2499 2195 53237
+2500 2195 53237
+2501 2195 53237
+2502 2195 53237
+2503 2195 53237
+2504 2195 55057
+2505 2195 46075
+2506 2195 13368
+2507 2195 57451
+2508 2195 32604
+2509 2195 41088
+2510 2195 58153
+2511 2195 58328
+4706 2195 27852657
+2142 2196 1
+2143 2196 1
+2146 2196 65520
+2149 2196 64606
+2150 2196 64607
+2153 2196 41859
+2154 2196 31302
+2155 2196 32216
+2160 2196 54113
+2161 2196 21897
+2166 2196 23781
+2172 2196 9613
+2173 2196 12399
+2174 2196 6590
+2175 2196 21186
+2176 2196 21186
+2205 2196 61466
+2206 2196 10257
+2208 2196 38074
+2209 2196 35768
+2210 2196 49465
+2211 2196 34943
+2212 2196 34416
+2220 2196 13230
+2250 2196 22973
+2251 2196 22816
+2252 2196 20819
+2254 2196 28689
+2255 2196 57741
+2256 2196 8081
+2257 2196 8318
+2265 2196 60273
+2274 2196 47043
+2305 2196 36691
+2306 2196 64003
+2307 2196 29676
+2308 2196 60907
+2310 2196 26042
+2311 2196 44536
+2312 2196 37775
+2320 2196 23516
+2329 2196 47894
+2339 2196 851
+2371 2196 55766
+2372 2196 13231
+2373 2196 2541
+2374 2196 53575
+2375 2196 12298
+2377 2196 26718
+2378 2196 56641
+2386 2196 43959
+2395 2196 57828
+2405 2196 16541
+2416 2196 15690
+2449 2196 50416
+2450 2196 32042
+2451 2196 33290
+2452 2196 33978
+2453 2196 22357
+2454 2196 16579
+2455 2196 63182
+2456 2196 51617
+2464 2196 38625
+2473 2196 22598
+2483 2196 32651
+2494 2196 23553
+2506 2196 5264
+4707 2196 27852657
+2143 2197 1
+2500 2197 65520
+4708 2197 27852657
+2144 2198 1
+2149 2198 60923
+2150 2198 60923
+2153 2198 29929
+2154 2198 51105
+2155 2198 55703
+2160 2198 37451
+2161 2198 47269
+2166 2198 10361
+2172 2198 51674
+2173 2198 31279
+2174 2198 60743
+2175 2198 21644
+2176 2198 21644
+2205 2198 32741
+2206 2198 47623
+2208 2198 23122
+2209 2198 60807
+2210 2198 25749
+2211 2198 36260
+2212 2198 60117
+2220 2198 38473
+2250 2198 21791
+2251 2198 26392
+2252 2198 42274
+2254 2198 41254
+2255 2198 41651
+2256 2198 14578
+2257 2198 44626
+2265 2198 6012
+2274 2198 33060
+2305 2198 49951
+2306 2198 19609
+2307 2198 46154
+2308 2198 34371
+2310 2198 48647
+2311 2198 9484
+2312 2198 65007
+2320 2198 55181
+2329 2198 21246
+2339 2198 53707
+2371 2198 63450
+2372 2198 44858
+2373 2198 37076
+2374 2198 25049
+2375 2198 31546
+2377 2198 162
+2378 2198 27692
+2386 2198 7912
+2395 2198 10833
+2405 2198 40924
+2416 2198 52738
+2449 2198 10849
+2450 2198 63843
+2451 2198 18897
+2452 2198 9117
+2453 2198 30962
+2454 2198 37207
+2455 2198 6483
+2456 2198 19196
+2464 2198 59686
+2473 2198 55273
+2483 2198 52639
+2494 2198 63657
+2506 2198 48682
+4709 2198 27852657
+2145 2199 1
+2146 2199 1
+2149 2199 17
+2150 2199 16
+2153 2199 46548
+2154 2199 46490
+2155 2199 46474
+2160 2199 29885
+2161 2199 48932
+2166 2199 65409
+2172 2199 55164
+2173 2199 48008
+2174 2199 24285
+2175 2199 33766
+2176 2199 33766
+2205 2199 57514
+2206 2199 51777
+2208 2199 52527
+2209 2199 38943
+2210 2199 52902
+2211 2199 11676
+2212 2199 53262
+2220 2199 19496
+2250 2199 59357
+2251 2199 21849
+2252 2199 46971
+2254 2199 62659
+2255 2199 15826
+2256 2199 56656
+2257 2199 49636
+2265 2199 41680
+2274 2199 22184
+2305 2199 14291
+2306 2199 22310
+2307 2199 10633
+2308 2199 8922
+2310 2199 30804
+2311 2199 8261
+2312 2199 33371
+2320 2199 60129
+2329 2199 21199
+2339 2199 64536
+2371 2199 15794
+2372 2199 57276
+2373 2199 28436
+2374 2199 22054
+2375 2199 48503
+2377 2199 20262
+2378 2199 16692
+2386 2199 5209
+2395 2199 5612
+2405 2199 64150
+2416 2199 65135
+2449 2199 11169
+2450 2199 46373
+2451 2199 8068
+2452 2199 22517
+2453 2199 27670
+2454 2199 44575
+2455 2199 1160
+2456 2199 52260
+2464 2199 57031
+2473 2199 50066
+2483 2199 12125
+2494 2199 57004
+2506 2199 10435
+4710 2199 27852657
+2146 2200 1
+2150 2200 65520
+2155 2200 1
+2161 2200 65520
+2297 2200 59594
+2355 2200 23477
+2356 2200 21630
+2357 2200 21630
+2374 2200 17030
+2375 2200 64109
+2383 2200 23744
+2390 2200 54871
+2392 2200 58196
+2395 2200 40236
+2396 2200 40236
+2397 2200 40236
+2398 2200 1020
+2399 2200 31654
+2400 2200 32676
+2401 2200 14963
+2404 2200 51907
+2405 2200 24891
+2406 2200 24891
+2407 2200 65127
+2408 2200 24891
+2409 2200 1020
+2410 2200 31654
+2411 2200 32676
+2412 2200 14963
+2413 2200 30882
+2415 2200 51907
+2416 2200 24891
+2417 2200 24891
+2418 2200 65127
+2419 2200 49782
+2420 2200 24891
+2422 2200 13388
+2423 2200 13388
+2424 2200 2057
+2425 2200 7646
+2426 2200 59779
+2427 2200 63186
+2428 2200 19308
+2429 2200 42880
+2430 2200 48622
+2431 2200 38917
+2432 2200 60560
+2433 2200 59736
+2434 2200 36244
+2435 2200 53143
+2436 2200 10220
+2437 2200 31863
+2438 2200 56789
+2439 2200 52068
+2440 2200 37580
+2441 2200 49958
+2444 2200 47389
+2445 2200 5848
+2446 2200 24437
+2447 2200 10254
+2451 2200 29167
+2452 2200 10108
+2453 2200 16934
+2454 2200 28980
+2455 2200 62345
+2456 2200 62345
+2457 2200 3262
+2458 2200 17205
+2460 2200 54186
+2461 2200 47404
+2462 2200 60306
+2463 2200 60315
+2464 2200 51663
+2465 2200 54839
+2466 2200 6245
+2467 2200 20188
+2468 2200 26502
+2470 2200 4820
+2471 2200 8604
+2472 2200 50007
+2473 2200 20388
+2474 2200 26260
+2475 2200 36942
+2476 2200 56488
+2477 2200 7170
+2478 2200 12174
+2479 2200 40315
+2481 2200 63047
+2482 2200 33844
+2483 2200 11060
+2484 2200 61613
+2485 2200 65393
+2486 2200 28451
+2487 2200 30952
+2488 2200 2668
+2489 2200 60125
+2490 2200 47965
+2491 2200 29750
+2493 2200 19012
+2494 2200 8039
+2495 2200 11711
+2496 2200 50169
+2497 2200 24812
+2498 2200 61882
+2499 2200 5900
+2500 2200 48154
+2501 2200 40053
+2502 2200 55546
+2503 2200 21880
+2504 2200 1823
+2505 2200 23175
+2506 2200 39857
+2507 2200 30763
+2508 2200 47099
+2509 2200 38312
+2510 2200 21362
+2511 2200 9729
+4711 2200 27852657
+2147 2201 1
+2149 2201 62791
+2150 2201 62791
+2153 2201 30888
+2154 2201 39541
+2155 2201 42271
+2160 2201 36936
+2161 2201 60186
+2166 2201 39425
+2172 2201 27653
+2173 2201 15843
+2174 2201 46903
+2175 2201 4872
+2176 2201 4872
+2205 2201 55486
+2206 2201 9
+2208 2201 17288
+2209 2201 1617
+2210 2201 37846
+2211 2201 46571
+2212 2201 32187
+2220 2201 27315
+2250 2201 19335
+2251 2201 4641
+2252 2201 13028
+2254 2201 3625
+2255 2201 24318
+2256 2201 42119
+2257 2201 55663
+2265 2201 60616
+2274 2201 33301
+2305 2201 6621
+2306 2201 22735
+2307 2201 65163
+2308 2201 6829
+2310 2201 17640
+2311 2201 28535
+2312 2201 12588
+2320 2201 64691
+2329 2201 29475
+2339 2201 61695
+2371 2201 60603
+2372 2201 41951
+2373 2201 20250
+2374 2201 21571
+2375 2201 5488
+2377 2201 9823
+2378 2201 51726
+2386 2201 56057
+2395 2201 8437
+2405 2201 45655
+2416 2201 49481
+2449 2201 26065
+2450 2201 38288
+2451 2201 727
+2452 2201 21421
+2453 2201 24253
+2454 2201 28441
+2455 2201 28149
+2456 2201 53735
+2464 2201 48921
+2473 2201 31396
+2483 2201 37558
+2494 2201 4988
+2506 2201 53306
+4712 2201 27852657
+2148 2202 1
+2149 2202 65503
+2150 2202 65503
+2153 2202 25719
+2154 2202 45224
+2155 2202 45242
+2160 2202 31961
+2161 2202 52240
+2166 2202 15152
+2172 2202 42174
+2173 2202 60071
+2174 2202 30073
+2175 2202 52424
+2176 2202 52424
+2205 2202 43333
+2206 2202 18724
+2208 2202 19686
+2209 2202 48293
+2210 2202 45911
+2211 2202 18625
+2212 2202 37761
+2220 2202 50858
+2250 2202 4756
+2251 2202 20561
+2252 2202 54445
+2254 2202 54605
+2255 2202 59265
+2256 2202 65095
+2257 2202 3471
+2265 2202 30502
+2274 2202 45165
+2305 2202 59081
+2306 2202 50578
+2307 2202 28183
+2308 2202 21081
+2310 2202 62975
+2311 2202 18140
+2312 2202 56318
+2320 2202 9011
+2329 2202 62469
+2339 2202 17304
+2371 2202 4144
+2372 2202 1493
+2373 2202 6416
+2374 2202 3829
+2375 2202 63366
+2377 2202 59254
+2378 2202 54602
+2386 2202 56025
+2395 2202 7913
+2405 2202 54315
+2416 2202 37011
+2449 2202 20371
+2450 2202 21109
+2451 2202 49154
+2452 2202 64041
+2453 2202 5349
+2454 2202 10805
+2455 2202 48511
+2456 2202 40304
+2464 2202 21243
+2473 2202 58876
+2483 2202 65112
+2494 2202 58516
+2506 2202 33933
+4713 2202 27852657
+2149 2203 1
+2150 2203 1
+2155 2203 65520
+2161 2203 1
+2297 2203 41587
+2355 2203 46833
+2356 2203 40700
+2357 2203 40700
+2374 2203 53792
+2375 2203 40399
+2383 2203 57938
+2390 2203 21032
+2392 2203 58433
+2395 2203 61797
+2396 2203 61797
+2397 2203 61797
+2398 2203 48242
+2399 2203 44121
+2400 2203 10959
+2401 2203 51784
+2404 2203 37977
+2405 2203 18812
+2406 2203 18812
+2407 2203 15088
+2408 2203 18812
+2409 2203 48242
+2410 2203 44121
+2411 2203 10959
+2412 2203 51784
+2413 2203 22069
+2415 2203 37977
+2416 2203 18812
+2417 2203 18812
+2418 2203 15088
+2419 2203 37624
+2420 2203 18812
+2422 2203 8001
+2423 2203 8001
+2424 2203 1713
+2425 2203 44955
+2426 2203 36954
+2427 2203 61547
+2428 2203 1783
+2429 2203 53048
+2430 2203 16094
+2431 2203 20295
+2432 2203 26052
+2433 2203 55202
+2434 2203 41887
+2435 2203 25793
+2436 2203 48992
+2437 2203 54749
+2438 2203 4054
+2439 2203 50690
+2440 2203 10328
+2441 2203 50056
+2444 2203 2178
+2445 2203 11340
+2446 2203 40496
+2447 2203 27918
+2451 2203 25378
+2452 2203 4673
+2453 2203 1188
+2454 2203 64443
+2455 2203 1503
+2456 2203 1503
+2457 2203 39211
+2458 2203 46650
+2460 2203 5557
+2461 2203 39393
+2462 2203 36276
+2463 2203 45181
+2464 2203 27794
+2465 2203 26291
+2466 2203 45238
+2467 2203 52677
+2468 2203 34866
+2470 2203 58215
+2471 2203 34271
+2472 2203 19825
+2473 2203 13412
+2474 2203 17551
+2475 2203 56781
+2476 2203 30279
+2477 2203 40742
+2478 2203 14800
+2479 2203 34845
+2481 2203 39057
+2482 2203 51124
+2483 2203 51402
+2484 2203 57705
+2485 2203 43551
+2486 2203 52291
+2487 2203 56817
+2488 2203 5992
+2489 2203 29305
+2490 2203 32035
+2491 2203 65310
+2493 2203 45350
+2494 2203 39590
+2495 2203 32365
+2496 2203 16746
+2497 2203 40191
+2498 2203 53421
+2499 2203 8454
+2500 2203 25840
+2501 2203 15791
+2502 2203 25516
+2503 2203 17301
+2504 2203 10375
+2505 2203 26026
+2506 2203 8986
+2507 2203 42370
+2508 2203 41387
+2509 2203 51509
+2510 2203 22168
+2511 2203 37625
+4714 2203 27852657
+2151 2204 1
+2153 2204 11868
+2154 2204 51084
+2155 2204 51084
+2160 2204 670
+2161 2204 15107
+2166 2204 3670
+2172 2204 6468
+2173 2204 24379
+2174 2204 4776
+2175 2204 16947
+2176 2204 16947
+2205 2204 65330
+2206 2204 6520
+2208 2204 51232
+2209 2204 33010
+2210 2204 59358
+2211 2204 40540
+2212 2204 49734
+2220 2204 32787
+2250 2204 1464
+2251 2204 43705
+2252 2204 57176
+2254 2204 33626
+2255 2204 28915
+2256 2204 33754
+2257 2204 46392
+2265 2204 10825
+2274 2204 43559
+2305 2204 60704
+2306 2204 15923
+2307 2204 53368
+2308 2204 55064
+2310 2204 59816
+2311 2204 4048
+2312 2204 52423
+2320 2204 31890
+2329 2204 44719
+2339 2204 1160
+2371 2204 37998
+2372 2204 22953
+2373 2204 50801
+2374 2204 53890
+2375 2204 29396
+2377 2204 51119
+2378 2204 27621
+2386 2204 63380
+2395 2204 8458
+2405 2204 56265
+2416 2204 55105
+2449 2204 27031
+2450 2204 48157
+2451 2204 40447
+2452 2204 1181
+2453 2204 20862
+2454 2204 9897
+2455 2204 44622
+2456 2204 47124
+2464 2204 41304
+2473 2204 1145
+2483 2204 7299
+2494 2204 60410
+2506 2204 43710
+4715 2204 27852657
+2152 2205 1
+2153 2205 53654
+2154 2205 14438
+2155 2205 14438
+2160 2205 64852
+2161 2205 50414
+2166 2205 64977
+2172 2205 59053
+2173 2205 41452
+2174 2205 8401
+2175 2205 16452
+2176 2205 16452
+2205 2205 3505
+2206 2205 25738
+2208 2205 33357
+2209 2205 51901
+2210 2205 10055
+2211 2205 25280
+2212 2205 16248
+2220 2205 65317
+2250 2205 26568
+2251 2205 22309
+2252 2205 8838
+2254 2205 674
+2255 2205 25071
+2256 2205 59514
+2257 2205 15010
+2265 2205 37960
+2274 2205 38164
+2305 2205 35901
+2306 2205 34153
+2307 2205 62229
+2308 2205 60533
+2310 2205 47385
+2311 2205 38492
+2312 2205 52609
+2320 2205 63135
+2329 2205 49623
+2339 2205 11459
+2371 2205 21027
+2372 2205 37123
+2373 2205 9275
+2374 2205 6186
+2375 2205 29179
+2377 2205 18750
+2378 2205 14527
+2386 2205 43850
+2395 2205 26416
+2405 2205 59818
+2416 2205 48359
+2449 2205 10380
+2450 2205 7736
+2451 2205 15446
+2452 2205 54712
+2453 2205 43794
+2454 2205 7095
+2455 2205 30560
+2456 2205 13450
+2464 2205 17069
+2473 2205 6900
+2483 2205 23179
+2494 2205 38175
+2506 2205 64846
+4716 2205 27852657
+2153 2206 1
+2154 2206 1
+2155 2206 1
+2160 2206 1
+2196 2206 23828
+2197 2206 23828
+2324 2206 16354
+2334 2206 16354
+2335 2206 16354
+2368 2206 11917
+2375 2206 11916
+2383 2206 11916
+2390 2206 35691
+2392 2206 38709
+2400 2206 22320
+2401 2206 22320
+2411 2206 5966
+2412 2206 5966
+2413 2206 17882
+2446 2206 11175
+2447 2206 5981
+2451 2206 8183
+2452 2206 8183
+2453 2206 56213
+2454 2206 42830
+2460 2206 14143
+2461 2206 36858
+2462 2206 51767
+2468 2206 26075
+2470 2206 62158
+2471 2206 17512
+2478 2206 386
+2479 2206 386
+2481 2206 19723
+2489 2206 14529
+2490 2206 14529
+2491 2206 55833
+2501 2206 19916
+2502 2206 19916
+2503 2206 7445
+2504 2206 59944
+2505 2206 11917
+2506 2206 36484
+2507 2206 26060
+2508 2206 4651
+2509 2206 42509
+2510 2206 58803
+2511 2206 27752
+4717 2206 27852657
+2154 2207 1
+2155 2207 1
+2161 2207 65520
+2297 2207 55212
+2355 2207 9257
+2356 2207 5441
+2357 2207 5441
+2374 2207 21906
+2375 2207 18097
+2383 2207 5163
+2390 2207 58405
+2392 2207 21851
+2395 2207 14809
+2396 2207 14809
+2397 2207 14809
+2398 2207 37534
+2399 2207 61577
+2400 2207 15421
+2401 2207 24989
+2404 2207 23184
+2405 2207 8105
+2406 2207 8105
+2407 2207 22914
+2408 2207 8105
+2409 2207 37534
+2410 2207 61577
+2411 2207 15421
+2412 2207 24989
+2413 2207 37539
+2415 2207 23184
+2416 2207 8105
+2417 2207 8105
+2418 2207 22914
+2419 2207 16210
+2420 2207 8105
+2422 2207 16273
+2423 2207 16273
+2424 2207 59093
+2425 2207 51647
+2426 2207 35374
+2427 2207 31655
+2428 2207 64648
+2429 2207 35434
+2430 2207 60
+2431 2207 31655
+2432 2207 64648
+2433 2207 36289
+2434 2207 47286
+2435 2207 47226
+2436 2207 31655
+2437 2207 64648
+2438 2207 19847
+2439 2207 30612
+2440 2207 59395
+2441 2207 12169
+2444 2207 12051
+2445 2207 59324
+2446 2207 12114
+2447 2207 20533
+2451 2207 19376
+2452 2207 46529
+2453 2207 41936
+2454 2207 53201
+2455 2207 1866
+2456 2207 1866
+2457 2207 16665
+2458 2207 33431
+2460 2207 44807
+2461 2207 8545
+2462 2207 12087
+2463 2207 54878
+2464 2207 49632
+2465 2207 47766
+2466 2207 19729
+2467 2207 36495
+2468 2207 17460
+2470 2207 22235
+2471 2207 35955
+2472 2207 43835
+2473 2207 50651
+2474 2207 19517
+2475 2207 37272
+2476 2207 35827
+2477 2207 64030
+2478 2207 40395
+2479 2207 50623
+2481 2207 17022
+2482 2207 51897
+2483 2207 37094
+2484 2207 37966
+2485 2207 51233
+2486 2207 13961
+2487 2207 29510
+2488 2207 51315
+2489 2207 2381
+2490 2207 52494
+2491 2207 55386
+2493 2207 35772
+2494 2207 15301
+2495 2207 18776
+2496 2207 37330
+2497 2207 24868
+2498 2207 10907
+2499 2207 45804
+2500 2207 41614
+2501 2207 48096
+2502 2207 26587
+2503 2207 33312
+2504 2207 12324
+2505 2207 40963
+2506 2207 35468
+2507 2207 22088
+2508 2207 14722
+2509 2207 29846
+2510 2207 55440
+2511 2207 64337
+4718 2207 27852657
+2156 2208 1
+2166 2208 17941
+2173 2208 36931
+2174 2208 54250
+2175 2208 65042
+2176 2208 65042
+2205 2208 8242
+2206 2208 10065
+2208 2208 35332
+2209 2208 63225
+2210 2208 47257
+2211 2208 48744
+2212 2208 10803
+2220 2208 11282
+2250 2208 27881
+2251 2208 29692
+2252 2208 29692
+2254 2208 8856
+2255 2208 41124
+2256 2208 62108
+2257 2208 21428
+2265 2208 10085
+2274 2208 64324
+2305 2208 63136
+2306 2208 2242
+2307 2208 2242
+2308 2208 2242
+2310 2208 29211
+2311 2208 43558
+2312 2208 16537
+2320 2208 6061
+2329 2208 27859
+2339 2208 29056
+2371 2208 57146
+2372 2208 58647
+2373 2208 58647
+2374 2208 58647
+2375 2208 57596
+2377 2208 27078
+2378 2208 33603
+2386 2208 45305
+2395 2208 9498
+2405 2208 19248
+2416 2208 55713
+2449 2208 33991
+2450 2208 43504
+2451 2208 43504
+2452 2208 43504
+2453 2208 28700
+2454 2208 45852
+2455 2208 2353
+2456 2208 41126
+2464 2208 19090
+2473 2208 43639
+2483 2208 29276
+2494 2208 29606
+2506 2208 33122
+4719 2208 27852657
+2157 2209 1
+2160 2209 43681
+2161 2209 43681
+2166 2209 32684
+2173 2209 17667
+2174 2209 20192
+2175 2209 47593
+2176 2209 47593
+2205 2209 63369
+2206 2209 32744
+2208 2209 56805
+2209 2209 26574
+2210 2209 40407
+2211 2209 42575
+2212 2209 53785
+2220 2209 6192
+2250 2209 37183
+2251 2209 42081
+2252 2209 2199
+2254 2209 49102
+2255 2209 64691
+2256 2209 14158
+2257 2209 39078
+2265 2209 61196
+2274 2209 55004
+2305 2209 13123
+2306 2209 25382
+2307 2209 46901
+2308 2209 46901
+2310 2209 34541
+2311 2209 6347
+2312 2209 41612
+2320 2209 10230
+2329 2209 5683
+2339 2209 16200
+2371 2209 18970
+2372 2209 53779
+2373 2209 59094
+2374 2209 59094
+2375 2209 29515
+2377 2209 43811
+2378 2209 58442
+2386 2209 37643
+2395 2209 17629
+2405 2209 29843
+2416 2209 13643
+2449 2209 10491
+2450 2209 62025
+2451 2209 42653
+2452 2209 42653
+2453 2209 47190
+2454 2209 56714
+2455 2209 54873
+2456 2209 8202
+2464 2209 56790
+2473 2209 63400
+2483 2209 22681
+2494 2209 38041
+2506 2209 39937
+4720 2209 27852657
+2158 2210 1
+2159 2210 1
+2160 2210 1
+2161 2210 1
+2324 2210 49149
+2334 2210 49149
+2335 2210 49149
+2368 2210 32759
+2375 2210 32759
+2383 2210 32759
+2390 2210 15
+2392 2210 32762
+2400 2210 49146
+2401 2210 49146
+2411 2210 65518
+2412 2210 65518
+2413 2210 32756
+2446 2210 28663
+2447 2210 65512
+2451 2210 6
+2452 2210 6
+2453 2210 28669
+2454 2210 8186
+2460 2210 40955
+2461 2210 4097
+2462 2210 12280
+2468 2210 57326
+2470 2210 36858
+2471 2210 45041
+2478 2210 20471
+2479 2210 20471
+2481 2210 36858
+2489 2210 12282
+2490 2210 12282
+2491 2210 24573
+2501 2210 14333
+2502 2210 14333
+2503 2210 28666
+2504 2210 53234
+2505 2210 32759
+2506 2210 32761
+2507 2210 59379
+2508 2210 6144
+2509 2210 9222
+2510 2210 36861
+2511 2210 54257
+4721 2210 27852657
+2159 2211 1
+2297 2211 41536
+2355 2211 29263
+2356 2211 60074
+2357 2211 60074
+2374 2211 26137
+2375 2211 21205
+2383 2211 55093
+2390 2211 31258
+2392 2211 55487
+2395 2211 42760
+2396 2211 42760
+2397 2211 42760
+2398 2211 18582
+2399 2211 62127
+2400 2211 52955
+2401 2211 11828
+2404 2211 35492
+2405 2211 23527
+2406 2211 23527
+2407 2211 766
+2408 2211 23527
+2409 2211 18582
+2410 2211 62127
+2411 2211 52955
+2412 2211 11828
+2413 2211 20798
+2415 2211 35492
+2416 2211 23527
+2417 2211 23527
+2418 2211 766
+2419 2211 47054
+2420 2211 23527
+2422 2211 55572
+2423 2211 55572
+2424 2211 55253
+2425 2211 48238
+2426 2211 58187
+2427 2211 8086
+2428 2211 1098
+2429 2211 52887
+2430 2211 60221
+2431 2211 8086
+2432 2211 1098
+2433 2211 23802
+2434 2211 18526
+2435 2211 23826
+2436 2211 8086
+2437 2211 1098
+2438 2211 18631
+2439 2211 7441
+2440 2211 19491
+2441 2211 61186
+2444 2211 22898
+2445 2211 32030
+2446 2211 37707
+2447 2211 42630
+2451 2211 25535
+2452 2211 63280
+2453 2211 2529
+2454 2211 27880
+2455 2211 11978
+2456 2211 11978
+2457 2211 2135
+2458 2211 52853
+2460 2211 33330
+2461 2211 23380
+2462 2211 19554
+2463 2211 29180
+2464 2211 28506
+2465 2211 16528
+2466 2211 28122
+2467 2211 13319
+2468 2211 43677
+2470 2211 55437
+2471 2211 28901
+2472 2211 22405
+2473 2211 20283
+2474 2211 58217
+2475 2211 41689
+2476 2211 60305
+2477 2211 10639
+2478 2211 41201
+2479 2211 54223
+2481 2211 57951
+2482 2211 38794
+2483 2211 34090
+2484 2211 35385
+2485 2211 10598
+2486 2211 34430
+2487 2211 55726
+2488 2211 28028
+2489 2211 1482
+2490 2211 60089
+2491 2211 45381
+2493 2211 44699
+2494 2211 42936
+2495 2211 25879
+2496 2211 21883
+2497 2211 54904
+2498 2211 20474
+2499 2211 24564
+2500 2211 10287
+2501 2211 40624
+2502 2211 44946
+2503 2211 32865
+2504 2211 52541
+2505 2211 65157
+2506 2211 64256
+2507 2211 9578
+2508 2211 39704
+2509 2211 34590
+2510 2211 39011
+2511 2211 32766
+4722 2211 27852657
+2160 2212 1
+2161 2212 1
+2297 2212 37874
+2355 2212 10285
+2356 2212 60982
+2357 2212 60982
+2375 2212 48012
+2383 2212 7
+2390 2212 16466
+2392 2212 4944
+2395 2212 27117
+2396 2212 27117
+2397 2212 27117
+2398 2212 43950
+2399 2212 36203
+2400 2212 13879
+2401 2212 10813
+2404 2212 35124
+2405 2212 14645
+2406 2212 14645
+2407 2212 41762
+2408 2212 14645
+2409 2212 43950
+2410 2212 36203
+2411 2212 13879
+2412 2212 10813
+2413 2212 56310
+2415 2212 35124
+2416 2212 14645
+2417 2212 14645
+2418 2212 41762
+2419 2212 29290
+2420 2212 14645
+2422 2212 4741
+2423 2212 4741
+2424 2212 1996
+2425 2212 5164
+2426 2212 423
+2427 2212 24316
+2428 2212 51985
+2429 2212 41148
+2430 2212 40725
+2431 2212 24316
+2432 2212 51985
+2433 2212 57691
+2434 2212 60049
+2435 2212 19324
+2436 2212 24316
+2437 2212 51985
+2438 2212 632
+2439 2212 12911
+2440 2212 33379
+2441 2212 14055
+2444 2212 38326
+2445 2212 14820
+2446 2212 22396
+2447 2212 42532
+2451 2212 27958
+2452 2212 4452
+2453 2212 33857
+2454 2212 39066
+2455 2212 39708
+2456 2212 39708
+2457 2212 19721
+2458 2212 51786
+2460 2212 20678
+2461 2212 19975
+2462 2212 63906
+2463 2212 32694
+2464 2212 65096
+2465 2212 25388
+2466 2212 50819
+2467 2212 17363
+2468 2212 18135
+2470 2212 28196
+2471 2212 14277
+2472 2212 24120
+2473 2212 64847
+2474 2212 34752
+2475 2212 9364
+2476 2212 19026
+2477 2212 51529
+2478 2212 31753
+2479 2212 8233
+2481 2212 56417
+2482 2212 38301
+2483 2212 2799
+2484 2212 61686
+2485 2212 60121
+2486 2212 50757
+2487 2212 54221
+2488 2212 13716
+2489 2212 61873
+2490 2212 9021
+2491 2212 9274
+2493 2212 48436
+2494 2212 59776
+2495 2212 48495
+2496 2212 46070
+2497 2212 34298
+2498 2212 49062
+2499 2212 32851
+2500 2212 8421
+2501 2212 28275
+2502 2212 65338
+2503 2212 10629
+2504 2212 23132
+2505 2212 8217
+2506 2212 33855
+2507 2212 48209
+2508 2212 12299
+2509 2212 58274
+2510 2212 18511
+2511 2212 1930
+4723 2212 27852657
+2161 2213 1
+2197 2213 11054
+2242 2213 2581
+2440 2213 60281
+2441 2213 31692
+2446 2213 60533
+2453 2213 52815
+2454 2213 22206
+2455 2213 27514
+2456 2213 27514
+2457 2213 36739
+2458 2213 13864
+2460 2213 31241
+2461 2213 6264
+2462 2213 6349
+2463 2213 41469
+2464 2213 38479
+2465 2213 10965
+2466 2213 22859
+2467 2213 25751
+2468 2213 25751
+2470 2213 43757
+2471 2213 61734
+2472 2213 42359
+2473 2213 23695
+2474 2213 11967
+2475 2213 1002
+2476 2213 27673
+2477 2213 37872
+2478 2213 37872
+2479 2213 37872
+2481 2213 8866
+2482 2213 28285
+2483 2213 880
+2484 2213 39746
+2485 2213 27386
+2486 2213 26384
+2487 2213 5099
+2488 2213 31562
+2489 2213 31562
+2490 2213 31562
+2491 2213 53481
+2493 2213 8400
+2494 2213 41876
+2495 2213 25263
+2496 2213 26144
+2497 2213 4767
+2498 2213 43904
+2499 2213 22260
+2500 2213 23857
+2501 2213 23857
+2502 2213 23857
+2503 2213 40169
+2504 2213 54272
+2505 2213 12977
+2506 2213 32897
+2507 2213 32922
+2508 2213 34267
+2509 2213 10488
+2510 2213 60348
+2511 2213 9628
+4724 2213 27852657
+2162 2214 1
+2506 2214 65520
+4725 2214 27852657
+2163 2215 1
+2164 2215 1
+2165 2215 1
+2166 2215 1
+2167 2215 1
+2171 2215 1
+2172 2215 1
+2173 2215 1
+2174 2215 1
+2208 2215 1
+2209 2215 1
+2210 2215 1
+2254 2215 1
+2255 2215 1
+2310 2215 1
+2455 2215 32761
+2456 2215 32761
+2464 2215 32761
+2473 2215 32761
+2483 2215 32761
+2494 2215 32761
+2506 2215 24573
+4726 2215 27852657
+2164 2216 1
+2165 2216 1
+2166 2216 1
+2167 2216 1
+2171 2216 1
+2172 2216 1
+2173 2216 1
+2174 2216 1
+2208 2216 1
+2209 2216 1
+2210 2216 1
+2254 2216 1
+2255 2216 1
+2310 2216 1
+2455 2216 32761
+2456 2216 32761
+2464 2216 32761
+2473 2216 32761
+2483 2216 32761
+2494 2216 32761
+2505 2216 1
+2506 2216 24573
+4727 2216 27852657
+2165 2217 1
+2166 2217 1
+2167 2217 1
+2172 2217 1
+2173 2217 1
+2174 2217 1
+2216 2217 65520
+2217 2217 65520
+2218 2217 65520
+2271 2217 1
+2272 2217 1
+2308 2217 30031
+2319 2217 48674
+2320 2217 48674
+2321 2217 48674
+2324 2217 35491
+2327 2217 1
+2328 2217 48674
+2329 2217 48674
+2330 2217 31827
+2331 2217 48674
+2334 2217 35491
+2338 2217 48674
+2339 2217 48674
+2340 2217 31827
+2341 2217 31827
+2342 2217 48674
+2368 2217 20475
+2374 2217 30031
+2375 2217 50506
+2377 2217 24337
+2378 2217 24337
+2383 2217 20475
+2385 2217 7490
+2386 2217 31827
+2387 2217 7490
+2390 2217 40951
+2392 2217 39585
+2394 2217 7490
+2395 2217 14980
+2396 2217 63654
+2397 2217 56164
+2400 2217 10920
+2401 2217 20474
+2404 2217 14980
+2405 2217 22470
+2406 2217 54297
+2407 2217 37450
+2408 2217 46807
+2411 2217 40950
+2412 2217 20474
+2413 2217 40949
+2415 2217 31827
+2416 2217 39317
+2417 2217 22470
+2418 2217 5623
+2419 2217 13113
+2420 2217 14980
+2445 2217 59890
+2446 2217 35831
+2447 2217 35831
+2451 2217 8873
+2452 2217 16210
+2453 2217 57672
+2454 2217 57672
+2455 2217 31358
+2456 2217 31358
+2460 2217 28040
+2461 2217 3981
+2462 2217 3981
+2463 2217 58506
+2464 2217 16154
+2465 2217 50317
+2468 2217 17403
+2470 2217 7166
+2471 2217 7166
+2472 2217 58506
+2473 2217 37918
+2474 2217 24117
+2475 2217 39321
+2478 2217 48116
+2479 2217 62618
+2481 2217 46752
+2482 2217 35108
+2483 2217 14520
+2484 2217 3292
+2485 2217 33245
+2486 2217 59445
+2489 2217 18939
+2490 2217 8701
+2491 2217 35832
+2493 2217 14516
+2494 2217 21071
+2495 2217 9843
+2496 2217 4224
+2497 2217 5159
+2498 2217 11235
+2501 2217 256
+2502 2217 5375
+2503 2217 5631
+2504 2217 5631
+2505 2217 5618
+2506 2217 17139
+2507 2217 52293
+2508 2217 48811
+2509 2217 39815
+2510 2217 40755
+2511 2217 29434
+4728 2217 27852657
+2166 2218 1
+2173 2218 1
+2217 2218 65520
+2271 2218 1
+2375 2218 20185
+2383 2218 2514
+2390 2218 14338
+2392 2218 53369
+2395 2218 42459
+2396 2218 42459
+2397 2218 42459
+2398 2218 7268
+2399 2218 7268
+2400 2218 21606
+2401 2218 21606
+2404 2218 13100
+2405 2218 52842
+2406 2218 52842
+2407 2218 29780
+2408 2218 52842
+2409 2218 7268
+2410 2218 7268
+2411 2218 21606
+2412 2218 21606
+2413 2218 24122
+2415 2218 13100
+2416 2218 52842
+2417 2218 52842
+2418 2218 29780
+2419 2218 40163
+2420 2218 52842
+2446 2218 36849
+2447 2218 55489
+2451 2218 12548
+2452 2218 12548
+2453 2218 53492
+2454 2218 62885
+2455 2218 28080
+2456 2218 28080
+2457 2218 11102
+2458 2218 11102
+2460 2218 29896
+2461 2218 43919
+2462 2218 26731
+2463 2218 20754
+2464 2218 53698
+2465 2218 25618
+2466 2218 3712
+2467 2218 3712
+2468 2218 10631
+2470 2218 36353
+2471 2218 42819
+2472 2218 6440
+2473 2218 58531
+2474 2218 27566
+2475 2218 1948
+2476 2218 49395
+2477 2218 49395
+2478 2218 56314
+2479 2218 56314
+2481 2218 18945
+2482 2218 19519
+2483 2218 35251
+2484 2218 60078
+2485 2218 45298
+2486 2218 43350
+2487 2218 8299
+2488 2218 8299
+2489 2218 15343
+2490 2218 15343
+2491 2218 9807
+2493 2218 60488
+2494 2218 35904
+2495 2218 39504
+2496 2218 50726
+2497 2218 25432
+2498 2218 47603
+2499 2218 48596
+2500 2218 48596
+2501 2218 59537
+2502 2218 59537
+2503 2218 55261
+2504 2218 65110
+2505 2218 58869
+2506 2218 39101
+2507 2218 53024
+2508 2218 30058
+2509 2218 36066
+2510 2218 17353
+2511 2218 16157
+4729 2218 27852657
+2167 2219 1
+2174 2219 1
+2218 2219 65520
+2272 2219 1
+2337 2219 65520
+2392 2219 21389
+2395 2219 28284
+2396 2219 28284
+2397 2219 28284
+2398 2219 11510
+2399 2219 11510
+2400 2219 11510
+2401 2219 11510
+2404 2219 56660
+2405 2219 45147
+2406 2219 45147
+2407 2219 7910
+2408 2219 45147
+2409 2219 11510
+2410 2219 11510
+2411 2219 11510
+2412 2219 11510
+2413 2219 11510
+2415 2219 56660
+2416 2219 45147
+2417 2219 45147
+2418 2219 7910
+2419 2219 24773
+2420 2219 45147
+2447 2219 21842
+2451 2219 53137
+2452 2219 53137
+2453 2219 53137
+2454 2219 40771
+2455 2219 1076
+2456 2219 1076
+2457 2219 9850
+2458 2219 9850
+2460 2219 21733
+2461 2219 21733
+2462 2219 54135
+2463 2219 8414
+2464 2219 26240
+2465 2219 25164
+2466 2219 62177
+2467 2219 62177
+2468 2219 62177
+2470 2219 33910
+2471 2219 16617
+2472 2219 3866
+2473 2219 10964
+2474 2219 35411
+2475 2219 10247
+2476 2219 17979
+2477 2219 17979
+2478 2219 17979
+2479 2219 17979
+2481 2219 60666
+2482 2219 16221
+2483 2219 24134
+2484 2219 45880
+2485 2219 61227
+2486 2219 50980
+2487 2219 38924
+2488 2219 38924
+2489 2219 38924
+2490 2219 38924
+2491 2219 38924
+2493 2219 63178
+2494 2219 38355
+2495 2219 56441
+2496 2219 8285
+2497 2219 33282
+2498 2219 47823
+2499 2219 8196
+2500 2219 8196
+2501 2219 8196
+2502 2219 8196
+2503 2219 8196
+2504 2219 26396
+2505 2219 36642
+2506 2219 45944
+2507 2219 18919
+2508 2219 38980
+2509 2219 26601
+2510 2219 33991
+2511 2219 50811
+4730 2219 27852657
+2168 2220 1
+2176 2220 65520
+2212 2220 25814
+2221 2220 39706
+2249 2220 174
+2257 2220 48597
+2266 2220 2815
+2274 2220 34895
+2275 2220 40384
+2276 2220 11754
+2304 2220 106
+2312 2220 48665
+2321 2220 54694
+2331 2220 38483
+2337 2220 36780
+2338 2220 45878
+2339 2220 10983
+2340 2220 38668
+2341 2220 60904
+2342 2220 34175
+2370 2220 17673
+2378 2220 56986
+2387 2220 48356
+2397 2220 49461
+2408 2220 58949
+2416 2220 30044
+2417 2220 16142
+2418 2220 32871
+2419 2220 19791
+2420 2220 60538
+2448 2220 8600
+2455 2220 52285
+2456 2220 13482
+2457 2220 56127
+2458 2220 56127
+2460 2220 4015
+2461 2220 4015
+2462 2220 4015
+2463 2220 12281
+2464 2220 59574
+2465 2220 29216
+2466 2220 2506
+2467 2220 2506
+2468 2220 2506
+2470 2220 55185
+2471 2220 55185
+2472 2220 13073
+2473 2220 18446
+2474 2220 64136
+2475 2220 64061
+2476 2220 64500
+2477 2220 64500
+2478 2220 64500
+2479 2220 64500
+2481 2220 21373
+2482 2220 34855
+2483 2220 7746
+2484 2220 16461
+2485 2220 61423
+2486 2220 6137
+2487 2220 21878
+2488 2220 21878
+2489 2220 21878
+2490 2220 21878
+2491 2220 21878
+2493 2220 51653
+2494 2220 14199
+2495 2220 35775
+2496 2220 50617
+2497 2220 33153
+2498 2220 18682
+2499 2220 47516
+2500 2220 47516
+2501 2220 47516
+2502 2220 47516
+2503 2220 47516
+2504 2220 47516
+2505 2220 42303
+2506 2220 53184
+2507 2220 52447
+2508 2220 26124
+2509 2220 3065
+2510 2220 8997
+2511 2220 41986
+4731 2220 27852657
+2169 2221 1
+2205 2221 1
+2206 2221 1
+2250 2221 1
+2251 2221 1
+2252 2221 1
+2305 2221 1
+2306 2221 1
+2307 2221 1
+2308 2221 1
+2371 2221 1
+2372 2221 1
+2373 2221 1
+2374 2221 1
+2375 2221 1
+2449 2221 32761
+2450 2221 32761
+2451 2221 32761
+2452 2221 32761
+2453 2221 32761
+2454 2221 32761
+2506 2221 24573
+4732 2221 27852657
+2170 2222 1
+2506 2222 65520
+4733 2222 27852657
+2171 2223 1
+2172 2223 1
+2173 2223 1
+2212 2223 39112
+2221 2223 26409
+2257 2223 18065
+2266 2223 50631
+2274 2223 12209
+2275 2223 23695
+2276 2223 64994
+2312 2223 18065
+2321 2223 29937
+2331 2223 2151
+2337 2223 61001
+2338 2223 49039
+2339 2223 36830
+2340 2223 1456
+2341 2223 57710
+2342 2223 55032
+2378 2223 64660
+2387 2223 64625
+2397 2223 55994
+2408 2223 58388
+2416 2223 13112
+2417 2223 48135
+2418 2223 43950
+2419 2223 6927
+2420 2223 3571
+2454 2223 31718
+2455 2223 41530
+2456 2223 26738
+2457 2223 6933
+2458 2223 6933
+2460 2223 49317
+2461 2223 49317
+2462 2223 40025
+2463 2223 12050
+2464 2223 4102
+2465 2223 13534
+2466 2223 35061
+2467 2223 35061
+2468 2223 35061
+2470 2223 40187
+2471 2223 24831
+2472 2223 59044
+2473 2223 6564
+2474 2223 54488
+2475 2223 18133
+2476 2223 35732
+2477 2223 35732
+2478 2223 35732
+2479 2223 35732
+2481 2223 2136
+2482 2223 38290
+2483 2223 19917
+2484 2223 58462
+2485 2223 8819
+2486 2223 51554
+2487 2223 43432
+2488 2223 43432
+2489 2223 43432
+2490 2223 43432
+2491 2223 43432
+2493 2223 15430
+2494 2223 17035
+2495 2223 23508
+2496 2223 16204
+2497 2223 18614
+2498 2223 4128
+2499 2223 1159
+2500 2223 1159
+2501 2223 1159
+2502 2223 1159
+2503 2223 1159
+2504 2223 1159
+2505 2223 15070
+2506 2223 24444
+2507 2223 41295
+2508 2223 11049
+2509 2223 16371
+2510 2223 43372
+2511 2223 19751
+4734 2223 27852657
+2172 2224 1
+2257 2224 53696
+2266 2224 56319
+2274 2224 29992
+2275 2224 55032
+2276 2224 64234
+2312 2224 40387
+2321 2224 9894
+2331 2224 19956
+2338 2224 19411
+2339 2224 41046
+2340 2224 50716
+2341 2224 4144
+2342 2224 48422
+2378 2224 49468
+2387 2224 18098
+2397 2224 52392
+2408 2224 27416
+2417 2224 57582
+2418 2224 32856
+2419 2224 9947
+2420 2224 30953
+2446 2224 60295
+2452 2224 55144
+2453 2224 27352
+2454 2224 22746
+2455 2224 11115
+2456 2224 60667
+2457 2224 45657
+2458 2224 46543
+2460 2224 4381
+2461 2224 46699
+2462 2224 7949
+2463 2224 16240
+2464 2224 23510
+2465 2224 58609
+2466 2224 60379
+2467 2224 9775
+2468 2224 9775
+2470 2224 36276
+2471 2224 16890
+2472 2224 59726
+2473 2224 18418
+2474 2224 28237
+2475 2224 35078
+2476 2224 41569
+2477 2224 6112
+2478 2224 6112
+2479 2224 13899
+2481 2224 53893
+2482 2224 59826
+2483 2224 17273
+2484 2224 40150
+2485 2224 50053
+2486 2224 38679
+2487 2224 52977
+2488 2224 59995
+2489 2224 59995
+2490 2224 30176
+2491 2224 26643
+2493 2224 5833
+2494 2224 49812
+2495 2224 52336
+2496 2224 32276
+2497 2224 26980
+2498 2224 19360
+2499 2224 16012
+2500 2224 48967
+2501 2224 48967
+2502 2224 54282
+2503 2224 11691
+2504 2224 43009
+2505 2224 10524
+2506 2224 64391
+2507 2224 15403
+2508 2224 20355
+2509 2224 62671
+2510 2224 23934
+2511 2224 53866
+4735 2224 27852657
+2173 2225 1
+2257 2225 31297
+2266 2225 24706
+2274 2225 7915
+2275 2225 60674
+2276 2225 35968
+2312 2225 58147
+2321 2225 25199
+2331 2225 37141
+2338 2225 2043
+2339 2225 26774
+2340 2225 55059
+2341 2225 47831
+2342 2225 46658
+2378 2225 285
+2387 2225 16939
+2397 2225 53889
+2408 2225 32237
+2417 2225 547
+2418 2225 5921
+2419 2225 62893
+2420 2225 11793
+2446 2225 38973
+2453 2225 27290
+2454 2225 59243
+2455 2225 64740
+2456 2225 15199
+2457 2225 49296
+2458 2225 56265
+2460 2225 26992
+2461 2225 1811
+2462 2225 51482
+2463 2225 55438
+2464 2225 41260
+2465 2225 64516
+2466 2225 24016
+2467 2225 14078
+2468 2225 14078
+2470 2225 53625
+2471 2225 34407
+2472 2225 31338
+2473 2225 65247
+2474 2225 28114
+2475 2225 23571
+2476 2225 41362
+2477 2225 12794
+2478 2225 12794
+2479 2225 12794
+2481 2225 44026
+2482 2225 64155
+2483 2225 17202
+2484 2225 60743
+2485 2225 22902
+2486 2225 46518
+2487 2225 56637
+2488 2225 21026
+2489 2225 21026
+2490 2225 21026
+2491 2225 32910
+2493 2225 42548
+2494 2225 55098
+2495 2225 24461
+2496 2225 54115
+2497 2225 10166
+2498 2225 21567
+2499 2225 5068
+2500 2225 21647
+2501 2225 21647
+2502 2225 21647
+2503 2225 52446
+2504 2225 19333
+2505 2225 17961
+2506 2225 1072
+2507 2225 10805
+2508 2225 986
+2509 2225 33937
+2510 2225 63163
+2511 2225 11486
+4736 2225 27852657
+2174 2226 1
+2212 2226 25422
+2221 2226 40099
+2257 2226 19231
+2266 2226 45046
+2274 2226 40359
+2275 2226 56914
+2276 2226 51967
+2312 2226 19231
+2321 2226 13529
+2331 2226 54886
+2337 2226 26258
+2338 2226 28062
+2339 2226 53224
+2340 2226 27227
+2341 2226 37668
+2342 2226 34749
+2378 2226 61933
+2387 2226 40722
+2397 2226 56305
+2408 2226 4764
+2416 2226 57426
+2417 2226 51354
+2418 2226 25609
+2419 2226 39735
+2420 2226 4199
+2454 2226 33803
+2455 2226 45768
+2456 2226 46477
+2457 2226 46507
+2458 2226 46507
+2460 2226 21015
+2461 2226 21015
+2462 2226 30307
+2463 2226 15669
+2464 2226 19254
+2465 2226 39201
+2466 2226 3217
+2467 2226 3217
+2468 2226 3217
+2470 2226 14556
+2471 2226 29912
+2472 2226 40685
+2473 2226 36539
+2474 2226 43628
+2475 2226 18455
+2476 2226 47817
+2477 2226 47817
+2478 2226 47817
+2479 2226 47817
+2481 2226 51346
+2482 2226 58266
+2483 2226 58646
+2484 2226 14046
+2485 2226 9426
+2486 2226 20658
+2487 2226 51564
+2488 2226 51564
+2489 2226 51564
+2490 2226 51564
+2491 2226 51564
+2493 2226 62812
+2494 2226 55074
+2495 2226 23903
+2496 2226 48824
+2497 2226 39560
+2498 2226 24219
+2499 2226 59167
+2500 2226 59167
+2501 2226 59167
+2502 2226 59167
+2503 2226 59167
+2504 2226 59167
+2505 2226 61666
+2506 2226 46411
+2507 2226 44944
+2508 2226 50567
+2509 2226 28842
+2510 2226 57884
+2511 2226 38063
+4737 2226 27852657
+2175 2227 1
+2176 2227 1
+2212 2227 52614
+2221 2227 12908
+2257 2227 8375
+2266 2227 22302
+2274 2227 3211
+2275 2227 28851
+2276 2227 19457
+2312 2227 8375
+2321 2227 3673
+2331 2227 11394
+2337 2227 31908
+2338 2227 18031
+2339 2227 14820
+2340 2227 28606
+2341 2227 21710
+2342 2227 29773
+2378 2227 60952
+2387 2227 60925
+2397 2227 45598
+2408 2227 15387
+2416 2227 44262
+2417 2227 25788
+2418 2227 63250
+2419 2227 40254
+2420 2227 54640
+2455 2227 57144
+2456 2227 39485
+2457 2227 37898
+2458 2227 37898
+2460 2227 16172
+2461 2227 16172
+2462 2227 16172
+2463 2227 32528
+2464 2227 32100
+2465 2227 10243
+2466 2227 49357
+2467 2227 49357
+2468 2227 49357
+2470 2227 35844
+2471 2227 35844
+2472 2227 54643
+2473 2227 7389
+2474 2227 39607
+2475 2227 35292
+2476 2227 46693
+2477 2227 46693
+2478 2227 46693
+2479 2227 46693
+2481 2227 7396
+2482 2227 53283
+2483 2227 65095
+2484 2227 51787
+2485 2227 51563
+2486 2227 50936
+2487 2227 30086
+2488 2227 30086
+2489 2227 30086
+2490 2227 30086
+2491 2227 30086
+2493 2227 64190
+2494 2227 21515
+2495 2227 42370
+2496 2227 47556
+2497 2227 1859
+2498 2227 41296
+2499 2227 1355
+2500 2227 1355
+2501 2227 1355
+2502 2227 1355
+2503 2227 1355
+2504 2227 1355
+2505 2227 41719
+2506 2227 41437
+2507 2227 64993
+2508 2227 54008
+2509 2227 56266
+2510 2227 10091
+2511 2227 24686
+4738 2227 27852657
+2177 2228 1
+2179 2228 65520
+2222 2228 28369
+2224 2228 37152
+2227 2228 28369
+2277 2228 39147
+2279 2228 26374
+2282 2228 39147
+2286 2228 26374
+2343 2228 57002
+2345 2228 8519
+2348 2228 57002
+2352 2228 8519
+2357 2228 57002
+2421 2228 44381
+2423 2228 21140
+2426 2228 44381
+2429 2228 33883
+2430 2228 55023
+2433 2228 36533
+2434 2228 30460
+2435 2228 40958
+2440 2228 49145
+2441 2228 8187
+2446 2228 56848
+2452 2228 57124
+2453 2228 21902
+2454 2228 43022
+2455 2228 45563
+2456 2228 45563
+2457 2228 10841
+2458 2228 9421
+2460 2228 17427
+2461 2228 62059
+2462 2228 27265
+2463 2228 37058
+2464 2228 61798
+2465 2228 16235
+2466 2228 23169
+2467 2228 4803
+2468 2228 24324
+2470 2228 16037
+2471 2228 18179
+2472 2228 44035
+2473 2228 41268
+2474 2228 4270
+2475 2228 53556
+2476 2228 53465
+2477 2228 57014
+2478 2228 61581
+2479 2228 19298
+2481 2228 51585
+2482 2228 44920
+2483 2228 26890
+2484 2228 25582
+2485 2228 20157
+2486 2228 32122
+2487 2228 33304
+2488 2228 48194
+2489 2228 22653
+2490 2228 11530
+2491 2228 37010
+2493 2228 17196
+2494 2228 64556
+2495 2228 213
+2496 2228 11480
+2497 2228 33582
+2498 2228 1460
+2499 2228 6042
+2500 2228 28259
+2501 2228 63087
+2502 2228 16783
+2503 2228 32581
+2504 2228 8908
+2505 2228 10585
+2506 2228 16234
+2507 2228 34586
+2508 2228 10746
+2509 2228 39902
+2510 2228 65279
+2511 2228 5350
+4739 2228 27852657
+2178 2229 1
+2179 2229 1
+2223 2229 1
+2224 2229 1
+2226 2229 1
+2278 2229 1
+2279 2229 1
+2281 2229 1
+2284 2229 1
+2344 2229 1
+2345 2229 1
+2347 2229 1
+2350 2229 1
+2354 2229 1
+2422 2229 32761
+2423 2229 32761
+2425 2229 32761
+2428 2229 32761
+2432 2229 32761
+2437 2229 32761
+2499 2229 1
+2500 2229 24573
+4740 2229 27852657
+2179 2230 1
+2224 2230 56146
+2227 2230 9375
+2279 2230 63928
+2282 2230 1593
+2286 2230 63928
+2345 2230 9030
+2348 2230 56491
+2352 2230 9030
+2357 2230 56491
+2423 2230 58237
+2426 2230 7284
+2429 2230 31213
+2430 2230 23929
+2433 2230 47392
+2434 2230 62633
+2435 2230 38704
+2440 2230 54410
+2441 2230 15706
+2446 2230 26128
+2452 2230 62336
+2453 2230 34779
+2454 2230 14093
+2455 2230 58428
+2456 2230 58428
+2457 2230 37233
+2458 2230 15590
+2460 2230 8164
+2461 2230 21818
+2462 2230 11569
+2463 2230 53512
+2464 2230 38556
+2465 2230 45649
+2466 2230 21741
+2467 2230 37580
+2468 2230 33162
+2470 2230 36129
+2471 2230 56117
+2472 2230 10666
+2473 2230 51015
+2474 2230 24626
+2475 2230 44498
+2476 2230 13177
+2477 2230 47115
+2478 2230 7801
+2479 2230 57248
+2481 2230 7031
+2482 2230 49182
+2483 2230 3749
+2484 2230 58450
+2485 2230 32084
+2486 2230 53107
+2487 2230 16583
+2488 2230 46439
+2489 2230 19464
+2490 2230 42557
+2491 2230 45494
+2493 2230 11627
+2494 2230 20219
+2495 2230 10767
+2496 2230 22992
+2497 2230 61081
+2498 2230 7974
+2499 2230 36068
+2500 2230 14107
+2501 2230 28657
+2502 2230 20415
+2503 2230 31919
+2504 2230 44816
+2505 2230 45373
+2506 2230 27220
+2507 2230 703
+2508 2230 6707
+2509 2230 49963
+2510 2230 57247
+2511 2230 4303
+4741 2230 27852657
+2180 2231 1
+2185 2231 60923
+2186 2231 60923
+2189 2231 29929
+2190 2231 51105
+2191 2231 55703
+2196 2231 37451
+2197 2231 47269
+2202 2231 10361
+2208 2231 51674
+2209 2231 31279
+2210 2231 60743
+2211 2231 21644
+2212 2231 21644
+2213 2231 32741
+2214 2231 47623
+2216 2231 23122
+2217 2231 60807
+2218 2231 25749
+2219 2231 36260
+2220 2231 60117
+2221 2231 38473
+2258 2231 21791
+2259 2231 26392
+2260 2231 42274
+2262 2231 41254
+2263 2231 41651
+2264 2231 14578
+2265 2231 44626
+2266 2231 6012
+2275 2231 33060
+2313 2231 49951
+2314 2231 19609
+2315 2231 46154
+2316 2231 34371
+2318 2231 48647
+2319 2231 9484
+2320 2231 65007
+2321 2231 55181
+2330 2231 21246
+2340 2231 53707
+2379 2231 63450
+2380 2231 44858
+2381 2231 37076
+2382 2231 25049
+2383 2231 31546
+2385 2231 162
+2386 2231 27692
+2387 2231 7912
+2396 2231 10833
+2406 2231 40924
+2417 2231 52738
+2457 2231 10849
+2458 2231 63843
+2459 2231 18897
+2460 2231 9117
+2461 2231 30962
+2462 2231 37207
+2463 2231 6483
+2464 2231 19196
+2465 2231 59686
+2474 2231 55273
+2484 2231 52639
+2495 2231 63657
+2507 2231 48682
+4742 2231 27852657
+2181 2232 1
+2182 2232 1
+2185 2232 17
+2186 2232 16
+2189 2232 46548
+2190 2232 46490
+2191 2232 46474
+2196 2232 29885
+2197 2232 48932
+2202 2232 65409
+2208 2232 55164
+2209 2232 48008
+2210 2232 24285
+2211 2232 33766
+2212 2232 33766
+2213 2232 57514
+2214 2232 51777
+2216 2232 52527
+2217 2232 38943
+2218 2232 52902
+2219 2232 11676
+2220 2232 53262
+2221 2232 19496
+2258 2232 59357
+2259 2232 21849
+2260 2232 46971
+2262 2232 62659
+2263 2232 15826
+2264 2232 56656
+2265 2232 49636
+2266 2232 41680
+2275 2232 22184
+2313 2232 14291
+2314 2232 22310
+2315 2232 10633
+2316 2232 8922
+2318 2232 30804
+2319 2232 8261
+2320 2232 33371
+2321 2232 60129
+2330 2232 21199
+2340 2232 64536
+2379 2232 15794
+2380 2232 57276
+2381 2232 28436
+2382 2232 22054
+2383 2232 48503
+2385 2232 20262
+2386 2232 16692
+2387 2232 5209
+2396 2232 5612
+2406 2232 64150
+2417 2232 65135
+2457 2232 11169
+2458 2232 46373
+2459 2232 8068
+2460 2232 22517
+2461 2232 27670
+2462 2232 44575
+2463 2232 1160
+2464 2232 52260
+2465 2232 57031
+2474 2232 50066
+2484 2232 12125
+2495 2232 57004
+2507 2232 10435
+4743 2232 27852657
+2182 2233 1
+2501 2233 65520
+4744 2233 27852657
+2183 2234 1
+2186 2234 1
+2187 2234 1
+2191 2234 65520
+2192 2234 1
+2196 2234 47654
+2197 2234 47655
+2233 2234 65520
+2236 2234 65519
+2238 2234 65520
+2242 2234 2
+2294 2234 1
+2297 2234 3
+2314 2234 65520
+2323 2234 65520
+2324 2234 65517
+2333 2234 65520
+2334 2234 65517
+2335 2234 65517
+2368 2234 23827
+2375 2234 23827
+2383 2234 23827
+2390 2234 27792
+2392 2234 44675
+2399 2234 65520
+2400 2234 33751
+2401 2234 44669
+2411 2234 33755
+2412 2234 44673
+2413 2234 2979
+2446 2234 46909
+2447 2234 11920
+2453 2234 46909
+2454 2234 11920
+2457 2234 8195
+2458 2234 32772
+2460 2234 3726
+2461 2234 5
+2462 2234 13411
+2466 2234 12289
+2467 2234 36866
+2468 2234 12547
+2470 2234 62918
+2471 2234 55478
+2476 2234 12289
+2477 2234 11
+2478 2234 30789
+2479 2234 41696
+2481 2234 64040
+2487 2234 40961
+2488 2234 36872
+2489 2234 5851
+2490 2234 50893
+2491 2234 35251
+2499 2234 3
+2500 2234 16385
+2501 2234 27554
+2502 2234 45300
+2503 2234 53116
+2504 2234 59822
+2505 2234 23827
+2506 2234 23827
+2507 2234 27549
+2508 2234 52306
+2509 2234 42064
+2510 2234 41882
+2511 2234 4657
+4745 2234 27852657
+2184 2235 1
+2188 2235 1
+2193 2235 1
+2233 2235 1
+2234 2235 1
+2238 2235 1
+2239 2235 1
+2293 2235 1
+2294 2235 1
+2295 2235 1
+2458 2235 32761
+2467 2235 32761
+2468 2235 32761
+2477 2235 32761
+2478 2235 32761
+2479 2235 32761
+2488 2235 32761
+2489 2235 32761
+2490 2235 32761
+2491 2235 32761
+2500 2235 24572
+2501 2235 24572
+2502 2235 24572
+2503 2235 24572
+2504 2235 24572
+2511 2235 4096
+4746 2235 27852657
+2185 2236 1
+2502 2236 65520
+4747 2236 27852657
+2186 2237 1
+2191 2237 65520
+2197 2237 1
+2375 2237 644
+2383 2237 13571
+2389 2237 54280
+2390 2237 39051
+2392 2237 51717
+2395 2237 16766
+2396 2237 16766
+2397 2237 16766
+2398 2237 36501
+2399 2237 5328
+2400 2237 55620
+2401 2237 61274
+2404 2237 47722
+2405 2237 45994
+2406 2237 45994
+2407 2237 62760
+2408 2237 45994
+2409 2237 36501
+2410 2237 5328
+2411 2237 55620
+2412 2237 61274
+2413 2237 26550
+2415 2237 47722
+2416 2237 45994
+2417 2237 45994
+2418 2237 62760
+2419 2237 26467
+2420 2237 45994
+2431 2237 41252
+2432 2237 41252
+2433 2237 41252
+2434 2237 41252
+2435 2237 41252
+2436 2237 41252
+2440 2237 41252
+2446 2237 9774
+2447 2237 14405
+2451 2237 50682
+2452 2237 50682
+2453 2237 60456
+2454 2237 18047
+2455 2237 53752
+2456 2237 53752
+2457 2237 22725
+2458 2237 62912
+2460 2237 34417
+2461 2237 49042
+2462 2237 65262
+2463 2237 61800
+2464 2237 61707
+2465 2237 7955
+2466 2237 12597
+2467 2237 48852
+2468 2237 32295
+2470 2237 54739
+2471 2237 33300
+2472 2237 56015
+2473 2237 20207
+2474 2237 20178
+2475 2237 12223
+2476 2237 36917
+2477 2237 7651
+2478 2237 56615
+2479 2237 25018
+2481 2237 6553
+2482 2237 14742
+2483 2237 22927
+2484 2237 1613
+2485 2237 23904
+2486 2237 11681
+2487 2237 16525
+2488 2237 27931
+2489 2237 64986
+2490 2237 25033
+2491 2237 24622
+2493 2237 51662
+2494 2237 29699
+2495 2237 17627
+2496 2237 41579
+2497 2237 53206
+2498 2237 41525
+2499 2237 19763
+2500 2237 45652
+2501 2237 32747
+2502 2237 32748
+2503 2237 24651
+2504 2237 47353
+2505 2237 45437
+2506 2237 11603
+2507 2237 49649
+2508 2237 49015
+2509 2237 12636
+2510 2237 3371
+2511 2237 4566
+4748 2237 27852657
+2187 2238 1
+2297 2238 31311
+2355 2238 25638
+2356 2238 30561
+2357 2238 30561
+2375 2238 43354
+2383 2238 14596
+2389 2238 12311
+2390 2238 45426
+2392 2238 57655
+2395 2238 53350
+2396 2238 53350
+2397 2238 53350
+2398 2238 62852
+2399 2238 1327
+2400 2238 44073
+2401 2238 47911
+2404 2238 13547
+2405 2238 4051
+2406 2238 4051
+2407 2238 57401
+2408 2238 4051
+2409 2238 62852
+2410 2238 1327
+2411 2238 44073
+2412 2238 47911
+2413 2238 44499
+2415 2238 13547
+2416 2238 4051
+2417 2238 4051
+2418 2238 57401
+2419 2238 8102
+2420 2238 4051
+2422 2238 53402
+2423 2238 53402
+2424 2238 30691
+2425 2238 3264
+2426 2238 15383
+2427 2238 50375
+2428 2238 1562
+2429 2238 63053
+2430 2238 47670
+2431 2238 2380
+2432 2238 7102
+2433 2238 57271
+2434 2238 26180
+2435 2238 44031
+2436 2238 39446
+2437 2238 61694
+2438 2238 7757
+2439 2238 31183
+2440 2238 44107
+2441 2238 76
+2444 2238 43531
+2445 2238 56652
+2446 2238 12990
+2447 2238 1767
+2451 2238 61505
+2452 2238 9105
+2453 2238 30964
+2454 2238 57799
+2455 2238 40785
+2456 2238 40785
+2457 2238 5870
+2458 2238 41321
+2460 2238 21550
+2461 2238 63071
+2462 2238 43148
+2463 2238 46855
+2464 2238 8693
+2465 2238 33429
+2466 2238 43423
+2467 2238 46629
+2468 2238 24121
+2470 2238 38225
+2471 2238 14259
+2472 2238 30684
+2473 2238 3201
+2474 2238 29105
+2475 2238 61197
+2476 2238 43890
+2477 2238 39822
+2478 2238 26169
+2479 2238 43675
+2481 2238 8346
+2482 2238 46445
+2483 2238 23578
+2484 2238 59863
+2485 2238 52292
+2486 2238 56616
+2487 2238 27221
+2488 2238 20697
+2489 2238 52112
+2490 2238 27937
+2491 2238 18177
+2493 2238 60888
+2494 2238 46689
+2495 2238 34297
+2496 2238 6
+2497 2238 10337
+2498 2238 19242
+2499 2238 53437
+2500 2238 35495
+2501 2238 17487
+2502 2238 1928
+2503 2238 12312
+2504 2238 43061
+2505 2238 6635
+2506 2238 11244
+2507 2238 24047
+2508 2238 12095
+2509 2238 6444
+2510 2238 31300
+2511 2238 58721
+4749 2238 27852657
+2188 2239 1
+2297 2239 22521
+2355 2239 9527
+2356 2239 48720
+2357 2239 48720
+2375 2239 40517
+2383 2239 581
+2389 2239 41969
+2390 2239 48093
+2392 2239 1891
+2395 2239 18276
+2396 2239 18276
+2397 2239 18276
+2398 2239 57000
+2399 2239 5969
+2400 2239 15963
+2401 2239 48901
+2404 2239 58981
+2405 2239 508
+2406 2239 508
+2407 2239 18784
+2408 2239 508
+2409 2239 57000
+2410 2239 5969
+2411 2239 15963
+2412 2239 48901
+2413 2239 21452
+2415 2239 58981
+2416 2239 508
+2417 2239 508
+2418 2239 18784
+2419 2239 1016
+2420 2239 508
+2422 2239 33819
+2423 2239 33819
+2424 2239 42643
+2425 2239 13290
+2426 2239 44992
+2427 2239 10641
+2428 2239 32777
+2429 2239 18309
+2430 2239 38838
+2431 2239 10641
+2432 2239 44763
+2433 2239 56658
+2434 2239 31558
+2435 2239 58241
+2436 2239 43963
+2437 2239 19307
+2438 2239 43719
+2439 2239 38774
+2440 2239 16390
+2441 2239 23670
+2444 2239 64249
+2445 2239 16703
+2446 2239 34557
+2447 2239 63343
+2451 2239 14368
+2452 2239 32343
+2453 2239 50197
+2454 2239 63503
+2455 2239 45060
+2456 2239 45060
+2457 2239 12409
+2458 2239 16064
+2460 2239 37046
+2461 2239 19552
+2462 2239 11993
+2463 2239 51070
+2464 2239 64448
+2465 2239 19388
+2466 2239 5604
+2467 2239 37572
+2468 2239 28559
+2470 2239 39963
+2471 2239 44933
+2472 2239 13230
+2473 2239 8166
+2474 2239 2416
+2475 2239 48549
+2476 2239 64275
+2477 2239 64883
+2478 2239 21283
+2479 2239 57427
+2481 2239 24151
+2482 2239 39511
+2483 2239 694
+2484 2239 1582
+2485 2239 62946
+2486 2239 14397
+2487 2239 39922
+2488 2239 24616
+2489 2239 24347
+2490 2239 45100
+2491 2239 29450
+2493 2239 35363
+2494 2239 19077
+2495 2239 19166
+2496 2239 44229
+2497 2239 32211
+2498 2239 17814
+2499 2239 1025
+2500 2239 6513
+2501 2239 49960
+2502 2239 56773
+2503 2239 46474
+2504 2239 4422
+2505 2239 1080
+2506 2239 64024
+2507 2239 61210
+2508 2239 33827
+2509 2239 2166
+2510 2239 15093
+2511 2239 15890
+4750 2239 27852657
+2189 2240 1
+2503 2240 65520
+4751 2240 27852657
+2190 2241 1
+2191 2241 1
+2196 2241 41694
+2197 2241 41693
+2236 2241 1
+2242 2241 65520
+2297 2241 65520
+2324 2241 32773
+2334 2241 32773
+2335 2241 32773
+2368 2241 53606
+2375 2241 53606
+2383 2241 53606
+2390 2241 29805
+2392 2241 59566
+2400 2241 26812
+2401 2241 26812
+2411 2241 59560
+2412 2241 59560
+2413 2241 47645
+2446 2241 37969
+2447 2241 59552
+2453 2241 37969
+2454 2241 59552
+2460 2241 59561
+2461 2241 57324
+2462 2241 50615
+2468 2241 31264
+2470 2241 48397
+2471 2241 11156
+2478 2241 52857
+2479 2241 52857
+2481 2241 743
+2489 2241 30522
+2490 2241 30522
+2491 2241 50634
+2501 2241 43557
+2502 2241 43557
+2503 2241 53982
+2504 2241 30151
+2505 2241 53606
+2506 2241 53606
+2507 2241 64030
+2508 2241 54724
+2509 2241 11736
+2510 2241 47657
+2511 2241 40841
+4752 2241 27852657
+2192 2242 1
+2297 2242 13187
+2355 2242 31040
+2356 2242 46029
+2357 2242 46029
+2375 2242 27498
+2383 2242 18988
+2389 2242 8626
+2390 2242 7109
+2392 2242 62293
+2395 2242 53263
+2396 2242 53263
+2397 2242 53263
+2398 2242 23057
+2399 2242 51609
+2400 2242 63975
+2401 2242 19029
+2404 2242 19816
+2405 2242 54737
+2406 2242 54737
+2407 2242 42479
+2408 2242 54737
+2409 2242 23057
+2410 2242 51609
+2411 2242 63975
+2412 2242 19029
+2413 2242 56726
+2415 2242 19816
+2416 2242 54737
+2417 2242 54737
+2418 2242 42479
+2419 2242 43953
+2420 2242 54737
+2422 2242 1640
+2423 2242 1640
+2424 2242 41292
+2425 2242 61156
+2426 2242 59516
+2427 2242 32571
+2428 2242 63104
+2429 2242 53614
+2430 2242 59619
+2431 2242 32571
+2432 2242 63104
+2433 2242 44364
+2434 2242 30576
+2435 2242 36478
+2436 2242 56401
+2437 2242 3887
+2438 2242 9808
+2439 2242 61206
+2440 2242 55664
+2441 2242 19186
+2444 2242 56456
+2445 2242 4940
+2446 2242 3742
+2447 2242 28914
+2451 2242 4829
+2452 2242 18834
+2453 2242 17636
+2454 2242 6695
+2455 2242 28110
+2456 2242 28110
+2457 2242 31679
+2458 2242 37575
+2460 2242 8475
+2461 2242 62890
+2462 2242 62464
+2463 2242 56213
+2464 2242 4536
+2465 2242 41947
+2466 2242 43524
+2467 2242 47551
+2468 2242 47509
+2470 2242 20671
+2471 2242 30957
+2472 2242 48018
+2473 2242 60764
+2474 2242 4882
+2475 2242 28456
+2476 2242 38609
+2477 2242 41709
+2478 2242 8864
+2479 2242 39799
+2481 2242 16583
+2482 2242 35872
+2483 2242 48368
+2484 2242 20002
+2485 2242 25834
+2486 2242 62899
+2487 2242 17137
+2488 2242 28371
+2489 2242 23090
+2490 2242 3386
+2491 2242 23117
+2493 2242 14698
+2494 2242 52217
+2495 2242 36269
+2496 2242 57154
+2497 2242 117
+2498 2242 2739
+2499 2242 8764
+2500 2242 29213
+2501 2242 63703
+2502 2242 36894
+2503 2242 25499
+2504 2242 43242
+2505 2242 22367
+2506 2242 15249
+2507 2242 51287
+2508 2242 10400
+2509 2242 2702
+2510 2242 11008
+2511 2242 14836
+4753 2242 27852657
+2193 2243 1
+2238 2243 1
+2239 2243 1
+2293 2243 1
+2294 2243 1
+2437 2243 43681
+2438 2243 43681
+2439 2243 43681
+2440 2243 43681
+2441 2243 43681
+2458 2243 54601
+2467 2243 54601
+2468 2243 54601
+2477 2243 54601
+2478 2243 54601
+2488 2243 54601
+2489 2243 54601
+2500 2243 12286
+2501 2243 12286
+2502 2243 30031
+2503 2243 30031
+2504 2243 42317
+2511 2243 23888
+4754 2243 27852657
+2194 2244 1
+2196 2244 28737
+2197 2244 28737
+2202 2244 24783
+2208 2244 1246
+2209 2244 60874
+2210 2244 18235
+2211 2244 9617
+2212 2244 9617
+2213 2244 54083
+2214 2244 59818
+2216 2244 38845
+2217 2244 23451
+2218 2244 9351
+2219 2244 57101
+2220 2244 50597
+2221 2244 40980
+2258 2244 2324
+2259 2244 29440
+2260 2244 3801
+2262 2244 25568
+2263 2244 25739
+2264 2244 49148
+2265 2244 23779
+2266 2244 24477
+2275 2244 49018
+2313 2244 248
+2314 2244 37333
+2315 2244 15814
+2316 2244 29095
+2318 2244 57418
+2319 2244 7841
+2320 2244 38514
+2321 2244 32343
+2330 2244 52504
+2340 2244 3486
+2379 2244 5412
+2380 2244 30872
+2381 2244 25557
+2382 2244 63615
+2383 2244 52306
+2385 2244 26866
+2386 2244 13029
+2387 2244 18975
+2396 2244 44054
+2406 2244 55846
+2417 2244 52360
+2457 2244 63742
+2458 2244 26879
+2459 2244 46251
+2460 2244 7065
+2461 2244 18675
+2462 2244 14308
+2463 2244 63404
+2464 2244 40439
+2465 2244 47018
+2474 2244 20159
+2484 2244 52300
+2495 2244 12026
+2507 2244 18841
+4755 2244 27852657
+2195 2245 1
+2196 2245 1
+2197 2245 1
+2324 2245 16372
+2334 2245 16372
+2335 2245 16372
+2368 2245 32762
+2375 2245 32762
+2383 2245 32762
+2390 2245 65506
+2392 2245 32759
+2400 2245 16375
+2401 2245 16375
+2411 2245 3
+2412 2245 3
+2413 2245 32765
+2446 2245 36858
+2447 2245 9
+2453 2245 36858
+2454 2245 9
+2460 2245 24572
+2461 2245 61430
+2462 2245 61436
+2468 2245 8195
+2470 2245 28663
+2471 2245 4103
+2478 2245 45050
+2479 2245 45050
+2481 2245 12286
+2489 2245 53239
+2490 2245 53239
+2491 2245 40948
+2501 2245 51188
+2502 2245 51188
+2503 2245 36855
+2504 2245 24573
+2505 2245 32762
+2506 2245 32762
+2507 2245 6144
+2508 2245 59379
+2509 2245 56301
+2510 2245 28662
+2511 2245 3082
+4756 2245 27852657
+2196 2246 1
+2197 2246 1
+2375 2246 61136
+2383 2246 55752
+2390 2246 26622
+2392 2246 60568
+2395 2246 7132
+2396 2246 7132
+2397 2246 7132
+2398 2246 52136
+2399 2246 52136
+2400 2246 13237
+2401 2246 13237
+2404 2246 30661
+2405 2246 54951
+2406 2246 54951
+2407 2246 62083
+2408 2246 54951
+2409 2246 52136
+2410 2246 52136
+2411 2246 13237
+2412 2246 13237
+2413 2246 15752
+2415 2246 30661
+2416 2246 54951
+2417 2246 54951
+2418 2246 62083
+2419 2246 44381
+2420 2246 54951
+2446 2246 56555
+2447 2246 32541
+2451 2246 37637
+2452 2246 37637
+2453 2246 28671
+2454 2246 28004
+2455 2246 64488
+2456 2246 64488
+2457 2246 21803
+2458 2246 21803
+2460 2246 33382
+2461 2246 1080
+2462 2246 3958
+2463 2246 1234
+2464 2246 62887
+2465 2246 63920
+2466 2246 49901
+2467 2246 49901
+2468 2246 44021
+2470 2246 2714
+2471 2246 9436
+2472 2246 29184
+2473 2246 65017
+2474 2246 26505
+2475 2246 28106
+2476 2246 5531
+2477 2246 5531
+2478 2246 65172
+2479 2246 65172
+2481 2246 39797
+2482 2246 16587
+2483 2246 28313
+2484 2246 47099
+2485 2246 7851
+2486 2246 45266
+2487 2246 46663
+2488 2246 46663
+2489 2246 17618
+2490 2246 17618
+2491 2246 34351
+2493 2246 5297
+2494 2246 49515
+2495 2246 35141
+2496 2246 19848
+2497 2246 20072
+2498 2246 40327
+2499 2246 7278
+2500 2246 7278
+2501 2246 58018
+2502 2246 58018
+2503 2246 45936
+2504 2246 17973
+2505 2246 50965
+2506 2246 64086
+2507 2246 8078
+2508 2246 41206
+2509 2246 20008
+2510 2246 44523
+2511 2246 33534
+4757 2246 27852657
+2198 2247 1
+2507 2247 65520
+4758 2247 27852657
+2199 2248 1
+2200 2248 1
+2201 2248 1
+2202 2248 1
+2203 2248 1
+2207 2248 1
+2208 2248 1
+2209 2248 1
+2210 2248 1
+2216 2248 1
+2217 2248 1
+2218 2248 1
+2262 2248 1
+2263 2248 1
+2318 2248 1
+2463 2248 32761
+2464 2248 32761
+2465 2248 32761
+2474 2248 32761
+2484 2248 32761
+2495 2248 32761
+2507 2248 24573
+4759 2248 27852657
+2200 2249 1
+2202 2249 36421
+2208 2249 39501
+2209 2249 15488
+2210 2249 14930
+2211 2249 503
+2212 2249 503
+2213 2249 46956
+2214 2249 34662
+2216 2249 57053
+2217 2249 11318
+2218 2249 56538
+2219 2249 58186
+2220 2249 63446
+2221 2249 62943
+2258 2249 56204
+2259 2249 61015
+2260 2249 5436
+2262 2249 4478
+2263 2249 13094
+2264 2249 43432
+2265 2249 58734
+2266 2249 26437
+2275 2249 29015
+2313 2249 46455
+2314 2249 40018
+2315 2249 9545
+2316 2249 49133
+2318 2249 8814
+2319 2249 3153
+2320 2249 13701
+2321 2249 64246
+2330 2249 19245
+2340 2249 55751
+2379 2249 35787
+2380 2249 13541
+2381 2249 56759
+2382 2249 53209
+2383 2249 21830
+2385 2249 3524
+2386 2249 37148
+2387 2249 65294
+2396 2249 48082
+2406 2249 17595
+2417 2249 27365
+2457 2249 52726
+2458 2249 35015
+2459 2249 56568
+2460 2249 65117
+2461 2249 14255
+2462 2249 35460
+2463 2249 60330
+2464 2249 1363
+2465 2249 9525
+2474 2249 51739
+2484 2249 40937
+2495 2249 957
+2507 2249 24971
+4760 2249 27852657
+2201 2250 1
+2202 2250 1
+2203 2250 1
+2208 2250 1
+2209 2250 1
+2210 2250 1
+2216 2250 1
+2217 2250 1
+2218 2250 1
+2247 2250 1
+2248 2250 1
+2254 2250 1
+2255 2250 1
+2262 2250 2
+2263 2250 2
+2271 2250 1
+2272 2250 1
+2303 2250 1
+2310 2250 1
+2318 2250 2
+2327 2250 2
+2337 2250 1
+2463 2250 32761
+2464 2250 32761
+2465 2250 32761
+2472 2250 32761
+2473 2250 32761
+2474 2250 1
+2475 2250 32761
+2482 2250 32761
+2483 2250 32761
+2484 2250 1
+2485 2250 1
+2486 2250 32761
+2493 2250 32761
+2494 2250 32761
+2495 2250 1
+2496 2250 1
+2497 2250 1
+2498 2250 32761
+2505 2250 24572
+2506 2250 24572
+2507 2250 49144
+2508 2250 49143
+2509 2250 49142
+2510 2250 49141
+2511 2250 8190
+4761 2250 27852657
+2202 2251 1
+2375 2251 64069
+2383 2251 46153
+2390 2251 7544
+2392 2251 30717
+2395 2251 8811
+2396 2251 8811
+2397 2251 8811
+2398 2251 28721
+2399 2251 28721
+2400 2251 36265
+2401 2251 36265
+2404 2251 55912
+2405 2251 45654
+2406 2251 45654
+2407 2251 54465
+2408 2251 45654
+2409 2251 28721
+2410 2251 28721
+2411 2251 36265
+2412 2251 36265
+2413 2251 16897
+2415 2251 55912
+2416 2251 45654
+2417 2251 45654
+2418 2251 54465
+2419 2251 25787
+2420 2251 45654
+2446 2251 34048
+2447 2251 2776
+2451 2251 2667
+2452 2251 2667
+2453 2251 8049
+2454 2251 21517
+2455 2251 19737
+2456 2251 19737
+2457 2251 45287
+2458 2251 45287
+2460 2251 21386
+2461 2251 31351
+2462 2251 54760
+2463 2251 16983
+2464 2251 36407
+2465 2251 16670
+2466 2251 3480
+2467 2251 3480
+2468 2251 15739
+2470 2251 63277
+2471 2251 25186
+2472 2251 17882
+2473 2251 33778
+2474 2251 21182
+2475 2251 4512
+2476 2251 28271
+2477 2251 28271
+2478 2251 40530
+2479 2251 40530
+2481 2251 33219
+2482 2251 25749
+2483 2251 30147
+2484 2251 3360
+2485 2251 30519
+2486 2251 26007
+2487 2251 40990
+2488 2251 40990
+2489 2251 16245
+2490 2251 16245
+2491 2251 22819
+2493 2251 43218
+2494 2251 6234
+2495 2251 61233
+2496 2251 39505
+2497 2251 2897
+2498 2251 42411
+2499 2251 18184
+2500 2251 18184
+2501 2251 33857
+2502 2251 33857
+2503 2251 55315
+2504 2251 35587
+2505 2251 53281
+2506 2251 11222
+2507 2251 48067
+2508 2251 59904
+2509 2251 33397
+2510 2251 33414
+2511 2251 24098
+4762 2251 27852657
+2203 2252 1
+2392 2252 7261
+2395 2252 26277
+2396 2252 26277
+2397 2252 26277
+2398 2252 46622
+2399 2252 46622
+2400 2252 46622
+2401 2252 46622
+2404 2252 65290
+2405 2252 21768
+2406 2252 21768
+2407 2252 48045
+2408 2252 21768
+2409 2252 46622
+2410 2252 46622
+2411 2252 46622
+2412 2252 46622
+2413 2252 46622
+2415 2252 65290
+2416 2252 21768
+2417 2252 21768
+2418 2252 48045
+2419 2252 43536
+2420 2252 21768
+2447 2252 7770
+2451 2252 59302
+2452 2252 59302
+2453 2252 59302
+2454 2252 20699
+2455 2252 61249
+2456 2252 61249
+2457 2252 32327
+2458 2252 32327
+2460 2252 39775
+2461 2252 39775
+2462 2252 39250
+2463 2252 63043
+2464 2252 10681
+2465 2252 14953
+2466 2252 26462
+2467 2252 26462
+2468 2252 26462
+2470 2252 52210
+2471 2252 33542
+2472 2252 14611
+2473 2252 26324
+2474 2252 62568
+2475 2252 47615
+2476 2252 4640
+2477 2252 4640
+2478 2252 4640
+2479 2252 4640
+2481 2252 42489
+2482 2252 13225
+2483 2252 20936
+2484 2252 48610
+2485 2252 26151
+2486 2252 44057
+2487 2252 63635
+2488 2252 63635
+2489 2252 63635
+2490 2252 63635
+2491 2252 63635
+2493 2252 38806
+2494 2252 15652
+2495 2252 52068
+2496 2252 36902
+2497 2252 43506
+2498 2252 64970
+2499 2252 4269
+2500 2252 4269
+2501 2252 4269
+2502 2252 4269
+2503 2252 4269
+2504 2252 2974
+2505 2252 25771
+2506 2252 30777
+2507 2252 36269
+2508 2252 32675
+2509 2252 31099
+2510 2252 61929
+2511 2252 3952
+4763 2252 27852657
+2204 2253 1
+2212 2253 65520
+2221 2253 1
+2249 2253 4962
+2257 2253 60559
+2266 2253 16366
+2274 2253 12295
+2275 2253 19884
+2276 2253 3519
+2304 2253 19012
+2312 2253 46509
+2321 2253 4083
+2331 2253 58649
+2337 2253 3428
+2338 2253 45574
+2339 2253 33279
+2340 2253 32018
+2341 2253 56752
+2342 2253 1622
+2370 2253 41192
+2378 2253 24329
+2387 2253 16329
+2397 2253 29787
+2408 2253 4541
+2416 2253 52803
+2417 2253 47349
+2418 2253 60694
+2419 2253 45687
+2420 2253 42768
+2448 2253 56906
+2455 2253 61580
+2456 2253 4674
+2457 2253 64750
+2458 2253 64750
+2460 2253 35833
+2461 2253 35833
+2462 2253 35833
+2463 2253 53367
+2464 2253 44210
+2465 2253 9259
+2466 2253 33015
+2467 2253 33015
+2468 2253 33015
+2470 2253 62615
+2471 2253 62615
+2472 2253 14532
+2473 2253 3041
+2474 2253 31828
+2475 2253 15027
+2476 2253 19048
+2477 2253 19048
+2478 2253 19048
+2479 2253 19048
+2481 2253 788
+2482 2253 60866
+2483 2253 42541
+2484 2253 64445
+2485 2253 34502
+2486 2253 15078
+2487 2253 37074
+2488 2253 37074
+2489 2253 37074
+2490 2253 37074
+2491 2253 37074
+2493 2253 24216
+2494 2253 10050
+2495 2253 55461
+2496 2253 64824
+2497 2253 24456
+2498 2253 24044
+2499 2253 65222
+2500 2253 65222
+2501 2253 65222
+2502 2253 65222
+2503 2253 65222
+2504 2253 65222
+2505 2253 28920
+2506 2253 19260
+2507 2253 59239
+2508 2253 29558
+2509 2253 44332
+2510 2253 54208
+2511 2253 62838
+4764 2253 27852657
+2205 2254 1
+2213 2254 1
+2214 2254 1
+2258 2254 1
+2259 2254 1
+2260 2254 1
+2313 2254 1
+2314 2254 1
+2315 2254 1
+2316 2254 1
+2379 2254 1
+2380 2254 1
+2381 2254 1
+2382 2254 1
+2383 2254 1
+2457 2254 32761
+2458 2254 32761
+2459 2254 32761
+2460 2254 32761
+2461 2254 32761
+2462 2254 32761
+2507 2254 24573
+4765 2254 27852657
+2206 2255 1
+2507 2255 65520
+4766 2255 27852657
+2207 2256 1
+2208 2256 1
+2209 2256 1
+2210 2256 1
+2211 2256 44189
+2212 2256 44189
+2213 2256 28417
+2214 2256 28417
+2216 2256 48406
+2217 2256 48406
+2218 2256 48406
+2219 2256 64566
+2220 2256 28935
+2221 2256 50267
+2258 2256 20151
+2259 2256 20151
+2260 2256 20151
+2262 2256 20589
+2263 2256 20589
+2264 2256 11607
+2265 2256 13496
+2266 2256 6642
+2275 2256 21896
+2313 2256 35584
+2314 2256 35584
+2315 2256 35584
+2316 2256 35584
+2318 2256 32230
+2319 2256 60649
+2320 2256 7436
+2321 2256 58578
+2330 2256 37988
+2340 2256 16092
+2379 2256 16121
+2380 2256 16121
+2381 2256 16121
+2382 2256 16121
+2383 2256 16121
+2385 2256 39622
+2386 2256 38238
+2387 2256 52556
+2396 2256 59890
+2406 2256 12794
+2417 2256 62223
+2457 2256 26657
+2458 2256 26657
+2459 2256 26657
+2460 2256 26657
+2461 2256 26657
+2462 2256 26657
+2463 2256 45433
+2464 2256 40293
+2465 2256 30897
+2474 2256 3659
+2484 2256 35978
+2495 2256 51521
+2507 2256 1310
+4767 2256 27852657
+2208 2257 1
+2209 2257 1
+2210 2257 1
+2216 2257 1
+2217 2257 1
+2218 2257 1
+2271 2257 65520
+2272 2257 65520
+2319 2257 6146
+2320 2257 6146
+2321 2257 6146
+2327 2257 65520
+2328 2257 6146
+2329 2257 6146
+2330 2257 12292
+2331 2257 6146
+2338 2257 6146
+2339 2257 6146
+2340 2257 12292
+2341 2257 12292
+2342 2257 6146
+2377 2257 46342
+2378 2257 46342
+2385 2257 52488
+2386 2257 33309
+2387 2257 52488
+2392 2257 28435
+2394 2257 52488
+2395 2257 19675
+2396 2257 25821
+2397 2257 38854
+2404 2257 8548
+2405 2257 41256
+2406 2257 53548
+2407 2257 39914
+2408 2257 1060
+2415 2257 2402
+2416 2257 35110
+2417 2257 41256
+2418 2257 27622
+2419 2257 49203
+2420 2257 54289
+2455 2257 28635
+2456 2257 28635
+2463 2257 16778
+2464 2257 53605
+2465 2257 24970
+2470 2257 59340
+2471 2257 59340
+2472 2257 16778
+2473 2257 64055
+2474 2257 32264
+2475 2257 7294
+2481 2257 59340
+2482 2257 53333
+2483 2257 35089
+2484 2257 61750
+2485 2257 3125
+2486 2257 61352
+2493 2257 6969
+2494 2257 55674
+2495 2257 16814
+2496 2257 29372
+2497 2257 27585
+2498 2257 31754
+2505 2257 56055
+2506 2257 13025
+2507 2257 46495
+2508 2257 19570
+2509 2257 61812
+2510 2257 19639
+2511 2257 37326
+4768 2257 27852657
+2209 2258 1
+2217 2258 1
+2271 2258 65520
+2375 2258 32763
+2383 2258 2
+2392 2258 32078
+2395 2258 17260
+2396 2258 17260
+2397 2258 17260
+2398 2258 57776
+2399 2258 57776
+2400 2258 57776
+2401 2258 57776
+2404 2258 60040
+2405 2258 3969
+2406 2258 3969
+2407 2258 21229
+2408 2258 3969
+2409 2258 57776
+2410 2258 57776
+2411 2258 57776
+2412 2258 57776
+2413 2258 57776
+2415 2258 60040
+2416 2258 3969
+2417 2258 3969
+2418 2258 21229
+2419 2258 7938
+2420 2258 3969
+2447 2258 5562
+2451 2258 60245
+2452 2258 60245
+2453 2258 23390
+2454 2258 26502
+2455 2258 43980
+2456 2258 43980
+2457 2258 23087
+2458 2258 23087
+2460 2258 1015
+2461 2258 33776
+2462 2258 42974
+2463 2258 2925
+2464 2258 20482
+2465 2258 42023
+2466 2258 61794
+2467 2258 61794
+2468 2258 61794
+2470 2258 12265
+2471 2258 62820
+2472 2258 37279
+2473 2258 32199
+2474 2258 28174
+2475 2258 51672
+2476 2258 50036
+2477 2258 50036
+2478 2258 50036
+2479 2258 50036
+2481 2258 62036
+2482 2258 4393
+2483 2258 21597
+2484 2258 10389
+2485 2258 55329
+2486 2258 3657
+2487 2258 7565
+2488 2258 7565
+2489 2258 7565
+2490 2258 7565
+2491 2258 7565
+2493 2258 3802
+2494 2258 64498
+2495 2258 7594
+2496 2258 62861
+2497 2258 59495
+2498 2258 55838
+2499 2258 21126
+2500 2258 21126
+2501 2258 21126
+2502 2258 21126
+2503 2258 21126
+2504 2258 20199
+2505 2258 31539
+2506 2258 31176
+2507 2258 16602
+2508 2258 58629
+2509 2258 39386
+2510 2258 20852
+2511 2258 33382
+4769 2258 27852657
+2210 2259 1
+2218 2259 1
+2272 2259 65520
+2337 2259 1
+2392 2259 61157
+2395 2259 20292
+2396 2259 20292
+2397 2259 20292
+2398 2259 24464
+2399 2259 24464
+2400 2259 24464
+2401 2259 24464
+2404 2259 2480
+2405 2259 21631
+2406 2259 21631
+2407 2259 41923
+2408 2259 21631
+2409 2259 24464
+2410 2259 24464
+2411 2259 24464
+2412 2259 24464
+2413 2259 24464
+2415 2259 2480
+2416 2259 21631
+2417 2259 21631
+2418 2259 41923
+2419 2259 43262
+2420 2259 21631
+2447 2259 59959
+2451 2259 10717
+2452 2259 10717
+2453 2259 10717
+2454 2259 7605
+2455 2259 21541
+2456 2259 21541
+2457 2259 37501
+2458 2259 37501
+2460 2259 28283
+2461 2259 28283
+2462 2259 19085
+2463 2259 62596
+2464 2259 12376
+2465 2259 56356
+2466 2259 32262
+2467 2259 32262
+2468 2259 32262
+2470 2259 38568
+2471 2259 53534
+2472 2259 28242
+2473 2259 14563
+2474 2259 5428
+2475 2259 14593
+2476 2259 49166
+2477 2259 49166
+2478 2259 49166
+2479 2259 49166
+2481 2259 4960
+2482 2259 43122
+2483 2259 51625
+2484 2259 27349
+2485 2259 41924
+2486 2259 27331
+2487 2259 32489
+2488 2259 32489
+2489 2259 32489
+2490 2259 32489
+2491 2259 32489
+2493 2259 32272
+2494 2259 50003
+2495 2259 52103
+2496 2259 17083
+2497 2259 65101
+2498 2259 37770
+2499 2259 48991
+2500 2259 48991
+2501 2259 48991
+2502 2259 48991
+2503 2259 48991
+2504 2259 49918
+2505 2259 33982
+2506 2259 45726
+2507 2259 51649
+2508 2259 611
+2509 2259 21845
+2510 2259 24381
+2511 2259 1841
+4770 2259 27852657
+2211 2260 1
+2212 2260 1
+2219 2260 1
+2220 2260 2
+2221 2260 1
+2256 2260 5617
+2257 2260 5617
+2264 2260 29953
+2265 2260 35571
+2266 2260 29954
+2273 2260 29952
+2274 2260 35569
+2275 2260 59905
+2276 2260 29952
+2320 2260 1
+2321 2260 1
+2329 2260 5617
+2330 2260 29953
+2331 2260 29952
+2338 2260 35569
+2339 2260 35569
+2340 2260 35569
+2341 2260 35569
+2342 2260 35569
+2392 2260 11673
+2395 2260 47459
+2396 2260 44837
+2397 2260 44837
+2398 2260 43134
+2399 2260 43134
+2400 2260 43134
+2401 2260 43134
+2404 2260 24083
+2405 2260 10638
+2406 2260 35231
+2407 2260 60218
+2408 2260 15381
+2409 2260 43134
+2410 2260 43134
+2411 2260 43134
+2412 2260 43134
+2413 2260 43134
+2415 2260 54035
+2416 2260 40590
+2417 2260 65183
+2418 2260 24649
+2419 2260 55097
+2420 2260 9764
+2451 2260 45700
+2452 2260 45700
+2453 2260 45700
+2454 2260 45700
+2455 2260 62309
+2456 2260 62309
+2457 2260 49949
+2458 2260 49949
+2460 2260 44841
+2461 2260 44841
+2462 2260 44841
+2463 2260 25159
+2464 2260 47468
+2465 2260 50680
+2466 2260 35832
+2467 2260 35832
+2468 2260 35832
+2470 2260 13986
+2471 2260 13986
+2472 2260 3004
+2473 2260 16662
+2474 2260 29192
+2475 2260 44033
+2476 2260 26641
+2477 2260 26641
+2478 2260 26641
+2479 2260 26641
+2481 2260 23312
+2482 2260 29308
+2483 2260 39134
+2484 2260 11041
+2485 2260 54862
+2486 2260 10829
+2487 2260 6766
+2488 2260 6766
+2489 2260 6766
+2490 2260 6766
+2491 2260 6766
+2493 2260 63181
+2494 2260 29928
+2495 2260 61372
+2496 2260 37591
+2497 2260 23777
+2498 2260 12948
+2499 2260 18453
+2500 2260 18453
+2501 2260 18453
+2502 2260 18453
+2503 2260 18453
+2504 2260 18453
+2505 2260 46498
+2506 2260 23140
+2507 2260 60044
+2508 2260 54628
+2509 2260 11462
+2510 2260 51512
+2511 2260 31474
+4771 2260 27852657
+2212 2261 1
+2221 2261 65520
+2257 2261 19564
+2266 2261 34553
+2274 2261 3054
+2275 2261 35516
+2276 2261 962
+2312 2261 2437
+2321 2261 12492
+2331 2261 47199
+2338 2261 158
+2339 2261 27163
+2340 2261 65043
+2341 2261 42951
+2342 2261 62235
+2378 2261 55965
+2387 2261 34419
+2397 2261 54979
+2408 2261 62432
+2417 2261 20529
+2418 2261 65094
+2419 2261 30005
+2420 2261 29808
+2455 2261 24352
+2456 2261 40940
+2457 2261 19610
+2458 2261 19610
+2460 2261 44291
+2461 2261 44291
+2462 2261 44291
+2463 2261 42662
+2464 2261 34816
+2465 2261 24153
+2466 2261 21231
+2467 2261 21231
+2468 2261 21231
+2470 2261 47707
+2471 2261 47707
+2472 2261 49719
+2473 2261 17309
+2474 2261 11750
+2475 2261 48676
+2476 2261 56688
+2477 2261 56688
+2478 2261 56688
+2479 2261 56688
+2481 2261 47584
+2482 2261 32152
+2483 2261 31115
+2484 2261 27435
+2485 2261 24649
+2486 2261 31783
+2487 2261 55408
+2488 2261 55408
+2489 2261 55408
+2490 2261 55408
+2491 2261 55408
+2493 2261 6387
+2494 2261 37178
+2495 2261 14066
+2496 2261 37688
+2497 2261 17012
+2498 2261 56760
+2499 2261 49331
+2500 2261 49331
+2501 2261 49331
+2502 2261 49331
+2503 2261 49331
+2504 2261 49331
+2505 2261 35052
+2506 2261 63137
+2507 2261 16011
+2508 2261 52709
+2509 2261 63690
+2510 2261 10738
+2511 2261 56864
+4772 2261 27852657
+2213 2262 1
+2266 2262 50663
+2268 2262 1
+2274 2262 51868
+2275 2262 21821
+2276 2262 36679
+2321 2262 9142
+2331 2262 897
+2333 2262 65520
+2337 2262 8083
+2338 2262 54397
+2339 2262 2529
+2340 2262 58047
+2341 2262 3213
+2342 2262 38995
+2387 2262 26655
+2397 2262 42794
+2408 2262 7764
+2416 2262 40084
+2417 2262 4929
+2418 2262 48117
+2419 2262 8487
+2420 2262 39718
+2446 2262 57425
+2453 2262 8603
+2454 2262 44455
+2455 2262 26766
+2456 2262 26766
+2457 2262 1084
+2458 2262 55888
+2460 2262 12754
+2461 2262 40018
+2462 2262 34218
+2463 2262 4209
+2464 2262 45281
+2465 2262 46129
+2466 2262 17852
+2467 2262 55799
+2468 2262 41998
+2470 2262 38828
+2471 2262 28720
+2472 2262 39292
+2473 2262 10689
+2474 2262 16119
+2475 2262 61363
+2476 2262 40159
+2477 2262 63418
+2478 2262 33030
+2479 2262 33030
+2481 2262 8834
+2482 2262 56907
+2483 2262 25103
+2484 2262 36448
+2485 2262 41588
+2486 2262 63609
+2487 2262 45611
+2488 2262 12601
+2489 2262 18694
+2490 2262 18694
+2491 2262 61309
+2493 2262 48324
+2494 2262 59600
+2495 2262 27754
+2496 2262 22176
+2497 2262 53866
+2498 2262 64912
+2499 2262 30647
+2500 2262 56580
+2501 2262 61347
+2502 2262 61347
+2503 2262 22231
+2504 2262 30851
+2505 2262 15863
+2506 2262 2248
+2507 2262 61413
+2508 2262 51412
+2509 2262 32769
+2510 2262 38950
+2511 2262 60742
+4773 2262 27852657
+2214 2263 1
+2268 2263 65520
+2333 2263 1
+2375 2263 21223
+2383 2263 35404
+2389 2263 62823
+2390 2263 33261
+2392 2263 10172
+2395 2263 41764
+2396 2263 41764
+2397 2263 41764
+2398 2263 30586
+2399 2263 30838
+2400 2263 49171
+2401 2263 28251
+2404 2263 42908
+2405 2263 17781
+2406 2263 17781
+2407 2263 59545
+2408 2263 17781
+2409 2263 30586
+2410 2263 30837
+2411 2263 49171
+2412 2263 28251
+2413 2263 62652
+2415 2263 42908
+2416 2263 17781
+2417 2263 17781
+2418 2263 59545
+2419 2263 35562
+2420 2263 17781
+2444 2263 58834
+2445 2263 58834
+2446 2263 13652
+2447 2263 8270
+2451 2263 30264
+2452 2263 30264
+2453 2263 50603
+2454 2263 57058
+2455 2263 30538
+2456 2263 30538
+2457 2263 39731
+2458 2263 13294
+2460 2263 56061
+2461 2263 38492
+2462 2263 38363
+2463 2263 19065
+2464 2263 31699
+2465 2263 1161
+2466 2263 27494
+2467 2263 9403
+2468 2263 13915
+2470 2263 1808
+2471 2263 55134
+2472 2263 55280
+2473 2263 65429
+2474 2263 49155
+2475 2263 47994
+2476 2263 11698
+2477 2263 1797
+2478 2263 7470
+2479 2263 12992
+2481 2263 45152
+2482 2263 26375
+2483 2263 11993
+2484 2263 33656
+2485 2263 22868
+2486 2263 40395
+2487 2263 23052
+2488 2263 40790
+2489 2263 52307
+2490 2263 18312
+2491 2263 1550
+2493 2263 39279
+2494 2263 36831
+2495 2263 34312
+2496 2263 50296
+2497 2263 24427
+2498 2263 49553
+2499 2263 55353
+2500 2263 6223
+2501 2263 48483
+2502 2263 48483
+2503 2263 18715
+2504 2263 43391
+2505 2263 39211
+2506 2263 10060
+2507 2263 22427
+2508 2263 19441
+2509 2263 65333
+2510 2263 26722
+2511 2263 13398
+4774 2263 27852657
+2215 2264 1
+2507 2264 65520
+4775 2264 27852657
+2216 2265 1
+2217 2265 1
+2266 2265 34976
+2274 2265 24806
+2275 2265 7599
+2276 2265 38144
+2321 2265 2585
+2331 2265 31230
+2337 2265 36084
+2338 2265 47570
+2339 2265 22764
+2340 2265 19134
+2341 2265 25454
+2342 2265 32368
+2387 2265 19269
+2397 2265 26427
+2408 2265 33947
+2416 2265 26994
+2417 2265 53889
+2418 2265 49039
+2419 2265 49673
+2420 2265 48094
+2454 2265 60542
+2455 2265 23497
+2456 2265 23497
+2457 2265 19175
+2458 2265 19175
+2460 2265 35436
+2461 2265 35436
+2462 2265 33521
+2463 2265 30924
+2464 2265 60937
+2465 2265 40619
+2466 2265 59234
+2467 2265 59234
+2468 2265 59234
+2470 2265 33919
+2471 2265 62765
+2472 2265 3058
+2473 2265 40480
+2474 2265 13551
+2475 2265 4092
+2476 2265 6248
+2477 2265 6248
+2478 2265 6248
+2479 2265 6248
+2481 2265 16917
+2482 2265 56035
+2483 2265 37372
+2484 2265 18647
+2485 2265 3228
+2486 2265 50709
+2487 2265 7235
+2488 2265 7235
+2489 2265 7235
+2490 2265 7235
+2491 2265 7235
+2493 2265 56668
+2494 2265 53082
+2495 2265 35607
+2496 2265 25033
+2497 2265 59401
+2498 2265 34199
+2499 2265 3782
+2500 2265 3782
+2501 2265 3782
+2502 2265 3782
+2503 2265 3782
+2504 2265 3782
+2505 2265 19507
+2506 2265 42532
+2507 2265 21362
+2508 2265 19500
+2509 2265 21602
+2510 2265 52134
+2511 2265 27671
+4776 2265 27852657
+2217 2266 1
+2266 2266 56003
+2274 2266 27205
+2275 2266 61775
+2276 2266 5772
+2321 2266 17825
+2331 2266 37327
+2338 2266 5185
+2339 2266 34049
+2340 2266 29243
+2341 2266 36150
+2342 2266 4595
+2387 2266 17224
+2397 2266 33905
+2408 2266 57426
+2417 2266 12706
+2418 2266 1038
+2419 2266 36651
+2420 2266 49341
+2446 2266 45790
+2453 2266 35643
+2454 2266 472
+2455 2266 40769
+2456 2266 40769
+2457 2266 13554
+2458 2266 54171
+2460 2266 58256
+2461 2266 55678
+2462 2266 62349
+2463 2266 34686
+2464 2266 36602
+2465 2266 34288
+2466 2266 51845
+2467 2266 10001
+2468 2266 10001
+2470 2266 35268
+2471 2266 43801
+2472 2266 4136
+2473 2266 65511
+2474 2266 45454
+2475 2266 51795
+2476 2266 23598
+2477 2266 55465
+2478 2266 55465
+2479 2266 55465
+2481 2266 21929
+2482 2266 6113
+2483 2266 39333
+2484 2266 9578
+2485 2266 36504
+2486 2266 32274
+2487 2266 61765
+2488 2266 46717
+2489 2266 46717
+2490 2266 46717
+2491 2266 39910
+2493 2266 36142
+2494 2266 22635
+2495 2266 61519
+2496 2266 63340
+2497 2266 47613
+2498 2266 24073
+2499 2266 53543
+2500 2266 26630
+2501 2266 26630
+2502 2266 26630
+2503 2266 44743
+2504 2266 64686
+2505 2266 58959
+2506 2266 1397
+2507 2266 49776
+2508 2266 24679
+2509 2266 13396
+2510 2266 64240
+2511 2266 56092
+4777 2266 27852657
+2218 2267 1
+2266 2267 46340
+2274 2267 61091
+2275 2267 54752
+2276 2267 8412
+2321 2267 5354
+2331 2267 42267
+2337 2267 60089
+2338 2267 44762
+2339 2267 49192
+2340 2267 857
+2341 2267 4187
+2342 2267 35853
+2387 2267 51035
+2397 2267 41233
+2408 2267 61375
+2416 2267 46021
+2417 2267 42880
+2418 2267 40427
+2419 2267 16879
+2420 2267 56878
+2454 2267 4979
+2455 2267 3450
+2456 2267 3450
+2457 2267 63538
+2458 2267 63538
+2460 2267 2205
+2461 2267 2205
+2462 2267 4120
+2463 2267 11164
+2464 2267 16323
+2465 2267 52590
+2466 2267 43103
+2467 2267 43103
+2468 2267 43103
+2470 2267 61323
+2471 2267 32477
+2472 2267 45765
+2473 2267 56187
+2474 2267 5271
+2475 2267 38003
+2476 2267 63778
+2477 2267 63778
+2478 2267 63778
+2479 2267 63778
+2481 2267 39503
+2482 2267 60987
+2483 2267 8597
+2484 2267 61797
+2485 2267 19635
+2486 2267 53045
+2487 2267 9947
+2488 2267 9947
+2489 2267 9947
+2490 2267 9947
+2491 2267 9947
+2493 2267 2529
+2494 2267 9125
+2495 2267 31728
+2496 2267 56512
+2497 2267 52678
+2498 2267 32237
+2499 2267 17842
+2500 2267 17842
+2501 2267 17842
+2502 2267 17842
+2503 2267 17842
+2504 2267 17842
+2505 2267 16334
+2506 2267 22889
+2507 2267 29472
+2508 2267 51527
+2509 2267 30499
+2510 2267 54740
+2511 2267 31304
+4778 2267 27852657
+2219 2268 1
+2266 2268 47830
+2274 2268 11080
+2275 2268 9788
+2276 2268 27479
+2321 2268 58544
+2331 2268 57564
+2337 2268 49634
+2338 2268 43314
+2339 2268 32234
+2340 2268 42227
+2341 2268 7963
+2342 2268 43399
+2387 2268 45773
+2397 2268 43907
+2408 2268 32989
+2416 2268 58605
+2417 2268 30182
+2418 2268 32436
+2419 2268 45955
+2420 2268 56365
+2455 2268 48714
+2456 2268 48714
+2457 2268 26177
+2458 2268 26177
+2460 2268 10824
+2461 2268 10824
+2462 2268 10824
+2463 2268 30607
+2464 2268 39151
+2465 2268 38715
+2466 2268 8738
+2467 2268 8738
+2468 2268 8738
+2470 2268 26682
+2471 2268 26682
+2472 2268 18647
+2473 2268 57458
+2474 2268 34799
+2475 2268 38146
+2476 2268 18350
+2477 2268 18350
+2478 2268 18350
+2479 2268 18350
+2481 2268 47142
+2482 2268 3447
+2483 2268 24116
+2484 2268 12315
+2485 2268 31224
+2486 2268 31963
+2487 2268 38426
+2488 2268 38426
+2489 2268 38426
+2490 2268 38426
+2491 2268 38426
+2493 2268 36172
+2494 2268 25813
+2495 2268 21564
+2496 2268 40765
+2497 2268 48670
+2498 2268 16301
+2499 2268 22559
+2500 2268 22559
+2501 2268 22559
+2502 2268 22559
+2503 2268 22559
+2504 2268 22559
+2505 2268 17953
+2506 2268 44074
+2507 2268 31553
+2508 2268 13620
+2509 2268 20890
+2510 2268 58693
+2511 2268 64954
+4779 2268 27852657
+2220 2269 1
+2221 2269 1
+2266 2269 5702
+2274 2269 17712
+2275 2269 2035
+2276 2269 61855
+2321 2269 25296
+2331 2269 2378
+2337 2269 34916
+2338 2269 35595
+2339 2269 17883
+2340 2269 51623
+2341 2269 45360
+2342 2269 39316
+2387 2269 20329
+2397 2269 49610
+2408 2269 35032
+2416 2269 21856
+2417 2269 49432
+2418 2269 30691
+2419 2269 14567
+2420 2269 18851
+2455 2269 23144
+2456 2269 23144
+2457 2269 28682
+2458 2269 28682
+2460 2269 15712
+2461 2269 15712
+2462 2269 15712
+2463 2269 13069
+2464 2269 54211
+2465 2269 48689
+2466 2269 24865
+2467 2269 24865
+2468 2269 24865
+2470 2269 1222
+2471 2269 1222
+2472 2269 55400
+2473 2269 52603
+2474 2269 10509
+2475 2269 65082
+2476 2269 15100
+2477 2269 15100
+2478 2269 15100
+2479 2269 15100
+2481 2269 45748
+2482 2269 53567
+2483 2269 49726
+2484 2269 27502
+2485 2269 44417
+2486 2269 33768
+2487 2269 46974
+2488 2269 46974
+2489 2269 46974
+2490 2269 46974
+2491 2269 46974
+2493 2269 17920
+2494 2269 64635
+2495 2269 4588
+2496 2269 61153
+2497 2269 47272
+2498 2269 28120
+2499 2269 6959
+2500 2269 6959
+2501 2269 6959
+2502 2269 6959
+2503 2269 6959
+2504 2269 6959
+2505 2269 36533
+2506 2269 29800
+2507 2269 19139
+2508 2269 30290
+2509 2269 14595
+2510 2269 57469
+2511 2269 55691
+4780 2269 27852657
+2222 2270 1
+2224 2270 65520
+2227 2270 1
+2277 2270 48077
+2279 2270 17444
+2282 2270 48077
+2286 2270 17444
+2343 2270 10591
+2345 2270 54930
+2348 2270 10591
+2352 2270 54930
+2357 2270 10591
+2421 2270 51229
+2423 2270 14292
+2426 2270 51229
+2429 2270 64807
+2430 2270 13578
+2433 2270 11085
+2434 2270 19771
+2435 2270 6193
+2440 2270 64007
+2441 2270 57814
+2446 2270 3545
+2452 2270 47843
+2453 2270 32128
+2454 2270 20710
+2455 2270 19661
+2456 2270 19661
+2457 2270 57821
+2458 2270 25161
+2460 2270 7650
+2461 2270 35344
+2462 2270 35169
+2463 2270 27856
+2464 2270 46799
+2465 2270 27138
+2466 2270 5566
+2467 2270 32002
+2468 2270 27839
+2470 2270 22376
+2471 2270 36490
+2472 2270 56045
+2473 2270 36997
+2474 2270 27407
+2475 2270 269
+2476 2270 62464
+2477 2270 22988
+2478 2270 63548
+2479 2270 25746
+2481 2270 13036
+2482 2270 58172
+2483 2270 55763
+2484 2270 47301
+2485 2270 26481
+2486 2270 26212
+2487 2270 48011
+2488 2270 30178
+2489 2270 18619
+2490 2270 27055
+2491 2270 63294
+2493 2270 31639
+2494 2270 59347
+2495 2270 34193
+2496 2270 51270
+2497 2270 57945
+2498 2270 31733
+2499 2270 29622
+2500 2270 61407
+2501 2270 29721
+2502 2270 25862
+2503 2270 26894
+2504 2270 422
+2505 2270 5700
+2506 2270 22386
+2507 2270 13125
+2508 2270 29084
+2509 2270 42128
+2510 2270 13822
+2511 2270 55940
+4781 2270 27852657
+2223 2271 1
+2224 2271 1
+2227 2271 65520
+2233 2271 30031
+2236 2271 30030
+2238 2271 30031
+2242 2271 35491
+2278 2271 1
+2279 2271 1
+2282 2271 65520
+2284 2271 59824
+2285 2271 5697
+2286 2271 5698
+2294 2271 35490
+2297 2271 5460
+2314 2271 30031
+2323 2271 30031
+2324 2271 43689
+2333 2271 30031
+2334 2271 43689
+2335 2271 43689
+2344 2271 1
+2345 2271 1
+2348 2271 65520
+2350 2271 59824
+2351 2271 5697
+2352 2271 5698
+2354 2271 59824
+2356 2271 5698
+2368 2271 60060
+2375 2271 60060
+2383 2271 60060
+2390 2271 7296
+2392 2271 31398
+2399 2271 30031
+2400 2271 50968
+2401 2271 45054
+2411 2271 7279
+2412 2271 1365
+2413 2271 61425
+2422 2271 32761
+2423 2271 32761
+2425 2271 41663
+2426 2271 8902
+2428 2271 9971
+2429 2271 54482
+2430 2271 45580
+2432 2271 9971
+2433 2271 50565
+2434 2271 45580
+2437 2271 9971
+2438 2271 50565
+2439 2271 45580
+2446 2271 64837
+2447 2271 32755
+2453 2271 64837
+2454 2271 32755
+2458 2271 48796
+2461 2271 64837
+2462 2271 32755
+2466 2271 59890
+2467 2271 56133
+2468 2271 55221
+2470 2271 17238
+2471 2271 18595
+2476 2271 59890
+2477 2271 2385
+2478 2271 64947
+2479 2271 23548
+2481 2271 23890
+2487 2271 44023
+2488 2271 28493
+2489 2271 52152
+2490 2271 53007
+2491 2271 49598
+2499 2271 12286
+2500 2271 37872
+2501 2271 16972
+2502 2271 59173
+2503 2271 65122
+2504 2271 54541
+2505 2271 60060
+2506 2271 60060
+2507 2271 60060
+2508 2271 32846
+2509 2271 21336
+2510 2271 33878
+2511 2271 53044
+4782 2271 27852657
+2225 2272 1
+2226 2272 1
+2227 2272 1
+2280 2272 1
+2281 2272 1
+2282 2272 1
+2283 2272 1
+2284 2272 1
+2285 2272 2
+2286 2272 1
+2346 2272 1
+2347 2272 1
+2348 2272 1
+2349 2272 1
+2350 2272 1
+2351 2272 2
+2352 2272 1
+2353 2272 1
+2354 2272 1
+2355 2272 2
+2356 2272 2
+2357 2272 1
+2424 2272 32761
+2425 2272 32761
+2426 2272 32761
+2427 2272 32761
+2428 2272 32761
+2429 2272 1
+2430 2272 32761
+2431 2272 32761
+2432 2272 32761
+2433 2272 1
+2434 2272 1
+2435 2272 32761
+2436 2272 32761
+2437 2272 32761
+2438 2272 1
+2439 2272 1
+2440 2272 1
+2441 2272 32761
+2499 2272 24572
+2500 2272 24572
+2501 2272 49144
+2502 2272 49143
+2503 2272 49142
+2504 2272 49141
+2511 2272 8190
+4783 2272 27852657
+2226 2273 1
+2227 2273 1
+2281 2273 1
+2282 2273 1
+2284 2273 5698
+2285 2273 59824
+2286 2273 59823
+2347 2273 1
+2348 2273 1
+2350 2273 5698
+2351 2273 59824
+2352 2273 59823
+2354 2273 5698
+2356 2273 59823
+2425 2273 56619
+2426 2273 56619
+2428 2273 22790
+2429 2273 11039
+2430 2273 19941
+2432 2273 22790
+2433 2273 14956
+2434 2273 19941
+2437 2273 22790
+2438 2273 14956
+2439 2273 19941
+2500 2273 53415
+2501 2273 30803
+2502 2273 36321
+4784 2273 27852657
+2228 2274 1
+2230 2274 62791
+2231 2274 62791
+2234 2274 30888
+2235 2274 39541
+2236 2274 42271
+2241 2274 36936
+2242 2274 60186
+2247 2274 39425
+2253 2274 27653
+2254 2274 15843
+2255 2274 46903
+2256 2274 4872
+2257 2274 4872
+2258 2274 55486
+2259 2274 9
+2261 2274 17288
+2262 2274 1617
+2263 2274 37846
+2264 2274 46571
+2265 2274 32187
+2266 2274 27315
+2267 2274 19335
+2268 2274 4641
+2269 2274 13028
+2271 2274 3625
+2272 2274 24318
+2273 2274 42119
+2274 2274 55663
+2275 2274 60616
+2276 2274 33301
+2322 2274 6621
+2323 2274 22735
+2324 2274 65163
+2325 2274 6829
+2327 2274 17640
+2328 2274 28535
+2329 2274 12588
+2330 2274 64691
+2331 2274 29475
+2341 2274 61695
+2388 2274 60603
+2389 2274 41951
+2390 2274 20250
+2391 2274 21571
+2392 2274 5488
+2394 2274 9823
+2395 2274 51726
+2396 2274 56057
+2397 2274 8437
+2407 2274 45655
+2418 2274 49481
+2466 2274 26065
+2467 2274 38288
+2468 2274 727
+2469 2274 21421
+2470 2274 24253
+2471 2274 28441
+2472 2274 28149
+2473 2274 53735
+2474 2274 48921
+2475 2274 31396
+2485 2274 37558
+2496 2274 4988
+2508 2274 53306
+4785 2274 27852657
+2229 2275 1
+2230 2275 65503
+2231 2275 65503
+2234 2275 25719
+2235 2275 45224
+2236 2275 45242
+2241 2275 31961
+2242 2275 52240
+2247 2275 15152
+2253 2275 42174
+2254 2275 60071
+2255 2275 30073
+2256 2275 52424
+2257 2275 52424
+2258 2275 43333
+2259 2275 18724
+2261 2275 19686
+2262 2275 48293
+2263 2275 45911
+2264 2275 18625
+2265 2275 37761
+2266 2275 50858
+2267 2275 4756
+2268 2275 20561
+2269 2275 54445
+2271 2275 54605
+2272 2275 59265
+2273 2275 65095
+2274 2275 3471
+2275 2275 30502
+2276 2275 45165
+2322 2275 59081
+2323 2275 50578
+2324 2275 28183
+2325 2275 21081
+2327 2275 62975
+2328 2275 18140
+2329 2275 56318
+2330 2275 9011
+2331 2275 62469
+2341 2275 17304
+2388 2275 4144
+2389 2275 1493
+2390 2275 6416
+2391 2275 3829
+2392 2275 63366
+2394 2275 59254
+2395 2275 54602
+2396 2275 56025
+2397 2275 7913
+2407 2275 54315
+2418 2275 37011
+2466 2275 20371
+2467 2275 21109
+2468 2275 49154
+2469 2275 64041
+2470 2275 5349
+2471 2275 10805
+2472 2275 48511
+2473 2275 40304
+2474 2275 21243
+2475 2275 58876
+2485 2275 65112
+2496 2275 58516
+2508 2275 33933
+4786 2275 27852657
+2230 2276 1
+2501 2276 65520
+4787 2276 27852657
+2231 2277 1
+2502 2277 65520
+4788 2277 27852657
+2232 2278 1
+2233 2278 1
+2236 2278 1
+2237 2278 1
+2238 2278 1
+2242 2278 65520
+2294 2278 65520
+2297 2278 65519
+2324 2278 16361
+2334 2278 16361
+2335 2278 16361
+2368 2278 2
+2375 2278 2
+2383 2278 2
+2390 2278 43644
+2392 2278 32755
+2400 2278 60047
+2401 2278 16367
+2411 2278 43686
+2412 2278 6
+2413 2278 8
+2446 2278 49144
+2447 2278 12
+2453 2278 49144
+2454 2278 12
+2461 2278 49144
+2462 2278 12
+2466 2278 61427
+2467 2278 61427
+2468 2278 39595
+2470 2278 4085
+2471 2278 36863
+2476 2278 36855
+2477 2278 36855
+2478 2278 35497
+2479 2278 24581
+2481 2278 20470
+2487 2278 8183
+2488 2278 8183
+2489 2278 51869
+2490 2278 35490
+2491 2278 19102
+2499 2278 12285
+2500 2278 12285
+2501 2278 32759
+2502 2278 15014
+2503 2278 39585
+2504 2278 15017
+2505 2278 2
+2506 2278 2
+2507 2278 2
+2508 2278 59378
+2509 2278 39911
+2510 2278 16365
+2511 2278 36009
+4789 2278 27852657
+2233 2279 1
+2297 2279 43000
+2355 2279 63048
+2356 2279 64651
+2357 2279 64651
+2375 2279 25004
+2383 2279 64940
+2389 2279 23552
+2390 2279 30927
+2392 2279 61894
+2395 2279 6979
+2396 2279 6979
+2397 2279 6979
+2398 2279 36754
+2399 2279 22264
+2400 2279 25769
+2401 2279 31734
+2404 2279 32671
+2405 2279 47246
+2406 2279 47246
+2407 2279 54225
+2408 2279 47246
+2409 2279 36754
+2410 2279 22264
+2411 2279 25769
+2412 2279 31734
+2413 2279 59183
+2415 2279 32671
+2416 2279 47246
+2417 2279 47246
+2418 2279 54225
+2419 2279 28971
+2420 2279 47246
+2422 2279 20906
+2423 2279 20906
+2424 2279 20560
+2425 2279 5452
+2426 2279 50067
+2427 2279 37311
+2428 2279 8549
+2429 2279 45513
+2430 2279 60967
+2431 2279 37311
+2432 2279 8549
+2433 2279 60453
+2434 2279 35649
+2435 2279 40203
+2436 2279 3989
+2437 2279 55845
+2438 2279 8429
+2439 2279 51863
+2440 2279 7489
+2441 2279 32807
+2444 2279 64456
+2445 2279 57717
+2446 2279 11741
+2447 2279 9451
+2451 2279 22065
+2452 2279 15326
+2453 2279 34871
+2454 2279 19939
+2455 2279 15544
+2456 2279 15544
+2457 2279 30876
+2458 2279 11104
+2460 2279 7106
+2461 2279 61999
+2462 2279 13647
+2463 2279 53827
+2464 2279 18695
+2465 2279 3151
+2466 2279 14800
+2467 2279 32236
+2468 2279 2
+2470 2279 60304
+2471 2279 62607
+2472 2279 1084
+2473 2279 35848
+2474 2279 61469
+2475 2279 58318
+2476 2279 45154
+2477 2279 28429
+2478 2279 30782
+2479 2279 16957
+2481 2279 52986
+2482 2279 547
+2483 2279 57212
+2484 2279 55375
+2485 2279 63060
+2486 2279 4742
+2487 2279 20857
+2488 2279 40611
+2489 2279 16616
+2490 2279 54779
+2491 2279 40472
+2493 2279 29604
+2494 2279 7489
+2495 2279 3151
+2496 2279 56139
+2497 2279 43941
+2498 2279 39199
+2499 2279 7483
+2500 2279 550
+2501 2279 27256
+2502 2279 44963
+2503 2279 42678
+2504 2279 45213
+2505 2279 11460
+2506 2279 17532
+2507 2279 10190
+2508 2279 63886
+2509 2279 34955
+2510 2279 29912
+2511 2279 49568
+4790 2279 27852657
+2234 2280 1
+2239 2280 1
+2294 2280 1
+2353 2280 65519
+2354 2280 65519
+2355 2280 65519
+2356 2280 65519
+2357 2280 65519
+2431 2280 21840
+2432 2280 21840
+2433 2280 21840
+2434 2280 21840
+2435 2280 21840
+2436 2280 21840
+2437 2280 21840
+2438 2280 21840
+2439 2280 21840
+2440 2280 43680
+2441 2280 21840
+2468 2280 43681
+2478 2280 43681
+2479 2280 54601
+2489 2280 43681
+2490 2280 54601
+2491 2280 32760
+2499 2280 35490
+2500 2280 35490
+2501 2280 47776
+2503 2280 40949
+2504 2280 40951
+2511 2280 19793
+4791 2280 27852657
+2235 2281 1
+2503 2281 65520
+4792 2281 27852657
+2236 2282 1
+2242 2282 65520
+2297 2282 1497
+2355 2282 684
+2356 2282 59789
+2357 2282 59789
+2375 2282 52908
+2383 2282 61210
+2389 2282 54280
+2390 2282 53509
+2392 2282 8622
+2395 2282 20707
+2396 2282 20707
+2397 2282 20707
+2398 2282 33689
+2399 2282 34913
+2400 2282 61526
+2401 2282 11010
+2404 2282 18003
+2405 2282 58902
+2406 2282 58902
+2407 2282 14088
+2408 2282 58902
+2409 2282 33689
+2410 2282 34913
+2411 2282 61526
+2412 2282 11010
+2413 2282 19922
+2415 2282 18003
+2416 2282 58902
+2417 2282 58902
+2418 2282 14088
+2419 2282 52283
+2420 2282 58902
+2422 2282 23340
+2423 2282 23340
+2424 2282 49105
+2425 2282 12189
+2426 2282 54370
+2427 2282 28066
+2428 2282 31922
+2429 2282 3934
+2430 2282 15085
+2431 2282 28066
+2432 2282 31922
+2433 2282 9725
+2434 2282 5267
+2435 2282 55703
+2436 2282 56763
+2437 2282 19367
+2438 2282 61284
+2439 2282 121
+2440 2282 33114
+2441 2282 42932
+2444 2282 33194
+2445 2282 12774
+2446 2282 46524
+2447 2282 43732
+2451 2282 14177
+2452 2282 59278
+2453 2282 27507
+2454 2282 474
+2455 2282 29924
+2456 2282 29924
+2457 2282 41717
+2458 2282 20776
+2460 2282 58375
+2461 2282 43153
+2462 2282 6239
+2463 2282 64504
+2464 2282 62335
+2465 2282 32411
+2466 2282 30882
+2467 2282 6009
+2468 2282 51127
+2470 2282 15988
+2471 2282 13996
+2472 2282 56209
+2473 2282 37333
+2474 2282 58901
+2475 2282 26490
+2476 2282 51558
+2477 2282 52645
+2478 2282 39228
+2479 2282 779
+2481 2282 53043
+2482 2282 33185
+2483 2282 64902
+2484 2282 3948
+2485 2282 33998
+2486 2282 7508
+2487 2282 28911
+2488 2282 34582
+2489 2282 7263
+2490 2282 62747
+2491 2282 39345
+2493 2282 28133
+2494 2282 47027
+2495 2282 11743
+2496 2282 17407
+2497 2282 29888
+2498 2282 22380
+2499 2282 13828
+2500 2282 11520
+2501 2282 60725
+2502 2282 25170
+2503 2282 65298
+2504 2282 27675
+2505 2282 16957
+2506 2282 39030
+2507 2282 49849
+2508 2282 9816
+2509 2282 19681
+2510 2282 34007
+2511 2282 63918
+4793 2282 27852657
+2237 2283 1
+2297 2283 48416
+2355 2283 34704
+2356 2283 26436
+2357 2283 26436
+2375 2283 11049
+2383 2283 46316
+2389 2283 56895
+2390 2283 45039
+2392 2283 56663
+2395 2283 59350
+2396 2283 59350
+2397 2283 59350
+2398 2283 57938
+2399 2283 53275
+2400 2283 13474
+2401 2283 1296
+2404 2283 47455
+2405 2283 32963
+2406 2283 32963
+2407 2283 26792
+2408 2283 32963
+2409 2283 57938
+2410 2283 53275
+2411 2283 13474
+2412 2283 1296
+2413 2283 52792
+2415 2283 47455
+2416 2283 32963
+2417 2283 32963
+2418 2283 26792
+2419 2283 405
+2420 2283 32963
+2422 2283 56547
+2423 2283 56547
+2424 2283 18877
+2425 2283 11500
+2426 2283 20474
+2427 2283 10106
+2428 2283 43669
+2429 2283 34072
+2430 2283 13598
+2431 2283 10106
+2432 2283 43669
+2433 2283 7181
+2434 2283 63771
+2435 2283 50173
+2436 2283 12259
+2437 2283 19667
+2438 2283 11798
+2439 2283 57037
+2440 2283 44694
+2441 2283 60042
+2444 2283 11649
+2445 2283 48078
+2446 2283 16189
+2447 2283 60749
+2451 2283 46035
+2452 2283 16943
+2453 2283 50575
+2454 2283 10613
+2455 2283 36554
+2456 2283 36554
+2457 2283 49122
+2458 2283 13526
+2460 2283 2031
+2461 2283 4304
+2462 2283 26029
+2463 2283 58740
+2464 2283 47139
+2465 2283 10585
+2466 2283 57037
+2467 2283 23310
+2468 2283 65245
+2470 2283 33512
+2471 2283 28398
+2472 2283 5013
+2473 2283 57955
+2474 2283 41948
+2475 2283 31363
+2476 2283 63399
+2477 2283 21941
+2478 2283 35543
+2479 2283 30441
+2481 2283 7819
+2482 2283 27659
+2483 2283 11523
+2484 2283 514
+2485 2283 2567
+2486 2283 36725
+2487 2283 3632
+2488 2283 48456
+2489 2283 44006
+2490 2283 37432
+2491 2283 3566
+2493 2283 57557
+2494 2283 48513
+2495 2283 2597
+2496 2283 46605
+2497 2283 63813
+2498 2283 27088
+2499 2283 43124
+2500 2283 335
+2501 2283 44576
+2502 2283 20040
+2503 2283 14655
+2504 2283 44572
+2505 2283 55338
+2506 2283 6765
+2507 2283 56043
+2508 2283 49660
+2509 2283 9465
+2510 2283 29
+2511 2283 17287
+4794 2283 27852657
+2238 2284 1
+2297 2284 15228
+2355 2284 43314
+2356 2284 26838
+2357 2284 26838
+2375 2284 11497
+2383 2284 48360
+2389 2284 8626
+2390 2284 59094
+2392 2284 50549
+2395 2284 62994
+2396 2284 62994
+2397 2284 62994
+2398 2284 64547
+2399 2284 10956
+2400 2284 42790
+2401 2284 63466
+2404 2284 30653
+2405 2284 60712
+2406 2284 60712
+2407 2284 58185
+2408 2284 60712
+2409 2284 64547
+2410 2284 10956
+2411 2284 42790
+2412 2284 63466
+2413 2284 48392
+2415 2284 30653
+2416 2284 60712
+2417 2284 60712
+2418 2284 58185
+2419 2284 55903
+2420 2284 60712
+2422 2284 4809
+2423 2284 4809
+2424 2284 47592
+2425 2284 22589
+2426 2284 17780
+2427 2284 2566
+2428 2284 41247
+2429 2284 42056
+2430 2284 24276
+2431 2284 2566
+2432 2284 41247
+2433 2284 43083
+2434 2284 29878
+2435 2284 5602
+2436 2284 7191
+2437 2284 6506
+2438 2284 52676
+2439 2284 31701
+2440 2284 63088
+2441 2284 57486
+2444 2284 52094
+2445 2284 28531
+2446 2284 22682
+2447 2284 49550
+2451 2284 19079
+2452 2284 61037
+2453 2284 55188
+2454 2284 47892
+2455 2284 62581
+2456 2284 62581
+2457 2284 4358
+2458 2284 46061
+2460 2284 49531
+2461 2284 20587
+2462 2284 47239
+2463 2284 5433
+2464 2284 25489
+2465 2284 28429
+2466 2284 18569
+2467 2284 58403
+2468 2284 17365
+2470 2284 49737
+2471 2284 1863
+2472 2284 52963
+2473 2284 8673
+2474 2284 43540
+2475 2284 15111
+2476 2284 27217
+2477 2284 14263
+2478 2284 58512
+2479 2284 8280
+2481 2284 19972
+2482 2284 40318
+2483 2284 34966
+2484 2284 47978
+2485 2284 35018
+2486 2284 19907
+2487 2284 51625
+2488 2284 52637
+2489 2284 2536
+2490 2284 15772
+2491 2284 59822
+2493 2284 29063
+2494 2284 34241
+2495 2284 39258
+2496 2284 19928
+2497 2284 7425
+2498 2284 53039
+2499 2284 37342
+2500 2284 22988
+2501 2284 35680
+2502 2284 25695
+2503 2284 54973
+2504 2284 42837
+2505 2284 55891
+2506 2284 64693
+2507 2284 45746
+2508 2284 40038
+2509 2284 59355
+2510 2284 5783
+2511 2284 16280
+4795 2284 27852657
+2239 2285 1
+2283 2285 65520
+2284 2285 4601
+2285 2285 30678
+2286 2285 30678
+2294 2285 1
+2349 2285 65520
+2350 2285 4601
+2351 2285 30678
+2352 2285 30678
+2354 2285 4602
+2355 2285 55441
+2356 2285 30678
+2390 2285 53758
+2400 2285 53758
+2401 2285 15116
+2411 2285 53758
+2412 2285 15116
+2413 2285 15116
+2422 2285 5041
+2423 2285 5041
+2424 2285 49141
+2425 2285 40376
+2426 2285 35335
+2427 2285 20160
+2428 2285 53688
+2429 2285 43881
+2430 2285 8546
+2431 2285 9240
+2432 2285 42768
+2433 2285 47150
+2434 2285 45506
+2435 2285 36960
+2436 2285 9240
+2437 2285 42768
+2438 2285 50930
+2439 2285 27865
+2440 2285 61320
+2441 2285 24360
+2468 2285 63417
+2478 2285 63417
+2479 2285 20568
+2489 2285 24988
+2490 2285 36536
+2491 2285 14696
+2499 2285 27300
+2500 2285 51227
+2501 2285 50132
+2502 2285 57266
+2503 2285 26041
+2504 2285 15646
+2510 2285 63312
+2511 2285 43544
+4796 2285 27852657
+2240 2286 1
+2241 2286 58625
+2242 2286 58625
+2247 2286 55634
+2253 2286 64275
+2254 2286 15570
+2255 2286 29124
+2256 2286 51217
+2257 2286 51217
+2258 2286 13107
+2259 2286 36174
+2261 2286 40100
+2262 2286 57832
+2263 2286 10314
+2264 2286 30673
+2265 2286 12012
+2266 2286 26316
+2267 2286 13794
+2268 2286 45490
+2269 2286 45490
+2271 2286 10569
+2272 2286 16405
+2273 2286 54955
+2274 2286 4621
+2275 2286 22143
+2276 2286 61348
+2322 2286 48612
+2323 2286 60162
+2324 2286 60162
+2325 2286 46881
+2327 2286 45909
+2328 2286 5978
+2329 2286 62848
+2330 2286 7017
+2331 2286 39555
+2341 2286 43728
+2388 2286 60919
+2389 2286 64670
+2390 2286 64670
+2391 2286 26612
+2392 2286 3030
+2394 2286 52523
+2395 2286 33011
+2396 2286 34500
+2397 2286 20355
+2407 2286 28024
+2418 2286 49817
+2466 2286 31410
+2467 2286 7226
+2468 2286 7226
+2469 2286 46412
+2470 2286 45069
+2471 2286 22759
+2472 2286 58383
+2473 2286 17340
+2474 2286 10377
+2475 2286 35018
+2485 2286 30736
+2496 2286 13440
+2508 2286 58577
+4797 2286 27852657
+2241 2287 1
+2242 2287 1
+2297 2287 1
+2324 2287 32766
+2334 2287 32766
+2335 2287 32766
+2368 2287 65520
+2375 2287 65520
+2383 2287 65520
+2390 2287 10
+2392 2287 2
+2400 2287 32764
+2401 2287 32764
+2411 2287 65519
+2412 2287 65519
+2413 2287 65518
+2446 2287 40949
+2447 2287 65515
+2453 2287 40949
+2454 2287 65515
+2461 2287 40949
+2462 2287 65515
+2468 2287 16377
+2470 2287 8195
+2471 2287 57327
+2478 2287 57328
+2479 2287 57328
+2481 2287 8191
+2489 2287 8188
+2490 2287 8188
+2491 2287 16382
+2501 2287 53236
+2502 2287 53236
+2503 2287 40951
+2504 2287 53235
+2505 2287 65520
+2506 2287 65520
+2507 2287 65520
+2508 2287 12285
+2509 2287 14337
+2510 2287 32763
+2511 2287 19446
+4798 2287 27852657
+2243 2288 1
+2508 2288 65520
+4799 2288 27852657
+2244 2289 1
+2245 2289 1
+2246 2289 1
+2247 2289 1
+2248 2289 1
+2252 2289 1
+2253 2289 1
+2254 2289 1
+2255 2289 1
+2261 2289 1
+2262 2289 1
+2263 2289 1
+2271 2289 1
+2272 2289 1
+2327 2289 1
+2472 2289 32761
+2473 2289 32761
+2474 2289 32761
+2475 2289 32761
+2485 2289 32761
+2496 2289 32761
+2508 2289 24573
+4800 2289 27852657
+2245 2290 1
+2269 2290 1
+2300 2290 1
+2308 2290 65520
+2324 2290 2
+2334 2290 1
+2366 2290 1
+2368 2290 32759
+2374 2290 65520
+2375 2290 32758
+2383 2290 32759
+2390 2290 1
+2392 2290 32760
+2400 2290 1
+2401 2290 32759
+2412 2290 32759
+2413 2290 65518
+2444 2290 8195
+2445 2290 12289
+2446 2290 40952
+2447 2290 40952
+2451 2290 40955
+2452 2290 45049
+2453 2290 8191
+2454 2290 8191
+2460 2290 23209
+2461 2290 51872
+2462 2290 51872
+2468 2290 16378
+2470 2290 40952
+2471 2290 40952
+2478 2290 16378
+2479 2290 12280
+2481 2290 40952
+2489 2290 45044
+2490 2290 28663
+2491 2290 40954
+2501 2290 63473
+2502 2290 38903
+2503 2290 53236
+2504 2290 53236
+2505 2290 32762
+2506 2290 8190
+2507 2290 20476
+2508 2290 2732
+2509 2290 2732
+2510 2290 29347
+2511 2290 59382
+4801 2290 27852657
+2246 2291 1
+2247 2291 57589
+2253 2291 26020
+2254 2291 22286
+2255 2291 14366
+2256 2291 57570
+2257 2291 57570
+2258 2291 7814
+2259 2291 24449
+2261 2291 36151
+2262 2291 31012
+2263 2291 53853
+2264 2291 6662
+2265 2291 34880
+2266 2291 42831
+2267 2291 65470
+2268 2291 52325
+2269 2291 52325
+2271 2291 57470
+2272 2291 43430
+2273 2291 31637
+2274 2291 34779
+2275 2291 54413
+2276 2291 11582
+2322 2291 22247
+2323 2291 58697
+2324 2291 58697
+2325 2291 19109
+2327 2291 46787
+2328 2291 25087
+2329 2291 45373
+2330 2291 43376
+2331 2291 53982
+2341 2291 42400
+2388 2291 54026
+2389 2291 28423
+2390 2291 28423
+2391 2291 31973
+2392 2291 29874
+2394 2291 29149
+2395 2291 62547
+2396 2291 23177
+2397 2291 9621
+2407 2291 33569
+2418 2291 56690
+2466 2291 44831
+2467 2291 23820
+2468 2291 23820
+2469 2291 15271
+2470 2291 44244
+2471 2291 60014
+2472 2291 47262
+2473 2291 22343
+2474 2291 44069
+2475 2291 60873
+2485 2291 4112
+2496 2291 64382
+2508 2291 17319
+4802 2291 27852657
+2247 2292 1
+2248 2292 1
+2310 2292 65520
+2319 2292 19780
+2320 2292 19780
+2321 2292 19780
+2328 2292 19780
+2329 2292 19780
+2330 2292 39560
+2331 2292 19780
+2338 2292 19780
+2339 2292 19780
+2340 2292 39560
+2341 2292 39560
+2342 2292 19780
+2377 2292 40987
+2378 2292 40987
+2385 2292 60767
+2386 2292 36233
+2387 2292 60767
+2392 2292 46788
+2394 2292 60767
+2395 2292 16453
+2396 2292 36233
+2397 2292 40987
+2404 2292 49640
+2405 2292 5326
+2406 2292 44886
+2407 2292 25106
+2408 2292 49640
+2415 2292 29860
+2416 2292 51067
+2417 2292 5326
+2418 2292 51067
+2419 2292 39940
+2420 2292 10080
+2455 2292 14213
+2456 2292 14213
+2463 2292 14835
+2464 2292 29051
+2465 2292 14838
+2470 2292 26278
+2471 2292 26278
+2472 2292 43816
+2473 2292 58340
+2474 2292 35474
+2475 2292 20636
+2481 2292 48118
+2482 2292 10844
+2483 2292 25368
+2484 2292 45461
+2485 2292 51262
+2486 2292 30626
+2493 2292 34649
+2494 2292 53686
+2495 2292 8258
+2496 2292 4791
+2497 2292 29921
+2498 2292 64816
+2505 2292 27713
+2506 2292 24353
+2507 2292 18869
+2508 2292 43492
+2509 2292 34372
+2510 2292 64400
+2511 2292 41957
+4803 2292 27852657
+2248 2293 1
+2392 2293 17472
+2395 2293 41439
+2396 2293 41439
+2397 2293 41439
+2398 2293 17998
+2399 2293 17998
+2400 2293 17998
+2401 2293 17998
+2404 2293 50846
+2405 2293 30270
+2406 2293 30270
+2407 2293 6188
+2408 2293 30270
+2409 2293 17998
+2410 2293 17998
+2411 2293 17998
+2412 2293 17998
+2413 2293 17998
+2415 2293 50846
+2416 2293 30270
+2417 2293 30270
+2418 2293 6188
+2419 2293 60540
+2420 2293 30270
+2447 2293 56197
+2451 2293 12146
+2452 2293 12146
+2453 2293 12146
+2454 2293 60256
+2455 2293 35444
+2456 2293 35444
+2457 2293 53713
+2458 2293 53713
+2460 2293 22699
+2461 2293 22699
+2462 2293 37067
+2463 2293 47619
+2464 2293 37753
+2465 2293 2309
+2466 2293 9583
+2467 2293 9583
+2468 2293 9583
+2470 2293 4580
+2471 2293 31075
+2472 2293 63592
+2473 2293 49854
+2474 2293 22351
+2475 2293 20042
+2476 2293 15977
+2477 2293 15977
+2478 2293 15977
+2479 2293 15977
+2481 2293 20658
+2482 2293 51983
+2483 2293 63537
+2484 2293 56480
+2485 2293 47930
+2486 2293 27888
+2487 2293 47476
+2488 2293 47476
+2489 2293 47476
+2490 2293 47476
+2491 2293 47476
+2493 2293 42475
+2494 2293 57959
+2495 2293 21498
+2496 2293 7475
+2497 2293 21898
+2498 2293 59531
+2499 2293 55749
+2500 2293 55749
+2501 2293 55749
+2502 2293 55749
+2503 2293 55749
+2504 2293 57303
+2505 2293 26529
+2506 2293 13041
+2507 2293 25785
+2508 2293 3172
+2509 2293 45806
+2510 2293 11260
+2511 2293 40362
+4804 2293 27852657
+2249 2294 1
+2257 2294 65520
+2266 2294 1
+2274 2294 25194
+2275 2294 49194
+2276 2294 49193
+2304 2294 7799
+2312 2294 57722
+2321 2294 7799
+2331 2294 44898
+2338 2294 270
+2339 2294 33706
+2340 2294 63656
+2341 2294 19475
+2342 2294 23770
+2370 2294 25243
+2378 2294 40278
+2387 2294 25243
+2397 2294 34381
+2408 2294 11888
+2417 2294 44516
+2418 2294 51766
+2419 2294 47867
+2420 2294 59749
+2448 2294 44736
+2455 2294 14447
+2456 2294 35232
+2457 2294 42720
+2458 2294 42720
+2460 2294 5103
+2461 2294 5103
+2462 2294 5103
+2463 2294 19757
+2464 2294 46798
+2465 2294 11566
+2466 2294 7059
+2467 2294 7059
+2468 2294 7059
+2470 2294 25712
+2471 2294 25712
+2472 2294 26472
+2473 2294 12379
+2474 2294 29683
+2475 2294 64629
+2476 2294 1072
+2477 2294 1072
+2478 2294 1072
+2479 2294 1072
+2481 2294 40315
+2482 2294 31177
+2483 2294 59146
+2484 2294 24606
+2485 2294 40750
+2486 2294 900
+2487 2294 47299
+2488 2294 47299
+2489 2294 47299
+2490 2294 47299
+2491 2294 47299
+2493 2294 857
+2494 2294 53867
+2495 2294 30710
+2496 2294 6488
+2497 2294 64549
+2498 2294 48406
+2499 2294 31354
+2500 2294 31354
+2501 2294 31354
+2502 2294 31354
+2503 2294 31354
+2504 2294 31354
+2505 2294 27680
+2506 2294 34326
+2507 2294 23519
+2508 2294 25789
+2509 2294 10321
+2510 2294 40165
+2511 2294 23344
+4805 2294 27852657
+2250 2295 1
+2258 2295 1
+2259 2295 1
+2267 2295 1
+2268 2295 1
+2269 2295 1
+2322 2295 1
+2323 2295 1
+2324 2295 1
+2325 2295 1
+2388 2295 1
+2389 2295 1
+2390 2295 1
+2391 2295 1
+2392 2295 1
+2466 2295 32761
+2467 2295 32761
+2468 2295 32761
+2469 2295 32761
+2470 2295 32761
+2471 2295 32761
+2508 2295 24573
+4806 2295 27852657
+2251 2296 1
+2508 2296 65520
+4807 2296 27852657
+2252 2297 1
+2455 2297 58226
+2456 2297 58226
+2457 2297 50318
+2458 2297 50318
+2460 2297 22624
+2461 2297 22624
+2462 2297 22624
+2463 2297 9520
+2464 2297 40147
+2465 2297 47442
+2466 2297 46532
+2467 2297 46532
+2468 2297 46532
+2470 2297 39237
+2471 2297 39237
+2472 2297 41565
+2473 2297 12173
+2474 2297 1511
+2475 2297 19590
+2476 2297 52158
+2477 2297 52158
+2478 2297 52158
+2479 2297 52158
+2481 2297 51084
+2482 2297 59962
+2483 2297 14545
+2484 2297 19350
+2485 2297 16768
+2486 2297 62699
+2487 2297 54420
+2488 2297 54420
+2489 2297 54420
+2490 2297 54420
+2491 2297 54420
+2493 2297 27048
+2494 2297 59216
+2495 2297 43674
+2496 2297 34128
+2497 2297 63812
+2498 2297 1113
+2499 2297 27587
+2500 2297 27587
+2501 2297 27587
+2502 2297 27587
+2503 2297 27587
+2504 2297 27587
+2505 2297 27102
+2506 2297 43546
+2507 2297 33156
+2508 2297 56060
+2509 2297 35356
+2510 2297 7864
+2511 2297 45047
+4808 2297 27852657
+2253 2298 1
+2506 2298 65520
+4809 2298 27852657
+2254 2299 1
+2255 2299 1
+2310 2299 1
+2319 2299 10701
+2320 2299 10701
+2321 2299 10701
+2328 2299 10701
+2329 2299 10701
+2330 2299 21402
+2331 2299 10701
+2338 2299 10701
+2339 2299 10701
+2340 2299 21402
+2341 2299 21402
+2342 2299 10701
+2377 2299 60363
+2378 2299 60363
+2385 2299 5543
+2386 2299 385
+2387 2299 5543
+2392 2299 37086
+2394 2299 5543
+2395 2299 30866
+2396 2299 41567
+2397 2299 36024
+2404 2299 41993
+2405 2299 1795
+2406 2299 23197
+2407 2299 53678
+2408 2299 17654
+2415 2299 31292
+2416 2299 56615
+2417 2299 1795
+2418 2299 32276
+2419 2299 3205
+2420 2299 61773
+2455 2299 38289
+2456 2299 38289
+2463 2299 55758
+2464 2299 28523
+2465 2299 55755
+2470 2299 6181
+2471 2299 6181
+2472 2299 55758
+2473 2299 61830
+2474 2299 9140
+2475 2299 18906
+2481 2299 6181
+2482 2299 42601
+2483 2299 48673
+2484 2299 479
+2485 2299 29151
+2486 2299 10245
+2493 2299 44036
+2494 2299 21537
+2495 2299 38864
+2496 2299 31925
+2497 2299 32777
+2498 2299 22532
+2505 2299 36609
+2506 2299 10960
+2507 2299 36691
+2508 2299 31323
+2509 2299 28278
+2510 2299 14994
+2511 2299 12751
+4810 2299 27852657
+2255 2300 1
+2392 2300 44666
+2395 2300 6705
+2396 2300 6705
+2397 2300 6705
+2398 2300 25916
+2399 2300 25916
+2400 2300 25916
+2401 2300 25916
+2404 2300 15602
+2405 2300 40274
+2406 2300 40274
+2407 2300 46979
+2408 2300 40274
+2409 2300 25916
+2410 2300 25916
+2411 2300 25916
+2412 2300 25916
+2413 2300 25916
+2415 2300 15602
+2416 2300 40274
+2417 2300 40274
+2418 2300 46979
+2419 2300 15027
+2420 2300 40274
+2447 2300 39202
+2451 2300 36446
+2452 2300 36446
+2453 2300 36446
+2454 2300 21206
+2455 2300 55236
+2456 2300 55236
+2457 2300 5670
+2458 2300 5670
+2460 2300 16549
+2461 2300 16549
+2462 2300 2100
+2463 2300 40547
+2464 2300 35024
+2465 2300 45309
+2466 2300 43840
+2467 2300 43840
+2468 2300 43840
+2470 2300 10059
+2471 2300 29789
+2472 2300 59414
+2473 2300 58321
+2474 2300 9245
+2475 2300 29457
+2476 2300 19795
+2477 2300 19795
+2478 2300 19795
+2479 2300 19795
+2481 2300 51547
+2482 2300 21984
+2483 2300 64299
+2484 2300 47740
+2485 2300 37791
+2486 2300 8334
+2487 2300 13559
+2488 2300 13559
+2489 2300 13559
+2490 2300 13559
+2491 2300 13559
+2493 2300 2866
+2494 2300 41438
+2495 2300 43393
+2496 2300 14569
+2497 2300 4322
+2498 2300 61509
+2499 2300 29862
+2500 2300 29862
+2501 2300 29862
+2502 2300 29862
+2503 2300 29862
+2504 2300 1488
+2505 2300 482
+2506 2300 16234
+2507 2300 26902
+2508 2300 26947
+2509 2300 61540
+2510 2300 28482
+2511 2300 1911
+4811 2300 27852657
+2256 2301 1
+2257 2301 1
+2266 2301 65520
+2274 2301 43444
+2275 2301 3345
+2276 2301 3346
+2331 2301 32490
+2337 2301 46806
+2338 2301 27978
+2339 2301 50055
+2340 2301 52403
+2341 2301 49557
+2342 2301 20413
+2397 2301 338
+2408 2301 26118
+2416 2301 11834
+2417 2301 24451
+2418 2301 11370
+2419 2301 14336
+2420 2301 8631
+2455 2301 13143
+2456 2301 13143
+2457 2301 39232
+2458 2301 39232
+2460 2301 42044
+2461 2301 42044
+2462 2301 42044
+2463 2301 34607
+2464 2301 59127
+2465 2301 45984
+2466 2301 33280
+2467 2301 33280
+2468 2301 33280
+2470 2301 50628
+2471 2301 50628
+2472 2301 65428
+2473 2301 57152
+2474 2301 8406
+2475 2301 22466
+2476 2301 26653
+2477 2301 26653
+2478 2301 26653
+2479 2301 26653
+2481 2301 57457
+2482 2301 19997
+2483 2301 56171
+2484 2301 25825
+2485 2301 28407
+2486 2301 49207
+2487 2301 11830
+2488 2301 11830
+2489 2301 11830
+2490 2301 11830
+2491 2301 11830
+2493 2301 54461
+2494 2301 61196
+2495 2301 22270
+2496 2301 52754
+2497 2301 35133
+2498 2301 46094
+2499 2301 36205
+2500 2301 36205
+2501 2301 36205
+2502 2301 36205
+2503 2301 36205
+2504 2301 36205
+2505 2301 61785
+2506 2301 6140
+2507 2301 11004
+2508 2301 4200
+2509 2301 47429
+2510 2301 26106
+2511 2301 20610
+4812 2301 27852657
+2258 2302 1
+2267 2302 1
+2332 2302 65520
+2375 2302 40739
+2383 2302 9784
+2389 2302 55591
+2390 2302 28826
+2392 2302 17245
+2395 2302 31843
+2396 2302 31843
+2397 2302 31843
+2398 2302 57609
+2399 2302 40625
+2400 2302 13860
+2401 2302 5374
+2404 2302 36785
+2405 2302 57879
+2406 2302 57879
+2407 2302 24201
+2408 2302 57879
+2409 2302 57610
+2410 2302 40625
+2411 2302 13860
+2412 2302 5374
+2413 2302 63694
+2415 2302 36785
+2416 2302 57879
+2417 2302 57879
+2418 2302 24201
+2419 2302 50237
+2420 2302 57879
+2446 2302 40206
+2447 2302 40597
+2451 2302 32490
+2452 2302 32490
+2453 2302 7175
+2454 2302 3626
+2455 2302 61286
+2456 2302 61286
+2457 2302 58535
+2458 2302 3007
+2460 2302 30081
+2461 2302 32014
+2462 2302 7663
+2463 2302 26668
+2464 2302 10787
+2465 2302 15022
+2466 2302 26313
+2467 2302 38139
+2468 2302 2836
+2470 2302 29880
+2471 2302 33286
+2472 2302 24317
+2473 2302 44034
+2474 2302 35945
+2475 2302 20923
+2476 2302 58486
+2477 2302 41647
+2478 2302 6344
+2479 2302 20949
+2481 2302 13015
+2482 2302 48464
+2483 2302 45444
+2484 2302 20661
+2485 2302 34160
+2486 2302 13237
+2487 2302 31974
+2488 2302 47856
+2489 2302 7133
+2490 2302 42484
+2491 2302 65138
+2493 2302 43142
+2494 2302 33892
+2495 2302 44243
+2496 2302 10207
+2497 2302 59956
+2498 2302 46719
+2499 2302 28140
+2500 2302 64613
+2501 2302 20029
+2502 2302 20029
+2503 2302 9789
+2504 2302 53917
+2505 2302 36576
+2506 2302 29205
+2507 2302 50185
+2508 2302 9792
+2509 2302 57545
+2510 2302 59897
+2511 2302 24642
+4813 2302 27852657
+2259 2303 1
+2268 2303 1
+2333 2303 65520
+2375 2303 21592
+2383 2303 232
+2389 2303 9930
+2390 2303 56896
+2392 2303 55655
+2395 2303 7640
+2396 2303 7640
+2397 2303 7640
+2398 2303 20167
+2399 2303 37151
+2400 2303 36222
+2401 2303 40663
+2404 2303 11419
+2405 2303 55953
+2406 2303 55953
+2407 2303 63593
+2408 2303 55953
+2409 2303 20167
+2410 2303 37152
+2411 2303 36222
+2412 2303 40663
+2413 2303 59136
+2415 2303 11419
+2416 2303 55953
+2417 2303 55953
+2418 2303 63593
+2419 2303 46385
+2420 2303 55953
+2444 2303 6687
+2445 2303 6687
+2446 2303 8819
+2447 2303 8473
+2451 2303 33479
+2452 2303 33479
+2453 2303 35611
+2454 2303 8756
+2455 2303 33514
+2456 2303 33514
+2457 2303 2957
+2458 2303 58485
+2460 2303 38345
+2461 2303 26926
+2462 2303 29036
+2463 2303 45387
+2464 2303 40286
+2465 2303 6772
+2466 2303 13792
+2467 2303 1966
+2468 2303 58496
+2470 2303 49204
+2471 2303 14016
+2472 2303 31548
+2473 2303 39285
+2474 2303 26461
+2475 2303 19689
+2476 2303 23302
+2477 2303 40141
+2478 2303 29989
+2479 2303 56635
+2481 2303 28204
+2482 2303 58810
+2483 2303 29199
+2484 2303 25192
+2485 2303 10884
+2486 2303 56716
+2487 2303 1182
+2488 2303 50821
+2489 2303 8655
+2490 2303 40442
+2491 2303 34336
+2493 2303 45739
+2494 2303 48144
+2495 2303 52795
+2496 2303 33629
+2497 2303 22748
+2498 2303 31553
+2499 2303 64653
+2500 2303 28180
+2501 2303 25239
+2502 2303 25239
+2503 2303 245
+2504 2303 48166
+2505 2303 56882
+2506 2303 26769
+2507 2303 55171
+2508 2303 34448
+2509 2303 64485
+2510 2303 46176
+2511 2303 9808
+4814 2303 27852657
+2260 2304 1
+2508 2304 65520
+4815 2304 27852657
+2261 2305 1
+2507 2305 65520
+4816 2305 27852657
+2262 2306 1
+2263 2306 1
+2271 2306 1
+2272 2306 1
+2319 2306 35040
+2320 2306 35040
+2321 2306 35040
+2327 2306 1
+2328 2306 35040
+2329 2306 35040
+2330 2306 4559
+2331 2306 35040
+2338 2306 35040
+2339 2306 35040
+2340 2306 4559
+2341 2306 4559
+2342 2306 35040
+2377 2306 39772
+2378 2306 39772
+2385 2306 9291
+2386 2306 49063
+2387 2306 9291
+2392 2306 37086
+2394 2306 9291
+2395 2306 38362
+2396 2306 7881
+2397 2306 64111
+2404 2306 49489
+2405 2306 13039
+2406 2306 17598
+2407 2306 6897
+2408 2306 8307
+2415 2306 14449
+2416 2306 43520
+2417 2306 13039
+2418 2306 2338
+2419 2306 42536
+2420 2306 3748
+2455 2306 29399
+2456 2306 29399
+2463 2306 11308
+2464 2306 40707
+2465 2306 11308
+2470 2306 6181
+2471 2306 6181
+2472 2306 11308
+2473 2306 7092
+2474 2306 17127
+2475 2306 5819
+2481 2306 6181
+2482 2306 2836
+2483 2306 64141
+2484 2306 26721
+2485 2306 21229
+2486 2306 15410
+2493 2306 26736
+2494 2306 56659
+2495 2306 19239
+2496 2306 58626
+2497 2306 43564
+2498 2306 28154
+2505 2306 39420
+2506 2306 1018
+2507 2306 46292
+2508 2306 36593
+2509 2306 36471
+2510 2306 14057
+2511 2306 45043
+4817 2306 27852657
+2263 2307 1
+2272 2307 1
+2337 2307 65520
+2392 2307 53121
+2395 2307 1948
+2396 2307 1948
+2397 2307 1948
+2398 2307 236
+2399 2307 236
+2400 2307 236
+2401 2307 236
+2404 2307 46927
+2405 2307 44809
+2406 2307 44809
+2407 2307 46757
+2408 2307 44809
+2409 2307 236
+2410 2307 236
+2411 2307 236
+2412 2307 236
+2413 2307 236
+2415 2307 46927
+2416 2307 44809
+2417 2307 44809
+2418 2307 46757
+2419 2307 24097
+2420 2307 44809
+2447 2307 1044
+2451 2307 37196
+2452 2307 37196
+2453 2307 37196
+2454 2307 24950
+2455 2307 53156
+2456 2307 53156
+2457 2307 42839
+2458 2307 42839
+2460 2307 6393
+2461 2307 6393
+2462 2307 55400
+2463 2307 1314
+2464 2307 10869
+2465 2307 23234
+2466 2307 44299
+2467 2307 44299
+2468 2307 44299
+2470 2307 34458
+2471 2307 23319
+2472 2307 46092
+2473 2307 16966
+2474 2307 21948
+2475 2307 64235
+2476 2307 21579
+2477 2307 21579
+2478 2307 21579
+2479 2307 21579
+2481 2307 50349
+2482 2307 49
+2483 2307 24186
+2484 2307 34987
+2485 2307 57048
+2486 2307 58334
+2487 2307 26164
+2488 2307 26164
+2489 2307 26164
+2490 2307 26164
+2491 2307 26164
+2493 2307 32257
+2494 2307 57600
+2495 2307 21818
+2496 2307 17202
+2497 2307 1070
+2498 2307 8257
+2499 2307 46528
+2500 2307 46528
+2501 2307 46528
+2502 2307 46528
+2503 2307 46528
+2504 2307 46354
+2505 2307 32969
+2506 2307 60879
+2507 2307 56348
+2508 2307 53172
+2509 2307 3125
+2510 2307 7855
+2511 2307 666
+4818 2307 27852657
+2264 2308 1
+2274 2308 54365
+2275 2308 65168
+2276 2308 65168
+2331 2308 54898
+2337 2308 50484
+2338 2308 47291
+2339 2308 58447
+2340 2308 45292
+2341 2308 60330
+2342 2308 5079
+2397 2308 5111
+2408 2308 11230
+2416 2308 37618
+2417 2308 40025
+2418 2308 41008
+2419 2308 3814
+2420 2308 63184
+2455 2308 19800
+2456 2308 19800
+2457 2308 25297
+2458 2308 25297
+2460 2308 27456
+2461 2308 27456
+2462 2308 27456
+2463 2308 7413
+2464 2308 44640
+2465 2308 24840
+2466 2308 48715
+2467 2308 48715
+2468 2308 48715
+2470 2308 14484
+2471 2308 14484
+2472 2308 53495
+2473 2308 19857
+2474 2308 25491
+2475 2308 44130
+2476 2308 44340
+2477 2308 44340
+2478 2308 44340
+2479 2308 44340
+2481 2308 51431
+2482 2308 56803
+2483 2308 49567
+2484 2308 2368
+2485 2308 22248
+2486 2308 9324
+2487 2308 2728
+2488 2308 2728
+2489 2308 2728
+2490 2308 2728
+2491 2308 2728
+2493 2308 39222
+2494 2308 47325
+2495 2308 53801
+2496 2308 27977
+2497 2308 32523
+2498 2308 23722
+2499 2308 16269
+2500 2308 16269
+2501 2308 16269
+2502 2308 16269
+2503 2308 16269
+2504 2308 16269
+2505 2308 8734
+2506 2308 53263
+2507 2308 17396
+2508 2308 23113
+2509 2308 8058
+2510 2308 33021
+2511 2308 64137
+4819 2308 27852657
+2265 2309 1
+2266 2309 1
+2274 2309 60713
+2275 2309 21040
+2276 2309 21039
+2331 2309 63116
+2337 2309 63788
+2338 2309 7439
+2339 2309 12247
+2340 2309 25418
+2341 2309 5015
+2342 2309 28459
+2397 2309 19234
+2408 2309 59752
+2416 2309 51039
+2417 2309 65471
+2418 2309 19774
+2419 2309 28194
+2420 2309 62422
+2455 2309 28201
+2456 2309 28201
+2457 2309 7167
+2458 2309 7167
+2460 2309 30653
+2461 2309 30653
+2462 2309 30653
+2463 2309 14117
+2464 2309 38146
+2465 2309 9945
+2466 2309 52575
+2467 2309 52575
+2468 2309 52575
+2470 2309 35116
+2471 2309 35116
+2472 2309 368
+2473 2309 51764
+2474 2309 34875
+2475 2309 26132
+2476 2309 15419
+2477 2309 15419
+2478 2309 15419
+2479 2309 15419
+2481 2309 29000
+2482 2309 65087
+2483 2309 13491
+2484 2309 54846
+2485 2309 54247
+2486 2309 64762
+2487 2309 13314
+2488 2309 13314
+2489 2309 13314
+2490 2309 13314
+2491 2309 13314
+2493 2309 21285
+2494 2309 63636
+2495 2309 58367
+2496 2309 14573
+2497 2309 14689
+2498 2309 34570
+2499 2309 60907
+2500 2309 60907
+2501 2309 60907
+2502 2309 60907
+2503 2309 60907
+2504 2309 60907
+2505 2309 55240
+2506 2309 57879
+2507 2309 60898
+2508 2309 8104
+2509 2309 22686
+2510 2309 41094
+2511 2309 56139
+4820 2309 27852657
+2267 2310 1
+2268 2310 1
+2274 2310 25927
+2275 2310 57482
+2276 2310 57482
+2331 2310 29438
+2334 2310 1
+2337 2310 3114
+2338 2310 32276
+2339 2310 6349
+2340 2310 29610
+2341 2310 4171
+2342 2310 32215
+2397 2310 40607
+2408 2310 27567
+2416 2310 65303
+2417 2310 14582
+2418 2310 26763
+2419 2310 56553
+2420 2310 61201
+2446 2310 454
+2452 2310 36229
+2453 2310 54927
+2454 2310 1144
+2455 2310 7535
+2456 2310 7535
+2457 2310 50241
+2458 2310 6922
+2460 2310 6948
+2461 2310 17591
+2462 2310 30422
+2463 2310 41133
+2464 2310 56915
+2465 2310 49380
+2466 2310 21100
+2467 2310 37567
+2468 2310 23766
+2470 2310 679
+2471 2310 18093
+2472 2310 3321
+2473 2310 38189
+2474 2310 37780
+2475 2310 36922
+2476 2310 21459
+2477 2310 35013
+2478 2310 4625
+2479 2310 56392
+2481 2310 2172
+2482 2310 29917
+2483 2310 26508
+2484 2310 15056
+2485 2310 29597
+2486 2310 25826
+2487 2310 53600
+2488 2310 43400
+2489 2310 49493
+2490 2310 30510
+2491 2310 52286
+2493 2310 28251
+2494 2310 35502
+2495 2310 24166
+2496 2310 8119
+2497 2310 29945
+2498 2310 44026
+2499 2310 56948
+2500 2310 43408
+2501 2310 48175
+2502 2310 16217
+2503 2310 4879
+2504 2310 19167
+2505 2310 14942
+2506 2310 27367
+2507 2310 753
+2508 2310 42253
+2509 2310 48931
+2510 2310 12705
+2511 2310 51890
+4821 2310 27852657
+2268 2311 1
+2274 2311 26954
+2275 2311 38996
+2276 2311 38996
+2331 2311 65149
+2338 2311 44187
+2339 2311 56625
+2340 2311 37368
+2341 2311 31994
+2342 2311 5841
+2397 2311 45901
+2408 2311 10522
+2417 2311 15876
+2418 2311 13638
+2419 2311 20749
+2420 2311 16068
+2446 2311 28332
+2453 2311 25865
+2454 2311 16981
+2455 2311 50893
+2456 2311 50893
+2457 2311 20073
+2458 2311 9057
+2460 2311 33789
+2461 2311 19956
+2462 2311 60259
+2463 2311 57299
+2464 2311 21352
+2465 2311 35980
+2466 2311 33637
+2467 2311 36435
+2468 2311 33019
+2470 2311 33903
+2471 2311 20899
+2472 2311 47346
+2473 2311 35965
+2474 2311 7523
+2475 2311 20687
+2476 2311 58460
+2477 2311 64285
+2478 2311 29118
+2479 2311 29118
+2481 2311 8268
+2482 2311 32375
+2483 2311 52953
+2484 2311 15234
+2485 2311 42618
+2486 2311 9395
+2487 2311 7848
+2488 2311 63565
+2489 2311 41449
+2490 2311 41449
+2491 2311 60814
+2493 2311 54419
+2494 2311 18811
+2495 2311 12553
+2496 2311 60483
+2497 2311 13854
+2498 2311 46390
+2499 2311 16453
+2500 2311 49210
+2501 2311 23573
+2502 2311 23573
+2503 2311 42237
+2504 2311 28774
+2505 2311 14960
+2506 2311 24310
+2507 2311 23118
+2508 2311 17336
+2509 2311 59527
+2510 2311 34371
+2511 2311 41592
+4822 2311 27852657
+2269 2312 1
+2334 2312 65520
+2374 2312 9853
+2375 2312 23304
+2383 2312 49085
+2390 2312 25700
+2392 2312 15471
+2395 2312 54419
+2396 2312 54419
+2397 2312 54419
+2398 2312 34666
+2399 2312 34666
+2400 2312 42740
+2401 2312 15027
+2404 2312 20606
+2405 2312 2942
+2406 2312 2942
+2407 2312 57361
+2408 2312 2942
+2409 2312 34666
+2410 2312 34666
+2411 2312 42741
+2412 2312 15027
+2413 2312 49491
+2415 2312 20606
+2416 2312 2942
+2417 2312 2942
+2418 2312 57361
+2419 2312 5884
+2420 2312 2942
+2444 2312 58834
+2445 2312 43196
+2446 2312 57087
+2447 2312 42246
+2451 2312 29440
+2452 2312 6014
+2453 2312 19905
+2454 2312 9327
+2455 2312 194
+2456 2312 194
+2457 2312 267
+2458 2312 267
+2460 2312 54733
+2461 2312 60513
+2462 2312 4826
+2463 2312 24884
+2464 2312 53783
+2465 2312 53589
+2466 2312 36439
+2467 2312 36439
+2468 2312 16090
+2470 2312 49686
+2471 2312 8717
+2472 2312 57145
+2473 2312 51126
+2474 2312 6979
+2475 2312 18911
+2476 2312 57614
+2477 2312 57614
+2478 2312 38426
+2479 2312 1757
+2481 2312 47778
+2482 2312 25470
+2483 2312 30221
+2484 2312 14804
+2485 2312 37070
+2486 2312 18159
+2487 2312 60454
+2488 2312 60454
+2489 2312 7835
+2490 2312 44264
+2491 2312 47567
+2493 2312 50250
+2494 2312 54694
+2495 2312 31850
+2496 2312 38473
+2497 2312 20655
+2498 2312 2496
+2499 2312 30867
+2500 2312 30867
+2501 2312 55661
+2502 2312 60892
+2503 2312 6037
+2504 2312 63125
+2505 2312 3770
+2506 2312 54328
+2507 2312 48894
+2508 2312 33314
+2509 2312 17946
+2510 2312 41377
+2511 2312 11644
+4823 2312 27852657
+2270 2313 1
+2508 2313 65520
+4824 2313 27852657
+2271 2314 1
+2274 2314 56220
+2275 2314 36376
+2276 2314 36376
+2331 2314 40097
+2337 2314 35859
+2338 2314 13303
+2339 2314 22604
+2340 2314 28557
+2341 2314 8790
+2342 2314 5069
+2397 2314 13382
+2408 2314 36952
+2416 2314 25092
+2417 2314 16934
+2418 2314 52081
+2419 2314 60624
+2420 2314 28741
+2454 2314 12749
+2455 2314 26774
+2456 2314 26774
+2457 2314 36979
+2458 2314 36979
+2460 2314 36998
+2461 2314 36998
+2462 2314 38757
+2463 2314 39005
+2464 2314 34088
+2465 2314 7314
+2466 2314 20894
+2467 2314 20894
+2468 2314 20894
+2470 2314 15880
+2471 2314 4636
+2472 2314 56671
+2473 2314 50393
+2474 2314 34990
+2475 2314 46270
+2476 2314 43308
+2477 2314 43308
+2478 2314 43308
+2479 2314 43308
+2481 2314 36522
+2482 2314 46985
+2483 2314 25890
+2484 2314 13797
+2485 2314 9029
+2486 2314 44677
+2487 2314 21248
+2488 2314 21248
+2489 2314 21248
+2490 2314 21248
+2491 2314 21248
+2493 2314 21391
+2494 2314 14626
+2495 2314 19389
+2496 2314 23699
+2497 2314 29147
+2498 2314 1045
+2499 2314 50628
+2500 2314 50628
+2501 2314 50628
+2502 2314 50628
+2503 2314 50628
+2504 2314 50628
+2505 2314 30191
+2506 2314 26888
+2507 2314 3691
+2508 2314 1696
+2509 2314 36464
+2510 2314 57955
+2511 2314 42875
+4825 2314 27852657
+2272 2315 1
+2274 2315 47936
+2275 2315 54446
+2276 2315 54446
+2331 2315 6054
+2337 2315 44904
+2338 2315 21074
+2339 2315 38659
+2340 2315 42584
+2341 2315 7857
+2342 2315 56249
+2397 2315 4930
+2408 2315 12225
+2416 2315 65362
+2417 2315 30235
+2418 2315 60653
+2419 2315 42735
+2420 2315 21238
+2454 2315 52772
+2455 2315 23705
+2456 2315 23705
+2457 2315 6772
+2458 2315 6772
+2460 2315 38365
+2461 2315 38365
+2462 2315 36606
+2463 2315 55125
+2464 2315 6502
+2465 2315 48318
+2466 2315 38131
+2467 2315 38131
+2468 2315 38131
+2470 2315 18827
+2471 2315 30071
+2472 2315 54745
+2473 2315 15666
+2474 2315 21438
+2475 2315 44236
+2476 2315 47188
+2477 2315 47188
+2478 2315 47188
+2479 2315 47188
+2481 2315 65314
+2482 2315 61667
+2483 2315 12871
+2484 2315 64435
+2485 2315 48676
+2486 2315 21518
+2487 2315 50154
+2488 2315 50154
+2489 2315 50154
+2490 2315 50154
+2491 2315 50154
+2493 2315 32423
+2494 2315 47591
+2495 2315 24698
+2496 2315 42610
+2497 2315 51315
+2498 2315 29406
+2499 2315 3731
+2500 2315 3731
+2501 2315 3731
+2502 2315 3731
+2503 2315 3731
+2504 2315 3731
+2505 2315 14782
+2506 2315 6426
+2507 2315 10974
+2508 2315 589
+2509 2315 19958
+2510 2315 5374
+2511 2315 62906
+4826 2315 27852657
+2273 2316 1
+2274 2316 58152
+2275 2316 64391
+2276 2316 64391
+2331 2316 54740
+2337 2316 8155
+2338 2316 8153
+2339 2316 15523
+2340 2316 38979
+2341 2316 20117
+2342 2316 29768
+2397 2316 20423
+2408 2316 52414
+2416 2316 36345
+2417 2316 27598
+2418 2316 45774
+2419 2316 9159
+2420 2316 52034
+2455 2316 27596
+2456 2316 27596
+2457 2316 35507
+2458 2316 35507
+2460 2316 21677
+2461 2316 21677
+2462 2316 21677
+2463 2316 24308
+2464 2316 62056
+2465 2316 34460
+2466 2316 11522
+2467 2316 11522
+2468 2316 11522
+2470 2316 42610
+2471 2316 42610
+2472 2316 33274
+2473 2316 3633
+2474 2316 5697
+2475 2316 24600
+2476 2316 45087
+2477 2316 45087
+2478 2316 45087
+2479 2316 45087
+2481 2316 53022
+2482 2316 23519
+2483 2316 35417
+2484 2316 43143
+2485 2316 13605
+2486 2316 35154
+2487 2316 63986
+2488 2316 63986
+2489 2316 63986
+2490 2316 63986
+2491 2316 63986
+2493 2316 45584
+2494 2316 47510
+2495 2316 35134
+2496 2316 3149
+2497 2316 10107
+2498 2316 21548
+2499 2316 46063
+2500 2316 46063
+2501 2316 46063
+2502 2316 46063
+2503 2316 46063
+2504 2316 46063
+2505 2316 48863
+2506 2316 16395
+2507 2316 12958
+2508 2316 5566
+2509 2316 49339
+2510 2316 38488
+2511 2316 38622
+4827 2316 27852657
+2278 2317 1
+2279 2317 1
+2282 2317 65520
+2286 2317 1
+2297 2317 5880
+2355 2317 36153
+2356 2317 47785
+2357 2317 47785
+2375 2317 18753
+2383 2317 48705
+2390 2317 42315
+2392 2317 25135
+2395 2317 32740
+2396 2317 32740
+2397 2317 32740
+2398 2317 43791
+2399 2317 32053
+2400 2317 17691
+2401 2317 46815
+2404 2317 24844
+2405 2317 31085
+2406 2317 31085
+2407 2317 63825
+2408 2317 31085
+2409 2317 43791
+2410 2317 32053
+2411 2317 17691
+2412 2317 46815
+2413 2317 18261
+2415 2317 24844
+2416 2317 31085
+2417 2317 31085
+2418 2317 63825
+2419 2317 62170
+2420 2317 31085
+2422 2317 25420
+2423 2317 25420
+2424 2317 41777
+2425 2317 64051
+2426 2317 38631
+2427 2317 44231
+2428 2317 21696
+2429 2317 32370
+2430 2317 59260
+2431 2317 44231
+2432 2317 21696
+2433 2317 7834
+2434 2317 24480
+2435 2317 30741
+2436 2317 44231
+2437 2317 21696
+2438 2317 41283
+2439 2317 30983
+2440 2317 50132
+2441 2317 19391
+2444 2317 34609
+2445 2317 56057
+2446 2317 19240
+2447 2317 2282
+2451 2317 41713
+2452 2317 63161
+2453 2317 26344
+2454 2317 31568
+2455 2317 56179
+2456 2317 56179
+2457 2317 22919
+2458 2317 13245
+2460 2317 37594
+2461 2317 27288
+2462 2317 23174
+2463 2317 54123
+2464 2317 32397
+2465 2317 41739
+2466 2317 28165
+2467 2317 18491
+2468 2317 5019
+2470 2317 5652
+2471 2317 37407
+2472 2317 64665
+2473 2317 9558
+2474 2317 903
+2475 2317 24685
+2476 2317 63720
+2477 2317 16449
+2478 2317 49143
+2479 2317 60711
+2481 2317 40217
+2482 2317 17166
+2483 2317 26040
+2484 2317 52832
+2485 2317 53696
+2486 2317 29011
+2487 2317 404
+2488 2317 13771
+2489 2317 48375
+2490 2317 47758
+2491 2317 46406
+2493 2317 6755
+2494 2317 46900
+2495 2317 20975
+2496 2317 40668
+2497 2317 38144
+2498 2317 9133
+2499 2317 62527
+2500 2317 50574
+2501 2317 31569
+2502 2317 295
+2503 2317 57469
+2504 2317 42593
+2505 2317 7177
+2506 2317 63293
+2507 2317 10596
+2508 2317 18548
+2509 2317 33875
+2510 2317 9756
+2511 2317 17937
+4828 2317 27852657
+2280 2318 1
+2297 2318 27565
+2355 2318 23418
+2356 2318 46784
+2357 2318 46784
+2375 2318 4381
+2383 2318 65034
+2390 2318 40932
+2392 2318 28749
+2395 2318 22503
+2396 2318 22503
+2397 2318 22503
+2398 2318 22793
+2399 2318 9073
+2400 2318 9550
+2401 2318 17171
+2404 2318 815
+2405 2318 16583
+2406 2318 16583
+2407 2318 39086
+2408 2318 16583
+2409 2318 22793
+2410 2318 9073
+2411 2318 9550
+2412 2318 17171
+2413 2318 2964
+2415 2318 815
+2416 2318 16583
+2417 2318 16583
+2418 2318 39086
+2419 2318 33166
+2420 2318 16583
+2422 2318 62597
+2423 2318 62597
+2424 2318 58810
+2425 2318 43483
+2426 2318 46407
+2427 2318 54728
+2428 2318 18276
+2429 2318 4517
+2430 2318 23631
+2431 2318 54728
+2432 2318 18276
+2433 2318 23822
+2434 2318 39828
+2435 2318 16197
+2436 2318 54728
+2437 2318 18276
+2438 2318 3581
+2439 2318 21658
+2440 2318 47029
+2441 2318 30832
+2444 2318 12034
+2445 2318 28136
+2446 2318 181
+2447 2318 47385
+2451 2318 56992
+2452 2318 7573
+2453 2318 45139
+2454 2318 32740
+2455 2318 32393
+2456 2318 32393
+2457 2318 27163
+2458 2318 45988
+2460 2318 59149
+2461 2318 59357
+2462 2318 64966
+2463 2318 16646
+2464 2318 50894
+2465 2318 18501
+2466 2318 27868
+2467 2318 46693
+2468 2318 51762
+2470 2318 47492
+2471 2318 50755
+2472 2318 16552
+2473 2318 34187
+2474 2318 60802
+2475 2318 42301
+2476 2318 55962
+2477 2318 48732
+2478 2318 24175
+2479 2318 7851
+2481 2318 58
+2482 2318 21442
+2483 2318 45458
+2484 2318 53319
+2485 2318 34883
+2486 2318 58103
+2487 2318 48077
+2488 2318 23299
+2489 2318 27266
+2490 2318 24770
+2491 2318 36651
+2493 2318 58827
+2494 2318 16316
+2495 2318 15843
+2496 2318 5885
+2497 2318 25771
+2498 2318 33189
+2499 2318 31503
+2500 2318 5650
+2501 2318 56586
+2502 2318 48447
+2503 2318 5556
+2504 2318 47343
+2505 2318 47884
+2506 2318 62847
+2507 2318 41905
+2508 2318 21104
+2509 2318 993
+2510 2318 46956
+2511 2318 60693
+4829 2318 27852657
+2281 2319 1
+2282 2319 1
+2286 2319 65520
+2297 2319 29861
+2355 2319 62139
+2356 2319 14817
+2357 2319 14817
+2375 2319 10941
+2383 2319 29443
+2390 2319 22912
+2392 2319 41432
+2395 2319 21981
+2396 2319 21981
+2397 2319 21981
+2398 2319 18535
+2399 2319 48446
+2400 2319 8277
+2401 2319 54134
+2404 2319 59787
+2405 2319 42320
+2406 2319 42320
+2407 2319 64301
+2408 2319 42320
+2409 2319 18535
+2410 2319 48446
+2411 2319 8277
+2412 2319 54134
+2413 2319 47967
+2415 2319 59787
+2416 2319 42320
+2417 2319 42320
+2418 2319 64301
+2419 2319 19119
+2420 2319 42320
+2422 2319 61176
+2423 2319 61176
+2424 2319 2342
+2425 2319 38592
+2426 2319 42937
+2427 2319 22162
+2428 2319 2062
+2429 2319 35148
+2430 2319 57732
+2431 2319 22162
+2432 2319 2062
+2433 2319 62174
+2434 2319 46398
+2435 2319 54187
+2436 2319 22162
+2437 2319 2062
+2438 2319 8692
+2439 2319 11223
+2440 2319 13687
+2441 2319 25021
+2444 2319 23044
+2445 2319 32219
+2446 2319 15438
+2447 2319 21489
+2451 2319 37073
+2452 2319 46248
+2453 2319 29467
+2454 2319 49490
+2455 2319 40470
+2456 2319 40470
+2457 2319 17274
+2458 2319 35933
+2460 2319 55423
+2461 2319 19331
+2462 2319 24918
+2463 2319 18930
+2464 2319 27889
+2465 2319 52940
+2466 2319 45065
+2467 2319 63724
+2468 2319 33467
+2470 2319 63768
+2471 2319 38839
+2472 2319 2123
+2473 2319 48971
+2474 2319 51933
+2475 2319 64514
+2476 2319 21855
+2477 2319 14113
+2478 2319 51381
+2479 2319 45113
+2481 2319 35593
+2482 2319 33240
+2483 2319 3027
+2484 2319 32043
+2485 2319 21281
+2486 2319 22288
+2487 2319 10070
+2488 2319 35252
+2489 2319 37306
+2490 2319 25714
+2491 2319 3700
+2493 2319 41946
+2494 2319 13193
+2495 2319 47633
+2496 2319 50225
+2497 2319 61405
+2498 2319 39117
+2499 2319 46333
+2500 2319 58130
+2501 2319 4321
+2502 2319 58147
+2503 2319 35423
+2504 2319 42809
+2505 2319 58008
+2506 2319 62331
+2507 2319 53315
+2508 2319 12268
+2509 2319 44892
+2510 2319 22308
+2511 2319 27175
+4830 2319 27852657
+2283 2320 1
+2355 2320 22779
+2356 2320 45350
+2357 2320 45350
+2390 2320 38372
+2392 2320 9264
+2395 2320 1706
+2396 2320 1706
+2397 2320 1706
+2398 2320 37144
+2399 2320 37144
+2400 2320 9995
+2401 2320 34496
+2404 2320 33868
+2405 2320 38953
+2406 2320 38953
+2407 2320 40659
+2408 2320 38953
+2409 2320 37144
+2410 2320 37144
+2411 2320 9995
+2412 2320 34496
+2413 2320 34496
+2415 2320 33868
+2416 2320 38953
+2417 2320 38953
+2418 2320 40659
+2419 2320 12385
+2420 2320 38953
+2422 2320 41137
+2423 2320 41137
+2424 2320 53215
+2425 2320 30249
+2426 2320 54633
+2427 2320 50788
+2428 2320 6972
+2429 2320 58937
+2430 2320 4304
+2431 2320 50788
+2432 2320 6972
+2433 2320 4726
+2434 2320 49342
+2435 2320 45038
+2436 2320 50788
+2437 2320 6972
+2438 2320 22522
+2439 2320 60549
+2440 2320 42375
+2441 2320 62858
+2444 2320 13377
+2445 2320 60002
+2446 2320 25587
+2447 2320 18255
+2451 2320 10898
+2452 2320 57523
+2453 2320 23108
+2454 2320 46882
+2455 2320 6613
+2456 2320 6613
+2457 2320 9358
+2458 2320 14085
+2460 2320 16507
+2461 2320 47613
+2462 2320 52491
+2463 2320 24
+2464 2320 31267
+2465 2320 24654
+2466 2320 17025
+2467 2320 21752
+2468 2320 25444
+2470 2320 32582
+2471 2320 50837
+2472 2320 17820
+2473 2320 4260
+2474 2320 10542
+2475 2320 51409
+2476 2320 8147
+2477 2320 12874
+2478 2320 16566
+2479 2320 45928
+2481 2320 25273
+2482 2320 24465
+2483 2320 14066
+2484 2320 55665
+2485 2320 32611
+2486 2320 46723
+2487 2320 20016
+2488 2320 17581
+2489 2320 16496
+2490 2320 61481
+2491 2320 38998
+2493 2320 40095
+2494 2320 19771
+2495 2320 19196
+2496 2320 22079
+2497 2320 32341
+2498 2320 51139
+2499 2320 48826
+2500 2320 25641
+2501 2320 12409
+2502 2320 8132
+2503 2320 22317
+2504 2320 11650
+2505 2320 16115
+2506 2320 54229
+2507 2320 60719
+2508 2320 47117
+2509 2320 30174
+2510 2320 42130
+2511 2320 3725
+4831 2320 27852657
+2284 2321 1
+2355 2321 41196
+2356 2321 14157
+2357 2321 14157
+2390 2321 13882
+2392 2321 16743
+2395 2321 12207
+2396 2321 12207
+2397 2321 12207
+2398 2321 48629
+2399 2321 48629
+2400 2321 62511
+2401 2321 62955
+2404 2321 25649
+2405 2321 28198
+2406 2321 28198
+2407 2321 40405
+2408 2321 28198
+2409 2321 48629
+2410 2321 48629
+2411 2321 62511
+2412 2321 62955
+2413 2321 62955
+2415 2321 25649
+2416 2321 28198
+2417 2321 28198
+2418 2321 40405
+2419 2321 56396
+2420 2321 28198
+2422 2321 16359
+2423 2321 16359
+2424 2321 40601
+2425 2321 1351
+2426 2321 50513
+2427 2321 44698
+2428 2321 57288
+2429 2321 36433
+2430 2321 51441
+2431 2321 44698
+2432 2321 57288
+2433 2321 30162
+2434 2321 23457
+2435 2321 37537
+2436 2321 44698
+2437 2321 57288
+2438 2321 40513
+2439 2321 23109
+2440 2321 62553
+2441 2321 25016
+2444 2321 28314
+2445 2321 17927
+2446 2321 54922
+2447 2321 31571
+2451 2321 32045
+2452 2321 21658
+2453 2321 58653
+2454 2321 6776
+2455 2321 53348
+2456 2321 53348
+2457 2321 58203
+2458 2321 30444
+2460 2321 59390
+2461 2321 30864
+2462 2321 34121
+2463 2321 42649
+2464 2321 14604
+2465 2321 26777
+2466 2321 24383
+2467 2321 62145
+2468 2321 38102
+2470 2321 6308
+2471 2321 37879
+2472 2321 53000
+2473 2321 2522
+2474 2321 43708
+2475 2321 16931
+2476 2321 32908
+2477 2321 5149
+2478 2321 46627
+2479 2321 7074
+2481 2321 26559
+2482 2321 10331
+2483 2321 26907
+2484 2321 23265
+2485 2321 44192
+2486 2321 27261
+2487 2321 13142
+2488 2321 31350
+2489 2321 53948
+2490 2321 64171
+2491 2321 6475
+2493 2321 53729
+2494 2321 28285
+2495 2321 52092
+2496 2321 56475
+2497 2321 39418
+2498 2321 12157
+2499 2321 50684
+2500 2321 24531
+2501 2321 50051
+2502 2321 39983
+2503 2321 59732
+2504 2321 15260
+2505 2321 39840
+2506 2321 15832
+2507 2321 55357
+2508 2321 44905
+2509 2321 7897
+2510 2321 24375
+2511 2321 28684
+4832 2321 27852657
+2285 2322 1
+2286 2322 1
+2355 2322 34029
+2356 2322 18499
+2357 2322 18499
+2390 2322 56084
+2392 2322 11797
+2395 2322 23546
+2396 2322 23546
+2397 2322 23546
+2398 2322 51091
+2399 2322 51091
+2400 2322 41654
+2401 2322 24145
+2404 2322 63639
+2405 2322 42722
+2406 2322 42722
+2407 2322 747
+2408 2322 42722
+2409 2322 51091
+2410 2322 51091
+2411 2322 41654
+2412 2322 24145
+2413 2322 24145
+2415 2322 63639
+2416 2322 42722
+2417 2322 42722
+2418 2322 747
+2419 2322 19923
+2420 2322 42722
+2422 2322 19165
+2423 2322 19165
+2424 2322 12017
+2425 2322 28754
+2426 2322 9589
+2427 2322 56786
+2428 2322 62265
+2429 2322 34774
+2430 2322 25185
+2431 2322 56786
+2432 2322 62265
+2433 2322 12523
+2434 2322 15557
+2435 2322 55893
+2436 2322 56786
+2437 2322 62265
+2438 2322 54281
+2439 2322 35352
+2440 2322 17610
+2441 2322 27238
+2444 2322 57964
+2445 2322 179
+2446 2322 58957
+2447 2322 46480
+2451 2322 50019
+2452 2322 57755
+2453 2322 51012
+2454 2322 31792
+2455 2322 17071
+2456 2322 17071
+2457 2322 14477
+2458 2322 16144
+2460 2322 31495
+2461 2322 24752
+2462 2322 13268
+2463 2322 60629
+2464 2322 36881
+2465 2322 19810
+2466 2322 35111
+2467 2322 36778
+2468 2322 57151
+2470 2322 20004
+2471 2322 963
+2472 2322 36866
+2473 2322 48964
+2474 2322 13382
+2475 2322 59093
+2476 2322 53836
+2477 2322 55503
+2478 2322 10355
+2479 2322 1422
+2481 2322 13759
+2482 2322 25574
+2483 2322 59485
+2484 2322 21511
+2485 2322 25013
+2486 2322 31441
+2487 2322 22620
+2488 2322 23580
+2489 2322 64154
+2490 2322 21899
+2491 2322 45584
+2493 2322 50188
+2494 2322 21393
+2495 2322 62156
+2496 2322 31433
+2497 2322 14527
+2498 2322 48607
+2499 2322 45829
+2500 2322 30121
+2501 2322 26358
+2502 2322 19855
+2503 2322 38241
+2504 2322 59219
+2505 2322 2196
+2506 2322 8451
+2507 2322 17833
+2508 2322 38492
+2509 2322 8507
+2510 2322 61157
+2511 2322 35982
+4833 2322 27852657
+2287 2323 1
+2289 2323 11868
+2290 2323 51084
+2291 2323 51084
+2296 2323 670
+2297 2323 15107
+2302 2323 3670
+2308 2323 6468
+2309 2323 24379
+2310 2323 4776
+2311 2323 16947
+2312 2323 16947
+2313 2323 65330
+2314 2323 6520
+2316 2323 51232
+2317 2323 33010
+2318 2323 59358
+2319 2323 40540
+2320 2323 49734
+2321 2323 32787
+2322 2323 1464
+2323 2323 43705
+2324 2323 57176
+2326 2323 33626
+2327 2323 28915
+2328 2323 33754
+2329 2323 46392
+2330 2323 10825
+2331 2323 43559
+2332 2323 60704
+2333 2323 15923
+2334 2323 53368
+2335 2323 55064
+2337 2323 59816
+2338 2323 4048
+2339 2323 52423
+2340 2323 31890
+2341 2323 44719
+2342 2323 1160
+2398 2323 37998
+2399 2323 22953
+2400 2323 50801
+2401 2323 53890
+2402 2323 29396
+2404 2323 51119
+2405 2323 27621
+2406 2323 63380
+2407 2323 8458
+2408 2323 56265
+2419 2323 55105
+2476 2323 27031
+2477 2323 48157
+2478 2323 40447
+2479 2323 1181
+2480 2323 20862
+2481 2323 9897
+2482 2323 44622
+2483 2323 47124
+2484 2323 41304
+2485 2323 1145
+2486 2323 7299
+2497 2323 60410
+2509 2323 43710
+4834 2323 27852657
+2288 2324 1
+2289 2324 53654
+2290 2324 14438
+2291 2324 14438
+2296 2324 64852
+2297 2324 50414
+2302 2324 64977
+2308 2324 59053
+2309 2324 41452
+2310 2324 8401
+2311 2324 16452
+2312 2324 16452
+2313 2324 3505
+2314 2324 25738
+2316 2324 33357
+2317 2324 51901
+2318 2324 10055
+2319 2324 25280
+2320 2324 16248
+2321 2324 65317
+2322 2324 26568
+2323 2324 22309
+2324 2324 8838
+2326 2324 674
+2327 2324 25071
+2328 2324 59514
+2329 2324 15010
+2330 2324 37960
+2331 2324 38164
+2332 2324 35901
+2333 2324 34153
+2334 2324 62229
+2335 2324 60533
+2337 2324 47385
+2338 2324 38492
+2339 2324 52609
+2340 2324 63135
+2341 2324 49623
+2342 2324 11459
+2398 2324 21027
+2399 2324 37123
+2400 2324 9275
+2401 2324 6186
+2402 2324 29179
+2404 2324 18750
+2405 2324 14527
+2406 2324 43850
+2407 2324 26416
+2408 2324 59818
+2419 2324 48359
+2476 2324 10380
+2477 2324 7736
+2478 2324 15446
+2479 2324 54712
+2480 2324 43794
+2481 2324 7095
+2482 2324 30560
+2483 2324 13450
+2484 2324 17069
+2485 2324 6900
+2486 2324 23179
+2497 2324 38175
+2509 2324 64846
+4835 2324 27852657
+2289 2325 1
+2501 2325 65520
+4836 2325 27852657
+2290 2326 1
+2502 2326 65520
+4837 2326 27852657
+2291 2327 1
+2503 2327 65520
+4838 2327 27852657
+2292 2328 1
+2314 2328 1
+2323 2328 1
+2324 2328 49150
+2333 2328 1
+2334 2328 49150
+2335 2328 49150
+2390 2328 18
+2399 2328 1
+2400 2328 49150
+2401 2328 16391
+2412 2328 32762
+2413 2328 32762
+2458 2328 8183
+2467 2328 8183
+2468 2328 8183
+2476 2328 24572
+2477 2328 4089
+2478 2328 32755
+2479 2328 32764
+2481 2328 61427
+2487 2328 6
+2488 2328 36855
+2489 2328 36855
+2490 2328 8192
+2491 2328 8192
+2499 2328 1
+2500 2328 24568
+2501 2328 24568
+2502 2328 24568
+2503 2328 24568
+2504 2328 24568
+2509 2328 54268
+2510 2328 43011
+2511 2328 31222
+4839 2328 27852657
+2293 2329 1
+2294 2329 1
+2297 2329 1
+2314 2329 65520
+2323 2329 65520
+2324 2329 49137
+2333 2329 65520
+2334 2329 49137
+2335 2329 49137
+2390 2329 43674
+2399 2329 65520
+2400 2329 27296
+2401 2329 16374
+2411 2329 43680
+2412 2329 32758
+2413 2329 32758
+2458 2329 57338
+2467 2329 57338
+2468 2329 62797
+2477 2329 20483
+2478 2329 38227
+2479 2329 49136
+2481 2329 12285
+2488 2329 28672
+2489 2329 9561
+2490 2329 19113
+2491 2329 19113
+2500 2329 40954
+2501 2329 36859
+2502 2329 54604
+2503 2329 54604
+2504 2329 54605
+2509 2329 25590
+2510 2329 51182
+2511 2329 64676
+4840 2329 27852657
+2294 2330 1
+2297 2330 59727
+2355 2330 41525
+2356 2330 20236
+2357 2330 20236
+2375 2330 65478
+2383 2330 12089
+2390 2330 3500
+2392 2330 14455
+2395 2330 14913
+2396 2330 14913
+2397 2330 14913
+2398 2330 34422
+2399 2330 26675
+2400 2330 35055
+2401 2330 43515
+2404 2330 34339
+2405 2330 54465
+2406 2330 54465
+2407 2330 3857
+2408 2330 54465
+2409 2330 34422
+2410 2330 26675
+2411 2330 35055
+2412 2330 43515
+2413 2330 47857
+2415 2330 34339
+2416 2330 54465
+2417 2330 54465
+2418 2330 3857
+2419 2330 43409
+2420 2330 54465
+2422 2330 49055
+2423 2330 49055
+2424 2330 51736
+2425 2330 40230
+2426 2330 56696
+2427 2330 2422
+2428 2330 16197
+2429 2330 25982
+2430 2330 34807
+2431 2330 2422
+2432 2330 16197
+2433 2330 47740
+2434 2330 5273
+2435 2330 35987
+2436 2330 2422
+2437 2330 16197
+2438 2330 56868
+2439 2330 18164
+2440 2330 38170
+2441 2330 2183
+2444 2330 18702
+2445 2330 33501
+2446 2330 26427
+2447 2330 36407
+2451 2330 27669
+2452 2330 42468
+2453 2330 35394
+2454 2330 50306
+2455 2330 14792
+2456 2330 14792
+2457 2330 27789
+2458 2330 27323
+2460 2330 1583
+2461 2330 6586
+2462 2330 44145
+2463 2330 19029
+2464 2330 58328
+2465 2330 43536
+2466 2330 29538
+2467 2330 29072
+2468 2330 55826
+2470 2330 58161
+2471 2330 25786
+2472 2330 31085
+2473 2330 4195
+2474 2330 54432
+2475 2330 10896
+2476 2330 27619
+2477 2330 27591
+2478 2330 50163
+2479 2330 21545
+2481 2330 33584
+2482 2330 40556
+2483 2330 26997
+2484 2330 5454
+2485 2330 34707
+2486 2330 23811
+2487 2330 50681
+2488 2330 37687
+2489 2330 4934
+2490 2330 19669
+2491 2330 2924
+2493 2330 29555
+2494 2330 17817
+2495 2330 24064
+2496 2330 20117
+2497 2330 58660
+2498 2330 34849
+2499 2330 41416
+2500 2330 51253
+2501 2330 1552
+2502 2330 56985
+2503 2330 19047
+2504 2330 49616
+2505 2330 21820
+2506 2330 31761
+2507 2330 24529
+2508 2330 58769
+2509 2330 26080
+2510 2330 56104
+2511 2330 18383
+4841 2330 27852657
+2295 2331 1
+2353 2331 1
+2354 2331 1
+2355 2331 1
+2356 2331 1
+2357 2331 1
+2431 2331 54601
+2432 2331 54601
+2433 2331 54601
+2434 2331 54601
+2435 2331 54601
+2436 2331 54601
+2437 2331 54601
+2438 2331 54601
+2439 2331 54601
+2440 2331 43681
+2441 2331 54601
+2479 2331 54601
+2490 2331 54601
+2491 2331 32761
+2499 2331 47776
+2500 2331 47776
+2501 2331 47776
+2502 2331 30031
+2503 2331 42317
+2504 2331 42316
+2511 2331 23888
+4842 2331 27852657
+2296 2332 1
+2504 2332 65520
+4843 2332 27852657
+2297 2333 1
+2454 2333 11191
+2455 2333 11312
+2456 2333 11312
+2457 2333 24119
+2458 2333 24119
+2460 2333 45908
+2461 2333 45908
+2462 2333 47574
+2463 2333 42843
+2464 2333 46466
+2465 2333 35154
+2466 2333 10947
+2467 2333 10947
+2468 2333 10947
+2470 2333 32581
+2471 2333 21791
+2472 2333 31670
+2473 2333 40307
+2474 2333 58866
+2475 2333 23712
+2476 2333 50838
+2477 2333 50838
+2478 2333 50838
+2479 2333 50838
+2481 2333 46809
+2482 2333 58661
+2483 2333 25578
+2484 2333 6246
+2485 2333 30510
+2486 2333 6798
+2487 2333 44586
+2488 2333 44586
+2489 2333 44586
+2490 2333 44586
+2491 2333 44586
+2493 2333 17293
+2494 2333 42096
+2495 2333 48062
+2496 2333 43710
+2497 2333 49763
+2498 2333 42965
+2499 2333 21251
+2500 2333 21251
+2501 2333 21251
+2502 2333 21251
+2503 2333 21251
+2504 2333 20796
+2505 2333 29770
+2506 2333 24903
+2507 2333 37522
+2508 2333 38698
+2509 2333 22638
+2510 2333 9487
+2511 2333 30874
+4844 2333 27852657
+2298 2334 1
+2509 2334 65520
+4845 2334 27852657
+2299 2335 1
+2300 2335 1
+2301 2335 1
+2302 2335 1
+2303 2335 1
+2307 2335 1
+2308 2335 1
+2309 2335 1
+2310 2335 1
+2316 2335 1
+2317 2335 1
+2318 2335 1
+2326 2335 1
+2327 2335 1
+2337 2335 1
+2482 2335 32761
+2483 2335 32761
+2484 2335 32761
+2485 2335 32761
+2486 2335 32761
+2497 2335 32761
+2509 2335 24573
+4846 2335 27852657
+2300 2336 1
+2374 2336 1024
+2375 2336 14431
+2383 2336 32504
+2390 2336 5456
+2392 2336 60601
+2395 2336 20152
+2396 2336 20152
+2397 2336 20152
+2398 2336 31789
+2399 2336 31789
+2400 2336 48671
+2401 2336 24455
+2404 2336 37521
+2405 2336 53384
+2406 2336 53384
+2407 2336 8015
+2408 2336 53384
+2409 2336 31789
+2410 2336 31789
+2411 2336 48671
+2412 2336 24455
+2413 2336 57267
+2415 2336 37521
+2416 2336 53384
+2417 2336 53384
+2418 2336 8015
+2419 2336 41247
+2420 2336 53384
+2444 2336 9206
+2445 2336 8747
+2446 2336 2436
+2447 2336 62497
+2451 2336 46940
+2452 2336 489
+2453 2336 59699
+2454 2336 35861
+2455 2336 48492
+2456 2336 48492
+2457 2336 20056
+2458 2336 20056
+2460 2336 16344
+2461 2336 43231
+2462 2336 11764
+2463 2336 18475
+2464 2336 4060
+2465 2336 21089
+2466 2336 15848
+2467 2336 15848
+2468 2336 16782
+2470 2336 48601
+2471 2336 39078
+2472 2336 39072
+2473 2336 62831
+2474 2336 58414
+2475 2336 37325
+2476 2336 14959
+2477 2336 14959
+2478 2336 56504
+2479 2336 37309
+2481 2336 5883
+2482 2336 19640
+2483 2336 61218
+2484 2336 43903
+2485 2336 49808
+2486 2336 12483
+2487 2336 2649
+2488 2336 2649
+2489 2336 13490
+2490 2336 26116
+2491 2336 20158
+2493 2336 1131
+2494 2336 3539
+2495 2336 186
+2496 2336 26104
+2497 2336 25306
+2498 2336 12823
+2499 2336 14375
+2500 2336 14375
+2501 2336 19164
+2502 2336 5806
+2503 2336 26379
+2504 2336 61858
+2505 2336 20081
+2506 2336 59834
+2507 2336 28443
+2508 2336 763
+2509 2336 54895
+2510 2336 22479
+2511 2336 43649
+4847 2336 27852657
+2301 2337 1
+2308 2337 1
+2335 2337 1
+2367 2337 1
+2368 2337 32762
+2374 2337 1
+2375 2337 32762
+2383 2337 32761
+2390 2337 1
+2392 2337 32760
+2400 2337 1
+2401 2337 32764
+2411 2337 1
+2412 2337 32763
+2413 2337 3
+2445 2337 61427
+2446 2337 8192
+2447 2337 8192
+2452 2337 61427
+2453 2337 8192
+2454 2337 8192
+2460 2337 17746
+2461 2337 30032
+2462 2337 30032
+2468 2337 24572
+2470 2337 40952
+2471 2337 40952
+2478 2337 24572
+2479 2337 28670
+2481 2337 40952
+2489 2337 61427
+2490 2337 12287
+2491 2337 8190
+2501 2337 38903
+2502 2337 63473
+2503 2337 36855
+2504 2337 36855
+2505 2337 45047
+2506 2337 45047
+2507 2337 32761
+2508 2337 50506
+2509 2337 50507
+2510 2337 23892
+2511 2337 5
+4848 2337 27852657
+2302 2338 1
+2505 2338 65520
+4849 2338 27852657
+2303 2339 1
+2310 2339 1
+2318 2339 1
+2327 2339 1
+2337 2339 1
+2392 2339 1
+2470 2339 54601
+2471 2339 54601
+2481 2339 32761
+2482 2339 54601
+2483 2339 54601
+2484 2339 54601
+2485 2339 54601
+2486 2339 54601
+2493 2339 54601
+2494 2339 54601
+2495 2339 54601
+2496 2339 54601
+2497 2339 43681
+2498 2339 54601
+2505 2339 47776
+2506 2339 47776
+2507 2339 47776
+2508 2339 30031
+2509 2339 42317
+2510 2339 42316
+2511 2339 23888
+4850 2339 27852657
+2305 2340 1
+2313 2340 1
+2314 2340 1
+2322 2340 1
+2323 2340 1
+2324 2340 1
+2332 2340 1
+2333 2340 1
+2334 2340 1
+2335 2340 1
+2398 2340 1
+2399 2340 1
+2400 2340 1
+2401 2340 1
+2402 2340 1
+2476 2340 32761
+2477 2340 32761
+2478 2340 32761
+2479 2340 32761
+2480 2340 32761
+2481 2340 32761
+2509 2340 24573
+4851 2340 27852657
+2306 2341 1
+2509 2341 65520
+4852 2341 27852657
+2307 2342 1
+2374 2342 8829
+2375 2342 50823
+2383 2342 19605
+2390 2342 28867
+2392 2342 37932
+2395 2342 42040
+2396 2342 42040
+2397 2342 42040
+2398 2342 9012
+2399 2342 9012
+2400 2342 37879
+2401 2342 15867
+2404 2342 58851
+2405 2342 38591
+2406 2342 38591
+2407 2342 15110
+2408 2342 38591
+2409 2342 9012
+2410 2342 9012
+2411 2342 37879
+2412 2342 15867
+2413 2342 61742
+2415 2342 58851
+2416 2342 38591
+2417 2342 38591
+2418 2342 15110
+2419 2342 11661
+2420 2342 38591
+2445 2342 20547
+2446 2342 32389
+2447 2342 59025
+2451 2342 36639
+2452 2342 29869
+2453 2342 41711
+2454 2342 25664
+2455 2342 13104
+2456 2342 13104
+2457 2342 59774
+2458 2342 59774
+2460 2342 49020
+2461 2342 28189
+2462 2342 34671
+2463 2342 2455
+2464 2342 64672
+2465 2342 51568
+2466 2342 47606
+2467 2342 47606
+2468 2342 37184
+2470 2342 143
+2471 2342 53704
+2472 2342 43721
+2473 2342 14241
+2474 2342 12712
+2475 2342 26665
+2476 2342 39411
+2477 2342 39411
+2478 2342 28989
+2479 2342 59010
+2481 2342 61177
+2482 2342 3701
+2483 2342 10356
+2484 2342 44650
+2485 2342 59032
+2486 2342 32367
+2487 2342 10250
+2488 2342 10250
+2489 2342 28636
+2490 2342 28426
+2491 2342 1026
+2493 2342 64366
+2494 2342 15565
+2495 2342 60474
+2496 2342 53312
+2497 2342 54954
+2498 2342 22587
+2499 2342 3350
+2500 2342 3350
+2501 2342 51832
+2502 2342 61666
+2503 2342 26468
+2504 2342 6558
+2505 2342 60678
+2506 2342 52680
+2507 2342 35538
+2508 2342 63895
+2509 2342 38413
+2510 2342 62837
+2511 2342 10398
+4853 2342 27852657
+2308 2343 1
+2374 2343 56692
+2375 2343 14698
+2383 2343 45916
+2390 2343 36654
+2392 2343 13369
+2395 2343 40538
+2396 2343 40538
+2397 2343 40538
+2398 2343 17300
+2399 2343 17300
+2400 2343 53954
+2401 2343 10445
+2404 2343 23850
+2405 2343 8268
+2406 2343 8268
+2407 2343 48806
+2408 2343 8268
+2409 2343 17300
+2410 2343 17300
+2411 2343 53954
+2412 2343 10445
+2413 2343 30091
+2415 2343 23850
+2416 2343 8268
+2417 2343 8268
+2418 2343 48806
+2419 2343 16536
+2420 2343 8268
+2445 2343 44974
+2446 2343 33132
+2447 2343 6496
+2451 2343 3647
+2452 2343 10417
+2453 2343 64096
+2454 2343 14622
+2455 2343 52417
+2456 2343 52417
+2457 2343 44431
+2458 2343 44431
+2460 2343 26585
+2461 2343 47416
+2462 2343 40934
+2463 2343 63066
+2464 2343 20247
+2465 2343 33351
+2466 2343 17261
+2467 2343 17261
+2468 2343 27683
+2470 2343 57575
+2471 2343 4014
+2472 2343 21800
+2473 2343 19835
+2474 2343 26008
+2475 2343 58178
+2476 2343 2156
+2477 2343 2156
+2478 2343 12578
+2479 2343 48078
+2481 2343 39953
+2482 2343 33858
+2483 2343 28006
+2484 2343 9904
+2485 2343 20906
+2486 2343 28249
+2487 2343 33885
+2488 2343 33885
+2489 2343 15499
+2490 2343 15709
+2491 2343 43109
+2493 2343 61833
+2494 2343 23430
+2495 2343 56558
+2496 2343 6514
+2497 2343 52214
+2498 2343 23965
+2499 2343 21295
+2500 2343 21295
+2501 2343 38334
+2502 2343 28500
+2503 2343 63698
+2504 2343 18087
+2505 2343 4843
+2506 2343 17206
+2507 2343 76
+2508 2343 53258
+2509 2343 25009
+2510 2343 38526
+2511 2343 63959
+4854 2343 27852657
+2309 2344 1
+2506 2344 65520
+4855 2344 27852657
+2310 2345 1
+2392 2345 55797
+2395 2345 8578
+2396 2345 8578
+2397 2345 8578
+2398 2345 42079
+2399 2345 42079
+2400 2345 42079
+2401 2345 42079
+2404 2345 4599
+2405 2345 7348
+2406 2345 7348
+2407 2345 15926
+2408 2345 7348
+2409 2345 42079
+2410 2345 42079
+2411 2345 42079
+2412 2345 42079
+2413 2345 42079
+2415 2345 4599
+2416 2345 7348
+2417 2345 7348
+2418 2345 15926
+2419 2345 14696
+2420 2345 7348
+2451 2345 21902
+2452 2345 21902
+2453 2345 21902
+2454 2345 21902
+2457 2345 43069
+2458 2345 43069
+2460 2345 36711
+2461 2345 36711
+2462 2345 36711
+2464 2345 43406
+2465 2345 43406
+2466 2345 9099
+2467 2345 9099
+2468 2345 9099
+2470 2345 4302
+2471 2345 4302
+2473 2345 62874
+2474 2345 47206
+2475 2345 3800
+2476 2345 31511
+2477 2345 31511
+2478 2345 31511
+2479 2345 31511
+2481 2345 51234
+2482 2345 27594
+2483 2345 47847
+2484 2345 62823
+2485 2345 33812
+2486 2345 30012
+2487 2345 18625
+2488 2345 18625
+2489 2345 18625
+2490 2345 18625
+2491 2345 18625
+2493 2345 48424
+2494 2345 19201
+2495 2345 38728
+2496 2345 21611
+2497 2345 11405
+2498 2345 46914
+2499 2345 25899
+2500 2345 25899
+2501 2345 25899
+2502 2345 25899
+2503 2345 25899
+2504 2345 25899
+2506 2345 58308
+2507 2345 41707
+2508 2345 48459
+2509 2345 25652
+2510 2345 9135
+2511 2345 55897
+4856 2345 27852657
+2311 2346 1
+2312 2346 1
+2320 2346 1
+2329 2346 1
+2339 2346 1
+2385 2346 65520
+2392 2346 51166
+2394 2346 65520
+2395 2346 46581
+2396 2346 41552
+2397 2346 41552
+2398 2346 35378
+2399 2346 35378
+2400 2346 35378
+2401 2346 35378
+2404 2346 46908
+2405 2346 1226
+2406 2346 16357
+2407 2346 62941
+2408 2346 21389
+2409 2346 35378
+2410 2346 35378
+2411 2346 35378
+2412 2346 35378
+2413 2346 35378
+2415 2346 46908
+2416 2346 1225
+2417 2346 16357
+2418 2346 62941
+2419 2346 42778
+2420 2346 21389
+2451 2346 41571
+2452 2346 41571
+2453 2346 41571
+2454 2346 41571
+2455 2346 28669
+2456 2346 28669
+2457 2346 10238
+2458 2346 10238
+2460 2346 28957
+2461 2346 28957
+2462 2346 28957
+2463 2346 53745
+2464 2346 29667
+2465 2346 998
+2466 2346 36981
+2467 2346 36981
+2468 2346 36981
+2470 2346 64158
+2471 2346 64158
+2472 2346 53745
+2473 2346 55427
+2474 2346 3564
+2475 2346 2566
+2476 2346 61512
+2477 2346 61512
+2478 2346 61512
+2479 2346 61512
+2481 2346 57128
+2482 2346 55201
+2483 2346 51943
+2484 2346 47214
+2485 2346 21863
+2486 2346 19297
+2487 2346 35322
+2488 2346 35322
+2489 2346 35322
+2490 2346 35322
+2491 2346 35322
+2493 2346 30152
+2494 2346 30234
+2495 2346 29500
+2496 2346 39036
+2497 2346 35777
+2498 2346 16480
+2499 2346 45184
+2500 2346 45184
+2501 2346 45184
+2502 2346 45184
+2503 2346 45184
+2504 2346 45184
+2505 2346 11773
+2506 2346 29123
+2507 2346 32072
+2508 2346 42409
+2509 2346 35253
+2510 2346 56644
+2511 2346 5737
+4857 2346 27852657
+2313 2347 1
+2375 2347 8948
+2383 2347 24445
+2389 2347 1408
+2390 2347 19083
+2392 2347 36199
+2395 2347 20635
+2396 2347 20635
+2397 2347 20635
+2398 2347 22384
+2399 2347 36073
+2400 2347 53748
+2401 2347 15608
+2404 2347 25742
+2405 2347 259
+2406 2347 259
+2407 2347 20894
+2408 2347 259
+2409 2347 22384
+2410 2347 36073
+2411 2347 53748
+2412 2347 15608
+2413 2347 53742
+2415 2347 25742
+2416 2347 259
+2417 2347 259
+2418 2347 20894
+2419 2347 518
+2420 2347 259
+2446 2347 4355
+2447 2347 15223
+2451 2347 48574
+2452 2347 48574
+2453 2347 52929
+2454 2347 36729
+2455 2347 54719
+2456 2347 54719
+2457 2347 60798
+2458 2347 11643
+2460 2347 63486
+2461 2347 59737
+2462 2347 36258
+2463 2347 62745
+2464 2347 54746
+2465 2347 27
+2466 2347 35550
+2467 2347 23485
+2468 2347 60397
+2470 2347 28572
+2471 2347 27559
+2472 2347 11139
+2473 2347 24141
+2474 2347 38552
+2475 2347 38525
+2476 2347 20030
+2477 2347 44820
+2478 2347 16211
+2479 2347 49455
+2481 2347 59773
+2482 2347 34549
+2483 2347 21317
+2484 2347 64826
+2485 2347 22242
+2486 2347 49238
+2487 2347 33494
+2488 2347 59546
+2489 2347 33280
+2490 2347 4063
+2491 2347 5174
+2493 2347 3829
+2494 2347 2955
+2495 2347 6087
+2496 2347 50020
+2497 2347 31757
+2498 2347 48040
+2499 2347 937
+2500 2347 35097
+2501 2347 2727
+2502 2347 2727
+2503 2347 13198
+2504 2347 14963
+2505 2347 51257
+2506 2347 53714
+2507 2347 64884
+2508 2347 19570
+2509 2347 47415
+2510 2347 40935
+2511 2347 57282
+4858 2347 27852657
+2314 2348 1
+2375 2348 56573
+2383 2348 41076
+2389 2348 64113
+2390 2348 46438
+2392 2348 36692
+2395 2348 60976
+2396 2348 60976
+2397 2348 60976
+2398 2348 165
+2399 2348 51997
+2400 2348 34322
+2401 2348 6941
+2404 2348 31372
+2405 2348 25596
+2406 2348 25596
+2407 2348 21051
+2408 2348 25596
+2409 2348 165
+2410 2348 51997
+2411 2348 34322
+2412 2348 6941
+2413 2348 34328
+2415 2348 31372
+2416 2348 25596
+2417 2348 25596
+2418 2348 21051
+2419 2348 51192
+2420 2348 25596
+2446 2348 61166
+2447 2348 50298
+2451 2348 24537
+2452 2348 24537
+2453 2348 20182
+2454 2348 36382
+2455 2348 10802
+2456 2348 10802
+2457 2348 16205
+2458 2348 65360
+2460 2348 44510
+2461 2348 48259
+2462 2348 6217
+2463 2348 2776
+2464 2348 64242
+2465 2348 53440
+2466 2348 9610
+2467 2348 21675
+2468 2348 50284
+2470 2348 7908
+2471 2348 8921
+2472 2348 54382
+2473 2348 9345
+2474 2348 5473
+2475 2348 17554
+2476 2348 18456
+2477 2348 59187
+2478 2348 22275
+2479 2348 54552
+2481 2348 57372
+2482 2348 46051
+2483 2348 1976
+2484 2348 30351
+2485 2348 46426
+2486 2348 28872
+2487 2348 38568
+2488 2348 12516
+2489 2348 38782
+2490 2348 2478
+2491 2348 1367
+2493 2348 7080
+2494 2348 47583
+2495 2348 3494
+2496 2348 56286
+2497 2348 2123
+2498 2348 38772
+2499 2348 55014
+2500 2348 20854
+2501 2348 53224
+2502 2348 53224
+2503 2348 42753
+2504 2348 40988
+2505 2348 14264
+2506 2348 26639
+2507 2348 28952
+2508 2348 28348
+2509 2348 53005
+2510 2348 54323
+2511 2348 58040
+4859 2348 27852657
+2315 2349 1
+2509 2349 65520
+4860 2349 27852657
+2316 2350 1
+2382 2350 1
+2383 2350 1
+2392 2350 2
+2460 2350 43681
+2461 2350 43681
+2462 2350 43681
+2470 2350 32761
+2471 2350 32761
+2481 2350 32761
+2507 2350 12286
+2508 2350 60062
+2509 2350 60062
+2510 2350 60062
+2511 2350 2048
+4861 2350 27852657
+2317 2351 1
+2507 2351 65520
+4862 2351 27852657
+2318 2352 1
+2319 2352 9077
+2320 2352 9077
+2321 2352 9077
+2328 2352 9077
+2329 2352 9077
+2330 2352 18154
+2331 2352 9077
+2338 2352 9077
+2339 2352 9077
+2340 2352 18154
+2341 2352 18154
+2342 2352 9077
+2377 2352 36063
+2378 2352 36063
+2385 2352 45140
+2386 2352 15682
+2387 2352 45140
+2392 2352 19781
+2394 2352 45140
+2395 2352 30940
+2396 2352 40017
+2397 2352 60398
+2404 2352 63082
+2405 2352 48882
+2406 2352 1515
+2407 2352 16773
+2408 2352 21896
+2415 2352 54005
+2416 2352 39805
+2417 2352 48882
+2418 2352 64140
+2419 2352 16561
+2420 2352 3742
+2455 2352 41448
+2456 2352 41448
+2463 2352 16400
+2464 2352 57848
+2465 2352 16400
+2470 2352 14217
+2471 2352 14217
+2472 2352 16400
+2473 2352 33038
+2474 2352 5517
+2475 2352 54638
+2481 2352 14217
+2482 2352 34808
+2483 2352 51446
+2484 2352 46010
+2485 2352 59679
+2486 2352 5041
+2493 2352 57169
+2494 2352 47677
+2495 2352 42241
+2496 2352 8543
+2497 2352 30100
+2498 2352 25059
+2505 2352 34782
+2506 2352 46678
+2507 2352 44124
+2508 2352 52275
+2509 2352 62584
+2510 2352 25571
+2511 2352 37974
+4863 2352 27852657
+2319 2353 1
+2320 2353 1
+2321 2353 1
+2330 2353 1
+2340 2353 1
+2385 2353 1
+2392 2353 25651
+2395 2353 23643
+2396 2353 23643
+2397 2353 23643
+2398 2353 59694
+2399 2353 59694
+2400 2353 59694
+2401 2353 59694
+2404 2353 55625
+2405 2353 48546
+2406 2353 48547
+2407 2353 6668
+2408 2353 48546
+2409 2353 59694
+2410 2353 59694
+2411 2353 59694
+2412 2353 59694
+2413 2353 59694
+2415 2353 55625
+2416 2353 48546
+2417 2353 48546
+2418 2353 6668
+2419 2353 31571
+2420 2353 48546
+2451 2353 47914
+2452 2353 47914
+2453 2353 47914
+2454 2353 47914
+2455 2353 64397
+2456 2353 64397
+2457 2353 48637
+2458 2353 48637
+2460 2353 1446
+2461 2353 1446
+2462 2353 1446
+2463 2353 50499
+2464 2353 21552
+2465 2353 22676
+2466 2353 51457
+2467 2353 51457
+2468 2353 51457
+2470 2353 16069
+2471 2353 16069
+2472 2353 40828
+2473 2353 62703
+2474 2353 37690
+2475 2353 15014
+2476 2353 13856
+2477 2353 13856
+2478 2353 13856
+2479 2353 13856
+2481 2353 47684
+2482 2353 51572
+2483 2353 29912
+2484 2353 62598
+2485 2353 24203
+2486 2353 9189
+2487 2353 4761
+2488 2353 4761
+2489 2353 4761
+2490 2353 4761
+2491 2353 4761
+2493 2353 29346
+2494 2353 38646
+2495 2353 30968
+2496 2353 21086
+2497 2353 63594
+2498 2353 54405
+2499 2353 2807
+2500 2353 2807
+2501 2353 2807
+2502 2353 2807
+2503 2353 2807
+2504 2353 2807
+2505 2353 24565
+2506 2353 44998
+2507 2353 59432
+2508 2353 19472
+2509 2353 33921
+2510 2353 60652
+2511 2353 61837
+4864 2353 27852657
+2320 2354 1
+2321 2354 1
+2331 2354 65520
+2337 2354 24631
+2338 2354 35648
+2339 2354 35648
+2340 2354 22650
+2341 2354 16736
+2342 2354 16737
+2408 2354 15652
+2416 2354 43437
+2417 2354 4643
+2418 2354 2463
+2419 2354 46100
+2420 2354 47185
+2455 2354 48380
+2456 2354 48380
+2457 2354 10860
+2458 2354 10860
+2460 2354 63123
+2461 2354 63123
+2462 2354 63123
+2463 2354 62812
+2464 2354 57966
+2465 2354 9586
+2466 2354 11457
+2467 2354 11457
+2468 2354 11457
+2470 2354 40780
+2471 2354 40780
+2472 2354 61937
+2473 2354 23067
+2474 2354 33808
+2475 2354 24222
+2476 2354 9843
+2477 2354 9843
+2478 2354 9843
+2479 2354 9843
+2481 2354 56428
+2482 2354 22934
+2483 2354 10121
+2484 2354 55671
+2485 2354 43885
+2486 2354 37222
+2487 2354 50398
+2488 2354 50398
+2489 2354 50398
+2490 2354 50398
+2491 2354 50398
+2493 2354 17642
+2494 2354 40007
+2495 2354 31803
+2496 2354 39461
+2497 2354 26888
+2498 2354 5853
+2499 2354 21038
+2500 2354 21038
+2501 2354 21038
+2502 2354 21038
+2503 2354 21038
+2504 2354 21038
+2505 2354 46054
+2506 2354 9377
+2507 2354 8656
+2508 2354 58708
+2509 2354 43414
+2510 2354 60997
+2511 2354 37100
+4865 2354 27852657
+2322 2355 1
+2332 2355 1
+2375 2355 60958
+2383 2355 24227
+2389 2355 64113
+2390 2355 44387
+2392 2355 26087
+2395 2355 9388
+2396 2355 9388
+2397 2355 9388
+2398 2355 37694
+2399 2355 50622
+2400 2355 30896
+2401 2355 23989
+2404 2355 61987
+2405 2355 61511
+2406 2355 61511
+2407 2355 5378
+2408 2355 61511
+2409 2355 37693
+2410 2355 50622
+2411 2355 30896
+2412 2355 23989
+2413 2355 61145
+2415 2355 61987
+2416 2355 61511
+2417 2355 61511
+2418 2355 5378
+2419 2355 57501
+2420 2355 61511
+2446 2355 4611
+2447 2355 32547
+2451 2355 32506
+2452 2355 32506
+2453 2355 37117
+2454 2355 45466
+2455 2355 12289
+2456 2355 12289
+2457 2355 48686
+2458 2355 24137
+2460 2355 3911
+2461 2355 58903
+2462 2355 63517
+2463 2355 27542
+2464 2355 31258
+2465 2355 18969
+2466 2355 24484
+2467 2355 28366
+2468 2355 45452
+2470 2355 60300
+2471 2355 25647
+2472 2355 1503
+2473 2355 22431
+2474 2355 326
+2475 2355 46878
+2476 2355 818
+2477 2355 605
+2478 2355 17691
+2479 2355 41770
+2481 2355 39466
+2482 2355 45820
+2483 2355 34271
+2484 2355 20513
+2485 2355 34038
+2486 2355 52681
+2487 2355 9231
+2488 2355 58431
+2489 2355 29282
+2490 2355 9868
+2491 2355 42699
+2493 2355 44901
+2494 2355 6259
+2495 2355 23304
+2496 2355 60557
+2497 2355 26659
+2498 2355 39499
+2499 2355 25529
+2500 2355 32322
+2501 2355 13696
+2502 2355 13696
+2503 2355 32967
+2504 2355 29570
+2505 2355 52585
+2506 2355 58712
+2507 2355 54970
+2508 2355 18725
+2509 2355 45215
+2510 2355 51852
+2511 2355 45864
+4866 2355 27852657
+2323 2356 1
+2333 2356 1
+2375 2356 4563
+2383 2356 41294
+2389 2356 1408
+2390 2356 62827
+2392 2356 47134
+2395 2356 51672
+2396 2356 51672
+2397 2356 51672
+2398 2356 38875
+2399 2356 25947
+2400 2356 45672
+2401 2356 52579
+2404 2356 4202
+2405 2356 52764
+2406 2356 52764
+2407 2356 38915
+2408 2356 52764
+2409 2356 38875
+2410 2356 25946
+2411 2356 45672
+2412 2356 52579
+2413 2356 15423
+2415 2356 4202
+2416 2356 52764
+2417 2356 52764
+2418 2356 38915
+2419 2356 40007
+2420 2356 52764
+2446 2356 60910
+2447 2356 32974
+2451 2356 20335
+2452 2356 20335
+2453 2356 15724
+2454 2356 7375
+2455 2356 53232
+2456 2356 53232
+2457 2356 6018
+2458 2356 30567
+2460 2356 20927
+2461 2356 31456
+2462 2356 26842
+2463 2356 37979
+2464 2356 38318
+2465 2356 50607
+2466 2356 53862
+2467 2356 49980
+2468 2356 32894
+2470 2356 35899
+2471 2356 5031
+2472 2356 64018
+2473 2356 30692
+2474 2356 832
+2475 2356 15746
+2476 2356 3438
+2477 2356 3651
+2478 2356 26771
+2479 2356 2692
+2481 2356 62672
+2482 2356 23709
+2483 2356 36086
+2484 2356 63870
+2485 2356 56184
+2486 2356 40438
+2487 2356 62493
+2488 2356 13293
+2489 2356 42442
+2490 2356 61856
+2491 2356 29025
+2493 2356 54466
+2494 2356 44165
+2495 2356 53158
+2496 2356 34436
+2497 2356 60636
+2498 2356 20198
+2499 2356 20626
+2500 2356 13833
+2501 2356 32459
+2502 2356 32459
+2503 2356 13188
+2504 2356 16585
+2505 2356 12936
+2506 2356 46681
+2507 2356 13628
+2508 2356 62278
+2509 2356 27865
+2510 2356 15272
+2511 2356 5011
+4867 2356 27852657
+2324 2357 1
+2334 2357 1
+2374 2357 55668
+2375 2357 45407
+2383 2357 6420
+2390 2357 43448
+2392 2357 48827
+2395 2357 40498
+2396 2357 40498
+2397 2357 40498
+2398 2357 30005
+2399 2357 30005
+2400 2357 49626
+2401 2357 15863
+2404 2357 8674
+2405 2357 61142
+2406 2357 61142
+2407 2357 36119
+2408 2357 61142
+2409 2357 30005
+2410 2357 30005
+2411 2357 49625
+2412 2357 15863
+2413 2357 35648
+2415 2357 8674
+2416 2357 61142
+2417 2357 61142
+2418 2357 36119
+2419 2357 56763
+2420 2357 61142
+2445 2357 15638
+2446 2357 24930
+2447 2357 39726
+2451 2357 55078
+2452 2357 12983
+2453 2357 22275
+2454 2357 63257
+2455 2357 36048
+2456 2357 36048
+2457 2357 39344
+2458 2357 39344
+2460 2357 35396
+2461 2357 39102
+2462 2357 51509
+2463 2357 34103
+2464 2357 23301
+2465 2357 52774
+2466 2357 28955
+2467 2357 28955
+2468 2357 28077
+2470 2357 44871
+2471 2357 52101
+2472 2357 18032
+2473 2357 65411
+2474 2357 49041
+2475 2357 61788
+2476 2357 4819
+2477 2357 4819
+2478 2357 29256
+2479 2357 24674
+2481 2357 48190
+2482 2357 4555
+2483 2357 56791
+2484 2357 44877
+2485 2357 15575
+2486 2357 19308
+2487 2357 31886
+2488 2357 31886
+2489 2357 36352
+2490 2357 63827
+2491 2357 43976
+2493 2357 19541
+2494 2357 3712
+2495 2357 21122
+2496 2357 63843
+2497 2357 32643
+2498 2357 13335
+2499 2357 27716
+2500 2357 27716
+2501 2357 50447
+2502 2357 45216
+2503 2357 4263
+2504 2357 51689
+2505 2357 33814
+2506 2357 19638
+2507 2357 50878
+2508 2357 54232
+2509 2357 5041
+2510 2357 37501
+2511 2357 24288
+4868 2357 27852657
+2325 2358 1
+2509 2358 65520
+4869 2358 27852657
+2326 2359 1
+2508 2359 65520
+4870 2359 27852657
+2327 2360 1
+2337 2360 1
+2392 2360 23577
+2395 2360 45364
+2396 2360 45364
+2397 2360 45364
+2398 2360 56570
+2399 2360 56570
+2400 2360 56570
+2401 2360 56570
+2404 2360 33657
+2405 2360 1392
+2406 2360 1392
+2407 2360 46756
+2408 2360 1392
+2409 2360 56570
+2410 2360 56570
+2411 2360 56570
+2412 2360 56570
+2413 2360 56570
+2415 2360 33657
+2416 2360 1392
+2417 2360 1392
+2418 2360 46756
+2419 2360 2784
+2420 2360 1392
+2451 2360 23897
+2452 2360 23897
+2453 2360 23897
+2454 2360 23897
+2457 2360 35717
+2458 2360 35717
+2460 2360 34288
+2461 2360 34288
+2462 2360 34288
+2464 2360 32105
+2465 2360 32105
+2466 2360 60300
+2467 2360 60300
+2468 2360 60300
+2470 2360 16149
+2471 2360 16149
+2473 2360 15894
+2474 2360 45584
+2475 2360 13479
+2476 2360 31382
+2477 2360 31382
+2478 2360 31382
+2479 2360 31382
+2481 2360 62286
+2482 2360 5379
+2483 2360 5719
+2484 2360 37885
+2485 2360 17826
+2486 2360 4347
+2487 2360 3794
+2488 2360 3794
+2489 2360 3794
+2490 2360 3794
+2491 2360 3794
+2493 2360 13742
+2494 2360 39921
+2495 2360 34004
+2496 2360 656
+2497 2360 25904
+2498 2360 21557
+2499 2360 22123
+2500 2360 22123
+2501 2360 22123
+2502 2360 22123
+2503 2360 22123
+2504 2360 22123
+2506 2360 18297
+2507 2360 58891
+2508 2360 7840
+2509 2360 2509
+2510 2360 25451
+2511 2360 39980
+4871 2360 27852657
+2328 2361 1
+2329 2361 1
+2330 2361 1
+2331 2361 1
+2338 2361 1
+2339 2361 1
+2340 2361 1
+2341 2361 2
+2342 2361 1
+2392 2361 53797
+2394 2361 1
+2395 2361 20818
+2396 2361 25847
+2397 2361 25847
+2398 2361 49773
+2399 2361 49773
+2400 2361 49773
+2401 2361 49773
+2404 2361 38066
+2405 2361 25851
+2406 2361 10719
+2407 2361 31535
+2408 2361 5688
+2409 2361 49773
+2410 2361 49773
+2411 2361 49773
+2412 2361 49773
+2413 2361 49773
+2415 2361 38065
+2416 2361 25850
+2417 2361 10718
+2418 2361 31533
+2419 2361 11373
+2420 2361 5686
+2451 2361 53458
+2452 2361 53458
+2453 2361 53458
+2454 2361 53458
+2455 2361 1127
+2456 2361 1127
+2457 2361 8781
+2458 2361 8781
+2460 2361 63303
+2461 2361 63303
+2462 2361 63303
+2463 2361 10931
+2464 2361 38532
+2465 2361 37405
+2466 2361 23520
+2467 2361 23520
+2468 2361 23520
+2470 2361 20799
+2471 2361 20799
+2472 2361 20602
+2473 2361 23033
+2474 2361 59974
+2475 2361 22569
+2476 2361 48163
+2477 2361 48163
+2478 2361 48163
+2479 2361 48163
+2481 2361 19478
+2482 2361 56013
+2483 2361 38111
+2484 2361 25550
+2485 2361 6057
+2486 2361 49009
+2487 2361 30948
+2488 2361 30948
+2489 2361 30948
+2490 2361 30948
+2491 2361 30948
+2493 2361 20525
+2494 2361 6904
+2495 2361 23932
+2496 2361 15421
+2497 2361 34822
+2498 2361 51334
+2499 2361 6934
+2500 2361 6934
+2501 2361 6934
+2502 2361 6934
+2503 2361 6934
+2504 2361 6934
+2505 2361 32767
+2506 2361 65355
+2507 2361 43499
+2508 2361 11259
+2509 2361 42993
+2510 2361 43386
+2511 2361 34984
+4872 2361 27852657
+2329 2362 1
+2337 2362 49655
+2338 2362 47146
+2339 2362 47147
+2340 2362 43109
+2341 2362 41161
+2342 2362 41161
+2408 2362 9959
+2416 2362 15448
+2417 2362 34405
+2418 2362 47778
+2419 2362 7208
+2420 2362 38410
+2455 2362 55968
+2456 2362 55968
+2457 2362 53684
+2458 2362 53684
+2460 2362 60911
+2461 2362 60911
+2462 2362 60911
+2463 2362 15964
+2464 2362 63589
+2465 2362 7621
+2466 2362 26300
+2467 2362 26300
+2468 2362 26300
+2470 2362 41492
+2471 2362 41492
+2472 2362 15026
+2473 2362 30582
+2474 2362 9177
+2475 2362 1556
+2476 2362 1887
+2477 2362 1887
+2478 2362 1887
+2479 2362 1887
+2481 2362 62464
+2482 2362 13835
+2483 2362 21410
+2484 2362 26514
+2485 2362 21556
+2486 2362 5510
+2487 2362 4230
+2488 2362 4230
+2489 2362 4230
+2490 2362 4230
+2491 2362 4230
+2493 2362 43084
+2494 2362 37295
+2495 2362 60907
+2496 2362 24668
+2497 2362 3603
+2498 2362 34457
+2499 2362 35266
+2500 2362 35266
+2501 2362 35266
+2502 2362 35266
+2503 2362 35266
+2504 2362 35266
+2505 2362 2200
+2506 2362 34759
+2507 2362 2016
+2508 2362 62821
+2509 2362 12285
+2510 2362 59095
+2511 2362 3689
+4873 2362 27852657
+2330 2363 1
+2331 2363 1
+2337 2363 35718
+2338 2363 18144
+2339 2363 18144
+2340 2363 6230
+2341 2363 18137
+2342 2363 18136
+2408 2363 23890
+2416 2363 30872
+2417 2363 51386
+2418 2363 16491
+2419 2363 11064
+2420 2363 5310
+2455 2363 33434
+2456 2363 33434
+2457 2363 25938
+2458 2363 25938
+2460 2363 35
+2461 2363 35
+2462 2363 35
+2463 2363 11439
+2464 2363 2149
+2465 2363 34236
+2466 2363 5970
+2467 2363 5970
+2468 2363 5970
+2470 2363 40250
+2471 2363 40250
+2472 2363 20550
+2473 2363 20379
+2474 2363 4824
+2475 2363 36109
+2476 2363 36577
+2477 2363 36577
+2478 2363 36577
+2479 2363 36577
+2481 2363 48004
+2482 2363 27294
+2483 2363 27835
+2484 2363 61358
+2485 2363 63902
+2486 2363 8427
+2487 2363 33347
+2488 2363 33347
+2489 2363 33347
+2490 2363 33347
+2491 2363 33347
+2493 2363 29396
+2494 2363 62826
+2495 2363 19800
+2496 2363 58877
+2497 2363 61843
+2498 2363 33148
+2499 2363 5215
+2500 2363 5215
+2501 2363 5215
+2502 2363 5215
+2503 2363 5215
+2504 2363 5215
+2505 2363 37703
+2506 2363 19912
+2507 2363 39372
+2508 2363 17221
+2509 2363 61058
+2510 2363 2367
+2511 2363 14972
+4874 2363 27852657
+2332 2364 1
+2333 2364 1
+2334 2364 1
+2337 2364 5401
+2338 2364 64338
+2339 2364 64338
+2340 2364 64338
+2341 2364 64338
+2342 2364 64338
+2408 2364 53704
+2416 2364 14736
+2417 2364 36581
+2418 2364 19957
+2419 2364 15387
+2420 2364 26021
+2446 2364 34479
+2452 2364 36229
+2453 2364 46247
+2454 2364 26130
+2455 2364 6327
+2456 2364 6327
+2457 2364 9907
+2458 2364 56796
+2460 2364 41893
+2461 2364 1144
+2462 2364 55650
+2463 2364 40023
+2464 2364 11289
+2465 2364 4962
+2466 2364 3315
+2467 2364 64850
+2468 2364 64850
+2470 2364 49508
+2471 2364 27096
+2472 2364 53820
+2473 2364 52303
+2474 2364 5571
+2475 2364 609
+2476 2364 11010
+2477 2364 10773
+2478 2364 10773
+2479 2364 62540
+2481 2364 31873
+2482 2364 52976
+2483 2364 39968
+2484 2364 22781
+2485 2364 38906
+2486 2364 10079
+2487 2364 54414
+2488 2364 65382
+2489 2364 65382
+2490 2364 46399
+2491 2364 43678
+2493 2364 15159
+2494 2364 21366
+2495 2364 45749
+2496 2364 41289
+2497 2364 8017
+2498 2364 43310
+2499 2364 57203
+2500 2364 13179
+2501 2364 13179
+2502 2364 46742
+2503 2364 51306
+2504 2364 46029
+2505 2364 18161
+2506 2364 2763
+2507 2364 27858
+2508 2364 39229
+2509 2364 40243
+2510 2364 38090
+2511 2364 15558
+4875 2364 27852657
+2333 2365 1
+2338 2365 24493
+2339 2365 3748
+2340 2365 43011
+2341 2365 4674
+2342 2365 4674
+2408 2365 33024
+2417 2365 28385
+2418 2365 3931
+2419 2365 23950
+2420 2365 61121
+2446 2365 55034
+2453 2365 44058
+2454 2365 49828
+2455 2365 5773
+2456 2365 5773
+2457 2365 42582
+2458 2365 38054
+2460 2365 5352
+2461 2365 39632
+2462 2365 50225
+2463 2365 29758
+2464 2365 10456
+2465 2365 4683
+2466 2365 63066
+2467 2365 50988
+2468 2365 61373
+2470 2365 7082
+2471 2365 18153
+2472 2365 7683
+2473 2365 15845
+2474 2365 21184
+2475 2365 16501
+2476 2365 18274
+2477 2365 13764
+2478 2365 8985
+2479 2365 8985
+2481 2365 63098
+2482 2365 18544
+2483 2365 6995
+2484 2365 32159
+2485 2365 55703
+2486 2365 14240
+2487 2365 57270
+2488 2365 8148
+2489 2365 45460
+2490 2365 45460
+2491 2365 7162
+2493 2365 55468
+2494 2365 5201
+2495 2365 42450
+2496 2365 55866
+2497 2365 12829
+2498 2365 37962
+2499 2365 4094
+2500 2365 22162
+2501 2365 57279
+2502 2365 57279
+2503 2365 3406
+2504 2365 55486
+2505 2365 59374
+2506 2365 37265
+2507 2365 64555
+2508 2365 18061
+2509 2365 30495
+2510 2365 52533
+2511 2365 49879
+4876 2365 27852657
+2334 2366 1
+2338 2366 5661
+2339 2366 52649
+2340 2366 48296
+2341 2366 13971
+2342 2366 13971
+2408 2366 11795
+2417 2366 56712
+2418 2366 20357
+2419 2366 9009
+2420 2366 11185
+2446 2366 44686
+2452 2366 36229
+2453 2366 54735
+2454 2366 41202
+2455 2366 38198
+2456 2366 38198
+2457 2366 63921
+2458 2366 60074
+2460 2366 32072
+2461 2366 33607
+2462 2366 23281
+2463 2366 48652
+2464 2366 21854
+2465 2366 49177
+2466 2366 59920
+2467 2366 23474
+2468 2366 13089
+2470 2366 39402
+2471 2366 30310
+2472 2366 17276
+2473 2366 59468
+2474 2366 57307
+2475 2366 8130
+2476 2366 39834
+2477 2366 9131
+2478 2366 13910
+2479 2366 156
+2481 2366 58818
+2482 2366 41771
+2483 2366 25191
+2484 2366 47375
+2485 2366 12526
+2486 2366 9642
+2487 2366 31074
+2488 2366 18794
+2489 2366 47003
+2490 2366 28020
+2491 2366 521
+2493 2366 30725
+2494 2366 61641
+2495 2366 14513
+2496 2366 46984
+2497 2366 32892
+2498 2366 53996
+2499 2366 21976
+2500 2366 536
+2501 2366 30940
+2502 2366 64503
+2503 2366 36125
+2504 2366 6493
+2505 2366 25945
+2506 2366 48506
+2507 2366 62973
+2508 2366 38991
+2509 2366 25894
+2510 2366 58952
+2511 2366 28426
+4877 2366 27852657
+2335 2367 1
+2374 2367 9853
+2375 2367 20114
+2383 2367 59101
+2390 2367 45901
+2392 2367 10525
+2395 2367 29266
+2396 2367 29266
+2397 2367 29266
+2398 2367 64835
+2399 2367 64835
+2400 2367 45215
+2401 2367 13457
+2404 2367 11904
+2405 2367 59606
+2406 2367 59606
+2407 2367 23351
+2408 2367 59606
+2409 2367 64835
+2410 2367 64835
+2411 2367 45215
+2412 2367 13456
+2413 2367 59192
+2415 2367 11904
+2416 2367 59606
+2417 2367 59606
+2418 2367 23351
+2419 2367 53691
+2420 2367 59606
+2445 2367 49883
+2446 2367 40591
+2447 2367 25795
+2451 2367 14299
+2452 2367 56394
+2453 2367 47102
+2454 2367 6120
+2455 2367 29473
+2456 2367 29473
+2457 2367 21576
+2458 2367 21576
+2460 2367 12982
+2461 2367 9276
+2462 2367 62390
+2463 2367 31418
+2464 2367 17463
+2465 2367 53511
+2466 2367 28060
+2467 2367 28060
+2468 2367 28938
+2470 2367 24859
+2471 2367 17629
+2472 2367 47489
+2473 2367 45768
+2474 2367 41310
+2475 2367 53320
+2476 2367 49817
+2477 2367 49817
+2478 2367 50695
+2479 2367 55277
+2481 2367 2519
+2482 2367 53392
+2483 2367 1283
+2484 2367 51867
+2485 2367 17662
+2486 2367 29863
+2487 2367 5010
+2488 2367 5010
+2489 2367 544
+2490 2367 38590
+2491 2367 58441
+2493 2367 63039
+2494 2367 45839
+2495 2367 31310
+2496 2367 47584
+2497 2367 10065
+2498 2367 45723
+2499 2367 57173
+2500 2367 57173
+2501 2367 34442
+2502 2367 39673
+2503 2367 15105
+2504 2367 33200
+2505 2367 31707
+2506 2367 49289
+2507 2367 57343
+2508 2367 37704
+2509 2367 39967
+2510 2367 54936
+2511 2367 35488
+4878 2367 27852657
+2336 2368 1
+2509 2368 65520
+4879 2368 27852657
+2337 2369 1
+2338 2369 8550
+2339 2369 46662
+2340 2369 24909
+2341 2369 24248
+2342 2369 24248
+2408 2369 226
+2417 2369 50239
+2418 2369 3817
+2419 2369 25415
+2420 2369 49437
+2455 2369 36940
+2456 2369 36940
+2457 2369 18261
+2458 2369 18261
+2460 2369 26143
+2461 2369 26143
+2462 2369 26143
+2463 2369 29777
+2464 2369 37323
+2465 2369 383
+2466 2369 16025
+2467 2369 16025
+2468 2369 16025
+2470 2369 35106
+2471 2369 35106
+2472 2369 46994
+2473 2369 63319
+2474 2369 48395
+2475 2369 48012
+2476 2369 4949
+2477 2369 4949
+2478 2369 4949
+2479 2369 4949
+2481 2369 49649
+2482 2369 24956
+2483 2369 43993
+2484 2369 31659
+2485 2369 45429
+2486 2369 55829
+2487 2369 33594
+2488 2369 33594
+2489 2369 33594
+2490 2369 33594
+2491 2369 33594
+2493 2369 47708
+2494 2369 19185
+2495 2369 16063
+2496 2369 55255
+2497 2369 61852
+2498 2369 27244
+2499 2369 10651
+2500 2369 10651
+2501 2369 10651
+2502 2369 10651
+2503 2369 10651
+2504 2369 10651
+2505 2369 8832
+2506 2369 42979
+2507 2369 51802
+2508 2369 31688
+2509 2369 6548
+2510 2369 63951
+2511 2369 40549
+4880 2369 27852657
+2344 2370 1
+2345 2370 1
+2348 2370 65520
+2352 2370 1
+2355 2370 38920
+2356 2370 53132
+2357 2370 53131
+2390 2370 26090
+2392 2370 35488
+2395 2370 4272
+2396 2370 4272
+2397 2370 4272
+2398 2370 62057
+2399 2370 62057
+2400 2370 22626
+2401 2370 36172
+2404 2370 49168
+2405 2370 50994
+2406 2370 50994
+2407 2370 55266
+2408 2370 50994
+2409 2370 62057
+2410 2370 62057
+2411 2370 22626
+2412 2370 36172
+2413 2370 36172
+2415 2370 49168
+2416 2370 50994
+2417 2370 50994
+2418 2370 55266
+2419 2370 36467
+2420 2370 50994
+2422 2370 4749
+2423 2370 4749
+2424 2370 63763
+2425 2370 55198
+2426 2370 50449
+2427 2370 51592
+2428 2370 18479
+2429 2370 43907
+2430 2370 58979
+2431 2370 51592
+2432 2370 18479
+2433 2370 11605
+2434 2370 20756
+2435 2370 27298
+2436 2370 51592
+2437 2370 18479
+2438 2370 11540
+2439 2370 32228
+2440 2370 26785
+2441 2370 65008
+2444 2370 47170
+2445 2370 30347
+2446 2370 51168
+2447 2370 9841
+2451 2370 57477
+2452 2370 40654
+2453 2370 61475
+2454 2370 40969
+2455 2370 26238
+2456 2370 26238
+2457 2370 46938
+2458 2370 23695
+2460 2370 21364
+2461 2370 42185
+2462 2370 4856
+2463 2370 37775
+2464 2370 58555
+2465 2370 32317
+2466 2370 23122
+2467 2370 65400
+2468 2370 10323
+2470 2370 17988
+2471 2370 27829
+2472 2370 37710
+2473 2370 54681
+2474 2370 32236
+2475 2370 65440
+2476 2370 10953
+2477 2370 53231
+2478 2370 63675
+2479 2370 14806
+2481 2370 10132
+2482 2370 5113
+2483 2370 64181
+2484 2370 37384
+2485 2370 11762
+2486 2370 11843
+2487 2370 18082
+2488 2370 55794
+2489 2370 43272
+2490 2370 63575
+2491 2370 46113
+2493 2370 52087
+2494 2370 48126
+2495 2370 63124
+2496 2370 22566
+2497 2370 29060
+2498 2370 17217
+2499 2370 7635
+2500 2370 45623
+2501 2370 11333
+2502 2370 12192
+2503 2370 46271
+2504 2370 11934
+2505 2370 37742
+2506 2370 15814
+2507 2370 36828
+2508 2370 4073
+2509 2370 6274
+2510 2370 55966
+2511 2370 64803
+4881 2370 27852657
+2346 2371 1
+2355 2371 4605
+2356 2371 42704
+2357 2371 42704
+2390 2371 3574
+2392 2371 25902
+2395 2371 6722
+2396 2371 6722
+2397 2371 6722
+2398 2371 26451
+2399 2371 26451
+2400 2371 30025
+2401 2371 41612
+2404 2371 6937
+2405 2371 64227
+2406 2371 64227
+2407 2371 5428
+2408 2371 64227
+2409 2371 26451
+2410 2371 26451
+2411 2371 30025
+2412 2371 41612
+2413 2371 41612
+2415 2371 6937
+2416 2371 64227
+2417 2371 64227
+2418 2371 5428
+2419 2371 62933
+2420 2371 64227
+2422 2371 34286
+2423 2371 34286
+2424 2371 6262
+2425 2371 47632
+2426 2371 13346
+2427 2371 17482
+2428 2371 25999
+2429 2371 18243
+2430 2371 4897
+2431 2371 17482
+2432 2371 25999
+2433 2371 31614
+2434 2371 4844
+2435 2371 65468
+2436 2371 17482
+2437 2371 25999
+2438 2371 31297
+2439 2371 56760
+2440 2371 2360
+2441 2371 2413
+2444 2371 3241
+2445 2371 17966
+2446 2371 26771
+2447 2371 61098
+2451 2371 24275
+2452 2371 39000
+2453 2371 47805
+2454 2371 25416
+2455 2371 16071
+2456 2371 16071
+2457 2371 31342
+2458 2371 19769
+2460 2371 365
+2461 2371 9170
+2462 2371 1506
+2463 2371 2783
+2464 2371 8364
+2465 2371 57814
+2466 2371 33131
+2467 2371 21558
+2468 2371 20341
+2470 2371 16157
+2471 2371 11734
+2472 2371 2466
+2473 2371 2575
+2474 2371 59435
+2475 2371 1621
+2476 2371 57449
+2477 2371 45876
+2478 2371 44659
+2479 2371 21767
+2481 2371 50421
+2482 2371 44088
+2483 2371 64026
+2484 2371 58333
+2485 2371 33170
+2486 2371 31549
+2487 2371 58534
+2488 2371 36904
+2489 2371 51056
+2490 2371 23182
+2491 2371 27548
+2493 2371 38309
+2494 2371 51248
+2495 2371 52823
+2496 2371 2195
+2497 2371 51002
+2498 2371 19453
+2499 2371 51538
+2500 2371 53015
+2501 2371 39410
+2502 2371 47960
+2503 2371 47974
+2504 2371 38462
+2505 2371 64111
+2506 2371 33779
+2507 2371 27397
+2508 2371 39016
+2509 2371 42694
+2510 2371 27564
+2511 2371 64038
+4882 2371 27852657
+2347 2372 1
+2348 2372 1
+2352 2372 65520
+2355 2372 40189
+2356 2372 1517
+2357 2372 1518
+2390 2372 19928
+2392 2372 7470
+2395 2372 34221
+2396 2372 34221
+2397 2372 34221
+2398 2372 55073
+2399 2372 55073
+2400 2372 9480
+2401 2372 42249
+2404 2372 43435
+2405 2372 30179
+2406 2372 30179
+2407 2372 64400
+2408 2372 30179
+2409 2372 55073
+2410 2372 55073
+2411 2372 9480
+2412 2372 42249
+2413 2372 42249
+2415 2372 43435
+2416 2372 30179
+2417 2372 30179
+2418 2372 64400
+2419 2372 60358
+2420 2372 30179
+2422 2372 49750
+2423 2372 49750
+2424 2372 47569
+2425 2372 38312
+2426 2372 54083
+2427 2372 42025
+2428 2372 5186
+2429 2372 57319
+2430 2372 3236
+2431 2372 42025
+2432 2372 5186
+2433 2372 60525
+2434 2372 24823
+2435 2372 21587
+2436 2372 42025
+2437 2372 5186
+2438 2372 35664
+2439 2372 5555
+2440 2372 1358
+2441 2372 45292
+2444 2372 58442
+2445 2372 63235
+2446 2372 32217
+2447 2372 3050
+2451 2372 27035
+2452 2372 31828
+2453 2372 810
+2454 2372 6146
+2455 2372 42973
+2456 2372 42973
+2457 2372 12044
+2458 2372 25971
+2460 2372 47641
+2461 2372 16623
+2462 2372 26752
+2463 2372 48566
+2464 2372 38155
+2465 2372 60703
+2466 2372 36601
+2467 2372 50528
+2468 2372 2120
+2470 2372 7346
+2471 2372 10396
+2472 2372 23705
+2473 2372 37214
+2474 2372 5530
+2475 2372 10348
+2476 2372 13062
+2477 2372 26989
+2478 2372 44102
+2479 2372 19067
+2481 2372 62942
+2482 2372 22231
+2483 2372 16689
+2484 2372 61308
+2485 2372 5969
+2486 2372 61142
+2487 2372 55424
+2488 2372 6153
+2489 2372 10688
+2490 2372 41269
+2491 2372 33387
+2493 2372 36956
+2494 2372 34996
+2495 2372 12593
+2496 2372 31595
+2497 2372 16530
+2498 2372 20909
+2499 2372 2418
+2500 2372 16948
+2501 2372 12276
+2502 2372 15738
+2503 2372 50175
+2504 2372 10466
+2505 2372 18808
+2506 2372 16526
+2507 2372 56302
+2508 2372 17581
+2509 2372 26792
+2510 2372 32281
+2511 2372 37278
+4883 2372 27852657
+2349 2373 1
+2355 2373 41339
+2356 2373 15556
+2357 2373 15556
+2390 2373 43989
+2392 2373 55300
+2395 2373 52563
+2396 2373 52563
+2397 2373 52563
+2398 2373 54924
+2399 2373 54924
+2400 2373 33392
+2401 2373 50994
+2404 2373 20431
+2405 2373 11150
+2406 2373 11150
+2407 2373 63713
+2408 2373 11150
+2409 2373 54924
+2410 2373 54924
+2411 2373 33392
+2412 2373 50994
+2413 2373 50994
+2415 2373 20431
+2416 2373 11150
+2417 2373 11150
+2418 2373 63713
+2419 2373 22300
+2420 2373 11150
+2422 2373 11501
+2423 2373 11501
+2424 2373 420
+2425 2373 25048
+2426 2373 13547
+2427 2373 39309
+2428 2373 23505
+2429 2373 8789
+2430 2373 60763
+2431 2373 50229
+2432 2373 12052
+2433 2373 5700
+2434 2373 16824
+2435 2373 21582
+2436 2373 50229
+2437 2373 12052
+2438 2373 57952
+2439 2373 37241
+2440 2373 50068
+2441 2373 28486
+2444 2373 48025
+2445 2373 43072
+2446 2373 40622
+2447 2373 3984
+2451 2373 47344
+2452 2373 42391
+2453 2373 39941
+2454 2373 853
+2455 2373 52008
+2456 2373 52008
+2457 2373 8729
+2458 2373 31511
+2460 2373 30780
+2461 2373 28330
+2462 2373 49810
+2463 2373 20173
+2464 2373 53706
+2465 2373 1698
+2466 2373 34834
+2467 2373 57616
+2468 2373 34757
+2470 2373 26051
+2471 2373 30035
+2472 2373 6904
+2473 2373 9813
+2474 2373 64796
+2475 2373 63098
+2476 2373 36439
+2477 2373 59221
+2478 2373 36362
+2479 2373 22802
+2481 2373 44236
+2482 2373 63969
+2483 2373 23819
+2484 2373 14948
+2485 2373 4016
+2486 2373 6439
+2487 2373 55813
+2488 2373 44144
+2489 2373 26974
+2490 2373 5002
+2491 2373 16796
+2493 2373 15534
+2494 2373 22426
+2495 2373 27792
+2496 2373 51367
+2497 2373 55534
+2498 2373 49095
+2499 2373 867
+2500 2373 34255
+2501 2373 28912
+2502 2373 48973
+2503 2373 28818
+2504 2373 33494
+2505 2373 50733
+2506 2373 41909
+2507 2373 31481
+2508 2373 48228
+2509 2373 55018
+2510 2373 104
+2511 2373 45063
+4884 2373 27852657
+2350 2374 1
+2355 2374 18281
+2356 2374 24912
+2357 2374 24912
+2390 2374 29373
+2392 2374 37737
+2395 2374 2918
+2396 2374 2918
+2397 2374 2918
+2398 2374 39106
+2399 2374 39106
+2400 2374 2958
+2401 2374 18142
+2404 2374 27204
+2405 2374 28758
+2406 2374 28758
+2407 2374 31676
+2408 2374 28758
+2409 2374 39106
+2410 2374 39106
+2411 2374 2958
+2412 2374 18142
+2413 2374 18142
+2415 2374 27204
+2416 2374 28758
+2417 2374 28758
+2418 2374 31676
+2419 2374 57516
+2420 2374 28758
+2422 2374 31308
+2423 2374 31308
+2424 2374 1423
+2425 2374 17897
+2426 2374 52110
+2427 2374 35647
+2428 2374 27159
+2429 2374 54861
+2430 2374 2751
+2431 2374 35647
+2432 2374 49532
+2433 2374 17151
+2434 2374 41772
+2435 2374 39021
+2436 2374 35647
+2437 2374 49532
+2438 2374 52045
+2439 2374 15007
+2440 2374 34782
+2441 2374 61282
+2444 2374 59520
+2445 2374 46710
+2446 2374 37159
+2447 2374 63562
+2451 2374 13033
+2452 2374 223
+2453 2374 56193
+2454 2374 7524
+2455 2374 49026
+2456 2374 49026
+2457 2374 4638
+2458 2374 17339
+2460 2374 33611
+2461 2374 24060
+2462 2374 28102
+2463 2374 52888
+2464 2374 61315
+2465 2374 12289
+2466 2374 39413
+2467 2374 52114
+2468 2374 19428
+2470 2374 32532
+2471 2374 30573
+2472 2374 22261
+2473 2374 18117
+2474 2374 36620
+2475 2374 24331
+2476 2374 44199
+2477 2374 56900
+2478 2374 24214
+2479 2374 5292
+2481 2374 22258
+2482 2374 54443
+2483 2374 49023
+2484 2374 11793
+2485 2374 9077
+2486 2374 50267
+2487 2374 22928
+2488 2374 8317
+2489 2374 32815
+2490 2374 26156
+2491 2374 3999
+2493 2374 33707
+2494 2374 19069
+2495 2374 18700
+2496 2374 16334
+2497 2374 3776
+2498 2374 19030
+2499 2374 5332
+2500 2374 54271
+2501 2374 12836
+2502 2374 18852
+2503 2374 30569
+2504 2374 37942
+2505 2374 43387
+2506 2374 14176
+2507 2374 54235
+2508 2374 23058
+2509 2374 55144
+2510 2374 47153
+2511 2374 63966
+4885 2374 27852657
+2351 2375 1
+2352 2375 1
+2355 2375 57447
+2356 2375 5371
+2357 2375 5370
+2390 2375 9596
+2392 2375 64265
+2395 2375 48768
+2396 2375 48768
+2397 2375 48768
+2398 2375 18615
+2399 2375 18615
+2400 2375 28211
+2401 2375 31676
+2404 2375 23133
+2405 2375 4960
+2406 2375 4960
+2407 2375 53728
+2408 2375 4960
+2409 2375 18615
+2410 2375 18615
+2411 2375 28211
+2412 2375 31676
+2413 2375 31676
+2415 2375 23133
+2416 2375 4960
+2417 2375 4960
+2418 2375 53728
+2419 2375 9920
+2420 2375 4960
+2422 2375 30878
+2423 2375 30878
+2424 2375 64188
+2425 2375 19977
+2426 2375 54620
+2427 2375 13564
+2428 2375 3620
+2429 2375 45713
+2430 2375 56614
+2431 2375 13564
+2432 2375 3620
+2433 2375 7723
+2434 2375 9512
+2435 2375 18419
+2436 2375 13564
+2437 2375 3620
+2438 2375 37901
+2439 2375 46977
+2440 2375 7942
+2441 2375 55044
+2444 2375 14312
+2445 2375 49012
+2446 2375 1793
+2447 2375 30625
+2451 2375 28171
+2452 2375 62871
+2453 2375 15652
+2454 2375 62786
+2455 2375 64681
+2456 2375 64681
+2457 2375 40375
+2458 2375 48376
+2460 2375 52476
+2461 2375 5257
+2462 2375 21570
+2463 2375 6447
+2464 2375 20600
+2465 2375 21440
+2466 2375 11441
+2467 2375 19442
+2468 2375 5360
+2470 2375 54427
+2471 2375 19531
+2472 2375 36625
+2473 2375 63246
+2474 2375 30822
+2475 2375 9382
+2476 2375 34485
+2477 2375 42486
+2478 2375 28404
+2479 2375 65191
+2481 2375 64867
+2482 2375 44381
+2483 2375 27402
+2484 2375 38793
+2485 2375 54027
+2486 2375 44645
+2487 2375 32798
+2488 2375 42089
+2489 2375 33041
+2490 2375 26134
+2491 2375 15619
+2493 2375 505
+2494 2375 11974
+2495 2375 13127
+2496 2375 9511
+2497 2375 30639
+2498 2375 51515
+2499 2375 39149
+2500 2375 45662
+2501 2375 14070
+2502 2375 18649
+2503 2375 17438
+2504 2375 32997
+2505 2375 12696
+2506 2375 13413
+2507 2375 36863
+2508 2375 3061
+2509 2375 62788
+2510 2375 59003
+2511 2375 61319
+4886 2375 27852657
+2353 2376 1
+2354 2376 1
+2355 2376 1
+2356 2376 1
+2357 2376 1
+2390 2376 43680
+2400 2376 43680
+2401 2376 65520
+2411 2376 43680
+2412 2376 65520
+2413 2376 65520
+2431 2376 54601
+2432 2376 54601
+2433 2376 54601
+2434 2376 54601
+2435 2376 54601
+2436 2376 54601
+2437 2376 54601
+2438 2376 54601
+2439 2376 54601
+2440 2376 43681
+2441 2376 54601
+2468 2376 5459
+2478 2376 5459
+2479 2376 5457
+2489 2376 46410
+2490 2376 16379
+2491 2376 60060
+2499 2376 47776
+2500 2376 47776
+2501 2376 43681
+2502 2376 43681
+2503 2376 55967
+2504 2376 55966
+2510 2376 61425
+2511 2376 46068
+4887 2376 27852657
+2354 2377 1
+2355 2377 19751
+2356 2377 47257
+2357 2377 47257
+2390 2377 65490
+2392 2377 39509
+2395 2377 13825
+2396 2377 13825
+2397 2377 13825
+2398 2377 33084
+2399 2377 33084
+2400 2377 33053
+2401 2377 2654
+2404 2377 56541
+2405 2377 13831
+2406 2377 13831
+2407 2377 27656
+2408 2377 13831
+2409 2377 33084
+2410 2377 33084
+2411 2377 33053
+2412 2377 2654
+2413 2377 2654
+2415 2377 56541
+2416 2377 13831
+2417 2377 13831
+2418 2377 27656
+2419 2377 27662
+2420 2377 13831
+2422 2377 60278
+2423 2377 60278
+2424 2377 38602
+2425 2377 61338
+2426 2377 1060
+2427 2377 29308
+2428 2377 6941
+2429 2377 9520
+2430 2377 8460
+2431 2377 29308
+2432 2377 50089
+2433 2377 62756
+2434 2377 34231
+2435 2377 25771
+2436 2377 29308
+2437 2377 50089
+2438 2377 61334
+2439 2377 19087
+2440 2377 39868
+2441 2377 14097
+2444 2377 18879
+2445 2377 9697
+2446 2377 44854
+2447 2377 31832
+2451 2377 18569
+2452 2377 9387
+2453 2377 44544
+2454 2377 1158
+2455 2377 3470
+2456 2377 3470
+2457 2377 43036
+2458 2377 57652
+2460 2377 35948
+2461 2377 5584
+2462 2377 18537
+2463 2377 55269
+2464 2377 20984
+2465 2377 17514
+2466 2377 33079
+2467 2377 47695
+2468 2377 51165
+2470 2377 59869
+2471 2377 26180
+2472 2377 53847
+2473 2377 14858
+2474 2377 17758
+2475 2377 244
+2476 2377 47087
+2477 2377 61703
+2478 2377 65173
+2479 2377 23656
+2481 2377 26102
+2482 2377 65488
+2483 2377 41246
+2484 2377 38651
+2485 2377 36561
+2486 2377 36317
+2487 2377 21204
+2488 2377 20105
+2489 2377 25870
+2490 2377 52159
+2491 2377 20797
+2493 2377 6494
+2494 2377 17617
+2495 2377 12074
+2496 2377 58212
+2497 2377 20854
+2498 2377 50058
+2499 2377 19172
+2500 2377 6266
+2501 2377 54192
+2502 2377 35122
+2503 2377 29304
+2504 2377 7132
+2505 2377 50515
+2506 2377 40533
+2507 2377 63784
+2508 2377 42736
+2509 2377 18310
+2510 2377 20117
+2511 2377 23010
+4888 2377 27852657
+2355 2378 1
+2433 2378 8189
+2434 2378 49138
+2435 2378 49138
+2440 2378 7690
+2441 2378 24073
+2446 2378 14218
+2452 2378 58045
+2453 2378 4310
+2454 2378 36293
+2455 2378 25854
+2456 2378 25854
+2457 2378 58182
+2458 2378 44403
+2460 2378 1208
+2461 2378 31255
+2462 2378 6234
+2463 2378 37392
+2464 2378 37310
+2465 2378 11456
+2466 2378 33148
+2467 2378 3861
+2468 2378 36718
+2470 2378 62747
+2471 2378 53316
+2472 2378 48033
+2473 2378 40552
+2474 2378 8166
+2475 2378 62231
+2476 2378 7745
+2477 2378 8157
+2478 2378 51246
+2479 2378 37081
+2481 2378 56755
+2482 2378 47870
+2483 2378 60828
+2484 2378 57432
+2485 2378 48681
+2486 2378 51971
+2487 2378 45546
+2488 2378 45555
+2489 2378 33388
+2490 2378 1603
+2491 2378 63909
+2493 2378 41448
+2494 2378 22987
+2495 2378 62761
+2496 2378 63312
+2497 2378 52127
+2498 2378 156
+2499 2378 46317
+2500 2378 34381
+2501 2378 60823
+2502 2378 33854
+2503 2378 40812
+2504 2378 5112
+2505 2378 56769
+2506 2378 33106
+2507 2378 43322
+2508 2378 33866
+2509 2378 43789
+2510 2378 8782
+2511 2378 21981
+4889 2378 27852657
+2356 2379 1
+2357 2379 1
+2433 2379 21965
+2434 2379 24572
+2435 2379 24572
+2440 2379 26175
+2441 2379 1603
+2446 2379 38276
+2452 2379 36714
+2453 2379 58699
+2454 2379 1900
+2455 2379 5383
+2456 2379 5383
+2457 2379 55261
+2458 2379 30378
+2460 2379 33751
+2461 2379 35427
+2462 2379 39308
+2463 2379 17966
+2464 2379 40004
+2465 2379 34621
+2466 2379 1992
+2467 2379 25357
+2468 2379 1402
+2470 2379 30550
+2471 2379 6269
+2472 2379 13803
+2473 2379 17967
+2474 2379 24385
+2475 2379 55285
+2476 2379 30647
+2477 2379 29061
+2478 2379 34493
+2479 2379 34930
+2481 2379 22554
+2482 2379 25932
+2483 2379 23673
+2484 2379 49711
+2485 2379 5814
+2486 2379 16050
+2487 2379 55814
+2488 2379 33833
+2489 2379 34074
+2490 2379 63108
+2491 2379 46229
+2493 2379 56819
+2494 2379 34408
+2495 2379 64671
+2496 2379 34457
+2497 2379 39160
+2498 2379 23110
+2499 2379 38929
+2500 2379 55615
+2501 2379 14680
+2502 2379 55365
+2503 2379 21040
+2504 2379 26607
+2505 2379 16608
+2506 2379 64045
+2507 2379 26175
+2508 2379 30024
+2509 2379 62797
+2510 2379 51723
+2511 2379 44680
+4890 2379 27852657
+2358 2380 1
+2368 2380 17941
+2375 2380 36931
+2376 2380 54250
+2377 2380 65042
+2378 2380 65042
+2379 2380 8242
+2380 2380 10065
+2382 2380 35332
+2383 2380 63225
+2384 2380 47257
+2385 2380 48744
+2386 2380 10803
+2387 2380 11282
+2388 2380 27881
+2389 2380 29692
+2390 2380 29692
+2392 2380 8856
+2393 2380 41124
+2394 2380 62108
+2395 2380 21428
+2396 2380 10085
+2397 2380 64324
+2398 2380 63136
+2399 2380 2242
+2400 2380 2242
+2401 2380 2242
+2403 2380 29211
+2404 2380 43558
+2405 2380 16537
+2406 2380 6061
+2407 2380 27859
+2408 2380 29056
+2409 2380 57146
+2410 2380 58647
+2411 2380 58647
+2412 2380 58647
+2413 2380 57596
+2415 2380 27078
+2416 2380 33603
+2417 2380 45305
+2418 2380 9498
+2419 2380 19248
+2420 2380 55713
+2487 2380 33991
+2488 2380 43504
+2489 2380 43504
+2490 2380 43504
+2491 2380 28700
+2492 2380 45852
+2493 2380 2353
+2494 2380 41126
+2495 2380 19090
+2496 2380 43639
+2497 2380 29276
+2498 2380 29606
+2510 2380 33122
+4891 2380 27852657
+2359 2381 1
+2362 2381 43681
+2363 2381 43681
+2368 2381 32684
+2375 2381 17667
+2376 2381 20192
+2377 2381 47593
+2378 2381 47593
+2379 2381 63369
+2380 2381 32744
+2382 2381 56805
+2383 2381 26574
+2384 2381 40407
+2385 2381 42575
+2386 2381 53785
+2387 2381 6192
+2388 2381 37183
+2389 2381 42081
+2390 2381 2199
+2392 2381 49102
+2393 2381 64691
+2394 2381 14158
+2395 2381 39078
+2396 2381 61196
+2397 2381 55004
+2398 2381 13123
+2399 2381 25382
+2400 2381 46901
+2401 2381 46901
+2403 2381 34541
+2404 2381 6347
+2405 2381 41612
+2406 2381 10230
+2407 2381 5683
+2408 2381 16200
+2409 2381 18970
+2410 2381 53779
+2411 2381 59094
+2412 2381 59094
+2413 2381 29515
+2415 2381 43811
+2416 2381 58442
+2417 2381 37643
+2418 2381 17629
+2419 2381 29843
+2420 2381 13643
+2487 2381 10491
+2488 2381 62025
+2489 2381 42653
+2490 2381 42653
+2491 2381 47190
+2492 2381 56714
+2493 2381 54873
+2494 2381 8202
+2495 2381 56790
+2496 2381 63400
+2497 2381 22681
+2498 2381 38041
+2510 2381 39937
+4892 2381 27852657
+2360 2382 1
+2362 2382 28737
+2363 2382 28737
+2368 2382 24783
+2374 2382 1246
+2375 2382 60874
+2376 2382 18235
+2377 2382 9617
+2378 2382 9617
+2379 2382 54083
+2380 2382 59818
+2382 2382 38845
+2383 2382 23451
+2384 2382 9351
+2385 2382 57101
+2386 2382 50597
+2387 2382 40980
+2388 2382 2324
+2389 2382 29440
+2390 2382 3801
+2392 2382 25568
+2393 2382 25739
+2394 2382 49148
+2395 2382 23779
+2396 2382 24477
+2397 2382 49018
+2398 2382 248
+2399 2382 37333
+2400 2382 15814
+2401 2382 29095
+2403 2382 57418
+2404 2382 7841
+2405 2382 38514
+2406 2382 32343
+2407 2382 52504
+2408 2382 3486
+2409 2382 5412
+2410 2382 30872
+2411 2382 25557
+2412 2382 63615
+2413 2382 52306
+2415 2382 26866
+2416 2382 13029
+2417 2382 18975
+2418 2382 44054
+2419 2382 55846
+2420 2382 52360
+2487 2382 63742
+2488 2382 26879
+2489 2382 46251
+2490 2382 7065
+2491 2382 18675
+2492 2382 14308
+2493 2382 63404
+2494 2382 40439
+2495 2382 47018
+2496 2382 20159
+2497 2382 52300
+2498 2382 12026
+2510 2382 18841
+4893 2382 27852657
+2361 2383 1
+2362 2383 58625
+2363 2383 58625
+2368 2383 55634
+2374 2383 64275
+2375 2383 15570
+2376 2383 29124
+2377 2383 51217
+2378 2383 51217
+2379 2383 13107
+2380 2383 36174
+2382 2383 40100
+2383 2383 57832
+2384 2383 10314
+2385 2383 30673
+2386 2383 12012
+2387 2383 26316
+2388 2383 13794
+2389 2383 45490
+2390 2383 45490
+2392 2383 10569
+2393 2383 16405
+2394 2383 54955
+2395 2383 4621
+2396 2383 22143
+2397 2383 61348
+2398 2383 48612
+2399 2383 60162
+2400 2383 60162
+2401 2383 46881
+2403 2383 45909
+2404 2383 5978
+2405 2383 62848
+2406 2383 7017
+2407 2383 39555
+2408 2383 43728
+2409 2383 60919
+2410 2383 64670
+2411 2383 64670
+2412 2383 26612
+2413 2383 3030
+2415 2383 52523
+2416 2383 33011
+2417 2383 34500
+2418 2383 20355
+2419 2383 28024
+2420 2383 49817
+2487 2383 31410
+2488 2383 7226
+2489 2383 7226
+2490 2383 46412
+2491 2383 45069
+2492 2383 22759
+2493 2383 58383
+2494 2383 17340
+2495 2383 10377
+2496 2383 35018
+2497 2383 30736
+2498 2383 13440
+2510 2383 58577
+4894 2383 27852657
+2362 2384 1
+2503 2384 65520
+4895 2384 27852657
+2363 2385 1
+2504 2385 65520
+4896 2385 27852657
+2364 2386 1
+2510 2386 65520
+4897 2386 27852657
+2365 2387 1
+2366 2387 1
+2367 2387 1
+2368 2387 1
+2369 2387 1
+2373 2387 1
+2374 2387 1
+2375 2387 1
+2376 2387 1
+2382 2387 1
+2383 2387 1
+2384 2387 1
+2392 2387 1
+2393 2387 1
+2403 2387 1
+2493 2387 32761
+2494 2387 32761
+2495 2387 32761
+2496 2387 32761
+2497 2387 32761
+2498 2387 32761
+2510 2387 24573
+4898 2387 27852657
+2366 2388 1
+2374 2388 65520
+2375 2388 37768
+2383 2388 37184
+2390 2388 18083
+2392 2388 31076
+2395 2388 47386
+2396 2388 47386
+2397 2388 47386
+2398 2388 7183
+2399 2388 7183
+2400 2388 25266
+2401 2388 412
+2404 2388 53703
+2405 2388 55184
+2406 2388 55184
+2407 2388 37049
+2408 2388 55184
+2409 2388 7183
+2410 2388 7183
+2411 2388 25266
+2412 2388 412
+2413 2388 12743
+2415 2388 53703
+2416 2388 55184
+2417 2388 55184
+2418 2388 37049
+2419 2388 44847
+2420 2388 55184
+2444 2388 5085
+2445 2388 38974
+2446 2388 25965
+2447 2388 17132
+2451 2388 15379
+2452 2388 49268
+2453 2388 36259
+2454 2388 17063
+2455 2388 6721
+2456 2388 6721
+2457 2388 44176
+2458 2388 44176
+2460 2388 37163
+2461 2388 55117
+2462 2388 19223
+2463 2388 37968
+2464 2388 30545
+2465 2388 23824
+2466 2388 54667
+2467 2388 54667
+2468 2388 7234
+2470 2388 17311
+2471 2388 693
+2472 2388 63597
+2473 2388 53067
+2474 2388 53966
+2475 2388 30142
+2476 2388 26748
+2477 2388 26748
+2478 2388 44836
+2479 2388 60649
+2481 2388 48570
+2482 2388 58210
+2483 2388 27986
+2484 2388 11965
+2485 2388 15271
+2486 2388 50650
+2487 2388 8275
+2488 2388 8275
+2489 2388 25511
+2490 2388 65049
+2491 2388 19514
+2493 2388 14457
+2494 2388 44951
+2495 2388 63804
+2496 2388 28883
+2497 2388 6666
+2498 2388 21537
+2499 2388 26845
+2500 2388 26845
+2501 2388 7216
+2502 2388 56922
+2503 2388 27434
+2504 2388 38666
+2505 2388 33408
+2506 2388 3130
+2507 2388 16047
+2508 2388 21044
+2509 2388 60468
+2510 2388 57991
+2511 2388 14487
+4899 2388 27852657
+2367 2389 1
+2374 2389 1
+2375 2389 13876
+2383 2389 46928
+2390 2389 31625
+2392 2389 33728
+2395 2389 31099
+2396 2389 31099
+2397 2389 31099
+2398 2389 56887
+2399 2389 56887
+2400 2389 22991
+2401 2389 47845
+2404 2389 60942
+2405 2389 800
+2406 2389 800
+2407 2389 31899
+2408 2389 800
+2409 2389 56887
+2410 2389 56887
+2411 2389 22991
+2412 2389 47845
+2413 2389 8918
+2415 2389 60942
+2416 2389 800
+2417 2389 800
+2418 2389 31899
+2419 2389 1600
+2420 2389 800
+2445 2389 31632
+2446 2389 46325
+2447 2389 18520
+2451 2389 55577
+2452 2389 21688
+2453 2389 36381
+2454 2389 32708
+2455 2389 59669
+2456 2389 59669
+2457 2389 23371
+2458 2389 23371
+2460 2389 4783
+2461 2389 36755
+2462 2389 34372
+2463 2389 48460
+2464 2389 8388
+2465 2389 14240
+2466 2389 50945
+2467 2389 50945
+2468 2389 61385
+2470 2389 27107
+2471 2389 30392
+2472 2389 20088
+2473 2389 52715
+2474 2389 47823
+2475 2389 33583
+2476 2389 25145
+2477 2389 25145
+2478 2389 35585
+2479 2389 19772
+2481 2389 54810
+2482 2389 58135
+2483 2389 18089
+2484 2389 58599
+2485 2389 27952
+2486 2389 59890
+2487 2389 11499
+2488 2389 11499
+2489 2389 8245
+2490 2389 34228
+2491 2389 32429
+2493 2389 11235
+2494 2389 49233
+2495 2389 16415
+2496 2389 10982
+2497 2389 17131
+2498 2389 22762
+2499 2389 34064
+2500 2389 34064
+2501 2389 53622
+2502 2389 3916
+2503 2389 6375
+2504 2389 24389
+2505 2389 39091
+2506 2389 6104
+2507 2389 33289
+2508 2389 13154
+2509 2389 59076
+2510 2389 7500
+2511 2389 4571
+4900 2389 27852657
+2368 2390 1
+2375 2390 1
+2383 2390 1
+2390 2390 2
+2392 2390 11187
+2395 2390 32246
+2396 2390 32246
+2397 2390 32246
+2398 2390 3546
+2399 2390 3546
+2400 2390 3548
+2401 2390 3548
+2404 2390 54078
+2405 2390 18843
+2406 2390 18843
+2407 2390 51089
+2408 2390 18843
+2409 2390 3546
+2410 2390 3546
+2411 2390 3548
+2412 2390 3548
+2413 2390 3549
+2415 2390 54078
+2416 2390 18843
+2417 2390 18843
+2418 2390 51089
+2419 2390 37686
+2420 2390 18843
+2446 2390 24572
+2447 2390 22036
+2451 2390 15438
+2452 2390 15438
+2453 2390 40010
+2454 2390 29514
+2455 2390 23757
+2456 2390 23757
+2457 2390 5896
+2458 2390 5896
+2460 2390 55537
+2461 2390 14588
+2462 2390 28917
+2463 2390 12590
+2464 2390 16437
+2465 2390 58201
+2466 2390 3795
+2467 2390 3795
+2468 2390 52939
+2470 2390 63077
+2471 2390 2109
+2472 2390 44093
+2473 2390 7011
+2474 2390 59154
+2475 2390 953
+2476 2390 53136
+2477 2390 53136
+2478 2390 36759
+2479 2390 36759
+2481 2390 45306
+2482 2390 40956
+2483 2390 29517
+2484 2390 27706
+2485 2390 746
+2486 2390 65314
+2487 2390 40089
+2488 2390 40089
+2489 2390 31901
+2490 2390 31901
+2491 2390 23707
+2493 2390 17308
+2494 2390 13759
+2495 2390 1508
+2496 2390 23279
+2497 2390 22911
+2498 2390 23118
+2499 2390 15320
+2500 2390 15320
+2501 2390 27605
+2502 2390 27605
+2503 2390 39890
+2504 2390 63521
+2505 2390 28267
+2506 2390 27411
+2507 2390 35785
+2508 2390 9431
+2509 2390 59572
+2510 2390 41965
+2511 2390 3397
+4901 2390 27852657
+2369 2391 1
+2376 2391 33604
+2377 2391 42502
+2378 2391 42502
+2379 2391 48377
+2380 2391 48377
+2382 2391 51156
+2383 2391 51156
+2384 2391 40788
+2385 2391 61530
+2386 2391 6198
+2387 2391 29217
+2388 2391 57498
+2389 2391 57498
+2390 2391 57498
+2392 2391 53023
+2393 2391 6296
+2394 2391 30840
+2395 2391 50262
+2396 2391 23069
+2397 2391 59373
+2398 2391 41729
+2399 2391 41729
+2400 2391 41729
+2401 2391 41729
+2403 2391 22301
+2404 2391 22629
+2405 2391 11224
+2406 2391 13238
+2407 2391 22956
+2408 2391 29104
+2409 2391 45521
+2410 2391 45521
+2411 2391 45521
+2412 2391 45521
+2413 2391 45521
+2415 2391 14850
+2416 2391 29894
+2417 2391 11780
+2418 2391 17329
+2419 2391 50282
+2420 2391 21178
+2487 2391 56153
+2488 2391 56153
+2489 2391 56153
+2490 2391 56153
+2491 2391 56153
+2492 2391 1552
+2493 2391 29280
+2494 2391 16793
+2495 2391 4004
+2496 2391 1948
+2497 2391 45476
+2498 2391 42274
+2510 2391 62575
+4902 2391 27852657
+2371 2392 1
+2379 2392 1
+2380 2392 1
+2388 2392 1
+2389 2392 1
+2390 2392 1
+2398 2392 1
+2399 2392 1
+2400 2392 1
+2401 2392 1
+2409 2392 1
+2410 2392 1
+2411 2392 1
+2412 2392 1
+2413 2392 1
+2487 2392 32761
+2488 2392 32761
+2489 2392 32761
+2490 2392 32761
+2491 2392 32761
+2492 2392 32761
+2510 2392 24573
+4903 2392 27852657
+2372 2393 1
+2510 2393 65520
+4904 2393 27852657
+2373 2394 1
+2374 2394 1
+2375 2394 1
+2382 2394 1
+2383 2394 1
+2451 2394 54601
+2452 2394 54601
+2453 2394 54601
+2454 2394 54601
+2460 2394 54601
+2461 2394 54601
+2462 2394 54601
+2494 2394 43681
+2495 2394 43681
+2496 2394 43681
+2497 2394 43681
+2498 2394 43681
+2506 2394 12286
+2507 2394 12286
+2508 2394 30031
+2509 2394 30031
+2510 2394 42317
+2511 2394 23888
+4905 2394 27852657
+2374 2395 1
+2446 2395 42888
+2452 2395 21816
+2453 2395 28482
+2454 2395 20744
+2455 2395 49534
+2456 2395 49534
+2457 2395 47089
+2458 2395 31442
+2460 2395 22436
+2461 2395 33747
+2462 2395 55239
+2463 2395 33134
+2464 2395 17973
+2465 2395 33960
+2466 2395 41341
+2467 2395 30447
+2468 2395 30447
+2470 2395 20889
+2471 2395 55630
+2472 2395 60156
+2473 2395 49055
+2474 2395 50622
+2475 2395 16662
+2476 2395 22043
+2477 2395 49734
+2478 2395 49734
+2479 2395 20584
+2481 2395 1485
+2482 2395 45974
+2483 2395 44482
+2484 2395 30893
+2485 2395 56328
+2486 2395 39666
+2487 2395 59251
+2488 2395 30117
+2489 2395 30117
+2490 2395 36479
+2491 2395 36420
+2493 2395 57439
+2494 2395 21613
+2495 2395 2900
+2496 2395 43950
+2497 2395 46830
+2498 2395 7164
+2499 2395 46571
+2500 2395 12779
+2501 2395 12779
+2502 2395 20057
+2503 2395 17285
+2504 2395 53216
+2505 2395 6399
+2506 2395 61358
+2507 2395 58667
+2508 2395 38655
+2509 2395 12348
+2510 2395 17135
+2511 2395 9411
+4906 2395 27852657
+2375 2396 1
+2446 2396 52253
+2453 2396 13363
+2454 2396 53938
+2455 2396 11620
+2456 2396 11620
+2457 2396 43365
+2458 2396 7510
+2460 2396 20047
+2461 2396 62043
+2462 2396 15670
+2463 2396 65454
+2464 2396 49270
+2465 2396 37650
+2466 2396 49208
+2467 2396 1582
+2468 2396 1582
+2470 2396 32034
+2471 2396 19716
+2472 2396 62230
+2473 2396 34283
+2474 2396 60070
+2475 2396 22420
+2476 2396 53974
+2477 2396 36677
+2478 2396 36677
+2479 2396 36677
+2481 2396 41930
+2482 2396 42291
+2483 2396 43610
+2484 2396 16261
+2485 2396 24533
+2486 2396 2113
+2487 2396 38900
+2488 2396 7511
+2489 2396 7511
+2490 2396 7511
+2491 2396 15688
+2493 2396 58489
+2494 2396 20826
+2495 2396 3817
+2496 2396 53517
+2497 2396 63132
+2498 2396 61019
+2499 2396 37291
+2500 2396 38405
+2501 2396 38405
+2502 2396 38405
+2503 2396 543
+2504 2396 33693
+2505 2396 24308
+2506 2396 9844
+2507 2396 27130
+2508 2396 48515
+2509 2396 46534
+2510 2396 18434
+2511 2396 25667
+4907 2396 27852657
+2376 2397 1
+2506 2397 65520
+4908 2397 27852657
+2377 2398 1
+2378 2398 1
+2385 2398 1
+2387 2398 65520
+2392 2398 58146
+2394 2398 1
+2395 2398 19788
+2396 2398 29844
+2397 2398 29845
+2398 2398 17116
+2399 2398 17116
+2400 2398 17116
+2401 2398 17116
+2404 2398 35794
+2405 2398 22513
+2406 2398 57768
+2407 2398 12029
+2408 2398 47705
+2409 2398 17116
+2410 2398 17116
+2411 2398 17116
+2412 2398 17116
+2413 2398 17116
+2415 2398 35794
+2416 2398 22513
+2417 2398 57768
+2418 2398 12029
+2419 2398 29889
+2420 2398 47705
+2451 2398 42007
+2452 2398 42007
+2453 2398 42007
+2454 2398 42007
+2455 2398 24566
+2456 2398 24566
+2457 2398 21877
+2458 2398 21877
+2460 2398 22881
+2461 2398 22881
+2462 2398 22881
+2464 2398 26940
+2465 2398 2374
+2466 2398 13380
+2467 2398 13380
+2468 2398 13380
+2470 2398 19856
+2471 2398 19856
+2473 2398 30155
+2474 2398 11002
+2475 2398 8628
+2476 2398 9180
+2477 2398 9180
+2478 2398 9180
+2479 2398 9180
+2481 2398 63383
+2482 2398 18195
+2483 2398 19529
+2484 2398 51379
+2485 2398 24542
+2486 2398 15914
+2487 2398 32983
+2488 2398 32983
+2489 2398 32983
+2490 2398 32983
+2491 2398 32983
+2493 2398 25408
+2494 2398 4098
+2495 2398 39693
+2496 2398 7223
+2497 2398 18108
+2498 2398 2194
+2499 2398 58434
+2500 2398 58434
+2501 2398 58434
+2502 2398 58434
+2503 2398 58434
+2504 2398 58434
+2506 2398 56439
+2507 2398 29947
+2508 2398 55674
+2509 2398 3911
+2510 2398 58574
+2511 2398 6591
+4909 2398 27852657
+2379 2399 1
+2389 2399 65520
+2390 2399 65520
+2392 2399 38716
+2395 2399 2268
+2396 2399 2268
+2397 2399 2268
+2398 2399 20008
+2399 2399 20007
+2400 2399 20007
+2401 2399 20008
+2404 2399 13964
+2405 2399 23235
+2406 2399 23235
+2407 2399 25503
+2408 2399 23235
+2409 2399 20008
+2410 2399 20007
+2411 2399 20007
+2412 2399 20008
+2413 2399 20008
+2415 2399 13964
+2416 2399 23235
+2417 2399 23235
+2418 2399 25503
+2419 2399 46470
+2420 2399 23235
+2451 2399 48403
+2452 2399 48403
+2453 2399 48403
+2454 2399 48403
+2457 2399 11299
+2458 2399 11293
+2460 2399 26755
+2461 2399 26755
+2462 2399 26755
+2464 2399 10841
+2465 2399 10841
+2466 2399 51193
+2467 2399 51187
+2468 2399 51187
+2470 2399 15642
+2471 2399 15642
+2473 2399 60957
+2474 2399 3482
+2475 2399 58162
+2476 2399 28974
+2477 2399 28968
+2478 2399 28968
+2479 2399 28974
+2481 2399 13721
+2482 2399 18263
+2483 2399 41386
+2484 2399 2187
+2485 2399 63457
+2486 2399 5295
+2487 2399 38920
+2488 2399 30725
+2489 2399 30725
+2490 2399 55297
+2491 2399 55297
+2493 2399 55452
+2494 2399 48097
+2495 2399 45140
+2496 2399 19845
+2497 2399 17723
+2498 2399 12428
+2499 2399 58129
+2500 2399 58127
+2501 2399 58127
+2502 2399 58127
+2503 2399 58127
+2504 2399 58127
+2506 2399 62431
+2507 2399 49747
+2508 2399 14461
+2509 2399 9108
+2510 2399 26926
+2511 2399 21426
+4910 2399 27852657
+2380 2400 1
+2389 2400 1
+2390 2400 1
+2399 2400 1
+2400 2400 1
+2410 2400 1
+2411 2400 1
+2458 2400 6
+2467 2400 6
+2468 2400 6
+2477 2400 6
+2478 2400 6
+2488 2400 8195
+2489 2400 8195
+2490 2400 49144
+2491 2400 49144
+2500 2400 2
+2501 2400 2
+2502 2400 2
+2503 2400 2
+2504 2400 2
+2510 2400 12286
+2511 2400 57339
+4911 2400 27852657
+2381 2401 1
+2510 2401 65520
+4912 2401 27852657
+2382 2402 1
+2383 2402 1
+2392 2402 10083
+2404 2402 10080
+2405 2402 10080
+2406 2402 10080
+2407 2402 10080
+2408 2402 10080
+2415 2402 10080
+2416 2402 10080
+2417 2402 10080
+2418 2402 10080
+2419 2402 20160
+2420 2402 10080
+2460 2402 25201
+2461 2402 25201
+2462 2402 25201
+2470 2402 5041
+2471 2402 5041
+2481 2402 5041
+2482 2402 60480
+2483 2402 60480
+2484 2402 60480
+2485 2402 60480
+2486 2402 60480
+2493 2402 16380
+2494 2402 16380
+2495 2402 20160
+2496 2402 20160
+2497 2402 3779
+2498 2402 8820
+2507 2402 22681
+2508 2402 55442
+2509 2402 10081
+2510 2402 43157
+2511 2402 8821
+4913 2402 27852657
+2383 2403 1
+2446 2403 63085
+2453 2403 53975
+2454 2403 13194
+2455 2403 49813
+2456 2403 49813
+2457 2403 13047
+2458 2403 20489
+2460 2403 2269
+2461 2403 28070
+2462 2403 49488
+2463 2403 57313
+2464 2403 59669
+2465 2403 9856
+2466 2403 6775
+2467 2403 17890
+2468 2403 17890
+2470 2403 55035
+2471 2403 58741
+2472 2403 42593
+2473 2403 16023
+2474 2403 50122
+2475 2403 40266
+2476 2403 60645
+2477 2403 64840
+2478 2403 64840
+2479 2403 64840
+2481 2403 40895
+2482 2403 43337
+2483 2403 14476
+2484 2403 43911
+2485 2403 64303
+2486 2403 24037
+2487 2403 58318
+2488 2403 35032
+2489 2403 35032
+2490 2403 35032
+2491 2403 10783
+2493 2403 20581
+2494 2403 44678
+2495 2403 6893
+2496 2403 55967
+2497 2403 45266
+2498 2403 21229
+2499 2403 37413
+2500 2403 15752
+2501 2403 15752
+2502 2403 15752
+2503 2403 18048
+2504 2403 25828
+2505 2403 38894
+2506 2403 21261
+2507 2403 51835
+2508 2403 45242
+2509 2403 11062
+2510 2403 45002
+2511 2403 6465
+4914 2403 27852657
+2384 2404 1
+2507 2404 65520
+4915 2404 27852657
+2385 2405 1
+2455 2405 868
+2456 2405 868
+2457 2405 8397
+2458 2405 8397
+2460 2405 53695
+2461 2405 53695
+2462 2405 53695
+2463 2405 48098
+2464 2405 29350
+2465 2405 28482
+2466 2405 28714
+2467 2405 28714
+2468 2405 28714
+2470 2405 29231
+2471 2405 29231
+2472 2405 13154
+2473 2405 7327
+2474 2405 12247
+2475 2405 49286
+2476 2405 4407
+2477 2405 4407
+2478 2405 4407
+2479 2405 4407
+2481 2405 38231
+2482 2405 38343
+2483 2405 5377
+2484 2405 2797
+2485 2405 43343
+2486 2405 59578
+2487 2405 23004
+2488 2405 23004
+2489 2405 23004
+2490 2405 23004
+2491 2405 23004
+2493 2405 6511
+2494 2405 40099
+2495 2405 2072
+2496 2405 36363
+2497 2405 9053
+2498 2405 14996
+2499 2405 47362
+2500 2405 47362
+2501 2405 47362
+2502 2405 47362
+2503 2405 47362
+2504 2405 47362
+2505 2405 47808
+2506 2405 48795
+2507 2405 55645
+2508 2405 39918
+2509 2405 21601
+2510 2405 39494
+2511 2405 51530
+4916 2405 27852657
+2386 2406 1
+2387 2406 1
+2392 2406 9164
+2395 2406 2585
+2396 2406 63078
+2397 2406 63077
+2398 2406 38823
+2399 2406 38823
+2400 2406 38823
+2401 2406 38823
+2404 2406 59338
+2405 2406 10043
+2406 2406 25176
+2407 2406 27763
+2408 2406 30207
+2409 2406 38823
+2410 2406 38823
+2411 2406 38823
+2412 2406 38823
+2413 2406 38823
+2415 2406 59338
+2416 2406 10043
+2417 2406 25176
+2418 2406 27763
+2419 2406 60414
+2420 2406 30207
+2451 2406 65511
+2452 2406 65511
+2453 2406 65511
+2454 2406 65511
+2457 2406 62825
+2458 2406 62825
+2460 2406 48263
+2461 2406 48263
+2462 2406 48263
+2464 2406 1321
+2465 2406 1321
+2466 2406 10933
+2467 2406 10933
+2468 2406 10933
+2470 2406 24935
+2471 2406 24935
+2473 2406 56219
+2474 2406 59435
+2475 2406 58114
+2476 2406 63620
+2477 2406 63620
+2478 2406 63620
+2479 2406 63620
+2481 2406 54899
+2482 2406 28423
+2483 2406 46677
+2484 2406 64614
+2485 2406 20332
+2486 2406 27739
+2487 2406 7466
+2488 2406 7466
+2489 2406 7466
+2490 2406 7466
+2491 2406 7466
+2493 2406 14523
+2494 2406 4250
+2495 2406 1121
+2496 2406 48211
+2497 2406 50504
+2498 2406 22765
+2499 2406 46954
+2500 2406 46954
+2501 2406 46954
+2502 2406 46954
+2503 2406 46954
+2504 2406 46954
+2506 2406 63819
+2507 2406 36998
+2508 2406 38046
+2509 2406 34182
+2510 2406 15232
+2511 2406 3853
+4917 2406 27852657
+2388 2407 1
+2389 2407 1
+2390 2407 1
+2392 2407 61391
+2395 2407 28616
+2396 2407 28616
+2397 2407 28616
+2398 2407 37944
+2399 2407 37944
+2400 2407 37944
+2401 2407 37944
+2404 2407 57464
+2405 2407 17512
+2406 2407 17512
+2407 2407 46128
+2408 2407 17512
+2409 2407 37944
+2410 2407 37944
+2411 2407 37944
+2412 2407 37944
+2413 2407 37944
+2415 2407 57464
+2416 2407 17512
+2417 2407 17512
+2418 2407 46128
+2419 2407 35024
+2420 2407 17512
+2451 2407 24261
+2452 2407 24261
+2453 2407 24261
+2454 2407 24261
+2457 2407 21025
+2458 2407 21025
+2460 2407 940
+2461 2407 940
+2462 2407 940
+2464 2407 21920
+2465 2407 21920
+2466 2407 52587
+2467 2407 52587
+2468 2407 52587
+2470 2407 38208
+2471 2407 38208
+2473 2407 62941
+2474 2407 55258
+2475 2407 33338
+2476 2407 10967
+2477 2407 10967
+2478 2407 10967
+2479 2407 10967
+2481 2407 36717
+2482 2407 17179
+2483 2407 9635
+2484 2407 48116
+2485 2407 43014
+2486 2407 9676
+2487 2407 28477
+2488 2407 28477
+2489 2407 28477
+2490 2407 28477
+2491 2407 28477
+2493 2407 27858
+2494 2407 15948
+2495 2407 11968
+2496 2407 42064
+2497 2407 49489
+2498 2407 39813
+2499 2407 15429
+2500 2407 15429
+2501 2407 15429
+2502 2407 15429
+2503 2407 15429
+2504 2407 15429
+2506 2407 31387
+2507 2407 59113
+2508 2407 27439
+2509 2407 43308
+2510 2407 40133
+2511 2407 50139
+4918 2407 27852657
+2389 2408 1
+2446 2408 48276
+2453 2408 51482
+2454 2408 17881
+2455 2408 22046
+2456 2408 22046
+2457 2408 51722
+2458 2408 28586
+2460 2408 44041
+2461 2408 37371
+2462 2408 22101
+2463 2408 33471
+2464 2408 8428
+2465 2408 51903
+2466 2408 28908
+2467 2408 34653
+2468 2408 4819
+2470 2408 57241
+2471 2408 51781
+2472 2408 9119
+2473 2408 3455
+2474 2408 36224
+2475 2408 49842
+2476 2408 8604
+2477 2408 51606
+2478 2408 54999
+2479 2408 54999
+2481 2408 30772
+2482 2408 23984
+2483 2408 42185
+2484 2408 56552
+2485 2408 62031
+2486 2408 12189
+2487 2408 13361
+2488 2408 13451
+2489 2408 11186
+2490 2408 11186
+2491 2408 43600
+2493 2408 193
+2494 2408 62174
+2495 2408 36724
+2496 2408 362
+2497 2408 11101
+2498 2408 64433
+2499 2408 599
+2500 2408 62762
+2501 2408 27870
+2502 2408 27870
+2503 2408 43188
+2504 2408 47395
+2505 2408 62110
+2506 2408 43311
+2507 2408 16690
+2508 2408 23032
+2509 2408 39236
+2510 2408 17287
+2511 2408 30793
+4919 2408 27852657
+2390 2409 1
+2446 2409 18802
+2453 2409 3118
+2454 2409 37755
+2455 2409 49189
+2456 2409 49189
+2457 2409 15006
+2458 2409 60263
+2460 2409 20203
+2461 2409 28881
+2462 2409 45532
+2463 2409 32891
+2464 2409 36724
+2465 2409 53056
+2466 2409 32396
+2467 2409 62017
+2468 2409 26330
+2470 2409 4940
+2471 2409 30849
+2472 2409 62531
+2473 2409 29496
+2474 2409 60597
+2475 2409 7541
+2476 2409 64999
+2477 2409 43698
+2478 2409 40305
+2479 2409 40305
+2481 2409 3757
+2482 2409 53942
+2483 2409 54390
+2484 2409 12205
+2485 2409 408
+2486 2409 58388
+2487 2409 6079
+2488 2409 22312
+2489 2409 24577
+2490 2409 24577
+2491 2409 40578
+2493 2409 58247
+2494 2409 1415
+2495 2409 25017
+2496 2409 33551
+2497 2409 12214
+2498 2409 19347
+2499 2409 16508
+2500 2409 671
+2501 2409 35563
+2502 2409 35563
+2503 2409 17441
+2504 2409 42756
+2505 2409 50206
+2506 2409 33291
+2507 2409 40578
+2508 2409 573
+2509 2409 56714
+2510 2409 11232
+2511 2409 26030
+4920 2409 27852657
+2391 2410 1
+2510 2410 65520
+4921 2410 27852657
+2392 2411 1
+2455 2411 32475
+2456 2411 32475
+2457 2411 57552
+2458 2411 57552
+2460 2411 29212
+2461 2411 29212
+2462 2411 29212
+2463 2411 44899
+2464 2411 50853
+2465 2411 18378
+2466 2411 58761
+2467 2411 58761
+2468 2411 58761
+2470 2411 21128
+2471 2411 21128
+2472 2411 11501
+2473 2411 30393
+2474 2411 19629
+2475 2411 1251
+2476 2411 3800
+2477 2411 3800
+2478 2411 3800
+2479 2411 3800
+2481 2411 54778
+2482 2411 7871
+2483 2411 28566
+2484 2411 40174
+2485 2411 19153
+2486 2411 17902
+2487 2411 28310
+2488 2411 28310
+2489 2411 28310
+2490 2411 28310
+2491 2411 28310
+2493 2411 19505
+2494 2411 45809
+2495 2411 53833
+2496 2411 41667
+2497 2411 61911
+2498 2411 44009
+2499 2411 18240
+2500 2411 18240
+2501 2411 18240
+2502 2411 18240
+2503 2411 18240
+2504 2411 18240
+2505 2411 33572
+2506 2411 13267
+2507 2411 30582
+2508 2411 10392
+2509 2411 23971
+2510 2411 55942
+2511 2411 44121
+4922 2411 27852657
+2393 2412 1
+2508 2412 65520
+4923 2412 27852657
+2394 2413 1
+2455 2413 22542
+2456 2413 22542
+2457 2413 29294
+2458 2413 29294
+2460 2413 10063
+2461 2413 10063
+2462 2413 10063
+2463 2413 33632
+2464 2413 10203
+2465 2413 53182
+2466 2413 15230
+2467 2413 15230
+2468 2413 15230
+2470 2413 10673
+2471 2413 10673
+2472 2413 9587
+2473 2413 42214
+2474 2413 46082
+2475 2413 58421
+2476 2413 47655
+2477 2413 47655
+2478 2413 47655
+2479 2413 47655
+2481 2413 44402
+2482 2413 1393
+2483 2413 21031
+2484 2413 23891
+2485 2413 19644
+2486 2413 26744
+2487 2413 43805
+2488 2413 43805
+2489 2413 43805
+2490 2413 43805
+2491 2413 43805
+2493 2413 33899
+2494 2413 25859
+2495 2413 20862
+2496 2413 18885
+2497 2413 30705
+2498 2413 3961
+2499 2413 32181
+2500 2413 32181
+2501 2413 32181
+2502 2413 32181
+2503 2413 32181
+2504 2413 32181
+2505 2413 59859
+2506 2413 25442
+2507 2413 48240
+2508 2413 6845
+2509 2413 42270
+2510 2413 10131
+2511 2413 56199
+4924 2413 27852657
+2395 2414 1
+2417 2414 3322
+2418 2414 52312
+2419 2414 36027
+2420 2414 36027
+2455 2414 5847
+2456 2414 5847
+2457 2414 57408
+2458 2414 57408
+2460 2414 15773
+2461 2414 15773
+2462 2414 15773
+2463 2414 27820
+2464 2414 25691
+2465 2414 19844
+2466 2414 37903
+2467 2414 37903
+2468 2414 37903
+2470 2414 19053
+2471 2414 19053
+2472 2414 26346
+2473 2414 38305
+2474 2414 30195
+2475 2414 10351
+2476 2414 61661
+2477 2414 61661
+2478 2414 61661
+2479 2414 61661
+2481 2414 33316
+2482 2414 3489
+2483 2414 57760
+2484 2414 23830
+2485 2414 56841
+2486 2414 46490
+2487 2414 36764
+2488 2414 36764
+2489 2414 36764
+2490 2414 36764
+2491 2414 36764
+2493 2414 13063
+2494 2414 46558
+2495 2414 41906
+2496 2414 42760
+2497 2414 45813
+2498 2414 30474
+2499 2414 46993
+2500 2414 46993
+2501 2414 46993
+2502 2414 46993
+2503 2414 46993
+2504 2414 46993
+2505 2414 28717
+2506 2414 2266
+2507 2414 25062
+2508 2414 54778
+2509 2414 12301
+2510 2414 3465
+2511 2414 42308
+4925 2414 27852657
+2396 2415 1
+2397 2415 1
+2408 2415 65520
+2417 2415 39805
+2418 2415 48171
+2419 2415 56248
+2420 2415 56249
+2455 2415 19250
+2456 2415 19250
+2457 2415 2854
+2458 2415 2854
+2460 2415 5527
+2461 2415 5527
+2462 2415 5527
+2463 2415 63540
+2464 2415 35583
+2465 2415 16333
+2466 2415 22088
+2467 2415 22088
+2468 2415 22088
+2470 2415 43901
+2471 2415 43901
+2472 2415 27660
+2473 2415 57032
+2474 2415 50754
+2475 2415 34421
+2476 2415 24415
+2477 2415 24415
+2478 2415 24415
+2479 2415 24415
+2481 2415 61054
+2482 2415 1993
+2483 2415 60567
+2484 2415 61079
+2485 2415 25184
+2486 2415 56284
+2487 2415 1709
+2488 2415 1709
+2489 2415 1709
+2490 2415 1709
+2491 2415 1709
+2493 2415 13293
+2494 2415 43713
+2495 2415 12540
+2496 2415 5645
+2497 2415 51895
+2498 2415 13869
+2499 2415 51671
+2500 2415 51671
+2501 2415 51671
+2502 2415 51671
+2503 2415 51671
+2504 2415 51671
+2505 2415 17351
+2506 2415 47973
+2507 2415 57817
+2508 2415 19171
+2509 2415 39564
+2510 2415 63310
+2511 2415 2901
+4926 2415 27852657
+2398 2416 1
+2417 2416 285
+2418 2416 36760
+2419 2416 3709
+2420 2416 3709
+2446 2416 13403
+2453 2416 2146
+2454 2416 33704
+2455 2416 16664
+2456 2416 16664
+2457 2416 32165
+2458 2416 62506
+2460 2416 60423
+2461 2416 39372
+2462 2416 34259
+2463 2416 40053
+2464 2416 64243
+2465 2416 47579
+2466 2416 35164
+2467 2416 38081
+2468 2416 38081
+2470 2416 98
+2471 2416 5613
+2472 2416 12660
+2473 2416 24873
+2474 2416 57165
+2475 2416 9586
+2476 2416 25392
+2477 2416 2521
+2478 2416 2521
+2479 2416 2521
+2481 2416 63791
+2482 2416 32407
+2483 2416 63176
+2484 2416 167
+2485 2416 27671
+2486 2416 18085
+2487 2416 27364
+2488 2416 30648
+2489 2416 30648
+2490 2416 30648
+2491 2416 38803
+2493 2416 16658
+2494 2416 30818
+2495 2416 52683
+2496 2416 8467
+2497 2416 42057
+2498 2416 25717
+2499 2416 44362
+2500 2416 6971
+2501 2416 6971
+2502 2416 6971
+2503 2416 33626
+2504 2416 39140
+2505 2416 19470
+2506 2416 45241
+2507 2416 32225
+2508 2416 63587
+2509 2416 7098
+2510 2416 37330
+2511 2416 39629
+4927 2416 27852657
+2399 2417 1
+2416 2417 41464
+2417 2417 52545
+2418 2417 54122
+2419 2417 28505
+2420 2417 28505
+2446 2417 19879
+2453 2417 26115
+2454 2417 11795
+2455 2417 10742
+2456 2417 10742
+2457 2417 52290
+2458 2417 21241
+2460 2417 27621
+2461 2417 1077
+2462 2417 2984
+2463 2417 59788
+2464 2417 30011
+2465 2417 19269
+2466 2417 28555
+2467 2417 45517
+2468 2417 15690
+2470 2417 53334
+2471 2417 56979
+2472 2417 50908
+2473 2417 24303
+2474 2417 18525
+2475 2417 64777
+2476 2417 46961
+2477 2417 18298
+2478 2417 56763
+2479 2417 56763
+2481 2417 58141
+2482 2417 42637
+2483 2417 32456
+2484 2417 266
+2485 2417 18600
+2486 2417 19344
+2487 2417 42412
+2488 2417 1425
+2489 2417 24185
+2490 2417 24185
+2491 2417 64712
+2493 2417 29635
+2494 2417 56772
+2495 2417 64329
+2496 2417 34746
+2497 2417 37047
+2498 2417 40959
+2499 2417 1731
+2500 2417 20035
+2501 2417 2862
+2502 2417 2862
+2503 2417 10953
+2504 2417 18390
+2505 2417 45000
+2506 2417 10281
+2507 2417 31229
+2508 2417 10898
+2509 2417 17607
+2510 2417 37720
+2511 2417 58187
+4928 2417 27852657
+2400 2418 1
+2416 2418 6297
+2417 2418 4460
+2418 2418 58948
+2419 2418 62440
+2420 2418 62440
+2446 2418 59748
+2452 2418 16015
+2453 2418 56213
+2454 2418 8959
+2455 2418 1642
+2456 2418 1642
+2457 2418 20240
+2458 2418 38074
+2460 2418 62447
+2461 2418 28280
+2462 2418 42043
+2463 2418 15618
+2464 2418 53120
+2465 2418 51478
+2466 2418 14487
+2467 2418 30329
+2468 2418 60156
+2470 2418 36195
+2471 2418 28853
+2472 2418 31169
+2473 2418 45082
+2474 2418 50457
+2475 2418 64500
+2476 2418 21780
+2477 2418 48332
+2478 2418 9867
+2479 2418 23377
+2481 2418 62903
+2482 2418 33485
+2483 2418 60113
+2484 2418 37151
+2485 2418 58949
+2486 2418 59970
+2487 2418 9652
+2488 2418 54
+2489 2418 42815
+2490 2418 24811
+2491 2418 31931
+2493 2418 5622
+2494 2418 34543
+2495 2418 56711
+2496 2418 65110
+2497 2418 61983
+2498 2418 60461
+2499 2418 20575
+2500 2418 45862
+2501 2418 63035
+2502 2418 15302
+2503 2418 11980
+2504 2418 58869
+2505 2418 38866
+2506 2418 9742
+2507 2418 38161
+2508 2418 50103
+2509 2418 48848
+2510 2418 23409
+2511 2418 50030
+4929 2418 27852657
+2401 2419 1
+2416 2419 17760
+2417 2419 1770
+2418 2419 30670
+2419 2419 27582
+2420 2419 27582
+2446 2419 38012
+2452 2419 49506
+2453 2419 46568
+2454 2419 11063
+2455 2419 39224
+2456 2419 39224
+2457 2419 51775
+2458 2419 34649
+2460 2419 14899
+2461 2419 31140
+2462 2419 20583
+2463 2419 11236
+2464 2419 16928
+2465 2419 43225
+2466 2419 5441
+2467 2419 35241
+2468 2419 35241
+2470 2419 57170
+2471 2419 55352
+2472 2419 14953
+2473 2419 56085
+2474 2419 45359
+2475 2419 2134
+2476 2419 27392
+2477 2419 52374
+2478 2419 52374
+2479 2419 38864
+2481 2419 3542
+2482 2419 44556
+2483 2419 1223
+2484 2419 43120
+2485 2419 53763
+2486 2419 51629
+2487 2419 54310
+2488 2419 36090
+2489 2419 36090
+2490 2419 54094
+2491 2419 63813
+2493 2419 60372
+2494 2419 14158
+2495 2419 10804
+2496 2419 36182
+2497 2419 49735
+2498 2419 35039
+2499 2419 27717
+2500 2419 21517
+2501 2419 21517
+2502 2419 3729
+2503 2419 37826
+2504 2419 43507
+2505 2419 10854
+2506 2419 31536
+2507 2419 40314
+2508 2419 45871
+2509 2419 44825
+2510 2419 24450
+2511 2419 10183
+4930 2419 27852657
+2402 2420 1
+2510 2420 65520
+4931 2420 27852657
+2403 2421 1
+2509 2421 65520
+4932 2421 27852657
+2404 2422 1
+2416 2422 31400
+2417 2422 60670
+2418 2422 18324
+2419 2422 19992
+2420 2422 19992
+2455 2422 36935
+2456 2422 36935
+2457 2422 65172
+2458 2422 65172
+2460 2422 55824
+2461 2422 55824
+2462 2422 55824
+2463 2422 62582
+2464 2422 2673
+2465 2422 31259
+2466 2422 59560
+2467 2422 59560
+2468 2422 59560
+2470 2422 17220
+2471 2422 17220
+2472 2422 19347
+2473 2422 43931
+2474 2422 63058
+2475 2422 31799
+2476 2422 37856
+2477 2422 37856
+2478 2422 37856
+2479 2422 37856
+2481 2422 4532
+2482 2422 64459
+2483 2422 63685
+2484 2422 21743
+2485 2422 16337
+2486 2422 50059
+2487 2422 6839
+2488 2422 6839
+2489 2422 6839
+2490 2422 6839
+2491 2422 6839
+2493 2422 51252
+2494 2422 31687
+2495 2422 29883
+2496 2422 45441
+2497 2422 42273
+2498 2422 37368
+2499 2422 63771
+2500 2422 63771
+2501 2422 63771
+2502 2422 63771
+2503 2422 63771
+2504 2422 63771
+2505 2422 15775
+2506 2422 58935
+2507 2422 14546
+2508 2422 11474
+2509 2422 1495
+2510 2422 62575
+2511 2422 63496
+4933 2422 27852657
+2405 2423 1
+2416 2423 1
+2417 2423 32894
+2418 2423 24863
+2419 2423 60253
+2420 2423 60253
+2455 2423 24727
+2456 2423 24727
+2457 2423 15425
+2458 2423 15425
+2460 2423 11569
+2461 2423 11569
+2462 2423 11569
+2463 2423 60875
+2464 2423 8325
+2465 2423 49119
+2466 2423 45685
+2467 2423 45685
+2468 2423 45685
+2470 2423 47868
+2471 2423 47868
+2472 2423 5660
+2473 2423 24060
+2474 2423 29208
+2475 2423 45610
+2476 2423 14252
+2477 2423 14252
+2478 2423 14252
+2479 2423 14252
+2481 2423 53793
+2482 2423 51075
+2483 2423 6901
+2484 2423 3375
+2485 2423 29807
+2486 2423 49718
+2487 2423 14448
+2488 2423 14448
+2489 2423 14448
+2490 2423 14448
+2491 2423 14448
+2493 2423 33811
+2494 2423 39419
+2495 2423 54976
+2496 2423 8400
+2497 2423 41466
+2498 2423 64428
+2499 2423 29097
+2500 2423 29097
+2501 2423 29097
+2502 2423 29097
+2503 2423 29097
+2504 2423 29097
+2505 2423 46540
+2506 2423 15791
+2507 2423 29058
+2508 2423 54944
+2509 2423 40389
+2510 2423 50739
+2511 2423 43063
+4934 2423 27852657
+2406 2424 1
+2417 2424 10234
+2418 2424 10099
+2419 2424 32024
+2420 2424 32024
+2455 2424 19221
+2456 2424 19221
+2457 2424 56103
+2458 2424 56103
+2460 2424 5114
+2461 2424 5114
+2462 2424 5114
+2463 2424 40240
+2464 2424 9875
+2465 2424 56175
+2466 2424 20870
+2467 2424 20870
+2468 2424 20870
+2470 2424 36137
+2471 2424 36137
+2472 2424 40583
+2473 2424 48282
+2474 2424 4148
+2475 2424 13494
+2476 2424 41383
+2477 2424 41383
+2478 2424 41383
+2479 2424 41383
+2481 2424 63516
+2482 2424 13984
+2483 2424 61791
+2484 2424 65209
+2485 2424 5735
+2486 2424 57762
+2487 2424 23287
+2488 2424 23287
+2489 2424 23287
+2490 2424 23287
+2491 2424 23287
+2493 2424 25986
+2494 2424 53399
+2495 2424 38715
+2496 2424 16183
+2497 2424 51180
+2498 2424 35668
+2499 2424 41388
+2500 2424 41388
+2501 2424 41388
+2502 2424 41388
+2503 2424 41388
+2504 2424 41388
+2505 2424 32646
+2506 2424 37955
+2507 2424 10681
+2508 2424 27804
+2509 2424 33471
+2510 2424 4501
+2511 2424 35102
+4935 2424 27852657
+2407 2425 1
+2408 2425 1
+2417 2425 22394
+2418 2425 30560
+2419 2425 38767
+2420 2425 38766
+2455 2425 51103
+2456 2425 51103
+2457 2425 28487
+2458 2425 28487
+2460 2425 23802
+2461 2425 23802
+2462 2425 23802
+2463 2425 54464
+2464 2425 13107
+2465 2425 27525
+2466 2425 10270
+2467 2425 10270
+2468 2425 10270
+2470 2425 58306
+2471 2425 58306
+2472 2425 42963
+2473 2425 5339
+2474 2425 7814
+2475 2425 45810
+2476 2425 64788
+2477 2425 64788
+2478 2425 64788
+2479 2425 64788
+2481 2425 25159
+2482 2425 48831
+2483 2425 63733
+2484 2425 16421
+2485 2425 23915
+2486 2425 43626
+2487 2425 50232
+2488 2425 50232
+2489 2425 50232
+2490 2425 50232
+2491 2425 50232
+2493 2425 14825
+2494 2425 19291
+2495 2425 28248
+2496 2425 20311
+2497 2425 56729
+2498 2425 29215
+2499 2425 22690
+2500 2425 22690
+2501 2425 22690
+2502 2425 22690
+2503 2425 22690
+2504 2425 22690
+2505 2425 43196
+2506 2425 59453
+2507 2425 42016
+2508 2425 61007
+2509 2425 27332
+2510 2425 13774
+2511 2425 6843
+4936 2425 27852657
+2409 2426 1
+2417 2426 65236
+2418 2426 28761
+2419 2426 61812
+2420 2426 61812
+2446 2426 33583
+2453 2426 34019
+2454 2426 55060
+2455 2426 18946
+2456 2426 18946
+2457 2426 47951
+2458 2426 10970
+2460 2426 8763
+2461 2426 29560
+2462 2426 53750
+2463 2426 22681
+2464 2426 23705
+2465 2426 4759
+2466 2426 42040
+2467 2426 12988
+2468 2426 12988
+2470 2426 27747
+2471 2426 58475
+2472 2426 34096
+2473 2426 46096
+2474 2426 39313
+2475 2426 34554
+2476 2426 40263
+2477 2426 48855
+2478 2426 48855
+2479 2426 48855
+2481 2426 57443
+2482 2426 12346
+2483 2426 36716
+2484 2426 65213
+2485 2426 57689
+2486 2426 23135
+2487 2426 62412
+2488 2426 53865
+2489 2426 53865
+2490 2426 53865
+2491 2426 58968
+2493 2426 5365
+2494 2426 26475
+2495 2426 36471
+2496 2426 31482
+2497 2426 51473
+2498 2426 26593
+2499 2426 63484
+2500 2426 9590
+2501 2426 9590
+2502 2426 9590
+2503 2426 63951
+2504 2426 60315
+2505 2426 53236
+2506 2426 51935
+2507 2426 27002
+2508 2426 60019
+2509 2426 33586
+2510 2426 20860
+2511 2426 35203
+4937 2426 27852657
+2410 2427 1
+2416 2427 24057
+2417 2427 12976
+2418 2427 11399
+2419 2427 37016
+2420 2427 37016
+2446 2427 26048
+2453 2427 46388
+2454 2427 43950
+2455 2427 51296
+2456 2427 51296
+2457 2427 41602
+2458 2427 42448
+2460 2427 29843
+2461 2427 19040
+2462 2427 30820
+2463 2427 1958
+2464 2427 42312
+2465 2427 56537
+2466 2427 45962
+2467 2427 31548
+2468 2427 1116
+2470 2427 31003
+2471 2427 40369
+2472 2427 54244
+2473 2427 13407
+2474 2427 26881
+2475 2427 35865
+2476 2427 7473
+2477 2427 34498
+2478 2427 33589
+2479 2427 33589
+2481 2427 16837
+2482 2427 9756
+2483 2427 23986
+2484 2427 32251
+2485 2427 43750
+2486 2427 7885
+2487 2427 9630
+2488 2427 13707
+2489 2427 62827
+2490 2427 62827
+2491 2427 22575
+2493 2427 45660
+2494 2427 62282
+2495 2427 47785
+2496 2427 10344
+2497 2427 40070
+2498 2427 8929
+2499 2427 24502
+2500 2427 22358
+2501 2427 35520
+2502 2427 35520
+2503 2427 24632
+2504 2427 4113
+2505 2427 38518
+2506 2427 56275
+2507 2427 15069
+2508 2427 7201
+2509 2427 33560
+2510 2427 11882
+2511 2427 15745
+4938 2427 27852657
+2411 2428 1
+2416 2428 59224
+2417 2428 61061
+2418 2428 6573
+2419 2428 3081
+2420 2428 3081
+2446 2428 47364
+2452 2428 49506
+2453 2428 21286
+2454 2428 36265
+2455 2428 2181
+2456 2428 2181
+2457 2428 12750
+2458 2428 53860
+2460 2428 27792
+2461 2428 15906
+2462 2428 18024
+2463 2428 54235
+2464 2428 17829
+2465 2428 15648
+2466 2428 5496
+2467 2428 59289
+2468 2428 24200
+2470 2428 65333
+2471 2428 3116
+2472 2428 20322
+2473 2428 32709
+2474 2428 29574
+2475 2428 13926
+2476 2428 7116
+2477 2428 39886
+2478 2428 40795
+2479 2428 27279
+2481 2428 37458
+2482 2428 8195
+2483 2428 41542
+2484 2428 15166
+2485 2428 27403
+2486 2428 13477
+2487 2428 31386
+2488 2428 12700
+2489 2428 29101
+2490 2428 22533
+2491 2428 16110
+2493 2428 18403
+2494 2428 20576
+2495 2428 56873
+2496 2428 28124
+2497 2428 22823
+2498 2428 16419
+2499 2428 6032
+2500 2428 57283
+2501 2428 44121
+2502 2428 26333
+2503 2428 11606
+2504 2428 14547
+2505 2428 8771
+2506 2428 29753
+2507 2428 60249
+2508 2428 46770
+2509 2428 8038
+2510 2428 24293
+2511 2428 49428
+4939 2428 27852657
+2412 2429 1
+2416 2429 47761
+2417 2429 63751
+2418 2429 34851
+2419 2429 37939
+2420 2429 37939
+2446 2429 54862
+2452 2429 16015
+2453 2429 12259
+2454 2429 31238
+2455 2429 51478
+2456 2429 51478
+2457 2429 50978
+2458 2429 53720
+2460 2429 60560
+2461 2429 1875
+2462 2429 50826
+2463 2429 39580
+2464 2429 1051
+2465 2429 15094
+2466 2429 64044
+2467 2429 42026
+2468 2429 42026
+2470 2429 54467
+2471 2429 39438
+2472 2429 18294
+2473 2429 10566
+2474 2429 44351
+2475 2429 29257
+2476 2429 14531
+2477 2429 36432
+2478 2429 36432
+2479 2429 49948
+2481 2429 40426
+2482 2429 23804
+2483 2429 56919
+2484 2429 62768
+2485 2429 60618
+2486 2429 31361
+2487 2429 44233
+2488 2429 37555
+2489 2429 37555
+2490 2429 44123
+2491 2429 57961
+2493 2429 23509
+2494 2429 58864
+2495 2429 5802
+2496 2429 62388
+2497 2429 41206
+2498 2429 38433
+2499 2429 2137
+2500 2429 13314
+2501 2429 13314
+2502 2429 31102
+2503 2429 34174
+2504 2429 37721
+2505 2429 28816
+2506 2429 3599
+2507 2429 15846
+2508 2429 61686
+2509 2429 10816
+2510 2429 64561
+2511 2429 34249
+4940 2429 27852657
+2413 2430 1
+2446 2430 34706
+2453 2430 17090
+2454 2430 30050
+2455 2430 11336
+2456 2430 11336
+2457 2430 9236
+2458 2430 1519
+2460 2430 65510
+2461 2430 60566
+2462 2430 39048
+2463 2430 29829
+2464 2430 27778
+2465 2430 16442
+2466 2430 40918
+2467 2430 52609
+2468 2430 52609
+2470 2430 56702
+2471 2430 28333
+2472 2430 5376
+2473 2430 38258
+2474 2430 7479
+2475 2430 56558
+2476 2430 53014
+2477 2430 28247
+2478 2430 28247
+2479 2430 28247
+2481 2430 39447
+2482 2430 28429
+2483 2430 39037
+2484 2430 53920
+2485 2430 10698
+2486 2430 19661
+2487 2430 24699
+2488 2430 54533
+2489 2430 54533
+2490 2430 54533
+2491 2430 16746
+2493 2430 31703
+2494 2430 6168
+2495 2430 3112
+2496 2430 30012
+2497 2430 10943
+2498 2430 56803
+2499 2430 16552
+2500 2430 10162
+2501 2430 10162
+2502 2430 10162
+2503 2430 43865
+2504 2430 61532
+2505 2430 57109
+2506 2430 42749
+2507 2430 33072
+2508 2430 57068
+2509 2430 53380
+2510 2430 5623
+2511 2430 28367
+4941 2430 27852657
+2414 2431 1
+2510 2431 65520
+4942 2431 27852657
+2415 2432 1
+2416 2432 34121
+2417 2432 4851
+2418 2432 47197
+2419 2432 45529
+2420 2432 45529
+2455 2432 23087
+2456 2432 23087
+2457 2432 14712
+2458 2432 14712
+2460 2432 14415
+2461 2432 14415
+2462 2432 14415
+2463 2432 25053
+2464 2432 38429
+2465 2432 15342
+2466 2432 12480
+2467 2432 12480
+2468 2432 12480
+2470 2432 35768
+2471 2432 35768
+2472 2432 38029
+2473 2432 50114
+2474 2432 10321
+2475 2432 60500
+2476 2432 18185
+2477 2432 18185
+2478 2432 18185
+2479 2432 18185
+2481 2432 52379
+2482 2432 16821
+2483 2432 7501
+2484 2432 38140
+2485 2432 45652
+2486 2432 50673
+2487 2432 53577
+2488 2432 53577
+2489 2432 53577
+2490 2432 53577
+2491 2432 53577
+2493 2432 57715
+2494 2432 14500
+2495 2432 8009
+2496 2432 45016
+2497 2432 7007
+2498 2432 42222
+2499 2432 21767
+2500 2432 21767
+2501 2432 21767
+2502 2432 21767
+2503 2432 21767
+2504 2432 21767
+2505 2432 16204
+2506 2432 38563
+2507 2432 63755
+2508 2432 3780
+2509 2432 30714
+2510 2432 13690
+2511 2432 17005
+4943 2432 27852657
+2416 2433 1
+2417 2433 47787
+2418 2433 42993
+2419 2433 46858
+2420 2433 46858
+2455 2433 29020
+2456 2433 29020
+2457 2433 51808
+2458 2433 51808
+2460 2433 60527
+2461 2433 60527
+2462 2433 60527
+2463 2433 23065
+2464 2433 43383
+2465 2433 14363
+2466 2433 42131
+2467 2433 42131
+2468 2433 42131
+2470 2433 33907
+2471 2433 33907
+2472 2433 31524
+2473 2433 44767
+2474 2433 39634
+2475 2433 25271
+2476 2433 18576
+2477 2433 18576
+2478 2433 18576
+2479 2433 18576
+2481 2433 45639
+2482 2433 20927
+2483 2433 59490
+2484 2433 32295
+2485 2433 47651
+2486 2433 22380
+2487 2433 59766
+2488 2433 59766
+2489 2433 59766
+2490 2433 59766
+2491 2433 59766
+2493 2433 48825
+2494 2433 27879
+2495 2433 16929
+2496 2433 58133
+2497 2433 13395
+2498 2433 37419
+2499 2433 36748
+2500 2433 36748
+2501 2433 36748
+2502 2433 36748
+2503 2433 36748
+2504 2433 36748
+2505 2433 7499
+2506 2433 39913
+2507 2433 15682
+2508 2433 42239
+2509 2433 62541
+2510 2433 47568
+2511 2433 32244
+4944 2433 27852657
+2422 2434 1
+2423 2434 1
+2426 2434 65520
+2429 2434 64606
+2430 2434 64607
+2433 2434 41859
+2434 2434 31302
+2435 2434 32216
+2440 2434 54113
+2441 2434 21897
+2446 2434 23781
+2452 2434 9613
+2453 2434 12399
+2454 2434 6590
+2455 2434 21186
+2456 2434 21186
+2457 2434 61466
+2458 2434 10257
+2460 2434 38074
+2461 2434 35768
+2462 2434 49465
+2463 2434 34943
+2464 2434 34416
+2465 2434 13230
+2466 2434 22973
+2467 2434 22816
+2468 2434 20819
+2470 2434 28689
+2471 2434 57741
+2472 2434 8081
+2473 2434 8318
+2474 2434 60273
+2475 2434 47043
+2476 2434 36691
+2477 2434 64003
+2478 2434 29676
+2479 2434 60907
+2481 2434 26042
+2482 2434 44536
+2483 2434 37775
+2484 2434 23516
+2485 2434 47894
+2486 2434 851
+2487 2434 55766
+2488 2434 13231
+2489 2434 2541
+2490 2434 53575
+2491 2434 12298
+2493 2434 26718
+2494 2434 56641
+2495 2434 43959
+2496 2434 57828
+2497 2434 16541
+2498 2434 15690
+2499 2434 50416
+2500 2434 32042
+2501 2434 33290
+2502 2434 33978
+2503 2434 22357
+2504 2434 16579
+2505 2434 63182
+2506 2434 51617
+2507 2434 38625
+2508 2434 22598
+2509 2434 32651
+2510 2434 23553
+2511 2434 5264
+4945 2434 27852657
+2424 2435 1
+2429 2435 60923
+2430 2435 60923
+2433 2435 29929
+2434 2435 51105
+2435 2435 55703
+2440 2435 37451
+2441 2435 47269
+2446 2435 10361
+2452 2435 51674
+2453 2435 31279
+2454 2435 60743
+2455 2435 21644
+2456 2435 21644
+2457 2435 32741
+2458 2435 47623
+2460 2435 23122
+2461 2435 60807
+2462 2435 25749
+2463 2435 36260
+2464 2435 60117
+2465 2435 38473
+2466 2435 21791
+2467 2435 26392
+2468 2435 42274
+2470 2435 41254
+2471 2435 41651
+2472 2435 14578
+2473 2435 44626
+2474 2435 6012
+2475 2435 33060
+2476 2435 49951
+2477 2435 19609
+2478 2435 46154
+2479 2435 34371
+2481 2435 48647
+2482 2435 9484
+2483 2435 65007
+2484 2435 55181
+2485 2435 21246
+2486 2435 53707
+2487 2435 63450
+2488 2435 44858
+2489 2435 37076
+2490 2435 25049
+2491 2435 31546
+2493 2435 162
+2494 2435 27692
+2495 2435 7912
+2496 2435 10833
+2497 2435 40924
+2498 2435 52738
+2499 2435 10849
+2500 2435 63843
+2501 2435 18897
+2502 2435 9117
+2503 2435 30962
+2504 2435 37207
+2505 2435 6483
+2506 2435 19196
+2507 2435 59686
+2508 2435 55273
+2509 2435 52639
+2510 2435 63657
+2511 2435 48682
+4946 2435 27852657
+2425 2436 1
+2426 2436 1
+2429 2436 17
+2430 2436 16
+2433 2436 46548
+2434 2436 46490
+2435 2436 46474
+2440 2436 29885
+2441 2436 48932
+2446 2436 65409
+2452 2436 55164
+2453 2436 48008
+2454 2436 24285
+2455 2436 33766
+2456 2436 33766
+2457 2436 57514
+2458 2436 51777
+2460 2436 52527
+2461 2436 38943
+2462 2436 52902
+2463 2436 11676
+2464 2436 53262
+2465 2436 19496
+2466 2436 59357
+2467 2436 21849
+2468 2436 46971
+2470 2436 62659
+2471 2436 15826
+2472 2436 56656
+2473 2436 49636
+2474 2436 41680
+2475 2436 22184
+2476 2436 14291
+2477 2436 22310
+2478 2436 10633
+2479 2436 8922
+2481 2436 30804
+2482 2436 8261
+2483 2436 33371
+2484 2436 60129
+2485 2436 21199
+2486 2436 64536
+2487 2436 15794
+2488 2436 57276
+2489 2436 28436
+2490 2436 22054
+2491 2436 48503
+2493 2436 20262
+2494 2436 16692
+2495 2436 5209
+2496 2436 5612
+2497 2436 64150
+2498 2436 65135
+2499 2436 11169
+2500 2436 46373
+2501 2436 8068
+2502 2436 22517
+2503 2436 27670
+2504 2436 44575
+2505 2436 1160
+2506 2436 52260
+2507 2436 57031
+2508 2436 50066
+2509 2436 12125
+2510 2436 57004
+2511 2436 10435
+4947 2436 27852657
+2427 2437 1
+2429 2437 62791
+2430 2437 62791
+2433 2437 30888
+2434 2437 39541
+2435 2437 42271
+2440 2437 36936
+2441 2437 60186
+2446 2437 39425
+2452 2437 27653
+2453 2437 15843
+2454 2437 46903
+2455 2437 4872
+2456 2437 4872
+2457 2437 55486
+2458 2437 9
+2460 2437 17288
+2461 2437 1617
+2462 2437 37846
+2463 2437 46571
+2464 2437 32187
+2465 2437 27315
+2466 2437 19335
+2467 2437 4641
+2468 2437 13028
+2470 2437 3625
+2471 2437 24318
+2472 2437 42119
+2473 2437 55663
+2474 2437 60616
+2475 2437 33301
+2476 2437 6621
+2477 2437 22735
+2478 2437 65163
+2479 2437 6829
+2481 2437 17640
+2482 2437 28535
+2483 2437 12588
+2484 2437 64691
+2485 2437 29475
+2486 2437 61695
+2487 2437 60603
+2488 2437 41951
+2489 2437 20250
+2490 2437 21571
+2491 2437 5488
+2493 2437 9823
+2494 2437 51726
+2495 2437 56057
+2496 2437 8437
+2497 2437 45655
+2498 2437 49481
+2499 2437 26065
+2500 2437 38288
+2501 2437 727
+2502 2437 21421
+2503 2437 24253
+2504 2437 28441
+2505 2437 28149
+2506 2437 53735
+2507 2437 48921
+2508 2437 31396
+2509 2437 37558
+2510 2437 4988
+2511 2437 53306
+4948 2437 27852657
+2428 2438 1
+2429 2438 65503
+2430 2438 65503
+2433 2438 25719
+2434 2438 45224
+2435 2438 45242
+2440 2438 31961
+2441 2438 52240
+2446 2438 15152
+2452 2438 42174
+2453 2438 60071
+2454 2438 30073
+2455 2438 52424
+2456 2438 52424
+2457 2438 43333
+2458 2438 18724
+2460 2438 19686
+2461 2438 48293
+2462 2438 45911
+2463 2438 18625
+2464 2438 37761
+2465 2438 50858
+2466 2438 4756
+2467 2438 20561
+2468 2438 54445
+2470 2438 54605
+2471 2438 59265
+2472 2438 65095
+2473 2438 3471
+2474 2438 30502
+2475 2438 45165
+2476 2438 59081
+2477 2438 50578
+2478 2438 28183
+2479 2438 21081
+2481 2438 62975
+2482 2438 18140
+2483 2438 56318
+2484 2438 9011
+2485 2438 62469
+2486 2438 17304
+2487 2438 4144
+2488 2438 1493
+2489 2438 6416
+2490 2438 3829
+2491 2438 63366
+2493 2438 59254
+2494 2438 54602
+2495 2438 56025
+2496 2438 7913
+2497 2438 54315
+2498 2438 37011
+2499 2438 20371
+2500 2438 21109
+2501 2438 49154
+2502 2438 64041
+2503 2438 5349
+2504 2438 10805
+2505 2438 48511
+2506 2438 40304
+2507 2438 21243
+2508 2438 58876
+2509 2438 65112
+2510 2438 58516
+2511 2438 33933
+4949 2438 27852657
+2431 2439 1
+2433 2439 11868
+2434 2439 51084
+2435 2439 51084
+2440 2439 670
+2441 2439 15107
+2446 2439 3670
+2452 2439 6468
+2453 2439 24379
+2454 2439 4776
+2455 2439 16947
+2456 2439 16947
+2457 2439 65330
+2458 2439 6520
+2460 2439 51232
+2461 2439 33010
+2462 2439 59358
+2463 2439 40540
+2464 2439 49734
+2465 2439 32787
+2466 2439 1464
+2467 2439 43705
+2468 2439 57176
+2470 2439 33626
+2471 2439 28915
+2472 2439 33754
+2473 2439 46392
+2474 2439 10825
+2475 2439 43559
+2476 2439 60704
+2477 2439 15923
+2478 2439 53368
+2479 2439 55064
+2481 2439 59816
+2482 2439 4048
+2483 2439 52423
+2484 2439 31890
+2485 2439 44719
+2486 2439 1160
+2487 2439 37998
+2488 2439 22953
+2489 2439 50801
+2490 2439 53890
+2491 2439 29396
+2493 2439 51119
+2494 2439 27621
+2495 2439 63380
+2496 2439 8458
+2497 2439 56265
+2498 2439 55105
+2499 2439 27031
+2500 2439 48157
+2501 2439 40447
+2502 2439 1181
+2503 2439 20862
+2504 2439 9897
+2505 2439 44622
+2506 2439 47124
+2507 2439 41304
+2508 2439 1145
+2509 2439 7299
+2510 2439 60410
+2511 2439 43710
+4950 2439 27852657
+2432 2440 1
+2433 2440 53654
+2434 2440 14438
+2435 2440 14438
+2440 2440 64852
+2441 2440 50414
+2446 2440 64977
+2452 2440 59053
+2453 2440 41452
+2454 2440 8401
+2455 2440 16452
+2456 2440 16452
+2457 2440 3505
+2458 2440 25738
+2460 2440 33357
+2461 2440 51901
+2462 2440 10055
+2463 2440 25280
+2464 2440 16248
+2465 2440 65317
+2466 2440 26568
+2467 2440 22309
+2468 2440 8838
+2470 2440 674
+2471 2440 25071
+2472 2440 59514
+2473 2440 15010
+2474 2440 37960
+2475 2440 38164
+2476 2440 35901
+2477 2440 34153
+2478 2440 62229
+2479 2440 60533
+2481 2440 47385
+2482 2440 38492
+2483 2440 52609
+2484 2440 63135
+2485 2440 49623
+2486 2440 11459
+2487 2440 21027
+2488 2440 37123
+2489 2440 9275
+2490 2440 6186
+2491 2440 29179
+2493 2440 18750
+2494 2440 14527
+2495 2440 43850
+2496 2440 26416
+2497 2440 59818
+2498 2440 48359
+2499 2440 10380
+2500 2440 7736
+2501 2440 15446
+2502 2440 54712
+2503 2440 43794
+2504 2440 7095
+2505 2440 30560
+2506 2440 13450
+2507 2440 17069
+2508 2440 6900
+2509 2440 23179
+2510 2440 38175
+2511 2440 64846
+4951 2440 27852657
+2436 2441 1
+2446 2441 17941
+2453 2441 36931
+2454 2441 54250
+2455 2441 65042
+2456 2441 65042
+2457 2441 8242
+2458 2441 10065
+2460 2441 35332
+2461 2441 63225
+2462 2441 47257
+2463 2441 48744
+2464 2441 10803
+2465 2441 11282
+2466 2441 27881
+2467 2441 29692
+2468 2441 29692
+2470 2441 8856
+2471 2441 41124
+2472 2441 62108
+2473 2441 21428
+2474 2441 10085
+2475 2441 64324
+2476 2441 63136
+2477 2441 2242
+2478 2441 2242
+2479 2441 2242
+2481 2441 29211
+2482 2441 43558
+2483 2441 16537
+2484 2441 6061
+2485 2441 27859
+2486 2441 29056
+2487 2441 57146
+2488 2441 58647
+2489 2441 58647
+2490 2441 58647
+2491 2441 57596
+2493 2441 27078
+2494 2441 33603
+2495 2441 45305
+2496 2441 9498
+2497 2441 19248
+2498 2441 55713
+2499 2441 33991
+2500 2441 43504
+2501 2441 43504
+2502 2441 43504
+2503 2441 28700
+2504 2441 45852
+2505 2441 2353
+2506 2441 41126
+2507 2441 19090
+2508 2441 43639
+2509 2441 29276
+2510 2441 29606
+2511 2441 33122
+4952 2441 27852657
+2437 2442 1
+2440 2442 43681
+2441 2442 43681
+2446 2442 32684
+2453 2442 17667
+2454 2442 20192
+2455 2442 47593
+2456 2442 47593
+2457 2442 63369
+2458 2442 32744
+2460 2442 56805
+2461 2442 26574
+2462 2442 40407
+2463 2442 42575
+2464 2442 53785
+2465 2442 6192
+2466 2442 37183
+2467 2442 42081
+2468 2442 2199
+2470 2442 49102
+2471 2442 64691
+2472 2442 14158
+2473 2442 39078
+2474 2442 61196
+2475 2442 55004
+2476 2442 13123
+2477 2442 25382
+2478 2442 46901
+2479 2442 46901
+2481 2442 34541
+2482 2442 6347
+2483 2442 41612
+2484 2442 10230
+2485 2442 5683
+2486 2442 16200
+2487 2442 18970
+2488 2442 53779
+2489 2442 59094
+2490 2442 59094
+2491 2442 29515
+2493 2442 43811
+2494 2442 58442
+2495 2442 37643
+2496 2442 17629
+2497 2442 29843
+2498 2442 13643
+2499 2442 10491
+2500 2442 62025
+2501 2442 42653
+2502 2442 42653
+2503 2442 47190
+2504 2442 56714
+2505 2442 54873
+2506 2442 8202
+2507 2442 56790
+2508 2442 63400
+2509 2442 22681
+2510 2442 38041
+2511 2442 39937
+4953 2442 27852657
+2438 2443 1
+2440 2443 28737
+2441 2443 28737
+2446 2443 24783
+2452 2443 1246
+2453 2443 60874
+2454 2443 18235
+2455 2443 9617
+2456 2443 9617
+2457 2443 54083
+2458 2443 59818
+2460 2443 38845
+2461 2443 23451
+2462 2443 9351
+2463 2443 57101
+2464 2443 50597
+2465 2443 40980
+2466 2443 2324
+2467 2443 29440
+2468 2443 3801
+2470 2443 25568
+2471 2443 25739
+2472 2443 49148
+2473 2443 23779
+2474 2443 24477
+2475 2443 49018
+2476 2443 248
+2477 2443 37333
+2478 2443 15814
+2479 2443 29095
+2481 2443 57418
+2482 2443 7841
+2483 2443 38514
+2484 2443 32343
+2485 2443 52504
+2486 2443 3486
+2487 2443 5412
+2488 2443 30872
+2489 2443 25557
+2490 2443 63615
+2491 2443 52306
+2493 2443 26866
+2494 2443 13029
+2495 2443 18975
+2496 2443 44054
+2497 2443 55846
+2498 2443 52360
+2499 2443 63742
+2500 2443 26879
+2501 2443 46251
+2502 2443 7065
+2503 2443 18675
+2504 2443 14308
+2505 2443 63404
+2506 2443 40439
+2507 2443 47018
+2508 2443 20159
+2509 2443 52300
+2510 2443 12026
+2511 2443 18841
+4954 2443 27852657
+2439 2444 1
+2440 2444 58625
+2441 2444 58625
+2446 2444 55634
+2452 2444 64275
+2453 2444 15570
+2454 2444 29124
+2455 2444 51217
+2456 2444 51217
+2457 2444 13107
+2458 2444 36174
+2460 2444 40100
+2461 2444 57832
+2462 2444 10314
+2463 2444 30673
+2464 2444 12012
+2465 2444 26316
+2466 2444 13794
+2467 2444 45490
+2468 2444 45490
+2470 2444 10569
+2471 2444 16405
+2472 2444 54955
+2473 2444 4621
+2474 2444 22143
+2475 2444 61348
+2476 2444 48612
+2477 2444 60162
+2478 2444 60162
+2479 2444 46881
+2481 2444 45909
+2482 2444 5978
+2483 2444 62848
+2484 2444 7017
+2485 2444 39555
+2486 2444 43728
+2487 2444 60919
+2488 2444 64670
+2489 2444 64670
+2490 2444 26612
+2491 2444 3030
+2493 2444 52523
+2494 2444 33011
+2495 2444 34500
+2496 2444 20355
+2497 2444 28024
+2498 2444 49817
+2499 2444 31410
+2500 2444 7226
+2501 2444 7226
+2502 2444 46412
+2503 2444 45069
+2504 2444 22759
+2505 2444 58383
+2506 2444 17340
+2507 2444 10377
+2508 2444 35018
+2509 2444 30736
+2510 2444 13440
+2511 2444 58577
+4955 2444 27852657
+2442 2445 1
+2511 2445 65520
+4956 2445 27852657
+2443 2446 1
+2444 2446 1
+2445 2446 1
+2446 2446 1
+2447 2446 1
+2451 2446 1
+2452 2446 1
+2453 2446 1
+2454 2446 1
+2460 2446 1
+2461 2446 1
+2462 2446 1
+2470 2446 1
+2471 2446 1
+2481 2446 1
+2505 2446 32761
+2506 2446 32761
+2507 2446 32761
+2508 2446 32761
+2509 2446 32761
+2510 2446 32761
+2511 2446 24573
+4957 2446 27852657
+2444 2447 1
+2446 2447 36421
+2452 2447 39501
+2453 2447 15488
+2454 2447 14930
+2455 2447 503
+2456 2447 503
+2457 2447 46956
+2458 2447 34662
+2460 2447 57053
+2461 2447 11318
+2462 2447 56538
+2463 2447 58186
+2464 2447 63446
+2465 2447 62943
+2466 2447 56204
+2467 2447 61015
+2468 2447 5436
+2470 2447 4478
+2471 2447 13094
+2472 2447 43432
+2473 2447 58734
+2474 2447 26437
+2475 2447 29015
+2476 2447 46455
+2477 2447 40018
+2478 2447 9545
+2479 2447 49133
+2481 2447 8814
+2482 2447 3153
+2483 2447 13701
+2484 2447 64246
+2485 2447 19245
+2486 2447 55751
+2487 2447 35787
+2488 2447 13541
+2489 2447 56759
+2490 2447 53209
+2491 2447 21830
+2493 2447 3524
+2494 2447 37148
+2495 2447 65294
+2496 2447 48082
+2497 2447 17595
+2498 2447 27365
+2499 2447 52726
+2500 2447 35015
+2501 2447 56568
+2502 2447 65117
+2503 2447 14255
+2504 2447 35460
+2505 2447 60330
+2506 2447 1363
+2507 2447 9525
+2508 2447 51739
+2509 2447 40937
+2510 2447 957
+2511 2447 24971
+4958 2447 27852657
+2445 2448 1
+2446 2448 57589
+2452 2448 26020
+2453 2448 22286
+2454 2448 14366
+2455 2448 57570
+2456 2448 57570
+2457 2448 7814
+2458 2448 24449
+2460 2448 36151
+2461 2448 31012
+2462 2448 53853
+2463 2448 6662
+2464 2448 34880
+2465 2448 42831
+2466 2448 65470
+2467 2448 52325
+2468 2448 52325
+2470 2448 57470
+2471 2448 43430
+2472 2448 31637
+2473 2448 34779
+2474 2448 54413
+2475 2448 11582
+2476 2448 22247
+2477 2448 58697
+2478 2448 58697
+2479 2448 19109
+2481 2448 46787
+2482 2448 25087
+2483 2448 45373
+2484 2448 43376
+2485 2448 53982
+2486 2448 42400
+2487 2448 54026
+2488 2448 28423
+2489 2448 28423
+2490 2448 31973
+2491 2448 29874
+2493 2448 29149
+2494 2448 62547
+2495 2448 23177
+2496 2448 9621
+2497 2448 33569
+2498 2448 56690
+2499 2448 44831
+2500 2448 23820
+2501 2448 23820
+2502 2448 15271
+2503 2448 44244
+2504 2448 60014
+2505 2448 47262
+2506 2448 22343
+2507 2448 44069
+2508 2448 60873
+2509 2448 4112
+2510 2448 64382
+2511 2448 17319
+4959 2448 27852657
+2447 2449 1
+2454 2449 33604
+2455 2449 42502
+2456 2449 42502
+2457 2449 48377
+2458 2449 48377
+2460 2449 51156
+2461 2449 51156
+2462 2449 40788
+2463 2449 61530
+2464 2449 6198
+2465 2449 29217
+2466 2449 57498
+2467 2449 57498
+2468 2449 57498
+2470 2449 53023
+2471 2449 6296
+2472 2449 30840
+2473 2449 50262
+2474 2449 23069
+2475 2449 59373
+2476 2449 41729
+2477 2449 41729
+2478 2449 41729
+2479 2449 41729
+2481 2449 22301
+2482 2449 22629
+2483 2449 11224
+2484 2449 13238
+2485 2449 22956
+2486 2449 29104
+2487 2449 45521
+2488 2449 45521
+2489 2449 45521
+2490 2449 45521
+2491 2449 45521
+2493 2449 14850
+2494 2449 29894
+2495 2449 11780
+2496 2449 17329
+2497 2449 50282
+2498 2449 21178
+2499 2449 56153
+2500 2449 56153
+2501 2449 56153
+2502 2449 56153
+2503 2449 56153
+2504 2449 1552
+2505 2449 29280
+2506 2449 16793
+2507 2449 4004
+2508 2449 1948
+2509 2449 45476
+2510 2449 42274
+2511 2449 62575
+4960 2449 27852657
+2449 2450 1
+2457 2450 1
+2458 2450 1
+2466 2450 1
+2467 2450 1
+2468 2450 1
+2476 2450 1
+2477 2450 1
+2478 2450 1
+2479 2450 1
+2487 2450 1
+2488 2450 1
+2489 2450 1
+2490 2450 1
+2491 2450 1
+2499 2450 32761
+2500 2450 32761
+2501 2450 32761
+2502 2450 32761
+2503 2450 32761
+2504 2450 32761
+2511 2450 24573
+4961 2450 27852657
+2450 2451 1
+2511 2451 65520
+4962 2451 27852657
+2451 2452 1
+2452 2452 1
+2453 2452 1
+2454 2452 1
+2455 2452 44189
+2456 2452 44189
+2457 2452 28417
+2458 2452 28417
+2460 2452 48406
+2461 2452 48406
+2462 2452 48406
+2463 2452 64566
+2464 2452 28935
+2465 2452 50267
+2466 2452 20151
+2467 2452 20151
+2468 2452 20151
+2470 2452 20589
+2471 2452 20589
+2472 2452 11607
+2473 2452 13496
+2474 2452 6642
+2475 2452 21896
+2476 2452 35584
+2477 2452 35584
+2478 2452 35584
+2479 2452 35584
+2481 2452 32230
+2482 2452 60649
+2483 2452 7436
+2484 2452 58578
+2485 2452 37988
+2486 2452 16092
+2487 2452 16121
+2488 2452 16121
+2489 2452 16121
+2490 2452 16121
+2491 2452 16121
+2493 2452 39622
+2494 2452 38238
+2495 2452 52556
+2496 2452 59890
+2497 2452 12794
+2498 2452 62223
+2499 2452 26657
+2500 2452 26657
+2501 2452 26657
+2502 2452 26657
+2503 2452 26657
+2504 2452 26657
+2505 2452 45433
+2506 2452 40293
+2507 2452 30897
+2508 2452 3659
+2509 2452 35978
+2510 2452 51521
+2511 2452 1310
+4963 2452 27852657
+2459 2453 1
+2511 2453 65520
+4964 2453 27852657
+2469 2454 1
+2511 2454 65520
+4965 2454 27852657
+2480 2455 1
+2511 2455 65520
+4966 2455 27852657
+2492 2456 1
+2511 2456 65520
+4967 2456 27852657
diff --git a/SPQR/Matrix/LFAT5.mtx b/SPQR/Matrix/LFAT5.mtx
new file mode 100644
index 0000000..37b4c4e
--- /dev/null
+++ b/SPQR/Matrix/LFAT5.mtx
@@ -0,0 +1,48 @@
+%%MatrixMarket matrix coordinate real symmetric
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Oberwolfach/LFAT5
+% name: Oberwolfach/LFAT5
+% [Oberwolfach: linear 1D beam]
+% id: 1440
+% date: 2004
+% author: J. Lienemann, A. Greiner, J. Korvink
+% ed: E. Rudnyi
+% fields: name title A id notes aux date author ed kind
+% aux: M E B C
+% kind: model reduction problem
+%-------------------------------------------------------------------------------
+% notes:
+% Primary matrix in this model reduction problem is the Oberwolfach K matrix
+%-------------------------------------------------------------------------------
+14 14 30
+1 1 1.57088
+4 1 -94.2528
+5 1 .78544
+2 2 1.25664e7
+6 2 -6.2832e6
+3 3 .6088062015503876
+7 3 -.3044031007751938
+4 4 15080.447999999997
+8 4 -7540.223999999998
+9 4 94.2528
+5 5 3.14176
+8 5 -94.2528
+9 5 .78544
+6 6 1.25664e7
+10 6 -6.2832e6
+7 7 .6088062015503876
+11 7 -.3044031007751938
+8 8 15080.447999999997
+12 8 -7540.223999999998
+13 8 94.2528
+9 9 3.14176
+12 9 -94.2528
+13 9 .78544
+10 10 1.25664e7
+11 11 .6088062015503876
+12 12 15080.447999999997
+14 12 94.2528
+13 13 3.14176
+14 13 .78544
+14 14 1.57088
diff --git a/SPQR/Matrix/README.txt b/SPQR/Matrix/README.txt
new file mode 100644
index 0000000..42091a2
--- /dev/null
+++ b/SPQR/Matrix/README.txt
@@ -0,0 +1,3 @@
+Test matrices for the programs in Demo and Tcov directories.
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/SPQR/Matrix/Ragusa16.mtx b/SPQR/Matrix/Ragusa16.mtx
new file mode 100644
index 0000000..4d74335
--- /dev/null
+++ b/SPQR/Matrix/Ragusa16.mtx
@@ -0,0 +1,103 @@
+%%MatrixMarket matrix coordinate integer general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Pajek/Ragusa16
+% name: Pajek/Ragusa16
+% [Pajek network: Ragusa set]
+% id: 1515
+% date: 2006
+% author: V. Batagelj
+% ed: V. Batagelj
+% fields: name title A id kind notes aux date author ed
+% aux: nodename coord
+% kind: directed weighted graph
+%-------------------------------------------------------------------------------
+% notes:
+% ------------------------------------------------------------------------------
+% Pajek network converted to sparse adjacency matrix for inclusion in UF sparse 
+% matrix collection, Tim Davis.  For Pajek datasets, See V. Batagelj & A. Mrvar,
+% http://vlado.fmf.uni-lj.si/pub/networks/data/.                                
+% ------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------
+24 24 81
+14 2 1
+5 3 2
+11 3 1
+22 3 1
+11 4 1
+22 4 1
+1 5 1
+3 5 1
+5 5 4
+8 5 1
+9 5 1
+11 5 4
+14 5 1
+16 5 2
+19 5 1
+20 5 1
+24 5 3
+7 6 1
+20 6 1
+7 7 1
+9 7 1
+11 7 1
+14 7 1
+8 8 1
+11 8 1
+13 8 1
+20 8 1
+5 9 1
+9 9 1
+16 9 1
+20 9 1
+24 9 1
+8 10 1
+11 10 1
+24 10 2
+5 11 4
+7 11 1
+8 11 1
+10 11 2
+11 11 1
+12 11 1
+13 11 1
+14 11 1
+18 11 1
+22 11 1
+24 11 1
+5 12 1
+8 12 1
+10 12 1
+12 12 1
+13 12 1
+17 12 1
+22 12 2
+23 12 1
+5 13 2
+22 13 1
+5 14 3
+7 14 1
+22 14 1
+23 14 1
+5 15 1
+3 16 1
+16 16 1
+11 19 1
+19 19 1
+8 20 1
+11 20 1
+20 20 1
+22 20 1
+9 21 1
+1 22 2
+9 22 1
+10 22 1
+12 22 5
+13 22 1
+14 22 4
+22 22 6
+24 22 1
+3 24 1
+5 24 1
+8 24 1
diff --git a/SPQR/Matrix/Tina_AskCal.mtx b/SPQR/Matrix/Tina_AskCal.mtx
new file mode 100644
index 0000000..228cf34
--- /dev/null
+++ b/SPQR/Matrix/Tina_AskCal.mtx
@@ -0,0 +1,53 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Pajek/Tina_AskCal
+% name: Pajek/Tina_AskCal
+% [Pajek network: student govt, Univ. Ljubljana, 1992 (ask opin., recall)]
+% id: 1525
+% date: 1992
+% author: V. Batagelj
+% ed: V. Batagelj
+% fields: name title A id kind notes aux date author ed
+% aux: nodename
+% kind: directed graph
+%-------------------------------------------------------------------------------
+% notes:
+% ------------------------------------------------------------------------------
+% Pajek network converted to sparse adjacency matrix for inclusion in UF sparse 
+% matrix collection, Tim Davis.  For Pajek datasets, See V. Batagelj & A. Mrvar,
+% http://vlado.fmf.uni-lj.si/pub/networks/data/.                                
+% ------------------------------------------------------------------------------
+%  STUDENT GOVERNMENT OF UNIVERSITY OF LJUBLJANA (Hlebec 1992)                  
+%  asking for an opinion, recall                                                
+%-------------------------------------------------------------------------------
+11 11 29
+3 1
+10 1
+1 2
+3 2
+4 2
+5 2
+6 2
+8 2
+10 2
+10 3
+11 3
+2 4
+3 4
+7 4
+8 4
+10 5
+1 6
+3 6
+5 6
+11 6
+9 7
+2 8
+3 8
+7 8
+9 8
+11 8
+7 9
+8 11
+9 11
diff --git a/SPQR/Matrix/Tina_AskCal_perm.mtx b/SPQR/Matrix/Tina_AskCal_perm.mtx
new file mode 100644
index 0000000..2af8c88
--- /dev/null
+++ b/SPQR/Matrix/Tina_AskCal_perm.mtx
@@ -0,0 +1,34 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% Permuted version of Pajek/Tina_AskCal
+%-------------------------------------------------------------------------------
+11 11 29
+1 1
+2 2
+3 3
+1 5
+4 5
+1 6
+5 6
+2 7
+6 7
+2 8
+3 8
+4 8
+5 8
+7 8
+3 9
+4 9
+6 9
+7 9
+1 10
+4 10
+6 10
+8 10
+9 10
+10 10
+11 10
+4 11
+5 11
+8 11
+10 11
diff --git a/SPQR/Matrix/a0.mtx b/SPQR/Matrix/a0.mtx
new file mode 100644
index 0000000..5221819
--- /dev/null
+++ b/SPQR/Matrix/a0.mtx
@@ -0,0 +1,5 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% An empty 0-by-0 matrix
+%-------------------------------------------------------------------------------
+0 0 0
diff --git a/SPQR/Matrix/a04.mtx b/SPQR/Matrix/a04.mtx
new file mode 100644
index 0000000..d841016
--- /dev/null
+++ b/SPQR/Matrix/a04.mtx
@@ -0,0 +1,5 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% An empty 0-by-4 matrix
+%-------------------------------------------------------------------------------
+0 4 0
diff --git a/SPQR/Matrix/a1.mtx b/SPQR/Matrix/a1.mtx
new file mode 100644
index 0000000..3391b3e
--- /dev/null
+++ b/SPQR/Matrix/a1.mtx
@@ -0,0 +1,17 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% This matrix has two empty rows and is badly scaled:
+%
+%       1.1     1.2     1.3e-30     1.4
+%         0     2.2     2.3e-30     2.4
+%         0       0         0         0
+%         0       0         0         0
+%-------------------------------------------------------------------------------
+4 4 7
+0 0 1.1
+0 1 1.2
+0 2 1.3e-30
+0 3 1.4
+1 1 2.2
+1 2 2.3e-30
+1 3 2.4
diff --git a/SPQR/Matrix/a2.mtx b/SPQR/Matrix/a2.mtx
new file mode 100644
index 0000000..9383ccf
--- /dev/null
+++ b/SPQR/Matrix/a2.mtx
@@ -0,0 +1,11 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% A lower triangular matrix:
+%
+%       1.1     0
+%       2.1     2.2
+%-------------------------------------------------------------------------------
+2 2 3
+0 0 1.1
+1 0 2.1
+1 1 2.2
diff --git a/SPQR/Matrix/a4.mtx b/SPQR/Matrix/a4.mtx
new file mode 100644
index 0000000..18476e6
--- /dev/null
+++ b/SPQR/Matrix/a4.mtx
@@ -0,0 +1,14 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% A 4-by-2 matrix with 2 empty rows:
+%
+%   1.1     -99
+%   2.1     2.2
+%    0       0
+%    0       0
+%-------------------------------------------------------------------------------
+4 2 4
+0 0 1.1
+1 0 2.1
+1 1 2.2
+0 1 -99
diff --git a/SPQR/Matrix/arrow.mtx b/SPQR/Matrix/arrow.mtx
new file mode 100644
index 0000000..f4ba63c
--- /dev/null
+++ b/SPQR/Matrix/arrow.mtx
@@ -0,0 +1,139504 @@
+%%MatrixMarket matrix coordinate integer general
+%-------------------------------------------------------------------------------
+% A large arrow-head matrix that leads to integer overflow on 32-bit platforms
+% if ordered with no fill-reducing permutation.
+%-------------------------------------------------------------------------------
+46500 46500 139498
+1 1 2
+2 1 2
+3 1 2
+4 1 2
+5 1 2
+6 1 2
+7 1 2
+8 1 2
+9 1 2
+10 1 2
+11 1 2
+12 1 2
+13 1 2
+14 1 2
+15 1 2
+16 1 2
+17 1 2
+18 1 2
+19 1 2
+20 1 2
+21 1 2
+22 1 2
+23 1 2
+24 1 2
+25 1 2
+26 1 2
+27 1 2
+28 1 2
+29 1 2
+30 1 2
+31 1 2
+32 1 2
+33 1 2
+34 1 2
+35 1 2
+36 1 2
+37 1 2
+38 1 2
+39 1 2
+40 1 2
+41 1 2
+42 1 2
+43 1 2
+44 1 2
+45 1 2
+46 1 2
+47 1 2
+48 1 2
+49 1 2
+50 1 2
+51 1 2
+52 1 2
+53 1 2
+54 1 2
+55 1 2
+56 1 2
+57 1 2
+58 1 2
+59 1 2
+60 1 2
+61 1 2
+62 1 2
+63 1 2
+64 1 2
+65 1 2
+66 1 2
+67 1 2
+68 1 2
+69 1 2
+70 1 2
+71 1 2
+72 1 2
+73 1 2
+74 1 2
+75 1 2
+76 1 2
+77 1 2
+78 1 2
+79 1 2
+80 1 2
+81 1 2
+82 1 2
+83 1 2
+84 1 2
+85 1 2
+86 1 2
+87 1 2
+88 1 2
+89 1 2
+90 1 2
+91 1 2
+92 1 2
+93 1 2
+94 1 2
+95 1 2
+96 1 2
+97 1 2
+98 1 2
+99 1 2
+100 1 2
+101 1 2
+102 1 2
+103 1 2
+104 1 2
+105 1 2
+106 1 2
+107 1 2
+108 1 2
+109 1 2
+110 1 2
+111 1 2
+112 1 2
+113 1 2
+114 1 2
+115 1 2
+116 1 2
+117 1 2
+118 1 2
+119 1 2
+120 1 2
+121 1 2
+122 1 2
+123 1 2
+124 1 2
+125 1 2
+126 1 2
+127 1 2
+128 1 2
+129 1 2
+130 1 2
+131 1 2
+132 1 2
+133 1 2
+134 1 2
+135 1 2
+136 1 2
+137 1 2
+138 1 2
+139 1 2
+140 1 2
+141 1 2
+142 1 2
+143 1 2
+144 1 2
+145 1 2
+146 1 2
+147 1 2
+148 1 2
+149 1 2
+150 1 2
+151 1 2
+152 1 2
+153 1 2
+154 1 2
+155 1 2
+156 1 2
+157 1 2
+158 1 2
+159 1 2
+160 1 2
+161 1 2
+162 1 2
+163 1 2
+164 1 2
+165 1 2
+166 1 2
+167 1 2
+168 1 2
+169 1 2
+170 1 2
+171 1 2
+172 1 2
+173 1 2
+174 1 2
+175 1 2
+176 1 2
+177 1 2
+178 1 2
+179 1 2
+180 1 2
+181 1 2
+182 1 2
+183 1 2
+184 1 2
+185 1 2
+186 1 2
+187 1 2
+188 1 2
+189 1 2
+190 1 2
+191 1 2
+192 1 2
+193 1 2
+194 1 2
+195 1 2
+196 1 2
+197 1 2
+198 1 2
+199 1 2
+200 1 2
+201 1 2
+202 1 2
+203 1 2
+204 1 2
+205 1 2
+206 1 2
+207 1 2
+208 1 2
+209 1 2
+210 1 2
+211 1 2
+212 1 2
+213 1 2
+214 1 2
+215 1 2
+216 1 2
+217 1 2
+218 1 2
+219 1 2
+220 1 2
+221 1 2
+222 1 2
+223 1 2
+224 1 2
+225 1 2
+226 1 2
+227 1 2
+228 1 2
+229 1 2
+230 1 2
+231 1 2
+232 1 2
+233 1 2
+234 1 2
+235 1 2
+236 1 2
+237 1 2
+238 1 2
+239 1 2
+240 1 2
+241 1 2
+242 1 2
+243 1 2
+244 1 2
+245 1 2
+246 1 2
+247 1 2
+248 1 2
+249 1 2
+250 1 2
+251 1 2
+252 1 2
+253 1 2
+254 1 2
+255 1 2
+256 1 2
+257 1 2
+258 1 2
+259 1 2
+260 1 2
+261 1 2
+262 1 2
+263 1 2
+264 1 2
+265 1 2
+266 1 2
+267 1 2
+268 1 2
+269 1 2
+270 1 2
+271 1 2
+272 1 2
+273 1 2
+274 1 2
+275 1 2
+276 1 2
+277 1 2
+278 1 2
+279 1 2
+280 1 2
+281 1 2
+282 1 2
+283 1 2
+284 1 2
+285 1 2
+286 1 2
+287 1 2
+288 1 2
+289 1 2
+290 1 2
+291 1 2
+292 1 2
+293 1 2
+294 1 2
+295 1 2
+296 1 2
+297 1 2
+298 1 2
+299 1 2
+300 1 2
+301 1 2
+302 1 2
+303 1 2
+304 1 2
+305 1 2
+306 1 2
+307 1 2
+308 1 2
+309 1 2
+310 1 2
+311 1 2
+312 1 2
+313 1 2
+314 1 2
+315 1 2
+316 1 2
+317 1 2
+318 1 2
+319 1 2
+320 1 2
+321 1 2
+322 1 2
+323 1 2
+324 1 2
+325 1 2
+326 1 2
+327 1 2
+328 1 2
+329 1 2
+330 1 2
+331 1 2
+332 1 2
+333 1 2
+334 1 2
+335 1 2
+336 1 2
+337 1 2
+338 1 2
+339 1 2
+340 1 2
+341 1 2
+342 1 2
+343 1 2
+344 1 2
+345 1 2
+346 1 2
+347 1 2
+348 1 2
+349 1 2
+350 1 2
+351 1 2
+352 1 2
+353 1 2
+354 1 2
+355 1 2
+356 1 2
+357 1 2
+358 1 2
+359 1 2
+360 1 2
+361 1 2
+362 1 2
+363 1 2
+364 1 2
+365 1 2
+366 1 2
+367 1 2
+368 1 2
+369 1 2
+370 1 2
+371 1 2
+372 1 2
+373 1 2
+374 1 2
+375 1 2
+376 1 2
+377 1 2
+378 1 2
+379 1 2
+380 1 2
+381 1 2
+382 1 2
+383 1 2
+384 1 2
+385 1 2
+386 1 2
+387 1 2
+388 1 2
+389 1 2
+390 1 2
+391 1 2
+392 1 2
+393 1 2
+394 1 2
+395 1 2
+396 1 2
+397 1 2
+398 1 2
+399 1 2
+400 1 2
+401 1 2
+402 1 2
+403 1 2
+404 1 2
+405 1 2
+406 1 2
+407 1 2
+408 1 2
+409 1 2
+410 1 2
+411 1 2
+412 1 2
+413 1 2
+414 1 2
+415 1 2
+416 1 2
+417 1 2
+418 1 2
+419 1 2
+420 1 2
+421 1 2
+422 1 2
+423 1 2
+424 1 2
+425 1 2
+426 1 2
+427 1 2
+428 1 2
+429 1 2
+430 1 2
+431 1 2
+432 1 2
+433 1 2
+434 1 2
+435 1 2
+436 1 2
+437 1 2
+438 1 2
+439 1 2
+440 1 2
+441 1 2
+442 1 2
+443 1 2
+444 1 2
+445 1 2
+446 1 2
+447 1 2
+448 1 2
+449 1 2
+450 1 2
+451 1 2
+452 1 2
+453 1 2
+454 1 2
+455 1 2
+456 1 2
+457 1 2
+458 1 2
+459 1 2
+460 1 2
+461 1 2
+462 1 2
+463 1 2
+464 1 2
+465 1 2
+466 1 2
+467 1 2
+468 1 2
+469 1 2
+470 1 2
+471 1 2
+472 1 2
+473 1 2
+474 1 2
+475 1 2
+476 1 2
+477 1 2
+478 1 2
+479 1 2
+480 1 2
+481 1 2
+482 1 2
+483 1 2
+484 1 2
+485 1 2
+486 1 2
+487 1 2
+488 1 2
+489 1 2
+490 1 2
+491 1 2
+492 1 2
+493 1 2
+494 1 2
+495 1 2
+496 1 2
+497 1 2
+498 1 2
+499 1 2
+500 1 2
+501 1 2
+502 1 2
+503 1 2
+504 1 2
+505 1 2
+506 1 2
+507 1 2
+508 1 2
+509 1 2
+510 1 2
+511 1 2
+512 1 2
+513 1 2
+514 1 2
+515 1 2
+516 1 2
+517 1 2
+518 1 2
+519 1 2
+520 1 2
+521 1 2
+522 1 2
+523 1 2
+524 1 2
+525 1 2
+526 1 2
+527 1 2
+528 1 2
+529 1 2
+530 1 2
+531 1 2
+532 1 2
+533 1 2
+534 1 2
+535 1 2
+536 1 2
+537 1 2
+538 1 2
+539 1 2
+540 1 2
+541 1 2
+542 1 2
+543 1 2
+544 1 2
+545 1 2
+546 1 2
+547 1 2
+548 1 2
+549 1 2
+550 1 2
+551 1 2
+552 1 2
+553 1 2
+554 1 2
+555 1 2
+556 1 2
+557 1 2
+558 1 2
+559 1 2
+560 1 2
+561 1 2
+562 1 2
+563 1 2
+564 1 2
+565 1 2
+566 1 2
+567 1 2
+568 1 2
+569 1 2
+570 1 2
+571 1 2
+572 1 2
+573 1 2
+574 1 2
+575 1 2
+576 1 2
+577 1 2
+578 1 2
+579 1 2
+580 1 2
+581 1 2
+582 1 2
+583 1 2
+584 1 2
+585 1 2
+586 1 2
+587 1 2
+588 1 2
+589 1 2
+590 1 2
+591 1 2
+592 1 2
+593 1 2
+594 1 2
+595 1 2
+596 1 2
+597 1 2
+598 1 2
+599 1 2
+600 1 2
+601 1 2
+602 1 2
+603 1 2
+604 1 2
+605 1 2
+606 1 2
+607 1 2
+608 1 2
+609 1 2
+610 1 2
+611 1 2
+612 1 2
+613 1 2
+614 1 2
+615 1 2
+616 1 2
+617 1 2
+618 1 2
+619 1 2
+620 1 2
+621 1 2
+622 1 2
+623 1 2
+624 1 2
+625 1 2
+626 1 2
+627 1 2
+628 1 2
+629 1 2
+630 1 2
+631 1 2
+632 1 2
+633 1 2
+634 1 2
+635 1 2
+636 1 2
+637 1 2
+638 1 2
+639 1 2
+640 1 2
+641 1 2
+642 1 2
+643 1 2
+644 1 2
+645 1 2
+646 1 2
+647 1 2
+648 1 2
+649 1 2
+650 1 2
+651 1 2
+652 1 2
+653 1 2
+654 1 2
+655 1 2
+656 1 2
+657 1 2
+658 1 2
+659 1 2
+660 1 2
+661 1 2
+662 1 2
+663 1 2
+664 1 2
+665 1 2
+666 1 2
+667 1 2
+668 1 2
+669 1 2
+670 1 2
+671 1 2
+672 1 2
+673 1 2
+674 1 2
+675 1 2
+676 1 2
+677 1 2
+678 1 2
+679 1 2
+680 1 2
+681 1 2
+682 1 2
+683 1 2
+684 1 2
+685 1 2
+686 1 2
+687 1 2
+688 1 2
+689 1 2
+690 1 2
+691 1 2
+692 1 2
+693 1 2
+694 1 2
+695 1 2
+696 1 2
+697 1 2
+698 1 2
+699 1 2
+700 1 2
+701 1 2
+702 1 2
+703 1 2
+704 1 2
+705 1 2
+706 1 2
+707 1 2
+708 1 2
+709 1 2
+710 1 2
+711 1 2
+712 1 2
+713 1 2
+714 1 2
+715 1 2
+716 1 2
+717 1 2
+718 1 2
+719 1 2
+720 1 2
+721 1 2
+722 1 2
+723 1 2
+724 1 2
+725 1 2
+726 1 2
+727 1 2
+728 1 2
+729 1 2
+730 1 2
+731 1 2
+732 1 2
+733 1 2
+734 1 2
+735 1 2
+736 1 2
+737 1 2
+738 1 2
+739 1 2
+740 1 2
+741 1 2
+742 1 2
+743 1 2
+744 1 2
+745 1 2
+746 1 2
+747 1 2
+748 1 2
+749 1 2
+750 1 2
+751 1 2
+752 1 2
+753 1 2
+754 1 2
+755 1 2
+756 1 2
+757 1 2
+758 1 2
+759 1 2
+760 1 2
+761 1 2
+762 1 2
+763 1 2
+764 1 2
+765 1 2
+766 1 2
+767 1 2
+768 1 2
+769 1 2
+770 1 2
+771 1 2
+772 1 2
+773 1 2
+774 1 2
+775 1 2
+776 1 2
+777 1 2
+778 1 2
+779 1 2
+780 1 2
+781 1 2
+782 1 2
+783 1 2
+784 1 2
+785 1 2
+786 1 2
+787 1 2
+788 1 2
+789 1 2
+790 1 2
+791 1 2
+792 1 2
+793 1 2
+794 1 2
+795 1 2
+796 1 2
+797 1 2
+798 1 2
+799 1 2
+800 1 2
+801 1 2
+802 1 2
+803 1 2
+804 1 2
+805 1 2
+806 1 2
+807 1 2
+808 1 2
+809 1 2
+810 1 2
+811 1 2
+812 1 2
+813 1 2
+814 1 2
+815 1 2
+816 1 2
+817 1 2
+818 1 2
+819 1 2
+820 1 2
+821 1 2
+822 1 2
+823 1 2
+824 1 2
+825 1 2
+826 1 2
+827 1 2
+828 1 2
+829 1 2
+830 1 2
+831 1 2
+832 1 2
+833 1 2
+834 1 2
+835 1 2
+836 1 2
+837 1 2
+838 1 2
+839 1 2
+840 1 2
+841 1 2
+842 1 2
+843 1 2
+844 1 2
+845 1 2
+846 1 2
+847 1 2
+848 1 2
+849 1 2
+850 1 2
+851 1 2
+852 1 2
+853 1 2
+854 1 2
+855 1 2
+856 1 2
+857 1 2
+858 1 2
+859 1 2
+860 1 2
+861 1 2
+862 1 2
+863 1 2
+864 1 2
+865 1 2
+866 1 2
+867 1 2
+868 1 2
+869 1 2
+870 1 2
+871 1 2
+872 1 2
+873 1 2
+874 1 2
+875 1 2
+876 1 2
+877 1 2
+878 1 2
+879 1 2
+880 1 2
+881 1 2
+882 1 2
+883 1 2
+884 1 2
+885 1 2
+886 1 2
+887 1 2
+888 1 2
+889 1 2
+890 1 2
+891 1 2
+892 1 2
+893 1 2
+894 1 2
+895 1 2
+896 1 2
+897 1 2
+898 1 2
+899 1 2
+900 1 2
+901 1 2
+902 1 2
+903 1 2
+904 1 2
+905 1 2
+906 1 2
+907 1 2
+908 1 2
+909 1 2
+910 1 2
+911 1 2
+912 1 2
+913 1 2
+914 1 2
+915 1 2
+916 1 2
+917 1 2
+918 1 2
+919 1 2
+920 1 2
+921 1 2
+922 1 2
+923 1 2
+924 1 2
+925 1 2
+926 1 2
+927 1 2
+928 1 2
+929 1 2
+930 1 2
+931 1 2
+932 1 2
+933 1 2
+934 1 2
+935 1 2
+936 1 2
+937 1 2
+938 1 2
+939 1 2
+940 1 2
+941 1 2
+942 1 2
+943 1 2
+944 1 2
+945 1 2
+946 1 2
+947 1 2
+948 1 2
+949 1 2
+950 1 2
+951 1 2
+952 1 2
+953 1 2
+954 1 2
+955 1 2
+956 1 2
+957 1 2
+958 1 2
+959 1 2
+960 1 2
+961 1 2
+962 1 2
+963 1 2
+964 1 2
+965 1 2
+966 1 2
+967 1 2
+968 1 2
+969 1 2
+970 1 2
+971 1 2
+972 1 2
+973 1 2
+974 1 2
+975 1 2
+976 1 2
+977 1 2
+978 1 2
+979 1 2
+980 1 2
+981 1 2
+982 1 2
+983 1 2
+984 1 2
+985 1 2
+986 1 2
+987 1 2
+988 1 2
+989 1 2
+990 1 2
+991 1 2
+992 1 2
+993 1 2
+994 1 2
+995 1 2
+996 1 2
+997 1 2
+998 1 2
+999 1 2
+1000 1 2
+1001 1 2
+1002 1 2
+1003 1 2
+1004 1 2
+1005 1 2
+1006 1 2
+1007 1 2
+1008 1 2
+1009 1 2
+1010 1 2
+1011 1 2
+1012 1 2
+1013 1 2
+1014 1 2
+1015 1 2
+1016 1 2
+1017 1 2
+1018 1 2
+1019 1 2
+1020 1 2
+1021 1 2
+1022 1 2
+1023 1 2
+1024 1 2
+1025 1 2
+1026 1 2
+1027 1 2
+1028 1 2
+1029 1 2
+1030 1 2
+1031 1 2
+1032 1 2
+1033 1 2
+1034 1 2
+1035 1 2
+1036 1 2
+1037 1 2
+1038 1 2
+1039 1 2
+1040 1 2
+1041 1 2
+1042 1 2
+1043 1 2
+1044 1 2
+1045 1 2
+1046 1 2
+1047 1 2
+1048 1 2
+1049 1 2
+1050 1 2
+1051 1 2
+1052 1 2
+1053 1 2
+1054 1 2
+1055 1 2
+1056 1 2
+1057 1 2
+1058 1 2
+1059 1 2
+1060 1 2
+1061 1 2
+1062 1 2
+1063 1 2
+1064 1 2
+1065 1 2
+1066 1 2
+1067 1 2
+1068 1 2
+1069 1 2
+1070 1 2
+1071 1 2
+1072 1 2
+1073 1 2
+1074 1 2
+1075 1 2
+1076 1 2
+1077 1 2
+1078 1 2
+1079 1 2
+1080 1 2
+1081 1 2
+1082 1 2
+1083 1 2
+1084 1 2
+1085 1 2
+1086 1 2
+1087 1 2
+1088 1 2
+1089 1 2
+1090 1 2
+1091 1 2
+1092 1 2
+1093 1 2
+1094 1 2
+1095 1 2
+1096 1 2
+1097 1 2
+1098 1 2
+1099 1 2
+1100 1 2
+1101 1 2
+1102 1 2
+1103 1 2
+1104 1 2
+1105 1 2
+1106 1 2
+1107 1 2
+1108 1 2
+1109 1 2
+1110 1 2
+1111 1 2
+1112 1 2
+1113 1 2
+1114 1 2
+1115 1 2
+1116 1 2
+1117 1 2
+1118 1 2
+1119 1 2
+1120 1 2
+1121 1 2
+1122 1 2
+1123 1 2
+1124 1 2
+1125 1 2
+1126 1 2
+1127 1 2
+1128 1 2
+1129 1 2
+1130 1 2
+1131 1 2
+1132 1 2
+1133 1 2
+1134 1 2
+1135 1 2
+1136 1 2
+1137 1 2
+1138 1 2
+1139 1 2
+1140 1 2
+1141 1 2
+1142 1 2
+1143 1 2
+1144 1 2
+1145 1 2
+1146 1 2
+1147 1 2
+1148 1 2
+1149 1 2
+1150 1 2
+1151 1 2
+1152 1 2
+1153 1 2
+1154 1 2
+1155 1 2
+1156 1 2
+1157 1 2
+1158 1 2
+1159 1 2
+1160 1 2
+1161 1 2
+1162 1 2
+1163 1 2
+1164 1 2
+1165 1 2
+1166 1 2
+1167 1 2
+1168 1 2
+1169 1 2
+1170 1 2
+1171 1 2
+1172 1 2
+1173 1 2
+1174 1 2
+1175 1 2
+1176 1 2
+1177 1 2
+1178 1 2
+1179 1 2
+1180 1 2
+1181 1 2
+1182 1 2
+1183 1 2
+1184 1 2
+1185 1 2
+1186 1 2
+1187 1 2
+1188 1 2
+1189 1 2
+1190 1 2
+1191 1 2
+1192 1 2
+1193 1 2
+1194 1 2
+1195 1 2
+1196 1 2
+1197 1 2
+1198 1 2
+1199 1 2
+1200 1 2
+1201 1 2
+1202 1 2
+1203 1 2
+1204 1 2
+1205 1 2
+1206 1 2
+1207 1 2
+1208 1 2
+1209 1 2
+1210 1 2
+1211 1 2
+1212 1 2
+1213 1 2
+1214 1 2
+1215 1 2
+1216 1 2
+1217 1 2
+1218 1 2
+1219 1 2
+1220 1 2
+1221 1 2
+1222 1 2
+1223 1 2
+1224 1 2
+1225 1 2
+1226 1 2
+1227 1 2
+1228 1 2
+1229 1 2
+1230 1 2
+1231 1 2
+1232 1 2
+1233 1 2
+1234 1 2
+1235 1 2
+1236 1 2
+1237 1 2
+1238 1 2
+1239 1 2
+1240 1 2
+1241 1 2
+1242 1 2
+1243 1 2
+1244 1 2
+1245 1 2
+1246 1 2
+1247 1 2
+1248 1 2
+1249 1 2
+1250 1 2
+1251 1 2
+1252 1 2
+1253 1 2
+1254 1 2
+1255 1 2
+1256 1 2
+1257 1 2
+1258 1 2
+1259 1 2
+1260 1 2
+1261 1 2
+1262 1 2
+1263 1 2
+1264 1 2
+1265 1 2
+1266 1 2
+1267 1 2
+1268 1 2
+1269 1 2
+1270 1 2
+1271 1 2
+1272 1 2
+1273 1 2
+1274 1 2
+1275 1 2
+1276 1 2
+1277 1 2
+1278 1 2
+1279 1 2
+1280 1 2
+1281 1 2
+1282 1 2
+1283 1 2
+1284 1 2
+1285 1 2
+1286 1 2
+1287 1 2
+1288 1 2
+1289 1 2
+1290 1 2
+1291 1 2
+1292 1 2
+1293 1 2
+1294 1 2
+1295 1 2
+1296 1 2
+1297 1 2
+1298 1 2
+1299 1 2
+1300 1 2
+1301 1 2
+1302 1 2
+1303 1 2
+1304 1 2
+1305 1 2
+1306 1 2
+1307 1 2
+1308 1 2
+1309 1 2
+1310 1 2
+1311 1 2
+1312 1 2
+1313 1 2
+1314 1 2
+1315 1 2
+1316 1 2
+1317 1 2
+1318 1 2
+1319 1 2
+1320 1 2
+1321 1 2
+1322 1 2
+1323 1 2
+1324 1 2
+1325 1 2
+1326 1 2
+1327 1 2
+1328 1 2
+1329 1 2
+1330 1 2
+1331 1 2
+1332 1 2
+1333 1 2
+1334 1 2
+1335 1 2
+1336 1 2
+1337 1 2
+1338 1 2
+1339 1 2
+1340 1 2
+1341 1 2
+1342 1 2
+1343 1 2
+1344 1 2
+1345 1 2
+1346 1 2
+1347 1 2
+1348 1 2
+1349 1 2
+1350 1 2
+1351 1 2
+1352 1 2
+1353 1 2
+1354 1 2
+1355 1 2
+1356 1 2
+1357 1 2
+1358 1 2
+1359 1 2
+1360 1 2
+1361 1 2
+1362 1 2
+1363 1 2
+1364 1 2
+1365 1 2
+1366 1 2
+1367 1 2
+1368 1 2
+1369 1 2
+1370 1 2
+1371 1 2
+1372 1 2
+1373 1 2
+1374 1 2
+1375 1 2
+1376 1 2
+1377 1 2
+1378 1 2
+1379 1 2
+1380 1 2
+1381 1 2
+1382 1 2
+1383 1 2
+1384 1 2
+1385 1 2
+1386 1 2
+1387 1 2
+1388 1 2
+1389 1 2
+1390 1 2
+1391 1 2
+1392 1 2
+1393 1 2
+1394 1 2
+1395 1 2
+1396 1 2
+1397 1 2
+1398 1 2
+1399 1 2
+1400 1 2
+1401 1 2
+1402 1 2
+1403 1 2
+1404 1 2
+1405 1 2
+1406 1 2
+1407 1 2
+1408 1 2
+1409 1 2
+1410 1 2
+1411 1 2
+1412 1 2
+1413 1 2
+1414 1 2
+1415 1 2
+1416 1 2
+1417 1 2
+1418 1 2
+1419 1 2
+1420 1 2
+1421 1 2
+1422 1 2
+1423 1 2
+1424 1 2
+1425 1 2
+1426 1 2
+1427 1 2
+1428 1 2
+1429 1 2
+1430 1 2
+1431 1 2
+1432 1 2
+1433 1 2
+1434 1 2
+1435 1 2
+1436 1 2
+1437 1 2
+1438 1 2
+1439 1 2
+1440 1 2
+1441 1 2
+1442 1 2
+1443 1 2
+1444 1 2
+1445 1 2
+1446 1 2
+1447 1 2
+1448 1 2
+1449 1 2
+1450 1 2
+1451 1 2
+1452 1 2
+1453 1 2
+1454 1 2
+1455 1 2
+1456 1 2
+1457 1 2
+1458 1 2
+1459 1 2
+1460 1 2
+1461 1 2
+1462 1 2
+1463 1 2
+1464 1 2
+1465 1 2
+1466 1 2
+1467 1 2
+1468 1 2
+1469 1 2
+1470 1 2
+1471 1 2
+1472 1 2
+1473 1 2
+1474 1 2
+1475 1 2
+1476 1 2
+1477 1 2
+1478 1 2
+1479 1 2
+1480 1 2
+1481 1 2
+1482 1 2
+1483 1 2
+1484 1 2
+1485 1 2
+1486 1 2
+1487 1 2
+1488 1 2
+1489 1 2
+1490 1 2
+1491 1 2
+1492 1 2
+1493 1 2
+1494 1 2
+1495 1 2
+1496 1 2
+1497 1 2
+1498 1 2
+1499 1 2
+1500 1 2
+1501 1 2
+1502 1 2
+1503 1 2
+1504 1 2
+1505 1 2
+1506 1 2
+1507 1 2
+1508 1 2
+1509 1 2
+1510 1 2
+1511 1 2
+1512 1 2
+1513 1 2
+1514 1 2
+1515 1 2
+1516 1 2
+1517 1 2
+1518 1 2
+1519 1 2
+1520 1 2
+1521 1 2
+1522 1 2
+1523 1 2
+1524 1 2
+1525 1 2
+1526 1 2
+1527 1 2
+1528 1 2
+1529 1 2
+1530 1 2
+1531 1 2
+1532 1 2
+1533 1 2
+1534 1 2
+1535 1 2
+1536 1 2
+1537 1 2
+1538 1 2
+1539 1 2
+1540 1 2
+1541 1 2
+1542 1 2
+1543 1 2
+1544 1 2
+1545 1 2
+1546 1 2
+1547 1 2
+1548 1 2
+1549 1 2
+1550 1 2
+1551 1 2
+1552 1 2
+1553 1 2
+1554 1 2
+1555 1 2
+1556 1 2
+1557 1 2
+1558 1 2
+1559 1 2
+1560 1 2
+1561 1 2
+1562 1 2
+1563 1 2
+1564 1 2
+1565 1 2
+1566 1 2
+1567 1 2
+1568 1 2
+1569 1 2
+1570 1 2
+1571 1 2
+1572 1 2
+1573 1 2
+1574 1 2
+1575 1 2
+1576 1 2
+1577 1 2
+1578 1 2
+1579 1 2
+1580 1 2
+1581 1 2
+1582 1 2
+1583 1 2
+1584 1 2
+1585 1 2
+1586 1 2
+1587 1 2
+1588 1 2
+1589 1 2
+1590 1 2
+1591 1 2
+1592 1 2
+1593 1 2
+1594 1 2
+1595 1 2
+1596 1 2
+1597 1 2
+1598 1 2
+1599 1 2
+1600 1 2
+1601 1 2
+1602 1 2
+1603 1 2
+1604 1 2
+1605 1 2
+1606 1 2
+1607 1 2
+1608 1 2
+1609 1 2
+1610 1 2
+1611 1 2
+1612 1 2
+1613 1 2
+1614 1 2
+1615 1 2
+1616 1 2
+1617 1 2
+1618 1 2
+1619 1 2
+1620 1 2
+1621 1 2
+1622 1 2
+1623 1 2
+1624 1 2
+1625 1 2
+1626 1 2
+1627 1 2
+1628 1 2
+1629 1 2
+1630 1 2
+1631 1 2
+1632 1 2
+1633 1 2
+1634 1 2
+1635 1 2
+1636 1 2
+1637 1 2
+1638 1 2
+1639 1 2
+1640 1 2
+1641 1 2
+1642 1 2
+1643 1 2
+1644 1 2
+1645 1 2
+1646 1 2
+1647 1 2
+1648 1 2
+1649 1 2
+1650 1 2
+1651 1 2
+1652 1 2
+1653 1 2
+1654 1 2
+1655 1 2
+1656 1 2
+1657 1 2
+1658 1 2
+1659 1 2
+1660 1 2
+1661 1 2
+1662 1 2
+1663 1 2
+1664 1 2
+1665 1 2
+1666 1 2
+1667 1 2
+1668 1 2
+1669 1 2
+1670 1 2
+1671 1 2
+1672 1 2
+1673 1 2
+1674 1 2
+1675 1 2
+1676 1 2
+1677 1 2
+1678 1 2
+1679 1 2
+1680 1 2
+1681 1 2
+1682 1 2
+1683 1 2
+1684 1 2
+1685 1 2
+1686 1 2
+1687 1 2
+1688 1 2
+1689 1 2
+1690 1 2
+1691 1 2
+1692 1 2
+1693 1 2
+1694 1 2
+1695 1 2
+1696 1 2
+1697 1 2
+1698 1 2
+1699 1 2
+1700 1 2
+1701 1 2
+1702 1 2
+1703 1 2
+1704 1 2
+1705 1 2
+1706 1 2
+1707 1 2
+1708 1 2
+1709 1 2
+1710 1 2
+1711 1 2
+1712 1 2
+1713 1 2
+1714 1 2
+1715 1 2
+1716 1 2
+1717 1 2
+1718 1 2
+1719 1 2
+1720 1 2
+1721 1 2
+1722 1 2
+1723 1 2
+1724 1 2
+1725 1 2
+1726 1 2
+1727 1 2
+1728 1 2
+1729 1 2
+1730 1 2
+1731 1 2
+1732 1 2
+1733 1 2
+1734 1 2
+1735 1 2
+1736 1 2
+1737 1 2
+1738 1 2
+1739 1 2
+1740 1 2
+1741 1 2
+1742 1 2
+1743 1 2
+1744 1 2
+1745 1 2
+1746 1 2
+1747 1 2
+1748 1 2
+1749 1 2
+1750 1 2
+1751 1 2
+1752 1 2
+1753 1 2
+1754 1 2
+1755 1 2
+1756 1 2
+1757 1 2
+1758 1 2
+1759 1 2
+1760 1 2
+1761 1 2
+1762 1 2
+1763 1 2
+1764 1 2
+1765 1 2
+1766 1 2
+1767 1 2
+1768 1 2
+1769 1 2
+1770 1 2
+1771 1 2
+1772 1 2
+1773 1 2
+1774 1 2
+1775 1 2
+1776 1 2
+1777 1 2
+1778 1 2
+1779 1 2
+1780 1 2
+1781 1 2
+1782 1 2
+1783 1 2
+1784 1 2
+1785 1 2
+1786 1 2
+1787 1 2
+1788 1 2
+1789 1 2
+1790 1 2
+1791 1 2
+1792 1 2
+1793 1 2
+1794 1 2
+1795 1 2
+1796 1 2
+1797 1 2
+1798 1 2
+1799 1 2
+1800 1 2
+1801 1 2
+1802 1 2
+1803 1 2
+1804 1 2
+1805 1 2
+1806 1 2
+1807 1 2
+1808 1 2
+1809 1 2
+1810 1 2
+1811 1 2
+1812 1 2
+1813 1 2
+1814 1 2
+1815 1 2
+1816 1 2
+1817 1 2
+1818 1 2
+1819 1 2
+1820 1 2
+1821 1 2
+1822 1 2
+1823 1 2
+1824 1 2
+1825 1 2
+1826 1 2
+1827 1 2
+1828 1 2
+1829 1 2
+1830 1 2
+1831 1 2
+1832 1 2
+1833 1 2
+1834 1 2
+1835 1 2
+1836 1 2
+1837 1 2
+1838 1 2
+1839 1 2
+1840 1 2
+1841 1 2
+1842 1 2
+1843 1 2
+1844 1 2
+1845 1 2
+1846 1 2
+1847 1 2
+1848 1 2
+1849 1 2
+1850 1 2
+1851 1 2
+1852 1 2
+1853 1 2
+1854 1 2
+1855 1 2
+1856 1 2
+1857 1 2
+1858 1 2
+1859 1 2
+1860 1 2
+1861 1 2
+1862 1 2
+1863 1 2
+1864 1 2
+1865 1 2
+1866 1 2
+1867 1 2
+1868 1 2
+1869 1 2
+1870 1 2
+1871 1 2
+1872 1 2
+1873 1 2
+1874 1 2
+1875 1 2
+1876 1 2
+1877 1 2
+1878 1 2
+1879 1 2
+1880 1 2
+1881 1 2
+1882 1 2
+1883 1 2
+1884 1 2
+1885 1 2
+1886 1 2
+1887 1 2
+1888 1 2
+1889 1 2
+1890 1 2
+1891 1 2
+1892 1 2
+1893 1 2
+1894 1 2
+1895 1 2
+1896 1 2
+1897 1 2
+1898 1 2
+1899 1 2
+1900 1 2
+1901 1 2
+1902 1 2
+1903 1 2
+1904 1 2
+1905 1 2
+1906 1 2
+1907 1 2
+1908 1 2
+1909 1 2
+1910 1 2
+1911 1 2
+1912 1 2
+1913 1 2
+1914 1 2
+1915 1 2
+1916 1 2
+1917 1 2
+1918 1 2
+1919 1 2
+1920 1 2
+1921 1 2
+1922 1 2
+1923 1 2
+1924 1 2
+1925 1 2
+1926 1 2
+1927 1 2
+1928 1 2
+1929 1 2
+1930 1 2
+1931 1 2
+1932 1 2
+1933 1 2
+1934 1 2
+1935 1 2
+1936 1 2
+1937 1 2
+1938 1 2
+1939 1 2
+1940 1 2
+1941 1 2
+1942 1 2
+1943 1 2
+1944 1 2
+1945 1 2
+1946 1 2
+1947 1 2
+1948 1 2
+1949 1 2
+1950 1 2
+1951 1 2
+1952 1 2
+1953 1 2
+1954 1 2
+1955 1 2
+1956 1 2
+1957 1 2
+1958 1 2
+1959 1 2
+1960 1 2
+1961 1 2
+1962 1 2
+1963 1 2
+1964 1 2
+1965 1 2
+1966 1 2
+1967 1 2
+1968 1 2
+1969 1 2
+1970 1 2
+1971 1 2
+1972 1 2
+1973 1 2
+1974 1 2
+1975 1 2
+1976 1 2
+1977 1 2
+1978 1 2
+1979 1 2
+1980 1 2
+1981 1 2
+1982 1 2
+1983 1 2
+1984 1 2
+1985 1 2
+1986 1 2
+1987 1 2
+1988 1 2
+1989 1 2
+1990 1 2
+1991 1 2
+1992 1 2
+1993 1 2
+1994 1 2
+1995 1 2
+1996 1 2
+1997 1 2
+1998 1 2
+1999 1 2
+2000 1 2
+2001 1 2
+2002 1 2
+2003 1 2
+2004 1 2
+2005 1 2
+2006 1 2
+2007 1 2
+2008 1 2
+2009 1 2
+2010 1 2
+2011 1 2
+2012 1 2
+2013 1 2
+2014 1 2
+2015 1 2
+2016 1 2
+2017 1 2
+2018 1 2
+2019 1 2
+2020 1 2
+2021 1 2
+2022 1 2
+2023 1 2
+2024 1 2
+2025 1 2
+2026 1 2
+2027 1 2
+2028 1 2
+2029 1 2
+2030 1 2
+2031 1 2
+2032 1 2
+2033 1 2
+2034 1 2
+2035 1 2
+2036 1 2
+2037 1 2
+2038 1 2
+2039 1 2
+2040 1 2
+2041 1 2
+2042 1 2
+2043 1 2
+2044 1 2
+2045 1 2
+2046 1 2
+2047 1 2
+2048 1 2
+2049 1 2
+2050 1 2
+2051 1 2
+2052 1 2
+2053 1 2
+2054 1 2
+2055 1 2
+2056 1 2
+2057 1 2
+2058 1 2
+2059 1 2
+2060 1 2
+2061 1 2
+2062 1 2
+2063 1 2
+2064 1 2
+2065 1 2
+2066 1 2
+2067 1 2
+2068 1 2
+2069 1 2
+2070 1 2
+2071 1 2
+2072 1 2
+2073 1 2
+2074 1 2
+2075 1 2
+2076 1 2
+2077 1 2
+2078 1 2
+2079 1 2
+2080 1 2
+2081 1 2
+2082 1 2
+2083 1 2
+2084 1 2
+2085 1 2
+2086 1 2
+2087 1 2
+2088 1 2
+2089 1 2
+2090 1 2
+2091 1 2
+2092 1 2
+2093 1 2
+2094 1 2
+2095 1 2
+2096 1 2
+2097 1 2
+2098 1 2
+2099 1 2
+2100 1 2
+2101 1 2
+2102 1 2
+2103 1 2
+2104 1 2
+2105 1 2
+2106 1 2
+2107 1 2
+2108 1 2
+2109 1 2
+2110 1 2
+2111 1 2
+2112 1 2
+2113 1 2
+2114 1 2
+2115 1 2
+2116 1 2
+2117 1 2
+2118 1 2
+2119 1 2
+2120 1 2
+2121 1 2
+2122 1 2
+2123 1 2
+2124 1 2
+2125 1 2
+2126 1 2
+2127 1 2
+2128 1 2
+2129 1 2
+2130 1 2
+2131 1 2
+2132 1 2
+2133 1 2
+2134 1 2
+2135 1 2
+2136 1 2
+2137 1 2
+2138 1 2
+2139 1 2
+2140 1 2
+2141 1 2
+2142 1 2
+2143 1 2
+2144 1 2
+2145 1 2
+2146 1 2
+2147 1 2
+2148 1 2
+2149 1 2
+2150 1 2
+2151 1 2
+2152 1 2
+2153 1 2
+2154 1 2
+2155 1 2
+2156 1 2
+2157 1 2
+2158 1 2
+2159 1 2
+2160 1 2
+2161 1 2
+2162 1 2
+2163 1 2
+2164 1 2
+2165 1 2
+2166 1 2
+2167 1 2
+2168 1 2
+2169 1 2
+2170 1 2
+2171 1 2
+2172 1 2
+2173 1 2
+2174 1 2
+2175 1 2
+2176 1 2
+2177 1 2
+2178 1 2
+2179 1 2
+2180 1 2
+2181 1 2
+2182 1 2
+2183 1 2
+2184 1 2
+2185 1 2
+2186 1 2
+2187 1 2
+2188 1 2
+2189 1 2
+2190 1 2
+2191 1 2
+2192 1 2
+2193 1 2
+2194 1 2
+2195 1 2
+2196 1 2
+2197 1 2
+2198 1 2
+2199 1 2
+2200 1 2
+2201 1 2
+2202 1 2
+2203 1 2
+2204 1 2
+2205 1 2
+2206 1 2
+2207 1 2
+2208 1 2
+2209 1 2
+2210 1 2
+2211 1 2
+2212 1 2
+2213 1 2
+2214 1 2
+2215 1 2
+2216 1 2
+2217 1 2
+2218 1 2
+2219 1 2
+2220 1 2
+2221 1 2
+2222 1 2
+2223 1 2
+2224 1 2
+2225 1 2
+2226 1 2
+2227 1 2
+2228 1 2
+2229 1 2
+2230 1 2
+2231 1 2
+2232 1 2
+2233 1 2
+2234 1 2
+2235 1 2
+2236 1 2
+2237 1 2
+2238 1 2
+2239 1 2
+2240 1 2
+2241 1 2
+2242 1 2
+2243 1 2
+2244 1 2
+2245 1 2
+2246 1 2
+2247 1 2
+2248 1 2
+2249 1 2
+2250 1 2
+2251 1 2
+2252 1 2
+2253 1 2
+2254 1 2
+2255 1 2
+2256 1 2
+2257 1 2
+2258 1 2
+2259 1 2
+2260 1 2
+2261 1 2
+2262 1 2
+2263 1 2
+2264 1 2
+2265 1 2
+2266 1 2
+2267 1 2
+2268 1 2
+2269 1 2
+2270 1 2
+2271 1 2
+2272 1 2
+2273 1 2
+2274 1 2
+2275 1 2
+2276 1 2
+2277 1 2
+2278 1 2
+2279 1 2
+2280 1 2
+2281 1 2
+2282 1 2
+2283 1 2
+2284 1 2
+2285 1 2
+2286 1 2
+2287 1 2
+2288 1 2
+2289 1 2
+2290 1 2
+2291 1 2
+2292 1 2
+2293 1 2
+2294 1 2
+2295 1 2
+2296 1 2
+2297 1 2
+2298 1 2
+2299 1 2
+2300 1 2
+2301 1 2
+2302 1 2
+2303 1 2
+2304 1 2
+2305 1 2
+2306 1 2
+2307 1 2
+2308 1 2
+2309 1 2
+2310 1 2
+2311 1 2
+2312 1 2
+2313 1 2
+2314 1 2
+2315 1 2
+2316 1 2
+2317 1 2
+2318 1 2
+2319 1 2
+2320 1 2
+2321 1 2
+2322 1 2
+2323 1 2
+2324 1 2
+2325 1 2
+2326 1 2
+2327 1 2
+2328 1 2
+2329 1 2
+2330 1 2
+2331 1 2
+2332 1 2
+2333 1 2
+2334 1 2
+2335 1 2
+2336 1 2
+2337 1 2
+2338 1 2
+2339 1 2
+2340 1 2
+2341 1 2
+2342 1 2
+2343 1 2
+2344 1 2
+2345 1 2
+2346 1 2
+2347 1 2
+2348 1 2
+2349 1 2
+2350 1 2
+2351 1 2
+2352 1 2
+2353 1 2
+2354 1 2
+2355 1 2
+2356 1 2
+2357 1 2
+2358 1 2
+2359 1 2
+2360 1 2
+2361 1 2
+2362 1 2
+2363 1 2
+2364 1 2
+2365 1 2
+2366 1 2
+2367 1 2
+2368 1 2
+2369 1 2
+2370 1 2
+2371 1 2
+2372 1 2
+2373 1 2
+2374 1 2
+2375 1 2
+2376 1 2
+2377 1 2
+2378 1 2
+2379 1 2
+2380 1 2
+2381 1 2
+2382 1 2
+2383 1 2
+2384 1 2
+2385 1 2
+2386 1 2
+2387 1 2
+2388 1 2
+2389 1 2
+2390 1 2
+2391 1 2
+2392 1 2
+2393 1 2
+2394 1 2
+2395 1 2
+2396 1 2
+2397 1 2
+2398 1 2
+2399 1 2
+2400 1 2
+2401 1 2
+2402 1 2
+2403 1 2
+2404 1 2
+2405 1 2
+2406 1 2
+2407 1 2
+2408 1 2
+2409 1 2
+2410 1 2
+2411 1 2
+2412 1 2
+2413 1 2
+2414 1 2
+2415 1 2
+2416 1 2
+2417 1 2
+2418 1 2
+2419 1 2
+2420 1 2
+2421 1 2
+2422 1 2
+2423 1 2
+2424 1 2
+2425 1 2
+2426 1 2
+2427 1 2
+2428 1 2
+2429 1 2
+2430 1 2
+2431 1 2
+2432 1 2
+2433 1 2
+2434 1 2
+2435 1 2
+2436 1 2
+2437 1 2
+2438 1 2
+2439 1 2
+2440 1 2
+2441 1 2
+2442 1 2
+2443 1 2
+2444 1 2
+2445 1 2
+2446 1 2
+2447 1 2
+2448 1 2
+2449 1 2
+2450 1 2
+2451 1 2
+2452 1 2
+2453 1 2
+2454 1 2
+2455 1 2
+2456 1 2
+2457 1 2
+2458 1 2
+2459 1 2
+2460 1 2
+2461 1 2
+2462 1 2
+2463 1 2
+2464 1 2
+2465 1 2
+2466 1 2
+2467 1 2
+2468 1 2
+2469 1 2
+2470 1 2
+2471 1 2
+2472 1 2
+2473 1 2
+2474 1 2
+2475 1 2
+2476 1 2
+2477 1 2
+2478 1 2
+2479 1 2
+2480 1 2
+2481 1 2
+2482 1 2
+2483 1 2
+2484 1 2
+2485 1 2
+2486 1 2
+2487 1 2
+2488 1 2
+2489 1 2
+2490 1 2
+2491 1 2
+2492 1 2
+2493 1 2
+2494 1 2
+2495 1 2
+2496 1 2
+2497 1 2
+2498 1 2
+2499 1 2
+2500 1 2
+2501 1 2
+2502 1 2
+2503 1 2
+2504 1 2
+2505 1 2
+2506 1 2
+2507 1 2
+2508 1 2
+2509 1 2
+2510 1 2
+2511 1 2
+2512 1 2
+2513 1 2
+2514 1 2
+2515 1 2
+2516 1 2
+2517 1 2
+2518 1 2
+2519 1 2
+2520 1 2
+2521 1 2
+2522 1 2
+2523 1 2
+2524 1 2
+2525 1 2
+2526 1 2
+2527 1 2
+2528 1 2
+2529 1 2
+2530 1 2
+2531 1 2
+2532 1 2
+2533 1 2
+2534 1 2
+2535 1 2
+2536 1 2
+2537 1 2
+2538 1 2
+2539 1 2
+2540 1 2
+2541 1 2
+2542 1 2
+2543 1 2
+2544 1 2
+2545 1 2
+2546 1 2
+2547 1 2
+2548 1 2
+2549 1 2
+2550 1 2
+2551 1 2
+2552 1 2
+2553 1 2
+2554 1 2
+2555 1 2
+2556 1 2
+2557 1 2
+2558 1 2
+2559 1 2
+2560 1 2
+2561 1 2
+2562 1 2
+2563 1 2
+2564 1 2
+2565 1 2
+2566 1 2
+2567 1 2
+2568 1 2
+2569 1 2
+2570 1 2
+2571 1 2
+2572 1 2
+2573 1 2
+2574 1 2
+2575 1 2
+2576 1 2
+2577 1 2
+2578 1 2
+2579 1 2
+2580 1 2
+2581 1 2
+2582 1 2
+2583 1 2
+2584 1 2
+2585 1 2
+2586 1 2
+2587 1 2
+2588 1 2
+2589 1 2
+2590 1 2
+2591 1 2
+2592 1 2
+2593 1 2
+2594 1 2
+2595 1 2
+2596 1 2
+2597 1 2
+2598 1 2
+2599 1 2
+2600 1 2
+2601 1 2
+2602 1 2
+2603 1 2
+2604 1 2
+2605 1 2
+2606 1 2
+2607 1 2
+2608 1 2
+2609 1 2
+2610 1 2
+2611 1 2
+2612 1 2
+2613 1 2
+2614 1 2
+2615 1 2
+2616 1 2
+2617 1 2
+2618 1 2
+2619 1 2
+2620 1 2
+2621 1 2
+2622 1 2
+2623 1 2
+2624 1 2
+2625 1 2
+2626 1 2
+2627 1 2
+2628 1 2
+2629 1 2
+2630 1 2
+2631 1 2
+2632 1 2
+2633 1 2
+2634 1 2
+2635 1 2
+2636 1 2
+2637 1 2
+2638 1 2
+2639 1 2
+2640 1 2
+2641 1 2
+2642 1 2
+2643 1 2
+2644 1 2
+2645 1 2
+2646 1 2
+2647 1 2
+2648 1 2
+2649 1 2
+2650 1 2
+2651 1 2
+2652 1 2
+2653 1 2
+2654 1 2
+2655 1 2
+2656 1 2
+2657 1 2
+2658 1 2
+2659 1 2
+2660 1 2
+2661 1 2
+2662 1 2
+2663 1 2
+2664 1 2
+2665 1 2
+2666 1 2
+2667 1 2
+2668 1 2
+2669 1 2
+2670 1 2
+2671 1 2
+2672 1 2
+2673 1 2
+2674 1 2
+2675 1 2
+2676 1 2
+2677 1 2
+2678 1 2
+2679 1 2
+2680 1 2
+2681 1 2
+2682 1 2
+2683 1 2
+2684 1 2
+2685 1 2
+2686 1 2
+2687 1 2
+2688 1 2
+2689 1 2
+2690 1 2
+2691 1 2
+2692 1 2
+2693 1 2
+2694 1 2
+2695 1 2
+2696 1 2
+2697 1 2
+2698 1 2
+2699 1 2
+2700 1 2
+2701 1 2
+2702 1 2
+2703 1 2
+2704 1 2
+2705 1 2
+2706 1 2
+2707 1 2
+2708 1 2
+2709 1 2
+2710 1 2
+2711 1 2
+2712 1 2
+2713 1 2
+2714 1 2
+2715 1 2
+2716 1 2
+2717 1 2
+2718 1 2
+2719 1 2
+2720 1 2
+2721 1 2
+2722 1 2
+2723 1 2
+2724 1 2
+2725 1 2
+2726 1 2
+2727 1 2
+2728 1 2
+2729 1 2
+2730 1 2
+2731 1 2
+2732 1 2
+2733 1 2
+2734 1 2
+2735 1 2
+2736 1 2
+2737 1 2
+2738 1 2
+2739 1 2
+2740 1 2
+2741 1 2
+2742 1 2
+2743 1 2
+2744 1 2
+2745 1 2
+2746 1 2
+2747 1 2
+2748 1 2
+2749 1 2
+2750 1 2
+2751 1 2
+2752 1 2
+2753 1 2
+2754 1 2
+2755 1 2
+2756 1 2
+2757 1 2
+2758 1 2
+2759 1 2
+2760 1 2
+2761 1 2
+2762 1 2
+2763 1 2
+2764 1 2
+2765 1 2
+2766 1 2
+2767 1 2
+2768 1 2
+2769 1 2
+2770 1 2
+2771 1 2
+2772 1 2
+2773 1 2
+2774 1 2
+2775 1 2
+2776 1 2
+2777 1 2
+2778 1 2
+2779 1 2
+2780 1 2
+2781 1 2
+2782 1 2
+2783 1 2
+2784 1 2
+2785 1 2
+2786 1 2
+2787 1 2
+2788 1 2
+2789 1 2
+2790 1 2
+2791 1 2
+2792 1 2
+2793 1 2
+2794 1 2
+2795 1 2
+2796 1 2
+2797 1 2
+2798 1 2
+2799 1 2
+2800 1 2
+2801 1 2
+2802 1 2
+2803 1 2
+2804 1 2
+2805 1 2
+2806 1 2
+2807 1 2
+2808 1 2
+2809 1 2
+2810 1 2
+2811 1 2
+2812 1 2
+2813 1 2
+2814 1 2
+2815 1 2
+2816 1 2
+2817 1 2
+2818 1 2
+2819 1 2
+2820 1 2
+2821 1 2
+2822 1 2
+2823 1 2
+2824 1 2
+2825 1 2
+2826 1 2
+2827 1 2
+2828 1 2
+2829 1 2
+2830 1 2
+2831 1 2
+2832 1 2
+2833 1 2
+2834 1 2
+2835 1 2
+2836 1 2
+2837 1 2
+2838 1 2
+2839 1 2
+2840 1 2
+2841 1 2
+2842 1 2
+2843 1 2
+2844 1 2
+2845 1 2
+2846 1 2
+2847 1 2
+2848 1 2
+2849 1 2
+2850 1 2
+2851 1 2
+2852 1 2
+2853 1 2
+2854 1 2
+2855 1 2
+2856 1 2
+2857 1 2
+2858 1 2
+2859 1 2
+2860 1 2
+2861 1 2
+2862 1 2
+2863 1 2
+2864 1 2
+2865 1 2
+2866 1 2
+2867 1 2
+2868 1 2
+2869 1 2
+2870 1 2
+2871 1 2
+2872 1 2
+2873 1 2
+2874 1 2
+2875 1 2
+2876 1 2
+2877 1 2
+2878 1 2
+2879 1 2
+2880 1 2
+2881 1 2
+2882 1 2
+2883 1 2
+2884 1 2
+2885 1 2
+2886 1 2
+2887 1 2
+2888 1 2
+2889 1 2
+2890 1 2
+2891 1 2
+2892 1 2
+2893 1 2
+2894 1 2
+2895 1 2
+2896 1 2
+2897 1 2
+2898 1 2
+2899 1 2
+2900 1 2
+2901 1 2
+2902 1 2
+2903 1 2
+2904 1 2
+2905 1 2
+2906 1 2
+2907 1 2
+2908 1 2
+2909 1 2
+2910 1 2
+2911 1 2
+2912 1 2
+2913 1 2
+2914 1 2
+2915 1 2
+2916 1 2
+2917 1 2
+2918 1 2
+2919 1 2
+2920 1 2
+2921 1 2
+2922 1 2
+2923 1 2
+2924 1 2
+2925 1 2
+2926 1 2
+2927 1 2
+2928 1 2
+2929 1 2
+2930 1 2
+2931 1 2
+2932 1 2
+2933 1 2
+2934 1 2
+2935 1 2
+2936 1 2
+2937 1 2
+2938 1 2
+2939 1 2
+2940 1 2
+2941 1 2
+2942 1 2
+2943 1 2
+2944 1 2
+2945 1 2
+2946 1 2
+2947 1 2
+2948 1 2
+2949 1 2
+2950 1 2
+2951 1 2
+2952 1 2
+2953 1 2
+2954 1 2
+2955 1 2
+2956 1 2
+2957 1 2
+2958 1 2
+2959 1 2
+2960 1 2
+2961 1 2
+2962 1 2
+2963 1 2
+2964 1 2
+2965 1 2
+2966 1 2
+2967 1 2
+2968 1 2
+2969 1 2
+2970 1 2
+2971 1 2
+2972 1 2
+2973 1 2
+2974 1 2
+2975 1 2
+2976 1 2
+2977 1 2
+2978 1 2
+2979 1 2
+2980 1 2
+2981 1 2
+2982 1 2
+2983 1 2
+2984 1 2
+2985 1 2
+2986 1 2
+2987 1 2
+2988 1 2
+2989 1 2
+2990 1 2
+2991 1 2
+2992 1 2
+2993 1 2
+2994 1 2
+2995 1 2
+2996 1 2
+2997 1 2
+2998 1 2
+2999 1 2
+3000 1 2
+3001 1 2
+3002 1 2
+3003 1 2
+3004 1 2
+3005 1 2
+3006 1 2
+3007 1 2
+3008 1 2
+3009 1 2
+3010 1 2
+3011 1 2
+3012 1 2
+3013 1 2
+3014 1 2
+3015 1 2
+3016 1 2
+3017 1 2
+3018 1 2
+3019 1 2
+3020 1 2
+3021 1 2
+3022 1 2
+3023 1 2
+3024 1 2
+3025 1 2
+3026 1 2
+3027 1 2
+3028 1 2
+3029 1 2
+3030 1 2
+3031 1 2
+3032 1 2
+3033 1 2
+3034 1 2
+3035 1 2
+3036 1 2
+3037 1 2
+3038 1 2
+3039 1 2
+3040 1 2
+3041 1 2
+3042 1 2
+3043 1 2
+3044 1 2
+3045 1 2
+3046 1 2
+3047 1 2
+3048 1 2
+3049 1 2
+3050 1 2
+3051 1 2
+3052 1 2
+3053 1 2
+3054 1 2
+3055 1 2
+3056 1 2
+3057 1 2
+3058 1 2
+3059 1 2
+3060 1 2
+3061 1 2
+3062 1 2
+3063 1 2
+3064 1 2
+3065 1 2
+3066 1 2
+3067 1 2
+3068 1 2
+3069 1 2
+3070 1 2
+3071 1 2
+3072 1 2
+3073 1 2
+3074 1 2
+3075 1 2
+3076 1 2
+3077 1 2
+3078 1 2
+3079 1 2
+3080 1 2
+3081 1 2
+3082 1 2
+3083 1 2
+3084 1 2
+3085 1 2
+3086 1 2
+3087 1 2
+3088 1 2
+3089 1 2
+3090 1 2
+3091 1 2
+3092 1 2
+3093 1 2
+3094 1 2
+3095 1 2
+3096 1 2
+3097 1 2
+3098 1 2
+3099 1 2
+3100 1 2
+3101 1 2
+3102 1 2
+3103 1 2
+3104 1 2
+3105 1 2
+3106 1 2
+3107 1 2
+3108 1 2
+3109 1 2
+3110 1 2
+3111 1 2
+3112 1 2
+3113 1 2
+3114 1 2
+3115 1 2
+3116 1 2
+3117 1 2
+3118 1 2
+3119 1 2
+3120 1 2
+3121 1 2
+3122 1 2
+3123 1 2
+3124 1 2
+3125 1 2
+3126 1 2
+3127 1 2
+3128 1 2
+3129 1 2
+3130 1 2
+3131 1 2
+3132 1 2
+3133 1 2
+3134 1 2
+3135 1 2
+3136 1 2
+3137 1 2
+3138 1 2
+3139 1 2
+3140 1 2
+3141 1 2
+3142 1 2
+3143 1 2
+3144 1 2
+3145 1 2
+3146 1 2
+3147 1 2
+3148 1 2
+3149 1 2
+3150 1 2
+3151 1 2
+3152 1 2
+3153 1 2
+3154 1 2
+3155 1 2
+3156 1 2
+3157 1 2
+3158 1 2
+3159 1 2
+3160 1 2
+3161 1 2
+3162 1 2
+3163 1 2
+3164 1 2
+3165 1 2
+3166 1 2
+3167 1 2
+3168 1 2
+3169 1 2
+3170 1 2
+3171 1 2
+3172 1 2
+3173 1 2
+3174 1 2
+3175 1 2
+3176 1 2
+3177 1 2
+3178 1 2
+3179 1 2
+3180 1 2
+3181 1 2
+3182 1 2
+3183 1 2
+3184 1 2
+3185 1 2
+3186 1 2
+3187 1 2
+3188 1 2
+3189 1 2
+3190 1 2
+3191 1 2
+3192 1 2
+3193 1 2
+3194 1 2
+3195 1 2
+3196 1 2
+3197 1 2
+3198 1 2
+3199 1 2
+3200 1 2
+3201 1 2
+3202 1 2
+3203 1 2
+3204 1 2
+3205 1 2
+3206 1 2
+3207 1 2
+3208 1 2
+3209 1 2
+3210 1 2
+3211 1 2
+3212 1 2
+3213 1 2
+3214 1 2
+3215 1 2
+3216 1 2
+3217 1 2
+3218 1 2
+3219 1 2
+3220 1 2
+3221 1 2
+3222 1 2
+3223 1 2
+3224 1 2
+3225 1 2
+3226 1 2
+3227 1 2
+3228 1 2
+3229 1 2
+3230 1 2
+3231 1 2
+3232 1 2
+3233 1 2
+3234 1 2
+3235 1 2
+3236 1 2
+3237 1 2
+3238 1 2
+3239 1 2
+3240 1 2
+3241 1 2
+3242 1 2
+3243 1 2
+3244 1 2
+3245 1 2
+3246 1 2
+3247 1 2
+3248 1 2
+3249 1 2
+3250 1 2
+3251 1 2
+3252 1 2
+3253 1 2
+3254 1 2
+3255 1 2
+3256 1 2
+3257 1 2
+3258 1 2
+3259 1 2
+3260 1 2
+3261 1 2
+3262 1 2
+3263 1 2
+3264 1 2
+3265 1 2
+3266 1 2
+3267 1 2
+3268 1 2
+3269 1 2
+3270 1 2
+3271 1 2
+3272 1 2
+3273 1 2
+3274 1 2
+3275 1 2
+3276 1 2
+3277 1 2
+3278 1 2
+3279 1 2
+3280 1 2
+3281 1 2
+3282 1 2
+3283 1 2
+3284 1 2
+3285 1 2
+3286 1 2
+3287 1 2
+3288 1 2
+3289 1 2
+3290 1 2
+3291 1 2
+3292 1 2
+3293 1 2
+3294 1 2
+3295 1 2
+3296 1 2
+3297 1 2
+3298 1 2
+3299 1 2
+3300 1 2
+3301 1 2
+3302 1 2
+3303 1 2
+3304 1 2
+3305 1 2
+3306 1 2
+3307 1 2
+3308 1 2
+3309 1 2
+3310 1 2
+3311 1 2
+3312 1 2
+3313 1 2
+3314 1 2
+3315 1 2
+3316 1 2
+3317 1 2
+3318 1 2
+3319 1 2
+3320 1 2
+3321 1 2
+3322 1 2
+3323 1 2
+3324 1 2
+3325 1 2
+3326 1 2
+3327 1 2
+3328 1 2
+3329 1 2
+3330 1 2
+3331 1 2
+3332 1 2
+3333 1 2
+3334 1 2
+3335 1 2
+3336 1 2
+3337 1 2
+3338 1 2
+3339 1 2
+3340 1 2
+3341 1 2
+3342 1 2
+3343 1 2
+3344 1 2
+3345 1 2
+3346 1 2
+3347 1 2
+3348 1 2
+3349 1 2
+3350 1 2
+3351 1 2
+3352 1 2
+3353 1 2
+3354 1 2
+3355 1 2
+3356 1 2
+3357 1 2
+3358 1 2
+3359 1 2
+3360 1 2
+3361 1 2
+3362 1 2
+3363 1 2
+3364 1 2
+3365 1 2
+3366 1 2
+3367 1 2
+3368 1 2
+3369 1 2
+3370 1 2
+3371 1 2
+3372 1 2
+3373 1 2
+3374 1 2
+3375 1 2
+3376 1 2
+3377 1 2
+3378 1 2
+3379 1 2
+3380 1 2
+3381 1 2
+3382 1 2
+3383 1 2
+3384 1 2
+3385 1 2
+3386 1 2
+3387 1 2
+3388 1 2
+3389 1 2
+3390 1 2
+3391 1 2
+3392 1 2
+3393 1 2
+3394 1 2
+3395 1 2
+3396 1 2
+3397 1 2
+3398 1 2
+3399 1 2
+3400 1 2
+3401 1 2
+3402 1 2
+3403 1 2
+3404 1 2
+3405 1 2
+3406 1 2
+3407 1 2
+3408 1 2
+3409 1 2
+3410 1 2
+3411 1 2
+3412 1 2
+3413 1 2
+3414 1 2
+3415 1 2
+3416 1 2
+3417 1 2
+3418 1 2
+3419 1 2
+3420 1 2
+3421 1 2
+3422 1 2
+3423 1 2
+3424 1 2
+3425 1 2
+3426 1 2
+3427 1 2
+3428 1 2
+3429 1 2
+3430 1 2
+3431 1 2
+3432 1 2
+3433 1 2
+3434 1 2
+3435 1 2
+3436 1 2
+3437 1 2
+3438 1 2
+3439 1 2
+3440 1 2
+3441 1 2
+3442 1 2
+3443 1 2
+3444 1 2
+3445 1 2
+3446 1 2
+3447 1 2
+3448 1 2
+3449 1 2
+3450 1 2
+3451 1 2
+3452 1 2
+3453 1 2
+3454 1 2
+3455 1 2
+3456 1 2
+3457 1 2
+3458 1 2
+3459 1 2
+3460 1 2
+3461 1 2
+3462 1 2
+3463 1 2
+3464 1 2
+3465 1 2
+3466 1 2
+3467 1 2
+3468 1 2
+3469 1 2
+3470 1 2
+3471 1 2
+3472 1 2
+3473 1 2
+3474 1 2
+3475 1 2
+3476 1 2
+3477 1 2
+3478 1 2
+3479 1 2
+3480 1 2
+3481 1 2
+3482 1 2
+3483 1 2
+3484 1 2
+3485 1 2
+3486 1 2
+3487 1 2
+3488 1 2
+3489 1 2
+3490 1 2
+3491 1 2
+3492 1 2
+3493 1 2
+3494 1 2
+3495 1 2
+3496 1 2
+3497 1 2
+3498 1 2
+3499 1 2
+3500 1 2
+3501 1 2
+3502 1 2
+3503 1 2
+3504 1 2
+3505 1 2
+3506 1 2
+3507 1 2
+3508 1 2
+3509 1 2
+3510 1 2
+3511 1 2
+3512 1 2
+3513 1 2
+3514 1 2
+3515 1 2
+3516 1 2
+3517 1 2
+3518 1 2
+3519 1 2
+3520 1 2
+3521 1 2
+3522 1 2
+3523 1 2
+3524 1 2
+3525 1 2
+3526 1 2
+3527 1 2
+3528 1 2
+3529 1 2
+3530 1 2
+3531 1 2
+3532 1 2
+3533 1 2
+3534 1 2
+3535 1 2
+3536 1 2
+3537 1 2
+3538 1 2
+3539 1 2
+3540 1 2
+3541 1 2
+3542 1 2
+3543 1 2
+3544 1 2
+3545 1 2
+3546 1 2
+3547 1 2
+3548 1 2
+3549 1 2
+3550 1 2
+3551 1 2
+3552 1 2
+3553 1 2
+3554 1 2
+3555 1 2
+3556 1 2
+3557 1 2
+3558 1 2
+3559 1 2
+3560 1 2
+3561 1 2
+3562 1 2
+3563 1 2
+3564 1 2
+3565 1 2
+3566 1 2
+3567 1 2
+3568 1 2
+3569 1 2
+3570 1 2
+3571 1 2
+3572 1 2
+3573 1 2
+3574 1 2
+3575 1 2
+3576 1 2
+3577 1 2
+3578 1 2
+3579 1 2
+3580 1 2
+3581 1 2
+3582 1 2
+3583 1 2
+3584 1 2
+3585 1 2
+3586 1 2
+3587 1 2
+3588 1 2
+3589 1 2
+3590 1 2
+3591 1 2
+3592 1 2
+3593 1 2
+3594 1 2
+3595 1 2
+3596 1 2
+3597 1 2
+3598 1 2
+3599 1 2
+3600 1 2
+3601 1 2
+3602 1 2
+3603 1 2
+3604 1 2
+3605 1 2
+3606 1 2
+3607 1 2
+3608 1 2
+3609 1 2
+3610 1 2
+3611 1 2
+3612 1 2
+3613 1 2
+3614 1 2
+3615 1 2
+3616 1 2
+3617 1 2
+3618 1 2
+3619 1 2
+3620 1 2
+3621 1 2
+3622 1 2
+3623 1 2
+3624 1 2
+3625 1 2
+3626 1 2
+3627 1 2
+3628 1 2
+3629 1 2
+3630 1 2
+3631 1 2
+3632 1 2
+3633 1 2
+3634 1 2
+3635 1 2
+3636 1 2
+3637 1 2
+3638 1 2
+3639 1 2
+3640 1 2
+3641 1 2
+3642 1 2
+3643 1 2
+3644 1 2
+3645 1 2
+3646 1 2
+3647 1 2
+3648 1 2
+3649 1 2
+3650 1 2
+3651 1 2
+3652 1 2
+3653 1 2
+3654 1 2
+3655 1 2
+3656 1 2
+3657 1 2
+3658 1 2
+3659 1 2
+3660 1 2
+3661 1 2
+3662 1 2
+3663 1 2
+3664 1 2
+3665 1 2
+3666 1 2
+3667 1 2
+3668 1 2
+3669 1 2
+3670 1 2
+3671 1 2
+3672 1 2
+3673 1 2
+3674 1 2
+3675 1 2
+3676 1 2
+3677 1 2
+3678 1 2
+3679 1 2
+3680 1 2
+3681 1 2
+3682 1 2
+3683 1 2
+3684 1 2
+3685 1 2
+3686 1 2
+3687 1 2
+3688 1 2
+3689 1 2
+3690 1 2
+3691 1 2
+3692 1 2
+3693 1 2
+3694 1 2
+3695 1 2
+3696 1 2
+3697 1 2
+3698 1 2
+3699 1 2
+3700 1 2
+3701 1 2
+3702 1 2
+3703 1 2
+3704 1 2
+3705 1 2
+3706 1 2
+3707 1 2
+3708 1 2
+3709 1 2
+3710 1 2
+3711 1 2
+3712 1 2
+3713 1 2
+3714 1 2
+3715 1 2
+3716 1 2
+3717 1 2
+3718 1 2
+3719 1 2
+3720 1 2
+3721 1 2
+3722 1 2
+3723 1 2
+3724 1 2
+3725 1 2
+3726 1 2
+3727 1 2
+3728 1 2
+3729 1 2
+3730 1 2
+3731 1 2
+3732 1 2
+3733 1 2
+3734 1 2
+3735 1 2
+3736 1 2
+3737 1 2
+3738 1 2
+3739 1 2
+3740 1 2
+3741 1 2
+3742 1 2
+3743 1 2
+3744 1 2
+3745 1 2
+3746 1 2
+3747 1 2
+3748 1 2
+3749 1 2
+3750 1 2
+3751 1 2
+3752 1 2
+3753 1 2
+3754 1 2
+3755 1 2
+3756 1 2
+3757 1 2
+3758 1 2
+3759 1 2
+3760 1 2
+3761 1 2
+3762 1 2
+3763 1 2
+3764 1 2
+3765 1 2
+3766 1 2
+3767 1 2
+3768 1 2
+3769 1 2
+3770 1 2
+3771 1 2
+3772 1 2
+3773 1 2
+3774 1 2
+3775 1 2
+3776 1 2
+3777 1 2
+3778 1 2
+3779 1 2
+3780 1 2
+3781 1 2
+3782 1 2
+3783 1 2
+3784 1 2
+3785 1 2
+3786 1 2
+3787 1 2
+3788 1 2
+3789 1 2
+3790 1 2
+3791 1 2
+3792 1 2
+3793 1 2
+3794 1 2
+3795 1 2
+3796 1 2
+3797 1 2
+3798 1 2
+3799 1 2
+3800 1 2
+3801 1 2
+3802 1 2
+3803 1 2
+3804 1 2
+3805 1 2
+3806 1 2
+3807 1 2
+3808 1 2
+3809 1 2
+3810 1 2
+3811 1 2
+3812 1 2
+3813 1 2
+3814 1 2
+3815 1 2
+3816 1 2
+3817 1 2
+3818 1 2
+3819 1 2
+3820 1 2
+3821 1 2
+3822 1 2
+3823 1 2
+3824 1 2
+3825 1 2
+3826 1 2
+3827 1 2
+3828 1 2
+3829 1 2
+3830 1 2
+3831 1 2
+3832 1 2
+3833 1 2
+3834 1 2
+3835 1 2
+3836 1 2
+3837 1 2
+3838 1 2
+3839 1 2
+3840 1 2
+3841 1 2
+3842 1 2
+3843 1 2
+3844 1 2
+3845 1 2
+3846 1 2
+3847 1 2
+3848 1 2
+3849 1 2
+3850 1 2
+3851 1 2
+3852 1 2
+3853 1 2
+3854 1 2
+3855 1 2
+3856 1 2
+3857 1 2
+3858 1 2
+3859 1 2
+3860 1 2
+3861 1 2
+3862 1 2
+3863 1 2
+3864 1 2
+3865 1 2
+3866 1 2
+3867 1 2
+3868 1 2
+3869 1 2
+3870 1 2
+3871 1 2
+3872 1 2
+3873 1 2
+3874 1 2
+3875 1 2
+3876 1 2
+3877 1 2
+3878 1 2
+3879 1 2
+3880 1 2
+3881 1 2
+3882 1 2
+3883 1 2
+3884 1 2
+3885 1 2
+3886 1 2
+3887 1 2
+3888 1 2
+3889 1 2
+3890 1 2
+3891 1 2
+3892 1 2
+3893 1 2
+3894 1 2
+3895 1 2
+3896 1 2
+3897 1 2
+3898 1 2
+3899 1 2
+3900 1 2
+3901 1 2
+3902 1 2
+3903 1 2
+3904 1 2
+3905 1 2
+3906 1 2
+3907 1 2
+3908 1 2
+3909 1 2
+3910 1 2
+3911 1 2
+3912 1 2
+3913 1 2
+3914 1 2
+3915 1 2
+3916 1 2
+3917 1 2
+3918 1 2
+3919 1 2
+3920 1 2
+3921 1 2
+3922 1 2
+3923 1 2
+3924 1 2
+3925 1 2
+3926 1 2
+3927 1 2
+3928 1 2
+3929 1 2
+3930 1 2
+3931 1 2
+3932 1 2
+3933 1 2
+3934 1 2
+3935 1 2
+3936 1 2
+3937 1 2
+3938 1 2
+3939 1 2
+3940 1 2
+3941 1 2
+3942 1 2
+3943 1 2
+3944 1 2
+3945 1 2
+3946 1 2
+3947 1 2
+3948 1 2
+3949 1 2
+3950 1 2
+3951 1 2
+3952 1 2
+3953 1 2
+3954 1 2
+3955 1 2
+3956 1 2
+3957 1 2
+3958 1 2
+3959 1 2
+3960 1 2
+3961 1 2
+3962 1 2
+3963 1 2
+3964 1 2
+3965 1 2
+3966 1 2
+3967 1 2
+3968 1 2
+3969 1 2
+3970 1 2
+3971 1 2
+3972 1 2
+3973 1 2
+3974 1 2
+3975 1 2
+3976 1 2
+3977 1 2
+3978 1 2
+3979 1 2
+3980 1 2
+3981 1 2
+3982 1 2
+3983 1 2
+3984 1 2
+3985 1 2
+3986 1 2
+3987 1 2
+3988 1 2
+3989 1 2
+3990 1 2
+3991 1 2
+3992 1 2
+3993 1 2
+3994 1 2
+3995 1 2
+3996 1 2
+3997 1 2
+3998 1 2
+3999 1 2
+4000 1 2
+4001 1 2
+4002 1 2
+4003 1 2
+4004 1 2
+4005 1 2
+4006 1 2
+4007 1 2
+4008 1 2
+4009 1 2
+4010 1 2
+4011 1 2
+4012 1 2
+4013 1 2
+4014 1 2
+4015 1 2
+4016 1 2
+4017 1 2
+4018 1 2
+4019 1 2
+4020 1 2
+4021 1 2
+4022 1 2
+4023 1 2
+4024 1 2
+4025 1 2
+4026 1 2
+4027 1 2
+4028 1 2
+4029 1 2
+4030 1 2
+4031 1 2
+4032 1 2
+4033 1 2
+4034 1 2
+4035 1 2
+4036 1 2
+4037 1 2
+4038 1 2
+4039 1 2
+4040 1 2
+4041 1 2
+4042 1 2
+4043 1 2
+4044 1 2
+4045 1 2
+4046 1 2
+4047 1 2
+4048 1 2
+4049 1 2
+4050 1 2
+4051 1 2
+4052 1 2
+4053 1 2
+4054 1 2
+4055 1 2
+4056 1 2
+4057 1 2
+4058 1 2
+4059 1 2
+4060 1 2
+4061 1 2
+4062 1 2
+4063 1 2
+4064 1 2
+4065 1 2
+4066 1 2
+4067 1 2
+4068 1 2
+4069 1 2
+4070 1 2
+4071 1 2
+4072 1 2
+4073 1 2
+4074 1 2
+4075 1 2
+4076 1 2
+4077 1 2
+4078 1 2
+4079 1 2
+4080 1 2
+4081 1 2
+4082 1 2
+4083 1 2
+4084 1 2
+4085 1 2
+4086 1 2
+4087 1 2
+4088 1 2
+4089 1 2
+4090 1 2
+4091 1 2
+4092 1 2
+4093 1 2
+4094 1 2
+4095 1 2
+4096 1 2
+4097 1 2
+4098 1 2
+4099 1 2
+4100 1 2
+4101 1 2
+4102 1 2
+4103 1 2
+4104 1 2
+4105 1 2
+4106 1 2
+4107 1 2
+4108 1 2
+4109 1 2
+4110 1 2
+4111 1 2
+4112 1 2
+4113 1 2
+4114 1 2
+4115 1 2
+4116 1 2
+4117 1 2
+4118 1 2
+4119 1 2
+4120 1 2
+4121 1 2
+4122 1 2
+4123 1 2
+4124 1 2
+4125 1 2
+4126 1 2
+4127 1 2
+4128 1 2
+4129 1 2
+4130 1 2
+4131 1 2
+4132 1 2
+4133 1 2
+4134 1 2
+4135 1 2
+4136 1 2
+4137 1 2
+4138 1 2
+4139 1 2
+4140 1 2
+4141 1 2
+4142 1 2
+4143 1 2
+4144 1 2
+4145 1 2
+4146 1 2
+4147 1 2
+4148 1 2
+4149 1 2
+4150 1 2
+4151 1 2
+4152 1 2
+4153 1 2
+4154 1 2
+4155 1 2
+4156 1 2
+4157 1 2
+4158 1 2
+4159 1 2
+4160 1 2
+4161 1 2
+4162 1 2
+4163 1 2
+4164 1 2
+4165 1 2
+4166 1 2
+4167 1 2
+4168 1 2
+4169 1 2
+4170 1 2
+4171 1 2
+4172 1 2
+4173 1 2
+4174 1 2
+4175 1 2
+4176 1 2
+4177 1 2
+4178 1 2
+4179 1 2
+4180 1 2
+4181 1 2
+4182 1 2
+4183 1 2
+4184 1 2
+4185 1 2
+4186 1 2
+4187 1 2
+4188 1 2
+4189 1 2
+4190 1 2
+4191 1 2
+4192 1 2
+4193 1 2
+4194 1 2
+4195 1 2
+4196 1 2
+4197 1 2
+4198 1 2
+4199 1 2
+4200 1 2
+4201 1 2
+4202 1 2
+4203 1 2
+4204 1 2
+4205 1 2
+4206 1 2
+4207 1 2
+4208 1 2
+4209 1 2
+4210 1 2
+4211 1 2
+4212 1 2
+4213 1 2
+4214 1 2
+4215 1 2
+4216 1 2
+4217 1 2
+4218 1 2
+4219 1 2
+4220 1 2
+4221 1 2
+4222 1 2
+4223 1 2
+4224 1 2
+4225 1 2
+4226 1 2
+4227 1 2
+4228 1 2
+4229 1 2
+4230 1 2
+4231 1 2
+4232 1 2
+4233 1 2
+4234 1 2
+4235 1 2
+4236 1 2
+4237 1 2
+4238 1 2
+4239 1 2
+4240 1 2
+4241 1 2
+4242 1 2
+4243 1 2
+4244 1 2
+4245 1 2
+4246 1 2
+4247 1 2
+4248 1 2
+4249 1 2
+4250 1 2
+4251 1 2
+4252 1 2
+4253 1 2
+4254 1 2
+4255 1 2
+4256 1 2
+4257 1 2
+4258 1 2
+4259 1 2
+4260 1 2
+4261 1 2
+4262 1 2
+4263 1 2
+4264 1 2
+4265 1 2
+4266 1 2
+4267 1 2
+4268 1 2
+4269 1 2
+4270 1 2
+4271 1 2
+4272 1 2
+4273 1 2
+4274 1 2
+4275 1 2
+4276 1 2
+4277 1 2
+4278 1 2
+4279 1 2
+4280 1 2
+4281 1 2
+4282 1 2
+4283 1 2
+4284 1 2
+4285 1 2
+4286 1 2
+4287 1 2
+4288 1 2
+4289 1 2
+4290 1 2
+4291 1 2
+4292 1 2
+4293 1 2
+4294 1 2
+4295 1 2
+4296 1 2
+4297 1 2
+4298 1 2
+4299 1 2
+4300 1 2
+4301 1 2
+4302 1 2
+4303 1 2
+4304 1 2
+4305 1 2
+4306 1 2
+4307 1 2
+4308 1 2
+4309 1 2
+4310 1 2
+4311 1 2
+4312 1 2
+4313 1 2
+4314 1 2
+4315 1 2
+4316 1 2
+4317 1 2
+4318 1 2
+4319 1 2
+4320 1 2
+4321 1 2
+4322 1 2
+4323 1 2
+4324 1 2
+4325 1 2
+4326 1 2
+4327 1 2
+4328 1 2
+4329 1 2
+4330 1 2
+4331 1 2
+4332 1 2
+4333 1 2
+4334 1 2
+4335 1 2
+4336 1 2
+4337 1 2
+4338 1 2
+4339 1 2
+4340 1 2
+4341 1 2
+4342 1 2
+4343 1 2
+4344 1 2
+4345 1 2
+4346 1 2
+4347 1 2
+4348 1 2
+4349 1 2
+4350 1 2
+4351 1 2
+4352 1 2
+4353 1 2
+4354 1 2
+4355 1 2
+4356 1 2
+4357 1 2
+4358 1 2
+4359 1 2
+4360 1 2
+4361 1 2
+4362 1 2
+4363 1 2
+4364 1 2
+4365 1 2
+4366 1 2
+4367 1 2
+4368 1 2
+4369 1 2
+4370 1 2
+4371 1 2
+4372 1 2
+4373 1 2
+4374 1 2
+4375 1 2
+4376 1 2
+4377 1 2
+4378 1 2
+4379 1 2
+4380 1 2
+4381 1 2
+4382 1 2
+4383 1 2
+4384 1 2
+4385 1 2
+4386 1 2
+4387 1 2
+4388 1 2
+4389 1 2
+4390 1 2
+4391 1 2
+4392 1 2
+4393 1 2
+4394 1 2
+4395 1 2
+4396 1 2
+4397 1 2
+4398 1 2
+4399 1 2
+4400 1 2
+4401 1 2
+4402 1 2
+4403 1 2
+4404 1 2
+4405 1 2
+4406 1 2
+4407 1 2
+4408 1 2
+4409 1 2
+4410 1 2
+4411 1 2
+4412 1 2
+4413 1 2
+4414 1 2
+4415 1 2
+4416 1 2
+4417 1 2
+4418 1 2
+4419 1 2
+4420 1 2
+4421 1 2
+4422 1 2
+4423 1 2
+4424 1 2
+4425 1 2
+4426 1 2
+4427 1 2
+4428 1 2
+4429 1 2
+4430 1 2
+4431 1 2
+4432 1 2
+4433 1 2
+4434 1 2
+4435 1 2
+4436 1 2
+4437 1 2
+4438 1 2
+4439 1 2
+4440 1 2
+4441 1 2
+4442 1 2
+4443 1 2
+4444 1 2
+4445 1 2
+4446 1 2
+4447 1 2
+4448 1 2
+4449 1 2
+4450 1 2
+4451 1 2
+4452 1 2
+4453 1 2
+4454 1 2
+4455 1 2
+4456 1 2
+4457 1 2
+4458 1 2
+4459 1 2
+4460 1 2
+4461 1 2
+4462 1 2
+4463 1 2
+4464 1 2
+4465 1 2
+4466 1 2
+4467 1 2
+4468 1 2
+4469 1 2
+4470 1 2
+4471 1 2
+4472 1 2
+4473 1 2
+4474 1 2
+4475 1 2
+4476 1 2
+4477 1 2
+4478 1 2
+4479 1 2
+4480 1 2
+4481 1 2
+4482 1 2
+4483 1 2
+4484 1 2
+4485 1 2
+4486 1 2
+4487 1 2
+4488 1 2
+4489 1 2
+4490 1 2
+4491 1 2
+4492 1 2
+4493 1 2
+4494 1 2
+4495 1 2
+4496 1 2
+4497 1 2
+4498 1 2
+4499 1 2
+4500 1 2
+4501 1 2
+4502 1 2
+4503 1 2
+4504 1 2
+4505 1 2
+4506 1 2
+4507 1 2
+4508 1 2
+4509 1 2
+4510 1 2
+4511 1 2
+4512 1 2
+4513 1 2
+4514 1 2
+4515 1 2
+4516 1 2
+4517 1 2
+4518 1 2
+4519 1 2
+4520 1 2
+4521 1 2
+4522 1 2
+4523 1 2
+4524 1 2
+4525 1 2
+4526 1 2
+4527 1 2
+4528 1 2
+4529 1 2
+4530 1 2
+4531 1 2
+4532 1 2
+4533 1 2
+4534 1 2
+4535 1 2
+4536 1 2
+4537 1 2
+4538 1 2
+4539 1 2
+4540 1 2
+4541 1 2
+4542 1 2
+4543 1 2
+4544 1 2
+4545 1 2
+4546 1 2
+4547 1 2
+4548 1 2
+4549 1 2
+4550 1 2
+4551 1 2
+4552 1 2
+4553 1 2
+4554 1 2
+4555 1 2
+4556 1 2
+4557 1 2
+4558 1 2
+4559 1 2
+4560 1 2
+4561 1 2
+4562 1 2
+4563 1 2
+4564 1 2
+4565 1 2
+4566 1 2
+4567 1 2
+4568 1 2
+4569 1 2
+4570 1 2
+4571 1 2
+4572 1 2
+4573 1 2
+4574 1 2
+4575 1 2
+4576 1 2
+4577 1 2
+4578 1 2
+4579 1 2
+4580 1 2
+4581 1 2
+4582 1 2
+4583 1 2
+4584 1 2
+4585 1 2
+4586 1 2
+4587 1 2
+4588 1 2
+4589 1 2
+4590 1 2
+4591 1 2
+4592 1 2
+4593 1 2
+4594 1 2
+4595 1 2
+4596 1 2
+4597 1 2
+4598 1 2
+4599 1 2
+4600 1 2
+4601 1 2
+4602 1 2
+4603 1 2
+4604 1 2
+4605 1 2
+4606 1 2
+4607 1 2
+4608 1 2
+4609 1 2
+4610 1 2
+4611 1 2
+4612 1 2
+4613 1 2
+4614 1 2
+4615 1 2
+4616 1 2
+4617 1 2
+4618 1 2
+4619 1 2
+4620 1 2
+4621 1 2
+4622 1 2
+4623 1 2
+4624 1 2
+4625 1 2
+4626 1 2
+4627 1 2
+4628 1 2
+4629 1 2
+4630 1 2
+4631 1 2
+4632 1 2
+4633 1 2
+4634 1 2
+4635 1 2
+4636 1 2
+4637 1 2
+4638 1 2
+4639 1 2
+4640 1 2
+4641 1 2
+4642 1 2
+4643 1 2
+4644 1 2
+4645 1 2
+4646 1 2
+4647 1 2
+4648 1 2
+4649 1 2
+4650 1 2
+4651 1 2
+4652 1 2
+4653 1 2
+4654 1 2
+4655 1 2
+4656 1 2
+4657 1 2
+4658 1 2
+4659 1 2
+4660 1 2
+4661 1 2
+4662 1 2
+4663 1 2
+4664 1 2
+4665 1 2
+4666 1 2
+4667 1 2
+4668 1 2
+4669 1 2
+4670 1 2
+4671 1 2
+4672 1 2
+4673 1 2
+4674 1 2
+4675 1 2
+4676 1 2
+4677 1 2
+4678 1 2
+4679 1 2
+4680 1 2
+4681 1 2
+4682 1 2
+4683 1 2
+4684 1 2
+4685 1 2
+4686 1 2
+4687 1 2
+4688 1 2
+4689 1 2
+4690 1 2
+4691 1 2
+4692 1 2
+4693 1 2
+4694 1 2
+4695 1 2
+4696 1 2
+4697 1 2
+4698 1 2
+4699 1 2
+4700 1 2
+4701 1 2
+4702 1 2
+4703 1 2
+4704 1 2
+4705 1 2
+4706 1 2
+4707 1 2
+4708 1 2
+4709 1 2
+4710 1 2
+4711 1 2
+4712 1 2
+4713 1 2
+4714 1 2
+4715 1 2
+4716 1 2
+4717 1 2
+4718 1 2
+4719 1 2
+4720 1 2
+4721 1 2
+4722 1 2
+4723 1 2
+4724 1 2
+4725 1 2
+4726 1 2
+4727 1 2
+4728 1 2
+4729 1 2
+4730 1 2
+4731 1 2
+4732 1 2
+4733 1 2
+4734 1 2
+4735 1 2
+4736 1 2
+4737 1 2
+4738 1 2
+4739 1 2
+4740 1 2
+4741 1 2
+4742 1 2
+4743 1 2
+4744 1 2
+4745 1 2
+4746 1 2
+4747 1 2
+4748 1 2
+4749 1 2
+4750 1 2
+4751 1 2
+4752 1 2
+4753 1 2
+4754 1 2
+4755 1 2
+4756 1 2
+4757 1 2
+4758 1 2
+4759 1 2
+4760 1 2
+4761 1 2
+4762 1 2
+4763 1 2
+4764 1 2
+4765 1 2
+4766 1 2
+4767 1 2
+4768 1 2
+4769 1 2
+4770 1 2
+4771 1 2
+4772 1 2
+4773 1 2
+4774 1 2
+4775 1 2
+4776 1 2
+4777 1 2
+4778 1 2
+4779 1 2
+4780 1 2
+4781 1 2
+4782 1 2
+4783 1 2
+4784 1 2
+4785 1 2
+4786 1 2
+4787 1 2
+4788 1 2
+4789 1 2
+4790 1 2
+4791 1 2
+4792 1 2
+4793 1 2
+4794 1 2
+4795 1 2
+4796 1 2
+4797 1 2
+4798 1 2
+4799 1 2
+4800 1 2
+4801 1 2
+4802 1 2
+4803 1 2
+4804 1 2
+4805 1 2
+4806 1 2
+4807 1 2
+4808 1 2
+4809 1 2
+4810 1 2
+4811 1 2
+4812 1 2
+4813 1 2
+4814 1 2
+4815 1 2
+4816 1 2
+4817 1 2
+4818 1 2
+4819 1 2
+4820 1 2
+4821 1 2
+4822 1 2
+4823 1 2
+4824 1 2
+4825 1 2
+4826 1 2
+4827 1 2
+4828 1 2
+4829 1 2
+4830 1 2
+4831 1 2
+4832 1 2
+4833 1 2
+4834 1 2
+4835 1 2
+4836 1 2
+4837 1 2
+4838 1 2
+4839 1 2
+4840 1 2
+4841 1 2
+4842 1 2
+4843 1 2
+4844 1 2
+4845 1 2
+4846 1 2
+4847 1 2
+4848 1 2
+4849 1 2
+4850 1 2
+4851 1 2
+4852 1 2
+4853 1 2
+4854 1 2
+4855 1 2
+4856 1 2
+4857 1 2
+4858 1 2
+4859 1 2
+4860 1 2
+4861 1 2
+4862 1 2
+4863 1 2
+4864 1 2
+4865 1 2
+4866 1 2
+4867 1 2
+4868 1 2
+4869 1 2
+4870 1 2
+4871 1 2
+4872 1 2
+4873 1 2
+4874 1 2
+4875 1 2
+4876 1 2
+4877 1 2
+4878 1 2
+4879 1 2
+4880 1 2
+4881 1 2
+4882 1 2
+4883 1 2
+4884 1 2
+4885 1 2
+4886 1 2
+4887 1 2
+4888 1 2
+4889 1 2
+4890 1 2
+4891 1 2
+4892 1 2
+4893 1 2
+4894 1 2
+4895 1 2
+4896 1 2
+4897 1 2
+4898 1 2
+4899 1 2
+4900 1 2
+4901 1 2
+4902 1 2
+4903 1 2
+4904 1 2
+4905 1 2
+4906 1 2
+4907 1 2
+4908 1 2
+4909 1 2
+4910 1 2
+4911 1 2
+4912 1 2
+4913 1 2
+4914 1 2
+4915 1 2
+4916 1 2
+4917 1 2
+4918 1 2
+4919 1 2
+4920 1 2
+4921 1 2
+4922 1 2
+4923 1 2
+4924 1 2
+4925 1 2
+4926 1 2
+4927 1 2
+4928 1 2
+4929 1 2
+4930 1 2
+4931 1 2
+4932 1 2
+4933 1 2
+4934 1 2
+4935 1 2
+4936 1 2
+4937 1 2
+4938 1 2
+4939 1 2
+4940 1 2
+4941 1 2
+4942 1 2
+4943 1 2
+4944 1 2
+4945 1 2
+4946 1 2
+4947 1 2
+4948 1 2
+4949 1 2
+4950 1 2
+4951 1 2
+4952 1 2
+4953 1 2
+4954 1 2
+4955 1 2
+4956 1 2
+4957 1 2
+4958 1 2
+4959 1 2
+4960 1 2
+4961 1 2
+4962 1 2
+4963 1 2
+4964 1 2
+4965 1 2
+4966 1 2
+4967 1 2
+4968 1 2
+4969 1 2
+4970 1 2
+4971 1 2
+4972 1 2
+4973 1 2
+4974 1 2
+4975 1 2
+4976 1 2
+4977 1 2
+4978 1 2
+4979 1 2
+4980 1 2
+4981 1 2
+4982 1 2
+4983 1 2
+4984 1 2
+4985 1 2
+4986 1 2
+4987 1 2
+4988 1 2
+4989 1 2
+4990 1 2
+4991 1 2
+4992 1 2
+4993 1 2
+4994 1 2
+4995 1 2
+4996 1 2
+4997 1 2
+4998 1 2
+4999 1 2
+5000 1 2
+5001 1 2
+5002 1 2
+5003 1 2
+5004 1 2
+5005 1 2
+5006 1 2
+5007 1 2
+5008 1 2
+5009 1 2
+5010 1 2
+5011 1 2
+5012 1 2
+5013 1 2
+5014 1 2
+5015 1 2
+5016 1 2
+5017 1 2
+5018 1 2
+5019 1 2
+5020 1 2
+5021 1 2
+5022 1 2
+5023 1 2
+5024 1 2
+5025 1 2
+5026 1 2
+5027 1 2
+5028 1 2
+5029 1 2
+5030 1 2
+5031 1 2
+5032 1 2
+5033 1 2
+5034 1 2
+5035 1 2
+5036 1 2
+5037 1 2
+5038 1 2
+5039 1 2
+5040 1 2
+5041 1 2
+5042 1 2
+5043 1 2
+5044 1 2
+5045 1 2
+5046 1 2
+5047 1 2
+5048 1 2
+5049 1 2
+5050 1 2
+5051 1 2
+5052 1 2
+5053 1 2
+5054 1 2
+5055 1 2
+5056 1 2
+5057 1 2
+5058 1 2
+5059 1 2
+5060 1 2
+5061 1 2
+5062 1 2
+5063 1 2
+5064 1 2
+5065 1 2
+5066 1 2
+5067 1 2
+5068 1 2
+5069 1 2
+5070 1 2
+5071 1 2
+5072 1 2
+5073 1 2
+5074 1 2
+5075 1 2
+5076 1 2
+5077 1 2
+5078 1 2
+5079 1 2
+5080 1 2
+5081 1 2
+5082 1 2
+5083 1 2
+5084 1 2
+5085 1 2
+5086 1 2
+5087 1 2
+5088 1 2
+5089 1 2
+5090 1 2
+5091 1 2
+5092 1 2
+5093 1 2
+5094 1 2
+5095 1 2
+5096 1 2
+5097 1 2
+5098 1 2
+5099 1 2
+5100 1 2
+5101 1 2
+5102 1 2
+5103 1 2
+5104 1 2
+5105 1 2
+5106 1 2
+5107 1 2
+5108 1 2
+5109 1 2
+5110 1 2
+5111 1 2
+5112 1 2
+5113 1 2
+5114 1 2
+5115 1 2
+5116 1 2
+5117 1 2
+5118 1 2
+5119 1 2
+5120 1 2
+5121 1 2
+5122 1 2
+5123 1 2
+5124 1 2
+5125 1 2
+5126 1 2
+5127 1 2
+5128 1 2
+5129 1 2
+5130 1 2
+5131 1 2
+5132 1 2
+5133 1 2
+5134 1 2
+5135 1 2
+5136 1 2
+5137 1 2
+5138 1 2
+5139 1 2
+5140 1 2
+5141 1 2
+5142 1 2
+5143 1 2
+5144 1 2
+5145 1 2
+5146 1 2
+5147 1 2
+5148 1 2
+5149 1 2
+5150 1 2
+5151 1 2
+5152 1 2
+5153 1 2
+5154 1 2
+5155 1 2
+5156 1 2
+5157 1 2
+5158 1 2
+5159 1 2
+5160 1 2
+5161 1 2
+5162 1 2
+5163 1 2
+5164 1 2
+5165 1 2
+5166 1 2
+5167 1 2
+5168 1 2
+5169 1 2
+5170 1 2
+5171 1 2
+5172 1 2
+5173 1 2
+5174 1 2
+5175 1 2
+5176 1 2
+5177 1 2
+5178 1 2
+5179 1 2
+5180 1 2
+5181 1 2
+5182 1 2
+5183 1 2
+5184 1 2
+5185 1 2
+5186 1 2
+5187 1 2
+5188 1 2
+5189 1 2
+5190 1 2
+5191 1 2
+5192 1 2
+5193 1 2
+5194 1 2
+5195 1 2
+5196 1 2
+5197 1 2
+5198 1 2
+5199 1 2
+5200 1 2
+5201 1 2
+5202 1 2
+5203 1 2
+5204 1 2
+5205 1 2
+5206 1 2
+5207 1 2
+5208 1 2
+5209 1 2
+5210 1 2
+5211 1 2
+5212 1 2
+5213 1 2
+5214 1 2
+5215 1 2
+5216 1 2
+5217 1 2
+5218 1 2
+5219 1 2
+5220 1 2
+5221 1 2
+5222 1 2
+5223 1 2
+5224 1 2
+5225 1 2
+5226 1 2
+5227 1 2
+5228 1 2
+5229 1 2
+5230 1 2
+5231 1 2
+5232 1 2
+5233 1 2
+5234 1 2
+5235 1 2
+5236 1 2
+5237 1 2
+5238 1 2
+5239 1 2
+5240 1 2
+5241 1 2
+5242 1 2
+5243 1 2
+5244 1 2
+5245 1 2
+5246 1 2
+5247 1 2
+5248 1 2
+5249 1 2
+5250 1 2
+5251 1 2
+5252 1 2
+5253 1 2
+5254 1 2
+5255 1 2
+5256 1 2
+5257 1 2
+5258 1 2
+5259 1 2
+5260 1 2
+5261 1 2
+5262 1 2
+5263 1 2
+5264 1 2
+5265 1 2
+5266 1 2
+5267 1 2
+5268 1 2
+5269 1 2
+5270 1 2
+5271 1 2
+5272 1 2
+5273 1 2
+5274 1 2
+5275 1 2
+5276 1 2
+5277 1 2
+5278 1 2
+5279 1 2
+5280 1 2
+5281 1 2
+5282 1 2
+5283 1 2
+5284 1 2
+5285 1 2
+5286 1 2
+5287 1 2
+5288 1 2
+5289 1 2
+5290 1 2
+5291 1 2
+5292 1 2
+5293 1 2
+5294 1 2
+5295 1 2
+5296 1 2
+5297 1 2
+5298 1 2
+5299 1 2
+5300 1 2
+5301 1 2
+5302 1 2
+5303 1 2
+5304 1 2
+5305 1 2
+5306 1 2
+5307 1 2
+5308 1 2
+5309 1 2
+5310 1 2
+5311 1 2
+5312 1 2
+5313 1 2
+5314 1 2
+5315 1 2
+5316 1 2
+5317 1 2
+5318 1 2
+5319 1 2
+5320 1 2
+5321 1 2
+5322 1 2
+5323 1 2
+5324 1 2
+5325 1 2
+5326 1 2
+5327 1 2
+5328 1 2
+5329 1 2
+5330 1 2
+5331 1 2
+5332 1 2
+5333 1 2
+5334 1 2
+5335 1 2
+5336 1 2
+5337 1 2
+5338 1 2
+5339 1 2
+5340 1 2
+5341 1 2
+5342 1 2
+5343 1 2
+5344 1 2
+5345 1 2
+5346 1 2
+5347 1 2
+5348 1 2
+5349 1 2
+5350 1 2
+5351 1 2
+5352 1 2
+5353 1 2
+5354 1 2
+5355 1 2
+5356 1 2
+5357 1 2
+5358 1 2
+5359 1 2
+5360 1 2
+5361 1 2
+5362 1 2
+5363 1 2
+5364 1 2
+5365 1 2
+5366 1 2
+5367 1 2
+5368 1 2
+5369 1 2
+5370 1 2
+5371 1 2
+5372 1 2
+5373 1 2
+5374 1 2
+5375 1 2
+5376 1 2
+5377 1 2
+5378 1 2
+5379 1 2
+5380 1 2
+5381 1 2
+5382 1 2
+5383 1 2
+5384 1 2
+5385 1 2
+5386 1 2
+5387 1 2
+5388 1 2
+5389 1 2
+5390 1 2
+5391 1 2
+5392 1 2
+5393 1 2
+5394 1 2
+5395 1 2
+5396 1 2
+5397 1 2
+5398 1 2
+5399 1 2
+5400 1 2
+5401 1 2
+5402 1 2
+5403 1 2
+5404 1 2
+5405 1 2
+5406 1 2
+5407 1 2
+5408 1 2
+5409 1 2
+5410 1 2
+5411 1 2
+5412 1 2
+5413 1 2
+5414 1 2
+5415 1 2
+5416 1 2
+5417 1 2
+5418 1 2
+5419 1 2
+5420 1 2
+5421 1 2
+5422 1 2
+5423 1 2
+5424 1 2
+5425 1 2
+5426 1 2
+5427 1 2
+5428 1 2
+5429 1 2
+5430 1 2
+5431 1 2
+5432 1 2
+5433 1 2
+5434 1 2
+5435 1 2
+5436 1 2
+5437 1 2
+5438 1 2
+5439 1 2
+5440 1 2
+5441 1 2
+5442 1 2
+5443 1 2
+5444 1 2
+5445 1 2
+5446 1 2
+5447 1 2
+5448 1 2
+5449 1 2
+5450 1 2
+5451 1 2
+5452 1 2
+5453 1 2
+5454 1 2
+5455 1 2
+5456 1 2
+5457 1 2
+5458 1 2
+5459 1 2
+5460 1 2
+5461 1 2
+5462 1 2
+5463 1 2
+5464 1 2
+5465 1 2
+5466 1 2
+5467 1 2
+5468 1 2
+5469 1 2
+5470 1 2
+5471 1 2
+5472 1 2
+5473 1 2
+5474 1 2
+5475 1 2
+5476 1 2
+5477 1 2
+5478 1 2
+5479 1 2
+5480 1 2
+5481 1 2
+5482 1 2
+5483 1 2
+5484 1 2
+5485 1 2
+5486 1 2
+5487 1 2
+5488 1 2
+5489 1 2
+5490 1 2
+5491 1 2
+5492 1 2
+5493 1 2
+5494 1 2
+5495 1 2
+5496 1 2
+5497 1 2
+5498 1 2
+5499 1 2
+5500 1 2
+5501 1 2
+5502 1 2
+5503 1 2
+5504 1 2
+5505 1 2
+5506 1 2
+5507 1 2
+5508 1 2
+5509 1 2
+5510 1 2
+5511 1 2
+5512 1 2
+5513 1 2
+5514 1 2
+5515 1 2
+5516 1 2
+5517 1 2
+5518 1 2
+5519 1 2
+5520 1 2
+5521 1 2
+5522 1 2
+5523 1 2
+5524 1 2
+5525 1 2
+5526 1 2
+5527 1 2
+5528 1 2
+5529 1 2
+5530 1 2
+5531 1 2
+5532 1 2
+5533 1 2
+5534 1 2
+5535 1 2
+5536 1 2
+5537 1 2
+5538 1 2
+5539 1 2
+5540 1 2
+5541 1 2
+5542 1 2
+5543 1 2
+5544 1 2
+5545 1 2
+5546 1 2
+5547 1 2
+5548 1 2
+5549 1 2
+5550 1 2
+5551 1 2
+5552 1 2
+5553 1 2
+5554 1 2
+5555 1 2
+5556 1 2
+5557 1 2
+5558 1 2
+5559 1 2
+5560 1 2
+5561 1 2
+5562 1 2
+5563 1 2
+5564 1 2
+5565 1 2
+5566 1 2
+5567 1 2
+5568 1 2
+5569 1 2
+5570 1 2
+5571 1 2
+5572 1 2
+5573 1 2
+5574 1 2
+5575 1 2
+5576 1 2
+5577 1 2
+5578 1 2
+5579 1 2
+5580 1 2
+5581 1 2
+5582 1 2
+5583 1 2
+5584 1 2
+5585 1 2
+5586 1 2
+5587 1 2
+5588 1 2
+5589 1 2
+5590 1 2
+5591 1 2
+5592 1 2
+5593 1 2
+5594 1 2
+5595 1 2
+5596 1 2
+5597 1 2
+5598 1 2
+5599 1 2
+5600 1 2
+5601 1 2
+5602 1 2
+5603 1 2
+5604 1 2
+5605 1 2
+5606 1 2
+5607 1 2
+5608 1 2
+5609 1 2
+5610 1 2
+5611 1 2
+5612 1 2
+5613 1 2
+5614 1 2
+5615 1 2
+5616 1 2
+5617 1 2
+5618 1 2
+5619 1 2
+5620 1 2
+5621 1 2
+5622 1 2
+5623 1 2
+5624 1 2
+5625 1 2
+5626 1 2
+5627 1 2
+5628 1 2
+5629 1 2
+5630 1 2
+5631 1 2
+5632 1 2
+5633 1 2
+5634 1 2
+5635 1 2
+5636 1 2
+5637 1 2
+5638 1 2
+5639 1 2
+5640 1 2
+5641 1 2
+5642 1 2
+5643 1 2
+5644 1 2
+5645 1 2
+5646 1 2
+5647 1 2
+5648 1 2
+5649 1 2
+5650 1 2
+5651 1 2
+5652 1 2
+5653 1 2
+5654 1 2
+5655 1 2
+5656 1 2
+5657 1 2
+5658 1 2
+5659 1 2
+5660 1 2
+5661 1 2
+5662 1 2
+5663 1 2
+5664 1 2
+5665 1 2
+5666 1 2
+5667 1 2
+5668 1 2
+5669 1 2
+5670 1 2
+5671 1 2
+5672 1 2
+5673 1 2
+5674 1 2
+5675 1 2
+5676 1 2
+5677 1 2
+5678 1 2
+5679 1 2
+5680 1 2
+5681 1 2
+5682 1 2
+5683 1 2
+5684 1 2
+5685 1 2
+5686 1 2
+5687 1 2
+5688 1 2
+5689 1 2
+5690 1 2
+5691 1 2
+5692 1 2
+5693 1 2
+5694 1 2
+5695 1 2
+5696 1 2
+5697 1 2
+5698 1 2
+5699 1 2
+5700 1 2
+5701 1 2
+5702 1 2
+5703 1 2
+5704 1 2
+5705 1 2
+5706 1 2
+5707 1 2
+5708 1 2
+5709 1 2
+5710 1 2
+5711 1 2
+5712 1 2
+5713 1 2
+5714 1 2
+5715 1 2
+5716 1 2
+5717 1 2
+5718 1 2
+5719 1 2
+5720 1 2
+5721 1 2
+5722 1 2
+5723 1 2
+5724 1 2
+5725 1 2
+5726 1 2
+5727 1 2
+5728 1 2
+5729 1 2
+5730 1 2
+5731 1 2
+5732 1 2
+5733 1 2
+5734 1 2
+5735 1 2
+5736 1 2
+5737 1 2
+5738 1 2
+5739 1 2
+5740 1 2
+5741 1 2
+5742 1 2
+5743 1 2
+5744 1 2
+5745 1 2
+5746 1 2
+5747 1 2
+5748 1 2
+5749 1 2
+5750 1 2
+5751 1 2
+5752 1 2
+5753 1 2
+5754 1 2
+5755 1 2
+5756 1 2
+5757 1 2
+5758 1 2
+5759 1 2
+5760 1 2
+5761 1 2
+5762 1 2
+5763 1 2
+5764 1 2
+5765 1 2
+5766 1 2
+5767 1 2
+5768 1 2
+5769 1 2
+5770 1 2
+5771 1 2
+5772 1 2
+5773 1 2
+5774 1 2
+5775 1 2
+5776 1 2
+5777 1 2
+5778 1 2
+5779 1 2
+5780 1 2
+5781 1 2
+5782 1 2
+5783 1 2
+5784 1 2
+5785 1 2
+5786 1 2
+5787 1 2
+5788 1 2
+5789 1 2
+5790 1 2
+5791 1 2
+5792 1 2
+5793 1 2
+5794 1 2
+5795 1 2
+5796 1 2
+5797 1 2
+5798 1 2
+5799 1 2
+5800 1 2
+5801 1 2
+5802 1 2
+5803 1 2
+5804 1 2
+5805 1 2
+5806 1 2
+5807 1 2
+5808 1 2
+5809 1 2
+5810 1 2
+5811 1 2
+5812 1 2
+5813 1 2
+5814 1 2
+5815 1 2
+5816 1 2
+5817 1 2
+5818 1 2
+5819 1 2
+5820 1 2
+5821 1 2
+5822 1 2
+5823 1 2
+5824 1 2
+5825 1 2
+5826 1 2
+5827 1 2
+5828 1 2
+5829 1 2
+5830 1 2
+5831 1 2
+5832 1 2
+5833 1 2
+5834 1 2
+5835 1 2
+5836 1 2
+5837 1 2
+5838 1 2
+5839 1 2
+5840 1 2
+5841 1 2
+5842 1 2
+5843 1 2
+5844 1 2
+5845 1 2
+5846 1 2
+5847 1 2
+5848 1 2
+5849 1 2
+5850 1 2
+5851 1 2
+5852 1 2
+5853 1 2
+5854 1 2
+5855 1 2
+5856 1 2
+5857 1 2
+5858 1 2
+5859 1 2
+5860 1 2
+5861 1 2
+5862 1 2
+5863 1 2
+5864 1 2
+5865 1 2
+5866 1 2
+5867 1 2
+5868 1 2
+5869 1 2
+5870 1 2
+5871 1 2
+5872 1 2
+5873 1 2
+5874 1 2
+5875 1 2
+5876 1 2
+5877 1 2
+5878 1 2
+5879 1 2
+5880 1 2
+5881 1 2
+5882 1 2
+5883 1 2
+5884 1 2
+5885 1 2
+5886 1 2
+5887 1 2
+5888 1 2
+5889 1 2
+5890 1 2
+5891 1 2
+5892 1 2
+5893 1 2
+5894 1 2
+5895 1 2
+5896 1 2
+5897 1 2
+5898 1 2
+5899 1 2
+5900 1 2
+5901 1 2
+5902 1 2
+5903 1 2
+5904 1 2
+5905 1 2
+5906 1 2
+5907 1 2
+5908 1 2
+5909 1 2
+5910 1 2
+5911 1 2
+5912 1 2
+5913 1 2
+5914 1 2
+5915 1 2
+5916 1 2
+5917 1 2
+5918 1 2
+5919 1 2
+5920 1 2
+5921 1 2
+5922 1 2
+5923 1 2
+5924 1 2
+5925 1 2
+5926 1 2
+5927 1 2
+5928 1 2
+5929 1 2
+5930 1 2
+5931 1 2
+5932 1 2
+5933 1 2
+5934 1 2
+5935 1 2
+5936 1 2
+5937 1 2
+5938 1 2
+5939 1 2
+5940 1 2
+5941 1 2
+5942 1 2
+5943 1 2
+5944 1 2
+5945 1 2
+5946 1 2
+5947 1 2
+5948 1 2
+5949 1 2
+5950 1 2
+5951 1 2
+5952 1 2
+5953 1 2
+5954 1 2
+5955 1 2
+5956 1 2
+5957 1 2
+5958 1 2
+5959 1 2
+5960 1 2
+5961 1 2
+5962 1 2
+5963 1 2
+5964 1 2
+5965 1 2
+5966 1 2
+5967 1 2
+5968 1 2
+5969 1 2
+5970 1 2
+5971 1 2
+5972 1 2
+5973 1 2
+5974 1 2
+5975 1 2
+5976 1 2
+5977 1 2
+5978 1 2
+5979 1 2
+5980 1 2
+5981 1 2
+5982 1 2
+5983 1 2
+5984 1 2
+5985 1 2
+5986 1 2
+5987 1 2
+5988 1 2
+5989 1 2
+5990 1 2
+5991 1 2
+5992 1 2
+5993 1 2
+5994 1 2
+5995 1 2
+5996 1 2
+5997 1 2
+5998 1 2
+5999 1 2
+6000 1 2
+6001 1 2
+6002 1 2
+6003 1 2
+6004 1 2
+6005 1 2
+6006 1 2
+6007 1 2
+6008 1 2
+6009 1 2
+6010 1 2
+6011 1 2
+6012 1 2
+6013 1 2
+6014 1 2
+6015 1 2
+6016 1 2
+6017 1 2
+6018 1 2
+6019 1 2
+6020 1 2
+6021 1 2
+6022 1 2
+6023 1 2
+6024 1 2
+6025 1 2
+6026 1 2
+6027 1 2
+6028 1 2
+6029 1 2
+6030 1 2
+6031 1 2
+6032 1 2
+6033 1 2
+6034 1 2
+6035 1 2
+6036 1 2
+6037 1 2
+6038 1 2
+6039 1 2
+6040 1 2
+6041 1 2
+6042 1 2
+6043 1 2
+6044 1 2
+6045 1 2
+6046 1 2
+6047 1 2
+6048 1 2
+6049 1 2
+6050 1 2
+6051 1 2
+6052 1 2
+6053 1 2
+6054 1 2
+6055 1 2
+6056 1 2
+6057 1 2
+6058 1 2
+6059 1 2
+6060 1 2
+6061 1 2
+6062 1 2
+6063 1 2
+6064 1 2
+6065 1 2
+6066 1 2
+6067 1 2
+6068 1 2
+6069 1 2
+6070 1 2
+6071 1 2
+6072 1 2
+6073 1 2
+6074 1 2
+6075 1 2
+6076 1 2
+6077 1 2
+6078 1 2
+6079 1 2
+6080 1 2
+6081 1 2
+6082 1 2
+6083 1 2
+6084 1 2
+6085 1 2
+6086 1 2
+6087 1 2
+6088 1 2
+6089 1 2
+6090 1 2
+6091 1 2
+6092 1 2
+6093 1 2
+6094 1 2
+6095 1 2
+6096 1 2
+6097 1 2
+6098 1 2
+6099 1 2
+6100 1 2
+6101 1 2
+6102 1 2
+6103 1 2
+6104 1 2
+6105 1 2
+6106 1 2
+6107 1 2
+6108 1 2
+6109 1 2
+6110 1 2
+6111 1 2
+6112 1 2
+6113 1 2
+6114 1 2
+6115 1 2
+6116 1 2
+6117 1 2
+6118 1 2
+6119 1 2
+6120 1 2
+6121 1 2
+6122 1 2
+6123 1 2
+6124 1 2
+6125 1 2
+6126 1 2
+6127 1 2
+6128 1 2
+6129 1 2
+6130 1 2
+6131 1 2
+6132 1 2
+6133 1 2
+6134 1 2
+6135 1 2
+6136 1 2
+6137 1 2
+6138 1 2
+6139 1 2
+6140 1 2
+6141 1 2
+6142 1 2
+6143 1 2
+6144 1 2
+6145 1 2
+6146 1 2
+6147 1 2
+6148 1 2
+6149 1 2
+6150 1 2
+6151 1 2
+6152 1 2
+6153 1 2
+6154 1 2
+6155 1 2
+6156 1 2
+6157 1 2
+6158 1 2
+6159 1 2
+6160 1 2
+6161 1 2
+6162 1 2
+6163 1 2
+6164 1 2
+6165 1 2
+6166 1 2
+6167 1 2
+6168 1 2
+6169 1 2
+6170 1 2
+6171 1 2
+6172 1 2
+6173 1 2
+6174 1 2
+6175 1 2
+6176 1 2
+6177 1 2
+6178 1 2
+6179 1 2
+6180 1 2
+6181 1 2
+6182 1 2
+6183 1 2
+6184 1 2
+6185 1 2
+6186 1 2
+6187 1 2
+6188 1 2
+6189 1 2
+6190 1 2
+6191 1 2
+6192 1 2
+6193 1 2
+6194 1 2
+6195 1 2
+6196 1 2
+6197 1 2
+6198 1 2
+6199 1 2
+6200 1 2
+6201 1 2
+6202 1 2
+6203 1 2
+6204 1 2
+6205 1 2
+6206 1 2
+6207 1 2
+6208 1 2
+6209 1 2
+6210 1 2
+6211 1 2
+6212 1 2
+6213 1 2
+6214 1 2
+6215 1 2
+6216 1 2
+6217 1 2
+6218 1 2
+6219 1 2
+6220 1 2
+6221 1 2
+6222 1 2
+6223 1 2
+6224 1 2
+6225 1 2
+6226 1 2
+6227 1 2
+6228 1 2
+6229 1 2
+6230 1 2
+6231 1 2
+6232 1 2
+6233 1 2
+6234 1 2
+6235 1 2
+6236 1 2
+6237 1 2
+6238 1 2
+6239 1 2
+6240 1 2
+6241 1 2
+6242 1 2
+6243 1 2
+6244 1 2
+6245 1 2
+6246 1 2
+6247 1 2
+6248 1 2
+6249 1 2
+6250 1 2
+6251 1 2
+6252 1 2
+6253 1 2
+6254 1 2
+6255 1 2
+6256 1 2
+6257 1 2
+6258 1 2
+6259 1 2
+6260 1 2
+6261 1 2
+6262 1 2
+6263 1 2
+6264 1 2
+6265 1 2
+6266 1 2
+6267 1 2
+6268 1 2
+6269 1 2
+6270 1 2
+6271 1 2
+6272 1 2
+6273 1 2
+6274 1 2
+6275 1 2
+6276 1 2
+6277 1 2
+6278 1 2
+6279 1 2
+6280 1 2
+6281 1 2
+6282 1 2
+6283 1 2
+6284 1 2
+6285 1 2
+6286 1 2
+6287 1 2
+6288 1 2
+6289 1 2
+6290 1 2
+6291 1 2
+6292 1 2
+6293 1 2
+6294 1 2
+6295 1 2
+6296 1 2
+6297 1 2
+6298 1 2
+6299 1 2
+6300 1 2
+6301 1 2
+6302 1 2
+6303 1 2
+6304 1 2
+6305 1 2
+6306 1 2
+6307 1 2
+6308 1 2
+6309 1 2
+6310 1 2
+6311 1 2
+6312 1 2
+6313 1 2
+6314 1 2
+6315 1 2
+6316 1 2
+6317 1 2
+6318 1 2
+6319 1 2
+6320 1 2
+6321 1 2
+6322 1 2
+6323 1 2
+6324 1 2
+6325 1 2
+6326 1 2
+6327 1 2
+6328 1 2
+6329 1 2
+6330 1 2
+6331 1 2
+6332 1 2
+6333 1 2
+6334 1 2
+6335 1 2
+6336 1 2
+6337 1 2
+6338 1 2
+6339 1 2
+6340 1 2
+6341 1 2
+6342 1 2
+6343 1 2
+6344 1 2
+6345 1 2
+6346 1 2
+6347 1 2
+6348 1 2
+6349 1 2
+6350 1 2
+6351 1 2
+6352 1 2
+6353 1 2
+6354 1 2
+6355 1 2
+6356 1 2
+6357 1 2
+6358 1 2
+6359 1 2
+6360 1 2
+6361 1 2
+6362 1 2
+6363 1 2
+6364 1 2
+6365 1 2
+6366 1 2
+6367 1 2
+6368 1 2
+6369 1 2
+6370 1 2
+6371 1 2
+6372 1 2
+6373 1 2
+6374 1 2
+6375 1 2
+6376 1 2
+6377 1 2
+6378 1 2
+6379 1 2
+6380 1 2
+6381 1 2
+6382 1 2
+6383 1 2
+6384 1 2
+6385 1 2
+6386 1 2
+6387 1 2
+6388 1 2
+6389 1 2
+6390 1 2
+6391 1 2
+6392 1 2
+6393 1 2
+6394 1 2
+6395 1 2
+6396 1 2
+6397 1 2
+6398 1 2
+6399 1 2
+6400 1 2
+6401 1 2
+6402 1 2
+6403 1 2
+6404 1 2
+6405 1 2
+6406 1 2
+6407 1 2
+6408 1 2
+6409 1 2
+6410 1 2
+6411 1 2
+6412 1 2
+6413 1 2
+6414 1 2
+6415 1 2
+6416 1 2
+6417 1 2
+6418 1 2
+6419 1 2
+6420 1 2
+6421 1 2
+6422 1 2
+6423 1 2
+6424 1 2
+6425 1 2
+6426 1 2
+6427 1 2
+6428 1 2
+6429 1 2
+6430 1 2
+6431 1 2
+6432 1 2
+6433 1 2
+6434 1 2
+6435 1 2
+6436 1 2
+6437 1 2
+6438 1 2
+6439 1 2
+6440 1 2
+6441 1 2
+6442 1 2
+6443 1 2
+6444 1 2
+6445 1 2
+6446 1 2
+6447 1 2
+6448 1 2
+6449 1 2
+6450 1 2
+6451 1 2
+6452 1 2
+6453 1 2
+6454 1 2
+6455 1 2
+6456 1 2
+6457 1 2
+6458 1 2
+6459 1 2
+6460 1 2
+6461 1 2
+6462 1 2
+6463 1 2
+6464 1 2
+6465 1 2
+6466 1 2
+6467 1 2
+6468 1 2
+6469 1 2
+6470 1 2
+6471 1 2
+6472 1 2
+6473 1 2
+6474 1 2
+6475 1 2
+6476 1 2
+6477 1 2
+6478 1 2
+6479 1 2
+6480 1 2
+6481 1 2
+6482 1 2
+6483 1 2
+6484 1 2
+6485 1 2
+6486 1 2
+6487 1 2
+6488 1 2
+6489 1 2
+6490 1 2
+6491 1 2
+6492 1 2
+6493 1 2
+6494 1 2
+6495 1 2
+6496 1 2
+6497 1 2
+6498 1 2
+6499 1 2
+6500 1 2
+6501 1 2
+6502 1 2
+6503 1 2
+6504 1 2
+6505 1 2
+6506 1 2
+6507 1 2
+6508 1 2
+6509 1 2
+6510 1 2
+6511 1 2
+6512 1 2
+6513 1 2
+6514 1 2
+6515 1 2
+6516 1 2
+6517 1 2
+6518 1 2
+6519 1 2
+6520 1 2
+6521 1 2
+6522 1 2
+6523 1 2
+6524 1 2
+6525 1 2
+6526 1 2
+6527 1 2
+6528 1 2
+6529 1 2
+6530 1 2
+6531 1 2
+6532 1 2
+6533 1 2
+6534 1 2
+6535 1 2
+6536 1 2
+6537 1 2
+6538 1 2
+6539 1 2
+6540 1 2
+6541 1 2
+6542 1 2
+6543 1 2
+6544 1 2
+6545 1 2
+6546 1 2
+6547 1 2
+6548 1 2
+6549 1 2
+6550 1 2
+6551 1 2
+6552 1 2
+6553 1 2
+6554 1 2
+6555 1 2
+6556 1 2
+6557 1 2
+6558 1 2
+6559 1 2
+6560 1 2
+6561 1 2
+6562 1 2
+6563 1 2
+6564 1 2
+6565 1 2
+6566 1 2
+6567 1 2
+6568 1 2
+6569 1 2
+6570 1 2
+6571 1 2
+6572 1 2
+6573 1 2
+6574 1 2
+6575 1 2
+6576 1 2
+6577 1 2
+6578 1 2
+6579 1 2
+6580 1 2
+6581 1 2
+6582 1 2
+6583 1 2
+6584 1 2
+6585 1 2
+6586 1 2
+6587 1 2
+6588 1 2
+6589 1 2
+6590 1 2
+6591 1 2
+6592 1 2
+6593 1 2
+6594 1 2
+6595 1 2
+6596 1 2
+6597 1 2
+6598 1 2
+6599 1 2
+6600 1 2
+6601 1 2
+6602 1 2
+6603 1 2
+6604 1 2
+6605 1 2
+6606 1 2
+6607 1 2
+6608 1 2
+6609 1 2
+6610 1 2
+6611 1 2
+6612 1 2
+6613 1 2
+6614 1 2
+6615 1 2
+6616 1 2
+6617 1 2
+6618 1 2
+6619 1 2
+6620 1 2
+6621 1 2
+6622 1 2
+6623 1 2
+6624 1 2
+6625 1 2
+6626 1 2
+6627 1 2
+6628 1 2
+6629 1 2
+6630 1 2
+6631 1 2
+6632 1 2
+6633 1 2
+6634 1 2
+6635 1 2
+6636 1 2
+6637 1 2
+6638 1 2
+6639 1 2
+6640 1 2
+6641 1 2
+6642 1 2
+6643 1 2
+6644 1 2
+6645 1 2
+6646 1 2
+6647 1 2
+6648 1 2
+6649 1 2
+6650 1 2
+6651 1 2
+6652 1 2
+6653 1 2
+6654 1 2
+6655 1 2
+6656 1 2
+6657 1 2
+6658 1 2
+6659 1 2
+6660 1 2
+6661 1 2
+6662 1 2
+6663 1 2
+6664 1 2
+6665 1 2
+6666 1 2
+6667 1 2
+6668 1 2
+6669 1 2
+6670 1 2
+6671 1 2
+6672 1 2
+6673 1 2
+6674 1 2
+6675 1 2
+6676 1 2
+6677 1 2
+6678 1 2
+6679 1 2
+6680 1 2
+6681 1 2
+6682 1 2
+6683 1 2
+6684 1 2
+6685 1 2
+6686 1 2
+6687 1 2
+6688 1 2
+6689 1 2
+6690 1 2
+6691 1 2
+6692 1 2
+6693 1 2
+6694 1 2
+6695 1 2
+6696 1 2
+6697 1 2
+6698 1 2
+6699 1 2
+6700 1 2
+6701 1 2
+6702 1 2
+6703 1 2
+6704 1 2
+6705 1 2
+6706 1 2
+6707 1 2
+6708 1 2
+6709 1 2
+6710 1 2
+6711 1 2
+6712 1 2
+6713 1 2
+6714 1 2
+6715 1 2
+6716 1 2
+6717 1 2
+6718 1 2
+6719 1 2
+6720 1 2
+6721 1 2
+6722 1 2
+6723 1 2
+6724 1 2
+6725 1 2
+6726 1 2
+6727 1 2
+6728 1 2
+6729 1 2
+6730 1 2
+6731 1 2
+6732 1 2
+6733 1 2
+6734 1 2
+6735 1 2
+6736 1 2
+6737 1 2
+6738 1 2
+6739 1 2
+6740 1 2
+6741 1 2
+6742 1 2
+6743 1 2
+6744 1 2
+6745 1 2
+6746 1 2
+6747 1 2
+6748 1 2
+6749 1 2
+6750 1 2
+6751 1 2
+6752 1 2
+6753 1 2
+6754 1 2
+6755 1 2
+6756 1 2
+6757 1 2
+6758 1 2
+6759 1 2
+6760 1 2
+6761 1 2
+6762 1 2
+6763 1 2
+6764 1 2
+6765 1 2
+6766 1 2
+6767 1 2
+6768 1 2
+6769 1 2
+6770 1 2
+6771 1 2
+6772 1 2
+6773 1 2
+6774 1 2
+6775 1 2
+6776 1 2
+6777 1 2
+6778 1 2
+6779 1 2
+6780 1 2
+6781 1 2
+6782 1 2
+6783 1 2
+6784 1 2
+6785 1 2
+6786 1 2
+6787 1 2
+6788 1 2
+6789 1 2
+6790 1 2
+6791 1 2
+6792 1 2
+6793 1 2
+6794 1 2
+6795 1 2
+6796 1 2
+6797 1 2
+6798 1 2
+6799 1 2
+6800 1 2
+6801 1 2
+6802 1 2
+6803 1 2
+6804 1 2
+6805 1 2
+6806 1 2
+6807 1 2
+6808 1 2
+6809 1 2
+6810 1 2
+6811 1 2
+6812 1 2
+6813 1 2
+6814 1 2
+6815 1 2
+6816 1 2
+6817 1 2
+6818 1 2
+6819 1 2
+6820 1 2
+6821 1 2
+6822 1 2
+6823 1 2
+6824 1 2
+6825 1 2
+6826 1 2
+6827 1 2
+6828 1 2
+6829 1 2
+6830 1 2
+6831 1 2
+6832 1 2
+6833 1 2
+6834 1 2
+6835 1 2
+6836 1 2
+6837 1 2
+6838 1 2
+6839 1 2
+6840 1 2
+6841 1 2
+6842 1 2
+6843 1 2
+6844 1 2
+6845 1 2
+6846 1 2
+6847 1 2
+6848 1 2
+6849 1 2
+6850 1 2
+6851 1 2
+6852 1 2
+6853 1 2
+6854 1 2
+6855 1 2
+6856 1 2
+6857 1 2
+6858 1 2
+6859 1 2
+6860 1 2
+6861 1 2
+6862 1 2
+6863 1 2
+6864 1 2
+6865 1 2
+6866 1 2
+6867 1 2
+6868 1 2
+6869 1 2
+6870 1 2
+6871 1 2
+6872 1 2
+6873 1 2
+6874 1 2
+6875 1 2
+6876 1 2
+6877 1 2
+6878 1 2
+6879 1 2
+6880 1 2
+6881 1 2
+6882 1 2
+6883 1 2
+6884 1 2
+6885 1 2
+6886 1 2
+6887 1 2
+6888 1 2
+6889 1 2
+6890 1 2
+6891 1 2
+6892 1 2
+6893 1 2
+6894 1 2
+6895 1 2
+6896 1 2
+6897 1 2
+6898 1 2
+6899 1 2
+6900 1 2
+6901 1 2
+6902 1 2
+6903 1 2
+6904 1 2
+6905 1 2
+6906 1 2
+6907 1 2
+6908 1 2
+6909 1 2
+6910 1 2
+6911 1 2
+6912 1 2
+6913 1 2
+6914 1 2
+6915 1 2
+6916 1 2
+6917 1 2
+6918 1 2
+6919 1 2
+6920 1 2
+6921 1 2
+6922 1 2
+6923 1 2
+6924 1 2
+6925 1 2
+6926 1 2
+6927 1 2
+6928 1 2
+6929 1 2
+6930 1 2
+6931 1 2
+6932 1 2
+6933 1 2
+6934 1 2
+6935 1 2
+6936 1 2
+6937 1 2
+6938 1 2
+6939 1 2
+6940 1 2
+6941 1 2
+6942 1 2
+6943 1 2
+6944 1 2
+6945 1 2
+6946 1 2
+6947 1 2
+6948 1 2
+6949 1 2
+6950 1 2
+6951 1 2
+6952 1 2
+6953 1 2
+6954 1 2
+6955 1 2
+6956 1 2
+6957 1 2
+6958 1 2
+6959 1 2
+6960 1 2
+6961 1 2
+6962 1 2
+6963 1 2
+6964 1 2
+6965 1 2
+6966 1 2
+6967 1 2
+6968 1 2
+6969 1 2
+6970 1 2
+6971 1 2
+6972 1 2
+6973 1 2
+6974 1 2
+6975 1 2
+6976 1 2
+6977 1 2
+6978 1 2
+6979 1 2
+6980 1 2
+6981 1 2
+6982 1 2
+6983 1 2
+6984 1 2
+6985 1 2
+6986 1 2
+6987 1 2
+6988 1 2
+6989 1 2
+6990 1 2
+6991 1 2
+6992 1 2
+6993 1 2
+6994 1 2
+6995 1 2
+6996 1 2
+6997 1 2
+6998 1 2
+6999 1 2
+7000 1 2
+7001 1 2
+7002 1 2
+7003 1 2
+7004 1 2
+7005 1 2
+7006 1 2
+7007 1 2
+7008 1 2
+7009 1 2
+7010 1 2
+7011 1 2
+7012 1 2
+7013 1 2
+7014 1 2
+7015 1 2
+7016 1 2
+7017 1 2
+7018 1 2
+7019 1 2
+7020 1 2
+7021 1 2
+7022 1 2
+7023 1 2
+7024 1 2
+7025 1 2
+7026 1 2
+7027 1 2
+7028 1 2
+7029 1 2
+7030 1 2
+7031 1 2
+7032 1 2
+7033 1 2
+7034 1 2
+7035 1 2
+7036 1 2
+7037 1 2
+7038 1 2
+7039 1 2
+7040 1 2
+7041 1 2
+7042 1 2
+7043 1 2
+7044 1 2
+7045 1 2
+7046 1 2
+7047 1 2
+7048 1 2
+7049 1 2
+7050 1 2
+7051 1 2
+7052 1 2
+7053 1 2
+7054 1 2
+7055 1 2
+7056 1 2
+7057 1 2
+7058 1 2
+7059 1 2
+7060 1 2
+7061 1 2
+7062 1 2
+7063 1 2
+7064 1 2
+7065 1 2
+7066 1 2
+7067 1 2
+7068 1 2
+7069 1 2
+7070 1 2
+7071 1 2
+7072 1 2
+7073 1 2
+7074 1 2
+7075 1 2
+7076 1 2
+7077 1 2
+7078 1 2
+7079 1 2
+7080 1 2
+7081 1 2
+7082 1 2
+7083 1 2
+7084 1 2
+7085 1 2
+7086 1 2
+7087 1 2
+7088 1 2
+7089 1 2
+7090 1 2
+7091 1 2
+7092 1 2
+7093 1 2
+7094 1 2
+7095 1 2
+7096 1 2
+7097 1 2
+7098 1 2
+7099 1 2
+7100 1 2
+7101 1 2
+7102 1 2
+7103 1 2
+7104 1 2
+7105 1 2
+7106 1 2
+7107 1 2
+7108 1 2
+7109 1 2
+7110 1 2
+7111 1 2
+7112 1 2
+7113 1 2
+7114 1 2
+7115 1 2
+7116 1 2
+7117 1 2
+7118 1 2
+7119 1 2
+7120 1 2
+7121 1 2
+7122 1 2
+7123 1 2
+7124 1 2
+7125 1 2
+7126 1 2
+7127 1 2
+7128 1 2
+7129 1 2
+7130 1 2
+7131 1 2
+7132 1 2
+7133 1 2
+7134 1 2
+7135 1 2
+7136 1 2
+7137 1 2
+7138 1 2
+7139 1 2
+7140 1 2
+7141 1 2
+7142 1 2
+7143 1 2
+7144 1 2
+7145 1 2
+7146 1 2
+7147 1 2
+7148 1 2
+7149 1 2
+7150 1 2
+7151 1 2
+7152 1 2
+7153 1 2
+7154 1 2
+7155 1 2
+7156 1 2
+7157 1 2
+7158 1 2
+7159 1 2
+7160 1 2
+7161 1 2
+7162 1 2
+7163 1 2
+7164 1 2
+7165 1 2
+7166 1 2
+7167 1 2
+7168 1 2
+7169 1 2
+7170 1 2
+7171 1 2
+7172 1 2
+7173 1 2
+7174 1 2
+7175 1 2
+7176 1 2
+7177 1 2
+7178 1 2
+7179 1 2
+7180 1 2
+7181 1 2
+7182 1 2
+7183 1 2
+7184 1 2
+7185 1 2
+7186 1 2
+7187 1 2
+7188 1 2
+7189 1 2
+7190 1 2
+7191 1 2
+7192 1 2
+7193 1 2
+7194 1 2
+7195 1 2
+7196 1 2
+7197 1 2
+7198 1 2
+7199 1 2
+7200 1 2
+7201 1 2
+7202 1 2
+7203 1 2
+7204 1 2
+7205 1 2
+7206 1 2
+7207 1 2
+7208 1 2
+7209 1 2
+7210 1 2
+7211 1 2
+7212 1 2
+7213 1 2
+7214 1 2
+7215 1 2
+7216 1 2
+7217 1 2
+7218 1 2
+7219 1 2
+7220 1 2
+7221 1 2
+7222 1 2
+7223 1 2
+7224 1 2
+7225 1 2
+7226 1 2
+7227 1 2
+7228 1 2
+7229 1 2
+7230 1 2
+7231 1 2
+7232 1 2
+7233 1 2
+7234 1 2
+7235 1 2
+7236 1 2
+7237 1 2
+7238 1 2
+7239 1 2
+7240 1 2
+7241 1 2
+7242 1 2
+7243 1 2
+7244 1 2
+7245 1 2
+7246 1 2
+7247 1 2
+7248 1 2
+7249 1 2
+7250 1 2
+7251 1 2
+7252 1 2
+7253 1 2
+7254 1 2
+7255 1 2
+7256 1 2
+7257 1 2
+7258 1 2
+7259 1 2
+7260 1 2
+7261 1 2
+7262 1 2
+7263 1 2
+7264 1 2
+7265 1 2
+7266 1 2
+7267 1 2
+7268 1 2
+7269 1 2
+7270 1 2
+7271 1 2
+7272 1 2
+7273 1 2
+7274 1 2
+7275 1 2
+7276 1 2
+7277 1 2
+7278 1 2
+7279 1 2
+7280 1 2
+7281 1 2
+7282 1 2
+7283 1 2
+7284 1 2
+7285 1 2
+7286 1 2
+7287 1 2
+7288 1 2
+7289 1 2
+7290 1 2
+7291 1 2
+7292 1 2
+7293 1 2
+7294 1 2
+7295 1 2
+7296 1 2
+7297 1 2
+7298 1 2
+7299 1 2
+7300 1 2
+7301 1 2
+7302 1 2
+7303 1 2
+7304 1 2
+7305 1 2
+7306 1 2
+7307 1 2
+7308 1 2
+7309 1 2
+7310 1 2
+7311 1 2
+7312 1 2
+7313 1 2
+7314 1 2
+7315 1 2
+7316 1 2
+7317 1 2
+7318 1 2
+7319 1 2
+7320 1 2
+7321 1 2
+7322 1 2
+7323 1 2
+7324 1 2
+7325 1 2
+7326 1 2
+7327 1 2
+7328 1 2
+7329 1 2
+7330 1 2
+7331 1 2
+7332 1 2
+7333 1 2
+7334 1 2
+7335 1 2
+7336 1 2
+7337 1 2
+7338 1 2
+7339 1 2
+7340 1 2
+7341 1 2
+7342 1 2
+7343 1 2
+7344 1 2
+7345 1 2
+7346 1 2
+7347 1 2
+7348 1 2
+7349 1 2
+7350 1 2
+7351 1 2
+7352 1 2
+7353 1 2
+7354 1 2
+7355 1 2
+7356 1 2
+7357 1 2
+7358 1 2
+7359 1 2
+7360 1 2
+7361 1 2
+7362 1 2
+7363 1 2
+7364 1 2
+7365 1 2
+7366 1 2
+7367 1 2
+7368 1 2
+7369 1 2
+7370 1 2
+7371 1 2
+7372 1 2
+7373 1 2
+7374 1 2
+7375 1 2
+7376 1 2
+7377 1 2
+7378 1 2
+7379 1 2
+7380 1 2
+7381 1 2
+7382 1 2
+7383 1 2
+7384 1 2
+7385 1 2
+7386 1 2
+7387 1 2
+7388 1 2
+7389 1 2
+7390 1 2
+7391 1 2
+7392 1 2
+7393 1 2
+7394 1 2
+7395 1 2
+7396 1 2
+7397 1 2
+7398 1 2
+7399 1 2
+7400 1 2
+7401 1 2
+7402 1 2
+7403 1 2
+7404 1 2
+7405 1 2
+7406 1 2
+7407 1 2
+7408 1 2
+7409 1 2
+7410 1 2
+7411 1 2
+7412 1 2
+7413 1 2
+7414 1 2
+7415 1 2
+7416 1 2
+7417 1 2
+7418 1 2
+7419 1 2
+7420 1 2
+7421 1 2
+7422 1 2
+7423 1 2
+7424 1 2
+7425 1 2
+7426 1 2
+7427 1 2
+7428 1 2
+7429 1 2
+7430 1 2
+7431 1 2
+7432 1 2
+7433 1 2
+7434 1 2
+7435 1 2
+7436 1 2
+7437 1 2
+7438 1 2
+7439 1 2
+7440 1 2
+7441 1 2
+7442 1 2
+7443 1 2
+7444 1 2
+7445 1 2
+7446 1 2
+7447 1 2
+7448 1 2
+7449 1 2
+7450 1 2
+7451 1 2
+7452 1 2
+7453 1 2
+7454 1 2
+7455 1 2
+7456 1 2
+7457 1 2
+7458 1 2
+7459 1 2
+7460 1 2
+7461 1 2
+7462 1 2
+7463 1 2
+7464 1 2
+7465 1 2
+7466 1 2
+7467 1 2
+7468 1 2
+7469 1 2
+7470 1 2
+7471 1 2
+7472 1 2
+7473 1 2
+7474 1 2
+7475 1 2
+7476 1 2
+7477 1 2
+7478 1 2
+7479 1 2
+7480 1 2
+7481 1 2
+7482 1 2
+7483 1 2
+7484 1 2
+7485 1 2
+7486 1 2
+7487 1 2
+7488 1 2
+7489 1 2
+7490 1 2
+7491 1 2
+7492 1 2
+7493 1 2
+7494 1 2
+7495 1 2
+7496 1 2
+7497 1 2
+7498 1 2
+7499 1 2
+7500 1 2
+7501 1 2
+7502 1 2
+7503 1 2
+7504 1 2
+7505 1 2
+7506 1 2
+7507 1 2
+7508 1 2
+7509 1 2
+7510 1 2
+7511 1 2
+7512 1 2
+7513 1 2
+7514 1 2
+7515 1 2
+7516 1 2
+7517 1 2
+7518 1 2
+7519 1 2
+7520 1 2
+7521 1 2
+7522 1 2
+7523 1 2
+7524 1 2
+7525 1 2
+7526 1 2
+7527 1 2
+7528 1 2
+7529 1 2
+7530 1 2
+7531 1 2
+7532 1 2
+7533 1 2
+7534 1 2
+7535 1 2
+7536 1 2
+7537 1 2
+7538 1 2
+7539 1 2
+7540 1 2
+7541 1 2
+7542 1 2
+7543 1 2
+7544 1 2
+7545 1 2
+7546 1 2
+7547 1 2
+7548 1 2
+7549 1 2
+7550 1 2
+7551 1 2
+7552 1 2
+7553 1 2
+7554 1 2
+7555 1 2
+7556 1 2
+7557 1 2
+7558 1 2
+7559 1 2
+7560 1 2
+7561 1 2
+7562 1 2
+7563 1 2
+7564 1 2
+7565 1 2
+7566 1 2
+7567 1 2
+7568 1 2
+7569 1 2
+7570 1 2
+7571 1 2
+7572 1 2
+7573 1 2
+7574 1 2
+7575 1 2
+7576 1 2
+7577 1 2
+7578 1 2
+7579 1 2
+7580 1 2
+7581 1 2
+7582 1 2
+7583 1 2
+7584 1 2
+7585 1 2
+7586 1 2
+7587 1 2
+7588 1 2
+7589 1 2
+7590 1 2
+7591 1 2
+7592 1 2
+7593 1 2
+7594 1 2
+7595 1 2
+7596 1 2
+7597 1 2
+7598 1 2
+7599 1 2
+7600 1 2
+7601 1 2
+7602 1 2
+7603 1 2
+7604 1 2
+7605 1 2
+7606 1 2
+7607 1 2
+7608 1 2
+7609 1 2
+7610 1 2
+7611 1 2
+7612 1 2
+7613 1 2
+7614 1 2
+7615 1 2
+7616 1 2
+7617 1 2
+7618 1 2
+7619 1 2
+7620 1 2
+7621 1 2
+7622 1 2
+7623 1 2
+7624 1 2
+7625 1 2
+7626 1 2
+7627 1 2
+7628 1 2
+7629 1 2
+7630 1 2
+7631 1 2
+7632 1 2
+7633 1 2
+7634 1 2
+7635 1 2
+7636 1 2
+7637 1 2
+7638 1 2
+7639 1 2
+7640 1 2
+7641 1 2
+7642 1 2
+7643 1 2
+7644 1 2
+7645 1 2
+7646 1 2
+7647 1 2
+7648 1 2
+7649 1 2
+7650 1 2
+7651 1 2
+7652 1 2
+7653 1 2
+7654 1 2
+7655 1 2
+7656 1 2
+7657 1 2
+7658 1 2
+7659 1 2
+7660 1 2
+7661 1 2
+7662 1 2
+7663 1 2
+7664 1 2
+7665 1 2
+7666 1 2
+7667 1 2
+7668 1 2
+7669 1 2
+7670 1 2
+7671 1 2
+7672 1 2
+7673 1 2
+7674 1 2
+7675 1 2
+7676 1 2
+7677 1 2
+7678 1 2
+7679 1 2
+7680 1 2
+7681 1 2
+7682 1 2
+7683 1 2
+7684 1 2
+7685 1 2
+7686 1 2
+7687 1 2
+7688 1 2
+7689 1 2
+7690 1 2
+7691 1 2
+7692 1 2
+7693 1 2
+7694 1 2
+7695 1 2
+7696 1 2
+7697 1 2
+7698 1 2
+7699 1 2
+7700 1 2
+7701 1 2
+7702 1 2
+7703 1 2
+7704 1 2
+7705 1 2
+7706 1 2
+7707 1 2
+7708 1 2
+7709 1 2
+7710 1 2
+7711 1 2
+7712 1 2
+7713 1 2
+7714 1 2
+7715 1 2
+7716 1 2
+7717 1 2
+7718 1 2
+7719 1 2
+7720 1 2
+7721 1 2
+7722 1 2
+7723 1 2
+7724 1 2
+7725 1 2
+7726 1 2
+7727 1 2
+7728 1 2
+7729 1 2
+7730 1 2
+7731 1 2
+7732 1 2
+7733 1 2
+7734 1 2
+7735 1 2
+7736 1 2
+7737 1 2
+7738 1 2
+7739 1 2
+7740 1 2
+7741 1 2
+7742 1 2
+7743 1 2
+7744 1 2
+7745 1 2
+7746 1 2
+7747 1 2
+7748 1 2
+7749 1 2
+7750 1 2
+7751 1 2
+7752 1 2
+7753 1 2
+7754 1 2
+7755 1 2
+7756 1 2
+7757 1 2
+7758 1 2
+7759 1 2
+7760 1 2
+7761 1 2
+7762 1 2
+7763 1 2
+7764 1 2
+7765 1 2
+7766 1 2
+7767 1 2
+7768 1 2
+7769 1 2
+7770 1 2
+7771 1 2
+7772 1 2
+7773 1 2
+7774 1 2
+7775 1 2
+7776 1 2
+7777 1 2
+7778 1 2
+7779 1 2
+7780 1 2
+7781 1 2
+7782 1 2
+7783 1 2
+7784 1 2
+7785 1 2
+7786 1 2
+7787 1 2
+7788 1 2
+7789 1 2
+7790 1 2
+7791 1 2
+7792 1 2
+7793 1 2
+7794 1 2
+7795 1 2
+7796 1 2
+7797 1 2
+7798 1 2
+7799 1 2
+7800 1 2
+7801 1 2
+7802 1 2
+7803 1 2
+7804 1 2
+7805 1 2
+7806 1 2
+7807 1 2
+7808 1 2
+7809 1 2
+7810 1 2
+7811 1 2
+7812 1 2
+7813 1 2
+7814 1 2
+7815 1 2
+7816 1 2
+7817 1 2
+7818 1 2
+7819 1 2
+7820 1 2
+7821 1 2
+7822 1 2
+7823 1 2
+7824 1 2
+7825 1 2
+7826 1 2
+7827 1 2
+7828 1 2
+7829 1 2
+7830 1 2
+7831 1 2
+7832 1 2
+7833 1 2
+7834 1 2
+7835 1 2
+7836 1 2
+7837 1 2
+7838 1 2
+7839 1 2
+7840 1 2
+7841 1 2
+7842 1 2
+7843 1 2
+7844 1 2
+7845 1 2
+7846 1 2
+7847 1 2
+7848 1 2
+7849 1 2
+7850 1 2
+7851 1 2
+7852 1 2
+7853 1 2
+7854 1 2
+7855 1 2
+7856 1 2
+7857 1 2
+7858 1 2
+7859 1 2
+7860 1 2
+7861 1 2
+7862 1 2
+7863 1 2
+7864 1 2
+7865 1 2
+7866 1 2
+7867 1 2
+7868 1 2
+7869 1 2
+7870 1 2
+7871 1 2
+7872 1 2
+7873 1 2
+7874 1 2
+7875 1 2
+7876 1 2
+7877 1 2
+7878 1 2
+7879 1 2
+7880 1 2
+7881 1 2
+7882 1 2
+7883 1 2
+7884 1 2
+7885 1 2
+7886 1 2
+7887 1 2
+7888 1 2
+7889 1 2
+7890 1 2
+7891 1 2
+7892 1 2
+7893 1 2
+7894 1 2
+7895 1 2
+7896 1 2
+7897 1 2
+7898 1 2
+7899 1 2
+7900 1 2
+7901 1 2
+7902 1 2
+7903 1 2
+7904 1 2
+7905 1 2
+7906 1 2
+7907 1 2
+7908 1 2
+7909 1 2
+7910 1 2
+7911 1 2
+7912 1 2
+7913 1 2
+7914 1 2
+7915 1 2
+7916 1 2
+7917 1 2
+7918 1 2
+7919 1 2
+7920 1 2
+7921 1 2
+7922 1 2
+7923 1 2
+7924 1 2
+7925 1 2
+7926 1 2
+7927 1 2
+7928 1 2
+7929 1 2
+7930 1 2
+7931 1 2
+7932 1 2
+7933 1 2
+7934 1 2
+7935 1 2
+7936 1 2
+7937 1 2
+7938 1 2
+7939 1 2
+7940 1 2
+7941 1 2
+7942 1 2
+7943 1 2
+7944 1 2
+7945 1 2
+7946 1 2
+7947 1 2
+7948 1 2
+7949 1 2
+7950 1 2
+7951 1 2
+7952 1 2
+7953 1 2
+7954 1 2
+7955 1 2
+7956 1 2
+7957 1 2
+7958 1 2
+7959 1 2
+7960 1 2
+7961 1 2
+7962 1 2
+7963 1 2
+7964 1 2
+7965 1 2
+7966 1 2
+7967 1 2
+7968 1 2
+7969 1 2
+7970 1 2
+7971 1 2
+7972 1 2
+7973 1 2
+7974 1 2
+7975 1 2
+7976 1 2
+7977 1 2
+7978 1 2
+7979 1 2
+7980 1 2
+7981 1 2
+7982 1 2
+7983 1 2
+7984 1 2
+7985 1 2
+7986 1 2
+7987 1 2
+7988 1 2
+7989 1 2
+7990 1 2
+7991 1 2
+7992 1 2
+7993 1 2
+7994 1 2
+7995 1 2
+7996 1 2
+7997 1 2
+7998 1 2
+7999 1 2
+8000 1 2
+8001 1 2
+8002 1 2
+8003 1 2
+8004 1 2
+8005 1 2
+8006 1 2
+8007 1 2
+8008 1 2
+8009 1 2
+8010 1 2
+8011 1 2
+8012 1 2
+8013 1 2
+8014 1 2
+8015 1 2
+8016 1 2
+8017 1 2
+8018 1 2
+8019 1 2
+8020 1 2
+8021 1 2
+8022 1 2
+8023 1 2
+8024 1 2
+8025 1 2
+8026 1 2
+8027 1 2
+8028 1 2
+8029 1 2
+8030 1 2
+8031 1 2
+8032 1 2
+8033 1 2
+8034 1 2
+8035 1 2
+8036 1 2
+8037 1 2
+8038 1 2
+8039 1 2
+8040 1 2
+8041 1 2
+8042 1 2
+8043 1 2
+8044 1 2
+8045 1 2
+8046 1 2
+8047 1 2
+8048 1 2
+8049 1 2
+8050 1 2
+8051 1 2
+8052 1 2
+8053 1 2
+8054 1 2
+8055 1 2
+8056 1 2
+8057 1 2
+8058 1 2
+8059 1 2
+8060 1 2
+8061 1 2
+8062 1 2
+8063 1 2
+8064 1 2
+8065 1 2
+8066 1 2
+8067 1 2
+8068 1 2
+8069 1 2
+8070 1 2
+8071 1 2
+8072 1 2
+8073 1 2
+8074 1 2
+8075 1 2
+8076 1 2
+8077 1 2
+8078 1 2
+8079 1 2
+8080 1 2
+8081 1 2
+8082 1 2
+8083 1 2
+8084 1 2
+8085 1 2
+8086 1 2
+8087 1 2
+8088 1 2
+8089 1 2
+8090 1 2
+8091 1 2
+8092 1 2
+8093 1 2
+8094 1 2
+8095 1 2
+8096 1 2
+8097 1 2
+8098 1 2
+8099 1 2
+8100 1 2
+8101 1 2
+8102 1 2
+8103 1 2
+8104 1 2
+8105 1 2
+8106 1 2
+8107 1 2
+8108 1 2
+8109 1 2
+8110 1 2
+8111 1 2
+8112 1 2
+8113 1 2
+8114 1 2
+8115 1 2
+8116 1 2
+8117 1 2
+8118 1 2
+8119 1 2
+8120 1 2
+8121 1 2
+8122 1 2
+8123 1 2
+8124 1 2
+8125 1 2
+8126 1 2
+8127 1 2
+8128 1 2
+8129 1 2
+8130 1 2
+8131 1 2
+8132 1 2
+8133 1 2
+8134 1 2
+8135 1 2
+8136 1 2
+8137 1 2
+8138 1 2
+8139 1 2
+8140 1 2
+8141 1 2
+8142 1 2
+8143 1 2
+8144 1 2
+8145 1 2
+8146 1 2
+8147 1 2
+8148 1 2
+8149 1 2
+8150 1 2
+8151 1 2
+8152 1 2
+8153 1 2
+8154 1 2
+8155 1 2
+8156 1 2
+8157 1 2
+8158 1 2
+8159 1 2
+8160 1 2
+8161 1 2
+8162 1 2
+8163 1 2
+8164 1 2
+8165 1 2
+8166 1 2
+8167 1 2
+8168 1 2
+8169 1 2
+8170 1 2
+8171 1 2
+8172 1 2
+8173 1 2
+8174 1 2
+8175 1 2
+8176 1 2
+8177 1 2
+8178 1 2
+8179 1 2
+8180 1 2
+8181 1 2
+8182 1 2
+8183 1 2
+8184 1 2
+8185 1 2
+8186 1 2
+8187 1 2
+8188 1 2
+8189 1 2
+8190 1 2
+8191 1 2
+8192 1 2
+8193 1 2
+8194 1 2
+8195 1 2
+8196 1 2
+8197 1 2
+8198 1 2
+8199 1 2
+8200 1 2
+8201 1 2
+8202 1 2
+8203 1 2
+8204 1 2
+8205 1 2
+8206 1 2
+8207 1 2
+8208 1 2
+8209 1 2
+8210 1 2
+8211 1 2
+8212 1 2
+8213 1 2
+8214 1 2
+8215 1 2
+8216 1 2
+8217 1 2
+8218 1 2
+8219 1 2
+8220 1 2
+8221 1 2
+8222 1 2
+8223 1 2
+8224 1 2
+8225 1 2
+8226 1 2
+8227 1 2
+8228 1 2
+8229 1 2
+8230 1 2
+8231 1 2
+8232 1 2
+8233 1 2
+8234 1 2
+8235 1 2
+8236 1 2
+8237 1 2
+8238 1 2
+8239 1 2
+8240 1 2
+8241 1 2
+8242 1 2
+8243 1 2
+8244 1 2
+8245 1 2
+8246 1 2
+8247 1 2
+8248 1 2
+8249 1 2
+8250 1 2
+8251 1 2
+8252 1 2
+8253 1 2
+8254 1 2
+8255 1 2
+8256 1 2
+8257 1 2
+8258 1 2
+8259 1 2
+8260 1 2
+8261 1 2
+8262 1 2
+8263 1 2
+8264 1 2
+8265 1 2
+8266 1 2
+8267 1 2
+8268 1 2
+8269 1 2
+8270 1 2
+8271 1 2
+8272 1 2
+8273 1 2
+8274 1 2
+8275 1 2
+8276 1 2
+8277 1 2
+8278 1 2
+8279 1 2
+8280 1 2
+8281 1 2
+8282 1 2
+8283 1 2
+8284 1 2
+8285 1 2
+8286 1 2
+8287 1 2
+8288 1 2
+8289 1 2
+8290 1 2
+8291 1 2
+8292 1 2
+8293 1 2
+8294 1 2
+8295 1 2
+8296 1 2
+8297 1 2
+8298 1 2
+8299 1 2
+8300 1 2
+8301 1 2
+8302 1 2
+8303 1 2
+8304 1 2
+8305 1 2
+8306 1 2
+8307 1 2
+8308 1 2
+8309 1 2
+8310 1 2
+8311 1 2
+8312 1 2
+8313 1 2
+8314 1 2
+8315 1 2
+8316 1 2
+8317 1 2
+8318 1 2
+8319 1 2
+8320 1 2
+8321 1 2
+8322 1 2
+8323 1 2
+8324 1 2
+8325 1 2
+8326 1 2
+8327 1 2
+8328 1 2
+8329 1 2
+8330 1 2
+8331 1 2
+8332 1 2
+8333 1 2
+8334 1 2
+8335 1 2
+8336 1 2
+8337 1 2
+8338 1 2
+8339 1 2
+8340 1 2
+8341 1 2
+8342 1 2
+8343 1 2
+8344 1 2
+8345 1 2
+8346 1 2
+8347 1 2
+8348 1 2
+8349 1 2
+8350 1 2
+8351 1 2
+8352 1 2
+8353 1 2
+8354 1 2
+8355 1 2
+8356 1 2
+8357 1 2
+8358 1 2
+8359 1 2
+8360 1 2
+8361 1 2
+8362 1 2
+8363 1 2
+8364 1 2
+8365 1 2
+8366 1 2
+8367 1 2
+8368 1 2
+8369 1 2
+8370 1 2
+8371 1 2
+8372 1 2
+8373 1 2
+8374 1 2
+8375 1 2
+8376 1 2
+8377 1 2
+8378 1 2
+8379 1 2
+8380 1 2
+8381 1 2
+8382 1 2
+8383 1 2
+8384 1 2
+8385 1 2
+8386 1 2
+8387 1 2
+8388 1 2
+8389 1 2
+8390 1 2
+8391 1 2
+8392 1 2
+8393 1 2
+8394 1 2
+8395 1 2
+8396 1 2
+8397 1 2
+8398 1 2
+8399 1 2
+8400 1 2
+8401 1 2
+8402 1 2
+8403 1 2
+8404 1 2
+8405 1 2
+8406 1 2
+8407 1 2
+8408 1 2
+8409 1 2
+8410 1 2
+8411 1 2
+8412 1 2
+8413 1 2
+8414 1 2
+8415 1 2
+8416 1 2
+8417 1 2
+8418 1 2
+8419 1 2
+8420 1 2
+8421 1 2
+8422 1 2
+8423 1 2
+8424 1 2
+8425 1 2
+8426 1 2
+8427 1 2
+8428 1 2
+8429 1 2
+8430 1 2
+8431 1 2
+8432 1 2
+8433 1 2
+8434 1 2
+8435 1 2
+8436 1 2
+8437 1 2
+8438 1 2
+8439 1 2
+8440 1 2
+8441 1 2
+8442 1 2
+8443 1 2
+8444 1 2
+8445 1 2
+8446 1 2
+8447 1 2
+8448 1 2
+8449 1 2
+8450 1 2
+8451 1 2
+8452 1 2
+8453 1 2
+8454 1 2
+8455 1 2
+8456 1 2
+8457 1 2
+8458 1 2
+8459 1 2
+8460 1 2
+8461 1 2
+8462 1 2
+8463 1 2
+8464 1 2
+8465 1 2
+8466 1 2
+8467 1 2
+8468 1 2
+8469 1 2
+8470 1 2
+8471 1 2
+8472 1 2
+8473 1 2
+8474 1 2
+8475 1 2
+8476 1 2
+8477 1 2
+8478 1 2
+8479 1 2
+8480 1 2
+8481 1 2
+8482 1 2
+8483 1 2
+8484 1 2
+8485 1 2
+8486 1 2
+8487 1 2
+8488 1 2
+8489 1 2
+8490 1 2
+8491 1 2
+8492 1 2
+8493 1 2
+8494 1 2
+8495 1 2
+8496 1 2
+8497 1 2
+8498 1 2
+8499 1 2
+8500 1 2
+8501 1 2
+8502 1 2
+8503 1 2
+8504 1 2
+8505 1 2
+8506 1 2
+8507 1 2
+8508 1 2
+8509 1 2
+8510 1 2
+8511 1 2
+8512 1 2
+8513 1 2
+8514 1 2
+8515 1 2
+8516 1 2
+8517 1 2
+8518 1 2
+8519 1 2
+8520 1 2
+8521 1 2
+8522 1 2
+8523 1 2
+8524 1 2
+8525 1 2
+8526 1 2
+8527 1 2
+8528 1 2
+8529 1 2
+8530 1 2
+8531 1 2
+8532 1 2
+8533 1 2
+8534 1 2
+8535 1 2
+8536 1 2
+8537 1 2
+8538 1 2
+8539 1 2
+8540 1 2
+8541 1 2
+8542 1 2
+8543 1 2
+8544 1 2
+8545 1 2
+8546 1 2
+8547 1 2
+8548 1 2
+8549 1 2
+8550 1 2
+8551 1 2
+8552 1 2
+8553 1 2
+8554 1 2
+8555 1 2
+8556 1 2
+8557 1 2
+8558 1 2
+8559 1 2
+8560 1 2
+8561 1 2
+8562 1 2
+8563 1 2
+8564 1 2
+8565 1 2
+8566 1 2
+8567 1 2
+8568 1 2
+8569 1 2
+8570 1 2
+8571 1 2
+8572 1 2
+8573 1 2
+8574 1 2
+8575 1 2
+8576 1 2
+8577 1 2
+8578 1 2
+8579 1 2
+8580 1 2
+8581 1 2
+8582 1 2
+8583 1 2
+8584 1 2
+8585 1 2
+8586 1 2
+8587 1 2
+8588 1 2
+8589 1 2
+8590 1 2
+8591 1 2
+8592 1 2
+8593 1 2
+8594 1 2
+8595 1 2
+8596 1 2
+8597 1 2
+8598 1 2
+8599 1 2
+8600 1 2
+8601 1 2
+8602 1 2
+8603 1 2
+8604 1 2
+8605 1 2
+8606 1 2
+8607 1 2
+8608 1 2
+8609 1 2
+8610 1 2
+8611 1 2
+8612 1 2
+8613 1 2
+8614 1 2
+8615 1 2
+8616 1 2
+8617 1 2
+8618 1 2
+8619 1 2
+8620 1 2
+8621 1 2
+8622 1 2
+8623 1 2
+8624 1 2
+8625 1 2
+8626 1 2
+8627 1 2
+8628 1 2
+8629 1 2
+8630 1 2
+8631 1 2
+8632 1 2
+8633 1 2
+8634 1 2
+8635 1 2
+8636 1 2
+8637 1 2
+8638 1 2
+8639 1 2
+8640 1 2
+8641 1 2
+8642 1 2
+8643 1 2
+8644 1 2
+8645 1 2
+8646 1 2
+8647 1 2
+8648 1 2
+8649 1 2
+8650 1 2
+8651 1 2
+8652 1 2
+8653 1 2
+8654 1 2
+8655 1 2
+8656 1 2
+8657 1 2
+8658 1 2
+8659 1 2
+8660 1 2
+8661 1 2
+8662 1 2
+8663 1 2
+8664 1 2
+8665 1 2
+8666 1 2
+8667 1 2
+8668 1 2
+8669 1 2
+8670 1 2
+8671 1 2
+8672 1 2
+8673 1 2
+8674 1 2
+8675 1 2
+8676 1 2
+8677 1 2
+8678 1 2
+8679 1 2
+8680 1 2
+8681 1 2
+8682 1 2
+8683 1 2
+8684 1 2
+8685 1 2
+8686 1 2
+8687 1 2
+8688 1 2
+8689 1 2
+8690 1 2
+8691 1 2
+8692 1 2
+8693 1 2
+8694 1 2
+8695 1 2
+8696 1 2
+8697 1 2
+8698 1 2
+8699 1 2
+8700 1 2
+8701 1 2
+8702 1 2
+8703 1 2
+8704 1 2
+8705 1 2
+8706 1 2
+8707 1 2
+8708 1 2
+8709 1 2
+8710 1 2
+8711 1 2
+8712 1 2
+8713 1 2
+8714 1 2
+8715 1 2
+8716 1 2
+8717 1 2
+8718 1 2
+8719 1 2
+8720 1 2
+8721 1 2
+8722 1 2
+8723 1 2
+8724 1 2
+8725 1 2
+8726 1 2
+8727 1 2
+8728 1 2
+8729 1 2
+8730 1 2
+8731 1 2
+8732 1 2
+8733 1 2
+8734 1 2
+8735 1 2
+8736 1 2
+8737 1 2
+8738 1 2
+8739 1 2
+8740 1 2
+8741 1 2
+8742 1 2
+8743 1 2
+8744 1 2
+8745 1 2
+8746 1 2
+8747 1 2
+8748 1 2
+8749 1 2
+8750 1 2
+8751 1 2
+8752 1 2
+8753 1 2
+8754 1 2
+8755 1 2
+8756 1 2
+8757 1 2
+8758 1 2
+8759 1 2
+8760 1 2
+8761 1 2
+8762 1 2
+8763 1 2
+8764 1 2
+8765 1 2
+8766 1 2
+8767 1 2
+8768 1 2
+8769 1 2
+8770 1 2
+8771 1 2
+8772 1 2
+8773 1 2
+8774 1 2
+8775 1 2
+8776 1 2
+8777 1 2
+8778 1 2
+8779 1 2
+8780 1 2
+8781 1 2
+8782 1 2
+8783 1 2
+8784 1 2
+8785 1 2
+8786 1 2
+8787 1 2
+8788 1 2
+8789 1 2
+8790 1 2
+8791 1 2
+8792 1 2
+8793 1 2
+8794 1 2
+8795 1 2
+8796 1 2
+8797 1 2
+8798 1 2
+8799 1 2
+8800 1 2
+8801 1 2
+8802 1 2
+8803 1 2
+8804 1 2
+8805 1 2
+8806 1 2
+8807 1 2
+8808 1 2
+8809 1 2
+8810 1 2
+8811 1 2
+8812 1 2
+8813 1 2
+8814 1 2
+8815 1 2
+8816 1 2
+8817 1 2
+8818 1 2
+8819 1 2
+8820 1 2
+8821 1 2
+8822 1 2
+8823 1 2
+8824 1 2
+8825 1 2
+8826 1 2
+8827 1 2
+8828 1 2
+8829 1 2
+8830 1 2
+8831 1 2
+8832 1 2
+8833 1 2
+8834 1 2
+8835 1 2
+8836 1 2
+8837 1 2
+8838 1 2
+8839 1 2
+8840 1 2
+8841 1 2
+8842 1 2
+8843 1 2
+8844 1 2
+8845 1 2
+8846 1 2
+8847 1 2
+8848 1 2
+8849 1 2
+8850 1 2
+8851 1 2
+8852 1 2
+8853 1 2
+8854 1 2
+8855 1 2
+8856 1 2
+8857 1 2
+8858 1 2
+8859 1 2
+8860 1 2
+8861 1 2
+8862 1 2
+8863 1 2
+8864 1 2
+8865 1 2
+8866 1 2
+8867 1 2
+8868 1 2
+8869 1 2
+8870 1 2
+8871 1 2
+8872 1 2
+8873 1 2
+8874 1 2
+8875 1 2
+8876 1 2
+8877 1 2
+8878 1 2
+8879 1 2
+8880 1 2
+8881 1 2
+8882 1 2
+8883 1 2
+8884 1 2
+8885 1 2
+8886 1 2
+8887 1 2
+8888 1 2
+8889 1 2
+8890 1 2
+8891 1 2
+8892 1 2
+8893 1 2
+8894 1 2
+8895 1 2
+8896 1 2
+8897 1 2
+8898 1 2
+8899 1 2
+8900 1 2
+8901 1 2
+8902 1 2
+8903 1 2
+8904 1 2
+8905 1 2
+8906 1 2
+8907 1 2
+8908 1 2
+8909 1 2
+8910 1 2
+8911 1 2
+8912 1 2
+8913 1 2
+8914 1 2
+8915 1 2
+8916 1 2
+8917 1 2
+8918 1 2
+8919 1 2
+8920 1 2
+8921 1 2
+8922 1 2
+8923 1 2
+8924 1 2
+8925 1 2
+8926 1 2
+8927 1 2
+8928 1 2
+8929 1 2
+8930 1 2
+8931 1 2
+8932 1 2
+8933 1 2
+8934 1 2
+8935 1 2
+8936 1 2
+8937 1 2
+8938 1 2
+8939 1 2
+8940 1 2
+8941 1 2
+8942 1 2
+8943 1 2
+8944 1 2
+8945 1 2
+8946 1 2
+8947 1 2
+8948 1 2
+8949 1 2
+8950 1 2
+8951 1 2
+8952 1 2
+8953 1 2
+8954 1 2
+8955 1 2
+8956 1 2
+8957 1 2
+8958 1 2
+8959 1 2
+8960 1 2
+8961 1 2
+8962 1 2
+8963 1 2
+8964 1 2
+8965 1 2
+8966 1 2
+8967 1 2
+8968 1 2
+8969 1 2
+8970 1 2
+8971 1 2
+8972 1 2
+8973 1 2
+8974 1 2
+8975 1 2
+8976 1 2
+8977 1 2
+8978 1 2
+8979 1 2
+8980 1 2
+8981 1 2
+8982 1 2
+8983 1 2
+8984 1 2
+8985 1 2
+8986 1 2
+8987 1 2
+8988 1 2
+8989 1 2
+8990 1 2
+8991 1 2
+8992 1 2
+8993 1 2
+8994 1 2
+8995 1 2
+8996 1 2
+8997 1 2
+8998 1 2
+8999 1 2
+9000 1 2
+9001 1 2
+9002 1 2
+9003 1 2
+9004 1 2
+9005 1 2
+9006 1 2
+9007 1 2
+9008 1 2
+9009 1 2
+9010 1 2
+9011 1 2
+9012 1 2
+9013 1 2
+9014 1 2
+9015 1 2
+9016 1 2
+9017 1 2
+9018 1 2
+9019 1 2
+9020 1 2
+9021 1 2
+9022 1 2
+9023 1 2
+9024 1 2
+9025 1 2
+9026 1 2
+9027 1 2
+9028 1 2
+9029 1 2
+9030 1 2
+9031 1 2
+9032 1 2
+9033 1 2
+9034 1 2
+9035 1 2
+9036 1 2
+9037 1 2
+9038 1 2
+9039 1 2
+9040 1 2
+9041 1 2
+9042 1 2
+9043 1 2
+9044 1 2
+9045 1 2
+9046 1 2
+9047 1 2
+9048 1 2
+9049 1 2
+9050 1 2
+9051 1 2
+9052 1 2
+9053 1 2
+9054 1 2
+9055 1 2
+9056 1 2
+9057 1 2
+9058 1 2
+9059 1 2
+9060 1 2
+9061 1 2
+9062 1 2
+9063 1 2
+9064 1 2
+9065 1 2
+9066 1 2
+9067 1 2
+9068 1 2
+9069 1 2
+9070 1 2
+9071 1 2
+9072 1 2
+9073 1 2
+9074 1 2
+9075 1 2
+9076 1 2
+9077 1 2
+9078 1 2
+9079 1 2
+9080 1 2
+9081 1 2
+9082 1 2
+9083 1 2
+9084 1 2
+9085 1 2
+9086 1 2
+9087 1 2
+9088 1 2
+9089 1 2
+9090 1 2
+9091 1 2
+9092 1 2
+9093 1 2
+9094 1 2
+9095 1 2
+9096 1 2
+9097 1 2
+9098 1 2
+9099 1 2
+9100 1 2
+9101 1 2
+9102 1 2
+9103 1 2
+9104 1 2
+9105 1 2
+9106 1 2
+9107 1 2
+9108 1 2
+9109 1 2
+9110 1 2
+9111 1 2
+9112 1 2
+9113 1 2
+9114 1 2
+9115 1 2
+9116 1 2
+9117 1 2
+9118 1 2
+9119 1 2
+9120 1 2
+9121 1 2
+9122 1 2
+9123 1 2
+9124 1 2
+9125 1 2
+9126 1 2
+9127 1 2
+9128 1 2
+9129 1 2
+9130 1 2
+9131 1 2
+9132 1 2
+9133 1 2
+9134 1 2
+9135 1 2
+9136 1 2
+9137 1 2
+9138 1 2
+9139 1 2
+9140 1 2
+9141 1 2
+9142 1 2
+9143 1 2
+9144 1 2
+9145 1 2
+9146 1 2
+9147 1 2
+9148 1 2
+9149 1 2
+9150 1 2
+9151 1 2
+9152 1 2
+9153 1 2
+9154 1 2
+9155 1 2
+9156 1 2
+9157 1 2
+9158 1 2
+9159 1 2
+9160 1 2
+9161 1 2
+9162 1 2
+9163 1 2
+9164 1 2
+9165 1 2
+9166 1 2
+9167 1 2
+9168 1 2
+9169 1 2
+9170 1 2
+9171 1 2
+9172 1 2
+9173 1 2
+9174 1 2
+9175 1 2
+9176 1 2
+9177 1 2
+9178 1 2
+9179 1 2
+9180 1 2
+9181 1 2
+9182 1 2
+9183 1 2
+9184 1 2
+9185 1 2
+9186 1 2
+9187 1 2
+9188 1 2
+9189 1 2
+9190 1 2
+9191 1 2
+9192 1 2
+9193 1 2
+9194 1 2
+9195 1 2
+9196 1 2
+9197 1 2
+9198 1 2
+9199 1 2
+9200 1 2
+9201 1 2
+9202 1 2
+9203 1 2
+9204 1 2
+9205 1 2
+9206 1 2
+9207 1 2
+9208 1 2
+9209 1 2
+9210 1 2
+9211 1 2
+9212 1 2
+9213 1 2
+9214 1 2
+9215 1 2
+9216 1 2
+9217 1 2
+9218 1 2
+9219 1 2
+9220 1 2
+9221 1 2
+9222 1 2
+9223 1 2
+9224 1 2
+9225 1 2
+9226 1 2
+9227 1 2
+9228 1 2
+9229 1 2
+9230 1 2
+9231 1 2
+9232 1 2
+9233 1 2
+9234 1 2
+9235 1 2
+9236 1 2
+9237 1 2
+9238 1 2
+9239 1 2
+9240 1 2
+9241 1 2
+9242 1 2
+9243 1 2
+9244 1 2
+9245 1 2
+9246 1 2
+9247 1 2
+9248 1 2
+9249 1 2
+9250 1 2
+9251 1 2
+9252 1 2
+9253 1 2
+9254 1 2
+9255 1 2
+9256 1 2
+9257 1 2
+9258 1 2
+9259 1 2
+9260 1 2
+9261 1 2
+9262 1 2
+9263 1 2
+9264 1 2
+9265 1 2
+9266 1 2
+9267 1 2
+9268 1 2
+9269 1 2
+9270 1 2
+9271 1 2
+9272 1 2
+9273 1 2
+9274 1 2
+9275 1 2
+9276 1 2
+9277 1 2
+9278 1 2
+9279 1 2
+9280 1 2
+9281 1 2
+9282 1 2
+9283 1 2
+9284 1 2
+9285 1 2
+9286 1 2
+9287 1 2
+9288 1 2
+9289 1 2
+9290 1 2
+9291 1 2
+9292 1 2
+9293 1 2
+9294 1 2
+9295 1 2
+9296 1 2
+9297 1 2
+9298 1 2
+9299 1 2
+9300 1 2
+9301 1 2
+9302 1 2
+9303 1 2
+9304 1 2
+9305 1 2
+9306 1 2
+9307 1 2
+9308 1 2
+9309 1 2
+9310 1 2
+9311 1 2
+9312 1 2
+9313 1 2
+9314 1 2
+9315 1 2
+9316 1 2
+9317 1 2
+9318 1 2
+9319 1 2
+9320 1 2
+9321 1 2
+9322 1 2
+9323 1 2
+9324 1 2
+9325 1 2
+9326 1 2
+9327 1 2
+9328 1 2
+9329 1 2
+9330 1 2
+9331 1 2
+9332 1 2
+9333 1 2
+9334 1 2
+9335 1 2
+9336 1 2
+9337 1 2
+9338 1 2
+9339 1 2
+9340 1 2
+9341 1 2
+9342 1 2
+9343 1 2
+9344 1 2
+9345 1 2
+9346 1 2
+9347 1 2
+9348 1 2
+9349 1 2
+9350 1 2
+9351 1 2
+9352 1 2
+9353 1 2
+9354 1 2
+9355 1 2
+9356 1 2
+9357 1 2
+9358 1 2
+9359 1 2
+9360 1 2
+9361 1 2
+9362 1 2
+9363 1 2
+9364 1 2
+9365 1 2
+9366 1 2
+9367 1 2
+9368 1 2
+9369 1 2
+9370 1 2
+9371 1 2
+9372 1 2
+9373 1 2
+9374 1 2
+9375 1 2
+9376 1 2
+9377 1 2
+9378 1 2
+9379 1 2
+9380 1 2
+9381 1 2
+9382 1 2
+9383 1 2
+9384 1 2
+9385 1 2
+9386 1 2
+9387 1 2
+9388 1 2
+9389 1 2
+9390 1 2
+9391 1 2
+9392 1 2
+9393 1 2
+9394 1 2
+9395 1 2
+9396 1 2
+9397 1 2
+9398 1 2
+9399 1 2
+9400 1 2
+9401 1 2
+9402 1 2
+9403 1 2
+9404 1 2
+9405 1 2
+9406 1 2
+9407 1 2
+9408 1 2
+9409 1 2
+9410 1 2
+9411 1 2
+9412 1 2
+9413 1 2
+9414 1 2
+9415 1 2
+9416 1 2
+9417 1 2
+9418 1 2
+9419 1 2
+9420 1 2
+9421 1 2
+9422 1 2
+9423 1 2
+9424 1 2
+9425 1 2
+9426 1 2
+9427 1 2
+9428 1 2
+9429 1 2
+9430 1 2
+9431 1 2
+9432 1 2
+9433 1 2
+9434 1 2
+9435 1 2
+9436 1 2
+9437 1 2
+9438 1 2
+9439 1 2
+9440 1 2
+9441 1 2
+9442 1 2
+9443 1 2
+9444 1 2
+9445 1 2
+9446 1 2
+9447 1 2
+9448 1 2
+9449 1 2
+9450 1 2
+9451 1 2
+9452 1 2
+9453 1 2
+9454 1 2
+9455 1 2
+9456 1 2
+9457 1 2
+9458 1 2
+9459 1 2
+9460 1 2
+9461 1 2
+9462 1 2
+9463 1 2
+9464 1 2
+9465 1 2
+9466 1 2
+9467 1 2
+9468 1 2
+9469 1 2
+9470 1 2
+9471 1 2
+9472 1 2
+9473 1 2
+9474 1 2
+9475 1 2
+9476 1 2
+9477 1 2
+9478 1 2
+9479 1 2
+9480 1 2
+9481 1 2
+9482 1 2
+9483 1 2
+9484 1 2
+9485 1 2
+9486 1 2
+9487 1 2
+9488 1 2
+9489 1 2
+9490 1 2
+9491 1 2
+9492 1 2
+9493 1 2
+9494 1 2
+9495 1 2
+9496 1 2
+9497 1 2
+9498 1 2
+9499 1 2
+9500 1 2
+9501 1 2
+9502 1 2
+9503 1 2
+9504 1 2
+9505 1 2
+9506 1 2
+9507 1 2
+9508 1 2
+9509 1 2
+9510 1 2
+9511 1 2
+9512 1 2
+9513 1 2
+9514 1 2
+9515 1 2
+9516 1 2
+9517 1 2
+9518 1 2
+9519 1 2
+9520 1 2
+9521 1 2
+9522 1 2
+9523 1 2
+9524 1 2
+9525 1 2
+9526 1 2
+9527 1 2
+9528 1 2
+9529 1 2
+9530 1 2
+9531 1 2
+9532 1 2
+9533 1 2
+9534 1 2
+9535 1 2
+9536 1 2
+9537 1 2
+9538 1 2
+9539 1 2
+9540 1 2
+9541 1 2
+9542 1 2
+9543 1 2
+9544 1 2
+9545 1 2
+9546 1 2
+9547 1 2
+9548 1 2
+9549 1 2
+9550 1 2
+9551 1 2
+9552 1 2
+9553 1 2
+9554 1 2
+9555 1 2
+9556 1 2
+9557 1 2
+9558 1 2
+9559 1 2
+9560 1 2
+9561 1 2
+9562 1 2
+9563 1 2
+9564 1 2
+9565 1 2
+9566 1 2
+9567 1 2
+9568 1 2
+9569 1 2
+9570 1 2
+9571 1 2
+9572 1 2
+9573 1 2
+9574 1 2
+9575 1 2
+9576 1 2
+9577 1 2
+9578 1 2
+9579 1 2
+9580 1 2
+9581 1 2
+9582 1 2
+9583 1 2
+9584 1 2
+9585 1 2
+9586 1 2
+9587 1 2
+9588 1 2
+9589 1 2
+9590 1 2
+9591 1 2
+9592 1 2
+9593 1 2
+9594 1 2
+9595 1 2
+9596 1 2
+9597 1 2
+9598 1 2
+9599 1 2
+9600 1 2
+9601 1 2
+9602 1 2
+9603 1 2
+9604 1 2
+9605 1 2
+9606 1 2
+9607 1 2
+9608 1 2
+9609 1 2
+9610 1 2
+9611 1 2
+9612 1 2
+9613 1 2
+9614 1 2
+9615 1 2
+9616 1 2
+9617 1 2
+9618 1 2
+9619 1 2
+9620 1 2
+9621 1 2
+9622 1 2
+9623 1 2
+9624 1 2
+9625 1 2
+9626 1 2
+9627 1 2
+9628 1 2
+9629 1 2
+9630 1 2
+9631 1 2
+9632 1 2
+9633 1 2
+9634 1 2
+9635 1 2
+9636 1 2
+9637 1 2
+9638 1 2
+9639 1 2
+9640 1 2
+9641 1 2
+9642 1 2
+9643 1 2
+9644 1 2
+9645 1 2
+9646 1 2
+9647 1 2
+9648 1 2
+9649 1 2
+9650 1 2
+9651 1 2
+9652 1 2
+9653 1 2
+9654 1 2
+9655 1 2
+9656 1 2
+9657 1 2
+9658 1 2
+9659 1 2
+9660 1 2
+9661 1 2
+9662 1 2
+9663 1 2
+9664 1 2
+9665 1 2
+9666 1 2
+9667 1 2
+9668 1 2
+9669 1 2
+9670 1 2
+9671 1 2
+9672 1 2
+9673 1 2
+9674 1 2
+9675 1 2
+9676 1 2
+9677 1 2
+9678 1 2
+9679 1 2
+9680 1 2
+9681 1 2
+9682 1 2
+9683 1 2
+9684 1 2
+9685 1 2
+9686 1 2
+9687 1 2
+9688 1 2
+9689 1 2
+9690 1 2
+9691 1 2
+9692 1 2
+9693 1 2
+9694 1 2
+9695 1 2
+9696 1 2
+9697 1 2
+9698 1 2
+9699 1 2
+9700 1 2
+9701 1 2
+9702 1 2
+9703 1 2
+9704 1 2
+9705 1 2
+9706 1 2
+9707 1 2
+9708 1 2
+9709 1 2
+9710 1 2
+9711 1 2
+9712 1 2
+9713 1 2
+9714 1 2
+9715 1 2
+9716 1 2
+9717 1 2
+9718 1 2
+9719 1 2
+9720 1 2
+9721 1 2
+9722 1 2
+9723 1 2
+9724 1 2
+9725 1 2
+9726 1 2
+9727 1 2
+9728 1 2
+9729 1 2
+9730 1 2
+9731 1 2
+9732 1 2
+9733 1 2
+9734 1 2
+9735 1 2
+9736 1 2
+9737 1 2
+9738 1 2
+9739 1 2
+9740 1 2
+9741 1 2
+9742 1 2
+9743 1 2
+9744 1 2
+9745 1 2
+9746 1 2
+9747 1 2
+9748 1 2
+9749 1 2
+9750 1 2
+9751 1 2
+9752 1 2
+9753 1 2
+9754 1 2
+9755 1 2
+9756 1 2
+9757 1 2
+9758 1 2
+9759 1 2
+9760 1 2
+9761 1 2
+9762 1 2
+9763 1 2
+9764 1 2
+9765 1 2
+9766 1 2
+9767 1 2
+9768 1 2
+9769 1 2
+9770 1 2
+9771 1 2
+9772 1 2
+9773 1 2
+9774 1 2
+9775 1 2
+9776 1 2
+9777 1 2
+9778 1 2
+9779 1 2
+9780 1 2
+9781 1 2
+9782 1 2
+9783 1 2
+9784 1 2
+9785 1 2
+9786 1 2
+9787 1 2
+9788 1 2
+9789 1 2
+9790 1 2
+9791 1 2
+9792 1 2
+9793 1 2
+9794 1 2
+9795 1 2
+9796 1 2
+9797 1 2
+9798 1 2
+9799 1 2
+9800 1 2
+9801 1 2
+9802 1 2
+9803 1 2
+9804 1 2
+9805 1 2
+9806 1 2
+9807 1 2
+9808 1 2
+9809 1 2
+9810 1 2
+9811 1 2
+9812 1 2
+9813 1 2
+9814 1 2
+9815 1 2
+9816 1 2
+9817 1 2
+9818 1 2
+9819 1 2
+9820 1 2
+9821 1 2
+9822 1 2
+9823 1 2
+9824 1 2
+9825 1 2
+9826 1 2
+9827 1 2
+9828 1 2
+9829 1 2
+9830 1 2
+9831 1 2
+9832 1 2
+9833 1 2
+9834 1 2
+9835 1 2
+9836 1 2
+9837 1 2
+9838 1 2
+9839 1 2
+9840 1 2
+9841 1 2
+9842 1 2
+9843 1 2
+9844 1 2
+9845 1 2
+9846 1 2
+9847 1 2
+9848 1 2
+9849 1 2
+9850 1 2
+9851 1 2
+9852 1 2
+9853 1 2
+9854 1 2
+9855 1 2
+9856 1 2
+9857 1 2
+9858 1 2
+9859 1 2
+9860 1 2
+9861 1 2
+9862 1 2
+9863 1 2
+9864 1 2
+9865 1 2
+9866 1 2
+9867 1 2
+9868 1 2
+9869 1 2
+9870 1 2
+9871 1 2
+9872 1 2
+9873 1 2
+9874 1 2
+9875 1 2
+9876 1 2
+9877 1 2
+9878 1 2
+9879 1 2
+9880 1 2
+9881 1 2
+9882 1 2
+9883 1 2
+9884 1 2
+9885 1 2
+9886 1 2
+9887 1 2
+9888 1 2
+9889 1 2
+9890 1 2
+9891 1 2
+9892 1 2
+9893 1 2
+9894 1 2
+9895 1 2
+9896 1 2
+9897 1 2
+9898 1 2
+9899 1 2
+9900 1 2
+9901 1 2
+9902 1 2
+9903 1 2
+9904 1 2
+9905 1 2
+9906 1 2
+9907 1 2
+9908 1 2
+9909 1 2
+9910 1 2
+9911 1 2
+9912 1 2
+9913 1 2
+9914 1 2
+9915 1 2
+9916 1 2
+9917 1 2
+9918 1 2
+9919 1 2
+9920 1 2
+9921 1 2
+9922 1 2
+9923 1 2
+9924 1 2
+9925 1 2
+9926 1 2
+9927 1 2
+9928 1 2
+9929 1 2
+9930 1 2
+9931 1 2
+9932 1 2
+9933 1 2
+9934 1 2
+9935 1 2
+9936 1 2
+9937 1 2
+9938 1 2
+9939 1 2
+9940 1 2
+9941 1 2
+9942 1 2
+9943 1 2
+9944 1 2
+9945 1 2
+9946 1 2
+9947 1 2
+9948 1 2
+9949 1 2
+9950 1 2
+9951 1 2
+9952 1 2
+9953 1 2
+9954 1 2
+9955 1 2
+9956 1 2
+9957 1 2
+9958 1 2
+9959 1 2
+9960 1 2
+9961 1 2
+9962 1 2
+9963 1 2
+9964 1 2
+9965 1 2
+9966 1 2
+9967 1 2
+9968 1 2
+9969 1 2
+9970 1 2
+9971 1 2
+9972 1 2
+9973 1 2
+9974 1 2
+9975 1 2
+9976 1 2
+9977 1 2
+9978 1 2
+9979 1 2
+9980 1 2
+9981 1 2
+9982 1 2
+9983 1 2
+9984 1 2
+9985 1 2
+9986 1 2
+9987 1 2
+9988 1 2
+9989 1 2
+9990 1 2
+9991 1 2
+9992 1 2
+9993 1 2
+9994 1 2
+9995 1 2
+9996 1 2
+9997 1 2
+9998 1 2
+9999 1 2
+10000 1 2
+10001 1 2
+10002 1 2
+10003 1 2
+10004 1 2
+10005 1 2
+10006 1 2
+10007 1 2
+10008 1 2
+10009 1 2
+10010 1 2
+10011 1 2
+10012 1 2
+10013 1 2
+10014 1 2
+10015 1 2
+10016 1 2
+10017 1 2
+10018 1 2
+10019 1 2
+10020 1 2
+10021 1 2
+10022 1 2
+10023 1 2
+10024 1 2
+10025 1 2
+10026 1 2
+10027 1 2
+10028 1 2
+10029 1 2
+10030 1 2
+10031 1 2
+10032 1 2
+10033 1 2
+10034 1 2
+10035 1 2
+10036 1 2
+10037 1 2
+10038 1 2
+10039 1 2
+10040 1 2
+10041 1 2
+10042 1 2
+10043 1 2
+10044 1 2
+10045 1 2
+10046 1 2
+10047 1 2
+10048 1 2
+10049 1 2
+10050 1 2
+10051 1 2
+10052 1 2
+10053 1 2
+10054 1 2
+10055 1 2
+10056 1 2
+10057 1 2
+10058 1 2
+10059 1 2
+10060 1 2
+10061 1 2
+10062 1 2
+10063 1 2
+10064 1 2
+10065 1 2
+10066 1 2
+10067 1 2
+10068 1 2
+10069 1 2
+10070 1 2
+10071 1 2
+10072 1 2
+10073 1 2
+10074 1 2
+10075 1 2
+10076 1 2
+10077 1 2
+10078 1 2
+10079 1 2
+10080 1 2
+10081 1 2
+10082 1 2
+10083 1 2
+10084 1 2
+10085 1 2
+10086 1 2
+10087 1 2
+10088 1 2
+10089 1 2
+10090 1 2
+10091 1 2
+10092 1 2
+10093 1 2
+10094 1 2
+10095 1 2
+10096 1 2
+10097 1 2
+10098 1 2
+10099 1 2
+10100 1 2
+10101 1 2
+10102 1 2
+10103 1 2
+10104 1 2
+10105 1 2
+10106 1 2
+10107 1 2
+10108 1 2
+10109 1 2
+10110 1 2
+10111 1 2
+10112 1 2
+10113 1 2
+10114 1 2
+10115 1 2
+10116 1 2
+10117 1 2
+10118 1 2
+10119 1 2
+10120 1 2
+10121 1 2
+10122 1 2
+10123 1 2
+10124 1 2
+10125 1 2
+10126 1 2
+10127 1 2
+10128 1 2
+10129 1 2
+10130 1 2
+10131 1 2
+10132 1 2
+10133 1 2
+10134 1 2
+10135 1 2
+10136 1 2
+10137 1 2
+10138 1 2
+10139 1 2
+10140 1 2
+10141 1 2
+10142 1 2
+10143 1 2
+10144 1 2
+10145 1 2
+10146 1 2
+10147 1 2
+10148 1 2
+10149 1 2
+10150 1 2
+10151 1 2
+10152 1 2
+10153 1 2
+10154 1 2
+10155 1 2
+10156 1 2
+10157 1 2
+10158 1 2
+10159 1 2
+10160 1 2
+10161 1 2
+10162 1 2
+10163 1 2
+10164 1 2
+10165 1 2
+10166 1 2
+10167 1 2
+10168 1 2
+10169 1 2
+10170 1 2
+10171 1 2
+10172 1 2
+10173 1 2
+10174 1 2
+10175 1 2
+10176 1 2
+10177 1 2
+10178 1 2
+10179 1 2
+10180 1 2
+10181 1 2
+10182 1 2
+10183 1 2
+10184 1 2
+10185 1 2
+10186 1 2
+10187 1 2
+10188 1 2
+10189 1 2
+10190 1 2
+10191 1 2
+10192 1 2
+10193 1 2
+10194 1 2
+10195 1 2
+10196 1 2
+10197 1 2
+10198 1 2
+10199 1 2
+10200 1 2
+10201 1 2
+10202 1 2
+10203 1 2
+10204 1 2
+10205 1 2
+10206 1 2
+10207 1 2
+10208 1 2
+10209 1 2
+10210 1 2
+10211 1 2
+10212 1 2
+10213 1 2
+10214 1 2
+10215 1 2
+10216 1 2
+10217 1 2
+10218 1 2
+10219 1 2
+10220 1 2
+10221 1 2
+10222 1 2
+10223 1 2
+10224 1 2
+10225 1 2
+10226 1 2
+10227 1 2
+10228 1 2
+10229 1 2
+10230 1 2
+10231 1 2
+10232 1 2
+10233 1 2
+10234 1 2
+10235 1 2
+10236 1 2
+10237 1 2
+10238 1 2
+10239 1 2
+10240 1 2
+10241 1 2
+10242 1 2
+10243 1 2
+10244 1 2
+10245 1 2
+10246 1 2
+10247 1 2
+10248 1 2
+10249 1 2
+10250 1 2
+10251 1 2
+10252 1 2
+10253 1 2
+10254 1 2
+10255 1 2
+10256 1 2
+10257 1 2
+10258 1 2
+10259 1 2
+10260 1 2
+10261 1 2
+10262 1 2
+10263 1 2
+10264 1 2
+10265 1 2
+10266 1 2
+10267 1 2
+10268 1 2
+10269 1 2
+10270 1 2
+10271 1 2
+10272 1 2
+10273 1 2
+10274 1 2
+10275 1 2
+10276 1 2
+10277 1 2
+10278 1 2
+10279 1 2
+10280 1 2
+10281 1 2
+10282 1 2
+10283 1 2
+10284 1 2
+10285 1 2
+10286 1 2
+10287 1 2
+10288 1 2
+10289 1 2
+10290 1 2
+10291 1 2
+10292 1 2
+10293 1 2
+10294 1 2
+10295 1 2
+10296 1 2
+10297 1 2
+10298 1 2
+10299 1 2
+10300 1 2
+10301 1 2
+10302 1 2
+10303 1 2
+10304 1 2
+10305 1 2
+10306 1 2
+10307 1 2
+10308 1 2
+10309 1 2
+10310 1 2
+10311 1 2
+10312 1 2
+10313 1 2
+10314 1 2
+10315 1 2
+10316 1 2
+10317 1 2
+10318 1 2
+10319 1 2
+10320 1 2
+10321 1 2
+10322 1 2
+10323 1 2
+10324 1 2
+10325 1 2
+10326 1 2
+10327 1 2
+10328 1 2
+10329 1 2
+10330 1 2
+10331 1 2
+10332 1 2
+10333 1 2
+10334 1 2
+10335 1 2
+10336 1 2
+10337 1 2
+10338 1 2
+10339 1 2
+10340 1 2
+10341 1 2
+10342 1 2
+10343 1 2
+10344 1 2
+10345 1 2
+10346 1 2
+10347 1 2
+10348 1 2
+10349 1 2
+10350 1 2
+10351 1 2
+10352 1 2
+10353 1 2
+10354 1 2
+10355 1 2
+10356 1 2
+10357 1 2
+10358 1 2
+10359 1 2
+10360 1 2
+10361 1 2
+10362 1 2
+10363 1 2
+10364 1 2
+10365 1 2
+10366 1 2
+10367 1 2
+10368 1 2
+10369 1 2
+10370 1 2
+10371 1 2
+10372 1 2
+10373 1 2
+10374 1 2
+10375 1 2
+10376 1 2
+10377 1 2
+10378 1 2
+10379 1 2
+10380 1 2
+10381 1 2
+10382 1 2
+10383 1 2
+10384 1 2
+10385 1 2
+10386 1 2
+10387 1 2
+10388 1 2
+10389 1 2
+10390 1 2
+10391 1 2
+10392 1 2
+10393 1 2
+10394 1 2
+10395 1 2
+10396 1 2
+10397 1 2
+10398 1 2
+10399 1 2
+10400 1 2
+10401 1 2
+10402 1 2
+10403 1 2
+10404 1 2
+10405 1 2
+10406 1 2
+10407 1 2
+10408 1 2
+10409 1 2
+10410 1 2
+10411 1 2
+10412 1 2
+10413 1 2
+10414 1 2
+10415 1 2
+10416 1 2
+10417 1 2
+10418 1 2
+10419 1 2
+10420 1 2
+10421 1 2
+10422 1 2
+10423 1 2
+10424 1 2
+10425 1 2
+10426 1 2
+10427 1 2
+10428 1 2
+10429 1 2
+10430 1 2
+10431 1 2
+10432 1 2
+10433 1 2
+10434 1 2
+10435 1 2
+10436 1 2
+10437 1 2
+10438 1 2
+10439 1 2
+10440 1 2
+10441 1 2
+10442 1 2
+10443 1 2
+10444 1 2
+10445 1 2
+10446 1 2
+10447 1 2
+10448 1 2
+10449 1 2
+10450 1 2
+10451 1 2
+10452 1 2
+10453 1 2
+10454 1 2
+10455 1 2
+10456 1 2
+10457 1 2
+10458 1 2
+10459 1 2
+10460 1 2
+10461 1 2
+10462 1 2
+10463 1 2
+10464 1 2
+10465 1 2
+10466 1 2
+10467 1 2
+10468 1 2
+10469 1 2
+10470 1 2
+10471 1 2
+10472 1 2
+10473 1 2
+10474 1 2
+10475 1 2
+10476 1 2
+10477 1 2
+10478 1 2
+10479 1 2
+10480 1 2
+10481 1 2
+10482 1 2
+10483 1 2
+10484 1 2
+10485 1 2
+10486 1 2
+10487 1 2
+10488 1 2
+10489 1 2
+10490 1 2
+10491 1 2
+10492 1 2
+10493 1 2
+10494 1 2
+10495 1 2
+10496 1 2
+10497 1 2
+10498 1 2
+10499 1 2
+10500 1 2
+10501 1 2
+10502 1 2
+10503 1 2
+10504 1 2
+10505 1 2
+10506 1 2
+10507 1 2
+10508 1 2
+10509 1 2
+10510 1 2
+10511 1 2
+10512 1 2
+10513 1 2
+10514 1 2
+10515 1 2
+10516 1 2
+10517 1 2
+10518 1 2
+10519 1 2
+10520 1 2
+10521 1 2
+10522 1 2
+10523 1 2
+10524 1 2
+10525 1 2
+10526 1 2
+10527 1 2
+10528 1 2
+10529 1 2
+10530 1 2
+10531 1 2
+10532 1 2
+10533 1 2
+10534 1 2
+10535 1 2
+10536 1 2
+10537 1 2
+10538 1 2
+10539 1 2
+10540 1 2
+10541 1 2
+10542 1 2
+10543 1 2
+10544 1 2
+10545 1 2
+10546 1 2
+10547 1 2
+10548 1 2
+10549 1 2
+10550 1 2
+10551 1 2
+10552 1 2
+10553 1 2
+10554 1 2
+10555 1 2
+10556 1 2
+10557 1 2
+10558 1 2
+10559 1 2
+10560 1 2
+10561 1 2
+10562 1 2
+10563 1 2
+10564 1 2
+10565 1 2
+10566 1 2
+10567 1 2
+10568 1 2
+10569 1 2
+10570 1 2
+10571 1 2
+10572 1 2
+10573 1 2
+10574 1 2
+10575 1 2
+10576 1 2
+10577 1 2
+10578 1 2
+10579 1 2
+10580 1 2
+10581 1 2
+10582 1 2
+10583 1 2
+10584 1 2
+10585 1 2
+10586 1 2
+10587 1 2
+10588 1 2
+10589 1 2
+10590 1 2
+10591 1 2
+10592 1 2
+10593 1 2
+10594 1 2
+10595 1 2
+10596 1 2
+10597 1 2
+10598 1 2
+10599 1 2
+10600 1 2
+10601 1 2
+10602 1 2
+10603 1 2
+10604 1 2
+10605 1 2
+10606 1 2
+10607 1 2
+10608 1 2
+10609 1 2
+10610 1 2
+10611 1 2
+10612 1 2
+10613 1 2
+10614 1 2
+10615 1 2
+10616 1 2
+10617 1 2
+10618 1 2
+10619 1 2
+10620 1 2
+10621 1 2
+10622 1 2
+10623 1 2
+10624 1 2
+10625 1 2
+10626 1 2
+10627 1 2
+10628 1 2
+10629 1 2
+10630 1 2
+10631 1 2
+10632 1 2
+10633 1 2
+10634 1 2
+10635 1 2
+10636 1 2
+10637 1 2
+10638 1 2
+10639 1 2
+10640 1 2
+10641 1 2
+10642 1 2
+10643 1 2
+10644 1 2
+10645 1 2
+10646 1 2
+10647 1 2
+10648 1 2
+10649 1 2
+10650 1 2
+10651 1 2
+10652 1 2
+10653 1 2
+10654 1 2
+10655 1 2
+10656 1 2
+10657 1 2
+10658 1 2
+10659 1 2
+10660 1 2
+10661 1 2
+10662 1 2
+10663 1 2
+10664 1 2
+10665 1 2
+10666 1 2
+10667 1 2
+10668 1 2
+10669 1 2
+10670 1 2
+10671 1 2
+10672 1 2
+10673 1 2
+10674 1 2
+10675 1 2
+10676 1 2
+10677 1 2
+10678 1 2
+10679 1 2
+10680 1 2
+10681 1 2
+10682 1 2
+10683 1 2
+10684 1 2
+10685 1 2
+10686 1 2
+10687 1 2
+10688 1 2
+10689 1 2
+10690 1 2
+10691 1 2
+10692 1 2
+10693 1 2
+10694 1 2
+10695 1 2
+10696 1 2
+10697 1 2
+10698 1 2
+10699 1 2
+10700 1 2
+10701 1 2
+10702 1 2
+10703 1 2
+10704 1 2
+10705 1 2
+10706 1 2
+10707 1 2
+10708 1 2
+10709 1 2
+10710 1 2
+10711 1 2
+10712 1 2
+10713 1 2
+10714 1 2
+10715 1 2
+10716 1 2
+10717 1 2
+10718 1 2
+10719 1 2
+10720 1 2
+10721 1 2
+10722 1 2
+10723 1 2
+10724 1 2
+10725 1 2
+10726 1 2
+10727 1 2
+10728 1 2
+10729 1 2
+10730 1 2
+10731 1 2
+10732 1 2
+10733 1 2
+10734 1 2
+10735 1 2
+10736 1 2
+10737 1 2
+10738 1 2
+10739 1 2
+10740 1 2
+10741 1 2
+10742 1 2
+10743 1 2
+10744 1 2
+10745 1 2
+10746 1 2
+10747 1 2
+10748 1 2
+10749 1 2
+10750 1 2
+10751 1 2
+10752 1 2
+10753 1 2
+10754 1 2
+10755 1 2
+10756 1 2
+10757 1 2
+10758 1 2
+10759 1 2
+10760 1 2
+10761 1 2
+10762 1 2
+10763 1 2
+10764 1 2
+10765 1 2
+10766 1 2
+10767 1 2
+10768 1 2
+10769 1 2
+10770 1 2
+10771 1 2
+10772 1 2
+10773 1 2
+10774 1 2
+10775 1 2
+10776 1 2
+10777 1 2
+10778 1 2
+10779 1 2
+10780 1 2
+10781 1 2
+10782 1 2
+10783 1 2
+10784 1 2
+10785 1 2
+10786 1 2
+10787 1 2
+10788 1 2
+10789 1 2
+10790 1 2
+10791 1 2
+10792 1 2
+10793 1 2
+10794 1 2
+10795 1 2
+10796 1 2
+10797 1 2
+10798 1 2
+10799 1 2
+10800 1 2
+10801 1 2
+10802 1 2
+10803 1 2
+10804 1 2
+10805 1 2
+10806 1 2
+10807 1 2
+10808 1 2
+10809 1 2
+10810 1 2
+10811 1 2
+10812 1 2
+10813 1 2
+10814 1 2
+10815 1 2
+10816 1 2
+10817 1 2
+10818 1 2
+10819 1 2
+10820 1 2
+10821 1 2
+10822 1 2
+10823 1 2
+10824 1 2
+10825 1 2
+10826 1 2
+10827 1 2
+10828 1 2
+10829 1 2
+10830 1 2
+10831 1 2
+10832 1 2
+10833 1 2
+10834 1 2
+10835 1 2
+10836 1 2
+10837 1 2
+10838 1 2
+10839 1 2
+10840 1 2
+10841 1 2
+10842 1 2
+10843 1 2
+10844 1 2
+10845 1 2
+10846 1 2
+10847 1 2
+10848 1 2
+10849 1 2
+10850 1 2
+10851 1 2
+10852 1 2
+10853 1 2
+10854 1 2
+10855 1 2
+10856 1 2
+10857 1 2
+10858 1 2
+10859 1 2
+10860 1 2
+10861 1 2
+10862 1 2
+10863 1 2
+10864 1 2
+10865 1 2
+10866 1 2
+10867 1 2
+10868 1 2
+10869 1 2
+10870 1 2
+10871 1 2
+10872 1 2
+10873 1 2
+10874 1 2
+10875 1 2
+10876 1 2
+10877 1 2
+10878 1 2
+10879 1 2
+10880 1 2
+10881 1 2
+10882 1 2
+10883 1 2
+10884 1 2
+10885 1 2
+10886 1 2
+10887 1 2
+10888 1 2
+10889 1 2
+10890 1 2
+10891 1 2
+10892 1 2
+10893 1 2
+10894 1 2
+10895 1 2
+10896 1 2
+10897 1 2
+10898 1 2
+10899 1 2
+10900 1 2
+10901 1 2
+10902 1 2
+10903 1 2
+10904 1 2
+10905 1 2
+10906 1 2
+10907 1 2
+10908 1 2
+10909 1 2
+10910 1 2
+10911 1 2
+10912 1 2
+10913 1 2
+10914 1 2
+10915 1 2
+10916 1 2
+10917 1 2
+10918 1 2
+10919 1 2
+10920 1 2
+10921 1 2
+10922 1 2
+10923 1 2
+10924 1 2
+10925 1 2
+10926 1 2
+10927 1 2
+10928 1 2
+10929 1 2
+10930 1 2
+10931 1 2
+10932 1 2
+10933 1 2
+10934 1 2
+10935 1 2
+10936 1 2
+10937 1 2
+10938 1 2
+10939 1 2
+10940 1 2
+10941 1 2
+10942 1 2
+10943 1 2
+10944 1 2
+10945 1 2
+10946 1 2
+10947 1 2
+10948 1 2
+10949 1 2
+10950 1 2
+10951 1 2
+10952 1 2
+10953 1 2
+10954 1 2
+10955 1 2
+10956 1 2
+10957 1 2
+10958 1 2
+10959 1 2
+10960 1 2
+10961 1 2
+10962 1 2
+10963 1 2
+10964 1 2
+10965 1 2
+10966 1 2
+10967 1 2
+10968 1 2
+10969 1 2
+10970 1 2
+10971 1 2
+10972 1 2
+10973 1 2
+10974 1 2
+10975 1 2
+10976 1 2
+10977 1 2
+10978 1 2
+10979 1 2
+10980 1 2
+10981 1 2
+10982 1 2
+10983 1 2
+10984 1 2
+10985 1 2
+10986 1 2
+10987 1 2
+10988 1 2
+10989 1 2
+10990 1 2
+10991 1 2
+10992 1 2
+10993 1 2
+10994 1 2
+10995 1 2
+10996 1 2
+10997 1 2
+10998 1 2
+10999 1 2
+11000 1 2
+11001 1 2
+11002 1 2
+11003 1 2
+11004 1 2
+11005 1 2
+11006 1 2
+11007 1 2
+11008 1 2
+11009 1 2
+11010 1 2
+11011 1 2
+11012 1 2
+11013 1 2
+11014 1 2
+11015 1 2
+11016 1 2
+11017 1 2
+11018 1 2
+11019 1 2
+11020 1 2
+11021 1 2
+11022 1 2
+11023 1 2
+11024 1 2
+11025 1 2
+11026 1 2
+11027 1 2
+11028 1 2
+11029 1 2
+11030 1 2
+11031 1 2
+11032 1 2
+11033 1 2
+11034 1 2
+11035 1 2
+11036 1 2
+11037 1 2
+11038 1 2
+11039 1 2
+11040 1 2
+11041 1 2
+11042 1 2
+11043 1 2
+11044 1 2
+11045 1 2
+11046 1 2
+11047 1 2
+11048 1 2
+11049 1 2
+11050 1 2
+11051 1 2
+11052 1 2
+11053 1 2
+11054 1 2
+11055 1 2
+11056 1 2
+11057 1 2
+11058 1 2
+11059 1 2
+11060 1 2
+11061 1 2
+11062 1 2
+11063 1 2
+11064 1 2
+11065 1 2
+11066 1 2
+11067 1 2
+11068 1 2
+11069 1 2
+11070 1 2
+11071 1 2
+11072 1 2
+11073 1 2
+11074 1 2
+11075 1 2
+11076 1 2
+11077 1 2
+11078 1 2
+11079 1 2
+11080 1 2
+11081 1 2
+11082 1 2
+11083 1 2
+11084 1 2
+11085 1 2
+11086 1 2
+11087 1 2
+11088 1 2
+11089 1 2
+11090 1 2
+11091 1 2
+11092 1 2
+11093 1 2
+11094 1 2
+11095 1 2
+11096 1 2
+11097 1 2
+11098 1 2
+11099 1 2
+11100 1 2
+11101 1 2
+11102 1 2
+11103 1 2
+11104 1 2
+11105 1 2
+11106 1 2
+11107 1 2
+11108 1 2
+11109 1 2
+11110 1 2
+11111 1 2
+11112 1 2
+11113 1 2
+11114 1 2
+11115 1 2
+11116 1 2
+11117 1 2
+11118 1 2
+11119 1 2
+11120 1 2
+11121 1 2
+11122 1 2
+11123 1 2
+11124 1 2
+11125 1 2
+11126 1 2
+11127 1 2
+11128 1 2
+11129 1 2
+11130 1 2
+11131 1 2
+11132 1 2
+11133 1 2
+11134 1 2
+11135 1 2
+11136 1 2
+11137 1 2
+11138 1 2
+11139 1 2
+11140 1 2
+11141 1 2
+11142 1 2
+11143 1 2
+11144 1 2
+11145 1 2
+11146 1 2
+11147 1 2
+11148 1 2
+11149 1 2
+11150 1 2
+11151 1 2
+11152 1 2
+11153 1 2
+11154 1 2
+11155 1 2
+11156 1 2
+11157 1 2
+11158 1 2
+11159 1 2
+11160 1 2
+11161 1 2
+11162 1 2
+11163 1 2
+11164 1 2
+11165 1 2
+11166 1 2
+11167 1 2
+11168 1 2
+11169 1 2
+11170 1 2
+11171 1 2
+11172 1 2
+11173 1 2
+11174 1 2
+11175 1 2
+11176 1 2
+11177 1 2
+11178 1 2
+11179 1 2
+11180 1 2
+11181 1 2
+11182 1 2
+11183 1 2
+11184 1 2
+11185 1 2
+11186 1 2
+11187 1 2
+11188 1 2
+11189 1 2
+11190 1 2
+11191 1 2
+11192 1 2
+11193 1 2
+11194 1 2
+11195 1 2
+11196 1 2
+11197 1 2
+11198 1 2
+11199 1 2
+11200 1 2
+11201 1 2
+11202 1 2
+11203 1 2
+11204 1 2
+11205 1 2
+11206 1 2
+11207 1 2
+11208 1 2
+11209 1 2
+11210 1 2
+11211 1 2
+11212 1 2
+11213 1 2
+11214 1 2
+11215 1 2
+11216 1 2
+11217 1 2
+11218 1 2
+11219 1 2
+11220 1 2
+11221 1 2
+11222 1 2
+11223 1 2
+11224 1 2
+11225 1 2
+11226 1 2
+11227 1 2
+11228 1 2
+11229 1 2
+11230 1 2
+11231 1 2
+11232 1 2
+11233 1 2
+11234 1 2
+11235 1 2
+11236 1 2
+11237 1 2
+11238 1 2
+11239 1 2
+11240 1 2
+11241 1 2
+11242 1 2
+11243 1 2
+11244 1 2
+11245 1 2
+11246 1 2
+11247 1 2
+11248 1 2
+11249 1 2
+11250 1 2
+11251 1 2
+11252 1 2
+11253 1 2
+11254 1 2
+11255 1 2
+11256 1 2
+11257 1 2
+11258 1 2
+11259 1 2
+11260 1 2
+11261 1 2
+11262 1 2
+11263 1 2
+11264 1 2
+11265 1 2
+11266 1 2
+11267 1 2
+11268 1 2
+11269 1 2
+11270 1 2
+11271 1 2
+11272 1 2
+11273 1 2
+11274 1 2
+11275 1 2
+11276 1 2
+11277 1 2
+11278 1 2
+11279 1 2
+11280 1 2
+11281 1 2
+11282 1 2
+11283 1 2
+11284 1 2
+11285 1 2
+11286 1 2
+11287 1 2
+11288 1 2
+11289 1 2
+11290 1 2
+11291 1 2
+11292 1 2
+11293 1 2
+11294 1 2
+11295 1 2
+11296 1 2
+11297 1 2
+11298 1 2
+11299 1 2
+11300 1 2
+11301 1 2
+11302 1 2
+11303 1 2
+11304 1 2
+11305 1 2
+11306 1 2
+11307 1 2
+11308 1 2
+11309 1 2
+11310 1 2
+11311 1 2
+11312 1 2
+11313 1 2
+11314 1 2
+11315 1 2
+11316 1 2
+11317 1 2
+11318 1 2
+11319 1 2
+11320 1 2
+11321 1 2
+11322 1 2
+11323 1 2
+11324 1 2
+11325 1 2
+11326 1 2
+11327 1 2
+11328 1 2
+11329 1 2
+11330 1 2
+11331 1 2
+11332 1 2
+11333 1 2
+11334 1 2
+11335 1 2
+11336 1 2
+11337 1 2
+11338 1 2
+11339 1 2
+11340 1 2
+11341 1 2
+11342 1 2
+11343 1 2
+11344 1 2
+11345 1 2
+11346 1 2
+11347 1 2
+11348 1 2
+11349 1 2
+11350 1 2
+11351 1 2
+11352 1 2
+11353 1 2
+11354 1 2
+11355 1 2
+11356 1 2
+11357 1 2
+11358 1 2
+11359 1 2
+11360 1 2
+11361 1 2
+11362 1 2
+11363 1 2
+11364 1 2
+11365 1 2
+11366 1 2
+11367 1 2
+11368 1 2
+11369 1 2
+11370 1 2
+11371 1 2
+11372 1 2
+11373 1 2
+11374 1 2
+11375 1 2
+11376 1 2
+11377 1 2
+11378 1 2
+11379 1 2
+11380 1 2
+11381 1 2
+11382 1 2
+11383 1 2
+11384 1 2
+11385 1 2
+11386 1 2
+11387 1 2
+11388 1 2
+11389 1 2
+11390 1 2
+11391 1 2
+11392 1 2
+11393 1 2
+11394 1 2
+11395 1 2
+11396 1 2
+11397 1 2
+11398 1 2
+11399 1 2
+11400 1 2
+11401 1 2
+11402 1 2
+11403 1 2
+11404 1 2
+11405 1 2
+11406 1 2
+11407 1 2
+11408 1 2
+11409 1 2
+11410 1 2
+11411 1 2
+11412 1 2
+11413 1 2
+11414 1 2
+11415 1 2
+11416 1 2
+11417 1 2
+11418 1 2
+11419 1 2
+11420 1 2
+11421 1 2
+11422 1 2
+11423 1 2
+11424 1 2
+11425 1 2
+11426 1 2
+11427 1 2
+11428 1 2
+11429 1 2
+11430 1 2
+11431 1 2
+11432 1 2
+11433 1 2
+11434 1 2
+11435 1 2
+11436 1 2
+11437 1 2
+11438 1 2
+11439 1 2
+11440 1 2
+11441 1 2
+11442 1 2
+11443 1 2
+11444 1 2
+11445 1 2
+11446 1 2
+11447 1 2
+11448 1 2
+11449 1 2
+11450 1 2
+11451 1 2
+11452 1 2
+11453 1 2
+11454 1 2
+11455 1 2
+11456 1 2
+11457 1 2
+11458 1 2
+11459 1 2
+11460 1 2
+11461 1 2
+11462 1 2
+11463 1 2
+11464 1 2
+11465 1 2
+11466 1 2
+11467 1 2
+11468 1 2
+11469 1 2
+11470 1 2
+11471 1 2
+11472 1 2
+11473 1 2
+11474 1 2
+11475 1 2
+11476 1 2
+11477 1 2
+11478 1 2
+11479 1 2
+11480 1 2
+11481 1 2
+11482 1 2
+11483 1 2
+11484 1 2
+11485 1 2
+11486 1 2
+11487 1 2
+11488 1 2
+11489 1 2
+11490 1 2
+11491 1 2
+11492 1 2
+11493 1 2
+11494 1 2
+11495 1 2
+11496 1 2
+11497 1 2
+11498 1 2
+11499 1 2
+11500 1 2
+11501 1 2
+11502 1 2
+11503 1 2
+11504 1 2
+11505 1 2
+11506 1 2
+11507 1 2
+11508 1 2
+11509 1 2
+11510 1 2
+11511 1 2
+11512 1 2
+11513 1 2
+11514 1 2
+11515 1 2
+11516 1 2
+11517 1 2
+11518 1 2
+11519 1 2
+11520 1 2
+11521 1 2
+11522 1 2
+11523 1 2
+11524 1 2
+11525 1 2
+11526 1 2
+11527 1 2
+11528 1 2
+11529 1 2
+11530 1 2
+11531 1 2
+11532 1 2
+11533 1 2
+11534 1 2
+11535 1 2
+11536 1 2
+11537 1 2
+11538 1 2
+11539 1 2
+11540 1 2
+11541 1 2
+11542 1 2
+11543 1 2
+11544 1 2
+11545 1 2
+11546 1 2
+11547 1 2
+11548 1 2
+11549 1 2
+11550 1 2
+11551 1 2
+11552 1 2
+11553 1 2
+11554 1 2
+11555 1 2
+11556 1 2
+11557 1 2
+11558 1 2
+11559 1 2
+11560 1 2
+11561 1 2
+11562 1 2
+11563 1 2
+11564 1 2
+11565 1 2
+11566 1 2
+11567 1 2
+11568 1 2
+11569 1 2
+11570 1 2
+11571 1 2
+11572 1 2
+11573 1 2
+11574 1 2
+11575 1 2
+11576 1 2
+11577 1 2
+11578 1 2
+11579 1 2
+11580 1 2
+11581 1 2
+11582 1 2
+11583 1 2
+11584 1 2
+11585 1 2
+11586 1 2
+11587 1 2
+11588 1 2
+11589 1 2
+11590 1 2
+11591 1 2
+11592 1 2
+11593 1 2
+11594 1 2
+11595 1 2
+11596 1 2
+11597 1 2
+11598 1 2
+11599 1 2
+11600 1 2
+11601 1 2
+11602 1 2
+11603 1 2
+11604 1 2
+11605 1 2
+11606 1 2
+11607 1 2
+11608 1 2
+11609 1 2
+11610 1 2
+11611 1 2
+11612 1 2
+11613 1 2
+11614 1 2
+11615 1 2
+11616 1 2
+11617 1 2
+11618 1 2
+11619 1 2
+11620 1 2
+11621 1 2
+11622 1 2
+11623 1 2
+11624 1 2
+11625 1 2
+11626 1 2
+11627 1 2
+11628 1 2
+11629 1 2
+11630 1 2
+11631 1 2
+11632 1 2
+11633 1 2
+11634 1 2
+11635 1 2
+11636 1 2
+11637 1 2
+11638 1 2
+11639 1 2
+11640 1 2
+11641 1 2
+11642 1 2
+11643 1 2
+11644 1 2
+11645 1 2
+11646 1 2
+11647 1 2
+11648 1 2
+11649 1 2
+11650 1 2
+11651 1 2
+11652 1 2
+11653 1 2
+11654 1 2
+11655 1 2
+11656 1 2
+11657 1 2
+11658 1 2
+11659 1 2
+11660 1 2
+11661 1 2
+11662 1 2
+11663 1 2
+11664 1 2
+11665 1 2
+11666 1 2
+11667 1 2
+11668 1 2
+11669 1 2
+11670 1 2
+11671 1 2
+11672 1 2
+11673 1 2
+11674 1 2
+11675 1 2
+11676 1 2
+11677 1 2
+11678 1 2
+11679 1 2
+11680 1 2
+11681 1 2
+11682 1 2
+11683 1 2
+11684 1 2
+11685 1 2
+11686 1 2
+11687 1 2
+11688 1 2
+11689 1 2
+11690 1 2
+11691 1 2
+11692 1 2
+11693 1 2
+11694 1 2
+11695 1 2
+11696 1 2
+11697 1 2
+11698 1 2
+11699 1 2
+11700 1 2
+11701 1 2
+11702 1 2
+11703 1 2
+11704 1 2
+11705 1 2
+11706 1 2
+11707 1 2
+11708 1 2
+11709 1 2
+11710 1 2
+11711 1 2
+11712 1 2
+11713 1 2
+11714 1 2
+11715 1 2
+11716 1 2
+11717 1 2
+11718 1 2
+11719 1 2
+11720 1 2
+11721 1 2
+11722 1 2
+11723 1 2
+11724 1 2
+11725 1 2
+11726 1 2
+11727 1 2
+11728 1 2
+11729 1 2
+11730 1 2
+11731 1 2
+11732 1 2
+11733 1 2
+11734 1 2
+11735 1 2
+11736 1 2
+11737 1 2
+11738 1 2
+11739 1 2
+11740 1 2
+11741 1 2
+11742 1 2
+11743 1 2
+11744 1 2
+11745 1 2
+11746 1 2
+11747 1 2
+11748 1 2
+11749 1 2
+11750 1 2
+11751 1 2
+11752 1 2
+11753 1 2
+11754 1 2
+11755 1 2
+11756 1 2
+11757 1 2
+11758 1 2
+11759 1 2
+11760 1 2
+11761 1 2
+11762 1 2
+11763 1 2
+11764 1 2
+11765 1 2
+11766 1 2
+11767 1 2
+11768 1 2
+11769 1 2
+11770 1 2
+11771 1 2
+11772 1 2
+11773 1 2
+11774 1 2
+11775 1 2
+11776 1 2
+11777 1 2
+11778 1 2
+11779 1 2
+11780 1 2
+11781 1 2
+11782 1 2
+11783 1 2
+11784 1 2
+11785 1 2
+11786 1 2
+11787 1 2
+11788 1 2
+11789 1 2
+11790 1 2
+11791 1 2
+11792 1 2
+11793 1 2
+11794 1 2
+11795 1 2
+11796 1 2
+11797 1 2
+11798 1 2
+11799 1 2
+11800 1 2
+11801 1 2
+11802 1 2
+11803 1 2
+11804 1 2
+11805 1 2
+11806 1 2
+11807 1 2
+11808 1 2
+11809 1 2
+11810 1 2
+11811 1 2
+11812 1 2
+11813 1 2
+11814 1 2
+11815 1 2
+11816 1 2
+11817 1 2
+11818 1 2
+11819 1 2
+11820 1 2
+11821 1 2
+11822 1 2
+11823 1 2
+11824 1 2
+11825 1 2
+11826 1 2
+11827 1 2
+11828 1 2
+11829 1 2
+11830 1 2
+11831 1 2
+11832 1 2
+11833 1 2
+11834 1 2
+11835 1 2
+11836 1 2
+11837 1 2
+11838 1 2
+11839 1 2
+11840 1 2
+11841 1 2
+11842 1 2
+11843 1 2
+11844 1 2
+11845 1 2
+11846 1 2
+11847 1 2
+11848 1 2
+11849 1 2
+11850 1 2
+11851 1 2
+11852 1 2
+11853 1 2
+11854 1 2
+11855 1 2
+11856 1 2
+11857 1 2
+11858 1 2
+11859 1 2
+11860 1 2
+11861 1 2
+11862 1 2
+11863 1 2
+11864 1 2
+11865 1 2
+11866 1 2
+11867 1 2
+11868 1 2
+11869 1 2
+11870 1 2
+11871 1 2
+11872 1 2
+11873 1 2
+11874 1 2
+11875 1 2
+11876 1 2
+11877 1 2
+11878 1 2
+11879 1 2
+11880 1 2
+11881 1 2
+11882 1 2
+11883 1 2
+11884 1 2
+11885 1 2
+11886 1 2
+11887 1 2
+11888 1 2
+11889 1 2
+11890 1 2
+11891 1 2
+11892 1 2
+11893 1 2
+11894 1 2
+11895 1 2
+11896 1 2
+11897 1 2
+11898 1 2
+11899 1 2
+11900 1 2
+11901 1 2
+11902 1 2
+11903 1 2
+11904 1 2
+11905 1 2
+11906 1 2
+11907 1 2
+11908 1 2
+11909 1 2
+11910 1 2
+11911 1 2
+11912 1 2
+11913 1 2
+11914 1 2
+11915 1 2
+11916 1 2
+11917 1 2
+11918 1 2
+11919 1 2
+11920 1 2
+11921 1 2
+11922 1 2
+11923 1 2
+11924 1 2
+11925 1 2
+11926 1 2
+11927 1 2
+11928 1 2
+11929 1 2
+11930 1 2
+11931 1 2
+11932 1 2
+11933 1 2
+11934 1 2
+11935 1 2
+11936 1 2
+11937 1 2
+11938 1 2
+11939 1 2
+11940 1 2
+11941 1 2
+11942 1 2
+11943 1 2
+11944 1 2
+11945 1 2
+11946 1 2
+11947 1 2
+11948 1 2
+11949 1 2
+11950 1 2
+11951 1 2
+11952 1 2
+11953 1 2
+11954 1 2
+11955 1 2
+11956 1 2
+11957 1 2
+11958 1 2
+11959 1 2
+11960 1 2
+11961 1 2
+11962 1 2
+11963 1 2
+11964 1 2
+11965 1 2
+11966 1 2
+11967 1 2
+11968 1 2
+11969 1 2
+11970 1 2
+11971 1 2
+11972 1 2
+11973 1 2
+11974 1 2
+11975 1 2
+11976 1 2
+11977 1 2
+11978 1 2
+11979 1 2
+11980 1 2
+11981 1 2
+11982 1 2
+11983 1 2
+11984 1 2
+11985 1 2
+11986 1 2
+11987 1 2
+11988 1 2
+11989 1 2
+11990 1 2
+11991 1 2
+11992 1 2
+11993 1 2
+11994 1 2
+11995 1 2
+11996 1 2
+11997 1 2
+11998 1 2
+11999 1 2
+12000 1 2
+12001 1 2
+12002 1 2
+12003 1 2
+12004 1 2
+12005 1 2
+12006 1 2
+12007 1 2
+12008 1 2
+12009 1 2
+12010 1 2
+12011 1 2
+12012 1 2
+12013 1 2
+12014 1 2
+12015 1 2
+12016 1 2
+12017 1 2
+12018 1 2
+12019 1 2
+12020 1 2
+12021 1 2
+12022 1 2
+12023 1 2
+12024 1 2
+12025 1 2
+12026 1 2
+12027 1 2
+12028 1 2
+12029 1 2
+12030 1 2
+12031 1 2
+12032 1 2
+12033 1 2
+12034 1 2
+12035 1 2
+12036 1 2
+12037 1 2
+12038 1 2
+12039 1 2
+12040 1 2
+12041 1 2
+12042 1 2
+12043 1 2
+12044 1 2
+12045 1 2
+12046 1 2
+12047 1 2
+12048 1 2
+12049 1 2
+12050 1 2
+12051 1 2
+12052 1 2
+12053 1 2
+12054 1 2
+12055 1 2
+12056 1 2
+12057 1 2
+12058 1 2
+12059 1 2
+12060 1 2
+12061 1 2
+12062 1 2
+12063 1 2
+12064 1 2
+12065 1 2
+12066 1 2
+12067 1 2
+12068 1 2
+12069 1 2
+12070 1 2
+12071 1 2
+12072 1 2
+12073 1 2
+12074 1 2
+12075 1 2
+12076 1 2
+12077 1 2
+12078 1 2
+12079 1 2
+12080 1 2
+12081 1 2
+12082 1 2
+12083 1 2
+12084 1 2
+12085 1 2
+12086 1 2
+12087 1 2
+12088 1 2
+12089 1 2
+12090 1 2
+12091 1 2
+12092 1 2
+12093 1 2
+12094 1 2
+12095 1 2
+12096 1 2
+12097 1 2
+12098 1 2
+12099 1 2
+12100 1 2
+12101 1 2
+12102 1 2
+12103 1 2
+12104 1 2
+12105 1 2
+12106 1 2
+12107 1 2
+12108 1 2
+12109 1 2
+12110 1 2
+12111 1 2
+12112 1 2
+12113 1 2
+12114 1 2
+12115 1 2
+12116 1 2
+12117 1 2
+12118 1 2
+12119 1 2
+12120 1 2
+12121 1 2
+12122 1 2
+12123 1 2
+12124 1 2
+12125 1 2
+12126 1 2
+12127 1 2
+12128 1 2
+12129 1 2
+12130 1 2
+12131 1 2
+12132 1 2
+12133 1 2
+12134 1 2
+12135 1 2
+12136 1 2
+12137 1 2
+12138 1 2
+12139 1 2
+12140 1 2
+12141 1 2
+12142 1 2
+12143 1 2
+12144 1 2
+12145 1 2
+12146 1 2
+12147 1 2
+12148 1 2
+12149 1 2
+12150 1 2
+12151 1 2
+12152 1 2
+12153 1 2
+12154 1 2
+12155 1 2
+12156 1 2
+12157 1 2
+12158 1 2
+12159 1 2
+12160 1 2
+12161 1 2
+12162 1 2
+12163 1 2
+12164 1 2
+12165 1 2
+12166 1 2
+12167 1 2
+12168 1 2
+12169 1 2
+12170 1 2
+12171 1 2
+12172 1 2
+12173 1 2
+12174 1 2
+12175 1 2
+12176 1 2
+12177 1 2
+12178 1 2
+12179 1 2
+12180 1 2
+12181 1 2
+12182 1 2
+12183 1 2
+12184 1 2
+12185 1 2
+12186 1 2
+12187 1 2
+12188 1 2
+12189 1 2
+12190 1 2
+12191 1 2
+12192 1 2
+12193 1 2
+12194 1 2
+12195 1 2
+12196 1 2
+12197 1 2
+12198 1 2
+12199 1 2
+12200 1 2
+12201 1 2
+12202 1 2
+12203 1 2
+12204 1 2
+12205 1 2
+12206 1 2
+12207 1 2
+12208 1 2
+12209 1 2
+12210 1 2
+12211 1 2
+12212 1 2
+12213 1 2
+12214 1 2
+12215 1 2
+12216 1 2
+12217 1 2
+12218 1 2
+12219 1 2
+12220 1 2
+12221 1 2
+12222 1 2
+12223 1 2
+12224 1 2
+12225 1 2
+12226 1 2
+12227 1 2
+12228 1 2
+12229 1 2
+12230 1 2
+12231 1 2
+12232 1 2
+12233 1 2
+12234 1 2
+12235 1 2
+12236 1 2
+12237 1 2
+12238 1 2
+12239 1 2
+12240 1 2
+12241 1 2
+12242 1 2
+12243 1 2
+12244 1 2
+12245 1 2
+12246 1 2
+12247 1 2
+12248 1 2
+12249 1 2
+12250 1 2
+12251 1 2
+12252 1 2
+12253 1 2
+12254 1 2
+12255 1 2
+12256 1 2
+12257 1 2
+12258 1 2
+12259 1 2
+12260 1 2
+12261 1 2
+12262 1 2
+12263 1 2
+12264 1 2
+12265 1 2
+12266 1 2
+12267 1 2
+12268 1 2
+12269 1 2
+12270 1 2
+12271 1 2
+12272 1 2
+12273 1 2
+12274 1 2
+12275 1 2
+12276 1 2
+12277 1 2
+12278 1 2
+12279 1 2
+12280 1 2
+12281 1 2
+12282 1 2
+12283 1 2
+12284 1 2
+12285 1 2
+12286 1 2
+12287 1 2
+12288 1 2
+12289 1 2
+12290 1 2
+12291 1 2
+12292 1 2
+12293 1 2
+12294 1 2
+12295 1 2
+12296 1 2
+12297 1 2
+12298 1 2
+12299 1 2
+12300 1 2
+12301 1 2
+12302 1 2
+12303 1 2
+12304 1 2
+12305 1 2
+12306 1 2
+12307 1 2
+12308 1 2
+12309 1 2
+12310 1 2
+12311 1 2
+12312 1 2
+12313 1 2
+12314 1 2
+12315 1 2
+12316 1 2
+12317 1 2
+12318 1 2
+12319 1 2
+12320 1 2
+12321 1 2
+12322 1 2
+12323 1 2
+12324 1 2
+12325 1 2
+12326 1 2
+12327 1 2
+12328 1 2
+12329 1 2
+12330 1 2
+12331 1 2
+12332 1 2
+12333 1 2
+12334 1 2
+12335 1 2
+12336 1 2
+12337 1 2
+12338 1 2
+12339 1 2
+12340 1 2
+12341 1 2
+12342 1 2
+12343 1 2
+12344 1 2
+12345 1 2
+12346 1 2
+12347 1 2
+12348 1 2
+12349 1 2
+12350 1 2
+12351 1 2
+12352 1 2
+12353 1 2
+12354 1 2
+12355 1 2
+12356 1 2
+12357 1 2
+12358 1 2
+12359 1 2
+12360 1 2
+12361 1 2
+12362 1 2
+12363 1 2
+12364 1 2
+12365 1 2
+12366 1 2
+12367 1 2
+12368 1 2
+12369 1 2
+12370 1 2
+12371 1 2
+12372 1 2
+12373 1 2
+12374 1 2
+12375 1 2
+12376 1 2
+12377 1 2
+12378 1 2
+12379 1 2
+12380 1 2
+12381 1 2
+12382 1 2
+12383 1 2
+12384 1 2
+12385 1 2
+12386 1 2
+12387 1 2
+12388 1 2
+12389 1 2
+12390 1 2
+12391 1 2
+12392 1 2
+12393 1 2
+12394 1 2
+12395 1 2
+12396 1 2
+12397 1 2
+12398 1 2
+12399 1 2
+12400 1 2
+12401 1 2
+12402 1 2
+12403 1 2
+12404 1 2
+12405 1 2
+12406 1 2
+12407 1 2
+12408 1 2
+12409 1 2
+12410 1 2
+12411 1 2
+12412 1 2
+12413 1 2
+12414 1 2
+12415 1 2
+12416 1 2
+12417 1 2
+12418 1 2
+12419 1 2
+12420 1 2
+12421 1 2
+12422 1 2
+12423 1 2
+12424 1 2
+12425 1 2
+12426 1 2
+12427 1 2
+12428 1 2
+12429 1 2
+12430 1 2
+12431 1 2
+12432 1 2
+12433 1 2
+12434 1 2
+12435 1 2
+12436 1 2
+12437 1 2
+12438 1 2
+12439 1 2
+12440 1 2
+12441 1 2
+12442 1 2
+12443 1 2
+12444 1 2
+12445 1 2
+12446 1 2
+12447 1 2
+12448 1 2
+12449 1 2
+12450 1 2
+12451 1 2
+12452 1 2
+12453 1 2
+12454 1 2
+12455 1 2
+12456 1 2
+12457 1 2
+12458 1 2
+12459 1 2
+12460 1 2
+12461 1 2
+12462 1 2
+12463 1 2
+12464 1 2
+12465 1 2
+12466 1 2
+12467 1 2
+12468 1 2
+12469 1 2
+12470 1 2
+12471 1 2
+12472 1 2
+12473 1 2
+12474 1 2
+12475 1 2
+12476 1 2
+12477 1 2
+12478 1 2
+12479 1 2
+12480 1 2
+12481 1 2
+12482 1 2
+12483 1 2
+12484 1 2
+12485 1 2
+12486 1 2
+12487 1 2
+12488 1 2
+12489 1 2
+12490 1 2
+12491 1 2
+12492 1 2
+12493 1 2
+12494 1 2
+12495 1 2
+12496 1 2
+12497 1 2
+12498 1 2
+12499 1 2
+12500 1 2
+12501 1 2
+12502 1 2
+12503 1 2
+12504 1 2
+12505 1 2
+12506 1 2
+12507 1 2
+12508 1 2
+12509 1 2
+12510 1 2
+12511 1 2
+12512 1 2
+12513 1 2
+12514 1 2
+12515 1 2
+12516 1 2
+12517 1 2
+12518 1 2
+12519 1 2
+12520 1 2
+12521 1 2
+12522 1 2
+12523 1 2
+12524 1 2
+12525 1 2
+12526 1 2
+12527 1 2
+12528 1 2
+12529 1 2
+12530 1 2
+12531 1 2
+12532 1 2
+12533 1 2
+12534 1 2
+12535 1 2
+12536 1 2
+12537 1 2
+12538 1 2
+12539 1 2
+12540 1 2
+12541 1 2
+12542 1 2
+12543 1 2
+12544 1 2
+12545 1 2
+12546 1 2
+12547 1 2
+12548 1 2
+12549 1 2
+12550 1 2
+12551 1 2
+12552 1 2
+12553 1 2
+12554 1 2
+12555 1 2
+12556 1 2
+12557 1 2
+12558 1 2
+12559 1 2
+12560 1 2
+12561 1 2
+12562 1 2
+12563 1 2
+12564 1 2
+12565 1 2
+12566 1 2
+12567 1 2
+12568 1 2
+12569 1 2
+12570 1 2
+12571 1 2
+12572 1 2
+12573 1 2
+12574 1 2
+12575 1 2
+12576 1 2
+12577 1 2
+12578 1 2
+12579 1 2
+12580 1 2
+12581 1 2
+12582 1 2
+12583 1 2
+12584 1 2
+12585 1 2
+12586 1 2
+12587 1 2
+12588 1 2
+12589 1 2
+12590 1 2
+12591 1 2
+12592 1 2
+12593 1 2
+12594 1 2
+12595 1 2
+12596 1 2
+12597 1 2
+12598 1 2
+12599 1 2
+12600 1 2
+12601 1 2
+12602 1 2
+12603 1 2
+12604 1 2
+12605 1 2
+12606 1 2
+12607 1 2
+12608 1 2
+12609 1 2
+12610 1 2
+12611 1 2
+12612 1 2
+12613 1 2
+12614 1 2
+12615 1 2
+12616 1 2
+12617 1 2
+12618 1 2
+12619 1 2
+12620 1 2
+12621 1 2
+12622 1 2
+12623 1 2
+12624 1 2
+12625 1 2
+12626 1 2
+12627 1 2
+12628 1 2
+12629 1 2
+12630 1 2
+12631 1 2
+12632 1 2
+12633 1 2
+12634 1 2
+12635 1 2
+12636 1 2
+12637 1 2
+12638 1 2
+12639 1 2
+12640 1 2
+12641 1 2
+12642 1 2
+12643 1 2
+12644 1 2
+12645 1 2
+12646 1 2
+12647 1 2
+12648 1 2
+12649 1 2
+12650 1 2
+12651 1 2
+12652 1 2
+12653 1 2
+12654 1 2
+12655 1 2
+12656 1 2
+12657 1 2
+12658 1 2
+12659 1 2
+12660 1 2
+12661 1 2
+12662 1 2
+12663 1 2
+12664 1 2
+12665 1 2
+12666 1 2
+12667 1 2
+12668 1 2
+12669 1 2
+12670 1 2
+12671 1 2
+12672 1 2
+12673 1 2
+12674 1 2
+12675 1 2
+12676 1 2
+12677 1 2
+12678 1 2
+12679 1 2
+12680 1 2
+12681 1 2
+12682 1 2
+12683 1 2
+12684 1 2
+12685 1 2
+12686 1 2
+12687 1 2
+12688 1 2
+12689 1 2
+12690 1 2
+12691 1 2
+12692 1 2
+12693 1 2
+12694 1 2
+12695 1 2
+12696 1 2
+12697 1 2
+12698 1 2
+12699 1 2
+12700 1 2
+12701 1 2
+12702 1 2
+12703 1 2
+12704 1 2
+12705 1 2
+12706 1 2
+12707 1 2
+12708 1 2
+12709 1 2
+12710 1 2
+12711 1 2
+12712 1 2
+12713 1 2
+12714 1 2
+12715 1 2
+12716 1 2
+12717 1 2
+12718 1 2
+12719 1 2
+12720 1 2
+12721 1 2
+12722 1 2
+12723 1 2
+12724 1 2
+12725 1 2
+12726 1 2
+12727 1 2
+12728 1 2
+12729 1 2
+12730 1 2
+12731 1 2
+12732 1 2
+12733 1 2
+12734 1 2
+12735 1 2
+12736 1 2
+12737 1 2
+12738 1 2
+12739 1 2
+12740 1 2
+12741 1 2
+12742 1 2
+12743 1 2
+12744 1 2
+12745 1 2
+12746 1 2
+12747 1 2
+12748 1 2
+12749 1 2
+12750 1 2
+12751 1 2
+12752 1 2
+12753 1 2
+12754 1 2
+12755 1 2
+12756 1 2
+12757 1 2
+12758 1 2
+12759 1 2
+12760 1 2
+12761 1 2
+12762 1 2
+12763 1 2
+12764 1 2
+12765 1 2
+12766 1 2
+12767 1 2
+12768 1 2
+12769 1 2
+12770 1 2
+12771 1 2
+12772 1 2
+12773 1 2
+12774 1 2
+12775 1 2
+12776 1 2
+12777 1 2
+12778 1 2
+12779 1 2
+12780 1 2
+12781 1 2
+12782 1 2
+12783 1 2
+12784 1 2
+12785 1 2
+12786 1 2
+12787 1 2
+12788 1 2
+12789 1 2
+12790 1 2
+12791 1 2
+12792 1 2
+12793 1 2
+12794 1 2
+12795 1 2
+12796 1 2
+12797 1 2
+12798 1 2
+12799 1 2
+12800 1 2
+12801 1 2
+12802 1 2
+12803 1 2
+12804 1 2
+12805 1 2
+12806 1 2
+12807 1 2
+12808 1 2
+12809 1 2
+12810 1 2
+12811 1 2
+12812 1 2
+12813 1 2
+12814 1 2
+12815 1 2
+12816 1 2
+12817 1 2
+12818 1 2
+12819 1 2
+12820 1 2
+12821 1 2
+12822 1 2
+12823 1 2
+12824 1 2
+12825 1 2
+12826 1 2
+12827 1 2
+12828 1 2
+12829 1 2
+12830 1 2
+12831 1 2
+12832 1 2
+12833 1 2
+12834 1 2
+12835 1 2
+12836 1 2
+12837 1 2
+12838 1 2
+12839 1 2
+12840 1 2
+12841 1 2
+12842 1 2
+12843 1 2
+12844 1 2
+12845 1 2
+12846 1 2
+12847 1 2
+12848 1 2
+12849 1 2
+12850 1 2
+12851 1 2
+12852 1 2
+12853 1 2
+12854 1 2
+12855 1 2
+12856 1 2
+12857 1 2
+12858 1 2
+12859 1 2
+12860 1 2
+12861 1 2
+12862 1 2
+12863 1 2
+12864 1 2
+12865 1 2
+12866 1 2
+12867 1 2
+12868 1 2
+12869 1 2
+12870 1 2
+12871 1 2
+12872 1 2
+12873 1 2
+12874 1 2
+12875 1 2
+12876 1 2
+12877 1 2
+12878 1 2
+12879 1 2
+12880 1 2
+12881 1 2
+12882 1 2
+12883 1 2
+12884 1 2
+12885 1 2
+12886 1 2
+12887 1 2
+12888 1 2
+12889 1 2
+12890 1 2
+12891 1 2
+12892 1 2
+12893 1 2
+12894 1 2
+12895 1 2
+12896 1 2
+12897 1 2
+12898 1 2
+12899 1 2
+12900 1 2
+12901 1 2
+12902 1 2
+12903 1 2
+12904 1 2
+12905 1 2
+12906 1 2
+12907 1 2
+12908 1 2
+12909 1 2
+12910 1 2
+12911 1 2
+12912 1 2
+12913 1 2
+12914 1 2
+12915 1 2
+12916 1 2
+12917 1 2
+12918 1 2
+12919 1 2
+12920 1 2
+12921 1 2
+12922 1 2
+12923 1 2
+12924 1 2
+12925 1 2
+12926 1 2
+12927 1 2
+12928 1 2
+12929 1 2
+12930 1 2
+12931 1 2
+12932 1 2
+12933 1 2
+12934 1 2
+12935 1 2
+12936 1 2
+12937 1 2
+12938 1 2
+12939 1 2
+12940 1 2
+12941 1 2
+12942 1 2
+12943 1 2
+12944 1 2
+12945 1 2
+12946 1 2
+12947 1 2
+12948 1 2
+12949 1 2
+12950 1 2
+12951 1 2
+12952 1 2
+12953 1 2
+12954 1 2
+12955 1 2
+12956 1 2
+12957 1 2
+12958 1 2
+12959 1 2
+12960 1 2
+12961 1 2
+12962 1 2
+12963 1 2
+12964 1 2
+12965 1 2
+12966 1 2
+12967 1 2
+12968 1 2
+12969 1 2
+12970 1 2
+12971 1 2
+12972 1 2
+12973 1 2
+12974 1 2
+12975 1 2
+12976 1 2
+12977 1 2
+12978 1 2
+12979 1 2
+12980 1 2
+12981 1 2
+12982 1 2
+12983 1 2
+12984 1 2
+12985 1 2
+12986 1 2
+12987 1 2
+12988 1 2
+12989 1 2
+12990 1 2
+12991 1 2
+12992 1 2
+12993 1 2
+12994 1 2
+12995 1 2
+12996 1 2
+12997 1 2
+12998 1 2
+12999 1 2
+13000 1 2
+13001 1 2
+13002 1 2
+13003 1 2
+13004 1 2
+13005 1 2
+13006 1 2
+13007 1 2
+13008 1 2
+13009 1 2
+13010 1 2
+13011 1 2
+13012 1 2
+13013 1 2
+13014 1 2
+13015 1 2
+13016 1 2
+13017 1 2
+13018 1 2
+13019 1 2
+13020 1 2
+13021 1 2
+13022 1 2
+13023 1 2
+13024 1 2
+13025 1 2
+13026 1 2
+13027 1 2
+13028 1 2
+13029 1 2
+13030 1 2
+13031 1 2
+13032 1 2
+13033 1 2
+13034 1 2
+13035 1 2
+13036 1 2
+13037 1 2
+13038 1 2
+13039 1 2
+13040 1 2
+13041 1 2
+13042 1 2
+13043 1 2
+13044 1 2
+13045 1 2
+13046 1 2
+13047 1 2
+13048 1 2
+13049 1 2
+13050 1 2
+13051 1 2
+13052 1 2
+13053 1 2
+13054 1 2
+13055 1 2
+13056 1 2
+13057 1 2
+13058 1 2
+13059 1 2
+13060 1 2
+13061 1 2
+13062 1 2
+13063 1 2
+13064 1 2
+13065 1 2
+13066 1 2
+13067 1 2
+13068 1 2
+13069 1 2
+13070 1 2
+13071 1 2
+13072 1 2
+13073 1 2
+13074 1 2
+13075 1 2
+13076 1 2
+13077 1 2
+13078 1 2
+13079 1 2
+13080 1 2
+13081 1 2
+13082 1 2
+13083 1 2
+13084 1 2
+13085 1 2
+13086 1 2
+13087 1 2
+13088 1 2
+13089 1 2
+13090 1 2
+13091 1 2
+13092 1 2
+13093 1 2
+13094 1 2
+13095 1 2
+13096 1 2
+13097 1 2
+13098 1 2
+13099 1 2
+13100 1 2
+13101 1 2
+13102 1 2
+13103 1 2
+13104 1 2
+13105 1 2
+13106 1 2
+13107 1 2
+13108 1 2
+13109 1 2
+13110 1 2
+13111 1 2
+13112 1 2
+13113 1 2
+13114 1 2
+13115 1 2
+13116 1 2
+13117 1 2
+13118 1 2
+13119 1 2
+13120 1 2
+13121 1 2
+13122 1 2
+13123 1 2
+13124 1 2
+13125 1 2
+13126 1 2
+13127 1 2
+13128 1 2
+13129 1 2
+13130 1 2
+13131 1 2
+13132 1 2
+13133 1 2
+13134 1 2
+13135 1 2
+13136 1 2
+13137 1 2
+13138 1 2
+13139 1 2
+13140 1 2
+13141 1 2
+13142 1 2
+13143 1 2
+13144 1 2
+13145 1 2
+13146 1 2
+13147 1 2
+13148 1 2
+13149 1 2
+13150 1 2
+13151 1 2
+13152 1 2
+13153 1 2
+13154 1 2
+13155 1 2
+13156 1 2
+13157 1 2
+13158 1 2
+13159 1 2
+13160 1 2
+13161 1 2
+13162 1 2
+13163 1 2
+13164 1 2
+13165 1 2
+13166 1 2
+13167 1 2
+13168 1 2
+13169 1 2
+13170 1 2
+13171 1 2
+13172 1 2
+13173 1 2
+13174 1 2
+13175 1 2
+13176 1 2
+13177 1 2
+13178 1 2
+13179 1 2
+13180 1 2
+13181 1 2
+13182 1 2
+13183 1 2
+13184 1 2
+13185 1 2
+13186 1 2
+13187 1 2
+13188 1 2
+13189 1 2
+13190 1 2
+13191 1 2
+13192 1 2
+13193 1 2
+13194 1 2
+13195 1 2
+13196 1 2
+13197 1 2
+13198 1 2
+13199 1 2
+13200 1 2
+13201 1 2
+13202 1 2
+13203 1 2
+13204 1 2
+13205 1 2
+13206 1 2
+13207 1 2
+13208 1 2
+13209 1 2
+13210 1 2
+13211 1 2
+13212 1 2
+13213 1 2
+13214 1 2
+13215 1 2
+13216 1 2
+13217 1 2
+13218 1 2
+13219 1 2
+13220 1 2
+13221 1 2
+13222 1 2
+13223 1 2
+13224 1 2
+13225 1 2
+13226 1 2
+13227 1 2
+13228 1 2
+13229 1 2
+13230 1 2
+13231 1 2
+13232 1 2
+13233 1 2
+13234 1 2
+13235 1 2
+13236 1 2
+13237 1 2
+13238 1 2
+13239 1 2
+13240 1 2
+13241 1 2
+13242 1 2
+13243 1 2
+13244 1 2
+13245 1 2
+13246 1 2
+13247 1 2
+13248 1 2
+13249 1 2
+13250 1 2
+13251 1 2
+13252 1 2
+13253 1 2
+13254 1 2
+13255 1 2
+13256 1 2
+13257 1 2
+13258 1 2
+13259 1 2
+13260 1 2
+13261 1 2
+13262 1 2
+13263 1 2
+13264 1 2
+13265 1 2
+13266 1 2
+13267 1 2
+13268 1 2
+13269 1 2
+13270 1 2
+13271 1 2
+13272 1 2
+13273 1 2
+13274 1 2
+13275 1 2
+13276 1 2
+13277 1 2
+13278 1 2
+13279 1 2
+13280 1 2
+13281 1 2
+13282 1 2
+13283 1 2
+13284 1 2
+13285 1 2
+13286 1 2
+13287 1 2
+13288 1 2
+13289 1 2
+13290 1 2
+13291 1 2
+13292 1 2
+13293 1 2
+13294 1 2
+13295 1 2
+13296 1 2
+13297 1 2
+13298 1 2
+13299 1 2
+13300 1 2
+13301 1 2
+13302 1 2
+13303 1 2
+13304 1 2
+13305 1 2
+13306 1 2
+13307 1 2
+13308 1 2
+13309 1 2
+13310 1 2
+13311 1 2
+13312 1 2
+13313 1 2
+13314 1 2
+13315 1 2
+13316 1 2
+13317 1 2
+13318 1 2
+13319 1 2
+13320 1 2
+13321 1 2
+13322 1 2
+13323 1 2
+13324 1 2
+13325 1 2
+13326 1 2
+13327 1 2
+13328 1 2
+13329 1 2
+13330 1 2
+13331 1 2
+13332 1 2
+13333 1 2
+13334 1 2
+13335 1 2
+13336 1 2
+13337 1 2
+13338 1 2
+13339 1 2
+13340 1 2
+13341 1 2
+13342 1 2
+13343 1 2
+13344 1 2
+13345 1 2
+13346 1 2
+13347 1 2
+13348 1 2
+13349 1 2
+13350 1 2
+13351 1 2
+13352 1 2
+13353 1 2
+13354 1 2
+13355 1 2
+13356 1 2
+13357 1 2
+13358 1 2
+13359 1 2
+13360 1 2
+13361 1 2
+13362 1 2
+13363 1 2
+13364 1 2
+13365 1 2
+13366 1 2
+13367 1 2
+13368 1 2
+13369 1 2
+13370 1 2
+13371 1 2
+13372 1 2
+13373 1 2
+13374 1 2
+13375 1 2
+13376 1 2
+13377 1 2
+13378 1 2
+13379 1 2
+13380 1 2
+13381 1 2
+13382 1 2
+13383 1 2
+13384 1 2
+13385 1 2
+13386 1 2
+13387 1 2
+13388 1 2
+13389 1 2
+13390 1 2
+13391 1 2
+13392 1 2
+13393 1 2
+13394 1 2
+13395 1 2
+13396 1 2
+13397 1 2
+13398 1 2
+13399 1 2
+13400 1 2
+13401 1 2
+13402 1 2
+13403 1 2
+13404 1 2
+13405 1 2
+13406 1 2
+13407 1 2
+13408 1 2
+13409 1 2
+13410 1 2
+13411 1 2
+13412 1 2
+13413 1 2
+13414 1 2
+13415 1 2
+13416 1 2
+13417 1 2
+13418 1 2
+13419 1 2
+13420 1 2
+13421 1 2
+13422 1 2
+13423 1 2
+13424 1 2
+13425 1 2
+13426 1 2
+13427 1 2
+13428 1 2
+13429 1 2
+13430 1 2
+13431 1 2
+13432 1 2
+13433 1 2
+13434 1 2
+13435 1 2
+13436 1 2
+13437 1 2
+13438 1 2
+13439 1 2
+13440 1 2
+13441 1 2
+13442 1 2
+13443 1 2
+13444 1 2
+13445 1 2
+13446 1 2
+13447 1 2
+13448 1 2
+13449 1 2
+13450 1 2
+13451 1 2
+13452 1 2
+13453 1 2
+13454 1 2
+13455 1 2
+13456 1 2
+13457 1 2
+13458 1 2
+13459 1 2
+13460 1 2
+13461 1 2
+13462 1 2
+13463 1 2
+13464 1 2
+13465 1 2
+13466 1 2
+13467 1 2
+13468 1 2
+13469 1 2
+13470 1 2
+13471 1 2
+13472 1 2
+13473 1 2
+13474 1 2
+13475 1 2
+13476 1 2
+13477 1 2
+13478 1 2
+13479 1 2
+13480 1 2
+13481 1 2
+13482 1 2
+13483 1 2
+13484 1 2
+13485 1 2
+13486 1 2
+13487 1 2
+13488 1 2
+13489 1 2
+13490 1 2
+13491 1 2
+13492 1 2
+13493 1 2
+13494 1 2
+13495 1 2
+13496 1 2
+13497 1 2
+13498 1 2
+13499 1 2
+13500 1 2
+13501 1 2
+13502 1 2
+13503 1 2
+13504 1 2
+13505 1 2
+13506 1 2
+13507 1 2
+13508 1 2
+13509 1 2
+13510 1 2
+13511 1 2
+13512 1 2
+13513 1 2
+13514 1 2
+13515 1 2
+13516 1 2
+13517 1 2
+13518 1 2
+13519 1 2
+13520 1 2
+13521 1 2
+13522 1 2
+13523 1 2
+13524 1 2
+13525 1 2
+13526 1 2
+13527 1 2
+13528 1 2
+13529 1 2
+13530 1 2
+13531 1 2
+13532 1 2
+13533 1 2
+13534 1 2
+13535 1 2
+13536 1 2
+13537 1 2
+13538 1 2
+13539 1 2
+13540 1 2
+13541 1 2
+13542 1 2
+13543 1 2
+13544 1 2
+13545 1 2
+13546 1 2
+13547 1 2
+13548 1 2
+13549 1 2
+13550 1 2
+13551 1 2
+13552 1 2
+13553 1 2
+13554 1 2
+13555 1 2
+13556 1 2
+13557 1 2
+13558 1 2
+13559 1 2
+13560 1 2
+13561 1 2
+13562 1 2
+13563 1 2
+13564 1 2
+13565 1 2
+13566 1 2
+13567 1 2
+13568 1 2
+13569 1 2
+13570 1 2
+13571 1 2
+13572 1 2
+13573 1 2
+13574 1 2
+13575 1 2
+13576 1 2
+13577 1 2
+13578 1 2
+13579 1 2
+13580 1 2
+13581 1 2
+13582 1 2
+13583 1 2
+13584 1 2
+13585 1 2
+13586 1 2
+13587 1 2
+13588 1 2
+13589 1 2
+13590 1 2
+13591 1 2
+13592 1 2
+13593 1 2
+13594 1 2
+13595 1 2
+13596 1 2
+13597 1 2
+13598 1 2
+13599 1 2
+13600 1 2
+13601 1 2
+13602 1 2
+13603 1 2
+13604 1 2
+13605 1 2
+13606 1 2
+13607 1 2
+13608 1 2
+13609 1 2
+13610 1 2
+13611 1 2
+13612 1 2
+13613 1 2
+13614 1 2
+13615 1 2
+13616 1 2
+13617 1 2
+13618 1 2
+13619 1 2
+13620 1 2
+13621 1 2
+13622 1 2
+13623 1 2
+13624 1 2
+13625 1 2
+13626 1 2
+13627 1 2
+13628 1 2
+13629 1 2
+13630 1 2
+13631 1 2
+13632 1 2
+13633 1 2
+13634 1 2
+13635 1 2
+13636 1 2
+13637 1 2
+13638 1 2
+13639 1 2
+13640 1 2
+13641 1 2
+13642 1 2
+13643 1 2
+13644 1 2
+13645 1 2
+13646 1 2
+13647 1 2
+13648 1 2
+13649 1 2
+13650 1 2
+13651 1 2
+13652 1 2
+13653 1 2
+13654 1 2
+13655 1 2
+13656 1 2
+13657 1 2
+13658 1 2
+13659 1 2
+13660 1 2
+13661 1 2
+13662 1 2
+13663 1 2
+13664 1 2
+13665 1 2
+13666 1 2
+13667 1 2
+13668 1 2
+13669 1 2
+13670 1 2
+13671 1 2
+13672 1 2
+13673 1 2
+13674 1 2
+13675 1 2
+13676 1 2
+13677 1 2
+13678 1 2
+13679 1 2
+13680 1 2
+13681 1 2
+13682 1 2
+13683 1 2
+13684 1 2
+13685 1 2
+13686 1 2
+13687 1 2
+13688 1 2
+13689 1 2
+13690 1 2
+13691 1 2
+13692 1 2
+13693 1 2
+13694 1 2
+13695 1 2
+13696 1 2
+13697 1 2
+13698 1 2
+13699 1 2
+13700 1 2
+13701 1 2
+13702 1 2
+13703 1 2
+13704 1 2
+13705 1 2
+13706 1 2
+13707 1 2
+13708 1 2
+13709 1 2
+13710 1 2
+13711 1 2
+13712 1 2
+13713 1 2
+13714 1 2
+13715 1 2
+13716 1 2
+13717 1 2
+13718 1 2
+13719 1 2
+13720 1 2
+13721 1 2
+13722 1 2
+13723 1 2
+13724 1 2
+13725 1 2
+13726 1 2
+13727 1 2
+13728 1 2
+13729 1 2
+13730 1 2
+13731 1 2
+13732 1 2
+13733 1 2
+13734 1 2
+13735 1 2
+13736 1 2
+13737 1 2
+13738 1 2
+13739 1 2
+13740 1 2
+13741 1 2
+13742 1 2
+13743 1 2
+13744 1 2
+13745 1 2
+13746 1 2
+13747 1 2
+13748 1 2
+13749 1 2
+13750 1 2
+13751 1 2
+13752 1 2
+13753 1 2
+13754 1 2
+13755 1 2
+13756 1 2
+13757 1 2
+13758 1 2
+13759 1 2
+13760 1 2
+13761 1 2
+13762 1 2
+13763 1 2
+13764 1 2
+13765 1 2
+13766 1 2
+13767 1 2
+13768 1 2
+13769 1 2
+13770 1 2
+13771 1 2
+13772 1 2
+13773 1 2
+13774 1 2
+13775 1 2
+13776 1 2
+13777 1 2
+13778 1 2
+13779 1 2
+13780 1 2
+13781 1 2
+13782 1 2
+13783 1 2
+13784 1 2
+13785 1 2
+13786 1 2
+13787 1 2
+13788 1 2
+13789 1 2
+13790 1 2
+13791 1 2
+13792 1 2
+13793 1 2
+13794 1 2
+13795 1 2
+13796 1 2
+13797 1 2
+13798 1 2
+13799 1 2
+13800 1 2
+13801 1 2
+13802 1 2
+13803 1 2
+13804 1 2
+13805 1 2
+13806 1 2
+13807 1 2
+13808 1 2
+13809 1 2
+13810 1 2
+13811 1 2
+13812 1 2
+13813 1 2
+13814 1 2
+13815 1 2
+13816 1 2
+13817 1 2
+13818 1 2
+13819 1 2
+13820 1 2
+13821 1 2
+13822 1 2
+13823 1 2
+13824 1 2
+13825 1 2
+13826 1 2
+13827 1 2
+13828 1 2
+13829 1 2
+13830 1 2
+13831 1 2
+13832 1 2
+13833 1 2
+13834 1 2
+13835 1 2
+13836 1 2
+13837 1 2
+13838 1 2
+13839 1 2
+13840 1 2
+13841 1 2
+13842 1 2
+13843 1 2
+13844 1 2
+13845 1 2
+13846 1 2
+13847 1 2
+13848 1 2
+13849 1 2
+13850 1 2
+13851 1 2
+13852 1 2
+13853 1 2
+13854 1 2
+13855 1 2
+13856 1 2
+13857 1 2
+13858 1 2
+13859 1 2
+13860 1 2
+13861 1 2
+13862 1 2
+13863 1 2
+13864 1 2
+13865 1 2
+13866 1 2
+13867 1 2
+13868 1 2
+13869 1 2
+13870 1 2
+13871 1 2
+13872 1 2
+13873 1 2
+13874 1 2
+13875 1 2
+13876 1 2
+13877 1 2
+13878 1 2
+13879 1 2
+13880 1 2
+13881 1 2
+13882 1 2
+13883 1 2
+13884 1 2
+13885 1 2
+13886 1 2
+13887 1 2
+13888 1 2
+13889 1 2
+13890 1 2
+13891 1 2
+13892 1 2
+13893 1 2
+13894 1 2
+13895 1 2
+13896 1 2
+13897 1 2
+13898 1 2
+13899 1 2
+13900 1 2
+13901 1 2
+13902 1 2
+13903 1 2
+13904 1 2
+13905 1 2
+13906 1 2
+13907 1 2
+13908 1 2
+13909 1 2
+13910 1 2
+13911 1 2
+13912 1 2
+13913 1 2
+13914 1 2
+13915 1 2
+13916 1 2
+13917 1 2
+13918 1 2
+13919 1 2
+13920 1 2
+13921 1 2
+13922 1 2
+13923 1 2
+13924 1 2
+13925 1 2
+13926 1 2
+13927 1 2
+13928 1 2
+13929 1 2
+13930 1 2
+13931 1 2
+13932 1 2
+13933 1 2
+13934 1 2
+13935 1 2
+13936 1 2
+13937 1 2
+13938 1 2
+13939 1 2
+13940 1 2
+13941 1 2
+13942 1 2
+13943 1 2
+13944 1 2
+13945 1 2
+13946 1 2
+13947 1 2
+13948 1 2
+13949 1 2
+13950 1 2
+13951 1 2
+13952 1 2
+13953 1 2
+13954 1 2
+13955 1 2
+13956 1 2
+13957 1 2
+13958 1 2
+13959 1 2
+13960 1 2
+13961 1 2
+13962 1 2
+13963 1 2
+13964 1 2
+13965 1 2
+13966 1 2
+13967 1 2
+13968 1 2
+13969 1 2
+13970 1 2
+13971 1 2
+13972 1 2
+13973 1 2
+13974 1 2
+13975 1 2
+13976 1 2
+13977 1 2
+13978 1 2
+13979 1 2
+13980 1 2
+13981 1 2
+13982 1 2
+13983 1 2
+13984 1 2
+13985 1 2
+13986 1 2
+13987 1 2
+13988 1 2
+13989 1 2
+13990 1 2
+13991 1 2
+13992 1 2
+13993 1 2
+13994 1 2
+13995 1 2
+13996 1 2
+13997 1 2
+13998 1 2
+13999 1 2
+14000 1 2
+14001 1 2
+14002 1 2
+14003 1 2
+14004 1 2
+14005 1 2
+14006 1 2
+14007 1 2
+14008 1 2
+14009 1 2
+14010 1 2
+14011 1 2
+14012 1 2
+14013 1 2
+14014 1 2
+14015 1 2
+14016 1 2
+14017 1 2
+14018 1 2
+14019 1 2
+14020 1 2
+14021 1 2
+14022 1 2
+14023 1 2
+14024 1 2
+14025 1 2
+14026 1 2
+14027 1 2
+14028 1 2
+14029 1 2
+14030 1 2
+14031 1 2
+14032 1 2
+14033 1 2
+14034 1 2
+14035 1 2
+14036 1 2
+14037 1 2
+14038 1 2
+14039 1 2
+14040 1 2
+14041 1 2
+14042 1 2
+14043 1 2
+14044 1 2
+14045 1 2
+14046 1 2
+14047 1 2
+14048 1 2
+14049 1 2
+14050 1 2
+14051 1 2
+14052 1 2
+14053 1 2
+14054 1 2
+14055 1 2
+14056 1 2
+14057 1 2
+14058 1 2
+14059 1 2
+14060 1 2
+14061 1 2
+14062 1 2
+14063 1 2
+14064 1 2
+14065 1 2
+14066 1 2
+14067 1 2
+14068 1 2
+14069 1 2
+14070 1 2
+14071 1 2
+14072 1 2
+14073 1 2
+14074 1 2
+14075 1 2
+14076 1 2
+14077 1 2
+14078 1 2
+14079 1 2
+14080 1 2
+14081 1 2
+14082 1 2
+14083 1 2
+14084 1 2
+14085 1 2
+14086 1 2
+14087 1 2
+14088 1 2
+14089 1 2
+14090 1 2
+14091 1 2
+14092 1 2
+14093 1 2
+14094 1 2
+14095 1 2
+14096 1 2
+14097 1 2
+14098 1 2
+14099 1 2
+14100 1 2
+14101 1 2
+14102 1 2
+14103 1 2
+14104 1 2
+14105 1 2
+14106 1 2
+14107 1 2
+14108 1 2
+14109 1 2
+14110 1 2
+14111 1 2
+14112 1 2
+14113 1 2
+14114 1 2
+14115 1 2
+14116 1 2
+14117 1 2
+14118 1 2
+14119 1 2
+14120 1 2
+14121 1 2
+14122 1 2
+14123 1 2
+14124 1 2
+14125 1 2
+14126 1 2
+14127 1 2
+14128 1 2
+14129 1 2
+14130 1 2
+14131 1 2
+14132 1 2
+14133 1 2
+14134 1 2
+14135 1 2
+14136 1 2
+14137 1 2
+14138 1 2
+14139 1 2
+14140 1 2
+14141 1 2
+14142 1 2
+14143 1 2
+14144 1 2
+14145 1 2
+14146 1 2
+14147 1 2
+14148 1 2
+14149 1 2
+14150 1 2
+14151 1 2
+14152 1 2
+14153 1 2
+14154 1 2
+14155 1 2
+14156 1 2
+14157 1 2
+14158 1 2
+14159 1 2
+14160 1 2
+14161 1 2
+14162 1 2
+14163 1 2
+14164 1 2
+14165 1 2
+14166 1 2
+14167 1 2
+14168 1 2
+14169 1 2
+14170 1 2
+14171 1 2
+14172 1 2
+14173 1 2
+14174 1 2
+14175 1 2
+14176 1 2
+14177 1 2
+14178 1 2
+14179 1 2
+14180 1 2
+14181 1 2
+14182 1 2
+14183 1 2
+14184 1 2
+14185 1 2
+14186 1 2
+14187 1 2
+14188 1 2
+14189 1 2
+14190 1 2
+14191 1 2
+14192 1 2
+14193 1 2
+14194 1 2
+14195 1 2
+14196 1 2
+14197 1 2
+14198 1 2
+14199 1 2
+14200 1 2
+14201 1 2
+14202 1 2
+14203 1 2
+14204 1 2
+14205 1 2
+14206 1 2
+14207 1 2
+14208 1 2
+14209 1 2
+14210 1 2
+14211 1 2
+14212 1 2
+14213 1 2
+14214 1 2
+14215 1 2
+14216 1 2
+14217 1 2
+14218 1 2
+14219 1 2
+14220 1 2
+14221 1 2
+14222 1 2
+14223 1 2
+14224 1 2
+14225 1 2
+14226 1 2
+14227 1 2
+14228 1 2
+14229 1 2
+14230 1 2
+14231 1 2
+14232 1 2
+14233 1 2
+14234 1 2
+14235 1 2
+14236 1 2
+14237 1 2
+14238 1 2
+14239 1 2
+14240 1 2
+14241 1 2
+14242 1 2
+14243 1 2
+14244 1 2
+14245 1 2
+14246 1 2
+14247 1 2
+14248 1 2
+14249 1 2
+14250 1 2
+14251 1 2
+14252 1 2
+14253 1 2
+14254 1 2
+14255 1 2
+14256 1 2
+14257 1 2
+14258 1 2
+14259 1 2
+14260 1 2
+14261 1 2
+14262 1 2
+14263 1 2
+14264 1 2
+14265 1 2
+14266 1 2
+14267 1 2
+14268 1 2
+14269 1 2
+14270 1 2
+14271 1 2
+14272 1 2
+14273 1 2
+14274 1 2
+14275 1 2
+14276 1 2
+14277 1 2
+14278 1 2
+14279 1 2
+14280 1 2
+14281 1 2
+14282 1 2
+14283 1 2
+14284 1 2
+14285 1 2
+14286 1 2
+14287 1 2
+14288 1 2
+14289 1 2
+14290 1 2
+14291 1 2
+14292 1 2
+14293 1 2
+14294 1 2
+14295 1 2
+14296 1 2
+14297 1 2
+14298 1 2
+14299 1 2
+14300 1 2
+14301 1 2
+14302 1 2
+14303 1 2
+14304 1 2
+14305 1 2
+14306 1 2
+14307 1 2
+14308 1 2
+14309 1 2
+14310 1 2
+14311 1 2
+14312 1 2
+14313 1 2
+14314 1 2
+14315 1 2
+14316 1 2
+14317 1 2
+14318 1 2
+14319 1 2
+14320 1 2
+14321 1 2
+14322 1 2
+14323 1 2
+14324 1 2
+14325 1 2
+14326 1 2
+14327 1 2
+14328 1 2
+14329 1 2
+14330 1 2
+14331 1 2
+14332 1 2
+14333 1 2
+14334 1 2
+14335 1 2
+14336 1 2
+14337 1 2
+14338 1 2
+14339 1 2
+14340 1 2
+14341 1 2
+14342 1 2
+14343 1 2
+14344 1 2
+14345 1 2
+14346 1 2
+14347 1 2
+14348 1 2
+14349 1 2
+14350 1 2
+14351 1 2
+14352 1 2
+14353 1 2
+14354 1 2
+14355 1 2
+14356 1 2
+14357 1 2
+14358 1 2
+14359 1 2
+14360 1 2
+14361 1 2
+14362 1 2
+14363 1 2
+14364 1 2
+14365 1 2
+14366 1 2
+14367 1 2
+14368 1 2
+14369 1 2
+14370 1 2
+14371 1 2
+14372 1 2
+14373 1 2
+14374 1 2
+14375 1 2
+14376 1 2
+14377 1 2
+14378 1 2
+14379 1 2
+14380 1 2
+14381 1 2
+14382 1 2
+14383 1 2
+14384 1 2
+14385 1 2
+14386 1 2
+14387 1 2
+14388 1 2
+14389 1 2
+14390 1 2
+14391 1 2
+14392 1 2
+14393 1 2
+14394 1 2
+14395 1 2
+14396 1 2
+14397 1 2
+14398 1 2
+14399 1 2
+14400 1 2
+14401 1 2
+14402 1 2
+14403 1 2
+14404 1 2
+14405 1 2
+14406 1 2
+14407 1 2
+14408 1 2
+14409 1 2
+14410 1 2
+14411 1 2
+14412 1 2
+14413 1 2
+14414 1 2
+14415 1 2
+14416 1 2
+14417 1 2
+14418 1 2
+14419 1 2
+14420 1 2
+14421 1 2
+14422 1 2
+14423 1 2
+14424 1 2
+14425 1 2
+14426 1 2
+14427 1 2
+14428 1 2
+14429 1 2
+14430 1 2
+14431 1 2
+14432 1 2
+14433 1 2
+14434 1 2
+14435 1 2
+14436 1 2
+14437 1 2
+14438 1 2
+14439 1 2
+14440 1 2
+14441 1 2
+14442 1 2
+14443 1 2
+14444 1 2
+14445 1 2
+14446 1 2
+14447 1 2
+14448 1 2
+14449 1 2
+14450 1 2
+14451 1 2
+14452 1 2
+14453 1 2
+14454 1 2
+14455 1 2
+14456 1 2
+14457 1 2
+14458 1 2
+14459 1 2
+14460 1 2
+14461 1 2
+14462 1 2
+14463 1 2
+14464 1 2
+14465 1 2
+14466 1 2
+14467 1 2
+14468 1 2
+14469 1 2
+14470 1 2
+14471 1 2
+14472 1 2
+14473 1 2
+14474 1 2
+14475 1 2
+14476 1 2
+14477 1 2
+14478 1 2
+14479 1 2
+14480 1 2
+14481 1 2
+14482 1 2
+14483 1 2
+14484 1 2
+14485 1 2
+14486 1 2
+14487 1 2
+14488 1 2
+14489 1 2
+14490 1 2
+14491 1 2
+14492 1 2
+14493 1 2
+14494 1 2
+14495 1 2
+14496 1 2
+14497 1 2
+14498 1 2
+14499 1 2
+14500 1 2
+14501 1 2
+14502 1 2
+14503 1 2
+14504 1 2
+14505 1 2
+14506 1 2
+14507 1 2
+14508 1 2
+14509 1 2
+14510 1 2
+14511 1 2
+14512 1 2
+14513 1 2
+14514 1 2
+14515 1 2
+14516 1 2
+14517 1 2
+14518 1 2
+14519 1 2
+14520 1 2
+14521 1 2
+14522 1 2
+14523 1 2
+14524 1 2
+14525 1 2
+14526 1 2
+14527 1 2
+14528 1 2
+14529 1 2
+14530 1 2
+14531 1 2
+14532 1 2
+14533 1 2
+14534 1 2
+14535 1 2
+14536 1 2
+14537 1 2
+14538 1 2
+14539 1 2
+14540 1 2
+14541 1 2
+14542 1 2
+14543 1 2
+14544 1 2
+14545 1 2
+14546 1 2
+14547 1 2
+14548 1 2
+14549 1 2
+14550 1 2
+14551 1 2
+14552 1 2
+14553 1 2
+14554 1 2
+14555 1 2
+14556 1 2
+14557 1 2
+14558 1 2
+14559 1 2
+14560 1 2
+14561 1 2
+14562 1 2
+14563 1 2
+14564 1 2
+14565 1 2
+14566 1 2
+14567 1 2
+14568 1 2
+14569 1 2
+14570 1 2
+14571 1 2
+14572 1 2
+14573 1 2
+14574 1 2
+14575 1 2
+14576 1 2
+14577 1 2
+14578 1 2
+14579 1 2
+14580 1 2
+14581 1 2
+14582 1 2
+14583 1 2
+14584 1 2
+14585 1 2
+14586 1 2
+14587 1 2
+14588 1 2
+14589 1 2
+14590 1 2
+14591 1 2
+14592 1 2
+14593 1 2
+14594 1 2
+14595 1 2
+14596 1 2
+14597 1 2
+14598 1 2
+14599 1 2
+14600 1 2
+14601 1 2
+14602 1 2
+14603 1 2
+14604 1 2
+14605 1 2
+14606 1 2
+14607 1 2
+14608 1 2
+14609 1 2
+14610 1 2
+14611 1 2
+14612 1 2
+14613 1 2
+14614 1 2
+14615 1 2
+14616 1 2
+14617 1 2
+14618 1 2
+14619 1 2
+14620 1 2
+14621 1 2
+14622 1 2
+14623 1 2
+14624 1 2
+14625 1 2
+14626 1 2
+14627 1 2
+14628 1 2
+14629 1 2
+14630 1 2
+14631 1 2
+14632 1 2
+14633 1 2
+14634 1 2
+14635 1 2
+14636 1 2
+14637 1 2
+14638 1 2
+14639 1 2
+14640 1 2
+14641 1 2
+14642 1 2
+14643 1 2
+14644 1 2
+14645 1 2
+14646 1 2
+14647 1 2
+14648 1 2
+14649 1 2
+14650 1 2
+14651 1 2
+14652 1 2
+14653 1 2
+14654 1 2
+14655 1 2
+14656 1 2
+14657 1 2
+14658 1 2
+14659 1 2
+14660 1 2
+14661 1 2
+14662 1 2
+14663 1 2
+14664 1 2
+14665 1 2
+14666 1 2
+14667 1 2
+14668 1 2
+14669 1 2
+14670 1 2
+14671 1 2
+14672 1 2
+14673 1 2
+14674 1 2
+14675 1 2
+14676 1 2
+14677 1 2
+14678 1 2
+14679 1 2
+14680 1 2
+14681 1 2
+14682 1 2
+14683 1 2
+14684 1 2
+14685 1 2
+14686 1 2
+14687 1 2
+14688 1 2
+14689 1 2
+14690 1 2
+14691 1 2
+14692 1 2
+14693 1 2
+14694 1 2
+14695 1 2
+14696 1 2
+14697 1 2
+14698 1 2
+14699 1 2
+14700 1 2
+14701 1 2
+14702 1 2
+14703 1 2
+14704 1 2
+14705 1 2
+14706 1 2
+14707 1 2
+14708 1 2
+14709 1 2
+14710 1 2
+14711 1 2
+14712 1 2
+14713 1 2
+14714 1 2
+14715 1 2
+14716 1 2
+14717 1 2
+14718 1 2
+14719 1 2
+14720 1 2
+14721 1 2
+14722 1 2
+14723 1 2
+14724 1 2
+14725 1 2
+14726 1 2
+14727 1 2
+14728 1 2
+14729 1 2
+14730 1 2
+14731 1 2
+14732 1 2
+14733 1 2
+14734 1 2
+14735 1 2
+14736 1 2
+14737 1 2
+14738 1 2
+14739 1 2
+14740 1 2
+14741 1 2
+14742 1 2
+14743 1 2
+14744 1 2
+14745 1 2
+14746 1 2
+14747 1 2
+14748 1 2
+14749 1 2
+14750 1 2
+14751 1 2
+14752 1 2
+14753 1 2
+14754 1 2
+14755 1 2
+14756 1 2
+14757 1 2
+14758 1 2
+14759 1 2
+14760 1 2
+14761 1 2
+14762 1 2
+14763 1 2
+14764 1 2
+14765 1 2
+14766 1 2
+14767 1 2
+14768 1 2
+14769 1 2
+14770 1 2
+14771 1 2
+14772 1 2
+14773 1 2
+14774 1 2
+14775 1 2
+14776 1 2
+14777 1 2
+14778 1 2
+14779 1 2
+14780 1 2
+14781 1 2
+14782 1 2
+14783 1 2
+14784 1 2
+14785 1 2
+14786 1 2
+14787 1 2
+14788 1 2
+14789 1 2
+14790 1 2
+14791 1 2
+14792 1 2
+14793 1 2
+14794 1 2
+14795 1 2
+14796 1 2
+14797 1 2
+14798 1 2
+14799 1 2
+14800 1 2
+14801 1 2
+14802 1 2
+14803 1 2
+14804 1 2
+14805 1 2
+14806 1 2
+14807 1 2
+14808 1 2
+14809 1 2
+14810 1 2
+14811 1 2
+14812 1 2
+14813 1 2
+14814 1 2
+14815 1 2
+14816 1 2
+14817 1 2
+14818 1 2
+14819 1 2
+14820 1 2
+14821 1 2
+14822 1 2
+14823 1 2
+14824 1 2
+14825 1 2
+14826 1 2
+14827 1 2
+14828 1 2
+14829 1 2
+14830 1 2
+14831 1 2
+14832 1 2
+14833 1 2
+14834 1 2
+14835 1 2
+14836 1 2
+14837 1 2
+14838 1 2
+14839 1 2
+14840 1 2
+14841 1 2
+14842 1 2
+14843 1 2
+14844 1 2
+14845 1 2
+14846 1 2
+14847 1 2
+14848 1 2
+14849 1 2
+14850 1 2
+14851 1 2
+14852 1 2
+14853 1 2
+14854 1 2
+14855 1 2
+14856 1 2
+14857 1 2
+14858 1 2
+14859 1 2
+14860 1 2
+14861 1 2
+14862 1 2
+14863 1 2
+14864 1 2
+14865 1 2
+14866 1 2
+14867 1 2
+14868 1 2
+14869 1 2
+14870 1 2
+14871 1 2
+14872 1 2
+14873 1 2
+14874 1 2
+14875 1 2
+14876 1 2
+14877 1 2
+14878 1 2
+14879 1 2
+14880 1 2
+14881 1 2
+14882 1 2
+14883 1 2
+14884 1 2
+14885 1 2
+14886 1 2
+14887 1 2
+14888 1 2
+14889 1 2
+14890 1 2
+14891 1 2
+14892 1 2
+14893 1 2
+14894 1 2
+14895 1 2
+14896 1 2
+14897 1 2
+14898 1 2
+14899 1 2
+14900 1 2
+14901 1 2
+14902 1 2
+14903 1 2
+14904 1 2
+14905 1 2
+14906 1 2
+14907 1 2
+14908 1 2
+14909 1 2
+14910 1 2
+14911 1 2
+14912 1 2
+14913 1 2
+14914 1 2
+14915 1 2
+14916 1 2
+14917 1 2
+14918 1 2
+14919 1 2
+14920 1 2
+14921 1 2
+14922 1 2
+14923 1 2
+14924 1 2
+14925 1 2
+14926 1 2
+14927 1 2
+14928 1 2
+14929 1 2
+14930 1 2
+14931 1 2
+14932 1 2
+14933 1 2
+14934 1 2
+14935 1 2
+14936 1 2
+14937 1 2
+14938 1 2
+14939 1 2
+14940 1 2
+14941 1 2
+14942 1 2
+14943 1 2
+14944 1 2
+14945 1 2
+14946 1 2
+14947 1 2
+14948 1 2
+14949 1 2
+14950 1 2
+14951 1 2
+14952 1 2
+14953 1 2
+14954 1 2
+14955 1 2
+14956 1 2
+14957 1 2
+14958 1 2
+14959 1 2
+14960 1 2
+14961 1 2
+14962 1 2
+14963 1 2
+14964 1 2
+14965 1 2
+14966 1 2
+14967 1 2
+14968 1 2
+14969 1 2
+14970 1 2
+14971 1 2
+14972 1 2
+14973 1 2
+14974 1 2
+14975 1 2
+14976 1 2
+14977 1 2
+14978 1 2
+14979 1 2
+14980 1 2
+14981 1 2
+14982 1 2
+14983 1 2
+14984 1 2
+14985 1 2
+14986 1 2
+14987 1 2
+14988 1 2
+14989 1 2
+14990 1 2
+14991 1 2
+14992 1 2
+14993 1 2
+14994 1 2
+14995 1 2
+14996 1 2
+14997 1 2
+14998 1 2
+14999 1 2
+15000 1 2
+15001 1 2
+15002 1 2
+15003 1 2
+15004 1 2
+15005 1 2
+15006 1 2
+15007 1 2
+15008 1 2
+15009 1 2
+15010 1 2
+15011 1 2
+15012 1 2
+15013 1 2
+15014 1 2
+15015 1 2
+15016 1 2
+15017 1 2
+15018 1 2
+15019 1 2
+15020 1 2
+15021 1 2
+15022 1 2
+15023 1 2
+15024 1 2
+15025 1 2
+15026 1 2
+15027 1 2
+15028 1 2
+15029 1 2
+15030 1 2
+15031 1 2
+15032 1 2
+15033 1 2
+15034 1 2
+15035 1 2
+15036 1 2
+15037 1 2
+15038 1 2
+15039 1 2
+15040 1 2
+15041 1 2
+15042 1 2
+15043 1 2
+15044 1 2
+15045 1 2
+15046 1 2
+15047 1 2
+15048 1 2
+15049 1 2
+15050 1 2
+15051 1 2
+15052 1 2
+15053 1 2
+15054 1 2
+15055 1 2
+15056 1 2
+15057 1 2
+15058 1 2
+15059 1 2
+15060 1 2
+15061 1 2
+15062 1 2
+15063 1 2
+15064 1 2
+15065 1 2
+15066 1 2
+15067 1 2
+15068 1 2
+15069 1 2
+15070 1 2
+15071 1 2
+15072 1 2
+15073 1 2
+15074 1 2
+15075 1 2
+15076 1 2
+15077 1 2
+15078 1 2
+15079 1 2
+15080 1 2
+15081 1 2
+15082 1 2
+15083 1 2
+15084 1 2
+15085 1 2
+15086 1 2
+15087 1 2
+15088 1 2
+15089 1 2
+15090 1 2
+15091 1 2
+15092 1 2
+15093 1 2
+15094 1 2
+15095 1 2
+15096 1 2
+15097 1 2
+15098 1 2
+15099 1 2
+15100 1 2
+15101 1 2
+15102 1 2
+15103 1 2
+15104 1 2
+15105 1 2
+15106 1 2
+15107 1 2
+15108 1 2
+15109 1 2
+15110 1 2
+15111 1 2
+15112 1 2
+15113 1 2
+15114 1 2
+15115 1 2
+15116 1 2
+15117 1 2
+15118 1 2
+15119 1 2
+15120 1 2
+15121 1 2
+15122 1 2
+15123 1 2
+15124 1 2
+15125 1 2
+15126 1 2
+15127 1 2
+15128 1 2
+15129 1 2
+15130 1 2
+15131 1 2
+15132 1 2
+15133 1 2
+15134 1 2
+15135 1 2
+15136 1 2
+15137 1 2
+15138 1 2
+15139 1 2
+15140 1 2
+15141 1 2
+15142 1 2
+15143 1 2
+15144 1 2
+15145 1 2
+15146 1 2
+15147 1 2
+15148 1 2
+15149 1 2
+15150 1 2
+15151 1 2
+15152 1 2
+15153 1 2
+15154 1 2
+15155 1 2
+15156 1 2
+15157 1 2
+15158 1 2
+15159 1 2
+15160 1 2
+15161 1 2
+15162 1 2
+15163 1 2
+15164 1 2
+15165 1 2
+15166 1 2
+15167 1 2
+15168 1 2
+15169 1 2
+15170 1 2
+15171 1 2
+15172 1 2
+15173 1 2
+15174 1 2
+15175 1 2
+15176 1 2
+15177 1 2
+15178 1 2
+15179 1 2
+15180 1 2
+15181 1 2
+15182 1 2
+15183 1 2
+15184 1 2
+15185 1 2
+15186 1 2
+15187 1 2
+15188 1 2
+15189 1 2
+15190 1 2
+15191 1 2
+15192 1 2
+15193 1 2
+15194 1 2
+15195 1 2
+15196 1 2
+15197 1 2
+15198 1 2
+15199 1 2
+15200 1 2
+15201 1 2
+15202 1 2
+15203 1 2
+15204 1 2
+15205 1 2
+15206 1 2
+15207 1 2
+15208 1 2
+15209 1 2
+15210 1 2
+15211 1 2
+15212 1 2
+15213 1 2
+15214 1 2
+15215 1 2
+15216 1 2
+15217 1 2
+15218 1 2
+15219 1 2
+15220 1 2
+15221 1 2
+15222 1 2
+15223 1 2
+15224 1 2
+15225 1 2
+15226 1 2
+15227 1 2
+15228 1 2
+15229 1 2
+15230 1 2
+15231 1 2
+15232 1 2
+15233 1 2
+15234 1 2
+15235 1 2
+15236 1 2
+15237 1 2
+15238 1 2
+15239 1 2
+15240 1 2
+15241 1 2
+15242 1 2
+15243 1 2
+15244 1 2
+15245 1 2
+15246 1 2
+15247 1 2
+15248 1 2
+15249 1 2
+15250 1 2
+15251 1 2
+15252 1 2
+15253 1 2
+15254 1 2
+15255 1 2
+15256 1 2
+15257 1 2
+15258 1 2
+15259 1 2
+15260 1 2
+15261 1 2
+15262 1 2
+15263 1 2
+15264 1 2
+15265 1 2
+15266 1 2
+15267 1 2
+15268 1 2
+15269 1 2
+15270 1 2
+15271 1 2
+15272 1 2
+15273 1 2
+15274 1 2
+15275 1 2
+15276 1 2
+15277 1 2
+15278 1 2
+15279 1 2
+15280 1 2
+15281 1 2
+15282 1 2
+15283 1 2
+15284 1 2
+15285 1 2
+15286 1 2
+15287 1 2
+15288 1 2
+15289 1 2
+15290 1 2
+15291 1 2
+15292 1 2
+15293 1 2
+15294 1 2
+15295 1 2
+15296 1 2
+15297 1 2
+15298 1 2
+15299 1 2
+15300 1 2
+15301 1 2
+15302 1 2
+15303 1 2
+15304 1 2
+15305 1 2
+15306 1 2
+15307 1 2
+15308 1 2
+15309 1 2
+15310 1 2
+15311 1 2
+15312 1 2
+15313 1 2
+15314 1 2
+15315 1 2
+15316 1 2
+15317 1 2
+15318 1 2
+15319 1 2
+15320 1 2
+15321 1 2
+15322 1 2
+15323 1 2
+15324 1 2
+15325 1 2
+15326 1 2
+15327 1 2
+15328 1 2
+15329 1 2
+15330 1 2
+15331 1 2
+15332 1 2
+15333 1 2
+15334 1 2
+15335 1 2
+15336 1 2
+15337 1 2
+15338 1 2
+15339 1 2
+15340 1 2
+15341 1 2
+15342 1 2
+15343 1 2
+15344 1 2
+15345 1 2
+15346 1 2
+15347 1 2
+15348 1 2
+15349 1 2
+15350 1 2
+15351 1 2
+15352 1 2
+15353 1 2
+15354 1 2
+15355 1 2
+15356 1 2
+15357 1 2
+15358 1 2
+15359 1 2
+15360 1 2
+15361 1 2
+15362 1 2
+15363 1 2
+15364 1 2
+15365 1 2
+15366 1 2
+15367 1 2
+15368 1 2
+15369 1 2
+15370 1 2
+15371 1 2
+15372 1 2
+15373 1 2
+15374 1 2
+15375 1 2
+15376 1 2
+15377 1 2
+15378 1 2
+15379 1 2
+15380 1 2
+15381 1 2
+15382 1 2
+15383 1 2
+15384 1 2
+15385 1 2
+15386 1 2
+15387 1 2
+15388 1 2
+15389 1 2
+15390 1 2
+15391 1 2
+15392 1 2
+15393 1 2
+15394 1 2
+15395 1 2
+15396 1 2
+15397 1 2
+15398 1 2
+15399 1 2
+15400 1 2
+15401 1 2
+15402 1 2
+15403 1 2
+15404 1 2
+15405 1 2
+15406 1 2
+15407 1 2
+15408 1 2
+15409 1 2
+15410 1 2
+15411 1 2
+15412 1 2
+15413 1 2
+15414 1 2
+15415 1 2
+15416 1 2
+15417 1 2
+15418 1 2
+15419 1 2
+15420 1 2
+15421 1 2
+15422 1 2
+15423 1 2
+15424 1 2
+15425 1 2
+15426 1 2
+15427 1 2
+15428 1 2
+15429 1 2
+15430 1 2
+15431 1 2
+15432 1 2
+15433 1 2
+15434 1 2
+15435 1 2
+15436 1 2
+15437 1 2
+15438 1 2
+15439 1 2
+15440 1 2
+15441 1 2
+15442 1 2
+15443 1 2
+15444 1 2
+15445 1 2
+15446 1 2
+15447 1 2
+15448 1 2
+15449 1 2
+15450 1 2
+15451 1 2
+15452 1 2
+15453 1 2
+15454 1 2
+15455 1 2
+15456 1 2
+15457 1 2
+15458 1 2
+15459 1 2
+15460 1 2
+15461 1 2
+15462 1 2
+15463 1 2
+15464 1 2
+15465 1 2
+15466 1 2
+15467 1 2
+15468 1 2
+15469 1 2
+15470 1 2
+15471 1 2
+15472 1 2
+15473 1 2
+15474 1 2
+15475 1 2
+15476 1 2
+15477 1 2
+15478 1 2
+15479 1 2
+15480 1 2
+15481 1 2
+15482 1 2
+15483 1 2
+15484 1 2
+15485 1 2
+15486 1 2
+15487 1 2
+15488 1 2
+15489 1 2
+15490 1 2
+15491 1 2
+15492 1 2
+15493 1 2
+15494 1 2
+15495 1 2
+15496 1 2
+15497 1 2
+15498 1 2
+15499 1 2
+15500 1 2
+15501 1 2
+15502 1 2
+15503 1 2
+15504 1 2
+15505 1 2
+15506 1 2
+15507 1 2
+15508 1 2
+15509 1 2
+15510 1 2
+15511 1 2
+15512 1 2
+15513 1 2
+15514 1 2
+15515 1 2
+15516 1 2
+15517 1 2
+15518 1 2
+15519 1 2
+15520 1 2
+15521 1 2
+15522 1 2
+15523 1 2
+15524 1 2
+15525 1 2
+15526 1 2
+15527 1 2
+15528 1 2
+15529 1 2
+15530 1 2
+15531 1 2
+15532 1 2
+15533 1 2
+15534 1 2
+15535 1 2
+15536 1 2
+15537 1 2
+15538 1 2
+15539 1 2
+15540 1 2
+15541 1 2
+15542 1 2
+15543 1 2
+15544 1 2
+15545 1 2
+15546 1 2
+15547 1 2
+15548 1 2
+15549 1 2
+15550 1 2
+15551 1 2
+15552 1 2
+15553 1 2
+15554 1 2
+15555 1 2
+15556 1 2
+15557 1 2
+15558 1 2
+15559 1 2
+15560 1 2
+15561 1 2
+15562 1 2
+15563 1 2
+15564 1 2
+15565 1 2
+15566 1 2
+15567 1 2
+15568 1 2
+15569 1 2
+15570 1 2
+15571 1 2
+15572 1 2
+15573 1 2
+15574 1 2
+15575 1 2
+15576 1 2
+15577 1 2
+15578 1 2
+15579 1 2
+15580 1 2
+15581 1 2
+15582 1 2
+15583 1 2
+15584 1 2
+15585 1 2
+15586 1 2
+15587 1 2
+15588 1 2
+15589 1 2
+15590 1 2
+15591 1 2
+15592 1 2
+15593 1 2
+15594 1 2
+15595 1 2
+15596 1 2
+15597 1 2
+15598 1 2
+15599 1 2
+15600 1 2
+15601 1 2
+15602 1 2
+15603 1 2
+15604 1 2
+15605 1 2
+15606 1 2
+15607 1 2
+15608 1 2
+15609 1 2
+15610 1 2
+15611 1 2
+15612 1 2
+15613 1 2
+15614 1 2
+15615 1 2
+15616 1 2
+15617 1 2
+15618 1 2
+15619 1 2
+15620 1 2
+15621 1 2
+15622 1 2
+15623 1 2
+15624 1 2
+15625 1 2
+15626 1 2
+15627 1 2
+15628 1 2
+15629 1 2
+15630 1 2
+15631 1 2
+15632 1 2
+15633 1 2
+15634 1 2
+15635 1 2
+15636 1 2
+15637 1 2
+15638 1 2
+15639 1 2
+15640 1 2
+15641 1 2
+15642 1 2
+15643 1 2
+15644 1 2
+15645 1 2
+15646 1 2
+15647 1 2
+15648 1 2
+15649 1 2
+15650 1 2
+15651 1 2
+15652 1 2
+15653 1 2
+15654 1 2
+15655 1 2
+15656 1 2
+15657 1 2
+15658 1 2
+15659 1 2
+15660 1 2
+15661 1 2
+15662 1 2
+15663 1 2
+15664 1 2
+15665 1 2
+15666 1 2
+15667 1 2
+15668 1 2
+15669 1 2
+15670 1 2
+15671 1 2
+15672 1 2
+15673 1 2
+15674 1 2
+15675 1 2
+15676 1 2
+15677 1 2
+15678 1 2
+15679 1 2
+15680 1 2
+15681 1 2
+15682 1 2
+15683 1 2
+15684 1 2
+15685 1 2
+15686 1 2
+15687 1 2
+15688 1 2
+15689 1 2
+15690 1 2
+15691 1 2
+15692 1 2
+15693 1 2
+15694 1 2
+15695 1 2
+15696 1 2
+15697 1 2
+15698 1 2
+15699 1 2
+15700 1 2
+15701 1 2
+15702 1 2
+15703 1 2
+15704 1 2
+15705 1 2
+15706 1 2
+15707 1 2
+15708 1 2
+15709 1 2
+15710 1 2
+15711 1 2
+15712 1 2
+15713 1 2
+15714 1 2
+15715 1 2
+15716 1 2
+15717 1 2
+15718 1 2
+15719 1 2
+15720 1 2
+15721 1 2
+15722 1 2
+15723 1 2
+15724 1 2
+15725 1 2
+15726 1 2
+15727 1 2
+15728 1 2
+15729 1 2
+15730 1 2
+15731 1 2
+15732 1 2
+15733 1 2
+15734 1 2
+15735 1 2
+15736 1 2
+15737 1 2
+15738 1 2
+15739 1 2
+15740 1 2
+15741 1 2
+15742 1 2
+15743 1 2
+15744 1 2
+15745 1 2
+15746 1 2
+15747 1 2
+15748 1 2
+15749 1 2
+15750 1 2
+15751 1 2
+15752 1 2
+15753 1 2
+15754 1 2
+15755 1 2
+15756 1 2
+15757 1 2
+15758 1 2
+15759 1 2
+15760 1 2
+15761 1 2
+15762 1 2
+15763 1 2
+15764 1 2
+15765 1 2
+15766 1 2
+15767 1 2
+15768 1 2
+15769 1 2
+15770 1 2
+15771 1 2
+15772 1 2
+15773 1 2
+15774 1 2
+15775 1 2
+15776 1 2
+15777 1 2
+15778 1 2
+15779 1 2
+15780 1 2
+15781 1 2
+15782 1 2
+15783 1 2
+15784 1 2
+15785 1 2
+15786 1 2
+15787 1 2
+15788 1 2
+15789 1 2
+15790 1 2
+15791 1 2
+15792 1 2
+15793 1 2
+15794 1 2
+15795 1 2
+15796 1 2
+15797 1 2
+15798 1 2
+15799 1 2
+15800 1 2
+15801 1 2
+15802 1 2
+15803 1 2
+15804 1 2
+15805 1 2
+15806 1 2
+15807 1 2
+15808 1 2
+15809 1 2
+15810 1 2
+15811 1 2
+15812 1 2
+15813 1 2
+15814 1 2
+15815 1 2
+15816 1 2
+15817 1 2
+15818 1 2
+15819 1 2
+15820 1 2
+15821 1 2
+15822 1 2
+15823 1 2
+15824 1 2
+15825 1 2
+15826 1 2
+15827 1 2
+15828 1 2
+15829 1 2
+15830 1 2
+15831 1 2
+15832 1 2
+15833 1 2
+15834 1 2
+15835 1 2
+15836 1 2
+15837 1 2
+15838 1 2
+15839 1 2
+15840 1 2
+15841 1 2
+15842 1 2
+15843 1 2
+15844 1 2
+15845 1 2
+15846 1 2
+15847 1 2
+15848 1 2
+15849 1 2
+15850 1 2
+15851 1 2
+15852 1 2
+15853 1 2
+15854 1 2
+15855 1 2
+15856 1 2
+15857 1 2
+15858 1 2
+15859 1 2
+15860 1 2
+15861 1 2
+15862 1 2
+15863 1 2
+15864 1 2
+15865 1 2
+15866 1 2
+15867 1 2
+15868 1 2
+15869 1 2
+15870 1 2
+15871 1 2
+15872 1 2
+15873 1 2
+15874 1 2
+15875 1 2
+15876 1 2
+15877 1 2
+15878 1 2
+15879 1 2
+15880 1 2
+15881 1 2
+15882 1 2
+15883 1 2
+15884 1 2
+15885 1 2
+15886 1 2
+15887 1 2
+15888 1 2
+15889 1 2
+15890 1 2
+15891 1 2
+15892 1 2
+15893 1 2
+15894 1 2
+15895 1 2
+15896 1 2
+15897 1 2
+15898 1 2
+15899 1 2
+15900 1 2
+15901 1 2
+15902 1 2
+15903 1 2
+15904 1 2
+15905 1 2
+15906 1 2
+15907 1 2
+15908 1 2
+15909 1 2
+15910 1 2
+15911 1 2
+15912 1 2
+15913 1 2
+15914 1 2
+15915 1 2
+15916 1 2
+15917 1 2
+15918 1 2
+15919 1 2
+15920 1 2
+15921 1 2
+15922 1 2
+15923 1 2
+15924 1 2
+15925 1 2
+15926 1 2
+15927 1 2
+15928 1 2
+15929 1 2
+15930 1 2
+15931 1 2
+15932 1 2
+15933 1 2
+15934 1 2
+15935 1 2
+15936 1 2
+15937 1 2
+15938 1 2
+15939 1 2
+15940 1 2
+15941 1 2
+15942 1 2
+15943 1 2
+15944 1 2
+15945 1 2
+15946 1 2
+15947 1 2
+15948 1 2
+15949 1 2
+15950 1 2
+15951 1 2
+15952 1 2
+15953 1 2
+15954 1 2
+15955 1 2
+15956 1 2
+15957 1 2
+15958 1 2
+15959 1 2
+15960 1 2
+15961 1 2
+15962 1 2
+15963 1 2
+15964 1 2
+15965 1 2
+15966 1 2
+15967 1 2
+15968 1 2
+15969 1 2
+15970 1 2
+15971 1 2
+15972 1 2
+15973 1 2
+15974 1 2
+15975 1 2
+15976 1 2
+15977 1 2
+15978 1 2
+15979 1 2
+15980 1 2
+15981 1 2
+15982 1 2
+15983 1 2
+15984 1 2
+15985 1 2
+15986 1 2
+15987 1 2
+15988 1 2
+15989 1 2
+15990 1 2
+15991 1 2
+15992 1 2
+15993 1 2
+15994 1 2
+15995 1 2
+15996 1 2
+15997 1 2
+15998 1 2
+15999 1 2
+16000 1 2
+16001 1 2
+16002 1 2
+16003 1 2
+16004 1 2
+16005 1 2
+16006 1 2
+16007 1 2
+16008 1 2
+16009 1 2
+16010 1 2
+16011 1 2
+16012 1 2
+16013 1 2
+16014 1 2
+16015 1 2
+16016 1 2
+16017 1 2
+16018 1 2
+16019 1 2
+16020 1 2
+16021 1 2
+16022 1 2
+16023 1 2
+16024 1 2
+16025 1 2
+16026 1 2
+16027 1 2
+16028 1 2
+16029 1 2
+16030 1 2
+16031 1 2
+16032 1 2
+16033 1 2
+16034 1 2
+16035 1 2
+16036 1 2
+16037 1 2
+16038 1 2
+16039 1 2
+16040 1 2
+16041 1 2
+16042 1 2
+16043 1 2
+16044 1 2
+16045 1 2
+16046 1 2
+16047 1 2
+16048 1 2
+16049 1 2
+16050 1 2
+16051 1 2
+16052 1 2
+16053 1 2
+16054 1 2
+16055 1 2
+16056 1 2
+16057 1 2
+16058 1 2
+16059 1 2
+16060 1 2
+16061 1 2
+16062 1 2
+16063 1 2
+16064 1 2
+16065 1 2
+16066 1 2
+16067 1 2
+16068 1 2
+16069 1 2
+16070 1 2
+16071 1 2
+16072 1 2
+16073 1 2
+16074 1 2
+16075 1 2
+16076 1 2
+16077 1 2
+16078 1 2
+16079 1 2
+16080 1 2
+16081 1 2
+16082 1 2
+16083 1 2
+16084 1 2
+16085 1 2
+16086 1 2
+16087 1 2
+16088 1 2
+16089 1 2
+16090 1 2
+16091 1 2
+16092 1 2
+16093 1 2
+16094 1 2
+16095 1 2
+16096 1 2
+16097 1 2
+16098 1 2
+16099 1 2
+16100 1 2
+16101 1 2
+16102 1 2
+16103 1 2
+16104 1 2
+16105 1 2
+16106 1 2
+16107 1 2
+16108 1 2
+16109 1 2
+16110 1 2
+16111 1 2
+16112 1 2
+16113 1 2
+16114 1 2
+16115 1 2
+16116 1 2
+16117 1 2
+16118 1 2
+16119 1 2
+16120 1 2
+16121 1 2
+16122 1 2
+16123 1 2
+16124 1 2
+16125 1 2
+16126 1 2
+16127 1 2
+16128 1 2
+16129 1 2
+16130 1 2
+16131 1 2
+16132 1 2
+16133 1 2
+16134 1 2
+16135 1 2
+16136 1 2
+16137 1 2
+16138 1 2
+16139 1 2
+16140 1 2
+16141 1 2
+16142 1 2
+16143 1 2
+16144 1 2
+16145 1 2
+16146 1 2
+16147 1 2
+16148 1 2
+16149 1 2
+16150 1 2
+16151 1 2
+16152 1 2
+16153 1 2
+16154 1 2
+16155 1 2
+16156 1 2
+16157 1 2
+16158 1 2
+16159 1 2
+16160 1 2
+16161 1 2
+16162 1 2
+16163 1 2
+16164 1 2
+16165 1 2
+16166 1 2
+16167 1 2
+16168 1 2
+16169 1 2
+16170 1 2
+16171 1 2
+16172 1 2
+16173 1 2
+16174 1 2
+16175 1 2
+16176 1 2
+16177 1 2
+16178 1 2
+16179 1 2
+16180 1 2
+16181 1 2
+16182 1 2
+16183 1 2
+16184 1 2
+16185 1 2
+16186 1 2
+16187 1 2
+16188 1 2
+16189 1 2
+16190 1 2
+16191 1 2
+16192 1 2
+16193 1 2
+16194 1 2
+16195 1 2
+16196 1 2
+16197 1 2
+16198 1 2
+16199 1 2
+16200 1 2
+16201 1 2
+16202 1 2
+16203 1 2
+16204 1 2
+16205 1 2
+16206 1 2
+16207 1 2
+16208 1 2
+16209 1 2
+16210 1 2
+16211 1 2
+16212 1 2
+16213 1 2
+16214 1 2
+16215 1 2
+16216 1 2
+16217 1 2
+16218 1 2
+16219 1 2
+16220 1 2
+16221 1 2
+16222 1 2
+16223 1 2
+16224 1 2
+16225 1 2
+16226 1 2
+16227 1 2
+16228 1 2
+16229 1 2
+16230 1 2
+16231 1 2
+16232 1 2
+16233 1 2
+16234 1 2
+16235 1 2
+16236 1 2
+16237 1 2
+16238 1 2
+16239 1 2
+16240 1 2
+16241 1 2
+16242 1 2
+16243 1 2
+16244 1 2
+16245 1 2
+16246 1 2
+16247 1 2
+16248 1 2
+16249 1 2
+16250 1 2
+16251 1 2
+16252 1 2
+16253 1 2
+16254 1 2
+16255 1 2
+16256 1 2
+16257 1 2
+16258 1 2
+16259 1 2
+16260 1 2
+16261 1 2
+16262 1 2
+16263 1 2
+16264 1 2
+16265 1 2
+16266 1 2
+16267 1 2
+16268 1 2
+16269 1 2
+16270 1 2
+16271 1 2
+16272 1 2
+16273 1 2
+16274 1 2
+16275 1 2
+16276 1 2
+16277 1 2
+16278 1 2
+16279 1 2
+16280 1 2
+16281 1 2
+16282 1 2
+16283 1 2
+16284 1 2
+16285 1 2
+16286 1 2
+16287 1 2
+16288 1 2
+16289 1 2
+16290 1 2
+16291 1 2
+16292 1 2
+16293 1 2
+16294 1 2
+16295 1 2
+16296 1 2
+16297 1 2
+16298 1 2
+16299 1 2
+16300 1 2
+16301 1 2
+16302 1 2
+16303 1 2
+16304 1 2
+16305 1 2
+16306 1 2
+16307 1 2
+16308 1 2
+16309 1 2
+16310 1 2
+16311 1 2
+16312 1 2
+16313 1 2
+16314 1 2
+16315 1 2
+16316 1 2
+16317 1 2
+16318 1 2
+16319 1 2
+16320 1 2
+16321 1 2
+16322 1 2
+16323 1 2
+16324 1 2
+16325 1 2
+16326 1 2
+16327 1 2
+16328 1 2
+16329 1 2
+16330 1 2
+16331 1 2
+16332 1 2
+16333 1 2
+16334 1 2
+16335 1 2
+16336 1 2
+16337 1 2
+16338 1 2
+16339 1 2
+16340 1 2
+16341 1 2
+16342 1 2
+16343 1 2
+16344 1 2
+16345 1 2
+16346 1 2
+16347 1 2
+16348 1 2
+16349 1 2
+16350 1 2
+16351 1 2
+16352 1 2
+16353 1 2
+16354 1 2
+16355 1 2
+16356 1 2
+16357 1 2
+16358 1 2
+16359 1 2
+16360 1 2
+16361 1 2
+16362 1 2
+16363 1 2
+16364 1 2
+16365 1 2
+16366 1 2
+16367 1 2
+16368 1 2
+16369 1 2
+16370 1 2
+16371 1 2
+16372 1 2
+16373 1 2
+16374 1 2
+16375 1 2
+16376 1 2
+16377 1 2
+16378 1 2
+16379 1 2
+16380 1 2
+16381 1 2
+16382 1 2
+16383 1 2
+16384 1 2
+16385 1 2
+16386 1 2
+16387 1 2
+16388 1 2
+16389 1 2
+16390 1 2
+16391 1 2
+16392 1 2
+16393 1 2
+16394 1 2
+16395 1 2
+16396 1 2
+16397 1 2
+16398 1 2
+16399 1 2
+16400 1 2
+16401 1 2
+16402 1 2
+16403 1 2
+16404 1 2
+16405 1 2
+16406 1 2
+16407 1 2
+16408 1 2
+16409 1 2
+16410 1 2
+16411 1 2
+16412 1 2
+16413 1 2
+16414 1 2
+16415 1 2
+16416 1 2
+16417 1 2
+16418 1 2
+16419 1 2
+16420 1 2
+16421 1 2
+16422 1 2
+16423 1 2
+16424 1 2
+16425 1 2
+16426 1 2
+16427 1 2
+16428 1 2
+16429 1 2
+16430 1 2
+16431 1 2
+16432 1 2
+16433 1 2
+16434 1 2
+16435 1 2
+16436 1 2
+16437 1 2
+16438 1 2
+16439 1 2
+16440 1 2
+16441 1 2
+16442 1 2
+16443 1 2
+16444 1 2
+16445 1 2
+16446 1 2
+16447 1 2
+16448 1 2
+16449 1 2
+16450 1 2
+16451 1 2
+16452 1 2
+16453 1 2
+16454 1 2
+16455 1 2
+16456 1 2
+16457 1 2
+16458 1 2
+16459 1 2
+16460 1 2
+16461 1 2
+16462 1 2
+16463 1 2
+16464 1 2
+16465 1 2
+16466 1 2
+16467 1 2
+16468 1 2
+16469 1 2
+16470 1 2
+16471 1 2
+16472 1 2
+16473 1 2
+16474 1 2
+16475 1 2
+16476 1 2
+16477 1 2
+16478 1 2
+16479 1 2
+16480 1 2
+16481 1 2
+16482 1 2
+16483 1 2
+16484 1 2
+16485 1 2
+16486 1 2
+16487 1 2
+16488 1 2
+16489 1 2
+16490 1 2
+16491 1 2
+16492 1 2
+16493 1 2
+16494 1 2
+16495 1 2
+16496 1 2
+16497 1 2
+16498 1 2
+16499 1 2
+16500 1 2
+16501 1 2
+16502 1 2
+16503 1 2
+16504 1 2
+16505 1 2
+16506 1 2
+16507 1 2
+16508 1 2
+16509 1 2
+16510 1 2
+16511 1 2
+16512 1 2
+16513 1 2
+16514 1 2
+16515 1 2
+16516 1 2
+16517 1 2
+16518 1 2
+16519 1 2
+16520 1 2
+16521 1 2
+16522 1 2
+16523 1 2
+16524 1 2
+16525 1 2
+16526 1 2
+16527 1 2
+16528 1 2
+16529 1 2
+16530 1 2
+16531 1 2
+16532 1 2
+16533 1 2
+16534 1 2
+16535 1 2
+16536 1 2
+16537 1 2
+16538 1 2
+16539 1 2
+16540 1 2
+16541 1 2
+16542 1 2
+16543 1 2
+16544 1 2
+16545 1 2
+16546 1 2
+16547 1 2
+16548 1 2
+16549 1 2
+16550 1 2
+16551 1 2
+16552 1 2
+16553 1 2
+16554 1 2
+16555 1 2
+16556 1 2
+16557 1 2
+16558 1 2
+16559 1 2
+16560 1 2
+16561 1 2
+16562 1 2
+16563 1 2
+16564 1 2
+16565 1 2
+16566 1 2
+16567 1 2
+16568 1 2
+16569 1 2
+16570 1 2
+16571 1 2
+16572 1 2
+16573 1 2
+16574 1 2
+16575 1 2
+16576 1 2
+16577 1 2
+16578 1 2
+16579 1 2
+16580 1 2
+16581 1 2
+16582 1 2
+16583 1 2
+16584 1 2
+16585 1 2
+16586 1 2
+16587 1 2
+16588 1 2
+16589 1 2
+16590 1 2
+16591 1 2
+16592 1 2
+16593 1 2
+16594 1 2
+16595 1 2
+16596 1 2
+16597 1 2
+16598 1 2
+16599 1 2
+16600 1 2
+16601 1 2
+16602 1 2
+16603 1 2
+16604 1 2
+16605 1 2
+16606 1 2
+16607 1 2
+16608 1 2
+16609 1 2
+16610 1 2
+16611 1 2
+16612 1 2
+16613 1 2
+16614 1 2
+16615 1 2
+16616 1 2
+16617 1 2
+16618 1 2
+16619 1 2
+16620 1 2
+16621 1 2
+16622 1 2
+16623 1 2
+16624 1 2
+16625 1 2
+16626 1 2
+16627 1 2
+16628 1 2
+16629 1 2
+16630 1 2
+16631 1 2
+16632 1 2
+16633 1 2
+16634 1 2
+16635 1 2
+16636 1 2
+16637 1 2
+16638 1 2
+16639 1 2
+16640 1 2
+16641 1 2
+16642 1 2
+16643 1 2
+16644 1 2
+16645 1 2
+16646 1 2
+16647 1 2
+16648 1 2
+16649 1 2
+16650 1 2
+16651 1 2
+16652 1 2
+16653 1 2
+16654 1 2
+16655 1 2
+16656 1 2
+16657 1 2
+16658 1 2
+16659 1 2
+16660 1 2
+16661 1 2
+16662 1 2
+16663 1 2
+16664 1 2
+16665 1 2
+16666 1 2
+16667 1 2
+16668 1 2
+16669 1 2
+16670 1 2
+16671 1 2
+16672 1 2
+16673 1 2
+16674 1 2
+16675 1 2
+16676 1 2
+16677 1 2
+16678 1 2
+16679 1 2
+16680 1 2
+16681 1 2
+16682 1 2
+16683 1 2
+16684 1 2
+16685 1 2
+16686 1 2
+16687 1 2
+16688 1 2
+16689 1 2
+16690 1 2
+16691 1 2
+16692 1 2
+16693 1 2
+16694 1 2
+16695 1 2
+16696 1 2
+16697 1 2
+16698 1 2
+16699 1 2
+16700 1 2
+16701 1 2
+16702 1 2
+16703 1 2
+16704 1 2
+16705 1 2
+16706 1 2
+16707 1 2
+16708 1 2
+16709 1 2
+16710 1 2
+16711 1 2
+16712 1 2
+16713 1 2
+16714 1 2
+16715 1 2
+16716 1 2
+16717 1 2
+16718 1 2
+16719 1 2
+16720 1 2
+16721 1 2
+16722 1 2
+16723 1 2
+16724 1 2
+16725 1 2
+16726 1 2
+16727 1 2
+16728 1 2
+16729 1 2
+16730 1 2
+16731 1 2
+16732 1 2
+16733 1 2
+16734 1 2
+16735 1 2
+16736 1 2
+16737 1 2
+16738 1 2
+16739 1 2
+16740 1 2
+16741 1 2
+16742 1 2
+16743 1 2
+16744 1 2
+16745 1 2
+16746 1 2
+16747 1 2
+16748 1 2
+16749 1 2
+16750 1 2
+16751 1 2
+16752 1 2
+16753 1 2
+16754 1 2
+16755 1 2
+16756 1 2
+16757 1 2
+16758 1 2
+16759 1 2
+16760 1 2
+16761 1 2
+16762 1 2
+16763 1 2
+16764 1 2
+16765 1 2
+16766 1 2
+16767 1 2
+16768 1 2
+16769 1 2
+16770 1 2
+16771 1 2
+16772 1 2
+16773 1 2
+16774 1 2
+16775 1 2
+16776 1 2
+16777 1 2
+16778 1 2
+16779 1 2
+16780 1 2
+16781 1 2
+16782 1 2
+16783 1 2
+16784 1 2
+16785 1 2
+16786 1 2
+16787 1 2
+16788 1 2
+16789 1 2
+16790 1 2
+16791 1 2
+16792 1 2
+16793 1 2
+16794 1 2
+16795 1 2
+16796 1 2
+16797 1 2
+16798 1 2
+16799 1 2
+16800 1 2
+16801 1 2
+16802 1 2
+16803 1 2
+16804 1 2
+16805 1 2
+16806 1 2
+16807 1 2
+16808 1 2
+16809 1 2
+16810 1 2
+16811 1 2
+16812 1 2
+16813 1 2
+16814 1 2
+16815 1 2
+16816 1 2
+16817 1 2
+16818 1 2
+16819 1 2
+16820 1 2
+16821 1 2
+16822 1 2
+16823 1 2
+16824 1 2
+16825 1 2
+16826 1 2
+16827 1 2
+16828 1 2
+16829 1 2
+16830 1 2
+16831 1 2
+16832 1 2
+16833 1 2
+16834 1 2
+16835 1 2
+16836 1 2
+16837 1 2
+16838 1 2
+16839 1 2
+16840 1 2
+16841 1 2
+16842 1 2
+16843 1 2
+16844 1 2
+16845 1 2
+16846 1 2
+16847 1 2
+16848 1 2
+16849 1 2
+16850 1 2
+16851 1 2
+16852 1 2
+16853 1 2
+16854 1 2
+16855 1 2
+16856 1 2
+16857 1 2
+16858 1 2
+16859 1 2
+16860 1 2
+16861 1 2
+16862 1 2
+16863 1 2
+16864 1 2
+16865 1 2
+16866 1 2
+16867 1 2
+16868 1 2
+16869 1 2
+16870 1 2
+16871 1 2
+16872 1 2
+16873 1 2
+16874 1 2
+16875 1 2
+16876 1 2
+16877 1 2
+16878 1 2
+16879 1 2
+16880 1 2
+16881 1 2
+16882 1 2
+16883 1 2
+16884 1 2
+16885 1 2
+16886 1 2
+16887 1 2
+16888 1 2
+16889 1 2
+16890 1 2
+16891 1 2
+16892 1 2
+16893 1 2
+16894 1 2
+16895 1 2
+16896 1 2
+16897 1 2
+16898 1 2
+16899 1 2
+16900 1 2
+16901 1 2
+16902 1 2
+16903 1 2
+16904 1 2
+16905 1 2
+16906 1 2
+16907 1 2
+16908 1 2
+16909 1 2
+16910 1 2
+16911 1 2
+16912 1 2
+16913 1 2
+16914 1 2
+16915 1 2
+16916 1 2
+16917 1 2
+16918 1 2
+16919 1 2
+16920 1 2
+16921 1 2
+16922 1 2
+16923 1 2
+16924 1 2
+16925 1 2
+16926 1 2
+16927 1 2
+16928 1 2
+16929 1 2
+16930 1 2
+16931 1 2
+16932 1 2
+16933 1 2
+16934 1 2
+16935 1 2
+16936 1 2
+16937 1 2
+16938 1 2
+16939 1 2
+16940 1 2
+16941 1 2
+16942 1 2
+16943 1 2
+16944 1 2
+16945 1 2
+16946 1 2
+16947 1 2
+16948 1 2
+16949 1 2
+16950 1 2
+16951 1 2
+16952 1 2
+16953 1 2
+16954 1 2
+16955 1 2
+16956 1 2
+16957 1 2
+16958 1 2
+16959 1 2
+16960 1 2
+16961 1 2
+16962 1 2
+16963 1 2
+16964 1 2
+16965 1 2
+16966 1 2
+16967 1 2
+16968 1 2
+16969 1 2
+16970 1 2
+16971 1 2
+16972 1 2
+16973 1 2
+16974 1 2
+16975 1 2
+16976 1 2
+16977 1 2
+16978 1 2
+16979 1 2
+16980 1 2
+16981 1 2
+16982 1 2
+16983 1 2
+16984 1 2
+16985 1 2
+16986 1 2
+16987 1 2
+16988 1 2
+16989 1 2
+16990 1 2
+16991 1 2
+16992 1 2
+16993 1 2
+16994 1 2
+16995 1 2
+16996 1 2
+16997 1 2
+16998 1 2
+16999 1 2
+17000 1 2
+17001 1 2
+17002 1 2
+17003 1 2
+17004 1 2
+17005 1 2
+17006 1 2
+17007 1 2
+17008 1 2
+17009 1 2
+17010 1 2
+17011 1 2
+17012 1 2
+17013 1 2
+17014 1 2
+17015 1 2
+17016 1 2
+17017 1 2
+17018 1 2
+17019 1 2
+17020 1 2
+17021 1 2
+17022 1 2
+17023 1 2
+17024 1 2
+17025 1 2
+17026 1 2
+17027 1 2
+17028 1 2
+17029 1 2
+17030 1 2
+17031 1 2
+17032 1 2
+17033 1 2
+17034 1 2
+17035 1 2
+17036 1 2
+17037 1 2
+17038 1 2
+17039 1 2
+17040 1 2
+17041 1 2
+17042 1 2
+17043 1 2
+17044 1 2
+17045 1 2
+17046 1 2
+17047 1 2
+17048 1 2
+17049 1 2
+17050 1 2
+17051 1 2
+17052 1 2
+17053 1 2
+17054 1 2
+17055 1 2
+17056 1 2
+17057 1 2
+17058 1 2
+17059 1 2
+17060 1 2
+17061 1 2
+17062 1 2
+17063 1 2
+17064 1 2
+17065 1 2
+17066 1 2
+17067 1 2
+17068 1 2
+17069 1 2
+17070 1 2
+17071 1 2
+17072 1 2
+17073 1 2
+17074 1 2
+17075 1 2
+17076 1 2
+17077 1 2
+17078 1 2
+17079 1 2
+17080 1 2
+17081 1 2
+17082 1 2
+17083 1 2
+17084 1 2
+17085 1 2
+17086 1 2
+17087 1 2
+17088 1 2
+17089 1 2
+17090 1 2
+17091 1 2
+17092 1 2
+17093 1 2
+17094 1 2
+17095 1 2
+17096 1 2
+17097 1 2
+17098 1 2
+17099 1 2
+17100 1 2
+17101 1 2
+17102 1 2
+17103 1 2
+17104 1 2
+17105 1 2
+17106 1 2
+17107 1 2
+17108 1 2
+17109 1 2
+17110 1 2
+17111 1 2
+17112 1 2
+17113 1 2
+17114 1 2
+17115 1 2
+17116 1 2
+17117 1 2
+17118 1 2
+17119 1 2
+17120 1 2
+17121 1 2
+17122 1 2
+17123 1 2
+17124 1 2
+17125 1 2
+17126 1 2
+17127 1 2
+17128 1 2
+17129 1 2
+17130 1 2
+17131 1 2
+17132 1 2
+17133 1 2
+17134 1 2
+17135 1 2
+17136 1 2
+17137 1 2
+17138 1 2
+17139 1 2
+17140 1 2
+17141 1 2
+17142 1 2
+17143 1 2
+17144 1 2
+17145 1 2
+17146 1 2
+17147 1 2
+17148 1 2
+17149 1 2
+17150 1 2
+17151 1 2
+17152 1 2
+17153 1 2
+17154 1 2
+17155 1 2
+17156 1 2
+17157 1 2
+17158 1 2
+17159 1 2
+17160 1 2
+17161 1 2
+17162 1 2
+17163 1 2
+17164 1 2
+17165 1 2
+17166 1 2
+17167 1 2
+17168 1 2
+17169 1 2
+17170 1 2
+17171 1 2
+17172 1 2
+17173 1 2
+17174 1 2
+17175 1 2
+17176 1 2
+17177 1 2
+17178 1 2
+17179 1 2
+17180 1 2
+17181 1 2
+17182 1 2
+17183 1 2
+17184 1 2
+17185 1 2
+17186 1 2
+17187 1 2
+17188 1 2
+17189 1 2
+17190 1 2
+17191 1 2
+17192 1 2
+17193 1 2
+17194 1 2
+17195 1 2
+17196 1 2
+17197 1 2
+17198 1 2
+17199 1 2
+17200 1 2
+17201 1 2
+17202 1 2
+17203 1 2
+17204 1 2
+17205 1 2
+17206 1 2
+17207 1 2
+17208 1 2
+17209 1 2
+17210 1 2
+17211 1 2
+17212 1 2
+17213 1 2
+17214 1 2
+17215 1 2
+17216 1 2
+17217 1 2
+17218 1 2
+17219 1 2
+17220 1 2
+17221 1 2
+17222 1 2
+17223 1 2
+17224 1 2
+17225 1 2
+17226 1 2
+17227 1 2
+17228 1 2
+17229 1 2
+17230 1 2
+17231 1 2
+17232 1 2
+17233 1 2
+17234 1 2
+17235 1 2
+17236 1 2
+17237 1 2
+17238 1 2
+17239 1 2
+17240 1 2
+17241 1 2
+17242 1 2
+17243 1 2
+17244 1 2
+17245 1 2
+17246 1 2
+17247 1 2
+17248 1 2
+17249 1 2
+17250 1 2
+17251 1 2
+17252 1 2
+17253 1 2
+17254 1 2
+17255 1 2
+17256 1 2
+17257 1 2
+17258 1 2
+17259 1 2
+17260 1 2
+17261 1 2
+17262 1 2
+17263 1 2
+17264 1 2
+17265 1 2
+17266 1 2
+17267 1 2
+17268 1 2
+17269 1 2
+17270 1 2
+17271 1 2
+17272 1 2
+17273 1 2
+17274 1 2
+17275 1 2
+17276 1 2
+17277 1 2
+17278 1 2
+17279 1 2
+17280 1 2
+17281 1 2
+17282 1 2
+17283 1 2
+17284 1 2
+17285 1 2
+17286 1 2
+17287 1 2
+17288 1 2
+17289 1 2
+17290 1 2
+17291 1 2
+17292 1 2
+17293 1 2
+17294 1 2
+17295 1 2
+17296 1 2
+17297 1 2
+17298 1 2
+17299 1 2
+17300 1 2
+17301 1 2
+17302 1 2
+17303 1 2
+17304 1 2
+17305 1 2
+17306 1 2
+17307 1 2
+17308 1 2
+17309 1 2
+17310 1 2
+17311 1 2
+17312 1 2
+17313 1 2
+17314 1 2
+17315 1 2
+17316 1 2
+17317 1 2
+17318 1 2
+17319 1 2
+17320 1 2
+17321 1 2
+17322 1 2
+17323 1 2
+17324 1 2
+17325 1 2
+17326 1 2
+17327 1 2
+17328 1 2
+17329 1 2
+17330 1 2
+17331 1 2
+17332 1 2
+17333 1 2
+17334 1 2
+17335 1 2
+17336 1 2
+17337 1 2
+17338 1 2
+17339 1 2
+17340 1 2
+17341 1 2
+17342 1 2
+17343 1 2
+17344 1 2
+17345 1 2
+17346 1 2
+17347 1 2
+17348 1 2
+17349 1 2
+17350 1 2
+17351 1 2
+17352 1 2
+17353 1 2
+17354 1 2
+17355 1 2
+17356 1 2
+17357 1 2
+17358 1 2
+17359 1 2
+17360 1 2
+17361 1 2
+17362 1 2
+17363 1 2
+17364 1 2
+17365 1 2
+17366 1 2
+17367 1 2
+17368 1 2
+17369 1 2
+17370 1 2
+17371 1 2
+17372 1 2
+17373 1 2
+17374 1 2
+17375 1 2
+17376 1 2
+17377 1 2
+17378 1 2
+17379 1 2
+17380 1 2
+17381 1 2
+17382 1 2
+17383 1 2
+17384 1 2
+17385 1 2
+17386 1 2
+17387 1 2
+17388 1 2
+17389 1 2
+17390 1 2
+17391 1 2
+17392 1 2
+17393 1 2
+17394 1 2
+17395 1 2
+17396 1 2
+17397 1 2
+17398 1 2
+17399 1 2
+17400 1 2
+17401 1 2
+17402 1 2
+17403 1 2
+17404 1 2
+17405 1 2
+17406 1 2
+17407 1 2
+17408 1 2
+17409 1 2
+17410 1 2
+17411 1 2
+17412 1 2
+17413 1 2
+17414 1 2
+17415 1 2
+17416 1 2
+17417 1 2
+17418 1 2
+17419 1 2
+17420 1 2
+17421 1 2
+17422 1 2
+17423 1 2
+17424 1 2
+17425 1 2
+17426 1 2
+17427 1 2
+17428 1 2
+17429 1 2
+17430 1 2
+17431 1 2
+17432 1 2
+17433 1 2
+17434 1 2
+17435 1 2
+17436 1 2
+17437 1 2
+17438 1 2
+17439 1 2
+17440 1 2
+17441 1 2
+17442 1 2
+17443 1 2
+17444 1 2
+17445 1 2
+17446 1 2
+17447 1 2
+17448 1 2
+17449 1 2
+17450 1 2
+17451 1 2
+17452 1 2
+17453 1 2
+17454 1 2
+17455 1 2
+17456 1 2
+17457 1 2
+17458 1 2
+17459 1 2
+17460 1 2
+17461 1 2
+17462 1 2
+17463 1 2
+17464 1 2
+17465 1 2
+17466 1 2
+17467 1 2
+17468 1 2
+17469 1 2
+17470 1 2
+17471 1 2
+17472 1 2
+17473 1 2
+17474 1 2
+17475 1 2
+17476 1 2
+17477 1 2
+17478 1 2
+17479 1 2
+17480 1 2
+17481 1 2
+17482 1 2
+17483 1 2
+17484 1 2
+17485 1 2
+17486 1 2
+17487 1 2
+17488 1 2
+17489 1 2
+17490 1 2
+17491 1 2
+17492 1 2
+17493 1 2
+17494 1 2
+17495 1 2
+17496 1 2
+17497 1 2
+17498 1 2
+17499 1 2
+17500 1 2
+17501 1 2
+17502 1 2
+17503 1 2
+17504 1 2
+17505 1 2
+17506 1 2
+17507 1 2
+17508 1 2
+17509 1 2
+17510 1 2
+17511 1 2
+17512 1 2
+17513 1 2
+17514 1 2
+17515 1 2
+17516 1 2
+17517 1 2
+17518 1 2
+17519 1 2
+17520 1 2
+17521 1 2
+17522 1 2
+17523 1 2
+17524 1 2
+17525 1 2
+17526 1 2
+17527 1 2
+17528 1 2
+17529 1 2
+17530 1 2
+17531 1 2
+17532 1 2
+17533 1 2
+17534 1 2
+17535 1 2
+17536 1 2
+17537 1 2
+17538 1 2
+17539 1 2
+17540 1 2
+17541 1 2
+17542 1 2
+17543 1 2
+17544 1 2
+17545 1 2
+17546 1 2
+17547 1 2
+17548 1 2
+17549 1 2
+17550 1 2
+17551 1 2
+17552 1 2
+17553 1 2
+17554 1 2
+17555 1 2
+17556 1 2
+17557 1 2
+17558 1 2
+17559 1 2
+17560 1 2
+17561 1 2
+17562 1 2
+17563 1 2
+17564 1 2
+17565 1 2
+17566 1 2
+17567 1 2
+17568 1 2
+17569 1 2
+17570 1 2
+17571 1 2
+17572 1 2
+17573 1 2
+17574 1 2
+17575 1 2
+17576 1 2
+17577 1 2
+17578 1 2
+17579 1 2
+17580 1 2
+17581 1 2
+17582 1 2
+17583 1 2
+17584 1 2
+17585 1 2
+17586 1 2
+17587 1 2
+17588 1 2
+17589 1 2
+17590 1 2
+17591 1 2
+17592 1 2
+17593 1 2
+17594 1 2
+17595 1 2
+17596 1 2
+17597 1 2
+17598 1 2
+17599 1 2
+17600 1 2
+17601 1 2
+17602 1 2
+17603 1 2
+17604 1 2
+17605 1 2
+17606 1 2
+17607 1 2
+17608 1 2
+17609 1 2
+17610 1 2
+17611 1 2
+17612 1 2
+17613 1 2
+17614 1 2
+17615 1 2
+17616 1 2
+17617 1 2
+17618 1 2
+17619 1 2
+17620 1 2
+17621 1 2
+17622 1 2
+17623 1 2
+17624 1 2
+17625 1 2
+17626 1 2
+17627 1 2
+17628 1 2
+17629 1 2
+17630 1 2
+17631 1 2
+17632 1 2
+17633 1 2
+17634 1 2
+17635 1 2
+17636 1 2
+17637 1 2
+17638 1 2
+17639 1 2
+17640 1 2
+17641 1 2
+17642 1 2
+17643 1 2
+17644 1 2
+17645 1 2
+17646 1 2
+17647 1 2
+17648 1 2
+17649 1 2
+17650 1 2
+17651 1 2
+17652 1 2
+17653 1 2
+17654 1 2
+17655 1 2
+17656 1 2
+17657 1 2
+17658 1 2
+17659 1 2
+17660 1 2
+17661 1 2
+17662 1 2
+17663 1 2
+17664 1 2
+17665 1 2
+17666 1 2
+17667 1 2
+17668 1 2
+17669 1 2
+17670 1 2
+17671 1 2
+17672 1 2
+17673 1 2
+17674 1 2
+17675 1 2
+17676 1 2
+17677 1 2
+17678 1 2
+17679 1 2
+17680 1 2
+17681 1 2
+17682 1 2
+17683 1 2
+17684 1 2
+17685 1 2
+17686 1 2
+17687 1 2
+17688 1 2
+17689 1 2
+17690 1 2
+17691 1 2
+17692 1 2
+17693 1 2
+17694 1 2
+17695 1 2
+17696 1 2
+17697 1 2
+17698 1 2
+17699 1 2
+17700 1 2
+17701 1 2
+17702 1 2
+17703 1 2
+17704 1 2
+17705 1 2
+17706 1 2
+17707 1 2
+17708 1 2
+17709 1 2
+17710 1 2
+17711 1 2
+17712 1 2
+17713 1 2
+17714 1 2
+17715 1 2
+17716 1 2
+17717 1 2
+17718 1 2
+17719 1 2
+17720 1 2
+17721 1 2
+17722 1 2
+17723 1 2
+17724 1 2
+17725 1 2
+17726 1 2
+17727 1 2
+17728 1 2
+17729 1 2
+17730 1 2
+17731 1 2
+17732 1 2
+17733 1 2
+17734 1 2
+17735 1 2
+17736 1 2
+17737 1 2
+17738 1 2
+17739 1 2
+17740 1 2
+17741 1 2
+17742 1 2
+17743 1 2
+17744 1 2
+17745 1 2
+17746 1 2
+17747 1 2
+17748 1 2
+17749 1 2
+17750 1 2
+17751 1 2
+17752 1 2
+17753 1 2
+17754 1 2
+17755 1 2
+17756 1 2
+17757 1 2
+17758 1 2
+17759 1 2
+17760 1 2
+17761 1 2
+17762 1 2
+17763 1 2
+17764 1 2
+17765 1 2
+17766 1 2
+17767 1 2
+17768 1 2
+17769 1 2
+17770 1 2
+17771 1 2
+17772 1 2
+17773 1 2
+17774 1 2
+17775 1 2
+17776 1 2
+17777 1 2
+17778 1 2
+17779 1 2
+17780 1 2
+17781 1 2
+17782 1 2
+17783 1 2
+17784 1 2
+17785 1 2
+17786 1 2
+17787 1 2
+17788 1 2
+17789 1 2
+17790 1 2
+17791 1 2
+17792 1 2
+17793 1 2
+17794 1 2
+17795 1 2
+17796 1 2
+17797 1 2
+17798 1 2
+17799 1 2
+17800 1 2
+17801 1 2
+17802 1 2
+17803 1 2
+17804 1 2
+17805 1 2
+17806 1 2
+17807 1 2
+17808 1 2
+17809 1 2
+17810 1 2
+17811 1 2
+17812 1 2
+17813 1 2
+17814 1 2
+17815 1 2
+17816 1 2
+17817 1 2
+17818 1 2
+17819 1 2
+17820 1 2
+17821 1 2
+17822 1 2
+17823 1 2
+17824 1 2
+17825 1 2
+17826 1 2
+17827 1 2
+17828 1 2
+17829 1 2
+17830 1 2
+17831 1 2
+17832 1 2
+17833 1 2
+17834 1 2
+17835 1 2
+17836 1 2
+17837 1 2
+17838 1 2
+17839 1 2
+17840 1 2
+17841 1 2
+17842 1 2
+17843 1 2
+17844 1 2
+17845 1 2
+17846 1 2
+17847 1 2
+17848 1 2
+17849 1 2
+17850 1 2
+17851 1 2
+17852 1 2
+17853 1 2
+17854 1 2
+17855 1 2
+17856 1 2
+17857 1 2
+17858 1 2
+17859 1 2
+17860 1 2
+17861 1 2
+17862 1 2
+17863 1 2
+17864 1 2
+17865 1 2
+17866 1 2
+17867 1 2
+17868 1 2
+17869 1 2
+17870 1 2
+17871 1 2
+17872 1 2
+17873 1 2
+17874 1 2
+17875 1 2
+17876 1 2
+17877 1 2
+17878 1 2
+17879 1 2
+17880 1 2
+17881 1 2
+17882 1 2
+17883 1 2
+17884 1 2
+17885 1 2
+17886 1 2
+17887 1 2
+17888 1 2
+17889 1 2
+17890 1 2
+17891 1 2
+17892 1 2
+17893 1 2
+17894 1 2
+17895 1 2
+17896 1 2
+17897 1 2
+17898 1 2
+17899 1 2
+17900 1 2
+17901 1 2
+17902 1 2
+17903 1 2
+17904 1 2
+17905 1 2
+17906 1 2
+17907 1 2
+17908 1 2
+17909 1 2
+17910 1 2
+17911 1 2
+17912 1 2
+17913 1 2
+17914 1 2
+17915 1 2
+17916 1 2
+17917 1 2
+17918 1 2
+17919 1 2
+17920 1 2
+17921 1 2
+17922 1 2
+17923 1 2
+17924 1 2
+17925 1 2
+17926 1 2
+17927 1 2
+17928 1 2
+17929 1 2
+17930 1 2
+17931 1 2
+17932 1 2
+17933 1 2
+17934 1 2
+17935 1 2
+17936 1 2
+17937 1 2
+17938 1 2
+17939 1 2
+17940 1 2
+17941 1 2
+17942 1 2
+17943 1 2
+17944 1 2
+17945 1 2
+17946 1 2
+17947 1 2
+17948 1 2
+17949 1 2
+17950 1 2
+17951 1 2
+17952 1 2
+17953 1 2
+17954 1 2
+17955 1 2
+17956 1 2
+17957 1 2
+17958 1 2
+17959 1 2
+17960 1 2
+17961 1 2
+17962 1 2
+17963 1 2
+17964 1 2
+17965 1 2
+17966 1 2
+17967 1 2
+17968 1 2
+17969 1 2
+17970 1 2
+17971 1 2
+17972 1 2
+17973 1 2
+17974 1 2
+17975 1 2
+17976 1 2
+17977 1 2
+17978 1 2
+17979 1 2
+17980 1 2
+17981 1 2
+17982 1 2
+17983 1 2
+17984 1 2
+17985 1 2
+17986 1 2
+17987 1 2
+17988 1 2
+17989 1 2
+17990 1 2
+17991 1 2
+17992 1 2
+17993 1 2
+17994 1 2
+17995 1 2
+17996 1 2
+17997 1 2
+17998 1 2
+17999 1 2
+18000 1 2
+18001 1 2
+18002 1 2
+18003 1 2
+18004 1 2
+18005 1 2
+18006 1 2
+18007 1 2
+18008 1 2
+18009 1 2
+18010 1 2
+18011 1 2
+18012 1 2
+18013 1 2
+18014 1 2
+18015 1 2
+18016 1 2
+18017 1 2
+18018 1 2
+18019 1 2
+18020 1 2
+18021 1 2
+18022 1 2
+18023 1 2
+18024 1 2
+18025 1 2
+18026 1 2
+18027 1 2
+18028 1 2
+18029 1 2
+18030 1 2
+18031 1 2
+18032 1 2
+18033 1 2
+18034 1 2
+18035 1 2
+18036 1 2
+18037 1 2
+18038 1 2
+18039 1 2
+18040 1 2
+18041 1 2
+18042 1 2
+18043 1 2
+18044 1 2
+18045 1 2
+18046 1 2
+18047 1 2
+18048 1 2
+18049 1 2
+18050 1 2
+18051 1 2
+18052 1 2
+18053 1 2
+18054 1 2
+18055 1 2
+18056 1 2
+18057 1 2
+18058 1 2
+18059 1 2
+18060 1 2
+18061 1 2
+18062 1 2
+18063 1 2
+18064 1 2
+18065 1 2
+18066 1 2
+18067 1 2
+18068 1 2
+18069 1 2
+18070 1 2
+18071 1 2
+18072 1 2
+18073 1 2
+18074 1 2
+18075 1 2
+18076 1 2
+18077 1 2
+18078 1 2
+18079 1 2
+18080 1 2
+18081 1 2
+18082 1 2
+18083 1 2
+18084 1 2
+18085 1 2
+18086 1 2
+18087 1 2
+18088 1 2
+18089 1 2
+18090 1 2
+18091 1 2
+18092 1 2
+18093 1 2
+18094 1 2
+18095 1 2
+18096 1 2
+18097 1 2
+18098 1 2
+18099 1 2
+18100 1 2
+18101 1 2
+18102 1 2
+18103 1 2
+18104 1 2
+18105 1 2
+18106 1 2
+18107 1 2
+18108 1 2
+18109 1 2
+18110 1 2
+18111 1 2
+18112 1 2
+18113 1 2
+18114 1 2
+18115 1 2
+18116 1 2
+18117 1 2
+18118 1 2
+18119 1 2
+18120 1 2
+18121 1 2
+18122 1 2
+18123 1 2
+18124 1 2
+18125 1 2
+18126 1 2
+18127 1 2
+18128 1 2
+18129 1 2
+18130 1 2
+18131 1 2
+18132 1 2
+18133 1 2
+18134 1 2
+18135 1 2
+18136 1 2
+18137 1 2
+18138 1 2
+18139 1 2
+18140 1 2
+18141 1 2
+18142 1 2
+18143 1 2
+18144 1 2
+18145 1 2
+18146 1 2
+18147 1 2
+18148 1 2
+18149 1 2
+18150 1 2
+18151 1 2
+18152 1 2
+18153 1 2
+18154 1 2
+18155 1 2
+18156 1 2
+18157 1 2
+18158 1 2
+18159 1 2
+18160 1 2
+18161 1 2
+18162 1 2
+18163 1 2
+18164 1 2
+18165 1 2
+18166 1 2
+18167 1 2
+18168 1 2
+18169 1 2
+18170 1 2
+18171 1 2
+18172 1 2
+18173 1 2
+18174 1 2
+18175 1 2
+18176 1 2
+18177 1 2
+18178 1 2
+18179 1 2
+18180 1 2
+18181 1 2
+18182 1 2
+18183 1 2
+18184 1 2
+18185 1 2
+18186 1 2
+18187 1 2
+18188 1 2
+18189 1 2
+18190 1 2
+18191 1 2
+18192 1 2
+18193 1 2
+18194 1 2
+18195 1 2
+18196 1 2
+18197 1 2
+18198 1 2
+18199 1 2
+18200 1 2
+18201 1 2
+18202 1 2
+18203 1 2
+18204 1 2
+18205 1 2
+18206 1 2
+18207 1 2
+18208 1 2
+18209 1 2
+18210 1 2
+18211 1 2
+18212 1 2
+18213 1 2
+18214 1 2
+18215 1 2
+18216 1 2
+18217 1 2
+18218 1 2
+18219 1 2
+18220 1 2
+18221 1 2
+18222 1 2
+18223 1 2
+18224 1 2
+18225 1 2
+18226 1 2
+18227 1 2
+18228 1 2
+18229 1 2
+18230 1 2
+18231 1 2
+18232 1 2
+18233 1 2
+18234 1 2
+18235 1 2
+18236 1 2
+18237 1 2
+18238 1 2
+18239 1 2
+18240 1 2
+18241 1 2
+18242 1 2
+18243 1 2
+18244 1 2
+18245 1 2
+18246 1 2
+18247 1 2
+18248 1 2
+18249 1 2
+18250 1 2
+18251 1 2
+18252 1 2
+18253 1 2
+18254 1 2
+18255 1 2
+18256 1 2
+18257 1 2
+18258 1 2
+18259 1 2
+18260 1 2
+18261 1 2
+18262 1 2
+18263 1 2
+18264 1 2
+18265 1 2
+18266 1 2
+18267 1 2
+18268 1 2
+18269 1 2
+18270 1 2
+18271 1 2
+18272 1 2
+18273 1 2
+18274 1 2
+18275 1 2
+18276 1 2
+18277 1 2
+18278 1 2
+18279 1 2
+18280 1 2
+18281 1 2
+18282 1 2
+18283 1 2
+18284 1 2
+18285 1 2
+18286 1 2
+18287 1 2
+18288 1 2
+18289 1 2
+18290 1 2
+18291 1 2
+18292 1 2
+18293 1 2
+18294 1 2
+18295 1 2
+18296 1 2
+18297 1 2
+18298 1 2
+18299 1 2
+18300 1 2
+18301 1 2
+18302 1 2
+18303 1 2
+18304 1 2
+18305 1 2
+18306 1 2
+18307 1 2
+18308 1 2
+18309 1 2
+18310 1 2
+18311 1 2
+18312 1 2
+18313 1 2
+18314 1 2
+18315 1 2
+18316 1 2
+18317 1 2
+18318 1 2
+18319 1 2
+18320 1 2
+18321 1 2
+18322 1 2
+18323 1 2
+18324 1 2
+18325 1 2
+18326 1 2
+18327 1 2
+18328 1 2
+18329 1 2
+18330 1 2
+18331 1 2
+18332 1 2
+18333 1 2
+18334 1 2
+18335 1 2
+18336 1 2
+18337 1 2
+18338 1 2
+18339 1 2
+18340 1 2
+18341 1 2
+18342 1 2
+18343 1 2
+18344 1 2
+18345 1 2
+18346 1 2
+18347 1 2
+18348 1 2
+18349 1 2
+18350 1 2
+18351 1 2
+18352 1 2
+18353 1 2
+18354 1 2
+18355 1 2
+18356 1 2
+18357 1 2
+18358 1 2
+18359 1 2
+18360 1 2
+18361 1 2
+18362 1 2
+18363 1 2
+18364 1 2
+18365 1 2
+18366 1 2
+18367 1 2
+18368 1 2
+18369 1 2
+18370 1 2
+18371 1 2
+18372 1 2
+18373 1 2
+18374 1 2
+18375 1 2
+18376 1 2
+18377 1 2
+18378 1 2
+18379 1 2
+18380 1 2
+18381 1 2
+18382 1 2
+18383 1 2
+18384 1 2
+18385 1 2
+18386 1 2
+18387 1 2
+18388 1 2
+18389 1 2
+18390 1 2
+18391 1 2
+18392 1 2
+18393 1 2
+18394 1 2
+18395 1 2
+18396 1 2
+18397 1 2
+18398 1 2
+18399 1 2
+18400 1 2
+18401 1 2
+18402 1 2
+18403 1 2
+18404 1 2
+18405 1 2
+18406 1 2
+18407 1 2
+18408 1 2
+18409 1 2
+18410 1 2
+18411 1 2
+18412 1 2
+18413 1 2
+18414 1 2
+18415 1 2
+18416 1 2
+18417 1 2
+18418 1 2
+18419 1 2
+18420 1 2
+18421 1 2
+18422 1 2
+18423 1 2
+18424 1 2
+18425 1 2
+18426 1 2
+18427 1 2
+18428 1 2
+18429 1 2
+18430 1 2
+18431 1 2
+18432 1 2
+18433 1 2
+18434 1 2
+18435 1 2
+18436 1 2
+18437 1 2
+18438 1 2
+18439 1 2
+18440 1 2
+18441 1 2
+18442 1 2
+18443 1 2
+18444 1 2
+18445 1 2
+18446 1 2
+18447 1 2
+18448 1 2
+18449 1 2
+18450 1 2
+18451 1 2
+18452 1 2
+18453 1 2
+18454 1 2
+18455 1 2
+18456 1 2
+18457 1 2
+18458 1 2
+18459 1 2
+18460 1 2
+18461 1 2
+18462 1 2
+18463 1 2
+18464 1 2
+18465 1 2
+18466 1 2
+18467 1 2
+18468 1 2
+18469 1 2
+18470 1 2
+18471 1 2
+18472 1 2
+18473 1 2
+18474 1 2
+18475 1 2
+18476 1 2
+18477 1 2
+18478 1 2
+18479 1 2
+18480 1 2
+18481 1 2
+18482 1 2
+18483 1 2
+18484 1 2
+18485 1 2
+18486 1 2
+18487 1 2
+18488 1 2
+18489 1 2
+18490 1 2
+18491 1 2
+18492 1 2
+18493 1 2
+18494 1 2
+18495 1 2
+18496 1 2
+18497 1 2
+18498 1 2
+18499 1 2
+18500 1 2
+18501 1 2
+18502 1 2
+18503 1 2
+18504 1 2
+18505 1 2
+18506 1 2
+18507 1 2
+18508 1 2
+18509 1 2
+18510 1 2
+18511 1 2
+18512 1 2
+18513 1 2
+18514 1 2
+18515 1 2
+18516 1 2
+18517 1 2
+18518 1 2
+18519 1 2
+18520 1 2
+18521 1 2
+18522 1 2
+18523 1 2
+18524 1 2
+18525 1 2
+18526 1 2
+18527 1 2
+18528 1 2
+18529 1 2
+18530 1 2
+18531 1 2
+18532 1 2
+18533 1 2
+18534 1 2
+18535 1 2
+18536 1 2
+18537 1 2
+18538 1 2
+18539 1 2
+18540 1 2
+18541 1 2
+18542 1 2
+18543 1 2
+18544 1 2
+18545 1 2
+18546 1 2
+18547 1 2
+18548 1 2
+18549 1 2
+18550 1 2
+18551 1 2
+18552 1 2
+18553 1 2
+18554 1 2
+18555 1 2
+18556 1 2
+18557 1 2
+18558 1 2
+18559 1 2
+18560 1 2
+18561 1 2
+18562 1 2
+18563 1 2
+18564 1 2
+18565 1 2
+18566 1 2
+18567 1 2
+18568 1 2
+18569 1 2
+18570 1 2
+18571 1 2
+18572 1 2
+18573 1 2
+18574 1 2
+18575 1 2
+18576 1 2
+18577 1 2
+18578 1 2
+18579 1 2
+18580 1 2
+18581 1 2
+18582 1 2
+18583 1 2
+18584 1 2
+18585 1 2
+18586 1 2
+18587 1 2
+18588 1 2
+18589 1 2
+18590 1 2
+18591 1 2
+18592 1 2
+18593 1 2
+18594 1 2
+18595 1 2
+18596 1 2
+18597 1 2
+18598 1 2
+18599 1 2
+18600 1 2
+18601 1 2
+18602 1 2
+18603 1 2
+18604 1 2
+18605 1 2
+18606 1 2
+18607 1 2
+18608 1 2
+18609 1 2
+18610 1 2
+18611 1 2
+18612 1 2
+18613 1 2
+18614 1 2
+18615 1 2
+18616 1 2
+18617 1 2
+18618 1 2
+18619 1 2
+18620 1 2
+18621 1 2
+18622 1 2
+18623 1 2
+18624 1 2
+18625 1 2
+18626 1 2
+18627 1 2
+18628 1 2
+18629 1 2
+18630 1 2
+18631 1 2
+18632 1 2
+18633 1 2
+18634 1 2
+18635 1 2
+18636 1 2
+18637 1 2
+18638 1 2
+18639 1 2
+18640 1 2
+18641 1 2
+18642 1 2
+18643 1 2
+18644 1 2
+18645 1 2
+18646 1 2
+18647 1 2
+18648 1 2
+18649 1 2
+18650 1 2
+18651 1 2
+18652 1 2
+18653 1 2
+18654 1 2
+18655 1 2
+18656 1 2
+18657 1 2
+18658 1 2
+18659 1 2
+18660 1 2
+18661 1 2
+18662 1 2
+18663 1 2
+18664 1 2
+18665 1 2
+18666 1 2
+18667 1 2
+18668 1 2
+18669 1 2
+18670 1 2
+18671 1 2
+18672 1 2
+18673 1 2
+18674 1 2
+18675 1 2
+18676 1 2
+18677 1 2
+18678 1 2
+18679 1 2
+18680 1 2
+18681 1 2
+18682 1 2
+18683 1 2
+18684 1 2
+18685 1 2
+18686 1 2
+18687 1 2
+18688 1 2
+18689 1 2
+18690 1 2
+18691 1 2
+18692 1 2
+18693 1 2
+18694 1 2
+18695 1 2
+18696 1 2
+18697 1 2
+18698 1 2
+18699 1 2
+18700 1 2
+18701 1 2
+18702 1 2
+18703 1 2
+18704 1 2
+18705 1 2
+18706 1 2
+18707 1 2
+18708 1 2
+18709 1 2
+18710 1 2
+18711 1 2
+18712 1 2
+18713 1 2
+18714 1 2
+18715 1 2
+18716 1 2
+18717 1 2
+18718 1 2
+18719 1 2
+18720 1 2
+18721 1 2
+18722 1 2
+18723 1 2
+18724 1 2
+18725 1 2
+18726 1 2
+18727 1 2
+18728 1 2
+18729 1 2
+18730 1 2
+18731 1 2
+18732 1 2
+18733 1 2
+18734 1 2
+18735 1 2
+18736 1 2
+18737 1 2
+18738 1 2
+18739 1 2
+18740 1 2
+18741 1 2
+18742 1 2
+18743 1 2
+18744 1 2
+18745 1 2
+18746 1 2
+18747 1 2
+18748 1 2
+18749 1 2
+18750 1 2
+18751 1 2
+18752 1 2
+18753 1 2
+18754 1 2
+18755 1 2
+18756 1 2
+18757 1 2
+18758 1 2
+18759 1 2
+18760 1 2
+18761 1 2
+18762 1 2
+18763 1 2
+18764 1 2
+18765 1 2
+18766 1 2
+18767 1 2
+18768 1 2
+18769 1 2
+18770 1 2
+18771 1 2
+18772 1 2
+18773 1 2
+18774 1 2
+18775 1 2
+18776 1 2
+18777 1 2
+18778 1 2
+18779 1 2
+18780 1 2
+18781 1 2
+18782 1 2
+18783 1 2
+18784 1 2
+18785 1 2
+18786 1 2
+18787 1 2
+18788 1 2
+18789 1 2
+18790 1 2
+18791 1 2
+18792 1 2
+18793 1 2
+18794 1 2
+18795 1 2
+18796 1 2
+18797 1 2
+18798 1 2
+18799 1 2
+18800 1 2
+18801 1 2
+18802 1 2
+18803 1 2
+18804 1 2
+18805 1 2
+18806 1 2
+18807 1 2
+18808 1 2
+18809 1 2
+18810 1 2
+18811 1 2
+18812 1 2
+18813 1 2
+18814 1 2
+18815 1 2
+18816 1 2
+18817 1 2
+18818 1 2
+18819 1 2
+18820 1 2
+18821 1 2
+18822 1 2
+18823 1 2
+18824 1 2
+18825 1 2
+18826 1 2
+18827 1 2
+18828 1 2
+18829 1 2
+18830 1 2
+18831 1 2
+18832 1 2
+18833 1 2
+18834 1 2
+18835 1 2
+18836 1 2
+18837 1 2
+18838 1 2
+18839 1 2
+18840 1 2
+18841 1 2
+18842 1 2
+18843 1 2
+18844 1 2
+18845 1 2
+18846 1 2
+18847 1 2
+18848 1 2
+18849 1 2
+18850 1 2
+18851 1 2
+18852 1 2
+18853 1 2
+18854 1 2
+18855 1 2
+18856 1 2
+18857 1 2
+18858 1 2
+18859 1 2
+18860 1 2
+18861 1 2
+18862 1 2
+18863 1 2
+18864 1 2
+18865 1 2
+18866 1 2
+18867 1 2
+18868 1 2
+18869 1 2
+18870 1 2
+18871 1 2
+18872 1 2
+18873 1 2
+18874 1 2
+18875 1 2
+18876 1 2
+18877 1 2
+18878 1 2
+18879 1 2
+18880 1 2
+18881 1 2
+18882 1 2
+18883 1 2
+18884 1 2
+18885 1 2
+18886 1 2
+18887 1 2
+18888 1 2
+18889 1 2
+18890 1 2
+18891 1 2
+18892 1 2
+18893 1 2
+18894 1 2
+18895 1 2
+18896 1 2
+18897 1 2
+18898 1 2
+18899 1 2
+18900 1 2
+18901 1 2
+18902 1 2
+18903 1 2
+18904 1 2
+18905 1 2
+18906 1 2
+18907 1 2
+18908 1 2
+18909 1 2
+18910 1 2
+18911 1 2
+18912 1 2
+18913 1 2
+18914 1 2
+18915 1 2
+18916 1 2
+18917 1 2
+18918 1 2
+18919 1 2
+18920 1 2
+18921 1 2
+18922 1 2
+18923 1 2
+18924 1 2
+18925 1 2
+18926 1 2
+18927 1 2
+18928 1 2
+18929 1 2
+18930 1 2
+18931 1 2
+18932 1 2
+18933 1 2
+18934 1 2
+18935 1 2
+18936 1 2
+18937 1 2
+18938 1 2
+18939 1 2
+18940 1 2
+18941 1 2
+18942 1 2
+18943 1 2
+18944 1 2
+18945 1 2
+18946 1 2
+18947 1 2
+18948 1 2
+18949 1 2
+18950 1 2
+18951 1 2
+18952 1 2
+18953 1 2
+18954 1 2
+18955 1 2
+18956 1 2
+18957 1 2
+18958 1 2
+18959 1 2
+18960 1 2
+18961 1 2
+18962 1 2
+18963 1 2
+18964 1 2
+18965 1 2
+18966 1 2
+18967 1 2
+18968 1 2
+18969 1 2
+18970 1 2
+18971 1 2
+18972 1 2
+18973 1 2
+18974 1 2
+18975 1 2
+18976 1 2
+18977 1 2
+18978 1 2
+18979 1 2
+18980 1 2
+18981 1 2
+18982 1 2
+18983 1 2
+18984 1 2
+18985 1 2
+18986 1 2
+18987 1 2
+18988 1 2
+18989 1 2
+18990 1 2
+18991 1 2
+18992 1 2
+18993 1 2
+18994 1 2
+18995 1 2
+18996 1 2
+18997 1 2
+18998 1 2
+18999 1 2
+19000 1 2
+19001 1 2
+19002 1 2
+19003 1 2
+19004 1 2
+19005 1 2
+19006 1 2
+19007 1 2
+19008 1 2
+19009 1 2
+19010 1 2
+19011 1 2
+19012 1 2
+19013 1 2
+19014 1 2
+19015 1 2
+19016 1 2
+19017 1 2
+19018 1 2
+19019 1 2
+19020 1 2
+19021 1 2
+19022 1 2
+19023 1 2
+19024 1 2
+19025 1 2
+19026 1 2
+19027 1 2
+19028 1 2
+19029 1 2
+19030 1 2
+19031 1 2
+19032 1 2
+19033 1 2
+19034 1 2
+19035 1 2
+19036 1 2
+19037 1 2
+19038 1 2
+19039 1 2
+19040 1 2
+19041 1 2
+19042 1 2
+19043 1 2
+19044 1 2
+19045 1 2
+19046 1 2
+19047 1 2
+19048 1 2
+19049 1 2
+19050 1 2
+19051 1 2
+19052 1 2
+19053 1 2
+19054 1 2
+19055 1 2
+19056 1 2
+19057 1 2
+19058 1 2
+19059 1 2
+19060 1 2
+19061 1 2
+19062 1 2
+19063 1 2
+19064 1 2
+19065 1 2
+19066 1 2
+19067 1 2
+19068 1 2
+19069 1 2
+19070 1 2
+19071 1 2
+19072 1 2
+19073 1 2
+19074 1 2
+19075 1 2
+19076 1 2
+19077 1 2
+19078 1 2
+19079 1 2
+19080 1 2
+19081 1 2
+19082 1 2
+19083 1 2
+19084 1 2
+19085 1 2
+19086 1 2
+19087 1 2
+19088 1 2
+19089 1 2
+19090 1 2
+19091 1 2
+19092 1 2
+19093 1 2
+19094 1 2
+19095 1 2
+19096 1 2
+19097 1 2
+19098 1 2
+19099 1 2
+19100 1 2
+19101 1 2
+19102 1 2
+19103 1 2
+19104 1 2
+19105 1 2
+19106 1 2
+19107 1 2
+19108 1 2
+19109 1 2
+19110 1 2
+19111 1 2
+19112 1 2
+19113 1 2
+19114 1 2
+19115 1 2
+19116 1 2
+19117 1 2
+19118 1 2
+19119 1 2
+19120 1 2
+19121 1 2
+19122 1 2
+19123 1 2
+19124 1 2
+19125 1 2
+19126 1 2
+19127 1 2
+19128 1 2
+19129 1 2
+19130 1 2
+19131 1 2
+19132 1 2
+19133 1 2
+19134 1 2
+19135 1 2
+19136 1 2
+19137 1 2
+19138 1 2
+19139 1 2
+19140 1 2
+19141 1 2
+19142 1 2
+19143 1 2
+19144 1 2
+19145 1 2
+19146 1 2
+19147 1 2
+19148 1 2
+19149 1 2
+19150 1 2
+19151 1 2
+19152 1 2
+19153 1 2
+19154 1 2
+19155 1 2
+19156 1 2
+19157 1 2
+19158 1 2
+19159 1 2
+19160 1 2
+19161 1 2
+19162 1 2
+19163 1 2
+19164 1 2
+19165 1 2
+19166 1 2
+19167 1 2
+19168 1 2
+19169 1 2
+19170 1 2
+19171 1 2
+19172 1 2
+19173 1 2
+19174 1 2
+19175 1 2
+19176 1 2
+19177 1 2
+19178 1 2
+19179 1 2
+19180 1 2
+19181 1 2
+19182 1 2
+19183 1 2
+19184 1 2
+19185 1 2
+19186 1 2
+19187 1 2
+19188 1 2
+19189 1 2
+19190 1 2
+19191 1 2
+19192 1 2
+19193 1 2
+19194 1 2
+19195 1 2
+19196 1 2
+19197 1 2
+19198 1 2
+19199 1 2
+19200 1 2
+19201 1 2
+19202 1 2
+19203 1 2
+19204 1 2
+19205 1 2
+19206 1 2
+19207 1 2
+19208 1 2
+19209 1 2
+19210 1 2
+19211 1 2
+19212 1 2
+19213 1 2
+19214 1 2
+19215 1 2
+19216 1 2
+19217 1 2
+19218 1 2
+19219 1 2
+19220 1 2
+19221 1 2
+19222 1 2
+19223 1 2
+19224 1 2
+19225 1 2
+19226 1 2
+19227 1 2
+19228 1 2
+19229 1 2
+19230 1 2
+19231 1 2
+19232 1 2
+19233 1 2
+19234 1 2
+19235 1 2
+19236 1 2
+19237 1 2
+19238 1 2
+19239 1 2
+19240 1 2
+19241 1 2
+19242 1 2
+19243 1 2
+19244 1 2
+19245 1 2
+19246 1 2
+19247 1 2
+19248 1 2
+19249 1 2
+19250 1 2
+19251 1 2
+19252 1 2
+19253 1 2
+19254 1 2
+19255 1 2
+19256 1 2
+19257 1 2
+19258 1 2
+19259 1 2
+19260 1 2
+19261 1 2
+19262 1 2
+19263 1 2
+19264 1 2
+19265 1 2
+19266 1 2
+19267 1 2
+19268 1 2
+19269 1 2
+19270 1 2
+19271 1 2
+19272 1 2
+19273 1 2
+19274 1 2
+19275 1 2
+19276 1 2
+19277 1 2
+19278 1 2
+19279 1 2
+19280 1 2
+19281 1 2
+19282 1 2
+19283 1 2
+19284 1 2
+19285 1 2
+19286 1 2
+19287 1 2
+19288 1 2
+19289 1 2
+19290 1 2
+19291 1 2
+19292 1 2
+19293 1 2
+19294 1 2
+19295 1 2
+19296 1 2
+19297 1 2
+19298 1 2
+19299 1 2
+19300 1 2
+19301 1 2
+19302 1 2
+19303 1 2
+19304 1 2
+19305 1 2
+19306 1 2
+19307 1 2
+19308 1 2
+19309 1 2
+19310 1 2
+19311 1 2
+19312 1 2
+19313 1 2
+19314 1 2
+19315 1 2
+19316 1 2
+19317 1 2
+19318 1 2
+19319 1 2
+19320 1 2
+19321 1 2
+19322 1 2
+19323 1 2
+19324 1 2
+19325 1 2
+19326 1 2
+19327 1 2
+19328 1 2
+19329 1 2
+19330 1 2
+19331 1 2
+19332 1 2
+19333 1 2
+19334 1 2
+19335 1 2
+19336 1 2
+19337 1 2
+19338 1 2
+19339 1 2
+19340 1 2
+19341 1 2
+19342 1 2
+19343 1 2
+19344 1 2
+19345 1 2
+19346 1 2
+19347 1 2
+19348 1 2
+19349 1 2
+19350 1 2
+19351 1 2
+19352 1 2
+19353 1 2
+19354 1 2
+19355 1 2
+19356 1 2
+19357 1 2
+19358 1 2
+19359 1 2
+19360 1 2
+19361 1 2
+19362 1 2
+19363 1 2
+19364 1 2
+19365 1 2
+19366 1 2
+19367 1 2
+19368 1 2
+19369 1 2
+19370 1 2
+19371 1 2
+19372 1 2
+19373 1 2
+19374 1 2
+19375 1 2
+19376 1 2
+19377 1 2
+19378 1 2
+19379 1 2
+19380 1 2
+19381 1 2
+19382 1 2
+19383 1 2
+19384 1 2
+19385 1 2
+19386 1 2
+19387 1 2
+19388 1 2
+19389 1 2
+19390 1 2
+19391 1 2
+19392 1 2
+19393 1 2
+19394 1 2
+19395 1 2
+19396 1 2
+19397 1 2
+19398 1 2
+19399 1 2
+19400 1 2
+19401 1 2
+19402 1 2
+19403 1 2
+19404 1 2
+19405 1 2
+19406 1 2
+19407 1 2
+19408 1 2
+19409 1 2
+19410 1 2
+19411 1 2
+19412 1 2
+19413 1 2
+19414 1 2
+19415 1 2
+19416 1 2
+19417 1 2
+19418 1 2
+19419 1 2
+19420 1 2
+19421 1 2
+19422 1 2
+19423 1 2
+19424 1 2
+19425 1 2
+19426 1 2
+19427 1 2
+19428 1 2
+19429 1 2
+19430 1 2
+19431 1 2
+19432 1 2
+19433 1 2
+19434 1 2
+19435 1 2
+19436 1 2
+19437 1 2
+19438 1 2
+19439 1 2
+19440 1 2
+19441 1 2
+19442 1 2
+19443 1 2
+19444 1 2
+19445 1 2
+19446 1 2
+19447 1 2
+19448 1 2
+19449 1 2
+19450 1 2
+19451 1 2
+19452 1 2
+19453 1 2
+19454 1 2
+19455 1 2
+19456 1 2
+19457 1 2
+19458 1 2
+19459 1 2
+19460 1 2
+19461 1 2
+19462 1 2
+19463 1 2
+19464 1 2
+19465 1 2
+19466 1 2
+19467 1 2
+19468 1 2
+19469 1 2
+19470 1 2
+19471 1 2
+19472 1 2
+19473 1 2
+19474 1 2
+19475 1 2
+19476 1 2
+19477 1 2
+19478 1 2
+19479 1 2
+19480 1 2
+19481 1 2
+19482 1 2
+19483 1 2
+19484 1 2
+19485 1 2
+19486 1 2
+19487 1 2
+19488 1 2
+19489 1 2
+19490 1 2
+19491 1 2
+19492 1 2
+19493 1 2
+19494 1 2
+19495 1 2
+19496 1 2
+19497 1 2
+19498 1 2
+19499 1 2
+19500 1 2
+19501 1 2
+19502 1 2
+19503 1 2
+19504 1 2
+19505 1 2
+19506 1 2
+19507 1 2
+19508 1 2
+19509 1 2
+19510 1 2
+19511 1 2
+19512 1 2
+19513 1 2
+19514 1 2
+19515 1 2
+19516 1 2
+19517 1 2
+19518 1 2
+19519 1 2
+19520 1 2
+19521 1 2
+19522 1 2
+19523 1 2
+19524 1 2
+19525 1 2
+19526 1 2
+19527 1 2
+19528 1 2
+19529 1 2
+19530 1 2
+19531 1 2
+19532 1 2
+19533 1 2
+19534 1 2
+19535 1 2
+19536 1 2
+19537 1 2
+19538 1 2
+19539 1 2
+19540 1 2
+19541 1 2
+19542 1 2
+19543 1 2
+19544 1 2
+19545 1 2
+19546 1 2
+19547 1 2
+19548 1 2
+19549 1 2
+19550 1 2
+19551 1 2
+19552 1 2
+19553 1 2
+19554 1 2
+19555 1 2
+19556 1 2
+19557 1 2
+19558 1 2
+19559 1 2
+19560 1 2
+19561 1 2
+19562 1 2
+19563 1 2
+19564 1 2
+19565 1 2
+19566 1 2
+19567 1 2
+19568 1 2
+19569 1 2
+19570 1 2
+19571 1 2
+19572 1 2
+19573 1 2
+19574 1 2
+19575 1 2
+19576 1 2
+19577 1 2
+19578 1 2
+19579 1 2
+19580 1 2
+19581 1 2
+19582 1 2
+19583 1 2
+19584 1 2
+19585 1 2
+19586 1 2
+19587 1 2
+19588 1 2
+19589 1 2
+19590 1 2
+19591 1 2
+19592 1 2
+19593 1 2
+19594 1 2
+19595 1 2
+19596 1 2
+19597 1 2
+19598 1 2
+19599 1 2
+19600 1 2
+19601 1 2
+19602 1 2
+19603 1 2
+19604 1 2
+19605 1 2
+19606 1 2
+19607 1 2
+19608 1 2
+19609 1 2
+19610 1 2
+19611 1 2
+19612 1 2
+19613 1 2
+19614 1 2
+19615 1 2
+19616 1 2
+19617 1 2
+19618 1 2
+19619 1 2
+19620 1 2
+19621 1 2
+19622 1 2
+19623 1 2
+19624 1 2
+19625 1 2
+19626 1 2
+19627 1 2
+19628 1 2
+19629 1 2
+19630 1 2
+19631 1 2
+19632 1 2
+19633 1 2
+19634 1 2
+19635 1 2
+19636 1 2
+19637 1 2
+19638 1 2
+19639 1 2
+19640 1 2
+19641 1 2
+19642 1 2
+19643 1 2
+19644 1 2
+19645 1 2
+19646 1 2
+19647 1 2
+19648 1 2
+19649 1 2
+19650 1 2
+19651 1 2
+19652 1 2
+19653 1 2
+19654 1 2
+19655 1 2
+19656 1 2
+19657 1 2
+19658 1 2
+19659 1 2
+19660 1 2
+19661 1 2
+19662 1 2
+19663 1 2
+19664 1 2
+19665 1 2
+19666 1 2
+19667 1 2
+19668 1 2
+19669 1 2
+19670 1 2
+19671 1 2
+19672 1 2
+19673 1 2
+19674 1 2
+19675 1 2
+19676 1 2
+19677 1 2
+19678 1 2
+19679 1 2
+19680 1 2
+19681 1 2
+19682 1 2
+19683 1 2
+19684 1 2
+19685 1 2
+19686 1 2
+19687 1 2
+19688 1 2
+19689 1 2
+19690 1 2
+19691 1 2
+19692 1 2
+19693 1 2
+19694 1 2
+19695 1 2
+19696 1 2
+19697 1 2
+19698 1 2
+19699 1 2
+19700 1 2
+19701 1 2
+19702 1 2
+19703 1 2
+19704 1 2
+19705 1 2
+19706 1 2
+19707 1 2
+19708 1 2
+19709 1 2
+19710 1 2
+19711 1 2
+19712 1 2
+19713 1 2
+19714 1 2
+19715 1 2
+19716 1 2
+19717 1 2
+19718 1 2
+19719 1 2
+19720 1 2
+19721 1 2
+19722 1 2
+19723 1 2
+19724 1 2
+19725 1 2
+19726 1 2
+19727 1 2
+19728 1 2
+19729 1 2
+19730 1 2
+19731 1 2
+19732 1 2
+19733 1 2
+19734 1 2
+19735 1 2
+19736 1 2
+19737 1 2
+19738 1 2
+19739 1 2
+19740 1 2
+19741 1 2
+19742 1 2
+19743 1 2
+19744 1 2
+19745 1 2
+19746 1 2
+19747 1 2
+19748 1 2
+19749 1 2
+19750 1 2
+19751 1 2
+19752 1 2
+19753 1 2
+19754 1 2
+19755 1 2
+19756 1 2
+19757 1 2
+19758 1 2
+19759 1 2
+19760 1 2
+19761 1 2
+19762 1 2
+19763 1 2
+19764 1 2
+19765 1 2
+19766 1 2
+19767 1 2
+19768 1 2
+19769 1 2
+19770 1 2
+19771 1 2
+19772 1 2
+19773 1 2
+19774 1 2
+19775 1 2
+19776 1 2
+19777 1 2
+19778 1 2
+19779 1 2
+19780 1 2
+19781 1 2
+19782 1 2
+19783 1 2
+19784 1 2
+19785 1 2
+19786 1 2
+19787 1 2
+19788 1 2
+19789 1 2
+19790 1 2
+19791 1 2
+19792 1 2
+19793 1 2
+19794 1 2
+19795 1 2
+19796 1 2
+19797 1 2
+19798 1 2
+19799 1 2
+19800 1 2
+19801 1 2
+19802 1 2
+19803 1 2
+19804 1 2
+19805 1 2
+19806 1 2
+19807 1 2
+19808 1 2
+19809 1 2
+19810 1 2
+19811 1 2
+19812 1 2
+19813 1 2
+19814 1 2
+19815 1 2
+19816 1 2
+19817 1 2
+19818 1 2
+19819 1 2
+19820 1 2
+19821 1 2
+19822 1 2
+19823 1 2
+19824 1 2
+19825 1 2
+19826 1 2
+19827 1 2
+19828 1 2
+19829 1 2
+19830 1 2
+19831 1 2
+19832 1 2
+19833 1 2
+19834 1 2
+19835 1 2
+19836 1 2
+19837 1 2
+19838 1 2
+19839 1 2
+19840 1 2
+19841 1 2
+19842 1 2
+19843 1 2
+19844 1 2
+19845 1 2
+19846 1 2
+19847 1 2
+19848 1 2
+19849 1 2
+19850 1 2
+19851 1 2
+19852 1 2
+19853 1 2
+19854 1 2
+19855 1 2
+19856 1 2
+19857 1 2
+19858 1 2
+19859 1 2
+19860 1 2
+19861 1 2
+19862 1 2
+19863 1 2
+19864 1 2
+19865 1 2
+19866 1 2
+19867 1 2
+19868 1 2
+19869 1 2
+19870 1 2
+19871 1 2
+19872 1 2
+19873 1 2
+19874 1 2
+19875 1 2
+19876 1 2
+19877 1 2
+19878 1 2
+19879 1 2
+19880 1 2
+19881 1 2
+19882 1 2
+19883 1 2
+19884 1 2
+19885 1 2
+19886 1 2
+19887 1 2
+19888 1 2
+19889 1 2
+19890 1 2
+19891 1 2
+19892 1 2
+19893 1 2
+19894 1 2
+19895 1 2
+19896 1 2
+19897 1 2
+19898 1 2
+19899 1 2
+19900 1 2
+19901 1 2
+19902 1 2
+19903 1 2
+19904 1 2
+19905 1 2
+19906 1 2
+19907 1 2
+19908 1 2
+19909 1 2
+19910 1 2
+19911 1 2
+19912 1 2
+19913 1 2
+19914 1 2
+19915 1 2
+19916 1 2
+19917 1 2
+19918 1 2
+19919 1 2
+19920 1 2
+19921 1 2
+19922 1 2
+19923 1 2
+19924 1 2
+19925 1 2
+19926 1 2
+19927 1 2
+19928 1 2
+19929 1 2
+19930 1 2
+19931 1 2
+19932 1 2
+19933 1 2
+19934 1 2
+19935 1 2
+19936 1 2
+19937 1 2
+19938 1 2
+19939 1 2
+19940 1 2
+19941 1 2
+19942 1 2
+19943 1 2
+19944 1 2
+19945 1 2
+19946 1 2
+19947 1 2
+19948 1 2
+19949 1 2
+19950 1 2
+19951 1 2
+19952 1 2
+19953 1 2
+19954 1 2
+19955 1 2
+19956 1 2
+19957 1 2
+19958 1 2
+19959 1 2
+19960 1 2
+19961 1 2
+19962 1 2
+19963 1 2
+19964 1 2
+19965 1 2
+19966 1 2
+19967 1 2
+19968 1 2
+19969 1 2
+19970 1 2
+19971 1 2
+19972 1 2
+19973 1 2
+19974 1 2
+19975 1 2
+19976 1 2
+19977 1 2
+19978 1 2
+19979 1 2
+19980 1 2
+19981 1 2
+19982 1 2
+19983 1 2
+19984 1 2
+19985 1 2
+19986 1 2
+19987 1 2
+19988 1 2
+19989 1 2
+19990 1 2
+19991 1 2
+19992 1 2
+19993 1 2
+19994 1 2
+19995 1 2
+19996 1 2
+19997 1 2
+19998 1 2
+19999 1 2
+20000 1 2
+20001 1 2
+20002 1 2
+20003 1 2
+20004 1 2
+20005 1 2
+20006 1 2
+20007 1 2
+20008 1 2
+20009 1 2
+20010 1 2
+20011 1 2
+20012 1 2
+20013 1 2
+20014 1 2
+20015 1 2
+20016 1 2
+20017 1 2
+20018 1 2
+20019 1 2
+20020 1 2
+20021 1 2
+20022 1 2
+20023 1 2
+20024 1 2
+20025 1 2
+20026 1 2
+20027 1 2
+20028 1 2
+20029 1 2
+20030 1 2
+20031 1 2
+20032 1 2
+20033 1 2
+20034 1 2
+20035 1 2
+20036 1 2
+20037 1 2
+20038 1 2
+20039 1 2
+20040 1 2
+20041 1 2
+20042 1 2
+20043 1 2
+20044 1 2
+20045 1 2
+20046 1 2
+20047 1 2
+20048 1 2
+20049 1 2
+20050 1 2
+20051 1 2
+20052 1 2
+20053 1 2
+20054 1 2
+20055 1 2
+20056 1 2
+20057 1 2
+20058 1 2
+20059 1 2
+20060 1 2
+20061 1 2
+20062 1 2
+20063 1 2
+20064 1 2
+20065 1 2
+20066 1 2
+20067 1 2
+20068 1 2
+20069 1 2
+20070 1 2
+20071 1 2
+20072 1 2
+20073 1 2
+20074 1 2
+20075 1 2
+20076 1 2
+20077 1 2
+20078 1 2
+20079 1 2
+20080 1 2
+20081 1 2
+20082 1 2
+20083 1 2
+20084 1 2
+20085 1 2
+20086 1 2
+20087 1 2
+20088 1 2
+20089 1 2
+20090 1 2
+20091 1 2
+20092 1 2
+20093 1 2
+20094 1 2
+20095 1 2
+20096 1 2
+20097 1 2
+20098 1 2
+20099 1 2
+20100 1 2
+20101 1 2
+20102 1 2
+20103 1 2
+20104 1 2
+20105 1 2
+20106 1 2
+20107 1 2
+20108 1 2
+20109 1 2
+20110 1 2
+20111 1 2
+20112 1 2
+20113 1 2
+20114 1 2
+20115 1 2
+20116 1 2
+20117 1 2
+20118 1 2
+20119 1 2
+20120 1 2
+20121 1 2
+20122 1 2
+20123 1 2
+20124 1 2
+20125 1 2
+20126 1 2
+20127 1 2
+20128 1 2
+20129 1 2
+20130 1 2
+20131 1 2
+20132 1 2
+20133 1 2
+20134 1 2
+20135 1 2
+20136 1 2
+20137 1 2
+20138 1 2
+20139 1 2
+20140 1 2
+20141 1 2
+20142 1 2
+20143 1 2
+20144 1 2
+20145 1 2
+20146 1 2
+20147 1 2
+20148 1 2
+20149 1 2
+20150 1 2
+20151 1 2
+20152 1 2
+20153 1 2
+20154 1 2
+20155 1 2
+20156 1 2
+20157 1 2
+20158 1 2
+20159 1 2
+20160 1 2
+20161 1 2
+20162 1 2
+20163 1 2
+20164 1 2
+20165 1 2
+20166 1 2
+20167 1 2
+20168 1 2
+20169 1 2
+20170 1 2
+20171 1 2
+20172 1 2
+20173 1 2
+20174 1 2
+20175 1 2
+20176 1 2
+20177 1 2
+20178 1 2
+20179 1 2
+20180 1 2
+20181 1 2
+20182 1 2
+20183 1 2
+20184 1 2
+20185 1 2
+20186 1 2
+20187 1 2
+20188 1 2
+20189 1 2
+20190 1 2
+20191 1 2
+20192 1 2
+20193 1 2
+20194 1 2
+20195 1 2
+20196 1 2
+20197 1 2
+20198 1 2
+20199 1 2
+20200 1 2
+20201 1 2
+20202 1 2
+20203 1 2
+20204 1 2
+20205 1 2
+20206 1 2
+20207 1 2
+20208 1 2
+20209 1 2
+20210 1 2
+20211 1 2
+20212 1 2
+20213 1 2
+20214 1 2
+20215 1 2
+20216 1 2
+20217 1 2
+20218 1 2
+20219 1 2
+20220 1 2
+20221 1 2
+20222 1 2
+20223 1 2
+20224 1 2
+20225 1 2
+20226 1 2
+20227 1 2
+20228 1 2
+20229 1 2
+20230 1 2
+20231 1 2
+20232 1 2
+20233 1 2
+20234 1 2
+20235 1 2
+20236 1 2
+20237 1 2
+20238 1 2
+20239 1 2
+20240 1 2
+20241 1 2
+20242 1 2
+20243 1 2
+20244 1 2
+20245 1 2
+20246 1 2
+20247 1 2
+20248 1 2
+20249 1 2
+20250 1 2
+20251 1 2
+20252 1 2
+20253 1 2
+20254 1 2
+20255 1 2
+20256 1 2
+20257 1 2
+20258 1 2
+20259 1 2
+20260 1 2
+20261 1 2
+20262 1 2
+20263 1 2
+20264 1 2
+20265 1 2
+20266 1 2
+20267 1 2
+20268 1 2
+20269 1 2
+20270 1 2
+20271 1 2
+20272 1 2
+20273 1 2
+20274 1 2
+20275 1 2
+20276 1 2
+20277 1 2
+20278 1 2
+20279 1 2
+20280 1 2
+20281 1 2
+20282 1 2
+20283 1 2
+20284 1 2
+20285 1 2
+20286 1 2
+20287 1 2
+20288 1 2
+20289 1 2
+20290 1 2
+20291 1 2
+20292 1 2
+20293 1 2
+20294 1 2
+20295 1 2
+20296 1 2
+20297 1 2
+20298 1 2
+20299 1 2
+20300 1 2
+20301 1 2
+20302 1 2
+20303 1 2
+20304 1 2
+20305 1 2
+20306 1 2
+20307 1 2
+20308 1 2
+20309 1 2
+20310 1 2
+20311 1 2
+20312 1 2
+20313 1 2
+20314 1 2
+20315 1 2
+20316 1 2
+20317 1 2
+20318 1 2
+20319 1 2
+20320 1 2
+20321 1 2
+20322 1 2
+20323 1 2
+20324 1 2
+20325 1 2
+20326 1 2
+20327 1 2
+20328 1 2
+20329 1 2
+20330 1 2
+20331 1 2
+20332 1 2
+20333 1 2
+20334 1 2
+20335 1 2
+20336 1 2
+20337 1 2
+20338 1 2
+20339 1 2
+20340 1 2
+20341 1 2
+20342 1 2
+20343 1 2
+20344 1 2
+20345 1 2
+20346 1 2
+20347 1 2
+20348 1 2
+20349 1 2
+20350 1 2
+20351 1 2
+20352 1 2
+20353 1 2
+20354 1 2
+20355 1 2
+20356 1 2
+20357 1 2
+20358 1 2
+20359 1 2
+20360 1 2
+20361 1 2
+20362 1 2
+20363 1 2
+20364 1 2
+20365 1 2
+20366 1 2
+20367 1 2
+20368 1 2
+20369 1 2
+20370 1 2
+20371 1 2
+20372 1 2
+20373 1 2
+20374 1 2
+20375 1 2
+20376 1 2
+20377 1 2
+20378 1 2
+20379 1 2
+20380 1 2
+20381 1 2
+20382 1 2
+20383 1 2
+20384 1 2
+20385 1 2
+20386 1 2
+20387 1 2
+20388 1 2
+20389 1 2
+20390 1 2
+20391 1 2
+20392 1 2
+20393 1 2
+20394 1 2
+20395 1 2
+20396 1 2
+20397 1 2
+20398 1 2
+20399 1 2
+20400 1 2
+20401 1 2
+20402 1 2
+20403 1 2
+20404 1 2
+20405 1 2
+20406 1 2
+20407 1 2
+20408 1 2
+20409 1 2
+20410 1 2
+20411 1 2
+20412 1 2
+20413 1 2
+20414 1 2
+20415 1 2
+20416 1 2
+20417 1 2
+20418 1 2
+20419 1 2
+20420 1 2
+20421 1 2
+20422 1 2
+20423 1 2
+20424 1 2
+20425 1 2
+20426 1 2
+20427 1 2
+20428 1 2
+20429 1 2
+20430 1 2
+20431 1 2
+20432 1 2
+20433 1 2
+20434 1 2
+20435 1 2
+20436 1 2
+20437 1 2
+20438 1 2
+20439 1 2
+20440 1 2
+20441 1 2
+20442 1 2
+20443 1 2
+20444 1 2
+20445 1 2
+20446 1 2
+20447 1 2
+20448 1 2
+20449 1 2
+20450 1 2
+20451 1 2
+20452 1 2
+20453 1 2
+20454 1 2
+20455 1 2
+20456 1 2
+20457 1 2
+20458 1 2
+20459 1 2
+20460 1 2
+20461 1 2
+20462 1 2
+20463 1 2
+20464 1 2
+20465 1 2
+20466 1 2
+20467 1 2
+20468 1 2
+20469 1 2
+20470 1 2
+20471 1 2
+20472 1 2
+20473 1 2
+20474 1 2
+20475 1 2
+20476 1 2
+20477 1 2
+20478 1 2
+20479 1 2
+20480 1 2
+20481 1 2
+20482 1 2
+20483 1 2
+20484 1 2
+20485 1 2
+20486 1 2
+20487 1 2
+20488 1 2
+20489 1 2
+20490 1 2
+20491 1 2
+20492 1 2
+20493 1 2
+20494 1 2
+20495 1 2
+20496 1 2
+20497 1 2
+20498 1 2
+20499 1 2
+20500 1 2
+20501 1 2
+20502 1 2
+20503 1 2
+20504 1 2
+20505 1 2
+20506 1 2
+20507 1 2
+20508 1 2
+20509 1 2
+20510 1 2
+20511 1 2
+20512 1 2
+20513 1 2
+20514 1 2
+20515 1 2
+20516 1 2
+20517 1 2
+20518 1 2
+20519 1 2
+20520 1 2
+20521 1 2
+20522 1 2
+20523 1 2
+20524 1 2
+20525 1 2
+20526 1 2
+20527 1 2
+20528 1 2
+20529 1 2
+20530 1 2
+20531 1 2
+20532 1 2
+20533 1 2
+20534 1 2
+20535 1 2
+20536 1 2
+20537 1 2
+20538 1 2
+20539 1 2
+20540 1 2
+20541 1 2
+20542 1 2
+20543 1 2
+20544 1 2
+20545 1 2
+20546 1 2
+20547 1 2
+20548 1 2
+20549 1 2
+20550 1 2
+20551 1 2
+20552 1 2
+20553 1 2
+20554 1 2
+20555 1 2
+20556 1 2
+20557 1 2
+20558 1 2
+20559 1 2
+20560 1 2
+20561 1 2
+20562 1 2
+20563 1 2
+20564 1 2
+20565 1 2
+20566 1 2
+20567 1 2
+20568 1 2
+20569 1 2
+20570 1 2
+20571 1 2
+20572 1 2
+20573 1 2
+20574 1 2
+20575 1 2
+20576 1 2
+20577 1 2
+20578 1 2
+20579 1 2
+20580 1 2
+20581 1 2
+20582 1 2
+20583 1 2
+20584 1 2
+20585 1 2
+20586 1 2
+20587 1 2
+20588 1 2
+20589 1 2
+20590 1 2
+20591 1 2
+20592 1 2
+20593 1 2
+20594 1 2
+20595 1 2
+20596 1 2
+20597 1 2
+20598 1 2
+20599 1 2
+20600 1 2
+20601 1 2
+20602 1 2
+20603 1 2
+20604 1 2
+20605 1 2
+20606 1 2
+20607 1 2
+20608 1 2
+20609 1 2
+20610 1 2
+20611 1 2
+20612 1 2
+20613 1 2
+20614 1 2
+20615 1 2
+20616 1 2
+20617 1 2
+20618 1 2
+20619 1 2
+20620 1 2
+20621 1 2
+20622 1 2
+20623 1 2
+20624 1 2
+20625 1 2
+20626 1 2
+20627 1 2
+20628 1 2
+20629 1 2
+20630 1 2
+20631 1 2
+20632 1 2
+20633 1 2
+20634 1 2
+20635 1 2
+20636 1 2
+20637 1 2
+20638 1 2
+20639 1 2
+20640 1 2
+20641 1 2
+20642 1 2
+20643 1 2
+20644 1 2
+20645 1 2
+20646 1 2
+20647 1 2
+20648 1 2
+20649 1 2
+20650 1 2
+20651 1 2
+20652 1 2
+20653 1 2
+20654 1 2
+20655 1 2
+20656 1 2
+20657 1 2
+20658 1 2
+20659 1 2
+20660 1 2
+20661 1 2
+20662 1 2
+20663 1 2
+20664 1 2
+20665 1 2
+20666 1 2
+20667 1 2
+20668 1 2
+20669 1 2
+20670 1 2
+20671 1 2
+20672 1 2
+20673 1 2
+20674 1 2
+20675 1 2
+20676 1 2
+20677 1 2
+20678 1 2
+20679 1 2
+20680 1 2
+20681 1 2
+20682 1 2
+20683 1 2
+20684 1 2
+20685 1 2
+20686 1 2
+20687 1 2
+20688 1 2
+20689 1 2
+20690 1 2
+20691 1 2
+20692 1 2
+20693 1 2
+20694 1 2
+20695 1 2
+20696 1 2
+20697 1 2
+20698 1 2
+20699 1 2
+20700 1 2
+20701 1 2
+20702 1 2
+20703 1 2
+20704 1 2
+20705 1 2
+20706 1 2
+20707 1 2
+20708 1 2
+20709 1 2
+20710 1 2
+20711 1 2
+20712 1 2
+20713 1 2
+20714 1 2
+20715 1 2
+20716 1 2
+20717 1 2
+20718 1 2
+20719 1 2
+20720 1 2
+20721 1 2
+20722 1 2
+20723 1 2
+20724 1 2
+20725 1 2
+20726 1 2
+20727 1 2
+20728 1 2
+20729 1 2
+20730 1 2
+20731 1 2
+20732 1 2
+20733 1 2
+20734 1 2
+20735 1 2
+20736 1 2
+20737 1 2
+20738 1 2
+20739 1 2
+20740 1 2
+20741 1 2
+20742 1 2
+20743 1 2
+20744 1 2
+20745 1 2
+20746 1 2
+20747 1 2
+20748 1 2
+20749 1 2
+20750 1 2
+20751 1 2
+20752 1 2
+20753 1 2
+20754 1 2
+20755 1 2
+20756 1 2
+20757 1 2
+20758 1 2
+20759 1 2
+20760 1 2
+20761 1 2
+20762 1 2
+20763 1 2
+20764 1 2
+20765 1 2
+20766 1 2
+20767 1 2
+20768 1 2
+20769 1 2
+20770 1 2
+20771 1 2
+20772 1 2
+20773 1 2
+20774 1 2
+20775 1 2
+20776 1 2
+20777 1 2
+20778 1 2
+20779 1 2
+20780 1 2
+20781 1 2
+20782 1 2
+20783 1 2
+20784 1 2
+20785 1 2
+20786 1 2
+20787 1 2
+20788 1 2
+20789 1 2
+20790 1 2
+20791 1 2
+20792 1 2
+20793 1 2
+20794 1 2
+20795 1 2
+20796 1 2
+20797 1 2
+20798 1 2
+20799 1 2
+20800 1 2
+20801 1 2
+20802 1 2
+20803 1 2
+20804 1 2
+20805 1 2
+20806 1 2
+20807 1 2
+20808 1 2
+20809 1 2
+20810 1 2
+20811 1 2
+20812 1 2
+20813 1 2
+20814 1 2
+20815 1 2
+20816 1 2
+20817 1 2
+20818 1 2
+20819 1 2
+20820 1 2
+20821 1 2
+20822 1 2
+20823 1 2
+20824 1 2
+20825 1 2
+20826 1 2
+20827 1 2
+20828 1 2
+20829 1 2
+20830 1 2
+20831 1 2
+20832 1 2
+20833 1 2
+20834 1 2
+20835 1 2
+20836 1 2
+20837 1 2
+20838 1 2
+20839 1 2
+20840 1 2
+20841 1 2
+20842 1 2
+20843 1 2
+20844 1 2
+20845 1 2
+20846 1 2
+20847 1 2
+20848 1 2
+20849 1 2
+20850 1 2
+20851 1 2
+20852 1 2
+20853 1 2
+20854 1 2
+20855 1 2
+20856 1 2
+20857 1 2
+20858 1 2
+20859 1 2
+20860 1 2
+20861 1 2
+20862 1 2
+20863 1 2
+20864 1 2
+20865 1 2
+20866 1 2
+20867 1 2
+20868 1 2
+20869 1 2
+20870 1 2
+20871 1 2
+20872 1 2
+20873 1 2
+20874 1 2
+20875 1 2
+20876 1 2
+20877 1 2
+20878 1 2
+20879 1 2
+20880 1 2
+20881 1 2
+20882 1 2
+20883 1 2
+20884 1 2
+20885 1 2
+20886 1 2
+20887 1 2
+20888 1 2
+20889 1 2
+20890 1 2
+20891 1 2
+20892 1 2
+20893 1 2
+20894 1 2
+20895 1 2
+20896 1 2
+20897 1 2
+20898 1 2
+20899 1 2
+20900 1 2
+20901 1 2
+20902 1 2
+20903 1 2
+20904 1 2
+20905 1 2
+20906 1 2
+20907 1 2
+20908 1 2
+20909 1 2
+20910 1 2
+20911 1 2
+20912 1 2
+20913 1 2
+20914 1 2
+20915 1 2
+20916 1 2
+20917 1 2
+20918 1 2
+20919 1 2
+20920 1 2
+20921 1 2
+20922 1 2
+20923 1 2
+20924 1 2
+20925 1 2
+20926 1 2
+20927 1 2
+20928 1 2
+20929 1 2
+20930 1 2
+20931 1 2
+20932 1 2
+20933 1 2
+20934 1 2
+20935 1 2
+20936 1 2
+20937 1 2
+20938 1 2
+20939 1 2
+20940 1 2
+20941 1 2
+20942 1 2
+20943 1 2
+20944 1 2
+20945 1 2
+20946 1 2
+20947 1 2
+20948 1 2
+20949 1 2
+20950 1 2
+20951 1 2
+20952 1 2
+20953 1 2
+20954 1 2
+20955 1 2
+20956 1 2
+20957 1 2
+20958 1 2
+20959 1 2
+20960 1 2
+20961 1 2
+20962 1 2
+20963 1 2
+20964 1 2
+20965 1 2
+20966 1 2
+20967 1 2
+20968 1 2
+20969 1 2
+20970 1 2
+20971 1 2
+20972 1 2
+20973 1 2
+20974 1 2
+20975 1 2
+20976 1 2
+20977 1 2
+20978 1 2
+20979 1 2
+20980 1 2
+20981 1 2
+20982 1 2
+20983 1 2
+20984 1 2
+20985 1 2
+20986 1 2
+20987 1 2
+20988 1 2
+20989 1 2
+20990 1 2
+20991 1 2
+20992 1 2
+20993 1 2
+20994 1 2
+20995 1 2
+20996 1 2
+20997 1 2
+20998 1 2
+20999 1 2
+21000 1 2
+21001 1 2
+21002 1 2
+21003 1 2
+21004 1 2
+21005 1 2
+21006 1 2
+21007 1 2
+21008 1 2
+21009 1 2
+21010 1 2
+21011 1 2
+21012 1 2
+21013 1 2
+21014 1 2
+21015 1 2
+21016 1 2
+21017 1 2
+21018 1 2
+21019 1 2
+21020 1 2
+21021 1 2
+21022 1 2
+21023 1 2
+21024 1 2
+21025 1 2
+21026 1 2
+21027 1 2
+21028 1 2
+21029 1 2
+21030 1 2
+21031 1 2
+21032 1 2
+21033 1 2
+21034 1 2
+21035 1 2
+21036 1 2
+21037 1 2
+21038 1 2
+21039 1 2
+21040 1 2
+21041 1 2
+21042 1 2
+21043 1 2
+21044 1 2
+21045 1 2
+21046 1 2
+21047 1 2
+21048 1 2
+21049 1 2
+21050 1 2
+21051 1 2
+21052 1 2
+21053 1 2
+21054 1 2
+21055 1 2
+21056 1 2
+21057 1 2
+21058 1 2
+21059 1 2
+21060 1 2
+21061 1 2
+21062 1 2
+21063 1 2
+21064 1 2
+21065 1 2
+21066 1 2
+21067 1 2
+21068 1 2
+21069 1 2
+21070 1 2
+21071 1 2
+21072 1 2
+21073 1 2
+21074 1 2
+21075 1 2
+21076 1 2
+21077 1 2
+21078 1 2
+21079 1 2
+21080 1 2
+21081 1 2
+21082 1 2
+21083 1 2
+21084 1 2
+21085 1 2
+21086 1 2
+21087 1 2
+21088 1 2
+21089 1 2
+21090 1 2
+21091 1 2
+21092 1 2
+21093 1 2
+21094 1 2
+21095 1 2
+21096 1 2
+21097 1 2
+21098 1 2
+21099 1 2
+21100 1 2
+21101 1 2
+21102 1 2
+21103 1 2
+21104 1 2
+21105 1 2
+21106 1 2
+21107 1 2
+21108 1 2
+21109 1 2
+21110 1 2
+21111 1 2
+21112 1 2
+21113 1 2
+21114 1 2
+21115 1 2
+21116 1 2
+21117 1 2
+21118 1 2
+21119 1 2
+21120 1 2
+21121 1 2
+21122 1 2
+21123 1 2
+21124 1 2
+21125 1 2
+21126 1 2
+21127 1 2
+21128 1 2
+21129 1 2
+21130 1 2
+21131 1 2
+21132 1 2
+21133 1 2
+21134 1 2
+21135 1 2
+21136 1 2
+21137 1 2
+21138 1 2
+21139 1 2
+21140 1 2
+21141 1 2
+21142 1 2
+21143 1 2
+21144 1 2
+21145 1 2
+21146 1 2
+21147 1 2
+21148 1 2
+21149 1 2
+21150 1 2
+21151 1 2
+21152 1 2
+21153 1 2
+21154 1 2
+21155 1 2
+21156 1 2
+21157 1 2
+21158 1 2
+21159 1 2
+21160 1 2
+21161 1 2
+21162 1 2
+21163 1 2
+21164 1 2
+21165 1 2
+21166 1 2
+21167 1 2
+21168 1 2
+21169 1 2
+21170 1 2
+21171 1 2
+21172 1 2
+21173 1 2
+21174 1 2
+21175 1 2
+21176 1 2
+21177 1 2
+21178 1 2
+21179 1 2
+21180 1 2
+21181 1 2
+21182 1 2
+21183 1 2
+21184 1 2
+21185 1 2
+21186 1 2
+21187 1 2
+21188 1 2
+21189 1 2
+21190 1 2
+21191 1 2
+21192 1 2
+21193 1 2
+21194 1 2
+21195 1 2
+21196 1 2
+21197 1 2
+21198 1 2
+21199 1 2
+21200 1 2
+21201 1 2
+21202 1 2
+21203 1 2
+21204 1 2
+21205 1 2
+21206 1 2
+21207 1 2
+21208 1 2
+21209 1 2
+21210 1 2
+21211 1 2
+21212 1 2
+21213 1 2
+21214 1 2
+21215 1 2
+21216 1 2
+21217 1 2
+21218 1 2
+21219 1 2
+21220 1 2
+21221 1 2
+21222 1 2
+21223 1 2
+21224 1 2
+21225 1 2
+21226 1 2
+21227 1 2
+21228 1 2
+21229 1 2
+21230 1 2
+21231 1 2
+21232 1 2
+21233 1 2
+21234 1 2
+21235 1 2
+21236 1 2
+21237 1 2
+21238 1 2
+21239 1 2
+21240 1 2
+21241 1 2
+21242 1 2
+21243 1 2
+21244 1 2
+21245 1 2
+21246 1 2
+21247 1 2
+21248 1 2
+21249 1 2
+21250 1 2
+21251 1 2
+21252 1 2
+21253 1 2
+21254 1 2
+21255 1 2
+21256 1 2
+21257 1 2
+21258 1 2
+21259 1 2
+21260 1 2
+21261 1 2
+21262 1 2
+21263 1 2
+21264 1 2
+21265 1 2
+21266 1 2
+21267 1 2
+21268 1 2
+21269 1 2
+21270 1 2
+21271 1 2
+21272 1 2
+21273 1 2
+21274 1 2
+21275 1 2
+21276 1 2
+21277 1 2
+21278 1 2
+21279 1 2
+21280 1 2
+21281 1 2
+21282 1 2
+21283 1 2
+21284 1 2
+21285 1 2
+21286 1 2
+21287 1 2
+21288 1 2
+21289 1 2
+21290 1 2
+21291 1 2
+21292 1 2
+21293 1 2
+21294 1 2
+21295 1 2
+21296 1 2
+21297 1 2
+21298 1 2
+21299 1 2
+21300 1 2
+21301 1 2
+21302 1 2
+21303 1 2
+21304 1 2
+21305 1 2
+21306 1 2
+21307 1 2
+21308 1 2
+21309 1 2
+21310 1 2
+21311 1 2
+21312 1 2
+21313 1 2
+21314 1 2
+21315 1 2
+21316 1 2
+21317 1 2
+21318 1 2
+21319 1 2
+21320 1 2
+21321 1 2
+21322 1 2
+21323 1 2
+21324 1 2
+21325 1 2
+21326 1 2
+21327 1 2
+21328 1 2
+21329 1 2
+21330 1 2
+21331 1 2
+21332 1 2
+21333 1 2
+21334 1 2
+21335 1 2
+21336 1 2
+21337 1 2
+21338 1 2
+21339 1 2
+21340 1 2
+21341 1 2
+21342 1 2
+21343 1 2
+21344 1 2
+21345 1 2
+21346 1 2
+21347 1 2
+21348 1 2
+21349 1 2
+21350 1 2
+21351 1 2
+21352 1 2
+21353 1 2
+21354 1 2
+21355 1 2
+21356 1 2
+21357 1 2
+21358 1 2
+21359 1 2
+21360 1 2
+21361 1 2
+21362 1 2
+21363 1 2
+21364 1 2
+21365 1 2
+21366 1 2
+21367 1 2
+21368 1 2
+21369 1 2
+21370 1 2
+21371 1 2
+21372 1 2
+21373 1 2
+21374 1 2
+21375 1 2
+21376 1 2
+21377 1 2
+21378 1 2
+21379 1 2
+21380 1 2
+21381 1 2
+21382 1 2
+21383 1 2
+21384 1 2
+21385 1 2
+21386 1 2
+21387 1 2
+21388 1 2
+21389 1 2
+21390 1 2
+21391 1 2
+21392 1 2
+21393 1 2
+21394 1 2
+21395 1 2
+21396 1 2
+21397 1 2
+21398 1 2
+21399 1 2
+21400 1 2
+21401 1 2
+21402 1 2
+21403 1 2
+21404 1 2
+21405 1 2
+21406 1 2
+21407 1 2
+21408 1 2
+21409 1 2
+21410 1 2
+21411 1 2
+21412 1 2
+21413 1 2
+21414 1 2
+21415 1 2
+21416 1 2
+21417 1 2
+21418 1 2
+21419 1 2
+21420 1 2
+21421 1 2
+21422 1 2
+21423 1 2
+21424 1 2
+21425 1 2
+21426 1 2
+21427 1 2
+21428 1 2
+21429 1 2
+21430 1 2
+21431 1 2
+21432 1 2
+21433 1 2
+21434 1 2
+21435 1 2
+21436 1 2
+21437 1 2
+21438 1 2
+21439 1 2
+21440 1 2
+21441 1 2
+21442 1 2
+21443 1 2
+21444 1 2
+21445 1 2
+21446 1 2
+21447 1 2
+21448 1 2
+21449 1 2
+21450 1 2
+21451 1 2
+21452 1 2
+21453 1 2
+21454 1 2
+21455 1 2
+21456 1 2
+21457 1 2
+21458 1 2
+21459 1 2
+21460 1 2
+21461 1 2
+21462 1 2
+21463 1 2
+21464 1 2
+21465 1 2
+21466 1 2
+21467 1 2
+21468 1 2
+21469 1 2
+21470 1 2
+21471 1 2
+21472 1 2
+21473 1 2
+21474 1 2
+21475 1 2
+21476 1 2
+21477 1 2
+21478 1 2
+21479 1 2
+21480 1 2
+21481 1 2
+21482 1 2
+21483 1 2
+21484 1 2
+21485 1 2
+21486 1 2
+21487 1 2
+21488 1 2
+21489 1 2
+21490 1 2
+21491 1 2
+21492 1 2
+21493 1 2
+21494 1 2
+21495 1 2
+21496 1 2
+21497 1 2
+21498 1 2
+21499 1 2
+21500 1 2
+21501 1 2
+21502 1 2
+21503 1 2
+21504 1 2
+21505 1 2
+21506 1 2
+21507 1 2
+21508 1 2
+21509 1 2
+21510 1 2
+21511 1 2
+21512 1 2
+21513 1 2
+21514 1 2
+21515 1 2
+21516 1 2
+21517 1 2
+21518 1 2
+21519 1 2
+21520 1 2
+21521 1 2
+21522 1 2
+21523 1 2
+21524 1 2
+21525 1 2
+21526 1 2
+21527 1 2
+21528 1 2
+21529 1 2
+21530 1 2
+21531 1 2
+21532 1 2
+21533 1 2
+21534 1 2
+21535 1 2
+21536 1 2
+21537 1 2
+21538 1 2
+21539 1 2
+21540 1 2
+21541 1 2
+21542 1 2
+21543 1 2
+21544 1 2
+21545 1 2
+21546 1 2
+21547 1 2
+21548 1 2
+21549 1 2
+21550 1 2
+21551 1 2
+21552 1 2
+21553 1 2
+21554 1 2
+21555 1 2
+21556 1 2
+21557 1 2
+21558 1 2
+21559 1 2
+21560 1 2
+21561 1 2
+21562 1 2
+21563 1 2
+21564 1 2
+21565 1 2
+21566 1 2
+21567 1 2
+21568 1 2
+21569 1 2
+21570 1 2
+21571 1 2
+21572 1 2
+21573 1 2
+21574 1 2
+21575 1 2
+21576 1 2
+21577 1 2
+21578 1 2
+21579 1 2
+21580 1 2
+21581 1 2
+21582 1 2
+21583 1 2
+21584 1 2
+21585 1 2
+21586 1 2
+21587 1 2
+21588 1 2
+21589 1 2
+21590 1 2
+21591 1 2
+21592 1 2
+21593 1 2
+21594 1 2
+21595 1 2
+21596 1 2
+21597 1 2
+21598 1 2
+21599 1 2
+21600 1 2
+21601 1 2
+21602 1 2
+21603 1 2
+21604 1 2
+21605 1 2
+21606 1 2
+21607 1 2
+21608 1 2
+21609 1 2
+21610 1 2
+21611 1 2
+21612 1 2
+21613 1 2
+21614 1 2
+21615 1 2
+21616 1 2
+21617 1 2
+21618 1 2
+21619 1 2
+21620 1 2
+21621 1 2
+21622 1 2
+21623 1 2
+21624 1 2
+21625 1 2
+21626 1 2
+21627 1 2
+21628 1 2
+21629 1 2
+21630 1 2
+21631 1 2
+21632 1 2
+21633 1 2
+21634 1 2
+21635 1 2
+21636 1 2
+21637 1 2
+21638 1 2
+21639 1 2
+21640 1 2
+21641 1 2
+21642 1 2
+21643 1 2
+21644 1 2
+21645 1 2
+21646 1 2
+21647 1 2
+21648 1 2
+21649 1 2
+21650 1 2
+21651 1 2
+21652 1 2
+21653 1 2
+21654 1 2
+21655 1 2
+21656 1 2
+21657 1 2
+21658 1 2
+21659 1 2
+21660 1 2
+21661 1 2
+21662 1 2
+21663 1 2
+21664 1 2
+21665 1 2
+21666 1 2
+21667 1 2
+21668 1 2
+21669 1 2
+21670 1 2
+21671 1 2
+21672 1 2
+21673 1 2
+21674 1 2
+21675 1 2
+21676 1 2
+21677 1 2
+21678 1 2
+21679 1 2
+21680 1 2
+21681 1 2
+21682 1 2
+21683 1 2
+21684 1 2
+21685 1 2
+21686 1 2
+21687 1 2
+21688 1 2
+21689 1 2
+21690 1 2
+21691 1 2
+21692 1 2
+21693 1 2
+21694 1 2
+21695 1 2
+21696 1 2
+21697 1 2
+21698 1 2
+21699 1 2
+21700 1 2
+21701 1 2
+21702 1 2
+21703 1 2
+21704 1 2
+21705 1 2
+21706 1 2
+21707 1 2
+21708 1 2
+21709 1 2
+21710 1 2
+21711 1 2
+21712 1 2
+21713 1 2
+21714 1 2
+21715 1 2
+21716 1 2
+21717 1 2
+21718 1 2
+21719 1 2
+21720 1 2
+21721 1 2
+21722 1 2
+21723 1 2
+21724 1 2
+21725 1 2
+21726 1 2
+21727 1 2
+21728 1 2
+21729 1 2
+21730 1 2
+21731 1 2
+21732 1 2
+21733 1 2
+21734 1 2
+21735 1 2
+21736 1 2
+21737 1 2
+21738 1 2
+21739 1 2
+21740 1 2
+21741 1 2
+21742 1 2
+21743 1 2
+21744 1 2
+21745 1 2
+21746 1 2
+21747 1 2
+21748 1 2
+21749 1 2
+21750 1 2
+21751 1 2
+21752 1 2
+21753 1 2
+21754 1 2
+21755 1 2
+21756 1 2
+21757 1 2
+21758 1 2
+21759 1 2
+21760 1 2
+21761 1 2
+21762 1 2
+21763 1 2
+21764 1 2
+21765 1 2
+21766 1 2
+21767 1 2
+21768 1 2
+21769 1 2
+21770 1 2
+21771 1 2
+21772 1 2
+21773 1 2
+21774 1 2
+21775 1 2
+21776 1 2
+21777 1 2
+21778 1 2
+21779 1 2
+21780 1 2
+21781 1 2
+21782 1 2
+21783 1 2
+21784 1 2
+21785 1 2
+21786 1 2
+21787 1 2
+21788 1 2
+21789 1 2
+21790 1 2
+21791 1 2
+21792 1 2
+21793 1 2
+21794 1 2
+21795 1 2
+21796 1 2
+21797 1 2
+21798 1 2
+21799 1 2
+21800 1 2
+21801 1 2
+21802 1 2
+21803 1 2
+21804 1 2
+21805 1 2
+21806 1 2
+21807 1 2
+21808 1 2
+21809 1 2
+21810 1 2
+21811 1 2
+21812 1 2
+21813 1 2
+21814 1 2
+21815 1 2
+21816 1 2
+21817 1 2
+21818 1 2
+21819 1 2
+21820 1 2
+21821 1 2
+21822 1 2
+21823 1 2
+21824 1 2
+21825 1 2
+21826 1 2
+21827 1 2
+21828 1 2
+21829 1 2
+21830 1 2
+21831 1 2
+21832 1 2
+21833 1 2
+21834 1 2
+21835 1 2
+21836 1 2
+21837 1 2
+21838 1 2
+21839 1 2
+21840 1 2
+21841 1 2
+21842 1 2
+21843 1 2
+21844 1 2
+21845 1 2
+21846 1 2
+21847 1 2
+21848 1 2
+21849 1 2
+21850 1 2
+21851 1 2
+21852 1 2
+21853 1 2
+21854 1 2
+21855 1 2
+21856 1 2
+21857 1 2
+21858 1 2
+21859 1 2
+21860 1 2
+21861 1 2
+21862 1 2
+21863 1 2
+21864 1 2
+21865 1 2
+21866 1 2
+21867 1 2
+21868 1 2
+21869 1 2
+21870 1 2
+21871 1 2
+21872 1 2
+21873 1 2
+21874 1 2
+21875 1 2
+21876 1 2
+21877 1 2
+21878 1 2
+21879 1 2
+21880 1 2
+21881 1 2
+21882 1 2
+21883 1 2
+21884 1 2
+21885 1 2
+21886 1 2
+21887 1 2
+21888 1 2
+21889 1 2
+21890 1 2
+21891 1 2
+21892 1 2
+21893 1 2
+21894 1 2
+21895 1 2
+21896 1 2
+21897 1 2
+21898 1 2
+21899 1 2
+21900 1 2
+21901 1 2
+21902 1 2
+21903 1 2
+21904 1 2
+21905 1 2
+21906 1 2
+21907 1 2
+21908 1 2
+21909 1 2
+21910 1 2
+21911 1 2
+21912 1 2
+21913 1 2
+21914 1 2
+21915 1 2
+21916 1 2
+21917 1 2
+21918 1 2
+21919 1 2
+21920 1 2
+21921 1 2
+21922 1 2
+21923 1 2
+21924 1 2
+21925 1 2
+21926 1 2
+21927 1 2
+21928 1 2
+21929 1 2
+21930 1 2
+21931 1 2
+21932 1 2
+21933 1 2
+21934 1 2
+21935 1 2
+21936 1 2
+21937 1 2
+21938 1 2
+21939 1 2
+21940 1 2
+21941 1 2
+21942 1 2
+21943 1 2
+21944 1 2
+21945 1 2
+21946 1 2
+21947 1 2
+21948 1 2
+21949 1 2
+21950 1 2
+21951 1 2
+21952 1 2
+21953 1 2
+21954 1 2
+21955 1 2
+21956 1 2
+21957 1 2
+21958 1 2
+21959 1 2
+21960 1 2
+21961 1 2
+21962 1 2
+21963 1 2
+21964 1 2
+21965 1 2
+21966 1 2
+21967 1 2
+21968 1 2
+21969 1 2
+21970 1 2
+21971 1 2
+21972 1 2
+21973 1 2
+21974 1 2
+21975 1 2
+21976 1 2
+21977 1 2
+21978 1 2
+21979 1 2
+21980 1 2
+21981 1 2
+21982 1 2
+21983 1 2
+21984 1 2
+21985 1 2
+21986 1 2
+21987 1 2
+21988 1 2
+21989 1 2
+21990 1 2
+21991 1 2
+21992 1 2
+21993 1 2
+21994 1 2
+21995 1 2
+21996 1 2
+21997 1 2
+21998 1 2
+21999 1 2
+22000 1 2
+22001 1 2
+22002 1 2
+22003 1 2
+22004 1 2
+22005 1 2
+22006 1 2
+22007 1 2
+22008 1 2
+22009 1 2
+22010 1 2
+22011 1 2
+22012 1 2
+22013 1 2
+22014 1 2
+22015 1 2
+22016 1 2
+22017 1 2
+22018 1 2
+22019 1 2
+22020 1 2
+22021 1 2
+22022 1 2
+22023 1 2
+22024 1 2
+22025 1 2
+22026 1 2
+22027 1 2
+22028 1 2
+22029 1 2
+22030 1 2
+22031 1 2
+22032 1 2
+22033 1 2
+22034 1 2
+22035 1 2
+22036 1 2
+22037 1 2
+22038 1 2
+22039 1 2
+22040 1 2
+22041 1 2
+22042 1 2
+22043 1 2
+22044 1 2
+22045 1 2
+22046 1 2
+22047 1 2
+22048 1 2
+22049 1 2
+22050 1 2
+22051 1 2
+22052 1 2
+22053 1 2
+22054 1 2
+22055 1 2
+22056 1 2
+22057 1 2
+22058 1 2
+22059 1 2
+22060 1 2
+22061 1 2
+22062 1 2
+22063 1 2
+22064 1 2
+22065 1 2
+22066 1 2
+22067 1 2
+22068 1 2
+22069 1 2
+22070 1 2
+22071 1 2
+22072 1 2
+22073 1 2
+22074 1 2
+22075 1 2
+22076 1 2
+22077 1 2
+22078 1 2
+22079 1 2
+22080 1 2
+22081 1 2
+22082 1 2
+22083 1 2
+22084 1 2
+22085 1 2
+22086 1 2
+22087 1 2
+22088 1 2
+22089 1 2
+22090 1 2
+22091 1 2
+22092 1 2
+22093 1 2
+22094 1 2
+22095 1 2
+22096 1 2
+22097 1 2
+22098 1 2
+22099 1 2
+22100 1 2
+22101 1 2
+22102 1 2
+22103 1 2
+22104 1 2
+22105 1 2
+22106 1 2
+22107 1 2
+22108 1 2
+22109 1 2
+22110 1 2
+22111 1 2
+22112 1 2
+22113 1 2
+22114 1 2
+22115 1 2
+22116 1 2
+22117 1 2
+22118 1 2
+22119 1 2
+22120 1 2
+22121 1 2
+22122 1 2
+22123 1 2
+22124 1 2
+22125 1 2
+22126 1 2
+22127 1 2
+22128 1 2
+22129 1 2
+22130 1 2
+22131 1 2
+22132 1 2
+22133 1 2
+22134 1 2
+22135 1 2
+22136 1 2
+22137 1 2
+22138 1 2
+22139 1 2
+22140 1 2
+22141 1 2
+22142 1 2
+22143 1 2
+22144 1 2
+22145 1 2
+22146 1 2
+22147 1 2
+22148 1 2
+22149 1 2
+22150 1 2
+22151 1 2
+22152 1 2
+22153 1 2
+22154 1 2
+22155 1 2
+22156 1 2
+22157 1 2
+22158 1 2
+22159 1 2
+22160 1 2
+22161 1 2
+22162 1 2
+22163 1 2
+22164 1 2
+22165 1 2
+22166 1 2
+22167 1 2
+22168 1 2
+22169 1 2
+22170 1 2
+22171 1 2
+22172 1 2
+22173 1 2
+22174 1 2
+22175 1 2
+22176 1 2
+22177 1 2
+22178 1 2
+22179 1 2
+22180 1 2
+22181 1 2
+22182 1 2
+22183 1 2
+22184 1 2
+22185 1 2
+22186 1 2
+22187 1 2
+22188 1 2
+22189 1 2
+22190 1 2
+22191 1 2
+22192 1 2
+22193 1 2
+22194 1 2
+22195 1 2
+22196 1 2
+22197 1 2
+22198 1 2
+22199 1 2
+22200 1 2
+22201 1 2
+22202 1 2
+22203 1 2
+22204 1 2
+22205 1 2
+22206 1 2
+22207 1 2
+22208 1 2
+22209 1 2
+22210 1 2
+22211 1 2
+22212 1 2
+22213 1 2
+22214 1 2
+22215 1 2
+22216 1 2
+22217 1 2
+22218 1 2
+22219 1 2
+22220 1 2
+22221 1 2
+22222 1 2
+22223 1 2
+22224 1 2
+22225 1 2
+22226 1 2
+22227 1 2
+22228 1 2
+22229 1 2
+22230 1 2
+22231 1 2
+22232 1 2
+22233 1 2
+22234 1 2
+22235 1 2
+22236 1 2
+22237 1 2
+22238 1 2
+22239 1 2
+22240 1 2
+22241 1 2
+22242 1 2
+22243 1 2
+22244 1 2
+22245 1 2
+22246 1 2
+22247 1 2
+22248 1 2
+22249 1 2
+22250 1 2
+22251 1 2
+22252 1 2
+22253 1 2
+22254 1 2
+22255 1 2
+22256 1 2
+22257 1 2
+22258 1 2
+22259 1 2
+22260 1 2
+22261 1 2
+22262 1 2
+22263 1 2
+22264 1 2
+22265 1 2
+22266 1 2
+22267 1 2
+22268 1 2
+22269 1 2
+22270 1 2
+22271 1 2
+22272 1 2
+22273 1 2
+22274 1 2
+22275 1 2
+22276 1 2
+22277 1 2
+22278 1 2
+22279 1 2
+22280 1 2
+22281 1 2
+22282 1 2
+22283 1 2
+22284 1 2
+22285 1 2
+22286 1 2
+22287 1 2
+22288 1 2
+22289 1 2
+22290 1 2
+22291 1 2
+22292 1 2
+22293 1 2
+22294 1 2
+22295 1 2
+22296 1 2
+22297 1 2
+22298 1 2
+22299 1 2
+22300 1 2
+22301 1 2
+22302 1 2
+22303 1 2
+22304 1 2
+22305 1 2
+22306 1 2
+22307 1 2
+22308 1 2
+22309 1 2
+22310 1 2
+22311 1 2
+22312 1 2
+22313 1 2
+22314 1 2
+22315 1 2
+22316 1 2
+22317 1 2
+22318 1 2
+22319 1 2
+22320 1 2
+22321 1 2
+22322 1 2
+22323 1 2
+22324 1 2
+22325 1 2
+22326 1 2
+22327 1 2
+22328 1 2
+22329 1 2
+22330 1 2
+22331 1 2
+22332 1 2
+22333 1 2
+22334 1 2
+22335 1 2
+22336 1 2
+22337 1 2
+22338 1 2
+22339 1 2
+22340 1 2
+22341 1 2
+22342 1 2
+22343 1 2
+22344 1 2
+22345 1 2
+22346 1 2
+22347 1 2
+22348 1 2
+22349 1 2
+22350 1 2
+22351 1 2
+22352 1 2
+22353 1 2
+22354 1 2
+22355 1 2
+22356 1 2
+22357 1 2
+22358 1 2
+22359 1 2
+22360 1 2
+22361 1 2
+22362 1 2
+22363 1 2
+22364 1 2
+22365 1 2
+22366 1 2
+22367 1 2
+22368 1 2
+22369 1 2
+22370 1 2
+22371 1 2
+22372 1 2
+22373 1 2
+22374 1 2
+22375 1 2
+22376 1 2
+22377 1 2
+22378 1 2
+22379 1 2
+22380 1 2
+22381 1 2
+22382 1 2
+22383 1 2
+22384 1 2
+22385 1 2
+22386 1 2
+22387 1 2
+22388 1 2
+22389 1 2
+22390 1 2
+22391 1 2
+22392 1 2
+22393 1 2
+22394 1 2
+22395 1 2
+22396 1 2
+22397 1 2
+22398 1 2
+22399 1 2
+22400 1 2
+22401 1 2
+22402 1 2
+22403 1 2
+22404 1 2
+22405 1 2
+22406 1 2
+22407 1 2
+22408 1 2
+22409 1 2
+22410 1 2
+22411 1 2
+22412 1 2
+22413 1 2
+22414 1 2
+22415 1 2
+22416 1 2
+22417 1 2
+22418 1 2
+22419 1 2
+22420 1 2
+22421 1 2
+22422 1 2
+22423 1 2
+22424 1 2
+22425 1 2
+22426 1 2
+22427 1 2
+22428 1 2
+22429 1 2
+22430 1 2
+22431 1 2
+22432 1 2
+22433 1 2
+22434 1 2
+22435 1 2
+22436 1 2
+22437 1 2
+22438 1 2
+22439 1 2
+22440 1 2
+22441 1 2
+22442 1 2
+22443 1 2
+22444 1 2
+22445 1 2
+22446 1 2
+22447 1 2
+22448 1 2
+22449 1 2
+22450 1 2
+22451 1 2
+22452 1 2
+22453 1 2
+22454 1 2
+22455 1 2
+22456 1 2
+22457 1 2
+22458 1 2
+22459 1 2
+22460 1 2
+22461 1 2
+22462 1 2
+22463 1 2
+22464 1 2
+22465 1 2
+22466 1 2
+22467 1 2
+22468 1 2
+22469 1 2
+22470 1 2
+22471 1 2
+22472 1 2
+22473 1 2
+22474 1 2
+22475 1 2
+22476 1 2
+22477 1 2
+22478 1 2
+22479 1 2
+22480 1 2
+22481 1 2
+22482 1 2
+22483 1 2
+22484 1 2
+22485 1 2
+22486 1 2
+22487 1 2
+22488 1 2
+22489 1 2
+22490 1 2
+22491 1 2
+22492 1 2
+22493 1 2
+22494 1 2
+22495 1 2
+22496 1 2
+22497 1 2
+22498 1 2
+22499 1 2
+22500 1 2
+22501 1 2
+22502 1 2
+22503 1 2
+22504 1 2
+22505 1 2
+22506 1 2
+22507 1 2
+22508 1 2
+22509 1 2
+22510 1 2
+22511 1 2
+22512 1 2
+22513 1 2
+22514 1 2
+22515 1 2
+22516 1 2
+22517 1 2
+22518 1 2
+22519 1 2
+22520 1 2
+22521 1 2
+22522 1 2
+22523 1 2
+22524 1 2
+22525 1 2
+22526 1 2
+22527 1 2
+22528 1 2
+22529 1 2
+22530 1 2
+22531 1 2
+22532 1 2
+22533 1 2
+22534 1 2
+22535 1 2
+22536 1 2
+22537 1 2
+22538 1 2
+22539 1 2
+22540 1 2
+22541 1 2
+22542 1 2
+22543 1 2
+22544 1 2
+22545 1 2
+22546 1 2
+22547 1 2
+22548 1 2
+22549 1 2
+22550 1 2
+22551 1 2
+22552 1 2
+22553 1 2
+22554 1 2
+22555 1 2
+22556 1 2
+22557 1 2
+22558 1 2
+22559 1 2
+22560 1 2
+22561 1 2
+22562 1 2
+22563 1 2
+22564 1 2
+22565 1 2
+22566 1 2
+22567 1 2
+22568 1 2
+22569 1 2
+22570 1 2
+22571 1 2
+22572 1 2
+22573 1 2
+22574 1 2
+22575 1 2
+22576 1 2
+22577 1 2
+22578 1 2
+22579 1 2
+22580 1 2
+22581 1 2
+22582 1 2
+22583 1 2
+22584 1 2
+22585 1 2
+22586 1 2
+22587 1 2
+22588 1 2
+22589 1 2
+22590 1 2
+22591 1 2
+22592 1 2
+22593 1 2
+22594 1 2
+22595 1 2
+22596 1 2
+22597 1 2
+22598 1 2
+22599 1 2
+22600 1 2
+22601 1 2
+22602 1 2
+22603 1 2
+22604 1 2
+22605 1 2
+22606 1 2
+22607 1 2
+22608 1 2
+22609 1 2
+22610 1 2
+22611 1 2
+22612 1 2
+22613 1 2
+22614 1 2
+22615 1 2
+22616 1 2
+22617 1 2
+22618 1 2
+22619 1 2
+22620 1 2
+22621 1 2
+22622 1 2
+22623 1 2
+22624 1 2
+22625 1 2
+22626 1 2
+22627 1 2
+22628 1 2
+22629 1 2
+22630 1 2
+22631 1 2
+22632 1 2
+22633 1 2
+22634 1 2
+22635 1 2
+22636 1 2
+22637 1 2
+22638 1 2
+22639 1 2
+22640 1 2
+22641 1 2
+22642 1 2
+22643 1 2
+22644 1 2
+22645 1 2
+22646 1 2
+22647 1 2
+22648 1 2
+22649 1 2
+22650 1 2
+22651 1 2
+22652 1 2
+22653 1 2
+22654 1 2
+22655 1 2
+22656 1 2
+22657 1 2
+22658 1 2
+22659 1 2
+22660 1 2
+22661 1 2
+22662 1 2
+22663 1 2
+22664 1 2
+22665 1 2
+22666 1 2
+22667 1 2
+22668 1 2
+22669 1 2
+22670 1 2
+22671 1 2
+22672 1 2
+22673 1 2
+22674 1 2
+22675 1 2
+22676 1 2
+22677 1 2
+22678 1 2
+22679 1 2
+22680 1 2
+22681 1 2
+22682 1 2
+22683 1 2
+22684 1 2
+22685 1 2
+22686 1 2
+22687 1 2
+22688 1 2
+22689 1 2
+22690 1 2
+22691 1 2
+22692 1 2
+22693 1 2
+22694 1 2
+22695 1 2
+22696 1 2
+22697 1 2
+22698 1 2
+22699 1 2
+22700 1 2
+22701 1 2
+22702 1 2
+22703 1 2
+22704 1 2
+22705 1 2
+22706 1 2
+22707 1 2
+22708 1 2
+22709 1 2
+22710 1 2
+22711 1 2
+22712 1 2
+22713 1 2
+22714 1 2
+22715 1 2
+22716 1 2
+22717 1 2
+22718 1 2
+22719 1 2
+22720 1 2
+22721 1 2
+22722 1 2
+22723 1 2
+22724 1 2
+22725 1 2
+22726 1 2
+22727 1 2
+22728 1 2
+22729 1 2
+22730 1 2
+22731 1 2
+22732 1 2
+22733 1 2
+22734 1 2
+22735 1 2
+22736 1 2
+22737 1 2
+22738 1 2
+22739 1 2
+22740 1 2
+22741 1 2
+22742 1 2
+22743 1 2
+22744 1 2
+22745 1 2
+22746 1 2
+22747 1 2
+22748 1 2
+22749 1 2
+22750 1 2
+22751 1 2
+22752 1 2
+22753 1 2
+22754 1 2
+22755 1 2
+22756 1 2
+22757 1 2
+22758 1 2
+22759 1 2
+22760 1 2
+22761 1 2
+22762 1 2
+22763 1 2
+22764 1 2
+22765 1 2
+22766 1 2
+22767 1 2
+22768 1 2
+22769 1 2
+22770 1 2
+22771 1 2
+22772 1 2
+22773 1 2
+22774 1 2
+22775 1 2
+22776 1 2
+22777 1 2
+22778 1 2
+22779 1 2
+22780 1 2
+22781 1 2
+22782 1 2
+22783 1 2
+22784 1 2
+22785 1 2
+22786 1 2
+22787 1 2
+22788 1 2
+22789 1 2
+22790 1 2
+22791 1 2
+22792 1 2
+22793 1 2
+22794 1 2
+22795 1 2
+22796 1 2
+22797 1 2
+22798 1 2
+22799 1 2
+22800 1 2
+22801 1 2
+22802 1 2
+22803 1 2
+22804 1 2
+22805 1 2
+22806 1 2
+22807 1 2
+22808 1 2
+22809 1 2
+22810 1 2
+22811 1 2
+22812 1 2
+22813 1 2
+22814 1 2
+22815 1 2
+22816 1 2
+22817 1 2
+22818 1 2
+22819 1 2
+22820 1 2
+22821 1 2
+22822 1 2
+22823 1 2
+22824 1 2
+22825 1 2
+22826 1 2
+22827 1 2
+22828 1 2
+22829 1 2
+22830 1 2
+22831 1 2
+22832 1 2
+22833 1 2
+22834 1 2
+22835 1 2
+22836 1 2
+22837 1 2
+22838 1 2
+22839 1 2
+22840 1 2
+22841 1 2
+22842 1 2
+22843 1 2
+22844 1 2
+22845 1 2
+22846 1 2
+22847 1 2
+22848 1 2
+22849 1 2
+22850 1 2
+22851 1 2
+22852 1 2
+22853 1 2
+22854 1 2
+22855 1 2
+22856 1 2
+22857 1 2
+22858 1 2
+22859 1 2
+22860 1 2
+22861 1 2
+22862 1 2
+22863 1 2
+22864 1 2
+22865 1 2
+22866 1 2
+22867 1 2
+22868 1 2
+22869 1 2
+22870 1 2
+22871 1 2
+22872 1 2
+22873 1 2
+22874 1 2
+22875 1 2
+22876 1 2
+22877 1 2
+22878 1 2
+22879 1 2
+22880 1 2
+22881 1 2
+22882 1 2
+22883 1 2
+22884 1 2
+22885 1 2
+22886 1 2
+22887 1 2
+22888 1 2
+22889 1 2
+22890 1 2
+22891 1 2
+22892 1 2
+22893 1 2
+22894 1 2
+22895 1 2
+22896 1 2
+22897 1 2
+22898 1 2
+22899 1 2
+22900 1 2
+22901 1 2
+22902 1 2
+22903 1 2
+22904 1 2
+22905 1 2
+22906 1 2
+22907 1 2
+22908 1 2
+22909 1 2
+22910 1 2
+22911 1 2
+22912 1 2
+22913 1 2
+22914 1 2
+22915 1 2
+22916 1 2
+22917 1 2
+22918 1 2
+22919 1 2
+22920 1 2
+22921 1 2
+22922 1 2
+22923 1 2
+22924 1 2
+22925 1 2
+22926 1 2
+22927 1 2
+22928 1 2
+22929 1 2
+22930 1 2
+22931 1 2
+22932 1 2
+22933 1 2
+22934 1 2
+22935 1 2
+22936 1 2
+22937 1 2
+22938 1 2
+22939 1 2
+22940 1 2
+22941 1 2
+22942 1 2
+22943 1 2
+22944 1 2
+22945 1 2
+22946 1 2
+22947 1 2
+22948 1 2
+22949 1 2
+22950 1 2
+22951 1 2
+22952 1 2
+22953 1 2
+22954 1 2
+22955 1 2
+22956 1 2
+22957 1 2
+22958 1 2
+22959 1 2
+22960 1 2
+22961 1 2
+22962 1 2
+22963 1 2
+22964 1 2
+22965 1 2
+22966 1 2
+22967 1 2
+22968 1 2
+22969 1 2
+22970 1 2
+22971 1 2
+22972 1 2
+22973 1 2
+22974 1 2
+22975 1 2
+22976 1 2
+22977 1 2
+22978 1 2
+22979 1 2
+22980 1 2
+22981 1 2
+22982 1 2
+22983 1 2
+22984 1 2
+22985 1 2
+22986 1 2
+22987 1 2
+22988 1 2
+22989 1 2
+22990 1 2
+22991 1 2
+22992 1 2
+22993 1 2
+22994 1 2
+22995 1 2
+22996 1 2
+22997 1 2
+22998 1 2
+22999 1 2
+23000 1 2
+23001 1 2
+23002 1 2
+23003 1 2
+23004 1 2
+23005 1 2
+23006 1 2
+23007 1 2
+23008 1 2
+23009 1 2
+23010 1 2
+23011 1 2
+23012 1 2
+23013 1 2
+23014 1 2
+23015 1 2
+23016 1 2
+23017 1 2
+23018 1 2
+23019 1 2
+23020 1 2
+23021 1 2
+23022 1 2
+23023 1 2
+23024 1 2
+23025 1 2
+23026 1 2
+23027 1 2
+23028 1 2
+23029 1 2
+23030 1 2
+23031 1 2
+23032 1 2
+23033 1 2
+23034 1 2
+23035 1 2
+23036 1 2
+23037 1 2
+23038 1 2
+23039 1 2
+23040 1 2
+23041 1 2
+23042 1 2
+23043 1 2
+23044 1 2
+23045 1 2
+23046 1 2
+23047 1 2
+23048 1 2
+23049 1 2
+23050 1 2
+23051 1 2
+23052 1 2
+23053 1 2
+23054 1 2
+23055 1 2
+23056 1 2
+23057 1 2
+23058 1 2
+23059 1 2
+23060 1 2
+23061 1 2
+23062 1 2
+23063 1 2
+23064 1 2
+23065 1 2
+23066 1 2
+23067 1 2
+23068 1 2
+23069 1 2
+23070 1 2
+23071 1 2
+23072 1 2
+23073 1 2
+23074 1 2
+23075 1 2
+23076 1 2
+23077 1 2
+23078 1 2
+23079 1 2
+23080 1 2
+23081 1 2
+23082 1 2
+23083 1 2
+23084 1 2
+23085 1 2
+23086 1 2
+23087 1 2
+23088 1 2
+23089 1 2
+23090 1 2
+23091 1 2
+23092 1 2
+23093 1 2
+23094 1 2
+23095 1 2
+23096 1 2
+23097 1 2
+23098 1 2
+23099 1 2
+23100 1 2
+23101 1 2
+23102 1 2
+23103 1 2
+23104 1 2
+23105 1 2
+23106 1 2
+23107 1 2
+23108 1 2
+23109 1 2
+23110 1 2
+23111 1 2
+23112 1 2
+23113 1 2
+23114 1 2
+23115 1 2
+23116 1 2
+23117 1 2
+23118 1 2
+23119 1 2
+23120 1 2
+23121 1 2
+23122 1 2
+23123 1 2
+23124 1 2
+23125 1 2
+23126 1 2
+23127 1 2
+23128 1 2
+23129 1 2
+23130 1 2
+23131 1 2
+23132 1 2
+23133 1 2
+23134 1 2
+23135 1 2
+23136 1 2
+23137 1 2
+23138 1 2
+23139 1 2
+23140 1 2
+23141 1 2
+23142 1 2
+23143 1 2
+23144 1 2
+23145 1 2
+23146 1 2
+23147 1 2
+23148 1 2
+23149 1 2
+23150 1 2
+23151 1 2
+23152 1 2
+23153 1 2
+23154 1 2
+23155 1 2
+23156 1 2
+23157 1 2
+23158 1 2
+23159 1 2
+23160 1 2
+23161 1 2
+23162 1 2
+23163 1 2
+23164 1 2
+23165 1 2
+23166 1 2
+23167 1 2
+23168 1 2
+23169 1 2
+23170 1 2
+23171 1 2
+23172 1 2
+23173 1 2
+23174 1 2
+23175 1 2
+23176 1 2
+23177 1 2
+23178 1 2
+23179 1 2
+23180 1 2
+23181 1 2
+23182 1 2
+23183 1 2
+23184 1 2
+23185 1 2
+23186 1 2
+23187 1 2
+23188 1 2
+23189 1 2
+23190 1 2
+23191 1 2
+23192 1 2
+23193 1 2
+23194 1 2
+23195 1 2
+23196 1 2
+23197 1 2
+23198 1 2
+23199 1 2
+23200 1 2
+23201 1 2
+23202 1 2
+23203 1 2
+23204 1 2
+23205 1 2
+23206 1 2
+23207 1 2
+23208 1 2
+23209 1 2
+23210 1 2
+23211 1 2
+23212 1 2
+23213 1 2
+23214 1 2
+23215 1 2
+23216 1 2
+23217 1 2
+23218 1 2
+23219 1 2
+23220 1 2
+23221 1 2
+23222 1 2
+23223 1 2
+23224 1 2
+23225 1 2
+23226 1 2
+23227 1 2
+23228 1 2
+23229 1 2
+23230 1 2
+23231 1 2
+23232 1 2
+23233 1 2
+23234 1 2
+23235 1 2
+23236 1 2
+23237 1 2
+23238 1 2
+23239 1 2
+23240 1 2
+23241 1 2
+23242 1 2
+23243 1 2
+23244 1 2
+23245 1 2
+23246 1 2
+23247 1 2
+23248 1 2
+23249 1 2
+23250 1 2
+23251 1 2
+23252 1 2
+23253 1 2
+23254 1 2
+23255 1 2
+23256 1 2
+23257 1 2
+23258 1 2
+23259 1 2
+23260 1 2
+23261 1 2
+23262 1 2
+23263 1 2
+23264 1 2
+23265 1 2
+23266 1 2
+23267 1 2
+23268 1 2
+23269 1 2
+23270 1 2
+23271 1 2
+23272 1 2
+23273 1 2
+23274 1 2
+23275 1 2
+23276 1 2
+23277 1 2
+23278 1 2
+23279 1 2
+23280 1 2
+23281 1 2
+23282 1 2
+23283 1 2
+23284 1 2
+23285 1 2
+23286 1 2
+23287 1 2
+23288 1 2
+23289 1 2
+23290 1 2
+23291 1 2
+23292 1 2
+23293 1 2
+23294 1 2
+23295 1 2
+23296 1 2
+23297 1 2
+23298 1 2
+23299 1 2
+23300 1 2
+23301 1 2
+23302 1 2
+23303 1 2
+23304 1 2
+23305 1 2
+23306 1 2
+23307 1 2
+23308 1 2
+23309 1 2
+23310 1 2
+23311 1 2
+23312 1 2
+23313 1 2
+23314 1 2
+23315 1 2
+23316 1 2
+23317 1 2
+23318 1 2
+23319 1 2
+23320 1 2
+23321 1 2
+23322 1 2
+23323 1 2
+23324 1 2
+23325 1 2
+23326 1 2
+23327 1 2
+23328 1 2
+23329 1 2
+23330 1 2
+23331 1 2
+23332 1 2
+23333 1 2
+23334 1 2
+23335 1 2
+23336 1 2
+23337 1 2
+23338 1 2
+23339 1 2
+23340 1 2
+23341 1 2
+23342 1 2
+23343 1 2
+23344 1 2
+23345 1 2
+23346 1 2
+23347 1 2
+23348 1 2
+23349 1 2
+23350 1 2
+23351 1 2
+23352 1 2
+23353 1 2
+23354 1 2
+23355 1 2
+23356 1 2
+23357 1 2
+23358 1 2
+23359 1 2
+23360 1 2
+23361 1 2
+23362 1 2
+23363 1 2
+23364 1 2
+23365 1 2
+23366 1 2
+23367 1 2
+23368 1 2
+23369 1 2
+23370 1 2
+23371 1 2
+23372 1 2
+23373 1 2
+23374 1 2
+23375 1 2
+23376 1 2
+23377 1 2
+23378 1 2
+23379 1 2
+23380 1 2
+23381 1 2
+23382 1 2
+23383 1 2
+23384 1 2
+23385 1 2
+23386 1 2
+23387 1 2
+23388 1 2
+23389 1 2
+23390 1 2
+23391 1 2
+23392 1 2
+23393 1 2
+23394 1 2
+23395 1 2
+23396 1 2
+23397 1 2
+23398 1 2
+23399 1 2
+23400 1 2
+23401 1 2
+23402 1 2
+23403 1 2
+23404 1 2
+23405 1 2
+23406 1 2
+23407 1 2
+23408 1 2
+23409 1 2
+23410 1 2
+23411 1 2
+23412 1 2
+23413 1 2
+23414 1 2
+23415 1 2
+23416 1 2
+23417 1 2
+23418 1 2
+23419 1 2
+23420 1 2
+23421 1 2
+23422 1 2
+23423 1 2
+23424 1 2
+23425 1 2
+23426 1 2
+23427 1 2
+23428 1 2
+23429 1 2
+23430 1 2
+23431 1 2
+23432 1 2
+23433 1 2
+23434 1 2
+23435 1 2
+23436 1 2
+23437 1 2
+23438 1 2
+23439 1 2
+23440 1 2
+23441 1 2
+23442 1 2
+23443 1 2
+23444 1 2
+23445 1 2
+23446 1 2
+23447 1 2
+23448 1 2
+23449 1 2
+23450 1 2
+23451 1 2
+23452 1 2
+23453 1 2
+23454 1 2
+23455 1 2
+23456 1 2
+23457 1 2
+23458 1 2
+23459 1 2
+23460 1 2
+23461 1 2
+23462 1 2
+23463 1 2
+23464 1 2
+23465 1 2
+23466 1 2
+23467 1 2
+23468 1 2
+23469 1 2
+23470 1 2
+23471 1 2
+23472 1 2
+23473 1 2
+23474 1 2
+23475 1 2
+23476 1 2
+23477 1 2
+23478 1 2
+23479 1 2
+23480 1 2
+23481 1 2
+23482 1 2
+23483 1 2
+23484 1 2
+23485 1 2
+23486 1 2
+23487 1 2
+23488 1 2
+23489 1 2
+23490 1 2
+23491 1 2
+23492 1 2
+23493 1 2
+23494 1 2
+23495 1 2
+23496 1 2
+23497 1 2
+23498 1 2
+23499 1 2
+23500 1 2
+23501 1 2
+23502 1 2
+23503 1 2
+23504 1 2
+23505 1 2
+23506 1 2
+23507 1 2
+23508 1 2
+23509 1 2
+23510 1 2
+23511 1 2
+23512 1 2
+23513 1 2
+23514 1 2
+23515 1 2
+23516 1 2
+23517 1 2
+23518 1 2
+23519 1 2
+23520 1 2
+23521 1 2
+23522 1 2
+23523 1 2
+23524 1 2
+23525 1 2
+23526 1 2
+23527 1 2
+23528 1 2
+23529 1 2
+23530 1 2
+23531 1 2
+23532 1 2
+23533 1 2
+23534 1 2
+23535 1 2
+23536 1 2
+23537 1 2
+23538 1 2
+23539 1 2
+23540 1 2
+23541 1 2
+23542 1 2
+23543 1 2
+23544 1 2
+23545 1 2
+23546 1 2
+23547 1 2
+23548 1 2
+23549 1 2
+23550 1 2
+23551 1 2
+23552 1 2
+23553 1 2
+23554 1 2
+23555 1 2
+23556 1 2
+23557 1 2
+23558 1 2
+23559 1 2
+23560 1 2
+23561 1 2
+23562 1 2
+23563 1 2
+23564 1 2
+23565 1 2
+23566 1 2
+23567 1 2
+23568 1 2
+23569 1 2
+23570 1 2
+23571 1 2
+23572 1 2
+23573 1 2
+23574 1 2
+23575 1 2
+23576 1 2
+23577 1 2
+23578 1 2
+23579 1 2
+23580 1 2
+23581 1 2
+23582 1 2
+23583 1 2
+23584 1 2
+23585 1 2
+23586 1 2
+23587 1 2
+23588 1 2
+23589 1 2
+23590 1 2
+23591 1 2
+23592 1 2
+23593 1 2
+23594 1 2
+23595 1 2
+23596 1 2
+23597 1 2
+23598 1 2
+23599 1 2
+23600 1 2
+23601 1 2
+23602 1 2
+23603 1 2
+23604 1 2
+23605 1 2
+23606 1 2
+23607 1 2
+23608 1 2
+23609 1 2
+23610 1 2
+23611 1 2
+23612 1 2
+23613 1 2
+23614 1 2
+23615 1 2
+23616 1 2
+23617 1 2
+23618 1 2
+23619 1 2
+23620 1 2
+23621 1 2
+23622 1 2
+23623 1 2
+23624 1 2
+23625 1 2
+23626 1 2
+23627 1 2
+23628 1 2
+23629 1 2
+23630 1 2
+23631 1 2
+23632 1 2
+23633 1 2
+23634 1 2
+23635 1 2
+23636 1 2
+23637 1 2
+23638 1 2
+23639 1 2
+23640 1 2
+23641 1 2
+23642 1 2
+23643 1 2
+23644 1 2
+23645 1 2
+23646 1 2
+23647 1 2
+23648 1 2
+23649 1 2
+23650 1 2
+23651 1 2
+23652 1 2
+23653 1 2
+23654 1 2
+23655 1 2
+23656 1 2
+23657 1 2
+23658 1 2
+23659 1 2
+23660 1 2
+23661 1 2
+23662 1 2
+23663 1 2
+23664 1 2
+23665 1 2
+23666 1 2
+23667 1 2
+23668 1 2
+23669 1 2
+23670 1 2
+23671 1 2
+23672 1 2
+23673 1 2
+23674 1 2
+23675 1 2
+23676 1 2
+23677 1 2
+23678 1 2
+23679 1 2
+23680 1 2
+23681 1 2
+23682 1 2
+23683 1 2
+23684 1 2
+23685 1 2
+23686 1 2
+23687 1 2
+23688 1 2
+23689 1 2
+23690 1 2
+23691 1 2
+23692 1 2
+23693 1 2
+23694 1 2
+23695 1 2
+23696 1 2
+23697 1 2
+23698 1 2
+23699 1 2
+23700 1 2
+23701 1 2
+23702 1 2
+23703 1 2
+23704 1 2
+23705 1 2
+23706 1 2
+23707 1 2
+23708 1 2
+23709 1 2
+23710 1 2
+23711 1 2
+23712 1 2
+23713 1 2
+23714 1 2
+23715 1 2
+23716 1 2
+23717 1 2
+23718 1 2
+23719 1 2
+23720 1 2
+23721 1 2
+23722 1 2
+23723 1 2
+23724 1 2
+23725 1 2
+23726 1 2
+23727 1 2
+23728 1 2
+23729 1 2
+23730 1 2
+23731 1 2
+23732 1 2
+23733 1 2
+23734 1 2
+23735 1 2
+23736 1 2
+23737 1 2
+23738 1 2
+23739 1 2
+23740 1 2
+23741 1 2
+23742 1 2
+23743 1 2
+23744 1 2
+23745 1 2
+23746 1 2
+23747 1 2
+23748 1 2
+23749 1 2
+23750 1 2
+23751 1 2
+23752 1 2
+23753 1 2
+23754 1 2
+23755 1 2
+23756 1 2
+23757 1 2
+23758 1 2
+23759 1 2
+23760 1 2
+23761 1 2
+23762 1 2
+23763 1 2
+23764 1 2
+23765 1 2
+23766 1 2
+23767 1 2
+23768 1 2
+23769 1 2
+23770 1 2
+23771 1 2
+23772 1 2
+23773 1 2
+23774 1 2
+23775 1 2
+23776 1 2
+23777 1 2
+23778 1 2
+23779 1 2
+23780 1 2
+23781 1 2
+23782 1 2
+23783 1 2
+23784 1 2
+23785 1 2
+23786 1 2
+23787 1 2
+23788 1 2
+23789 1 2
+23790 1 2
+23791 1 2
+23792 1 2
+23793 1 2
+23794 1 2
+23795 1 2
+23796 1 2
+23797 1 2
+23798 1 2
+23799 1 2
+23800 1 2
+23801 1 2
+23802 1 2
+23803 1 2
+23804 1 2
+23805 1 2
+23806 1 2
+23807 1 2
+23808 1 2
+23809 1 2
+23810 1 2
+23811 1 2
+23812 1 2
+23813 1 2
+23814 1 2
+23815 1 2
+23816 1 2
+23817 1 2
+23818 1 2
+23819 1 2
+23820 1 2
+23821 1 2
+23822 1 2
+23823 1 2
+23824 1 2
+23825 1 2
+23826 1 2
+23827 1 2
+23828 1 2
+23829 1 2
+23830 1 2
+23831 1 2
+23832 1 2
+23833 1 2
+23834 1 2
+23835 1 2
+23836 1 2
+23837 1 2
+23838 1 2
+23839 1 2
+23840 1 2
+23841 1 2
+23842 1 2
+23843 1 2
+23844 1 2
+23845 1 2
+23846 1 2
+23847 1 2
+23848 1 2
+23849 1 2
+23850 1 2
+23851 1 2
+23852 1 2
+23853 1 2
+23854 1 2
+23855 1 2
+23856 1 2
+23857 1 2
+23858 1 2
+23859 1 2
+23860 1 2
+23861 1 2
+23862 1 2
+23863 1 2
+23864 1 2
+23865 1 2
+23866 1 2
+23867 1 2
+23868 1 2
+23869 1 2
+23870 1 2
+23871 1 2
+23872 1 2
+23873 1 2
+23874 1 2
+23875 1 2
+23876 1 2
+23877 1 2
+23878 1 2
+23879 1 2
+23880 1 2
+23881 1 2
+23882 1 2
+23883 1 2
+23884 1 2
+23885 1 2
+23886 1 2
+23887 1 2
+23888 1 2
+23889 1 2
+23890 1 2
+23891 1 2
+23892 1 2
+23893 1 2
+23894 1 2
+23895 1 2
+23896 1 2
+23897 1 2
+23898 1 2
+23899 1 2
+23900 1 2
+23901 1 2
+23902 1 2
+23903 1 2
+23904 1 2
+23905 1 2
+23906 1 2
+23907 1 2
+23908 1 2
+23909 1 2
+23910 1 2
+23911 1 2
+23912 1 2
+23913 1 2
+23914 1 2
+23915 1 2
+23916 1 2
+23917 1 2
+23918 1 2
+23919 1 2
+23920 1 2
+23921 1 2
+23922 1 2
+23923 1 2
+23924 1 2
+23925 1 2
+23926 1 2
+23927 1 2
+23928 1 2
+23929 1 2
+23930 1 2
+23931 1 2
+23932 1 2
+23933 1 2
+23934 1 2
+23935 1 2
+23936 1 2
+23937 1 2
+23938 1 2
+23939 1 2
+23940 1 2
+23941 1 2
+23942 1 2
+23943 1 2
+23944 1 2
+23945 1 2
+23946 1 2
+23947 1 2
+23948 1 2
+23949 1 2
+23950 1 2
+23951 1 2
+23952 1 2
+23953 1 2
+23954 1 2
+23955 1 2
+23956 1 2
+23957 1 2
+23958 1 2
+23959 1 2
+23960 1 2
+23961 1 2
+23962 1 2
+23963 1 2
+23964 1 2
+23965 1 2
+23966 1 2
+23967 1 2
+23968 1 2
+23969 1 2
+23970 1 2
+23971 1 2
+23972 1 2
+23973 1 2
+23974 1 2
+23975 1 2
+23976 1 2
+23977 1 2
+23978 1 2
+23979 1 2
+23980 1 2
+23981 1 2
+23982 1 2
+23983 1 2
+23984 1 2
+23985 1 2
+23986 1 2
+23987 1 2
+23988 1 2
+23989 1 2
+23990 1 2
+23991 1 2
+23992 1 2
+23993 1 2
+23994 1 2
+23995 1 2
+23996 1 2
+23997 1 2
+23998 1 2
+23999 1 2
+24000 1 2
+24001 1 2
+24002 1 2
+24003 1 2
+24004 1 2
+24005 1 2
+24006 1 2
+24007 1 2
+24008 1 2
+24009 1 2
+24010 1 2
+24011 1 2
+24012 1 2
+24013 1 2
+24014 1 2
+24015 1 2
+24016 1 2
+24017 1 2
+24018 1 2
+24019 1 2
+24020 1 2
+24021 1 2
+24022 1 2
+24023 1 2
+24024 1 2
+24025 1 2
+24026 1 2
+24027 1 2
+24028 1 2
+24029 1 2
+24030 1 2
+24031 1 2
+24032 1 2
+24033 1 2
+24034 1 2
+24035 1 2
+24036 1 2
+24037 1 2
+24038 1 2
+24039 1 2
+24040 1 2
+24041 1 2
+24042 1 2
+24043 1 2
+24044 1 2
+24045 1 2
+24046 1 2
+24047 1 2
+24048 1 2
+24049 1 2
+24050 1 2
+24051 1 2
+24052 1 2
+24053 1 2
+24054 1 2
+24055 1 2
+24056 1 2
+24057 1 2
+24058 1 2
+24059 1 2
+24060 1 2
+24061 1 2
+24062 1 2
+24063 1 2
+24064 1 2
+24065 1 2
+24066 1 2
+24067 1 2
+24068 1 2
+24069 1 2
+24070 1 2
+24071 1 2
+24072 1 2
+24073 1 2
+24074 1 2
+24075 1 2
+24076 1 2
+24077 1 2
+24078 1 2
+24079 1 2
+24080 1 2
+24081 1 2
+24082 1 2
+24083 1 2
+24084 1 2
+24085 1 2
+24086 1 2
+24087 1 2
+24088 1 2
+24089 1 2
+24090 1 2
+24091 1 2
+24092 1 2
+24093 1 2
+24094 1 2
+24095 1 2
+24096 1 2
+24097 1 2
+24098 1 2
+24099 1 2
+24100 1 2
+24101 1 2
+24102 1 2
+24103 1 2
+24104 1 2
+24105 1 2
+24106 1 2
+24107 1 2
+24108 1 2
+24109 1 2
+24110 1 2
+24111 1 2
+24112 1 2
+24113 1 2
+24114 1 2
+24115 1 2
+24116 1 2
+24117 1 2
+24118 1 2
+24119 1 2
+24120 1 2
+24121 1 2
+24122 1 2
+24123 1 2
+24124 1 2
+24125 1 2
+24126 1 2
+24127 1 2
+24128 1 2
+24129 1 2
+24130 1 2
+24131 1 2
+24132 1 2
+24133 1 2
+24134 1 2
+24135 1 2
+24136 1 2
+24137 1 2
+24138 1 2
+24139 1 2
+24140 1 2
+24141 1 2
+24142 1 2
+24143 1 2
+24144 1 2
+24145 1 2
+24146 1 2
+24147 1 2
+24148 1 2
+24149 1 2
+24150 1 2
+24151 1 2
+24152 1 2
+24153 1 2
+24154 1 2
+24155 1 2
+24156 1 2
+24157 1 2
+24158 1 2
+24159 1 2
+24160 1 2
+24161 1 2
+24162 1 2
+24163 1 2
+24164 1 2
+24165 1 2
+24166 1 2
+24167 1 2
+24168 1 2
+24169 1 2
+24170 1 2
+24171 1 2
+24172 1 2
+24173 1 2
+24174 1 2
+24175 1 2
+24176 1 2
+24177 1 2
+24178 1 2
+24179 1 2
+24180 1 2
+24181 1 2
+24182 1 2
+24183 1 2
+24184 1 2
+24185 1 2
+24186 1 2
+24187 1 2
+24188 1 2
+24189 1 2
+24190 1 2
+24191 1 2
+24192 1 2
+24193 1 2
+24194 1 2
+24195 1 2
+24196 1 2
+24197 1 2
+24198 1 2
+24199 1 2
+24200 1 2
+24201 1 2
+24202 1 2
+24203 1 2
+24204 1 2
+24205 1 2
+24206 1 2
+24207 1 2
+24208 1 2
+24209 1 2
+24210 1 2
+24211 1 2
+24212 1 2
+24213 1 2
+24214 1 2
+24215 1 2
+24216 1 2
+24217 1 2
+24218 1 2
+24219 1 2
+24220 1 2
+24221 1 2
+24222 1 2
+24223 1 2
+24224 1 2
+24225 1 2
+24226 1 2
+24227 1 2
+24228 1 2
+24229 1 2
+24230 1 2
+24231 1 2
+24232 1 2
+24233 1 2
+24234 1 2
+24235 1 2
+24236 1 2
+24237 1 2
+24238 1 2
+24239 1 2
+24240 1 2
+24241 1 2
+24242 1 2
+24243 1 2
+24244 1 2
+24245 1 2
+24246 1 2
+24247 1 2
+24248 1 2
+24249 1 2
+24250 1 2
+24251 1 2
+24252 1 2
+24253 1 2
+24254 1 2
+24255 1 2
+24256 1 2
+24257 1 2
+24258 1 2
+24259 1 2
+24260 1 2
+24261 1 2
+24262 1 2
+24263 1 2
+24264 1 2
+24265 1 2
+24266 1 2
+24267 1 2
+24268 1 2
+24269 1 2
+24270 1 2
+24271 1 2
+24272 1 2
+24273 1 2
+24274 1 2
+24275 1 2
+24276 1 2
+24277 1 2
+24278 1 2
+24279 1 2
+24280 1 2
+24281 1 2
+24282 1 2
+24283 1 2
+24284 1 2
+24285 1 2
+24286 1 2
+24287 1 2
+24288 1 2
+24289 1 2
+24290 1 2
+24291 1 2
+24292 1 2
+24293 1 2
+24294 1 2
+24295 1 2
+24296 1 2
+24297 1 2
+24298 1 2
+24299 1 2
+24300 1 2
+24301 1 2
+24302 1 2
+24303 1 2
+24304 1 2
+24305 1 2
+24306 1 2
+24307 1 2
+24308 1 2
+24309 1 2
+24310 1 2
+24311 1 2
+24312 1 2
+24313 1 2
+24314 1 2
+24315 1 2
+24316 1 2
+24317 1 2
+24318 1 2
+24319 1 2
+24320 1 2
+24321 1 2
+24322 1 2
+24323 1 2
+24324 1 2
+24325 1 2
+24326 1 2
+24327 1 2
+24328 1 2
+24329 1 2
+24330 1 2
+24331 1 2
+24332 1 2
+24333 1 2
+24334 1 2
+24335 1 2
+24336 1 2
+24337 1 2
+24338 1 2
+24339 1 2
+24340 1 2
+24341 1 2
+24342 1 2
+24343 1 2
+24344 1 2
+24345 1 2
+24346 1 2
+24347 1 2
+24348 1 2
+24349 1 2
+24350 1 2
+24351 1 2
+24352 1 2
+24353 1 2
+24354 1 2
+24355 1 2
+24356 1 2
+24357 1 2
+24358 1 2
+24359 1 2
+24360 1 2
+24361 1 2
+24362 1 2
+24363 1 2
+24364 1 2
+24365 1 2
+24366 1 2
+24367 1 2
+24368 1 2
+24369 1 2
+24370 1 2
+24371 1 2
+24372 1 2
+24373 1 2
+24374 1 2
+24375 1 2
+24376 1 2
+24377 1 2
+24378 1 2
+24379 1 2
+24380 1 2
+24381 1 2
+24382 1 2
+24383 1 2
+24384 1 2
+24385 1 2
+24386 1 2
+24387 1 2
+24388 1 2
+24389 1 2
+24390 1 2
+24391 1 2
+24392 1 2
+24393 1 2
+24394 1 2
+24395 1 2
+24396 1 2
+24397 1 2
+24398 1 2
+24399 1 2
+24400 1 2
+24401 1 2
+24402 1 2
+24403 1 2
+24404 1 2
+24405 1 2
+24406 1 2
+24407 1 2
+24408 1 2
+24409 1 2
+24410 1 2
+24411 1 2
+24412 1 2
+24413 1 2
+24414 1 2
+24415 1 2
+24416 1 2
+24417 1 2
+24418 1 2
+24419 1 2
+24420 1 2
+24421 1 2
+24422 1 2
+24423 1 2
+24424 1 2
+24425 1 2
+24426 1 2
+24427 1 2
+24428 1 2
+24429 1 2
+24430 1 2
+24431 1 2
+24432 1 2
+24433 1 2
+24434 1 2
+24435 1 2
+24436 1 2
+24437 1 2
+24438 1 2
+24439 1 2
+24440 1 2
+24441 1 2
+24442 1 2
+24443 1 2
+24444 1 2
+24445 1 2
+24446 1 2
+24447 1 2
+24448 1 2
+24449 1 2
+24450 1 2
+24451 1 2
+24452 1 2
+24453 1 2
+24454 1 2
+24455 1 2
+24456 1 2
+24457 1 2
+24458 1 2
+24459 1 2
+24460 1 2
+24461 1 2
+24462 1 2
+24463 1 2
+24464 1 2
+24465 1 2
+24466 1 2
+24467 1 2
+24468 1 2
+24469 1 2
+24470 1 2
+24471 1 2
+24472 1 2
+24473 1 2
+24474 1 2
+24475 1 2
+24476 1 2
+24477 1 2
+24478 1 2
+24479 1 2
+24480 1 2
+24481 1 2
+24482 1 2
+24483 1 2
+24484 1 2
+24485 1 2
+24486 1 2
+24487 1 2
+24488 1 2
+24489 1 2
+24490 1 2
+24491 1 2
+24492 1 2
+24493 1 2
+24494 1 2
+24495 1 2
+24496 1 2
+24497 1 2
+24498 1 2
+24499 1 2
+24500 1 2
+24501 1 2
+24502 1 2
+24503 1 2
+24504 1 2
+24505 1 2
+24506 1 2
+24507 1 2
+24508 1 2
+24509 1 2
+24510 1 2
+24511 1 2
+24512 1 2
+24513 1 2
+24514 1 2
+24515 1 2
+24516 1 2
+24517 1 2
+24518 1 2
+24519 1 2
+24520 1 2
+24521 1 2
+24522 1 2
+24523 1 2
+24524 1 2
+24525 1 2
+24526 1 2
+24527 1 2
+24528 1 2
+24529 1 2
+24530 1 2
+24531 1 2
+24532 1 2
+24533 1 2
+24534 1 2
+24535 1 2
+24536 1 2
+24537 1 2
+24538 1 2
+24539 1 2
+24540 1 2
+24541 1 2
+24542 1 2
+24543 1 2
+24544 1 2
+24545 1 2
+24546 1 2
+24547 1 2
+24548 1 2
+24549 1 2
+24550 1 2
+24551 1 2
+24552 1 2
+24553 1 2
+24554 1 2
+24555 1 2
+24556 1 2
+24557 1 2
+24558 1 2
+24559 1 2
+24560 1 2
+24561 1 2
+24562 1 2
+24563 1 2
+24564 1 2
+24565 1 2
+24566 1 2
+24567 1 2
+24568 1 2
+24569 1 2
+24570 1 2
+24571 1 2
+24572 1 2
+24573 1 2
+24574 1 2
+24575 1 2
+24576 1 2
+24577 1 2
+24578 1 2
+24579 1 2
+24580 1 2
+24581 1 2
+24582 1 2
+24583 1 2
+24584 1 2
+24585 1 2
+24586 1 2
+24587 1 2
+24588 1 2
+24589 1 2
+24590 1 2
+24591 1 2
+24592 1 2
+24593 1 2
+24594 1 2
+24595 1 2
+24596 1 2
+24597 1 2
+24598 1 2
+24599 1 2
+24600 1 2
+24601 1 2
+24602 1 2
+24603 1 2
+24604 1 2
+24605 1 2
+24606 1 2
+24607 1 2
+24608 1 2
+24609 1 2
+24610 1 2
+24611 1 2
+24612 1 2
+24613 1 2
+24614 1 2
+24615 1 2
+24616 1 2
+24617 1 2
+24618 1 2
+24619 1 2
+24620 1 2
+24621 1 2
+24622 1 2
+24623 1 2
+24624 1 2
+24625 1 2
+24626 1 2
+24627 1 2
+24628 1 2
+24629 1 2
+24630 1 2
+24631 1 2
+24632 1 2
+24633 1 2
+24634 1 2
+24635 1 2
+24636 1 2
+24637 1 2
+24638 1 2
+24639 1 2
+24640 1 2
+24641 1 2
+24642 1 2
+24643 1 2
+24644 1 2
+24645 1 2
+24646 1 2
+24647 1 2
+24648 1 2
+24649 1 2
+24650 1 2
+24651 1 2
+24652 1 2
+24653 1 2
+24654 1 2
+24655 1 2
+24656 1 2
+24657 1 2
+24658 1 2
+24659 1 2
+24660 1 2
+24661 1 2
+24662 1 2
+24663 1 2
+24664 1 2
+24665 1 2
+24666 1 2
+24667 1 2
+24668 1 2
+24669 1 2
+24670 1 2
+24671 1 2
+24672 1 2
+24673 1 2
+24674 1 2
+24675 1 2
+24676 1 2
+24677 1 2
+24678 1 2
+24679 1 2
+24680 1 2
+24681 1 2
+24682 1 2
+24683 1 2
+24684 1 2
+24685 1 2
+24686 1 2
+24687 1 2
+24688 1 2
+24689 1 2
+24690 1 2
+24691 1 2
+24692 1 2
+24693 1 2
+24694 1 2
+24695 1 2
+24696 1 2
+24697 1 2
+24698 1 2
+24699 1 2
+24700 1 2
+24701 1 2
+24702 1 2
+24703 1 2
+24704 1 2
+24705 1 2
+24706 1 2
+24707 1 2
+24708 1 2
+24709 1 2
+24710 1 2
+24711 1 2
+24712 1 2
+24713 1 2
+24714 1 2
+24715 1 2
+24716 1 2
+24717 1 2
+24718 1 2
+24719 1 2
+24720 1 2
+24721 1 2
+24722 1 2
+24723 1 2
+24724 1 2
+24725 1 2
+24726 1 2
+24727 1 2
+24728 1 2
+24729 1 2
+24730 1 2
+24731 1 2
+24732 1 2
+24733 1 2
+24734 1 2
+24735 1 2
+24736 1 2
+24737 1 2
+24738 1 2
+24739 1 2
+24740 1 2
+24741 1 2
+24742 1 2
+24743 1 2
+24744 1 2
+24745 1 2
+24746 1 2
+24747 1 2
+24748 1 2
+24749 1 2
+24750 1 2
+24751 1 2
+24752 1 2
+24753 1 2
+24754 1 2
+24755 1 2
+24756 1 2
+24757 1 2
+24758 1 2
+24759 1 2
+24760 1 2
+24761 1 2
+24762 1 2
+24763 1 2
+24764 1 2
+24765 1 2
+24766 1 2
+24767 1 2
+24768 1 2
+24769 1 2
+24770 1 2
+24771 1 2
+24772 1 2
+24773 1 2
+24774 1 2
+24775 1 2
+24776 1 2
+24777 1 2
+24778 1 2
+24779 1 2
+24780 1 2
+24781 1 2
+24782 1 2
+24783 1 2
+24784 1 2
+24785 1 2
+24786 1 2
+24787 1 2
+24788 1 2
+24789 1 2
+24790 1 2
+24791 1 2
+24792 1 2
+24793 1 2
+24794 1 2
+24795 1 2
+24796 1 2
+24797 1 2
+24798 1 2
+24799 1 2
+24800 1 2
+24801 1 2
+24802 1 2
+24803 1 2
+24804 1 2
+24805 1 2
+24806 1 2
+24807 1 2
+24808 1 2
+24809 1 2
+24810 1 2
+24811 1 2
+24812 1 2
+24813 1 2
+24814 1 2
+24815 1 2
+24816 1 2
+24817 1 2
+24818 1 2
+24819 1 2
+24820 1 2
+24821 1 2
+24822 1 2
+24823 1 2
+24824 1 2
+24825 1 2
+24826 1 2
+24827 1 2
+24828 1 2
+24829 1 2
+24830 1 2
+24831 1 2
+24832 1 2
+24833 1 2
+24834 1 2
+24835 1 2
+24836 1 2
+24837 1 2
+24838 1 2
+24839 1 2
+24840 1 2
+24841 1 2
+24842 1 2
+24843 1 2
+24844 1 2
+24845 1 2
+24846 1 2
+24847 1 2
+24848 1 2
+24849 1 2
+24850 1 2
+24851 1 2
+24852 1 2
+24853 1 2
+24854 1 2
+24855 1 2
+24856 1 2
+24857 1 2
+24858 1 2
+24859 1 2
+24860 1 2
+24861 1 2
+24862 1 2
+24863 1 2
+24864 1 2
+24865 1 2
+24866 1 2
+24867 1 2
+24868 1 2
+24869 1 2
+24870 1 2
+24871 1 2
+24872 1 2
+24873 1 2
+24874 1 2
+24875 1 2
+24876 1 2
+24877 1 2
+24878 1 2
+24879 1 2
+24880 1 2
+24881 1 2
+24882 1 2
+24883 1 2
+24884 1 2
+24885 1 2
+24886 1 2
+24887 1 2
+24888 1 2
+24889 1 2
+24890 1 2
+24891 1 2
+24892 1 2
+24893 1 2
+24894 1 2
+24895 1 2
+24896 1 2
+24897 1 2
+24898 1 2
+24899 1 2
+24900 1 2
+24901 1 2
+24902 1 2
+24903 1 2
+24904 1 2
+24905 1 2
+24906 1 2
+24907 1 2
+24908 1 2
+24909 1 2
+24910 1 2
+24911 1 2
+24912 1 2
+24913 1 2
+24914 1 2
+24915 1 2
+24916 1 2
+24917 1 2
+24918 1 2
+24919 1 2
+24920 1 2
+24921 1 2
+24922 1 2
+24923 1 2
+24924 1 2
+24925 1 2
+24926 1 2
+24927 1 2
+24928 1 2
+24929 1 2
+24930 1 2
+24931 1 2
+24932 1 2
+24933 1 2
+24934 1 2
+24935 1 2
+24936 1 2
+24937 1 2
+24938 1 2
+24939 1 2
+24940 1 2
+24941 1 2
+24942 1 2
+24943 1 2
+24944 1 2
+24945 1 2
+24946 1 2
+24947 1 2
+24948 1 2
+24949 1 2
+24950 1 2
+24951 1 2
+24952 1 2
+24953 1 2
+24954 1 2
+24955 1 2
+24956 1 2
+24957 1 2
+24958 1 2
+24959 1 2
+24960 1 2
+24961 1 2
+24962 1 2
+24963 1 2
+24964 1 2
+24965 1 2
+24966 1 2
+24967 1 2
+24968 1 2
+24969 1 2
+24970 1 2
+24971 1 2
+24972 1 2
+24973 1 2
+24974 1 2
+24975 1 2
+24976 1 2
+24977 1 2
+24978 1 2
+24979 1 2
+24980 1 2
+24981 1 2
+24982 1 2
+24983 1 2
+24984 1 2
+24985 1 2
+24986 1 2
+24987 1 2
+24988 1 2
+24989 1 2
+24990 1 2
+24991 1 2
+24992 1 2
+24993 1 2
+24994 1 2
+24995 1 2
+24996 1 2
+24997 1 2
+24998 1 2
+24999 1 2
+25000 1 2
+25001 1 2
+25002 1 2
+25003 1 2
+25004 1 2
+25005 1 2
+25006 1 2
+25007 1 2
+25008 1 2
+25009 1 2
+25010 1 2
+25011 1 2
+25012 1 2
+25013 1 2
+25014 1 2
+25015 1 2
+25016 1 2
+25017 1 2
+25018 1 2
+25019 1 2
+25020 1 2
+25021 1 2
+25022 1 2
+25023 1 2
+25024 1 2
+25025 1 2
+25026 1 2
+25027 1 2
+25028 1 2
+25029 1 2
+25030 1 2
+25031 1 2
+25032 1 2
+25033 1 2
+25034 1 2
+25035 1 2
+25036 1 2
+25037 1 2
+25038 1 2
+25039 1 2
+25040 1 2
+25041 1 2
+25042 1 2
+25043 1 2
+25044 1 2
+25045 1 2
+25046 1 2
+25047 1 2
+25048 1 2
+25049 1 2
+25050 1 2
+25051 1 2
+25052 1 2
+25053 1 2
+25054 1 2
+25055 1 2
+25056 1 2
+25057 1 2
+25058 1 2
+25059 1 2
+25060 1 2
+25061 1 2
+25062 1 2
+25063 1 2
+25064 1 2
+25065 1 2
+25066 1 2
+25067 1 2
+25068 1 2
+25069 1 2
+25070 1 2
+25071 1 2
+25072 1 2
+25073 1 2
+25074 1 2
+25075 1 2
+25076 1 2
+25077 1 2
+25078 1 2
+25079 1 2
+25080 1 2
+25081 1 2
+25082 1 2
+25083 1 2
+25084 1 2
+25085 1 2
+25086 1 2
+25087 1 2
+25088 1 2
+25089 1 2
+25090 1 2
+25091 1 2
+25092 1 2
+25093 1 2
+25094 1 2
+25095 1 2
+25096 1 2
+25097 1 2
+25098 1 2
+25099 1 2
+25100 1 2
+25101 1 2
+25102 1 2
+25103 1 2
+25104 1 2
+25105 1 2
+25106 1 2
+25107 1 2
+25108 1 2
+25109 1 2
+25110 1 2
+25111 1 2
+25112 1 2
+25113 1 2
+25114 1 2
+25115 1 2
+25116 1 2
+25117 1 2
+25118 1 2
+25119 1 2
+25120 1 2
+25121 1 2
+25122 1 2
+25123 1 2
+25124 1 2
+25125 1 2
+25126 1 2
+25127 1 2
+25128 1 2
+25129 1 2
+25130 1 2
+25131 1 2
+25132 1 2
+25133 1 2
+25134 1 2
+25135 1 2
+25136 1 2
+25137 1 2
+25138 1 2
+25139 1 2
+25140 1 2
+25141 1 2
+25142 1 2
+25143 1 2
+25144 1 2
+25145 1 2
+25146 1 2
+25147 1 2
+25148 1 2
+25149 1 2
+25150 1 2
+25151 1 2
+25152 1 2
+25153 1 2
+25154 1 2
+25155 1 2
+25156 1 2
+25157 1 2
+25158 1 2
+25159 1 2
+25160 1 2
+25161 1 2
+25162 1 2
+25163 1 2
+25164 1 2
+25165 1 2
+25166 1 2
+25167 1 2
+25168 1 2
+25169 1 2
+25170 1 2
+25171 1 2
+25172 1 2
+25173 1 2
+25174 1 2
+25175 1 2
+25176 1 2
+25177 1 2
+25178 1 2
+25179 1 2
+25180 1 2
+25181 1 2
+25182 1 2
+25183 1 2
+25184 1 2
+25185 1 2
+25186 1 2
+25187 1 2
+25188 1 2
+25189 1 2
+25190 1 2
+25191 1 2
+25192 1 2
+25193 1 2
+25194 1 2
+25195 1 2
+25196 1 2
+25197 1 2
+25198 1 2
+25199 1 2
+25200 1 2
+25201 1 2
+25202 1 2
+25203 1 2
+25204 1 2
+25205 1 2
+25206 1 2
+25207 1 2
+25208 1 2
+25209 1 2
+25210 1 2
+25211 1 2
+25212 1 2
+25213 1 2
+25214 1 2
+25215 1 2
+25216 1 2
+25217 1 2
+25218 1 2
+25219 1 2
+25220 1 2
+25221 1 2
+25222 1 2
+25223 1 2
+25224 1 2
+25225 1 2
+25226 1 2
+25227 1 2
+25228 1 2
+25229 1 2
+25230 1 2
+25231 1 2
+25232 1 2
+25233 1 2
+25234 1 2
+25235 1 2
+25236 1 2
+25237 1 2
+25238 1 2
+25239 1 2
+25240 1 2
+25241 1 2
+25242 1 2
+25243 1 2
+25244 1 2
+25245 1 2
+25246 1 2
+25247 1 2
+25248 1 2
+25249 1 2
+25250 1 2
+25251 1 2
+25252 1 2
+25253 1 2
+25254 1 2
+25255 1 2
+25256 1 2
+25257 1 2
+25258 1 2
+25259 1 2
+25260 1 2
+25261 1 2
+25262 1 2
+25263 1 2
+25264 1 2
+25265 1 2
+25266 1 2
+25267 1 2
+25268 1 2
+25269 1 2
+25270 1 2
+25271 1 2
+25272 1 2
+25273 1 2
+25274 1 2
+25275 1 2
+25276 1 2
+25277 1 2
+25278 1 2
+25279 1 2
+25280 1 2
+25281 1 2
+25282 1 2
+25283 1 2
+25284 1 2
+25285 1 2
+25286 1 2
+25287 1 2
+25288 1 2
+25289 1 2
+25290 1 2
+25291 1 2
+25292 1 2
+25293 1 2
+25294 1 2
+25295 1 2
+25296 1 2
+25297 1 2
+25298 1 2
+25299 1 2
+25300 1 2
+25301 1 2
+25302 1 2
+25303 1 2
+25304 1 2
+25305 1 2
+25306 1 2
+25307 1 2
+25308 1 2
+25309 1 2
+25310 1 2
+25311 1 2
+25312 1 2
+25313 1 2
+25314 1 2
+25315 1 2
+25316 1 2
+25317 1 2
+25318 1 2
+25319 1 2
+25320 1 2
+25321 1 2
+25322 1 2
+25323 1 2
+25324 1 2
+25325 1 2
+25326 1 2
+25327 1 2
+25328 1 2
+25329 1 2
+25330 1 2
+25331 1 2
+25332 1 2
+25333 1 2
+25334 1 2
+25335 1 2
+25336 1 2
+25337 1 2
+25338 1 2
+25339 1 2
+25340 1 2
+25341 1 2
+25342 1 2
+25343 1 2
+25344 1 2
+25345 1 2
+25346 1 2
+25347 1 2
+25348 1 2
+25349 1 2
+25350 1 2
+25351 1 2
+25352 1 2
+25353 1 2
+25354 1 2
+25355 1 2
+25356 1 2
+25357 1 2
+25358 1 2
+25359 1 2
+25360 1 2
+25361 1 2
+25362 1 2
+25363 1 2
+25364 1 2
+25365 1 2
+25366 1 2
+25367 1 2
+25368 1 2
+25369 1 2
+25370 1 2
+25371 1 2
+25372 1 2
+25373 1 2
+25374 1 2
+25375 1 2
+25376 1 2
+25377 1 2
+25378 1 2
+25379 1 2
+25380 1 2
+25381 1 2
+25382 1 2
+25383 1 2
+25384 1 2
+25385 1 2
+25386 1 2
+25387 1 2
+25388 1 2
+25389 1 2
+25390 1 2
+25391 1 2
+25392 1 2
+25393 1 2
+25394 1 2
+25395 1 2
+25396 1 2
+25397 1 2
+25398 1 2
+25399 1 2
+25400 1 2
+25401 1 2
+25402 1 2
+25403 1 2
+25404 1 2
+25405 1 2
+25406 1 2
+25407 1 2
+25408 1 2
+25409 1 2
+25410 1 2
+25411 1 2
+25412 1 2
+25413 1 2
+25414 1 2
+25415 1 2
+25416 1 2
+25417 1 2
+25418 1 2
+25419 1 2
+25420 1 2
+25421 1 2
+25422 1 2
+25423 1 2
+25424 1 2
+25425 1 2
+25426 1 2
+25427 1 2
+25428 1 2
+25429 1 2
+25430 1 2
+25431 1 2
+25432 1 2
+25433 1 2
+25434 1 2
+25435 1 2
+25436 1 2
+25437 1 2
+25438 1 2
+25439 1 2
+25440 1 2
+25441 1 2
+25442 1 2
+25443 1 2
+25444 1 2
+25445 1 2
+25446 1 2
+25447 1 2
+25448 1 2
+25449 1 2
+25450 1 2
+25451 1 2
+25452 1 2
+25453 1 2
+25454 1 2
+25455 1 2
+25456 1 2
+25457 1 2
+25458 1 2
+25459 1 2
+25460 1 2
+25461 1 2
+25462 1 2
+25463 1 2
+25464 1 2
+25465 1 2
+25466 1 2
+25467 1 2
+25468 1 2
+25469 1 2
+25470 1 2
+25471 1 2
+25472 1 2
+25473 1 2
+25474 1 2
+25475 1 2
+25476 1 2
+25477 1 2
+25478 1 2
+25479 1 2
+25480 1 2
+25481 1 2
+25482 1 2
+25483 1 2
+25484 1 2
+25485 1 2
+25486 1 2
+25487 1 2
+25488 1 2
+25489 1 2
+25490 1 2
+25491 1 2
+25492 1 2
+25493 1 2
+25494 1 2
+25495 1 2
+25496 1 2
+25497 1 2
+25498 1 2
+25499 1 2
+25500 1 2
+25501 1 2
+25502 1 2
+25503 1 2
+25504 1 2
+25505 1 2
+25506 1 2
+25507 1 2
+25508 1 2
+25509 1 2
+25510 1 2
+25511 1 2
+25512 1 2
+25513 1 2
+25514 1 2
+25515 1 2
+25516 1 2
+25517 1 2
+25518 1 2
+25519 1 2
+25520 1 2
+25521 1 2
+25522 1 2
+25523 1 2
+25524 1 2
+25525 1 2
+25526 1 2
+25527 1 2
+25528 1 2
+25529 1 2
+25530 1 2
+25531 1 2
+25532 1 2
+25533 1 2
+25534 1 2
+25535 1 2
+25536 1 2
+25537 1 2
+25538 1 2
+25539 1 2
+25540 1 2
+25541 1 2
+25542 1 2
+25543 1 2
+25544 1 2
+25545 1 2
+25546 1 2
+25547 1 2
+25548 1 2
+25549 1 2
+25550 1 2
+25551 1 2
+25552 1 2
+25553 1 2
+25554 1 2
+25555 1 2
+25556 1 2
+25557 1 2
+25558 1 2
+25559 1 2
+25560 1 2
+25561 1 2
+25562 1 2
+25563 1 2
+25564 1 2
+25565 1 2
+25566 1 2
+25567 1 2
+25568 1 2
+25569 1 2
+25570 1 2
+25571 1 2
+25572 1 2
+25573 1 2
+25574 1 2
+25575 1 2
+25576 1 2
+25577 1 2
+25578 1 2
+25579 1 2
+25580 1 2
+25581 1 2
+25582 1 2
+25583 1 2
+25584 1 2
+25585 1 2
+25586 1 2
+25587 1 2
+25588 1 2
+25589 1 2
+25590 1 2
+25591 1 2
+25592 1 2
+25593 1 2
+25594 1 2
+25595 1 2
+25596 1 2
+25597 1 2
+25598 1 2
+25599 1 2
+25600 1 2
+25601 1 2
+25602 1 2
+25603 1 2
+25604 1 2
+25605 1 2
+25606 1 2
+25607 1 2
+25608 1 2
+25609 1 2
+25610 1 2
+25611 1 2
+25612 1 2
+25613 1 2
+25614 1 2
+25615 1 2
+25616 1 2
+25617 1 2
+25618 1 2
+25619 1 2
+25620 1 2
+25621 1 2
+25622 1 2
+25623 1 2
+25624 1 2
+25625 1 2
+25626 1 2
+25627 1 2
+25628 1 2
+25629 1 2
+25630 1 2
+25631 1 2
+25632 1 2
+25633 1 2
+25634 1 2
+25635 1 2
+25636 1 2
+25637 1 2
+25638 1 2
+25639 1 2
+25640 1 2
+25641 1 2
+25642 1 2
+25643 1 2
+25644 1 2
+25645 1 2
+25646 1 2
+25647 1 2
+25648 1 2
+25649 1 2
+25650 1 2
+25651 1 2
+25652 1 2
+25653 1 2
+25654 1 2
+25655 1 2
+25656 1 2
+25657 1 2
+25658 1 2
+25659 1 2
+25660 1 2
+25661 1 2
+25662 1 2
+25663 1 2
+25664 1 2
+25665 1 2
+25666 1 2
+25667 1 2
+25668 1 2
+25669 1 2
+25670 1 2
+25671 1 2
+25672 1 2
+25673 1 2
+25674 1 2
+25675 1 2
+25676 1 2
+25677 1 2
+25678 1 2
+25679 1 2
+25680 1 2
+25681 1 2
+25682 1 2
+25683 1 2
+25684 1 2
+25685 1 2
+25686 1 2
+25687 1 2
+25688 1 2
+25689 1 2
+25690 1 2
+25691 1 2
+25692 1 2
+25693 1 2
+25694 1 2
+25695 1 2
+25696 1 2
+25697 1 2
+25698 1 2
+25699 1 2
+25700 1 2
+25701 1 2
+25702 1 2
+25703 1 2
+25704 1 2
+25705 1 2
+25706 1 2
+25707 1 2
+25708 1 2
+25709 1 2
+25710 1 2
+25711 1 2
+25712 1 2
+25713 1 2
+25714 1 2
+25715 1 2
+25716 1 2
+25717 1 2
+25718 1 2
+25719 1 2
+25720 1 2
+25721 1 2
+25722 1 2
+25723 1 2
+25724 1 2
+25725 1 2
+25726 1 2
+25727 1 2
+25728 1 2
+25729 1 2
+25730 1 2
+25731 1 2
+25732 1 2
+25733 1 2
+25734 1 2
+25735 1 2
+25736 1 2
+25737 1 2
+25738 1 2
+25739 1 2
+25740 1 2
+25741 1 2
+25742 1 2
+25743 1 2
+25744 1 2
+25745 1 2
+25746 1 2
+25747 1 2
+25748 1 2
+25749 1 2
+25750 1 2
+25751 1 2
+25752 1 2
+25753 1 2
+25754 1 2
+25755 1 2
+25756 1 2
+25757 1 2
+25758 1 2
+25759 1 2
+25760 1 2
+25761 1 2
+25762 1 2
+25763 1 2
+25764 1 2
+25765 1 2
+25766 1 2
+25767 1 2
+25768 1 2
+25769 1 2
+25770 1 2
+25771 1 2
+25772 1 2
+25773 1 2
+25774 1 2
+25775 1 2
+25776 1 2
+25777 1 2
+25778 1 2
+25779 1 2
+25780 1 2
+25781 1 2
+25782 1 2
+25783 1 2
+25784 1 2
+25785 1 2
+25786 1 2
+25787 1 2
+25788 1 2
+25789 1 2
+25790 1 2
+25791 1 2
+25792 1 2
+25793 1 2
+25794 1 2
+25795 1 2
+25796 1 2
+25797 1 2
+25798 1 2
+25799 1 2
+25800 1 2
+25801 1 2
+25802 1 2
+25803 1 2
+25804 1 2
+25805 1 2
+25806 1 2
+25807 1 2
+25808 1 2
+25809 1 2
+25810 1 2
+25811 1 2
+25812 1 2
+25813 1 2
+25814 1 2
+25815 1 2
+25816 1 2
+25817 1 2
+25818 1 2
+25819 1 2
+25820 1 2
+25821 1 2
+25822 1 2
+25823 1 2
+25824 1 2
+25825 1 2
+25826 1 2
+25827 1 2
+25828 1 2
+25829 1 2
+25830 1 2
+25831 1 2
+25832 1 2
+25833 1 2
+25834 1 2
+25835 1 2
+25836 1 2
+25837 1 2
+25838 1 2
+25839 1 2
+25840 1 2
+25841 1 2
+25842 1 2
+25843 1 2
+25844 1 2
+25845 1 2
+25846 1 2
+25847 1 2
+25848 1 2
+25849 1 2
+25850 1 2
+25851 1 2
+25852 1 2
+25853 1 2
+25854 1 2
+25855 1 2
+25856 1 2
+25857 1 2
+25858 1 2
+25859 1 2
+25860 1 2
+25861 1 2
+25862 1 2
+25863 1 2
+25864 1 2
+25865 1 2
+25866 1 2
+25867 1 2
+25868 1 2
+25869 1 2
+25870 1 2
+25871 1 2
+25872 1 2
+25873 1 2
+25874 1 2
+25875 1 2
+25876 1 2
+25877 1 2
+25878 1 2
+25879 1 2
+25880 1 2
+25881 1 2
+25882 1 2
+25883 1 2
+25884 1 2
+25885 1 2
+25886 1 2
+25887 1 2
+25888 1 2
+25889 1 2
+25890 1 2
+25891 1 2
+25892 1 2
+25893 1 2
+25894 1 2
+25895 1 2
+25896 1 2
+25897 1 2
+25898 1 2
+25899 1 2
+25900 1 2
+25901 1 2
+25902 1 2
+25903 1 2
+25904 1 2
+25905 1 2
+25906 1 2
+25907 1 2
+25908 1 2
+25909 1 2
+25910 1 2
+25911 1 2
+25912 1 2
+25913 1 2
+25914 1 2
+25915 1 2
+25916 1 2
+25917 1 2
+25918 1 2
+25919 1 2
+25920 1 2
+25921 1 2
+25922 1 2
+25923 1 2
+25924 1 2
+25925 1 2
+25926 1 2
+25927 1 2
+25928 1 2
+25929 1 2
+25930 1 2
+25931 1 2
+25932 1 2
+25933 1 2
+25934 1 2
+25935 1 2
+25936 1 2
+25937 1 2
+25938 1 2
+25939 1 2
+25940 1 2
+25941 1 2
+25942 1 2
+25943 1 2
+25944 1 2
+25945 1 2
+25946 1 2
+25947 1 2
+25948 1 2
+25949 1 2
+25950 1 2
+25951 1 2
+25952 1 2
+25953 1 2
+25954 1 2
+25955 1 2
+25956 1 2
+25957 1 2
+25958 1 2
+25959 1 2
+25960 1 2
+25961 1 2
+25962 1 2
+25963 1 2
+25964 1 2
+25965 1 2
+25966 1 2
+25967 1 2
+25968 1 2
+25969 1 2
+25970 1 2
+25971 1 2
+25972 1 2
+25973 1 2
+25974 1 2
+25975 1 2
+25976 1 2
+25977 1 2
+25978 1 2
+25979 1 2
+25980 1 2
+25981 1 2
+25982 1 2
+25983 1 2
+25984 1 2
+25985 1 2
+25986 1 2
+25987 1 2
+25988 1 2
+25989 1 2
+25990 1 2
+25991 1 2
+25992 1 2
+25993 1 2
+25994 1 2
+25995 1 2
+25996 1 2
+25997 1 2
+25998 1 2
+25999 1 2
+26000 1 2
+26001 1 2
+26002 1 2
+26003 1 2
+26004 1 2
+26005 1 2
+26006 1 2
+26007 1 2
+26008 1 2
+26009 1 2
+26010 1 2
+26011 1 2
+26012 1 2
+26013 1 2
+26014 1 2
+26015 1 2
+26016 1 2
+26017 1 2
+26018 1 2
+26019 1 2
+26020 1 2
+26021 1 2
+26022 1 2
+26023 1 2
+26024 1 2
+26025 1 2
+26026 1 2
+26027 1 2
+26028 1 2
+26029 1 2
+26030 1 2
+26031 1 2
+26032 1 2
+26033 1 2
+26034 1 2
+26035 1 2
+26036 1 2
+26037 1 2
+26038 1 2
+26039 1 2
+26040 1 2
+26041 1 2
+26042 1 2
+26043 1 2
+26044 1 2
+26045 1 2
+26046 1 2
+26047 1 2
+26048 1 2
+26049 1 2
+26050 1 2
+26051 1 2
+26052 1 2
+26053 1 2
+26054 1 2
+26055 1 2
+26056 1 2
+26057 1 2
+26058 1 2
+26059 1 2
+26060 1 2
+26061 1 2
+26062 1 2
+26063 1 2
+26064 1 2
+26065 1 2
+26066 1 2
+26067 1 2
+26068 1 2
+26069 1 2
+26070 1 2
+26071 1 2
+26072 1 2
+26073 1 2
+26074 1 2
+26075 1 2
+26076 1 2
+26077 1 2
+26078 1 2
+26079 1 2
+26080 1 2
+26081 1 2
+26082 1 2
+26083 1 2
+26084 1 2
+26085 1 2
+26086 1 2
+26087 1 2
+26088 1 2
+26089 1 2
+26090 1 2
+26091 1 2
+26092 1 2
+26093 1 2
+26094 1 2
+26095 1 2
+26096 1 2
+26097 1 2
+26098 1 2
+26099 1 2
+26100 1 2
+26101 1 2
+26102 1 2
+26103 1 2
+26104 1 2
+26105 1 2
+26106 1 2
+26107 1 2
+26108 1 2
+26109 1 2
+26110 1 2
+26111 1 2
+26112 1 2
+26113 1 2
+26114 1 2
+26115 1 2
+26116 1 2
+26117 1 2
+26118 1 2
+26119 1 2
+26120 1 2
+26121 1 2
+26122 1 2
+26123 1 2
+26124 1 2
+26125 1 2
+26126 1 2
+26127 1 2
+26128 1 2
+26129 1 2
+26130 1 2
+26131 1 2
+26132 1 2
+26133 1 2
+26134 1 2
+26135 1 2
+26136 1 2
+26137 1 2
+26138 1 2
+26139 1 2
+26140 1 2
+26141 1 2
+26142 1 2
+26143 1 2
+26144 1 2
+26145 1 2
+26146 1 2
+26147 1 2
+26148 1 2
+26149 1 2
+26150 1 2
+26151 1 2
+26152 1 2
+26153 1 2
+26154 1 2
+26155 1 2
+26156 1 2
+26157 1 2
+26158 1 2
+26159 1 2
+26160 1 2
+26161 1 2
+26162 1 2
+26163 1 2
+26164 1 2
+26165 1 2
+26166 1 2
+26167 1 2
+26168 1 2
+26169 1 2
+26170 1 2
+26171 1 2
+26172 1 2
+26173 1 2
+26174 1 2
+26175 1 2
+26176 1 2
+26177 1 2
+26178 1 2
+26179 1 2
+26180 1 2
+26181 1 2
+26182 1 2
+26183 1 2
+26184 1 2
+26185 1 2
+26186 1 2
+26187 1 2
+26188 1 2
+26189 1 2
+26190 1 2
+26191 1 2
+26192 1 2
+26193 1 2
+26194 1 2
+26195 1 2
+26196 1 2
+26197 1 2
+26198 1 2
+26199 1 2
+26200 1 2
+26201 1 2
+26202 1 2
+26203 1 2
+26204 1 2
+26205 1 2
+26206 1 2
+26207 1 2
+26208 1 2
+26209 1 2
+26210 1 2
+26211 1 2
+26212 1 2
+26213 1 2
+26214 1 2
+26215 1 2
+26216 1 2
+26217 1 2
+26218 1 2
+26219 1 2
+26220 1 2
+26221 1 2
+26222 1 2
+26223 1 2
+26224 1 2
+26225 1 2
+26226 1 2
+26227 1 2
+26228 1 2
+26229 1 2
+26230 1 2
+26231 1 2
+26232 1 2
+26233 1 2
+26234 1 2
+26235 1 2
+26236 1 2
+26237 1 2
+26238 1 2
+26239 1 2
+26240 1 2
+26241 1 2
+26242 1 2
+26243 1 2
+26244 1 2
+26245 1 2
+26246 1 2
+26247 1 2
+26248 1 2
+26249 1 2
+26250 1 2
+26251 1 2
+26252 1 2
+26253 1 2
+26254 1 2
+26255 1 2
+26256 1 2
+26257 1 2
+26258 1 2
+26259 1 2
+26260 1 2
+26261 1 2
+26262 1 2
+26263 1 2
+26264 1 2
+26265 1 2
+26266 1 2
+26267 1 2
+26268 1 2
+26269 1 2
+26270 1 2
+26271 1 2
+26272 1 2
+26273 1 2
+26274 1 2
+26275 1 2
+26276 1 2
+26277 1 2
+26278 1 2
+26279 1 2
+26280 1 2
+26281 1 2
+26282 1 2
+26283 1 2
+26284 1 2
+26285 1 2
+26286 1 2
+26287 1 2
+26288 1 2
+26289 1 2
+26290 1 2
+26291 1 2
+26292 1 2
+26293 1 2
+26294 1 2
+26295 1 2
+26296 1 2
+26297 1 2
+26298 1 2
+26299 1 2
+26300 1 2
+26301 1 2
+26302 1 2
+26303 1 2
+26304 1 2
+26305 1 2
+26306 1 2
+26307 1 2
+26308 1 2
+26309 1 2
+26310 1 2
+26311 1 2
+26312 1 2
+26313 1 2
+26314 1 2
+26315 1 2
+26316 1 2
+26317 1 2
+26318 1 2
+26319 1 2
+26320 1 2
+26321 1 2
+26322 1 2
+26323 1 2
+26324 1 2
+26325 1 2
+26326 1 2
+26327 1 2
+26328 1 2
+26329 1 2
+26330 1 2
+26331 1 2
+26332 1 2
+26333 1 2
+26334 1 2
+26335 1 2
+26336 1 2
+26337 1 2
+26338 1 2
+26339 1 2
+26340 1 2
+26341 1 2
+26342 1 2
+26343 1 2
+26344 1 2
+26345 1 2
+26346 1 2
+26347 1 2
+26348 1 2
+26349 1 2
+26350 1 2
+26351 1 2
+26352 1 2
+26353 1 2
+26354 1 2
+26355 1 2
+26356 1 2
+26357 1 2
+26358 1 2
+26359 1 2
+26360 1 2
+26361 1 2
+26362 1 2
+26363 1 2
+26364 1 2
+26365 1 2
+26366 1 2
+26367 1 2
+26368 1 2
+26369 1 2
+26370 1 2
+26371 1 2
+26372 1 2
+26373 1 2
+26374 1 2
+26375 1 2
+26376 1 2
+26377 1 2
+26378 1 2
+26379 1 2
+26380 1 2
+26381 1 2
+26382 1 2
+26383 1 2
+26384 1 2
+26385 1 2
+26386 1 2
+26387 1 2
+26388 1 2
+26389 1 2
+26390 1 2
+26391 1 2
+26392 1 2
+26393 1 2
+26394 1 2
+26395 1 2
+26396 1 2
+26397 1 2
+26398 1 2
+26399 1 2
+26400 1 2
+26401 1 2
+26402 1 2
+26403 1 2
+26404 1 2
+26405 1 2
+26406 1 2
+26407 1 2
+26408 1 2
+26409 1 2
+26410 1 2
+26411 1 2
+26412 1 2
+26413 1 2
+26414 1 2
+26415 1 2
+26416 1 2
+26417 1 2
+26418 1 2
+26419 1 2
+26420 1 2
+26421 1 2
+26422 1 2
+26423 1 2
+26424 1 2
+26425 1 2
+26426 1 2
+26427 1 2
+26428 1 2
+26429 1 2
+26430 1 2
+26431 1 2
+26432 1 2
+26433 1 2
+26434 1 2
+26435 1 2
+26436 1 2
+26437 1 2
+26438 1 2
+26439 1 2
+26440 1 2
+26441 1 2
+26442 1 2
+26443 1 2
+26444 1 2
+26445 1 2
+26446 1 2
+26447 1 2
+26448 1 2
+26449 1 2
+26450 1 2
+26451 1 2
+26452 1 2
+26453 1 2
+26454 1 2
+26455 1 2
+26456 1 2
+26457 1 2
+26458 1 2
+26459 1 2
+26460 1 2
+26461 1 2
+26462 1 2
+26463 1 2
+26464 1 2
+26465 1 2
+26466 1 2
+26467 1 2
+26468 1 2
+26469 1 2
+26470 1 2
+26471 1 2
+26472 1 2
+26473 1 2
+26474 1 2
+26475 1 2
+26476 1 2
+26477 1 2
+26478 1 2
+26479 1 2
+26480 1 2
+26481 1 2
+26482 1 2
+26483 1 2
+26484 1 2
+26485 1 2
+26486 1 2
+26487 1 2
+26488 1 2
+26489 1 2
+26490 1 2
+26491 1 2
+26492 1 2
+26493 1 2
+26494 1 2
+26495 1 2
+26496 1 2
+26497 1 2
+26498 1 2
+26499 1 2
+26500 1 2
+26501 1 2
+26502 1 2
+26503 1 2
+26504 1 2
+26505 1 2
+26506 1 2
+26507 1 2
+26508 1 2
+26509 1 2
+26510 1 2
+26511 1 2
+26512 1 2
+26513 1 2
+26514 1 2
+26515 1 2
+26516 1 2
+26517 1 2
+26518 1 2
+26519 1 2
+26520 1 2
+26521 1 2
+26522 1 2
+26523 1 2
+26524 1 2
+26525 1 2
+26526 1 2
+26527 1 2
+26528 1 2
+26529 1 2
+26530 1 2
+26531 1 2
+26532 1 2
+26533 1 2
+26534 1 2
+26535 1 2
+26536 1 2
+26537 1 2
+26538 1 2
+26539 1 2
+26540 1 2
+26541 1 2
+26542 1 2
+26543 1 2
+26544 1 2
+26545 1 2
+26546 1 2
+26547 1 2
+26548 1 2
+26549 1 2
+26550 1 2
+26551 1 2
+26552 1 2
+26553 1 2
+26554 1 2
+26555 1 2
+26556 1 2
+26557 1 2
+26558 1 2
+26559 1 2
+26560 1 2
+26561 1 2
+26562 1 2
+26563 1 2
+26564 1 2
+26565 1 2
+26566 1 2
+26567 1 2
+26568 1 2
+26569 1 2
+26570 1 2
+26571 1 2
+26572 1 2
+26573 1 2
+26574 1 2
+26575 1 2
+26576 1 2
+26577 1 2
+26578 1 2
+26579 1 2
+26580 1 2
+26581 1 2
+26582 1 2
+26583 1 2
+26584 1 2
+26585 1 2
+26586 1 2
+26587 1 2
+26588 1 2
+26589 1 2
+26590 1 2
+26591 1 2
+26592 1 2
+26593 1 2
+26594 1 2
+26595 1 2
+26596 1 2
+26597 1 2
+26598 1 2
+26599 1 2
+26600 1 2
+26601 1 2
+26602 1 2
+26603 1 2
+26604 1 2
+26605 1 2
+26606 1 2
+26607 1 2
+26608 1 2
+26609 1 2
+26610 1 2
+26611 1 2
+26612 1 2
+26613 1 2
+26614 1 2
+26615 1 2
+26616 1 2
+26617 1 2
+26618 1 2
+26619 1 2
+26620 1 2
+26621 1 2
+26622 1 2
+26623 1 2
+26624 1 2
+26625 1 2
+26626 1 2
+26627 1 2
+26628 1 2
+26629 1 2
+26630 1 2
+26631 1 2
+26632 1 2
+26633 1 2
+26634 1 2
+26635 1 2
+26636 1 2
+26637 1 2
+26638 1 2
+26639 1 2
+26640 1 2
+26641 1 2
+26642 1 2
+26643 1 2
+26644 1 2
+26645 1 2
+26646 1 2
+26647 1 2
+26648 1 2
+26649 1 2
+26650 1 2
+26651 1 2
+26652 1 2
+26653 1 2
+26654 1 2
+26655 1 2
+26656 1 2
+26657 1 2
+26658 1 2
+26659 1 2
+26660 1 2
+26661 1 2
+26662 1 2
+26663 1 2
+26664 1 2
+26665 1 2
+26666 1 2
+26667 1 2
+26668 1 2
+26669 1 2
+26670 1 2
+26671 1 2
+26672 1 2
+26673 1 2
+26674 1 2
+26675 1 2
+26676 1 2
+26677 1 2
+26678 1 2
+26679 1 2
+26680 1 2
+26681 1 2
+26682 1 2
+26683 1 2
+26684 1 2
+26685 1 2
+26686 1 2
+26687 1 2
+26688 1 2
+26689 1 2
+26690 1 2
+26691 1 2
+26692 1 2
+26693 1 2
+26694 1 2
+26695 1 2
+26696 1 2
+26697 1 2
+26698 1 2
+26699 1 2
+26700 1 2
+26701 1 2
+26702 1 2
+26703 1 2
+26704 1 2
+26705 1 2
+26706 1 2
+26707 1 2
+26708 1 2
+26709 1 2
+26710 1 2
+26711 1 2
+26712 1 2
+26713 1 2
+26714 1 2
+26715 1 2
+26716 1 2
+26717 1 2
+26718 1 2
+26719 1 2
+26720 1 2
+26721 1 2
+26722 1 2
+26723 1 2
+26724 1 2
+26725 1 2
+26726 1 2
+26727 1 2
+26728 1 2
+26729 1 2
+26730 1 2
+26731 1 2
+26732 1 2
+26733 1 2
+26734 1 2
+26735 1 2
+26736 1 2
+26737 1 2
+26738 1 2
+26739 1 2
+26740 1 2
+26741 1 2
+26742 1 2
+26743 1 2
+26744 1 2
+26745 1 2
+26746 1 2
+26747 1 2
+26748 1 2
+26749 1 2
+26750 1 2
+26751 1 2
+26752 1 2
+26753 1 2
+26754 1 2
+26755 1 2
+26756 1 2
+26757 1 2
+26758 1 2
+26759 1 2
+26760 1 2
+26761 1 2
+26762 1 2
+26763 1 2
+26764 1 2
+26765 1 2
+26766 1 2
+26767 1 2
+26768 1 2
+26769 1 2
+26770 1 2
+26771 1 2
+26772 1 2
+26773 1 2
+26774 1 2
+26775 1 2
+26776 1 2
+26777 1 2
+26778 1 2
+26779 1 2
+26780 1 2
+26781 1 2
+26782 1 2
+26783 1 2
+26784 1 2
+26785 1 2
+26786 1 2
+26787 1 2
+26788 1 2
+26789 1 2
+26790 1 2
+26791 1 2
+26792 1 2
+26793 1 2
+26794 1 2
+26795 1 2
+26796 1 2
+26797 1 2
+26798 1 2
+26799 1 2
+26800 1 2
+26801 1 2
+26802 1 2
+26803 1 2
+26804 1 2
+26805 1 2
+26806 1 2
+26807 1 2
+26808 1 2
+26809 1 2
+26810 1 2
+26811 1 2
+26812 1 2
+26813 1 2
+26814 1 2
+26815 1 2
+26816 1 2
+26817 1 2
+26818 1 2
+26819 1 2
+26820 1 2
+26821 1 2
+26822 1 2
+26823 1 2
+26824 1 2
+26825 1 2
+26826 1 2
+26827 1 2
+26828 1 2
+26829 1 2
+26830 1 2
+26831 1 2
+26832 1 2
+26833 1 2
+26834 1 2
+26835 1 2
+26836 1 2
+26837 1 2
+26838 1 2
+26839 1 2
+26840 1 2
+26841 1 2
+26842 1 2
+26843 1 2
+26844 1 2
+26845 1 2
+26846 1 2
+26847 1 2
+26848 1 2
+26849 1 2
+26850 1 2
+26851 1 2
+26852 1 2
+26853 1 2
+26854 1 2
+26855 1 2
+26856 1 2
+26857 1 2
+26858 1 2
+26859 1 2
+26860 1 2
+26861 1 2
+26862 1 2
+26863 1 2
+26864 1 2
+26865 1 2
+26866 1 2
+26867 1 2
+26868 1 2
+26869 1 2
+26870 1 2
+26871 1 2
+26872 1 2
+26873 1 2
+26874 1 2
+26875 1 2
+26876 1 2
+26877 1 2
+26878 1 2
+26879 1 2
+26880 1 2
+26881 1 2
+26882 1 2
+26883 1 2
+26884 1 2
+26885 1 2
+26886 1 2
+26887 1 2
+26888 1 2
+26889 1 2
+26890 1 2
+26891 1 2
+26892 1 2
+26893 1 2
+26894 1 2
+26895 1 2
+26896 1 2
+26897 1 2
+26898 1 2
+26899 1 2
+26900 1 2
+26901 1 2
+26902 1 2
+26903 1 2
+26904 1 2
+26905 1 2
+26906 1 2
+26907 1 2
+26908 1 2
+26909 1 2
+26910 1 2
+26911 1 2
+26912 1 2
+26913 1 2
+26914 1 2
+26915 1 2
+26916 1 2
+26917 1 2
+26918 1 2
+26919 1 2
+26920 1 2
+26921 1 2
+26922 1 2
+26923 1 2
+26924 1 2
+26925 1 2
+26926 1 2
+26927 1 2
+26928 1 2
+26929 1 2
+26930 1 2
+26931 1 2
+26932 1 2
+26933 1 2
+26934 1 2
+26935 1 2
+26936 1 2
+26937 1 2
+26938 1 2
+26939 1 2
+26940 1 2
+26941 1 2
+26942 1 2
+26943 1 2
+26944 1 2
+26945 1 2
+26946 1 2
+26947 1 2
+26948 1 2
+26949 1 2
+26950 1 2
+26951 1 2
+26952 1 2
+26953 1 2
+26954 1 2
+26955 1 2
+26956 1 2
+26957 1 2
+26958 1 2
+26959 1 2
+26960 1 2
+26961 1 2
+26962 1 2
+26963 1 2
+26964 1 2
+26965 1 2
+26966 1 2
+26967 1 2
+26968 1 2
+26969 1 2
+26970 1 2
+26971 1 2
+26972 1 2
+26973 1 2
+26974 1 2
+26975 1 2
+26976 1 2
+26977 1 2
+26978 1 2
+26979 1 2
+26980 1 2
+26981 1 2
+26982 1 2
+26983 1 2
+26984 1 2
+26985 1 2
+26986 1 2
+26987 1 2
+26988 1 2
+26989 1 2
+26990 1 2
+26991 1 2
+26992 1 2
+26993 1 2
+26994 1 2
+26995 1 2
+26996 1 2
+26997 1 2
+26998 1 2
+26999 1 2
+27000 1 2
+27001 1 2
+27002 1 2
+27003 1 2
+27004 1 2
+27005 1 2
+27006 1 2
+27007 1 2
+27008 1 2
+27009 1 2
+27010 1 2
+27011 1 2
+27012 1 2
+27013 1 2
+27014 1 2
+27015 1 2
+27016 1 2
+27017 1 2
+27018 1 2
+27019 1 2
+27020 1 2
+27021 1 2
+27022 1 2
+27023 1 2
+27024 1 2
+27025 1 2
+27026 1 2
+27027 1 2
+27028 1 2
+27029 1 2
+27030 1 2
+27031 1 2
+27032 1 2
+27033 1 2
+27034 1 2
+27035 1 2
+27036 1 2
+27037 1 2
+27038 1 2
+27039 1 2
+27040 1 2
+27041 1 2
+27042 1 2
+27043 1 2
+27044 1 2
+27045 1 2
+27046 1 2
+27047 1 2
+27048 1 2
+27049 1 2
+27050 1 2
+27051 1 2
+27052 1 2
+27053 1 2
+27054 1 2
+27055 1 2
+27056 1 2
+27057 1 2
+27058 1 2
+27059 1 2
+27060 1 2
+27061 1 2
+27062 1 2
+27063 1 2
+27064 1 2
+27065 1 2
+27066 1 2
+27067 1 2
+27068 1 2
+27069 1 2
+27070 1 2
+27071 1 2
+27072 1 2
+27073 1 2
+27074 1 2
+27075 1 2
+27076 1 2
+27077 1 2
+27078 1 2
+27079 1 2
+27080 1 2
+27081 1 2
+27082 1 2
+27083 1 2
+27084 1 2
+27085 1 2
+27086 1 2
+27087 1 2
+27088 1 2
+27089 1 2
+27090 1 2
+27091 1 2
+27092 1 2
+27093 1 2
+27094 1 2
+27095 1 2
+27096 1 2
+27097 1 2
+27098 1 2
+27099 1 2
+27100 1 2
+27101 1 2
+27102 1 2
+27103 1 2
+27104 1 2
+27105 1 2
+27106 1 2
+27107 1 2
+27108 1 2
+27109 1 2
+27110 1 2
+27111 1 2
+27112 1 2
+27113 1 2
+27114 1 2
+27115 1 2
+27116 1 2
+27117 1 2
+27118 1 2
+27119 1 2
+27120 1 2
+27121 1 2
+27122 1 2
+27123 1 2
+27124 1 2
+27125 1 2
+27126 1 2
+27127 1 2
+27128 1 2
+27129 1 2
+27130 1 2
+27131 1 2
+27132 1 2
+27133 1 2
+27134 1 2
+27135 1 2
+27136 1 2
+27137 1 2
+27138 1 2
+27139 1 2
+27140 1 2
+27141 1 2
+27142 1 2
+27143 1 2
+27144 1 2
+27145 1 2
+27146 1 2
+27147 1 2
+27148 1 2
+27149 1 2
+27150 1 2
+27151 1 2
+27152 1 2
+27153 1 2
+27154 1 2
+27155 1 2
+27156 1 2
+27157 1 2
+27158 1 2
+27159 1 2
+27160 1 2
+27161 1 2
+27162 1 2
+27163 1 2
+27164 1 2
+27165 1 2
+27166 1 2
+27167 1 2
+27168 1 2
+27169 1 2
+27170 1 2
+27171 1 2
+27172 1 2
+27173 1 2
+27174 1 2
+27175 1 2
+27176 1 2
+27177 1 2
+27178 1 2
+27179 1 2
+27180 1 2
+27181 1 2
+27182 1 2
+27183 1 2
+27184 1 2
+27185 1 2
+27186 1 2
+27187 1 2
+27188 1 2
+27189 1 2
+27190 1 2
+27191 1 2
+27192 1 2
+27193 1 2
+27194 1 2
+27195 1 2
+27196 1 2
+27197 1 2
+27198 1 2
+27199 1 2
+27200 1 2
+27201 1 2
+27202 1 2
+27203 1 2
+27204 1 2
+27205 1 2
+27206 1 2
+27207 1 2
+27208 1 2
+27209 1 2
+27210 1 2
+27211 1 2
+27212 1 2
+27213 1 2
+27214 1 2
+27215 1 2
+27216 1 2
+27217 1 2
+27218 1 2
+27219 1 2
+27220 1 2
+27221 1 2
+27222 1 2
+27223 1 2
+27224 1 2
+27225 1 2
+27226 1 2
+27227 1 2
+27228 1 2
+27229 1 2
+27230 1 2
+27231 1 2
+27232 1 2
+27233 1 2
+27234 1 2
+27235 1 2
+27236 1 2
+27237 1 2
+27238 1 2
+27239 1 2
+27240 1 2
+27241 1 2
+27242 1 2
+27243 1 2
+27244 1 2
+27245 1 2
+27246 1 2
+27247 1 2
+27248 1 2
+27249 1 2
+27250 1 2
+27251 1 2
+27252 1 2
+27253 1 2
+27254 1 2
+27255 1 2
+27256 1 2
+27257 1 2
+27258 1 2
+27259 1 2
+27260 1 2
+27261 1 2
+27262 1 2
+27263 1 2
+27264 1 2
+27265 1 2
+27266 1 2
+27267 1 2
+27268 1 2
+27269 1 2
+27270 1 2
+27271 1 2
+27272 1 2
+27273 1 2
+27274 1 2
+27275 1 2
+27276 1 2
+27277 1 2
+27278 1 2
+27279 1 2
+27280 1 2
+27281 1 2
+27282 1 2
+27283 1 2
+27284 1 2
+27285 1 2
+27286 1 2
+27287 1 2
+27288 1 2
+27289 1 2
+27290 1 2
+27291 1 2
+27292 1 2
+27293 1 2
+27294 1 2
+27295 1 2
+27296 1 2
+27297 1 2
+27298 1 2
+27299 1 2
+27300 1 2
+27301 1 2
+27302 1 2
+27303 1 2
+27304 1 2
+27305 1 2
+27306 1 2
+27307 1 2
+27308 1 2
+27309 1 2
+27310 1 2
+27311 1 2
+27312 1 2
+27313 1 2
+27314 1 2
+27315 1 2
+27316 1 2
+27317 1 2
+27318 1 2
+27319 1 2
+27320 1 2
+27321 1 2
+27322 1 2
+27323 1 2
+27324 1 2
+27325 1 2
+27326 1 2
+27327 1 2
+27328 1 2
+27329 1 2
+27330 1 2
+27331 1 2
+27332 1 2
+27333 1 2
+27334 1 2
+27335 1 2
+27336 1 2
+27337 1 2
+27338 1 2
+27339 1 2
+27340 1 2
+27341 1 2
+27342 1 2
+27343 1 2
+27344 1 2
+27345 1 2
+27346 1 2
+27347 1 2
+27348 1 2
+27349 1 2
+27350 1 2
+27351 1 2
+27352 1 2
+27353 1 2
+27354 1 2
+27355 1 2
+27356 1 2
+27357 1 2
+27358 1 2
+27359 1 2
+27360 1 2
+27361 1 2
+27362 1 2
+27363 1 2
+27364 1 2
+27365 1 2
+27366 1 2
+27367 1 2
+27368 1 2
+27369 1 2
+27370 1 2
+27371 1 2
+27372 1 2
+27373 1 2
+27374 1 2
+27375 1 2
+27376 1 2
+27377 1 2
+27378 1 2
+27379 1 2
+27380 1 2
+27381 1 2
+27382 1 2
+27383 1 2
+27384 1 2
+27385 1 2
+27386 1 2
+27387 1 2
+27388 1 2
+27389 1 2
+27390 1 2
+27391 1 2
+27392 1 2
+27393 1 2
+27394 1 2
+27395 1 2
+27396 1 2
+27397 1 2
+27398 1 2
+27399 1 2
+27400 1 2
+27401 1 2
+27402 1 2
+27403 1 2
+27404 1 2
+27405 1 2
+27406 1 2
+27407 1 2
+27408 1 2
+27409 1 2
+27410 1 2
+27411 1 2
+27412 1 2
+27413 1 2
+27414 1 2
+27415 1 2
+27416 1 2
+27417 1 2
+27418 1 2
+27419 1 2
+27420 1 2
+27421 1 2
+27422 1 2
+27423 1 2
+27424 1 2
+27425 1 2
+27426 1 2
+27427 1 2
+27428 1 2
+27429 1 2
+27430 1 2
+27431 1 2
+27432 1 2
+27433 1 2
+27434 1 2
+27435 1 2
+27436 1 2
+27437 1 2
+27438 1 2
+27439 1 2
+27440 1 2
+27441 1 2
+27442 1 2
+27443 1 2
+27444 1 2
+27445 1 2
+27446 1 2
+27447 1 2
+27448 1 2
+27449 1 2
+27450 1 2
+27451 1 2
+27452 1 2
+27453 1 2
+27454 1 2
+27455 1 2
+27456 1 2
+27457 1 2
+27458 1 2
+27459 1 2
+27460 1 2
+27461 1 2
+27462 1 2
+27463 1 2
+27464 1 2
+27465 1 2
+27466 1 2
+27467 1 2
+27468 1 2
+27469 1 2
+27470 1 2
+27471 1 2
+27472 1 2
+27473 1 2
+27474 1 2
+27475 1 2
+27476 1 2
+27477 1 2
+27478 1 2
+27479 1 2
+27480 1 2
+27481 1 2
+27482 1 2
+27483 1 2
+27484 1 2
+27485 1 2
+27486 1 2
+27487 1 2
+27488 1 2
+27489 1 2
+27490 1 2
+27491 1 2
+27492 1 2
+27493 1 2
+27494 1 2
+27495 1 2
+27496 1 2
+27497 1 2
+27498 1 2
+27499 1 2
+27500 1 2
+27501 1 2
+27502 1 2
+27503 1 2
+27504 1 2
+27505 1 2
+27506 1 2
+27507 1 2
+27508 1 2
+27509 1 2
+27510 1 2
+27511 1 2
+27512 1 2
+27513 1 2
+27514 1 2
+27515 1 2
+27516 1 2
+27517 1 2
+27518 1 2
+27519 1 2
+27520 1 2
+27521 1 2
+27522 1 2
+27523 1 2
+27524 1 2
+27525 1 2
+27526 1 2
+27527 1 2
+27528 1 2
+27529 1 2
+27530 1 2
+27531 1 2
+27532 1 2
+27533 1 2
+27534 1 2
+27535 1 2
+27536 1 2
+27537 1 2
+27538 1 2
+27539 1 2
+27540 1 2
+27541 1 2
+27542 1 2
+27543 1 2
+27544 1 2
+27545 1 2
+27546 1 2
+27547 1 2
+27548 1 2
+27549 1 2
+27550 1 2
+27551 1 2
+27552 1 2
+27553 1 2
+27554 1 2
+27555 1 2
+27556 1 2
+27557 1 2
+27558 1 2
+27559 1 2
+27560 1 2
+27561 1 2
+27562 1 2
+27563 1 2
+27564 1 2
+27565 1 2
+27566 1 2
+27567 1 2
+27568 1 2
+27569 1 2
+27570 1 2
+27571 1 2
+27572 1 2
+27573 1 2
+27574 1 2
+27575 1 2
+27576 1 2
+27577 1 2
+27578 1 2
+27579 1 2
+27580 1 2
+27581 1 2
+27582 1 2
+27583 1 2
+27584 1 2
+27585 1 2
+27586 1 2
+27587 1 2
+27588 1 2
+27589 1 2
+27590 1 2
+27591 1 2
+27592 1 2
+27593 1 2
+27594 1 2
+27595 1 2
+27596 1 2
+27597 1 2
+27598 1 2
+27599 1 2
+27600 1 2
+27601 1 2
+27602 1 2
+27603 1 2
+27604 1 2
+27605 1 2
+27606 1 2
+27607 1 2
+27608 1 2
+27609 1 2
+27610 1 2
+27611 1 2
+27612 1 2
+27613 1 2
+27614 1 2
+27615 1 2
+27616 1 2
+27617 1 2
+27618 1 2
+27619 1 2
+27620 1 2
+27621 1 2
+27622 1 2
+27623 1 2
+27624 1 2
+27625 1 2
+27626 1 2
+27627 1 2
+27628 1 2
+27629 1 2
+27630 1 2
+27631 1 2
+27632 1 2
+27633 1 2
+27634 1 2
+27635 1 2
+27636 1 2
+27637 1 2
+27638 1 2
+27639 1 2
+27640 1 2
+27641 1 2
+27642 1 2
+27643 1 2
+27644 1 2
+27645 1 2
+27646 1 2
+27647 1 2
+27648 1 2
+27649 1 2
+27650 1 2
+27651 1 2
+27652 1 2
+27653 1 2
+27654 1 2
+27655 1 2
+27656 1 2
+27657 1 2
+27658 1 2
+27659 1 2
+27660 1 2
+27661 1 2
+27662 1 2
+27663 1 2
+27664 1 2
+27665 1 2
+27666 1 2
+27667 1 2
+27668 1 2
+27669 1 2
+27670 1 2
+27671 1 2
+27672 1 2
+27673 1 2
+27674 1 2
+27675 1 2
+27676 1 2
+27677 1 2
+27678 1 2
+27679 1 2
+27680 1 2
+27681 1 2
+27682 1 2
+27683 1 2
+27684 1 2
+27685 1 2
+27686 1 2
+27687 1 2
+27688 1 2
+27689 1 2
+27690 1 2
+27691 1 2
+27692 1 2
+27693 1 2
+27694 1 2
+27695 1 2
+27696 1 2
+27697 1 2
+27698 1 2
+27699 1 2
+27700 1 2
+27701 1 2
+27702 1 2
+27703 1 2
+27704 1 2
+27705 1 2
+27706 1 2
+27707 1 2
+27708 1 2
+27709 1 2
+27710 1 2
+27711 1 2
+27712 1 2
+27713 1 2
+27714 1 2
+27715 1 2
+27716 1 2
+27717 1 2
+27718 1 2
+27719 1 2
+27720 1 2
+27721 1 2
+27722 1 2
+27723 1 2
+27724 1 2
+27725 1 2
+27726 1 2
+27727 1 2
+27728 1 2
+27729 1 2
+27730 1 2
+27731 1 2
+27732 1 2
+27733 1 2
+27734 1 2
+27735 1 2
+27736 1 2
+27737 1 2
+27738 1 2
+27739 1 2
+27740 1 2
+27741 1 2
+27742 1 2
+27743 1 2
+27744 1 2
+27745 1 2
+27746 1 2
+27747 1 2
+27748 1 2
+27749 1 2
+27750 1 2
+27751 1 2
+27752 1 2
+27753 1 2
+27754 1 2
+27755 1 2
+27756 1 2
+27757 1 2
+27758 1 2
+27759 1 2
+27760 1 2
+27761 1 2
+27762 1 2
+27763 1 2
+27764 1 2
+27765 1 2
+27766 1 2
+27767 1 2
+27768 1 2
+27769 1 2
+27770 1 2
+27771 1 2
+27772 1 2
+27773 1 2
+27774 1 2
+27775 1 2
+27776 1 2
+27777 1 2
+27778 1 2
+27779 1 2
+27780 1 2
+27781 1 2
+27782 1 2
+27783 1 2
+27784 1 2
+27785 1 2
+27786 1 2
+27787 1 2
+27788 1 2
+27789 1 2
+27790 1 2
+27791 1 2
+27792 1 2
+27793 1 2
+27794 1 2
+27795 1 2
+27796 1 2
+27797 1 2
+27798 1 2
+27799 1 2
+27800 1 2
+27801 1 2
+27802 1 2
+27803 1 2
+27804 1 2
+27805 1 2
+27806 1 2
+27807 1 2
+27808 1 2
+27809 1 2
+27810 1 2
+27811 1 2
+27812 1 2
+27813 1 2
+27814 1 2
+27815 1 2
+27816 1 2
+27817 1 2
+27818 1 2
+27819 1 2
+27820 1 2
+27821 1 2
+27822 1 2
+27823 1 2
+27824 1 2
+27825 1 2
+27826 1 2
+27827 1 2
+27828 1 2
+27829 1 2
+27830 1 2
+27831 1 2
+27832 1 2
+27833 1 2
+27834 1 2
+27835 1 2
+27836 1 2
+27837 1 2
+27838 1 2
+27839 1 2
+27840 1 2
+27841 1 2
+27842 1 2
+27843 1 2
+27844 1 2
+27845 1 2
+27846 1 2
+27847 1 2
+27848 1 2
+27849 1 2
+27850 1 2
+27851 1 2
+27852 1 2
+27853 1 2
+27854 1 2
+27855 1 2
+27856 1 2
+27857 1 2
+27858 1 2
+27859 1 2
+27860 1 2
+27861 1 2
+27862 1 2
+27863 1 2
+27864 1 2
+27865 1 2
+27866 1 2
+27867 1 2
+27868 1 2
+27869 1 2
+27870 1 2
+27871 1 2
+27872 1 2
+27873 1 2
+27874 1 2
+27875 1 2
+27876 1 2
+27877 1 2
+27878 1 2
+27879 1 2
+27880 1 2
+27881 1 2
+27882 1 2
+27883 1 2
+27884 1 2
+27885 1 2
+27886 1 2
+27887 1 2
+27888 1 2
+27889 1 2
+27890 1 2
+27891 1 2
+27892 1 2
+27893 1 2
+27894 1 2
+27895 1 2
+27896 1 2
+27897 1 2
+27898 1 2
+27899 1 2
+27900 1 2
+27901 1 2
+27902 1 2
+27903 1 2
+27904 1 2
+27905 1 2
+27906 1 2
+27907 1 2
+27908 1 2
+27909 1 2
+27910 1 2
+27911 1 2
+27912 1 2
+27913 1 2
+27914 1 2
+27915 1 2
+27916 1 2
+27917 1 2
+27918 1 2
+27919 1 2
+27920 1 2
+27921 1 2
+27922 1 2
+27923 1 2
+27924 1 2
+27925 1 2
+27926 1 2
+27927 1 2
+27928 1 2
+27929 1 2
+27930 1 2
+27931 1 2
+27932 1 2
+27933 1 2
+27934 1 2
+27935 1 2
+27936 1 2
+27937 1 2
+27938 1 2
+27939 1 2
+27940 1 2
+27941 1 2
+27942 1 2
+27943 1 2
+27944 1 2
+27945 1 2
+27946 1 2
+27947 1 2
+27948 1 2
+27949 1 2
+27950 1 2
+27951 1 2
+27952 1 2
+27953 1 2
+27954 1 2
+27955 1 2
+27956 1 2
+27957 1 2
+27958 1 2
+27959 1 2
+27960 1 2
+27961 1 2
+27962 1 2
+27963 1 2
+27964 1 2
+27965 1 2
+27966 1 2
+27967 1 2
+27968 1 2
+27969 1 2
+27970 1 2
+27971 1 2
+27972 1 2
+27973 1 2
+27974 1 2
+27975 1 2
+27976 1 2
+27977 1 2
+27978 1 2
+27979 1 2
+27980 1 2
+27981 1 2
+27982 1 2
+27983 1 2
+27984 1 2
+27985 1 2
+27986 1 2
+27987 1 2
+27988 1 2
+27989 1 2
+27990 1 2
+27991 1 2
+27992 1 2
+27993 1 2
+27994 1 2
+27995 1 2
+27996 1 2
+27997 1 2
+27998 1 2
+27999 1 2
+28000 1 2
+28001 1 2
+28002 1 2
+28003 1 2
+28004 1 2
+28005 1 2
+28006 1 2
+28007 1 2
+28008 1 2
+28009 1 2
+28010 1 2
+28011 1 2
+28012 1 2
+28013 1 2
+28014 1 2
+28015 1 2
+28016 1 2
+28017 1 2
+28018 1 2
+28019 1 2
+28020 1 2
+28021 1 2
+28022 1 2
+28023 1 2
+28024 1 2
+28025 1 2
+28026 1 2
+28027 1 2
+28028 1 2
+28029 1 2
+28030 1 2
+28031 1 2
+28032 1 2
+28033 1 2
+28034 1 2
+28035 1 2
+28036 1 2
+28037 1 2
+28038 1 2
+28039 1 2
+28040 1 2
+28041 1 2
+28042 1 2
+28043 1 2
+28044 1 2
+28045 1 2
+28046 1 2
+28047 1 2
+28048 1 2
+28049 1 2
+28050 1 2
+28051 1 2
+28052 1 2
+28053 1 2
+28054 1 2
+28055 1 2
+28056 1 2
+28057 1 2
+28058 1 2
+28059 1 2
+28060 1 2
+28061 1 2
+28062 1 2
+28063 1 2
+28064 1 2
+28065 1 2
+28066 1 2
+28067 1 2
+28068 1 2
+28069 1 2
+28070 1 2
+28071 1 2
+28072 1 2
+28073 1 2
+28074 1 2
+28075 1 2
+28076 1 2
+28077 1 2
+28078 1 2
+28079 1 2
+28080 1 2
+28081 1 2
+28082 1 2
+28083 1 2
+28084 1 2
+28085 1 2
+28086 1 2
+28087 1 2
+28088 1 2
+28089 1 2
+28090 1 2
+28091 1 2
+28092 1 2
+28093 1 2
+28094 1 2
+28095 1 2
+28096 1 2
+28097 1 2
+28098 1 2
+28099 1 2
+28100 1 2
+28101 1 2
+28102 1 2
+28103 1 2
+28104 1 2
+28105 1 2
+28106 1 2
+28107 1 2
+28108 1 2
+28109 1 2
+28110 1 2
+28111 1 2
+28112 1 2
+28113 1 2
+28114 1 2
+28115 1 2
+28116 1 2
+28117 1 2
+28118 1 2
+28119 1 2
+28120 1 2
+28121 1 2
+28122 1 2
+28123 1 2
+28124 1 2
+28125 1 2
+28126 1 2
+28127 1 2
+28128 1 2
+28129 1 2
+28130 1 2
+28131 1 2
+28132 1 2
+28133 1 2
+28134 1 2
+28135 1 2
+28136 1 2
+28137 1 2
+28138 1 2
+28139 1 2
+28140 1 2
+28141 1 2
+28142 1 2
+28143 1 2
+28144 1 2
+28145 1 2
+28146 1 2
+28147 1 2
+28148 1 2
+28149 1 2
+28150 1 2
+28151 1 2
+28152 1 2
+28153 1 2
+28154 1 2
+28155 1 2
+28156 1 2
+28157 1 2
+28158 1 2
+28159 1 2
+28160 1 2
+28161 1 2
+28162 1 2
+28163 1 2
+28164 1 2
+28165 1 2
+28166 1 2
+28167 1 2
+28168 1 2
+28169 1 2
+28170 1 2
+28171 1 2
+28172 1 2
+28173 1 2
+28174 1 2
+28175 1 2
+28176 1 2
+28177 1 2
+28178 1 2
+28179 1 2
+28180 1 2
+28181 1 2
+28182 1 2
+28183 1 2
+28184 1 2
+28185 1 2
+28186 1 2
+28187 1 2
+28188 1 2
+28189 1 2
+28190 1 2
+28191 1 2
+28192 1 2
+28193 1 2
+28194 1 2
+28195 1 2
+28196 1 2
+28197 1 2
+28198 1 2
+28199 1 2
+28200 1 2
+28201 1 2
+28202 1 2
+28203 1 2
+28204 1 2
+28205 1 2
+28206 1 2
+28207 1 2
+28208 1 2
+28209 1 2
+28210 1 2
+28211 1 2
+28212 1 2
+28213 1 2
+28214 1 2
+28215 1 2
+28216 1 2
+28217 1 2
+28218 1 2
+28219 1 2
+28220 1 2
+28221 1 2
+28222 1 2
+28223 1 2
+28224 1 2
+28225 1 2
+28226 1 2
+28227 1 2
+28228 1 2
+28229 1 2
+28230 1 2
+28231 1 2
+28232 1 2
+28233 1 2
+28234 1 2
+28235 1 2
+28236 1 2
+28237 1 2
+28238 1 2
+28239 1 2
+28240 1 2
+28241 1 2
+28242 1 2
+28243 1 2
+28244 1 2
+28245 1 2
+28246 1 2
+28247 1 2
+28248 1 2
+28249 1 2
+28250 1 2
+28251 1 2
+28252 1 2
+28253 1 2
+28254 1 2
+28255 1 2
+28256 1 2
+28257 1 2
+28258 1 2
+28259 1 2
+28260 1 2
+28261 1 2
+28262 1 2
+28263 1 2
+28264 1 2
+28265 1 2
+28266 1 2
+28267 1 2
+28268 1 2
+28269 1 2
+28270 1 2
+28271 1 2
+28272 1 2
+28273 1 2
+28274 1 2
+28275 1 2
+28276 1 2
+28277 1 2
+28278 1 2
+28279 1 2
+28280 1 2
+28281 1 2
+28282 1 2
+28283 1 2
+28284 1 2
+28285 1 2
+28286 1 2
+28287 1 2
+28288 1 2
+28289 1 2
+28290 1 2
+28291 1 2
+28292 1 2
+28293 1 2
+28294 1 2
+28295 1 2
+28296 1 2
+28297 1 2
+28298 1 2
+28299 1 2
+28300 1 2
+28301 1 2
+28302 1 2
+28303 1 2
+28304 1 2
+28305 1 2
+28306 1 2
+28307 1 2
+28308 1 2
+28309 1 2
+28310 1 2
+28311 1 2
+28312 1 2
+28313 1 2
+28314 1 2
+28315 1 2
+28316 1 2
+28317 1 2
+28318 1 2
+28319 1 2
+28320 1 2
+28321 1 2
+28322 1 2
+28323 1 2
+28324 1 2
+28325 1 2
+28326 1 2
+28327 1 2
+28328 1 2
+28329 1 2
+28330 1 2
+28331 1 2
+28332 1 2
+28333 1 2
+28334 1 2
+28335 1 2
+28336 1 2
+28337 1 2
+28338 1 2
+28339 1 2
+28340 1 2
+28341 1 2
+28342 1 2
+28343 1 2
+28344 1 2
+28345 1 2
+28346 1 2
+28347 1 2
+28348 1 2
+28349 1 2
+28350 1 2
+28351 1 2
+28352 1 2
+28353 1 2
+28354 1 2
+28355 1 2
+28356 1 2
+28357 1 2
+28358 1 2
+28359 1 2
+28360 1 2
+28361 1 2
+28362 1 2
+28363 1 2
+28364 1 2
+28365 1 2
+28366 1 2
+28367 1 2
+28368 1 2
+28369 1 2
+28370 1 2
+28371 1 2
+28372 1 2
+28373 1 2
+28374 1 2
+28375 1 2
+28376 1 2
+28377 1 2
+28378 1 2
+28379 1 2
+28380 1 2
+28381 1 2
+28382 1 2
+28383 1 2
+28384 1 2
+28385 1 2
+28386 1 2
+28387 1 2
+28388 1 2
+28389 1 2
+28390 1 2
+28391 1 2
+28392 1 2
+28393 1 2
+28394 1 2
+28395 1 2
+28396 1 2
+28397 1 2
+28398 1 2
+28399 1 2
+28400 1 2
+28401 1 2
+28402 1 2
+28403 1 2
+28404 1 2
+28405 1 2
+28406 1 2
+28407 1 2
+28408 1 2
+28409 1 2
+28410 1 2
+28411 1 2
+28412 1 2
+28413 1 2
+28414 1 2
+28415 1 2
+28416 1 2
+28417 1 2
+28418 1 2
+28419 1 2
+28420 1 2
+28421 1 2
+28422 1 2
+28423 1 2
+28424 1 2
+28425 1 2
+28426 1 2
+28427 1 2
+28428 1 2
+28429 1 2
+28430 1 2
+28431 1 2
+28432 1 2
+28433 1 2
+28434 1 2
+28435 1 2
+28436 1 2
+28437 1 2
+28438 1 2
+28439 1 2
+28440 1 2
+28441 1 2
+28442 1 2
+28443 1 2
+28444 1 2
+28445 1 2
+28446 1 2
+28447 1 2
+28448 1 2
+28449 1 2
+28450 1 2
+28451 1 2
+28452 1 2
+28453 1 2
+28454 1 2
+28455 1 2
+28456 1 2
+28457 1 2
+28458 1 2
+28459 1 2
+28460 1 2
+28461 1 2
+28462 1 2
+28463 1 2
+28464 1 2
+28465 1 2
+28466 1 2
+28467 1 2
+28468 1 2
+28469 1 2
+28470 1 2
+28471 1 2
+28472 1 2
+28473 1 2
+28474 1 2
+28475 1 2
+28476 1 2
+28477 1 2
+28478 1 2
+28479 1 2
+28480 1 2
+28481 1 2
+28482 1 2
+28483 1 2
+28484 1 2
+28485 1 2
+28486 1 2
+28487 1 2
+28488 1 2
+28489 1 2
+28490 1 2
+28491 1 2
+28492 1 2
+28493 1 2
+28494 1 2
+28495 1 2
+28496 1 2
+28497 1 2
+28498 1 2
+28499 1 2
+28500 1 2
+28501 1 2
+28502 1 2
+28503 1 2
+28504 1 2
+28505 1 2
+28506 1 2
+28507 1 2
+28508 1 2
+28509 1 2
+28510 1 2
+28511 1 2
+28512 1 2
+28513 1 2
+28514 1 2
+28515 1 2
+28516 1 2
+28517 1 2
+28518 1 2
+28519 1 2
+28520 1 2
+28521 1 2
+28522 1 2
+28523 1 2
+28524 1 2
+28525 1 2
+28526 1 2
+28527 1 2
+28528 1 2
+28529 1 2
+28530 1 2
+28531 1 2
+28532 1 2
+28533 1 2
+28534 1 2
+28535 1 2
+28536 1 2
+28537 1 2
+28538 1 2
+28539 1 2
+28540 1 2
+28541 1 2
+28542 1 2
+28543 1 2
+28544 1 2
+28545 1 2
+28546 1 2
+28547 1 2
+28548 1 2
+28549 1 2
+28550 1 2
+28551 1 2
+28552 1 2
+28553 1 2
+28554 1 2
+28555 1 2
+28556 1 2
+28557 1 2
+28558 1 2
+28559 1 2
+28560 1 2
+28561 1 2
+28562 1 2
+28563 1 2
+28564 1 2
+28565 1 2
+28566 1 2
+28567 1 2
+28568 1 2
+28569 1 2
+28570 1 2
+28571 1 2
+28572 1 2
+28573 1 2
+28574 1 2
+28575 1 2
+28576 1 2
+28577 1 2
+28578 1 2
+28579 1 2
+28580 1 2
+28581 1 2
+28582 1 2
+28583 1 2
+28584 1 2
+28585 1 2
+28586 1 2
+28587 1 2
+28588 1 2
+28589 1 2
+28590 1 2
+28591 1 2
+28592 1 2
+28593 1 2
+28594 1 2
+28595 1 2
+28596 1 2
+28597 1 2
+28598 1 2
+28599 1 2
+28600 1 2
+28601 1 2
+28602 1 2
+28603 1 2
+28604 1 2
+28605 1 2
+28606 1 2
+28607 1 2
+28608 1 2
+28609 1 2
+28610 1 2
+28611 1 2
+28612 1 2
+28613 1 2
+28614 1 2
+28615 1 2
+28616 1 2
+28617 1 2
+28618 1 2
+28619 1 2
+28620 1 2
+28621 1 2
+28622 1 2
+28623 1 2
+28624 1 2
+28625 1 2
+28626 1 2
+28627 1 2
+28628 1 2
+28629 1 2
+28630 1 2
+28631 1 2
+28632 1 2
+28633 1 2
+28634 1 2
+28635 1 2
+28636 1 2
+28637 1 2
+28638 1 2
+28639 1 2
+28640 1 2
+28641 1 2
+28642 1 2
+28643 1 2
+28644 1 2
+28645 1 2
+28646 1 2
+28647 1 2
+28648 1 2
+28649 1 2
+28650 1 2
+28651 1 2
+28652 1 2
+28653 1 2
+28654 1 2
+28655 1 2
+28656 1 2
+28657 1 2
+28658 1 2
+28659 1 2
+28660 1 2
+28661 1 2
+28662 1 2
+28663 1 2
+28664 1 2
+28665 1 2
+28666 1 2
+28667 1 2
+28668 1 2
+28669 1 2
+28670 1 2
+28671 1 2
+28672 1 2
+28673 1 2
+28674 1 2
+28675 1 2
+28676 1 2
+28677 1 2
+28678 1 2
+28679 1 2
+28680 1 2
+28681 1 2
+28682 1 2
+28683 1 2
+28684 1 2
+28685 1 2
+28686 1 2
+28687 1 2
+28688 1 2
+28689 1 2
+28690 1 2
+28691 1 2
+28692 1 2
+28693 1 2
+28694 1 2
+28695 1 2
+28696 1 2
+28697 1 2
+28698 1 2
+28699 1 2
+28700 1 2
+28701 1 2
+28702 1 2
+28703 1 2
+28704 1 2
+28705 1 2
+28706 1 2
+28707 1 2
+28708 1 2
+28709 1 2
+28710 1 2
+28711 1 2
+28712 1 2
+28713 1 2
+28714 1 2
+28715 1 2
+28716 1 2
+28717 1 2
+28718 1 2
+28719 1 2
+28720 1 2
+28721 1 2
+28722 1 2
+28723 1 2
+28724 1 2
+28725 1 2
+28726 1 2
+28727 1 2
+28728 1 2
+28729 1 2
+28730 1 2
+28731 1 2
+28732 1 2
+28733 1 2
+28734 1 2
+28735 1 2
+28736 1 2
+28737 1 2
+28738 1 2
+28739 1 2
+28740 1 2
+28741 1 2
+28742 1 2
+28743 1 2
+28744 1 2
+28745 1 2
+28746 1 2
+28747 1 2
+28748 1 2
+28749 1 2
+28750 1 2
+28751 1 2
+28752 1 2
+28753 1 2
+28754 1 2
+28755 1 2
+28756 1 2
+28757 1 2
+28758 1 2
+28759 1 2
+28760 1 2
+28761 1 2
+28762 1 2
+28763 1 2
+28764 1 2
+28765 1 2
+28766 1 2
+28767 1 2
+28768 1 2
+28769 1 2
+28770 1 2
+28771 1 2
+28772 1 2
+28773 1 2
+28774 1 2
+28775 1 2
+28776 1 2
+28777 1 2
+28778 1 2
+28779 1 2
+28780 1 2
+28781 1 2
+28782 1 2
+28783 1 2
+28784 1 2
+28785 1 2
+28786 1 2
+28787 1 2
+28788 1 2
+28789 1 2
+28790 1 2
+28791 1 2
+28792 1 2
+28793 1 2
+28794 1 2
+28795 1 2
+28796 1 2
+28797 1 2
+28798 1 2
+28799 1 2
+28800 1 2
+28801 1 2
+28802 1 2
+28803 1 2
+28804 1 2
+28805 1 2
+28806 1 2
+28807 1 2
+28808 1 2
+28809 1 2
+28810 1 2
+28811 1 2
+28812 1 2
+28813 1 2
+28814 1 2
+28815 1 2
+28816 1 2
+28817 1 2
+28818 1 2
+28819 1 2
+28820 1 2
+28821 1 2
+28822 1 2
+28823 1 2
+28824 1 2
+28825 1 2
+28826 1 2
+28827 1 2
+28828 1 2
+28829 1 2
+28830 1 2
+28831 1 2
+28832 1 2
+28833 1 2
+28834 1 2
+28835 1 2
+28836 1 2
+28837 1 2
+28838 1 2
+28839 1 2
+28840 1 2
+28841 1 2
+28842 1 2
+28843 1 2
+28844 1 2
+28845 1 2
+28846 1 2
+28847 1 2
+28848 1 2
+28849 1 2
+28850 1 2
+28851 1 2
+28852 1 2
+28853 1 2
+28854 1 2
+28855 1 2
+28856 1 2
+28857 1 2
+28858 1 2
+28859 1 2
+28860 1 2
+28861 1 2
+28862 1 2
+28863 1 2
+28864 1 2
+28865 1 2
+28866 1 2
+28867 1 2
+28868 1 2
+28869 1 2
+28870 1 2
+28871 1 2
+28872 1 2
+28873 1 2
+28874 1 2
+28875 1 2
+28876 1 2
+28877 1 2
+28878 1 2
+28879 1 2
+28880 1 2
+28881 1 2
+28882 1 2
+28883 1 2
+28884 1 2
+28885 1 2
+28886 1 2
+28887 1 2
+28888 1 2
+28889 1 2
+28890 1 2
+28891 1 2
+28892 1 2
+28893 1 2
+28894 1 2
+28895 1 2
+28896 1 2
+28897 1 2
+28898 1 2
+28899 1 2
+28900 1 2
+28901 1 2
+28902 1 2
+28903 1 2
+28904 1 2
+28905 1 2
+28906 1 2
+28907 1 2
+28908 1 2
+28909 1 2
+28910 1 2
+28911 1 2
+28912 1 2
+28913 1 2
+28914 1 2
+28915 1 2
+28916 1 2
+28917 1 2
+28918 1 2
+28919 1 2
+28920 1 2
+28921 1 2
+28922 1 2
+28923 1 2
+28924 1 2
+28925 1 2
+28926 1 2
+28927 1 2
+28928 1 2
+28929 1 2
+28930 1 2
+28931 1 2
+28932 1 2
+28933 1 2
+28934 1 2
+28935 1 2
+28936 1 2
+28937 1 2
+28938 1 2
+28939 1 2
+28940 1 2
+28941 1 2
+28942 1 2
+28943 1 2
+28944 1 2
+28945 1 2
+28946 1 2
+28947 1 2
+28948 1 2
+28949 1 2
+28950 1 2
+28951 1 2
+28952 1 2
+28953 1 2
+28954 1 2
+28955 1 2
+28956 1 2
+28957 1 2
+28958 1 2
+28959 1 2
+28960 1 2
+28961 1 2
+28962 1 2
+28963 1 2
+28964 1 2
+28965 1 2
+28966 1 2
+28967 1 2
+28968 1 2
+28969 1 2
+28970 1 2
+28971 1 2
+28972 1 2
+28973 1 2
+28974 1 2
+28975 1 2
+28976 1 2
+28977 1 2
+28978 1 2
+28979 1 2
+28980 1 2
+28981 1 2
+28982 1 2
+28983 1 2
+28984 1 2
+28985 1 2
+28986 1 2
+28987 1 2
+28988 1 2
+28989 1 2
+28990 1 2
+28991 1 2
+28992 1 2
+28993 1 2
+28994 1 2
+28995 1 2
+28996 1 2
+28997 1 2
+28998 1 2
+28999 1 2
+29000 1 2
+29001 1 2
+29002 1 2
+29003 1 2
+29004 1 2
+29005 1 2
+29006 1 2
+29007 1 2
+29008 1 2
+29009 1 2
+29010 1 2
+29011 1 2
+29012 1 2
+29013 1 2
+29014 1 2
+29015 1 2
+29016 1 2
+29017 1 2
+29018 1 2
+29019 1 2
+29020 1 2
+29021 1 2
+29022 1 2
+29023 1 2
+29024 1 2
+29025 1 2
+29026 1 2
+29027 1 2
+29028 1 2
+29029 1 2
+29030 1 2
+29031 1 2
+29032 1 2
+29033 1 2
+29034 1 2
+29035 1 2
+29036 1 2
+29037 1 2
+29038 1 2
+29039 1 2
+29040 1 2
+29041 1 2
+29042 1 2
+29043 1 2
+29044 1 2
+29045 1 2
+29046 1 2
+29047 1 2
+29048 1 2
+29049 1 2
+29050 1 2
+29051 1 2
+29052 1 2
+29053 1 2
+29054 1 2
+29055 1 2
+29056 1 2
+29057 1 2
+29058 1 2
+29059 1 2
+29060 1 2
+29061 1 2
+29062 1 2
+29063 1 2
+29064 1 2
+29065 1 2
+29066 1 2
+29067 1 2
+29068 1 2
+29069 1 2
+29070 1 2
+29071 1 2
+29072 1 2
+29073 1 2
+29074 1 2
+29075 1 2
+29076 1 2
+29077 1 2
+29078 1 2
+29079 1 2
+29080 1 2
+29081 1 2
+29082 1 2
+29083 1 2
+29084 1 2
+29085 1 2
+29086 1 2
+29087 1 2
+29088 1 2
+29089 1 2
+29090 1 2
+29091 1 2
+29092 1 2
+29093 1 2
+29094 1 2
+29095 1 2
+29096 1 2
+29097 1 2
+29098 1 2
+29099 1 2
+29100 1 2
+29101 1 2
+29102 1 2
+29103 1 2
+29104 1 2
+29105 1 2
+29106 1 2
+29107 1 2
+29108 1 2
+29109 1 2
+29110 1 2
+29111 1 2
+29112 1 2
+29113 1 2
+29114 1 2
+29115 1 2
+29116 1 2
+29117 1 2
+29118 1 2
+29119 1 2
+29120 1 2
+29121 1 2
+29122 1 2
+29123 1 2
+29124 1 2
+29125 1 2
+29126 1 2
+29127 1 2
+29128 1 2
+29129 1 2
+29130 1 2
+29131 1 2
+29132 1 2
+29133 1 2
+29134 1 2
+29135 1 2
+29136 1 2
+29137 1 2
+29138 1 2
+29139 1 2
+29140 1 2
+29141 1 2
+29142 1 2
+29143 1 2
+29144 1 2
+29145 1 2
+29146 1 2
+29147 1 2
+29148 1 2
+29149 1 2
+29150 1 2
+29151 1 2
+29152 1 2
+29153 1 2
+29154 1 2
+29155 1 2
+29156 1 2
+29157 1 2
+29158 1 2
+29159 1 2
+29160 1 2
+29161 1 2
+29162 1 2
+29163 1 2
+29164 1 2
+29165 1 2
+29166 1 2
+29167 1 2
+29168 1 2
+29169 1 2
+29170 1 2
+29171 1 2
+29172 1 2
+29173 1 2
+29174 1 2
+29175 1 2
+29176 1 2
+29177 1 2
+29178 1 2
+29179 1 2
+29180 1 2
+29181 1 2
+29182 1 2
+29183 1 2
+29184 1 2
+29185 1 2
+29186 1 2
+29187 1 2
+29188 1 2
+29189 1 2
+29190 1 2
+29191 1 2
+29192 1 2
+29193 1 2
+29194 1 2
+29195 1 2
+29196 1 2
+29197 1 2
+29198 1 2
+29199 1 2
+29200 1 2
+29201 1 2
+29202 1 2
+29203 1 2
+29204 1 2
+29205 1 2
+29206 1 2
+29207 1 2
+29208 1 2
+29209 1 2
+29210 1 2
+29211 1 2
+29212 1 2
+29213 1 2
+29214 1 2
+29215 1 2
+29216 1 2
+29217 1 2
+29218 1 2
+29219 1 2
+29220 1 2
+29221 1 2
+29222 1 2
+29223 1 2
+29224 1 2
+29225 1 2
+29226 1 2
+29227 1 2
+29228 1 2
+29229 1 2
+29230 1 2
+29231 1 2
+29232 1 2
+29233 1 2
+29234 1 2
+29235 1 2
+29236 1 2
+29237 1 2
+29238 1 2
+29239 1 2
+29240 1 2
+29241 1 2
+29242 1 2
+29243 1 2
+29244 1 2
+29245 1 2
+29246 1 2
+29247 1 2
+29248 1 2
+29249 1 2
+29250 1 2
+29251 1 2
+29252 1 2
+29253 1 2
+29254 1 2
+29255 1 2
+29256 1 2
+29257 1 2
+29258 1 2
+29259 1 2
+29260 1 2
+29261 1 2
+29262 1 2
+29263 1 2
+29264 1 2
+29265 1 2
+29266 1 2
+29267 1 2
+29268 1 2
+29269 1 2
+29270 1 2
+29271 1 2
+29272 1 2
+29273 1 2
+29274 1 2
+29275 1 2
+29276 1 2
+29277 1 2
+29278 1 2
+29279 1 2
+29280 1 2
+29281 1 2
+29282 1 2
+29283 1 2
+29284 1 2
+29285 1 2
+29286 1 2
+29287 1 2
+29288 1 2
+29289 1 2
+29290 1 2
+29291 1 2
+29292 1 2
+29293 1 2
+29294 1 2
+29295 1 2
+29296 1 2
+29297 1 2
+29298 1 2
+29299 1 2
+29300 1 2
+29301 1 2
+29302 1 2
+29303 1 2
+29304 1 2
+29305 1 2
+29306 1 2
+29307 1 2
+29308 1 2
+29309 1 2
+29310 1 2
+29311 1 2
+29312 1 2
+29313 1 2
+29314 1 2
+29315 1 2
+29316 1 2
+29317 1 2
+29318 1 2
+29319 1 2
+29320 1 2
+29321 1 2
+29322 1 2
+29323 1 2
+29324 1 2
+29325 1 2
+29326 1 2
+29327 1 2
+29328 1 2
+29329 1 2
+29330 1 2
+29331 1 2
+29332 1 2
+29333 1 2
+29334 1 2
+29335 1 2
+29336 1 2
+29337 1 2
+29338 1 2
+29339 1 2
+29340 1 2
+29341 1 2
+29342 1 2
+29343 1 2
+29344 1 2
+29345 1 2
+29346 1 2
+29347 1 2
+29348 1 2
+29349 1 2
+29350 1 2
+29351 1 2
+29352 1 2
+29353 1 2
+29354 1 2
+29355 1 2
+29356 1 2
+29357 1 2
+29358 1 2
+29359 1 2
+29360 1 2
+29361 1 2
+29362 1 2
+29363 1 2
+29364 1 2
+29365 1 2
+29366 1 2
+29367 1 2
+29368 1 2
+29369 1 2
+29370 1 2
+29371 1 2
+29372 1 2
+29373 1 2
+29374 1 2
+29375 1 2
+29376 1 2
+29377 1 2
+29378 1 2
+29379 1 2
+29380 1 2
+29381 1 2
+29382 1 2
+29383 1 2
+29384 1 2
+29385 1 2
+29386 1 2
+29387 1 2
+29388 1 2
+29389 1 2
+29390 1 2
+29391 1 2
+29392 1 2
+29393 1 2
+29394 1 2
+29395 1 2
+29396 1 2
+29397 1 2
+29398 1 2
+29399 1 2
+29400 1 2
+29401 1 2
+29402 1 2
+29403 1 2
+29404 1 2
+29405 1 2
+29406 1 2
+29407 1 2
+29408 1 2
+29409 1 2
+29410 1 2
+29411 1 2
+29412 1 2
+29413 1 2
+29414 1 2
+29415 1 2
+29416 1 2
+29417 1 2
+29418 1 2
+29419 1 2
+29420 1 2
+29421 1 2
+29422 1 2
+29423 1 2
+29424 1 2
+29425 1 2
+29426 1 2
+29427 1 2
+29428 1 2
+29429 1 2
+29430 1 2
+29431 1 2
+29432 1 2
+29433 1 2
+29434 1 2
+29435 1 2
+29436 1 2
+29437 1 2
+29438 1 2
+29439 1 2
+29440 1 2
+29441 1 2
+29442 1 2
+29443 1 2
+29444 1 2
+29445 1 2
+29446 1 2
+29447 1 2
+29448 1 2
+29449 1 2
+29450 1 2
+29451 1 2
+29452 1 2
+29453 1 2
+29454 1 2
+29455 1 2
+29456 1 2
+29457 1 2
+29458 1 2
+29459 1 2
+29460 1 2
+29461 1 2
+29462 1 2
+29463 1 2
+29464 1 2
+29465 1 2
+29466 1 2
+29467 1 2
+29468 1 2
+29469 1 2
+29470 1 2
+29471 1 2
+29472 1 2
+29473 1 2
+29474 1 2
+29475 1 2
+29476 1 2
+29477 1 2
+29478 1 2
+29479 1 2
+29480 1 2
+29481 1 2
+29482 1 2
+29483 1 2
+29484 1 2
+29485 1 2
+29486 1 2
+29487 1 2
+29488 1 2
+29489 1 2
+29490 1 2
+29491 1 2
+29492 1 2
+29493 1 2
+29494 1 2
+29495 1 2
+29496 1 2
+29497 1 2
+29498 1 2
+29499 1 2
+29500 1 2
+29501 1 2
+29502 1 2
+29503 1 2
+29504 1 2
+29505 1 2
+29506 1 2
+29507 1 2
+29508 1 2
+29509 1 2
+29510 1 2
+29511 1 2
+29512 1 2
+29513 1 2
+29514 1 2
+29515 1 2
+29516 1 2
+29517 1 2
+29518 1 2
+29519 1 2
+29520 1 2
+29521 1 2
+29522 1 2
+29523 1 2
+29524 1 2
+29525 1 2
+29526 1 2
+29527 1 2
+29528 1 2
+29529 1 2
+29530 1 2
+29531 1 2
+29532 1 2
+29533 1 2
+29534 1 2
+29535 1 2
+29536 1 2
+29537 1 2
+29538 1 2
+29539 1 2
+29540 1 2
+29541 1 2
+29542 1 2
+29543 1 2
+29544 1 2
+29545 1 2
+29546 1 2
+29547 1 2
+29548 1 2
+29549 1 2
+29550 1 2
+29551 1 2
+29552 1 2
+29553 1 2
+29554 1 2
+29555 1 2
+29556 1 2
+29557 1 2
+29558 1 2
+29559 1 2
+29560 1 2
+29561 1 2
+29562 1 2
+29563 1 2
+29564 1 2
+29565 1 2
+29566 1 2
+29567 1 2
+29568 1 2
+29569 1 2
+29570 1 2
+29571 1 2
+29572 1 2
+29573 1 2
+29574 1 2
+29575 1 2
+29576 1 2
+29577 1 2
+29578 1 2
+29579 1 2
+29580 1 2
+29581 1 2
+29582 1 2
+29583 1 2
+29584 1 2
+29585 1 2
+29586 1 2
+29587 1 2
+29588 1 2
+29589 1 2
+29590 1 2
+29591 1 2
+29592 1 2
+29593 1 2
+29594 1 2
+29595 1 2
+29596 1 2
+29597 1 2
+29598 1 2
+29599 1 2
+29600 1 2
+29601 1 2
+29602 1 2
+29603 1 2
+29604 1 2
+29605 1 2
+29606 1 2
+29607 1 2
+29608 1 2
+29609 1 2
+29610 1 2
+29611 1 2
+29612 1 2
+29613 1 2
+29614 1 2
+29615 1 2
+29616 1 2
+29617 1 2
+29618 1 2
+29619 1 2
+29620 1 2
+29621 1 2
+29622 1 2
+29623 1 2
+29624 1 2
+29625 1 2
+29626 1 2
+29627 1 2
+29628 1 2
+29629 1 2
+29630 1 2
+29631 1 2
+29632 1 2
+29633 1 2
+29634 1 2
+29635 1 2
+29636 1 2
+29637 1 2
+29638 1 2
+29639 1 2
+29640 1 2
+29641 1 2
+29642 1 2
+29643 1 2
+29644 1 2
+29645 1 2
+29646 1 2
+29647 1 2
+29648 1 2
+29649 1 2
+29650 1 2
+29651 1 2
+29652 1 2
+29653 1 2
+29654 1 2
+29655 1 2
+29656 1 2
+29657 1 2
+29658 1 2
+29659 1 2
+29660 1 2
+29661 1 2
+29662 1 2
+29663 1 2
+29664 1 2
+29665 1 2
+29666 1 2
+29667 1 2
+29668 1 2
+29669 1 2
+29670 1 2
+29671 1 2
+29672 1 2
+29673 1 2
+29674 1 2
+29675 1 2
+29676 1 2
+29677 1 2
+29678 1 2
+29679 1 2
+29680 1 2
+29681 1 2
+29682 1 2
+29683 1 2
+29684 1 2
+29685 1 2
+29686 1 2
+29687 1 2
+29688 1 2
+29689 1 2
+29690 1 2
+29691 1 2
+29692 1 2
+29693 1 2
+29694 1 2
+29695 1 2
+29696 1 2
+29697 1 2
+29698 1 2
+29699 1 2
+29700 1 2
+29701 1 2
+29702 1 2
+29703 1 2
+29704 1 2
+29705 1 2
+29706 1 2
+29707 1 2
+29708 1 2
+29709 1 2
+29710 1 2
+29711 1 2
+29712 1 2
+29713 1 2
+29714 1 2
+29715 1 2
+29716 1 2
+29717 1 2
+29718 1 2
+29719 1 2
+29720 1 2
+29721 1 2
+29722 1 2
+29723 1 2
+29724 1 2
+29725 1 2
+29726 1 2
+29727 1 2
+29728 1 2
+29729 1 2
+29730 1 2
+29731 1 2
+29732 1 2
+29733 1 2
+29734 1 2
+29735 1 2
+29736 1 2
+29737 1 2
+29738 1 2
+29739 1 2
+29740 1 2
+29741 1 2
+29742 1 2
+29743 1 2
+29744 1 2
+29745 1 2
+29746 1 2
+29747 1 2
+29748 1 2
+29749 1 2
+29750 1 2
+29751 1 2
+29752 1 2
+29753 1 2
+29754 1 2
+29755 1 2
+29756 1 2
+29757 1 2
+29758 1 2
+29759 1 2
+29760 1 2
+29761 1 2
+29762 1 2
+29763 1 2
+29764 1 2
+29765 1 2
+29766 1 2
+29767 1 2
+29768 1 2
+29769 1 2
+29770 1 2
+29771 1 2
+29772 1 2
+29773 1 2
+29774 1 2
+29775 1 2
+29776 1 2
+29777 1 2
+29778 1 2
+29779 1 2
+29780 1 2
+29781 1 2
+29782 1 2
+29783 1 2
+29784 1 2
+29785 1 2
+29786 1 2
+29787 1 2
+29788 1 2
+29789 1 2
+29790 1 2
+29791 1 2
+29792 1 2
+29793 1 2
+29794 1 2
+29795 1 2
+29796 1 2
+29797 1 2
+29798 1 2
+29799 1 2
+29800 1 2
+29801 1 2
+29802 1 2
+29803 1 2
+29804 1 2
+29805 1 2
+29806 1 2
+29807 1 2
+29808 1 2
+29809 1 2
+29810 1 2
+29811 1 2
+29812 1 2
+29813 1 2
+29814 1 2
+29815 1 2
+29816 1 2
+29817 1 2
+29818 1 2
+29819 1 2
+29820 1 2
+29821 1 2
+29822 1 2
+29823 1 2
+29824 1 2
+29825 1 2
+29826 1 2
+29827 1 2
+29828 1 2
+29829 1 2
+29830 1 2
+29831 1 2
+29832 1 2
+29833 1 2
+29834 1 2
+29835 1 2
+29836 1 2
+29837 1 2
+29838 1 2
+29839 1 2
+29840 1 2
+29841 1 2
+29842 1 2
+29843 1 2
+29844 1 2
+29845 1 2
+29846 1 2
+29847 1 2
+29848 1 2
+29849 1 2
+29850 1 2
+29851 1 2
+29852 1 2
+29853 1 2
+29854 1 2
+29855 1 2
+29856 1 2
+29857 1 2
+29858 1 2
+29859 1 2
+29860 1 2
+29861 1 2
+29862 1 2
+29863 1 2
+29864 1 2
+29865 1 2
+29866 1 2
+29867 1 2
+29868 1 2
+29869 1 2
+29870 1 2
+29871 1 2
+29872 1 2
+29873 1 2
+29874 1 2
+29875 1 2
+29876 1 2
+29877 1 2
+29878 1 2
+29879 1 2
+29880 1 2
+29881 1 2
+29882 1 2
+29883 1 2
+29884 1 2
+29885 1 2
+29886 1 2
+29887 1 2
+29888 1 2
+29889 1 2
+29890 1 2
+29891 1 2
+29892 1 2
+29893 1 2
+29894 1 2
+29895 1 2
+29896 1 2
+29897 1 2
+29898 1 2
+29899 1 2
+29900 1 2
+29901 1 2
+29902 1 2
+29903 1 2
+29904 1 2
+29905 1 2
+29906 1 2
+29907 1 2
+29908 1 2
+29909 1 2
+29910 1 2
+29911 1 2
+29912 1 2
+29913 1 2
+29914 1 2
+29915 1 2
+29916 1 2
+29917 1 2
+29918 1 2
+29919 1 2
+29920 1 2
+29921 1 2
+29922 1 2
+29923 1 2
+29924 1 2
+29925 1 2
+29926 1 2
+29927 1 2
+29928 1 2
+29929 1 2
+29930 1 2
+29931 1 2
+29932 1 2
+29933 1 2
+29934 1 2
+29935 1 2
+29936 1 2
+29937 1 2
+29938 1 2
+29939 1 2
+29940 1 2
+29941 1 2
+29942 1 2
+29943 1 2
+29944 1 2
+29945 1 2
+29946 1 2
+29947 1 2
+29948 1 2
+29949 1 2
+29950 1 2
+29951 1 2
+29952 1 2
+29953 1 2
+29954 1 2
+29955 1 2
+29956 1 2
+29957 1 2
+29958 1 2
+29959 1 2
+29960 1 2
+29961 1 2
+29962 1 2
+29963 1 2
+29964 1 2
+29965 1 2
+29966 1 2
+29967 1 2
+29968 1 2
+29969 1 2
+29970 1 2
+29971 1 2
+29972 1 2
+29973 1 2
+29974 1 2
+29975 1 2
+29976 1 2
+29977 1 2
+29978 1 2
+29979 1 2
+29980 1 2
+29981 1 2
+29982 1 2
+29983 1 2
+29984 1 2
+29985 1 2
+29986 1 2
+29987 1 2
+29988 1 2
+29989 1 2
+29990 1 2
+29991 1 2
+29992 1 2
+29993 1 2
+29994 1 2
+29995 1 2
+29996 1 2
+29997 1 2
+29998 1 2
+29999 1 2
+30000 1 2
+30001 1 2
+30002 1 2
+30003 1 2
+30004 1 2
+30005 1 2
+30006 1 2
+30007 1 2
+30008 1 2
+30009 1 2
+30010 1 2
+30011 1 2
+30012 1 2
+30013 1 2
+30014 1 2
+30015 1 2
+30016 1 2
+30017 1 2
+30018 1 2
+30019 1 2
+30020 1 2
+30021 1 2
+30022 1 2
+30023 1 2
+30024 1 2
+30025 1 2
+30026 1 2
+30027 1 2
+30028 1 2
+30029 1 2
+30030 1 2
+30031 1 2
+30032 1 2
+30033 1 2
+30034 1 2
+30035 1 2
+30036 1 2
+30037 1 2
+30038 1 2
+30039 1 2
+30040 1 2
+30041 1 2
+30042 1 2
+30043 1 2
+30044 1 2
+30045 1 2
+30046 1 2
+30047 1 2
+30048 1 2
+30049 1 2
+30050 1 2
+30051 1 2
+30052 1 2
+30053 1 2
+30054 1 2
+30055 1 2
+30056 1 2
+30057 1 2
+30058 1 2
+30059 1 2
+30060 1 2
+30061 1 2
+30062 1 2
+30063 1 2
+30064 1 2
+30065 1 2
+30066 1 2
+30067 1 2
+30068 1 2
+30069 1 2
+30070 1 2
+30071 1 2
+30072 1 2
+30073 1 2
+30074 1 2
+30075 1 2
+30076 1 2
+30077 1 2
+30078 1 2
+30079 1 2
+30080 1 2
+30081 1 2
+30082 1 2
+30083 1 2
+30084 1 2
+30085 1 2
+30086 1 2
+30087 1 2
+30088 1 2
+30089 1 2
+30090 1 2
+30091 1 2
+30092 1 2
+30093 1 2
+30094 1 2
+30095 1 2
+30096 1 2
+30097 1 2
+30098 1 2
+30099 1 2
+30100 1 2
+30101 1 2
+30102 1 2
+30103 1 2
+30104 1 2
+30105 1 2
+30106 1 2
+30107 1 2
+30108 1 2
+30109 1 2
+30110 1 2
+30111 1 2
+30112 1 2
+30113 1 2
+30114 1 2
+30115 1 2
+30116 1 2
+30117 1 2
+30118 1 2
+30119 1 2
+30120 1 2
+30121 1 2
+30122 1 2
+30123 1 2
+30124 1 2
+30125 1 2
+30126 1 2
+30127 1 2
+30128 1 2
+30129 1 2
+30130 1 2
+30131 1 2
+30132 1 2
+30133 1 2
+30134 1 2
+30135 1 2
+30136 1 2
+30137 1 2
+30138 1 2
+30139 1 2
+30140 1 2
+30141 1 2
+30142 1 2
+30143 1 2
+30144 1 2
+30145 1 2
+30146 1 2
+30147 1 2
+30148 1 2
+30149 1 2
+30150 1 2
+30151 1 2
+30152 1 2
+30153 1 2
+30154 1 2
+30155 1 2
+30156 1 2
+30157 1 2
+30158 1 2
+30159 1 2
+30160 1 2
+30161 1 2
+30162 1 2
+30163 1 2
+30164 1 2
+30165 1 2
+30166 1 2
+30167 1 2
+30168 1 2
+30169 1 2
+30170 1 2
+30171 1 2
+30172 1 2
+30173 1 2
+30174 1 2
+30175 1 2
+30176 1 2
+30177 1 2
+30178 1 2
+30179 1 2
+30180 1 2
+30181 1 2
+30182 1 2
+30183 1 2
+30184 1 2
+30185 1 2
+30186 1 2
+30187 1 2
+30188 1 2
+30189 1 2
+30190 1 2
+30191 1 2
+30192 1 2
+30193 1 2
+30194 1 2
+30195 1 2
+30196 1 2
+30197 1 2
+30198 1 2
+30199 1 2
+30200 1 2
+30201 1 2
+30202 1 2
+30203 1 2
+30204 1 2
+30205 1 2
+30206 1 2
+30207 1 2
+30208 1 2
+30209 1 2
+30210 1 2
+30211 1 2
+30212 1 2
+30213 1 2
+30214 1 2
+30215 1 2
+30216 1 2
+30217 1 2
+30218 1 2
+30219 1 2
+30220 1 2
+30221 1 2
+30222 1 2
+30223 1 2
+30224 1 2
+30225 1 2
+30226 1 2
+30227 1 2
+30228 1 2
+30229 1 2
+30230 1 2
+30231 1 2
+30232 1 2
+30233 1 2
+30234 1 2
+30235 1 2
+30236 1 2
+30237 1 2
+30238 1 2
+30239 1 2
+30240 1 2
+30241 1 2
+30242 1 2
+30243 1 2
+30244 1 2
+30245 1 2
+30246 1 2
+30247 1 2
+30248 1 2
+30249 1 2
+30250 1 2
+30251 1 2
+30252 1 2
+30253 1 2
+30254 1 2
+30255 1 2
+30256 1 2
+30257 1 2
+30258 1 2
+30259 1 2
+30260 1 2
+30261 1 2
+30262 1 2
+30263 1 2
+30264 1 2
+30265 1 2
+30266 1 2
+30267 1 2
+30268 1 2
+30269 1 2
+30270 1 2
+30271 1 2
+30272 1 2
+30273 1 2
+30274 1 2
+30275 1 2
+30276 1 2
+30277 1 2
+30278 1 2
+30279 1 2
+30280 1 2
+30281 1 2
+30282 1 2
+30283 1 2
+30284 1 2
+30285 1 2
+30286 1 2
+30287 1 2
+30288 1 2
+30289 1 2
+30290 1 2
+30291 1 2
+30292 1 2
+30293 1 2
+30294 1 2
+30295 1 2
+30296 1 2
+30297 1 2
+30298 1 2
+30299 1 2
+30300 1 2
+30301 1 2
+30302 1 2
+30303 1 2
+30304 1 2
+30305 1 2
+30306 1 2
+30307 1 2
+30308 1 2
+30309 1 2
+30310 1 2
+30311 1 2
+30312 1 2
+30313 1 2
+30314 1 2
+30315 1 2
+30316 1 2
+30317 1 2
+30318 1 2
+30319 1 2
+30320 1 2
+30321 1 2
+30322 1 2
+30323 1 2
+30324 1 2
+30325 1 2
+30326 1 2
+30327 1 2
+30328 1 2
+30329 1 2
+30330 1 2
+30331 1 2
+30332 1 2
+30333 1 2
+30334 1 2
+30335 1 2
+30336 1 2
+30337 1 2
+30338 1 2
+30339 1 2
+30340 1 2
+30341 1 2
+30342 1 2
+30343 1 2
+30344 1 2
+30345 1 2
+30346 1 2
+30347 1 2
+30348 1 2
+30349 1 2
+30350 1 2
+30351 1 2
+30352 1 2
+30353 1 2
+30354 1 2
+30355 1 2
+30356 1 2
+30357 1 2
+30358 1 2
+30359 1 2
+30360 1 2
+30361 1 2
+30362 1 2
+30363 1 2
+30364 1 2
+30365 1 2
+30366 1 2
+30367 1 2
+30368 1 2
+30369 1 2
+30370 1 2
+30371 1 2
+30372 1 2
+30373 1 2
+30374 1 2
+30375 1 2
+30376 1 2
+30377 1 2
+30378 1 2
+30379 1 2
+30380 1 2
+30381 1 2
+30382 1 2
+30383 1 2
+30384 1 2
+30385 1 2
+30386 1 2
+30387 1 2
+30388 1 2
+30389 1 2
+30390 1 2
+30391 1 2
+30392 1 2
+30393 1 2
+30394 1 2
+30395 1 2
+30396 1 2
+30397 1 2
+30398 1 2
+30399 1 2
+30400 1 2
+30401 1 2
+30402 1 2
+30403 1 2
+30404 1 2
+30405 1 2
+30406 1 2
+30407 1 2
+30408 1 2
+30409 1 2
+30410 1 2
+30411 1 2
+30412 1 2
+30413 1 2
+30414 1 2
+30415 1 2
+30416 1 2
+30417 1 2
+30418 1 2
+30419 1 2
+30420 1 2
+30421 1 2
+30422 1 2
+30423 1 2
+30424 1 2
+30425 1 2
+30426 1 2
+30427 1 2
+30428 1 2
+30429 1 2
+30430 1 2
+30431 1 2
+30432 1 2
+30433 1 2
+30434 1 2
+30435 1 2
+30436 1 2
+30437 1 2
+30438 1 2
+30439 1 2
+30440 1 2
+30441 1 2
+30442 1 2
+30443 1 2
+30444 1 2
+30445 1 2
+30446 1 2
+30447 1 2
+30448 1 2
+30449 1 2
+30450 1 2
+30451 1 2
+30452 1 2
+30453 1 2
+30454 1 2
+30455 1 2
+30456 1 2
+30457 1 2
+30458 1 2
+30459 1 2
+30460 1 2
+30461 1 2
+30462 1 2
+30463 1 2
+30464 1 2
+30465 1 2
+30466 1 2
+30467 1 2
+30468 1 2
+30469 1 2
+30470 1 2
+30471 1 2
+30472 1 2
+30473 1 2
+30474 1 2
+30475 1 2
+30476 1 2
+30477 1 2
+30478 1 2
+30479 1 2
+30480 1 2
+30481 1 2
+30482 1 2
+30483 1 2
+30484 1 2
+30485 1 2
+30486 1 2
+30487 1 2
+30488 1 2
+30489 1 2
+30490 1 2
+30491 1 2
+30492 1 2
+30493 1 2
+30494 1 2
+30495 1 2
+30496 1 2
+30497 1 2
+30498 1 2
+30499 1 2
+30500 1 2
+30501 1 2
+30502 1 2
+30503 1 2
+30504 1 2
+30505 1 2
+30506 1 2
+30507 1 2
+30508 1 2
+30509 1 2
+30510 1 2
+30511 1 2
+30512 1 2
+30513 1 2
+30514 1 2
+30515 1 2
+30516 1 2
+30517 1 2
+30518 1 2
+30519 1 2
+30520 1 2
+30521 1 2
+30522 1 2
+30523 1 2
+30524 1 2
+30525 1 2
+30526 1 2
+30527 1 2
+30528 1 2
+30529 1 2
+30530 1 2
+30531 1 2
+30532 1 2
+30533 1 2
+30534 1 2
+30535 1 2
+30536 1 2
+30537 1 2
+30538 1 2
+30539 1 2
+30540 1 2
+30541 1 2
+30542 1 2
+30543 1 2
+30544 1 2
+30545 1 2
+30546 1 2
+30547 1 2
+30548 1 2
+30549 1 2
+30550 1 2
+30551 1 2
+30552 1 2
+30553 1 2
+30554 1 2
+30555 1 2
+30556 1 2
+30557 1 2
+30558 1 2
+30559 1 2
+30560 1 2
+30561 1 2
+30562 1 2
+30563 1 2
+30564 1 2
+30565 1 2
+30566 1 2
+30567 1 2
+30568 1 2
+30569 1 2
+30570 1 2
+30571 1 2
+30572 1 2
+30573 1 2
+30574 1 2
+30575 1 2
+30576 1 2
+30577 1 2
+30578 1 2
+30579 1 2
+30580 1 2
+30581 1 2
+30582 1 2
+30583 1 2
+30584 1 2
+30585 1 2
+30586 1 2
+30587 1 2
+30588 1 2
+30589 1 2
+30590 1 2
+30591 1 2
+30592 1 2
+30593 1 2
+30594 1 2
+30595 1 2
+30596 1 2
+30597 1 2
+30598 1 2
+30599 1 2
+30600 1 2
+30601 1 2
+30602 1 2
+30603 1 2
+30604 1 2
+30605 1 2
+30606 1 2
+30607 1 2
+30608 1 2
+30609 1 2
+30610 1 2
+30611 1 2
+30612 1 2
+30613 1 2
+30614 1 2
+30615 1 2
+30616 1 2
+30617 1 2
+30618 1 2
+30619 1 2
+30620 1 2
+30621 1 2
+30622 1 2
+30623 1 2
+30624 1 2
+30625 1 2
+30626 1 2
+30627 1 2
+30628 1 2
+30629 1 2
+30630 1 2
+30631 1 2
+30632 1 2
+30633 1 2
+30634 1 2
+30635 1 2
+30636 1 2
+30637 1 2
+30638 1 2
+30639 1 2
+30640 1 2
+30641 1 2
+30642 1 2
+30643 1 2
+30644 1 2
+30645 1 2
+30646 1 2
+30647 1 2
+30648 1 2
+30649 1 2
+30650 1 2
+30651 1 2
+30652 1 2
+30653 1 2
+30654 1 2
+30655 1 2
+30656 1 2
+30657 1 2
+30658 1 2
+30659 1 2
+30660 1 2
+30661 1 2
+30662 1 2
+30663 1 2
+30664 1 2
+30665 1 2
+30666 1 2
+30667 1 2
+30668 1 2
+30669 1 2
+30670 1 2
+30671 1 2
+30672 1 2
+30673 1 2
+30674 1 2
+30675 1 2
+30676 1 2
+30677 1 2
+30678 1 2
+30679 1 2
+30680 1 2
+30681 1 2
+30682 1 2
+30683 1 2
+30684 1 2
+30685 1 2
+30686 1 2
+30687 1 2
+30688 1 2
+30689 1 2
+30690 1 2
+30691 1 2
+30692 1 2
+30693 1 2
+30694 1 2
+30695 1 2
+30696 1 2
+30697 1 2
+30698 1 2
+30699 1 2
+30700 1 2
+30701 1 2
+30702 1 2
+30703 1 2
+30704 1 2
+30705 1 2
+30706 1 2
+30707 1 2
+30708 1 2
+30709 1 2
+30710 1 2
+30711 1 2
+30712 1 2
+30713 1 2
+30714 1 2
+30715 1 2
+30716 1 2
+30717 1 2
+30718 1 2
+30719 1 2
+30720 1 2
+30721 1 2
+30722 1 2
+30723 1 2
+30724 1 2
+30725 1 2
+30726 1 2
+30727 1 2
+30728 1 2
+30729 1 2
+30730 1 2
+30731 1 2
+30732 1 2
+30733 1 2
+30734 1 2
+30735 1 2
+30736 1 2
+30737 1 2
+30738 1 2
+30739 1 2
+30740 1 2
+30741 1 2
+30742 1 2
+30743 1 2
+30744 1 2
+30745 1 2
+30746 1 2
+30747 1 2
+30748 1 2
+30749 1 2
+30750 1 2
+30751 1 2
+30752 1 2
+30753 1 2
+30754 1 2
+30755 1 2
+30756 1 2
+30757 1 2
+30758 1 2
+30759 1 2
+30760 1 2
+30761 1 2
+30762 1 2
+30763 1 2
+30764 1 2
+30765 1 2
+30766 1 2
+30767 1 2
+30768 1 2
+30769 1 2
+30770 1 2
+30771 1 2
+30772 1 2
+30773 1 2
+30774 1 2
+30775 1 2
+30776 1 2
+30777 1 2
+30778 1 2
+30779 1 2
+30780 1 2
+30781 1 2
+30782 1 2
+30783 1 2
+30784 1 2
+30785 1 2
+30786 1 2
+30787 1 2
+30788 1 2
+30789 1 2
+30790 1 2
+30791 1 2
+30792 1 2
+30793 1 2
+30794 1 2
+30795 1 2
+30796 1 2
+30797 1 2
+30798 1 2
+30799 1 2
+30800 1 2
+30801 1 2
+30802 1 2
+30803 1 2
+30804 1 2
+30805 1 2
+30806 1 2
+30807 1 2
+30808 1 2
+30809 1 2
+30810 1 2
+30811 1 2
+30812 1 2
+30813 1 2
+30814 1 2
+30815 1 2
+30816 1 2
+30817 1 2
+30818 1 2
+30819 1 2
+30820 1 2
+30821 1 2
+30822 1 2
+30823 1 2
+30824 1 2
+30825 1 2
+30826 1 2
+30827 1 2
+30828 1 2
+30829 1 2
+30830 1 2
+30831 1 2
+30832 1 2
+30833 1 2
+30834 1 2
+30835 1 2
+30836 1 2
+30837 1 2
+30838 1 2
+30839 1 2
+30840 1 2
+30841 1 2
+30842 1 2
+30843 1 2
+30844 1 2
+30845 1 2
+30846 1 2
+30847 1 2
+30848 1 2
+30849 1 2
+30850 1 2
+30851 1 2
+30852 1 2
+30853 1 2
+30854 1 2
+30855 1 2
+30856 1 2
+30857 1 2
+30858 1 2
+30859 1 2
+30860 1 2
+30861 1 2
+30862 1 2
+30863 1 2
+30864 1 2
+30865 1 2
+30866 1 2
+30867 1 2
+30868 1 2
+30869 1 2
+30870 1 2
+30871 1 2
+30872 1 2
+30873 1 2
+30874 1 2
+30875 1 2
+30876 1 2
+30877 1 2
+30878 1 2
+30879 1 2
+30880 1 2
+30881 1 2
+30882 1 2
+30883 1 2
+30884 1 2
+30885 1 2
+30886 1 2
+30887 1 2
+30888 1 2
+30889 1 2
+30890 1 2
+30891 1 2
+30892 1 2
+30893 1 2
+30894 1 2
+30895 1 2
+30896 1 2
+30897 1 2
+30898 1 2
+30899 1 2
+30900 1 2
+30901 1 2
+30902 1 2
+30903 1 2
+30904 1 2
+30905 1 2
+30906 1 2
+30907 1 2
+30908 1 2
+30909 1 2
+30910 1 2
+30911 1 2
+30912 1 2
+30913 1 2
+30914 1 2
+30915 1 2
+30916 1 2
+30917 1 2
+30918 1 2
+30919 1 2
+30920 1 2
+30921 1 2
+30922 1 2
+30923 1 2
+30924 1 2
+30925 1 2
+30926 1 2
+30927 1 2
+30928 1 2
+30929 1 2
+30930 1 2
+30931 1 2
+30932 1 2
+30933 1 2
+30934 1 2
+30935 1 2
+30936 1 2
+30937 1 2
+30938 1 2
+30939 1 2
+30940 1 2
+30941 1 2
+30942 1 2
+30943 1 2
+30944 1 2
+30945 1 2
+30946 1 2
+30947 1 2
+30948 1 2
+30949 1 2
+30950 1 2
+30951 1 2
+30952 1 2
+30953 1 2
+30954 1 2
+30955 1 2
+30956 1 2
+30957 1 2
+30958 1 2
+30959 1 2
+30960 1 2
+30961 1 2
+30962 1 2
+30963 1 2
+30964 1 2
+30965 1 2
+30966 1 2
+30967 1 2
+30968 1 2
+30969 1 2
+30970 1 2
+30971 1 2
+30972 1 2
+30973 1 2
+30974 1 2
+30975 1 2
+30976 1 2
+30977 1 2
+30978 1 2
+30979 1 2
+30980 1 2
+30981 1 2
+30982 1 2
+30983 1 2
+30984 1 2
+30985 1 2
+30986 1 2
+30987 1 2
+30988 1 2
+30989 1 2
+30990 1 2
+30991 1 2
+30992 1 2
+30993 1 2
+30994 1 2
+30995 1 2
+30996 1 2
+30997 1 2
+30998 1 2
+30999 1 2
+31000 1 2
+31001 1 2
+31002 1 2
+31003 1 2
+31004 1 2
+31005 1 2
+31006 1 2
+31007 1 2
+31008 1 2
+31009 1 2
+31010 1 2
+31011 1 2
+31012 1 2
+31013 1 2
+31014 1 2
+31015 1 2
+31016 1 2
+31017 1 2
+31018 1 2
+31019 1 2
+31020 1 2
+31021 1 2
+31022 1 2
+31023 1 2
+31024 1 2
+31025 1 2
+31026 1 2
+31027 1 2
+31028 1 2
+31029 1 2
+31030 1 2
+31031 1 2
+31032 1 2
+31033 1 2
+31034 1 2
+31035 1 2
+31036 1 2
+31037 1 2
+31038 1 2
+31039 1 2
+31040 1 2
+31041 1 2
+31042 1 2
+31043 1 2
+31044 1 2
+31045 1 2
+31046 1 2
+31047 1 2
+31048 1 2
+31049 1 2
+31050 1 2
+31051 1 2
+31052 1 2
+31053 1 2
+31054 1 2
+31055 1 2
+31056 1 2
+31057 1 2
+31058 1 2
+31059 1 2
+31060 1 2
+31061 1 2
+31062 1 2
+31063 1 2
+31064 1 2
+31065 1 2
+31066 1 2
+31067 1 2
+31068 1 2
+31069 1 2
+31070 1 2
+31071 1 2
+31072 1 2
+31073 1 2
+31074 1 2
+31075 1 2
+31076 1 2
+31077 1 2
+31078 1 2
+31079 1 2
+31080 1 2
+31081 1 2
+31082 1 2
+31083 1 2
+31084 1 2
+31085 1 2
+31086 1 2
+31087 1 2
+31088 1 2
+31089 1 2
+31090 1 2
+31091 1 2
+31092 1 2
+31093 1 2
+31094 1 2
+31095 1 2
+31096 1 2
+31097 1 2
+31098 1 2
+31099 1 2
+31100 1 2
+31101 1 2
+31102 1 2
+31103 1 2
+31104 1 2
+31105 1 2
+31106 1 2
+31107 1 2
+31108 1 2
+31109 1 2
+31110 1 2
+31111 1 2
+31112 1 2
+31113 1 2
+31114 1 2
+31115 1 2
+31116 1 2
+31117 1 2
+31118 1 2
+31119 1 2
+31120 1 2
+31121 1 2
+31122 1 2
+31123 1 2
+31124 1 2
+31125 1 2
+31126 1 2
+31127 1 2
+31128 1 2
+31129 1 2
+31130 1 2
+31131 1 2
+31132 1 2
+31133 1 2
+31134 1 2
+31135 1 2
+31136 1 2
+31137 1 2
+31138 1 2
+31139 1 2
+31140 1 2
+31141 1 2
+31142 1 2
+31143 1 2
+31144 1 2
+31145 1 2
+31146 1 2
+31147 1 2
+31148 1 2
+31149 1 2
+31150 1 2
+31151 1 2
+31152 1 2
+31153 1 2
+31154 1 2
+31155 1 2
+31156 1 2
+31157 1 2
+31158 1 2
+31159 1 2
+31160 1 2
+31161 1 2
+31162 1 2
+31163 1 2
+31164 1 2
+31165 1 2
+31166 1 2
+31167 1 2
+31168 1 2
+31169 1 2
+31170 1 2
+31171 1 2
+31172 1 2
+31173 1 2
+31174 1 2
+31175 1 2
+31176 1 2
+31177 1 2
+31178 1 2
+31179 1 2
+31180 1 2
+31181 1 2
+31182 1 2
+31183 1 2
+31184 1 2
+31185 1 2
+31186 1 2
+31187 1 2
+31188 1 2
+31189 1 2
+31190 1 2
+31191 1 2
+31192 1 2
+31193 1 2
+31194 1 2
+31195 1 2
+31196 1 2
+31197 1 2
+31198 1 2
+31199 1 2
+31200 1 2
+31201 1 2
+31202 1 2
+31203 1 2
+31204 1 2
+31205 1 2
+31206 1 2
+31207 1 2
+31208 1 2
+31209 1 2
+31210 1 2
+31211 1 2
+31212 1 2
+31213 1 2
+31214 1 2
+31215 1 2
+31216 1 2
+31217 1 2
+31218 1 2
+31219 1 2
+31220 1 2
+31221 1 2
+31222 1 2
+31223 1 2
+31224 1 2
+31225 1 2
+31226 1 2
+31227 1 2
+31228 1 2
+31229 1 2
+31230 1 2
+31231 1 2
+31232 1 2
+31233 1 2
+31234 1 2
+31235 1 2
+31236 1 2
+31237 1 2
+31238 1 2
+31239 1 2
+31240 1 2
+31241 1 2
+31242 1 2
+31243 1 2
+31244 1 2
+31245 1 2
+31246 1 2
+31247 1 2
+31248 1 2
+31249 1 2
+31250 1 2
+31251 1 2
+31252 1 2
+31253 1 2
+31254 1 2
+31255 1 2
+31256 1 2
+31257 1 2
+31258 1 2
+31259 1 2
+31260 1 2
+31261 1 2
+31262 1 2
+31263 1 2
+31264 1 2
+31265 1 2
+31266 1 2
+31267 1 2
+31268 1 2
+31269 1 2
+31270 1 2
+31271 1 2
+31272 1 2
+31273 1 2
+31274 1 2
+31275 1 2
+31276 1 2
+31277 1 2
+31278 1 2
+31279 1 2
+31280 1 2
+31281 1 2
+31282 1 2
+31283 1 2
+31284 1 2
+31285 1 2
+31286 1 2
+31287 1 2
+31288 1 2
+31289 1 2
+31290 1 2
+31291 1 2
+31292 1 2
+31293 1 2
+31294 1 2
+31295 1 2
+31296 1 2
+31297 1 2
+31298 1 2
+31299 1 2
+31300 1 2
+31301 1 2
+31302 1 2
+31303 1 2
+31304 1 2
+31305 1 2
+31306 1 2
+31307 1 2
+31308 1 2
+31309 1 2
+31310 1 2
+31311 1 2
+31312 1 2
+31313 1 2
+31314 1 2
+31315 1 2
+31316 1 2
+31317 1 2
+31318 1 2
+31319 1 2
+31320 1 2
+31321 1 2
+31322 1 2
+31323 1 2
+31324 1 2
+31325 1 2
+31326 1 2
+31327 1 2
+31328 1 2
+31329 1 2
+31330 1 2
+31331 1 2
+31332 1 2
+31333 1 2
+31334 1 2
+31335 1 2
+31336 1 2
+31337 1 2
+31338 1 2
+31339 1 2
+31340 1 2
+31341 1 2
+31342 1 2
+31343 1 2
+31344 1 2
+31345 1 2
+31346 1 2
+31347 1 2
+31348 1 2
+31349 1 2
+31350 1 2
+31351 1 2
+31352 1 2
+31353 1 2
+31354 1 2
+31355 1 2
+31356 1 2
+31357 1 2
+31358 1 2
+31359 1 2
+31360 1 2
+31361 1 2
+31362 1 2
+31363 1 2
+31364 1 2
+31365 1 2
+31366 1 2
+31367 1 2
+31368 1 2
+31369 1 2
+31370 1 2
+31371 1 2
+31372 1 2
+31373 1 2
+31374 1 2
+31375 1 2
+31376 1 2
+31377 1 2
+31378 1 2
+31379 1 2
+31380 1 2
+31381 1 2
+31382 1 2
+31383 1 2
+31384 1 2
+31385 1 2
+31386 1 2
+31387 1 2
+31388 1 2
+31389 1 2
+31390 1 2
+31391 1 2
+31392 1 2
+31393 1 2
+31394 1 2
+31395 1 2
+31396 1 2
+31397 1 2
+31398 1 2
+31399 1 2
+31400 1 2
+31401 1 2
+31402 1 2
+31403 1 2
+31404 1 2
+31405 1 2
+31406 1 2
+31407 1 2
+31408 1 2
+31409 1 2
+31410 1 2
+31411 1 2
+31412 1 2
+31413 1 2
+31414 1 2
+31415 1 2
+31416 1 2
+31417 1 2
+31418 1 2
+31419 1 2
+31420 1 2
+31421 1 2
+31422 1 2
+31423 1 2
+31424 1 2
+31425 1 2
+31426 1 2
+31427 1 2
+31428 1 2
+31429 1 2
+31430 1 2
+31431 1 2
+31432 1 2
+31433 1 2
+31434 1 2
+31435 1 2
+31436 1 2
+31437 1 2
+31438 1 2
+31439 1 2
+31440 1 2
+31441 1 2
+31442 1 2
+31443 1 2
+31444 1 2
+31445 1 2
+31446 1 2
+31447 1 2
+31448 1 2
+31449 1 2
+31450 1 2
+31451 1 2
+31452 1 2
+31453 1 2
+31454 1 2
+31455 1 2
+31456 1 2
+31457 1 2
+31458 1 2
+31459 1 2
+31460 1 2
+31461 1 2
+31462 1 2
+31463 1 2
+31464 1 2
+31465 1 2
+31466 1 2
+31467 1 2
+31468 1 2
+31469 1 2
+31470 1 2
+31471 1 2
+31472 1 2
+31473 1 2
+31474 1 2
+31475 1 2
+31476 1 2
+31477 1 2
+31478 1 2
+31479 1 2
+31480 1 2
+31481 1 2
+31482 1 2
+31483 1 2
+31484 1 2
+31485 1 2
+31486 1 2
+31487 1 2
+31488 1 2
+31489 1 2
+31490 1 2
+31491 1 2
+31492 1 2
+31493 1 2
+31494 1 2
+31495 1 2
+31496 1 2
+31497 1 2
+31498 1 2
+31499 1 2
+31500 1 2
+31501 1 2
+31502 1 2
+31503 1 2
+31504 1 2
+31505 1 2
+31506 1 2
+31507 1 2
+31508 1 2
+31509 1 2
+31510 1 2
+31511 1 2
+31512 1 2
+31513 1 2
+31514 1 2
+31515 1 2
+31516 1 2
+31517 1 2
+31518 1 2
+31519 1 2
+31520 1 2
+31521 1 2
+31522 1 2
+31523 1 2
+31524 1 2
+31525 1 2
+31526 1 2
+31527 1 2
+31528 1 2
+31529 1 2
+31530 1 2
+31531 1 2
+31532 1 2
+31533 1 2
+31534 1 2
+31535 1 2
+31536 1 2
+31537 1 2
+31538 1 2
+31539 1 2
+31540 1 2
+31541 1 2
+31542 1 2
+31543 1 2
+31544 1 2
+31545 1 2
+31546 1 2
+31547 1 2
+31548 1 2
+31549 1 2
+31550 1 2
+31551 1 2
+31552 1 2
+31553 1 2
+31554 1 2
+31555 1 2
+31556 1 2
+31557 1 2
+31558 1 2
+31559 1 2
+31560 1 2
+31561 1 2
+31562 1 2
+31563 1 2
+31564 1 2
+31565 1 2
+31566 1 2
+31567 1 2
+31568 1 2
+31569 1 2
+31570 1 2
+31571 1 2
+31572 1 2
+31573 1 2
+31574 1 2
+31575 1 2
+31576 1 2
+31577 1 2
+31578 1 2
+31579 1 2
+31580 1 2
+31581 1 2
+31582 1 2
+31583 1 2
+31584 1 2
+31585 1 2
+31586 1 2
+31587 1 2
+31588 1 2
+31589 1 2
+31590 1 2
+31591 1 2
+31592 1 2
+31593 1 2
+31594 1 2
+31595 1 2
+31596 1 2
+31597 1 2
+31598 1 2
+31599 1 2
+31600 1 2
+31601 1 2
+31602 1 2
+31603 1 2
+31604 1 2
+31605 1 2
+31606 1 2
+31607 1 2
+31608 1 2
+31609 1 2
+31610 1 2
+31611 1 2
+31612 1 2
+31613 1 2
+31614 1 2
+31615 1 2
+31616 1 2
+31617 1 2
+31618 1 2
+31619 1 2
+31620 1 2
+31621 1 2
+31622 1 2
+31623 1 2
+31624 1 2
+31625 1 2
+31626 1 2
+31627 1 2
+31628 1 2
+31629 1 2
+31630 1 2
+31631 1 2
+31632 1 2
+31633 1 2
+31634 1 2
+31635 1 2
+31636 1 2
+31637 1 2
+31638 1 2
+31639 1 2
+31640 1 2
+31641 1 2
+31642 1 2
+31643 1 2
+31644 1 2
+31645 1 2
+31646 1 2
+31647 1 2
+31648 1 2
+31649 1 2
+31650 1 2
+31651 1 2
+31652 1 2
+31653 1 2
+31654 1 2
+31655 1 2
+31656 1 2
+31657 1 2
+31658 1 2
+31659 1 2
+31660 1 2
+31661 1 2
+31662 1 2
+31663 1 2
+31664 1 2
+31665 1 2
+31666 1 2
+31667 1 2
+31668 1 2
+31669 1 2
+31670 1 2
+31671 1 2
+31672 1 2
+31673 1 2
+31674 1 2
+31675 1 2
+31676 1 2
+31677 1 2
+31678 1 2
+31679 1 2
+31680 1 2
+31681 1 2
+31682 1 2
+31683 1 2
+31684 1 2
+31685 1 2
+31686 1 2
+31687 1 2
+31688 1 2
+31689 1 2
+31690 1 2
+31691 1 2
+31692 1 2
+31693 1 2
+31694 1 2
+31695 1 2
+31696 1 2
+31697 1 2
+31698 1 2
+31699 1 2
+31700 1 2
+31701 1 2
+31702 1 2
+31703 1 2
+31704 1 2
+31705 1 2
+31706 1 2
+31707 1 2
+31708 1 2
+31709 1 2
+31710 1 2
+31711 1 2
+31712 1 2
+31713 1 2
+31714 1 2
+31715 1 2
+31716 1 2
+31717 1 2
+31718 1 2
+31719 1 2
+31720 1 2
+31721 1 2
+31722 1 2
+31723 1 2
+31724 1 2
+31725 1 2
+31726 1 2
+31727 1 2
+31728 1 2
+31729 1 2
+31730 1 2
+31731 1 2
+31732 1 2
+31733 1 2
+31734 1 2
+31735 1 2
+31736 1 2
+31737 1 2
+31738 1 2
+31739 1 2
+31740 1 2
+31741 1 2
+31742 1 2
+31743 1 2
+31744 1 2
+31745 1 2
+31746 1 2
+31747 1 2
+31748 1 2
+31749 1 2
+31750 1 2
+31751 1 2
+31752 1 2
+31753 1 2
+31754 1 2
+31755 1 2
+31756 1 2
+31757 1 2
+31758 1 2
+31759 1 2
+31760 1 2
+31761 1 2
+31762 1 2
+31763 1 2
+31764 1 2
+31765 1 2
+31766 1 2
+31767 1 2
+31768 1 2
+31769 1 2
+31770 1 2
+31771 1 2
+31772 1 2
+31773 1 2
+31774 1 2
+31775 1 2
+31776 1 2
+31777 1 2
+31778 1 2
+31779 1 2
+31780 1 2
+31781 1 2
+31782 1 2
+31783 1 2
+31784 1 2
+31785 1 2
+31786 1 2
+31787 1 2
+31788 1 2
+31789 1 2
+31790 1 2
+31791 1 2
+31792 1 2
+31793 1 2
+31794 1 2
+31795 1 2
+31796 1 2
+31797 1 2
+31798 1 2
+31799 1 2
+31800 1 2
+31801 1 2
+31802 1 2
+31803 1 2
+31804 1 2
+31805 1 2
+31806 1 2
+31807 1 2
+31808 1 2
+31809 1 2
+31810 1 2
+31811 1 2
+31812 1 2
+31813 1 2
+31814 1 2
+31815 1 2
+31816 1 2
+31817 1 2
+31818 1 2
+31819 1 2
+31820 1 2
+31821 1 2
+31822 1 2
+31823 1 2
+31824 1 2
+31825 1 2
+31826 1 2
+31827 1 2
+31828 1 2
+31829 1 2
+31830 1 2
+31831 1 2
+31832 1 2
+31833 1 2
+31834 1 2
+31835 1 2
+31836 1 2
+31837 1 2
+31838 1 2
+31839 1 2
+31840 1 2
+31841 1 2
+31842 1 2
+31843 1 2
+31844 1 2
+31845 1 2
+31846 1 2
+31847 1 2
+31848 1 2
+31849 1 2
+31850 1 2
+31851 1 2
+31852 1 2
+31853 1 2
+31854 1 2
+31855 1 2
+31856 1 2
+31857 1 2
+31858 1 2
+31859 1 2
+31860 1 2
+31861 1 2
+31862 1 2
+31863 1 2
+31864 1 2
+31865 1 2
+31866 1 2
+31867 1 2
+31868 1 2
+31869 1 2
+31870 1 2
+31871 1 2
+31872 1 2
+31873 1 2
+31874 1 2
+31875 1 2
+31876 1 2
+31877 1 2
+31878 1 2
+31879 1 2
+31880 1 2
+31881 1 2
+31882 1 2
+31883 1 2
+31884 1 2
+31885 1 2
+31886 1 2
+31887 1 2
+31888 1 2
+31889 1 2
+31890 1 2
+31891 1 2
+31892 1 2
+31893 1 2
+31894 1 2
+31895 1 2
+31896 1 2
+31897 1 2
+31898 1 2
+31899 1 2
+31900 1 2
+31901 1 2
+31902 1 2
+31903 1 2
+31904 1 2
+31905 1 2
+31906 1 2
+31907 1 2
+31908 1 2
+31909 1 2
+31910 1 2
+31911 1 2
+31912 1 2
+31913 1 2
+31914 1 2
+31915 1 2
+31916 1 2
+31917 1 2
+31918 1 2
+31919 1 2
+31920 1 2
+31921 1 2
+31922 1 2
+31923 1 2
+31924 1 2
+31925 1 2
+31926 1 2
+31927 1 2
+31928 1 2
+31929 1 2
+31930 1 2
+31931 1 2
+31932 1 2
+31933 1 2
+31934 1 2
+31935 1 2
+31936 1 2
+31937 1 2
+31938 1 2
+31939 1 2
+31940 1 2
+31941 1 2
+31942 1 2
+31943 1 2
+31944 1 2
+31945 1 2
+31946 1 2
+31947 1 2
+31948 1 2
+31949 1 2
+31950 1 2
+31951 1 2
+31952 1 2
+31953 1 2
+31954 1 2
+31955 1 2
+31956 1 2
+31957 1 2
+31958 1 2
+31959 1 2
+31960 1 2
+31961 1 2
+31962 1 2
+31963 1 2
+31964 1 2
+31965 1 2
+31966 1 2
+31967 1 2
+31968 1 2
+31969 1 2
+31970 1 2
+31971 1 2
+31972 1 2
+31973 1 2
+31974 1 2
+31975 1 2
+31976 1 2
+31977 1 2
+31978 1 2
+31979 1 2
+31980 1 2
+31981 1 2
+31982 1 2
+31983 1 2
+31984 1 2
+31985 1 2
+31986 1 2
+31987 1 2
+31988 1 2
+31989 1 2
+31990 1 2
+31991 1 2
+31992 1 2
+31993 1 2
+31994 1 2
+31995 1 2
+31996 1 2
+31997 1 2
+31998 1 2
+31999 1 2
+32000 1 2
+32001 1 2
+32002 1 2
+32003 1 2
+32004 1 2
+32005 1 2
+32006 1 2
+32007 1 2
+32008 1 2
+32009 1 2
+32010 1 2
+32011 1 2
+32012 1 2
+32013 1 2
+32014 1 2
+32015 1 2
+32016 1 2
+32017 1 2
+32018 1 2
+32019 1 2
+32020 1 2
+32021 1 2
+32022 1 2
+32023 1 2
+32024 1 2
+32025 1 2
+32026 1 2
+32027 1 2
+32028 1 2
+32029 1 2
+32030 1 2
+32031 1 2
+32032 1 2
+32033 1 2
+32034 1 2
+32035 1 2
+32036 1 2
+32037 1 2
+32038 1 2
+32039 1 2
+32040 1 2
+32041 1 2
+32042 1 2
+32043 1 2
+32044 1 2
+32045 1 2
+32046 1 2
+32047 1 2
+32048 1 2
+32049 1 2
+32050 1 2
+32051 1 2
+32052 1 2
+32053 1 2
+32054 1 2
+32055 1 2
+32056 1 2
+32057 1 2
+32058 1 2
+32059 1 2
+32060 1 2
+32061 1 2
+32062 1 2
+32063 1 2
+32064 1 2
+32065 1 2
+32066 1 2
+32067 1 2
+32068 1 2
+32069 1 2
+32070 1 2
+32071 1 2
+32072 1 2
+32073 1 2
+32074 1 2
+32075 1 2
+32076 1 2
+32077 1 2
+32078 1 2
+32079 1 2
+32080 1 2
+32081 1 2
+32082 1 2
+32083 1 2
+32084 1 2
+32085 1 2
+32086 1 2
+32087 1 2
+32088 1 2
+32089 1 2
+32090 1 2
+32091 1 2
+32092 1 2
+32093 1 2
+32094 1 2
+32095 1 2
+32096 1 2
+32097 1 2
+32098 1 2
+32099 1 2
+32100 1 2
+32101 1 2
+32102 1 2
+32103 1 2
+32104 1 2
+32105 1 2
+32106 1 2
+32107 1 2
+32108 1 2
+32109 1 2
+32110 1 2
+32111 1 2
+32112 1 2
+32113 1 2
+32114 1 2
+32115 1 2
+32116 1 2
+32117 1 2
+32118 1 2
+32119 1 2
+32120 1 2
+32121 1 2
+32122 1 2
+32123 1 2
+32124 1 2
+32125 1 2
+32126 1 2
+32127 1 2
+32128 1 2
+32129 1 2
+32130 1 2
+32131 1 2
+32132 1 2
+32133 1 2
+32134 1 2
+32135 1 2
+32136 1 2
+32137 1 2
+32138 1 2
+32139 1 2
+32140 1 2
+32141 1 2
+32142 1 2
+32143 1 2
+32144 1 2
+32145 1 2
+32146 1 2
+32147 1 2
+32148 1 2
+32149 1 2
+32150 1 2
+32151 1 2
+32152 1 2
+32153 1 2
+32154 1 2
+32155 1 2
+32156 1 2
+32157 1 2
+32158 1 2
+32159 1 2
+32160 1 2
+32161 1 2
+32162 1 2
+32163 1 2
+32164 1 2
+32165 1 2
+32166 1 2
+32167 1 2
+32168 1 2
+32169 1 2
+32170 1 2
+32171 1 2
+32172 1 2
+32173 1 2
+32174 1 2
+32175 1 2
+32176 1 2
+32177 1 2
+32178 1 2
+32179 1 2
+32180 1 2
+32181 1 2
+32182 1 2
+32183 1 2
+32184 1 2
+32185 1 2
+32186 1 2
+32187 1 2
+32188 1 2
+32189 1 2
+32190 1 2
+32191 1 2
+32192 1 2
+32193 1 2
+32194 1 2
+32195 1 2
+32196 1 2
+32197 1 2
+32198 1 2
+32199 1 2
+32200 1 2
+32201 1 2
+32202 1 2
+32203 1 2
+32204 1 2
+32205 1 2
+32206 1 2
+32207 1 2
+32208 1 2
+32209 1 2
+32210 1 2
+32211 1 2
+32212 1 2
+32213 1 2
+32214 1 2
+32215 1 2
+32216 1 2
+32217 1 2
+32218 1 2
+32219 1 2
+32220 1 2
+32221 1 2
+32222 1 2
+32223 1 2
+32224 1 2
+32225 1 2
+32226 1 2
+32227 1 2
+32228 1 2
+32229 1 2
+32230 1 2
+32231 1 2
+32232 1 2
+32233 1 2
+32234 1 2
+32235 1 2
+32236 1 2
+32237 1 2
+32238 1 2
+32239 1 2
+32240 1 2
+32241 1 2
+32242 1 2
+32243 1 2
+32244 1 2
+32245 1 2
+32246 1 2
+32247 1 2
+32248 1 2
+32249 1 2
+32250 1 2
+32251 1 2
+32252 1 2
+32253 1 2
+32254 1 2
+32255 1 2
+32256 1 2
+32257 1 2
+32258 1 2
+32259 1 2
+32260 1 2
+32261 1 2
+32262 1 2
+32263 1 2
+32264 1 2
+32265 1 2
+32266 1 2
+32267 1 2
+32268 1 2
+32269 1 2
+32270 1 2
+32271 1 2
+32272 1 2
+32273 1 2
+32274 1 2
+32275 1 2
+32276 1 2
+32277 1 2
+32278 1 2
+32279 1 2
+32280 1 2
+32281 1 2
+32282 1 2
+32283 1 2
+32284 1 2
+32285 1 2
+32286 1 2
+32287 1 2
+32288 1 2
+32289 1 2
+32290 1 2
+32291 1 2
+32292 1 2
+32293 1 2
+32294 1 2
+32295 1 2
+32296 1 2
+32297 1 2
+32298 1 2
+32299 1 2
+32300 1 2
+32301 1 2
+32302 1 2
+32303 1 2
+32304 1 2
+32305 1 2
+32306 1 2
+32307 1 2
+32308 1 2
+32309 1 2
+32310 1 2
+32311 1 2
+32312 1 2
+32313 1 2
+32314 1 2
+32315 1 2
+32316 1 2
+32317 1 2
+32318 1 2
+32319 1 2
+32320 1 2
+32321 1 2
+32322 1 2
+32323 1 2
+32324 1 2
+32325 1 2
+32326 1 2
+32327 1 2
+32328 1 2
+32329 1 2
+32330 1 2
+32331 1 2
+32332 1 2
+32333 1 2
+32334 1 2
+32335 1 2
+32336 1 2
+32337 1 2
+32338 1 2
+32339 1 2
+32340 1 2
+32341 1 2
+32342 1 2
+32343 1 2
+32344 1 2
+32345 1 2
+32346 1 2
+32347 1 2
+32348 1 2
+32349 1 2
+32350 1 2
+32351 1 2
+32352 1 2
+32353 1 2
+32354 1 2
+32355 1 2
+32356 1 2
+32357 1 2
+32358 1 2
+32359 1 2
+32360 1 2
+32361 1 2
+32362 1 2
+32363 1 2
+32364 1 2
+32365 1 2
+32366 1 2
+32367 1 2
+32368 1 2
+32369 1 2
+32370 1 2
+32371 1 2
+32372 1 2
+32373 1 2
+32374 1 2
+32375 1 2
+32376 1 2
+32377 1 2
+32378 1 2
+32379 1 2
+32380 1 2
+32381 1 2
+32382 1 2
+32383 1 2
+32384 1 2
+32385 1 2
+32386 1 2
+32387 1 2
+32388 1 2
+32389 1 2
+32390 1 2
+32391 1 2
+32392 1 2
+32393 1 2
+32394 1 2
+32395 1 2
+32396 1 2
+32397 1 2
+32398 1 2
+32399 1 2
+32400 1 2
+32401 1 2
+32402 1 2
+32403 1 2
+32404 1 2
+32405 1 2
+32406 1 2
+32407 1 2
+32408 1 2
+32409 1 2
+32410 1 2
+32411 1 2
+32412 1 2
+32413 1 2
+32414 1 2
+32415 1 2
+32416 1 2
+32417 1 2
+32418 1 2
+32419 1 2
+32420 1 2
+32421 1 2
+32422 1 2
+32423 1 2
+32424 1 2
+32425 1 2
+32426 1 2
+32427 1 2
+32428 1 2
+32429 1 2
+32430 1 2
+32431 1 2
+32432 1 2
+32433 1 2
+32434 1 2
+32435 1 2
+32436 1 2
+32437 1 2
+32438 1 2
+32439 1 2
+32440 1 2
+32441 1 2
+32442 1 2
+32443 1 2
+32444 1 2
+32445 1 2
+32446 1 2
+32447 1 2
+32448 1 2
+32449 1 2
+32450 1 2
+32451 1 2
+32452 1 2
+32453 1 2
+32454 1 2
+32455 1 2
+32456 1 2
+32457 1 2
+32458 1 2
+32459 1 2
+32460 1 2
+32461 1 2
+32462 1 2
+32463 1 2
+32464 1 2
+32465 1 2
+32466 1 2
+32467 1 2
+32468 1 2
+32469 1 2
+32470 1 2
+32471 1 2
+32472 1 2
+32473 1 2
+32474 1 2
+32475 1 2
+32476 1 2
+32477 1 2
+32478 1 2
+32479 1 2
+32480 1 2
+32481 1 2
+32482 1 2
+32483 1 2
+32484 1 2
+32485 1 2
+32486 1 2
+32487 1 2
+32488 1 2
+32489 1 2
+32490 1 2
+32491 1 2
+32492 1 2
+32493 1 2
+32494 1 2
+32495 1 2
+32496 1 2
+32497 1 2
+32498 1 2
+32499 1 2
+32500 1 2
+32501 1 2
+32502 1 2
+32503 1 2
+32504 1 2
+32505 1 2
+32506 1 2
+32507 1 2
+32508 1 2
+32509 1 2
+32510 1 2
+32511 1 2
+32512 1 2
+32513 1 2
+32514 1 2
+32515 1 2
+32516 1 2
+32517 1 2
+32518 1 2
+32519 1 2
+32520 1 2
+32521 1 2
+32522 1 2
+32523 1 2
+32524 1 2
+32525 1 2
+32526 1 2
+32527 1 2
+32528 1 2
+32529 1 2
+32530 1 2
+32531 1 2
+32532 1 2
+32533 1 2
+32534 1 2
+32535 1 2
+32536 1 2
+32537 1 2
+32538 1 2
+32539 1 2
+32540 1 2
+32541 1 2
+32542 1 2
+32543 1 2
+32544 1 2
+32545 1 2
+32546 1 2
+32547 1 2
+32548 1 2
+32549 1 2
+32550 1 2
+32551 1 2
+32552 1 2
+32553 1 2
+32554 1 2
+32555 1 2
+32556 1 2
+32557 1 2
+32558 1 2
+32559 1 2
+32560 1 2
+32561 1 2
+32562 1 2
+32563 1 2
+32564 1 2
+32565 1 2
+32566 1 2
+32567 1 2
+32568 1 2
+32569 1 2
+32570 1 2
+32571 1 2
+32572 1 2
+32573 1 2
+32574 1 2
+32575 1 2
+32576 1 2
+32577 1 2
+32578 1 2
+32579 1 2
+32580 1 2
+32581 1 2
+32582 1 2
+32583 1 2
+32584 1 2
+32585 1 2
+32586 1 2
+32587 1 2
+32588 1 2
+32589 1 2
+32590 1 2
+32591 1 2
+32592 1 2
+32593 1 2
+32594 1 2
+32595 1 2
+32596 1 2
+32597 1 2
+32598 1 2
+32599 1 2
+32600 1 2
+32601 1 2
+32602 1 2
+32603 1 2
+32604 1 2
+32605 1 2
+32606 1 2
+32607 1 2
+32608 1 2
+32609 1 2
+32610 1 2
+32611 1 2
+32612 1 2
+32613 1 2
+32614 1 2
+32615 1 2
+32616 1 2
+32617 1 2
+32618 1 2
+32619 1 2
+32620 1 2
+32621 1 2
+32622 1 2
+32623 1 2
+32624 1 2
+32625 1 2
+32626 1 2
+32627 1 2
+32628 1 2
+32629 1 2
+32630 1 2
+32631 1 2
+32632 1 2
+32633 1 2
+32634 1 2
+32635 1 2
+32636 1 2
+32637 1 2
+32638 1 2
+32639 1 2
+32640 1 2
+32641 1 2
+32642 1 2
+32643 1 2
+32644 1 2
+32645 1 2
+32646 1 2
+32647 1 2
+32648 1 2
+32649 1 2
+32650 1 2
+32651 1 2
+32652 1 2
+32653 1 2
+32654 1 2
+32655 1 2
+32656 1 2
+32657 1 2
+32658 1 2
+32659 1 2
+32660 1 2
+32661 1 2
+32662 1 2
+32663 1 2
+32664 1 2
+32665 1 2
+32666 1 2
+32667 1 2
+32668 1 2
+32669 1 2
+32670 1 2
+32671 1 2
+32672 1 2
+32673 1 2
+32674 1 2
+32675 1 2
+32676 1 2
+32677 1 2
+32678 1 2
+32679 1 2
+32680 1 2
+32681 1 2
+32682 1 2
+32683 1 2
+32684 1 2
+32685 1 2
+32686 1 2
+32687 1 2
+32688 1 2
+32689 1 2
+32690 1 2
+32691 1 2
+32692 1 2
+32693 1 2
+32694 1 2
+32695 1 2
+32696 1 2
+32697 1 2
+32698 1 2
+32699 1 2
+32700 1 2
+32701 1 2
+32702 1 2
+32703 1 2
+32704 1 2
+32705 1 2
+32706 1 2
+32707 1 2
+32708 1 2
+32709 1 2
+32710 1 2
+32711 1 2
+32712 1 2
+32713 1 2
+32714 1 2
+32715 1 2
+32716 1 2
+32717 1 2
+32718 1 2
+32719 1 2
+32720 1 2
+32721 1 2
+32722 1 2
+32723 1 2
+32724 1 2
+32725 1 2
+32726 1 2
+32727 1 2
+32728 1 2
+32729 1 2
+32730 1 2
+32731 1 2
+32732 1 2
+32733 1 2
+32734 1 2
+32735 1 2
+32736 1 2
+32737 1 2
+32738 1 2
+32739 1 2
+32740 1 2
+32741 1 2
+32742 1 2
+32743 1 2
+32744 1 2
+32745 1 2
+32746 1 2
+32747 1 2
+32748 1 2
+32749 1 2
+32750 1 2
+32751 1 2
+32752 1 2
+32753 1 2
+32754 1 2
+32755 1 2
+32756 1 2
+32757 1 2
+32758 1 2
+32759 1 2
+32760 1 2
+32761 1 2
+32762 1 2
+32763 1 2
+32764 1 2
+32765 1 2
+32766 1 2
+32767 1 2
+32768 1 2
+32769 1 2
+32770 1 2
+32771 1 2
+32772 1 2
+32773 1 2
+32774 1 2
+32775 1 2
+32776 1 2
+32777 1 2
+32778 1 2
+32779 1 2
+32780 1 2
+32781 1 2
+32782 1 2
+32783 1 2
+32784 1 2
+32785 1 2
+32786 1 2
+32787 1 2
+32788 1 2
+32789 1 2
+32790 1 2
+32791 1 2
+32792 1 2
+32793 1 2
+32794 1 2
+32795 1 2
+32796 1 2
+32797 1 2
+32798 1 2
+32799 1 2
+32800 1 2
+32801 1 2
+32802 1 2
+32803 1 2
+32804 1 2
+32805 1 2
+32806 1 2
+32807 1 2
+32808 1 2
+32809 1 2
+32810 1 2
+32811 1 2
+32812 1 2
+32813 1 2
+32814 1 2
+32815 1 2
+32816 1 2
+32817 1 2
+32818 1 2
+32819 1 2
+32820 1 2
+32821 1 2
+32822 1 2
+32823 1 2
+32824 1 2
+32825 1 2
+32826 1 2
+32827 1 2
+32828 1 2
+32829 1 2
+32830 1 2
+32831 1 2
+32832 1 2
+32833 1 2
+32834 1 2
+32835 1 2
+32836 1 2
+32837 1 2
+32838 1 2
+32839 1 2
+32840 1 2
+32841 1 2
+32842 1 2
+32843 1 2
+32844 1 2
+32845 1 2
+32846 1 2
+32847 1 2
+32848 1 2
+32849 1 2
+32850 1 2
+32851 1 2
+32852 1 2
+32853 1 2
+32854 1 2
+32855 1 2
+32856 1 2
+32857 1 2
+32858 1 2
+32859 1 2
+32860 1 2
+32861 1 2
+32862 1 2
+32863 1 2
+32864 1 2
+32865 1 2
+32866 1 2
+32867 1 2
+32868 1 2
+32869 1 2
+32870 1 2
+32871 1 2
+32872 1 2
+32873 1 2
+32874 1 2
+32875 1 2
+32876 1 2
+32877 1 2
+32878 1 2
+32879 1 2
+32880 1 2
+32881 1 2
+32882 1 2
+32883 1 2
+32884 1 2
+32885 1 2
+32886 1 2
+32887 1 2
+32888 1 2
+32889 1 2
+32890 1 2
+32891 1 2
+32892 1 2
+32893 1 2
+32894 1 2
+32895 1 2
+32896 1 2
+32897 1 2
+32898 1 2
+32899 1 2
+32900 1 2
+32901 1 2
+32902 1 2
+32903 1 2
+32904 1 2
+32905 1 2
+32906 1 2
+32907 1 2
+32908 1 2
+32909 1 2
+32910 1 2
+32911 1 2
+32912 1 2
+32913 1 2
+32914 1 2
+32915 1 2
+32916 1 2
+32917 1 2
+32918 1 2
+32919 1 2
+32920 1 2
+32921 1 2
+32922 1 2
+32923 1 2
+32924 1 2
+32925 1 2
+32926 1 2
+32927 1 2
+32928 1 2
+32929 1 2
+32930 1 2
+32931 1 2
+32932 1 2
+32933 1 2
+32934 1 2
+32935 1 2
+32936 1 2
+32937 1 2
+32938 1 2
+32939 1 2
+32940 1 2
+32941 1 2
+32942 1 2
+32943 1 2
+32944 1 2
+32945 1 2
+32946 1 2
+32947 1 2
+32948 1 2
+32949 1 2
+32950 1 2
+32951 1 2
+32952 1 2
+32953 1 2
+32954 1 2
+32955 1 2
+32956 1 2
+32957 1 2
+32958 1 2
+32959 1 2
+32960 1 2
+32961 1 2
+32962 1 2
+32963 1 2
+32964 1 2
+32965 1 2
+32966 1 2
+32967 1 2
+32968 1 2
+32969 1 2
+32970 1 2
+32971 1 2
+32972 1 2
+32973 1 2
+32974 1 2
+32975 1 2
+32976 1 2
+32977 1 2
+32978 1 2
+32979 1 2
+32980 1 2
+32981 1 2
+32982 1 2
+32983 1 2
+32984 1 2
+32985 1 2
+32986 1 2
+32987 1 2
+32988 1 2
+32989 1 2
+32990 1 2
+32991 1 2
+32992 1 2
+32993 1 2
+32994 1 2
+32995 1 2
+32996 1 2
+32997 1 2
+32998 1 2
+32999 1 2
+33000 1 2
+33001 1 2
+33002 1 2
+33003 1 2
+33004 1 2
+33005 1 2
+33006 1 2
+33007 1 2
+33008 1 2
+33009 1 2
+33010 1 2
+33011 1 2
+33012 1 2
+33013 1 2
+33014 1 2
+33015 1 2
+33016 1 2
+33017 1 2
+33018 1 2
+33019 1 2
+33020 1 2
+33021 1 2
+33022 1 2
+33023 1 2
+33024 1 2
+33025 1 2
+33026 1 2
+33027 1 2
+33028 1 2
+33029 1 2
+33030 1 2
+33031 1 2
+33032 1 2
+33033 1 2
+33034 1 2
+33035 1 2
+33036 1 2
+33037 1 2
+33038 1 2
+33039 1 2
+33040 1 2
+33041 1 2
+33042 1 2
+33043 1 2
+33044 1 2
+33045 1 2
+33046 1 2
+33047 1 2
+33048 1 2
+33049 1 2
+33050 1 2
+33051 1 2
+33052 1 2
+33053 1 2
+33054 1 2
+33055 1 2
+33056 1 2
+33057 1 2
+33058 1 2
+33059 1 2
+33060 1 2
+33061 1 2
+33062 1 2
+33063 1 2
+33064 1 2
+33065 1 2
+33066 1 2
+33067 1 2
+33068 1 2
+33069 1 2
+33070 1 2
+33071 1 2
+33072 1 2
+33073 1 2
+33074 1 2
+33075 1 2
+33076 1 2
+33077 1 2
+33078 1 2
+33079 1 2
+33080 1 2
+33081 1 2
+33082 1 2
+33083 1 2
+33084 1 2
+33085 1 2
+33086 1 2
+33087 1 2
+33088 1 2
+33089 1 2
+33090 1 2
+33091 1 2
+33092 1 2
+33093 1 2
+33094 1 2
+33095 1 2
+33096 1 2
+33097 1 2
+33098 1 2
+33099 1 2
+33100 1 2
+33101 1 2
+33102 1 2
+33103 1 2
+33104 1 2
+33105 1 2
+33106 1 2
+33107 1 2
+33108 1 2
+33109 1 2
+33110 1 2
+33111 1 2
+33112 1 2
+33113 1 2
+33114 1 2
+33115 1 2
+33116 1 2
+33117 1 2
+33118 1 2
+33119 1 2
+33120 1 2
+33121 1 2
+33122 1 2
+33123 1 2
+33124 1 2
+33125 1 2
+33126 1 2
+33127 1 2
+33128 1 2
+33129 1 2
+33130 1 2
+33131 1 2
+33132 1 2
+33133 1 2
+33134 1 2
+33135 1 2
+33136 1 2
+33137 1 2
+33138 1 2
+33139 1 2
+33140 1 2
+33141 1 2
+33142 1 2
+33143 1 2
+33144 1 2
+33145 1 2
+33146 1 2
+33147 1 2
+33148 1 2
+33149 1 2
+33150 1 2
+33151 1 2
+33152 1 2
+33153 1 2
+33154 1 2
+33155 1 2
+33156 1 2
+33157 1 2
+33158 1 2
+33159 1 2
+33160 1 2
+33161 1 2
+33162 1 2
+33163 1 2
+33164 1 2
+33165 1 2
+33166 1 2
+33167 1 2
+33168 1 2
+33169 1 2
+33170 1 2
+33171 1 2
+33172 1 2
+33173 1 2
+33174 1 2
+33175 1 2
+33176 1 2
+33177 1 2
+33178 1 2
+33179 1 2
+33180 1 2
+33181 1 2
+33182 1 2
+33183 1 2
+33184 1 2
+33185 1 2
+33186 1 2
+33187 1 2
+33188 1 2
+33189 1 2
+33190 1 2
+33191 1 2
+33192 1 2
+33193 1 2
+33194 1 2
+33195 1 2
+33196 1 2
+33197 1 2
+33198 1 2
+33199 1 2
+33200 1 2
+33201 1 2
+33202 1 2
+33203 1 2
+33204 1 2
+33205 1 2
+33206 1 2
+33207 1 2
+33208 1 2
+33209 1 2
+33210 1 2
+33211 1 2
+33212 1 2
+33213 1 2
+33214 1 2
+33215 1 2
+33216 1 2
+33217 1 2
+33218 1 2
+33219 1 2
+33220 1 2
+33221 1 2
+33222 1 2
+33223 1 2
+33224 1 2
+33225 1 2
+33226 1 2
+33227 1 2
+33228 1 2
+33229 1 2
+33230 1 2
+33231 1 2
+33232 1 2
+33233 1 2
+33234 1 2
+33235 1 2
+33236 1 2
+33237 1 2
+33238 1 2
+33239 1 2
+33240 1 2
+33241 1 2
+33242 1 2
+33243 1 2
+33244 1 2
+33245 1 2
+33246 1 2
+33247 1 2
+33248 1 2
+33249 1 2
+33250 1 2
+33251 1 2
+33252 1 2
+33253 1 2
+33254 1 2
+33255 1 2
+33256 1 2
+33257 1 2
+33258 1 2
+33259 1 2
+33260 1 2
+33261 1 2
+33262 1 2
+33263 1 2
+33264 1 2
+33265 1 2
+33266 1 2
+33267 1 2
+33268 1 2
+33269 1 2
+33270 1 2
+33271 1 2
+33272 1 2
+33273 1 2
+33274 1 2
+33275 1 2
+33276 1 2
+33277 1 2
+33278 1 2
+33279 1 2
+33280 1 2
+33281 1 2
+33282 1 2
+33283 1 2
+33284 1 2
+33285 1 2
+33286 1 2
+33287 1 2
+33288 1 2
+33289 1 2
+33290 1 2
+33291 1 2
+33292 1 2
+33293 1 2
+33294 1 2
+33295 1 2
+33296 1 2
+33297 1 2
+33298 1 2
+33299 1 2
+33300 1 2
+33301 1 2
+33302 1 2
+33303 1 2
+33304 1 2
+33305 1 2
+33306 1 2
+33307 1 2
+33308 1 2
+33309 1 2
+33310 1 2
+33311 1 2
+33312 1 2
+33313 1 2
+33314 1 2
+33315 1 2
+33316 1 2
+33317 1 2
+33318 1 2
+33319 1 2
+33320 1 2
+33321 1 2
+33322 1 2
+33323 1 2
+33324 1 2
+33325 1 2
+33326 1 2
+33327 1 2
+33328 1 2
+33329 1 2
+33330 1 2
+33331 1 2
+33332 1 2
+33333 1 2
+33334 1 2
+33335 1 2
+33336 1 2
+33337 1 2
+33338 1 2
+33339 1 2
+33340 1 2
+33341 1 2
+33342 1 2
+33343 1 2
+33344 1 2
+33345 1 2
+33346 1 2
+33347 1 2
+33348 1 2
+33349 1 2
+33350 1 2
+33351 1 2
+33352 1 2
+33353 1 2
+33354 1 2
+33355 1 2
+33356 1 2
+33357 1 2
+33358 1 2
+33359 1 2
+33360 1 2
+33361 1 2
+33362 1 2
+33363 1 2
+33364 1 2
+33365 1 2
+33366 1 2
+33367 1 2
+33368 1 2
+33369 1 2
+33370 1 2
+33371 1 2
+33372 1 2
+33373 1 2
+33374 1 2
+33375 1 2
+33376 1 2
+33377 1 2
+33378 1 2
+33379 1 2
+33380 1 2
+33381 1 2
+33382 1 2
+33383 1 2
+33384 1 2
+33385 1 2
+33386 1 2
+33387 1 2
+33388 1 2
+33389 1 2
+33390 1 2
+33391 1 2
+33392 1 2
+33393 1 2
+33394 1 2
+33395 1 2
+33396 1 2
+33397 1 2
+33398 1 2
+33399 1 2
+33400 1 2
+33401 1 2
+33402 1 2
+33403 1 2
+33404 1 2
+33405 1 2
+33406 1 2
+33407 1 2
+33408 1 2
+33409 1 2
+33410 1 2
+33411 1 2
+33412 1 2
+33413 1 2
+33414 1 2
+33415 1 2
+33416 1 2
+33417 1 2
+33418 1 2
+33419 1 2
+33420 1 2
+33421 1 2
+33422 1 2
+33423 1 2
+33424 1 2
+33425 1 2
+33426 1 2
+33427 1 2
+33428 1 2
+33429 1 2
+33430 1 2
+33431 1 2
+33432 1 2
+33433 1 2
+33434 1 2
+33435 1 2
+33436 1 2
+33437 1 2
+33438 1 2
+33439 1 2
+33440 1 2
+33441 1 2
+33442 1 2
+33443 1 2
+33444 1 2
+33445 1 2
+33446 1 2
+33447 1 2
+33448 1 2
+33449 1 2
+33450 1 2
+33451 1 2
+33452 1 2
+33453 1 2
+33454 1 2
+33455 1 2
+33456 1 2
+33457 1 2
+33458 1 2
+33459 1 2
+33460 1 2
+33461 1 2
+33462 1 2
+33463 1 2
+33464 1 2
+33465 1 2
+33466 1 2
+33467 1 2
+33468 1 2
+33469 1 2
+33470 1 2
+33471 1 2
+33472 1 2
+33473 1 2
+33474 1 2
+33475 1 2
+33476 1 2
+33477 1 2
+33478 1 2
+33479 1 2
+33480 1 2
+33481 1 2
+33482 1 2
+33483 1 2
+33484 1 2
+33485 1 2
+33486 1 2
+33487 1 2
+33488 1 2
+33489 1 2
+33490 1 2
+33491 1 2
+33492 1 2
+33493 1 2
+33494 1 2
+33495 1 2
+33496 1 2
+33497 1 2
+33498 1 2
+33499 1 2
+33500 1 2
+33501 1 2
+33502 1 2
+33503 1 2
+33504 1 2
+33505 1 2
+33506 1 2
+33507 1 2
+33508 1 2
+33509 1 2
+33510 1 2
+33511 1 2
+33512 1 2
+33513 1 2
+33514 1 2
+33515 1 2
+33516 1 2
+33517 1 2
+33518 1 2
+33519 1 2
+33520 1 2
+33521 1 2
+33522 1 2
+33523 1 2
+33524 1 2
+33525 1 2
+33526 1 2
+33527 1 2
+33528 1 2
+33529 1 2
+33530 1 2
+33531 1 2
+33532 1 2
+33533 1 2
+33534 1 2
+33535 1 2
+33536 1 2
+33537 1 2
+33538 1 2
+33539 1 2
+33540 1 2
+33541 1 2
+33542 1 2
+33543 1 2
+33544 1 2
+33545 1 2
+33546 1 2
+33547 1 2
+33548 1 2
+33549 1 2
+33550 1 2
+33551 1 2
+33552 1 2
+33553 1 2
+33554 1 2
+33555 1 2
+33556 1 2
+33557 1 2
+33558 1 2
+33559 1 2
+33560 1 2
+33561 1 2
+33562 1 2
+33563 1 2
+33564 1 2
+33565 1 2
+33566 1 2
+33567 1 2
+33568 1 2
+33569 1 2
+33570 1 2
+33571 1 2
+33572 1 2
+33573 1 2
+33574 1 2
+33575 1 2
+33576 1 2
+33577 1 2
+33578 1 2
+33579 1 2
+33580 1 2
+33581 1 2
+33582 1 2
+33583 1 2
+33584 1 2
+33585 1 2
+33586 1 2
+33587 1 2
+33588 1 2
+33589 1 2
+33590 1 2
+33591 1 2
+33592 1 2
+33593 1 2
+33594 1 2
+33595 1 2
+33596 1 2
+33597 1 2
+33598 1 2
+33599 1 2
+33600 1 2
+33601 1 2
+33602 1 2
+33603 1 2
+33604 1 2
+33605 1 2
+33606 1 2
+33607 1 2
+33608 1 2
+33609 1 2
+33610 1 2
+33611 1 2
+33612 1 2
+33613 1 2
+33614 1 2
+33615 1 2
+33616 1 2
+33617 1 2
+33618 1 2
+33619 1 2
+33620 1 2
+33621 1 2
+33622 1 2
+33623 1 2
+33624 1 2
+33625 1 2
+33626 1 2
+33627 1 2
+33628 1 2
+33629 1 2
+33630 1 2
+33631 1 2
+33632 1 2
+33633 1 2
+33634 1 2
+33635 1 2
+33636 1 2
+33637 1 2
+33638 1 2
+33639 1 2
+33640 1 2
+33641 1 2
+33642 1 2
+33643 1 2
+33644 1 2
+33645 1 2
+33646 1 2
+33647 1 2
+33648 1 2
+33649 1 2
+33650 1 2
+33651 1 2
+33652 1 2
+33653 1 2
+33654 1 2
+33655 1 2
+33656 1 2
+33657 1 2
+33658 1 2
+33659 1 2
+33660 1 2
+33661 1 2
+33662 1 2
+33663 1 2
+33664 1 2
+33665 1 2
+33666 1 2
+33667 1 2
+33668 1 2
+33669 1 2
+33670 1 2
+33671 1 2
+33672 1 2
+33673 1 2
+33674 1 2
+33675 1 2
+33676 1 2
+33677 1 2
+33678 1 2
+33679 1 2
+33680 1 2
+33681 1 2
+33682 1 2
+33683 1 2
+33684 1 2
+33685 1 2
+33686 1 2
+33687 1 2
+33688 1 2
+33689 1 2
+33690 1 2
+33691 1 2
+33692 1 2
+33693 1 2
+33694 1 2
+33695 1 2
+33696 1 2
+33697 1 2
+33698 1 2
+33699 1 2
+33700 1 2
+33701 1 2
+33702 1 2
+33703 1 2
+33704 1 2
+33705 1 2
+33706 1 2
+33707 1 2
+33708 1 2
+33709 1 2
+33710 1 2
+33711 1 2
+33712 1 2
+33713 1 2
+33714 1 2
+33715 1 2
+33716 1 2
+33717 1 2
+33718 1 2
+33719 1 2
+33720 1 2
+33721 1 2
+33722 1 2
+33723 1 2
+33724 1 2
+33725 1 2
+33726 1 2
+33727 1 2
+33728 1 2
+33729 1 2
+33730 1 2
+33731 1 2
+33732 1 2
+33733 1 2
+33734 1 2
+33735 1 2
+33736 1 2
+33737 1 2
+33738 1 2
+33739 1 2
+33740 1 2
+33741 1 2
+33742 1 2
+33743 1 2
+33744 1 2
+33745 1 2
+33746 1 2
+33747 1 2
+33748 1 2
+33749 1 2
+33750 1 2
+33751 1 2
+33752 1 2
+33753 1 2
+33754 1 2
+33755 1 2
+33756 1 2
+33757 1 2
+33758 1 2
+33759 1 2
+33760 1 2
+33761 1 2
+33762 1 2
+33763 1 2
+33764 1 2
+33765 1 2
+33766 1 2
+33767 1 2
+33768 1 2
+33769 1 2
+33770 1 2
+33771 1 2
+33772 1 2
+33773 1 2
+33774 1 2
+33775 1 2
+33776 1 2
+33777 1 2
+33778 1 2
+33779 1 2
+33780 1 2
+33781 1 2
+33782 1 2
+33783 1 2
+33784 1 2
+33785 1 2
+33786 1 2
+33787 1 2
+33788 1 2
+33789 1 2
+33790 1 2
+33791 1 2
+33792 1 2
+33793 1 2
+33794 1 2
+33795 1 2
+33796 1 2
+33797 1 2
+33798 1 2
+33799 1 2
+33800 1 2
+33801 1 2
+33802 1 2
+33803 1 2
+33804 1 2
+33805 1 2
+33806 1 2
+33807 1 2
+33808 1 2
+33809 1 2
+33810 1 2
+33811 1 2
+33812 1 2
+33813 1 2
+33814 1 2
+33815 1 2
+33816 1 2
+33817 1 2
+33818 1 2
+33819 1 2
+33820 1 2
+33821 1 2
+33822 1 2
+33823 1 2
+33824 1 2
+33825 1 2
+33826 1 2
+33827 1 2
+33828 1 2
+33829 1 2
+33830 1 2
+33831 1 2
+33832 1 2
+33833 1 2
+33834 1 2
+33835 1 2
+33836 1 2
+33837 1 2
+33838 1 2
+33839 1 2
+33840 1 2
+33841 1 2
+33842 1 2
+33843 1 2
+33844 1 2
+33845 1 2
+33846 1 2
+33847 1 2
+33848 1 2
+33849 1 2
+33850 1 2
+33851 1 2
+33852 1 2
+33853 1 2
+33854 1 2
+33855 1 2
+33856 1 2
+33857 1 2
+33858 1 2
+33859 1 2
+33860 1 2
+33861 1 2
+33862 1 2
+33863 1 2
+33864 1 2
+33865 1 2
+33866 1 2
+33867 1 2
+33868 1 2
+33869 1 2
+33870 1 2
+33871 1 2
+33872 1 2
+33873 1 2
+33874 1 2
+33875 1 2
+33876 1 2
+33877 1 2
+33878 1 2
+33879 1 2
+33880 1 2
+33881 1 2
+33882 1 2
+33883 1 2
+33884 1 2
+33885 1 2
+33886 1 2
+33887 1 2
+33888 1 2
+33889 1 2
+33890 1 2
+33891 1 2
+33892 1 2
+33893 1 2
+33894 1 2
+33895 1 2
+33896 1 2
+33897 1 2
+33898 1 2
+33899 1 2
+33900 1 2
+33901 1 2
+33902 1 2
+33903 1 2
+33904 1 2
+33905 1 2
+33906 1 2
+33907 1 2
+33908 1 2
+33909 1 2
+33910 1 2
+33911 1 2
+33912 1 2
+33913 1 2
+33914 1 2
+33915 1 2
+33916 1 2
+33917 1 2
+33918 1 2
+33919 1 2
+33920 1 2
+33921 1 2
+33922 1 2
+33923 1 2
+33924 1 2
+33925 1 2
+33926 1 2
+33927 1 2
+33928 1 2
+33929 1 2
+33930 1 2
+33931 1 2
+33932 1 2
+33933 1 2
+33934 1 2
+33935 1 2
+33936 1 2
+33937 1 2
+33938 1 2
+33939 1 2
+33940 1 2
+33941 1 2
+33942 1 2
+33943 1 2
+33944 1 2
+33945 1 2
+33946 1 2
+33947 1 2
+33948 1 2
+33949 1 2
+33950 1 2
+33951 1 2
+33952 1 2
+33953 1 2
+33954 1 2
+33955 1 2
+33956 1 2
+33957 1 2
+33958 1 2
+33959 1 2
+33960 1 2
+33961 1 2
+33962 1 2
+33963 1 2
+33964 1 2
+33965 1 2
+33966 1 2
+33967 1 2
+33968 1 2
+33969 1 2
+33970 1 2
+33971 1 2
+33972 1 2
+33973 1 2
+33974 1 2
+33975 1 2
+33976 1 2
+33977 1 2
+33978 1 2
+33979 1 2
+33980 1 2
+33981 1 2
+33982 1 2
+33983 1 2
+33984 1 2
+33985 1 2
+33986 1 2
+33987 1 2
+33988 1 2
+33989 1 2
+33990 1 2
+33991 1 2
+33992 1 2
+33993 1 2
+33994 1 2
+33995 1 2
+33996 1 2
+33997 1 2
+33998 1 2
+33999 1 2
+34000 1 2
+34001 1 2
+34002 1 2
+34003 1 2
+34004 1 2
+34005 1 2
+34006 1 2
+34007 1 2
+34008 1 2
+34009 1 2
+34010 1 2
+34011 1 2
+34012 1 2
+34013 1 2
+34014 1 2
+34015 1 2
+34016 1 2
+34017 1 2
+34018 1 2
+34019 1 2
+34020 1 2
+34021 1 2
+34022 1 2
+34023 1 2
+34024 1 2
+34025 1 2
+34026 1 2
+34027 1 2
+34028 1 2
+34029 1 2
+34030 1 2
+34031 1 2
+34032 1 2
+34033 1 2
+34034 1 2
+34035 1 2
+34036 1 2
+34037 1 2
+34038 1 2
+34039 1 2
+34040 1 2
+34041 1 2
+34042 1 2
+34043 1 2
+34044 1 2
+34045 1 2
+34046 1 2
+34047 1 2
+34048 1 2
+34049 1 2
+34050 1 2
+34051 1 2
+34052 1 2
+34053 1 2
+34054 1 2
+34055 1 2
+34056 1 2
+34057 1 2
+34058 1 2
+34059 1 2
+34060 1 2
+34061 1 2
+34062 1 2
+34063 1 2
+34064 1 2
+34065 1 2
+34066 1 2
+34067 1 2
+34068 1 2
+34069 1 2
+34070 1 2
+34071 1 2
+34072 1 2
+34073 1 2
+34074 1 2
+34075 1 2
+34076 1 2
+34077 1 2
+34078 1 2
+34079 1 2
+34080 1 2
+34081 1 2
+34082 1 2
+34083 1 2
+34084 1 2
+34085 1 2
+34086 1 2
+34087 1 2
+34088 1 2
+34089 1 2
+34090 1 2
+34091 1 2
+34092 1 2
+34093 1 2
+34094 1 2
+34095 1 2
+34096 1 2
+34097 1 2
+34098 1 2
+34099 1 2
+34100 1 2
+34101 1 2
+34102 1 2
+34103 1 2
+34104 1 2
+34105 1 2
+34106 1 2
+34107 1 2
+34108 1 2
+34109 1 2
+34110 1 2
+34111 1 2
+34112 1 2
+34113 1 2
+34114 1 2
+34115 1 2
+34116 1 2
+34117 1 2
+34118 1 2
+34119 1 2
+34120 1 2
+34121 1 2
+34122 1 2
+34123 1 2
+34124 1 2
+34125 1 2
+34126 1 2
+34127 1 2
+34128 1 2
+34129 1 2
+34130 1 2
+34131 1 2
+34132 1 2
+34133 1 2
+34134 1 2
+34135 1 2
+34136 1 2
+34137 1 2
+34138 1 2
+34139 1 2
+34140 1 2
+34141 1 2
+34142 1 2
+34143 1 2
+34144 1 2
+34145 1 2
+34146 1 2
+34147 1 2
+34148 1 2
+34149 1 2
+34150 1 2
+34151 1 2
+34152 1 2
+34153 1 2
+34154 1 2
+34155 1 2
+34156 1 2
+34157 1 2
+34158 1 2
+34159 1 2
+34160 1 2
+34161 1 2
+34162 1 2
+34163 1 2
+34164 1 2
+34165 1 2
+34166 1 2
+34167 1 2
+34168 1 2
+34169 1 2
+34170 1 2
+34171 1 2
+34172 1 2
+34173 1 2
+34174 1 2
+34175 1 2
+34176 1 2
+34177 1 2
+34178 1 2
+34179 1 2
+34180 1 2
+34181 1 2
+34182 1 2
+34183 1 2
+34184 1 2
+34185 1 2
+34186 1 2
+34187 1 2
+34188 1 2
+34189 1 2
+34190 1 2
+34191 1 2
+34192 1 2
+34193 1 2
+34194 1 2
+34195 1 2
+34196 1 2
+34197 1 2
+34198 1 2
+34199 1 2
+34200 1 2
+34201 1 2
+34202 1 2
+34203 1 2
+34204 1 2
+34205 1 2
+34206 1 2
+34207 1 2
+34208 1 2
+34209 1 2
+34210 1 2
+34211 1 2
+34212 1 2
+34213 1 2
+34214 1 2
+34215 1 2
+34216 1 2
+34217 1 2
+34218 1 2
+34219 1 2
+34220 1 2
+34221 1 2
+34222 1 2
+34223 1 2
+34224 1 2
+34225 1 2
+34226 1 2
+34227 1 2
+34228 1 2
+34229 1 2
+34230 1 2
+34231 1 2
+34232 1 2
+34233 1 2
+34234 1 2
+34235 1 2
+34236 1 2
+34237 1 2
+34238 1 2
+34239 1 2
+34240 1 2
+34241 1 2
+34242 1 2
+34243 1 2
+34244 1 2
+34245 1 2
+34246 1 2
+34247 1 2
+34248 1 2
+34249 1 2
+34250 1 2
+34251 1 2
+34252 1 2
+34253 1 2
+34254 1 2
+34255 1 2
+34256 1 2
+34257 1 2
+34258 1 2
+34259 1 2
+34260 1 2
+34261 1 2
+34262 1 2
+34263 1 2
+34264 1 2
+34265 1 2
+34266 1 2
+34267 1 2
+34268 1 2
+34269 1 2
+34270 1 2
+34271 1 2
+34272 1 2
+34273 1 2
+34274 1 2
+34275 1 2
+34276 1 2
+34277 1 2
+34278 1 2
+34279 1 2
+34280 1 2
+34281 1 2
+34282 1 2
+34283 1 2
+34284 1 2
+34285 1 2
+34286 1 2
+34287 1 2
+34288 1 2
+34289 1 2
+34290 1 2
+34291 1 2
+34292 1 2
+34293 1 2
+34294 1 2
+34295 1 2
+34296 1 2
+34297 1 2
+34298 1 2
+34299 1 2
+34300 1 2
+34301 1 2
+34302 1 2
+34303 1 2
+34304 1 2
+34305 1 2
+34306 1 2
+34307 1 2
+34308 1 2
+34309 1 2
+34310 1 2
+34311 1 2
+34312 1 2
+34313 1 2
+34314 1 2
+34315 1 2
+34316 1 2
+34317 1 2
+34318 1 2
+34319 1 2
+34320 1 2
+34321 1 2
+34322 1 2
+34323 1 2
+34324 1 2
+34325 1 2
+34326 1 2
+34327 1 2
+34328 1 2
+34329 1 2
+34330 1 2
+34331 1 2
+34332 1 2
+34333 1 2
+34334 1 2
+34335 1 2
+34336 1 2
+34337 1 2
+34338 1 2
+34339 1 2
+34340 1 2
+34341 1 2
+34342 1 2
+34343 1 2
+34344 1 2
+34345 1 2
+34346 1 2
+34347 1 2
+34348 1 2
+34349 1 2
+34350 1 2
+34351 1 2
+34352 1 2
+34353 1 2
+34354 1 2
+34355 1 2
+34356 1 2
+34357 1 2
+34358 1 2
+34359 1 2
+34360 1 2
+34361 1 2
+34362 1 2
+34363 1 2
+34364 1 2
+34365 1 2
+34366 1 2
+34367 1 2
+34368 1 2
+34369 1 2
+34370 1 2
+34371 1 2
+34372 1 2
+34373 1 2
+34374 1 2
+34375 1 2
+34376 1 2
+34377 1 2
+34378 1 2
+34379 1 2
+34380 1 2
+34381 1 2
+34382 1 2
+34383 1 2
+34384 1 2
+34385 1 2
+34386 1 2
+34387 1 2
+34388 1 2
+34389 1 2
+34390 1 2
+34391 1 2
+34392 1 2
+34393 1 2
+34394 1 2
+34395 1 2
+34396 1 2
+34397 1 2
+34398 1 2
+34399 1 2
+34400 1 2
+34401 1 2
+34402 1 2
+34403 1 2
+34404 1 2
+34405 1 2
+34406 1 2
+34407 1 2
+34408 1 2
+34409 1 2
+34410 1 2
+34411 1 2
+34412 1 2
+34413 1 2
+34414 1 2
+34415 1 2
+34416 1 2
+34417 1 2
+34418 1 2
+34419 1 2
+34420 1 2
+34421 1 2
+34422 1 2
+34423 1 2
+34424 1 2
+34425 1 2
+34426 1 2
+34427 1 2
+34428 1 2
+34429 1 2
+34430 1 2
+34431 1 2
+34432 1 2
+34433 1 2
+34434 1 2
+34435 1 2
+34436 1 2
+34437 1 2
+34438 1 2
+34439 1 2
+34440 1 2
+34441 1 2
+34442 1 2
+34443 1 2
+34444 1 2
+34445 1 2
+34446 1 2
+34447 1 2
+34448 1 2
+34449 1 2
+34450 1 2
+34451 1 2
+34452 1 2
+34453 1 2
+34454 1 2
+34455 1 2
+34456 1 2
+34457 1 2
+34458 1 2
+34459 1 2
+34460 1 2
+34461 1 2
+34462 1 2
+34463 1 2
+34464 1 2
+34465 1 2
+34466 1 2
+34467 1 2
+34468 1 2
+34469 1 2
+34470 1 2
+34471 1 2
+34472 1 2
+34473 1 2
+34474 1 2
+34475 1 2
+34476 1 2
+34477 1 2
+34478 1 2
+34479 1 2
+34480 1 2
+34481 1 2
+34482 1 2
+34483 1 2
+34484 1 2
+34485 1 2
+34486 1 2
+34487 1 2
+34488 1 2
+34489 1 2
+34490 1 2
+34491 1 2
+34492 1 2
+34493 1 2
+34494 1 2
+34495 1 2
+34496 1 2
+34497 1 2
+34498 1 2
+34499 1 2
+34500 1 2
+34501 1 2
+34502 1 2
+34503 1 2
+34504 1 2
+34505 1 2
+34506 1 2
+34507 1 2
+34508 1 2
+34509 1 2
+34510 1 2
+34511 1 2
+34512 1 2
+34513 1 2
+34514 1 2
+34515 1 2
+34516 1 2
+34517 1 2
+34518 1 2
+34519 1 2
+34520 1 2
+34521 1 2
+34522 1 2
+34523 1 2
+34524 1 2
+34525 1 2
+34526 1 2
+34527 1 2
+34528 1 2
+34529 1 2
+34530 1 2
+34531 1 2
+34532 1 2
+34533 1 2
+34534 1 2
+34535 1 2
+34536 1 2
+34537 1 2
+34538 1 2
+34539 1 2
+34540 1 2
+34541 1 2
+34542 1 2
+34543 1 2
+34544 1 2
+34545 1 2
+34546 1 2
+34547 1 2
+34548 1 2
+34549 1 2
+34550 1 2
+34551 1 2
+34552 1 2
+34553 1 2
+34554 1 2
+34555 1 2
+34556 1 2
+34557 1 2
+34558 1 2
+34559 1 2
+34560 1 2
+34561 1 2
+34562 1 2
+34563 1 2
+34564 1 2
+34565 1 2
+34566 1 2
+34567 1 2
+34568 1 2
+34569 1 2
+34570 1 2
+34571 1 2
+34572 1 2
+34573 1 2
+34574 1 2
+34575 1 2
+34576 1 2
+34577 1 2
+34578 1 2
+34579 1 2
+34580 1 2
+34581 1 2
+34582 1 2
+34583 1 2
+34584 1 2
+34585 1 2
+34586 1 2
+34587 1 2
+34588 1 2
+34589 1 2
+34590 1 2
+34591 1 2
+34592 1 2
+34593 1 2
+34594 1 2
+34595 1 2
+34596 1 2
+34597 1 2
+34598 1 2
+34599 1 2
+34600 1 2
+34601 1 2
+34602 1 2
+34603 1 2
+34604 1 2
+34605 1 2
+34606 1 2
+34607 1 2
+34608 1 2
+34609 1 2
+34610 1 2
+34611 1 2
+34612 1 2
+34613 1 2
+34614 1 2
+34615 1 2
+34616 1 2
+34617 1 2
+34618 1 2
+34619 1 2
+34620 1 2
+34621 1 2
+34622 1 2
+34623 1 2
+34624 1 2
+34625 1 2
+34626 1 2
+34627 1 2
+34628 1 2
+34629 1 2
+34630 1 2
+34631 1 2
+34632 1 2
+34633 1 2
+34634 1 2
+34635 1 2
+34636 1 2
+34637 1 2
+34638 1 2
+34639 1 2
+34640 1 2
+34641 1 2
+34642 1 2
+34643 1 2
+34644 1 2
+34645 1 2
+34646 1 2
+34647 1 2
+34648 1 2
+34649 1 2
+34650 1 2
+34651 1 2
+34652 1 2
+34653 1 2
+34654 1 2
+34655 1 2
+34656 1 2
+34657 1 2
+34658 1 2
+34659 1 2
+34660 1 2
+34661 1 2
+34662 1 2
+34663 1 2
+34664 1 2
+34665 1 2
+34666 1 2
+34667 1 2
+34668 1 2
+34669 1 2
+34670 1 2
+34671 1 2
+34672 1 2
+34673 1 2
+34674 1 2
+34675 1 2
+34676 1 2
+34677 1 2
+34678 1 2
+34679 1 2
+34680 1 2
+34681 1 2
+34682 1 2
+34683 1 2
+34684 1 2
+34685 1 2
+34686 1 2
+34687 1 2
+34688 1 2
+34689 1 2
+34690 1 2
+34691 1 2
+34692 1 2
+34693 1 2
+34694 1 2
+34695 1 2
+34696 1 2
+34697 1 2
+34698 1 2
+34699 1 2
+34700 1 2
+34701 1 2
+34702 1 2
+34703 1 2
+34704 1 2
+34705 1 2
+34706 1 2
+34707 1 2
+34708 1 2
+34709 1 2
+34710 1 2
+34711 1 2
+34712 1 2
+34713 1 2
+34714 1 2
+34715 1 2
+34716 1 2
+34717 1 2
+34718 1 2
+34719 1 2
+34720 1 2
+34721 1 2
+34722 1 2
+34723 1 2
+34724 1 2
+34725 1 2
+34726 1 2
+34727 1 2
+34728 1 2
+34729 1 2
+34730 1 2
+34731 1 2
+34732 1 2
+34733 1 2
+34734 1 2
+34735 1 2
+34736 1 2
+34737 1 2
+34738 1 2
+34739 1 2
+34740 1 2
+34741 1 2
+34742 1 2
+34743 1 2
+34744 1 2
+34745 1 2
+34746 1 2
+34747 1 2
+34748 1 2
+34749 1 2
+34750 1 2
+34751 1 2
+34752 1 2
+34753 1 2
+34754 1 2
+34755 1 2
+34756 1 2
+34757 1 2
+34758 1 2
+34759 1 2
+34760 1 2
+34761 1 2
+34762 1 2
+34763 1 2
+34764 1 2
+34765 1 2
+34766 1 2
+34767 1 2
+34768 1 2
+34769 1 2
+34770 1 2
+34771 1 2
+34772 1 2
+34773 1 2
+34774 1 2
+34775 1 2
+34776 1 2
+34777 1 2
+34778 1 2
+34779 1 2
+34780 1 2
+34781 1 2
+34782 1 2
+34783 1 2
+34784 1 2
+34785 1 2
+34786 1 2
+34787 1 2
+34788 1 2
+34789 1 2
+34790 1 2
+34791 1 2
+34792 1 2
+34793 1 2
+34794 1 2
+34795 1 2
+34796 1 2
+34797 1 2
+34798 1 2
+34799 1 2
+34800 1 2
+34801 1 2
+34802 1 2
+34803 1 2
+34804 1 2
+34805 1 2
+34806 1 2
+34807 1 2
+34808 1 2
+34809 1 2
+34810 1 2
+34811 1 2
+34812 1 2
+34813 1 2
+34814 1 2
+34815 1 2
+34816 1 2
+34817 1 2
+34818 1 2
+34819 1 2
+34820 1 2
+34821 1 2
+34822 1 2
+34823 1 2
+34824 1 2
+34825 1 2
+34826 1 2
+34827 1 2
+34828 1 2
+34829 1 2
+34830 1 2
+34831 1 2
+34832 1 2
+34833 1 2
+34834 1 2
+34835 1 2
+34836 1 2
+34837 1 2
+34838 1 2
+34839 1 2
+34840 1 2
+34841 1 2
+34842 1 2
+34843 1 2
+34844 1 2
+34845 1 2
+34846 1 2
+34847 1 2
+34848 1 2
+34849 1 2
+34850 1 2
+34851 1 2
+34852 1 2
+34853 1 2
+34854 1 2
+34855 1 2
+34856 1 2
+34857 1 2
+34858 1 2
+34859 1 2
+34860 1 2
+34861 1 2
+34862 1 2
+34863 1 2
+34864 1 2
+34865 1 2
+34866 1 2
+34867 1 2
+34868 1 2
+34869 1 2
+34870 1 2
+34871 1 2
+34872 1 2
+34873 1 2
+34874 1 2
+34875 1 2
+34876 1 2
+34877 1 2
+34878 1 2
+34879 1 2
+34880 1 2
+34881 1 2
+34882 1 2
+34883 1 2
+34884 1 2
+34885 1 2
+34886 1 2
+34887 1 2
+34888 1 2
+34889 1 2
+34890 1 2
+34891 1 2
+34892 1 2
+34893 1 2
+34894 1 2
+34895 1 2
+34896 1 2
+34897 1 2
+34898 1 2
+34899 1 2
+34900 1 2
+34901 1 2
+34902 1 2
+34903 1 2
+34904 1 2
+34905 1 2
+34906 1 2
+34907 1 2
+34908 1 2
+34909 1 2
+34910 1 2
+34911 1 2
+34912 1 2
+34913 1 2
+34914 1 2
+34915 1 2
+34916 1 2
+34917 1 2
+34918 1 2
+34919 1 2
+34920 1 2
+34921 1 2
+34922 1 2
+34923 1 2
+34924 1 2
+34925 1 2
+34926 1 2
+34927 1 2
+34928 1 2
+34929 1 2
+34930 1 2
+34931 1 2
+34932 1 2
+34933 1 2
+34934 1 2
+34935 1 2
+34936 1 2
+34937 1 2
+34938 1 2
+34939 1 2
+34940 1 2
+34941 1 2
+34942 1 2
+34943 1 2
+34944 1 2
+34945 1 2
+34946 1 2
+34947 1 2
+34948 1 2
+34949 1 2
+34950 1 2
+34951 1 2
+34952 1 2
+34953 1 2
+34954 1 2
+34955 1 2
+34956 1 2
+34957 1 2
+34958 1 2
+34959 1 2
+34960 1 2
+34961 1 2
+34962 1 2
+34963 1 2
+34964 1 2
+34965 1 2
+34966 1 2
+34967 1 2
+34968 1 2
+34969 1 2
+34970 1 2
+34971 1 2
+34972 1 2
+34973 1 2
+34974 1 2
+34975 1 2
+34976 1 2
+34977 1 2
+34978 1 2
+34979 1 2
+34980 1 2
+34981 1 2
+34982 1 2
+34983 1 2
+34984 1 2
+34985 1 2
+34986 1 2
+34987 1 2
+34988 1 2
+34989 1 2
+34990 1 2
+34991 1 2
+34992 1 2
+34993 1 2
+34994 1 2
+34995 1 2
+34996 1 2
+34997 1 2
+34998 1 2
+34999 1 2
+35000 1 2
+35001 1 2
+35002 1 2
+35003 1 2
+35004 1 2
+35005 1 2
+35006 1 2
+35007 1 2
+35008 1 2
+35009 1 2
+35010 1 2
+35011 1 2
+35012 1 2
+35013 1 2
+35014 1 2
+35015 1 2
+35016 1 2
+35017 1 2
+35018 1 2
+35019 1 2
+35020 1 2
+35021 1 2
+35022 1 2
+35023 1 2
+35024 1 2
+35025 1 2
+35026 1 2
+35027 1 2
+35028 1 2
+35029 1 2
+35030 1 2
+35031 1 2
+35032 1 2
+35033 1 2
+35034 1 2
+35035 1 2
+35036 1 2
+35037 1 2
+35038 1 2
+35039 1 2
+35040 1 2
+35041 1 2
+35042 1 2
+35043 1 2
+35044 1 2
+35045 1 2
+35046 1 2
+35047 1 2
+35048 1 2
+35049 1 2
+35050 1 2
+35051 1 2
+35052 1 2
+35053 1 2
+35054 1 2
+35055 1 2
+35056 1 2
+35057 1 2
+35058 1 2
+35059 1 2
+35060 1 2
+35061 1 2
+35062 1 2
+35063 1 2
+35064 1 2
+35065 1 2
+35066 1 2
+35067 1 2
+35068 1 2
+35069 1 2
+35070 1 2
+35071 1 2
+35072 1 2
+35073 1 2
+35074 1 2
+35075 1 2
+35076 1 2
+35077 1 2
+35078 1 2
+35079 1 2
+35080 1 2
+35081 1 2
+35082 1 2
+35083 1 2
+35084 1 2
+35085 1 2
+35086 1 2
+35087 1 2
+35088 1 2
+35089 1 2
+35090 1 2
+35091 1 2
+35092 1 2
+35093 1 2
+35094 1 2
+35095 1 2
+35096 1 2
+35097 1 2
+35098 1 2
+35099 1 2
+35100 1 2
+35101 1 2
+35102 1 2
+35103 1 2
+35104 1 2
+35105 1 2
+35106 1 2
+35107 1 2
+35108 1 2
+35109 1 2
+35110 1 2
+35111 1 2
+35112 1 2
+35113 1 2
+35114 1 2
+35115 1 2
+35116 1 2
+35117 1 2
+35118 1 2
+35119 1 2
+35120 1 2
+35121 1 2
+35122 1 2
+35123 1 2
+35124 1 2
+35125 1 2
+35126 1 2
+35127 1 2
+35128 1 2
+35129 1 2
+35130 1 2
+35131 1 2
+35132 1 2
+35133 1 2
+35134 1 2
+35135 1 2
+35136 1 2
+35137 1 2
+35138 1 2
+35139 1 2
+35140 1 2
+35141 1 2
+35142 1 2
+35143 1 2
+35144 1 2
+35145 1 2
+35146 1 2
+35147 1 2
+35148 1 2
+35149 1 2
+35150 1 2
+35151 1 2
+35152 1 2
+35153 1 2
+35154 1 2
+35155 1 2
+35156 1 2
+35157 1 2
+35158 1 2
+35159 1 2
+35160 1 2
+35161 1 2
+35162 1 2
+35163 1 2
+35164 1 2
+35165 1 2
+35166 1 2
+35167 1 2
+35168 1 2
+35169 1 2
+35170 1 2
+35171 1 2
+35172 1 2
+35173 1 2
+35174 1 2
+35175 1 2
+35176 1 2
+35177 1 2
+35178 1 2
+35179 1 2
+35180 1 2
+35181 1 2
+35182 1 2
+35183 1 2
+35184 1 2
+35185 1 2
+35186 1 2
+35187 1 2
+35188 1 2
+35189 1 2
+35190 1 2
+35191 1 2
+35192 1 2
+35193 1 2
+35194 1 2
+35195 1 2
+35196 1 2
+35197 1 2
+35198 1 2
+35199 1 2
+35200 1 2
+35201 1 2
+35202 1 2
+35203 1 2
+35204 1 2
+35205 1 2
+35206 1 2
+35207 1 2
+35208 1 2
+35209 1 2
+35210 1 2
+35211 1 2
+35212 1 2
+35213 1 2
+35214 1 2
+35215 1 2
+35216 1 2
+35217 1 2
+35218 1 2
+35219 1 2
+35220 1 2
+35221 1 2
+35222 1 2
+35223 1 2
+35224 1 2
+35225 1 2
+35226 1 2
+35227 1 2
+35228 1 2
+35229 1 2
+35230 1 2
+35231 1 2
+35232 1 2
+35233 1 2
+35234 1 2
+35235 1 2
+35236 1 2
+35237 1 2
+35238 1 2
+35239 1 2
+35240 1 2
+35241 1 2
+35242 1 2
+35243 1 2
+35244 1 2
+35245 1 2
+35246 1 2
+35247 1 2
+35248 1 2
+35249 1 2
+35250 1 2
+35251 1 2
+35252 1 2
+35253 1 2
+35254 1 2
+35255 1 2
+35256 1 2
+35257 1 2
+35258 1 2
+35259 1 2
+35260 1 2
+35261 1 2
+35262 1 2
+35263 1 2
+35264 1 2
+35265 1 2
+35266 1 2
+35267 1 2
+35268 1 2
+35269 1 2
+35270 1 2
+35271 1 2
+35272 1 2
+35273 1 2
+35274 1 2
+35275 1 2
+35276 1 2
+35277 1 2
+35278 1 2
+35279 1 2
+35280 1 2
+35281 1 2
+35282 1 2
+35283 1 2
+35284 1 2
+35285 1 2
+35286 1 2
+35287 1 2
+35288 1 2
+35289 1 2
+35290 1 2
+35291 1 2
+35292 1 2
+35293 1 2
+35294 1 2
+35295 1 2
+35296 1 2
+35297 1 2
+35298 1 2
+35299 1 2
+35300 1 2
+35301 1 2
+35302 1 2
+35303 1 2
+35304 1 2
+35305 1 2
+35306 1 2
+35307 1 2
+35308 1 2
+35309 1 2
+35310 1 2
+35311 1 2
+35312 1 2
+35313 1 2
+35314 1 2
+35315 1 2
+35316 1 2
+35317 1 2
+35318 1 2
+35319 1 2
+35320 1 2
+35321 1 2
+35322 1 2
+35323 1 2
+35324 1 2
+35325 1 2
+35326 1 2
+35327 1 2
+35328 1 2
+35329 1 2
+35330 1 2
+35331 1 2
+35332 1 2
+35333 1 2
+35334 1 2
+35335 1 2
+35336 1 2
+35337 1 2
+35338 1 2
+35339 1 2
+35340 1 2
+35341 1 2
+35342 1 2
+35343 1 2
+35344 1 2
+35345 1 2
+35346 1 2
+35347 1 2
+35348 1 2
+35349 1 2
+35350 1 2
+35351 1 2
+35352 1 2
+35353 1 2
+35354 1 2
+35355 1 2
+35356 1 2
+35357 1 2
+35358 1 2
+35359 1 2
+35360 1 2
+35361 1 2
+35362 1 2
+35363 1 2
+35364 1 2
+35365 1 2
+35366 1 2
+35367 1 2
+35368 1 2
+35369 1 2
+35370 1 2
+35371 1 2
+35372 1 2
+35373 1 2
+35374 1 2
+35375 1 2
+35376 1 2
+35377 1 2
+35378 1 2
+35379 1 2
+35380 1 2
+35381 1 2
+35382 1 2
+35383 1 2
+35384 1 2
+35385 1 2
+35386 1 2
+35387 1 2
+35388 1 2
+35389 1 2
+35390 1 2
+35391 1 2
+35392 1 2
+35393 1 2
+35394 1 2
+35395 1 2
+35396 1 2
+35397 1 2
+35398 1 2
+35399 1 2
+35400 1 2
+35401 1 2
+35402 1 2
+35403 1 2
+35404 1 2
+35405 1 2
+35406 1 2
+35407 1 2
+35408 1 2
+35409 1 2
+35410 1 2
+35411 1 2
+35412 1 2
+35413 1 2
+35414 1 2
+35415 1 2
+35416 1 2
+35417 1 2
+35418 1 2
+35419 1 2
+35420 1 2
+35421 1 2
+35422 1 2
+35423 1 2
+35424 1 2
+35425 1 2
+35426 1 2
+35427 1 2
+35428 1 2
+35429 1 2
+35430 1 2
+35431 1 2
+35432 1 2
+35433 1 2
+35434 1 2
+35435 1 2
+35436 1 2
+35437 1 2
+35438 1 2
+35439 1 2
+35440 1 2
+35441 1 2
+35442 1 2
+35443 1 2
+35444 1 2
+35445 1 2
+35446 1 2
+35447 1 2
+35448 1 2
+35449 1 2
+35450 1 2
+35451 1 2
+35452 1 2
+35453 1 2
+35454 1 2
+35455 1 2
+35456 1 2
+35457 1 2
+35458 1 2
+35459 1 2
+35460 1 2
+35461 1 2
+35462 1 2
+35463 1 2
+35464 1 2
+35465 1 2
+35466 1 2
+35467 1 2
+35468 1 2
+35469 1 2
+35470 1 2
+35471 1 2
+35472 1 2
+35473 1 2
+35474 1 2
+35475 1 2
+35476 1 2
+35477 1 2
+35478 1 2
+35479 1 2
+35480 1 2
+35481 1 2
+35482 1 2
+35483 1 2
+35484 1 2
+35485 1 2
+35486 1 2
+35487 1 2
+35488 1 2
+35489 1 2
+35490 1 2
+35491 1 2
+35492 1 2
+35493 1 2
+35494 1 2
+35495 1 2
+35496 1 2
+35497 1 2
+35498 1 2
+35499 1 2
+35500 1 2
+35501 1 2
+35502 1 2
+35503 1 2
+35504 1 2
+35505 1 2
+35506 1 2
+35507 1 2
+35508 1 2
+35509 1 2
+35510 1 2
+35511 1 2
+35512 1 2
+35513 1 2
+35514 1 2
+35515 1 2
+35516 1 2
+35517 1 2
+35518 1 2
+35519 1 2
+35520 1 2
+35521 1 2
+35522 1 2
+35523 1 2
+35524 1 2
+35525 1 2
+35526 1 2
+35527 1 2
+35528 1 2
+35529 1 2
+35530 1 2
+35531 1 2
+35532 1 2
+35533 1 2
+35534 1 2
+35535 1 2
+35536 1 2
+35537 1 2
+35538 1 2
+35539 1 2
+35540 1 2
+35541 1 2
+35542 1 2
+35543 1 2
+35544 1 2
+35545 1 2
+35546 1 2
+35547 1 2
+35548 1 2
+35549 1 2
+35550 1 2
+35551 1 2
+35552 1 2
+35553 1 2
+35554 1 2
+35555 1 2
+35556 1 2
+35557 1 2
+35558 1 2
+35559 1 2
+35560 1 2
+35561 1 2
+35562 1 2
+35563 1 2
+35564 1 2
+35565 1 2
+35566 1 2
+35567 1 2
+35568 1 2
+35569 1 2
+35570 1 2
+35571 1 2
+35572 1 2
+35573 1 2
+35574 1 2
+35575 1 2
+35576 1 2
+35577 1 2
+35578 1 2
+35579 1 2
+35580 1 2
+35581 1 2
+35582 1 2
+35583 1 2
+35584 1 2
+35585 1 2
+35586 1 2
+35587 1 2
+35588 1 2
+35589 1 2
+35590 1 2
+35591 1 2
+35592 1 2
+35593 1 2
+35594 1 2
+35595 1 2
+35596 1 2
+35597 1 2
+35598 1 2
+35599 1 2
+35600 1 2
+35601 1 2
+35602 1 2
+35603 1 2
+35604 1 2
+35605 1 2
+35606 1 2
+35607 1 2
+35608 1 2
+35609 1 2
+35610 1 2
+35611 1 2
+35612 1 2
+35613 1 2
+35614 1 2
+35615 1 2
+35616 1 2
+35617 1 2
+35618 1 2
+35619 1 2
+35620 1 2
+35621 1 2
+35622 1 2
+35623 1 2
+35624 1 2
+35625 1 2
+35626 1 2
+35627 1 2
+35628 1 2
+35629 1 2
+35630 1 2
+35631 1 2
+35632 1 2
+35633 1 2
+35634 1 2
+35635 1 2
+35636 1 2
+35637 1 2
+35638 1 2
+35639 1 2
+35640 1 2
+35641 1 2
+35642 1 2
+35643 1 2
+35644 1 2
+35645 1 2
+35646 1 2
+35647 1 2
+35648 1 2
+35649 1 2
+35650 1 2
+35651 1 2
+35652 1 2
+35653 1 2
+35654 1 2
+35655 1 2
+35656 1 2
+35657 1 2
+35658 1 2
+35659 1 2
+35660 1 2
+35661 1 2
+35662 1 2
+35663 1 2
+35664 1 2
+35665 1 2
+35666 1 2
+35667 1 2
+35668 1 2
+35669 1 2
+35670 1 2
+35671 1 2
+35672 1 2
+35673 1 2
+35674 1 2
+35675 1 2
+35676 1 2
+35677 1 2
+35678 1 2
+35679 1 2
+35680 1 2
+35681 1 2
+35682 1 2
+35683 1 2
+35684 1 2
+35685 1 2
+35686 1 2
+35687 1 2
+35688 1 2
+35689 1 2
+35690 1 2
+35691 1 2
+35692 1 2
+35693 1 2
+35694 1 2
+35695 1 2
+35696 1 2
+35697 1 2
+35698 1 2
+35699 1 2
+35700 1 2
+35701 1 2
+35702 1 2
+35703 1 2
+35704 1 2
+35705 1 2
+35706 1 2
+35707 1 2
+35708 1 2
+35709 1 2
+35710 1 2
+35711 1 2
+35712 1 2
+35713 1 2
+35714 1 2
+35715 1 2
+35716 1 2
+35717 1 2
+35718 1 2
+35719 1 2
+35720 1 2
+35721 1 2
+35722 1 2
+35723 1 2
+35724 1 2
+35725 1 2
+35726 1 2
+35727 1 2
+35728 1 2
+35729 1 2
+35730 1 2
+35731 1 2
+35732 1 2
+35733 1 2
+35734 1 2
+35735 1 2
+35736 1 2
+35737 1 2
+35738 1 2
+35739 1 2
+35740 1 2
+35741 1 2
+35742 1 2
+35743 1 2
+35744 1 2
+35745 1 2
+35746 1 2
+35747 1 2
+35748 1 2
+35749 1 2
+35750 1 2
+35751 1 2
+35752 1 2
+35753 1 2
+35754 1 2
+35755 1 2
+35756 1 2
+35757 1 2
+35758 1 2
+35759 1 2
+35760 1 2
+35761 1 2
+35762 1 2
+35763 1 2
+35764 1 2
+35765 1 2
+35766 1 2
+35767 1 2
+35768 1 2
+35769 1 2
+35770 1 2
+35771 1 2
+35772 1 2
+35773 1 2
+35774 1 2
+35775 1 2
+35776 1 2
+35777 1 2
+35778 1 2
+35779 1 2
+35780 1 2
+35781 1 2
+35782 1 2
+35783 1 2
+35784 1 2
+35785 1 2
+35786 1 2
+35787 1 2
+35788 1 2
+35789 1 2
+35790 1 2
+35791 1 2
+35792 1 2
+35793 1 2
+35794 1 2
+35795 1 2
+35796 1 2
+35797 1 2
+35798 1 2
+35799 1 2
+35800 1 2
+35801 1 2
+35802 1 2
+35803 1 2
+35804 1 2
+35805 1 2
+35806 1 2
+35807 1 2
+35808 1 2
+35809 1 2
+35810 1 2
+35811 1 2
+35812 1 2
+35813 1 2
+35814 1 2
+35815 1 2
+35816 1 2
+35817 1 2
+35818 1 2
+35819 1 2
+35820 1 2
+35821 1 2
+35822 1 2
+35823 1 2
+35824 1 2
+35825 1 2
+35826 1 2
+35827 1 2
+35828 1 2
+35829 1 2
+35830 1 2
+35831 1 2
+35832 1 2
+35833 1 2
+35834 1 2
+35835 1 2
+35836 1 2
+35837 1 2
+35838 1 2
+35839 1 2
+35840 1 2
+35841 1 2
+35842 1 2
+35843 1 2
+35844 1 2
+35845 1 2
+35846 1 2
+35847 1 2
+35848 1 2
+35849 1 2
+35850 1 2
+35851 1 2
+35852 1 2
+35853 1 2
+35854 1 2
+35855 1 2
+35856 1 2
+35857 1 2
+35858 1 2
+35859 1 2
+35860 1 2
+35861 1 2
+35862 1 2
+35863 1 2
+35864 1 2
+35865 1 2
+35866 1 2
+35867 1 2
+35868 1 2
+35869 1 2
+35870 1 2
+35871 1 2
+35872 1 2
+35873 1 2
+35874 1 2
+35875 1 2
+35876 1 2
+35877 1 2
+35878 1 2
+35879 1 2
+35880 1 2
+35881 1 2
+35882 1 2
+35883 1 2
+35884 1 2
+35885 1 2
+35886 1 2
+35887 1 2
+35888 1 2
+35889 1 2
+35890 1 2
+35891 1 2
+35892 1 2
+35893 1 2
+35894 1 2
+35895 1 2
+35896 1 2
+35897 1 2
+35898 1 2
+35899 1 2
+35900 1 2
+35901 1 2
+35902 1 2
+35903 1 2
+35904 1 2
+35905 1 2
+35906 1 2
+35907 1 2
+35908 1 2
+35909 1 2
+35910 1 2
+35911 1 2
+35912 1 2
+35913 1 2
+35914 1 2
+35915 1 2
+35916 1 2
+35917 1 2
+35918 1 2
+35919 1 2
+35920 1 2
+35921 1 2
+35922 1 2
+35923 1 2
+35924 1 2
+35925 1 2
+35926 1 2
+35927 1 2
+35928 1 2
+35929 1 2
+35930 1 2
+35931 1 2
+35932 1 2
+35933 1 2
+35934 1 2
+35935 1 2
+35936 1 2
+35937 1 2
+35938 1 2
+35939 1 2
+35940 1 2
+35941 1 2
+35942 1 2
+35943 1 2
+35944 1 2
+35945 1 2
+35946 1 2
+35947 1 2
+35948 1 2
+35949 1 2
+35950 1 2
+35951 1 2
+35952 1 2
+35953 1 2
+35954 1 2
+35955 1 2
+35956 1 2
+35957 1 2
+35958 1 2
+35959 1 2
+35960 1 2
+35961 1 2
+35962 1 2
+35963 1 2
+35964 1 2
+35965 1 2
+35966 1 2
+35967 1 2
+35968 1 2
+35969 1 2
+35970 1 2
+35971 1 2
+35972 1 2
+35973 1 2
+35974 1 2
+35975 1 2
+35976 1 2
+35977 1 2
+35978 1 2
+35979 1 2
+35980 1 2
+35981 1 2
+35982 1 2
+35983 1 2
+35984 1 2
+35985 1 2
+35986 1 2
+35987 1 2
+35988 1 2
+35989 1 2
+35990 1 2
+35991 1 2
+35992 1 2
+35993 1 2
+35994 1 2
+35995 1 2
+35996 1 2
+35997 1 2
+35998 1 2
+35999 1 2
+36000 1 2
+36001 1 2
+36002 1 2
+36003 1 2
+36004 1 2
+36005 1 2
+36006 1 2
+36007 1 2
+36008 1 2
+36009 1 2
+36010 1 2
+36011 1 2
+36012 1 2
+36013 1 2
+36014 1 2
+36015 1 2
+36016 1 2
+36017 1 2
+36018 1 2
+36019 1 2
+36020 1 2
+36021 1 2
+36022 1 2
+36023 1 2
+36024 1 2
+36025 1 2
+36026 1 2
+36027 1 2
+36028 1 2
+36029 1 2
+36030 1 2
+36031 1 2
+36032 1 2
+36033 1 2
+36034 1 2
+36035 1 2
+36036 1 2
+36037 1 2
+36038 1 2
+36039 1 2
+36040 1 2
+36041 1 2
+36042 1 2
+36043 1 2
+36044 1 2
+36045 1 2
+36046 1 2
+36047 1 2
+36048 1 2
+36049 1 2
+36050 1 2
+36051 1 2
+36052 1 2
+36053 1 2
+36054 1 2
+36055 1 2
+36056 1 2
+36057 1 2
+36058 1 2
+36059 1 2
+36060 1 2
+36061 1 2
+36062 1 2
+36063 1 2
+36064 1 2
+36065 1 2
+36066 1 2
+36067 1 2
+36068 1 2
+36069 1 2
+36070 1 2
+36071 1 2
+36072 1 2
+36073 1 2
+36074 1 2
+36075 1 2
+36076 1 2
+36077 1 2
+36078 1 2
+36079 1 2
+36080 1 2
+36081 1 2
+36082 1 2
+36083 1 2
+36084 1 2
+36085 1 2
+36086 1 2
+36087 1 2
+36088 1 2
+36089 1 2
+36090 1 2
+36091 1 2
+36092 1 2
+36093 1 2
+36094 1 2
+36095 1 2
+36096 1 2
+36097 1 2
+36098 1 2
+36099 1 2
+36100 1 2
+36101 1 2
+36102 1 2
+36103 1 2
+36104 1 2
+36105 1 2
+36106 1 2
+36107 1 2
+36108 1 2
+36109 1 2
+36110 1 2
+36111 1 2
+36112 1 2
+36113 1 2
+36114 1 2
+36115 1 2
+36116 1 2
+36117 1 2
+36118 1 2
+36119 1 2
+36120 1 2
+36121 1 2
+36122 1 2
+36123 1 2
+36124 1 2
+36125 1 2
+36126 1 2
+36127 1 2
+36128 1 2
+36129 1 2
+36130 1 2
+36131 1 2
+36132 1 2
+36133 1 2
+36134 1 2
+36135 1 2
+36136 1 2
+36137 1 2
+36138 1 2
+36139 1 2
+36140 1 2
+36141 1 2
+36142 1 2
+36143 1 2
+36144 1 2
+36145 1 2
+36146 1 2
+36147 1 2
+36148 1 2
+36149 1 2
+36150 1 2
+36151 1 2
+36152 1 2
+36153 1 2
+36154 1 2
+36155 1 2
+36156 1 2
+36157 1 2
+36158 1 2
+36159 1 2
+36160 1 2
+36161 1 2
+36162 1 2
+36163 1 2
+36164 1 2
+36165 1 2
+36166 1 2
+36167 1 2
+36168 1 2
+36169 1 2
+36170 1 2
+36171 1 2
+36172 1 2
+36173 1 2
+36174 1 2
+36175 1 2
+36176 1 2
+36177 1 2
+36178 1 2
+36179 1 2
+36180 1 2
+36181 1 2
+36182 1 2
+36183 1 2
+36184 1 2
+36185 1 2
+36186 1 2
+36187 1 2
+36188 1 2
+36189 1 2
+36190 1 2
+36191 1 2
+36192 1 2
+36193 1 2
+36194 1 2
+36195 1 2
+36196 1 2
+36197 1 2
+36198 1 2
+36199 1 2
+36200 1 2
+36201 1 2
+36202 1 2
+36203 1 2
+36204 1 2
+36205 1 2
+36206 1 2
+36207 1 2
+36208 1 2
+36209 1 2
+36210 1 2
+36211 1 2
+36212 1 2
+36213 1 2
+36214 1 2
+36215 1 2
+36216 1 2
+36217 1 2
+36218 1 2
+36219 1 2
+36220 1 2
+36221 1 2
+36222 1 2
+36223 1 2
+36224 1 2
+36225 1 2
+36226 1 2
+36227 1 2
+36228 1 2
+36229 1 2
+36230 1 2
+36231 1 2
+36232 1 2
+36233 1 2
+36234 1 2
+36235 1 2
+36236 1 2
+36237 1 2
+36238 1 2
+36239 1 2
+36240 1 2
+36241 1 2
+36242 1 2
+36243 1 2
+36244 1 2
+36245 1 2
+36246 1 2
+36247 1 2
+36248 1 2
+36249 1 2
+36250 1 2
+36251 1 2
+36252 1 2
+36253 1 2
+36254 1 2
+36255 1 2
+36256 1 2
+36257 1 2
+36258 1 2
+36259 1 2
+36260 1 2
+36261 1 2
+36262 1 2
+36263 1 2
+36264 1 2
+36265 1 2
+36266 1 2
+36267 1 2
+36268 1 2
+36269 1 2
+36270 1 2
+36271 1 2
+36272 1 2
+36273 1 2
+36274 1 2
+36275 1 2
+36276 1 2
+36277 1 2
+36278 1 2
+36279 1 2
+36280 1 2
+36281 1 2
+36282 1 2
+36283 1 2
+36284 1 2
+36285 1 2
+36286 1 2
+36287 1 2
+36288 1 2
+36289 1 2
+36290 1 2
+36291 1 2
+36292 1 2
+36293 1 2
+36294 1 2
+36295 1 2
+36296 1 2
+36297 1 2
+36298 1 2
+36299 1 2
+36300 1 2
+36301 1 2
+36302 1 2
+36303 1 2
+36304 1 2
+36305 1 2
+36306 1 2
+36307 1 2
+36308 1 2
+36309 1 2
+36310 1 2
+36311 1 2
+36312 1 2
+36313 1 2
+36314 1 2
+36315 1 2
+36316 1 2
+36317 1 2
+36318 1 2
+36319 1 2
+36320 1 2
+36321 1 2
+36322 1 2
+36323 1 2
+36324 1 2
+36325 1 2
+36326 1 2
+36327 1 2
+36328 1 2
+36329 1 2
+36330 1 2
+36331 1 2
+36332 1 2
+36333 1 2
+36334 1 2
+36335 1 2
+36336 1 2
+36337 1 2
+36338 1 2
+36339 1 2
+36340 1 2
+36341 1 2
+36342 1 2
+36343 1 2
+36344 1 2
+36345 1 2
+36346 1 2
+36347 1 2
+36348 1 2
+36349 1 2
+36350 1 2
+36351 1 2
+36352 1 2
+36353 1 2
+36354 1 2
+36355 1 2
+36356 1 2
+36357 1 2
+36358 1 2
+36359 1 2
+36360 1 2
+36361 1 2
+36362 1 2
+36363 1 2
+36364 1 2
+36365 1 2
+36366 1 2
+36367 1 2
+36368 1 2
+36369 1 2
+36370 1 2
+36371 1 2
+36372 1 2
+36373 1 2
+36374 1 2
+36375 1 2
+36376 1 2
+36377 1 2
+36378 1 2
+36379 1 2
+36380 1 2
+36381 1 2
+36382 1 2
+36383 1 2
+36384 1 2
+36385 1 2
+36386 1 2
+36387 1 2
+36388 1 2
+36389 1 2
+36390 1 2
+36391 1 2
+36392 1 2
+36393 1 2
+36394 1 2
+36395 1 2
+36396 1 2
+36397 1 2
+36398 1 2
+36399 1 2
+36400 1 2
+36401 1 2
+36402 1 2
+36403 1 2
+36404 1 2
+36405 1 2
+36406 1 2
+36407 1 2
+36408 1 2
+36409 1 2
+36410 1 2
+36411 1 2
+36412 1 2
+36413 1 2
+36414 1 2
+36415 1 2
+36416 1 2
+36417 1 2
+36418 1 2
+36419 1 2
+36420 1 2
+36421 1 2
+36422 1 2
+36423 1 2
+36424 1 2
+36425 1 2
+36426 1 2
+36427 1 2
+36428 1 2
+36429 1 2
+36430 1 2
+36431 1 2
+36432 1 2
+36433 1 2
+36434 1 2
+36435 1 2
+36436 1 2
+36437 1 2
+36438 1 2
+36439 1 2
+36440 1 2
+36441 1 2
+36442 1 2
+36443 1 2
+36444 1 2
+36445 1 2
+36446 1 2
+36447 1 2
+36448 1 2
+36449 1 2
+36450 1 2
+36451 1 2
+36452 1 2
+36453 1 2
+36454 1 2
+36455 1 2
+36456 1 2
+36457 1 2
+36458 1 2
+36459 1 2
+36460 1 2
+36461 1 2
+36462 1 2
+36463 1 2
+36464 1 2
+36465 1 2
+36466 1 2
+36467 1 2
+36468 1 2
+36469 1 2
+36470 1 2
+36471 1 2
+36472 1 2
+36473 1 2
+36474 1 2
+36475 1 2
+36476 1 2
+36477 1 2
+36478 1 2
+36479 1 2
+36480 1 2
+36481 1 2
+36482 1 2
+36483 1 2
+36484 1 2
+36485 1 2
+36486 1 2
+36487 1 2
+36488 1 2
+36489 1 2
+36490 1 2
+36491 1 2
+36492 1 2
+36493 1 2
+36494 1 2
+36495 1 2
+36496 1 2
+36497 1 2
+36498 1 2
+36499 1 2
+36500 1 2
+36501 1 2
+36502 1 2
+36503 1 2
+36504 1 2
+36505 1 2
+36506 1 2
+36507 1 2
+36508 1 2
+36509 1 2
+36510 1 2
+36511 1 2
+36512 1 2
+36513 1 2
+36514 1 2
+36515 1 2
+36516 1 2
+36517 1 2
+36518 1 2
+36519 1 2
+36520 1 2
+36521 1 2
+36522 1 2
+36523 1 2
+36524 1 2
+36525 1 2
+36526 1 2
+36527 1 2
+36528 1 2
+36529 1 2
+36530 1 2
+36531 1 2
+36532 1 2
+36533 1 2
+36534 1 2
+36535 1 2
+36536 1 2
+36537 1 2
+36538 1 2
+36539 1 2
+36540 1 2
+36541 1 2
+36542 1 2
+36543 1 2
+36544 1 2
+36545 1 2
+36546 1 2
+36547 1 2
+36548 1 2
+36549 1 2
+36550 1 2
+36551 1 2
+36552 1 2
+36553 1 2
+36554 1 2
+36555 1 2
+36556 1 2
+36557 1 2
+36558 1 2
+36559 1 2
+36560 1 2
+36561 1 2
+36562 1 2
+36563 1 2
+36564 1 2
+36565 1 2
+36566 1 2
+36567 1 2
+36568 1 2
+36569 1 2
+36570 1 2
+36571 1 2
+36572 1 2
+36573 1 2
+36574 1 2
+36575 1 2
+36576 1 2
+36577 1 2
+36578 1 2
+36579 1 2
+36580 1 2
+36581 1 2
+36582 1 2
+36583 1 2
+36584 1 2
+36585 1 2
+36586 1 2
+36587 1 2
+36588 1 2
+36589 1 2
+36590 1 2
+36591 1 2
+36592 1 2
+36593 1 2
+36594 1 2
+36595 1 2
+36596 1 2
+36597 1 2
+36598 1 2
+36599 1 2
+36600 1 2
+36601 1 2
+36602 1 2
+36603 1 2
+36604 1 2
+36605 1 2
+36606 1 2
+36607 1 2
+36608 1 2
+36609 1 2
+36610 1 2
+36611 1 2
+36612 1 2
+36613 1 2
+36614 1 2
+36615 1 2
+36616 1 2
+36617 1 2
+36618 1 2
+36619 1 2
+36620 1 2
+36621 1 2
+36622 1 2
+36623 1 2
+36624 1 2
+36625 1 2
+36626 1 2
+36627 1 2
+36628 1 2
+36629 1 2
+36630 1 2
+36631 1 2
+36632 1 2
+36633 1 2
+36634 1 2
+36635 1 2
+36636 1 2
+36637 1 2
+36638 1 2
+36639 1 2
+36640 1 2
+36641 1 2
+36642 1 2
+36643 1 2
+36644 1 2
+36645 1 2
+36646 1 2
+36647 1 2
+36648 1 2
+36649 1 2
+36650 1 2
+36651 1 2
+36652 1 2
+36653 1 2
+36654 1 2
+36655 1 2
+36656 1 2
+36657 1 2
+36658 1 2
+36659 1 2
+36660 1 2
+36661 1 2
+36662 1 2
+36663 1 2
+36664 1 2
+36665 1 2
+36666 1 2
+36667 1 2
+36668 1 2
+36669 1 2
+36670 1 2
+36671 1 2
+36672 1 2
+36673 1 2
+36674 1 2
+36675 1 2
+36676 1 2
+36677 1 2
+36678 1 2
+36679 1 2
+36680 1 2
+36681 1 2
+36682 1 2
+36683 1 2
+36684 1 2
+36685 1 2
+36686 1 2
+36687 1 2
+36688 1 2
+36689 1 2
+36690 1 2
+36691 1 2
+36692 1 2
+36693 1 2
+36694 1 2
+36695 1 2
+36696 1 2
+36697 1 2
+36698 1 2
+36699 1 2
+36700 1 2
+36701 1 2
+36702 1 2
+36703 1 2
+36704 1 2
+36705 1 2
+36706 1 2
+36707 1 2
+36708 1 2
+36709 1 2
+36710 1 2
+36711 1 2
+36712 1 2
+36713 1 2
+36714 1 2
+36715 1 2
+36716 1 2
+36717 1 2
+36718 1 2
+36719 1 2
+36720 1 2
+36721 1 2
+36722 1 2
+36723 1 2
+36724 1 2
+36725 1 2
+36726 1 2
+36727 1 2
+36728 1 2
+36729 1 2
+36730 1 2
+36731 1 2
+36732 1 2
+36733 1 2
+36734 1 2
+36735 1 2
+36736 1 2
+36737 1 2
+36738 1 2
+36739 1 2
+36740 1 2
+36741 1 2
+36742 1 2
+36743 1 2
+36744 1 2
+36745 1 2
+36746 1 2
+36747 1 2
+36748 1 2
+36749 1 2
+36750 1 2
+36751 1 2
+36752 1 2
+36753 1 2
+36754 1 2
+36755 1 2
+36756 1 2
+36757 1 2
+36758 1 2
+36759 1 2
+36760 1 2
+36761 1 2
+36762 1 2
+36763 1 2
+36764 1 2
+36765 1 2
+36766 1 2
+36767 1 2
+36768 1 2
+36769 1 2
+36770 1 2
+36771 1 2
+36772 1 2
+36773 1 2
+36774 1 2
+36775 1 2
+36776 1 2
+36777 1 2
+36778 1 2
+36779 1 2
+36780 1 2
+36781 1 2
+36782 1 2
+36783 1 2
+36784 1 2
+36785 1 2
+36786 1 2
+36787 1 2
+36788 1 2
+36789 1 2
+36790 1 2
+36791 1 2
+36792 1 2
+36793 1 2
+36794 1 2
+36795 1 2
+36796 1 2
+36797 1 2
+36798 1 2
+36799 1 2
+36800 1 2
+36801 1 2
+36802 1 2
+36803 1 2
+36804 1 2
+36805 1 2
+36806 1 2
+36807 1 2
+36808 1 2
+36809 1 2
+36810 1 2
+36811 1 2
+36812 1 2
+36813 1 2
+36814 1 2
+36815 1 2
+36816 1 2
+36817 1 2
+36818 1 2
+36819 1 2
+36820 1 2
+36821 1 2
+36822 1 2
+36823 1 2
+36824 1 2
+36825 1 2
+36826 1 2
+36827 1 2
+36828 1 2
+36829 1 2
+36830 1 2
+36831 1 2
+36832 1 2
+36833 1 2
+36834 1 2
+36835 1 2
+36836 1 2
+36837 1 2
+36838 1 2
+36839 1 2
+36840 1 2
+36841 1 2
+36842 1 2
+36843 1 2
+36844 1 2
+36845 1 2
+36846 1 2
+36847 1 2
+36848 1 2
+36849 1 2
+36850 1 2
+36851 1 2
+36852 1 2
+36853 1 2
+36854 1 2
+36855 1 2
+36856 1 2
+36857 1 2
+36858 1 2
+36859 1 2
+36860 1 2
+36861 1 2
+36862 1 2
+36863 1 2
+36864 1 2
+36865 1 2
+36866 1 2
+36867 1 2
+36868 1 2
+36869 1 2
+36870 1 2
+36871 1 2
+36872 1 2
+36873 1 2
+36874 1 2
+36875 1 2
+36876 1 2
+36877 1 2
+36878 1 2
+36879 1 2
+36880 1 2
+36881 1 2
+36882 1 2
+36883 1 2
+36884 1 2
+36885 1 2
+36886 1 2
+36887 1 2
+36888 1 2
+36889 1 2
+36890 1 2
+36891 1 2
+36892 1 2
+36893 1 2
+36894 1 2
+36895 1 2
+36896 1 2
+36897 1 2
+36898 1 2
+36899 1 2
+36900 1 2
+36901 1 2
+36902 1 2
+36903 1 2
+36904 1 2
+36905 1 2
+36906 1 2
+36907 1 2
+36908 1 2
+36909 1 2
+36910 1 2
+36911 1 2
+36912 1 2
+36913 1 2
+36914 1 2
+36915 1 2
+36916 1 2
+36917 1 2
+36918 1 2
+36919 1 2
+36920 1 2
+36921 1 2
+36922 1 2
+36923 1 2
+36924 1 2
+36925 1 2
+36926 1 2
+36927 1 2
+36928 1 2
+36929 1 2
+36930 1 2
+36931 1 2
+36932 1 2
+36933 1 2
+36934 1 2
+36935 1 2
+36936 1 2
+36937 1 2
+36938 1 2
+36939 1 2
+36940 1 2
+36941 1 2
+36942 1 2
+36943 1 2
+36944 1 2
+36945 1 2
+36946 1 2
+36947 1 2
+36948 1 2
+36949 1 2
+36950 1 2
+36951 1 2
+36952 1 2
+36953 1 2
+36954 1 2
+36955 1 2
+36956 1 2
+36957 1 2
+36958 1 2
+36959 1 2
+36960 1 2
+36961 1 2
+36962 1 2
+36963 1 2
+36964 1 2
+36965 1 2
+36966 1 2
+36967 1 2
+36968 1 2
+36969 1 2
+36970 1 2
+36971 1 2
+36972 1 2
+36973 1 2
+36974 1 2
+36975 1 2
+36976 1 2
+36977 1 2
+36978 1 2
+36979 1 2
+36980 1 2
+36981 1 2
+36982 1 2
+36983 1 2
+36984 1 2
+36985 1 2
+36986 1 2
+36987 1 2
+36988 1 2
+36989 1 2
+36990 1 2
+36991 1 2
+36992 1 2
+36993 1 2
+36994 1 2
+36995 1 2
+36996 1 2
+36997 1 2
+36998 1 2
+36999 1 2
+37000 1 2
+37001 1 2
+37002 1 2
+37003 1 2
+37004 1 2
+37005 1 2
+37006 1 2
+37007 1 2
+37008 1 2
+37009 1 2
+37010 1 2
+37011 1 2
+37012 1 2
+37013 1 2
+37014 1 2
+37015 1 2
+37016 1 2
+37017 1 2
+37018 1 2
+37019 1 2
+37020 1 2
+37021 1 2
+37022 1 2
+37023 1 2
+37024 1 2
+37025 1 2
+37026 1 2
+37027 1 2
+37028 1 2
+37029 1 2
+37030 1 2
+37031 1 2
+37032 1 2
+37033 1 2
+37034 1 2
+37035 1 2
+37036 1 2
+37037 1 2
+37038 1 2
+37039 1 2
+37040 1 2
+37041 1 2
+37042 1 2
+37043 1 2
+37044 1 2
+37045 1 2
+37046 1 2
+37047 1 2
+37048 1 2
+37049 1 2
+37050 1 2
+37051 1 2
+37052 1 2
+37053 1 2
+37054 1 2
+37055 1 2
+37056 1 2
+37057 1 2
+37058 1 2
+37059 1 2
+37060 1 2
+37061 1 2
+37062 1 2
+37063 1 2
+37064 1 2
+37065 1 2
+37066 1 2
+37067 1 2
+37068 1 2
+37069 1 2
+37070 1 2
+37071 1 2
+37072 1 2
+37073 1 2
+37074 1 2
+37075 1 2
+37076 1 2
+37077 1 2
+37078 1 2
+37079 1 2
+37080 1 2
+37081 1 2
+37082 1 2
+37083 1 2
+37084 1 2
+37085 1 2
+37086 1 2
+37087 1 2
+37088 1 2
+37089 1 2
+37090 1 2
+37091 1 2
+37092 1 2
+37093 1 2
+37094 1 2
+37095 1 2
+37096 1 2
+37097 1 2
+37098 1 2
+37099 1 2
+37100 1 2
+37101 1 2
+37102 1 2
+37103 1 2
+37104 1 2
+37105 1 2
+37106 1 2
+37107 1 2
+37108 1 2
+37109 1 2
+37110 1 2
+37111 1 2
+37112 1 2
+37113 1 2
+37114 1 2
+37115 1 2
+37116 1 2
+37117 1 2
+37118 1 2
+37119 1 2
+37120 1 2
+37121 1 2
+37122 1 2
+37123 1 2
+37124 1 2
+37125 1 2
+37126 1 2
+37127 1 2
+37128 1 2
+37129 1 2
+37130 1 2
+37131 1 2
+37132 1 2
+37133 1 2
+37134 1 2
+37135 1 2
+37136 1 2
+37137 1 2
+37138 1 2
+37139 1 2
+37140 1 2
+37141 1 2
+37142 1 2
+37143 1 2
+37144 1 2
+37145 1 2
+37146 1 2
+37147 1 2
+37148 1 2
+37149 1 2
+37150 1 2
+37151 1 2
+37152 1 2
+37153 1 2
+37154 1 2
+37155 1 2
+37156 1 2
+37157 1 2
+37158 1 2
+37159 1 2
+37160 1 2
+37161 1 2
+37162 1 2
+37163 1 2
+37164 1 2
+37165 1 2
+37166 1 2
+37167 1 2
+37168 1 2
+37169 1 2
+37170 1 2
+37171 1 2
+37172 1 2
+37173 1 2
+37174 1 2
+37175 1 2
+37176 1 2
+37177 1 2
+37178 1 2
+37179 1 2
+37180 1 2
+37181 1 2
+37182 1 2
+37183 1 2
+37184 1 2
+37185 1 2
+37186 1 2
+37187 1 2
+37188 1 2
+37189 1 2
+37190 1 2
+37191 1 2
+37192 1 2
+37193 1 2
+37194 1 2
+37195 1 2
+37196 1 2
+37197 1 2
+37198 1 2
+37199 1 2
+37200 1 2
+37201 1 2
+37202 1 2
+37203 1 2
+37204 1 2
+37205 1 2
+37206 1 2
+37207 1 2
+37208 1 2
+37209 1 2
+37210 1 2
+37211 1 2
+37212 1 2
+37213 1 2
+37214 1 2
+37215 1 2
+37216 1 2
+37217 1 2
+37218 1 2
+37219 1 2
+37220 1 2
+37221 1 2
+37222 1 2
+37223 1 2
+37224 1 2
+37225 1 2
+37226 1 2
+37227 1 2
+37228 1 2
+37229 1 2
+37230 1 2
+37231 1 2
+37232 1 2
+37233 1 2
+37234 1 2
+37235 1 2
+37236 1 2
+37237 1 2
+37238 1 2
+37239 1 2
+37240 1 2
+37241 1 2
+37242 1 2
+37243 1 2
+37244 1 2
+37245 1 2
+37246 1 2
+37247 1 2
+37248 1 2
+37249 1 2
+37250 1 2
+37251 1 2
+37252 1 2
+37253 1 2
+37254 1 2
+37255 1 2
+37256 1 2
+37257 1 2
+37258 1 2
+37259 1 2
+37260 1 2
+37261 1 2
+37262 1 2
+37263 1 2
+37264 1 2
+37265 1 2
+37266 1 2
+37267 1 2
+37268 1 2
+37269 1 2
+37270 1 2
+37271 1 2
+37272 1 2
+37273 1 2
+37274 1 2
+37275 1 2
+37276 1 2
+37277 1 2
+37278 1 2
+37279 1 2
+37280 1 2
+37281 1 2
+37282 1 2
+37283 1 2
+37284 1 2
+37285 1 2
+37286 1 2
+37287 1 2
+37288 1 2
+37289 1 2
+37290 1 2
+37291 1 2
+37292 1 2
+37293 1 2
+37294 1 2
+37295 1 2
+37296 1 2
+37297 1 2
+37298 1 2
+37299 1 2
+37300 1 2
+37301 1 2
+37302 1 2
+37303 1 2
+37304 1 2
+37305 1 2
+37306 1 2
+37307 1 2
+37308 1 2
+37309 1 2
+37310 1 2
+37311 1 2
+37312 1 2
+37313 1 2
+37314 1 2
+37315 1 2
+37316 1 2
+37317 1 2
+37318 1 2
+37319 1 2
+37320 1 2
+37321 1 2
+37322 1 2
+37323 1 2
+37324 1 2
+37325 1 2
+37326 1 2
+37327 1 2
+37328 1 2
+37329 1 2
+37330 1 2
+37331 1 2
+37332 1 2
+37333 1 2
+37334 1 2
+37335 1 2
+37336 1 2
+37337 1 2
+37338 1 2
+37339 1 2
+37340 1 2
+37341 1 2
+37342 1 2
+37343 1 2
+37344 1 2
+37345 1 2
+37346 1 2
+37347 1 2
+37348 1 2
+37349 1 2
+37350 1 2
+37351 1 2
+37352 1 2
+37353 1 2
+37354 1 2
+37355 1 2
+37356 1 2
+37357 1 2
+37358 1 2
+37359 1 2
+37360 1 2
+37361 1 2
+37362 1 2
+37363 1 2
+37364 1 2
+37365 1 2
+37366 1 2
+37367 1 2
+37368 1 2
+37369 1 2
+37370 1 2
+37371 1 2
+37372 1 2
+37373 1 2
+37374 1 2
+37375 1 2
+37376 1 2
+37377 1 2
+37378 1 2
+37379 1 2
+37380 1 2
+37381 1 2
+37382 1 2
+37383 1 2
+37384 1 2
+37385 1 2
+37386 1 2
+37387 1 2
+37388 1 2
+37389 1 2
+37390 1 2
+37391 1 2
+37392 1 2
+37393 1 2
+37394 1 2
+37395 1 2
+37396 1 2
+37397 1 2
+37398 1 2
+37399 1 2
+37400 1 2
+37401 1 2
+37402 1 2
+37403 1 2
+37404 1 2
+37405 1 2
+37406 1 2
+37407 1 2
+37408 1 2
+37409 1 2
+37410 1 2
+37411 1 2
+37412 1 2
+37413 1 2
+37414 1 2
+37415 1 2
+37416 1 2
+37417 1 2
+37418 1 2
+37419 1 2
+37420 1 2
+37421 1 2
+37422 1 2
+37423 1 2
+37424 1 2
+37425 1 2
+37426 1 2
+37427 1 2
+37428 1 2
+37429 1 2
+37430 1 2
+37431 1 2
+37432 1 2
+37433 1 2
+37434 1 2
+37435 1 2
+37436 1 2
+37437 1 2
+37438 1 2
+37439 1 2
+37440 1 2
+37441 1 2
+37442 1 2
+37443 1 2
+37444 1 2
+37445 1 2
+37446 1 2
+37447 1 2
+37448 1 2
+37449 1 2
+37450 1 2
+37451 1 2
+37452 1 2
+37453 1 2
+37454 1 2
+37455 1 2
+37456 1 2
+37457 1 2
+37458 1 2
+37459 1 2
+37460 1 2
+37461 1 2
+37462 1 2
+37463 1 2
+37464 1 2
+37465 1 2
+37466 1 2
+37467 1 2
+37468 1 2
+37469 1 2
+37470 1 2
+37471 1 2
+37472 1 2
+37473 1 2
+37474 1 2
+37475 1 2
+37476 1 2
+37477 1 2
+37478 1 2
+37479 1 2
+37480 1 2
+37481 1 2
+37482 1 2
+37483 1 2
+37484 1 2
+37485 1 2
+37486 1 2
+37487 1 2
+37488 1 2
+37489 1 2
+37490 1 2
+37491 1 2
+37492 1 2
+37493 1 2
+37494 1 2
+37495 1 2
+37496 1 2
+37497 1 2
+37498 1 2
+37499 1 2
+37500 1 2
+37501 1 2
+37502 1 2
+37503 1 2
+37504 1 2
+37505 1 2
+37506 1 2
+37507 1 2
+37508 1 2
+37509 1 2
+37510 1 2
+37511 1 2
+37512 1 2
+37513 1 2
+37514 1 2
+37515 1 2
+37516 1 2
+37517 1 2
+37518 1 2
+37519 1 2
+37520 1 2
+37521 1 2
+37522 1 2
+37523 1 2
+37524 1 2
+37525 1 2
+37526 1 2
+37527 1 2
+37528 1 2
+37529 1 2
+37530 1 2
+37531 1 2
+37532 1 2
+37533 1 2
+37534 1 2
+37535 1 2
+37536 1 2
+37537 1 2
+37538 1 2
+37539 1 2
+37540 1 2
+37541 1 2
+37542 1 2
+37543 1 2
+37544 1 2
+37545 1 2
+37546 1 2
+37547 1 2
+37548 1 2
+37549 1 2
+37550 1 2
+37551 1 2
+37552 1 2
+37553 1 2
+37554 1 2
+37555 1 2
+37556 1 2
+37557 1 2
+37558 1 2
+37559 1 2
+37560 1 2
+37561 1 2
+37562 1 2
+37563 1 2
+37564 1 2
+37565 1 2
+37566 1 2
+37567 1 2
+37568 1 2
+37569 1 2
+37570 1 2
+37571 1 2
+37572 1 2
+37573 1 2
+37574 1 2
+37575 1 2
+37576 1 2
+37577 1 2
+37578 1 2
+37579 1 2
+37580 1 2
+37581 1 2
+37582 1 2
+37583 1 2
+37584 1 2
+37585 1 2
+37586 1 2
+37587 1 2
+37588 1 2
+37589 1 2
+37590 1 2
+37591 1 2
+37592 1 2
+37593 1 2
+37594 1 2
+37595 1 2
+37596 1 2
+37597 1 2
+37598 1 2
+37599 1 2
+37600 1 2
+37601 1 2
+37602 1 2
+37603 1 2
+37604 1 2
+37605 1 2
+37606 1 2
+37607 1 2
+37608 1 2
+37609 1 2
+37610 1 2
+37611 1 2
+37612 1 2
+37613 1 2
+37614 1 2
+37615 1 2
+37616 1 2
+37617 1 2
+37618 1 2
+37619 1 2
+37620 1 2
+37621 1 2
+37622 1 2
+37623 1 2
+37624 1 2
+37625 1 2
+37626 1 2
+37627 1 2
+37628 1 2
+37629 1 2
+37630 1 2
+37631 1 2
+37632 1 2
+37633 1 2
+37634 1 2
+37635 1 2
+37636 1 2
+37637 1 2
+37638 1 2
+37639 1 2
+37640 1 2
+37641 1 2
+37642 1 2
+37643 1 2
+37644 1 2
+37645 1 2
+37646 1 2
+37647 1 2
+37648 1 2
+37649 1 2
+37650 1 2
+37651 1 2
+37652 1 2
+37653 1 2
+37654 1 2
+37655 1 2
+37656 1 2
+37657 1 2
+37658 1 2
+37659 1 2
+37660 1 2
+37661 1 2
+37662 1 2
+37663 1 2
+37664 1 2
+37665 1 2
+37666 1 2
+37667 1 2
+37668 1 2
+37669 1 2
+37670 1 2
+37671 1 2
+37672 1 2
+37673 1 2
+37674 1 2
+37675 1 2
+37676 1 2
+37677 1 2
+37678 1 2
+37679 1 2
+37680 1 2
+37681 1 2
+37682 1 2
+37683 1 2
+37684 1 2
+37685 1 2
+37686 1 2
+37687 1 2
+37688 1 2
+37689 1 2
+37690 1 2
+37691 1 2
+37692 1 2
+37693 1 2
+37694 1 2
+37695 1 2
+37696 1 2
+37697 1 2
+37698 1 2
+37699 1 2
+37700 1 2
+37701 1 2
+37702 1 2
+37703 1 2
+37704 1 2
+37705 1 2
+37706 1 2
+37707 1 2
+37708 1 2
+37709 1 2
+37710 1 2
+37711 1 2
+37712 1 2
+37713 1 2
+37714 1 2
+37715 1 2
+37716 1 2
+37717 1 2
+37718 1 2
+37719 1 2
+37720 1 2
+37721 1 2
+37722 1 2
+37723 1 2
+37724 1 2
+37725 1 2
+37726 1 2
+37727 1 2
+37728 1 2
+37729 1 2
+37730 1 2
+37731 1 2
+37732 1 2
+37733 1 2
+37734 1 2
+37735 1 2
+37736 1 2
+37737 1 2
+37738 1 2
+37739 1 2
+37740 1 2
+37741 1 2
+37742 1 2
+37743 1 2
+37744 1 2
+37745 1 2
+37746 1 2
+37747 1 2
+37748 1 2
+37749 1 2
+37750 1 2
+37751 1 2
+37752 1 2
+37753 1 2
+37754 1 2
+37755 1 2
+37756 1 2
+37757 1 2
+37758 1 2
+37759 1 2
+37760 1 2
+37761 1 2
+37762 1 2
+37763 1 2
+37764 1 2
+37765 1 2
+37766 1 2
+37767 1 2
+37768 1 2
+37769 1 2
+37770 1 2
+37771 1 2
+37772 1 2
+37773 1 2
+37774 1 2
+37775 1 2
+37776 1 2
+37777 1 2
+37778 1 2
+37779 1 2
+37780 1 2
+37781 1 2
+37782 1 2
+37783 1 2
+37784 1 2
+37785 1 2
+37786 1 2
+37787 1 2
+37788 1 2
+37789 1 2
+37790 1 2
+37791 1 2
+37792 1 2
+37793 1 2
+37794 1 2
+37795 1 2
+37796 1 2
+37797 1 2
+37798 1 2
+37799 1 2
+37800 1 2
+37801 1 2
+37802 1 2
+37803 1 2
+37804 1 2
+37805 1 2
+37806 1 2
+37807 1 2
+37808 1 2
+37809 1 2
+37810 1 2
+37811 1 2
+37812 1 2
+37813 1 2
+37814 1 2
+37815 1 2
+37816 1 2
+37817 1 2
+37818 1 2
+37819 1 2
+37820 1 2
+37821 1 2
+37822 1 2
+37823 1 2
+37824 1 2
+37825 1 2
+37826 1 2
+37827 1 2
+37828 1 2
+37829 1 2
+37830 1 2
+37831 1 2
+37832 1 2
+37833 1 2
+37834 1 2
+37835 1 2
+37836 1 2
+37837 1 2
+37838 1 2
+37839 1 2
+37840 1 2
+37841 1 2
+37842 1 2
+37843 1 2
+37844 1 2
+37845 1 2
+37846 1 2
+37847 1 2
+37848 1 2
+37849 1 2
+37850 1 2
+37851 1 2
+37852 1 2
+37853 1 2
+37854 1 2
+37855 1 2
+37856 1 2
+37857 1 2
+37858 1 2
+37859 1 2
+37860 1 2
+37861 1 2
+37862 1 2
+37863 1 2
+37864 1 2
+37865 1 2
+37866 1 2
+37867 1 2
+37868 1 2
+37869 1 2
+37870 1 2
+37871 1 2
+37872 1 2
+37873 1 2
+37874 1 2
+37875 1 2
+37876 1 2
+37877 1 2
+37878 1 2
+37879 1 2
+37880 1 2
+37881 1 2
+37882 1 2
+37883 1 2
+37884 1 2
+37885 1 2
+37886 1 2
+37887 1 2
+37888 1 2
+37889 1 2
+37890 1 2
+37891 1 2
+37892 1 2
+37893 1 2
+37894 1 2
+37895 1 2
+37896 1 2
+37897 1 2
+37898 1 2
+37899 1 2
+37900 1 2
+37901 1 2
+37902 1 2
+37903 1 2
+37904 1 2
+37905 1 2
+37906 1 2
+37907 1 2
+37908 1 2
+37909 1 2
+37910 1 2
+37911 1 2
+37912 1 2
+37913 1 2
+37914 1 2
+37915 1 2
+37916 1 2
+37917 1 2
+37918 1 2
+37919 1 2
+37920 1 2
+37921 1 2
+37922 1 2
+37923 1 2
+37924 1 2
+37925 1 2
+37926 1 2
+37927 1 2
+37928 1 2
+37929 1 2
+37930 1 2
+37931 1 2
+37932 1 2
+37933 1 2
+37934 1 2
+37935 1 2
+37936 1 2
+37937 1 2
+37938 1 2
+37939 1 2
+37940 1 2
+37941 1 2
+37942 1 2
+37943 1 2
+37944 1 2
+37945 1 2
+37946 1 2
+37947 1 2
+37948 1 2
+37949 1 2
+37950 1 2
+37951 1 2
+37952 1 2
+37953 1 2
+37954 1 2
+37955 1 2
+37956 1 2
+37957 1 2
+37958 1 2
+37959 1 2
+37960 1 2
+37961 1 2
+37962 1 2
+37963 1 2
+37964 1 2
+37965 1 2
+37966 1 2
+37967 1 2
+37968 1 2
+37969 1 2
+37970 1 2
+37971 1 2
+37972 1 2
+37973 1 2
+37974 1 2
+37975 1 2
+37976 1 2
+37977 1 2
+37978 1 2
+37979 1 2
+37980 1 2
+37981 1 2
+37982 1 2
+37983 1 2
+37984 1 2
+37985 1 2
+37986 1 2
+37987 1 2
+37988 1 2
+37989 1 2
+37990 1 2
+37991 1 2
+37992 1 2
+37993 1 2
+37994 1 2
+37995 1 2
+37996 1 2
+37997 1 2
+37998 1 2
+37999 1 2
+38000 1 2
+38001 1 2
+38002 1 2
+38003 1 2
+38004 1 2
+38005 1 2
+38006 1 2
+38007 1 2
+38008 1 2
+38009 1 2
+38010 1 2
+38011 1 2
+38012 1 2
+38013 1 2
+38014 1 2
+38015 1 2
+38016 1 2
+38017 1 2
+38018 1 2
+38019 1 2
+38020 1 2
+38021 1 2
+38022 1 2
+38023 1 2
+38024 1 2
+38025 1 2
+38026 1 2
+38027 1 2
+38028 1 2
+38029 1 2
+38030 1 2
+38031 1 2
+38032 1 2
+38033 1 2
+38034 1 2
+38035 1 2
+38036 1 2
+38037 1 2
+38038 1 2
+38039 1 2
+38040 1 2
+38041 1 2
+38042 1 2
+38043 1 2
+38044 1 2
+38045 1 2
+38046 1 2
+38047 1 2
+38048 1 2
+38049 1 2
+38050 1 2
+38051 1 2
+38052 1 2
+38053 1 2
+38054 1 2
+38055 1 2
+38056 1 2
+38057 1 2
+38058 1 2
+38059 1 2
+38060 1 2
+38061 1 2
+38062 1 2
+38063 1 2
+38064 1 2
+38065 1 2
+38066 1 2
+38067 1 2
+38068 1 2
+38069 1 2
+38070 1 2
+38071 1 2
+38072 1 2
+38073 1 2
+38074 1 2
+38075 1 2
+38076 1 2
+38077 1 2
+38078 1 2
+38079 1 2
+38080 1 2
+38081 1 2
+38082 1 2
+38083 1 2
+38084 1 2
+38085 1 2
+38086 1 2
+38087 1 2
+38088 1 2
+38089 1 2
+38090 1 2
+38091 1 2
+38092 1 2
+38093 1 2
+38094 1 2
+38095 1 2
+38096 1 2
+38097 1 2
+38098 1 2
+38099 1 2
+38100 1 2
+38101 1 2
+38102 1 2
+38103 1 2
+38104 1 2
+38105 1 2
+38106 1 2
+38107 1 2
+38108 1 2
+38109 1 2
+38110 1 2
+38111 1 2
+38112 1 2
+38113 1 2
+38114 1 2
+38115 1 2
+38116 1 2
+38117 1 2
+38118 1 2
+38119 1 2
+38120 1 2
+38121 1 2
+38122 1 2
+38123 1 2
+38124 1 2
+38125 1 2
+38126 1 2
+38127 1 2
+38128 1 2
+38129 1 2
+38130 1 2
+38131 1 2
+38132 1 2
+38133 1 2
+38134 1 2
+38135 1 2
+38136 1 2
+38137 1 2
+38138 1 2
+38139 1 2
+38140 1 2
+38141 1 2
+38142 1 2
+38143 1 2
+38144 1 2
+38145 1 2
+38146 1 2
+38147 1 2
+38148 1 2
+38149 1 2
+38150 1 2
+38151 1 2
+38152 1 2
+38153 1 2
+38154 1 2
+38155 1 2
+38156 1 2
+38157 1 2
+38158 1 2
+38159 1 2
+38160 1 2
+38161 1 2
+38162 1 2
+38163 1 2
+38164 1 2
+38165 1 2
+38166 1 2
+38167 1 2
+38168 1 2
+38169 1 2
+38170 1 2
+38171 1 2
+38172 1 2
+38173 1 2
+38174 1 2
+38175 1 2
+38176 1 2
+38177 1 2
+38178 1 2
+38179 1 2
+38180 1 2
+38181 1 2
+38182 1 2
+38183 1 2
+38184 1 2
+38185 1 2
+38186 1 2
+38187 1 2
+38188 1 2
+38189 1 2
+38190 1 2
+38191 1 2
+38192 1 2
+38193 1 2
+38194 1 2
+38195 1 2
+38196 1 2
+38197 1 2
+38198 1 2
+38199 1 2
+38200 1 2
+38201 1 2
+38202 1 2
+38203 1 2
+38204 1 2
+38205 1 2
+38206 1 2
+38207 1 2
+38208 1 2
+38209 1 2
+38210 1 2
+38211 1 2
+38212 1 2
+38213 1 2
+38214 1 2
+38215 1 2
+38216 1 2
+38217 1 2
+38218 1 2
+38219 1 2
+38220 1 2
+38221 1 2
+38222 1 2
+38223 1 2
+38224 1 2
+38225 1 2
+38226 1 2
+38227 1 2
+38228 1 2
+38229 1 2
+38230 1 2
+38231 1 2
+38232 1 2
+38233 1 2
+38234 1 2
+38235 1 2
+38236 1 2
+38237 1 2
+38238 1 2
+38239 1 2
+38240 1 2
+38241 1 2
+38242 1 2
+38243 1 2
+38244 1 2
+38245 1 2
+38246 1 2
+38247 1 2
+38248 1 2
+38249 1 2
+38250 1 2
+38251 1 2
+38252 1 2
+38253 1 2
+38254 1 2
+38255 1 2
+38256 1 2
+38257 1 2
+38258 1 2
+38259 1 2
+38260 1 2
+38261 1 2
+38262 1 2
+38263 1 2
+38264 1 2
+38265 1 2
+38266 1 2
+38267 1 2
+38268 1 2
+38269 1 2
+38270 1 2
+38271 1 2
+38272 1 2
+38273 1 2
+38274 1 2
+38275 1 2
+38276 1 2
+38277 1 2
+38278 1 2
+38279 1 2
+38280 1 2
+38281 1 2
+38282 1 2
+38283 1 2
+38284 1 2
+38285 1 2
+38286 1 2
+38287 1 2
+38288 1 2
+38289 1 2
+38290 1 2
+38291 1 2
+38292 1 2
+38293 1 2
+38294 1 2
+38295 1 2
+38296 1 2
+38297 1 2
+38298 1 2
+38299 1 2
+38300 1 2
+38301 1 2
+38302 1 2
+38303 1 2
+38304 1 2
+38305 1 2
+38306 1 2
+38307 1 2
+38308 1 2
+38309 1 2
+38310 1 2
+38311 1 2
+38312 1 2
+38313 1 2
+38314 1 2
+38315 1 2
+38316 1 2
+38317 1 2
+38318 1 2
+38319 1 2
+38320 1 2
+38321 1 2
+38322 1 2
+38323 1 2
+38324 1 2
+38325 1 2
+38326 1 2
+38327 1 2
+38328 1 2
+38329 1 2
+38330 1 2
+38331 1 2
+38332 1 2
+38333 1 2
+38334 1 2
+38335 1 2
+38336 1 2
+38337 1 2
+38338 1 2
+38339 1 2
+38340 1 2
+38341 1 2
+38342 1 2
+38343 1 2
+38344 1 2
+38345 1 2
+38346 1 2
+38347 1 2
+38348 1 2
+38349 1 2
+38350 1 2
+38351 1 2
+38352 1 2
+38353 1 2
+38354 1 2
+38355 1 2
+38356 1 2
+38357 1 2
+38358 1 2
+38359 1 2
+38360 1 2
+38361 1 2
+38362 1 2
+38363 1 2
+38364 1 2
+38365 1 2
+38366 1 2
+38367 1 2
+38368 1 2
+38369 1 2
+38370 1 2
+38371 1 2
+38372 1 2
+38373 1 2
+38374 1 2
+38375 1 2
+38376 1 2
+38377 1 2
+38378 1 2
+38379 1 2
+38380 1 2
+38381 1 2
+38382 1 2
+38383 1 2
+38384 1 2
+38385 1 2
+38386 1 2
+38387 1 2
+38388 1 2
+38389 1 2
+38390 1 2
+38391 1 2
+38392 1 2
+38393 1 2
+38394 1 2
+38395 1 2
+38396 1 2
+38397 1 2
+38398 1 2
+38399 1 2
+38400 1 2
+38401 1 2
+38402 1 2
+38403 1 2
+38404 1 2
+38405 1 2
+38406 1 2
+38407 1 2
+38408 1 2
+38409 1 2
+38410 1 2
+38411 1 2
+38412 1 2
+38413 1 2
+38414 1 2
+38415 1 2
+38416 1 2
+38417 1 2
+38418 1 2
+38419 1 2
+38420 1 2
+38421 1 2
+38422 1 2
+38423 1 2
+38424 1 2
+38425 1 2
+38426 1 2
+38427 1 2
+38428 1 2
+38429 1 2
+38430 1 2
+38431 1 2
+38432 1 2
+38433 1 2
+38434 1 2
+38435 1 2
+38436 1 2
+38437 1 2
+38438 1 2
+38439 1 2
+38440 1 2
+38441 1 2
+38442 1 2
+38443 1 2
+38444 1 2
+38445 1 2
+38446 1 2
+38447 1 2
+38448 1 2
+38449 1 2
+38450 1 2
+38451 1 2
+38452 1 2
+38453 1 2
+38454 1 2
+38455 1 2
+38456 1 2
+38457 1 2
+38458 1 2
+38459 1 2
+38460 1 2
+38461 1 2
+38462 1 2
+38463 1 2
+38464 1 2
+38465 1 2
+38466 1 2
+38467 1 2
+38468 1 2
+38469 1 2
+38470 1 2
+38471 1 2
+38472 1 2
+38473 1 2
+38474 1 2
+38475 1 2
+38476 1 2
+38477 1 2
+38478 1 2
+38479 1 2
+38480 1 2
+38481 1 2
+38482 1 2
+38483 1 2
+38484 1 2
+38485 1 2
+38486 1 2
+38487 1 2
+38488 1 2
+38489 1 2
+38490 1 2
+38491 1 2
+38492 1 2
+38493 1 2
+38494 1 2
+38495 1 2
+38496 1 2
+38497 1 2
+38498 1 2
+38499 1 2
+38500 1 2
+38501 1 2
+38502 1 2
+38503 1 2
+38504 1 2
+38505 1 2
+38506 1 2
+38507 1 2
+38508 1 2
+38509 1 2
+38510 1 2
+38511 1 2
+38512 1 2
+38513 1 2
+38514 1 2
+38515 1 2
+38516 1 2
+38517 1 2
+38518 1 2
+38519 1 2
+38520 1 2
+38521 1 2
+38522 1 2
+38523 1 2
+38524 1 2
+38525 1 2
+38526 1 2
+38527 1 2
+38528 1 2
+38529 1 2
+38530 1 2
+38531 1 2
+38532 1 2
+38533 1 2
+38534 1 2
+38535 1 2
+38536 1 2
+38537 1 2
+38538 1 2
+38539 1 2
+38540 1 2
+38541 1 2
+38542 1 2
+38543 1 2
+38544 1 2
+38545 1 2
+38546 1 2
+38547 1 2
+38548 1 2
+38549 1 2
+38550 1 2
+38551 1 2
+38552 1 2
+38553 1 2
+38554 1 2
+38555 1 2
+38556 1 2
+38557 1 2
+38558 1 2
+38559 1 2
+38560 1 2
+38561 1 2
+38562 1 2
+38563 1 2
+38564 1 2
+38565 1 2
+38566 1 2
+38567 1 2
+38568 1 2
+38569 1 2
+38570 1 2
+38571 1 2
+38572 1 2
+38573 1 2
+38574 1 2
+38575 1 2
+38576 1 2
+38577 1 2
+38578 1 2
+38579 1 2
+38580 1 2
+38581 1 2
+38582 1 2
+38583 1 2
+38584 1 2
+38585 1 2
+38586 1 2
+38587 1 2
+38588 1 2
+38589 1 2
+38590 1 2
+38591 1 2
+38592 1 2
+38593 1 2
+38594 1 2
+38595 1 2
+38596 1 2
+38597 1 2
+38598 1 2
+38599 1 2
+38600 1 2
+38601 1 2
+38602 1 2
+38603 1 2
+38604 1 2
+38605 1 2
+38606 1 2
+38607 1 2
+38608 1 2
+38609 1 2
+38610 1 2
+38611 1 2
+38612 1 2
+38613 1 2
+38614 1 2
+38615 1 2
+38616 1 2
+38617 1 2
+38618 1 2
+38619 1 2
+38620 1 2
+38621 1 2
+38622 1 2
+38623 1 2
+38624 1 2
+38625 1 2
+38626 1 2
+38627 1 2
+38628 1 2
+38629 1 2
+38630 1 2
+38631 1 2
+38632 1 2
+38633 1 2
+38634 1 2
+38635 1 2
+38636 1 2
+38637 1 2
+38638 1 2
+38639 1 2
+38640 1 2
+38641 1 2
+38642 1 2
+38643 1 2
+38644 1 2
+38645 1 2
+38646 1 2
+38647 1 2
+38648 1 2
+38649 1 2
+38650 1 2
+38651 1 2
+38652 1 2
+38653 1 2
+38654 1 2
+38655 1 2
+38656 1 2
+38657 1 2
+38658 1 2
+38659 1 2
+38660 1 2
+38661 1 2
+38662 1 2
+38663 1 2
+38664 1 2
+38665 1 2
+38666 1 2
+38667 1 2
+38668 1 2
+38669 1 2
+38670 1 2
+38671 1 2
+38672 1 2
+38673 1 2
+38674 1 2
+38675 1 2
+38676 1 2
+38677 1 2
+38678 1 2
+38679 1 2
+38680 1 2
+38681 1 2
+38682 1 2
+38683 1 2
+38684 1 2
+38685 1 2
+38686 1 2
+38687 1 2
+38688 1 2
+38689 1 2
+38690 1 2
+38691 1 2
+38692 1 2
+38693 1 2
+38694 1 2
+38695 1 2
+38696 1 2
+38697 1 2
+38698 1 2
+38699 1 2
+38700 1 2
+38701 1 2
+38702 1 2
+38703 1 2
+38704 1 2
+38705 1 2
+38706 1 2
+38707 1 2
+38708 1 2
+38709 1 2
+38710 1 2
+38711 1 2
+38712 1 2
+38713 1 2
+38714 1 2
+38715 1 2
+38716 1 2
+38717 1 2
+38718 1 2
+38719 1 2
+38720 1 2
+38721 1 2
+38722 1 2
+38723 1 2
+38724 1 2
+38725 1 2
+38726 1 2
+38727 1 2
+38728 1 2
+38729 1 2
+38730 1 2
+38731 1 2
+38732 1 2
+38733 1 2
+38734 1 2
+38735 1 2
+38736 1 2
+38737 1 2
+38738 1 2
+38739 1 2
+38740 1 2
+38741 1 2
+38742 1 2
+38743 1 2
+38744 1 2
+38745 1 2
+38746 1 2
+38747 1 2
+38748 1 2
+38749 1 2
+38750 1 2
+38751 1 2
+38752 1 2
+38753 1 2
+38754 1 2
+38755 1 2
+38756 1 2
+38757 1 2
+38758 1 2
+38759 1 2
+38760 1 2
+38761 1 2
+38762 1 2
+38763 1 2
+38764 1 2
+38765 1 2
+38766 1 2
+38767 1 2
+38768 1 2
+38769 1 2
+38770 1 2
+38771 1 2
+38772 1 2
+38773 1 2
+38774 1 2
+38775 1 2
+38776 1 2
+38777 1 2
+38778 1 2
+38779 1 2
+38780 1 2
+38781 1 2
+38782 1 2
+38783 1 2
+38784 1 2
+38785 1 2
+38786 1 2
+38787 1 2
+38788 1 2
+38789 1 2
+38790 1 2
+38791 1 2
+38792 1 2
+38793 1 2
+38794 1 2
+38795 1 2
+38796 1 2
+38797 1 2
+38798 1 2
+38799 1 2
+38800 1 2
+38801 1 2
+38802 1 2
+38803 1 2
+38804 1 2
+38805 1 2
+38806 1 2
+38807 1 2
+38808 1 2
+38809 1 2
+38810 1 2
+38811 1 2
+38812 1 2
+38813 1 2
+38814 1 2
+38815 1 2
+38816 1 2
+38817 1 2
+38818 1 2
+38819 1 2
+38820 1 2
+38821 1 2
+38822 1 2
+38823 1 2
+38824 1 2
+38825 1 2
+38826 1 2
+38827 1 2
+38828 1 2
+38829 1 2
+38830 1 2
+38831 1 2
+38832 1 2
+38833 1 2
+38834 1 2
+38835 1 2
+38836 1 2
+38837 1 2
+38838 1 2
+38839 1 2
+38840 1 2
+38841 1 2
+38842 1 2
+38843 1 2
+38844 1 2
+38845 1 2
+38846 1 2
+38847 1 2
+38848 1 2
+38849 1 2
+38850 1 2
+38851 1 2
+38852 1 2
+38853 1 2
+38854 1 2
+38855 1 2
+38856 1 2
+38857 1 2
+38858 1 2
+38859 1 2
+38860 1 2
+38861 1 2
+38862 1 2
+38863 1 2
+38864 1 2
+38865 1 2
+38866 1 2
+38867 1 2
+38868 1 2
+38869 1 2
+38870 1 2
+38871 1 2
+38872 1 2
+38873 1 2
+38874 1 2
+38875 1 2
+38876 1 2
+38877 1 2
+38878 1 2
+38879 1 2
+38880 1 2
+38881 1 2
+38882 1 2
+38883 1 2
+38884 1 2
+38885 1 2
+38886 1 2
+38887 1 2
+38888 1 2
+38889 1 2
+38890 1 2
+38891 1 2
+38892 1 2
+38893 1 2
+38894 1 2
+38895 1 2
+38896 1 2
+38897 1 2
+38898 1 2
+38899 1 2
+38900 1 2
+38901 1 2
+38902 1 2
+38903 1 2
+38904 1 2
+38905 1 2
+38906 1 2
+38907 1 2
+38908 1 2
+38909 1 2
+38910 1 2
+38911 1 2
+38912 1 2
+38913 1 2
+38914 1 2
+38915 1 2
+38916 1 2
+38917 1 2
+38918 1 2
+38919 1 2
+38920 1 2
+38921 1 2
+38922 1 2
+38923 1 2
+38924 1 2
+38925 1 2
+38926 1 2
+38927 1 2
+38928 1 2
+38929 1 2
+38930 1 2
+38931 1 2
+38932 1 2
+38933 1 2
+38934 1 2
+38935 1 2
+38936 1 2
+38937 1 2
+38938 1 2
+38939 1 2
+38940 1 2
+38941 1 2
+38942 1 2
+38943 1 2
+38944 1 2
+38945 1 2
+38946 1 2
+38947 1 2
+38948 1 2
+38949 1 2
+38950 1 2
+38951 1 2
+38952 1 2
+38953 1 2
+38954 1 2
+38955 1 2
+38956 1 2
+38957 1 2
+38958 1 2
+38959 1 2
+38960 1 2
+38961 1 2
+38962 1 2
+38963 1 2
+38964 1 2
+38965 1 2
+38966 1 2
+38967 1 2
+38968 1 2
+38969 1 2
+38970 1 2
+38971 1 2
+38972 1 2
+38973 1 2
+38974 1 2
+38975 1 2
+38976 1 2
+38977 1 2
+38978 1 2
+38979 1 2
+38980 1 2
+38981 1 2
+38982 1 2
+38983 1 2
+38984 1 2
+38985 1 2
+38986 1 2
+38987 1 2
+38988 1 2
+38989 1 2
+38990 1 2
+38991 1 2
+38992 1 2
+38993 1 2
+38994 1 2
+38995 1 2
+38996 1 2
+38997 1 2
+38998 1 2
+38999 1 2
+39000 1 2
+39001 1 2
+39002 1 2
+39003 1 2
+39004 1 2
+39005 1 2
+39006 1 2
+39007 1 2
+39008 1 2
+39009 1 2
+39010 1 2
+39011 1 2
+39012 1 2
+39013 1 2
+39014 1 2
+39015 1 2
+39016 1 2
+39017 1 2
+39018 1 2
+39019 1 2
+39020 1 2
+39021 1 2
+39022 1 2
+39023 1 2
+39024 1 2
+39025 1 2
+39026 1 2
+39027 1 2
+39028 1 2
+39029 1 2
+39030 1 2
+39031 1 2
+39032 1 2
+39033 1 2
+39034 1 2
+39035 1 2
+39036 1 2
+39037 1 2
+39038 1 2
+39039 1 2
+39040 1 2
+39041 1 2
+39042 1 2
+39043 1 2
+39044 1 2
+39045 1 2
+39046 1 2
+39047 1 2
+39048 1 2
+39049 1 2
+39050 1 2
+39051 1 2
+39052 1 2
+39053 1 2
+39054 1 2
+39055 1 2
+39056 1 2
+39057 1 2
+39058 1 2
+39059 1 2
+39060 1 2
+39061 1 2
+39062 1 2
+39063 1 2
+39064 1 2
+39065 1 2
+39066 1 2
+39067 1 2
+39068 1 2
+39069 1 2
+39070 1 2
+39071 1 2
+39072 1 2
+39073 1 2
+39074 1 2
+39075 1 2
+39076 1 2
+39077 1 2
+39078 1 2
+39079 1 2
+39080 1 2
+39081 1 2
+39082 1 2
+39083 1 2
+39084 1 2
+39085 1 2
+39086 1 2
+39087 1 2
+39088 1 2
+39089 1 2
+39090 1 2
+39091 1 2
+39092 1 2
+39093 1 2
+39094 1 2
+39095 1 2
+39096 1 2
+39097 1 2
+39098 1 2
+39099 1 2
+39100 1 2
+39101 1 2
+39102 1 2
+39103 1 2
+39104 1 2
+39105 1 2
+39106 1 2
+39107 1 2
+39108 1 2
+39109 1 2
+39110 1 2
+39111 1 2
+39112 1 2
+39113 1 2
+39114 1 2
+39115 1 2
+39116 1 2
+39117 1 2
+39118 1 2
+39119 1 2
+39120 1 2
+39121 1 2
+39122 1 2
+39123 1 2
+39124 1 2
+39125 1 2
+39126 1 2
+39127 1 2
+39128 1 2
+39129 1 2
+39130 1 2
+39131 1 2
+39132 1 2
+39133 1 2
+39134 1 2
+39135 1 2
+39136 1 2
+39137 1 2
+39138 1 2
+39139 1 2
+39140 1 2
+39141 1 2
+39142 1 2
+39143 1 2
+39144 1 2
+39145 1 2
+39146 1 2
+39147 1 2
+39148 1 2
+39149 1 2
+39150 1 2
+39151 1 2
+39152 1 2
+39153 1 2
+39154 1 2
+39155 1 2
+39156 1 2
+39157 1 2
+39158 1 2
+39159 1 2
+39160 1 2
+39161 1 2
+39162 1 2
+39163 1 2
+39164 1 2
+39165 1 2
+39166 1 2
+39167 1 2
+39168 1 2
+39169 1 2
+39170 1 2
+39171 1 2
+39172 1 2
+39173 1 2
+39174 1 2
+39175 1 2
+39176 1 2
+39177 1 2
+39178 1 2
+39179 1 2
+39180 1 2
+39181 1 2
+39182 1 2
+39183 1 2
+39184 1 2
+39185 1 2
+39186 1 2
+39187 1 2
+39188 1 2
+39189 1 2
+39190 1 2
+39191 1 2
+39192 1 2
+39193 1 2
+39194 1 2
+39195 1 2
+39196 1 2
+39197 1 2
+39198 1 2
+39199 1 2
+39200 1 2
+39201 1 2
+39202 1 2
+39203 1 2
+39204 1 2
+39205 1 2
+39206 1 2
+39207 1 2
+39208 1 2
+39209 1 2
+39210 1 2
+39211 1 2
+39212 1 2
+39213 1 2
+39214 1 2
+39215 1 2
+39216 1 2
+39217 1 2
+39218 1 2
+39219 1 2
+39220 1 2
+39221 1 2
+39222 1 2
+39223 1 2
+39224 1 2
+39225 1 2
+39226 1 2
+39227 1 2
+39228 1 2
+39229 1 2
+39230 1 2
+39231 1 2
+39232 1 2
+39233 1 2
+39234 1 2
+39235 1 2
+39236 1 2
+39237 1 2
+39238 1 2
+39239 1 2
+39240 1 2
+39241 1 2
+39242 1 2
+39243 1 2
+39244 1 2
+39245 1 2
+39246 1 2
+39247 1 2
+39248 1 2
+39249 1 2
+39250 1 2
+39251 1 2
+39252 1 2
+39253 1 2
+39254 1 2
+39255 1 2
+39256 1 2
+39257 1 2
+39258 1 2
+39259 1 2
+39260 1 2
+39261 1 2
+39262 1 2
+39263 1 2
+39264 1 2
+39265 1 2
+39266 1 2
+39267 1 2
+39268 1 2
+39269 1 2
+39270 1 2
+39271 1 2
+39272 1 2
+39273 1 2
+39274 1 2
+39275 1 2
+39276 1 2
+39277 1 2
+39278 1 2
+39279 1 2
+39280 1 2
+39281 1 2
+39282 1 2
+39283 1 2
+39284 1 2
+39285 1 2
+39286 1 2
+39287 1 2
+39288 1 2
+39289 1 2
+39290 1 2
+39291 1 2
+39292 1 2
+39293 1 2
+39294 1 2
+39295 1 2
+39296 1 2
+39297 1 2
+39298 1 2
+39299 1 2
+39300 1 2
+39301 1 2
+39302 1 2
+39303 1 2
+39304 1 2
+39305 1 2
+39306 1 2
+39307 1 2
+39308 1 2
+39309 1 2
+39310 1 2
+39311 1 2
+39312 1 2
+39313 1 2
+39314 1 2
+39315 1 2
+39316 1 2
+39317 1 2
+39318 1 2
+39319 1 2
+39320 1 2
+39321 1 2
+39322 1 2
+39323 1 2
+39324 1 2
+39325 1 2
+39326 1 2
+39327 1 2
+39328 1 2
+39329 1 2
+39330 1 2
+39331 1 2
+39332 1 2
+39333 1 2
+39334 1 2
+39335 1 2
+39336 1 2
+39337 1 2
+39338 1 2
+39339 1 2
+39340 1 2
+39341 1 2
+39342 1 2
+39343 1 2
+39344 1 2
+39345 1 2
+39346 1 2
+39347 1 2
+39348 1 2
+39349 1 2
+39350 1 2
+39351 1 2
+39352 1 2
+39353 1 2
+39354 1 2
+39355 1 2
+39356 1 2
+39357 1 2
+39358 1 2
+39359 1 2
+39360 1 2
+39361 1 2
+39362 1 2
+39363 1 2
+39364 1 2
+39365 1 2
+39366 1 2
+39367 1 2
+39368 1 2
+39369 1 2
+39370 1 2
+39371 1 2
+39372 1 2
+39373 1 2
+39374 1 2
+39375 1 2
+39376 1 2
+39377 1 2
+39378 1 2
+39379 1 2
+39380 1 2
+39381 1 2
+39382 1 2
+39383 1 2
+39384 1 2
+39385 1 2
+39386 1 2
+39387 1 2
+39388 1 2
+39389 1 2
+39390 1 2
+39391 1 2
+39392 1 2
+39393 1 2
+39394 1 2
+39395 1 2
+39396 1 2
+39397 1 2
+39398 1 2
+39399 1 2
+39400 1 2
+39401 1 2
+39402 1 2
+39403 1 2
+39404 1 2
+39405 1 2
+39406 1 2
+39407 1 2
+39408 1 2
+39409 1 2
+39410 1 2
+39411 1 2
+39412 1 2
+39413 1 2
+39414 1 2
+39415 1 2
+39416 1 2
+39417 1 2
+39418 1 2
+39419 1 2
+39420 1 2
+39421 1 2
+39422 1 2
+39423 1 2
+39424 1 2
+39425 1 2
+39426 1 2
+39427 1 2
+39428 1 2
+39429 1 2
+39430 1 2
+39431 1 2
+39432 1 2
+39433 1 2
+39434 1 2
+39435 1 2
+39436 1 2
+39437 1 2
+39438 1 2
+39439 1 2
+39440 1 2
+39441 1 2
+39442 1 2
+39443 1 2
+39444 1 2
+39445 1 2
+39446 1 2
+39447 1 2
+39448 1 2
+39449 1 2
+39450 1 2
+39451 1 2
+39452 1 2
+39453 1 2
+39454 1 2
+39455 1 2
+39456 1 2
+39457 1 2
+39458 1 2
+39459 1 2
+39460 1 2
+39461 1 2
+39462 1 2
+39463 1 2
+39464 1 2
+39465 1 2
+39466 1 2
+39467 1 2
+39468 1 2
+39469 1 2
+39470 1 2
+39471 1 2
+39472 1 2
+39473 1 2
+39474 1 2
+39475 1 2
+39476 1 2
+39477 1 2
+39478 1 2
+39479 1 2
+39480 1 2
+39481 1 2
+39482 1 2
+39483 1 2
+39484 1 2
+39485 1 2
+39486 1 2
+39487 1 2
+39488 1 2
+39489 1 2
+39490 1 2
+39491 1 2
+39492 1 2
+39493 1 2
+39494 1 2
+39495 1 2
+39496 1 2
+39497 1 2
+39498 1 2
+39499 1 2
+39500 1 2
+39501 1 2
+39502 1 2
+39503 1 2
+39504 1 2
+39505 1 2
+39506 1 2
+39507 1 2
+39508 1 2
+39509 1 2
+39510 1 2
+39511 1 2
+39512 1 2
+39513 1 2
+39514 1 2
+39515 1 2
+39516 1 2
+39517 1 2
+39518 1 2
+39519 1 2
+39520 1 2
+39521 1 2
+39522 1 2
+39523 1 2
+39524 1 2
+39525 1 2
+39526 1 2
+39527 1 2
+39528 1 2
+39529 1 2
+39530 1 2
+39531 1 2
+39532 1 2
+39533 1 2
+39534 1 2
+39535 1 2
+39536 1 2
+39537 1 2
+39538 1 2
+39539 1 2
+39540 1 2
+39541 1 2
+39542 1 2
+39543 1 2
+39544 1 2
+39545 1 2
+39546 1 2
+39547 1 2
+39548 1 2
+39549 1 2
+39550 1 2
+39551 1 2
+39552 1 2
+39553 1 2
+39554 1 2
+39555 1 2
+39556 1 2
+39557 1 2
+39558 1 2
+39559 1 2
+39560 1 2
+39561 1 2
+39562 1 2
+39563 1 2
+39564 1 2
+39565 1 2
+39566 1 2
+39567 1 2
+39568 1 2
+39569 1 2
+39570 1 2
+39571 1 2
+39572 1 2
+39573 1 2
+39574 1 2
+39575 1 2
+39576 1 2
+39577 1 2
+39578 1 2
+39579 1 2
+39580 1 2
+39581 1 2
+39582 1 2
+39583 1 2
+39584 1 2
+39585 1 2
+39586 1 2
+39587 1 2
+39588 1 2
+39589 1 2
+39590 1 2
+39591 1 2
+39592 1 2
+39593 1 2
+39594 1 2
+39595 1 2
+39596 1 2
+39597 1 2
+39598 1 2
+39599 1 2
+39600 1 2
+39601 1 2
+39602 1 2
+39603 1 2
+39604 1 2
+39605 1 2
+39606 1 2
+39607 1 2
+39608 1 2
+39609 1 2
+39610 1 2
+39611 1 2
+39612 1 2
+39613 1 2
+39614 1 2
+39615 1 2
+39616 1 2
+39617 1 2
+39618 1 2
+39619 1 2
+39620 1 2
+39621 1 2
+39622 1 2
+39623 1 2
+39624 1 2
+39625 1 2
+39626 1 2
+39627 1 2
+39628 1 2
+39629 1 2
+39630 1 2
+39631 1 2
+39632 1 2
+39633 1 2
+39634 1 2
+39635 1 2
+39636 1 2
+39637 1 2
+39638 1 2
+39639 1 2
+39640 1 2
+39641 1 2
+39642 1 2
+39643 1 2
+39644 1 2
+39645 1 2
+39646 1 2
+39647 1 2
+39648 1 2
+39649 1 2
+39650 1 2
+39651 1 2
+39652 1 2
+39653 1 2
+39654 1 2
+39655 1 2
+39656 1 2
+39657 1 2
+39658 1 2
+39659 1 2
+39660 1 2
+39661 1 2
+39662 1 2
+39663 1 2
+39664 1 2
+39665 1 2
+39666 1 2
+39667 1 2
+39668 1 2
+39669 1 2
+39670 1 2
+39671 1 2
+39672 1 2
+39673 1 2
+39674 1 2
+39675 1 2
+39676 1 2
+39677 1 2
+39678 1 2
+39679 1 2
+39680 1 2
+39681 1 2
+39682 1 2
+39683 1 2
+39684 1 2
+39685 1 2
+39686 1 2
+39687 1 2
+39688 1 2
+39689 1 2
+39690 1 2
+39691 1 2
+39692 1 2
+39693 1 2
+39694 1 2
+39695 1 2
+39696 1 2
+39697 1 2
+39698 1 2
+39699 1 2
+39700 1 2
+39701 1 2
+39702 1 2
+39703 1 2
+39704 1 2
+39705 1 2
+39706 1 2
+39707 1 2
+39708 1 2
+39709 1 2
+39710 1 2
+39711 1 2
+39712 1 2
+39713 1 2
+39714 1 2
+39715 1 2
+39716 1 2
+39717 1 2
+39718 1 2
+39719 1 2
+39720 1 2
+39721 1 2
+39722 1 2
+39723 1 2
+39724 1 2
+39725 1 2
+39726 1 2
+39727 1 2
+39728 1 2
+39729 1 2
+39730 1 2
+39731 1 2
+39732 1 2
+39733 1 2
+39734 1 2
+39735 1 2
+39736 1 2
+39737 1 2
+39738 1 2
+39739 1 2
+39740 1 2
+39741 1 2
+39742 1 2
+39743 1 2
+39744 1 2
+39745 1 2
+39746 1 2
+39747 1 2
+39748 1 2
+39749 1 2
+39750 1 2
+39751 1 2
+39752 1 2
+39753 1 2
+39754 1 2
+39755 1 2
+39756 1 2
+39757 1 2
+39758 1 2
+39759 1 2
+39760 1 2
+39761 1 2
+39762 1 2
+39763 1 2
+39764 1 2
+39765 1 2
+39766 1 2
+39767 1 2
+39768 1 2
+39769 1 2
+39770 1 2
+39771 1 2
+39772 1 2
+39773 1 2
+39774 1 2
+39775 1 2
+39776 1 2
+39777 1 2
+39778 1 2
+39779 1 2
+39780 1 2
+39781 1 2
+39782 1 2
+39783 1 2
+39784 1 2
+39785 1 2
+39786 1 2
+39787 1 2
+39788 1 2
+39789 1 2
+39790 1 2
+39791 1 2
+39792 1 2
+39793 1 2
+39794 1 2
+39795 1 2
+39796 1 2
+39797 1 2
+39798 1 2
+39799 1 2
+39800 1 2
+39801 1 2
+39802 1 2
+39803 1 2
+39804 1 2
+39805 1 2
+39806 1 2
+39807 1 2
+39808 1 2
+39809 1 2
+39810 1 2
+39811 1 2
+39812 1 2
+39813 1 2
+39814 1 2
+39815 1 2
+39816 1 2
+39817 1 2
+39818 1 2
+39819 1 2
+39820 1 2
+39821 1 2
+39822 1 2
+39823 1 2
+39824 1 2
+39825 1 2
+39826 1 2
+39827 1 2
+39828 1 2
+39829 1 2
+39830 1 2
+39831 1 2
+39832 1 2
+39833 1 2
+39834 1 2
+39835 1 2
+39836 1 2
+39837 1 2
+39838 1 2
+39839 1 2
+39840 1 2
+39841 1 2
+39842 1 2
+39843 1 2
+39844 1 2
+39845 1 2
+39846 1 2
+39847 1 2
+39848 1 2
+39849 1 2
+39850 1 2
+39851 1 2
+39852 1 2
+39853 1 2
+39854 1 2
+39855 1 2
+39856 1 2
+39857 1 2
+39858 1 2
+39859 1 2
+39860 1 2
+39861 1 2
+39862 1 2
+39863 1 2
+39864 1 2
+39865 1 2
+39866 1 2
+39867 1 2
+39868 1 2
+39869 1 2
+39870 1 2
+39871 1 2
+39872 1 2
+39873 1 2
+39874 1 2
+39875 1 2
+39876 1 2
+39877 1 2
+39878 1 2
+39879 1 2
+39880 1 2
+39881 1 2
+39882 1 2
+39883 1 2
+39884 1 2
+39885 1 2
+39886 1 2
+39887 1 2
+39888 1 2
+39889 1 2
+39890 1 2
+39891 1 2
+39892 1 2
+39893 1 2
+39894 1 2
+39895 1 2
+39896 1 2
+39897 1 2
+39898 1 2
+39899 1 2
+39900 1 2
+39901 1 2
+39902 1 2
+39903 1 2
+39904 1 2
+39905 1 2
+39906 1 2
+39907 1 2
+39908 1 2
+39909 1 2
+39910 1 2
+39911 1 2
+39912 1 2
+39913 1 2
+39914 1 2
+39915 1 2
+39916 1 2
+39917 1 2
+39918 1 2
+39919 1 2
+39920 1 2
+39921 1 2
+39922 1 2
+39923 1 2
+39924 1 2
+39925 1 2
+39926 1 2
+39927 1 2
+39928 1 2
+39929 1 2
+39930 1 2
+39931 1 2
+39932 1 2
+39933 1 2
+39934 1 2
+39935 1 2
+39936 1 2
+39937 1 2
+39938 1 2
+39939 1 2
+39940 1 2
+39941 1 2
+39942 1 2
+39943 1 2
+39944 1 2
+39945 1 2
+39946 1 2
+39947 1 2
+39948 1 2
+39949 1 2
+39950 1 2
+39951 1 2
+39952 1 2
+39953 1 2
+39954 1 2
+39955 1 2
+39956 1 2
+39957 1 2
+39958 1 2
+39959 1 2
+39960 1 2
+39961 1 2
+39962 1 2
+39963 1 2
+39964 1 2
+39965 1 2
+39966 1 2
+39967 1 2
+39968 1 2
+39969 1 2
+39970 1 2
+39971 1 2
+39972 1 2
+39973 1 2
+39974 1 2
+39975 1 2
+39976 1 2
+39977 1 2
+39978 1 2
+39979 1 2
+39980 1 2
+39981 1 2
+39982 1 2
+39983 1 2
+39984 1 2
+39985 1 2
+39986 1 2
+39987 1 2
+39988 1 2
+39989 1 2
+39990 1 2
+39991 1 2
+39992 1 2
+39993 1 2
+39994 1 2
+39995 1 2
+39996 1 2
+39997 1 2
+39998 1 2
+39999 1 2
+40000 1 2
+40001 1 2
+40002 1 2
+40003 1 2
+40004 1 2
+40005 1 2
+40006 1 2
+40007 1 2
+40008 1 2
+40009 1 2
+40010 1 2
+40011 1 2
+40012 1 2
+40013 1 2
+40014 1 2
+40015 1 2
+40016 1 2
+40017 1 2
+40018 1 2
+40019 1 2
+40020 1 2
+40021 1 2
+40022 1 2
+40023 1 2
+40024 1 2
+40025 1 2
+40026 1 2
+40027 1 2
+40028 1 2
+40029 1 2
+40030 1 2
+40031 1 2
+40032 1 2
+40033 1 2
+40034 1 2
+40035 1 2
+40036 1 2
+40037 1 2
+40038 1 2
+40039 1 2
+40040 1 2
+40041 1 2
+40042 1 2
+40043 1 2
+40044 1 2
+40045 1 2
+40046 1 2
+40047 1 2
+40048 1 2
+40049 1 2
+40050 1 2
+40051 1 2
+40052 1 2
+40053 1 2
+40054 1 2
+40055 1 2
+40056 1 2
+40057 1 2
+40058 1 2
+40059 1 2
+40060 1 2
+40061 1 2
+40062 1 2
+40063 1 2
+40064 1 2
+40065 1 2
+40066 1 2
+40067 1 2
+40068 1 2
+40069 1 2
+40070 1 2
+40071 1 2
+40072 1 2
+40073 1 2
+40074 1 2
+40075 1 2
+40076 1 2
+40077 1 2
+40078 1 2
+40079 1 2
+40080 1 2
+40081 1 2
+40082 1 2
+40083 1 2
+40084 1 2
+40085 1 2
+40086 1 2
+40087 1 2
+40088 1 2
+40089 1 2
+40090 1 2
+40091 1 2
+40092 1 2
+40093 1 2
+40094 1 2
+40095 1 2
+40096 1 2
+40097 1 2
+40098 1 2
+40099 1 2
+40100 1 2
+40101 1 2
+40102 1 2
+40103 1 2
+40104 1 2
+40105 1 2
+40106 1 2
+40107 1 2
+40108 1 2
+40109 1 2
+40110 1 2
+40111 1 2
+40112 1 2
+40113 1 2
+40114 1 2
+40115 1 2
+40116 1 2
+40117 1 2
+40118 1 2
+40119 1 2
+40120 1 2
+40121 1 2
+40122 1 2
+40123 1 2
+40124 1 2
+40125 1 2
+40126 1 2
+40127 1 2
+40128 1 2
+40129 1 2
+40130 1 2
+40131 1 2
+40132 1 2
+40133 1 2
+40134 1 2
+40135 1 2
+40136 1 2
+40137 1 2
+40138 1 2
+40139 1 2
+40140 1 2
+40141 1 2
+40142 1 2
+40143 1 2
+40144 1 2
+40145 1 2
+40146 1 2
+40147 1 2
+40148 1 2
+40149 1 2
+40150 1 2
+40151 1 2
+40152 1 2
+40153 1 2
+40154 1 2
+40155 1 2
+40156 1 2
+40157 1 2
+40158 1 2
+40159 1 2
+40160 1 2
+40161 1 2
+40162 1 2
+40163 1 2
+40164 1 2
+40165 1 2
+40166 1 2
+40167 1 2
+40168 1 2
+40169 1 2
+40170 1 2
+40171 1 2
+40172 1 2
+40173 1 2
+40174 1 2
+40175 1 2
+40176 1 2
+40177 1 2
+40178 1 2
+40179 1 2
+40180 1 2
+40181 1 2
+40182 1 2
+40183 1 2
+40184 1 2
+40185 1 2
+40186 1 2
+40187 1 2
+40188 1 2
+40189 1 2
+40190 1 2
+40191 1 2
+40192 1 2
+40193 1 2
+40194 1 2
+40195 1 2
+40196 1 2
+40197 1 2
+40198 1 2
+40199 1 2
+40200 1 2
+40201 1 2
+40202 1 2
+40203 1 2
+40204 1 2
+40205 1 2
+40206 1 2
+40207 1 2
+40208 1 2
+40209 1 2
+40210 1 2
+40211 1 2
+40212 1 2
+40213 1 2
+40214 1 2
+40215 1 2
+40216 1 2
+40217 1 2
+40218 1 2
+40219 1 2
+40220 1 2
+40221 1 2
+40222 1 2
+40223 1 2
+40224 1 2
+40225 1 2
+40226 1 2
+40227 1 2
+40228 1 2
+40229 1 2
+40230 1 2
+40231 1 2
+40232 1 2
+40233 1 2
+40234 1 2
+40235 1 2
+40236 1 2
+40237 1 2
+40238 1 2
+40239 1 2
+40240 1 2
+40241 1 2
+40242 1 2
+40243 1 2
+40244 1 2
+40245 1 2
+40246 1 2
+40247 1 2
+40248 1 2
+40249 1 2
+40250 1 2
+40251 1 2
+40252 1 2
+40253 1 2
+40254 1 2
+40255 1 2
+40256 1 2
+40257 1 2
+40258 1 2
+40259 1 2
+40260 1 2
+40261 1 2
+40262 1 2
+40263 1 2
+40264 1 2
+40265 1 2
+40266 1 2
+40267 1 2
+40268 1 2
+40269 1 2
+40270 1 2
+40271 1 2
+40272 1 2
+40273 1 2
+40274 1 2
+40275 1 2
+40276 1 2
+40277 1 2
+40278 1 2
+40279 1 2
+40280 1 2
+40281 1 2
+40282 1 2
+40283 1 2
+40284 1 2
+40285 1 2
+40286 1 2
+40287 1 2
+40288 1 2
+40289 1 2
+40290 1 2
+40291 1 2
+40292 1 2
+40293 1 2
+40294 1 2
+40295 1 2
+40296 1 2
+40297 1 2
+40298 1 2
+40299 1 2
+40300 1 2
+40301 1 2
+40302 1 2
+40303 1 2
+40304 1 2
+40305 1 2
+40306 1 2
+40307 1 2
+40308 1 2
+40309 1 2
+40310 1 2
+40311 1 2
+40312 1 2
+40313 1 2
+40314 1 2
+40315 1 2
+40316 1 2
+40317 1 2
+40318 1 2
+40319 1 2
+40320 1 2
+40321 1 2
+40322 1 2
+40323 1 2
+40324 1 2
+40325 1 2
+40326 1 2
+40327 1 2
+40328 1 2
+40329 1 2
+40330 1 2
+40331 1 2
+40332 1 2
+40333 1 2
+40334 1 2
+40335 1 2
+40336 1 2
+40337 1 2
+40338 1 2
+40339 1 2
+40340 1 2
+40341 1 2
+40342 1 2
+40343 1 2
+40344 1 2
+40345 1 2
+40346 1 2
+40347 1 2
+40348 1 2
+40349 1 2
+40350 1 2
+40351 1 2
+40352 1 2
+40353 1 2
+40354 1 2
+40355 1 2
+40356 1 2
+40357 1 2
+40358 1 2
+40359 1 2
+40360 1 2
+40361 1 2
+40362 1 2
+40363 1 2
+40364 1 2
+40365 1 2
+40366 1 2
+40367 1 2
+40368 1 2
+40369 1 2
+40370 1 2
+40371 1 2
+40372 1 2
+40373 1 2
+40374 1 2
+40375 1 2
+40376 1 2
+40377 1 2
+40378 1 2
+40379 1 2
+40380 1 2
+40381 1 2
+40382 1 2
+40383 1 2
+40384 1 2
+40385 1 2
+40386 1 2
+40387 1 2
+40388 1 2
+40389 1 2
+40390 1 2
+40391 1 2
+40392 1 2
+40393 1 2
+40394 1 2
+40395 1 2
+40396 1 2
+40397 1 2
+40398 1 2
+40399 1 2
+40400 1 2
+40401 1 2
+40402 1 2
+40403 1 2
+40404 1 2
+40405 1 2
+40406 1 2
+40407 1 2
+40408 1 2
+40409 1 2
+40410 1 2
+40411 1 2
+40412 1 2
+40413 1 2
+40414 1 2
+40415 1 2
+40416 1 2
+40417 1 2
+40418 1 2
+40419 1 2
+40420 1 2
+40421 1 2
+40422 1 2
+40423 1 2
+40424 1 2
+40425 1 2
+40426 1 2
+40427 1 2
+40428 1 2
+40429 1 2
+40430 1 2
+40431 1 2
+40432 1 2
+40433 1 2
+40434 1 2
+40435 1 2
+40436 1 2
+40437 1 2
+40438 1 2
+40439 1 2
+40440 1 2
+40441 1 2
+40442 1 2
+40443 1 2
+40444 1 2
+40445 1 2
+40446 1 2
+40447 1 2
+40448 1 2
+40449 1 2
+40450 1 2
+40451 1 2
+40452 1 2
+40453 1 2
+40454 1 2
+40455 1 2
+40456 1 2
+40457 1 2
+40458 1 2
+40459 1 2
+40460 1 2
+40461 1 2
+40462 1 2
+40463 1 2
+40464 1 2
+40465 1 2
+40466 1 2
+40467 1 2
+40468 1 2
+40469 1 2
+40470 1 2
+40471 1 2
+40472 1 2
+40473 1 2
+40474 1 2
+40475 1 2
+40476 1 2
+40477 1 2
+40478 1 2
+40479 1 2
+40480 1 2
+40481 1 2
+40482 1 2
+40483 1 2
+40484 1 2
+40485 1 2
+40486 1 2
+40487 1 2
+40488 1 2
+40489 1 2
+40490 1 2
+40491 1 2
+40492 1 2
+40493 1 2
+40494 1 2
+40495 1 2
+40496 1 2
+40497 1 2
+40498 1 2
+40499 1 2
+40500 1 2
+40501 1 2
+40502 1 2
+40503 1 2
+40504 1 2
+40505 1 2
+40506 1 2
+40507 1 2
+40508 1 2
+40509 1 2
+40510 1 2
+40511 1 2
+40512 1 2
+40513 1 2
+40514 1 2
+40515 1 2
+40516 1 2
+40517 1 2
+40518 1 2
+40519 1 2
+40520 1 2
+40521 1 2
+40522 1 2
+40523 1 2
+40524 1 2
+40525 1 2
+40526 1 2
+40527 1 2
+40528 1 2
+40529 1 2
+40530 1 2
+40531 1 2
+40532 1 2
+40533 1 2
+40534 1 2
+40535 1 2
+40536 1 2
+40537 1 2
+40538 1 2
+40539 1 2
+40540 1 2
+40541 1 2
+40542 1 2
+40543 1 2
+40544 1 2
+40545 1 2
+40546 1 2
+40547 1 2
+40548 1 2
+40549 1 2
+40550 1 2
+40551 1 2
+40552 1 2
+40553 1 2
+40554 1 2
+40555 1 2
+40556 1 2
+40557 1 2
+40558 1 2
+40559 1 2
+40560 1 2
+40561 1 2
+40562 1 2
+40563 1 2
+40564 1 2
+40565 1 2
+40566 1 2
+40567 1 2
+40568 1 2
+40569 1 2
+40570 1 2
+40571 1 2
+40572 1 2
+40573 1 2
+40574 1 2
+40575 1 2
+40576 1 2
+40577 1 2
+40578 1 2
+40579 1 2
+40580 1 2
+40581 1 2
+40582 1 2
+40583 1 2
+40584 1 2
+40585 1 2
+40586 1 2
+40587 1 2
+40588 1 2
+40589 1 2
+40590 1 2
+40591 1 2
+40592 1 2
+40593 1 2
+40594 1 2
+40595 1 2
+40596 1 2
+40597 1 2
+40598 1 2
+40599 1 2
+40600 1 2
+40601 1 2
+40602 1 2
+40603 1 2
+40604 1 2
+40605 1 2
+40606 1 2
+40607 1 2
+40608 1 2
+40609 1 2
+40610 1 2
+40611 1 2
+40612 1 2
+40613 1 2
+40614 1 2
+40615 1 2
+40616 1 2
+40617 1 2
+40618 1 2
+40619 1 2
+40620 1 2
+40621 1 2
+40622 1 2
+40623 1 2
+40624 1 2
+40625 1 2
+40626 1 2
+40627 1 2
+40628 1 2
+40629 1 2
+40630 1 2
+40631 1 2
+40632 1 2
+40633 1 2
+40634 1 2
+40635 1 2
+40636 1 2
+40637 1 2
+40638 1 2
+40639 1 2
+40640 1 2
+40641 1 2
+40642 1 2
+40643 1 2
+40644 1 2
+40645 1 2
+40646 1 2
+40647 1 2
+40648 1 2
+40649 1 2
+40650 1 2
+40651 1 2
+40652 1 2
+40653 1 2
+40654 1 2
+40655 1 2
+40656 1 2
+40657 1 2
+40658 1 2
+40659 1 2
+40660 1 2
+40661 1 2
+40662 1 2
+40663 1 2
+40664 1 2
+40665 1 2
+40666 1 2
+40667 1 2
+40668 1 2
+40669 1 2
+40670 1 2
+40671 1 2
+40672 1 2
+40673 1 2
+40674 1 2
+40675 1 2
+40676 1 2
+40677 1 2
+40678 1 2
+40679 1 2
+40680 1 2
+40681 1 2
+40682 1 2
+40683 1 2
+40684 1 2
+40685 1 2
+40686 1 2
+40687 1 2
+40688 1 2
+40689 1 2
+40690 1 2
+40691 1 2
+40692 1 2
+40693 1 2
+40694 1 2
+40695 1 2
+40696 1 2
+40697 1 2
+40698 1 2
+40699 1 2
+40700 1 2
+40701 1 2
+40702 1 2
+40703 1 2
+40704 1 2
+40705 1 2
+40706 1 2
+40707 1 2
+40708 1 2
+40709 1 2
+40710 1 2
+40711 1 2
+40712 1 2
+40713 1 2
+40714 1 2
+40715 1 2
+40716 1 2
+40717 1 2
+40718 1 2
+40719 1 2
+40720 1 2
+40721 1 2
+40722 1 2
+40723 1 2
+40724 1 2
+40725 1 2
+40726 1 2
+40727 1 2
+40728 1 2
+40729 1 2
+40730 1 2
+40731 1 2
+40732 1 2
+40733 1 2
+40734 1 2
+40735 1 2
+40736 1 2
+40737 1 2
+40738 1 2
+40739 1 2
+40740 1 2
+40741 1 2
+40742 1 2
+40743 1 2
+40744 1 2
+40745 1 2
+40746 1 2
+40747 1 2
+40748 1 2
+40749 1 2
+40750 1 2
+40751 1 2
+40752 1 2
+40753 1 2
+40754 1 2
+40755 1 2
+40756 1 2
+40757 1 2
+40758 1 2
+40759 1 2
+40760 1 2
+40761 1 2
+40762 1 2
+40763 1 2
+40764 1 2
+40765 1 2
+40766 1 2
+40767 1 2
+40768 1 2
+40769 1 2
+40770 1 2
+40771 1 2
+40772 1 2
+40773 1 2
+40774 1 2
+40775 1 2
+40776 1 2
+40777 1 2
+40778 1 2
+40779 1 2
+40780 1 2
+40781 1 2
+40782 1 2
+40783 1 2
+40784 1 2
+40785 1 2
+40786 1 2
+40787 1 2
+40788 1 2
+40789 1 2
+40790 1 2
+40791 1 2
+40792 1 2
+40793 1 2
+40794 1 2
+40795 1 2
+40796 1 2
+40797 1 2
+40798 1 2
+40799 1 2
+40800 1 2
+40801 1 2
+40802 1 2
+40803 1 2
+40804 1 2
+40805 1 2
+40806 1 2
+40807 1 2
+40808 1 2
+40809 1 2
+40810 1 2
+40811 1 2
+40812 1 2
+40813 1 2
+40814 1 2
+40815 1 2
+40816 1 2
+40817 1 2
+40818 1 2
+40819 1 2
+40820 1 2
+40821 1 2
+40822 1 2
+40823 1 2
+40824 1 2
+40825 1 2
+40826 1 2
+40827 1 2
+40828 1 2
+40829 1 2
+40830 1 2
+40831 1 2
+40832 1 2
+40833 1 2
+40834 1 2
+40835 1 2
+40836 1 2
+40837 1 2
+40838 1 2
+40839 1 2
+40840 1 2
+40841 1 2
+40842 1 2
+40843 1 2
+40844 1 2
+40845 1 2
+40846 1 2
+40847 1 2
+40848 1 2
+40849 1 2
+40850 1 2
+40851 1 2
+40852 1 2
+40853 1 2
+40854 1 2
+40855 1 2
+40856 1 2
+40857 1 2
+40858 1 2
+40859 1 2
+40860 1 2
+40861 1 2
+40862 1 2
+40863 1 2
+40864 1 2
+40865 1 2
+40866 1 2
+40867 1 2
+40868 1 2
+40869 1 2
+40870 1 2
+40871 1 2
+40872 1 2
+40873 1 2
+40874 1 2
+40875 1 2
+40876 1 2
+40877 1 2
+40878 1 2
+40879 1 2
+40880 1 2
+40881 1 2
+40882 1 2
+40883 1 2
+40884 1 2
+40885 1 2
+40886 1 2
+40887 1 2
+40888 1 2
+40889 1 2
+40890 1 2
+40891 1 2
+40892 1 2
+40893 1 2
+40894 1 2
+40895 1 2
+40896 1 2
+40897 1 2
+40898 1 2
+40899 1 2
+40900 1 2
+40901 1 2
+40902 1 2
+40903 1 2
+40904 1 2
+40905 1 2
+40906 1 2
+40907 1 2
+40908 1 2
+40909 1 2
+40910 1 2
+40911 1 2
+40912 1 2
+40913 1 2
+40914 1 2
+40915 1 2
+40916 1 2
+40917 1 2
+40918 1 2
+40919 1 2
+40920 1 2
+40921 1 2
+40922 1 2
+40923 1 2
+40924 1 2
+40925 1 2
+40926 1 2
+40927 1 2
+40928 1 2
+40929 1 2
+40930 1 2
+40931 1 2
+40932 1 2
+40933 1 2
+40934 1 2
+40935 1 2
+40936 1 2
+40937 1 2
+40938 1 2
+40939 1 2
+40940 1 2
+40941 1 2
+40942 1 2
+40943 1 2
+40944 1 2
+40945 1 2
+40946 1 2
+40947 1 2
+40948 1 2
+40949 1 2
+40950 1 2
+40951 1 2
+40952 1 2
+40953 1 2
+40954 1 2
+40955 1 2
+40956 1 2
+40957 1 2
+40958 1 2
+40959 1 2
+40960 1 2
+40961 1 2
+40962 1 2
+40963 1 2
+40964 1 2
+40965 1 2
+40966 1 2
+40967 1 2
+40968 1 2
+40969 1 2
+40970 1 2
+40971 1 2
+40972 1 2
+40973 1 2
+40974 1 2
+40975 1 2
+40976 1 2
+40977 1 2
+40978 1 2
+40979 1 2
+40980 1 2
+40981 1 2
+40982 1 2
+40983 1 2
+40984 1 2
+40985 1 2
+40986 1 2
+40987 1 2
+40988 1 2
+40989 1 2
+40990 1 2
+40991 1 2
+40992 1 2
+40993 1 2
+40994 1 2
+40995 1 2
+40996 1 2
+40997 1 2
+40998 1 2
+40999 1 2
+41000 1 2
+41001 1 2
+41002 1 2
+41003 1 2
+41004 1 2
+41005 1 2
+41006 1 2
+41007 1 2
+41008 1 2
+41009 1 2
+41010 1 2
+41011 1 2
+41012 1 2
+41013 1 2
+41014 1 2
+41015 1 2
+41016 1 2
+41017 1 2
+41018 1 2
+41019 1 2
+41020 1 2
+41021 1 2
+41022 1 2
+41023 1 2
+41024 1 2
+41025 1 2
+41026 1 2
+41027 1 2
+41028 1 2
+41029 1 2
+41030 1 2
+41031 1 2
+41032 1 2
+41033 1 2
+41034 1 2
+41035 1 2
+41036 1 2
+41037 1 2
+41038 1 2
+41039 1 2
+41040 1 2
+41041 1 2
+41042 1 2
+41043 1 2
+41044 1 2
+41045 1 2
+41046 1 2
+41047 1 2
+41048 1 2
+41049 1 2
+41050 1 2
+41051 1 2
+41052 1 2
+41053 1 2
+41054 1 2
+41055 1 2
+41056 1 2
+41057 1 2
+41058 1 2
+41059 1 2
+41060 1 2
+41061 1 2
+41062 1 2
+41063 1 2
+41064 1 2
+41065 1 2
+41066 1 2
+41067 1 2
+41068 1 2
+41069 1 2
+41070 1 2
+41071 1 2
+41072 1 2
+41073 1 2
+41074 1 2
+41075 1 2
+41076 1 2
+41077 1 2
+41078 1 2
+41079 1 2
+41080 1 2
+41081 1 2
+41082 1 2
+41083 1 2
+41084 1 2
+41085 1 2
+41086 1 2
+41087 1 2
+41088 1 2
+41089 1 2
+41090 1 2
+41091 1 2
+41092 1 2
+41093 1 2
+41094 1 2
+41095 1 2
+41096 1 2
+41097 1 2
+41098 1 2
+41099 1 2
+41100 1 2
+41101 1 2
+41102 1 2
+41103 1 2
+41104 1 2
+41105 1 2
+41106 1 2
+41107 1 2
+41108 1 2
+41109 1 2
+41110 1 2
+41111 1 2
+41112 1 2
+41113 1 2
+41114 1 2
+41115 1 2
+41116 1 2
+41117 1 2
+41118 1 2
+41119 1 2
+41120 1 2
+41121 1 2
+41122 1 2
+41123 1 2
+41124 1 2
+41125 1 2
+41126 1 2
+41127 1 2
+41128 1 2
+41129 1 2
+41130 1 2
+41131 1 2
+41132 1 2
+41133 1 2
+41134 1 2
+41135 1 2
+41136 1 2
+41137 1 2
+41138 1 2
+41139 1 2
+41140 1 2
+41141 1 2
+41142 1 2
+41143 1 2
+41144 1 2
+41145 1 2
+41146 1 2
+41147 1 2
+41148 1 2
+41149 1 2
+41150 1 2
+41151 1 2
+41152 1 2
+41153 1 2
+41154 1 2
+41155 1 2
+41156 1 2
+41157 1 2
+41158 1 2
+41159 1 2
+41160 1 2
+41161 1 2
+41162 1 2
+41163 1 2
+41164 1 2
+41165 1 2
+41166 1 2
+41167 1 2
+41168 1 2
+41169 1 2
+41170 1 2
+41171 1 2
+41172 1 2
+41173 1 2
+41174 1 2
+41175 1 2
+41176 1 2
+41177 1 2
+41178 1 2
+41179 1 2
+41180 1 2
+41181 1 2
+41182 1 2
+41183 1 2
+41184 1 2
+41185 1 2
+41186 1 2
+41187 1 2
+41188 1 2
+41189 1 2
+41190 1 2
+41191 1 2
+41192 1 2
+41193 1 2
+41194 1 2
+41195 1 2
+41196 1 2
+41197 1 2
+41198 1 2
+41199 1 2
+41200 1 2
+41201 1 2
+41202 1 2
+41203 1 2
+41204 1 2
+41205 1 2
+41206 1 2
+41207 1 2
+41208 1 2
+41209 1 2
+41210 1 2
+41211 1 2
+41212 1 2
+41213 1 2
+41214 1 2
+41215 1 2
+41216 1 2
+41217 1 2
+41218 1 2
+41219 1 2
+41220 1 2
+41221 1 2
+41222 1 2
+41223 1 2
+41224 1 2
+41225 1 2
+41226 1 2
+41227 1 2
+41228 1 2
+41229 1 2
+41230 1 2
+41231 1 2
+41232 1 2
+41233 1 2
+41234 1 2
+41235 1 2
+41236 1 2
+41237 1 2
+41238 1 2
+41239 1 2
+41240 1 2
+41241 1 2
+41242 1 2
+41243 1 2
+41244 1 2
+41245 1 2
+41246 1 2
+41247 1 2
+41248 1 2
+41249 1 2
+41250 1 2
+41251 1 2
+41252 1 2
+41253 1 2
+41254 1 2
+41255 1 2
+41256 1 2
+41257 1 2
+41258 1 2
+41259 1 2
+41260 1 2
+41261 1 2
+41262 1 2
+41263 1 2
+41264 1 2
+41265 1 2
+41266 1 2
+41267 1 2
+41268 1 2
+41269 1 2
+41270 1 2
+41271 1 2
+41272 1 2
+41273 1 2
+41274 1 2
+41275 1 2
+41276 1 2
+41277 1 2
+41278 1 2
+41279 1 2
+41280 1 2
+41281 1 2
+41282 1 2
+41283 1 2
+41284 1 2
+41285 1 2
+41286 1 2
+41287 1 2
+41288 1 2
+41289 1 2
+41290 1 2
+41291 1 2
+41292 1 2
+41293 1 2
+41294 1 2
+41295 1 2
+41296 1 2
+41297 1 2
+41298 1 2
+41299 1 2
+41300 1 2
+41301 1 2
+41302 1 2
+41303 1 2
+41304 1 2
+41305 1 2
+41306 1 2
+41307 1 2
+41308 1 2
+41309 1 2
+41310 1 2
+41311 1 2
+41312 1 2
+41313 1 2
+41314 1 2
+41315 1 2
+41316 1 2
+41317 1 2
+41318 1 2
+41319 1 2
+41320 1 2
+41321 1 2
+41322 1 2
+41323 1 2
+41324 1 2
+41325 1 2
+41326 1 2
+41327 1 2
+41328 1 2
+41329 1 2
+41330 1 2
+41331 1 2
+41332 1 2
+41333 1 2
+41334 1 2
+41335 1 2
+41336 1 2
+41337 1 2
+41338 1 2
+41339 1 2
+41340 1 2
+41341 1 2
+41342 1 2
+41343 1 2
+41344 1 2
+41345 1 2
+41346 1 2
+41347 1 2
+41348 1 2
+41349 1 2
+41350 1 2
+41351 1 2
+41352 1 2
+41353 1 2
+41354 1 2
+41355 1 2
+41356 1 2
+41357 1 2
+41358 1 2
+41359 1 2
+41360 1 2
+41361 1 2
+41362 1 2
+41363 1 2
+41364 1 2
+41365 1 2
+41366 1 2
+41367 1 2
+41368 1 2
+41369 1 2
+41370 1 2
+41371 1 2
+41372 1 2
+41373 1 2
+41374 1 2
+41375 1 2
+41376 1 2
+41377 1 2
+41378 1 2
+41379 1 2
+41380 1 2
+41381 1 2
+41382 1 2
+41383 1 2
+41384 1 2
+41385 1 2
+41386 1 2
+41387 1 2
+41388 1 2
+41389 1 2
+41390 1 2
+41391 1 2
+41392 1 2
+41393 1 2
+41394 1 2
+41395 1 2
+41396 1 2
+41397 1 2
+41398 1 2
+41399 1 2
+41400 1 2
+41401 1 2
+41402 1 2
+41403 1 2
+41404 1 2
+41405 1 2
+41406 1 2
+41407 1 2
+41408 1 2
+41409 1 2
+41410 1 2
+41411 1 2
+41412 1 2
+41413 1 2
+41414 1 2
+41415 1 2
+41416 1 2
+41417 1 2
+41418 1 2
+41419 1 2
+41420 1 2
+41421 1 2
+41422 1 2
+41423 1 2
+41424 1 2
+41425 1 2
+41426 1 2
+41427 1 2
+41428 1 2
+41429 1 2
+41430 1 2
+41431 1 2
+41432 1 2
+41433 1 2
+41434 1 2
+41435 1 2
+41436 1 2
+41437 1 2
+41438 1 2
+41439 1 2
+41440 1 2
+41441 1 2
+41442 1 2
+41443 1 2
+41444 1 2
+41445 1 2
+41446 1 2
+41447 1 2
+41448 1 2
+41449 1 2
+41450 1 2
+41451 1 2
+41452 1 2
+41453 1 2
+41454 1 2
+41455 1 2
+41456 1 2
+41457 1 2
+41458 1 2
+41459 1 2
+41460 1 2
+41461 1 2
+41462 1 2
+41463 1 2
+41464 1 2
+41465 1 2
+41466 1 2
+41467 1 2
+41468 1 2
+41469 1 2
+41470 1 2
+41471 1 2
+41472 1 2
+41473 1 2
+41474 1 2
+41475 1 2
+41476 1 2
+41477 1 2
+41478 1 2
+41479 1 2
+41480 1 2
+41481 1 2
+41482 1 2
+41483 1 2
+41484 1 2
+41485 1 2
+41486 1 2
+41487 1 2
+41488 1 2
+41489 1 2
+41490 1 2
+41491 1 2
+41492 1 2
+41493 1 2
+41494 1 2
+41495 1 2
+41496 1 2
+41497 1 2
+41498 1 2
+41499 1 2
+41500 1 2
+41501 1 2
+41502 1 2
+41503 1 2
+41504 1 2
+41505 1 2
+41506 1 2
+41507 1 2
+41508 1 2
+41509 1 2
+41510 1 2
+41511 1 2
+41512 1 2
+41513 1 2
+41514 1 2
+41515 1 2
+41516 1 2
+41517 1 2
+41518 1 2
+41519 1 2
+41520 1 2
+41521 1 2
+41522 1 2
+41523 1 2
+41524 1 2
+41525 1 2
+41526 1 2
+41527 1 2
+41528 1 2
+41529 1 2
+41530 1 2
+41531 1 2
+41532 1 2
+41533 1 2
+41534 1 2
+41535 1 2
+41536 1 2
+41537 1 2
+41538 1 2
+41539 1 2
+41540 1 2
+41541 1 2
+41542 1 2
+41543 1 2
+41544 1 2
+41545 1 2
+41546 1 2
+41547 1 2
+41548 1 2
+41549 1 2
+41550 1 2
+41551 1 2
+41552 1 2
+41553 1 2
+41554 1 2
+41555 1 2
+41556 1 2
+41557 1 2
+41558 1 2
+41559 1 2
+41560 1 2
+41561 1 2
+41562 1 2
+41563 1 2
+41564 1 2
+41565 1 2
+41566 1 2
+41567 1 2
+41568 1 2
+41569 1 2
+41570 1 2
+41571 1 2
+41572 1 2
+41573 1 2
+41574 1 2
+41575 1 2
+41576 1 2
+41577 1 2
+41578 1 2
+41579 1 2
+41580 1 2
+41581 1 2
+41582 1 2
+41583 1 2
+41584 1 2
+41585 1 2
+41586 1 2
+41587 1 2
+41588 1 2
+41589 1 2
+41590 1 2
+41591 1 2
+41592 1 2
+41593 1 2
+41594 1 2
+41595 1 2
+41596 1 2
+41597 1 2
+41598 1 2
+41599 1 2
+41600 1 2
+41601 1 2
+41602 1 2
+41603 1 2
+41604 1 2
+41605 1 2
+41606 1 2
+41607 1 2
+41608 1 2
+41609 1 2
+41610 1 2
+41611 1 2
+41612 1 2
+41613 1 2
+41614 1 2
+41615 1 2
+41616 1 2
+41617 1 2
+41618 1 2
+41619 1 2
+41620 1 2
+41621 1 2
+41622 1 2
+41623 1 2
+41624 1 2
+41625 1 2
+41626 1 2
+41627 1 2
+41628 1 2
+41629 1 2
+41630 1 2
+41631 1 2
+41632 1 2
+41633 1 2
+41634 1 2
+41635 1 2
+41636 1 2
+41637 1 2
+41638 1 2
+41639 1 2
+41640 1 2
+41641 1 2
+41642 1 2
+41643 1 2
+41644 1 2
+41645 1 2
+41646 1 2
+41647 1 2
+41648 1 2
+41649 1 2
+41650 1 2
+41651 1 2
+41652 1 2
+41653 1 2
+41654 1 2
+41655 1 2
+41656 1 2
+41657 1 2
+41658 1 2
+41659 1 2
+41660 1 2
+41661 1 2
+41662 1 2
+41663 1 2
+41664 1 2
+41665 1 2
+41666 1 2
+41667 1 2
+41668 1 2
+41669 1 2
+41670 1 2
+41671 1 2
+41672 1 2
+41673 1 2
+41674 1 2
+41675 1 2
+41676 1 2
+41677 1 2
+41678 1 2
+41679 1 2
+41680 1 2
+41681 1 2
+41682 1 2
+41683 1 2
+41684 1 2
+41685 1 2
+41686 1 2
+41687 1 2
+41688 1 2
+41689 1 2
+41690 1 2
+41691 1 2
+41692 1 2
+41693 1 2
+41694 1 2
+41695 1 2
+41696 1 2
+41697 1 2
+41698 1 2
+41699 1 2
+41700 1 2
+41701 1 2
+41702 1 2
+41703 1 2
+41704 1 2
+41705 1 2
+41706 1 2
+41707 1 2
+41708 1 2
+41709 1 2
+41710 1 2
+41711 1 2
+41712 1 2
+41713 1 2
+41714 1 2
+41715 1 2
+41716 1 2
+41717 1 2
+41718 1 2
+41719 1 2
+41720 1 2
+41721 1 2
+41722 1 2
+41723 1 2
+41724 1 2
+41725 1 2
+41726 1 2
+41727 1 2
+41728 1 2
+41729 1 2
+41730 1 2
+41731 1 2
+41732 1 2
+41733 1 2
+41734 1 2
+41735 1 2
+41736 1 2
+41737 1 2
+41738 1 2
+41739 1 2
+41740 1 2
+41741 1 2
+41742 1 2
+41743 1 2
+41744 1 2
+41745 1 2
+41746 1 2
+41747 1 2
+41748 1 2
+41749 1 2
+41750 1 2
+41751 1 2
+41752 1 2
+41753 1 2
+41754 1 2
+41755 1 2
+41756 1 2
+41757 1 2
+41758 1 2
+41759 1 2
+41760 1 2
+41761 1 2
+41762 1 2
+41763 1 2
+41764 1 2
+41765 1 2
+41766 1 2
+41767 1 2
+41768 1 2
+41769 1 2
+41770 1 2
+41771 1 2
+41772 1 2
+41773 1 2
+41774 1 2
+41775 1 2
+41776 1 2
+41777 1 2
+41778 1 2
+41779 1 2
+41780 1 2
+41781 1 2
+41782 1 2
+41783 1 2
+41784 1 2
+41785 1 2
+41786 1 2
+41787 1 2
+41788 1 2
+41789 1 2
+41790 1 2
+41791 1 2
+41792 1 2
+41793 1 2
+41794 1 2
+41795 1 2
+41796 1 2
+41797 1 2
+41798 1 2
+41799 1 2
+41800 1 2
+41801 1 2
+41802 1 2
+41803 1 2
+41804 1 2
+41805 1 2
+41806 1 2
+41807 1 2
+41808 1 2
+41809 1 2
+41810 1 2
+41811 1 2
+41812 1 2
+41813 1 2
+41814 1 2
+41815 1 2
+41816 1 2
+41817 1 2
+41818 1 2
+41819 1 2
+41820 1 2
+41821 1 2
+41822 1 2
+41823 1 2
+41824 1 2
+41825 1 2
+41826 1 2
+41827 1 2
+41828 1 2
+41829 1 2
+41830 1 2
+41831 1 2
+41832 1 2
+41833 1 2
+41834 1 2
+41835 1 2
+41836 1 2
+41837 1 2
+41838 1 2
+41839 1 2
+41840 1 2
+41841 1 2
+41842 1 2
+41843 1 2
+41844 1 2
+41845 1 2
+41846 1 2
+41847 1 2
+41848 1 2
+41849 1 2
+41850 1 2
+41851 1 2
+41852 1 2
+41853 1 2
+41854 1 2
+41855 1 2
+41856 1 2
+41857 1 2
+41858 1 2
+41859 1 2
+41860 1 2
+41861 1 2
+41862 1 2
+41863 1 2
+41864 1 2
+41865 1 2
+41866 1 2
+41867 1 2
+41868 1 2
+41869 1 2
+41870 1 2
+41871 1 2
+41872 1 2
+41873 1 2
+41874 1 2
+41875 1 2
+41876 1 2
+41877 1 2
+41878 1 2
+41879 1 2
+41880 1 2
+41881 1 2
+41882 1 2
+41883 1 2
+41884 1 2
+41885 1 2
+41886 1 2
+41887 1 2
+41888 1 2
+41889 1 2
+41890 1 2
+41891 1 2
+41892 1 2
+41893 1 2
+41894 1 2
+41895 1 2
+41896 1 2
+41897 1 2
+41898 1 2
+41899 1 2
+41900 1 2
+41901 1 2
+41902 1 2
+41903 1 2
+41904 1 2
+41905 1 2
+41906 1 2
+41907 1 2
+41908 1 2
+41909 1 2
+41910 1 2
+41911 1 2
+41912 1 2
+41913 1 2
+41914 1 2
+41915 1 2
+41916 1 2
+41917 1 2
+41918 1 2
+41919 1 2
+41920 1 2
+41921 1 2
+41922 1 2
+41923 1 2
+41924 1 2
+41925 1 2
+41926 1 2
+41927 1 2
+41928 1 2
+41929 1 2
+41930 1 2
+41931 1 2
+41932 1 2
+41933 1 2
+41934 1 2
+41935 1 2
+41936 1 2
+41937 1 2
+41938 1 2
+41939 1 2
+41940 1 2
+41941 1 2
+41942 1 2
+41943 1 2
+41944 1 2
+41945 1 2
+41946 1 2
+41947 1 2
+41948 1 2
+41949 1 2
+41950 1 2
+41951 1 2
+41952 1 2
+41953 1 2
+41954 1 2
+41955 1 2
+41956 1 2
+41957 1 2
+41958 1 2
+41959 1 2
+41960 1 2
+41961 1 2
+41962 1 2
+41963 1 2
+41964 1 2
+41965 1 2
+41966 1 2
+41967 1 2
+41968 1 2
+41969 1 2
+41970 1 2
+41971 1 2
+41972 1 2
+41973 1 2
+41974 1 2
+41975 1 2
+41976 1 2
+41977 1 2
+41978 1 2
+41979 1 2
+41980 1 2
+41981 1 2
+41982 1 2
+41983 1 2
+41984 1 2
+41985 1 2
+41986 1 2
+41987 1 2
+41988 1 2
+41989 1 2
+41990 1 2
+41991 1 2
+41992 1 2
+41993 1 2
+41994 1 2
+41995 1 2
+41996 1 2
+41997 1 2
+41998 1 2
+41999 1 2
+42000 1 2
+42001 1 2
+42002 1 2
+42003 1 2
+42004 1 2
+42005 1 2
+42006 1 2
+42007 1 2
+42008 1 2
+42009 1 2
+42010 1 2
+42011 1 2
+42012 1 2
+42013 1 2
+42014 1 2
+42015 1 2
+42016 1 2
+42017 1 2
+42018 1 2
+42019 1 2
+42020 1 2
+42021 1 2
+42022 1 2
+42023 1 2
+42024 1 2
+42025 1 2
+42026 1 2
+42027 1 2
+42028 1 2
+42029 1 2
+42030 1 2
+42031 1 2
+42032 1 2
+42033 1 2
+42034 1 2
+42035 1 2
+42036 1 2
+42037 1 2
+42038 1 2
+42039 1 2
+42040 1 2
+42041 1 2
+42042 1 2
+42043 1 2
+42044 1 2
+42045 1 2
+42046 1 2
+42047 1 2
+42048 1 2
+42049 1 2
+42050 1 2
+42051 1 2
+42052 1 2
+42053 1 2
+42054 1 2
+42055 1 2
+42056 1 2
+42057 1 2
+42058 1 2
+42059 1 2
+42060 1 2
+42061 1 2
+42062 1 2
+42063 1 2
+42064 1 2
+42065 1 2
+42066 1 2
+42067 1 2
+42068 1 2
+42069 1 2
+42070 1 2
+42071 1 2
+42072 1 2
+42073 1 2
+42074 1 2
+42075 1 2
+42076 1 2
+42077 1 2
+42078 1 2
+42079 1 2
+42080 1 2
+42081 1 2
+42082 1 2
+42083 1 2
+42084 1 2
+42085 1 2
+42086 1 2
+42087 1 2
+42088 1 2
+42089 1 2
+42090 1 2
+42091 1 2
+42092 1 2
+42093 1 2
+42094 1 2
+42095 1 2
+42096 1 2
+42097 1 2
+42098 1 2
+42099 1 2
+42100 1 2
+42101 1 2
+42102 1 2
+42103 1 2
+42104 1 2
+42105 1 2
+42106 1 2
+42107 1 2
+42108 1 2
+42109 1 2
+42110 1 2
+42111 1 2
+42112 1 2
+42113 1 2
+42114 1 2
+42115 1 2
+42116 1 2
+42117 1 2
+42118 1 2
+42119 1 2
+42120 1 2
+42121 1 2
+42122 1 2
+42123 1 2
+42124 1 2
+42125 1 2
+42126 1 2
+42127 1 2
+42128 1 2
+42129 1 2
+42130 1 2
+42131 1 2
+42132 1 2
+42133 1 2
+42134 1 2
+42135 1 2
+42136 1 2
+42137 1 2
+42138 1 2
+42139 1 2
+42140 1 2
+42141 1 2
+42142 1 2
+42143 1 2
+42144 1 2
+42145 1 2
+42146 1 2
+42147 1 2
+42148 1 2
+42149 1 2
+42150 1 2
+42151 1 2
+42152 1 2
+42153 1 2
+42154 1 2
+42155 1 2
+42156 1 2
+42157 1 2
+42158 1 2
+42159 1 2
+42160 1 2
+42161 1 2
+42162 1 2
+42163 1 2
+42164 1 2
+42165 1 2
+42166 1 2
+42167 1 2
+42168 1 2
+42169 1 2
+42170 1 2
+42171 1 2
+42172 1 2
+42173 1 2
+42174 1 2
+42175 1 2
+42176 1 2
+42177 1 2
+42178 1 2
+42179 1 2
+42180 1 2
+42181 1 2
+42182 1 2
+42183 1 2
+42184 1 2
+42185 1 2
+42186 1 2
+42187 1 2
+42188 1 2
+42189 1 2
+42190 1 2
+42191 1 2
+42192 1 2
+42193 1 2
+42194 1 2
+42195 1 2
+42196 1 2
+42197 1 2
+42198 1 2
+42199 1 2
+42200 1 2
+42201 1 2
+42202 1 2
+42203 1 2
+42204 1 2
+42205 1 2
+42206 1 2
+42207 1 2
+42208 1 2
+42209 1 2
+42210 1 2
+42211 1 2
+42212 1 2
+42213 1 2
+42214 1 2
+42215 1 2
+42216 1 2
+42217 1 2
+42218 1 2
+42219 1 2
+42220 1 2
+42221 1 2
+42222 1 2
+42223 1 2
+42224 1 2
+42225 1 2
+42226 1 2
+42227 1 2
+42228 1 2
+42229 1 2
+42230 1 2
+42231 1 2
+42232 1 2
+42233 1 2
+42234 1 2
+42235 1 2
+42236 1 2
+42237 1 2
+42238 1 2
+42239 1 2
+42240 1 2
+42241 1 2
+42242 1 2
+42243 1 2
+42244 1 2
+42245 1 2
+42246 1 2
+42247 1 2
+42248 1 2
+42249 1 2
+42250 1 2
+42251 1 2
+42252 1 2
+42253 1 2
+42254 1 2
+42255 1 2
+42256 1 2
+42257 1 2
+42258 1 2
+42259 1 2
+42260 1 2
+42261 1 2
+42262 1 2
+42263 1 2
+42264 1 2
+42265 1 2
+42266 1 2
+42267 1 2
+42268 1 2
+42269 1 2
+42270 1 2
+42271 1 2
+42272 1 2
+42273 1 2
+42274 1 2
+42275 1 2
+42276 1 2
+42277 1 2
+42278 1 2
+42279 1 2
+42280 1 2
+42281 1 2
+42282 1 2
+42283 1 2
+42284 1 2
+42285 1 2
+42286 1 2
+42287 1 2
+42288 1 2
+42289 1 2
+42290 1 2
+42291 1 2
+42292 1 2
+42293 1 2
+42294 1 2
+42295 1 2
+42296 1 2
+42297 1 2
+42298 1 2
+42299 1 2
+42300 1 2
+42301 1 2
+42302 1 2
+42303 1 2
+42304 1 2
+42305 1 2
+42306 1 2
+42307 1 2
+42308 1 2
+42309 1 2
+42310 1 2
+42311 1 2
+42312 1 2
+42313 1 2
+42314 1 2
+42315 1 2
+42316 1 2
+42317 1 2
+42318 1 2
+42319 1 2
+42320 1 2
+42321 1 2
+42322 1 2
+42323 1 2
+42324 1 2
+42325 1 2
+42326 1 2
+42327 1 2
+42328 1 2
+42329 1 2
+42330 1 2
+42331 1 2
+42332 1 2
+42333 1 2
+42334 1 2
+42335 1 2
+42336 1 2
+42337 1 2
+42338 1 2
+42339 1 2
+42340 1 2
+42341 1 2
+42342 1 2
+42343 1 2
+42344 1 2
+42345 1 2
+42346 1 2
+42347 1 2
+42348 1 2
+42349 1 2
+42350 1 2
+42351 1 2
+42352 1 2
+42353 1 2
+42354 1 2
+42355 1 2
+42356 1 2
+42357 1 2
+42358 1 2
+42359 1 2
+42360 1 2
+42361 1 2
+42362 1 2
+42363 1 2
+42364 1 2
+42365 1 2
+42366 1 2
+42367 1 2
+42368 1 2
+42369 1 2
+42370 1 2
+42371 1 2
+42372 1 2
+42373 1 2
+42374 1 2
+42375 1 2
+42376 1 2
+42377 1 2
+42378 1 2
+42379 1 2
+42380 1 2
+42381 1 2
+42382 1 2
+42383 1 2
+42384 1 2
+42385 1 2
+42386 1 2
+42387 1 2
+42388 1 2
+42389 1 2
+42390 1 2
+42391 1 2
+42392 1 2
+42393 1 2
+42394 1 2
+42395 1 2
+42396 1 2
+42397 1 2
+42398 1 2
+42399 1 2
+42400 1 2
+42401 1 2
+42402 1 2
+42403 1 2
+42404 1 2
+42405 1 2
+42406 1 2
+42407 1 2
+42408 1 2
+42409 1 2
+42410 1 2
+42411 1 2
+42412 1 2
+42413 1 2
+42414 1 2
+42415 1 2
+42416 1 2
+42417 1 2
+42418 1 2
+42419 1 2
+42420 1 2
+42421 1 2
+42422 1 2
+42423 1 2
+42424 1 2
+42425 1 2
+42426 1 2
+42427 1 2
+42428 1 2
+42429 1 2
+42430 1 2
+42431 1 2
+42432 1 2
+42433 1 2
+42434 1 2
+42435 1 2
+42436 1 2
+42437 1 2
+42438 1 2
+42439 1 2
+42440 1 2
+42441 1 2
+42442 1 2
+42443 1 2
+42444 1 2
+42445 1 2
+42446 1 2
+42447 1 2
+42448 1 2
+42449 1 2
+42450 1 2
+42451 1 2
+42452 1 2
+42453 1 2
+42454 1 2
+42455 1 2
+42456 1 2
+42457 1 2
+42458 1 2
+42459 1 2
+42460 1 2
+42461 1 2
+42462 1 2
+42463 1 2
+42464 1 2
+42465 1 2
+42466 1 2
+42467 1 2
+42468 1 2
+42469 1 2
+42470 1 2
+42471 1 2
+42472 1 2
+42473 1 2
+42474 1 2
+42475 1 2
+42476 1 2
+42477 1 2
+42478 1 2
+42479 1 2
+42480 1 2
+42481 1 2
+42482 1 2
+42483 1 2
+42484 1 2
+42485 1 2
+42486 1 2
+42487 1 2
+42488 1 2
+42489 1 2
+42490 1 2
+42491 1 2
+42492 1 2
+42493 1 2
+42494 1 2
+42495 1 2
+42496 1 2
+42497 1 2
+42498 1 2
+42499 1 2
+42500 1 2
+42501 1 2
+42502 1 2
+42503 1 2
+42504 1 2
+42505 1 2
+42506 1 2
+42507 1 2
+42508 1 2
+42509 1 2
+42510 1 2
+42511 1 2
+42512 1 2
+42513 1 2
+42514 1 2
+42515 1 2
+42516 1 2
+42517 1 2
+42518 1 2
+42519 1 2
+42520 1 2
+42521 1 2
+42522 1 2
+42523 1 2
+42524 1 2
+42525 1 2
+42526 1 2
+42527 1 2
+42528 1 2
+42529 1 2
+42530 1 2
+42531 1 2
+42532 1 2
+42533 1 2
+42534 1 2
+42535 1 2
+42536 1 2
+42537 1 2
+42538 1 2
+42539 1 2
+42540 1 2
+42541 1 2
+42542 1 2
+42543 1 2
+42544 1 2
+42545 1 2
+42546 1 2
+42547 1 2
+42548 1 2
+42549 1 2
+42550 1 2
+42551 1 2
+42552 1 2
+42553 1 2
+42554 1 2
+42555 1 2
+42556 1 2
+42557 1 2
+42558 1 2
+42559 1 2
+42560 1 2
+42561 1 2
+42562 1 2
+42563 1 2
+42564 1 2
+42565 1 2
+42566 1 2
+42567 1 2
+42568 1 2
+42569 1 2
+42570 1 2
+42571 1 2
+42572 1 2
+42573 1 2
+42574 1 2
+42575 1 2
+42576 1 2
+42577 1 2
+42578 1 2
+42579 1 2
+42580 1 2
+42581 1 2
+42582 1 2
+42583 1 2
+42584 1 2
+42585 1 2
+42586 1 2
+42587 1 2
+42588 1 2
+42589 1 2
+42590 1 2
+42591 1 2
+42592 1 2
+42593 1 2
+42594 1 2
+42595 1 2
+42596 1 2
+42597 1 2
+42598 1 2
+42599 1 2
+42600 1 2
+42601 1 2
+42602 1 2
+42603 1 2
+42604 1 2
+42605 1 2
+42606 1 2
+42607 1 2
+42608 1 2
+42609 1 2
+42610 1 2
+42611 1 2
+42612 1 2
+42613 1 2
+42614 1 2
+42615 1 2
+42616 1 2
+42617 1 2
+42618 1 2
+42619 1 2
+42620 1 2
+42621 1 2
+42622 1 2
+42623 1 2
+42624 1 2
+42625 1 2
+42626 1 2
+42627 1 2
+42628 1 2
+42629 1 2
+42630 1 2
+42631 1 2
+42632 1 2
+42633 1 2
+42634 1 2
+42635 1 2
+42636 1 2
+42637 1 2
+42638 1 2
+42639 1 2
+42640 1 2
+42641 1 2
+42642 1 2
+42643 1 2
+42644 1 2
+42645 1 2
+42646 1 2
+42647 1 2
+42648 1 2
+42649 1 2
+42650 1 2
+42651 1 2
+42652 1 2
+42653 1 2
+42654 1 2
+42655 1 2
+42656 1 2
+42657 1 2
+42658 1 2
+42659 1 2
+42660 1 2
+42661 1 2
+42662 1 2
+42663 1 2
+42664 1 2
+42665 1 2
+42666 1 2
+42667 1 2
+42668 1 2
+42669 1 2
+42670 1 2
+42671 1 2
+42672 1 2
+42673 1 2
+42674 1 2
+42675 1 2
+42676 1 2
+42677 1 2
+42678 1 2
+42679 1 2
+42680 1 2
+42681 1 2
+42682 1 2
+42683 1 2
+42684 1 2
+42685 1 2
+42686 1 2
+42687 1 2
+42688 1 2
+42689 1 2
+42690 1 2
+42691 1 2
+42692 1 2
+42693 1 2
+42694 1 2
+42695 1 2
+42696 1 2
+42697 1 2
+42698 1 2
+42699 1 2
+42700 1 2
+42701 1 2
+42702 1 2
+42703 1 2
+42704 1 2
+42705 1 2
+42706 1 2
+42707 1 2
+42708 1 2
+42709 1 2
+42710 1 2
+42711 1 2
+42712 1 2
+42713 1 2
+42714 1 2
+42715 1 2
+42716 1 2
+42717 1 2
+42718 1 2
+42719 1 2
+42720 1 2
+42721 1 2
+42722 1 2
+42723 1 2
+42724 1 2
+42725 1 2
+42726 1 2
+42727 1 2
+42728 1 2
+42729 1 2
+42730 1 2
+42731 1 2
+42732 1 2
+42733 1 2
+42734 1 2
+42735 1 2
+42736 1 2
+42737 1 2
+42738 1 2
+42739 1 2
+42740 1 2
+42741 1 2
+42742 1 2
+42743 1 2
+42744 1 2
+42745 1 2
+42746 1 2
+42747 1 2
+42748 1 2
+42749 1 2
+42750 1 2
+42751 1 2
+42752 1 2
+42753 1 2
+42754 1 2
+42755 1 2
+42756 1 2
+42757 1 2
+42758 1 2
+42759 1 2
+42760 1 2
+42761 1 2
+42762 1 2
+42763 1 2
+42764 1 2
+42765 1 2
+42766 1 2
+42767 1 2
+42768 1 2
+42769 1 2
+42770 1 2
+42771 1 2
+42772 1 2
+42773 1 2
+42774 1 2
+42775 1 2
+42776 1 2
+42777 1 2
+42778 1 2
+42779 1 2
+42780 1 2
+42781 1 2
+42782 1 2
+42783 1 2
+42784 1 2
+42785 1 2
+42786 1 2
+42787 1 2
+42788 1 2
+42789 1 2
+42790 1 2
+42791 1 2
+42792 1 2
+42793 1 2
+42794 1 2
+42795 1 2
+42796 1 2
+42797 1 2
+42798 1 2
+42799 1 2
+42800 1 2
+42801 1 2
+42802 1 2
+42803 1 2
+42804 1 2
+42805 1 2
+42806 1 2
+42807 1 2
+42808 1 2
+42809 1 2
+42810 1 2
+42811 1 2
+42812 1 2
+42813 1 2
+42814 1 2
+42815 1 2
+42816 1 2
+42817 1 2
+42818 1 2
+42819 1 2
+42820 1 2
+42821 1 2
+42822 1 2
+42823 1 2
+42824 1 2
+42825 1 2
+42826 1 2
+42827 1 2
+42828 1 2
+42829 1 2
+42830 1 2
+42831 1 2
+42832 1 2
+42833 1 2
+42834 1 2
+42835 1 2
+42836 1 2
+42837 1 2
+42838 1 2
+42839 1 2
+42840 1 2
+42841 1 2
+42842 1 2
+42843 1 2
+42844 1 2
+42845 1 2
+42846 1 2
+42847 1 2
+42848 1 2
+42849 1 2
+42850 1 2
+42851 1 2
+42852 1 2
+42853 1 2
+42854 1 2
+42855 1 2
+42856 1 2
+42857 1 2
+42858 1 2
+42859 1 2
+42860 1 2
+42861 1 2
+42862 1 2
+42863 1 2
+42864 1 2
+42865 1 2
+42866 1 2
+42867 1 2
+42868 1 2
+42869 1 2
+42870 1 2
+42871 1 2
+42872 1 2
+42873 1 2
+42874 1 2
+42875 1 2
+42876 1 2
+42877 1 2
+42878 1 2
+42879 1 2
+42880 1 2
+42881 1 2
+42882 1 2
+42883 1 2
+42884 1 2
+42885 1 2
+42886 1 2
+42887 1 2
+42888 1 2
+42889 1 2
+42890 1 2
+42891 1 2
+42892 1 2
+42893 1 2
+42894 1 2
+42895 1 2
+42896 1 2
+42897 1 2
+42898 1 2
+42899 1 2
+42900 1 2
+42901 1 2
+42902 1 2
+42903 1 2
+42904 1 2
+42905 1 2
+42906 1 2
+42907 1 2
+42908 1 2
+42909 1 2
+42910 1 2
+42911 1 2
+42912 1 2
+42913 1 2
+42914 1 2
+42915 1 2
+42916 1 2
+42917 1 2
+42918 1 2
+42919 1 2
+42920 1 2
+42921 1 2
+42922 1 2
+42923 1 2
+42924 1 2
+42925 1 2
+42926 1 2
+42927 1 2
+42928 1 2
+42929 1 2
+42930 1 2
+42931 1 2
+42932 1 2
+42933 1 2
+42934 1 2
+42935 1 2
+42936 1 2
+42937 1 2
+42938 1 2
+42939 1 2
+42940 1 2
+42941 1 2
+42942 1 2
+42943 1 2
+42944 1 2
+42945 1 2
+42946 1 2
+42947 1 2
+42948 1 2
+42949 1 2
+42950 1 2
+42951 1 2
+42952 1 2
+42953 1 2
+42954 1 2
+42955 1 2
+42956 1 2
+42957 1 2
+42958 1 2
+42959 1 2
+42960 1 2
+42961 1 2
+42962 1 2
+42963 1 2
+42964 1 2
+42965 1 2
+42966 1 2
+42967 1 2
+42968 1 2
+42969 1 2
+42970 1 2
+42971 1 2
+42972 1 2
+42973 1 2
+42974 1 2
+42975 1 2
+42976 1 2
+42977 1 2
+42978 1 2
+42979 1 2
+42980 1 2
+42981 1 2
+42982 1 2
+42983 1 2
+42984 1 2
+42985 1 2
+42986 1 2
+42987 1 2
+42988 1 2
+42989 1 2
+42990 1 2
+42991 1 2
+42992 1 2
+42993 1 2
+42994 1 2
+42995 1 2
+42996 1 2
+42997 1 2
+42998 1 2
+42999 1 2
+43000 1 2
+43001 1 2
+43002 1 2
+43003 1 2
+43004 1 2
+43005 1 2
+43006 1 2
+43007 1 2
+43008 1 2
+43009 1 2
+43010 1 2
+43011 1 2
+43012 1 2
+43013 1 2
+43014 1 2
+43015 1 2
+43016 1 2
+43017 1 2
+43018 1 2
+43019 1 2
+43020 1 2
+43021 1 2
+43022 1 2
+43023 1 2
+43024 1 2
+43025 1 2
+43026 1 2
+43027 1 2
+43028 1 2
+43029 1 2
+43030 1 2
+43031 1 2
+43032 1 2
+43033 1 2
+43034 1 2
+43035 1 2
+43036 1 2
+43037 1 2
+43038 1 2
+43039 1 2
+43040 1 2
+43041 1 2
+43042 1 2
+43043 1 2
+43044 1 2
+43045 1 2
+43046 1 2
+43047 1 2
+43048 1 2
+43049 1 2
+43050 1 2
+43051 1 2
+43052 1 2
+43053 1 2
+43054 1 2
+43055 1 2
+43056 1 2
+43057 1 2
+43058 1 2
+43059 1 2
+43060 1 2
+43061 1 2
+43062 1 2
+43063 1 2
+43064 1 2
+43065 1 2
+43066 1 2
+43067 1 2
+43068 1 2
+43069 1 2
+43070 1 2
+43071 1 2
+43072 1 2
+43073 1 2
+43074 1 2
+43075 1 2
+43076 1 2
+43077 1 2
+43078 1 2
+43079 1 2
+43080 1 2
+43081 1 2
+43082 1 2
+43083 1 2
+43084 1 2
+43085 1 2
+43086 1 2
+43087 1 2
+43088 1 2
+43089 1 2
+43090 1 2
+43091 1 2
+43092 1 2
+43093 1 2
+43094 1 2
+43095 1 2
+43096 1 2
+43097 1 2
+43098 1 2
+43099 1 2
+43100 1 2
+43101 1 2
+43102 1 2
+43103 1 2
+43104 1 2
+43105 1 2
+43106 1 2
+43107 1 2
+43108 1 2
+43109 1 2
+43110 1 2
+43111 1 2
+43112 1 2
+43113 1 2
+43114 1 2
+43115 1 2
+43116 1 2
+43117 1 2
+43118 1 2
+43119 1 2
+43120 1 2
+43121 1 2
+43122 1 2
+43123 1 2
+43124 1 2
+43125 1 2
+43126 1 2
+43127 1 2
+43128 1 2
+43129 1 2
+43130 1 2
+43131 1 2
+43132 1 2
+43133 1 2
+43134 1 2
+43135 1 2
+43136 1 2
+43137 1 2
+43138 1 2
+43139 1 2
+43140 1 2
+43141 1 2
+43142 1 2
+43143 1 2
+43144 1 2
+43145 1 2
+43146 1 2
+43147 1 2
+43148 1 2
+43149 1 2
+43150 1 2
+43151 1 2
+43152 1 2
+43153 1 2
+43154 1 2
+43155 1 2
+43156 1 2
+43157 1 2
+43158 1 2
+43159 1 2
+43160 1 2
+43161 1 2
+43162 1 2
+43163 1 2
+43164 1 2
+43165 1 2
+43166 1 2
+43167 1 2
+43168 1 2
+43169 1 2
+43170 1 2
+43171 1 2
+43172 1 2
+43173 1 2
+43174 1 2
+43175 1 2
+43176 1 2
+43177 1 2
+43178 1 2
+43179 1 2
+43180 1 2
+43181 1 2
+43182 1 2
+43183 1 2
+43184 1 2
+43185 1 2
+43186 1 2
+43187 1 2
+43188 1 2
+43189 1 2
+43190 1 2
+43191 1 2
+43192 1 2
+43193 1 2
+43194 1 2
+43195 1 2
+43196 1 2
+43197 1 2
+43198 1 2
+43199 1 2
+43200 1 2
+43201 1 2
+43202 1 2
+43203 1 2
+43204 1 2
+43205 1 2
+43206 1 2
+43207 1 2
+43208 1 2
+43209 1 2
+43210 1 2
+43211 1 2
+43212 1 2
+43213 1 2
+43214 1 2
+43215 1 2
+43216 1 2
+43217 1 2
+43218 1 2
+43219 1 2
+43220 1 2
+43221 1 2
+43222 1 2
+43223 1 2
+43224 1 2
+43225 1 2
+43226 1 2
+43227 1 2
+43228 1 2
+43229 1 2
+43230 1 2
+43231 1 2
+43232 1 2
+43233 1 2
+43234 1 2
+43235 1 2
+43236 1 2
+43237 1 2
+43238 1 2
+43239 1 2
+43240 1 2
+43241 1 2
+43242 1 2
+43243 1 2
+43244 1 2
+43245 1 2
+43246 1 2
+43247 1 2
+43248 1 2
+43249 1 2
+43250 1 2
+43251 1 2
+43252 1 2
+43253 1 2
+43254 1 2
+43255 1 2
+43256 1 2
+43257 1 2
+43258 1 2
+43259 1 2
+43260 1 2
+43261 1 2
+43262 1 2
+43263 1 2
+43264 1 2
+43265 1 2
+43266 1 2
+43267 1 2
+43268 1 2
+43269 1 2
+43270 1 2
+43271 1 2
+43272 1 2
+43273 1 2
+43274 1 2
+43275 1 2
+43276 1 2
+43277 1 2
+43278 1 2
+43279 1 2
+43280 1 2
+43281 1 2
+43282 1 2
+43283 1 2
+43284 1 2
+43285 1 2
+43286 1 2
+43287 1 2
+43288 1 2
+43289 1 2
+43290 1 2
+43291 1 2
+43292 1 2
+43293 1 2
+43294 1 2
+43295 1 2
+43296 1 2
+43297 1 2
+43298 1 2
+43299 1 2
+43300 1 2
+43301 1 2
+43302 1 2
+43303 1 2
+43304 1 2
+43305 1 2
+43306 1 2
+43307 1 2
+43308 1 2
+43309 1 2
+43310 1 2
+43311 1 2
+43312 1 2
+43313 1 2
+43314 1 2
+43315 1 2
+43316 1 2
+43317 1 2
+43318 1 2
+43319 1 2
+43320 1 2
+43321 1 2
+43322 1 2
+43323 1 2
+43324 1 2
+43325 1 2
+43326 1 2
+43327 1 2
+43328 1 2
+43329 1 2
+43330 1 2
+43331 1 2
+43332 1 2
+43333 1 2
+43334 1 2
+43335 1 2
+43336 1 2
+43337 1 2
+43338 1 2
+43339 1 2
+43340 1 2
+43341 1 2
+43342 1 2
+43343 1 2
+43344 1 2
+43345 1 2
+43346 1 2
+43347 1 2
+43348 1 2
+43349 1 2
+43350 1 2
+43351 1 2
+43352 1 2
+43353 1 2
+43354 1 2
+43355 1 2
+43356 1 2
+43357 1 2
+43358 1 2
+43359 1 2
+43360 1 2
+43361 1 2
+43362 1 2
+43363 1 2
+43364 1 2
+43365 1 2
+43366 1 2
+43367 1 2
+43368 1 2
+43369 1 2
+43370 1 2
+43371 1 2
+43372 1 2
+43373 1 2
+43374 1 2
+43375 1 2
+43376 1 2
+43377 1 2
+43378 1 2
+43379 1 2
+43380 1 2
+43381 1 2
+43382 1 2
+43383 1 2
+43384 1 2
+43385 1 2
+43386 1 2
+43387 1 2
+43388 1 2
+43389 1 2
+43390 1 2
+43391 1 2
+43392 1 2
+43393 1 2
+43394 1 2
+43395 1 2
+43396 1 2
+43397 1 2
+43398 1 2
+43399 1 2
+43400 1 2
+43401 1 2
+43402 1 2
+43403 1 2
+43404 1 2
+43405 1 2
+43406 1 2
+43407 1 2
+43408 1 2
+43409 1 2
+43410 1 2
+43411 1 2
+43412 1 2
+43413 1 2
+43414 1 2
+43415 1 2
+43416 1 2
+43417 1 2
+43418 1 2
+43419 1 2
+43420 1 2
+43421 1 2
+43422 1 2
+43423 1 2
+43424 1 2
+43425 1 2
+43426 1 2
+43427 1 2
+43428 1 2
+43429 1 2
+43430 1 2
+43431 1 2
+43432 1 2
+43433 1 2
+43434 1 2
+43435 1 2
+43436 1 2
+43437 1 2
+43438 1 2
+43439 1 2
+43440 1 2
+43441 1 2
+43442 1 2
+43443 1 2
+43444 1 2
+43445 1 2
+43446 1 2
+43447 1 2
+43448 1 2
+43449 1 2
+43450 1 2
+43451 1 2
+43452 1 2
+43453 1 2
+43454 1 2
+43455 1 2
+43456 1 2
+43457 1 2
+43458 1 2
+43459 1 2
+43460 1 2
+43461 1 2
+43462 1 2
+43463 1 2
+43464 1 2
+43465 1 2
+43466 1 2
+43467 1 2
+43468 1 2
+43469 1 2
+43470 1 2
+43471 1 2
+43472 1 2
+43473 1 2
+43474 1 2
+43475 1 2
+43476 1 2
+43477 1 2
+43478 1 2
+43479 1 2
+43480 1 2
+43481 1 2
+43482 1 2
+43483 1 2
+43484 1 2
+43485 1 2
+43486 1 2
+43487 1 2
+43488 1 2
+43489 1 2
+43490 1 2
+43491 1 2
+43492 1 2
+43493 1 2
+43494 1 2
+43495 1 2
+43496 1 2
+43497 1 2
+43498 1 2
+43499 1 2
+43500 1 2
+43501 1 2
+43502 1 2
+43503 1 2
+43504 1 2
+43505 1 2
+43506 1 2
+43507 1 2
+43508 1 2
+43509 1 2
+43510 1 2
+43511 1 2
+43512 1 2
+43513 1 2
+43514 1 2
+43515 1 2
+43516 1 2
+43517 1 2
+43518 1 2
+43519 1 2
+43520 1 2
+43521 1 2
+43522 1 2
+43523 1 2
+43524 1 2
+43525 1 2
+43526 1 2
+43527 1 2
+43528 1 2
+43529 1 2
+43530 1 2
+43531 1 2
+43532 1 2
+43533 1 2
+43534 1 2
+43535 1 2
+43536 1 2
+43537 1 2
+43538 1 2
+43539 1 2
+43540 1 2
+43541 1 2
+43542 1 2
+43543 1 2
+43544 1 2
+43545 1 2
+43546 1 2
+43547 1 2
+43548 1 2
+43549 1 2
+43550 1 2
+43551 1 2
+43552 1 2
+43553 1 2
+43554 1 2
+43555 1 2
+43556 1 2
+43557 1 2
+43558 1 2
+43559 1 2
+43560 1 2
+43561 1 2
+43562 1 2
+43563 1 2
+43564 1 2
+43565 1 2
+43566 1 2
+43567 1 2
+43568 1 2
+43569 1 2
+43570 1 2
+43571 1 2
+43572 1 2
+43573 1 2
+43574 1 2
+43575 1 2
+43576 1 2
+43577 1 2
+43578 1 2
+43579 1 2
+43580 1 2
+43581 1 2
+43582 1 2
+43583 1 2
+43584 1 2
+43585 1 2
+43586 1 2
+43587 1 2
+43588 1 2
+43589 1 2
+43590 1 2
+43591 1 2
+43592 1 2
+43593 1 2
+43594 1 2
+43595 1 2
+43596 1 2
+43597 1 2
+43598 1 2
+43599 1 2
+43600 1 2
+43601 1 2
+43602 1 2
+43603 1 2
+43604 1 2
+43605 1 2
+43606 1 2
+43607 1 2
+43608 1 2
+43609 1 2
+43610 1 2
+43611 1 2
+43612 1 2
+43613 1 2
+43614 1 2
+43615 1 2
+43616 1 2
+43617 1 2
+43618 1 2
+43619 1 2
+43620 1 2
+43621 1 2
+43622 1 2
+43623 1 2
+43624 1 2
+43625 1 2
+43626 1 2
+43627 1 2
+43628 1 2
+43629 1 2
+43630 1 2
+43631 1 2
+43632 1 2
+43633 1 2
+43634 1 2
+43635 1 2
+43636 1 2
+43637 1 2
+43638 1 2
+43639 1 2
+43640 1 2
+43641 1 2
+43642 1 2
+43643 1 2
+43644 1 2
+43645 1 2
+43646 1 2
+43647 1 2
+43648 1 2
+43649 1 2
+43650 1 2
+43651 1 2
+43652 1 2
+43653 1 2
+43654 1 2
+43655 1 2
+43656 1 2
+43657 1 2
+43658 1 2
+43659 1 2
+43660 1 2
+43661 1 2
+43662 1 2
+43663 1 2
+43664 1 2
+43665 1 2
+43666 1 2
+43667 1 2
+43668 1 2
+43669 1 2
+43670 1 2
+43671 1 2
+43672 1 2
+43673 1 2
+43674 1 2
+43675 1 2
+43676 1 2
+43677 1 2
+43678 1 2
+43679 1 2
+43680 1 2
+43681 1 2
+43682 1 2
+43683 1 2
+43684 1 2
+43685 1 2
+43686 1 2
+43687 1 2
+43688 1 2
+43689 1 2
+43690 1 2
+43691 1 2
+43692 1 2
+43693 1 2
+43694 1 2
+43695 1 2
+43696 1 2
+43697 1 2
+43698 1 2
+43699 1 2
+43700 1 2
+43701 1 2
+43702 1 2
+43703 1 2
+43704 1 2
+43705 1 2
+43706 1 2
+43707 1 2
+43708 1 2
+43709 1 2
+43710 1 2
+43711 1 2
+43712 1 2
+43713 1 2
+43714 1 2
+43715 1 2
+43716 1 2
+43717 1 2
+43718 1 2
+43719 1 2
+43720 1 2
+43721 1 2
+43722 1 2
+43723 1 2
+43724 1 2
+43725 1 2
+43726 1 2
+43727 1 2
+43728 1 2
+43729 1 2
+43730 1 2
+43731 1 2
+43732 1 2
+43733 1 2
+43734 1 2
+43735 1 2
+43736 1 2
+43737 1 2
+43738 1 2
+43739 1 2
+43740 1 2
+43741 1 2
+43742 1 2
+43743 1 2
+43744 1 2
+43745 1 2
+43746 1 2
+43747 1 2
+43748 1 2
+43749 1 2
+43750 1 2
+43751 1 2
+43752 1 2
+43753 1 2
+43754 1 2
+43755 1 2
+43756 1 2
+43757 1 2
+43758 1 2
+43759 1 2
+43760 1 2
+43761 1 2
+43762 1 2
+43763 1 2
+43764 1 2
+43765 1 2
+43766 1 2
+43767 1 2
+43768 1 2
+43769 1 2
+43770 1 2
+43771 1 2
+43772 1 2
+43773 1 2
+43774 1 2
+43775 1 2
+43776 1 2
+43777 1 2
+43778 1 2
+43779 1 2
+43780 1 2
+43781 1 2
+43782 1 2
+43783 1 2
+43784 1 2
+43785 1 2
+43786 1 2
+43787 1 2
+43788 1 2
+43789 1 2
+43790 1 2
+43791 1 2
+43792 1 2
+43793 1 2
+43794 1 2
+43795 1 2
+43796 1 2
+43797 1 2
+43798 1 2
+43799 1 2
+43800 1 2
+43801 1 2
+43802 1 2
+43803 1 2
+43804 1 2
+43805 1 2
+43806 1 2
+43807 1 2
+43808 1 2
+43809 1 2
+43810 1 2
+43811 1 2
+43812 1 2
+43813 1 2
+43814 1 2
+43815 1 2
+43816 1 2
+43817 1 2
+43818 1 2
+43819 1 2
+43820 1 2
+43821 1 2
+43822 1 2
+43823 1 2
+43824 1 2
+43825 1 2
+43826 1 2
+43827 1 2
+43828 1 2
+43829 1 2
+43830 1 2
+43831 1 2
+43832 1 2
+43833 1 2
+43834 1 2
+43835 1 2
+43836 1 2
+43837 1 2
+43838 1 2
+43839 1 2
+43840 1 2
+43841 1 2
+43842 1 2
+43843 1 2
+43844 1 2
+43845 1 2
+43846 1 2
+43847 1 2
+43848 1 2
+43849 1 2
+43850 1 2
+43851 1 2
+43852 1 2
+43853 1 2
+43854 1 2
+43855 1 2
+43856 1 2
+43857 1 2
+43858 1 2
+43859 1 2
+43860 1 2
+43861 1 2
+43862 1 2
+43863 1 2
+43864 1 2
+43865 1 2
+43866 1 2
+43867 1 2
+43868 1 2
+43869 1 2
+43870 1 2
+43871 1 2
+43872 1 2
+43873 1 2
+43874 1 2
+43875 1 2
+43876 1 2
+43877 1 2
+43878 1 2
+43879 1 2
+43880 1 2
+43881 1 2
+43882 1 2
+43883 1 2
+43884 1 2
+43885 1 2
+43886 1 2
+43887 1 2
+43888 1 2
+43889 1 2
+43890 1 2
+43891 1 2
+43892 1 2
+43893 1 2
+43894 1 2
+43895 1 2
+43896 1 2
+43897 1 2
+43898 1 2
+43899 1 2
+43900 1 2
+43901 1 2
+43902 1 2
+43903 1 2
+43904 1 2
+43905 1 2
+43906 1 2
+43907 1 2
+43908 1 2
+43909 1 2
+43910 1 2
+43911 1 2
+43912 1 2
+43913 1 2
+43914 1 2
+43915 1 2
+43916 1 2
+43917 1 2
+43918 1 2
+43919 1 2
+43920 1 2
+43921 1 2
+43922 1 2
+43923 1 2
+43924 1 2
+43925 1 2
+43926 1 2
+43927 1 2
+43928 1 2
+43929 1 2
+43930 1 2
+43931 1 2
+43932 1 2
+43933 1 2
+43934 1 2
+43935 1 2
+43936 1 2
+43937 1 2
+43938 1 2
+43939 1 2
+43940 1 2
+43941 1 2
+43942 1 2
+43943 1 2
+43944 1 2
+43945 1 2
+43946 1 2
+43947 1 2
+43948 1 2
+43949 1 2
+43950 1 2
+43951 1 2
+43952 1 2
+43953 1 2
+43954 1 2
+43955 1 2
+43956 1 2
+43957 1 2
+43958 1 2
+43959 1 2
+43960 1 2
+43961 1 2
+43962 1 2
+43963 1 2
+43964 1 2
+43965 1 2
+43966 1 2
+43967 1 2
+43968 1 2
+43969 1 2
+43970 1 2
+43971 1 2
+43972 1 2
+43973 1 2
+43974 1 2
+43975 1 2
+43976 1 2
+43977 1 2
+43978 1 2
+43979 1 2
+43980 1 2
+43981 1 2
+43982 1 2
+43983 1 2
+43984 1 2
+43985 1 2
+43986 1 2
+43987 1 2
+43988 1 2
+43989 1 2
+43990 1 2
+43991 1 2
+43992 1 2
+43993 1 2
+43994 1 2
+43995 1 2
+43996 1 2
+43997 1 2
+43998 1 2
+43999 1 2
+44000 1 2
+44001 1 2
+44002 1 2
+44003 1 2
+44004 1 2
+44005 1 2
+44006 1 2
+44007 1 2
+44008 1 2
+44009 1 2
+44010 1 2
+44011 1 2
+44012 1 2
+44013 1 2
+44014 1 2
+44015 1 2
+44016 1 2
+44017 1 2
+44018 1 2
+44019 1 2
+44020 1 2
+44021 1 2
+44022 1 2
+44023 1 2
+44024 1 2
+44025 1 2
+44026 1 2
+44027 1 2
+44028 1 2
+44029 1 2
+44030 1 2
+44031 1 2
+44032 1 2
+44033 1 2
+44034 1 2
+44035 1 2
+44036 1 2
+44037 1 2
+44038 1 2
+44039 1 2
+44040 1 2
+44041 1 2
+44042 1 2
+44043 1 2
+44044 1 2
+44045 1 2
+44046 1 2
+44047 1 2
+44048 1 2
+44049 1 2
+44050 1 2
+44051 1 2
+44052 1 2
+44053 1 2
+44054 1 2
+44055 1 2
+44056 1 2
+44057 1 2
+44058 1 2
+44059 1 2
+44060 1 2
+44061 1 2
+44062 1 2
+44063 1 2
+44064 1 2
+44065 1 2
+44066 1 2
+44067 1 2
+44068 1 2
+44069 1 2
+44070 1 2
+44071 1 2
+44072 1 2
+44073 1 2
+44074 1 2
+44075 1 2
+44076 1 2
+44077 1 2
+44078 1 2
+44079 1 2
+44080 1 2
+44081 1 2
+44082 1 2
+44083 1 2
+44084 1 2
+44085 1 2
+44086 1 2
+44087 1 2
+44088 1 2
+44089 1 2
+44090 1 2
+44091 1 2
+44092 1 2
+44093 1 2
+44094 1 2
+44095 1 2
+44096 1 2
+44097 1 2
+44098 1 2
+44099 1 2
+44100 1 2
+44101 1 2
+44102 1 2
+44103 1 2
+44104 1 2
+44105 1 2
+44106 1 2
+44107 1 2
+44108 1 2
+44109 1 2
+44110 1 2
+44111 1 2
+44112 1 2
+44113 1 2
+44114 1 2
+44115 1 2
+44116 1 2
+44117 1 2
+44118 1 2
+44119 1 2
+44120 1 2
+44121 1 2
+44122 1 2
+44123 1 2
+44124 1 2
+44125 1 2
+44126 1 2
+44127 1 2
+44128 1 2
+44129 1 2
+44130 1 2
+44131 1 2
+44132 1 2
+44133 1 2
+44134 1 2
+44135 1 2
+44136 1 2
+44137 1 2
+44138 1 2
+44139 1 2
+44140 1 2
+44141 1 2
+44142 1 2
+44143 1 2
+44144 1 2
+44145 1 2
+44146 1 2
+44147 1 2
+44148 1 2
+44149 1 2
+44150 1 2
+44151 1 2
+44152 1 2
+44153 1 2
+44154 1 2
+44155 1 2
+44156 1 2
+44157 1 2
+44158 1 2
+44159 1 2
+44160 1 2
+44161 1 2
+44162 1 2
+44163 1 2
+44164 1 2
+44165 1 2
+44166 1 2
+44167 1 2
+44168 1 2
+44169 1 2
+44170 1 2
+44171 1 2
+44172 1 2
+44173 1 2
+44174 1 2
+44175 1 2
+44176 1 2
+44177 1 2
+44178 1 2
+44179 1 2
+44180 1 2
+44181 1 2
+44182 1 2
+44183 1 2
+44184 1 2
+44185 1 2
+44186 1 2
+44187 1 2
+44188 1 2
+44189 1 2
+44190 1 2
+44191 1 2
+44192 1 2
+44193 1 2
+44194 1 2
+44195 1 2
+44196 1 2
+44197 1 2
+44198 1 2
+44199 1 2
+44200 1 2
+44201 1 2
+44202 1 2
+44203 1 2
+44204 1 2
+44205 1 2
+44206 1 2
+44207 1 2
+44208 1 2
+44209 1 2
+44210 1 2
+44211 1 2
+44212 1 2
+44213 1 2
+44214 1 2
+44215 1 2
+44216 1 2
+44217 1 2
+44218 1 2
+44219 1 2
+44220 1 2
+44221 1 2
+44222 1 2
+44223 1 2
+44224 1 2
+44225 1 2
+44226 1 2
+44227 1 2
+44228 1 2
+44229 1 2
+44230 1 2
+44231 1 2
+44232 1 2
+44233 1 2
+44234 1 2
+44235 1 2
+44236 1 2
+44237 1 2
+44238 1 2
+44239 1 2
+44240 1 2
+44241 1 2
+44242 1 2
+44243 1 2
+44244 1 2
+44245 1 2
+44246 1 2
+44247 1 2
+44248 1 2
+44249 1 2
+44250 1 2
+44251 1 2
+44252 1 2
+44253 1 2
+44254 1 2
+44255 1 2
+44256 1 2
+44257 1 2
+44258 1 2
+44259 1 2
+44260 1 2
+44261 1 2
+44262 1 2
+44263 1 2
+44264 1 2
+44265 1 2
+44266 1 2
+44267 1 2
+44268 1 2
+44269 1 2
+44270 1 2
+44271 1 2
+44272 1 2
+44273 1 2
+44274 1 2
+44275 1 2
+44276 1 2
+44277 1 2
+44278 1 2
+44279 1 2
+44280 1 2
+44281 1 2
+44282 1 2
+44283 1 2
+44284 1 2
+44285 1 2
+44286 1 2
+44287 1 2
+44288 1 2
+44289 1 2
+44290 1 2
+44291 1 2
+44292 1 2
+44293 1 2
+44294 1 2
+44295 1 2
+44296 1 2
+44297 1 2
+44298 1 2
+44299 1 2
+44300 1 2
+44301 1 2
+44302 1 2
+44303 1 2
+44304 1 2
+44305 1 2
+44306 1 2
+44307 1 2
+44308 1 2
+44309 1 2
+44310 1 2
+44311 1 2
+44312 1 2
+44313 1 2
+44314 1 2
+44315 1 2
+44316 1 2
+44317 1 2
+44318 1 2
+44319 1 2
+44320 1 2
+44321 1 2
+44322 1 2
+44323 1 2
+44324 1 2
+44325 1 2
+44326 1 2
+44327 1 2
+44328 1 2
+44329 1 2
+44330 1 2
+44331 1 2
+44332 1 2
+44333 1 2
+44334 1 2
+44335 1 2
+44336 1 2
+44337 1 2
+44338 1 2
+44339 1 2
+44340 1 2
+44341 1 2
+44342 1 2
+44343 1 2
+44344 1 2
+44345 1 2
+44346 1 2
+44347 1 2
+44348 1 2
+44349 1 2
+44350 1 2
+44351 1 2
+44352 1 2
+44353 1 2
+44354 1 2
+44355 1 2
+44356 1 2
+44357 1 2
+44358 1 2
+44359 1 2
+44360 1 2
+44361 1 2
+44362 1 2
+44363 1 2
+44364 1 2
+44365 1 2
+44366 1 2
+44367 1 2
+44368 1 2
+44369 1 2
+44370 1 2
+44371 1 2
+44372 1 2
+44373 1 2
+44374 1 2
+44375 1 2
+44376 1 2
+44377 1 2
+44378 1 2
+44379 1 2
+44380 1 2
+44381 1 2
+44382 1 2
+44383 1 2
+44384 1 2
+44385 1 2
+44386 1 2
+44387 1 2
+44388 1 2
+44389 1 2
+44390 1 2
+44391 1 2
+44392 1 2
+44393 1 2
+44394 1 2
+44395 1 2
+44396 1 2
+44397 1 2
+44398 1 2
+44399 1 2
+44400 1 2
+44401 1 2
+44402 1 2
+44403 1 2
+44404 1 2
+44405 1 2
+44406 1 2
+44407 1 2
+44408 1 2
+44409 1 2
+44410 1 2
+44411 1 2
+44412 1 2
+44413 1 2
+44414 1 2
+44415 1 2
+44416 1 2
+44417 1 2
+44418 1 2
+44419 1 2
+44420 1 2
+44421 1 2
+44422 1 2
+44423 1 2
+44424 1 2
+44425 1 2
+44426 1 2
+44427 1 2
+44428 1 2
+44429 1 2
+44430 1 2
+44431 1 2
+44432 1 2
+44433 1 2
+44434 1 2
+44435 1 2
+44436 1 2
+44437 1 2
+44438 1 2
+44439 1 2
+44440 1 2
+44441 1 2
+44442 1 2
+44443 1 2
+44444 1 2
+44445 1 2
+44446 1 2
+44447 1 2
+44448 1 2
+44449 1 2
+44450 1 2
+44451 1 2
+44452 1 2
+44453 1 2
+44454 1 2
+44455 1 2
+44456 1 2
+44457 1 2
+44458 1 2
+44459 1 2
+44460 1 2
+44461 1 2
+44462 1 2
+44463 1 2
+44464 1 2
+44465 1 2
+44466 1 2
+44467 1 2
+44468 1 2
+44469 1 2
+44470 1 2
+44471 1 2
+44472 1 2
+44473 1 2
+44474 1 2
+44475 1 2
+44476 1 2
+44477 1 2
+44478 1 2
+44479 1 2
+44480 1 2
+44481 1 2
+44482 1 2
+44483 1 2
+44484 1 2
+44485 1 2
+44486 1 2
+44487 1 2
+44488 1 2
+44489 1 2
+44490 1 2
+44491 1 2
+44492 1 2
+44493 1 2
+44494 1 2
+44495 1 2
+44496 1 2
+44497 1 2
+44498 1 2
+44499 1 2
+44500 1 2
+44501 1 2
+44502 1 2
+44503 1 2
+44504 1 2
+44505 1 2
+44506 1 2
+44507 1 2
+44508 1 2
+44509 1 2
+44510 1 2
+44511 1 2
+44512 1 2
+44513 1 2
+44514 1 2
+44515 1 2
+44516 1 2
+44517 1 2
+44518 1 2
+44519 1 2
+44520 1 2
+44521 1 2
+44522 1 2
+44523 1 2
+44524 1 2
+44525 1 2
+44526 1 2
+44527 1 2
+44528 1 2
+44529 1 2
+44530 1 2
+44531 1 2
+44532 1 2
+44533 1 2
+44534 1 2
+44535 1 2
+44536 1 2
+44537 1 2
+44538 1 2
+44539 1 2
+44540 1 2
+44541 1 2
+44542 1 2
+44543 1 2
+44544 1 2
+44545 1 2
+44546 1 2
+44547 1 2
+44548 1 2
+44549 1 2
+44550 1 2
+44551 1 2
+44552 1 2
+44553 1 2
+44554 1 2
+44555 1 2
+44556 1 2
+44557 1 2
+44558 1 2
+44559 1 2
+44560 1 2
+44561 1 2
+44562 1 2
+44563 1 2
+44564 1 2
+44565 1 2
+44566 1 2
+44567 1 2
+44568 1 2
+44569 1 2
+44570 1 2
+44571 1 2
+44572 1 2
+44573 1 2
+44574 1 2
+44575 1 2
+44576 1 2
+44577 1 2
+44578 1 2
+44579 1 2
+44580 1 2
+44581 1 2
+44582 1 2
+44583 1 2
+44584 1 2
+44585 1 2
+44586 1 2
+44587 1 2
+44588 1 2
+44589 1 2
+44590 1 2
+44591 1 2
+44592 1 2
+44593 1 2
+44594 1 2
+44595 1 2
+44596 1 2
+44597 1 2
+44598 1 2
+44599 1 2
+44600 1 2
+44601 1 2
+44602 1 2
+44603 1 2
+44604 1 2
+44605 1 2
+44606 1 2
+44607 1 2
+44608 1 2
+44609 1 2
+44610 1 2
+44611 1 2
+44612 1 2
+44613 1 2
+44614 1 2
+44615 1 2
+44616 1 2
+44617 1 2
+44618 1 2
+44619 1 2
+44620 1 2
+44621 1 2
+44622 1 2
+44623 1 2
+44624 1 2
+44625 1 2
+44626 1 2
+44627 1 2
+44628 1 2
+44629 1 2
+44630 1 2
+44631 1 2
+44632 1 2
+44633 1 2
+44634 1 2
+44635 1 2
+44636 1 2
+44637 1 2
+44638 1 2
+44639 1 2
+44640 1 2
+44641 1 2
+44642 1 2
+44643 1 2
+44644 1 2
+44645 1 2
+44646 1 2
+44647 1 2
+44648 1 2
+44649 1 2
+44650 1 2
+44651 1 2
+44652 1 2
+44653 1 2
+44654 1 2
+44655 1 2
+44656 1 2
+44657 1 2
+44658 1 2
+44659 1 2
+44660 1 2
+44661 1 2
+44662 1 2
+44663 1 2
+44664 1 2
+44665 1 2
+44666 1 2
+44667 1 2
+44668 1 2
+44669 1 2
+44670 1 2
+44671 1 2
+44672 1 2
+44673 1 2
+44674 1 2
+44675 1 2
+44676 1 2
+44677 1 2
+44678 1 2
+44679 1 2
+44680 1 2
+44681 1 2
+44682 1 2
+44683 1 2
+44684 1 2
+44685 1 2
+44686 1 2
+44687 1 2
+44688 1 2
+44689 1 2
+44690 1 2
+44691 1 2
+44692 1 2
+44693 1 2
+44694 1 2
+44695 1 2
+44696 1 2
+44697 1 2
+44698 1 2
+44699 1 2
+44700 1 2
+44701 1 2
+44702 1 2
+44703 1 2
+44704 1 2
+44705 1 2
+44706 1 2
+44707 1 2
+44708 1 2
+44709 1 2
+44710 1 2
+44711 1 2
+44712 1 2
+44713 1 2
+44714 1 2
+44715 1 2
+44716 1 2
+44717 1 2
+44718 1 2
+44719 1 2
+44720 1 2
+44721 1 2
+44722 1 2
+44723 1 2
+44724 1 2
+44725 1 2
+44726 1 2
+44727 1 2
+44728 1 2
+44729 1 2
+44730 1 2
+44731 1 2
+44732 1 2
+44733 1 2
+44734 1 2
+44735 1 2
+44736 1 2
+44737 1 2
+44738 1 2
+44739 1 2
+44740 1 2
+44741 1 2
+44742 1 2
+44743 1 2
+44744 1 2
+44745 1 2
+44746 1 2
+44747 1 2
+44748 1 2
+44749 1 2
+44750 1 2
+44751 1 2
+44752 1 2
+44753 1 2
+44754 1 2
+44755 1 2
+44756 1 2
+44757 1 2
+44758 1 2
+44759 1 2
+44760 1 2
+44761 1 2
+44762 1 2
+44763 1 2
+44764 1 2
+44765 1 2
+44766 1 2
+44767 1 2
+44768 1 2
+44769 1 2
+44770 1 2
+44771 1 2
+44772 1 2
+44773 1 2
+44774 1 2
+44775 1 2
+44776 1 2
+44777 1 2
+44778 1 2
+44779 1 2
+44780 1 2
+44781 1 2
+44782 1 2
+44783 1 2
+44784 1 2
+44785 1 2
+44786 1 2
+44787 1 2
+44788 1 2
+44789 1 2
+44790 1 2
+44791 1 2
+44792 1 2
+44793 1 2
+44794 1 2
+44795 1 2
+44796 1 2
+44797 1 2
+44798 1 2
+44799 1 2
+44800 1 2
+44801 1 2
+44802 1 2
+44803 1 2
+44804 1 2
+44805 1 2
+44806 1 2
+44807 1 2
+44808 1 2
+44809 1 2
+44810 1 2
+44811 1 2
+44812 1 2
+44813 1 2
+44814 1 2
+44815 1 2
+44816 1 2
+44817 1 2
+44818 1 2
+44819 1 2
+44820 1 2
+44821 1 2
+44822 1 2
+44823 1 2
+44824 1 2
+44825 1 2
+44826 1 2
+44827 1 2
+44828 1 2
+44829 1 2
+44830 1 2
+44831 1 2
+44832 1 2
+44833 1 2
+44834 1 2
+44835 1 2
+44836 1 2
+44837 1 2
+44838 1 2
+44839 1 2
+44840 1 2
+44841 1 2
+44842 1 2
+44843 1 2
+44844 1 2
+44845 1 2
+44846 1 2
+44847 1 2
+44848 1 2
+44849 1 2
+44850 1 2
+44851 1 2
+44852 1 2
+44853 1 2
+44854 1 2
+44855 1 2
+44856 1 2
+44857 1 2
+44858 1 2
+44859 1 2
+44860 1 2
+44861 1 2
+44862 1 2
+44863 1 2
+44864 1 2
+44865 1 2
+44866 1 2
+44867 1 2
+44868 1 2
+44869 1 2
+44870 1 2
+44871 1 2
+44872 1 2
+44873 1 2
+44874 1 2
+44875 1 2
+44876 1 2
+44877 1 2
+44878 1 2
+44879 1 2
+44880 1 2
+44881 1 2
+44882 1 2
+44883 1 2
+44884 1 2
+44885 1 2
+44886 1 2
+44887 1 2
+44888 1 2
+44889 1 2
+44890 1 2
+44891 1 2
+44892 1 2
+44893 1 2
+44894 1 2
+44895 1 2
+44896 1 2
+44897 1 2
+44898 1 2
+44899 1 2
+44900 1 2
+44901 1 2
+44902 1 2
+44903 1 2
+44904 1 2
+44905 1 2
+44906 1 2
+44907 1 2
+44908 1 2
+44909 1 2
+44910 1 2
+44911 1 2
+44912 1 2
+44913 1 2
+44914 1 2
+44915 1 2
+44916 1 2
+44917 1 2
+44918 1 2
+44919 1 2
+44920 1 2
+44921 1 2
+44922 1 2
+44923 1 2
+44924 1 2
+44925 1 2
+44926 1 2
+44927 1 2
+44928 1 2
+44929 1 2
+44930 1 2
+44931 1 2
+44932 1 2
+44933 1 2
+44934 1 2
+44935 1 2
+44936 1 2
+44937 1 2
+44938 1 2
+44939 1 2
+44940 1 2
+44941 1 2
+44942 1 2
+44943 1 2
+44944 1 2
+44945 1 2
+44946 1 2
+44947 1 2
+44948 1 2
+44949 1 2
+44950 1 2
+44951 1 2
+44952 1 2
+44953 1 2
+44954 1 2
+44955 1 2
+44956 1 2
+44957 1 2
+44958 1 2
+44959 1 2
+44960 1 2
+44961 1 2
+44962 1 2
+44963 1 2
+44964 1 2
+44965 1 2
+44966 1 2
+44967 1 2
+44968 1 2
+44969 1 2
+44970 1 2
+44971 1 2
+44972 1 2
+44973 1 2
+44974 1 2
+44975 1 2
+44976 1 2
+44977 1 2
+44978 1 2
+44979 1 2
+44980 1 2
+44981 1 2
+44982 1 2
+44983 1 2
+44984 1 2
+44985 1 2
+44986 1 2
+44987 1 2
+44988 1 2
+44989 1 2
+44990 1 2
+44991 1 2
+44992 1 2
+44993 1 2
+44994 1 2
+44995 1 2
+44996 1 2
+44997 1 2
+44998 1 2
+44999 1 2
+45000 1 2
+45001 1 2
+45002 1 2
+45003 1 2
+45004 1 2
+45005 1 2
+45006 1 2
+45007 1 2
+45008 1 2
+45009 1 2
+45010 1 2
+45011 1 2
+45012 1 2
+45013 1 2
+45014 1 2
+45015 1 2
+45016 1 2
+45017 1 2
+45018 1 2
+45019 1 2
+45020 1 2
+45021 1 2
+45022 1 2
+45023 1 2
+45024 1 2
+45025 1 2
+45026 1 2
+45027 1 2
+45028 1 2
+45029 1 2
+45030 1 2
+45031 1 2
+45032 1 2
+45033 1 2
+45034 1 2
+45035 1 2
+45036 1 2
+45037 1 2
+45038 1 2
+45039 1 2
+45040 1 2
+45041 1 2
+45042 1 2
+45043 1 2
+45044 1 2
+45045 1 2
+45046 1 2
+45047 1 2
+45048 1 2
+45049 1 2
+45050 1 2
+45051 1 2
+45052 1 2
+45053 1 2
+45054 1 2
+45055 1 2
+45056 1 2
+45057 1 2
+45058 1 2
+45059 1 2
+45060 1 2
+45061 1 2
+45062 1 2
+45063 1 2
+45064 1 2
+45065 1 2
+45066 1 2
+45067 1 2
+45068 1 2
+45069 1 2
+45070 1 2
+45071 1 2
+45072 1 2
+45073 1 2
+45074 1 2
+45075 1 2
+45076 1 2
+45077 1 2
+45078 1 2
+45079 1 2
+45080 1 2
+45081 1 2
+45082 1 2
+45083 1 2
+45084 1 2
+45085 1 2
+45086 1 2
+45087 1 2
+45088 1 2
+45089 1 2
+45090 1 2
+45091 1 2
+45092 1 2
+45093 1 2
+45094 1 2
+45095 1 2
+45096 1 2
+45097 1 2
+45098 1 2
+45099 1 2
+45100 1 2
+45101 1 2
+45102 1 2
+45103 1 2
+45104 1 2
+45105 1 2
+45106 1 2
+45107 1 2
+45108 1 2
+45109 1 2
+45110 1 2
+45111 1 2
+45112 1 2
+45113 1 2
+45114 1 2
+45115 1 2
+45116 1 2
+45117 1 2
+45118 1 2
+45119 1 2
+45120 1 2
+45121 1 2
+45122 1 2
+45123 1 2
+45124 1 2
+45125 1 2
+45126 1 2
+45127 1 2
+45128 1 2
+45129 1 2
+45130 1 2
+45131 1 2
+45132 1 2
+45133 1 2
+45134 1 2
+45135 1 2
+45136 1 2
+45137 1 2
+45138 1 2
+45139 1 2
+45140 1 2
+45141 1 2
+45142 1 2
+45143 1 2
+45144 1 2
+45145 1 2
+45146 1 2
+45147 1 2
+45148 1 2
+45149 1 2
+45150 1 2
+45151 1 2
+45152 1 2
+45153 1 2
+45154 1 2
+45155 1 2
+45156 1 2
+45157 1 2
+45158 1 2
+45159 1 2
+45160 1 2
+45161 1 2
+45162 1 2
+45163 1 2
+45164 1 2
+45165 1 2
+45166 1 2
+45167 1 2
+45168 1 2
+45169 1 2
+45170 1 2
+45171 1 2
+45172 1 2
+45173 1 2
+45174 1 2
+45175 1 2
+45176 1 2
+45177 1 2
+45178 1 2
+45179 1 2
+45180 1 2
+45181 1 2
+45182 1 2
+45183 1 2
+45184 1 2
+45185 1 2
+45186 1 2
+45187 1 2
+45188 1 2
+45189 1 2
+45190 1 2
+45191 1 2
+45192 1 2
+45193 1 2
+45194 1 2
+45195 1 2
+45196 1 2
+45197 1 2
+45198 1 2
+45199 1 2
+45200 1 2
+45201 1 2
+45202 1 2
+45203 1 2
+45204 1 2
+45205 1 2
+45206 1 2
+45207 1 2
+45208 1 2
+45209 1 2
+45210 1 2
+45211 1 2
+45212 1 2
+45213 1 2
+45214 1 2
+45215 1 2
+45216 1 2
+45217 1 2
+45218 1 2
+45219 1 2
+45220 1 2
+45221 1 2
+45222 1 2
+45223 1 2
+45224 1 2
+45225 1 2
+45226 1 2
+45227 1 2
+45228 1 2
+45229 1 2
+45230 1 2
+45231 1 2
+45232 1 2
+45233 1 2
+45234 1 2
+45235 1 2
+45236 1 2
+45237 1 2
+45238 1 2
+45239 1 2
+45240 1 2
+45241 1 2
+45242 1 2
+45243 1 2
+45244 1 2
+45245 1 2
+45246 1 2
+45247 1 2
+45248 1 2
+45249 1 2
+45250 1 2
+45251 1 2
+45252 1 2
+45253 1 2
+45254 1 2
+45255 1 2
+45256 1 2
+45257 1 2
+45258 1 2
+45259 1 2
+45260 1 2
+45261 1 2
+45262 1 2
+45263 1 2
+45264 1 2
+45265 1 2
+45266 1 2
+45267 1 2
+45268 1 2
+45269 1 2
+45270 1 2
+45271 1 2
+45272 1 2
+45273 1 2
+45274 1 2
+45275 1 2
+45276 1 2
+45277 1 2
+45278 1 2
+45279 1 2
+45280 1 2
+45281 1 2
+45282 1 2
+45283 1 2
+45284 1 2
+45285 1 2
+45286 1 2
+45287 1 2
+45288 1 2
+45289 1 2
+45290 1 2
+45291 1 2
+45292 1 2
+45293 1 2
+45294 1 2
+45295 1 2
+45296 1 2
+45297 1 2
+45298 1 2
+45299 1 2
+45300 1 2
+45301 1 2
+45302 1 2
+45303 1 2
+45304 1 2
+45305 1 2
+45306 1 2
+45307 1 2
+45308 1 2
+45309 1 2
+45310 1 2
+45311 1 2
+45312 1 2
+45313 1 2
+45314 1 2
+45315 1 2
+45316 1 2
+45317 1 2
+45318 1 2
+45319 1 2
+45320 1 2
+45321 1 2
+45322 1 2
+45323 1 2
+45324 1 2
+45325 1 2
+45326 1 2
+45327 1 2
+45328 1 2
+45329 1 2
+45330 1 2
+45331 1 2
+45332 1 2
+45333 1 2
+45334 1 2
+45335 1 2
+45336 1 2
+45337 1 2
+45338 1 2
+45339 1 2
+45340 1 2
+45341 1 2
+45342 1 2
+45343 1 2
+45344 1 2
+45345 1 2
+45346 1 2
+45347 1 2
+45348 1 2
+45349 1 2
+45350 1 2
+45351 1 2
+45352 1 2
+45353 1 2
+45354 1 2
+45355 1 2
+45356 1 2
+45357 1 2
+45358 1 2
+45359 1 2
+45360 1 2
+45361 1 2
+45362 1 2
+45363 1 2
+45364 1 2
+45365 1 2
+45366 1 2
+45367 1 2
+45368 1 2
+45369 1 2
+45370 1 2
+45371 1 2
+45372 1 2
+45373 1 2
+45374 1 2
+45375 1 2
+45376 1 2
+45377 1 2
+45378 1 2
+45379 1 2
+45380 1 2
+45381 1 2
+45382 1 2
+45383 1 2
+45384 1 2
+45385 1 2
+45386 1 2
+45387 1 2
+45388 1 2
+45389 1 2
+45390 1 2
+45391 1 2
+45392 1 2
+45393 1 2
+45394 1 2
+45395 1 2
+45396 1 2
+45397 1 2
+45398 1 2
+45399 1 2
+45400 1 2
+45401 1 2
+45402 1 2
+45403 1 2
+45404 1 2
+45405 1 2
+45406 1 2
+45407 1 2
+45408 1 2
+45409 1 2
+45410 1 2
+45411 1 2
+45412 1 2
+45413 1 2
+45414 1 2
+45415 1 2
+45416 1 2
+45417 1 2
+45418 1 2
+45419 1 2
+45420 1 2
+45421 1 2
+45422 1 2
+45423 1 2
+45424 1 2
+45425 1 2
+45426 1 2
+45427 1 2
+45428 1 2
+45429 1 2
+45430 1 2
+45431 1 2
+45432 1 2
+45433 1 2
+45434 1 2
+45435 1 2
+45436 1 2
+45437 1 2
+45438 1 2
+45439 1 2
+45440 1 2
+45441 1 2
+45442 1 2
+45443 1 2
+45444 1 2
+45445 1 2
+45446 1 2
+45447 1 2
+45448 1 2
+45449 1 2
+45450 1 2
+45451 1 2
+45452 1 2
+45453 1 2
+45454 1 2
+45455 1 2
+45456 1 2
+45457 1 2
+45458 1 2
+45459 1 2
+45460 1 2
+45461 1 2
+45462 1 2
+45463 1 2
+45464 1 2
+45465 1 2
+45466 1 2
+45467 1 2
+45468 1 2
+45469 1 2
+45470 1 2
+45471 1 2
+45472 1 2
+45473 1 2
+45474 1 2
+45475 1 2
+45476 1 2
+45477 1 2
+45478 1 2
+45479 1 2
+45480 1 2
+45481 1 2
+45482 1 2
+45483 1 2
+45484 1 2
+45485 1 2
+45486 1 2
+45487 1 2
+45488 1 2
+45489 1 2
+45490 1 2
+45491 1 2
+45492 1 2
+45493 1 2
+45494 1 2
+45495 1 2
+45496 1 2
+45497 1 2
+45498 1 2
+45499 1 2
+45500 1 2
+45501 1 2
+45502 1 2
+45503 1 2
+45504 1 2
+45505 1 2
+45506 1 2
+45507 1 2
+45508 1 2
+45509 1 2
+45510 1 2
+45511 1 2
+45512 1 2
+45513 1 2
+45514 1 2
+45515 1 2
+45516 1 2
+45517 1 2
+45518 1 2
+45519 1 2
+45520 1 2
+45521 1 2
+45522 1 2
+45523 1 2
+45524 1 2
+45525 1 2
+45526 1 2
+45527 1 2
+45528 1 2
+45529 1 2
+45530 1 2
+45531 1 2
+45532 1 2
+45533 1 2
+45534 1 2
+45535 1 2
+45536 1 2
+45537 1 2
+45538 1 2
+45539 1 2
+45540 1 2
+45541 1 2
+45542 1 2
+45543 1 2
+45544 1 2
+45545 1 2
+45546 1 2
+45547 1 2
+45548 1 2
+45549 1 2
+45550 1 2
+45551 1 2
+45552 1 2
+45553 1 2
+45554 1 2
+45555 1 2
+45556 1 2
+45557 1 2
+45558 1 2
+45559 1 2
+45560 1 2
+45561 1 2
+45562 1 2
+45563 1 2
+45564 1 2
+45565 1 2
+45566 1 2
+45567 1 2
+45568 1 2
+45569 1 2
+45570 1 2
+45571 1 2
+45572 1 2
+45573 1 2
+45574 1 2
+45575 1 2
+45576 1 2
+45577 1 2
+45578 1 2
+45579 1 2
+45580 1 2
+45581 1 2
+45582 1 2
+45583 1 2
+45584 1 2
+45585 1 2
+45586 1 2
+45587 1 2
+45588 1 2
+45589 1 2
+45590 1 2
+45591 1 2
+45592 1 2
+45593 1 2
+45594 1 2
+45595 1 2
+45596 1 2
+45597 1 2
+45598 1 2
+45599 1 2
+45600 1 2
+45601 1 2
+45602 1 2
+45603 1 2
+45604 1 2
+45605 1 2
+45606 1 2
+45607 1 2
+45608 1 2
+45609 1 2
+45610 1 2
+45611 1 2
+45612 1 2
+45613 1 2
+45614 1 2
+45615 1 2
+45616 1 2
+45617 1 2
+45618 1 2
+45619 1 2
+45620 1 2
+45621 1 2
+45622 1 2
+45623 1 2
+45624 1 2
+45625 1 2
+45626 1 2
+45627 1 2
+45628 1 2
+45629 1 2
+45630 1 2
+45631 1 2
+45632 1 2
+45633 1 2
+45634 1 2
+45635 1 2
+45636 1 2
+45637 1 2
+45638 1 2
+45639 1 2
+45640 1 2
+45641 1 2
+45642 1 2
+45643 1 2
+45644 1 2
+45645 1 2
+45646 1 2
+45647 1 2
+45648 1 2
+45649 1 2
+45650 1 2
+45651 1 2
+45652 1 2
+45653 1 2
+45654 1 2
+45655 1 2
+45656 1 2
+45657 1 2
+45658 1 2
+45659 1 2
+45660 1 2
+45661 1 2
+45662 1 2
+45663 1 2
+45664 1 2
+45665 1 2
+45666 1 2
+45667 1 2
+45668 1 2
+45669 1 2
+45670 1 2
+45671 1 2
+45672 1 2
+45673 1 2
+45674 1 2
+45675 1 2
+45676 1 2
+45677 1 2
+45678 1 2
+45679 1 2
+45680 1 2
+45681 1 2
+45682 1 2
+45683 1 2
+45684 1 2
+45685 1 2
+45686 1 2
+45687 1 2
+45688 1 2
+45689 1 2
+45690 1 2
+45691 1 2
+45692 1 2
+45693 1 2
+45694 1 2
+45695 1 2
+45696 1 2
+45697 1 2
+45698 1 2
+45699 1 2
+45700 1 2
+45701 1 2
+45702 1 2
+45703 1 2
+45704 1 2
+45705 1 2
+45706 1 2
+45707 1 2
+45708 1 2
+45709 1 2
+45710 1 2
+45711 1 2
+45712 1 2
+45713 1 2
+45714 1 2
+45715 1 2
+45716 1 2
+45717 1 2
+45718 1 2
+45719 1 2
+45720 1 2
+45721 1 2
+45722 1 2
+45723 1 2
+45724 1 2
+45725 1 2
+45726 1 2
+45727 1 2
+45728 1 2
+45729 1 2
+45730 1 2
+45731 1 2
+45732 1 2
+45733 1 2
+45734 1 2
+45735 1 2
+45736 1 2
+45737 1 2
+45738 1 2
+45739 1 2
+45740 1 2
+45741 1 2
+45742 1 2
+45743 1 2
+45744 1 2
+45745 1 2
+45746 1 2
+45747 1 2
+45748 1 2
+45749 1 2
+45750 1 2
+45751 1 2
+45752 1 2
+45753 1 2
+45754 1 2
+45755 1 2
+45756 1 2
+45757 1 2
+45758 1 2
+45759 1 2
+45760 1 2
+45761 1 2
+45762 1 2
+45763 1 2
+45764 1 2
+45765 1 2
+45766 1 2
+45767 1 2
+45768 1 2
+45769 1 2
+45770 1 2
+45771 1 2
+45772 1 2
+45773 1 2
+45774 1 2
+45775 1 2
+45776 1 2
+45777 1 2
+45778 1 2
+45779 1 2
+45780 1 2
+45781 1 2
+45782 1 2
+45783 1 2
+45784 1 2
+45785 1 2
+45786 1 2
+45787 1 2
+45788 1 2
+45789 1 2
+45790 1 2
+45791 1 2
+45792 1 2
+45793 1 2
+45794 1 2
+45795 1 2
+45796 1 2
+45797 1 2
+45798 1 2
+45799 1 2
+45800 1 2
+45801 1 2
+45802 1 2
+45803 1 2
+45804 1 2
+45805 1 2
+45806 1 2
+45807 1 2
+45808 1 2
+45809 1 2
+45810 1 2
+45811 1 2
+45812 1 2
+45813 1 2
+45814 1 2
+45815 1 2
+45816 1 2
+45817 1 2
+45818 1 2
+45819 1 2
+45820 1 2
+45821 1 2
+45822 1 2
+45823 1 2
+45824 1 2
+45825 1 2
+45826 1 2
+45827 1 2
+45828 1 2
+45829 1 2
+45830 1 2
+45831 1 2
+45832 1 2
+45833 1 2
+45834 1 2
+45835 1 2
+45836 1 2
+45837 1 2
+45838 1 2
+45839 1 2
+45840 1 2
+45841 1 2
+45842 1 2
+45843 1 2
+45844 1 2
+45845 1 2
+45846 1 2
+45847 1 2
+45848 1 2
+45849 1 2
+45850 1 2
+45851 1 2
+45852 1 2
+45853 1 2
+45854 1 2
+45855 1 2
+45856 1 2
+45857 1 2
+45858 1 2
+45859 1 2
+45860 1 2
+45861 1 2
+45862 1 2
+45863 1 2
+45864 1 2
+45865 1 2
+45866 1 2
+45867 1 2
+45868 1 2
+45869 1 2
+45870 1 2
+45871 1 2
+45872 1 2
+45873 1 2
+45874 1 2
+45875 1 2
+45876 1 2
+45877 1 2
+45878 1 2
+45879 1 2
+45880 1 2
+45881 1 2
+45882 1 2
+45883 1 2
+45884 1 2
+45885 1 2
+45886 1 2
+45887 1 2
+45888 1 2
+45889 1 2
+45890 1 2
+45891 1 2
+45892 1 2
+45893 1 2
+45894 1 2
+45895 1 2
+45896 1 2
+45897 1 2
+45898 1 2
+45899 1 2
+45900 1 2
+45901 1 2
+45902 1 2
+45903 1 2
+45904 1 2
+45905 1 2
+45906 1 2
+45907 1 2
+45908 1 2
+45909 1 2
+45910 1 2
+45911 1 2
+45912 1 2
+45913 1 2
+45914 1 2
+45915 1 2
+45916 1 2
+45917 1 2
+45918 1 2
+45919 1 2
+45920 1 2
+45921 1 2
+45922 1 2
+45923 1 2
+45924 1 2
+45925 1 2
+45926 1 2
+45927 1 2
+45928 1 2
+45929 1 2
+45930 1 2
+45931 1 2
+45932 1 2
+45933 1 2
+45934 1 2
+45935 1 2
+45936 1 2
+45937 1 2
+45938 1 2
+45939 1 2
+45940 1 2
+45941 1 2
+45942 1 2
+45943 1 2
+45944 1 2
+45945 1 2
+45946 1 2
+45947 1 2
+45948 1 2
+45949 1 2
+45950 1 2
+45951 1 2
+45952 1 2
+45953 1 2
+45954 1 2
+45955 1 2
+45956 1 2
+45957 1 2
+45958 1 2
+45959 1 2
+45960 1 2
+45961 1 2
+45962 1 2
+45963 1 2
+45964 1 2
+45965 1 2
+45966 1 2
+45967 1 2
+45968 1 2
+45969 1 2
+45970 1 2
+45971 1 2
+45972 1 2
+45973 1 2
+45974 1 2
+45975 1 2
+45976 1 2
+45977 1 2
+45978 1 2
+45979 1 2
+45980 1 2
+45981 1 2
+45982 1 2
+45983 1 2
+45984 1 2
+45985 1 2
+45986 1 2
+45987 1 2
+45988 1 2
+45989 1 2
+45990 1 2
+45991 1 2
+45992 1 2
+45993 1 2
+45994 1 2
+45995 1 2
+45996 1 2
+45997 1 2
+45998 1 2
+45999 1 2
+46000 1 2
+46001 1 2
+46002 1 2
+46003 1 2
+46004 1 2
+46005 1 2
+46006 1 2
+46007 1 2
+46008 1 2
+46009 1 2
+46010 1 2
+46011 1 2
+46012 1 2
+46013 1 2
+46014 1 2
+46015 1 2
+46016 1 2
+46017 1 2
+46018 1 2
+46019 1 2
+46020 1 2
+46021 1 2
+46022 1 2
+46023 1 2
+46024 1 2
+46025 1 2
+46026 1 2
+46027 1 2
+46028 1 2
+46029 1 2
+46030 1 2
+46031 1 2
+46032 1 2
+46033 1 2
+46034 1 2
+46035 1 2
+46036 1 2
+46037 1 2
+46038 1 2
+46039 1 2
+46040 1 2
+46041 1 2
+46042 1 2
+46043 1 2
+46044 1 2
+46045 1 2
+46046 1 2
+46047 1 2
+46048 1 2
+46049 1 2
+46050 1 2
+46051 1 2
+46052 1 2
+46053 1 2
+46054 1 2
+46055 1 2
+46056 1 2
+46057 1 2
+46058 1 2
+46059 1 2
+46060 1 2
+46061 1 2
+46062 1 2
+46063 1 2
+46064 1 2
+46065 1 2
+46066 1 2
+46067 1 2
+46068 1 2
+46069 1 2
+46070 1 2
+46071 1 2
+46072 1 2
+46073 1 2
+46074 1 2
+46075 1 2
+46076 1 2
+46077 1 2
+46078 1 2
+46079 1 2
+46080 1 2
+46081 1 2
+46082 1 2
+46083 1 2
+46084 1 2
+46085 1 2
+46086 1 2
+46087 1 2
+46088 1 2
+46089 1 2
+46090 1 2
+46091 1 2
+46092 1 2
+46093 1 2
+46094 1 2
+46095 1 2
+46096 1 2
+46097 1 2
+46098 1 2
+46099 1 2
+46100 1 2
+46101 1 2
+46102 1 2
+46103 1 2
+46104 1 2
+46105 1 2
+46106 1 2
+46107 1 2
+46108 1 2
+46109 1 2
+46110 1 2
+46111 1 2
+46112 1 2
+46113 1 2
+46114 1 2
+46115 1 2
+46116 1 2
+46117 1 2
+46118 1 2
+46119 1 2
+46120 1 2
+46121 1 2
+46122 1 2
+46123 1 2
+46124 1 2
+46125 1 2
+46126 1 2
+46127 1 2
+46128 1 2
+46129 1 2
+46130 1 2
+46131 1 2
+46132 1 2
+46133 1 2
+46134 1 2
+46135 1 2
+46136 1 2
+46137 1 2
+46138 1 2
+46139 1 2
+46140 1 2
+46141 1 2
+46142 1 2
+46143 1 2
+46144 1 2
+46145 1 2
+46146 1 2
+46147 1 2
+46148 1 2
+46149 1 2
+46150 1 2
+46151 1 2
+46152 1 2
+46153 1 2
+46154 1 2
+46155 1 2
+46156 1 2
+46157 1 2
+46158 1 2
+46159 1 2
+46160 1 2
+46161 1 2
+46162 1 2
+46163 1 2
+46164 1 2
+46165 1 2
+46166 1 2
+46167 1 2
+46168 1 2
+46169 1 2
+46170 1 2
+46171 1 2
+46172 1 2
+46173 1 2
+46174 1 2
+46175 1 2
+46176 1 2
+46177 1 2
+46178 1 2
+46179 1 2
+46180 1 2
+46181 1 2
+46182 1 2
+46183 1 2
+46184 1 2
+46185 1 2
+46186 1 2
+46187 1 2
+46188 1 2
+46189 1 2
+46190 1 2
+46191 1 2
+46192 1 2
+46193 1 2
+46194 1 2
+46195 1 2
+46196 1 2
+46197 1 2
+46198 1 2
+46199 1 2
+46200 1 2
+46201 1 2
+46202 1 2
+46203 1 2
+46204 1 2
+46205 1 2
+46206 1 2
+46207 1 2
+46208 1 2
+46209 1 2
+46210 1 2
+46211 1 2
+46212 1 2
+46213 1 2
+46214 1 2
+46215 1 2
+46216 1 2
+46217 1 2
+46218 1 2
+46219 1 2
+46220 1 2
+46221 1 2
+46222 1 2
+46223 1 2
+46224 1 2
+46225 1 2
+46226 1 2
+46227 1 2
+46228 1 2
+46229 1 2
+46230 1 2
+46231 1 2
+46232 1 2
+46233 1 2
+46234 1 2
+46235 1 2
+46236 1 2
+46237 1 2
+46238 1 2
+46239 1 2
+46240 1 2
+46241 1 2
+46242 1 2
+46243 1 2
+46244 1 2
+46245 1 2
+46246 1 2
+46247 1 2
+46248 1 2
+46249 1 2
+46250 1 2
+46251 1 2
+46252 1 2
+46253 1 2
+46254 1 2
+46255 1 2
+46256 1 2
+46257 1 2
+46258 1 2
+46259 1 2
+46260 1 2
+46261 1 2
+46262 1 2
+46263 1 2
+46264 1 2
+46265 1 2
+46266 1 2
+46267 1 2
+46268 1 2
+46269 1 2
+46270 1 2
+46271 1 2
+46272 1 2
+46273 1 2
+46274 1 2
+46275 1 2
+46276 1 2
+46277 1 2
+46278 1 2
+46279 1 2
+46280 1 2
+46281 1 2
+46282 1 2
+46283 1 2
+46284 1 2
+46285 1 2
+46286 1 2
+46287 1 2
+46288 1 2
+46289 1 2
+46290 1 2
+46291 1 2
+46292 1 2
+46293 1 2
+46294 1 2
+46295 1 2
+46296 1 2
+46297 1 2
+46298 1 2
+46299 1 2
+46300 1 2
+46301 1 2
+46302 1 2
+46303 1 2
+46304 1 2
+46305 1 2
+46306 1 2
+46307 1 2
+46308 1 2
+46309 1 2
+46310 1 2
+46311 1 2
+46312 1 2
+46313 1 2
+46314 1 2
+46315 1 2
+46316 1 2
+46317 1 2
+46318 1 2
+46319 1 2
+46320 1 2
+46321 1 2
+46322 1 2
+46323 1 2
+46324 1 2
+46325 1 2
+46326 1 2
+46327 1 2
+46328 1 2
+46329 1 2
+46330 1 2
+46331 1 2
+46332 1 2
+46333 1 2
+46334 1 2
+46335 1 2
+46336 1 2
+46337 1 2
+46338 1 2
+46339 1 2
+46340 1 2
+46341 1 2
+46342 1 2
+46343 1 2
+46344 1 2
+46345 1 2
+46346 1 2
+46347 1 2
+46348 1 2
+46349 1 2
+46350 1 2
+46351 1 2
+46352 1 2
+46353 1 2
+46354 1 2
+46355 1 2
+46356 1 2
+46357 1 2
+46358 1 2
+46359 1 2
+46360 1 2
+46361 1 2
+46362 1 2
+46363 1 2
+46364 1 2
+46365 1 2
+46366 1 2
+46367 1 2
+46368 1 2
+46369 1 2
+46370 1 2
+46371 1 2
+46372 1 2
+46373 1 2
+46374 1 2
+46375 1 2
+46376 1 2
+46377 1 2
+46378 1 2
+46379 1 2
+46380 1 2
+46381 1 2
+46382 1 2
+46383 1 2
+46384 1 2
+46385 1 2
+46386 1 2
+46387 1 2
+46388 1 2
+46389 1 2
+46390 1 2
+46391 1 2
+46392 1 2
+46393 1 2
+46394 1 2
+46395 1 2
+46396 1 2
+46397 1 2
+46398 1 2
+46399 1 2
+46400 1 2
+46401 1 2
+46402 1 2
+46403 1 2
+46404 1 2
+46405 1 2
+46406 1 2
+46407 1 2
+46408 1 2
+46409 1 2
+46410 1 2
+46411 1 2
+46412 1 2
+46413 1 2
+46414 1 2
+46415 1 2
+46416 1 2
+46417 1 2
+46418 1 2
+46419 1 2
+46420 1 2
+46421 1 2
+46422 1 2
+46423 1 2
+46424 1 2
+46425 1 2
+46426 1 2
+46427 1 2
+46428 1 2
+46429 1 2
+46430 1 2
+46431 1 2
+46432 1 2
+46433 1 2
+46434 1 2
+46435 1 2
+46436 1 2
+46437 1 2
+46438 1 2
+46439 1 2
+46440 1 2
+46441 1 2
+46442 1 2
+46443 1 2
+46444 1 2
+46445 1 2
+46446 1 2
+46447 1 2
+46448 1 2
+46449 1 2
+46450 1 2
+46451 1 2
+46452 1 2
+46453 1 2
+46454 1 2
+46455 1 2
+46456 1 2
+46457 1 2
+46458 1 2
+46459 1 2
+46460 1 2
+46461 1 2
+46462 1 2
+46463 1 2
+46464 1 2
+46465 1 2
+46466 1 2
+46467 1 2
+46468 1 2
+46469 1 2
+46470 1 2
+46471 1 2
+46472 1 2
+46473 1 2
+46474 1 2
+46475 1 2
+46476 1 2
+46477 1 2
+46478 1 2
+46479 1 2
+46480 1 2
+46481 1 2
+46482 1 2
+46483 1 2
+46484 1 2
+46485 1 2
+46486 1 2
+46487 1 2
+46488 1 2
+46489 1 2
+46490 1 2
+46491 1 2
+46492 1 2
+46493 1 2
+46494 1 2
+46495 1 2
+46496 1 2
+46497 1 2
+46498 1 2
+46499 1 2
+46500 1 2
+1 2 1
+2 2 1
+1 3 1
+3 3 1
+1 4 1
+4 4 1
+1 5 1
+5 5 1
+1 6 1
+6 6 1
+1 7 1
+7 7 1
+1 8 1
+8 8 1
+1 9 1
+9 9 1
+1 10 1
+10 10 1
+1 11 1
+11 11 1
+1 12 1
+12 12 1
+1 13 1
+13 13 1
+1 14 1
+14 14 1
+1 15 1
+15 15 1
+1 16 1
+16 16 1
+1 17 1
+17 17 1
+1 18 1
+18 18 1
+1 19 1
+19 19 1
+1 20 1
+20 20 1
+1 21 1
+21 21 1
+1 22 1
+22 22 1
+1 23 1
+23 23 1
+1 24 1
+24 24 1
+1 25 1
+25 25 1
+1 26 1
+26 26 1
+1 27 1
+27 27 1
+1 28 1
+28 28 1
+1 29 1
+29 29 1
+1 30 1
+30 30 1
+1 31 1
+31 31 1
+1 32 1
+32 32 1
+1 33 1
+33 33 1
+1 34 1
+34 34 1
+1 35 1
+35 35 1
+1 36 1
+36 36 1
+1 37 1
+37 37 1
+1 38 1
+38 38 1
+1 39 1
+39 39 1
+1 40 1
+40 40 1
+1 41 1
+41 41 1
+1 42 1
+42 42 1
+1 43 1
+43 43 1
+1 44 1
+44 44 1
+1 45 1
+45 45 1
+1 46 1
+46 46 1
+1 47 1
+47 47 1
+1 48 1
+48 48 1
+1 49 1
+49 49 1
+1 50 1
+50 50 1
+1 51 1
+51 51 1
+1 52 1
+52 52 1
+1 53 1
+53 53 1
+1 54 1
+54 54 1
+1 55 1
+55 55 1
+1 56 1
+56 56 1
+1 57 1
+57 57 1
+1 58 1
+58 58 1
+1 59 1
+59 59 1
+1 60 1
+60 60 1
+1 61 1
+61 61 1
+1 62 1
+62 62 1
+1 63 1
+63 63 1
+1 64 1
+64 64 1
+1 65 1
+65 65 1
+1 66 1
+66 66 1
+1 67 1
+67 67 1
+1 68 1
+68 68 1
+1 69 1
+69 69 1
+1 70 1
+70 70 1
+1 71 1
+71 71 1
+1 72 1
+72 72 1
+1 73 1
+73 73 1
+1 74 1
+74 74 1
+1 75 1
+75 75 1
+1 76 1
+76 76 1
+1 77 1
+77 77 1
+1 78 1
+78 78 1
+1 79 1
+79 79 1
+1 80 1
+80 80 1
+1 81 1
+81 81 1
+1 82 1
+82 82 1
+1 83 1
+83 83 1
+1 84 1
+84 84 1
+1 85 1
+85 85 1
+1 86 1
+86 86 1
+1 87 1
+87 87 1
+1 88 1
+88 88 1
+1 89 1
+89 89 1
+1 90 1
+90 90 1
+1 91 1
+91 91 1
+1 92 1
+92 92 1
+1 93 1
+93 93 1
+1 94 1
+94 94 1
+1 95 1
+95 95 1
+1 96 1
+96 96 1
+1 97 1
+97 97 1
+1 98 1
+98 98 1
+1 99 1
+99 99 1
+1 100 1
+100 100 1
+1 101 1
+101 101 1
+1 102 1
+102 102 1
+1 103 1
+103 103 1
+1 104 1
+104 104 1
+1 105 1
+105 105 1
+1 106 1
+106 106 1
+1 107 1
+107 107 1
+1 108 1
+108 108 1
+1 109 1
+109 109 1
+1 110 1
+110 110 1
+1 111 1
+111 111 1
+1 112 1
+112 112 1
+1 113 1
+113 113 1
+1 114 1
+114 114 1
+1 115 1
+115 115 1
+1 116 1
+116 116 1
+1 117 1
+117 117 1
+1 118 1
+118 118 1
+1 119 1
+119 119 1
+1 120 1
+120 120 1
+1 121 1
+121 121 1
+1 122 1
+122 122 1
+1 123 1
+123 123 1
+1 124 1
+124 124 1
+1 125 1
+125 125 1
+1 126 1
+126 126 1
+1 127 1
+127 127 1
+1 128 1
+128 128 1
+1 129 1
+129 129 1
+1 130 1
+130 130 1
+1 131 1
+131 131 1
+1 132 1
+132 132 1
+1 133 1
+133 133 1
+1 134 1
+134 134 1
+1 135 1
+135 135 1
+1 136 1
+136 136 1
+1 137 1
+137 137 1
+1 138 1
+138 138 1
+1 139 1
+139 139 1
+1 140 1
+140 140 1
+1 141 1
+141 141 1
+1 142 1
+142 142 1
+1 143 1
+143 143 1
+1 144 1
+144 144 1
+1 145 1
+145 145 1
+1 146 1
+146 146 1
+1 147 1
+147 147 1
+1 148 1
+148 148 1
+1 149 1
+149 149 1
+1 150 1
+150 150 1
+1 151 1
+151 151 1
+1 152 1
+152 152 1
+1 153 1
+153 153 1
+1 154 1
+154 154 1
+1 155 1
+155 155 1
+1 156 1
+156 156 1
+1 157 1
+157 157 1
+1 158 1
+158 158 1
+1 159 1
+159 159 1
+1 160 1
+160 160 1
+1 161 1
+161 161 1
+1 162 1
+162 162 1
+1 163 1
+163 163 1
+1 164 1
+164 164 1
+1 165 1
+165 165 1
+1 166 1
+166 166 1
+1 167 1
+167 167 1
+1 168 1
+168 168 1
+1 169 1
+169 169 1
+1 170 1
+170 170 1
+1 171 1
+171 171 1
+1 172 1
+172 172 1
+1 173 1
+173 173 1
+1 174 1
+174 174 1
+1 175 1
+175 175 1
+1 176 1
+176 176 1
+1 177 1
+177 177 1
+1 178 1
+178 178 1
+1 179 1
+179 179 1
+1 180 1
+180 180 1
+1 181 1
+181 181 1
+1 182 1
+182 182 1
+1 183 1
+183 183 1
+1 184 1
+184 184 1
+1 185 1
+185 185 1
+1 186 1
+186 186 1
+1 187 1
+187 187 1
+1 188 1
+188 188 1
+1 189 1
+189 189 1
+1 190 1
+190 190 1
+1 191 1
+191 191 1
+1 192 1
+192 192 1
+1 193 1
+193 193 1
+1 194 1
+194 194 1
+1 195 1
+195 195 1
+1 196 1
+196 196 1
+1 197 1
+197 197 1
+1 198 1
+198 198 1
+1 199 1
+199 199 1
+1 200 1
+200 200 1
+1 201 1
+201 201 1
+1 202 1
+202 202 1
+1 203 1
+203 203 1
+1 204 1
+204 204 1
+1 205 1
+205 205 1
+1 206 1
+206 206 1
+1 207 1
+207 207 1
+1 208 1
+208 208 1
+1 209 1
+209 209 1
+1 210 1
+210 210 1
+1 211 1
+211 211 1
+1 212 1
+212 212 1
+1 213 1
+213 213 1
+1 214 1
+214 214 1
+1 215 1
+215 215 1
+1 216 1
+216 216 1
+1 217 1
+217 217 1
+1 218 1
+218 218 1
+1 219 1
+219 219 1
+1 220 1
+220 220 1
+1 221 1
+221 221 1
+1 222 1
+222 222 1
+1 223 1
+223 223 1
+1 224 1
+224 224 1
+1 225 1
+225 225 1
+1 226 1
+226 226 1
+1 227 1
+227 227 1
+1 228 1
+228 228 1
+1 229 1
+229 229 1
+1 230 1
+230 230 1
+1 231 1
+231 231 1
+1 232 1
+232 232 1
+1 233 1
+233 233 1
+1 234 1
+234 234 1
+1 235 1
+235 235 1
+1 236 1
+236 236 1
+1 237 1
+237 237 1
+1 238 1
+238 238 1
+1 239 1
+239 239 1
+1 240 1
+240 240 1
+1 241 1
+241 241 1
+1 242 1
+242 242 1
+1 243 1
+243 243 1
+1 244 1
+244 244 1
+1 245 1
+245 245 1
+1 246 1
+246 246 1
+1 247 1
+247 247 1
+1 248 1
+248 248 1
+1 249 1
+249 249 1
+1 250 1
+250 250 1
+1 251 1
+251 251 1
+1 252 1
+252 252 1
+1 253 1
+253 253 1
+1 254 1
+254 254 1
+1 255 1
+255 255 1
+1 256 1
+256 256 1
+1 257 1
+257 257 1
+1 258 1
+258 258 1
+1 259 1
+259 259 1
+1 260 1
+260 260 1
+1 261 1
+261 261 1
+1 262 1
+262 262 1
+1 263 1
+263 263 1
+1 264 1
+264 264 1
+1 265 1
+265 265 1
+1 266 1
+266 266 1
+1 267 1
+267 267 1
+1 268 1
+268 268 1
+1 269 1
+269 269 1
+1 270 1
+270 270 1
+1 271 1
+271 271 1
+1 272 1
+272 272 1
+1 273 1
+273 273 1
+1 274 1
+274 274 1
+1 275 1
+275 275 1
+1 276 1
+276 276 1
+1 277 1
+277 277 1
+1 278 1
+278 278 1
+1 279 1
+279 279 1
+1 280 1
+280 280 1
+1 281 1
+281 281 1
+1 282 1
+282 282 1
+1 283 1
+283 283 1
+1 284 1
+284 284 1
+1 285 1
+285 285 1
+1 286 1
+286 286 1
+1 287 1
+287 287 1
+1 288 1
+288 288 1
+1 289 1
+289 289 1
+1 290 1
+290 290 1
+1 291 1
+291 291 1
+1 292 1
+292 292 1
+1 293 1
+293 293 1
+1 294 1
+294 294 1
+1 295 1
+295 295 1
+1 296 1
+296 296 1
+1 297 1
+297 297 1
+1 298 1
+298 298 1
+1 299 1
+299 299 1
+1 300 1
+300 300 1
+1 301 1
+301 301 1
+1 302 1
+302 302 1
+1 303 1
+303 303 1
+1 304 1
+304 304 1
+1 305 1
+305 305 1
+1 306 1
+306 306 1
+1 307 1
+307 307 1
+1 308 1
+308 308 1
+1 309 1
+309 309 1
+1 310 1
+310 310 1
+1 311 1
+311 311 1
+1 312 1
+312 312 1
+1 313 1
+313 313 1
+1 314 1
+314 314 1
+1 315 1
+315 315 1
+1 316 1
+316 316 1
+1 317 1
+317 317 1
+1 318 1
+318 318 1
+1 319 1
+319 319 1
+1 320 1
+320 320 1
+1 321 1
+321 321 1
+1 322 1
+322 322 1
+1 323 1
+323 323 1
+1 324 1
+324 324 1
+1 325 1
+325 325 1
+1 326 1
+326 326 1
+1 327 1
+327 327 1
+1 328 1
+328 328 1
+1 329 1
+329 329 1
+1 330 1
+330 330 1
+1 331 1
+331 331 1
+1 332 1
+332 332 1
+1 333 1
+333 333 1
+1 334 1
+334 334 1
+1 335 1
+335 335 1
+1 336 1
+336 336 1
+1 337 1
+337 337 1
+1 338 1
+338 338 1
+1 339 1
+339 339 1
+1 340 1
+340 340 1
+1 341 1
+341 341 1
+1 342 1
+342 342 1
+1 343 1
+343 343 1
+1 344 1
+344 344 1
+1 345 1
+345 345 1
+1 346 1
+346 346 1
+1 347 1
+347 347 1
+1 348 1
+348 348 1
+1 349 1
+349 349 1
+1 350 1
+350 350 1
+1 351 1
+351 351 1
+1 352 1
+352 352 1
+1 353 1
+353 353 1
+1 354 1
+354 354 1
+1 355 1
+355 355 1
+1 356 1
+356 356 1
+1 357 1
+357 357 1
+1 358 1
+358 358 1
+1 359 1
+359 359 1
+1 360 1
+360 360 1
+1 361 1
+361 361 1
+1 362 1
+362 362 1
+1 363 1
+363 363 1
+1 364 1
+364 364 1
+1 365 1
+365 365 1
+1 366 1
+366 366 1
+1 367 1
+367 367 1
+1 368 1
+368 368 1
+1 369 1
+369 369 1
+1 370 1
+370 370 1
+1 371 1
+371 371 1
+1 372 1
+372 372 1
+1 373 1
+373 373 1
+1 374 1
+374 374 1
+1 375 1
+375 375 1
+1 376 1
+376 376 1
+1 377 1
+377 377 1
+1 378 1
+378 378 1
+1 379 1
+379 379 1
+1 380 1
+380 380 1
+1 381 1
+381 381 1
+1 382 1
+382 382 1
+1 383 1
+383 383 1
+1 384 1
+384 384 1
+1 385 1
+385 385 1
+1 386 1
+386 386 1
+1 387 1
+387 387 1
+1 388 1
+388 388 1
+1 389 1
+389 389 1
+1 390 1
+390 390 1
+1 391 1
+391 391 1
+1 392 1
+392 392 1
+1 393 1
+393 393 1
+1 394 1
+394 394 1
+1 395 1
+395 395 1
+1 396 1
+396 396 1
+1 397 1
+397 397 1
+1 398 1
+398 398 1
+1 399 1
+399 399 1
+1 400 1
+400 400 1
+1 401 1
+401 401 1
+1 402 1
+402 402 1
+1 403 1
+403 403 1
+1 404 1
+404 404 1
+1 405 1
+405 405 1
+1 406 1
+406 406 1
+1 407 1
+407 407 1
+1 408 1
+408 408 1
+1 409 1
+409 409 1
+1 410 1
+410 410 1
+1 411 1
+411 411 1
+1 412 1
+412 412 1
+1 413 1
+413 413 1
+1 414 1
+414 414 1
+1 415 1
+415 415 1
+1 416 1
+416 416 1
+1 417 1
+417 417 1
+1 418 1
+418 418 1
+1 419 1
+419 419 1
+1 420 1
+420 420 1
+1 421 1
+421 421 1
+1 422 1
+422 422 1
+1 423 1
+423 423 1
+1 424 1
+424 424 1
+1 425 1
+425 425 1
+1 426 1
+426 426 1
+1 427 1
+427 427 1
+1 428 1
+428 428 1
+1 429 1
+429 429 1
+1 430 1
+430 430 1
+1 431 1
+431 431 1
+1 432 1
+432 432 1
+1 433 1
+433 433 1
+1 434 1
+434 434 1
+1 435 1
+435 435 1
+1 436 1
+436 436 1
+1 437 1
+437 437 1
+1 438 1
+438 438 1
+1 439 1
+439 439 1
+1 440 1
+440 440 1
+1 441 1
+441 441 1
+1 442 1
+442 442 1
+1 443 1
+443 443 1
+1 444 1
+444 444 1
+1 445 1
+445 445 1
+1 446 1
+446 446 1
+1 447 1
+447 447 1
+1 448 1
+448 448 1
+1 449 1
+449 449 1
+1 450 1
+450 450 1
+1 451 1
+451 451 1
+1 452 1
+452 452 1
+1 453 1
+453 453 1
+1 454 1
+454 454 1
+1 455 1
+455 455 1
+1 456 1
+456 456 1
+1 457 1
+457 457 1
+1 458 1
+458 458 1
+1 459 1
+459 459 1
+1 460 1
+460 460 1
+1 461 1
+461 461 1
+1 462 1
+462 462 1
+1 463 1
+463 463 1
+1 464 1
+464 464 1
+1 465 1
+465 465 1
+1 466 1
+466 466 1
+1 467 1
+467 467 1
+1 468 1
+468 468 1
+1 469 1
+469 469 1
+1 470 1
+470 470 1
+1 471 1
+471 471 1
+1 472 1
+472 472 1
+1 473 1
+473 473 1
+1 474 1
+474 474 1
+1 475 1
+475 475 1
+1 476 1
+476 476 1
+1 477 1
+477 477 1
+1 478 1
+478 478 1
+1 479 1
+479 479 1
+1 480 1
+480 480 1
+1 481 1
+481 481 1
+1 482 1
+482 482 1
+1 483 1
+483 483 1
+1 484 1
+484 484 1
+1 485 1
+485 485 1
+1 486 1
+486 486 1
+1 487 1
+487 487 1
+1 488 1
+488 488 1
+1 489 1
+489 489 1
+1 490 1
+490 490 1
+1 491 1
+491 491 1
+1 492 1
+492 492 1
+1 493 1
+493 493 1
+1 494 1
+494 494 1
+1 495 1
+495 495 1
+1 496 1
+496 496 1
+1 497 1
+497 497 1
+1 498 1
+498 498 1
+1 499 1
+499 499 1
+1 500 1
+500 500 1
+1 501 1
+501 501 1
+1 502 1
+502 502 1
+1 503 1
+503 503 1
+1 504 1
+504 504 1
+1 505 1
+505 505 1
+1 506 1
+506 506 1
+1 507 1
+507 507 1
+1 508 1
+508 508 1
+1 509 1
+509 509 1
+1 510 1
+510 510 1
+1 511 1
+511 511 1
+1 512 1
+512 512 1
+1 513 1
+513 513 1
+1 514 1
+514 514 1
+1 515 1
+515 515 1
+1 516 1
+516 516 1
+1 517 1
+517 517 1
+1 518 1
+518 518 1
+1 519 1
+519 519 1
+1 520 1
+520 520 1
+1 521 1
+521 521 1
+1 522 1
+522 522 1
+1 523 1
+523 523 1
+1 524 1
+524 524 1
+1 525 1
+525 525 1
+1 526 1
+526 526 1
+1 527 1
+527 527 1
+1 528 1
+528 528 1
+1 529 1
+529 529 1
+1 530 1
+530 530 1
+1 531 1
+531 531 1
+1 532 1
+532 532 1
+1 533 1
+533 533 1
+1 534 1
+534 534 1
+1 535 1
+535 535 1
+1 536 1
+536 536 1
+1 537 1
+537 537 1
+1 538 1
+538 538 1
+1 539 1
+539 539 1
+1 540 1
+540 540 1
+1 541 1
+541 541 1
+1 542 1
+542 542 1
+1 543 1
+543 543 1
+1 544 1
+544 544 1
+1 545 1
+545 545 1
+1 546 1
+546 546 1
+1 547 1
+547 547 1
+1 548 1
+548 548 1
+1 549 1
+549 549 1
+1 550 1
+550 550 1
+1 551 1
+551 551 1
+1 552 1
+552 552 1
+1 553 1
+553 553 1
+1 554 1
+554 554 1
+1 555 1
+555 555 1
+1 556 1
+556 556 1
+1 557 1
+557 557 1
+1 558 1
+558 558 1
+1 559 1
+559 559 1
+1 560 1
+560 560 1
+1 561 1
+561 561 1
+1 562 1
+562 562 1
+1 563 1
+563 563 1
+1 564 1
+564 564 1
+1 565 1
+565 565 1
+1 566 1
+566 566 1
+1 567 1
+567 567 1
+1 568 1
+568 568 1
+1 569 1
+569 569 1
+1 570 1
+570 570 1
+1 571 1
+571 571 1
+1 572 1
+572 572 1
+1 573 1
+573 573 1
+1 574 1
+574 574 1
+1 575 1
+575 575 1
+1 576 1
+576 576 1
+1 577 1
+577 577 1
+1 578 1
+578 578 1
+1 579 1
+579 579 1
+1 580 1
+580 580 1
+1 581 1
+581 581 1
+1 582 1
+582 582 1
+1 583 1
+583 583 1
+1 584 1
+584 584 1
+1 585 1
+585 585 1
+1 586 1
+586 586 1
+1 587 1
+587 587 1
+1 588 1
+588 588 1
+1 589 1
+589 589 1
+1 590 1
+590 590 1
+1 591 1
+591 591 1
+1 592 1
+592 592 1
+1 593 1
+593 593 1
+1 594 1
+594 594 1
+1 595 1
+595 595 1
+1 596 1
+596 596 1
+1 597 1
+597 597 1
+1 598 1
+598 598 1
+1 599 1
+599 599 1
+1 600 1
+600 600 1
+1 601 1
+601 601 1
+1 602 1
+602 602 1
+1 603 1
+603 603 1
+1 604 1
+604 604 1
+1 605 1
+605 605 1
+1 606 1
+606 606 1
+1 607 1
+607 607 1
+1 608 1
+608 608 1
+1 609 1
+609 609 1
+1 610 1
+610 610 1
+1 611 1
+611 611 1
+1 612 1
+612 612 1
+1 613 1
+613 613 1
+1 614 1
+614 614 1
+1 615 1
+615 615 1
+1 616 1
+616 616 1
+1 617 1
+617 617 1
+1 618 1
+618 618 1
+1 619 1
+619 619 1
+1 620 1
+620 620 1
+1 621 1
+621 621 1
+1 622 1
+622 622 1
+1 623 1
+623 623 1
+1 624 1
+624 624 1
+1 625 1
+625 625 1
+1 626 1
+626 626 1
+1 627 1
+627 627 1
+1 628 1
+628 628 1
+1 629 1
+629 629 1
+1 630 1
+630 630 1
+1 631 1
+631 631 1
+1 632 1
+632 632 1
+1 633 1
+633 633 1
+1 634 1
+634 634 1
+1 635 1
+635 635 1
+1 636 1
+636 636 1
+1 637 1
+637 637 1
+1 638 1
+638 638 1
+1 639 1
+639 639 1
+1 640 1
+640 640 1
+1 641 1
+641 641 1
+1 642 1
+642 642 1
+1 643 1
+643 643 1
+1 644 1
+644 644 1
+1 645 1
+645 645 1
+1 646 1
+646 646 1
+1 647 1
+647 647 1
+1 648 1
+648 648 1
+1 649 1
+649 649 1
+1 650 1
+650 650 1
+1 651 1
+651 651 1
+1 652 1
+652 652 1
+1 653 1
+653 653 1
+1 654 1
+654 654 1
+1 655 1
+655 655 1
+1 656 1
+656 656 1
+1 657 1
+657 657 1
+1 658 1
+658 658 1
+1 659 1
+659 659 1
+1 660 1
+660 660 1
+1 661 1
+661 661 1
+1 662 1
+662 662 1
+1 663 1
+663 663 1
+1 664 1
+664 664 1
+1 665 1
+665 665 1
+1 666 1
+666 666 1
+1 667 1
+667 667 1
+1 668 1
+668 668 1
+1 669 1
+669 669 1
+1 670 1
+670 670 1
+1 671 1
+671 671 1
+1 672 1
+672 672 1
+1 673 1
+673 673 1
+1 674 1
+674 674 1
+1 675 1
+675 675 1
+1 676 1
+676 676 1
+1 677 1
+677 677 1
+1 678 1
+678 678 1
+1 679 1
+679 679 1
+1 680 1
+680 680 1
+1 681 1
+681 681 1
+1 682 1
+682 682 1
+1 683 1
+683 683 1
+1 684 1
+684 684 1
+1 685 1
+685 685 1
+1 686 1
+686 686 1
+1 687 1
+687 687 1
+1 688 1
+688 688 1
+1 689 1
+689 689 1
+1 690 1
+690 690 1
+1 691 1
+691 691 1
+1 692 1
+692 692 1
+1 693 1
+693 693 1
+1 694 1
+694 694 1
+1 695 1
+695 695 1
+1 696 1
+696 696 1
+1 697 1
+697 697 1
+1 698 1
+698 698 1
+1 699 1
+699 699 1
+1 700 1
+700 700 1
+1 701 1
+701 701 1
+1 702 1
+702 702 1
+1 703 1
+703 703 1
+1 704 1
+704 704 1
+1 705 1
+705 705 1
+1 706 1
+706 706 1
+1 707 1
+707 707 1
+1 708 1
+708 708 1
+1 709 1
+709 709 1
+1 710 1
+710 710 1
+1 711 1
+711 711 1
+1 712 1
+712 712 1
+1 713 1
+713 713 1
+1 714 1
+714 714 1
+1 715 1
+715 715 1
+1 716 1
+716 716 1
+1 717 1
+717 717 1
+1 718 1
+718 718 1
+1 719 1
+719 719 1
+1 720 1
+720 720 1
+1 721 1
+721 721 1
+1 722 1
+722 722 1
+1 723 1
+723 723 1
+1 724 1
+724 724 1
+1 725 1
+725 725 1
+1 726 1
+726 726 1
+1 727 1
+727 727 1
+1 728 1
+728 728 1
+1 729 1
+729 729 1
+1 730 1
+730 730 1
+1 731 1
+731 731 1
+1 732 1
+732 732 1
+1 733 1
+733 733 1
+1 734 1
+734 734 1
+1 735 1
+735 735 1
+1 736 1
+736 736 1
+1 737 1
+737 737 1
+1 738 1
+738 738 1
+1 739 1
+739 739 1
+1 740 1
+740 740 1
+1 741 1
+741 741 1
+1 742 1
+742 742 1
+1 743 1
+743 743 1
+1 744 1
+744 744 1
+1 745 1
+745 745 1
+1 746 1
+746 746 1
+1 747 1
+747 747 1
+1 748 1
+748 748 1
+1 749 1
+749 749 1
+1 750 1
+750 750 1
+1 751 1
+751 751 1
+1 752 1
+752 752 1
+1 753 1
+753 753 1
+1 754 1
+754 754 1
+1 755 1
+755 755 1
+1 756 1
+756 756 1
+1 757 1
+757 757 1
+1 758 1
+758 758 1
+1 759 1
+759 759 1
+1 760 1
+760 760 1
+1 761 1
+761 761 1
+1 762 1
+762 762 1
+1 763 1
+763 763 1
+1 764 1
+764 764 1
+1 765 1
+765 765 1
+1 766 1
+766 766 1
+1 767 1
+767 767 1
+1 768 1
+768 768 1
+1 769 1
+769 769 1
+1 770 1
+770 770 1
+1 771 1
+771 771 1
+1 772 1
+772 772 1
+1 773 1
+773 773 1
+1 774 1
+774 774 1
+1 775 1
+775 775 1
+1 776 1
+776 776 1
+1 777 1
+777 777 1
+1 778 1
+778 778 1
+1 779 1
+779 779 1
+1 780 1
+780 780 1
+1 781 1
+781 781 1
+1 782 1
+782 782 1
+1 783 1
+783 783 1
+1 784 1
+784 784 1
+1 785 1
+785 785 1
+1 786 1
+786 786 1
+1 787 1
+787 787 1
+1 788 1
+788 788 1
+1 789 1
+789 789 1
+1 790 1
+790 790 1
+1 791 1
+791 791 1
+1 792 1
+792 792 1
+1 793 1
+793 793 1
+1 794 1
+794 794 1
+1 795 1
+795 795 1
+1 796 1
+796 796 1
+1 797 1
+797 797 1
+1 798 1
+798 798 1
+1 799 1
+799 799 1
+1 800 1
+800 800 1
+1 801 1
+801 801 1
+1 802 1
+802 802 1
+1 803 1
+803 803 1
+1 804 1
+804 804 1
+1 805 1
+805 805 1
+1 806 1
+806 806 1
+1 807 1
+807 807 1
+1 808 1
+808 808 1
+1 809 1
+809 809 1
+1 810 1
+810 810 1
+1 811 1
+811 811 1
+1 812 1
+812 812 1
+1 813 1
+813 813 1
+1 814 1
+814 814 1
+1 815 1
+815 815 1
+1 816 1
+816 816 1
+1 817 1
+817 817 1
+1 818 1
+818 818 1
+1 819 1
+819 819 1
+1 820 1
+820 820 1
+1 821 1
+821 821 1
+1 822 1
+822 822 1
+1 823 1
+823 823 1
+1 824 1
+824 824 1
+1 825 1
+825 825 1
+1 826 1
+826 826 1
+1 827 1
+827 827 1
+1 828 1
+828 828 1
+1 829 1
+829 829 1
+1 830 1
+830 830 1
+1 831 1
+831 831 1
+1 832 1
+832 832 1
+1 833 1
+833 833 1
+1 834 1
+834 834 1
+1 835 1
+835 835 1
+1 836 1
+836 836 1
+1 837 1
+837 837 1
+1 838 1
+838 838 1
+1 839 1
+839 839 1
+1 840 1
+840 840 1
+1 841 1
+841 841 1
+1 842 1
+842 842 1
+1 843 1
+843 843 1
+1 844 1
+844 844 1
+1 845 1
+845 845 1
+1 846 1
+846 846 1
+1 847 1
+847 847 1
+1 848 1
+848 848 1
+1 849 1
+849 849 1
+1 850 1
+850 850 1
+1 851 1
+851 851 1
+1 852 1
+852 852 1
+1 853 1
+853 853 1
+1 854 1
+854 854 1
+1 855 1
+855 855 1
+1 856 1
+856 856 1
+1 857 1
+857 857 1
+1 858 1
+858 858 1
+1 859 1
+859 859 1
+1 860 1
+860 860 1
+1 861 1
+861 861 1
+1 862 1
+862 862 1
+1 863 1
+863 863 1
+1 864 1
+864 864 1
+1 865 1
+865 865 1
+1 866 1
+866 866 1
+1 867 1
+867 867 1
+1 868 1
+868 868 1
+1 869 1
+869 869 1
+1 870 1
+870 870 1
+1 871 1
+871 871 1
+1 872 1
+872 872 1
+1 873 1
+873 873 1
+1 874 1
+874 874 1
+1 875 1
+875 875 1
+1 876 1
+876 876 1
+1 877 1
+877 877 1
+1 878 1
+878 878 1
+1 879 1
+879 879 1
+1 880 1
+880 880 1
+1 881 1
+881 881 1
+1 882 1
+882 882 1
+1 883 1
+883 883 1
+1 884 1
+884 884 1
+1 885 1
+885 885 1
+1 886 1
+886 886 1
+1 887 1
+887 887 1
+1 888 1
+888 888 1
+1 889 1
+889 889 1
+1 890 1
+890 890 1
+1 891 1
+891 891 1
+1 892 1
+892 892 1
+1 893 1
+893 893 1
+1 894 1
+894 894 1
+1 895 1
+895 895 1
+1 896 1
+896 896 1
+1 897 1
+897 897 1
+1 898 1
+898 898 1
+1 899 1
+899 899 1
+1 900 1
+900 900 1
+1 901 1
+901 901 1
+1 902 1
+902 902 1
+1 903 1
+903 903 1
+1 904 1
+904 904 1
+1 905 1
+905 905 1
+1 906 1
+906 906 1
+1 907 1
+907 907 1
+1 908 1
+908 908 1
+1 909 1
+909 909 1
+1 910 1
+910 910 1
+1 911 1
+911 911 1
+1 912 1
+912 912 1
+1 913 1
+913 913 1
+1 914 1
+914 914 1
+1 915 1
+915 915 1
+1 916 1
+916 916 1
+1 917 1
+917 917 1
+1 918 1
+918 918 1
+1 919 1
+919 919 1
+1 920 1
+920 920 1
+1 921 1
+921 921 1
+1 922 1
+922 922 1
+1 923 1
+923 923 1
+1 924 1
+924 924 1
+1 925 1
+925 925 1
+1 926 1
+926 926 1
+1 927 1
+927 927 1
+1 928 1
+928 928 1
+1 929 1
+929 929 1
+1 930 1
+930 930 1
+1 931 1
+931 931 1
+1 932 1
+932 932 1
+1 933 1
+933 933 1
+1 934 1
+934 934 1
+1 935 1
+935 935 1
+1 936 1
+936 936 1
+1 937 1
+937 937 1
+1 938 1
+938 938 1
+1 939 1
+939 939 1
+1 940 1
+940 940 1
+1 941 1
+941 941 1
+1 942 1
+942 942 1
+1 943 1
+943 943 1
+1 944 1
+944 944 1
+1 945 1
+945 945 1
+1 946 1
+946 946 1
+1 947 1
+947 947 1
+1 948 1
+948 948 1
+1 949 1
+949 949 1
+1 950 1
+950 950 1
+1 951 1
+951 951 1
+1 952 1
+952 952 1
+1 953 1
+953 953 1
+1 954 1
+954 954 1
+1 955 1
+955 955 1
+1 956 1
+956 956 1
+1 957 1
+957 957 1
+1 958 1
+958 958 1
+1 959 1
+959 959 1
+1 960 1
+960 960 1
+1 961 1
+961 961 1
+1 962 1
+962 962 1
+1 963 1
+963 963 1
+1 964 1
+964 964 1
+1 965 1
+965 965 1
+1 966 1
+966 966 1
+1 967 1
+967 967 1
+1 968 1
+968 968 1
+1 969 1
+969 969 1
+1 970 1
+970 970 1
+1 971 1
+971 971 1
+1 972 1
+972 972 1
+1 973 1
+973 973 1
+1 974 1
+974 974 1
+1 975 1
+975 975 1
+1 976 1
+976 976 1
+1 977 1
+977 977 1
+1 978 1
+978 978 1
+1 979 1
+979 979 1
+1 980 1
+980 980 1
+1 981 1
+981 981 1
+1 982 1
+982 982 1
+1 983 1
+983 983 1
+1 984 1
+984 984 1
+1 985 1
+985 985 1
+1 986 1
+986 986 1
+1 987 1
+987 987 1
+1 988 1
+988 988 1
+1 989 1
+989 989 1
+1 990 1
+990 990 1
+1 991 1
+991 991 1
+1 992 1
+992 992 1
+1 993 1
+993 993 1
+1 994 1
+994 994 1
+1 995 1
+995 995 1
+1 996 1
+996 996 1
+1 997 1
+997 997 1
+1 998 1
+998 998 1
+1 999 1
+999 999 1
+1 1000 1
+1000 1000 1
+1 1001 1
+1001 1001 1
+1 1002 1
+1002 1002 1
+1 1003 1
+1003 1003 1
+1 1004 1
+1004 1004 1
+1 1005 1
+1005 1005 1
+1 1006 1
+1006 1006 1
+1 1007 1
+1007 1007 1
+1 1008 1
+1008 1008 1
+1 1009 1
+1009 1009 1
+1 1010 1
+1010 1010 1
+1 1011 1
+1011 1011 1
+1 1012 1
+1012 1012 1
+1 1013 1
+1013 1013 1
+1 1014 1
+1014 1014 1
+1 1015 1
+1015 1015 1
+1 1016 1
+1016 1016 1
+1 1017 1
+1017 1017 1
+1 1018 1
+1018 1018 1
+1 1019 1
+1019 1019 1
+1 1020 1
+1020 1020 1
+1 1021 1
+1021 1021 1
+1 1022 1
+1022 1022 1
+1 1023 1
+1023 1023 1
+1 1024 1
+1024 1024 1
+1 1025 1
+1025 1025 1
+1 1026 1
+1026 1026 1
+1 1027 1
+1027 1027 1
+1 1028 1
+1028 1028 1
+1 1029 1
+1029 1029 1
+1 1030 1
+1030 1030 1
+1 1031 1
+1031 1031 1
+1 1032 1
+1032 1032 1
+1 1033 1
+1033 1033 1
+1 1034 1
+1034 1034 1
+1 1035 1
+1035 1035 1
+1 1036 1
+1036 1036 1
+1 1037 1
+1037 1037 1
+1 1038 1
+1038 1038 1
+1 1039 1
+1039 1039 1
+1 1040 1
+1040 1040 1
+1 1041 1
+1041 1041 1
+1 1042 1
+1042 1042 1
+1 1043 1
+1043 1043 1
+1 1044 1
+1044 1044 1
+1 1045 1
+1045 1045 1
+1 1046 1
+1046 1046 1
+1 1047 1
+1047 1047 1
+1 1048 1
+1048 1048 1
+1 1049 1
+1049 1049 1
+1 1050 1
+1050 1050 1
+1 1051 1
+1051 1051 1
+1 1052 1
+1052 1052 1
+1 1053 1
+1053 1053 1
+1 1054 1
+1054 1054 1
+1 1055 1
+1055 1055 1
+1 1056 1
+1056 1056 1
+1 1057 1
+1057 1057 1
+1 1058 1
+1058 1058 1
+1 1059 1
+1059 1059 1
+1 1060 1
+1060 1060 1
+1 1061 1
+1061 1061 1
+1 1062 1
+1062 1062 1
+1 1063 1
+1063 1063 1
+1 1064 1
+1064 1064 1
+1 1065 1
+1065 1065 1
+1 1066 1
+1066 1066 1
+1 1067 1
+1067 1067 1
+1 1068 1
+1068 1068 1
+1 1069 1
+1069 1069 1
+1 1070 1
+1070 1070 1
+1 1071 1
+1071 1071 1
+1 1072 1
+1072 1072 1
+1 1073 1
+1073 1073 1
+1 1074 1
+1074 1074 1
+1 1075 1
+1075 1075 1
+1 1076 1
+1076 1076 1
+1 1077 1
+1077 1077 1
+1 1078 1
+1078 1078 1
+1 1079 1
+1079 1079 1
+1 1080 1
+1080 1080 1
+1 1081 1
+1081 1081 1
+1 1082 1
+1082 1082 1
+1 1083 1
+1083 1083 1
+1 1084 1
+1084 1084 1
+1 1085 1
+1085 1085 1
+1 1086 1
+1086 1086 1
+1 1087 1
+1087 1087 1
+1 1088 1
+1088 1088 1
+1 1089 1
+1089 1089 1
+1 1090 1
+1090 1090 1
+1 1091 1
+1091 1091 1
+1 1092 1
+1092 1092 1
+1 1093 1
+1093 1093 1
+1 1094 1
+1094 1094 1
+1 1095 1
+1095 1095 1
+1 1096 1
+1096 1096 1
+1 1097 1
+1097 1097 1
+1 1098 1
+1098 1098 1
+1 1099 1
+1099 1099 1
+1 1100 1
+1100 1100 1
+1 1101 1
+1101 1101 1
+1 1102 1
+1102 1102 1
+1 1103 1
+1103 1103 1
+1 1104 1
+1104 1104 1
+1 1105 1
+1105 1105 1
+1 1106 1
+1106 1106 1
+1 1107 1
+1107 1107 1
+1 1108 1
+1108 1108 1
+1 1109 1
+1109 1109 1
+1 1110 1
+1110 1110 1
+1 1111 1
+1111 1111 1
+1 1112 1
+1112 1112 1
+1 1113 1
+1113 1113 1
+1 1114 1
+1114 1114 1
+1 1115 1
+1115 1115 1
+1 1116 1
+1116 1116 1
+1 1117 1
+1117 1117 1
+1 1118 1
+1118 1118 1
+1 1119 1
+1119 1119 1
+1 1120 1
+1120 1120 1
+1 1121 1
+1121 1121 1
+1 1122 1
+1122 1122 1
+1 1123 1
+1123 1123 1
+1 1124 1
+1124 1124 1
+1 1125 1
+1125 1125 1
+1 1126 1
+1126 1126 1
+1 1127 1
+1127 1127 1
+1 1128 1
+1128 1128 1
+1 1129 1
+1129 1129 1
+1 1130 1
+1130 1130 1
+1 1131 1
+1131 1131 1
+1 1132 1
+1132 1132 1
+1 1133 1
+1133 1133 1
+1 1134 1
+1134 1134 1
+1 1135 1
+1135 1135 1
+1 1136 1
+1136 1136 1
+1 1137 1
+1137 1137 1
+1 1138 1
+1138 1138 1
+1 1139 1
+1139 1139 1
+1 1140 1
+1140 1140 1
+1 1141 1
+1141 1141 1
+1 1142 1
+1142 1142 1
+1 1143 1
+1143 1143 1
+1 1144 1
+1144 1144 1
+1 1145 1
+1145 1145 1
+1 1146 1
+1146 1146 1
+1 1147 1
+1147 1147 1
+1 1148 1
+1148 1148 1
+1 1149 1
+1149 1149 1
+1 1150 1
+1150 1150 1
+1 1151 1
+1151 1151 1
+1 1152 1
+1152 1152 1
+1 1153 1
+1153 1153 1
+1 1154 1
+1154 1154 1
+1 1155 1
+1155 1155 1
+1 1156 1
+1156 1156 1
+1 1157 1
+1157 1157 1
+1 1158 1
+1158 1158 1
+1 1159 1
+1159 1159 1
+1 1160 1
+1160 1160 1
+1 1161 1
+1161 1161 1
+1 1162 1
+1162 1162 1
+1 1163 1
+1163 1163 1
+1 1164 1
+1164 1164 1
+1 1165 1
+1165 1165 1
+1 1166 1
+1166 1166 1
+1 1167 1
+1167 1167 1
+1 1168 1
+1168 1168 1
+1 1169 1
+1169 1169 1
+1 1170 1
+1170 1170 1
+1 1171 1
+1171 1171 1
+1 1172 1
+1172 1172 1
+1 1173 1
+1173 1173 1
+1 1174 1
+1174 1174 1
+1 1175 1
+1175 1175 1
+1 1176 1
+1176 1176 1
+1 1177 1
+1177 1177 1
+1 1178 1
+1178 1178 1
+1 1179 1
+1179 1179 1
+1 1180 1
+1180 1180 1
+1 1181 1
+1181 1181 1
+1 1182 1
+1182 1182 1
+1 1183 1
+1183 1183 1
+1 1184 1
+1184 1184 1
+1 1185 1
+1185 1185 1
+1 1186 1
+1186 1186 1
+1 1187 1
+1187 1187 1
+1 1188 1
+1188 1188 1
+1 1189 1
+1189 1189 1
+1 1190 1
+1190 1190 1
+1 1191 1
+1191 1191 1
+1 1192 1
+1192 1192 1
+1 1193 1
+1193 1193 1
+1 1194 1
+1194 1194 1
+1 1195 1
+1195 1195 1
+1 1196 1
+1196 1196 1
+1 1197 1
+1197 1197 1
+1 1198 1
+1198 1198 1
+1 1199 1
+1199 1199 1
+1 1200 1
+1200 1200 1
+1 1201 1
+1201 1201 1
+1 1202 1
+1202 1202 1
+1 1203 1
+1203 1203 1
+1 1204 1
+1204 1204 1
+1 1205 1
+1205 1205 1
+1 1206 1
+1206 1206 1
+1 1207 1
+1207 1207 1
+1 1208 1
+1208 1208 1
+1 1209 1
+1209 1209 1
+1 1210 1
+1210 1210 1
+1 1211 1
+1211 1211 1
+1 1212 1
+1212 1212 1
+1 1213 1
+1213 1213 1
+1 1214 1
+1214 1214 1
+1 1215 1
+1215 1215 1
+1 1216 1
+1216 1216 1
+1 1217 1
+1217 1217 1
+1 1218 1
+1218 1218 1
+1 1219 1
+1219 1219 1
+1 1220 1
+1220 1220 1
+1 1221 1
+1221 1221 1
+1 1222 1
+1222 1222 1
+1 1223 1
+1223 1223 1
+1 1224 1
+1224 1224 1
+1 1225 1
+1225 1225 1
+1 1226 1
+1226 1226 1
+1 1227 1
+1227 1227 1
+1 1228 1
+1228 1228 1
+1 1229 1
+1229 1229 1
+1 1230 1
+1230 1230 1
+1 1231 1
+1231 1231 1
+1 1232 1
+1232 1232 1
+1 1233 1
+1233 1233 1
+1 1234 1
+1234 1234 1
+1 1235 1
+1235 1235 1
+1 1236 1
+1236 1236 1
+1 1237 1
+1237 1237 1
+1 1238 1
+1238 1238 1
+1 1239 1
+1239 1239 1
+1 1240 1
+1240 1240 1
+1 1241 1
+1241 1241 1
+1 1242 1
+1242 1242 1
+1 1243 1
+1243 1243 1
+1 1244 1
+1244 1244 1
+1 1245 1
+1245 1245 1
+1 1246 1
+1246 1246 1
+1 1247 1
+1247 1247 1
+1 1248 1
+1248 1248 1
+1 1249 1
+1249 1249 1
+1 1250 1
+1250 1250 1
+1 1251 1
+1251 1251 1
+1 1252 1
+1252 1252 1
+1 1253 1
+1253 1253 1
+1 1254 1
+1254 1254 1
+1 1255 1
+1255 1255 1
+1 1256 1
+1256 1256 1
+1 1257 1
+1257 1257 1
+1 1258 1
+1258 1258 1
+1 1259 1
+1259 1259 1
+1 1260 1
+1260 1260 1
+1 1261 1
+1261 1261 1
+1 1262 1
+1262 1262 1
+1 1263 1
+1263 1263 1
+1 1264 1
+1264 1264 1
+1 1265 1
+1265 1265 1
+1 1266 1
+1266 1266 1
+1 1267 1
+1267 1267 1
+1 1268 1
+1268 1268 1
+1 1269 1
+1269 1269 1
+1 1270 1
+1270 1270 1
+1 1271 1
+1271 1271 1
+1 1272 1
+1272 1272 1
+1 1273 1
+1273 1273 1
+1 1274 1
+1274 1274 1
+1 1275 1
+1275 1275 1
+1 1276 1
+1276 1276 1
+1 1277 1
+1277 1277 1
+1 1278 1
+1278 1278 1
+1 1279 1
+1279 1279 1
+1 1280 1
+1280 1280 1
+1 1281 1
+1281 1281 1
+1 1282 1
+1282 1282 1
+1 1283 1
+1283 1283 1
+1 1284 1
+1284 1284 1
+1 1285 1
+1285 1285 1
+1 1286 1
+1286 1286 1
+1 1287 1
+1287 1287 1
+1 1288 1
+1288 1288 1
+1 1289 1
+1289 1289 1
+1 1290 1
+1290 1290 1
+1 1291 1
+1291 1291 1
+1 1292 1
+1292 1292 1
+1 1293 1
+1293 1293 1
+1 1294 1
+1294 1294 1
+1 1295 1
+1295 1295 1
+1 1296 1
+1296 1296 1
+1 1297 1
+1297 1297 1
+1 1298 1
+1298 1298 1
+1 1299 1
+1299 1299 1
+1 1300 1
+1300 1300 1
+1 1301 1
+1301 1301 1
+1 1302 1
+1302 1302 1
+1 1303 1
+1303 1303 1
+1 1304 1
+1304 1304 1
+1 1305 1
+1305 1305 1
+1 1306 1
+1306 1306 1
+1 1307 1
+1307 1307 1
+1 1308 1
+1308 1308 1
+1 1309 1
+1309 1309 1
+1 1310 1
+1310 1310 1
+1 1311 1
+1311 1311 1
+1 1312 1
+1312 1312 1
+1 1313 1
+1313 1313 1
+1 1314 1
+1314 1314 1
+1 1315 1
+1315 1315 1
+1 1316 1
+1316 1316 1
+1 1317 1
+1317 1317 1
+1 1318 1
+1318 1318 1
+1 1319 1
+1319 1319 1
+1 1320 1
+1320 1320 1
+1 1321 1
+1321 1321 1
+1 1322 1
+1322 1322 1
+1 1323 1
+1323 1323 1
+1 1324 1
+1324 1324 1
+1 1325 1
+1325 1325 1
+1 1326 1
+1326 1326 1
+1 1327 1
+1327 1327 1
+1 1328 1
+1328 1328 1
+1 1329 1
+1329 1329 1
+1 1330 1
+1330 1330 1
+1 1331 1
+1331 1331 1
+1 1332 1
+1332 1332 1
+1 1333 1
+1333 1333 1
+1 1334 1
+1334 1334 1
+1 1335 1
+1335 1335 1
+1 1336 1
+1336 1336 1
+1 1337 1
+1337 1337 1
+1 1338 1
+1338 1338 1
+1 1339 1
+1339 1339 1
+1 1340 1
+1340 1340 1
+1 1341 1
+1341 1341 1
+1 1342 1
+1342 1342 1
+1 1343 1
+1343 1343 1
+1 1344 1
+1344 1344 1
+1 1345 1
+1345 1345 1
+1 1346 1
+1346 1346 1
+1 1347 1
+1347 1347 1
+1 1348 1
+1348 1348 1
+1 1349 1
+1349 1349 1
+1 1350 1
+1350 1350 1
+1 1351 1
+1351 1351 1
+1 1352 1
+1352 1352 1
+1 1353 1
+1353 1353 1
+1 1354 1
+1354 1354 1
+1 1355 1
+1355 1355 1
+1 1356 1
+1356 1356 1
+1 1357 1
+1357 1357 1
+1 1358 1
+1358 1358 1
+1 1359 1
+1359 1359 1
+1 1360 1
+1360 1360 1
+1 1361 1
+1361 1361 1
+1 1362 1
+1362 1362 1
+1 1363 1
+1363 1363 1
+1 1364 1
+1364 1364 1
+1 1365 1
+1365 1365 1
+1 1366 1
+1366 1366 1
+1 1367 1
+1367 1367 1
+1 1368 1
+1368 1368 1
+1 1369 1
+1369 1369 1
+1 1370 1
+1370 1370 1
+1 1371 1
+1371 1371 1
+1 1372 1
+1372 1372 1
+1 1373 1
+1373 1373 1
+1 1374 1
+1374 1374 1
+1 1375 1
+1375 1375 1
+1 1376 1
+1376 1376 1
+1 1377 1
+1377 1377 1
+1 1378 1
+1378 1378 1
+1 1379 1
+1379 1379 1
+1 1380 1
+1380 1380 1
+1 1381 1
+1381 1381 1
+1 1382 1
+1382 1382 1
+1 1383 1
+1383 1383 1
+1 1384 1
+1384 1384 1
+1 1385 1
+1385 1385 1
+1 1386 1
+1386 1386 1
+1 1387 1
+1387 1387 1
+1 1388 1
+1388 1388 1
+1 1389 1
+1389 1389 1
+1 1390 1
+1390 1390 1
+1 1391 1
+1391 1391 1
+1 1392 1
+1392 1392 1
+1 1393 1
+1393 1393 1
+1 1394 1
+1394 1394 1
+1 1395 1
+1395 1395 1
+1 1396 1
+1396 1396 1
+1 1397 1
+1397 1397 1
+1 1398 1
+1398 1398 1
+1 1399 1
+1399 1399 1
+1 1400 1
+1400 1400 1
+1 1401 1
+1401 1401 1
+1 1402 1
+1402 1402 1
+1 1403 1
+1403 1403 1
+1 1404 1
+1404 1404 1
+1 1405 1
+1405 1405 1
+1 1406 1
+1406 1406 1
+1 1407 1
+1407 1407 1
+1 1408 1
+1408 1408 1
+1 1409 1
+1409 1409 1
+1 1410 1
+1410 1410 1
+1 1411 1
+1411 1411 1
+1 1412 1
+1412 1412 1
+1 1413 1
+1413 1413 1
+1 1414 1
+1414 1414 1
+1 1415 1
+1415 1415 1
+1 1416 1
+1416 1416 1
+1 1417 1
+1417 1417 1
+1 1418 1
+1418 1418 1
+1 1419 1
+1419 1419 1
+1 1420 1
+1420 1420 1
+1 1421 1
+1421 1421 1
+1 1422 1
+1422 1422 1
+1 1423 1
+1423 1423 1
+1 1424 1
+1424 1424 1
+1 1425 1
+1425 1425 1
+1 1426 1
+1426 1426 1
+1 1427 1
+1427 1427 1
+1 1428 1
+1428 1428 1
+1 1429 1
+1429 1429 1
+1 1430 1
+1430 1430 1
+1 1431 1
+1431 1431 1
+1 1432 1
+1432 1432 1
+1 1433 1
+1433 1433 1
+1 1434 1
+1434 1434 1
+1 1435 1
+1435 1435 1
+1 1436 1
+1436 1436 1
+1 1437 1
+1437 1437 1
+1 1438 1
+1438 1438 1
+1 1439 1
+1439 1439 1
+1 1440 1
+1440 1440 1
+1 1441 1
+1441 1441 1
+1 1442 1
+1442 1442 1
+1 1443 1
+1443 1443 1
+1 1444 1
+1444 1444 1
+1 1445 1
+1445 1445 1
+1 1446 1
+1446 1446 1
+1 1447 1
+1447 1447 1
+1 1448 1
+1448 1448 1
+1 1449 1
+1449 1449 1
+1 1450 1
+1450 1450 1
+1 1451 1
+1451 1451 1
+1 1452 1
+1452 1452 1
+1 1453 1
+1453 1453 1
+1 1454 1
+1454 1454 1
+1 1455 1
+1455 1455 1
+1 1456 1
+1456 1456 1
+1 1457 1
+1457 1457 1
+1 1458 1
+1458 1458 1
+1 1459 1
+1459 1459 1
+1 1460 1
+1460 1460 1
+1 1461 1
+1461 1461 1
+1 1462 1
+1462 1462 1
+1 1463 1
+1463 1463 1
+1 1464 1
+1464 1464 1
+1 1465 1
+1465 1465 1
+1 1466 1
+1466 1466 1
+1 1467 1
+1467 1467 1
+1 1468 1
+1468 1468 1
+1 1469 1
+1469 1469 1
+1 1470 1
+1470 1470 1
+1 1471 1
+1471 1471 1
+1 1472 1
+1472 1472 1
+1 1473 1
+1473 1473 1
+1 1474 1
+1474 1474 1
+1 1475 1
+1475 1475 1
+1 1476 1
+1476 1476 1
+1 1477 1
+1477 1477 1
+1 1478 1
+1478 1478 1
+1 1479 1
+1479 1479 1
+1 1480 1
+1480 1480 1
+1 1481 1
+1481 1481 1
+1 1482 1
+1482 1482 1
+1 1483 1
+1483 1483 1
+1 1484 1
+1484 1484 1
+1 1485 1
+1485 1485 1
+1 1486 1
+1486 1486 1
+1 1487 1
+1487 1487 1
+1 1488 1
+1488 1488 1
+1 1489 1
+1489 1489 1
+1 1490 1
+1490 1490 1
+1 1491 1
+1491 1491 1
+1 1492 1
+1492 1492 1
+1 1493 1
+1493 1493 1
+1 1494 1
+1494 1494 1
+1 1495 1
+1495 1495 1
+1 1496 1
+1496 1496 1
+1 1497 1
+1497 1497 1
+1 1498 1
+1498 1498 1
+1 1499 1
+1499 1499 1
+1 1500 1
+1500 1500 1
+1 1501 1
+1501 1501 1
+1 1502 1
+1502 1502 1
+1 1503 1
+1503 1503 1
+1 1504 1
+1504 1504 1
+1 1505 1
+1505 1505 1
+1 1506 1
+1506 1506 1
+1 1507 1
+1507 1507 1
+1 1508 1
+1508 1508 1
+1 1509 1
+1509 1509 1
+1 1510 1
+1510 1510 1
+1 1511 1
+1511 1511 1
+1 1512 1
+1512 1512 1
+1 1513 1
+1513 1513 1
+1 1514 1
+1514 1514 1
+1 1515 1
+1515 1515 1
+1 1516 1
+1516 1516 1
+1 1517 1
+1517 1517 1
+1 1518 1
+1518 1518 1
+1 1519 1
+1519 1519 1
+1 1520 1
+1520 1520 1
+1 1521 1
+1521 1521 1
+1 1522 1
+1522 1522 1
+1 1523 1
+1523 1523 1
+1 1524 1
+1524 1524 1
+1 1525 1
+1525 1525 1
+1 1526 1
+1526 1526 1
+1 1527 1
+1527 1527 1
+1 1528 1
+1528 1528 1
+1 1529 1
+1529 1529 1
+1 1530 1
+1530 1530 1
+1 1531 1
+1531 1531 1
+1 1532 1
+1532 1532 1
+1 1533 1
+1533 1533 1
+1 1534 1
+1534 1534 1
+1 1535 1
+1535 1535 1
+1 1536 1
+1536 1536 1
+1 1537 1
+1537 1537 1
+1 1538 1
+1538 1538 1
+1 1539 1
+1539 1539 1
+1 1540 1
+1540 1540 1
+1 1541 1
+1541 1541 1
+1 1542 1
+1542 1542 1
+1 1543 1
+1543 1543 1
+1 1544 1
+1544 1544 1
+1 1545 1
+1545 1545 1
+1 1546 1
+1546 1546 1
+1 1547 1
+1547 1547 1
+1 1548 1
+1548 1548 1
+1 1549 1
+1549 1549 1
+1 1550 1
+1550 1550 1
+1 1551 1
+1551 1551 1
+1 1552 1
+1552 1552 1
+1 1553 1
+1553 1553 1
+1 1554 1
+1554 1554 1
+1 1555 1
+1555 1555 1
+1 1556 1
+1556 1556 1
+1 1557 1
+1557 1557 1
+1 1558 1
+1558 1558 1
+1 1559 1
+1559 1559 1
+1 1560 1
+1560 1560 1
+1 1561 1
+1561 1561 1
+1 1562 1
+1562 1562 1
+1 1563 1
+1563 1563 1
+1 1564 1
+1564 1564 1
+1 1565 1
+1565 1565 1
+1 1566 1
+1566 1566 1
+1 1567 1
+1567 1567 1
+1 1568 1
+1568 1568 1
+1 1569 1
+1569 1569 1
+1 1570 1
+1570 1570 1
+1 1571 1
+1571 1571 1
+1 1572 1
+1572 1572 1
+1 1573 1
+1573 1573 1
+1 1574 1
+1574 1574 1
+1 1575 1
+1575 1575 1
+1 1576 1
+1576 1576 1
+1 1577 1
+1577 1577 1
+1 1578 1
+1578 1578 1
+1 1579 1
+1579 1579 1
+1 1580 1
+1580 1580 1
+1 1581 1
+1581 1581 1
+1 1582 1
+1582 1582 1
+1 1583 1
+1583 1583 1
+1 1584 1
+1584 1584 1
+1 1585 1
+1585 1585 1
+1 1586 1
+1586 1586 1
+1 1587 1
+1587 1587 1
+1 1588 1
+1588 1588 1
+1 1589 1
+1589 1589 1
+1 1590 1
+1590 1590 1
+1 1591 1
+1591 1591 1
+1 1592 1
+1592 1592 1
+1 1593 1
+1593 1593 1
+1 1594 1
+1594 1594 1
+1 1595 1
+1595 1595 1
+1 1596 1
+1596 1596 1
+1 1597 1
+1597 1597 1
+1 1598 1
+1598 1598 1
+1 1599 1
+1599 1599 1
+1 1600 1
+1600 1600 1
+1 1601 1
+1601 1601 1
+1 1602 1
+1602 1602 1
+1 1603 1
+1603 1603 1
+1 1604 1
+1604 1604 1
+1 1605 1
+1605 1605 1
+1 1606 1
+1606 1606 1
+1 1607 1
+1607 1607 1
+1 1608 1
+1608 1608 1
+1 1609 1
+1609 1609 1
+1 1610 1
+1610 1610 1
+1 1611 1
+1611 1611 1
+1 1612 1
+1612 1612 1
+1 1613 1
+1613 1613 1
+1 1614 1
+1614 1614 1
+1 1615 1
+1615 1615 1
+1 1616 1
+1616 1616 1
+1 1617 1
+1617 1617 1
+1 1618 1
+1618 1618 1
+1 1619 1
+1619 1619 1
+1 1620 1
+1620 1620 1
+1 1621 1
+1621 1621 1
+1 1622 1
+1622 1622 1
+1 1623 1
+1623 1623 1
+1 1624 1
+1624 1624 1
+1 1625 1
+1625 1625 1
+1 1626 1
+1626 1626 1
+1 1627 1
+1627 1627 1
+1 1628 1
+1628 1628 1
+1 1629 1
+1629 1629 1
+1 1630 1
+1630 1630 1
+1 1631 1
+1631 1631 1
+1 1632 1
+1632 1632 1
+1 1633 1
+1633 1633 1
+1 1634 1
+1634 1634 1
+1 1635 1
+1635 1635 1
+1 1636 1
+1636 1636 1
+1 1637 1
+1637 1637 1
+1 1638 1
+1638 1638 1
+1 1639 1
+1639 1639 1
+1 1640 1
+1640 1640 1
+1 1641 1
+1641 1641 1
+1 1642 1
+1642 1642 1
+1 1643 1
+1643 1643 1
+1 1644 1
+1644 1644 1
+1 1645 1
+1645 1645 1
+1 1646 1
+1646 1646 1
+1 1647 1
+1647 1647 1
+1 1648 1
+1648 1648 1
+1 1649 1
+1649 1649 1
+1 1650 1
+1650 1650 1
+1 1651 1
+1651 1651 1
+1 1652 1
+1652 1652 1
+1 1653 1
+1653 1653 1
+1 1654 1
+1654 1654 1
+1 1655 1
+1655 1655 1
+1 1656 1
+1656 1656 1
+1 1657 1
+1657 1657 1
+1 1658 1
+1658 1658 1
+1 1659 1
+1659 1659 1
+1 1660 1
+1660 1660 1
+1 1661 1
+1661 1661 1
+1 1662 1
+1662 1662 1
+1 1663 1
+1663 1663 1
+1 1664 1
+1664 1664 1
+1 1665 1
+1665 1665 1
+1 1666 1
+1666 1666 1
+1 1667 1
+1667 1667 1
+1 1668 1
+1668 1668 1
+1 1669 1
+1669 1669 1
+1 1670 1
+1670 1670 1
+1 1671 1
+1671 1671 1
+1 1672 1
+1672 1672 1
+1 1673 1
+1673 1673 1
+1 1674 1
+1674 1674 1
+1 1675 1
+1675 1675 1
+1 1676 1
+1676 1676 1
+1 1677 1
+1677 1677 1
+1 1678 1
+1678 1678 1
+1 1679 1
+1679 1679 1
+1 1680 1
+1680 1680 1
+1 1681 1
+1681 1681 1
+1 1682 1
+1682 1682 1
+1 1683 1
+1683 1683 1
+1 1684 1
+1684 1684 1
+1 1685 1
+1685 1685 1
+1 1686 1
+1686 1686 1
+1 1687 1
+1687 1687 1
+1 1688 1
+1688 1688 1
+1 1689 1
+1689 1689 1
+1 1690 1
+1690 1690 1
+1 1691 1
+1691 1691 1
+1 1692 1
+1692 1692 1
+1 1693 1
+1693 1693 1
+1 1694 1
+1694 1694 1
+1 1695 1
+1695 1695 1
+1 1696 1
+1696 1696 1
+1 1697 1
+1697 1697 1
+1 1698 1
+1698 1698 1
+1 1699 1
+1699 1699 1
+1 1700 1
+1700 1700 1
+1 1701 1
+1701 1701 1
+1 1702 1
+1702 1702 1
+1 1703 1
+1703 1703 1
+1 1704 1
+1704 1704 1
+1 1705 1
+1705 1705 1
+1 1706 1
+1706 1706 1
+1 1707 1
+1707 1707 1
+1 1708 1
+1708 1708 1
+1 1709 1
+1709 1709 1
+1 1710 1
+1710 1710 1
+1 1711 1
+1711 1711 1
+1 1712 1
+1712 1712 1
+1 1713 1
+1713 1713 1
+1 1714 1
+1714 1714 1
+1 1715 1
+1715 1715 1
+1 1716 1
+1716 1716 1
+1 1717 1
+1717 1717 1
+1 1718 1
+1718 1718 1
+1 1719 1
+1719 1719 1
+1 1720 1
+1720 1720 1
+1 1721 1
+1721 1721 1
+1 1722 1
+1722 1722 1
+1 1723 1
+1723 1723 1
+1 1724 1
+1724 1724 1
+1 1725 1
+1725 1725 1
+1 1726 1
+1726 1726 1
+1 1727 1
+1727 1727 1
+1 1728 1
+1728 1728 1
+1 1729 1
+1729 1729 1
+1 1730 1
+1730 1730 1
+1 1731 1
+1731 1731 1
+1 1732 1
+1732 1732 1
+1 1733 1
+1733 1733 1
+1 1734 1
+1734 1734 1
+1 1735 1
+1735 1735 1
+1 1736 1
+1736 1736 1
+1 1737 1
+1737 1737 1
+1 1738 1
+1738 1738 1
+1 1739 1
+1739 1739 1
+1 1740 1
+1740 1740 1
+1 1741 1
+1741 1741 1
+1 1742 1
+1742 1742 1
+1 1743 1
+1743 1743 1
+1 1744 1
+1744 1744 1
+1 1745 1
+1745 1745 1
+1 1746 1
+1746 1746 1
+1 1747 1
+1747 1747 1
+1 1748 1
+1748 1748 1
+1 1749 1
+1749 1749 1
+1 1750 1
+1750 1750 1
+1 1751 1
+1751 1751 1
+1 1752 1
+1752 1752 1
+1 1753 1
+1753 1753 1
+1 1754 1
+1754 1754 1
+1 1755 1
+1755 1755 1
+1 1756 1
+1756 1756 1
+1 1757 1
+1757 1757 1
+1 1758 1
+1758 1758 1
+1 1759 1
+1759 1759 1
+1 1760 1
+1760 1760 1
+1 1761 1
+1761 1761 1
+1 1762 1
+1762 1762 1
+1 1763 1
+1763 1763 1
+1 1764 1
+1764 1764 1
+1 1765 1
+1765 1765 1
+1 1766 1
+1766 1766 1
+1 1767 1
+1767 1767 1
+1 1768 1
+1768 1768 1
+1 1769 1
+1769 1769 1
+1 1770 1
+1770 1770 1
+1 1771 1
+1771 1771 1
+1 1772 1
+1772 1772 1
+1 1773 1
+1773 1773 1
+1 1774 1
+1774 1774 1
+1 1775 1
+1775 1775 1
+1 1776 1
+1776 1776 1
+1 1777 1
+1777 1777 1
+1 1778 1
+1778 1778 1
+1 1779 1
+1779 1779 1
+1 1780 1
+1780 1780 1
+1 1781 1
+1781 1781 1
+1 1782 1
+1782 1782 1
+1 1783 1
+1783 1783 1
+1 1784 1
+1784 1784 1
+1 1785 1
+1785 1785 1
+1 1786 1
+1786 1786 1
+1 1787 1
+1787 1787 1
+1 1788 1
+1788 1788 1
+1 1789 1
+1789 1789 1
+1 1790 1
+1790 1790 1
+1 1791 1
+1791 1791 1
+1 1792 1
+1792 1792 1
+1 1793 1
+1793 1793 1
+1 1794 1
+1794 1794 1
+1 1795 1
+1795 1795 1
+1 1796 1
+1796 1796 1
+1 1797 1
+1797 1797 1
+1 1798 1
+1798 1798 1
+1 1799 1
+1799 1799 1
+1 1800 1
+1800 1800 1
+1 1801 1
+1801 1801 1
+1 1802 1
+1802 1802 1
+1 1803 1
+1803 1803 1
+1 1804 1
+1804 1804 1
+1 1805 1
+1805 1805 1
+1 1806 1
+1806 1806 1
+1 1807 1
+1807 1807 1
+1 1808 1
+1808 1808 1
+1 1809 1
+1809 1809 1
+1 1810 1
+1810 1810 1
+1 1811 1
+1811 1811 1
+1 1812 1
+1812 1812 1
+1 1813 1
+1813 1813 1
+1 1814 1
+1814 1814 1
+1 1815 1
+1815 1815 1
+1 1816 1
+1816 1816 1
+1 1817 1
+1817 1817 1
+1 1818 1
+1818 1818 1
+1 1819 1
+1819 1819 1
+1 1820 1
+1820 1820 1
+1 1821 1
+1821 1821 1
+1 1822 1
+1822 1822 1
+1 1823 1
+1823 1823 1
+1 1824 1
+1824 1824 1
+1 1825 1
+1825 1825 1
+1 1826 1
+1826 1826 1
+1 1827 1
+1827 1827 1
+1 1828 1
+1828 1828 1
+1 1829 1
+1829 1829 1
+1 1830 1
+1830 1830 1
+1 1831 1
+1831 1831 1
+1 1832 1
+1832 1832 1
+1 1833 1
+1833 1833 1
+1 1834 1
+1834 1834 1
+1 1835 1
+1835 1835 1
+1 1836 1
+1836 1836 1
+1 1837 1
+1837 1837 1
+1 1838 1
+1838 1838 1
+1 1839 1
+1839 1839 1
+1 1840 1
+1840 1840 1
+1 1841 1
+1841 1841 1
+1 1842 1
+1842 1842 1
+1 1843 1
+1843 1843 1
+1 1844 1
+1844 1844 1
+1 1845 1
+1845 1845 1
+1 1846 1
+1846 1846 1
+1 1847 1
+1847 1847 1
+1 1848 1
+1848 1848 1
+1 1849 1
+1849 1849 1
+1 1850 1
+1850 1850 1
+1 1851 1
+1851 1851 1
+1 1852 1
+1852 1852 1
+1 1853 1
+1853 1853 1
+1 1854 1
+1854 1854 1
+1 1855 1
+1855 1855 1
+1 1856 1
+1856 1856 1
+1 1857 1
+1857 1857 1
+1 1858 1
+1858 1858 1
+1 1859 1
+1859 1859 1
+1 1860 1
+1860 1860 1
+1 1861 1
+1861 1861 1
+1 1862 1
+1862 1862 1
+1 1863 1
+1863 1863 1
+1 1864 1
+1864 1864 1
+1 1865 1
+1865 1865 1
+1 1866 1
+1866 1866 1
+1 1867 1
+1867 1867 1
+1 1868 1
+1868 1868 1
+1 1869 1
+1869 1869 1
+1 1870 1
+1870 1870 1
+1 1871 1
+1871 1871 1
+1 1872 1
+1872 1872 1
+1 1873 1
+1873 1873 1
+1 1874 1
+1874 1874 1
+1 1875 1
+1875 1875 1
+1 1876 1
+1876 1876 1
+1 1877 1
+1877 1877 1
+1 1878 1
+1878 1878 1
+1 1879 1
+1879 1879 1
+1 1880 1
+1880 1880 1
+1 1881 1
+1881 1881 1
+1 1882 1
+1882 1882 1
+1 1883 1
+1883 1883 1
+1 1884 1
+1884 1884 1
+1 1885 1
+1885 1885 1
+1 1886 1
+1886 1886 1
+1 1887 1
+1887 1887 1
+1 1888 1
+1888 1888 1
+1 1889 1
+1889 1889 1
+1 1890 1
+1890 1890 1
+1 1891 1
+1891 1891 1
+1 1892 1
+1892 1892 1
+1 1893 1
+1893 1893 1
+1 1894 1
+1894 1894 1
+1 1895 1
+1895 1895 1
+1 1896 1
+1896 1896 1
+1 1897 1
+1897 1897 1
+1 1898 1
+1898 1898 1
+1 1899 1
+1899 1899 1
+1 1900 1
+1900 1900 1
+1 1901 1
+1901 1901 1
+1 1902 1
+1902 1902 1
+1 1903 1
+1903 1903 1
+1 1904 1
+1904 1904 1
+1 1905 1
+1905 1905 1
+1 1906 1
+1906 1906 1
+1 1907 1
+1907 1907 1
+1 1908 1
+1908 1908 1
+1 1909 1
+1909 1909 1
+1 1910 1
+1910 1910 1
+1 1911 1
+1911 1911 1
+1 1912 1
+1912 1912 1
+1 1913 1
+1913 1913 1
+1 1914 1
+1914 1914 1
+1 1915 1
+1915 1915 1
+1 1916 1
+1916 1916 1
+1 1917 1
+1917 1917 1
+1 1918 1
+1918 1918 1
+1 1919 1
+1919 1919 1
+1 1920 1
+1920 1920 1
+1 1921 1
+1921 1921 1
+1 1922 1
+1922 1922 1
+1 1923 1
+1923 1923 1
+1 1924 1
+1924 1924 1
+1 1925 1
+1925 1925 1
+1 1926 1
+1926 1926 1
+1 1927 1
+1927 1927 1
+1 1928 1
+1928 1928 1
+1 1929 1
+1929 1929 1
+1 1930 1
+1930 1930 1
+1 1931 1
+1931 1931 1
+1 1932 1
+1932 1932 1
+1 1933 1
+1933 1933 1
+1 1934 1
+1934 1934 1
+1 1935 1
+1935 1935 1
+1 1936 1
+1936 1936 1
+1 1937 1
+1937 1937 1
+1 1938 1
+1938 1938 1
+1 1939 1
+1939 1939 1
+1 1940 1
+1940 1940 1
+1 1941 1
+1941 1941 1
+1 1942 1
+1942 1942 1
+1 1943 1
+1943 1943 1
+1 1944 1
+1944 1944 1
+1 1945 1
+1945 1945 1
+1 1946 1
+1946 1946 1
+1 1947 1
+1947 1947 1
+1 1948 1
+1948 1948 1
+1 1949 1
+1949 1949 1
+1 1950 1
+1950 1950 1
+1 1951 1
+1951 1951 1
+1 1952 1
+1952 1952 1
+1 1953 1
+1953 1953 1
+1 1954 1
+1954 1954 1
+1 1955 1
+1955 1955 1
+1 1956 1
+1956 1956 1
+1 1957 1
+1957 1957 1
+1 1958 1
+1958 1958 1
+1 1959 1
+1959 1959 1
+1 1960 1
+1960 1960 1
+1 1961 1
+1961 1961 1
+1 1962 1
+1962 1962 1
+1 1963 1
+1963 1963 1
+1 1964 1
+1964 1964 1
+1 1965 1
+1965 1965 1
+1 1966 1
+1966 1966 1
+1 1967 1
+1967 1967 1
+1 1968 1
+1968 1968 1
+1 1969 1
+1969 1969 1
+1 1970 1
+1970 1970 1
+1 1971 1
+1971 1971 1
+1 1972 1
+1972 1972 1
+1 1973 1
+1973 1973 1
+1 1974 1
+1974 1974 1
+1 1975 1
+1975 1975 1
+1 1976 1
+1976 1976 1
+1 1977 1
+1977 1977 1
+1 1978 1
+1978 1978 1
+1 1979 1
+1979 1979 1
+1 1980 1
+1980 1980 1
+1 1981 1
+1981 1981 1
+1 1982 1
+1982 1982 1
+1 1983 1
+1983 1983 1
+1 1984 1
+1984 1984 1
+1 1985 1
+1985 1985 1
+1 1986 1
+1986 1986 1
+1 1987 1
+1987 1987 1
+1 1988 1
+1988 1988 1
+1 1989 1
+1989 1989 1
+1 1990 1
+1990 1990 1
+1 1991 1
+1991 1991 1
+1 1992 1
+1992 1992 1
+1 1993 1
+1993 1993 1
+1 1994 1
+1994 1994 1
+1 1995 1
+1995 1995 1
+1 1996 1
+1996 1996 1
+1 1997 1
+1997 1997 1
+1 1998 1
+1998 1998 1
+1 1999 1
+1999 1999 1
+1 2000 1
+2000 2000 1
+1 2001 1
+2001 2001 1
+1 2002 1
+2002 2002 1
+1 2003 1
+2003 2003 1
+1 2004 1
+2004 2004 1
+1 2005 1
+2005 2005 1
+1 2006 1
+2006 2006 1
+1 2007 1
+2007 2007 1
+1 2008 1
+2008 2008 1
+1 2009 1
+2009 2009 1
+1 2010 1
+2010 2010 1
+1 2011 1
+2011 2011 1
+1 2012 1
+2012 2012 1
+1 2013 1
+2013 2013 1
+1 2014 1
+2014 2014 1
+1 2015 1
+2015 2015 1
+1 2016 1
+2016 2016 1
+1 2017 1
+2017 2017 1
+1 2018 1
+2018 2018 1
+1 2019 1
+2019 2019 1
+1 2020 1
+2020 2020 1
+1 2021 1
+2021 2021 1
+1 2022 1
+2022 2022 1
+1 2023 1
+2023 2023 1
+1 2024 1
+2024 2024 1
+1 2025 1
+2025 2025 1
+1 2026 1
+2026 2026 1
+1 2027 1
+2027 2027 1
+1 2028 1
+2028 2028 1
+1 2029 1
+2029 2029 1
+1 2030 1
+2030 2030 1
+1 2031 1
+2031 2031 1
+1 2032 1
+2032 2032 1
+1 2033 1
+2033 2033 1
+1 2034 1
+2034 2034 1
+1 2035 1
+2035 2035 1
+1 2036 1
+2036 2036 1
+1 2037 1
+2037 2037 1
+1 2038 1
+2038 2038 1
+1 2039 1
+2039 2039 1
+1 2040 1
+2040 2040 1
+1 2041 1
+2041 2041 1
+1 2042 1
+2042 2042 1
+1 2043 1
+2043 2043 1
+1 2044 1
+2044 2044 1
+1 2045 1
+2045 2045 1
+1 2046 1
+2046 2046 1
+1 2047 1
+2047 2047 1
+1 2048 1
+2048 2048 1
+1 2049 1
+2049 2049 1
+1 2050 1
+2050 2050 1
+1 2051 1
+2051 2051 1
+1 2052 1
+2052 2052 1
+1 2053 1
+2053 2053 1
+1 2054 1
+2054 2054 1
+1 2055 1
+2055 2055 1
+1 2056 1
+2056 2056 1
+1 2057 1
+2057 2057 1
+1 2058 1
+2058 2058 1
+1 2059 1
+2059 2059 1
+1 2060 1
+2060 2060 1
+1 2061 1
+2061 2061 1
+1 2062 1
+2062 2062 1
+1 2063 1
+2063 2063 1
+1 2064 1
+2064 2064 1
+1 2065 1
+2065 2065 1
+1 2066 1
+2066 2066 1
+1 2067 1
+2067 2067 1
+1 2068 1
+2068 2068 1
+1 2069 1
+2069 2069 1
+1 2070 1
+2070 2070 1
+1 2071 1
+2071 2071 1
+1 2072 1
+2072 2072 1
+1 2073 1
+2073 2073 1
+1 2074 1
+2074 2074 1
+1 2075 1
+2075 2075 1
+1 2076 1
+2076 2076 1
+1 2077 1
+2077 2077 1
+1 2078 1
+2078 2078 1
+1 2079 1
+2079 2079 1
+1 2080 1
+2080 2080 1
+1 2081 1
+2081 2081 1
+1 2082 1
+2082 2082 1
+1 2083 1
+2083 2083 1
+1 2084 1
+2084 2084 1
+1 2085 1
+2085 2085 1
+1 2086 1
+2086 2086 1
+1 2087 1
+2087 2087 1
+1 2088 1
+2088 2088 1
+1 2089 1
+2089 2089 1
+1 2090 1
+2090 2090 1
+1 2091 1
+2091 2091 1
+1 2092 1
+2092 2092 1
+1 2093 1
+2093 2093 1
+1 2094 1
+2094 2094 1
+1 2095 1
+2095 2095 1
+1 2096 1
+2096 2096 1
+1 2097 1
+2097 2097 1
+1 2098 1
+2098 2098 1
+1 2099 1
+2099 2099 1
+1 2100 1
+2100 2100 1
+1 2101 1
+2101 2101 1
+1 2102 1
+2102 2102 1
+1 2103 1
+2103 2103 1
+1 2104 1
+2104 2104 1
+1 2105 1
+2105 2105 1
+1 2106 1
+2106 2106 1
+1 2107 1
+2107 2107 1
+1 2108 1
+2108 2108 1
+1 2109 1
+2109 2109 1
+1 2110 1
+2110 2110 1
+1 2111 1
+2111 2111 1
+1 2112 1
+2112 2112 1
+1 2113 1
+2113 2113 1
+1 2114 1
+2114 2114 1
+1 2115 1
+2115 2115 1
+1 2116 1
+2116 2116 1
+1 2117 1
+2117 2117 1
+1 2118 1
+2118 2118 1
+1 2119 1
+2119 2119 1
+1 2120 1
+2120 2120 1
+1 2121 1
+2121 2121 1
+1 2122 1
+2122 2122 1
+1 2123 1
+2123 2123 1
+1 2124 1
+2124 2124 1
+1 2125 1
+2125 2125 1
+1 2126 1
+2126 2126 1
+1 2127 1
+2127 2127 1
+1 2128 1
+2128 2128 1
+1 2129 1
+2129 2129 1
+1 2130 1
+2130 2130 1
+1 2131 1
+2131 2131 1
+1 2132 1
+2132 2132 1
+1 2133 1
+2133 2133 1
+1 2134 1
+2134 2134 1
+1 2135 1
+2135 2135 1
+1 2136 1
+2136 2136 1
+1 2137 1
+2137 2137 1
+1 2138 1
+2138 2138 1
+1 2139 1
+2139 2139 1
+1 2140 1
+2140 2140 1
+1 2141 1
+2141 2141 1
+1 2142 1
+2142 2142 1
+1 2143 1
+2143 2143 1
+1 2144 1
+2144 2144 1
+1 2145 1
+2145 2145 1
+1 2146 1
+2146 2146 1
+1 2147 1
+2147 2147 1
+1 2148 1
+2148 2148 1
+1 2149 1
+2149 2149 1
+1 2150 1
+2150 2150 1
+1 2151 1
+2151 2151 1
+1 2152 1
+2152 2152 1
+1 2153 1
+2153 2153 1
+1 2154 1
+2154 2154 1
+1 2155 1
+2155 2155 1
+1 2156 1
+2156 2156 1
+1 2157 1
+2157 2157 1
+1 2158 1
+2158 2158 1
+1 2159 1
+2159 2159 1
+1 2160 1
+2160 2160 1
+1 2161 1
+2161 2161 1
+1 2162 1
+2162 2162 1
+1 2163 1
+2163 2163 1
+1 2164 1
+2164 2164 1
+1 2165 1
+2165 2165 1
+1 2166 1
+2166 2166 1
+1 2167 1
+2167 2167 1
+1 2168 1
+2168 2168 1
+1 2169 1
+2169 2169 1
+1 2170 1
+2170 2170 1
+1 2171 1
+2171 2171 1
+1 2172 1
+2172 2172 1
+1 2173 1
+2173 2173 1
+1 2174 1
+2174 2174 1
+1 2175 1
+2175 2175 1
+1 2176 1
+2176 2176 1
+1 2177 1
+2177 2177 1
+1 2178 1
+2178 2178 1
+1 2179 1
+2179 2179 1
+1 2180 1
+2180 2180 1
+1 2181 1
+2181 2181 1
+1 2182 1
+2182 2182 1
+1 2183 1
+2183 2183 1
+1 2184 1
+2184 2184 1
+1 2185 1
+2185 2185 1
+1 2186 1
+2186 2186 1
+1 2187 1
+2187 2187 1
+1 2188 1
+2188 2188 1
+1 2189 1
+2189 2189 1
+1 2190 1
+2190 2190 1
+1 2191 1
+2191 2191 1
+1 2192 1
+2192 2192 1
+1 2193 1
+2193 2193 1
+1 2194 1
+2194 2194 1
+1 2195 1
+2195 2195 1
+1 2196 1
+2196 2196 1
+1 2197 1
+2197 2197 1
+1 2198 1
+2198 2198 1
+1 2199 1
+2199 2199 1
+1 2200 1
+2200 2200 1
+1 2201 1
+2201 2201 1
+1 2202 1
+2202 2202 1
+1 2203 1
+2203 2203 1
+1 2204 1
+2204 2204 1
+1 2205 1
+2205 2205 1
+1 2206 1
+2206 2206 1
+1 2207 1
+2207 2207 1
+1 2208 1
+2208 2208 1
+1 2209 1
+2209 2209 1
+1 2210 1
+2210 2210 1
+1 2211 1
+2211 2211 1
+1 2212 1
+2212 2212 1
+1 2213 1
+2213 2213 1
+1 2214 1
+2214 2214 1
+1 2215 1
+2215 2215 1
+1 2216 1
+2216 2216 1
+1 2217 1
+2217 2217 1
+1 2218 1
+2218 2218 1
+1 2219 1
+2219 2219 1
+1 2220 1
+2220 2220 1
+1 2221 1
+2221 2221 1
+1 2222 1
+2222 2222 1
+1 2223 1
+2223 2223 1
+1 2224 1
+2224 2224 1
+1 2225 1
+2225 2225 1
+1 2226 1
+2226 2226 1
+1 2227 1
+2227 2227 1
+1 2228 1
+2228 2228 1
+1 2229 1
+2229 2229 1
+1 2230 1
+2230 2230 1
+1 2231 1
+2231 2231 1
+1 2232 1
+2232 2232 1
+1 2233 1
+2233 2233 1
+1 2234 1
+2234 2234 1
+1 2235 1
+2235 2235 1
+1 2236 1
+2236 2236 1
+1 2237 1
+2237 2237 1
+1 2238 1
+2238 2238 1
+1 2239 1
+2239 2239 1
+1 2240 1
+2240 2240 1
+1 2241 1
+2241 2241 1
+1 2242 1
+2242 2242 1
+1 2243 1
+2243 2243 1
+1 2244 1
+2244 2244 1
+1 2245 1
+2245 2245 1
+1 2246 1
+2246 2246 1
+1 2247 1
+2247 2247 1
+1 2248 1
+2248 2248 1
+1 2249 1
+2249 2249 1
+1 2250 1
+2250 2250 1
+1 2251 1
+2251 2251 1
+1 2252 1
+2252 2252 1
+1 2253 1
+2253 2253 1
+1 2254 1
+2254 2254 1
+1 2255 1
+2255 2255 1
+1 2256 1
+2256 2256 1
+1 2257 1
+2257 2257 1
+1 2258 1
+2258 2258 1
+1 2259 1
+2259 2259 1
+1 2260 1
+2260 2260 1
+1 2261 1
+2261 2261 1
+1 2262 1
+2262 2262 1
+1 2263 1
+2263 2263 1
+1 2264 1
+2264 2264 1
+1 2265 1
+2265 2265 1
+1 2266 1
+2266 2266 1
+1 2267 1
+2267 2267 1
+1 2268 1
+2268 2268 1
+1 2269 1
+2269 2269 1
+1 2270 1
+2270 2270 1
+1 2271 1
+2271 2271 1
+1 2272 1
+2272 2272 1
+1 2273 1
+2273 2273 1
+1 2274 1
+2274 2274 1
+1 2275 1
+2275 2275 1
+1 2276 1
+2276 2276 1
+1 2277 1
+2277 2277 1
+1 2278 1
+2278 2278 1
+1 2279 1
+2279 2279 1
+1 2280 1
+2280 2280 1
+1 2281 1
+2281 2281 1
+1 2282 1
+2282 2282 1
+1 2283 1
+2283 2283 1
+1 2284 1
+2284 2284 1
+1 2285 1
+2285 2285 1
+1 2286 1
+2286 2286 1
+1 2287 1
+2287 2287 1
+1 2288 1
+2288 2288 1
+1 2289 1
+2289 2289 1
+1 2290 1
+2290 2290 1
+1 2291 1
+2291 2291 1
+1 2292 1
+2292 2292 1
+1 2293 1
+2293 2293 1
+1 2294 1
+2294 2294 1
+1 2295 1
+2295 2295 1
+1 2296 1
+2296 2296 1
+1 2297 1
+2297 2297 1
+1 2298 1
+2298 2298 1
+1 2299 1
+2299 2299 1
+1 2300 1
+2300 2300 1
+1 2301 1
+2301 2301 1
+1 2302 1
+2302 2302 1
+1 2303 1
+2303 2303 1
+1 2304 1
+2304 2304 1
+1 2305 1
+2305 2305 1
+1 2306 1
+2306 2306 1
+1 2307 1
+2307 2307 1
+1 2308 1
+2308 2308 1
+1 2309 1
+2309 2309 1
+1 2310 1
+2310 2310 1
+1 2311 1
+2311 2311 1
+1 2312 1
+2312 2312 1
+1 2313 1
+2313 2313 1
+1 2314 1
+2314 2314 1
+1 2315 1
+2315 2315 1
+1 2316 1
+2316 2316 1
+1 2317 1
+2317 2317 1
+1 2318 1
+2318 2318 1
+1 2319 1
+2319 2319 1
+1 2320 1
+2320 2320 1
+1 2321 1
+2321 2321 1
+1 2322 1
+2322 2322 1
+1 2323 1
+2323 2323 1
+1 2324 1
+2324 2324 1
+1 2325 1
+2325 2325 1
+1 2326 1
+2326 2326 1
+1 2327 1
+2327 2327 1
+1 2328 1
+2328 2328 1
+1 2329 1
+2329 2329 1
+1 2330 1
+2330 2330 1
+1 2331 1
+2331 2331 1
+1 2332 1
+2332 2332 1
+1 2333 1
+2333 2333 1
+1 2334 1
+2334 2334 1
+1 2335 1
+2335 2335 1
+1 2336 1
+2336 2336 1
+1 2337 1
+2337 2337 1
+1 2338 1
+2338 2338 1
+1 2339 1
+2339 2339 1
+1 2340 1
+2340 2340 1
+1 2341 1
+2341 2341 1
+1 2342 1
+2342 2342 1
+1 2343 1
+2343 2343 1
+1 2344 1
+2344 2344 1
+1 2345 1
+2345 2345 1
+1 2346 1
+2346 2346 1
+1 2347 1
+2347 2347 1
+1 2348 1
+2348 2348 1
+1 2349 1
+2349 2349 1
+1 2350 1
+2350 2350 1
+1 2351 1
+2351 2351 1
+1 2352 1
+2352 2352 1
+1 2353 1
+2353 2353 1
+1 2354 1
+2354 2354 1
+1 2355 1
+2355 2355 1
+1 2356 1
+2356 2356 1
+1 2357 1
+2357 2357 1
+1 2358 1
+2358 2358 1
+1 2359 1
+2359 2359 1
+1 2360 1
+2360 2360 1
+1 2361 1
+2361 2361 1
+1 2362 1
+2362 2362 1
+1 2363 1
+2363 2363 1
+1 2364 1
+2364 2364 1
+1 2365 1
+2365 2365 1
+1 2366 1
+2366 2366 1
+1 2367 1
+2367 2367 1
+1 2368 1
+2368 2368 1
+1 2369 1
+2369 2369 1
+1 2370 1
+2370 2370 1
+1 2371 1
+2371 2371 1
+1 2372 1
+2372 2372 1
+1 2373 1
+2373 2373 1
+1 2374 1
+2374 2374 1
+1 2375 1
+2375 2375 1
+1 2376 1
+2376 2376 1
+1 2377 1
+2377 2377 1
+1 2378 1
+2378 2378 1
+1 2379 1
+2379 2379 1
+1 2380 1
+2380 2380 1
+1 2381 1
+2381 2381 1
+1 2382 1
+2382 2382 1
+1 2383 1
+2383 2383 1
+1 2384 1
+2384 2384 1
+1 2385 1
+2385 2385 1
+1 2386 1
+2386 2386 1
+1 2387 1
+2387 2387 1
+1 2388 1
+2388 2388 1
+1 2389 1
+2389 2389 1
+1 2390 1
+2390 2390 1
+1 2391 1
+2391 2391 1
+1 2392 1
+2392 2392 1
+1 2393 1
+2393 2393 1
+1 2394 1
+2394 2394 1
+1 2395 1
+2395 2395 1
+1 2396 1
+2396 2396 1
+1 2397 1
+2397 2397 1
+1 2398 1
+2398 2398 1
+1 2399 1
+2399 2399 1
+1 2400 1
+2400 2400 1
+1 2401 1
+2401 2401 1
+1 2402 1
+2402 2402 1
+1 2403 1
+2403 2403 1
+1 2404 1
+2404 2404 1
+1 2405 1
+2405 2405 1
+1 2406 1
+2406 2406 1
+1 2407 1
+2407 2407 1
+1 2408 1
+2408 2408 1
+1 2409 1
+2409 2409 1
+1 2410 1
+2410 2410 1
+1 2411 1
+2411 2411 1
+1 2412 1
+2412 2412 1
+1 2413 1
+2413 2413 1
+1 2414 1
+2414 2414 1
+1 2415 1
+2415 2415 1
+1 2416 1
+2416 2416 1
+1 2417 1
+2417 2417 1
+1 2418 1
+2418 2418 1
+1 2419 1
+2419 2419 1
+1 2420 1
+2420 2420 1
+1 2421 1
+2421 2421 1
+1 2422 1
+2422 2422 1
+1 2423 1
+2423 2423 1
+1 2424 1
+2424 2424 1
+1 2425 1
+2425 2425 1
+1 2426 1
+2426 2426 1
+1 2427 1
+2427 2427 1
+1 2428 1
+2428 2428 1
+1 2429 1
+2429 2429 1
+1 2430 1
+2430 2430 1
+1 2431 1
+2431 2431 1
+1 2432 1
+2432 2432 1
+1 2433 1
+2433 2433 1
+1 2434 1
+2434 2434 1
+1 2435 1
+2435 2435 1
+1 2436 1
+2436 2436 1
+1 2437 1
+2437 2437 1
+1 2438 1
+2438 2438 1
+1 2439 1
+2439 2439 1
+1 2440 1
+2440 2440 1
+1 2441 1
+2441 2441 1
+1 2442 1
+2442 2442 1
+1 2443 1
+2443 2443 1
+1 2444 1
+2444 2444 1
+1 2445 1
+2445 2445 1
+1 2446 1
+2446 2446 1
+1 2447 1
+2447 2447 1
+1 2448 1
+2448 2448 1
+1 2449 1
+2449 2449 1
+1 2450 1
+2450 2450 1
+1 2451 1
+2451 2451 1
+1 2452 1
+2452 2452 1
+1 2453 1
+2453 2453 1
+1 2454 1
+2454 2454 1
+1 2455 1
+2455 2455 1
+1 2456 1
+2456 2456 1
+1 2457 1
+2457 2457 1
+1 2458 1
+2458 2458 1
+1 2459 1
+2459 2459 1
+1 2460 1
+2460 2460 1
+1 2461 1
+2461 2461 1
+1 2462 1
+2462 2462 1
+1 2463 1
+2463 2463 1
+1 2464 1
+2464 2464 1
+1 2465 1
+2465 2465 1
+1 2466 1
+2466 2466 1
+1 2467 1
+2467 2467 1
+1 2468 1
+2468 2468 1
+1 2469 1
+2469 2469 1
+1 2470 1
+2470 2470 1
+1 2471 1
+2471 2471 1
+1 2472 1
+2472 2472 1
+1 2473 1
+2473 2473 1
+1 2474 1
+2474 2474 1
+1 2475 1
+2475 2475 1
+1 2476 1
+2476 2476 1
+1 2477 1
+2477 2477 1
+1 2478 1
+2478 2478 1
+1 2479 1
+2479 2479 1
+1 2480 1
+2480 2480 1
+1 2481 1
+2481 2481 1
+1 2482 1
+2482 2482 1
+1 2483 1
+2483 2483 1
+1 2484 1
+2484 2484 1
+1 2485 1
+2485 2485 1
+1 2486 1
+2486 2486 1
+1 2487 1
+2487 2487 1
+1 2488 1
+2488 2488 1
+1 2489 1
+2489 2489 1
+1 2490 1
+2490 2490 1
+1 2491 1
+2491 2491 1
+1 2492 1
+2492 2492 1
+1 2493 1
+2493 2493 1
+1 2494 1
+2494 2494 1
+1 2495 1
+2495 2495 1
+1 2496 1
+2496 2496 1
+1 2497 1
+2497 2497 1
+1 2498 1
+2498 2498 1
+1 2499 1
+2499 2499 1
+1 2500 1
+2500 2500 1
+1 2501 1
+2501 2501 1
+1 2502 1
+2502 2502 1
+1 2503 1
+2503 2503 1
+1 2504 1
+2504 2504 1
+1 2505 1
+2505 2505 1
+1 2506 1
+2506 2506 1
+1 2507 1
+2507 2507 1
+1 2508 1
+2508 2508 1
+1 2509 1
+2509 2509 1
+1 2510 1
+2510 2510 1
+1 2511 1
+2511 2511 1
+1 2512 1
+2512 2512 1
+1 2513 1
+2513 2513 1
+1 2514 1
+2514 2514 1
+1 2515 1
+2515 2515 1
+1 2516 1
+2516 2516 1
+1 2517 1
+2517 2517 1
+1 2518 1
+2518 2518 1
+1 2519 1
+2519 2519 1
+1 2520 1
+2520 2520 1
+1 2521 1
+2521 2521 1
+1 2522 1
+2522 2522 1
+1 2523 1
+2523 2523 1
+1 2524 1
+2524 2524 1
+1 2525 1
+2525 2525 1
+1 2526 1
+2526 2526 1
+1 2527 1
+2527 2527 1
+1 2528 1
+2528 2528 1
+1 2529 1
+2529 2529 1
+1 2530 1
+2530 2530 1
+1 2531 1
+2531 2531 1
+1 2532 1
+2532 2532 1
+1 2533 1
+2533 2533 1
+1 2534 1
+2534 2534 1
+1 2535 1
+2535 2535 1
+1 2536 1
+2536 2536 1
+1 2537 1
+2537 2537 1
+1 2538 1
+2538 2538 1
+1 2539 1
+2539 2539 1
+1 2540 1
+2540 2540 1
+1 2541 1
+2541 2541 1
+1 2542 1
+2542 2542 1
+1 2543 1
+2543 2543 1
+1 2544 1
+2544 2544 1
+1 2545 1
+2545 2545 1
+1 2546 1
+2546 2546 1
+1 2547 1
+2547 2547 1
+1 2548 1
+2548 2548 1
+1 2549 1
+2549 2549 1
+1 2550 1
+2550 2550 1
+1 2551 1
+2551 2551 1
+1 2552 1
+2552 2552 1
+1 2553 1
+2553 2553 1
+1 2554 1
+2554 2554 1
+1 2555 1
+2555 2555 1
+1 2556 1
+2556 2556 1
+1 2557 1
+2557 2557 1
+1 2558 1
+2558 2558 1
+1 2559 1
+2559 2559 1
+1 2560 1
+2560 2560 1
+1 2561 1
+2561 2561 1
+1 2562 1
+2562 2562 1
+1 2563 1
+2563 2563 1
+1 2564 1
+2564 2564 1
+1 2565 1
+2565 2565 1
+1 2566 1
+2566 2566 1
+1 2567 1
+2567 2567 1
+1 2568 1
+2568 2568 1
+1 2569 1
+2569 2569 1
+1 2570 1
+2570 2570 1
+1 2571 1
+2571 2571 1
+1 2572 1
+2572 2572 1
+1 2573 1
+2573 2573 1
+1 2574 1
+2574 2574 1
+1 2575 1
+2575 2575 1
+1 2576 1
+2576 2576 1
+1 2577 1
+2577 2577 1
+1 2578 1
+2578 2578 1
+1 2579 1
+2579 2579 1
+1 2580 1
+2580 2580 1
+1 2581 1
+2581 2581 1
+1 2582 1
+2582 2582 1
+1 2583 1
+2583 2583 1
+1 2584 1
+2584 2584 1
+1 2585 1
+2585 2585 1
+1 2586 1
+2586 2586 1
+1 2587 1
+2587 2587 1
+1 2588 1
+2588 2588 1
+1 2589 1
+2589 2589 1
+1 2590 1
+2590 2590 1
+1 2591 1
+2591 2591 1
+1 2592 1
+2592 2592 1
+1 2593 1
+2593 2593 1
+1 2594 1
+2594 2594 1
+1 2595 1
+2595 2595 1
+1 2596 1
+2596 2596 1
+1 2597 1
+2597 2597 1
+1 2598 1
+2598 2598 1
+1 2599 1
+2599 2599 1
+1 2600 1
+2600 2600 1
+1 2601 1
+2601 2601 1
+1 2602 1
+2602 2602 1
+1 2603 1
+2603 2603 1
+1 2604 1
+2604 2604 1
+1 2605 1
+2605 2605 1
+1 2606 1
+2606 2606 1
+1 2607 1
+2607 2607 1
+1 2608 1
+2608 2608 1
+1 2609 1
+2609 2609 1
+1 2610 1
+2610 2610 1
+1 2611 1
+2611 2611 1
+1 2612 1
+2612 2612 1
+1 2613 1
+2613 2613 1
+1 2614 1
+2614 2614 1
+1 2615 1
+2615 2615 1
+1 2616 1
+2616 2616 1
+1 2617 1
+2617 2617 1
+1 2618 1
+2618 2618 1
+1 2619 1
+2619 2619 1
+1 2620 1
+2620 2620 1
+1 2621 1
+2621 2621 1
+1 2622 1
+2622 2622 1
+1 2623 1
+2623 2623 1
+1 2624 1
+2624 2624 1
+1 2625 1
+2625 2625 1
+1 2626 1
+2626 2626 1
+1 2627 1
+2627 2627 1
+1 2628 1
+2628 2628 1
+1 2629 1
+2629 2629 1
+1 2630 1
+2630 2630 1
+1 2631 1
+2631 2631 1
+1 2632 1
+2632 2632 1
+1 2633 1
+2633 2633 1
+1 2634 1
+2634 2634 1
+1 2635 1
+2635 2635 1
+1 2636 1
+2636 2636 1
+1 2637 1
+2637 2637 1
+1 2638 1
+2638 2638 1
+1 2639 1
+2639 2639 1
+1 2640 1
+2640 2640 1
+1 2641 1
+2641 2641 1
+1 2642 1
+2642 2642 1
+1 2643 1
+2643 2643 1
+1 2644 1
+2644 2644 1
+1 2645 1
+2645 2645 1
+1 2646 1
+2646 2646 1
+1 2647 1
+2647 2647 1
+1 2648 1
+2648 2648 1
+1 2649 1
+2649 2649 1
+1 2650 1
+2650 2650 1
+1 2651 1
+2651 2651 1
+1 2652 1
+2652 2652 1
+1 2653 1
+2653 2653 1
+1 2654 1
+2654 2654 1
+1 2655 1
+2655 2655 1
+1 2656 1
+2656 2656 1
+1 2657 1
+2657 2657 1
+1 2658 1
+2658 2658 1
+1 2659 1
+2659 2659 1
+1 2660 1
+2660 2660 1
+1 2661 1
+2661 2661 1
+1 2662 1
+2662 2662 1
+1 2663 1
+2663 2663 1
+1 2664 1
+2664 2664 1
+1 2665 1
+2665 2665 1
+1 2666 1
+2666 2666 1
+1 2667 1
+2667 2667 1
+1 2668 1
+2668 2668 1
+1 2669 1
+2669 2669 1
+1 2670 1
+2670 2670 1
+1 2671 1
+2671 2671 1
+1 2672 1
+2672 2672 1
+1 2673 1
+2673 2673 1
+1 2674 1
+2674 2674 1
+1 2675 1
+2675 2675 1
+1 2676 1
+2676 2676 1
+1 2677 1
+2677 2677 1
+1 2678 1
+2678 2678 1
+1 2679 1
+2679 2679 1
+1 2680 1
+2680 2680 1
+1 2681 1
+2681 2681 1
+1 2682 1
+2682 2682 1
+1 2683 1
+2683 2683 1
+1 2684 1
+2684 2684 1
+1 2685 1
+2685 2685 1
+1 2686 1
+2686 2686 1
+1 2687 1
+2687 2687 1
+1 2688 1
+2688 2688 1
+1 2689 1
+2689 2689 1
+1 2690 1
+2690 2690 1
+1 2691 1
+2691 2691 1
+1 2692 1
+2692 2692 1
+1 2693 1
+2693 2693 1
+1 2694 1
+2694 2694 1
+1 2695 1
+2695 2695 1
+1 2696 1
+2696 2696 1
+1 2697 1
+2697 2697 1
+1 2698 1
+2698 2698 1
+1 2699 1
+2699 2699 1
+1 2700 1
+2700 2700 1
+1 2701 1
+2701 2701 1
+1 2702 1
+2702 2702 1
+1 2703 1
+2703 2703 1
+1 2704 1
+2704 2704 1
+1 2705 1
+2705 2705 1
+1 2706 1
+2706 2706 1
+1 2707 1
+2707 2707 1
+1 2708 1
+2708 2708 1
+1 2709 1
+2709 2709 1
+1 2710 1
+2710 2710 1
+1 2711 1
+2711 2711 1
+1 2712 1
+2712 2712 1
+1 2713 1
+2713 2713 1
+1 2714 1
+2714 2714 1
+1 2715 1
+2715 2715 1
+1 2716 1
+2716 2716 1
+1 2717 1
+2717 2717 1
+1 2718 1
+2718 2718 1
+1 2719 1
+2719 2719 1
+1 2720 1
+2720 2720 1
+1 2721 1
+2721 2721 1
+1 2722 1
+2722 2722 1
+1 2723 1
+2723 2723 1
+1 2724 1
+2724 2724 1
+1 2725 1
+2725 2725 1
+1 2726 1
+2726 2726 1
+1 2727 1
+2727 2727 1
+1 2728 1
+2728 2728 1
+1 2729 1
+2729 2729 1
+1 2730 1
+2730 2730 1
+1 2731 1
+2731 2731 1
+1 2732 1
+2732 2732 1
+1 2733 1
+2733 2733 1
+1 2734 1
+2734 2734 1
+1 2735 1
+2735 2735 1
+1 2736 1
+2736 2736 1
+1 2737 1
+2737 2737 1
+1 2738 1
+2738 2738 1
+1 2739 1
+2739 2739 1
+1 2740 1
+2740 2740 1
+1 2741 1
+2741 2741 1
+1 2742 1
+2742 2742 1
+1 2743 1
+2743 2743 1
+1 2744 1
+2744 2744 1
+1 2745 1
+2745 2745 1
+1 2746 1
+2746 2746 1
+1 2747 1
+2747 2747 1
+1 2748 1
+2748 2748 1
+1 2749 1
+2749 2749 1
+1 2750 1
+2750 2750 1
+1 2751 1
+2751 2751 1
+1 2752 1
+2752 2752 1
+1 2753 1
+2753 2753 1
+1 2754 1
+2754 2754 1
+1 2755 1
+2755 2755 1
+1 2756 1
+2756 2756 1
+1 2757 1
+2757 2757 1
+1 2758 1
+2758 2758 1
+1 2759 1
+2759 2759 1
+1 2760 1
+2760 2760 1
+1 2761 1
+2761 2761 1
+1 2762 1
+2762 2762 1
+1 2763 1
+2763 2763 1
+1 2764 1
+2764 2764 1
+1 2765 1
+2765 2765 1
+1 2766 1
+2766 2766 1
+1 2767 1
+2767 2767 1
+1 2768 1
+2768 2768 1
+1 2769 1
+2769 2769 1
+1 2770 1
+2770 2770 1
+1 2771 1
+2771 2771 1
+1 2772 1
+2772 2772 1
+1 2773 1
+2773 2773 1
+1 2774 1
+2774 2774 1
+1 2775 1
+2775 2775 1
+1 2776 1
+2776 2776 1
+1 2777 1
+2777 2777 1
+1 2778 1
+2778 2778 1
+1 2779 1
+2779 2779 1
+1 2780 1
+2780 2780 1
+1 2781 1
+2781 2781 1
+1 2782 1
+2782 2782 1
+1 2783 1
+2783 2783 1
+1 2784 1
+2784 2784 1
+1 2785 1
+2785 2785 1
+1 2786 1
+2786 2786 1
+1 2787 1
+2787 2787 1
+1 2788 1
+2788 2788 1
+1 2789 1
+2789 2789 1
+1 2790 1
+2790 2790 1
+1 2791 1
+2791 2791 1
+1 2792 1
+2792 2792 1
+1 2793 1
+2793 2793 1
+1 2794 1
+2794 2794 1
+1 2795 1
+2795 2795 1
+1 2796 1
+2796 2796 1
+1 2797 1
+2797 2797 1
+1 2798 1
+2798 2798 1
+1 2799 1
+2799 2799 1
+1 2800 1
+2800 2800 1
+1 2801 1
+2801 2801 1
+1 2802 1
+2802 2802 1
+1 2803 1
+2803 2803 1
+1 2804 1
+2804 2804 1
+1 2805 1
+2805 2805 1
+1 2806 1
+2806 2806 1
+1 2807 1
+2807 2807 1
+1 2808 1
+2808 2808 1
+1 2809 1
+2809 2809 1
+1 2810 1
+2810 2810 1
+1 2811 1
+2811 2811 1
+1 2812 1
+2812 2812 1
+1 2813 1
+2813 2813 1
+1 2814 1
+2814 2814 1
+1 2815 1
+2815 2815 1
+1 2816 1
+2816 2816 1
+1 2817 1
+2817 2817 1
+1 2818 1
+2818 2818 1
+1 2819 1
+2819 2819 1
+1 2820 1
+2820 2820 1
+1 2821 1
+2821 2821 1
+1 2822 1
+2822 2822 1
+1 2823 1
+2823 2823 1
+1 2824 1
+2824 2824 1
+1 2825 1
+2825 2825 1
+1 2826 1
+2826 2826 1
+1 2827 1
+2827 2827 1
+1 2828 1
+2828 2828 1
+1 2829 1
+2829 2829 1
+1 2830 1
+2830 2830 1
+1 2831 1
+2831 2831 1
+1 2832 1
+2832 2832 1
+1 2833 1
+2833 2833 1
+1 2834 1
+2834 2834 1
+1 2835 1
+2835 2835 1
+1 2836 1
+2836 2836 1
+1 2837 1
+2837 2837 1
+1 2838 1
+2838 2838 1
+1 2839 1
+2839 2839 1
+1 2840 1
+2840 2840 1
+1 2841 1
+2841 2841 1
+1 2842 1
+2842 2842 1
+1 2843 1
+2843 2843 1
+1 2844 1
+2844 2844 1
+1 2845 1
+2845 2845 1
+1 2846 1
+2846 2846 1
+1 2847 1
+2847 2847 1
+1 2848 1
+2848 2848 1
+1 2849 1
+2849 2849 1
+1 2850 1
+2850 2850 1
+1 2851 1
+2851 2851 1
+1 2852 1
+2852 2852 1
+1 2853 1
+2853 2853 1
+1 2854 1
+2854 2854 1
+1 2855 1
+2855 2855 1
+1 2856 1
+2856 2856 1
+1 2857 1
+2857 2857 1
+1 2858 1
+2858 2858 1
+1 2859 1
+2859 2859 1
+1 2860 1
+2860 2860 1
+1 2861 1
+2861 2861 1
+1 2862 1
+2862 2862 1
+1 2863 1
+2863 2863 1
+1 2864 1
+2864 2864 1
+1 2865 1
+2865 2865 1
+1 2866 1
+2866 2866 1
+1 2867 1
+2867 2867 1
+1 2868 1
+2868 2868 1
+1 2869 1
+2869 2869 1
+1 2870 1
+2870 2870 1
+1 2871 1
+2871 2871 1
+1 2872 1
+2872 2872 1
+1 2873 1
+2873 2873 1
+1 2874 1
+2874 2874 1
+1 2875 1
+2875 2875 1
+1 2876 1
+2876 2876 1
+1 2877 1
+2877 2877 1
+1 2878 1
+2878 2878 1
+1 2879 1
+2879 2879 1
+1 2880 1
+2880 2880 1
+1 2881 1
+2881 2881 1
+1 2882 1
+2882 2882 1
+1 2883 1
+2883 2883 1
+1 2884 1
+2884 2884 1
+1 2885 1
+2885 2885 1
+1 2886 1
+2886 2886 1
+1 2887 1
+2887 2887 1
+1 2888 1
+2888 2888 1
+1 2889 1
+2889 2889 1
+1 2890 1
+2890 2890 1
+1 2891 1
+2891 2891 1
+1 2892 1
+2892 2892 1
+1 2893 1
+2893 2893 1
+1 2894 1
+2894 2894 1
+1 2895 1
+2895 2895 1
+1 2896 1
+2896 2896 1
+1 2897 1
+2897 2897 1
+1 2898 1
+2898 2898 1
+1 2899 1
+2899 2899 1
+1 2900 1
+2900 2900 1
+1 2901 1
+2901 2901 1
+1 2902 1
+2902 2902 1
+1 2903 1
+2903 2903 1
+1 2904 1
+2904 2904 1
+1 2905 1
+2905 2905 1
+1 2906 1
+2906 2906 1
+1 2907 1
+2907 2907 1
+1 2908 1
+2908 2908 1
+1 2909 1
+2909 2909 1
+1 2910 1
+2910 2910 1
+1 2911 1
+2911 2911 1
+1 2912 1
+2912 2912 1
+1 2913 1
+2913 2913 1
+1 2914 1
+2914 2914 1
+1 2915 1
+2915 2915 1
+1 2916 1
+2916 2916 1
+1 2917 1
+2917 2917 1
+1 2918 1
+2918 2918 1
+1 2919 1
+2919 2919 1
+1 2920 1
+2920 2920 1
+1 2921 1
+2921 2921 1
+1 2922 1
+2922 2922 1
+1 2923 1
+2923 2923 1
+1 2924 1
+2924 2924 1
+1 2925 1
+2925 2925 1
+1 2926 1
+2926 2926 1
+1 2927 1
+2927 2927 1
+1 2928 1
+2928 2928 1
+1 2929 1
+2929 2929 1
+1 2930 1
+2930 2930 1
+1 2931 1
+2931 2931 1
+1 2932 1
+2932 2932 1
+1 2933 1
+2933 2933 1
+1 2934 1
+2934 2934 1
+1 2935 1
+2935 2935 1
+1 2936 1
+2936 2936 1
+1 2937 1
+2937 2937 1
+1 2938 1
+2938 2938 1
+1 2939 1
+2939 2939 1
+1 2940 1
+2940 2940 1
+1 2941 1
+2941 2941 1
+1 2942 1
+2942 2942 1
+1 2943 1
+2943 2943 1
+1 2944 1
+2944 2944 1
+1 2945 1
+2945 2945 1
+1 2946 1
+2946 2946 1
+1 2947 1
+2947 2947 1
+1 2948 1
+2948 2948 1
+1 2949 1
+2949 2949 1
+1 2950 1
+2950 2950 1
+1 2951 1
+2951 2951 1
+1 2952 1
+2952 2952 1
+1 2953 1
+2953 2953 1
+1 2954 1
+2954 2954 1
+1 2955 1
+2955 2955 1
+1 2956 1
+2956 2956 1
+1 2957 1
+2957 2957 1
+1 2958 1
+2958 2958 1
+1 2959 1
+2959 2959 1
+1 2960 1
+2960 2960 1
+1 2961 1
+2961 2961 1
+1 2962 1
+2962 2962 1
+1 2963 1
+2963 2963 1
+1 2964 1
+2964 2964 1
+1 2965 1
+2965 2965 1
+1 2966 1
+2966 2966 1
+1 2967 1
+2967 2967 1
+1 2968 1
+2968 2968 1
+1 2969 1
+2969 2969 1
+1 2970 1
+2970 2970 1
+1 2971 1
+2971 2971 1
+1 2972 1
+2972 2972 1
+1 2973 1
+2973 2973 1
+1 2974 1
+2974 2974 1
+1 2975 1
+2975 2975 1
+1 2976 1
+2976 2976 1
+1 2977 1
+2977 2977 1
+1 2978 1
+2978 2978 1
+1 2979 1
+2979 2979 1
+1 2980 1
+2980 2980 1
+1 2981 1
+2981 2981 1
+1 2982 1
+2982 2982 1
+1 2983 1
+2983 2983 1
+1 2984 1
+2984 2984 1
+1 2985 1
+2985 2985 1
+1 2986 1
+2986 2986 1
+1 2987 1
+2987 2987 1
+1 2988 1
+2988 2988 1
+1 2989 1
+2989 2989 1
+1 2990 1
+2990 2990 1
+1 2991 1
+2991 2991 1
+1 2992 1
+2992 2992 1
+1 2993 1
+2993 2993 1
+1 2994 1
+2994 2994 1
+1 2995 1
+2995 2995 1
+1 2996 1
+2996 2996 1
+1 2997 1
+2997 2997 1
+1 2998 1
+2998 2998 1
+1 2999 1
+2999 2999 1
+1 3000 1
+3000 3000 1
+1 3001 1
+3001 3001 1
+1 3002 1
+3002 3002 1
+1 3003 1
+3003 3003 1
+1 3004 1
+3004 3004 1
+1 3005 1
+3005 3005 1
+1 3006 1
+3006 3006 1
+1 3007 1
+3007 3007 1
+1 3008 1
+3008 3008 1
+1 3009 1
+3009 3009 1
+1 3010 1
+3010 3010 1
+1 3011 1
+3011 3011 1
+1 3012 1
+3012 3012 1
+1 3013 1
+3013 3013 1
+1 3014 1
+3014 3014 1
+1 3015 1
+3015 3015 1
+1 3016 1
+3016 3016 1
+1 3017 1
+3017 3017 1
+1 3018 1
+3018 3018 1
+1 3019 1
+3019 3019 1
+1 3020 1
+3020 3020 1
+1 3021 1
+3021 3021 1
+1 3022 1
+3022 3022 1
+1 3023 1
+3023 3023 1
+1 3024 1
+3024 3024 1
+1 3025 1
+3025 3025 1
+1 3026 1
+3026 3026 1
+1 3027 1
+3027 3027 1
+1 3028 1
+3028 3028 1
+1 3029 1
+3029 3029 1
+1 3030 1
+3030 3030 1
+1 3031 1
+3031 3031 1
+1 3032 1
+3032 3032 1
+1 3033 1
+3033 3033 1
+1 3034 1
+3034 3034 1
+1 3035 1
+3035 3035 1
+1 3036 1
+3036 3036 1
+1 3037 1
+3037 3037 1
+1 3038 1
+3038 3038 1
+1 3039 1
+3039 3039 1
+1 3040 1
+3040 3040 1
+1 3041 1
+3041 3041 1
+1 3042 1
+3042 3042 1
+1 3043 1
+3043 3043 1
+1 3044 1
+3044 3044 1
+1 3045 1
+3045 3045 1
+1 3046 1
+3046 3046 1
+1 3047 1
+3047 3047 1
+1 3048 1
+3048 3048 1
+1 3049 1
+3049 3049 1
+1 3050 1
+3050 3050 1
+1 3051 1
+3051 3051 1
+1 3052 1
+3052 3052 1
+1 3053 1
+3053 3053 1
+1 3054 1
+3054 3054 1
+1 3055 1
+3055 3055 1
+1 3056 1
+3056 3056 1
+1 3057 1
+3057 3057 1
+1 3058 1
+3058 3058 1
+1 3059 1
+3059 3059 1
+1 3060 1
+3060 3060 1
+1 3061 1
+3061 3061 1
+1 3062 1
+3062 3062 1
+1 3063 1
+3063 3063 1
+1 3064 1
+3064 3064 1
+1 3065 1
+3065 3065 1
+1 3066 1
+3066 3066 1
+1 3067 1
+3067 3067 1
+1 3068 1
+3068 3068 1
+1 3069 1
+3069 3069 1
+1 3070 1
+3070 3070 1
+1 3071 1
+3071 3071 1
+1 3072 1
+3072 3072 1
+1 3073 1
+3073 3073 1
+1 3074 1
+3074 3074 1
+1 3075 1
+3075 3075 1
+1 3076 1
+3076 3076 1
+1 3077 1
+3077 3077 1
+1 3078 1
+3078 3078 1
+1 3079 1
+3079 3079 1
+1 3080 1
+3080 3080 1
+1 3081 1
+3081 3081 1
+1 3082 1
+3082 3082 1
+1 3083 1
+3083 3083 1
+1 3084 1
+3084 3084 1
+1 3085 1
+3085 3085 1
+1 3086 1
+3086 3086 1
+1 3087 1
+3087 3087 1
+1 3088 1
+3088 3088 1
+1 3089 1
+3089 3089 1
+1 3090 1
+3090 3090 1
+1 3091 1
+3091 3091 1
+1 3092 1
+3092 3092 1
+1 3093 1
+3093 3093 1
+1 3094 1
+3094 3094 1
+1 3095 1
+3095 3095 1
+1 3096 1
+3096 3096 1
+1 3097 1
+3097 3097 1
+1 3098 1
+3098 3098 1
+1 3099 1
+3099 3099 1
+1 3100 1
+3100 3100 1
+1 3101 1
+3101 3101 1
+1 3102 1
+3102 3102 1
+1 3103 1
+3103 3103 1
+1 3104 1
+3104 3104 1
+1 3105 1
+3105 3105 1
+1 3106 1
+3106 3106 1
+1 3107 1
+3107 3107 1
+1 3108 1
+3108 3108 1
+1 3109 1
+3109 3109 1
+1 3110 1
+3110 3110 1
+1 3111 1
+3111 3111 1
+1 3112 1
+3112 3112 1
+1 3113 1
+3113 3113 1
+1 3114 1
+3114 3114 1
+1 3115 1
+3115 3115 1
+1 3116 1
+3116 3116 1
+1 3117 1
+3117 3117 1
+1 3118 1
+3118 3118 1
+1 3119 1
+3119 3119 1
+1 3120 1
+3120 3120 1
+1 3121 1
+3121 3121 1
+1 3122 1
+3122 3122 1
+1 3123 1
+3123 3123 1
+1 3124 1
+3124 3124 1
+1 3125 1
+3125 3125 1
+1 3126 1
+3126 3126 1
+1 3127 1
+3127 3127 1
+1 3128 1
+3128 3128 1
+1 3129 1
+3129 3129 1
+1 3130 1
+3130 3130 1
+1 3131 1
+3131 3131 1
+1 3132 1
+3132 3132 1
+1 3133 1
+3133 3133 1
+1 3134 1
+3134 3134 1
+1 3135 1
+3135 3135 1
+1 3136 1
+3136 3136 1
+1 3137 1
+3137 3137 1
+1 3138 1
+3138 3138 1
+1 3139 1
+3139 3139 1
+1 3140 1
+3140 3140 1
+1 3141 1
+3141 3141 1
+1 3142 1
+3142 3142 1
+1 3143 1
+3143 3143 1
+1 3144 1
+3144 3144 1
+1 3145 1
+3145 3145 1
+1 3146 1
+3146 3146 1
+1 3147 1
+3147 3147 1
+1 3148 1
+3148 3148 1
+1 3149 1
+3149 3149 1
+1 3150 1
+3150 3150 1
+1 3151 1
+3151 3151 1
+1 3152 1
+3152 3152 1
+1 3153 1
+3153 3153 1
+1 3154 1
+3154 3154 1
+1 3155 1
+3155 3155 1
+1 3156 1
+3156 3156 1
+1 3157 1
+3157 3157 1
+1 3158 1
+3158 3158 1
+1 3159 1
+3159 3159 1
+1 3160 1
+3160 3160 1
+1 3161 1
+3161 3161 1
+1 3162 1
+3162 3162 1
+1 3163 1
+3163 3163 1
+1 3164 1
+3164 3164 1
+1 3165 1
+3165 3165 1
+1 3166 1
+3166 3166 1
+1 3167 1
+3167 3167 1
+1 3168 1
+3168 3168 1
+1 3169 1
+3169 3169 1
+1 3170 1
+3170 3170 1
+1 3171 1
+3171 3171 1
+1 3172 1
+3172 3172 1
+1 3173 1
+3173 3173 1
+1 3174 1
+3174 3174 1
+1 3175 1
+3175 3175 1
+1 3176 1
+3176 3176 1
+1 3177 1
+3177 3177 1
+1 3178 1
+3178 3178 1
+1 3179 1
+3179 3179 1
+1 3180 1
+3180 3180 1
+1 3181 1
+3181 3181 1
+1 3182 1
+3182 3182 1
+1 3183 1
+3183 3183 1
+1 3184 1
+3184 3184 1
+1 3185 1
+3185 3185 1
+1 3186 1
+3186 3186 1
+1 3187 1
+3187 3187 1
+1 3188 1
+3188 3188 1
+1 3189 1
+3189 3189 1
+1 3190 1
+3190 3190 1
+1 3191 1
+3191 3191 1
+1 3192 1
+3192 3192 1
+1 3193 1
+3193 3193 1
+1 3194 1
+3194 3194 1
+1 3195 1
+3195 3195 1
+1 3196 1
+3196 3196 1
+1 3197 1
+3197 3197 1
+1 3198 1
+3198 3198 1
+1 3199 1
+3199 3199 1
+1 3200 1
+3200 3200 1
+1 3201 1
+3201 3201 1
+1 3202 1
+3202 3202 1
+1 3203 1
+3203 3203 1
+1 3204 1
+3204 3204 1
+1 3205 1
+3205 3205 1
+1 3206 1
+3206 3206 1
+1 3207 1
+3207 3207 1
+1 3208 1
+3208 3208 1
+1 3209 1
+3209 3209 1
+1 3210 1
+3210 3210 1
+1 3211 1
+3211 3211 1
+1 3212 1
+3212 3212 1
+1 3213 1
+3213 3213 1
+1 3214 1
+3214 3214 1
+1 3215 1
+3215 3215 1
+1 3216 1
+3216 3216 1
+1 3217 1
+3217 3217 1
+1 3218 1
+3218 3218 1
+1 3219 1
+3219 3219 1
+1 3220 1
+3220 3220 1
+1 3221 1
+3221 3221 1
+1 3222 1
+3222 3222 1
+1 3223 1
+3223 3223 1
+1 3224 1
+3224 3224 1
+1 3225 1
+3225 3225 1
+1 3226 1
+3226 3226 1
+1 3227 1
+3227 3227 1
+1 3228 1
+3228 3228 1
+1 3229 1
+3229 3229 1
+1 3230 1
+3230 3230 1
+1 3231 1
+3231 3231 1
+1 3232 1
+3232 3232 1
+1 3233 1
+3233 3233 1
+1 3234 1
+3234 3234 1
+1 3235 1
+3235 3235 1
+1 3236 1
+3236 3236 1
+1 3237 1
+3237 3237 1
+1 3238 1
+3238 3238 1
+1 3239 1
+3239 3239 1
+1 3240 1
+3240 3240 1
+1 3241 1
+3241 3241 1
+1 3242 1
+3242 3242 1
+1 3243 1
+3243 3243 1
+1 3244 1
+3244 3244 1
+1 3245 1
+3245 3245 1
+1 3246 1
+3246 3246 1
+1 3247 1
+3247 3247 1
+1 3248 1
+3248 3248 1
+1 3249 1
+3249 3249 1
+1 3250 1
+3250 3250 1
+1 3251 1
+3251 3251 1
+1 3252 1
+3252 3252 1
+1 3253 1
+3253 3253 1
+1 3254 1
+3254 3254 1
+1 3255 1
+3255 3255 1
+1 3256 1
+3256 3256 1
+1 3257 1
+3257 3257 1
+1 3258 1
+3258 3258 1
+1 3259 1
+3259 3259 1
+1 3260 1
+3260 3260 1
+1 3261 1
+3261 3261 1
+1 3262 1
+3262 3262 1
+1 3263 1
+3263 3263 1
+1 3264 1
+3264 3264 1
+1 3265 1
+3265 3265 1
+1 3266 1
+3266 3266 1
+1 3267 1
+3267 3267 1
+1 3268 1
+3268 3268 1
+1 3269 1
+3269 3269 1
+1 3270 1
+3270 3270 1
+1 3271 1
+3271 3271 1
+1 3272 1
+3272 3272 1
+1 3273 1
+3273 3273 1
+1 3274 1
+3274 3274 1
+1 3275 1
+3275 3275 1
+1 3276 1
+3276 3276 1
+1 3277 1
+3277 3277 1
+1 3278 1
+3278 3278 1
+1 3279 1
+3279 3279 1
+1 3280 1
+3280 3280 1
+1 3281 1
+3281 3281 1
+1 3282 1
+3282 3282 1
+1 3283 1
+3283 3283 1
+1 3284 1
+3284 3284 1
+1 3285 1
+3285 3285 1
+1 3286 1
+3286 3286 1
+1 3287 1
+3287 3287 1
+1 3288 1
+3288 3288 1
+1 3289 1
+3289 3289 1
+1 3290 1
+3290 3290 1
+1 3291 1
+3291 3291 1
+1 3292 1
+3292 3292 1
+1 3293 1
+3293 3293 1
+1 3294 1
+3294 3294 1
+1 3295 1
+3295 3295 1
+1 3296 1
+3296 3296 1
+1 3297 1
+3297 3297 1
+1 3298 1
+3298 3298 1
+1 3299 1
+3299 3299 1
+1 3300 1
+3300 3300 1
+1 3301 1
+3301 3301 1
+1 3302 1
+3302 3302 1
+1 3303 1
+3303 3303 1
+1 3304 1
+3304 3304 1
+1 3305 1
+3305 3305 1
+1 3306 1
+3306 3306 1
+1 3307 1
+3307 3307 1
+1 3308 1
+3308 3308 1
+1 3309 1
+3309 3309 1
+1 3310 1
+3310 3310 1
+1 3311 1
+3311 3311 1
+1 3312 1
+3312 3312 1
+1 3313 1
+3313 3313 1
+1 3314 1
+3314 3314 1
+1 3315 1
+3315 3315 1
+1 3316 1
+3316 3316 1
+1 3317 1
+3317 3317 1
+1 3318 1
+3318 3318 1
+1 3319 1
+3319 3319 1
+1 3320 1
+3320 3320 1
+1 3321 1
+3321 3321 1
+1 3322 1
+3322 3322 1
+1 3323 1
+3323 3323 1
+1 3324 1
+3324 3324 1
+1 3325 1
+3325 3325 1
+1 3326 1
+3326 3326 1
+1 3327 1
+3327 3327 1
+1 3328 1
+3328 3328 1
+1 3329 1
+3329 3329 1
+1 3330 1
+3330 3330 1
+1 3331 1
+3331 3331 1
+1 3332 1
+3332 3332 1
+1 3333 1
+3333 3333 1
+1 3334 1
+3334 3334 1
+1 3335 1
+3335 3335 1
+1 3336 1
+3336 3336 1
+1 3337 1
+3337 3337 1
+1 3338 1
+3338 3338 1
+1 3339 1
+3339 3339 1
+1 3340 1
+3340 3340 1
+1 3341 1
+3341 3341 1
+1 3342 1
+3342 3342 1
+1 3343 1
+3343 3343 1
+1 3344 1
+3344 3344 1
+1 3345 1
+3345 3345 1
+1 3346 1
+3346 3346 1
+1 3347 1
+3347 3347 1
+1 3348 1
+3348 3348 1
+1 3349 1
+3349 3349 1
+1 3350 1
+3350 3350 1
+1 3351 1
+3351 3351 1
+1 3352 1
+3352 3352 1
+1 3353 1
+3353 3353 1
+1 3354 1
+3354 3354 1
+1 3355 1
+3355 3355 1
+1 3356 1
+3356 3356 1
+1 3357 1
+3357 3357 1
+1 3358 1
+3358 3358 1
+1 3359 1
+3359 3359 1
+1 3360 1
+3360 3360 1
+1 3361 1
+3361 3361 1
+1 3362 1
+3362 3362 1
+1 3363 1
+3363 3363 1
+1 3364 1
+3364 3364 1
+1 3365 1
+3365 3365 1
+1 3366 1
+3366 3366 1
+1 3367 1
+3367 3367 1
+1 3368 1
+3368 3368 1
+1 3369 1
+3369 3369 1
+1 3370 1
+3370 3370 1
+1 3371 1
+3371 3371 1
+1 3372 1
+3372 3372 1
+1 3373 1
+3373 3373 1
+1 3374 1
+3374 3374 1
+1 3375 1
+3375 3375 1
+1 3376 1
+3376 3376 1
+1 3377 1
+3377 3377 1
+1 3378 1
+3378 3378 1
+1 3379 1
+3379 3379 1
+1 3380 1
+3380 3380 1
+1 3381 1
+3381 3381 1
+1 3382 1
+3382 3382 1
+1 3383 1
+3383 3383 1
+1 3384 1
+3384 3384 1
+1 3385 1
+3385 3385 1
+1 3386 1
+3386 3386 1
+1 3387 1
+3387 3387 1
+1 3388 1
+3388 3388 1
+1 3389 1
+3389 3389 1
+1 3390 1
+3390 3390 1
+1 3391 1
+3391 3391 1
+1 3392 1
+3392 3392 1
+1 3393 1
+3393 3393 1
+1 3394 1
+3394 3394 1
+1 3395 1
+3395 3395 1
+1 3396 1
+3396 3396 1
+1 3397 1
+3397 3397 1
+1 3398 1
+3398 3398 1
+1 3399 1
+3399 3399 1
+1 3400 1
+3400 3400 1
+1 3401 1
+3401 3401 1
+1 3402 1
+3402 3402 1
+1 3403 1
+3403 3403 1
+1 3404 1
+3404 3404 1
+1 3405 1
+3405 3405 1
+1 3406 1
+3406 3406 1
+1 3407 1
+3407 3407 1
+1 3408 1
+3408 3408 1
+1 3409 1
+3409 3409 1
+1 3410 1
+3410 3410 1
+1 3411 1
+3411 3411 1
+1 3412 1
+3412 3412 1
+1 3413 1
+3413 3413 1
+1 3414 1
+3414 3414 1
+1 3415 1
+3415 3415 1
+1 3416 1
+3416 3416 1
+1 3417 1
+3417 3417 1
+1 3418 1
+3418 3418 1
+1 3419 1
+3419 3419 1
+1 3420 1
+3420 3420 1
+1 3421 1
+3421 3421 1
+1 3422 1
+3422 3422 1
+1 3423 1
+3423 3423 1
+1 3424 1
+3424 3424 1
+1 3425 1
+3425 3425 1
+1 3426 1
+3426 3426 1
+1 3427 1
+3427 3427 1
+1 3428 1
+3428 3428 1
+1 3429 1
+3429 3429 1
+1 3430 1
+3430 3430 1
+1 3431 1
+3431 3431 1
+1 3432 1
+3432 3432 1
+1 3433 1
+3433 3433 1
+1 3434 1
+3434 3434 1
+1 3435 1
+3435 3435 1
+1 3436 1
+3436 3436 1
+1 3437 1
+3437 3437 1
+1 3438 1
+3438 3438 1
+1 3439 1
+3439 3439 1
+1 3440 1
+3440 3440 1
+1 3441 1
+3441 3441 1
+1 3442 1
+3442 3442 1
+1 3443 1
+3443 3443 1
+1 3444 1
+3444 3444 1
+1 3445 1
+3445 3445 1
+1 3446 1
+3446 3446 1
+1 3447 1
+3447 3447 1
+1 3448 1
+3448 3448 1
+1 3449 1
+3449 3449 1
+1 3450 1
+3450 3450 1
+1 3451 1
+3451 3451 1
+1 3452 1
+3452 3452 1
+1 3453 1
+3453 3453 1
+1 3454 1
+3454 3454 1
+1 3455 1
+3455 3455 1
+1 3456 1
+3456 3456 1
+1 3457 1
+3457 3457 1
+1 3458 1
+3458 3458 1
+1 3459 1
+3459 3459 1
+1 3460 1
+3460 3460 1
+1 3461 1
+3461 3461 1
+1 3462 1
+3462 3462 1
+1 3463 1
+3463 3463 1
+1 3464 1
+3464 3464 1
+1 3465 1
+3465 3465 1
+1 3466 1
+3466 3466 1
+1 3467 1
+3467 3467 1
+1 3468 1
+3468 3468 1
+1 3469 1
+3469 3469 1
+1 3470 1
+3470 3470 1
+1 3471 1
+3471 3471 1
+1 3472 1
+3472 3472 1
+1 3473 1
+3473 3473 1
+1 3474 1
+3474 3474 1
+1 3475 1
+3475 3475 1
+1 3476 1
+3476 3476 1
+1 3477 1
+3477 3477 1
+1 3478 1
+3478 3478 1
+1 3479 1
+3479 3479 1
+1 3480 1
+3480 3480 1
+1 3481 1
+3481 3481 1
+1 3482 1
+3482 3482 1
+1 3483 1
+3483 3483 1
+1 3484 1
+3484 3484 1
+1 3485 1
+3485 3485 1
+1 3486 1
+3486 3486 1
+1 3487 1
+3487 3487 1
+1 3488 1
+3488 3488 1
+1 3489 1
+3489 3489 1
+1 3490 1
+3490 3490 1
+1 3491 1
+3491 3491 1
+1 3492 1
+3492 3492 1
+1 3493 1
+3493 3493 1
+1 3494 1
+3494 3494 1
+1 3495 1
+3495 3495 1
+1 3496 1
+3496 3496 1
+1 3497 1
+3497 3497 1
+1 3498 1
+3498 3498 1
+1 3499 1
+3499 3499 1
+1 3500 1
+3500 3500 1
+1 3501 1
+3501 3501 1
+1 3502 1
+3502 3502 1
+1 3503 1
+3503 3503 1
+1 3504 1
+3504 3504 1
+1 3505 1
+3505 3505 1
+1 3506 1
+3506 3506 1
+1 3507 1
+3507 3507 1
+1 3508 1
+3508 3508 1
+1 3509 1
+3509 3509 1
+1 3510 1
+3510 3510 1
+1 3511 1
+3511 3511 1
+1 3512 1
+3512 3512 1
+1 3513 1
+3513 3513 1
+1 3514 1
+3514 3514 1
+1 3515 1
+3515 3515 1
+1 3516 1
+3516 3516 1
+1 3517 1
+3517 3517 1
+1 3518 1
+3518 3518 1
+1 3519 1
+3519 3519 1
+1 3520 1
+3520 3520 1
+1 3521 1
+3521 3521 1
+1 3522 1
+3522 3522 1
+1 3523 1
+3523 3523 1
+1 3524 1
+3524 3524 1
+1 3525 1
+3525 3525 1
+1 3526 1
+3526 3526 1
+1 3527 1
+3527 3527 1
+1 3528 1
+3528 3528 1
+1 3529 1
+3529 3529 1
+1 3530 1
+3530 3530 1
+1 3531 1
+3531 3531 1
+1 3532 1
+3532 3532 1
+1 3533 1
+3533 3533 1
+1 3534 1
+3534 3534 1
+1 3535 1
+3535 3535 1
+1 3536 1
+3536 3536 1
+1 3537 1
+3537 3537 1
+1 3538 1
+3538 3538 1
+1 3539 1
+3539 3539 1
+1 3540 1
+3540 3540 1
+1 3541 1
+3541 3541 1
+1 3542 1
+3542 3542 1
+1 3543 1
+3543 3543 1
+1 3544 1
+3544 3544 1
+1 3545 1
+3545 3545 1
+1 3546 1
+3546 3546 1
+1 3547 1
+3547 3547 1
+1 3548 1
+3548 3548 1
+1 3549 1
+3549 3549 1
+1 3550 1
+3550 3550 1
+1 3551 1
+3551 3551 1
+1 3552 1
+3552 3552 1
+1 3553 1
+3553 3553 1
+1 3554 1
+3554 3554 1
+1 3555 1
+3555 3555 1
+1 3556 1
+3556 3556 1
+1 3557 1
+3557 3557 1
+1 3558 1
+3558 3558 1
+1 3559 1
+3559 3559 1
+1 3560 1
+3560 3560 1
+1 3561 1
+3561 3561 1
+1 3562 1
+3562 3562 1
+1 3563 1
+3563 3563 1
+1 3564 1
+3564 3564 1
+1 3565 1
+3565 3565 1
+1 3566 1
+3566 3566 1
+1 3567 1
+3567 3567 1
+1 3568 1
+3568 3568 1
+1 3569 1
+3569 3569 1
+1 3570 1
+3570 3570 1
+1 3571 1
+3571 3571 1
+1 3572 1
+3572 3572 1
+1 3573 1
+3573 3573 1
+1 3574 1
+3574 3574 1
+1 3575 1
+3575 3575 1
+1 3576 1
+3576 3576 1
+1 3577 1
+3577 3577 1
+1 3578 1
+3578 3578 1
+1 3579 1
+3579 3579 1
+1 3580 1
+3580 3580 1
+1 3581 1
+3581 3581 1
+1 3582 1
+3582 3582 1
+1 3583 1
+3583 3583 1
+1 3584 1
+3584 3584 1
+1 3585 1
+3585 3585 1
+1 3586 1
+3586 3586 1
+1 3587 1
+3587 3587 1
+1 3588 1
+3588 3588 1
+1 3589 1
+3589 3589 1
+1 3590 1
+3590 3590 1
+1 3591 1
+3591 3591 1
+1 3592 1
+3592 3592 1
+1 3593 1
+3593 3593 1
+1 3594 1
+3594 3594 1
+1 3595 1
+3595 3595 1
+1 3596 1
+3596 3596 1
+1 3597 1
+3597 3597 1
+1 3598 1
+3598 3598 1
+1 3599 1
+3599 3599 1
+1 3600 1
+3600 3600 1
+1 3601 1
+3601 3601 1
+1 3602 1
+3602 3602 1
+1 3603 1
+3603 3603 1
+1 3604 1
+3604 3604 1
+1 3605 1
+3605 3605 1
+1 3606 1
+3606 3606 1
+1 3607 1
+3607 3607 1
+1 3608 1
+3608 3608 1
+1 3609 1
+3609 3609 1
+1 3610 1
+3610 3610 1
+1 3611 1
+3611 3611 1
+1 3612 1
+3612 3612 1
+1 3613 1
+3613 3613 1
+1 3614 1
+3614 3614 1
+1 3615 1
+3615 3615 1
+1 3616 1
+3616 3616 1
+1 3617 1
+3617 3617 1
+1 3618 1
+3618 3618 1
+1 3619 1
+3619 3619 1
+1 3620 1
+3620 3620 1
+1 3621 1
+3621 3621 1
+1 3622 1
+3622 3622 1
+1 3623 1
+3623 3623 1
+1 3624 1
+3624 3624 1
+1 3625 1
+3625 3625 1
+1 3626 1
+3626 3626 1
+1 3627 1
+3627 3627 1
+1 3628 1
+3628 3628 1
+1 3629 1
+3629 3629 1
+1 3630 1
+3630 3630 1
+1 3631 1
+3631 3631 1
+1 3632 1
+3632 3632 1
+1 3633 1
+3633 3633 1
+1 3634 1
+3634 3634 1
+1 3635 1
+3635 3635 1
+1 3636 1
+3636 3636 1
+1 3637 1
+3637 3637 1
+1 3638 1
+3638 3638 1
+1 3639 1
+3639 3639 1
+1 3640 1
+3640 3640 1
+1 3641 1
+3641 3641 1
+1 3642 1
+3642 3642 1
+1 3643 1
+3643 3643 1
+1 3644 1
+3644 3644 1
+1 3645 1
+3645 3645 1
+1 3646 1
+3646 3646 1
+1 3647 1
+3647 3647 1
+1 3648 1
+3648 3648 1
+1 3649 1
+3649 3649 1
+1 3650 1
+3650 3650 1
+1 3651 1
+3651 3651 1
+1 3652 1
+3652 3652 1
+1 3653 1
+3653 3653 1
+1 3654 1
+3654 3654 1
+1 3655 1
+3655 3655 1
+1 3656 1
+3656 3656 1
+1 3657 1
+3657 3657 1
+1 3658 1
+3658 3658 1
+1 3659 1
+3659 3659 1
+1 3660 1
+3660 3660 1
+1 3661 1
+3661 3661 1
+1 3662 1
+3662 3662 1
+1 3663 1
+3663 3663 1
+1 3664 1
+3664 3664 1
+1 3665 1
+3665 3665 1
+1 3666 1
+3666 3666 1
+1 3667 1
+3667 3667 1
+1 3668 1
+3668 3668 1
+1 3669 1
+3669 3669 1
+1 3670 1
+3670 3670 1
+1 3671 1
+3671 3671 1
+1 3672 1
+3672 3672 1
+1 3673 1
+3673 3673 1
+1 3674 1
+3674 3674 1
+1 3675 1
+3675 3675 1
+1 3676 1
+3676 3676 1
+1 3677 1
+3677 3677 1
+1 3678 1
+3678 3678 1
+1 3679 1
+3679 3679 1
+1 3680 1
+3680 3680 1
+1 3681 1
+3681 3681 1
+1 3682 1
+3682 3682 1
+1 3683 1
+3683 3683 1
+1 3684 1
+3684 3684 1
+1 3685 1
+3685 3685 1
+1 3686 1
+3686 3686 1
+1 3687 1
+3687 3687 1
+1 3688 1
+3688 3688 1
+1 3689 1
+3689 3689 1
+1 3690 1
+3690 3690 1
+1 3691 1
+3691 3691 1
+1 3692 1
+3692 3692 1
+1 3693 1
+3693 3693 1
+1 3694 1
+3694 3694 1
+1 3695 1
+3695 3695 1
+1 3696 1
+3696 3696 1
+1 3697 1
+3697 3697 1
+1 3698 1
+3698 3698 1
+1 3699 1
+3699 3699 1
+1 3700 1
+3700 3700 1
+1 3701 1
+3701 3701 1
+1 3702 1
+3702 3702 1
+1 3703 1
+3703 3703 1
+1 3704 1
+3704 3704 1
+1 3705 1
+3705 3705 1
+1 3706 1
+3706 3706 1
+1 3707 1
+3707 3707 1
+1 3708 1
+3708 3708 1
+1 3709 1
+3709 3709 1
+1 3710 1
+3710 3710 1
+1 3711 1
+3711 3711 1
+1 3712 1
+3712 3712 1
+1 3713 1
+3713 3713 1
+1 3714 1
+3714 3714 1
+1 3715 1
+3715 3715 1
+1 3716 1
+3716 3716 1
+1 3717 1
+3717 3717 1
+1 3718 1
+3718 3718 1
+1 3719 1
+3719 3719 1
+1 3720 1
+3720 3720 1
+1 3721 1
+3721 3721 1
+1 3722 1
+3722 3722 1
+1 3723 1
+3723 3723 1
+1 3724 1
+3724 3724 1
+1 3725 1
+3725 3725 1
+1 3726 1
+3726 3726 1
+1 3727 1
+3727 3727 1
+1 3728 1
+3728 3728 1
+1 3729 1
+3729 3729 1
+1 3730 1
+3730 3730 1
+1 3731 1
+3731 3731 1
+1 3732 1
+3732 3732 1
+1 3733 1
+3733 3733 1
+1 3734 1
+3734 3734 1
+1 3735 1
+3735 3735 1
+1 3736 1
+3736 3736 1
+1 3737 1
+3737 3737 1
+1 3738 1
+3738 3738 1
+1 3739 1
+3739 3739 1
+1 3740 1
+3740 3740 1
+1 3741 1
+3741 3741 1
+1 3742 1
+3742 3742 1
+1 3743 1
+3743 3743 1
+1 3744 1
+3744 3744 1
+1 3745 1
+3745 3745 1
+1 3746 1
+3746 3746 1
+1 3747 1
+3747 3747 1
+1 3748 1
+3748 3748 1
+1 3749 1
+3749 3749 1
+1 3750 1
+3750 3750 1
+1 3751 1
+3751 3751 1
+1 3752 1
+3752 3752 1
+1 3753 1
+3753 3753 1
+1 3754 1
+3754 3754 1
+1 3755 1
+3755 3755 1
+1 3756 1
+3756 3756 1
+1 3757 1
+3757 3757 1
+1 3758 1
+3758 3758 1
+1 3759 1
+3759 3759 1
+1 3760 1
+3760 3760 1
+1 3761 1
+3761 3761 1
+1 3762 1
+3762 3762 1
+1 3763 1
+3763 3763 1
+1 3764 1
+3764 3764 1
+1 3765 1
+3765 3765 1
+1 3766 1
+3766 3766 1
+1 3767 1
+3767 3767 1
+1 3768 1
+3768 3768 1
+1 3769 1
+3769 3769 1
+1 3770 1
+3770 3770 1
+1 3771 1
+3771 3771 1
+1 3772 1
+3772 3772 1
+1 3773 1
+3773 3773 1
+1 3774 1
+3774 3774 1
+1 3775 1
+3775 3775 1
+1 3776 1
+3776 3776 1
+1 3777 1
+3777 3777 1
+1 3778 1
+3778 3778 1
+1 3779 1
+3779 3779 1
+1 3780 1
+3780 3780 1
+1 3781 1
+3781 3781 1
+1 3782 1
+3782 3782 1
+1 3783 1
+3783 3783 1
+1 3784 1
+3784 3784 1
+1 3785 1
+3785 3785 1
+1 3786 1
+3786 3786 1
+1 3787 1
+3787 3787 1
+1 3788 1
+3788 3788 1
+1 3789 1
+3789 3789 1
+1 3790 1
+3790 3790 1
+1 3791 1
+3791 3791 1
+1 3792 1
+3792 3792 1
+1 3793 1
+3793 3793 1
+1 3794 1
+3794 3794 1
+1 3795 1
+3795 3795 1
+1 3796 1
+3796 3796 1
+1 3797 1
+3797 3797 1
+1 3798 1
+3798 3798 1
+1 3799 1
+3799 3799 1
+1 3800 1
+3800 3800 1
+1 3801 1
+3801 3801 1
+1 3802 1
+3802 3802 1
+1 3803 1
+3803 3803 1
+1 3804 1
+3804 3804 1
+1 3805 1
+3805 3805 1
+1 3806 1
+3806 3806 1
+1 3807 1
+3807 3807 1
+1 3808 1
+3808 3808 1
+1 3809 1
+3809 3809 1
+1 3810 1
+3810 3810 1
+1 3811 1
+3811 3811 1
+1 3812 1
+3812 3812 1
+1 3813 1
+3813 3813 1
+1 3814 1
+3814 3814 1
+1 3815 1
+3815 3815 1
+1 3816 1
+3816 3816 1
+1 3817 1
+3817 3817 1
+1 3818 1
+3818 3818 1
+1 3819 1
+3819 3819 1
+1 3820 1
+3820 3820 1
+1 3821 1
+3821 3821 1
+1 3822 1
+3822 3822 1
+1 3823 1
+3823 3823 1
+1 3824 1
+3824 3824 1
+1 3825 1
+3825 3825 1
+1 3826 1
+3826 3826 1
+1 3827 1
+3827 3827 1
+1 3828 1
+3828 3828 1
+1 3829 1
+3829 3829 1
+1 3830 1
+3830 3830 1
+1 3831 1
+3831 3831 1
+1 3832 1
+3832 3832 1
+1 3833 1
+3833 3833 1
+1 3834 1
+3834 3834 1
+1 3835 1
+3835 3835 1
+1 3836 1
+3836 3836 1
+1 3837 1
+3837 3837 1
+1 3838 1
+3838 3838 1
+1 3839 1
+3839 3839 1
+1 3840 1
+3840 3840 1
+1 3841 1
+3841 3841 1
+1 3842 1
+3842 3842 1
+1 3843 1
+3843 3843 1
+1 3844 1
+3844 3844 1
+1 3845 1
+3845 3845 1
+1 3846 1
+3846 3846 1
+1 3847 1
+3847 3847 1
+1 3848 1
+3848 3848 1
+1 3849 1
+3849 3849 1
+1 3850 1
+3850 3850 1
+1 3851 1
+3851 3851 1
+1 3852 1
+3852 3852 1
+1 3853 1
+3853 3853 1
+1 3854 1
+3854 3854 1
+1 3855 1
+3855 3855 1
+1 3856 1
+3856 3856 1
+1 3857 1
+3857 3857 1
+1 3858 1
+3858 3858 1
+1 3859 1
+3859 3859 1
+1 3860 1
+3860 3860 1
+1 3861 1
+3861 3861 1
+1 3862 1
+3862 3862 1
+1 3863 1
+3863 3863 1
+1 3864 1
+3864 3864 1
+1 3865 1
+3865 3865 1
+1 3866 1
+3866 3866 1
+1 3867 1
+3867 3867 1
+1 3868 1
+3868 3868 1
+1 3869 1
+3869 3869 1
+1 3870 1
+3870 3870 1
+1 3871 1
+3871 3871 1
+1 3872 1
+3872 3872 1
+1 3873 1
+3873 3873 1
+1 3874 1
+3874 3874 1
+1 3875 1
+3875 3875 1
+1 3876 1
+3876 3876 1
+1 3877 1
+3877 3877 1
+1 3878 1
+3878 3878 1
+1 3879 1
+3879 3879 1
+1 3880 1
+3880 3880 1
+1 3881 1
+3881 3881 1
+1 3882 1
+3882 3882 1
+1 3883 1
+3883 3883 1
+1 3884 1
+3884 3884 1
+1 3885 1
+3885 3885 1
+1 3886 1
+3886 3886 1
+1 3887 1
+3887 3887 1
+1 3888 1
+3888 3888 1
+1 3889 1
+3889 3889 1
+1 3890 1
+3890 3890 1
+1 3891 1
+3891 3891 1
+1 3892 1
+3892 3892 1
+1 3893 1
+3893 3893 1
+1 3894 1
+3894 3894 1
+1 3895 1
+3895 3895 1
+1 3896 1
+3896 3896 1
+1 3897 1
+3897 3897 1
+1 3898 1
+3898 3898 1
+1 3899 1
+3899 3899 1
+1 3900 1
+3900 3900 1
+1 3901 1
+3901 3901 1
+1 3902 1
+3902 3902 1
+1 3903 1
+3903 3903 1
+1 3904 1
+3904 3904 1
+1 3905 1
+3905 3905 1
+1 3906 1
+3906 3906 1
+1 3907 1
+3907 3907 1
+1 3908 1
+3908 3908 1
+1 3909 1
+3909 3909 1
+1 3910 1
+3910 3910 1
+1 3911 1
+3911 3911 1
+1 3912 1
+3912 3912 1
+1 3913 1
+3913 3913 1
+1 3914 1
+3914 3914 1
+1 3915 1
+3915 3915 1
+1 3916 1
+3916 3916 1
+1 3917 1
+3917 3917 1
+1 3918 1
+3918 3918 1
+1 3919 1
+3919 3919 1
+1 3920 1
+3920 3920 1
+1 3921 1
+3921 3921 1
+1 3922 1
+3922 3922 1
+1 3923 1
+3923 3923 1
+1 3924 1
+3924 3924 1
+1 3925 1
+3925 3925 1
+1 3926 1
+3926 3926 1
+1 3927 1
+3927 3927 1
+1 3928 1
+3928 3928 1
+1 3929 1
+3929 3929 1
+1 3930 1
+3930 3930 1
+1 3931 1
+3931 3931 1
+1 3932 1
+3932 3932 1
+1 3933 1
+3933 3933 1
+1 3934 1
+3934 3934 1
+1 3935 1
+3935 3935 1
+1 3936 1
+3936 3936 1
+1 3937 1
+3937 3937 1
+1 3938 1
+3938 3938 1
+1 3939 1
+3939 3939 1
+1 3940 1
+3940 3940 1
+1 3941 1
+3941 3941 1
+1 3942 1
+3942 3942 1
+1 3943 1
+3943 3943 1
+1 3944 1
+3944 3944 1
+1 3945 1
+3945 3945 1
+1 3946 1
+3946 3946 1
+1 3947 1
+3947 3947 1
+1 3948 1
+3948 3948 1
+1 3949 1
+3949 3949 1
+1 3950 1
+3950 3950 1
+1 3951 1
+3951 3951 1
+1 3952 1
+3952 3952 1
+1 3953 1
+3953 3953 1
+1 3954 1
+3954 3954 1
+1 3955 1
+3955 3955 1
+1 3956 1
+3956 3956 1
+1 3957 1
+3957 3957 1
+1 3958 1
+3958 3958 1
+1 3959 1
+3959 3959 1
+1 3960 1
+3960 3960 1
+1 3961 1
+3961 3961 1
+1 3962 1
+3962 3962 1
+1 3963 1
+3963 3963 1
+1 3964 1
+3964 3964 1
+1 3965 1
+3965 3965 1
+1 3966 1
+3966 3966 1
+1 3967 1
+3967 3967 1
+1 3968 1
+3968 3968 1
+1 3969 1
+3969 3969 1
+1 3970 1
+3970 3970 1
+1 3971 1
+3971 3971 1
+1 3972 1
+3972 3972 1
+1 3973 1
+3973 3973 1
+1 3974 1
+3974 3974 1
+1 3975 1
+3975 3975 1
+1 3976 1
+3976 3976 1
+1 3977 1
+3977 3977 1
+1 3978 1
+3978 3978 1
+1 3979 1
+3979 3979 1
+1 3980 1
+3980 3980 1
+1 3981 1
+3981 3981 1
+1 3982 1
+3982 3982 1
+1 3983 1
+3983 3983 1
+1 3984 1
+3984 3984 1
+1 3985 1
+3985 3985 1
+1 3986 1
+3986 3986 1
+1 3987 1
+3987 3987 1
+1 3988 1
+3988 3988 1
+1 3989 1
+3989 3989 1
+1 3990 1
+3990 3990 1
+1 3991 1
+3991 3991 1
+1 3992 1
+3992 3992 1
+1 3993 1
+3993 3993 1
+1 3994 1
+3994 3994 1
+1 3995 1
+3995 3995 1
+1 3996 1
+3996 3996 1
+1 3997 1
+3997 3997 1
+1 3998 1
+3998 3998 1
+1 3999 1
+3999 3999 1
+1 4000 1
+4000 4000 1
+1 4001 1
+4001 4001 1
+1 4002 1
+4002 4002 1
+1 4003 1
+4003 4003 1
+1 4004 1
+4004 4004 1
+1 4005 1
+4005 4005 1
+1 4006 1
+4006 4006 1
+1 4007 1
+4007 4007 1
+1 4008 1
+4008 4008 1
+1 4009 1
+4009 4009 1
+1 4010 1
+4010 4010 1
+1 4011 1
+4011 4011 1
+1 4012 1
+4012 4012 1
+1 4013 1
+4013 4013 1
+1 4014 1
+4014 4014 1
+1 4015 1
+4015 4015 1
+1 4016 1
+4016 4016 1
+1 4017 1
+4017 4017 1
+1 4018 1
+4018 4018 1
+1 4019 1
+4019 4019 1
+1 4020 1
+4020 4020 1
+1 4021 1
+4021 4021 1
+1 4022 1
+4022 4022 1
+1 4023 1
+4023 4023 1
+1 4024 1
+4024 4024 1
+1 4025 1
+4025 4025 1
+1 4026 1
+4026 4026 1
+1 4027 1
+4027 4027 1
+1 4028 1
+4028 4028 1
+1 4029 1
+4029 4029 1
+1 4030 1
+4030 4030 1
+1 4031 1
+4031 4031 1
+1 4032 1
+4032 4032 1
+1 4033 1
+4033 4033 1
+1 4034 1
+4034 4034 1
+1 4035 1
+4035 4035 1
+1 4036 1
+4036 4036 1
+1 4037 1
+4037 4037 1
+1 4038 1
+4038 4038 1
+1 4039 1
+4039 4039 1
+1 4040 1
+4040 4040 1
+1 4041 1
+4041 4041 1
+1 4042 1
+4042 4042 1
+1 4043 1
+4043 4043 1
+1 4044 1
+4044 4044 1
+1 4045 1
+4045 4045 1
+1 4046 1
+4046 4046 1
+1 4047 1
+4047 4047 1
+1 4048 1
+4048 4048 1
+1 4049 1
+4049 4049 1
+1 4050 1
+4050 4050 1
+1 4051 1
+4051 4051 1
+1 4052 1
+4052 4052 1
+1 4053 1
+4053 4053 1
+1 4054 1
+4054 4054 1
+1 4055 1
+4055 4055 1
+1 4056 1
+4056 4056 1
+1 4057 1
+4057 4057 1
+1 4058 1
+4058 4058 1
+1 4059 1
+4059 4059 1
+1 4060 1
+4060 4060 1
+1 4061 1
+4061 4061 1
+1 4062 1
+4062 4062 1
+1 4063 1
+4063 4063 1
+1 4064 1
+4064 4064 1
+1 4065 1
+4065 4065 1
+1 4066 1
+4066 4066 1
+1 4067 1
+4067 4067 1
+1 4068 1
+4068 4068 1
+1 4069 1
+4069 4069 1
+1 4070 1
+4070 4070 1
+1 4071 1
+4071 4071 1
+1 4072 1
+4072 4072 1
+1 4073 1
+4073 4073 1
+1 4074 1
+4074 4074 1
+1 4075 1
+4075 4075 1
+1 4076 1
+4076 4076 1
+1 4077 1
+4077 4077 1
+1 4078 1
+4078 4078 1
+1 4079 1
+4079 4079 1
+1 4080 1
+4080 4080 1
+1 4081 1
+4081 4081 1
+1 4082 1
+4082 4082 1
+1 4083 1
+4083 4083 1
+1 4084 1
+4084 4084 1
+1 4085 1
+4085 4085 1
+1 4086 1
+4086 4086 1
+1 4087 1
+4087 4087 1
+1 4088 1
+4088 4088 1
+1 4089 1
+4089 4089 1
+1 4090 1
+4090 4090 1
+1 4091 1
+4091 4091 1
+1 4092 1
+4092 4092 1
+1 4093 1
+4093 4093 1
+1 4094 1
+4094 4094 1
+1 4095 1
+4095 4095 1
+1 4096 1
+4096 4096 1
+1 4097 1
+4097 4097 1
+1 4098 1
+4098 4098 1
+1 4099 1
+4099 4099 1
+1 4100 1
+4100 4100 1
+1 4101 1
+4101 4101 1
+1 4102 1
+4102 4102 1
+1 4103 1
+4103 4103 1
+1 4104 1
+4104 4104 1
+1 4105 1
+4105 4105 1
+1 4106 1
+4106 4106 1
+1 4107 1
+4107 4107 1
+1 4108 1
+4108 4108 1
+1 4109 1
+4109 4109 1
+1 4110 1
+4110 4110 1
+1 4111 1
+4111 4111 1
+1 4112 1
+4112 4112 1
+1 4113 1
+4113 4113 1
+1 4114 1
+4114 4114 1
+1 4115 1
+4115 4115 1
+1 4116 1
+4116 4116 1
+1 4117 1
+4117 4117 1
+1 4118 1
+4118 4118 1
+1 4119 1
+4119 4119 1
+1 4120 1
+4120 4120 1
+1 4121 1
+4121 4121 1
+1 4122 1
+4122 4122 1
+1 4123 1
+4123 4123 1
+1 4124 1
+4124 4124 1
+1 4125 1
+4125 4125 1
+1 4126 1
+4126 4126 1
+1 4127 1
+4127 4127 1
+1 4128 1
+4128 4128 1
+1 4129 1
+4129 4129 1
+1 4130 1
+4130 4130 1
+1 4131 1
+4131 4131 1
+1 4132 1
+4132 4132 1
+1 4133 1
+4133 4133 1
+1 4134 1
+4134 4134 1
+1 4135 1
+4135 4135 1
+1 4136 1
+4136 4136 1
+1 4137 1
+4137 4137 1
+1 4138 1
+4138 4138 1
+1 4139 1
+4139 4139 1
+1 4140 1
+4140 4140 1
+1 4141 1
+4141 4141 1
+1 4142 1
+4142 4142 1
+1 4143 1
+4143 4143 1
+1 4144 1
+4144 4144 1
+1 4145 1
+4145 4145 1
+1 4146 1
+4146 4146 1
+1 4147 1
+4147 4147 1
+1 4148 1
+4148 4148 1
+1 4149 1
+4149 4149 1
+1 4150 1
+4150 4150 1
+1 4151 1
+4151 4151 1
+1 4152 1
+4152 4152 1
+1 4153 1
+4153 4153 1
+1 4154 1
+4154 4154 1
+1 4155 1
+4155 4155 1
+1 4156 1
+4156 4156 1
+1 4157 1
+4157 4157 1
+1 4158 1
+4158 4158 1
+1 4159 1
+4159 4159 1
+1 4160 1
+4160 4160 1
+1 4161 1
+4161 4161 1
+1 4162 1
+4162 4162 1
+1 4163 1
+4163 4163 1
+1 4164 1
+4164 4164 1
+1 4165 1
+4165 4165 1
+1 4166 1
+4166 4166 1
+1 4167 1
+4167 4167 1
+1 4168 1
+4168 4168 1
+1 4169 1
+4169 4169 1
+1 4170 1
+4170 4170 1
+1 4171 1
+4171 4171 1
+1 4172 1
+4172 4172 1
+1 4173 1
+4173 4173 1
+1 4174 1
+4174 4174 1
+1 4175 1
+4175 4175 1
+1 4176 1
+4176 4176 1
+1 4177 1
+4177 4177 1
+1 4178 1
+4178 4178 1
+1 4179 1
+4179 4179 1
+1 4180 1
+4180 4180 1
+1 4181 1
+4181 4181 1
+1 4182 1
+4182 4182 1
+1 4183 1
+4183 4183 1
+1 4184 1
+4184 4184 1
+1 4185 1
+4185 4185 1
+1 4186 1
+4186 4186 1
+1 4187 1
+4187 4187 1
+1 4188 1
+4188 4188 1
+1 4189 1
+4189 4189 1
+1 4190 1
+4190 4190 1
+1 4191 1
+4191 4191 1
+1 4192 1
+4192 4192 1
+1 4193 1
+4193 4193 1
+1 4194 1
+4194 4194 1
+1 4195 1
+4195 4195 1
+1 4196 1
+4196 4196 1
+1 4197 1
+4197 4197 1
+1 4198 1
+4198 4198 1
+1 4199 1
+4199 4199 1
+1 4200 1
+4200 4200 1
+1 4201 1
+4201 4201 1
+1 4202 1
+4202 4202 1
+1 4203 1
+4203 4203 1
+1 4204 1
+4204 4204 1
+1 4205 1
+4205 4205 1
+1 4206 1
+4206 4206 1
+1 4207 1
+4207 4207 1
+1 4208 1
+4208 4208 1
+1 4209 1
+4209 4209 1
+1 4210 1
+4210 4210 1
+1 4211 1
+4211 4211 1
+1 4212 1
+4212 4212 1
+1 4213 1
+4213 4213 1
+1 4214 1
+4214 4214 1
+1 4215 1
+4215 4215 1
+1 4216 1
+4216 4216 1
+1 4217 1
+4217 4217 1
+1 4218 1
+4218 4218 1
+1 4219 1
+4219 4219 1
+1 4220 1
+4220 4220 1
+1 4221 1
+4221 4221 1
+1 4222 1
+4222 4222 1
+1 4223 1
+4223 4223 1
+1 4224 1
+4224 4224 1
+1 4225 1
+4225 4225 1
+1 4226 1
+4226 4226 1
+1 4227 1
+4227 4227 1
+1 4228 1
+4228 4228 1
+1 4229 1
+4229 4229 1
+1 4230 1
+4230 4230 1
+1 4231 1
+4231 4231 1
+1 4232 1
+4232 4232 1
+1 4233 1
+4233 4233 1
+1 4234 1
+4234 4234 1
+1 4235 1
+4235 4235 1
+1 4236 1
+4236 4236 1
+1 4237 1
+4237 4237 1
+1 4238 1
+4238 4238 1
+1 4239 1
+4239 4239 1
+1 4240 1
+4240 4240 1
+1 4241 1
+4241 4241 1
+1 4242 1
+4242 4242 1
+1 4243 1
+4243 4243 1
+1 4244 1
+4244 4244 1
+1 4245 1
+4245 4245 1
+1 4246 1
+4246 4246 1
+1 4247 1
+4247 4247 1
+1 4248 1
+4248 4248 1
+1 4249 1
+4249 4249 1
+1 4250 1
+4250 4250 1
+1 4251 1
+4251 4251 1
+1 4252 1
+4252 4252 1
+1 4253 1
+4253 4253 1
+1 4254 1
+4254 4254 1
+1 4255 1
+4255 4255 1
+1 4256 1
+4256 4256 1
+1 4257 1
+4257 4257 1
+1 4258 1
+4258 4258 1
+1 4259 1
+4259 4259 1
+1 4260 1
+4260 4260 1
+1 4261 1
+4261 4261 1
+1 4262 1
+4262 4262 1
+1 4263 1
+4263 4263 1
+1 4264 1
+4264 4264 1
+1 4265 1
+4265 4265 1
+1 4266 1
+4266 4266 1
+1 4267 1
+4267 4267 1
+1 4268 1
+4268 4268 1
+1 4269 1
+4269 4269 1
+1 4270 1
+4270 4270 1
+1 4271 1
+4271 4271 1
+1 4272 1
+4272 4272 1
+1 4273 1
+4273 4273 1
+1 4274 1
+4274 4274 1
+1 4275 1
+4275 4275 1
+1 4276 1
+4276 4276 1
+1 4277 1
+4277 4277 1
+1 4278 1
+4278 4278 1
+1 4279 1
+4279 4279 1
+1 4280 1
+4280 4280 1
+1 4281 1
+4281 4281 1
+1 4282 1
+4282 4282 1
+1 4283 1
+4283 4283 1
+1 4284 1
+4284 4284 1
+1 4285 1
+4285 4285 1
+1 4286 1
+4286 4286 1
+1 4287 1
+4287 4287 1
+1 4288 1
+4288 4288 1
+1 4289 1
+4289 4289 1
+1 4290 1
+4290 4290 1
+1 4291 1
+4291 4291 1
+1 4292 1
+4292 4292 1
+1 4293 1
+4293 4293 1
+1 4294 1
+4294 4294 1
+1 4295 1
+4295 4295 1
+1 4296 1
+4296 4296 1
+1 4297 1
+4297 4297 1
+1 4298 1
+4298 4298 1
+1 4299 1
+4299 4299 1
+1 4300 1
+4300 4300 1
+1 4301 1
+4301 4301 1
+1 4302 1
+4302 4302 1
+1 4303 1
+4303 4303 1
+1 4304 1
+4304 4304 1
+1 4305 1
+4305 4305 1
+1 4306 1
+4306 4306 1
+1 4307 1
+4307 4307 1
+1 4308 1
+4308 4308 1
+1 4309 1
+4309 4309 1
+1 4310 1
+4310 4310 1
+1 4311 1
+4311 4311 1
+1 4312 1
+4312 4312 1
+1 4313 1
+4313 4313 1
+1 4314 1
+4314 4314 1
+1 4315 1
+4315 4315 1
+1 4316 1
+4316 4316 1
+1 4317 1
+4317 4317 1
+1 4318 1
+4318 4318 1
+1 4319 1
+4319 4319 1
+1 4320 1
+4320 4320 1
+1 4321 1
+4321 4321 1
+1 4322 1
+4322 4322 1
+1 4323 1
+4323 4323 1
+1 4324 1
+4324 4324 1
+1 4325 1
+4325 4325 1
+1 4326 1
+4326 4326 1
+1 4327 1
+4327 4327 1
+1 4328 1
+4328 4328 1
+1 4329 1
+4329 4329 1
+1 4330 1
+4330 4330 1
+1 4331 1
+4331 4331 1
+1 4332 1
+4332 4332 1
+1 4333 1
+4333 4333 1
+1 4334 1
+4334 4334 1
+1 4335 1
+4335 4335 1
+1 4336 1
+4336 4336 1
+1 4337 1
+4337 4337 1
+1 4338 1
+4338 4338 1
+1 4339 1
+4339 4339 1
+1 4340 1
+4340 4340 1
+1 4341 1
+4341 4341 1
+1 4342 1
+4342 4342 1
+1 4343 1
+4343 4343 1
+1 4344 1
+4344 4344 1
+1 4345 1
+4345 4345 1
+1 4346 1
+4346 4346 1
+1 4347 1
+4347 4347 1
+1 4348 1
+4348 4348 1
+1 4349 1
+4349 4349 1
+1 4350 1
+4350 4350 1
+1 4351 1
+4351 4351 1
+1 4352 1
+4352 4352 1
+1 4353 1
+4353 4353 1
+1 4354 1
+4354 4354 1
+1 4355 1
+4355 4355 1
+1 4356 1
+4356 4356 1
+1 4357 1
+4357 4357 1
+1 4358 1
+4358 4358 1
+1 4359 1
+4359 4359 1
+1 4360 1
+4360 4360 1
+1 4361 1
+4361 4361 1
+1 4362 1
+4362 4362 1
+1 4363 1
+4363 4363 1
+1 4364 1
+4364 4364 1
+1 4365 1
+4365 4365 1
+1 4366 1
+4366 4366 1
+1 4367 1
+4367 4367 1
+1 4368 1
+4368 4368 1
+1 4369 1
+4369 4369 1
+1 4370 1
+4370 4370 1
+1 4371 1
+4371 4371 1
+1 4372 1
+4372 4372 1
+1 4373 1
+4373 4373 1
+1 4374 1
+4374 4374 1
+1 4375 1
+4375 4375 1
+1 4376 1
+4376 4376 1
+1 4377 1
+4377 4377 1
+1 4378 1
+4378 4378 1
+1 4379 1
+4379 4379 1
+1 4380 1
+4380 4380 1
+1 4381 1
+4381 4381 1
+1 4382 1
+4382 4382 1
+1 4383 1
+4383 4383 1
+1 4384 1
+4384 4384 1
+1 4385 1
+4385 4385 1
+1 4386 1
+4386 4386 1
+1 4387 1
+4387 4387 1
+1 4388 1
+4388 4388 1
+1 4389 1
+4389 4389 1
+1 4390 1
+4390 4390 1
+1 4391 1
+4391 4391 1
+1 4392 1
+4392 4392 1
+1 4393 1
+4393 4393 1
+1 4394 1
+4394 4394 1
+1 4395 1
+4395 4395 1
+1 4396 1
+4396 4396 1
+1 4397 1
+4397 4397 1
+1 4398 1
+4398 4398 1
+1 4399 1
+4399 4399 1
+1 4400 1
+4400 4400 1
+1 4401 1
+4401 4401 1
+1 4402 1
+4402 4402 1
+1 4403 1
+4403 4403 1
+1 4404 1
+4404 4404 1
+1 4405 1
+4405 4405 1
+1 4406 1
+4406 4406 1
+1 4407 1
+4407 4407 1
+1 4408 1
+4408 4408 1
+1 4409 1
+4409 4409 1
+1 4410 1
+4410 4410 1
+1 4411 1
+4411 4411 1
+1 4412 1
+4412 4412 1
+1 4413 1
+4413 4413 1
+1 4414 1
+4414 4414 1
+1 4415 1
+4415 4415 1
+1 4416 1
+4416 4416 1
+1 4417 1
+4417 4417 1
+1 4418 1
+4418 4418 1
+1 4419 1
+4419 4419 1
+1 4420 1
+4420 4420 1
+1 4421 1
+4421 4421 1
+1 4422 1
+4422 4422 1
+1 4423 1
+4423 4423 1
+1 4424 1
+4424 4424 1
+1 4425 1
+4425 4425 1
+1 4426 1
+4426 4426 1
+1 4427 1
+4427 4427 1
+1 4428 1
+4428 4428 1
+1 4429 1
+4429 4429 1
+1 4430 1
+4430 4430 1
+1 4431 1
+4431 4431 1
+1 4432 1
+4432 4432 1
+1 4433 1
+4433 4433 1
+1 4434 1
+4434 4434 1
+1 4435 1
+4435 4435 1
+1 4436 1
+4436 4436 1
+1 4437 1
+4437 4437 1
+1 4438 1
+4438 4438 1
+1 4439 1
+4439 4439 1
+1 4440 1
+4440 4440 1
+1 4441 1
+4441 4441 1
+1 4442 1
+4442 4442 1
+1 4443 1
+4443 4443 1
+1 4444 1
+4444 4444 1
+1 4445 1
+4445 4445 1
+1 4446 1
+4446 4446 1
+1 4447 1
+4447 4447 1
+1 4448 1
+4448 4448 1
+1 4449 1
+4449 4449 1
+1 4450 1
+4450 4450 1
+1 4451 1
+4451 4451 1
+1 4452 1
+4452 4452 1
+1 4453 1
+4453 4453 1
+1 4454 1
+4454 4454 1
+1 4455 1
+4455 4455 1
+1 4456 1
+4456 4456 1
+1 4457 1
+4457 4457 1
+1 4458 1
+4458 4458 1
+1 4459 1
+4459 4459 1
+1 4460 1
+4460 4460 1
+1 4461 1
+4461 4461 1
+1 4462 1
+4462 4462 1
+1 4463 1
+4463 4463 1
+1 4464 1
+4464 4464 1
+1 4465 1
+4465 4465 1
+1 4466 1
+4466 4466 1
+1 4467 1
+4467 4467 1
+1 4468 1
+4468 4468 1
+1 4469 1
+4469 4469 1
+1 4470 1
+4470 4470 1
+1 4471 1
+4471 4471 1
+1 4472 1
+4472 4472 1
+1 4473 1
+4473 4473 1
+1 4474 1
+4474 4474 1
+1 4475 1
+4475 4475 1
+1 4476 1
+4476 4476 1
+1 4477 1
+4477 4477 1
+1 4478 1
+4478 4478 1
+1 4479 1
+4479 4479 1
+1 4480 1
+4480 4480 1
+1 4481 1
+4481 4481 1
+1 4482 1
+4482 4482 1
+1 4483 1
+4483 4483 1
+1 4484 1
+4484 4484 1
+1 4485 1
+4485 4485 1
+1 4486 1
+4486 4486 1
+1 4487 1
+4487 4487 1
+1 4488 1
+4488 4488 1
+1 4489 1
+4489 4489 1
+1 4490 1
+4490 4490 1
+1 4491 1
+4491 4491 1
+1 4492 1
+4492 4492 1
+1 4493 1
+4493 4493 1
+1 4494 1
+4494 4494 1
+1 4495 1
+4495 4495 1
+1 4496 1
+4496 4496 1
+1 4497 1
+4497 4497 1
+1 4498 1
+4498 4498 1
+1 4499 1
+4499 4499 1
+1 4500 1
+4500 4500 1
+1 4501 1
+4501 4501 1
+1 4502 1
+4502 4502 1
+1 4503 1
+4503 4503 1
+1 4504 1
+4504 4504 1
+1 4505 1
+4505 4505 1
+1 4506 1
+4506 4506 1
+1 4507 1
+4507 4507 1
+1 4508 1
+4508 4508 1
+1 4509 1
+4509 4509 1
+1 4510 1
+4510 4510 1
+1 4511 1
+4511 4511 1
+1 4512 1
+4512 4512 1
+1 4513 1
+4513 4513 1
+1 4514 1
+4514 4514 1
+1 4515 1
+4515 4515 1
+1 4516 1
+4516 4516 1
+1 4517 1
+4517 4517 1
+1 4518 1
+4518 4518 1
+1 4519 1
+4519 4519 1
+1 4520 1
+4520 4520 1
+1 4521 1
+4521 4521 1
+1 4522 1
+4522 4522 1
+1 4523 1
+4523 4523 1
+1 4524 1
+4524 4524 1
+1 4525 1
+4525 4525 1
+1 4526 1
+4526 4526 1
+1 4527 1
+4527 4527 1
+1 4528 1
+4528 4528 1
+1 4529 1
+4529 4529 1
+1 4530 1
+4530 4530 1
+1 4531 1
+4531 4531 1
+1 4532 1
+4532 4532 1
+1 4533 1
+4533 4533 1
+1 4534 1
+4534 4534 1
+1 4535 1
+4535 4535 1
+1 4536 1
+4536 4536 1
+1 4537 1
+4537 4537 1
+1 4538 1
+4538 4538 1
+1 4539 1
+4539 4539 1
+1 4540 1
+4540 4540 1
+1 4541 1
+4541 4541 1
+1 4542 1
+4542 4542 1
+1 4543 1
+4543 4543 1
+1 4544 1
+4544 4544 1
+1 4545 1
+4545 4545 1
+1 4546 1
+4546 4546 1
+1 4547 1
+4547 4547 1
+1 4548 1
+4548 4548 1
+1 4549 1
+4549 4549 1
+1 4550 1
+4550 4550 1
+1 4551 1
+4551 4551 1
+1 4552 1
+4552 4552 1
+1 4553 1
+4553 4553 1
+1 4554 1
+4554 4554 1
+1 4555 1
+4555 4555 1
+1 4556 1
+4556 4556 1
+1 4557 1
+4557 4557 1
+1 4558 1
+4558 4558 1
+1 4559 1
+4559 4559 1
+1 4560 1
+4560 4560 1
+1 4561 1
+4561 4561 1
+1 4562 1
+4562 4562 1
+1 4563 1
+4563 4563 1
+1 4564 1
+4564 4564 1
+1 4565 1
+4565 4565 1
+1 4566 1
+4566 4566 1
+1 4567 1
+4567 4567 1
+1 4568 1
+4568 4568 1
+1 4569 1
+4569 4569 1
+1 4570 1
+4570 4570 1
+1 4571 1
+4571 4571 1
+1 4572 1
+4572 4572 1
+1 4573 1
+4573 4573 1
+1 4574 1
+4574 4574 1
+1 4575 1
+4575 4575 1
+1 4576 1
+4576 4576 1
+1 4577 1
+4577 4577 1
+1 4578 1
+4578 4578 1
+1 4579 1
+4579 4579 1
+1 4580 1
+4580 4580 1
+1 4581 1
+4581 4581 1
+1 4582 1
+4582 4582 1
+1 4583 1
+4583 4583 1
+1 4584 1
+4584 4584 1
+1 4585 1
+4585 4585 1
+1 4586 1
+4586 4586 1
+1 4587 1
+4587 4587 1
+1 4588 1
+4588 4588 1
+1 4589 1
+4589 4589 1
+1 4590 1
+4590 4590 1
+1 4591 1
+4591 4591 1
+1 4592 1
+4592 4592 1
+1 4593 1
+4593 4593 1
+1 4594 1
+4594 4594 1
+1 4595 1
+4595 4595 1
+1 4596 1
+4596 4596 1
+1 4597 1
+4597 4597 1
+1 4598 1
+4598 4598 1
+1 4599 1
+4599 4599 1
+1 4600 1
+4600 4600 1
+1 4601 1
+4601 4601 1
+1 4602 1
+4602 4602 1
+1 4603 1
+4603 4603 1
+1 4604 1
+4604 4604 1
+1 4605 1
+4605 4605 1
+1 4606 1
+4606 4606 1
+1 4607 1
+4607 4607 1
+1 4608 1
+4608 4608 1
+1 4609 1
+4609 4609 1
+1 4610 1
+4610 4610 1
+1 4611 1
+4611 4611 1
+1 4612 1
+4612 4612 1
+1 4613 1
+4613 4613 1
+1 4614 1
+4614 4614 1
+1 4615 1
+4615 4615 1
+1 4616 1
+4616 4616 1
+1 4617 1
+4617 4617 1
+1 4618 1
+4618 4618 1
+1 4619 1
+4619 4619 1
+1 4620 1
+4620 4620 1
+1 4621 1
+4621 4621 1
+1 4622 1
+4622 4622 1
+1 4623 1
+4623 4623 1
+1 4624 1
+4624 4624 1
+1 4625 1
+4625 4625 1
+1 4626 1
+4626 4626 1
+1 4627 1
+4627 4627 1
+1 4628 1
+4628 4628 1
+1 4629 1
+4629 4629 1
+1 4630 1
+4630 4630 1
+1 4631 1
+4631 4631 1
+1 4632 1
+4632 4632 1
+1 4633 1
+4633 4633 1
+1 4634 1
+4634 4634 1
+1 4635 1
+4635 4635 1
+1 4636 1
+4636 4636 1
+1 4637 1
+4637 4637 1
+1 4638 1
+4638 4638 1
+1 4639 1
+4639 4639 1
+1 4640 1
+4640 4640 1
+1 4641 1
+4641 4641 1
+1 4642 1
+4642 4642 1
+1 4643 1
+4643 4643 1
+1 4644 1
+4644 4644 1
+1 4645 1
+4645 4645 1
+1 4646 1
+4646 4646 1
+1 4647 1
+4647 4647 1
+1 4648 1
+4648 4648 1
+1 4649 1
+4649 4649 1
+1 4650 1
+4650 4650 1
+1 4651 1
+4651 4651 1
+1 4652 1
+4652 4652 1
+1 4653 1
+4653 4653 1
+1 4654 1
+4654 4654 1
+1 4655 1
+4655 4655 1
+1 4656 1
+4656 4656 1
+1 4657 1
+4657 4657 1
+1 4658 1
+4658 4658 1
+1 4659 1
+4659 4659 1
+1 4660 1
+4660 4660 1
+1 4661 1
+4661 4661 1
+1 4662 1
+4662 4662 1
+1 4663 1
+4663 4663 1
+1 4664 1
+4664 4664 1
+1 4665 1
+4665 4665 1
+1 4666 1
+4666 4666 1
+1 4667 1
+4667 4667 1
+1 4668 1
+4668 4668 1
+1 4669 1
+4669 4669 1
+1 4670 1
+4670 4670 1
+1 4671 1
+4671 4671 1
+1 4672 1
+4672 4672 1
+1 4673 1
+4673 4673 1
+1 4674 1
+4674 4674 1
+1 4675 1
+4675 4675 1
+1 4676 1
+4676 4676 1
+1 4677 1
+4677 4677 1
+1 4678 1
+4678 4678 1
+1 4679 1
+4679 4679 1
+1 4680 1
+4680 4680 1
+1 4681 1
+4681 4681 1
+1 4682 1
+4682 4682 1
+1 4683 1
+4683 4683 1
+1 4684 1
+4684 4684 1
+1 4685 1
+4685 4685 1
+1 4686 1
+4686 4686 1
+1 4687 1
+4687 4687 1
+1 4688 1
+4688 4688 1
+1 4689 1
+4689 4689 1
+1 4690 1
+4690 4690 1
+1 4691 1
+4691 4691 1
+1 4692 1
+4692 4692 1
+1 4693 1
+4693 4693 1
+1 4694 1
+4694 4694 1
+1 4695 1
+4695 4695 1
+1 4696 1
+4696 4696 1
+1 4697 1
+4697 4697 1
+1 4698 1
+4698 4698 1
+1 4699 1
+4699 4699 1
+1 4700 1
+4700 4700 1
+1 4701 1
+4701 4701 1
+1 4702 1
+4702 4702 1
+1 4703 1
+4703 4703 1
+1 4704 1
+4704 4704 1
+1 4705 1
+4705 4705 1
+1 4706 1
+4706 4706 1
+1 4707 1
+4707 4707 1
+1 4708 1
+4708 4708 1
+1 4709 1
+4709 4709 1
+1 4710 1
+4710 4710 1
+1 4711 1
+4711 4711 1
+1 4712 1
+4712 4712 1
+1 4713 1
+4713 4713 1
+1 4714 1
+4714 4714 1
+1 4715 1
+4715 4715 1
+1 4716 1
+4716 4716 1
+1 4717 1
+4717 4717 1
+1 4718 1
+4718 4718 1
+1 4719 1
+4719 4719 1
+1 4720 1
+4720 4720 1
+1 4721 1
+4721 4721 1
+1 4722 1
+4722 4722 1
+1 4723 1
+4723 4723 1
+1 4724 1
+4724 4724 1
+1 4725 1
+4725 4725 1
+1 4726 1
+4726 4726 1
+1 4727 1
+4727 4727 1
+1 4728 1
+4728 4728 1
+1 4729 1
+4729 4729 1
+1 4730 1
+4730 4730 1
+1 4731 1
+4731 4731 1
+1 4732 1
+4732 4732 1
+1 4733 1
+4733 4733 1
+1 4734 1
+4734 4734 1
+1 4735 1
+4735 4735 1
+1 4736 1
+4736 4736 1
+1 4737 1
+4737 4737 1
+1 4738 1
+4738 4738 1
+1 4739 1
+4739 4739 1
+1 4740 1
+4740 4740 1
+1 4741 1
+4741 4741 1
+1 4742 1
+4742 4742 1
+1 4743 1
+4743 4743 1
+1 4744 1
+4744 4744 1
+1 4745 1
+4745 4745 1
+1 4746 1
+4746 4746 1
+1 4747 1
+4747 4747 1
+1 4748 1
+4748 4748 1
+1 4749 1
+4749 4749 1
+1 4750 1
+4750 4750 1
+1 4751 1
+4751 4751 1
+1 4752 1
+4752 4752 1
+1 4753 1
+4753 4753 1
+1 4754 1
+4754 4754 1
+1 4755 1
+4755 4755 1
+1 4756 1
+4756 4756 1
+1 4757 1
+4757 4757 1
+1 4758 1
+4758 4758 1
+1 4759 1
+4759 4759 1
+1 4760 1
+4760 4760 1
+1 4761 1
+4761 4761 1
+1 4762 1
+4762 4762 1
+1 4763 1
+4763 4763 1
+1 4764 1
+4764 4764 1
+1 4765 1
+4765 4765 1
+1 4766 1
+4766 4766 1
+1 4767 1
+4767 4767 1
+1 4768 1
+4768 4768 1
+1 4769 1
+4769 4769 1
+1 4770 1
+4770 4770 1
+1 4771 1
+4771 4771 1
+1 4772 1
+4772 4772 1
+1 4773 1
+4773 4773 1
+1 4774 1
+4774 4774 1
+1 4775 1
+4775 4775 1
+1 4776 1
+4776 4776 1
+1 4777 1
+4777 4777 1
+1 4778 1
+4778 4778 1
+1 4779 1
+4779 4779 1
+1 4780 1
+4780 4780 1
+1 4781 1
+4781 4781 1
+1 4782 1
+4782 4782 1
+1 4783 1
+4783 4783 1
+1 4784 1
+4784 4784 1
+1 4785 1
+4785 4785 1
+1 4786 1
+4786 4786 1
+1 4787 1
+4787 4787 1
+1 4788 1
+4788 4788 1
+1 4789 1
+4789 4789 1
+1 4790 1
+4790 4790 1
+1 4791 1
+4791 4791 1
+1 4792 1
+4792 4792 1
+1 4793 1
+4793 4793 1
+1 4794 1
+4794 4794 1
+1 4795 1
+4795 4795 1
+1 4796 1
+4796 4796 1
+1 4797 1
+4797 4797 1
+1 4798 1
+4798 4798 1
+1 4799 1
+4799 4799 1
+1 4800 1
+4800 4800 1
+1 4801 1
+4801 4801 1
+1 4802 1
+4802 4802 1
+1 4803 1
+4803 4803 1
+1 4804 1
+4804 4804 1
+1 4805 1
+4805 4805 1
+1 4806 1
+4806 4806 1
+1 4807 1
+4807 4807 1
+1 4808 1
+4808 4808 1
+1 4809 1
+4809 4809 1
+1 4810 1
+4810 4810 1
+1 4811 1
+4811 4811 1
+1 4812 1
+4812 4812 1
+1 4813 1
+4813 4813 1
+1 4814 1
+4814 4814 1
+1 4815 1
+4815 4815 1
+1 4816 1
+4816 4816 1
+1 4817 1
+4817 4817 1
+1 4818 1
+4818 4818 1
+1 4819 1
+4819 4819 1
+1 4820 1
+4820 4820 1
+1 4821 1
+4821 4821 1
+1 4822 1
+4822 4822 1
+1 4823 1
+4823 4823 1
+1 4824 1
+4824 4824 1
+1 4825 1
+4825 4825 1
+1 4826 1
+4826 4826 1
+1 4827 1
+4827 4827 1
+1 4828 1
+4828 4828 1
+1 4829 1
+4829 4829 1
+1 4830 1
+4830 4830 1
+1 4831 1
+4831 4831 1
+1 4832 1
+4832 4832 1
+1 4833 1
+4833 4833 1
+1 4834 1
+4834 4834 1
+1 4835 1
+4835 4835 1
+1 4836 1
+4836 4836 1
+1 4837 1
+4837 4837 1
+1 4838 1
+4838 4838 1
+1 4839 1
+4839 4839 1
+1 4840 1
+4840 4840 1
+1 4841 1
+4841 4841 1
+1 4842 1
+4842 4842 1
+1 4843 1
+4843 4843 1
+1 4844 1
+4844 4844 1
+1 4845 1
+4845 4845 1
+1 4846 1
+4846 4846 1
+1 4847 1
+4847 4847 1
+1 4848 1
+4848 4848 1
+1 4849 1
+4849 4849 1
+1 4850 1
+4850 4850 1
+1 4851 1
+4851 4851 1
+1 4852 1
+4852 4852 1
+1 4853 1
+4853 4853 1
+1 4854 1
+4854 4854 1
+1 4855 1
+4855 4855 1
+1 4856 1
+4856 4856 1
+1 4857 1
+4857 4857 1
+1 4858 1
+4858 4858 1
+1 4859 1
+4859 4859 1
+1 4860 1
+4860 4860 1
+1 4861 1
+4861 4861 1
+1 4862 1
+4862 4862 1
+1 4863 1
+4863 4863 1
+1 4864 1
+4864 4864 1
+1 4865 1
+4865 4865 1
+1 4866 1
+4866 4866 1
+1 4867 1
+4867 4867 1
+1 4868 1
+4868 4868 1
+1 4869 1
+4869 4869 1
+1 4870 1
+4870 4870 1
+1 4871 1
+4871 4871 1
+1 4872 1
+4872 4872 1
+1 4873 1
+4873 4873 1
+1 4874 1
+4874 4874 1
+1 4875 1
+4875 4875 1
+1 4876 1
+4876 4876 1
+1 4877 1
+4877 4877 1
+1 4878 1
+4878 4878 1
+1 4879 1
+4879 4879 1
+1 4880 1
+4880 4880 1
+1 4881 1
+4881 4881 1
+1 4882 1
+4882 4882 1
+1 4883 1
+4883 4883 1
+1 4884 1
+4884 4884 1
+1 4885 1
+4885 4885 1
+1 4886 1
+4886 4886 1
+1 4887 1
+4887 4887 1
+1 4888 1
+4888 4888 1
+1 4889 1
+4889 4889 1
+1 4890 1
+4890 4890 1
+1 4891 1
+4891 4891 1
+1 4892 1
+4892 4892 1
+1 4893 1
+4893 4893 1
+1 4894 1
+4894 4894 1
+1 4895 1
+4895 4895 1
+1 4896 1
+4896 4896 1
+1 4897 1
+4897 4897 1
+1 4898 1
+4898 4898 1
+1 4899 1
+4899 4899 1
+1 4900 1
+4900 4900 1
+1 4901 1
+4901 4901 1
+1 4902 1
+4902 4902 1
+1 4903 1
+4903 4903 1
+1 4904 1
+4904 4904 1
+1 4905 1
+4905 4905 1
+1 4906 1
+4906 4906 1
+1 4907 1
+4907 4907 1
+1 4908 1
+4908 4908 1
+1 4909 1
+4909 4909 1
+1 4910 1
+4910 4910 1
+1 4911 1
+4911 4911 1
+1 4912 1
+4912 4912 1
+1 4913 1
+4913 4913 1
+1 4914 1
+4914 4914 1
+1 4915 1
+4915 4915 1
+1 4916 1
+4916 4916 1
+1 4917 1
+4917 4917 1
+1 4918 1
+4918 4918 1
+1 4919 1
+4919 4919 1
+1 4920 1
+4920 4920 1
+1 4921 1
+4921 4921 1
+1 4922 1
+4922 4922 1
+1 4923 1
+4923 4923 1
+1 4924 1
+4924 4924 1
+1 4925 1
+4925 4925 1
+1 4926 1
+4926 4926 1
+1 4927 1
+4927 4927 1
+1 4928 1
+4928 4928 1
+1 4929 1
+4929 4929 1
+1 4930 1
+4930 4930 1
+1 4931 1
+4931 4931 1
+1 4932 1
+4932 4932 1
+1 4933 1
+4933 4933 1
+1 4934 1
+4934 4934 1
+1 4935 1
+4935 4935 1
+1 4936 1
+4936 4936 1
+1 4937 1
+4937 4937 1
+1 4938 1
+4938 4938 1
+1 4939 1
+4939 4939 1
+1 4940 1
+4940 4940 1
+1 4941 1
+4941 4941 1
+1 4942 1
+4942 4942 1
+1 4943 1
+4943 4943 1
+1 4944 1
+4944 4944 1
+1 4945 1
+4945 4945 1
+1 4946 1
+4946 4946 1
+1 4947 1
+4947 4947 1
+1 4948 1
+4948 4948 1
+1 4949 1
+4949 4949 1
+1 4950 1
+4950 4950 1
+1 4951 1
+4951 4951 1
+1 4952 1
+4952 4952 1
+1 4953 1
+4953 4953 1
+1 4954 1
+4954 4954 1
+1 4955 1
+4955 4955 1
+1 4956 1
+4956 4956 1
+1 4957 1
+4957 4957 1
+1 4958 1
+4958 4958 1
+1 4959 1
+4959 4959 1
+1 4960 1
+4960 4960 1
+1 4961 1
+4961 4961 1
+1 4962 1
+4962 4962 1
+1 4963 1
+4963 4963 1
+1 4964 1
+4964 4964 1
+1 4965 1
+4965 4965 1
+1 4966 1
+4966 4966 1
+1 4967 1
+4967 4967 1
+1 4968 1
+4968 4968 1
+1 4969 1
+4969 4969 1
+1 4970 1
+4970 4970 1
+1 4971 1
+4971 4971 1
+1 4972 1
+4972 4972 1
+1 4973 1
+4973 4973 1
+1 4974 1
+4974 4974 1
+1 4975 1
+4975 4975 1
+1 4976 1
+4976 4976 1
+1 4977 1
+4977 4977 1
+1 4978 1
+4978 4978 1
+1 4979 1
+4979 4979 1
+1 4980 1
+4980 4980 1
+1 4981 1
+4981 4981 1
+1 4982 1
+4982 4982 1
+1 4983 1
+4983 4983 1
+1 4984 1
+4984 4984 1
+1 4985 1
+4985 4985 1
+1 4986 1
+4986 4986 1
+1 4987 1
+4987 4987 1
+1 4988 1
+4988 4988 1
+1 4989 1
+4989 4989 1
+1 4990 1
+4990 4990 1
+1 4991 1
+4991 4991 1
+1 4992 1
+4992 4992 1
+1 4993 1
+4993 4993 1
+1 4994 1
+4994 4994 1
+1 4995 1
+4995 4995 1
+1 4996 1
+4996 4996 1
+1 4997 1
+4997 4997 1
+1 4998 1
+4998 4998 1
+1 4999 1
+4999 4999 1
+1 5000 1
+5000 5000 1
+1 5001 1
+5001 5001 1
+1 5002 1
+5002 5002 1
+1 5003 1
+5003 5003 1
+1 5004 1
+5004 5004 1
+1 5005 1
+5005 5005 1
+1 5006 1
+5006 5006 1
+1 5007 1
+5007 5007 1
+1 5008 1
+5008 5008 1
+1 5009 1
+5009 5009 1
+1 5010 1
+5010 5010 1
+1 5011 1
+5011 5011 1
+1 5012 1
+5012 5012 1
+1 5013 1
+5013 5013 1
+1 5014 1
+5014 5014 1
+1 5015 1
+5015 5015 1
+1 5016 1
+5016 5016 1
+1 5017 1
+5017 5017 1
+1 5018 1
+5018 5018 1
+1 5019 1
+5019 5019 1
+1 5020 1
+5020 5020 1
+1 5021 1
+5021 5021 1
+1 5022 1
+5022 5022 1
+1 5023 1
+5023 5023 1
+1 5024 1
+5024 5024 1
+1 5025 1
+5025 5025 1
+1 5026 1
+5026 5026 1
+1 5027 1
+5027 5027 1
+1 5028 1
+5028 5028 1
+1 5029 1
+5029 5029 1
+1 5030 1
+5030 5030 1
+1 5031 1
+5031 5031 1
+1 5032 1
+5032 5032 1
+1 5033 1
+5033 5033 1
+1 5034 1
+5034 5034 1
+1 5035 1
+5035 5035 1
+1 5036 1
+5036 5036 1
+1 5037 1
+5037 5037 1
+1 5038 1
+5038 5038 1
+1 5039 1
+5039 5039 1
+1 5040 1
+5040 5040 1
+1 5041 1
+5041 5041 1
+1 5042 1
+5042 5042 1
+1 5043 1
+5043 5043 1
+1 5044 1
+5044 5044 1
+1 5045 1
+5045 5045 1
+1 5046 1
+5046 5046 1
+1 5047 1
+5047 5047 1
+1 5048 1
+5048 5048 1
+1 5049 1
+5049 5049 1
+1 5050 1
+5050 5050 1
+1 5051 1
+5051 5051 1
+1 5052 1
+5052 5052 1
+1 5053 1
+5053 5053 1
+1 5054 1
+5054 5054 1
+1 5055 1
+5055 5055 1
+1 5056 1
+5056 5056 1
+1 5057 1
+5057 5057 1
+1 5058 1
+5058 5058 1
+1 5059 1
+5059 5059 1
+1 5060 1
+5060 5060 1
+1 5061 1
+5061 5061 1
+1 5062 1
+5062 5062 1
+1 5063 1
+5063 5063 1
+1 5064 1
+5064 5064 1
+1 5065 1
+5065 5065 1
+1 5066 1
+5066 5066 1
+1 5067 1
+5067 5067 1
+1 5068 1
+5068 5068 1
+1 5069 1
+5069 5069 1
+1 5070 1
+5070 5070 1
+1 5071 1
+5071 5071 1
+1 5072 1
+5072 5072 1
+1 5073 1
+5073 5073 1
+1 5074 1
+5074 5074 1
+1 5075 1
+5075 5075 1
+1 5076 1
+5076 5076 1
+1 5077 1
+5077 5077 1
+1 5078 1
+5078 5078 1
+1 5079 1
+5079 5079 1
+1 5080 1
+5080 5080 1
+1 5081 1
+5081 5081 1
+1 5082 1
+5082 5082 1
+1 5083 1
+5083 5083 1
+1 5084 1
+5084 5084 1
+1 5085 1
+5085 5085 1
+1 5086 1
+5086 5086 1
+1 5087 1
+5087 5087 1
+1 5088 1
+5088 5088 1
+1 5089 1
+5089 5089 1
+1 5090 1
+5090 5090 1
+1 5091 1
+5091 5091 1
+1 5092 1
+5092 5092 1
+1 5093 1
+5093 5093 1
+1 5094 1
+5094 5094 1
+1 5095 1
+5095 5095 1
+1 5096 1
+5096 5096 1
+1 5097 1
+5097 5097 1
+1 5098 1
+5098 5098 1
+1 5099 1
+5099 5099 1
+1 5100 1
+5100 5100 1
+1 5101 1
+5101 5101 1
+1 5102 1
+5102 5102 1
+1 5103 1
+5103 5103 1
+1 5104 1
+5104 5104 1
+1 5105 1
+5105 5105 1
+1 5106 1
+5106 5106 1
+1 5107 1
+5107 5107 1
+1 5108 1
+5108 5108 1
+1 5109 1
+5109 5109 1
+1 5110 1
+5110 5110 1
+1 5111 1
+5111 5111 1
+1 5112 1
+5112 5112 1
+1 5113 1
+5113 5113 1
+1 5114 1
+5114 5114 1
+1 5115 1
+5115 5115 1
+1 5116 1
+5116 5116 1
+1 5117 1
+5117 5117 1
+1 5118 1
+5118 5118 1
+1 5119 1
+5119 5119 1
+1 5120 1
+5120 5120 1
+1 5121 1
+5121 5121 1
+1 5122 1
+5122 5122 1
+1 5123 1
+5123 5123 1
+1 5124 1
+5124 5124 1
+1 5125 1
+5125 5125 1
+1 5126 1
+5126 5126 1
+1 5127 1
+5127 5127 1
+1 5128 1
+5128 5128 1
+1 5129 1
+5129 5129 1
+1 5130 1
+5130 5130 1
+1 5131 1
+5131 5131 1
+1 5132 1
+5132 5132 1
+1 5133 1
+5133 5133 1
+1 5134 1
+5134 5134 1
+1 5135 1
+5135 5135 1
+1 5136 1
+5136 5136 1
+1 5137 1
+5137 5137 1
+1 5138 1
+5138 5138 1
+1 5139 1
+5139 5139 1
+1 5140 1
+5140 5140 1
+1 5141 1
+5141 5141 1
+1 5142 1
+5142 5142 1
+1 5143 1
+5143 5143 1
+1 5144 1
+5144 5144 1
+1 5145 1
+5145 5145 1
+1 5146 1
+5146 5146 1
+1 5147 1
+5147 5147 1
+1 5148 1
+5148 5148 1
+1 5149 1
+5149 5149 1
+1 5150 1
+5150 5150 1
+1 5151 1
+5151 5151 1
+1 5152 1
+5152 5152 1
+1 5153 1
+5153 5153 1
+1 5154 1
+5154 5154 1
+1 5155 1
+5155 5155 1
+1 5156 1
+5156 5156 1
+1 5157 1
+5157 5157 1
+1 5158 1
+5158 5158 1
+1 5159 1
+5159 5159 1
+1 5160 1
+5160 5160 1
+1 5161 1
+5161 5161 1
+1 5162 1
+5162 5162 1
+1 5163 1
+5163 5163 1
+1 5164 1
+5164 5164 1
+1 5165 1
+5165 5165 1
+1 5166 1
+5166 5166 1
+1 5167 1
+5167 5167 1
+1 5168 1
+5168 5168 1
+1 5169 1
+5169 5169 1
+1 5170 1
+5170 5170 1
+1 5171 1
+5171 5171 1
+1 5172 1
+5172 5172 1
+1 5173 1
+5173 5173 1
+1 5174 1
+5174 5174 1
+1 5175 1
+5175 5175 1
+1 5176 1
+5176 5176 1
+1 5177 1
+5177 5177 1
+1 5178 1
+5178 5178 1
+1 5179 1
+5179 5179 1
+1 5180 1
+5180 5180 1
+1 5181 1
+5181 5181 1
+1 5182 1
+5182 5182 1
+1 5183 1
+5183 5183 1
+1 5184 1
+5184 5184 1
+1 5185 1
+5185 5185 1
+1 5186 1
+5186 5186 1
+1 5187 1
+5187 5187 1
+1 5188 1
+5188 5188 1
+1 5189 1
+5189 5189 1
+1 5190 1
+5190 5190 1
+1 5191 1
+5191 5191 1
+1 5192 1
+5192 5192 1
+1 5193 1
+5193 5193 1
+1 5194 1
+5194 5194 1
+1 5195 1
+5195 5195 1
+1 5196 1
+5196 5196 1
+1 5197 1
+5197 5197 1
+1 5198 1
+5198 5198 1
+1 5199 1
+5199 5199 1
+1 5200 1
+5200 5200 1
+1 5201 1
+5201 5201 1
+1 5202 1
+5202 5202 1
+1 5203 1
+5203 5203 1
+1 5204 1
+5204 5204 1
+1 5205 1
+5205 5205 1
+1 5206 1
+5206 5206 1
+1 5207 1
+5207 5207 1
+1 5208 1
+5208 5208 1
+1 5209 1
+5209 5209 1
+1 5210 1
+5210 5210 1
+1 5211 1
+5211 5211 1
+1 5212 1
+5212 5212 1
+1 5213 1
+5213 5213 1
+1 5214 1
+5214 5214 1
+1 5215 1
+5215 5215 1
+1 5216 1
+5216 5216 1
+1 5217 1
+5217 5217 1
+1 5218 1
+5218 5218 1
+1 5219 1
+5219 5219 1
+1 5220 1
+5220 5220 1
+1 5221 1
+5221 5221 1
+1 5222 1
+5222 5222 1
+1 5223 1
+5223 5223 1
+1 5224 1
+5224 5224 1
+1 5225 1
+5225 5225 1
+1 5226 1
+5226 5226 1
+1 5227 1
+5227 5227 1
+1 5228 1
+5228 5228 1
+1 5229 1
+5229 5229 1
+1 5230 1
+5230 5230 1
+1 5231 1
+5231 5231 1
+1 5232 1
+5232 5232 1
+1 5233 1
+5233 5233 1
+1 5234 1
+5234 5234 1
+1 5235 1
+5235 5235 1
+1 5236 1
+5236 5236 1
+1 5237 1
+5237 5237 1
+1 5238 1
+5238 5238 1
+1 5239 1
+5239 5239 1
+1 5240 1
+5240 5240 1
+1 5241 1
+5241 5241 1
+1 5242 1
+5242 5242 1
+1 5243 1
+5243 5243 1
+1 5244 1
+5244 5244 1
+1 5245 1
+5245 5245 1
+1 5246 1
+5246 5246 1
+1 5247 1
+5247 5247 1
+1 5248 1
+5248 5248 1
+1 5249 1
+5249 5249 1
+1 5250 1
+5250 5250 1
+1 5251 1
+5251 5251 1
+1 5252 1
+5252 5252 1
+1 5253 1
+5253 5253 1
+1 5254 1
+5254 5254 1
+1 5255 1
+5255 5255 1
+1 5256 1
+5256 5256 1
+1 5257 1
+5257 5257 1
+1 5258 1
+5258 5258 1
+1 5259 1
+5259 5259 1
+1 5260 1
+5260 5260 1
+1 5261 1
+5261 5261 1
+1 5262 1
+5262 5262 1
+1 5263 1
+5263 5263 1
+1 5264 1
+5264 5264 1
+1 5265 1
+5265 5265 1
+1 5266 1
+5266 5266 1
+1 5267 1
+5267 5267 1
+1 5268 1
+5268 5268 1
+1 5269 1
+5269 5269 1
+1 5270 1
+5270 5270 1
+1 5271 1
+5271 5271 1
+1 5272 1
+5272 5272 1
+1 5273 1
+5273 5273 1
+1 5274 1
+5274 5274 1
+1 5275 1
+5275 5275 1
+1 5276 1
+5276 5276 1
+1 5277 1
+5277 5277 1
+1 5278 1
+5278 5278 1
+1 5279 1
+5279 5279 1
+1 5280 1
+5280 5280 1
+1 5281 1
+5281 5281 1
+1 5282 1
+5282 5282 1
+1 5283 1
+5283 5283 1
+1 5284 1
+5284 5284 1
+1 5285 1
+5285 5285 1
+1 5286 1
+5286 5286 1
+1 5287 1
+5287 5287 1
+1 5288 1
+5288 5288 1
+1 5289 1
+5289 5289 1
+1 5290 1
+5290 5290 1
+1 5291 1
+5291 5291 1
+1 5292 1
+5292 5292 1
+1 5293 1
+5293 5293 1
+1 5294 1
+5294 5294 1
+1 5295 1
+5295 5295 1
+1 5296 1
+5296 5296 1
+1 5297 1
+5297 5297 1
+1 5298 1
+5298 5298 1
+1 5299 1
+5299 5299 1
+1 5300 1
+5300 5300 1
+1 5301 1
+5301 5301 1
+1 5302 1
+5302 5302 1
+1 5303 1
+5303 5303 1
+1 5304 1
+5304 5304 1
+1 5305 1
+5305 5305 1
+1 5306 1
+5306 5306 1
+1 5307 1
+5307 5307 1
+1 5308 1
+5308 5308 1
+1 5309 1
+5309 5309 1
+1 5310 1
+5310 5310 1
+1 5311 1
+5311 5311 1
+1 5312 1
+5312 5312 1
+1 5313 1
+5313 5313 1
+1 5314 1
+5314 5314 1
+1 5315 1
+5315 5315 1
+1 5316 1
+5316 5316 1
+1 5317 1
+5317 5317 1
+1 5318 1
+5318 5318 1
+1 5319 1
+5319 5319 1
+1 5320 1
+5320 5320 1
+1 5321 1
+5321 5321 1
+1 5322 1
+5322 5322 1
+1 5323 1
+5323 5323 1
+1 5324 1
+5324 5324 1
+1 5325 1
+5325 5325 1
+1 5326 1
+5326 5326 1
+1 5327 1
+5327 5327 1
+1 5328 1
+5328 5328 1
+1 5329 1
+5329 5329 1
+1 5330 1
+5330 5330 1
+1 5331 1
+5331 5331 1
+1 5332 1
+5332 5332 1
+1 5333 1
+5333 5333 1
+1 5334 1
+5334 5334 1
+1 5335 1
+5335 5335 1
+1 5336 1
+5336 5336 1
+1 5337 1
+5337 5337 1
+1 5338 1
+5338 5338 1
+1 5339 1
+5339 5339 1
+1 5340 1
+5340 5340 1
+1 5341 1
+5341 5341 1
+1 5342 1
+5342 5342 1
+1 5343 1
+5343 5343 1
+1 5344 1
+5344 5344 1
+1 5345 1
+5345 5345 1
+1 5346 1
+5346 5346 1
+1 5347 1
+5347 5347 1
+1 5348 1
+5348 5348 1
+1 5349 1
+5349 5349 1
+1 5350 1
+5350 5350 1
+1 5351 1
+5351 5351 1
+1 5352 1
+5352 5352 1
+1 5353 1
+5353 5353 1
+1 5354 1
+5354 5354 1
+1 5355 1
+5355 5355 1
+1 5356 1
+5356 5356 1
+1 5357 1
+5357 5357 1
+1 5358 1
+5358 5358 1
+1 5359 1
+5359 5359 1
+1 5360 1
+5360 5360 1
+1 5361 1
+5361 5361 1
+1 5362 1
+5362 5362 1
+1 5363 1
+5363 5363 1
+1 5364 1
+5364 5364 1
+1 5365 1
+5365 5365 1
+1 5366 1
+5366 5366 1
+1 5367 1
+5367 5367 1
+1 5368 1
+5368 5368 1
+1 5369 1
+5369 5369 1
+1 5370 1
+5370 5370 1
+1 5371 1
+5371 5371 1
+1 5372 1
+5372 5372 1
+1 5373 1
+5373 5373 1
+1 5374 1
+5374 5374 1
+1 5375 1
+5375 5375 1
+1 5376 1
+5376 5376 1
+1 5377 1
+5377 5377 1
+1 5378 1
+5378 5378 1
+1 5379 1
+5379 5379 1
+1 5380 1
+5380 5380 1
+1 5381 1
+5381 5381 1
+1 5382 1
+5382 5382 1
+1 5383 1
+5383 5383 1
+1 5384 1
+5384 5384 1
+1 5385 1
+5385 5385 1
+1 5386 1
+5386 5386 1
+1 5387 1
+5387 5387 1
+1 5388 1
+5388 5388 1
+1 5389 1
+5389 5389 1
+1 5390 1
+5390 5390 1
+1 5391 1
+5391 5391 1
+1 5392 1
+5392 5392 1
+1 5393 1
+5393 5393 1
+1 5394 1
+5394 5394 1
+1 5395 1
+5395 5395 1
+1 5396 1
+5396 5396 1
+1 5397 1
+5397 5397 1
+1 5398 1
+5398 5398 1
+1 5399 1
+5399 5399 1
+1 5400 1
+5400 5400 1
+1 5401 1
+5401 5401 1
+1 5402 1
+5402 5402 1
+1 5403 1
+5403 5403 1
+1 5404 1
+5404 5404 1
+1 5405 1
+5405 5405 1
+1 5406 1
+5406 5406 1
+1 5407 1
+5407 5407 1
+1 5408 1
+5408 5408 1
+1 5409 1
+5409 5409 1
+1 5410 1
+5410 5410 1
+1 5411 1
+5411 5411 1
+1 5412 1
+5412 5412 1
+1 5413 1
+5413 5413 1
+1 5414 1
+5414 5414 1
+1 5415 1
+5415 5415 1
+1 5416 1
+5416 5416 1
+1 5417 1
+5417 5417 1
+1 5418 1
+5418 5418 1
+1 5419 1
+5419 5419 1
+1 5420 1
+5420 5420 1
+1 5421 1
+5421 5421 1
+1 5422 1
+5422 5422 1
+1 5423 1
+5423 5423 1
+1 5424 1
+5424 5424 1
+1 5425 1
+5425 5425 1
+1 5426 1
+5426 5426 1
+1 5427 1
+5427 5427 1
+1 5428 1
+5428 5428 1
+1 5429 1
+5429 5429 1
+1 5430 1
+5430 5430 1
+1 5431 1
+5431 5431 1
+1 5432 1
+5432 5432 1
+1 5433 1
+5433 5433 1
+1 5434 1
+5434 5434 1
+1 5435 1
+5435 5435 1
+1 5436 1
+5436 5436 1
+1 5437 1
+5437 5437 1
+1 5438 1
+5438 5438 1
+1 5439 1
+5439 5439 1
+1 5440 1
+5440 5440 1
+1 5441 1
+5441 5441 1
+1 5442 1
+5442 5442 1
+1 5443 1
+5443 5443 1
+1 5444 1
+5444 5444 1
+1 5445 1
+5445 5445 1
+1 5446 1
+5446 5446 1
+1 5447 1
+5447 5447 1
+1 5448 1
+5448 5448 1
+1 5449 1
+5449 5449 1
+1 5450 1
+5450 5450 1
+1 5451 1
+5451 5451 1
+1 5452 1
+5452 5452 1
+1 5453 1
+5453 5453 1
+1 5454 1
+5454 5454 1
+1 5455 1
+5455 5455 1
+1 5456 1
+5456 5456 1
+1 5457 1
+5457 5457 1
+1 5458 1
+5458 5458 1
+1 5459 1
+5459 5459 1
+1 5460 1
+5460 5460 1
+1 5461 1
+5461 5461 1
+1 5462 1
+5462 5462 1
+1 5463 1
+5463 5463 1
+1 5464 1
+5464 5464 1
+1 5465 1
+5465 5465 1
+1 5466 1
+5466 5466 1
+1 5467 1
+5467 5467 1
+1 5468 1
+5468 5468 1
+1 5469 1
+5469 5469 1
+1 5470 1
+5470 5470 1
+1 5471 1
+5471 5471 1
+1 5472 1
+5472 5472 1
+1 5473 1
+5473 5473 1
+1 5474 1
+5474 5474 1
+1 5475 1
+5475 5475 1
+1 5476 1
+5476 5476 1
+1 5477 1
+5477 5477 1
+1 5478 1
+5478 5478 1
+1 5479 1
+5479 5479 1
+1 5480 1
+5480 5480 1
+1 5481 1
+5481 5481 1
+1 5482 1
+5482 5482 1
+1 5483 1
+5483 5483 1
+1 5484 1
+5484 5484 1
+1 5485 1
+5485 5485 1
+1 5486 1
+5486 5486 1
+1 5487 1
+5487 5487 1
+1 5488 1
+5488 5488 1
+1 5489 1
+5489 5489 1
+1 5490 1
+5490 5490 1
+1 5491 1
+5491 5491 1
+1 5492 1
+5492 5492 1
+1 5493 1
+5493 5493 1
+1 5494 1
+5494 5494 1
+1 5495 1
+5495 5495 1
+1 5496 1
+5496 5496 1
+1 5497 1
+5497 5497 1
+1 5498 1
+5498 5498 1
+1 5499 1
+5499 5499 1
+1 5500 1
+5500 5500 1
+1 5501 1
+5501 5501 1
+1 5502 1
+5502 5502 1
+1 5503 1
+5503 5503 1
+1 5504 1
+5504 5504 1
+1 5505 1
+5505 5505 1
+1 5506 1
+5506 5506 1
+1 5507 1
+5507 5507 1
+1 5508 1
+5508 5508 1
+1 5509 1
+5509 5509 1
+1 5510 1
+5510 5510 1
+1 5511 1
+5511 5511 1
+1 5512 1
+5512 5512 1
+1 5513 1
+5513 5513 1
+1 5514 1
+5514 5514 1
+1 5515 1
+5515 5515 1
+1 5516 1
+5516 5516 1
+1 5517 1
+5517 5517 1
+1 5518 1
+5518 5518 1
+1 5519 1
+5519 5519 1
+1 5520 1
+5520 5520 1
+1 5521 1
+5521 5521 1
+1 5522 1
+5522 5522 1
+1 5523 1
+5523 5523 1
+1 5524 1
+5524 5524 1
+1 5525 1
+5525 5525 1
+1 5526 1
+5526 5526 1
+1 5527 1
+5527 5527 1
+1 5528 1
+5528 5528 1
+1 5529 1
+5529 5529 1
+1 5530 1
+5530 5530 1
+1 5531 1
+5531 5531 1
+1 5532 1
+5532 5532 1
+1 5533 1
+5533 5533 1
+1 5534 1
+5534 5534 1
+1 5535 1
+5535 5535 1
+1 5536 1
+5536 5536 1
+1 5537 1
+5537 5537 1
+1 5538 1
+5538 5538 1
+1 5539 1
+5539 5539 1
+1 5540 1
+5540 5540 1
+1 5541 1
+5541 5541 1
+1 5542 1
+5542 5542 1
+1 5543 1
+5543 5543 1
+1 5544 1
+5544 5544 1
+1 5545 1
+5545 5545 1
+1 5546 1
+5546 5546 1
+1 5547 1
+5547 5547 1
+1 5548 1
+5548 5548 1
+1 5549 1
+5549 5549 1
+1 5550 1
+5550 5550 1
+1 5551 1
+5551 5551 1
+1 5552 1
+5552 5552 1
+1 5553 1
+5553 5553 1
+1 5554 1
+5554 5554 1
+1 5555 1
+5555 5555 1
+1 5556 1
+5556 5556 1
+1 5557 1
+5557 5557 1
+1 5558 1
+5558 5558 1
+1 5559 1
+5559 5559 1
+1 5560 1
+5560 5560 1
+1 5561 1
+5561 5561 1
+1 5562 1
+5562 5562 1
+1 5563 1
+5563 5563 1
+1 5564 1
+5564 5564 1
+1 5565 1
+5565 5565 1
+1 5566 1
+5566 5566 1
+1 5567 1
+5567 5567 1
+1 5568 1
+5568 5568 1
+1 5569 1
+5569 5569 1
+1 5570 1
+5570 5570 1
+1 5571 1
+5571 5571 1
+1 5572 1
+5572 5572 1
+1 5573 1
+5573 5573 1
+1 5574 1
+5574 5574 1
+1 5575 1
+5575 5575 1
+1 5576 1
+5576 5576 1
+1 5577 1
+5577 5577 1
+1 5578 1
+5578 5578 1
+1 5579 1
+5579 5579 1
+1 5580 1
+5580 5580 1
+1 5581 1
+5581 5581 1
+1 5582 1
+5582 5582 1
+1 5583 1
+5583 5583 1
+1 5584 1
+5584 5584 1
+1 5585 1
+5585 5585 1
+1 5586 1
+5586 5586 1
+1 5587 1
+5587 5587 1
+1 5588 1
+5588 5588 1
+1 5589 1
+5589 5589 1
+1 5590 1
+5590 5590 1
+1 5591 1
+5591 5591 1
+1 5592 1
+5592 5592 1
+1 5593 1
+5593 5593 1
+1 5594 1
+5594 5594 1
+1 5595 1
+5595 5595 1
+1 5596 1
+5596 5596 1
+1 5597 1
+5597 5597 1
+1 5598 1
+5598 5598 1
+1 5599 1
+5599 5599 1
+1 5600 1
+5600 5600 1
+1 5601 1
+5601 5601 1
+1 5602 1
+5602 5602 1
+1 5603 1
+5603 5603 1
+1 5604 1
+5604 5604 1
+1 5605 1
+5605 5605 1
+1 5606 1
+5606 5606 1
+1 5607 1
+5607 5607 1
+1 5608 1
+5608 5608 1
+1 5609 1
+5609 5609 1
+1 5610 1
+5610 5610 1
+1 5611 1
+5611 5611 1
+1 5612 1
+5612 5612 1
+1 5613 1
+5613 5613 1
+1 5614 1
+5614 5614 1
+1 5615 1
+5615 5615 1
+1 5616 1
+5616 5616 1
+1 5617 1
+5617 5617 1
+1 5618 1
+5618 5618 1
+1 5619 1
+5619 5619 1
+1 5620 1
+5620 5620 1
+1 5621 1
+5621 5621 1
+1 5622 1
+5622 5622 1
+1 5623 1
+5623 5623 1
+1 5624 1
+5624 5624 1
+1 5625 1
+5625 5625 1
+1 5626 1
+5626 5626 1
+1 5627 1
+5627 5627 1
+1 5628 1
+5628 5628 1
+1 5629 1
+5629 5629 1
+1 5630 1
+5630 5630 1
+1 5631 1
+5631 5631 1
+1 5632 1
+5632 5632 1
+1 5633 1
+5633 5633 1
+1 5634 1
+5634 5634 1
+1 5635 1
+5635 5635 1
+1 5636 1
+5636 5636 1
+1 5637 1
+5637 5637 1
+1 5638 1
+5638 5638 1
+1 5639 1
+5639 5639 1
+1 5640 1
+5640 5640 1
+1 5641 1
+5641 5641 1
+1 5642 1
+5642 5642 1
+1 5643 1
+5643 5643 1
+1 5644 1
+5644 5644 1
+1 5645 1
+5645 5645 1
+1 5646 1
+5646 5646 1
+1 5647 1
+5647 5647 1
+1 5648 1
+5648 5648 1
+1 5649 1
+5649 5649 1
+1 5650 1
+5650 5650 1
+1 5651 1
+5651 5651 1
+1 5652 1
+5652 5652 1
+1 5653 1
+5653 5653 1
+1 5654 1
+5654 5654 1
+1 5655 1
+5655 5655 1
+1 5656 1
+5656 5656 1
+1 5657 1
+5657 5657 1
+1 5658 1
+5658 5658 1
+1 5659 1
+5659 5659 1
+1 5660 1
+5660 5660 1
+1 5661 1
+5661 5661 1
+1 5662 1
+5662 5662 1
+1 5663 1
+5663 5663 1
+1 5664 1
+5664 5664 1
+1 5665 1
+5665 5665 1
+1 5666 1
+5666 5666 1
+1 5667 1
+5667 5667 1
+1 5668 1
+5668 5668 1
+1 5669 1
+5669 5669 1
+1 5670 1
+5670 5670 1
+1 5671 1
+5671 5671 1
+1 5672 1
+5672 5672 1
+1 5673 1
+5673 5673 1
+1 5674 1
+5674 5674 1
+1 5675 1
+5675 5675 1
+1 5676 1
+5676 5676 1
+1 5677 1
+5677 5677 1
+1 5678 1
+5678 5678 1
+1 5679 1
+5679 5679 1
+1 5680 1
+5680 5680 1
+1 5681 1
+5681 5681 1
+1 5682 1
+5682 5682 1
+1 5683 1
+5683 5683 1
+1 5684 1
+5684 5684 1
+1 5685 1
+5685 5685 1
+1 5686 1
+5686 5686 1
+1 5687 1
+5687 5687 1
+1 5688 1
+5688 5688 1
+1 5689 1
+5689 5689 1
+1 5690 1
+5690 5690 1
+1 5691 1
+5691 5691 1
+1 5692 1
+5692 5692 1
+1 5693 1
+5693 5693 1
+1 5694 1
+5694 5694 1
+1 5695 1
+5695 5695 1
+1 5696 1
+5696 5696 1
+1 5697 1
+5697 5697 1
+1 5698 1
+5698 5698 1
+1 5699 1
+5699 5699 1
+1 5700 1
+5700 5700 1
+1 5701 1
+5701 5701 1
+1 5702 1
+5702 5702 1
+1 5703 1
+5703 5703 1
+1 5704 1
+5704 5704 1
+1 5705 1
+5705 5705 1
+1 5706 1
+5706 5706 1
+1 5707 1
+5707 5707 1
+1 5708 1
+5708 5708 1
+1 5709 1
+5709 5709 1
+1 5710 1
+5710 5710 1
+1 5711 1
+5711 5711 1
+1 5712 1
+5712 5712 1
+1 5713 1
+5713 5713 1
+1 5714 1
+5714 5714 1
+1 5715 1
+5715 5715 1
+1 5716 1
+5716 5716 1
+1 5717 1
+5717 5717 1
+1 5718 1
+5718 5718 1
+1 5719 1
+5719 5719 1
+1 5720 1
+5720 5720 1
+1 5721 1
+5721 5721 1
+1 5722 1
+5722 5722 1
+1 5723 1
+5723 5723 1
+1 5724 1
+5724 5724 1
+1 5725 1
+5725 5725 1
+1 5726 1
+5726 5726 1
+1 5727 1
+5727 5727 1
+1 5728 1
+5728 5728 1
+1 5729 1
+5729 5729 1
+1 5730 1
+5730 5730 1
+1 5731 1
+5731 5731 1
+1 5732 1
+5732 5732 1
+1 5733 1
+5733 5733 1
+1 5734 1
+5734 5734 1
+1 5735 1
+5735 5735 1
+1 5736 1
+5736 5736 1
+1 5737 1
+5737 5737 1
+1 5738 1
+5738 5738 1
+1 5739 1
+5739 5739 1
+1 5740 1
+5740 5740 1
+1 5741 1
+5741 5741 1
+1 5742 1
+5742 5742 1
+1 5743 1
+5743 5743 1
+1 5744 1
+5744 5744 1
+1 5745 1
+5745 5745 1
+1 5746 1
+5746 5746 1
+1 5747 1
+5747 5747 1
+1 5748 1
+5748 5748 1
+1 5749 1
+5749 5749 1
+1 5750 1
+5750 5750 1
+1 5751 1
+5751 5751 1
+1 5752 1
+5752 5752 1
+1 5753 1
+5753 5753 1
+1 5754 1
+5754 5754 1
+1 5755 1
+5755 5755 1
+1 5756 1
+5756 5756 1
+1 5757 1
+5757 5757 1
+1 5758 1
+5758 5758 1
+1 5759 1
+5759 5759 1
+1 5760 1
+5760 5760 1
+1 5761 1
+5761 5761 1
+1 5762 1
+5762 5762 1
+1 5763 1
+5763 5763 1
+1 5764 1
+5764 5764 1
+1 5765 1
+5765 5765 1
+1 5766 1
+5766 5766 1
+1 5767 1
+5767 5767 1
+1 5768 1
+5768 5768 1
+1 5769 1
+5769 5769 1
+1 5770 1
+5770 5770 1
+1 5771 1
+5771 5771 1
+1 5772 1
+5772 5772 1
+1 5773 1
+5773 5773 1
+1 5774 1
+5774 5774 1
+1 5775 1
+5775 5775 1
+1 5776 1
+5776 5776 1
+1 5777 1
+5777 5777 1
+1 5778 1
+5778 5778 1
+1 5779 1
+5779 5779 1
+1 5780 1
+5780 5780 1
+1 5781 1
+5781 5781 1
+1 5782 1
+5782 5782 1
+1 5783 1
+5783 5783 1
+1 5784 1
+5784 5784 1
+1 5785 1
+5785 5785 1
+1 5786 1
+5786 5786 1
+1 5787 1
+5787 5787 1
+1 5788 1
+5788 5788 1
+1 5789 1
+5789 5789 1
+1 5790 1
+5790 5790 1
+1 5791 1
+5791 5791 1
+1 5792 1
+5792 5792 1
+1 5793 1
+5793 5793 1
+1 5794 1
+5794 5794 1
+1 5795 1
+5795 5795 1
+1 5796 1
+5796 5796 1
+1 5797 1
+5797 5797 1
+1 5798 1
+5798 5798 1
+1 5799 1
+5799 5799 1
+1 5800 1
+5800 5800 1
+1 5801 1
+5801 5801 1
+1 5802 1
+5802 5802 1
+1 5803 1
+5803 5803 1
+1 5804 1
+5804 5804 1
+1 5805 1
+5805 5805 1
+1 5806 1
+5806 5806 1
+1 5807 1
+5807 5807 1
+1 5808 1
+5808 5808 1
+1 5809 1
+5809 5809 1
+1 5810 1
+5810 5810 1
+1 5811 1
+5811 5811 1
+1 5812 1
+5812 5812 1
+1 5813 1
+5813 5813 1
+1 5814 1
+5814 5814 1
+1 5815 1
+5815 5815 1
+1 5816 1
+5816 5816 1
+1 5817 1
+5817 5817 1
+1 5818 1
+5818 5818 1
+1 5819 1
+5819 5819 1
+1 5820 1
+5820 5820 1
+1 5821 1
+5821 5821 1
+1 5822 1
+5822 5822 1
+1 5823 1
+5823 5823 1
+1 5824 1
+5824 5824 1
+1 5825 1
+5825 5825 1
+1 5826 1
+5826 5826 1
+1 5827 1
+5827 5827 1
+1 5828 1
+5828 5828 1
+1 5829 1
+5829 5829 1
+1 5830 1
+5830 5830 1
+1 5831 1
+5831 5831 1
+1 5832 1
+5832 5832 1
+1 5833 1
+5833 5833 1
+1 5834 1
+5834 5834 1
+1 5835 1
+5835 5835 1
+1 5836 1
+5836 5836 1
+1 5837 1
+5837 5837 1
+1 5838 1
+5838 5838 1
+1 5839 1
+5839 5839 1
+1 5840 1
+5840 5840 1
+1 5841 1
+5841 5841 1
+1 5842 1
+5842 5842 1
+1 5843 1
+5843 5843 1
+1 5844 1
+5844 5844 1
+1 5845 1
+5845 5845 1
+1 5846 1
+5846 5846 1
+1 5847 1
+5847 5847 1
+1 5848 1
+5848 5848 1
+1 5849 1
+5849 5849 1
+1 5850 1
+5850 5850 1
+1 5851 1
+5851 5851 1
+1 5852 1
+5852 5852 1
+1 5853 1
+5853 5853 1
+1 5854 1
+5854 5854 1
+1 5855 1
+5855 5855 1
+1 5856 1
+5856 5856 1
+1 5857 1
+5857 5857 1
+1 5858 1
+5858 5858 1
+1 5859 1
+5859 5859 1
+1 5860 1
+5860 5860 1
+1 5861 1
+5861 5861 1
+1 5862 1
+5862 5862 1
+1 5863 1
+5863 5863 1
+1 5864 1
+5864 5864 1
+1 5865 1
+5865 5865 1
+1 5866 1
+5866 5866 1
+1 5867 1
+5867 5867 1
+1 5868 1
+5868 5868 1
+1 5869 1
+5869 5869 1
+1 5870 1
+5870 5870 1
+1 5871 1
+5871 5871 1
+1 5872 1
+5872 5872 1
+1 5873 1
+5873 5873 1
+1 5874 1
+5874 5874 1
+1 5875 1
+5875 5875 1
+1 5876 1
+5876 5876 1
+1 5877 1
+5877 5877 1
+1 5878 1
+5878 5878 1
+1 5879 1
+5879 5879 1
+1 5880 1
+5880 5880 1
+1 5881 1
+5881 5881 1
+1 5882 1
+5882 5882 1
+1 5883 1
+5883 5883 1
+1 5884 1
+5884 5884 1
+1 5885 1
+5885 5885 1
+1 5886 1
+5886 5886 1
+1 5887 1
+5887 5887 1
+1 5888 1
+5888 5888 1
+1 5889 1
+5889 5889 1
+1 5890 1
+5890 5890 1
+1 5891 1
+5891 5891 1
+1 5892 1
+5892 5892 1
+1 5893 1
+5893 5893 1
+1 5894 1
+5894 5894 1
+1 5895 1
+5895 5895 1
+1 5896 1
+5896 5896 1
+1 5897 1
+5897 5897 1
+1 5898 1
+5898 5898 1
+1 5899 1
+5899 5899 1
+1 5900 1
+5900 5900 1
+1 5901 1
+5901 5901 1
+1 5902 1
+5902 5902 1
+1 5903 1
+5903 5903 1
+1 5904 1
+5904 5904 1
+1 5905 1
+5905 5905 1
+1 5906 1
+5906 5906 1
+1 5907 1
+5907 5907 1
+1 5908 1
+5908 5908 1
+1 5909 1
+5909 5909 1
+1 5910 1
+5910 5910 1
+1 5911 1
+5911 5911 1
+1 5912 1
+5912 5912 1
+1 5913 1
+5913 5913 1
+1 5914 1
+5914 5914 1
+1 5915 1
+5915 5915 1
+1 5916 1
+5916 5916 1
+1 5917 1
+5917 5917 1
+1 5918 1
+5918 5918 1
+1 5919 1
+5919 5919 1
+1 5920 1
+5920 5920 1
+1 5921 1
+5921 5921 1
+1 5922 1
+5922 5922 1
+1 5923 1
+5923 5923 1
+1 5924 1
+5924 5924 1
+1 5925 1
+5925 5925 1
+1 5926 1
+5926 5926 1
+1 5927 1
+5927 5927 1
+1 5928 1
+5928 5928 1
+1 5929 1
+5929 5929 1
+1 5930 1
+5930 5930 1
+1 5931 1
+5931 5931 1
+1 5932 1
+5932 5932 1
+1 5933 1
+5933 5933 1
+1 5934 1
+5934 5934 1
+1 5935 1
+5935 5935 1
+1 5936 1
+5936 5936 1
+1 5937 1
+5937 5937 1
+1 5938 1
+5938 5938 1
+1 5939 1
+5939 5939 1
+1 5940 1
+5940 5940 1
+1 5941 1
+5941 5941 1
+1 5942 1
+5942 5942 1
+1 5943 1
+5943 5943 1
+1 5944 1
+5944 5944 1
+1 5945 1
+5945 5945 1
+1 5946 1
+5946 5946 1
+1 5947 1
+5947 5947 1
+1 5948 1
+5948 5948 1
+1 5949 1
+5949 5949 1
+1 5950 1
+5950 5950 1
+1 5951 1
+5951 5951 1
+1 5952 1
+5952 5952 1
+1 5953 1
+5953 5953 1
+1 5954 1
+5954 5954 1
+1 5955 1
+5955 5955 1
+1 5956 1
+5956 5956 1
+1 5957 1
+5957 5957 1
+1 5958 1
+5958 5958 1
+1 5959 1
+5959 5959 1
+1 5960 1
+5960 5960 1
+1 5961 1
+5961 5961 1
+1 5962 1
+5962 5962 1
+1 5963 1
+5963 5963 1
+1 5964 1
+5964 5964 1
+1 5965 1
+5965 5965 1
+1 5966 1
+5966 5966 1
+1 5967 1
+5967 5967 1
+1 5968 1
+5968 5968 1
+1 5969 1
+5969 5969 1
+1 5970 1
+5970 5970 1
+1 5971 1
+5971 5971 1
+1 5972 1
+5972 5972 1
+1 5973 1
+5973 5973 1
+1 5974 1
+5974 5974 1
+1 5975 1
+5975 5975 1
+1 5976 1
+5976 5976 1
+1 5977 1
+5977 5977 1
+1 5978 1
+5978 5978 1
+1 5979 1
+5979 5979 1
+1 5980 1
+5980 5980 1
+1 5981 1
+5981 5981 1
+1 5982 1
+5982 5982 1
+1 5983 1
+5983 5983 1
+1 5984 1
+5984 5984 1
+1 5985 1
+5985 5985 1
+1 5986 1
+5986 5986 1
+1 5987 1
+5987 5987 1
+1 5988 1
+5988 5988 1
+1 5989 1
+5989 5989 1
+1 5990 1
+5990 5990 1
+1 5991 1
+5991 5991 1
+1 5992 1
+5992 5992 1
+1 5993 1
+5993 5993 1
+1 5994 1
+5994 5994 1
+1 5995 1
+5995 5995 1
+1 5996 1
+5996 5996 1
+1 5997 1
+5997 5997 1
+1 5998 1
+5998 5998 1
+1 5999 1
+5999 5999 1
+1 6000 1
+6000 6000 1
+1 6001 1
+6001 6001 1
+1 6002 1
+6002 6002 1
+1 6003 1
+6003 6003 1
+1 6004 1
+6004 6004 1
+1 6005 1
+6005 6005 1
+1 6006 1
+6006 6006 1
+1 6007 1
+6007 6007 1
+1 6008 1
+6008 6008 1
+1 6009 1
+6009 6009 1
+1 6010 1
+6010 6010 1
+1 6011 1
+6011 6011 1
+1 6012 1
+6012 6012 1
+1 6013 1
+6013 6013 1
+1 6014 1
+6014 6014 1
+1 6015 1
+6015 6015 1
+1 6016 1
+6016 6016 1
+1 6017 1
+6017 6017 1
+1 6018 1
+6018 6018 1
+1 6019 1
+6019 6019 1
+1 6020 1
+6020 6020 1
+1 6021 1
+6021 6021 1
+1 6022 1
+6022 6022 1
+1 6023 1
+6023 6023 1
+1 6024 1
+6024 6024 1
+1 6025 1
+6025 6025 1
+1 6026 1
+6026 6026 1
+1 6027 1
+6027 6027 1
+1 6028 1
+6028 6028 1
+1 6029 1
+6029 6029 1
+1 6030 1
+6030 6030 1
+1 6031 1
+6031 6031 1
+1 6032 1
+6032 6032 1
+1 6033 1
+6033 6033 1
+1 6034 1
+6034 6034 1
+1 6035 1
+6035 6035 1
+1 6036 1
+6036 6036 1
+1 6037 1
+6037 6037 1
+1 6038 1
+6038 6038 1
+1 6039 1
+6039 6039 1
+1 6040 1
+6040 6040 1
+1 6041 1
+6041 6041 1
+1 6042 1
+6042 6042 1
+1 6043 1
+6043 6043 1
+1 6044 1
+6044 6044 1
+1 6045 1
+6045 6045 1
+1 6046 1
+6046 6046 1
+1 6047 1
+6047 6047 1
+1 6048 1
+6048 6048 1
+1 6049 1
+6049 6049 1
+1 6050 1
+6050 6050 1
+1 6051 1
+6051 6051 1
+1 6052 1
+6052 6052 1
+1 6053 1
+6053 6053 1
+1 6054 1
+6054 6054 1
+1 6055 1
+6055 6055 1
+1 6056 1
+6056 6056 1
+1 6057 1
+6057 6057 1
+1 6058 1
+6058 6058 1
+1 6059 1
+6059 6059 1
+1 6060 1
+6060 6060 1
+1 6061 1
+6061 6061 1
+1 6062 1
+6062 6062 1
+1 6063 1
+6063 6063 1
+1 6064 1
+6064 6064 1
+1 6065 1
+6065 6065 1
+1 6066 1
+6066 6066 1
+1 6067 1
+6067 6067 1
+1 6068 1
+6068 6068 1
+1 6069 1
+6069 6069 1
+1 6070 1
+6070 6070 1
+1 6071 1
+6071 6071 1
+1 6072 1
+6072 6072 1
+1 6073 1
+6073 6073 1
+1 6074 1
+6074 6074 1
+1 6075 1
+6075 6075 1
+1 6076 1
+6076 6076 1
+1 6077 1
+6077 6077 1
+1 6078 1
+6078 6078 1
+1 6079 1
+6079 6079 1
+1 6080 1
+6080 6080 1
+1 6081 1
+6081 6081 1
+1 6082 1
+6082 6082 1
+1 6083 1
+6083 6083 1
+1 6084 1
+6084 6084 1
+1 6085 1
+6085 6085 1
+1 6086 1
+6086 6086 1
+1 6087 1
+6087 6087 1
+1 6088 1
+6088 6088 1
+1 6089 1
+6089 6089 1
+1 6090 1
+6090 6090 1
+1 6091 1
+6091 6091 1
+1 6092 1
+6092 6092 1
+1 6093 1
+6093 6093 1
+1 6094 1
+6094 6094 1
+1 6095 1
+6095 6095 1
+1 6096 1
+6096 6096 1
+1 6097 1
+6097 6097 1
+1 6098 1
+6098 6098 1
+1 6099 1
+6099 6099 1
+1 6100 1
+6100 6100 1
+1 6101 1
+6101 6101 1
+1 6102 1
+6102 6102 1
+1 6103 1
+6103 6103 1
+1 6104 1
+6104 6104 1
+1 6105 1
+6105 6105 1
+1 6106 1
+6106 6106 1
+1 6107 1
+6107 6107 1
+1 6108 1
+6108 6108 1
+1 6109 1
+6109 6109 1
+1 6110 1
+6110 6110 1
+1 6111 1
+6111 6111 1
+1 6112 1
+6112 6112 1
+1 6113 1
+6113 6113 1
+1 6114 1
+6114 6114 1
+1 6115 1
+6115 6115 1
+1 6116 1
+6116 6116 1
+1 6117 1
+6117 6117 1
+1 6118 1
+6118 6118 1
+1 6119 1
+6119 6119 1
+1 6120 1
+6120 6120 1
+1 6121 1
+6121 6121 1
+1 6122 1
+6122 6122 1
+1 6123 1
+6123 6123 1
+1 6124 1
+6124 6124 1
+1 6125 1
+6125 6125 1
+1 6126 1
+6126 6126 1
+1 6127 1
+6127 6127 1
+1 6128 1
+6128 6128 1
+1 6129 1
+6129 6129 1
+1 6130 1
+6130 6130 1
+1 6131 1
+6131 6131 1
+1 6132 1
+6132 6132 1
+1 6133 1
+6133 6133 1
+1 6134 1
+6134 6134 1
+1 6135 1
+6135 6135 1
+1 6136 1
+6136 6136 1
+1 6137 1
+6137 6137 1
+1 6138 1
+6138 6138 1
+1 6139 1
+6139 6139 1
+1 6140 1
+6140 6140 1
+1 6141 1
+6141 6141 1
+1 6142 1
+6142 6142 1
+1 6143 1
+6143 6143 1
+1 6144 1
+6144 6144 1
+1 6145 1
+6145 6145 1
+1 6146 1
+6146 6146 1
+1 6147 1
+6147 6147 1
+1 6148 1
+6148 6148 1
+1 6149 1
+6149 6149 1
+1 6150 1
+6150 6150 1
+1 6151 1
+6151 6151 1
+1 6152 1
+6152 6152 1
+1 6153 1
+6153 6153 1
+1 6154 1
+6154 6154 1
+1 6155 1
+6155 6155 1
+1 6156 1
+6156 6156 1
+1 6157 1
+6157 6157 1
+1 6158 1
+6158 6158 1
+1 6159 1
+6159 6159 1
+1 6160 1
+6160 6160 1
+1 6161 1
+6161 6161 1
+1 6162 1
+6162 6162 1
+1 6163 1
+6163 6163 1
+1 6164 1
+6164 6164 1
+1 6165 1
+6165 6165 1
+1 6166 1
+6166 6166 1
+1 6167 1
+6167 6167 1
+1 6168 1
+6168 6168 1
+1 6169 1
+6169 6169 1
+1 6170 1
+6170 6170 1
+1 6171 1
+6171 6171 1
+1 6172 1
+6172 6172 1
+1 6173 1
+6173 6173 1
+1 6174 1
+6174 6174 1
+1 6175 1
+6175 6175 1
+1 6176 1
+6176 6176 1
+1 6177 1
+6177 6177 1
+1 6178 1
+6178 6178 1
+1 6179 1
+6179 6179 1
+1 6180 1
+6180 6180 1
+1 6181 1
+6181 6181 1
+1 6182 1
+6182 6182 1
+1 6183 1
+6183 6183 1
+1 6184 1
+6184 6184 1
+1 6185 1
+6185 6185 1
+1 6186 1
+6186 6186 1
+1 6187 1
+6187 6187 1
+1 6188 1
+6188 6188 1
+1 6189 1
+6189 6189 1
+1 6190 1
+6190 6190 1
+1 6191 1
+6191 6191 1
+1 6192 1
+6192 6192 1
+1 6193 1
+6193 6193 1
+1 6194 1
+6194 6194 1
+1 6195 1
+6195 6195 1
+1 6196 1
+6196 6196 1
+1 6197 1
+6197 6197 1
+1 6198 1
+6198 6198 1
+1 6199 1
+6199 6199 1
+1 6200 1
+6200 6200 1
+1 6201 1
+6201 6201 1
+1 6202 1
+6202 6202 1
+1 6203 1
+6203 6203 1
+1 6204 1
+6204 6204 1
+1 6205 1
+6205 6205 1
+1 6206 1
+6206 6206 1
+1 6207 1
+6207 6207 1
+1 6208 1
+6208 6208 1
+1 6209 1
+6209 6209 1
+1 6210 1
+6210 6210 1
+1 6211 1
+6211 6211 1
+1 6212 1
+6212 6212 1
+1 6213 1
+6213 6213 1
+1 6214 1
+6214 6214 1
+1 6215 1
+6215 6215 1
+1 6216 1
+6216 6216 1
+1 6217 1
+6217 6217 1
+1 6218 1
+6218 6218 1
+1 6219 1
+6219 6219 1
+1 6220 1
+6220 6220 1
+1 6221 1
+6221 6221 1
+1 6222 1
+6222 6222 1
+1 6223 1
+6223 6223 1
+1 6224 1
+6224 6224 1
+1 6225 1
+6225 6225 1
+1 6226 1
+6226 6226 1
+1 6227 1
+6227 6227 1
+1 6228 1
+6228 6228 1
+1 6229 1
+6229 6229 1
+1 6230 1
+6230 6230 1
+1 6231 1
+6231 6231 1
+1 6232 1
+6232 6232 1
+1 6233 1
+6233 6233 1
+1 6234 1
+6234 6234 1
+1 6235 1
+6235 6235 1
+1 6236 1
+6236 6236 1
+1 6237 1
+6237 6237 1
+1 6238 1
+6238 6238 1
+1 6239 1
+6239 6239 1
+1 6240 1
+6240 6240 1
+1 6241 1
+6241 6241 1
+1 6242 1
+6242 6242 1
+1 6243 1
+6243 6243 1
+1 6244 1
+6244 6244 1
+1 6245 1
+6245 6245 1
+1 6246 1
+6246 6246 1
+1 6247 1
+6247 6247 1
+1 6248 1
+6248 6248 1
+1 6249 1
+6249 6249 1
+1 6250 1
+6250 6250 1
+1 6251 1
+6251 6251 1
+1 6252 1
+6252 6252 1
+1 6253 1
+6253 6253 1
+1 6254 1
+6254 6254 1
+1 6255 1
+6255 6255 1
+1 6256 1
+6256 6256 1
+1 6257 1
+6257 6257 1
+1 6258 1
+6258 6258 1
+1 6259 1
+6259 6259 1
+1 6260 1
+6260 6260 1
+1 6261 1
+6261 6261 1
+1 6262 1
+6262 6262 1
+1 6263 1
+6263 6263 1
+1 6264 1
+6264 6264 1
+1 6265 1
+6265 6265 1
+1 6266 1
+6266 6266 1
+1 6267 1
+6267 6267 1
+1 6268 1
+6268 6268 1
+1 6269 1
+6269 6269 1
+1 6270 1
+6270 6270 1
+1 6271 1
+6271 6271 1
+1 6272 1
+6272 6272 1
+1 6273 1
+6273 6273 1
+1 6274 1
+6274 6274 1
+1 6275 1
+6275 6275 1
+1 6276 1
+6276 6276 1
+1 6277 1
+6277 6277 1
+1 6278 1
+6278 6278 1
+1 6279 1
+6279 6279 1
+1 6280 1
+6280 6280 1
+1 6281 1
+6281 6281 1
+1 6282 1
+6282 6282 1
+1 6283 1
+6283 6283 1
+1 6284 1
+6284 6284 1
+1 6285 1
+6285 6285 1
+1 6286 1
+6286 6286 1
+1 6287 1
+6287 6287 1
+1 6288 1
+6288 6288 1
+1 6289 1
+6289 6289 1
+1 6290 1
+6290 6290 1
+1 6291 1
+6291 6291 1
+1 6292 1
+6292 6292 1
+1 6293 1
+6293 6293 1
+1 6294 1
+6294 6294 1
+1 6295 1
+6295 6295 1
+1 6296 1
+6296 6296 1
+1 6297 1
+6297 6297 1
+1 6298 1
+6298 6298 1
+1 6299 1
+6299 6299 1
+1 6300 1
+6300 6300 1
+1 6301 1
+6301 6301 1
+1 6302 1
+6302 6302 1
+1 6303 1
+6303 6303 1
+1 6304 1
+6304 6304 1
+1 6305 1
+6305 6305 1
+1 6306 1
+6306 6306 1
+1 6307 1
+6307 6307 1
+1 6308 1
+6308 6308 1
+1 6309 1
+6309 6309 1
+1 6310 1
+6310 6310 1
+1 6311 1
+6311 6311 1
+1 6312 1
+6312 6312 1
+1 6313 1
+6313 6313 1
+1 6314 1
+6314 6314 1
+1 6315 1
+6315 6315 1
+1 6316 1
+6316 6316 1
+1 6317 1
+6317 6317 1
+1 6318 1
+6318 6318 1
+1 6319 1
+6319 6319 1
+1 6320 1
+6320 6320 1
+1 6321 1
+6321 6321 1
+1 6322 1
+6322 6322 1
+1 6323 1
+6323 6323 1
+1 6324 1
+6324 6324 1
+1 6325 1
+6325 6325 1
+1 6326 1
+6326 6326 1
+1 6327 1
+6327 6327 1
+1 6328 1
+6328 6328 1
+1 6329 1
+6329 6329 1
+1 6330 1
+6330 6330 1
+1 6331 1
+6331 6331 1
+1 6332 1
+6332 6332 1
+1 6333 1
+6333 6333 1
+1 6334 1
+6334 6334 1
+1 6335 1
+6335 6335 1
+1 6336 1
+6336 6336 1
+1 6337 1
+6337 6337 1
+1 6338 1
+6338 6338 1
+1 6339 1
+6339 6339 1
+1 6340 1
+6340 6340 1
+1 6341 1
+6341 6341 1
+1 6342 1
+6342 6342 1
+1 6343 1
+6343 6343 1
+1 6344 1
+6344 6344 1
+1 6345 1
+6345 6345 1
+1 6346 1
+6346 6346 1
+1 6347 1
+6347 6347 1
+1 6348 1
+6348 6348 1
+1 6349 1
+6349 6349 1
+1 6350 1
+6350 6350 1
+1 6351 1
+6351 6351 1
+1 6352 1
+6352 6352 1
+1 6353 1
+6353 6353 1
+1 6354 1
+6354 6354 1
+1 6355 1
+6355 6355 1
+1 6356 1
+6356 6356 1
+1 6357 1
+6357 6357 1
+1 6358 1
+6358 6358 1
+1 6359 1
+6359 6359 1
+1 6360 1
+6360 6360 1
+1 6361 1
+6361 6361 1
+1 6362 1
+6362 6362 1
+1 6363 1
+6363 6363 1
+1 6364 1
+6364 6364 1
+1 6365 1
+6365 6365 1
+1 6366 1
+6366 6366 1
+1 6367 1
+6367 6367 1
+1 6368 1
+6368 6368 1
+1 6369 1
+6369 6369 1
+1 6370 1
+6370 6370 1
+1 6371 1
+6371 6371 1
+1 6372 1
+6372 6372 1
+1 6373 1
+6373 6373 1
+1 6374 1
+6374 6374 1
+1 6375 1
+6375 6375 1
+1 6376 1
+6376 6376 1
+1 6377 1
+6377 6377 1
+1 6378 1
+6378 6378 1
+1 6379 1
+6379 6379 1
+1 6380 1
+6380 6380 1
+1 6381 1
+6381 6381 1
+1 6382 1
+6382 6382 1
+1 6383 1
+6383 6383 1
+1 6384 1
+6384 6384 1
+1 6385 1
+6385 6385 1
+1 6386 1
+6386 6386 1
+1 6387 1
+6387 6387 1
+1 6388 1
+6388 6388 1
+1 6389 1
+6389 6389 1
+1 6390 1
+6390 6390 1
+1 6391 1
+6391 6391 1
+1 6392 1
+6392 6392 1
+1 6393 1
+6393 6393 1
+1 6394 1
+6394 6394 1
+1 6395 1
+6395 6395 1
+1 6396 1
+6396 6396 1
+1 6397 1
+6397 6397 1
+1 6398 1
+6398 6398 1
+1 6399 1
+6399 6399 1
+1 6400 1
+6400 6400 1
+1 6401 1
+6401 6401 1
+1 6402 1
+6402 6402 1
+1 6403 1
+6403 6403 1
+1 6404 1
+6404 6404 1
+1 6405 1
+6405 6405 1
+1 6406 1
+6406 6406 1
+1 6407 1
+6407 6407 1
+1 6408 1
+6408 6408 1
+1 6409 1
+6409 6409 1
+1 6410 1
+6410 6410 1
+1 6411 1
+6411 6411 1
+1 6412 1
+6412 6412 1
+1 6413 1
+6413 6413 1
+1 6414 1
+6414 6414 1
+1 6415 1
+6415 6415 1
+1 6416 1
+6416 6416 1
+1 6417 1
+6417 6417 1
+1 6418 1
+6418 6418 1
+1 6419 1
+6419 6419 1
+1 6420 1
+6420 6420 1
+1 6421 1
+6421 6421 1
+1 6422 1
+6422 6422 1
+1 6423 1
+6423 6423 1
+1 6424 1
+6424 6424 1
+1 6425 1
+6425 6425 1
+1 6426 1
+6426 6426 1
+1 6427 1
+6427 6427 1
+1 6428 1
+6428 6428 1
+1 6429 1
+6429 6429 1
+1 6430 1
+6430 6430 1
+1 6431 1
+6431 6431 1
+1 6432 1
+6432 6432 1
+1 6433 1
+6433 6433 1
+1 6434 1
+6434 6434 1
+1 6435 1
+6435 6435 1
+1 6436 1
+6436 6436 1
+1 6437 1
+6437 6437 1
+1 6438 1
+6438 6438 1
+1 6439 1
+6439 6439 1
+1 6440 1
+6440 6440 1
+1 6441 1
+6441 6441 1
+1 6442 1
+6442 6442 1
+1 6443 1
+6443 6443 1
+1 6444 1
+6444 6444 1
+1 6445 1
+6445 6445 1
+1 6446 1
+6446 6446 1
+1 6447 1
+6447 6447 1
+1 6448 1
+6448 6448 1
+1 6449 1
+6449 6449 1
+1 6450 1
+6450 6450 1
+1 6451 1
+6451 6451 1
+1 6452 1
+6452 6452 1
+1 6453 1
+6453 6453 1
+1 6454 1
+6454 6454 1
+1 6455 1
+6455 6455 1
+1 6456 1
+6456 6456 1
+1 6457 1
+6457 6457 1
+1 6458 1
+6458 6458 1
+1 6459 1
+6459 6459 1
+1 6460 1
+6460 6460 1
+1 6461 1
+6461 6461 1
+1 6462 1
+6462 6462 1
+1 6463 1
+6463 6463 1
+1 6464 1
+6464 6464 1
+1 6465 1
+6465 6465 1
+1 6466 1
+6466 6466 1
+1 6467 1
+6467 6467 1
+1 6468 1
+6468 6468 1
+1 6469 1
+6469 6469 1
+1 6470 1
+6470 6470 1
+1 6471 1
+6471 6471 1
+1 6472 1
+6472 6472 1
+1 6473 1
+6473 6473 1
+1 6474 1
+6474 6474 1
+1 6475 1
+6475 6475 1
+1 6476 1
+6476 6476 1
+1 6477 1
+6477 6477 1
+1 6478 1
+6478 6478 1
+1 6479 1
+6479 6479 1
+1 6480 1
+6480 6480 1
+1 6481 1
+6481 6481 1
+1 6482 1
+6482 6482 1
+1 6483 1
+6483 6483 1
+1 6484 1
+6484 6484 1
+1 6485 1
+6485 6485 1
+1 6486 1
+6486 6486 1
+1 6487 1
+6487 6487 1
+1 6488 1
+6488 6488 1
+1 6489 1
+6489 6489 1
+1 6490 1
+6490 6490 1
+1 6491 1
+6491 6491 1
+1 6492 1
+6492 6492 1
+1 6493 1
+6493 6493 1
+1 6494 1
+6494 6494 1
+1 6495 1
+6495 6495 1
+1 6496 1
+6496 6496 1
+1 6497 1
+6497 6497 1
+1 6498 1
+6498 6498 1
+1 6499 1
+6499 6499 1
+1 6500 1
+6500 6500 1
+1 6501 1
+6501 6501 1
+1 6502 1
+6502 6502 1
+1 6503 1
+6503 6503 1
+1 6504 1
+6504 6504 1
+1 6505 1
+6505 6505 1
+1 6506 1
+6506 6506 1
+1 6507 1
+6507 6507 1
+1 6508 1
+6508 6508 1
+1 6509 1
+6509 6509 1
+1 6510 1
+6510 6510 1
+1 6511 1
+6511 6511 1
+1 6512 1
+6512 6512 1
+1 6513 1
+6513 6513 1
+1 6514 1
+6514 6514 1
+1 6515 1
+6515 6515 1
+1 6516 1
+6516 6516 1
+1 6517 1
+6517 6517 1
+1 6518 1
+6518 6518 1
+1 6519 1
+6519 6519 1
+1 6520 1
+6520 6520 1
+1 6521 1
+6521 6521 1
+1 6522 1
+6522 6522 1
+1 6523 1
+6523 6523 1
+1 6524 1
+6524 6524 1
+1 6525 1
+6525 6525 1
+1 6526 1
+6526 6526 1
+1 6527 1
+6527 6527 1
+1 6528 1
+6528 6528 1
+1 6529 1
+6529 6529 1
+1 6530 1
+6530 6530 1
+1 6531 1
+6531 6531 1
+1 6532 1
+6532 6532 1
+1 6533 1
+6533 6533 1
+1 6534 1
+6534 6534 1
+1 6535 1
+6535 6535 1
+1 6536 1
+6536 6536 1
+1 6537 1
+6537 6537 1
+1 6538 1
+6538 6538 1
+1 6539 1
+6539 6539 1
+1 6540 1
+6540 6540 1
+1 6541 1
+6541 6541 1
+1 6542 1
+6542 6542 1
+1 6543 1
+6543 6543 1
+1 6544 1
+6544 6544 1
+1 6545 1
+6545 6545 1
+1 6546 1
+6546 6546 1
+1 6547 1
+6547 6547 1
+1 6548 1
+6548 6548 1
+1 6549 1
+6549 6549 1
+1 6550 1
+6550 6550 1
+1 6551 1
+6551 6551 1
+1 6552 1
+6552 6552 1
+1 6553 1
+6553 6553 1
+1 6554 1
+6554 6554 1
+1 6555 1
+6555 6555 1
+1 6556 1
+6556 6556 1
+1 6557 1
+6557 6557 1
+1 6558 1
+6558 6558 1
+1 6559 1
+6559 6559 1
+1 6560 1
+6560 6560 1
+1 6561 1
+6561 6561 1
+1 6562 1
+6562 6562 1
+1 6563 1
+6563 6563 1
+1 6564 1
+6564 6564 1
+1 6565 1
+6565 6565 1
+1 6566 1
+6566 6566 1
+1 6567 1
+6567 6567 1
+1 6568 1
+6568 6568 1
+1 6569 1
+6569 6569 1
+1 6570 1
+6570 6570 1
+1 6571 1
+6571 6571 1
+1 6572 1
+6572 6572 1
+1 6573 1
+6573 6573 1
+1 6574 1
+6574 6574 1
+1 6575 1
+6575 6575 1
+1 6576 1
+6576 6576 1
+1 6577 1
+6577 6577 1
+1 6578 1
+6578 6578 1
+1 6579 1
+6579 6579 1
+1 6580 1
+6580 6580 1
+1 6581 1
+6581 6581 1
+1 6582 1
+6582 6582 1
+1 6583 1
+6583 6583 1
+1 6584 1
+6584 6584 1
+1 6585 1
+6585 6585 1
+1 6586 1
+6586 6586 1
+1 6587 1
+6587 6587 1
+1 6588 1
+6588 6588 1
+1 6589 1
+6589 6589 1
+1 6590 1
+6590 6590 1
+1 6591 1
+6591 6591 1
+1 6592 1
+6592 6592 1
+1 6593 1
+6593 6593 1
+1 6594 1
+6594 6594 1
+1 6595 1
+6595 6595 1
+1 6596 1
+6596 6596 1
+1 6597 1
+6597 6597 1
+1 6598 1
+6598 6598 1
+1 6599 1
+6599 6599 1
+1 6600 1
+6600 6600 1
+1 6601 1
+6601 6601 1
+1 6602 1
+6602 6602 1
+1 6603 1
+6603 6603 1
+1 6604 1
+6604 6604 1
+1 6605 1
+6605 6605 1
+1 6606 1
+6606 6606 1
+1 6607 1
+6607 6607 1
+1 6608 1
+6608 6608 1
+1 6609 1
+6609 6609 1
+1 6610 1
+6610 6610 1
+1 6611 1
+6611 6611 1
+1 6612 1
+6612 6612 1
+1 6613 1
+6613 6613 1
+1 6614 1
+6614 6614 1
+1 6615 1
+6615 6615 1
+1 6616 1
+6616 6616 1
+1 6617 1
+6617 6617 1
+1 6618 1
+6618 6618 1
+1 6619 1
+6619 6619 1
+1 6620 1
+6620 6620 1
+1 6621 1
+6621 6621 1
+1 6622 1
+6622 6622 1
+1 6623 1
+6623 6623 1
+1 6624 1
+6624 6624 1
+1 6625 1
+6625 6625 1
+1 6626 1
+6626 6626 1
+1 6627 1
+6627 6627 1
+1 6628 1
+6628 6628 1
+1 6629 1
+6629 6629 1
+1 6630 1
+6630 6630 1
+1 6631 1
+6631 6631 1
+1 6632 1
+6632 6632 1
+1 6633 1
+6633 6633 1
+1 6634 1
+6634 6634 1
+1 6635 1
+6635 6635 1
+1 6636 1
+6636 6636 1
+1 6637 1
+6637 6637 1
+1 6638 1
+6638 6638 1
+1 6639 1
+6639 6639 1
+1 6640 1
+6640 6640 1
+1 6641 1
+6641 6641 1
+1 6642 1
+6642 6642 1
+1 6643 1
+6643 6643 1
+1 6644 1
+6644 6644 1
+1 6645 1
+6645 6645 1
+1 6646 1
+6646 6646 1
+1 6647 1
+6647 6647 1
+1 6648 1
+6648 6648 1
+1 6649 1
+6649 6649 1
+1 6650 1
+6650 6650 1
+1 6651 1
+6651 6651 1
+1 6652 1
+6652 6652 1
+1 6653 1
+6653 6653 1
+1 6654 1
+6654 6654 1
+1 6655 1
+6655 6655 1
+1 6656 1
+6656 6656 1
+1 6657 1
+6657 6657 1
+1 6658 1
+6658 6658 1
+1 6659 1
+6659 6659 1
+1 6660 1
+6660 6660 1
+1 6661 1
+6661 6661 1
+1 6662 1
+6662 6662 1
+1 6663 1
+6663 6663 1
+1 6664 1
+6664 6664 1
+1 6665 1
+6665 6665 1
+1 6666 1
+6666 6666 1
+1 6667 1
+6667 6667 1
+1 6668 1
+6668 6668 1
+1 6669 1
+6669 6669 1
+1 6670 1
+6670 6670 1
+1 6671 1
+6671 6671 1
+1 6672 1
+6672 6672 1
+1 6673 1
+6673 6673 1
+1 6674 1
+6674 6674 1
+1 6675 1
+6675 6675 1
+1 6676 1
+6676 6676 1
+1 6677 1
+6677 6677 1
+1 6678 1
+6678 6678 1
+1 6679 1
+6679 6679 1
+1 6680 1
+6680 6680 1
+1 6681 1
+6681 6681 1
+1 6682 1
+6682 6682 1
+1 6683 1
+6683 6683 1
+1 6684 1
+6684 6684 1
+1 6685 1
+6685 6685 1
+1 6686 1
+6686 6686 1
+1 6687 1
+6687 6687 1
+1 6688 1
+6688 6688 1
+1 6689 1
+6689 6689 1
+1 6690 1
+6690 6690 1
+1 6691 1
+6691 6691 1
+1 6692 1
+6692 6692 1
+1 6693 1
+6693 6693 1
+1 6694 1
+6694 6694 1
+1 6695 1
+6695 6695 1
+1 6696 1
+6696 6696 1
+1 6697 1
+6697 6697 1
+1 6698 1
+6698 6698 1
+1 6699 1
+6699 6699 1
+1 6700 1
+6700 6700 1
+1 6701 1
+6701 6701 1
+1 6702 1
+6702 6702 1
+1 6703 1
+6703 6703 1
+1 6704 1
+6704 6704 1
+1 6705 1
+6705 6705 1
+1 6706 1
+6706 6706 1
+1 6707 1
+6707 6707 1
+1 6708 1
+6708 6708 1
+1 6709 1
+6709 6709 1
+1 6710 1
+6710 6710 1
+1 6711 1
+6711 6711 1
+1 6712 1
+6712 6712 1
+1 6713 1
+6713 6713 1
+1 6714 1
+6714 6714 1
+1 6715 1
+6715 6715 1
+1 6716 1
+6716 6716 1
+1 6717 1
+6717 6717 1
+1 6718 1
+6718 6718 1
+1 6719 1
+6719 6719 1
+1 6720 1
+6720 6720 1
+1 6721 1
+6721 6721 1
+1 6722 1
+6722 6722 1
+1 6723 1
+6723 6723 1
+1 6724 1
+6724 6724 1
+1 6725 1
+6725 6725 1
+1 6726 1
+6726 6726 1
+1 6727 1
+6727 6727 1
+1 6728 1
+6728 6728 1
+1 6729 1
+6729 6729 1
+1 6730 1
+6730 6730 1
+1 6731 1
+6731 6731 1
+1 6732 1
+6732 6732 1
+1 6733 1
+6733 6733 1
+1 6734 1
+6734 6734 1
+1 6735 1
+6735 6735 1
+1 6736 1
+6736 6736 1
+1 6737 1
+6737 6737 1
+1 6738 1
+6738 6738 1
+1 6739 1
+6739 6739 1
+1 6740 1
+6740 6740 1
+1 6741 1
+6741 6741 1
+1 6742 1
+6742 6742 1
+1 6743 1
+6743 6743 1
+1 6744 1
+6744 6744 1
+1 6745 1
+6745 6745 1
+1 6746 1
+6746 6746 1
+1 6747 1
+6747 6747 1
+1 6748 1
+6748 6748 1
+1 6749 1
+6749 6749 1
+1 6750 1
+6750 6750 1
+1 6751 1
+6751 6751 1
+1 6752 1
+6752 6752 1
+1 6753 1
+6753 6753 1
+1 6754 1
+6754 6754 1
+1 6755 1
+6755 6755 1
+1 6756 1
+6756 6756 1
+1 6757 1
+6757 6757 1
+1 6758 1
+6758 6758 1
+1 6759 1
+6759 6759 1
+1 6760 1
+6760 6760 1
+1 6761 1
+6761 6761 1
+1 6762 1
+6762 6762 1
+1 6763 1
+6763 6763 1
+1 6764 1
+6764 6764 1
+1 6765 1
+6765 6765 1
+1 6766 1
+6766 6766 1
+1 6767 1
+6767 6767 1
+1 6768 1
+6768 6768 1
+1 6769 1
+6769 6769 1
+1 6770 1
+6770 6770 1
+1 6771 1
+6771 6771 1
+1 6772 1
+6772 6772 1
+1 6773 1
+6773 6773 1
+1 6774 1
+6774 6774 1
+1 6775 1
+6775 6775 1
+1 6776 1
+6776 6776 1
+1 6777 1
+6777 6777 1
+1 6778 1
+6778 6778 1
+1 6779 1
+6779 6779 1
+1 6780 1
+6780 6780 1
+1 6781 1
+6781 6781 1
+1 6782 1
+6782 6782 1
+1 6783 1
+6783 6783 1
+1 6784 1
+6784 6784 1
+1 6785 1
+6785 6785 1
+1 6786 1
+6786 6786 1
+1 6787 1
+6787 6787 1
+1 6788 1
+6788 6788 1
+1 6789 1
+6789 6789 1
+1 6790 1
+6790 6790 1
+1 6791 1
+6791 6791 1
+1 6792 1
+6792 6792 1
+1 6793 1
+6793 6793 1
+1 6794 1
+6794 6794 1
+1 6795 1
+6795 6795 1
+1 6796 1
+6796 6796 1
+1 6797 1
+6797 6797 1
+1 6798 1
+6798 6798 1
+1 6799 1
+6799 6799 1
+1 6800 1
+6800 6800 1
+1 6801 1
+6801 6801 1
+1 6802 1
+6802 6802 1
+1 6803 1
+6803 6803 1
+1 6804 1
+6804 6804 1
+1 6805 1
+6805 6805 1
+1 6806 1
+6806 6806 1
+1 6807 1
+6807 6807 1
+1 6808 1
+6808 6808 1
+1 6809 1
+6809 6809 1
+1 6810 1
+6810 6810 1
+1 6811 1
+6811 6811 1
+1 6812 1
+6812 6812 1
+1 6813 1
+6813 6813 1
+1 6814 1
+6814 6814 1
+1 6815 1
+6815 6815 1
+1 6816 1
+6816 6816 1
+1 6817 1
+6817 6817 1
+1 6818 1
+6818 6818 1
+1 6819 1
+6819 6819 1
+1 6820 1
+6820 6820 1
+1 6821 1
+6821 6821 1
+1 6822 1
+6822 6822 1
+1 6823 1
+6823 6823 1
+1 6824 1
+6824 6824 1
+1 6825 1
+6825 6825 1
+1 6826 1
+6826 6826 1
+1 6827 1
+6827 6827 1
+1 6828 1
+6828 6828 1
+1 6829 1
+6829 6829 1
+1 6830 1
+6830 6830 1
+1 6831 1
+6831 6831 1
+1 6832 1
+6832 6832 1
+1 6833 1
+6833 6833 1
+1 6834 1
+6834 6834 1
+1 6835 1
+6835 6835 1
+1 6836 1
+6836 6836 1
+1 6837 1
+6837 6837 1
+1 6838 1
+6838 6838 1
+1 6839 1
+6839 6839 1
+1 6840 1
+6840 6840 1
+1 6841 1
+6841 6841 1
+1 6842 1
+6842 6842 1
+1 6843 1
+6843 6843 1
+1 6844 1
+6844 6844 1
+1 6845 1
+6845 6845 1
+1 6846 1
+6846 6846 1
+1 6847 1
+6847 6847 1
+1 6848 1
+6848 6848 1
+1 6849 1
+6849 6849 1
+1 6850 1
+6850 6850 1
+1 6851 1
+6851 6851 1
+1 6852 1
+6852 6852 1
+1 6853 1
+6853 6853 1
+1 6854 1
+6854 6854 1
+1 6855 1
+6855 6855 1
+1 6856 1
+6856 6856 1
+1 6857 1
+6857 6857 1
+1 6858 1
+6858 6858 1
+1 6859 1
+6859 6859 1
+1 6860 1
+6860 6860 1
+1 6861 1
+6861 6861 1
+1 6862 1
+6862 6862 1
+1 6863 1
+6863 6863 1
+1 6864 1
+6864 6864 1
+1 6865 1
+6865 6865 1
+1 6866 1
+6866 6866 1
+1 6867 1
+6867 6867 1
+1 6868 1
+6868 6868 1
+1 6869 1
+6869 6869 1
+1 6870 1
+6870 6870 1
+1 6871 1
+6871 6871 1
+1 6872 1
+6872 6872 1
+1 6873 1
+6873 6873 1
+1 6874 1
+6874 6874 1
+1 6875 1
+6875 6875 1
+1 6876 1
+6876 6876 1
+1 6877 1
+6877 6877 1
+1 6878 1
+6878 6878 1
+1 6879 1
+6879 6879 1
+1 6880 1
+6880 6880 1
+1 6881 1
+6881 6881 1
+1 6882 1
+6882 6882 1
+1 6883 1
+6883 6883 1
+1 6884 1
+6884 6884 1
+1 6885 1
+6885 6885 1
+1 6886 1
+6886 6886 1
+1 6887 1
+6887 6887 1
+1 6888 1
+6888 6888 1
+1 6889 1
+6889 6889 1
+1 6890 1
+6890 6890 1
+1 6891 1
+6891 6891 1
+1 6892 1
+6892 6892 1
+1 6893 1
+6893 6893 1
+1 6894 1
+6894 6894 1
+1 6895 1
+6895 6895 1
+1 6896 1
+6896 6896 1
+1 6897 1
+6897 6897 1
+1 6898 1
+6898 6898 1
+1 6899 1
+6899 6899 1
+1 6900 1
+6900 6900 1
+1 6901 1
+6901 6901 1
+1 6902 1
+6902 6902 1
+1 6903 1
+6903 6903 1
+1 6904 1
+6904 6904 1
+1 6905 1
+6905 6905 1
+1 6906 1
+6906 6906 1
+1 6907 1
+6907 6907 1
+1 6908 1
+6908 6908 1
+1 6909 1
+6909 6909 1
+1 6910 1
+6910 6910 1
+1 6911 1
+6911 6911 1
+1 6912 1
+6912 6912 1
+1 6913 1
+6913 6913 1
+1 6914 1
+6914 6914 1
+1 6915 1
+6915 6915 1
+1 6916 1
+6916 6916 1
+1 6917 1
+6917 6917 1
+1 6918 1
+6918 6918 1
+1 6919 1
+6919 6919 1
+1 6920 1
+6920 6920 1
+1 6921 1
+6921 6921 1
+1 6922 1
+6922 6922 1
+1 6923 1
+6923 6923 1
+1 6924 1
+6924 6924 1
+1 6925 1
+6925 6925 1
+1 6926 1
+6926 6926 1
+1 6927 1
+6927 6927 1
+1 6928 1
+6928 6928 1
+1 6929 1
+6929 6929 1
+1 6930 1
+6930 6930 1
+1 6931 1
+6931 6931 1
+1 6932 1
+6932 6932 1
+1 6933 1
+6933 6933 1
+1 6934 1
+6934 6934 1
+1 6935 1
+6935 6935 1
+1 6936 1
+6936 6936 1
+1 6937 1
+6937 6937 1
+1 6938 1
+6938 6938 1
+1 6939 1
+6939 6939 1
+1 6940 1
+6940 6940 1
+1 6941 1
+6941 6941 1
+1 6942 1
+6942 6942 1
+1 6943 1
+6943 6943 1
+1 6944 1
+6944 6944 1
+1 6945 1
+6945 6945 1
+1 6946 1
+6946 6946 1
+1 6947 1
+6947 6947 1
+1 6948 1
+6948 6948 1
+1 6949 1
+6949 6949 1
+1 6950 1
+6950 6950 1
+1 6951 1
+6951 6951 1
+1 6952 1
+6952 6952 1
+1 6953 1
+6953 6953 1
+1 6954 1
+6954 6954 1
+1 6955 1
+6955 6955 1
+1 6956 1
+6956 6956 1
+1 6957 1
+6957 6957 1
+1 6958 1
+6958 6958 1
+1 6959 1
+6959 6959 1
+1 6960 1
+6960 6960 1
+1 6961 1
+6961 6961 1
+1 6962 1
+6962 6962 1
+1 6963 1
+6963 6963 1
+1 6964 1
+6964 6964 1
+1 6965 1
+6965 6965 1
+1 6966 1
+6966 6966 1
+1 6967 1
+6967 6967 1
+1 6968 1
+6968 6968 1
+1 6969 1
+6969 6969 1
+1 6970 1
+6970 6970 1
+1 6971 1
+6971 6971 1
+1 6972 1
+6972 6972 1
+1 6973 1
+6973 6973 1
+1 6974 1
+6974 6974 1
+1 6975 1
+6975 6975 1
+1 6976 1
+6976 6976 1
+1 6977 1
+6977 6977 1
+1 6978 1
+6978 6978 1
+1 6979 1
+6979 6979 1
+1 6980 1
+6980 6980 1
+1 6981 1
+6981 6981 1
+1 6982 1
+6982 6982 1
+1 6983 1
+6983 6983 1
+1 6984 1
+6984 6984 1
+1 6985 1
+6985 6985 1
+1 6986 1
+6986 6986 1
+1 6987 1
+6987 6987 1
+1 6988 1
+6988 6988 1
+1 6989 1
+6989 6989 1
+1 6990 1
+6990 6990 1
+1 6991 1
+6991 6991 1
+1 6992 1
+6992 6992 1
+1 6993 1
+6993 6993 1
+1 6994 1
+6994 6994 1
+1 6995 1
+6995 6995 1
+1 6996 1
+6996 6996 1
+1 6997 1
+6997 6997 1
+1 6998 1
+6998 6998 1
+1 6999 1
+6999 6999 1
+1 7000 1
+7000 7000 1
+1 7001 1
+7001 7001 1
+1 7002 1
+7002 7002 1
+1 7003 1
+7003 7003 1
+1 7004 1
+7004 7004 1
+1 7005 1
+7005 7005 1
+1 7006 1
+7006 7006 1
+1 7007 1
+7007 7007 1
+1 7008 1
+7008 7008 1
+1 7009 1
+7009 7009 1
+1 7010 1
+7010 7010 1
+1 7011 1
+7011 7011 1
+1 7012 1
+7012 7012 1
+1 7013 1
+7013 7013 1
+1 7014 1
+7014 7014 1
+1 7015 1
+7015 7015 1
+1 7016 1
+7016 7016 1
+1 7017 1
+7017 7017 1
+1 7018 1
+7018 7018 1
+1 7019 1
+7019 7019 1
+1 7020 1
+7020 7020 1
+1 7021 1
+7021 7021 1
+1 7022 1
+7022 7022 1
+1 7023 1
+7023 7023 1
+1 7024 1
+7024 7024 1
+1 7025 1
+7025 7025 1
+1 7026 1
+7026 7026 1
+1 7027 1
+7027 7027 1
+1 7028 1
+7028 7028 1
+1 7029 1
+7029 7029 1
+1 7030 1
+7030 7030 1
+1 7031 1
+7031 7031 1
+1 7032 1
+7032 7032 1
+1 7033 1
+7033 7033 1
+1 7034 1
+7034 7034 1
+1 7035 1
+7035 7035 1
+1 7036 1
+7036 7036 1
+1 7037 1
+7037 7037 1
+1 7038 1
+7038 7038 1
+1 7039 1
+7039 7039 1
+1 7040 1
+7040 7040 1
+1 7041 1
+7041 7041 1
+1 7042 1
+7042 7042 1
+1 7043 1
+7043 7043 1
+1 7044 1
+7044 7044 1
+1 7045 1
+7045 7045 1
+1 7046 1
+7046 7046 1
+1 7047 1
+7047 7047 1
+1 7048 1
+7048 7048 1
+1 7049 1
+7049 7049 1
+1 7050 1
+7050 7050 1
+1 7051 1
+7051 7051 1
+1 7052 1
+7052 7052 1
+1 7053 1
+7053 7053 1
+1 7054 1
+7054 7054 1
+1 7055 1
+7055 7055 1
+1 7056 1
+7056 7056 1
+1 7057 1
+7057 7057 1
+1 7058 1
+7058 7058 1
+1 7059 1
+7059 7059 1
+1 7060 1
+7060 7060 1
+1 7061 1
+7061 7061 1
+1 7062 1
+7062 7062 1
+1 7063 1
+7063 7063 1
+1 7064 1
+7064 7064 1
+1 7065 1
+7065 7065 1
+1 7066 1
+7066 7066 1
+1 7067 1
+7067 7067 1
+1 7068 1
+7068 7068 1
+1 7069 1
+7069 7069 1
+1 7070 1
+7070 7070 1
+1 7071 1
+7071 7071 1
+1 7072 1
+7072 7072 1
+1 7073 1
+7073 7073 1
+1 7074 1
+7074 7074 1
+1 7075 1
+7075 7075 1
+1 7076 1
+7076 7076 1
+1 7077 1
+7077 7077 1
+1 7078 1
+7078 7078 1
+1 7079 1
+7079 7079 1
+1 7080 1
+7080 7080 1
+1 7081 1
+7081 7081 1
+1 7082 1
+7082 7082 1
+1 7083 1
+7083 7083 1
+1 7084 1
+7084 7084 1
+1 7085 1
+7085 7085 1
+1 7086 1
+7086 7086 1
+1 7087 1
+7087 7087 1
+1 7088 1
+7088 7088 1
+1 7089 1
+7089 7089 1
+1 7090 1
+7090 7090 1
+1 7091 1
+7091 7091 1
+1 7092 1
+7092 7092 1
+1 7093 1
+7093 7093 1
+1 7094 1
+7094 7094 1
+1 7095 1
+7095 7095 1
+1 7096 1
+7096 7096 1
+1 7097 1
+7097 7097 1
+1 7098 1
+7098 7098 1
+1 7099 1
+7099 7099 1
+1 7100 1
+7100 7100 1
+1 7101 1
+7101 7101 1
+1 7102 1
+7102 7102 1
+1 7103 1
+7103 7103 1
+1 7104 1
+7104 7104 1
+1 7105 1
+7105 7105 1
+1 7106 1
+7106 7106 1
+1 7107 1
+7107 7107 1
+1 7108 1
+7108 7108 1
+1 7109 1
+7109 7109 1
+1 7110 1
+7110 7110 1
+1 7111 1
+7111 7111 1
+1 7112 1
+7112 7112 1
+1 7113 1
+7113 7113 1
+1 7114 1
+7114 7114 1
+1 7115 1
+7115 7115 1
+1 7116 1
+7116 7116 1
+1 7117 1
+7117 7117 1
+1 7118 1
+7118 7118 1
+1 7119 1
+7119 7119 1
+1 7120 1
+7120 7120 1
+1 7121 1
+7121 7121 1
+1 7122 1
+7122 7122 1
+1 7123 1
+7123 7123 1
+1 7124 1
+7124 7124 1
+1 7125 1
+7125 7125 1
+1 7126 1
+7126 7126 1
+1 7127 1
+7127 7127 1
+1 7128 1
+7128 7128 1
+1 7129 1
+7129 7129 1
+1 7130 1
+7130 7130 1
+1 7131 1
+7131 7131 1
+1 7132 1
+7132 7132 1
+1 7133 1
+7133 7133 1
+1 7134 1
+7134 7134 1
+1 7135 1
+7135 7135 1
+1 7136 1
+7136 7136 1
+1 7137 1
+7137 7137 1
+1 7138 1
+7138 7138 1
+1 7139 1
+7139 7139 1
+1 7140 1
+7140 7140 1
+1 7141 1
+7141 7141 1
+1 7142 1
+7142 7142 1
+1 7143 1
+7143 7143 1
+1 7144 1
+7144 7144 1
+1 7145 1
+7145 7145 1
+1 7146 1
+7146 7146 1
+1 7147 1
+7147 7147 1
+1 7148 1
+7148 7148 1
+1 7149 1
+7149 7149 1
+1 7150 1
+7150 7150 1
+1 7151 1
+7151 7151 1
+1 7152 1
+7152 7152 1
+1 7153 1
+7153 7153 1
+1 7154 1
+7154 7154 1
+1 7155 1
+7155 7155 1
+1 7156 1
+7156 7156 1
+1 7157 1
+7157 7157 1
+1 7158 1
+7158 7158 1
+1 7159 1
+7159 7159 1
+1 7160 1
+7160 7160 1
+1 7161 1
+7161 7161 1
+1 7162 1
+7162 7162 1
+1 7163 1
+7163 7163 1
+1 7164 1
+7164 7164 1
+1 7165 1
+7165 7165 1
+1 7166 1
+7166 7166 1
+1 7167 1
+7167 7167 1
+1 7168 1
+7168 7168 1
+1 7169 1
+7169 7169 1
+1 7170 1
+7170 7170 1
+1 7171 1
+7171 7171 1
+1 7172 1
+7172 7172 1
+1 7173 1
+7173 7173 1
+1 7174 1
+7174 7174 1
+1 7175 1
+7175 7175 1
+1 7176 1
+7176 7176 1
+1 7177 1
+7177 7177 1
+1 7178 1
+7178 7178 1
+1 7179 1
+7179 7179 1
+1 7180 1
+7180 7180 1
+1 7181 1
+7181 7181 1
+1 7182 1
+7182 7182 1
+1 7183 1
+7183 7183 1
+1 7184 1
+7184 7184 1
+1 7185 1
+7185 7185 1
+1 7186 1
+7186 7186 1
+1 7187 1
+7187 7187 1
+1 7188 1
+7188 7188 1
+1 7189 1
+7189 7189 1
+1 7190 1
+7190 7190 1
+1 7191 1
+7191 7191 1
+1 7192 1
+7192 7192 1
+1 7193 1
+7193 7193 1
+1 7194 1
+7194 7194 1
+1 7195 1
+7195 7195 1
+1 7196 1
+7196 7196 1
+1 7197 1
+7197 7197 1
+1 7198 1
+7198 7198 1
+1 7199 1
+7199 7199 1
+1 7200 1
+7200 7200 1
+1 7201 1
+7201 7201 1
+1 7202 1
+7202 7202 1
+1 7203 1
+7203 7203 1
+1 7204 1
+7204 7204 1
+1 7205 1
+7205 7205 1
+1 7206 1
+7206 7206 1
+1 7207 1
+7207 7207 1
+1 7208 1
+7208 7208 1
+1 7209 1
+7209 7209 1
+1 7210 1
+7210 7210 1
+1 7211 1
+7211 7211 1
+1 7212 1
+7212 7212 1
+1 7213 1
+7213 7213 1
+1 7214 1
+7214 7214 1
+1 7215 1
+7215 7215 1
+1 7216 1
+7216 7216 1
+1 7217 1
+7217 7217 1
+1 7218 1
+7218 7218 1
+1 7219 1
+7219 7219 1
+1 7220 1
+7220 7220 1
+1 7221 1
+7221 7221 1
+1 7222 1
+7222 7222 1
+1 7223 1
+7223 7223 1
+1 7224 1
+7224 7224 1
+1 7225 1
+7225 7225 1
+1 7226 1
+7226 7226 1
+1 7227 1
+7227 7227 1
+1 7228 1
+7228 7228 1
+1 7229 1
+7229 7229 1
+1 7230 1
+7230 7230 1
+1 7231 1
+7231 7231 1
+1 7232 1
+7232 7232 1
+1 7233 1
+7233 7233 1
+1 7234 1
+7234 7234 1
+1 7235 1
+7235 7235 1
+1 7236 1
+7236 7236 1
+1 7237 1
+7237 7237 1
+1 7238 1
+7238 7238 1
+1 7239 1
+7239 7239 1
+1 7240 1
+7240 7240 1
+1 7241 1
+7241 7241 1
+1 7242 1
+7242 7242 1
+1 7243 1
+7243 7243 1
+1 7244 1
+7244 7244 1
+1 7245 1
+7245 7245 1
+1 7246 1
+7246 7246 1
+1 7247 1
+7247 7247 1
+1 7248 1
+7248 7248 1
+1 7249 1
+7249 7249 1
+1 7250 1
+7250 7250 1
+1 7251 1
+7251 7251 1
+1 7252 1
+7252 7252 1
+1 7253 1
+7253 7253 1
+1 7254 1
+7254 7254 1
+1 7255 1
+7255 7255 1
+1 7256 1
+7256 7256 1
+1 7257 1
+7257 7257 1
+1 7258 1
+7258 7258 1
+1 7259 1
+7259 7259 1
+1 7260 1
+7260 7260 1
+1 7261 1
+7261 7261 1
+1 7262 1
+7262 7262 1
+1 7263 1
+7263 7263 1
+1 7264 1
+7264 7264 1
+1 7265 1
+7265 7265 1
+1 7266 1
+7266 7266 1
+1 7267 1
+7267 7267 1
+1 7268 1
+7268 7268 1
+1 7269 1
+7269 7269 1
+1 7270 1
+7270 7270 1
+1 7271 1
+7271 7271 1
+1 7272 1
+7272 7272 1
+1 7273 1
+7273 7273 1
+1 7274 1
+7274 7274 1
+1 7275 1
+7275 7275 1
+1 7276 1
+7276 7276 1
+1 7277 1
+7277 7277 1
+1 7278 1
+7278 7278 1
+1 7279 1
+7279 7279 1
+1 7280 1
+7280 7280 1
+1 7281 1
+7281 7281 1
+1 7282 1
+7282 7282 1
+1 7283 1
+7283 7283 1
+1 7284 1
+7284 7284 1
+1 7285 1
+7285 7285 1
+1 7286 1
+7286 7286 1
+1 7287 1
+7287 7287 1
+1 7288 1
+7288 7288 1
+1 7289 1
+7289 7289 1
+1 7290 1
+7290 7290 1
+1 7291 1
+7291 7291 1
+1 7292 1
+7292 7292 1
+1 7293 1
+7293 7293 1
+1 7294 1
+7294 7294 1
+1 7295 1
+7295 7295 1
+1 7296 1
+7296 7296 1
+1 7297 1
+7297 7297 1
+1 7298 1
+7298 7298 1
+1 7299 1
+7299 7299 1
+1 7300 1
+7300 7300 1
+1 7301 1
+7301 7301 1
+1 7302 1
+7302 7302 1
+1 7303 1
+7303 7303 1
+1 7304 1
+7304 7304 1
+1 7305 1
+7305 7305 1
+1 7306 1
+7306 7306 1
+1 7307 1
+7307 7307 1
+1 7308 1
+7308 7308 1
+1 7309 1
+7309 7309 1
+1 7310 1
+7310 7310 1
+1 7311 1
+7311 7311 1
+1 7312 1
+7312 7312 1
+1 7313 1
+7313 7313 1
+1 7314 1
+7314 7314 1
+1 7315 1
+7315 7315 1
+1 7316 1
+7316 7316 1
+1 7317 1
+7317 7317 1
+1 7318 1
+7318 7318 1
+1 7319 1
+7319 7319 1
+1 7320 1
+7320 7320 1
+1 7321 1
+7321 7321 1
+1 7322 1
+7322 7322 1
+1 7323 1
+7323 7323 1
+1 7324 1
+7324 7324 1
+1 7325 1
+7325 7325 1
+1 7326 1
+7326 7326 1
+1 7327 1
+7327 7327 1
+1 7328 1
+7328 7328 1
+1 7329 1
+7329 7329 1
+1 7330 1
+7330 7330 1
+1 7331 1
+7331 7331 1
+1 7332 1
+7332 7332 1
+1 7333 1
+7333 7333 1
+1 7334 1
+7334 7334 1
+1 7335 1
+7335 7335 1
+1 7336 1
+7336 7336 1
+1 7337 1
+7337 7337 1
+1 7338 1
+7338 7338 1
+1 7339 1
+7339 7339 1
+1 7340 1
+7340 7340 1
+1 7341 1
+7341 7341 1
+1 7342 1
+7342 7342 1
+1 7343 1
+7343 7343 1
+1 7344 1
+7344 7344 1
+1 7345 1
+7345 7345 1
+1 7346 1
+7346 7346 1
+1 7347 1
+7347 7347 1
+1 7348 1
+7348 7348 1
+1 7349 1
+7349 7349 1
+1 7350 1
+7350 7350 1
+1 7351 1
+7351 7351 1
+1 7352 1
+7352 7352 1
+1 7353 1
+7353 7353 1
+1 7354 1
+7354 7354 1
+1 7355 1
+7355 7355 1
+1 7356 1
+7356 7356 1
+1 7357 1
+7357 7357 1
+1 7358 1
+7358 7358 1
+1 7359 1
+7359 7359 1
+1 7360 1
+7360 7360 1
+1 7361 1
+7361 7361 1
+1 7362 1
+7362 7362 1
+1 7363 1
+7363 7363 1
+1 7364 1
+7364 7364 1
+1 7365 1
+7365 7365 1
+1 7366 1
+7366 7366 1
+1 7367 1
+7367 7367 1
+1 7368 1
+7368 7368 1
+1 7369 1
+7369 7369 1
+1 7370 1
+7370 7370 1
+1 7371 1
+7371 7371 1
+1 7372 1
+7372 7372 1
+1 7373 1
+7373 7373 1
+1 7374 1
+7374 7374 1
+1 7375 1
+7375 7375 1
+1 7376 1
+7376 7376 1
+1 7377 1
+7377 7377 1
+1 7378 1
+7378 7378 1
+1 7379 1
+7379 7379 1
+1 7380 1
+7380 7380 1
+1 7381 1
+7381 7381 1
+1 7382 1
+7382 7382 1
+1 7383 1
+7383 7383 1
+1 7384 1
+7384 7384 1
+1 7385 1
+7385 7385 1
+1 7386 1
+7386 7386 1
+1 7387 1
+7387 7387 1
+1 7388 1
+7388 7388 1
+1 7389 1
+7389 7389 1
+1 7390 1
+7390 7390 1
+1 7391 1
+7391 7391 1
+1 7392 1
+7392 7392 1
+1 7393 1
+7393 7393 1
+1 7394 1
+7394 7394 1
+1 7395 1
+7395 7395 1
+1 7396 1
+7396 7396 1
+1 7397 1
+7397 7397 1
+1 7398 1
+7398 7398 1
+1 7399 1
+7399 7399 1
+1 7400 1
+7400 7400 1
+1 7401 1
+7401 7401 1
+1 7402 1
+7402 7402 1
+1 7403 1
+7403 7403 1
+1 7404 1
+7404 7404 1
+1 7405 1
+7405 7405 1
+1 7406 1
+7406 7406 1
+1 7407 1
+7407 7407 1
+1 7408 1
+7408 7408 1
+1 7409 1
+7409 7409 1
+1 7410 1
+7410 7410 1
+1 7411 1
+7411 7411 1
+1 7412 1
+7412 7412 1
+1 7413 1
+7413 7413 1
+1 7414 1
+7414 7414 1
+1 7415 1
+7415 7415 1
+1 7416 1
+7416 7416 1
+1 7417 1
+7417 7417 1
+1 7418 1
+7418 7418 1
+1 7419 1
+7419 7419 1
+1 7420 1
+7420 7420 1
+1 7421 1
+7421 7421 1
+1 7422 1
+7422 7422 1
+1 7423 1
+7423 7423 1
+1 7424 1
+7424 7424 1
+1 7425 1
+7425 7425 1
+1 7426 1
+7426 7426 1
+1 7427 1
+7427 7427 1
+1 7428 1
+7428 7428 1
+1 7429 1
+7429 7429 1
+1 7430 1
+7430 7430 1
+1 7431 1
+7431 7431 1
+1 7432 1
+7432 7432 1
+1 7433 1
+7433 7433 1
+1 7434 1
+7434 7434 1
+1 7435 1
+7435 7435 1
+1 7436 1
+7436 7436 1
+1 7437 1
+7437 7437 1
+1 7438 1
+7438 7438 1
+1 7439 1
+7439 7439 1
+1 7440 1
+7440 7440 1
+1 7441 1
+7441 7441 1
+1 7442 1
+7442 7442 1
+1 7443 1
+7443 7443 1
+1 7444 1
+7444 7444 1
+1 7445 1
+7445 7445 1
+1 7446 1
+7446 7446 1
+1 7447 1
+7447 7447 1
+1 7448 1
+7448 7448 1
+1 7449 1
+7449 7449 1
+1 7450 1
+7450 7450 1
+1 7451 1
+7451 7451 1
+1 7452 1
+7452 7452 1
+1 7453 1
+7453 7453 1
+1 7454 1
+7454 7454 1
+1 7455 1
+7455 7455 1
+1 7456 1
+7456 7456 1
+1 7457 1
+7457 7457 1
+1 7458 1
+7458 7458 1
+1 7459 1
+7459 7459 1
+1 7460 1
+7460 7460 1
+1 7461 1
+7461 7461 1
+1 7462 1
+7462 7462 1
+1 7463 1
+7463 7463 1
+1 7464 1
+7464 7464 1
+1 7465 1
+7465 7465 1
+1 7466 1
+7466 7466 1
+1 7467 1
+7467 7467 1
+1 7468 1
+7468 7468 1
+1 7469 1
+7469 7469 1
+1 7470 1
+7470 7470 1
+1 7471 1
+7471 7471 1
+1 7472 1
+7472 7472 1
+1 7473 1
+7473 7473 1
+1 7474 1
+7474 7474 1
+1 7475 1
+7475 7475 1
+1 7476 1
+7476 7476 1
+1 7477 1
+7477 7477 1
+1 7478 1
+7478 7478 1
+1 7479 1
+7479 7479 1
+1 7480 1
+7480 7480 1
+1 7481 1
+7481 7481 1
+1 7482 1
+7482 7482 1
+1 7483 1
+7483 7483 1
+1 7484 1
+7484 7484 1
+1 7485 1
+7485 7485 1
+1 7486 1
+7486 7486 1
+1 7487 1
+7487 7487 1
+1 7488 1
+7488 7488 1
+1 7489 1
+7489 7489 1
+1 7490 1
+7490 7490 1
+1 7491 1
+7491 7491 1
+1 7492 1
+7492 7492 1
+1 7493 1
+7493 7493 1
+1 7494 1
+7494 7494 1
+1 7495 1
+7495 7495 1
+1 7496 1
+7496 7496 1
+1 7497 1
+7497 7497 1
+1 7498 1
+7498 7498 1
+1 7499 1
+7499 7499 1
+1 7500 1
+7500 7500 1
+1 7501 1
+7501 7501 1
+1 7502 1
+7502 7502 1
+1 7503 1
+7503 7503 1
+1 7504 1
+7504 7504 1
+1 7505 1
+7505 7505 1
+1 7506 1
+7506 7506 1
+1 7507 1
+7507 7507 1
+1 7508 1
+7508 7508 1
+1 7509 1
+7509 7509 1
+1 7510 1
+7510 7510 1
+1 7511 1
+7511 7511 1
+1 7512 1
+7512 7512 1
+1 7513 1
+7513 7513 1
+1 7514 1
+7514 7514 1
+1 7515 1
+7515 7515 1
+1 7516 1
+7516 7516 1
+1 7517 1
+7517 7517 1
+1 7518 1
+7518 7518 1
+1 7519 1
+7519 7519 1
+1 7520 1
+7520 7520 1
+1 7521 1
+7521 7521 1
+1 7522 1
+7522 7522 1
+1 7523 1
+7523 7523 1
+1 7524 1
+7524 7524 1
+1 7525 1
+7525 7525 1
+1 7526 1
+7526 7526 1
+1 7527 1
+7527 7527 1
+1 7528 1
+7528 7528 1
+1 7529 1
+7529 7529 1
+1 7530 1
+7530 7530 1
+1 7531 1
+7531 7531 1
+1 7532 1
+7532 7532 1
+1 7533 1
+7533 7533 1
+1 7534 1
+7534 7534 1
+1 7535 1
+7535 7535 1
+1 7536 1
+7536 7536 1
+1 7537 1
+7537 7537 1
+1 7538 1
+7538 7538 1
+1 7539 1
+7539 7539 1
+1 7540 1
+7540 7540 1
+1 7541 1
+7541 7541 1
+1 7542 1
+7542 7542 1
+1 7543 1
+7543 7543 1
+1 7544 1
+7544 7544 1
+1 7545 1
+7545 7545 1
+1 7546 1
+7546 7546 1
+1 7547 1
+7547 7547 1
+1 7548 1
+7548 7548 1
+1 7549 1
+7549 7549 1
+1 7550 1
+7550 7550 1
+1 7551 1
+7551 7551 1
+1 7552 1
+7552 7552 1
+1 7553 1
+7553 7553 1
+1 7554 1
+7554 7554 1
+1 7555 1
+7555 7555 1
+1 7556 1
+7556 7556 1
+1 7557 1
+7557 7557 1
+1 7558 1
+7558 7558 1
+1 7559 1
+7559 7559 1
+1 7560 1
+7560 7560 1
+1 7561 1
+7561 7561 1
+1 7562 1
+7562 7562 1
+1 7563 1
+7563 7563 1
+1 7564 1
+7564 7564 1
+1 7565 1
+7565 7565 1
+1 7566 1
+7566 7566 1
+1 7567 1
+7567 7567 1
+1 7568 1
+7568 7568 1
+1 7569 1
+7569 7569 1
+1 7570 1
+7570 7570 1
+1 7571 1
+7571 7571 1
+1 7572 1
+7572 7572 1
+1 7573 1
+7573 7573 1
+1 7574 1
+7574 7574 1
+1 7575 1
+7575 7575 1
+1 7576 1
+7576 7576 1
+1 7577 1
+7577 7577 1
+1 7578 1
+7578 7578 1
+1 7579 1
+7579 7579 1
+1 7580 1
+7580 7580 1
+1 7581 1
+7581 7581 1
+1 7582 1
+7582 7582 1
+1 7583 1
+7583 7583 1
+1 7584 1
+7584 7584 1
+1 7585 1
+7585 7585 1
+1 7586 1
+7586 7586 1
+1 7587 1
+7587 7587 1
+1 7588 1
+7588 7588 1
+1 7589 1
+7589 7589 1
+1 7590 1
+7590 7590 1
+1 7591 1
+7591 7591 1
+1 7592 1
+7592 7592 1
+1 7593 1
+7593 7593 1
+1 7594 1
+7594 7594 1
+1 7595 1
+7595 7595 1
+1 7596 1
+7596 7596 1
+1 7597 1
+7597 7597 1
+1 7598 1
+7598 7598 1
+1 7599 1
+7599 7599 1
+1 7600 1
+7600 7600 1
+1 7601 1
+7601 7601 1
+1 7602 1
+7602 7602 1
+1 7603 1
+7603 7603 1
+1 7604 1
+7604 7604 1
+1 7605 1
+7605 7605 1
+1 7606 1
+7606 7606 1
+1 7607 1
+7607 7607 1
+1 7608 1
+7608 7608 1
+1 7609 1
+7609 7609 1
+1 7610 1
+7610 7610 1
+1 7611 1
+7611 7611 1
+1 7612 1
+7612 7612 1
+1 7613 1
+7613 7613 1
+1 7614 1
+7614 7614 1
+1 7615 1
+7615 7615 1
+1 7616 1
+7616 7616 1
+1 7617 1
+7617 7617 1
+1 7618 1
+7618 7618 1
+1 7619 1
+7619 7619 1
+1 7620 1
+7620 7620 1
+1 7621 1
+7621 7621 1
+1 7622 1
+7622 7622 1
+1 7623 1
+7623 7623 1
+1 7624 1
+7624 7624 1
+1 7625 1
+7625 7625 1
+1 7626 1
+7626 7626 1
+1 7627 1
+7627 7627 1
+1 7628 1
+7628 7628 1
+1 7629 1
+7629 7629 1
+1 7630 1
+7630 7630 1
+1 7631 1
+7631 7631 1
+1 7632 1
+7632 7632 1
+1 7633 1
+7633 7633 1
+1 7634 1
+7634 7634 1
+1 7635 1
+7635 7635 1
+1 7636 1
+7636 7636 1
+1 7637 1
+7637 7637 1
+1 7638 1
+7638 7638 1
+1 7639 1
+7639 7639 1
+1 7640 1
+7640 7640 1
+1 7641 1
+7641 7641 1
+1 7642 1
+7642 7642 1
+1 7643 1
+7643 7643 1
+1 7644 1
+7644 7644 1
+1 7645 1
+7645 7645 1
+1 7646 1
+7646 7646 1
+1 7647 1
+7647 7647 1
+1 7648 1
+7648 7648 1
+1 7649 1
+7649 7649 1
+1 7650 1
+7650 7650 1
+1 7651 1
+7651 7651 1
+1 7652 1
+7652 7652 1
+1 7653 1
+7653 7653 1
+1 7654 1
+7654 7654 1
+1 7655 1
+7655 7655 1
+1 7656 1
+7656 7656 1
+1 7657 1
+7657 7657 1
+1 7658 1
+7658 7658 1
+1 7659 1
+7659 7659 1
+1 7660 1
+7660 7660 1
+1 7661 1
+7661 7661 1
+1 7662 1
+7662 7662 1
+1 7663 1
+7663 7663 1
+1 7664 1
+7664 7664 1
+1 7665 1
+7665 7665 1
+1 7666 1
+7666 7666 1
+1 7667 1
+7667 7667 1
+1 7668 1
+7668 7668 1
+1 7669 1
+7669 7669 1
+1 7670 1
+7670 7670 1
+1 7671 1
+7671 7671 1
+1 7672 1
+7672 7672 1
+1 7673 1
+7673 7673 1
+1 7674 1
+7674 7674 1
+1 7675 1
+7675 7675 1
+1 7676 1
+7676 7676 1
+1 7677 1
+7677 7677 1
+1 7678 1
+7678 7678 1
+1 7679 1
+7679 7679 1
+1 7680 1
+7680 7680 1
+1 7681 1
+7681 7681 1
+1 7682 1
+7682 7682 1
+1 7683 1
+7683 7683 1
+1 7684 1
+7684 7684 1
+1 7685 1
+7685 7685 1
+1 7686 1
+7686 7686 1
+1 7687 1
+7687 7687 1
+1 7688 1
+7688 7688 1
+1 7689 1
+7689 7689 1
+1 7690 1
+7690 7690 1
+1 7691 1
+7691 7691 1
+1 7692 1
+7692 7692 1
+1 7693 1
+7693 7693 1
+1 7694 1
+7694 7694 1
+1 7695 1
+7695 7695 1
+1 7696 1
+7696 7696 1
+1 7697 1
+7697 7697 1
+1 7698 1
+7698 7698 1
+1 7699 1
+7699 7699 1
+1 7700 1
+7700 7700 1
+1 7701 1
+7701 7701 1
+1 7702 1
+7702 7702 1
+1 7703 1
+7703 7703 1
+1 7704 1
+7704 7704 1
+1 7705 1
+7705 7705 1
+1 7706 1
+7706 7706 1
+1 7707 1
+7707 7707 1
+1 7708 1
+7708 7708 1
+1 7709 1
+7709 7709 1
+1 7710 1
+7710 7710 1
+1 7711 1
+7711 7711 1
+1 7712 1
+7712 7712 1
+1 7713 1
+7713 7713 1
+1 7714 1
+7714 7714 1
+1 7715 1
+7715 7715 1
+1 7716 1
+7716 7716 1
+1 7717 1
+7717 7717 1
+1 7718 1
+7718 7718 1
+1 7719 1
+7719 7719 1
+1 7720 1
+7720 7720 1
+1 7721 1
+7721 7721 1
+1 7722 1
+7722 7722 1
+1 7723 1
+7723 7723 1
+1 7724 1
+7724 7724 1
+1 7725 1
+7725 7725 1
+1 7726 1
+7726 7726 1
+1 7727 1
+7727 7727 1
+1 7728 1
+7728 7728 1
+1 7729 1
+7729 7729 1
+1 7730 1
+7730 7730 1
+1 7731 1
+7731 7731 1
+1 7732 1
+7732 7732 1
+1 7733 1
+7733 7733 1
+1 7734 1
+7734 7734 1
+1 7735 1
+7735 7735 1
+1 7736 1
+7736 7736 1
+1 7737 1
+7737 7737 1
+1 7738 1
+7738 7738 1
+1 7739 1
+7739 7739 1
+1 7740 1
+7740 7740 1
+1 7741 1
+7741 7741 1
+1 7742 1
+7742 7742 1
+1 7743 1
+7743 7743 1
+1 7744 1
+7744 7744 1
+1 7745 1
+7745 7745 1
+1 7746 1
+7746 7746 1
+1 7747 1
+7747 7747 1
+1 7748 1
+7748 7748 1
+1 7749 1
+7749 7749 1
+1 7750 1
+7750 7750 1
+1 7751 1
+7751 7751 1
+1 7752 1
+7752 7752 1
+1 7753 1
+7753 7753 1
+1 7754 1
+7754 7754 1
+1 7755 1
+7755 7755 1
+1 7756 1
+7756 7756 1
+1 7757 1
+7757 7757 1
+1 7758 1
+7758 7758 1
+1 7759 1
+7759 7759 1
+1 7760 1
+7760 7760 1
+1 7761 1
+7761 7761 1
+1 7762 1
+7762 7762 1
+1 7763 1
+7763 7763 1
+1 7764 1
+7764 7764 1
+1 7765 1
+7765 7765 1
+1 7766 1
+7766 7766 1
+1 7767 1
+7767 7767 1
+1 7768 1
+7768 7768 1
+1 7769 1
+7769 7769 1
+1 7770 1
+7770 7770 1
+1 7771 1
+7771 7771 1
+1 7772 1
+7772 7772 1
+1 7773 1
+7773 7773 1
+1 7774 1
+7774 7774 1
+1 7775 1
+7775 7775 1
+1 7776 1
+7776 7776 1
+1 7777 1
+7777 7777 1
+1 7778 1
+7778 7778 1
+1 7779 1
+7779 7779 1
+1 7780 1
+7780 7780 1
+1 7781 1
+7781 7781 1
+1 7782 1
+7782 7782 1
+1 7783 1
+7783 7783 1
+1 7784 1
+7784 7784 1
+1 7785 1
+7785 7785 1
+1 7786 1
+7786 7786 1
+1 7787 1
+7787 7787 1
+1 7788 1
+7788 7788 1
+1 7789 1
+7789 7789 1
+1 7790 1
+7790 7790 1
+1 7791 1
+7791 7791 1
+1 7792 1
+7792 7792 1
+1 7793 1
+7793 7793 1
+1 7794 1
+7794 7794 1
+1 7795 1
+7795 7795 1
+1 7796 1
+7796 7796 1
+1 7797 1
+7797 7797 1
+1 7798 1
+7798 7798 1
+1 7799 1
+7799 7799 1
+1 7800 1
+7800 7800 1
+1 7801 1
+7801 7801 1
+1 7802 1
+7802 7802 1
+1 7803 1
+7803 7803 1
+1 7804 1
+7804 7804 1
+1 7805 1
+7805 7805 1
+1 7806 1
+7806 7806 1
+1 7807 1
+7807 7807 1
+1 7808 1
+7808 7808 1
+1 7809 1
+7809 7809 1
+1 7810 1
+7810 7810 1
+1 7811 1
+7811 7811 1
+1 7812 1
+7812 7812 1
+1 7813 1
+7813 7813 1
+1 7814 1
+7814 7814 1
+1 7815 1
+7815 7815 1
+1 7816 1
+7816 7816 1
+1 7817 1
+7817 7817 1
+1 7818 1
+7818 7818 1
+1 7819 1
+7819 7819 1
+1 7820 1
+7820 7820 1
+1 7821 1
+7821 7821 1
+1 7822 1
+7822 7822 1
+1 7823 1
+7823 7823 1
+1 7824 1
+7824 7824 1
+1 7825 1
+7825 7825 1
+1 7826 1
+7826 7826 1
+1 7827 1
+7827 7827 1
+1 7828 1
+7828 7828 1
+1 7829 1
+7829 7829 1
+1 7830 1
+7830 7830 1
+1 7831 1
+7831 7831 1
+1 7832 1
+7832 7832 1
+1 7833 1
+7833 7833 1
+1 7834 1
+7834 7834 1
+1 7835 1
+7835 7835 1
+1 7836 1
+7836 7836 1
+1 7837 1
+7837 7837 1
+1 7838 1
+7838 7838 1
+1 7839 1
+7839 7839 1
+1 7840 1
+7840 7840 1
+1 7841 1
+7841 7841 1
+1 7842 1
+7842 7842 1
+1 7843 1
+7843 7843 1
+1 7844 1
+7844 7844 1
+1 7845 1
+7845 7845 1
+1 7846 1
+7846 7846 1
+1 7847 1
+7847 7847 1
+1 7848 1
+7848 7848 1
+1 7849 1
+7849 7849 1
+1 7850 1
+7850 7850 1
+1 7851 1
+7851 7851 1
+1 7852 1
+7852 7852 1
+1 7853 1
+7853 7853 1
+1 7854 1
+7854 7854 1
+1 7855 1
+7855 7855 1
+1 7856 1
+7856 7856 1
+1 7857 1
+7857 7857 1
+1 7858 1
+7858 7858 1
+1 7859 1
+7859 7859 1
+1 7860 1
+7860 7860 1
+1 7861 1
+7861 7861 1
+1 7862 1
+7862 7862 1
+1 7863 1
+7863 7863 1
+1 7864 1
+7864 7864 1
+1 7865 1
+7865 7865 1
+1 7866 1
+7866 7866 1
+1 7867 1
+7867 7867 1
+1 7868 1
+7868 7868 1
+1 7869 1
+7869 7869 1
+1 7870 1
+7870 7870 1
+1 7871 1
+7871 7871 1
+1 7872 1
+7872 7872 1
+1 7873 1
+7873 7873 1
+1 7874 1
+7874 7874 1
+1 7875 1
+7875 7875 1
+1 7876 1
+7876 7876 1
+1 7877 1
+7877 7877 1
+1 7878 1
+7878 7878 1
+1 7879 1
+7879 7879 1
+1 7880 1
+7880 7880 1
+1 7881 1
+7881 7881 1
+1 7882 1
+7882 7882 1
+1 7883 1
+7883 7883 1
+1 7884 1
+7884 7884 1
+1 7885 1
+7885 7885 1
+1 7886 1
+7886 7886 1
+1 7887 1
+7887 7887 1
+1 7888 1
+7888 7888 1
+1 7889 1
+7889 7889 1
+1 7890 1
+7890 7890 1
+1 7891 1
+7891 7891 1
+1 7892 1
+7892 7892 1
+1 7893 1
+7893 7893 1
+1 7894 1
+7894 7894 1
+1 7895 1
+7895 7895 1
+1 7896 1
+7896 7896 1
+1 7897 1
+7897 7897 1
+1 7898 1
+7898 7898 1
+1 7899 1
+7899 7899 1
+1 7900 1
+7900 7900 1
+1 7901 1
+7901 7901 1
+1 7902 1
+7902 7902 1
+1 7903 1
+7903 7903 1
+1 7904 1
+7904 7904 1
+1 7905 1
+7905 7905 1
+1 7906 1
+7906 7906 1
+1 7907 1
+7907 7907 1
+1 7908 1
+7908 7908 1
+1 7909 1
+7909 7909 1
+1 7910 1
+7910 7910 1
+1 7911 1
+7911 7911 1
+1 7912 1
+7912 7912 1
+1 7913 1
+7913 7913 1
+1 7914 1
+7914 7914 1
+1 7915 1
+7915 7915 1
+1 7916 1
+7916 7916 1
+1 7917 1
+7917 7917 1
+1 7918 1
+7918 7918 1
+1 7919 1
+7919 7919 1
+1 7920 1
+7920 7920 1
+1 7921 1
+7921 7921 1
+1 7922 1
+7922 7922 1
+1 7923 1
+7923 7923 1
+1 7924 1
+7924 7924 1
+1 7925 1
+7925 7925 1
+1 7926 1
+7926 7926 1
+1 7927 1
+7927 7927 1
+1 7928 1
+7928 7928 1
+1 7929 1
+7929 7929 1
+1 7930 1
+7930 7930 1
+1 7931 1
+7931 7931 1
+1 7932 1
+7932 7932 1
+1 7933 1
+7933 7933 1
+1 7934 1
+7934 7934 1
+1 7935 1
+7935 7935 1
+1 7936 1
+7936 7936 1
+1 7937 1
+7937 7937 1
+1 7938 1
+7938 7938 1
+1 7939 1
+7939 7939 1
+1 7940 1
+7940 7940 1
+1 7941 1
+7941 7941 1
+1 7942 1
+7942 7942 1
+1 7943 1
+7943 7943 1
+1 7944 1
+7944 7944 1
+1 7945 1
+7945 7945 1
+1 7946 1
+7946 7946 1
+1 7947 1
+7947 7947 1
+1 7948 1
+7948 7948 1
+1 7949 1
+7949 7949 1
+1 7950 1
+7950 7950 1
+1 7951 1
+7951 7951 1
+1 7952 1
+7952 7952 1
+1 7953 1
+7953 7953 1
+1 7954 1
+7954 7954 1
+1 7955 1
+7955 7955 1
+1 7956 1
+7956 7956 1
+1 7957 1
+7957 7957 1
+1 7958 1
+7958 7958 1
+1 7959 1
+7959 7959 1
+1 7960 1
+7960 7960 1
+1 7961 1
+7961 7961 1
+1 7962 1
+7962 7962 1
+1 7963 1
+7963 7963 1
+1 7964 1
+7964 7964 1
+1 7965 1
+7965 7965 1
+1 7966 1
+7966 7966 1
+1 7967 1
+7967 7967 1
+1 7968 1
+7968 7968 1
+1 7969 1
+7969 7969 1
+1 7970 1
+7970 7970 1
+1 7971 1
+7971 7971 1
+1 7972 1
+7972 7972 1
+1 7973 1
+7973 7973 1
+1 7974 1
+7974 7974 1
+1 7975 1
+7975 7975 1
+1 7976 1
+7976 7976 1
+1 7977 1
+7977 7977 1
+1 7978 1
+7978 7978 1
+1 7979 1
+7979 7979 1
+1 7980 1
+7980 7980 1
+1 7981 1
+7981 7981 1
+1 7982 1
+7982 7982 1
+1 7983 1
+7983 7983 1
+1 7984 1
+7984 7984 1
+1 7985 1
+7985 7985 1
+1 7986 1
+7986 7986 1
+1 7987 1
+7987 7987 1
+1 7988 1
+7988 7988 1
+1 7989 1
+7989 7989 1
+1 7990 1
+7990 7990 1
+1 7991 1
+7991 7991 1
+1 7992 1
+7992 7992 1
+1 7993 1
+7993 7993 1
+1 7994 1
+7994 7994 1
+1 7995 1
+7995 7995 1
+1 7996 1
+7996 7996 1
+1 7997 1
+7997 7997 1
+1 7998 1
+7998 7998 1
+1 7999 1
+7999 7999 1
+1 8000 1
+8000 8000 1
+1 8001 1
+8001 8001 1
+1 8002 1
+8002 8002 1
+1 8003 1
+8003 8003 1
+1 8004 1
+8004 8004 1
+1 8005 1
+8005 8005 1
+1 8006 1
+8006 8006 1
+1 8007 1
+8007 8007 1
+1 8008 1
+8008 8008 1
+1 8009 1
+8009 8009 1
+1 8010 1
+8010 8010 1
+1 8011 1
+8011 8011 1
+1 8012 1
+8012 8012 1
+1 8013 1
+8013 8013 1
+1 8014 1
+8014 8014 1
+1 8015 1
+8015 8015 1
+1 8016 1
+8016 8016 1
+1 8017 1
+8017 8017 1
+1 8018 1
+8018 8018 1
+1 8019 1
+8019 8019 1
+1 8020 1
+8020 8020 1
+1 8021 1
+8021 8021 1
+1 8022 1
+8022 8022 1
+1 8023 1
+8023 8023 1
+1 8024 1
+8024 8024 1
+1 8025 1
+8025 8025 1
+1 8026 1
+8026 8026 1
+1 8027 1
+8027 8027 1
+1 8028 1
+8028 8028 1
+1 8029 1
+8029 8029 1
+1 8030 1
+8030 8030 1
+1 8031 1
+8031 8031 1
+1 8032 1
+8032 8032 1
+1 8033 1
+8033 8033 1
+1 8034 1
+8034 8034 1
+1 8035 1
+8035 8035 1
+1 8036 1
+8036 8036 1
+1 8037 1
+8037 8037 1
+1 8038 1
+8038 8038 1
+1 8039 1
+8039 8039 1
+1 8040 1
+8040 8040 1
+1 8041 1
+8041 8041 1
+1 8042 1
+8042 8042 1
+1 8043 1
+8043 8043 1
+1 8044 1
+8044 8044 1
+1 8045 1
+8045 8045 1
+1 8046 1
+8046 8046 1
+1 8047 1
+8047 8047 1
+1 8048 1
+8048 8048 1
+1 8049 1
+8049 8049 1
+1 8050 1
+8050 8050 1
+1 8051 1
+8051 8051 1
+1 8052 1
+8052 8052 1
+1 8053 1
+8053 8053 1
+1 8054 1
+8054 8054 1
+1 8055 1
+8055 8055 1
+1 8056 1
+8056 8056 1
+1 8057 1
+8057 8057 1
+1 8058 1
+8058 8058 1
+1 8059 1
+8059 8059 1
+1 8060 1
+8060 8060 1
+1 8061 1
+8061 8061 1
+1 8062 1
+8062 8062 1
+1 8063 1
+8063 8063 1
+1 8064 1
+8064 8064 1
+1 8065 1
+8065 8065 1
+1 8066 1
+8066 8066 1
+1 8067 1
+8067 8067 1
+1 8068 1
+8068 8068 1
+1 8069 1
+8069 8069 1
+1 8070 1
+8070 8070 1
+1 8071 1
+8071 8071 1
+1 8072 1
+8072 8072 1
+1 8073 1
+8073 8073 1
+1 8074 1
+8074 8074 1
+1 8075 1
+8075 8075 1
+1 8076 1
+8076 8076 1
+1 8077 1
+8077 8077 1
+1 8078 1
+8078 8078 1
+1 8079 1
+8079 8079 1
+1 8080 1
+8080 8080 1
+1 8081 1
+8081 8081 1
+1 8082 1
+8082 8082 1
+1 8083 1
+8083 8083 1
+1 8084 1
+8084 8084 1
+1 8085 1
+8085 8085 1
+1 8086 1
+8086 8086 1
+1 8087 1
+8087 8087 1
+1 8088 1
+8088 8088 1
+1 8089 1
+8089 8089 1
+1 8090 1
+8090 8090 1
+1 8091 1
+8091 8091 1
+1 8092 1
+8092 8092 1
+1 8093 1
+8093 8093 1
+1 8094 1
+8094 8094 1
+1 8095 1
+8095 8095 1
+1 8096 1
+8096 8096 1
+1 8097 1
+8097 8097 1
+1 8098 1
+8098 8098 1
+1 8099 1
+8099 8099 1
+1 8100 1
+8100 8100 1
+1 8101 1
+8101 8101 1
+1 8102 1
+8102 8102 1
+1 8103 1
+8103 8103 1
+1 8104 1
+8104 8104 1
+1 8105 1
+8105 8105 1
+1 8106 1
+8106 8106 1
+1 8107 1
+8107 8107 1
+1 8108 1
+8108 8108 1
+1 8109 1
+8109 8109 1
+1 8110 1
+8110 8110 1
+1 8111 1
+8111 8111 1
+1 8112 1
+8112 8112 1
+1 8113 1
+8113 8113 1
+1 8114 1
+8114 8114 1
+1 8115 1
+8115 8115 1
+1 8116 1
+8116 8116 1
+1 8117 1
+8117 8117 1
+1 8118 1
+8118 8118 1
+1 8119 1
+8119 8119 1
+1 8120 1
+8120 8120 1
+1 8121 1
+8121 8121 1
+1 8122 1
+8122 8122 1
+1 8123 1
+8123 8123 1
+1 8124 1
+8124 8124 1
+1 8125 1
+8125 8125 1
+1 8126 1
+8126 8126 1
+1 8127 1
+8127 8127 1
+1 8128 1
+8128 8128 1
+1 8129 1
+8129 8129 1
+1 8130 1
+8130 8130 1
+1 8131 1
+8131 8131 1
+1 8132 1
+8132 8132 1
+1 8133 1
+8133 8133 1
+1 8134 1
+8134 8134 1
+1 8135 1
+8135 8135 1
+1 8136 1
+8136 8136 1
+1 8137 1
+8137 8137 1
+1 8138 1
+8138 8138 1
+1 8139 1
+8139 8139 1
+1 8140 1
+8140 8140 1
+1 8141 1
+8141 8141 1
+1 8142 1
+8142 8142 1
+1 8143 1
+8143 8143 1
+1 8144 1
+8144 8144 1
+1 8145 1
+8145 8145 1
+1 8146 1
+8146 8146 1
+1 8147 1
+8147 8147 1
+1 8148 1
+8148 8148 1
+1 8149 1
+8149 8149 1
+1 8150 1
+8150 8150 1
+1 8151 1
+8151 8151 1
+1 8152 1
+8152 8152 1
+1 8153 1
+8153 8153 1
+1 8154 1
+8154 8154 1
+1 8155 1
+8155 8155 1
+1 8156 1
+8156 8156 1
+1 8157 1
+8157 8157 1
+1 8158 1
+8158 8158 1
+1 8159 1
+8159 8159 1
+1 8160 1
+8160 8160 1
+1 8161 1
+8161 8161 1
+1 8162 1
+8162 8162 1
+1 8163 1
+8163 8163 1
+1 8164 1
+8164 8164 1
+1 8165 1
+8165 8165 1
+1 8166 1
+8166 8166 1
+1 8167 1
+8167 8167 1
+1 8168 1
+8168 8168 1
+1 8169 1
+8169 8169 1
+1 8170 1
+8170 8170 1
+1 8171 1
+8171 8171 1
+1 8172 1
+8172 8172 1
+1 8173 1
+8173 8173 1
+1 8174 1
+8174 8174 1
+1 8175 1
+8175 8175 1
+1 8176 1
+8176 8176 1
+1 8177 1
+8177 8177 1
+1 8178 1
+8178 8178 1
+1 8179 1
+8179 8179 1
+1 8180 1
+8180 8180 1
+1 8181 1
+8181 8181 1
+1 8182 1
+8182 8182 1
+1 8183 1
+8183 8183 1
+1 8184 1
+8184 8184 1
+1 8185 1
+8185 8185 1
+1 8186 1
+8186 8186 1
+1 8187 1
+8187 8187 1
+1 8188 1
+8188 8188 1
+1 8189 1
+8189 8189 1
+1 8190 1
+8190 8190 1
+1 8191 1
+8191 8191 1
+1 8192 1
+8192 8192 1
+1 8193 1
+8193 8193 1
+1 8194 1
+8194 8194 1
+1 8195 1
+8195 8195 1
+1 8196 1
+8196 8196 1
+1 8197 1
+8197 8197 1
+1 8198 1
+8198 8198 1
+1 8199 1
+8199 8199 1
+1 8200 1
+8200 8200 1
+1 8201 1
+8201 8201 1
+1 8202 1
+8202 8202 1
+1 8203 1
+8203 8203 1
+1 8204 1
+8204 8204 1
+1 8205 1
+8205 8205 1
+1 8206 1
+8206 8206 1
+1 8207 1
+8207 8207 1
+1 8208 1
+8208 8208 1
+1 8209 1
+8209 8209 1
+1 8210 1
+8210 8210 1
+1 8211 1
+8211 8211 1
+1 8212 1
+8212 8212 1
+1 8213 1
+8213 8213 1
+1 8214 1
+8214 8214 1
+1 8215 1
+8215 8215 1
+1 8216 1
+8216 8216 1
+1 8217 1
+8217 8217 1
+1 8218 1
+8218 8218 1
+1 8219 1
+8219 8219 1
+1 8220 1
+8220 8220 1
+1 8221 1
+8221 8221 1
+1 8222 1
+8222 8222 1
+1 8223 1
+8223 8223 1
+1 8224 1
+8224 8224 1
+1 8225 1
+8225 8225 1
+1 8226 1
+8226 8226 1
+1 8227 1
+8227 8227 1
+1 8228 1
+8228 8228 1
+1 8229 1
+8229 8229 1
+1 8230 1
+8230 8230 1
+1 8231 1
+8231 8231 1
+1 8232 1
+8232 8232 1
+1 8233 1
+8233 8233 1
+1 8234 1
+8234 8234 1
+1 8235 1
+8235 8235 1
+1 8236 1
+8236 8236 1
+1 8237 1
+8237 8237 1
+1 8238 1
+8238 8238 1
+1 8239 1
+8239 8239 1
+1 8240 1
+8240 8240 1
+1 8241 1
+8241 8241 1
+1 8242 1
+8242 8242 1
+1 8243 1
+8243 8243 1
+1 8244 1
+8244 8244 1
+1 8245 1
+8245 8245 1
+1 8246 1
+8246 8246 1
+1 8247 1
+8247 8247 1
+1 8248 1
+8248 8248 1
+1 8249 1
+8249 8249 1
+1 8250 1
+8250 8250 1
+1 8251 1
+8251 8251 1
+1 8252 1
+8252 8252 1
+1 8253 1
+8253 8253 1
+1 8254 1
+8254 8254 1
+1 8255 1
+8255 8255 1
+1 8256 1
+8256 8256 1
+1 8257 1
+8257 8257 1
+1 8258 1
+8258 8258 1
+1 8259 1
+8259 8259 1
+1 8260 1
+8260 8260 1
+1 8261 1
+8261 8261 1
+1 8262 1
+8262 8262 1
+1 8263 1
+8263 8263 1
+1 8264 1
+8264 8264 1
+1 8265 1
+8265 8265 1
+1 8266 1
+8266 8266 1
+1 8267 1
+8267 8267 1
+1 8268 1
+8268 8268 1
+1 8269 1
+8269 8269 1
+1 8270 1
+8270 8270 1
+1 8271 1
+8271 8271 1
+1 8272 1
+8272 8272 1
+1 8273 1
+8273 8273 1
+1 8274 1
+8274 8274 1
+1 8275 1
+8275 8275 1
+1 8276 1
+8276 8276 1
+1 8277 1
+8277 8277 1
+1 8278 1
+8278 8278 1
+1 8279 1
+8279 8279 1
+1 8280 1
+8280 8280 1
+1 8281 1
+8281 8281 1
+1 8282 1
+8282 8282 1
+1 8283 1
+8283 8283 1
+1 8284 1
+8284 8284 1
+1 8285 1
+8285 8285 1
+1 8286 1
+8286 8286 1
+1 8287 1
+8287 8287 1
+1 8288 1
+8288 8288 1
+1 8289 1
+8289 8289 1
+1 8290 1
+8290 8290 1
+1 8291 1
+8291 8291 1
+1 8292 1
+8292 8292 1
+1 8293 1
+8293 8293 1
+1 8294 1
+8294 8294 1
+1 8295 1
+8295 8295 1
+1 8296 1
+8296 8296 1
+1 8297 1
+8297 8297 1
+1 8298 1
+8298 8298 1
+1 8299 1
+8299 8299 1
+1 8300 1
+8300 8300 1
+1 8301 1
+8301 8301 1
+1 8302 1
+8302 8302 1
+1 8303 1
+8303 8303 1
+1 8304 1
+8304 8304 1
+1 8305 1
+8305 8305 1
+1 8306 1
+8306 8306 1
+1 8307 1
+8307 8307 1
+1 8308 1
+8308 8308 1
+1 8309 1
+8309 8309 1
+1 8310 1
+8310 8310 1
+1 8311 1
+8311 8311 1
+1 8312 1
+8312 8312 1
+1 8313 1
+8313 8313 1
+1 8314 1
+8314 8314 1
+1 8315 1
+8315 8315 1
+1 8316 1
+8316 8316 1
+1 8317 1
+8317 8317 1
+1 8318 1
+8318 8318 1
+1 8319 1
+8319 8319 1
+1 8320 1
+8320 8320 1
+1 8321 1
+8321 8321 1
+1 8322 1
+8322 8322 1
+1 8323 1
+8323 8323 1
+1 8324 1
+8324 8324 1
+1 8325 1
+8325 8325 1
+1 8326 1
+8326 8326 1
+1 8327 1
+8327 8327 1
+1 8328 1
+8328 8328 1
+1 8329 1
+8329 8329 1
+1 8330 1
+8330 8330 1
+1 8331 1
+8331 8331 1
+1 8332 1
+8332 8332 1
+1 8333 1
+8333 8333 1
+1 8334 1
+8334 8334 1
+1 8335 1
+8335 8335 1
+1 8336 1
+8336 8336 1
+1 8337 1
+8337 8337 1
+1 8338 1
+8338 8338 1
+1 8339 1
+8339 8339 1
+1 8340 1
+8340 8340 1
+1 8341 1
+8341 8341 1
+1 8342 1
+8342 8342 1
+1 8343 1
+8343 8343 1
+1 8344 1
+8344 8344 1
+1 8345 1
+8345 8345 1
+1 8346 1
+8346 8346 1
+1 8347 1
+8347 8347 1
+1 8348 1
+8348 8348 1
+1 8349 1
+8349 8349 1
+1 8350 1
+8350 8350 1
+1 8351 1
+8351 8351 1
+1 8352 1
+8352 8352 1
+1 8353 1
+8353 8353 1
+1 8354 1
+8354 8354 1
+1 8355 1
+8355 8355 1
+1 8356 1
+8356 8356 1
+1 8357 1
+8357 8357 1
+1 8358 1
+8358 8358 1
+1 8359 1
+8359 8359 1
+1 8360 1
+8360 8360 1
+1 8361 1
+8361 8361 1
+1 8362 1
+8362 8362 1
+1 8363 1
+8363 8363 1
+1 8364 1
+8364 8364 1
+1 8365 1
+8365 8365 1
+1 8366 1
+8366 8366 1
+1 8367 1
+8367 8367 1
+1 8368 1
+8368 8368 1
+1 8369 1
+8369 8369 1
+1 8370 1
+8370 8370 1
+1 8371 1
+8371 8371 1
+1 8372 1
+8372 8372 1
+1 8373 1
+8373 8373 1
+1 8374 1
+8374 8374 1
+1 8375 1
+8375 8375 1
+1 8376 1
+8376 8376 1
+1 8377 1
+8377 8377 1
+1 8378 1
+8378 8378 1
+1 8379 1
+8379 8379 1
+1 8380 1
+8380 8380 1
+1 8381 1
+8381 8381 1
+1 8382 1
+8382 8382 1
+1 8383 1
+8383 8383 1
+1 8384 1
+8384 8384 1
+1 8385 1
+8385 8385 1
+1 8386 1
+8386 8386 1
+1 8387 1
+8387 8387 1
+1 8388 1
+8388 8388 1
+1 8389 1
+8389 8389 1
+1 8390 1
+8390 8390 1
+1 8391 1
+8391 8391 1
+1 8392 1
+8392 8392 1
+1 8393 1
+8393 8393 1
+1 8394 1
+8394 8394 1
+1 8395 1
+8395 8395 1
+1 8396 1
+8396 8396 1
+1 8397 1
+8397 8397 1
+1 8398 1
+8398 8398 1
+1 8399 1
+8399 8399 1
+1 8400 1
+8400 8400 1
+1 8401 1
+8401 8401 1
+1 8402 1
+8402 8402 1
+1 8403 1
+8403 8403 1
+1 8404 1
+8404 8404 1
+1 8405 1
+8405 8405 1
+1 8406 1
+8406 8406 1
+1 8407 1
+8407 8407 1
+1 8408 1
+8408 8408 1
+1 8409 1
+8409 8409 1
+1 8410 1
+8410 8410 1
+1 8411 1
+8411 8411 1
+1 8412 1
+8412 8412 1
+1 8413 1
+8413 8413 1
+1 8414 1
+8414 8414 1
+1 8415 1
+8415 8415 1
+1 8416 1
+8416 8416 1
+1 8417 1
+8417 8417 1
+1 8418 1
+8418 8418 1
+1 8419 1
+8419 8419 1
+1 8420 1
+8420 8420 1
+1 8421 1
+8421 8421 1
+1 8422 1
+8422 8422 1
+1 8423 1
+8423 8423 1
+1 8424 1
+8424 8424 1
+1 8425 1
+8425 8425 1
+1 8426 1
+8426 8426 1
+1 8427 1
+8427 8427 1
+1 8428 1
+8428 8428 1
+1 8429 1
+8429 8429 1
+1 8430 1
+8430 8430 1
+1 8431 1
+8431 8431 1
+1 8432 1
+8432 8432 1
+1 8433 1
+8433 8433 1
+1 8434 1
+8434 8434 1
+1 8435 1
+8435 8435 1
+1 8436 1
+8436 8436 1
+1 8437 1
+8437 8437 1
+1 8438 1
+8438 8438 1
+1 8439 1
+8439 8439 1
+1 8440 1
+8440 8440 1
+1 8441 1
+8441 8441 1
+1 8442 1
+8442 8442 1
+1 8443 1
+8443 8443 1
+1 8444 1
+8444 8444 1
+1 8445 1
+8445 8445 1
+1 8446 1
+8446 8446 1
+1 8447 1
+8447 8447 1
+1 8448 1
+8448 8448 1
+1 8449 1
+8449 8449 1
+1 8450 1
+8450 8450 1
+1 8451 1
+8451 8451 1
+1 8452 1
+8452 8452 1
+1 8453 1
+8453 8453 1
+1 8454 1
+8454 8454 1
+1 8455 1
+8455 8455 1
+1 8456 1
+8456 8456 1
+1 8457 1
+8457 8457 1
+1 8458 1
+8458 8458 1
+1 8459 1
+8459 8459 1
+1 8460 1
+8460 8460 1
+1 8461 1
+8461 8461 1
+1 8462 1
+8462 8462 1
+1 8463 1
+8463 8463 1
+1 8464 1
+8464 8464 1
+1 8465 1
+8465 8465 1
+1 8466 1
+8466 8466 1
+1 8467 1
+8467 8467 1
+1 8468 1
+8468 8468 1
+1 8469 1
+8469 8469 1
+1 8470 1
+8470 8470 1
+1 8471 1
+8471 8471 1
+1 8472 1
+8472 8472 1
+1 8473 1
+8473 8473 1
+1 8474 1
+8474 8474 1
+1 8475 1
+8475 8475 1
+1 8476 1
+8476 8476 1
+1 8477 1
+8477 8477 1
+1 8478 1
+8478 8478 1
+1 8479 1
+8479 8479 1
+1 8480 1
+8480 8480 1
+1 8481 1
+8481 8481 1
+1 8482 1
+8482 8482 1
+1 8483 1
+8483 8483 1
+1 8484 1
+8484 8484 1
+1 8485 1
+8485 8485 1
+1 8486 1
+8486 8486 1
+1 8487 1
+8487 8487 1
+1 8488 1
+8488 8488 1
+1 8489 1
+8489 8489 1
+1 8490 1
+8490 8490 1
+1 8491 1
+8491 8491 1
+1 8492 1
+8492 8492 1
+1 8493 1
+8493 8493 1
+1 8494 1
+8494 8494 1
+1 8495 1
+8495 8495 1
+1 8496 1
+8496 8496 1
+1 8497 1
+8497 8497 1
+1 8498 1
+8498 8498 1
+1 8499 1
+8499 8499 1
+1 8500 1
+8500 8500 1
+1 8501 1
+8501 8501 1
+1 8502 1
+8502 8502 1
+1 8503 1
+8503 8503 1
+1 8504 1
+8504 8504 1
+1 8505 1
+8505 8505 1
+1 8506 1
+8506 8506 1
+1 8507 1
+8507 8507 1
+1 8508 1
+8508 8508 1
+1 8509 1
+8509 8509 1
+1 8510 1
+8510 8510 1
+1 8511 1
+8511 8511 1
+1 8512 1
+8512 8512 1
+1 8513 1
+8513 8513 1
+1 8514 1
+8514 8514 1
+1 8515 1
+8515 8515 1
+1 8516 1
+8516 8516 1
+1 8517 1
+8517 8517 1
+1 8518 1
+8518 8518 1
+1 8519 1
+8519 8519 1
+1 8520 1
+8520 8520 1
+1 8521 1
+8521 8521 1
+1 8522 1
+8522 8522 1
+1 8523 1
+8523 8523 1
+1 8524 1
+8524 8524 1
+1 8525 1
+8525 8525 1
+1 8526 1
+8526 8526 1
+1 8527 1
+8527 8527 1
+1 8528 1
+8528 8528 1
+1 8529 1
+8529 8529 1
+1 8530 1
+8530 8530 1
+1 8531 1
+8531 8531 1
+1 8532 1
+8532 8532 1
+1 8533 1
+8533 8533 1
+1 8534 1
+8534 8534 1
+1 8535 1
+8535 8535 1
+1 8536 1
+8536 8536 1
+1 8537 1
+8537 8537 1
+1 8538 1
+8538 8538 1
+1 8539 1
+8539 8539 1
+1 8540 1
+8540 8540 1
+1 8541 1
+8541 8541 1
+1 8542 1
+8542 8542 1
+1 8543 1
+8543 8543 1
+1 8544 1
+8544 8544 1
+1 8545 1
+8545 8545 1
+1 8546 1
+8546 8546 1
+1 8547 1
+8547 8547 1
+1 8548 1
+8548 8548 1
+1 8549 1
+8549 8549 1
+1 8550 1
+8550 8550 1
+1 8551 1
+8551 8551 1
+1 8552 1
+8552 8552 1
+1 8553 1
+8553 8553 1
+1 8554 1
+8554 8554 1
+1 8555 1
+8555 8555 1
+1 8556 1
+8556 8556 1
+1 8557 1
+8557 8557 1
+1 8558 1
+8558 8558 1
+1 8559 1
+8559 8559 1
+1 8560 1
+8560 8560 1
+1 8561 1
+8561 8561 1
+1 8562 1
+8562 8562 1
+1 8563 1
+8563 8563 1
+1 8564 1
+8564 8564 1
+1 8565 1
+8565 8565 1
+1 8566 1
+8566 8566 1
+1 8567 1
+8567 8567 1
+1 8568 1
+8568 8568 1
+1 8569 1
+8569 8569 1
+1 8570 1
+8570 8570 1
+1 8571 1
+8571 8571 1
+1 8572 1
+8572 8572 1
+1 8573 1
+8573 8573 1
+1 8574 1
+8574 8574 1
+1 8575 1
+8575 8575 1
+1 8576 1
+8576 8576 1
+1 8577 1
+8577 8577 1
+1 8578 1
+8578 8578 1
+1 8579 1
+8579 8579 1
+1 8580 1
+8580 8580 1
+1 8581 1
+8581 8581 1
+1 8582 1
+8582 8582 1
+1 8583 1
+8583 8583 1
+1 8584 1
+8584 8584 1
+1 8585 1
+8585 8585 1
+1 8586 1
+8586 8586 1
+1 8587 1
+8587 8587 1
+1 8588 1
+8588 8588 1
+1 8589 1
+8589 8589 1
+1 8590 1
+8590 8590 1
+1 8591 1
+8591 8591 1
+1 8592 1
+8592 8592 1
+1 8593 1
+8593 8593 1
+1 8594 1
+8594 8594 1
+1 8595 1
+8595 8595 1
+1 8596 1
+8596 8596 1
+1 8597 1
+8597 8597 1
+1 8598 1
+8598 8598 1
+1 8599 1
+8599 8599 1
+1 8600 1
+8600 8600 1
+1 8601 1
+8601 8601 1
+1 8602 1
+8602 8602 1
+1 8603 1
+8603 8603 1
+1 8604 1
+8604 8604 1
+1 8605 1
+8605 8605 1
+1 8606 1
+8606 8606 1
+1 8607 1
+8607 8607 1
+1 8608 1
+8608 8608 1
+1 8609 1
+8609 8609 1
+1 8610 1
+8610 8610 1
+1 8611 1
+8611 8611 1
+1 8612 1
+8612 8612 1
+1 8613 1
+8613 8613 1
+1 8614 1
+8614 8614 1
+1 8615 1
+8615 8615 1
+1 8616 1
+8616 8616 1
+1 8617 1
+8617 8617 1
+1 8618 1
+8618 8618 1
+1 8619 1
+8619 8619 1
+1 8620 1
+8620 8620 1
+1 8621 1
+8621 8621 1
+1 8622 1
+8622 8622 1
+1 8623 1
+8623 8623 1
+1 8624 1
+8624 8624 1
+1 8625 1
+8625 8625 1
+1 8626 1
+8626 8626 1
+1 8627 1
+8627 8627 1
+1 8628 1
+8628 8628 1
+1 8629 1
+8629 8629 1
+1 8630 1
+8630 8630 1
+1 8631 1
+8631 8631 1
+1 8632 1
+8632 8632 1
+1 8633 1
+8633 8633 1
+1 8634 1
+8634 8634 1
+1 8635 1
+8635 8635 1
+1 8636 1
+8636 8636 1
+1 8637 1
+8637 8637 1
+1 8638 1
+8638 8638 1
+1 8639 1
+8639 8639 1
+1 8640 1
+8640 8640 1
+1 8641 1
+8641 8641 1
+1 8642 1
+8642 8642 1
+1 8643 1
+8643 8643 1
+1 8644 1
+8644 8644 1
+1 8645 1
+8645 8645 1
+1 8646 1
+8646 8646 1
+1 8647 1
+8647 8647 1
+1 8648 1
+8648 8648 1
+1 8649 1
+8649 8649 1
+1 8650 1
+8650 8650 1
+1 8651 1
+8651 8651 1
+1 8652 1
+8652 8652 1
+1 8653 1
+8653 8653 1
+1 8654 1
+8654 8654 1
+1 8655 1
+8655 8655 1
+1 8656 1
+8656 8656 1
+1 8657 1
+8657 8657 1
+1 8658 1
+8658 8658 1
+1 8659 1
+8659 8659 1
+1 8660 1
+8660 8660 1
+1 8661 1
+8661 8661 1
+1 8662 1
+8662 8662 1
+1 8663 1
+8663 8663 1
+1 8664 1
+8664 8664 1
+1 8665 1
+8665 8665 1
+1 8666 1
+8666 8666 1
+1 8667 1
+8667 8667 1
+1 8668 1
+8668 8668 1
+1 8669 1
+8669 8669 1
+1 8670 1
+8670 8670 1
+1 8671 1
+8671 8671 1
+1 8672 1
+8672 8672 1
+1 8673 1
+8673 8673 1
+1 8674 1
+8674 8674 1
+1 8675 1
+8675 8675 1
+1 8676 1
+8676 8676 1
+1 8677 1
+8677 8677 1
+1 8678 1
+8678 8678 1
+1 8679 1
+8679 8679 1
+1 8680 1
+8680 8680 1
+1 8681 1
+8681 8681 1
+1 8682 1
+8682 8682 1
+1 8683 1
+8683 8683 1
+1 8684 1
+8684 8684 1
+1 8685 1
+8685 8685 1
+1 8686 1
+8686 8686 1
+1 8687 1
+8687 8687 1
+1 8688 1
+8688 8688 1
+1 8689 1
+8689 8689 1
+1 8690 1
+8690 8690 1
+1 8691 1
+8691 8691 1
+1 8692 1
+8692 8692 1
+1 8693 1
+8693 8693 1
+1 8694 1
+8694 8694 1
+1 8695 1
+8695 8695 1
+1 8696 1
+8696 8696 1
+1 8697 1
+8697 8697 1
+1 8698 1
+8698 8698 1
+1 8699 1
+8699 8699 1
+1 8700 1
+8700 8700 1
+1 8701 1
+8701 8701 1
+1 8702 1
+8702 8702 1
+1 8703 1
+8703 8703 1
+1 8704 1
+8704 8704 1
+1 8705 1
+8705 8705 1
+1 8706 1
+8706 8706 1
+1 8707 1
+8707 8707 1
+1 8708 1
+8708 8708 1
+1 8709 1
+8709 8709 1
+1 8710 1
+8710 8710 1
+1 8711 1
+8711 8711 1
+1 8712 1
+8712 8712 1
+1 8713 1
+8713 8713 1
+1 8714 1
+8714 8714 1
+1 8715 1
+8715 8715 1
+1 8716 1
+8716 8716 1
+1 8717 1
+8717 8717 1
+1 8718 1
+8718 8718 1
+1 8719 1
+8719 8719 1
+1 8720 1
+8720 8720 1
+1 8721 1
+8721 8721 1
+1 8722 1
+8722 8722 1
+1 8723 1
+8723 8723 1
+1 8724 1
+8724 8724 1
+1 8725 1
+8725 8725 1
+1 8726 1
+8726 8726 1
+1 8727 1
+8727 8727 1
+1 8728 1
+8728 8728 1
+1 8729 1
+8729 8729 1
+1 8730 1
+8730 8730 1
+1 8731 1
+8731 8731 1
+1 8732 1
+8732 8732 1
+1 8733 1
+8733 8733 1
+1 8734 1
+8734 8734 1
+1 8735 1
+8735 8735 1
+1 8736 1
+8736 8736 1
+1 8737 1
+8737 8737 1
+1 8738 1
+8738 8738 1
+1 8739 1
+8739 8739 1
+1 8740 1
+8740 8740 1
+1 8741 1
+8741 8741 1
+1 8742 1
+8742 8742 1
+1 8743 1
+8743 8743 1
+1 8744 1
+8744 8744 1
+1 8745 1
+8745 8745 1
+1 8746 1
+8746 8746 1
+1 8747 1
+8747 8747 1
+1 8748 1
+8748 8748 1
+1 8749 1
+8749 8749 1
+1 8750 1
+8750 8750 1
+1 8751 1
+8751 8751 1
+1 8752 1
+8752 8752 1
+1 8753 1
+8753 8753 1
+1 8754 1
+8754 8754 1
+1 8755 1
+8755 8755 1
+1 8756 1
+8756 8756 1
+1 8757 1
+8757 8757 1
+1 8758 1
+8758 8758 1
+1 8759 1
+8759 8759 1
+1 8760 1
+8760 8760 1
+1 8761 1
+8761 8761 1
+1 8762 1
+8762 8762 1
+1 8763 1
+8763 8763 1
+1 8764 1
+8764 8764 1
+1 8765 1
+8765 8765 1
+1 8766 1
+8766 8766 1
+1 8767 1
+8767 8767 1
+1 8768 1
+8768 8768 1
+1 8769 1
+8769 8769 1
+1 8770 1
+8770 8770 1
+1 8771 1
+8771 8771 1
+1 8772 1
+8772 8772 1
+1 8773 1
+8773 8773 1
+1 8774 1
+8774 8774 1
+1 8775 1
+8775 8775 1
+1 8776 1
+8776 8776 1
+1 8777 1
+8777 8777 1
+1 8778 1
+8778 8778 1
+1 8779 1
+8779 8779 1
+1 8780 1
+8780 8780 1
+1 8781 1
+8781 8781 1
+1 8782 1
+8782 8782 1
+1 8783 1
+8783 8783 1
+1 8784 1
+8784 8784 1
+1 8785 1
+8785 8785 1
+1 8786 1
+8786 8786 1
+1 8787 1
+8787 8787 1
+1 8788 1
+8788 8788 1
+1 8789 1
+8789 8789 1
+1 8790 1
+8790 8790 1
+1 8791 1
+8791 8791 1
+1 8792 1
+8792 8792 1
+1 8793 1
+8793 8793 1
+1 8794 1
+8794 8794 1
+1 8795 1
+8795 8795 1
+1 8796 1
+8796 8796 1
+1 8797 1
+8797 8797 1
+1 8798 1
+8798 8798 1
+1 8799 1
+8799 8799 1
+1 8800 1
+8800 8800 1
+1 8801 1
+8801 8801 1
+1 8802 1
+8802 8802 1
+1 8803 1
+8803 8803 1
+1 8804 1
+8804 8804 1
+1 8805 1
+8805 8805 1
+1 8806 1
+8806 8806 1
+1 8807 1
+8807 8807 1
+1 8808 1
+8808 8808 1
+1 8809 1
+8809 8809 1
+1 8810 1
+8810 8810 1
+1 8811 1
+8811 8811 1
+1 8812 1
+8812 8812 1
+1 8813 1
+8813 8813 1
+1 8814 1
+8814 8814 1
+1 8815 1
+8815 8815 1
+1 8816 1
+8816 8816 1
+1 8817 1
+8817 8817 1
+1 8818 1
+8818 8818 1
+1 8819 1
+8819 8819 1
+1 8820 1
+8820 8820 1
+1 8821 1
+8821 8821 1
+1 8822 1
+8822 8822 1
+1 8823 1
+8823 8823 1
+1 8824 1
+8824 8824 1
+1 8825 1
+8825 8825 1
+1 8826 1
+8826 8826 1
+1 8827 1
+8827 8827 1
+1 8828 1
+8828 8828 1
+1 8829 1
+8829 8829 1
+1 8830 1
+8830 8830 1
+1 8831 1
+8831 8831 1
+1 8832 1
+8832 8832 1
+1 8833 1
+8833 8833 1
+1 8834 1
+8834 8834 1
+1 8835 1
+8835 8835 1
+1 8836 1
+8836 8836 1
+1 8837 1
+8837 8837 1
+1 8838 1
+8838 8838 1
+1 8839 1
+8839 8839 1
+1 8840 1
+8840 8840 1
+1 8841 1
+8841 8841 1
+1 8842 1
+8842 8842 1
+1 8843 1
+8843 8843 1
+1 8844 1
+8844 8844 1
+1 8845 1
+8845 8845 1
+1 8846 1
+8846 8846 1
+1 8847 1
+8847 8847 1
+1 8848 1
+8848 8848 1
+1 8849 1
+8849 8849 1
+1 8850 1
+8850 8850 1
+1 8851 1
+8851 8851 1
+1 8852 1
+8852 8852 1
+1 8853 1
+8853 8853 1
+1 8854 1
+8854 8854 1
+1 8855 1
+8855 8855 1
+1 8856 1
+8856 8856 1
+1 8857 1
+8857 8857 1
+1 8858 1
+8858 8858 1
+1 8859 1
+8859 8859 1
+1 8860 1
+8860 8860 1
+1 8861 1
+8861 8861 1
+1 8862 1
+8862 8862 1
+1 8863 1
+8863 8863 1
+1 8864 1
+8864 8864 1
+1 8865 1
+8865 8865 1
+1 8866 1
+8866 8866 1
+1 8867 1
+8867 8867 1
+1 8868 1
+8868 8868 1
+1 8869 1
+8869 8869 1
+1 8870 1
+8870 8870 1
+1 8871 1
+8871 8871 1
+1 8872 1
+8872 8872 1
+1 8873 1
+8873 8873 1
+1 8874 1
+8874 8874 1
+1 8875 1
+8875 8875 1
+1 8876 1
+8876 8876 1
+1 8877 1
+8877 8877 1
+1 8878 1
+8878 8878 1
+1 8879 1
+8879 8879 1
+1 8880 1
+8880 8880 1
+1 8881 1
+8881 8881 1
+1 8882 1
+8882 8882 1
+1 8883 1
+8883 8883 1
+1 8884 1
+8884 8884 1
+1 8885 1
+8885 8885 1
+1 8886 1
+8886 8886 1
+1 8887 1
+8887 8887 1
+1 8888 1
+8888 8888 1
+1 8889 1
+8889 8889 1
+1 8890 1
+8890 8890 1
+1 8891 1
+8891 8891 1
+1 8892 1
+8892 8892 1
+1 8893 1
+8893 8893 1
+1 8894 1
+8894 8894 1
+1 8895 1
+8895 8895 1
+1 8896 1
+8896 8896 1
+1 8897 1
+8897 8897 1
+1 8898 1
+8898 8898 1
+1 8899 1
+8899 8899 1
+1 8900 1
+8900 8900 1
+1 8901 1
+8901 8901 1
+1 8902 1
+8902 8902 1
+1 8903 1
+8903 8903 1
+1 8904 1
+8904 8904 1
+1 8905 1
+8905 8905 1
+1 8906 1
+8906 8906 1
+1 8907 1
+8907 8907 1
+1 8908 1
+8908 8908 1
+1 8909 1
+8909 8909 1
+1 8910 1
+8910 8910 1
+1 8911 1
+8911 8911 1
+1 8912 1
+8912 8912 1
+1 8913 1
+8913 8913 1
+1 8914 1
+8914 8914 1
+1 8915 1
+8915 8915 1
+1 8916 1
+8916 8916 1
+1 8917 1
+8917 8917 1
+1 8918 1
+8918 8918 1
+1 8919 1
+8919 8919 1
+1 8920 1
+8920 8920 1
+1 8921 1
+8921 8921 1
+1 8922 1
+8922 8922 1
+1 8923 1
+8923 8923 1
+1 8924 1
+8924 8924 1
+1 8925 1
+8925 8925 1
+1 8926 1
+8926 8926 1
+1 8927 1
+8927 8927 1
+1 8928 1
+8928 8928 1
+1 8929 1
+8929 8929 1
+1 8930 1
+8930 8930 1
+1 8931 1
+8931 8931 1
+1 8932 1
+8932 8932 1
+1 8933 1
+8933 8933 1
+1 8934 1
+8934 8934 1
+1 8935 1
+8935 8935 1
+1 8936 1
+8936 8936 1
+1 8937 1
+8937 8937 1
+1 8938 1
+8938 8938 1
+1 8939 1
+8939 8939 1
+1 8940 1
+8940 8940 1
+1 8941 1
+8941 8941 1
+1 8942 1
+8942 8942 1
+1 8943 1
+8943 8943 1
+1 8944 1
+8944 8944 1
+1 8945 1
+8945 8945 1
+1 8946 1
+8946 8946 1
+1 8947 1
+8947 8947 1
+1 8948 1
+8948 8948 1
+1 8949 1
+8949 8949 1
+1 8950 1
+8950 8950 1
+1 8951 1
+8951 8951 1
+1 8952 1
+8952 8952 1
+1 8953 1
+8953 8953 1
+1 8954 1
+8954 8954 1
+1 8955 1
+8955 8955 1
+1 8956 1
+8956 8956 1
+1 8957 1
+8957 8957 1
+1 8958 1
+8958 8958 1
+1 8959 1
+8959 8959 1
+1 8960 1
+8960 8960 1
+1 8961 1
+8961 8961 1
+1 8962 1
+8962 8962 1
+1 8963 1
+8963 8963 1
+1 8964 1
+8964 8964 1
+1 8965 1
+8965 8965 1
+1 8966 1
+8966 8966 1
+1 8967 1
+8967 8967 1
+1 8968 1
+8968 8968 1
+1 8969 1
+8969 8969 1
+1 8970 1
+8970 8970 1
+1 8971 1
+8971 8971 1
+1 8972 1
+8972 8972 1
+1 8973 1
+8973 8973 1
+1 8974 1
+8974 8974 1
+1 8975 1
+8975 8975 1
+1 8976 1
+8976 8976 1
+1 8977 1
+8977 8977 1
+1 8978 1
+8978 8978 1
+1 8979 1
+8979 8979 1
+1 8980 1
+8980 8980 1
+1 8981 1
+8981 8981 1
+1 8982 1
+8982 8982 1
+1 8983 1
+8983 8983 1
+1 8984 1
+8984 8984 1
+1 8985 1
+8985 8985 1
+1 8986 1
+8986 8986 1
+1 8987 1
+8987 8987 1
+1 8988 1
+8988 8988 1
+1 8989 1
+8989 8989 1
+1 8990 1
+8990 8990 1
+1 8991 1
+8991 8991 1
+1 8992 1
+8992 8992 1
+1 8993 1
+8993 8993 1
+1 8994 1
+8994 8994 1
+1 8995 1
+8995 8995 1
+1 8996 1
+8996 8996 1
+1 8997 1
+8997 8997 1
+1 8998 1
+8998 8998 1
+1 8999 1
+8999 8999 1
+1 9000 1
+9000 9000 1
+1 9001 1
+9001 9001 1
+1 9002 1
+9002 9002 1
+1 9003 1
+9003 9003 1
+1 9004 1
+9004 9004 1
+1 9005 1
+9005 9005 1
+1 9006 1
+9006 9006 1
+1 9007 1
+9007 9007 1
+1 9008 1
+9008 9008 1
+1 9009 1
+9009 9009 1
+1 9010 1
+9010 9010 1
+1 9011 1
+9011 9011 1
+1 9012 1
+9012 9012 1
+1 9013 1
+9013 9013 1
+1 9014 1
+9014 9014 1
+1 9015 1
+9015 9015 1
+1 9016 1
+9016 9016 1
+1 9017 1
+9017 9017 1
+1 9018 1
+9018 9018 1
+1 9019 1
+9019 9019 1
+1 9020 1
+9020 9020 1
+1 9021 1
+9021 9021 1
+1 9022 1
+9022 9022 1
+1 9023 1
+9023 9023 1
+1 9024 1
+9024 9024 1
+1 9025 1
+9025 9025 1
+1 9026 1
+9026 9026 1
+1 9027 1
+9027 9027 1
+1 9028 1
+9028 9028 1
+1 9029 1
+9029 9029 1
+1 9030 1
+9030 9030 1
+1 9031 1
+9031 9031 1
+1 9032 1
+9032 9032 1
+1 9033 1
+9033 9033 1
+1 9034 1
+9034 9034 1
+1 9035 1
+9035 9035 1
+1 9036 1
+9036 9036 1
+1 9037 1
+9037 9037 1
+1 9038 1
+9038 9038 1
+1 9039 1
+9039 9039 1
+1 9040 1
+9040 9040 1
+1 9041 1
+9041 9041 1
+1 9042 1
+9042 9042 1
+1 9043 1
+9043 9043 1
+1 9044 1
+9044 9044 1
+1 9045 1
+9045 9045 1
+1 9046 1
+9046 9046 1
+1 9047 1
+9047 9047 1
+1 9048 1
+9048 9048 1
+1 9049 1
+9049 9049 1
+1 9050 1
+9050 9050 1
+1 9051 1
+9051 9051 1
+1 9052 1
+9052 9052 1
+1 9053 1
+9053 9053 1
+1 9054 1
+9054 9054 1
+1 9055 1
+9055 9055 1
+1 9056 1
+9056 9056 1
+1 9057 1
+9057 9057 1
+1 9058 1
+9058 9058 1
+1 9059 1
+9059 9059 1
+1 9060 1
+9060 9060 1
+1 9061 1
+9061 9061 1
+1 9062 1
+9062 9062 1
+1 9063 1
+9063 9063 1
+1 9064 1
+9064 9064 1
+1 9065 1
+9065 9065 1
+1 9066 1
+9066 9066 1
+1 9067 1
+9067 9067 1
+1 9068 1
+9068 9068 1
+1 9069 1
+9069 9069 1
+1 9070 1
+9070 9070 1
+1 9071 1
+9071 9071 1
+1 9072 1
+9072 9072 1
+1 9073 1
+9073 9073 1
+1 9074 1
+9074 9074 1
+1 9075 1
+9075 9075 1
+1 9076 1
+9076 9076 1
+1 9077 1
+9077 9077 1
+1 9078 1
+9078 9078 1
+1 9079 1
+9079 9079 1
+1 9080 1
+9080 9080 1
+1 9081 1
+9081 9081 1
+1 9082 1
+9082 9082 1
+1 9083 1
+9083 9083 1
+1 9084 1
+9084 9084 1
+1 9085 1
+9085 9085 1
+1 9086 1
+9086 9086 1
+1 9087 1
+9087 9087 1
+1 9088 1
+9088 9088 1
+1 9089 1
+9089 9089 1
+1 9090 1
+9090 9090 1
+1 9091 1
+9091 9091 1
+1 9092 1
+9092 9092 1
+1 9093 1
+9093 9093 1
+1 9094 1
+9094 9094 1
+1 9095 1
+9095 9095 1
+1 9096 1
+9096 9096 1
+1 9097 1
+9097 9097 1
+1 9098 1
+9098 9098 1
+1 9099 1
+9099 9099 1
+1 9100 1
+9100 9100 1
+1 9101 1
+9101 9101 1
+1 9102 1
+9102 9102 1
+1 9103 1
+9103 9103 1
+1 9104 1
+9104 9104 1
+1 9105 1
+9105 9105 1
+1 9106 1
+9106 9106 1
+1 9107 1
+9107 9107 1
+1 9108 1
+9108 9108 1
+1 9109 1
+9109 9109 1
+1 9110 1
+9110 9110 1
+1 9111 1
+9111 9111 1
+1 9112 1
+9112 9112 1
+1 9113 1
+9113 9113 1
+1 9114 1
+9114 9114 1
+1 9115 1
+9115 9115 1
+1 9116 1
+9116 9116 1
+1 9117 1
+9117 9117 1
+1 9118 1
+9118 9118 1
+1 9119 1
+9119 9119 1
+1 9120 1
+9120 9120 1
+1 9121 1
+9121 9121 1
+1 9122 1
+9122 9122 1
+1 9123 1
+9123 9123 1
+1 9124 1
+9124 9124 1
+1 9125 1
+9125 9125 1
+1 9126 1
+9126 9126 1
+1 9127 1
+9127 9127 1
+1 9128 1
+9128 9128 1
+1 9129 1
+9129 9129 1
+1 9130 1
+9130 9130 1
+1 9131 1
+9131 9131 1
+1 9132 1
+9132 9132 1
+1 9133 1
+9133 9133 1
+1 9134 1
+9134 9134 1
+1 9135 1
+9135 9135 1
+1 9136 1
+9136 9136 1
+1 9137 1
+9137 9137 1
+1 9138 1
+9138 9138 1
+1 9139 1
+9139 9139 1
+1 9140 1
+9140 9140 1
+1 9141 1
+9141 9141 1
+1 9142 1
+9142 9142 1
+1 9143 1
+9143 9143 1
+1 9144 1
+9144 9144 1
+1 9145 1
+9145 9145 1
+1 9146 1
+9146 9146 1
+1 9147 1
+9147 9147 1
+1 9148 1
+9148 9148 1
+1 9149 1
+9149 9149 1
+1 9150 1
+9150 9150 1
+1 9151 1
+9151 9151 1
+1 9152 1
+9152 9152 1
+1 9153 1
+9153 9153 1
+1 9154 1
+9154 9154 1
+1 9155 1
+9155 9155 1
+1 9156 1
+9156 9156 1
+1 9157 1
+9157 9157 1
+1 9158 1
+9158 9158 1
+1 9159 1
+9159 9159 1
+1 9160 1
+9160 9160 1
+1 9161 1
+9161 9161 1
+1 9162 1
+9162 9162 1
+1 9163 1
+9163 9163 1
+1 9164 1
+9164 9164 1
+1 9165 1
+9165 9165 1
+1 9166 1
+9166 9166 1
+1 9167 1
+9167 9167 1
+1 9168 1
+9168 9168 1
+1 9169 1
+9169 9169 1
+1 9170 1
+9170 9170 1
+1 9171 1
+9171 9171 1
+1 9172 1
+9172 9172 1
+1 9173 1
+9173 9173 1
+1 9174 1
+9174 9174 1
+1 9175 1
+9175 9175 1
+1 9176 1
+9176 9176 1
+1 9177 1
+9177 9177 1
+1 9178 1
+9178 9178 1
+1 9179 1
+9179 9179 1
+1 9180 1
+9180 9180 1
+1 9181 1
+9181 9181 1
+1 9182 1
+9182 9182 1
+1 9183 1
+9183 9183 1
+1 9184 1
+9184 9184 1
+1 9185 1
+9185 9185 1
+1 9186 1
+9186 9186 1
+1 9187 1
+9187 9187 1
+1 9188 1
+9188 9188 1
+1 9189 1
+9189 9189 1
+1 9190 1
+9190 9190 1
+1 9191 1
+9191 9191 1
+1 9192 1
+9192 9192 1
+1 9193 1
+9193 9193 1
+1 9194 1
+9194 9194 1
+1 9195 1
+9195 9195 1
+1 9196 1
+9196 9196 1
+1 9197 1
+9197 9197 1
+1 9198 1
+9198 9198 1
+1 9199 1
+9199 9199 1
+1 9200 1
+9200 9200 1
+1 9201 1
+9201 9201 1
+1 9202 1
+9202 9202 1
+1 9203 1
+9203 9203 1
+1 9204 1
+9204 9204 1
+1 9205 1
+9205 9205 1
+1 9206 1
+9206 9206 1
+1 9207 1
+9207 9207 1
+1 9208 1
+9208 9208 1
+1 9209 1
+9209 9209 1
+1 9210 1
+9210 9210 1
+1 9211 1
+9211 9211 1
+1 9212 1
+9212 9212 1
+1 9213 1
+9213 9213 1
+1 9214 1
+9214 9214 1
+1 9215 1
+9215 9215 1
+1 9216 1
+9216 9216 1
+1 9217 1
+9217 9217 1
+1 9218 1
+9218 9218 1
+1 9219 1
+9219 9219 1
+1 9220 1
+9220 9220 1
+1 9221 1
+9221 9221 1
+1 9222 1
+9222 9222 1
+1 9223 1
+9223 9223 1
+1 9224 1
+9224 9224 1
+1 9225 1
+9225 9225 1
+1 9226 1
+9226 9226 1
+1 9227 1
+9227 9227 1
+1 9228 1
+9228 9228 1
+1 9229 1
+9229 9229 1
+1 9230 1
+9230 9230 1
+1 9231 1
+9231 9231 1
+1 9232 1
+9232 9232 1
+1 9233 1
+9233 9233 1
+1 9234 1
+9234 9234 1
+1 9235 1
+9235 9235 1
+1 9236 1
+9236 9236 1
+1 9237 1
+9237 9237 1
+1 9238 1
+9238 9238 1
+1 9239 1
+9239 9239 1
+1 9240 1
+9240 9240 1
+1 9241 1
+9241 9241 1
+1 9242 1
+9242 9242 1
+1 9243 1
+9243 9243 1
+1 9244 1
+9244 9244 1
+1 9245 1
+9245 9245 1
+1 9246 1
+9246 9246 1
+1 9247 1
+9247 9247 1
+1 9248 1
+9248 9248 1
+1 9249 1
+9249 9249 1
+1 9250 1
+9250 9250 1
+1 9251 1
+9251 9251 1
+1 9252 1
+9252 9252 1
+1 9253 1
+9253 9253 1
+1 9254 1
+9254 9254 1
+1 9255 1
+9255 9255 1
+1 9256 1
+9256 9256 1
+1 9257 1
+9257 9257 1
+1 9258 1
+9258 9258 1
+1 9259 1
+9259 9259 1
+1 9260 1
+9260 9260 1
+1 9261 1
+9261 9261 1
+1 9262 1
+9262 9262 1
+1 9263 1
+9263 9263 1
+1 9264 1
+9264 9264 1
+1 9265 1
+9265 9265 1
+1 9266 1
+9266 9266 1
+1 9267 1
+9267 9267 1
+1 9268 1
+9268 9268 1
+1 9269 1
+9269 9269 1
+1 9270 1
+9270 9270 1
+1 9271 1
+9271 9271 1
+1 9272 1
+9272 9272 1
+1 9273 1
+9273 9273 1
+1 9274 1
+9274 9274 1
+1 9275 1
+9275 9275 1
+1 9276 1
+9276 9276 1
+1 9277 1
+9277 9277 1
+1 9278 1
+9278 9278 1
+1 9279 1
+9279 9279 1
+1 9280 1
+9280 9280 1
+1 9281 1
+9281 9281 1
+1 9282 1
+9282 9282 1
+1 9283 1
+9283 9283 1
+1 9284 1
+9284 9284 1
+1 9285 1
+9285 9285 1
+1 9286 1
+9286 9286 1
+1 9287 1
+9287 9287 1
+1 9288 1
+9288 9288 1
+1 9289 1
+9289 9289 1
+1 9290 1
+9290 9290 1
+1 9291 1
+9291 9291 1
+1 9292 1
+9292 9292 1
+1 9293 1
+9293 9293 1
+1 9294 1
+9294 9294 1
+1 9295 1
+9295 9295 1
+1 9296 1
+9296 9296 1
+1 9297 1
+9297 9297 1
+1 9298 1
+9298 9298 1
+1 9299 1
+9299 9299 1
+1 9300 1
+9300 9300 1
+1 9301 1
+9301 9301 1
+1 9302 1
+9302 9302 1
+1 9303 1
+9303 9303 1
+1 9304 1
+9304 9304 1
+1 9305 1
+9305 9305 1
+1 9306 1
+9306 9306 1
+1 9307 1
+9307 9307 1
+1 9308 1
+9308 9308 1
+1 9309 1
+9309 9309 1
+1 9310 1
+9310 9310 1
+1 9311 1
+9311 9311 1
+1 9312 1
+9312 9312 1
+1 9313 1
+9313 9313 1
+1 9314 1
+9314 9314 1
+1 9315 1
+9315 9315 1
+1 9316 1
+9316 9316 1
+1 9317 1
+9317 9317 1
+1 9318 1
+9318 9318 1
+1 9319 1
+9319 9319 1
+1 9320 1
+9320 9320 1
+1 9321 1
+9321 9321 1
+1 9322 1
+9322 9322 1
+1 9323 1
+9323 9323 1
+1 9324 1
+9324 9324 1
+1 9325 1
+9325 9325 1
+1 9326 1
+9326 9326 1
+1 9327 1
+9327 9327 1
+1 9328 1
+9328 9328 1
+1 9329 1
+9329 9329 1
+1 9330 1
+9330 9330 1
+1 9331 1
+9331 9331 1
+1 9332 1
+9332 9332 1
+1 9333 1
+9333 9333 1
+1 9334 1
+9334 9334 1
+1 9335 1
+9335 9335 1
+1 9336 1
+9336 9336 1
+1 9337 1
+9337 9337 1
+1 9338 1
+9338 9338 1
+1 9339 1
+9339 9339 1
+1 9340 1
+9340 9340 1
+1 9341 1
+9341 9341 1
+1 9342 1
+9342 9342 1
+1 9343 1
+9343 9343 1
+1 9344 1
+9344 9344 1
+1 9345 1
+9345 9345 1
+1 9346 1
+9346 9346 1
+1 9347 1
+9347 9347 1
+1 9348 1
+9348 9348 1
+1 9349 1
+9349 9349 1
+1 9350 1
+9350 9350 1
+1 9351 1
+9351 9351 1
+1 9352 1
+9352 9352 1
+1 9353 1
+9353 9353 1
+1 9354 1
+9354 9354 1
+1 9355 1
+9355 9355 1
+1 9356 1
+9356 9356 1
+1 9357 1
+9357 9357 1
+1 9358 1
+9358 9358 1
+1 9359 1
+9359 9359 1
+1 9360 1
+9360 9360 1
+1 9361 1
+9361 9361 1
+1 9362 1
+9362 9362 1
+1 9363 1
+9363 9363 1
+1 9364 1
+9364 9364 1
+1 9365 1
+9365 9365 1
+1 9366 1
+9366 9366 1
+1 9367 1
+9367 9367 1
+1 9368 1
+9368 9368 1
+1 9369 1
+9369 9369 1
+1 9370 1
+9370 9370 1
+1 9371 1
+9371 9371 1
+1 9372 1
+9372 9372 1
+1 9373 1
+9373 9373 1
+1 9374 1
+9374 9374 1
+1 9375 1
+9375 9375 1
+1 9376 1
+9376 9376 1
+1 9377 1
+9377 9377 1
+1 9378 1
+9378 9378 1
+1 9379 1
+9379 9379 1
+1 9380 1
+9380 9380 1
+1 9381 1
+9381 9381 1
+1 9382 1
+9382 9382 1
+1 9383 1
+9383 9383 1
+1 9384 1
+9384 9384 1
+1 9385 1
+9385 9385 1
+1 9386 1
+9386 9386 1
+1 9387 1
+9387 9387 1
+1 9388 1
+9388 9388 1
+1 9389 1
+9389 9389 1
+1 9390 1
+9390 9390 1
+1 9391 1
+9391 9391 1
+1 9392 1
+9392 9392 1
+1 9393 1
+9393 9393 1
+1 9394 1
+9394 9394 1
+1 9395 1
+9395 9395 1
+1 9396 1
+9396 9396 1
+1 9397 1
+9397 9397 1
+1 9398 1
+9398 9398 1
+1 9399 1
+9399 9399 1
+1 9400 1
+9400 9400 1
+1 9401 1
+9401 9401 1
+1 9402 1
+9402 9402 1
+1 9403 1
+9403 9403 1
+1 9404 1
+9404 9404 1
+1 9405 1
+9405 9405 1
+1 9406 1
+9406 9406 1
+1 9407 1
+9407 9407 1
+1 9408 1
+9408 9408 1
+1 9409 1
+9409 9409 1
+1 9410 1
+9410 9410 1
+1 9411 1
+9411 9411 1
+1 9412 1
+9412 9412 1
+1 9413 1
+9413 9413 1
+1 9414 1
+9414 9414 1
+1 9415 1
+9415 9415 1
+1 9416 1
+9416 9416 1
+1 9417 1
+9417 9417 1
+1 9418 1
+9418 9418 1
+1 9419 1
+9419 9419 1
+1 9420 1
+9420 9420 1
+1 9421 1
+9421 9421 1
+1 9422 1
+9422 9422 1
+1 9423 1
+9423 9423 1
+1 9424 1
+9424 9424 1
+1 9425 1
+9425 9425 1
+1 9426 1
+9426 9426 1
+1 9427 1
+9427 9427 1
+1 9428 1
+9428 9428 1
+1 9429 1
+9429 9429 1
+1 9430 1
+9430 9430 1
+1 9431 1
+9431 9431 1
+1 9432 1
+9432 9432 1
+1 9433 1
+9433 9433 1
+1 9434 1
+9434 9434 1
+1 9435 1
+9435 9435 1
+1 9436 1
+9436 9436 1
+1 9437 1
+9437 9437 1
+1 9438 1
+9438 9438 1
+1 9439 1
+9439 9439 1
+1 9440 1
+9440 9440 1
+1 9441 1
+9441 9441 1
+1 9442 1
+9442 9442 1
+1 9443 1
+9443 9443 1
+1 9444 1
+9444 9444 1
+1 9445 1
+9445 9445 1
+1 9446 1
+9446 9446 1
+1 9447 1
+9447 9447 1
+1 9448 1
+9448 9448 1
+1 9449 1
+9449 9449 1
+1 9450 1
+9450 9450 1
+1 9451 1
+9451 9451 1
+1 9452 1
+9452 9452 1
+1 9453 1
+9453 9453 1
+1 9454 1
+9454 9454 1
+1 9455 1
+9455 9455 1
+1 9456 1
+9456 9456 1
+1 9457 1
+9457 9457 1
+1 9458 1
+9458 9458 1
+1 9459 1
+9459 9459 1
+1 9460 1
+9460 9460 1
+1 9461 1
+9461 9461 1
+1 9462 1
+9462 9462 1
+1 9463 1
+9463 9463 1
+1 9464 1
+9464 9464 1
+1 9465 1
+9465 9465 1
+1 9466 1
+9466 9466 1
+1 9467 1
+9467 9467 1
+1 9468 1
+9468 9468 1
+1 9469 1
+9469 9469 1
+1 9470 1
+9470 9470 1
+1 9471 1
+9471 9471 1
+1 9472 1
+9472 9472 1
+1 9473 1
+9473 9473 1
+1 9474 1
+9474 9474 1
+1 9475 1
+9475 9475 1
+1 9476 1
+9476 9476 1
+1 9477 1
+9477 9477 1
+1 9478 1
+9478 9478 1
+1 9479 1
+9479 9479 1
+1 9480 1
+9480 9480 1
+1 9481 1
+9481 9481 1
+1 9482 1
+9482 9482 1
+1 9483 1
+9483 9483 1
+1 9484 1
+9484 9484 1
+1 9485 1
+9485 9485 1
+1 9486 1
+9486 9486 1
+1 9487 1
+9487 9487 1
+1 9488 1
+9488 9488 1
+1 9489 1
+9489 9489 1
+1 9490 1
+9490 9490 1
+1 9491 1
+9491 9491 1
+1 9492 1
+9492 9492 1
+1 9493 1
+9493 9493 1
+1 9494 1
+9494 9494 1
+1 9495 1
+9495 9495 1
+1 9496 1
+9496 9496 1
+1 9497 1
+9497 9497 1
+1 9498 1
+9498 9498 1
+1 9499 1
+9499 9499 1
+1 9500 1
+9500 9500 1
+1 9501 1
+9501 9501 1
+1 9502 1
+9502 9502 1
+1 9503 1
+9503 9503 1
+1 9504 1
+9504 9504 1
+1 9505 1
+9505 9505 1
+1 9506 1
+9506 9506 1
+1 9507 1
+9507 9507 1
+1 9508 1
+9508 9508 1
+1 9509 1
+9509 9509 1
+1 9510 1
+9510 9510 1
+1 9511 1
+9511 9511 1
+1 9512 1
+9512 9512 1
+1 9513 1
+9513 9513 1
+1 9514 1
+9514 9514 1
+1 9515 1
+9515 9515 1
+1 9516 1
+9516 9516 1
+1 9517 1
+9517 9517 1
+1 9518 1
+9518 9518 1
+1 9519 1
+9519 9519 1
+1 9520 1
+9520 9520 1
+1 9521 1
+9521 9521 1
+1 9522 1
+9522 9522 1
+1 9523 1
+9523 9523 1
+1 9524 1
+9524 9524 1
+1 9525 1
+9525 9525 1
+1 9526 1
+9526 9526 1
+1 9527 1
+9527 9527 1
+1 9528 1
+9528 9528 1
+1 9529 1
+9529 9529 1
+1 9530 1
+9530 9530 1
+1 9531 1
+9531 9531 1
+1 9532 1
+9532 9532 1
+1 9533 1
+9533 9533 1
+1 9534 1
+9534 9534 1
+1 9535 1
+9535 9535 1
+1 9536 1
+9536 9536 1
+1 9537 1
+9537 9537 1
+1 9538 1
+9538 9538 1
+1 9539 1
+9539 9539 1
+1 9540 1
+9540 9540 1
+1 9541 1
+9541 9541 1
+1 9542 1
+9542 9542 1
+1 9543 1
+9543 9543 1
+1 9544 1
+9544 9544 1
+1 9545 1
+9545 9545 1
+1 9546 1
+9546 9546 1
+1 9547 1
+9547 9547 1
+1 9548 1
+9548 9548 1
+1 9549 1
+9549 9549 1
+1 9550 1
+9550 9550 1
+1 9551 1
+9551 9551 1
+1 9552 1
+9552 9552 1
+1 9553 1
+9553 9553 1
+1 9554 1
+9554 9554 1
+1 9555 1
+9555 9555 1
+1 9556 1
+9556 9556 1
+1 9557 1
+9557 9557 1
+1 9558 1
+9558 9558 1
+1 9559 1
+9559 9559 1
+1 9560 1
+9560 9560 1
+1 9561 1
+9561 9561 1
+1 9562 1
+9562 9562 1
+1 9563 1
+9563 9563 1
+1 9564 1
+9564 9564 1
+1 9565 1
+9565 9565 1
+1 9566 1
+9566 9566 1
+1 9567 1
+9567 9567 1
+1 9568 1
+9568 9568 1
+1 9569 1
+9569 9569 1
+1 9570 1
+9570 9570 1
+1 9571 1
+9571 9571 1
+1 9572 1
+9572 9572 1
+1 9573 1
+9573 9573 1
+1 9574 1
+9574 9574 1
+1 9575 1
+9575 9575 1
+1 9576 1
+9576 9576 1
+1 9577 1
+9577 9577 1
+1 9578 1
+9578 9578 1
+1 9579 1
+9579 9579 1
+1 9580 1
+9580 9580 1
+1 9581 1
+9581 9581 1
+1 9582 1
+9582 9582 1
+1 9583 1
+9583 9583 1
+1 9584 1
+9584 9584 1
+1 9585 1
+9585 9585 1
+1 9586 1
+9586 9586 1
+1 9587 1
+9587 9587 1
+1 9588 1
+9588 9588 1
+1 9589 1
+9589 9589 1
+1 9590 1
+9590 9590 1
+1 9591 1
+9591 9591 1
+1 9592 1
+9592 9592 1
+1 9593 1
+9593 9593 1
+1 9594 1
+9594 9594 1
+1 9595 1
+9595 9595 1
+1 9596 1
+9596 9596 1
+1 9597 1
+9597 9597 1
+1 9598 1
+9598 9598 1
+1 9599 1
+9599 9599 1
+1 9600 1
+9600 9600 1
+1 9601 1
+9601 9601 1
+1 9602 1
+9602 9602 1
+1 9603 1
+9603 9603 1
+1 9604 1
+9604 9604 1
+1 9605 1
+9605 9605 1
+1 9606 1
+9606 9606 1
+1 9607 1
+9607 9607 1
+1 9608 1
+9608 9608 1
+1 9609 1
+9609 9609 1
+1 9610 1
+9610 9610 1
+1 9611 1
+9611 9611 1
+1 9612 1
+9612 9612 1
+1 9613 1
+9613 9613 1
+1 9614 1
+9614 9614 1
+1 9615 1
+9615 9615 1
+1 9616 1
+9616 9616 1
+1 9617 1
+9617 9617 1
+1 9618 1
+9618 9618 1
+1 9619 1
+9619 9619 1
+1 9620 1
+9620 9620 1
+1 9621 1
+9621 9621 1
+1 9622 1
+9622 9622 1
+1 9623 1
+9623 9623 1
+1 9624 1
+9624 9624 1
+1 9625 1
+9625 9625 1
+1 9626 1
+9626 9626 1
+1 9627 1
+9627 9627 1
+1 9628 1
+9628 9628 1
+1 9629 1
+9629 9629 1
+1 9630 1
+9630 9630 1
+1 9631 1
+9631 9631 1
+1 9632 1
+9632 9632 1
+1 9633 1
+9633 9633 1
+1 9634 1
+9634 9634 1
+1 9635 1
+9635 9635 1
+1 9636 1
+9636 9636 1
+1 9637 1
+9637 9637 1
+1 9638 1
+9638 9638 1
+1 9639 1
+9639 9639 1
+1 9640 1
+9640 9640 1
+1 9641 1
+9641 9641 1
+1 9642 1
+9642 9642 1
+1 9643 1
+9643 9643 1
+1 9644 1
+9644 9644 1
+1 9645 1
+9645 9645 1
+1 9646 1
+9646 9646 1
+1 9647 1
+9647 9647 1
+1 9648 1
+9648 9648 1
+1 9649 1
+9649 9649 1
+1 9650 1
+9650 9650 1
+1 9651 1
+9651 9651 1
+1 9652 1
+9652 9652 1
+1 9653 1
+9653 9653 1
+1 9654 1
+9654 9654 1
+1 9655 1
+9655 9655 1
+1 9656 1
+9656 9656 1
+1 9657 1
+9657 9657 1
+1 9658 1
+9658 9658 1
+1 9659 1
+9659 9659 1
+1 9660 1
+9660 9660 1
+1 9661 1
+9661 9661 1
+1 9662 1
+9662 9662 1
+1 9663 1
+9663 9663 1
+1 9664 1
+9664 9664 1
+1 9665 1
+9665 9665 1
+1 9666 1
+9666 9666 1
+1 9667 1
+9667 9667 1
+1 9668 1
+9668 9668 1
+1 9669 1
+9669 9669 1
+1 9670 1
+9670 9670 1
+1 9671 1
+9671 9671 1
+1 9672 1
+9672 9672 1
+1 9673 1
+9673 9673 1
+1 9674 1
+9674 9674 1
+1 9675 1
+9675 9675 1
+1 9676 1
+9676 9676 1
+1 9677 1
+9677 9677 1
+1 9678 1
+9678 9678 1
+1 9679 1
+9679 9679 1
+1 9680 1
+9680 9680 1
+1 9681 1
+9681 9681 1
+1 9682 1
+9682 9682 1
+1 9683 1
+9683 9683 1
+1 9684 1
+9684 9684 1
+1 9685 1
+9685 9685 1
+1 9686 1
+9686 9686 1
+1 9687 1
+9687 9687 1
+1 9688 1
+9688 9688 1
+1 9689 1
+9689 9689 1
+1 9690 1
+9690 9690 1
+1 9691 1
+9691 9691 1
+1 9692 1
+9692 9692 1
+1 9693 1
+9693 9693 1
+1 9694 1
+9694 9694 1
+1 9695 1
+9695 9695 1
+1 9696 1
+9696 9696 1
+1 9697 1
+9697 9697 1
+1 9698 1
+9698 9698 1
+1 9699 1
+9699 9699 1
+1 9700 1
+9700 9700 1
+1 9701 1
+9701 9701 1
+1 9702 1
+9702 9702 1
+1 9703 1
+9703 9703 1
+1 9704 1
+9704 9704 1
+1 9705 1
+9705 9705 1
+1 9706 1
+9706 9706 1
+1 9707 1
+9707 9707 1
+1 9708 1
+9708 9708 1
+1 9709 1
+9709 9709 1
+1 9710 1
+9710 9710 1
+1 9711 1
+9711 9711 1
+1 9712 1
+9712 9712 1
+1 9713 1
+9713 9713 1
+1 9714 1
+9714 9714 1
+1 9715 1
+9715 9715 1
+1 9716 1
+9716 9716 1
+1 9717 1
+9717 9717 1
+1 9718 1
+9718 9718 1
+1 9719 1
+9719 9719 1
+1 9720 1
+9720 9720 1
+1 9721 1
+9721 9721 1
+1 9722 1
+9722 9722 1
+1 9723 1
+9723 9723 1
+1 9724 1
+9724 9724 1
+1 9725 1
+9725 9725 1
+1 9726 1
+9726 9726 1
+1 9727 1
+9727 9727 1
+1 9728 1
+9728 9728 1
+1 9729 1
+9729 9729 1
+1 9730 1
+9730 9730 1
+1 9731 1
+9731 9731 1
+1 9732 1
+9732 9732 1
+1 9733 1
+9733 9733 1
+1 9734 1
+9734 9734 1
+1 9735 1
+9735 9735 1
+1 9736 1
+9736 9736 1
+1 9737 1
+9737 9737 1
+1 9738 1
+9738 9738 1
+1 9739 1
+9739 9739 1
+1 9740 1
+9740 9740 1
+1 9741 1
+9741 9741 1
+1 9742 1
+9742 9742 1
+1 9743 1
+9743 9743 1
+1 9744 1
+9744 9744 1
+1 9745 1
+9745 9745 1
+1 9746 1
+9746 9746 1
+1 9747 1
+9747 9747 1
+1 9748 1
+9748 9748 1
+1 9749 1
+9749 9749 1
+1 9750 1
+9750 9750 1
+1 9751 1
+9751 9751 1
+1 9752 1
+9752 9752 1
+1 9753 1
+9753 9753 1
+1 9754 1
+9754 9754 1
+1 9755 1
+9755 9755 1
+1 9756 1
+9756 9756 1
+1 9757 1
+9757 9757 1
+1 9758 1
+9758 9758 1
+1 9759 1
+9759 9759 1
+1 9760 1
+9760 9760 1
+1 9761 1
+9761 9761 1
+1 9762 1
+9762 9762 1
+1 9763 1
+9763 9763 1
+1 9764 1
+9764 9764 1
+1 9765 1
+9765 9765 1
+1 9766 1
+9766 9766 1
+1 9767 1
+9767 9767 1
+1 9768 1
+9768 9768 1
+1 9769 1
+9769 9769 1
+1 9770 1
+9770 9770 1
+1 9771 1
+9771 9771 1
+1 9772 1
+9772 9772 1
+1 9773 1
+9773 9773 1
+1 9774 1
+9774 9774 1
+1 9775 1
+9775 9775 1
+1 9776 1
+9776 9776 1
+1 9777 1
+9777 9777 1
+1 9778 1
+9778 9778 1
+1 9779 1
+9779 9779 1
+1 9780 1
+9780 9780 1
+1 9781 1
+9781 9781 1
+1 9782 1
+9782 9782 1
+1 9783 1
+9783 9783 1
+1 9784 1
+9784 9784 1
+1 9785 1
+9785 9785 1
+1 9786 1
+9786 9786 1
+1 9787 1
+9787 9787 1
+1 9788 1
+9788 9788 1
+1 9789 1
+9789 9789 1
+1 9790 1
+9790 9790 1
+1 9791 1
+9791 9791 1
+1 9792 1
+9792 9792 1
+1 9793 1
+9793 9793 1
+1 9794 1
+9794 9794 1
+1 9795 1
+9795 9795 1
+1 9796 1
+9796 9796 1
+1 9797 1
+9797 9797 1
+1 9798 1
+9798 9798 1
+1 9799 1
+9799 9799 1
+1 9800 1
+9800 9800 1
+1 9801 1
+9801 9801 1
+1 9802 1
+9802 9802 1
+1 9803 1
+9803 9803 1
+1 9804 1
+9804 9804 1
+1 9805 1
+9805 9805 1
+1 9806 1
+9806 9806 1
+1 9807 1
+9807 9807 1
+1 9808 1
+9808 9808 1
+1 9809 1
+9809 9809 1
+1 9810 1
+9810 9810 1
+1 9811 1
+9811 9811 1
+1 9812 1
+9812 9812 1
+1 9813 1
+9813 9813 1
+1 9814 1
+9814 9814 1
+1 9815 1
+9815 9815 1
+1 9816 1
+9816 9816 1
+1 9817 1
+9817 9817 1
+1 9818 1
+9818 9818 1
+1 9819 1
+9819 9819 1
+1 9820 1
+9820 9820 1
+1 9821 1
+9821 9821 1
+1 9822 1
+9822 9822 1
+1 9823 1
+9823 9823 1
+1 9824 1
+9824 9824 1
+1 9825 1
+9825 9825 1
+1 9826 1
+9826 9826 1
+1 9827 1
+9827 9827 1
+1 9828 1
+9828 9828 1
+1 9829 1
+9829 9829 1
+1 9830 1
+9830 9830 1
+1 9831 1
+9831 9831 1
+1 9832 1
+9832 9832 1
+1 9833 1
+9833 9833 1
+1 9834 1
+9834 9834 1
+1 9835 1
+9835 9835 1
+1 9836 1
+9836 9836 1
+1 9837 1
+9837 9837 1
+1 9838 1
+9838 9838 1
+1 9839 1
+9839 9839 1
+1 9840 1
+9840 9840 1
+1 9841 1
+9841 9841 1
+1 9842 1
+9842 9842 1
+1 9843 1
+9843 9843 1
+1 9844 1
+9844 9844 1
+1 9845 1
+9845 9845 1
+1 9846 1
+9846 9846 1
+1 9847 1
+9847 9847 1
+1 9848 1
+9848 9848 1
+1 9849 1
+9849 9849 1
+1 9850 1
+9850 9850 1
+1 9851 1
+9851 9851 1
+1 9852 1
+9852 9852 1
+1 9853 1
+9853 9853 1
+1 9854 1
+9854 9854 1
+1 9855 1
+9855 9855 1
+1 9856 1
+9856 9856 1
+1 9857 1
+9857 9857 1
+1 9858 1
+9858 9858 1
+1 9859 1
+9859 9859 1
+1 9860 1
+9860 9860 1
+1 9861 1
+9861 9861 1
+1 9862 1
+9862 9862 1
+1 9863 1
+9863 9863 1
+1 9864 1
+9864 9864 1
+1 9865 1
+9865 9865 1
+1 9866 1
+9866 9866 1
+1 9867 1
+9867 9867 1
+1 9868 1
+9868 9868 1
+1 9869 1
+9869 9869 1
+1 9870 1
+9870 9870 1
+1 9871 1
+9871 9871 1
+1 9872 1
+9872 9872 1
+1 9873 1
+9873 9873 1
+1 9874 1
+9874 9874 1
+1 9875 1
+9875 9875 1
+1 9876 1
+9876 9876 1
+1 9877 1
+9877 9877 1
+1 9878 1
+9878 9878 1
+1 9879 1
+9879 9879 1
+1 9880 1
+9880 9880 1
+1 9881 1
+9881 9881 1
+1 9882 1
+9882 9882 1
+1 9883 1
+9883 9883 1
+1 9884 1
+9884 9884 1
+1 9885 1
+9885 9885 1
+1 9886 1
+9886 9886 1
+1 9887 1
+9887 9887 1
+1 9888 1
+9888 9888 1
+1 9889 1
+9889 9889 1
+1 9890 1
+9890 9890 1
+1 9891 1
+9891 9891 1
+1 9892 1
+9892 9892 1
+1 9893 1
+9893 9893 1
+1 9894 1
+9894 9894 1
+1 9895 1
+9895 9895 1
+1 9896 1
+9896 9896 1
+1 9897 1
+9897 9897 1
+1 9898 1
+9898 9898 1
+1 9899 1
+9899 9899 1
+1 9900 1
+9900 9900 1
+1 9901 1
+9901 9901 1
+1 9902 1
+9902 9902 1
+1 9903 1
+9903 9903 1
+1 9904 1
+9904 9904 1
+1 9905 1
+9905 9905 1
+1 9906 1
+9906 9906 1
+1 9907 1
+9907 9907 1
+1 9908 1
+9908 9908 1
+1 9909 1
+9909 9909 1
+1 9910 1
+9910 9910 1
+1 9911 1
+9911 9911 1
+1 9912 1
+9912 9912 1
+1 9913 1
+9913 9913 1
+1 9914 1
+9914 9914 1
+1 9915 1
+9915 9915 1
+1 9916 1
+9916 9916 1
+1 9917 1
+9917 9917 1
+1 9918 1
+9918 9918 1
+1 9919 1
+9919 9919 1
+1 9920 1
+9920 9920 1
+1 9921 1
+9921 9921 1
+1 9922 1
+9922 9922 1
+1 9923 1
+9923 9923 1
+1 9924 1
+9924 9924 1
+1 9925 1
+9925 9925 1
+1 9926 1
+9926 9926 1
+1 9927 1
+9927 9927 1
+1 9928 1
+9928 9928 1
+1 9929 1
+9929 9929 1
+1 9930 1
+9930 9930 1
+1 9931 1
+9931 9931 1
+1 9932 1
+9932 9932 1
+1 9933 1
+9933 9933 1
+1 9934 1
+9934 9934 1
+1 9935 1
+9935 9935 1
+1 9936 1
+9936 9936 1
+1 9937 1
+9937 9937 1
+1 9938 1
+9938 9938 1
+1 9939 1
+9939 9939 1
+1 9940 1
+9940 9940 1
+1 9941 1
+9941 9941 1
+1 9942 1
+9942 9942 1
+1 9943 1
+9943 9943 1
+1 9944 1
+9944 9944 1
+1 9945 1
+9945 9945 1
+1 9946 1
+9946 9946 1
+1 9947 1
+9947 9947 1
+1 9948 1
+9948 9948 1
+1 9949 1
+9949 9949 1
+1 9950 1
+9950 9950 1
+1 9951 1
+9951 9951 1
+1 9952 1
+9952 9952 1
+1 9953 1
+9953 9953 1
+1 9954 1
+9954 9954 1
+1 9955 1
+9955 9955 1
+1 9956 1
+9956 9956 1
+1 9957 1
+9957 9957 1
+1 9958 1
+9958 9958 1
+1 9959 1
+9959 9959 1
+1 9960 1
+9960 9960 1
+1 9961 1
+9961 9961 1
+1 9962 1
+9962 9962 1
+1 9963 1
+9963 9963 1
+1 9964 1
+9964 9964 1
+1 9965 1
+9965 9965 1
+1 9966 1
+9966 9966 1
+1 9967 1
+9967 9967 1
+1 9968 1
+9968 9968 1
+1 9969 1
+9969 9969 1
+1 9970 1
+9970 9970 1
+1 9971 1
+9971 9971 1
+1 9972 1
+9972 9972 1
+1 9973 1
+9973 9973 1
+1 9974 1
+9974 9974 1
+1 9975 1
+9975 9975 1
+1 9976 1
+9976 9976 1
+1 9977 1
+9977 9977 1
+1 9978 1
+9978 9978 1
+1 9979 1
+9979 9979 1
+1 9980 1
+9980 9980 1
+1 9981 1
+9981 9981 1
+1 9982 1
+9982 9982 1
+1 9983 1
+9983 9983 1
+1 9984 1
+9984 9984 1
+1 9985 1
+9985 9985 1
+1 9986 1
+9986 9986 1
+1 9987 1
+9987 9987 1
+1 9988 1
+9988 9988 1
+1 9989 1
+9989 9989 1
+1 9990 1
+9990 9990 1
+1 9991 1
+9991 9991 1
+1 9992 1
+9992 9992 1
+1 9993 1
+9993 9993 1
+1 9994 1
+9994 9994 1
+1 9995 1
+9995 9995 1
+1 9996 1
+9996 9996 1
+1 9997 1
+9997 9997 1
+1 9998 1
+9998 9998 1
+1 9999 1
+9999 9999 1
+1 10000 1
+10000 10000 1
+1 10001 1
+10001 10001 1
+1 10002 1
+10002 10002 1
+1 10003 1
+10003 10003 1
+1 10004 1
+10004 10004 1
+1 10005 1
+10005 10005 1
+1 10006 1
+10006 10006 1
+1 10007 1
+10007 10007 1
+1 10008 1
+10008 10008 1
+1 10009 1
+10009 10009 1
+1 10010 1
+10010 10010 1
+1 10011 1
+10011 10011 1
+1 10012 1
+10012 10012 1
+1 10013 1
+10013 10013 1
+1 10014 1
+10014 10014 1
+1 10015 1
+10015 10015 1
+1 10016 1
+10016 10016 1
+1 10017 1
+10017 10017 1
+1 10018 1
+10018 10018 1
+1 10019 1
+10019 10019 1
+1 10020 1
+10020 10020 1
+1 10021 1
+10021 10021 1
+1 10022 1
+10022 10022 1
+1 10023 1
+10023 10023 1
+1 10024 1
+10024 10024 1
+1 10025 1
+10025 10025 1
+1 10026 1
+10026 10026 1
+1 10027 1
+10027 10027 1
+1 10028 1
+10028 10028 1
+1 10029 1
+10029 10029 1
+1 10030 1
+10030 10030 1
+1 10031 1
+10031 10031 1
+1 10032 1
+10032 10032 1
+1 10033 1
+10033 10033 1
+1 10034 1
+10034 10034 1
+1 10035 1
+10035 10035 1
+1 10036 1
+10036 10036 1
+1 10037 1
+10037 10037 1
+1 10038 1
+10038 10038 1
+1 10039 1
+10039 10039 1
+1 10040 1
+10040 10040 1
+1 10041 1
+10041 10041 1
+1 10042 1
+10042 10042 1
+1 10043 1
+10043 10043 1
+1 10044 1
+10044 10044 1
+1 10045 1
+10045 10045 1
+1 10046 1
+10046 10046 1
+1 10047 1
+10047 10047 1
+1 10048 1
+10048 10048 1
+1 10049 1
+10049 10049 1
+1 10050 1
+10050 10050 1
+1 10051 1
+10051 10051 1
+1 10052 1
+10052 10052 1
+1 10053 1
+10053 10053 1
+1 10054 1
+10054 10054 1
+1 10055 1
+10055 10055 1
+1 10056 1
+10056 10056 1
+1 10057 1
+10057 10057 1
+1 10058 1
+10058 10058 1
+1 10059 1
+10059 10059 1
+1 10060 1
+10060 10060 1
+1 10061 1
+10061 10061 1
+1 10062 1
+10062 10062 1
+1 10063 1
+10063 10063 1
+1 10064 1
+10064 10064 1
+1 10065 1
+10065 10065 1
+1 10066 1
+10066 10066 1
+1 10067 1
+10067 10067 1
+1 10068 1
+10068 10068 1
+1 10069 1
+10069 10069 1
+1 10070 1
+10070 10070 1
+1 10071 1
+10071 10071 1
+1 10072 1
+10072 10072 1
+1 10073 1
+10073 10073 1
+1 10074 1
+10074 10074 1
+1 10075 1
+10075 10075 1
+1 10076 1
+10076 10076 1
+1 10077 1
+10077 10077 1
+1 10078 1
+10078 10078 1
+1 10079 1
+10079 10079 1
+1 10080 1
+10080 10080 1
+1 10081 1
+10081 10081 1
+1 10082 1
+10082 10082 1
+1 10083 1
+10083 10083 1
+1 10084 1
+10084 10084 1
+1 10085 1
+10085 10085 1
+1 10086 1
+10086 10086 1
+1 10087 1
+10087 10087 1
+1 10088 1
+10088 10088 1
+1 10089 1
+10089 10089 1
+1 10090 1
+10090 10090 1
+1 10091 1
+10091 10091 1
+1 10092 1
+10092 10092 1
+1 10093 1
+10093 10093 1
+1 10094 1
+10094 10094 1
+1 10095 1
+10095 10095 1
+1 10096 1
+10096 10096 1
+1 10097 1
+10097 10097 1
+1 10098 1
+10098 10098 1
+1 10099 1
+10099 10099 1
+1 10100 1
+10100 10100 1
+1 10101 1
+10101 10101 1
+1 10102 1
+10102 10102 1
+1 10103 1
+10103 10103 1
+1 10104 1
+10104 10104 1
+1 10105 1
+10105 10105 1
+1 10106 1
+10106 10106 1
+1 10107 1
+10107 10107 1
+1 10108 1
+10108 10108 1
+1 10109 1
+10109 10109 1
+1 10110 1
+10110 10110 1
+1 10111 1
+10111 10111 1
+1 10112 1
+10112 10112 1
+1 10113 1
+10113 10113 1
+1 10114 1
+10114 10114 1
+1 10115 1
+10115 10115 1
+1 10116 1
+10116 10116 1
+1 10117 1
+10117 10117 1
+1 10118 1
+10118 10118 1
+1 10119 1
+10119 10119 1
+1 10120 1
+10120 10120 1
+1 10121 1
+10121 10121 1
+1 10122 1
+10122 10122 1
+1 10123 1
+10123 10123 1
+1 10124 1
+10124 10124 1
+1 10125 1
+10125 10125 1
+1 10126 1
+10126 10126 1
+1 10127 1
+10127 10127 1
+1 10128 1
+10128 10128 1
+1 10129 1
+10129 10129 1
+1 10130 1
+10130 10130 1
+1 10131 1
+10131 10131 1
+1 10132 1
+10132 10132 1
+1 10133 1
+10133 10133 1
+1 10134 1
+10134 10134 1
+1 10135 1
+10135 10135 1
+1 10136 1
+10136 10136 1
+1 10137 1
+10137 10137 1
+1 10138 1
+10138 10138 1
+1 10139 1
+10139 10139 1
+1 10140 1
+10140 10140 1
+1 10141 1
+10141 10141 1
+1 10142 1
+10142 10142 1
+1 10143 1
+10143 10143 1
+1 10144 1
+10144 10144 1
+1 10145 1
+10145 10145 1
+1 10146 1
+10146 10146 1
+1 10147 1
+10147 10147 1
+1 10148 1
+10148 10148 1
+1 10149 1
+10149 10149 1
+1 10150 1
+10150 10150 1
+1 10151 1
+10151 10151 1
+1 10152 1
+10152 10152 1
+1 10153 1
+10153 10153 1
+1 10154 1
+10154 10154 1
+1 10155 1
+10155 10155 1
+1 10156 1
+10156 10156 1
+1 10157 1
+10157 10157 1
+1 10158 1
+10158 10158 1
+1 10159 1
+10159 10159 1
+1 10160 1
+10160 10160 1
+1 10161 1
+10161 10161 1
+1 10162 1
+10162 10162 1
+1 10163 1
+10163 10163 1
+1 10164 1
+10164 10164 1
+1 10165 1
+10165 10165 1
+1 10166 1
+10166 10166 1
+1 10167 1
+10167 10167 1
+1 10168 1
+10168 10168 1
+1 10169 1
+10169 10169 1
+1 10170 1
+10170 10170 1
+1 10171 1
+10171 10171 1
+1 10172 1
+10172 10172 1
+1 10173 1
+10173 10173 1
+1 10174 1
+10174 10174 1
+1 10175 1
+10175 10175 1
+1 10176 1
+10176 10176 1
+1 10177 1
+10177 10177 1
+1 10178 1
+10178 10178 1
+1 10179 1
+10179 10179 1
+1 10180 1
+10180 10180 1
+1 10181 1
+10181 10181 1
+1 10182 1
+10182 10182 1
+1 10183 1
+10183 10183 1
+1 10184 1
+10184 10184 1
+1 10185 1
+10185 10185 1
+1 10186 1
+10186 10186 1
+1 10187 1
+10187 10187 1
+1 10188 1
+10188 10188 1
+1 10189 1
+10189 10189 1
+1 10190 1
+10190 10190 1
+1 10191 1
+10191 10191 1
+1 10192 1
+10192 10192 1
+1 10193 1
+10193 10193 1
+1 10194 1
+10194 10194 1
+1 10195 1
+10195 10195 1
+1 10196 1
+10196 10196 1
+1 10197 1
+10197 10197 1
+1 10198 1
+10198 10198 1
+1 10199 1
+10199 10199 1
+1 10200 1
+10200 10200 1
+1 10201 1
+10201 10201 1
+1 10202 1
+10202 10202 1
+1 10203 1
+10203 10203 1
+1 10204 1
+10204 10204 1
+1 10205 1
+10205 10205 1
+1 10206 1
+10206 10206 1
+1 10207 1
+10207 10207 1
+1 10208 1
+10208 10208 1
+1 10209 1
+10209 10209 1
+1 10210 1
+10210 10210 1
+1 10211 1
+10211 10211 1
+1 10212 1
+10212 10212 1
+1 10213 1
+10213 10213 1
+1 10214 1
+10214 10214 1
+1 10215 1
+10215 10215 1
+1 10216 1
+10216 10216 1
+1 10217 1
+10217 10217 1
+1 10218 1
+10218 10218 1
+1 10219 1
+10219 10219 1
+1 10220 1
+10220 10220 1
+1 10221 1
+10221 10221 1
+1 10222 1
+10222 10222 1
+1 10223 1
+10223 10223 1
+1 10224 1
+10224 10224 1
+1 10225 1
+10225 10225 1
+1 10226 1
+10226 10226 1
+1 10227 1
+10227 10227 1
+1 10228 1
+10228 10228 1
+1 10229 1
+10229 10229 1
+1 10230 1
+10230 10230 1
+1 10231 1
+10231 10231 1
+1 10232 1
+10232 10232 1
+1 10233 1
+10233 10233 1
+1 10234 1
+10234 10234 1
+1 10235 1
+10235 10235 1
+1 10236 1
+10236 10236 1
+1 10237 1
+10237 10237 1
+1 10238 1
+10238 10238 1
+1 10239 1
+10239 10239 1
+1 10240 1
+10240 10240 1
+1 10241 1
+10241 10241 1
+1 10242 1
+10242 10242 1
+1 10243 1
+10243 10243 1
+1 10244 1
+10244 10244 1
+1 10245 1
+10245 10245 1
+1 10246 1
+10246 10246 1
+1 10247 1
+10247 10247 1
+1 10248 1
+10248 10248 1
+1 10249 1
+10249 10249 1
+1 10250 1
+10250 10250 1
+1 10251 1
+10251 10251 1
+1 10252 1
+10252 10252 1
+1 10253 1
+10253 10253 1
+1 10254 1
+10254 10254 1
+1 10255 1
+10255 10255 1
+1 10256 1
+10256 10256 1
+1 10257 1
+10257 10257 1
+1 10258 1
+10258 10258 1
+1 10259 1
+10259 10259 1
+1 10260 1
+10260 10260 1
+1 10261 1
+10261 10261 1
+1 10262 1
+10262 10262 1
+1 10263 1
+10263 10263 1
+1 10264 1
+10264 10264 1
+1 10265 1
+10265 10265 1
+1 10266 1
+10266 10266 1
+1 10267 1
+10267 10267 1
+1 10268 1
+10268 10268 1
+1 10269 1
+10269 10269 1
+1 10270 1
+10270 10270 1
+1 10271 1
+10271 10271 1
+1 10272 1
+10272 10272 1
+1 10273 1
+10273 10273 1
+1 10274 1
+10274 10274 1
+1 10275 1
+10275 10275 1
+1 10276 1
+10276 10276 1
+1 10277 1
+10277 10277 1
+1 10278 1
+10278 10278 1
+1 10279 1
+10279 10279 1
+1 10280 1
+10280 10280 1
+1 10281 1
+10281 10281 1
+1 10282 1
+10282 10282 1
+1 10283 1
+10283 10283 1
+1 10284 1
+10284 10284 1
+1 10285 1
+10285 10285 1
+1 10286 1
+10286 10286 1
+1 10287 1
+10287 10287 1
+1 10288 1
+10288 10288 1
+1 10289 1
+10289 10289 1
+1 10290 1
+10290 10290 1
+1 10291 1
+10291 10291 1
+1 10292 1
+10292 10292 1
+1 10293 1
+10293 10293 1
+1 10294 1
+10294 10294 1
+1 10295 1
+10295 10295 1
+1 10296 1
+10296 10296 1
+1 10297 1
+10297 10297 1
+1 10298 1
+10298 10298 1
+1 10299 1
+10299 10299 1
+1 10300 1
+10300 10300 1
+1 10301 1
+10301 10301 1
+1 10302 1
+10302 10302 1
+1 10303 1
+10303 10303 1
+1 10304 1
+10304 10304 1
+1 10305 1
+10305 10305 1
+1 10306 1
+10306 10306 1
+1 10307 1
+10307 10307 1
+1 10308 1
+10308 10308 1
+1 10309 1
+10309 10309 1
+1 10310 1
+10310 10310 1
+1 10311 1
+10311 10311 1
+1 10312 1
+10312 10312 1
+1 10313 1
+10313 10313 1
+1 10314 1
+10314 10314 1
+1 10315 1
+10315 10315 1
+1 10316 1
+10316 10316 1
+1 10317 1
+10317 10317 1
+1 10318 1
+10318 10318 1
+1 10319 1
+10319 10319 1
+1 10320 1
+10320 10320 1
+1 10321 1
+10321 10321 1
+1 10322 1
+10322 10322 1
+1 10323 1
+10323 10323 1
+1 10324 1
+10324 10324 1
+1 10325 1
+10325 10325 1
+1 10326 1
+10326 10326 1
+1 10327 1
+10327 10327 1
+1 10328 1
+10328 10328 1
+1 10329 1
+10329 10329 1
+1 10330 1
+10330 10330 1
+1 10331 1
+10331 10331 1
+1 10332 1
+10332 10332 1
+1 10333 1
+10333 10333 1
+1 10334 1
+10334 10334 1
+1 10335 1
+10335 10335 1
+1 10336 1
+10336 10336 1
+1 10337 1
+10337 10337 1
+1 10338 1
+10338 10338 1
+1 10339 1
+10339 10339 1
+1 10340 1
+10340 10340 1
+1 10341 1
+10341 10341 1
+1 10342 1
+10342 10342 1
+1 10343 1
+10343 10343 1
+1 10344 1
+10344 10344 1
+1 10345 1
+10345 10345 1
+1 10346 1
+10346 10346 1
+1 10347 1
+10347 10347 1
+1 10348 1
+10348 10348 1
+1 10349 1
+10349 10349 1
+1 10350 1
+10350 10350 1
+1 10351 1
+10351 10351 1
+1 10352 1
+10352 10352 1
+1 10353 1
+10353 10353 1
+1 10354 1
+10354 10354 1
+1 10355 1
+10355 10355 1
+1 10356 1
+10356 10356 1
+1 10357 1
+10357 10357 1
+1 10358 1
+10358 10358 1
+1 10359 1
+10359 10359 1
+1 10360 1
+10360 10360 1
+1 10361 1
+10361 10361 1
+1 10362 1
+10362 10362 1
+1 10363 1
+10363 10363 1
+1 10364 1
+10364 10364 1
+1 10365 1
+10365 10365 1
+1 10366 1
+10366 10366 1
+1 10367 1
+10367 10367 1
+1 10368 1
+10368 10368 1
+1 10369 1
+10369 10369 1
+1 10370 1
+10370 10370 1
+1 10371 1
+10371 10371 1
+1 10372 1
+10372 10372 1
+1 10373 1
+10373 10373 1
+1 10374 1
+10374 10374 1
+1 10375 1
+10375 10375 1
+1 10376 1
+10376 10376 1
+1 10377 1
+10377 10377 1
+1 10378 1
+10378 10378 1
+1 10379 1
+10379 10379 1
+1 10380 1
+10380 10380 1
+1 10381 1
+10381 10381 1
+1 10382 1
+10382 10382 1
+1 10383 1
+10383 10383 1
+1 10384 1
+10384 10384 1
+1 10385 1
+10385 10385 1
+1 10386 1
+10386 10386 1
+1 10387 1
+10387 10387 1
+1 10388 1
+10388 10388 1
+1 10389 1
+10389 10389 1
+1 10390 1
+10390 10390 1
+1 10391 1
+10391 10391 1
+1 10392 1
+10392 10392 1
+1 10393 1
+10393 10393 1
+1 10394 1
+10394 10394 1
+1 10395 1
+10395 10395 1
+1 10396 1
+10396 10396 1
+1 10397 1
+10397 10397 1
+1 10398 1
+10398 10398 1
+1 10399 1
+10399 10399 1
+1 10400 1
+10400 10400 1
+1 10401 1
+10401 10401 1
+1 10402 1
+10402 10402 1
+1 10403 1
+10403 10403 1
+1 10404 1
+10404 10404 1
+1 10405 1
+10405 10405 1
+1 10406 1
+10406 10406 1
+1 10407 1
+10407 10407 1
+1 10408 1
+10408 10408 1
+1 10409 1
+10409 10409 1
+1 10410 1
+10410 10410 1
+1 10411 1
+10411 10411 1
+1 10412 1
+10412 10412 1
+1 10413 1
+10413 10413 1
+1 10414 1
+10414 10414 1
+1 10415 1
+10415 10415 1
+1 10416 1
+10416 10416 1
+1 10417 1
+10417 10417 1
+1 10418 1
+10418 10418 1
+1 10419 1
+10419 10419 1
+1 10420 1
+10420 10420 1
+1 10421 1
+10421 10421 1
+1 10422 1
+10422 10422 1
+1 10423 1
+10423 10423 1
+1 10424 1
+10424 10424 1
+1 10425 1
+10425 10425 1
+1 10426 1
+10426 10426 1
+1 10427 1
+10427 10427 1
+1 10428 1
+10428 10428 1
+1 10429 1
+10429 10429 1
+1 10430 1
+10430 10430 1
+1 10431 1
+10431 10431 1
+1 10432 1
+10432 10432 1
+1 10433 1
+10433 10433 1
+1 10434 1
+10434 10434 1
+1 10435 1
+10435 10435 1
+1 10436 1
+10436 10436 1
+1 10437 1
+10437 10437 1
+1 10438 1
+10438 10438 1
+1 10439 1
+10439 10439 1
+1 10440 1
+10440 10440 1
+1 10441 1
+10441 10441 1
+1 10442 1
+10442 10442 1
+1 10443 1
+10443 10443 1
+1 10444 1
+10444 10444 1
+1 10445 1
+10445 10445 1
+1 10446 1
+10446 10446 1
+1 10447 1
+10447 10447 1
+1 10448 1
+10448 10448 1
+1 10449 1
+10449 10449 1
+1 10450 1
+10450 10450 1
+1 10451 1
+10451 10451 1
+1 10452 1
+10452 10452 1
+1 10453 1
+10453 10453 1
+1 10454 1
+10454 10454 1
+1 10455 1
+10455 10455 1
+1 10456 1
+10456 10456 1
+1 10457 1
+10457 10457 1
+1 10458 1
+10458 10458 1
+1 10459 1
+10459 10459 1
+1 10460 1
+10460 10460 1
+1 10461 1
+10461 10461 1
+1 10462 1
+10462 10462 1
+1 10463 1
+10463 10463 1
+1 10464 1
+10464 10464 1
+1 10465 1
+10465 10465 1
+1 10466 1
+10466 10466 1
+1 10467 1
+10467 10467 1
+1 10468 1
+10468 10468 1
+1 10469 1
+10469 10469 1
+1 10470 1
+10470 10470 1
+1 10471 1
+10471 10471 1
+1 10472 1
+10472 10472 1
+1 10473 1
+10473 10473 1
+1 10474 1
+10474 10474 1
+1 10475 1
+10475 10475 1
+1 10476 1
+10476 10476 1
+1 10477 1
+10477 10477 1
+1 10478 1
+10478 10478 1
+1 10479 1
+10479 10479 1
+1 10480 1
+10480 10480 1
+1 10481 1
+10481 10481 1
+1 10482 1
+10482 10482 1
+1 10483 1
+10483 10483 1
+1 10484 1
+10484 10484 1
+1 10485 1
+10485 10485 1
+1 10486 1
+10486 10486 1
+1 10487 1
+10487 10487 1
+1 10488 1
+10488 10488 1
+1 10489 1
+10489 10489 1
+1 10490 1
+10490 10490 1
+1 10491 1
+10491 10491 1
+1 10492 1
+10492 10492 1
+1 10493 1
+10493 10493 1
+1 10494 1
+10494 10494 1
+1 10495 1
+10495 10495 1
+1 10496 1
+10496 10496 1
+1 10497 1
+10497 10497 1
+1 10498 1
+10498 10498 1
+1 10499 1
+10499 10499 1
+1 10500 1
+10500 10500 1
+1 10501 1
+10501 10501 1
+1 10502 1
+10502 10502 1
+1 10503 1
+10503 10503 1
+1 10504 1
+10504 10504 1
+1 10505 1
+10505 10505 1
+1 10506 1
+10506 10506 1
+1 10507 1
+10507 10507 1
+1 10508 1
+10508 10508 1
+1 10509 1
+10509 10509 1
+1 10510 1
+10510 10510 1
+1 10511 1
+10511 10511 1
+1 10512 1
+10512 10512 1
+1 10513 1
+10513 10513 1
+1 10514 1
+10514 10514 1
+1 10515 1
+10515 10515 1
+1 10516 1
+10516 10516 1
+1 10517 1
+10517 10517 1
+1 10518 1
+10518 10518 1
+1 10519 1
+10519 10519 1
+1 10520 1
+10520 10520 1
+1 10521 1
+10521 10521 1
+1 10522 1
+10522 10522 1
+1 10523 1
+10523 10523 1
+1 10524 1
+10524 10524 1
+1 10525 1
+10525 10525 1
+1 10526 1
+10526 10526 1
+1 10527 1
+10527 10527 1
+1 10528 1
+10528 10528 1
+1 10529 1
+10529 10529 1
+1 10530 1
+10530 10530 1
+1 10531 1
+10531 10531 1
+1 10532 1
+10532 10532 1
+1 10533 1
+10533 10533 1
+1 10534 1
+10534 10534 1
+1 10535 1
+10535 10535 1
+1 10536 1
+10536 10536 1
+1 10537 1
+10537 10537 1
+1 10538 1
+10538 10538 1
+1 10539 1
+10539 10539 1
+1 10540 1
+10540 10540 1
+1 10541 1
+10541 10541 1
+1 10542 1
+10542 10542 1
+1 10543 1
+10543 10543 1
+1 10544 1
+10544 10544 1
+1 10545 1
+10545 10545 1
+1 10546 1
+10546 10546 1
+1 10547 1
+10547 10547 1
+1 10548 1
+10548 10548 1
+1 10549 1
+10549 10549 1
+1 10550 1
+10550 10550 1
+1 10551 1
+10551 10551 1
+1 10552 1
+10552 10552 1
+1 10553 1
+10553 10553 1
+1 10554 1
+10554 10554 1
+1 10555 1
+10555 10555 1
+1 10556 1
+10556 10556 1
+1 10557 1
+10557 10557 1
+1 10558 1
+10558 10558 1
+1 10559 1
+10559 10559 1
+1 10560 1
+10560 10560 1
+1 10561 1
+10561 10561 1
+1 10562 1
+10562 10562 1
+1 10563 1
+10563 10563 1
+1 10564 1
+10564 10564 1
+1 10565 1
+10565 10565 1
+1 10566 1
+10566 10566 1
+1 10567 1
+10567 10567 1
+1 10568 1
+10568 10568 1
+1 10569 1
+10569 10569 1
+1 10570 1
+10570 10570 1
+1 10571 1
+10571 10571 1
+1 10572 1
+10572 10572 1
+1 10573 1
+10573 10573 1
+1 10574 1
+10574 10574 1
+1 10575 1
+10575 10575 1
+1 10576 1
+10576 10576 1
+1 10577 1
+10577 10577 1
+1 10578 1
+10578 10578 1
+1 10579 1
+10579 10579 1
+1 10580 1
+10580 10580 1
+1 10581 1
+10581 10581 1
+1 10582 1
+10582 10582 1
+1 10583 1
+10583 10583 1
+1 10584 1
+10584 10584 1
+1 10585 1
+10585 10585 1
+1 10586 1
+10586 10586 1
+1 10587 1
+10587 10587 1
+1 10588 1
+10588 10588 1
+1 10589 1
+10589 10589 1
+1 10590 1
+10590 10590 1
+1 10591 1
+10591 10591 1
+1 10592 1
+10592 10592 1
+1 10593 1
+10593 10593 1
+1 10594 1
+10594 10594 1
+1 10595 1
+10595 10595 1
+1 10596 1
+10596 10596 1
+1 10597 1
+10597 10597 1
+1 10598 1
+10598 10598 1
+1 10599 1
+10599 10599 1
+1 10600 1
+10600 10600 1
+1 10601 1
+10601 10601 1
+1 10602 1
+10602 10602 1
+1 10603 1
+10603 10603 1
+1 10604 1
+10604 10604 1
+1 10605 1
+10605 10605 1
+1 10606 1
+10606 10606 1
+1 10607 1
+10607 10607 1
+1 10608 1
+10608 10608 1
+1 10609 1
+10609 10609 1
+1 10610 1
+10610 10610 1
+1 10611 1
+10611 10611 1
+1 10612 1
+10612 10612 1
+1 10613 1
+10613 10613 1
+1 10614 1
+10614 10614 1
+1 10615 1
+10615 10615 1
+1 10616 1
+10616 10616 1
+1 10617 1
+10617 10617 1
+1 10618 1
+10618 10618 1
+1 10619 1
+10619 10619 1
+1 10620 1
+10620 10620 1
+1 10621 1
+10621 10621 1
+1 10622 1
+10622 10622 1
+1 10623 1
+10623 10623 1
+1 10624 1
+10624 10624 1
+1 10625 1
+10625 10625 1
+1 10626 1
+10626 10626 1
+1 10627 1
+10627 10627 1
+1 10628 1
+10628 10628 1
+1 10629 1
+10629 10629 1
+1 10630 1
+10630 10630 1
+1 10631 1
+10631 10631 1
+1 10632 1
+10632 10632 1
+1 10633 1
+10633 10633 1
+1 10634 1
+10634 10634 1
+1 10635 1
+10635 10635 1
+1 10636 1
+10636 10636 1
+1 10637 1
+10637 10637 1
+1 10638 1
+10638 10638 1
+1 10639 1
+10639 10639 1
+1 10640 1
+10640 10640 1
+1 10641 1
+10641 10641 1
+1 10642 1
+10642 10642 1
+1 10643 1
+10643 10643 1
+1 10644 1
+10644 10644 1
+1 10645 1
+10645 10645 1
+1 10646 1
+10646 10646 1
+1 10647 1
+10647 10647 1
+1 10648 1
+10648 10648 1
+1 10649 1
+10649 10649 1
+1 10650 1
+10650 10650 1
+1 10651 1
+10651 10651 1
+1 10652 1
+10652 10652 1
+1 10653 1
+10653 10653 1
+1 10654 1
+10654 10654 1
+1 10655 1
+10655 10655 1
+1 10656 1
+10656 10656 1
+1 10657 1
+10657 10657 1
+1 10658 1
+10658 10658 1
+1 10659 1
+10659 10659 1
+1 10660 1
+10660 10660 1
+1 10661 1
+10661 10661 1
+1 10662 1
+10662 10662 1
+1 10663 1
+10663 10663 1
+1 10664 1
+10664 10664 1
+1 10665 1
+10665 10665 1
+1 10666 1
+10666 10666 1
+1 10667 1
+10667 10667 1
+1 10668 1
+10668 10668 1
+1 10669 1
+10669 10669 1
+1 10670 1
+10670 10670 1
+1 10671 1
+10671 10671 1
+1 10672 1
+10672 10672 1
+1 10673 1
+10673 10673 1
+1 10674 1
+10674 10674 1
+1 10675 1
+10675 10675 1
+1 10676 1
+10676 10676 1
+1 10677 1
+10677 10677 1
+1 10678 1
+10678 10678 1
+1 10679 1
+10679 10679 1
+1 10680 1
+10680 10680 1
+1 10681 1
+10681 10681 1
+1 10682 1
+10682 10682 1
+1 10683 1
+10683 10683 1
+1 10684 1
+10684 10684 1
+1 10685 1
+10685 10685 1
+1 10686 1
+10686 10686 1
+1 10687 1
+10687 10687 1
+1 10688 1
+10688 10688 1
+1 10689 1
+10689 10689 1
+1 10690 1
+10690 10690 1
+1 10691 1
+10691 10691 1
+1 10692 1
+10692 10692 1
+1 10693 1
+10693 10693 1
+1 10694 1
+10694 10694 1
+1 10695 1
+10695 10695 1
+1 10696 1
+10696 10696 1
+1 10697 1
+10697 10697 1
+1 10698 1
+10698 10698 1
+1 10699 1
+10699 10699 1
+1 10700 1
+10700 10700 1
+1 10701 1
+10701 10701 1
+1 10702 1
+10702 10702 1
+1 10703 1
+10703 10703 1
+1 10704 1
+10704 10704 1
+1 10705 1
+10705 10705 1
+1 10706 1
+10706 10706 1
+1 10707 1
+10707 10707 1
+1 10708 1
+10708 10708 1
+1 10709 1
+10709 10709 1
+1 10710 1
+10710 10710 1
+1 10711 1
+10711 10711 1
+1 10712 1
+10712 10712 1
+1 10713 1
+10713 10713 1
+1 10714 1
+10714 10714 1
+1 10715 1
+10715 10715 1
+1 10716 1
+10716 10716 1
+1 10717 1
+10717 10717 1
+1 10718 1
+10718 10718 1
+1 10719 1
+10719 10719 1
+1 10720 1
+10720 10720 1
+1 10721 1
+10721 10721 1
+1 10722 1
+10722 10722 1
+1 10723 1
+10723 10723 1
+1 10724 1
+10724 10724 1
+1 10725 1
+10725 10725 1
+1 10726 1
+10726 10726 1
+1 10727 1
+10727 10727 1
+1 10728 1
+10728 10728 1
+1 10729 1
+10729 10729 1
+1 10730 1
+10730 10730 1
+1 10731 1
+10731 10731 1
+1 10732 1
+10732 10732 1
+1 10733 1
+10733 10733 1
+1 10734 1
+10734 10734 1
+1 10735 1
+10735 10735 1
+1 10736 1
+10736 10736 1
+1 10737 1
+10737 10737 1
+1 10738 1
+10738 10738 1
+1 10739 1
+10739 10739 1
+1 10740 1
+10740 10740 1
+1 10741 1
+10741 10741 1
+1 10742 1
+10742 10742 1
+1 10743 1
+10743 10743 1
+1 10744 1
+10744 10744 1
+1 10745 1
+10745 10745 1
+1 10746 1
+10746 10746 1
+1 10747 1
+10747 10747 1
+1 10748 1
+10748 10748 1
+1 10749 1
+10749 10749 1
+1 10750 1
+10750 10750 1
+1 10751 1
+10751 10751 1
+1 10752 1
+10752 10752 1
+1 10753 1
+10753 10753 1
+1 10754 1
+10754 10754 1
+1 10755 1
+10755 10755 1
+1 10756 1
+10756 10756 1
+1 10757 1
+10757 10757 1
+1 10758 1
+10758 10758 1
+1 10759 1
+10759 10759 1
+1 10760 1
+10760 10760 1
+1 10761 1
+10761 10761 1
+1 10762 1
+10762 10762 1
+1 10763 1
+10763 10763 1
+1 10764 1
+10764 10764 1
+1 10765 1
+10765 10765 1
+1 10766 1
+10766 10766 1
+1 10767 1
+10767 10767 1
+1 10768 1
+10768 10768 1
+1 10769 1
+10769 10769 1
+1 10770 1
+10770 10770 1
+1 10771 1
+10771 10771 1
+1 10772 1
+10772 10772 1
+1 10773 1
+10773 10773 1
+1 10774 1
+10774 10774 1
+1 10775 1
+10775 10775 1
+1 10776 1
+10776 10776 1
+1 10777 1
+10777 10777 1
+1 10778 1
+10778 10778 1
+1 10779 1
+10779 10779 1
+1 10780 1
+10780 10780 1
+1 10781 1
+10781 10781 1
+1 10782 1
+10782 10782 1
+1 10783 1
+10783 10783 1
+1 10784 1
+10784 10784 1
+1 10785 1
+10785 10785 1
+1 10786 1
+10786 10786 1
+1 10787 1
+10787 10787 1
+1 10788 1
+10788 10788 1
+1 10789 1
+10789 10789 1
+1 10790 1
+10790 10790 1
+1 10791 1
+10791 10791 1
+1 10792 1
+10792 10792 1
+1 10793 1
+10793 10793 1
+1 10794 1
+10794 10794 1
+1 10795 1
+10795 10795 1
+1 10796 1
+10796 10796 1
+1 10797 1
+10797 10797 1
+1 10798 1
+10798 10798 1
+1 10799 1
+10799 10799 1
+1 10800 1
+10800 10800 1
+1 10801 1
+10801 10801 1
+1 10802 1
+10802 10802 1
+1 10803 1
+10803 10803 1
+1 10804 1
+10804 10804 1
+1 10805 1
+10805 10805 1
+1 10806 1
+10806 10806 1
+1 10807 1
+10807 10807 1
+1 10808 1
+10808 10808 1
+1 10809 1
+10809 10809 1
+1 10810 1
+10810 10810 1
+1 10811 1
+10811 10811 1
+1 10812 1
+10812 10812 1
+1 10813 1
+10813 10813 1
+1 10814 1
+10814 10814 1
+1 10815 1
+10815 10815 1
+1 10816 1
+10816 10816 1
+1 10817 1
+10817 10817 1
+1 10818 1
+10818 10818 1
+1 10819 1
+10819 10819 1
+1 10820 1
+10820 10820 1
+1 10821 1
+10821 10821 1
+1 10822 1
+10822 10822 1
+1 10823 1
+10823 10823 1
+1 10824 1
+10824 10824 1
+1 10825 1
+10825 10825 1
+1 10826 1
+10826 10826 1
+1 10827 1
+10827 10827 1
+1 10828 1
+10828 10828 1
+1 10829 1
+10829 10829 1
+1 10830 1
+10830 10830 1
+1 10831 1
+10831 10831 1
+1 10832 1
+10832 10832 1
+1 10833 1
+10833 10833 1
+1 10834 1
+10834 10834 1
+1 10835 1
+10835 10835 1
+1 10836 1
+10836 10836 1
+1 10837 1
+10837 10837 1
+1 10838 1
+10838 10838 1
+1 10839 1
+10839 10839 1
+1 10840 1
+10840 10840 1
+1 10841 1
+10841 10841 1
+1 10842 1
+10842 10842 1
+1 10843 1
+10843 10843 1
+1 10844 1
+10844 10844 1
+1 10845 1
+10845 10845 1
+1 10846 1
+10846 10846 1
+1 10847 1
+10847 10847 1
+1 10848 1
+10848 10848 1
+1 10849 1
+10849 10849 1
+1 10850 1
+10850 10850 1
+1 10851 1
+10851 10851 1
+1 10852 1
+10852 10852 1
+1 10853 1
+10853 10853 1
+1 10854 1
+10854 10854 1
+1 10855 1
+10855 10855 1
+1 10856 1
+10856 10856 1
+1 10857 1
+10857 10857 1
+1 10858 1
+10858 10858 1
+1 10859 1
+10859 10859 1
+1 10860 1
+10860 10860 1
+1 10861 1
+10861 10861 1
+1 10862 1
+10862 10862 1
+1 10863 1
+10863 10863 1
+1 10864 1
+10864 10864 1
+1 10865 1
+10865 10865 1
+1 10866 1
+10866 10866 1
+1 10867 1
+10867 10867 1
+1 10868 1
+10868 10868 1
+1 10869 1
+10869 10869 1
+1 10870 1
+10870 10870 1
+1 10871 1
+10871 10871 1
+1 10872 1
+10872 10872 1
+1 10873 1
+10873 10873 1
+1 10874 1
+10874 10874 1
+1 10875 1
+10875 10875 1
+1 10876 1
+10876 10876 1
+1 10877 1
+10877 10877 1
+1 10878 1
+10878 10878 1
+1 10879 1
+10879 10879 1
+1 10880 1
+10880 10880 1
+1 10881 1
+10881 10881 1
+1 10882 1
+10882 10882 1
+1 10883 1
+10883 10883 1
+1 10884 1
+10884 10884 1
+1 10885 1
+10885 10885 1
+1 10886 1
+10886 10886 1
+1 10887 1
+10887 10887 1
+1 10888 1
+10888 10888 1
+1 10889 1
+10889 10889 1
+1 10890 1
+10890 10890 1
+1 10891 1
+10891 10891 1
+1 10892 1
+10892 10892 1
+1 10893 1
+10893 10893 1
+1 10894 1
+10894 10894 1
+1 10895 1
+10895 10895 1
+1 10896 1
+10896 10896 1
+1 10897 1
+10897 10897 1
+1 10898 1
+10898 10898 1
+1 10899 1
+10899 10899 1
+1 10900 1
+10900 10900 1
+1 10901 1
+10901 10901 1
+1 10902 1
+10902 10902 1
+1 10903 1
+10903 10903 1
+1 10904 1
+10904 10904 1
+1 10905 1
+10905 10905 1
+1 10906 1
+10906 10906 1
+1 10907 1
+10907 10907 1
+1 10908 1
+10908 10908 1
+1 10909 1
+10909 10909 1
+1 10910 1
+10910 10910 1
+1 10911 1
+10911 10911 1
+1 10912 1
+10912 10912 1
+1 10913 1
+10913 10913 1
+1 10914 1
+10914 10914 1
+1 10915 1
+10915 10915 1
+1 10916 1
+10916 10916 1
+1 10917 1
+10917 10917 1
+1 10918 1
+10918 10918 1
+1 10919 1
+10919 10919 1
+1 10920 1
+10920 10920 1
+1 10921 1
+10921 10921 1
+1 10922 1
+10922 10922 1
+1 10923 1
+10923 10923 1
+1 10924 1
+10924 10924 1
+1 10925 1
+10925 10925 1
+1 10926 1
+10926 10926 1
+1 10927 1
+10927 10927 1
+1 10928 1
+10928 10928 1
+1 10929 1
+10929 10929 1
+1 10930 1
+10930 10930 1
+1 10931 1
+10931 10931 1
+1 10932 1
+10932 10932 1
+1 10933 1
+10933 10933 1
+1 10934 1
+10934 10934 1
+1 10935 1
+10935 10935 1
+1 10936 1
+10936 10936 1
+1 10937 1
+10937 10937 1
+1 10938 1
+10938 10938 1
+1 10939 1
+10939 10939 1
+1 10940 1
+10940 10940 1
+1 10941 1
+10941 10941 1
+1 10942 1
+10942 10942 1
+1 10943 1
+10943 10943 1
+1 10944 1
+10944 10944 1
+1 10945 1
+10945 10945 1
+1 10946 1
+10946 10946 1
+1 10947 1
+10947 10947 1
+1 10948 1
+10948 10948 1
+1 10949 1
+10949 10949 1
+1 10950 1
+10950 10950 1
+1 10951 1
+10951 10951 1
+1 10952 1
+10952 10952 1
+1 10953 1
+10953 10953 1
+1 10954 1
+10954 10954 1
+1 10955 1
+10955 10955 1
+1 10956 1
+10956 10956 1
+1 10957 1
+10957 10957 1
+1 10958 1
+10958 10958 1
+1 10959 1
+10959 10959 1
+1 10960 1
+10960 10960 1
+1 10961 1
+10961 10961 1
+1 10962 1
+10962 10962 1
+1 10963 1
+10963 10963 1
+1 10964 1
+10964 10964 1
+1 10965 1
+10965 10965 1
+1 10966 1
+10966 10966 1
+1 10967 1
+10967 10967 1
+1 10968 1
+10968 10968 1
+1 10969 1
+10969 10969 1
+1 10970 1
+10970 10970 1
+1 10971 1
+10971 10971 1
+1 10972 1
+10972 10972 1
+1 10973 1
+10973 10973 1
+1 10974 1
+10974 10974 1
+1 10975 1
+10975 10975 1
+1 10976 1
+10976 10976 1
+1 10977 1
+10977 10977 1
+1 10978 1
+10978 10978 1
+1 10979 1
+10979 10979 1
+1 10980 1
+10980 10980 1
+1 10981 1
+10981 10981 1
+1 10982 1
+10982 10982 1
+1 10983 1
+10983 10983 1
+1 10984 1
+10984 10984 1
+1 10985 1
+10985 10985 1
+1 10986 1
+10986 10986 1
+1 10987 1
+10987 10987 1
+1 10988 1
+10988 10988 1
+1 10989 1
+10989 10989 1
+1 10990 1
+10990 10990 1
+1 10991 1
+10991 10991 1
+1 10992 1
+10992 10992 1
+1 10993 1
+10993 10993 1
+1 10994 1
+10994 10994 1
+1 10995 1
+10995 10995 1
+1 10996 1
+10996 10996 1
+1 10997 1
+10997 10997 1
+1 10998 1
+10998 10998 1
+1 10999 1
+10999 10999 1
+1 11000 1
+11000 11000 1
+1 11001 1
+11001 11001 1
+1 11002 1
+11002 11002 1
+1 11003 1
+11003 11003 1
+1 11004 1
+11004 11004 1
+1 11005 1
+11005 11005 1
+1 11006 1
+11006 11006 1
+1 11007 1
+11007 11007 1
+1 11008 1
+11008 11008 1
+1 11009 1
+11009 11009 1
+1 11010 1
+11010 11010 1
+1 11011 1
+11011 11011 1
+1 11012 1
+11012 11012 1
+1 11013 1
+11013 11013 1
+1 11014 1
+11014 11014 1
+1 11015 1
+11015 11015 1
+1 11016 1
+11016 11016 1
+1 11017 1
+11017 11017 1
+1 11018 1
+11018 11018 1
+1 11019 1
+11019 11019 1
+1 11020 1
+11020 11020 1
+1 11021 1
+11021 11021 1
+1 11022 1
+11022 11022 1
+1 11023 1
+11023 11023 1
+1 11024 1
+11024 11024 1
+1 11025 1
+11025 11025 1
+1 11026 1
+11026 11026 1
+1 11027 1
+11027 11027 1
+1 11028 1
+11028 11028 1
+1 11029 1
+11029 11029 1
+1 11030 1
+11030 11030 1
+1 11031 1
+11031 11031 1
+1 11032 1
+11032 11032 1
+1 11033 1
+11033 11033 1
+1 11034 1
+11034 11034 1
+1 11035 1
+11035 11035 1
+1 11036 1
+11036 11036 1
+1 11037 1
+11037 11037 1
+1 11038 1
+11038 11038 1
+1 11039 1
+11039 11039 1
+1 11040 1
+11040 11040 1
+1 11041 1
+11041 11041 1
+1 11042 1
+11042 11042 1
+1 11043 1
+11043 11043 1
+1 11044 1
+11044 11044 1
+1 11045 1
+11045 11045 1
+1 11046 1
+11046 11046 1
+1 11047 1
+11047 11047 1
+1 11048 1
+11048 11048 1
+1 11049 1
+11049 11049 1
+1 11050 1
+11050 11050 1
+1 11051 1
+11051 11051 1
+1 11052 1
+11052 11052 1
+1 11053 1
+11053 11053 1
+1 11054 1
+11054 11054 1
+1 11055 1
+11055 11055 1
+1 11056 1
+11056 11056 1
+1 11057 1
+11057 11057 1
+1 11058 1
+11058 11058 1
+1 11059 1
+11059 11059 1
+1 11060 1
+11060 11060 1
+1 11061 1
+11061 11061 1
+1 11062 1
+11062 11062 1
+1 11063 1
+11063 11063 1
+1 11064 1
+11064 11064 1
+1 11065 1
+11065 11065 1
+1 11066 1
+11066 11066 1
+1 11067 1
+11067 11067 1
+1 11068 1
+11068 11068 1
+1 11069 1
+11069 11069 1
+1 11070 1
+11070 11070 1
+1 11071 1
+11071 11071 1
+1 11072 1
+11072 11072 1
+1 11073 1
+11073 11073 1
+1 11074 1
+11074 11074 1
+1 11075 1
+11075 11075 1
+1 11076 1
+11076 11076 1
+1 11077 1
+11077 11077 1
+1 11078 1
+11078 11078 1
+1 11079 1
+11079 11079 1
+1 11080 1
+11080 11080 1
+1 11081 1
+11081 11081 1
+1 11082 1
+11082 11082 1
+1 11083 1
+11083 11083 1
+1 11084 1
+11084 11084 1
+1 11085 1
+11085 11085 1
+1 11086 1
+11086 11086 1
+1 11087 1
+11087 11087 1
+1 11088 1
+11088 11088 1
+1 11089 1
+11089 11089 1
+1 11090 1
+11090 11090 1
+1 11091 1
+11091 11091 1
+1 11092 1
+11092 11092 1
+1 11093 1
+11093 11093 1
+1 11094 1
+11094 11094 1
+1 11095 1
+11095 11095 1
+1 11096 1
+11096 11096 1
+1 11097 1
+11097 11097 1
+1 11098 1
+11098 11098 1
+1 11099 1
+11099 11099 1
+1 11100 1
+11100 11100 1
+1 11101 1
+11101 11101 1
+1 11102 1
+11102 11102 1
+1 11103 1
+11103 11103 1
+1 11104 1
+11104 11104 1
+1 11105 1
+11105 11105 1
+1 11106 1
+11106 11106 1
+1 11107 1
+11107 11107 1
+1 11108 1
+11108 11108 1
+1 11109 1
+11109 11109 1
+1 11110 1
+11110 11110 1
+1 11111 1
+11111 11111 1
+1 11112 1
+11112 11112 1
+1 11113 1
+11113 11113 1
+1 11114 1
+11114 11114 1
+1 11115 1
+11115 11115 1
+1 11116 1
+11116 11116 1
+1 11117 1
+11117 11117 1
+1 11118 1
+11118 11118 1
+1 11119 1
+11119 11119 1
+1 11120 1
+11120 11120 1
+1 11121 1
+11121 11121 1
+1 11122 1
+11122 11122 1
+1 11123 1
+11123 11123 1
+1 11124 1
+11124 11124 1
+1 11125 1
+11125 11125 1
+1 11126 1
+11126 11126 1
+1 11127 1
+11127 11127 1
+1 11128 1
+11128 11128 1
+1 11129 1
+11129 11129 1
+1 11130 1
+11130 11130 1
+1 11131 1
+11131 11131 1
+1 11132 1
+11132 11132 1
+1 11133 1
+11133 11133 1
+1 11134 1
+11134 11134 1
+1 11135 1
+11135 11135 1
+1 11136 1
+11136 11136 1
+1 11137 1
+11137 11137 1
+1 11138 1
+11138 11138 1
+1 11139 1
+11139 11139 1
+1 11140 1
+11140 11140 1
+1 11141 1
+11141 11141 1
+1 11142 1
+11142 11142 1
+1 11143 1
+11143 11143 1
+1 11144 1
+11144 11144 1
+1 11145 1
+11145 11145 1
+1 11146 1
+11146 11146 1
+1 11147 1
+11147 11147 1
+1 11148 1
+11148 11148 1
+1 11149 1
+11149 11149 1
+1 11150 1
+11150 11150 1
+1 11151 1
+11151 11151 1
+1 11152 1
+11152 11152 1
+1 11153 1
+11153 11153 1
+1 11154 1
+11154 11154 1
+1 11155 1
+11155 11155 1
+1 11156 1
+11156 11156 1
+1 11157 1
+11157 11157 1
+1 11158 1
+11158 11158 1
+1 11159 1
+11159 11159 1
+1 11160 1
+11160 11160 1
+1 11161 1
+11161 11161 1
+1 11162 1
+11162 11162 1
+1 11163 1
+11163 11163 1
+1 11164 1
+11164 11164 1
+1 11165 1
+11165 11165 1
+1 11166 1
+11166 11166 1
+1 11167 1
+11167 11167 1
+1 11168 1
+11168 11168 1
+1 11169 1
+11169 11169 1
+1 11170 1
+11170 11170 1
+1 11171 1
+11171 11171 1
+1 11172 1
+11172 11172 1
+1 11173 1
+11173 11173 1
+1 11174 1
+11174 11174 1
+1 11175 1
+11175 11175 1
+1 11176 1
+11176 11176 1
+1 11177 1
+11177 11177 1
+1 11178 1
+11178 11178 1
+1 11179 1
+11179 11179 1
+1 11180 1
+11180 11180 1
+1 11181 1
+11181 11181 1
+1 11182 1
+11182 11182 1
+1 11183 1
+11183 11183 1
+1 11184 1
+11184 11184 1
+1 11185 1
+11185 11185 1
+1 11186 1
+11186 11186 1
+1 11187 1
+11187 11187 1
+1 11188 1
+11188 11188 1
+1 11189 1
+11189 11189 1
+1 11190 1
+11190 11190 1
+1 11191 1
+11191 11191 1
+1 11192 1
+11192 11192 1
+1 11193 1
+11193 11193 1
+1 11194 1
+11194 11194 1
+1 11195 1
+11195 11195 1
+1 11196 1
+11196 11196 1
+1 11197 1
+11197 11197 1
+1 11198 1
+11198 11198 1
+1 11199 1
+11199 11199 1
+1 11200 1
+11200 11200 1
+1 11201 1
+11201 11201 1
+1 11202 1
+11202 11202 1
+1 11203 1
+11203 11203 1
+1 11204 1
+11204 11204 1
+1 11205 1
+11205 11205 1
+1 11206 1
+11206 11206 1
+1 11207 1
+11207 11207 1
+1 11208 1
+11208 11208 1
+1 11209 1
+11209 11209 1
+1 11210 1
+11210 11210 1
+1 11211 1
+11211 11211 1
+1 11212 1
+11212 11212 1
+1 11213 1
+11213 11213 1
+1 11214 1
+11214 11214 1
+1 11215 1
+11215 11215 1
+1 11216 1
+11216 11216 1
+1 11217 1
+11217 11217 1
+1 11218 1
+11218 11218 1
+1 11219 1
+11219 11219 1
+1 11220 1
+11220 11220 1
+1 11221 1
+11221 11221 1
+1 11222 1
+11222 11222 1
+1 11223 1
+11223 11223 1
+1 11224 1
+11224 11224 1
+1 11225 1
+11225 11225 1
+1 11226 1
+11226 11226 1
+1 11227 1
+11227 11227 1
+1 11228 1
+11228 11228 1
+1 11229 1
+11229 11229 1
+1 11230 1
+11230 11230 1
+1 11231 1
+11231 11231 1
+1 11232 1
+11232 11232 1
+1 11233 1
+11233 11233 1
+1 11234 1
+11234 11234 1
+1 11235 1
+11235 11235 1
+1 11236 1
+11236 11236 1
+1 11237 1
+11237 11237 1
+1 11238 1
+11238 11238 1
+1 11239 1
+11239 11239 1
+1 11240 1
+11240 11240 1
+1 11241 1
+11241 11241 1
+1 11242 1
+11242 11242 1
+1 11243 1
+11243 11243 1
+1 11244 1
+11244 11244 1
+1 11245 1
+11245 11245 1
+1 11246 1
+11246 11246 1
+1 11247 1
+11247 11247 1
+1 11248 1
+11248 11248 1
+1 11249 1
+11249 11249 1
+1 11250 1
+11250 11250 1
+1 11251 1
+11251 11251 1
+1 11252 1
+11252 11252 1
+1 11253 1
+11253 11253 1
+1 11254 1
+11254 11254 1
+1 11255 1
+11255 11255 1
+1 11256 1
+11256 11256 1
+1 11257 1
+11257 11257 1
+1 11258 1
+11258 11258 1
+1 11259 1
+11259 11259 1
+1 11260 1
+11260 11260 1
+1 11261 1
+11261 11261 1
+1 11262 1
+11262 11262 1
+1 11263 1
+11263 11263 1
+1 11264 1
+11264 11264 1
+1 11265 1
+11265 11265 1
+1 11266 1
+11266 11266 1
+1 11267 1
+11267 11267 1
+1 11268 1
+11268 11268 1
+1 11269 1
+11269 11269 1
+1 11270 1
+11270 11270 1
+1 11271 1
+11271 11271 1
+1 11272 1
+11272 11272 1
+1 11273 1
+11273 11273 1
+1 11274 1
+11274 11274 1
+1 11275 1
+11275 11275 1
+1 11276 1
+11276 11276 1
+1 11277 1
+11277 11277 1
+1 11278 1
+11278 11278 1
+1 11279 1
+11279 11279 1
+1 11280 1
+11280 11280 1
+1 11281 1
+11281 11281 1
+1 11282 1
+11282 11282 1
+1 11283 1
+11283 11283 1
+1 11284 1
+11284 11284 1
+1 11285 1
+11285 11285 1
+1 11286 1
+11286 11286 1
+1 11287 1
+11287 11287 1
+1 11288 1
+11288 11288 1
+1 11289 1
+11289 11289 1
+1 11290 1
+11290 11290 1
+1 11291 1
+11291 11291 1
+1 11292 1
+11292 11292 1
+1 11293 1
+11293 11293 1
+1 11294 1
+11294 11294 1
+1 11295 1
+11295 11295 1
+1 11296 1
+11296 11296 1
+1 11297 1
+11297 11297 1
+1 11298 1
+11298 11298 1
+1 11299 1
+11299 11299 1
+1 11300 1
+11300 11300 1
+1 11301 1
+11301 11301 1
+1 11302 1
+11302 11302 1
+1 11303 1
+11303 11303 1
+1 11304 1
+11304 11304 1
+1 11305 1
+11305 11305 1
+1 11306 1
+11306 11306 1
+1 11307 1
+11307 11307 1
+1 11308 1
+11308 11308 1
+1 11309 1
+11309 11309 1
+1 11310 1
+11310 11310 1
+1 11311 1
+11311 11311 1
+1 11312 1
+11312 11312 1
+1 11313 1
+11313 11313 1
+1 11314 1
+11314 11314 1
+1 11315 1
+11315 11315 1
+1 11316 1
+11316 11316 1
+1 11317 1
+11317 11317 1
+1 11318 1
+11318 11318 1
+1 11319 1
+11319 11319 1
+1 11320 1
+11320 11320 1
+1 11321 1
+11321 11321 1
+1 11322 1
+11322 11322 1
+1 11323 1
+11323 11323 1
+1 11324 1
+11324 11324 1
+1 11325 1
+11325 11325 1
+1 11326 1
+11326 11326 1
+1 11327 1
+11327 11327 1
+1 11328 1
+11328 11328 1
+1 11329 1
+11329 11329 1
+1 11330 1
+11330 11330 1
+1 11331 1
+11331 11331 1
+1 11332 1
+11332 11332 1
+1 11333 1
+11333 11333 1
+1 11334 1
+11334 11334 1
+1 11335 1
+11335 11335 1
+1 11336 1
+11336 11336 1
+1 11337 1
+11337 11337 1
+1 11338 1
+11338 11338 1
+1 11339 1
+11339 11339 1
+1 11340 1
+11340 11340 1
+1 11341 1
+11341 11341 1
+1 11342 1
+11342 11342 1
+1 11343 1
+11343 11343 1
+1 11344 1
+11344 11344 1
+1 11345 1
+11345 11345 1
+1 11346 1
+11346 11346 1
+1 11347 1
+11347 11347 1
+1 11348 1
+11348 11348 1
+1 11349 1
+11349 11349 1
+1 11350 1
+11350 11350 1
+1 11351 1
+11351 11351 1
+1 11352 1
+11352 11352 1
+1 11353 1
+11353 11353 1
+1 11354 1
+11354 11354 1
+1 11355 1
+11355 11355 1
+1 11356 1
+11356 11356 1
+1 11357 1
+11357 11357 1
+1 11358 1
+11358 11358 1
+1 11359 1
+11359 11359 1
+1 11360 1
+11360 11360 1
+1 11361 1
+11361 11361 1
+1 11362 1
+11362 11362 1
+1 11363 1
+11363 11363 1
+1 11364 1
+11364 11364 1
+1 11365 1
+11365 11365 1
+1 11366 1
+11366 11366 1
+1 11367 1
+11367 11367 1
+1 11368 1
+11368 11368 1
+1 11369 1
+11369 11369 1
+1 11370 1
+11370 11370 1
+1 11371 1
+11371 11371 1
+1 11372 1
+11372 11372 1
+1 11373 1
+11373 11373 1
+1 11374 1
+11374 11374 1
+1 11375 1
+11375 11375 1
+1 11376 1
+11376 11376 1
+1 11377 1
+11377 11377 1
+1 11378 1
+11378 11378 1
+1 11379 1
+11379 11379 1
+1 11380 1
+11380 11380 1
+1 11381 1
+11381 11381 1
+1 11382 1
+11382 11382 1
+1 11383 1
+11383 11383 1
+1 11384 1
+11384 11384 1
+1 11385 1
+11385 11385 1
+1 11386 1
+11386 11386 1
+1 11387 1
+11387 11387 1
+1 11388 1
+11388 11388 1
+1 11389 1
+11389 11389 1
+1 11390 1
+11390 11390 1
+1 11391 1
+11391 11391 1
+1 11392 1
+11392 11392 1
+1 11393 1
+11393 11393 1
+1 11394 1
+11394 11394 1
+1 11395 1
+11395 11395 1
+1 11396 1
+11396 11396 1
+1 11397 1
+11397 11397 1
+1 11398 1
+11398 11398 1
+1 11399 1
+11399 11399 1
+1 11400 1
+11400 11400 1
+1 11401 1
+11401 11401 1
+1 11402 1
+11402 11402 1
+1 11403 1
+11403 11403 1
+1 11404 1
+11404 11404 1
+1 11405 1
+11405 11405 1
+1 11406 1
+11406 11406 1
+1 11407 1
+11407 11407 1
+1 11408 1
+11408 11408 1
+1 11409 1
+11409 11409 1
+1 11410 1
+11410 11410 1
+1 11411 1
+11411 11411 1
+1 11412 1
+11412 11412 1
+1 11413 1
+11413 11413 1
+1 11414 1
+11414 11414 1
+1 11415 1
+11415 11415 1
+1 11416 1
+11416 11416 1
+1 11417 1
+11417 11417 1
+1 11418 1
+11418 11418 1
+1 11419 1
+11419 11419 1
+1 11420 1
+11420 11420 1
+1 11421 1
+11421 11421 1
+1 11422 1
+11422 11422 1
+1 11423 1
+11423 11423 1
+1 11424 1
+11424 11424 1
+1 11425 1
+11425 11425 1
+1 11426 1
+11426 11426 1
+1 11427 1
+11427 11427 1
+1 11428 1
+11428 11428 1
+1 11429 1
+11429 11429 1
+1 11430 1
+11430 11430 1
+1 11431 1
+11431 11431 1
+1 11432 1
+11432 11432 1
+1 11433 1
+11433 11433 1
+1 11434 1
+11434 11434 1
+1 11435 1
+11435 11435 1
+1 11436 1
+11436 11436 1
+1 11437 1
+11437 11437 1
+1 11438 1
+11438 11438 1
+1 11439 1
+11439 11439 1
+1 11440 1
+11440 11440 1
+1 11441 1
+11441 11441 1
+1 11442 1
+11442 11442 1
+1 11443 1
+11443 11443 1
+1 11444 1
+11444 11444 1
+1 11445 1
+11445 11445 1
+1 11446 1
+11446 11446 1
+1 11447 1
+11447 11447 1
+1 11448 1
+11448 11448 1
+1 11449 1
+11449 11449 1
+1 11450 1
+11450 11450 1
+1 11451 1
+11451 11451 1
+1 11452 1
+11452 11452 1
+1 11453 1
+11453 11453 1
+1 11454 1
+11454 11454 1
+1 11455 1
+11455 11455 1
+1 11456 1
+11456 11456 1
+1 11457 1
+11457 11457 1
+1 11458 1
+11458 11458 1
+1 11459 1
+11459 11459 1
+1 11460 1
+11460 11460 1
+1 11461 1
+11461 11461 1
+1 11462 1
+11462 11462 1
+1 11463 1
+11463 11463 1
+1 11464 1
+11464 11464 1
+1 11465 1
+11465 11465 1
+1 11466 1
+11466 11466 1
+1 11467 1
+11467 11467 1
+1 11468 1
+11468 11468 1
+1 11469 1
+11469 11469 1
+1 11470 1
+11470 11470 1
+1 11471 1
+11471 11471 1
+1 11472 1
+11472 11472 1
+1 11473 1
+11473 11473 1
+1 11474 1
+11474 11474 1
+1 11475 1
+11475 11475 1
+1 11476 1
+11476 11476 1
+1 11477 1
+11477 11477 1
+1 11478 1
+11478 11478 1
+1 11479 1
+11479 11479 1
+1 11480 1
+11480 11480 1
+1 11481 1
+11481 11481 1
+1 11482 1
+11482 11482 1
+1 11483 1
+11483 11483 1
+1 11484 1
+11484 11484 1
+1 11485 1
+11485 11485 1
+1 11486 1
+11486 11486 1
+1 11487 1
+11487 11487 1
+1 11488 1
+11488 11488 1
+1 11489 1
+11489 11489 1
+1 11490 1
+11490 11490 1
+1 11491 1
+11491 11491 1
+1 11492 1
+11492 11492 1
+1 11493 1
+11493 11493 1
+1 11494 1
+11494 11494 1
+1 11495 1
+11495 11495 1
+1 11496 1
+11496 11496 1
+1 11497 1
+11497 11497 1
+1 11498 1
+11498 11498 1
+1 11499 1
+11499 11499 1
+1 11500 1
+11500 11500 1
+1 11501 1
+11501 11501 1
+1 11502 1
+11502 11502 1
+1 11503 1
+11503 11503 1
+1 11504 1
+11504 11504 1
+1 11505 1
+11505 11505 1
+1 11506 1
+11506 11506 1
+1 11507 1
+11507 11507 1
+1 11508 1
+11508 11508 1
+1 11509 1
+11509 11509 1
+1 11510 1
+11510 11510 1
+1 11511 1
+11511 11511 1
+1 11512 1
+11512 11512 1
+1 11513 1
+11513 11513 1
+1 11514 1
+11514 11514 1
+1 11515 1
+11515 11515 1
+1 11516 1
+11516 11516 1
+1 11517 1
+11517 11517 1
+1 11518 1
+11518 11518 1
+1 11519 1
+11519 11519 1
+1 11520 1
+11520 11520 1
+1 11521 1
+11521 11521 1
+1 11522 1
+11522 11522 1
+1 11523 1
+11523 11523 1
+1 11524 1
+11524 11524 1
+1 11525 1
+11525 11525 1
+1 11526 1
+11526 11526 1
+1 11527 1
+11527 11527 1
+1 11528 1
+11528 11528 1
+1 11529 1
+11529 11529 1
+1 11530 1
+11530 11530 1
+1 11531 1
+11531 11531 1
+1 11532 1
+11532 11532 1
+1 11533 1
+11533 11533 1
+1 11534 1
+11534 11534 1
+1 11535 1
+11535 11535 1
+1 11536 1
+11536 11536 1
+1 11537 1
+11537 11537 1
+1 11538 1
+11538 11538 1
+1 11539 1
+11539 11539 1
+1 11540 1
+11540 11540 1
+1 11541 1
+11541 11541 1
+1 11542 1
+11542 11542 1
+1 11543 1
+11543 11543 1
+1 11544 1
+11544 11544 1
+1 11545 1
+11545 11545 1
+1 11546 1
+11546 11546 1
+1 11547 1
+11547 11547 1
+1 11548 1
+11548 11548 1
+1 11549 1
+11549 11549 1
+1 11550 1
+11550 11550 1
+1 11551 1
+11551 11551 1
+1 11552 1
+11552 11552 1
+1 11553 1
+11553 11553 1
+1 11554 1
+11554 11554 1
+1 11555 1
+11555 11555 1
+1 11556 1
+11556 11556 1
+1 11557 1
+11557 11557 1
+1 11558 1
+11558 11558 1
+1 11559 1
+11559 11559 1
+1 11560 1
+11560 11560 1
+1 11561 1
+11561 11561 1
+1 11562 1
+11562 11562 1
+1 11563 1
+11563 11563 1
+1 11564 1
+11564 11564 1
+1 11565 1
+11565 11565 1
+1 11566 1
+11566 11566 1
+1 11567 1
+11567 11567 1
+1 11568 1
+11568 11568 1
+1 11569 1
+11569 11569 1
+1 11570 1
+11570 11570 1
+1 11571 1
+11571 11571 1
+1 11572 1
+11572 11572 1
+1 11573 1
+11573 11573 1
+1 11574 1
+11574 11574 1
+1 11575 1
+11575 11575 1
+1 11576 1
+11576 11576 1
+1 11577 1
+11577 11577 1
+1 11578 1
+11578 11578 1
+1 11579 1
+11579 11579 1
+1 11580 1
+11580 11580 1
+1 11581 1
+11581 11581 1
+1 11582 1
+11582 11582 1
+1 11583 1
+11583 11583 1
+1 11584 1
+11584 11584 1
+1 11585 1
+11585 11585 1
+1 11586 1
+11586 11586 1
+1 11587 1
+11587 11587 1
+1 11588 1
+11588 11588 1
+1 11589 1
+11589 11589 1
+1 11590 1
+11590 11590 1
+1 11591 1
+11591 11591 1
+1 11592 1
+11592 11592 1
+1 11593 1
+11593 11593 1
+1 11594 1
+11594 11594 1
+1 11595 1
+11595 11595 1
+1 11596 1
+11596 11596 1
+1 11597 1
+11597 11597 1
+1 11598 1
+11598 11598 1
+1 11599 1
+11599 11599 1
+1 11600 1
+11600 11600 1
+1 11601 1
+11601 11601 1
+1 11602 1
+11602 11602 1
+1 11603 1
+11603 11603 1
+1 11604 1
+11604 11604 1
+1 11605 1
+11605 11605 1
+1 11606 1
+11606 11606 1
+1 11607 1
+11607 11607 1
+1 11608 1
+11608 11608 1
+1 11609 1
+11609 11609 1
+1 11610 1
+11610 11610 1
+1 11611 1
+11611 11611 1
+1 11612 1
+11612 11612 1
+1 11613 1
+11613 11613 1
+1 11614 1
+11614 11614 1
+1 11615 1
+11615 11615 1
+1 11616 1
+11616 11616 1
+1 11617 1
+11617 11617 1
+1 11618 1
+11618 11618 1
+1 11619 1
+11619 11619 1
+1 11620 1
+11620 11620 1
+1 11621 1
+11621 11621 1
+1 11622 1
+11622 11622 1
+1 11623 1
+11623 11623 1
+1 11624 1
+11624 11624 1
+1 11625 1
+11625 11625 1
+1 11626 1
+11626 11626 1
+1 11627 1
+11627 11627 1
+1 11628 1
+11628 11628 1
+1 11629 1
+11629 11629 1
+1 11630 1
+11630 11630 1
+1 11631 1
+11631 11631 1
+1 11632 1
+11632 11632 1
+1 11633 1
+11633 11633 1
+1 11634 1
+11634 11634 1
+1 11635 1
+11635 11635 1
+1 11636 1
+11636 11636 1
+1 11637 1
+11637 11637 1
+1 11638 1
+11638 11638 1
+1 11639 1
+11639 11639 1
+1 11640 1
+11640 11640 1
+1 11641 1
+11641 11641 1
+1 11642 1
+11642 11642 1
+1 11643 1
+11643 11643 1
+1 11644 1
+11644 11644 1
+1 11645 1
+11645 11645 1
+1 11646 1
+11646 11646 1
+1 11647 1
+11647 11647 1
+1 11648 1
+11648 11648 1
+1 11649 1
+11649 11649 1
+1 11650 1
+11650 11650 1
+1 11651 1
+11651 11651 1
+1 11652 1
+11652 11652 1
+1 11653 1
+11653 11653 1
+1 11654 1
+11654 11654 1
+1 11655 1
+11655 11655 1
+1 11656 1
+11656 11656 1
+1 11657 1
+11657 11657 1
+1 11658 1
+11658 11658 1
+1 11659 1
+11659 11659 1
+1 11660 1
+11660 11660 1
+1 11661 1
+11661 11661 1
+1 11662 1
+11662 11662 1
+1 11663 1
+11663 11663 1
+1 11664 1
+11664 11664 1
+1 11665 1
+11665 11665 1
+1 11666 1
+11666 11666 1
+1 11667 1
+11667 11667 1
+1 11668 1
+11668 11668 1
+1 11669 1
+11669 11669 1
+1 11670 1
+11670 11670 1
+1 11671 1
+11671 11671 1
+1 11672 1
+11672 11672 1
+1 11673 1
+11673 11673 1
+1 11674 1
+11674 11674 1
+1 11675 1
+11675 11675 1
+1 11676 1
+11676 11676 1
+1 11677 1
+11677 11677 1
+1 11678 1
+11678 11678 1
+1 11679 1
+11679 11679 1
+1 11680 1
+11680 11680 1
+1 11681 1
+11681 11681 1
+1 11682 1
+11682 11682 1
+1 11683 1
+11683 11683 1
+1 11684 1
+11684 11684 1
+1 11685 1
+11685 11685 1
+1 11686 1
+11686 11686 1
+1 11687 1
+11687 11687 1
+1 11688 1
+11688 11688 1
+1 11689 1
+11689 11689 1
+1 11690 1
+11690 11690 1
+1 11691 1
+11691 11691 1
+1 11692 1
+11692 11692 1
+1 11693 1
+11693 11693 1
+1 11694 1
+11694 11694 1
+1 11695 1
+11695 11695 1
+1 11696 1
+11696 11696 1
+1 11697 1
+11697 11697 1
+1 11698 1
+11698 11698 1
+1 11699 1
+11699 11699 1
+1 11700 1
+11700 11700 1
+1 11701 1
+11701 11701 1
+1 11702 1
+11702 11702 1
+1 11703 1
+11703 11703 1
+1 11704 1
+11704 11704 1
+1 11705 1
+11705 11705 1
+1 11706 1
+11706 11706 1
+1 11707 1
+11707 11707 1
+1 11708 1
+11708 11708 1
+1 11709 1
+11709 11709 1
+1 11710 1
+11710 11710 1
+1 11711 1
+11711 11711 1
+1 11712 1
+11712 11712 1
+1 11713 1
+11713 11713 1
+1 11714 1
+11714 11714 1
+1 11715 1
+11715 11715 1
+1 11716 1
+11716 11716 1
+1 11717 1
+11717 11717 1
+1 11718 1
+11718 11718 1
+1 11719 1
+11719 11719 1
+1 11720 1
+11720 11720 1
+1 11721 1
+11721 11721 1
+1 11722 1
+11722 11722 1
+1 11723 1
+11723 11723 1
+1 11724 1
+11724 11724 1
+1 11725 1
+11725 11725 1
+1 11726 1
+11726 11726 1
+1 11727 1
+11727 11727 1
+1 11728 1
+11728 11728 1
+1 11729 1
+11729 11729 1
+1 11730 1
+11730 11730 1
+1 11731 1
+11731 11731 1
+1 11732 1
+11732 11732 1
+1 11733 1
+11733 11733 1
+1 11734 1
+11734 11734 1
+1 11735 1
+11735 11735 1
+1 11736 1
+11736 11736 1
+1 11737 1
+11737 11737 1
+1 11738 1
+11738 11738 1
+1 11739 1
+11739 11739 1
+1 11740 1
+11740 11740 1
+1 11741 1
+11741 11741 1
+1 11742 1
+11742 11742 1
+1 11743 1
+11743 11743 1
+1 11744 1
+11744 11744 1
+1 11745 1
+11745 11745 1
+1 11746 1
+11746 11746 1
+1 11747 1
+11747 11747 1
+1 11748 1
+11748 11748 1
+1 11749 1
+11749 11749 1
+1 11750 1
+11750 11750 1
+1 11751 1
+11751 11751 1
+1 11752 1
+11752 11752 1
+1 11753 1
+11753 11753 1
+1 11754 1
+11754 11754 1
+1 11755 1
+11755 11755 1
+1 11756 1
+11756 11756 1
+1 11757 1
+11757 11757 1
+1 11758 1
+11758 11758 1
+1 11759 1
+11759 11759 1
+1 11760 1
+11760 11760 1
+1 11761 1
+11761 11761 1
+1 11762 1
+11762 11762 1
+1 11763 1
+11763 11763 1
+1 11764 1
+11764 11764 1
+1 11765 1
+11765 11765 1
+1 11766 1
+11766 11766 1
+1 11767 1
+11767 11767 1
+1 11768 1
+11768 11768 1
+1 11769 1
+11769 11769 1
+1 11770 1
+11770 11770 1
+1 11771 1
+11771 11771 1
+1 11772 1
+11772 11772 1
+1 11773 1
+11773 11773 1
+1 11774 1
+11774 11774 1
+1 11775 1
+11775 11775 1
+1 11776 1
+11776 11776 1
+1 11777 1
+11777 11777 1
+1 11778 1
+11778 11778 1
+1 11779 1
+11779 11779 1
+1 11780 1
+11780 11780 1
+1 11781 1
+11781 11781 1
+1 11782 1
+11782 11782 1
+1 11783 1
+11783 11783 1
+1 11784 1
+11784 11784 1
+1 11785 1
+11785 11785 1
+1 11786 1
+11786 11786 1
+1 11787 1
+11787 11787 1
+1 11788 1
+11788 11788 1
+1 11789 1
+11789 11789 1
+1 11790 1
+11790 11790 1
+1 11791 1
+11791 11791 1
+1 11792 1
+11792 11792 1
+1 11793 1
+11793 11793 1
+1 11794 1
+11794 11794 1
+1 11795 1
+11795 11795 1
+1 11796 1
+11796 11796 1
+1 11797 1
+11797 11797 1
+1 11798 1
+11798 11798 1
+1 11799 1
+11799 11799 1
+1 11800 1
+11800 11800 1
+1 11801 1
+11801 11801 1
+1 11802 1
+11802 11802 1
+1 11803 1
+11803 11803 1
+1 11804 1
+11804 11804 1
+1 11805 1
+11805 11805 1
+1 11806 1
+11806 11806 1
+1 11807 1
+11807 11807 1
+1 11808 1
+11808 11808 1
+1 11809 1
+11809 11809 1
+1 11810 1
+11810 11810 1
+1 11811 1
+11811 11811 1
+1 11812 1
+11812 11812 1
+1 11813 1
+11813 11813 1
+1 11814 1
+11814 11814 1
+1 11815 1
+11815 11815 1
+1 11816 1
+11816 11816 1
+1 11817 1
+11817 11817 1
+1 11818 1
+11818 11818 1
+1 11819 1
+11819 11819 1
+1 11820 1
+11820 11820 1
+1 11821 1
+11821 11821 1
+1 11822 1
+11822 11822 1
+1 11823 1
+11823 11823 1
+1 11824 1
+11824 11824 1
+1 11825 1
+11825 11825 1
+1 11826 1
+11826 11826 1
+1 11827 1
+11827 11827 1
+1 11828 1
+11828 11828 1
+1 11829 1
+11829 11829 1
+1 11830 1
+11830 11830 1
+1 11831 1
+11831 11831 1
+1 11832 1
+11832 11832 1
+1 11833 1
+11833 11833 1
+1 11834 1
+11834 11834 1
+1 11835 1
+11835 11835 1
+1 11836 1
+11836 11836 1
+1 11837 1
+11837 11837 1
+1 11838 1
+11838 11838 1
+1 11839 1
+11839 11839 1
+1 11840 1
+11840 11840 1
+1 11841 1
+11841 11841 1
+1 11842 1
+11842 11842 1
+1 11843 1
+11843 11843 1
+1 11844 1
+11844 11844 1
+1 11845 1
+11845 11845 1
+1 11846 1
+11846 11846 1
+1 11847 1
+11847 11847 1
+1 11848 1
+11848 11848 1
+1 11849 1
+11849 11849 1
+1 11850 1
+11850 11850 1
+1 11851 1
+11851 11851 1
+1 11852 1
+11852 11852 1
+1 11853 1
+11853 11853 1
+1 11854 1
+11854 11854 1
+1 11855 1
+11855 11855 1
+1 11856 1
+11856 11856 1
+1 11857 1
+11857 11857 1
+1 11858 1
+11858 11858 1
+1 11859 1
+11859 11859 1
+1 11860 1
+11860 11860 1
+1 11861 1
+11861 11861 1
+1 11862 1
+11862 11862 1
+1 11863 1
+11863 11863 1
+1 11864 1
+11864 11864 1
+1 11865 1
+11865 11865 1
+1 11866 1
+11866 11866 1
+1 11867 1
+11867 11867 1
+1 11868 1
+11868 11868 1
+1 11869 1
+11869 11869 1
+1 11870 1
+11870 11870 1
+1 11871 1
+11871 11871 1
+1 11872 1
+11872 11872 1
+1 11873 1
+11873 11873 1
+1 11874 1
+11874 11874 1
+1 11875 1
+11875 11875 1
+1 11876 1
+11876 11876 1
+1 11877 1
+11877 11877 1
+1 11878 1
+11878 11878 1
+1 11879 1
+11879 11879 1
+1 11880 1
+11880 11880 1
+1 11881 1
+11881 11881 1
+1 11882 1
+11882 11882 1
+1 11883 1
+11883 11883 1
+1 11884 1
+11884 11884 1
+1 11885 1
+11885 11885 1
+1 11886 1
+11886 11886 1
+1 11887 1
+11887 11887 1
+1 11888 1
+11888 11888 1
+1 11889 1
+11889 11889 1
+1 11890 1
+11890 11890 1
+1 11891 1
+11891 11891 1
+1 11892 1
+11892 11892 1
+1 11893 1
+11893 11893 1
+1 11894 1
+11894 11894 1
+1 11895 1
+11895 11895 1
+1 11896 1
+11896 11896 1
+1 11897 1
+11897 11897 1
+1 11898 1
+11898 11898 1
+1 11899 1
+11899 11899 1
+1 11900 1
+11900 11900 1
+1 11901 1
+11901 11901 1
+1 11902 1
+11902 11902 1
+1 11903 1
+11903 11903 1
+1 11904 1
+11904 11904 1
+1 11905 1
+11905 11905 1
+1 11906 1
+11906 11906 1
+1 11907 1
+11907 11907 1
+1 11908 1
+11908 11908 1
+1 11909 1
+11909 11909 1
+1 11910 1
+11910 11910 1
+1 11911 1
+11911 11911 1
+1 11912 1
+11912 11912 1
+1 11913 1
+11913 11913 1
+1 11914 1
+11914 11914 1
+1 11915 1
+11915 11915 1
+1 11916 1
+11916 11916 1
+1 11917 1
+11917 11917 1
+1 11918 1
+11918 11918 1
+1 11919 1
+11919 11919 1
+1 11920 1
+11920 11920 1
+1 11921 1
+11921 11921 1
+1 11922 1
+11922 11922 1
+1 11923 1
+11923 11923 1
+1 11924 1
+11924 11924 1
+1 11925 1
+11925 11925 1
+1 11926 1
+11926 11926 1
+1 11927 1
+11927 11927 1
+1 11928 1
+11928 11928 1
+1 11929 1
+11929 11929 1
+1 11930 1
+11930 11930 1
+1 11931 1
+11931 11931 1
+1 11932 1
+11932 11932 1
+1 11933 1
+11933 11933 1
+1 11934 1
+11934 11934 1
+1 11935 1
+11935 11935 1
+1 11936 1
+11936 11936 1
+1 11937 1
+11937 11937 1
+1 11938 1
+11938 11938 1
+1 11939 1
+11939 11939 1
+1 11940 1
+11940 11940 1
+1 11941 1
+11941 11941 1
+1 11942 1
+11942 11942 1
+1 11943 1
+11943 11943 1
+1 11944 1
+11944 11944 1
+1 11945 1
+11945 11945 1
+1 11946 1
+11946 11946 1
+1 11947 1
+11947 11947 1
+1 11948 1
+11948 11948 1
+1 11949 1
+11949 11949 1
+1 11950 1
+11950 11950 1
+1 11951 1
+11951 11951 1
+1 11952 1
+11952 11952 1
+1 11953 1
+11953 11953 1
+1 11954 1
+11954 11954 1
+1 11955 1
+11955 11955 1
+1 11956 1
+11956 11956 1
+1 11957 1
+11957 11957 1
+1 11958 1
+11958 11958 1
+1 11959 1
+11959 11959 1
+1 11960 1
+11960 11960 1
+1 11961 1
+11961 11961 1
+1 11962 1
+11962 11962 1
+1 11963 1
+11963 11963 1
+1 11964 1
+11964 11964 1
+1 11965 1
+11965 11965 1
+1 11966 1
+11966 11966 1
+1 11967 1
+11967 11967 1
+1 11968 1
+11968 11968 1
+1 11969 1
+11969 11969 1
+1 11970 1
+11970 11970 1
+1 11971 1
+11971 11971 1
+1 11972 1
+11972 11972 1
+1 11973 1
+11973 11973 1
+1 11974 1
+11974 11974 1
+1 11975 1
+11975 11975 1
+1 11976 1
+11976 11976 1
+1 11977 1
+11977 11977 1
+1 11978 1
+11978 11978 1
+1 11979 1
+11979 11979 1
+1 11980 1
+11980 11980 1
+1 11981 1
+11981 11981 1
+1 11982 1
+11982 11982 1
+1 11983 1
+11983 11983 1
+1 11984 1
+11984 11984 1
+1 11985 1
+11985 11985 1
+1 11986 1
+11986 11986 1
+1 11987 1
+11987 11987 1
+1 11988 1
+11988 11988 1
+1 11989 1
+11989 11989 1
+1 11990 1
+11990 11990 1
+1 11991 1
+11991 11991 1
+1 11992 1
+11992 11992 1
+1 11993 1
+11993 11993 1
+1 11994 1
+11994 11994 1
+1 11995 1
+11995 11995 1
+1 11996 1
+11996 11996 1
+1 11997 1
+11997 11997 1
+1 11998 1
+11998 11998 1
+1 11999 1
+11999 11999 1
+1 12000 1
+12000 12000 1
+1 12001 1
+12001 12001 1
+1 12002 1
+12002 12002 1
+1 12003 1
+12003 12003 1
+1 12004 1
+12004 12004 1
+1 12005 1
+12005 12005 1
+1 12006 1
+12006 12006 1
+1 12007 1
+12007 12007 1
+1 12008 1
+12008 12008 1
+1 12009 1
+12009 12009 1
+1 12010 1
+12010 12010 1
+1 12011 1
+12011 12011 1
+1 12012 1
+12012 12012 1
+1 12013 1
+12013 12013 1
+1 12014 1
+12014 12014 1
+1 12015 1
+12015 12015 1
+1 12016 1
+12016 12016 1
+1 12017 1
+12017 12017 1
+1 12018 1
+12018 12018 1
+1 12019 1
+12019 12019 1
+1 12020 1
+12020 12020 1
+1 12021 1
+12021 12021 1
+1 12022 1
+12022 12022 1
+1 12023 1
+12023 12023 1
+1 12024 1
+12024 12024 1
+1 12025 1
+12025 12025 1
+1 12026 1
+12026 12026 1
+1 12027 1
+12027 12027 1
+1 12028 1
+12028 12028 1
+1 12029 1
+12029 12029 1
+1 12030 1
+12030 12030 1
+1 12031 1
+12031 12031 1
+1 12032 1
+12032 12032 1
+1 12033 1
+12033 12033 1
+1 12034 1
+12034 12034 1
+1 12035 1
+12035 12035 1
+1 12036 1
+12036 12036 1
+1 12037 1
+12037 12037 1
+1 12038 1
+12038 12038 1
+1 12039 1
+12039 12039 1
+1 12040 1
+12040 12040 1
+1 12041 1
+12041 12041 1
+1 12042 1
+12042 12042 1
+1 12043 1
+12043 12043 1
+1 12044 1
+12044 12044 1
+1 12045 1
+12045 12045 1
+1 12046 1
+12046 12046 1
+1 12047 1
+12047 12047 1
+1 12048 1
+12048 12048 1
+1 12049 1
+12049 12049 1
+1 12050 1
+12050 12050 1
+1 12051 1
+12051 12051 1
+1 12052 1
+12052 12052 1
+1 12053 1
+12053 12053 1
+1 12054 1
+12054 12054 1
+1 12055 1
+12055 12055 1
+1 12056 1
+12056 12056 1
+1 12057 1
+12057 12057 1
+1 12058 1
+12058 12058 1
+1 12059 1
+12059 12059 1
+1 12060 1
+12060 12060 1
+1 12061 1
+12061 12061 1
+1 12062 1
+12062 12062 1
+1 12063 1
+12063 12063 1
+1 12064 1
+12064 12064 1
+1 12065 1
+12065 12065 1
+1 12066 1
+12066 12066 1
+1 12067 1
+12067 12067 1
+1 12068 1
+12068 12068 1
+1 12069 1
+12069 12069 1
+1 12070 1
+12070 12070 1
+1 12071 1
+12071 12071 1
+1 12072 1
+12072 12072 1
+1 12073 1
+12073 12073 1
+1 12074 1
+12074 12074 1
+1 12075 1
+12075 12075 1
+1 12076 1
+12076 12076 1
+1 12077 1
+12077 12077 1
+1 12078 1
+12078 12078 1
+1 12079 1
+12079 12079 1
+1 12080 1
+12080 12080 1
+1 12081 1
+12081 12081 1
+1 12082 1
+12082 12082 1
+1 12083 1
+12083 12083 1
+1 12084 1
+12084 12084 1
+1 12085 1
+12085 12085 1
+1 12086 1
+12086 12086 1
+1 12087 1
+12087 12087 1
+1 12088 1
+12088 12088 1
+1 12089 1
+12089 12089 1
+1 12090 1
+12090 12090 1
+1 12091 1
+12091 12091 1
+1 12092 1
+12092 12092 1
+1 12093 1
+12093 12093 1
+1 12094 1
+12094 12094 1
+1 12095 1
+12095 12095 1
+1 12096 1
+12096 12096 1
+1 12097 1
+12097 12097 1
+1 12098 1
+12098 12098 1
+1 12099 1
+12099 12099 1
+1 12100 1
+12100 12100 1
+1 12101 1
+12101 12101 1
+1 12102 1
+12102 12102 1
+1 12103 1
+12103 12103 1
+1 12104 1
+12104 12104 1
+1 12105 1
+12105 12105 1
+1 12106 1
+12106 12106 1
+1 12107 1
+12107 12107 1
+1 12108 1
+12108 12108 1
+1 12109 1
+12109 12109 1
+1 12110 1
+12110 12110 1
+1 12111 1
+12111 12111 1
+1 12112 1
+12112 12112 1
+1 12113 1
+12113 12113 1
+1 12114 1
+12114 12114 1
+1 12115 1
+12115 12115 1
+1 12116 1
+12116 12116 1
+1 12117 1
+12117 12117 1
+1 12118 1
+12118 12118 1
+1 12119 1
+12119 12119 1
+1 12120 1
+12120 12120 1
+1 12121 1
+12121 12121 1
+1 12122 1
+12122 12122 1
+1 12123 1
+12123 12123 1
+1 12124 1
+12124 12124 1
+1 12125 1
+12125 12125 1
+1 12126 1
+12126 12126 1
+1 12127 1
+12127 12127 1
+1 12128 1
+12128 12128 1
+1 12129 1
+12129 12129 1
+1 12130 1
+12130 12130 1
+1 12131 1
+12131 12131 1
+1 12132 1
+12132 12132 1
+1 12133 1
+12133 12133 1
+1 12134 1
+12134 12134 1
+1 12135 1
+12135 12135 1
+1 12136 1
+12136 12136 1
+1 12137 1
+12137 12137 1
+1 12138 1
+12138 12138 1
+1 12139 1
+12139 12139 1
+1 12140 1
+12140 12140 1
+1 12141 1
+12141 12141 1
+1 12142 1
+12142 12142 1
+1 12143 1
+12143 12143 1
+1 12144 1
+12144 12144 1
+1 12145 1
+12145 12145 1
+1 12146 1
+12146 12146 1
+1 12147 1
+12147 12147 1
+1 12148 1
+12148 12148 1
+1 12149 1
+12149 12149 1
+1 12150 1
+12150 12150 1
+1 12151 1
+12151 12151 1
+1 12152 1
+12152 12152 1
+1 12153 1
+12153 12153 1
+1 12154 1
+12154 12154 1
+1 12155 1
+12155 12155 1
+1 12156 1
+12156 12156 1
+1 12157 1
+12157 12157 1
+1 12158 1
+12158 12158 1
+1 12159 1
+12159 12159 1
+1 12160 1
+12160 12160 1
+1 12161 1
+12161 12161 1
+1 12162 1
+12162 12162 1
+1 12163 1
+12163 12163 1
+1 12164 1
+12164 12164 1
+1 12165 1
+12165 12165 1
+1 12166 1
+12166 12166 1
+1 12167 1
+12167 12167 1
+1 12168 1
+12168 12168 1
+1 12169 1
+12169 12169 1
+1 12170 1
+12170 12170 1
+1 12171 1
+12171 12171 1
+1 12172 1
+12172 12172 1
+1 12173 1
+12173 12173 1
+1 12174 1
+12174 12174 1
+1 12175 1
+12175 12175 1
+1 12176 1
+12176 12176 1
+1 12177 1
+12177 12177 1
+1 12178 1
+12178 12178 1
+1 12179 1
+12179 12179 1
+1 12180 1
+12180 12180 1
+1 12181 1
+12181 12181 1
+1 12182 1
+12182 12182 1
+1 12183 1
+12183 12183 1
+1 12184 1
+12184 12184 1
+1 12185 1
+12185 12185 1
+1 12186 1
+12186 12186 1
+1 12187 1
+12187 12187 1
+1 12188 1
+12188 12188 1
+1 12189 1
+12189 12189 1
+1 12190 1
+12190 12190 1
+1 12191 1
+12191 12191 1
+1 12192 1
+12192 12192 1
+1 12193 1
+12193 12193 1
+1 12194 1
+12194 12194 1
+1 12195 1
+12195 12195 1
+1 12196 1
+12196 12196 1
+1 12197 1
+12197 12197 1
+1 12198 1
+12198 12198 1
+1 12199 1
+12199 12199 1
+1 12200 1
+12200 12200 1
+1 12201 1
+12201 12201 1
+1 12202 1
+12202 12202 1
+1 12203 1
+12203 12203 1
+1 12204 1
+12204 12204 1
+1 12205 1
+12205 12205 1
+1 12206 1
+12206 12206 1
+1 12207 1
+12207 12207 1
+1 12208 1
+12208 12208 1
+1 12209 1
+12209 12209 1
+1 12210 1
+12210 12210 1
+1 12211 1
+12211 12211 1
+1 12212 1
+12212 12212 1
+1 12213 1
+12213 12213 1
+1 12214 1
+12214 12214 1
+1 12215 1
+12215 12215 1
+1 12216 1
+12216 12216 1
+1 12217 1
+12217 12217 1
+1 12218 1
+12218 12218 1
+1 12219 1
+12219 12219 1
+1 12220 1
+12220 12220 1
+1 12221 1
+12221 12221 1
+1 12222 1
+12222 12222 1
+1 12223 1
+12223 12223 1
+1 12224 1
+12224 12224 1
+1 12225 1
+12225 12225 1
+1 12226 1
+12226 12226 1
+1 12227 1
+12227 12227 1
+1 12228 1
+12228 12228 1
+1 12229 1
+12229 12229 1
+1 12230 1
+12230 12230 1
+1 12231 1
+12231 12231 1
+1 12232 1
+12232 12232 1
+1 12233 1
+12233 12233 1
+1 12234 1
+12234 12234 1
+1 12235 1
+12235 12235 1
+1 12236 1
+12236 12236 1
+1 12237 1
+12237 12237 1
+1 12238 1
+12238 12238 1
+1 12239 1
+12239 12239 1
+1 12240 1
+12240 12240 1
+1 12241 1
+12241 12241 1
+1 12242 1
+12242 12242 1
+1 12243 1
+12243 12243 1
+1 12244 1
+12244 12244 1
+1 12245 1
+12245 12245 1
+1 12246 1
+12246 12246 1
+1 12247 1
+12247 12247 1
+1 12248 1
+12248 12248 1
+1 12249 1
+12249 12249 1
+1 12250 1
+12250 12250 1
+1 12251 1
+12251 12251 1
+1 12252 1
+12252 12252 1
+1 12253 1
+12253 12253 1
+1 12254 1
+12254 12254 1
+1 12255 1
+12255 12255 1
+1 12256 1
+12256 12256 1
+1 12257 1
+12257 12257 1
+1 12258 1
+12258 12258 1
+1 12259 1
+12259 12259 1
+1 12260 1
+12260 12260 1
+1 12261 1
+12261 12261 1
+1 12262 1
+12262 12262 1
+1 12263 1
+12263 12263 1
+1 12264 1
+12264 12264 1
+1 12265 1
+12265 12265 1
+1 12266 1
+12266 12266 1
+1 12267 1
+12267 12267 1
+1 12268 1
+12268 12268 1
+1 12269 1
+12269 12269 1
+1 12270 1
+12270 12270 1
+1 12271 1
+12271 12271 1
+1 12272 1
+12272 12272 1
+1 12273 1
+12273 12273 1
+1 12274 1
+12274 12274 1
+1 12275 1
+12275 12275 1
+1 12276 1
+12276 12276 1
+1 12277 1
+12277 12277 1
+1 12278 1
+12278 12278 1
+1 12279 1
+12279 12279 1
+1 12280 1
+12280 12280 1
+1 12281 1
+12281 12281 1
+1 12282 1
+12282 12282 1
+1 12283 1
+12283 12283 1
+1 12284 1
+12284 12284 1
+1 12285 1
+12285 12285 1
+1 12286 1
+12286 12286 1
+1 12287 1
+12287 12287 1
+1 12288 1
+12288 12288 1
+1 12289 1
+12289 12289 1
+1 12290 1
+12290 12290 1
+1 12291 1
+12291 12291 1
+1 12292 1
+12292 12292 1
+1 12293 1
+12293 12293 1
+1 12294 1
+12294 12294 1
+1 12295 1
+12295 12295 1
+1 12296 1
+12296 12296 1
+1 12297 1
+12297 12297 1
+1 12298 1
+12298 12298 1
+1 12299 1
+12299 12299 1
+1 12300 1
+12300 12300 1
+1 12301 1
+12301 12301 1
+1 12302 1
+12302 12302 1
+1 12303 1
+12303 12303 1
+1 12304 1
+12304 12304 1
+1 12305 1
+12305 12305 1
+1 12306 1
+12306 12306 1
+1 12307 1
+12307 12307 1
+1 12308 1
+12308 12308 1
+1 12309 1
+12309 12309 1
+1 12310 1
+12310 12310 1
+1 12311 1
+12311 12311 1
+1 12312 1
+12312 12312 1
+1 12313 1
+12313 12313 1
+1 12314 1
+12314 12314 1
+1 12315 1
+12315 12315 1
+1 12316 1
+12316 12316 1
+1 12317 1
+12317 12317 1
+1 12318 1
+12318 12318 1
+1 12319 1
+12319 12319 1
+1 12320 1
+12320 12320 1
+1 12321 1
+12321 12321 1
+1 12322 1
+12322 12322 1
+1 12323 1
+12323 12323 1
+1 12324 1
+12324 12324 1
+1 12325 1
+12325 12325 1
+1 12326 1
+12326 12326 1
+1 12327 1
+12327 12327 1
+1 12328 1
+12328 12328 1
+1 12329 1
+12329 12329 1
+1 12330 1
+12330 12330 1
+1 12331 1
+12331 12331 1
+1 12332 1
+12332 12332 1
+1 12333 1
+12333 12333 1
+1 12334 1
+12334 12334 1
+1 12335 1
+12335 12335 1
+1 12336 1
+12336 12336 1
+1 12337 1
+12337 12337 1
+1 12338 1
+12338 12338 1
+1 12339 1
+12339 12339 1
+1 12340 1
+12340 12340 1
+1 12341 1
+12341 12341 1
+1 12342 1
+12342 12342 1
+1 12343 1
+12343 12343 1
+1 12344 1
+12344 12344 1
+1 12345 1
+12345 12345 1
+1 12346 1
+12346 12346 1
+1 12347 1
+12347 12347 1
+1 12348 1
+12348 12348 1
+1 12349 1
+12349 12349 1
+1 12350 1
+12350 12350 1
+1 12351 1
+12351 12351 1
+1 12352 1
+12352 12352 1
+1 12353 1
+12353 12353 1
+1 12354 1
+12354 12354 1
+1 12355 1
+12355 12355 1
+1 12356 1
+12356 12356 1
+1 12357 1
+12357 12357 1
+1 12358 1
+12358 12358 1
+1 12359 1
+12359 12359 1
+1 12360 1
+12360 12360 1
+1 12361 1
+12361 12361 1
+1 12362 1
+12362 12362 1
+1 12363 1
+12363 12363 1
+1 12364 1
+12364 12364 1
+1 12365 1
+12365 12365 1
+1 12366 1
+12366 12366 1
+1 12367 1
+12367 12367 1
+1 12368 1
+12368 12368 1
+1 12369 1
+12369 12369 1
+1 12370 1
+12370 12370 1
+1 12371 1
+12371 12371 1
+1 12372 1
+12372 12372 1
+1 12373 1
+12373 12373 1
+1 12374 1
+12374 12374 1
+1 12375 1
+12375 12375 1
+1 12376 1
+12376 12376 1
+1 12377 1
+12377 12377 1
+1 12378 1
+12378 12378 1
+1 12379 1
+12379 12379 1
+1 12380 1
+12380 12380 1
+1 12381 1
+12381 12381 1
+1 12382 1
+12382 12382 1
+1 12383 1
+12383 12383 1
+1 12384 1
+12384 12384 1
+1 12385 1
+12385 12385 1
+1 12386 1
+12386 12386 1
+1 12387 1
+12387 12387 1
+1 12388 1
+12388 12388 1
+1 12389 1
+12389 12389 1
+1 12390 1
+12390 12390 1
+1 12391 1
+12391 12391 1
+1 12392 1
+12392 12392 1
+1 12393 1
+12393 12393 1
+1 12394 1
+12394 12394 1
+1 12395 1
+12395 12395 1
+1 12396 1
+12396 12396 1
+1 12397 1
+12397 12397 1
+1 12398 1
+12398 12398 1
+1 12399 1
+12399 12399 1
+1 12400 1
+12400 12400 1
+1 12401 1
+12401 12401 1
+1 12402 1
+12402 12402 1
+1 12403 1
+12403 12403 1
+1 12404 1
+12404 12404 1
+1 12405 1
+12405 12405 1
+1 12406 1
+12406 12406 1
+1 12407 1
+12407 12407 1
+1 12408 1
+12408 12408 1
+1 12409 1
+12409 12409 1
+1 12410 1
+12410 12410 1
+1 12411 1
+12411 12411 1
+1 12412 1
+12412 12412 1
+1 12413 1
+12413 12413 1
+1 12414 1
+12414 12414 1
+1 12415 1
+12415 12415 1
+1 12416 1
+12416 12416 1
+1 12417 1
+12417 12417 1
+1 12418 1
+12418 12418 1
+1 12419 1
+12419 12419 1
+1 12420 1
+12420 12420 1
+1 12421 1
+12421 12421 1
+1 12422 1
+12422 12422 1
+1 12423 1
+12423 12423 1
+1 12424 1
+12424 12424 1
+1 12425 1
+12425 12425 1
+1 12426 1
+12426 12426 1
+1 12427 1
+12427 12427 1
+1 12428 1
+12428 12428 1
+1 12429 1
+12429 12429 1
+1 12430 1
+12430 12430 1
+1 12431 1
+12431 12431 1
+1 12432 1
+12432 12432 1
+1 12433 1
+12433 12433 1
+1 12434 1
+12434 12434 1
+1 12435 1
+12435 12435 1
+1 12436 1
+12436 12436 1
+1 12437 1
+12437 12437 1
+1 12438 1
+12438 12438 1
+1 12439 1
+12439 12439 1
+1 12440 1
+12440 12440 1
+1 12441 1
+12441 12441 1
+1 12442 1
+12442 12442 1
+1 12443 1
+12443 12443 1
+1 12444 1
+12444 12444 1
+1 12445 1
+12445 12445 1
+1 12446 1
+12446 12446 1
+1 12447 1
+12447 12447 1
+1 12448 1
+12448 12448 1
+1 12449 1
+12449 12449 1
+1 12450 1
+12450 12450 1
+1 12451 1
+12451 12451 1
+1 12452 1
+12452 12452 1
+1 12453 1
+12453 12453 1
+1 12454 1
+12454 12454 1
+1 12455 1
+12455 12455 1
+1 12456 1
+12456 12456 1
+1 12457 1
+12457 12457 1
+1 12458 1
+12458 12458 1
+1 12459 1
+12459 12459 1
+1 12460 1
+12460 12460 1
+1 12461 1
+12461 12461 1
+1 12462 1
+12462 12462 1
+1 12463 1
+12463 12463 1
+1 12464 1
+12464 12464 1
+1 12465 1
+12465 12465 1
+1 12466 1
+12466 12466 1
+1 12467 1
+12467 12467 1
+1 12468 1
+12468 12468 1
+1 12469 1
+12469 12469 1
+1 12470 1
+12470 12470 1
+1 12471 1
+12471 12471 1
+1 12472 1
+12472 12472 1
+1 12473 1
+12473 12473 1
+1 12474 1
+12474 12474 1
+1 12475 1
+12475 12475 1
+1 12476 1
+12476 12476 1
+1 12477 1
+12477 12477 1
+1 12478 1
+12478 12478 1
+1 12479 1
+12479 12479 1
+1 12480 1
+12480 12480 1
+1 12481 1
+12481 12481 1
+1 12482 1
+12482 12482 1
+1 12483 1
+12483 12483 1
+1 12484 1
+12484 12484 1
+1 12485 1
+12485 12485 1
+1 12486 1
+12486 12486 1
+1 12487 1
+12487 12487 1
+1 12488 1
+12488 12488 1
+1 12489 1
+12489 12489 1
+1 12490 1
+12490 12490 1
+1 12491 1
+12491 12491 1
+1 12492 1
+12492 12492 1
+1 12493 1
+12493 12493 1
+1 12494 1
+12494 12494 1
+1 12495 1
+12495 12495 1
+1 12496 1
+12496 12496 1
+1 12497 1
+12497 12497 1
+1 12498 1
+12498 12498 1
+1 12499 1
+12499 12499 1
+1 12500 1
+12500 12500 1
+1 12501 1
+12501 12501 1
+1 12502 1
+12502 12502 1
+1 12503 1
+12503 12503 1
+1 12504 1
+12504 12504 1
+1 12505 1
+12505 12505 1
+1 12506 1
+12506 12506 1
+1 12507 1
+12507 12507 1
+1 12508 1
+12508 12508 1
+1 12509 1
+12509 12509 1
+1 12510 1
+12510 12510 1
+1 12511 1
+12511 12511 1
+1 12512 1
+12512 12512 1
+1 12513 1
+12513 12513 1
+1 12514 1
+12514 12514 1
+1 12515 1
+12515 12515 1
+1 12516 1
+12516 12516 1
+1 12517 1
+12517 12517 1
+1 12518 1
+12518 12518 1
+1 12519 1
+12519 12519 1
+1 12520 1
+12520 12520 1
+1 12521 1
+12521 12521 1
+1 12522 1
+12522 12522 1
+1 12523 1
+12523 12523 1
+1 12524 1
+12524 12524 1
+1 12525 1
+12525 12525 1
+1 12526 1
+12526 12526 1
+1 12527 1
+12527 12527 1
+1 12528 1
+12528 12528 1
+1 12529 1
+12529 12529 1
+1 12530 1
+12530 12530 1
+1 12531 1
+12531 12531 1
+1 12532 1
+12532 12532 1
+1 12533 1
+12533 12533 1
+1 12534 1
+12534 12534 1
+1 12535 1
+12535 12535 1
+1 12536 1
+12536 12536 1
+1 12537 1
+12537 12537 1
+1 12538 1
+12538 12538 1
+1 12539 1
+12539 12539 1
+1 12540 1
+12540 12540 1
+1 12541 1
+12541 12541 1
+1 12542 1
+12542 12542 1
+1 12543 1
+12543 12543 1
+1 12544 1
+12544 12544 1
+1 12545 1
+12545 12545 1
+1 12546 1
+12546 12546 1
+1 12547 1
+12547 12547 1
+1 12548 1
+12548 12548 1
+1 12549 1
+12549 12549 1
+1 12550 1
+12550 12550 1
+1 12551 1
+12551 12551 1
+1 12552 1
+12552 12552 1
+1 12553 1
+12553 12553 1
+1 12554 1
+12554 12554 1
+1 12555 1
+12555 12555 1
+1 12556 1
+12556 12556 1
+1 12557 1
+12557 12557 1
+1 12558 1
+12558 12558 1
+1 12559 1
+12559 12559 1
+1 12560 1
+12560 12560 1
+1 12561 1
+12561 12561 1
+1 12562 1
+12562 12562 1
+1 12563 1
+12563 12563 1
+1 12564 1
+12564 12564 1
+1 12565 1
+12565 12565 1
+1 12566 1
+12566 12566 1
+1 12567 1
+12567 12567 1
+1 12568 1
+12568 12568 1
+1 12569 1
+12569 12569 1
+1 12570 1
+12570 12570 1
+1 12571 1
+12571 12571 1
+1 12572 1
+12572 12572 1
+1 12573 1
+12573 12573 1
+1 12574 1
+12574 12574 1
+1 12575 1
+12575 12575 1
+1 12576 1
+12576 12576 1
+1 12577 1
+12577 12577 1
+1 12578 1
+12578 12578 1
+1 12579 1
+12579 12579 1
+1 12580 1
+12580 12580 1
+1 12581 1
+12581 12581 1
+1 12582 1
+12582 12582 1
+1 12583 1
+12583 12583 1
+1 12584 1
+12584 12584 1
+1 12585 1
+12585 12585 1
+1 12586 1
+12586 12586 1
+1 12587 1
+12587 12587 1
+1 12588 1
+12588 12588 1
+1 12589 1
+12589 12589 1
+1 12590 1
+12590 12590 1
+1 12591 1
+12591 12591 1
+1 12592 1
+12592 12592 1
+1 12593 1
+12593 12593 1
+1 12594 1
+12594 12594 1
+1 12595 1
+12595 12595 1
+1 12596 1
+12596 12596 1
+1 12597 1
+12597 12597 1
+1 12598 1
+12598 12598 1
+1 12599 1
+12599 12599 1
+1 12600 1
+12600 12600 1
+1 12601 1
+12601 12601 1
+1 12602 1
+12602 12602 1
+1 12603 1
+12603 12603 1
+1 12604 1
+12604 12604 1
+1 12605 1
+12605 12605 1
+1 12606 1
+12606 12606 1
+1 12607 1
+12607 12607 1
+1 12608 1
+12608 12608 1
+1 12609 1
+12609 12609 1
+1 12610 1
+12610 12610 1
+1 12611 1
+12611 12611 1
+1 12612 1
+12612 12612 1
+1 12613 1
+12613 12613 1
+1 12614 1
+12614 12614 1
+1 12615 1
+12615 12615 1
+1 12616 1
+12616 12616 1
+1 12617 1
+12617 12617 1
+1 12618 1
+12618 12618 1
+1 12619 1
+12619 12619 1
+1 12620 1
+12620 12620 1
+1 12621 1
+12621 12621 1
+1 12622 1
+12622 12622 1
+1 12623 1
+12623 12623 1
+1 12624 1
+12624 12624 1
+1 12625 1
+12625 12625 1
+1 12626 1
+12626 12626 1
+1 12627 1
+12627 12627 1
+1 12628 1
+12628 12628 1
+1 12629 1
+12629 12629 1
+1 12630 1
+12630 12630 1
+1 12631 1
+12631 12631 1
+1 12632 1
+12632 12632 1
+1 12633 1
+12633 12633 1
+1 12634 1
+12634 12634 1
+1 12635 1
+12635 12635 1
+1 12636 1
+12636 12636 1
+1 12637 1
+12637 12637 1
+1 12638 1
+12638 12638 1
+1 12639 1
+12639 12639 1
+1 12640 1
+12640 12640 1
+1 12641 1
+12641 12641 1
+1 12642 1
+12642 12642 1
+1 12643 1
+12643 12643 1
+1 12644 1
+12644 12644 1
+1 12645 1
+12645 12645 1
+1 12646 1
+12646 12646 1
+1 12647 1
+12647 12647 1
+1 12648 1
+12648 12648 1
+1 12649 1
+12649 12649 1
+1 12650 1
+12650 12650 1
+1 12651 1
+12651 12651 1
+1 12652 1
+12652 12652 1
+1 12653 1
+12653 12653 1
+1 12654 1
+12654 12654 1
+1 12655 1
+12655 12655 1
+1 12656 1
+12656 12656 1
+1 12657 1
+12657 12657 1
+1 12658 1
+12658 12658 1
+1 12659 1
+12659 12659 1
+1 12660 1
+12660 12660 1
+1 12661 1
+12661 12661 1
+1 12662 1
+12662 12662 1
+1 12663 1
+12663 12663 1
+1 12664 1
+12664 12664 1
+1 12665 1
+12665 12665 1
+1 12666 1
+12666 12666 1
+1 12667 1
+12667 12667 1
+1 12668 1
+12668 12668 1
+1 12669 1
+12669 12669 1
+1 12670 1
+12670 12670 1
+1 12671 1
+12671 12671 1
+1 12672 1
+12672 12672 1
+1 12673 1
+12673 12673 1
+1 12674 1
+12674 12674 1
+1 12675 1
+12675 12675 1
+1 12676 1
+12676 12676 1
+1 12677 1
+12677 12677 1
+1 12678 1
+12678 12678 1
+1 12679 1
+12679 12679 1
+1 12680 1
+12680 12680 1
+1 12681 1
+12681 12681 1
+1 12682 1
+12682 12682 1
+1 12683 1
+12683 12683 1
+1 12684 1
+12684 12684 1
+1 12685 1
+12685 12685 1
+1 12686 1
+12686 12686 1
+1 12687 1
+12687 12687 1
+1 12688 1
+12688 12688 1
+1 12689 1
+12689 12689 1
+1 12690 1
+12690 12690 1
+1 12691 1
+12691 12691 1
+1 12692 1
+12692 12692 1
+1 12693 1
+12693 12693 1
+1 12694 1
+12694 12694 1
+1 12695 1
+12695 12695 1
+1 12696 1
+12696 12696 1
+1 12697 1
+12697 12697 1
+1 12698 1
+12698 12698 1
+1 12699 1
+12699 12699 1
+1 12700 1
+12700 12700 1
+1 12701 1
+12701 12701 1
+1 12702 1
+12702 12702 1
+1 12703 1
+12703 12703 1
+1 12704 1
+12704 12704 1
+1 12705 1
+12705 12705 1
+1 12706 1
+12706 12706 1
+1 12707 1
+12707 12707 1
+1 12708 1
+12708 12708 1
+1 12709 1
+12709 12709 1
+1 12710 1
+12710 12710 1
+1 12711 1
+12711 12711 1
+1 12712 1
+12712 12712 1
+1 12713 1
+12713 12713 1
+1 12714 1
+12714 12714 1
+1 12715 1
+12715 12715 1
+1 12716 1
+12716 12716 1
+1 12717 1
+12717 12717 1
+1 12718 1
+12718 12718 1
+1 12719 1
+12719 12719 1
+1 12720 1
+12720 12720 1
+1 12721 1
+12721 12721 1
+1 12722 1
+12722 12722 1
+1 12723 1
+12723 12723 1
+1 12724 1
+12724 12724 1
+1 12725 1
+12725 12725 1
+1 12726 1
+12726 12726 1
+1 12727 1
+12727 12727 1
+1 12728 1
+12728 12728 1
+1 12729 1
+12729 12729 1
+1 12730 1
+12730 12730 1
+1 12731 1
+12731 12731 1
+1 12732 1
+12732 12732 1
+1 12733 1
+12733 12733 1
+1 12734 1
+12734 12734 1
+1 12735 1
+12735 12735 1
+1 12736 1
+12736 12736 1
+1 12737 1
+12737 12737 1
+1 12738 1
+12738 12738 1
+1 12739 1
+12739 12739 1
+1 12740 1
+12740 12740 1
+1 12741 1
+12741 12741 1
+1 12742 1
+12742 12742 1
+1 12743 1
+12743 12743 1
+1 12744 1
+12744 12744 1
+1 12745 1
+12745 12745 1
+1 12746 1
+12746 12746 1
+1 12747 1
+12747 12747 1
+1 12748 1
+12748 12748 1
+1 12749 1
+12749 12749 1
+1 12750 1
+12750 12750 1
+1 12751 1
+12751 12751 1
+1 12752 1
+12752 12752 1
+1 12753 1
+12753 12753 1
+1 12754 1
+12754 12754 1
+1 12755 1
+12755 12755 1
+1 12756 1
+12756 12756 1
+1 12757 1
+12757 12757 1
+1 12758 1
+12758 12758 1
+1 12759 1
+12759 12759 1
+1 12760 1
+12760 12760 1
+1 12761 1
+12761 12761 1
+1 12762 1
+12762 12762 1
+1 12763 1
+12763 12763 1
+1 12764 1
+12764 12764 1
+1 12765 1
+12765 12765 1
+1 12766 1
+12766 12766 1
+1 12767 1
+12767 12767 1
+1 12768 1
+12768 12768 1
+1 12769 1
+12769 12769 1
+1 12770 1
+12770 12770 1
+1 12771 1
+12771 12771 1
+1 12772 1
+12772 12772 1
+1 12773 1
+12773 12773 1
+1 12774 1
+12774 12774 1
+1 12775 1
+12775 12775 1
+1 12776 1
+12776 12776 1
+1 12777 1
+12777 12777 1
+1 12778 1
+12778 12778 1
+1 12779 1
+12779 12779 1
+1 12780 1
+12780 12780 1
+1 12781 1
+12781 12781 1
+1 12782 1
+12782 12782 1
+1 12783 1
+12783 12783 1
+1 12784 1
+12784 12784 1
+1 12785 1
+12785 12785 1
+1 12786 1
+12786 12786 1
+1 12787 1
+12787 12787 1
+1 12788 1
+12788 12788 1
+1 12789 1
+12789 12789 1
+1 12790 1
+12790 12790 1
+1 12791 1
+12791 12791 1
+1 12792 1
+12792 12792 1
+1 12793 1
+12793 12793 1
+1 12794 1
+12794 12794 1
+1 12795 1
+12795 12795 1
+1 12796 1
+12796 12796 1
+1 12797 1
+12797 12797 1
+1 12798 1
+12798 12798 1
+1 12799 1
+12799 12799 1
+1 12800 1
+12800 12800 1
+1 12801 1
+12801 12801 1
+1 12802 1
+12802 12802 1
+1 12803 1
+12803 12803 1
+1 12804 1
+12804 12804 1
+1 12805 1
+12805 12805 1
+1 12806 1
+12806 12806 1
+1 12807 1
+12807 12807 1
+1 12808 1
+12808 12808 1
+1 12809 1
+12809 12809 1
+1 12810 1
+12810 12810 1
+1 12811 1
+12811 12811 1
+1 12812 1
+12812 12812 1
+1 12813 1
+12813 12813 1
+1 12814 1
+12814 12814 1
+1 12815 1
+12815 12815 1
+1 12816 1
+12816 12816 1
+1 12817 1
+12817 12817 1
+1 12818 1
+12818 12818 1
+1 12819 1
+12819 12819 1
+1 12820 1
+12820 12820 1
+1 12821 1
+12821 12821 1
+1 12822 1
+12822 12822 1
+1 12823 1
+12823 12823 1
+1 12824 1
+12824 12824 1
+1 12825 1
+12825 12825 1
+1 12826 1
+12826 12826 1
+1 12827 1
+12827 12827 1
+1 12828 1
+12828 12828 1
+1 12829 1
+12829 12829 1
+1 12830 1
+12830 12830 1
+1 12831 1
+12831 12831 1
+1 12832 1
+12832 12832 1
+1 12833 1
+12833 12833 1
+1 12834 1
+12834 12834 1
+1 12835 1
+12835 12835 1
+1 12836 1
+12836 12836 1
+1 12837 1
+12837 12837 1
+1 12838 1
+12838 12838 1
+1 12839 1
+12839 12839 1
+1 12840 1
+12840 12840 1
+1 12841 1
+12841 12841 1
+1 12842 1
+12842 12842 1
+1 12843 1
+12843 12843 1
+1 12844 1
+12844 12844 1
+1 12845 1
+12845 12845 1
+1 12846 1
+12846 12846 1
+1 12847 1
+12847 12847 1
+1 12848 1
+12848 12848 1
+1 12849 1
+12849 12849 1
+1 12850 1
+12850 12850 1
+1 12851 1
+12851 12851 1
+1 12852 1
+12852 12852 1
+1 12853 1
+12853 12853 1
+1 12854 1
+12854 12854 1
+1 12855 1
+12855 12855 1
+1 12856 1
+12856 12856 1
+1 12857 1
+12857 12857 1
+1 12858 1
+12858 12858 1
+1 12859 1
+12859 12859 1
+1 12860 1
+12860 12860 1
+1 12861 1
+12861 12861 1
+1 12862 1
+12862 12862 1
+1 12863 1
+12863 12863 1
+1 12864 1
+12864 12864 1
+1 12865 1
+12865 12865 1
+1 12866 1
+12866 12866 1
+1 12867 1
+12867 12867 1
+1 12868 1
+12868 12868 1
+1 12869 1
+12869 12869 1
+1 12870 1
+12870 12870 1
+1 12871 1
+12871 12871 1
+1 12872 1
+12872 12872 1
+1 12873 1
+12873 12873 1
+1 12874 1
+12874 12874 1
+1 12875 1
+12875 12875 1
+1 12876 1
+12876 12876 1
+1 12877 1
+12877 12877 1
+1 12878 1
+12878 12878 1
+1 12879 1
+12879 12879 1
+1 12880 1
+12880 12880 1
+1 12881 1
+12881 12881 1
+1 12882 1
+12882 12882 1
+1 12883 1
+12883 12883 1
+1 12884 1
+12884 12884 1
+1 12885 1
+12885 12885 1
+1 12886 1
+12886 12886 1
+1 12887 1
+12887 12887 1
+1 12888 1
+12888 12888 1
+1 12889 1
+12889 12889 1
+1 12890 1
+12890 12890 1
+1 12891 1
+12891 12891 1
+1 12892 1
+12892 12892 1
+1 12893 1
+12893 12893 1
+1 12894 1
+12894 12894 1
+1 12895 1
+12895 12895 1
+1 12896 1
+12896 12896 1
+1 12897 1
+12897 12897 1
+1 12898 1
+12898 12898 1
+1 12899 1
+12899 12899 1
+1 12900 1
+12900 12900 1
+1 12901 1
+12901 12901 1
+1 12902 1
+12902 12902 1
+1 12903 1
+12903 12903 1
+1 12904 1
+12904 12904 1
+1 12905 1
+12905 12905 1
+1 12906 1
+12906 12906 1
+1 12907 1
+12907 12907 1
+1 12908 1
+12908 12908 1
+1 12909 1
+12909 12909 1
+1 12910 1
+12910 12910 1
+1 12911 1
+12911 12911 1
+1 12912 1
+12912 12912 1
+1 12913 1
+12913 12913 1
+1 12914 1
+12914 12914 1
+1 12915 1
+12915 12915 1
+1 12916 1
+12916 12916 1
+1 12917 1
+12917 12917 1
+1 12918 1
+12918 12918 1
+1 12919 1
+12919 12919 1
+1 12920 1
+12920 12920 1
+1 12921 1
+12921 12921 1
+1 12922 1
+12922 12922 1
+1 12923 1
+12923 12923 1
+1 12924 1
+12924 12924 1
+1 12925 1
+12925 12925 1
+1 12926 1
+12926 12926 1
+1 12927 1
+12927 12927 1
+1 12928 1
+12928 12928 1
+1 12929 1
+12929 12929 1
+1 12930 1
+12930 12930 1
+1 12931 1
+12931 12931 1
+1 12932 1
+12932 12932 1
+1 12933 1
+12933 12933 1
+1 12934 1
+12934 12934 1
+1 12935 1
+12935 12935 1
+1 12936 1
+12936 12936 1
+1 12937 1
+12937 12937 1
+1 12938 1
+12938 12938 1
+1 12939 1
+12939 12939 1
+1 12940 1
+12940 12940 1
+1 12941 1
+12941 12941 1
+1 12942 1
+12942 12942 1
+1 12943 1
+12943 12943 1
+1 12944 1
+12944 12944 1
+1 12945 1
+12945 12945 1
+1 12946 1
+12946 12946 1
+1 12947 1
+12947 12947 1
+1 12948 1
+12948 12948 1
+1 12949 1
+12949 12949 1
+1 12950 1
+12950 12950 1
+1 12951 1
+12951 12951 1
+1 12952 1
+12952 12952 1
+1 12953 1
+12953 12953 1
+1 12954 1
+12954 12954 1
+1 12955 1
+12955 12955 1
+1 12956 1
+12956 12956 1
+1 12957 1
+12957 12957 1
+1 12958 1
+12958 12958 1
+1 12959 1
+12959 12959 1
+1 12960 1
+12960 12960 1
+1 12961 1
+12961 12961 1
+1 12962 1
+12962 12962 1
+1 12963 1
+12963 12963 1
+1 12964 1
+12964 12964 1
+1 12965 1
+12965 12965 1
+1 12966 1
+12966 12966 1
+1 12967 1
+12967 12967 1
+1 12968 1
+12968 12968 1
+1 12969 1
+12969 12969 1
+1 12970 1
+12970 12970 1
+1 12971 1
+12971 12971 1
+1 12972 1
+12972 12972 1
+1 12973 1
+12973 12973 1
+1 12974 1
+12974 12974 1
+1 12975 1
+12975 12975 1
+1 12976 1
+12976 12976 1
+1 12977 1
+12977 12977 1
+1 12978 1
+12978 12978 1
+1 12979 1
+12979 12979 1
+1 12980 1
+12980 12980 1
+1 12981 1
+12981 12981 1
+1 12982 1
+12982 12982 1
+1 12983 1
+12983 12983 1
+1 12984 1
+12984 12984 1
+1 12985 1
+12985 12985 1
+1 12986 1
+12986 12986 1
+1 12987 1
+12987 12987 1
+1 12988 1
+12988 12988 1
+1 12989 1
+12989 12989 1
+1 12990 1
+12990 12990 1
+1 12991 1
+12991 12991 1
+1 12992 1
+12992 12992 1
+1 12993 1
+12993 12993 1
+1 12994 1
+12994 12994 1
+1 12995 1
+12995 12995 1
+1 12996 1
+12996 12996 1
+1 12997 1
+12997 12997 1
+1 12998 1
+12998 12998 1
+1 12999 1
+12999 12999 1
+1 13000 1
+13000 13000 1
+1 13001 1
+13001 13001 1
+1 13002 1
+13002 13002 1
+1 13003 1
+13003 13003 1
+1 13004 1
+13004 13004 1
+1 13005 1
+13005 13005 1
+1 13006 1
+13006 13006 1
+1 13007 1
+13007 13007 1
+1 13008 1
+13008 13008 1
+1 13009 1
+13009 13009 1
+1 13010 1
+13010 13010 1
+1 13011 1
+13011 13011 1
+1 13012 1
+13012 13012 1
+1 13013 1
+13013 13013 1
+1 13014 1
+13014 13014 1
+1 13015 1
+13015 13015 1
+1 13016 1
+13016 13016 1
+1 13017 1
+13017 13017 1
+1 13018 1
+13018 13018 1
+1 13019 1
+13019 13019 1
+1 13020 1
+13020 13020 1
+1 13021 1
+13021 13021 1
+1 13022 1
+13022 13022 1
+1 13023 1
+13023 13023 1
+1 13024 1
+13024 13024 1
+1 13025 1
+13025 13025 1
+1 13026 1
+13026 13026 1
+1 13027 1
+13027 13027 1
+1 13028 1
+13028 13028 1
+1 13029 1
+13029 13029 1
+1 13030 1
+13030 13030 1
+1 13031 1
+13031 13031 1
+1 13032 1
+13032 13032 1
+1 13033 1
+13033 13033 1
+1 13034 1
+13034 13034 1
+1 13035 1
+13035 13035 1
+1 13036 1
+13036 13036 1
+1 13037 1
+13037 13037 1
+1 13038 1
+13038 13038 1
+1 13039 1
+13039 13039 1
+1 13040 1
+13040 13040 1
+1 13041 1
+13041 13041 1
+1 13042 1
+13042 13042 1
+1 13043 1
+13043 13043 1
+1 13044 1
+13044 13044 1
+1 13045 1
+13045 13045 1
+1 13046 1
+13046 13046 1
+1 13047 1
+13047 13047 1
+1 13048 1
+13048 13048 1
+1 13049 1
+13049 13049 1
+1 13050 1
+13050 13050 1
+1 13051 1
+13051 13051 1
+1 13052 1
+13052 13052 1
+1 13053 1
+13053 13053 1
+1 13054 1
+13054 13054 1
+1 13055 1
+13055 13055 1
+1 13056 1
+13056 13056 1
+1 13057 1
+13057 13057 1
+1 13058 1
+13058 13058 1
+1 13059 1
+13059 13059 1
+1 13060 1
+13060 13060 1
+1 13061 1
+13061 13061 1
+1 13062 1
+13062 13062 1
+1 13063 1
+13063 13063 1
+1 13064 1
+13064 13064 1
+1 13065 1
+13065 13065 1
+1 13066 1
+13066 13066 1
+1 13067 1
+13067 13067 1
+1 13068 1
+13068 13068 1
+1 13069 1
+13069 13069 1
+1 13070 1
+13070 13070 1
+1 13071 1
+13071 13071 1
+1 13072 1
+13072 13072 1
+1 13073 1
+13073 13073 1
+1 13074 1
+13074 13074 1
+1 13075 1
+13075 13075 1
+1 13076 1
+13076 13076 1
+1 13077 1
+13077 13077 1
+1 13078 1
+13078 13078 1
+1 13079 1
+13079 13079 1
+1 13080 1
+13080 13080 1
+1 13081 1
+13081 13081 1
+1 13082 1
+13082 13082 1
+1 13083 1
+13083 13083 1
+1 13084 1
+13084 13084 1
+1 13085 1
+13085 13085 1
+1 13086 1
+13086 13086 1
+1 13087 1
+13087 13087 1
+1 13088 1
+13088 13088 1
+1 13089 1
+13089 13089 1
+1 13090 1
+13090 13090 1
+1 13091 1
+13091 13091 1
+1 13092 1
+13092 13092 1
+1 13093 1
+13093 13093 1
+1 13094 1
+13094 13094 1
+1 13095 1
+13095 13095 1
+1 13096 1
+13096 13096 1
+1 13097 1
+13097 13097 1
+1 13098 1
+13098 13098 1
+1 13099 1
+13099 13099 1
+1 13100 1
+13100 13100 1
+1 13101 1
+13101 13101 1
+1 13102 1
+13102 13102 1
+1 13103 1
+13103 13103 1
+1 13104 1
+13104 13104 1
+1 13105 1
+13105 13105 1
+1 13106 1
+13106 13106 1
+1 13107 1
+13107 13107 1
+1 13108 1
+13108 13108 1
+1 13109 1
+13109 13109 1
+1 13110 1
+13110 13110 1
+1 13111 1
+13111 13111 1
+1 13112 1
+13112 13112 1
+1 13113 1
+13113 13113 1
+1 13114 1
+13114 13114 1
+1 13115 1
+13115 13115 1
+1 13116 1
+13116 13116 1
+1 13117 1
+13117 13117 1
+1 13118 1
+13118 13118 1
+1 13119 1
+13119 13119 1
+1 13120 1
+13120 13120 1
+1 13121 1
+13121 13121 1
+1 13122 1
+13122 13122 1
+1 13123 1
+13123 13123 1
+1 13124 1
+13124 13124 1
+1 13125 1
+13125 13125 1
+1 13126 1
+13126 13126 1
+1 13127 1
+13127 13127 1
+1 13128 1
+13128 13128 1
+1 13129 1
+13129 13129 1
+1 13130 1
+13130 13130 1
+1 13131 1
+13131 13131 1
+1 13132 1
+13132 13132 1
+1 13133 1
+13133 13133 1
+1 13134 1
+13134 13134 1
+1 13135 1
+13135 13135 1
+1 13136 1
+13136 13136 1
+1 13137 1
+13137 13137 1
+1 13138 1
+13138 13138 1
+1 13139 1
+13139 13139 1
+1 13140 1
+13140 13140 1
+1 13141 1
+13141 13141 1
+1 13142 1
+13142 13142 1
+1 13143 1
+13143 13143 1
+1 13144 1
+13144 13144 1
+1 13145 1
+13145 13145 1
+1 13146 1
+13146 13146 1
+1 13147 1
+13147 13147 1
+1 13148 1
+13148 13148 1
+1 13149 1
+13149 13149 1
+1 13150 1
+13150 13150 1
+1 13151 1
+13151 13151 1
+1 13152 1
+13152 13152 1
+1 13153 1
+13153 13153 1
+1 13154 1
+13154 13154 1
+1 13155 1
+13155 13155 1
+1 13156 1
+13156 13156 1
+1 13157 1
+13157 13157 1
+1 13158 1
+13158 13158 1
+1 13159 1
+13159 13159 1
+1 13160 1
+13160 13160 1
+1 13161 1
+13161 13161 1
+1 13162 1
+13162 13162 1
+1 13163 1
+13163 13163 1
+1 13164 1
+13164 13164 1
+1 13165 1
+13165 13165 1
+1 13166 1
+13166 13166 1
+1 13167 1
+13167 13167 1
+1 13168 1
+13168 13168 1
+1 13169 1
+13169 13169 1
+1 13170 1
+13170 13170 1
+1 13171 1
+13171 13171 1
+1 13172 1
+13172 13172 1
+1 13173 1
+13173 13173 1
+1 13174 1
+13174 13174 1
+1 13175 1
+13175 13175 1
+1 13176 1
+13176 13176 1
+1 13177 1
+13177 13177 1
+1 13178 1
+13178 13178 1
+1 13179 1
+13179 13179 1
+1 13180 1
+13180 13180 1
+1 13181 1
+13181 13181 1
+1 13182 1
+13182 13182 1
+1 13183 1
+13183 13183 1
+1 13184 1
+13184 13184 1
+1 13185 1
+13185 13185 1
+1 13186 1
+13186 13186 1
+1 13187 1
+13187 13187 1
+1 13188 1
+13188 13188 1
+1 13189 1
+13189 13189 1
+1 13190 1
+13190 13190 1
+1 13191 1
+13191 13191 1
+1 13192 1
+13192 13192 1
+1 13193 1
+13193 13193 1
+1 13194 1
+13194 13194 1
+1 13195 1
+13195 13195 1
+1 13196 1
+13196 13196 1
+1 13197 1
+13197 13197 1
+1 13198 1
+13198 13198 1
+1 13199 1
+13199 13199 1
+1 13200 1
+13200 13200 1
+1 13201 1
+13201 13201 1
+1 13202 1
+13202 13202 1
+1 13203 1
+13203 13203 1
+1 13204 1
+13204 13204 1
+1 13205 1
+13205 13205 1
+1 13206 1
+13206 13206 1
+1 13207 1
+13207 13207 1
+1 13208 1
+13208 13208 1
+1 13209 1
+13209 13209 1
+1 13210 1
+13210 13210 1
+1 13211 1
+13211 13211 1
+1 13212 1
+13212 13212 1
+1 13213 1
+13213 13213 1
+1 13214 1
+13214 13214 1
+1 13215 1
+13215 13215 1
+1 13216 1
+13216 13216 1
+1 13217 1
+13217 13217 1
+1 13218 1
+13218 13218 1
+1 13219 1
+13219 13219 1
+1 13220 1
+13220 13220 1
+1 13221 1
+13221 13221 1
+1 13222 1
+13222 13222 1
+1 13223 1
+13223 13223 1
+1 13224 1
+13224 13224 1
+1 13225 1
+13225 13225 1
+1 13226 1
+13226 13226 1
+1 13227 1
+13227 13227 1
+1 13228 1
+13228 13228 1
+1 13229 1
+13229 13229 1
+1 13230 1
+13230 13230 1
+1 13231 1
+13231 13231 1
+1 13232 1
+13232 13232 1
+1 13233 1
+13233 13233 1
+1 13234 1
+13234 13234 1
+1 13235 1
+13235 13235 1
+1 13236 1
+13236 13236 1
+1 13237 1
+13237 13237 1
+1 13238 1
+13238 13238 1
+1 13239 1
+13239 13239 1
+1 13240 1
+13240 13240 1
+1 13241 1
+13241 13241 1
+1 13242 1
+13242 13242 1
+1 13243 1
+13243 13243 1
+1 13244 1
+13244 13244 1
+1 13245 1
+13245 13245 1
+1 13246 1
+13246 13246 1
+1 13247 1
+13247 13247 1
+1 13248 1
+13248 13248 1
+1 13249 1
+13249 13249 1
+1 13250 1
+13250 13250 1
+1 13251 1
+13251 13251 1
+1 13252 1
+13252 13252 1
+1 13253 1
+13253 13253 1
+1 13254 1
+13254 13254 1
+1 13255 1
+13255 13255 1
+1 13256 1
+13256 13256 1
+1 13257 1
+13257 13257 1
+1 13258 1
+13258 13258 1
+1 13259 1
+13259 13259 1
+1 13260 1
+13260 13260 1
+1 13261 1
+13261 13261 1
+1 13262 1
+13262 13262 1
+1 13263 1
+13263 13263 1
+1 13264 1
+13264 13264 1
+1 13265 1
+13265 13265 1
+1 13266 1
+13266 13266 1
+1 13267 1
+13267 13267 1
+1 13268 1
+13268 13268 1
+1 13269 1
+13269 13269 1
+1 13270 1
+13270 13270 1
+1 13271 1
+13271 13271 1
+1 13272 1
+13272 13272 1
+1 13273 1
+13273 13273 1
+1 13274 1
+13274 13274 1
+1 13275 1
+13275 13275 1
+1 13276 1
+13276 13276 1
+1 13277 1
+13277 13277 1
+1 13278 1
+13278 13278 1
+1 13279 1
+13279 13279 1
+1 13280 1
+13280 13280 1
+1 13281 1
+13281 13281 1
+1 13282 1
+13282 13282 1
+1 13283 1
+13283 13283 1
+1 13284 1
+13284 13284 1
+1 13285 1
+13285 13285 1
+1 13286 1
+13286 13286 1
+1 13287 1
+13287 13287 1
+1 13288 1
+13288 13288 1
+1 13289 1
+13289 13289 1
+1 13290 1
+13290 13290 1
+1 13291 1
+13291 13291 1
+1 13292 1
+13292 13292 1
+1 13293 1
+13293 13293 1
+1 13294 1
+13294 13294 1
+1 13295 1
+13295 13295 1
+1 13296 1
+13296 13296 1
+1 13297 1
+13297 13297 1
+1 13298 1
+13298 13298 1
+1 13299 1
+13299 13299 1
+1 13300 1
+13300 13300 1
+1 13301 1
+13301 13301 1
+1 13302 1
+13302 13302 1
+1 13303 1
+13303 13303 1
+1 13304 1
+13304 13304 1
+1 13305 1
+13305 13305 1
+1 13306 1
+13306 13306 1
+1 13307 1
+13307 13307 1
+1 13308 1
+13308 13308 1
+1 13309 1
+13309 13309 1
+1 13310 1
+13310 13310 1
+1 13311 1
+13311 13311 1
+1 13312 1
+13312 13312 1
+1 13313 1
+13313 13313 1
+1 13314 1
+13314 13314 1
+1 13315 1
+13315 13315 1
+1 13316 1
+13316 13316 1
+1 13317 1
+13317 13317 1
+1 13318 1
+13318 13318 1
+1 13319 1
+13319 13319 1
+1 13320 1
+13320 13320 1
+1 13321 1
+13321 13321 1
+1 13322 1
+13322 13322 1
+1 13323 1
+13323 13323 1
+1 13324 1
+13324 13324 1
+1 13325 1
+13325 13325 1
+1 13326 1
+13326 13326 1
+1 13327 1
+13327 13327 1
+1 13328 1
+13328 13328 1
+1 13329 1
+13329 13329 1
+1 13330 1
+13330 13330 1
+1 13331 1
+13331 13331 1
+1 13332 1
+13332 13332 1
+1 13333 1
+13333 13333 1
+1 13334 1
+13334 13334 1
+1 13335 1
+13335 13335 1
+1 13336 1
+13336 13336 1
+1 13337 1
+13337 13337 1
+1 13338 1
+13338 13338 1
+1 13339 1
+13339 13339 1
+1 13340 1
+13340 13340 1
+1 13341 1
+13341 13341 1
+1 13342 1
+13342 13342 1
+1 13343 1
+13343 13343 1
+1 13344 1
+13344 13344 1
+1 13345 1
+13345 13345 1
+1 13346 1
+13346 13346 1
+1 13347 1
+13347 13347 1
+1 13348 1
+13348 13348 1
+1 13349 1
+13349 13349 1
+1 13350 1
+13350 13350 1
+1 13351 1
+13351 13351 1
+1 13352 1
+13352 13352 1
+1 13353 1
+13353 13353 1
+1 13354 1
+13354 13354 1
+1 13355 1
+13355 13355 1
+1 13356 1
+13356 13356 1
+1 13357 1
+13357 13357 1
+1 13358 1
+13358 13358 1
+1 13359 1
+13359 13359 1
+1 13360 1
+13360 13360 1
+1 13361 1
+13361 13361 1
+1 13362 1
+13362 13362 1
+1 13363 1
+13363 13363 1
+1 13364 1
+13364 13364 1
+1 13365 1
+13365 13365 1
+1 13366 1
+13366 13366 1
+1 13367 1
+13367 13367 1
+1 13368 1
+13368 13368 1
+1 13369 1
+13369 13369 1
+1 13370 1
+13370 13370 1
+1 13371 1
+13371 13371 1
+1 13372 1
+13372 13372 1
+1 13373 1
+13373 13373 1
+1 13374 1
+13374 13374 1
+1 13375 1
+13375 13375 1
+1 13376 1
+13376 13376 1
+1 13377 1
+13377 13377 1
+1 13378 1
+13378 13378 1
+1 13379 1
+13379 13379 1
+1 13380 1
+13380 13380 1
+1 13381 1
+13381 13381 1
+1 13382 1
+13382 13382 1
+1 13383 1
+13383 13383 1
+1 13384 1
+13384 13384 1
+1 13385 1
+13385 13385 1
+1 13386 1
+13386 13386 1
+1 13387 1
+13387 13387 1
+1 13388 1
+13388 13388 1
+1 13389 1
+13389 13389 1
+1 13390 1
+13390 13390 1
+1 13391 1
+13391 13391 1
+1 13392 1
+13392 13392 1
+1 13393 1
+13393 13393 1
+1 13394 1
+13394 13394 1
+1 13395 1
+13395 13395 1
+1 13396 1
+13396 13396 1
+1 13397 1
+13397 13397 1
+1 13398 1
+13398 13398 1
+1 13399 1
+13399 13399 1
+1 13400 1
+13400 13400 1
+1 13401 1
+13401 13401 1
+1 13402 1
+13402 13402 1
+1 13403 1
+13403 13403 1
+1 13404 1
+13404 13404 1
+1 13405 1
+13405 13405 1
+1 13406 1
+13406 13406 1
+1 13407 1
+13407 13407 1
+1 13408 1
+13408 13408 1
+1 13409 1
+13409 13409 1
+1 13410 1
+13410 13410 1
+1 13411 1
+13411 13411 1
+1 13412 1
+13412 13412 1
+1 13413 1
+13413 13413 1
+1 13414 1
+13414 13414 1
+1 13415 1
+13415 13415 1
+1 13416 1
+13416 13416 1
+1 13417 1
+13417 13417 1
+1 13418 1
+13418 13418 1
+1 13419 1
+13419 13419 1
+1 13420 1
+13420 13420 1
+1 13421 1
+13421 13421 1
+1 13422 1
+13422 13422 1
+1 13423 1
+13423 13423 1
+1 13424 1
+13424 13424 1
+1 13425 1
+13425 13425 1
+1 13426 1
+13426 13426 1
+1 13427 1
+13427 13427 1
+1 13428 1
+13428 13428 1
+1 13429 1
+13429 13429 1
+1 13430 1
+13430 13430 1
+1 13431 1
+13431 13431 1
+1 13432 1
+13432 13432 1
+1 13433 1
+13433 13433 1
+1 13434 1
+13434 13434 1
+1 13435 1
+13435 13435 1
+1 13436 1
+13436 13436 1
+1 13437 1
+13437 13437 1
+1 13438 1
+13438 13438 1
+1 13439 1
+13439 13439 1
+1 13440 1
+13440 13440 1
+1 13441 1
+13441 13441 1
+1 13442 1
+13442 13442 1
+1 13443 1
+13443 13443 1
+1 13444 1
+13444 13444 1
+1 13445 1
+13445 13445 1
+1 13446 1
+13446 13446 1
+1 13447 1
+13447 13447 1
+1 13448 1
+13448 13448 1
+1 13449 1
+13449 13449 1
+1 13450 1
+13450 13450 1
+1 13451 1
+13451 13451 1
+1 13452 1
+13452 13452 1
+1 13453 1
+13453 13453 1
+1 13454 1
+13454 13454 1
+1 13455 1
+13455 13455 1
+1 13456 1
+13456 13456 1
+1 13457 1
+13457 13457 1
+1 13458 1
+13458 13458 1
+1 13459 1
+13459 13459 1
+1 13460 1
+13460 13460 1
+1 13461 1
+13461 13461 1
+1 13462 1
+13462 13462 1
+1 13463 1
+13463 13463 1
+1 13464 1
+13464 13464 1
+1 13465 1
+13465 13465 1
+1 13466 1
+13466 13466 1
+1 13467 1
+13467 13467 1
+1 13468 1
+13468 13468 1
+1 13469 1
+13469 13469 1
+1 13470 1
+13470 13470 1
+1 13471 1
+13471 13471 1
+1 13472 1
+13472 13472 1
+1 13473 1
+13473 13473 1
+1 13474 1
+13474 13474 1
+1 13475 1
+13475 13475 1
+1 13476 1
+13476 13476 1
+1 13477 1
+13477 13477 1
+1 13478 1
+13478 13478 1
+1 13479 1
+13479 13479 1
+1 13480 1
+13480 13480 1
+1 13481 1
+13481 13481 1
+1 13482 1
+13482 13482 1
+1 13483 1
+13483 13483 1
+1 13484 1
+13484 13484 1
+1 13485 1
+13485 13485 1
+1 13486 1
+13486 13486 1
+1 13487 1
+13487 13487 1
+1 13488 1
+13488 13488 1
+1 13489 1
+13489 13489 1
+1 13490 1
+13490 13490 1
+1 13491 1
+13491 13491 1
+1 13492 1
+13492 13492 1
+1 13493 1
+13493 13493 1
+1 13494 1
+13494 13494 1
+1 13495 1
+13495 13495 1
+1 13496 1
+13496 13496 1
+1 13497 1
+13497 13497 1
+1 13498 1
+13498 13498 1
+1 13499 1
+13499 13499 1
+1 13500 1
+13500 13500 1
+1 13501 1
+13501 13501 1
+1 13502 1
+13502 13502 1
+1 13503 1
+13503 13503 1
+1 13504 1
+13504 13504 1
+1 13505 1
+13505 13505 1
+1 13506 1
+13506 13506 1
+1 13507 1
+13507 13507 1
+1 13508 1
+13508 13508 1
+1 13509 1
+13509 13509 1
+1 13510 1
+13510 13510 1
+1 13511 1
+13511 13511 1
+1 13512 1
+13512 13512 1
+1 13513 1
+13513 13513 1
+1 13514 1
+13514 13514 1
+1 13515 1
+13515 13515 1
+1 13516 1
+13516 13516 1
+1 13517 1
+13517 13517 1
+1 13518 1
+13518 13518 1
+1 13519 1
+13519 13519 1
+1 13520 1
+13520 13520 1
+1 13521 1
+13521 13521 1
+1 13522 1
+13522 13522 1
+1 13523 1
+13523 13523 1
+1 13524 1
+13524 13524 1
+1 13525 1
+13525 13525 1
+1 13526 1
+13526 13526 1
+1 13527 1
+13527 13527 1
+1 13528 1
+13528 13528 1
+1 13529 1
+13529 13529 1
+1 13530 1
+13530 13530 1
+1 13531 1
+13531 13531 1
+1 13532 1
+13532 13532 1
+1 13533 1
+13533 13533 1
+1 13534 1
+13534 13534 1
+1 13535 1
+13535 13535 1
+1 13536 1
+13536 13536 1
+1 13537 1
+13537 13537 1
+1 13538 1
+13538 13538 1
+1 13539 1
+13539 13539 1
+1 13540 1
+13540 13540 1
+1 13541 1
+13541 13541 1
+1 13542 1
+13542 13542 1
+1 13543 1
+13543 13543 1
+1 13544 1
+13544 13544 1
+1 13545 1
+13545 13545 1
+1 13546 1
+13546 13546 1
+1 13547 1
+13547 13547 1
+1 13548 1
+13548 13548 1
+1 13549 1
+13549 13549 1
+1 13550 1
+13550 13550 1
+1 13551 1
+13551 13551 1
+1 13552 1
+13552 13552 1
+1 13553 1
+13553 13553 1
+1 13554 1
+13554 13554 1
+1 13555 1
+13555 13555 1
+1 13556 1
+13556 13556 1
+1 13557 1
+13557 13557 1
+1 13558 1
+13558 13558 1
+1 13559 1
+13559 13559 1
+1 13560 1
+13560 13560 1
+1 13561 1
+13561 13561 1
+1 13562 1
+13562 13562 1
+1 13563 1
+13563 13563 1
+1 13564 1
+13564 13564 1
+1 13565 1
+13565 13565 1
+1 13566 1
+13566 13566 1
+1 13567 1
+13567 13567 1
+1 13568 1
+13568 13568 1
+1 13569 1
+13569 13569 1
+1 13570 1
+13570 13570 1
+1 13571 1
+13571 13571 1
+1 13572 1
+13572 13572 1
+1 13573 1
+13573 13573 1
+1 13574 1
+13574 13574 1
+1 13575 1
+13575 13575 1
+1 13576 1
+13576 13576 1
+1 13577 1
+13577 13577 1
+1 13578 1
+13578 13578 1
+1 13579 1
+13579 13579 1
+1 13580 1
+13580 13580 1
+1 13581 1
+13581 13581 1
+1 13582 1
+13582 13582 1
+1 13583 1
+13583 13583 1
+1 13584 1
+13584 13584 1
+1 13585 1
+13585 13585 1
+1 13586 1
+13586 13586 1
+1 13587 1
+13587 13587 1
+1 13588 1
+13588 13588 1
+1 13589 1
+13589 13589 1
+1 13590 1
+13590 13590 1
+1 13591 1
+13591 13591 1
+1 13592 1
+13592 13592 1
+1 13593 1
+13593 13593 1
+1 13594 1
+13594 13594 1
+1 13595 1
+13595 13595 1
+1 13596 1
+13596 13596 1
+1 13597 1
+13597 13597 1
+1 13598 1
+13598 13598 1
+1 13599 1
+13599 13599 1
+1 13600 1
+13600 13600 1
+1 13601 1
+13601 13601 1
+1 13602 1
+13602 13602 1
+1 13603 1
+13603 13603 1
+1 13604 1
+13604 13604 1
+1 13605 1
+13605 13605 1
+1 13606 1
+13606 13606 1
+1 13607 1
+13607 13607 1
+1 13608 1
+13608 13608 1
+1 13609 1
+13609 13609 1
+1 13610 1
+13610 13610 1
+1 13611 1
+13611 13611 1
+1 13612 1
+13612 13612 1
+1 13613 1
+13613 13613 1
+1 13614 1
+13614 13614 1
+1 13615 1
+13615 13615 1
+1 13616 1
+13616 13616 1
+1 13617 1
+13617 13617 1
+1 13618 1
+13618 13618 1
+1 13619 1
+13619 13619 1
+1 13620 1
+13620 13620 1
+1 13621 1
+13621 13621 1
+1 13622 1
+13622 13622 1
+1 13623 1
+13623 13623 1
+1 13624 1
+13624 13624 1
+1 13625 1
+13625 13625 1
+1 13626 1
+13626 13626 1
+1 13627 1
+13627 13627 1
+1 13628 1
+13628 13628 1
+1 13629 1
+13629 13629 1
+1 13630 1
+13630 13630 1
+1 13631 1
+13631 13631 1
+1 13632 1
+13632 13632 1
+1 13633 1
+13633 13633 1
+1 13634 1
+13634 13634 1
+1 13635 1
+13635 13635 1
+1 13636 1
+13636 13636 1
+1 13637 1
+13637 13637 1
+1 13638 1
+13638 13638 1
+1 13639 1
+13639 13639 1
+1 13640 1
+13640 13640 1
+1 13641 1
+13641 13641 1
+1 13642 1
+13642 13642 1
+1 13643 1
+13643 13643 1
+1 13644 1
+13644 13644 1
+1 13645 1
+13645 13645 1
+1 13646 1
+13646 13646 1
+1 13647 1
+13647 13647 1
+1 13648 1
+13648 13648 1
+1 13649 1
+13649 13649 1
+1 13650 1
+13650 13650 1
+1 13651 1
+13651 13651 1
+1 13652 1
+13652 13652 1
+1 13653 1
+13653 13653 1
+1 13654 1
+13654 13654 1
+1 13655 1
+13655 13655 1
+1 13656 1
+13656 13656 1
+1 13657 1
+13657 13657 1
+1 13658 1
+13658 13658 1
+1 13659 1
+13659 13659 1
+1 13660 1
+13660 13660 1
+1 13661 1
+13661 13661 1
+1 13662 1
+13662 13662 1
+1 13663 1
+13663 13663 1
+1 13664 1
+13664 13664 1
+1 13665 1
+13665 13665 1
+1 13666 1
+13666 13666 1
+1 13667 1
+13667 13667 1
+1 13668 1
+13668 13668 1
+1 13669 1
+13669 13669 1
+1 13670 1
+13670 13670 1
+1 13671 1
+13671 13671 1
+1 13672 1
+13672 13672 1
+1 13673 1
+13673 13673 1
+1 13674 1
+13674 13674 1
+1 13675 1
+13675 13675 1
+1 13676 1
+13676 13676 1
+1 13677 1
+13677 13677 1
+1 13678 1
+13678 13678 1
+1 13679 1
+13679 13679 1
+1 13680 1
+13680 13680 1
+1 13681 1
+13681 13681 1
+1 13682 1
+13682 13682 1
+1 13683 1
+13683 13683 1
+1 13684 1
+13684 13684 1
+1 13685 1
+13685 13685 1
+1 13686 1
+13686 13686 1
+1 13687 1
+13687 13687 1
+1 13688 1
+13688 13688 1
+1 13689 1
+13689 13689 1
+1 13690 1
+13690 13690 1
+1 13691 1
+13691 13691 1
+1 13692 1
+13692 13692 1
+1 13693 1
+13693 13693 1
+1 13694 1
+13694 13694 1
+1 13695 1
+13695 13695 1
+1 13696 1
+13696 13696 1
+1 13697 1
+13697 13697 1
+1 13698 1
+13698 13698 1
+1 13699 1
+13699 13699 1
+1 13700 1
+13700 13700 1
+1 13701 1
+13701 13701 1
+1 13702 1
+13702 13702 1
+1 13703 1
+13703 13703 1
+1 13704 1
+13704 13704 1
+1 13705 1
+13705 13705 1
+1 13706 1
+13706 13706 1
+1 13707 1
+13707 13707 1
+1 13708 1
+13708 13708 1
+1 13709 1
+13709 13709 1
+1 13710 1
+13710 13710 1
+1 13711 1
+13711 13711 1
+1 13712 1
+13712 13712 1
+1 13713 1
+13713 13713 1
+1 13714 1
+13714 13714 1
+1 13715 1
+13715 13715 1
+1 13716 1
+13716 13716 1
+1 13717 1
+13717 13717 1
+1 13718 1
+13718 13718 1
+1 13719 1
+13719 13719 1
+1 13720 1
+13720 13720 1
+1 13721 1
+13721 13721 1
+1 13722 1
+13722 13722 1
+1 13723 1
+13723 13723 1
+1 13724 1
+13724 13724 1
+1 13725 1
+13725 13725 1
+1 13726 1
+13726 13726 1
+1 13727 1
+13727 13727 1
+1 13728 1
+13728 13728 1
+1 13729 1
+13729 13729 1
+1 13730 1
+13730 13730 1
+1 13731 1
+13731 13731 1
+1 13732 1
+13732 13732 1
+1 13733 1
+13733 13733 1
+1 13734 1
+13734 13734 1
+1 13735 1
+13735 13735 1
+1 13736 1
+13736 13736 1
+1 13737 1
+13737 13737 1
+1 13738 1
+13738 13738 1
+1 13739 1
+13739 13739 1
+1 13740 1
+13740 13740 1
+1 13741 1
+13741 13741 1
+1 13742 1
+13742 13742 1
+1 13743 1
+13743 13743 1
+1 13744 1
+13744 13744 1
+1 13745 1
+13745 13745 1
+1 13746 1
+13746 13746 1
+1 13747 1
+13747 13747 1
+1 13748 1
+13748 13748 1
+1 13749 1
+13749 13749 1
+1 13750 1
+13750 13750 1
+1 13751 1
+13751 13751 1
+1 13752 1
+13752 13752 1
+1 13753 1
+13753 13753 1
+1 13754 1
+13754 13754 1
+1 13755 1
+13755 13755 1
+1 13756 1
+13756 13756 1
+1 13757 1
+13757 13757 1
+1 13758 1
+13758 13758 1
+1 13759 1
+13759 13759 1
+1 13760 1
+13760 13760 1
+1 13761 1
+13761 13761 1
+1 13762 1
+13762 13762 1
+1 13763 1
+13763 13763 1
+1 13764 1
+13764 13764 1
+1 13765 1
+13765 13765 1
+1 13766 1
+13766 13766 1
+1 13767 1
+13767 13767 1
+1 13768 1
+13768 13768 1
+1 13769 1
+13769 13769 1
+1 13770 1
+13770 13770 1
+1 13771 1
+13771 13771 1
+1 13772 1
+13772 13772 1
+1 13773 1
+13773 13773 1
+1 13774 1
+13774 13774 1
+1 13775 1
+13775 13775 1
+1 13776 1
+13776 13776 1
+1 13777 1
+13777 13777 1
+1 13778 1
+13778 13778 1
+1 13779 1
+13779 13779 1
+1 13780 1
+13780 13780 1
+1 13781 1
+13781 13781 1
+1 13782 1
+13782 13782 1
+1 13783 1
+13783 13783 1
+1 13784 1
+13784 13784 1
+1 13785 1
+13785 13785 1
+1 13786 1
+13786 13786 1
+1 13787 1
+13787 13787 1
+1 13788 1
+13788 13788 1
+1 13789 1
+13789 13789 1
+1 13790 1
+13790 13790 1
+1 13791 1
+13791 13791 1
+1 13792 1
+13792 13792 1
+1 13793 1
+13793 13793 1
+1 13794 1
+13794 13794 1
+1 13795 1
+13795 13795 1
+1 13796 1
+13796 13796 1
+1 13797 1
+13797 13797 1
+1 13798 1
+13798 13798 1
+1 13799 1
+13799 13799 1
+1 13800 1
+13800 13800 1
+1 13801 1
+13801 13801 1
+1 13802 1
+13802 13802 1
+1 13803 1
+13803 13803 1
+1 13804 1
+13804 13804 1
+1 13805 1
+13805 13805 1
+1 13806 1
+13806 13806 1
+1 13807 1
+13807 13807 1
+1 13808 1
+13808 13808 1
+1 13809 1
+13809 13809 1
+1 13810 1
+13810 13810 1
+1 13811 1
+13811 13811 1
+1 13812 1
+13812 13812 1
+1 13813 1
+13813 13813 1
+1 13814 1
+13814 13814 1
+1 13815 1
+13815 13815 1
+1 13816 1
+13816 13816 1
+1 13817 1
+13817 13817 1
+1 13818 1
+13818 13818 1
+1 13819 1
+13819 13819 1
+1 13820 1
+13820 13820 1
+1 13821 1
+13821 13821 1
+1 13822 1
+13822 13822 1
+1 13823 1
+13823 13823 1
+1 13824 1
+13824 13824 1
+1 13825 1
+13825 13825 1
+1 13826 1
+13826 13826 1
+1 13827 1
+13827 13827 1
+1 13828 1
+13828 13828 1
+1 13829 1
+13829 13829 1
+1 13830 1
+13830 13830 1
+1 13831 1
+13831 13831 1
+1 13832 1
+13832 13832 1
+1 13833 1
+13833 13833 1
+1 13834 1
+13834 13834 1
+1 13835 1
+13835 13835 1
+1 13836 1
+13836 13836 1
+1 13837 1
+13837 13837 1
+1 13838 1
+13838 13838 1
+1 13839 1
+13839 13839 1
+1 13840 1
+13840 13840 1
+1 13841 1
+13841 13841 1
+1 13842 1
+13842 13842 1
+1 13843 1
+13843 13843 1
+1 13844 1
+13844 13844 1
+1 13845 1
+13845 13845 1
+1 13846 1
+13846 13846 1
+1 13847 1
+13847 13847 1
+1 13848 1
+13848 13848 1
+1 13849 1
+13849 13849 1
+1 13850 1
+13850 13850 1
+1 13851 1
+13851 13851 1
+1 13852 1
+13852 13852 1
+1 13853 1
+13853 13853 1
+1 13854 1
+13854 13854 1
+1 13855 1
+13855 13855 1
+1 13856 1
+13856 13856 1
+1 13857 1
+13857 13857 1
+1 13858 1
+13858 13858 1
+1 13859 1
+13859 13859 1
+1 13860 1
+13860 13860 1
+1 13861 1
+13861 13861 1
+1 13862 1
+13862 13862 1
+1 13863 1
+13863 13863 1
+1 13864 1
+13864 13864 1
+1 13865 1
+13865 13865 1
+1 13866 1
+13866 13866 1
+1 13867 1
+13867 13867 1
+1 13868 1
+13868 13868 1
+1 13869 1
+13869 13869 1
+1 13870 1
+13870 13870 1
+1 13871 1
+13871 13871 1
+1 13872 1
+13872 13872 1
+1 13873 1
+13873 13873 1
+1 13874 1
+13874 13874 1
+1 13875 1
+13875 13875 1
+1 13876 1
+13876 13876 1
+1 13877 1
+13877 13877 1
+1 13878 1
+13878 13878 1
+1 13879 1
+13879 13879 1
+1 13880 1
+13880 13880 1
+1 13881 1
+13881 13881 1
+1 13882 1
+13882 13882 1
+1 13883 1
+13883 13883 1
+1 13884 1
+13884 13884 1
+1 13885 1
+13885 13885 1
+1 13886 1
+13886 13886 1
+1 13887 1
+13887 13887 1
+1 13888 1
+13888 13888 1
+1 13889 1
+13889 13889 1
+1 13890 1
+13890 13890 1
+1 13891 1
+13891 13891 1
+1 13892 1
+13892 13892 1
+1 13893 1
+13893 13893 1
+1 13894 1
+13894 13894 1
+1 13895 1
+13895 13895 1
+1 13896 1
+13896 13896 1
+1 13897 1
+13897 13897 1
+1 13898 1
+13898 13898 1
+1 13899 1
+13899 13899 1
+1 13900 1
+13900 13900 1
+1 13901 1
+13901 13901 1
+1 13902 1
+13902 13902 1
+1 13903 1
+13903 13903 1
+1 13904 1
+13904 13904 1
+1 13905 1
+13905 13905 1
+1 13906 1
+13906 13906 1
+1 13907 1
+13907 13907 1
+1 13908 1
+13908 13908 1
+1 13909 1
+13909 13909 1
+1 13910 1
+13910 13910 1
+1 13911 1
+13911 13911 1
+1 13912 1
+13912 13912 1
+1 13913 1
+13913 13913 1
+1 13914 1
+13914 13914 1
+1 13915 1
+13915 13915 1
+1 13916 1
+13916 13916 1
+1 13917 1
+13917 13917 1
+1 13918 1
+13918 13918 1
+1 13919 1
+13919 13919 1
+1 13920 1
+13920 13920 1
+1 13921 1
+13921 13921 1
+1 13922 1
+13922 13922 1
+1 13923 1
+13923 13923 1
+1 13924 1
+13924 13924 1
+1 13925 1
+13925 13925 1
+1 13926 1
+13926 13926 1
+1 13927 1
+13927 13927 1
+1 13928 1
+13928 13928 1
+1 13929 1
+13929 13929 1
+1 13930 1
+13930 13930 1
+1 13931 1
+13931 13931 1
+1 13932 1
+13932 13932 1
+1 13933 1
+13933 13933 1
+1 13934 1
+13934 13934 1
+1 13935 1
+13935 13935 1
+1 13936 1
+13936 13936 1
+1 13937 1
+13937 13937 1
+1 13938 1
+13938 13938 1
+1 13939 1
+13939 13939 1
+1 13940 1
+13940 13940 1
+1 13941 1
+13941 13941 1
+1 13942 1
+13942 13942 1
+1 13943 1
+13943 13943 1
+1 13944 1
+13944 13944 1
+1 13945 1
+13945 13945 1
+1 13946 1
+13946 13946 1
+1 13947 1
+13947 13947 1
+1 13948 1
+13948 13948 1
+1 13949 1
+13949 13949 1
+1 13950 1
+13950 13950 1
+1 13951 1
+13951 13951 1
+1 13952 1
+13952 13952 1
+1 13953 1
+13953 13953 1
+1 13954 1
+13954 13954 1
+1 13955 1
+13955 13955 1
+1 13956 1
+13956 13956 1
+1 13957 1
+13957 13957 1
+1 13958 1
+13958 13958 1
+1 13959 1
+13959 13959 1
+1 13960 1
+13960 13960 1
+1 13961 1
+13961 13961 1
+1 13962 1
+13962 13962 1
+1 13963 1
+13963 13963 1
+1 13964 1
+13964 13964 1
+1 13965 1
+13965 13965 1
+1 13966 1
+13966 13966 1
+1 13967 1
+13967 13967 1
+1 13968 1
+13968 13968 1
+1 13969 1
+13969 13969 1
+1 13970 1
+13970 13970 1
+1 13971 1
+13971 13971 1
+1 13972 1
+13972 13972 1
+1 13973 1
+13973 13973 1
+1 13974 1
+13974 13974 1
+1 13975 1
+13975 13975 1
+1 13976 1
+13976 13976 1
+1 13977 1
+13977 13977 1
+1 13978 1
+13978 13978 1
+1 13979 1
+13979 13979 1
+1 13980 1
+13980 13980 1
+1 13981 1
+13981 13981 1
+1 13982 1
+13982 13982 1
+1 13983 1
+13983 13983 1
+1 13984 1
+13984 13984 1
+1 13985 1
+13985 13985 1
+1 13986 1
+13986 13986 1
+1 13987 1
+13987 13987 1
+1 13988 1
+13988 13988 1
+1 13989 1
+13989 13989 1
+1 13990 1
+13990 13990 1
+1 13991 1
+13991 13991 1
+1 13992 1
+13992 13992 1
+1 13993 1
+13993 13993 1
+1 13994 1
+13994 13994 1
+1 13995 1
+13995 13995 1
+1 13996 1
+13996 13996 1
+1 13997 1
+13997 13997 1
+1 13998 1
+13998 13998 1
+1 13999 1
+13999 13999 1
+1 14000 1
+14000 14000 1
+1 14001 1
+14001 14001 1
+1 14002 1
+14002 14002 1
+1 14003 1
+14003 14003 1
+1 14004 1
+14004 14004 1
+1 14005 1
+14005 14005 1
+1 14006 1
+14006 14006 1
+1 14007 1
+14007 14007 1
+1 14008 1
+14008 14008 1
+1 14009 1
+14009 14009 1
+1 14010 1
+14010 14010 1
+1 14011 1
+14011 14011 1
+1 14012 1
+14012 14012 1
+1 14013 1
+14013 14013 1
+1 14014 1
+14014 14014 1
+1 14015 1
+14015 14015 1
+1 14016 1
+14016 14016 1
+1 14017 1
+14017 14017 1
+1 14018 1
+14018 14018 1
+1 14019 1
+14019 14019 1
+1 14020 1
+14020 14020 1
+1 14021 1
+14021 14021 1
+1 14022 1
+14022 14022 1
+1 14023 1
+14023 14023 1
+1 14024 1
+14024 14024 1
+1 14025 1
+14025 14025 1
+1 14026 1
+14026 14026 1
+1 14027 1
+14027 14027 1
+1 14028 1
+14028 14028 1
+1 14029 1
+14029 14029 1
+1 14030 1
+14030 14030 1
+1 14031 1
+14031 14031 1
+1 14032 1
+14032 14032 1
+1 14033 1
+14033 14033 1
+1 14034 1
+14034 14034 1
+1 14035 1
+14035 14035 1
+1 14036 1
+14036 14036 1
+1 14037 1
+14037 14037 1
+1 14038 1
+14038 14038 1
+1 14039 1
+14039 14039 1
+1 14040 1
+14040 14040 1
+1 14041 1
+14041 14041 1
+1 14042 1
+14042 14042 1
+1 14043 1
+14043 14043 1
+1 14044 1
+14044 14044 1
+1 14045 1
+14045 14045 1
+1 14046 1
+14046 14046 1
+1 14047 1
+14047 14047 1
+1 14048 1
+14048 14048 1
+1 14049 1
+14049 14049 1
+1 14050 1
+14050 14050 1
+1 14051 1
+14051 14051 1
+1 14052 1
+14052 14052 1
+1 14053 1
+14053 14053 1
+1 14054 1
+14054 14054 1
+1 14055 1
+14055 14055 1
+1 14056 1
+14056 14056 1
+1 14057 1
+14057 14057 1
+1 14058 1
+14058 14058 1
+1 14059 1
+14059 14059 1
+1 14060 1
+14060 14060 1
+1 14061 1
+14061 14061 1
+1 14062 1
+14062 14062 1
+1 14063 1
+14063 14063 1
+1 14064 1
+14064 14064 1
+1 14065 1
+14065 14065 1
+1 14066 1
+14066 14066 1
+1 14067 1
+14067 14067 1
+1 14068 1
+14068 14068 1
+1 14069 1
+14069 14069 1
+1 14070 1
+14070 14070 1
+1 14071 1
+14071 14071 1
+1 14072 1
+14072 14072 1
+1 14073 1
+14073 14073 1
+1 14074 1
+14074 14074 1
+1 14075 1
+14075 14075 1
+1 14076 1
+14076 14076 1
+1 14077 1
+14077 14077 1
+1 14078 1
+14078 14078 1
+1 14079 1
+14079 14079 1
+1 14080 1
+14080 14080 1
+1 14081 1
+14081 14081 1
+1 14082 1
+14082 14082 1
+1 14083 1
+14083 14083 1
+1 14084 1
+14084 14084 1
+1 14085 1
+14085 14085 1
+1 14086 1
+14086 14086 1
+1 14087 1
+14087 14087 1
+1 14088 1
+14088 14088 1
+1 14089 1
+14089 14089 1
+1 14090 1
+14090 14090 1
+1 14091 1
+14091 14091 1
+1 14092 1
+14092 14092 1
+1 14093 1
+14093 14093 1
+1 14094 1
+14094 14094 1
+1 14095 1
+14095 14095 1
+1 14096 1
+14096 14096 1
+1 14097 1
+14097 14097 1
+1 14098 1
+14098 14098 1
+1 14099 1
+14099 14099 1
+1 14100 1
+14100 14100 1
+1 14101 1
+14101 14101 1
+1 14102 1
+14102 14102 1
+1 14103 1
+14103 14103 1
+1 14104 1
+14104 14104 1
+1 14105 1
+14105 14105 1
+1 14106 1
+14106 14106 1
+1 14107 1
+14107 14107 1
+1 14108 1
+14108 14108 1
+1 14109 1
+14109 14109 1
+1 14110 1
+14110 14110 1
+1 14111 1
+14111 14111 1
+1 14112 1
+14112 14112 1
+1 14113 1
+14113 14113 1
+1 14114 1
+14114 14114 1
+1 14115 1
+14115 14115 1
+1 14116 1
+14116 14116 1
+1 14117 1
+14117 14117 1
+1 14118 1
+14118 14118 1
+1 14119 1
+14119 14119 1
+1 14120 1
+14120 14120 1
+1 14121 1
+14121 14121 1
+1 14122 1
+14122 14122 1
+1 14123 1
+14123 14123 1
+1 14124 1
+14124 14124 1
+1 14125 1
+14125 14125 1
+1 14126 1
+14126 14126 1
+1 14127 1
+14127 14127 1
+1 14128 1
+14128 14128 1
+1 14129 1
+14129 14129 1
+1 14130 1
+14130 14130 1
+1 14131 1
+14131 14131 1
+1 14132 1
+14132 14132 1
+1 14133 1
+14133 14133 1
+1 14134 1
+14134 14134 1
+1 14135 1
+14135 14135 1
+1 14136 1
+14136 14136 1
+1 14137 1
+14137 14137 1
+1 14138 1
+14138 14138 1
+1 14139 1
+14139 14139 1
+1 14140 1
+14140 14140 1
+1 14141 1
+14141 14141 1
+1 14142 1
+14142 14142 1
+1 14143 1
+14143 14143 1
+1 14144 1
+14144 14144 1
+1 14145 1
+14145 14145 1
+1 14146 1
+14146 14146 1
+1 14147 1
+14147 14147 1
+1 14148 1
+14148 14148 1
+1 14149 1
+14149 14149 1
+1 14150 1
+14150 14150 1
+1 14151 1
+14151 14151 1
+1 14152 1
+14152 14152 1
+1 14153 1
+14153 14153 1
+1 14154 1
+14154 14154 1
+1 14155 1
+14155 14155 1
+1 14156 1
+14156 14156 1
+1 14157 1
+14157 14157 1
+1 14158 1
+14158 14158 1
+1 14159 1
+14159 14159 1
+1 14160 1
+14160 14160 1
+1 14161 1
+14161 14161 1
+1 14162 1
+14162 14162 1
+1 14163 1
+14163 14163 1
+1 14164 1
+14164 14164 1
+1 14165 1
+14165 14165 1
+1 14166 1
+14166 14166 1
+1 14167 1
+14167 14167 1
+1 14168 1
+14168 14168 1
+1 14169 1
+14169 14169 1
+1 14170 1
+14170 14170 1
+1 14171 1
+14171 14171 1
+1 14172 1
+14172 14172 1
+1 14173 1
+14173 14173 1
+1 14174 1
+14174 14174 1
+1 14175 1
+14175 14175 1
+1 14176 1
+14176 14176 1
+1 14177 1
+14177 14177 1
+1 14178 1
+14178 14178 1
+1 14179 1
+14179 14179 1
+1 14180 1
+14180 14180 1
+1 14181 1
+14181 14181 1
+1 14182 1
+14182 14182 1
+1 14183 1
+14183 14183 1
+1 14184 1
+14184 14184 1
+1 14185 1
+14185 14185 1
+1 14186 1
+14186 14186 1
+1 14187 1
+14187 14187 1
+1 14188 1
+14188 14188 1
+1 14189 1
+14189 14189 1
+1 14190 1
+14190 14190 1
+1 14191 1
+14191 14191 1
+1 14192 1
+14192 14192 1
+1 14193 1
+14193 14193 1
+1 14194 1
+14194 14194 1
+1 14195 1
+14195 14195 1
+1 14196 1
+14196 14196 1
+1 14197 1
+14197 14197 1
+1 14198 1
+14198 14198 1
+1 14199 1
+14199 14199 1
+1 14200 1
+14200 14200 1
+1 14201 1
+14201 14201 1
+1 14202 1
+14202 14202 1
+1 14203 1
+14203 14203 1
+1 14204 1
+14204 14204 1
+1 14205 1
+14205 14205 1
+1 14206 1
+14206 14206 1
+1 14207 1
+14207 14207 1
+1 14208 1
+14208 14208 1
+1 14209 1
+14209 14209 1
+1 14210 1
+14210 14210 1
+1 14211 1
+14211 14211 1
+1 14212 1
+14212 14212 1
+1 14213 1
+14213 14213 1
+1 14214 1
+14214 14214 1
+1 14215 1
+14215 14215 1
+1 14216 1
+14216 14216 1
+1 14217 1
+14217 14217 1
+1 14218 1
+14218 14218 1
+1 14219 1
+14219 14219 1
+1 14220 1
+14220 14220 1
+1 14221 1
+14221 14221 1
+1 14222 1
+14222 14222 1
+1 14223 1
+14223 14223 1
+1 14224 1
+14224 14224 1
+1 14225 1
+14225 14225 1
+1 14226 1
+14226 14226 1
+1 14227 1
+14227 14227 1
+1 14228 1
+14228 14228 1
+1 14229 1
+14229 14229 1
+1 14230 1
+14230 14230 1
+1 14231 1
+14231 14231 1
+1 14232 1
+14232 14232 1
+1 14233 1
+14233 14233 1
+1 14234 1
+14234 14234 1
+1 14235 1
+14235 14235 1
+1 14236 1
+14236 14236 1
+1 14237 1
+14237 14237 1
+1 14238 1
+14238 14238 1
+1 14239 1
+14239 14239 1
+1 14240 1
+14240 14240 1
+1 14241 1
+14241 14241 1
+1 14242 1
+14242 14242 1
+1 14243 1
+14243 14243 1
+1 14244 1
+14244 14244 1
+1 14245 1
+14245 14245 1
+1 14246 1
+14246 14246 1
+1 14247 1
+14247 14247 1
+1 14248 1
+14248 14248 1
+1 14249 1
+14249 14249 1
+1 14250 1
+14250 14250 1
+1 14251 1
+14251 14251 1
+1 14252 1
+14252 14252 1
+1 14253 1
+14253 14253 1
+1 14254 1
+14254 14254 1
+1 14255 1
+14255 14255 1
+1 14256 1
+14256 14256 1
+1 14257 1
+14257 14257 1
+1 14258 1
+14258 14258 1
+1 14259 1
+14259 14259 1
+1 14260 1
+14260 14260 1
+1 14261 1
+14261 14261 1
+1 14262 1
+14262 14262 1
+1 14263 1
+14263 14263 1
+1 14264 1
+14264 14264 1
+1 14265 1
+14265 14265 1
+1 14266 1
+14266 14266 1
+1 14267 1
+14267 14267 1
+1 14268 1
+14268 14268 1
+1 14269 1
+14269 14269 1
+1 14270 1
+14270 14270 1
+1 14271 1
+14271 14271 1
+1 14272 1
+14272 14272 1
+1 14273 1
+14273 14273 1
+1 14274 1
+14274 14274 1
+1 14275 1
+14275 14275 1
+1 14276 1
+14276 14276 1
+1 14277 1
+14277 14277 1
+1 14278 1
+14278 14278 1
+1 14279 1
+14279 14279 1
+1 14280 1
+14280 14280 1
+1 14281 1
+14281 14281 1
+1 14282 1
+14282 14282 1
+1 14283 1
+14283 14283 1
+1 14284 1
+14284 14284 1
+1 14285 1
+14285 14285 1
+1 14286 1
+14286 14286 1
+1 14287 1
+14287 14287 1
+1 14288 1
+14288 14288 1
+1 14289 1
+14289 14289 1
+1 14290 1
+14290 14290 1
+1 14291 1
+14291 14291 1
+1 14292 1
+14292 14292 1
+1 14293 1
+14293 14293 1
+1 14294 1
+14294 14294 1
+1 14295 1
+14295 14295 1
+1 14296 1
+14296 14296 1
+1 14297 1
+14297 14297 1
+1 14298 1
+14298 14298 1
+1 14299 1
+14299 14299 1
+1 14300 1
+14300 14300 1
+1 14301 1
+14301 14301 1
+1 14302 1
+14302 14302 1
+1 14303 1
+14303 14303 1
+1 14304 1
+14304 14304 1
+1 14305 1
+14305 14305 1
+1 14306 1
+14306 14306 1
+1 14307 1
+14307 14307 1
+1 14308 1
+14308 14308 1
+1 14309 1
+14309 14309 1
+1 14310 1
+14310 14310 1
+1 14311 1
+14311 14311 1
+1 14312 1
+14312 14312 1
+1 14313 1
+14313 14313 1
+1 14314 1
+14314 14314 1
+1 14315 1
+14315 14315 1
+1 14316 1
+14316 14316 1
+1 14317 1
+14317 14317 1
+1 14318 1
+14318 14318 1
+1 14319 1
+14319 14319 1
+1 14320 1
+14320 14320 1
+1 14321 1
+14321 14321 1
+1 14322 1
+14322 14322 1
+1 14323 1
+14323 14323 1
+1 14324 1
+14324 14324 1
+1 14325 1
+14325 14325 1
+1 14326 1
+14326 14326 1
+1 14327 1
+14327 14327 1
+1 14328 1
+14328 14328 1
+1 14329 1
+14329 14329 1
+1 14330 1
+14330 14330 1
+1 14331 1
+14331 14331 1
+1 14332 1
+14332 14332 1
+1 14333 1
+14333 14333 1
+1 14334 1
+14334 14334 1
+1 14335 1
+14335 14335 1
+1 14336 1
+14336 14336 1
+1 14337 1
+14337 14337 1
+1 14338 1
+14338 14338 1
+1 14339 1
+14339 14339 1
+1 14340 1
+14340 14340 1
+1 14341 1
+14341 14341 1
+1 14342 1
+14342 14342 1
+1 14343 1
+14343 14343 1
+1 14344 1
+14344 14344 1
+1 14345 1
+14345 14345 1
+1 14346 1
+14346 14346 1
+1 14347 1
+14347 14347 1
+1 14348 1
+14348 14348 1
+1 14349 1
+14349 14349 1
+1 14350 1
+14350 14350 1
+1 14351 1
+14351 14351 1
+1 14352 1
+14352 14352 1
+1 14353 1
+14353 14353 1
+1 14354 1
+14354 14354 1
+1 14355 1
+14355 14355 1
+1 14356 1
+14356 14356 1
+1 14357 1
+14357 14357 1
+1 14358 1
+14358 14358 1
+1 14359 1
+14359 14359 1
+1 14360 1
+14360 14360 1
+1 14361 1
+14361 14361 1
+1 14362 1
+14362 14362 1
+1 14363 1
+14363 14363 1
+1 14364 1
+14364 14364 1
+1 14365 1
+14365 14365 1
+1 14366 1
+14366 14366 1
+1 14367 1
+14367 14367 1
+1 14368 1
+14368 14368 1
+1 14369 1
+14369 14369 1
+1 14370 1
+14370 14370 1
+1 14371 1
+14371 14371 1
+1 14372 1
+14372 14372 1
+1 14373 1
+14373 14373 1
+1 14374 1
+14374 14374 1
+1 14375 1
+14375 14375 1
+1 14376 1
+14376 14376 1
+1 14377 1
+14377 14377 1
+1 14378 1
+14378 14378 1
+1 14379 1
+14379 14379 1
+1 14380 1
+14380 14380 1
+1 14381 1
+14381 14381 1
+1 14382 1
+14382 14382 1
+1 14383 1
+14383 14383 1
+1 14384 1
+14384 14384 1
+1 14385 1
+14385 14385 1
+1 14386 1
+14386 14386 1
+1 14387 1
+14387 14387 1
+1 14388 1
+14388 14388 1
+1 14389 1
+14389 14389 1
+1 14390 1
+14390 14390 1
+1 14391 1
+14391 14391 1
+1 14392 1
+14392 14392 1
+1 14393 1
+14393 14393 1
+1 14394 1
+14394 14394 1
+1 14395 1
+14395 14395 1
+1 14396 1
+14396 14396 1
+1 14397 1
+14397 14397 1
+1 14398 1
+14398 14398 1
+1 14399 1
+14399 14399 1
+1 14400 1
+14400 14400 1
+1 14401 1
+14401 14401 1
+1 14402 1
+14402 14402 1
+1 14403 1
+14403 14403 1
+1 14404 1
+14404 14404 1
+1 14405 1
+14405 14405 1
+1 14406 1
+14406 14406 1
+1 14407 1
+14407 14407 1
+1 14408 1
+14408 14408 1
+1 14409 1
+14409 14409 1
+1 14410 1
+14410 14410 1
+1 14411 1
+14411 14411 1
+1 14412 1
+14412 14412 1
+1 14413 1
+14413 14413 1
+1 14414 1
+14414 14414 1
+1 14415 1
+14415 14415 1
+1 14416 1
+14416 14416 1
+1 14417 1
+14417 14417 1
+1 14418 1
+14418 14418 1
+1 14419 1
+14419 14419 1
+1 14420 1
+14420 14420 1
+1 14421 1
+14421 14421 1
+1 14422 1
+14422 14422 1
+1 14423 1
+14423 14423 1
+1 14424 1
+14424 14424 1
+1 14425 1
+14425 14425 1
+1 14426 1
+14426 14426 1
+1 14427 1
+14427 14427 1
+1 14428 1
+14428 14428 1
+1 14429 1
+14429 14429 1
+1 14430 1
+14430 14430 1
+1 14431 1
+14431 14431 1
+1 14432 1
+14432 14432 1
+1 14433 1
+14433 14433 1
+1 14434 1
+14434 14434 1
+1 14435 1
+14435 14435 1
+1 14436 1
+14436 14436 1
+1 14437 1
+14437 14437 1
+1 14438 1
+14438 14438 1
+1 14439 1
+14439 14439 1
+1 14440 1
+14440 14440 1
+1 14441 1
+14441 14441 1
+1 14442 1
+14442 14442 1
+1 14443 1
+14443 14443 1
+1 14444 1
+14444 14444 1
+1 14445 1
+14445 14445 1
+1 14446 1
+14446 14446 1
+1 14447 1
+14447 14447 1
+1 14448 1
+14448 14448 1
+1 14449 1
+14449 14449 1
+1 14450 1
+14450 14450 1
+1 14451 1
+14451 14451 1
+1 14452 1
+14452 14452 1
+1 14453 1
+14453 14453 1
+1 14454 1
+14454 14454 1
+1 14455 1
+14455 14455 1
+1 14456 1
+14456 14456 1
+1 14457 1
+14457 14457 1
+1 14458 1
+14458 14458 1
+1 14459 1
+14459 14459 1
+1 14460 1
+14460 14460 1
+1 14461 1
+14461 14461 1
+1 14462 1
+14462 14462 1
+1 14463 1
+14463 14463 1
+1 14464 1
+14464 14464 1
+1 14465 1
+14465 14465 1
+1 14466 1
+14466 14466 1
+1 14467 1
+14467 14467 1
+1 14468 1
+14468 14468 1
+1 14469 1
+14469 14469 1
+1 14470 1
+14470 14470 1
+1 14471 1
+14471 14471 1
+1 14472 1
+14472 14472 1
+1 14473 1
+14473 14473 1
+1 14474 1
+14474 14474 1
+1 14475 1
+14475 14475 1
+1 14476 1
+14476 14476 1
+1 14477 1
+14477 14477 1
+1 14478 1
+14478 14478 1
+1 14479 1
+14479 14479 1
+1 14480 1
+14480 14480 1
+1 14481 1
+14481 14481 1
+1 14482 1
+14482 14482 1
+1 14483 1
+14483 14483 1
+1 14484 1
+14484 14484 1
+1 14485 1
+14485 14485 1
+1 14486 1
+14486 14486 1
+1 14487 1
+14487 14487 1
+1 14488 1
+14488 14488 1
+1 14489 1
+14489 14489 1
+1 14490 1
+14490 14490 1
+1 14491 1
+14491 14491 1
+1 14492 1
+14492 14492 1
+1 14493 1
+14493 14493 1
+1 14494 1
+14494 14494 1
+1 14495 1
+14495 14495 1
+1 14496 1
+14496 14496 1
+1 14497 1
+14497 14497 1
+1 14498 1
+14498 14498 1
+1 14499 1
+14499 14499 1
+1 14500 1
+14500 14500 1
+1 14501 1
+14501 14501 1
+1 14502 1
+14502 14502 1
+1 14503 1
+14503 14503 1
+1 14504 1
+14504 14504 1
+1 14505 1
+14505 14505 1
+1 14506 1
+14506 14506 1
+1 14507 1
+14507 14507 1
+1 14508 1
+14508 14508 1
+1 14509 1
+14509 14509 1
+1 14510 1
+14510 14510 1
+1 14511 1
+14511 14511 1
+1 14512 1
+14512 14512 1
+1 14513 1
+14513 14513 1
+1 14514 1
+14514 14514 1
+1 14515 1
+14515 14515 1
+1 14516 1
+14516 14516 1
+1 14517 1
+14517 14517 1
+1 14518 1
+14518 14518 1
+1 14519 1
+14519 14519 1
+1 14520 1
+14520 14520 1
+1 14521 1
+14521 14521 1
+1 14522 1
+14522 14522 1
+1 14523 1
+14523 14523 1
+1 14524 1
+14524 14524 1
+1 14525 1
+14525 14525 1
+1 14526 1
+14526 14526 1
+1 14527 1
+14527 14527 1
+1 14528 1
+14528 14528 1
+1 14529 1
+14529 14529 1
+1 14530 1
+14530 14530 1
+1 14531 1
+14531 14531 1
+1 14532 1
+14532 14532 1
+1 14533 1
+14533 14533 1
+1 14534 1
+14534 14534 1
+1 14535 1
+14535 14535 1
+1 14536 1
+14536 14536 1
+1 14537 1
+14537 14537 1
+1 14538 1
+14538 14538 1
+1 14539 1
+14539 14539 1
+1 14540 1
+14540 14540 1
+1 14541 1
+14541 14541 1
+1 14542 1
+14542 14542 1
+1 14543 1
+14543 14543 1
+1 14544 1
+14544 14544 1
+1 14545 1
+14545 14545 1
+1 14546 1
+14546 14546 1
+1 14547 1
+14547 14547 1
+1 14548 1
+14548 14548 1
+1 14549 1
+14549 14549 1
+1 14550 1
+14550 14550 1
+1 14551 1
+14551 14551 1
+1 14552 1
+14552 14552 1
+1 14553 1
+14553 14553 1
+1 14554 1
+14554 14554 1
+1 14555 1
+14555 14555 1
+1 14556 1
+14556 14556 1
+1 14557 1
+14557 14557 1
+1 14558 1
+14558 14558 1
+1 14559 1
+14559 14559 1
+1 14560 1
+14560 14560 1
+1 14561 1
+14561 14561 1
+1 14562 1
+14562 14562 1
+1 14563 1
+14563 14563 1
+1 14564 1
+14564 14564 1
+1 14565 1
+14565 14565 1
+1 14566 1
+14566 14566 1
+1 14567 1
+14567 14567 1
+1 14568 1
+14568 14568 1
+1 14569 1
+14569 14569 1
+1 14570 1
+14570 14570 1
+1 14571 1
+14571 14571 1
+1 14572 1
+14572 14572 1
+1 14573 1
+14573 14573 1
+1 14574 1
+14574 14574 1
+1 14575 1
+14575 14575 1
+1 14576 1
+14576 14576 1
+1 14577 1
+14577 14577 1
+1 14578 1
+14578 14578 1
+1 14579 1
+14579 14579 1
+1 14580 1
+14580 14580 1
+1 14581 1
+14581 14581 1
+1 14582 1
+14582 14582 1
+1 14583 1
+14583 14583 1
+1 14584 1
+14584 14584 1
+1 14585 1
+14585 14585 1
+1 14586 1
+14586 14586 1
+1 14587 1
+14587 14587 1
+1 14588 1
+14588 14588 1
+1 14589 1
+14589 14589 1
+1 14590 1
+14590 14590 1
+1 14591 1
+14591 14591 1
+1 14592 1
+14592 14592 1
+1 14593 1
+14593 14593 1
+1 14594 1
+14594 14594 1
+1 14595 1
+14595 14595 1
+1 14596 1
+14596 14596 1
+1 14597 1
+14597 14597 1
+1 14598 1
+14598 14598 1
+1 14599 1
+14599 14599 1
+1 14600 1
+14600 14600 1
+1 14601 1
+14601 14601 1
+1 14602 1
+14602 14602 1
+1 14603 1
+14603 14603 1
+1 14604 1
+14604 14604 1
+1 14605 1
+14605 14605 1
+1 14606 1
+14606 14606 1
+1 14607 1
+14607 14607 1
+1 14608 1
+14608 14608 1
+1 14609 1
+14609 14609 1
+1 14610 1
+14610 14610 1
+1 14611 1
+14611 14611 1
+1 14612 1
+14612 14612 1
+1 14613 1
+14613 14613 1
+1 14614 1
+14614 14614 1
+1 14615 1
+14615 14615 1
+1 14616 1
+14616 14616 1
+1 14617 1
+14617 14617 1
+1 14618 1
+14618 14618 1
+1 14619 1
+14619 14619 1
+1 14620 1
+14620 14620 1
+1 14621 1
+14621 14621 1
+1 14622 1
+14622 14622 1
+1 14623 1
+14623 14623 1
+1 14624 1
+14624 14624 1
+1 14625 1
+14625 14625 1
+1 14626 1
+14626 14626 1
+1 14627 1
+14627 14627 1
+1 14628 1
+14628 14628 1
+1 14629 1
+14629 14629 1
+1 14630 1
+14630 14630 1
+1 14631 1
+14631 14631 1
+1 14632 1
+14632 14632 1
+1 14633 1
+14633 14633 1
+1 14634 1
+14634 14634 1
+1 14635 1
+14635 14635 1
+1 14636 1
+14636 14636 1
+1 14637 1
+14637 14637 1
+1 14638 1
+14638 14638 1
+1 14639 1
+14639 14639 1
+1 14640 1
+14640 14640 1
+1 14641 1
+14641 14641 1
+1 14642 1
+14642 14642 1
+1 14643 1
+14643 14643 1
+1 14644 1
+14644 14644 1
+1 14645 1
+14645 14645 1
+1 14646 1
+14646 14646 1
+1 14647 1
+14647 14647 1
+1 14648 1
+14648 14648 1
+1 14649 1
+14649 14649 1
+1 14650 1
+14650 14650 1
+1 14651 1
+14651 14651 1
+1 14652 1
+14652 14652 1
+1 14653 1
+14653 14653 1
+1 14654 1
+14654 14654 1
+1 14655 1
+14655 14655 1
+1 14656 1
+14656 14656 1
+1 14657 1
+14657 14657 1
+1 14658 1
+14658 14658 1
+1 14659 1
+14659 14659 1
+1 14660 1
+14660 14660 1
+1 14661 1
+14661 14661 1
+1 14662 1
+14662 14662 1
+1 14663 1
+14663 14663 1
+1 14664 1
+14664 14664 1
+1 14665 1
+14665 14665 1
+1 14666 1
+14666 14666 1
+1 14667 1
+14667 14667 1
+1 14668 1
+14668 14668 1
+1 14669 1
+14669 14669 1
+1 14670 1
+14670 14670 1
+1 14671 1
+14671 14671 1
+1 14672 1
+14672 14672 1
+1 14673 1
+14673 14673 1
+1 14674 1
+14674 14674 1
+1 14675 1
+14675 14675 1
+1 14676 1
+14676 14676 1
+1 14677 1
+14677 14677 1
+1 14678 1
+14678 14678 1
+1 14679 1
+14679 14679 1
+1 14680 1
+14680 14680 1
+1 14681 1
+14681 14681 1
+1 14682 1
+14682 14682 1
+1 14683 1
+14683 14683 1
+1 14684 1
+14684 14684 1
+1 14685 1
+14685 14685 1
+1 14686 1
+14686 14686 1
+1 14687 1
+14687 14687 1
+1 14688 1
+14688 14688 1
+1 14689 1
+14689 14689 1
+1 14690 1
+14690 14690 1
+1 14691 1
+14691 14691 1
+1 14692 1
+14692 14692 1
+1 14693 1
+14693 14693 1
+1 14694 1
+14694 14694 1
+1 14695 1
+14695 14695 1
+1 14696 1
+14696 14696 1
+1 14697 1
+14697 14697 1
+1 14698 1
+14698 14698 1
+1 14699 1
+14699 14699 1
+1 14700 1
+14700 14700 1
+1 14701 1
+14701 14701 1
+1 14702 1
+14702 14702 1
+1 14703 1
+14703 14703 1
+1 14704 1
+14704 14704 1
+1 14705 1
+14705 14705 1
+1 14706 1
+14706 14706 1
+1 14707 1
+14707 14707 1
+1 14708 1
+14708 14708 1
+1 14709 1
+14709 14709 1
+1 14710 1
+14710 14710 1
+1 14711 1
+14711 14711 1
+1 14712 1
+14712 14712 1
+1 14713 1
+14713 14713 1
+1 14714 1
+14714 14714 1
+1 14715 1
+14715 14715 1
+1 14716 1
+14716 14716 1
+1 14717 1
+14717 14717 1
+1 14718 1
+14718 14718 1
+1 14719 1
+14719 14719 1
+1 14720 1
+14720 14720 1
+1 14721 1
+14721 14721 1
+1 14722 1
+14722 14722 1
+1 14723 1
+14723 14723 1
+1 14724 1
+14724 14724 1
+1 14725 1
+14725 14725 1
+1 14726 1
+14726 14726 1
+1 14727 1
+14727 14727 1
+1 14728 1
+14728 14728 1
+1 14729 1
+14729 14729 1
+1 14730 1
+14730 14730 1
+1 14731 1
+14731 14731 1
+1 14732 1
+14732 14732 1
+1 14733 1
+14733 14733 1
+1 14734 1
+14734 14734 1
+1 14735 1
+14735 14735 1
+1 14736 1
+14736 14736 1
+1 14737 1
+14737 14737 1
+1 14738 1
+14738 14738 1
+1 14739 1
+14739 14739 1
+1 14740 1
+14740 14740 1
+1 14741 1
+14741 14741 1
+1 14742 1
+14742 14742 1
+1 14743 1
+14743 14743 1
+1 14744 1
+14744 14744 1
+1 14745 1
+14745 14745 1
+1 14746 1
+14746 14746 1
+1 14747 1
+14747 14747 1
+1 14748 1
+14748 14748 1
+1 14749 1
+14749 14749 1
+1 14750 1
+14750 14750 1
+1 14751 1
+14751 14751 1
+1 14752 1
+14752 14752 1
+1 14753 1
+14753 14753 1
+1 14754 1
+14754 14754 1
+1 14755 1
+14755 14755 1
+1 14756 1
+14756 14756 1
+1 14757 1
+14757 14757 1
+1 14758 1
+14758 14758 1
+1 14759 1
+14759 14759 1
+1 14760 1
+14760 14760 1
+1 14761 1
+14761 14761 1
+1 14762 1
+14762 14762 1
+1 14763 1
+14763 14763 1
+1 14764 1
+14764 14764 1
+1 14765 1
+14765 14765 1
+1 14766 1
+14766 14766 1
+1 14767 1
+14767 14767 1
+1 14768 1
+14768 14768 1
+1 14769 1
+14769 14769 1
+1 14770 1
+14770 14770 1
+1 14771 1
+14771 14771 1
+1 14772 1
+14772 14772 1
+1 14773 1
+14773 14773 1
+1 14774 1
+14774 14774 1
+1 14775 1
+14775 14775 1
+1 14776 1
+14776 14776 1
+1 14777 1
+14777 14777 1
+1 14778 1
+14778 14778 1
+1 14779 1
+14779 14779 1
+1 14780 1
+14780 14780 1
+1 14781 1
+14781 14781 1
+1 14782 1
+14782 14782 1
+1 14783 1
+14783 14783 1
+1 14784 1
+14784 14784 1
+1 14785 1
+14785 14785 1
+1 14786 1
+14786 14786 1
+1 14787 1
+14787 14787 1
+1 14788 1
+14788 14788 1
+1 14789 1
+14789 14789 1
+1 14790 1
+14790 14790 1
+1 14791 1
+14791 14791 1
+1 14792 1
+14792 14792 1
+1 14793 1
+14793 14793 1
+1 14794 1
+14794 14794 1
+1 14795 1
+14795 14795 1
+1 14796 1
+14796 14796 1
+1 14797 1
+14797 14797 1
+1 14798 1
+14798 14798 1
+1 14799 1
+14799 14799 1
+1 14800 1
+14800 14800 1
+1 14801 1
+14801 14801 1
+1 14802 1
+14802 14802 1
+1 14803 1
+14803 14803 1
+1 14804 1
+14804 14804 1
+1 14805 1
+14805 14805 1
+1 14806 1
+14806 14806 1
+1 14807 1
+14807 14807 1
+1 14808 1
+14808 14808 1
+1 14809 1
+14809 14809 1
+1 14810 1
+14810 14810 1
+1 14811 1
+14811 14811 1
+1 14812 1
+14812 14812 1
+1 14813 1
+14813 14813 1
+1 14814 1
+14814 14814 1
+1 14815 1
+14815 14815 1
+1 14816 1
+14816 14816 1
+1 14817 1
+14817 14817 1
+1 14818 1
+14818 14818 1
+1 14819 1
+14819 14819 1
+1 14820 1
+14820 14820 1
+1 14821 1
+14821 14821 1
+1 14822 1
+14822 14822 1
+1 14823 1
+14823 14823 1
+1 14824 1
+14824 14824 1
+1 14825 1
+14825 14825 1
+1 14826 1
+14826 14826 1
+1 14827 1
+14827 14827 1
+1 14828 1
+14828 14828 1
+1 14829 1
+14829 14829 1
+1 14830 1
+14830 14830 1
+1 14831 1
+14831 14831 1
+1 14832 1
+14832 14832 1
+1 14833 1
+14833 14833 1
+1 14834 1
+14834 14834 1
+1 14835 1
+14835 14835 1
+1 14836 1
+14836 14836 1
+1 14837 1
+14837 14837 1
+1 14838 1
+14838 14838 1
+1 14839 1
+14839 14839 1
+1 14840 1
+14840 14840 1
+1 14841 1
+14841 14841 1
+1 14842 1
+14842 14842 1
+1 14843 1
+14843 14843 1
+1 14844 1
+14844 14844 1
+1 14845 1
+14845 14845 1
+1 14846 1
+14846 14846 1
+1 14847 1
+14847 14847 1
+1 14848 1
+14848 14848 1
+1 14849 1
+14849 14849 1
+1 14850 1
+14850 14850 1
+1 14851 1
+14851 14851 1
+1 14852 1
+14852 14852 1
+1 14853 1
+14853 14853 1
+1 14854 1
+14854 14854 1
+1 14855 1
+14855 14855 1
+1 14856 1
+14856 14856 1
+1 14857 1
+14857 14857 1
+1 14858 1
+14858 14858 1
+1 14859 1
+14859 14859 1
+1 14860 1
+14860 14860 1
+1 14861 1
+14861 14861 1
+1 14862 1
+14862 14862 1
+1 14863 1
+14863 14863 1
+1 14864 1
+14864 14864 1
+1 14865 1
+14865 14865 1
+1 14866 1
+14866 14866 1
+1 14867 1
+14867 14867 1
+1 14868 1
+14868 14868 1
+1 14869 1
+14869 14869 1
+1 14870 1
+14870 14870 1
+1 14871 1
+14871 14871 1
+1 14872 1
+14872 14872 1
+1 14873 1
+14873 14873 1
+1 14874 1
+14874 14874 1
+1 14875 1
+14875 14875 1
+1 14876 1
+14876 14876 1
+1 14877 1
+14877 14877 1
+1 14878 1
+14878 14878 1
+1 14879 1
+14879 14879 1
+1 14880 1
+14880 14880 1
+1 14881 1
+14881 14881 1
+1 14882 1
+14882 14882 1
+1 14883 1
+14883 14883 1
+1 14884 1
+14884 14884 1
+1 14885 1
+14885 14885 1
+1 14886 1
+14886 14886 1
+1 14887 1
+14887 14887 1
+1 14888 1
+14888 14888 1
+1 14889 1
+14889 14889 1
+1 14890 1
+14890 14890 1
+1 14891 1
+14891 14891 1
+1 14892 1
+14892 14892 1
+1 14893 1
+14893 14893 1
+1 14894 1
+14894 14894 1
+1 14895 1
+14895 14895 1
+1 14896 1
+14896 14896 1
+1 14897 1
+14897 14897 1
+1 14898 1
+14898 14898 1
+1 14899 1
+14899 14899 1
+1 14900 1
+14900 14900 1
+1 14901 1
+14901 14901 1
+1 14902 1
+14902 14902 1
+1 14903 1
+14903 14903 1
+1 14904 1
+14904 14904 1
+1 14905 1
+14905 14905 1
+1 14906 1
+14906 14906 1
+1 14907 1
+14907 14907 1
+1 14908 1
+14908 14908 1
+1 14909 1
+14909 14909 1
+1 14910 1
+14910 14910 1
+1 14911 1
+14911 14911 1
+1 14912 1
+14912 14912 1
+1 14913 1
+14913 14913 1
+1 14914 1
+14914 14914 1
+1 14915 1
+14915 14915 1
+1 14916 1
+14916 14916 1
+1 14917 1
+14917 14917 1
+1 14918 1
+14918 14918 1
+1 14919 1
+14919 14919 1
+1 14920 1
+14920 14920 1
+1 14921 1
+14921 14921 1
+1 14922 1
+14922 14922 1
+1 14923 1
+14923 14923 1
+1 14924 1
+14924 14924 1
+1 14925 1
+14925 14925 1
+1 14926 1
+14926 14926 1
+1 14927 1
+14927 14927 1
+1 14928 1
+14928 14928 1
+1 14929 1
+14929 14929 1
+1 14930 1
+14930 14930 1
+1 14931 1
+14931 14931 1
+1 14932 1
+14932 14932 1
+1 14933 1
+14933 14933 1
+1 14934 1
+14934 14934 1
+1 14935 1
+14935 14935 1
+1 14936 1
+14936 14936 1
+1 14937 1
+14937 14937 1
+1 14938 1
+14938 14938 1
+1 14939 1
+14939 14939 1
+1 14940 1
+14940 14940 1
+1 14941 1
+14941 14941 1
+1 14942 1
+14942 14942 1
+1 14943 1
+14943 14943 1
+1 14944 1
+14944 14944 1
+1 14945 1
+14945 14945 1
+1 14946 1
+14946 14946 1
+1 14947 1
+14947 14947 1
+1 14948 1
+14948 14948 1
+1 14949 1
+14949 14949 1
+1 14950 1
+14950 14950 1
+1 14951 1
+14951 14951 1
+1 14952 1
+14952 14952 1
+1 14953 1
+14953 14953 1
+1 14954 1
+14954 14954 1
+1 14955 1
+14955 14955 1
+1 14956 1
+14956 14956 1
+1 14957 1
+14957 14957 1
+1 14958 1
+14958 14958 1
+1 14959 1
+14959 14959 1
+1 14960 1
+14960 14960 1
+1 14961 1
+14961 14961 1
+1 14962 1
+14962 14962 1
+1 14963 1
+14963 14963 1
+1 14964 1
+14964 14964 1
+1 14965 1
+14965 14965 1
+1 14966 1
+14966 14966 1
+1 14967 1
+14967 14967 1
+1 14968 1
+14968 14968 1
+1 14969 1
+14969 14969 1
+1 14970 1
+14970 14970 1
+1 14971 1
+14971 14971 1
+1 14972 1
+14972 14972 1
+1 14973 1
+14973 14973 1
+1 14974 1
+14974 14974 1
+1 14975 1
+14975 14975 1
+1 14976 1
+14976 14976 1
+1 14977 1
+14977 14977 1
+1 14978 1
+14978 14978 1
+1 14979 1
+14979 14979 1
+1 14980 1
+14980 14980 1
+1 14981 1
+14981 14981 1
+1 14982 1
+14982 14982 1
+1 14983 1
+14983 14983 1
+1 14984 1
+14984 14984 1
+1 14985 1
+14985 14985 1
+1 14986 1
+14986 14986 1
+1 14987 1
+14987 14987 1
+1 14988 1
+14988 14988 1
+1 14989 1
+14989 14989 1
+1 14990 1
+14990 14990 1
+1 14991 1
+14991 14991 1
+1 14992 1
+14992 14992 1
+1 14993 1
+14993 14993 1
+1 14994 1
+14994 14994 1
+1 14995 1
+14995 14995 1
+1 14996 1
+14996 14996 1
+1 14997 1
+14997 14997 1
+1 14998 1
+14998 14998 1
+1 14999 1
+14999 14999 1
+1 15000 1
+15000 15000 1
+1 15001 1
+15001 15001 1
+1 15002 1
+15002 15002 1
+1 15003 1
+15003 15003 1
+1 15004 1
+15004 15004 1
+1 15005 1
+15005 15005 1
+1 15006 1
+15006 15006 1
+1 15007 1
+15007 15007 1
+1 15008 1
+15008 15008 1
+1 15009 1
+15009 15009 1
+1 15010 1
+15010 15010 1
+1 15011 1
+15011 15011 1
+1 15012 1
+15012 15012 1
+1 15013 1
+15013 15013 1
+1 15014 1
+15014 15014 1
+1 15015 1
+15015 15015 1
+1 15016 1
+15016 15016 1
+1 15017 1
+15017 15017 1
+1 15018 1
+15018 15018 1
+1 15019 1
+15019 15019 1
+1 15020 1
+15020 15020 1
+1 15021 1
+15021 15021 1
+1 15022 1
+15022 15022 1
+1 15023 1
+15023 15023 1
+1 15024 1
+15024 15024 1
+1 15025 1
+15025 15025 1
+1 15026 1
+15026 15026 1
+1 15027 1
+15027 15027 1
+1 15028 1
+15028 15028 1
+1 15029 1
+15029 15029 1
+1 15030 1
+15030 15030 1
+1 15031 1
+15031 15031 1
+1 15032 1
+15032 15032 1
+1 15033 1
+15033 15033 1
+1 15034 1
+15034 15034 1
+1 15035 1
+15035 15035 1
+1 15036 1
+15036 15036 1
+1 15037 1
+15037 15037 1
+1 15038 1
+15038 15038 1
+1 15039 1
+15039 15039 1
+1 15040 1
+15040 15040 1
+1 15041 1
+15041 15041 1
+1 15042 1
+15042 15042 1
+1 15043 1
+15043 15043 1
+1 15044 1
+15044 15044 1
+1 15045 1
+15045 15045 1
+1 15046 1
+15046 15046 1
+1 15047 1
+15047 15047 1
+1 15048 1
+15048 15048 1
+1 15049 1
+15049 15049 1
+1 15050 1
+15050 15050 1
+1 15051 1
+15051 15051 1
+1 15052 1
+15052 15052 1
+1 15053 1
+15053 15053 1
+1 15054 1
+15054 15054 1
+1 15055 1
+15055 15055 1
+1 15056 1
+15056 15056 1
+1 15057 1
+15057 15057 1
+1 15058 1
+15058 15058 1
+1 15059 1
+15059 15059 1
+1 15060 1
+15060 15060 1
+1 15061 1
+15061 15061 1
+1 15062 1
+15062 15062 1
+1 15063 1
+15063 15063 1
+1 15064 1
+15064 15064 1
+1 15065 1
+15065 15065 1
+1 15066 1
+15066 15066 1
+1 15067 1
+15067 15067 1
+1 15068 1
+15068 15068 1
+1 15069 1
+15069 15069 1
+1 15070 1
+15070 15070 1
+1 15071 1
+15071 15071 1
+1 15072 1
+15072 15072 1
+1 15073 1
+15073 15073 1
+1 15074 1
+15074 15074 1
+1 15075 1
+15075 15075 1
+1 15076 1
+15076 15076 1
+1 15077 1
+15077 15077 1
+1 15078 1
+15078 15078 1
+1 15079 1
+15079 15079 1
+1 15080 1
+15080 15080 1
+1 15081 1
+15081 15081 1
+1 15082 1
+15082 15082 1
+1 15083 1
+15083 15083 1
+1 15084 1
+15084 15084 1
+1 15085 1
+15085 15085 1
+1 15086 1
+15086 15086 1
+1 15087 1
+15087 15087 1
+1 15088 1
+15088 15088 1
+1 15089 1
+15089 15089 1
+1 15090 1
+15090 15090 1
+1 15091 1
+15091 15091 1
+1 15092 1
+15092 15092 1
+1 15093 1
+15093 15093 1
+1 15094 1
+15094 15094 1
+1 15095 1
+15095 15095 1
+1 15096 1
+15096 15096 1
+1 15097 1
+15097 15097 1
+1 15098 1
+15098 15098 1
+1 15099 1
+15099 15099 1
+1 15100 1
+15100 15100 1
+1 15101 1
+15101 15101 1
+1 15102 1
+15102 15102 1
+1 15103 1
+15103 15103 1
+1 15104 1
+15104 15104 1
+1 15105 1
+15105 15105 1
+1 15106 1
+15106 15106 1
+1 15107 1
+15107 15107 1
+1 15108 1
+15108 15108 1
+1 15109 1
+15109 15109 1
+1 15110 1
+15110 15110 1
+1 15111 1
+15111 15111 1
+1 15112 1
+15112 15112 1
+1 15113 1
+15113 15113 1
+1 15114 1
+15114 15114 1
+1 15115 1
+15115 15115 1
+1 15116 1
+15116 15116 1
+1 15117 1
+15117 15117 1
+1 15118 1
+15118 15118 1
+1 15119 1
+15119 15119 1
+1 15120 1
+15120 15120 1
+1 15121 1
+15121 15121 1
+1 15122 1
+15122 15122 1
+1 15123 1
+15123 15123 1
+1 15124 1
+15124 15124 1
+1 15125 1
+15125 15125 1
+1 15126 1
+15126 15126 1
+1 15127 1
+15127 15127 1
+1 15128 1
+15128 15128 1
+1 15129 1
+15129 15129 1
+1 15130 1
+15130 15130 1
+1 15131 1
+15131 15131 1
+1 15132 1
+15132 15132 1
+1 15133 1
+15133 15133 1
+1 15134 1
+15134 15134 1
+1 15135 1
+15135 15135 1
+1 15136 1
+15136 15136 1
+1 15137 1
+15137 15137 1
+1 15138 1
+15138 15138 1
+1 15139 1
+15139 15139 1
+1 15140 1
+15140 15140 1
+1 15141 1
+15141 15141 1
+1 15142 1
+15142 15142 1
+1 15143 1
+15143 15143 1
+1 15144 1
+15144 15144 1
+1 15145 1
+15145 15145 1
+1 15146 1
+15146 15146 1
+1 15147 1
+15147 15147 1
+1 15148 1
+15148 15148 1
+1 15149 1
+15149 15149 1
+1 15150 1
+15150 15150 1
+1 15151 1
+15151 15151 1
+1 15152 1
+15152 15152 1
+1 15153 1
+15153 15153 1
+1 15154 1
+15154 15154 1
+1 15155 1
+15155 15155 1
+1 15156 1
+15156 15156 1
+1 15157 1
+15157 15157 1
+1 15158 1
+15158 15158 1
+1 15159 1
+15159 15159 1
+1 15160 1
+15160 15160 1
+1 15161 1
+15161 15161 1
+1 15162 1
+15162 15162 1
+1 15163 1
+15163 15163 1
+1 15164 1
+15164 15164 1
+1 15165 1
+15165 15165 1
+1 15166 1
+15166 15166 1
+1 15167 1
+15167 15167 1
+1 15168 1
+15168 15168 1
+1 15169 1
+15169 15169 1
+1 15170 1
+15170 15170 1
+1 15171 1
+15171 15171 1
+1 15172 1
+15172 15172 1
+1 15173 1
+15173 15173 1
+1 15174 1
+15174 15174 1
+1 15175 1
+15175 15175 1
+1 15176 1
+15176 15176 1
+1 15177 1
+15177 15177 1
+1 15178 1
+15178 15178 1
+1 15179 1
+15179 15179 1
+1 15180 1
+15180 15180 1
+1 15181 1
+15181 15181 1
+1 15182 1
+15182 15182 1
+1 15183 1
+15183 15183 1
+1 15184 1
+15184 15184 1
+1 15185 1
+15185 15185 1
+1 15186 1
+15186 15186 1
+1 15187 1
+15187 15187 1
+1 15188 1
+15188 15188 1
+1 15189 1
+15189 15189 1
+1 15190 1
+15190 15190 1
+1 15191 1
+15191 15191 1
+1 15192 1
+15192 15192 1
+1 15193 1
+15193 15193 1
+1 15194 1
+15194 15194 1
+1 15195 1
+15195 15195 1
+1 15196 1
+15196 15196 1
+1 15197 1
+15197 15197 1
+1 15198 1
+15198 15198 1
+1 15199 1
+15199 15199 1
+1 15200 1
+15200 15200 1
+1 15201 1
+15201 15201 1
+1 15202 1
+15202 15202 1
+1 15203 1
+15203 15203 1
+1 15204 1
+15204 15204 1
+1 15205 1
+15205 15205 1
+1 15206 1
+15206 15206 1
+1 15207 1
+15207 15207 1
+1 15208 1
+15208 15208 1
+1 15209 1
+15209 15209 1
+1 15210 1
+15210 15210 1
+1 15211 1
+15211 15211 1
+1 15212 1
+15212 15212 1
+1 15213 1
+15213 15213 1
+1 15214 1
+15214 15214 1
+1 15215 1
+15215 15215 1
+1 15216 1
+15216 15216 1
+1 15217 1
+15217 15217 1
+1 15218 1
+15218 15218 1
+1 15219 1
+15219 15219 1
+1 15220 1
+15220 15220 1
+1 15221 1
+15221 15221 1
+1 15222 1
+15222 15222 1
+1 15223 1
+15223 15223 1
+1 15224 1
+15224 15224 1
+1 15225 1
+15225 15225 1
+1 15226 1
+15226 15226 1
+1 15227 1
+15227 15227 1
+1 15228 1
+15228 15228 1
+1 15229 1
+15229 15229 1
+1 15230 1
+15230 15230 1
+1 15231 1
+15231 15231 1
+1 15232 1
+15232 15232 1
+1 15233 1
+15233 15233 1
+1 15234 1
+15234 15234 1
+1 15235 1
+15235 15235 1
+1 15236 1
+15236 15236 1
+1 15237 1
+15237 15237 1
+1 15238 1
+15238 15238 1
+1 15239 1
+15239 15239 1
+1 15240 1
+15240 15240 1
+1 15241 1
+15241 15241 1
+1 15242 1
+15242 15242 1
+1 15243 1
+15243 15243 1
+1 15244 1
+15244 15244 1
+1 15245 1
+15245 15245 1
+1 15246 1
+15246 15246 1
+1 15247 1
+15247 15247 1
+1 15248 1
+15248 15248 1
+1 15249 1
+15249 15249 1
+1 15250 1
+15250 15250 1
+1 15251 1
+15251 15251 1
+1 15252 1
+15252 15252 1
+1 15253 1
+15253 15253 1
+1 15254 1
+15254 15254 1
+1 15255 1
+15255 15255 1
+1 15256 1
+15256 15256 1
+1 15257 1
+15257 15257 1
+1 15258 1
+15258 15258 1
+1 15259 1
+15259 15259 1
+1 15260 1
+15260 15260 1
+1 15261 1
+15261 15261 1
+1 15262 1
+15262 15262 1
+1 15263 1
+15263 15263 1
+1 15264 1
+15264 15264 1
+1 15265 1
+15265 15265 1
+1 15266 1
+15266 15266 1
+1 15267 1
+15267 15267 1
+1 15268 1
+15268 15268 1
+1 15269 1
+15269 15269 1
+1 15270 1
+15270 15270 1
+1 15271 1
+15271 15271 1
+1 15272 1
+15272 15272 1
+1 15273 1
+15273 15273 1
+1 15274 1
+15274 15274 1
+1 15275 1
+15275 15275 1
+1 15276 1
+15276 15276 1
+1 15277 1
+15277 15277 1
+1 15278 1
+15278 15278 1
+1 15279 1
+15279 15279 1
+1 15280 1
+15280 15280 1
+1 15281 1
+15281 15281 1
+1 15282 1
+15282 15282 1
+1 15283 1
+15283 15283 1
+1 15284 1
+15284 15284 1
+1 15285 1
+15285 15285 1
+1 15286 1
+15286 15286 1
+1 15287 1
+15287 15287 1
+1 15288 1
+15288 15288 1
+1 15289 1
+15289 15289 1
+1 15290 1
+15290 15290 1
+1 15291 1
+15291 15291 1
+1 15292 1
+15292 15292 1
+1 15293 1
+15293 15293 1
+1 15294 1
+15294 15294 1
+1 15295 1
+15295 15295 1
+1 15296 1
+15296 15296 1
+1 15297 1
+15297 15297 1
+1 15298 1
+15298 15298 1
+1 15299 1
+15299 15299 1
+1 15300 1
+15300 15300 1
+1 15301 1
+15301 15301 1
+1 15302 1
+15302 15302 1
+1 15303 1
+15303 15303 1
+1 15304 1
+15304 15304 1
+1 15305 1
+15305 15305 1
+1 15306 1
+15306 15306 1
+1 15307 1
+15307 15307 1
+1 15308 1
+15308 15308 1
+1 15309 1
+15309 15309 1
+1 15310 1
+15310 15310 1
+1 15311 1
+15311 15311 1
+1 15312 1
+15312 15312 1
+1 15313 1
+15313 15313 1
+1 15314 1
+15314 15314 1
+1 15315 1
+15315 15315 1
+1 15316 1
+15316 15316 1
+1 15317 1
+15317 15317 1
+1 15318 1
+15318 15318 1
+1 15319 1
+15319 15319 1
+1 15320 1
+15320 15320 1
+1 15321 1
+15321 15321 1
+1 15322 1
+15322 15322 1
+1 15323 1
+15323 15323 1
+1 15324 1
+15324 15324 1
+1 15325 1
+15325 15325 1
+1 15326 1
+15326 15326 1
+1 15327 1
+15327 15327 1
+1 15328 1
+15328 15328 1
+1 15329 1
+15329 15329 1
+1 15330 1
+15330 15330 1
+1 15331 1
+15331 15331 1
+1 15332 1
+15332 15332 1
+1 15333 1
+15333 15333 1
+1 15334 1
+15334 15334 1
+1 15335 1
+15335 15335 1
+1 15336 1
+15336 15336 1
+1 15337 1
+15337 15337 1
+1 15338 1
+15338 15338 1
+1 15339 1
+15339 15339 1
+1 15340 1
+15340 15340 1
+1 15341 1
+15341 15341 1
+1 15342 1
+15342 15342 1
+1 15343 1
+15343 15343 1
+1 15344 1
+15344 15344 1
+1 15345 1
+15345 15345 1
+1 15346 1
+15346 15346 1
+1 15347 1
+15347 15347 1
+1 15348 1
+15348 15348 1
+1 15349 1
+15349 15349 1
+1 15350 1
+15350 15350 1
+1 15351 1
+15351 15351 1
+1 15352 1
+15352 15352 1
+1 15353 1
+15353 15353 1
+1 15354 1
+15354 15354 1
+1 15355 1
+15355 15355 1
+1 15356 1
+15356 15356 1
+1 15357 1
+15357 15357 1
+1 15358 1
+15358 15358 1
+1 15359 1
+15359 15359 1
+1 15360 1
+15360 15360 1
+1 15361 1
+15361 15361 1
+1 15362 1
+15362 15362 1
+1 15363 1
+15363 15363 1
+1 15364 1
+15364 15364 1
+1 15365 1
+15365 15365 1
+1 15366 1
+15366 15366 1
+1 15367 1
+15367 15367 1
+1 15368 1
+15368 15368 1
+1 15369 1
+15369 15369 1
+1 15370 1
+15370 15370 1
+1 15371 1
+15371 15371 1
+1 15372 1
+15372 15372 1
+1 15373 1
+15373 15373 1
+1 15374 1
+15374 15374 1
+1 15375 1
+15375 15375 1
+1 15376 1
+15376 15376 1
+1 15377 1
+15377 15377 1
+1 15378 1
+15378 15378 1
+1 15379 1
+15379 15379 1
+1 15380 1
+15380 15380 1
+1 15381 1
+15381 15381 1
+1 15382 1
+15382 15382 1
+1 15383 1
+15383 15383 1
+1 15384 1
+15384 15384 1
+1 15385 1
+15385 15385 1
+1 15386 1
+15386 15386 1
+1 15387 1
+15387 15387 1
+1 15388 1
+15388 15388 1
+1 15389 1
+15389 15389 1
+1 15390 1
+15390 15390 1
+1 15391 1
+15391 15391 1
+1 15392 1
+15392 15392 1
+1 15393 1
+15393 15393 1
+1 15394 1
+15394 15394 1
+1 15395 1
+15395 15395 1
+1 15396 1
+15396 15396 1
+1 15397 1
+15397 15397 1
+1 15398 1
+15398 15398 1
+1 15399 1
+15399 15399 1
+1 15400 1
+15400 15400 1
+1 15401 1
+15401 15401 1
+1 15402 1
+15402 15402 1
+1 15403 1
+15403 15403 1
+1 15404 1
+15404 15404 1
+1 15405 1
+15405 15405 1
+1 15406 1
+15406 15406 1
+1 15407 1
+15407 15407 1
+1 15408 1
+15408 15408 1
+1 15409 1
+15409 15409 1
+1 15410 1
+15410 15410 1
+1 15411 1
+15411 15411 1
+1 15412 1
+15412 15412 1
+1 15413 1
+15413 15413 1
+1 15414 1
+15414 15414 1
+1 15415 1
+15415 15415 1
+1 15416 1
+15416 15416 1
+1 15417 1
+15417 15417 1
+1 15418 1
+15418 15418 1
+1 15419 1
+15419 15419 1
+1 15420 1
+15420 15420 1
+1 15421 1
+15421 15421 1
+1 15422 1
+15422 15422 1
+1 15423 1
+15423 15423 1
+1 15424 1
+15424 15424 1
+1 15425 1
+15425 15425 1
+1 15426 1
+15426 15426 1
+1 15427 1
+15427 15427 1
+1 15428 1
+15428 15428 1
+1 15429 1
+15429 15429 1
+1 15430 1
+15430 15430 1
+1 15431 1
+15431 15431 1
+1 15432 1
+15432 15432 1
+1 15433 1
+15433 15433 1
+1 15434 1
+15434 15434 1
+1 15435 1
+15435 15435 1
+1 15436 1
+15436 15436 1
+1 15437 1
+15437 15437 1
+1 15438 1
+15438 15438 1
+1 15439 1
+15439 15439 1
+1 15440 1
+15440 15440 1
+1 15441 1
+15441 15441 1
+1 15442 1
+15442 15442 1
+1 15443 1
+15443 15443 1
+1 15444 1
+15444 15444 1
+1 15445 1
+15445 15445 1
+1 15446 1
+15446 15446 1
+1 15447 1
+15447 15447 1
+1 15448 1
+15448 15448 1
+1 15449 1
+15449 15449 1
+1 15450 1
+15450 15450 1
+1 15451 1
+15451 15451 1
+1 15452 1
+15452 15452 1
+1 15453 1
+15453 15453 1
+1 15454 1
+15454 15454 1
+1 15455 1
+15455 15455 1
+1 15456 1
+15456 15456 1
+1 15457 1
+15457 15457 1
+1 15458 1
+15458 15458 1
+1 15459 1
+15459 15459 1
+1 15460 1
+15460 15460 1
+1 15461 1
+15461 15461 1
+1 15462 1
+15462 15462 1
+1 15463 1
+15463 15463 1
+1 15464 1
+15464 15464 1
+1 15465 1
+15465 15465 1
+1 15466 1
+15466 15466 1
+1 15467 1
+15467 15467 1
+1 15468 1
+15468 15468 1
+1 15469 1
+15469 15469 1
+1 15470 1
+15470 15470 1
+1 15471 1
+15471 15471 1
+1 15472 1
+15472 15472 1
+1 15473 1
+15473 15473 1
+1 15474 1
+15474 15474 1
+1 15475 1
+15475 15475 1
+1 15476 1
+15476 15476 1
+1 15477 1
+15477 15477 1
+1 15478 1
+15478 15478 1
+1 15479 1
+15479 15479 1
+1 15480 1
+15480 15480 1
+1 15481 1
+15481 15481 1
+1 15482 1
+15482 15482 1
+1 15483 1
+15483 15483 1
+1 15484 1
+15484 15484 1
+1 15485 1
+15485 15485 1
+1 15486 1
+15486 15486 1
+1 15487 1
+15487 15487 1
+1 15488 1
+15488 15488 1
+1 15489 1
+15489 15489 1
+1 15490 1
+15490 15490 1
+1 15491 1
+15491 15491 1
+1 15492 1
+15492 15492 1
+1 15493 1
+15493 15493 1
+1 15494 1
+15494 15494 1
+1 15495 1
+15495 15495 1
+1 15496 1
+15496 15496 1
+1 15497 1
+15497 15497 1
+1 15498 1
+15498 15498 1
+1 15499 1
+15499 15499 1
+1 15500 1
+15500 15500 1
+1 15501 1
+15501 15501 1
+1 15502 1
+15502 15502 1
+1 15503 1
+15503 15503 1
+1 15504 1
+15504 15504 1
+1 15505 1
+15505 15505 1
+1 15506 1
+15506 15506 1
+1 15507 1
+15507 15507 1
+1 15508 1
+15508 15508 1
+1 15509 1
+15509 15509 1
+1 15510 1
+15510 15510 1
+1 15511 1
+15511 15511 1
+1 15512 1
+15512 15512 1
+1 15513 1
+15513 15513 1
+1 15514 1
+15514 15514 1
+1 15515 1
+15515 15515 1
+1 15516 1
+15516 15516 1
+1 15517 1
+15517 15517 1
+1 15518 1
+15518 15518 1
+1 15519 1
+15519 15519 1
+1 15520 1
+15520 15520 1
+1 15521 1
+15521 15521 1
+1 15522 1
+15522 15522 1
+1 15523 1
+15523 15523 1
+1 15524 1
+15524 15524 1
+1 15525 1
+15525 15525 1
+1 15526 1
+15526 15526 1
+1 15527 1
+15527 15527 1
+1 15528 1
+15528 15528 1
+1 15529 1
+15529 15529 1
+1 15530 1
+15530 15530 1
+1 15531 1
+15531 15531 1
+1 15532 1
+15532 15532 1
+1 15533 1
+15533 15533 1
+1 15534 1
+15534 15534 1
+1 15535 1
+15535 15535 1
+1 15536 1
+15536 15536 1
+1 15537 1
+15537 15537 1
+1 15538 1
+15538 15538 1
+1 15539 1
+15539 15539 1
+1 15540 1
+15540 15540 1
+1 15541 1
+15541 15541 1
+1 15542 1
+15542 15542 1
+1 15543 1
+15543 15543 1
+1 15544 1
+15544 15544 1
+1 15545 1
+15545 15545 1
+1 15546 1
+15546 15546 1
+1 15547 1
+15547 15547 1
+1 15548 1
+15548 15548 1
+1 15549 1
+15549 15549 1
+1 15550 1
+15550 15550 1
+1 15551 1
+15551 15551 1
+1 15552 1
+15552 15552 1
+1 15553 1
+15553 15553 1
+1 15554 1
+15554 15554 1
+1 15555 1
+15555 15555 1
+1 15556 1
+15556 15556 1
+1 15557 1
+15557 15557 1
+1 15558 1
+15558 15558 1
+1 15559 1
+15559 15559 1
+1 15560 1
+15560 15560 1
+1 15561 1
+15561 15561 1
+1 15562 1
+15562 15562 1
+1 15563 1
+15563 15563 1
+1 15564 1
+15564 15564 1
+1 15565 1
+15565 15565 1
+1 15566 1
+15566 15566 1
+1 15567 1
+15567 15567 1
+1 15568 1
+15568 15568 1
+1 15569 1
+15569 15569 1
+1 15570 1
+15570 15570 1
+1 15571 1
+15571 15571 1
+1 15572 1
+15572 15572 1
+1 15573 1
+15573 15573 1
+1 15574 1
+15574 15574 1
+1 15575 1
+15575 15575 1
+1 15576 1
+15576 15576 1
+1 15577 1
+15577 15577 1
+1 15578 1
+15578 15578 1
+1 15579 1
+15579 15579 1
+1 15580 1
+15580 15580 1
+1 15581 1
+15581 15581 1
+1 15582 1
+15582 15582 1
+1 15583 1
+15583 15583 1
+1 15584 1
+15584 15584 1
+1 15585 1
+15585 15585 1
+1 15586 1
+15586 15586 1
+1 15587 1
+15587 15587 1
+1 15588 1
+15588 15588 1
+1 15589 1
+15589 15589 1
+1 15590 1
+15590 15590 1
+1 15591 1
+15591 15591 1
+1 15592 1
+15592 15592 1
+1 15593 1
+15593 15593 1
+1 15594 1
+15594 15594 1
+1 15595 1
+15595 15595 1
+1 15596 1
+15596 15596 1
+1 15597 1
+15597 15597 1
+1 15598 1
+15598 15598 1
+1 15599 1
+15599 15599 1
+1 15600 1
+15600 15600 1
+1 15601 1
+15601 15601 1
+1 15602 1
+15602 15602 1
+1 15603 1
+15603 15603 1
+1 15604 1
+15604 15604 1
+1 15605 1
+15605 15605 1
+1 15606 1
+15606 15606 1
+1 15607 1
+15607 15607 1
+1 15608 1
+15608 15608 1
+1 15609 1
+15609 15609 1
+1 15610 1
+15610 15610 1
+1 15611 1
+15611 15611 1
+1 15612 1
+15612 15612 1
+1 15613 1
+15613 15613 1
+1 15614 1
+15614 15614 1
+1 15615 1
+15615 15615 1
+1 15616 1
+15616 15616 1
+1 15617 1
+15617 15617 1
+1 15618 1
+15618 15618 1
+1 15619 1
+15619 15619 1
+1 15620 1
+15620 15620 1
+1 15621 1
+15621 15621 1
+1 15622 1
+15622 15622 1
+1 15623 1
+15623 15623 1
+1 15624 1
+15624 15624 1
+1 15625 1
+15625 15625 1
+1 15626 1
+15626 15626 1
+1 15627 1
+15627 15627 1
+1 15628 1
+15628 15628 1
+1 15629 1
+15629 15629 1
+1 15630 1
+15630 15630 1
+1 15631 1
+15631 15631 1
+1 15632 1
+15632 15632 1
+1 15633 1
+15633 15633 1
+1 15634 1
+15634 15634 1
+1 15635 1
+15635 15635 1
+1 15636 1
+15636 15636 1
+1 15637 1
+15637 15637 1
+1 15638 1
+15638 15638 1
+1 15639 1
+15639 15639 1
+1 15640 1
+15640 15640 1
+1 15641 1
+15641 15641 1
+1 15642 1
+15642 15642 1
+1 15643 1
+15643 15643 1
+1 15644 1
+15644 15644 1
+1 15645 1
+15645 15645 1
+1 15646 1
+15646 15646 1
+1 15647 1
+15647 15647 1
+1 15648 1
+15648 15648 1
+1 15649 1
+15649 15649 1
+1 15650 1
+15650 15650 1
+1 15651 1
+15651 15651 1
+1 15652 1
+15652 15652 1
+1 15653 1
+15653 15653 1
+1 15654 1
+15654 15654 1
+1 15655 1
+15655 15655 1
+1 15656 1
+15656 15656 1
+1 15657 1
+15657 15657 1
+1 15658 1
+15658 15658 1
+1 15659 1
+15659 15659 1
+1 15660 1
+15660 15660 1
+1 15661 1
+15661 15661 1
+1 15662 1
+15662 15662 1
+1 15663 1
+15663 15663 1
+1 15664 1
+15664 15664 1
+1 15665 1
+15665 15665 1
+1 15666 1
+15666 15666 1
+1 15667 1
+15667 15667 1
+1 15668 1
+15668 15668 1
+1 15669 1
+15669 15669 1
+1 15670 1
+15670 15670 1
+1 15671 1
+15671 15671 1
+1 15672 1
+15672 15672 1
+1 15673 1
+15673 15673 1
+1 15674 1
+15674 15674 1
+1 15675 1
+15675 15675 1
+1 15676 1
+15676 15676 1
+1 15677 1
+15677 15677 1
+1 15678 1
+15678 15678 1
+1 15679 1
+15679 15679 1
+1 15680 1
+15680 15680 1
+1 15681 1
+15681 15681 1
+1 15682 1
+15682 15682 1
+1 15683 1
+15683 15683 1
+1 15684 1
+15684 15684 1
+1 15685 1
+15685 15685 1
+1 15686 1
+15686 15686 1
+1 15687 1
+15687 15687 1
+1 15688 1
+15688 15688 1
+1 15689 1
+15689 15689 1
+1 15690 1
+15690 15690 1
+1 15691 1
+15691 15691 1
+1 15692 1
+15692 15692 1
+1 15693 1
+15693 15693 1
+1 15694 1
+15694 15694 1
+1 15695 1
+15695 15695 1
+1 15696 1
+15696 15696 1
+1 15697 1
+15697 15697 1
+1 15698 1
+15698 15698 1
+1 15699 1
+15699 15699 1
+1 15700 1
+15700 15700 1
+1 15701 1
+15701 15701 1
+1 15702 1
+15702 15702 1
+1 15703 1
+15703 15703 1
+1 15704 1
+15704 15704 1
+1 15705 1
+15705 15705 1
+1 15706 1
+15706 15706 1
+1 15707 1
+15707 15707 1
+1 15708 1
+15708 15708 1
+1 15709 1
+15709 15709 1
+1 15710 1
+15710 15710 1
+1 15711 1
+15711 15711 1
+1 15712 1
+15712 15712 1
+1 15713 1
+15713 15713 1
+1 15714 1
+15714 15714 1
+1 15715 1
+15715 15715 1
+1 15716 1
+15716 15716 1
+1 15717 1
+15717 15717 1
+1 15718 1
+15718 15718 1
+1 15719 1
+15719 15719 1
+1 15720 1
+15720 15720 1
+1 15721 1
+15721 15721 1
+1 15722 1
+15722 15722 1
+1 15723 1
+15723 15723 1
+1 15724 1
+15724 15724 1
+1 15725 1
+15725 15725 1
+1 15726 1
+15726 15726 1
+1 15727 1
+15727 15727 1
+1 15728 1
+15728 15728 1
+1 15729 1
+15729 15729 1
+1 15730 1
+15730 15730 1
+1 15731 1
+15731 15731 1
+1 15732 1
+15732 15732 1
+1 15733 1
+15733 15733 1
+1 15734 1
+15734 15734 1
+1 15735 1
+15735 15735 1
+1 15736 1
+15736 15736 1
+1 15737 1
+15737 15737 1
+1 15738 1
+15738 15738 1
+1 15739 1
+15739 15739 1
+1 15740 1
+15740 15740 1
+1 15741 1
+15741 15741 1
+1 15742 1
+15742 15742 1
+1 15743 1
+15743 15743 1
+1 15744 1
+15744 15744 1
+1 15745 1
+15745 15745 1
+1 15746 1
+15746 15746 1
+1 15747 1
+15747 15747 1
+1 15748 1
+15748 15748 1
+1 15749 1
+15749 15749 1
+1 15750 1
+15750 15750 1
+1 15751 1
+15751 15751 1
+1 15752 1
+15752 15752 1
+1 15753 1
+15753 15753 1
+1 15754 1
+15754 15754 1
+1 15755 1
+15755 15755 1
+1 15756 1
+15756 15756 1
+1 15757 1
+15757 15757 1
+1 15758 1
+15758 15758 1
+1 15759 1
+15759 15759 1
+1 15760 1
+15760 15760 1
+1 15761 1
+15761 15761 1
+1 15762 1
+15762 15762 1
+1 15763 1
+15763 15763 1
+1 15764 1
+15764 15764 1
+1 15765 1
+15765 15765 1
+1 15766 1
+15766 15766 1
+1 15767 1
+15767 15767 1
+1 15768 1
+15768 15768 1
+1 15769 1
+15769 15769 1
+1 15770 1
+15770 15770 1
+1 15771 1
+15771 15771 1
+1 15772 1
+15772 15772 1
+1 15773 1
+15773 15773 1
+1 15774 1
+15774 15774 1
+1 15775 1
+15775 15775 1
+1 15776 1
+15776 15776 1
+1 15777 1
+15777 15777 1
+1 15778 1
+15778 15778 1
+1 15779 1
+15779 15779 1
+1 15780 1
+15780 15780 1
+1 15781 1
+15781 15781 1
+1 15782 1
+15782 15782 1
+1 15783 1
+15783 15783 1
+1 15784 1
+15784 15784 1
+1 15785 1
+15785 15785 1
+1 15786 1
+15786 15786 1
+1 15787 1
+15787 15787 1
+1 15788 1
+15788 15788 1
+1 15789 1
+15789 15789 1
+1 15790 1
+15790 15790 1
+1 15791 1
+15791 15791 1
+1 15792 1
+15792 15792 1
+1 15793 1
+15793 15793 1
+1 15794 1
+15794 15794 1
+1 15795 1
+15795 15795 1
+1 15796 1
+15796 15796 1
+1 15797 1
+15797 15797 1
+1 15798 1
+15798 15798 1
+1 15799 1
+15799 15799 1
+1 15800 1
+15800 15800 1
+1 15801 1
+15801 15801 1
+1 15802 1
+15802 15802 1
+1 15803 1
+15803 15803 1
+1 15804 1
+15804 15804 1
+1 15805 1
+15805 15805 1
+1 15806 1
+15806 15806 1
+1 15807 1
+15807 15807 1
+1 15808 1
+15808 15808 1
+1 15809 1
+15809 15809 1
+1 15810 1
+15810 15810 1
+1 15811 1
+15811 15811 1
+1 15812 1
+15812 15812 1
+1 15813 1
+15813 15813 1
+1 15814 1
+15814 15814 1
+1 15815 1
+15815 15815 1
+1 15816 1
+15816 15816 1
+1 15817 1
+15817 15817 1
+1 15818 1
+15818 15818 1
+1 15819 1
+15819 15819 1
+1 15820 1
+15820 15820 1
+1 15821 1
+15821 15821 1
+1 15822 1
+15822 15822 1
+1 15823 1
+15823 15823 1
+1 15824 1
+15824 15824 1
+1 15825 1
+15825 15825 1
+1 15826 1
+15826 15826 1
+1 15827 1
+15827 15827 1
+1 15828 1
+15828 15828 1
+1 15829 1
+15829 15829 1
+1 15830 1
+15830 15830 1
+1 15831 1
+15831 15831 1
+1 15832 1
+15832 15832 1
+1 15833 1
+15833 15833 1
+1 15834 1
+15834 15834 1
+1 15835 1
+15835 15835 1
+1 15836 1
+15836 15836 1
+1 15837 1
+15837 15837 1
+1 15838 1
+15838 15838 1
+1 15839 1
+15839 15839 1
+1 15840 1
+15840 15840 1
+1 15841 1
+15841 15841 1
+1 15842 1
+15842 15842 1
+1 15843 1
+15843 15843 1
+1 15844 1
+15844 15844 1
+1 15845 1
+15845 15845 1
+1 15846 1
+15846 15846 1
+1 15847 1
+15847 15847 1
+1 15848 1
+15848 15848 1
+1 15849 1
+15849 15849 1
+1 15850 1
+15850 15850 1
+1 15851 1
+15851 15851 1
+1 15852 1
+15852 15852 1
+1 15853 1
+15853 15853 1
+1 15854 1
+15854 15854 1
+1 15855 1
+15855 15855 1
+1 15856 1
+15856 15856 1
+1 15857 1
+15857 15857 1
+1 15858 1
+15858 15858 1
+1 15859 1
+15859 15859 1
+1 15860 1
+15860 15860 1
+1 15861 1
+15861 15861 1
+1 15862 1
+15862 15862 1
+1 15863 1
+15863 15863 1
+1 15864 1
+15864 15864 1
+1 15865 1
+15865 15865 1
+1 15866 1
+15866 15866 1
+1 15867 1
+15867 15867 1
+1 15868 1
+15868 15868 1
+1 15869 1
+15869 15869 1
+1 15870 1
+15870 15870 1
+1 15871 1
+15871 15871 1
+1 15872 1
+15872 15872 1
+1 15873 1
+15873 15873 1
+1 15874 1
+15874 15874 1
+1 15875 1
+15875 15875 1
+1 15876 1
+15876 15876 1
+1 15877 1
+15877 15877 1
+1 15878 1
+15878 15878 1
+1 15879 1
+15879 15879 1
+1 15880 1
+15880 15880 1
+1 15881 1
+15881 15881 1
+1 15882 1
+15882 15882 1
+1 15883 1
+15883 15883 1
+1 15884 1
+15884 15884 1
+1 15885 1
+15885 15885 1
+1 15886 1
+15886 15886 1
+1 15887 1
+15887 15887 1
+1 15888 1
+15888 15888 1
+1 15889 1
+15889 15889 1
+1 15890 1
+15890 15890 1
+1 15891 1
+15891 15891 1
+1 15892 1
+15892 15892 1
+1 15893 1
+15893 15893 1
+1 15894 1
+15894 15894 1
+1 15895 1
+15895 15895 1
+1 15896 1
+15896 15896 1
+1 15897 1
+15897 15897 1
+1 15898 1
+15898 15898 1
+1 15899 1
+15899 15899 1
+1 15900 1
+15900 15900 1
+1 15901 1
+15901 15901 1
+1 15902 1
+15902 15902 1
+1 15903 1
+15903 15903 1
+1 15904 1
+15904 15904 1
+1 15905 1
+15905 15905 1
+1 15906 1
+15906 15906 1
+1 15907 1
+15907 15907 1
+1 15908 1
+15908 15908 1
+1 15909 1
+15909 15909 1
+1 15910 1
+15910 15910 1
+1 15911 1
+15911 15911 1
+1 15912 1
+15912 15912 1
+1 15913 1
+15913 15913 1
+1 15914 1
+15914 15914 1
+1 15915 1
+15915 15915 1
+1 15916 1
+15916 15916 1
+1 15917 1
+15917 15917 1
+1 15918 1
+15918 15918 1
+1 15919 1
+15919 15919 1
+1 15920 1
+15920 15920 1
+1 15921 1
+15921 15921 1
+1 15922 1
+15922 15922 1
+1 15923 1
+15923 15923 1
+1 15924 1
+15924 15924 1
+1 15925 1
+15925 15925 1
+1 15926 1
+15926 15926 1
+1 15927 1
+15927 15927 1
+1 15928 1
+15928 15928 1
+1 15929 1
+15929 15929 1
+1 15930 1
+15930 15930 1
+1 15931 1
+15931 15931 1
+1 15932 1
+15932 15932 1
+1 15933 1
+15933 15933 1
+1 15934 1
+15934 15934 1
+1 15935 1
+15935 15935 1
+1 15936 1
+15936 15936 1
+1 15937 1
+15937 15937 1
+1 15938 1
+15938 15938 1
+1 15939 1
+15939 15939 1
+1 15940 1
+15940 15940 1
+1 15941 1
+15941 15941 1
+1 15942 1
+15942 15942 1
+1 15943 1
+15943 15943 1
+1 15944 1
+15944 15944 1
+1 15945 1
+15945 15945 1
+1 15946 1
+15946 15946 1
+1 15947 1
+15947 15947 1
+1 15948 1
+15948 15948 1
+1 15949 1
+15949 15949 1
+1 15950 1
+15950 15950 1
+1 15951 1
+15951 15951 1
+1 15952 1
+15952 15952 1
+1 15953 1
+15953 15953 1
+1 15954 1
+15954 15954 1
+1 15955 1
+15955 15955 1
+1 15956 1
+15956 15956 1
+1 15957 1
+15957 15957 1
+1 15958 1
+15958 15958 1
+1 15959 1
+15959 15959 1
+1 15960 1
+15960 15960 1
+1 15961 1
+15961 15961 1
+1 15962 1
+15962 15962 1
+1 15963 1
+15963 15963 1
+1 15964 1
+15964 15964 1
+1 15965 1
+15965 15965 1
+1 15966 1
+15966 15966 1
+1 15967 1
+15967 15967 1
+1 15968 1
+15968 15968 1
+1 15969 1
+15969 15969 1
+1 15970 1
+15970 15970 1
+1 15971 1
+15971 15971 1
+1 15972 1
+15972 15972 1
+1 15973 1
+15973 15973 1
+1 15974 1
+15974 15974 1
+1 15975 1
+15975 15975 1
+1 15976 1
+15976 15976 1
+1 15977 1
+15977 15977 1
+1 15978 1
+15978 15978 1
+1 15979 1
+15979 15979 1
+1 15980 1
+15980 15980 1
+1 15981 1
+15981 15981 1
+1 15982 1
+15982 15982 1
+1 15983 1
+15983 15983 1
+1 15984 1
+15984 15984 1
+1 15985 1
+15985 15985 1
+1 15986 1
+15986 15986 1
+1 15987 1
+15987 15987 1
+1 15988 1
+15988 15988 1
+1 15989 1
+15989 15989 1
+1 15990 1
+15990 15990 1
+1 15991 1
+15991 15991 1
+1 15992 1
+15992 15992 1
+1 15993 1
+15993 15993 1
+1 15994 1
+15994 15994 1
+1 15995 1
+15995 15995 1
+1 15996 1
+15996 15996 1
+1 15997 1
+15997 15997 1
+1 15998 1
+15998 15998 1
+1 15999 1
+15999 15999 1
+1 16000 1
+16000 16000 1
+1 16001 1
+16001 16001 1
+1 16002 1
+16002 16002 1
+1 16003 1
+16003 16003 1
+1 16004 1
+16004 16004 1
+1 16005 1
+16005 16005 1
+1 16006 1
+16006 16006 1
+1 16007 1
+16007 16007 1
+1 16008 1
+16008 16008 1
+1 16009 1
+16009 16009 1
+1 16010 1
+16010 16010 1
+1 16011 1
+16011 16011 1
+1 16012 1
+16012 16012 1
+1 16013 1
+16013 16013 1
+1 16014 1
+16014 16014 1
+1 16015 1
+16015 16015 1
+1 16016 1
+16016 16016 1
+1 16017 1
+16017 16017 1
+1 16018 1
+16018 16018 1
+1 16019 1
+16019 16019 1
+1 16020 1
+16020 16020 1
+1 16021 1
+16021 16021 1
+1 16022 1
+16022 16022 1
+1 16023 1
+16023 16023 1
+1 16024 1
+16024 16024 1
+1 16025 1
+16025 16025 1
+1 16026 1
+16026 16026 1
+1 16027 1
+16027 16027 1
+1 16028 1
+16028 16028 1
+1 16029 1
+16029 16029 1
+1 16030 1
+16030 16030 1
+1 16031 1
+16031 16031 1
+1 16032 1
+16032 16032 1
+1 16033 1
+16033 16033 1
+1 16034 1
+16034 16034 1
+1 16035 1
+16035 16035 1
+1 16036 1
+16036 16036 1
+1 16037 1
+16037 16037 1
+1 16038 1
+16038 16038 1
+1 16039 1
+16039 16039 1
+1 16040 1
+16040 16040 1
+1 16041 1
+16041 16041 1
+1 16042 1
+16042 16042 1
+1 16043 1
+16043 16043 1
+1 16044 1
+16044 16044 1
+1 16045 1
+16045 16045 1
+1 16046 1
+16046 16046 1
+1 16047 1
+16047 16047 1
+1 16048 1
+16048 16048 1
+1 16049 1
+16049 16049 1
+1 16050 1
+16050 16050 1
+1 16051 1
+16051 16051 1
+1 16052 1
+16052 16052 1
+1 16053 1
+16053 16053 1
+1 16054 1
+16054 16054 1
+1 16055 1
+16055 16055 1
+1 16056 1
+16056 16056 1
+1 16057 1
+16057 16057 1
+1 16058 1
+16058 16058 1
+1 16059 1
+16059 16059 1
+1 16060 1
+16060 16060 1
+1 16061 1
+16061 16061 1
+1 16062 1
+16062 16062 1
+1 16063 1
+16063 16063 1
+1 16064 1
+16064 16064 1
+1 16065 1
+16065 16065 1
+1 16066 1
+16066 16066 1
+1 16067 1
+16067 16067 1
+1 16068 1
+16068 16068 1
+1 16069 1
+16069 16069 1
+1 16070 1
+16070 16070 1
+1 16071 1
+16071 16071 1
+1 16072 1
+16072 16072 1
+1 16073 1
+16073 16073 1
+1 16074 1
+16074 16074 1
+1 16075 1
+16075 16075 1
+1 16076 1
+16076 16076 1
+1 16077 1
+16077 16077 1
+1 16078 1
+16078 16078 1
+1 16079 1
+16079 16079 1
+1 16080 1
+16080 16080 1
+1 16081 1
+16081 16081 1
+1 16082 1
+16082 16082 1
+1 16083 1
+16083 16083 1
+1 16084 1
+16084 16084 1
+1 16085 1
+16085 16085 1
+1 16086 1
+16086 16086 1
+1 16087 1
+16087 16087 1
+1 16088 1
+16088 16088 1
+1 16089 1
+16089 16089 1
+1 16090 1
+16090 16090 1
+1 16091 1
+16091 16091 1
+1 16092 1
+16092 16092 1
+1 16093 1
+16093 16093 1
+1 16094 1
+16094 16094 1
+1 16095 1
+16095 16095 1
+1 16096 1
+16096 16096 1
+1 16097 1
+16097 16097 1
+1 16098 1
+16098 16098 1
+1 16099 1
+16099 16099 1
+1 16100 1
+16100 16100 1
+1 16101 1
+16101 16101 1
+1 16102 1
+16102 16102 1
+1 16103 1
+16103 16103 1
+1 16104 1
+16104 16104 1
+1 16105 1
+16105 16105 1
+1 16106 1
+16106 16106 1
+1 16107 1
+16107 16107 1
+1 16108 1
+16108 16108 1
+1 16109 1
+16109 16109 1
+1 16110 1
+16110 16110 1
+1 16111 1
+16111 16111 1
+1 16112 1
+16112 16112 1
+1 16113 1
+16113 16113 1
+1 16114 1
+16114 16114 1
+1 16115 1
+16115 16115 1
+1 16116 1
+16116 16116 1
+1 16117 1
+16117 16117 1
+1 16118 1
+16118 16118 1
+1 16119 1
+16119 16119 1
+1 16120 1
+16120 16120 1
+1 16121 1
+16121 16121 1
+1 16122 1
+16122 16122 1
+1 16123 1
+16123 16123 1
+1 16124 1
+16124 16124 1
+1 16125 1
+16125 16125 1
+1 16126 1
+16126 16126 1
+1 16127 1
+16127 16127 1
+1 16128 1
+16128 16128 1
+1 16129 1
+16129 16129 1
+1 16130 1
+16130 16130 1
+1 16131 1
+16131 16131 1
+1 16132 1
+16132 16132 1
+1 16133 1
+16133 16133 1
+1 16134 1
+16134 16134 1
+1 16135 1
+16135 16135 1
+1 16136 1
+16136 16136 1
+1 16137 1
+16137 16137 1
+1 16138 1
+16138 16138 1
+1 16139 1
+16139 16139 1
+1 16140 1
+16140 16140 1
+1 16141 1
+16141 16141 1
+1 16142 1
+16142 16142 1
+1 16143 1
+16143 16143 1
+1 16144 1
+16144 16144 1
+1 16145 1
+16145 16145 1
+1 16146 1
+16146 16146 1
+1 16147 1
+16147 16147 1
+1 16148 1
+16148 16148 1
+1 16149 1
+16149 16149 1
+1 16150 1
+16150 16150 1
+1 16151 1
+16151 16151 1
+1 16152 1
+16152 16152 1
+1 16153 1
+16153 16153 1
+1 16154 1
+16154 16154 1
+1 16155 1
+16155 16155 1
+1 16156 1
+16156 16156 1
+1 16157 1
+16157 16157 1
+1 16158 1
+16158 16158 1
+1 16159 1
+16159 16159 1
+1 16160 1
+16160 16160 1
+1 16161 1
+16161 16161 1
+1 16162 1
+16162 16162 1
+1 16163 1
+16163 16163 1
+1 16164 1
+16164 16164 1
+1 16165 1
+16165 16165 1
+1 16166 1
+16166 16166 1
+1 16167 1
+16167 16167 1
+1 16168 1
+16168 16168 1
+1 16169 1
+16169 16169 1
+1 16170 1
+16170 16170 1
+1 16171 1
+16171 16171 1
+1 16172 1
+16172 16172 1
+1 16173 1
+16173 16173 1
+1 16174 1
+16174 16174 1
+1 16175 1
+16175 16175 1
+1 16176 1
+16176 16176 1
+1 16177 1
+16177 16177 1
+1 16178 1
+16178 16178 1
+1 16179 1
+16179 16179 1
+1 16180 1
+16180 16180 1
+1 16181 1
+16181 16181 1
+1 16182 1
+16182 16182 1
+1 16183 1
+16183 16183 1
+1 16184 1
+16184 16184 1
+1 16185 1
+16185 16185 1
+1 16186 1
+16186 16186 1
+1 16187 1
+16187 16187 1
+1 16188 1
+16188 16188 1
+1 16189 1
+16189 16189 1
+1 16190 1
+16190 16190 1
+1 16191 1
+16191 16191 1
+1 16192 1
+16192 16192 1
+1 16193 1
+16193 16193 1
+1 16194 1
+16194 16194 1
+1 16195 1
+16195 16195 1
+1 16196 1
+16196 16196 1
+1 16197 1
+16197 16197 1
+1 16198 1
+16198 16198 1
+1 16199 1
+16199 16199 1
+1 16200 1
+16200 16200 1
+1 16201 1
+16201 16201 1
+1 16202 1
+16202 16202 1
+1 16203 1
+16203 16203 1
+1 16204 1
+16204 16204 1
+1 16205 1
+16205 16205 1
+1 16206 1
+16206 16206 1
+1 16207 1
+16207 16207 1
+1 16208 1
+16208 16208 1
+1 16209 1
+16209 16209 1
+1 16210 1
+16210 16210 1
+1 16211 1
+16211 16211 1
+1 16212 1
+16212 16212 1
+1 16213 1
+16213 16213 1
+1 16214 1
+16214 16214 1
+1 16215 1
+16215 16215 1
+1 16216 1
+16216 16216 1
+1 16217 1
+16217 16217 1
+1 16218 1
+16218 16218 1
+1 16219 1
+16219 16219 1
+1 16220 1
+16220 16220 1
+1 16221 1
+16221 16221 1
+1 16222 1
+16222 16222 1
+1 16223 1
+16223 16223 1
+1 16224 1
+16224 16224 1
+1 16225 1
+16225 16225 1
+1 16226 1
+16226 16226 1
+1 16227 1
+16227 16227 1
+1 16228 1
+16228 16228 1
+1 16229 1
+16229 16229 1
+1 16230 1
+16230 16230 1
+1 16231 1
+16231 16231 1
+1 16232 1
+16232 16232 1
+1 16233 1
+16233 16233 1
+1 16234 1
+16234 16234 1
+1 16235 1
+16235 16235 1
+1 16236 1
+16236 16236 1
+1 16237 1
+16237 16237 1
+1 16238 1
+16238 16238 1
+1 16239 1
+16239 16239 1
+1 16240 1
+16240 16240 1
+1 16241 1
+16241 16241 1
+1 16242 1
+16242 16242 1
+1 16243 1
+16243 16243 1
+1 16244 1
+16244 16244 1
+1 16245 1
+16245 16245 1
+1 16246 1
+16246 16246 1
+1 16247 1
+16247 16247 1
+1 16248 1
+16248 16248 1
+1 16249 1
+16249 16249 1
+1 16250 1
+16250 16250 1
+1 16251 1
+16251 16251 1
+1 16252 1
+16252 16252 1
+1 16253 1
+16253 16253 1
+1 16254 1
+16254 16254 1
+1 16255 1
+16255 16255 1
+1 16256 1
+16256 16256 1
+1 16257 1
+16257 16257 1
+1 16258 1
+16258 16258 1
+1 16259 1
+16259 16259 1
+1 16260 1
+16260 16260 1
+1 16261 1
+16261 16261 1
+1 16262 1
+16262 16262 1
+1 16263 1
+16263 16263 1
+1 16264 1
+16264 16264 1
+1 16265 1
+16265 16265 1
+1 16266 1
+16266 16266 1
+1 16267 1
+16267 16267 1
+1 16268 1
+16268 16268 1
+1 16269 1
+16269 16269 1
+1 16270 1
+16270 16270 1
+1 16271 1
+16271 16271 1
+1 16272 1
+16272 16272 1
+1 16273 1
+16273 16273 1
+1 16274 1
+16274 16274 1
+1 16275 1
+16275 16275 1
+1 16276 1
+16276 16276 1
+1 16277 1
+16277 16277 1
+1 16278 1
+16278 16278 1
+1 16279 1
+16279 16279 1
+1 16280 1
+16280 16280 1
+1 16281 1
+16281 16281 1
+1 16282 1
+16282 16282 1
+1 16283 1
+16283 16283 1
+1 16284 1
+16284 16284 1
+1 16285 1
+16285 16285 1
+1 16286 1
+16286 16286 1
+1 16287 1
+16287 16287 1
+1 16288 1
+16288 16288 1
+1 16289 1
+16289 16289 1
+1 16290 1
+16290 16290 1
+1 16291 1
+16291 16291 1
+1 16292 1
+16292 16292 1
+1 16293 1
+16293 16293 1
+1 16294 1
+16294 16294 1
+1 16295 1
+16295 16295 1
+1 16296 1
+16296 16296 1
+1 16297 1
+16297 16297 1
+1 16298 1
+16298 16298 1
+1 16299 1
+16299 16299 1
+1 16300 1
+16300 16300 1
+1 16301 1
+16301 16301 1
+1 16302 1
+16302 16302 1
+1 16303 1
+16303 16303 1
+1 16304 1
+16304 16304 1
+1 16305 1
+16305 16305 1
+1 16306 1
+16306 16306 1
+1 16307 1
+16307 16307 1
+1 16308 1
+16308 16308 1
+1 16309 1
+16309 16309 1
+1 16310 1
+16310 16310 1
+1 16311 1
+16311 16311 1
+1 16312 1
+16312 16312 1
+1 16313 1
+16313 16313 1
+1 16314 1
+16314 16314 1
+1 16315 1
+16315 16315 1
+1 16316 1
+16316 16316 1
+1 16317 1
+16317 16317 1
+1 16318 1
+16318 16318 1
+1 16319 1
+16319 16319 1
+1 16320 1
+16320 16320 1
+1 16321 1
+16321 16321 1
+1 16322 1
+16322 16322 1
+1 16323 1
+16323 16323 1
+1 16324 1
+16324 16324 1
+1 16325 1
+16325 16325 1
+1 16326 1
+16326 16326 1
+1 16327 1
+16327 16327 1
+1 16328 1
+16328 16328 1
+1 16329 1
+16329 16329 1
+1 16330 1
+16330 16330 1
+1 16331 1
+16331 16331 1
+1 16332 1
+16332 16332 1
+1 16333 1
+16333 16333 1
+1 16334 1
+16334 16334 1
+1 16335 1
+16335 16335 1
+1 16336 1
+16336 16336 1
+1 16337 1
+16337 16337 1
+1 16338 1
+16338 16338 1
+1 16339 1
+16339 16339 1
+1 16340 1
+16340 16340 1
+1 16341 1
+16341 16341 1
+1 16342 1
+16342 16342 1
+1 16343 1
+16343 16343 1
+1 16344 1
+16344 16344 1
+1 16345 1
+16345 16345 1
+1 16346 1
+16346 16346 1
+1 16347 1
+16347 16347 1
+1 16348 1
+16348 16348 1
+1 16349 1
+16349 16349 1
+1 16350 1
+16350 16350 1
+1 16351 1
+16351 16351 1
+1 16352 1
+16352 16352 1
+1 16353 1
+16353 16353 1
+1 16354 1
+16354 16354 1
+1 16355 1
+16355 16355 1
+1 16356 1
+16356 16356 1
+1 16357 1
+16357 16357 1
+1 16358 1
+16358 16358 1
+1 16359 1
+16359 16359 1
+1 16360 1
+16360 16360 1
+1 16361 1
+16361 16361 1
+1 16362 1
+16362 16362 1
+1 16363 1
+16363 16363 1
+1 16364 1
+16364 16364 1
+1 16365 1
+16365 16365 1
+1 16366 1
+16366 16366 1
+1 16367 1
+16367 16367 1
+1 16368 1
+16368 16368 1
+1 16369 1
+16369 16369 1
+1 16370 1
+16370 16370 1
+1 16371 1
+16371 16371 1
+1 16372 1
+16372 16372 1
+1 16373 1
+16373 16373 1
+1 16374 1
+16374 16374 1
+1 16375 1
+16375 16375 1
+1 16376 1
+16376 16376 1
+1 16377 1
+16377 16377 1
+1 16378 1
+16378 16378 1
+1 16379 1
+16379 16379 1
+1 16380 1
+16380 16380 1
+1 16381 1
+16381 16381 1
+1 16382 1
+16382 16382 1
+1 16383 1
+16383 16383 1
+1 16384 1
+16384 16384 1
+1 16385 1
+16385 16385 1
+1 16386 1
+16386 16386 1
+1 16387 1
+16387 16387 1
+1 16388 1
+16388 16388 1
+1 16389 1
+16389 16389 1
+1 16390 1
+16390 16390 1
+1 16391 1
+16391 16391 1
+1 16392 1
+16392 16392 1
+1 16393 1
+16393 16393 1
+1 16394 1
+16394 16394 1
+1 16395 1
+16395 16395 1
+1 16396 1
+16396 16396 1
+1 16397 1
+16397 16397 1
+1 16398 1
+16398 16398 1
+1 16399 1
+16399 16399 1
+1 16400 1
+16400 16400 1
+1 16401 1
+16401 16401 1
+1 16402 1
+16402 16402 1
+1 16403 1
+16403 16403 1
+1 16404 1
+16404 16404 1
+1 16405 1
+16405 16405 1
+1 16406 1
+16406 16406 1
+1 16407 1
+16407 16407 1
+1 16408 1
+16408 16408 1
+1 16409 1
+16409 16409 1
+1 16410 1
+16410 16410 1
+1 16411 1
+16411 16411 1
+1 16412 1
+16412 16412 1
+1 16413 1
+16413 16413 1
+1 16414 1
+16414 16414 1
+1 16415 1
+16415 16415 1
+1 16416 1
+16416 16416 1
+1 16417 1
+16417 16417 1
+1 16418 1
+16418 16418 1
+1 16419 1
+16419 16419 1
+1 16420 1
+16420 16420 1
+1 16421 1
+16421 16421 1
+1 16422 1
+16422 16422 1
+1 16423 1
+16423 16423 1
+1 16424 1
+16424 16424 1
+1 16425 1
+16425 16425 1
+1 16426 1
+16426 16426 1
+1 16427 1
+16427 16427 1
+1 16428 1
+16428 16428 1
+1 16429 1
+16429 16429 1
+1 16430 1
+16430 16430 1
+1 16431 1
+16431 16431 1
+1 16432 1
+16432 16432 1
+1 16433 1
+16433 16433 1
+1 16434 1
+16434 16434 1
+1 16435 1
+16435 16435 1
+1 16436 1
+16436 16436 1
+1 16437 1
+16437 16437 1
+1 16438 1
+16438 16438 1
+1 16439 1
+16439 16439 1
+1 16440 1
+16440 16440 1
+1 16441 1
+16441 16441 1
+1 16442 1
+16442 16442 1
+1 16443 1
+16443 16443 1
+1 16444 1
+16444 16444 1
+1 16445 1
+16445 16445 1
+1 16446 1
+16446 16446 1
+1 16447 1
+16447 16447 1
+1 16448 1
+16448 16448 1
+1 16449 1
+16449 16449 1
+1 16450 1
+16450 16450 1
+1 16451 1
+16451 16451 1
+1 16452 1
+16452 16452 1
+1 16453 1
+16453 16453 1
+1 16454 1
+16454 16454 1
+1 16455 1
+16455 16455 1
+1 16456 1
+16456 16456 1
+1 16457 1
+16457 16457 1
+1 16458 1
+16458 16458 1
+1 16459 1
+16459 16459 1
+1 16460 1
+16460 16460 1
+1 16461 1
+16461 16461 1
+1 16462 1
+16462 16462 1
+1 16463 1
+16463 16463 1
+1 16464 1
+16464 16464 1
+1 16465 1
+16465 16465 1
+1 16466 1
+16466 16466 1
+1 16467 1
+16467 16467 1
+1 16468 1
+16468 16468 1
+1 16469 1
+16469 16469 1
+1 16470 1
+16470 16470 1
+1 16471 1
+16471 16471 1
+1 16472 1
+16472 16472 1
+1 16473 1
+16473 16473 1
+1 16474 1
+16474 16474 1
+1 16475 1
+16475 16475 1
+1 16476 1
+16476 16476 1
+1 16477 1
+16477 16477 1
+1 16478 1
+16478 16478 1
+1 16479 1
+16479 16479 1
+1 16480 1
+16480 16480 1
+1 16481 1
+16481 16481 1
+1 16482 1
+16482 16482 1
+1 16483 1
+16483 16483 1
+1 16484 1
+16484 16484 1
+1 16485 1
+16485 16485 1
+1 16486 1
+16486 16486 1
+1 16487 1
+16487 16487 1
+1 16488 1
+16488 16488 1
+1 16489 1
+16489 16489 1
+1 16490 1
+16490 16490 1
+1 16491 1
+16491 16491 1
+1 16492 1
+16492 16492 1
+1 16493 1
+16493 16493 1
+1 16494 1
+16494 16494 1
+1 16495 1
+16495 16495 1
+1 16496 1
+16496 16496 1
+1 16497 1
+16497 16497 1
+1 16498 1
+16498 16498 1
+1 16499 1
+16499 16499 1
+1 16500 1
+16500 16500 1
+1 16501 1
+16501 16501 1
+1 16502 1
+16502 16502 1
+1 16503 1
+16503 16503 1
+1 16504 1
+16504 16504 1
+1 16505 1
+16505 16505 1
+1 16506 1
+16506 16506 1
+1 16507 1
+16507 16507 1
+1 16508 1
+16508 16508 1
+1 16509 1
+16509 16509 1
+1 16510 1
+16510 16510 1
+1 16511 1
+16511 16511 1
+1 16512 1
+16512 16512 1
+1 16513 1
+16513 16513 1
+1 16514 1
+16514 16514 1
+1 16515 1
+16515 16515 1
+1 16516 1
+16516 16516 1
+1 16517 1
+16517 16517 1
+1 16518 1
+16518 16518 1
+1 16519 1
+16519 16519 1
+1 16520 1
+16520 16520 1
+1 16521 1
+16521 16521 1
+1 16522 1
+16522 16522 1
+1 16523 1
+16523 16523 1
+1 16524 1
+16524 16524 1
+1 16525 1
+16525 16525 1
+1 16526 1
+16526 16526 1
+1 16527 1
+16527 16527 1
+1 16528 1
+16528 16528 1
+1 16529 1
+16529 16529 1
+1 16530 1
+16530 16530 1
+1 16531 1
+16531 16531 1
+1 16532 1
+16532 16532 1
+1 16533 1
+16533 16533 1
+1 16534 1
+16534 16534 1
+1 16535 1
+16535 16535 1
+1 16536 1
+16536 16536 1
+1 16537 1
+16537 16537 1
+1 16538 1
+16538 16538 1
+1 16539 1
+16539 16539 1
+1 16540 1
+16540 16540 1
+1 16541 1
+16541 16541 1
+1 16542 1
+16542 16542 1
+1 16543 1
+16543 16543 1
+1 16544 1
+16544 16544 1
+1 16545 1
+16545 16545 1
+1 16546 1
+16546 16546 1
+1 16547 1
+16547 16547 1
+1 16548 1
+16548 16548 1
+1 16549 1
+16549 16549 1
+1 16550 1
+16550 16550 1
+1 16551 1
+16551 16551 1
+1 16552 1
+16552 16552 1
+1 16553 1
+16553 16553 1
+1 16554 1
+16554 16554 1
+1 16555 1
+16555 16555 1
+1 16556 1
+16556 16556 1
+1 16557 1
+16557 16557 1
+1 16558 1
+16558 16558 1
+1 16559 1
+16559 16559 1
+1 16560 1
+16560 16560 1
+1 16561 1
+16561 16561 1
+1 16562 1
+16562 16562 1
+1 16563 1
+16563 16563 1
+1 16564 1
+16564 16564 1
+1 16565 1
+16565 16565 1
+1 16566 1
+16566 16566 1
+1 16567 1
+16567 16567 1
+1 16568 1
+16568 16568 1
+1 16569 1
+16569 16569 1
+1 16570 1
+16570 16570 1
+1 16571 1
+16571 16571 1
+1 16572 1
+16572 16572 1
+1 16573 1
+16573 16573 1
+1 16574 1
+16574 16574 1
+1 16575 1
+16575 16575 1
+1 16576 1
+16576 16576 1
+1 16577 1
+16577 16577 1
+1 16578 1
+16578 16578 1
+1 16579 1
+16579 16579 1
+1 16580 1
+16580 16580 1
+1 16581 1
+16581 16581 1
+1 16582 1
+16582 16582 1
+1 16583 1
+16583 16583 1
+1 16584 1
+16584 16584 1
+1 16585 1
+16585 16585 1
+1 16586 1
+16586 16586 1
+1 16587 1
+16587 16587 1
+1 16588 1
+16588 16588 1
+1 16589 1
+16589 16589 1
+1 16590 1
+16590 16590 1
+1 16591 1
+16591 16591 1
+1 16592 1
+16592 16592 1
+1 16593 1
+16593 16593 1
+1 16594 1
+16594 16594 1
+1 16595 1
+16595 16595 1
+1 16596 1
+16596 16596 1
+1 16597 1
+16597 16597 1
+1 16598 1
+16598 16598 1
+1 16599 1
+16599 16599 1
+1 16600 1
+16600 16600 1
+1 16601 1
+16601 16601 1
+1 16602 1
+16602 16602 1
+1 16603 1
+16603 16603 1
+1 16604 1
+16604 16604 1
+1 16605 1
+16605 16605 1
+1 16606 1
+16606 16606 1
+1 16607 1
+16607 16607 1
+1 16608 1
+16608 16608 1
+1 16609 1
+16609 16609 1
+1 16610 1
+16610 16610 1
+1 16611 1
+16611 16611 1
+1 16612 1
+16612 16612 1
+1 16613 1
+16613 16613 1
+1 16614 1
+16614 16614 1
+1 16615 1
+16615 16615 1
+1 16616 1
+16616 16616 1
+1 16617 1
+16617 16617 1
+1 16618 1
+16618 16618 1
+1 16619 1
+16619 16619 1
+1 16620 1
+16620 16620 1
+1 16621 1
+16621 16621 1
+1 16622 1
+16622 16622 1
+1 16623 1
+16623 16623 1
+1 16624 1
+16624 16624 1
+1 16625 1
+16625 16625 1
+1 16626 1
+16626 16626 1
+1 16627 1
+16627 16627 1
+1 16628 1
+16628 16628 1
+1 16629 1
+16629 16629 1
+1 16630 1
+16630 16630 1
+1 16631 1
+16631 16631 1
+1 16632 1
+16632 16632 1
+1 16633 1
+16633 16633 1
+1 16634 1
+16634 16634 1
+1 16635 1
+16635 16635 1
+1 16636 1
+16636 16636 1
+1 16637 1
+16637 16637 1
+1 16638 1
+16638 16638 1
+1 16639 1
+16639 16639 1
+1 16640 1
+16640 16640 1
+1 16641 1
+16641 16641 1
+1 16642 1
+16642 16642 1
+1 16643 1
+16643 16643 1
+1 16644 1
+16644 16644 1
+1 16645 1
+16645 16645 1
+1 16646 1
+16646 16646 1
+1 16647 1
+16647 16647 1
+1 16648 1
+16648 16648 1
+1 16649 1
+16649 16649 1
+1 16650 1
+16650 16650 1
+1 16651 1
+16651 16651 1
+1 16652 1
+16652 16652 1
+1 16653 1
+16653 16653 1
+1 16654 1
+16654 16654 1
+1 16655 1
+16655 16655 1
+1 16656 1
+16656 16656 1
+1 16657 1
+16657 16657 1
+1 16658 1
+16658 16658 1
+1 16659 1
+16659 16659 1
+1 16660 1
+16660 16660 1
+1 16661 1
+16661 16661 1
+1 16662 1
+16662 16662 1
+1 16663 1
+16663 16663 1
+1 16664 1
+16664 16664 1
+1 16665 1
+16665 16665 1
+1 16666 1
+16666 16666 1
+1 16667 1
+16667 16667 1
+1 16668 1
+16668 16668 1
+1 16669 1
+16669 16669 1
+1 16670 1
+16670 16670 1
+1 16671 1
+16671 16671 1
+1 16672 1
+16672 16672 1
+1 16673 1
+16673 16673 1
+1 16674 1
+16674 16674 1
+1 16675 1
+16675 16675 1
+1 16676 1
+16676 16676 1
+1 16677 1
+16677 16677 1
+1 16678 1
+16678 16678 1
+1 16679 1
+16679 16679 1
+1 16680 1
+16680 16680 1
+1 16681 1
+16681 16681 1
+1 16682 1
+16682 16682 1
+1 16683 1
+16683 16683 1
+1 16684 1
+16684 16684 1
+1 16685 1
+16685 16685 1
+1 16686 1
+16686 16686 1
+1 16687 1
+16687 16687 1
+1 16688 1
+16688 16688 1
+1 16689 1
+16689 16689 1
+1 16690 1
+16690 16690 1
+1 16691 1
+16691 16691 1
+1 16692 1
+16692 16692 1
+1 16693 1
+16693 16693 1
+1 16694 1
+16694 16694 1
+1 16695 1
+16695 16695 1
+1 16696 1
+16696 16696 1
+1 16697 1
+16697 16697 1
+1 16698 1
+16698 16698 1
+1 16699 1
+16699 16699 1
+1 16700 1
+16700 16700 1
+1 16701 1
+16701 16701 1
+1 16702 1
+16702 16702 1
+1 16703 1
+16703 16703 1
+1 16704 1
+16704 16704 1
+1 16705 1
+16705 16705 1
+1 16706 1
+16706 16706 1
+1 16707 1
+16707 16707 1
+1 16708 1
+16708 16708 1
+1 16709 1
+16709 16709 1
+1 16710 1
+16710 16710 1
+1 16711 1
+16711 16711 1
+1 16712 1
+16712 16712 1
+1 16713 1
+16713 16713 1
+1 16714 1
+16714 16714 1
+1 16715 1
+16715 16715 1
+1 16716 1
+16716 16716 1
+1 16717 1
+16717 16717 1
+1 16718 1
+16718 16718 1
+1 16719 1
+16719 16719 1
+1 16720 1
+16720 16720 1
+1 16721 1
+16721 16721 1
+1 16722 1
+16722 16722 1
+1 16723 1
+16723 16723 1
+1 16724 1
+16724 16724 1
+1 16725 1
+16725 16725 1
+1 16726 1
+16726 16726 1
+1 16727 1
+16727 16727 1
+1 16728 1
+16728 16728 1
+1 16729 1
+16729 16729 1
+1 16730 1
+16730 16730 1
+1 16731 1
+16731 16731 1
+1 16732 1
+16732 16732 1
+1 16733 1
+16733 16733 1
+1 16734 1
+16734 16734 1
+1 16735 1
+16735 16735 1
+1 16736 1
+16736 16736 1
+1 16737 1
+16737 16737 1
+1 16738 1
+16738 16738 1
+1 16739 1
+16739 16739 1
+1 16740 1
+16740 16740 1
+1 16741 1
+16741 16741 1
+1 16742 1
+16742 16742 1
+1 16743 1
+16743 16743 1
+1 16744 1
+16744 16744 1
+1 16745 1
+16745 16745 1
+1 16746 1
+16746 16746 1
+1 16747 1
+16747 16747 1
+1 16748 1
+16748 16748 1
+1 16749 1
+16749 16749 1
+1 16750 1
+16750 16750 1
+1 16751 1
+16751 16751 1
+1 16752 1
+16752 16752 1
+1 16753 1
+16753 16753 1
+1 16754 1
+16754 16754 1
+1 16755 1
+16755 16755 1
+1 16756 1
+16756 16756 1
+1 16757 1
+16757 16757 1
+1 16758 1
+16758 16758 1
+1 16759 1
+16759 16759 1
+1 16760 1
+16760 16760 1
+1 16761 1
+16761 16761 1
+1 16762 1
+16762 16762 1
+1 16763 1
+16763 16763 1
+1 16764 1
+16764 16764 1
+1 16765 1
+16765 16765 1
+1 16766 1
+16766 16766 1
+1 16767 1
+16767 16767 1
+1 16768 1
+16768 16768 1
+1 16769 1
+16769 16769 1
+1 16770 1
+16770 16770 1
+1 16771 1
+16771 16771 1
+1 16772 1
+16772 16772 1
+1 16773 1
+16773 16773 1
+1 16774 1
+16774 16774 1
+1 16775 1
+16775 16775 1
+1 16776 1
+16776 16776 1
+1 16777 1
+16777 16777 1
+1 16778 1
+16778 16778 1
+1 16779 1
+16779 16779 1
+1 16780 1
+16780 16780 1
+1 16781 1
+16781 16781 1
+1 16782 1
+16782 16782 1
+1 16783 1
+16783 16783 1
+1 16784 1
+16784 16784 1
+1 16785 1
+16785 16785 1
+1 16786 1
+16786 16786 1
+1 16787 1
+16787 16787 1
+1 16788 1
+16788 16788 1
+1 16789 1
+16789 16789 1
+1 16790 1
+16790 16790 1
+1 16791 1
+16791 16791 1
+1 16792 1
+16792 16792 1
+1 16793 1
+16793 16793 1
+1 16794 1
+16794 16794 1
+1 16795 1
+16795 16795 1
+1 16796 1
+16796 16796 1
+1 16797 1
+16797 16797 1
+1 16798 1
+16798 16798 1
+1 16799 1
+16799 16799 1
+1 16800 1
+16800 16800 1
+1 16801 1
+16801 16801 1
+1 16802 1
+16802 16802 1
+1 16803 1
+16803 16803 1
+1 16804 1
+16804 16804 1
+1 16805 1
+16805 16805 1
+1 16806 1
+16806 16806 1
+1 16807 1
+16807 16807 1
+1 16808 1
+16808 16808 1
+1 16809 1
+16809 16809 1
+1 16810 1
+16810 16810 1
+1 16811 1
+16811 16811 1
+1 16812 1
+16812 16812 1
+1 16813 1
+16813 16813 1
+1 16814 1
+16814 16814 1
+1 16815 1
+16815 16815 1
+1 16816 1
+16816 16816 1
+1 16817 1
+16817 16817 1
+1 16818 1
+16818 16818 1
+1 16819 1
+16819 16819 1
+1 16820 1
+16820 16820 1
+1 16821 1
+16821 16821 1
+1 16822 1
+16822 16822 1
+1 16823 1
+16823 16823 1
+1 16824 1
+16824 16824 1
+1 16825 1
+16825 16825 1
+1 16826 1
+16826 16826 1
+1 16827 1
+16827 16827 1
+1 16828 1
+16828 16828 1
+1 16829 1
+16829 16829 1
+1 16830 1
+16830 16830 1
+1 16831 1
+16831 16831 1
+1 16832 1
+16832 16832 1
+1 16833 1
+16833 16833 1
+1 16834 1
+16834 16834 1
+1 16835 1
+16835 16835 1
+1 16836 1
+16836 16836 1
+1 16837 1
+16837 16837 1
+1 16838 1
+16838 16838 1
+1 16839 1
+16839 16839 1
+1 16840 1
+16840 16840 1
+1 16841 1
+16841 16841 1
+1 16842 1
+16842 16842 1
+1 16843 1
+16843 16843 1
+1 16844 1
+16844 16844 1
+1 16845 1
+16845 16845 1
+1 16846 1
+16846 16846 1
+1 16847 1
+16847 16847 1
+1 16848 1
+16848 16848 1
+1 16849 1
+16849 16849 1
+1 16850 1
+16850 16850 1
+1 16851 1
+16851 16851 1
+1 16852 1
+16852 16852 1
+1 16853 1
+16853 16853 1
+1 16854 1
+16854 16854 1
+1 16855 1
+16855 16855 1
+1 16856 1
+16856 16856 1
+1 16857 1
+16857 16857 1
+1 16858 1
+16858 16858 1
+1 16859 1
+16859 16859 1
+1 16860 1
+16860 16860 1
+1 16861 1
+16861 16861 1
+1 16862 1
+16862 16862 1
+1 16863 1
+16863 16863 1
+1 16864 1
+16864 16864 1
+1 16865 1
+16865 16865 1
+1 16866 1
+16866 16866 1
+1 16867 1
+16867 16867 1
+1 16868 1
+16868 16868 1
+1 16869 1
+16869 16869 1
+1 16870 1
+16870 16870 1
+1 16871 1
+16871 16871 1
+1 16872 1
+16872 16872 1
+1 16873 1
+16873 16873 1
+1 16874 1
+16874 16874 1
+1 16875 1
+16875 16875 1
+1 16876 1
+16876 16876 1
+1 16877 1
+16877 16877 1
+1 16878 1
+16878 16878 1
+1 16879 1
+16879 16879 1
+1 16880 1
+16880 16880 1
+1 16881 1
+16881 16881 1
+1 16882 1
+16882 16882 1
+1 16883 1
+16883 16883 1
+1 16884 1
+16884 16884 1
+1 16885 1
+16885 16885 1
+1 16886 1
+16886 16886 1
+1 16887 1
+16887 16887 1
+1 16888 1
+16888 16888 1
+1 16889 1
+16889 16889 1
+1 16890 1
+16890 16890 1
+1 16891 1
+16891 16891 1
+1 16892 1
+16892 16892 1
+1 16893 1
+16893 16893 1
+1 16894 1
+16894 16894 1
+1 16895 1
+16895 16895 1
+1 16896 1
+16896 16896 1
+1 16897 1
+16897 16897 1
+1 16898 1
+16898 16898 1
+1 16899 1
+16899 16899 1
+1 16900 1
+16900 16900 1
+1 16901 1
+16901 16901 1
+1 16902 1
+16902 16902 1
+1 16903 1
+16903 16903 1
+1 16904 1
+16904 16904 1
+1 16905 1
+16905 16905 1
+1 16906 1
+16906 16906 1
+1 16907 1
+16907 16907 1
+1 16908 1
+16908 16908 1
+1 16909 1
+16909 16909 1
+1 16910 1
+16910 16910 1
+1 16911 1
+16911 16911 1
+1 16912 1
+16912 16912 1
+1 16913 1
+16913 16913 1
+1 16914 1
+16914 16914 1
+1 16915 1
+16915 16915 1
+1 16916 1
+16916 16916 1
+1 16917 1
+16917 16917 1
+1 16918 1
+16918 16918 1
+1 16919 1
+16919 16919 1
+1 16920 1
+16920 16920 1
+1 16921 1
+16921 16921 1
+1 16922 1
+16922 16922 1
+1 16923 1
+16923 16923 1
+1 16924 1
+16924 16924 1
+1 16925 1
+16925 16925 1
+1 16926 1
+16926 16926 1
+1 16927 1
+16927 16927 1
+1 16928 1
+16928 16928 1
+1 16929 1
+16929 16929 1
+1 16930 1
+16930 16930 1
+1 16931 1
+16931 16931 1
+1 16932 1
+16932 16932 1
+1 16933 1
+16933 16933 1
+1 16934 1
+16934 16934 1
+1 16935 1
+16935 16935 1
+1 16936 1
+16936 16936 1
+1 16937 1
+16937 16937 1
+1 16938 1
+16938 16938 1
+1 16939 1
+16939 16939 1
+1 16940 1
+16940 16940 1
+1 16941 1
+16941 16941 1
+1 16942 1
+16942 16942 1
+1 16943 1
+16943 16943 1
+1 16944 1
+16944 16944 1
+1 16945 1
+16945 16945 1
+1 16946 1
+16946 16946 1
+1 16947 1
+16947 16947 1
+1 16948 1
+16948 16948 1
+1 16949 1
+16949 16949 1
+1 16950 1
+16950 16950 1
+1 16951 1
+16951 16951 1
+1 16952 1
+16952 16952 1
+1 16953 1
+16953 16953 1
+1 16954 1
+16954 16954 1
+1 16955 1
+16955 16955 1
+1 16956 1
+16956 16956 1
+1 16957 1
+16957 16957 1
+1 16958 1
+16958 16958 1
+1 16959 1
+16959 16959 1
+1 16960 1
+16960 16960 1
+1 16961 1
+16961 16961 1
+1 16962 1
+16962 16962 1
+1 16963 1
+16963 16963 1
+1 16964 1
+16964 16964 1
+1 16965 1
+16965 16965 1
+1 16966 1
+16966 16966 1
+1 16967 1
+16967 16967 1
+1 16968 1
+16968 16968 1
+1 16969 1
+16969 16969 1
+1 16970 1
+16970 16970 1
+1 16971 1
+16971 16971 1
+1 16972 1
+16972 16972 1
+1 16973 1
+16973 16973 1
+1 16974 1
+16974 16974 1
+1 16975 1
+16975 16975 1
+1 16976 1
+16976 16976 1
+1 16977 1
+16977 16977 1
+1 16978 1
+16978 16978 1
+1 16979 1
+16979 16979 1
+1 16980 1
+16980 16980 1
+1 16981 1
+16981 16981 1
+1 16982 1
+16982 16982 1
+1 16983 1
+16983 16983 1
+1 16984 1
+16984 16984 1
+1 16985 1
+16985 16985 1
+1 16986 1
+16986 16986 1
+1 16987 1
+16987 16987 1
+1 16988 1
+16988 16988 1
+1 16989 1
+16989 16989 1
+1 16990 1
+16990 16990 1
+1 16991 1
+16991 16991 1
+1 16992 1
+16992 16992 1
+1 16993 1
+16993 16993 1
+1 16994 1
+16994 16994 1
+1 16995 1
+16995 16995 1
+1 16996 1
+16996 16996 1
+1 16997 1
+16997 16997 1
+1 16998 1
+16998 16998 1
+1 16999 1
+16999 16999 1
+1 17000 1
+17000 17000 1
+1 17001 1
+17001 17001 1
+1 17002 1
+17002 17002 1
+1 17003 1
+17003 17003 1
+1 17004 1
+17004 17004 1
+1 17005 1
+17005 17005 1
+1 17006 1
+17006 17006 1
+1 17007 1
+17007 17007 1
+1 17008 1
+17008 17008 1
+1 17009 1
+17009 17009 1
+1 17010 1
+17010 17010 1
+1 17011 1
+17011 17011 1
+1 17012 1
+17012 17012 1
+1 17013 1
+17013 17013 1
+1 17014 1
+17014 17014 1
+1 17015 1
+17015 17015 1
+1 17016 1
+17016 17016 1
+1 17017 1
+17017 17017 1
+1 17018 1
+17018 17018 1
+1 17019 1
+17019 17019 1
+1 17020 1
+17020 17020 1
+1 17021 1
+17021 17021 1
+1 17022 1
+17022 17022 1
+1 17023 1
+17023 17023 1
+1 17024 1
+17024 17024 1
+1 17025 1
+17025 17025 1
+1 17026 1
+17026 17026 1
+1 17027 1
+17027 17027 1
+1 17028 1
+17028 17028 1
+1 17029 1
+17029 17029 1
+1 17030 1
+17030 17030 1
+1 17031 1
+17031 17031 1
+1 17032 1
+17032 17032 1
+1 17033 1
+17033 17033 1
+1 17034 1
+17034 17034 1
+1 17035 1
+17035 17035 1
+1 17036 1
+17036 17036 1
+1 17037 1
+17037 17037 1
+1 17038 1
+17038 17038 1
+1 17039 1
+17039 17039 1
+1 17040 1
+17040 17040 1
+1 17041 1
+17041 17041 1
+1 17042 1
+17042 17042 1
+1 17043 1
+17043 17043 1
+1 17044 1
+17044 17044 1
+1 17045 1
+17045 17045 1
+1 17046 1
+17046 17046 1
+1 17047 1
+17047 17047 1
+1 17048 1
+17048 17048 1
+1 17049 1
+17049 17049 1
+1 17050 1
+17050 17050 1
+1 17051 1
+17051 17051 1
+1 17052 1
+17052 17052 1
+1 17053 1
+17053 17053 1
+1 17054 1
+17054 17054 1
+1 17055 1
+17055 17055 1
+1 17056 1
+17056 17056 1
+1 17057 1
+17057 17057 1
+1 17058 1
+17058 17058 1
+1 17059 1
+17059 17059 1
+1 17060 1
+17060 17060 1
+1 17061 1
+17061 17061 1
+1 17062 1
+17062 17062 1
+1 17063 1
+17063 17063 1
+1 17064 1
+17064 17064 1
+1 17065 1
+17065 17065 1
+1 17066 1
+17066 17066 1
+1 17067 1
+17067 17067 1
+1 17068 1
+17068 17068 1
+1 17069 1
+17069 17069 1
+1 17070 1
+17070 17070 1
+1 17071 1
+17071 17071 1
+1 17072 1
+17072 17072 1
+1 17073 1
+17073 17073 1
+1 17074 1
+17074 17074 1
+1 17075 1
+17075 17075 1
+1 17076 1
+17076 17076 1
+1 17077 1
+17077 17077 1
+1 17078 1
+17078 17078 1
+1 17079 1
+17079 17079 1
+1 17080 1
+17080 17080 1
+1 17081 1
+17081 17081 1
+1 17082 1
+17082 17082 1
+1 17083 1
+17083 17083 1
+1 17084 1
+17084 17084 1
+1 17085 1
+17085 17085 1
+1 17086 1
+17086 17086 1
+1 17087 1
+17087 17087 1
+1 17088 1
+17088 17088 1
+1 17089 1
+17089 17089 1
+1 17090 1
+17090 17090 1
+1 17091 1
+17091 17091 1
+1 17092 1
+17092 17092 1
+1 17093 1
+17093 17093 1
+1 17094 1
+17094 17094 1
+1 17095 1
+17095 17095 1
+1 17096 1
+17096 17096 1
+1 17097 1
+17097 17097 1
+1 17098 1
+17098 17098 1
+1 17099 1
+17099 17099 1
+1 17100 1
+17100 17100 1
+1 17101 1
+17101 17101 1
+1 17102 1
+17102 17102 1
+1 17103 1
+17103 17103 1
+1 17104 1
+17104 17104 1
+1 17105 1
+17105 17105 1
+1 17106 1
+17106 17106 1
+1 17107 1
+17107 17107 1
+1 17108 1
+17108 17108 1
+1 17109 1
+17109 17109 1
+1 17110 1
+17110 17110 1
+1 17111 1
+17111 17111 1
+1 17112 1
+17112 17112 1
+1 17113 1
+17113 17113 1
+1 17114 1
+17114 17114 1
+1 17115 1
+17115 17115 1
+1 17116 1
+17116 17116 1
+1 17117 1
+17117 17117 1
+1 17118 1
+17118 17118 1
+1 17119 1
+17119 17119 1
+1 17120 1
+17120 17120 1
+1 17121 1
+17121 17121 1
+1 17122 1
+17122 17122 1
+1 17123 1
+17123 17123 1
+1 17124 1
+17124 17124 1
+1 17125 1
+17125 17125 1
+1 17126 1
+17126 17126 1
+1 17127 1
+17127 17127 1
+1 17128 1
+17128 17128 1
+1 17129 1
+17129 17129 1
+1 17130 1
+17130 17130 1
+1 17131 1
+17131 17131 1
+1 17132 1
+17132 17132 1
+1 17133 1
+17133 17133 1
+1 17134 1
+17134 17134 1
+1 17135 1
+17135 17135 1
+1 17136 1
+17136 17136 1
+1 17137 1
+17137 17137 1
+1 17138 1
+17138 17138 1
+1 17139 1
+17139 17139 1
+1 17140 1
+17140 17140 1
+1 17141 1
+17141 17141 1
+1 17142 1
+17142 17142 1
+1 17143 1
+17143 17143 1
+1 17144 1
+17144 17144 1
+1 17145 1
+17145 17145 1
+1 17146 1
+17146 17146 1
+1 17147 1
+17147 17147 1
+1 17148 1
+17148 17148 1
+1 17149 1
+17149 17149 1
+1 17150 1
+17150 17150 1
+1 17151 1
+17151 17151 1
+1 17152 1
+17152 17152 1
+1 17153 1
+17153 17153 1
+1 17154 1
+17154 17154 1
+1 17155 1
+17155 17155 1
+1 17156 1
+17156 17156 1
+1 17157 1
+17157 17157 1
+1 17158 1
+17158 17158 1
+1 17159 1
+17159 17159 1
+1 17160 1
+17160 17160 1
+1 17161 1
+17161 17161 1
+1 17162 1
+17162 17162 1
+1 17163 1
+17163 17163 1
+1 17164 1
+17164 17164 1
+1 17165 1
+17165 17165 1
+1 17166 1
+17166 17166 1
+1 17167 1
+17167 17167 1
+1 17168 1
+17168 17168 1
+1 17169 1
+17169 17169 1
+1 17170 1
+17170 17170 1
+1 17171 1
+17171 17171 1
+1 17172 1
+17172 17172 1
+1 17173 1
+17173 17173 1
+1 17174 1
+17174 17174 1
+1 17175 1
+17175 17175 1
+1 17176 1
+17176 17176 1
+1 17177 1
+17177 17177 1
+1 17178 1
+17178 17178 1
+1 17179 1
+17179 17179 1
+1 17180 1
+17180 17180 1
+1 17181 1
+17181 17181 1
+1 17182 1
+17182 17182 1
+1 17183 1
+17183 17183 1
+1 17184 1
+17184 17184 1
+1 17185 1
+17185 17185 1
+1 17186 1
+17186 17186 1
+1 17187 1
+17187 17187 1
+1 17188 1
+17188 17188 1
+1 17189 1
+17189 17189 1
+1 17190 1
+17190 17190 1
+1 17191 1
+17191 17191 1
+1 17192 1
+17192 17192 1
+1 17193 1
+17193 17193 1
+1 17194 1
+17194 17194 1
+1 17195 1
+17195 17195 1
+1 17196 1
+17196 17196 1
+1 17197 1
+17197 17197 1
+1 17198 1
+17198 17198 1
+1 17199 1
+17199 17199 1
+1 17200 1
+17200 17200 1
+1 17201 1
+17201 17201 1
+1 17202 1
+17202 17202 1
+1 17203 1
+17203 17203 1
+1 17204 1
+17204 17204 1
+1 17205 1
+17205 17205 1
+1 17206 1
+17206 17206 1
+1 17207 1
+17207 17207 1
+1 17208 1
+17208 17208 1
+1 17209 1
+17209 17209 1
+1 17210 1
+17210 17210 1
+1 17211 1
+17211 17211 1
+1 17212 1
+17212 17212 1
+1 17213 1
+17213 17213 1
+1 17214 1
+17214 17214 1
+1 17215 1
+17215 17215 1
+1 17216 1
+17216 17216 1
+1 17217 1
+17217 17217 1
+1 17218 1
+17218 17218 1
+1 17219 1
+17219 17219 1
+1 17220 1
+17220 17220 1
+1 17221 1
+17221 17221 1
+1 17222 1
+17222 17222 1
+1 17223 1
+17223 17223 1
+1 17224 1
+17224 17224 1
+1 17225 1
+17225 17225 1
+1 17226 1
+17226 17226 1
+1 17227 1
+17227 17227 1
+1 17228 1
+17228 17228 1
+1 17229 1
+17229 17229 1
+1 17230 1
+17230 17230 1
+1 17231 1
+17231 17231 1
+1 17232 1
+17232 17232 1
+1 17233 1
+17233 17233 1
+1 17234 1
+17234 17234 1
+1 17235 1
+17235 17235 1
+1 17236 1
+17236 17236 1
+1 17237 1
+17237 17237 1
+1 17238 1
+17238 17238 1
+1 17239 1
+17239 17239 1
+1 17240 1
+17240 17240 1
+1 17241 1
+17241 17241 1
+1 17242 1
+17242 17242 1
+1 17243 1
+17243 17243 1
+1 17244 1
+17244 17244 1
+1 17245 1
+17245 17245 1
+1 17246 1
+17246 17246 1
+1 17247 1
+17247 17247 1
+1 17248 1
+17248 17248 1
+1 17249 1
+17249 17249 1
+1 17250 1
+17250 17250 1
+1 17251 1
+17251 17251 1
+1 17252 1
+17252 17252 1
+1 17253 1
+17253 17253 1
+1 17254 1
+17254 17254 1
+1 17255 1
+17255 17255 1
+1 17256 1
+17256 17256 1
+1 17257 1
+17257 17257 1
+1 17258 1
+17258 17258 1
+1 17259 1
+17259 17259 1
+1 17260 1
+17260 17260 1
+1 17261 1
+17261 17261 1
+1 17262 1
+17262 17262 1
+1 17263 1
+17263 17263 1
+1 17264 1
+17264 17264 1
+1 17265 1
+17265 17265 1
+1 17266 1
+17266 17266 1
+1 17267 1
+17267 17267 1
+1 17268 1
+17268 17268 1
+1 17269 1
+17269 17269 1
+1 17270 1
+17270 17270 1
+1 17271 1
+17271 17271 1
+1 17272 1
+17272 17272 1
+1 17273 1
+17273 17273 1
+1 17274 1
+17274 17274 1
+1 17275 1
+17275 17275 1
+1 17276 1
+17276 17276 1
+1 17277 1
+17277 17277 1
+1 17278 1
+17278 17278 1
+1 17279 1
+17279 17279 1
+1 17280 1
+17280 17280 1
+1 17281 1
+17281 17281 1
+1 17282 1
+17282 17282 1
+1 17283 1
+17283 17283 1
+1 17284 1
+17284 17284 1
+1 17285 1
+17285 17285 1
+1 17286 1
+17286 17286 1
+1 17287 1
+17287 17287 1
+1 17288 1
+17288 17288 1
+1 17289 1
+17289 17289 1
+1 17290 1
+17290 17290 1
+1 17291 1
+17291 17291 1
+1 17292 1
+17292 17292 1
+1 17293 1
+17293 17293 1
+1 17294 1
+17294 17294 1
+1 17295 1
+17295 17295 1
+1 17296 1
+17296 17296 1
+1 17297 1
+17297 17297 1
+1 17298 1
+17298 17298 1
+1 17299 1
+17299 17299 1
+1 17300 1
+17300 17300 1
+1 17301 1
+17301 17301 1
+1 17302 1
+17302 17302 1
+1 17303 1
+17303 17303 1
+1 17304 1
+17304 17304 1
+1 17305 1
+17305 17305 1
+1 17306 1
+17306 17306 1
+1 17307 1
+17307 17307 1
+1 17308 1
+17308 17308 1
+1 17309 1
+17309 17309 1
+1 17310 1
+17310 17310 1
+1 17311 1
+17311 17311 1
+1 17312 1
+17312 17312 1
+1 17313 1
+17313 17313 1
+1 17314 1
+17314 17314 1
+1 17315 1
+17315 17315 1
+1 17316 1
+17316 17316 1
+1 17317 1
+17317 17317 1
+1 17318 1
+17318 17318 1
+1 17319 1
+17319 17319 1
+1 17320 1
+17320 17320 1
+1 17321 1
+17321 17321 1
+1 17322 1
+17322 17322 1
+1 17323 1
+17323 17323 1
+1 17324 1
+17324 17324 1
+1 17325 1
+17325 17325 1
+1 17326 1
+17326 17326 1
+1 17327 1
+17327 17327 1
+1 17328 1
+17328 17328 1
+1 17329 1
+17329 17329 1
+1 17330 1
+17330 17330 1
+1 17331 1
+17331 17331 1
+1 17332 1
+17332 17332 1
+1 17333 1
+17333 17333 1
+1 17334 1
+17334 17334 1
+1 17335 1
+17335 17335 1
+1 17336 1
+17336 17336 1
+1 17337 1
+17337 17337 1
+1 17338 1
+17338 17338 1
+1 17339 1
+17339 17339 1
+1 17340 1
+17340 17340 1
+1 17341 1
+17341 17341 1
+1 17342 1
+17342 17342 1
+1 17343 1
+17343 17343 1
+1 17344 1
+17344 17344 1
+1 17345 1
+17345 17345 1
+1 17346 1
+17346 17346 1
+1 17347 1
+17347 17347 1
+1 17348 1
+17348 17348 1
+1 17349 1
+17349 17349 1
+1 17350 1
+17350 17350 1
+1 17351 1
+17351 17351 1
+1 17352 1
+17352 17352 1
+1 17353 1
+17353 17353 1
+1 17354 1
+17354 17354 1
+1 17355 1
+17355 17355 1
+1 17356 1
+17356 17356 1
+1 17357 1
+17357 17357 1
+1 17358 1
+17358 17358 1
+1 17359 1
+17359 17359 1
+1 17360 1
+17360 17360 1
+1 17361 1
+17361 17361 1
+1 17362 1
+17362 17362 1
+1 17363 1
+17363 17363 1
+1 17364 1
+17364 17364 1
+1 17365 1
+17365 17365 1
+1 17366 1
+17366 17366 1
+1 17367 1
+17367 17367 1
+1 17368 1
+17368 17368 1
+1 17369 1
+17369 17369 1
+1 17370 1
+17370 17370 1
+1 17371 1
+17371 17371 1
+1 17372 1
+17372 17372 1
+1 17373 1
+17373 17373 1
+1 17374 1
+17374 17374 1
+1 17375 1
+17375 17375 1
+1 17376 1
+17376 17376 1
+1 17377 1
+17377 17377 1
+1 17378 1
+17378 17378 1
+1 17379 1
+17379 17379 1
+1 17380 1
+17380 17380 1
+1 17381 1
+17381 17381 1
+1 17382 1
+17382 17382 1
+1 17383 1
+17383 17383 1
+1 17384 1
+17384 17384 1
+1 17385 1
+17385 17385 1
+1 17386 1
+17386 17386 1
+1 17387 1
+17387 17387 1
+1 17388 1
+17388 17388 1
+1 17389 1
+17389 17389 1
+1 17390 1
+17390 17390 1
+1 17391 1
+17391 17391 1
+1 17392 1
+17392 17392 1
+1 17393 1
+17393 17393 1
+1 17394 1
+17394 17394 1
+1 17395 1
+17395 17395 1
+1 17396 1
+17396 17396 1
+1 17397 1
+17397 17397 1
+1 17398 1
+17398 17398 1
+1 17399 1
+17399 17399 1
+1 17400 1
+17400 17400 1
+1 17401 1
+17401 17401 1
+1 17402 1
+17402 17402 1
+1 17403 1
+17403 17403 1
+1 17404 1
+17404 17404 1
+1 17405 1
+17405 17405 1
+1 17406 1
+17406 17406 1
+1 17407 1
+17407 17407 1
+1 17408 1
+17408 17408 1
+1 17409 1
+17409 17409 1
+1 17410 1
+17410 17410 1
+1 17411 1
+17411 17411 1
+1 17412 1
+17412 17412 1
+1 17413 1
+17413 17413 1
+1 17414 1
+17414 17414 1
+1 17415 1
+17415 17415 1
+1 17416 1
+17416 17416 1
+1 17417 1
+17417 17417 1
+1 17418 1
+17418 17418 1
+1 17419 1
+17419 17419 1
+1 17420 1
+17420 17420 1
+1 17421 1
+17421 17421 1
+1 17422 1
+17422 17422 1
+1 17423 1
+17423 17423 1
+1 17424 1
+17424 17424 1
+1 17425 1
+17425 17425 1
+1 17426 1
+17426 17426 1
+1 17427 1
+17427 17427 1
+1 17428 1
+17428 17428 1
+1 17429 1
+17429 17429 1
+1 17430 1
+17430 17430 1
+1 17431 1
+17431 17431 1
+1 17432 1
+17432 17432 1
+1 17433 1
+17433 17433 1
+1 17434 1
+17434 17434 1
+1 17435 1
+17435 17435 1
+1 17436 1
+17436 17436 1
+1 17437 1
+17437 17437 1
+1 17438 1
+17438 17438 1
+1 17439 1
+17439 17439 1
+1 17440 1
+17440 17440 1
+1 17441 1
+17441 17441 1
+1 17442 1
+17442 17442 1
+1 17443 1
+17443 17443 1
+1 17444 1
+17444 17444 1
+1 17445 1
+17445 17445 1
+1 17446 1
+17446 17446 1
+1 17447 1
+17447 17447 1
+1 17448 1
+17448 17448 1
+1 17449 1
+17449 17449 1
+1 17450 1
+17450 17450 1
+1 17451 1
+17451 17451 1
+1 17452 1
+17452 17452 1
+1 17453 1
+17453 17453 1
+1 17454 1
+17454 17454 1
+1 17455 1
+17455 17455 1
+1 17456 1
+17456 17456 1
+1 17457 1
+17457 17457 1
+1 17458 1
+17458 17458 1
+1 17459 1
+17459 17459 1
+1 17460 1
+17460 17460 1
+1 17461 1
+17461 17461 1
+1 17462 1
+17462 17462 1
+1 17463 1
+17463 17463 1
+1 17464 1
+17464 17464 1
+1 17465 1
+17465 17465 1
+1 17466 1
+17466 17466 1
+1 17467 1
+17467 17467 1
+1 17468 1
+17468 17468 1
+1 17469 1
+17469 17469 1
+1 17470 1
+17470 17470 1
+1 17471 1
+17471 17471 1
+1 17472 1
+17472 17472 1
+1 17473 1
+17473 17473 1
+1 17474 1
+17474 17474 1
+1 17475 1
+17475 17475 1
+1 17476 1
+17476 17476 1
+1 17477 1
+17477 17477 1
+1 17478 1
+17478 17478 1
+1 17479 1
+17479 17479 1
+1 17480 1
+17480 17480 1
+1 17481 1
+17481 17481 1
+1 17482 1
+17482 17482 1
+1 17483 1
+17483 17483 1
+1 17484 1
+17484 17484 1
+1 17485 1
+17485 17485 1
+1 17486 1
+17486 17486 1
+1 17487 1
+17487 17487 1
+1 17488 1
+17488 17488 1
+1 17489 1
+17489 17489 1
+1 17490 1
+17490 17490 1
+1 17491 1
+17491 17491 1
+1 17492 1
+17492 17492 1
+1 17493 1
+17493 17493 1
+1 17494 1
+17494 17494 1
+1 17495 1
+17495 17495 1
+1 17496 1
+17496 17496 1
+1 17497 1
+17497 17497 1
+1 17498 1
+17498 17498 1
+1 17499 1
+17499 17499 1
+1 17500 1
+17500 17500 1
+1 17501 1
+17501 17501 1
+1 17502 1
+17502 17502 1
+1 17503 1
+17503 17503 1
+1 17504 1
+17504 17504 1
+1 17505 1
+17505 17505 1
+1 17506 1
+17506 17506 1
+1 17507 1
+17507 17507 1
+1 17508 1
+17508 17508 1
+1 17509 1
+17509 17509 1
+1 17510 1
+17510 17510 1
+1 17511 1
+17511 17511 1
+1 17512 1
+17512 17512 1
+1 17513 1
+17513 17513 1
+1 17514 1
+17514 17514 1
+1 17515 1
+17515 17515 1
+1 17516 1
+17516 17516 1
+1 17517 1
+17517 17517 1
+1 17518 1
+17518 17518 1
+1 17519 1
+17519 17519 1
+1 17520 1
+17520 17520 1
+1 17521 1
+17521 17521 1
+1 17522 1
+17522 17522 1
+1 17523 1
+17523 17523 1
+1 17524 1
+17524 17524 1
+1 17525 1
+17525 17525 1
+1 17526 1
+17526 17526 1
+1 17527 1
+17527 17527 1
+1 17528 1
+17528 17528 1
+1 17529 1
+17529 17529 1
+1 17530 1
+17530 17530 1
+1 17531 1
+17531 17531 1
+1 17532 1
+17532 17532 1
+1 17533 1
+17533 17533 1
+1 17534 1
+17534 17534 1
+1 17535 1
+17535 17535 1
+1 17536 1
+17536 17536 1
+1 17537 1
+17537 17537 1
+1 17538 1
+17538 17538 1
+1 17539 1
+17539 17539 1
+1 17540 1
+17540 17540 1
+1 17541 1
+17541 17541 1
+1 17542 1
+17542 17542 1
+1 17543 1
+17543 17543 1
+1 17544 1
+17544 17544 1
+1 17545 1
+17545 17545 1
+1 17546 1
+17546 17546 1
+1 17547 1
+17547 17547 1
+1 17548 1
+17548 17548 1
+1 17549 1
+17549 17549 1
+1 17550 1
+17550 17550 1
+1 17551 1
+17551 17551 1
+1 17552 1
+17552 17552 1
+1 17553 1
+17553 17553 1
+1 17554 1
+17554 17554 1
+1 17555 1
+17555 17555 1
+1 17556 1
+17556 17556 1
+1 17557 1
+17557 17557 1
+1 17558 1
+17558 17558 1
+1 17559 1
+17559 17559 1
+1 17560 1
+17560 17560 1
+1 17561 1
+17561 17561 1
+1 17562 1
+17562 17562 1
+1 17563 1
+17563 17563 1
+1 17564 1
+17564 17564 1
+1 17565 1
+17565 17565 1
+1 17566 1
+17566 17566 1
+1 17567 1
+17567 17567 1
+1 17568 1
+17568 17568 1
+1 17569 1
+17569 17569 1
+1 17570 1
+17570 17570 1
+1 17571 1
+17571 17571 1
+1 17572 1
+17572 17572 1
+1 17573 1
+17573 17573 1
+1 17574 1
+17574 17574 1
+1 17575 1
+17575 17575 1
+1 17576 1
+17576 17576 1
+1 17577 1
+17577 17577 1
+1 17578 1
+17578 17578 1
+1 17579 1
+17579 17579 1
+1 17580 1
+17580 17580 1
+1 17581 1
+17581 17581 1
+1 17582 1
+17582 17582 1
+1 17583 1
+17583 17583 1
+1 17584 1
+17584 17584 1
+1 17585 1
+17585 17585 1
+1 17586 1
+17586 17586 1
+1 17587 1
+17587 17587 1
+1 17588 1
+17588 17588 1
+1 17589 1
+17589 17589 1
+1 17590 1
+17590 17590 1
+1 17591 1
+17591 17591 1
+1 17592 1
+17592 17592 1
+1 17593 1
+17593 17593 1
+1 17594 1
+17594 17594 1
+1 17595 1
+17595 17595 1
+1 17596 1
+17596 17596 1
+1 17597 1
+17597 17597 1
+1 17598 1
+17598 17598 1
+1 17599 1
+17599 17599 1
+1 17600 1
+17600 17600 1
+1 17601 1
+17601 17601 1
+1 17602 1
+17602 17602 1
+1 17603 1
+17603 17603 1
+1 17604 1
+17604 17604 1
+1 17605 1
+17605 17605 1
+1 17606 1
+17606 17606 1
+1 17607 1
+17607 17607 1
+1 17608 1
+17608 17608 1
+1 17609 1
+17609 17609 1
+1 17610 1
+17610 17610 1
+1 17611 1
+17611 17611 1
+1 17612 1
+17612 17612 1
+1 17613 1
+17613 17613 1
+1 17614 1
+17614 17614 1
+1 17615 1
+17615 17615 1
+1 17616 1
+17616 17616 1
+1 17617 1
+17617 17617 1
+1 17618 1
+17618 17618 1
+1 17619 1
+17619 17619 1
+1 17620 1
+17620 17620 1
+1 17621 1
+17621 17621 1
+1 17622 1
+17622 17622 1
+1 17623 1
+17623 17623 1
+1 17624 1
+17624 17624 1
+1 17625 1
+17625 17625 1
+1 17626 1
+17626 17626 1
+1 17627 1
+17627 17627 1
+1 17628 1
+17628 17628 1
+1 17629 1
+17629 17629 1
+1 17630 1
+17630 17630 1
+1 17631 1
+17631 17631 1
+1 17632 1
+17632 17632 1
+1 17633 1
+17633 17633 1
+1 17634 1
+17634 17634 1
+1 17635 1
+17635 17635 1
+1 17636 1
+17636 17636 1
+1 17637 1
+17637 17637 1
+1 17638 1
+17638 17638 1
+1 17639 1
+17639 17639 1
+1 17640 1
+17640 17640 1
+1 17641 1
+17641 17641 1
+1 17642 1
+17642 17642 1
+1 17643 1
+17643 17643 1
+1 17644 1
+17644 17644 1
+1 17645 1
+17645 17645 1
+1 17646 1
+17646 17646 1
+1 17647 1
+17647 17647 1
+1 17648 1
+17648 17648 1
+1 17649 1
+17649 17649 1
+1 17650 1
+17650 17650 1
+1 17651 1
+17651 17651 1
+1 17652 1
+17652 17652 1
+1 17653 1
+17653 17653 1
+1 17654 1
+17654 17654 1
+1 17655 1
+17655 17655 1
+1 17656 1
+17656 17656 1
+1 17657 1
+17657 17657 1
+1 17658 1
+17658 17658 1
+1 17659 1
+17659 17659 1
+1 17660 1
+17660 17660 1
+1 17661 1
+17661 17661 1
+1 17662 1
+17662 17662 1
+1 17663 1
+17663 17663 1
+1 17664 1
+17664 17664 1
+1 17665 1
+17665 17665 1
+1 17666 1
+17666 17666 1
+1 17667 1
+17667 17667 1
+1 17668 1
+17668 17668 1
+1 17669 1
+17669 17669 1
+1 17670 1
+17670 17670 1
+1 17671 1
+17671 17671 1
+1 17672 1
+17672 17672 1
+1 17673 1
+17673 17673 1
+1 17674 1
+17674 17674 1
+1 17675 1
+17675 17675 1
+1 17676 1
+17676 17676 1
+1 17677 1
+17677 17677 1
+1 17678 1
+17678 17678 1
+1 17679 1
+17679 17679 1
+1 17680 1
+17680 17680 1
+1 17681 1
+17681 17681 1
+1 17682 1
+17682 17682 1
+1 17683 1
+17683 17683 1
+1 17684 1
+17684 17684 1
+1 17685 1
+17685 17685 1
+1 17686 1
+17686 17686 1
+1 17687 1
+17687 17687 1
+1 17688 1
+17688 17688 1
+1 17689 1
+17689 17689 1
+1 17690 1
+17690 17690 1
+1 17691 1
+17691 17691 1
+1 17692 1
+17692 17692 1
+1 17693 1
+17693 17693 1
+1 17694 1
+17694 17694 1
+1 17695 1
+17695 17695 1
+1 17696 1
+17696 17696 1
+1 17697 1
+17697 17697 1
+1 17698 1
+17698 17698 1
+1 17699 1
+17699 17699 1
+1 17700 1
+17700 17700 1
+1 17701 1
+17701 17701 1
+1 17702 1
+17702 17702 1
+1 17703 1
+17703 17703 1
+1 17704 1
+17704 17704 1
+1 17705 1
+17705 17705 1
+1 17706 1
+17706 17706 1
+1 17707 1
+17707 17707 1
+1 17708 1
+17708 17708 1
+1 17709 1
+17709 17709 1
+1 17710 1
+17710 17710 1
+1 17711 1
+17711 17711 1
+1 17712 1
+17712 17712 1
+1 17713 1
+17713 17713 1
+1 17714 1
+17714 17714 1
+1 17715 1
+17715 17715 1
+1 17716 1
+17716 17716 1
+1 17717 1
+17717 17717 1
+1 17718 1
+17718 17718 1
+1 17719 1
+17719 17719 1
+1 17720 1
+17720 17720 1
+1 17721 1
+17721 17721 1
+1 17722 1
+17722 17722 1
+1 17723 1
+17723 17723 1
+1 17724 1
+17724 17724 1
+1 17725 1
+17725 17725 1
+1 17726 1
+17726 17726 1
+1 17727 1
+17727 17727 1
+1 17728 1
+17728 17728 1
+1 17729 1
+17729 17729 1
+1 17730 1
+17730 17730 1
+1 17731 1
+17731 17731 1
+1 17732 1
+17732 17732 1
+1 17733 1
+17733 17733 1
+1 17734 1
+17734 17734 1
+1 17735 1
+17735 17735 1
+1 17736 1
+17736 17736 1
+1 17737 1
+17737 17737 1
+1 17738 1
+17738 17738 1
+1 17739 1
+17739 17739 1
+1 17740 1
+17740 17740 1
+1 17741 1
+17741 17741 1
+1 17742 1
+17742 17742 1
+1 17743 1
+17743 17743 1
+1 17744 1
+17744 17744 1
+1 17745 1
+17745 17745 1
+1 17746 1
+17746 17746 1
+1 17747 1
+17747 17747 1
+1 17748 1
+17748 17748 1
+1 17749 1
+17749 17749 1
+1 17750 1
+17750 17750 1
+1 17751 1
+17751 17751 1
+1 17752 1
+17752 17752 1
+1 17753 1
+17753 17753 1
+1 17754 1
+17754 17754 1
+1 17755 1
+17755 17755 1
+1 17756 1
+17756 17756 1
+1 17757 1
+17757 17757 1
+1 17758 1
+17758 17758 1
+1 17759 1
+17759 17759 1
+1 17760 1
+17760 17760 1
+1 17761 1
+17761 17761 1
+1 17762 1
+17762 17762 1
+1 17763 1
+17763 17763 1
+1 17764 1
+17764 17764 1
+1 17765 1
+17765 17765 1
+1 17766 1
+17766 17766 1
+1 17767 1
+17767 17767 1
+1 17768 1
+17768 17768 1
+1 17769 1
+17769 17769 1
+1 17770 1
+17770 17770 1
+1 17771 1
+17771 17771 1
+1 17772 1
+17772 17772 1
+1 17773 1
+17773 17773 1
+1 17774 1
+17774 17774 1
+1 17775 1
+17775 17775 1
+1 17776 1
+17776 17776 1
+1 17777 1
+17777 17777 1
+1 17778 1
+17778 17778 1
+1 17779 1
+17779 17779 1
+1 17780 1
+17780 17780 1
+1 17781 1
+17781 17781 1
+1 17782 1
+17782 17782 1
+1 17783 1
+17783 17783 1
+1 17784 1
+17784 17784 1
+1 17785 1
+17785 17785 1
+1 17786 1
+17786 17786 1
+1 17787 1
+17787 17787 1
+1 17788 1
+17788 17788 1
+1 17789 1
+17789 17789 1
+1 17790 1
+17790 17790 1
+1 17791 1
+17791 17791 1
+1 17792 1
+17792 17792 1
+1 17793 1
+17793 17793 1
+1 17794 1
+17794 17794 1
+1 17795 1
+17795 17795 1
+1 17796 1
+17796 17796 1
+1 17797 1
+17797 17797 1
+1 17798 1
+17798 17798 1
+1 17799 1
+17799 17799 1
+1 17800 1
+17800 17800 1
+1 17801 1
+17801 17801 1
+1 17802 1
+17802 17802 1
+1 17803 1
+17803 17803 1
+1 17804 1
+17804 17804 1
+1 17805 1
+17805 17805 1
+1 17806 1
+17806 17806 1
+1 17807 1
+17807 17807 1
+1 17808 1
+17808 17808 1
+1 17809 1
+17809 17809 1
+1 17810 1
+17810 17810 1
+1 17811 1
+17811 17811 1
+1 17812 1
+17812 17812 1
+1 17813 1
+17813 17813 1
+1 17814 1
+17814 17814 1
+1 17815 1
+17815 17815 1
+1 17816 1
+17816 17816 1
+1 17817 1
+17817 17817 1
+1 17818 1
+17818 17818 1
+1 17819 1
+17819 17819 1
+1 17820 1
+17820 17820 1
+1 17821 1
+17821 17821 1
+1 17822 1
+17822 17822 1
+1 17823 1
+17823 17823 1
+1 17824 1
+17824 17824 1
+1 17825 1
+17825 17825 1
+1 17826 1
+17826 17826 1
+1 17827 1
+17827 17827 1
+1 17828 1
+17828 17828 1
+1 17829 1
+17829 17829 1
+1 17830 1
+17830 17830 1
+1 17831 1
+17831 17831 1
+1 17832 1
+17832 17832 1
+1 17833 1
+17833 17833 1
+1 17834 1
+17834 17834 1
+1 17835 1
+17835 17835 1
+1 17836 1
+17836 17836 1
+1 17837 1
+17837 17837 1
+1 17838 1
+17838 17838 1
+1 17839 1
+17839 17839 1
+1 17840 1
+17840 17840 1
+1 17841 1
+17841 17841 1
+1 17842 1
+17842 17842 1
+1 17843 1
+17843 17843 1
+1 17844 1
+17844 17844 1
+1 17845 1
+17845 17845 1
+1 17846 1
+17846 17846 1
+1 17847 1
+17847 17847 1
+1 17848 1
+17848 17848 1
+1 17849 1
+17849 17849 1
+1 17850 1
+17850 17850 1
+1 17851 1
+17851 17851 1
+1 17852 1
+17852 17852 1
+1 17853 1
+17853 17853 1
+1 17854 1
+17854 17854 1
+1 17855 1
+17855 17855 1
+1 17856 1
+17856 17856 1
+1 17857 1
+17857 17857 1
+1 17858 1
+17858 17858 1
+1 17859 1
+17859 17859 1
+1 17860 1
+17860 17860 1
+1 17861 1
+17861 17861 1
+1 17862 1
+17862 17862 1
+1 17863 1
+17863 17863 1
+1 17864 1
+17864 17864 1
+1 17865 1
+17865 17865 1
+1 17866 1
+17866 17866 1
+1 17867 1
+17867 17867 1
+1 17868 1
+17868 17868 1
+1 17869 1
+17869 17869 1
+1 17870 1
+17870 17870 1
+1 17871 1
+17871 17871 1
+1 17872 1
+17872 17872 1
+1 17873 1
+17873 17873 1
+1 17874 1
+17874 17874 1
+1 17875 1
+17875 17875 1
+1 17876 1
+17876 17876 1
+1 17877 1
+17877 17877 1
+1 17878 1
+17878 17878 1
+1 17879 1
+17879 17879 1
+1 17880 1
+17880 17880 1
+1 17881 1
+17881 17881 1
+1 17882 1
+17882 17882 1
+1 17883 1
+17883 17883 1
+1 17884 1
+17884 17884 1
+1 17885 1
+17885 17885 1
+1 17886 1
+17886 17886 1
+1 17887 1
+17887 17887 1
+1 17888 1
+17888 17888 1
+1 17889 1
+17889 17889 1
+1 17890 1
+17890 17890 1
+1 17891 1
+17891 17891 1
+1 17892 1
+17892 17892 1
+1 17893 1
+17893 17893 1
+1 17894 1
+17894 17894 1
+1 17895 1
+17895 17895 1
+1 17896 1
+17896 17896 1
+1 17897 1
+17897 17897 1
+1 17898 1
+17898 17898 1
+1 17899 1
+17899 17899 1
+1 17900 1
+17900 17900 1
+1 17901 1
+17901 17901 1
+1 17902 1
+17902 17902 1
+1 17903 1
+17903 17903 1
+1 17904 1
+17904 17904 1
+1 17905 1
+17905 17905 1
+1 17906 1
+17906 17906 1
+1 17907 1
+17907 17907 1
+1 17908 1
+17908 17908 1
+1 17909 1
+17909 17909 1
+1 17910 1
+17910 17910 1
+1 17911 1
+17911 17911 1
+1 17912 1
+17912 17912 1
+1 17913 1
+17913 17913 1
+1 17914 1
+17914 17914 1
+1 17915 1
+17915 17915 1
+1 17916 1
+17916 17916 1
+1 17917 1
+17917 17917 1
+1 17918 1
+17918 17918 1
+1 17919 1
+17919 17919 1
+1 17920 1
+17920 17920 1
+1 17921 1
+17921 17921 1
+1 17922 1
+17922 17922 1
+1 17923 1
+17923 17923 1
+1 17924 1
+17924 17924 1
+1 17925 1
+17925 17925 1
+1 17926 1
+17926 17926 1
+1 17927 1
+17927 17927 1
+1 17928 1
+17928 17928 1
+1 17929 1
+17929 17929 1
+1 17930 1
+17930 17930 1
+1 17931 1
+17931 17931 1
+1 17932 1
+17932 17932 1
+1 17933 1
+17933 17933 1
+1 17934 1
+17934 17934 1
+1 17935 1
+17935 17935 1
+1 17936 1
+17936 17936 1
+1 17937 1
+17937 17937 1
+1 17938 1
+17938 17938 1
+1 17939 1
+17939 17939 1
+1 17940 1
+17940 17940 1
+1 17941 1
+17941 17941 1
+1 17942 1
+17942 17942 1
+1 17943 1
+17943 17943 1
+1 17944 1
+17944 17944 1
+1 17945 1
+17945 17945 1
+1 17946 1
+17946 17946 1
+1 17947 1
+17947 17947 1
+1 17948 1
+17948 17948 1
+1 17949 1
+17949 17949 1
+1 17950 1
+17950 17950 1
+1 17951 1
+17951 17951 1
+1 17952 1
+17952 17952 1
+1 17953 1
+17953 17953 1
+1 17954 1
+17954 17954 1
+1 17955 1
+17955 17955 1
+1 17956 1
+17956 17956 1
+1 17957 1
+17957 17957 1
+1 17958 1
+17958 17958 1
+1 17959 1
+17959 17959 1
+1 17960 1
+17960 17960 1
+1 17961 1
+17961 17961 1
+1 17962 1
+17962 17962 1
+1 17963 1
+17963 17963 1
+1 17964 1
+17964 17964 1
+1 17965 1
+17965 17965 1
+1 17966 1
+17966 17966 1
+1 17967 1
+17967 17967 1
+1 17968 1
+17968 17968 1
+1 17969 1
+17969 17969 1
+1 17970 1
+17970 17970 1
+1 17971 1
+17971 17971 1
+1 17972 1
+17972 17972 1
+1 17973 1
+17973 17973 1
+1 17974 1
+17974 17974 1
+1 17975 1
+17975 17975 1
+1 17976 1
+17976 17976 1
+1 17977 1
+17977 17977 1
+1 17978 1
+17978 17978 1
+1 17979 1
+17979 17979 1
+1 17980 1
+17980 17980 1
+1 17981 1
+17981 17981 1
+1 17982 1
+17982 17982 1
+1 17983 1
+17983 17983 1
+1 17984 1
+17984 17984 1
+1 17985 1
+17985 17985 1
+1 17986 1
+17986 17986 1
+1 17987 1
+17987 17987 1
+1 17988 1
+17988 17988 1
+1 17989 1
+17989 17989 1
+1 17990 1
+17990 17990 1
+1 17991 1
+17991 17991 1
+1 17992 1
+17992 17992 1
+1 17993 1
+17993 17993 1
+1 17994 1
+17994 17994 1
+1 17995 1
+17995 17995 1
+1 17996 1
+17996 17996 1
+1 17997 1
+17997 17997 1
+1 17998 1
+17998 17998 1
+1 17999 1
+17999 17999 1
+1 18000 1
+18000 18000 1
+1 18001 1
+18001 18001 1
+1 18002 1
+18002 18002 1
+1 18003 1
+18003 18003 1
+1 18004 1
+18004 18004 1
+1 18005 1
+18005 18005 1
+1 18006 1
+18006 18006 1
+1 18007 1
+18007 18007 1
+1 18008 1
+18008 18008 1
+1 18009 1
+18009 18009 1
+1 18010 1
+18010 18010 1
+1 18011 1
+18011 18011 1
+1 18012 1
+18012 18012 1
+1 18013 1
+18013 18013 1
+1 18014 1
+18014 18014 1
+1 18015 1
+18015 18015 1
+1 18016 1
+18016 18016 1
+1 18017 1
+18017 18017 1
+1 18018 1
+18018 18018 1
+1 18019 1
+18019 18019 1
+1 18020 1
+18020 18020 1
+1 18021 1
+18021 18021 1
+1 18022 1
+18022 18022 1
+1 18023 1
+18023 18023 1
+1 18024 1
+18024 18024 1
+1 18025 1
+18025 18025 1
+1 18026 1
+18026 18026 1
+1 18027 1
+18027 18027 1
+1 18028 1
+18028 18028 1
+1 18029 1
+18029 18029 1
+1 18030 1
+18030 18030 1
+1 18031 1
+18031 18031 1
+1 18032 1
+18032 18032 1
+1 18033 1
+18033 18033 1
+1 18034 1
+18034 18034 1
+1 18035 1
+18035 18035 1
+1 18036 1
+18036 18036 1
+1 18037 1
+18037 18037 1
+1 18038 1
+18038 18038 1
+1 18039 1
+18039 18039 1
+1 18040 1
+18040 18040 1
+1 18041 1
+18041 18041 1
+1 18042 1
+18042 18042 1
+1 18043 1
+18043 18043 1
+1 18044 1
+18044 18044 1
+1 18045 1
+18045 18045 1
+1 18046 1
+18046 18046 1
+1 18047 1
+18047 18047 1
+1 18048 1
+18048 18048 1
+1 18049 1
+18049 18049 1
+1 18050 1
+18050 18050 1
+1 18051 1
+18051 18051 1
+1 18052 1
+18052 18052 1
+1 18053 1
+18053 18053 1
+1 18054 1
+18054 18054 1
+1 18055 1
+18055 18055 1
+1 18056 1
+18056 18056 1
+1 18057 1
+18057 18057 1
+1 18058 1
+18058 18058 1
+1 18059 1
+18059 18059 1
+1 18060 1
+18060 18060 1
+1 18061 1
+18061 18061 1
+1 18062 1
+18062 18062 1
+1 18063 1
+18063 18063 1
+1 18064 1
+18064 18064 1
+1 18065 1
+18065 18065 1
+1 18066 1
+18066 18066 1
+1 18067 1
+18067 18067 1
+1 18068 1
+18068 18068 1
+1 18069 1
+18069 18069 1
+1 18070 1
+18070 18070 1
+1 18071 1
+18071 18071 1
+1 18072 1
+18072 18072 1
+1 18073 1
+18073 18073 1
+1 18074 1
+18074 18074 1
+1 18075 1
+18075 18075 1
+1 18076 1
+18076 18076 1
+1 18077 1
+18077 18077 1
+1 18078 1
+18078 18078 1
+1 18079 1
+18079 18079 1
+1 18080 1
+18080 18080 1
+1 18081 1
+18081 18081 1
+1 18082 1
+18082 18082 1
+1 18083 1
+18083 18083 1
+1 18084 1
+18084 18084 1
+1 18085 1
+18085 18085 1
+1 18086 1
+18086 18086 1
+1 18087 1
+18087 18087 1
+1 18088 1
+18088 18088 1
+1 18089 1
+18089 18089 1
+1 18090 1
+18090 18090 1
+1 18091 1
+18091 18091 1
+1 18092 1
+18092 18092 1
+1 18093 1
+18093 18093 1
+1 18094 1
+18094 18094 1
+1 18095 1
+18095 18095 1
+1 18096 1
+18096 18096 1
+1 18097 1
+18097 18097 1
+1 18098 1
+18098 18098 1
+1 18099 1
+18099 18099 1
+1 18100 1
+18100 18100 1
+1 18101 1
+18101 18101 1
+1 18102 1
+18102 18102 1
+1 18103 1
+18103 18103 1
+1 18104 1
+18104 18104 1
+1 18105 1
+18105 18105 1
+1 18106 1
+18106 18106 1
+1 18107 1
+18107 18107 1
+1 18108 1
+18108 18108 1
+1 18109 1
+18109 18109 1
+1 18110 1
+18110 18110 1
+1 18111 1
+18111 18111 1
+1 18112 1
+18112 18112 1
+1 18113 1
+18113 18113 1
+1 18114 1
+18114 18114 1
+1 18115 1
+18115 18115 1
+1 18116 1
+18116 18116 1
+1 18117 1
+18117 18117 1
+1 18118 1
+18118 18118 1
+1 18119 1
+18119 18119 1
+1 18120 1
+18120 18120 1
+1 18121 1
+18121 18121 1
+1 18122 1
+18122 18122 1
+1 18123 1
+18123 18123 1
+1 18124 1
+18124 18124 1
+1 18125 1
+18125 18125 1
+1 18126 1
+18126 18126 1
+1 18127 1
+18127 18127 1
+1 18128 1
+18128 18128 1
+1 18129 1
+18129 18129 1
+1 18130 1
+18130 18130 1
+1 18131 1
+18131 18131 1
+1 18132 1
+18132 18132 1
+1 18133 1
+18133 18133 1
+1 18134 1
+18134 18134 1
+1 18135 1
+18135 18135 1
+1 18136 1
+18136 18136 1
+1 18137 1
+18137 18137 1
+1 18138 1
+18138 18138 1
+1 18139 1
+18139 18139 1
+1 18140 1
+18140 18140 1
+1 18141 1
+18141 18141 1
+1 18142 1
+18142 18142 1
+1 18143 1
+18143 18143 1
+1 18144 1
+18144 18144 1
+1 18145 1
+18145 18145 1
+1 18146 1
+18146 18146 1
+1 18147 1
+18147 18147 1
+1 18148 1
+18148 18148 1
+1 18149 1
+18149 18149 1
+1 18150 1
+18150 18150 1
+1 18151 1
+18151 18151 1
+1 18152 1
+18152 18152 1
+1 18153 1
+18153 18153 1
+1 18154 1
+18154 18154 1
+1 18155 1
+18155 18155 1
+1 18156 1
+18156 18156 1
+1 18157 1
+18157 18157 1
+1 18158 1
+18158 18158 1
+1 18159 1
+18159 18159 1
+1 18160 1
+18160 18160 1
+1 18161 1
+18161 18161 1
+1 18162 1
+18162 18162 1
+1 18163 1
+18163 18163 1
+1 18164 1
+18164 18164 1
+1 18165 1
+18165 18165 1
+1 18166 1
+18166 18166 1
+1 18167 1
+18167 18167 1
+1 18168 1
+18168 18168 1
+1 18169 1
+18169 18169 1
+1 18170 1
+18170 18170 1
+1 18171 1
+18171 18171 1
+1 18172 1
+18172 18172 1
+1 18173 1
+18173 18173 1
+1 18174 1
+18174 18174 1
+1 18175 1
+18175 18175 1
+1 18176 1
+18176 18176 1
+1 18177 1
+18177 18177 1
+1 18178 1
+18178 18178 1
+1 18179 1
+18179 18179 1
+1 18180 1
+18180 18180 1
+1 18181 1
+18181 18181 1
+1 18182 1
+18182 18182 1
+1 18183 1
+18183 18183 1
+1 18184 1
+18184 18184 1
+1 18185 1
+18185 18185 1
+1 18186 1
+18186 18186 1
+1 18187 1
+18187 18187 1
+1 18188 1
+18188 18188 1
+1 18189 1
+18189 18189 1
+1 18190 1
+18190 18190 1
+1 18191 1
+18191 18191 1
+1 18192 1
+18192 18192 1
+1 18193 1
+18193 18193 1
+1 18194 1
+18194 18194 1
+1 18195 1
+18195 18195 1
+1 18196 1
+18196 18196 1
+1 18197 1
+18197 18197 1
+1 18198 1
+18198 18198 1
+1 18199 1
+18199 18199 1
+1 18200 1
+18200 18200 1
+1 18201 1
+18201 18201 1
+1 18202 1
+18202 18202 1
+1 18203 1
+18203 18203 1
+1 18204 1
+18204 18204 1
+1 18205 1
+18205 18205 1
+1 18206 1
+18206 18206 1
+1 18207 1
+18207 18207 1
+1 18208 1
+18208 18208 1
+1 18209 1
+18209 18209 1
+1 18210 1
+18210 18210 1
+1 18211 1
+18211 18211 1
+1 18212 1
+18212 18212 1
+1 18213 1
+18213 18213 1
+1 18214 1
+18214 18214 1
+1 18215 1
+18215 18215 1
+1 18216 1
+18216 18216 1
+1 18217 1
+18217 18217 1
+1 18218 1
+18218 18218 1
+1 18219 1
+18219 18219 1
+1 18220 1
+18220 18220 1
+1 18221 1
+18221 18221 1
+1 18222 1
+18222 18222 1
+1 18223 1
+18223 18223 1
+1 18224 1
+18224 18224 1
+1 18225 1
+18225 18225 1
+1 18226 1
+18226 18226 1
+1 18227 1
+18227 18227 1
+1 18228 1
+18228 18228 1
+1 18229 1
+18229 18229 1
+1 18230 1
+18230 18230 1
+1 18231 1
+18231 18231 1
+1 18232 1
+18232 18232 1
+1 18233 1
+18233 18233 1
+1 18234 1
+18234 18234 1
+1 18235 1
+18235 18235 1
+1 18236 1
+18236 18236 1
+1 18237 1
+18237 18237 1
+1 18238 1
+18238 18238 1
+1 18239 1
+18239 18239 1
+1 18240 1
+18240 18240 1
+1 18241 1
+18241 18241 1
+1 18242 1
+18242 18242 1
+1 18243 1
+18243 18243 1
+1 18244 1
+18244 18244 1
+1 18245 1
+18245 18245 1
+1 18246 1
+18246 18246 1
+1 18247 1
+18247 18247 1
+1 18248 1
+18248 18248 1
+1 18249 1
+18249 18249 1
+1 18250 1
+18250 18250 1
+1 18251 1
+18251 18251 1
+1 18252 1
+18252 18252 1
+1 18253 1
+18253 18253 1
+1 18254 1
+18254 18254 1
+1 18255 1
+18255 18255 1
+1 18256 1
+18256 18256 1
+1 18257 1
+18257 18257 1
+1 18258 1
+18258 18258 1
+1 18259 1
+18259 18259 1
+1 18260 1
+18260 18260 1
+1 18261 1
+18261 18261 1
+1 18262 1
+18262 18262 1
+1 18263 1
+18263 18263 1
+1 18264 1
+18264 18264 1
+1 18265 1
+18265 18265 1
+1 18266 1
+18266 18266 1
+1 18267 1
+18267 18267 1
+1 18268 1
+18268 18268 1
+1 18269 1
+18269 18269 1
+1 18270 1
+18270 18270 1
+1 18271 1
+18271 18271 1
+1 18272 1
+18272 18272 1
+1 18273 1
+18273 18273 1
+1 18274 1
+18274 18274 1
+1 18275 1
+18275 18275 1
+1 18276 1
+18276 18276 1
+1 18277 1
+18277 18277 1
+1 18278 1
+18278 18278 1
+1 18279 1
+18279 18279 1
+1 18280 1
+18280 18280 1
+1 18281 1
+18281 18281 1
+1 18282 1
+18282 18282 1
+1 18283 1
+18283 18283 1
+1 18284 1
+18284 18284 1
+1 18285 1
+18285 18285 1
+1 18286 1
+18286 18286 1
+1 18287 1
+18287 18287 1
+1 18288 1
+18288 18288 1
+1 18289 1
+18289 18289 1
+1 18290 1
+18290 18290 1
+1 18291 1
+18291 18291 1
+1 18292 1
+18292 18292 1
+1 18293 1
+18293 18293 1
+1 18294 1
+18294 18294 1
+1 18295 1
+18295 18295 1
+1 18296 1
+18296 18296 1
+1 18297 1
+18297 18297 1
+1 18298 1
+18298 18298 1
+1 18299 1
+18299 18299 1
+1 18300 1
+18300 18300 1
+1 18301 1
+18301 18301 1
+1 18302 1
+18302 18302 1
+1 18303 1
+18303 18303 1
+1 18304 1
+18304 18304 1
+1 18305 1
+18305 18305 1
+1 18306 1
+18306 18306 1
+1 18307 1
+18307 18307 1
+1 18308 1
+18308 18308 1
+1 18309 1
+18309 18309 1
+1 18310 1
+18310 18310 1
+1 18311 1
+18311 18311 1
+1 18312 1
+18312 18312 1
+1 18313 1
+18313 18313 1
+1 18314 1
+18314 18314 1
+1 18315 1
+18315 18315 1
+1 18316 1
+18316 18316 1
+1 18317 1
+18317 18317 1
+1 18318 1
+18318 18318 1
+1 18319 1
+18319 18319 1
+1 18320 1
+18320 18320 1
+1 18321 1
+18321 18321 1
+1 18322 1
+18322 18322 1
+1 18323 1
+18323 18323 1
+1 18324 1
+18324 18324 1
+1 18325 1
+18325 18325 1
+1 18326 1
+18326 18326 1
+1 18327 1
+18327 18327 1
+1 18328 1
+18328 18328 1
+1 18329 1
+18329 18329 1
+1 18330 1
+18330 18330 1
+1 18331 1
+18331 18331 1
+1 18332 1
+18332 18332 1
+1 18333 1
+18333 18333 1
+1 18334 1
+18334 18334 1
+1 18335 1
+18335 18335 1
+1 18336 1
+18336 18336 1
+1 18337 1
+18337 18337 1
+1 18338 1
+18338 18338 1
+1 18339 1
+18339 18339 1
+1 18340 1
+18340 18340 1
+1 18341 1
+18341 18341 1
+1 18342 1
+18342 18342 1
+1 18343 1
+18343 18343 1
+1 18344 1
+18344 18344 1
+1 18345 1
+18345 18345 1
+1 18346 1
+18346 18346 1
+1 18347 1
+18347 18347 1
+1 18348 1
+18348 18348 1
+1 18349 1
+18349 18349 1
+1 18350 1
+18350 18350 1
+1 18351 1
+18351 18351 1
+1 18352 1
+18352 18352 1
+1 18353 1
+18353 18353 1
+1 18354 1
+18354 18354 1
+1 18355 1
+18355 18355 1
+1 18356 1
+18356 18356 1
+1 18357 1
+18357 18357 1
+1 18358 1
+18358 18358 1
+1 18359 1
+18359 18359 1
+1 18360 1
+18360 18360 1
+1 18361 1
+18361 18361 1
+1 18362 1
+18362 18362 1
+1 18363 1
+18363 18363 1
+1 18364 1
+18364 18364 1
+1 18365 1
+18365 18365 1
+1 18366 1
+18366 18366 1
+1 18367 1
+18367 18367 1
+1 18368 1
+18368 18368 1
+1 18369 1
+18369 18369 1
+1 18370 1
+18370 18370 1
+1 18371 1
+18371 18371 1
+1 18372 1
+18372 18372 1
+1 18373 1
+18373 18373 1
+1 18374 1
+18374 18374 1
+1 18375 1
+18375 18375 1
+1 18376 1
+18376 18376 1
+1 18377 1
+18377 18377 1
+1 18378 1
+18378 18378 1
+1 18379 1
+18379 18379 1
+1 18380 1
+18380 18380 1
+1 18381 1
+18381 18381 1
+1 18382 1
+18382 18382 1
+1 18383 1
+18383 18383 1
+1 18384 1
+18384 18384 1
+1 18385 1
+18385 18385 1
+1 18386 1
+18386 18386 1
+1 18387 1
+18387 18387 1
+1 18388 1
+18388 18388 1
+1 18389 1
+18389 18389 1
+1 18390 1
+18390 18390 1
+1 18391 1
+18391 18391 1
+1 18392 1
+18392 18392 1
+1 18393 1
+18393 18393 1
+1 18394 1
+18394 18394 1
+1 18395 1
+18395 18395 1
+1 18396 1
+18396 18396 1
+1 18397 1
+18397 18397 1
+1 18398 1
+18398 18398 1
+1 18399 1
+18399 18399 1
+1 18400 1
+18400 18400 1
+1 18401 1
+18401 18401 1
+1 18402 1
+18402 18402 1
+1 18403 1
+18403 18403 1
+1 18404 1
+18404 18404 1
+1 18405 1
+18405 18405 1
+1 18406 1
+18406 18406 1
+1 18407 1
+18407 18407 1
+1 18408 1
+18408 18408 1
+1 18409 1
+18409 18409 1
+1 18410 1
+18410 18410 1
+1 18411 1
+18411 18411 1
+1 18412 1
+18412 18412 1
+1 18413 1
+18413 18413 1
+1 18414 1
+18414 18414 1
+1 18415 1
+18415 18415 1
+1 18416 1
+18416 18416 1
+1 18417 1
+18417 18417 1
+1 18418 1
+18418 18418 1
+1 18419 1
+18419 18419 1
+1 18420 1
+18420 18420 1
+1 18421 1
+18421 18421 1
+1 18422 1
+18422 18422 1
+1 18423 1
+18423 18423 1
+1 18424 1
+18424 18424 1
+1 18425 1
+18425 18425 1
+1 18426 1
+18426 18426 1
+1 18427 1
+18427 18427 1
+1 18428 1
+18428 18428 1
+1 18429 1
+18429 18429 1
+1 18430 1
+18430 18430 1
+1 18431 1
+18431 18431 1
+1 18432 1
+18432 18432 1
+1 18433 1
+18433 18433 1
+1 18434 1
+18434 18434 1
+1 18435 1
+18435 18435 1
+1 18436 1
+18436 18436 1
+1 18437 1
+18437 18437 1
+1 18438 1
+18438 18438 1
+1 18439 1
+18439 18439 1
+1 18440 1
+18440 18440 1
+1 18441 1
+18441 18441 1
+1 18442 1
+18442 18442 1
+1 18443 1
+18443 18443 1
+1 18444 1
+18444 18444 1
+1 18445 1
+18445 18445 1
+1 18446 1
+18446 18446 1
+1 18447 1
+18447 18447 1
+1 18448 1
+18448 18448 1
+1 18449 1
+18449 18449 1
+1 18450 1
+18450 18450 1
+1 18451 1
+18451 18451 1
+1 18452 1
+18452 18452 1
+1 18453 1
+18453 18453 1
+1 18454 1
+18454 18454 1
+1 18455 1
+18455 18455 1
+1 18456 1
+18456 18456 1
+1 18457 1
+18457 18457 1
+1 18458 1
+18458 18458 1
+1 18459 1
+18459 18459 1
+1 18460 1
+18460 18460 1
+1 18461 1
+18461 18461 1
+1 18462 1
+18462 18462 1
+1 18463 1
+18463 18463 1
+1 18464 1
+18464 18464 1
+1 18465 1
+18465 18465 1
+1 18466 1
+18466 18466 1
+1 18467 1
+18467 18467 1
+1 18468 1
+18468 18468 1
+1 18469 1
+18469 18469 1
+1 18470 1
+18470 18470 1
+1 18471 1
+18471 18471 1
+1 18472 1
+18472 18472 1
+1 18473 1
+18473 18473 1
+1 18474 1
+18474 18474 1
+1 18475 1
+18475 18475 1
+1 18476 1
+18476 18476 1
+1 18477 1
+18477 18477 1
+1 18478 1
+18478 18478 1
+1 18479 1
+18479 18479 1
+1 18480 1
+18480 18480 1
+1 18481 1
+18481 18481 1
+1 18482 1
+18482 18482 1
+1 18483 1
+18483 18483 1
+1 18484 1
+18484 18484 1
+1 18485 1
+18485 18485 1
+1 18486 1
+18486 18486 1
+1 18487 1
+18487 18487 1
+1 18488 1
+18488 18488 1
+1 18489 1
+18489 18489 1
+1 18490 1
+18490 18490 1
+1 18491 1
+18491 18491 1
+1 18492 1
+18492 18492 1
+1 18493 1
+18493 18493 1
+1 18494 1
+18494 18494 1
+1 18495 1
+18495 18495 1
+1 18496 1
+18496 18496 1
+1 18497 1
+18497 18497 1
+1 18498 1
+18498 18498 1
+1 18499 1
+18499 18499 1
+1 18500 1
+18500 18500 1
+1 18501 1
+18501 18501 1
+1 18502 1
+18502 18502 1
+1 18503 1
+18503 18503 1
+1 18504 1
+18504 18504 1
+1 18505 1
+18505 18505 1
+1 18506 1
+18506 18506 1
+1 18507 1
+18507 18507 1
+1 18508 1
+18508 18508 1
+1 18509 1
+18509 18509 1
+1 18510 1
+18510 18510 1
+1 18511 1
+18511 18511 1
+1 18512 1
+18512 18512 1
+1 18513 1
+18513 18513 1
+1 18514 1
+18514 18514 1
+1 18515 1
+18515 18515 1
+1 18516 1
+18516 18516 1
+1 18517 1
+18517 18517 1
+1 18518 1
+18518 18518 1
+1 18519 1
+18519 18519 1
+1 18520 1
+18520 18520 1
+1 18521 1
+18521 18521 1
+1 18522 1
+18522 18522 1
+1 18523 1
+18523 18523 1
+1 18524 1
+18524 18524 1
+1 18525 1
+18525 18525 1
+1 18526 1
+18526 18526 1
+1 18527 1
+18527 18527 1
+1 18528 1
+18528 18528 1
+1 18529 1
+18529 18529 1
+1 18530 1
+18530 18530 1
+1 18531 1
+18531 18531 1
+1 18532 1
+18532 18532 1
+1 18533 1
+18533 18533 1
+1 18534 1
+18534 18534 1
+1 18535 1
+18535 18535 1
+1 18536 1
+18536 18536 1
+1 18537 1
+18537 18537 1
+1 18538 1
+18538 18538 1
+1 18539 1
+18539 18539 1
+1 18540 1
+18540 18540 1
+1 18541 1
+18541 18541 1
+1 18542 1
+18542 18542 1
+1 18543 1
+18543 18543 1
+1 18544 1
+18544 18544 1
+1 18545 1
+18545 18545 1
+1 18546 1
+18546 18546 1
+1 18547 1
+18547 18547 1
+1 18548 1
+18548 18548 1
+1 18549 1
+18549 18549 1
+1 18550 1
+18550 18550 1
+1 18551 1
+18551 18551 1
+1 18552 1
+18552 18552 1
+1 18553 1
+18553 18553 1
+1 18554 1
+18554 18554 1
+1 18555 1
+18555 18555 1
+1 18556 1
+18556 18556 1
+1 18557 1
+18557 18557 1
+1 18558 1
+18558 18558 1
+1 18559 1
+18559 18559 1
+1 18560 1
+18560 18560 1
+1 18561 1
+18561 18561 1
+1 18562 1
+18562 18562 1
+1 18563 1
+18563 18563 1
+1 18564 1
+18564 18564 1
+1 18565 1
+18565 18565 1
+1 18566 1
+18566 18566 1
+1 18567 1
+18567 18567 1
+1 18568 1
+18568 18568 1
+1 18569 1
+18569 18569 1
+1 18570 1
+18570 18570 1
+1 18571 1
+18571 18571 1
+1 18572 1
+18572 18572 1
+1 18573 1
+18573 18573 1
+1 18574 1
+18574 18574 1
+1 18575 1
+18575 18575 1
+1 18576 1
+18576 18576 1
+1 18577 1
+18577 18577 1
+1 18578 1
+18578 18578 1
+1 18579 1
+18579 18579 1
+1 18580 1
+18580 18580 1
+1 18581 1
+18581 18581 1
+1 18582 1
+18582 18582 1
+1 18583 1
+18583 18583 1
+1 18584 1
+18584 18584 1
+1 18585 1
+18585 18585 1
+1 18586 1
+18586 18586 1
+1 18587 1
+18587 18587 1
+1 18588 1
+18588 18588 1
+1 18589 1
+18589 18589 1
+1 18590 1
+18590 18590 1
+1 18591 1
+18591 18591 1
+1 18592 1
+18592 18592 1
+1 18593 1
+18593 18593 1
+1 18594 1
+18594 18594 1
+1 18595 1
+18595 18595 1
+1 18596 1
+18596 18596 1
+1 18597 1
+18597 18597 1
+1 18598 1
+18598 18598 1
+1 18599 1
+18599 18599 1
+1 18600 1
+18600 18600 1
+1 18601 1
+18601 18601 1
+1 18602 1
+18602 18602 1
+1 18603 1
+18603 18603 1
+1 18604 1
+18604 18604 1
+1 18605 1
+18605 18605 1
+1 18606 1
+18606 18606 1
+1 18607 1
+18607 18607 1
+1 18608 1
+18608 18608 1
+1 18609 1
+18609 18609 1
+1 18610 1
+18610 18610 1
+1 18611 1
+18611 18611 1
+1 18612 1
+18612 18612 1
+1 18613 1
+18613 18613 1
+1 18614 1
+18614 18614 1
+1 18615 1
+18615 18615 1
+1 18616 1
+18616 18616 1
+1 18617 1
+18617 18617 1
+1 18618 1
+18618 18618 1
+1 18619 1
+18619 18619 1
+1 18620 1
+18620 18620 1
+1 18621 1
+18621 18621 1
+1 18622 1
+18622 18622 1
+1 18623 1
+18623 18623 1
+1 18624 1
+18624 18624 1
+1 18625 1
+18625 18625 1
+1 18626 1
+18626 18626 1
+1 18627 1
+18627 18627 1
+1 18628 1
+18628 18628 1
+1 18629 1
+18629 18629 1
+1 18630 1
+18630 18630 1
+1 18631 1
+18631 18631 1
+1 18632 1
+18632 18632 1
+1 18633 1
+18633 18633 1
+1 18634 1
+18634 18634 1
+1 18635 1
+18635 18635 1
+1 18636 1
+18636 18636 1
+1 18637 1
+18637 18637 1
+1 18638 1
+18638 18638 1
+1 18639 1
+18639 18639 1
+1 18640 1
+18640 18640 1
+1 18641 1
+18641 18641 1
+1 18642 1
+18642 18642 1
+1 18643 1
+18643 18643 1
+1 18644 1
+18644 18644 1
+1 18645 1
+18645 18645 1
+1 18646 1
+18646 18646 1
+1 18647 1
+18647 18647 1
+1 18648 1
+18648 18648 1
+1 18649 1
+18649 18649 1
+1 18650 1
+18650 18650 1
+1 18651 1
+18651 18651 1
+1 18652 1
+18652 18652 1
+1 18653 1
+18653 18653 1
+1 18654 1
+18654 18654 1
+1 18655 1
+18655 18655 1
+1 18656 1
+18656 18656 1
+1 18657 1
+18657 18657 1
+1 18658 1
+18658 18658 1
+1 18659 1
+18659 18659 1
+1 18660 1
+18660 18660 1
+1 18661 1
+18661 18661 1
+1 18662 1
+18662 18662 1
+1 18663 1
+18663 18663 1
+1 18664 1
+18664 18664 1
+1 18665 1
+18665 18665 1
+1 18666 1
+18666 18666 1
+1 18667 1
+18667 18667 1
+1 18668 1
+18668 18668 1
+1 18669 1
+18669 18669 1
+1 18670 1
+18670 18670 1
+1 18671 1
+18671 18671 1
+1 18672 1
+18672 18672 1
+1 18673 1
+18673 18673 1
+1 18674 1
+18674 18674 1
+1 18675 1
+18675 18675 1
+1 18676 1
+18676 18676 1
+1 18677 1
+18677 18677 1
+1 18678 1
+18678 18678 1
+1 18679 1
+18679 18679 1
+1 18680 1
+18680 18680 1
+1 18681 1
+18681 18681 1
+1 18682 1
+18682 18682 1
+1 18683 1
+18683 18683 1
+1 18684 1
+18684 18684 1
+1 18685 1
+18685 18685 1
+1 18686 1
+18686 18686 1
+1 18687 1
+18687 18687 1
+1 18688 1
+18688 18688 1
+1 18689 1
+18689 18689 1
+1 18690 1
+18690 18690 1
+1 18691 1
+18691 18691 1
+1 18692 1
+18692 18692 1
+1 18693 1
+18693 18693 1
+1 18694 1
+18694 18694 1
+1 18695 1
+18695 18695 1
+1 18696 1
+18696 18696 1
+1 18697 1
+18697 18697 1
+1 18698 1
+18698 18698 1
+1 18699 1
+18699 18699 1
+1 18700 1
+18700 18700 1
+1 18701 1
+18701 18701 1
+1 18702 1
+18702 18702 1
+1 18703 1
+18703 18703 1
+1 18704 1
+18704 18704 1
+1 18705 1
+18705 18705 1
+1 18706 1
+18706 18706 1
+1 18707 1
+18707 18707 1
+1 18708 1
+18708 18708 1
+1 18709 1
+18709 18709 1
+1 18710 1
+18710 18710 1
+1 18711 1
+18711 18711 1
+1 18712 1
+18712 18712 1
+1 18713 1
+18713 18713 1
+1 18714 1
+18714 18714 1
+1 18715 1
+18715 18715 1
+1 18716 1
+18716 18716 1
+1 18717 1
+18717 18717 1
+1 18718 1
+18718 18718 1
+1 18719 1
+18719 18719 1
+1 18720 1
+18720 18720 1
+1 18721 1
+18721 18721 1
+1 18722 1
+18722 18722 1
+1 18723 1
+18723 18723 1
+1 18724 1
+18724 18724 1
+1 18725 1
+18725 18725 1
+1 18726 1
+18726 18726 1
+1 18727 1
+18727 18727 1
+1 18728 1
+18728 18728 1
+1 18729 1
+18729 18729 1
+1 18730 1
+18730 18730 1
+1 18731 1
+18731 18731 1
+1 18732 1
+18732 18732 1
+1 18733 1
+18733 18733 1
+1 18734 1
+18734 18734 1
+1 18735 1
+18735 18735 1
+1 18736 1
+18736 18736 1
+1 18737 1
+18737 18737 1
+1 18738 1
+18738 18738 1
+1 18739 1
+18739 18739 1
+1 18740 1
+18740 18740 1
+1 18741 1
+18741 18741 1
+1 18742 1
+18742 18742 1
+1 18743 1
+18743 18743 1
+1 18744 1
+18744 18744 1
+1 18745 1
+18745 18745 1
+1 18746 1
+18746 18746 1
+1 18747 1
+18747 18747 1
+1 18748 1
+18748 18748 1
+1 18749 1
+18749 18749 1
+1 18750 1
+18750 18750 1
+1 18751 1
+18751 18751 1
+1 18752 1
+18752 18752 1
+1 18753 1
+18753 18753 1
+1 18754 1
+18754 18754 1
+1 18755 1
+18755 18755 1
+1 18756 1
+18756 18756 1
+1 18757 1
+18757 18757 1
+1 18758 1
+18758 18758 1
+1 18759 1
+18759 18759 1
+1 18760 1
+18760 18760 1
+1 18761 1
+18761 18761 1
+1 18762 1
+18762 18762 1
+1 18763 1
+18763 18763 1
+1 18764 1
+18764 18764 1
+1 18765 1
+18765 18765 1
+1 18766 1
+18766 18766 1
+1 18767 1
+18767 18767 1
+1 18768 1
+18768 18768 1
+1 18769 1
+18769 18769 1
+1 18770 1
+18770 18770 1
+1 18771 1
+18771 18771 1
+1 18772 1
+18772 18772 1
+1 18773 1
+18773 18773 1
+1 18774 1
+18774 18774 1
+1 18775 1
+18775 18775 1
+1 18776 1
+18776 18776 1
+1 18777 1
+18777 18777 1
+1 18778 1
+18778 18778 1
+1 18779 1
+18779 18779 1
+1 18780 1
+18780 18780 1
+1 18781 1
+18781 18781 1
+1 18782 1
+18782 18782 1
+1 18783 1
+18783 18783 1
+1 18784 1
+18784 18784 1
+1 18785 1
+18785 18785 1
+1 18786 1
+18786 18786 1
+1 18787 1
+18787 18787 1
+1 18788 1
+18788 18788 1
+1 18789 1
+18789 18789 1
+1 18790 1
+18790 18790 1
+1 18791 1
+18791 18791 1
+1 18792 1
+18792 18792 1
+1 18793 1
+18793 18793 1
+1 18794 1
+18794 18794 1
+1 18795 1
+18795 18795 1
+1 18796 1
+18796 18796 1
+1 18797 1
+18797 18797 1
+1 18798 1
+18798 18798 1
+1 18799 1
+18799 18799 1
+1 18800 1
+18800 18800 1
+1 18801 1
+18801 18801 1
+1 18802 1
+18802 18802 1
+1 18803 1
+18803 18803 1
+1 18804 1
+18804 18804 1
+1 18805 1
+18805 18805 1
+1 18806 1
+18806 18806 1
+1 18807 1
+18807 18807 1
+1 18808 1
+18808 18808 1
+1 18809 1
+18809 18809 1
+1 18810 1
+18810 18810 1
+1 18811 1
+18811 18811 1
+1 18812 1
+18812 18812 1
+1 18813 1
+18813 18813 1
+1 18814 1
+18814 18814 1
+1 18815 1
+18815 18815 1
+1 18816 1
+18816 18816 1
+1 18817 1
+18817 18817 1
+1 18818 1
+18818 18818 1
+1 18819 1
+18819 18819 1
+1 18820 1
+18820 18820 1
+1 18821 1
+18821 18821 1
+1 18822 1
+18822 18822 1
+1 18823 1
+18823 18823 1
+1 18824 1
+18824 18824 1
+1 18825 1
+18825 18825 1
+1 18826 1
+18826 18826 1
+1 18827 1
+18827 18827 1
+1 18828 1
+18828 18828 1
+1 18829 1
+18829 18829 1
+1 18830 1
+18830 18830 1
+1 18831 1
+18831 18831 1
+1 18832 1
+18832 18832 1
+1 18833 1
+18833 18833 1
+1 18834 1
+18834 18834 1
+1 18835 1
+18835 18835 1
+1 18836 1
+18836 18836 1
+1 18837 1
+18837 18837 1
+1 18838 1
+18838 18838 1
+1 18839 1
+18839 18839 1
+1 18840 1
+18840 18840 1
+1 18841 1
+18841 18841 1
+1 18842 1
+18842 18842 1
+1 18843 1
+18843 18843 1
+1 18844 1
+18844 18844 1
+1 18845 1
+18845 18845 1
+1 18846 1
+18846 18846 1
+1 18847 1
+18847 18847 1
+1 18848 1
+18848 18848 1
+1 18849 1
+18849 18849 1
+1 18850 1
+18850 18850 1
+1 18851 1
+18851 18851 1
+1 18852 1
+18852 18852 1
+1 18853 1
+18853 18853 1
+1 18854 1
+18854 18854 1
+1 18855 1
+18855 18855 1
+1 18856 1
+18856 18856 1
+1 18857 1
+18857 18857 1
+1 18858 1
+18858 18858 1
+1 18859 1
+18859 18859 1
+1 18860 1
+18860 18860 1
+1 18861 1
+18861 18861 1
+1 18862 1
+18862 18862 1
+1 18863 1
+18863 18863 1
+1 18864 1
+18864 18864 1
+1 18865 1
+18865 18865 1
+1 18866 1
+18866 18866 1
+1 18867 1
+18867 18867 1
+1 18868 1
+18868 18868 1
+1 18869 1
+18869 18869 1
+1 18870 1
+18870 18870 1
+1 18871 1
+18871 18871 1
+1 18872 1
+18872 18872 1
+1 18873 1
+18873 18873 1
+1 18874 1
+18874 18874 1
+1 18875 1
+18875 18875 1
+1 18876 1
+18876 18876 1
+1 18877 1
+18877 18877 1
+1 18878 1
+18878 18878 1
+1 18879 1
+18879 18879 1
+1 18880 1
+18880 18880 1
+1 18881 1
+18881 18881 1
+1 18882 1
+18882 18882 1
+1 18883 1
+18883 18883 1
+1 18884 1
+18884 18884 1
+1 18885 1
+18885 18885 1
+1 18886 1
+18886 18886 1
+1 18887 1
+18887 18887 1
+1 18888 1
+18888 18888 1
+1 18889 1
+18889 18889 1
+1 18890 1
+18890 18890 1
+1 18891 1
+18891 18891 1
+1 18892 1
+18892 18892 1
+1 18893 1
+18893 18893 1
+1 18894 1
+18894 18894 1
+1 18895 1
+18895 18895 1
+1 18896 1
+18896 18896 1
+1 18897 1
+18897 18897 1
+1 18898 1
+18898 18898 1
+1 18899 1
+18899 18899 1
+1 18900 1
+18900 18900 1
+1 18901 1
+18901 18901 1
+1 18902 1
+18902 18902 1
+1 18903 1
+18903 18903 1
+1 18904 1
+18904 18904 1
+1 18905 1
+18905 18905 1
+1 18906 1
+18906 18906 1
+1 18907 1
+18907 18907 1
+1 18908 1
+18908 18908 1
+1 18909 1
+18909 18909 1
+1 18910 1
+18910 18910 1
+1 18911 1
+18911 18911 1
+1 18912 1
+18912 18912 1
+1 18913 1
+18913 18913 1
+1 18914 1
+18914 18914 1
+1 18915 1
+18915 18915 1
+1 18916 1
+18916 18916 1
+1 18917 1
+18917 18917 1
+1 18918 1
+18918 18918 1
+1 18919 1
+18919 18919 1
+1 18920 1
+18920 18920 1
+1 18921 1
+18921 18921 1
+1 18922 1
+18922 18922 1
+1 18923 1
+18923 18923 1
+1 18924 1
+18924 18924 1
+1 18925 1
+18925 18925 1
+1 18926 1
+18926 18926 1
+1 18927 1
+18927 18927 1
+1 18928 1
+18928 18928 1
+1 18929 1
+18929 18929 1
+1 18930 1
+18930 18930 1
+1 18931 1
+18931 18931 1
+1 18932 1
+18932 18932 1
+1 18933 1
+18933 18933 1
+1 18934 1
+18934 18934 1
+1 18935 1
+18935 18935 1
+1 18936 1
+18936 18936 1
+1 18937 1
+18937 18937 1
+1 18938 1
+18938 18938 1
+1 18939 1
+18939 18939 1
+1 18940 1
+18940 18940 1
+1 18941 1
+18941 18941 1
+1 18942 1
+18942 18942 1
+1 18943 1
+18943 18943 1
+1 18944 1
+18944 18944 1
+1 18945 1
+18945 18945 1
+1 18946 1
+18946 18946 1
+1 18947 1
+18947 18947 1
+1 18948 1
+18948 18948 1
+1 18949 1
+18949 18949 1
+1 18950 1
+18950 18950 1
+1 18951 1
+18951 18951 1
+1 18952 1
+18952 18952 1
+1 18953 1
+18953 18953 1
+1 18954 1
+18954 18954 1
+1 18955 1
+18955 18955 1
+1 18956 1
+18956 18956 1
+1 18957 1
+18957 18957 1
+1 18958 1
+18958 18958 1
+1 18959 1
+18959 18959 1
+1 18960 1
+18960 18960 1
+1 18961 1
+18961 18961 1
+1 18962 1
+18962 18962 1
+1 18963 1
+18963 18963 1
+1 18964 1
+18964 18964 1
+1 18965 1
+18965 18965 1
+1 18966 1
+18966 18966 1
+1 18967 1
+18967 18967 1
+1 18968 1
+18968 18968 1
+1 18969 1
+18969 18969 1
+1 18970 1
+18970 18970 1
+1 18971 1
+18971 18971 1
+1 18972 1
+18972 18972 1
+1 18973 1
+18973 18973 1
+1 18974 1
+18974 18974 1
+1 18975 1
+18975 18975 1
+1 18976 1
+18976 18976 1
+1 18977 1
+18977 18977 1
+1 18978 1
+18978 18978 1
+1 18979 1
+18979 18979 1
+1 18980 1
+18980 18980 1
+1 18981 1
+18981 18981 1
+1 18982 1
+18982 18982 1
+1 18983 1
+18983 18983 1
+1 18984 1
+18984 18984 1
+1 18985 1
+18985 18985 1
+1 18986 1
+18986 18986 1
+1 18987 1
+18987 18987 1
+1 18988 1
+18988 18988 1
+1 18989 1
+18989 18989 1
+1 18990 1
+18990 18990 1
+1 18991 1
+18991 18991 1
+1 18992 1
+18992 18992 1
+1 18993 1
+18993 18993 1
+1 18994 1
+18994 18994 1
+1 18995 1
+18995 18995 1
+1 18996 1
+18996 18996 1
+1 18997 1
+18997 18997 1
+1 18998 1
+18998 18998 1
+1 18999 1
+18999 18999 1
+1 19000 1
+19000 19000 1
+1 19001 1
+19001 19001 1
+1 19002 1
+19002 19002 1
+1 19003 1
+19003 19003 1
+1 19004 1
+19004 19004 1
+1 19005 1
+19005 19005 1
+1 19006 1
+19006 19006 1
+1 19007 1
+19007 19007 1
+1 19008 1
+19008 19008 1
+1 19009 1
+19009 19009 1
+1 19010 1
+19010 19010 1
+1 19011 1
+19011 19011 1
+1 19012 1
+19012 19012 1
+1 19013 1
+19013 19013 1
+1 19014 1
+19014 19014 1
+1 19015 1
+19015 19015 1
+1 19016 1
+19016 19016 1
+1 19017 1
+19017 19017 1
+1 19018 1
+19018 19018 1
+1 19019 1
+19019 19019 1
+1 19020 1
+19020 19020 1
+1 19021 1
+19021 19021 1
+1 19022 1
+19022 19022 1
+1 19023 1
+19023 19023 1
+1 19024 1
+19024 19024 1
+1 19025 1
+19025 19025 1
+1 19026 1
+19026 19026 1
+1 19027 1
+19027 19027 1
+1 19028 1
+19028 19028 1
+1 19029 1
+19029 19029 1
+1 19030 1
+19030 19030 1
+1 19031 1
+19031 19031 1
+1 19032 1
+19032 19032 1
+1 19033 1
+19033 19033 1
+1 19034 1
+19034 19034 1
+1 19035 1
+19035 19035 1
+1 19036 1
+19036 19036 1
+1 19037 1
+19037 19037 1
+1 19038 1
+19038 19038 1
+1 19039 1
+19039 19039 1
+1 19040 1
+19040 19040 1
+1 19041 1
+19041 19041 1
+1 19042 1
+19042 19042 1
+1 19043 1
+19043 19043 1
+1 19044 1
+19044 19044 1
+1 19045 1
+19045 19045 1
+1 19046 1
+19046 19046 1
+1 19047 1
+19047 19047 1
+1 19048 1
+19048 19048 1
+1 19049 1
+19049 19049 1
+1 19050 1
+19050 19050 1
+1 19051 1
+19051 19051 1
+1 19052 1
+19052 19052 1
+1 19053 1
+19053 19053 1
+1 19054 1
+19054 19054 1
+1 19055 1
+19055 19055 1
+1 19056 1
+19056 19056 1
+1 19057 1
+19057 19057 1
+1 19058 1
+19058 19058 1
+1 19059 1
+19059 19059 1
+1 19060 1
+19060 19060 1
+1 19061 1
+19061 19061 1
+1 19062 1
+19062 19062 1
+1 19063 1
+19063 19063 1
+1 19064 1
+19064 19064 1
+1 19065 1
+19065 19065 1
+1 19066 1
+19066 19066 1
+1 19067 1
+19067 19067 1
+1 19068 1
+19068 19068 1
+1 19069 1
+19069 19069 1
+1 19070 1
+19070 19070 1
+1 19071 1
+19071 19071 1
+1 19072 1
+19072 19072 1
+1 19073 1
+19073 19073 1
+1 19074 1
+19074 19074 1
+1 19075 1
+19075 19075 1
+1 19076 1
+19076 19076 1
+1 19077 1
+19077 19077 1
+1 19078 1
+19078 19078 1
+1 19079 1
+19079 19079 1
+1 19080 1
+19080 19080 1
+1 19081 1
+19081 19081 1
+1 19082 1
+19082 19082 1
+1 19083 1
+19083 19083 1
+1 19084 1
+19084 19084 1
+1 19085 1
+19085 19085 1
+1 19086 1
+19086 19086 1
+1 19087 1
+19087 19087 1
+1 19088 1
+19088 19088 1
+1 19089 1
+19089 19089 1
+1 19090 1
+19090 19090 1
+1 19091 1
+19091 19091 1
+1 19092 1
+19092 19092 1
+1 19093 1
+19093 19093 1
+1 19094 1
+19094 19094 1
+1 19095 1
+19095 19095 1
+1 19096 1
+19096 19096 1
+1 19097 1
+19097 19097 1
+1 19098 1
+19098 19098 1
+1 19099 1
+19099 19099 1
+1 19100 1
+19100 19100 1
+1 19101 1
+19101 19101 1
+1 19102 1
+19102 19102 1
+1 19103 1
+19103 19103 1
+1 19104 1
+19104 19104 1
+1 19105 1
+19105 19105 1
+1 19106 1
+19106 19106 1
+1 19107 1
+19107 19107 1
+1 19108 1
+19108 19108 1
+1 19109 1
+19109 19109 1
+1 19110 1
+19110 19110 1
+1 19111 1
+19111 19111 1
+1 19112 1
+19112 19112 1
+1 19113 1
+19113 19113 1
+1 19114 1
+19114 19114 1
+1 19115 1
+19115 19115 1
+1 19116 1
+19116 19116 1
+1 19117 1
+19117 19117 1
+1 19118 1
+19118 19118 1
+1 19119 1
+19119 19119 1
+1 19120 1
+19120 19120 1
+1 19121 1
+19121 19121 1
+1 19122 1
+19122 19122 1
+1 19123 1
+19123 19123 1
+1 19124 1
+19124 19124 1
+1 19125 1
+19125 19125 1
+1 19126 1
+19126 19126 1
+1 19127 1
+19127 19127 1
+1 19128 1
+19128 19128 1
+1 19129 1
+19129 19129 1
+1 19130 1
+19130 19130 1
+1 19131 1
+19131 19131 1
+1 19132 1
+19132 19132 1
+1 19133 1
+19133 19133 1
+1 19134 1
+19134 19134 1
+1 19135 1
+19135 19135 1
+1 19136 1
+19136 19136 1
+1 19137 1
+19137 19137 1
+1 19138 1
+19138 19138 1
+1 19139 1
+19139 19139 1
+1 19140 1
+19140 19140 1
+1 19141 1
+19141 19141 1
+1 19142 1
+19142 19142 1
+1 19143 1
+19143 19143 1
+1 19144 1
+19144 19144 1
+1 19145 1
+19145 19145 1
+1 19146 1
+19146 19146 1
+1 19147 1
+19147 19147 1
+1 19148 1
+19148 19148 1
+1 19149 1
+19149 19149 1
+1 19150 1
+19150 19150 1
+1 19151 1
+19151 19151 1
+1 19152 1
+19152 19152 1
+1 19153 1
+19153 19153 1
+1 19154 1
+19154 19154 1
+1 19155 1
+19155 19155 1
+1 19156 1
+19156 19156 1
+1 19157 1
+19157 19157 1
+1 19158 1
+19158 19158 1
+1 19159 1
+19159 19159 1
+1 19160 1
+19160 19160 1
+1 19161 1
+19161 19161 1
+1 19162 1
+19162 19162 1
+1 19163 1
+19163 19163 1
+1 19164 1
+19164 19164 1
+1 19165 1
+19165 19165 1
+1 19166 1
+19166 19166 1
+1 19167 1
+19167 19167 1
+1 19168 1
+19168 19168 1
+1 19169 1
+19169 19169 1
+1 19170 1
+19170 19170 1
+1 19171 1
+19171 19171 1
+1 19172 1
+19172 19172 1
+1 19173 1
+19173 19173 1
+1 19174 1
+19174 19174 1
+1 19175 1
+19175 19175 1
+1 19176 1
+19176 19176 1
+1 19177 1
+19177 19177 1
+1 19178 1
+19178 19178 1
+1 19179 1
+19179 19179 1
+1 19180 1
+19180 19180 1
+1 19181 1
+19181 19181 1
+1 19182 1
+19182 19182 1
+1 19183 1
+19183 19183 1
+1 19184 1
+19184 19184 1
+1 19185 1
+19185 19185 1
+1 19186 1
+19186 19186 1
+1 19187 1
+19187 19187 1
+1 19188 1
+19188 19188 1
+1 19189 1
+19189 19189 1
+1 19190 1
+19190 19190 1
+1 19191 1
+19191 19191 1
+1 19192 1
+19192 19192 1
+1 19193 1
+19193 19193 1
+1 19194 1
+19194 19194 1
+1 19195 1
+19195 19195 1
+1 19196 1
+19196 19196 1
+1 19197 1
+19197 19197 1
+1 19198 1
+19198 19198 1
+1 19199 1
+19199 19199 1
+1 19200 1
+19200 19200 1
+1 19201 1
+19201 19201 1
+1 19202 1
+19202 19202 1
+1 19203 1
+19203 19203 1
+1 19204 1
+19204 19204 1
+1 19205 1
+19205 19205 1
+1 19206 1
+19206 19206 1
+1 19207 1
+19207 19207 1
+1 19208 1
+19208 19208 1
+1 19209 1
+19209 19209 1
+1 19210 1
+19210 19210 1
+1 19211 1
+19211 19211 1
+1 19212 1
+19212 19212 1
+1 19213 1
+19213 19213 1
+1 19214 1
+19214 19214 1
+1 19215 1
+19215 19215 1
+1 19216 1
+19216 19216 1
+1 19217 1
+19217 19217 1
+1 19218 1
+19218 19218 1
+1 19219 1
+19219 19219 1
+1 19220 1
+19220 19220 1
+1 19221 1
+19221 19221 1
+1 19222 1
+19222 19222 1
+1 19223 1
+19223 19223 1
+1 19224 1
+19224 19224 1
+1 19225 1
+19225 19225 1
+1 19226 1
+19226 19226 1
+1 19227 1
+19227 19227 1
+1 19228 1
+19228 19228 1
+1 19229 1
+19229 19229 1
+1 19230 1
+19230 19230 1
+1 19231 1
+19231 19231 1
+1 19232 1
+19232 19232 1
+1 19233 1
+19233 19233 1
+1 19234 1
+19234 19234 1
+1 19235 1
+19235 19235 1
+1 19236 1
+19236 19236 1
+1 19237 1
+19237 19237 1
+1 19238 1
+19238 19238 1
+1 19239 1
+19239 19239 1
+1 19240 1
+19240 19240 1
+1 19241 1
+19241 19241 1
+1 19242 1
+19242 19242 1
+1 19243 1
+19243 19243 1
+1 19244 1
+19244 19244 1
+1 19245 1
+19245 19245 1
+1 19246 1
+19246 19246 1
+1 19247 1
+19247 19247 1
+1 19248 1
+19248 19248 1
+1 19249 1
+19249 19249 1
+1 19250 1
+19250 19250 1
+1 19251 1
+19251 19251 1
+1 19252 1
+19252 19252 1
+1 19253 1
+19253 19253 1
+1 19254 1
+19254 19254 1
+1 19255 1
+19255 19255 1
+1 19256 1
+19256 19256 1
+1 19257 1
+19257 19257 1
+1 19258 1
+19258 19258 1
+1 19259 1
+19259 19259 1
+1 19260 1
+19260 19260 1
+1 19261 1
+19261 19261 1
+1 19262 1
+19262 19262 1
+1 19263 1
+19263 19263 1
+1 19264 1
+19264 19264 1
+1 19265 1
+19265 19265 1
+1 19266 1
+19266 19266 1
+1 19267 1
+19267 19267 1
+1 19268 1
+19268 19268 1
+1 19269 1
+19269 19269 1
+1 19270 1
+19270 19270 1
+1 19271 1
+19271 19271 1
+1 19272 1
+19272 19272 1
+1 19273 1
+19273 19273 1
+1 19274 1
+19274 19274 1
+1 19275 1
+19275 19275 1
+1 19276 1
+19276 19276 1
+1 19277 1
+19277 19277 1
+1 19278 1
+19278 19278 1
+1 19279 1
+19279 19279 1
+1 19280 1
+19280 19280 1
+1 19281 1
+19281 19281 1
+1 19282 1
+19282 19282 1
+1 19283 1
+19283 19283 1
+1 19284 1
+19284 19284 1
+1 19285 1
+19285 19285 1
+1 19286 1
+19286 19286 1
+1 19287 1
+19287 19287 1
+1 19288 1
+19288 19288 1
+1 19289 1
+19289 19289 1
+1 19290 1
+19290 19290 1
+1 19291 1
+19291 19291 1
+1 19292 1
+19292 19292 1
+1 19293 1
+19293 19293 1
+1 19294 1
+19294 19294 1
+1 19295 1
+19295 19295 1
+1 19296 1
+19296 19296 1
+1 19297 1
+19297 19297 1
+1 19298 1
+19298 19298 1
+1 19299 1
+19299 19299 1
+1 19300 1
+19300 19300 1
+1 19301 1
+19301 19301 1
+1 19302 1
+19302 19302 1
+1 19303 1
+19303 19303 1
+1 19304 1
+19304 19304 1
+1 19305 1
+19305 19305 1
+1 19306 1
+19306 19306 1
+1 19307 1
+19307 19307 1
+1 19308 1
+19308 19308 1
+1 19309 1
+19309 19309 1
+1 19310 1
+19310 19310 1
+1 19311 1
+19311 19311 1
+1 19312 1
+19312 19312 1
+1 19313 1
+19313 19313 1
+1 19314 1
+19314 19314 1
+1 19315 1
+19315 19315 1
+1 19316 1
+19316 19316 1
+1 19317 1
+19317 19317 1
+1 19318 1
+19318 19318 1
+1 19319 1
+19319 19319 1
+1 19320 1
+19320 19320 1
+1 19321 1
+19321 19321 1
+1 19322 1
+19322 19322 1
+1 19323 1
+19323 19323 1
+1 19324 1
+19324 19324 1
+1 19325 1
+19325 19325 1
+1 19326 1
+19326 19326 1
+1 19327 1
+19327 19327 1
+1 19328 1
+19328 19328 1
+1 19329 1
+19329 19329 1
+1 19330 1
+19330 19330 1
+1 19331 1
+19331 19331 1
+1 19332 1
+19332 19332 1
+1 19333 1
+19333 19333 1
+1 19334 1
+19334 19334 1
+1 19335 1
+19335 19335 1
+1 19336 1
+19336 19336 1
+1 19337 1
+19337 19337 1
+1 19338 1
+19338 19338 1
+1 19339 1
+19339 19339 1
+1 19340 1
+19340 19340 1
+1 19341 1
+19341 19341 1
+1 19342 1
+19342 19342 1
+1 19343 1
+19343 19343 1
+1 19344 1
+19344 19344 1
+1 19345 1
+19345 19345 1
+1 19346 1
+19346 19346 1
+1 19347 1
+19347 19347 1
+1 19348 1
+19348 19348 1
+1 19349 1
+19349 19349 1
+1 19350 1
+19350 19350 1
+1 19351 1
+19351 19351 1
+1 19352 1
+19352 19352 1
+1 19353 1
+19353 19353 1
+1 19354 1
+19354 19354 1
+1 19355 1
+19355 19355 1
+1 19356 1
+19356 19356 1
+1 19357 1
+19357 19357 1
+1 19358 1
+19358 19358 1
+1 19359 1
+19359 19359 1
+1 19360 1
+19360 19360 1
+1 19361 1
+19361 19361 1
+1 19362 1
+19362 19362 1
+1 19363 1
+19363 19363 1
+1 19364 1
+19364 19364 1
+1 19365 1
+19365 19365 1
+1 19366 1
+19366 19366 1
+1 19367 1
+19367 19367 1
+1 19368 1
+19368 19368 1
+1 19369 1
+19369 19369 1
+1 19370 1
+19370 19370 1
+1 19371 1
+19371 19371 1
+1 19372 1
+19372 19372 1
+1 19373 1
+19373 19373 1
+1 19374 1
+19374 19374 1
+1 19375 1
+19375 19375 1
+1 19376 1
+19376 19376 1
+1 19377 1
+19377 19377 1
+1 19378 1
+19378 19378 1
+1 19379 1
+19379 19379 1
+1 19380 1
+19380 19380 1
+1 19381 1
+19381 19381 1
+1 19382 1
+19382 19382 1
+1 19383 1
+19383 19383 1
+1 19384 1
+19384 19384 1
+1 19385 1
+19385 19385 1
+1 19386 1
+19386 19386 1
+1 19387 1
+19387 19387 1
+1 19388 1
+19388 19388 1
+1 19389 1
+19389 19389 1
+1 19390 1
+19390 19390 1
+1 19391 1
+19391 19391 1
+1 19392 1
+19392 19392 1
+1 19393 1
+19393 19393 1
+1 19394 1
+19394 19394 1
+1 19395 1
+19395 19395 1
+1 19396 1
+19396 19396 1
+1 19397 1
+19397 19397 1
+1 19398 1
+19398 19398 1
+1 19399 1
+19399 19399 1
+1 19400 1
+19400 19400 1
+1 19401 1
+19401 19401 1
+1 19402 1
+19402 19402 1
+1 19403 1
+19403 19403 1
+1 19404 1
+19404 19404 1
+1 19405 1
+19405 19405 1
+1 19406 1
+19406 19406 1
+1 19407 1
+19407 19407 1
+1 19408 1
+19408 19408 1
+1 19409 1
+19409 19409 1
+1 19410 1
+19410 19410 1
+1 19411 1
+19411 19411 1
+1 19412 1
+19412 19412 1
+1 19413 1
+19413 19413 1
+1 19414 1
+19414 19414 1
+1 19415 1
+19415 19415 1
+1 19416 1
+19416 19416 1
+1 19417 1
+19417 19417 1
+1 19418 1
+19418 19418 1
+1 19419 1
+19419 19419 1
+1 19420 1
+19420 19420 1
+1 19421 1
+19421 19421 1
+1 19422 1
+19422 19422 1
+1 19423 1
+19423 19423 1
+1 19424 1
+19424 19424 1
+1 19425 1
+19425 19425 1
+1 19426 1
+19426 19426 1
+1 19427 1
+19427 19427 1
+1 19428 1
+19428 19428 1
+1 19429 1
+19429 19429 1
+1 19430 1
+19430 19430 1
+1 19431 1
+19431 19431 1
+1 19432 1
+19432 19432 1
+1 19433 1
+19433 19433 1
+1 19434 1
+19434 19434 1
+1 19435 1
+19435 19435 1
+1 19436 1
+19436 19436 1
+1 19437 1
+19437 19437 1
+1 19438 1
+19438 19438 1
+1 19439 1
+19439 19439 1
+1 19440 1
+19440 19440 1
+1 19441 1
+19441 19441 1
+1 19442 1
+19442 19442 1
+1 19443 1
+19443 19443 1
+1 19444 1
+19444 19444 1
+1 19445 1
+19445 19445 1
+1 19446 1
+19446 19446 1
+1 19447 1
+19447 19447 1
+1 19448 1
+19448 19448 1
+1 19449 1
+19449 19449 1
+1 19450 1
+19450 19450 1
+1 19451 1
+19451 19451 1
+1 19452 1
+19452 19452 1
+1 19453 1
+19453 19453 1
+1 19454 1
+19454 19454 1
+1 19455 1
+19455 19455 1
+1 19456 1
+19456 19456 1
+1 19457 1
+19457 19457 1
+1 19458 1
+19458 19458 1
+1 19459 1
+19459 19459 1
+1 19460 1
+19460 19460 1
+1 19461 1
+19461 19461 1
+1 19462 1
+19462 19462 1
+1 19463 1
+19463 19463 1
+1 19464 1
+19464 19464 1
+1 19465 1
+19465 19465 1
+1 19466 1
+19466 19466 1
+1 19467 1
+19467 19467 1
+1 19468 1
+19468 19468 1
+1 19469 1
+19469 19469 1
+1 19470 1
+19470 19470 1
+1 19471 1
+19471 19471 1
+1 19472 1
+19472 19472 1
+1 19473 1
+19473 19473 1
+1 19474 1
+19474 19474 1
+1 19475 1
+19475 19475 1
+1 19476 1
+19476 19476 1
+1 19477 1
+19477 19477 1
+1 19478 1
+19478 19478 1
+1 19479 1
+19479 19479 1
+1 19480 1
+19480 19480 1
+1 19481 1
+19481 19481 1
+1 19482 1
+19482 19482 1
+1 19483 1
+19483 19483 1
+1 19484 1
+19484 19484 1
+1 19485 1
+19485 19485 1
+1 19486 1
+19486 19486 1
+1 19487 1
+19487 19487 1
+1 19488 1
+19488 19488 1
+1 19489 1
+19489 19489 1
+1 19490 1
+19490 19490 1
+1 19491 1
+19491 19491 1
+1 19492 1
+19492 19492 1
+1 19493 1
+19493 19493 1
+1 19494 1
+19494 19494 1
+1 19495 1
+19495 19495 1
+1 19496 1
+19496 19496 1
+1 19497 1
+19497 19497 1
+1 19498 1
+19498 19498 1
+1 19499 1
+19499 19499 1
+1 19500 1
+19500 19500 1
+1 19501 1
+19501 19501 1
+1 19502 1
+19502 19502 1
+1 19503 1
+19503 19503 1
+1 19504 1
+19504 19504 1
+1 19505 1
+19505 19505 1
+1 19506 1
+19506 19506 1
+1 19507 1
+19507 19507 1
+1 19508 1
+19508 19508 1
+1 19509 1
+19509 19509 1
+1 19510 1
+19510 19510 1
+1 19511 1
+19511 19511 1
+1 19512 1
+19512 19512 1
+1 19513 1
+19513 19513 1
+1 19514 1
+19514 19514 1
+1 19515 1
+19515 19515 1
+1 19516 1
+19516 19516 1
+1 19517 1
+19517 19517 1
+1 19518 1
+19518 19518 1
+1 19519 1
+19519 19519 1
+1 19520 1
+19520 19520 1
+1 19521 1
+19521 19521 1
+1 19522 1
+19522 19522 1
+1 19523 1
+19523 19523 1
+1 19524 1
+19524 19524 1
+1 19525 1
+19525 19525 1
+1 19526 1
+19526 19526 1
+1 19527 1
+19527 19527 1
+1 19528 1
+19528 19528 1
+1 19529 1
+19529 19529 1
+1 19530 1
+19530 19530 1
+1 19531 1
+19531 19531 1
+1 19532 1
+19532 19532 1
+1 19533 1
+19533 19533 1
+1 19534 1
+19534 19534 1
+1 19535 1
+19535 19535 1
+1 19536 1
+19536 19536 1
+1 19537 1
+19537 19537 1
+1 19538 1
+19538 19538 1
+1 19539 1
+19539 19539 1
+1 19540 1
+19540 19540 1
+1 19541 1
+19541 19541 1
+1 19542 1
+19542 19542 1
+1 19543 1
+19543 19543 1
+1 19544 1
+19544 19544 1
+1 19545 1
+19545 19545 1
+1 19546 1
+19546 19546 1
+1 19547 1
+19547 19547 1
+1 19548 1
+19548 19548 1
+1 19549 1
+19549 19549 1
+1 19550 1
+19550 19550 1
+1 19551 1
+19551 19551 1
+1 19552 1
+19552 19552 1
+1 19553 1
+19553 19553 1
+1 19554 1
+19554 19554 1
+1 19555 1
+19555 19555 1
+1 19556 1
+19556 19556 1
+1 19557 1
+19557 19557 1
+1 19558 1
+19558 19558 1
+1 19559 1
+19559 19559 1
+1 19560 1
+19560 19560 1
+1 19561 1
+19561 19561 1
+1 19562 1
+19562 19562 1
+1 19563 1
+19563 19563 1
+1 19564 1
+19564 19564 1
+1 19565 1
+19565 19565 1
+1 19566 1
+19566 19566 1
+1 19567 1
+19567 19567 1
+1 19568 1
+19568 19568 1
+1 19569 1
+19569 19569 1
+1 19570 1
+19570 19570 1
+1 19571 1
+19571 19571 1
+1 19572 1
+19572 19572 1
+1 19573 1
+19573 19573 1
+1 19574 1
+19574 19574 1
+1 19575 1
+19575 19575 1
+1 19576 1
+19576 19576 1
+1 19577 1
+19577 19577 1
+1 19578 1
+19578 19578 1
+1 19579 1
+19579 19579 1
+1 19580 1
+19580 19580 1
+1 19581 1
+19581 19581 1
+1 19582 1
+19582 19582 1
+1 19583 1
+19583 19583 1
+1 19584 1
+19584 19584 1
+1 19585 1
+19585 19585 1
+1 19586 1
+19586 19586 1
+1 19587 1
+19587 19587 1
+1 19588 1
+19588 19588 1
+1 19589 1
+19589 19589 1
+1 19590 1
+19590 19590 1
+1 19591 1
+19591 19591 1
+1 19592 1
+19592 19592 1
+1 19593 1
+19593 19593 1
+1 19594 1
+19594 19594 1
+1 19595 1
+19595 19595 1
+1 19596 1
+19596 19596 1
+1 19597 1
+19597 19597 1
+1 19598 1
+19598 19598 1
+1 19599 1
+19599 19599 1
+1 19600 1
+19600 19600 1
+1 19601 1
+19601 19601 1
+1 19602 1
+19602 19602 1
+1 19603 1
+19603 19603 1
+1 19604 1
+19604 19604 1
+1 19605 1
+19605 19605 1
+1 19606 1
+19606 19606 1
+1 19607 1
+19607 19607 1
+1 19608 1
+19608 19608 1
+1 19609 1
+19609 19609 1
+1 19610 1
+19610 19610 1
+1 19611 1
+19611 19611 1
+1 19612 1
+19612 19612 1
+1 19613 1
+19613 19613 1
+1 19614 1
+19614 19614 1
+1 19615 1
+19615 19615 1
+1 19616 1
+19616 19616 1
+1 19617 1
+19617 19617 1
+1 19618 1
+19618 19618 1
+1 19619 1
+19619 19619 1
+1 19620 1
+19620 19620 1
+1 19621 1
+19621 19621 1
+1 19622 1
+19622 19622 1
+1 19623 1
+19623 19623 1
+1 19624 1
+19624 19624 1
+1 19625 1
+19625 19625 1
+1 19626 1
+19626 19626 1
+1 19627 1
+19627 19627 1
+1 19628 1
+19628 19628 1
+1 19629 1
+19629 19629 1
+1 19630 1
+19630 19630 1
+1 19631 1
+19631 19631 1
+1 19632 1
+19632 19632 1
+1 19633 1
+19633 19633 1
+1 19634 1
+19634 19634 1
+1 19635 1
+19635 19635 1
+1 19636 1
+19636 19636 1
+1 19637 1
+19637 19637 1
+1 19638 1
+19638 19638 1
+1 19639 1
+19639 19639 1
+1 19640 1
+19640 19640 1
+1 19641 1
+19641 19641 1
+1 19642 1
+19642 19642 1
+1 19643 1
+19643 19643 1
+1 19644 1
+19644 19644 1
+1 19645 1
+19645 19645 1
+1 19646 1
+19646 19646 1
+1 19647 1
+19647 19647 1
+1 19648 1
+19648 19648 1
+1 19649 1
+19649 19649 1
+1 19650 1
+19650 19650 1
+1 19651 1
+19651 19651 1
+1 19652 1
+19652 19652 1
+1 19653 1
+19653 19653 1
+1 19654 1
+19654 19654 1
+1 19655 1
+19655 19655 1
+1 19656 1
+19656 19656 1
+1 19657 1
+19657 19657 1
+1 19658 1
+19658 19658 1
+1 19659 1
+19659 19659 1
+1 19660 1
+19660 19660 1
+1 19661 1
+19661 19661 1
+1 19662 1
+19662 19662 1
+1 19663 1
+19663 19663 1
+1 19664 1
+19664 19664 1
+1 19665 1
+19665 19665 1
+1 19666 1
+19666 19666 1
+1 19667 1
+19667 19667 1
+1 19668 1
+19668 19668 1
+1 19669 1
+19669 19669 1
+1 19670 1
+19670 19670 1
+1 19671 1
+19671 19671 1
+1 19672 1
+19672 19672 1
+1 19673 1
+19673 19673 1
+1 19674 1
+19674 19674 1
+1 19675 1
+19675 19675 1
+1 19676 1
+19676 19676 1
+1 19677 1
+19677 19677 1
+1 19678 1
+19678 19678 1
+1 19679 1
+19679 19679 1
+1 19680 1
+19680 19680 1
+1 19681 1
+19681 19681 1
+1 19682 1
+19682 19682 1
+1 19683 1
+19683 19683 1
+1 19684 1
+19684 19684 1
+1 19685 1
+19685 19685 1
+1 19686 1
+19686 19686 1
+1 19687 1
+19687 19687 1
+1 19688 1
+19688 19688 1
+1 19689 1
+19689 19689 1
+1 19690 1
+19690 19690 1
+1 19691 1
+19691 19691 1
+1 19692 1
+19692 19692 1
+1 19693 1
+19693 19693 1
+1 19694 1
+19694 19694 1
+1 19695 1
+19695 19695 1
+1 19696 1
+19696 19696 1
+1 19697 1
+19697 19697 1
+1 19698 1
+19698 19698 1
+1 19699 1
+19699 19699 1
+1 19700 1
+19700 19700 1
+1 19701 1
+19701 19701 1
+1 19702 1
+19702 19702 1
+1 19703 1
+19703 19703 1
+1 19704 1
+19704 19704 1
+1 19705 1
+19705 19705 1
+1 19706 1
+19706 19706 1
+1 19707 1
+19707 19707 1
+1 19708 1
+19708 19708 1
+1 19709 1
+19709 19709 1
+1 19710 1
+19710 19710 1
+1 19711 1
+19711 19711 1
+1 19712 1
+19712 19712 1
+1 19713 1
+19713 19713 1
+1 19714 1
+19714 19714 1
+1 19715 1
+19715 19715 1
+1 19716 1
+19716 19716 1
+1 19717 1
+19717 19717 1
+1 19718 1
+19718 19718 1
+1 19719 1
+19719 19719 1
+1 19720 1
+19720 19720 1
+1 19721 1
+19721 19721 1
+1 19722 1
+19722 19722 1
+1 19723 1
+19723 19723 1
+1 19724 1
+19724 19724 1
+1 19725 1
+19725 19725 1
+1 19726 1
+19726 19726 1
+1 19727 1
+19727 19727 1
+1 19728 1
+19728 19728 1
+1 19729 1
+19729 19729 1
+1 19730 1
+19730 19730 1
+1 19731 1
+19731 19731 1
+1 19732 1
+19732 19732 1
+1 19733 1
+19733 19733 1
+1 19734 1
+19734 19734 1
+1 19735 1
+19735 19735 1
+1 19736 1
+19736 19736 1
+1 19737 1
+19737 19737 1
+1 19738 1
+19738 19738 1
+1 19739 1
+19739 19739 1
+1 19740 1
+19740 19740 1
+1 19741 1
+19741 19741 1
+1 19742 1
+19742 19742 1
+1 19743 1
+19743 19743 1
+1 19744 1
+19744 19744 1
+1 19745 1
+19745 19745 1
+1 19746 1
+19746 19746 1
+1 19747 1
+19747 19747 1
+1 19748 1
+19748 19748 1
+1 19749 1
+19749 19749 1
+1 19750 1
+19750 19750 1
+1 19751 1
+19751 19751 1
+1 19752 1
+19752 19752 1
+1 19753 1
+19753 19753 1
+1 19754 1
+19754 19754 1
+1 19755 1
+19755 19755 1
+1 19756 1
+19756 19756 1
+1 19757 1
+19757 19757 1
+1 19758 1
+19758 19758 1
+1 19759 1
+19759 19759 1
+1 19760 1
+19760 19760 1
+1 19761 1
+19761 19761 1
+1 19762 1
+19762 19762 1
+1 19763 1
+19763 19763 1
+1 19764 1
+19764 19764 1
+1 19765 1
+19765 19765 1
+1 19766 1
+19766 19766 1
+1 19767 1
+19767 19767 1
+1 19768 1
+19768 19768 1
+1 19769 1
+19769 19769 1
+1 19770 1
+19770 19770 1
+1 19771 1
+19771 19771 1
+1 19772 1
+19772 19772 1
+1 19773 1
+19773 19773 1
+1 19774 1
+19774 19774 1
+1 19775 1
+19775 19775 1
+1 19776 1
+19776 19776 1
+1 19777 1
+19777 19777 1
+1 19778 1
+19778 19778 1
+1 19779 1
+19779 19779 1
+1 19780 1
+19780 19780 1
+1 19781 1
+19781 19781 1
+1 19782 1
+19782 19782 1
+1 19783 1
+19783 19783 1
+1 19784 1
+19784 19784 1
+1 19785 1
+19785 19785 1
+1 19786 1
+19786 19786 1
+1 19787 1
+19787 19787 1
+1 19788 1
+19788 19788 1
+1 19789 1
+19789 19789 1
+1 19790 1
+19790 19790 1
+1 19791 1
+19791 19791 1
+1 19792 1
+19792 19792 1
+1 19793 1
+19793 19793 1
+1 19794 1
+19794 19794 1
+1 19795 1
+19795 19795 1
+1 19796 1
+19796 19796 1
+1 19797 1
+19797 19797 1
+1 19798 1
+19798 19798 1
+1 19799 1
+19799 19799 1
+1 19800 1
+19800 19800 1
+1 19801 1
+19801 19801 1
+1 19802 1
+19802 19802 1
+1 19803 1
+19803 19803 1
+1 19804 1
+19804 19804 1
+1 19805 1
+19805 19805 1
+1 19806 1
+19806 19806 1
+1 19807 1
+19807 19807 1
+1 19808 1
+19808 19808 1
+1 19809 1
+19809 19809 1
+1 19810 1
+19810 19810 1
+1 19811 1
+19811 19811 1
+1 19812 1
+19812 19812 1
+1 19813 1
+19813 19813 1
+1 19814 1
+19814 19814 1
+1 19815 1
+19815 19815 1
+1 19816 1
+19816 19816 1
+1 19817 1
+19817 19817 1
+1 19818 1
+19818 19818 1
+1 19819 1
+19819 19819 1
+1 19820 1
+19820 19820 1
+1 19821 1
+19821 19821 1
+1 19822 1
+19822 19822 1
+1 19823 1
+19823 19823 1
+1 19824 1
+19824 19824 1
+1 19825 1
+19825 19825 1
+1 19826 1
+19826 19826 1
+1 19827 1
+19827 19827 1
+1 19828 1
+19828 19828 1
+1 19829 1
+19829 19829 1
+1 19830 1
+19830 19830 1
+1 19831 1
+19831 19831 1
+1 19832 1
+19832 19832 1
+1 19833 1
+19833 19833 1
+1 19834 1
+19834 19834 1
+1 19835 1
+19835 19835 1
+1 19836 1
+19836 19836 1
+1 19837 1
+19837 19837 1
+1 19838 1
+19838 19838 1
+1 19839 1
+19839 19839 1
+1 19840 1
+19840 19840 1
+1 19841 1
+19841 19841 1
+1 19842 1
+19842 19842 1
+1 19843 1
+19843 19843 1
+1 19844 1
+19844 19844 1
+1 19845 1
+19845 19845 1
+1 19846 1
+19846 19846 1
+1 19847 1
+19847 19847 1
+1 19848 1
+19848 19848 1
+1 19849 1
+19849 19849 1
+1 19850 1
+19850 19850 1
+1 19851 1
+19851 19851 1
+1 19852 1
+19852 19852 1
+1 19853 1
+19853 19853 1
+1 19854 1
+19854 19854 1
+1 19855 1
+19855 19855 1
+1 19856 1
+19856 19856 1
+1 19857 1
+19857 19857 1
+1 19858 1
+19858 19858 1
+1 19859 1
+19859 19859 1
+1 19860 1
+19860 19860 1
+1 19861 1
+19861 19861 1
+1 19862 1
+19862 19862 1
+1 19863 1
+19863 19863 1
+1 19864 1
+19864 19864 1
+1 19865 1
+19865 19865 1
+1 19866 1
+19866 19866 1
+1 19867 1
+19867 19867 1
+1 19868 1
+19868 19868 1
+1 19869 1
+19869 19869 1
+1 19870 1
+19870 19870 1
+1 19871 1
+19871 19871 1
+1 19872 1
+19872 19872 1
+1 19873 1
+19873 19873 1
+1 19874 1
+19874 19874 1
+1 19875 1
+19875 19875 1
+1 19876 1
+19876 19876 1
+1 19877 1
+19877 19877 1
+1 19878 1
+19878 19878 1
+1 19879 1
+19879 19879 1
+1 19880 1
+19880 19880 1
+1 19881 1
+19881 19881 1
+1 19882 1
+19882 19882 1
+1 19883 1
+19883 19883 1
+1 19884 1
+19884 19884 1
+1 19885 1
+19885 19885 1
+1 19886 1
+19886 19886 1
+1 19887 1
+19887 19887 1
+1 19888 1
+19888 19888 1
+1 19889 1
+19889 19889 1
+1 19890 1
+19890 19890 1
+1 19891 1
+19891 19891 1
+1 19892 1
+19892 19892 1
+1 19893 1
+19893 19893 1
+1 19894 1
+19894 19894 1
+1 19895 1
+19895 19895 1
+1 19896 1
+19896 19896 1
+1 19897 1
+19897 19897 1
+1 19898 1
+19898 19898 1
+1 19899 1
+19899 19899 1
+1 19900 1
+19900 19900 1
+1 19901 1
+19901 19901 1
+1 19902 1
+19902 19902 1
+1 19903 1
+19903 19903 1
+1 19904 1
+19904 19904 1
+1 19905 1
+19905 19905 1
+1 19906 1
+19906 19906 1
+1 19907 1
+19907 19907 1
+1 19908 1
+19908 19908 1
+1 19909 1
+19909 19909 1
+1 19910 1
+19910 19910 1
+1 19911 1
+19911 19911 1
+1 19912 1
+19912 19912 1
+1 19913 1
+19913 19913 1
+1 19914 1
+19914 19914 1
+1 19915 1
+19915 19915 1
+1 19916 1
+19916 19916 1
+1 19917 1
+19917 19917 1
+1 19918 1
+19918 19918 1
+1 19919 1
+19919 19919 1
+1 19920 1
+19920 19920 1
+1 19921 1
+19921 19921 1
+1 19922 1
+19922 19922 1
+1 19923 1
+19923 19923 1
+1 19924 1
+19924 19924 1
+1 19925 1
+19925 19925 1
+1 19926 1
+19926 19926 1
+1 19927 1
+19927 19927 1
+1 19928 1
+19928 19928 1
+1 19929 1
+19929 19929 1
+1 19930 1
+19930 19930 1
+1 19931 1
+19931 19931 1
+1 19932 1
+19932 19932 1
+1 19933 1
+19933 19933 1
+1 19934 1
+19934 19934 1
+1 19935 1
+19935 19935 1
+1 19936 1
+19936 19936 1
+1 19937 1
+19937 19937 1
+1 19938 1
+19938 19938 1
+1 19939 1
+19939 19939 1
+1 19940 1
+19940 19940 1
+1 19941 1
+19941 19941 1
+1 19942 1
+19942 19942 1
+1 19943 1
+19943 19943 1
+1 19944 1
+19944 19944 1
+1 19945 1
+19945 19945 1
+1 19946 1
+19946 19946 1
+1 19947 1
+19947 19947 1
+1 19948 1
+19948 19948 1
+1 19949 1
+19949 19949 1
+1 19950 1
+19950 19950 1
+1 19951 1
+19951 19951 1
+1 19952 1
+19952 19952 1
+1 19953 1
+19953 19953 1
+1 19954 1
+19954 19954 1
+1 19955 1
+19955 19955 1
+1 19956 1
+19956 19956 1
+1 19957 1
+19957 19957 1
+1 19958 1
+19958 19958 1
+1 19959 1
+19959 19959 1
+1 19960 1
+19960 19960 1
+1 19961 1
+19961 19961 1
+1 19962 1
+19962 19962 1
+1 19963 1
+19963 19963 1
+1 19964 1
+19964 19964 1
+1 19965 1
+19965 19965 1
+1 19966 1
+19966 19966 1
+1 19967 1
+19967 19967 1
+1 19968 1
+19968 19968 1
+1 19969 1
+19969 19969 1
+1 19970 1
+19970 19970 1
+1 19971 1
+19971 19971 1
+1 19972 1
+19972 19972 1
+1 19973 1
+19973 19973 1
+1 19974 1
+19974 19974 1
+1 19975 1
+19975 19975 1
+1 19976 1
+19976 19976 1
+1 19977 1
+19977 19977 1
+1 19978 1
+19978 19978 1
+1 19979 1
+19979 19979 1
+1 19980 1
+19980 19980 1
+1 19981 1
+19981 19981 1
+1 19982 1
+19982 19982 1
+1 19983 1
+19983 19983 1
+1 19984 1
+19984 19984 1
+1 19985 1
+19985 19985 1
+1 19986 1
+19986 19986 1
+1 19987 1
+19987 19987 1
+1 19988 1
+19988 19988 1
+1 19989 1
+19989 19989 1
+1 19990 1
+19990 19990 1
+1 19991 1
+19991 19991 1
+1 19992 1
+19992 19992 1
+1 19993 1
+19993 19993 1
+1 19994 1
+19994 19994 1
+1 19995 1
+19995 19995 1
+1 19996 1
+19996 19996 1
+1 19997 1
+19997 19997 1
+1 19998 1
+19998 19998 1
+1 19999 1
+19999 19999 1
+1 20000 1
+20000 20000 1
+1 20001 1
+20001 20001 1
+1 20002 1
+20002 20002 1
+1 20003 1
+20003 20003 1
+1 20004 1
+20004 20004 1
+1 20005 1
+20005 20005 1
+1 20006 1
+20006 20006 1
+1 20007 1
+20007 20007 1
+1 20008 1
+20008 20008 1
+1 20009 1
+20009 20009 1
+1 20010 1
+20010 20010 1
+1 20011 1
+20011 20011 1
+1 20012 1
+20012 20012 1
+1 20013 1
+20013 20013 1
+1 20014 1
+20014 20014 1
+1 20015 1
+20015 20015 1
+1 20016 1
+20016 20016 1
+1 20017 1
+20017 20017 1
+1 20018 1
+20018 20018 1
+1 20019 1
+20019 20019 1
+1 20020 1
+20020 20020 1
+1 20021 1
+20021 20021 1
+1 20022 1
+20022 20022 1
+1 20023 1
+20023 20023 1
+1 20024 1
+20024 20024 1
+1 20025 1
+20025 20025 1
+1 20026 1
+20026 20026 1
+1 20027 1
+20027 20027 1
+1 20028 1
+20028 20028 1
+1 20029 1
+20029 20029 1
+1 20030 1
+20030 20030 1
+1 20031 1
+20031 20031 1
+1 20032 1
+20032 20032 1
+1 20033 1
+20033 20033 1
+1 20034 1
+20034 20034 1
+1 20035 1
+20035 20035 1
+1 20036 1
+20036 20036 1
+1 20037 1
+20037 20037 1
+1 20038 1
+20038 20038 1
+1 20039 1
+20039 20039 1
+1 20040 1
+20040 20040 1
+1 20041 1
+20041 20041 1
+1 20042 1
+20042 20042 1
+1 20043 1
+20043 20043 1
+1 20044 1
+20044 20044 1
+1 20045 1
+20045 20045 1
+1 20046 1
+20046 20046 1
+1 20047 1
+20047 20047 1
+1 20048 1
+20048 20048 1
+1 20049 1
+20049 20049 1
+1 20050 1
+20050 20050 1
+1 20051 1
+20051 20051 1
+1 20052 1
+20052 20052 1
+1 20053 1
+20053 20053 1
+1 20054 1
+20054 20054 1
+1 20055 1
+20055 20055 1
+1 20056 1
+20056 20056 1
+1 20057 1
+20057 20057 1
+1 20058 1
+20058 20058 1
+1 20059 1
+20059 20059 1
+1 20060 1
+20060 20060 1
+1 20061 1
+20061 20061 1
+1 20062 1
+20062 20062 1
+1 20063 1
+20063 20063 1
+1 20064 1
+20064 20064 1
+1 20065 1
+20065 20065 1
+1 20066 1
+20066 20066 1
+1 20067 1
+20067 20067 1
+1 20068 1
+20068 20068 1
+1 20069 1
+20069 20069 1
+1 20070 1
+20070 20070 1
+1 20071 1
+20071 20071 1
+1 20072 1
+20072 20072 1
+1 20073 1
+20073 20073 1
+1 20074 1
+20074 20074 1
+1 20075 1
+20075 20075 1
+1 20076 1
+20076 20076 1
+1 20077 1
+20077 20077 1
+1 20078 1
+20078 20078 1
+1 20079 1
+20079 20079 1
+1 20080 1
+20080 20080 1
+1 20081 1
+20081 20081 1
+1 20082 1
+20082 20082 1
+1 20083 1
+20083 20083 1
+1 20084 1
+20084 20084 1
+1 20085 1
+20085 20085 1
+1 20086 1
+20086 20086 1
+1 20087 1
+20087 20087 1
+1 20088 1
+20088 20088 1
+1 20089 1
+20089 20089 1
+1 20090 1
+20090 20090 1
+1 20091 1
+20091 20091 1
+1 20092 1
+20092 20092 1
+1 20093 1
+20093 20093 1
+1 20094 1
+20094 20094 1
+1 20095 1
+20095 20095 1
+1 20096 1
+20096 20096 1
+1 20097 1
+20097 20097 1
+1 20098 1
+20098 20098 1
+1 20099 1
+20099 20099 1
+1 20100 1
+20100 20100 1
+1 20101 1
+20101 20101 1
+1 20102 1
+20102 20102 1
+1 20103 1
+20103 20103 1
+1 20104 1
+20104 20104 1
+1 20105 1
+20105 20105 1
+1 20106 1
+20106 20106 1
+1 20107 1
+20107 20107 1
+1 20108 1
+20108 20108 1
+1 20109 1
+20109 20109 1
+1 20110 1
+20110 20110 1
+1 20111 1
+20111 20111 1
+1 20112 1
+20112 20112 1
+1 20113 1
+20113 20113 1
+1 20114 1
+20114 20114 1
+1 20115 1
+20115 20115 1
+1 20116 1
+20116 20116 1
+1 20117 1
+20117 20117 1
+1 20118 1
+20118 20118 1
+1 20119 1
+20119 20119 1
+1 20120 1
+20120 20120 1
+1 20121 1
+20121 20121 1
+1 20122 1
+20122 20122 1
+1 20123 1
+20123 20123 1
+1 20124 1
+20124 20124 1
+1 20125 1
+20125 20125 1
+1 20126 1
+20126 20126 1
+1 20127 1
+20127 20127 1
+1 20128 1
+20128 20128 1
+1 20129 1
+20129 20129 1
+1 20130 1
+20130 20130 1
+1 20131 1
+20131 20131 1
+1 20132 1
+20132 20132 1
+1 20133 1
+20133 20133 1
+1 20134 1
+20134 20134 1
+1 20135 1
+20135 20135 1
+1 20136 1
+20136 20136 1
+1 20137 1
+20137 20137 1
+1 20138 1
+20138 20138 1
+1 20139 1
+20139 20139 1
+1 20140 1
+20140 20140 1
+1 20141 1
+20141 20141 1
+1 20142 1
+20142 20142 1
+1 20143 1
+20143 20143 1
+1 20144 1
+20144 20144 1
+1 20145 1
+20145 20145 1
+1 20146 1
+20146 20146 1
+1 20147 1
+20147 20147 1
+1 20148 1
+20148 20148 1
+1 20149 1
+20149 20149 1
+1 20150 1
+20150 20150 1
+1 20151 1
+20151 20151 1
+1 20152 1
+20152 20152 1
+1 20153 1
+20153 20153 1
+1 20154 1
+20154 20154 1
+1 20155 1
+20155 20155 1
+1 20156 1
+20156 20156 1
+1 20157 1
+20157 20157 1
+1 20158 1
+20158 20158 1
+1 20159 1
+20159 20159 1
+1 20160 1
+20160 20160 1
+1 20161 1
+20161 20161 1
+1 20162 1
+20162 20162 1
+1 20163 1
+20163 20163 1
+1 20164 1
+20164 20164 1
+1 20165 1
+20165 20165 1
+1 20166 1
+20166 20166 1
+1 20167 1
+20167 20167 1
+1 20168 1
+20168 20168 1
+1 20169 1
+20169 20169 1
+1 20170 1
+20170 20170 1
+1 20171 1
+20171 20171 1
+1 20172 1
+20172 20172 1
+1 20173 1
+20173 20173 1
+1 20174 1
+20174 20174 1
+1 20175 1
+20175 20175 1
+1 20176 1
+20176 20176 1
+1 20177 1
+20177 20177 1
+1 20178 1
+20178 20178 1
+1 20179 1
+20179 20179 1
+1 20180 1
+20180 20180 1
+1 20181 1
+20181 20181 1
+1 20182 1
+20182 20182 1
+1 20183 1
+20183 20183 1
+1 20184 1
+20184 20184 1
+1 20185 1
+20185 20185 1
+1 20186 1
+20186 20186 1
+1 20187 1
+20187 20187 1
+1 20188 1
+20188 20188 1
+1 20189 1
+20189 20189 1
+1 20190 1
+20190 20190 1
+1 20191 1
+20191 20191 1
+1 20192 1
+20192 20192 1
+1 20193 1
+20193 20193 1
+1 20194 1
+20194 20194 1
+1 20195 1
+20195 20195 1
+1 20196 1
+20196 20196 1
+1 20197 1
+20197 20197 1
+1 20198 1
+20198 20198 1
+1 20199 1
+20199 20199 1
+1 20200 1
+20200 20200 1
+1 20201 1
+20201 20201 1
+1 20202 1
+20202 20202 1
+1 20203 1
+20203 20203 1
+1 20204 1
+20204 20204 1
+1 20205 1
+20205 20205 1
+1 20206 1
+20206 20206 1
+1 20207 1
+20207 20207 1
+1 20208 1
+20208 20208 1
+1 20209 1
+20209 20209 1
+1 20210 1
+20210 20210 1
+1 20211 1
+20211 20211 1
+1 20212 1
+20212 20212 1
+1 20213 1
+20213 20213 1
+1 20214 1
+20214 20214 1
+1 20215 1
+20215 20215 1
+1 20216 1
+20216 20216 1
+1 20217 1
+20217 20217 1
+1 20218 1
+20218 20218 1
+1 20219 1
+20219 20219 1
+1 20220 1
+20220 20220 1
+1 20221 1
+20221 20221 1
+1 20222 1
+20222 20222 1
+1 20223 1
+20223 20223 1
+1 20224 1
+20224 20224 1
+1 20225 1
+20225 20225 1
+1 20226 1
+20226 20226 1
+1 20227 1
+20227 20227 1
+1 20228 1
+20228 20228 1
+1 20229 1
+20229 20229 1
+1 20230 1
+20230 20230 1
+1 20231 1
+20231 20231 1
+1 20232 1
+20232 20232 1
+1 20233 1
+20233 20233 1
+1 20234 1
+20234 20234 1
+1 20235 1
+20235 20235 1
+1 20236 1
+20236 20236 1
+1 20237 1
+20237 20237 1
+1 20238 1
+20238 20238 1
+1 20239 1
+20239 20239 1
+1 20240 1
+20240 20240 1
+1 20241 1
+20241 20241 1
+1 20242 1
+20242 20242 1
+1 20243 1
+20243 20243 1
+1 20244 1
+20244 20244 1
+1 20245 1
+20245 20245 1
+1 20246 1
+20246 20246 1
+1 20247 1
+20247 20247 1
+1 20248 1
+20248 20248 1
+1 20249 1
+20249 20249 1
+1 20250 1
+20250 20250 1
+1 20251 1
+20251 20251 1
+1 20252 1
+20252 20252 1
+1 20253 1
+20253 20253 1
+1 20254 1
+20254 20254 1
+1 20255 1
+20255 20255 1
+1 20256 1
+20256 20256 1
+1 20257 1
+20257 20257 1
+1 20258 1
+20258 20258 1
+1 20259 1
+20259 20259 1
+1 20260 1
+20260 20260 1
+1 20261 1
+20261 20261 1
+1 20262 1
+20262 20262 1
+1 20263 1
+20263 20263 1
+1 20264 1
+20264 20264 1
+1 20265 1
+20265 20265 1
+1 20266 1
+20266 20266 1
+1 20267 1
+20267 20267 1
+1 20268 1
+20268 20268 1
+1 20269 1
+20269 20269 1
+1 20270 1
+20270 20270 1
+1 20271 1
+20271 20271 1
+1 20272 1
+20272 20272 1
+1 20273 1
+20273 20273 1
+1 20274 1
+20274 20274 1
+1 20275 1
+20275 20275 1
+1 20276 1
+20276 20276 1
+1 20277 1
+20277 20277 1
+1 20278 1
+20278 20278 1
+1 20279 1
+20279 20279 1
+1 20280 1
+20280 20280 1
+1 20281 1
+20281 20281 1
+1 20282 1
+20282 20282 1
+1 20283 1
+20283 20283 1
+1 20284 1
+20284 20284 1
+1 20285 1
+20285 20285 1
+1 20286 1
+20286 20286 1
+1 20287 1
+20287 20287 1
+1 20288 1
+20288 20288 1
+1 20289 1
+20289 20289 1
+1 20290 1
+20290 20290 1
+1 20291 1
+20291 20291 1
+1 20292 1
+20292 20292 1
+1 20293 1
+20293 20293 1
+1 20294 1
+20294 20294 1
+1 20295 1
+20295 20295 1
+1 20296 1
+20296 20296 1
+1 20297 1
+20297 20297 1
+1 20298 1
+20298 20298 1
+1 20299 1
+20299 20299 1
+1 20300 1
+20300 20300 1
+1 20301 1
+20301 20301 1
+1 20302 1
+20302 20302 1
+1 20303 1
+20303 20303 1
+1 20304 1
+20304 20304 1
+1 20305 1
+20305 20305 1
+1 20306 1
+20306 20306 1
+1 20307 1
+20307 20307 1
+1 20308 1
+20308 20308 1
+1 20309 1
+20309 20309 1
+1 20310 1
+20310 20310 1
+1 20311 1
+20311 20311 1
+1 20312 1
+20312 20312 1
+1 20313 1
+20313 20313 1
+1 20314 1
+20314 20314 1
+1 20315 1
+20315 20315 1
+1 20316 1
+20316 20316 1
+1 20317 1
+20317 20317 1
+1 20318 1
+20318 20318 1
+1 20319 1
+20319 20319 1
+1 20320 1
+20320 20320 1
+1 20321 1
+20321 20321 1
+1 20322 1
+20322 20322 1
+1 20323 1
+20323 20323 1
+1 20324 1
+20324 20324 1
+1 20325 1
+20325 20325 1
+1 20326 1
+20326 20326 1
+1 20327 1
+20327 20327 1
+1 20328 1
+20328 20328 1
+1 20329 1
+20329 20329 1
+1 20330 1
+20330 20330 1
+1 20331 1
+20331 20331 1
+1 20332 1
+20332 20332 1
+1 20333 1
+20333 20333 1
+1 20334 1
+20334 20334 1
+1 20335 1
+20335 20335 1
+1 20336 1
+20336 20336 1
+1 20337 1
+20337 20337 1
+1 20338 1
+20338 20338 1
+1 20339 1
+20339 20339 1
+1 20340 1
+20340 20340 1
+1 20341 1
+20341 20341 1
+1 20342 1
+20342 20342 1
+1 20343 1
+20343 20343 1
+1 20344 1
+20344 20344 1
+1 20345 1
+20345 20345 1
+1 20346 1
+20346 20346 1
+1 20347 1
+20347 20347 1
+1 20348 1
+20348 20348 1
+1 20349 1
+20349 20349 1
+1 20350 1
+20350 20350 1
+1 20351 1
+20351 20351 1
+1 20352 1
+20352 20352 1
+1 20353 1
+20353 20353 1
+1 20354 1
+20354 20354 1
+1 20355 1
+20355 20355 1
+1 20356 1
+20356 20356 1
+1 20357 1
+20357 20357 1
+1 20358 1
+20358 20358 1
+1 20359 1
+20359 20359 1
+1 20360 1
+20360 20360 1
+1 20361 1
+20361 20361 1
+1 20362 1
+20362 20362 1
+1 20363 1
+20363 20363 1
+1 20364 1
+20364 20364 1
+1 20365 1
+20365 20365 1
+1 20366 1
+20366 20366 1
+1 20367 1
+20367 20367 1
+1 20368 1
+20368 20368 1
+1 20369 1
+20369 20369 1
+1 20370 1
+20370 20370 1
+1 20371 1
+20371 20371 1
+1 20372 1
+20372 20372 1
+1 20373 1
+20373 20373 1
+1 20374 1
+20374 20374 1
+1 20375 1
+20375 20375 1
+1 20376 1
+20376 20376 1
+1 20377 1
+20377 20377 1
+1 20378 1
+20378 20378 1
+1 20379 1
+20379 20379 1
+1 20380 1
+20380 20380 1
+1 20381 1
+20381 20381 1
+1 20382 1
+20382 20382 1
+1 20383 1
+20383 20383 1
+1 20384 1
+20384 20384 1
+1 20385 1
+20385 20385 1
+1 20386 1
+20386 20386 1
+1 20387 1
+20387 20387 1
+1 20388 1
+20388 20388 1
+1 20389 1
+20389 20389 1
+1 20390 1
+20390 20390 1
+1 20391 1
+20391 20391 1
+1 20392 1
+20392 20392 1
+1 20393 1
+20393 20393 1
+1 20394 1
+20394 20394 1
+1 20395 1
+20395 20395 1
+1 20396 1
+20396 20396 1
+1 20397 1
+20397 20397 1
+1 20398 1
+20398 20398 1
+1 20399 1
+20399 20399 1
+1 20400 1
+20400 20400 1
+1 20401 1
+20401 20401 1
+1 20402 1
+20402 20402 1
+1 20403 1
+20403 20403 1
+1 20404 1
+20404 20404 1
+1 20405 1
+20405 20405 1
+1 20406 1
+20406 20406 1
+1 20407 1
+20407 20407 1
+1 20408 1
+20408 20408 1
+1 20409 1
+20409 20409 1
+1 20410 1
+20410 20410 1
+1 20411 1
+20411 20411 1
+1 20412 1
+20412 20412 1
+1 20413 1
+20413 20413 1
+1 20414 1
+20414 20414 1
+1 20415 1
+20415 20415 1
+1 20416 1
+20416 20416 1
+1 20417 1
+20417 20417 1
+1 20418 1
+20418 20418 1
+1 20419 1
+20419 20419 1
+1 20420 1
+20420 20420 1
+1 20421 1
+20421 20421 1
+1 20422 1
+20422 20422 1
+1 20423 1
+20423 20423 1
+1 20424 1
+20424 20424 1
+1 20425 1
+20425 20425 1
+1 20426 1
+20426 20426 1
+1 20427 1
+20427 20427 1
+1 20428 1
+20428 20428 1
+1 20429 1
+20429 20429 1
+1 20430 1
+20430 20430 1
+1 20431 1
+20431 20431 1
+1 20432 1
+20432 20432 1
+1 20433 1
+20433 20433 1
+1 20434 1
+20434 20434 1
+1 20435 1
+20435 20435 1
+1 20436 1
+20436 20436 1
+1 20437 1
+20437 20437 1
+1 20438 1
+20438 20438 1
+1 20439 1
+20439 20439 1
+1 20440 1
+20440 20440 1
+1 20441 1
+20441 20441 1
+1 20442 1
+20442 20442 1
+1 20443 1
+20443 20443 1
+1 20444 1
+20444 20444 1
+1 20445 1
+20445 20445 1
+1 20446 1
+20446 20446 1
+1 20447 1
+20447 20447 1
+1 20448 1
+20448 20448 1
+1 20449 1
+20449 20449 1
+1 20450 1
+20450 20450 1
+1 20451 1
+20451 20451 1
+1 20452 1
+20452 20452 1
+1 20453 1
+20453 20453 1
+1 20454 1
+20454 20454 1
+1 20455 1
+20455 20455 1
+1 20456 1
+20456 20456 1
+1 20457 1
+20457 20457 1
+1 20458 1
+20458 20458 1
+1 20459 1
+20459 20459 1
+1 20460 1
+20460 20460 1
+1 20461 1
+20461 20461 1
+1 20462 1
+20462 20462 1
+1 20463 1
+20463 20463 1
+1 20464 1
+20464 20464 1
+1 20465 1
+20465 20465 1
+1 20466 1
+20466 20466 1
+1 20467 1
+20467 20467 1
+1 20468 1
+20468 20468 1
+1 20469 1
+20469 20469 1
+1 20470 1
+20470 20470 1
+1 20471 1
+20471 20471 1
+1 20472 1
+20472 20472 1
+1 20473 1
+20473 20473 1
+1 20474 1
+20474 20474 1
+1 20475 1
+20475 20475 1
+1 20476 1
+20476 20476 1
+1 20477 1
+20477 20477 1
+1 20478 1
+20478 20478 1
+1 20479 1
+20479 20479 1
+1 20480 1
+20480 20480 1
+1 20481 1
+20481 20481 1
+1 20482 1
+20482 20482 1
+1 20483 1
+20483 20483 1
+1 20484 1
+20484 20484 1
+1 20485 1
+20485 20485 1
+1 20486 1
+20486 20486 1
+1 20487 1
+20487 20487 1
+1 20488 1
+20488 20488 1
+1 20489 1
+20489 20489 1
+1 20490 1
+20490 20490 1
+1 20491 1
+20491 20491 1
+1 20492 1
+20492 20492 1
+1 20493 1
+20493 20493 1
+1 20494 1
+20494 20494 1
+1 20495 1
+20495 20495 1
+1 20496 1
+20496 20496 1
+1 20497 1
+20497 20497 1
+1 20498 1
+20498 20498 1
+1 20499 1
+20499 20499 1
+1 20500 1
+20500 20500 1
+1 20501 1
+20501 20501 1
+1 20502 1
+20502 20502 1
+1 20503 1
+20503 20503 1
+1 20504 1
+20504 20504 1
+1 20505 1
+20505 20505 1
+1 20506 1
+20506 20506 1
+1 20507 1
+20507 20507 1
+1 20508 1
+20508 20508 1
+1 20509 1
+20509 20509 1
+1 20510 1
+20510 20510 1
+1 20511 1
+20511 20511 1
+1 20512 1
+20512 20512 1
+1 20513 1
+20513 20513 1
+1 20514 1
+20514 20514 1
+1 20515 1
+20515 20515 1
+1 20516 1
+20516 20516 1
+1 20517 1
+20517 20517 1
+1 20518 1
+20518 20518 1
+1 20519 1
+20519 20519 1
+1 20520 1
+20520 20520 1
+1 20521 1
+20521 20521 1
+1 20522 1
+20522 20522 1
+1 20523 1
+20523 20523 1
+1 20524 1
+20524 20524 1
+1 20525 1
+20525 20525 1
+1 20526 1
+20526 20526 1
+1 20527 1
+20527 20527 1
+1 20528 1
+20528 20528 1
+1 20529 1
+20529 20529 1
+1 20530 1
+20530 20530 1
+1 20531 1
+20531 20531 1
+1 20532 1
+20532 20532 1
+1 20533 1
+20533 20533 1
+1 20534 1
+20534 20534 1
+1 20535 1
+20535 20535 1
+1 20536 1
+20536 20536 1
+1 20537 1
+20537 20537 1
+1 20538 1
+20538 20538 1
+1 20539 1
+20539 20539 1
+1 20540 1
+20540 20540 1
+1 20541 1
+20541 20541 1
+1 20542 1
+20542 20542 1
+1 20543 1
+20543 20543 1
+1 20544 1
+20544 20544 1
+1 20545 1
+20545 20545 1
+1 20546 1
+20546 20546 1
+1 20547 1
+20547 20547 1
+1 20548 1
+20548 20548 1
+1 20549 1
+20549 20549 1
+1 20550 1
+20550 20550 1
+1 20551 1
+20551 20551 1
+1 20552 1
+20552 20552 1
+1 20553 1
+20553 20553 1
+1 20554 1
+20554 20554 1
+1 20555 1
+20555 20555 1
+1 20556 1
+20556 20556 1
+1 20557 1
+20557 20557 1
+1 20558 1
+20558 20558 1
+1 20559 1
+20559 20559 1
+1 20560 1
+20560 20560 1
+1 20561 1
+20561 20561 1
+1 20562 1
+20562 20562 1
+1 20563 1
+20563 20563 1
+1 20564 1
+20564 20564 1
+1 20565 1
+20565 20565 1
+1 20566 1
+20566 20566 1
+1 20567 1
+20567 20567 1
+1 20568 1
+20568 20568 1
+1 20569 1
+20569 20569 1
+1 20570 1
+20570 20570 1
+1 20571 1
+20571 20571 1
+1 20572 1
+20572 20572 1
+1 20573 1
+20573 20573 1
+1 20574 1
+20574 20574 1
+1 20575 1
+20575 20575 1
+1 20576 1
+20576 20576 1
+1 20577 1
+20577 20577 1
+1 20578 1
+20578 20578 1
+1 20579 1
+20579 20579 1
+1 20580 1
+20580 20580 1
+1 20581 1
+20581 20581 1
+1 20582 1
+20582 20582 1
+1 20583 1
+20583 20583 1
+1 20584 1
+20584 20584 1
+1 20585 1
+20585 20585 1
+1 20586 1
+20586 20586 1
+1 20587 1
+20587 20587 1
+1 20588 1
+20588 20588 1
+1 20589 1
+20589 20589 1
+1 20590 1
+20590 20590 1
+1 20591 1
+20591 20591 1
+1 20592 1
+20592 20592 1
+1 20593 1
+20593 20593 1
+1 20594 1
+20594 20594 1
+1 20595 1
+20595 20595 1
+1 20596 1
+20596 20596 1
+1 20597 1
+20597 20597 1
+1 20598 1
+20598 20598 1
+1 20599 1
+20599 20599 1
+1 20600 1
+20600 20600 1
+1 20601 1
+20601 20601 1
+1 20602 1
+20602 20602 1
+1 20603 1
+20603 20603 1
+1 20604 1
+20604 20604 1
+1 20605 1
+20605 20605 1
+1 20606 1
+20606 20606 1
+1 20607 1
+20607 20607 1
+1 20608 1
+20608 20608 1
+1 20609 1
+20609 20609 1
+1 20610 1
+20610 20610 1
+1 20611 1
+20611 20611 1
+1 20612 1
+20612 20612 1
+1 20613 1
+20613 20613 1
+1 20614 1
+20614 20614 1
+1 20615 1
+20615 20615 1
+1 20616 1
+20616 20616 1
+1 20617 1
+20617 20617 1
+1 20618 1
+20618 20618 1
+1 20619 1
+20619 20619 1
+1 20620 1
+20620 20620 1
+1 20621 1
+20621 20621 1
+1 20622 1
+20622 20622 1
+1 20623 1
+20623 20623 1
+1 20624 1
+20624 20624 1
+1 20625 1
+20625 20625 1
+1 20626 1
+20626 20626 1
+1 20627 1
+20627 20627 1
+1 20628 1
+20628 20628 1
+1 20629 1
+20629 20629 1
+1 20630 1
+20630 20630 1
+1 20631 1
+20631 20631 1
+1 20632 1
+20632 20632 1
+1 20633 1
+20633 20633 1
+1 20634 1
+20634 20634 1
+1 20635 1
+20635 20635 1
+1 20636 1
+20636 20636 1
+1 20637 1
+20637 20637 1
+1 20638 1
+20638 20638 1
+1 20639 1
+20639 20639 1
+1 20640 1
+20640 20640 1
+1 20641 1
+20641 20641 1
+1 20642 1
+20642 20642 1
+1 20643 1
+20643 20643 1
+1 20644 1
+20644 20644 1
+1 20645 1
+20645 20645 1
+1 20646 1
+20646 20646 1
+1 20647 1
+20647 20647 1
+1 20648 1
+20648 20648 1
+1 20649 1
+20649 20649 1
+1 20650 1
+20650 20650 1
+1 20651 1
+20651 20651 1
+1 20652 1
+20652 20652 1
+1 20653 1
+20653 20653 1
+1 20654 1
+20654 20654 1
+1 20655 1
+20655 20655 1
+1 20656 1
+20656 20656 1
+1 20657 1
+20657 20657 1
+1 20658 1
+20658 20658 1
+1 20659 1
+20659 20659 1
+1 20660 1
+20660 20660 1
+1 20661 1
+20661 20661 1
+1 20662 1
+20662 20662 1
+1 20663 1
+20663 20663 1
+1 20664 1
+20664 20664 1
+1 20665 1
+20665 20665 1
+1 20666 1
+20666 20666 1
+1 20667 1
+20667 20667 1
+1 20668 1
+20668 20668 1
+1 20669 1
+20669 20669 1
+1 20670 1
+20670 20670 1
+1 20671 1
+20671 20671 1
+1 20672 1
+20672 20672 1
+1 20673 1
+20673 20673 1
+1 20674 1
+20674 20674 1
+1 20675 1
+20675 20675 1
+1 20676 1
+20676 20676 1
+1 20677 1
+20677 20677 1
+1 20678 1
+20678 20678 1
+1 20679 1
+20679 20679 1
+1 20680 1
+20680 20680 1
+1 20681 1
+20681 20681 1
+1 20682 1
+20682 20682 1
+1 20683 1
+20683 20683 1
+1 20684 1
+20684 20684 1
+1 20685 1
+20685 20685 1
+1 20686 1
+20686 20686 1
+1 20687 1
+20687 20687 1
+1 20688 1
+20688 20688 1
+1 20689 1
+20689 20689 1
+1 20690 1
+20690 20690 1
+1 20691 1
+20691 20691 1
+1 20692 1
+20692 20692 1
+1 20693 1
+20693 20693 1
+1 20694 1
+20694 20694 1
+1 20695 1
+20695 20695 1
+1 20696 1
+20696 20696 1
+1 20697 1
+20697 20697 1
+1 20698 1
+20698 20698 1
+1 20699 1
+20699 20699 1
+1 20700 1
+20700 20700 1
+1 20701 1
+20701 20701 1
+1 20702 1
+20702 20702 1
+1 20703 1
+20703 20703 1
+1 20704 1
+20704 20704 1
+1 20705 1
+20705 20705 1
+1 20706 1
+20706 20706 1
+1 20707 1
+20707 20707 1
+1 20708 1
+20708 20708 1
+1 20709 1
+20709 20709 1
+1 20710 1
+20710 20710 1
+1 20711 1
+20711 20711 1
+1 20712 1
+20712 20712 1
+1 20713 1
+20713 20713 1
+1 20714 1
+20714 20714 1
+1 20715 1
+20715 20715 1
+1 20716 1
+20716 20716 1
+1 20717 1
+20717 20717 1
+1 20718 1
+20718 20718 1
+1 20719 1
+20719 20719 1
+1 20720 1
+20720 20720 1
+1 20721 1
+20721 20721 1
+1 20722 1
+20722 20722 1
+1 20723 1
+20723 20723 1
+1 20724 1
+20724 20724 1
+1 20725 1
+20725 20725 1
+1 20726 1
+20726 20726 1
+1 20727 1
+20727 20727 1
+1 20728 1
+20728 20728 1
+1 20729 1
+20729 20729 1
+1 20730 1
+20730 20730 1
+1 20731 1
+20731 20731 1
+1 20732 1
+20732 20732 1
+1 20733 1
+20733 20733 1
+1 20734 1
+20734 20734 1
+1 20735 1
+20735 20735 1
+1 20736 1
+20736 20736 1
+1 20737 1
+20737 20737 1
+1 20738 1
+20738 20738 1
+1 20739 1
+20739 20739 1
+1 20740 1
+20740 20740 1
+1 20741 1
+20741 20741 1
+1 20742 1
+20742 20742 1
+1 20743 1
+20743 20743 1
+1 20744 1
+20744 20744 1
+1 20745 1
+20745 20745 1
+1 20746 1
+20746 20746 1
+1 20747 1
+20747 20747 1
+1 20748 1
+20748 20748 1
+1 20749 1
+20749 20749 1
+1 20750 1
+20750 20750 1
+1 20751 1
+20751 20751 1
+1 20752 1
+20752 20752 1
+1 20753 1
+20753 20753 1
+1 20754 1
+20754 20754 1
+1 20755 1
+20755 20755 1
+1 20756 1
+20756 20756 1
+1 20757 1
+20757 20757 1
+1 20758 1
+20758 20758 1
+1 20759 1
+20759 20759 1
+1 20760 1
+20760 20760 1
+1 20761 1
+20761 20761 1
+1 20762 1
+20762 20762 1
+1 20763 1
+20763 20763 1
+1 20764 1
+20764 20764 1
+1 20765 1
+20765 20765 1
+1 20766 1
+20766 20766 1
+1 20767 1
+20767 20767 1
+1 20768 1
+20768 20768 1
+1 20769 1
+20769 20769 1
+1 20770 1
+20770 20770 1
+1 20771 1
+20771 20771 1
+1 20772 1
+20772 20772 1
+1 20773 1
+20773 20773 1
+1 20774 1
+20774 20774 1
+1 20775 1
+20775 20775 1
+1 20776 1
+20776 20776 1
+1 20777 1
+20777 20777 1
+1 20778 1
+20778 20778 1
+1 20779 1
+20779 20779 1
+1 20780 1
+20780 20780 1
+1 20781 1
+20781 20781 1
+1 20782 1
+20782 20782 1
+1 20783 1
+20783 20783 1
+1 20784 1
+20784 20784 1
+1 20785 1
+20785 20785 1
+1 20786 1
+20786 20786 1
+1 20787 1
+20787 20787 1
+1 20788 1
+20788 20788 1
+1 20789 1
+20789 20789 1
+1 20790 1
+20790 20790 1
+1 20791 1
+20791 20791 1
+1 20792 1
+20792 20792 1
+1 20793 1
+20793 20793 1
+1 20794 1
+20794 20794 1
+1 20795 1
+20795 20795 1
+1 20796 1
+20796 20796 1
+1 20797 1
+20797 20797 1
+1 20798 1
+20798 20798 1
+1 20799 1
+20799 20799 1
+1 20800 1
+20800 20800 1
+1 20801 1
+20801 20801 1
+1 20802 1
+20802 20802 1
+1 20803 1
+20803 20803 1
+1 20804 1
+20804 20804 1
+1 20805 1
+20805 20805 1
+1 20806 1
+20806 20806 1
+1 20807 1
+20807 20807 1
+1 20808 1
+20808 20808 1
+1 20809 1
+20809 20809 1
+1 20810 1
+20810 20810 1
+1 20811 1
+20811 20811 1
+1 20812 1
+20812 20812 1
+1 20813 1
+20813 20813 1
+1 20814 1
+20814 20814 1
+1 20815 1
+20815 20815 1
+1 20816 1
+20816 20816 1
+1 20817 1
+20817 20817 1
+1 20818 1
+20818 20818 1
+1 20819 1
+20819 20819 1
+1 20820 1
+20820 20820 1
+1 20821 1
+20821 20821 1
+1 20822 1
+20822 20822 1
+1 20823 1
+20823 20823 1
+1 20824 1
+20824 20824 1
+1 20825 1
+20825 20825 1
+1 20826 1
+20826 20826 1
+1 20827 1
+20827 20827 1
+1 20828 1
+20828 20828 1
+1 20829 1
+20829 20829 1
+1 20830 1
+20830 20830 1
+1 20831 1
+20831 20831 1
+1 20832 1
+20832 20832 1
+1 20833 1
+20833 20833 1
+1 20834 1
+20834 20834 1
+1 20835 1
+20835 20835 1
+1 20836 1
+20836 20836 1
+1 20837 1
+20837 20837 1
+1 20838 1
+20838 20838 1
+1 20839 1
+20839 20839 1
+1 20840 1
+20840 20840 1
+1 20841 1
+20841 20841 1
+1 20842 1
+20842 20842 1
+1 20843 1
+20843 20843 1
+1 20844 1
+20844 20844 1
+1 20845 1
+20845 20845 1
+1 20846 1
+20846 20846 1
+1 20847 1
+20847 20847 1
+1 20848 1
+20848 20848 1
+1 20849 1
+20849 20849 1
+1 20850 1
+20850 20850 1
+1 20851 1
+20851 20851 1
+1 20852 1
+20852 20852 1
+1 20853 1
+20853 20853 1
+1 20854 1
+20854 20854 1
+1 20855 1
+20855 20855 1
+1 20856 1
+20856 20856 1
+1 20857 1
+20857 20857 1
+1 20858 1
+20858 20858 1
+1 20859 1
+20859 20859 1
+1 20860 1
+20860 20860 1
+1 20861 1
+20861 20861 1
+1 20862 1
+20862 20862 1
+1 20863 1
+20863 20863 1
+1 20864 1
+20864 20864 1
+1 20865 1
+20865 20865 1
+1 20866 1
+20866 20866 1
+1 20867 1
+20867 20867 1
+1 20868 1
+20868 20868 1
+1 20869 1
+20869 20869 1
+1 20870 1
+20870 20870 1
+1 20871 1
+20871 20871 1
+1 20872 1
+20872 20872 1
+1 20873 1
+20873 20873 1
+1 20874 1
+20874 20874 1
+1 20875 1
+20875 20875 1
+1 20876 1
+20876 20876 1
+1 20877 1
+20877 20877 1
+1 20878 1
+20878 20878 1
+1 20879 1
+20879 20879 1
+1 20880 1
+20880 20880 1
+1 20881 1
+20881 20881 1
+1 20882 1
+20882 20882 1
+1 20883 1
+20883 20883 1
+1 20884 1
+20884 20884 1
+1 20885 1
+20885 20885 1
+1 20886 1
+20886 20886 1
+1 20887 1
+20887 20887 1
+1 20888 1
+20888 20888 1
+1 20889 1
+20889 20889 1
+1 20890 1
+20890 20890 1
+1 20891 1
+20891 20891 1
+1 20892 1
+20892 20892 1
+1 20893 1
+20893 20893 1
+1 20894 1
+20894 20894 1
+1 20895 1
+20895 20895 1
+1 20896 1
+20896 20896 1
+1 20897 1
+20897 20897 1
+1 20898 1
+20898 20898 1
+1 20899 1
+20899 20899 1
+1 20900 1
+20900 20900 1
+1 20901 1
+20901 20901 1
+1 20902 1
+20902 20902 1
+1 20903 1
+20903 20903 1
+1 20904 1
+20904 20904 1
+1 20905 1
+20905 20905 1
+1 20906 1
+20906 20906 1
+1 20907 1
+20907 20907 1
+1 20908 1
+20908 20908 1
+1 20909 1
+20909 20909 1
+1 20910 1
+20910 20910 1
+1 20911 1
+20911 20911 1
+1 20912 1
+20912 20912 1
+1 20913 1
+20913 20913 1
+1 20914 1
+20914 20914 1
+1 20915 1
+20915 20915 1
+1 20916 1
+20916 20916 1
+1 20917 1
+20917 20917 1
+1 20918 1
+20918 20918 1
+1 20919 1
+20919 20919 1
+1 20920 1
+20920 20920 1
+1 20921 1
+20921 20921 1
+1 20922 1
+20922 20922 1
+1 20923 1
+20923 20923 1
+1 20924 1
+20924 20924 1
+1 20925 1
+20925 20925 1
+1 20926 1
+20926 20926 1
+1 20927 1
+20927 20927 1
+1 20928 1
+20928 20928 1
+1 20929 1
+20929 20929 1
+1 20930 1
+20930 20930 1
+1 20931 1
+20931 20931 1
+1 20932 1
+20932 20932 1
+1 20933 1
+20933 20933 1
+1 20934 1
+20934 20934 1
+1 20935 1
+20935 20935 1
+1 20936 1
+20936 20936 1
+1 20937 1
+20937 20937 1
+1 20938 1
+20938 20938 1
+1 20939 1
+20939 20939 1
+1 20940 1
+20940 20940 1
+1 20941 1
+20941 20941 1
+1 20942 1
+20942 20942 1
+1 20943 1
+20943 20943 1
+1 20944 1
+20944 20944 1
+1 20945 1
+20945 20945 1
+1 20946 1
+20946 20946 1
+1 20947 1
+20947 20947 1
+1 20948 1
+20948 20948 1
+1 20949 1
+20949 20949 1
+1 20950 1
+20950 20950 1
+1 20951 1
+20951 20951 1
+1 20952 1
+20952 20952 1
+1 20953 1
+20953 20953 1
+1 20954 1
+20954 20954 1
+1 20955 1
+20955 20955 1
+1 20956 1
+20956 20956 1
+1 20957 1
+20957 20957 1
+1 20958 1
+20958 20958 1
+1 20959 1
+20959 20959 1
+1 20960 1
+20960 20960 1
+1 20961 1
+20961 20961 1
+1 20962 1
+20962 20962 1
+1 20963 1
+20963 20963 1
+1 20964 1
+20964 20964 1
+1 20965 1
+20965 20965 1
+1 20966 1
+20966 20966 1
+1 20967 1
+20967 20967 1
+1 20968 1
+20968 20968 1
+1 20969 1
+20969 20969 1
+1 20970 1
+20970 20970 1
+1 20971 1
+20971 20971 1
+1 20972 1
+20972 20972 1
+1 20973 1
+20973 20973 1
+1 20974 1
+20974 20974 1
+1 20975 1
+20975 20975 1
+1 20976 1
+20976 20976 1
+1 20977 1
+20977 20977 1
+1 20978 1
+20978 20978 1
+1 20979 1
+20979 20979 1
+1 20980 1
+20980 20980 1
+1 20981 1
+20981 20981 1
+1 20982 1
+20982 20982 1
+1 20983 1
+20983 20983 1
+1 20984 1
+20984 20984 1
+1 20985 1
+20985 20985 1
+1 20986 1
+20986 20986 1
+1 20987 1
+20987 20987 1
+1 20988 1
+20988 20988 1
+1 20989 1
+20989 20989 1
+1 20990 1
+20990 20990 1
+1 20991 1
+20991 20991 1
+1 20992 1
+20992 20992 1
+1 20993 1
+20993 20993 1
+1 20994 1
+20994 20994 1
+1 20995 1
+20995 20995 1
+1 20996 1
+20996 20996 1
+1 20997 1
+20997 20997 1
+1 20998 1
+20998 20998 1
+1 20999 1
+20999 20999 1
+1 21000 1
+21000 21000 1
+1 21001 1
+21001 21001 1
+1 21002 1
+21002 21002 1
+1 21003 1
+21003 21003 1
+1 21004 1
+21004 21004 1
+1 21005 1
+21005 21005 1
+1 21006 1
+21006 21006 1
+1 21007 1
+21007 21007 1
+1 21008 1
+21008 21008 1
+1 21009 1
+21009 21009 1
+1 21010 1
+21010 21010 1
+1 21011 1
+21011 21011 1
+1 21012 1
+21012 21012 1
+1 21013 1
+21013 21013 1
+1 21014 1
+21014 21014 1
+1 21015 1
+21015 21015 1
+1 21016 1
+21016 21016 1
+1 21017 1
+21017 21017 1
+1 21018 1
+21018 21018 1
+1 21019 1
+21019 21019 1
+1 21020 1
+21020 21020 1
+1 21021 1
+21021 21021 1
+1 21022 1
+21022 21022 1
+1 21023 1
+21023 21023 1
+1 21024 1
+21024 21024 1
+1 21025 1
+21025 21025 1
+1 21026 1
+21026 21026 1
+1 21027 1
+21027 21027 1
+1 21028 1
+21028 21028 1
+1 21029 1
+21029 21029 1
+1 21030 1
+21030 21030 1
+1 21031 1
+21031 21031 1
+1 21032 1
+21032 21032 1
+1 21033 1
+21033 21033 1
+1 21034 1
+21034 21034 1
+1 21035 1
+21035 21035 1
+1 21036 1
+21036 21036 1
+1 21037 1
+21037 21037 1
+1 21038 1
+21038 21038 1
+1 21039 1
+21039 21039 1
+1 21040 1
+21040 21040 1
+1 21041 1
+21041 21041 1
+1 21042 1
+21042 21042 1
+1 21043 1
+21043 21043 1
+1 21044 1
+21044 21044 1
+1 21045 1
+21045 21045 1
+1 21046 1
+21046 21046 1
+1 21047 1
+21047 21047 1
+1 21048 1
+21048 21048 1
+1 21049 1
+21049 21049 1
+1 21050 1
+21050 21050 1
+1 21051 1
+21051 21051 1
+1 21052 1
+21052 21052 1
+1 21053 1
+21053 21053 1
+1 21054 1
+21054 21054 1
+1 21055 1
+21055 21055 1
+1 21056 1
+21056 21056 1
+1 21057 1
+21057 21057 1
+1 21058 1
+21058 21058 1
+1 21059 1
+21059 21059 1
+1 21060 1
+21060 21060 1
+1 21061 1
+21061 21061 1
+1 21062 1
+21062 21062 1
+1 21063 1
+21063 21063 1
+1 21064 1
+21064 21064 1
+1 21065 1
+21065 21065 1
+1 21066 1
+21066 21066 1
+1 21067 1
+21067 21067 1
+1 21068 1
+21068 21068 1
+1 21069 1
+21069 21069 1
+1 21070 1
+21070 21070 1
+1 21071 1
+21071 21071 1
+1 21072 1
+21072 21072 1
+1 21073 1
+21073 21073 1
+1 21074 1
+21074 21074 1
+1 21075 1
+21075 21075 1
+1 21076 1
+21076 21076 1
+1 21077 1
+21077 21077 1
+1 21078 1
+21078 21078 1
+1 21079 1
+21079 21079 1
+1 21080 1
+21080 21080 1
+1 21081 1
+21081 21081 1
+1 21082 1
+21082 21082 1
+1 21083 1
+21083 21083 1
+1 21084 1
+21084 21084 1
+1 21085 1
+21085 21085 1
+1 21086 1
+21086 21086 1
+1 21087 1
+21087 21087 1
+1 21088 1
+21088 21088 1
+1 21089 1
+21089 21089 1
+1 21090 1
+21090 21090 1
+1 21091 1
+21091 21091 1
+1 21092 1
+21092 21092 1
+1 21093 1
+21093 21093 1
+1 21094 1
+21094 21094 1
+1 21095 1
+21095 21095 1
+1 21096 1
+21096 21096 1
+1 21097 1
+21097 21097 1
+1 21098 1
+21098 21098 1
+1 21099 1
+21099 21099 1
+1 21100 1
+21100 21100 1
+1 21101 1
+21101 21101 1
+1 21102 1
+21102 21102 1
+1 21103 1
+21103 21103 1
+1 21104 1
+21104 21104 1
+1 21105 1
+21105 21105 1
+1 21106 1
+21106 21106 1
+1 21107 1
+21107 21107 1
+1 21108 1
+21108 21108 1
+1 21109 1
+21109 21109 1
+1 21110 1
+21110 21110 1
+1 21111 1
+21111 21111 1
+1 21112 1
+21112 21112 1
+1 21113 1
+21113 21113 1
+1 21114 1
+21114 21114 1
+1 21115 1
+21115 21115 1
+1 21116 1
+21116 21116 1
+1 21117 1
+21117 21117 1
+1 21118 1
+21118 21118 1
+1 21119 1
+21119 21119 1
+1 21120 1
+21120 21120 1
+1 21121 1
+21121 21121 1
+1 21122 1
+21122 21122 1
+1 21123 1
+21123 21123 1
+1 21124 1
+21124 21124 1
+1 21125 1
+21125 21125 1
+1 21126 1
+21126 21126 1
+1 21127 1
+21127 21127 1
+1 21128 1
+21128 21128 1
+1 21129 1
+21129 21129 1
+1 21130 1
+21130 21130 1
+1 21131 1
+21131 21131 1
+1 21132 1
+21132 21132 1
+1 21133 1
+21133 21133 1
+1 21134 1
+21134 21134 1
+1 21135 1
+21135 21135 1
+1 21136 1
+21136 21136 1
+1 21137 1
+21137 21137 1
+1 21138 1
+21138 21138 1
+1 21139 1
+21139 21139 1
+1 21140 1
+21140 21140 1
+1 21141 1
+21141 21141 1
+1 21142 1
+21142 21142 1
+1 21143 1
+21143 21143 1
+1 21144 1
+21144 21144 1
+1 21145 1
+21145 21145 1
+1 21146 1
+21146 21146 1
+1 21147 1
+21147 21147 1
+1 21148 1
+21148 21148 1
+1 21149 1
+21149 21149 1
+1 21150 1
+21150 21150 1
+1 21151 1
+21151 21151 1
+1 21152 1
+21152 21152 1
+1 21153 1
+21153 21153 1
+1 21154 1
+21154 21154 1
+1 21155 1
+21155 21155 1
+1 21156 1
+21156 21156 1
+1 21157 1
+21157 21157 1
+1 21158 1
+21158 21158 1
+1 21159 1
+21159 21159 1
+1 21160 1
+21160 21160 1
+1 21161 1
+21161 21161 1
+1 21162 1
+21162 21162 1
+1 21163 1
+21163 21163 1
+1 21164 1
+21164 21164 1
+1 21165 1
+21165 21165 1
+1 21166 1
+21166 21166 1
+1 21167 1
+21167 21167 1
+1 21168 1
+21168 21168 1
+1 21169 1
+21169 21169 1
+1 21170 1
+21170 21170 1
+1 21171 1
+21171 21171 1
+1 21172 1
+21172 21172 1
+1 21173 1
+21173 21173 1
+1 21174 1
+21174 21174 1
+1 21175 1
+21175 21175 1
+1 21176 1
+21176 21176 1
+1 21177 1
+21177 21177 1
+1 21178 1
+21178 21178 1
+1 21179 1
+21179 21179 1
+1 21180 1
+21180 21180 1
+1 21181 1
+21181 21181 1
+1 21182 1
+21182 21182 1
+1 21183 1
+21183 21183 1
+1 21184 1
+21184 21184 1
+1 21185 1
+21185 21185 1
+1 21186 1
+21186 21186 1
+1 21187 1
+21187 21187 1
+1 21188 1
+21188 21188 1
+1 21189 1
+21189 21189 1
+1 21190 1
+21190 21190 1
+1 21191 1
+21191 21191 1
+1 21192 1
+21192 21192 1
+1 21193 1
+21193 21193 1
+1 21194 1
+21194 21194 1
+1 21195 1
+21195 21195 1
+1 21196 1
+21196 21196 1
+1 21197 1
+21197 21197 1
+1 21198 1
+21198 21198 1
+1 21199 1
+21199 21199 1
+1 21200 1
+21200 21200 1
+1 21201 1
+21201 21201 1
+1 21202 1
+21202 21202 1
+1 21203 1
+21203 21203 1
+1 21204 1
+21204 21204 1
+1 21205 1
+21205 21205 1
+1 21206 1
+21206 21206 1
+1 21207 1
+21207 21207 1
+1 21208 1
+21208 21208 1
+1 21209 1
+21209 21209 1
+1 21210 1
+21210 21210 1
+1 21211 1
+21211 21211 1
+1 21212 1
+21212 21212 1
+1 21213 1
+21213 21213 1
+1 21214 1
+21214 21214 1
+1 21215 1
+21215 21215 1
+1 21216 1
+21216 21216 1
+1 21217 1
+21217 21217 1
+1 21218 1
+21218 21218 1
+1 21219 1
+21219 21219 1
+1 21220 1
+21220 21220 1
+1 21221 1
+21221 21221 1
+1 21222 1
+21222 21222 1
+1 21223 1
+21223 21223 1
+1 21224 1
+21224 21224 1
+1 21225 1
+21225 21225 1
+1 21226 1
+21226 21226 1
+1 21227 1
+21227 21227 1
+1 21228 1
+21228 21228 1
+1 21229 1
+21229 21229 1
+1 21230 1
+21230 21230 1
+1 21231 1
+21231 21231 1
+1 21232 1
+21232 21232 1
+1 21233 1
+21233 21233 1
+1 21234 1
+21234 21234 1
+1 21235 1
+21235 21235 1
+1 21236 1
+21236 21236 1
+1 21237 1
+21237 21237 1
+1 21238 1
+21238 21238 1
+1 21239 1
+21239 21239 1
+1 21240 1
+21240 21240 1
+1 21241 1
+21241 21241 1
+1 21242 1
+21242 21242 1
+1 21243 1
+21243 21243 1
+1 21244 1
+21244 21244 1
+1 21245 1
+21245 21245 1
+1 21246 1
+21246 21246 1
+1 21247 1
+21247 21247 1
+1 21248 1
+21248 21248 1
+1 21249 1
+21249 21249 1
+1 21250 1
+21250 21250 1
+1 21251 1
+21251 21251 1
+1 21252 1
+21252 21252 1
+1 21253 1
+21253 21253 1
+1 21254 1
+21254 21254 1
+1 21255 1
+21255 21255 1
+1 21256 1
+21256 21256 1
+1 21257 1
+21257 21257 1
+1 21258 1
+21258 21258 1
+1 21259 1
+21259 21259 1
+1 21260 1
+21260 21260 1
+1 21261 1
+21261 21261 1
+1 21262 1
+21262 21262 1
+1 21263 1
+21263 21263 1
+1 21264 1
+21264 21264 1
+1 21265 1
+21265 21265 1
+1 21266 1
+21266 21266 1
+1 21267 1
+21267 21267 1
+1 21268 1
+21268 21268 1
+1 21269 1
+21269 21269 1
+1 21270 1
+21270 21270 1
+1 21271 1
+21271 21271 1
+1 21272 1
+21272 21272 1
+1 21273 1
+21273 21273 1
+1 21274 1
+21274 21274 1
+1 21275 1
+21275 21275 1
+1 21276 1
+21276 21276 1
+1 21277 1
+21277 21277 1
+1 21278 1
+21278 21278 1
+1 21279 1
+21279 21279 1
+1 21280 1
+21280 21280 1
+1 21281 1
+21281 21281 1
+1 21282 1
+21282 21282 1
+1 21283 1
+21283 21283 1
+1 21284 1
+21284 21284 1
+1 21285 1
+21285 21285 1
+1 21286 1
+21286 21286 1
+1 21287 1
+21287 21287 1
+1 21288 1
+21288 21288 1
+1 21289 1
+21289 21289 1
+1 21290 1
+21290 21290 1
+1 21291 1
+21291 21291 1
+1 21292 1
+21292 21292 1
+1 21293 1
+21293 21293 1
+1 21294 1
+21294 21294 1
+1 21295 1
+21295 21295 1
+1 21296 1
+21296 21296 1
+1 21297 1
+21297 21297 1
+1 21298 1
+21298 21298 1
+1 21299 1
+21299 21299 1
+1 21300 1
+21300 21300 1
+1 21301 1
+21301 21301 1
+1 21302 1
+21302 21302 1
+1 21303 1
+21303 21303 1
+1 21304 1
+21304 21304 1
+1 21305 1
+21305 21305 1
+1 21306 1
+21306 21306 1
+1 21307 1
+21307 21307 1
+1 21308 1
+21308 21308 1
+1 21309 1
+21309 21309 1
+1 21310 1
+21310 21310 1
+1 21311 1
+21311 21311 1
+1 21312 1
+21312 21312 1
+1 21313 1
+21313 21313 1
+1 21314 1
+21314 21314 1
+1 21315 1
+21315 21315 1
+1 21316 1
+21316 21316 1
+1 21317 1
+21317 21317 1
+1 21318 1
+21318 21318 1
+1 21319 1
+21319 21319 1
+1 21320 1
+21320 21320 1
+1 21321 1
+21321 21321 1
+1 21322 1
+21322 21322 1
+1 21323 1
+21323 21323 1
+1 21324 1
+21324 21324 1
+1 21325 1
+21325 21325 1
+1 21326 1
+21326 21326 1
+1 21327 1
+21327 21327 1
+1 21328 1
+21328 21328 1
+1 21329 1
+21329 21329 1
+1 21330 1
+21330 21330 1
+1 21331 1
+21331 21331 1
+1 21332 1
+21332 21332 1
+1 21333 1
+21333 21333 1
+1 21334 1
+21334 21334 1
+1 21335 1
+21335 21335 1
+1 21336 1
+21336 21336 1
+1 21337 1
+21337 21337 1
+1 21338 1
+21338 21338 1
+1 21339 1
+21339 21339 1
+1 21340 1
+21340 21340 1
+1 21341 1
+21341 21341 1
+1 21342 1
+21342 21342 1
+1 21343 1
+21343 21343 1
+1 21344 1
+21344 21344 1
+1 21345 1
+21345 21345 1
+1 21346 1
+21346 21346 1
+1 21347 1
+21347 21347 1
+1 21348 1
+21348 21348 1
+1 21349 1
+21349 21349 1
+1 21350 1
+21350 21350 1
+1 21351 1
+21351 21351 1
+1 21352 1
+21352 21352 1
+1 21353 1
+21353 21353 1
+1 21354 1
+21354 21354 1
+1 21355 1
+21355 21355 1
+1 21356 1
+21356 21356 1
+1 21357 1
+21357 21357 1
+1 21358 1
+21358 21358 1
+1 21359 1
+21359 21359 1
+1 21360 1
+21360 21360 1
+1 21361 1
+21361 21361 1
+1 21362 1
+21362 21362 1
+1 21363 1
+21363 21363 1
+1 21364 1
+21364 21364 1
+1 21365 1
+21365 21365 1
+1 21366 1
+21366 21366 1
+1 21367 1
+21367 21367 1
+1 21368 1
+21368 21368 1
+1 21369 1
+21369 21369 1
+1 21370 1
+21370 21370 1
+1 21371 1
+21371 21371 1
+1 21372 1
+21372 21372 1
+1 21373 1
+21373 21373 1
+1 21374 1
+21374 21374 1
+1 21375 1
+21375 21375 1
+1 21376 1
+21376 21376 1
+1 21377 1
+21377 21377 1
+1 21378 1
+21378 21378 1
+1 21379 1
+21379 21379 1
+1 21380 1
+21380 21380 1
+1 21381 1
+21381 21381 1
+1 21382 1
+21382 21382 1
+1 21383 1
+21383 21383 1
+1 21384 1
+21384 21384 1
+1 21385 1
+21385 21385 1
+1 21386 1
+21386 21386 1
+1 21387 1
+21387 21387 1
+1 21388 1
+21388 21388 1
+1 21389 1
+21389 21389 1
+1 21390 1
+21390 21390 1
+1 21391 1
+21391 21391 1
+1 21392 1
+21392 21392 1
+1 21393 1
+21393 21393 1
+1 21394 1
+21394 21394 1
+1 21395 1
+21395 21395 1
+1 21396 1
+21396 21396 1
+1 21397 1
+21397 21397 1
+1 21398 1
+21398 21398 1
+1 21399 1
+21399 21399 1
+1 21400 1
+21400 21400 1
+1 21401 1
+21401 21401 1
+1 21402 1
+21402 21402 1
+1 21403 1
+21403 21403 1
+1 21404 1
+21404 21404 1
+1 21405 1
+21405 21405 1
+1 21406 1
+21406 21406 1
+1 21407 1
+21407 21407 1
+1 21408 1
+21408 21408 1
+1 21409 1
+21409 21409 1
+1 21410 1
+21410 21410 1
+1 21411 1
+21411 21411 1
+1 21412 1
+21412 21412 1
+1 21413 1
+21413 21413 1
+1 21414 1
+21414 21414 1
+1 21415 1
+21415 21415 1
+1 21416 1
+21416 21416 1
+1 21417 1
+21417 21417 1
+1 21418 1
+21418 21418 1
+1 21419 1
+21419 21419 1
+1 21420 1
+21420 21420 1
+1 21421 1
+21421 21421 1
+1 21422 1
+21422 21422 1
+1 21423 1
+21423 21423 1
+1 21424 1
+21424 21424 1
+1 21425 1
+21425 21425 1
+1 21426 1
+21426 21426 1
+1 21427 1
+21427 21427 1
+1 21428 1
+21428 21428 1
+1 21429 1
+21429 21429 1
+1 21430 1
+21430 21430 1
+1 21431 1
+21431 21431 1
+1 21432 1
+21432 21432 1
+1 21433 1
+21433 21433 1
+1 21434 1
+21434 21434 1
+1 21435 1
+21435 21435 1
+1 21436 1
+21436 21436 1
+1 21437 1
+21437 21437 1
+1 21438 1
+21438 21438 1
+1 21439 1
+21439 21439 1
+1 21440 1
+21440 21440 1
+1 21441 1
+21441 21441 1
+1 21442 1
+21442 21442 1
+1 21443 1
+21443 21443 1
+1 21444 1
+21444 21444 1
+1 21445 1
+21445 21445 1
+1 21446 1
+21446 21446 1
+1 21447 1
+21447 21447 1
+1 21448 1
+21448 21448 1
+1 21449 1
+21449 21449 1
+1 21450 1
+21450 21450 1
+1 21451 1
+21451 21451 1
+1 21452 1
+21452 21452 1
+1 21453 1
+21453 21453 1
+1 21454 1
+21454 21454 1
+1 21455 1
+21455 21455 1
+1 21456 1
+21456 21456 1
+1 21457 1
+21457 21457 1
+1 21458 1
+21458 21458 1
+1 21459 1
+21459 21459 1
+1 21460 1
+21460 21460 1
+1 21461 1
+21461 21461 1
+1 21462 1
+21462 21462 1
+1 21463 1
+21463 21463 1
+1 21464 1
+21464 21464 1
+1 21465 1
+21465 21465 1
+1 21466 1
+21466 21466 1
+1 21467 1
+21467 21467 1
+1 21468 1
+21468 21468 1
+1 21469 1
+21469 21469 1
+1 21470 1
+21470 21470 1
+1 21471 1
+21471 21471 1
+1 21472 1
+21472 21472 1
+1 21473 1
+21473 21473 1
+1 21474 1
+21474 21474 1
+1 21475 1
+21475 21475 1
+1 21476 1
+21476 21476 1
+1 21477 1
+21477 21477 1
+1 21478 1
+21478 21478 1
+1 21479 1
+21479 21479 1
+1 21480 1
+21480 21480 1
+1 21481 1
+21481 21481 1
+1 21482 1
+21482 21482 1
+1 21483 1
+21483 21483 1
+1 21484 1
+21484 21484 1
+1 21485 1
+21485 21485 1
+1 21486 1
+21486 21486 1
+1 21487 1
+21487 21487 1
+1 21488 1
+21488 21488 1
+1 21489 1
+21489 21489 1
+1 21490 1
+21490 21490 1
+1 21491 1
+21491 21491 1
+1 21492 1
+21492 21492 1
+1 21493 1
+21493 21493 1
+1 21494 1
+21494 21494 1
+1 21495 1
+21495 21495 1
+1 21496 1
+21496 21496 1
+1 21497 1
+21497 21497 1
+1 21498 1
+21498 21498 1
+1 21499 1
+21499 21499 1
+1 21500 1
+21500 21500 1
+1 21501 1
+21501 21501 1
+1 21502 1
+21502 21502 1
+1 21503 1
+21503 21503 1
+1 21504 1
+21504 21504 1
+1 21505 1
+21505 21505 1
+1 21506 1
+21506 21506 1
+1 21507 1
+21507 21507 1
+1 21508 1
+21508 21508 1
+1 21509 1
+21509 21509 1
+1 21510 1
+21510 21510 1
+1 21511 1
+21511 21511 1
+1 21512 1
+21512 21512 1
+1 21513 1
+21513 21513 1
+1 21514 1
+21514 21514 1
+1 21515 1
+21515 21515 1
+1 21516 1
+21516 21516 1
+1 21517 1
+21517 21517 1
+1 21518 1
+21518 21518 1
+1 21519 1
+21519 21519 1
+1 21520 1
+21520 21520 1
+1 21521 1
+21521 21521 1
+1 21522 1
+21522 21522 1
+1 21523 1
+21523 21523 1
+1 21524 1
+21524 21524 1
+1 21525 1
+21525 21525 1
+1 21526 1
+21526 21526 1
+1 21527 1
+21527 21527 1
+1 21528 1
+21528 21528 1
+1 21529 1
+21529 21529 1
+1 21530 1
+21530 21530 1
+1 21531 1
+21531 21531 1
+1 21532 1
+21532 21532 1
+1 21533 1
+21533 21533 1
+1 21534 1
+21534 21534 1
+1 21535 1
+21535 21535 1
+1 21536 1
+21536 21536 1
+1 21537 1
+21537 21537 1
+1 21538 1
+21538 21538 1
+1 21539 1
+21539 21539 1
+1 21540 1
+21540 21540 1
+1 21541 1
+21541 21541 1
+1 21542 1
+21542 21542 1
+1 21543 1
+21543 21543 1
+1 21544 1
+21544 21544 1
+1 21545 1
+21545 21545 1
+1 21546 1
+21546 21546 1
+1 21547 1
+21547 21547 1
+1 21548 1
+21548 21548 1
+1 21549 1
+21549 21549 1
+1 21550 1
+21550 21550 1
+1 21551 1
+21551 21551 1
+1 21552 1
+21552 21552 1
+1 21553 1
+21553 21553 1
+1 21554 1
+21554 21554 1
+1 21555 1
+21555 21555 1
+1 21556 1
+21556 21556 1
+1 21557 1
+21557 21557 1
+1 21558 1
+21558 21558 1
+1 21559 1
+21559 21559 1
+1 21560 1
+21560 21560 1
+1 21561 1
+21561 21561 1
+1 21562 1
+21562 21562 1
+1 21563 1
+21563 21563 1
+1 21564 1
+21564 21564 1
+1 21565 1
+21565 21565 1
+1 21566 1
+21566 21566 1
+1 21567 1
+21567 21567 1
+1 21568 1
+21568 21568 1
+1 21569 1
+21569 21569 1
+1 21570 1
+21570 21570 1
+1 21571 1
+21571 21571 1
+1 21572 1
+21572 21572 1
+1 21573 1
+21573 21573 1
+1 21574 1
+21574 21574 1
+1 21575 1
+21575 21575 1
+1 21576 1
+21576 21576 1
+1 21577 1
+21577 21577 1
+1 21578 1
+21578 21578 1
+1 21579 1
+21579 21579 1
+1 21580 1
+21580 21580 1
+1 21581 1
+21581 21581 1
+1 21582 1
+21582 21582 1
+1 21583 1
+21583 21583 1
+1 21584 1
+21584 21584 1
+1 21585 1
+21585 21585 1
+1 21586 1
+21586 21586 1
+1 21587 1
+21587 21587 1
+1 21588 1
+21588 21588 1
+1 21589 1
+21589 21589 1
+1 21590 1
+21590 21590 1
+1 21591 1
+21591 21591 1
+1 21592 1
+21592 21592 1
+1 21593 1
+21593 21593 1
+1 21594 1
+21594 21594 1
+1 21595 1
+21595 21595 1
+1 21596 1
+21596 21596 1
+1 21597 1
+21597 21597 1
+1 21598 1
+21598 21598 1
+1 21599 1
+21599 21599 1
+1 21600 1
+21600 21600 1
+1 21601 1
+21601 21601 1
+1 21602 1
+21602 21602 1
+1 21603 1
+21603 21603 1
+1 21604 1
+21604 21604 1
+1 21605 1
+21605 21605 1
+1 21606 1
+21606 21606 1
+1 21607 1
+21607 21607 1
+1 21608 1
+21608 21608 1
+1 21609 1
+21609 21609 1
+1 21610 1
+21610 21610 1
+1 21611 1
+21611 21611 1
+1 21612 1
+21612 21612 1
+1 21613 1
+21613 21613 1
+1 21614 1
+21614 21614 1
+1 21615 1
+21615 21615 1
+1 21616 1
+21616 21616 1
+1 21617 1
+21617 21617 1
+1 21618 1
+21618 21618 1
+1 21619 1
+21619 21619 1
+1 21620 1
+21620 21620 1
+1 21621 1
+21621 21621 1
+1 21622 1
+21622 21622 1
+1 21623 1
+21623 21623 1
+1 21624 1
+21624 21624 1
+1 21625 1
+21625 21625 1
+1 21626 1
+21626 21626 1
+1 21627 1
+21627 21627 1
+1 21628 1
+21628 21628 1
+1 21629 1
+21629 21629 1
+1 21630 1
+21630 21630 1
+1 21631 1
+21631 21631 1
+1 21632 1
+21632 21632 1
+1 21633 1
+21633 21633 1
+1 21634 1
+21634 21634 1
+1 21635 1
+21635 21635 1
+1 21636 1
+21636 21636 1
+1 21637 1
+21637 21637 1
+1 21638 1
+21638 21638 1
+1 21639 1
+21639 21639 1
+1 21640 1
+21640 21640 1
+1 21641 1
+21641 21641 1
+1 21642 1
+21642 21642 1
+1 21643 1
+21643 21643 1
+1 21644 1
+21644 21644 1
+1 21645 1
+21645 21645 1
+1 21646 1
+21646 21646 1
+1 21647 1
+21647 21647 1
+1 21648 1
+21648 21648 1
+1 21649 1
+21649 21649 1
+1 21650 1
+21650 21650 1
+1 21651 1
+21651 21651 1
+1 21652 1
+21652 21652 1
+1 21653 1
+21653 21653 1
+1 21654 1
+21654 21654 1
+1 21655 1
+21655 21655 1
+1 21656 1
+21656 21656 1
+1 21657 1
+21657 21657 1
+1 21658 1
+21658 21658 1
+1 21659 1
+21659 21659 1
+1 21660 1
+21660 21660 1
+1 21661 1
+21661 21661 1
+1 21662 1
+21662 21662 1
+1 21663 1
+21663 21663 1
+1 21664 1
+21664 21664 1
+1 21665 1
+21665 21665 1
+1 21666 1
+21666 21666 1
+1 21667 1
+21667 21667 1
+1 21668 1
+21668 21668 1
+1 21669 1
+21669 21669 1
+1 21670 1
+21670 21670 1
+1 21671 1
+21671 21671 1
+1 21672 1
+21672 21672 1
+1 21673 1
+21673 21673 1
+1 21674 1
+21674 21674 1
+1 21675 1
+21675 21675 1
+1 21676 1
+21676 21676 1
+1 21677 1
+21677 21677 1
+1 21678 1
+21678 21678 1
+1 21679 1
+21679 21679 1
+1 21680 1
+21680 21680 1
+1 21681 1
+21681 21681 1
+1 21682 1
+21682 21682 1
+1 21683 1
+21683 21683 1
+1 21684 1
+21684 21684 1
+1 21685 1
+21685 21685 1
+1 21686 1
+21686 21686 1
+1 21687 1
+21687 21687 1
+1 21688 1
+21688 21688 1
+1 21689 1
+21689 21689 1
+1 21690 1
+21690 21690 1
+1 21691 1
+21691 21691 1
+1 21692 1
+21692 21692 1
+1 21693 1
+21693 21693 1
+1 21694 1
+21694 21694 1
+1 21695 1
+21695 21695 1
+1 21696 1
+21696 21696 1
+1 21697 1
+21697 21697 1
+1 21698 1
+21698 21698 1
+1 21699 1
+21699 21699 1
+1 21700 1
+21700 21700 1
+1 21701 1
+21701 21701 1
+1 21702 1
+21702 21702 1
+1 21703 1
+21703 21703 1
+1 21704 1
+21704 21704 1
+1 21705 1
+21705 21705 1
+1 21706 1
+21706 21706 1
+1 21707 1
+21707 21707 1
+1 21708 1
+21708 21708 1
+1 21709 1
+21709 21709 1
+1 21710 1
+21710 21710 1
+1 21711 1
+21711 21711 1
+1 21712 1
+21712 21712 1
+1 21713 1
+21713 21713 1
+1 21714 1
+21714 21714 1
+1 21715 1
+21715 21715 1
+1 21716 1
+21716 21716 1
+1 21717 1
+21717 21717 1
+1 21718 1
+21718 21718 1
+1 21719 1
+21719 21719 1
+1 21720 1
+21720 21720 1
+1 21721 1
+21721 21721 1
+1 21722 1
+21722 21722 1
+1 21723 1
+21723 21723 1
+1 21724 1
+21724 21724 1
+1 21725 1
+21725 21725 1
+1 21726 1
+21726 21726 1
+1 21727 1
+21727 21727 1
+1 21728 1
+21728 21728 1
+1 21729 1
+21729 21729 1
+1 21730 1
+21730 21730 1
+1 21731 1
+21731 21731 1
+1 21732 1
+21732 21732 1
+1 21733 1
+21733 21733 1
+1 21734 1
+21734 21734 1
+1 21735 1
+21735 21735 1
+1 21736 1
+21736 21736 1
+1 21737 1
+21737 21737 1
+1 21738 1
+21738 21738 1
+1 21739 1
+21739 21739 1
+1 21740 1
+21740 21740 1
+1 21741 1
+21741 21741 1
+1 21742 1
+21742 21742 1
+1 21743 1
+21743 21743 1
+1 21744 1
+21744 21744 1
+1 21745 1
+21745 21745 1
+1 21746 1
+21746 21746 1
+1 21747 1
+21747 21747 1
+1 21748 1
+21748 21748 1
+1 21749 1
+21749 21749 1
+1 21750 1
+21750 21750 1
+1 21751 1
+21751 21751 1
+1 21752 1
+21752 21752 1
+1 21753 1
+21753 21753 1
+1 21754 1
+21754 21754 1
+1 21755 1
+21755 21755 1
+1 21756 1
+21756 21756 1
+1 21757 1
+21757 21757 1
+1 21758 1
+21758 21758 1
+1 21759 1
+21759 21759 1
+1 21760 1
+21760 21760 1
+1 21761 1
+21761 21761 1
+1 21762 1
+21762 21762 1
+1 21763 1
+21763 21763 1
+1 21764 1
+21764 21764 1
+1 21765 1
+21765 21765 1
+1 21766 1
+21766 21766 1
+1 21767 1
+21767 21767 1
+1 21768 1
+21768 21768 1
+1 21769 1
+21769 21769 1
+1 21770 1
+21770 21770 1
+1 21771 1
+21771 21771 1
+1 21772 1
+21772 21772 1
+1 21773 1
+21773 21773 1
+1 21774 1
+21774 21774 1
+1 21775 1
+21775 21775 1
+1 21776 1
+21776 21776 1
+1 21777 1
+21777 21777 1
+1 21778 1
+21778 21778 1
+1 21779 1
+21779 21779 1
+1 21780 1
+21780 21780 1
+1 21781 1
+21781 21781 1
+1 21782 1
+21782 21782 1
+1 21783 1
+21783 21783 1
+1 21784 1
+21784 21784 1
+1 21785 1
+21785 21785 1
+1 21786 1
+21786 21786 1
+1 21787 1
+21787 21787 1
+1 21788 1
+21788 21788 1
+1 21789 1
+21789 21789 1
+1 21790 1
+21790 21790 1
+1 21791 1
+21791 21791 1
+1 21792 1
+21792 21792 1
+1 21793 1
+21793 21793 1
+1 21794 1
+21794 21794 1
+1 21795 1
+21795 21795 1
+1 21796 1
+21796 21796 1
+1 21797 1
+21797 21797 1
+1 21798 1
+21798 21798 1
+1 21799 1
+21799 21799 1
+1 21800 1
+21800 21800 1
+1 21801 1
+21801 21801 1
+1 21802 1
+21802 21802 1
+1 21803 1
+21803 21803 1
+1 21804 1
+21804 21804 1
+1 21805 1
+21805 21805 1
+1 21806 1
+21806 21806 1
+1 21807 1
+21807 21807 1
+1 21808 1
+21808 21808 1
+1 21809 1
+21809 21809 1
+1 21810 1
+21810 21810 1
+1 21811 1
+21811 21811 1
+1 21812 1
+21812 21812 1
+1 21813 1
+21813 21813 1
+1 21814 1
+21814 21814 1
+1 21815 1
+21815 21815 1
+1 21816 1
+21816 21816 1
+1 21817 1
+21817 21817 1
+1 21818 1
+21818 21818 1
+1 21819 1
+21819 21819 1
+1 21820 1
+21820 21820 1
+1 21821 1
+21821 21821 1
+1 21822 1
+21822 21822 1
+1 21823 1
+21823 21823 1
+1 21824 1
+21824 21824 1
+1 21825 1
+21825 21825 1
+1 21826 1
+21826 21826 1
+1 21827 1
+21827 21827 1
+1 21828 1
+21828 21828 1
+1 21829 1
+21829 21829 1
+1 21830 1
+21830 21830 1
+1 21831 1
+21831 21831 1
+1 21832 1
+21832 21832 1
+1 21833 1
+21833 21833 1
+1 21834 1
+21834 21834 1
+1 21835 1
+21835 21835 1
+1 21836 1
+21836 21836 1
+1 21837 1
+21837 21837 1
+1 21838 1
+21838 21838 1
+1 21839 1
+21839 21839 1
+1 21840 1
+21840 21840 1
+1 21841 1
+21841 21841 1
+1 21842 1
+21842 21842 1
+1 21843 1
+21843 21843 1
+1 21844 1
+21844 21844 1
+1 21845 1
+21845 21845 1
+1 21846 1
+21846 21846 1
+1 21847 1
+21847 21847 1
+1 21848 1
+21848 21848 1
+1 21849 1
+21849 21849 1
+1 21850 1
+21850 21850 1
+1 21851 1
+21851 21851 1
+1 21852 1
+21852 21852 1
+1 21853 1
+21853 21853 1
+1 21854 1
+21854 21854 1
+1 21855 1
+21855 21855 1
+1 21856 1
+21856 21856 1
+1 21857 1
+21857 21857 1
+1 21858 1
+21858 21858 1
+1 21859 1
+21859 21859 1
+1 21860 1
+21860 21860 1
+1 21861 1
+21861 21861 1
+1 21862 1
+21862 21862 1
+1 21863 1
+21863 21863 1
+1 21864 1
+21864 21864 1
+1 21865 1
+21865 21865 1
+1 21866 1
+21866 21866 1
+1 21867 1
+21867 21867 1
+1 21868 1
+21868 21868 1
+1 21869 1
+21869 21869 1
+1 21870 1
+21870 21870 1
+1 21871 1
+21871 21871 1
+1 21872 1
+21872 21872 1
+1 21873 1
+21873 21873 1
+1 21874 1
+21874 21874 1
+1 21875 1
+21875 21875 1
+1 21876 1
+21876 21876 1
+1 21877 1
+21877 21877 1
+1 21878 1
+21878 21878 1
+1 21879 1
+21879 21879 1
+1 21880 1
+21880 21880 1
+1 21881 1
+21881 21881 1
+1 21882 1
+21882 21882 1
+1 21883 1
+21883 21883 1
+1 21884 1
+21884 21884 1
+1 21885 1
+21885 21885 1
+1 21886 1
+21886 21886 1
+1 21887 1
+21887 21887 1
+1 21888 1
+21888 21888 1
+1 21889 1
+21889 21889 1
+1 21890 1
+21890 21890 1
+1 21891 1
+21891 21891 1
+1 21892 1
+21892 21892 1
+1 21893 1
+21893 21893 1
+1 21894 1
+21894 21894 1
+1 21895 1
+21895 21895 1
+1 21896 1
+21896 21896 1
+1 21897 1
+21897 21897 1
+1 21898 1
+21898 21898 1
+1 21899 1
+21899 21899 1
+1 21900 1
+21900 21900 1
+1 21901 1
+21901 21901 1
+1 21902 1
+21902 21902 1
+1 21903 1
+21903 21903 1
+1 21904 1
+21904 21904 1
+1 21905 1
+21905 21905 1
+1 21906 1
+21906 21906 1
+1 21907 1
+21907 21907 1
+1 21908 1
+21908 21908 1
+1 21909 1
+21909 21909 1
+1 21910 1
+21910 21910 1
+1 21911 1
+21911 21911 1
+1 21912 1
+21912 21912 1
+1 21913 1
+21913 21913 1
+1 21914 1
+21914 21914 1
+1 21915 1
+21915 21915 1
+1 21916 1
+21916 21916 1
+1 21917 1
+21917 21917 1
+1 21918 1
+21918 21918 1
+1 21919 1
+21919 21919 1
+1 21920 1
+21920 21920 1
+1 21921 1
+21921 21921 1
+1 21922 1
+21922 21922 1
+1 21923 1
+21923 21923 1
+1 21924 1
+21924 21924 1
+1 21925 1
+21925 21925 1
+1 21926 1
+21926 21926 1
+1 21927 1
+21927 21927 1
+1 21928 1
+21928 21928 1
+1 21929 1
+21929 21929 1
+1 21930 1
+21930 21930 1
+1 21931 1
+21931 21931 1
+1 21932 1
+21932 21932 1
+1 21933 1
+21933 21933 1
+1 21934 1
+21934 21934 1
+1 21935 1
+21935 21935 1
+1 21936 1
+21936 21936 1
+1 21937 1
+21937 21937 1
+1 21938 1
+21938 21938 1
+1 21939 1
+21939 21939 1
+1 21940 1
+21940 21940 1
+1 21941 1
+21941 21941 1
+1 21942 1
+21942 21942 1
+1 21943 1
+21943 21943 1
+1 21944 1
+21944 21944 1
+1 21945 1
+21945 21945 1
+1 21946 1
+21946 21946 1
+1 21947 1
+21947 21947 1
+1 21948 1
+21948 21948 1
+1 21949 1
+21949 21949 1
+1 21950 1
+21950 21950 1
+1 21951 1
+21951 21951 1
+1 21952 1
+21952 21952 1
+1 21953 1
+21953 21953 1
+1 21954 1
+21954 21954 1
+1 21955 1
+21955 21955 1
+1 21956 1
+21956 21956 1
+1 21957 1
+21957 21957 1
+1 21958 1
+21958 21958 1
+1 21959 1
+21959 21959 1
+1 21960 1
+21960 21960 1
+1 21961 1
+21961 21961 1
+1 21962 1
+21962 21962 1
+1 21963 1
+21963 21963 1
+1 21964 1
+21964 21964 1
+1 21965 1
+21965 21965 1
+1 21966 1
+21966 21966 1
+1 21967 1
+21967 21967 1
+1 21968 1
+21968 21968 1
+1 21969 1
+21969 21969 1
+1 21970 1
+21970 21970 1
+1 21971 1
+21971 21971 1
+1 21972 1
+21972 21972 1
+1 21973 1
+21973 21973 1
+1 21974 1
+21974 21974 1
+1 21975 1
+21975 21975 1
+1 21976 1
+21976 21976 1
+1 21977 1
+21977 21977 1
+1 21978 1
+21978 21978 1
+1 21979 1
+21979 21979 1
+1 21980 1
+21980 21980 1
+1 21981 1
+21981 21981 1
+1 21982 1
+21982 21982 1
+1 21983 1
+21983 21983 1
+1 21984 1
+21984 21984 1
+1 21985 1
+21985 21985 1
+1 21986 1
+21986 21986 1
+1 21987 1
+21987 21987 1
+1 21988 1
+21988 21988 1
+1 21989 1
+21989 21989 1
+1 21990 1
+21990 21990 1
+1 21991 1
+21991 21991 1
+1 21992 1
+21992 21992 1
+1 21993 1
+21993 21993 1
+1 21994 1
+21994 21994 1
+1 21995 1
+21995 21995 1
+1 21996 1
+21996 21996 1
+1 21997 1
+21997 21997 1
+1 21998 1
+21998 21998 1
+1 21999 1
+21999 21999 1
+1 22000 1
+22000 22000 1
+1 22001 1
+22001 22001 1
+1 22002 1
+22002 22002 1
+1 22003 1
+22003 22003 1
+1 22004 1
+22004 22004 1
+1 22005 1
+22005 22005 1
+1 22006 1
+22006 22006 1
+1 22007 1
+22007 22007 1
+1 22008 1
+22008 22008 1
+1 22009 1
+22009 22009 1
+1 22010 1
+22010 22010 1
+1 22011 1
+22011 22011 1
+1 22012 1
+22012 22012 1
+1 22013 1
+22013 22013 1
+1 22014 1
+22014 22014 1
+1 22015 1
+22015 22015 1
+1 22016 1
+22016 22016 1
+1 22017 1
+22017 22017 1
+1 22018 1
+22018 22018 1
+1 22019 1
+22019 22019 1
+1 22020 1
+22020 22020 1
+1 22021 1
+22021 22021 1
+1 22022 1
+22022 22022 1
+1 22023 1
+22023 22023 1
+1 22024 1
+22024 22024 1
+1 22025 1
+22025 22025 1
+1 22026 1
+22026 22026 1
+1 22027 1
+22027 22027 1
+1 22028 1
+22028 22028 1
+1 22029 1
+22029 22029 1
+1 22030 1
+22030 22030 1
+1 22031 1
+22031 22031 1
+1 22032 1
+22032 22032 1
+1 22033 1
+22033 22033 1
+1 22034 1
+22034 22034 1
+1 22035 1
+22035 22035 1
+1 22036 1
+22036 22036 1
+1 22037 1
+22037 22037 1
+1 22038 1
+22038 22038 1
+1 22039 1
+22039 22039 1
+1 22040 1
+22040 22040 1
+1 22041 1
+22041 22041 1
+1 22042 1
+22042 22042 1
+1 22043 1
+22043 22043 1
+1 22044 1
+22044 22044 1
+1 22045 1
+22045 22045 1
+1 22046 1
+22046 22046 1
+1 22047 1
+22047 22047 1
+1 22048 1
+22048 22048 1
+1 22049 1
+22049 22049 1
+1 22050 1
+22050 22050 1
+1 22051 1
+22051 22051 1
+1 22052 1
+22052 22052 1
+1 22053 1
+22053 22053 1
+1 22054 1
+22054 22054 1
+1 22055 1
+22055 22055 1
+1 22056 1
+22056 22056 1
+1 22057 1
+22057 22057 1
+1 22058 1
+22058 22058 1
+1 22059 1
+22059 22059 1
+1 22060 1
+22060 22060 1
+1 22061 1
+22061 22061 1
+1 22062 1
+22062 22062 1
+1 22063 1
+22063 22063 1
+1 22064 1
+22064 22064 1
+1 22065 1
+22065 22065 1
+1 22066 1
+22066 22066 1
+1 22067 1
+22067 22067 1
+1 22068 1
+22068 22068 1
+1 22069 1
+22069 22069 1
+1 22070 1
+22070 22070 1
+1 22071 1
+22071 22071 1
+1 22072 1
+22072 22072 1
+1 22073 1
+22073 22073 1
+1 22074 1
+22074 22074 1
+1 22075 1
+22075 22075 1
+1 22076 1
+22076 22076 1
+1 22077 1
+22077 22077 1
+1 22078 1
+22078 22078 1
+1 22079 1
+22079 22079 1
+1 22080 1
+22080 22080 1
+1 22081 1
+22081 22081 1
+1 22082 1
+22082 22082 1
+1 22083 1
+22083 22083 1
+1 22084 1
+22084 22084 1
+1 22085 1
+22085 22085 1
+1 22086 1
+22086 22086 1
+1 22087 1
+22087 22087 1
+1 22088 1
+22088 22088 1
+1 22089 1
+22089 22089 1
+1 22090 1
+22090 22090 1
+1 22091 1
+22091 22091 1
+1 22092 1
+22092 22092 1
+1 22093 1
+22093 22093 1
+1 22094 1
+22094 22094 1
+1 22095 1
+22095 22095 1
+1 22096 1
+22096 22096 1
+1 22097 1
+22097 22097 1
+1 22098 1
+22098 22098 1
+1 22099 1
+22099 22099 1
+1 22100 1
+22100 22100 1
+1 22101 1
+22101 22101 1
+1 22102 1
+22102 22102 1
+1 22103 1
+22103 22103 1
+1 22104 1
+22104 22104 1
+1 22105 1
+22105 22105 1
+1 22106 1
+22106 22106 1
+1 22107 1
+22107 22107 1
+1 22108 1
+22108 22108 1
+1 22109 1
+22109 22109 1
+1 22110 1
+22110 22110 1
+1 22111 1
+22111 22111 1
+1 22112 1
+22112 22112 1
+1 22113 1
+22113 22113 1
+1 22114 1
+22114 22114 1
+1 22115 1
+22115 22115 1
+1 22116 1
+22116 22116 1
+1 22117 1
+22117 22117 1
+1 22118 1
+22118 22118 1
+1 22119 1
+22119 22119 1
+1 22120 1
+22120 22120 1
+1 22121 1
+22121 22121 1
+1 22122 1
+22122 22122 1
+1 22123 1
+22123 22123 1
+1 22124 1
+22124 22124 1
+1 22125 1
+22125 22125 1
+1 22126 1
+22126 22126 1
+1 22127 1
+22127 22127 1
+1 22128 1
+22128 22128 1
+1 22129 1
+22129 22129 1
+1 22130 1
+22130 22130 1
+1 22131 1
+22131 22131 1
+1 22132 1
+22132 22132 1
+1 22133 1
+22133 22133 1
+1 22134 1
+22134 22134 1
+1 22135 1
+22135 22135 1
+1 22136 1
+22136 22136 1
+1 22137 1
+22137 22137 1
+1 22138 1
+22138 22138 1
+1 22139 1
+22139 22139 1
+1 22140 1
+22140 22140 1
+1 22141 1
+22141 22141 1
+1 22142 1
+22142 22142 1
+1 22143 1
+22143 22143 1
+1 22144 1
+22144 22144 1
+1 22145 1
+22145 22145 1
+1 22146 1
+22146 22146 1
+1 22147 1
+22147 22147 1
+1 22148 1
+22148 22148 1
+1 22149 1
+22149 22149 1
+1 22150 1
+22150 22150 1
+1 22151 1
+22151 22151 1
+1 22152 1
+22152 22152 1
+1 22153 1
+22153 22153 1
+1 22154 1
+22154 22154 1
+1 22155 1
+22155 22155 1
+1 22156 1
+22156 22156 1
+1 22157 1
+22157 22157 1
+1 22158 1
+22158 22158 1
+1 22159 1
+22159 22159 1
+1 22160 1
+22160 22160 1
+1 22161 1
+22161 22161 1
+1 22162 1
+22162 22162 1
+1 22163 1
+22163 22163 1
+1 22164 1
+22164 22164 1
+1 22165 1
+22165 22165 1
+1 22166 1
+22166 22166 1
+1 22167 1
+22167 22167 1
+1 22168 1
+22168 22168 1
+1 22169 1
+22169 22169 1
+1 22170 1
+22170 22170 1
+1 22171 1
+22171 22171 1
+1 22172 1
+22172 22172 1
+1 22173 1
+22173 22173 1
+1 22174 1
+22174 22174 1
+1 22175 1
+22175 22175 1
+1 22176 1
+22176 22176 1
+1 22177 1
+22177 22177 1
+1 22178 1
+22178 22178 1
+1 22179 1
+22179 22179 1
+1 22180 1
+22180 22180 1
+1 22181 1
+22181 22181 1
+1 22182 1
+22182 22182 1
+1 22183 1
+22183 22183 1
+1 22184 1
+22184 22184 1
+1 22185 1
+22185 22185 1
+1 22186 1
+22186 22186 1
+1 22187 1
+22187 22187 1
+1 22188 1
+22188 22188 1
+1 22189 1
+22189 22189 1
+1 22190 1
+22190 22190 1
+1 22191 1
+22191 22191 1
+1 22192 1
+22192 22192 1
+1 22193 1
+22193 22193 1
+1 22194 1
+22194 22194 1
+1 22195 1
+22195 22195 1
+1 22196 1
+22196 22196 1
+1 22197 1
+22197 22197 1
+1 22198 1
+22198 22198 1
+1 22199 1
+22199 22199 1
+1 22200 1
+22200 22200 1
+1 22201 1
+22201 22201 1
+1 22202 1
+22202 22202 1
+1 22203 1
+22203 22203 1
+1 22204 1
+22204 22204 1
+1 22205 1
+22205 22205 1
+1 22206 1
+22206 22206 1
+1 22207 1
+22207 22207 1
+1 22208 1
+22208 22208 1
+1 22209 1
+22209 22209 1
+1 22210 1
+22210 22210 1
+1 22211 1
+22211 22211 1
+1 22212 1
+22212 22212 1
+1 22213 1
+22213 22213 1
+1 22214 1
+22214 22214 1
+1 22215 1
+22215 22215 1
+1 22216 1
+22216 22216 1
+1 22217 1
+22217 22217 1
+1 22218 1
+22218 22218 1
+1 22219 1
+22219 22219 1
+1 22220 1
+22220 22220 1
+1 22221 1
+22221 22221 1
+1 22222 1
+22222 22222 1
+1 22223 1
+22223 22223 1
+1 22224 1
+22224 22224 1
+1 22225 1
+22225 22225 1
+1 22226 1
+22226 22226 1
+1 22227 1
+22227 22227 1
+1 22228 1
+22228 22228 1
+1 22229 1
+22229 22229 1
+1 22230 1
+22230 22230 1
+1 22231 1
+22231 22231 1
+1 22232 1
+22232 22232 1
+1 22233 1
+22233 22233 1
+1 22234 1
+22234 22234 1
+1 22235 1
+22235 22235 1
+1 22236 1
+22236 22236 1
+1 22237 1
+22237 22237 1
+1 22238 1
+22238 22238 1
+1 22239 1
+22239 22239 1
+1 22240 1
+22240 22240 1
+1 22241 1
+22241 22241 1
+1 22242 1
+22242 22242 1
+1 22243 1
+22243 22243 1
+1 22244 1
+22244 22244 1
+1 22245 1
+22245 22245 1
+1 22246 1
+22246 22246 1
+1 22247 1
+22247 22247 1
+1 22248 1
+22248 22248 1
+1 22249 1
+22249 22249 1
+1 22250 1
+22250 22250 1
+1 22251 1
+22251 22251 1
+1 22252 1
+22252 22252 1
+1 22253 1
+22253 22253 1
+1 22254 1
+22254 22254 1
+1 22255 1
+22255 22255 1
+1 22256 1
+22256 22256 1
+1 22257 1
+22257 22257 1
+1 22258 1
+22258 22258 1
+1 22259 1
+22259 22259 1
+1 22260 1
+22260 22260 1
+1 22261 1
+22261 22261 1
+1 22262 1
+22262 22262 1
+1 22263 1
+22263 22263 1
+1 22264 1
+22264 22264 1
+1 22265 1
+22265 22265 1
+1 22266 1
+22266 22266 1
+1 22267 1
+22267 22267 1
+1 22268 1
+22268 22268 1
+1 22269 1
+22269 22269 1
+1 22270 1
+22270 22270 1
+1 22271 1
+22271 22271 1
+1 22272 1
+22272 22272 1
+1 22273 1
+22273 22273 1
+1 22274 1
+22274 22274 1
+1 22275 1
+22275 22275 1
+1 22276 1
+22276 22276 1
+1 22277 1
+22277 22277 1
+1 22278 1
+22278 22278 1
+1 22279 1
+22279 22279 1
+1 22280 1
+22280 22280 1
+1 22281 1
+22281 22281 1
+1 22282 1
+22282 22282 1
+1 22283 1
+22283 22283 1
+1 22284 1
+22284 22284 1
+1 22285 1
+22285 22285 1
+1 22286 1
+22286 22286 1
+1 22287 1
+22287 22287 1
+1 22288 1
+22288 22288 1
+1 22289 1
+22289 22289 1
+1 22290 1
+22290 22290 1
+1 22291 1
+22291 22291 1
+1 22292 1
+22292 22292 1
+1 22293 1
+22293 22293 1
+1 22294 1
+22294 22294 1
+1 22295 1
+22295 22295 1
+1 22296 1
+22296 22296 1
+1 22297 1
+22297 22297 1
+1 22298 1
+22298 22298 1
+1 22299 1
+22299 22299 1
+1 22300 1
+22300 22300 1
+1 22301 1
+22301 22301 1
+1 22302 1
+22302 22302 1
+1 22303 1
+22303 22303 1
+1 22304 1
+22304 22304 1
+1 22305 1
+22305 22305 1
+1 22306 1
+22306 22306 1
+1 22307 1
+22307 22307 1
+1 22308 1
+22308 22308 1
+1 22309 1
+22309 22309 1
+1 22310 1
+22310 22310 1
+1 22311 1
+22311 22311 1
+1 22312 1
+22312 22312 1
+1 22313 1
+22313 22313 1
+1 22314 1
+22314 22314 1
+1 22315 1
+22315 22315 1
+1 22316 1
+22316 22316 1
+1 22317 1
+22317 22317 1
+1 22318 1
+22318 22318 1
+1 22319 1
+22319 22319 1
+1 22320 1
+22320 22320 1
+1 22321 1
+22321 22321 1
+1 22322 1
+22322 22322 1
+1 22323 1
+22323 22323 1
+1 22324 1
+22324 22324 1
+1 22325 1
+22325 22325 1
+1 22326 1
+22326 22326 1
+1 22327 1
+22327 22327 1
+1 22328 1
+22328 22328 1
+1 22329 1
+22329 22329 1
+1 22330 1
+22330 22330 1
+1 22331 1
+22331 22331 1
+1 22332 1
+22332 22332 1
+1 22333 1
+22333 22333 1
+1 22334 1
+22334 22334 1
+1 22335 1
+22335 22335 1
+1 22336 1
+22336 22336 1
+1 22337 1
+22337 22337 1
+1 22338 1
+22338 22338 1
+1 22339 1
+22339 22339 1
+1 22340 1
+22340 22340 1
+1 22341 1
+22341 22341 1
+1 22342 1
+22342 22342 1
+1 22343 1
+22343 22343 1
+1 22344 1
+22344 22344 1
+1 22345 1
+22345 22345 1
+1 22346 1
+22346 22346 1
+1 22347 1
+22347 22347 1
+1 22348 1
+22348 22348 1
+1 22349 1
+22349 22349 1
+1 22350 1
+22350 22350 1
+1 22351 1
+22351 22351 1
+1 22352 1
+22352 22352 1
+1 22353 1
+22353 22353 1
+1 22354 1
+22354 22354 1
+1 22355 1
+22355 22355 1
+1 22356 1
+22356 22356 1
+1 22357 1
+22357 22357 1
+1 22358 1
+22358 22358 1
+1 22359 1
+22359 22359 1
+1 22360 1
+22360 22360 1
+1 22361 1
+22361 22361 1
+1 22362 1
+22362 22362 1
+1 22363 1
+22363 22363 1
+1 22364 1
+22364 22364 1
+1 22365 1
+22365 22365 1
+1 22366 1
+22366 22366 1
+1 22367 1
+22367 22367 1
+1 22368 1
+22368 22368 1
+1 22369 1
+22369 22369 1
+1 22370 1
+22370 22370 1
+1 22371 1
+22371 22371 1
+1 22372 1
+22372 22372 1
+1 22373 1
+22373 22373 1
+1 22374 1
+22374 22374 1
+1 22375 1
+22375 22375 1
+1 22376 1
+22376 22376 1
+1 22377 1
+22377 22377 1
+1 22378 1
+22378 22378 1
+1 22379 1
+22379 22379 1
+1 22380 1
+22380 22380 1
+1 22381 1
+22381 22381 1
+1 22382 1
+22382 22382 1
+1 22383 1
+22383 22383 1
+1 22384 1
+22384 22384 1
+1 22385 1
+22385 22385 1
+1 22386 1
+22386 22386 1
+1 22387 1
+22387 22387 1
+1 22388 1
+22388 22388 1
+1 22389 1
+22389 22389 1
+1 22390 1
+22390 22390 1
+1 22391 1
+22391 22391 1
+1 22392 1
+22392 22392 1
+1 22393 1
+22393 22393 1
+1 22394 1
+22394 22394 1
+1 22395 1
+22395 22395 1
+1 22396 1
+22396 22396 1
+1 22397 1
+22397 22397 1
+1 22398 1
+22398 22398 1
+1 22399 1
+22399 22399 1
+1 22400 1
+22400 22400 1
+1 22401 1
+22401 22401 1
+1 22402 1
+22402 22402 1
+1 22403 1
+22403 22403 1
+1 22404 1
+22404 22404 1
+1 22405 1
+22405 22405 1
+1 22406 1
+22406 22406 1
+1 22407 1
+22407 22407 1
+1 22408 1
+22408 22408 1
+1 22409 1
+22409 22409 1
+1 22410 1
+22410 22410 1
+1 22411 1
+22411 22411 1
+1 22412 1
+22412 22412 1
+1 22413 1
+22413 22413 1
+1 22414 1
+22414 22414 1
+1 22415 1
+22415 22415 1
+1 22416 1
+22416 22416 1
+1 22417 1
+22417 22417 1
+1 22418 1
+22418 22418 1
+1 22419 1
+22419 22419 1
+1 22420 1
+22420 22420 1
+1 22421 1
+22421 22421 1
+1 22422 1
+22422 22422 1
+1 22423 1
+22423 22423 1
+1 22424 1
+22424 22424 1
+1 22425 1
+22425 22425 1
+1 22426 1
+22426 22426 1
+1 22427 1
+22427 22427 1
+1 22428 1
+22428 22428 1
+1 22429 1
+22429 22429 1
+1 22430 1
+22430 22430 1
+1 22431 1
+22431 22431 1
+1 22432 1
+22432 22432 1
+1 22433 1
+22433 22433 1
+1 22434 1
+22434 22434 1
+1 22435 1
+22435 22435 1
+1 22436 1
+22436 22436 1
+1 22437 1
+22437 22437 1
+1 22438 1
+22438 22438 1
+1 22439 1
+22439 22439 1
+1 22440 1
+22440 22440 1
+1 22441 1
+22441 22441 1
+1 22442 1
+22442 22442 1
+1 22443 1
+22443 22443 1
+1 22444 1
+22444 22444 1
+1 22445 1
+22445 22445 1
+1 22446 1
+22446 22446 1
+1 22447 1
+22447 22447 1
+1 22448 1
+22448 22448 1
+1 22449 1
+22449 22449 1
+1 22450 1
+22450 22450 1
+1 22451 1
+22451 22451 1
+1 22452 1
+22452 22452 1
+1 22453 1
+22453 22453 1
+1 22454 1
+22454 22454 1
+1 22455 1
+22455 22455 1
+1 22456 1
+22456 22456 1
+1 22457 1
+22457 22457 1
+1 22458 1
+22458 22458 1
+1 22459 1
+22459 22459 1
+1 22460 1
+22460 22460 1
+1 22461 1
+22461 22461 1
+1 22462 1
+22462 22462 1
+1 22463 1
+22463 22463 1
+1 22464 1
+22464 22464 1
+1 22465 1
+22465 22465 1
+1 22466 1
+22466 22466 1
+1 22467 1
+22467 22467 1
+1 22468 1
+22468 22468 1
+1 22469 1
+22469 22469 1
+1 22470 1
+22470 22470 1
+1 22471 1
+22471 22471 1
+1 22472 1
+22472 22472 1
+1 22473 1
+22473 22473 1
+1 22474 1
+22474 22474 1
+1 22475 1
+22475 22475 1
+1 22476 1
+22476 22476 1
+1 22477 1
+22477 22477 1
+1 22478 1
+22478 22478 1
+1 22479 1
+22479 22479 1
+1 22480 1
+22480 22480 1
+1 22481 1
+22481 22481 1
+1 22482 1
+22482 22482 1
+1 22483 1
+22483 22483 1
+1 22484 1
+22484 22484 1
+1 22485 1
+22485 22485 1
+1 22486 1
+22486 22486 1
+1 22487 1
+22487 22487 1
+1 22488 1
+22488 22488 1
+1 22489 1
+22489 22489 1
+1 22490 1
+22490 22490 1
+1 22491 1
+22491 22491 1
+1 22492 1
+22492 22492 1
+1 22493 1
+22493 22493 1
+1 22494 1
+22494 22494 1
+1 22495 1
+22495 22495 1
+1 22496 1
+22496 22496 1
+1 22497 1
+22497 22497 1
+1 22498 1
+22498 22498 1
+1 22499 1
+22499 22499 1
+1 22500 1
+22500 22500 1
+1 22501 1
+22501 22501 1
+1 22502 1
+22502 22502 1
+1 22503 1
+22503 22503 1
+1 22504 1
+22504 22504 1
+1 22505 1
+22505 22505 1
+1 22506 1
+22506 22506 1
+1 22507 1
+22507 22507 1
+1 22508 1
+22508 22508 1
+1 22509 1
+22509 22509 1
+1 22510 1
+22510 22510 1
+1 22511 1
+22511 22511 1
+1 22512 1
+22512 22512 1
+1 22513 1
+22513 22513 1
+1 22514 1
+22514 22514 1
+1 22515 1
+22515 22515 1
+1 22516 1
+22516 22516 1
+1 22517 1
+22517 22517 1
+1 22518 1
+22518 22518 1
+1 22519 1
+22519 22519 1
+1 22520 1
+22520 22520 1
+1 22521 1
+22521 22521 1
+1 22522 1
+22522 22522 1
+1 22523 1
+22523 22523 1
+1 22524 1
+22524 22524 1
+1 22525 1
+22525 22525 1
+1 22526 1
+22526 22526 1
+1 22527 1
+22527 22527 1
+1 22528 1
+22528 22528 1
+1 22529 1
+22529 22529 1
+1 22530 1
+22530 22530 1
+1 22531 1
+22531 22531 1
+1 22532 1
+22532 22532 1
+1 22533 1
+22533 22533 1
+1 22534 1
+22534 22534 1
+1 22535 1
+22535 22535 1
+1 22536 1
+22536 22536 1
+1 22537 1
+22537 22537 1
+1 22538 1
+22538 22538 1
+1 22539 1
+22539 22539 1
+1 22540 1
+22540 22540 1
+1 22541 1
+22541 22541 1
+1 22542 1
+22542 22542 1
+1 22543 1
+22543 22543 1
+1 22544 1
+22544 22544 1
+1 22545 1
+22545 22545 1
+1 22546 1
+22546 22546 1
+1 22547 1
+22547 22547 1
+1 22548 1
+22548 22548 1
+1 22549 1
+22549 22549 1
+1 22550 1
+22550 22550 1
+1 22551 1
+22551 22551 1
+1 22552 1
+22552 22552 1
+1 22553 1
+22553 22553 1
+1 22554 1
+22554 22554 1
+1 22555 1
+22555 22555 1
+1 22556 1
+22556 22556 1
+1 22557 1
+22557 22557 1
+1 22558 1
+22558 22558 1
+1 22559 1
+22559 22559 1
+1 22560 1
+22560 22560 1
+1 22561 1
+22561 22561 1
+1 22562 1
+22562 22562 1
+1 22563 1
+22563 22563 1
+1 22564 1
+22564 22564 1
+1 22565 1
+22565 22565 1
+1 22566 1
+22566 22566 1
+1 22567 1
+22567 22567 1
+1 22568 1
+22568 22568 1
+1 22569 1
+22569 22569 1
+1 22570 1
+22570 22570 1
+1 22571 1
+22571 22571 1
+1 22572 1
+22572 22572 1
+1 22573 1
+22573 22573 1
+1 22574 1
+22574 22574 1
+1 22575 1
+22575 22575 1
+1 22576 1
+22576 22576 1
+1 22577 1
+22577 22577 1
+1 22578 1
+22578 22578 1
+1 22579 1
+22579 22579 1
+1 22580 1
+22580 22580 1
+1 22581 1
+22581 22581 1
+1 22582 1
+22582 22582 1
+1 22583 1
+22583 22583 1
+1 22584 1
+22584 22584 1
+1 22585 1
+22585 22585 1
+1 22586 1
+22586 22586 1
+1 22587 1
+22587 22587 1
+1 22588 1
+22588 22588 1
+1 22589 1
+22589 22589 1
+1 22590 1
+22590 22590 1
+1 22591 1
+22591 22591 1
+1 22592 1
+22592 22592 1
+1 22593 1
+22593 22593 1
+1 22594 1
+22594 22594 1
+1 22595 1
+22595 22595 1
+1 22596 1
+22596 22596 1
+1 22597 1
+22597 22597 1
+1 22598 1
+22598 22598 1
+1 22599 1
+22599 22599 1
+1 22600 1
+22600 22600 1
+1 22601 1
+22601 22601 1
+1 22602 1
+22602 22602 1
+1 22603 1
+22603 22603 1
+1 22604 1
+22604 22604 1
+1 22605 1
+22605 22605 1
+1 22606 1
+22606 22606 1
+1 22607 1
+22607 22607 1
+1 22608 1
+22608 22608 1
+1 22609 1
+22609 22609 1
+1 22610 1
+22610 22610 1
+1 22611 1
+22611 22611 1
+1 22612 1
+22612 22612 1
+1 22613 1
+22613 22613 1
+1 22614 1
+22614 22614 1
+1 22615 1
+22615 22615 1
+1 22616 1
+22616 22616 1
+1 22617 1
+22617 22617 1
+1 22618 1
+22618 22618 1
+1 22619 1
+22619 22619 1
+1 22620 1
+22620 22620 1
+1 22621 1
+22621 22621 1
+1 22622 1
+22622 22622 1
+1 22623 1
+22623 22623 1
+1 22624 1
+22624 22624 1
+1 22625 1
+22625 22625 1
+1 22626 1
+22626 22626 1
+1 22627 1
+22627 22627 1
+1 22628 1
+22628 22628 1
+1 22629 1
+22629 22629 1
+1 22630 1
+22630 22630 1
+1 22631 1
+22631 22631 1
+1 22632 1
+22632 22632 1
+1 22633 1
+22633 22633 1
+1 22634 1
+22634 22634 1
+1 22635 1
+22635 22635 1
+1 22636 1
+22636 22636 1
+1 22637 1
+22637 22637 1
+1 22638 1
+22638 22638 1
+1 22639 1
+22639 22639 1
+1 22640 1
+22640 22640 1
+1 22641 1
+22641 22641 1
+1 22642 1
+22642 22642 1
+1 22643 1
+22643 22643 1
+1 22644 1
+22644 22644 1
+1 22645 1
+22645 22645 1
+1 22646 1
+22646 22646 1
+1 22647 1
+22647 22647 1
+1 22648 1
+22648 22648 1
+1 22649 1
+22649 22649 1
+1 22650 1
+22650 22650 1
+1 22651 1
+22651 22651 1
+1 22652 1
+22652 22652 1
+1 22653 1
+22653 22653 1
+1 22654 1
+22654 22654 1
+1 22655 1
+22655 22655 1
+1 22656 1
+22656 22656 1
+1 22657 1
+22657 22657 1
+1 22658 1
+22658 22658 1
+1 22659 1
+22659 22659 1
+1 22660 1
+22660 22660 1
+1 22661 1
+22661 22661 1
+1 22662 1
+22662 22662 1
+1 22663 1
+22663 22663 1
+1 22664 1
+22664 22664 1
+1 22665 1
+22665 22665 1
+1 22666 1
+22666 22666 1
+1 22667 1
+22667 22667 1
+1 22668 1
+22668 22668 1
+1 22669 1
+22669 22669 1
+1 22670 1
+22670 22670 1
+1 22671 1
+22671 22671 1
+1 22672 1
+22672 22672 1
+1 22673 1
+22673 22673 1
+1 22674 1
+22674 22674 1
+1 22675 1
+22675 22675 1
+1 22676 1
+22676 22676 1
+1 22677 1
+22677 22677 1
+1 22678 1
+22678 22678 1
+1 22679 1
+22679 22679 1
+1 22680 1
+22680 22680 1
+1 22681 1
+22681 22681 1
+1 22682 1
+22682 22682 1
+1 22683 1
+22683 22683 1
+1 22684 1
+22684 22684 1
+1 22685 1
+22685 22685 1
+1 22686 1
+22686 22686 1
+1 22687 1
+22687 22687 1
+1 22688 1
+22688 22688 1
+1 22689 1
+22689 22689 1
+1 22690 1
+22690 22690 1
+1 22691 1
+22691 22691 1
+1 22692 1
+22692 22692 1
+1 22693 1
+22693 22693 1
+1 22694 1
+22694 22694 1
+1 22695 1
+22695 22695 1
+1 22696 1
+22696 22696 1
+1 22697 1
+22697 22697 1
+1 22698 1
+22698 22698 1
+1 22699 1
+22699 22699 1
+1 22700 1
+22700 22700 1
+1 22701 1
+22701 22701 1
+1 22702 1
+22702 22702 1
+1 22703 1
+22703 22703 1
+1 22704 1
+22704 22704 1
+1 22705 1
+22705 22705 1
+1 22706 1
+22706 22706 1
+1 22707 1
+22707 22707 1
+1 22708 1
+22708 22708 1
+1 22709 1
+22709 22709 1
+1 22710 1
+22710 22710 1
+1 22711 1
+22711 22711 1
+1 22712 1
+22712 22712 1
+1 22713 1
+22713 22713 1
+1 22714 1
+22714 22714 1
+1 22715 1
+22715 22715 1
+1 22716 1
+22716 22716 1
+1 22717 1
+22717 22717 1
+1 22718 1
+22718 22718 1
+1 22719 1
+22719 22719 1
+1 22720 1
+22720 22720 1
+1 22721 1
+22721 22721 1
+1 22722 1
+22722 22722 1
+1 22723 1
+22723 22723 1
+1 22724 1
+22724 22724 1
+1 22725 1
+22725 22725 1
+1 22726 1
+22726 22726 1
+1 22727 1
+22727 22727 1
+1 22728 1
+22728 22728 1
+1 22729 1
+22729 22729 1
+1 22730 1
+22730 22730 1
+1 22731 1
+22731 22731 1
+1 22732 1
+22732 22732 1
+1 22733 1
+22733 22733 1
+1 22734 1
+22734 22734 1
+1 22735 1
+22735 22735 1
+1 22736 1
+22736 22736 1
+1 22737 1
+22737 22737 1
+1 22738 1
+22738 22738 1
+1 22739 1
+22739 22739 1
+1 22740 1
+22740 22740 1
+1 22741 1
+22741 22741 1
+1 22742 1
+22742 22742 1
+1 22743 1
+22743 22743 1
+1 22744 1
+22744 22744 1
+1 22745 1
+22745 22745 1
+1 22746 1
+22746 22746 1
+1 22747 1
+22747 22747 1
+1 22748 1
+22748 22748 1
+1 22749 1
+22749 22749 1
+1 22750 1
+22750 22750 1
+1 22751 1
+22751 22751 1
+1 22752 1
+22752 22752 1
+1 22753 1
+22753 22753 1
+1 22754 1
+22754 22754 1
+1 22755 1
+22755 22755 1
+1 22756 1
+22756 22756 1
+1 22757 1
+22757 22757 1
+1 22758 1
+22758 22758 1
+1 22759 1
+22759 22759 1
+1 22760 1
+22760 22760 1
+1 22761 1
+22761 22761 1
+1 22762 1
+22762 22762 1
+1 22763 1
+22763 22763 1
+1 22764 1
+22764 22764 1
+1 22765 1
+22765 22765 1
+1 22766 1
+22766 22766 1
+1 22767 1
+22767 22767 1
+1 22768 1
+22768 22768 1
+1 22769 1
+22769 22769 1
+1 22770 1
+22770 22770 1
+1 22771 1
+22771 22771 1
+1 22772 1
+22772 22772 1
+1 22773 1
+22773 22773 1
+1 22774 1
+22774 22774 1
+1 22775 1
+22775 22775 1
+1 22776 1
+22776 22776 1
+1 22777 1
+22777 22777 1
+1 22778 1
+22778 22778 1
+1 22779 1
+22779 22779 1
+1 22780 1
+22780 22780 1
+1 22781 1
+22781 22781 1
+1 22782 1
+22782 22782 1
+1 22783 1
+22783 22783 1
+1 22784 1
+22784 22784 1
+1 22785 1
+22785 22785 1
+1 22786 1
+22786 22786 1
+1 22787 1
+22787 22787 1
+1 22788 1
+22788 22788 1
+1 22789 1
+22789 22789 1
+1 22790 1
+22790 22790 1
+1 22791 1
+22791 22791 1
+1 22792 1
+22792 22792 1
+1 22793 1
+22793 22793 1
+1 22794 1
+22794 22794 1
+1 22795 1
+22795 22795 1
+1 22796 1
+22796 22796 1
+1 22797 1
+22797 22797 1
+1 22798 1
+22798 22798 1
+1 22799 1
+22799 22799 1
+1 22800 1
+22800 22800 1
+1 22801 1
+22801 22801 1
+1 22802 1
+22802 22802 1
+1 22803 1
+22803 22803 1
+1 22804 1
+22804 22804 1
+1 22805 1
+22805 22805 1
+1 22806 1
+22806 22806 1
+1 22807 1
+22807 22807 1
+1 22808 1
+22808 22808 1
+1 22809 1
+22809 22809 1
+1 22810 1
+22810 22810 1
+1 22811 1
+22811 22811 1
+1 22812 1
+22812 22812 1
+1 22813 1
+22813 22813 1
+1 22814 1
+22814 22814 1
+1 22815 1
+22815 22815 1
+1 22816 1
+22816 22816 1
+1 22817 1
+22817 22817 1
+1 22818 1
+22818 22818 1
+1 22819 1
+22819 22819 1
+1 22820 1
+22820 22820 1
+1 22821 1
+22821 22821 1
+1 22822 1
+22822 22822 1
+1 22823 1
+22823 22823 1
+1 22824 1
+22824 22824 1
+1 22825 1
+22825 22825 1
+1 22826 1
+22826 22826 1
+1 22827 1
+22827 22827 1
+1 22828 1
+22828 22828 1
+1 22829 1
+22829 22829 1
+1 22830 1
+22830 22830 1
+1 22831 1
+22831 22831 1
+1 22832 1
+22832 22832 1
+1 22833 1
+22833 22833 1
+1 22834 1
+22834 22834 1
+1 22835 1
+22835 22835 1
+1 22836 1
+22836 22836 1
+1 22837 1
+22837 22837 1
+1 22838 1
+22838 22838 1
+1 22839 1
+22839 22839 1
+1 22840 1
+22840 22840 1
+1 22841 1
+22841 22841 1
+1 22842 1
+22842 22842 1
+1 22843 1
+22843 22843 1
+1 22844 1
+22844 22844 1
+1 22845 1
+22845 22845 1
+1 22846 1
+22846 22846 1
+1 22847 1
+22847 22847 1
+1 22848 1
+22848 22848 1
+1 22849 1
+22849 22849 1
+1 22850 1
+22850 22850 1
+1 22851 1
+22851 22851 1
+1 22852 1
+22852 22852 1
+1 22853 1
+22853 22853 1
+1 22854 1
+22854 22854 1
+1 22855 1
+22855 22855 1
+1 22856 1
+22856 22856 1
+1 22857 1
+22857 22857 1
+1 22858 1
+22858 22858 1
+1 22859 1
+22859 22859 1
+1 22860 1
+22860 22860 1
+1 22861 1
+22861 22861 1
+1 22862 1
+22862 22862 1
+1 22863 1
+22863 22863 1
+1 22864 1
+22864 22864 1
+1 22865 1
+22865 22865 1
+1 22866 1
+22866 22866 1
+1 22867 1
+22867 22867 1
+1 22868 1
+22868 22868 1
+1 22869 1
+22869 22869 1
+1 22870 1
+22870 22870 1
+1 22871 1
+22871 22871 1
+1 22872 1
+22872 22872 1
+1 22873 1
+22873 22873 1
+1 22874 1
+22874 22874 1
+1 22875 1
+22875 22875 1
+1 22876 1
+22876 22876 1
+1 22877 1
+22877 22877 1
+1 22878 1
+22878 22878 1
+1 22879 1
+22879 22879 1
+1 22880 1
+22880 22880 1
+1 22881 1
+22881 22881 1
+1 22882 1
+22882 22882 1
+1 22883 1
+22883 22883 1
+1 22884 1
+22884 22884 1
+1 22885 1
+22885 22885 1
+1 22886 1
+22886 22886 1
+1 22887 1
+22887 22887 1
+1 22888 1
+22888 22888 1
+1 22889 1
+22889 22889 1
+1 22890 1
+22890 22890 1
+1 22891 1
+22891 22891 1
+1 22892 1
+22892 22892 1
+1 22893 1
+22893 22893 1
+1 22894 1
+22894 22894 1
+1 22895 1
+22895 22895 1
+1 22896 1
+22896 22896 1
+1 22897 1
+22897 22897 1
+1 22898 1
+22898 22898 1
+1 22899 1
+22899 22899 1
+1 22900 1
+22900 22900 1
+1 22901 1
+22901 22901 1
+1 22902 1
+22902 22902 1
+1 22903 1
+22903 22903 1
+1 22904 1
+22904 22904 1
+1 22905 1
+22905 22905 1
+1 22906 1
+22906 22906 1
+1 22907 1
+22907 22907 1
+1 22908 1
+22908 22908 1
+1 22909 1
+22909 22909 1
+1 22910 1
+22910 22910 1
+1 22911 1
+22911 22911 1
+1 22912 1
+22912 22912 1
+1 22913 1
+22913 22913 1
+1 22914 1
+22914 22914 1
+1 22915 1
+22915 22915 1
+1 22916 1
+22916 22916 1
+1 22917 1
+22917 22917 1
+1 22918 1
+22918 22918 1
+1 22919 1
+22919 22919 1
+1 22920 1
+22920 22920 1
+1 22921 1
+22921 22921 1
+1 22922 1
+22922 22922 1
+1 22923 1
+22923 22923 1
+1 22924 1
+22924 22924 1
+1 22925 1
+22925 22925 1
+1 22926 1
+22926 22926 1
+1 22927 1
+22927 22927 1
+1 22928 1
+22928 22928 1
+1 22929 1
+22929 22929 1
+1 22930 1
+22930 22930 1
+1 22931 1
+22931 22931 1
+1 22932 1
+22932 22932 1
+1 22933 1
+22933 22933 1
+1 22934 1
+22934 22934 1
+1 22935 1
+22935 22935 1
+1 22936 1
+22936 22936 1
+1 22937 1
+22937 22937 1
+1 22938 1
+22938 22938 1
+1 22939 1
+22939 22939 1
+1 22940 1
+22940 22940 1
+1 22941 1
+22941 22941 1
+1 22942 1
+22942 22942 1
+1 22943 1
+22943 22943 1
+1 22944 1
+22944 22944 1
+1 22945 1
+22945 22945 1
+1 22946 1
+22946 22946 1
+1 22947 1
+22947 22947 1
+1 22948 1
+22948 22948 1
+1 22949 1
+22949 22949 1
+1 22950 1
+22950 22950 1
+1 22951 1
+22951 22951 1
+1 22952 1
+22952 22952 1
+1 22953 1
+22953 22953 1
+1 22954 1
+22954 22954 1
+1 22955 1
+22955 22955 1
+1 22956 1
+22956 22956 1
+1 22957 1
+22957 22957 1
+1 22958 1
+22958 22958 1
+1 22959 1
+22959 22959 1
+1 22960 1
+22960 22960 1
+1 22961 1
+22961 22961 1
+1 22962 1
+22962 22962 1
+1 22963 1
+22963 22963 1
+1 22964 1
+22964 22964 1
+1 22965 1
+22965 22965 1
+1 22966 1
+22966 22966 1
+1 22967 1
+22967 22967 1
+1 22968 1
+22968 22968 1
+1 22969 1
+22969 22969 1
+1 22970 1
+22970 22970 1
+1 22971 1
+22971 22971 1
+1 22972 1
+22972 22972 1
+1 22973 1
+22973 22973 1
+1 22974 1
+22974 22974 1
+1 22975 1
+22975 22975 1
+1 22976 1
+22976 22976 1
+1 22977 1
+22977 22977 1
+1 22978 1
+22978 22978 1
+1 22979 1
+22979 22979 1
+1 22980 1
+22980 22980 1
+1 22981 1
+22981 22981 1
+1 22982 1
+22982 22982 1
+1 22983 1
+22983 22983 1
+1 22984 1
+22984 22984 1
+1 22985 1
+22985 22985 1
+1 22986 1
+22986 22986 1
+1 22987 1
+22987 22987 1
+1 22988 1
+22988 22988 1
+1 22989 1
+22989 22989 1
+1 22990 1
+22990 22990 1
+1 22991 1
+22991 22991 1
+1 22992 1
+22992 22992 1
+1 22993 1
+22993 22993 1
+1 22994 1
+22994 22994 1
+1 22995 1
+22995 22995 1
+1 22996 1
+22996 22996 1
+1 22997 1
+22997 22997 1
+1 22998 1
+22998 22998 1
+1 22999 1
+22999 22999 1
+1 23000 1
+23000 23000 1
+1 23001 1
+23001 23001 1
+1 23002 1
+23002 23002 1
+1 23003 1
+23003 23003 1
+1 23004 1
+23004 23004 1
+1 23005 1
+23005 23005 1
+1 23006 1
+23006 23006 1
+1 23007 1
+23007 23007 1
+1 23008 1
+23008 23008 1
+1 23009 1
+23009 23009 1
+1 23010 1
+23010 23010 1
+1 23011 1
+23011 23011 1
+1 23012 1
+23012 23012 1
+1 23013 1
+23013 23013 1
+1 23014 1
+23014 23014 1
+1 23015 1
+23015 23015 1
+1 23016 1
+23016 23016 1
+1 23017 1
+23017 23017 1
+1 23018 1
+23018 23018 1
+1 23019 1
+23019 23019 1
+1 23020 1
+23020 23020 1
+1 23021 1
+23021 23021 1
+1 23022 1
+23022 23022 1
+1 23023 1
+23023 23023 1
+1 23024 1
+23024 23024 1
+1 23025 1
+23025 23025 1
+1 23026 1
+23026 23026 1
+1 23027 1
+23027 23027 1
+1 23028 1
+23028 23028 1
+1 23029 1
+23029 23029 1
+1 23030 1
+23030 23030 1
+1 23031 1
+23031 23031 1
+1 23032 1
+23032 23032 1
+1 23033 1
+23033 23033 1
+1 23034 1
+23034 23034 1
+1 23035 1
+23035 23035 1
+1 23036 1
+23036 23036 1
+1 23037 1
+23037 23037 1
+1 23038 1
+23038 23038 1
+1 23039 1
+23039 23039 1
+1 23040 1
+23040 23040 1
+1 23041 1
+23041 23041 1
+1 23042 1
+23042 23042 1
+1 23043 1
+23043 23043 1
+1 23044 1
+23044 23044 1
+1 23045 1
+23045 23045 1
+1 23046 1
+23046 23046 1
+1 23047 1
+23047 23047 1
+1 23048 1
+23048 23048 1
+1 23049 1
+23049 23049 1
+1 23050 1
+23050 23050 1
+1 23051 1
+23051 23051 1
+1 23052 1
+23052 23052 1
+1 23053 1
+23053 23053 1
+1 23054 1
+23054 23054 1
+1 23055 1
+23055 23055 1
+1 23056 1
+23056 23056 1
+1 23057 1
+23057 23057 1
+1 23058 1
+23058 23058 1
+1 23059 1
+23059 23059 1
+1 23060 1
+23060 23060 1
+1 23061 1
+23061 23061 1
+1 23062 1
+23062 23062 1
+1 23063 1
+23063 23063 1
+1 23064 1
+23064 23064 1
+1 23065 1
+23065 23065 1
+1 23066 1
+23066 23066 1
+1 23067 1
+23067 23067 1
+1 23068 1
+23068 23068 1
+1 23069 1
+23069 23069 1
+1 23070 1
+23070 23070 1
+1 23071 1
+23071 23071 1
+1 23072 1
+23072 23072 1
+1 23073 1
+23073 23073 1
+1 23074 1
+23074 23074 1
+1 23075 1
+23075 23075 1
+1 23076 1
+23076 23076 1
+1 23077 1
+23077 23077 1
+1 23078 1
+23078 23078 1
+1 23079 1
+23079 23079 1
+1 23080 1
+23080 23080 1
+1 23081 1
+23081 23081 1
+1 23082 1
+23082 23082 1
+1 23083 1
+23083 23083 1
+1 23084 1
+23084 23084 1
+1 23085 1
+23085 23085 1
+1 23086 1
+23086 23086 1
+1 23087 1
+23087 23087 1
+1 23088 1
+23088 23088 1
+1 23089 1
+23089 23089 1
+1 23090 1
+23090 23090 1
+1 23091 1
+23091 23091 1
+1 23092 1
+23092 23092 1
+1 23093 1
+23093 23093 1
+1 23094 1
+23094 23094 1
+1 23095 1
+23095 23095 1
+1 23096 1
+23096 23096 1
+1 23097 1
+23097 23097 1
+1 23098 1
+23098 23098 1
+1 23099 1
+23099 23099 1
+1 23100 1
+23100 23100 1
+1 23101 1
+23101 23101 1
+1 23102 1
+23102 23102 1
+1 23103 1
+23103 23103 1
+1 23104 1
+23104 23104 1
+1 23105 1
+23105 23105 1
+1 23106 1
+23106 23106 1
+1 23107 1
+23107 23107 1
+1 23108 1
+23108 23108 1
+1 23109 1
+23109 23109 1
+1 23110 1
+23110 23110 1
+1 23111 1
+23111 23111 1
+1 23112 1
+23112 23112 1
+1 23113 1
+23113 23113 1
+1 23114 1
+23114 23114 1
+1 23115 1
+23115 23115 1
+1 23116 1
+23116 23116 1
+1 23117 1
+23117 23117 1
+1 23118 1
+23118 23118 1
+1 23119 1
+23119 23119 1
+1 23120 1
+23120 23120 1
+1 23121 1
+23121 23121 1
+1 23122 1
+23122 23122 1
+1 23123 1
+23123 23123 1
+1 23124 1
+23124 23124 1
+1 23125 1
+23125 23125 1
+1 23126 1
+23126 23126 1
+1 23127 1
+23127 23127 1
+1 23128 1
+23128 23128 1
+1 23129 1
+23129 23129 1
+1 23130 1
+23130 23130 1
+1 23131 1
+23131 23131 1
+1 23132 1
+23132 23132 1
+1 23133 1
+23133 23133 1
+1 23134 1
+23134 23134 1
+1 23135 1
+23135 23135 1
+1 23136 1
+23136 23136 1
+1 23137 1
+23137 23137 1
+1 23138 1
+23138 23138 1
+1 23139 1
+23139 23139 1
+1 23140 1
+23140 23140 1
+1 23141 1
+23141 23141 1
+1 23142 1
+23142 23142 1
+1 23143 1
+23143 23143 1
+1 23144 1
+23144 23144 1
+1 23145 1
+23145 23145 1
+1 23146 1
+23146 23146 1
+1 23147 1
+23147 23147 1
+1 23148 1
+23148 23148 1
+1 23149 1
+23149 23149 1
+1 23150 1
+23150 23150 1
+1 23151 1
+23151 23151 1
+1 23152 1
+23152 23152 1
+1 23153 1
+23153 23153 1
+1 23154 1
+23154 23154 1
+1 23155 1
+23155 23155 1
+1 23156 1
+23156 23156 1
+1 23157 1
+23157 23157 1
+1 23158 1
+23158 23158 1
+1 23159 1
+23159 23159 1
+1 23160 1
+23160 23160 1
+1 23161 1
+23161 23161 1
+1 23162 1
+23162 23162 1
+1 23163 1
+23163 23163 1
+1 23164 1
+23164 23164 1
+1 23165 1
+23165 23165 1
+1 23166 1
+23166 23166 1
+1 23167 1
+23167 23167 1
+1 23168 1
+23168 23168 1
+1 23169 1
+23169 23169 1
+1 23170 1
+23170 23170 1
+1 23171 1
+23171 23171 1
+1 23172 1
+23172 23172 1
+1 23173 1
+23173 23173 1
+1 23174 1
+23174 23174 1
+1 23175 1
+23175 23175 1
+1 23176 1
+23176 23176 1
+1 23177 1
+23177 23177 1
+1 23178 1
+23178 23178 1
+1 23179 1
+23179 23179 1
+1 23180 1
+23180 23180 1
+1 23181 1
+23181 23181 1
+1 23182 1
+23182 23182 1
+1 23183 1
+23183 23183 1
+1 23184 1
+23184 23184 1
+1 23185 1
+23185 23185 1
+1 23186 1
+23186 23186 1
+1 23187 1
+23187 23187 1
+1 23188 1
+23188 23188 1
+1 23189 1
+23189 23189 1
+1 23190 1
+23190 23190 1
+1 23191 1
+23191 23191 1
+1 23192 1
+23192 23192 1
+1 23193 1
+23193 23193 1
+1 23194 1
+23194 23194 1
+1 23195 1
+23195 23195 1
+1 23196 1
+23196 23196 1
+1 23197 1
+23197 23197 1
+1 23198 1
+23198 23198 1
+1 23199 1
+23199 23199 1
+1 23200 1
+23200 23200 1
+1 23201 1
+23201 23201 1
+1 23202 1
+23202 23202 1
+1 23203 1
+23203 23203 1
+1 23204 1
+23204 23204 1
+1 23205 1
+23205 23205 1
+1 23206 1
+23206 23206 1
+1 23207 1
+23207 23207 1
+1 23208 1
+23208 23208 1
+1 23209 1
+23209 23209 1
+1 23210 1
+23210 23210 1
+1 23211 1
+23211 23211 1
+1 23212 1
+23212 23212 1
+1 23213 1
+23213 23213 1
+1 23214 1
+23214 23214 1
+1 23215 1
+23215 23215 1
+1 23216 1
+23216 23216 1
+1 23217 1
+23217 23217 1
+1 23218 1
+23218 23218 1
+1 23219 1
+23219 23219 1
+1 23220 1
+23220 23220 1
+1 23221 1
+23221 23221 1
+1 23222 1
+23222 23222 1
+1 23223 1
+23223 23223 1
+1 23224 1
+23224 23224 1
+1 23225 1
+23225 23225 1
+1 23226 1
+23226 23226 1
+1 23227 1
+23227 23227 1
+1 23228 1
+23228 23228 1
+1 23229 1
+23229 23229 1
+1 23230 1
+23230 23230 1
+1 23231 1
+23231 23231 1
+1 23232 1
+23232 23232 1
+1 23233 1
+23233 23233 1
+1 23234 1
+23234 23234 1
+1 23235 1
+23235 23235 1
+1 23236 1
+23236 23236 1
+1 23237 1
+23237 23237 1
+1 23238 1
+23238 23238 1
+1 23239 1
+23239 23239 1
+1 23240 1
+23240 23240 1
+1 23241 1
+23241 23241 1
+1 23242 1
+23242 23242 1
+1 23243 1
+23243 23243 1
+1 23244 1
+23244 23244 1
+1 23245 1
+23245 23245 1
+1 23246 1
+23246 23246 1
+1 23247 1
+23247 23247 1
+1 23248 1
+23248 23248 1
+1 23249 1
+23249 23249 1
+1 23250 1
+23250 23250 1
+1 23251 1
+23251 23251 1
+1 23252 1
+23252 23252 1
+1 23253 1
+23253 23253 1
+1 23254 1
+23254 23254 1
+1 23255 1
+23255 23255 1
+1 23256 1
+23256 23256 1
+1 23257 1
+23257 23257 1
+1 23258 1
+23258 23258 1
+1 23259 1
+23259 23259 1
+1 23260 1
+23260 23260 1
+1 23261 1
+23261 23261 1
+1 23262 1
+23262 23262 1
+1 23263 1
+23263 23263 1
+1 23264 1
+23264 23264 1
+1 23265 1
+23265 23265 1
+1 23266 1
+23266 23266 1
+1 23267 1
+23267 23267 1
+1 23268 1
+23268 23268 1
+1 23269 1
+23269 23269 1
+1 23270 1
+23270 23270 1
+1 23271 1
+23271 23271 1
+1 23272 1
+23272 23272 1
+1 23273 1
+23273 23273 1
+1 23274 1
+23274 23274 1
+1 23275 1
+23275 23275 1
+1 23276 1
+23276 23276 1
+1 23277 1
+23277 23277 1
+1 23278 1
+23278 23278 1
+1 23279 1
+23279 23279 1
+1 23280 1
+23280 23280 1
+1 23281 1
+23281 23281 1
+1 23282 1
+23282 23282 1
+1 23283 1
+23283 23283 1
+1 23284 1
+23284 23284 1
+1 23285 1
+23285 23285 1
+1 23286 1
+23286 23286 1
+1 23287 1
+23287 23287 1
+1 23288 1
+23288 23288 1
+1 23289 1
+23289 23289 1
+1 23290 1
+23290 23290 1
+1 23291 1
+23291 23291 1
+1 23292 1
+23292 23292 1
+1 23293 1
+23293 23293 1
+1 23294 1
+23294 23294 1
+1 23295 1
+23295 23295 1
+1 23296 1
+23296 23296 1
+1 23297 1
+23297 23297 1
+1 23298 1
+23298 23298 1
+1 23299 1
+23299 23299 1
+1 23300 1
+23300 23300 1
+1 23301 1
+23301 23301 1
+1 23302 1
+23302 23302 1
+1 23303 1
+23303 23303 1
+1 23304 1
+23304 23304 1
+1 23305 1
+23305 23305 1
+1 23306 1
+23306 23306 1
+1 23307 1
+23307 23307 1
+1 23308 1
+23308 23308 1
+1 23309 1
+23309 23309 1
+1 23310 1
+23310 23310 1
+1 23311 1
+23311 23311 1
+1 23312 1
+23312 23312 1
+1 23313 1
+23313 23313 1
+1 23314 1
+23314 23314 1
+1 23315 1
+23315 23315 1
+1 23316 1
+23316 23316 1
+1 23317 1
+23317 23317 1
+1 23318 1
+23318 23318 1
+1 23319 1
+23319 23319 1
+1 23320 1
+23320 23320 1
+1 23321 1
+23321 23321 1
+1 23322 1
+23322 23322 1
+1 23323 1
+23323 23323 1
+1 23324 1
+23324 23324 1
+1 23325 1
+23325 23325 1
+1 23326 1
+23326 23326 1
+1 23327 1
+23327 23327 1
+1 23328 1
+23328 23328 1
+1 23329 1
+23329 23329 1
+1 23330 1
+23330 23330 1
+1 23331 1
+23331 23331 1
+1 23332 1
+23332 23332 1
+1 23333 1
+23333 23333 1
+1 23334 1
+23334 23334 1
+1 23335 1
+23335 23335 1
+1 23336 1
+23336 23336 1
+1 23337 1
+23337 23337 1
+1 23338 1
+23338 23338 1
+1 23339 1
+23339 23339 1
+1 23340 1
+23340 23340 1
+1 23341 1
+23341 23341 1
+1 23342 1
+23342 23342 1
+1 23343 1
+23343 23343 1
+1 23344 1
+23344 23344 1
+1 23345 1
+23345 23345 1
+1 23346 1
+23346 23346 1
+1 23347 1
+23347 23347 1
+1 23348 1
+23348 23348 1
+1 23349 1
+23349 23349 1
+1 23350 1
+23350 23350 1
+1 23351 1
+23351 23351 1
+1 23352 1
+23352 23352 1
+1 23353 1
+23353 23353 1
+1 23354 1
+23354 23354 1
+1 23355 1
+23355 23355 1
+1 23356 1
+23356 23356 1
+1 23357 1
+23357 23357 1
+1 23358 1
+23358 23358 1
+1 23359 1
+23359 23359 1
+1 23360 1
+23360 23360 1
+1 23361 1
+23361 23361 1
+1 23362 1
+23362 23362 1
+1 23363 1
+23363 23363 1
+1 23364 1
+23364 23364 1
+1 23365 1
+23365 23365 1
+1 23366 1
+23366 23366 1
+1 23367 1
+23367 23367 1
+1 23368 1
+23368 23368 1
+1 23369 1
+23369 23369 1
+1 23370 1
+23370 23370 1
+1 23371 1
+23371 23371 1
+1 23372 1
+23372 23372 1
+1 23373 1
+23373 23373 1
+1 23374 1
+23374 23374 1
+1 23375 1
+23375 23375 1
+1 23376 1
+23376 23376 1
+1 23377 1
+23377 23377 1
+1 23378 1
+23378 23378 1
+1 23379 1
+23379 23379 1
+1 23380 1
+23380 23380 1
+1 23381 1
+23381 23381 1
+1 23382 1
+23382 23382 1
+1 23383 1
+23383 23383 1
+1 23384 1
+23384 23384 1
+1 23385 1
+23385 23385 1
+1 23386 1
+23386 23386 1
+1 23387 1
+23387 23387 1
+1 23388 1
+23388 23388 1
+1 23389 1
+23389 23389 1
+1 23390 1
+23390 23390 1
+1 23391 1
+23391 23391 1
+1 23392 1
+23392 23392 1
+1 23393 1
+23393 23393 1
+1 23394 1
+23394 23394 1
+1 23395 1
+23395 23395 1
+1 23396 1
+23396 23396 1
+1 23397 1
+23397 23397 1
+1 23398 1
+23398 23398 1
+1 23399 1
+23399 23399 1
+1 23400 1
+23400 23400 1
+1 23401 1
+23401 23401 1
+1 23402 1
+23402 23402 1
+1 23403 1
+23403 23403 1
+1 23404 1
+23404 23404 1
+1 23405 1
+23405 23405 1
+1 23406 1
+23406 23406 1
+1 23407 1
+23407 23407 1
+1 23408 1
+23408 23408 1
+1 23409 1
+23409 23409 1
+1 23410 1
+23410 23410 1
+1 23411 1
+23411 23411 1
+1 23412 1
+23412 23412 1
+1 23413 1
+23413 23413 1
+1 23414 1
+23414 23414 1
+1 23415 1
+23415 23415 1
+1 23416 1
+23416 23416 1
+1 23417 1
+23417 23417 1
+1 23418 1
+23418 23418 1
+1 23419 1
+23419 23419 1
+1 23420 1
+23420 23420 1
+1 23421 1
+23421 23421 1
+1 23422 1
+23422 23422 1
+1 23423 1
+23423 23423 1
+1 23424 1
+23424 23424 1
+1 23425 1
+23425 23425 1
+1 23426 1
+23426 23426 1
+1 23427 1
+23427 23427 1
+1 23428 1
+23428 23428 1
+1 23429 1
+23429 23429 1
+1 23430 1
+23430 23430 1
+1 23431 1
+23431 23431 1
+1 23432 1
+23432 23432 1
+1 23433 1
+23433 23433 1
+1 23434 1
+23434 23434 1
+1 23435 1
+23435 23435 1
+1 23436 1
+23436 23436 1
+1 23437 1
+23437 23437 1
+1 23438 1
+23438 23438 1
+1 23439 1
+23439 23439 1
+1 23440 1
+23440 23440 1
+1 23441 1
+23441 23441 1
+1 23442 1
+23442 23442 1
+1 23443 1
+23443 23443 1
+1 23444 1
+23444 23444 1
+1 23445 1
+23445 23445 1
+1 23446 1
+23446 23446 1
+1 23447 1
+23447 23447 1
+1 23448 1
+23448 23448 1
+1 23449 1
+23449 23449 1
+1 23450 1
+23450 23450 1
+1 23451 1
+23451 23451 1
+1 23452 1
+23452 23452 1
+1 23453 1
+23453 23453 1
+1 23454 1
+23454 23454 1
+1 23455 1
+23455 23455 1
+1 23456 1
+23456 23456 1
+1 23457 1
+23457 23457 1
+1 23458 1
+23458 23458 1
+1 23459 1
+23459 23459 1
+1 23460 1
+23460 23460 1
+1 23461 1
+23461 23461 1
+1 23462 1
+23462 23462 1
+1 23463 1
+23463 23463 1
+1 23464 1
+23464 23464 1
+1 23465 1
+23465 23465 1
+1 23466 1
+23466 23466 1
+1 23467 1
+23467 23467 1
+1 23468 1
+23468 23468 1
+1 23469 1
+23469 23469 1
+1 23470 1
+23470 23470 1
+1 23471 1
+23471 23471 1
+1 23472 1
+23472 23472 1
+1 23473 1
+23473 23473 1
+1 23474 1
+23474 23474 1
+1 23475 1
+23475 23475 1
+1 23476 1
+23476 23476 1
+1 23477 1
+23477 23477 1
+1 23478 1
+23478 23478 1
+1 23479 1
+23479 23479 1
+1 23480 1
+23480 23480 1
+1 23481 1
+23481 23481 1
+1 23482 1
+23482 23482 1
+1 23483 1
+23483 23483 1
+1 23484 1
+23484 23484 1
+1 23485 1
+23485 23485 1
+1 23486 1
+23486 23486 1
+1 23487 1
+23487 23487 1
+1 23488 1
+23488 23488 1
+1 23489 1
+23489 23489 1
+1 23490 1
+23490 23490 1
+1 23491 1
+23491 23491 1
+1 23492 1
+23492 23492 1
+1 23493 1
+23493 23493 1
+1 23494 1
+23494 23494 1
+1 23495 1
+23495 23495 1
+1 23496 1
+23496 23496 1
+1 23497 1
+23497 23497 1
+1 23498 1
+23498 23498 1
+1 23499 1
+23499 23499 1
+1 23500 1
+23500 23500 1
+1 23501 1
+23501 23501 1
+1 23502 1
+23502 23502 1
+1 23503 1
+23503 23503 1
+1 23504 1
+23504 23504 1
+1 23505 1
+23505 23505 1
+1 23506 1
+23506 23506 1
+1 23507 1
+23507 23507 1
+1 23508 1
+23508 23508 1
+1 23509 1
+23509 23509 1
+1 23510 1
+23510 23510 1
+1 23511 1
+23511 23511 1
+1 23512 1
+23512 23512 1
+1 23513 1
+23513 23513 1
+1 23514 1
+23514 23514 1
+1 23515 1
+23515 23515 1
+1 23516 1
+23516 23516 1
+1 23517 1
+23517 23517 1
+1 23518 1
+23518 23518 1
+1 23519 1
+23519 23519 1
+1 23520 1
+23520 23520 1
+1 23521 1
+23521 23521 1
+1 23522 1
+23522 23522 1
+1 23523 1
+23523 23523 1
+1 23524 1
+23524 23524 1
+1 23525 1
+23525 23525 1
+1 23526 1
+23526 23526 1
+1 23527 1
+23527 23527 1
+1 23528 1
+23528 23528 1
+1 23529 1
+23529 23529 1
+1 23530 1
+23530 23530 1
+1 23531 1
+23531 23531 1
+1 23532 1
+23532 23532 1
+1 23533 1
+23533 23533 1
+1 23534 1
+23534 23534 1
+1 23535 1
+23535 23535 1
+1 23536 1
+23536 23536 1
+1 23537 1
+23537 23537 1
+1 23538 1
+23538 23538 1
+1 23539 1
+23539 23539 1
+1 23540 1
+23540 23540 1
+1 23541 1
+23541 23541 1
+1 23542 1
+23542 23542 1
+1 23543 1
+23543 23543 1
+1 23544 1
+23544 23544 1
+1 23545 1
+23545 23545 1
+1 23546 1
+23546 23546 1
+1 23547 1
+23547 23547 1
+1 23548 1
+23548 23548 1
+1 23549 1
+23549 23549 1
+1 23550 1
+23550 23550 1
+1 23551 1
+23551 23551 1
+1 23552 1
+23552 23552 1
+1 23553 1
+23553 23553 1
+1 23554 1
+23554 23554 1
+1 23555 1
+23555 23555 1
+1 23556 1
+23556 23556 1
+1 23557 1
+23557 23557 1
+1 23558 1
+23558 23558 1
+1 23559 1
+23559 23559 1
+1 23560 1
+23560 23560 1
+1 23561 1
+23561 23561 1
+1 23562 1
+23562 23562 1
+1 23563 1
+23563 23563 1
+1 23564 1
+23564 23564 1
+1 23565 1
+23565 23565 1
+1 23566 1
+23566 23566 1
+1 23567 1
+23567 23567 1
+1 23568 1
+23568 23568 1
+1 23569 1
+23569 23569 1
+1 23570 1
+23570 23570 1
+1 23571 1
+23571 23571 1
+1 23572 1
+23572 23572 1
+1 23573 1
+23573 23573 1
+1 23574 1
+23574 23574 1
+1 23575 1
+23575 23575 1
+1 23576 1
+23576 23576 1
+1 23577 1
+23577 23577 1
+1 23578 1
+23578 23578 1
+1 23579 1
+23579 23579 1
+1 23580 1
+23580 23580 1
+1 23581 1
+23581 23581 1
+1 23582 1
+23582 23582 1
+1 23583 1
+23583 23583 1
+1 23584 1
+23584 23584 1
+1 23585 1
+23585 23585 1
+1 23586 1
+23586 23586 1
+1 23587 1
+23587 23587 1
+1 23588 1
+23588 23588 1
+1 23589 1
+23589 23589 1
+1 23590 1
+23590 23590 1
+1 23591 1
+23591 23591 1
+1 23592 1
+23592 23592 1
+1 23593 1
+23593 23593 1
+1 23594 1
+23594 23594 1
+1 23595 1
+23595 23595 1
+1 23596 1
+23596 23596 1
+1 23597 1
+23597 23597 1
+1 23598 1
+23598 23598 1
+1 23599 1
+23599 23599 1
+1 23600 1
+23600 23600 1
+1 23601 1
+23601 23601 1
+1 23602 1
+23602 23602 1
+1 23603 1
+23603 23603 1
+1 23604 1
+23604 23604 1
+1 23605 1
+23605 23605 1
+1 23606 1
+23606 23606 1
+1 23607 1
+23607 23607 1
+1 23608 1
+23608 23608 1
+1 23609 1
+23609 23609 1
+1 23610 1
+23610 23610 1
+1 23611 1
+23611 23611 1
+1 23612 1
+23612 23612 1
+1 23613 1
+23613 23613 1
+1 23614 1
+23614 23614 1
+1 23615 1
+23615 23615 1
+1 23616 1
+23616 23616 1
+1 23617 1
+23617 23617 1
+1 23618 1
+23618 23618 1
+1 23619 1
+23619 23619 1
+1 23620 1
+23620 23620 1
+1 23621 1
+23621 23621 1
+1 23622 1
+23622 23622 1
+1 23623 1
+23623 23623 1
+1 23624 1
+23624 23624 1
+1 23625 1
+23625 23625 1
+1 23626 1
+23626 23626 1
+1 23627 1
+23627 23627 1
+1 23628 1
+23628 23628 1
+1 23629 1
+23629 23629 1
+1 23630 1
+23630 23630 1
+1 23631 1
+23631 23631 1
+1 23632 1
+23632 23632 1
+1 23633 1
+23633 23633 1
+1 23634 1
+23634 23634 1
+1 23635 1
+23635 23635 1
+1 23636 1
+23636 23636 1
+1 23637 1
+23637 23637 1
+1 23638 1
+23638 23638 1
+1 23639 1
+23639 23639 1
+1 23640 1
+23640 23640 1
+1 23641 1
+23641 23641 1
+1 23642 1
+23642 23642 1
+1 23643 1
+23643 23643 1
+1 23644 1
+23644 23644 1
+1 23645 1
+23645 23645 1
+1 23646 1
+23646 23646 1
+1 23647 1
+23647 23647 1
+1 23648 1
+23648 23648 1
+1 23649 1
+23649 23649 1
+1 23650 1
+23650 23650 1
+1 23651 1
+23651 23651 1
+1 23652 1
+23652 23652 1
+1 23653 1
+23653 23653 1
+1 23654 1
+23654 23654 1
+1 23655 1
+23655 23655 1
+1 23656 1
+23656 23656 1
+1 23657 1
+23657 23657 1
+1 23658 1
+23658 23658 1
+1 23659 1
+23659 23659 1
+1 23660 1
+23660 23660 1
+1 23661 1
+23661 23661 1
+1 23662 1
+23662 23662 1
+1 23663 1
+23663 23663 1
+1 23664 1
+23664 23664 1
+1 23665 1
+23665 23665 1
+1 23666 1
+23666 23666 1
+1 23667 1
+23667 23667 1
+1 23668 1
+23668 23668 1
+1 23669 1
+23669 23669 1
+1 23670 1
+23670 23670 1
+1 23671 1
+23671 23671 1
+1 23672 1
+23672 23672 1
+1 23673 1
+23673 23673 1
+1 23674 1
+23674 23674 1
+1 23675 1
+23675 23675 1
+1 23676 1
+23676 23676 1
+1 23677 1
+23677 23677 1
+1 23678 1
+23678 23678 1
+1 23679 1
+23679 23679 1
+1 23680 1
+23680 23680 1
+1 23681 1
+23681 23681 1
+1 23682 1
+23682 23682 1
+1 23683 1
+23683 23683 1
+1 23684 1
+23684 23684 1
+1 23685 1
+23685 23685 1
+1 23686 1
+23686 23686 1
+1 23687 1
+23687 23687 1
+1 23688 1
+23688 23688 1
+1 23689 1
+23689 23689 1
+1 23690 1
+23690 23690 1
+1 23691 1
+23691 23691 1
+1 23692 1
+23692 23692 1
+1 23693 1
+23693 23693 1
+1 23694 1
+23694 23694 1
+1 23695 1
+23695 23695 1
+1 23696 1
+23696 23696 1
+1 23697 1
+23697 23697 1
+1 23698 1
+23698 23698 1
+1 23699 1
+23699 23699 1
+1 23700 1
+23700 23700 1
+1 23701 1
+23701 23701 1
+1 23702 1
+23702 23702 1
+1 23703 1
+23703 23703 1
+1 23704 1
+23704 23704 1
+1 23705 1
+23705 23705 1
+1 23706 1
+23706 23706 1
+1 23707 1
+23707 23707 1
+1 23708 1
+23708 23708 1
+1 23709 1
+23709 23709 1
+1 23710 1
+23710 23710 1
+1 23711 1
+23711 23711 1
+1 23712 1
+23712 23712 1
+1 23713 1
+23713 23713 1
+1 23714 1
+23714 23714 1
+1 23715 1
+23715 23715 1
+1 23716 1
+23716 23716 1
+1 23717 1
+23717 23717 1
+1 23718 1
+23718 23718 1
+1 23719 1
+23719 23719 1
+1 23720 1
+23720 23720 1
+1 23721 1
+23721 23721 1
+1 23722 1
+23722 23722 1
+1 23723 1
+23723 23723 1
+1 23724 1
+23724 23724 1
+1 23725 1
+23725 23725 1
+1 23726 1
+23726 23726 1
+1 23727 1
+23727 23727 1
+1 23728 1
+23728 23728 1
+1 23729 1
+23729 23729 1
+1 23730 1
+23730 23730 1
+1 23731 1
+23731 23731 1
+1 23732 1
+23732 23732 1
+1 23733 1
+23733 23733 1
+1 23734 1
+23734 23734 1
+1 23735 1
+23735 23735 1
+1 23736 1
+23736 23736 1
+1 23737 1
+23737 23737 1
+1 23738 1
+23738 23738 1
+1 23739 1
+23739 23739 1
+1 23740 1
+23740 23740 1
+1 23741 1
+23741 23741 1
+1 23742 1
+23742 23742 1
+1 23743 1
+23743 23743 1
+1 23744 1
+23744 23744 1
+1 23745 1
+23745 23745 1
+1 23746 1
+23746 23746 1
+1 23747 1
+23747 23747 1
+1 23748 1
+23748 23748 1
+1 23749 1
+23749 23749 1
+1 23750 1
+23750 23750 1
+1 23751 1
+23751 23751 1
+1 23752 1
+23752 23752 1
+1 23753 1
+23753 23753 1
+1 23754 1
+23754 23754 1
+1 23755 1
+23755 23755 1
+1 23756 1
+23756 23756 1
+1 23757 1
+23757 23757 1
+1 23758 1
+23758 23758 1
+1 23759 1
+23759 23759 1
+1 23760 1
+23760 23760 1
+1 23761 1
+23761 23761 1
+1 23762 1
+23762 23762 1
+1 23763 1
+23763 23763 1
+1 23764 1
+23764 23764 1
+1 23765 1
+23765 23765 1
+1 23766 1
+23766 23766 1
+1 23767 1
+23767 23767 1
+1 23768 1
+23768 23768 1
+1 23769 1
+23769 23769 1
+1 23770 1
+23770 23770 1
+1 23771 1
+23771 23771 1
+1 23772 1
+23772 23772 1
+1 23773 1
+23773 23773 1
+1 23774 1
+23774 23774 1
+1 23775 1
+23775 23775 1
+1 23776 1
+23776 23776 1
+1 23777 1
+23777 23777 1
+1 23778 1
+23778 23778 1
+1 23779 1
+23779 23779 1
+1 23780 1
+23780 23780 1
+1 23781 1
+23781 23781 1
+1 23782 1
+23782 23782 1
+1 23783 1
+23783 23783 1
+1 23784 1
+23784 23784 1
+1 23785 1
+23785 23785 1
+1 23786 1
+23786 23786 1
+1 23787 1
+23787 23787 1
+1 23788 1
+23788 23788 1
+1 23789 1
+23789 23789 1
+1 23790 1
+23790 23790 1
+1 23791 1
+23791 23791 1
+1 23792 1
+23792 23792 1
+1 23793 1
+23793 23793 1
+1 23794 1
+23794 23794 1
+1 23795 1
+23795 23795 1
+1 23796 1
+23796 23796 1
+1 23797 1
+23797 23797 1
+1 23798 1
+23798 23798 1
+1 23799 1
+23799 23799 1
+1 23800 1
+23800 23800 1
+1 23801 1
+23801 23801 1
+1 23802 1
+23802 23802 1
+1 23803 1
+23803 23803 1
+1 23804 1
+23804 23804 1
+1 23805 1
+23805 23805 1
+1 23806 1
+23806 23806 1
+1 23807 1
+23807 23807 1
+1 23808 1
+23808 23808 1
+1 23809 1
+23809 23809 1
+1 23810 1
+23810 23810 1
+1 23811 1
+23811 23811 1
+1 23812 1
+23812 23812 1
+1 23813 1
+23813 23813 1
+1 23814 1
+23814 23814 1
+1 23815 1
+23815 23815 1
+1 23816 1
+23816 23816 1
+1 23817 1
+23817 23817 1
+1 23818 1
+23818 23818 1
+1 23819 1
+23819 23819 1
+1 23820 1
+23820 23820 1
+1 23821 1
+23821 23821 1
+1 23822 1
+23822 23822 1
+1 23823 1
+23823 23823 1
+1 23824 1
+23824 23824 1
+1 23825 1
+23825 23825 1
+1 23826 1
+23826 23826 1
+1 23827 1
+23827 23827 1
+1 23828 1
+23828 23828 1
+1 23829 1
+23829 23829 1
+1 23830 1
+23830 23830 1
+1 23831 1
+23831 23831 1
+1 23832 1
+23832 23832 1
+1 23833 1
+23833 23833 1
+1 23834 1
+23834 23834 1
+1 23835 1
+23835 23835 1
+1 23836 1
+23836 23836 1
+1 23837 1
+23837 23837 1
+1 23838 1
+23838 23838 1
+1 23839 1
+23839 23839 1
+1 23840 1
+23840 23840 1
+1 23841 1
+23841 23841 1
+1 23842 1
+23842 23842 1
+1 23843 1
+23843 23843 1
+1 23844 1
+23844 23844 1
+1 23845 1
+23845 23845 1
+1 23846 1
+23846 23846 1
+1 23847 1
+23847 23847 1
+1 23848 1
+23848 23848 1
+1 23849 1
+23849 23849 1
+1 23850 1
+23850 23850 1
+1 23851 1
+23851 23851 1
+1 23852 1
+23852 23852 1
+1 23853 1
+23853 23853 1
+1 23854 1
+23854 23854 1
+1 23855 1
+23855 23855 1
+1 23856 1
+23856 23856 1
+1 23857 1
+23857 23857 1
+1 23858 1
+23858 23858 1
+1 23859 1
+23859 23859 1
+1 23860 1
+23860 23860 1
+1 23861 1
+23861 23861 1
+1 23862 1
+23862 23862 1
+1 23863 1
+23863 23863 1
+1 23864 1
+23864 23864 1
+1 23865 1
+23865 23865 1
+1 23866 1
+23866 23866 1
+1 23867 1
+23867 23867 1
+1 23868 1
+23868 23868 1
+1 23869 1
+23869 23869 1
+1 23870 1
+23870 23870 1
+1 23871 1
+23871 23871 1
+1 23872 1
+23872 23872 1
+1 23873 1
+23873 23873 1
+1 23874 1
+23874 23874 1
+1 23875 1
+23875 23875 1
+1 23876 1
+23876 23876 1
+1 23877 1
+23877 23877 1
+1 23878 1
+23878 23878 1
+1 23879 1
+23879 23879 1
+1 23880 1
+23880 23880 1
+1 23881 1
+23881 23881 1
+1 23882 1
+23882 23882 1
+1 23883 1
+23883 23883 1
+1 23884 1
+23884 23884 1
+1 23885 1
+23885 23885 1
+1 23886 1
+23886 23886 1
+1 23887 1
+23887 23887 1
+1 23888 1
+23888 23888 1
+1 23889 1
+23889 23889 1
+1 23890 1
+23890 23890 1
+1 23891 1
+23891 23891 1
+1 23892 1
+23892 23892 1
+1 23893 1
+23893 23893 1
+1 23894 1
+23894 23894 1
+1 23895 1
+23895 23895 1
+1 23896 1
+23896 23896 1
+1 23897 1
+23897 23897 1
+1 23898 1
+23898 23898 1
+1 23899 1
+23899 23899 1
+1 23900 1
+23900 23900 1
+1 23901 1
+23901 23901 1
+1 23902 1
+23902 23902 1
+1 23903 1
+23903 23903 1
+1 23904 1
+23904 23904 1
+1 23905 1
+23905 23905 1
+1 23906 1
+23906 23906 1
+1 23907 1
+23907 23907 1
+1 23908 1
+23908 23908 1
+1 23909 1
+23909 23909 1
+1 23910 1
+23910 23910 1
+1 23911 1
+23911 23911 1
+1 23912 1
+23912 23912 1
+1 23913 1
+23913 23913 1
+1 23914 1
+23914 23914 1
+1 23915 1
+23915 23915 1
+1 23916 1
+23916 23916 1
+1 23917 1
+23917 23917 1
+1 23918 1
+23918 23918 1
+1 23919 1
+23919 23919 1
+1 23920 1
+23920 23920 1
+1 23921 1
+23921 23921 1
+1 23922 1
+23922 23922 1
+1 23923 1
+23923 23923 1
+1 23924 1
+23924 23924 1
+1 23925 1
+23925 23925 1
+1 23926 1
+23926 23926 1
+1 23927 1
+23927 23927 1
+1 23928 1
+23928 23928 1
+1 23929 1
+23929 23929 1
+1 23930 1
+23930 23930 1
+1 23931 1
+23931 23931 1
+1 23932 1
+23932 23932 1
+1 23933 1
+23933 23933 1
+1 23934 1
+23934 23934 1
+1 23935 1
+23935 23935 1
+1 23936 1
+23936 23936 1
+1 23937 1
+23937 23937 1
+1 23938 1
+23938 23938 1
+1 23939 1
+23939 23939 1
+1 23940 1
+23940 23940 1
+1 23941 1
+23941 23941 1
+1 23942 1
+23942 23942 1
+1 23943 1
+23943 23943 1
+1 23944 1
+23944 23944 1
+1 23945 1
+23945 23945 1
+1 23946 1
+23946 23946 1
+1 23947 1
+23947 23947 1
+1 23948 1
+23948 23948 1
+1 23949 1
+23949 23949 1
+1 23950 1
+23950 23950 1
+1 23951 1
+23951 23951 1
+1 23952 1
+23952 23952 1
+1 23953 1
+23953 23953 1
+1 23954 1
+23954 23954 1
+1 23955 1
+23955 23955 1
+1 23956 1
+23956 23956 1
+1 23957 1
+23957 23957 1
+1 23958 1
+23958 23958 1
+1 23959 1
+23959 23959 1
+1 23960 1
+23960 23960 1
+1 23961 1
+23961 23961 1
+1 23962 1
+23962 23962 1
+1 23963 1
+23963 23963 1
+1 23964 1
+23964 23964 1
+1 23965 1
+23965 23965 1
+1 23966 1
+23966 23966 1
+1 23967 1
+23967 23967 1
+1 23968 1
+23968 23968 1
+1 23969 1
+23969 23969 1
+1 23970 1
+23970 23970 1
+1 23971 1
+23971 23971 1
+1 23972 1
+23972 23972 1
+1 23973 1
+23973 23973 1
+1 23974 1
+23974 23974 1
+1 23975 1
+23975 23975 1
+1 23976 1
+23976 23976 1
+1 23977 1
+23977 23977 1
+1 23978 1
+23978 23978 1
+1 23979 1
+23979 23979 1
+1 23980 1
+23980 23980 1
+1 23981 1
+23981 23981 1
+1 23982 1
+23982 23982 1
+1 23983 1
+23983 23983 1
+1 23984 1
+23984 23984 1
+1 23985 1
+23985 23985 1
+1 23986 1
+23986 23986 1
+1 23987 1
+23987 23987 1
+1 23988 1
+23988 23988 1
+1 23989 1
+23989 23989 1
+1 23990 1
+23990 23990 1
+1 23991 1
+23991 23991 1
+1 23992 1
+23992 23992 1
+1 23993 1
+23993 23993 1
+1 23994 1
+23994 23994 1
+1 23995 1
+23995 23995 1
+1 23996 1
+23996 23996 1
+1 23997 1
+23997 23997 1
+1 23998 1
+23998 23998 1
+1 23999 1
+23999 23999 1
+1 24000 1
+24000 24000 1
+1 24001 1
+24001 24001 1
+1 24002 1
+24002 24002 1
+1 24003 1
+24003 24003 1
+1 24004 1
+24004 24004 1
+1 24005 1
+24005 24005 1
+1 24006 1
+24006 24006 1
+1 24007 1
+24007 24007 1
+1 24008 1
+24008 24008 1
+1 24009 1
+24009 24009 1
+1 24010 1
+24010 24010 1
+1 24011 1
+24011 24011 1
+1 24012 1
+24012 24012 1
+1 24013 1
+24013 24013 1
+1 24014 1
+24014 24014 1
+1 24015 1
+24015 24015 1
+1 24016 1
+24016 24016 1
+1 24017 1
+24017 24017 1
+1 24018 1
+24018 24018 1
+1 24019 1
+24019 24019 1
+1 24020 1
+24020 24020 1
+1 24021 1
+24021 24021 1
+1 24022 1
+24022 24022 1
+1 24023 1
+24023 24023 1
+1 24024 1
+24024 24024 1
+1 24025 1
+24025 24025 1
+1 24026 1
+24026 24026 1
+1 24027 1
+24027 24027 1
+1 24028 1
+24028 24028 1
+1 24029 1
+24029 24029 1
+1 24030 1
+24030 24030 1
+1 24031 1
+24031 24031 1
+1 24032 1
+24032 24032 1
+1 24033 1
+24033 24033 1
+1 24034 1
+24034 24034 1
+1 24035 1
+24035 24035 1
+1 24036 1
+24036 24036 1
+1 24037 1
+24037 24037 1
+1 24038 1
+24038 24038 1
+1 24039 1
+24039 24039 1
+1 24040 1
+24040 24040 1
+1 24041 1
+24041 24041 1
+1 24042 1
+24042 24042 1
+1 24043 1
+24043 24043 1
+1 24044 1
+24044 24044 1
+1 24045 1
+24045 24045 1
+1 24046 1
+24046 24046 1
+1 24047 1
+24047 24047 1
+1 24048 1
+24048 24048 1
+1 24049 1
+24049 24049 1
+1 24050 1
+24050 24050 1
+1 24051 1
+24051 24051 1
+1 24052 1
+24052 24052 1
+1 24053 1
+24053 24053 1
+1 24054 1
+24054 24054 1
+1 24055 1
+24055 24055 1
+1 24056 1
+24056 24056 1
+1 24057 1
+24057 24057 1
+1 24058 1
+24058 24058 1
+1 24059 1
+24059 24059 1
+1 24060 1
+24060 24060 1
+1 24061 1
+24061 24061 1
+1 24062 1
+24062 24062 1
+1 24063 1
+24063 24063 1
+1 24064 1
+24064 24064 1
+1 24065 1
+24065 24065 1
+1 24066 1
+24066 24066 1
+1 24067 1
+24067 24067 1
+1 24068 1
+24068 24068 1
+1 24069 1
+24069 24069 1
+1 24070 1
+24070 24070 1
+1 24071 1
+24071 24071 1
+1 24072 1
+24072 24072 1
+1 24073 1
+24073 24073 1
+1 24074 1
+24074 24074 1
+1 24075 1
+24075 24075 1
+1 24076 1
+24076 24076 1
+1 24077 1
+24077 24077 1
+1 24078 1
+24078 24078 1
+1 24079 1
+24079 24079 1
+1 24080 1
+24080 24080 1
+1 24081 1
+24081 24081 1
+1 24082 1
+24082 24082 1
+1 24083 1
+24083 24083 1
+1 24084 1
+24084 24084 1
+1 24085 1
+24085 24085 1
+1 24086 1
+24086 24086 1
+1 24087 1
+24087 24087 1
+1 24088 1
+24088 24088 1
+1 24089 1
+24089 24089 1
+1 24090 1
+24090 24090 1
+1 24091 1
+24091 24091 1
+1 24092 1
+24092 24092 1
+1 24093 1
+24093 24093 1
+1 24094 1
+24094 24094 1
+1 24095 1
+24095 24095 1
+1 24096 1
+24096 24096 1
+1 24097 1
+24097 24097 1
+1 24098 1
+24098 24098 1
+1 24099 1
+24099 24099 1
+1 24100 1
+24100 24100 1
+1 24101 1
+24101 24101 1
+1 24102 1
+24102 24102 1
+1 24103 1
+24103 24103 1
+1 24104 1
+24104 24104 1
+1 24105 1
+24105 24105 1
+1 24106 1
+24106 24106 1
+1 24107 1
+24107 24107 1
+1 24108 1
+24108 24108 1
+1 24109 1
+24109 24109 1
+1 24110 1
+24110 24110 1
+1 24111 1
+24111 24111 1
+1 24112 1
+24112 24112 1
+1 24113 1
+24113 24113 1
+1 24114 1
+24114 24114 1
+1 24115 1
+24115 24115 1
+1 24116 1
+24116 24116 1
+1 24117 1
+24117 24117 1
+1 24118 1
+24118 24118 1
+1 24119 1
+24119 24119 1
+1 24120 1
+24120 24120 1
+1 24121 1
+24121 24121 1
+1 24122 1
+24122 24122 1
+1 24123 1
+24123 24123 1
+1 24124 1
+24124 24124 1
+1 24125 1
+24125 24125 1
+1 24126 1
+24126 24126 1
+1 24127 1
+24127 24127 1
+1 24128 1
+24128 24128 1
+1 24129 1
+24129 24129 1
+1 24130 1
+24130 24130 1
+1 24131 1
+24131 24131 1
+1 24132 1
+24132 24132 1
+1 24133 1
+24133 24133 1
+1 24134 1
+24134 24134 1
+1 24135 1
+24135 24135 1
+1 24136 1
+24136 24136 1
+1 24137 1
+24137 24137 1
+1 24138 1
+24138 24138 1
+1 24139 1
+24139 24139 1
+1 24140 1
+24140 24140 1
+1 24141 1
+24141 24141 1
+1 24142 1
+24142 24142 1
+1 24143 1
+24143 24143 1
+1 24144 1
+24144 24144 1
+1 24145 1
+24145 24145 1
+1 24146 1
+24146 24146 1
+1 24147 1
+24147 24147 1
+1 24148 1
+24148 24148 1
+1 24149 1
+24149 24149 1
+1 24150 1
+24150 24150 1
+1 24151 1
+24151 24151 1
+1 24152 1
+24152 24152 1
+1 24153 1
+24153 24153 1
+1 24154 1
+24154 24154 1
+1 24155 1
+24155 24155 1
+1 24156 1
+24156 24156 1
+1 24157 1
+24157 24157 1
+1 24158 1
+24158 24158 1
+1 24159 1
+24159 24159 1
+1 24160 1
+24160 24160 1
+1 24161 1
+24161 24161 1
+1 24162 1
+24162 24162 1
+1 24163 1
+24163 24163 1
+1 24164 1
+24164 24164 1
+1 24165 1
+24165 24165 1
+1 24166 1
+24166 24166 1
+1 24167 1
+24167 24167 1
+1 24168 1
+24168 24168 1
+1 24169 1
+24169 24169 1
+1 24170 1
+24170 24170 1
+1 24171 1
+24171 24171 1
+1 24172 1
+24172 24172 1
+1 24173 1
+24173 24173 1
+1 24174 1
+24174 24174 1
+1 24175 1
+24175 24175 1
+1 24176 1
+24176 24176 1
+1 24177 1
+24177 24177 1
+1 24178 1
+24178 24178 1
+1 24179 1
+24179 24179 1
+1 24180 1
+24180 24180 1
+1 24181 1
+24181 24181 1
+1 24182 1
+24182 24182 1
+1 24183 1
+24183 24183 1
+1 24184 1
+24184 24184 1
+1 24185 1
+24185 24185 1
+1 24186 1
+24186 24186 1
+1 24187 1
+24187 24187 1
+1 24188 1
+24188 24188 1
+1 24189 1
+24189 24189 1
+1 24190 1
+24190 24190 1
+1 24191 1
+24191 24191 1
+1 24192 1
+24192 24192 1
+1 24193 1
+24193 24193 1
+1 24194 1
+24194 24194 1
+1 24195 1
+24195 24195 1
+1 24196 1
+24196 24196 1
+1 24197 1
+24197 24197 1
+1 24198 1
+24198 24198 1
+1 24199 1
+24199 24199 1
+1 24200 1
+24200 24200 1
+1 24201 1
+24201 24201 1
+1 24202 1
+24202 24202 1
+1 24203 1
+24203 24203 1
+1 24204 1
+24204 24204 1
+1 24205 1
+24205 24205 1
+1 24206 1
+24206 24206 1
+1 24207 1
+24207 24207 1
+1 24208 1
+24208 24208 1
+1 24209 1
+24209 24209 1
+1 24210 1
+24210 24210 1
+1 24211 1
+24211 24211 1
+1 24212 1
+24212 24212 1
+1 24213 1
+24213 24213 1
+1 24214 1
+24214 24214 1
+1 24215 1
+24215 24215 1
+1 24216 1
+24216 24216 1
+1 24217 1
+24217 24217 1
+1 24218 1
+24218 24218 1
+1 24219 1
+24219 24219 1
+1 24220 1
+24220 24220 1
+1 24221 1
+24221 24221 1
+1 24222 1
+24222 24222 1
+1 24223 1
+24223 24223 1
+1 24224 1
+24224 24224 1
+1 24225 1
+24225 24225 1
+1 24226 1
+24226 24226 1
+1 24227 1
+24227 24227 1
+1 24228 1
+24228 24228 1
+1 24229 1
+24229 24229 1
+1 24230 1
+24230 24230 1
+1 24231 1
+24231 24231 1
+1 24232 1
+24232 24232 1
+1 24233 1
+24233 24233 1
+1 24234 1
+24234 24234 1
+1 24235 1
+24235 24235 1
+1 24236 1
+24236 24236 1
+1 24237 1
+24237 24237 1
+1 24238 1
+24238 24238 1
+1 24239 1
+24239 24239 1
+1 24240 1
+24240 24240 1
+1 24241 1
+24241 24241 1
+1 24242 1
+24242 24242 1
+1 24243 1
+24243 24243 1
+1 24244 1
+24244 24244 1
+1 24245 1
+24245 24245 1
+1 24246 1
+24246 24246 1
+1 24247 1
+24247 24247 1
+1 24248 1
+24248 24248 1
+1 24249 1
+24249 24249 1
+1 24250 1
+24250 24250 1
+1 24251 1
+24251 24251 1
+1 24252 1
+24252 24252 1
+1 24253 1
+24253 24253 1
+1 24254 1
+24254 24254 1
+1 24255 1
+24255 24255 1
+1 24256 1
+24256 24256 1
+1 24257 1
+24257 24257 1
+1 24258 1
+24258 24258 1
+1 24259 1
+24259 24259 1
+1 24260 1
+24260 24260 1
+1 24261 1
+24261 24261 1
+1 24262 1
+24262 24262 1
+1 24263 1
+24263 24263 1
+1 24264 1
+24264 24264 1
+1 24265 1
+24265 24265 1
+1 24266 1
+24266 24266 1
+1 24267 1
+24267 24267 1
+1 24268 1
+24268 24268 1
+1 24269 1
+24269 24269 1
+1 24270 1
+24270 24270 1
+1 24271 1
+24271 24271 1
+1 24272 1
+24272 24272 1
+1 24273 1
+24273 24273 1
+1 24274 1
+24274 24274 1
+1 24275 1
+24275 24275 1
+1 24276 1
+24276 24276 1
+1 24277 1
+24277 24277 1
+1 24278 1
+24278 24278 1
+1 24279 1
+24279 24279 1
+1 24280 1
+24280 24280 1
+1 24281 1
+24281 24281 1
+1 24282 1
+24282 24282 1
+1 24283 1
+24283 24283 1
+1 24284 1
+24284 24284 1
+1 24285 1
+24285 24285 1
+1 24286 1
+24286 24286 1
+1 24287 1
+24287 24287 1
+1 24288 1
+24288 24288 1
+1 24289 1
+24289 24289 1
+1 24290 1
+24290 24290 1
+1 24291 1
+24291 24291 1
+1 24292 1
+24292 24292 1
+1 24293 1
+24293 24293 1
+1 24294 1
+24294 24294 1
+1 24295 1
+24295 24295 1
+1 24296 1
+24296 24296 1
+1 24297 1
+24297 24297 1
+1 24298 1
+24298 24298 1
+1 24299 1
+24299 24299 1
+1 24300 1
+24300 24300 1
+1 24301 1
+24301 24301 1
+1 24302 1
+24302 24302 1
+1 24303 1
+24303 24303 1
+1 24304 1
+24304 24304 1
+1 24305 1
+24305 24305 1
+1 24306 1
+24306 24306 1
+1 24307 1
+24307 24307 1
+1 24308 1
+24308 24308 1
+1 24309 1
+24309 24309 1
+1 24310 1
+24310 24310 1
+1 24311 1
+24311 24311 1
+1 24312 1
+24312 24312 1
+1 24313 1
+24313 24313 1
+1 24314 1
+24314 24314 1
+1 24315 1
+24315 24315 1
+1 24316 1
+24316 24316 1
+1 24317 1
+24317 24317 1
+1 24318 1
+24318 24318 1
+1 24319 1
+24319 24319 1
+1 24320 1
+24320 24320 1
+1 24321 1
+24321 24321 1
+1 24322 1
+24322 24322 1
+1 24323 1
+24323 24323 1
+1 24324 1
+24324 24324 1
+1 24325 1
+24325 24325 1
+1 24326 1
+24326 24326 1
+1 24327 1
+24327 24327 1
+1 24328 1
+24328 24328 1
+1 24329 1
+24329 24329 1
+1 24330 1
+24330 24330 1
+1 24331 1
+24331 24331 1
+1 24332 1
+24332 24332 1
+1 24333 1
+24333 24333 1
+1 24334 1
+24334 24334 1
+1 24335 1
+24335 24335 1
+1 24336 1
+24336 24336 1
+1 24337 1
+24337 24337 1
+1 24338 1
+24338 24338 1
+1 24339 1
+24339 24339 1
+1 24340 1
+24340 24340 1
+1 24341 1
+24341 24341 1
+1 24342 1
+24342 24342 1
+1 24343 1
+24343 24343 1
+1 24344 1
+24344 24344 1
+1 24345 1
+24345 24345 1
+1 24346 1
+24346 24346 1
+1 24347 1
+24347 24347 1
+1 24348 1
+24348 24348 1
+1 24349 1
+24349 24349 1
+1 24350 1
+24350 24350 1
+1 24351 1
+24351 24351 1
+1 24352 1
+24352 24352 1
+1 24353 1
+24353 24353 1
+1 24354 1
+24354 24354 1
+1 24355 1
+24355 24355 1
+1 24356 1
+24356 24356 1
+1 24357 1
+24357 24357 1
+1 24358 1
+24358 24358 1
+1 24359 1
+24359 24359 1
+1 24360 1
+24360 24360 1
+1 24361 1
+24361 24361 1
+1 24362 1
+24362 24362 1
+1 24363 1
+24363 24363 1
+1 24364 1
+24364 24364 1
+1 24365 1
+24365 24365 1
+1 24366 1
+24366 24366 1
+1 24367 1
+24367 24367 1
+1 24368 1
+24368 24368 1
+1 24369 1
+24369 24369 1
+1 24370 1
+24370 24370 1
+1 24371 1
+24371 24371 1
+1 24372 1
+24372 24372 1
+1 24373 1
+24373 24373 1
+1 24374 1
+24374 24374 1
+1 24375 1
+24375 24375 1
+1 24376 1
+24376 24376 1
+1 24377 1
+24377 24377 1
+1 24378 1
+24378 24378 1
+1 24379 1
+24379 24379 1
+1 24380 1
+24380 24380 1
+1 24381 1
+24381 24381 1
+1 24382 1
+24382 24382 1
+1 24383 1
+24383 24383 1
+1 24384 1
+24384 24384 1
+1 24385 1
+24385 24385 1
+1 24386 1
+24386 24386 1
+1 24387 1
+24387 24387 1
+1 24388 1
+24388 24388 1
+1 24389 1
+24389 24389 1
+1 24390 1
+24390 24390 1
+1 24391 1
+24391 24391 1
+1 24392 1
+24392 24392 1
+1 24393 1
+24393 24393 1
+1 24394 1
+24394 24394 1
+1 24395 1
+24395 24395 1
+1 24396 1
+24396 24396 1
+1 24397 1
+24397 24397 1
+1 24398 1
+24398 24398 1
+1 24399 1
+24399 24399 1
+1 24400 1
+24400 24400 1
+1 24401 1
+24401 24401 1
+1 24402 1
+24402 24402 1
+1 24403 1
+24403 24403 1
+1 24404 1
+24404 24404 1
+1 24405 1
+24405 24405 1
+1 24406 1
+24406 24406 1
+1 24407 1
+24407 24407 1
+1 24408 1
+24408 24408 1
+1 24409 1
+24409 24409 1
+1 24410 1
+24410 24410 1
+1 24411 1
+24411 24411 1
+1 24412 1
+24412 24412 1
+1 24413 1
+24413 24413 1
+1 24414 1
+24414 24414 1
+1 24415 1
+24415 24415 1
+1 24416 1
+24416 24416 1
+1 24417 1
+24417 24417 1
+1 24418 1
+24418 24418 1
+1 24419 1
+24419 24419 1
+1 24420 1
+24420 24420 1
+1 24421 1
+24421 24421 1
+1 24422 1
+24422 24422 1
+1 24423 1
+24423 24423 1
+1 24424 1
+24424 24424 1
+1 24425 1
+24425 24425 1
+1 24426 1
+24426 24426 1
+1 24427 1
+24427 24427 1
+1 24428 1
+24428 24428 1
+1 24429 1
+24429 24429 1
+1 24430 1
+24430 24430 1
+1 24431 1
+24431 24431 1
+1 24432 1
+24432 24432 1
+1 24433 1
+24433 24433 1
+1 24434 1
+24434 24434 1
+1 24435 1
+24435 24435 1
+1 24436 1
+24436 24436 1
+1 24437 1
+24437 24437 1
+1 24438 1
+24438 24438 1
+1 24439 1
+24439 24439 1
+1 24440 1
+24440 24440 1
+1 24441 1
+24441 24441 1
+1 24442 1
+24442 24442 1
+1 24443 1
+24443 24443 1
+1 24444 1
+24444 24444 1
+1 24445 1
+24445 24445 1
+1 24446 1
+24446 24446 1
+1 24447 1
+24447 24447 1
+1 24448 1
+24448 24448 1
+1 24449 1
+24449 24449 1
+1 24450 1
+24450 24450 1
+1 24451 1
+24451 24451 1
+1 24452 1
+24452 24452 1
+1 24453 1
+24453 24453 1
+1 24454 1
+24454 24454 1
+1 24455 1
+24455 24455 1
+1 24456 1
+24456 24456 1
+1 24457 1
+24457 24457 1
+1 24458 1
+24458 24458 1
+1 24459 1
+24459 24459 1
+1 24460 1
+24460 24460 1
+1 24461 1
+24461 24461 1
+1 24462 1
+24462 24462 1
+1 24463 1
+24463 24463 1
+1 24464 1
+24464 24464 1
+1 24465 1
+24465 24465 1
+1 24466 1
+24466 24466 1
+1 24467 1
+24467 24467 1
+1 24468 1
+24468 24468 1
+1 24469 1
+24469 24469 1
+1 24470 1
+24470 24470 1
+1 24471 1
+24471 24471 1
+1 24472 1
+24472 24472 1
+1 24473 1
+24473 24473 1
+1 24474 1
+24474 24474 1
+1 24475 1
+24475 24475 1
+1 24476 1
+24476 24476 1
+1 24477 1
+24477 24477 1
+1 24478 1
+24478 24478 1
+1 24479 1
+24479 24479 1
+1 24480 1
+24480 24480 1
+1 24481 1
+24481 24481 1
+1 24482 1
+24482 24482 1
+1 24483 1
+24483 24483 1
+1 24484 1
+24484 24484 1
+1 24485 1
+24485 24485 1
+1 24486 1
+24486 24486 1
+1 24487 1
+24487 24487 1
+1 24488 1
+24488 24488 1
+1 24489 1
+24489 24489 1
+1 24490 1
+24490 24490 1
+1 24491 1
+24491 24491 1
+1 24492 1
+24492 24492 1
+1 24493 1
+24493 24493 1
+1 24494 1
+24494 24494 1
+1 24495 1
+24495 24495 1
+1 24496 1
+24496 24496 1
+1 24497 1
+24497 24497 1
+1 24498 1
+24498 24498 1
+1 24499 1
+24499 24499 1
+1 24500 1
+24500 24500 1
+1 24501 1
+24501 24501 1
+1 24502 1
+24502 24502 1
+1 24503 1
+24503 24503 1
+1 24504 1
+24504 24504 1
+1 24505 1
+24505 24505 1
+1 24506 1
+24506 24506 1
+1 24507 1
+24507 24507 1
+1 24508 1
+24508 24508 1
+1 24509 1
+24509 24509 1
+1 24510 1
+24510 24510 1
+1 24511 1
+24511 24511 1
+1 24512 1
+24512 24512 1
+1 24513 1
+24513 24513 1
+1 24514 1
+24514 24514 1
+1 24515 1
+24515 24515 1
+1 24516 1
+24516 24516 1
+1 24517 1
+24517 24517 1
+1 24518 1
+24518 24518 1
+1 24519 1
+24519 24519 1
+1 24520 1
+24520 24520 1
+1 24521 1
+24521 24521 1
+1 24522 1
+24522 24522 1
+1 24523 1
+24523 24523 1
+1 24524 1
+24524 24524 1
+1 24525 1
+24525 24525 1
+1 24526 1
+24526 24526 1
+1 24527 1
+24527 24527 1
+1 24528 1
+24528 24528 1
+1 24529 1
+24529 24529 1
+1 24530 1
+24530 24530 1
+1 24531 1
+24531 24531 1
+1 24532 1
+24532 24532 1
+1 24533 1
+24533 24533 1
+1 24534 1
+24534 24534 1
+1 24535 1
+24535 24535 1
+1 24536 1
+24536 24536 1
+1 24537 1
+24537 24537 1
+1 24538 1
+24538 24538 1
+1 24539 1
+24539 24539 1
+1 24540 1
+24540 24540 1
+1 24541 1
+24541 24541 1
+1 24542 1
+24542 24542 1
+1 24543 1
+24543 24543 1
+1 24544 1
+24544 24544 1
+1 24545 1
+24545 24545 1
+1 24546 1
+24546 24546 1
+1 24547 1
+24547 24547 1
+1 24548 1
+24548 24548 1
+1 24549 1
+24549 24549 1
+1 24550 1
+24550 24550 1
+1 24551 1
+24551 24551 1
+1 24552 1
+24552 24552 1
+1 24553 1
+24553 24553 1
+1 24554 1
+24554 24554 1
+1 24555 1
+24555 24555 1
+1 24556 1
+24556 24556 1
+1 24557 1
+24557 24557 1
+1 24558 1
+24558 24558 1
+1 24559 1
+24559 24559 1
+1 24560 1
+24560 24560 1
+1 24561 1
+24561 24561 1
+1 24562 1
+24562 24562 1
+1 24563 1
+24563 24563 1
+1 24564 1
+24564 24564 1
+1 24565 1
+24565 24565 1
+1 24566 1
+24566 24566 1
+1 24567 1
+24567 24567 1
+1 24568 1
+24568 24568 1
+1 24569 1
+24569 24569 1
+1 24570 1
+24570 24570 1
+1 24571 1
+24571 24571 1
+1 24572 1
+24572 24572 1
+1 24573 1
+24573 24573 1
+1 24574 1
+24574 24574 1
+1 24575 1
+24575 24575 1
+1 24576 1
+24576 24576 1
+1 24577 1
+24577 24577 1
+1 24578 1
+24578 24578 1
+1 24579 1
+24579 24579 1
+1 24580 1
+24580 24580 1
+1 24581 1
+24581 24581 1
+1 24582 1
+24582 24582 1
+1 24583 1
+24583 24583 1
+1 24584 1
+24584 24584 1
+1 24585 1
+24585 24585 1
+1 24586 1
+24586 24586 1
+1 24587 1
+24587 24587 1
+1 24588 1
+24588 24588 1
+1 24589 1
+24589 24589 1
+1 24590 1
+24590 24590 1
+1 24591 1
+24591 24591 1
+1 24592 1
+24592 24592 1
+1 24593 1
+24593 24593 1
+1 24594 1
+24594 24594 1
+1 24595 1
+24595 24595 1
+1 24596 1
+24596 24596 1
+1 24597 1
+24597 24597 1
+1 24598 1
+24598 24598 1
+1 24599 1
+24599 24599 1
+1 24600 1
+24600 24600 1
+1 24601 1
+24601 24601 1
+1 24602 1
+24602 24602 1
+1 24603 1
+24603 24603 1
+1 24604 1
+24604 24604 1
+1 24605 1
+24605 24605 1
+1 24606 1
+24606 24606 1
+1 24607 1
+24607 24607 1
+1 24608 1
+24608 24608 1
+1 24609 1
+24609 24609 1
+1 24610 1
+24610 24610 1
+1 24611 1
+24611 24611 1
+1 24612 1
+24612 24612 1
+1 24613 1
+24613 24613 1
+1 24614 1
+24614 24614 1
+1 24615 1
+24615 24615 1
+1 24616 1
+24616 24616 1
+1 24617 1
+24617 24617 1
+1 24618 1
+24618 24618 1
+1 24619 1
+24619 24619 1
+1 24620 1
+24620 24620 1
+1 24621 1
+24621 24621 1
+1 24622 1
+24622 24622 1
+1 24623 1
+24623 24623 1
+1 24624 1
+24624 24624 1
+1 24625 1
+24625 24625 1
+1 24626 1
+24626 24626 1
+1 24627 1
+24627 24627 1
+1 24628 1
+24628 24628 1
+1 24629 1
+24629 24629 1
+1 24630 1
+24630 24630 1
+1 24631 1
+24631 24631 1
+1 24632 1
+24632 24632 1
+1 24633 1
+24633 24633 1
+1 24634 1
+24634 24634 1
+1 24635 1
+24635 24635 1
+1 24636 1
+24636 24636 1
+1 24637 1
+24637 24637 1
+1 24638 1
+24638 24638 1
+1 24639 1
+24639 24639 1
+1 24640 1
+24640 24640 1
+1 24641 1
+24641 24641 1
+1 24642 1
+24642 24642 1
+1 24643 1
+24643 24643 1
+1 24644 1
+24644 24644 1
+1 24645 1
+24645 24645 1
+1 24646 1
+24646 24646 1
+1 24647 1
+24647 24647 1
+1 24648 1
+24648 24648 1
+1 24649 1
+24649 24649 1
+1 24650 1
+24650 24650 1
+1 24651 1
+24651 24651 1
+1 24652 1
+24652 24652 1
+1 24653 1
+24653 24653 1
+1 24654 1
+24654 24654 1
+1 24655 1
+24655 24655 1
+1 24656 1
+24656 24656 1
+1 24657 1
+24657 24657 1
+1 24658 1
+24658 24658 1
+1 24659 1
+24659 24659 1
+1 24660 1
+24660 24660 1
+1 24661 1
+24661 24661 1
+1 24662 1
+24662 24662 1
+1 24663 1
+24663 24663 1
+1 24664 1
+24664 24664 1
+1 24665 1
+24665 24665 1
+1 24666 1
+24666 24666 1
+1 24667 1
+24667 24667 1
+1 24668 1
+24668 24668 1
+1 24669 1
+24669 24669 1
+1 24670 1
+24670 24670 1
+1 24671 1
+24671 24671 1
+1 24672 1
+24672 24672 1
+1 24673 1
+24673 24673 1
+1 24674 1
+24674 24674 1
+1 24675 1
+24675 24675 1
+1 24676 1
+24676 24676 1
+1 24677 1
+24677 24677 1
+1 24678 1
+24678 24678 1
+1 24679 1
+24679 24679 1
+1 24680 1
+24680 24680 1
+1 24681 1
+24681 24681 1
+1 24682 1
+24682 24682 1
+1 24683 1
+24683 24683 1
+1 24684 1
+24684 24684 1
+1 24685 1
+24685 24685 1
+1 24686 1
+24686 24686 1
+1 24687 1
+24687 24687 1
+1 24688 1
+24688 24688 1
+1 24689 1
+24689 24689 1
+1 24690 1
+24690 24690 1
+1 24691 1
+24691 24691 1
+1 24692 1
+24692 24692 1
+1 24693 1
+24693 24693 1
+1 24694 1
+24694 24694 1
+1 24695 1
+24695 24695 1
+1 24696 1
+24696 24696 1
+1 24697 1
+24697 24697 1
+1 24698 1
+24698 24698 1
+1 24699 1
+24699 24699 1
+1 24700 1
+24700 24700 1
+1 24701 1
+24701 24701 1
+1 24702 1
+24702 24702 1
+1 24703 1
+24703 24703 1
+1 24704 1
+24704 24704 1
+1 24705 1
+24705 24705 1
+1 24706 1
+24706 24706 1
+1 24707 1
+24707 24707 1
+1 24708 1
+24708 24708 1
+1 24709 1
+24709 24709 1
+1 24710 1
+24710 24710 1
+1 24711 1
+24711 24711 1
+1 24712 1
+24712 24712 1
+1 24713 1
+24713 24713 1
+1 24714 1
+24714 24714 1
+1 24715 1
+24715 24715 1
+1 24716 1
+24716 24716 1
+1 24717 1
+24717 24717 1
+1 24718 1
+24718 24718 1
+1 24719 1
+24719 24719 1
+1 24720 1
+24720 24720 1
+1 24721 1
+24721 24721 1
+1 24722 1
+24722 24722 1
+1 24723 1
+24723 24723 1
+1 24724 1
+24724 24724 1
+1 24725 1
+24725 24725 1
+1 24726 1
+24726 24726 1
+1 24727 1
+24727 24727 1
+1 24728 1
+24728 24728 1
+1 24729 1
+24729 24729 1
+1 24730 1
+24730 24730 1
+1 24731 1
+24731 24731 1
+1 24732 1
+24732 24732 1
+1 24733 1
+24733 24733 1
+1 24734 1
+24734 24734 1
+1 24735 1
+24735 24735 1
+1 24736 1
+24736 24736 1
+1 24737 1
+24737 24737 1
+1 24738 1
+24738 24738 1
+1 24739 1
+24739 24739 1
+1 24740 1
+24740 24740 1
+1 24741 1
+24741 24741 1
+1 24742 1
+24742 24742 1
+1 24743 1
+24743 24743 1
+1 24744 1
+24744 24744 1
+1 24745 1
+24745 24745 1
+1 24746 1
+24746 24746 1
+1 24747 1
+24747 24747 1
+1 24748 1
+24748 24748 1
+1 24749 1
+24749 24749 1
+1 24750 1
+24750 24750 1
+1 24751 1
+24751 24751 1
+1 24752 1
+24752 24752 1
+1 24753 1
+24753 24753 1
+1 24754 1
+24754 24754 1
+1 24755 1
+24755 24755 1
+1 24756 1
+24756 24756 1
+1 24757 1
+24757 24757 1
+1 24758 1
+24758 24758 1
+1 24759 1
+24759 24759 1
+1 24760 1
+24760 24760 1
+1 24761 1
+24761 24761 1
+1 24762 1
+24762 24762 1
+1 24763 1
+24763 24763 1
+1 24764 1
+24764 24764 1
+1 24765 1
+24765 24765 1
+1 24766 1
+24766 24766 1
+1 24767 1
+24767 24767 1
+1 24768 1
+24768 24768 1
+1 24769 1
+24769 24769 1
+1 24770 1
+24770 24770 1
+1 24771 1
+24771 24771 1
+1 24772 1
+24772 24772 1
+1 24773 1
+24773 24773 1
+1 24774 1
+24774 24774 1
+1 24775 1
+24775 24775 1
+1 24776 1
+24776 24776 1
+1 24777 1
+24777 24777 1
+1 24778 1
+24778 24778 1
+1 24779 1
+24779 24779 1
+1 24780 1
+24780 24780 1
+1 24781 1
+24781 24781 1
+1 24782 1
+24782 24782 1
+1 24783 1
+24783 24783 1
+1 24784 1
+24784 24784 1
+1 24785 1
+24785 24785 1
+1 24786 1
+24786 24786 1
+1 24787 1
+24787 24787 1
+1 24788 1
+24788 24788 1
+1 24789 1
+24789 24789 1
+1 24790 1
+24790 24790 1
+1 24791 1
+24791 24791 1
+1 24792 1
+24792 24792 1
+1 24793 1
+24793 24793 1
+1 24794 1
+24794 24794 1
+1 24795 1
+24795 24795 1
+1 24796 1
+24796 24796 1
+1 24797 1
+24797 24797 1
+1 24798 1
+24798 24798 1
+1 24799 1
+24799 24799 1
+1 24800 1
+24800 24800 1
+1 24801 1
+24801 24801 1
+1 24802 1
+24802 24802 1
+1 24803 1
+24803 24803 1
+1 24804 1
+24804 24804 1
+1 24805 1
+24805 24805 1
+1 24806 1
+24806 24806 1
+1 24807 1
+24807 24807 1
+1 24808 1
+24808 24808 1
+1 24809 1
+24809 24809 1
+1 24810 1
+24810 24810 1
+1 24811 1
+24811 24811 1
+1 24812 1
+24812 24812 1
+1 24813 1
+24813 24813 1
+1 24814 1
+24814 24814 1
+1 24815 1
+24815 24815 1
+1 24816 1
+24816 24816 1
+1 24817 1
+24817 24817 1
+1 24818 1
+24818 24818 1
+1 24819 1
+24819 24819 1
+1 24820 1
+24820 24820 1
+1 24821 1
+24821 24821 1
+1 24822 1
+24822 24822 1
+1 24823 1
+24823 24823 1
+1 24824 1
+24824 24824 1
+1 24825 1
+24825 24825 1
+1 24826 1
+24826 24826 1
+1 24827 1
+24827 24827 1
+1 24828 1
+24828 24828 1
+1 24829 1
+24829 24829 1
+1 24830 1
+24830 24830 1
+1 24831 1
+24831 24831 1
+1 24832 1
+24832 24832 1
+1 24833 1
+24833 24833 1
+1 24834 1
+24834 24834 1
+1 24835 1
+24835 24835 1
+1 24836 1
+24836 24836 1
+1 24837 1
+24837 24837 1
+1 24838 1
+24838 24838 1
+1 24839 1
+24839 24839 1
+1 24840 1
+24840 24840 1
+1 24841 1
+24841 24841 1
+1 24842 1
+24842 24842 1
+1 24843 1
+24843 24843 1
+1 24844 1
+24844 24844 1
+1 24845 1
+24845 24845 1
+1 24846 1
+24846 24846 1
+1 24847 1
+24847 24847 1
+1 24848 1
+24848 24848 1
+1 24849 1
+24849 24849 1
+1 24850 1
+24850 24850 1
+1 24851 1
+24851 24851 1
+1 24852 1
+24852 24852 1
+1 24853 1
+24853 24853 1
+1 24854 1
+24854 24854 1
+1 24855 1
+24855 24855 1
+1 24856 1
+24856 24856 1
+1 24857 1
+24857 24857 1
+1 24858 1
+24858 24858 1
+1 24859 1
+24859 24859 1
+1 24860 1
+24860 24860 1
+1 24861 1
+24861 24861 1
+1 24862 1
+24862 24862 1
+1 24863 1
+24863 24863 1
+1 24864 1
+24864 24864 1
+1 24865 1
+24865 24865 1
+1 24866 1
+24866 24866 1
+1 24867 1
+24867 24867 1
+1 24868 1
+24868 24868 1
+1 24869 1
+24869 24869 1
+1 24870 1
+24870 24870 1
+1 24871 1
+24871 24871 1
+1 24872 1
+24872 24872 1
+1 24873 1
+24873 24873 1
+1 24874 1
+24874 24874 1
+1 24875 1
+24875 24875 1
+1 24876 1
+24876 24876 1
+1 24877 1
+24877 24877 1
+1 24878 1
+24878 24878 1
+1 24879 1
+24879 24879 1
+1 24880 1
+24880 24880 1
+1 24881 1
+24881 24881 1
+1 24882 1
+24882 24882 1
+1 24883 1
+24883 24883 1
+1 24884 1
+24884 24884 1
+1 24885 1
+24885 24885 1
+1 24886 1
+24886 24886 1
+1 24887 1
+24887 24887 1
+1 24888 1
+24888 24888 1
+1 24889 1
+24889 24889 1
+1 24890 1
+24890 24890 1
+1 24891 1
+24891 24891 1
+1 24892 1
+24892 24892 1
+1 24893 1
+24893 24893 1
+1 24894 1
+24894 24894 1
+1 24895 1
+24895 24895 1
+1 24896 1
+24896 24896 1
+1 24897 1
+24897 24897 1
+1 24898 1
+24898 24898 1
+1 24899 1
+24899 24899 1
+1 24900 1
+24900 24900 1
+1 24901 1
+24901 24901 1
+1 24902 1
+24902 24902 1
+1 24903 1
+24903 24903 1
+1 24904 1
+24904 24904 1
+1 24905 1
+24905 24905 1
+1 24906 1
+24906 24906 1
+1 24907 1
+24907 24907 1
+1 24908 1
+24908 24908 1
+1 24909 1
+24909 24909 1
+1 24910 1
+24910 24910 1
+1 24911 1
+24911 24911 1
+1 24912 1
+24912 24912 1
+1 24913 1
+24913 24913 1
+1 24914 1
+24914 24914 1
+1 24915 1
+24915 24915 1
+1 24916 1
+24916 24916 1
+1 24917 1
+24917 24917 1
+1 24918 1
+24918 24918 1
+1 24919 1
+24919 24919 1
+1 24920 1
+24920 24920 1
+1 24921 1
+24921 24921 1
+1 24922 1
+24922 24922 1
+1 24923 1
+24923 24923 1
+1 24924 1
+24924 24924 1
+1 24925 1
+24925 24925 1
+1 24926 1
+24926 24926 1
+1 24927 1
+24927 24927 1
+1 24928 1
+24928 24928 1
+1 24929 1
+24929 24929 1
+1 24930 1
+24930 24930 1
+1 24931 1
+24931 24931 1
+1 24932 1
+24932 24932 1
+1 24933 1
+24933 24933 1
+1 24934 1
+24934 24934 1
+1 24935 1
+24935 24935 1
+1 24936 1
+24936 24936 1
+1 24937 1
+24937 24937 1
+1 24938 1
+24938 24938 1
+1 24939 1
+24939 24939 1
+1 24940 1
+24940 24940 1
+1 24941 1
+24941 24941 1
+1 24942 1
+24942 24942 1
+1 24943 1
+24943 24943 1
+1 24944 1
+24944 24944 1
+1 24945 1
+24945 24945 1
+1 24946 1
+24946 24946 1
+1 24947 1
+24947 24947 1
+1 24948 1
+24948 24948 1
+1 24949 1
+24949 24949 1
+1 24950 1
+24950 24950 1
+1 24951 1
+24951 24951 1
+1 24952 1
+24952 24952 1
+1 24953 1
+24953 24953 1
+1 24954 1
+24954 24954 1
+1 24955 1
+24955 24955 1
+1 24956 1
+24956 24956 1
+1 24957 1
+24957 24957 1
+1 24958 1
+24958 24958 1
+1 24959 1
+24959 24959 1
+1 24960 1
+24960 24960 1
+1 24961 1
+24961 24961 1
+1 24962 1
+24962 24962 1
+1 24963 1
+24963 24963 1
+1 24964 1
+24964 24964 1
+1 24965 1
+24965 24965 1
+1 24966 1
+24966 24966 1
+1 24967 1
+24967 24967 1
+1 24968 1
+24968 24968 1
+1 24969 1
+24969 24969 1
+1 24970 1
+24970 24970 1
+1 24971 1
+24971 24971 1
+1 24972 1
+24972 24972 1
+1 24973 1
+24973 24973 1
+1 24974 1
+24974 24974 1
+1 24975 1
+24975 24975 1
+1 24976 1
+24976 24976 1
+1 24977 1
+24977 24977 1
+1 24978 1
+24978 24978 1
+1 24979 1
+24979 24979 1
+1 24980 1
+24980 24980 1
+1 24981 1
+24981 24981 1
+1 24982 1
+24982 24982 1
+1 24983 1
+24983 24983 1
+1 24984 1
+24984 24984 1
+1 24985 1
+24985 24985 1
+1 24986 1
+24986 24986 1
+1 24987 1
+24987 24987 1
+1 24988 1
+24988 24988 1
+1 24989 1
+24989 24989 1
+1 24990 1
+24990 24990 1
+1 24991 1
+24991 24991 1
+1 24992 1
+24992 24992 1
+1 24993 1
+24993 24993 1
+1 24994 1
+24994 24994 1
+1 24995 1
+24995 24995 1
+1 24996 1
+24996 24996 1
+1 24997 1
+24997 24997 1
+1 24998 1
+24998 24998 1
+1 24999 1
+24999 24999 1
+1 25000 1
+25000 25000 1
+1 25001 1
+25001 25001 1
+1 25002 1
+25002 25002 1
+1 25003 1
+25003 25003 1
+1 25004 1
+25004 25004 1
+1 25005 1
+25005 25005 1
+1 25006 1
+25006 25006 1
+1 25007 1
+25007 25007 1
+1 25008 1
+25008 25008 1
+1 25009 1
+25009 25009 1
+1 25010 1
+25010 25010 1
+1 25011 1
+25011 25011 1
+1 25012 1
+25012 25012 1
+1 25013 1
+25013 25013 1
+1 25014 1
+25014 25014 1
+1 25015 1
+25015 25015 1
+1 25016 1
+25016 25016 1
+1 25017 1
+25017 25017 1
+1 25018 1
+25018 25018 1
+1 25019 1
+25019 25019 1
+1 25020 1
+25020 25020 1
+1 25021 1
+25021 25021 1
+1 25022 1
+25022 25022 1
+1 25023 1
+25023 25023 1
+1 25024 1
+25024 25024 1
+1 25025 1
+25025 25025 1
+1 25026 1
+25026 25026 1
+1 25027 1
+25027 25027 1
+1 25028 1
+25028 25028 1
+1 25029 1
+25029 25029 1
+1 25030 1
+25030 25030 1
+1 25031 1
+25031 25031 1
+1 25032 1
+25032 25032 1
+1 25033 1
+25033 25033 1
+1 25034 1
+25034 25034 1
+1 25035 1
+25035 25035 1
+1 25036 1
+25036 25036 1
+1 25037 1
+25037 25037 1
+1 25038 1
+25038 25038 1
+1 25039 1
+25039 25039 1
+1 25040 1
+25040 25040 1
+1 25041 1
+25041 25041 1
+1 25042 1
+25042 25042 1
+1 25043 1
+25043 25043 1
+1 25044 1
+25044 25044 1
+1 25045 1
+25045 25045 1
+1 25046 1
+25046 25046 1
+1 25047 1
+25047 25047 1
+1 25048 1
+25048 25048 1
+1 25049 1
+25049 25049 1
+1 25050 1
+25050 25050 1
+1 25051 1
+25051 25051 1
+1 25052 1
+25052 25052 1
+1 25053 1
+25053 25053 1
+1 25054 1
+25054 25054 1
+1 25055 1
+25055 25055 1
+1 25056 1
+25056 25056 1
+1 25057 1
+25057 25057 1
+1 25058 1
+25058 25058 1
+1 25059 1
+25059 25059 1
+1 25060 1
+25060 25060 1
+1 25061 1
+25061 25061 1
+1 25062 1
+25062 25062 1
+1 25063 1
+25063 25063 1
+1 25064 1
+25064 25064 1
+1 25065 1
+25065 25065 1
+1 25066 1
+25066 25066 1
+1 25067 1
+25067 25067 1
+1 25068 1
+25068 25068 1
+1 25069 1
+25069 25069 1
+1 25070 1
+25070 25070 1
+1 25071 1
+25071 25071 1
+1 25072 1
+25072 25072 1
+1 25073 1
+25073 25073 1
+1 25074 1
+25074 25074 1
+1 25075 1
+25075 25075 1
+1 25076 1
+25076 25076 1
+1 25077 1
+25077 25077 1
+1 25078 1
+25078 25078 1
+1 25079 1
+25079 25079 1
+1 25080 1
+25080 25080 1
+1 25081 1
+25081 25081 1
+1 25082 1
+25082 25082 1
+1 25083 1
+25083 25083 1
+1 25084 1
+25084 25084 1
+1 25085 1
+25085 25085 1
+1 25086 1
+25086 25086 1
+1 25087 1
+25087 25087 1
+1 25088 1
+25088 25088 1
+1 25089 1
+25089 25089 1
+1 25090 1
+25090 25090 1
+1 25091 1
+25091 25091 1
+1 25092 1
+25092 25092 1
+1 25093 1
+25093 25093 1
+1 25094 1
+25094 25094 1
+1 25095 1
+25095 25095 1
+1 25096 1
+25096 25096 1
+1 25097 1
+25097 25097 1
+1 25098 1
+25098 25098 1
+1 25099 1
+25099 25099 1
+1 25100 1
+25100 25100 1
+1 25101 1
+25101 25101 1
+1 25102 1
+25102 25102 1
+1 25103 1
+25103 25103 1
+1 25104 1
+25104 25104 1
+1 25105 1
+25105 25105 1
+1 25106 1
+25106 25106 1
+1 25107 1
+25107 25107 1
+1 25108 1
+25108 25108 1
+1 25109 1
+25109 25109 1
+1 25110 1
+25110 25110 1
+1 25111 1
+25111 25111 1
+1 25112 1
+25112 25112 1
+1 25113 1
+25113 25113 1
+1 25114 1
+25114 25114 1
+1 25115 1
+25115 25115 1
+1 25116 1
+25116 25116 1
+1 25117 1
+25117 25117 1
+1 25118 1
+25118 25118 1
+1 25119 1
+25119 25119 1
+1 25120 1
+25120 25120 1
+1 25121 1
+25121 25121 1
+1 25122 1
+25122 25122 1
+1 25123 1
+25123 25123 1
+1 25124 1
+25124 25124 1
+1 25125 1
+25125 25125 1
+1 25126 1
+25126 25126 1
+1 25127 1
+25127 25127 1
+1 25128 1
+25128 25128 1
+1 25129 1
+25129 25129 1
+1 25130 1
+25130 25130 1
+1 25131 1
+25131 25131 1
+1 25132 1
+25132 25132 1
+1 25133 1
+25133 25133 1
+1 25134 1
+25134 25134 1
+1 25135 1
+25135 25135 1
+1 25136 1
+25136 25136 1
+1 25137 1
+25137 25137 1
+1 25138 1
+25138 25138 1
+1 25139 1
+25139 25139 1
+1 25140 1
+25140 25140 1
+1 25141 1
+25141 25141 1
+1 25142 1
+25142 25142 1
+1 25143 1
+25143 25143 1
+1 25144 1
+25144 25144 1
+1 25145 1
+25145 25145 1
+1 25146 1
+25146 25146 1
+1 25147 1
+25147 25147 1
+1 25148 1
+25148 25148 1
+1 25149 1
+25149 25149 1
+1 25150 1
+25150 25150 1
+1 25151 1
+25151 25151 1
+1 25152 1
+25152 25152 1
+1 25153 1
+25153 25153 1
+1 25154 1
+25154 25154 1
+1 25155 1
+25155 25155 1
+1 25156 1
+25156 25156 1
+1 25157 1
+25157 25157 1
+1 25158 1
+25158 25158 1
+1 25159 1
+25159 25159 1
+1 25160 1
+25160 25160 1
+1 25161 1
+25161 25161 1
+1 25162 1
+25162 25162 1
+1 25163 1
+25163 25163 1
+1 25164 1
+25164 25164 1
+1 25165 1
+25165 25165 1
+1 25166 1
+25166 25166 1
+1 25167 1
+25167 25167 1
+1 25168 1
+25168 25168 1
+1 25169 1
+25169 25169 1
+1 25170 1
+25170 25170 1
+1 25171 1
+25171 25171 1
+1 25172 1
+25172 25172 1
+1 25173 1
+25173 25173 1
+1 25174 1
+25174 25174 1
+1 25175 1
+25175 25175 1
+1 25176 1
+25176 25176 1
+1 25177 1
+25177 25177 1
+1 25178 1
+25178 25178 1
+1 25179 1
+25179 25179 1
+1 25180 1
+25180 25180 1
+1 25181 1
+25181 25181 1
+1 25182 1
+25182 25182 1
+1 25183 1
+25183 25183 1
+1 25184 1
+25184 25184 1
+1 25185 1
+25185 25185 1
+1 25186 1
+25186 25186 1
+1 25187 1
+25187 25187 1
+1 25188 1
+25188 25188 1
+1 25189 1
+25189 25189 1
+1 25190 1
+25190 25190 1
+1 25191 1
+25191 25191 1
+1 25192 1
+25192 25192 1
+1 25193 1
+25193 25193 1
+1 25194 1
+25194 25194 1
+1 25195 1
+25195 25195 1
+1 25196 1
+25196 25196 1
+1 25197 1
+25197 25197 1
+1 25198 1
+25198 25198 1
+1 25199 1
+25199 25199 1
+1 25200 1
+25200 25200 1
+1 25201 1
+25201 25201 1
+1 25202 1
+25202 25202 1
+1 25203 1
+25203 25203 1
+1 25204 1
+25204 25204 1
+1 25205 1
+25205 25205 1
+1 25206 1
+25206 25206 1
+1 25207 1
+25207 25207 1
+1 25208 1
+25208 25208 1
+1 25209 1
+25209 25209 1
+1 25210 1
+25210 25210 1
+1 25211 1
+25211 25211 1
+1 25212 1
+25212 25212 1
+1 25213 1
+25213 25213 1
+1 25214 1
+25214 25214 1
+1 25215 1
+25215 25215 1
+1 25216 1
+25216 25216 1
+1 25217 1
+25217 25217 1
+1 25218 1
+25218 25218 1
+1 25219 1
+25219 25219 1
+1 25220 1
+25220 25220 1
+1 25221 1
+25221 25221 1
+1 25222 1
+25222 25222 1
+1 25223 1
+25223 25223 1
+1 25224 1
+25224 25224 1
+1 25225 1
+25225 25225 1
+1 25226 1
+25226 25226 1
+1 25227 1
+25227 25227 1
+1 25228 1
+25228 25228 1
+1 25229 1
+25229 25229 1
+1 25230 1
+25230 25230 1
+1 25231 1
+25231 25231 1
+1 25232 1
+25232 25232 1
+1 25233 1
+25233 25233 1
+1 25234 1
+25234 25234 1
+1 25235 1
+25235 25235 1
+1 25236 1
+25236 25236 1
+1 25237 1
+25237 25237 1
+1 25238 1
+25238 25238 1
+1 25239 1
+25239 25239 1
+1 25240 1
+25240 25240 1
+1 25241 1
+25241 25241 1
+1 25242 1
+25242 25242 1
+1 25243 1
+25243 25243 1
+1 25244 1
+25244 25244 1
+1 25245 1
+25245 25245 1
+1 25246 1
+25246 25246 1
+1 25247 1
+25247 25247 1
+1 25248 1
+25248 25248 1
+1 25249 1
+25249 25249 1
+1 25250 1
+25250 25250 1
+1 25251 1
+25251 25251 1
+1 25252 1
+25252 25252 1
+1 25253 1
+25253 25253 1
+1 25254 1
+25254 25254 1
+1 25255 1
+25255 25255 1
+1 25256 1
+25256 25256 1
+1 25257 1
+25257 25257 1
+1 25258 1
+25258 25258 1
+1 25259 1
+25259 25259 1
+1 25260 1
+25260 25260 1
+1 25261 1
+25261 25261 1
+1 25262 1
+25262 25262 1
+1 25263 1
+25263 25263 1
+1 25264 1
+25264 25264 1
+1 25265 1
+25265 25265 1
+1 25266 1
+25266 25266 1
+1 25267 1
+25267 25267 1
+1 25268 1
+25268 25268 1
+1 25269 1
+25269 25269 1
+1 25270 1
+25270 25270 1
+1 25271 1
+25271 25271 1
+1 25272 1
+25272 25272 1
+1 25273 1
+25273 25273 1
+1 25274 1
+25274 25274 1
+1 25275 1
+25275 25275 1
+1 25276 1
+25276 25276 1
+1 25277 1
+25277 25277 1
+1 25278 1
+25278 25278 1
+1 25279 1
+25279 25279 1
+1 25280 1
+25280 25280 1
+1 25281 1
+25281 25281 1
+1 25282 1
+25282 25282 1
+1 25283 1
+25283 25283 1
+1 25284 1
+25284 25284 1
+1 25285 1
+25285 25285 1
+1 25286 1
+25286 25286 1
+1 25287 1
+25287 25287 1
+1 25288 1
+25288 25288 1
+1 25289 1
+25289 25289 1
+1 25290 1
+25290 25290 1
+1 25291 1
+25291 25291 1
+1 25292 1
+25292 25292 1
+1 25293 1
+25293 25293 1
+1 25294 1
+25294 25294 1
+1 25295 1
+25295 25295 1
+1 25296 1
+25296 25296 1
+1 25297 1
+25297 25297 1
+1 25298 1
+25298 25298 1
+1 25299 1
+25299 25299 1
+1 25300 1
+25300 25300 1
+1 25301 1
+25301 25301 1
+1 25302 1
+25302 25302 1
+1 25303 1
+25303 25303 1
+1 25304 1
+25304 25304 1
+1 25305 1
+25305 25305 1
+1 25306 1
+25306 25306 1
+1 25307 1
+25307 25307 1
+1 25308 1
+25308 25308 1
+1 25309 1
+25309 25309 1
+1 25310 1
+25310 25310 1
+1 25311 1
+25311 25311 1
+1 25312 1
+25312 25312 1
+1 25313 1
+25313 25313 1
+1 25314 1
+25314 25314 1
+1 25315 1
+25315 25315 1
+1 25316 1
+25316 25316 1
+1 25317 1
+25317 25317 1
+1 25318 1
+25318 25318 1
+1 25319 1
+25319 25319 1
+1 25320 1
+25320 25320 1
+1 25321 1
+25321 25321 1
+1 25322 1
+25322 25322 1
+1 25323 1
+25323 25323 1
+1 25324 1
+25324 25324 1
+1 25325 1
+25325 25325 1
+1 25326 1
+25326 25326 1
+1 25327 1
+25327 25327 1
+1 25328 1
+25328 25328 1
+1 25329 1
+25329 25329 1
+1 25330 1
+25330 25330 1
+1 25331 1
+25331 25331 1
+1 25332 1
+25332 25332 1
+1 25333 1
+25333 25333 1
+1 25334 1
+25334 25334 1
+1 25335 1
+25335 25335 1
+1 25336 1
+25336 25336 1
+1 25337 1
+25337 25337 1
+1 25338 1
+25338 25338 1
+1 25339 1
+25339 25339 1
+1 25340 1
+25340 25340 1
+1 25341 1
+25341 25341 1
+1 25342 1
+25342 25342 1
+1 25343 1
+25343 25343 1
+1 25344 1
+25344 25344 1
+1 25345 1
+25345 25345 1
+1 25346 1
+25346 25346 1
+1 25347 1
+25347 25347 1
+1 25348 1
+25348 25348 1
+1 25349 1
+25349 25349 1
+1 25350 1
+25350 25350 1
+1 25351 1
+25351 25351 1
+1 25352 1
+25352 25352 1
+1 25353 1
+25353 25353 1
+1 25354 1
+25354 25354 1
+1 25355 1
+25355 25355 1
+1 25356 1
+25356 25356 1
+1 25357 1
+25357 25357 1
+1 25358 1
+25358 25358 1
+1 25359 1
+25359 25359 1
+1 25360 1
+25360 25360 1
+1 25361 1
+25361 25361 1
+1 25362 1
+25362 25362 1
+1 25363 1
+25363 25363 1
+1 25364 1
+25364 25364 1
+1 25365 1
+25365 25365 1
+1 25366 1
+25366 25366 1
+1 25367 1
+25367 25367 1
+1 25368 1
+25368 25368 1
+1 25369 1
+25369 25369 1
+1 25370 1
+25370 25370 1
+1 25371 1
+25371 25371 1
+1 25372 1
+25372 25372 1
+1 25373 1
+25373 25373 1
+1 25374 1
+25374 25374 1
+1 25375 1
+25375 25375 1
+1 25376 1
+25376 25376 1
+1 25377 1
+25377 25377 1
+1 25378 1
+25378 25378 1
+1 25379 1
+25379 25379 1
+1 25380 1
+25380 25380 1
+1 25381 1
+25381 25381 1
+1 25382 1
+25382 25382 1
+1 25383 1
+25383 25383 1
+1 25384 1
+25384 25384 1
+1 25385 1
+25385 25385 1
+1 25386 1
+25386 25386 1
+1 25387 1
+25387 25387 1
+1 25388 1
+25388 25388 1
+1 25389 1
+25389 25389 1
+1 25390 1
+25390 25390 1
+1 25391 1
+25391 25391 1
+1 25392 1
+25392 25392 1
+1 25393 1
+25393 25393 1
+1 25394 1
+25394 25394 1
+1 25395 1
+25395 25395 1
+1 25396 1
+25396 25396 1
+1 25397 1
+25397 25397 1
+1 25398 1
+25398 25398 1
+1 25399 1
+25399 25399 1
+1 25400 1
+25400 25400 1
+1 25401 1
+25401 25401 1
+1 25402 1
+25402 25402 1
+1 25403 1
+25403 25403 1
+1 25404 1
+25404 25404 1
+1 25405 1
+25405 25405 1
+1 25406 1
+25406 25406 1
+1 25407 1
+25407 25407 1
+1 25408 1
+25408 25408 1
+1 25409 1
+25409 25409 1
+1 25410 1
+25410 25410 1
+1 25411 1
+25411 25411 1
+1 25412 1
+25412 25412 1
+1 25413 1
+25413 25413 1
+1 25414 1
+25414 25414 1
+1 25415 1
+25415 25415 1
+1 25416 1
+25416 25416 1
+1 25417 1
+25417 25417 1
+1 25418 1
+25418 25418 1
+1 25419 1
+25419 25419 1
+1 25420 1
+25420 25420 1
+1 25421 1
+25421 25421 1
+1 25422 1
+25422 25422 1
+1 25423 1
+25423 25423 1
+1 25424 1
+25424 25424 1
+1 25425 1
+25425 25425 1
+1 25426 1
+25426 25426 1
+1 25427 1
+25427 25427 1
+1 25428 1
+25428 25428 1
+1 25429 1
+25429 25429 1
+1 25430 1
+25430 25430 1
+1 25431 1
+25431 25431 1
+1 25432 1
+25432 25432 1
+1 25433 1
+25433 25433 1
+1 25434 1
+25434 25434 1
+1 25435 1
+25435 25435 1
+1 25436 1
+25436 25436 1
+1 25437 1
+25437 25437 1
+1 25438 1
+25438 25438 1
+1 25439 1
+25439 25439 1
+1 25440 1
+25440 25440 1
+1 25441 1
+25441 25441 1
+1 25442 1
+25442 25442 1
+1 25443 1
+25443 25443 1
+1 25444 1
+25444 25444 1
+1 25445 1
+25445 25445 1
+1 25446 1
+25446 25446 1
+1 25447 1
+25447 25447 1
+1 25448 1
+25448 25448 1
+1 25449 1
+25449 25449 1
+1 25450 1
+25450 25450 1
+1 25451 1
+25451 25451 1
+1 25452 1
+25452 25452 1
+1 25453 1
+25453 25453 1
+1 25454 1
+25454 25454 1
+1 25455 1
+25455 25455 1
+1 25456 1
+25456 25456 1
+1 25457 1
+25457 25457 1
+1 25458 1
+25458 25458 1
+1 25459 1
+25459 25459 1
+1 25460 1
+25460 25460 1
+1 25461 1
+25461 25461 1
+1 25462 1
+25462 25462 1
+1 25463 1
+25463 25463 1
+1 25464 1
+25464 25464 1
+1 25465 1
+25465 25465 1
+1 25466 1
+25466 25466 1
+1 25467 1
+25467 25467 1
+1 25468 1
+25468 25468 1
+1 25469 1
+25469 25469 1
+1 25470 1
+25470 25470 1
+1 25471 1
+25471 25471 1
+1 25472 1
+25472 25472 1
+1 25473 1
+25473 25473 1
+1 25474 1
+25474 25474 1
+1 25475 1
+25475 25475 1
+1 25476 1
+25476 25476 1
+1 25477 1
+25477 25477 1
+1 25478 1
+25478 25478 1
+1 25479 1
+25479 25479 1
+1 25480 1
+25480 25480 1
+1 25481 1
+25481 25481 1
+1 25482 1
+25482 25482 1
+1 25483 1
+25483 25483 1
+1 25484 1
+25484 25484 1
+1 25485 1
+25485 25485 1
+1 25486 1
+25486 25486 1
+1 25487 1
+25487 25487 1
+1 25488 1
+25488 25488 1
+1 25489 1
+25489 25489 1
+1 25490 1
+25490 25490 1
+1 25491 1
+25491 25491 1
+1 25492 1
+25492 25492 1
+1 25493 1
+25493 25493 1
+1 25494 1
+25494 25494 1
+1 25495 1
+25495 25495 1
+1 25496 1
+25496 25496 1
+1 25497 1
+25497 25497 1
+1 25498 1
+25498 25498 1
+1 25499 1
+25499 25499 1
+1 25500 1
+25500 25500 1
+1 25501 1
+25501 25501 1
+1 25502 1
+25502 25502 1
+1 25503 1
+25503 25503 1
+1 25504 1
+25504 25504 1
+1 25505 1
+25505 25505 1
+1 25506 1
+25506 25506 1
+1 25507 1
+25507 25507 1
+1 25508 1
+25508 25508 1
+1 25509 1
+25509 25509 1
+1 25510 1
+25510 25510 1
+1 25511 1
+25511 25511 1
+1 25512 1
+25512 25512 1
+1 25513 1
+25513 25513 1
+1 25514 1
+25514 25514 1
+1 25515 1
+25515 25515 1
+1 25516 1
+25516 25516 1
+1 25517 1
+25517 25517 1
+1 25518 1
+25518 25518 1
+1 25519 1
+25519 25519 1
+1 25520 1
+25520 25520 1
+1 25521 1
+25521 25521 1
+1 25522 1
+25522 25522 1
+1 25523 1
+25523 25523 1
+1 25524 1
+25524 25524 1
+1 25525 1
+25525 25525 1
+1 25526 1
+25526 25526 1
+1 25527 1
+25527 25527 1
+1 25528 1
+25528 25528 1
+1 25529 1
+25529 25529 1
+1 25530 1
+25530 25530 1
+1 25531 1
+25531 25531 1
+1 25532 1
+25532 25532 1
+1 25533 1
+25533 25533 1
+1 25534 1
+25534 25534 1
+1 25535 1
+25535 25535 1
+1 25536 1
+25536 25536 1
+1 25537 1
+25537 25537 1
+1 25538 1
+25538 25538 1
+1 25539 1
+25539 25539 1
+1 25540 1
+25540 25540 1
+1 25541 1
+25541 25541 1
+1 25542 1
+25542 25542 1
+1 25543 1
+25543 25543 1
+1 25544 1
+25544 25544 1
+1 25545 1
+25545 25545 1
+1 25546 1
+25546 25546 1
+1 25547 1
+25547 25547 1
+1 25548 1
+25548 25548 1
+1 25549 1
+25549 25549 1
+1 25550 1
+25550 25550 1
+1 25551 1
+25551 25551 1
+1 25552 1
+25552 25552 1
+1 25553 1
+25553 25553 1
+1 25554 1
+25554 25554 1
+1 25555 1
+25555 25555 1
+1 25556 1
+25556 25556 1
+1 25557 1
+25557 25557 1
+1 25558 1
+25558 25558 1
+1 25559 1
+25559 25559 1
+1 25560 1
+25560 25560 1
+1 25561 1
+25561 25561 1
+1 25562 1
+25562 25562 1
+1 25563 1
+25563 25563 1
+1 25564 1
+25564 25564 1
+1 25565 1
+25565 25565 1
+1 25566 1
+25566 25566 1
+1 25567 1
+25567 25567 1
+1 25568 1
+25568 25568 1
+1 25569 1
+25569 25569 1
+1 25570 1
+25570 25570 1
+1 25571 1
+25571 25571 1
+1 25572 1
+25572 25572 1
+1 25573 1
+25573 25573 1
+1 25574 1
+25574 25574 1
+1 25575 1
+25575 25575 1
+1 25576 1
+25576 25576 1
+1 25577 1
+25577 25577 1
+1 25578 1
+25578 25578 1
+1 25579 1
+25579 25579 1
+1 25580 1
+25580 25580 1
+1 25581 1
+25581 25581 1
+1 25582 1
+25582 25582 1
+1 25583 1
+25583 25583 1
+1 25584 1
+25584 25584 1
+1 25585 1
+25585 25585 1
+1 25586 1
+25586 25586 1
+1 25587 1
+25587 25587 1
+1 25588 1
+25588 25588 1
+1 25589 1
+25589 25589 1
+1 25590 1
+25590 25590 1
+1 25591 1
+25591 25591 1
+1 25592 1
+25592 25592 1
+1 25593 1
+25593 25593 1
+1 25594 1
+25594 25594 1
+1 25595 1
+25595 25595 1
+1 25596 1
+25596 25596 1
+1 25597 1
+25597 25597 1
+1 25598 1
+25598 25598 1
+1 25599 1
+25599 25599 1
+1 25600 1
+25600 25600 1
+1 25601 1
+25601 25601 1
+1 25602 1
+25602 25602 1
+1 25603 1
+25603 25603 1
+1 25604 1
+25604 25604 1
+1 25605 1
+25605 25605 1
+1 25606 1
+25606 25606 1
+1 25607 1
+25607 25607 1
+1 25608 1
+25608 25608 1
+1 25609 1
+25609 25609 1
+1 25610 1
+25610 25610 1
+1 25611 1
+25611 25611 1
+1 25612 1
+25612 25612 1
+1 25613 1
+25613 25613 1
+1 25614 1
+25614 25614 1
+1 25615 1
+25615 25615 1
+1 25616 1
+25616 25616 1
+1 25617 1
+25617 25617 1
+1 25618 1
+25618 25618 1
+1 25619 1
+25619 25619 1
+1 25620 1
+25620 25620 1
+1 25621 1
+25621 25621 1
+1 25622 1
+25622 25622 1
+1 25623 1
+25623 25623 1
+1 25624 1
+25624 25624 1
+1 25625 1
+25625 25625 1
+1 25626 1
+25626 25626 1
+1 25627 1
+25627 25627 1
+1 25628 1
+25628 25628 1
+1 25629 1
+25629 25629 1
+1 25630 1
+25630 25630 1
+1 25631 1
+25631 25631 1
+1 25632 1
+25632 25632 1
+1 25633 1
+25633 25633 1
+1 25634 1
+25634 25634 1
+1 25635 1
+25635 25635 1
+1 25636 1
+25636 25636 1
+1 25637 1
+25637 25637 1
+1 25638 1
+25638 25638 1
+1 25639 1
+25639 25639 1
+1 25640 1
+25640 25640 1
+1 25641 1
+25641 25641 1
+1 25642 1
+25642 25642 1
+1 25643 1
+25643 25643 1
+1 25644 1
+25644 25644 1
+1 25645 1
+25645 25645 1
+1 25646 1
+25646 25646 1
+1 25647 1
+25647 25647 1
+1 25648 1
+25648 25648 1
+1 25649 1
+25649 25649 1
+1 25650 1
+25650 25650 1
+1 25651 1
+25651 25651 1
+1 25652 1
+25652 25652 1
+1 25653 1
+25653 25653 1
+1 25654 1
+25654 25654 1
+1 25655 1
+25655 25655 1
+1 25656 1
+25656 25656 1
+1 25657 1
+25657 25657 1
+1 25658 1
+25658 25658 1
+1 25659 1
+25659 25659 1
+1 25660 1
+25660 25660 1
+1 25661 1
+25661 25661 1
+1 25662 1
+25662 25662 1
+1 25663 1
+25663 25663 1
+1 25664 1
+25664 25664 1
+1 25665 1
+25665 25665 1
+1 25666 1
+25666 25666 1
+1 25667 1
+25667 25667 1
+1 25668 1
+25668 25668 1
+1 25669 1
+25669 25669 1
+1 25670 1
+25670 25670 1
+1 25671 1
+25671 25671 1
+1 25672 1
+25672 25672 1
+1 25673 1
+25673 25673 1
+1 25674 1
+25674 25674 1
+1 25675 1
+25675 25675 1
+1 25676 1
+25676 25676 1
+1 25677 1
+25677 25677 1
+1 25678 1
+25678 25678 1
+1 25679 1
+25679 25679 1
+1 25680 1
+25680 25680 1
+1 25681 1
+25681 25681 1
+1 25682 1
+25682 25682 1
+1 25683 1
+25683 25683 1
+1 25684 1
+25684 25684 1
+1 25685 1
+25685 25685 1
+1 25686 1
+25686 25686 1
+1 25687 1
+25687 25687 1
+1 25688 1
+25688 25688 1
+1 25689 1
+25689 25689 1
+1 25690 1
+25690 25690 1
+1 25691 1
+25691 25691 1
+1 25692 1
+25692 25692 1
+1 25693 1
+25693 25693 1
+1 25694 1
+25694 25694 1
+1 25695 1
+25695 25695 1
+1 25696 1
+25696 25696 1
+1 25697 1
+25697 25697 1
+1 25698 1
+25698 25698 1
+1 25699 1
+25699 25699 1
+1 25700 1
+25700 25700 1
+1 25701 1
+25701 25701 1
+1 25702 1
+25702 25702 1
+1 25703 1
+25703 25703 1
+1 25704 1
+25704 25704 1
+1 25705 1
+25705 25705 1
+1 25706 1
+25706 25706 1
+1 25707 1
+25707 25707 1
+1 25708 1
+25708 25708 1
+1 25709 1
+25709 25709 1
+1 25710 1
+25710 25710 1
+1 25711 1
+25711 25711 1
+1 25712 1
+25712 25712 1
+1 25713 1
+25713 25713 1
+1 25714 1
+25714 25714 1
+1 25715 1
+25715 25715 1
+1 25716 1
+25716 25716 1
+1 25717 1
+25717 25717 1
+1 25718 1
+25718 25718 1
+1 25719 1
+25719 25719 1
+1 25720 1
+25720 25720 1
+1 25721 1
+25721 25721 1
+1 25722 1
+25722 25722 1
+1 25723 1
+25723 25723 1
+1 25724 1
+25724 25724 1
+1 25725 1
+25725 25725 1
+1 25726 1
+25726 25726 1
+1 25727 1
+25727 25727 1
+1 25728 1
+25728 25728 1
+1 25729 1
+25729 25729 1
+1 25730 1
+25730 25730 1
+1 25731 1
+25731 25731 1
+1 25732 1
+25732 25732 1
+1 25733 1
+25733 25733 1
+1 25734 1
+25734 25734 1
+1 25735 1
+25735 25735 1
+1 25736 1
+25736 25736 1
+1 25737 1
+25737 25737 1
+1 25738 1
+25738 25738 1
+1 25739 1
+25739 25739 1
+1 25740 1
+25740 25740 1
+1 25741 1
+25741 25741 1
+1 25742 1
+25742 25742 1
+1 25743 1
+25743 25743 1
+1 25744 1
+25744 25744 1
+1 25745 1
+25745 25745 1
+1 25746 1
+25746 25746 1
+1 25747 1
+25747 25747 1
+1 25748 1
+25748 25748 1
+1 25749 1
+25749 25749 1
+1 25750 1
+25750 25750 1
+1 25751 1
+25751 25751 1
+1 25752 1
+25752 25752 1
+1 25753 1
+25753 25753 1
+1 25754 1
+25754 25754 1
+1 25755 1
+25755 25755 1
+1 25756 1
+25756 25756 1
+1 25757 1
+25757 25757 1
+1 25758 1
+25758 25758 1
+1 25759 1
+25759 25759 1
+1 25760 1
+25760 25760 1
+1 25761 1
+25761 25761 1
+1 25762 1
+25762 25762 1
+1 25763 1
+25763 25763 1
+1 25764 1
+25764 25764 1
+1 25765 1
+25765 25765 1
+1 25766 1
+25766 25766 1
+1 25767 1
+25767 25767 1
+1 25768 1
+25768 25768 1
+1 25769 1
+25769 25769 1
+1 25770 1
+25770 25770 1
+1 25771 1
+25771 25771 1
+1 25772 1
+25772 25772 1
+1 25773 1
+25773 25773 1
+1 25774 1
+25774 25774 1
+1 25775 1
+25775 25775 1
+1 25776 1
+25776 25776 1
+1 25777 1
+25777 25777 1
+1 25778 1
+25778 25778 1
+1 25779 1
+25779 25779 1
+1 25780 1
+25780 25780 1
+1 25781 1
+25781 25781 1
+1 25782 1
+25782 25782 1
+1 25783 1
+25783 25783 1
+1 25784 1
+25784 25784 1
+1 25785 1
+25785 25785 1
+1 25786 1
+25786 25786 1
+1 25787 1
+25787 25787 1
+1 25788 1
+25788 25788 1
+1 25789 1
+25789 25789 1
+1 25790 1
+25790 25790 1
+1 25791 1
+25791 25791 1
+1 25792 1
+25792 25792 1
+1 25793 1
+25793 25793 1
+1 25794 1
+25794 25794 1
+1 25795 1
+25795 25795 1
+1 25796 1
+25796 25796 1
+1 25797 1
+25797 25797 1
+1 25798 1
+25798 25798 1
+1 25799 1
+25799 25799 1
+1 25800 1
+25800 25800 1
+1 25801 1
+25801 25801 1
+1 25802 1
+25802 25802 1
+1 25803 1
+25803 25803 1
+1 25804 1
+25804 25804 1
+1 25805 1
+25805 25805 1
+1 25806 1
+25806 25806 1
+1 25807 1
+25807 25807 1
+1 25808 1
+25808 25808 1
+1 25809 1
+25809 25809 1
+1 25810 1
+25810 25810 1
+1 25811 1
+25811 25811 1
+1 25812 1
+25812 25812 1
+1 25813 1
+25813 25813 1
+1 25814 1
+25814 25814 1
+1 25815 1
+25815 25815 1
+1 25816 1
+25816 25816 1
+1 25817 1
+25817 25817 1
+1 25818 1
+25818 25818 1
+1 25819 1
+25819 25819 1
+1 25820 1
+25820 25820 1
+1 25821 1
+25821 25821 1
+1 25822 1
+25822 25822 1
+1 25823 1
+25823 25823 1
+1 25824 1
+25824 25824 1
+1 25825 1
+25825 25825 1
+1 25826 1
+25826 25826 1
+1 25827 1
+25827 25827 1
+1 25828 1
+25828 25828 1
+1 25829 1
+25829 25829 1
+1 25830 1
+25830 25830 1
+1 25831 1
+25831 25831 1
+1 25832 1
+25832 25832 1
+1 25833 1
+25833 25833 1
+1 25834 1
+25834 25834 1
+1 25835 1
+25835 25835 1
+1 25836 1
+25836 25836 1
+1 25837 1
+25837 25837 1
+1 25838 1
+25838 25838 1
+1 25839 1
+25839 25839 1
+1 25840 1
+25840 25840 1
+1 25841 1
+25841 25841 1
+1 25842 1
+25842 25842 1
+1 25843 1
+25843 25843 1
+1 25844 1
+25844 25844 1
+1 25845 1
+25845 25845 1
+1 25846 1
+25846 25846 1
+1 25847 1
+25847 25847 1
+1 25848 1
+25848 25848 1
+1 25849 1
+25849 25849 1
+1 25850 1
+25850 25850 1
+1 25851 1
+25851 25851 1
+1 25852 1
+25852 25852 1
+1 25853 1
+25853 25853 1
+1 25854 1
+25854 25854 1
+1 25855 1
+25855 25855 1
+1 25856 1
+25856 25856 1
+1 25857 1
+25857 25857 1
+1 25858 1
+25858 25858 1
+1 25859 1
+25859 25859 1
+1 25860 1
+25860 25860 1
+1 25861 1
+25861 25861 1
+1 25862 1
+25862 25862 1
+1 25863 1
+25863 25863 1
+1 25864 1
+25864 25864 1
+1 25865 1
+25865 25865 1
+1 25866 1
+25866 25866 1
+1 25867 1
+25867 25867 1
+1 25868 1
+25868 25868 1
+1 25869 1
+25869 25869 1
+1 25870 1
+25870 25870 1
+1 25871 1
+25871 25871 1
+1 25872 1
+25872 25872 1
+1 25873 1
+25873 25873 1
+1 25874 1
+25874 25874 1
+1 25875 1
+25875 25875 1
+1 25876 1
+25876 25876 1
+1 25877 1
+25877 25877 1
+1 25878 1
+25878 25878 1
+1 25879 1
+25879 25879 1
+1 25880 1
+25880 25880 1
+1 25881 1
+25881 25881 1
+1 25882 1
+25882 25882 1
+1 25883 1
+25883 25883 1
+1 25884 1
+25884 25884 1
+1 25885 1
+25885 25885 1
+1 25886 1
+25886 25886 1
+1 25887 1
+25887 25887 1
+1 25888 1
+25888 25888 1
+1 25889 1
+25889 25889 1
+1 25890 1
+25890 25890 1
+1 25891 1
+25891 25891 1
+1 25892 1
+25892 25892 1
+1 25893 1
+25893 25893 1
+1 25894 1
+25894 25894 1
+1 25895 1
+25895 25895 1
+1 25896 1
+25896 25896 1
+1 25897 1
+25897 25897 1
+1 25898 1
+25898 25898 1
+1 25899 1
+25899 25899 1
+1 25900 1
+25900 25900 1
+1 25901 1
+25901 25901 1
+1 25902 1
+25902 25902 1
+1 25903 1
+25903 25903 1
+1 25904 1
+25904 25904 1
+1 25905 1
+25905 25905 1
+1 25906 1
+25906 25906 1
+1 25907 1
+25907 25907 1
+1 25908 1
+25908 25908 1
+1 25909 1
+25909 25909 1
+1 25910 1
+25910 25910 1
+1 25911 1
+25911 25911 1
+1 25912 1
+25912 25912 1
+1 25913 1
+25913 25913 1
+1 25914 1
+25914 25914 1
+1 25915 1
+25915 25915 1
+1 25916 1
+25916 25916 1
+1 25917 1
+25917 25917 1
+1 25918 1
+25918 25918 1
+1 25919 1
+25919 25919 1
+1 25920 1
+25920 25920 1
+1 25921 1
+25921 25921 1
+1 25922 1
+25922 25922 1
+1 25923 1
+25923 25923 1
+1 25924 1
+25924 25924 1
+1 25925 1
+25925 25925 1
+1 25926 1
+25926 25926 1
+1 25927 1
+25927 25927 1
+1 25928 1
+25928 25928 1
+1 25929 1
+25929 25929 1
+1 25930 1
+25930 25930 1
+1 25931 1
+25931 25931 1
+1 25932 1
+25932 25932 1
+1 25933 1
+25933 25933 1
+1 25934 1
+25934 25934 1
+1 25935 1
+25935 25935 1
+1 25936 1
+25936 25936 1
+1 25937 1
+25937 25937 1
+1 25938 1
+25938 25938 1
+1 25939 1
+25939 25939 1
+1 25940 1
+25940 25940 1
+1 25941 1
+25941 25941 1
+1 25942 1
+25942 25942 1
+1 25943 1
+25943 25943 1
+1 25944 1
+25944 25944 1
+1 25945 1
+25945 25945 1
+1 25946 1
+25946 25946 1
+1 25947 1
+25947 25947 1
+1 25948 1
+25948 25948 1
+1 25949 1
+25949 25949 1
+1 25950 1
+25950 25950 1
+1 25951 1
+25951 25951 1
+1 25952 1
+25952 25952 1
+1 25953 1
+25953 25953 1
+1 25954 1
+25954 25954 1
+1 25955 1
+25955 25955 1
+1 25956 1
+25956 25956 1
+1 25957 1
+25957 25957 1
+1 25958 1
+25958 25958 1
+1 25959 1
+25959 25959 1
+1 25960 1
+25960 25960 1
+1 25961 1
+25961 25961 1
+1 25962 1
+25962 25962 1
+1 25963 1
+25963 25963 1
+1 25964 1
+25964 25964 1
+1 25965 1
+25965 25965 1
+1 25966 1
+25966 25966 1
+1 25967 1
+25967 25967 1
+1 25968 1
+25968 25968 1
+1 25969 1
+25969 25969 1
+1 25970 1
+25970 25970 1
+1 25971 1
+25971 25971 1
+1 25972 1
+25972 25972 1
+1 25973 1
+25973 25973 1
+1 25974 1
+25974 25974 1
+1 25975 1
+25975 25975 1
+1 25976 1
+25976 25976 1
+1 25977 1
+25977 25977 1
+1 25978 1
+25978 25978 1
+1 25979 1
+25979 25979 1
+1 25980 1
+25980 25980 1
+1 25981 1
+25981 25981 1
+1 25982 1
+25982 25982 1
+1 25983 1
+25983 25983 1
+1 25984 1
+25984 25984 1
+1 25985 1
+25985 25985 1
+1 25986 1
+25986 25986 1
+1 25987 1
+25987 25987 1
+1 25988 1
+25988 25988 1
+1 25989 1
+25989 25989 1
+1 25990 1
+25990 25990 1
+1 25991 1
+25991 25991 1
+1 25992 1
+25992 25992 1
+1 25993 1
+25993 25993 1
+1 25994 1
+25994 25994 1
+1 25995 1
+25995 25995 1
+1 25996 1
+25996 25996 1
+1 25997 1
+25997 25997 1
+1 25998 1
+25998 25998 1
+1 25999 1
+25999 25999 1
+1 26000 1
+26000 26000 1
+1 26001 1
+26001 26001 1
+1 26002 1
+26002 26002 1
+1 26003 1
+26003 26003 1
+1 26004 1
+26004 26004 1
+1 26005 1
+26005 26005 1
+1 26006 1
+26006 26006 1
+1 26007 1
+26007 26007 1
+1 26008 1
+26008 26008 1
+1 26009 1
+26009 26009 1
+1 26010 1
+26010 26010 1
+1 26011 1
+26011 26011 1
+1 26012 1
+26012 26012 1
+1 26013 1
+26013 26013 1
+1 26014 1
+26014 26014 1
+1 26015 1
+26015 26015 1
+1 26016 1
+26016 26016 1
+1 26017 1
+26017 26017 1
+1 26018 1
+26018 26018 1
+1 26019 1
+26019 26019 1
+1 26020 1
+26020 26020 1
+1 26021 1
+26021 26021 1
+1 26022 1
+26022 26022 1
+1 26023 1
+26023 26023 1
+1 26024 1
+26024 26024 1
+1 26025 1
+26025 26025 1
+1 26026 1
+26026 26026 1
+1 26027 1
+26027 26027 1
+1 26028 1
+26028 26028 1
+1 26029 1
+26029 26029 1
+1 26030 1
+26030 26030 1
+1 26031 1
+26031 26031 1
+1 26032 1
+26032 26032 1
+1 26033 1
+26033 26033 1
+1 26034 1
+26034 26034 1
+1 26035 1
+26035 26035 1
+1 26036 1
+26036 26036 1
+1 26037 1
+26037 26037 1
+1 26038 1
+26038 26038 1
+1 26039 1
+26039 26039 1
+1 26040 1
+26040 26040 1
+1 26041 1
+26041 26041 1
+1 26042 1
+26042 26042 1
+1 26043 1
+26043 26043 1
+1 26044 1
+26044 26044 1
+1 26045 1
+26045 26045 1
+1 26046 1
+26046 26046 1
+1 26047 1
+26047 26047 1
+1 26048 1
+26048 26048 1
+1 26049 1
+26049 26049 1
+1 26050 1
+26050 26050 1
+1 26051 1
+26051 26051 1
+1 26052 1
+26052 26052 1
+1 26053 1
+26053 26053 1
+1 26054 1
+26054 26054 1
+1 26055 1
+26055 26055 1
+1 26056 1
+26056 26056 1
+1 26057 1
+26057 26057 1
+1 26058 1
+26058 26058 1
+1 26059 1
+26059 26059 1
+1 26060 1
+26060 26060 1
+1 26061 1
+26061 26061 1
+1 26062 1
+26062 26062 1
+1 26063 1
+26063 26063 1
+1 26064 1
+26064 26064 1
+1 26065 1
+26065 26065 1
+1 26066 1
+26066 26066 1
+1 26067 1
+26067 26067 1
+1 26068 1
+26068 26068 1
+1 26069 1
+26069 26069 1
+1 26070 1
+26070 26070 1
+1 26071 1
+26071 26071 1
+1 26072 1
+26072 26072 1
+1 26073 1
+26073 26073 1
+1 26074 1
+26074 26074 1
+1 26075 1
+26075 26075 1
+1 26076 1
+26076 26076 1
+1 26077 1
+26077 26077 1
+1 26078 1
+26078 26078 1
+1 26079 1
+26079 26079 1
+1 26080 1
+26080 26080 1
+1 26081 1
+26081 26081 1
+1 26082 1
+26082 26082 1
+1 26083 1
+26083 26083 1
+1 26084 1
+26084 26084 1
+1 26085 1
+26085 26085 1
+1 26086 1
+26086 26086 1
+1 26087 1
+26087 26087 1
+1 26088 1
+26088 26088 1
+1 26089 1
+26089 26089 1
+1 26090 1
+26090 26090 1
+1 26091 1
+26091 26091 1
+1 26092 1
+26092 26092 1
+1 26093 1
+26093 26093 1
+1 26094 1
+26094 26094 1
+1 26095 1
+26095 26095 1
+1 26096 1
+26096 26096 1
+1 26097 1
+26097 26097 1
+1 26098 1
+26098 26098 1
+1 26099 1
+26099 26099 1
+1 26100 1
+26100 26100 1
+1 26101 1
+26101 26101 1
+1 26102 1
+26102 26102 1
+1 26103 1
+26103 26103 1
+1 26104 1
+26104 26104 1
+1 26105 1
+26105 26105 1
+1 26106 1
+26106 26106 1
+1 26107 1
+26107 26107 1
+1 26108 1
+26108 26108 1
+1 26109 1
+26109 26109 1
+1 26110 1
+26110 26110 1
+1 26111 1
+26111 26111 1
+1 26112 1
+26112 26112 1
+1 26113 1
+26113 26113 1
+1 26114 1
+26114 26114 1
+1 26115 1
+26115 26115 1
+1 26116 1
+26116 26116 1
+1 26117 1
+26117 26117 1
+1 26118 1
+26118 26118 1
+1 26119 1
+26119 26119 1
+1 26120 1
+26120 26120 1
+1 26121 1
+26121 26121 1
+1 26122 1
+26122 26122 1
+1 26123 1
+26123 26123 1
+1 26124 1
+26124 26124 1
+1 26125 1
+26125 26125 1
+1 26126 1
+26126 26126 1
+1 26127 1
+26127 26127 1
+1 26128 1
+26128 26128 1
+1 26129 1
+26129 26129 1
+1 26130 1
+26130 26130 1
+1 26131 1
+26131 26131 1
+1 26132 1
+26132 26132 1
+1 26133 1
+26133 26133 1
+1 26134 1
+26134 26134 1
+1 26135 1
+26135 26135 1
+1 26136 1
+26136 26136 1
+1 26137 1
+26137 26137 1
+1 26138 1
+26138 26138 1
+1 26139 1
+26139 26139 1
+1 26140 1
+26140 26140 1
+1 26141 1
+26141 26141 1
+1 26142 1
+26142 26142 1
+1 26143 1
+26143 26143 1
+1 26144 1
+26144 26144 1
+1 26145 1
+26145 26145 1
+1 26146 1
+26146 26146 1
+1 26147 1
+26147 26147 1
+1 26148 1
+26148 26148 1
+1 26149 1
+26149 26149 1
+1 26150 1
+26150 26150 1
+1 26151 1
+26151 26151 1
+1 26152 1
+26152 26152 1
+1 26153 1
+26153 26153 1
+1 26154 1
+26154 26154 1
+1 26155 1
+26155 26155 1
+1 26156 1
+26156 26156 1
+1 26157 1
+26157 26157 1
+1 26158 1
+26158 26158 1
+1 26159 1
+26159 26159 1
+1 26160 1
+26160 26160 1
+1 26161 1
+26161 26161 1
+1 26162 1
+26162 26162 1
+1 26163 1
+26163 26163 1
+1 26164 1
+26164 26164 1
+1 26165 1
+26165 26165 1
+1 26166 1
+26166 26166 1
+1 26167 1
+26167 26167 1
+1 26168 1
+26168 26168 1
+1 26169 1
+26169 26169 1
+1 26170 1
+26170 26170 1
+1 26171 1
+26171 26171 1
+1 26172 1
+26172 26172 1
+1 26173 1
+26173 26173 1
+1 26174 1
+26174 26174 1
+1 26175 1
+26175 26175 1
+1 26176 1
+26176 26176 1
+1 26177 1
+26177 26177 1
+1 26178 1
+26178 26178 1
+1 26179 1
+26179 26179 1
+1 26180 1
+26180 26180 1
+1 26181 1
+26181 26181 1
+1 26182 1
+26182 26182 1
+1 26183 1
+26183 26183 1
+1 26184 1
+26184 26184 1
+1 26185 1
+26185 26185 1
+1 26186 1
+26186 26186 1
+1 26187 1
+26187 26187 1
+1 26188 1
+26188 26188 1
+1 26189 1
+26189 26189 1
+1 26190 1
+26190 26190 1
+1 26191 1
+26191 26191 1
+1 26192 1
+26192 26192 1
+1 26193 1
+26193 26193 1
+1 26194 1
+26194 26194 1
+1 26195 1
+26195 26195 1
+1 26196 1
+26196 26196 1
+1 26197 1
+26197 26197 1
+1 26198 1
+26198 26198 1
+1 26199 1
+26199 26199 1
+1 26200 1
+26200 26200 1
+1 26201 1
+26201 26201 1
+1 26202 1
+26202 26202 1
+1 26203 1
+26203 26203 1
+1 26204 1
+26204 26204 1
+1 26205 1
+26205 26205 1
+1 26206 1
+26206 26206 1
+1 26207 1
+26207 26207 1
+1 26208 1
+26208 26208 1
+1 26209 1
+26209 26209 1
+1 26210 1
+26210 26210 1
+1 26211 1
+26211 26211 1
+1 26212 1
+26212 26212 1
+1 26213 1
+26213 26213 1
+1 26214 1
+26214 26214 1
+1 26215 1
+26215 26215 1
+1 26216 1
+26216 26216 1
+1 26217 1
+26217 26217 1
+1 26218 1
+26218 26218 1
+1 26219 1
+26219 26219 1
+1 26220 1
+26220 26220 1
+1 26221 1
+26221 26221 1
+1 26222 1
+26222 26222 1
+1 26223 1
+26223 26223 1
+1 26224 1
+26224 26224 1
+1 26225 1
+26225 26225 1
+1 26226 1
+26226 26226 1
+1 26227 1
+26227 26227 1
+1 26228 1
+26228 26228 1
+1 26229 1
+26229 26229 1
+1 26230 1
+26230 26230 1
+1 26231 1
+26231 26231 1
+1 26232 1
+26232 26232 1
+1 26233 1
+26233 26233 1
+1 26234 1
+26234 26234 1
+1 26235 1
+26235 26235 1
+1 26236 1
+26236 26236 1
+1 26237 1
+26237 26237 1
+1 26238 1
+26238 26238 1
+1 26239 1
+26239 26239 1
+1 26240 1
+26240 26240 1
+1 26241 1
+26241 26241 1
+1 26242 1
+26242 26242 1
+1 26243 1
+26243 26243 1
+1 26244 1
+26244 26244 1
+1 26245 1
+26245 26245 1
+1 26246 1
+26246 26246 1
+1 26247 1
+26247 26247 1
+1 26248 1
+26248 26248 1
+1 26249 1
+26249 26249 1
+1 26250 1
+26250 26250 1
+1 26251 1
+26251 26251 1
+1 26252 1
+26252 26252 1
+1 26253 1
+26253 26253 1
+1 26254 1
+26254 26254 1
+1 26255 1
+26255 26255 1
+1 26256 1
+26256 26256 1
+1 26257 1
+26257 26257 1
+1 26258 1
+26258 26258 1
+1 26259 1
+26259 26259 1
+1 26260 1
+26260 26260 1
+1 26261 1
+26261 26261 1
+1 26262 1
+26262 26262 1
+1 26263 1
+26263 26263 1
+1 26264 1
+26264 26264 1
+1 26265 1
+26265 26265 1
+1 26266 1
+26266 26266 1
+1 26267 1
+26267 26267 1
+1 26268 1
+26268 26268 1
+1 26269 1
+26269 26269 1
+1 26270 1
+26270 26270 1
+1 26271 1
+26271 26271 1
+1 26272 1
+26272 26272 1
+1 26273 1
+26273 26273 1
+1 26274 1
+26274 26274 1
+1 26275 1
+26275 26275 1
+1 26276 1
+26276 26276 1
+1 26277 1
+26277 26277 1
+1 26278 1
+26278 26278 1
+1 26279 1
+26279 26279 1
+1 26280 1
+26280 26280 1
+1 26281 1
+26281 26281 1
+1 26282 1
+26282 26282 1
+1 26283 1
+26283 26283 1
+1 26284 1
+26284 26284 1
+1 26285 1
+26285 26285 1
+1 26286 1
+26286 26286 1
+1 26287 1
+26287 26287 1
+1 26288 1
+26288 26288 1
+1 26289 1
+26289 26289 1
+1 26290 1
+26290 26290 1
+1 26291 1
+26291 26291 1
+1 26292 1
+26292 26292 1
+1 26293 1
+26293 26293 1
+1 26294 1
+26294 26294 1
+1 26295 1
+26295 26295 1
+1 26296 1
+26296 26296 1
+1 26297 1
+26297 26297 1
+1 26298 1
+26298 26298 1
+1 26299 1
+26299 26299 1
+1 26300 1
+26300 26300 1
+1 26301 1
+26301 26301 1
+1 26302 1
+26302 26302 1
+1 26303 1
+26303 26303 1
+1 26304 1
+26304 26304 1
+1 26305 1
+26305 26305 1
+1 26306 1
+26306 26306 1
+1 26307 1
+26307 26307 1
+1 26308 1
+26308 26308 1
+1 26309 1
+26309 26309 1
+1 26310 1
+26310 26310 1
+1 26311 1
+26311 26311 1
+1 26312 1
+26312 26312 1
+1 26313 1
+26313 26313 1
+1 26314 1
+26314 26314 1
+1 26315 1
+26315 26315 1
+1 26316 1
+26316 26316 1
+1 26317 1
+26317 26317 1
+1 26318 1
+26318 26318 1
+1 26319 1
+26319 26319 1
+1 26320 1
+26320 26320 1
+1 26321 1
+26321 26321 1
+1 26322 1
+26322 26322 1
+1 26323 1
+26323 26323 1
+1 26324 1
+26324 26324 1
+1 26325 1
+26325 26325 1
+1 26326 1
+26326 26326 1
+1 26327 1
+26327 26327 1
+1 26328 1
+26328 26328 1
+1 26329 1
+26329 26329 1
+1 26330 1
+26330 26330 1
+1 26331 1
+26331 26331 1
+1 26332 1
+26332 26332 1
+1 26333 1
+26333 26333 1
+1 26334 1
+26334 26334 1
+1 26335 1
+26335 26335 1
+1 26336 1
+26336 26336 1
+1 26337 1
+26337 26337 1
+1 26338 1
+26338 26338 1
+1 26339 1
+26339 26339 1
+1 26340 1
+26340 26340 1
+1 26341 1
+26341 26341 1
+1 26342 1
+26342 26342 1
+1 26343 1
+26343 26343 1
+1 26344 1
+26344 26344 1
+1 26345 1
+26345 26345 1
+1 26346 1
+26346 26346 1
+1 26347 1
+26347 26347 1
+1 26348 1
+26348 26348 1
+1 26349 1
+26349 26349 1
+1 26350 1
+26350 26350 1
+1 26351 1
+26351 26351 1
+1 26352 1
+26352 26352 1
+1 26353 1
+26353 26353 1
+1 26354 1
+26354 26354 1
+1 26355 1
+26355 26355 1
+1 26356 1
+26356 26356 1
+1 26357 1
+26357 26357 1
+1 26358 1
+26358 26358 1
+1 26359 1
+26359 26359 1
+1 26360 1
+26360 26360 1
+1 26361 1
+26361 26361 1
+1 26362 1
+26362 26362 1
+1 26363 1
+26363 26363 1
+1 26364 1
+26364 26364 1
+1 26365 1
+26365 26365 1
+1 26366 1
+26366 26366 1
+1 26367 1
+26367 26367 1
+1 26368 1
+26368 26368 1
+1 26369 1
+26369 26369 1
+1 26370 1
+26370 26370 1
+1 26371 1
+26371 26371 1
+1 26372 1
+26372 26372 1
+1 26373 1
+26373 26373 1
+1 26374 1
+26374 26374 1
+1 26375 1
+26375 26375 1
+1 26376 1
+26376 26376 1
+1 26377 1
+26377 26377 1
+1 26378 1
+26378 26378 1
+1 26379 1
+26379 26379 1
+1 26380 1
+26380 26380 1
+1 26381 1
+26381 26381 1
+1 26382 1
+26382 26382 1
+1 26383 1
+26383 26383 1
+1 26384 1
+26384 26384 1
+1 26385 1
+26385 26385 1
+1 26386 1
+26386 26386 1
+1 26387 1
+26387 26387 1
+1 26388 1
+26388 26388 1
+1 26389 1
+26389 26389 1
+1 26390 1
+26390 26390 1
+1 26391 1
+26391 26391 1
+1 26392 1
+26392 26392 1
+1 26393 1
+26393 26393 1
+1 26394 1
+26394 26394 1
+1 26395 1
+26395 26395 1
+1 26396 1
+26396 26396 1
+1 26397 1
+26397 26397 1
+1 26398 1
+26398 26398 1
+1 26399 1
+26399 26399 1
+1 26400 1
+26400 26400 1
+1 26401 1
+26401 26401 1
+1 26402 1
+26402 26402 1
+1 26403 1
+26403 26403 1
+1 26404 1
+26404 26404 1
+1 26405 1
+26405 26405 1
+1 26406 1
+26406 26406 1
+1 26407 1
+26407 26407 1
+1 26408 1
+26408 26408 1
+1 26409 1
+26409 26409 1
+1 26410 1
+26410 26410 1
+1 26411 1
+26411 26411 1
+1 26412 1
+26412 26412 1
+1 26413 1
+26413 26413 1
+1 26414 1
+26414 26414 1
+1 26415 1
+26415 26415 1
+1 26416 1
+26416 26416 1
+1 26417 1
+26417 26417 1
+1 26418 1
+26418 26418 1
+1 26419 1
+26419 26419 1
+1 26420 1
+26420 26420 1
+1 26421 1
+26421 26421 1
+1 26422 1
+26422 26422 1
+1 26423 1
+26423 26423 1
+1 26424 1
+26424 26424 1
+1 26425 1
+26425 26425 1
+1 26426 1
+26426 26426 1
+1 26427 1
+26427 26427 1
+1 26428 1
+26428 26428 1
+1 26429 1
+26429 26429 1
+1 26430 1
+26430 26430 1
+1 26431 1
+26431 26431 1
+1 26432 1
+26432 26432 1
+1 26433 1
+26433 26433 1
+1 26434 1
+26434 26434 1
+1 26435 1
+26435 26435 1
+1 26436 1
+26436 26436 1
+1 26437 1
+26437 26437 1
+1 26438 1
+26438 26438 1
+1 26439 1
+26439 26439 1
+1 26440 1
+26440 26440 1
+1 26441 1
+26441 26441 1
+1 26442 1
+26442 26442 1
+1 26443 1
+26443 26443 1
+1 26444 1
+26444 26444 1
+1 26445 1
+26445 26445 1
+1 26446 1
+26446 26446 1
+1 26447 1
+26447 26447 1
+1 26448 1
+26448 26448 1
+1 26449 1
+26449 26449 1
+1 26450 1
+26450 26450 1
+1 26451 1
+26451 26451 1
+1 26452 1
+26452 26452 1
+1 26453 1
+26453 26453 1
+1 26454 1
+26454 26454 1
+1 26455 1
+26455 26455 1
+1 26456 1
+26456 26456 1
+1 26457 1
+26457 26457 1
+1 26458 1
+26458 26458 1
+1 26459 1
+26459 26459 1
+1 26460 1
+26460 26460 1
+1 26461 1
+26461 26461 1
+1 26462 1
+26462 26462 1
+1 26463 1
+26463 26463 1
+1 26464 1
+26464 26464 1
+1 26465 1
+26465 26465 1
+1 26466 1
+26466 26466 1
+1 26467 1
+26467 26467 1
+1 26468 1
+26468 26468 1
+1 26469 1
+26469 26469 1
+1 26470 1
+26470 26470 1
+1 26471 1
+26471 26471 1
+1 26472 1
+26472 26472 1
+1 26473 1
+26473 26473 1
+1 26474 1
+26474 26474 1
+1 26475 1
+26475 26475 1
+1 26476 1
+26476 26476 1
+1 26477 1
+26477 26477 1
+1 26478 1
+26478 26478 1
+1 26479 1
+26479 26479 1
+1 26480 1
+26480 26480 1
+1 26481 1
+26481 26481 1
+1 26482 1
+26482 26482 1
+1 26483 1
+26483 26483 1
+1 26484 1
+26484 26484 1
+1 26485 1
+26485 26485 1
+1 26486 1
+26486 26486 1
+1 26487 1
+26487 26487 1
+1 26488 1
+26488 26488 1
+1 26489 1
+26489 26489 1
+1 26490 1
+26490 26490 1
+1 26491 1
+26491 26491 1
+1 26492 1
+26492 26492 1
+1 26493 1
+26493 26493 1
+1 26494 1
+26494 26494 1
+1 26495 1
+26495 26495 1
+1 26496 1
+26496 26496 1
+1 26497 1
+26497 26497 1
+1 26498 1
+26498 26498 1
+1 26499 1
+26499 26499 1
+1 26500 1
+26500 26500 1
+1 26501 1
+26501 26501 1
+1 26502 1
+26502 26502 1
+1 26503 1
+26503 26503 1
+1 26504 1
+26504 26504 1
+1 26505 1
+26505 26505 1
+1 26506 1
+26506 26506 1
+1 26507 1
+26507 26507 1
+1 26508 1
+26508 26508 1
+1 26509 1
+26509 26509 1
+1 26510 1
+26510 26510 1
+1 26511 1
+26511 26511 1
+1 26512 1
+26512 26512 1
+1 26513 1
+26513 26513 1
+1 26514 1
+26514 26514 1
+1 26515 1
+26515 26515 1
+1 26516 1
+26516 26516 1
+1 26517 1
+26517 26517 1
+1 26518 1
+26518 26518 1
+1 26519 1
+26519 26519 1
+1 26520 1
+26520 26520 1
+1 26521 1
+26521 26521 1
+1 26522 1
+26522 26522 1
+1 26523 1
+26523 26523 1
+1 26524 1
+26524 26524 1
+1 26525 1
+26525 26525 1
+1 26526 1
+26526 26526 1
+1 26527 1
+26527 26527 1
+1 26528 1
+26528 26528 1
+1 26529 1
+26529 26529 1
+1 26530 1
+26530 26530 1
+1 26531 1
+26531 26531 1
+1 26532 1
+26532 26532 1
+1 26533 1
+26533 26533 1
+1 26534 1
+26534 26534 1
+1 26535 1
+26535 26535 1
+1 26536 1
+26536 26536 1
+1 26537 1
+26537 26537 1
+1 26538 1
+26538 26538 1
+1 26539 1
+26539 26539 1
+1 26540 1
+26540 26540 1
+1 26541 1
+26541 26541 1
+1 26542 1
+26542 26542 1
+1 26543 1
+26543 26543 1
+1 26544 1
+26544 26544 1
+1 26545 1
+26545 26545 1
+1 26546 1
+26546 26546 1
+1 26547 1
+26547 26547 1
+1 26548 1
+26548 26548 1
+1 26549 1
+26549 26549 1
+1 26550 1
+26550 26550 1
+1 26551 1
+26551 26551 1
+1 26552 1
+26552 26552 1
+1 26553 1
+26553 26553 1
+1 26554 1
+26554 26554 1
+1 26555 1
+26555 26555 1
+1 26556 1
+26556 26556 1
+1 26557 1
+26557 26557 1
+1 26558 1
+26558 26558 1
+1 26559 1
+26559 26559 1
+1 26560 1
+26560 26560 1
+1 26561 1
+26561 26561 1
+1 26562 1
+26562 26562 1
+1 26563 1
+26563 26563 1
+1 26564 1
+26564 26564 1
+1 26565 1
+26565 26565 1
+1 26566 1
+26566 26566 1
+1 26567 1
+26567 26567 1
+1 26568 1
+26568 26568 1
+1 26569 1
+26569 26569 1
+1 26570 1
+26570 26570 1
+1 26571 1
+26571 26571 1
+1 26572 1
+26572 26572 1
+1 26573 1
+26573 26573 1
+1 26574 1
+26574 26574 1
+1 26575 1
+26575 26575 1
+1 26576 1
+26576 26576 1
+1 26577 1
+26577 26577 1
+1 26578 1
+26578 26578 1
+1 26579 1
+26579 26579 1
+1 26580 1
+26580 26580 1
+1 26581 1
+26581 26581 1
+1 26582 1
+26582 26582 1
+1 26583 1
+26583 26583 1
+1 26584 1
+26584 26584 1
+1 26585 1
+26585 26585 1
+1 26586 1
+26586 26586 1
+1 26587 1
+26587 26587 1
+1 26588 1
+26588 26588 1
+1 26589 1
+26589 26589 1
+1 26590 1
+26590 26590 1
+1 26591 1
+26591 26591 1
+1 26592 1
+26592 26592 1
+1 26593 1
+26593 26593 1
+1 26594 1
+26594 26594 1
+1 26595 1
+26595 26595 1
+1 26596 1
+26596 26596 1
+1 26597 1
+26597 26597 1
+1 26598 1
+26598 26598 1
+1 26599 1
+26599 26599 1
+1 26600 1
+26600 26600 1
+1 26601 1
+26601 26601 1
+1 26602 1
+26602 26602 1
+1 26603 1
+26603 26603 1
+1 26604 1
+26604 26604 1
+1 26605 1
+26605 26605 1
+1 26606 1
+26606 26606 1
+1 26607 1
+26607 26607 1
+1 26608 1
+26608 26608 1
+1 26609 1
+26609 26609 1
+1 26610 1
+26610 26610 1
+1 26611 1
+26611 26611 1
+1 26612 1
+26612 26612 1
+1 26613 1
+26613 26613 1
+1 26614 1
+26614 26614 1
+1 26615 1
+26615 26615 1
+1 26616 1
+26616 26616 1
+1 26617 1
+26617 26617 1
+1 26618 1
+26618 26618 1
+1 26619 1
+26619 26619 1
+1 26620 1
+26620 26620 1
+1 26621 1
+26621 26621 1
+1 26622 1
+26622 26622 1
+1 26623 1
+26623 26623 1
+1 26624 1
+26624 26624 1
+1 26625 1
+26625 26625 1
+1 26626 1
+26626 26626 1
+1 26627 1
+26627 26627 1
+1 26628 1
+26628 26628 1
+1 26629 1
+26629 26629 1
+1 26630 1
+26630 26630 1
+1 26631 1
+26631 26631 1
+1 26632 1
+26632 26632 1
+1 26633 1
+26633 26633 1
+1 26634 1
+26634 26634 1
+1 26635 1
+26635 26635 1
+1 26636 1
+26636 26636 1
+1 26637 1
+26637 26637 1
+1 26638 1
+26638 26638 1
+1 26639 1
+26639 26639 1
+1 26640 1
+26640 26640 1
+1 26641 1
+26641 26641 1
+1 26642 1
+26642 26642 1
+1 26643 1
+26643 26643 1
+1 26644 1
+26644 26644 1
+1 26645 1
+26645 26645 1
+1 26646 1
+26646 26646 1
+1 26647 1
+26647 26647 1
+1 26648 1
+26648 26648 1
+1 26649 1
+26649 26649 1
+1 26650 1
+26650 26650 1
+1 26651 1
+26651 26651 1
+1 26652 1
+26652 26652 1
+1 26653 1
+26653 26653 1
+1 26654 1
+26654 26654 1
+1 26655 1
+26655 26655 1
+1 26656 1
+26656 26656 1
+1 26657 1
+26657 26657 1
+1 26658 1
+26658 26658 1
+1 26659 1
+26659 26659 1
+1 26660 1
+26660 26660 1
+1 26661 1
+26661 26661 1
+1 26662 1
+26662 26662 1
+1 26663 1
+26663 26663 1
+1 26664 1
+26664 26664 1
+1 26665 1
+26665 26665 1
+1 26666 1
+26666 26666 1
+1 26667 1
+26667 26667 1
+1 26668 1
+26668 26668 1
+1 26669 1
+26669 26669 1
+1 26670 1
+26670 26670 1
+1 26671 1
+26671 26671 1
+1 26672 1
+26672 26672 1
+1 26673 1
+26673 26673 1
+1 26674 1
+26674 26674 1
+1 26675 1
+26675 26675 1
+1 26676 1
+26676 26676 1
+1 26677 1
+26677 26677 1
+1 26678 1
+26678 26678 1
+1 26679 1
+26679 26679 1
+1 26680 1
+26680 26680 1
+1 26681 1
+26681 26681 1
+1 26682 1
+26682 26682 1
+1 26683 1
+26683 26683 1
+1 26684 1
+26684 26684 1
+1 26685 1
+26685 26685 1
+1 26686 1
+26686 26686 1
+1 26687 1
+26687 26687 1
+1 26688 1
+26688 26688 1
+1 26689 1
+26689 26689 1
+1 26690 1
+26690 26690 1
+1 26691 1
+26691 26691 1
+1 26692 1
+26692 26692 1
+1 26693 1
+26693 26693 1
+1 26694 1
+26694 26694 1
+1 26695 1
+26695 26695 1
+1 26696 1
+26696 26696 1
+1 26697 1
+26697 26697 1
+1 26698 1
+26698 26698 1
+1 26699 1
+26699 26699 1
+1 26700 1
+26700 26700 1
+1 26701 1
+26701 26701 1
+1 26702 1
+26702 26702 1
+1 26703 1
+26703 26703 1
+1 26704 1
+26704 26704 1
+1 26705 1
+26705 26705 1
+1 26706 1
+26706 26706 1
+1 26707 1
+26707 26707 1
+1 26708 1
+26708 26708 1
+1 26709 1
+26709 26709 1
+1 26710 1
+26710 26710 1
+1 26711 1
+26711 26711 1
+1 26712 1
+26712 26712 1
+1 26713 1
+26713 26713 1
+1 26714 1
+26714 26714 1
+1 26715 1
+26715 26715 1
+1 26716 1
+26716 26716 1
+1 26717 1
+26717 26717 1
+1 26718 1
+26718 26718 1
+1 26719 1
+26719 26719 1
+1 26720 1
+26720 26720 1
+1 26721 1
+26721 26721 1
+1 26722 1
+26722 26722 1
+1 26723 1
+26723 26723 1
+1 26724 1
+26724 26724 1
+1 26725 1
+26725 26725 1
+1 26726 1
+26726 26726 1
+1 26727 1
+26727 26727 1
+1 26728 1
+26728 26728 1
+1 26729 1
+26729 26729 1
+1 26730 1
+26730 26730 1
+1 26731 1
+26731 26731 1
+1 26732 1
+26732 26732 1
+1 26733 1
+26733 26733 1
+1 26734 1
+26734 26734 1
+1 26735 1
+26735 26735 1
+1 26736 1
+26736 26736 1
+1 26737 1
+26737 26737 1
+1 26738 1
+26738 26738 1
+1 26739 1
+26739 26739 1
+1 26740 1
+26740 26740 1
+1 26741 1
+26741 26741 1
+1 26742 1
+26742 26742 1
+1 26743 1
+26743 26743 1
+1 26744 1
+26744 26744 1
+1 26745 1
+26745 26745 1
+1 26746 1
+26746 26746 1
+1 26747 1
+26747 26747 1
+1 26748 1
+26748 26748 1
+1 26749 1
+26749 26749 1
+1 26750 1
+26750 26750 1
+1 26751 1
+26751 26751 1
+1 26752 1
+26752 26752 1
+1 26753 1
+26753 26753 1
+1 26754 1
+26754 26754 1
+1 26755 1
+26755 26755 1
+1 26756 1
+26756 26756 1
+1 26757 1
+26757 26757 1
+1 26758 1
+26758 26758 1
+1 26759 1
+26759 26759 1
+1 26760 1
+26760 26760 1
+1 26761 1
+26761 26761 1
+1 26762 1
+26762 26762 1
+1 26763 1
+26763 26763 1
+1 26764 1
+26764 26764 1
+1 26765 1
+26765 26765 1
+1 26766 1
+26766 26766 1
+1 26767 1
+26767 26767 1
+1 26768 1
+26768 26768 1
+1 26769 1
+26769 26769 1
+1 26770 1
+26770 26770 1
+1 26771 1
+26771 26771 1
+1 26772 1
+26772 26772 1
+1 26773 1
+26773 26773 1
+1 26774 1
+26774 26774 1
+1 26775 1
+26775 26775 1
+1 26776 1
+26776 26776 1
+1 26777 1
+26777 26777 1
+1 26778 1
+26778 26778 1
+1 26779 1
+26779 26779 1
+1 26780 1
+26780 26780 1
+1 26781 1
+26781 26781 1
+1 26782 1
+26782 26782 1
+1 26783 1
+26783 26783 1
+1 26784 1
+26784 26784 1
+1 26785 1
+26785 26785 1
+1 26786 1
+26786 26786 1
+1 26787 1
+26787 26787 1
+1 26788 1
+26788 26788 1
+1 26789 1
+26789 26789 1
+1 26790 1
+26790 26790 1
+1 26791 1
+26791 26791 1
+1 26792 1
+26792 26792 1
+1 26793 1
+26793 26793 1
+1 26794 1
+26794 26794 1
+1 26795 1
+26795 26795 1
+1 26796 1
+26796 26796 1
+1 26797 1
+26797 26797 1
+1 26798 1
+26798 26798 1
+1 26799 1
+26799 26799 1
+1 26800 1
+26800 26800 1
+1 26801 1
+26801 26801 1
+1 26802 1
+26802 26802 1
+1 26803 1
+26803 26803 1
+1 26804 1
+26804 26804 1
+1 26805 1
+26805 26805 1
+1 26806 1
+26806 26806 1
+1 26807 1
+26807 26807 1
+1 26808 1
+26808 26808 1
+1 26809 1
+26809 26809 1
+1 26810 1
+26810 26810 1
+1 26811 1
+26811 26811 1
+1 26812 1
+26812 26812 1
+1 26813 1
+26813 26813 1
+1 26814 1
+26814 26814 1
+1 26815 1
+26815 26815 1
+1 26816 1
+26816 26816 1
+1 26817 1
+26817 26817 1
+1 26818 1
+26818 26818 1
+1 26819 1
+26819 26819 1
+1 26820 1
+26820 26820 1
+1 26821 1
+26821 26821 1
+1 26822 1
+26822 26822 1
+1 26823 1
+26823 26823 1
+1 26824 1
+26824 26824 1
+1 26825 1
+26825 26825 1
+1 26826 1
+26826 26826 1
+1 26827 1
+26827 26827 1
+1 26828 1
+26828 26828 1
+1 26829 1
+26829 26829 1
+1 26830 1
+26830 26830 1
+1 26831 1
+26831 26831 1
+1 26832 1
+26832 26832 1
+1 26833 1
+26833 26833 1
+1 26834 1
+26834 26834 1
+1 26835 1
+26835 26835 1
+1 26836 1
+26836 26836 1
+1 26837 1
+26837 26837 1
+1 26838 1
+26838 26838 1
+1 26839 1
+26839 26839 1
+1 26840 1
+26840 26840 1
+1 26841 1
+26841 26841 1
+1 26842 1
+26842 26842 1
+1 26843 1
+26843 26843 1
+1 26844 1
+26844 26844 1
+1 26845 1
+26845 26845 1
+1 26846 1
+26846 26846 1
+1 26847 1
+26847 26847 1
+1 26848 1
+26848 26848 1
+1 26849 1
+26849 26849 1
+1 26850 1
+26850 26850 1
+1 26851 1
+26851 26851 1
+1 26852 1
+26852 26852 1
+1 26853 1
+26853 26853 1
+1 26854 1
+26854 26854 1
+1 26855 1
+26855 26855 1
+1 26856 1
+26856 26856 1
+1 26857 1
+26857 26857 1
+1 26858 1
+26858 26858 1
+1 26859 1
+26859 26859 1
+1 26860 1
+26860 26860 1
+1 26861 1
+26861 26861 1
+1 26862 1
+26862 26862 1
+1 26863 1
+26863 26863 1
+1 26864 1
+26864 26864 1
+1 26865 1
+26865 26865 1
+1 26866 1
+26866 26866 1
+1 26867 1
+26867 26867 1
+1 26868 1
+26868 26868 1
+1 26869 1
+26869 26869 1
+1 26870 1
+26870 26870 1
+1 26871 1
+26871 26871 1
+1 26872 1
+26872 26872 1
+1 26873 1
+26873 26873 1
+1 26874 1
+26874 26874 1
+1 26875 1
+26875 26875 1
+1 26876 1
+26876 26876 1
+1 26877 1
+26877 26877 1
+1 26878 1
+26878 26878 1
+1 26879 1
+26879 26879 1
+1 26880 1
+26880 26880 1
+1 26881 1
+26881 26881 1
+1 26882 1
+26882 26882 1
+1 26883 1
+26883 26883 1
+1 26884 1
+26884 26884 1
+1 26885 1
+26885 26885 1
+1 26886 1
+26886 26886 1
+1 26887 1
+26887 26887 1
+1 26888 1
+26888 26888 1
+1 26889 1
+26889 26889 1
+1 26890 1
+26890 26890 1
+1 26891 1
+26891 26891 1
+1 26892 1
+26892 26892 1
+1 26893 1
+26893 26893 1
+1 26894 1
+26894 26894 1
+1 26895 1
+26895 26895 1
+1 26896 1
+26896 26896 1
+1 26897 1
+26897 26897 1
+1 26898 1
+26898 26898 1
+1 26899 1
+26899 26899 1
+1 26900 1
+26900 26900 1
+1 26901 1
+26901 26901 1
+1 26902 1
+26902 26902 1
+1 26903 1
+26903 26903 1
+1 26904 1
+26904 26904 1
+1 26905 1
+26905 26905 1
+1 26906 1
+26906 26906 1
+1 26907 1
+26907 26907 1
+1 26908 1
+26908 26908 1
+1 26909 1
+26909 26909 1
+1 26910 1
+26910 26910 1
+1 26911 1
+26911 26911 1
+1 26912 1
+26912 26912 1
+1 26913 1
+26913 26913 1
+1 26914 1
+26914 26914 1
+1 26915 1
+26915 26915 1
+1 26916 1
+26916 26916 1
+1 26917 1
+26917 26917 1
+1 26918 1
+26918 26918 1
+1 26919 1
+26919 26919 1
+1 26920 1
+26920 26920 1
+1 26921 1
+26921 26921 1
+1 26922 1
+26922 26922 1
+1 26923 1
+26923 26923 1
+1 26924 1
+26924 26924 1
+1 26925 1
+26925 26925 1
+1 26926 1
+26926 26926 1
+1 26927 1
+26927 26927 1
+1 26928 1
+26928 26928 1
+1 26929 1
+26929 26929 1
+1 26930 1
+26930 26930 1
+1 26931 1
+26931 26931 1
+1 26932 1
+26932 26932 1
+1 26933 1
+26933 26933 1
+1 26934 1
+26934 26934 1
+1 26935 1
+26935 26935 1
+1 26936 1
+26936 26936 1
+1 26937 1
+26937 26937 1
+1 26938 1
+26938 26938 1
+1 26939 1
+26939 26939 1
+1 26940 1
+26940 26940 1
+1 26941 1
+26941 26941 1
+1 26942 1
+26942 26942 1
+1 26943 1
+26943 26943 1
+1 26944 1
+26944 26944 1
+1 26945 1
+26945 26945 1
+1 26946 1
+26946 26946 1
+1 26947 1
+26947 26947 1
+1 26948 1
+26948 26948 1
+1 26949 1
+26949 26949 1
+1 26950 1
+26950 26950 1
+1 26951 1
+26951 26951 1
+1 26952 1
+26952 26952 1
+1 26953 1
+26953 26953 1
+1 26954 1
+26954 26954 1
+1 26955 1
+26955 26955 1
+1 26956 1
+26956 26956 1
+1 26957 1
+26957 26957 1
+1 26958 1
+26958 26958 1
+1 26959 1
+26959 26959 1
+1 26960 1
+26960 26960 1
+1 26961 1
+26961 26961 1
+1 26962 1
+26962 26962 1
+1 26963 1
+26963 26963 1
+1 26964 1
+26964 26964 1
+1 26965 1
+26965 26965 1
+1 26966 1
+26966 26966 1
+1 26967 1
+26967 26967 1
+1 26968 1
+26968 26968 1
+1 26969 1
+26969 26969 1
+1 26970 1
+26970 26970 1
+1 26971 1
+26971 26971 1
+1 26972 1
+26972 26972 1
+1 26973 1
+26973 26973 1
+1 26974 1
+26974 26974 1
+1 26975 1
+26975 26975 1
+1 26976 1
+26976 26976 1
+1 26977 1
+26977 26977 1
+1 26978 1
+26978 26978 1
+1 26979 1
+26979 26979 1
+1 26980 1
+26980 26980 1
+1 26981 1
+26981 26981 1
+1 26982 1
+26982 26982 1
+1 26983 1
+26983 26983 1
+1 26984 1
+26984 26984 1
+1 26985 1
+26985 26985 1
+1 26986 1
+26986 26986 1
+1 26987 1
+26987 26987 1
+1 26988 1
+26988 26988 1
+1 26989 1
+26989 26989 1
+1 26990 1
+26990 26990 1
+1 26991 1
+26991 26991 1
+1 26992 1
+26992 26992 1
+1 26993 1
+26993 26993 1
+1 26994 1
+26994 26994 1
+1 26995 1
+26995 26995 1
+1 26996 1
+26996 26996 1
+1 26997 1
+26997 26997 1
+1 26998 1
+26998 26998 1
+1 26999 1
+26999 26999 1
+1 27000 1
+27000 27000 1
+1 27001 1
+27001 27001 1
+1 27002 1
+27002 27002 1
+1 27003 1
+27003 27003 1
+1 27004 1
+27004 27004 1
+1 27005 1
+27005 27005 1
+1 27006 1
+27006 27006 1
+1 27007 1
+27007 27007 1
+1 27008 1
+27008 27008 1
+1 27009 1
+27009 27009 1
+1 27010 1
+27010 27010 1
+1 27011 1
+27011 27011 1
+1 27012 1
+27012 27012 1
+1 27013 1
+27013 27013 1
+1 27014 1
+27014 27014 1
+1 27015 1
+27015 27015 1
+1 27016 1
+27016 27016 1
+1 27017 1
+27017 27017 1
+1 27018 1
+27018 27018 1
+1 27019 1
+27019 27019 1
+1 27020 1
+27020 27020 1
+1 27021 1
+27021 27021 1
+1 27022 1
+27022 27022 1
+1 27023 1
+27023 27023 1
+1 27024 1
+27024 27024 1
+1 27025 1
+27025 27025 1
+1 27026 1
+27026 27026 1
+1 27027 1
+27027 27027 1
+1 27028 1
+27028 27028 1
+1 27029 1
+27029 27029 1
+1 27030 1
+27030 27030 1
+1 27031 1
+27031 27031 1
+1 27032 1
+27032 27032 1
+1 27033 1
+27033 27033 1
+1 27034 1
+27034 27034 1
+1 27035 1
+27035 27035 1
+1 27036 1
+27036 27036 1
+1 27037 1
+27037 27037 1
+1 27038 1
+27038 27038 1
+1 27039 1
+27039 27039 1
+1 27040 1
+27040 27040 1
+1 27041 1
+27041 27041 1
+1 27042 1
+27042 27042 1
+1 27043 1
+27043 27043 1
+1 27044 1
+27044 27044 1
+1 27045 1
+27045 27045 1
+1 27046 1
+27046 27046 1
+1 27047 1
+27047 27047 1
+1 27048 1
+27048 27048 1
+1 27049 1
+27049 27049 1
+1 27050 1
+27050 27050 1
+1 27051 1
+27051 27051 1
+1 27052 1
+27052 27052 1
+1 27053 1
+27053 27053 1
+1 27054 1
+27054 27054 1
+1 27055 1
+27055 27055 1
+1 27056 1
+27056 27056 1
+1 27057 1
+27057 27057 1
+1 27058 1
+27058 27058 1
+1 27059 1
+27059 27059 1
+1 27060 1
+27060 27060 1
+1 27061 1
+27061 27061 1
+1 27062 1
+27062 27062 1
+1 27063 1
+27063 27063 1
+1 27064 1
+27064 27064 1
+1 27065 1
+27065 27065 1
+1 27066 1
+27066 27066 1
+1 27067 1
+27067 27067 1
+1 27068 1
+27068 27068 1
+1 27069 1
+27069 27069 1
+1 27070 1
+27070 27070 1
+1 27071 1
+27071 27071 1
+1 27072 1
+27072 27072 1
+1 27073 1
+27073 27073 1
+1 27074 1
+27074 27074 1
+1 27075 1
+27075 27075 1
+1 27076 1
+27076 27076 1
+1 27077 1
+27077 27077 1
+1 27078 1
+27078 27078 1
+1 27079 1
+27079 27079 1
+1 27080 1
+27080 27080 1
+1 27081 1
+27081 27081 1
+1 27082 1
+27082 27082 1
+1 27083 1
+27083 27083 1
+1 27084 1
+27084 27084 1
+1 27085 1
+27085 27085 1
+1 27086 1
+27086 27086 1
+1 27087 1
+27087 27087 1
+1 27088 1
+27088 27088 1
+1 27089 1
+27089 27089 1
+1 27090 1
+27090 27090 1
+1 27091 1
+27091 27091 1
+1 27092 1
+27092 27092 1
+1 27093 1
+27093 27093 1
+1 27094 1
+27094 27094 1
+1 27095 1
+27095 27095 1
+1 27096 1
+27096 27096 1
+1 27097 1
+27097 27097 1
+1 27098 1
+27098 27098 1
+1 27099 1
+27099 27099 1
+1 27100 1
+27100 27100 1
+1 27101 1
+27101 27101 1
+1 27102 1
+27102 27102 1
+1 27103 1
+27103 27103 1
+1 27104 1
+27104 27104 1
+1 27105 1
+27105 27105 1
+1 27106 1
+27106 27106 1
+1 27107 1
+27107 27107 1
+1 27108 1
+27108 27108 1
+1 27109 1
+27109 27109 1
+1 27110 1
+27110 27110 1
+1 27111 1
+27111 27111 1
+1 27112 1
+27112 27112 1
+1 27113 1
+27113 27113 1
+1 27114 1
+27114 27114 1
+1 27115 1
+27115 27115 1
+1 27116 1
+27116 27116 1
+1 27117 1
+27117 27117 1
+1 27118 1
+27118 27118 1
+1 27119 1
+27119 27119 1
+1 27120 1
+27120 27120 1
+1 27121 1
+27121 27121 1
+1 27122 1
+27122 27122 1
+1 27123 1
+27123 27123 1
+1 27124 1
+27124 27124 1
+1 27125 1
+27125 27125 1
+1 27126 1
+27126 27126 1
+1 27127 1
+27127 27127 1
+1 27128 1
+27128 27128 1
+1 27129 1
+27129 27129 1
+1 27130 1
+27130 27130 1
+1 27131 1
+27131 27131 1
+1 27132 1
+27132 27132 1
+1 27133 1
+27133 27133 1
+1 27134 1
+27134 27134 1
+1 27135 1
+27135 27135 1
+1 27136 1
+27136 27136 1
+1 27137 1
+27137 27137 1
+1 27138 1
+27138 27138 1
+1 27139 1
+27139 27139 1
+1 27140 1
+27140 27140 1
+1 27141 1
+27141 27141 1
+1 27142 1
+27142 27142 1
+1 27143 1
+27143 27143 1
+1 27144 1
+27144 27144 1
+1 27145 1
+27145 27145 1
+1 27146 1
+27146 27146 1
+1 27147 1
+27147 27147 1
+1 27148 1
+27148 27148 1
+1 27149 1
+27149 27149 1
+1 27150 1
+27150 27150 1
+1 27151 1
+27151 27151 1
+1 27152 1
+27152 27152 1
+1 27153 1
+27153 27153 1
+1 27154 1
+27154 27154 1
+1 27155 1
+27155 27155 1
+1 27156 1
+27156 27156 1
+1 27157 1
+27157 27157 1
+1 27158 1
+27158 27158 1
+1 27159 1
+27159 27159 1
+1 27160 1
+27160 27160 1
+1 27161 1
+27161 27161 1
+1 27162 1
+27162 27162 1
+1 27163 1
+27163 27163 1
+1 27164 1
+27164 27164 1
+1 27165 1
+27165 27165 1
+1 27166 1
+27166 27166 1
+1 27167 1
+27167 27167 1
+1 27168 1
+27168 27168 1
+1 27169 1
+27169 27169 1
+1 27170 1
+27170 27170 1
+1 27171 1
+27171 27171 1
+1 27172 1
+27172 27172 1
+1 27173 1
+27173 27173 1
+1 27174 1
+27174 27174 1
+1 27175 1
+27175 27175 1
+1 27176 1
+27176 27176 1
+1 27177 1
+27177 27177 1
+1 27178 1
+27178 27178 1
+1 27179 1
+27179 27179 1
+1 27180 1
+27180 27180 1
+1 27181 1
+27181 27181 1
+1 27182 1
+27182 27182 1
+1 27183 1
+27183 27183 1
+1 27184 1
+27184 27184 1
+1 27185 1
+27185 27185 1
+1 27186 1
+27186 27186 1
+1 27187 1
+27187 27187 1
+1 27188 1
+27188 27188 1
+1 27189 1
+27189 27189 1
+1 27190 1
+27190 27190 1
+1 27191 1
+27191 27191 1
+1 27192 1
+27192 27192 1
+1 27193 1
+27193 27193 1
+1 27194 1
+27194 27194 1
+1 27195 1
+27195 27195 1
+1 27196 1
+27196 27196 1
+1 27197 1
+27197 27197 1
+1 27198 1
+27198 27198 1
+1 27199 1
+27199 27199 1
+1 27200 1
+27200 27200 1
+1 27201 1
+27201 27201 1
+1 27202 1
+27202 27202 1
+1 27203 1
+27203 27203 1
+1 27204 1
+27204 27204 1
+1 27205 1
+27205 27205 1
+1 27206 1
+27206 27206 1
+1 27207 1
+27207 27207 1
+1 27208 1
+27208 27208 1
+1 27209 1
+27209 27209 1
+1 27210 1
+27210 27210 1
+1 27211 1
+27211 27211 1
+1 27212 1
+27212 27212 1
+1 27213 1
+27213 27213 1
+1 27214 1
+27214 27214 1
+1 27215 1
+27215 27215 1
+1 27216 1
+27216 27216 1
+1 27217 1
+27217 27217 1
+1 27218 1
+27218 27218 1
+1 27219 1
+27219 27219 1
+1 27220 1
+27220 27220 1
+1 27221 1
+27221 27221 1
+1 27222 1
+27222 27222 1
+1 27223 1
+27223 27223 1
+1 27224 1
+27224 27224 1
+1 27225 1
+27225 27225 1
+1 27226 1
+27226 27226 1
+1 27227 1
+27227 27227 1
+1 27228 1
+27228 27228 1
+1 27229 1
+27229 27229 1
+1 27230 1
+27230 27230 1
+1 27231 1
+27231 27231 1
+1 27232 1
+27232 27232 1
+1 27233 1
+27233 27233 1
+1 27234 1
+27234 27234 1
+1 27235 1
+27235 27235 1
+1 27236 1
+27236 27236 1
+1 27237 1
+27237 27237 1
+1 27238 1
+27238 27238 1
+1 27239 1
+27239 27239 1
+1 27240 1
+27240 27240 1
+1 27241 1
+27241 27241 1
+1 27242 1
+27242 27242 1
+1 27243 1
+27243 27243 1
+1 27244 1
+27244 27244 1
+1 27245 1
+27245 27245 1
+1 27246 1
+27246 27246 1
+1 27247 1
+27247 27247 1
+1 27248 1
+27248 27248 1
+1 27249 1
+27249 27249 1
+1 27250 1
+27250 27250 1
+1 27251 1
+27251 27251 1
+1 27252 1
+27252 27252 1
+1 27253 1
+27253 27253 1
+1 27254 1
+27254 27254 1
+1 27255 1
+27255 27255 1
+1 27256 1
+27256 27256 1
+1 27257 1
+27257 27257 1
+1 27258 1
+27258 27258 1
+1 27259 1
+27259 27259 1
+1 27260 1
+27260 27260 1
+1 27261 1
+27261 27261 1
+1 27262 1
+27262 27262 1
+1 27263 1
+27263 27263 1
+1 27264 1
+27264 27264 1
+1 27265 1
+27265 27265 1
+1 27266 1
+27266 27266 1
+1 27267 1
+27267 27267 1
+1 27268 1
+27268 27268 1
+1 27269 1
+27269 27269 1
+1 27270 1
+27270 27270 1
+1 27271 1
+27271 27271 1
+1 27272 1
+27272 27272 1
+1 27273 1
+27273 27273 1
+1 27274 1
+27274 27274 1
+1 27275 1
+27275 27275 1
+1 27276 1
+27276 27276 1
+1 27277 1
+27277 27277 1
+1 27278 1
+27278 27278 1
+1 27279 1
+27279 27279 1
+1 27280 1
+27280 27280 1
+1 27281 1
+27281 27281 1
+1 27282 1
+27282 27282 1
+1 27283 1
+27283 27283 1
+1 27284 1
+27284 27284 1
+1 27285 1
+27285 27285 1
+1 27286 1
+27286 27286 1
+1 27287 1
+27287 27287 1
+1 27288 1
+27288 27288 1
+1 27289 1
+27289 27289 1
+1 27290 1
+27290 27290 1
+1 27291 1
+27291 27291 1
+1 27292 1
+27292 27292 1
+1 27293 1
+27293 27293 1
+1 27294 1
+27294 27294 1
+1 27295 1
+27295 27295 1
+1 27296 1
+27296 27296 1
+1 27297 1
+27297 27297 1
+1 27298 1
+27298 27298 1
+1 27299 1
+27299 27299 1
+1 27300 1
+27300 27300 1
+1 27301 1
+27301 27301 1
+1 27302 1
+27302 27302 1
+1 27303 1
+27303 27303 1
+1 27304 1
+27304 27304 1
+1 27305 1
+27305 27305 1
+1 27306 1
+27306 27306 1
+1 27307 1
+27307 27307 1
+1 27308 1
+27308 27308 1
+1 27309 1
+27309 27309 1
+1 27310 1
+27310 27310 1
+1 27311 1
+27311 27311 1
+1 27312 1
+27312 27312 1
+1 27313 1
+27313 27313 1
+1 27314 1
+27314 27314 1
+1 27315 1
+27315 27315 1
+1 27316 1
+27316 27316 1
+1 27317 1
+27317 27317 1
+1 27318 1
+27318 27318 1
+1 27319 1
+27319 27319 1
+1 27320 1
+27320 27320 1
+1 27321 1
+27321 27321 1
+1 27322 1
+27322 27322 1
+1 27323 1
+27323 27323 1
+1 27324 1
+27324 27324 1
+1 27325 1
+27325 27325 1
+1 27326 1
+27326 27326 1
+1 27327 1
+27327 27327 1
+1 27328 1
+27328 27328 1
+1 27329 1
+27329 27329 1
+1 27330 1
+27330 27330 1
+1 27331 1
+27331 27331 1
+1 27332 1
+27332 27332 1
+1 27333 1
+27333 27333 1
+1 27334 1
+27334 27334 1
+1 27335 1
+27335 27335 1
+1 27336 1
+27336 27336 1
+1 27337 1
+27337 27337 1
+1 27338 1
+27338 27338 1
+1 27339 1
+27339 27339 1
+1 27340 1
+27340 27340 1
+1 27341 1
+27341 27341 1
+1 27342 1
+27342 27342 1
+1 27343 1
+27343 27343 1
+1 27344 1
+27344 27344 1
+1 27345 1
+27345 27345 1
+1 27346 1
+27346 27346 1
+1 27347 1
+27347 27347 1
+1 27348 1
+27348 27348 1
+1 27349 1
+27349 27349 1
+1 27350 1
+27350 27350 1
+1 27351 1
+27351 27351 1
+1 27352 1
+27352 27352 1
+1 27353 1
+27353 27353 1
+1 27354 1
+27354 27354 1
+1 27355 1
+27355 27355 1
+1 27356 1
+27356 27356 1
+1 27357 1
+27357 27357 1
+1 27358 1
+27358 27358 1
+1 27359 1
+27359 27359 1
+1 27360 1
+27360 27360 1
+1 27361 1
+27361 27361 1
+1 27362 1
+27362 27362 1
+1 27363 1
+27363 27363 1
+1 27364 1
+27364 27364 1
+1 27365 1
+27365 27365 1
+1 27366 1
+27366 27366 1
+1 27367 1
+27367 27367 1
+1 27368 1
+27368 27368 1
+1 27369 1
+27369 27369 1
+1 27370 1
+27370 27370 1
+1 27371 1
+27371 27371 1
+1 27372 1
+27372 27372 1
+1 27373 1
+27373 27373 1
+1 27374 1
+27374 27374 1
+1 27375 1
+27375 27375 1
+1 27376 1
+27376 27376 1
+1 27377 1
+27377 27377 1
+1 27378 1
+27378 27378 1
+1 27379 1
+27379 27379 1
+1 27380 1
+27380 27380 1
+1 27381 1
+27381 27381 1
+1 27382 1
+27382 27382 1
+1 27383 1
+27383 27383 1
+1 27384 1
+27384 27384 1
+1 27385 1
+27385 27385 1
+1 27386 1
+27386 27386 1
+1 27387 1
+27387 27387 1
+1 27388 1
+27388 27388 1
+1 27389 1
+27389 27389 1
+1 27390 1
+27390 27390 1
+1 27391 1
+27391 27391 1
+1 27392 1
+27392 27392 1
+1 27393 1
+27393 27393 1
+1 27394 1
+27394 27394 1
+1 27395 1
+27395 27395 1
+1 27396 1
+27396 27396 1
+1 27397 1
+27397 27397 1
+1 27398 1
+27398 27398 1
+1 27399 1
+27399 27399 1
+1 27400 1
+27400 27400 1
+1 27401 1
+27401 27401 1
+1 27402 1
+27402 27402 1
+1 27403 1
+27403 27403 1
+1 27404 1
+27404 27404 1
+1 27405 1
+27405 27405 1
+1 27406 1
+27406 27406 1
+1 27407 1
+27407 27407 1
+1 27408 1
+27408 27408 1
+1 27409 1
+27409 27409 1
+1 27410 1
+27410 27410 1
+1 27411 1
+27411 27411 1
+1 27412 1
+27412 27412 1
+1 27413 1
+27413 27413 1
+1 27414 1
+27414 27414 1
+1 27415 1
+27415 27415 1
+1 27416 1
+27416 27416 1
+1 27417 1
+27417 27417 1
+1 27418 1
+27418 27418 1
+1 27419 1
+27419 27419 1
+1 27420 1
+27420 27420 1
+1 27421 1
+27421 27421 1
+1 27422 1
+27422 27422 1
+1 27423 1
+27423 27423 1
+1 27424 1
+27424 27424 1
+1 27425 1
+27425 27425 1
+1 27426 1
+27426 27426 1
+1 27427 1
+27427 27427 1
+1 27428 1
+27428 27428 1
+1 27429 1
+27429 27429 1
+1 27430 1
+27430 27430 1
+1 27431 1
+27431 27431 1
+1 27432 1
+27432 27432 1
+1 27433 1
+27433 27433 1
+1 27434 1
+27434 27434 1
+1 27435 1
+27435 27435 1
+1 27436 1
+27436 27436 1
+1 27437 1
+27437 27437 1
+1 27438 1
+27438 27438 1
+1 27439 1
+27439 27439 1
+1 27440 1
+27440 27440 1
+1 27441 1
+27441 27441 1
+1 27442 1
+27442 27442 1
+1 27443 1
+27443 27443 1
+1 27444 1
+27444 27444 1
+1 27445 1
+27445 27445 1
+1 27446 1
+27446 27446 1
+1 27447 1
+27447 27447 1
+1 27448 1
+27448 27448 1
+1 27449 1
+27449 27449 1
+1 27450 1
+27450 27450 1
+1 27451 1
+27451 27451 1
+1 27452 1
+27452 27452 1
+1 27453 1
+27453 27453 1
+1 27454 1
+27454 27454 1
+1 27455 1
+27455 27455 1
+1 27456 1
+27456 27456 1
+1 27457 1
+27457 27457 1
+1 27458 1
+27458 27458 1
+1 27459 1
+27459 27459 1
+1 27460 1
+27460 27460 1
+1 27461 1
+27461 27461 1
+1 27462 1
+27462 27462 1
+1 27463 1
+27463 27463 1
+1 27464 1
+27464 27464 1
+1 27465 1
+27465 27465 1
+1 27466 1
+27466 27466 1
+1 27467 1
+27467 27467 1
+1 27468 1
+27468 27468 1
+1 27469 1
+27469 27469 1
+1 27470 1
+27470 27470 1
+1 27471 1
+27471 27471 1
+1 27472 1
+27472 27472 1
+1 27473 1
+27473 27473 1
+1 27474 1
+27474 27474 1
+1 27475 1
+27475 27475 1
+1 27476 1
+27476 27476 1
+1 27477 1
+27477 27477 1
+1 27478 1
+27478 27478 1
+1 27479 1
+27479 27479 1
+1 27480 1
+27480 27480 1
+1 27481 1
+27481 27481 1
+1 27482 1
+27482 27482 1
+1 27483 1
+27483 27483 1
+1 27484 1
+27484 27484 1
+1 27485 1
+27485 27485 1
+1 27486 1
+27486 27486 1
+1 27487 1
+27487 27487 1
+1 27488 1
+27488 27488 1
+1 27489 1
+27489 27489 1
+1 27490 1
+27490 27490 1
+1 27491 1
+27491 27491 1
+1 27492 1
+27492 27492 1
+1 27493 1
+27493 27493 1
+1 27494 1
+27494 27494 1
+1 27495 1
+27495 27495 1
+1 27496 1
+27496 27496 1
+1 27497 1
+27497 27497 1
+1 27498 1
+27498 27498 1
+1 27499 1
+27499 27499 1
+1 27500 1
+27500 27500 1
+1 27501 1
+27501 27501 1
+1 27502 1
+27502 27502 1
+1 27503 1
+27503 27503 1
+1 27504 1
+27504 27504 1
+1 27505 1
+27505 27505 1
+1 27506 1
+27506 27506 1
+1 27507 1
+27507 27507 1
+1 27508 1
+27508 27508 1
+1 27509 1
+27509 27509 1
+1 27510 1
+27510 27510 1
+1 27511 1
+27511 27511 1
+1 27512 1
+27512 27512 1
+1 27513 1
+27513 27513 1
+1 27514 1
+27514 27514 1
+1 27515 1
+27515 27515 1
+1 27516 1
+27516 27516 1
+1 27517 1
+27517 27517 1
+1 27518 1
+27518 27518 1
+1 27519 1
+27519 27519 1
+1 27520 1
+27520 27520 1
+1 27521 1
+27521 27521 1
+1 27522 1
+27522 27522 1
+1 27523 1
+27523 27523 1
+1 27524 1
+27524 27524 1
+1 27525 1
+27525 27525 1
+1 27526 1
+27526 27526 1
+1 27527 1
+27527 27527 1
+1 27528 1
+27528 27528 1
+1 27529 1
+27529 27529 1
+1 27530 1
+27530 27530 1
+1 27531 1
+27531 27531 1
+1 27532 1
+27532 27532 1
+1 27533 1
+27533 27533 1
+1 27534 1
+27534 27534 1
+1 27535 1
+27535 27535 1
+1 27536 1
+27536 27536 1
+1 27537 1
+27537 27537 1
+1 27538 1
+27538 27538 1
+1 27539 1
+27539 27539 1
+1 27540 1
+27540 27540 1
+1 27541 1
+27541 27541 1
+1 27542 1
+27542 27542 1
+1 27543 1
+27543 27543 1
+1 27544 1
+27544 27544 1
+1 27545 1
+27545 27545 1
+1 27546 1
+27546 27546 1
+1 27547 1
+27547 27547 1
+1 27548 1
+27548 27548 1
+1 27549 1
+27549 27549 1
+1 27550 1
+27550 27550 1
+1 27551 1
+27551 27551 1
+1 27552 1
+27552 27552 1
+1 27553 1
+27553 27553 1
+1 27554 1
+27554 27554 1
+1 27555 1
+27555 27555 1
+1 27556 1
+27556 27556 1
+1 27557 1
+27557 27557 1
+1 27558 1
+27558 27558 1
+1 27559 1
+27559 27559 1
+1 27560 1
+27560 27560 1
+1 27561 1
+27561 27561 1
+1 27562 1
+27562 27562 1
+1 27563 1
+27563 27563 1
+1 27564 1
+27564 27564 1
+1 27565 1
+27565 27565 1
+1 27566 1
+27566 27566 1
+1 27567 1
+27567 27567 1
+1 27568 1
+27568 27568 1
+1 27569 1
+27569 27569 1
+1 27570 1
+27570 27570 1
+1 27571 1
+27571 27571 1
+1 27572 1
+27572 27572 1
+1 27573 1
+27573 27573 1
+1 27574 1
+27574 27574 1
+1 27575 1
+27575 27575 1
+1 27576 1
+27576 27576 1
+1 27577 1
+27577 27577 1
+1 27578 1
+27578 27578 1
+1 27579 1
+27579 27579 1
+1 27580 1
+27580 27580 1
+1 27581 1
+27581 27581 1
+1 27582 1
+27582 27582 1
+1 27583 1
+27583 27583 1
+1 27584 1
+27584 27584 1
+1 27585 1
+27585 27585 1
+1 27586 1
+27586 27586 1
+1 27587 1
+27587 27587 1
+1 27588 1
+27588 27588 1
+1 27589 1
+27589 27589 1
+1 27590 1
+27590 27590 1
+1 27591 1
+27591 27591 1
+1 27592 1
+27592 27592 1
+1 27593 1
+27593 27593 1
+1 27594 1
+27594 27594 1
+1 27595 1
+27595 27595 1
+1 27596 1
+27596 27596 1
+1 27597 1
+27597 27597 1
+1 27598 1
+27598 27598 1
+1 27599 1
+27599 27599 1
+1 27600 1
+27600 27600 1
+1 27601 1
+27601 27601 1
+1 27602 1
+27602 27602 1
+1 27603 1
+27603 27603 1
+1 27604 1
+27604 27604 1
+1 27605 1
+27605 27605 1
+1 27606 1
+27606 27606 1
+1 27607 1
+27607 27607 1
+1 27608 1
+27608 27608 1
+1 27609 1
+27609 27609 1
+1 27610 1
+27610 27610 1
+1 27611 1
+27611 27611 1
+1 27612 1
+27612 27612 1
+1 27613 1
+27613 27613 1
+1 27614 1
+27614 27614 1
+1 27615 1
+27615 27615 1
+1 27616 1
+27616 27616 1
+1 27617 1
+27617 27617 1
+1 27618 1
+27618 27618 1
+1 27619 1
+27619 27619 1
+1 27620 1
+27620 27620 1
+1 27621 1
+27621 27621 1
+1 27622 1
+27622 27622 1
+1 27623 1
+27623 27623 1
+1 27624 1
+27624 27624 1
+1 27625 1
+27625 27625 1
+1 27626 1
+27626 27626 1
+1 27627 1
+27627 27627 1
+1 27628 1
+27628 27628 1
+1 27629 1
+27629 27629 1
+1 27630 1
+27630 27630 1
+1 27631 1
+27631 27631 1
+1 27632 1
+27632 27632 1
+1 27633 1
+27633 27633 1
+1 27634 1
+27634 27634 1
+1 27635 1
+27635 27635 1
+1 27636 1
+27636 27636 1
+1 27637 1
+27637 27637 1
+1 27638 1
+27638 27638 1
+1 27639 1
+27639 27639 1
+1 27640 1
+27640 27640 1
+1 27641 1
+27641 27641 1
+1 27642 1
+27642 27642 1
+1 27643 1
+27643 27643 1
+1 27644 1
+27644 27644 1
+1 27645 1
+27645 27645 1
+1 27646 1
+27646 27646 1
+1 27647 1
+27647 27647 1
+1 27648 1
+27648 27648 1
+1 27649 1
+27649 27649 1
+1 27650 1
+27650 27650 1
+1 27651 1
+27651 27651 1
+1 27652 1
+27652 27652 1
+1 27653 1
+27653 27653 1
+1 27654 1
+27654 27654 1
+1 27655 1
+27655 27655 1
+1 27656 1
+27656 27656 1
+1 27657 1
+27657 27657 1
+1 27658 1
+27658 27658 1
+1 27659 1
+27659 27659 1
+1 27660 1
+27660 27660 1
+1 27661 1
+27661 27661 1
+1 27662 1
+27662 27662 1
+1 27663 1
+27663 27663 1
+1 27664 1
+27664 27664 1
+1 27665 1
+27665 27665 1
+1 27666 1
+27666 27666 1
+1 27667 1
+27667 27667 1
+1 27668 1
+27668 27668 1
+1 27669 1
+27669 27669 1
+1 27670 1
+27670 27670 1
+1 27671 1
+27671 27671 1
+1 27672 1
+27672 27672 1
+1 27673 1
+27673 27673 1
+1 27674 1
+27674 27674 1
+1 27675 1
+27675 27675 1
+1 27676 1
+27676 27676 1
+1 27677 1
+27677 27677 1
+1 27678 1
+27678 27678 1
+1 27679 1
+27679 27679 1
+1 27680 1
+27680 27680 1
+1 27681 1
+27681 27681 1
+1 27682 1
+27682 27682 1
+1 27683 1
+27683 27683 1
+1 27684 1
+27684 27684 1
+1 27685 1
+27685 27685 1
+1 27686 1
+27686 27686 1
+1 27687 1
+27687 27687 1
+1 27688 1
+27688 27688 1
+1 27689 1
+27689 27689 1
+1 27690 1
+27690 27690 1
+1 27691 1
+27691 27691 1
+1 27692 1
+27692 27692 1
+1 27693 1
+27693 27693 1
+1 27694 1
+27694 27694 1
+1 27695 1
+27695 27695 1
+1 27696 1
+27696 27696 1
+1 27697 1
+27697 27697 1
+1 27698 1
+27698 27698 1
+1 27699 1
+27699 27699 1
+1 27700 1
+27700 27700 1
+1 27701 1
+27701 27701 1
+1 27702 1
+27702 27702 1
+1 27703 1
+27703 27703 1
+1 27704 1
+27704 27704 1
+1 27705 1
+27705 27705 1
+1 27706 1
+27706 27706 1
+1 27707 1
+27707 27707 1
+1 27708 1
+27708 27708 1
+1 27709 1
+27709 27709 1
+1 27710 1
+27710 27710 1
+1 27711 1
+27711 27711 1
+1 27712 1
+27712 27712 1
+1 27713 1
+27713 27713 1
+1 27714 1
+27714 27714 1
+1 27715 1
+27715 27715 1
+1 27716 1
+27716 27716 1
+1 27717 1
+27717 27717 1
+1 27718 1
+27718 27718 1
+1 27719 1
+27719 27719 1
+1 27720 1
+27720 27720 1
+1 27721 1
+27721 27721 1
+1 27722 1
+27722 27722 1
+1 27723 1
+27723 27723 1
+1 27724 1
+27724 27724 1
+1 27725 1
+27725 27725 1
+1 27726 1
+27726 27726 1
+1 27727 1
+27727 27727 1
+1 27728 1
+27728 27728 1
+1 27729 1
+27729 27729 1
+1 27730 1
+27730 27730 1
+1 27731 1
+27731 27731 1
+1 27732 1
+27732 27732 1
+1 27733 1
+27733 27733 1
+1 27734 1
+27734 27734 1
+1 27735 1
+27735 27735 1
+1 27736 1
+27736 27736 1
+1 27737 1
+27737 27737 1
+1 27738 1
+27738 27738 1
+1 27739 1
+27739 27739 1
+1 27740 1
+27740 27740 1
+1 27741 1
+27741 27741 1
+1 27742 1
+27742 27742 1
+1 27743 1
+27743 27743 1
+1 27744 1
+27744 27744 1
+1 27745 1
+27745 27745 1
+1 27746 1
+27746 27746 1
+1 27747 1
+27747 27747 1
+1 27748 1
+27748 27748 1
+1 27749 1
+27749 27749 1
+1 27750 1
+27750 27750 1
+1 27751 1
+27751 27751 1
+1 27752 1
+27752 27752 1
+1 27753 1
+27753 27753 1
+1 27754 1
+27754 27754 1
+1 27755 1
+27755 27755 1
+1 27756 1
+27756 27756 1
+1 27757 1
+27757 27757 1
+1 27758 1
+27758 27758 1
+1 27759 1
+27759 27759 1
+1 27760 1
+27760 27760 1
+1 27761 1
+27761 27761 1
+1 27762 1
+27762 27762 1
+1 27763 1
+27763 27763 1
+1 27764 1
+27764 27764 1
+1 27765 1
+27765 27765 1
+1 27766 1
+27766 27766 1
+1 27767 1
+27767 27767 1
+1 27768 1
+27768 27768 1
+1 27769 1
+27769 27769 1
+1 27770 1
+27770 27770 1
+1 27771 1
+27771 27771 1
+1 27772 1
+27772 27772 1
+1 27773 1
+27773 27773 1
+1 27774 1
+27774 27774 1
+1 27775 1
+27775 27775 1
+1 27776 1
+27776 27776 1
+1 27777 1
+27777 27777 1
+1 27778 1
+27778 27778 1
+1 27779 1
+27779 27779 1
+1 27780 1
+27780 27780 1
+1 27781 1
+27781 27781 1
+1 27782 1
+27782 27782 1
+1 27783 1
+27783 27783 1
+1 27784 1
+27784 27784 1
+1 27785 1
+27785 27785 1
+1 27786 1
+27786 27786 1
+1 27787 1
+27787 27787 1
+1 27788 1
+27788 27788 1
+1 27789 1
+27789 27789 1
+1 27790 1
+27790 27790 1
+1 27791 1
+27791 27791 1
+1 27792 1
+27792 27792 1
+1 27793 1
+27793 27793 1
+1 27794 1
+27794 27794 1
+1 27795 1
+27795 27795 1
+1 27796 1
+27796 27796 1
+1 27797 1
+27797 27797 1
+1 27798 1
+27798 27798 1
+1 27799 1
+27799 27799 1
+1 27800 1
+27800 27800 1
+1 27801 1
+27801 27801 1
+1 27802 1
+27802 27802 1
+1 27803 1
+27803 27803 1
+1 27804 1
+27804 27804 1
+1 27805 1
+27805 27805 1
+1 27806 1
+27806 27806 1
+1 27807 1
+27807 27807 1
+1 27808 1
+27808 27808 1
+1 27809 1
+27809 27809 1
+1 27810 1
+27810 27810 1
+1 27811 1
+27811 27811 1
+1 27812 1
+27812 27812 1
+1 27813 1
+27813 27813 1
+1 27814 1
+27814 27814 1
+1 27815 1
+27815 27815 1
+1 27816 1
+27816 27816 1
+1 27817 1
+27817 27817 1
+1 27818 1
+27818 27818 1
+1 27819 1
+27819 27819 1
+1 27820 1
+27820 27820 1
+1 27821 1
+27821 27821 1
+1 27822 1
+27822 27822 1
+1 27823 1
+27823 27823 1
+1 27824 1
+27824 27824 1
+1 27825 1
+27825 27825 1
+1 27826 1
+27826 27826 1
+1 27827 1
+27827 27827 1
+1 27828 1
+27828 27828 1
+1 27829 1
+27829 27829 1
+1 27830 1
+27830 27830 1
+1 27831 1
+27831 27831 1
+1 27832 1
+27832 27832 1
+1 27833 1
+27833 27833 1
+1 27834 1
+27834 27834 1
+1 27835 1
+27835 27835 1
+1 27836 1
+27836 27836 1
+1 27837 1
+27837 27837 1
+1 27838 1
+27838 27838 1
+1 27839 1
+27839 27839 1
+1 27840 1
+27840 27840 1
+1 27841 1
+27841 27841 1
+1 27842 1
+27842 27842 1
+1 27843 1
+27843 27843 1
+1 27844 1
+27844 27844 1
+1 27845 1
+27845 27845 1
+1 27846 1
+27846 27846 1
+1 27847 1
+27847 27847 1
+1 27848 1
+27848 27848 1
+1 27849 1
+27849 27849 1
+1 27850 1
+27850 27850 1
+1 27851 1
+27851 27851 1
+1 27852 1
+27852 27852 1
+1 27853 1
+27853 27853 1
+1 27854 1
+27854 27854 1
+1 27855 1
+27855 27855 1
+1 27856 1
+27856 27856 1
+1 27857 1
+27857 27857 1
+1 27858 1
+27858 27858 1
+1 27859 1
+27859 27859 1
+1 27860 1
+27860 27860 1
+1 27861 1
+27861 27861 1
+1 27862 1
+27862 27862 1
+1 27863 1
+27863 27863 1
+1 27864 1
+27864 27864 1
+1 27865 1
+27865 27865 1
+1 27866 1
+27866 27866 1
+1 27867 1
+27867 27867 1
+1 27868 1
+27868 27868 1
+1 27869 1
+27869 27869 1
+1 27870 1
+27870 27870 1
+1 27871 1
+27871 27871 1
+1 27872 1
+27872 27872 1
+1 27873 1
+27873 27873 1
+1 27874 1
+27874 27874 1
+1 27875 1
+27875 27875 1
+1 27876 1
+27876 27876 1
+1 27877 1
+27877 27877 1
+1 27878 1
+27878 27878 1
+1 27879 1
+27879 27879 1
+1 27880 1
+27880 27880 1
+1 27881 1
+27881 27881 1
+1 27882 1
+27882 27882 1
+1 27883 1
+27883 27883 1
+1 27884 1
+27884 27884 1
+1 27885 1
+27885 27885 1
+1 27886 1
+27886 27886 1
+1 27887 1
+27887 27887 1
+1 27888 1
+27888 27888 1
+1 27889 1
+27889 27889 1
+1 27890 1
+27890 27890 1
+1 27891 1
+27891 27891 1
+1 27892 1
+27892 27892 1
+1 27893 1
+27893 27893 1
+1 27894 1
+27894 27894 1
+1 27895 1
+27895 27895 1
+1 27896 1
+27896 27896 1
+1 27897 1
+27897 27897 1
+1 27898 1
+27898 27898 1
+1 27899 1
+27899 27899 1
+1 27900 1
+27900 27900 1
+1 27901 1
+27901 27901 1
+1 27902 1
+27902 27902 1
+1 27903 1
+27903 27903 1
+1 27904 1
+27904 27904 1
+1 27905 1
+27905 27905 1
+1 27906 1
+27906 27906 1
+1 27907 1
+27907 27907 1
+1 27908 1
+27908 27908 1
+1 27909 1
+27909 27909 1
+1 27910 1
+27910 27910 1
+1 27911 1
+27911 27911 1
+1 27912 1
+27912 27912 1
+1 27913 1
+27913 27913 1
+1 27914 1
+27914 27914 1
+1 27915 1
+27915 27915 1
+1 27916 1
+27916 27916 1
+1 27917 1
+27917 27917 1
+1 27918 1
+27918 27918 1
+1 27919 1
+27919 27919 1
+1 27920 1
+27920 27920 1
+1 27921 1
+27921 27921 1
+1 27922 1
+27922 27922 1
+1 27923 1
+27923 27923 1
+1 27924 1
+27924 27924 1
+1 27925 1
+27925 27925 1
+1 27926 1
+27926 27926 1
+1 27927 1
+27927 27927 1
+1 27928 1
+27928 27928 1
+1 27929 1
+27929 27929 1
+1 27930 1
+27930 27930 1
+1 27931 1
+27931 27931 1
+1 27932 1
+27932 27932 1
+1 27933 1
+27933 27933 1
+1 27934 1
+27934 27934 1
+1 27935 1
+27935 27935 1
+1 27936 1
+27936 27936 1
+1 27937 1
+27937 27937 1
+1 27938 1
+27938 27938 1
+1 27939 1
+27939 27939 1
+1 27940 1
+27940 27940 1
+1 27941 1
+27941 27941 1
+1 27942 1
+27942 27942 1
+1 27943 1
+27943 27943 1
+1 27944 1
+27944 27944 1
+1 27945 1
+27945 27945 1
+1 27946 1
+27946 27946 1
+1 27947 1
+27947 27947 1
+1 27948 1
+27948 27948 1
+1 27949 1
+27949 27949 1
+1 27950 1
+27950 27950 1
+1 27951 1
+27951 27951 1
+1 27952 1
+27952 27952 1
+1 27953 1
+27953 27953 1
+1 27954 1
+27954 27954 1
+1 27955 1
+27955 27955 1
+1 27956 1
+27956 27956 1
+1 27957 1
+27957 27957 1
+1 27958 1
+27958 27958 1
+1 27959 1
+27959 27959 1
+1 27960 1
+27960 27960 1
+1 27961 1
+27961 27961 1
+1 27962 1
+27962 27962 1
+1 27963 1
+27963 27963 1
+1 27964 1
+27964 27964 1
+1 27965 1
+27965 27965 1
+1 27966 1
+27966 27966 1
+1 27967 1
+27967 27967 1
+1 27968 1
+27968 27968 1
+1 27969 1
+27969 27969 1
+1 27970 1
+27970 27970 1
+1 27971 1
+27971 27971 1
+1 27972 1
+27972 27972 1
+1 27973 1
+27973 27973 1
+1 27974 1
+27974 27974 1
+1 27975 1
+27975 27975 1
+1 27976 1
+27976 27976 1
+1 27977 1
+27977 27977 1
+1 27978 1
+27978 27978 1
+1 27979 1
+27979 27979 1
+1 27980 1
+27980 27980 1
+1 27981 1
+27981 27981 1
+1 27982 1
+27982 27982 1
+1 27983 1
+27983 27983 1
+1 27984 1
+27984 27984 1
+1 27985 1
+27985 27985 1
+1 27986 1
+27986 27986 1
+1 27987 1
+27987 27987 1
+1 27988 1
+27988 27988 1
+1 27989 1
+27989 27989 1
+1 27990 1
+27990 27990 1
+1 27991 1
+27991 27991 1
+1 27992 1
+27992 27992 1
+1 27993 1
+27993 27993 1
+1 27994 1
+27994 27994 1
+1 27995 1
+27995 27995 1
+1 27996 1
+27996 27996 1
+1 27997 1
+27997 27997 1
+1 27998 1
+27998 27998 1
+1 27999 1
+27999 27999 1
+1 28000 1
+28000 28000 1
+1 28001 1
+28001 28001 1
+1 28002 1
+28002 28002 1
+1 28003 1
+28003 28003 1
+1 28004 1
+28004 28004 1
+1 28005 1
+28005 28005 1
+1 28006 1
+28006 28006 1
+1 28007 1
+28007 28007 1
+1 28008 1
+28008 28008 1
+1 28009 1
+28009 28009 1
+1 28010 1
+28010 28010 1
+1 28011 1
+28011 28011 1
+1 28012 1
+28012 28012 1
+1 28013 1
+28013 28013 1
+1 28014 1
+28014 28014 1
+1 28015 1
+28015 28015 1
+1 28016 1
+28016 28016 1
+1 28017 1
+28017 28017 1
+1 28018 1
+28018 28018 1
+1 28019 1
+28019 28019 1
+1 28020 1
+28020 28020 1
+1 28021 1
+28021 28021 1
+1 28022 1
+28022 28022 1
+1 28023 1
+28023 28023 1
+1 28024 1
+28024 28024 1
+1 28025 1
+28025 28025 1
+1 28026 1
+28026 28026 1
+1 28027 1
+28027 28027 1
+1 28028 1
+28028 28028 1
+1 28029 1
+28029 28029 1
+1 28030 1
+28030 28030 1
+1 28031 1
+28031 28031 1
+1 28032 1
+28032 28032 1
+1 28033 1
+28033 28033 1
+1 28034 1
+28034 28034 1
+1 28035 1
+28035 28035 1
+1 28036 1
+28036 28036 1
+1 28037 1
+28037 28037 1
+1 28038 1
+28038 28038 1
+1 28039 1
+28039 28039 1
+1 28040 1
+28040 28040 1
+1 28041 1
+28041 28041 1
+1 28042 1
+28042 28042 1
+1 28043 1
+28043 28043 1
+1 28044 1
+28044 28044 1
+1 28045 1
+28045 28045 1
+1 28046 1
+28046 28046 1
+1 28047 1
+28047 28047 1
+1 28048 1
+28048 28048 1
+1 28049 1
+28049 28049 1
+1 28050 1
+28050 28050 1
+1 28051 1
+28051 28051 1
+1 28052 1
+28052 28052 1
+1 28053 1
+28053 28053 1
+1 28054 1
+28054 28054 1
+1 28055 1
+28055 28055 1
+1 28056 1
+28056 28056 1
+1 28057 1
+28057 28057 1
+1 28058 1
+28058 28058 1
+1 28059 1
+28059 28059 1
+1 28060 1
+28060 28060 1
+1 28061 1
+28061 28061 1
+1 28062 1
+28062 28062 1
+1 28063 1
+28063 28063 1
+1 28064 1
+28064 28064 1
+1 28065 1
+28065 28065 1
+1 28066 1
+28066 28066 1
+1 28067 1
+28067 28067 1
+1 28068 1
+28068 28068 1
+1 28069 1
+28069 28069 1
+1 28070 1
+28070 28070 1
+1 28071 1
+28071 28071 1
+1 28072 1
+28072 28072 1
+1 28073 1
+28073 28073 1
+1 28074 1
+28074 28074 1
+1 28075 1
+28075 28075 1
+1 28076 1
+28076 28076 1
+1 28077 1
+28077 28077 1
+1 28078 1
+28078 28078 1
+1 28079 1
+28079 28079 1
+1 28080 1
+28080 28080 1
+1 28081 1
+28081 28081 1
+1 28082 1
+28082 28082 1
+1 28083 1
+28083 28083 1
+1 28084 1
+28084 28084 1
+1 28085 1
+28085 28085 1
+1 28086 1
+28086 28086 1
+1 28087 1
+28087 28087 1
+1 28088 1
+28088 28088 1
+1 28089 1
+28089 28089 1
+1 28090 1
+28090 28090 1
+1 28091 1
+28091 28091 1
+1 28092 1
+28092 28092 1
+1 28093 1
+28093 28093 1
+1 28094 1
+28094 28094 1
+1 28095 1
+28095 28095 1
+1 28096 1
+28096 28096 1
+1 28097 1
+28097 28097 1
+1 28098 1
+28098 28098 1
+1 28099 1
+28099 28099 1
+1 28100 1
+28100 28100 1
+1 28101 1
+28101 28101 1
+1 28102 1
+28102 28102 1
+1 28103 1
+28103 28103 1
+1 28104 1
+28104 28104 1
+1 28105 1
+28105 28105 1
+1 28106 1
+28106 28106 1
+1 28107 1
+28107 28107 1
+1 28108 1
+28108 28108 1
+1 28109 1
+28109 28109 1
+1 28110 1
+28110 28110 1
+1 28111 1
+28111 28111 1
+1 28112 1
+28112 28112 1
+1 28113 1
+28113 28113 1
+1 28114 1
+28114 28114 1
+1 28115 1
+28115 28115 1
+1 28116 1
+28116 28116 1
+1 28117 1
+28117 28117 1
+1 28118 1
+28118 28118 1
+1 28119 1
+28119 28119 1
+1 28120 1
+28120 28120 1
+1 28121 1
+28121 28121 1
+1 28122 1
+28122 28122 1
+1 28123 1
+28123 28123 1
+1 28124 1
+28124 28124 1
+1 28125 1
+28125 28125 1
+1 28126 1
+28126 28126 1
+1 28127 1
+28127 28127 1
+1 28128 1
+28128 28128 1
+1 28129 1
+28129 28129 1
+1 28130 1
+28130 28130 1
+1 28131 1
+28131 28131 1
+1 28132 1
+28132 28132 1
+1 28133 1
+28133 28133 1
+1 28134 1
+28134 28134 1
+1 28135 1
+28135 28135 1
+1 28136 1
+28136 28136 1
+1 28137 1
+28137 28137 1
+1 28138 1
+28138 28138 1
+1 28139 1
+28139 28139 1
+1 28140 1
+28140 28140 1
+1 28141 1
+28141 28141 1
+1 28142 1
+28142 28142 1
+1 28143 1
+28143 28143 1
+1 28144 1
+28144 28144 1
+1 28145 1
+28145 28145 1
+1 28146 1
+28146 28146 1
+1 28147 1
+28147 28147 1
+1 28148 1
+28148 28148 1
+1 28149 1
+28149 28149 1
+1 28150 1
+28150 28150 1
+1 28151 1
+28151 28151 1
+1 28152 1
+28152 28152 1
+1 28153 1
+28153 28153 1
+1 28154 1
+28154 28154 1
+1 28155 1
+28155 28155 1
+1 28156 1
+28156 28156 1
+1 28157 1
+28157 28157 1
+1 28158 1
+28158 28158 1
+1 28159 1
+28159 28159 1
+1 28160 1
+28160 28160 1
+1 28161 1
+28161 28161 1
+1 28162 1
+28162 28162 1
+1 28163 1
+28163 28163 1
+1 28164 1
+28164 28164 1
+1 28165 1
+28165 28165 1
+1 28166 1
+28166 28166 1
+1 28167 1
+28167 28167 1
+1 28168 1
+28168 28168 1
+1 28169 1
+28169 28169 1
+1 28170 1
+28170 28170 1
+1 28171 1
+28171 28171 1
+1 28172 1
+28172 28172 1
+1 28173 1
+28173 28173 1
+1 28174 1
+28174 28174 1
+1 28175 1
+28175 28175 1
+1 28176 1
+28176 28176 1
+1 28177 1
+28177 28177 1
+1 28178 1
+28178 28178 1
+1 28179 1
+28179 28179 1
+1 28180 1
+28180 28180 1
+1 28181 1
+28181 28181 1
+1 28182 1
+28182 28182 1
+1 28183 1
+28183 28183 1
+1 28184 1
+28184 28184 1
+1 28185 1
+28185 28185 1
+1 28186 1
+28186 28186 1
+1 28187 1
+28187 28187 1
+1 28188 1
+28188 28188 1
+1 28189 1
+28189 28189 1
+1 28190 1
+28190 28190 1
+1 28191 1
+28191 28191 1
+1 28192 1
+28192 28192 1
+1 28193 1
+28193 28193 1
+1 28194 1
+28194 28194 1
+1 28195 1
+28195 28195 1
+1 28196 1
+28196 28196 1
+1 28197 1
+28197 28197 1
+1 28198 1
+28198 28198 1
+1 28199 1
+28199 28199 1
+1 28200 1
+28200 28200 1
+1 28201 1
+28201 28201 1
+1 28202 1
+28202 28202 1
+1 28203 1
+28203 28203 1
+1 28204 1
+28204 28204 1
+1 28205 1
+28205 28205 1
+1 28206 1
+28206 28206 1
+1 28207 1
+28207 28207 1
+1 28208 1
+28208 28208 1
+1 28209 1
+28209 28209 1
+1 28210 1
+28210 28210 1
+1 28211 1
+28211 28211 1
+1 28212 1
+28212 28212 1
+1 28213 1
+28213 28213 1
+1 28214 1
+28214 28214 1
+1 28215 1
+28215 28215 1
+1 28216 1
+28216 28216 1
+1 28217 1
+28217 28217 1
+1 28218 1
+28218 28218 1
+1 28219 1
+28219 28219 1
+1 28220 1
+28220 28220 1
+1 28221 1
+28221 28221 1
+1 28222 1
+28222 28222 1
+1 28223 1
+28223 28223 1
+1 28224 1
+28224 28224 1
+1 28225 1
+28225 28225 1
+1 28226 1
+28226 28226 1
+1 28227 1
+28227 28227 1
+1 28228 1
+28228 28228 1
+1 28229 1
+28229 28229 1
+1 28230 1
+28230 28230 1
+1 28231 1
+28231 28231 1
+1 28232 1
+28232 28232 1
+1 28233 1
+28233 28233 1
+1 28234 1
+28234 28234 1
+1 28235 1
+28235 28235 1
+1 28236 1
+28236 28236 1
+1 28237 1
+28237 28237 1
+1 28238 1
+28238 28238 1
+1 28239 1
+28239 28239 1
+1 28240 1
+28240 28240 1
+1 28241 1
+28241 28241 1
+1 28242 1
+28242 28242 1
+1 28243 1
+28243 28243 1
+1 28244 1
+28244 28244 1
+1 28245 1
+28245 28245 1
+1 28246 1
+28246 28246 1
+1 28247 1
+28247 28247 1
+1 28248 1
+28248 28248 1
+1 28249 1
+28249 28249 1
+1 28250 1
+28250 28250 1
+1 28251 1
+28251 28251 1
+1 28252 1
+28252 28252 1
+1 28253 1
+28253 28253 1
+1 28254 1
+28254 28254 1
+1 28255 1
+28255 28255 1
+1 28256 1
+28256 28256 1
+1 28257 1
+28257 28257 1
+1 28258 1
+28258 28258 1
+1 28259 1
+28259 28259 1
+1 28260 1
+28260 28260 1
+1 28261 1
+28261 28261 1
+1 28262 1
+28262 28262 1
+1 28263 1
+28263 28263 1
+1 28264 1
+28264 28264 1
+1 28265 1
+28265 28265 1
+1 28266 1
+28266 28266 1
+1 28267 1
+28267 28267 1
+1 28268 1
+28268 28268 1
+1 28269 1
+28269 28269 1
+1 28270 1
+28270 28270 1
+1 28271 1
+28271 28271 1
+1 28272 1
+28272 28272 1
+1 28273 1
+28273 28273 1
+1 28274 1
+28274 28274 1
+1 28275 1
+28275 28275 1
+1 28276 1
+28276 28276 1
+1 28277 1
+28277 28277 1
+1 28278 1
+28278 28278 1
+1 28279 1
+28279 28279 1
+1 28280 1
+28280 28280 1
+1 28281 1
+28281 28281 1
+1 28282 1
+28282 28282 1
+1 28283 1
+28283 28283 1
+1 28284 1
+28284 28284 1
+1 28285 1
+28285 28285 1
+1 28286 1
+28286 28286 1
+1 28287 1
+28287 28287 1
+1 28288 1
+28288 28288 1
+1 28289 1
+28289 28289 1
+1 28290 1
+28290 28290 1
+1 28291 1
+28291 28291 1
+1 28292 1
+28292 28292 1
+1 28293 1
+28293 28293 1
+1 28294 1
+28294 28294 1
+1 28295 1
+28295 28295 1
+1 28296 1
+28296 28296 1
+1 28297 1
+28297 28297 1
+1 28298 1
+28298 28298 1
+1 28299 1
+28299 28299 1
+1 28300 1
+28300 28300 1
+1 28301 1
+28301 28301 1
+1 28302 1
+28302 28302 1
+1 28303 1
+28303 28303 1
+1 28304 1
+28304 28304 1
+1 28305 1
+28305 28305 1
+1 28306 1
+28306 28306 1
+1 28307 1
+28307 28307 1
+1 28308 1
+28308 28308 1
+1 28309 1
+28309 28309 1
+1 28310 1
+28310 28310 1
+1 28311 1
+28311 28311 1
+1 28312 1
+28312 28312 1
+1 28313 1
+28313 28313 1
+1 28314 1
+28314 28314 1
+1 28315 1
+28315 28315 1
+1 28316 1
+28316 28316 1
+1 28317 1
+28317 28317 1
+1 28318 1
+28318 28318 1
+1 28319 1
+28319 28319 1
+1 28320 1
+28320 28320 1
+1 28321 1
+28321 28321 1
+1 28322 1
+28322 28322 1
+1 28323 1
+28323 28323 1
+1 28324 1
+28324 28324 1
+1 28325 1
+28325 28325 1
+1 28326 1
+28326 28326 1
+1 28327 1
+28327 28327 1
+1 28328 1
+28328 28328 1
+1 28329 1
+28329 28329 1
+1 28330 1
+28330 28330 1
+1 28331 1
+28331 28331 1
+1 28332 1
+28332 28332 1
+1 28333 1
+28333 28333 1
+1 28334 1
+28334 28334 1
+1 28335 1
+28335 28335 1
+1 28336 1
+28336 28336 1
+1 28337 1
+28337 28337 1
+1 28338 1
+28338 28338 1
+1 28339 1
+28339 28339 1
+1 28340 1
+28340 28340 1
+1 28341 1
+28341 28341 1
+1 28342 1
+28342 28342 1
+1 28343 1
+28343 28343 1
+1 28344 1
+28344 28344 1
+1 28345 1
+28345 28345 1
+1 28346 1
+28346 28346 1
+1 28347 1
+28347 28347 1
+1 28348 1
+28348 28348 1
+1 28349 1
+28349 28349 1
+1 28350 1
+28350 28350 1
+1 28351 1
+28351 28351 1
+1 28352 1
+28352 28352 1
+1 28353 1
+28353 28353 1
+1 28354 1
+28354 28354 1
+1 28355 1
+28355 28355 1
+1 28356 1
+28356 28356 1
+1 28357 1
+28357 28357 1
+1 28358 1
+28358 28358 1
+1 28359 1
+28359 28359 1
+1 28360 1
+28360 28360 1
+1 28361 1
+28361 28361 1
+1 28362 1
+28362 28362 1
+1 28363 1
+28363 28363 1
+1 28364 1
+28364 28364 1
+1 28365 1
+28365 28365 1
+1 28366 1
+28366 28366 1
+1 28367 1
+28367 28367 1
+1 28368 1
+28368 28368 1
+1 28369 1
+28369 28369 1
+1 28370 1
+28370 28370 1
+1 28371 1
+28371 28371 1
+1 28372 1
+28372 28372 1
+1 28373 1
+28373 28373 1
+1 28374 1
+28374 28374 1
+1 28375 1
+28375 28375 1
+1 28376 1
+28376 28376 1
+1 28377 1
+28377 28377 1
+1 28378 1
+28378 28378 1
+1 28379 1
+28379 28379 1
+1 28380 1
+28380 28380 1
+1 28381 1
+28381 28381 1
+1 28382 1
+28382 28382 1
+1 28383 1
+28383 28383 1
+1 28384 1
+28384 28384 1
+1 28385 1
+28385 28385 1
+1 28386 1
+28386 28386 1
+1 28387 1
+28387 28387 1
+1 28388 1
+28388 28388 1
+1 28389 1
+28389 28389 1
+1 28390 1
+28390 28390 1
+1 28391 1
+28391 28391 1
+1 28392 1
+28392 28392 1
+1 28393 1
+28393 28393 1
+1 28394 1
+28394 28394 1
+1 28395 1
+28395 28395 1
+1 28396 1
+28396 28396 1
+1 28397 1
+28397 28397 1
+1 28398 1
+28398 28398 1
+1 28399 1
+28399 28399 1
+1 28400 1
+28400 28400 1
+1 28401 1
+28401 28401 1
+1 28402 1
+28402 28402 1
+1 28403 1
+28403 28403 1
+1 28404 1
+28404 28404 1
+1 28405 1
+28405 28405 1
+1 28406 1
+28406 28406 1
+1 28407 1
+28407 28407 1
+1 28408 1
+28408 28408 1
+1 28409 1
+28409 28409 1
+1 28410 1
+28410 28410 1
+1 28411 1
+28411 28411 1
+1 28412 1
+28412 28412 1
+1 28413 1
+28413 28413 1
+1 28414 1
+28414 28414 1
+1 28415 1
+28415 28415 1
+1 28416 1
+28416 28416 1
+1 28417 1
+28417 28417 1
+1 28418 1
+28418 28418 1
+1 28419 1
+28419 28419 1
+1 28420 1
+28420 28420 1
+1 28421 1
+28421 28421 1
+1 28422 1
+28422 28422 1
+1 28423 1
+28423 28423 1
+1 28424 1
+28424 28424 1
+1 28425 1
+28425 28425 1
+1 28426 1
+28426 28426 1
+1 28427 1
+28427 28427 1
+1 28428 1
+28428 28428 1
+1 28429 1
+28429 28429 1
+1 28430 1
+28430 28430 1
+1 28431 1
+28431 28431 1
+1 28432 1
+28432 28432 1
+1 28433 1
+28433 28433 1
+1 28434 1
+28434 28434 1
+1 28435 1
+28435 28435 1
+1 28436 1
+28436 28436 1
+1 28437 1
+28437 28437 1
+1 28438 1
+28438 28438 1
+1 28439 1
+28439 28439 1
+1 28440 1
+28440 28440 1
+1 28441 1
+28441 28441 1
+1 28442 1
+28442 28442 1
+1 28443 1
+28443 28443 1
+1 28444 1
+28444 28444 1
+1 28445 1
+28445 28445 1
+1 28446 1
+28446 28446 1
+1 28447 1
+28447 28447 1
+1 28448 1
+28448 28448 1
+1 28449 1
+28449 28449 1
+1 28450 1
+28450 28450 1
+1 28451 1
+28451 28451 1
+1 28452 1
+28452 28452 1
+1 28453 1
+28453 28453 1
+1 28454 1
+28454 28454 1
+1 28455 1
+28455 28455 1
+1 28456 1
+28456 28456 1
+1 28457 1
+28457 28457 1
+1 28458 1
+28458 28458 1
+1 28459 1
+28459 28459 1
+1 28460 1
+28460 28460 1
+1 28461 1
+28461 28461 1
+1 28462 1
+28462 28462 1
+1 28463 1
+28463 28463 1
+1 28464 1
+28464 28464 1
+1 28465 1
+28465 28465 1
+1 28466 1
+28466 28466 1
+1 28467 1
+28467 28467 1
+1 28468 1
+28468 28468 1
+1 28469 1
+28469 28469 1
+1 28470 1
+28470 28470 1
+1 28471 1
+28471 28471 1
+1 28472 1
+28472 28472 1
+1 28473 1
+28473 28473 1
+1 28474 1
+28474 28474 1
+1 28475 1
+28475 28475 1
+1 28476 1
+28476 28476 1
+1 28477 1
+28477 28477 1
+1 28478 1
+28478 28478 1
+1 28479 1
+28479 28479 1
+1 28480 1
+28480 28480 1
+1 28481 1
+28481 28481 1
+1 28482 1
+28482 28482 1
+1 28483 1
+28483 28483 1
+1 28484 1
+28484 28484 1
+1 28485 1
+28485 28485 1
+1 28486 1
+28486 28486 1
+1 28487 1
+28487 28487 1
+1 28488 1
+28488 28488 1
+1 28489 1
+28489 28489 1
+1 28490 1
+28490 28490 1
+1 28491 1
+28491 28491 1
+1 28492 1
+28492 28492 1
+1 28493 1
+28493 28493 1
+1 28494 1
+28494 28494 1
+1 28495 1
+28495 28495 1
+1 28496 1
+28496 28496 1
+1 28497 1
+28497 28497 1
+1 28498 1
+28498 28498 1
+1 28499 1
+28499 28499 1
+1 28500 1
+28500 28500 1
+1 28501 1
+28501 28501 1
+1 28502 1
+28502 28502 1
+1 28503 1
+28503 28503 1
+1 28504 1
+28504 28504 1
+1 28505 1
+28505 28505 1
+1 28506 1
+28506 28506 1
+1 28507 1
+28507 28507 1
+1 28508 1
+28508 28508 1
+1 28509 1
+28509 28509 1
+1 28510 1
+28510 28510 1
+1 28511 1
+28511 28511 1
+1 28512 1
+28512 28512 1
+1 28513 1
+28513 28513 1
+1 28514 1
+28514 28514 1
+1 28515 1
+28515 28515 1
+1 28516 1
+28516 28516 1
+1 28517 1
+28517 28517 1
+1 28518 1
+28518 28518 1
+1 28519 1
+28519 28519 1
+1 28520 1
+28520 28520 1
+1 28521 1
+28521 28521 1
+1 28522 1
+28522 28522 1
+1 28523 1
+28523 28523 1
+1 28524 1
+28524 28524 1
+1 28525 1
+28525 28525 1
+1 28526 1
+28526 28526 1
+1 28527 1
+28527 28527 1
+1 28528 1
+28528 28528 1
+1 28529 1
+28529 28529 1
+1 28530 1
+28530 28530 1
+1 28531 1
+28531 28531 1
+1 28532 1
+28532 28532 1
+1 28533 1
+28533 28533 1
+1 28534 1
+28534 28534 1
+1 28535 1
+28535 28535 1
+1 28536 1
+28536 28536 1
+1 28537 1
+28537 28537 1
+1 28538 1
+28538 28538 1
+1 28539 1
+28539 28539 1
+1 28540 1
+28540 28540 1
+1 28541 1
+28541 28541 1
+1 28542 1
+28542 28542 1
+1 28543 1
+28543 28543 1
+1 28544 1
+28544 28544 1
+1 28545 1
+28545 28545 1
+1 28546 1
+28546 28546 1
+1 28547 1
+28547 28547 1
+1 28548 1
+28548 28548 1
+1 28549 1
+28549 28549 1
+1 28550 1
+28550 28550 1
+1 28551 1
+28551 28551 1
+1 28552 1
+28552 28552 1
+1 28553 1
+28553 28553 1
+1 28554 1
+28554 28554 1
+1 28555 1
+28555 28555 1
+1 28556 1
+28556 28556 1
+1 28557 1
+28557 28557 1
+1 28558 1
+28558 28558 1
+1 28559 1
+28559 28559 1
+1 28560 1
+28560 28560 1
+1 28561 1
+28561 28561 1
+1 28562 1
+28562 28562 1
+1 28563 1
+28563 28563 1
+1 28564 1
+28564 28564 1
+1 28565 1
+28565 28565 1
+1 28566 1
+28566 28566 1
+1 28567 1
+28567 28567 1
+1 28568 1
+28568 28568 1
+1 28569 1
+28569 28569 1
+1 28570 1
+28570 28570 1
+1 28571 1
+28571 28571 1
+1 28572 1
+28572 28572 1
+1 28573 1
+28573 28573 1
+1 28574 1
+28574 28574 1
+1 28575 1
+28575 28575 1
+1 28576 1
+28576 28576 1
+1 28577 1
+28577 28577 1
+1 28578 1
+28578 28578 1
+1 28579 1
+28579 28579 1
+1 28580 1
+28580 28580 1
+1 28581 1
+28581 28581 1
+1 28582 1
+28582 28582 1
+1 28583 1
+28583 28583 1
+1 28584 1
+28584 28584 1
+1 28585 1
+28585 28585 1
+1 28586 1
+28586 28586 1
+1 28587 1
+28587 28587 1
+1 28588 1
+28588 28588 1
+1 28589 1
+28589 28589 1
+1 28590 1
+28590 28590 1
+1 28591 1
+28591 28591 1
+1 28592 1
+28592 28592 1
+1 28593 1
+28593 28593 1
+1 28594 1
+28594 28594 1
+1 28595 1
+28595 28595 1
+1 28596 1
+28596 28596 1
+1 28597 1
+28597 28597 1
+1 28598 1
+28598 28598 1
+1 28599 1
+28599 28599 1
+1 28600 1
+28600 28600 1
+1 28601 1
+28601 28601 1
+1 28602 1
+28602 28602 1
+1 28603 1
+28603 28603 1
+1 28604 1
+28604 28604 1
+1 28605 1
+28605 28605 1
+1 28606 1
+28606 28606 1
+1 28607 1
+28607 28607 1
+1 28608 1
+28608 28608 1
+1 28609 1
+28609 28609 1
+1 28610 1
+28610 28610 1
+1 28611 1
+28611 28611 1
+1 28612 1
+28612 28612 1
+1 28613 1
+28613 28613 1
+1 28614 1
+28614 28614 1
+1 28615 1
+28615 28615 1
+1 28616 1
+28616 28616 1
+1 28617 1
+28617 28617 1
+1 28618 1
+28618 28618 1
+1 28619 1
+28619 28619 1
+1 28620 1
+28620 28620 1
+1 28621 1
+28621 28621 1
+1 28622 1
+28622 28622 1
+1 28623 1
+28623 28623 1
+1 28624 1
+28624 28624 1
+1 28625 1
+28625 28625 1
+1 28626 1
+28626 28626 1
+1 28627 1
+28627 28627 1
+1 28628 1
+28628 28628 1
+1 28629 1
+28629 28629 1
+1 28630 1
+28630 28630 1
+1 28631 1
+28631 28631 1
+1 28632 1
+28632 28632 1
+1 28633 1
+28633 28633 1
+1 28634 1
+28634 28634 1
+1 28635 1
+28635 28635 1
+1 28636 1
+28636 28636 1
+1 28637 1
+28637 28637 1
+1 28638 1
+28638 28638 1
+1 28639 1
+28639 28639 1
+1 28640 1
+28640 28640 1
+1 28641 1
+28641 28641 1
+1 28642 1
+28642 28642 1
+1 28643 1
+28643 28643 1
+1 28644 1
+28644 28644 1
+1 28645 1
+28645 28645 1
+1 28646 1
+28646 28646 1
+1 28647 1
+28647 28647 1
+1 28648 1
+28648 28648 1
+1 28649 1
+28649 28649 1
+1 28650 1
+28650 28650 1
+1 28651 1
+28651 28651 1
+1 28652 1
+28652 28652 1
+1 28653 1
+28653 28653 1
+1 28654 1
+28654 28654 1
+1 28655 1
+28655 28655 1
+1 28656 1
+28656 28656 1
+1 28657 1
+28657 28657 1
+1 28658 1
+28658 28658 1
+1 28659 1
+28659 28659 1
+1 28660 1
+28660 28660 1
+1 28661 1
+28661 28661 1
+1 28662 1
+28662 28662 1
+1 28663 1
+28663 28663 1
+1 28664 1
+28664 28664 1
+1 28665 1
+28665 28665 1
+1 28666 1
+28666 28666 1
+1 28667 1
+28667 28667 1
+1 28668 1
+28668 28668 1
+1 28669 1
+28669 28669 1
+1 28670 1
+28670 28670 1
+1 28671 1
+28671 28671 1
+1 28672 1
+28672 28672 1
+1 28673 1
+28673 28673 1
+1 28674 1
+28674 28674 1
+1 28675 1
+28675 28675 1
+1 28676 1
+28676 28676 1
+1 28677 1
+28677 28677 1
+1 28678 1
+28678 28678 1
+1 28679 1
+28679 28679 1
+1 28680 1
+28680 28680 1
+1 28681 1
+28681 28681 1
+1 28682 1
+28682 28682 1
+1 28683 1
+28683 28683 1
+1 28684 1
+28684 28684 1
+1 28685 1
+28685 28685 1
+1 28686 1
+28686 28686 1
+1 28687 1
+28687 28687 1
+1 28688 1
+28688 28688 1
+1 28689 1
+28689 28689 1
+1 28690 1
+28690 28690 1
+1 28691 1
+28691 28691 1
+1 28692 1
+28692 28692 1
+1 28693 1
+28693 28693 1
+1 28694 1
+28694 28694 1
+1 28695 1
+28695 28695 1
+1 28696 1
+28696 28696 1
+1 28697 1
+28697 28697 1
+1 28698 1
+28698 28698 1
+1 28699 1
+28699 28699 1
+1 28700 1
+28700 28700 1
+1 28701 1
+28701 28701 1
+1 28702 1
+28702 28702 1
+1 28703 1
+28703 28703 1
+1 28704 1
+28704 28704 1
+1 28705 1
+28705 28705 1
+1 28706 1
+28706 28706 1
+1 28707 1
+28707 28707 1
+1 28708 1
+28708 28708 1
+1 28709 1
+28709 28709 1
+1 28710 1
+28710 28710 1
+1 28711 1
+28711 28711 1
+1 28712 1
+28712 28712 1
+1 28713 1
+28713 28713 1
+1 28714 1
+28714 28714 1
+1 28715 1
+28715 28715 1
+1 28716 1
+28716 28716 1
+1 28717 1
+28717 28717 1
+1 28718 1
+28718 28718 1
+1 28719 1
+28719 28719 1
+1 28720 1
+28720 28720 1
+1 28721 1
+28721 28721 1
+1 28722 1
+28722 28722 1
+1 28723 1
+28723 28723 1
+1 28724 1
+28724 28724 1
+1 28725 1
+28725 28725 1
+1 28726 1
+28726 28726 1
+1 28727 1
+28727 28727 1
+1 28728 1
+28728 28728 1
+1 28729 1
+28729 28729 1
+1 28730 1
+28730 28730 1
+1 28731 1
+28731 28731 1
+1 28732 1
+28732 28732 1
+1 28733 1
+28733 28733 1
+1 28734 1
+28734 28734 1
+1 28735 1
+28735 28735 1
+1 28736 1
+28736 28736 1
+1 28737 1
+28737 28737 1
+1 28738 1
+28738 28738 1
+1 28739 1
+28739 28739 1
+1 28740 1
+28740 28740 1
+1 28741 1
+28741 28741 1
+1 28742 1
+28742 28742 1
+1 28743 1
+28743 28743 1
+1 28744 1
+28744 28744 1
+1 28745 1
+28745 28745 1
+1 28746 1
+28746 28746 1
+1 28747 1
+28747 28747 1
+1 28748 1
+28748 28748 1
+1 28749 1
+28749 28749 1
+1 28750 1
+28750 28750 1
+1 28751 1
+28751 28751 1
+1 28752 1
+28752 28752 1
+1 28753 1
+28753 28753 1
+1 28754 1
+28754 28754 1
+1 28755 1
+28755 28755 1
+1 28756 1
+28756 28756 1
+1 28757 1
+28757 28757 1
+1 28758 1
+28758 28758 1
+1 28759 1
+28759 28759 1
+1 28760 1
+28760 28760 1
+1 28761 1
+28761 28761 1
+1 28762 1
+28762 28762 1
+1 28763 1
+28763 28763 1
+1 28764 1
+28764 28764 1
+1 28765 1
+28765 28765 1
+1 28766 1
+28766 28766 1
+1 28767 1
+28767 28767 1
+1 28768 1
+28768 28768 1
+1 28769 1
+28769 28769 1
+1 28770 1
+28770 28770 1
+1 28771 1
+28771 28771 1
+1 28772 1
+28772 28772 1
+1 28773 1
+28773 28773 1
+1 28774 1
+28774 28774 1
+1 28775 1
+28775 28775 1
+1 28776 1
+28776 28776 1
+1 28777 1
+28777 28777 1
+1 28778 1
+28778 28778 1
+1 28779 1
+28779 28779 1
+1 28780 1
+28780 28780 1
+1 28781 1
+28781 28781 1
+1 28782 1
+28782 28782 1
+1 28783 1
+28783 28783 1
+1 28784 1
+28784 28784 1
+1 28785 1
+28785 28785 1
+1 28786 1
+28786 28786 1
+1 28787 1
+28787 28787 1
+1 28788 1
+28788 28788 1
+1 28789 1
+28789 28789 1
+1 28790 1
+28790 28790 1
+1 28791 1
+28791 28791 1
+1 28792 1
+28792 28792 1
+1 28793 1
+28793 28793 1
+1 28794 1
+28794 28794 1
+1 28795 1
+28795 28795 1
+1 28796 1
+28796 28796 1
+1 28797 1
+28797 28797 1
+1 28798 1
+28798 28798 1
+1 28799 1
+28799 28799 1
+1 28800 1
+28800 28800 1
+1 28801 1
+28801 28801 1
+1 28802 1
+28802 28802 1
+1 28803 1
+28803 28803 1
+1 28804 1
+28804 28804 1
+1 28805 1
+28805 28805 1
+1 28806 1
+28806 28806 1
+1 28807 1
+28807 28807 1
+1 28808 1
+28808 28808 1
+1 28809 1
+28809 28809 1
+1 28810 1
+28810 28810 1
+1 28811 1
+28811 28811 1
+1 28812 1
+28812 28812 1
+1 28813 1
+28813 28813 1
+1 28814 1
+28814 28814 1
+1 28815 1
+28815 28815 1
+1 28816 1
+28816 28816 1
+1 28817 1
+28817 28817 1
+1 28818 1
+28818 28818 1
+1 28819 1
+28819 28819 1
+1 28820 1
+28820 28820 1
+1 28821 1
+28821 28821 1
+1 28822 1
+28822 28822 1
+1 28823 1
+28823 28823 1
+1 28824 1
+28824 28824 1
+1 28825 1
+28825 28825 1
+1 28826 1
+28826 28826 1
+1 28827 1
+28827 28827 1
+1 28828 1
+28828 28828 1
+1 28829 1
+28829 28829 1
+1 28830 1
+28830 28830 1
+1 28831 1
+28831 28831 1
+1 28832 1
+28832 28832 1
+1 28833 1
+28833 28833 1
+1 28834 1
+28834 28834 1
+1 28835 1
+28835 28835 1
+1 28836 1
+28836 28836 1
+1 28837 1
+28837 28837 1
+1 28838 1
+28838 28838 1
+1 28839 1
+28839 28839 1
+1 28840 1
+28840 28840 1
+1 28841 1
+28841 28841 1
+1 28842 1
+28842 28842 1
+1 28843 1
+28843 28843 1
+1 28844 1
+28844 28844 1
+1 28845 1
+28845 28845 1
+1 28846 1
+28846 28846 1
+1 28847 1
+28847 28847 1
+1 28848 1
+28848 28848 1
+1 28849 1
+28849 28849 1
+1 28850 1
+28850 28850 1
+1 28851 1
+28851 28851 1
+1 28852 1
+28852 28852 1
+1 28853 1
+28853 28853 1
+1 28854 1
+28854 28854 1
+1 28855 1
+28855 28855 1
+1 28856 1
+28856 28856 1
+1 28857 1
+28857 28857 1
+1 28858 1
+28858 28858 1
+1 28859 1
+28859 28859 1
+1 28860 1
+28860 28860 1
+1 28861 1
+28861 28861 1
+1 28862 1
+28862 28862 1
+1 28863 1
+28863 28863 1
+1 28864 1
+28864 28864 1
+1 28865 1
+28865 28865 1
+1 28866 1
+28866 28866 1
+1 28867 1
+28867 28867 1
+1 28868 1
+28868 28868 1
+1 28869 1
+28869 28869 1
+1 28870 1
+28870 28870 1
+1 28871 1
+28871 28871 1
+1 28872 1
+28872 28872 1
+1 28873 1
+28873 28873 1
+1 28874 1
+28874 28874 1
+1 28875 1
+28875 28875 1
+1 28876 1
+28876 28876 1
+1 28877 1
+28877 28877 1
+1 28878 1
+28878 28878 1
+1 28879 1
+28879 28879 1
+1 28880 1
+28880 28880 1
+1 28881 1
+28881 28881 1
+1 28882 1
+28882 28882 1
+1 28883 1
+28883 28883 1
+1 28884 1
+28884 28884 1
+1 28885 1
+28885 28885 1
+1 28886 1
+28886 28886 1
+1 28887 1
+28887 28887 1
+1 28888 1
+28888 28888 1
+1 28889 1
+28889 28889 1
+1 28890 1
+28890 28890 1
+1 28891 1
+28891 28891 1
+1 28892 1
+28892 28892 1
+1 28893 1
+28893 28893 1
+1 28894 1
+28894 28894 1
+1 28895 1
+28895 28895 1
+1 28896 1
+28896 28896 1
+1 28897 1
+28897 28897 1
+1 28898 1
+28898 28898 1
+1 28899 1
+28899 28899 1
+1 28900 1
+28900 28900 1
+1 28901 1
+28901 28901 1
+1 28902 1
+28902 28902 1
+1 28903 1
+28903 28903 1
+1 28904 1
+28904 28904 1
+1 28905 1
+28905 28905 1
+1 28906 1
+28906 28906 1
+1 28907 1
+28907 28907 1
+1 28908 1
+28908 28908 1
+1 28909 1
+28909 28909 1
+1 28910 1
+28910 28910 1
+1 28911 1
+28911 28911 1
+1 28912 1
+28912 28912 1
+1 28913 1
+28913 28913 1
+1 28914 1
+28914 28914 1
+1 28915 1
+28915 28915 1
+1 28916 1
+28916 28916 1
+1 28917 1
+28917 28917 1
+1 28918 1
+28918 28918 1
+1 28919 1
+28919 28919 1
+1 28920 1
+28920 28920 1
+1 28921 1
+28921 28921 1
+1 28922 1
+28922 28922 1
+1 28923 1
+28923 28923 1
+1 28924 1
+28924 28924 1
+1 28925 1
+28925 28925 1
+1 28926 1
+28926 28926 1
+1 28927 1
+28927 28927 1
+1 28928 1
+28928 28928 1
+1 28929 1
+28929 28929 1
+1 28930 1
+28930 28930 1
+1 28931 1
+28931 28931 1
+1 28932 1
+28932 28932 1
+1 28933 1
+28933 28933 1
+1 28934 1
+28934 28934 1
+1 28935 1
+28935 28935 1
+1 28936 1
+28936 28936 1
+1 28937 1
+28937 28937 1
+1 28938 1
+28938 28938 1
+1 28939 1
+28939 28939 1
+1 28940 1
+28940 28940 1
+1 28941 1
+28941 28941 1
+1 28942 1
+28942 28942 1
+1 28943 1
+28943 28943 1
+1 28944 1
+28944 28944 1
+1 28945 1
+28945 28945 1
+1 28946 1
+28946 28946 1
+1 28947 1
+28947 28947 1
+1 28948 1
+28948 28948 1
+1 28949 1
+28949 28949 1
+1 28950 1
+28950 28950 1
+1 28951 1
+28951 28951 1
+1 28952 1
+28952 28952 1
+1 28953 1
+28953 28953 1
+1 28954 1
+28954 28954 1
+1 28955 1
+28955 28955 1
+1 28956 1
+28956 28956 1
+1 28957 1
+28957 28957 1
+1 28958 1
+28958 28958 1
+1 28959 1
+28959 28959 1
+1 28960 1
+28960 28960 1
+1 28961 1
+28961 28961 1
+1 28962 1
+28962 28962 1
+1 28963 1
+28963 28963 1
+1 28964 1
+28964 28964 1
+1 28965 1
+28965 28965 1
+1 28966 1
+28966 28966 1
+1 28967 1
+28967 28967 1
+1 28968 1
+28968 28968 1
+1 28969 1
+28969 28969 1
+1 28970 1
+28970 28970 1
+1 28971 1
+28971 28971 1
+1 28972 1
+28972 28972 1
+1 28973 1
+28973 28973 1
+1 28974 1
+28974 28974 1
+1 28975 1
+28975 28975 1
+1 28976 1
+28976 28976 1
+1 28977 1
+28977 28977 1
+1 28978 1
+28978 28978 1
+1 28979 1
+28979 28979 1
+1 28980 1
+28980 28980 1
+1 28981 1
+28981 28981 1
+1 28982 1
+28982 28982 1
+1 28983 1
+28983 28983 1
+1 28984 1
+28984 28984 1
+1 28985 1
+28985 28985 1
+1 28986 1
+28986 28986 1
+1 28987 1
+28987 28987 1
+1 28988 1
+28988 28988 1
+1 28989 1
+28989 28989 1
+1 28990 1
+28990 28990 1
+1 28991 1
+28991 28991 1
+1 28992 1
+28992 28992 1
+1 28993 1
+28993 28993 1
+1 28994 1
+28994 28994 1
+1 28995 1
+28995 28995 1
+1 28996 1
+28996 28996 1
+1 28997 1
+28997 28997 1
+1 28998 1
+28998 28998 1
+1 28999 1
+28999 28999 1
+1 29000 1
+29000 29000 1
+1 29001 1
+29001 29001 1
+1 29002 1
+29002 29002 1
+1 29003 1
+29003 29003 1
+1 29004 1
+29004 29004 1
+1 29005 1
+29005 29005 1
+1 29006 1
+29006 29006 1
+1 29007 1
+29007 29007 1
+1 29008 1
+29008 29008 1
+1 29009 1
+29009 29009 1
+1 29010 1
+29010 29010 1
+1 29011 1
+29011 29011 1
+1 29012 1
+29012 29012 1
+1 29013 1
+29013 29013 1
+1 29014 1
+29014 29014 1
+1 29015 1
+29015 29015 1
+1 29016 1
+29016 29016 1
+1 29017 1
+29017 29017 1
+1 29018 1
+29018 29018 1
+1 29019 1
+29019 29019 1
+1 29020 1
+29020 29020 1
+1 29021 1
+29021 29021 1
+1 29022 1
+29022 29022 1
+1 29023 1
+29023 29023 1
+1 29024 1
+29024 29024 1
+1 29025 1
+29025 29025 1
+1 29026 1
+29026 29026 1
+1 29027 1
+29027 29027 1
+1 29028 1
+29028 29028 1
+1 29029 1
+29029 29029 1
+1 29030 1
+29030 29030 1
+1 29031 1
+29031 29031 1
+1 29032 1
+29032 29032 1
+1 29033 1
+29033 29033 1
+1 29034 1
+29034 29034 1
+1 29035 1
+29035 29035 1
+1 29036 1
+29036 29036 1
+1 29037 1
+29037 29037 1
+1 29038 1
+29038 29038 1
+1 29039 1
+29039 29039 1
+1 29040 1
+29040 29040 1
+1 29041 1
+29041 29041 1
+1 29042 1
+29042 29042 1
+1 29043 1
+29043 29043 1
+1 29044 1
+29044 29044 1
+1 29045 1
+29045 29045 1
+1 29046 1
+29046 29046 1
+1 29047 1
+29047 29047 1
+1 29048 1
+29048 29048 1
+1 29049 1
+29049 29049 1
+1 29050 1
+29050 29050 1
+1 29051 1
+29051 29051 1
+1 29052 1
+29052 29052 1
+1 29053 1
+29053 29053 1
+1 29054 1
+29054 29054 1
+1 29055 1
+29055 29055 1
+1 29056 1
+29056 29056 1
+1 29057 1
+29057 29057 1
+1 29058 1
+29058 29058 1
+1 29059 1
+29059 29059 1
+1 29060 1
+29060 29060 1
+1 29061 1
+29061 29061 1
+1 29062 1
+29062 29062 1
+1 29063 1
+29063 29063 1
+1 29064 1
+29064 29064 1
+1 29065 1
+29065 29065 1
+1 29066 1
+29066 29066 1
+1 29067 1
+29067 29067 1
+1 29068 1
+29068 29068 1
+1 29069 1
+29069 29069 1
+1 29070 1
+29070 29070 1
+1 29071 1
+29071 29071 1
+1 29072 1
+29072 29072 1
+1 29073 1
+29073 29073 1
+1 29074 1
+29074 29074 1
+1 29075 1
+29075 29075 1
+1 29076 1
+29076 29076 1
+1 29077 1
+29077 29077 1
+1 29078 1
+29078 29078 1
+1 29079 1
+29079 29079 1
+1 29080 1
+29080 29080 1
+1 29081 1
+29081 29081 1
+1 29082 1
+29082 29082 1
+1 29083 1
+29083 29083 1
+1 29084 1
+29084 29084 1
+1 29085 1
+29085 29085 1
+1 29086 1
+29086 29086 1
+1 29087 1
+29087 29087 1
+1 29088 1
+29088 29088 1
+1 29089 1
+29089 29089 1
+1 29090 1
+29090 29090 1
+1 29091 1
+29091 29091 1
+1 29092 1
+29092 29092 1
+1 29093 1
+29093 29093 1
+1 29094 1
+29094 29094 1
+1 29095 1
+29095 29095 1
+1 29096 1
+29096 29096 1
+1 29097 1
+29097 29097 1
+1 29098 1
+29098 29098 1
+1 29099 1
+29099 29099 1
+1 29100 1
+29100 29100 1
+1 29101 1
+29101 29101 1
+1 29102 1
+29102 29102 1
+1 29103 1
+29103 29103 1
+1 29104 1
+29104 29104 1
+1 29105 1
+29105 29105 1
+1 29106 1
+29106 29106 1
+1 29107 1
+29107 29107 1
+1 29108 1
+29108 29108 1
+1 29109 1
+29109 29109 1
+1 29110 1
+29110 29110 1
+1 29111 1
+29111 29111 1
+1 29112 1
+29112 29112 1
+1 29113 1
+29113 29113 1
+1 29114 1
+29114 29114 1
+1 29115 1
+29115 29115 1
+1 29116 1
+29116 29116 1
+1 29117 1
+29117 29117 1
+1 29118 1
+29118 29118 1
+1 29119 1
+29119 29119 1
+1 29120 1
+29120 29120 1
+1 29121 1
+29121 29121 1
+1 29122 1
+29122 29122 1
+1 29123 1
+29123 29123 1
+1 29124 1
+29124 29124 1
+1 29125 1
+29125 29125 1
+1 29126 1
+29126 29126 1
+1 29127 1
+29127 29127 1
+1 29128 1
+29128 29128 1
+1 29129 1
+29129 29129 1
+1 29130 1
+29130 29130 1
+1 29131 1
+29131 29131 1
+1 29132 1
+29132 29132 1
+1 29133 1
+29133 29133 1
+1 29134 1
+29134 29134 1
+1 29135 1
+29135 29135 1
+1 29136 1
+29136 29136 1
+1 29137 1
+29137 29137 1
+1 29138 1
+29138 29138 1
+1 29139 1
+29139 29139 1
+1 29140 1
+29140 29140 1
+1 29141 1
+29141 29141 1
+1 29142 1
+29142 29142 1
+1 29143 1
+29143 29143 1
+1 29144 1
+29144 29144 1
+1 29145 1
+29145 29145 1
+1 29146 1
+29146 29146 1
+1 29147 1
+29147 29147 1
+1 29148 1
+29148 29148 1
+1 29149 1
+29149 29149 1
+1 29150 1
+29150 29150 1
+1 29151 1
+29151 29151 1
+1 29152 1
+29152 29152 1
+1 29153 1
+29153 29153 1
+1 29154 1
+29154 29154 1
+1 29155 1
+29155 29155 1
+1 29156 1
+29156 29156 1
+1 29157 1
+29157 29157 1
+1 29158 1
+29158 29158 1
+1 29159 1
+29159 29159 1
+1 29160 1
+29160 29160 1
+1 29161 1
+29161 29161 1
+1 29162 1
+29162 29162 1
+1 29163 1
+29163 29163 1
+1 29164 1
+29164 29164 1
+1 29165 1
+29165 29165 1
+1 29166 1
+29166 29166 1
+1 29167 1
+29167 29167 1
+1 29168 1
+29168 29168 1
+1 29169 1
+29169 29169 1
+1 29170 1
+29170 29170 1
+1 29171 1
+29171 29171 1
+1 29172 1
+29172 29172 1
+1 29173 1
+29173 29173 1
+1 29174 1
+29174 29174 1
+1 29175 1
+29175 29175 1
+1 29176 1
+29176 29176 1
+1 29177 1
+29177 29177 1
+1 29178 1
+29178 29178 1
+1 29179 1
+29179 29179 1
+1 29180 1
+29180 29180 1
+1 29181 1
+29181 29181 1
+1 29182 1
+29182 29182 1
+1 29183 1
+29183 29183 1
+1 29184 1
+29184 29184 1
+1 29185 1
+29185 29185 1
+1 29186 1
+29186 29186 1
+1 29187 1
+29187 29187 1
+1 29188 1
+29188 29188 1
+1 29189 1
+29189 29189 1
+1 29190 1
+29190 29190 1
+1 29191 1
+29191 29191 1
+1 29192 1
+29192 29192 1
+1 29193 1
+29193 29193 1
+1 29194 1
+29194 29194 1
+1 29195 1
+29195 29195 1
+1 29196 1
+29196 29196 1
+1 29197 1
+29197 29197 1
+1 29198 1
+29198 29198 1
+1 29199 1
+29199 29199 1
+1 29200 1
+29200 29200 1
+1 29201 1
+29201 29201 1
+1 29202 1
+29202 29202 1
+1 29203 1
+29203 29203 1
+1 29204 1
+29204 29204 1
+1 29205 1
+29205 29205 1
+1 29206 1
+29206 29206 1
+1 29207 1
+29207 29207 1
+1 29208 1
+29208 29208 1
+1 29209 1
+29209 29209 1
+1 29210 1
+29210 29210 1
+1 29211 1
+29211 29211 1
+1 29212 1
+29212 29212 1
+1 29213 1
+29213 29213 1
+1 29214 1
+29214 29214 1
+1 29215 1
+29215 29215 1
+1 29216 1
+29216 29216 1
+1 29217 1
+29217 29217 1
+1 29218 1
+29218 29218 1
+1 29219 1
+29219 29219 1
+1 29220 1
+29220 29220 1
+1 29221 1
+29221 29221 1
+1 29222 1
+29222 29222 1
+1 29223 1
+29223 29223 1
+1 29224 1
+29224 29224 1
+1 29225 1
+29225 29225 1
+1 29226 1
+29226 29226 1
+1 29227 1
+29227 29227 1
+1 29228 1
+29228 29228 1
+1 29229 1
+29229 29229 1
+1 29230 1
+29230 29230 1
+1 29231 1
+29231 29231 1
+1 29232 1
+29232 29232 1
+1 29233 1
+29233 29233 1
+1 29234 1
+29234 29234 1
+1 29235 1
+29235 29235 1
+1 29236 1
+29236 29236 1
+1 29237 1
+29237 29237 1
+1 29238 1
+29238 29238 1
+1 29239 1
+29239 29239 1
+1 29240 1
+29240 29240 1
+1 29241 1
+29241 29241 1
+1 29242 1
+29242 29242 1
+1 29243 1
+29243 29243 1
+1 29244 1
+29244 29244 1
+1 29245 1
+29245 29245 1
+1 29246 1
+29246 29246 1
+1 29247 1
+29247 29247 1
+1 29248 1
+29248 29248 1
+1 29249 1
+29249 29249 1
+1 29250 1
+29250 29250 1
+1 29251 1
+29251 29251 1
+1 29252 1
+29252 29252 1
+1 29253 1
+29253 29253 1
+1 29254 1
+29254 29254 1
+1 29255 1
+29255 29255 1
+1 29256 1
+29256 29256 1
+1 29257 1
+29257 29257 1
+1 29258 1
+29258 29258 1
+1 29259 1
+29259 29259 1
+1 29260 1
+29260 29260 1
+1 29261 1
+29261 29261 1
+1 29262 1
+29262 29262 1
+1 29263 1
+29263 29263 1
+1 29264 1
+29264 29264 1
+1 29265 1
+29265 29265 1
+1 29266 1
+29266 29266 1
+1 29267 1
+29267 29267 1
+1 29268 1
+29268 29268 1
+1 29269 1
+29269 29269 1
+1 29270 1
+29270 29270 1
+1 29271 1
+29271 29271 1
+1 29272 1
+29272 29272 1
+1 29273 1
+29273 29273 1
+1 29274 1
+29274 29274 1
+1 29275 1
+29275 29275 1
+1 29276 1
+29276 29276 1
+1 29277 1
+29277 29277 1
+1 29278 1
+29278 29278 1
+1 29279 1
+29279 29279 1
+1 29280 1
+29280 29280 1
+1 29281 1
+29281 29281 1
+1 29282 1
+29282 29282 1
+1 29283 1
+29283 29283 1
+1 29284 1
+29284 29284 1
+1 29285 1
+29285 29285 1
+1 29286 1
+29286 29286 1
+1 29287 1
+29287 29287 1
+1 29288 1
+29288 29288 1
+1 29289 1
+29289 29289 1
+1 29290 1
+29290 29290 1
+1 29291 1
+29291 29291 1
+1 29292 1
+29292 29292 1
+1 29293 1
+29293 29293 1
+1 29294 1
+29294 29294 1
+1 29295 1
+29295 29295 1
+1 29296 1
+29296 29296 1
+1 29297 1
+29297 29297 1
+1 29298 1
+29298 29298 1
+1 29299 1
+29299 29299 1
+1 29300 1
+29300 29300 1
+1 29301 1
+29301 29301 1
+1 29302 1
+29302 29302 1
+1 29303 1
+29303 29303 1
+1 29304 1
+29304 29304 1
+1 29305 1
+29305 29305 1
+1 29306 1
+29306 29306 1
+1 29307 1
+29307 29307 1
+1 29308 1
+29308 29308 1
+1 29309 1
+29309 29309 1
+1 29310 1
+29310 29310 1
+1 29311 1
+29311 29311 1
+1 29312 1
+29312 29312 1
+1 29313 1
+29313 29313 1
+1 29314 1
+29314 29314 1
+1 29315 1
+29315 29315 1
+1 29316 1
+29316 29316 1
+1 29317 1
+29317 29317 1
+1 29318 1
+29318 29318 1
+1 29319 1
+29319 29319 1
+1 29320 1
+29320 29320 1
+1 29321 1
+29321 29321 1
+1 29322 1
+29322 29322 1
+1 29323 1
+29323 29323 1
+1 29324 1
+29324 29324 1
+1 29325 1
+29325 29325 1
+1 29326 1
+29326 29326 1
+1 29327 1
+29327 29327 1
+1 29328 1
+29328 29328 1
+1 29329 1
+29329 29329 1
+1 29330 1
+29330 29330 1
+1 29331 1
+29331 29331 1
+1 29332 1
+29332 29332 1
+1 29333 1
+29333 29333 1
+1 29334 1
+29334 29334 1
+1 29335 1
+29335 29335 1
+1 29336 1
+29336 29336 1
+1 29337 1
+29337 29337 1
+1 29338 1
+29338 29338 1
+1 29339 1
+29339 29339 1
+1 29340 1
+29340 29340 1
+1 29341 1
+29341 29341 1
+1 29342 1
+29342 29342 1
+1 29343 1
+29343 29343 1
+1 29344 1
+29344 29344 1
+1 29345 1
+29345 29345 1
+1 29346 1
+29346 29346 1
+1 29347 1
+29347 29347 1
+1 29348 1
+29348 29348 1
+1 29349 1
+29349 29349 1
+1 29350 1
+29350 29350 1
+1 29351 1
+29351 29351 1
+1 29352 1
+29352 29352 1
+1 29353 1
+29353 29353 1
+1 29354 1
+29354 29354 1
+1 29355 1
+29355 29355 1
+1 29356 1
+29356 29356 1
+1 29357 1
+29357 29357 1
+1 29358 1
+29358 29358 1
+1 29359 1
+29359 29359 1
+1 29360 1
+29360 29360 1
+1 29361 1
+29361 29361 1
+1 29362 1
+29362 29362 1
+1 29363 1
+29363 29363 1
+1 29364 1
+29364 29364 1
+1 29365 1
+29365 29365 1
+1 29366 1
+29366 29366 1
+1 29367 1
+29367 29367 1
+1 29368 1
+29368 29368 1
+1 29369 1
+29369 29369 1
+1 29370 1
+29370 29370 1
+1 29371 1
+29371 29371 1
+1 29372 1
+29372 29372 1
+1 29373 1
+29373 29373 1
+1 29374 1
+29374 29374 1
+1 29375 1
+29375 29375 1
+1 29376 1
+29376 29376 1
+1 29377 1
+29377 29377 1
+1 29378 1
+29378 29378 1
+1 29379 1
+29379 29379 1
+1 29380 1
+29380 29380 1
+1 29381 1
+29381 29381 1
+1 29382 1
+29382 29382 1
+1 29383 1
+29383 29383 1
+1 29384 1
+29384 29384 1
+1 29385 1
+29385 29385 1
+1 29386 1
+29386 29386 1
+1 29387 1
+29387 29387 1
+1 29388 1
+29388 29388 1
+1 29389 1
+29389 29389 1
+1 29390 1
+29390 29390 1
+1 29391 1
+29391 29391 1
+1 29392 1
+29392 29392 1
+1 29393 1
+29393 29393 1
+1 29394 1
+29394 29394 1
+1 29395 1
+29395 29395 1
+1 29396 1
+29396 29396 1
+1 29397 1
+29397 29397 1
+1 29398 1
+29398 29398 1
+1 29399 1
+29399 29399 1
+1 29400 1
+29400 29400 1
+1 29401 1
+29401 29401 1
+1 29402 1
+29402 29402 1
+1 29403 1
+29403 29403 1
+1 29404 1
+29404 29404 1
+1 29405 1
+29405 29405 1
+1 29406 1
+29406 29406 1
+1 29407 1
+29407 29407 1
+1 29408 1
+29408 29408 1
+1 29409 1
+29409 29409 1
+1 29410 1
+29410 29410 1
+1 29411 1
+29411 29411 1
+1 29412 1
+29412 29412 1
+1 29413 1
+29413 29413 1
+1 29414 1
+29414 29414 1
+1 29415 1
+29415 29415 1
+1 29416 1
+29416 29416 1
+1 29417 1
+29417 29417 1
+1 29418 1
+29418 29418 1
+1 29419 1
+29419 29419 1
+1 29420 1
+29420 29420 1
+1 29421 1
+29421 29421 1
+1 29422 1
+29422 29422 1
+1 29423 1
+29423 29423 1
+1 29424 1
+29424 29424 1
+1 29425 1
+29425 29425 1
+1 29426 1
+29426 29426 1
+1 29427 1
+29427 29427 1
+1 29428 1
+29428 29428 1
+1 29429 1
+29429 29429 1
+1 29430 1
+29430 29430 1
+1 29431 1
+29431 29431 1
+1 29432 1
+29432 29432 1
+1 29433 1
+29433 29433 1
+1 29434 1
+29434 29434 1
+1 29435 1
+29435 29435 1
+1 29436 1
+29436 29436 1
+1 29437 1
+29437 29437 1
+1 29438 1
+29438 29438 1
+1 29439 1
+29439 29439 1
+1 29440 1
+29440 29440 1
+1 29441 1
+29441 29441 1
+1 29442 1
+29442 29442 1
+1 29443 1
+29443 29443 1
+1 29444 1
+29444 29444 1
+1 29445 1
+29445 29445 1
+1 29446 1
+29446 29446 1
+1 29447 1
+29447 29447 1
+1 29448 1
+29448 29448 1
+1 29449 1
+29449 29449 1
+1 29450 1
+29450 29450 1
+1 29451 1
+29451 29451 1
+1 29452 1
+29452 29452 1
+1 29453 1
+29453 29453 1
+1 29454 1
+29454 29454 1
+1 29455 1
+29455 29455 1
+1 29456 1
+29456 29456 1
+1 29457 1
+29457 29457 1
+1 29458 1
+29458 29458 1
+1 29459 1
+29459 29459 1
+1 29460 1
+29460 29460 1
+1 29461 1
+29461 29461 1
+1 29462 1
+29462 29462 1
+1 29463 1
+29463 29463 1
+1 29464 1
+29464 29464 1
+1 29465 1
+29465 29465 1
+1 29466 1
+29466 29466 1
+1 29467 1
+29467 29467 1
+1 29468 1
+29468 29468 1
+1 29469 1
+29469 29469 1
+1 29470 1
+29470 29470 1
+1 29471 1
+29471 29471 1
+1 29472 1
+29472 29472 1
+1 29473 1
+29473 29473 1
+1 29474 1
+29474 29474 1
+1 29475 1
+29475 29475 1
+1 29476 1
+29476 29476 1
+1 29477 1
+29477 29477 1
+1 29478 1
+29478 29478 1
+1 29479 1
+29479 29479 1
+1 29480 1
+29480 29480 1
+1 29481 1
+29481 29481 1
+1 29482 1
+29482 29482 1
+1 29483 1
+29483 29483 1
+1 29484 1
+29484 29484 1
+1 29485 1
+29485 29485 1
+1 29486 1
+29486 29486 1
+1 29487 1
+29487 29487 1
+1 29488 1
+29488 29488 1
+1 29489 1
+29489 29489 1
+1 29490 1
+29490 29490 1
+1 29491 1
+29491 29491 1
+1 29492 1
+29492 29492 1
+1 29493 1
+29493 29493 1
+1 29494 1
+29494 29494 1
+1 29495 1
+29495 29495 1
+1 29496 1
+29496 29496 1
+1 29497 1
+29497 29497 1
+1 29498 1
+29498 29498 1
+1 29499 1
+29499 29499 1
+1 29500 1
+29500 29500 1
+1 29501 1
+29501 29501 1
+1 29502 1
+29502 29502 1
+1 29503 1
+29503 29503 1
+1 29504 1
+29504 29504 1
+1 29505 1
+29505 29505 1
+1 29506 1
+29506 29506 1
+1 29507 1
+29507 29507 1
+1 29508 1
+29508 29508 1
+1 29509 1
+29509 29509 1
+1 29510 1
+29510 29510 1
+1 29511 1
+29511 29511 1
+1 29512 1
+29512 29512 1
+1 29513 1
+29513 29513 1
+1 29514 1
+29514 29514 1
+1 29515 1
+29515 29515 1
+1 29516 1
+29516 29516 1
+1 29517 1
+29517 29517 1
+1 29518 1
+29518 29518 1
+1 29519 1
+29519 29519 1
+1 29520 1
+29520 29520 1
+1 29521 1
+29521 29521 1
+1 29522 1
+29522 29522 1
+1 29523 1
+29523 29523 1
+1 29524 1
+29524 29524 1
+1 29525 1
+29525 29525 1
+1 29526 1
+29526 29526 1
+1 29527 1
+29527 29527 1
+1 29528 1
+29528 29528 1
+1 29529 1
+29529 29529 1
+1 29530 1
+29530 29530 1
+1 29531 1
+29531 29531 1
+1 29532 1
+29532 29532 1
+1 29533 1
+29533 29533 1
+1 29534 1
+29534 29534 1
+1 29535 1
+29535 29535 1
+1 29536 1
+29536 29536 1
+1 29537 1
+29537 29537 1
+1 29538 1
+29538 29538 1
+1 29539 1
+29539 29539 1
+1 29540 1
+29540 29540 1
+1 29541 1
+29541 29541 1
+1 29542 1
+29542 29542 1
+1 29543 1
+29543 29543 1
+1 29544 1
+29544 29544 1
+1 29545 1
+29545 29545 1
+1 29546 1
+29546 29546 1
+1 29547 1
+29547 29547 1
+1 29548 1
+29548 29548 1
+1 29549 1
+29549 29549 1
+1 29550 1
+29550 29550 1
+1 29551 1
+29551 29551 1
+1 29552 1
+29552 29552 1
+1 29553 1
+29553 29553 1
+1 29554 1
+29554 29554 1
+1 29555 1
+29555 29555 1
+1 29556 1
+29556 29556 1
+1 29557 1
+29557 29557 1
+1 29558 1
+29558 29558 1
+1 29559 1
+29559 29559 1
+1 29560 1
+29560 29560 1
+1 29561 1
+29561 29561 1
+1 29562 1
+29562 29562 1
+1 29563 1
+29563 29563 1
+1 29564 1
+29564 29564 1
+1 29565 1
+29565 29565 1
+1 29566 1
+29566 29566 1
+1 29567 1
+29567 29567 1
+1 29568 1
+29568 29568 1
+1 29569 1
+29569 29569 1
+1 29570 1
+29570 29570 1
+1 29571 1
+29571 29571 1
+1 29572 1
+29572 29572 1
+1 29573 1
+29573 29573 1
+1 29574 1
+29574 29574 1
+1 29575 1
+29575 29575 1
+1 29576 1
+29576 29576 1
+1 29577 1
+29577 29577 1
+1 29578 1
+29578 29578 1
+1 29579 1
+29579 29579 1
+1 29580 1
+29580 29580 1
+1 29581 1
+29581 29581 1
+1 29582 1
+29582 29582 1
+1 29583 1
+29583 29583 1
+1 29584 1
+29584 29584 1
+1 29585 1
+29585 29585 1
+1 29586 1
+29586 29586 1
+1 29587 1
+29587 29587 1
+1 29588 1
+29588 29588 1
+1 29589 1
+29589 29589 1
+1 29590 1
+29590 29590 1
+1 29591 1
+29591 29591 1
+1 29592 1
+29592 29592 1
+1 29593 1
+29593 29593 1
+1 29594 1
+29594 29594 1
+1 29595 1
+29595 29595 1
+1 29596 1
+29596 29596 1
+1 29597 1
+29597 29597 1
+1 29598 1
+29598 29598 1
+1 29599 1
+29599 29599 1
+1 29600 1
+29600 29600 1
+1 29601 1
+29601 29601 1
+1 29602 1
+29602 29602 1
+1 29603 1
+29603 29603 1
+1 29604 1
+29604 29604 1
+1 29605 1
+29605 29605 1
+1 29606 1
+29606 29606 1
+1 29607 1
+29607 29607 1
+1 29608 1
+29608 29608 1
+1 29609 1
+29609 29609 1
+1 29610 1
+29610 29610 1
+1 29611 1
+29611 29611 1
+1 29612 1
+29612 29612 1
+1 29613 1
+29613 29613 1
+1 29614 1
+29614 29614 1
+1 29615 1
+29615 29615 1
+1 29616 1
+29616 29616 1
+1 29617 1
+29617 29617 1
+1 29618 1
+29618 29618 1
+1 29619 1
+29619 29619 1
+1 29620 1
+29620 29620 1
+1 29621 1
+29621 29621 1
+1 29622 1
+29622 29622 1
+1 29623 1
+29623 29623 1
+1 29624 1
+29624 29624 1
+1 29625 1
+29625 29625 1
+1 29626 1
+29626 29626 1
+1 29627 1
+29627 29627 1
+1 29628 1
+29628 29628 1
+1 29629 1
+29629 29629 1
+1 29630 1
+29630 29630 1
+1 29631 1
+29631 29631 1
+1 29632 1
+29632 29632 1
+1 29633 1
+29633 29633 1
+1 29634 1
+29634 29634 1
+1 29635 1
+29635 29635 1
+1 29636 1
+29636 29636 1
+1 29637 1
+29637 29637 1
+1 29638 1
+29638 29638 1
+1 29639 1
+29639 29639 1
+1 29640 1
+29640 29640 1
+1 29641 1
+29641 29641 1
+1 29642 1
+29642 29642 1
+1 29643 1
+29643 29643 1
+1 29644 1
+29644 29644 1
+1 29645 1
+29645 29645 1
+1 29646 1
+29646 29646 1
+1 29647 1
+29647 29647 1
+1 29648 1
+29648 29648 1
+1 29649 1
+29649 29649 1
+1 29650 1
+29650 29650 1
+1 29651 1
+29651 29651 1
+1 29652 1
+29652 29652 1
+1 29653 1
+29653 29653 1
+1 29654 1
+29654 29654 1
+1 29655 1
+29655 29655 1
+1 29656 1
+29656 29656 1
+1 29657 1
+29657 29657 1
+1 29658 1
+29658 29658 1
+1 29659 1
+29659 29659 1
+1 29660 1
+29660 29660 1
+1 29661 1
+29661 29661 1
+1 29662 1
+29662 29662 1
+1 29663 1
+29663 29663 1
+1 29664 1
+29664 29664 1
+1 29665 1
+29665 29665 1
+1 29666 1
+29666 29666 1
+1 29667 1
+29667 29667 1
+1 29668 1
+29668 29668 1
+1 29669 1
+29669 29669 1
+1 29670 1
+29670 29670 1
+1 29671 1
+29671 29671 1
+1 29672 1
+29672 29672 1
+1 29673 1
+29673 29673 1
+1 29674 1
+29674 29674 1
+1 29675 1
+29675 29675 1
+1 29676 1
+29676 29676 1
+1 29677 1
+29677 29677 1
+1 29678 1
+29678 29678 1
+1 29679 1
+29679 29679 1
+1 29680 1
+29680 29680 1
+1 29681 1
+29681 29681 1
+1 29682 1
+29682 29682 1
+1 29683 1
+29683 29683 1
+1 29684 1
+29684 29684 1
+1 29685 1
+29685 29685 1
+1 29686 1
+29686 29686 1
+1 29687 1
+29687 29687 1
+1 29688 1
+29688 29688 1
+1 29689 1
+29689 29689 1
+1 29690 1
+29690 29690 1
+1 29691 1
+29691 29691 1
+1 29692 1
+29692 29692 1
+1 29693 1
+29693 29693 1
+1 29694 1
+29694 29694 1
+1 29695 1
+29695 29695 1
+1 29696 1
+29696 29696 1
+1 29697 1
+29697 29697 1
+1 29698 1
+29698 29698 1
+1 29699 1
+29699 29699 1
+1 29700 1
+29700 29700 1
+1 29701 1
+29701 29701 1
+1 29702 1
+29702 29702 1
+1 29703 1
+29703 29703 1
+1 29704 1
+29704 29704 1
+1 29705 1
+29705 29705 1
+1 29706 1
+29706 29706 1
+1 29707 1
+29707 29707 1
+1 29708 1
+29708 29708 1
+1 29709 1
+29709 29709 1
+1 29710 1
+29710 29710 1
+1 29711 1
+29711 29711 1
+1 29712 1
+29712 29712 1
+1 29713 1
+29713 29713 1
+1 29714 1
+29714 29714 1
+1 29715 1
+29715 29715 1
+1 29716 1
+29716 29716 1
+1 29717 1
+29717 29717 1
+1 29718 1
+29718 29718 1
+1 29719 1
+29719 29719 1
+1 29720 1
+29720 29720 1
+1 29721 1
+29721 29721 1
+1 29722 1
+29722 29722 1
+1 29723 1
+29723 29723 1
+1 29724 1
+29724 29724 1
+1 29725 1
+29725 29725 1
+1 29726 1
+29726 29726 1
+1 29727 1
+29727 29727 1
+1 29728 1
+29728 29728 1
+1 29729 1
+29729 29729 1
+1 29730 1
+29730 29730 1
+1 29731 1
+29731 29731 1
+1 29732 1
+29732 29732 1
+1 29733 1
+29733 29733 1
+1 29734 1
+29734 29734 1
+1 29735 1
+29735 29735 1
+1 29736 1
+29736 29736 1
+1 29737 1
+29737 29737 1
+1 29738 1
+29738 29738 1
+1 29739 1
+29739 29739 1
+1 29740 1
+29740 29740 1
+1 29741 1
+29741 29741 1
+1 29742 1
+29742 29742 1
+1 29743 1
+29743 29743 1
+1 29744 1
+29744 29744 1
+1 29745 1
+29745 29745 1
+1 29746 1
+29746 29746 1
+1 29747 1
+29747 29747 1
+1 29748 1
+29748 29748 1
+1 29749 1
+29749 29749 1
+1 29750 1
+29750 29750 1
+1 29751 1
+29751 29751 1
+1 29752 1
+29752 29752 1
+1 29753 1
+29753 29753 1
+1 29754 1
+29754 29754 1
+1 29755 1
+29755 29755 1
+1 29756 1
+29756 29756 1
+1 29757 1
+29757 29757 1
+1 29758 1
+29758 29758 1
+1 29759 1
+29759 29759 1
+1 29760 1
+29760 29760 1
+1 29761 1
+29761 29761 1
+1 29762 1
+29762 29762 1
+1 29763 1
+29763 29763 1
+1 29764 1
+29764 29764 1
+1 29765 1
+29765 29765 1
+1 29766 1
+29766 29766 1
+1 29767 1
+29767 29767 1
+1 29768 1
+29768 29768 1
+1 29769 1
+29769 29769 1
+1 29770 1
+29770 29770 1
+1 29771 1
+29771 29771 1
+1 29772 1
+29772 29772 1
+1 29773 1
+29773 29773 1
+1 29774 1
+29774 29774 1
+1 29775 1
+29775 29775 1
+1 29776 1
+29776 29776 1
+1 29777 1
+29777 29777 1
+1 29778 1
+29778 29778 1
+1 29779 1
+29779 29779 1
+1 29780 1
+29780 29780 1
+1 29781 1
+29781 29781 1
+1 29782 1
+29782 29782 1
+1 29783 1
+29783 29783 1
+1 29784 1
+29784 29784 1
+1 29785 1
+29785 29785 1
+1 29786 1
+29786 29786 1
+1 29787 1
+29787 29787 1
+1 29788 1
+29788 29788 1
+1 29789 1
+29789 29789 1
+1 29790 1
+29790 29790 1
+1 29791 1
+29791 29791 1
+1 29792 1
+29792 29792 1
+1 29793 1
+29793 29793 1
+1 29794 1
+29794 29794 1
+1 29795 1
+29795 29795 1
+1 29796 1
+29796 29796 1
+1 29797 1
+29797 29797 1
+1 29798 1
+29798 29798 1
+1 29799 1
+29799 29799 1
+1 29800 1
+29800 29800 1
+1 29801 1
+29801 29801 1
+1 29802 1
+29802 29802 1
+1 29803 1
+29803 29803 1
+1 29804 1
+29804 29804 1
+1 29805 1
+29805 29805 1
+1 29806 1
+29806 29806 1
+1 29807 1
+29807 29807 1
+1 29808 1
+29808 29808 1
+1 29809 1
+29809 29809 1
+1 29810 1
+29810 29810 1
+1 29811 1
+29811 29811 1
+1 29812 1
+29812 29812 1
+1 29813 1
+29813 29813 1
+1 29814 1
+29814 29814 1
+1 29815 1
+29815 29815 1
+1 29816 1
+29816 29816 1
+1 29817 1
+29817 29817 1
+1 29818 1
+29818 29818 1
+1 29819 1
+29819 29819 1
+1 29820 1
+29820 29820 1
+1 29821 1
+29821 29821 1
+1 29822 1
+29822 29822 1
+1 29823 1
+29823 29823 1
+1 29824 1
+29824 29824 1
+1 29825 1
+29825 29825 1
+1 29826 1
+29826 29826 1
+1 29827 1
+29827 29827 1
+1 29828 1
+29828 29828 1
+1 29829 1
+29829 29829 1
+1 29830 1
+29830 29830 1
+1 29831 1
+29831 29831 1
+1 29832 1
+29832 29832 1
+1 29833 1
+29833 29833 1
+1 29834 1
+29834 29834 1
+1 29835 1
+29835 29835 1
+1 29836 1
+29836 29836 1
+1 29837 1
+29837 29837 1
+1 29838 1
+29838 29838 1
+1 29839 1
+29839 29839 1
+1 29840 1
+29840 29840 1
+1 29841 1
+29841 29841 1
+1 29842 1
+29842 29842 1
+1 29843 1
+29843 29843 1
+1 29844 1
+29844 29844 1
+1 29845 1
+29845 29845 1
+1 29846 1
+29846 29846 1
+1 29847 1
+29847 29847 1
+1 29848 1
+29848 29848 1
+1 29849 1
+29849 29849 1
+1 29850 1
+29850 29850 1
+1 29851 1
+29851 29851 1
+1 29852 1
+29852 29852 1
+1 29853 1
+29853 29853 1
+1 29854 1
+29854 29854 1
+1 29855 1
+29855 29855 1
+1 29856 1
+29856 29856 1
+1 29857 1
+29857 29857 1
+1 29858 1
+29858 29858 1
+1 29859 1
+29859 29859 1
+1 29860 1
+29860 29860 1
+1 29861 1
+29861 29861 1
+1 29862 1
+29862 29862 1
+1 29863 1
+29863 29863 1
+1 29864 1
+29864 29864 1
+1 29865 1
+29865 29865 1
+1 29866 1
+29866 29866 1
+1 29867 1
+29867 29867 1
+1 29868 1
+29868 29868 1
+1 29869 1
+29869 29869 1
+1 29870 1
+29870 29870 1
+1 29871 1
+29871 29871 1
+1 29872 1
+29872 29872 1
+1 29873 1
+29873 29873 1
+1 29874 1
+29874 29874 1
+1 29875 1
+29875 29875 1
+1 29876 1
+29876 29876 1
+1 29877 1
+29877 29877 1
+1 29878 1
+29878 29878 1
+1 29879 1
+29879 29879 1
+1 29880 1
+29880 29880 1
+1 29881 1
+29881 29881 1
+1 29882 1
+29882 29882 1
+1 29883 1
+29883 29883 1
+1 29884 1
+29884 29884 1
+1 29885 1
+29885 29885 1
+1 29886 1
+29886 29886 1
+1 29887 1
+29887 29887 1
+1 29888 1
+29888 29888 1
+1 29889 1
+29889 29889 1
+1 29890 1
+29890 29890 1
+1 29891 1
+29891 29891 1
+1 29892 1
+29892 29892 1
+1 29893 1
+29893 29893 1
+1 29894 1
+29894 29894 1
+1 29895 1
+29895 29895 1
+1 29896 1
+29896 29896 1
+1 29897 1
+29897 29897 1
+1 29898 1
+29898 29898 1
+1 29899 1
+29899 29899 1
+1 29900 1
+29900 29900 1
+1 29901 1
+29901 29901 1
+1 29902 1
+29902 29902 1
+1 29903 1
+29903 29903 1
+1 29904 1
+29904 29904 1
+1 29905 1
+29905 29905 1
+1 29906 1
+29906 29906 1
+1 29907 1
+29907 29907 1
+1 29908 1
+29908 29908 1
+1 29909 1
+29909 29909 1
+1 29910 1
+29910 29910 1
+1 29911 1
+29911 29911 1
+1 29912 1
+29912 29912 1
+1 29913 1
+29913 29913 1
+1 29914 1
+29914 29914 1
+1 29915 1
+29915 29915 1
+1 29916 1
+29916 29916 1
+1 29917 1
+29917 29917 1
+1 29918 1
+29918 29918 1
+1 29919 1
+29919 29919 1
+1 29920 1
+29920 29920 1
+1 29921 1
+29921 29921 1
+1 29922 1
+29922 29922 1
+1 29923 1
+29923 29923 1
+1 29924 1
+29924 29924 1
+1 29925 1
+29925 29925 1
+1 29926 1
+29926 29926 1
+1 29927 1
+29927 29927 1
+1 29928 1
+29928 29928 1
+1 29929 1
+29929 29929 1
+1 29930 1
+29930 29930 1
+1 29931 1
+29931 29931 1
+1 29932 1
+29932 29932 1
+1 29933 1
+29933 29933 1
+1 29934 1
+29934 29934 1
+1 29935 1
+29935 29935 1
+1 29936 1
+29936 29936 1
+1 29937 1
+29937 29937 1
+1 29938 1
+29938 29938 1
+1 29939 1
+29939 29939 1
+1 29940 1
+29940 29940 1
+1 29941 1
+29941 29941 1
+1 29942 1
+29942 29942 1
+1 29943 1
+29943 29943 1
+1 29944 1
+29944 29944 1
+1 29945 1
+29945 29945 1
+1 29946 1
+29946 29946 1
+1 29947 1
+29947 29947 1
+1 29948 1
+29948 29948 1
+1 29949 1
+29949 29949 1
+1 29950 1
+29950 29950 1
+1 29951 1
+29951 29951 1
+1 29952 1
+29952 29952 1
+1 29953 1
+29953 29953 1
+1 29954 1
+29954 29954 1
+1 29955 1
+29955 29955 1
+1 29956 1
+29956 29956 1
+1 29957 1
+29957 29957 1
+1 29958 1
+29958 29958 1
+1 29959 1
+29959 29959 1
+1 29960 1
+29960 29960 1
+1 29961 1
+29961 29961 1
+1 29962 1
+29962 29962 1
+1 29963 1
+29963 29963 1
+1 29964 1
+29964 29964 1
+1 29965 1
+29965 29965 1
+1 29966 1
+29966 29966 1
+1 29967 1
+29967 29967 1
+1 29968 1
+29968 29968 1
+1 29969 1
+29969 29969 1
+1 29970 1
+29970 29970 1
+1 29971 1
+29971 29971 1
+1 29972 1
+29972 29972 1
+1 29973 1
+29973 29973 1
+1 29974 1
+29974 29974 1
+1 29975 1
+29975 29975 1
+1 29976 1
+29976 29976 1
+1 29977 1
+29977 29977 1
+1 29978 1
+29978 29978 1
+1 29979 1
+29979 29979 1
+1 29980 1
+29980 29980 1
+1 29981 1
+29981 29981 1
+1 29982 1
+29982 29982 1
+1 29983 1
+29983 29983 1
+1 29984 1
+29984 29984 1
+1 29985 1
+29985 29985 1
+1 29986 1
+29986 29986 1
+1 29987 1
+29987 29987 1
+1 29988 1
+29988 29988 1
+1 29989 1
+29989 29989 1
+1 29990 1
+29990 29990 1
+1 29991 1
+29991 29991 1
+1 29992 1
+29992 29992 1
+1 29993 1
+29993 29993 1
+1 29994 1
+29994 29994 1
+1 29995 1
+29995 29995 1
+1 29996 1
+29996 29996 1
+1 29997 1
+29997 29997 1
+1 29998 1
+29998 29998 1
+1 29999 1
+29999 29999 1
+1 30000 1
+30000 30000 1
+1 30001 1
+30001 30001 1
+1 30002 1
+30002 30002 1
+1 30003 1
+30003 30003 1
+1 30004 1
+30004 30004 1
+1 30005 1
+30005 30005 1
+1 30006 1
+30006 30006 1
+1 30007 1
+30007 30007 1
+1 30008 1
+30008 30008 1
+1 30009 1
+30009 30009 1
+1 30010 1
+30010 30010 1
+1 30011 1
+30011 30011 1
+1 30012 1
+30012 30012 1
+1 30013 1
+30013 30013 1
+1 30014 1
+30014 30014 1
+1 30015 1
+30015 30015 1
+1 30016 1
+30016 30016 1
+1 30017 1
+30017 30017 1
+1 30018 1
+30018 30018 1
+1 30019 1
+30019 30019 1
+1 30020 1
+30020 30020 1
+1 30021 1
+30021 30021 1
+1 30022 1
+30022 30022 1
+1 30023 1
+30023 30023 1
+1 30024 1
+30024 30024 1
+1 30025 1
+30025 30025 1
+1 30026 1
+30026 30026 1
+1 30027 1
+30027 30027 1
+1 30028 1
+30028 30028 1
+1 30029 1
+30029 30029 1
+1 30030 1
+30030 30030 1
+1 30031 1
+30031 30031 1
+1 30032 1
+30032 30032 1
+1 30033 1
+30033 30033 1
+1 30034 1
+30034 30034 1
+1 30035 1
+30035 30035 1
+1 30036 1
+30036 30036 1
+1 30037 1
+30037 30037 1
+1 30038 1
+30038 30038 1
+1 30039 1
+30039 30039 1
+1 30040 1
+30040 30040 1
+1 30041 1
+30041 30041 1
+1 30042 1
+30042 30042 1
+1 30043 1
+30043 30043 1
+1 30044 1
+30044 30044 1
+1 30045 1
+30045 30045 1
+1 30046 1
+30046 30046 1
+1 30047 1
+30047 30047 1
+1 30048 1
+30048 30048 1
+1 30049 1
+30049 30049 1
+1 30050 1
+30050 30050 1
+1 30051 1
+30051 30051 1
+1 30052 1
+30052 30052 1
+1 30053 1
+30053 30053 1
+1 30054 1
+30054 30054 1
+1 30055 1
+30055 30055 1
+1 30056 1
+30056 30056 1
+1 30057 1
+30057 30057 1
+1 30058 1
+30058 30058 1
+1 30059 1
+30059 30059 1
+1 30060 1
+30060 30060 1
+1 30061 1
+30061 30061 1
+1 30062 1
+30062 30062 1
+1 30063 1
+30063 30063 1
+1 30064 1
+30064 30064 1
+1 30065 1
+30065 30065 1
+1 30066 1
+30066 30066 1
+1 30067 1
+30067 30067 1
+1 30068 1
+30068 30068 1
+1 30069 1
+30069 30069 1
+1 30070 1
+30070 30070 1
+1 30071 1
+30071 30071 1
+1 30072 1
+30072 30072 1
+1 30073 1
+30073 30073 1
+1 30074 1
+30074 30074 1
+1 30075 1
+30075 30075 1
+1 30076 1
+30076 30076 1
+1 30077 1
+30077 30077 1
+1 30078 1
+30078 30078 1
+1 30079 1
+30079 30079 1
+1 30080 1
+30080 30080 1
+1 30081 1
+30081 30081 1
+1 30082 1
+30082 30082 1
+1 30083 1
+30083 30083 1
+1 30084 1
+30084 30084 1
+1 30085 1
+30085 30085 1
+1 30086 1
+30086 30086 1
+1 30087 1
+30087 30087 1
+1 30088 1
+30088 30088 1
+1 30089 1
+30089 30089 1
+1 30090 1
+30090 30090 1
+1 30091 1
+30091 30091 1
+1 30092 1
+30092 30092 1
+1 30093 1
+30093 30093 1
+1 30094 1
+30094 30094 1
+1 30095 1
+30095 30095 1
+1 30096 1
+30096 30096 1
+1 30097 1
+30097 30097 1
+1 30098 1
+30098 30098 1
+1 30099 1
+30099 30099 1
+1 30100 1
+30100 30100 1
+1 30101 1
+30101 30101 1
+1 30102 1
+30102 30102 1
+1 30103 1
+30103 30103 1
+1 30104 1
+30104 30104 1
+1 30105 1
+30105 30105 1
+1 30106 1
+30106 30106 1
+1 30107 1
+30107 30107 1
+1 30108 1
+30108 30108 1
+1 30109 1
+30109 30109 1
+1 30110 1
+30110 30110 1
+1 30111 1
+30111 30111 1
+1 30112 1
+30112 30112 1
+1 30113 1
+30113 30113 1
+1 30114 1
+30114 30114 1
+1 30115 1
+30115 30115 1
+1 30116 1
+30116 30116 1
+1 30117 1
+30117 30117 1
+1 30118 1
+30118 30118 1
+1 30119 1
+30119 30119 1
+1 30120 1
+30120 30120 1
+1 30121 1
+30121 30121 1
+1 30122 1
+30122 30122 1
+1 30123 1
+30123 30123 1
+1 30124 1
+30124 30124 1
+1 30125 1
+30125 30125 1
+1 30126 1
+30126 30126 1
+1 30127 1
+30127 30127 1
+1 30128 1
+30128 30128 1
+1 30129 1
+30129 30129 1
+1 30130 1
+30130 30130 1
+1 30131 1
+30131 30131 1
+1 30132 1
+30132 30132 1
+1 30133 1
+30133 30133 1
+1 30134 1
+30134 30134 1
+1 30135 1
+30135 30135 1
+1 30136 1
+30136 30136 1
+1 30137 1
+30137 30137 1
+1 30138 1
+30138 30138 1
+1 30139 1
+30139 30139 1
+1 30140 1
+30140 30140 1
+1 30141 1
+30141 30141 1
+1 30142 1
+30142 30142 1
+1 30143 1
+30143 30143 1
+1 30144 1
+30144 30144 1
+1 30145 1
+30145 30145 1
+1 30146 1
+30146 30146 1
+1 30147 1
+30147 30147 1
+1 30148 1
+30148 30148 1
+1 30149 1
+30149 30149 1
+1 30150 1
+30150 30150 1
+1 30151 1
+30151 30151 1
+1 30152 1
+30152 30152 1
+1 30153 1
+30153 30153 1
+1 30154 1
+30154 30154 1
+1 30155 1
+30155 30155 1
+1 30156 1
+30156 30156 1
+1 30157 1
+30157 30157 1
+1 30158 1
+30158 30158 1
+1 30159 1
+30159 30159 1
+1 30160 1
+30160 30160 1
+1 30161 1
+30161 30161 1
+1 30162 1
+30162 30162 1
+1 30163 1
+30163 30163 1
+1 30164 1
+30164 30164 1
+1 30165 1
+30165 30165 1
+1 30166 1
+30166 30166 1
+1 30167 1
+30167 30167 1
+1 30168 1
+30168 30168 1
+1 30169 1
+30169 30169 1
+1 30170 1
+30170 30170 1
+1 30171 1
+30171 30171 1
+1 30172 1
+30172 30172 1
+1 30173 1
+30173 30173 1
+1 30174 1
+30174 30174 1
+1 30175 1
+30175 30175 1
+1 30176 1
+30176 30176 1
+1 30177 1
+30177 30177 1
+1 30178 1
+30178 30178 1
+1 30179 1
+30179 30179 1
+1 30180 1
+30180 30180 1
+1 30181 1
+30181 30181 1
+1 30182 1
+30182 30182 1
+1 30183 1
+30183 30183 1
+1 30184 1
+30184 30184 1
+1 30185 1
+30185 30185 1
+1 30186 1
+30186 30186 1
+1 30187 1
+30187 30187 1
+1 30188 1
+30188 30188 1
+1 30189 1
+30189 30189 1
+1 30190 1
+30190 30190 1
+1 30191 1
+30191 30191 1
+1 30192 1
+30192 30192 1
+1 30193 1
+30193 30193 1
+1 30194 1
+30194 30194 1
+1 30195 1
+30195 30195 1
+1 30196 1
+30196 30196 1
+1 30197 1
+30197 30197 1
+1 30198 1
+30198 30198 1
+1 30199 1
+30199 30199 1
+1 30200 1
+30200 30200 1
+1 30201 1
+30201 30201 1
+1 30202 1
+30202 30202 1
+1 30203 1
+30203 30203 1
+1 30204 1
+30204 30204 1
+1 30205 1
+30205 30205 1
+1 30206 1
+30206 30206 1
+1 30207 1
+30207 30207 1
+1 30208 1
+30208 30208 1
+1 30209 1
+30209 30209 1
+1 30210 1
+30210 30210 1
+1 30211 1
+30211 30211 1
+1 30212 1
+30212 30212 1
+1 30213 1
+30213 30213 1
+1 30214 1
+30214 30214 1
+1 30215 1
+30215 30215 1
+1 30216 1
+30216 30216 1
+1 30217 1
+30217 30217 1
+1 30218 1
+30218 30218 1
+1 30219 1
+30219 30219 1
+1 30220 1
+30220 30220 1
+1 30221 1
+30221 30221 1
+1 30222 1
+30222 30222 1
+1 30223 1
+30223 30223 1
+1 30224 1
+30224 30224 1
+1 30225 1
+30225 30225 1
+1 30226 1
+30226 30226 1
+1 30227 1
+30227 30227 1
+1 30228 1
+30228 30228 1
+1 30229 1
+30229 30229 1
+1 30230 1
+30230 30230 1
+1 30231 1
+30231 30231 1
+1 30232 1
+30232 30232 1
+1 30233 1
+30233 30233 1
+1 30234 1
+30234 30234 1
+1 30235 1
+30235 30235 1
+1 30236 1
+30236 30236 1
+1 30237 1
+30237 30237 1
+1 30238 1
+30238 30238 1
+1 30239 1
+30239 30239 1
+1 30240 1
+30240 30240 1
+1 30241 1
+30241 30241 1
+1 30242 1
+30242 30242 1
+1 30243 1
+30243 30243 1
+1 30244 1
+30244 30244 1
+1 30245 1
+30245 30245 1
+1 30246 1
+30246 30246 1
+1 30247 1
+30247 30247 1
+1 30248 1
+30248 30248 1
+1 30249 1
+30249 30249 1
+1 30250 1
+30250 30250 1
+1 30251 1
+30251 30251 1
+1 30252 1
+30252 30252 1
+1 30253 1
+30253 30253 1
+1 30254 1
+30254 30254 1
+1 30255 1
+30255 30255 1
+1 30256 1
+30256 30256 1
+1 30257 1
+30257 30257 1
+1 30258 1
+30258 30258 1
+1 30259 1
+30259 30259 1
+1 30260 1
+30260 30260 1
+1 30261 1
+30261 30261 1
+1 30262 1
+30262 30262 1
+1 30263 1
+30263 30263 1
+1 30264 1
+30264 30264 1
+1 30265 1
+30265 30265 1
+1 30266 1
+30266 30266 1
+1 30267 1
+30267 30267 1
+1 30268 1
+30268 30268 1
+1 30269 1
+30269 30269 1
+1 30270 1
+30270 30270 1
+1 30271 1
+30271 30271 1
+1 30272 1
+30272 30272 1
+1 30273 1
+30273 30273 1
+1 30274 1
+30274 30274 1
+1 30275 1
+30275 30275 1
+1 30276 1
+30276 30276 1
+1 30277 1
+30277 30277 1
+1 30278 1
+30278 30278 1
+1 30279 1
+30279 30279 1
+1 30280 1
+30280 30280 1
+1 30281 1
+30281 30281 1
+1 30282 1
+30282 30282 1
+1 30283 1
+30283 30283 1
+1 30284 1
+30284 30284 1
+1 30285 1
+30285 30285 1
+1 30286 1
+30286 30286 1
+1 30287 1
+30287 30287 1
+1 30288 1
+30288 30288 1
+1 30289 1
+30289 30289 1
+1 30290 1
+30290 30290 1
+1 30291 1
+30291 30291 1
+1 30292 1
+30292 30292 1
+1 30293 1
+30293 30293 1
+1 30294 1
+30294 30294 1
+1 30295 1
+30295 30295 1
+1 30296 1
+30296 30296 1
+1 30297 1
+30297 30297 1
+1 30298 1
+30298 30298 1
+1 30299 1
+30299 30299 1
+1 30300 1
+30300 30300 1
+1 30301 1
+30301 30301 1
+1 30302 1
+30302 30302 1
+1 30303 1
+30303 30303 1
+1 30304 1
+30304 30304 1
+1 30305 1
+30305 30305 1
+1 30306 1
+30306 30306 1
+1 30307 1
+30307 30307 1
+1 30308 1
+30308 30308 1
+1 30309 1
+30309 30309 1
+1 30310 1
+30310 30310 1
+1 30311 1
+30311 30311 1
+1 30312 1
+30312 30312 1
+1 30313 1
+30313 30313 1
+1 30314 1
+30314 30314 1
+1 30315 1
+30315 30315 1
+1 30316 1
+30316 30316 1
+1 30317 1
+30317 30317 1
+1 30318 1
+30318 30318 1
+1 30319 1
+30319 30319 1
+1 30320 1
+30320 30320 1
+1 30321 1
+30321 30321 1
+1 30322 1
+30322 30322 1
+1 30323 1
+30323 30323 1
+1 30324 1
+30324 30324 1
+1 30325 1
+30325 30325 1
+1 30326 1
+30326 30326 1
+1 30327 1
+30327 30327 1
+1 30328 1
+30328 30328 1
+1 30329 1
+30329 30329 1
+1 30330 1
+30330 30330 1
+1 30331 1
+30331 30331 1
+1 30332 1
+30332 30332 1
+1 30333 1
+30333 30333 1
+1 30334 1
+30334 30334 1
+1 30335 1
+30335 30335 1
+1 30336 1
+30336 30336 1
+1 30337 1
+30337 30337 1
+1 30338 1
+30338 30338 1
+1 30339 1
+30339 30339 1
+1 30340 1
+30340 30340 1
+1 30341 1
+30341 30341 1
+1 30342 1
+30342 30342 1
+1 30343 1
+30343 30343 1
+1 30344 1
+30344 30344 1
+1 30345 1
+30345 30345 1
+1 30346 1
+30346 30346 1
+1 30347 1
+30347 30347 1
+1 30348 1
+30348 30348 1
+1 30349 1
+30349 30349 1
+1 30350 1
+30350 30350 1
+1 30351 1
+30351 30351 1
+1 30352 1
+30352 30352 1
+1 30353 1
+30353 30353 1
+1 30354 1
+30354 30354 1
+1 30355 1
+30355 30355 1
+1 30356 1
+30356 30356 1
+1 30357 1
+30357 30357 1
+1 30358 1
+30358 30358 1
+1 30359 1
+30359 30359 1
+1 30360 1
+30360 30360 1
+1 30361 1
+30361 30361 1
+1 30362 1
+30362 30362 1
+1 30363 1
+30363 30363 1
+1 30364 1
+30364 30364 1
+1 30365 1
+30365 30365 1
+1 30366 1
+30366 30366 1
+1 30367 1
+30367 30367 1
+1 30368 1
+30368 30368 1
+1 30369 1
+30369 30369 1
+1 30370 1
+30370 30370 1
+1 30371 1
+30371 30371 1
+1 30372 1
+30372 30372 1
+1 30373 1
+30373 30373 1
+1 30374 1
+30374 30374 1
+1 30375 1
+30375 30375 1
+1 30376 1
+30376 30376 1
+1 30377 1
+30377 30377 1
+1 30378 1
+30378 30378 1
+1 30379 1
+30379 30379 1
+1 30380 1
+30380 30380 1
+1 30381 1
+30381 30381 1
+1 30382 1
+30382 30382 1
+1 30383 1
+30383 30383 1
+1 30384 1
+30384 30384 1
+1 30385 1
+30385 30385 1
+1 30386 1
+30386 30386 1
+1 30387 1
+30387 30387 1
+1 30388 1
+30388 30388 1
+1 30389 1
+30389 30389 1
+1 30390 1
+30390 30390 1
+1 30391 1
+30391 30391 1
+1 30392 1
+30392 30392 1
+1 30393 1
+30393 30393 1
+1 30394 1
+30394 30394 1
+1 30395 1
+30395 30395 1
+1 30396 1
+30396 30396 1
+1 30397 1
+30397 30397 1
+1 30398 1
+30398 30398 1
+1 30399 1
+30399 30399 1
+1 30400 1
+30400 30400 1
+1 30401 1
+30401 30401 1
+1 30402 1
+30402 30402 1
+1 30403 1
+30403 30403 1
+1 30404 1
+30404 30404 1
+1 30405 1
+30405 30405 1
+1 30406 1
+30406 30406 1
+1 30407 1
+30407 30407 1
+1 30408 1
+30408 30408 1
+1 30409 1
+30409 30409 1
+1 30410 1
+30410 30410 1
+1 30411 1
+30411 30411 1
+1 30412 1
+30412 30412 1
+1 30413 1
+30413 30413 1
+1 30414 1
+30414 30414 1
+1 30415 1
+30415 30415 1
+1 30416 1
+30416 30416 1
+1 30417 1
+30417 30417 1
+1 30418 1
+30418 30418 1
+1 30419 1
+30419 30419 1
+1 30420 1
+30420 30420 1
+1 30421 1
+30421 30421 1
+1 30422 1
+30422 30422 1
+1 30423 1
+30423 30423 1
+1 30424 1
+30424 30424 1
+1 30425 1
+30425 30425 1
+1 30426 1
+30426 30426 1
+1 30427 1
+30427 30427 1
+1 30428 1
+30428 30428 1
+1 30429 1
+30429 30429 1
+1 30430 1
+30430 30430 1
+1 30431 1
+30431 30431 1
+1 30432 1
+30432 30432 1
+1 30433 1
+30433 30433 1
+1 30434 1
+30434 30434 1
+1 30435 1
+30435 30435 1
+1 30436 1
+30436 30436 1
+1 30437 1
+30437 30437 1
+1 30438 1
+30438 30438 1
+1 30439 1
+30439 30439 1
+1 30440 1
+30440 30440 1
+1 30441 1
+30441 30441 1
+1 30442 1
+30442 30442 1
+1 30443 1
+30443 30443 1
+1 30444 1
+30444 30444 1
+1 30445 1
+30445 30445 1
+1 30446 1
+30446 30446 1
+1 30447 1
+30447 30447 1
+1 30448 1
+30448 30448 1
+1 30449 1
+30449 30449 1
+1 30450 1
+30450 30450 1
+1 30451 1
+30451 30451 1
+1 30452 1
+30452 30452 1
+1 30453 1
+30453 30453 1
+1 30454 1
+30454 30454 1
+1 30455 1
+30455 30455 1
+1 30456 1
+30456 30456 1
+1 30457 1
+30457 30457 1
+1 30458 1
+30458 30458 1
+1 30459 1
+30459 30459 1
+1 30460 1
+30460 30460 1
+1 30461 1
+30461 30461 1
+1 30462 1
+30462 30462 1
+1 30463 1
+30463 30463 1
+1 30464 1
+30464 30464 1
+1 30465 1
+30465 30465 1
+1 30466 1
+30466 30466 1
+1 30467 1
+30467 30467 1
+1 30468 1
+30468 30468 1
+1 30469 1
+30469 30469 1
+1 30470 1
+30470 30470 1
+1 30471 1
+30471 30471 1
+1 30472 1
+30472 30472 1
+1 30473 1
+30473 30473 1
+1 30474 1
+30474 30474 1
+1 30475 1
+30475 30475 1
+1 30476 1
+30476 30476 1
+1 30477 1
+30477 30477 1
+1 30478 1
+30478 30478 1
+1 30479 1
+30479 30479 1
+1 30480 1
+30480 30480 1
+1 30481 1
+30481 30481 1
+1 30482 1
+30482 30482 1
+1 30483 1
+30483 30483 1
+1 30484 1
+30484 30484 1
+1 30485 1
+30485 30485 1
+1 30486 1
+30486 30486 1
+1 30487 1
+30487 30487 1
+1 30488 1
+30488 30488 1
+1 30489 1
+30489 30489 1
+1 30490 1
+30490 30490 1
+1 30491 1
+30491 30491 1
+1 30492 1
+30492 30492 1
+1 30493 1
+30493 30493 1
+1 30494 1
+30494 30494 1
+1 30495 1
+30495 30495 1
+1 30496 1
+30496 30496 1
+1 30497 1
+30497 30497 1
+1 30498 1
+30498 30498 1
+1 30499 1
+30499 30499 1
+1 30500 1
+30500 30500 1
+1 30501 1
+30501 30501 1
+1 30502 1
+30502 30502 1
+1 30503 1
+30503 30503 1
+1 30504 1
+30504 30504 1
+1 30505 1
+30505 30505 1
+1 30506 1
+30506 30506 1
+1 30507 1
+30507 30507 1
+1 30508 1
+30508 30508 1
+1 30509 1
+30509 30509 1
+1 30510 1
+30510 30510 1
+1 30511 1
+30511 30511 1
+1 30512 1
+30512 30512 1
+1 30513 1
+30513 30513 1
+1 30514 1
+30514 30514 1
+1 30515 1
+30515 30515 1
+1 30516 1
+30516 30516 1
+1 30517 1
+30517 30517 1
+1 30518 1
+30518 30518 1
+1 30519 1
+30519 30519 1
+1 30520 1
+30520 30520 1
+1 30521 1
+30521 30521 1
+1 30522 1
+30522 30522 1
+1 30523 1
+30523 30523 1
+1 30524 1
+30524 30524 1
+1 30525 1
+30525 30525 1
+1 30526 1
+30526 30526 1
+1 30527 1
+30527 30527 1
+1 30528 1
+30528 30528 1
+1 30529 1
+30529 30529 1
+1 30530 1
+30530 30530 1
+1 30531 1
+30531 30531 1
+1 30532 1
+30532 30532 1
+1 30533 1
+30533 30533 1
+1 30534 1
+30534 30534 1
+1 30535 1
+30535 30535 1
+1 30536 1
+30536 30536 1
+1 30537 1
+30537 30537 1
+1 30538 1
+30538 30538 1
+1 30539 1
+30539 30539 1
+1 30540 1
+30540 30540 1
+1 30541 1
+30541 30541 1
+1 30542 1
+30542 30542 1
+1 30543 1
+30543 30543 1
+1 30544 1
+30544 30544 1
+1 30545 1
+30545 30545 1
+1 30546 1
+30546 30546 1
+1 30547 1
+30547 30547 1
+1 30548 1
+30548 30548 1
+1 30549 1
+30549 30549 1
+1 30550 1
+30550 30550 1
+1 30551 1
+30551 30551 1
+1 30552 1
+30552 30552 1
+1 30553 1
+30553 30553 1
+1 30554 1
+30554 30554 1
+1 30555 1
+30555 30555 1
+1 30556 1
+30556 30556 1
+1 30557 1
+30557 30557 1
+1 30558 1
+30558 30558 1
+1 30559 1
+30559 30559 1
+1 30560 1
+30560 30560 1
+1 30561 1
+30561 30561 1
+1 30562 1
+30562 30562 1
+1 30563 1
+30563 30563 1
+1 30564 1
+30564 30564 1
+1 30565 1
+30565 30565 1
+1 30566 1
+30566 30566 1
+1 30567 1
+30567 30567 1
+1 30568 1
+30568 30568 1
+1 30569 1
+30569 30569 1
+1 30570 1
+30570 30570 1
+1 30571 1
+30571 30571 1
+1 30572 1
+30572 30572 1
+1 30573 1
+30573 30573 1
+1 30574 1
+30574 30574 1
+1 30575 1
+30575 30575 1
+1 30576 1
+30576 30576 1
+1 30577 1
+30577 30577 1
+1 30578 1
+30578 30578 1
+1 30579 1
+30579 30579 1
+1 30580 1
+30580 30580 1
+1 30581 1
+30581 30581 1
+1 30582 1
+30582 30582 1
+1 30583 1
+30583 30583 1
+1 30584 1
+30584 30584 1
+1 30585 1
+30585 30585 1
+1 30586 1
+30586 30586 1
+1 30587 1
+30587 30587 1
+1 30588 1
+30588 30588 1
+1 30589 1
+30589 30589 1
+1 30590 1
+30590 30590 1
+1 30591 1
+30591 30591 1
+1 30592 1
+30592 30592 1
+1 30593 1
+30593 30593 1
+1 30594 1
+30594 30594 1
+1 30595 1
+30595 30595 1
+1 30596 1
+30596 30596 1
+1 30597 1
+30597 30597 1
+1 30598 1
+30598 30598 1
+1 30599 1
+30599 30599 1
+1 30600 1
+30600 30600 1
+1 30601 1
+30601 30601 1
+1 30602 1
+30602 30602 1
+1 30603 1
+30603 30603 1
+1 30604 1
+30604 30604 1
+1 30605 1
+30605 30605 1
+1 30606 1
+30606 30606 1
+1 30607 1
+30607 30607 1
+1 30608 1
+30608 30608 1
+1 30609 1
+30609 30609 1
+1 30610 1
+30610 30610 1
+1 30611 1
+30611 30611 1
+1 30612 1
+30612 30612 1
+1 30613 1
+30613 30613 1
+1 30614 1
+30614 30614 1
+1 30615 1
+30615 30615 1
+1 30616 1
+30616 30616 1
+1 30617 1
+30617 30617 1
+1 30618 1
+30618 30618 1
+1 30619 1
+30619 30619 1
+1 30620 1
+30620 30620 1
+1 30621 1
+30621 30621 1
+1 30622 1
+30622 30622 1
+1 30623 1
+30623 30623 1
+1 30624 1
+30624 30624 1
+1 30625 1
+30625 30625 1
+1 30626 1
+30626 30626 1
+1 30627 1
+30627 30627 1
+1 30628 1
+30628 30628 1
+1 30629 1
+30629 30629 1
+1 30630 1
+30630 30630 1
+1 30631 1
+30631 30631 1
+1 30632 1
+30632 30632 1
+1 30633 1
+30633 30633 1
+1 30634 1
+30634 30634 1
+1 30635 1
+30635 30635 1
+1 30636 1
+30636 30636 1
+1 30637 1
+30637 30637 1
+1 30638 1
+30638 30638 1
+1 30639 1
+30639 30639 1
+1 30640 1
+30640 30640 1
+1 30641 1
+30641 30641 1
+1 30642 1
+30642 30642 1
+1 30643 1
+30643 30643 1
+1 30644 1
+30644 30644 1
+1 30645 1
+30645 30645 1
+1 30646 1
+30646 30646 1
+1 30647 1
+30647 30647 1
+1 30648 1
+30648 30648 1
+1 30649 1
+30649 30649 1
+1 30650 1
+30650 30650 1
+1 30651 1
+30651 30651 1
+1 30652 1
+30652 30652 1
+1 30653 1
+30653 30653 1
+1 30654 1
+30654 30654 1
+1 30655 1
+30655 30655 1
+1 30656 1
+30656 30656 1
+1 30657 1
+30657 30657 1
+1 30658 1
+30658 30658 1
+1 30659 1
+30659 30659 1
+1 30660 1
+30660 30660 1
+1 30661 1
+30661 30661 1
+1 30662 1
+30662 30662 1
+1 30663 1
+30663 30663 1
+1 30664 1
+30664 30664 1
+1 30665 1
+30665 30665 1
+1 30666 1
+30666 30666 1
+1 30667 1
+30667 30667 1
+1 30668 1
+30668 30668 1
+1 30669 1
+30669 30669 1
+1 30670 1
+30670 30670 1
+1 30671 1
+30671 30671 1
+1 30672 1
+30672 30672 1
+1 30673 1
+30673 30673 1
+1 30674 1
+30674 30674 1
+1 30675 1
+30675 30675 1
+1 30676 1
+30676 30676 1
+1 30677 1
+30677 30677 1
+1 30678 1
+30678 30678 1
+1 30679 1
+30679 30679 1
+1 30680 1
+30680 30680 1
+1 30681 1
+30681 30681 1
+1 30682 1
+30682 30682 1
+1 30683 1
+30683 30683 1
+1 30684 1
+30684 30684 1
+1 30685 1
+30685 30685 1
+1 30686 1
+30686 30686 1
+1 30687 1
+30687 30687 1
+1 30688 1
+30688 30688 1
+1 30689 1
+30689 30689 1
+1 30690 1
+30690 30690 1
+1 30691 1
+30691 30691 1
+1 30692 1
+30692 30692 1
+1 30693 1
+30693 30693 1
+1 30694 1
+30694 30694 1
+1 30695 1
+30695 30695 1
+1 30696 1
+30696 30696 1
+1 30697 1
+30697 30697 1
+1 30698 1
+30698 30698 1
+1 30699 1
+30699 30699 1
+1 30700 1
+30700 30700 1
+1 30701 1
+30701 30701 1
+1 30702 1
+30702 30702 1
+1 30703 1
+30703 30703 1
+1 30704 1
+30704 30704 1
+1 30705 1
+30705 30705 1
+1 30706 1
+30706 30706 1
+1 30707 1
+30707 30707 1
+1 30708 1
+30708 30708 1
+1 30709 1
+30709 30709 1
+1 30710 1
+30710 30710 1
+1 30711 1
+30711 30711 1
+1 30712 1
+30712 30712 1
+1 30713 1
+30713 30713 1
+1 30714 1
+30714 30714 1
+1 30715 1
+30715 30715 1
+1 30716 1
+30716 30716 1
+1 30717 1
+30717 30717 1
+1 30718 1
+30718 30718 1
+1 30719 1
+30719 30719 1
+1 30720 1
+30720 30720 1
+1 30721 1
+30721 30721 1
+1 30722 1
+30722 30722 1
+1 30723 1
+30723 30723 1
+1 30724 1
+30724 30724 1
+1 30725 1
+30725 30725 1
+1 30726 1
+30726 30726 1
+1 30727 1
+30727 30727 1
+1 30728 1
+30728 30728 1
+1 30729 1
+30729 30729 1
+1 30730 1
+30730 30730 1
+1 30731 1
+30731 30731 1
+1 30732 1
+30732 30732 1
+1 30733 1
+30733 30733 1
+1 30734 1
+30734 30734 1
+1 30735 1
+30735 30735 1
+1 30736 1
+30736 30736 1
+1 30737 1
+30737 30737 1
+1 30738 1
+30738 30738 1
+1 30739 1
+30739 30739 1
+1 30740 1
+30740 30740 1
+1 30741 1
+30741 30741 1
+1 30742 1
+30742 30742 1
+1 30743 1
+30743 30743 1
+1 30744 1
+30744 30744 1
+1 30745 1
+30745 30745 1
+1 30746 1
+30746 30746 1
+1 30747 1
+30747 30747 1
+1 30748 1
+30748 30748 1
+1 30749 1
+30749 30749 1
+1 30750 1
+30750 30750 1
+1 30751 1
+30751 30751 1
+1 30752 1
+30752 30752 1
+1 30753 1
+30753 30753 1
+1 30754 1
+30754 30754 1
+1 30755 1
+30755 30755 1
+1 30756 1
+30756 30756 1
+1 30757 1
+30757 30757 1
+1 30758 1
+30758 30758 1
+1 30759 1
+30759 30759 1
+1 30760 1
+30760 30760 1
+1 30761 1
+30761 30761 1
+1 30762 1
+30762 30762 1
+1 30763 1
+30763 30763 1
+1 30764 1
+30764 30764 1
+1 30765 1
+30765 30765 1
+1 30766 1
+30766 30766 1
+1 30767 1
+30767 30767 1
+1 30768 1
+30768 30768 1
+1 30769 1
+30769 30769 1
+1 30770 1
+30770 30770 1
+1 30771 1
+30771 30771 1
+1 30772 1
+30772 30772 1
+1 30773 1
+30773 30773 1
+1 30774 1
+30774 30774 1
+1 30775 1
+30775 30775 1
+1 30776 1
+30776 30776 1
+1 30777 1
+30777 30777 1
+1 30778 1
+30778 30778 1
+1 30779 1
+30779 30779 1
+1 30780 1
+30780 30780 1
+1 30781 1
+30781 30781 1
+1 30782 1
+30782 30782 1
+1 30783 1
+30783 30783 1
+1 30784 1
+30784 30784 1
+1 30785 1
+30785 30785 1
+1 30786 1
+30786 30786 1
+1 30787 1
+30787 30787 1
+1 30788 1
+30788 30788 1
+1 30789 1
+30789 30789 1
+1 30790 1
+30790 30790 1
+1 30791 1
+30791 30791 1
+1 30792 1
+30792 30792 1
+1 30793 1
+30793 30793 1
+1 30794 1
+30794 30794 1
+1 30795 1
+30795 30795 1
+1 30796 1
+30796 30796 1
+1 30797 1
+30797 30797 1
+1 30798 1
+30798 30798 1
+1 30799 1
+30799 30799 1
+1 30800 1
+30800 30800 1
+1 30801 1
+30801 30801 1
+1 30802 1
+30802 30802 1
+1 30803 1
+30803 30803 1
+1 30804 1
+30804 30804 1
+1 30805 1
+30805 30805 1
+1 30806 1
+30806 30806 1
+1 30807 1
+30807 30807 1
+1 30808 1
+30808 30808 1
+1 30809 1
+30809 30809 1
+1 30810 1
+30810 30810 1
+1 30811 1
+30811 30811 1
+1 30812 1
+30812 30812 1
+1 30813 1
+30813 30813 1
+1 30814 1
+30814 30814 1
+1 30815 1
+30815 30815 1
+1 30816 1
+30816 30816 1
+1 30817 1
+30817 30817 1
+1 30818 1
+30818 30818 1
+1 30819 1
+30819 30819 1
+1 30820 1
+30820 30820 1
+1 30821 1
+30821 30821 1
+1 30822 1
+30822 30822 1
+1 30823 1
+30823 30823 1
+1 30824 1
+30824 30824 1
+1 30825 1
+30825 30825 1
+1 30826 1
+30826 30826 1
+1 30827 1
+30827 30827 1
+1 30828 1
+30828 30828 1
+1 30829 1
+30829 30829 1
+1 30830 1
+30830 30830 1
+1 30831 1
+30831 30831 1
+1 30832 1
+30832 30832 1
+1 30833 1
+30833 30833 1
+1 30834 1
+30834 30834 1
+1 30835 1
+30835 30835 1
+1 30836 1
+30836 30836 1
+1 30837 1
+30837 30837 1
+1 30838 1
+30838 30838 1
+1 30839 1
+30839 30839 1
+1 30840 1
+30840 30840 1
+1 30841 1
+30841 30841 1
+1 30842 1
+30842 30842 1
+1 30843 1
+30843 30843 1
+1 30844 1
+30844 30844 1
+1 30845 1
+30845 30845 1
+1 30846 1
+30846 30846 1
+1 30847 1
+30847 30847 1
+1 30848 1
+30848 30848 1
+1 30849 1
+30849 30849 1
+1 30850 1
+30850 30850 1
+1 30851 1
+30851 30851 1
+1 30852 1
+30852 30852 1
+1 30853 1
+30853 30853 1
+1 30854 1
+30854 30854 1
+1 30855 1
+30855 30855 1
+1 30856 1
+30856 30856 1
+1 30857 1
+30857 30857 1
+1 30858 1
+30858 30858 1
+1 30859 1
+30859 30859 1
+1 30860 1
+30860 30860 1
+1 30861 1
+30861 30861 1
+1 30862 1
+30862 30862 1
+1 30863 1
+30863 30863 1
+1 30864 1
+30864 30864 1
+1 30865 1
+30865 30865 1
+1 30866 1
+30866 30866 1
+1 30867 1
+30867 30867 1
+1 30868 1
+30868 30868 1
+1 30869 1
+30869 30869 1
+1 30870 1
+30870 30870 1
+1 30871 1
+30871 30871 1
+1 30872 1
+30872 30872 1
+1 30873 1
+30873 30873 1
+1 30874 1
+30874 30874 1
+1 30875 1
+30875 30875 1
+1 30876 1
+30876 30876 1
+1 30877 1
+30877 30877 1
+1 30878 1
+30878 30878 1
+1 30879 1
+30879 30879 1
+1 30880 1
+30880 30880 1
+1 30881 1
+30881 30881 1
+1 30882 1
+30882 30882 1
+1 30883 1
+30883 30883 1
+1 30884 1
+30884 30884 1
+1 30885 1
+30885 30885 1
+1 30886 1
+30886 30886 1
+1 30887 1
+30887 30887 1
+1 30888 1
+30888 30888 1
+1 30889 1
+30889 30889 1
+1 30890 1
+30890 30890 1
+1 30891 1
+30891 30891 1
+1 30892 1
+30892 30892 1
+1 30893 1
+30893 30893 1
+1 30894 1
+30894 30894 1
+1 30895 1
+30895 30895 1
+1 30896 1
+30896 30896 1
+1 30897 1
+30897 30897 1
+1 30898 1
+30898 30898 1
+1 30899 1
+30899 30899 1
+1 30900 1
+30900 30900 1
+1 30901 1
+30901 30901 1
+1 30902 1
+30902 30902 1
+1 30903 1
+30903 30903 1
+1 30904 1
+30904 30904 1
+1 30905 1
+30905 30905 1
+1 30906 1
+30906 30906 1
+1 30907 1
+30907 30907 1
+1 30908 1
+30908 30908 1
+1 30909 1
+30909 30909 1
+1 30910 1
+30910 30910 1
+1 30911 1
+30911 30911 1
+1 30912 1
+30912 30912 1
+1 30913 1
+30913 30913 1
+1 30914 1
+30914 30914 1
+1 30915 1
+30915 30915 1
+1 30916 1
+30916 30916 1
+1 30917 1
+30917 30917 1
+1 30918 1
+30918 30918 1
+1 30919 1
+30919 30919 1
+1 30920 1
+30920 30920 1
+1 30921 1
+30921 30921 1
+1 30922 1
+30922 30922 1
+1 30923 1
+30923 30923 1
+1 30924 1
+30924 30924 1
+1 30925 1
+30925 30925 1
+1 30926 1
+30926 30926 1
+1 30927 1
+30927 30927 1
+1 30928 1
+30928 30928 1
+1 30929 1
+30929 30929 1
+1 30930 1
+30930 30930 1
+1 30931 1
+30931 30931 1
+1 30932 1
+30932 30932 1
+1 30933 1
+30933 30933 1
+1 30934 1
+30934 30934 1
+1 30935 1
+30935 30935 1
+1 30936 1
+30936 30936 1
+1 30937 1
+30937 30937 1
+1 30938 1
+30938 30938 1
+1 30939 1
+30939 30939 1
+1 30940 1
+30940 30940 1
+1 30941 1
+30941 30941 1
+1 30942 1
+30942 30942 1
+1 30943 1
+30943 30943 1
+1 30944 1
+30944 30944 1
+1 30945 1
+30945 30945 1
+1 30946 1
+30946 30946 1
+1 30947 1
+30947 30947 1
+1 30948 1
+30948 30948 1
+1 30949 1
+30949 30949 1
+1 30950 1
+30950 30950 1
+1 30951 1
+30951 30951 1
+1 30952 1
+30952 30952 1
+1 30953 1
+30953 30953 1
+1 30954 1
+30954 30954 1
+1 30955 1
+30955 30955 1
+1 30956 1
+30956 30956 1
+1 30957 1
+30957 30957 1
+1 30958 1
+30958 30958 1
+1 30959 1
+30959 30959 1
+1 30960 1
+30960 30960 1
+1 30961 1
+30961 30961 1
+1 30962 1
+30962 30962 1
+1 30963 1
+30963 30963 1
+1 30964 1
+30964 30964 1
+1 30965 1
+30965 30965 1
+1 30966 1
+30966 30966 1
+1 30967 1
+30967 30967 1
+1 30968 1
+30968 30968 1
+1 30969 1
+30969 30969 1
+1 30970 1
+30970 30970 1
+1 30971 1
+30971 30971 1
+1 30972 1
+30972 30972 1
+1 30973 1
+30973 30973 1
+1 30974 1
+30974 30974 1
+1 30975 1
+30975 30975 1
+1 30976 1
+30976 30976 1
+1 30977 1
+30977 30977 1
+1 30978 1
+30978 30978 1
+1 30979 1
+30979 30979 1
+1 30980 1
+30980 30980 1
+1 30981 1
+30981 30981 1
+1 30982 1
+30982 30982 1
+1 30983 1
+30983 30983 1
+1 30984 1
+30984 30984 1
+1 30985 1
+30985 30985 1
+1 30986 1
+30986 30986 1
+1 30987 1
+30987 30987 1
+1 30988 1
+30988 30988 1
+1 30989 1
+30989 30989 1
+1 30990 1
+30990 30990 1
+1 30991 1
+30991 30991 1
+1 30992 1
+30992 30992 1
+1 30993 1
+30993 30993 1
+1 30994 1
+30994 30994 1
+1 30995 1
+30995 30995 1
+1 30996 1
+30996 30996 1
+1 30997 1
+30997 30997 1
+1 30998 1
+30998 30998 1
+1 30999 1
+30999 30999 1
+1 31000 1
+31000 31000 1
+1 31001 1
+31001 31001 1
+1 31002 1
+31002 31002 1
+1 31003 1
+31003 31003 1
+1 31004 1
+31004 31004 1
+1 31005 1
+31005 31005 1
+1 31006 1
+31006 31006 1
+1 31007 1
+31007 31007 1
+1 31008 1
+31008 31008 1
+1 31009 1
+31009 31009 1
+1 31010 1
+31010 31010 1
+1 31011 1
+31011 31011 1
+1 31012 1
+31012 31012 1
+1 31013 1
+31013 31013 1
+1 31014 1
+31014 31014 1
+1 31015 1
+31015 31015 1
+1 31016 1
+31016 31016 1
+1 31017 1
+31017 31017 1
+1 31018 1
+31018 31018 1
+1 31019 1
+31019 31019 1
+1 31020 1
+31020 31020 1
+1 31021 1
+31021 31021 1
+1 31022 1
+31022 31022 1
+1 31023 1
+31023 31023 1
+1 31024 1
+31024 31024 1
+1 31025 1
+31025 31025 1
+1 31026 1
+31026 31026 1
+1 31027 1
+31027 31027 1
+1 31028 1
+31028 31028 1
+1 31029 1
+31029 31029 1
+1 31030 1
+31030 31030 1
+1 31031 1
+31031 31031 1
+1 31032 1
+31032 31032 1
+1 31033 1
+31033 31033 1
+1 31034 1
+31034 31034 1
+1 31035 1
+31035 31035 1
+1 31036 1
+31036 31036 1
+1 31037 1
+31037 31037 1
+1 31038 1
+31038 31038 1
+1 31039 1
+31039 31039 1
+1 31040 1
+31040 31040 1
+1 31041 1
+31041 31041 1
+1 31042 1
+31042 31042 1
+1 31043 1
+31043 31043 1
+1 31044 1
+31044 31044 1
+1 31045 1
+31045 31045 1
+1 31046 1
+31046 31046 1
+1 31047 1
+31047 31047 1
+1 31048 1
+31048 31048 1
+1 31049 1
+31049 31049 1
+1 31050 1
+31050 31050 1
+1 31051 1
+31051 31051 1
+1 31052 1
+31052 31052 1
+1 31053 1
+31053 31053 1
+1 31054 1
+31054 31054 1
+1 31055 1
+31055 31055 1
+1 31056 1
+31056 31056 1
+1 31057 1
+31057 31057 1
+1 31058 1
+31058 31058 1
+1 31059 1
+31059 31059 1
+1 31060 1
+31060 31060 1
+1 31061 1
+31061 31061 1
+1 31062 1
+31062 31062 1
+1 31063 1
+31063 31063 1
+1 31064 1
+31064 31064 1
+1 31065 1
+31065 31065 1
+1 31066 1
+31066 31066 1
+1 31067 1
+31067 31067 1
+1 31068 1
+31068 31068 1
+1 31069 1
+31069 31069 1
+1 31070 1
+31070 31070 1
+1 31071 1
+31071 31071 1
+1 31072 1
+31072 31072 1
+1 31073 1
+31073 31073 1
+1 31074 1
+31074 31074 1
+1 31075 1
+31075 31075 1
+1 31076 1
+31076 31076 1
+1 31077 1
+31077 31077 1
+1 31078 1
+31078 31078 1
+1 31079 1
+31079 31079 1
+1 31080 1
+31080 31080 1
+1 31081 1
+31081 31081 1
+1 31082 1
+31082 31082 1
+1 31083 1
+31083 31083 1
+1 31084 1
+31084 31084 1
+1 31085 1
+31085 31085 1
+1 31086 1
+31086 31086 1
+1 31087 1
+31087 31087 1
+1 31088 1
+31088 31088 1
+1 31089 1
+31089 31089 1
+1 31090 1
+31090 31090 1
+1 31091 1
+31091 31091 1
+1 31092 1
+31092 31092 1
+1 31093 1
+31093 31093 1
+1 31094 1
+31094 31094 1
+1 31095 1
+31095 31095 1
+1 31096 1
+31096 31096 1
+1 31097 1
+31097 31097 1
+1 31098 1
+31098 31098 1
+1 31099 1
+31099 31099 1
+1 31100 1
+31100 31100 1
+1 31101 1
+31101 31101 1
+1 31102 1
+31102 31102 1
+1 31103 1
+31103 31103 1
+1 31104 1
+31104 31104 1
+1 31105 1
+31105 31105 1
+1 31106 1
+31106 31106 1
+1 31107 1
+31107 31107 1
+1 31108 1
+31108 31108 1
+1 31109 1
+31109 31109 1
+1 31110 1
+31110 31110 1
+1 31111 1
+31111 31111 1
+1 31112 1
+31112 31112 1
+1 31113 1
+31113 31113 1
+1 31114 1
+31114 31114 1
+1 31115 1
+31115 31115 1
+1 31116 1
+31116 31116 1
+1 31117 1
+31117 31117 1
+1 31118 1
+31118 31118 1
+1 31119 1
+31119 31119 1
+1 31120 1
+31120 31120 1
+1 31121 1
+31121 31121 1
+1 31122 1
+31122 31122 1
+1 31123 1
+31123 31123 1
+1 31124 1
+31124 31124 1
+1 31125 1
+31125 31125 1
+1 31126 1
+31126 31126 1
+1 31127 1
+31127 31127 1
+1 31128 1
+31128 31128 1
+1 31129 1
+31129 31129 1
+1 31130 1
+31130 31130 1
+1 31131 1
+31131 31131 1
+1 31132 1
+31132 31132 1
+1 31133 1
+31133 31133 1
+1 31134 1
+31134 31134 1
+1 31135 1
+31135 31135 1
+1 31136 1
+31136 31136 1
+1 31137 1
+31137 31137 1
+1 31138 1
+31138 31138 1
+1 31139 1
+31139 31139 1
+1 31140 1
+31140 31140 1
+1 31141 1
+31141 31141 1
+1 31142 1
+31142 31142 1
+1 31143 1
+31143 31143 1
+1 31144 1
+31144 31144 1
+1 31145 1
+31145 31145 1
+1 31146 1
+31146 31146 1
+1 31147 1
+31147 31147 1
+1 31148 1
+31148 31148 1
+1 31149 1
+31149 31149 1
+1 31150 1
+31150 31150 1
+1 31151 1
+31151 31151 1
+1 31152 1
+31152 31152 1
+1 31153 1
+31153 31153 1
+1 31154 1
+31154 31154 1
+1 31155 1
+31155 31155 1
+1 31156 1
+31156 31156 1
+1 31157 1
+31157 31157 1
+1 31158 1
+31158 31158 1
+1 31159 1
+31159 31159 1
+1 31160 1
+31160 31160 1
+1 31161 1
+31161 31161 1
+1 31162 1
+31162 31162 1
+1 31163 1
+31163 31163 1
+1 31164 1
+31164 31164 1
+1 31165 1
+31165 31165 1
+1 31166 1
+31166 31166 1
+1 31167 1
+31167 31167 1
+1 31168 1
+31168 31168 1
+1 31169 1
+31169 31169 1
+1 31170 1
+31170 31170 1
+1 31171 1
+31171 31171 1
+1 31172 1
+31172 31172 1
+1 31173 1
+31173 31173 1
+1 31174 1
+31174 31174 1
+1 31175 1
+31175 31175 1
+1 31176 1
+31176 31176 1
+1 31177 1
+31177 31177 1
+1 31178 1
+31178 31178 1
+1 31179 1
+31179 31179 1
+1 31180 1
+31180 31180 1
+1 31181 1
+31181 31181 1
+1 31182 1
+31182 31182 1
+1 31183 1
+31183 31183 1
+1 31184 1
+31184 31184 1
+1 31185 1
+31185 31185 1
+1 31186 1
+31186 31186 1
+1 31187 1
+31187 31187 1
+1 31188 1
+31188 31188 1
+1 31189 1
+31189 31189 1
+1 31190 1
+31190 31190 1
+1 31191 1
+31191 31191 1
+1 31192 1
+31192 31192 1
+1 31193 1
+31193 31193 1
+1 31194 1
+31194 31194 1
+1 31195 1
+31195 31195 1
+1 31196 1
+31196 31196 1
+1 31197 1
+31197 31197 1
+1 31198 1
+31198 31198 1
+1 31199 1
+31199 31199 1
+1 31200 1
+31200 31200 1
+1 31201 1
+31201 31201 1
+1 31202 1
+31202 31202 1
+1 31203 1
+31203 31203 1
+1 31204 1
+31204 31204 1
+1 31205 1
+31205 31205 1
+1 31206 1
+31206 31206 1
+1 31207 1
+31207 31207 1
+1 31208 1
+31208 31208 1
+1 31209 1
+31209 31209 1
+1 31210 1
+31210 31210 1
+1 31211 1
+31211 31211 1
+1 31212 1
+31212 31212 1
+1 31213 1
+31213 31213 1
+1 31214 1
+31214 31214 1
+1 31215 1
+31215 31215 1
+1 31216 1
+31216 31216 1
+1 31217 1
+31217 31217 1
+1 31218 1
+31218 31218 1
+1 31219 1
+31219 31219 1
+1 31220 1
+31220 31220 1
+1 31221 1
+31221 31221 1
+1 31222 1
+31222 31222 1
+1 31223 1
+31223 31223 1
+1 31224 1
+31224 31224 1
+1 31225 1
+31225 31225 1
+1 31226 1
+31226 31226 1
+1 31227 1
+31227 31227 1
+1 31228 1
+31228 31228 1
+1 31229 1
+31229 31229 1
+1 31230 1
+31230 31230 1
+1 31231 1
+31231 31231 1
+1 31232 1
+31232 31232 1
+1 31233 1
+31233 31233 1
+1 31234 1
+31234 31234 1
+1 31235 1
+31235 31235 1
+1 31236 1
+31236 31236 1
+1 31237 1
+31237 31237 1
+1 31238 1
+31238 31238 1
+1 31239 1
+31239 31239 1
+1 31240 1
+31240 31240 1
+1 31241 1
+31241 31241 1
+1 31242 1
+31242 31242 1
+1 31243 1
+31243 31243 1
+1 31244 1
+31244 31244 1
+1 31245 1
+31245 31245 1
+1 31246 1
+31246 31246 1
+1 31247 1
+31247 31247 1
+1 31248 1
+31248 31248 1
+1 31249 1
+31249 31249 1
+1 31250 1
+31250 31250 1
+1 31251 1
+31251 31251 1
+1 31252 1
+31252 31252 1
+1 31253 1
+31253 31253 1
+1 31254 1
+31254 31254 1
+1 31255 1
+31255 31255 1
+1 31256 1
+31256 31256 1
+1 31257 1
+31257 31257 1
+1 31258 1
+31258 31258 1
+1 31259 1
+31259 31259 1
+1 31260 1
+31260 31260 1
+1 31261 1
+31261 31261 1
+1 31262 1
+31262 31262 1
+1 31263 1
+31263 31263 1
+1 31264 1
+31264 31264 1
+1 31265 1
+31265 31265 1
+1 31266 1
+31266 31266 1
+1 31267 1
+31267 31267 1
+1 31268 1
+31268 31268 1
+1 31269 1
+31269 31269 1
+1 31270 1
+31270 31270 1
+1 31271 1
+31271 31271 1
+1 31272 1
+31272 31272 1
+1 31273 1
+31273 31273 1
+1 31274 1
+31274 31274 1
+1 31275 1
+31275 31275 1
+1 31276 1
+31276 31276 1
+1 31277 1
+31277 31277 1
+1 31278 1
+31278 31278 1
+1 31279 1
+31279 31279 1
+1 31280 1
+31280 31280 1
+1 31281 1
+31281 31281 1
+1 31282 1
+31282 31282 1
+1 31283 1
+31283 31283 1
+1 31284 1
+31284 31284 1
+1 31285 1
+31285 31285 1
+1 31286 1
+31286 31286 1
+1 31287 1
+31287 31287 1
+1 31288 1
+31288 31288 1
+1 31289 1
+31289 31289 1
+1 31290 1
+31290 31290 1
+1 31291 1
+31291 31291 1
+1 31292 1
+31292 31292 1
+1 31293 1
+31293 31293 1
+1 31294 1
+31294 31294 1
+1 31295 1
+31295 31295 1
+1 31296 1
+31296 31296 1
+1 31297 1
+31297 31297 1
+1 31298 1
+31298 31298 1
+1 31299 1
+31299 31299 1
+1 31300 1
+31300 31300 1
+1 31301 1
+31301 31301 1
+1 31302 1
+31302 31302 1
+1 31303 1
+31303 31303 1
+1 31304 1
+31304 31304 1
+1 31305 1
+31305 31305 1
+1 31306 1
+31306 31306 1
+1 31307 1
+31307 31307 1
+1 31308 1
+31308 31308 1
+1 31309 1
+31309 31309 1
+1 31310 1
+31310 31310 1
+1 31311 1
+31311 31311 1
+1 31312 1
+31312 31312 1
+1 31313 1
+31313 31313 1
+1 31314 1
+31314 31314 1
+1 31315 1
+31315 31315 1
+1 31316 1
+31316 31316 1
+1 31317 1
+31317 31317 1
+1 31318 1
+31318 31318 1
+1 31319 1
+31319 31319 1
+1 31320 1
+31320 31320 1
+1 31321 1
+31321 31321 1
+1 31322 1
+31322 31322 1
+1 31323 1
+31323 31323 1
+1 31324 1
+31324 31324 1
+1 31325 1
+31325 31325 1
+1 31326 1
+31326 31326 1
+1 31327 1
+31327 31327 1
+1 31328 1
+31328 31328 1
+1 31329 1
+31329 31329 1
+1 31330 1
+31330 31330 1
+1 31331 1
+31331 31331 1
+1 31332 1
+31332 31332 1
+1 31333 1
+31333 31333 1
+1 31334 1
+31334 31334 1
+1 31335 1
+31335 31335 1
+1 31336 1
+31336 31336 1
+1 31337 1
+31337 31337 1
+1 31338 1
+31338 31338 1
+1 31339 1
+31339 31339 1
+1 31340 1
+31340 31340 1
+1 31341 1
+31341 31341 1
+1 31342 1
+31342 31342 1
+1 31343 1
+31343 31343 1
+1 31344 1
+31344 31344 1
+1 31345 1
+31345 31345 1
+1 31346 1
+31346 31346 1
+1 31347 1
+31347 31347 1
+1 31348 1
+31348 31348 1
+1 31349 1
+31349 31349 1
+1 31350 1
+31350 31350 1
+1 31351 1
+31351 31351 1
+1 31352 1
+31352 31352 1
+1 31353 1
+31353 31353 1
+1 31354 1
+31354 31354 1
+1 31355 1
+31355 31355 1
+1 31356 1
+31356 31356 1
+1 31357 1
+31357 31357 1
+1 31358 1
+31358 31358 1
+1 31359 1
+31359 31359 1
+1 31360 1
+31360 31360 1
+1 31361 1
+31361 31361 1
+1 31362 1
+31362 31362 1
+1 31363 1
+31363 31363 1
+1 31364 1
+31364 31364 1
+1 31365 1
+31365 31365 1
+1 31366 1
+31366 31366 1
+1 31367 1
+31367 31367 1
+1 31368 1
+31368 31368 1
+1 31369 1
+31369 31369 1
+1 31370 1
+31370 31370 1
+1 31371 1
+31371 31371 1
+1 31372 1
+31372 31372 1
+1 31373 1
+31373 31373 1
+1 31374 1
+31374 31374 1
+1 31375 1
+31375 31375 1
+1 31376 1
+31376 31376 1
+1 31377 1
+31377 31377 1
+1 31378 1
+31378 31378 1
+1 31379 1
+31379 31379 1
+1 31380 1
+31380 31380 1
+1 31381 1
+31381 31381 1
+1 31382 1
+31382 31382 1
+1 31383 1
+31383 31383 1
+1 31384 1
+31384 31384 1
+1 31385 1
+31385 31385 1
+1 31386 1
+31386 31386 1
+1 31387 1
+31387 31387 1
+1 31388 1
+31388 31388 1
+1 31389 1
+31389 31389 1
+1 31390 1
+31390 31390 1
+1 31391 1
+31391 31391 1
+1 31392 1
+31392 31392 1
+1 31393 1
+31393 31393 1
+1 31394 1
+31394 31394 1
+1 31395 1
+31395 31395 1
+1 31396 1
+31396 31396 1
+1 31397 1
+31397 31397 1
+1 31398 1
+31398 31398 1
+1 31399 1
+31399 31399 1
+1 31400 1
+31400 31400 1
+1 31401 1
+31401 31401 1
+1 31402 1
+31402 31402 1
+1 31403 1
+31403 31403 1
+1 31404 1
+31404 31404 1
+1 31405 1
+31405 31405 1
+1 31406 1
+31406 31406 1
+1 31407 1
+31407 31407 1
+1 31408 1
+31408 31408 1
+1 31409 1
+31409 31409 1
+1 31410 1
+31410 31410 1
+1 31411 1
+31411 31411 1
+1 31412 1
+31412 31412 1
+1 31413 1
+31413 31413 1
+1 31414 1
+31414 31414 1
+1 31415 1
+31415 31415 1
+1 31416 1
+31416 31416 1
+1 31417 1
+31417 31417 1
+1 31418 1
+31418 31418 1
+1 31419 1
+31419 31419 1
+1 31420 1
+31420 31420 1
+1 31421 1
+31421 31421 1
+1 31422 1
+31422 31422 1
+1 31423 1
+31423 31423 1
+1 31424 1
+31424 31424 1
+1 31425 1
+31425 31425 1
+1 31426 1
+31426 31426 1
+1 31427 1
+31427 31427 1
+1 31428 1
+31428 31428 1
+1 31429 1
+31429 31429 1
+1 31430 1
+31430 31430 1
+1 31431 1
+31431 31431 1
+1 31432 1
+31432 31432 1
+1 31433 1
+31433 31433 1
+1 31434 1
+31434 31434 1
+1 31435 1
+31435 31435 1
+1 31436 1
+31436 31436 1
+1 31437 1
+31437 31437 1
+1 31438 1
+31438 31438 1
+1 31439 1
+31439 31439 1
+1 31440 1
+31440 31440 1
+1 31441 1
+31441 31441 1
+1 31442 1
+31442 31442 1
+1 31443 1
+31443 31443 1
+1 31444 1
+31444 31444 1
+1 31445 1
+31445 31445 1
+1 31446 1
+31446 31446 1
+1 31447 1
+31447 31447 1
+1 31448 1
+31448 31448 1
+1 31449 1
+31449 31449 1
+1 31450 1
+31450 31450 1
+1 31451 1
+31451 31451 1
+1 31452 1
+31452 31452 1
+1 31453 1
+31453 31453 1
+1 31454 1
+31454 31454 1
+1 31455 1
+31455 31455 1
+1 31456 1
+31456 31456 1
+1 31457 1
+31457 31457 1
+1 31458 1
+31458 31458 1
+1 31459 1
+31459 31459 1
+1 31460 1
+31460 31460 1
+1 31461 1
+31461 31461 1
+1 31462 1
+31462 31462 1
+1 31463 1
+31463 31463 1
+1 31464 1
+31464 31464 1
+1 31465 1
+31465 31465 1
+1 31466 1
+31466 31466 1
+1 31467 1
+31467 31467 1
+1 31468 1
+31468 31468 1
+1 31469 1
+31469 31469 1
+1 31470 1
+31470 31470 1
+1 31471 1
+31471 31471 1
+1 31472 1
+31472 31472 1
+1 31473 1
+31473 31473 1
+1 31474 1
+31474 31474 1
+1 31475 1
+31475 31475 1
+1 31476 1
+31476 31476 1
+1 31477 1
+31477 31477 1
+1 31478 1
+31478 31478 1
+1 31479 1
+31479 31479 1
+1 31480 1
+31480 31480 1
+1 31481 1
+31481 31481 1
+1 31482 1
+31482 31482 1
+1 31483 1
+31483 31483 1
+1 31484 1
+31484 31484 1
+1 31485 1
+31485 31485 1
+1 31486 1
+31486 31486 1
+1 31487 1
+31487 31487 1
+1 31488 1
+31488 31488 1
+1 31489 1
+31489 31489 1
+1 31490 1
+31490 31490 1
+1 31491 1
+31491 31491 1
+1 31492 1
+31492 31492 1
+1 31493 1
+31493 31493 1
+1 31494 1
+31494 31494 1
+1 31495 1
+31495 31495 1
+1 31496 1
+31496 31496 1
+1 31497 1
+31497 31497 1
+1 31498 1
+31498 31498 1
+1 31499 1
+31499 31499 1
+1 31500 1
+31500 31500 1
+1 31501 1
+31501 31501 1
+1 31502 1
+31502 31502 1
+1 31503 1
+31503 31503 1
+1 31504 1
+31504 31504 1
+1 31505 1
+31505 31505 1
+1 31506 1
+31506 31506 1
+1 31507 1
+31507 31507 1
+1 31508 1
+31508 31508 1
+1 31509 1
+31509 31509 1
+1 31510 1
+31510 31510 1
+1 31511 1
+31511 31511 1
+1 31512 1
+31512 31512 1
+1 31513 1
+31513 31513 1
+1 31514 1
+31514 31514 1
+1 31515 1
+31515 31515 1
+1 31516 1
+31516 31516 1
+1 31517 1
+31517 31517 1
+1 31518 1
+31518 31518 1
+1 31519 1
+31519 31519 1
+1 31520 1
+31520 31520 1
+1 31521 1
+31521 31521 1
+1 31522 1
+31522 31522 1
+1 31523 1
+31523 31523 1
+1 31524 1
+31524 31524 1
+1 31525 1
+31525 31525 1
+1 31526 1
+31526 31526 1
+1 31527 1
+31527 31527 1
+1 31528 1
+31528 31528 1
+1 31529 1
+31529 31529 1
+1 31530 1
+31530 31530 1
+1 31531 1
+31531 31531 1
+1 31532 1
+31532 31532 1
+1 31533 1
+31533 31533 1
+1 31534 1
+31534 31534 1
+1 31535 1
+31535 31535 1
+1 31536 1
+31536 31536 1
+1 31537 1
+31537 31537 1
+1 31538 1
+31538 31538 1
+1 31539 1
+31539 31539 1
+1 31540 1
+31540 31540 1
+1 31541 1
+31541 31541 1
+1 31542 1
+31542 31542 1
+1 31543 1
+31543 31543 1
+1 31544 1
+31544 31544 1
+1 31545 1
+31545 31545 1
+1 31546 1
+31546 31546 1
+1 31547 1
+31547 31547 1
+1 31548 1
+31548 31548 1
+1 31549 1
+31549 31549 1
+1 31550 1
+31550 31550 1
+1 31551 1
+31551 31551 1
+1 31552 1
+31552 31552 1
+1 31553 1
+31553 31553 1
+1 31554 1
+31554 31554 1
+1 31555 1
+31555 31555 1
+1 31556 1
+31556 31556 1
+1 31557 1
+31557 31557 1
+1 31558 1
+31558 31558 1
+1 31559 1
+31559 31559 1
+1 31560 1
+31560 31560 1
+1 31561 1
+31561 31561 1
+1 31562 1
+31562 31562 1
+1 31563 1
+31563 31563 1
+1 31564 1
+31564 31564 1
+1 31565 1
+31565 31565 1
+1 31566 1
+31566 31566 1
+1 31567 1
+31567 31567 1
+1 31568 1
+31568 31568 1
+1 31569 1
+31569 31569 1
+1 31570 1
+31570 31570 1
+1 31571 1
+31571 31571 1
+1 31572 1
+31572 31572 1
+1 31573 1
+31573 31573 1
+1 31574 1
+31574 31574 1
+1 31575 1
+31575 31575 1
+1 31576 1
+31576 31576 1
+1 31577 1
+31577 31577 1
+1 31578 1
+31578 31578 1
+1 31579 1
+31579 31579 1
+1 31580 1
+31580 31580 1
+1 31581 1
+31581 31581 1
+1 31582 1
+31582 31582 1
+1 31583 1
+31583 31583 1
+1 31584 1
+31584 31584 1
+1 31585 1
+31585 31585 1
+1 31586 1
+31586 31586 1
+1 31587 1
+31587 31587 1
+1 31588 1
+31588 31588 1
+1 31589 1
+31589 31589 1
+1 31590 1
+31590 31590 1
+1 31591 1
+31591 31591 1
+1 31592 1
+31592 31592 1
+1 31593 1
+31593 31593 1
+1 31594 1
+31594 31594 1
+1 31595 1
+31595 31595 1
+1 31596 1
+31596 31596 1
+1 31597 1
+31597 31597 1
+1 31598 1
+31598 31598 1
+1 31599 1
+31599 31599 1
+1 31600 1
+31600 31600 1
+1 31601 1
+31601 31601 1
+1 31602 1
+31602 31602 1
+1 31603 1
+31603 31603 1
+1 31604 1
+31604 31604 1
+1 31605 1
+31605 31605 1
+1 31606 1
+31606 31606 1
+1 31607 1
+31607 31607 1
+1 31608 1
+31608 31608 1
+1 31609 1
+31609 31609 1
+1 31610 1
+31610 31610 1
+1 31611 1
+31611 31611 1
+1 31612 1
+31612 31612 1
+1 31613 1
+31613 31613 1
+1 31614 1
+31614 31614 1
+1 31615 1
+31615 31615 1
+1 31616 1
+31616 31616 1
+1 31617 1
+31617 31617 1
+1 31618 1
+31618 31618 1
+1 31619 1
+31619 31619 1
+1 31620 1
+31620 31620 1
+1 31621 1
+31621 31621 1
+1 31622 1
+31622 31622 1
+1 31623 1
+31623 31623 1
+1 31624 1
+31624 31624 1
+1 31625 1
+31625 31625 1
+1 31626 1
+31626 31626 1
+1 31627 1
+31627 31627 1
+1 31628 1
+31628 31628 1
+1 31629 1
+31629 31629 1
+1 31630 1
+31630 31630 1
+1 31631 1
+31631 31631 1
+1 31632 1
+31632 31632 1
+1 31633 1
+31633 31633 1
+1 31634 1
+31634 31634 1
+1 31635 1
+31635 31635 1
+1 31636 1
+31636 31636 1
+1 31637 1
+31637 31637 1
+1 31638 1
+31638 31638 1
+1 31639 1
+31639 31639 1
+1 31640 1
+31640 31640 1
+1 31641 1
+31641 31641 1
+1 31642 1
+31642 31642 1
+1 31643 1
+31643 31643 1
+1 31644 1
+31644 31644 1
+1 31645 1
+31645 31645 1
+1 31646 1
+31646 31646 1
+1 31647 1
+31647 31647 1
+1 31648 1
+31648 31648 1
+1 31649 1
+31649 31649 1
+1 31650 1
+31650 31650 1
+1 31651 1
+31651 31651 1
+1 31652 1
+31652 31652 1
+1 31653 1
+31653 31653 1
+1 31654 1
+31654 31654 1
+1 31655 1
+31655 31655 1
+1 31656 1
+31656 31656 1
+1 31657 1
+31657 31657 1
+1 31658 1
+31658 31658 1
+1 31659 1
+31659 31659 1
+1 31660 1
+31660 31660 1
+1 31661 1
+31661 31661 1
+1 31662 1
+31662 31662 1
+1 31663 1
+31663 31663 1
+1 31664 1
+31664 31664 1
+1 31665 1
+31665 31665 1
+1 31666 1
+31666 31666 1
+1 31667 1
+31667 31667 1
+1 31668 1
+31668 31668 1
+1 31669 1
+31669 31669 1
+1 31670 1
+31670 31670 1
+1 31671 1
+31671 31671 1
+1 31672 1
+31672 31672 1
+1 31673 1
+31673 31673 1
+1 31674 1
+31674 31674 1
+1 31675 1
+31675 31675 1
+1 31676 1
+31676 31676 1
+1 31677 1
+31677 31677 1
+1 31678 1
+31678 31678 1
+1 31679 1
+31679 31679 1
+1 31680 1
+31680 31680 1
+1 31681 1
+31681 31681 1
+1 31682 1
+31682 31682 1
+1 31683 1
+31683 31683 1
+1 31684 1
+31684 31684 1
+1 31685 1
+31685 31685 1
+1 31686 1
+31686 31686 1
+1 31687 1
+31687 31687 1
+1 31688 1
+31688 31688 1
+1 31689 1
+31689 31689 1
+1 31690 1
+31690 31690 1
+1 31691 1
+31691 31691 1
+1 31692 1
+31692 31692 1
+1 31693 1
+31693 31693 1
+1 31694 1
+31694 31694 1
+1 31695 1
+31695 31695 1
+1 31696 1
+31696 31696 1
+1 31697 1
+31697 31697 1
+1 31698 1
+31698 31698 1
+1 31699 1
+31699 31699 1
+1 31700 1
+31700 31700 1
+1 31701 1
+31701 31701 1
+1 31702 1
+31702 31702 1
+1 31703 1
+31703 31703 1
+1 31704 1
+31704 31704 1
+1 31705 1
+31705 31705 1
+1 31706 1
+31706 31706 1
+1 31707 1
+31707 31707 1
+1 31708 1
+31708 31708 1
+1 31709 1
+31709 31709 1
+1 31710 1
+31710 31710 1
+1 31711 1
+31711 31711 1
+1 31712 1
+31712 31712 1
+1 31713 1
+31713 31713 1
+1 31714 1
+31714 31714 1
+1 31715 1
+31715 31715 1
+1 31716 1
+31716 31716 1
+1 31717 1
+31717 31717 1
+1 31718 1
+31718 31718 1
+1 31719 1
+31719 31719 1
+1 31720 1
+31720 31720 1
+1 31721 1
+31721 31721 1
+1 31722 1
+31722 31722 1
+1 31723 1
+31723 31723 1
+1 31724 1
+31724 31724 1
+1 31725 1
+31725 31725 1
+1 31726 1
+31726 31726 1
+1 31727 1
+31727 31727 1
+1 31728 1
+31728 31728 1
+1 31729 1
+31729 31729 1
+1 31730 1
+31730 31730 1
+1 31731 1
+31731 31731 1
+1 31732 1
+31732 31732 1
+1 31733 1
+31733 31733 1
+1 31734 1
+31734 31734 1
+1 31735 1
+31735 31735 1
+1 31736 1
+31736 31736 1
+1 31737 1
+31737 31737 1
+1 31738 1
+31738 31738 1
+1 31739 1
+31739 31739 1
+1 31740 1
+31740 31740 1
+1 31741 1
+31741 31741 1
+1 31742 1
+31742 31742 1
+1 31743 1
+31743 31743 1
+1 31744 1
+31744 31744 1
+1 31745 1
+31745 31745 1
+1 31746 1
+31746 31746 1
+1 31747 1
+31747 31747 1
+1 31748 1
+31748 31748 1
+1 31749 1
+31749 31749 1
+1 31750 1
+31750 31750 1
+1 31751 1
+31751 31751 1
+1 31752 1
+31752 31752 1
+1 31753 1
+31753 31753 1
+1 31754 1
+31754 31754 1
+1 31755 1
+31755 31755 1
+1 31756 1
+31756 31756 1
+1 31757 1
+31757 31757 1
+1 31758 1
+31758 31758 1
+1 31759 1
+31759 31759 1
+1 31760 1
+31760 31760 1
+1 31761 1
+31761 31761 1
+1 31762 1
+31762 31762 1
+1 31763 1
+31763 31763 1
+1 31764 1
+31764 31764 1
+1 31765 1
+31765 31765 1
+1 31766 1
+31766 31766 1
+1 31767 1
+31767 31767 1
+1 31768 1
+31768 31768 1
+1 31769 1
+31769 31769 1
+1 31770 1
+31770 31770 1
+1 31771 1
+31771 31771 1
+1 31772 1
+31772 31772 1
+1 31773 1
+31773 31773 1
+1 31774 1
+31774 31774 1
+1 31775 1
+31775 31775 1
+1 31776 1
+31776 31776 1
+1 31777 1
+31777 31777 1
+1 31778 1
+31778 31778 1
+1 31779 1
+31779 31779 1
+1 31780 1
+31780 31780 1
+1 31781 1
+31781 31781 1
+1 31782 1
+31782 31782 1
+1 31783 1
+31783 31783 1
+1 31784 1
+31784 31784 1
+1 31785 1
+31785 31785 1
+1 31786 1
+31786 31786 1
+1 31787 1
+31787 31787 1
+1 31788 1
+31788 31788 1
+1 31789 1
+31789 31789 1
+1 31790 1
+31790 31790 1
+1 31791 1
+31791 31791 1
+1 31792 1
+31792 31792 1
+1 31793 1
+31793 31793 1
+1 31794 1
+31794 31794 1
+1 31795 1
+31795 31795 1
+1 31796 1
+31796 31796 1
+1 31797 1
+31797 31797 1
+1 31798 1
+31798 31798 1
+1 31799 1
+31799 31799 1
+1 31800 1
+31800 31800 1
+1 31801 1
+31801 31801 1
+1 31802 1
+31802 31802 1
+1 31803 1
+31803 31803 1
+1 31804 1
+31804 31804 1
+1 31805 1
+31805 31805 1
+1 31806 1
+31806 31806 1
+1 31807 1
+31807 31807 1
+1 31808 1
+31808 31808 1
+1 31809 1
+31809 31809 1
+1 31810 1
+31810 31810 1
+1 31811 1
+31811 31811 1
+1 31812 1
+31812 31812 1
+1 31813 1
+31813 31813 1
+1 31814 1
+31814 31814 1
+1 31815 1
+31815 31815 1
+1 31816 1
+31816 31816 1
+1 31817 1
+31817 31817 1
+1 31818 1
+31818 31818 1
+1 31819 1
+31819 31819 1
+1 31820 1
+31820 31820 1
+1 31821 1
+31821 31821 1
+1 31822 1
+31822 31822 1
+1 31823 1
+31823 31823 1
+1 31824 1
+31824 31824 1
+1 31825 1
+31825 31825 1
+1 31826 1
+31826 31826 1
+1 31827 1
+31827 31827 1
+1 31828 1
+31828 31828 1
+1 31829 1
+31829 31829 1
+1 31830 1
+31830 31830 1
+1 31831 1
+31831 31831 1
+1 31832 1
+31832 31832 1
+1 31833 1
+31833 31833 1
+1 31834 1
+31834 31834 1
+1 31835 1
+31835 31835 1
+1 31836 1
+31836 31836 1
+1 31837 1
+31837 31837 1
+1 31838 1
+31838 31838 1
+1 31839 1
+31839 31839 1
+1 31840 1
+31840 31840 1
+1 31841 1
+31841 31841 1
+1 31842 1
+31842 31842 1
+1 31843 1
+31843 31843 1
+1 31844 1
+31844 31844 1
+1 31845 1
+31845 31845 1
+1 31846 1
+31846 31846 1
+1 31847 1
+31847 31847 1
+1 31848 1
+31848 31848 1
+1 31849 1
+31849 31849 1
+1 31850 1
+31850 31850 1
+1 31851 1
+31851 31851 1
+1 31852 1
+31852 31852 1
+1 31853 1
+31853 31853 1
+1 31854 1
+31854 31854 1
+1 31855 1
+31855 31855 1
+1 31856 1
+31856 31856 1
+1 31857 1
+31857 31857 1
+1 31858 1
+31858 31858 1
+1 31859 1
+31859 31859 1
+1 31860 1
+31860 31860 1
+1 31861 1
+31861 31861 1
+1 31862 1
+31862 31862 1
+1 31863 1
+31863 31863 1
+1 31864 1
+31864 31864 1
+1 31865 1
+31865 31865 1
+1 31866 1
+31866 31866 1
+1 31867 1
+31867 31867 1
+1 31868 1
+31868 31868 1
+1 31869 1
+31869 31869 1
+1 31870 1
+31870 31870 1
+1 31871 1
+31871 31871 1
+1 31872 1
+31872 31872 1
+1 31873 1
+31873 31873 1
+1 31874 1
+31874 31874 1
+1 31875 1
+31875 31875 1
+1 31876 1
+31876 31876 1
+1 31877 1
+31877 31877 1
+1 31878 1
+31878 31878 1
+1 31879 1
+31879 31879 1
+1 31880 1
+31880 31880 1
+1 31881 1
+31881 31881 1
+1 31882 1
+31882 31882 1
+1 31883 1
+31883 31883 1
+1 31884 1
+31884 31884 1
+1 31885 1
+31885 31885 1
+1 31886 1
+31886 31886 1
+1 31887 1
+31887 31887 1
+1 31888 1
+31888 31888 1
+1 31889 1
+31889 31889 1
+1 31890 1
+31890 31890 1
+1 31891 1
+31891 31891 1
+1 31892 1
+31892 31892 1
+1 31893 1
+31893 31893 1
+1 31894 1
+31894 31894 1
+1 31895 1
+31895 31895 1
+1 31896 1
+31896 31896 1
+1 31897 1
+31897 31897 1
+1 31898 1
+31898 31898 1
+1 31899 1
+31899 31899 1
+1 31900 1
+31900 31900 1
+1 31901 1
+31901 31901 1
+1 31902 1
+31902 31902 1
+1 31903 1
+31903 31903 1
+1 31904 1
+31904 31904 1
+1 31905 1
+31905 31905 1
+1 31906 1
+31906 31906 1
+1 31907 1
+31907 31907 1
+1 31908 1
+31908 31908 1
+1 31909 1
+31909 31909 1
+1 31910 1
+31910 31910 1
+1 31911 1
+31911 31911 1
+1 31912 1
+31912 31912 1
+1 31913 1
+31913 31913 1
+1 31914 1
+31914 31914 1
+1 31915 1
+31915 31915 1
+1 31916 1
+31916 31916 1
+1 31917 1
+31917 31917 1
+1 31918 1
+31918 31918 1
+1 31919 1
+31919 31919 1
+1 31920 1
+31920 31920 1
+1 31921 1
+31921 31921 1
+1 31922 1
+31922 31922 1
+1 31923 1
+31923 31923 1
+1 31924 1
+31924 31924 1
+1 31925 1
+31925 31925 1
+1 31926 1
+31926 31926 1
+1 31927 1
+31927 31927 1
+1 31928 1
+31928 31928 1
+1 31929 1
+31929 31929 1
+1 31930 1
+31930 31930 1
+1 31931 1
+31931 31931 1
+1 31932 1
+31932 31932 1
+1 31933 1
+31933 31933 1
+1 31934 1
+31934 31934 1
+1 31935 1
+31935 31935 1
+1 31936 1
+31936 31936 1
+1 31937 1
+31937 31937 1
+1 31938 1
+31938 31938 1
+1 31939 1
+31939 31939 1
+1 31940 1
+31940 31940 1
+1 31941 1
+31941 31941 1
+1 31942 1
+31942 31942 1
+1 31943 1
+31943 31943 1
+1 31944 1
+31944 31944 1
+1 31945 1
+31945 31945 1
+1 31946 1
+31946 31946 1
+1 31947 1
+31947 31947 1
+1 31948 1
+31948 31948 1
+1 31949 1
+31949 31949 1
+1 31950 1
+31950 31950 1
+1 31951 1
+31951 31951 1
+1 31952 1
+31952 31952 1
+1 31953 1
+31953 31953 1
+1 31954 1
+31954 31954 1
+1 31955 1
+31955 31955 1
+1 31956 1
+31956 31956 1
+1 31957 1
+31957 31957 1
+1 31958 1
+31958 31958 1
+1 31959 1
+31959 31959 1
+1 31960 1
+31960 31960 1
+1 31961 1
+31961 31961 1
+1 31962 1
+31962 31962 1
+1 31963 1
+31963 31963 1
+1 31964 1
+31964 31964 1
+1 31965 1
+31965 31965 1
+1 31966 1
+31966 31966 1
+1 31967 1
+31967 31967 1
+1 31968 1
+31968 31968 1
+1 31969 1
+31969 31969 1
+1 31970 1
+31970 31970 1
+1 31971 1
+31971 31971 1
+1 31972 1
+31972 31972 1
+1 31973 1
+31973 31973 1
+1 31974 1
+31974 31974 1
+1 31975 1
+31975 31975 1
+1 31976 1
+31976 31976 1
+1 31977 1
+31977 31977 1
+1 31978 1
+31978 31978 1
+1 31979 1
+31979 31979 1
+1 31980 1
+31980 31980 1
+1 31981 1
+31981 31981 1
+1 31982 1
+31982 31982 1
+1 31983 1
+31983 31983 1
+1 31984 1
+31984 31984 1
+1 31985 1
+31985 31985 1
+1 31986 1
+31986 31986 1
+1 31987 1
+31987 31987 1
+1 31988 1
+31988 31988 1
+1 31989 1
+31989 31989 1
+1 31990 1
+31990 31990 1
+1 31991 1
+31991 31991 1
+1 31992 1
+31992 31992 1
+1 31993 1
+31993 31993 1
+1 31994 1
+31994 31994 1
+1 31995 1
+31995 31995 1
+1 31996 1
+31996 31996 1
+1 31997 1
+31997 31997 1
+1 31998 1
+31998 31998 1
+1 31999 1
+31999 31999 1
+1 32000 1
+32000 32000 1
+1 32001 1
+32001 32001 1
+1 32002 1
+32002 32002 1
+1 32003 1
+32003 32003 1
+1 32004 1
+32004 32004 1
+1 32005 1
+32005 32005 1
+1 32006 1
+32006 32006 1
+1 32007 1
+32007 32007 1
+1 32008 1
+32008 32008 1
+1 32009 1
+32009 32009 1
+1 32010 1
+32010 32010 1
+1 32011 1
+32011 32011 1
+1 32012 1
+32012 32012 1
+1 32013 1
+32013 32013 1
+1 32014 1
+32014 32014 1
+1 32015 1
+32015 32015 1
+1 32016 1
+32016 32016 1
+1 32017 1
+32017 32017 1
+1 32018 1
+32018 32018 1
+1 32019 1
+32019 32019 1
+1 32020 1
+32020 32020 1
+1 32021 1
+32021 32021 1
+1 32022 1
+32022 32022 1
+1 32023 1
+32023 32023 1
+1 32024 1
+32024 32024 1
+1 32025 1
+32025 32025 1
+1 32026 1
+32026 32026 1
+1 32027 1
+32027 32027 1
+1 32028 1
+32028 32028 1
+1 32029 1
+32029 32029 1
+1 32030 1
+32030 32030 1
+1 32031 1
+32031 32031 1
+1 32032 1
+32032 32032 1
+1 32033 1
+32033 32033 1
+1 32034 1
+32034 32034 1
+1 32035 1
+32035 32035 1
+1 32036 1
+32036 32036 1
+1 32037 1
+32037 32037 1
+1 32038 1
+32038 32038 1
+1 32039 1
+32039 32039 1
+1 32040 1
+32040 32040 1
+1 32041 1
+32041 32041 1
+1 32042 1
+32042 32042 1
+1 32043 1
+32043 32043 1
+1 32044 1
+32044 32044 1
+1 32045 1
+32045 32045 1
+1 32046 1
+32046 32046 1
+1 32047 1
+32047 32047 1
+1 32048 1
+32048 32048 1
+1 32049 1
+32049 32049 1
+1 32050 1
+32050 32050 1
+1 32051 1
+32051 32051 1
+1 32052 1
+32052 32052 1
+1 32053 1
+32053 32053 1
+1 32054 1
+32054 32054 1
+1 32055 1
+32055 32055 1
+1 32056 1
+32056 32056 1
+1 32057 1
+32057 32057 1
+1 32058 1
+32058 32058 1
+1 32059 1
+32059 32059 1
+1 32060 1
+32060 32060 1
+1 32061 1
+32061 32061 1
+1 32062 1
+32062 32062 1
+1 32063 1
+32063 32063 1
+1 32064 1
+32064 32064 1
+1 32065 1
+32065 32065 1
+1 32066 1
+32066 32066 1
+1 32067 1
+32067 32067 1
+1 32068 1
+32068 32068 1
+1 32069 1
+32069 32069 1
+1 32070 1
+32070 32070 1
+1 32071 1
+32071 32071 1
+1 32072 1
+32072 32072 1
+1 32073 1
+32073 32073 1
+1 32074 1
+32074 32074 1
+1 32075 1
+32075 32075 1
+1 32076 1
+32076 32076 1
+1 32077 1
+32077 32077 1
+1 32078 1
+32078 32078 1
+1 32079 1
+32079 32079 1
+1 32080 1
+32080 32080 1
+1 32081 1
+32081 32081 1
+1 32082 1
+32082 32082 1
+1 32083 1
+32083 32083 1
+1 32084 1
+32084 32084 1
+1 32085 1
+32085 32085 1
+1 32086 1
+32086 32086 1
+1 32087 1
+32087 32087 1
+1 32088 1
+32088 32088 1
+1 32089 1
+32089 32089 1
+1 32090 1
+32090 32090 1
+1 32091 1
+32091 32091 1
+1 32092 1
+32092 32092 1
+1 32093 1
+32093 32093 1
+1 32094 1
+32094 32094 1
+1 32095 1
+32095 32095 1
+1 32096 1
+32096 32096 1
+1 32097 1
+32097 32097 1
+1 32098 1
+32098 32098 1
+1 32099 1
+32099 32099 1
+1 32100 1
+32100 32100 1
+1 32101 1
+32101 32101 1
+1 32102 1
+32102 32102 1
+1 32103 1
+32103 32103 1
+1 32104 1
+32104 32104 1
+1 32105 1
+32105 32105 1
+1 32106 1
+32106 32106 1
+1 32107 1
+32107 32107 1
+1 32108 1
+32108 32108 1
+1 32109 1
+32109 32109 1
+1 32110 1
+32110 32110 1
+1 32111 1
+32111 32111 1
+1 32112 1
+32112 32112 1
+1 32113 1
+32113 32113 1
+1 32114 1
+32114 32114 1
+1 32115 1
+32115 32115 1
+1 32116 1
+32116 32116 1
+1 32117 1
+32117 32117 1
+1 32118 1
+32118 32118 1
+1 32119 1
+32119 32119 1
+1 32120 1
+32120 32120 1
+1 32121 1
+32121 32121 1
+1 32122 1
+32122 32122 1
+1 32123 1
+32123 32123 1
+1 32124 1
+32124 32124 1
+1 32125 1
+32125 32125 1
+1 32126 1
+32126 32126 1
+1 32127 1
+32127 32127 1
+1 32128 1
+32128 32128 1
+1 32129 1
+32129 32129 1
+1 32130 1
+32130 32130 1
+1 32131 1
+32131 32131 1
+1 32132 1
+32132 32132 1
+1 32133 1
+32133 32133 1
+1 32134 1
+32134 32134 1
+1 32135 1
+32135 32135 1
+1 32136 1
+32136 32136 1
+1 32137 1
+32137 32137 1
+1 32138 1
+32138 32138 1
+1 32139 1
+32139 32139 1
+1 32140 1
+32140 32140 1
+1 32141 1
+32141 32141 1
+1 32142 1
+32142 32142 1
+1 32143 1
+32143 32143 1
+1 32144 1
+32144 32144 1
+1 32145 1
+32145 32145 1
+1 32146 1
+32146 32146 1
+1 32147 1
+32147 32147 1
+1 32148 1
+32148 32148 1
+1 32149 1
+32149 32149 1
+1 32150 1
+32150 32150 1
+1 32151 1
+32151 32151 1
+1 32152 1
+32152 32152 1
+1 32153 1
+32153 32153 1
+1 32154 1
+32154 32154 1
+1 32155 1
+32155 32155 1
+1 32156 1
+32156 32156 1
+1 32157 1
+32157 32157 1
+1 32158 1
+32158 32158 1
+1 32159 1
+32159 32159 1
+1 32160 1
+32160 32160 1
+1 32161 1
+32161 32161 1
+1 32162 1
+32162 32162 1
+1 32163 1
+32163 32163 1
+1 32164 1
+32164 32164 1
+1 32165 1
+32165 32165 1
+1 32166 1
+32166 32166 1
+1 32167 1
+32167 32167 1
+1 32168 1
+32168 32168 1
+1 32169 1
+32169 32169 1
+1 32170 1
+32170 32170 1
+1 32171 1
+32171 32171 1
+1 32172 1
+32172 32172 1
+1 32173 1
+32173 32173 1
+1 32174 1
+32174 32174 1
+1 32175 1
+32175 32175 1
+1 32176 1
+32176 32176 1
+1 32177 1
+32177 32177 1
+1 32178 1
+32178 32178 1
+1 32179 1
+32179 32179 1
+1 32180 1
+32180 32180 1
+1 32181 1
+32181 32181 1
+1 32182 1
+32182 32182 1
+1 32183 1
+32183 32183 1
+1 32184 1
+32184 32184 1
+1 32185 1
+32185 32185 1
+1 32186 1
+32186 32186 1
+1 32187 1
+32187 32187 1
+1 32188 1
+32188 32188 1
+1 32189 1
+32189 32189 1
+1 32190 1
+32190 32190 1
+1 32191 1
+32191 32191 1
+1 32192 1
+32192 32192 1
+1 32193 1
+32193 32193 1
+1 32194 1
+32194 32194 1
+1 32195 1
+32195 32195 1
+1 32196 1
+32196 32196 1
+1 32197 1
+32197 32197 1
+1 32198 1
+32198 32198 1
+1 32199 1
+32199 32199 1
+1 32200 1
+32200 32200 1
+1 32201 1
+32201 32201 1
+1 32202 1
+32202 32202 1
+1 32203 1
+32203 32203 1
+1 32204 1
+32204 32204 1
+1 32205 1
+32205 32205 1
+1 32206 1
+32206 32206 1
+1 32207 1
+32207 32207 1
+1 32208 1
+32208 32208 1
+1 32209 1
+32209 32209 1
+1 32210 1
+32210 32210 1
+1 32211 1
+32211 32211 1
+1 32212 1
+32212 32212 1
+1 32213 1
+32213 32213 1
+1 32214 1
+32214 32214 1
+1 32215 1
+32215 32215 1
+1 32216 1
+32216 32216 1
+1 32217 1
+32217 32217 1
+1 32218 1
+32218 32218 1
+1 32219 1
+32219 32219 1
+1 32220 1
+32220 32220 1
+1 32221 1
+32221 32221 1
+1 32222 1
+32222 32222 1
+1 32223 1
+32223 32223 1
+1 32224 1
+32224 32224 1
+1 32225 1
+32225 32225 1
+1 32226 1
+32226 32226 1
+1 32227 1
+32227 32227 1
+1 32228 1
+32228 32228 1
+1 32229 1
+32229 32229 1
+1 32230 1
+32230 32230 1
+1 32231 1
+32231 32231 1
+1 32232 1
+32232 32232 1
+1 32233 1
+32233 32233 1
+1 32234 1
+32234 32234 1
+1 32235 1
+32235 32235 1
+1 32236 1
+32236 32236 1
+1 32237 1
+32237 32237 1
+1 32238 1
+32238 32238 1
+1 32239 1
+32239 32239 1
+1 32240 1
+32240 32240 1
+1 32241 1
+32241 32241 1
+1 32242 1
+32242 32242 1
+1 32243 1
+32243 32243 1
+1 32244 1
+32244 32244 1
+1 32245 1
+32245 32245 1
+1 32246 1
+32246 32246 1
+1 32247 1
+32247 32247 1
+1 32248 1
+32248 32248 1
+1 32249 1
+32249 32249 1
+1 32250 1
+32250 32250 1
+1 32251 1
+32251 32251 1
+1 32252 1
+32252 32252 1
+1 32253 1
+32253 32253 1
+1 32254 1
+32254 32254 1
+1 32255 1
+32255 32255 1
+1 32256 1
+32256 32256 1
+1 32257 1
+32257 32257 1
+1 32258 1
+32258 32258 1
+1 32259 1
+32259 32259 1
+1 32260 1
+32260 32260 1
+1 32261 1
+32261 32261 1
+1 32262 1
+32262 32262 1
+1 32263 1
+32263 32263 1
+1 32264 1
+32264 32264 1
+1 32265 1
+32265 32265 1
+1 32266 1
+32266 32266 1
+1 32267 1
+32267 32267 1
+1 32268 1
+32268 32268 1
+1 32269 1
+32269 32269 1
+1 32270 1
+32270 32270 1
+1 32271 1
+32271 32271 1
+1 32272 1
+32272 32272 1
+1 32273 1
+32273 32273 1
+1 32274 1
+32274 32274 1
+1 32275 1
+32275 32275 1
+1 32276 1
+32276 32276 1
+1 32277 1
+32277 32277 1
+1 32278 1
+32278 32278 1
+1 32279 1
+32279 32279 1
+1 32280 1
+32280 32280 1
+1 32281 1
+32281 32281 1
+1 32282 1
+32282 32282 1
+1 32283 1
+32283 32283 1
+1 32284 1
+32284 32284 1
+1 32285 1
+32285 32285 1
+1 32286 1
+32286 32286 1
+1 32287 1
+32287 32287 1
+1 32288 1
+32288 32288 1
+1 32289 1
+32289 32289 1
+1 32290 1
+32290 32290 1
+1 32291 1
+32291 32291 1
+1 32292 1
+32292 32292 1
+1 32293 1
+32293 32293 1
+1 32294 1
+32294 32294 1
+1 32295 1
+32295 32295 1
+1 32296 1
+32296 32296 1
+1 32297 1
+32297 32297 1
+1 32298 1
+32298 32298 1
+1 32299 1
+32299 32299 1
+1 32300 1
+32300 32300 1
+1 32301 1
+32301 32301 1
+1 32302 1
+32302 32302 1
+1 32303 1
+32303 32303 1
+1 32304 1
+32304 32304 1
+1 32305 1
+32305 32305 1
+1 32306 1
+32306 32306 1
+1 32307 1
+32307 32307 1
+1 32308 1
+32308 32308 1
+1 32309 1
+32309 32309 1
+1 32310 1
+32310 32310 1
+1 32311 1
+32311 32311 1
+1 32312 1
+32312 32312 1
+1 32313 1
+32313 32313 1
+1 32314 1
+32314 32314 1
+1 32315 1
+32315 32315 1
+1 32316 1
+32316 32316 1
+1 32317 1
+32317 32317 1
+1 32318 1
+32318 32318 1
+1 32319 1
+32319 32319 1
+1 32320 1
+32320 32320 1
+1 32321 1
+32321 32321 1
+1 32322 1
+32322 32322 1
+1 32323 1
+32323 32323 1
+1 32324 1
+32324 32324 1
+1 32325 1
+32325 32325 1
+1 32326 1
+32326 32326 1
+1 32327 1
+32327 32327 1
+1 32328 1
+32328 32328 1
+1 32329 1
+32329 32329 1
+1 32330 1
+32330 32330 1
+1 32331 1
+32331 32331 1
+1 32332 1
+32332 32332 1
+1 32333 1
+32333 32333 1
+1 32334 1
+32334 32334 1
+1 32335 1
+32335 32335 1
+1 32336 1
+32336 32336 1
+1 32337 1
+32337 32337 1
+1 32338 1
+32338 32338 1
+1 32339 1
+32339 32339 1
+1 32340 1
+32340 32340 1
+1 32341 1
+32341 32341 1
+1 32342 1
+32342 32342 1
+1 32343 1
+32343 32343 1
+1 32344 1
+32344 32344 1
+1 32345 1
+32345 32345 1
+1 32346 1
+32346 32346 1
+1 32347 1
+32347 32347 1
+1 32348 1
+32348 32348 1
+1 32349 1
+32349 32349 1
+1 32350 1
+32350 32350 1
+1 32351 1
+32351 32351 1
+1 32352 1
+32352 32352 1
+1 32353 1
+32353 32353 1
+1 32354 1
+32354 32354 1
+1 32355 1
+32355 32355 1
+1 32356 1
+32356 32356 1
+1 32357 1
+32357 32357 1
+1 32358 1
+32358 32358 1
+1 32359 1
+32359 32359 1
+1 32360 1
+32360 32360 1
+1 32361 1
+32361 32361 1
+1 32362 1
+32362 32362 1
+1 32363 1
+32363 32363 1
+1 32364 1
+32364 32364 1
+1 32365 1
+32365 32365 1
+1 32366 1
+32366 32366 1
+1 32367 1
+32367 32367 1
+1 32368 1
+32368 32368 1
+1 32369 1
+32369 32369 1
+1 32370 1
+32370 32370 1
+1 32371 1
+32371 32371 1
+1 32372 1
+32372 32372 1
+1 32373 1
+32373 32373 1
+1 32374 1
+32374 32374 1
+1 32375 1
+32375 32375 1
+1 32376 1
+32376 32376 1
+1 32377 1
+32377 32377 1
+1 32378 1
+32378 32378 1
+1 32379 1
+32379 32379 1
+1 32380 1
+32380 32380 1
+1 32381 1
+32381 32381 1
+1 32382 1
+32382 32382 1
+1 32383 1
+32383 32383 1
+1 32384 1
+32384 32384 1
+1 32385 1
+32385 32385 1
+1 32386 1
+32386 32386 1
+1 32387 1
+32387 32387 1
+1 32388 1
+32388 32388 1
+1 32389 1
+32389 32389 1
+1 32390 1
+32390 32390 1
+1 32391 1
+32391 32391 1
+1 32392 1
+32392 32392 1
+1 32393 1
+32393 32393 1
+1 32394 1
+32394 32394 1
+1 32395 1
+32395 32395 1
+1 32396 1
+32396 32396 1
+1 32397 1
+32397 32397 1
+1 32398 1
+32398 32398 1
+1 32399 1
+32399 32399 1
+1 32400 1
+32400 32400 1
+1 32401 1
+32401 32401 1
+1 32402 1
+32402 32402 1
+1 32403 1
+32403 32403 1
+1 32404 1
+32404 32404 1
+1 32405 1
+32405 32405 1
+1 32406 1
+32406 32406 1
+1 32407 1
+32407 32407 1
+1 32408 1
+32408 32408 1
+1 32409 1
+32409 32409 1
+1 32410 1
+32410 32410 1
+1 32411 1
+32411 32411 1
+1 32412 1
+32412 32412 1
+1 32413 1
+32413 32413 1
+1 32414 1
+32414 32414 1
+1 32415 1
+32415 32415 1
+1 32416 1
+32416 32416 1
+1 32417 1
+32417 32417 1
+1 32418 1
+32418 32418 1
+1 32419 1
+32419 32419 1
+1 32420 1
+32420 32420 1
+1 32421 1
+32421 32421 1
+1 32422 1
+32422 32422 1
+1 32423 1
+32423 32423 1
+1 32424 1
+32424 32424 1
+1 32425 1
+32425 32425 1
+1 32426 1
+32426 32426 1
+1 32427 1
+32427 32427 1
+1 32428 1
+32428 32428 1
+1 32429 1
+32429 32429 1
+1 32430 1
+32430 32430 1
+1 32431 1
+32431 32431 1
+1 32432 1
+32432 32432 1
+1 32433 1
+32433 32433 1
+1 32434 1
+32434 32434 1
+1 32435 1
+32435 32435 1
+1 32436 1
+32436 32436 1
+1 32437 1
+32437 32437 1
+1 32438 1
+32438 32438 1
+1 32439 1
+32439 32439 1
+1 32440 1
+32440 32440 1
+1 32441 1
+32441 32441 1
+1 32442 1
+32442 32442 1
+1 32443 1
+32443 32443 1
+1 32444 1
+32444 32444 1
+1 32445 1
+32445 32445 1
+1 32446 1
+32446 32446 1
+1 32447 1
+32447 32447 1
+1 32448 1
+32448 32448 1
+1 32449 1
+32449 32449 1
+1 32450 1
+32450 32450 1
+1 32451 1
+32451 32451 1
+1 32452 1
+32452 32452 1
+1 32453 1
+32453 32453 1
+1 32454 1
+32454 32454 1
+1 32455 1
+32455 32455 1
+1 32456 1
+32456 32456 1
+1 32457 1
+32457 32457 1
+1 32458 1
+32458 32458 1
+1 32459 1
+32459 32459 1
+1 32460 1
+32460 32460 1
+1 32461 1
+32461 32461 1
+1 32462 1
+32462 32462 1
+1 32463 1
+32463 32463 1
+1 32464 1
+32464 32464 1
+1 32465 1
+32465 32465 1
+1 32466 1
+32466 32466 1
+1 32467 1
+32467 32467 1
+1 32468 1
+32468 32468 1
+1 32469 1
+32469 32469 1
+1 32470 1
+32470 32470 1
+1 32471 1
+32471 32471 1
+1 32472 1
+32472 32472 1
+1 32473 1
+32473 32473 1
+1 32474 1
+32474 32474 1
+1 32475 1
+32475 32475 1
+1 32476 1
+32476 32476 1
+1 32477 1
+32477 32477 1
+1 32478 1
+32478 32478 1
+1 32479 1
+32479 32479 1
+1 32480 1
+32480 32480 1
+1 32481 1
+32481 32481 1
+1 32482 1
+32482 32482 1
+1 32483 1
+32483 32483 1
+1 32484 1
+32484 32484 1
+1 32485 1
+32485 32485 1
+1 32486 1
+32486 32486 1
+1 32487 1
+32487 32487 1
+1 32488 1
+32488 32488 1
+1 32489 1
+32489 32489 1
+1 32490 1
+32490 32490 1
+1 32491 1
+32491 32491 1
+1 32492 1
+32492 32492 1
+1 32493 1
+32493 32493 1
+1 32494 1
+32494 32494 1
+1 32495 1
+32495 32495 1
+1 32496 1
+32496 32496 1
+1 32497 1
+32497 32497 1
+1 32498 1
+32498 32498 1
+1 32499 1
+32499 32499 1
+1 32500 1
+32500 32500 1
+1 32501 1
+32501 32501 1
+1 32502 1
+32502 32502 1
+1 32503 1
+32503 32503 1
+1 32504 1
+32504 32504 1
+1 32505 1
+32505 32505 1
+1 32506 1
+32506 32506 1
+1 32507 1
+32507 32507 1
+1 32508 1
+32508 32508 1
+1 32509 1
+32509 32509 1
+1 32510 1
+32510 32510 1
+1 32511 1
+32511 32511 1
+1 32512 1
+32512 32512 1
+1 32513 1
+32513 32513 1
+1 32514 1
+32514 32514 1
+1 32515 1
+32515 32515 1
+1 32516 1
+32516 32516 1
+1 32517 1
+32517 32517 1
+1 32518 1
+32518 32518 1
+1 32519 1
+32519 32519 1
+1 32520 1
+32520 32520 1
+1 32521 1
+32521 32521 1
+1 32522 1
+32522 32522 1
+1 32523 1
+32523 32523 1
+1 32524 1
+32524 32524 1
+1 32525 1
+32525 32525 1
+1 32526 1
+32526 32526 1
+1 32527 1
+32527 32527 1
+1 32528 1
+32528 32528 1
+1 32529 1
+32529 32529 1
+1 32530 1
+32530 32530 1
+1 32531 1
+32531 32531 1
+1 32532 1
+32532 32532 1
+1 32533 1
+32533 32533 1
+1 32534 1
+32534 32534 1
+1 32535 1
+32535 32535 1
+1 32536 1
+32536 32536 1
+1 32537 1
+32537 32537 1
+1 32538 1
+32538 32538 1
+1 32539 1
+32539 32539 1
+1 32540 1
+32540 32540 1
+1 32541 1
+32541 32541 1
+1 32542 1
+32542 32542 1
+1 32543 1
+32543 32543 1
+1 32544 1
+32544 32544 1
+1 32545 1
+32545 32545 1
+1 32546 1
+32546 32546 1
+1 32547 1
+32547 32547 1
+1 32548 1
+32548 32548 1
+1 32549 1
+32549 32549 1
+1 32550 1
+32550 32550 1
+1 32551 1
+32551 32551 1
+1 32552 1
+32552 32552 1
+1 32553 1
+32553 32553 1
+1 32554 1
+32554 32554 1
+1 32555 1
+32555 32555 1
+1 32556 1
+32556 32556 1
+1 32557 1
+32557 32557 1
+1 32558 1
+32558 32558 1
+1 32559 1
+32559 32559 1
+1 32560 1
+32560 32560 1
+1 32561 1
+32561 32561 1
+1 32562 1
+32562 32562 1
+1 32563 1
+32563 32563 1
+1 32564 1
+32564 32564 1
+1 32565 1
+32565 32565 1
+1 32566 1
+32566 32566 1
+1 32567 1
+32567 32567 1
+1 32568 1
+32568 32568 1
+1 32569 1
+32569 32569 1
+1 32570 1
+32570 32570 1
+1 32571 1
+32571 32571 1
+1 32572 1
+32572 32572 1
+1 32573 1
+32573 32573 1
+1 32574 1
+32574 32574 1
+1 32575 1
+32575 32575 1
+1 32576 1
+32576 32576 1
+1 32577 1
+32577 32577 1
+1 32578 1
+32578 32578 1
+1 32579 1
+32579 32579 1
+1 32580 1
+32580 32580 1
+1 32581 1
+32581 32581 1
+1 32582 1
+32582 32582 1
+1 32583 1
+32583 32583 1
+1 32584 1
+32584 32584 1
+1 32585 1
+32585 32585 1
+1 32586 1
+32586 32586 1
+1 32587 1
+32587 32587 1
+1 32588 1
+32588 32588 1
+1 32589 1
+32589 32589 1
+1 32590 1
+32590 32590 1
+1 32591 1
+32591 32591 1
+1 32592 1
+32592 32592 1
+1 32593 1
+32593 32593 1
+1 32594 1
+32594 32594 1
+1 32595 1
+32595 32595 1
+1 32596 1
+32596 32596 1
+1 32597 1
+32597 32597 1
+1 32598 1
+32598 32598 1
+1 32599 1
+32599 32599 1
+1 32600 1
+32600 32600 1
+1 32601 1
+32601 32601 1
+1 32602 1
+32602 32602 1
+1 32603 1
+32603 32603 1
+1 32604 1
+32604 32604 1
+1 32605 1
+32605 32605 1
+1 32606 1
+32606 32606 1
+1 32607 1
+32607 32607 1
+1 32608 1
+32608 32608 1
+1 32609 1
+32609 32609 1
+1 32610 1
+32610 32610 1
+1 32611 1
+32611 32611 1
+1 32612 1
+32612 32612 1
+1 32613 1
+32613 32613 1
+1 32614 1
+32614 32614 1
+1 32615 1
+32615 32615 1
+1 32616 1
+32616 32616 1
+1 32617 1
+32617 32617 1
+1 32618 1
+32618 32618 1
+1 32619 1
+32619 32619 1
+1 32620 1
+32620 32620 1
+1 32621 1
+32621 32621 1
+1 32622 1
+32622 32622 1
+1 32623 1
+32623 32623 1
+1 32624 1
+32624 32624 1
+1 32625 1
+32625 32625 1
+1 32626 1
+32626 32626 1
+1 32627 1
+32627 32627 1
+1 32628 1
+32628 32628 1
+1 32629 1
+32629 32629 1
+1 32630 1
+32630 32630 1
+1 32631 1
+32631 32631 1
+1 32632 1
+32632 32632 1
+1 32633 1
+32633 32633 1
+1 32634 1
+32634 32634 1
+1 32635 1
+32635 32635 1
+1 32636 1
+32636 32636 1
+1 32637 1
+32637 32637 1
+1 32638 1
+32638 32638 1
+1 32639 1
+32639 32639 1
+1 32640 1
+32640 32640 1
+1 32641 1
+32641 32641 1
+1 32642 1
+32642 32642 1
+1 32643 1
+32643 32643 1
+1 32644 1
+32644 32644 1
+1 32645 1
+32645 32645 1
+1 32646 1
+32646 32646 1
+1 32647 1
+32647 32647 1
+1 32648 1
+32648 32648 1
+1 32649 1
+32649 32649 1
+1 32650 1
+32650 32650 1
+1 32651 1
+32651 32651 1
+1 32652 1
+32652 32652 1
+1 32653 1
+32653 32653 1
+1 32654 1
+32654 32654 1
+1 32655 1
+32655 32655 1
+1 32656 1
+32656 32656 1
+1 32657 1
+32657 32657 1
+1 32658 1
+32658 32658 1
+1 32659 1
+32659 32659 1
+1 32660 1
+32660 32660 1
+1 32661 1
+32661 32661 1
+1 32662 1
+32662 32662 1
+1 32663 1
+32663 32663 1
+1 32664 1
+32664 32664 1
+1 32665 1
+32665 32665 1
+1 32666 1
+32666 32666 1
+1 32667 1
+32667 32667 1
+1 32668 1
+32668 32668 1
+1 32669 1
+32669 32669 1
+1 32670 1
+32670 32670 1
+1 32671 1
+32671 32671 1
+1 32672 1
+32672 32672 1
+1 32673 1
+32673 32673 1
+1 32674 1
+32674 32674 1
+1 32675 1
+32675 32675 1
+1 32676 1
+32676 32676 1
+1 32677 1
+32677 32677 1
+1 32678 1
+32678 32678 1
+1 32679 1
+32679 32679 1
+1 32680 1
+32680 32680 1
+1 32681 1
+32681 32681 1
+1 32682 1
+32682 32682 1
+1 32683 1
+32683 32683 1
+1 32684 1
+32684 32684 1
+1 32685 1
+32685 32685 1
+1 32686 1
+32686 32686 1
+1 32687 1
+32687 32687 1
+1 32688 1
+32688 32688 1
+1 32689 1
+32689 32689 1
+1 32690 1
+32690 32690 1
+1 32691 1
+32691 32691 1
+1 32692 1
+32692 32692 1
+1 32693 1
+32693 32693 1
+1 32694 1
+32694 32694 1
+1 32695 1
+32695 32695 1
+1 32696 1
+32696 32696 1
+1 32697 1
+32697 32697 1
+1 32698 1
+32698 32698 1
+1 32699 1
+32699 32699 1
+1 32700 1
+32700 32700 1
+1 32701 1
+32701 32701 1
+1 32702 1
+32702 32702 1
+1 32703 1
+32703 32703 1
+1 32704 1
+32704 32704 1
+1 32705 1
+32705 32705 1
+1 32706 1
+32706 32706 1
+1 32707 1
+32707 32707 1
+1 32708 1
+32708 32708 1
+1 32709 1
+32709 32709 1
+1 32710 1
+32710 32710 1
+1 32711 1
+32711 32711 1
+1 32712 1
+32712 32712 1
+1 32713 1
+32713 32713 1
+1 32714 1
+32714 32714 1
+1 32715 1
+32715 32715 1
+1 32716 1
+32716 32716 1
+1 32717 1
+32717 32717 1
+1 32718 1
+32718 32718 1
+1 32719 1
+32719 32719 1
+1 32720 1
+32720 32720 1
+1 32721 1
+32721 32721 1
+1 32722 1
+32722 32722 1
+1 32723 1
+32723 32723 1
+1 32724 1
+32724 32724 1
+1 32725 1
+32725 32725 1
+1 32726 1
+32726 32726 1
+1 32727 1
+32727 32727 1
+1 32728 1
+32728 32728 1
+1 32729 1
+32729 32729 1
+1 32730 1
+32730 32730 1
+1 32731 1
+32731 32731 1
+1 32732 1
+32732 32732 1
+1 32733 1
+32733 32733 1
+1 32734 1
+32734 32734 1
+1 32735 1
+32735 32735 1
+1 32736 1
+32736 32736 1
+1 32737 1
+32737 32737 1
+1 32738 1
+32738 32738 1
+1 32739 1
+32739 32739 1
+1 32740 1
+32740 32740 1
+1 32741 1
+32741 32741 1
+1 32742 1
+32742 32742 1
+1 32743 1
+32743 32743 1
+1 32744 1
+32744 32744 1
+1 32745 1
+32745 32745 1
+1 32746 1
+32746 32746 1
+1 32747 1
+32747 32747 1
+1 32748 1
+32748 32748 1
+1 32749 1
+32749 32749 1
+1 32750 1
+32750 32750 1
+1 32751 1
+32751 32751 1
+1 32752 1
+32752 32752 1
+1 32753 1
+32753 32753 1
+1 32754 1
+32754 32754 1
+1 32755 1
+32755 32755 1
+1 32756 1
+32756 32756 1
+1 32757 1
+32757 32757 1
+1 32758 1
+32758 32758 1
+1 32759 1
+32759 32759 1
+1 32760 1
+32760 32760 1
+1 32761 1
+32761 32761 1
+1 32762 1
+32762 32762 1
+1 32763 1
+32763 32763 1
+1 32764 1
+32764 32764 1
+1 32765 1
+32765 32765 1
+1 32766 1
+32766 32766 1
+1 32767 1
+32767 32767 1
+1 32768 1
+32768 32768 1
+1 32769 1
+32769 32769 1
+1 32770 1
+32770 32770 1
+1 32771 1
+32771 32771 1
+1 32772 1
+32772 32772 1
+1 32773 1
+32773 32773 1
+1 32774 1
+32774 32774 1
+1 32775 1
+32775 32775 1
+1 32776 1
+32776 32776 1
+1 32777 1
+32777 32777 1
+1 32778 1
+32778 32778 1
+1 32779 1
+32779 32779 1
+1 32780 1
+32780 32780 1
+1 32781 1
+32781 32781 1
+1 32782 1
+32782 32782 1
+1 32783 1
+32783 32783 1
+1 32784 1
+32784 32784 1
+1 32785 1
+32785 32785 1
+1 32786 1
+32786 32786 1
+1 32787 1
+32787 32787 1
+1 32788 1
+32788 32788 1
+1 32789 1
+32789 32789 1
+1 32790 1
+32790 32790 1
+1 32791 1
+32791 32791 1
+1 32792 1
+32792 32792 1
+1 32793 1
+32793 32793 1
+1 32794 1
+32794 32794 1
+1 32795 1
+32795 32795 1
+1 32796 1
+32796 32796 1
+1 32797 1
+32797 32797 1
+1 32798 1
+32798 32798 1
+1 32799 1
+32799 32799 1
+1 32800 1
+32800 32800 1
+1 32801 1
+32801 32801 1
+1 32802 1
+32802 32802 1
+1 32803 1
+32803 32803 1
+1 32804 1
+32804 32804 1
+1 32805 1
+32805 32805 1
+1 32806 1
+32806 32806 1
+1 32807 1
+32807 32807 1
+1 32808 1
+32808 32808 1
+1 32809 1
+32809 32809 1
+1 32810 1
+32810 32810 1
+1 32811 1
+32811 32811 1
+1 32812 1
+32812 32812 1
+1 32813 1
+32813 32813 1
+1 32814 1
+32814 32814 1
+1 32815 1
+32815 32815 1
+1 32816 1
+32816 32816 1
+1 32817 1
+32817 32817 1
+1 32818 1
+32818 32818 1
+1 32819 1
+32819 32819 1
+1 32820 1
+32820 32820 1
+1 32821 1
+32821 32821 1
+1 32822 1
+32822 32822 1
+1 32823 1
+32823 32823 1
+1 32824 1
+32824 32824 1
+1 32825 1
+32825 32825 1
+1 32826 1
+32826 32826 1
+1 32827 1
+32827 32827 1
+1 32828 1
+32828 32828 1
+1 32829 1
+32829 32829 1
+1 32830 1
+32830 32830 1
+1 32831 1
+32831 32831 1
+1 32832 1
+32832 32832 1
+1 32833 1
+32833 32833 1
+1 32834 1
+32834 32834 1
+1 32835 1
+32835 32835 1
+1 32836 1
+32836 32836 1
+1 32837 1
+32837 32837 1
+1 32838 1
+32838 32838 1
+1 32839 1
+32839 32839 1
+1 32840 1
+32840 32840 1
+1 32841 1
+32841 32841 1
+1 32842 1
+32842 32842 1
+1 32843 1
+32843 32843 1
+1 32844 1
+32844 32844 1
+1 32845 1
+32845 32845 1
+1 32846 1
+32846 32846 1
+1 32847 1
+32847 32847 1
+1 32848 1
+32848 32848 1
+1 32849 1
+32849 32849 1
+1 32850 1
+32850 32850 1
+1 32851 1
+32851 32851 1
+1 32852 1
+32852 32852 1
+1 32853 1
+32853 32853 1
+1 32854 1
+32854 32854 1
+1 32855 1
+32855 32855 1
+1 32856 1
+32856 32856 1
+1 32857 1
+32857 32857 1
+1 32858 1
+32858 32858 1
+1 32859 1
+32859 32859 1
+1 32860 1
+32860 32860 1
+1 32861 1
+32861 32861 1
+1 32862 1
+32862 32862 1
+1 32863 1
+32863 32863 1
+1 32864 1
+32864 32864 1
+1 32865 1
+32865 32865 1
+1 32866 1
+32866 32866 1
+1 32867 1
+32867 32867 1
+1 32868 1
+32868 32868 1
+1 32869 1
+32869 32869 1
+1 32870 1
+32870 32870 1
+1 32871 1
+32871 32871 1
+1 32872 1
+32872 32872 1
+1 32873 1
+32873 32873 1
+1 32874 1
+32874 32874 1
+1 32875 1
+32875 32875 1
+1 32876 1
+32876 32876 1
+1 32877 1
+32877 32877 1
+1 32878 1
+32878 32878 1
+1 32879 1
+32879 32879 1
+1 32880 1
+32880 32880 1
+1 32881 1
+32881 32881 1
+1 32882 1
+32882 32882 1
+1 32883 1
+32883 32883 1
+1 32884 1
+32884 32884 1
+1 32885 1
+32885 32885 1
+1 32886 1
+32886 32886 1
+1 32887 1
+32887 32887 1
+1 32888 1
+32888 32888 1
+1 32889 1
+32889 32889 1
+1 32890 1
+32890 32890 1
+1 32891 1
+32891 32891 1
+1 32892 1
+32892 32892 1
+1 32893 1
+32893 32893 1
+1 32894 1
+32894 32894 1
+1 32895 1
+32895 32895 1
+1 32896 1
+32896 32896 1
+1 32897 1
+32897 32897 1
+1 32898 1
+32898 32898 1
+1 32899 1
+32899 32899 1
+1 32900 1
+32900 32900 1
+1 32901 1
+32901 32901 1
+1 32902 1
+32902 32902 1
+1 32903 1
+32903 32903 1
+1 32904 1
+32904 32904 1
+1 32905 1
+32905 32905 1
+1 32906 1
+32906 32906 1
+1 32907 1
+32907 32907 1
+1 32908 1
+32908 32908 1
+1 32909 1
+32909 32909 1
+1 32910 1
+32910 32910 1
+1 32911 1
+32911 32911 1
+1 32912 1
+32912 32912 1
+1 32913 1
+32913 32913 1
+1 32914 1
+32914 32914 1
+1 32915 1
+32915 32915 1
+1 32916 1
+32916 32916 1
+1 32917 1
+32917 32917 1
+1 32918 1
+32918 32918 1
+1 32919 1
+32919 32919 1
+1 32920 1
+32920 32920 1
+1 32921 1
+32921 32921 1
+1 32922 1
+32922 32922 1
+1 32923 1
+32923 32923 1
+1 32924 1
+32924 32924 1
+1 32925 1
+32925 32925 1
+1 32926 1
+32926 32926 1
+1 32927 1
+32927 32927 1
+1 32928 1
+32928 32928 1
+1 32929 1
+32929 32929 1
+1 32930 1
+32930 32930 1
+1 32931 1
+32931 32931 1
+1 32932 1
+32932 32932 1
+1 32933 1
+32933 32933 1
+1 32934 1
+32934 32934 1
+1 32935 1
+32935 32935 1
+1 32936 1
+32936 32936 1
+1 32937 1
+32937 32937 1
+1 32938 1
+32938 32938 1
+1 32939 1
+32939 32939 1
+1 32940 1
+32940 32940 1
+1 32941 1
+32941 32941 1
+1 32942 1
+32942 32942 1
+1 32943 1
+32943 32943 1
+1 32944 1
+32944 32944 1
+1 32945 1
+32945 32945 1
+1 32946 1
+32946 32946 1
+1 32947 1
+32947 32947 1
+1 32948 1
+32948 32948 1
+1 32949 1
+32949 32949 1
+1 32950 1
+32950 32950 1
+1 32951 1
+32951 32951 1
+1 32952 1
+32952 32952 1
+1 32953 1
+32953 32953 1
+1 32954 1
+32954 32954 1
+1 32955 1
+32955 32955 1
+1 32956 1
+32956 32956 1
+1 32957 1
+32957 32957 1
+1 32958 1
+32958 32958 1
+1 32959 1
+32959 32959 1
+1 32960 1
+32960 32960 1
+1 32961 1
+32961 32961 1
+1 32962 1
+32962 32962 1
+1 32963 1
+32963 32963 1
+1 32964 1
+32964 32964 1
+1 32965 1
+32965 32965 1
+1 32966 1
+32966 32966 1
+1 32967 1
+32967 32967 1
+1 32968 1
+32968 32968 1
+1 32969 1
+32969 32969 1
+1 32970 1
+32970 32970 1
+1 32971 1
+32971 32971 1
+1 32972 1
+32972 32972 1
+1 32973 1
+32973 32973 1
+1 32974 1
+32974 32974 1
+1 32975 1
+32975 32975 1
+1 32976 1
+32976 32976 1
+1 32977 1
+32977 32977 1
+1 32978 1
+32978 32978 1
+1 32979 1
+32979 32979 1
+1 32980 1
+32980 32980 1
+1 32981 1
+32981 32981 1
+1 32982 1
+32982 32982 1
+1 32983 1
+32983 32983 1
+1 32984 1
+32984 32984 1
+1 32985 1
+32985 32985 1
+1 32986 1
+32986 32986 1
+1 32987 1
+32987 32987 1
+1 32988 1
+32988 32988 1
+1 32989 1
+32989 32989 1
+1 32990 1
+32990 32990 1
+1 32991 1
+32991 32991 1
+1 32992 1
+32992 32992 1
+1 32993 1
+32993 32993 1
+1 32994 1
+32994 32994 1
+1 32995 1
+32995 32995 1
+1 32996 1
+32996 32996 1
+1 32997 1
+32997 32997 1
+1 32998 1
+32998 32998 1
+1 32999 1
+32999 32999 1
+1 33000 1
+33000 33000 1
+1 33001 1
+33001 33001 1
+1 33002 1
+33002 33002 1
+1 33003 1
+33003 33003 1
+1 33004 1
+33004 33004 1
+1 33005 1
+33005 33005 1
+1 33006 1
+33006 33006 1
+1 33007 1
+33007 33007 1
+1 33008 1
+33008 33008 1
+1 33009 1
+33009 33009 1
+1 33010 1
+33010 33010 1
+1 33011 1
+33011 33011 1
+1 33012 1
+33012 33012 1
+1 33013 1
+33013 33013 1
+1 33014 1
+33014 33014 1
+1 33015 1
+33015 33015 1
+1 33016 1
+33016 33016 1
+1 33017 1
+33017 33017 1
+1 33018 1
+33018 33018 1
+1 33019 1
+33019 33019 1
+1 33020 1
+33020 33020 1
+1 33021 1
+33021 33021 1
+1 33022 1
+33022 33022 1
+1 33023 1
+33023 33023 1
+1 33024 1
+33024 33024 1
+1 33025 1
+33025 33025 1
+1 33026 1
+33026 33026 1
+1 33027 1
+33027 33027 1
+1 33028 1
+33028 33028 1
+1 33029 1
+33029 33029 1
+1 33030 1
+33030 33030 1
+1 33031 1
+33031 33031 1
+1 33032 1
+33032 33032 1
+1 33033 1
+33033 33033 1
+1 33034 1
+33034 33034 1
+1 33035 1
+33035 33035 1
+1 33036 1
+33036 33036 1
+1 33037 1
+33037 33037 1
+1 33038 1
+33038 33038 1
+1 33039 1
+33039 33039 1
+1 33040 1
+33040 33040 1
+1 33041 1
+33041 33041 1
+1 33042 1
+33042 33042 1
+1 33043 1
+33043 33043 1
+1 33044 1
+33044 33044 1
+1 33045 1
+33045 33045 1
+1 33046 1
+33046 33046 1
+1 33047 1
+33047 33047 1
+1 33048 1
+33048 33048 1
+1 33049 1
+33049 33049 1
+1 33050 1
+33050 33050 1
+1 33051 1
+33051 33051 1
+1 33052 1
+33052 33052 1
+1 33053 1
+33053 33053 1
+1 33054 1
+33054 33054 1
+1 33055 1
+33055 33055 1
+1 33056 1
+33056 33056 1
+1 33057 1
+33057 33057 1
+1 33058 1
+33058 33058 1
+1 33059 1
+33059 33059 1
+1 33060 1
+33060 33060 1
+1 33061 1
+33061 33061 1
+1 33062 1
+33062 33062 1
+1 33063 1
+33063 33063 1
+1 33064 1
+33064 33064 1
+1 33065 1
+33065 33065 1
+1 33066 1
+33066 33066 1
+1 33067 1
+33067 33067 1
+1 33068 1
+33068 33068 1
+1 33069 1
+33069 33069 1
+1 33070 1
+33070 33070 1
+1 33071 1
+33071 33071 1
+1 33072 1
+33072 33072 1
+1 33073 1
+33073 33073 1
+1 33074 1
+33074 33074 1
+1 33075 1
+33075 33075 1
+1 33076 1
+33076 33076 1
+1 33077 1
+33077 33077 1
+1 33078 1
+33078 33078 1
+1 33079 1
+33079 33079 1
+1 33080 1
+33080 33080 1
+1 33081 1
+33081 33081 1
+1 33082 1
+33082 33082 1
+1 33083 1
+33083 33083 1
+1 33084 1
+33084 33084 1
+1 33085 1
+33085 33085 1
+1 33086 1
+33086 33086 1
+1 33087 1
+33087 33087 1
+1 33088 1
+33088 33088 1
+1 33089 1
+33089 33089 1
+1 33090 1
+33090 33090 1
+1 33091 1
+33091 33091 1
+1 33092 1
+33092 33092 1
+1 33093 1
+33093 33093 1
+1 33094 1
+33094 33094 1
+1 33095 1
+33095 33095 1
+1 33096 1
+33096 33096 1
+1 33097 1
+33097 33097 1
+1 33098 1
+33098 33098 1
+1 33099 1
+33099 33099 1
+1 33100 1
+33100 33100 1
+1 33101 1
+33101 33101 1
+1 33102 1
+33102 33102 1
+1 33103 1
+33103 33103 1
+1 33104 1
+33104 33104 1
+1 33105 1
+33105 33105 1
+1 33106 1
+33106 33106 1
+1 33107 1
+33107 33107 1
+1 33108 1
+33108 33108 1
+1 33109 1
+33109 33109 1
+1 33110 1
+33110 33110 1
+1 33111 1
+33111 33111 1
+1 33112 1
+33112 33112 1
+1 33113 1
+33113 33113 1
+1 33114 1
+33114 33114 1
+1 33115 1
+33115 33115 1
+1 33116 1
+33116 33116 1
+1 33117 1
+33117 33117 1
+1 33118 1
+33118 33118 1
+1 33119 1
+33119 33119 1
+1 33120 1
+33120 33120 1
+1 33121 1
+33121 33121 1
+1 33122 1
+33122 33122 1
+1 33123 1
+33123 33123 1
+1 33124 1
+33124 33124 1
+1 33125 1
+33125 33125 1
+1 33126 1
+33126 33126 1
+1 33127 1
+33127 33127 1
+1 33128 1
+33128 33128 1
+1 33129 1
+33129 33129 1
+1 33130 1
+33130 33130 1
+1 33131 1
+33131 33131 1
+1 33132 1
+33132 33132 1
+1 33133 1
+33133 33133 1
+1 33134 1
+33134 33134 1
+1 33135 1
+33135 33135 1
+1 33136 1
+33136 33136 1
+1 33137 1
+33137 33137 1
+1 33138 1
+33138 33138 1
+1 33139 1
+33139 33139 1
+1 33140 1
+33140 33140 1
+1 33141 1
+33141 33141 1
+1 33142 1
+33142 33142 1
+1 33143 1
+33143 33143 1
+1 33144 1
+33144 33144 1
+1 33145 1
+33145 33145 1
+1 33146 1
+33146 33146 1
+1 33147 1
+33147 33147 1
+1 33148 1
+33148 33148 1
+1 33149 1
+33149 33149 1
+1 33150 1
+33150 33150 1
+1 33151 1
+33151 33151 1
+1 33152 1
+33152 33152 1
+1 33153 1
+33153 33153 1
+1 33154 1
+33154 33154 1
+1 33155 1
+33155 33155 1
+1 33156 1
+33156 33156 1
+1 33157 1
+33157 33157 1
+1 33158 1
+33158 33158 1
+1 33159 1
+33159 33159 1
+1 33160 1
+33160 33160 1
+1 33161 1
+33161 33161 1
+1 33162 1
+33162 33162 1
+1 33163 1
+33163 33163 1
+1 33164 1
+33164 33164 1
+1 33165 1
+33165 33165 1
+1 33166 1
+33166 33166 1
+1 33167 1
+33167 33167 1
+1 33168 1
+33168 33168 1
+1 33169 1
+33169 33169 1
+1 33170 1
+33170 33170 1
+1 33171 1
+33171 33171 1
+1 33172 1
+33172 33172 1
+1 33173 1
+33173 33173 1
+1 33174 1
+33174 33174 1
+1 33175 1
+33175 33175 1
+1 33176 1
+33176 33176 1
+1 33177 1
+33177 33177 1
+1 33178 1
+33178 33178 1
+1 33179 1
+33179 33179 1
+1 33180 1
+33180 33180 1
+1 33181 1
+33181 33181 1
+1 33182 1
+33182 33182 1
+1 33183 1
+33183 33183 1
+1 33184 1
+33184 33184 1
+1 33185 1
+33185 33185 1
+1 33186 1
+33186 33186 1
+1 33187 1
+33187 33187 1
+1 33188 1
+33188 33188 1
+1 33189 1
+33189 33189 1
+1 33190 1
+33190 33190 1
+1 33191 1
+33191 33191 1
+1 33192 1
+33192 33192 1
+1 33193 1
+33193 33193 1
+1 33194 1
+33194 33194 1
+1 33195 1
+33195 33195 1
+1 33196 1
+33196 33196 1
+1 33197 1
+33197 33197 1
+1 33198 1
+33198 33198 1
+1 33199 1
+33199 33199 1
+1 33200 1
+33200 33200 1
+1 33201 1
+33201 33201 1
+1 33202 1
+33202 33202 1
+1 33203 1
+33203 33203 1
+1 33204 1
+33204 33204 1
+1 33205 1
+33205 33205 1
+1 33206 1
+33206 33206 1
+1 33207 1
+33207 33207 1
+1 33208 1
+33208 33208 1
+1 33209 1
+33209 33209 1
+1 33210 1
+33210 33210 1
+1 33211 1
+33211 33211 1
+1 33212 1
+33212 33212 1
+1 33213 1
+33213 33213 1
+1 33214 1
+33214 33214 1
+1 33215 1
+33215 33215 1
+1 33216 1
+33216 33216 1
+1 33217 1
+33217 33217 1
+1 33218 1
+33218 33218 1
+1 33219 1
+33219 33219 1
+1 33220 1
+33220 33220 1
+1 33221 1
+33221 33221 1
+1 33222 1
+33222 33222 1
+1 33223 1
+33223 33223 1
+1 33224 1
+33224 33224 1
+1 33225 1
+33225 33225 1
+1 33226 1
+33226 33226 1
+1 33227 1
+33227 33227 1
+1 33228 1
+33228 33228 1
+1 33229 1
+33229 33229 1
+1 33230 1
+33230 33230 1
+1 33231 1
+33231 33231 1
+1 33232 1
+33232 33232 1
+1 33233 1
+33233 33233 1
+1 33234 1
+33234 33234 1
+1 33235 1
+33235 33235 1
+1 33236 1
+33236 33236 1
+1 33237 1
+33237 33237 1
+1 33238 1
+33238 33238 1
+1 33239 1
+33239 33239 1
+1 33240 1
+33240 33240 1
+1 33241 1
+33241 33241 1
+1 33242 1
+33242 33242 1
+1 33243 1
+33243 33243 1
+1 33244 1
+33244 33244 1
+1 33245 1
+33245 33245 1
+1 33246 1
+33246 33246 1
+1 33247 1
+33247 33247 1
+1 33248 1
+33248 33248 1
+1 33249 1
+33249 33249 1
+1 33250 1
+33250 33250 1
+1 33251 1
+33251 33251 1
+1 33252 1
+33252 33252 1
+1 33253 1
+33253 33253 1
+1 33254 1
+33254 33254 1
+1 33255 1
+33255 33255 1
+1 33256 1
+33256 33256 1
+1 33257 1
+33257 33257 1
+1 33258 1
+33258 33258 1
+1 33259 1
+33259 33259 1
+1 33260 1
+33260 33260 1
+1 33261 1
+33261 33261 1
+1 33262 1
+33262 33262 1
+1 33263 1
+33263 33263 1
+1 33264 1
+33264 33264 1
+1 33265 1
+33265 33265 1
+1 33266 1
+33266 33266 1
+1 33267 1
+33267 33267 1
+1 33268 1
+33268 33268 1
+1 33269 1
+33269 33269 1
+1 33270 1
+33270 33270 1
+1 33271 1
+33271 33271 1
+1 33272 1
+33272 33272 1
+1 33273 1
+33273 33273 1
+1 33274 1
+33274 33274 1
+1 33275 1
+33275 33275 1
+1 33276 1
+33276 33276 1
+1 33277 1
+33277 33277 1
+1 33278 1
+33278 33278 1
+1 33279 1
+33279 33279 1
+1 33280 1
+33280 33280 1
+1 33281 1
+33281 33281 1
+1 33282 1
+33282 33282 1
+1 33283 1
+33283 33283 1
+1 33284 1
+33284 33284 1
+1 33285 1
+33285 33285 1
+1 33286 1
+33286 33286 1
+1 33287 1
+33287 33287 1
+1 33288 1
+33288 33288 1
+1 33289 1
+33289 33289 1
+1 33290 1
+33290 33290 1
+1 33291 1
+33291 33291 1
+1 33292 1
+33292 33292 1
+1 33293 1
+33293 33293 1
+1 33294 1
+33294 33294 1
+1 33295 1
+33295 33295 1
+1 33296 1
+33296 33296 1
+1 33297 1
+33297 33297 1
+1 33298 1
+33298 33298 1
+1 33299 1
+33299 33299 1
+1 33300 1
+33300 33300 1
+1 33301 1
+33301 33301 1
+1 33302 1
+33302 33302 1
+1 33303 1
+33303 33303 1
+1 33304 1
+33304 33304 1
+1 33305 1
+33305 33305 1
+1 33306 1
+33306 33306 1
+1 33307 1
+33307 33307 1
+1 33308 1
+33308 33308 1
+1 33309 1
+33309 33309 1
+1 33310 1
+33310 33310 1
+1 33311 1
+33311 33311 1
+1 33312 1
+33312 33312 1
+1 33313 1
+33313 33313 1
+1 33314 1
+33314 33314 1
+1 33315 1
+33315 33315 1
+1 33316 1
+33316 33316 1
+1 33317 1
+33317 33317 1
+1 33318 1
+33318 33318 1
+1 33319 1
+33319 33319 1
+1 33320 1
+33320 33320 1
+1 33321 1
+33321 33321 1
+1 33322 1
+33322 33322 1
+1 33323 1
+33323 33323 1
+1 33324 1
+33324 33324 1
+1 33325 1
+33325 33325 1
+1 33326 1
+33326 33326 1
+1 33327 1
+33327 33327 1
+1 33328 1
+33328 33328 1
+1 33329 1
+33329 33329 1
+1 33330 1
+33330 33330 1
+1 33331 1
+33331 33331 1
+1 33332 1
+33332 33332 1
+1 33333 1
+33333 33333 1
+1 33334 1
+33334 33334 1
+1 33335 1
+33335 33335 1
+1 33336 1
+33336 33336 1
+1 33337 1
+33337 33337 1
+1 33338 1
+33338 33338 1
+1 33339 1
+33339 33339 1
+1 33340 1
+33340 33340 1
+1 33341 1
+33341 33341 1
+1 33342 1
+33342 33342 1
+1 33343 1
+33343 33343 1
+1 33344 1
+33344 33344 1
+1 33345 1
+33345 33345 1
+1 33346 1
+33346 33346 1
+1 33347 1
+33347 33347 1
+1 33348 1
+33348 33348 1
+1 33349 1
+33349 33349 1
+1 33350 1
+33350 33350 1
+1 33351 1
+33351 33351 1
+1 33352 1
+33352 33352 1
+1 33353 1
+33353 33353 1
+1 33354 1
+33354 33354 1
+1 33355 1
+33355 33355 1
+1 33356 1
+33356 33356 1
+1 33357 1
+33357 33357 1
+1 33358 1
+33358 33358 1
+1 33359 1
+33359 33359 1
+1 33360 1
+33360 33360 1
+1 33361 1
+33361 33361 1
+1 33362 1
+33362 33362 1
+1 33363 1
+33363 33363 1
+1 33364 1
+33364 33364 1
+1 33365 1
+33365 33365 1
+1 33366 1
+33366 33366 1
+1 33367 1
+33367 33367 1
+1 33368 1
+33368 33368 1
+1 33369 1
+33369 33369 1
+1 33370 1
+33370 33370 1
+1 33371 1
+33371 33371 1
+1 33372 1
+33372 33372 1
+1 33373 1
+33373 33373 1
+1 33374 1
+33374 33374 1
+1 33375 1
+33375 33375 1
+1 33376 1
+33376 33376 1
+1 33377 1
+33377 33377 1
+1 33378 1
+33378 33378 1
+1 33379 1
+33379 33379 1
+1 33380 1
+33380 33380 1
+1 33381 1
+33381 33381 1
+1 33382 1
+33382 33382 1
+1 33383 1
+33383 33383 1
+1 33384 1
+33384 33384 1
+1 33385 1
+33385 33385 1
+1 33386 1
+33386 33386 1
+1 33387 1
+33387 33387 1
+1 33388 1
+33388 33388 1
+1 33389 1
+33389 33389 1
+1 33390 1
+33390 33390 1
+1 33391 1
+33391 33391 1
+1 33392 1
+33392 33392 1
+1 33393 1
+33393 33393 1
+1 33394 1
+33394 33394 1
+1 33395 1
+33395 33395 1
+1 33396 1
+33396 33396 1
+1 33397 1
+33397 33397 1
+1 33398 1
+33398 33398 1
+1 33399 1
+33399 33399 1
+1 33400 1
+33400 33400 1
+1 33401 1
+33401 33401 1
+1 33402 1
+33402 33402 1
+1 33403 1
+33403 33403 1
+1 33404 1
+33404 33404 1
+1 33405 1
+33405 33405 1
+1 33406 1
+33406 33406 1
+1 33407 1
+33407 33407 1
+1 33408 1
+33408 33408 1
+1 33409 1
+33409 33409 1
+1 33410 1
+33410 33410 1
+1 33411 1
+33411 33411 1
+1 33412 1
+33412 33412 1
+1 33413 1
+33413 33413 1
+1 33414 1
+33414 33414 1
+1 33415 1
+33415 33415 1
+1 33416 1
+33416 33416 1
+1 33417 1
+33417 33417 1
+1 33418 1
+33418 33418 1
+1 33419 1
+33419 33419 1
+1 33420 1
+33420 33420 1
+1 33421 1
+33421 33421 1
+1 33422 1
+33422 33422 1
+1 33423 1
+33423 33423 1
+1 33424 1
+33424 33424 1
+1 33425 1
+33425 33425 1
+1 33426 1
+33426 33426 1
+1 33427 1
+33427 33427 1
+1 33428 1
+33428 33428 1
+1 33429 1
+33429 33429 1
+1 33430 1
+33430 33430 1
+1 33431 1
+33431 33431 1
+1 33432 1
+33432 33432 1
+1 33433 1
+33433 33433 1
+1 33434 1
+33434 33434 1
+1 33435 1
+33435 33435 1
+1 33436 1
+33436 33436 1
+1 33437 1
+33437 33437 1
+1 33438 1
+33438 33438 1
+1 33439 1
+33439 33439 1
+1 33440 1
+33440 33440 1
+1 33441 1
+33441 33441 1
+1 33442 1
+33442 33442 1
+1 33443 1
+33443 33443 1
+1 33444 1
+33444 33444 1
+1 33445 1
+33445 33445 1
+1 33446 1
+33446 33446 1
+1 33447 1
+33447 33447 1
+1 33448 1
+33448 33448 1
+1 33449 1
+33449 33449 1
+1 33450 1
+33450 33450 1
+1 33451 1
+33451 33451 1
+1 33452 1
+33452 33452 1
+1 33453 1
+33453 33453 1
+1 33454 1
+33454 33454 1
+1 33455 1
+33455 33455 1
+1 33456 1
+33456 33456 1
+1 33457 1
+33457 33457 1
+1 33458 1
+33458 33458 1
+1 33459 1
+33459 33459 1
+1 33460 1
+33460 33460 1
+1 33461 1
+33461 33461 1
+1 33462 1
+33462 33462 1
+1 33463 1
+33463 33463 1
+1 33464 1
+33464 33464 1
+1 33465 1
+33465 33465 1
+1 33466 1
+33466 33466 1
+1 33467 1
+33467 33467 1
+1 33468 1
+33468 33468 1
+1 33469 1
+33469 33469 1
+1 33470 1
+33470 33470 1
+1 33471 1
+33471 33471 1
+1 33472 1
+33472 33472 1
+1 33473 1
+33473 33473 1
+1 33474 1
+33474 33474 1
+1 33475 1
+33475 33475 1
+1 33476 1
+33476 33476 1
+1 33477 1
+33477 33477 1
+1 33478 1
+33478 33478 1
+1 33479 1
+33479 33479 1
+1 33480 1
+33480 33480 1
+1 33481 1
+33481 33481 1
+1 33482 1
+33482 33482 1
+1 33483 1
+33483 33483 1
+1 33484 1
+33484 33484 1
+1 33485 1
+33485 33485 1
+1 33486 1
+33486 33486 1
+1 33487 1
+33487 33487 1
+1 33488 1
+33488 33488 1
+1 33489 1
+33489 33489 1
+1 33490 1
+33490 33490 1
+1 33491 1
+33491 33491 1
+1 33492 1
+33492 33492 1
+1 33493 1
+33493 33493 1
+1 33494 1
+33494 33494 1
+1 33495 1
+33495 33495 1
+1 33496 1
+33496 33496 1
+1 33497 1
+33497 33497 1
+1 33498 1
+33498 33498 1
+1 33499 1
+33499 33499 1
+1 33500 1
+33500 33500 1
+1 33501 1
+33501 33501 1
+1 33502 1
+33502 33502 1
+1 33503 1
+33503 33503 1
+1 33504 1
+33504 33504 1
+1 33505 1
+33505 33505 1
+1 33506 1
+33506 33506 1
+1 33507 1
+33507 33507 1
+1 33508 1
+33508 33508 1
+1 33509 1
+33509 33509 1
+1 33510 1
+33510 33510 1
+1 33511 1
+33511 33511 1
+1 33512 1
+33512 33512 1
+1 33513 1
+33513 33513 1
+1 33514 1
+33514 33514 1
+1 33515 1
+33515 33515 1
+1 33516 1
+33516 33516 1
+1 33517 1
+33517 33517 1
+1 33518 1
+33518 33518 1
+1 33519 1
+33519 33519 1
+1 33520 1
+33520 33520 1
+1 33521 1
+33521 33521 1
+1 33522 1
+33522 33522 1
+1 33523 1
+33523 33523 1
+1 33524 1
+33524 33524 1
+1 33525 1
+33525 33525 1
+1 33526 1
+33526 33526 1
+1 33527 1
+33527 33527 1
+1 33528 1
+33528 33528 1
+1 33529 1
+33529 33529 1
+1 33530 1
+33530 33530 1
+1 33531 1
+33531 33531 1
+1 33532 1
+33532 33532 1
+1 33533 1
+33533 33533 1
+1 33534 1
+33534 33534 1
+1 33535 1
+33535 33535 1
+1 33536 1
+33536 33536 1
+1 33537 1
+33537 33537 1
+1 33538 1
+33538 33538 1
+1 33539 1
+33539 33539 1
+1 33540 1
+33540 33540 1
+1 33541 1
+33541 33541 1
+1 33542 1
+33542 33542 1
+1 33543 1
+33543 33543 1
+1 33544 1
+33544 33544 1
+1 33545 1
+33545 33545 1
+1 33546 1
+33546 33546 1
+1 33547 1
+33547 33547 1
+1 33548 1
+33548 33548 1
+1 33549 1
+33549 33549 1
+1 33550 1
+33550 33550 1
+1 33551 1
+33551 33551 1
+1 33552 1
+33552 33552 1
+1 33553 1
+33553 33553 1
+1 33554 1
+33554 33554 1
+1 33555 1
+33555 33555 1
+1 33556 1
+33556 33556 1
+1 33557 1
+33557 33557 1
+1 33558 1
+33558 33558 1
+1 33559 1
+33559 33559 1
+1 33560 1
+33560 33560 1
+1 33561 1
+33561 33561 1
+1 33562 1
+33562 33562 1
+1 33563 1
+33563 33563 1
+1 33564 1
+33564 33564 1
+1 33565 1
+33565 33565 1
+1 33566 1
+33566 33566 1
+1 33567 1
+33567 33567 1
+1 33568 1
+33568 33568 1
+1 33569 1
+33569 33569 1
+1 33570 1
+33570 33570 1
+1 33571 1
+33571 33571 1
+1 33572 1
+33572 33572 1
+1 33573 1
+33573 33573 1
+1 33574 1
+33574 33574 1
+1 33575 1
+33575 33575 1
+1 33576 1
+33576 33576 1
+1 33577 1
+33577 33577 1
+1 33578 1
+33578 33578 1
+1 33579 1
+33579 33579 1
+1 33580 1
+33580 33580 1
+1 33581 1
+33581 33581 1
+1 33582 1
+33582 33582 1
+1 33583 1
+33583 33583 1
+1 33584 1
+33584 33584 1
+1 33585 1
+33585 33585 1
+1 33586 1
+33586 33586 1
+1 33587 1
+33587 33587 1
+1 33588 1
+33588 33588 1
+1 33589 1
+33589 33589 1
+1 33590 1
+33590 33590 1
+1 33591 1
+33591 33591 1
+1 33592 1
+33592 33592 1
+1 33593 1
+33593 33593 1
+1 33594 1
+33594 33594 1
+1 33595 1
+33595 33595 1
+1 33596 1
+33596 33596 1
+1 33597 1
+33597 33597 1
+1 33598 1
+33598 33598 1
+1 33599 1
+33599 33599 1
+1 33600 1
+33600 33600 1
+1 33601 1
+33601 33601 1
+1 33602 1
+33602 33602 1
+1 33603 1
+33603 33603 1
+1 33604 1
+33604 33604 1
+1 33605 1
+33605 33605 1
+1 33606 1
+33606 33606 1
+1 33607 1
+33607 33607 1
+1 33608 1
+33608 33608 1
+1 33609 1
+33609 33609 1
+1 33610 1
+33610 33610 1
+1 33611 1
+33611 33611 1
+1 33612 1
+33612 33612 1
+1 33613 1
+33613 33613 1
+1 33614 1
+33614 33614 1
+1 33615 1
+33615 33615 1
+1 33616 1
+33616 33616 1
+1 33617 1
+33617 33617 1
+1 33618 1
+33618 33618 1
+1 33619 1
+33619 33619 1
+1 33620 1
+33620 33620 1
+1 33621 1
+33621 33621 1
+1 33622 1
+33622 33622 1
+1 33623 1
+33623 33623 1
+1 33624 1
+33624 33624 1
+1 33625 1
+33625 33625 1
+1 33626 1
+33626 33626 1
+1 33627 1
+33627 33627 1
+1 33628 1
+33628 33628 1
+1 33629 1
+33629 33629 1
+1 33630 1
+33630 33630 1
+1 33631 1
+33631 33631 1
+1 33632 1
+33632 33632 1
+1 33633 1
+33633 33633 1
+1 33634 1
+33634 33634 1
+1 33635 1
+33635 33635 1
+1 33636 1
+33636 33636 1
+1 33637 1
+33637 33637 1
+1 33638 1
+33638 33638 1
+1 33639 1
+33639 33639 1
+1 33640 1
+33640 33640 1
+1 33641 1
+33641 33641 1
+1 33642 1
+33642 33642 1
+1 33643 1
+33643 33643 1
+1 33644 1
+33644 33644 1
+1 33645 1
+33645 33645 1
+1 33646 1
+33646 33646 1
+1 33647 1
+33647 33647 1
+1 33648 1
+33648 33648 1
+1 33649 1
+33649 33649 1
+1 33650 1
+33650 33650 1
+1 33651 1
+33651 33651 1
+1 33652 1
+33652 33652 1
+1 33653 1
+33653 33653 1
+1 33654 1
+33654 33654 1
+1 33655 1
+33655 33655 1
+1 33656 1
+33656 33656 1
+1 33657 1
+33657 33657 1
+1 33658 1
+33658 33658 1
+1 33659 1
+33659 33659 1
+1 33660 1
+33660 33660 1
+1 33661 1
+33661 33661 1
+1 33662 1
+33662 33662 1
+1 33663 1
+33663 33663 1
+1 33664 1
+33664 33664 1
+1 33665 1
+33665 33665 1
+1 33666 1
+33666 33666 1
+1 33667 1
+33667 33667 1
+1 33668 1
+33668 33668 1
+1 33669 1
+33669 33669 1
+1 33670 1
+33670 33670 1
+1 33671 1
+33671 33671 1
+1 33672 1
+33672 33672 1
+1 33673 1
+33673 33673 1
+1 33674 1
+33674 33674 1
+1 33675 1
+33675 33675 1
+1 33676 1
+33676 33676 1
+1 33677 1
+33677 33677 1
+1 33678 1
+33678 33678 1
+1 33679 1
+33679 33679 1
+1 33680 1
+33680 33680 1
+1 33681 1
+33681 33681 1
+1 33682 1
+33682 33682 1
+1 33683 1
+33683 33683 1
+1 33684 1
+33684 33684 1
+1 33685 1
+33685 33685 1
+1 33686 1
+33686 33686 1
+1 33687 1
+33687 33687 1
+1 33688 1
+33688 33688 1
+1 33689 1
+33689 33689 1
+1 33690 1
+33690 33690 1
+1 33691 1
+33691 33691 1
+1 33692 1
+33692 33692 1
+1 33693 1
+33693 33693 1
+1 33694 1
+33694 33694 1
+1 33695 1
+33695 33695 1
+1 33696 1
+33696 33696 1
+1 33697 1
+33697 33697 1
+1 33698 1
+33698 33698 1
+1 33699 1
+33699 33699 1
+1 33700 1
+33700 33700 1
+1 33701 1
+33701 33701 1
+1 33702 1
+33702 33702 1
+1 33703 1
+33703 33703 1
+1 33704 1
+33704 33704 1
+1 33705 1
+33705 33705 1
+1 33706 1
+33706 33706 1
+1 33707 1
+33707 33707 1
+1 33708 1
+33708 33708 1
+1 33709 1
+33709 33709 1
+1 33710 1
+33710 33710 1
+1 33711 1
+33711 33711 1
+1 33712 1
+33712 33712 1
+1 33713 1
+33713 33713 1
+1 33714 1
+33714 33714 1
+1 33715 1
+33715 33715 1
+1 33716 1
+33716 33716 1
+1 33717 1
+33717 33717 1
+1 33718 1
+33718 33718 1
+1 33719 1
+33719 33719 1
+1 33720 1
+33720 33720 1
+1 33721 1
+33721 33721 1
+1 33722 1
+33722 33722 1
+1 33723 1
+33723 33723 1
+1 33724 1
+33724 33724 1
+1 33725 1
+33725 33725 1
+1 33726 1
+33726 33726 1
+1 33727 1
+33727 33727 1
+1 33728 1
+33728 33728 1
+1 33729 1
+33729 33729 1
+1 33730 1
+33730 33730 1
+1 33731 1
+33731 33731 1
+1 33732 1
+33732 33732 1
+1 33733 1
+33733 33733 1
+1 33734 1
+33734 33734 1
+1 33735 1
+33735 33735 1
+1 33736 1
+33736 33736 1
+1 33737 1
+33737 33737 1
+1 33738 1
+33738 33738 1
+1 33739 1
+33739 33739 1
+1 33740 1
+33740 33740 1
+1 33741 1
+33741 33741 1
+1 33742 1
+33742 33742 1
+1 33743 1
+33743 33743 1
+1 33744 1
+33744 33744 1
+1 33745 1
+33745 33745 1
+1 33746 1
+33746 33746 1
+1 33747 1
+33747 33747 1
+1 33748 1
+33748 33748 1
+1 33749 1
+33749 33749 1
+1 33750 1
+33750 33750 1
+1 33751 1
+33751 33751 1
+1 33752 1
+33752 33752 1
+1 33753 1
+33753 33753 1
+1 33754 1
+33754 33754 1
+1 33755 1
+33755 33755 1
+1 33756 1
+33756 33756 1
+1 33757 1
+33757 33757 1
+1 33758 1
+33758 33758 1
+1 33759 1
+33759 33759 1
+1 33760 1
+33760 33760 1
+1 33761 1
+33761 33761 1
+1 33762 1
+33762 33762 1
+1 33763 1
+33763 33763 1
+1 33764 1
+33764 33764 1
+1 33765 1
+33765 33765 1
+1 33766 1
+33766 33766 1
+1 33767 1
+33767 33767 1
+1 33768 1
+33768 33768 1
+1 33769 1
+33769 33769 1
+1 33770 1
+33770 33770 1
+1 33771 1
+33771 33771 1
+1 33772 1
+33772 33772 1
+1 33773 1
+33773 33773 1
+1 33774 1
+33774 33774 1
+1 33775 1
+33775 33775 1
+1 33776 1
+33776 33776 1
+1 33777 1
+33777 33777 1
+1 33778 1
+33778 33778 1
+1 33779 1
+33779 33779 1
+1 33780 1
+33780 33780 1
+1 33781 1
+33781 33781 1
+1 33782 1
+33782 33782 1
+1 33783 1
+33783 33783 1
+1 33784 1
+33784 33784 1
+1 33785 1
+33785 33785 1
+1 33786 1
+33786 33786 1
+1 33787 1
+33787 33787 1
+1 33788 1
+33788 33788 1
+1 33789 1
+33789 33789 1
+1 33790 1
+33790 33790 1
+1 33791 1
+33791 33791 1
+1 33792 1
+33792 33792 1
+1 33793 1
+33793 33793 1
+1 33794 1
+33794 33794 1
+1 33795 1
+33795 33795 1
+1 33796 1
+33796 33796 1
+1 33797 1
+33797 33797 1
+1 33798 1
+33798 33798 1
+1 33799 1
+33799 33799 1
+1 33800 1
+33800 33800 1
+1 33801 1
+33801 33801 1
+1 33802 1
+33802 33802 1
+1 33803 1
+33803 33803 1
+1 33804 1
+33804 33804 1
+1 33805 1
+33805 33805 1
+1 33806 1
+33806 33806 1
+1 33807 1
+33807 33807 1
+1 33808 1
+33808 33808 1
+1 33809 1
+33809 33809 1
+1 33810 1
+33810 33810 1
+1 33811 1
+33811 33811 1
+1 33812 1
+33812 33812 1
+1 33813 1
+33813 33813 1
+1 33814 1
+33814 33814 1
+1 33815 1
+33815 33815 1
+1 33816 1
+33816 33816 1
+1 33817 1
+33817 33817 1
+1 33818 1
+33818 33818 1
+1 33819 1
+33819 33819 1
+1 33820 1
+33820 33820 1
+1 33821 1
+33821 33821 1
+1 33822 1
+33822 33822 1
+1 33823 1
+33823 33823 1
+1 33824 1
+33824 33824 1
+1 33825 1
+33825 33825 1
+1 33826 1
+33826 33826 1
+1 33827 1
+33827 33827 1
+1 33828 1
+33828 33828 1
+1 33829 1
+33829 33829 1
+1 33830 1
+33830 33830 1
+1 33831 1
+33831 33831 1
+1 33832 1
+33832 33832 1
+1 33833 1
+33833 33833 1
+1 33834 1
+33834 33834 1
+1 33835 1
+33835 33835 1
+1 33836 1
+33836 33836 1
+1 33837 1
+33837 33837 1
+1 33838 1
+33838 33838 1
+1 33839 1
+33839 33839 1
+1 33840 1
+33840 33840 1
+1 33841 1
+33841 33841 1
+1 33842 1
+33842 33842 1
+1 33843 1
+33843 33843 1
+1 33844 1
+33844 33844 1
+1 33845 1
+33845 33845 1
+1 33846 1
+33846 33846 1
+1 33847 1
+33847 33847 1
+1 33848 1
+33848 33848 1
+1 33849 1
+33849 33849 1
+1 33850 1
+33850 33850 1
+1 33851 1
+33851 33851 1
+1 33852 1
+33852 33852 1
+1 33853 1
+33853 33853 1
+1 33854 1
+33854 33854 1
+1 33855 1
+33855 33855 1
+1 33856 1
+33856 33856 1
+1 33857 1
+33857 33857 1
+1 33858 1
+33858 33858 1
+1 33859 1
+33859 33859 1
+1 33860 1
+33860 33860 1
+1 33861 1
+33861 33861 1
+1 33862 1
+33862 33862 1
+1 33863 1
+33863 33863 1
+1 33864 1
+33864 33864 1
+1 33865 1
+33865 33865 1
+1 33866 1
+33866 33866 1
+1 33867 1
+33867 33867 1
+1 33868 1
+33868 33868 1
+1 33869 1
+33869 33869 1
+1 33870 1
+33870 33870 1
+1 33871 1
+33871 33871 1
+1 33872 1
+33872 33872 1
+1 33873 1
+33873 33873 1
+1 33874 1
+33874 33874 1
+1 33875 1
+33875 33875 1
+1 33876 1
+33876 33876 1
+1 33877 1
+33877 33877 1
+1 33878 1
+33878 33878 1
+1 33879 1
+33879 33879 1
+1 33880 1
+33880 33880 1
+1 33881 1
+33881 33881 1
+1 33882 1
+33882 33882 1
+1 33883 1
+33883 33883 1
+1 33884 1
+33884 33884 1
+1 33885 1
+33885 33885 1
+1 33886 1
+33886 33886 1
+1 33887 1
+33887 33887 1
+1 33888 1
+33888 33888 1
+1 33889 1
+33889 33889 1
+1 33890 1
+33890 33890 1
+1 33891 1
+33891 33891 1
+1 33892 1
+33892 33892 1
+1 33893 1
+33893 33893 1
+1 33894 1
+33894 33894 1
+1 33895 1
+33895 33895 1
+1 33896 1
+33896 33896 1
+1 33897 1
+33897 33897 1
+1 33898 1
+33898 33898 1
+1 33899 1
+33899 33899 1
+1 33900 1
+33900 33900 1
+1 33901 1
+33901 33901 1
+1 33902 1
+33902 33902 1
+1 33903 1
+33903 33903 1
+1 33904 1
+33904 33904 1
+1 33905 1
+33905 33905 1
+1 33906 1
+33906 33906 1
+1 33907 1
+33907 33907 1
+1 33908 1
+33908 33908 1
+1 33909 1
+33909 33909 1
+1 33910 1
+33910 33910 1
+1 33911 1
+33911 33911 1
+1 33912 1
+33912 33912 1
+1 33913 1
+33913 33913 1
+1 33914 1
+33914 33914 1
+1 33915 1
+33915 33915 1
+1 33916 1
+33916 33916 1
+1 33917 1
+33917 33917 1
+1 33918 1
+33918 33918 1
+1 33919 1
+33919 33919 1
+1 33920 1
+33920 33920 1
+1 33921 1
+33921 33921 1
+1 33922 1
+33922 33922 1
+1 33923 1
+33923 33923 1
+1 33924 1
+33924 33924 1
+1 33925 1
+33925 33925 1
+1 33926 1
+33926 33926 1
+1 33927 1
+33927 33927 1
+1 33928 1
+33928 33928 1
+1 33929 1
+33929 33929 1
+1 33930 1
+33930 33930 1
+1 33931 1
+33931 33931 1
+1 33932 1
+33932 33932 1
+1 33933 1
+33933 33933 1
+1 33934 1
+33934 33934 1
+1 33935 1
+33935 33935 1
+1 33936 1
+33936 33936 1
+1 33937 1
+33937 33937 1
+1 33938 1
+33938 33938 1
+1 33939 1
+33939 33939 1
+1 33940 1
+33940 33940 1
+1 33941 1
+33941 33941 1
+1 33942 1
+33942 33942 1
+1 33943 1
+33943 33943 1
+1 33944 1
+33944 33944 1
+1 33945 1
+33945 33945 1
+1 33946 1
+33946 33946 1
+1 33947 1
+33947 33947 1
+1 33948 1
+33948 33948 1
+1 33949 1
+33949 33949 1
+1 33950 1
+33950 33950 1
+1 33951 1
+33951 33951 1
+1 33952 1
+33952 33952 1
+1 33953 1
+33953 33953 1
+1 33954 1
+33954 33954 1
+1 33955 1
+33955 33955 1
+1 33956 1
+33956 33956 1
+1 33957 1
+33957 33957 1
+1 33958 1
+33958 33958 1
+1 33959 1
+33959 33959 1
+1 33960 1
+33960 33960 1
+1 33961 1
+33961 33961 1
+1 33962 1
+33962 33962 1
+1 33963 1
+33963 33963 1
+1 33964 1
+33964 33964 1
+1 33965 1
+33965 33965 1
+1 33966 1
+33966 33966 1
+1 33967 1
+33967 33967 1
+1 33968 1
+33968 33968 1
+1 33969 1
+33969 33969 1
+1 33970 1
+33970 33970 1
+1 33971 1
+33971 33971 1
+1 33972 1
+33972 33972 1
+1 33973 1
+33973 33973 1
+1 33974 1
+33974 33974 1
+1 33975 1
+33975 33975 1
+1 33976 1
+33976 33976 1
+1 33977 1
+33977 33977 1
+1 33978 1
+33978 33978 1
+1 33979 1
+33979 33979 1
+1 33980 1
+33980 33980 1
+1 33981 1
+33981 33981 1
+1 33982 1
+33982 33982 1
+1 33983 1
+33983 33983 1
+1 33984 1
+33984 33984 1
+1 33985 1
+33985 33985 1
+1 33986 1
+33986 33986 1
+1 33987 1
+33987 33987 1
+1 33988 1
+33988 33988 1
+1 33989 1
+33989 33989 1
+1 33990 1
+33990 33990 1
+1 33991 1
+33991 33991 1
+1 33992 1
+33992 33992 1
+1 33993 1
+33993 33993 1
+1 33994 1
+33994 33994 1
+1 33995 1
+33995 33995 1
+1 33996 1
+33996 33996 1
+1 33997 1
+33997 33997 1
+1 33998 1
+33998 33998 1
+1 33999 1
+33999 33999 1
+1 34000 1
+34000 34000 1
+1 34001 1
+34001 34001 1
+1 34002 1
+34002 34002 1
+1 34003 1
+34003 34003 1
+1 34004 1
+34004 34004 1
+1 34005 1
+34005 34005 1
+1 34006 1
+34006 34006 1
+1 34007 1
+34007 34007 1
+1 34008 1
+34008 34008 1
+1 34009 1
+34009 34009 1
+1 34010 1
+34010 34010 1
+1 34011 1
+34011 34011 1
+1 34012 1
+34012 34012 1
+1 34013 1
+34013 34013 1
+1 34014 1
+34014 34014 1
+1 34015 1
+34015 34015 1
+1 34016 1
+34016 34016 1
+1 34017 1
+34017 34017 1
+1 34018 1
+34018 34018 1
+1 34019 1
+34019 34019 1
+1 34020 1
+34020 34020 1
+1 34021 1
+34021 34021 1
+1 34022 1
+34022 34022 1
+1 34023 1
+34023 34023 1
+1 34024 1
+34024 34024 1
+1 34025 1
+34025 34025 1
+1 34026 1
+34026 34026 1
+1 34027 1
+34027 34027 1
+1 34028 1
+34028 34028 1
+1 34029 1
+34029 34029 1
+1 34030 1
+34030 34030 1
+1 34031 1
+34031 34031 1
+1 34032 1
+34032 34032 1
+1 34033 1
+34033 34033 1
+1 34034 1
+34034 34034 1
+1 34035 1
+34035 34035 1
+1 34036 1
+34036 34036 1
+1 34037 1
+34037 34037 1
+1 34038 1
+34038 34038 1
+1 34039 1
+34039 34039 1
+1 34040 1
+34040 34040 1
+1 34041 1
+34041 34041 1
+1 34042 1
+34042 34042 1
+1 34043 1
+34043 34043 1
+1 34044 1
+34044 34044 1
+1 34045 1
+34045 34045 1
+1 34046 1
+34046 34046 1
+1 34047 1
+34047 34047 1
+1 34048 1
+34048 34048 1
+1 34049 1
+34049 34049 1
+1 34050 1
+34050 34050 1
+1 34051 1
+34051 34051 1
+1 34052 1
+34052 34052 1
+1 34053 1
+34053 34053 1
+1 34054 1
+34054 34054 1
+1 34055 1
+34055 34055 1
+1 34056 1
+34056 34056 1
+1 34057 1
+34057 34057 1
+1 34058 1
+34058 34058 1
+1 34059 1
+34059 34059 1
+1 34060 1
+34060 34060 1
+1 34061 1
+34061 34061 1
+1 34062 1
+34062 34062 1
+1 34063 1
+34063 34063 1
+1 34064 1
+34064 34064 1
+1 34065 1
+34065 34065 1
+1 34066 1
+34066 34066 1
+1 34067 1
+34067 34067 1
+1 34068 1
+34068 34068 1
+1 34069 1
+34069 34069 1
+1 34070 1
+34070 34070 1
+1 34071 1
+34071 34071 1
+1 34072 1
+34072 34072 1
+1 34073 1
+34073 34073 1
+1 34074 1
+34074 34074 1
+1 34075 1
+34075 34075 1
+1 34076 1
+34076 34076 1
+1 34077 1
+34077 34077 1
+1 34078 1
+34078 34078 1
+1 34079 1
+34079 34079 1
+1 34080 1
+34080 34080 1
+1 34081 1
+34081 34081 1
+1 34082 1
+34082 34082 1
+1 34083 1
+34083 34083 1
+1 34084 1
+34084 34084 1
+1 34085 1
+34085 34085 1
+1 34086 1
+34086 34086 1
+1 34087 1
+34087 34087 1
+1 34088 1
+34088 34088 1
+1 34089 1
+34089 34089 1
+1 34090 1
+34090 34090 1
+1 34091 1
+34091 34091 1
+1 34092 1
+34092 34092 1
+1 34093 1
+34093 34093 1
+1 34094 1
+34094 34094 1
+1 34095 1
+34095 34095 1
+1 34096 1
+34096 34096 1
+1 34097 1
+34097 34097 1
+1 34098 1
+34098 34098 1
+1 34099 1
+34099 34099 1
+1 34100 1
+34100 34100 1
+1 34101 1
+34101 34101 1
+1 34102 1
+34102 34102 1
+1 34103 1
+34103 34103 1
+1 34104 1
+34104 34104 1
+1 34105 1
+34105 34105 1
+1 34106 1
+34106 34106 1
+1 34107 1
+34107 34107 1
+1 34108 1
+34108 34108 1
+1 34109 1
+34109 34109 1
+1 34110 1
+34110 34110 1
+1 34111 1
+34111 34111 1
+1 34112 1
+34112 34112 1
+1 34113 1
+34113 34113 1
+1 34114 1
+34114 34114 1
+1 34115 1
+34115 34115 1
+1 34116 1
+34116 34116 1
+1 34117 1
+34117 34117 1
+1 34118 1
+34118 34118 1
+1 34119 1
+34119 34119 1
+1 34120 1
+34120 34120 1
+1 34121 1
+34121 34121 1
+1 34122 1
+34122 34122 1
+1 34123 1
+34123 34123 1
+1 34124 1
+34124 34124 1
+1 34125 1
+34125 34125 1
+1 34126 1
+34126 34126 1
+1 34127 1
+34127 34127 1
+1 34128 1
+34128 34128 1
+1 34129 1
+34129 34129 1
+1 34130 1
+34130 34130 1
+1 34131 1
+34131 34131 1
+1 34132 1
+34132 34132 1
+1 34133 1
+34133 34133 1
+1 34134 1
+34134 34134 1
+1 34135 1
+34135 34135 1
+1 34136 1
+34136 34136 1
+1 34137 1
+34137 34137 1
+1 34138 1
+34138 34138 1
+1 34139 1
+34139 34139 1
+1 34140 1
+34140 34140 1
+1 34141 1
+34141 34141 1
+1 34142 1
+34142 34142 1
+1 34143 1
+34143 34143 1
+1 34144 1
+34144 34144 1
+1 34145 1
+34145 34145 1
+1 34146 1
+34146 34146 1
+1 34147 1
+34147 34147 1
+1 34148 1
+34148 34148 1
+1 34149 1
+34149 34149 1
+1 34150 1
+34150 34150 1
+1 34151 1
+34151 34151 1
+1 34152 1
+34152 34152 1
+1 34153 1
+34153 34153 1
+1 34154 1
+34154 34154 1
+1 34155 1
+34155 34155 1
+1 34156 1
+34156 34156 1
+1 34157 1
+34157 34157 1
+1 34158 1
+34158 34158 1
+1 34159 1
+34159 34159 1
+1 34160 1
+34160 34160 1
+1 34161 1
+34161 34161 1
+1 34162 1
+34162 34162 1
+1 34163 1
+34163 34163 1
+1 34164 1
+34164 34164 1
+1 34165 1
+34165 34165 1
+1 34166 1
+34166 34166 1
+1 34167 1
+34167 34167 1
+1 34168 1
+34168 34168 1
+1 34169 1
+34169 34169 1
+1 34170 1
+34170 34170 1
+1 34171 1
+34171 34171 1
+1 34172 1
+34172 34172 1
+1 34173 1
+34173 34173 1
+1 34174 1
+34174 34174 1
+1 34175 1
+34175 34175 1
+1 34176 1
+34176 34176 1
+1 34177 1
+34177 34177 1
+1 34178 1
+34178 34178 1
+1 34179 1
+34179 34179 1
+1 34180 1
+34180 34180 1
+1 34181 1
+34181 34181 1
+1 34182 1
+34182 34182 1
+1 34183 1
+34183 34183 1
+1 34184 1
+34184 34184 1
+1 34185 1
+34185 34185 1
+1 34186 1
+34186 34186 1
+1 34187 1
+34187 34187 1
+1 34188 1
+34188 34188 1
+1 34189 1
+34189 34189 1
+1 34190 1
+34190 34190 1
+1 34191 1
+34191 34191 1
+1 34192 1
+34192 34192 1
+1 34193 1
+34193 34193 1
+1 34194 1
+34194 34194 1
+1 34195 1
+34195 34195 1
+1 34196 1
+34196 34196 1
+1 34197 1
+34197 34197 1
+1 34198 1
+34198 34198 1
+1 34199 1
+34199 34199 1
+1 34200 1
+34200 34200 1
+1 34201 1
+34201 34201 1
+1 34202 1
+34202 34202 1
+1 34203 1
+34203 34203 1
+1 34204 1
+34204 34204 1
+1 34205 1
+34205 34205 1
+1 34206 1
+34206 34206 1
+1 34207 1
+34207 34207 1
+1 34208 1
+34208 34208 1
+1 34209 1
+34209 34209 1
+1 34210 1
+34210 34210 1
+1 34211 1
+34211 34211 1
+1 34212 1
+34212 34212 1
+1 34213 1
+34213 34213 1
+1 34214 1
+34214 34214 1
+1 34215 1
+34215 34215 1
+1 34216 1
+34216 34216 1
+1 34217 1
+34217 34217 1
+1 34218 1
+34218 34218 1
+1 34219 1
+34219 34219 1
+1 34220 1
+34220 34220 1
+1 34221 1
+34221 34221 1
+1 34222 1
+34222 34222 1
+1 34223 1
+34223 34223 1
+1 34224 1
+34224 34224 1
+1 34225 1
+34225 34225 1
+1 34226 1
+34226 34226 1
+1 34227 1
+34227 34227 1
+1 34228 1
+34228 34228 1
+1 34229 1
+34229 34229 1
+1 34230 1
+34230 34230 1
+1 34231 1
+34231 34231 1
+1 34232 1
+34232 34232 1
+1 34233 1
+34233 34233 1
+1 34234 1
+34234 34234 1
+1 34235 1
+34235 34235 1
+1 34236 1
+34236 34236 1
+1 34237 1
+34237 34237 1
+1 34238 1
+34238 34238 1
+1 34239 1
+34239 34239 1
+1 34240 1
+34240 34240 1
+1 34241 1
+34241 34241 1
+1 34242 1
+34242 34242 1
+1 34243 1
+34243 34243 1
+1 34244 1
+34244 34244 1
+1 34245 1
+34245 34245 1
+1 34246 1
+34246 34246 1
+1 34247 1
+34247 34247 1
+1 34248 1
+34248 34248 1
+1 34249 1
+34249 34249 1
+1 34250 1
+34250 34250 1
+1 34251 1
+34251 34251 1
+1 34252 1
+34252 34252 1
+1 34253 1
+34253 34253 1
+1 34254 1
+34254 34254 1
+1 34255 1
+34255 34255 1
+1 34256 1
+34256 34256 1
+1 34257 1
+34257 34257 1
+1 34258 1
+34258 34258 1
+1 34259 1
+34259 34259 1
+1 34260 1
+34260 34260 1
+1 34261 1
+34261 34261 1
+1 34262 1
+34262 34262 1
+1 34263 1
+34263 34263 1
+1 34264 1
+34264 34264 1
+1 34265 1
+34265 34265 1
+1 34266 1
+34266 34266 1
+1 34267 1
+34267 34267 1
+1 34268 1
+34268 34268 1
+1 34269 1
+34269 34269 1
+1 34270 1
+34270 34270 1
+1 34271 1
+34271 34271 1
+1 34272 1
+34272 34272 1
+1 34273 1
+34273 34273 1
+1 34274 1
+34274 34274 1
+1 34275 1
+34275 34275 1
+1 34276 1
+34276 34276 1
+1 34277 1
+34277 34277 1
+1 34278 1
+34278 34278 1
+1 34279 1
+34279 34279 1
+1 34280 1
+34280 34280 1
+1 34281 1
+34281 34281 1
+1 34282 1
+34282 34282 1
+1 34283 1
+34283 34283 1
+1 34284 1
+34284 34284 1
+1 34285 1
+34285 34285 1
+1 34286 1
+34286 34286 1
+1 34287 1
+34287 34287 1
+1 34288 1
+34288 34288 1
+1 34289 1
+34289 34289 1
+1 34290 1
+34290 34290 1
+1 34291 1
+34291 34291 1
+1 34292 1
+34292 34292 1
+1 34293 1
+34293 34293 1
+1 34294 1
+34294 34294 1
+1 34295 1
+34295 34295 1
+1 34296 1
+34296 34296 1
+1 34297 1
+34297 34297 1
+1 34298 1
+34298 34298 1
+1 34299 1
+34299 34299 1
+1 34300 1
+34300 34300 1
+1 34301 1
+34301 34301 1
+1 34302 1
+34302 34302 1
+1 34303 1
+34303 34303 1
+1 34304 1
+34304 34304 1
+1 34305 1
+34305 34305 1
+1 34306 1
+34306 34306 1
+1 34307 1
+34307 34307 1
+1 34308 1
+34308 34308 1
+1 34309 1
+34309 34309 1
+1 34310 1
+34310 34310 1
+1 34311 1
+34311 34311 1
+1 34312 1
+34312 34312 1
+1 34313 1
+34313 34313 1
+1 34314 1
+34314 34314 1
+1 34315 1
+34315 34315 1
+1 34316 1
+34316 34316 1
+1 34317 1
+34317 34317 1
+1 34318 1
+34318 34318 1
+1 34319 1
+34319 34319 1
+1 34320 1
+34320 34320 1
+1 34321 1
+34321 34321 1
+1 34322 1
+34322 34322 1
+1 34323 1
+34323 34323 1
+1 34324 1
+34324 34324 1
+1 34325 1
+34325 34325 1
+1 34326 1
+34326 34326 1
+1 34327 1
+34327 34327 1
+1 34328 1
+34328 34328 1
+1 34329 1
+34329 34329 1
+1 34330 1
+34330 34330 1
+1 34331 1
+34331 34331 1
+1 34332 1
+34332 34332 1
+1 34333 1
+34333 34333 1
+1 34334 1
+34334 34334 1
+1 34335 1
+34335 34335 1
+1 34336 1
+34336 34336 1
+1 34337 1
+34337 34337 1
+1 34338 1
+34338 34338 1
+1 34339 1
+34339 34339 1
+1 34340 1
+34340 34340 1
+1 34341 1
+34341 34341 1
+1 34342 1
+34342 34342 1
+1 34343 1
+34343 34343 1
+1 34344 1
+34344 34344 1
+1 34345 1
+34345 34345 1
+1 34346 1
+34346 34346 1
+1 34347 1
+34347 34347 1
+1 34348 1
+34348 34348 1
+1 34349 1
+34349 34349 1
+1 34350 1
+34350 34350 1
+1 34351 1
+34351 34351 1
+1 34352 1
+34352 34352 1
+1 34353 1
+34353 34353 1
+1 34354 1
+34354 34354 1
+1 34355 1
+34355 34355 1
+1 34356 1
+34356 34356 1
+1 34357 1
+34357 34357 1
+1 34358 1
+34358 34358 1
+1 34359 1
+34359 34359 1
+1 34360 1
+34360 34360 1
+1 34361 1
+34361 34361 1
+1 34362 1
+34362 34362 1
+1 34363 1
+34363 34363 1
+1 34364 1
+34364 34364 1
+1 34365 1
+34365 34365 1
+1 34366 1
+34366 34366 1
+1 34367 1
+34367 34367 1
+1 34368 1
+34368 34368 1
+1 34369 1
+34369 34369 1
+1 34370 1
+34370 34370 1
+1 34371 1
+34371 34371 1
+1 34372 1
+34372 34372 1
+1 34373 1
+34373 34373 1
+1 34374 1
+34374 34374 1
+1 34375 1
+34375 34375 1
+1 34376 1
+34376 34376 1
+1 34377 1
+34377 34377 1
+1 34378 1
+34378 34378 1
+1 34379 1
+34379 34379 1
+1 34380 1
+34380 34380 1
+1 34381 1
+34381 34381 1
+1 34382 1
+34382 34382 1
+1 34383 1
+34383 34383 1
+1 34384 1
+34384 34384 1
+1 34385 1
+34385 34385 1
+1 34386 1
+34386 34386 1
+1 34387 1
+34387 34387 1
+1 34388 1
+34388 34388 1
+1 34389 1
+34389 34389 1
+1 34390 1
+34390 34390 1
+1 34391 1
+34391 34391 1
+1 34392 1
+34392 34392 1
+1 34393 1
+34393 34393 1
+1 34394 1
+34394 34394 1
+1 34395 1
+34395 34395 1
+1 34396 1
+34396 34396 1
+1 34397 1
+34397 34397 1
+1 34398 1
+34398 34398 1
+1 34399 1
+34399 34399 1
+1 34400 1
+34400 34400 1
+1 34401 1
+34401 34401 1
+1 34402 1
+34402 34402 1
+1 34403 1
+34403 34403 1
+1 34404 1
+34404 34404 1
+1 34405 1
+34405 34405 1
+1 34406 1
+34406 34406 1
+1 34407 1
+34407 34407 1
+1 34408 1
+34408 34408 1
+1 34409 1
+34409 34409 1
+1 34410 1
+34410 34410 1
+1 34411 1
+34411 34411 1
+1 34412 1
+34412 34412 1
+1 34413 1
+34413 34413 1
+1 34414 1
+34414 34414 1
+1 34415 1
+34415 34415 1
+1 34416 1
+34416 34416 1
+1 34417 1
+34417 34417 1
+1 34418 1
+34418 34418 1
+1 34419 1
+34419 34419 1
+1 34420 1
+34420 34420 1
+1 34421 1
+34421 34421 1
+1 34422 1
+34422 34422 1
+1 34423 1
+34423 34423 1
+1 34424 1
+34424 34424 1
+1 34425 1
+34425 34425 1
+1 34426 1
+34426 34426 1
+1 34427 1
+34427 34427 1
+1 34428 1
+34428 34428 1
+1 34429 1
+34429 34429 1
+1 34430 1
+34430 34430 1
+1 34431 1
+34431 34431 1
+1 34432 1
+34432 34432 1
+1 34433 1
+34433 34433 1
+1 34434 1
+34434 34434 1
+1 34435 1
+34435 34435 1
+1 34436 1
+34436 34436 1
+1 34437 1
+34437 34437 1
+1 34438 1
+34438 34438 1
+1 34439 1
+34439 34439 1
+1 34440 1
+34440 34440 1
+1 34441 1
+34441 34441 1
+1 34442 1
+34442 34442 1
+1 34443 1
+34443 34443 1
+1 34444 1
+34444 34444 1
+1 34445 1
+34445 34445 1
+1 34446 1
+34446 34446 1
+1 34447 1
+34447 34447 1
+1 34448 1
+34448 34448 1
+1 34449 1
+34449 34449 1
+1 34450 1
+34450 34450 1
+1 34451 1
+34451 34451 1
+1 34452 1
+34452 34452 1
+1 34453 1
+34453 34453 1
+1 34454 1
+34454 34454 1
+1 34455 1
+34455 34455 1
+1 34456 1
+34456 34456 1
+1 34457 1
+34457 34457 1
+1 34458 1
+34458 34458 1
+1 34459 1
+34459 34459 1
+1 34460 1
+34460 34460 1
+1 34461 1
+34461 34461 1
+1 34462 1
+34462 34462 1
+1 34463 1
+34463 34463 1
+1 34464 1
+34464 34464 1
+1 34465 1
+34465 34465 1
+1 34466 1
+34466 34466 1
+1 34467 1
+34467 34467 1
+1 34468 1
+34468 34468 1
+1 34469 1
+34469 34469 1
+1 34470 1
+34470 34470 1
+1 34471 1
+34471 34471 1
+1 34472 1
+34472 34472 1
+1 34473 1
+34473 34473 1
+1 34474 1
+34474 34474 1
+1 34475 1
+34475 34475 1
+1 34476 1
+34476 34476 1
+1 34477 1
+34477 34477 1
+1 34478 1
+34478 34478 1
+1 34479 1
+34479 34479 1
+1 34480 1
+34480 34480 1
+1 34481 1
+34481 34481 1
+1 34482 1
+34482 34482 1
+1 34483 1
+34483 34483 1
+1 34484 1
+34484 34484 1
+1 34485 1
+34485 34485 1
+1 34486 1
+34486 34486 1
+1 34487 1
+34487 34487 1
+1 34488 1
+34488 34488 1
+1 34489 1
+34489 34489 1
+1 34490 1
+34490 34490 1
+1 34491 1
+34491 34491 1
+1 34492 1
+34492 34492 1
+1 34493 1
+34493 34493 1
+1 34494 1
+34494 34494 1
+1 34495 1
+34495 34495 1
+1 34496 1
+34496 34496 1
+1 34497 1
+34497 34497 1
+1 34498 1
+34498 34498 1
+1 34499 1
+34499 34499 1
+1 34500 1
+34500 34500 1
+1 34501 1
+34501 34501 1
+1 34502 1
+34502 34502 1
+1 34503 1
+34503 34503 1
+1 34504 1
+34504 34504 1
+1 34505 1
+34505 34505 1
+1 34506 1
+34506 34506 1
+1 34507 1
+34507 34507 1
+1 34508 1
+34508 34508 1
+1 34509 1
+34509 34509 1
+1 34510 1
+34510 34510 1
+1 34511 1
+34511 34511 1
+1 34512 1
+34512 34512 1
+1 34513 1
+34513 34513 1
+1 34514 1
+34514 34514 1
+1 34515 1
+34515 34515 1
+1 34516 1
+34516 34516 1
+1 34517 1
+34517 34517 1
+1 34518 1
+34518 34518 1
+1 34519 1
+34519 34519 1
+1 34520 1
+34520 34520 1
+1 34521 1
+34521 34521 1
+1 34522 1
+34522 34522 1
+1 34523 1
+34523 34523 1
+1 34524 1
+34524 34524 1
+1 34525 1
+34525 34525 1
+1 34526 1
+34526 34526 1
+1 34527 1
+34527 34527 1
+1 34528 1
+34528 34528 1
+1 34529 1
+34529 34529 1
+1 34530 1
+34530 34530 1
+1 34531 1
+34531 34531 1
+1 34532 1
+34532 34532 1
+1 34533 1
+34533 34533 1
+1 34534 1
+34534 34534 1
+1 34535 1
+34535 34535 1
+1 34536 1
+34536 34536 1
+1 34537 1
+34537 34537 1
+1 34538 1
+34538 34538 1
+1 34539 1
+34539 34539 1
+1 34540 1
+34540 34540 1
+1 34541 1
+34541 34541 1
+1 34542 1
+34542 34542 1
+1 34543 1
+34543 34543 1
+1 34544 1
+34544 34544 1
+1 34545 1
+34545 34545 1
+1 34546 1
+34546 34546 1
+1 34547 1
+34547 34547 1
+1 34548 1
+34548 34548 1
+1 34549 1
+34549 34549 1
+1 34550 1
+34550 34550 1
+1 34551 1
+34551 34551 1
+1 34552 1
+34552 34552 1
+1 34553 1
+34553 34553 1
+1 34554 1
+34554 34554 1
+1 34555 1
+34555 34555 1
+1 34556 1
+34556 34556 1
+1 34557 1
+34557 34557 1
+1 34558 1
+34558 34558 1
+1 34559 1
+34559 34559 1
+1 34560 1
+34560 34560 1
+1 34561 1
+34561 34561 1
+1 34562 1
+34562 34562 1
+1 34563 1
+34563 34563 1
+1 34564 1
+34564 34564 1
+1 34565 1
+34565 34565 1
+1 34566 1
+34566 34566 1
+1 34567 1
+34567 34567 1
+1 34568 1
+34568 34568 1
+1 34569 1
+34569 34569 1
+1 34570 1
+34570 34570 1
+1 34571 1
+34571 34571 1
+1 34572 1
+34572 34572 1
+1 34573 1
+34573 34573 1
+1 34574 1
+34574 34574 1
+1 34575 1
+34575 34575 1
+1 34576 1
+34576 34576 1
+1 34577 1
+34577 34577 1
+1 34578 1
+34578 34578 1
+1 34579 1
+34579 34579 1
+1 34580 1
+34580 34580 1
+1 34581 1
+34581 34581 1
+1 34582 1
+34582 34582 1
+1 34583 1
+34583 34583 1
+1 34584 1
+34584 34584 1
+1 34585 1
+34585 34585 1
+1 34586 1
+34586 34586 1
+1 34587 1
+34587 34587 1
+1 34588 1
+34588 34588 1
+1 34589 1
+34589 34589 1
+1 34590 1
+34590 34590 1
+1 34591 1
+34591 34591 1
+1 34592 1
+34592 34592 1
+1 34593 1
+34593 34593 1
+1 34594 1
+34594 34594 1
+1 34595 1
+34595 34595 1
+1 34596 1
+34596 34596 1
+1 34597 1
+34597 34597 1
+1 34598 1
+34598 34598 1
+1 34599 1
+34599 34599 1
+1 34600 1
+34600 34600 1
+1 34601 1
+34601 34601 1
+1 34602 1
+34602 34602 1
+1 34603 1
+34603 34603 1
+1 34604 1
+34604 34604 1
+1 34605 1
+34605 34605 1
+1 34606 1
+34606 34606 1
+1 34607 1
+34607 34607 1
+1 34608 1
+34608 34608 1
+1 34609 1
+34609 34609 1
+1 34610 1
+34610 34610 1
+1 34611 1
+34611 34611 1
+1 34612 1
+34612 34612 1
+1 34613 1
+34613 34613 1
+1 34614 1
+34614 34614 1
+1 34615 1
+34615 34615 1
+1 34616 1
+34616 34616 1
+1 34617 1
+34617 34617 1
+1 34618 1
+34618 34618 1
+1 34619 1
+34619 34619 1
+1 34620 1
+34620 34620 1
+1 34621 1
+34621 34621 1
+1 34622 1
+34622 34622 1
+1 34623 1
+34623 34623 1
+1 34624 1
+34624 34624 1
+1 34625 1
+34625 34625 1
+1 34626 1
+34626 34626 1
+1 34627 1
+34627 34627 1
+1 34628 1
+34628 34628 1
+1 34629 1
+34629 34629 1
+1 34630 1
+34630 34630 1
+1 34631 1
+34631 34631 1
+1 34632 1
+34632 34632 1
+1 34633 1
+34633 34633 1
+1 34634 1
+34634 34634 1
+1 34635 1
+34635 34635 1
+1 34636 1
+34636 34636 1
+1 34637 1
+34637 34637 1
+1 34638 1
+34638 34638 1
+1 34639 1
+34639 34639 1
+1 34640 1
+34640 34640 1
+1 34641 1
+34641 34641 1
+1 34642 1
+34642 34642 1
+1 34643 1
+34643 34643 1
+1 34644 1
+34644 34644 1
+1 34645 1
+34645 34645 1
+1 34646 1
+34646 34646 1
+1 34647 1
+34647 34647 1
+1 34648 1
+34648 34648 1
+1 34649 1
+34649 34649 1
+1 34650 1
+34650 34650 1
+1 34651 1
+34651 34651 1
+1 34652 1
+34652 34652 1
+1 34653 1
+34653 34653 1
+1 34654 1
+34654 34654 1
+1 34655 1
+34655 34655 1
+1 34656 1
+34656 34656 1
+1 34657 1
+34657 34657 1
+1 34658 1
+34658 34658 1
+1 34659 1
+34659 34659 1
+1 34660 1
+34660 34660 1
+1 34661 1
+34661 34661 1
+1 34662 1
+34662 34662 1
+1 34663 1
+34663 34663 1
+1 34664 1
+34664 34664 1
+1 34665 1
+34665 34665 1
+1 34666 1
+34666 34666 1
+1 34667 1
+34667 34667 1
+1 34668 1
+34668 34668 1
+1 34669 1
+34669 34669 1
+1 34670 1
+34670 34670 1
+1 34671 1
+34671 34671 1
+1 34672 1
+34672 34672 1
+1 34673 1
+34673 34673 1
+1 34674 1
+34674 34674 1
+1 34675 1
+34675 34675 1
+1 34676 1
+34676 34676 1
+1 34677 1
+34677 34677 1
+1 34678 1
+34678 34678 1
+1 34679 1
+34679 34679 1
+1 34680 1
+34680 34680 1
+1 34681 1
+34681 34681 1
+1 34682 1
+34682 34682 1
+1 34683 1
+34683 34683 1
+1 34684 1
+34684 34684 1
+1 34685 1
+34685 34685 1
+1 34686 1
+34686 34686 1
+1 34687 1
+34687 34687 1
+1 34688 1
+34688 34688 1
+1 34689 1
+34689 34689 1
+1 34690 1
+34690 34690 1
+1 34691 1
+34691 34691 1
+1 34692 1
+34692 34692 1
+1 34693 1
+34693 34693 1
+1 34694 1
+34694 34694 1
+1 34695 1
+34695 34695 1
+1 34696 1
+34696 34696 1
+1 34697 1
+34697 34697 1
+1 34698 1
+34698 34698 1
+1 34699 1
+34699 34699 1
+1 34700 1
+34700 34700 1
+1 34701 1
+34701 34701 1
+1 34702 1
+34702 34702 1
+1 34703 1
+34703 34703 1
+1 34704 1
+34704 34704 1
+1 34705 1
+34705 34705 1
+1 34706 1
+34706 34706 1
+1 34707 1
+34707 34707 1
+1 34708 1
+34708 34708 1
+1 34709 1
+34709 34709 1
+1 34710 1
+34710 34710 1
+1 34711 1
+34711 34711 1
+1 34712 1
+34712 34712 1
+1 34713 1
+34713 34713 1
+1 34714 1
+34714 34714 1
+1 34715 1
+34715 34715 1
+1 34716 1
+34716 34716 1
+1 34717 1
+34717 34717 1
+1 34718 1
+34718 34718 1
+1 34719 1
+34719 34719 1
+1 34720 1
+34720 34720 1
+1 34721 1
+34721 34721 1
+1 34722 1
+34722 34722 1
+1 34723 1
+34723 34723 1
+1 34724 1
+34724 34724 1
+1 34725 1
+34725 34725 1
+1 34726 1
+34726 34726 1
+1 34727 1
+34727 34727 1
+1 34728 1
+34728 34728 1
+1 34729 1
+34729 34729 1
+1 34730 1
+34730 34730 1
+1 34731 1
+34731 34731 1
+1 34732 1
+34732 34732 1
+1 34733 1
+34733 34733 1
+1 34734 1
+34734 34734 1
+1 34735 1
+34735 34735 1
+1 34736 1
+34736 34736 1
+1 34737 1
+34737 34737 1
+1 34738 1
+34738 34738 1
+1 34739 1
+34739 34739 1
+1 34740 1
+34740 34740 1
+1 34741 1
+34741 34741 1
+1 34742 1
+34742 34742 1
+1 34743 1
+34743 34743 1
+1 34744 1
+34744 34744 1
+1 34745 1
+34745 34745 1
+1 34746 1
+34746 34746 1
+1 34747 1
+34747 34747 1
+1 34748 1
+34748 34748 1
+1 34749 1
+34749 34749 1
+1 34750 1
+34750 34750 1
+1 34751 1
+34751 34751 1
+1 34752 1
+34752 34752 1
+1 34753 1
+34753 34753 1
+1 34754 1
+34754 34754 1
+1 34755 1
+34755 34755 1
+1 34756 1
+34756 34756 1
+1 34757 1
+34757 34757 1
+1 34758 1
+34758 34758 1
+1 34759 1
+34759 34759 1
+1 34760 1
+34760 34760 1
+1 34761 1
+34761 34761 1
+1 34762 1
+34762 34762 1
+1 34763 1
+34763 34763 1
+1 34764 1
+34764 34764 1
+1 34765 1
+34765 34765 1
+1 34766 1
+34766 34766 1
+1 34767 1
+34767 34767 1
+1 34768 1
+34768 34768 1
+1 34769 1
+34769 34769 1
+1 34770 1
+34770 34770 1
+1 34771 1
+34771 34771 1
+1 34772 1
+34772 34772 1
+1 34773 1
+34773 34773 1
+1 34774 1
+34774 34774 1
+1 34775 1
+34775 34775 1
+1 34776 1
+34776 34776 1
+1 34777 1
+34777 34777 1
+1 34778 1
+34778 34778 1
+1 34779 1
+34779 34779 1
+1 34780 1
+34780 34780 1
+1 34781 1
+34781 34781 1
+1 34782 1
+34782 34782 1
+1 34783 1
+34783 34783 1
+1 34784 1
+34784 34784 1
+1 34785 1
+34785 34785 1
+1 34786 1
+34786 34786 1
+1 34787 1
+34787 34787 1
+1 34788 1
+34788 34788 1
+1 34789 1
+34789 34789 1
+1 34790 1
+34790 34790 1
+1 34791 1
+34791 34791 1
+1 34792 1
+34792 34792 1
+1 34793 1
+34793 34793 1
+1 34794 1
+34794 34794 1
+1 34795 1
+34795 34795 1
+1 34796 1
+34796 34796 1
+1 34797 1
+34797 34797 1
+1 34798 1
+34798 34798 1
+1 34799 1
+34799 34799 1
+1 34800 1
+34800 34800 1
+1 34801 1
+34801 34801 1
+1 34802 1
+34802 34802 1
+1 34803 1
+34803 34803 1
+1 34804 1
+34804 34804 1
+1 34805 1
+34805 34805 1
+1 34806 1
+34806 34806 1
+1 34807 1
+34807 34807 1
+1 34808 1
+34808 34808 1
+1 34809 1
+34809 34809 1
+1 34810 1
+34810 34810 1
+1 34811 1
+34811 34811 1
+1 34812 1
+34812 34812 1
+1 34813 1
+34813 34813 1
+1 34814 1
+34814 34814 1
+1 34815 1
+34815 34815 1
+1 34816 1
+34816 34816 1
+1 34817 1
+34817 34817 1
+1 34818 1
+34818 34818 1
+1 34819 1
+34819 34819 1
+1 34820 1
+34820 34820 1
+1 34821 1
+34821 34821 1
+1 34822 1
+34822 34822 1
+1 34823 1
+34823 34823 1
+1 34824 1
+34824 34824 1
+1 34825 1
+34825 34825 1
+1 34826 1
+34826 34826 1
+1 34827 1
+34827 34827 1
+1 34828 1
+34828 34828 1
+1 34829 1
+34829 34829 1
+1 34830 1
+34830 34830 1
+1 34831 1
+34831 34831 1
+1 34832 1
+34832 34832 1
+1 34833 1
+34833 34833 1
+1 34834 1
+34834 34834 1
+1 34835 1
+34835 34835 1
+1 34836 1
+34836 34836 1
+1 34837 1
+34837 34837 1
+1 34838 1
+34838 34838 1
+1 34839 1
+34839 34839 1
+1 34840 1
+34840 34840 1
+1 34841 1
+34841 34841 1
+1 34842 1
+34842 34842 1
+1 34843 1
+34843 34843 1
+1 34844 1
+34844 34844 1
+1 34845 1
+34845 34845 1
+1 34846 1
+34846 34846 1
+1 34847 1
+34847 34847 1
+1 34848 1
+34848 34848 1
+1 34849 1
+34849 34849 1
+1 34850 1
+34850 34850 1
+1 34851 1
+34851 34851 1
+1 34852 1
+34852 34852 1
+1 34853 1
+34853 34853 1
+1 34854 1
+34854 34854 1
+1 34855 1
+34855 34855 1
+1 34856 1
+34856 34856 1
+1 34857 1
+34857 34857 1
+1 34858 1
+34858 34858 1
+1 34859 1
+34859 34859 1
+1 34860 1
+34860 34860 1
+1 34861 1
+34861 34861 1
+1 34862 1
+34862 34862 1
+1 34863 1
+34863 34863 1
+1 34864 1
+34864 34864 1
+1 34865 1
+34865 34865 1
+1 34866 1
+34866 34866 1
+1 34867 1
+34867 34867 1
+1 34868 1
+34868 34868 1
+1 34869 1
+34869 34869 1
+1 34870 1
+34870 34870 1
+1 34871 1
+34871 34871 1
+1 34872 1
+34872 34872 1
+1 34873 1
+34873 34873 1
+1 34874 1
+34874 34874 1
+1 34875 1
+34875 34875 1
+1 34876 1
+34876 34876 1
+1 34877 1
+34877 34877 1
+1 34878 1
+34878 34878 1
+1 34879 1
+34879 34879 1
+1 34880 1
+34880 34880 1
+1 34881 1
+34881 34881 1
+1 34882 1
+34882 34882 1
+1 34883 1
+34883 34883 1
+1 34884 1
+34884 34884 1
+1 34885 1
+34885 34885 1
+1 34886 1
+34886 34886 1
+1 34887 1
+34887 34887 1
+1 34888 1
+34888 34888 1
+1 34889 1
+34889 34889 1
+1 34890 1
+34890 34890 1
+1 34891 1
+34891 34891 1
+1 34892 1
+34892 34892 1
+1 34893 1
+34893 34893 1
+1 34894 1
+34894 34894 1
+1 34895 1
+34895 34895 1
+1 34896 1
+34896 34896 1
+1 34897 1
+34897 34897 1
+1 34898 1
+34898 34898 1
+1 34899 1
+34899 34899 1
+1 34900 1
+34900 34900 1
+1 34901 1
+34901 34901 1
+1 34902 1
+34902 34902 1
+1 34903 1
+34903 34903 1
+1 34904 1
+34904 34904 1
+1 34905 1
+34905 34905 1
+1 34906 1
+34906 34906 1
+1 34907 1
+34907 34907 1
+1 34908 1
+34908 34908 1
+1 34909 1
+34909 34909 1
+1 34910 1
+34910 34910 1
+1 34911 1
+34911 34911 1
+1 34912 1
+34912 34912 1
+1 34913 1
+34913 34913 1
+1 34914 1
+34914 34914 1
+1 34915 1
+34915 34915 1
+1 34916 1
+34916 34916 1
+1 34917 1
+34917 34917 1
+1 34918 1
+34918 34918 1
+1 34919 1
+34919 34919 1
+1 34920 1
+34920 34920 1
+1 34921 1
+34921 34921 1
+1 34922 1
+34922 34922 1
+1 34923 1
+34923 34923 1
+1 34924 1
+34924 34924 1
+1 34925 1
+34925 34925 1
+1 34926 1
+34926 34926 1
+1 34927 1
+34927 34927 1
+1 34928 1
+34928 34928 1
+1 34929 1
+34929 34929 1
+1 34930 1
+34930 34930 1
+1 34931 1
+34931 34931 1
+1 34932 1
+34932 34932 1
+1 34933 1
+34933 34933 1
+1 34934 1
+34934 34934 1
+1 34935 1
+34935 34935 1
+1 34936 1
+34936 34936 1
+1 34937 1
+34937 34937 1
+1 34938 1
+34938 34938 1
+1 34939 1
+34939 34939 1
+1 34940 1
+34940 34940 1
+1 34941 1
+34941 34941 1
+1 34942 1
+34942 34942 1
+1 34943 1
+34943 34943 1
+1 34944 1
+34944 34944 1
+1 34945 1
+34945 34945 1
+1 34946 1
+34946 34946 1
+1 34947 1
+34947 34947 1
+1 34948 1
+34948 34948 1
+1 34949 1
+34949 34949 1
+1 34950 1
+34950 34950 1
+1 34951 1
+34951 34951 1
+1 34952 1
+34952 34952 1
+1 34953 1
+34953 34953 1
+1 34954 1
+34954 34954 1
+1 34955 1
+34955 34955 1
+1 34956 1
+34956 34956 1
+1 34957 1
+34957 34957 1
+1 34958 1
+34958 34958 1
+1 34959 1
+34959 34959 1
+1 34960 1
+34960 34960 1
+1 34961 1
+34961 34961 1
+1 34962 1
+34962 34962 1
+1 34963 1
+34963 34963 1
+1 34964 1
+34964 34964 1
+1 34965 1
+34965 34965 1
+1 34966 1
+34966 34966 1
+1 34967 1
+34967 34967 1
+1 34968 1
+34968 34968 1
+1 34969 1
+34969 34969 1
+1 34970 1
+34970 34970 1
+1 34971 1
+34971 34971 1
+1 34972 1
+34972 34972 1
+1 34973 1
+34973 34973 1
+1 34974 1
+34974 34974 1
+1 34975 1
+34975 34975 1
+1 34976 1
+34976 34976 1
+1 34977 1
+34977 34977 1
+1 34978 1
+34978 34978 1
+1 34979 1
+34979 34979 1
+1 34980 1
+34980 34980 1
+1 34981 1
+34981 34981 1
+1 34982 1
+34982 34982 1
+1 34983 1
+34983 34983 1
+1 34984 1
+34984 34984 1
+1 34985 1
+34985 34985 1
+1 34986 1
+34986 34986 1
+1 34987 1
+34987 34987 1
+1 34988 1
+34988 34988 1
+1 34989 1
+34989 34989 1
+1 34990 1
+34990 34990 1
+1 34991 1
+34991 34991 1
+1 34992 1
+34992 34992 1
+1 34993 1
+34993 34993 1
+1 34994 1
+34994 34994 1
+1 34995 1
+34995 34995 1
+1 34996 1
+34996 34996 1
+1 34997 1
+34997 34997 1
+1 34998 1
+34998 34998 1
+1 34999 1
+34999 34999 1
+1 35000 1
+35000 35000 1
+1 35001 1
+35001 35001 1
+1 35002 1
+35002 35002 1
+1 35003 1
+35003 35003 1
+1 35004 1
+35004 35004 1
+1 35005 1
+35005 35005 1
+1 35006 1
+35006 35006 1
+1 35007 1
+35007 35007 1
+1 35008 1
+35008 35008 1
+1 35009 1
+35009 35009 1
+1 35010 1
+35010 35010 1
+1 35011 1
+35011 35011 1
+1 35012 1
+35012 35012 1
+1 35013 1
+35013 35013 1
+1 35014 1
+35014 35014 1
+1 35015 1
+35015 35015 1
+1 35016 1
+35016 35016 1
+1 35017 1
+35017 35017 1
+1 35018 1
+35018 35018 1
+1 35019 1
+35019 35019 1
+1 35020 1
+35020 35020 1
+1 35021 1
+35021 35021 1
+1 35022 1
+35022 35022 1
+1 35023 1
+35023 35023 1
+1 35024 1
+35024 35024 1
+1 35025 1
+35025 35025 1
+1 35026 1
+35026 35026 1
+1 35027 1
+35027 35027 1
+1 35028 1
+35028 35028 1
+1 35029 1
+35029 35029 1
+1 35030 1
+35030 35030 1
+1 35031 1
+35031 35031 1
+1 35032 1
+35032 35032 1
+1 35033 1
+35033 35033 1
+1 35034 1
+35034 35034 1
+1 35035 1
+35035 35035 1
+1 35036 1
+35036 35036 1
+1 35037 1
+35037 35037 1
+1 35038 1
+35038 35038 1
+1 35039 1
+35039 35039 1
+1 35040 1
+35040 35040 1
+1 35041 1
+35041 35041 1
+1 35042 1
+35042 35042 1
+1 35043 1
+35043 35043 1
+1 35044 1
+35044 35044 1
+1 35045 1
+35045 35045 1
+1 35046 1
+35046 35046 1
+1 35047 1
+35047 35047 1
+1 35048 1
+35048 35048 1
+1 35049 1
+35049 35049 1
+1 35050 1
+35050 35050 1
+1 35051 1
+35051 35051 1
+1 35052 1
+35052 35052 1
+1 35053 1
+35053 35053 1
+1 35054 1
+35054 35054 1
+1 35055 1
+35055 35055 1
+1 35056 1
+35056 35056 1
+1 35057 1
+35057 35057 1
+1 35058 1
+35058 35058 1
+1 35059 1
+35059 35059 1
+1 35060 1
+35060 35060 1
+1 35061 1
+35061 35061 1
+1 35062 1
+35062 35062 1
+1 35063 1
+35063 35063 1
+1 35064 1
+35064 35064 1
+1 35065 1
+35065 35065 1
+1 35066 1
+35066 35066 1
+1 35067 1
+35067 35067 1
+1 35068 1
+35068 35068 1
+1 35069 1
+35069 35069 1
+1 35070 1
+35070 35070 1
+1 35071 1
+35071 35071 1
+1 35072 1
+35072 35072 1
+1 35073 1
+35073 35073 1
+1 35074 1
+35074 35074 1
+1 35075 1
+35075 35075 1
+1 35076 1
+35076 35076 1
+1 35077 1
+35077 35077 1
+1 35078 1
+35078 35078 1
+1 35079 1
+35079 35079 1
+1 35080 1
+35080 35080 1
+1 35081 1
+35081 35081 1
+1 35082 1
+35082 35082 1
+1 35083 1
+35083 35083 1
+1 35084 1
+35084 35084 1
+1 35085 1
+35085 35085 1
+1 35086 1
+35086 35086 1
+1 35087 1
+35087 35087 1
+1 35088 1
+35088 35088 1
+1 35089 1
+35089 35089 1
+1 35090 1
+35090 35090 1
+1 35091 1
+35091 35091 1
+1 35092 1
+35092 35092 1
+1 35093 1
+35093 35093 1
+1 35094 1
+35094 35094 1
+1 35095 1
+35095 35095 1
+1 35096 1
+35096 35096 1
+1 35097 1
+35097 35097 1
+1 35098 1
+35098 35098 1
+1 35099 1
+35099 35099 1
+1 35100 1
+35100 35100 1
+1 35101 1
+35101 35101 1
+1 35102 1
+35102 35102 1
+1 35103 1
+35103 35103 1
+1 35104 1
+35104 35104 1
+1 35105 1
+35105 35105 1
+1 35106 1
+35106 35106 1
+1 35107 1
+35107 35107 1
+1 35108 1
+35108 35108 1
+1 35109 1
+35109 35109 1
+1 35110 1
+35110 35110 1
+1 35111 1
+35111 35111 1
+1 35112 1
+35112 35112 1
+1 35113 1
+35113 35113 1
+1 35114 1
+35114 35114 1
+1 35115 1
+35115 35115 1
+1 35116 1
+35116 35116 1
+1 35117 1
+35117 35117 1
+1 35118 1
+35118 35118 1
+1 35119 1
+35119 35119 1
+1 35120 1
+35120 35120 1
+1 35121 1
+35121 35121 1
+1 35122 1
+35122 35122 1
+1 35123 1
+35123 35123 1
+1 35124 1
+35124 35124 1
+1 35125 1
+35125 35125 1
+1 35126 1
+35126 35126 1
+1 35127 1
+35127 35127 1
+1 35128 1
+35128 35128 1
+1 35129 1
+35129 35129 1
+1 35130 1
+35130 35130 1
+1 35131 1
+35131 35131 1
+1 35132 1
+35132 35132 1
+1 35133 1
+35133 35133 1
+1 35134 1
+35134 35134 1
+1 35135 1
+35135 35135 1
+1 35136 1
+35136 35136 1
+1 35137 1
+35137 35137 1
+1 35138 1
+35138 35138 1
+1 35139 1
+35139 35139 1
+1 35140 1
+35140 35140 1
+1 35141 1
+35141 35141 1
+1 35142 1
+35142 35142 1
+1 35143 1
+35143 35143 1
+1 35144 1
+35144 35144 1
+1 35145 1
+35145 35145 1
+1 35146 1
+35146 35146 1
+1 35147 1
+35147 35147 1
+1 35148 1
+35148 35148 1
+1 35149 1
+35149 35149 1
+1 35150 1
+35150 35150 1
+1 35151 1
+35151 35151 1
+1 35152 1
+35152 35152 1
+1 35153 1
+35153 35153 1
+1 35154 1
+35154 35154 1
+1 35155 1
+35155 35155 1
+1 35156 1
+35156 35156 1
+1 35157 1
+35157 35157 1
+1 35158 1
+35158 35158 1
+1 35159 1
+35159 35159 1
+1 35160 1
+35160 35160 1
+1 35161 1
+35161 35161 1
+1 35162 1
+35162 35162 1
+1 35163 1
+35163 35163 1
+1 35164 1
+35164 35164 1
+1 35165 1
+35165 35165 1
+1 35166 1
+35166 35166 1
+1 35167 1
+35167 35167 1
+1 35168 1
+35168 35168 1
+1 35169 1
+35169 35169 1
+1 35170 1
+35170 35170 1
+1 35171 1
+35171 35171 1
+1 35172 1
+35172 35172 1
+1 35173 1
+35173 35173 1
+1 35174 1
+35174 35174 1
+1 35175 1
+35175 35175 1
+1 35176 1
+35176 35176 1
+1 35177 1
+35177 35177 1
+1 35178 1
+35178 35178 1
+1 35179 1
+35179 35179 1
+1 35180 1
+35180 35180 1
+1 35181 1
+35181 35181 1
+1 35182 1
+35182 35182 1
+1 35183 1
+35183 35183 1
+1 35184 1
+35184 35184 1
+1 35185 1
+35185 35185 1
+1 35186 1
+35186 35186 1
+1 35187 1
+35187 35187 1
+1 35188 1
+35188 35188 1
+1 35189 1
+35189 35189 1
+1 35190 1
+35190 35190 1
+1 35191 1
+35191 35191 1
+1 35192 1
+35192 35192 1
+1 35193 1
+35193 35193 1
+1 35194 1
+35194 35194 1
+1 35195 1
+35195 35195 1
+1 35196 1
+35196 35196 1
+1 35197 1
+35197 35197 1
+1 35198 1
+35198 35198 1
+1 35199 1
+35199 35199 1
+1 35200 1
+35200 35200 1
+1 35201 1
+35201 35201 1
+1 35202 1
+35202 35202 1
+1 35203 1
+35203 35203 1
+1 35204 1
+35204 35204 1
+1 35205 1
+35205 35205 1
+1 35206 1
+35206 35206 1
+1 35207 1
+35207 35207 1
+1 35208 1
+35208 35208 1
+1 35209 1
+35209 35209 1
+1 35210 1
+35210 35210 1
+1 35211 1
+35211 35211 1
+1 35212 1
+35212 35212 1
+1 35213 1
+35213 35213 1
+1 35214 1
+35214 35214 1
+1 35215 1
+35215 35215 1
+1 35216 1
+35216 35216 1
+1 35217 1
+35217 35217 1
+1 35218 1
+35218 35218 1
+1 35219 1
+35219 35219 1
+1 35220 1
+35220 35220 1
+1 35221 1
+35221 35221 1
+1 35222 1
+35222 35222 1
+1 35223 1
+35223 35223 1
+1 35224 1
+35224 35224 1
+1 35225 1
+35225 35225 1
+1 35226 1
+35226 35226 1
+1 35227 1
+35227 35227 1
+1 35228 1
+35228 35228 1
+1 35229 1
+35229 35229 1
+1 35230 1
+35230 35230 1
+1 35231 1
+35231 35231 1
+1 35232 1
+35232 35232 1
+1 35233 1
+35233 35233 1
+1 35234 1
+35234 35234 1
+1 35235 1
+35235 35235 1
+1 35236 1
+35236 35236 1
+1 35237 1
+35237 35237 1
+1 35238 1
+35238 35238 1
+1 35239 1
+35239 35239 1
+1 35240 1
+35240 35240 1
+1 35241 1
+35241 35241 1
+1 35242 1
+35242 35242 1
+1 35243 1
+35243 35243 1
+1 35244 1
+35244 35244 1
+1 35245 1
+35245 35245 1
+1 35246 1
+35246 35246 1
+1 35247 1
+35247 35247 1
+1 35248 1
+35248 35248 1
+1 35249 1
+35249 35249 1
+1 35250 1
+35250 35250 1
+1 35251 1
+35251 35251 1
+1 35252 1
+35252 35252 1
+1 35253 1
+35253 35253 1
+1 35254 1
+35254 35254 1
+1 35255 1
+35255 35255 1
+1 35256 1
+35256 35256 1
+1 35257 1
+35257 35257 1
+1 35258 1
+35258 35258 1
+1 35259 1
+35259 35259 1
+1 35260 1
+35260 35260 1
+1 35261 1
+35261 35261 1
+1 35262 1
+35262 35262 1
+1 35263 1
+35263 35263 1
+1 35264 1
+35264 35264 1
+1 35265 1
+35265 35265 1
+1 35266 1
+35266 35266 1
+1 35267 1
+35267 35267 1
+1 35268 1
+35268 35268 1
+1 35269 1
+35269 35269 1
+1 35270 1
+35270 35270 1
+1 35271 1
+35271 35271 1
+1 35272 1
+35272 35272 1
+1 35273 1
+35273 35273 1
+1 35274 1
+35274 35274 1
+1 35275 1
+35275 35275 1
+1 35276 1
+35276 35276 1
+1 35277 1
+35277 35277 1
+1 35278 1
+35278 35278 1
+1 35279 1
+35279 35279 1
+1 35280 1
+35280 35280 1
+1 35281 1
+35281 35281 1
+1 35282 1
+35282 35282 1
+1 35283 1
+35283 35283 1
+1 35284 1
+35284 35284 1
+1 35285 1
+35285 35285 1
+1 35286 1
+35286 35286 1
+1 35287 1
+35287 35287 1
+1 35288 1
+35288 35288 1
+1 35289 1
+35289 35289 1
+1 35290 1
+35290 35290 1
+1 35291 1
+35291 35291 1
+1 35292 1
+35292 35292 1
+1 35293 1
+35293 35293 1
+1 35294 1
+35294 35294 1
+1 35295 1
+35295 35295 1
+1 35296 1
+35296 35296 1
+1 35297 1
+35297 35297 1
+1 35298 1
+35298 35298 1
+1 35299 1
+35299 35299 1
+1 35300 1
+35300 35300 1
+1 35301 1
+35301 35301 1
+1 35302 1
+35302 35302 1
+1 35303 1
+35303 35303 1
+1 35304 1
+35304 35304 1
+1 35305 1
+35305 35305 1
+1 35306 1
+35306 35306 1
+1 35307 1
+35307 35307 1
+1 35308 1
+35308 35308 1
+1 35309 1
+35309 35309 1
+1 35310 1
+35310 35310 1
+1 35311 1
+35311 35311 1
+1 35312 1
+35312 35312 1
+1 35313 1
+35313 35313 1
+1 35314 1
+35314 35314 1
+1 35315 1
+35315 35315 1
+1 35316 1
+35316 35316 1
+1 35317 1
+35317 35317 1
+1 35318 1
+35318 35318 1
+1 35319 1
+35319 35319 1
+1 35320 1
+35320 35320 1
+1 35321 1
+35321 35321 1
+1 35322 1
+35322 35322 1
+1 35323 1
+35323 35323 1
+1 35324 1
+35324 35324 1
+1 35325 1
+35325 35325 1
+1 35326 1
+35326 35326 1
+1 35327 1
+35327 35327 1
+1 35328 1
+35328 35328 1
+1 35329 1
+35329 35329 1
+1 35330 1
+35330 35330 1
+1 35331 1
+35331 35331 1
+1 35332 1
+35332 35332 1
+1 35333 1
+35333 35333 1
+1 35334 1
+35334 35334 1
+1 35335 1
+35335 35335 1
+1 35336 1
+35336 35336 1
+1 35337 1
+35337 35337 1
+1 35338 1
+35338 35338 1
+1 35339 1
+35339 35339 1
+1 35340 1
+35340 35340 1
+1 35341 1
+35341 35341 1
+1 35342 1
+35342 35342 1
+1 35343 1
+35343 35343 1
+1 35344 1
+35344 35344 1
+1 35345 1
+35345 35345 1
+1 35346 1
+35346 35346 1
+1 35347 1
+35347 35347 1
+1 35348 1
+35348 35348 1
+1 35349 1
+35349 35349 1
+1 35350 1
+35350 35350 1
+1 35351 1
+35351 35351 1
+1 35352 1
+35352 35352 1
+1 35353 1
+35353 35353 1
+1 35354 1
+35354 35354 1
+1 35355 1
+35355 35355 1
+1 35356 1
+35356 35356 1
+1 35357 1
+35357 35357 1
+1 35358 1
+35358 35358 1
+1 35359 1
+35359 35359 1
+1 35360 1
+35360 35360 1
+1 35361 1
+35361 35361 1
+1 35362 1
+35362 35362 1
+1 35363 1
+35363 35363 1
+1 35364 1
+35364 35364 1
+1 35365 1
+35365 35365 1
+1 35366 1
+35366 35366 1
+1 35367 1
+35367 35367 1
+1 35368 1
+35368 35368 1
+1 35369 1
+35369 35369 1
+1 35370 1
+35370 35370 1
+1 35371 1
+35371 35371 1
+1 35372 1
+35372 35372 1
+1 35373 1
+35373 35373 1
+1 35374 1
+35374 35374 1
+1 35375 1
+35375 35375 1
+1 35376 1
+35376 35376 1
+1 35377 1
+35377 35377 1
+1 35378 1
+35378 35378 1
+1 35379 1
+35379 35379 1
+1 35380 1
+35380 35380 1
+1 35381 1
+35381 35381 1
+1 35382 1
+35382 35382 1
+1 35383 1
+35383 35383 1
+1 35384 1
+35384 35384 1
+1 35385 1
+35385 35385 1
+1 35386 1
+35386 35386 1
+1 35387 1
+35387 35387 1
+1 35388 1
+35388 35388 1
+1 35389 1
+35389 35389 1
+1 35390 1
+35390 35390 1
+1 35391 1
+35391 35391 1
+1 35392 1
+35392 35392 1
+1 35393 1
+35393 35393 1
+1 35394 1
+35394 35394 1
+1 35395 1
+35395 35395 1
+1 35396 1
+35396 35396 1
+1 35397 1
+35397 35397 1
+1 35398 1
+35398 35398 1
+1 35399 1
+35399 35399 1
+1 35400 1
+35400 35400 1
+1 35401 1
+35401 35401 1
+1 35402 1
+35402 35402 1
+1 35403 1
+35403 35403 1
+1 35404 1
+35404 35404 1
+1 35405 1
+35405 35405 1
+1 35406 1
+35406 35406 1
+1 35407 1
+35407 35407 1
+1 35408 1
+35408 35408 1
+1 35409 1
+35409 35409 1
+1 35410 1
+35410 35410 1
+1 35411 1
+35411 35411 1
+1 35412 1
+35412 35412 1
+1 35413 1
+35413 35413 1
+1 35414 1
+35414 35414 1
+1 35415 1
+35415 35415 1
+1 35416 1
+35416 35416 1
+1 35417 1
+35417 35417 1
+1 35418 1
+35418 35418 1
+1 35419 1
+35419 35419 1
+1 35420 1
+35420 35420 1
+1 35421 1
+35421 35421 1
+1 35422 1
+35422 35422 1
+1 35423 1
+35423 35423 1
+1 35424 1
+35424 35424 1
+1 35425 1
+35425 35425 1
+1 35426 1
+35426 35426 1
+1 35427 1
+35427 35427 1
+1 35428 1
+35428 35428 1
+1 35429 1
+35429 35429 1
+1 35430 1
+35430 35430 1
+1 35431 1
+35431 35431 1
+1 35432 1
+35432 35432 1
+1 35433 1
+35433 35433 1
+1 35434 1
+35434 35434 1
+1 35435 1
+35435 35435 1
+1 35436 1
+35436 35436 1
+1 35437 1
+35437 35437 1
+1 35438 1
+35438 35438 1
+1 35439 1
+35439 35439 1
+1 35440 1
+35440 35440 1
+1 35441 1
+35441 35441 1
+1 35442 1
+35442 35442 1
+1 35443 1
+35443 35443 1
+1 35444 1
+35444 35444 1
+1 35445 1
+35445 35445 1
+1 35446 1
+35446 35446 1
+1 35447 1
+35447 35447 1
+1 35448 1
+35448 35448 1
+1 35449 1
+35449 35449 1
+1 35450 1
+35450 35450 1
+1 35451 1
+35451 35451 1
+1 35452 1
+35452 35452 1
+1 35453 1
+35453 35453 1
+1 35454 1
+35454 35454 1
+1 35455 1
+35455 35455 1
+1 35456 1
+35456 35456 1
+1 35457 1
+35457 35457 1
+1 35458 1
+35458 35458 1
+1 35459 1
+35459 35459 1
+1 35460 1
+35460 35460 1
+1 35461 1
+35461 35461 1
+1 35462 1
+35462 35462 1
+1 35463 1
+35463 35463 1
+1 35464 1
+35464 35464 1
+1 35465 1
+35465 35465 1
+1 35466 1
+35466 35466 1
+1 35467 1
+35467 35467 1
+1 35468 1
+35468 35468 1
+1 35469 1
+35469 35469 1
+1 35470 1
+35470 35470 1
+1 35471 1
+35471 35471 1
+1 35472 1
+35472 35472 1
+1 35473 1
+35473 35473 1
+1 35474 1
+35474 35474 1
+1 35475 1
+35475 35475 1
+1 35476 1
+35476 35476 1
+1 35477 1
+35477 35477 1
+1 35478 1
+35478 35478 1
+1 35479 1
+35479 35479 1
+1 35480 1
+35480 35480 1
+1 35481 1
+35481 35481 1
+1 35482 1
+35482 35482 1
+1 35483 1
+35483 35483 1
+1 35484 1
+35484 35484 1
+1 35485 1
+35485 35485 1
+1 35486 1
+35486 35486 1
+1 35487 1
+35487 35487 1
+1 35488 1
+35488 35488 1
+1 35489 1
+35489 35489 1
+1 35490 1
+35490 35490 1
+1 35491 1
+35491 35491 1
+1 35492 1
+35492 35492 1
+1 35493 1
+35493 35493 1
+1 35494 1
+35494 35494 1
+1 35495 1
+35495 35495 1
+1 35496 1
+35496 35496 1
+1 35497 1
+35497 35497 1
+1 35498 1
+35498 35498 1
+1 35499 1
+35499 35499 1
+1 35500 1
+35500 35500 1
+1 35501 1
+35501 35501 1
+1 35502 1
+35502 35502 1
+1 35503 1
+35503 35503 1
+1 35504 1
+35504 35504 1
+1 35505 1
+35505 35505 1
+1 35506 1
+35506 35506 1
+1 35507 1
+35507 35507 1
+1 35508 1
+35508 35508 1
+1 35509 1
+35509 35509 1
+1 35510 1
+35510 35510 1
+1 35511 1
+35511 35511 1
+1 35512 1
+35512 35512 1
+1 35513 1
+35513 35513 1
+1 35514 1
+35514 35514 1
+1 35515 1
+35515 35515 1
+1 35516 1
+35516 35516 1
+1 35517 1
+35517 35517 1
+1 35518 1
+35518 35518 1
+1 35519 1
+35519 35519 1
+1 35520 1
+35520 35520 1
+1 35521 1
+35521 35521 1
+1 35522 1
+35522 35522 1
+1 35523 1
+35523 35523 1
+1 35524 1
+35524 35524 1
+1 35525 1
+35525 35525 1
+1 35526 1
+35526 35526 1
+1 35527 1
+35527 35527 1
+1 35528 1
+35528 35528 1
+1 35529 1
+35529 35529 1
+1 35530 1
+35530 35530 1
+1 35531 1
+35531 35531 1
+1 35532 1
+35532 35532 1
+1 35533 1
+35533 35533 1
+1 35534 1
+35534 35534 1
+1 35535 1
+35535 35535 1
+1 35536 1
+35536 35536 1
+1 35537 1
+35537 35537 1
+1 35538 1
+35538 35538 1
+1 35539 1
+35539 35539 1
+1 35540 1
+35540 35540 1
+1 35541 1
+35541 35541 1
+1 35542 1
+35542 35542 1
+1 35543 1
+35543 35543 1
+1 35544 1
+35544 35544 1
+1 35545 1
+35545 35545 1
+1 35546 1
+35546 35546 1
+1 35547 1
+35547 35547 1
+1 35548 1
+35548 35548 1
+1 35549 1
+35549 35549 1
+1 35550 1
+35550 35550 1
+1 35551 1
+35551 35551 1
+1 35552 1
+35552 35552 1
+1 35553 1
+35553 35553 1
+1 35554 1
+35554 35554 1
+1 35555 1
+35555 35555 1
+1 35556 1
+35556 35556 1
+1 35557 1
+35557 35557 1
+1 35558 1
+35558 35558 1
+1 35559 1
+35559 35559 1
+1 35560 1
+35560 35560 1
+1 35561 1
+35561 35561 1
+1 35562 1
+35562 35562 1
+1 35563 1
+35563 35563 1
+1 35564 1
+35564 35564 1
+1 35565 1
+35565 35565 1
+1 35566 1
+35566 35566 1
+1 35567 1
+35567 35567 1
+1 35568 1
+35568 35568 1
+1 35569 1
+35569 35569 1
+1 35570 1
+35570 35570 1
+1 35571 1
+35571 35571 1
+1 35572 1
+35572 35572 1
+1 35573 1
+35573 35573 1
+1 35574 1
+35574 35574 1
+1 35575 1
+35575 35575 1
+1 35576 1
+35576 35576 1
+1 35577 1
+35577 35577 1
+1 35578 1
+35578 35578 1
+1 35579 1
+35579 35579 1
+1 35580 1
+35580 35580 1
+1 35581 1
+35581 35581 1
+1 35582 1
+35582 35582 1
+1 35583 1
+35583 35583 1
+1 35584 1
+35584 35584 1
+1 35585 1
+35585 35585 1
+1 35586 1
+35586 35586 1
+1 35587 1
+35587 35587 1
+1 35588 1
+35588 35588 1
+1 35589 1
+35589 35589 1
+1 35590 1
+35590 35590 1
+1 35591 1
+35591 35591 1
+1 35592 1
+35592 35592 1
+1 35593 1
+35593 35593 1
+1 35594 1
+35594 35594 1
+1 35595 1
+35595 35595 1
+1 35596 1
+35596 35596 1
+1 35597 1
+35597 35597 1
+1 35598 1
+35598 35598 1
+1 35599 1
+35599 35599 1
+1 35600 1
+35600 35600 1
+1 35601 1
+35601 35601 1
+1 35602 1
+35602 35602 1
+1 35603 1
+35603 35603 1
+1 35604 1
+35604 35604 1
+1 35605 1
+35605 35605 1
+1 35606 1
+35606 35606 1
+1 35607 1
+35607 35607 1
+1 35608 1
+35608 35608 1
+1 35609 1
+35609 35609 1
+1 35610 1
+35610 35610 1
+1 35611 1
+35611 35611 1
+1 35612 1
+35612 35612 1
+1 35613 1
+35613 35613 1
+1 35614 1
+35614 35614 1
+1 35615 1
+35615 35615 1
+1 35616 1
+35616 35616 1
+1 35617 1
+35617 35617 1
+1 35618 1
+35618 35618 1
+1 35619 1
+35619 35619 1
+1 35620 1
+35620 35620 1
+1 35621 1
+35621 35621 1
+1 35622 1
+35622 35622 1
+1 35623 1
+35623 35623 1
+1 35624 1
+35624 35624 1
+1 35625 1
+35625 35625 1
+1 35626 1
+35626 35626 1
+1 35627 1
+35627 35627 1
+1 35628 1
+35628 35628 1
+1 35629 1
+35629 35629 1
+1 35630 1
+35630 35630 1
+1 35631 1
+35631 35631 1
+1 35632 1
+35632 35632 1
+1 35633 1
+35633 35633 1
+1 35634 1
+35634 35634 1
+1 35635 1
+35635 35635 1
+1 35636 1
+35636 35636 1
+1 35637 1
+35637 35637 1
+1 35638 1
+35638 35638 1
+1 35639 1
+35639 35639 1
+1 35640 1
+35640 35640 1
+1 35641 1
+35641 35641 1
+1 35642 1
+35642 35642 1
+1 35643 1
+35643 35643 1
+1 35644 1
+35644 35644 1
+1 35645 1
+35645 35645 1
+1 35646 1
+35646 35646 1
+1 35647 1
+35647 35647 1
+1 35648 1
+35648 35648 1
+1 35649 1
+35649 35649 1
+1 35650 1
+35650 35650 1
+1 35651 1
+35651 35651 1
+1 35652 1
+35652 35652 1
+1 35653 1
+35653 35653 1
+1 35654 1
+35654 35654 1
+1 35655 1
+35655 35655 1
+1 35656 1
+35656 35656 1
+1 35657 1
+35657 35657 1
+1 35658 1
+35658 35658 1
+1 35659 1
+35659 35659 1
+1 35660 1
+35660 35660 1
+1 35661 1
+35661 35661 1
+1 35662 1
+35662 35662 1
+1 35663 1
+35663 35663 1
+1 35664 1
+35664 35664 1
+1 35665 1
+35665 35665 1
+1 35666 1
+35666 35666 1
+1 35667 1
+35667 35667 1
+1 35668 1
+35668 35668 1
+1 35669 1
+35669 35669 1
+1 35670 1
+35670 35670 1
+1 35671 1
+35671 35671 1
+1 35672 1
+35672 35672 1
+1 35673 1
+35673 35673 1
+1 35674 1
+35674 35674 1
+1 35675 1
+35675 35675 1
+1 35676 1
+35676 35676 1
+1 35677 1
+35677 35677 1
+1 35678 1
+35678 35678 1
+1 35679 1
+35679 35679 1
+1 35680 1
+35680 35680 1
+1 35681 1
+35681 35681 1
+1 35682 1
+35682 35682 1
+1 35683 1
+35683 35683 1
+1 35684 1
+35684 35684 1
+1 35685 1
+35685 35685 1
+1 35686 1
+35686 35686 1
+1 35687 1
+35687 35687 1
+1 35688 1
+35688 35688 1
+1 35689 1
+35689 35689 1
+1 35690 1
+35690 35690 1
+1 35691 1
+35691 35691 1
+1 35692 1
+35692 35692 1
+1 35693 1
+35693 35693 1
+1 35694 1
+35694 35694 1
+1 35695 1
+35695 35695 1
+1 35696 1
+35696 35696 1
+1 35697 1
+35697 35697 1
+1 35698 1
+35698 35698 1
+1 35699 1
+35699 35699 1
+1 35700 1
+35700 35700 1
+1 35701 1
+35701 35701 1
+1 35702 1
+35702 35702 1
+1 35703 1
+35703 35703 1
+1 35704 1
+35704 35704 1
+1 35705 1
+35705 35705 1
+1 35706 1
+35706 35706 1
+1 35707 1
+35707 35707 1
+1 35708 1
+35708 35708 1
+1 35709 1
+35709 35709 1
+1 35710 1
+35710 35710 1
+1 35711 1
+35711 35711 1
+1 35712 1
+35712 35712 1
+1 35713 1
+35713 35713 1
+1 35714 1
+35714 35714 1
+1 35715 1
+35715 35715 1
+1 35716 1
+35716 35716 1
+1 35717 1
+35717 35717 1
+1 35718 1
+35718 35718 1
+1 35719 1
+35719 35719 1
+1 35720 1
+35720 35720 1
+1 35721 1
+35721 35721 1
+1 35722 1
+35722 35722 1
+1 35723 1
+35723 35723 1
+1 35724 1
+35724 35724 1
+1 35725 1
+35725 35725 1
+1 35726 1
+35726 35726 1
+1 35727 1
+35727 35727 1
+1 35728 1
+35728 35728 1
+1 35729 1
+35729 35729 1
+1 35730 1
+35730 35730 1
+1 35731 1
+35731 35731 1
+1 35732 1
+35732 35732 1
+1 35733 1
+35733 35733 1
+1 35734 1
+35734 35734 1
+1 35735 1
+35735 35735 1
+1 35736 1
+35736 35736 1
+1 35737 1
+35737 35737 1
+1 35738 1
+35738 35738 1
+1 35739 1
+35739 35739 1
+1 35740 1
+35740 35740 1
+1 35741 1
+35741 35741 1
+1 35742 1
+35742 35742 1
+1 35743 1
+35743 35743 1
+1 35744 1
+35744 35744 1
+1 35745 1
+35745 35745 1
+1 35746 1
+35746 35746 1
+1 35747 1
+35747 35747 1
+1 35748 1
+35748 35748 1
+1 35749 1
+35749 35749 1
+1 35750 1
+35750 35750 1
+1 35751 1
+35751 35751 1
+1 35752 1
+35752 35752 1
+1 35753 1
+35753 35753 1
+1 35754 1
+35754 35754 1
+1 35755 1
+35755 35755 1
+1 35756 1
+35756 35756 1
+1 35757 1
+35757 35757 1
+1 35758 1
+35758 35758 1
+1 35759 1
+35759 35759 1
+1 35760 1
+35760 35760 1
+1 35761 1
+35761 35761 1
+1 35762 1
+35762 35762 1
+1 35763 1
+35763 35763 1
+1 35764 1
+35764 35764 1
+1 35765 1
+35765 35765 1
+1 35766 1
+35766 35766 1
+1 35767 1
+35767 35767 1
+1 35768 1
+35768 35768 1
+1 35769 1
+35769 35769 1
+1 35770 1
+35770 35770 1
+1 35771 1
+35771 35771 1
+1 35772 1
+35772 35772 1
+1 35773 1
+35773 35773 1
+1 35774 1
+35774 35774 1
+1 35775 1
+35775 35775 1
+1 35776 1
+35776 35776 1
+1 35777 1
+35777 35777 1
+1 35778 1
+35778 35778 1
+1 35779 1
+35779 35779 1
+1 35780 1
+35780 35780 1
+1 35781 1
+35781 35781 1
+1 35782 1
+35782 35782 1
+1 35783 1
+35783 35783 1
+1 35784 1
+35784 35784 1
+1 35785 1
+35785 35785 1
+1 35786 1
+35786 35786 1
+1 35787 1
+35787 35787 1
+1 35788 1
+35788 35788 1
+1 35789 1
+35789 35789 1
+1 35790 1
+35790 35790 1
+1 35791 1
+35791 35791 1
+1 35792 1
+35792 35792 1
+1 35793 1
+35793 35793 1
+1 35794 1
+35794 35794 1
+1 35795 1
+35795 35795 1
+1 35796 1
+35796 35796 1
+1 35797 1
+35797 35797 1
+1 35798 1
+35798 35798 1
+1 35799 1
+35799 35799 1
+1 35800 1
+35800 35800 1
+1 35801 1
+35801 35801 1
+1 35802 1
+35802 35802 1
+1 35803 1
+35803 35803 1
+1 35804 1
+35804 35804 1
+1 35805 1
+35805 35805 1
+1 35806 1
+35806 35806 1
+1 35807 1
+35807 35807 1
+1 35808 1
+35808 35808 1
+1 35809 1
+35809 35809 1
+1 35810 1
+35810 35810 1
+1 35811 1
+35811 35811 1
+1 35812 1
+35812 35812 1
+1 35813 1
+35813 35813 1
+1 35814 1
+35814 35814 1
+1 35815 1
+35815 35815 1
+1 35816 1
+35816 35816 1
+1 35817 1
+35817 35817 1
+1 35818 1
+35818 35818 1
+1 35819 1
+35819 35819 1
+1 35820 1
+35820 35820 1
+1 35821 1
+35821 35821 1
+1 35822 1
+35822 35822 1
+1 35823 1
+35823 35823 1
+1 35824 1
+35824 35824 1
+1 35825 1
+35825 35825 1
+1 35826 1
+35826 35826 1
+1 35827 1
+35827 35827 1
+1 35828 1
+35828 35828 1
+1 35829 1
+35829 35829 1
+1 35830 1
+35830 35830 1
+1 35831 1
+35831 35831 1
+1 35832 1
+35832 35832 1
+1 35833 1
+35833 35833 1
+1 35834 1
+35834 35834 1
+1 35835 1
+35835 35835 1
+1 35836 1
+35836 35836 1
+1 35837 1
+35837 35837 1
+1 35838 1
+35838 35838 1
+1 35839 1
+35839 35839 1
+1 35840 1
+35840 35840 1
+1 35841 1
+35841 35841 1
+1 35842 1
+35842 35842 1
+1 35843 1
+35843 35843 1
+1 35844 1
+35844 35844 1
+1 35845 1
+35845 35845 1
+1 35846 1
+35846 35846 1
+1 35847 1
+35847 35847 1
+1 35848 1
+35848 35848 1
+1 35849 1
+35849 35849 1
+1 35850 1
+35850 35850 1
+1 35851 1
+35851 35851 1
+1 35852 1
+35852 35852 1
+1 35853 1
+35853 35853 1
+1 35854 1
+35854 35854 1
+1 35855 1
+35855 35855 1
+1 35856 1
+35856 35856 1
+1 35857 1
+35857 35857 1
+1 35858 1
+35858 35858 1
+1 35859 1
+35859 35859 1
+1 35860 1
+35860 35860 1
+1 35861 1
+35861 35861 1
+1 35862 1
+35862 35862 1
+1 35863 1
+35863 35863 1
+1 35864 1
+35864 35864 1
+1 35865 1
+35865 35865 1
+1 35866 1
+35866 35866 1
+1 35867 1
+35867 35867 1
+1 35868 1
+35868 35868 1
+1 35869 1
+35869 35869 1
+1 35870 1
+35870 35870 1
+1 35871 1
+35871 35871 1
+1 35872 1
+35872 35872 1
+1 35873 1
+35873 35873 1
+1 35874 1
+35874 35874 1
+1 35875 1
+35875 35875 1
+1 35876 1
+35876 35876 1
+1 35877 1
+35877 35877 1
+1 35878 1
+35878 35878 1
+1 35879 1
+35879 35879 1
+1 35880 1
+35880 35880 1
+1 35881 1
+35881 35881 1
+1 35882 1
+35882 35882 1
+1 35883 1
+35883 35883 1
+1 35884 1
+35884 35884 1
+1 35885 1
+35885 35885 1
+1 35886 1
+35886 35886 1
+1 35887 1
+35887 35887 1
+1 35888 1
+35888 35888 1
+1 35889 1
+35889 35889 1
+1 35890 1
+35890 35890 1
+1 35891 1
+35891 35891 1
+1 35892 1
+35892 35892 1
+1 35893 1
+35893 35893 1
+1 35894 1
+35894 35894 1
+1 35895 1
+35895 35895 1
+1 35896 1
+35896 35896 1
+1 35897 1
+35897 35897 1
+1 35898 1
+35898 35898 1
+1 35899 1
+35899 35899 1
+1 35900 1
+35900 35900 1
+1 35901 1
+35901 35901 1
+1 35902 1
+35902 35902 1
+1 35903 1
+35903 35903 1
+1 35904 1
+35904 35904 1
+1 35905 1
+35905 35905 1
+1 35906 1
+35906 35906 1
+1 35907 1
+35907 35907 1
+1 35908 1
+35908 35908 1
+1 35909 1
+35909 35909 1
+1 35910 1
+35910 35910 1
+1 35911 1
+35911 35911 1
+1 35912 1
+35912 35912 1
+1 35913 1
+35913 35913 1
+1 35914 1
+35914 35914 1
+1 35915 1
+35915 35915 1
+1 35916 1
+35916 35916 1
+1 35917 1
+35917 35917 1
+1 35918 1
+35918 35918 1
+1 35919 1
+35919 35919 1
+1 35920 1
+35920 35920 1
+1 35921 1
+35921 35921 1
+1 35922 1
+35922 35922 1
+1 35923 1
+35923 35923 1
+1 35924 1
+35924 35924 1
+1 35925 1
+35925 35925 1
+1 35926 1
+35926 35926 1
+1 35927 1
+35927 35927 1
+1 35928 1
+35928 35928 1
+1 35929 1
+35929 35929 1
+1 35930 1
+35930 35930 1
+1 35931 1
+35931 35931 1
+1 35932 1
+35932 35932 1
+1 35933 1
+35933 35933 1
+1 35934 1
+35934 35934 1
+1 35935 1
+35935 35935 1
+1 35936 1
+35936 35936 1
+1 35937 1
+35937 35937 1
+1 35938 1
+35938 35938 1
+1 35939 1
+35939 35939 1
+1 35940 1
+35940 35940 1
+1 35941 1
+35941 35941 1
+1 35942 1
+35942 35942 1
+1 35943 1
+35943 35943 1
+1 35944 1
+35944 35944 1
+1 35945 1
+35945 35945 1
+1 35946 1
+35946 35946 1
+1 35947 1
+35947 35947 1
+1 35948 1
+35948 35948 1
+1 35949 1
+35949 35949 1
+1 35950 1
+35950 35950 1
+1 35951 1
+35951 35951 1
+1 35952 1
+35952 35952 1
+1 35953 1
+35953 35953 1
+1 35954 1
+35954 35954 1
+1 35955 1
+35955 35955 1
+1 35956 1
+35956 35956 1
+1 35957 1
+35957 35957 1
+1 35958 1
+35958 35958 1
+1 35959 1
+35959 35959 1
+1 35960 1
+35960 35960 1
+1 35961 1
+35961 35961 1
+1 35962 1
+35962 35962 1
+1 35963 1
+35963 35963 1
+1 35964 1
+35964 35964 1
+1 35965 1
+35965 35965 1
+1 35966 1
+35966 35966 1
+1 35967 1
+35967 35967 1
+1 35968 1
+35968 35968 1
+1 35969 1
+35969 35969 1
+1 35970 1
+35970 35970 1
+1 35971 1
+35971 35971 1
+1 35972 1
+35972 35972 1
+1 35973 1
+35973 35973 1
+1 35974 1
+35974 35974 1
+1 35975 1
+35975 35975 1
+1 35976 1
+35976 35976 1
+1 35977 1
+35977 35977 1
+1 35978 1
+35978 35978 1
+1 35979 1
+35979 35979 1
+1 35980 1
+35980 35980 1
+1 35981 1
+35981 35981 1
+1 35982 1
+35982 35982 1
+1 35983 1
+35983 35983 1
+1 35984 1
+35984 35984 1
+1 35985 1
+35985 35985 1
+1 35986 1
+35986 35986 1
+1 35987 1
+35987 35987 1
+1 35988 1
+35988 35988 1
+1 35989 1
+35989 35989 1
+1 35990 1
+35990 35990 1
+1 35991 1
+35991 35991 1
+1 35992 1
+35992 35992 1
+1 35993 1
+35993 35993 1
+1 35994 1
+35994 35994 1
+1 35995 1
+35995 35995 1
+1 35996 1
+35996 35996 1
+1 35997 1
+35997 35997 1
+1 35998 1
+35998 35998 1
+1 35999 1
+35999 35999 1
+1 36000 1
+36000 36000 1
+1 36001 1
+36001 36001 1
+1 36002 1
+36002 36002 1
+1 36003 1
+36003 36003 1
+1 36004 1
+36004 36004 1
+1 36005 1
+36005 36005 1
+1 36006 1
+36006 36006 1
+1 36007 1
+36007 36007 1
+1 36008 1
+36008 36008 1
+1 36009 1
+36009 36009 1
+1 36010 1
+36010 36010 1
+1 36011 1
+36011 36011 1
+1 36012 1
+36012 36012 1
+1 36013 1
+36013 36013 1
+1 36014 1
+36014 36014 1
+1 36015 1
+36015 36015 1
+1 36016 1
+36016 36016 1
+1 36017 1
+36017 36017 1
+1 36018 1
+36018 36018 1
+1 36019 1
+36019 36019 1
+1 36020 1
+36020 36020 1
+1 36021 1
+36021 36021 1
+1 36022 1
+36022 36022 1
+1 36023 1
+36023 36023 1
+1 36024 1
+36024 36024 1
+1 36025 1
+36025 36025 1
+1 36026 1
+36026 36026 1
+1 36027 1
+36027 36027 1
+1 36028 1
+36028 36028 1
+1 36029 1
+36029 36029 1
+1 36030 1
+36030 36030 1
+1 36031 1
+36031 36031 1
+1 36032 1
+36032 36032 1
+1 36033 1
+36033 36033 1
+1 36034 1
+36034 36034 1
+1 36035 1
+36035 36035 1
+1 36036 1
+36036 36036 1
+1 36037 1
+36037 36037 1
+1 36038 1
+36038 36038 1
+1 36039 1
+36039 36039 1
+1 36040 1
+36040 36040 1
+1 36041 1
+36041 36041 1
+1 36042 1
+36042 36042 1
+1 36043 1
+36043 36043 1
+1 36044 1
+36044 36044 1
+1 36045 1
+36045 36045 1
+1 36046 1
+36046 36046 1
+1 36047 1
+36047 36047 1
+1 36048 1
+36048 36048 1
+1 36049 1
+36049 36049 1
+1 36050 1
+36050 36050 1
+1 36051 1
+36051 36051 1
+1 36052 1
+36052 36052 1
+1 36053 1
+36053 36053 1
+1 36054 1
+36054 36054 1
+1 36055 1
+36055 36055 1
+1 36056 1
+36056 36056 1
+1 36057 1
+36057 36057 1
+1 36058 1
+36058 36058 1
+1 36059 1
+36059 36059 1
+1 36060 1
+36060 36060 1
+1 36061 1
+36061 36061 1
+1 36062 1
+36062 36062 1
+1 36063 1
+36063 36063 1
+1 36064 1
+36064 36064 1
+1 36065 1
+36065 36065 1
+1 36066 1
+36066 36066 1
+1 36067 1
+36067 36067 1
+1 36068 1
+36068 36068 1
+1 36069 1
+36069 36069 1
+1 36070 1
+36070 36070 1
+1 36071 1
+36071 36071 1
+1 36072 1
+36072 36072 1
+1 36073 1
+36073 36073 1
+1 36074 1
+36074 36074 1
+1 36075 1
+36075 36075 1
+1 36076 1
+36076 36076 1
+1 36077 1
+36077 36077 1
+1 36078 1
+36078 36078 1
+1 36079 1
+36079 36079 1
+1 36080 1
+36080 36080 1
+1 36081 1
+36081 36081 1
+1 36082 1
+36082 36082 1
+1 36083 1
+36083 36083 1
+1 36084 1
+36084 36084 1
+1 36085 1
+36085 36085 1
+1 36086 1
+36086 36086 1
+1 36087 1
+36087 36087 1
+1 36088 1
+36088 36088 1
+1 36089 1
+36089 36089 1
+1 36090 1
+36090 36090 1
+1 36091 1
+36091 36091 1
+1 36092 1
+36092 36092 1
+1 36093 1
+36093 36093 1
+1 36094 1
+36094 36094 1
+1 36095 1
+36095 36095 1
+1 36096 1
+36096 36096 1
+1 36097 1
+36097 36097 1
+1 36098 1
+36098 36098 1
+1 36099 1
+36099 36099 1
+1 36100 1
+36100 36100 1
+1 36101 1
+36101 36101 1
+1 36102 1
+36102 36102 1
+1 36103 1
+36103 36103 1
+1 36104 1
+36104 36104 1
+1 36105 1
+36105 36105 1
+1 36106 1
+36106 36106 1
+1 36107 1
+36107 36107 1
+1 36108 1
+36108 36108 1
+1 36109 1
+36109 36109 1
+1 36110 1
+36110 36110 1
+1 36111 1
+36111 36111 1
+1 36112 1
+36112 36112 1
+1 36113 1
+36113 36113 1
+1 36114 1
+36114 36114 1
+1 36115 1
+36115 36115 1
+1 36116 1
+36116 36116 1
+1 36117 1
+36117 36117 1
+1 36118 1
+36118 36118 1
+1 36119 1
+36119 36119 1
+1 36120 1
+36120 36120 1
+1 36121 1
+36121 36121 1
+1 36122 1
+36122 36122 1
+1 36123 1
+36123 36123 1
+1 36124 1
+36124 36124 1
+1 36125 1
+36125 36125 1
+1 36126 1
+36126 36126 1
+1 36127 1
+36127 36127 1
+1 36128 1
+36128 36128 1
+1 36129 1
+36129 36129 1
+1 36130 1
+36130 36130 1
+1 36131 1
+36131 36131 1
+1 36132 1
+36132 36132 1
+1 36133 1
+36133 36133 1
+1 36134 1
+36134 36134 1
+1 36135 1
+36135 36135 1
+1 36136 1
+36136 36136 1
+1 36137 1
+36137 36137 1
+1 36138 1
+36138 36138 1
+1 36139 1
+36139 36139 1
+1 36140 1
+36140 36140 1
+1 36141 1
+36141 36141 1
+1 36142 1
+36142 36142 1
+1 36143 1
+36143 36143 1
+1 36144 1
+36144 36144 1
+1 36145 1
+36145 36145 1
+1 36146 1
+36146 36146 1
+1 36147 1
+36147 36147 1
+1 36148 1
+36148 36148 1
+1 36149 1
+36149 36149 1
+1 36150 1
+36150 36150 1
+1 36151 1
+36151 36151 1
+1 36152 1
+36152 36152 1
+1 36153 1
+36153 36153 1
+1 36154 1
+36154 36154 1
+1 36155 1
+36155 36155 1
+1 36156 1
+36156 36156 1
+1 36157 1
+36157 36157 1
+1 36158 1
+36158 36158 1
+1 36159 1
+36159 36159 1
+1 36160 1
+36160 36160 1
+1 36161 1
+36161 36161 1
+1 36162 1
+36162 36162 1
+1 36163 1
+36163 36163 1
+1 36164 1
+36164 36164 1
+1 36165 1
+36165 36165 1
+1 36166 1
+36166 36166 1
+1 36167 1
+36167 36167 1
+1 36168 1
+36168 36168 1
+1 36169 1
+36169 36169 1
+1 36170 1
+36170 36170 1
+1 36171 1
+36171 36171 1
+1 36172 1
+36172 36172 1
+1 36173 1
+36173 36173 1
+1 36174 1
+36174 36174 1
+1 36175 1
+36175 36175 1
+1 36176 1
+36176 36176 1
+1 36177 1
+36177 36177 1
+1 36178 1
+36178 36178 1
+1 36179 1
+36179 36179 1
+1 36180 1
+36180 36180 1
+1 36181 1
+36181 36181 1
+1 36182 1
+36182 36182 1
+1 36183 1
+36183 36183 1
+1 36184 1
+36184 36184 1
+1 36185 1
+36185 36185 1
+1 36186 1
+36186 36186 1
+1 36187 1
+36187 36187 1
+1 36188 1
+36188 36188 1
+1 36189 1
+36189 36189 1
+1 36190 1
+36190 36190 1
+1 36191 1
+36191 36191 1
+1 36192 1
+36192 36192 1
+1 36193 1
+36193 36193 1
+1 36194 1
+36194 36194 1
+1 36195 1
+36195 36195 1
+1 36196 1
+36196 36196 1
+1 36197 1
+36197 36197 1
+1 36198 1
+36198 36198 1
+1 36199 1
+36199 36199 1
+1 36200 1
+36200 36200 1
+1 36201 1
+36201 36201 1
+1 36202 1
+36202 36202 1
+1 36203 1
+36203 36203 1
+1 36204 1
+36204 36204 1
+1 36205 1
+36205 36205 1
+1 36206 1
+36206 36206 1
+1 36207 1
+36207 36207 1
+1 36208 1
+36208 36208 1
+1 36209 1
+36209 36209 1
+1 36210 1
+36210 36210 1
+1 36211 1
+36211 36211 1
+1 36212 1
+36212 36212 1
+1 36213 1
+36213 36213 1
+1 36214 1
+36214 36214 1
+1 36215 1
+36215 36215 1
+1 36216 1
+36216 36216 1
+1 36217 1
+36217 36217 1
+1 36218 1
+36218 36218 1
+1 36219 1
+36219 36219 1
+1 36220 1
+36220 36220 1
+1 36221 1
+36221 36221 1
+1 36222 1
+36222 36222 1
+1 36223 1
+36223 36223 1
+1 36224 1
+36224 36224 1
+1 36225 1
+36225 36225 1
+1 36226 1
+36226 36226 1
+1 36227 1
+36227 36227 1
+1 36228 1
+36228 36228 1
+1 36229 1
+36229 36229 1
+1 36230 1
+36230 36230 1
+1 36231 1
+36231 36231 1
+1 36232 1
+36232 36232 1
+1 36233 1
+36233 36233 1
+1 36234 1
+36234 36234 1
+1 36235 1
+36235 36235 1
+1 36236 1
+36236 36236 1
+1 36237 1
+36237 36237 1
+1 36238 1
+36238 36238 1
+1 36239 1
+36239 36239 1
+1 36240 1
+36240 36240 1
+1 36241 1
+36241 36241 1
+1 36242 1
+36242 36242 1
+1 36243 1
+36243 36243 1
+1 36244 1
+36244 36244 1
+1 36245 1
+36245 36245 1
+1 36246 1
+36246 36246 1
+1 36247 1
+36247 36247 1
+1 36248 1
+36248 36248 1
+1 36249 1
+36249 36249 1
+1 36250 1
+36250 36250 1
+1 36251 1
+36251 36251 1
+1 36252 1
+36252 36252 1
+1 36253 1
+36253 36253 1
+1 36254 1
+36254 36254 1
+1 36255 1
+36255 36255 1
+1 36256 1
+36256 36256 1
+1 36257 1
+36257 36257 1
+1 36258 1
+36258 36258 1
+1 36259 1
+36259 36259 1
+1 36260 1
+36260 36260 1
+1 36261 1
+36261 36261 1
+1 36262 1
+36262 36262 1
+1 36263 1
+36263 36263 1
+1 36264 1
+36264 36264 1
+1 36265 1
+36265 36265 1
+1 36266 1
+36266 36266 1
+1 36267 1
+36267 36267 1
+1 36268 1
+36268 36268 1
+1 36269 1
+36269 36269 1
+1 36270 1
+36270 36270 1
+1 36271 1
+36271 36271 1
+1 36272 1
+36272 36272 1
+1 36273 1
+36273 36273 1
+1 36274 1
+36274 36274 1
+1 36275 1
+36275 36275 1
+1 36276 1
+36276 36276 1
+1 36277 1
+36277 36277 1
+1 36278 1
+36278 36278 1
+1 36279 1
+36279 36279 1
+1 36280 1
+36280 36280 1
+1 36281 1
+36281 36281 1
+1 36282 1
+36282 36282 1
+1 36283 1
+36283 36283 1
+1 36284 1
+36284 36284 1
+1 36285 1
+36285 36285 1
+1 36286 1
+36286 36286 1
+1 36287 1
+36287 36287 1
+1 36288 1
+36288 36288 1
+1 36289 1
+36289 36289 1
+1 36290 1
+36290 36290 1
+1 36291 1
+36291 36291 1
+1 36292 1
+36292 36292 1
+1 36293 1
+36293 36293 1
+1 36294 1
+36294 36294 1
+1 36295 1
+36295 36295 1
+1 36296 1
+36296 36296 1
+1 36297 1
+36297 36297 1
+1 36298 1
+36298 36298 1
+1 36299 1
+36299 36299 1
+1 36300 1
+36300 36300 1
+1 36301 1
+36301 36301 1
+1 36302 1
+36302 36302 1
+1 36303 1
+36303 36303 1
+1 36304 1
+36304 36304 1
+1 36305 1
+36305 36305 1
+1 36306 1
+36306 36306 1
+1 36307 1
+36307 36307 1
+1 36308 1
+36308 36308 1
+1 36309 1
+36309 36309 1
+1 36310 1
+36310 36310 1
+1 36311 1
+36311 36311 1
+1 36312 1
+36312 36312 1
+1 36313 1
+36313 36313 1
+1 36314 1
+36314 36314 1
+1 36315 1
+36315 36315 1
+1 36316 1
+36316 36316 1
+1 36317 1
+36317 36317 1
+1 36318 1
+36318 36318 1
+1 36319 1
+36319 36319 1
+1 36320 1
+36320 36320 1
+1 36321 1
+36321 36321 1
+1 36322 1
+36322 36322 1
+1 36323 1
+36323 36323 1
+1 36324 1
+36324 36324 1
+1 36325 1
+36325 36325 1
+1 36326 1
+36326 36326 1
+1 36327 1
+36327 36327 1
+1 36328 1
+36328 36328 1
+1 36329 1
+36329 36329 1
+1 36330 1
+36330 36330 1
+1 36331 1
+36331 36331 1
+1 36332 1
+36332 36332 1
+1 36333 1
+36333 36333 1
+1 36334 1
+36334 36334 1
+1 36335 1
+36335 36335 1
+1 36336 1
+36336 36336 1
+1 36337 1
+36337 36337 1
+1 36338 1
+36338 36338 1
+1 36339 1
+36339 36339 1
+1 36340 1
+36340 36340 1
+1 36341 1
+36341 36341 1
+1 36342 1
+36342 36342 1
+1 36343 1
+36343 36343 1
+1 36344 1
+36344 36344 1
+1 36345 1
+36345 36345 1
+1 36346 1
+36346 36346 1
+1 36347 1
+36347 36347 1
+1 36348 1
+36348 36348 1
+1 36349 1
+36349 36349 1
+1 36350 1
+36350 36350 1
+1 36351 1
+36351 36351 1
+1 36352 1
+36352 36352 1
+1 36353 1
+36353 36353 1
+1 36354 1
+36354 36354 1
+1 36355 1
+36355 36355 1
+1 36356 1
+36356 36356 1
+1 36357 1
+36357 36357 1
+1 36358 1
+36358 36358 1
+1 36359 1
+36359 36359 1
+1 36360 1
+36360 36360 1
+1 36361 1
+36361 36361 1
+1 36362 1
+36362 36362 1
+1 36363 1
+36363 36363 1
+1 36364 1
+36364 36364 1
+1 36365 1
+36365 36365 1
+1 36366 1
+36366 36366 1
+1 36367 1
+36367 36367 1
+1 36368 1
+36368 36368 1
+1 36369 1
+36369 36369 1
+1 36370 1
+36370 36370 1
+1 36371 1
+36371 36371 1
+1 36372 1
+36372 36372 1
+1 36373 1
+36373 36373 1
+1 36374 1
+36374 36374 1
+1 36375 1
+36375 36375 1
+1 36376 1
+36376 36376 1
+1 36377 1
+36377 36377 1
+1 36378 1
+36378 36378 1
+1 36379 1
+36379 36379 1
+1 36380 1
+36380 36380 1
+1 36381 1
+36381 36381 1
+1 36382 1
+36382 36382 1
+1 36383 1
+36383 36383 1
+1 36384 1
+36384 36384 1
+1 36385 1
+36385 36385 1
+1 36386 1
+36386 36386 1
+1 36387 1
+36387 36387 1
+1 36388 1
+36388 36388 1
+1 36389 1
+36389 36389 1
+1 36390 1
+36390 36390 1
+1 36391 1
+36391 36391 1
+1 36392 1
+36392 36392 1
+1 36393 1
+36393 36393 1
+1 36394 1
+36394 36394 1
+1 36395 1
+36395 36395 1
+1 36396 1
+36396 36396 1
+1 36397 1
+36397 36397 1
+1 36398 1
+36398 36398 1
+1 36399 1
+36399 36399 1
+1 36400 1
+36400 36400 1
+1 36401 1
+36401 36401 1
+1 36402 1
+36402 36402 1
+1 36403 1
+36403 36403 1
+1 36404 1
+36404 36404 1
+1 36405 1
+36405 36405 1
+1 36406 1
+36406 36406 1
+1 36407 1
+36407 36407 1
+1 36408 1
+36408 36408 1
+1 36409 1
+36409 36409 1
+1 36410 1
+36410 36410 1
+1 36411 1
+36411 36411 1
+1 36412 1
+36412 36412 1
+1 36413 1
+36413 36413 1
+1 36414 1
+36414 36414 1
+1 36415 1
+36415 36415 1
+1 36416 1
+36416 36416 1
+1 36417 1
+36417 36417 1
+1 36418 1
+36418 36418 1
+1 36419 1
+36419 36419 1
+1 36420 1
+36420 36420 1
+1 36421 1
+36421 36421 1
+1 36422 1
+36422 36422 1
+1 36423 1
+36423 36423 1
+1 36424 1
+36424 36424 1
+1 36425 1
+36425 36425 1
+1 36426 1
+36426 36426 1
+1 36427 1
+36427 36427 1
+1 36428 1
+36428 36428 1
+1 36429 1
+36429 36429 1
+1 36430 1
+36430 36430 1
+1 36431 1
+36431 36431 1
+1 36432 1
+36432 36432 1
+1 36433 1
+36433 36433 1
+1 36434 1
+36434 36434 1
+1 36435 1
+36435 36435 1
+1 36436 1
+36436 36436 1
+1 36437 1
+36437 36437 1
+1 36438 1
+36438 36438 1
+1 36439 1
+36439 36439 1
+1 36440 1
+36440 36440 1
+1 36441 1
+36441 36441 1
+1 36442 1
+36442 36442 1
+1 36443 1
+36443 36443 1
+1 36444 1
+36444 36444 1
+1 36445 1
+36445 36445 1
+1 36446 1
+36446 36446 1
+1 36447 1
+36447 36447 1
+1 36448 1
+36448 36448 1
+1 36449 1
+36449 36449 1
+1 36450 1
+36450 36450 1
+1 36451 1
+36451 36451 1
+1 36452 1
+36452 36452 1
+1 36453 1
+36453 36453 1
+1 36454 1
+36454 36454 1
+1 36455 1
+36455 36455 1
+1 36456 1
+36456 36456 1
+1 36457 1
+36457 36457 1
+1 36458 1
+36458 36458 1
+1 36459 1
+36459 36459 1
+1 36460 1
+36460 36460 1
+1 36461 1
+36461 36461 1
+1 36462 1
+36462 36462 1
+1 36463 1
+36463 36463 1
+1 36464 1
+36464 36464 1
+1 36465 1
+36465 36465 1
+1 36466 1
+36466 36466 1
+1 36467 1
+36467 36467 1
+1 36468 1
+36468 36468 1
+1 36469 1
+36469 36469 1
+1 36470 1
+36470 36470 1
+1 36471 1
+36471 36471 1
+1 36472 1
+36472 36472 1
+1 36473 1
+36473 36473 1
+1 36474 1
+36474 36474 1
+1 36475 1
+36475 36475 1
+1 36476 1
+36476 36476 1
+1 36477 1
+36477 36477 1
+1 36478 1
+36478 36478 1
+1 36479 1
+36479 36479 1
+1 36480 1
+36480 36480 1
+1 36481 1
+36481 36481 1
+1 36482 1
+36482 36482 1
+1 36483 1
+36483 36483 1
+1 36484 1
+36484 36484 1
+1 36485 1
+36485 36485 1
+1 36486 1
+36486 36486 1
+1 36487 1
+36487 36487 1
+1 36488 1
+36488 36488 1
+1 36489 1
+36489 36489 1
+1 36490 1
+36490 36490 1
+1 36491 1
+36491 36491 1
+1 36492 1
+36492 36492 1
+1 36493 1
+36493 36493 1
+1 36494 1
+36494 36494 1
+1 36495 1
+36495 36495 1
+1 36496 1
+36496 36496 1
+1 36497 1
+36497 36497 1
+1 36498 1
+36498 36498 1
+1 36499 1
+36499 36499 1
+1 36500 1
+36500 36500 1
+1 36501 1
+36501 36501 1
+1 36502 1
+36502 36502 1
+1 36503 1
+36503 36503 1
+1 36504 1
+36504 36504 1
+1 36505 1
+36505 36505 1
+1 36506 1
+36506 36506 1
+1 36507 1
+36507 36507 1
+1 36508 1
+36508 36508 1
+1 36509 1
+36509 36509 1
+1 36510 1
+36510 36510 1
+1 36511 1
+36511 36511 1
+1 36512 1
+36512 36512 1
+1 36513 1
+36513 36513 1
+1 36514 1
+36514 36514 1
+1 36515 1
+36515 36515 1
+1 36516 1
+36516 36516 1
+1 36517 1
+36517 36517 1
+1 36518 1
+36518 36518 1
+1 36519 1
+36519 36519 1
+1 36520 1
+36520 36520 1
+1 36521 1
+36521 36521 1
+1 36522 1
+36522 36522 1
+1 36523 1
+36523 36523 1
+1 36524 1
+36524 36524 1
+1 36525 1
+36525 36525 1
+1 36526 1
+36526 36526 1
+1 36527 1
+36527 36527 1
+1 36528 1
+36528 36528 1
+1 36529 1
+36529 36529 1
+1 36530 1
+36530 36530 1
+1 36531 1
+36531 36531 1
+1 36532 1
+36532 36532 1
+1 36533 1
+36533 36533 1
+1 36534 1
+36534 36534 1
+1 36535 1
+36535 36535 1
+1 36536 1
+36536 36536 1
+1 36537 1
+36537 36537 1
+1 36538 1
+36538 36538 1
+1 36539 1
+36539 36539 1
+1 36540 1
+36540 36540 1
+1 36541 1
+36541 36541 1
+1 36542 1
+36542 36542 1
+1 36543 1
+36543 36543 1
+1 36544 1
+36544 36544 1
+1 36545 1
+36545 36545 1
+1 36546 1
+36546 36546 1
+1 36547 1
+36547 36547 1
+1 36548 1
+36548 36548 1
+1 36549 1
+36549 36549 1
+1 36550 1
+36550 36550 1
+1 36551 1
+36551 36551 1
+1 36552 1
+36552 36552 1
+1 36553 1
+36553 36553 1
+1 36554 1
+36554 36554 1
+1 36555 1
+36555 36555 1
+1 36556 1
+36556 36556 1
+1 36557 1
+36557 36557 1
+1 36558 1
+36558 36558 1
+1 36559 1
+36559 36559 1
+1 36560 1
+36560 36560 1
+1 36561 1
+36561 36561 1
+1 36562 1
+36562 36562 1
+1 36563 1
+36563 36563 1
+1 36564 1
+36564 36564 1
+1 36565 1
+36565 36565 1
+1 36566 1
+36566 36566 1
+1 36567 1
+36567 36567 1
+1 36568 1
+36568 36568 1
+1 36569 1
+36569 36569 1
+1 36570 1
+36570 36570 1
+1 36571 1
+36571 36571 1
+1 36572 1
+36572 36572 1
+1 36573 1
+36573 36573 1
+1 36574 1
+36574 36574 1
+1 36575 1
+36575 36575 1
+1 36576 1
+36576 36576 1
+1 36577 1
+36577 36577 1
+1 36578 1
+36578 36578 1
+1 36579 1
+36579 36579 1
+1 36580 1
+36580 36580 1
+1 36581 1
+36581 36581 1
+1 36582 1
+36582 36582 1
+1 36583 1
+36583 36583 1
+1 36584 1
+36584 36584 1
+1 36585 1
+36585 36585 1
+1 36586 1
+36586 36586 1
+1 36587 1
+36587 36587 1
+1 36588 1
+36588 36588 1
+1 36589 1
+36589 36589 1
+1 36590 1
+36590 36590 1
+1 36591 1
+36591 36591 1
+1 36592 1
+36592 36592 1
+1 36593 1
+36593 36593 1
+1 36594 1
+36594 36594 1
+1 36595 1
+36595 36595 1
+1 36596 1
+36596 36596 1
+1 36597 1
+36597 36597 1
+1 36598 1
+36598 36598 1
+1 36599 1
+36599 36599 1
+1 36600 1
+36600 36600 1
+1 36601 1
+36601 36601 1
+1 36602 1
+36602 36602 1
+1 36603 1
+36603 36603 1
+1 36604 1
+36604 36604 1
+1 36605 1
+36605 36605 1
+1 36606 1
+36606 36606 1
+1 36607 1
+36607 36607 1
+1 36608 1
+36608 36608 1
+1 36609 1
+36609 36609 1
+1 36610 1
+36610 36610 1
+1 36611 1
+36611 36611 1
+1 36612 1
+36612 36612 1
+1 36613 1
+36613 36613 1
+1 36614 1
+36614 36614 1
+1 36615 1
+36615 36615 1
+1 36616 1
+36616 36616 1
+1 36617 1
+36617 36617 1
+1 36618 1
+36618 36618 1
+1 36619 1
+36619 36619 1
+1 36620 1
+36620 36620 1
+1 36621 1
+36621 36621 1
+1 36622 1
+36622 36622 1
+1 36623 1
+36623 36623 1
+1 36624 1
+36624 36624 1
+1 36625 1
+36625 36625 1
+1 36626 1
+36626 36626 1
+1 36627 1
+36627 36627 1
+1 36628 1
+36628 36628 1
+1 36629 1
+36629 36629 1
+1 36630 1
+36630 36630 1
+1 36631 1
+36631 36631 1
+1 36632 1
+36632 36632 1
+1 36633 1
+36633 36633 1
+1 36634 1
+36634 36634 1
+1 36635 1
+36635 36635 1
+1 36636 1
+36636 36636 1
+1 36637 1
+36637 36637 1
+1 36638 1
+36638 36638 1
+1 36639 1
+36639 36639 1
+1 36640 1
+36640 36640 1
+1 36641 1
+36641 36641 1
+1 36642 1
+36642 36642 1
+1 36643 1
+36643 36643 1
+1 36644 1
+36644 36644 1
+1 36645 1
+36645 36645 1
+1 36646 1
+36646 36646 1
+1 36647 1
+36647 36647 1
+1 36648 1
+36648 36648 1
+1 36649 1
+36649 36649 1
+1 36650 1
+36650 36650 1
+1 36651 1
+36651 36651 1
+1 36652 1
+36652 36652 1
+1 36653 1
+36653 36653 1
+1 36654 1
+36654 36654 1
+1 36655 1
+36655 36655 1
+1 36656 1
+36656 36656 1
+1 36657 1
+36657 36657 1
+1 36658 1
+36658 36658 1
+1 36659 1
+36659 36659 1
+1 36660 1
+36660 36660 1
+1 36661 1
+36661 36661 1
+1 36662 1
+36662 36662 1
+1 36663 1
+36663 36663 1
+1 36664 1
+36664 36664 1
+1 36665 1
+36665 36665 1
+1 36666 1
+36666 36666 1
+1 36667 1
+36667 36667 1
+1 36668 1
+36668 36668 1
+1 36669 1
+36669 36669 1
+1 36670 1
+36670 36670 1
+1 36671 1
+36671 36671 1
+1 36672 1
+36672 36672 1
+1 36673 1
+36673 36673 1
+1 36674 1
+36674 36674 1
+1 36675 1
+36675 36675 1
+1 36676 1
+36676 36676 1
+1 36677 1
+36677 36677 1
+1 36678 1
+36678 36678 1
+1 36679 1
+36679 36679 1
+1 36680 1
+36680 36680 1
+1 36681 1
+36681 36681 1
+1 36682 1
+36682 36682 1
+1 36683 1
+36683 36683 1
+1 36684 1
+36684 36684 1
+1 36685 1
+36685 36685 1
+1 36686 1
+36686 36686 1
+1 36687 1
+36687 36687 1
+1 36688 1
+36688 36688 1
+1 36689 1
+36689 36689 1
+1 36690 1
+36690 36690 1
+1 36691 1
+36691 36691 1
+1 36692 1
+36692 36692 1
+1 36693 1
+36693 36693 1
+1 36694 1
+36694 36694 1
+1 36695 1
+36695 36695 1
+1 36696 1
+36696 36696 1
+1 36697 1
+36697 36697 1
+1 36698 1
+36698 36698 1
+1 36699 1
+36699 36699 1
+1 36700 1
+36700 36700 1
+1 36701 1
+36701 36701 1
+1 36702 1
+36702 36702 1
+1 36703 1
+36703 36703 1
+1 36704 1
+36704 36704 1
+1 36705 1
+36705 36705 1
+1 36706 1
+36706 36706 1
+1 36707 1
+36707 36707 1
+1 36708 1
+36708 36708 1
+1 36709 1
+36709 36709 1
+1 36710 1
+36710 36710 1
+1 36711 1
+36711 36711 1
+1 36712 1
+36712 36712 1
+1 36713 1
+36713 36713 1
+1 36714 1
+36714 36714 1
+1 36715 1
+36715 36715 1
+1 36716 1
+36716 36716 1
+1 36717 1
+36717 36717 1
+1 36718 1
+36718 36718 1
+1 36719 1
+36719 36719 1
+1 36720 1
+36720 36720 1
+1 36721 1
+36721 36721 1
+1 36722 1
+36722 36722 1
+1 36723 1
+36723 36723 1
+1 36724 1
+36724 36724 1
+1 36725 1
+36725 36725 1
+1 36726 1
+36726 36726 1
+1 36727 1
+36727 36727 1
+1 36728 1
+36728 36728 1
+1 36729 1
+36729 36729 1
+1 36730 1
+36730 36730 1
+1 36731 1
+36731 36731 1
+1 36732 1
+36732 36732 1
+1 36733 1
+36733 36733 1
+1 36734 1
+36734 36734 1
+1 36735 1
+36735 36735 1
+1 36736 1
+36736 36736 1
+1 36737 1
+36737 36737 1
+1 36738 1
+36738 36738 1
+1 36739 1
+36739 36739 1
+1 36740 1
+36740 36740 1
+1 36741 1
+36741 36741 1
+1 36742 1
+36742 36742 1
+1 36743 1
+36743 36743 1
+1 36744 1
+36744 36744 1
+1 36745 1
+36745 36745 1
+1 36746 1
+36746 36746 1
+1 36747 1
+36747 36747 1
+1 36748 1
+36748 36748 1
+1 36749 1
+36749 36749 1
+1 36750 1
+36750 36750 1
+1 36751 1
+36751 36751 1
+1 36752 1
+36752 36752 1
+1 36753 1
+36753 36753 1
+1 36754 1
+36754 36754 1
+1 36755 1
+36755 36755 1
+1 36756 1
+36756 36756 1
+1 36757 1
+36757 36757 1
+1 36758 1
+36758 36758 1
+1 36759 1
+36759 36759 1
+1 36760 1
+36760 36760 1
+1 36761 1
+36761 36761 1
+1 36762 1
+36762 36762 1
+1 36763 1
+36763 36763 1
+1 36764 1
+36764 36764 1
+1 36765 1
+36765 36765 1
+1 36766 1
+36766 36766 1
+1 36767 1
+36767 36767 1
+1 36768 1
+36768 36768 1
+1 36769 1
+36769 36769 1
+1 36770 1
+36770 36770 1
+1 36771 1
+36771 36771 1
+1 36772 1
+36772 36772 1
+1 36773 1
+36773 36773 1
+1 36774 1
+36774 36774 1
+1 36775 1
+36775 36775 1
+1 36776 1
+36776 36776 1
+1 36777 1
+36777 36777 1
+1 36778 1
+36778 36778 1
+1 36779 1
+36779 36779 1
+1 36780 1
+36780 36780 1
+1 36781 1
+36781 36781 1
+1 36782 1
+36782 36782 1
+1 36783 1
+36783 36783 1
+1 36784 1
+36784 36784 1
+1 36785 1
+36785 36785 1
+1 36786 1
+36786 36786 1
+1 36787 1
+36787 36787 1
+1 36788 1
+36788 36788 1
+1 36789 1
+36789 36789 1
+1 36790 1
+36790 36790 1
+1 36791 1
+36791 36791 1
+1 36792 1
+36792 36792 1
+1 36793 1
+36793 36793 1
+1 36794 1
+36794 36794 1
+1 36795 1
+36795 36795 1
+1 36796 1
+36796 36796 1
+1 36797 1
+36797 36797 1
+1 36798 1
+36798 36798 1
+1 36799 1
+36799 36799 1
+1 36800 1
+36800 36800 1
+1 36801 1
+36801 36801 1
+1 36802 1
+36802 36802 1
+1 36803 1
+36803 36803 1
+1 36804 1
+36804 36804 1
+1 36805 1
+36805 36805 1
+1 36806 1
+36806 36806 1
+1 36807 1
+36807 36807 1
+1 36808 1
+36808 36808 1
+1 36809 1
+36809 36809 1
+1 36810 1
+36810 36810 1
+1 36811 1
+36811 36811 1
+1 36812 1
+36812 36812 1
+1 36813 1
+36813 36813 1
+1 36814 1
+36814 36814 1
+1 36815 1
+36815 36815 1
+1 36816 1
+36816 36816 1
+1 36817 1
+36817 36817 1
+1 36818 1
+36818 36818 1
+1 36819 1
+36819 36819 1
+1 36820 1
+36820 36820 1
+1 36821 1
+36821 36821 1
+1 36822 1
+36822 36822 1
+1 36823 1
+36823 36823 1
+1 36824 1
+36824 36824 1
+1 36825 1
+36825 36825 1
+1 36826 1
+36826 36826 1
+1 36827 1
+36827 36827 1
+1 36828 1
+36828 36828 1
+1 36829 1
+36829 36829 1
+1 36830 1
+36830 36830 1
+1 36831 1
+36831 36831 1
+1 36832 1
+36832 36832 1
+1 36833 1
+36833 36833 1
+1 36834 1
+36834 36834 1
+1 36835 1
+36835 36835 1
+1 36836 1
+36836 36836 1
+1 36837 1
+36837 36837 1
+1 36838 1
+36838 36838 1
+1 36839 1
+36839 36839 1
+1 36840 1
+36840 36840 1
+1 36841 1
+36841 36841 1
+1 36842 1
+36842 36842 1
+1 36843 1
+36843 36843 1
+1 36844 1
+36844 36844 1
+1 36845 1
+36845 36845 1
+1 36846 1
+36846 36846 1
+1 36847 1
+36847 36847 1
+1 36848 1
+36848 36848 1
+1 36849 1
+36849 36849 1
+1 36850 1
+36850 36850 1
+1 36851 1
+36851 36851 1
+1 36852 1
+36852 36852 1
+1 36853 1
+36853 36853 1
+1 36854 1
+36854 36854 1
+1 36855 1
+36855 36855 1
+1 36856 1
+36856 36856 1
+1 36857 1
+36857 36857 1
+1 36858 1
+36858 36858 1
+1 36859 1
+36859 36859 1
+1 36860 1
+36860 36860 1
+1 36861 1
+36861 36861 1
+1 36862 1
+36862 36862 1
+1 36863 1
+36863 36863 1
+1 36864 1
+36864 36864 1
+1 36865 1
+36865 36865 1
+1 36866 1
+36866 36866 1
+1 36867 1
+36867 36867 1
+1 36868 1
+36868 36868 1
+1 36869 1
+36869 36869 1
+1 36870 1
+36870 36870 1
+1 36871 1
+36871 36871 1
+1 36872 1
+36872 36872 1
+1 36873 1
+36873 36873 1
+1 36874 1
+36874 36874 1
+1 36875 1
+36875 36875 1
+1 36876 1
+36876 36876 1
+1 36877 1
+36877 36877 1
+1 36878 1
+36878 36878 1
+1 36879 1
+36879 36879 1
+1 36880 1
+36880 36880 1
+1 36881 1
+36881 36881 1
+1 36882 1
+36882 36882 1
+1 36883 1
+36883 36883 1
+1 36884 1
+36884 36884 1
+1 36885 1
+36885 36885 1
+1 36886 1
+36886 36886 1
+1 36887 1
+36887 36887 1
+1 36888 1
+36888 36888 1
+1 36889 1
+36889 36889 1
+1 36890 1
+36890 36890 1
+1 36891 1
+36891 36891 1
+1 36892 1
+36892 36892 1
+1 36893 1
+36893 36893 1
+1 36894 1
+36894 36894 1
+1 36895 1
+36895 36895 1
+1 36896 1
+36896 36896 1
+1 36897 1
+36897 36897 1
+1 36898 1
+36898 36898 1
+1 36899 1
+36899 36899 1
+1 36900 1
+36900 36900 1
+1 36901 1
+36901 36901 1
+1 36902 1
+36902 36902 1
+1 36903 1
+36903 36903 1
+1 36904 1
+36904 36904 1
+1 36905 1
+36905 36905 1
+1 36906 1
+36906 36906 1
+1 36907 1
+36907 36907 1
+1 36908 1
+36908 36908 1
+1 36909 1
+36909 36909 1
+1 36910 1
+36910 36910 1
+1 36911 1
+36911 36911 1
+1 36912 1
+36912 36912 1
+1 36913 1
+36913 36913 1
+1 36914 1
+36914 36914 1
+1 36915 1
+36915 36915 1
+1 36916 1
+36916 36916 1
+1 36917 1
+36917 36917 1
+1 36918 1
+36918 36918 1
+1 36919 1
+36919 36919 1
+1 36920 1
+36920 36920 1
+1 36921 1
+36921 36921 1
+1 36922 1
+36922 36922 1
+1 36923 1
+36923 36923 1
+1 36924 1
+36924 36924 1
+1 36925 1
+36925 36925 1
+1 36926 1
+36926 36926 1
+1 36927 1
+36927 36927 1
+1 36928 1
+36928 36928 1
+1 36929 1
+36929 36929 1
+1 36930 1
+36930 36930 1
+1 36931 1
+36931 36931 1
+1 36932 1
+36932 36932 1
+1 36933 1
+36933 36933 1
+1 36934 1
+36934 36934 1
+1 36935 1
+36935 36935 1
+1 36936 1
+36936 36936 1
+1 36937 1
+36937 36937 1
+1 36938 1
+36938 36938 1
+1 36939 1
+36939 36939 1
+1 36940 1
+36940 36940 1
+1 36941 1
+36941 36941 1
+1 36942 1
+36942 36942 1
+1 36943 1
+36943 36943 1
+1 36944 1
+36944 36944 1
+1 36945 1
+36945 36945 1
+1 36946 1
+36946 36946 1
+1 36947 1
+36947 36947 1
+1 36948 1
+36948 36948 1
+1 36949 1
+36949 36949 1
+1 36950 1
+36950 36950 1
+1 36951 1
+36951 36951 1
+1 36952 1
+36952 36952 1
+1 36953 1
+36953 36953 1
+1 36954 1
+36954 36954 1
+1 36955 1
+36955 36955 1
+1 36956 1
+36956 36956 1
+1 36957 1
+36957 36957 1
+1 36958 1
+36958 36958 1
+1 36959 1
+36959 36959 1
+1 36960 1
+36960 36960 1
+1 36961 1
+36961 36961 1
+1 36962 1
+36962 36962 1
+1 36963 1
+36963 36963 1
+1 36964 1
+36964 36964 1
+1 36965 1
+36965 36965 1
+1 36966 1
+36966 36966 1
+1 36967 1
+36967 36967 1
+1 36968 1
+36968 36968 1
+1 36969 1
+36969 36969 1
+1 36970 1
+36970 36970 1
+1 36971 1
+36971 36971 1
+1 36972 1
+36972 36972 1
+1 36973 1
+36973 36973 1
+1 36974 1
+36974 36974 1
+1 36975 1
+36975 36975 1
+1 36976 1
+36976 36976 1
+1 36977 1
+36977 36977 1
+1 36978 1
+36978 36978 1
+1 36979 1
+36979 36979 1
+1 36980 1
+36980 36980 1
+1 36981 1
+36981 36981 1
+1 36982 1
+36982 36982 1
+1 36983 1
+36983 36983 1
+1 36984 1
+36984 36984 1
+1 36985 1
+36985 36985 1
+1 36986 1
+36986 36986 1
+1 36987 1
+36987 36987 1
+1 36988 1
+36988 36988 1
+1 36989 1
+36989 36989 1
+1 36990 1
+36990 36990 1
+1 36991 1
+36991 36991 1
+1 36992 1
+36992 36992 1
+1 36993 1
+36993 36993 1
+1 36994 1
+36994 36994 1
+1 36995 1
+36995 36995 1
+1 36996 1
+36996 36996 1
+1 36997 1
+36997 36997 1
+1 36998 1
+36998 36998 1
+1 36999 1
+36999 36999 1
+1 37000 1
+37000 37000 1
+1 37001 1
+37001 37001 1
+1 37002 1
+37002 37002 1
+1 37003 1
+37003 37003 1
+1 37004 1
+37004 37004 1
+1 37005 1
+37005 37005 1
+1 37006 1
+37006 37006 1
+1 37007 1
+37007 37007 1
+1 37008 1
+37008 37008 1
+1 37009 1
+37009 37009 1
+1 37010 1
+37010 37010 1
+1 37011 1
+37011 37011 1
+1 37012 1
+37012 37012 1
+1 37013 1
+37013 37013 1
+1 37014 1
+37014 37014 1
+1 37015 1
+37015 37015 1
+1 37016 1
+37016 37016 1
+1 37017 1
+37017 37017 1
+1 37018 1
+37018 37018 1
+1 37019 1
+37019 37019 1
+1 37020 1
+37020 37020 1
+1 37021 1
+37021 37021 1
+1 37022 1
+37022 37022 1
+1 37023 1
+37023 37023 1
+1 37024 1
+37024 37024 1
+1 37025 1
+37025 37025 1
+1 37026 1
+37026 37026 1
+1 37027 1
+37027 37027 1
+1 37028 1
+37028 37028 1
+1 37029 1
+37029 37029 1
+1 37030 1
+37030 37030 1
+1 37031 1
+37031 37031 1
+1 37032 1
+37032 37032 1
+1 37033 1
+37033 37033 1
+1 37034 1
+37034 37034 1
+1 37035 1
+37035 37035 1
+1 37036 1
+37036 37036 1
+1 37037 1
+37037 37037 1
+1 37038 1
+37038 37038 1
+1 37039 1
+37039 37039 1
+1 37040 1
+37040 37040 1
+1 37041 1
+37041 37041 1
+1 37042 1
+37042 37042 1
+1 37043 1
+37043 37043 1
+1 37044 1
+37044 37044 1
+1 37045 1
+37045 37045 1
+1 37046 1
+37046 37046 1
+1 37047 1
+37047 37047 1
+1 37048 1
+37048 37048 1
+1 37049 1
+37049 37049 1
+1 37050 1
+37050 37050 1
+1 37051 1
+37051 37051 1
+1 37052 1
+37052 37052 1
+1 37053 1
+37053 37053 1
+1 37054 1
+37054 37054 1
+1 37055 1
+37055 37055 1
+1 37056 1
+37056 37056 1
+1 37057 1
+37057 37057 1
+1 37058 1
+37058 37058 1
+1 37059 1
+37059 37059 1
+1 37060 1
+37060 37060 1
+1 37061 1
+37061 37061 1
+1 37062 1
+37062 37062 1
+1 37063 1
+37063 37063 1
+1 37064 1
+37064 37064 1
+1 37065 1
+37065 37065 1
+1 37066 1
+37066 37066 1
+1 37067 1
+37067 37067 1
+1 37068 1
+37068 37068 1
+1 37069 1
+37069 37069 1
+1 37070 1
+37070 37070 1
+1 37071 1
+37071 37071 1
+1 37072 1
+37072 37072 1
+1 37073 1
+37073 37073 1
+1 37074 1
+37074 37074 1
+1 37075 1
+37075 37075 1
+1 37076 1
+37076 37076 1
+1 37077 1
+37077 37077 1
+1 37078 1
+37078 37078 1
+1 37079 1
+37079 37079 1
+1 37080 1
+37080 37080 1
+1 37081 1
+37081 37081 1
+1 37082 1
+37082 37082 1
+1 37083 1
+37083 37083 1
+1 37084 1
+37084 37084 1
+1 37085 1
+37085 37085 1
+1 37086 1
+37086 37086 1
+1 37087 1
+37087 37087 1
+1 37088 1
+37088 37088 1
+1 37089 1
+37089 37089 1
+1 37090 1
+37090 37090 1
+1 37091 1
+37091 37091 1
+1 37092 1
+37092 37092 1
+1 37093 1
+37093 37093 1
+1 37094 1
+37094 37094 1
+1 37095 1
+37095 37095 1
+1 37096 1
+37096 37096 1
+1 37097 1
+37097 37097 1
+1 37098 1
+37098 37098 1
+1 37099 1
+37099 37099 1
+1 37100 1
+37100 37100 1
+1 37101 1
+37101 37101 1
+1 37102 1
+37102 37102 1
+1 37103 1
+37103 37103 1
+1 37104 1
+37104 37104 1
+1 37105 1
+37105 37105 1
+1 37106 1
+37106 37106 1
+1 37107 1
+37107 37107 1
+1 37108 1
+37108 37108 1
+1 37109 1
+37109 37109 1
+1 37110 1
+37110 37110 1
+1 37111 1
+37111 37111 1
+1 37112 1
+37112 37112 1
+1 37113 1
+37113 37113 1
+1 37114 1
+37114 37114 1
+1 37115 1
+37115 37115 1
+1 37116 1
+37116 37116 1
+1 37117 1
+37117 37117 1
+1 37118 1
+37118 37118 1
+1 37119 1
+37119 37119 1
+1 37120 1
+37120 37120 1
+1 37121 1
+37121 37121 1
+1 37122 1
+37122 37122 1
+1 37123 1
+37123 37123 1
+1 37124 1
+37124 37124 1
+1 37125 1
+37125 37125 1
+1 37126 1
+37126 37126 1
+1 37127 1
+37127 37127 1
+1 37128 1
+37128 37128 1
+1 37129 1
+37129 37129 1
+1 37130 1
+37130 37130 1
+1 37131 1
+37131 37131 1
+1 37132 1
+37132 37132 1
+1 37133 1
+37133 37133 1
+1 37134 1
+37134 37134 1
+1 37135 1
+37135 37135 1
+1 37136 1
+37136 37136 1
+1 37137 1
+37137 37137 1
+1 37138 1
+37138 37138 1
+1 37139 1
+37139 37139 1
+1 37140 1
+37140 37140 1
+1 37141 1
+37141 37141 1
+1 37142 1
+37142 37142 1
+1 37143 1
+37143 37143 1
+1 37144 1
+37144 37144 1
+1 37145 1
+37145 37145 1
+1 37146 1
+37146 37146 1
+1 37147 1
+37147 37147 1
+1 37148 1
+37148 37148 1
+1 37149 1
+37149 37149 1
+1 37150 1
+37150 37150 1
+1 37151 1
+37151 37151 1
+1 37152 1
+37152 37152 1
+1 37153 1
+37153 37153 1
+1 37154 1
+37154 37154 1
+1 37155 1
+37155 37155 1
+1 37156 1
+37156 37156 1
+1 37157 1
+37157 37157 1
+1 37158 1
+37158 37158 1
+1 37159 1
+37159 37159 1
+1 37160 1
+37160 37160 1
+1 37161 1
+37161 37161 1
+1 37162 1
+37162 37162 1
+1 37163 1
+37163 37163 1
+1 37164 1
+37164 37164 1
+1 37165 1
+37165 37165 1
+1 37166 1
+37166 37166 1
+1 37167 1
+37167 37167 1
+1 37168 1
+37168 37168 1
+1 37169 1
+37169 37169 1
+1 37170 1
+37170 37170 1
+1 37171 1
+37171 37171 1
+1 37172 1
+37172 37172 1
+1 37173 1
+37173 37173 1
+1 37174 1
+37174 37174 1
+1 37175 1
+37175 37175 1
+1 37176 1
+37176 37176 1
+1 37177 1
+37177 37177 1
+1 37178 1
+37178 37178 1
+1 37179 1
+37179 37179 1
+1 37180 1
+37180 37180 1
+1 37181 1
+37181 37181 1
+1 37182 1
+37182 37182 1
+1 37183 1
+37183 37183 1
+1 37184 1
+37184 37184 1
+1 37185 1
+37185 37185 1
+1 37186 1
+37186 37186 1
+1 37187 1
+37187 37187 1
+1 37188 1
+37188 37188 1
+1 37189 1
+37189 37189 1
+1 37190 1
+37190 37190 1
+1 37191 1
+37191 37191 1
+1 37192 1
+37192 37192 1
+1 37193 1
+37193 37193 1
+1 37194 1
+37194 37194 1
+1 37195 1
+37195 37195 1
+1 37196 1
+37196 37196 1
+1 37197 1
+37197 37197 1
+1 37198 1
+37198 37198 1
+1 37199 1
+37199 37199 1
+1 37200 1
+37200 37200 1
+1 37201 1
+37201 37201 1
+1 37202 1
+37202 37202 1
+1 37203 1
+37203 37203 1
+1 37204 1
+37204 37204 1
+1 37205 1
+37205 37205 1
+1 37206 1
+37206 37206 1
+1 37207 1
+37207 37207 1
+1 37208 1
+37208 37208 1
+1 37209 1
+37209 37209 1
+1 37210 1
+37210 37210 1
+1 37211 1
+37211 37211 1
+1 37212 1
+37212 37212 1
+1 37213 1
+37213 37213 1
+1 37214 1
+37214 37214 1
+1 37215 1
+37215 37215 1
+1 37216 1
+37216 37216 1
+1 37217 1
+37217 37217 1
+1 37218 1
+37218 37218 1
+1 37219 1
+37219 37219 1
+1 37220 1
+37220 37220 1
+1 37221 1
+37221 37221 1
+1 37222 1
+37222 37222 1
+1 37223 1
+37223 37223 1
+1 37224 1
+37224 37224 1
+1 37225 1
+37225 37225 1
+1 37226 1
+37226 37226 1
+1 37227 1
+37227 37227 1
+1 37228 1
+37228 37228 1
+1 37229 1
+37229 37229 1
+1 37230 1
+37230 37230 1
+1 37231 1
+37231 37231 1
+1 37232 1
+37232 37232 1
+1 37233 1
+37233 37233 1
+1 37234 1
+37234 37234 1
+1 37235 1
+37235 37235 1
+1 37236 1
+37236 37236 1
+1 37237 1
+37237 37237 1
+1 37238 1
+37238 37238 1
+1 37239 1
+37239 37239 1
+1 37240 1
+37240 37240 1
+1 37241 1
+37241 37241 1
+1 37242 1
+37242 37242 1
+1 37243 1
+37243 37243 1
+1 37244 1
+37244 37244 1
+1 37245 1
+37245 37245 1
+1 37246 1
+37246 37246 1
+1 37247 1
+37247 37247 1
+1 37248 1
+37248 37248 1
+1 37249 1
+37249 37249 1
+1 37250 1
+37250 37250 1
+1 37251 1
+37251 37251 1
+1 37252 1
+37252 37252 1
+1 37253 1
+37253 37253 1
+1 37254 1
+37254 37254 1
+1 37255 1
+37255 37255 1
+1 37256 1
+37256 37256 1
+1 37257 1
+37257 37257 1
+1 37258 1
+37258 37258 1
+1 37259 1
+37259 37259 1
+1 37260 1
+37260 37260 1
+1 37261 1
+37261 37261 1
+1 37262 1
+37262 37262 1
+1 37263 1
+37263 37263 1
+1 37264 1
+37264 37264 1
+1 37265 1
+37265 37265 1
+1 37266 1
+37266 37266 1
+1 37267 1
+37267 37267 1
+1 37268 1
+37268 37268 1
+1 37269 1
+37269 37269 1
+1 37270 1
+37270 37270 1
+1 37271 1
+37271 37271 1
+1 37272 1
+37272 37272 1
+1 37273 1
+37273 37273 1
+1 37274 1
+37274 37274 1
+1 37275 1
+37275 37275 1
+1 37276 1
+37276 37276 1
+1 37277 1
+37277 37277 1
+1 37278 1
+37278 37278 1
+1 37279 1
+37279 37279 1
+1 37280 1
+37280 37280 1
+1 37281 1
+37281 37281 1
+1 37282 1
+37282 37282 1
+1 37283 1
+37283 37283 1
+1 37284 1
+37284 37284 1
+1 37285 1
+37285 37285 1
+1 37286 1
+37286 37286 1
+1 37287 1
+37287 37287 1
+1 37288 1
+37288 37288 1
+1 37289 1
+37289 37289 1
+1 37290 1
+37290 37290 1
+1 37291 1
+37291 37291 1
+1 37292 1
+37292 37292 1
+1 37293 1
+37293 37293 1
+1 37294 1
+37294 37294 1
+1 37295 1
+37295 37295 1
+1 37296 1
+37296 37296 1
+1 37297 1
+37297 37297 1
+1 37298 1
+37298 37298 1
+1 37299 1
+37299 37299 1
+1 37300 1
+37300 37300 1
+1 37301 1
+37301 37301 1
+1 37302 1
+37302 37302 1
+1 37303 1
+37303 37303 1
+1 37304 1
+37304 37304 1
+1 37305 1
+37305 37305 1
+1 37306 1
+37306 37306 1
+1 37307 1
+37307 37307 1
+1 37308 1
+37308 37308 1
+1 37309 1
+37309 37309 1
+1 37310 1
+37310 37310 1
+1 37311 1
+37311 37311 1
+1 37312 1
+37312 37312 1
+1 37313 1
+37313 37313 1
+1 37314 1
+37314 37314 1
+1 37315 1
+37315 37315 1
+1 37316 1
+37316 37316 1
+1 37317 1
+37317 37317 1
+1 37318 1
+37318 37318 1
+1 37319 1
+37319 37319 1
+1 37320 1
+37320 37320 1
+1 37321 1
+37321 37321 1
+1 37322 1
+37322 37322 1
+1 37323 1
+37323 37323 1
+1 37324 1
+37324 37324 1
+1 37325 1
+37325 37325 1
+1 37326 1
+37326 37326 1
+1 37327 1
+37327 37327 1
+1 37328 1
+37328 37328 1
+1 37329 1
+37329 37329 1
+1 37330 1
+37330 37330 1
+1 37331 1
+37331 37331 1
+1 37332 1
+37332 37332 1
+1 37333 1
+37333 37333 1
+1 37334 1
+37334 37334 1
+1 37335 1
+37335 37335 1
+1 37336 1
+37336 37336 1
+1 37337 1
+37337 37337 1
+1 37338 1
+37338 37338 1
+1 37339 1
+37339 37339 1
+1 37340 1
+37340 37340 1
+1 37341 1
+37341 37341 1
+1 37342 1
+37342 37342 1
+1 37343 1
+37343 37343 1
+1 37344 1
+37344 37344 1
+1 37345 1
+37345 37345 1
+1 37346 1
+37346 37346 1
+1 37347 1
+37347 37347 1
+1 37348 1
+37348 37348 1
+1 37349 1
+37349 37349 1
+1 37350 1
+37350 37350 1
+1 37351 1
+37351 37351 1
+1 37352 1
+37352 37352 1
+1 37353 1
+37353 37353 1
+1 37354 1
+37354 37354 1
+1 37355 1
+37355 37355 1
+1 37356 1
+37356 37356 1
+1 37357 1
+37357 37357 1
+1 37358 1
+37358 37358 1
+1 37359 1
+37359 37359 1
+1 37360 1
+37360 37360 1
+1 37361 1
+37361 37361 1
+1 37362 1
+37362 37362 1
+1 37363 1
+37363 37363 1
+1 37364 1
+37364 37364 1
+1 37365 1
+37365 37365 1
+1 37366 1
+37366 37366 1
+1 37367 1
+37367 37367 1
+1 37368 1
+37368 37368 1
+1 37369 1
+37369 37369 1
+1 37370 1
+37370 37370 1
+1 37371 1
+37371 37371 1
+1 37372 1
+37372 37372 1
+1 37373 1
+37373 37373 1
+1 37374 1
+37374 37374 1
+1 37375 1
+37375 37375 1
+1 37376 1
+37376 37376 1
+1 37377 1
+37377 37377 1
+1 37378 1
+37378 37378 1
+1 37379 1
+37379 37379 1
+1 37380 1
+37380 37380 1
+1 37381 1
+37381 37381 1
+1 37382 1
+37382 37382 1
+1 37383 1
+37383 37383 1
+1 37384 1
+37384 37384 1
+1 37385 1
+37385 37385 1
+1 37386 1
+37386 37386 1
+1 37387 1
+37387 37387 1
+1 37388 1
+37388 37388 1
+1 37389 1
+37389 37389 1
+1 37390 1
+37390 37390 1
+1 37391 1
+37391 37391 1
+1 37392 1
+37392 37392 1
+1 37393 1
+37393 37393 1
+1 37394 1
+37394 37394 1
+1 37395 1
+37395 37395 1
+1 37396 1
+37396 37396 1
+1 37397 1
+37397 37397 1
+1 37398 1
+37398 37398 1
+1 37399 1
+37399 37399 1
+1 37400 1
+37400 37400 1
+1 37401 1
+37401 37401 1
+1 37402 1
+37402 37402 1
+1 37403 1
+37403 37403 1
+1 37404 1
+37404 37404 1
+1 37405 1
+37405 37405 1
+1 37406 1
+37406 37406 1
+1 37407 1
+37407 37407 1
+1 37408 1
+37408 37408 1
+1 37409 1
+37409 37409 1
+1 37410 1
+37410 37410 1
+1 37411 1
+37411 37411 1
+1 37412 1
+37412 37412 1
+1 37413 1
+37413 37413 1
+1 37414 1
+37414 37414 1
+1 37415 1
+37415 37415 1
+1 37416 1
+37416 37416 1
+1 37417 1
+37417 37417 1
+1 37418 1
+37418 37418 1
+1 37419 1
+37419 37419 1
+1 37420 1
+37420 37420 1
+1 37421 1
+37421 37421 1
+1 37422 1
+37422 37422 1
+1 37423 1
+37423 37423 1
+1 37424 1
+37424 37424 1
+1 37425 1
+37425 37425 1
+1 37426 1
+37426 37426 1
+1 37427 1
+37427 37427 1
+1 37428 1
+37428 37428 1
+1 37429 1
+37429 37429 1
+1 37430 1
+37430 37430 1
+1 37431 1
+37431 37431 1
+1 37432 1
+37432 37432 1
+1 37433 1
+37433 37433 1
+1 37434 1
+37434 37434 1
+1 37435 1
+37435 37435 1
+1 37436 1
+37436 37436 1
+1 37437 1
+37437 37437 1
+1 37438 1
+37438 37438 1
+1 37439 1
+37439 37439 1
+1 37440 1
+37440 37440 1
+1 37441 1
+37441 37441 1
+1 37442 1
+37442 37442 1
+1 37443 1
+37443 37443 1
+1 37444 1
+37444 37444 1
+1 37445 1
+37445 37445 1
+1 37446 1
+37446 37446 1
+1 37447 1
+37447 37447 1
+1 37448 1
+37448 37448 1
+1 37449 1
+37449 37449 1
+1 37450 1
+37450 37450 1
+1 37451 1
+37451 37451 1
+1 37452 1
+37452 37452 1
+1 37453 1
+37453 37453 1
+1 37454 1
+37454 37454 1
+1 37455 1
+37455 37455 1
+1 37456 1
+37456 37456 1
+1 37457 1
+37457 37457 1
+1 37458 1
+37458 37458 1
+1 37459 1
+37459 37459 1
+1 37460 1
+37460 37460 1
+1 37461 1
+37461 37461 1
+1 37462 1
+37462 37462 1
+1 37463 1
+37463 37463 1
+1 37464 1
+37464 37464 1
+1 37465 1
+37465 37465 1
+1 37466 1
+37466 37466 1
+1 37467 1
+37467 37467 1
+1 37468 1
+37468 37468 1
+1 37469 1
+37469 37469 1
+1 37470 1
+37470 37470 1
+1 37471 1
+37471 37471 1
+1 37472 1
+37472 37472 1
+1 37473 1
+37473 37473 1
+1 37474 1
+37474 37474 1
+1 37475 1
+37475 37475 1
+1 37476 1
+37476 37476 1
+1 37477 1
+37477 37477 1
+1 37478 1
+37478 37478 1
+1 37479 1
+37479 37479 1
+1 37480 1
+37480 37480 1
+1 37481 1
+37481 37481 1
+1 37482 1
+37482 37482 1
+1 37483 1
+37483 37483 1
+1 37484 1
+37484 37484 1
+1 37485 1
+37485 37485 1
+1 37486 1
+37486 37486 1
+1 37487 1
+37487 37487 1
+1 37488 1
+37488 37488 1
+1 37489 1
+37489 37489 1
+1 37490 1
+37490 37490 1
+1 37491 1
+37491 37491 1
+1 37492 1
+37492 37492 1
+1 37493 1
+37493 37493 1
+1 37494 1
+37494 37494 1
+1 37495 1
+37495 37495 1
+1 37496 1
+37496 37496 1
+1 37497 1
+37497 37497 1
+1 37498 1
+37498 37498 1
+1 37499 1
+37499 37499 1
+1 37500 1
+37500 37500 1
+1 37501 1
+37501 37501 1
+1 37502 1
+37502 37502 1
+1 37503 1
+37503 37503 1
+1 37504 1
+37504 37504 1
+1 37505 1
+37505 37505 1
+1 37506 1
+37506 37506 1
+1 37507 1
+37507 37507 1
+1 37508 1
+37508 37508 1
+1 37509 1
+37509 37509 1
+1 37510 1
+37510 37510 1
+1 37511 1
+37511 37511 1
+1 37512 1
+37512 37512 1
+1 37513 1
+37513 37513 1
+1 37514 1
+37514 37514 1
+1 37515 1
+37515 37515 1
+1 37516 1
+37516 37516 1
+1 37517 1
+37517 37517 1
+1 37518 1
+37518 37518 1
+1 37519 1
+37519 37519 1
+1 37520 1
+37520 37520 1
+1 37521 1
+37521 37521 1
+1 37522 1
+37522 37522 1
+1 37523 1
+37523 37523 1
+1 37524 1
+37524 37524 1
+1 37525 1
+37525 37525 1
+1 37526 1
+37526 37526 1
+1 37527 1
+37527 37527 1
+1 37528 1
+37528 37528 1
+1 37529 1
+37529 37529 1
+1 37530 1
+37530 37530 1
+1 37531 1
+37531 37531 1
+1 37532 1
+37532 37532 1
+1 37533 1
+37533 37533 1
+1 37534 1
+37534 37534 1
+1 37535 1
+37535 37535 1
+1 37536 1
+37536 37536 1
+1 37537 1
+37537 37537 1
+1 37538 1
+37538 37538 1
+1 37539 1
+37539 37539 1
+1 37540 1
+37540 37540 1
+1 37541 1
+37541 37541 1
+1 37542 1
+37542 37542 1
+1 37543 1
+37543 37543 1
+1 37544 1
+37544 37544 1
+1 37545 1
+37545 37545 1
+1 37546 1
+37546 37546 1
+1 37547 1
+37547 37547 1
+1 37548 1
+37548 37548 1
+1 37549 1
+37549 37549 1
+1 37550 1
+37550 37550 1
+1 37551 1
+37551 37551 1
+1 37552 1
+37552 37552 1
+1 37553 1
+37553 37553 1
+1 37554 1
+37554 37554 1
+1 37555 1
+37555 37555 1
+1 37556 1
+37556 37556 1
+1 37557 1
+37557 37557 1
+1 37558 1
+37558 37558 1
+1 37559 1
+37559 37559 1
+1 37560 1
+37560 37560 1
+1 37561 1
+37561 37561 1
+1 37562 1
+37562 37562 1
+1 37563 1
+37563 37563 1
+1 37564 1
+37564 37564 1
+1 37565 1
+37565 37565 1
+1 37566 1
+37566 37566 1
+1 37567 1
+37567 37567 1
+1 37568 1
+37568 37568 1
+1 37569 1
+37569 37569 1
+1 37570 1
+37570 37570 1
+1 37571 1
+37571 37571 1
+1 37572 1
+37572 37572 1
+1 37573 1
+37573 37573 1
+1 37574 1
+37574 37574 1
+1 37575 1
+37575 37575 1
+1 37576 1
+37576 37576 1
+1 37577 1
+37577 37577 1
+1 37578 1
+37578 37578 1
+1 37579 1
+37579 37579 1
+1 37580 1
+37580 37580 1
+1 37581 1
+37581 37581 1
+1 37582 1
+37582 37582 1
+1 37583 1
+37583 37583 1
+1 37584 1
+37584 37584 1
+1 37585 1
+37585 37585 1
+1 37586 1
+37586 37586 1
+1 37587 1
+37587 37587 1
+1 37588 1
+37588 37588 1
+1 37589 1
+37589 37589 1
+1 37590 1
+37590 37590 1
+1 37591 1
+37591 37591 1
+1 37592 1
+37592 37592 1
+1 37593 1
+37593 37593 1
+1 37594 1
+37594 37594 1
+1 37595 1
+37595 37595 1
+1 37596 1
+37596 37596 1
+1 37597 1
+37597 37597 1
+1 37598 1
+37598 37598 1
+1 37599 1
+37599 37599 1
+1 37600 1
+37600 37600 1
+1 37601 1
+37601 37601 1
+1 37602 1
+37602 37602 1
+1 37603 1
+37603 37603 1
+1 37604 1
+37604 37604 1
+1 37605 1
+37605 37605 1
+1 37606 1
+37606 37606 1
+1 37607 1
+37607 37607 1
+1 37608 1
+37608 37608 1
+1 37609 1
+37609 37609 1
+1 37610 1
+37610 37610 1
+1 37611 1
+37611 37611 1
+1 37612 1
+37612 37612 1
+1 37613 1
+37613 37613 1
+1 37614 1
+37614 37614 1
+1 37615 1
+37615 37615 1
+1 37616 1
+37616 37616 1
+1 37617 1
+37617 37617 1
+1 37618 1
+37618 37618 1
+1 37619 1
+37619 37619 1
+1 37620 1
+37620 37620 1
+1 37621 1
+37621 37621 1
+1 37622 1
+37622 37622 1
+1 37623 1
+37623 37623 1
+1 37624 1
+37624 37624 1
+1 37625 1
+37625 37625 1
+1 37626 1
+37626 37626 1
+1 37627 1
+37627 37627 1
+1 37628 1
+37628 37628 1
+1 37629 1
+37629 37629 1
+1 37630 1
+37630 37630 1
+1 37631 1
+37631 37631 1
+1 37632 1
+37632 37632 1
+1 37633 1
+37633 37633 1
+1 37634 1
+37634 37634 1
+1 37635 1
+37635 37635 1
+1 37636 1
+37636 37636 1
+1 37637 1
+37637 37637 1
+1 37638 1
+37638 37638 1
+1 37639 1
+37639 37639 1
+1 37640 1
+37640 37640 1
+1 37641 1
+37641 37641 1
+1 37642 1
+37642 37642 1
+1 37643 1
+37643 37643 1
+1 37644 1
+37644 37644 1
+1 37645 1
+37645 37645 1
+1 37646 1
+37646 37646 1
+1 37647 1
+37647 37647 1
+1 37648 1
+37648 37648 1
+1 37649 1
+37649 37649 1
+1 37650 1
+37650 37650 1
+1 37651 1
+37651 37651 1
+1 37652 1
+37652 37652 1
+1 37653 1
+37653 37653 1
+1 37654 1
+37654 37654 1
+1 37655 1
+37655 37655 1
+1 37656 1
+37656 37656 1
+1 37657 1
+37657 37657 1
+1 37658 1
+37658 37658 1
+1 37659 1
+37659 37659 1
+1 37660 1
+37660 37660 1
+1 37661 1
+37661 37661 1
+1 37662 1
+37662 37662 1
+1 37663 1
+37663 37663 1
+1 37664 1
+37664 37664 1
+1 37665 1
+37665 37665 1
+1 37666 1
+37666 37666 1
+1 37667 1
+37667 37667 1
+1 37668 1
+37668 37668 1
+1 37669 1
+37669 37669 1
+1 37670 1
+37670 37670 1
+1 37671 1
+37671 37671 1
+1 37672 1
+37672 37672 1
+1 37673 1
+37673 37673 1
+1 37674 1
+37674 37674 1
+1 37675 1
+37675 37675 1
+1 37676 1
+37676 37676 1
+1 37677 1
+37677 37677 1
+1 37678 1
+37678 37678 1
+1 37679 1
+37679 37679 1
+1 37680 1
+37680 37680 1
+1 37681 1
+37681 37681 1
+1 37682 1
+37682 37682 1
+1 37683 1
+37683 37683 1
+1 37684 1
+37684 37684 1
+1 37685 1
+37685 37685 1
+1 37686 1
+37686 37686 1
+1 37687 1
+37687 37687 1
+1 37688 1
+37688 37688 1
+1 37689 1
+37689 37689 1
+1 37690 1
+37690 37690 1
+1 37691 1
+37691 37691 1
+1 37692 1
+37692 37692 1
+1 37693 1
+37693 37693 1
+1 37694 1
+37694 37694 1
+1 37695 1
+37695 37695 1
+1 37696 1
+37696 37696 1
+1 37697 1
+37697 37697 1
+1 37698 1
+37698 37698 1
+1 37699 1
+37699 37699 1
+1 37700 1
+37700 37700 1
+1 37701 1
+37701 37701 1
+1 37702 1
+37702 37702 1
+1 37703 1
+37703 37703 1
+1 37704 1
+37704 37704 1
+1 37705 1
+37705 37705 1
+1 37706 1
+37706 37706 1
+1 37707 1
+37707 37707 1
+1 37708 1
+37708 37708 1
+1 37709 1
+37709 37709 1
+1 37710 1
+37710 37710 1
+1 37711 1
+37711 37711 1
+1 37712 1
+37712 37712 1
+1 37713 1
+37713 37713 1
+1 37714 1
+37714 37714 1
+1 37715 1
+37715 37715 1
+1 37716 1
+37716 37716 1
+1 37717 1
+37717 37717 1
+1 37718 1
+37718 37718 1
+1 37719 1
+37719 37719 1
+1 37720 1
+37720 37720 1
+1 37721 1
+37721 37721 1
+1 37722 1
+37722 37722 1
+1 37723 1
+37723 37723 1
+1 37724 1
+37724 37724 1
+1 37725 1
+37725 37725 1
+1 37726 1
+37726 37726 1
+1 37727 1
+37727 37727 1
+1 37728 1
+37728 37728 1
+1 37729 1
+37729 37729 1
+1 37730 1
+37730 37730 1
+1 37731 1
+37731 37731 1
+1 37732 1
+37732 37732 1
+1 37733 1
+37733 37733 1
+1 37734 1
+37734 37734 1
+1 37735 1
+37735 37735 1
+1 37736 1
+37736 37736 1
+1 37737 1
+37737 37737 1
+1 37738 1
+37738 37738 1
+1 37739 1
+37739 37739 1
+1 37740 1
+37740 37740 1
+1 37741 1
+37741 37741 1
+1 37742 1
+37742 37742 1
+1 37743 1
+37743 37743 1
+1 37744 1
+37744 37744 1
+1 37745 1
+37745 37745 1
+1 37746 1
+37746 37746 1
+1 37747 1
+37747 37747 1
+1 37748 1
+37748 37748 1
+1 37749 1
+37749 37749 1
+1 37750 1
+37750 37750 1
+1 37751 1
+37751 37751 1
+1 37752 1
+37752 37752 1
+1 37753 1
+37753 37753 1
+1 37754 1
+37754 37754 1
+1 37755 1
+37755 37755 1
+1 37756 1
+37756 37756 1
+1 37757 1
+37757 37757 1
+1 37758 1
+37758 37758 1
+1 37759 1
+37759 37759 1
+1 37760 1
+37760 37760 1
+1 37761 1
+37761 37761 1
+1 37762 1
+37762 37762 1
+1 37763 1
+37763 37763 1
+1 37764 1
+37764 37764 1
+1 37765 1
+37765 37765 1
+1 37766 1
+37766 37766 1
+1 37767 1
+37767 37767 1
+1 37768 1
+37768 37768 1
+1 37769 1
+37769 37769 1
+1 37770 1
+37770 37770 1
+1 37771 1
+37771 37771 1
+1 37772 1
+37772 37772 1
+1 37773 1
+37773 37773 1
+1 37774 1
+37774 37774 1
+1 37775 1
+37775 37775 1
+1 37776 1
+37776 37776 1
+1 37777 1
+37777 37777 1
+1 37778 1
+37778 37778 1
+1 37779 1
+37779 37779 1
+1 37780 1
+37780 37780 1
+1 37781 1
+37781 37781 1
+1 37782 1
+37782 37782 1
+1 37783 1
+37783 37783 1
+1 37784 1
+37784 37784 1
+1 37785 1
+37785 37785 1
+1 37786 1
+37786 37786 1
+1 37787 1
+37787 37787 1
+1 37788 1
+37788 37788 1
+1 37789 1
+37789 37789 1
+1 37790 1
+37790 37790 1
+1 37791 1
+37791 37791 1
+1 37792 1
+37792 37792 1
+1 37793 1
+37793 37793 1
+1 37794 1
+37794 37794 1
+1 37795 1
+37795 37795 1
+1 37796 1
+37796 37796 1
+1 37797 1
+37797 37797 1
+1 37798 1
+37798 37798 1
+1 37799 1
+37799 37799 1
+1 37800 1
+37800 37800 1
+1 37801 1
+37801 37801 1
+1 37802 1
+37802 37802 1
+1 37803 1
+37803 37803 1
+1 37804 1
+37804 37804 1
+1 37805 1
+37805 37805 1
+1 37806 1
+37806 37806 1
+1 37807 1
+37807 37807 1
+1 37808 1
+37808 37808 1
+1 37809 1
+37809 37809 1
+1 37810 1
+37810 37810 1
+1 37811 1
+37811 37811 1
+1 37812 1
+37812 37812 1
+1 37813 1
+37813 37813 1
+1 37814 1
+37814 37814 1
+1 37815 1
+37815 37815 1
+1 37816 1
+37816 37816 1
+1 37817 1
+37817 37817 1
+1 37818 1
+37818 37818 1
+1 37819 1
+37819 37819 1
+1 37820 1
+37820 37820 1
+1 37821 1
+37821 37821 1
+1 37822 1
+37822 37822 1
+1 37823 1
+37823 37823 1
+1 37824 1
+37824 37824 1
+1 37825 1
+37825 37825 1
+1 37826 1
+37826 37826 1
+1 37827 1
+37827 37827 1
+1 37828 1
+37828 37828 1
+1 37829 1
+37829 37829 1
+1 37830 1
+37830 37830 1
+1 37831 1
+37831 37831 1
+1 37832 1
+37832 37832 1
+1 37833 1
+37833 37833 1
+1 37834 1
+37834 37834 1
+1 37835 1
+37835 37835 1
+1 37836 1
+37836 37836 1
+1 37837 1
+37837 37837 1
+1 37838 1
+37838 37838 1
+1 37839 1
+37839 37839 1
+1 37840 1
+37840 37840 1
+1 37841 1
+37841 37841 1
+1 37842 1
+37842 37842 1
+1 37843 1
+37843 37843 1
+1 37844 1
+37844 37844 1
+1 37845 1
+37845 37845 1
+1 37846 1
+37846 37846 1
+1 37847 1
+37847 37847 1
+1 37848 1
+37848 37848 1
+1 37849 1
+37849 37849 1
+1 37850 1
+37850 37850 1
+1 37851 1
+37851 37851 1
+1 37852 1
+37852 37852 1
+1 37853 1
+37853 37853 1
+1 37854 1
+37854 37854 1
+1 37855 1
+37855 37855 1
+1 37856 1
+37856 37856 1
+1 37857 1
+37857 37857 1
+1 37858 1
+37858 37858 1
+1 37859 1
+37859 37859 1
+1 37860 1
+37860 37860 1
+1 37861 1
+37861 37861 1
+1 37862 1
+37862 37862 1
+1 37863 1
+37863 37863 1
+1 37864 1
+37864 37864 1
+1 37865 1
+37865 37865 1
+1 37866 1
+37866 37866 1
+1 37867 1
+37867 37867 1
+1 37868 1
+37868 37868 1
+1 37869 1
+37869 37869 1
+1 37870 1
+37870 37870 1
+1 37871 1
+37871 37871 1
+1 37872 1
+37872 37872 1
+1 37873 1
+37873 37873 1
+1 37874 1
+37874 37874 1
+1 37875 1
+37875 37875 1
+1 37876 1
+37876 37876 1
+1 37877 1
+37877 37877 1
+1 37878 1
+37878 37878 1
+1 37879 1
+37879 37879 1
+1 37880 1
+37880 37880 1
+1 37881 1
+37881 37881 1
+1 37882 1
+37882 37882 1
+1 37883 1
+37883 37883 1
+1 37884 1
+37884 37884 1
+1 37885 1
+37885 37885 1
+1 37886 1
+37886 37886 1
+1 37887 1
+37887 37887 1
+1 37888 1
+37888 37888 1
+1 37889 1
+37889 37889 1
+1 37890 1
+37890 37890 1
+1 37891 1
+37891 37891 1
+1 37892 1
+37892 37892 1
+1 37893 1
+37893 37893 1
+1 37894 1
+37894 37894 1
+1 37895 1
+37895 37895 1
+1 37896 1
+37896 37896 1
+1 37897 1
+37897 37897 1
+1 37898 1
+37898 37898 1
+1 37899 1
+37899 37899 1
+1 37900 1
+37900 37900 1
+1 37901 1
+37901 37901 1
+1 37902 1
+37902 37902 1
+1 37903 1
+37903 37903 1
+1 37904 1
+37904 37904 1
+1 37905 1
+37905 37905 1
+1 37906 1
+37906 37906 1
+1 37907 1
+37907 37907 1
+1 37908 1
+37908 37908 1
+1 37909 1
+37909 37909 1
+1 37910 1
+37910 37910 1
+1 37911 1
+37911 37911 1
+1 37912 1
+37912 37912 1
+1 37913 1
+37913 37913 1
+1 37914 1
+37914 37914 1
+1 37915 1
+37915 37915 1
+1 37916 1
+37916 37916 1
+1 37917 1
+37917 37917 1
+1 37918 1
+37918 37918 1
+1 37919 1
+37919 37919 1
+1 37920 1
+37920 37920 1
+1 37921 1
+37921 37921 1
+1 37922 1
+37922 37922 1
+1 37923 1
+37923 37923 1
+1 37924 1
+37924 37924 1
+1 37925 1
+37925 37925 1
+1 37926 1
+37926 37926 1
+1 37927 1
+37927 37927 1
+1 37928 1
+37928 37928 1
+1 37929 1
+37929 37929 1
+1 37930 1
+37930 37930 1
+1 37931 1
+37931 37931 1
+1 37932 1
+37932 37932 1
+1 37933 1
+37933 37933 1
+1 37934 1
+37934 37934 1
+1 37935 1
+37935 37935 1
+1 37936 1
+37936 37936 1
+1 37937 1
+37937 37937 1
+1 37938 1
+37938 37938 1
+1 37939 1
+37939 37939 1
+1 37940 1
+37940 37940 1
+1 37941 1
+37941 37941 1
+1 37942 1
+37942 37942 1
+1 37943 1
+37943 37943 1
+1 37944 1
+37944 37944 1
+1 37945 1
+37945 37945 1
+1 37946 1
+37946 37946 1
+1 37947 1
+37947 37947 1
+1 37948 1
+37948 37948 1
+1 37949 1
+37949 37949 1
+1 37950 1
+37950 37950 1
+1 37951 1
+37951 37951 1
+1 37952 1
+37952 37952 1
+1 37953 1
+37953 37953 1
+1 37954 1
+37954 37954 1
+1 37955 1
+37955 37955 1
+1 37956 1
+37956 37956 1
+1 37957 1
+37957 37957 1
+1 37958 1
+37958 37958 1
+1 37959 1
+37959 37959 1
+1 37960 1
+37960 37960 1
+1 37961 1
+37961 37961 1
+1 37962 1
+37962 37962 1
+1 37963 1
+37963 37963 1
+1 37964 1
+37964 37964 1
+1 37965 1
+37965 37965 1
+1 37966 1
+37966 37966 1
+1 37967 1
+37967 37967 1
+1 37968 1
+37968 37968 1
+1 37969 1
+37969 37969 1
+1 37970 1
+37970 37970 1
+1 37971 1
+37971 37971 1
+1 37972 1
+37972 37972 1
+1 37973 1
+37973 37973 1
+1 37974 1
+37974 37974 1
+1 37975 1
+37975 37975 1
+1 37976 1
+37976 37976 1
+1 37977 1
+37977 37977 1
+1 37978 1
+37978 37978 1
+1 37979 1
+37979 37979 1
+1 37980 1
+37980 37980 1
+1 37981 1
+37981 37981 1
+1 37982 1
+37982 37982 1
+1 37983 1
+37983 37983 1
+1 37984 1
+37984 37984 1
+1 37985 1
+37985 37985 1
+1 37986 1
+37986 37986 1
+1 37987 1
+37987 37987 1
+1 37988 1
+37988 37988 1
+1 37989 1
+37989 37989 1
+1 37990 1
+37990 37990 1
+1 37991 1
+37991 37991 1
+1 37992 1
+37992 37992 1
+1 37993 1
+37993 37993 1
+1 37994 1
+37994 37994 1
+1 37995 1
+37995 37995 1
+1 37996 1
+37996 37996 1
+1 37997 1
+37997 37997 1
+1 37998 1
+37998 37998 1
+1 37999 1
+37999 37999 1
+1 38000 1
+38000 38000 1
+1 38001 1
+38001 38001 1
+1 38002 1
+38002 38002 1
+1 38003 1
+38003 38003 1
+1 38004 1
+38004 38004 1
+1 38005 1
+38005 38005 1
+1 38006 1
+38006 38006 1
+1 38007 1
+38007 38007 1
+1 38008 1
+38008 38008 1
+1 38009 1
+38009 38009 1
+1 38010 1
+38010 38010 1
+1 38011 1
+38011 38011 1
+1 38012 1
+38012 38012 1
+1 38013 1
+38013 38013 1
+1 38014 1
+38014 38014 1
+1 38015 1
+38015 38015 1
+1 38016 1
+38016 38016 1
+1 38017 1
+38017 38017 1
+1 38018 1
+38018 38018 1
+1 38019 1
+38019 38019 1
+1 38020 1
+38020 38020 1
+1 38021 1
+38021 38021 1
+1 38022 1
+38022 38022 1
+1 38023 1
+38023 38023 1
+1 38024 1
+38024 38024 1
+1 38025 1
+38025 38025 1
+1 38026 1
+38026 38026 1
+1 38027 1
+38027 38027 1
+1 38028 1
+38028 38028 1
+1 38029 1
+38029 38029 1
+1 38030 1
+38030 38030 1
+1 38031 1
+38031 38031 1
+1 38032 1
+38032 38032 1
+1 38033 1
+38033 38033 1
+1 38034 1
+38034 38034 1
+1 38035 1
+38035 38035 1
+1 38036 1
+38036 38036 1
+1 38037 1
+38037 38037 1
+1 38038 1
+38038 38038 1
+1 38039 1
+38039 38039 1
+1 38040 1
+38040 38040 1
+1 38041 1
+38041 38041 1
+1 38042 1
+38042 38042 1
+1 38043 1
+38043 38043 1
+1 38044 1
+38044 38044 1
+1 38045 1
+38045 38045 1
+1 38046 1
+38046 38046 1
+1 38047 1
+38047 38047 1
+1 38048 1
+38048 38048 1
+1 38049 1
+38049 38049 1
+1 38050 1
+38050 38050 1
+1 38051 1
+38051 38051 1
+1 38052 1
+38052 38052 1
+1 38053 1
+38053 38053 1
+1 38054 1
+38054 38054 1
+1 38055 1
+38055 38055 1
+1 38056 1
+38056 38056 1
+1 38057 1
+38057 38057 1
+1 38058 1
+38058 38058 1
+1 38059 1
+38059 38059 1
+1 38060 1
+38060 38060 1
+1 38061 1
+38061 38061 1
+1 38062 1
+38062 38062 1
+1 38063 1
+38063 38063 1
+1 38064 1
+38064 38064 1
+1 38065 1
+38065 38065 1
+1 38066 1
+38066 38066 1
+1 38067 1
+38067 38067 1
+1 38068 1
+38068 38068 1
+1 38069 1
+38069 38069 1
+1 38070 1
+38070 38070 1
+1 38071 1
+38071 38071 1
+1 38072 1
+38072 38072 1
+1 38073 1
+38073 38073 1
+1 38074 1
+38074 38074 1
+1 38075 1
+38075 38075 1
+1 38076 1
+38076 38076 1
+1 38077 1
+38077 38077 1
+1 38078 1
+38078 38078 1
+1 38079 1
+38079 38079 1
+1 38080 1
+38080 38080 1
+1 38081 1
+38081 38081 1
+1 38082 1
+38082 38082 1
+1 38083 1
+38083 38083 1
+1 38084 1
+38084 38084 1
+1 38085 1
+38085 38085 1
+1 38086 1
+38086 38086 1
+1 38087 1
+38087 38087 1
+1 38088 1
+38088 38088 1
+1 38089 1
+38089 38089 1
+1 38090 1
+38090 38090 1
+1 38091 1
+38091 38091 1
+1 38092 1
+38092 38092 1
+1 38093 1
+38093 38093 1
+1 38094 1
+38094 38094 1
+1 38095 1
+38095 38095 1
+1 38096 1
+38096 38096 1
+1 38097 1
+38097 38097 1
+1 38098 1
+38098 38098 1
+1 38099 1
+38099 38099 1
+1 38100 1
+38100 38100 1
+1 38101 1
+38101 38101 1
+1 38102 1
+38102 38102 1
+1 38103 1
+38103 38103 1
+1 38104 1
+38104 38104 1
+1 38105 1
+38105 38105 1
+1 38106 1
+38106 38106 1
+1 38107 1
+38107 38107 1
+1 38108 1
+38108 38108 1
+1 38109 1
+38109 38109 1
+1 38110 1
+38110 38110 1
+1 38111 1
+38111 38111 1
+1 38112 1
+38112 38112 1
+1 38113 1
+38113 38113 1
+1 38114 1
+38114 38114 1
+1 38115 1
+38115 38115 1
+1 38116 1
+38116 38116 1
+1 38117 1
+38117 38117 1
+1 38118 1
+38118 38118 1
+1 38119 1
+38119 38119 1
+1 38120 1
+38120 38120 1
+1 38121 1
+38121 38121 1
+1 38122 1
+38122 38122 1
+1 38123 1
+38123 38123 1
+1 38124 1
+38124 38124 1
+1 38125 1
+38125 38125 1
+1 38126 1
+38126 38126 1
+1 38127 1
+38127 38127 1
+1 38128 1
+38128 38128 1
+1 38129 1
+38129 38129 1
+1 38130 1
+38130 38130 1
+1 38131 1
+38131 38131 1
+1 38132 1
+38132 38132 1
+1 38133 1
+38133 38133 1
+1 38134 1
+38134 38134 1
+1 38135 1
+38135 38135 1
+1 38136 1
+38136 38136 1
+1 38137 1
+38137 38137 1
+1 38138 1
+38138 38138 1
+1 38139 1
+38139 38139 1
+1 38140 1
+38140 38140 1
+1 38141 1
+38141 38141 1
+1 38142 1
+38142 38142 1
+1 38143 1
+38143 38143 1
+1 38144 1
+38144 38144 1
+1 38145 1
+38145 38145 1
+1 38146 1
+38146 38146 1
+1 38147 1
+38147 38147 1
+1 38148 1
+38148 38148 1
+1 38149 1
+38149 38149 1
+1 38150 1
+38150 38150 1
+1 38151 1
+38151 38151 1
+1 38152 1
+38152 38152 1
+1 38153 1
+38153 38153 1
+1 38154 1
+38154 38154 1
+1 38155 1
+38155 38155 1
+1 38156 1
+38156 38156 1
+1 38157 1
+38157 38157 1
+1 38158 1
+38158 38158 1
+1 38159 1
+38159 38159 1
+1 38160 1
+38160 38160 1
+1 38161 1
+38161 38161 1
+1 38162 1
+38162 38162 1
+1 38163 1
+38163 38163 1
+1 38164 1
+38164 38164 1
+1 38165 1
+38165 38165 1
+1 38166 1
+38166 38166 1
+1 38167 1
+38167 38167 1
+1 38168 1
+38168 38168 1
+1 38169 1
+38169 38169 1
+1 38170 1
+38170 38170 1
+1 38171 1
+38171 38171 1
+1 38172 1
+38172 38172 1
+1 38173 1
+38173 38173 1
+1 38174 1
+38174 38174 1
+1 38175 1
+38175 38175 1
+1 38176 1
+38176 38176 1
+1 38177 1
+38177 38177 1
+1 38178 1
+38178 38178 1
+1 38179 1
+38179 38179 1
+1 38180 1
+38180 38180 1
+1 38181 1
+38181 38181 1
+1 38182 1
+38182 38182 1
+1 38183 1
+38183 38183 1
+1 38184 1
+38184 38184 1
+1 38185 1
+38185 38185 1
+1 38186 1
+38186 38186 1
+1 38187 1
+38187 38187 1
+1 38188 1
+38188 38188 1
+1 38189 1
+38189 38189 1
+1 38190 1
+38190 38190 1
+1 38191 1
+38191 38191 1
+1 38192 1
+38192 38192 1
+1 38193 1
+38193 38193 1
+1 38194 1
+38194 38194 1
+1 38195 1
+38195 38195 1
+1 38196 1
+38196 38196 1
+1 38197 1
+38197 38197 1
+1 38198 1
+38198 38198 1
+1 38199 1
+38199 38199 1
+1 38200 1
+38200 38200 1
+1 38201 1
+38201 38201 1
+1 38202 1
+38202 38202 1
+1 38203 1
+38203 38203 1
+1 38204 1
+38204 38204 1
+1 38205 1
+38205 38205 1
+1 38206 1
+38206 38206 1
+1 38207 1
+38207 38207 1
+1 38208 1
+38208 38208 1
+1 38209 1
+38209 38209 1
+1 38210 1
+38210 38210 1
+1 38211 1
+38211 38211 1
+1 38212 1
+38212 38212 1
+1 38213 1
+38213 38213 1
+1 38214 1
+38214 38214 1
+1 38215 1
+38215 38215 1
+1 38216 1
+38216 38216 1
+1 38217 1
+38217 38217 1
+1 38218 1
+38218 38218 1
+1 38219 1
+38219 38219 1
+1 38220 1
+38220 38220 1
+1 38221 1
+38221 38221 1
+1 38222 1
+38222 38222 1
+1 38223 1
+38223 38223 1
+1 38224 1
+38224 38224 1
+1 38225 1
+38225 38225 1
+1 38226 1
+38226 38226 1
+1 38227 1
+38227 38227 1
+1 38228 1
+38228 38228 1
+1 38229 1
+38229 38229 1
+1 38230 1
+38230 38230 1
+1 38231 1
+38231 38231 1
+1 38232 1
+38232 38232 1
+1 38233 1
+38233 38233 1
+1 38234 1
+38234 38234 1
+1 38235 1
+38235 38235 1
+1 38236 1
+38236 38236 1
+1 38237 1
+38237 38237 1
+1 38238 1
+38238 38238 1
+1 38239 1
+38239 38239 1
+1 38240 1
+38240 38240 1
+1 38241 1
+38241 38241 1
+1 38242 1
+38242 38242 1
+1 38243 1
+38243 38243 1
+1 38244 1
+38244 38244 1
+1 38245 1
+38245 38245 1
+1 38246 1
+38246 38246 1
+1 38247 1
+38247 38247 1
+1 38248 1
+38248 38248 1
+1 38249 1
+38249 38249 1
+1 38250 1
+38250 38250 1
+1 38251 1
+38251 38251 1
+1 38252 1
+38252 38252 1
+1 38253 1
+38253 38253 1
+1 38254 1
+38254 38254 1
+1 38255 1
+38255 38255 1
+1 38256 1
+38256 38256 1
+1 38257 1
+38257 38257 1
+1 38258 1
+38258 38258 1
+1 38259 1
+38259 38259 1
+1 38260 1
+38260 38260 1
+1 38261 1
+38261 38261 1
+1 38262 1
+38262 38262 1
+1 38263 1
+38263 38263 1
+1 38264 1
+38264 38264 1
+1 38265 1
+38265 38265 1
+1 38266 1
+38266 38266 1
+1 38267 1
+38267 38267 1
+1 38268 1
+38268 38268 1
+1 38269 1
+38269 38269 1
+1 38270 1
+38270 38270 1
+1 38271 1
+38271 38271 1
+1 38272 1
+38272 38272 1
+1 38273 1
+38273 38273 1
+1 38274 1
+38274 38274 1
+1 38275 1
+38275 38275 1
+1 38276 1
+38276 38276 1
+1 38277 1
+38277 38277 1
+1 38278 1
+38278 38278 1
+1 38279 1
+38279 38279 1
+1 38280 1
+38280 38280 1
+1 38281 1
+38281 38281 1
+1 38282 1
+38282 38282 1
+1 38283 1
+38283 38283 1
+1 38284 1
+38284 38284 1
+1 38285 1
+38285 38285 1
+1 38286 1
+38286 38286 1
+1 38287 1
+38287 38287 1
+1 38288 1
+38288 38288 1
+1 38289 1
+38289 38289 1
+1 38290 1
+38290 38290 1
+1 38291 1
+38291 38291 1
+1 38292 1
+38292 38292 1
+1 38293 1
+38293 38293 1
+1 38294 1
+38294 38294 1
+1 38295 1
+38295 38295 1
+1 38296 1
+38296 38296 1
+1 38297 1
+38297 38297 1
+1 38298 1
+38298 38298 1
+1 38299 1
+38299 38299 1
+1 38300 1
+38300 38300 1
+1 38301 1
+38301 38301 1
+1 38302 1
+38302 38302 1
+1 38303 1
+38303 38303 1
+1 38304 1
+38304 38304 1
+1 38305 1
+38305 38305 1
+1 38306 1
+38306 38306 1
+1 38307 1
+38307 38307 1
+1 38308 1
+38308 38308 1
+1 38309 1
+38309 38309 1
+1 38310 1
+38310 38310 1
+1 38311 1
+38311 38311 1
+1 38312 1
+38312 38312 1
+1 38313 1
+38313 38313 1
+1 38314 1
+38314 38314 1
+1 38315 1
+38315 38315 1
+1 38316 1
+38316 38316 1
+1 38317 1
+38317 38317 1
+1 38318 1
+38318 38318 1
+1 38319 1
+38319 38319 1
+1 38320 1
+38320 38320 1
+1 38321 1
+38321 38321 1
+1 38322 1
+38322 38322 1
+1 38323 1
+38323 38323 1
+1 38324 1
+38324 38324 1
+1 38325 1
+38325 38325 1
+1 38326 1
+38326 38326 1
+1 38327 1
+38327 38327 1
+1 38328 1
+38328 38328 1
+1 38329 1
+38329 38329 1
+1 38330 1
+38330 38330 1
+1 38331 1
+38331 38331 1
+1 38332 1
+38332 38332 1
+1 38333 1
+38333 38333 1
+1 38334 1
+38334 38334 1
+1 38335 1
+38335 38335 1
+1 38336 1
+38336 38336 1
+1 38337 1
+38337 38337 1
+1 38338 1
+38338 38338 1
+1 38339 1
+38339 38339 1
+1 38340 1
+38340 38340 1
+1 38341 1
+38341 38341 1
+1 38342 1
+38342 38342 1
+1 38343 1
+38343 38343 1
+1 38344 1
+38344 38344 1
+1 38345 1
+38345 38345 1
+1 38346 1
+38346 38346 1
+1 38347 1
+38347 38347 1
+1 38348 1
+38348 38348 1
+1 38349 1
+38349 38349 1
+1 38350 1
+38350 38350 1
+1 38351 1
+38351 38351 1
+1 38352 1
+38352 38352 1
+1 38353 1
+38353 38353 1
+1 38354 1
+38354 38354 1
+1 38355 1
+38355 38355 1
+1 38356 1
+38356 38356 1
+1 38357 1
+38357 38357 1
+1 38358 1
+38358 38358 1
+1 38359 1
+38359 38359 1
+1 38360 1
+38360 38360 1
+1 38361 1
+38361 38361 1
+1 38362 1
+38362 38362 1
+1 38363 1
+38363 38363 1
+1 38364 1
+38364 38364 1
+1 38365 1
+38365 38365 1
+1 38366 1
+38366 38366 1
+1 38367 1
+38367 38367 1
+1 38368 1
+38368 38368 1
+1 38369 1
+38369 38369 1
+1 38370 1
+38370 38370 1
+1 38371 1
+38371 38371 1
+1 38372 1
+38372 38372 1
+1 38373 1
+38373 38373 1
+1 38374 1
+38374 38374 1
+1 38375 1
+38375 38375 1
+1 38376 1
+38376 38376 1
+1 38377 1
+38377 38377 1
+1 38378 1
+38378 38378 1
+1 38379 1
+38379 38379 1
+1 38380 1
+38380 38380 1
+1 38381 1
+38381 38381 1
+1 38382 1
+38382 38382 1
+1 38383 1
+38383 38383 1
+1 38384 1
+38384 38384 1
+1 38385 1
+38385 38385 1
+1 38386 1
+38386 38386 1
+1 38387 1
+38387 38387 1
+1 38388 1
+38388 38388 1
+1 38389 1
+38389 38389 1
+1 38390 1
+38390 38390 1
+1 38391 1
+38391 38391 1
+1 38392 1
+38392 38392 1
+1 38393 1
+38393 38393 1
+1 38394 1
+38394 38394 1
+1 38395 1
+38395 38395 1
+1 38396 1
+38396 38396 1
+1 38397 1
+38397 38397 1
+1 38398 1
+38398 38398 1
+1 38399 1
+38399 38399 1
+1 38400 1
+38400 38400 1
+1 38401 1
+38401 38401 1
+1 38402 1
+38402 38402 1
+1 38403 1
+38403 38403 1
+1 38404 1
+38404 38404 1
+1 38405 1
+38405 38405 1
+1 38406 1
+38406 38406 1
+1 38407 1
+38407 38407 1
+1 38408 1
+38408 38408 1
+1 38409 1
+38409 38409 1
+1 38410 1
+38410 38410 1
+1 38411 1
+38411 38411 1
+1 38412 1
+38412 38412 1
+1 38413 1
+38413 38413 1
+1 38414 1
+38414 38414 1
+1 38415 1
+38415 38415 1
+1 38416 1
+38416 38416 1
+1 38417 1
+38417 38417 1
+1 38418 1
+38418 38418 1
+1 38419 1
+38419 38419 1
+1 38420 1
+38420 38420 1
+1 38421 1
+38421 38421 1
+1 38422 1
+38422 38422 1
+1 38423 1
+38423 38423 1
+1 38424 1
+38424 38424 1
+1 38425 1
+38425 38425 1
+1 38426 1
+38426 38426 1
+1 38427 1
+38427 38427 1
+1 38428 1
+38428 38428 1
+1 38429 1
+38429 38429 1
+1 38430 1
+38430 38430 1
+1 38431 1
+38431 38431 1
+1 38432 1
+38432 38432 1
+1 38433 1
+38433 38433 1
+1 38434 1
+38434 38434 1
+1 38435 1
+38435 38435 1
+1 38436 1
+38436 38436 1
+1 38437 1
+38437 38437 1
+1 38438 1
+38438 38438 1
+1 38439 1
+38439 38439 1
+1 38440 1
+38440 38440 1
+1 38441 1
+38441 38441 1
+1 38442 1
+38442 38442 1
+1 38443 1
+38443 38443 1
+1 38444 1
+38444 38444 1
+1 38445 1
+38445 38445 1
+1 38446 1
+38446 38446 1
+1 38447 1
+38447 38447 1
+1 38448 1
+38448 38448 1
+1 38449 1
+38449 38449 1
+1 38450 1
+38450 38450 1
+1 38451 1
+38451 38451 1
+1 38452 1
+38452 38452 1
+1 38453 1
+38453 38453 1
+1 38454 1
+38454 38454 1
+1 38455 1
+38455 38455 1
+1 38456 1
+38456 38456 1
+1 38457 1
+38457 38457 1
+1 38458 1
+38458 38458 1
+1 38459 1
+38459 38459 1
+1 38460 1
+38460 38460 1
+1 38461 1
+38461 38461 1
+1 38462 1
+38462 38462 1
+1 38463 1
+38463 38463 1
+1 38464 1
+38464 38464 1
+1 38465 1
+38465 38465 1
+1 38466 1
+38466 38466 1
+1 38467 1
+38467 38467 1
+1 38468 1
+38468 38468 1
+1 38469 1
+38469 38469 1
+1 38470 1
+38470 38470 1
+1 38471 1
+38471 38471 1
+1 38472 1
+38472 38472 1
+1 38473 1
+38473 38473 1
+1 38474 1
+38474 38474 1
+1 38475 1
+38475 38475 1
+1 38476 1
+38476 38476 1
+1 38477 1
+38477 38477 1
+1 38478 1
+38478 38478 1
+1 38479 1
+38479 38479 1
+1 38480 1
+38480 38480 1
+1 38481 1
+38481 38481 1
+1 38482 1
+38482 38482 1
+1 38483 1
+38483 38483 1
+1 38484 1
+38484 38484 1
+1 38485 1
+38485 38485 1
+1 38486 1
+38486 38486 1
+1 38487 1
+38487 38487 1
+1 38488 1
+38488 38488 1
+1 38489 1
+38489 38489 1
+1 38490 1
+38490 38490 1
+1 38491 1
+38491 38491 1
+1 38492 1
+38492 38492 1
+1 38493 1
+38493 38493 1
+1 38494 1
+38494 38494 1
+1 38495 1
+38495 38495 1
+1 38496 1
+38496 38496 1
+1 38497 1
+38497 38497 1
+1 38498 1
+38498 38498 1
+1 38499 1
+38499 38499 1
+1 38500 1
+38500 38500 1
+1 38501 1
+38501 38501 1
+1 38502 1
+38502 38502 1
+1 38503 1
+38503 38503 1
+1 38504 1
+38504 38504 1
+1 38505 1
+38505 38505 1
+1 38506 1
+38506 38506 1
+1 38507 1
+38507 38507 1
+1 38508 1
+38508 38508 1
+1 38509 1
+38509 38509 1
+1 38510 1
+38510 38510 1
+1 38511 1
+38511 38511 1
+1 38512 1
+38512 38512 1
+1 38513 1
+38513 38513 1
+1 38514 1
+38514 38514 1
+1 38515 1
+38515 38515 1
+1 38516 1
+38516 38516 1
+1 38517 1
+38517 38517 1
+1 38518 1
+38518 38518 1
+1 38519 1
+38519 38519 1
+1 38520 1
+38520 38520 1
+1 38521 1
+38521 38521 1
+1 38522 1
+38522 38522 1
+1 38523 1
+38523 38523 1
+1 38524 1
+38524 38524 1
+1 38525 1
+38525 38525 1
+1 38526 1
+38526 38526 1
+1 38527 1
+38527 38527 1
+1 38528 1
+38528 38528 1
+1 38529 1
+38529 38529 1
+1 38530 1
+38530 38530 1
+1 38531 1
+38531 38531 1
+1 38532 1
+38532 38532 1
+1 38533 1
+38533 38533 1
+1 38534 1
+38534 38534 1
+1 38535 1
+38535 38535 1
+1 38536 1
+38536 38536 1
+1 38537 1
+38537 38537 1
+1 38538 1
+38538 38538 1
+1 38539 1
+38539 38539 1
+1 38540 1
+38540 38540 1
+1 38541 1
+38541 38541 1
+1 38542 1
+38542 38542 1
+1 38543 1
+38543 38543 1
+1 38544 1
+38544 38544 1
+1 38545 1
+38545 38545 1
+1 38546 1
+38546 38546 1
+1 38547 1
+38547 38547 1
+1 38548 1
+38548 38548 1
+1 38549 1
+38549 38549 1
+1 38550 1
+38550 38550 1
+1 38551 1
+38551 38551 1
+1 38552 1
+38552 38552 1
+1 38553 1
+38553 38553 1
+1 38554 1
+38554 38554 1
+1 38555 1
+38555 38555 1
+1 38556 1
+38556 38556 1
+1 38557 1
+38557 38557 1
+1 38558 1
+38558 38558 1
+1 38559 1
+38559 38559 1
+1 38560 1
+38560 38560 1
+1 38561 1
+38561 38561 1
+1 38562 1
+38562 38562 1
+1 38563 1
+38563 38563 1
+1 38564 1
+38564 38564 1
+1 38565 1
+38565 38565 1
+1 38566 1
+38566 38566 1
+1 38567 1
+38567 38567 1
+1 38568 1
+38568 38568 1
+1 38569 1
+38569 38569 1
+1 38570 1
+38570 38570 1
+1 38571 1
+38571 38571 1
+1 38572 1
+38572 38572 1
+1 38573 1
+38573 38573 1
+1 38574 1
+38574 38574 1
+1 38575 1
+38575 38575 1
+1 38576 1
+38576 38576 1
+1 38577 1
+38577 38577 1
+1 38578 1
+38578 38578 1
+1 38579 1
+38579 38579 1
+1 38580 1
+38580 38580 1
+1 38581 1
+38581 38581 1
+1 38582 1
+38582 38582 1
+1 38583 1
+38583 38583 1
+1 38584 1
+38584 38584 1
+1 38585 1
+38585 38585 1
+1 38586 1
+38586 38586 1
+1 38587 1
+38587 38587 1
+1 38588 1
+38588 38588 1
+1 38589 1
+38589 38589 1
+1 38590 1
+38590 38590 1
+1 38591 1
+38591 38591 1
+1 38592 1
+38592 38592 1
+1 38593 1
+38593 38593 1
+1 38594 1
+38594 38594 1
+1 38595 1
+38595 38595 1
+1 38596 1
+38596 38596 1
+1 38597 1
+38597 38597 1
+1 38598 1
+38598 38598 1
+1 38599 1
+38599 38599 1
+1 38600 1
+38600 38600 1
+1 38601 1
+38601 38601 1
+1 38602 1
+38602 38602 1
+1 38603 1
+38603 38603 1
+1 38604 1
+38604 38604 1
+1 38605 1
+38605 38605 1
+1 38606 1
+38606 38606 1
+1 38607 1
+38607 38607 1
+1 38608 1
+38608 38608 1
+1 38609 1
+38609 38609 1
+1 38610 1
+38610 38610 1
+1 38611 1
+38611 38611 1
+1 38612 1
+38612 38612 1
+1 38613 1
+38613 38613 1
+1 38614 1
+38614 38614 1
+1 38615 1
+38615 38615 1
+1 38616 1
+38616 38616 1
+1 38617 1
+38617 38617 1
+1 38618 1
+38618 38618 1
+1 38619 1
+38619 38619 1
+1 38620 1
+38620 38620 1
+1 38621 1
+38621 38621 1
+1 38622 1
+38622 38622 1
+1 38623 1
+38623 38623 1
+1 38624 1
+38624 38624 1
+1 38625 1
+38625 38625 1
+1 38626 1
+38626 38626 1
+1 38627 1
+38627 38627 1
+1 38628 1
+38628 38628 1
+1 38629 1
+38629 38629 1
+1 38630 1
+38630 38630 1
+1 38631 1
+38631 38631 1
+1 38632 1
+38632 38632 1
+1 38633 1
+38633 38633 1
+1 38634 1
+38634 38634 1
+1 38635 1
+38635 38635 1
+1 38636 1
+38636 38636 1
+1 38637 1
+38637 38637 1
+1 38638 1
+38638 38638 1
+1 38639 1
+38639 38639 1
+1 38640 1
+38640 38640 1
+1 38641 1
+38641 38641 1
+1 38642 1
+38642 38642 1
+1 38643 1
+38643 38643 1
+1 38644 1
+38644 38644 1
+1 38645 1
+38645 38645 1
+1 38646 1
+38646 38646 1
+1 38647 1
+38647 38647 1
+1 38648 1
+38648 38648 1
+1 38649 1
+38649 38649 1
+1 38650 1
+38650 38650 1
+1 38651 1
+38651 38651 1
+1 38652 1
+38652 38652 1
+1 38653 1
+38653 38653 1
+1 38654 1
+38654 38654 1
+1 38655 1
+38655 38655 1
+1 38656 1
+38656 38656 1
+1 38657 1
+38657 38657 1
+1 38658 1
+38658 38658 1
+1 38659 1
+38659 38659 1
+1 38660 1
+38660 38660 1
+1 38661 1
+38661 38661 1
+1 38662 1
+38662 38662 1
+1 38663 1
+38663 38663 1
+1 38664 1
+38664 38664 1
+1 38665 1
+38665 38665 1
+1 38666 1
+38666 38666 1
+1 38667 1
+38667 38667 1
+1 38668 1
+38668 38668 1
+1 38669 1
+38669 38669 1
+1 38670 1
+38670 38670 1
+1 38671 1
+38671 38671 1
+1 38672 1
+38672 38672 1
+1 38673 1
+38673 38673 1
+1 38674 1
+38674 38674 1
+1 38675 1
+38675 38675 1
+1 38676 1
+38676 38676 1
+1 38677 1
+38677 38677 1
+1 38678 1
+38678 38678 1
+1 38679 1
+38679 38679 1
+1 38680 1
+38680 38680 1
+1 38681 1
+38681 38681 1
+1 38682 1
+38682 38682 1
+1 38683 1
+38683 38683 1
+1 38684 1
+38684 38684 1
+1 38685 1
+38685 38685 1
+1 38686 1
+38686 38686 1
+1 38687 1
+38687 38687 1
+1 38688 1
+38688 38688 1
+1 38689 1
+38689 38689 1
+1 38690 1
+38690 38690 1
+1 38691 1
+38691 38691 1
+1 38692 1
+38692 38692 1
+1 38693 1
+38693 38693 1
+1 38694 1
+38694 38694 1
+1 38695 1
+38695 38695 1
+1 38696 1
+38696 38696 1
+1 38697 1
+38697 38697 1
+1 38698 1
+38698 38698 1
+1 38699 1
+38699 38699 1
+1 38700 1
+38700 38700 1
+1 38701 1
+38701 38701 1
+1 38702 1
+38702 38702 1
+1 38703 1
+38703 38703 1
+1 38704 1
+38704 38704 1
+1 38705 1
+38705 38705 1
+1 38706 1
+38706 38706 1
+1 38707 1
+38707 38707 1
+1 38708 1
+38708 38708 1
+1 38709 1
+38709 38709 1
+1 38710 1
+38710 38710 1
+1 38711 1
+38711 38711 1
+1 38712 1
+38712 38712 1
+1 38713 1
+38713 38713 1
+1 38714 1
+38714 38714 1
+1 38715 1
+38715 38715 1
+1 38716 1
+38716 38716 1
+1 38717 1
+38717 38717 1
+1 38718 1
+38718 38718 1
+1 38719 1
+38719 38719 1
+1 38720 1
+38720 38720 1
+1 38721 1
+38721 38721 1
+1 38722 1
+38722 38722 1
+1 38723 1
+38723 38723 1
+1 38724 1
+38724 38724 1
+1 38725 1
+38725 38725 1
+1 38726 1
+38726 38726 1
+1 38727 1
+38727 38727 1
+1 38728 1
+38728 38728 1
+1 38729 1
+38729 38729 1
+1 38730 1
+38730 38730 1
+1 38731 1
+38731 38731 1
+1 38732 1
+38732 38732 1
+1 38733 1
+38733 38733 1
+1 38734 1
+38734 38734 1
+1 38735 1
+38735 38735 1
+1 38736 1
+38736 38736 1
+1 38737 1
+38737 38737 1
+1 38738 1
+38738 38738 1
+1 38739 1
+38739 38739 1
+1 38740 1
+38740 38740 1
+1 38741 1
+38741 38741 1
+1 38742 1
+38742 38742 1
+1 38743 1
+38743 38743 1
+1 38744 1
+38744 38744 1
+1 38745 1
+38745 38745 1
+1 38746 1
+38746 38746 1
+1 38747 1
+38747 38747 1
+1 38748 1
+38748 38748 1
+1 38749 1
+38749 38749 1
+1 38750 1
+38750 38750 1
+1 38751 1
+38751 38751 1
+1 38752 1
+38752 38752 1
+1 38753 1
+38753 38753 1
+1 38754 1
+38754 38754 1
+1 38755 1
+38755 38755 1
+1 38756 1
+38756 38756 1
+1 38757 1
+38757 38757 1
+1 38758 1
+38758 38758 1
+1 38759 1
+38759 38759 1
+1 38760 1
+38760 38760 1
+1 38761 1
+38761 38761 1
+1 38762 1
+38762 38762 1
+1 38763 1
+38763 38763 1
+1 38764 1
+38764 38764 1
+1 38765 1
+38765 38765 1
+1 38766 1
+38766 38766 1
+1 38767 1
+38767 38767 1
+1 38768 1
+38768 38768 1
+1 38769 1
+38769 38769 1
+1 38770 1
+38770 38770 1
+1 38771 1
+38771 38771 1
+1 38772 1
+38772 38772 1
+1 38773 1
+38773 38773 1
+1 38774 1
+38774 38774 1
+1 38775 1
+38775 38775 1
+1 38776 1
+38776 38776 1
+1 38777 1
+38777 38777 1
+1 38778 1
+38778 38778 1
+1 38779 1
+38779 38779 1
+1 38780 1
+38780 38780 1
+1 38781 1
+38781 38781 1
+1 38782 1
+38782 38782 1
+1 38783 1
+38783 38783 1
+1 38784 1
+38784 38784 1
+1 38785 1
+38785 38785 1
+1 38786 1
+38786 38786 1
+1 38787 1
+38787 38787 1
+1 38788 1
+38788 38788 1
+1 38789 1
+38789 38789 1
+1 38790 1
+38790 38790 1
+1 38791 1
+38791 38791 1
+1 38792 1
+38792 38792 1
+1 38793 1
+38793 38793 1
+1 38794 1
+38794 38794 1
+1 38795 1
+38795 38795 1
+1 38796 1
+38796 38796 1
+1 38797 1
+38797 38797 1
+1 38798 1
+38798 38798 1
+1 38799 1
+38799 38799 1
+1 38800 1
+38800 38800 1
+1 38801 1
+38801 38801 1
+1 38802 1
+38802 38802 1
+1 38803 1
+38803 38803 1
+1 38804 1
+38804 38804 1
+1 38805 1
+38805 38805 1
+1 38806 1
+38806 38806 1
+1 38807 1
+38807 38807 1
+1 38808 1
+38808 38808 1
+1 38809 1
+38809 38809 1
+1 38810 1
+38810 38810 1
+1 38811 1
+38811 38811 1
+1 38812 1
+38812 38812 1
+1 38813 1
+38813 38813 1
+1 38814 1
+38814 38814 1
+1 38815 1
+38815 38815 1
+1 38816 1
+38816 38816 1
+1 38817 1
+38817 38817 1
+1 38818 1
+38818 38818 1
+1 38819 1
+38819 38819 1
+1 38820 1
+38820 38820 1
+1 38821 1
+38821 38821 1
+1 38822 1
+38822 38822 1
+1 38823 1
+38823 38823 1
+1 38824 1
+38824 38824 1
+1 38825 1
+38825 38825 1
+1 38826 1
+38826 38826 1
+1 38827 1
+38827 38827 1
+1 38828 1
+38828 38828 1
+1 38829 1
+38829 38829 1
+1 38830 1
+38830 38830 1
+1 38831 1
+38831 38831 1
+1 38832 1
+38832 38832 1
+1 38833 1
+38833 38833 1
+1 38834 1
+38834 38834 1
+1 38835 1
+38835 38835 1
+1 38836 1
+38836 38836 1
+1 38837 1
+38837 38837 1
+1 38838 1
+38838 38838 1
+1 38839 1
+38839 38839 1
+1 38840 1
+38840 38840 1
+1 38841 1
+38841 38841 1
+1 38842 1
+38842 38842 1
+1 38843 1
+38843 38843 1
+1 38844 1
+38844 38844 1
+1 38845 1
+38845 38845 1
+1 38846 1
+38846 38846 1
+1 38847 1
+38847 38847 1
+1 38848 1
+38848 38848 1
+1 38849 1
+38849 38849 1
+1 38850 1
+38850 38850 1
+1 38851 1
+38851 38851 1
+1 38852 1
+38852 38852 1
+1 38853 1
+38853 38853 1
+1 38854 1
+38854 38854 1
+1 38855 1
+38855 38855 1
+1 38856 1
+38856 38856 1
+1 38857 1
+38857 38857 1
+1 38858 1
+38858 38858 1
+1 38859 1
+38859 38859 1
+1 38860 1
+38860 38860 1
+1 38861 1
+38861 38861 1
+1 38862 1
+38862 38862 1
+1 38863 1
+38863 38863 1
+1 38864 1
+38864 38864 1
+1 38865 1
+38865 38865 1
+1 38866 1
+38866 38866 1
+1 38867 1
+38867 38867 1
+1 38868 1
+38868 38868 1
+1 38869 1
+38869 38869 1
+1 38870 1
+38870 38870 1
+1 38871 1
+38871 38871 1
+1 38872 1
+38872 38872 1
+1 38873 1
+38873 38873 1
+1 38874 1
+38874 38874 1
+1 38875 1
+38875 38875 1
+1 38876 1
+38876 38876 1
+1 38877 1
+38877 38877 1
+1 38878 1
+38878 38878 1
+1 38879 1
+38879 38879 1
+1 38880 1
+38880 38880 1
+1 38881 1
+38881 38881 1
+1 38882 1
+38882 38882 1
+1 38883 1
+38883 38883 1
+1 38884 1
+38884 38884 1
+1 38885 1
+38885 38885 1
+1 38886 1
+38886 38886 1
+1 38887 1
+38887 38887 1
+1 38888 1
+38888 38888 1
+1 38889 1
+38889 38889 1
+1 38890 1
+38890 38890 1
+1 38891 1
+38891 38891 1
+1 38892 1
+38892 38892 1
+1 38893 1
+38893 38893 1
+1 38894 1
+38894 38894 1
+1 38895 1
+38895 38895 1
+1 38896 1
+38896 38896 1
+1 38897 1
+38897 38897 1
+1 38898 1
+38898 38898 1
+1 38899 1
+38899 38899 1
+1 38900 1
+38900 38900 1
+1 38901 1
+38901 38901 1
+1 38902 1
+38902 38902 1
+1 38903 1
+38903 38903 1
+1 38904 1
+38904 38904 1
+1 38905 1
+38905 38905 1
+1 38906 1
+38906 38906 1
+1 38907 1
+38907 38907 1
+1 38908 1
+38908 38908 1
+1 38909 1
+38909 38909 1
+1 38910 1
+38910 38910 1
+1 38911 1
+38911 38911 1
+1 38912 1
+38912 38912 1
+1 38913 1
+38913 38913 1
+1 38914 1
+38914 38914 1
+1 38915 1
+38915 38915 1
+1 38916 1
+38916 38916 1
+1 38917 1
+38917 38917 1
+1 38918 1
+38918 38918 1
+1 38919 1
+38919 38919 1
+1 38920 1
+38920 38920 1
+1 38921 1
+38921 38921 1
+1 38922 1
+38922 38922 1
+1 38923 1
+38923 38923 1
+1 38924 1
+38924 38924 1
+1 38925 1
+38925 38925 1
+1 38926 1
+38926 38926 1
+1 38927 1
+38927 38927 1
+1 38928 1
+38928 38928 1
+1 38929 1
+38929 38929 1
+1 38930 1
+38930 38930 1
+1 38931 1
+38931 38931 1
+1 38932 1
+38932 38932 1
+1 38933 1
+38933 38933 1
+1 38934 1
+38934 38934 1
+1 38935 1
+38935 38935 1
+1 38936 1
+38936 38936 1
+1 38937 1
+38937 38937 1
+1 38938 1
+38938 38938 1
+1 38939 1
+38939 38939 1
+1 38940 1
+38940 38940 1
+1 38941 1
+38941 38941 1
+1 38942 1
+38942 38942 1
+1 38943 1
+38943 38943 1
+1 38944 1
+38944 38944 1
+1 38945 1
+38945 38945 1
+1 38946 1
+38946 38946 1
+1 38947 1
+38947 38947 1
+1 38948 1
+38948 38948 1
+1 38949 1
+38949 38949 1
+1 38950 1
+38950 38950 1
+1 38951 1
+38951 38951 1
+1 38952 1
+38952 38952 1
+1 38953 1
+38953 38953 1
+1 38954 1
+38954 38954 1
+1 38955 1
+38955 38955 1
+1 38956 1
+38956 38956 1
+1 38957 1
+38957 38957 1
+1 38958 1
+38958 38958 1
+1 38959 1
+38959 38959 1
+1 38960 1
+38960 38960 1
+1 38961 1
+38961 38961 1
+1 38962 1
+38962 38962 1
+1 38963 1
+38963 38963 1
+1 38964 1
+38964 38964 1
+1 38965 1
+38965 38965 1
+1 38966 1
+38966 38966 1
+1 38967 1
+38967 38967 1
+1 38968 1
+38968 38968 1
+1 38969 1
+38969 38969 1
+1 38970 1
+38970 38970 1
+1 38971 1
+38971 38971 1
+1 38972 1
+38972 38972 1
+1 38973 1
+38973 38973 1
+1 38974 1
+38974 38974 1
+1 38975 1
+38975 38975 1
+1 38976 1
+38976 38976 1
+1 38977 1
+38977 38977 1
+1 38978 1
+38978 38978 1
+1 38979 1
+38979 38979 1
+1 38980 1
+38980 38980 1
+1 38981 1
+38981 38981 1
+1 38982 1
+38982 38982 1
+1 38983 1
+38983 38983 1
+1 38984 1
+38984 38984 1
+1 38985 1
+38985 38985 1
+1 38986 1
+38986 38986 1
+1 38987 1
+38987 38987 1
+1 38988 1
+38988 38988 1
+1 38989 1
+38989 38989 1
+1 38990 1
+38990 38990 1
+1 38991 1
+38991 38991 1
+1 38992 1
+38992 38992 1
+1 38993 1
+38993 38993 1
+1 38994 1
+38994 38994 1
+1 38995 1
+38995 38995 1
+1 38996 1
+38996 38996 1
+1 38997 1
+38997 38997 1
+1 38998 1
+38998 38998 1
+1 38999 1
+38999 38999 1
+1 39000 1
+39000 39000 1
+1 39001 1
+39001 39001 1
+1 39002 1
+39002 39002 1
+1 39003 1
+39003 39003 1
+1 39004 1
+39004 39004 1
+1 39005 1
+39005 39005 1
+1 39006 1
+39006 39006 1
+1 39007 1
+39007 39007 1
+1 39008 1
+39008 39008 1
+1 39009 1
+39009 39009 1
+1 39010 1
+39010 39010 1
+1 39011 1
+39011 39011 1
+1 39012 1
+39012 39012 1
+1 39013 1
+39013 39013 1
+1 39014 1
+39014 39014 1
+1 39015 1
+39015 39015 1
+1 39016 1
+39016 39016 1
+1 39017 1
+39017 39017 1
+1 39018 1
+39018 39018 1
+1 39019 1
+39019 39019 1
+1 39020 1
+39020 39020 1
+1 39021 1
+39021 39021 1
+1 39022 1
+39022 39022 1
+1 39023 1
+39023 39023 1
+1 39024 1
+39024 39024 1
+1 39025 1
+39025 39025 1
+1 39026 1
+39026 39026 1
+1 39027 1
+39027 39027 1
+1 39028 1
+39028 39028 1
+1 39029 1
+39029 39029 1
+1 39030 1
+39030 39030 1
+1 39031 1
+39031 39031 1
+1 39032 1
+39032 39032 1
+1 39033 1
+39033 39033 1
+1 39034 1
+39034 39034 1
+1 39035 1
+39035 39035 1
+1 39036 1
+39036 39036 1
+1 39037 1
+39037 39037 1
+1 39038 1
+39038 39038 1
+1 39039 1
+39039 39039 1
+1 39040 1
+39040 39040 1
+1 39041 1
+39041 39041 1
+1 39042 1
+39042 39042 1
+1 39043 1
+39043 39043 1
+1 39044 1
+39044 39044 1
+1 39045 1
+39045 39045 1
+1 39046 1
+39046 39046 1
+1 39047 1
+39047 39047 1
+1 39048 1
+39048 39048 1
+1 39049 1
+39049 39049 1
+1 39050 1
+39050 39050 1
+1 39051 1
+39051 39051 1
+1 39052 1
+39052 39052 1
+1 39053 1
+39053 39053 1
+1 39054 1
+39054 39054 1
+1 39055 1
+39055 39055 1
+1 39056 1
+39056 39056 1
+1 39057 1
+39057 39057 1
+1 39058 1
+39058 39058 1
+1 39059 1
+39059 39059 1
+1 39060 1
+39060 39060 1
+1 39061 1
+39061 39061 1
+1 39062 1
+39062 39062 1
+1 39063 1
+39063 39063 1
+1 39064 1
+39064 39064 1
+1 39065 1
+39065 39065 1
+1 39066 1
+39066 39066 1
+1 39067 1
+39067 39067 1
+1 39068 1
+39068 39068 1
+1 39069 1
+39069 39069 1
+1 39070 1
+39070 39070 1
+1 39071 1
+39071 39071 1
+1 39072 1
+39072 39072 1
+1 39073 1
+39073 39073 1
+1 39074 1
+39074 39074 1
+1 39075 1
+39075 39075 1
+1 39076 1
+39076 39076 1
+1 39077 1
+39077 39077 1
+1 39078 1
+39078 39078 1
+1 39079 1
+39079 39079 1
+1 39080 1
+39080 39080 1
+1 39081 1
+39081 39081 1
+1 39082 1
+39082 39082 1
+1 39083 1
+39083 39083 1
+1 39084 1
+39084 39084 1
+1 39085 1
+39085 39085 1
+1 39086 1
+39086 39086 1
+1 39087 1
+39087 39087 1
+1 39088 1
+39088 39088 1
+1 39089 1
+39089 39089 1
+1 39090 1
+39090 39090 1
+1 39091 1
+39091 39091 1
+1 39092 1
+39092 39092 1
+1 39093 1
+39093 39093 1
+1 39094 1
+39094 39094 1
+1 39095 1
+39095 39095 1
+1 39096 1
+39096 39096 1
+1 39097 1
+39097 39097 1
+1 39098 1
+39098 39098 1
+1 39099 1
+39099 39099 1
+1 39100 1
+39100 39100 1
+1 39101 1
+39101 39101 1
+1 39102 1
+39102 39102 1
+1 39103 1
+39103 39103 1
+1 39104 1
+39104 39104 1
+1 39105 1
+39105 39105 1
+1 39106 1
+39106 39106 1
+1 39107 1
+39107 39107 1
+1 39108 1
+39108 39108 1
+1 39109 1
+39109 39109 1
+1 39110 1
+39110 39110 1
+1 39111 1
+39111 39111 1
+1 39112 1
+39112 39112 1
+1 39113 1
+39113 39113 1
+1 39114 1
+39114 39114 1
+1 39115 1
+39115 39115 1
+1 39116 1
+39116 39116 1
+1 39117 1
+39117 39117 1
+1 39118 1
+39118 39118 1
+1 39119 1
+39119 39119 1
+1 39120 1
+39120 39120 1
+1 39121 1
+39121 39121 1
+1 39122 1
+39122 39122 1
+1 39123 1
+39123 39123 1
+1 39124 1
+39124 39124 1
+1 39125 1
+39125 39125 1
+1 39126 1
+39126 39126 1
+1 39127 1
+39127 39127 1
+1 39128 1
+39128 39128 1
+1 39129 1
+39129 39129 1
+1 39130 1
+39130 39130 1
+1 39131 1
+39131 39131 1
+1 39132 1
+39132 39132 1
+1 39133 1
+39133 39133 1
+1 39134 1
+39134 39134 1
+1 39135 1
+39135 39135 1
+1 39136 1
+39136 39136 1
+1 39137 1
+39137 39137 1
+1 39138 1
+39138 39138 1
+1 39139 1
+39139 39139 1
+1 39140 1
+39140 39140 1
+1 39141 1
+39141 39141 1
+1 39142 1
+39142 39142 1
+1 39143 1
+39143 39143 1
+1 39144 1
+39144 39144 1
+1 39145 1
+39145 39145 1
+1 39146 1
+39146 39146 1
+1 39147 1
+39147 39147 1
+1 39148 1
+39148 39148 1
+1 39149 1
+39149 39149 1
+1 39150 1
+39150 39150 1
+1 39151 1
+39151 39151 1
+1 39152 1
+39152 39152 1
+1 39153 1
+39153 39153 1
+1 39154 1
+39154 39154 1
+1 39155 1
+39155 39155 1
+1 39156 1
+39156 39156 1
+1 39157 1
+39157 39157 1
+1 39158 1
+39158 39158 1
+1 39159 1
+39159 39159 1
+1 39160 1
+39160 39160 1
+1 39161 1
+39161 39161 1
+1 39162 1
+39162 39162 1
+1 39163 1
+39163 39163 1
+1 39164 1
+39164 39164 1
+1 39165 1
+39165 39165 1
+1 39166 1
+39166 39166 1
+1 39167 1
+39167 39167 1
+1 39168 1
+39168 39168 1
+1 39169 1
+39169 39169 1
+1 39170 1
+39170 39170 1
+1 39171 1
+39171 39171 1
+1 39172 1
+39172 39172 1
+1 39173 1
+39173 39173 1
+1 39174 1
+39174 39174 1
+1 39175 1
+39175 39175 1
+1 39176 1
+39176 39176 1
+1 39177 1
+39177 39177 1
+1 39178 1
+39178 39178 1
+1 39179 1
+39179 39179 1
+1 39180 1
+39180 39180 1
+1 39181 1
+39181 39181 1
+1 39182 1
+39182 39182 1
+1 39183 1
+39183 39183 1
+1 39184 1
+39184 39184 1
+1 39185 1
+39185 39185 1
+1 39186 1
+39186 39186 1
+1 39187 1
+39187 39187 1
+1 39188 1
+39188 39188 1
+1 39189 1
+39189 39189 1
+1 39190 1
+39190 39190 1
+1 39191 1
+39191 39191 1
+1 39192 1
+39192 39192 1
+1 39193 1
+39193 39193 1
+1 39194 1
+39194 39194 1
+1 39195 1
+39195 39195 1
+1 39196 1
+39196 39196 1
+1 39197 1
+39197 39197 1
+1 39198 1
+39198 39198 1
+1 39199 1
+39199 39199 1
+1 39200 1
+39200 39200 1
+1 39201 1
+39201 39201 1
+1 39202 1
+39202 39202 1
+1 39203 1
+39203 39203 1
+1 39204 1
+39204 39204 1
+1 39205 1
+39205 39205 1
+1 39206 1
+39206 39206 1
+1 39207 1
+39207 39207 1
+1 39208 1
+39208 39208 1
+1 39209 1
+39209 39209 1
+1 39210 1
+39210 39210 1
+1 39211 1
+39211 39211 1
+1 39212 1
+39212 39212 1
+1 39213 1
+39213 39213 1
+1 39214 1
+39214 39214 1
+1 39215 1
+39215 39215 1
+1 39216 1
+39216 39216 1
+1 39217 1
+39217 39217 1
+1 39218 1
+39218 39218 1
+1 39219 1
+39219 39219 1
+1 39220 1
+39220 39220 1
+1 39221 1
+39221 39221 1
+1 39222 1
+39222 39222 1
+1 39223 1
+39223 39223 1
+1 39224 1
+39224 39224 1
+1 39225 1
+39225 39225 1
+1 39226 1
+39226 39226 1
+1 39227 1
+39227 39227 1
+1 39228 1
+39228 39228 1
+1 39229 1
+39229 39229 1
+1 39230 1
+39230 39230 1
+1 39231 1
+39231 39231 1
+1 39232 1
+39232 39232 1
+1 39233 1
+39233 39233 1
+1 39234 1
+39234 39234 1
+1 39235 1
+39235 39235 1
+1 39236 1
+39236 39236 1
+1 39237 1
+39237 39237 1
+1 39238 1
+39238 39238 1
+1 39239 1
+39239 39239 1
+1 39240 1
+39240 39240 1
+1 39241 1
+39241 39241 1
+1 39242 1
+39242 39242 1
+1 39243 1
+39243 39243 1
+1 39244 1
+39244 39244 1
+1 39245 1
+39245 39245 1
+1 39246 1
+39246 39246 1
+1 39247 1
+39247 39247 1
+1 39248 1
+39248 39248 1
+1 39249 1
+39249 39249 1
+1 39250 1
+39250 39250 1
+1 39251 1
+39251 39251 1
+1 39252 1
+39252 39252 1
+1 39253 1
+39253 39253 1
+1 39254 1
+39254 39254 1
+1 39255 1
+39255 39255 1
+1 39256 1
+39256 39256 1
+1 39257 1
+39257 39257 1
+1 39258 1
+39258 39258 1
+1 39259 1
+39259 39259 1
+1 39260 1
+39260 39260 1
+1 39261 1
+39261 39261 1
+1 39262 1
+39262 39262 1
+1 39263 1
+39263 39263 1
+1 39264 1
+39264 39264 1
+1 39265 1
+39265 39265 1
+1 39266 1
+39266 39266 1
+1 39267 1
+39267 39267 1
+1 39268 1
+39268 39268 1
+1 39269 1
+39269 39269 1
+1 39270 1
+39270 39270 1
+1 39271 1
+39271 39271 1
+1 39272 1
+39272 39272 1
+1 39273 1
+39273 39273 1
+1 39274 1
+39274 39274 1
+1 39275 1
+39275 39275 1
+1 39276 1
+39276 39276 1
+1 39277 1
+39277 39277 1
+1 39278 1
+39278 39278 1
+1 39279 1
+39279 39279 1
+1 39280 1
+39280 39280 1
+1 39281 1
+39281 39281 1
+1 39282 1
+39282 39282 1
+1 39283 1
+39283 39283 1
+1 39284 1
+39284 39284 1
+1 39285 1
+39285 39285 1
+1 39286 1
+39286 39286 1
+1 39287 1
+39287 39287 1
+1 39288 1
+39288 39288 1
+1 39289 1
+39289 39289 1
+1 39290 1
+39290 39290 1
+1 39291 1
+39291 39291 1
+1 39292 1
+39292 39292 1
+1 39293 1
+39293 39293 1
+1 39294 1
+39294 39294 1
+1 39295 1
+39295 39295 1
+1 39296 1
+39296 39296 1
+1 39297 1
+39297 39297 1
+1 39298 1
+39298 39298 1
+1 39299 1
+39299 39299 1
+1 39300 1
+39300 39300 1
+1 39301 1
+39301 39301 1
+1 39302 1
+39302 39302 1
+1 39303 1
+39303 39303 1
+1 39304 1
+39304 39304 1
+1 39305 1
+39305 39305 1
+1 39306 1
+39306 39306 1
+1 39307 1
+39307 39307 1
+1 39308 1
+39308 39308 1
+1 39309 1
+39309 39309 1
+1 39310 1
+39310 39310 1
+1 39311 1
+39311 39311 1
+1 39312 1
+39312 39312 1
+1 39313 1
+39313 39313 1
+1 39314 1
+39314 39314 1
+1 39315 1
+39315 39315 1
+1 39316 1
+39316 39316 1
+1 39317 1
+39317 39317 1
+1 39318 1
+39318 39318 1
+1 39319 1
+39319 39319 1
+1 39320 1
+39320 39320 1
+1 39321 1
+39321 39321 1
+1 39322 1
+39322 39322 1
+1 39323 1
+39323 39323 1
+1 39324 1
+39324 39324 1
+1 39325 1
+39325 39325 1
+1 39326 1
+39326 39326 1
+1 39327 1
+39327 39327 1
+1 39328 1
+39328 39328 1
+1 39329 1
+39329 39329 1
+1 39330 1
+39330 39330 1
+1 39331 1
+39331 39331 1
+1 39332 1
+39332 39332 1
+1 39333 1
+39333 39333 1
+1 39334 1
+39334 39334 1
+1 39335 1
+39335 39335 1
+1 39336 1
+39336 39336 1
+1 39337 1
+39337 39337 1
+1 39338 1
+39338 39338 1
+1 39339 1
+39339 39339 1
+1 39340 1
+39340 39340 1
+1 39341 1
+39341 39341 1
+1 39342 1
+39342 39342 1
+1 39343 1
+39343 39343 1
+1 39344 1
+39344 39344 1
+1 39345 1
+39345 39345 1
+1 39346 1
+39346 39346 1
+1 39347 1
+39347 39347 1
+1 39348 1
+39348 39348 1
+1 39349 1
+39349 39349 1
+1 39350 1
+39350 39350 1
+1 39351 1
+39351 39351 1
+1 39352 1
+39352 39352 1
+1 39353 1
+39353 39353 1
+1 39354 1
+39354 39354 1
+1 39355 1
+39355 39355 1
+1 39356 1
+39356 39356 1
+1 39357 1
+39357 39357 1
+1 39358 1
+39358 39358 1
+1 39359 1
+39359 39359 1
+1 39360 1
+39360 39360 1
+1 39361 1
+39361 39361 1
+1 39362 1
+39362 39362 1
+1 39363 1
+39363 39363 1
+1 39364 1
+39364 39364 1
+1 39365 1
+39365 39365 1
+1 39366 1
+39366 39366 1
+1 39367 1
+39367 39367 1
+1 39368 1
+39368 39368 1
+1 39369 1
+39369 39369 1
+1 39370 1
+39370 39370 1
+1 39371 1
+39371 39371 1
+1 39372 1
+39372 39372 1
+1 39373 1
+39373 39373 1
+1 39374 1
+39374 39374 1
+1 39375 1
+39375 39375 1
+1 39376 1
+39376 39376 1
+1 39377 1
+39377 39377 1
+1 39378 1
+39378 39378 1
+1 39379 1
+39379 39379 1
+1 39380 1
+39380 39380 1
+1 39381 1
+39381 39381 1
+1 39382 1
+39382 39382 1
+1 39383 1
+39383 39383 1
+1 39384 1
+39384 39384 1
+1 39385 1
+39385 39385 1
+1 39386 1
+39386 39386 1
+1 39387 1
+39387 39387 1
+1 39388 1
+39388 39388 1
+1 39389 1
+39389 39389 1
+1 39390 1
+39390 39390 1
+1 39391 1
+39391 39391 1
+1 39392 1
+39392 39392 1
+1 39393 1
+39393 39393 1
+1 39394 1
+39394 39394 1
+1 39395 1
+39395 39395 1
+1 39396 1
+39396 39396 1
+1 39397 1
+39397 39397 1
+1 39398 1
+39398 39398 1
+1 39399 1
+39399 39399 1
+1 39400 1
+39400 39400 1
+1 39401 1
+39401 39401 1
+1 39402 1
+39402 39402 1
+1 39403 1
+39403 39403 1
+1 39404 1
+39404 39404 1
+1 39405 1
+39405 39405 1
+1 39406 1
+39406 39406 1
+1 39407 1
+39407 39407 1
+1 39408 1
+39408 39408 1
+1 39409 1
+39409 39409 1
+1 39410 1
+39410 39410 1
+1 39411 1
+39411 39411 1
+1 39412 1
+39412 39412 1
+1 39413 1
+39413 39413 1
+1 39414 1
+39414 39414 1
+1 39415 1
+39415 39415 1
+1 39416 1
+39416 39416 1
+1 39417 1
+39417 39417 1
+1 39418 1
+39418 39418 1
+1 39419 1
+39419 39419 1
+1 39420 1
+39420 39420 1
+1 39421 1
+39421 39421 1
+1 39422 1
+39422 39422 1
+1 39423 1
+39423 39423 1
+1 39424 1
+39424 39424 1
+1 39425 1
+39425 39425 1
+1 39426 1
+39426 39426 1
+1 39427 1
+39427 39427 1
+1 39428 1
+39428 39428 1
+1 39429 1
+39429 39429 1
+1 39430 1
+39430 39430 1
+1 39431 1
+39431 39431 1
+1 39432 1
+39432 39432 1
+1 39433 1
+39433 39433 1
+1 39434 1
+39434 39434 1
+1 39435 1
+39435 39435 1
+1 39436 1
+39436 39436 1
+1 39437 1
+39437 39437 1
+1 39438 1
+39438 39438 1
+1 39439 1
+39439 39439 1
+1 39440 1
+39440 39440 1
+1 39441 1
+39441 39441 1
+1 39442 1
+39442 39442 1
+1 39443 1
+39443 39443 1
+1 39444 1
+39444 39444 1
+1 39445 1
+39445 39445 1
+1 39446 1
+39446 39446 1
+1 39447 1
+39447 39447 1
+1 39448 1
+39448 39448 1
+1 39449 1
+39449 39449 1
+1 39450 1
+39450 39450 1
+1 39451 1
+39451 39451 1
+1 39452 1
+39452 39452 1
+1 39453 1
+39453 39453 1
+1 39454 1
+39454 39454 1
+1 39455 1
+39455 39455 1
+1 39456 1
+39456 39456 1
+1 39457 1
+39457 39457 1
+1 39458 1
+39458 39458 1
+1 39459 1
+39459 39459 1
+1 39460 1
+39460 39460 1
+1 39461 1
+39461 39461 1
+1 39462 1
+39462 39462 1
+1 39463 1
+39463 39463 1
+1 39464 1
+39464 39464 1
+1 39465 1
+39465 39465 1
+1 39466 1
+39466 39466 1
+1 39467 1
+39467 39467 1
+1 39468 1
+39468 39468 1
+1 39469 1
+39469 39469 1
+1 39470 1
+39470 39470 1
+1 39471 1
+39471 39471 1
+1 39472 1
+39472 39472 1
+1 39473 1
+39473 39473 1
+1 39474 1
+39474 39474 1
+1 39475 1
+39475 39475 1
+1 39476 1
+39476 39476 1
+1 39477 1
+39477 39477 1
+1 39478 1
+39478 39478 1
+1 39479 1
+39479 39479 1
+1 39480 1
+39480 39480 1
+1 39481 1
+39481 39481 1
+1 39482 1
+39482 39482 1
+1 39483 1
+39483 39483 1
+1 39484 1
+39484 39484 1
+1 39485 1
+39485 39485 1
+1 39486 1
+39486 39486 1
+1 39487 1
+39487 39487 1
+1 39488 1
+39488 39488 1
+1 39489 1
+39489 39489 1
+1 39490 1
+39490 39490 1
+1 39491 1
+39491 39491 1
+1 39492 1
+39492 39492 1
+1 39493 1
+39493 39493 1
+1 39494 1
+39494 39494 1
+1 39495 1
+39495 39495 1
+1 39496 1
+39496 39496 1
+1 39497 1
+39497 39497 1
+1 39498 1
+39498 39498 1
+1 39499 1
+39499 39499 1
+1 39500 1
+39500 39500 1
+1 39501 1
+39501 39501 1
+1 39502 1
+39502 39502 1
+1 39503 1
+39503 39503 1
+1 39504 1
+39504 39504 1
+1 39505 1
+39505 39505 1
+1 39506 1
+39506 39506 1
+1 39507 1
+39507 39507 1
+1 39508 1
+39508 39508 1
+1 39509 1
+39509 39509 1
+1 39510 1
+39510 39510 1
+1 39511 1
+39511 39511 1
+1 39512 1
+39512 39512 1
+1 39513 1
+39513 39513 1
+1 39514 1
+39514 39514 1
+1 39515 1
+39515 39515 1
+1 39516 1
+39516 39516 1
+1 39517 1
+39517 39517 1
+1 39518 1
+39518 39518 1
+1 39519 1
+39519 39519 1
+1 39520 1
+39520 39520 1
+1 39521 1
+39521 39521 1
+1 39522 1
+39522 39522 1
+1 39523 1
+39523 39523 1
+1 39524 1
+39524 39524 1
+1 39525 1
+39525 39525 1
+1 39526 1
+39526 39526 1
+1 39527 1
+39527 39527 1
+1 39528 1
+39528 39528 1
+1 39529 1
+39529 39529 1
+1 39530 1
+39530 39530 1
+1 39531 1
+39531 39531 1
+1 39532 1
+39532 39532 1
+1 39533 1
+39533 39533 1
+1 39534 1
+39534 39534 1
+1 39535 1
+39535 39535 1
+1 39536 1
+39536 39536 1
+1 39537 1
+39537 39537 1
+1 39538 1
+39538 39538 1
+1 39539 1
+39539 39539 1
+1 39540 1
+39540 39540 1
+1 39541 1
+39541 39541 1
+1 39542 1
+39542 39542 1
+1 39543 1
+39543 39543 1
+1 39544 1
+39544 39544 1
+1 39545 1
+39545 39545 1
+1 39546 1
+39546 39546 1
+1 39547 1
+39547 39547 1
+1 39548 1
+39548 39548 1
+1 39549 1
+39549 39549 1
+1 39550 1
+39550 39550 1
+1 39551 1
+39551 39551 1
+1 39552 1
+39552 39552 1
+1 39553 1
+39553 39553 1
+1 39554 1
+39554 39554 1
+1 39555 1
+39555 39555 1
+1 39556 1
+39556 39556 1
+1 39557 1
+39557 39557 1
+1 39558 1
+39558 39558 1
+1 39559 1
+39559 39559 1
+1 39560 1
+39560 39560 1
+1 39561 1
+39561 39561 1
+1 39562 1
+39562 39562 1
+1 39563 1
+39563 39563 1
+1 39564 1
+39564 39564 1
+1 39565 1
+39565 39565 1
+1 39566 1
+39566 39566 1
+1 39567 1
+39567 39567 1
+1 39568 1
+39568 39568 1
+1 39569 1
+39569 39569 1
+1 39570 1
+39570 39570 1
+1 39571 1
+39571 39571 1
+1 39572 1
+39572 39572 1
+1 39573 1
+39573 39573 1
+1 39574 1
+39574 39574 1
+1 39575 1
+39575 39575 1
+1 39576 1
+39576 39576 1
+1 39577 1
+39577 39577 1
+1 39578 1
+39578 39578 1
+1 39579 1
+39579 39579 1
+1 39580 1
+39580 39580 1
+1 39581 1
+39581 39581 1
+1 39582 1
+39582 39582 1
+1 39583 1
+39583 39583 1
+1 39584 1
+39584 39584 1
+1 39585 1
+39585 39585 1
+1 39586 1
+39586 39586 1
+1 39587 1
+39587 39587 1
+1 39588 1
+39588 39588 1
+1 39589 1
+39589 39589 1
+1 39590 1
+39590 39590 1
+1 39591 1
+39591 39591 1
+1 39592 1
+39592 39592 1
+1 39593 1
+39593 39593 1
+1 39594 1
+39594 39594 1
+1 39595 1
+39595 39595 1
+1 39596 1
+39596 39596 1
+1 39597 1
+39597 39597 1
+1 39598 1
+39598 39598 1
+1 39599 1
+39599 39599 1
+1 39600 1
+39600 39600 1
+1 39601 1
+39601 39601 1
+1 39602 1
+39602 39602 1
+1 39603 1
+39603 39603 1
+1 39604 1
+39604 39604 1
+1 39605 1
+39605 39605 1
+1 39606 1
+39606 39606 1
+1 39607 1
+39607 39607 1
+1 39608 1
+39608 39608 1
+1 39609 1
+39609 39609 1
+1 39610 1
+39610 39610 1
+1 39611 1
+39611 39611 1
+1 39612 1
+39612 39612 1
+1 39613 1
+39613 39613 1
+1 39614 1
+39614 39614 1
+1 39615 1
+39615 39615 1
+1 39616 1
+39616 39616 1
+1 39617 1
+39617 39617 1
+1 39618 1
+39618 39618 1
+1 39619 1
+39619 39619 1
+1 39620 1
+39620 39620 1
+1 39621 1
+39621 39621 1
+1 39622 1
+39622 39622 1
+1 39623 1
+39623 39623 1
+1 39624 1
+39624 39624 1
+1 39625 1
+39625 39625 1
+1 39626 1
+39626 39626 1
+1 39627 1
+39627 39627 1
+1 39628 1
+39628 39628 1
+1 39629 1
+39629 39629 1
+1 39630 1
+39630 39630 1
+1 39631 1
+39631 39631 1
+1 39632 1
+39632 39632 1
+1 39633 1
+39633 39633 1
+1 39634 1
+39634 39634 1
+1 39635 1
+39635 39635 1
+1 39636 1
+39636 39636 1
+1 39637 1
+39637 39637 1
+1 39638 1
+39638 39638 1
+1 39639 1
+39639 39639 1
+1 39640 1
+39640 39640 1
+1 39641 1
+39641 39641 1
+1 39642 1
+39642 39642 1
+1 39643 1
+39643 39643 1
+1 39644 1
+39644 39644 1
+1 39645 1
+39645 39645 1
+1 39646 1
+39646 39646 1
+1 39647 1
+39647 39647 1
+1 39648 1
+39648 39648 1
+1 39649 1
+39649 39649 1
+1 39650 1
+39650 39650 1
+1 39651 1
+39651 39651 1
+1 39652 1
+39652 39652 1
+1 39653 1
+39653 39653 1
+1 39654 1
+39654 39654 1
+1 39655 1
+39655 39655 1
+1 39656 1
+39656 39656 1
+1 39657 1
+39657 39657 1
+1 39658 1
+39658 39658 1
+1 39659 1
+39659 39659 1
+1 39660 1
+39660 39660 1
+1 39661 1
+39661 39661 1
+1 39662 1
+39662 39662 1
+1 39663 1
+39663 39663 1
+1 39664 1
+39664 39664 1
+1 39665 1
+39665 39665 1
+1 39666 1
+39666 39666 1
+1 39667 1
+39667 39667 1
+1 39668 1
+39668 39668 1
+1 39669 1
+39669 39669 1
+1 39670 1
+39670 39670 1
+1 39671 1
+39671 39671 1
+1 39672 1
+39672 39672 1
+1 39673 1
+39673 39673 1
+1 39674 1
+39674 39674 1
+1 39675 1
+39675 39675 1
+1 39676 1
+39676 39676 1
+1 39677 1
+39677 39677 1
+1 39678 1
+39678 39678 1
+1 39679 1
+39679 39679 1
+1 39680 1
+39680 39680 1
+1 39681 1
+39681 39681 1
+1 39682 1
+39682 39682 1
+1 39683 1
+39683 39683 1
+1 39684 1
+39684 39684 1
+1 39685 1
+39685 39685 1
+1 39686 1
+39686 39686 1
+1 39687 1
+39687 39687 1
+1 39688 1
+39688 39688 1
+1 39689 1
+39689 39689 1
+1 39690 1
+39690 39690 1
+1 39691 1
+39691 39691 1
+1 39692 1
+39692 39692 1
+1 39693 1
+39693 39693 1
+1 39694 1
+39694 39694 1
+1 39695 1
+39695 39695 1
+1 39696 1
+39696 39696 1
+1 39697 1
+39697 39697 1
+1 39698 1
+39698 39698 1
+1 39699 1
+39699 39699 1
+1 39700 1
+39700 39700 1
+1 39701 1
+39701 39701 1
+1 39702 1
+39702 39702 1
+1 39703 1
+39703 39703 1
+1 39704 1
+39704 39704 1
+1 39705 1
+39705 39705 1
+1 39706 1
+39706 39706 1
+1 39707 1
+39707 39707 1
+1 39708 1
+39708 39708 1
+1 39709 1
+39709 39709 1
+1 39710 1
+39710 39710 1
+1 39711 1
+39711 39711 1
+1 39712 1
+39712 39712 1
+1 39713 1
+39713 39713 1
+1 39714 1
+39714 39714 1
+1 39715 1
+39715 39715 1
+1 39716 1
+39716 39716 1
+1 39717 1
+39717 39717 1
+1 39718 1
+39718 39718 1
+1 39719 1
+39719 39719 1
+1 39720 1
+39720 39720 1
+1 39721 1
+39721 39721 1
+1 39722 1
+39722 39722 1
+1 39723 1
+39723 39723 1
+1 39724 1
+39724 39724 1
+1 39725 1
+39725 39725 1
+1 39726 1
+39726 39726 1
+1 39727 1
+39727 39727 1
+1 39728 1
+39728 39728 1
+1 39729 1
+39729 39729 1
+1 39730 1
+39730 39730 1
+1 39731 1
+39731 39731 1
+1 39732 1
+39732 39732 1
+1 39733 1
+39733 39733 1
+1 39734 1
+39734 39734 1
+1 39735 1
+39735 39735 1
+1 39736 1
+39736 39736 1
+1 39737 1
+39737 39737 1
+1 39738 1
+39738 39738 1
+1 39739 1
+39739 39739 1
+1 39740 1
+39740 39740 1
+1 39741 1
+39741 39741 1
+1 39742 1
+39742 39742 1
+1 39743 1
+39743 39743 1
+1 39744 1
+39744 39744 1
+1 39745 1
+39745 39745 1
+1 39746 1
+39746 39746 1
+1 39747 1
+39747 39747 1
+1 39748 1
+39748 39748 1
+1 39749 1
+39749 39749 1
+1 39750 1
+39750 39750 1
+1 39751 1
+39751 39751 1
+1 39752 1
+39752 39752 1
+1 39753 1
+39753 39753 1
+1 39754 1
+39754 39754 1
+1 39755 1
+39755 39755 1
+1 39756 1
+39756 39756 1
+1 39757 1
+39757 39757 1
+1 39758 1
+39758 39758 1
+1 39759 1
+39759 39759 1
+1 39760 1
+39760 39760 1
+1 39761 1
+39761 39761 1
+1 39762 1
+39762 39762 1
+1 39763 1
+39763 39763 1
+1 39764 1
+39764 39764 1
+1 39765 1
+39765 39765 1
+1 39766 1
+39766 39766 1
+1 39767 1
+39767 39767 1
+1 39768 1
+39768 39768 1
+1 39769 1
+39769 39769 1
+1 39770 1
+39770 39770 1
+1 39771 1
+39771 39771 1
+1 39772 1
+39772 39772 1
+1 39773 1
+39773 39773 1
+1 39774 1
+39774 39774 1
+1 39775 1
+39775 39775 1
+1 39776 1
+39776 39776 1
+1 39777 1
+39777 39777 1
+1 39778 1
+39778 39778 1
+1 39779 1
+39779 39779 1
+1 39780 1
+39780 39780 1
+1 39781 1
+39781 39781 1
+1 39782 1
+39782 39782 1
+1 39783 1
+39783 39783 1
+1 39784 1
+39784 39784 1
+1 39785 1
+39785 39785 1
+1 39786 1
+39786 39786 1
+1 39787 1
+39787 39787 1
+1 39788 1
+39788 39788 1
+1 39789 1
+39789 39789 1
+1 39790 1
+39790 39790 1
+1 39791 1
+39791 39791 1
+1 39792 1
+39792 39792 1
+1 39793 1
+39793 39793 1
+1 39794 1
+39794 39794 1
+1 39795 1
+39795 39795 1
+1 39796 1
+39796 39796 1
+1 39797 1
+39797 39797 1
+1 39798 1
+39798 39798 1
+1 39799 1
+39799 39799 1
+1 39800 1
+39800 39800 1
+1 39801 1
+39801 39801 1
+1 39802 1
+39802 39802 1
+1 39803 1
+39803 39803 1
+1 39804 1
+39804 39804 1
+1 39805 1
+39805 39805 1
+1 39806 1
+39806 39806 1
+1 39807 1
+39807 39807 1
+1 39808 1
+39808 39808 1
+1 39809 1
+39809 39809 1
+1 39810 1
+39810 39810 1
+1 39811 1
+39811 39811 1
+1 39812 1
+39812 39812 1
+1 39813 1
+39813 39813 1
+1 39814 1
+39814 39814 1
+1 39815 1
+39815 39815 1
+1 39816 1
+39816 39816 1
+1 39817 1
+39817 39817 1
+1 39818 1
+39818 39818 1
+1 39819 1
+39819 39819 1
+1 39820 1
+39820 39820 1
+1 39821 1
+39821 39821 1
+1 39822 1
+39822 39822 1
+1 39823 1
+39823 39823 1
+1 39824 1
+39824 39824 1
+1 39825 1
+39825 39825 1
+1 39826 1
+39826 39826 1
+1 39827 1
+39827 39827 1
+1 39828 1
+39828 39828 1
+1 39829 1
+39829 39829 1
+1 39830 1
+39830 39830 1
+1 39831 1
+39831 39831 1
+1 39832 1
+39832 39832 1
+1 39833 1
+39833 39833 1
+1 39834 1
+39834 39834 1
+1 39835 1
+39835 39835 1
+1 39836 1
+39836 39836 1
+1 39837 1
+39837 39837 1
+1 39838 1
+39838 39838 1
+1 39839 1
+39839 39839 1
+1 39840 1
+39840 39840 1
+1 39841 1
+39841 39841 1
+1 39842 1
+39842 39842 1
+1 39843 1
+39843 39843 1
+1 39844 1
+39844 39844 1
+1 39845 1
+39845 39845 1
+1 39846 1
+39846 39846 1
+1 39847 1
+39847 39847 1
+1 39848 1
+39848 39848 1
+1 39849 1
+39849 39849 1
+1 39850 1
+39850 39850 1
+1 39851 1
+39851 39851 1
+1 39852 1
+39852 39852 1
+1 39853 1
+39853 39853 1
+1 39854 1
+39854 39854 1
+1 39855 1
+39855 39855 1
+1 39856 1
+39856 39856 1
+1 39857 1
+39857 39857 1
+1 39858 1
+39858 39858 1
+1 39859 1
+39859 39859 1
+1 39860 1
+39860 39860 1
+1 39861 1
+39861 39861 1
+1 39862 1
+39862 39862 1
+1 39863 1
+39863 39863 1
+1 39864 1
+39864 39864 1
+1 39865 1
+39865 39865 1
+1 39866 1
+39866 39866 1
+1 39867 1
+39867 39867 1
+1 39868 1
+39868 39868 1
+1 39869 1
+39869 39869 1
+1 39870 1
+39870 39870 1
+1 39871 1
+39871 39871 1
+1 39872 1
+39872 39872 1
+1 39873 1
+39873 39873 1
+1 39874 1
+39874 39874 1
+1 39875 1
+39875 39875 1
+1 39876 1
+39876 39876 1
+1 39877 1
+39877 39877 1
+1 39878 1
+39878 39878 1
+1 39879 1
+39879 39879 1
+1 39880 1
+39880 39880 1
+1 39881 1
+39881 39881 1
+1 39882 1
+39882 39882 1
+1 39883 1
+39883 39883 1
+1 39884 1
+39884 39884 1
+1 39885 1
+39885 39885 1
+1 39886 1
+39886 39886 1
+1 39887 1
+39887 39887 1
+1 39888 1
+39888 39888 1
+1 39889 1
+39889 39889 1
+1 39890 1
+39890 39890 1
+1 39891 1
+39891 39891 1
+1 39892 1
+39892 39892 1
+1 39893 1
+39893 39893 1
+1 39894 1
+39894 39894 1
+1 39895 1
+39895 39895 1
+1 39896 1
+39896 39896 1
+1 39897 1
+39897 39897 1
+1 39898 1
+39898 39898 1
+1 39899 1
+39899 39899 1
+1 39900 1
+39900 39900 1
+1 39901 1
+39901 39901 1
+1 39902 1
+39902 39902 1
+1 39903 1
+39903 39903 1
+1 39904 1
+39904 39904 1
+1 39905 1
+39905 39905 1
+1 39906 1
+39906 39906 1
+1 39907 1
+39907 39907 1
+1 39908 1
+39908 39908 1
+1 39909 1
+39909 39909 1
+1 39910 1
+39910 39910 1
+1 39911 1
+39911 39911 1
+1 39912 1
+39912 39912 1
+1 39913 1
+39913 39913 1
+1 39914 1
+39914 39914 1
+1 39915 1
+39915 39915 1
+1 39916 1
+39916 39916 1
+1 39917 1
+39917 39917 1
+1 39918 1
+39918 39918 1
+1 39919 1
+39919 39919 1
+1 39920 1
+39920 39920 1
+1 39921 1
+39921 39921 1
+1 39922 1
+39922 39922 1
+1 39923 1
+39923 39923 1
+1 39924 1
+39924 39924 1
+1 39925 1
+39925 39925 1
+1 39926 1
+39926 39926 1
+1 39927 1
+39927 39927 1
+1 39928 1
+39928 39928 1
+1 39929 1
+39929 39929 1
+1 39930 1
+39930 39930 1
+1 39931 1
+39931 39931 1
+1 39932 1
+39932 39932 1
+1 39933 1
+39933 39933 1
+1 39934 1
+39934 39934 1
+1 39935 1
+39935 39935 1
+1 39936 1
+39936 39936 1
+1 39937 1
+39937 39937 1
+1 39938 1
+39938 39938 1
+1 39939 1
+39939 39939 1
+1 39940 1
+39940 39940 1
+1 39941 1
+39941 39941 1
+1 39942 1
+39942 39942 1
+1 39943 1
+39943 39943 1
+1 39944 1
+39944 39944 1
+1 39945 1
+39945 39945 1
+1 39946 1
+39946 39946 1
+1 39947 1
+39947 39947 1
+1 39948 1
+39948 39948 1
+1 39949 1
+39949 39949 1
+1 39950 1
+39950 39950 1
+1 39951 1
+39951 39951 1
+1 39952 1
+39952 39952 1
+1 39953 1
+39953 39953 1
+1 39954 1
+39954 39954 1
+1 39955 1
+39955 39955 1
+1 39956 1
+39956 39956 1
+1 39957 1
+39957 39957 1
+1 39958 1
+39958 39958 1
+1 39959 1
+39959 39959 1
+1 39960 1
+39960 39960 1
+1 39961 1
+39961 39961 1
+1 39962 1
+39962 39962 1
+1 39963 1
+39963 39963 1
+1 39964 1
+39964 39964 1
+1 39965 1
+39965 39965 1
+1 39966 1
+39966 39966 1
+1 39967 1
+39967 39967 1
+1 39968 1
+39968 39968 1
+1 39969 1
+39969 39969 1
+1 39970 1
+39970 39970 1
+1 39971 1
+39971 39971 1
+1 39972 1
+39972 39972 1
+1 39973 1
+39973 39973 1
+1 39974 1
+39974 39974 1
+1 39975 1
+39975 39975 1
+1 39976 1
+39976 39976 1
+1 39977 1
+39977 39977 1
+1 39978 1
+39978 39978 1
+1 39979 1
+39979 39979 1
+1 39980 1
+39980 39980 1
+1 39981 1
+39981 39981 1
+1 39982 1
+39982 39982 1
+1 39983 1
+39983 39983 1
+1 39984 1
+39984 39984 1
+1 39985 1
+39985 39985 1
+1 39986 1
+39986 39986 1
+1 39987 1
+39987 39987 1
+1 39988 1
+39988 39988 1
+1 39989 1
+39989 39989 1
+1 39990 1
+39990 39990 1
+1 39991 1
+39991 39991 1
+1 39992 1
+39992 39992 1
+1 39993 1
+39993 39993 1
+1 39994 1
+39994 39994 1
+1 39995 1
+39995 39995 1
+1 39996 1
+39996 39996 1
+1 39997 1
+39997 39997 1
+1 39998 1
+39998 39998 1
+1 39999 1
+39999 39999 1
+1 40000 1
+40000 40000 1
+1 40001 1
+40001 40001 1
+1 40002 1
+40002 40002 1
+1 40003 1
+40003 40003 1
+1 40004 1
+40004 40004 1
+1 40005 1
+40005 40005 1
+1 40006 1
+40006 40006 1
+1 40007 1
+40007 40007 1
+1 40008 1
+40008 40008 1
+1 40009 1
+40009 40009 1
+1 40010 1
+40010 40010 1
+1 40011 1
+40011 40011 1
+1 40012 1
+40012 40012 1
+1 40013 1
+40013 40013 1
+1 40014 1
+40014 40014 1
+1 40015 1
+40015 40015 1
+1 40016 1
+40016 40016 1
+1 40017 1
+40017 40017 1
+1 40018 1
+40018 40018 1
+1 40019 1
+40019 40019 1
+1 40020 1
+40020 40020 1
+1 40021 1
+40021 40021 1
+1 40022 1
+40022 40022 1
+1 40023 1
+40023 40023 1
+1 40024 1
+40024 40024 1
+1 40025 1
+40025 40025 1
+1 40026 1
+40026 40026 1
+1 40027 1
+40027 40027 1
+1 40028 1
+40028 40028 1
+1 40029 1
+40029 40029 1
+1 40030 1
+40030 40030 1
+1 40031 1
+40031 40031 1
+1 40032 1
+40032 40032 1
+1 40033 1
+40033 40033 1
+1 40034 1
+40034 40034 1
+1 40035 1
+40035 40035 1
+1 40036 1
+40036 40036 1
+1 40037 1
+40037 40037 1
+1 40038 1
+40038 40038 1
+1 40039 1
+40039 40039 1
+1 40040 1
+40040 40040 1
+1 40041 1
+40041 40041 1
+1 40042 1
+40042 40042 1
+1 40043 1
+40043 40043 1
+1 40044 1
+40044 40044 1
+1 40045 1
+40045 40045 1
+1 40046 1
+40046 40046 1
+1 40047 1
+40047 40047 1
+1 40048 1
+40048 40048 1
+1 40049 1
+40049 40049 1
+1 40050 1
+40050 40050 1
+1 40051 1
+40051 40051 1
+1 40052 1
+40052 40052 1
+1 40053 1
+40053 40053 1
+1 40054 1
+40054 40054 1
+1 40055 1
+40055 40055 1
+1 40056 1
+40056 40056 1
+1 40057 1
+40057 40057 1
+1 40058 1
+40058 40058 1
+1 40059 1
+40059 40059 1
+1 40060 1
+40060 40060 1
+1 40061 1
+40061 40061 1
+1 40062 1
+40062 40062 1
+1 40063 1
+40063 40063 1
+1 40064 1
+40064 40064 1
+1 40065 1
+40065 40065 1
+1 40066 1
+40066 40066 1
+1 40067 1
+40067 40067 1
+1 40068 1
+40068 40068 1
+1 40069 1
+40069 40069 1
+1 40070 1
+40070 40070 1
+1 40071 1
+40071 40071 1
+1 40072 1
+40072 40072 1
+1 40073 1
+40073 40073 1
+1 40074 1
+40074 40074 1
+1 40075 1
+40075 40075 1
+1 40076 1
+40076 40076 1
+1 40077 1
+40077 40077 1
+1 40078 1
+40078 40078 1
+1 40079 1
+40079 40079 1
+1 40080 1
+40080 40080 1
+1 40081 1
+40081 40081 1
+1 40082 1
+40082 40082 1
+1 40083 1
+40083 40083 1
+1 40084 1
+40084 40084 1
+1 40085 1
+40085 40085 1
+1 40086 1
+40086 40086 1
+1 40087 1
+40087 40087 1
+1 40088 1
+40088 40088 1
+1 40089 1
+40089 40089 1
+1 40090 1
+40090 40090 1
+1 40091 1
+40091 40091 1
+1 40092 1
+40092 40092 1
+1 40093 1
+40093 40093 1
+1 40094 1
+40094 40094 1
+1 40095 1
+40095 40095 1
+1 40096 1
+40096 40096 1
+1 40097 1
+40097 40097 1
+1 40098 1
+40098 40098 1
+1 40099 1
+40099 40099 1
+1 40100 1
+40100 40100 1
+1 40101 1
+40101 40101 1
+1 40102 1
+40102 40102 1
+1 40103 1
+40103 40103 1
+1 40104 1
+40104 40104 1
+1 40105 1
+40105 40105 1
+1 40106 1
+40106 40106 1
+1 40107 1
+40107 40107 1
+1 40108 1
+40108 40108 1
+1 40109 1
+40109 40109 1
+1 40110 1
+40110 40110 1
+1 40111 1
+40111 40111 1
+1 40112 1
+40112 40112 1
+1 40113 1
+40113 40113 1
+1 40114 1
+40114 40114 1
+1 40115 1
+40115 40115 1
+1 40116 1
+40116 40116 1
+1 40117 1
+40117 40117 1
+1 40118 1
+40118 40118 1
+1 40119 1
+40119 40119 1
+1 40120 1
+40120 40120 1
+1 40121 1
+40121 40121 1
+1 40122 1
+40122 40122 1
+1 40123 1
+40123 40123 1
+1 40124 1
+40124 40124 1
+1 40125 1
+40125 40125 1
+1 40126 1
+40126 40126 1
+1 40127 1
+40127 40127 1
+1 40128 1
+40128 40128 1
+1 40129 1
+40129 40129 1
+1 40130 1
+40130 40130 1
+1 40131 1
+40131 40131 1
+1 40132 1
+40132 40132 1
+1 40133 1
+40133 40133 1
+1 40134 1
+40134 40134 1
+1 40135 1
+40135 40135 1
+1 40136 1
+40136 40136 1
+1 40137 1
+40137 40137 1
+1 40138 1
+40138 40138 1
+1 40139 1
+40139 40139 1
+1 40140 1
+40140 40140 1
+1 40141 1
+40141 40141 1
+1 40142 1
+40142 40142 1
+1 40143 1
+40143 40143 1
+1 40144 1
+40144 40144 1
+1 40145 1
+40145 40145 1
+1 40146 1
+40146 40146 1
+1 40147 1
+40147 40147 1
+1 40148 1
+40148 40148 1
+1 40149 1
+40149 40149 1
+1 40150 1
+40150 40150 1
+1 40151 1
+40151 40151 1
+1 40152 1
+40152 40152 1
+1 40153 1
+40153 40153 1
+1 40154 1
+40154 40154 1
+1 40155 1
+40155 40155 1
+1 40156 1
+40156 40156 1
+1 40157 1
+40157 40157 1
+1 40158 1
+40158 40158 1
+1 40159 1
+40159 40159 1
+1 40160 1
+40160 40160 1
+1 40161 1
+40161 40161 1
+1 40162 1
+40162 40162 1
+1 40163 1
+40163 40163 1
+1 40164 1
+40164 40164 1
+1 40165 1
+40165 40165 1
+1 40166 1
+40166 40166 1
+1 40167 1
+40167 40167 1
+1 40168 1
+40168 40168 1
+1 40169 1
+40169 40169 1
+1 40170 1
+40170 40170 1
+1 40171 1
+40171 40171 1
+1 40172 1
+40172 40172 1
+1 40173 1
+40173 40173 1
+1 40174 1
+40174 40174 1
+1 40175 1
+40175 40175 1
+1 40176 1
+40176 40176 1
+1 40177 1
+40177 40177 1
+1 40178 1
+40178 40178 1
+1 40179 1
+40179 40179 1
+1 40180 1
+40180 40180 1
+1 40181 1
+40181 40181 1
+1 40182 1
+40182 40182 1
+1 40183 1
+40183 40183 1
+1 40184 1
+40184 40184 1
+1 40185 1
+40185 40185 1
+1 40186 1
+40186 40186 1
+1 40187 1
+40187 40187 1
+1 40188 1
+40188 40188 1
+1 40189 1
+40189 40189 1
+1 40190 1
+40190 40190 1
+1 40191 1
+40191 40191 1
+1 40192 1
+40192 40192 1
+1 40193 1
+40193 40193 1
+1 40194 1
+40194 40194 1
+1 40195 1
+40195 40195 1
+1 40196 1
+40196 40196 1
+1 40197 1
+40197 40197 1
+1 40198 1
+40198 40198 1
+1 40199 1
+40199 40199 1
+1 40200 1
+40200 40200 1
+1 40201 1
+40201 40201 1
+1 40202 1
+40202 40202 1
+1 40203 1
+40203 40203 1
+1 40204 1
+40204 40204 1
+1 40205 1
+40205 40205 1
+1 40206 1
+40206 40206 1
+1 40207 1
+40207 40207 1
+1 40208 1
+40208 40208 1
+1 40209 1
+40209 40209 1
+1 40210 1
+40210 40210 1
+1 40211 1
+40211 40211 1
+1 40212 1
+40212 40212 1
+1 40213 1
+40213 40213 1
+1 40214 1
+40214 40214 1
+1 40215 1
+40215 40215 1
+1 40216 1
+40216 40216 1
+1 40217 1
+40217 40217 1
+1 40218 1
+40218 40218 1
+1 40219 1
+40219 40219 1
+1 40220 1
+40220 40220 1
+1 40221 1
+40221 40221 1
+1 40222 1
+40222 40222 1
+1 40223 1
+40223 40223 1
+1 40224 1
+40224 40224 1
+1 40225 1
+40225 40225 1
+1 40226 1
+40226 40226 1
+1 40227 1
+40227 40227 1
+1 40228 1
+40228 40228 1
+1 40229 1
+40229 40229 1
+1 40230 1
+40230 40230 1
+1 40231 1
+40231 40231 1
+1 40232 1
+40232 40232 1
+1 40233 1
+40233 40233 1
+1 40234 1
+40234 40234 1
+1 40235 1
+40235 40235 1
+1 40236 1
+40236 40236 1
+1 40237 1
+40237 40237 1
+1 40238 1
+40238 40238 1
+1 40239 1
+40239 40239 1
+1 40240 1
+40240 40240 1
+1 40241 1
+40241 40241 1
+1 40242 1
+40242 40242 1
+1 40243 1
+40243 40243 1
+1 40244 1
+40244 40244 1
+1 40245 1
+40245 40245 1
+1 40246 1
+40246 40246 1
+1 40247 1
+40247 40247 1
+1 40248 1
+40248 40248 1
+1 40249 1
+40249 40249 1
+1 40250 1
+40250 40250 1
+1 40251 1
+40251 40251 1
+1 40252 1
+40252 40252 1
+1 40253 1
+40253 40253 1
+1 40254 1
+40254 40254 1
+1 40255 1
+40255 40255 1
+1 40256 1
+40256 40256 1
+1 40257 1
+40257 40257 1
+1 40258 1
+40258 40258 1
+1 40259 1
+40259 40259 1
+1 40260 1
+40260 40260 1
+1 40261 1
+40261 40261 1
+1 40262 1
+40262 40262 1
+1 40263 1
+40263 40263 1
+1 40264 1
+40264 40264 1
+1 40265 1
+40265 40265 1
+1 40266 1
+40266 40266 1
+1 40267 1
+40267 40267 1
+1 40268 1
+40268 40268 1
+1 40269 1
+40269 40269 1
+1 40270 1
+40270 40270 1
+1 40271 1
+40271 40271 1
+1 40272 1
+40272 40272 1
+1 40273 1
+40273 40273 1
+1 40274 1
+40274 40274 1
+1 40275 1
+40275 40275 1
+1 40276 1
+40276 40276 1
+1 40277 1
+40277 40277 1
+1 40278 1
+40278 40278 1
+1 40279 1
+40279 40279 1
+1 40280 1
+40280 40280 1
+1 40281 1
+40281 40281 1
+1 40282 1
+40282 40282 1
+1 40283 1
+40283 40283 1
+1 40284 1
+40284 40284 1
+1 40285 1
+40285 40285 1
+1 40286 1
+40286 40286 1
+1 40287 1
+40287 40287 1
+1 40288 1
+40288 40288 1
+1 40289 1
+40289 40289 1
+1 40290 1
+40290 40290 1
+1 40291 1
+40291 40291 1
+1 40292 1
+40292 40292 1
+1 40293 1
+40293 40293 1
+1 40294 1
+40294 40294 1
+1 40295 1
+40295 40295 1
+1 40296 1
+40296 40296 1
+1 40297 1
+40297 40297 1
+1 40298 1
+40298 40298 1
+1 40299 1
+40299 40299 1
+1 40300 1
+40300 40300 1
+1 40301 1
+40301 40301 1
+1 40302 1
+40302 40302 1
+1 40303 1
+40303 40303 1
+1 40304 1
+40304 40304 1
+1 40305 1
+40305 40305 1
+1 40306 1
+40306 40306 1
+1 40307 1
+40307 40307 1
+1 40308 1
+40308 40308 1
+1 40309 1
+40309 40309 1
+1 40310 1
+40310 40310 1
+1 40311 1
+40311 40311 1
+1 40312 1
+40312 40312 1
+1 40313 1
+40313 40313 1
+1 40314 1
+40314 40314 1
+1 40315 1
+40315 40315 1
+1 40316 1
+40316 40316 1
+1 40317 1
+40317 40317 1
+1 40318 1
+40318 40318 1
+1 40319 1
+40319 40319 1
+1 40320 1
+40320 40320 1
+1 40321 1
+40321 40321 1
+1 40322 1
+40322 40322 1
+1 40323 1
+40323 40323 1
+1 40324 1
+40324 40324 1
+1 40325 1
+40325 40325 1
+1 40326 1
+40326 40326 1
+1 40327 1
+40327 40327 1
+1 40328 1
+40328 40328 1
+1 40329 1
+40329 40329 1
+1 40330 1
+40330 40330 1
+1 40331 1
+40331 40331 1
+1 40332 1
+40332 40332 1
+1 40333 1
+40333 40333 1
+1 40334 1
+40334 40334 1
+1 40335 1
+40335 40335 1
+1 40336 1
+40336 40336 1
+1 40337 1
+40337 40337 1
+1 40338 1
+40338 40338 1
+1 40339 1
+40339 40339 1
+1 40340 1
+40340 40340 1
+1 40341 1
+40341 40341 1
+1 40342 1
+40342 40342 1
+1 40343 1
+40343 40343 1
+1 40344 1
+40344 40344 1
+1 40345 1
+40345 40345 1
+1 40346 1
+40346 40346 1
+1 40347 1
+40347 40347 1
+1 40348 1
+40348 40348 1
+1 40349 1
+40349 40349 1
+1 40350 1
+40350 40350 1
+1 40351 1
+40351 40351 1
+1 40352 1
+40352 40352 1
+1 40353 1
+40353 40353 1
+1 40354 1
+40354 40354 1
+1 40355 1
+40355 40355 1
+1 40356 1
+40356 40356 1
+1 40357 1
+40357 40357 1
+1 40358 1
+40358 40358 1
+1 40359 1
+40359 40359 1
+1 40360 1
+40360 40360 1
+1 40361 1
+40361 40361 1
+1 40362 1
+40362 40362 1
+1 40363 1
+40363 40363 1
+1 40364 1
+40364 40364 1
+1 40365 1
+40365 40365 1
+1 40366 1
+40366 40366 1
+1 40367 1
+40367 40367 1
+1 40368 1
+40368 40368 1
+1 40369 1
+40369 40369 1
+1 40370 1
+40370 40370 1
+1 40371 1
+40371 40371 1
+1 40372 1
+40372 40372 1
+1 40373 1
+40373 40373 1
+1 40374 1
+40374 40374 1
+1 40375 1
+40375 40375 1
+1 40376 1
+40376 40376 1
+1 40377 1
+40377 40377 1
+1 40378 1
+40378 40378 1
+1 40379 1
+40379 40379 1
+1 40380 1
+40380 40380 1
+1 40381 1
+40381 40381 1
+1 40382 1
+40382 40382 1
+1 40383 1
+40383 40383 1
+1 40384 1
+40384 40384 1
+1 40385 1
+40385 40385 1
+1 40386 1
+40386 40386 1
+1 40387 1
+40387 40387 1
+1 40388 1
+40388 40388 1
+1 40389 1
+40389 40389 1
+1 40390 1
+40390 40390 1
+1 40391 1
+40391 40391 1
+1 40392 1
+40392 40392 1
+1 40393 1
+40393 40393 1
+1 40394 1
+40394 40394 1
+1 40395 1
+40395 40395 1
+1 40396 1
+40396 40396 1
+1 40397 1
+40397 40397 1
+1 40398 1
+40398 40398 1
+1 40399 1
+40399 40399 1
+1 40400 1
+40400 40400 1
+1 40401 1
+40401 40401 1
+1 40402 1
+40402 40402 1
+1 40403 1
+40403 40403 1
+1 40404 1
+40404 40404 1
+1 40405 1
+40405 40405 1
+1 40406 1
+40406 40406 1
+1 40407 1
+40407 40407 1
+1 40408 1
+40408 40408 1
+1 40409 1
+40409 40409 1
+1 40410 1
+40410 40410 1
+1 40411 1
+40411 40411 1
+1 40412 1
+40412 40412 1
+1 40413 1
+40413 40413 1
+1 40414 1
+40414 40414 1
+1 40415 1
+40415 40415 1
+1 40416 1
+40416 40416 1
+1 40417 1
+40417 40417 1
+1 40418 1
+40418 40418 1
+1 40419 1
+40419 40419 1
+1 40420 1
+40420 40420 1
+1 40421 1
+40421 40421 1
+1 40422 1
+40422 40422 1
+1 40423 1
+40423 40423 1
+1 40424 1
+40424 40424 1
+1 40425 1
+40425 40425 1
+1 40426 1
+40426 40426 1
+1 40427 1
+40427 40427 1
+1 40428 1
+40428 40428 1
+1 40429 1
+40429 40429 1
+1 40430 1
+40430 40430 1
+1 40431 1
+40431 40431 1
+1 40432 1
+40432 40432 1
+1 40433 1
+40433 40433 1
+1 40434 1
+40434 40434 1
+1 40435 1
+40435 40435 1
+1 40436 1
+40436 40436 1
+1 40437 1
+40437 40437 1
+1 40438 1
+40438 40438 1
+1 40439 1
+40439 40439 1
+1 40440 1
+40440 40440 1
+1 40441 1
+40441 40441 1
+1 40442 1
+40442 40442 1
+1 40443 1
+40443 40443 1
+1 40444 1
+40444 40444 1
+1 40445 1
+40445 40445 1
+1 40446 1
+40446 40446 1
+1 40447 1
+40447 40447 1
+1 40448 1
+40448 40448 1
+1 40449 1
+40449 40449 1
+1 40450 1
+40450 40450 1
+1 40451 1
+40451 40451 1
+1 40452 1
+40452 40452 1
+1 40453 1
+40453 40453 1
+1 40454 1
+40454 40454 1
+1 40455 1
+40455 40455 1
+1 40456 1
+40456 40456 1
+1 40457 1
+40457 40457 1
+1 40458 1
+40458 40458 1
+1 40459 1
+40459 40459 1
+1 40460 1
+40460 40460 1
+1 40461 1
+40461 40461 1
+1 40462 1
+40462 40462 1
+1 40463 1
+40463 40463 1
+1 40464 1
+40464 40464 1
+1 40465 1
+40465 40465 1
+1 40466 1
+40466 40466 1
+1 40467 1
+40467 40467 1
+1 40468 1
+40468 40468 1
+1 40469 1
+40469 40469 1
+1 40470 1
+40470 40470 1
+1 40471 1
+40471 40471 1
+1 40472 1
+40472 40472 1
+1 40473 1
+40473 40473 1
+1 40474 1
+40474 40474 1
+1 40475 1
+40475 40475 1
+1 40476 1
+40476 40476 1
+1 40477 1
+40477 40477 1
+1 40478 1
+40478 40478 1
+1 40479 1
+40479 40479 1
+1 40480 1
+40480 40480 1
+1 40481 1
+40481 40481 1
+1 40482 1
+40482 40482 1
+1 40483 1
+40483 40483 1
+1 40484 1
+40484 40484 1
+1 40485 1
+40485 40485 1
+1 40486 1
+40486 40486 1
+1 40487 1
+40487 40487 1
+1 40488 1
+40488 40488 1
+1 40489 1
+40489 40489 1
+1 40490 1
+40490 40490 1
+1 40491 1
+40491 40491 1
+1 40492 1
+40492 40492 1
+1 40493 1
+40493 40493 1
+1 40494 1
+40494 40494 1
+1 40495 1
+40495 40495 1
+1 40496 1
+40496 40496 1
+1 40497 1
+40497 40497 1
+1 40498 1
+40498 40498 1
+1 40499 1
+40499 40499 1
+1 40500 1
+40500 40500 1
+1 40501 1
+40501 40501 1
+1 40502 1
+40502 40502 1
+1 40503 1
+40503 40503 1
+1 40504 1
+40504 40504 1
+1 40505 1
+40505 40505 1
+1 40506 1
+40506 40506 1
+1 40507 1
+40507 40507 1
+1 40508 1
+40508 40508 1
+1 40509 1
+40509 40509 1
+1 40510 1
+40510 40510 1
+1 40511 1
+40511 40511 1
+1 40512 1
+40512 40512 1
+1 40513 1
+40513 40513 1
+1 40514 1
+40514 40514 1
+1 40515 1
+40515 40515 1
+1 40516 1
+40516 40516 1
+1 40517 1
+40517 40517 1
+1 40518 1
+40518 40518 1
+1 40519 1
+40519 40519 1
+1 40520 1
+40520 40520 1
+1 40521 1
+40521 40521 1
+1 40522 1
+40522 40522 1
+1 40523 1
+40523 40523 1
+1 40524 1
+40524 40524 1
+1 40525 1
+40525 40525 1
+1 40526 1
+40526 40526 1
+1 40527 1
+40527 40527 1
+1 40528 1
+40528 40528 1
+1 40529 1
+40529 40529 1
+1 40530 1
+40530 40530 1
+1 40531 1
+40531 40531 1
+1 40532 1
+40532 40532 1
+1 40533 1
+40533 40533 1
+1 40534 1
+40534 40534 1
+1 40535 1
+40535 40535 1
+1 40536 1
+40536 40536 1
+1 40537 1
+40537 40537 1
+1 40538 1
+40538 40538 1
+1 40539 1
+40539 40539 1
+1 40540 1
+40540 40540 1
+1 40541 1
+40541 40541 1
+1 40542 1
+40542 40542 1
+1 40543 1
+40543 40543 1
+1 40544 1
+40544 40544 1
+1 40545 1
+40545 40545 1
+1 40546 1
+40546 40546 1
+1 40547 1
+40547 40547 1
+1 40548 1
+40548 40548 1
+1 40549 1
+40549 40549 1
+1 40550 1
+40550 40550 1
+1 40551 1
+40551 40551 1
+1 40552 1
+40552 40552 1
+1 40553 1
+40553 40553 1
+1 40554 1
+40554 40554 1
+1 40555 1
+40555 40555 1
+1 40556 1
+40556 40556 1
+1 40557 1
+40557 40557 1
+1 40558 1
+40558 40558 1
+1 40559 1
+40559 40559 1
+1 40560 1
+40560 40560 1
+1 40561 1
+40561 40561 1
+1 40562 1
+40562 40562 1
+1 40563 1
+40563 40563 1
+1 40564 1
+40564 40564 1
+1 40565 1
+40565 40565 1
+1 40566 1
+40566 40566 1
+1 40567 1
+40567 40567 1
+1 40568 1
+40568 40568 1
+1 40569 1
+40569 40569 1
+1 40570 1
+40570 40570 1
+1 40571 1
+40571 40571 1
+1 40572 1
+40572 40572 1
+1 40573 1
+40573 40573 1
+1 40574 1
+40574 40574 1
+1 40575 1
+40575 40575 1
+1 40576 1
+40576 40576 1
+1 40577 1
+40577 40577 1
+1 40578 1
+40578 40578 1
+1 40579 1
+40579 40579 1
+1 40580 1
+40580 40580 1
+1 40581 1
+40581 40581 1
+1 40582 1
+40582 40582 1
+1 40583 1
+40583 40583 1
+1 40584 1
+40584 40584 1
+1 40585 1
+40585 40585 1
+1 40586 1
+40586 40586 1
+1 40587 1
+40587 40587 1
+1 40588 1
+40588 40588 1
+1 40589 1
+40589 40589 1
+1 40590 1
+40590 40590 1
+1 40591 1
+40591 40591 1
+1 40592 1
+40592 40592 1
+1 40593 1
+40593 40593 1
+1 40594 1
+40594 40594 1
+1 40595 1
+40595 40595 1
+1 40596 1
+40596 40596 1
+1 40597 1
+40597 40597 1
+1 40598 1
+40598 40598 1
+1 40599 1
+40599 40599 1
+1 40600 1
+40600 40600 1
+1 40601 1
+40601 40601 1
+1 40602 1
+40602 40602 1
+1 40603 1
+40603 40603 1
+1 40604 1
+40604 40604 1
+1 40605 1
+40605 40605 1
+1 40606 1
+40606 40606 1
+1 40607 1
+40607 40607 1
+1 40608 1
+40608 40608 1
+1 40609 1
+40609 40609 1
+1 40610 1
+40610 40610 1
+1 40611 1
+40611 40611 1
+1 40612 1
+40612 40612 1
+1 40613 1
+40613 40613 1
+1 40614 1
+40614 40614 1
+1 40615 1
+40615 40615 1
+1 40616 1
+40616 40616 1
+1 40617 1
+40617 40617 1
+1 40618 1
+40618 40618 1
+1 40619 1
+40619 40619 1
+1 40620 1
+40620 40620 1
+1 40621 1
+40621 40621 1
+1 40622 1
+40622 40622 1
+1 40623 1
+40623 40623 1
+1 40624 1
+40624 40624 1
+1 40625 1
+40625 40625 1
+1 40626 1
+40626 40626 1
+1 40627 1
+40627 40627 1
+1 40628 1
+40628 40628 1
+1 40629 1
+40629 40629 1
+1 40630 1
+40630 40630 1
+1 40631 1
+40631 40631 1
+1 40632 1
+40632 40632 1
+1 40633 1
+40633 40633 1
+1 40634 1
+40634 40634 1
+1 40635 1
+40635 40635 1
+1 40636 1
+40636 40636 1
+1 40637 1
+40637 40637 1
+1 40638 1
+40638 40638 1
+1 40639 1
+40639 40639 1
+1 40640 1
+40640 40640 1
+1 40641 1
+40641 40641 1
+1 40642 1
+40642 40642 1
+1 40643 1
+40643 40643 1
+1 40644 1
+40644 40644 1
+1 40645 1
+40645 40645 1
+1 40646 1
+40646 40646 1
+1 40647 1
+40647 40647 1
+1 40648 1
+40648 40648 1
+1 40649 1
+40649 40649 1
+1 40650 1
+40650 40650 1
+1 40651 1
+40651 40651 1
+1 40652 1
+40652 40652 1
+1 40653 1
+40653 40653 1
+1 40654 1
+40654 40654 1
+1 40655 1
+40655 40655 1
+1 40656 1
+40656 40656 1
+1 40657 1
+40657 40657 1
+1 40658 1
+40658 40658 1
+1 40659 1
+40659 40659 1
+1 40660 1
+40660 40660 1
+1 40661 1
+40661 40661 1
+1 40662 1
+40662 40662 1
+1 40663 1
+40663 40663 1
+1 40664 1
+40664 40664 1
+1 40665 1
+40665 40665 1
+1 40666 1
+40666 40666 1
+1 40667 1
+40667 40667 1
+1 40668 1
+40668 40668 1
+1 40669 1
+40669 40669 1
+1 40670 1
+40670 40670 1
+1 40671 1
+40671 40671 1
+1 40672 1
+40672 40672 1
+1 40673 1
+40673 40673 1
+1 40674 1
+40674 40674 1
+1 40675 1
+40675 40675 1
+1 40676 1
+40676 40676 1
+1 40677 1
+40677 40677 1
+1 40678 1
+40678 40678 1
+1 40679 1
+40679 40679 1
+1 40680 1
+40680 40680 1
+1 40681 1
+40681 40681 1
+1 40682 1
+40682 40682 1
+1 40683 1
+40683 40683 1
+1 40684 1
+40684 40684 1
+1 40685 1
+40685 40685 1
+1 40686 1
+40686 40686 1
+1 40687 1
+40687 40687 1
+1 40688 1
+40688 40688 1
+1 40689 1
+40689 40689 1
+1 40690 1
+40690 40690 1
+1 40691 1
+40691 40691 1
+1 40692 1
+40692 40692 1
+1 40693 1
+40693 40693 1
+1 40694 1
+40694 40694 1
+1 40695 1
+40695 40695 1
+1 40696 1
+40696 40696 1
+1 40697 1
+40697 40697 1
+1 40698 1
+40698 40698 1
+1 40699 1
+40699 40699 1
+1 40700 1
+40700 40700 1
+1 40701 1
+40701 40701 1
+1 40702 1
+40702 40702 1
+1 40703 1
+40703 40703 1
+1 40704 1
+40704 40704 1
+1 40705 1
+40705 40705 1
+1 40706 1
+40706 40706 1
+1 40707 1
+40707 40707 1
+1 40708 1
+40708 40708 1
+1 40709 1
+40709 40709 1
+1 40710 1
+40710 40710 1
+1 40711 1
+40711 40711 1
+1 40712 1
+40712 40712 1
+1 40713 1
+40713 40713 1
+1 40714 1
+40714 40714 1
+1 40715 1
+40715 40715 1
+1 40716 1
+40716 40716 1
+1 40717 1
+40717 40717 1
+1 40718 1
+40718 40718 1
+1 40719 1
+40719 40719 1
+1 40720 1
+40720 40720 1
+1 40721 1
+40721 40721 1
+1 40722 1
+40722 40722 1
+1 40723 1
+40723 40723 1
+1 40724 1
+40724 40724 1
+1 40725 1
+40725 40725 1
+1 40726 1
+40726 40726 1
+1 40727 1
+40727 40727 1
+1 40728 1
+40728 40728 1
+1 40729 1
+40729 40729 1
+1 40730 1
+40730 40730 1
+1 40731 1
+40731 40731 1
+1 40732 1
+40732 40732 1
+1 40733 1
+40733 40733 1
+1 40734 1
+40734 40734 1
+1 40735 1
+40735 40735 1
+1 40736 1
+40736 40736 1
+1 40737 1
+40737 40737 1
+1 40738 1
+40738 40738 1
+1 40739 1
+40739 40739 1
+1 40740 1
+40740 40740 1
+1 40741 1
+40741 40741 1
+1 40742 1
+40742 40742 1
+1 40743 1
+40743 40743 1
+1 40744 1
+40744 40744 1
+1 40745 1
+40745 40745 1
+1 40746 1
+40746 40746 1
+1 40747 1
+40747 40747 1
+1 40748 1
+40748 40748 1
+1 40749 1
+40749 40749 1
+1 40750 1
+40750 40750 1
+1 40751 1
+40751 40751 1
+1 40752 1
+40752 40752 1
+1 40753 1
+40753 40753 1
+1 40754 1
+40754 40754 1
+1 40755 1
+40755 40755 1
+1 40756 1
+40756 40756 1
+1 40757 1
+40757 40757 1
+1 40758 1
+40758 40758 1
+1 40759 1
+40759 40759 1
+1 40760 1
+40760 40760 1
+1 40761 1
+40761 40761 1
+1 40762 1
+40762 40762 1
+1 40763 1
+40763 40763 1
+1 40764 1
+40764 40764 1
+1 40765 1
+40765 40765 1
+1 40766 1
+40766 40766 1
+1 40767 1
+40767 40767 1
+1 40768 1
+40768 40768 1
+1 40769 1
+40769 40769 1
+1 40770 1
+40770 40770 1
+1 40771 1
+40771 40771 1
+1 40772 1
+40772 40772 1
+1 40773 1
+40773 40773 1
+1 40774 1
+40774 40774 1
+1 40775 1
+40775 40775 1
+1 40776 1
+40776 40776 1
+1 40777 1
+40777 40777 1
+1 40778 1
+40778 40778 1
+1 40779 1
+40779 40779 1
+1 40780 1
+40780 40780 1
+1 40781 1
+40781 40781 1
+1 40782 1
+40782 40782 1
+1 40783 1
+40783 40783 1
+1 40784 1
+40784 40784 1
+1 40785 1
+40785 40785 1
+1 40786 1
+40786 40786 1
+1 40787 1
+40787 40787 1
+1 40788 1
+40788 40788 1
+1 40789 1
+40789 40789 1
+1 40790 1
+40790 40790 1
+1 40791 1
+40791 40791 1
+1 40792 1
+40792 40792 1
+1 40793 1
+40793 40793 1
+1 40794 1
+40794 40794 1
+1 40795 1
+40795 40795 1
+1 40796 1
+40796 40796 1
+1 40797 1
+40797 40797 1
+1 40798 1
+40798 40798 1
+1 40799 1
+40799 40799 1
+1 40800 1
+40800 40800 1
+1 40801 1
+40801 40801 1
+1 40802 1
+40802 40802 1
+1 40803 1
+40803 40803 1
+1 40804 1
+40804 40804 1
+1 40805 1
+40805 40805 1
+1 40806 1
+40806 40806 1
+1 40807 1
+40807 40807 1
+1 40808 1
+40808 40808 1
+1 40809 1
+40809 40809 1
+1 40810 1
+40810 40810 1
+1 40811 1
+40811 40811 1
+1 40812 1
+40812 40812 1
+1 40813 1
+40813 40813 1
+1 40814 1
+40814 40814 1
+1 40815 1
+40815 40815 1
+1 40816 1
+40816 40816 1
+1 40817 1
+40817 40817 1
+1 40818 1
+40818 40818 1
+1 40819 1
+40819 40819 1
+1 40820 1
+40820 40820 1
+1 40821 1
+40821 40821 1
+1 40822 1
+40822 40822 1
+1 40823 1
+40823 40823 1
+1 40824 1
+40824 40824 1
+1 40825 1
+40825 40825 1
+1 40826 1
+40826 40826 1
+1 40827 1
+40827 40827 1
+1 40828 1
+40828 40828 1
+1 40829 1
+40829 40829 1
+1 40830 1
+40830 40830 1
+1 40831 1
+40831 40831 1
+1 40832 1
+40832 40832 1
+1 40833 1
+40833 40833 1
+1 40834 1
+40834 40834 1
+1 40835 1
+40835 40835 1
+1 40836 1
+40836 40836 1
+1 40837 1
+40837 40837 1
+1 40838 1
+40838 40838 1
+1 40839 1
+40839 40839 1
+1 40840 1
+40840 40840 1
+1 40841 1
+40841 40841 1
+1 40842 1
+40842 40842 1
+1 40843 1
+40843 40843 1
+1 40844 1
+40844 40844 1
+1 40845 1
+40845 40845 1
+1 40846 1
+40846 40846 1
+1 40847 1
+40847 40847 1
+1 40848 1
+40848 40848 1
+1 40849 1
+40849 40849 1
+1 40850 1
+40850 40850 1
+1 40851 1
+40851 40851 1
+1 40852 1
+40852 40852 1
+1 40853 1
+40853 40853 1
+1 40854 1
+40854 40854 1
+1 40855 1
+40855 40855 1
+1 40856 1
+40856 40856 1
+1 40857 1
+40857 40857 1
+1 40858 1
+40858 40858 1
+1 40859 1
+40859 40859 1
+1 40860 1
+40860 40860 1
+1 40861 1
+40861 40861 1
+1 40862 1
+40862 40862 1
+1 40863 1
+40863 40863 1
+1 40864 1
+40864 40864 1
+1 40865 1
+40865 40865 1
+1 40866 1
+40866 40866 1
+1 40867 1
+40867 40867 1
+1 40868 1
+40868 40868 1
+1 40869 1
+40869 40869 1
+1 40870 1
+40870 40870 1
+1 40871 1
+40871 40871 1
+1 40872 1
+40872 40872 1
+1 40873 1
+40873 40873 1
+1 40874 1
+40874 40874 1
+1 40875 1
+40875 40875 1
+1 40876 1
+40876 40876 1
+1 40877 1
+40877 40877 1
+1 40878 1
+40878 40878 1
+1 40879 1
+40879 40879 1
+1 40880 1
+40880 40880 1
+1 40881 1
+40881 40881 1
+1 40882 1
+40882 40882 1
+1 40883 1
+40883 40883 1
+1 40884 1
+40884 40884 1
+1 40885 1
+40885 40885 1
+1 40886 1
+40886 40886 1
+1 40887 1
+40887 40887 1
+1 40888 1
+40888 40888 1
+1 40889 1
+40889 40889 1
+1 40890 1
+40890 40890 1
+1 40891 1
+40891 40891 1
+1 40892 1
+40892 40892 1
+1 40893 1
+40893 40893 1
+1 40894 1
+40894 40894 1
+1 40895 1
+40895 40895 1
+1 40896 1
+40896 40896 1
+1 40897 1
+40897 40897 1
+1 40898 1
+40898 40898 1
+1 40899 1
+40899 40899 1
+1 40900 1
+40900 40900 1
+1 40901 1
+40901 40901 1
+1 40902 1
+40902 40902 1
+1 40903 1
+40903 40903 1
+1 40904 1
+40904 40904 1
+1 40905 1
+40905 40905 1
+1 40906 1
+40906 40906 1
+1 40907 1
+40907 40907 1
+1 40908 1
+40908 40908 1
+1 40909 1
+40909 40909 1
+1 40910 1
+40910 40910 1
+1 40911 1
+40911 40911 1
+1 40912 1
+40912 40912 1
+1 40913 1
+40913 40913 1
+1 40914 1
+40914 40914 1
+1 40915 1
+40915 40915 1
+1 40916 1
+40916 40916 1
+1 40917 1
+40917 40917 1
+1 40918 1
+40918 40918 1
+1 40919 1
+40919 40919 1
+1 40920 1
+40920 40920 1
+1 40921 1
+40921 40921 1
+1 40922 1
+40922 40922 1
+1 40923 1
+40923 40923 1
+1 40924 1
+40924 40924 1
+1 40925 1
+40925 40925 1
+1 40926 1
+40926 40926 1
+1 40927 1
+40927 40927 1
+1 40928 1
+40928 40928 1
+1 40929 1
+40929 40929 1
+1 40930 1
+40930 40930 1
+1 40931 1
+40931 40931 1
+1 40932 1
+40932 40932 1
+1 40933 1
+40933 40933 1
+1 40934 1
+40934 40934 1
+1 40935 1
+40935 40935 1
+1 40936 1
+40936 40936 1
+1 40937 1
+40937 40937 1
+1 40938 1
+40938 40938 1
+1 40939 1
+40939 40939 1
+1 40940 1
+40940 40940 1
+1 40941 1
+40941 40941 1
+1 40942 1
+40942 40942 1
+1 40943 1
+40943 40943 1
+1 40944 1
+40944 40944 1
+1 40945 1
+40945 40945 1
+1 40946 1
+40946 40946 1
+1 40947 1
+40947 40947 1
+1 40948 1
+40948 40948 1
+1 40949 1
+40949 40949 1
+1 40950 1
+40950 40950 1
+1 40951 1
+40951 40951 1
+1 40952 1
+40952 40952 1
+1 40953 1
+40953 40953 1
+1 40954 1
+40954 40954 1
+1 40955 1
+40955 40955 1
+1 40956 1
+40956 40956 1
+1 40957 1
+40957 40957 1
+1 40958 1
+40958 40958 1
+1 40959 1
+40959 40959 1
+1 40960 1
+40960 40960 1
+1 40961 1
+40961 40961 1
+1 40962 1
+40962 40962 1
+1 40963 1
+40963 40963 1
+1 40964 1
+40964 40964 1
+1 40965 1
+40965 40965 1
+1 40966 1
+40966 40966 1
+1 40967 1
+40967 40967 1
+1 40968 1
+40968 40968 1
+1 40969 1
+40969 40969 1
+1 40970 1
+40970 40970 1
+1 40971 1
+40971 40971 1
+1 40972 1
+40972 40972 1
+1 40973 1
+40973 40973 1
+1 40974 1
+40974 40974 1
+1 40975 1
+40975 40975 1
+1 40976 1
+40976 40976 1
+1 40977 1
+40977 40977 1
+1 40978 1
+40978 40978 1
+1 40979 1
+40979 40979 1
+1 40980 1
+40980 40980 1
+1 40981 1
+40981 40981 1
+1 40982 1
+40982 40982 1
+1 40983 1
+40983 40983 1
+1 40984 1
+40984 40984 1
+1 40985 1
+40985 40985 1
+1 40986 1
+40986 40986 1
+1 40987 1
+40987 40987 1
+1 40988 1
+40988 40988 1
+1 40989 1
+40989 40989 1
+1 40990 1
+40990 40990 1
+1 40991 1
+40991 40991 1
+1 40992 1
+40992 40992 1
+1 40993 1
+40993 40993 1
+1 40994 1
+40994 40994 1
+1 40995 1
+40995 40995 1
+1 40996 1
+40996 40996 1
+1 40997 1
+40997 40997 1
+1 40998 1
+40998 40998 1
+1 40999 1
+40999 40999 1
+1 41000 1
+41000 41000 1
+1 41001 1
+41001 41001 1
+1 41002 1
+41002 41002 1
+1 41003 1
+41003 41003 1
+1 41004 1
+41004 41004 1
+1 41005 1
+41005 41005 1
+1 41006 1
+41006 41006 1
+1 41007 1
+41007 41007 1
+1 41008 1
+41008 41008 1
+1 41009 1
+41009 41009 1
+1 41010 1
+41010 41010 1
+1 41011 1
+41011 41011 1
+1 41012 1
+41012 41012 1
+1 41013 1
+41013 41013 1
+1 41014 1
+41014 41014 1
+1 41015 1
+41015 41015 1
+1 41016 1
+41016 41016 1
+1 41017 1
+41017 41017 1
+1 41018 1
+41018 41018 1
+1 41019 1
+41019 41019 1
+1 41020 1
+41020 41020 1
+1 41021 1
+41021 41021 1
+1 41022 1
+41022 41022 1
+1 41023 1
+41023 41023 1
+1 41024 1
+41024 41024 1
+1 41025 1
+41025 41025 1
+1 41026 1
+41026 41026 1
+1 41027 1
+41027 41027 1
+1 41028 1
+41028 41028 1
+1 41029 1
+41029 41029 1
+1 41030 1
+41030 41030 1
+1 41031 1
+41031 41031 1
+1 41032 1
+41032 41032 1
+1 41033 1
+41033 41033 1
+1 41034 1
+41034 41034 1
+1 41035 1
+41035 41035 1
+1 41036 1
+41036 41036 1
+1 41037 1
+41037 41037 1
+1 41038 1
+41038 41038 1
+1 41039 1
+41039 41039 1
+1 41040 1
+41040 41040 1
+1 41041 1
+41041 41041 1
+1 41042 1
+41042 41042 1
+1 41043 1
+41043 41043 1
+1 41044 1
+41044 41044 1
+1 41045 1
+41045 41045 1
+1 41046 1
+41046 41046 1
+1 41047 1
+41047 41047 1
+1 41048 1
+41048 41048 1
+1 41049 1
+41049 41049 1
+1 41050 1
+41050 41050 1
+1 41051 1
+41051 41051 1
+1 41052 1
+41052 41052 1
+1 41053 1
+41053 41053 1
+1 41054 1
+41054 41054 1
+1 41055 1
+41055 41055 1
+1 41056 1
+41056 41056 1
+1 41057 1
+41057 41057 1
+1 41058 1
+41058 41058 1
+1 41059 1
+41059 41059 1
+1 41060 1
+41060 41060 1
+1 41061 1
+41061 41061 1
+1 41062 1
+41062 41062 1
+1 41063 1
+41063 41063 1
+1 41064 1
+41064 41064 1
+1 41065 1
+41065 41065 1
+1 41066 1
+41066 41066 1
+1 41067 1
+41067 41067 1
+1 41068 1
+41068 41068 1
+1 41069 1
+41069 41069 1
+1 41070 1
+41070 41070 1
+1 41071 1
+41071 41071 1
+1 41072 1
+41072 41072 1
+1 41073 1
+41073 41073 1
+1 41074 1
+41074 41074 1
+1 41075 1
+41075 41075 1
+1 41076 1
+41076 41076 1
+1 41077 1
+41077 41077 1
+1 41078 1
+41078 41078 1
+1 41079 1
+41079 41079 1
+1 41080 1
+41080 41080 1
+1 41081 1
+41081 41081 1
+1 41082 1
+41082 41082 1
+1 41083 1
+41083 41083 1
+1 41084 1
+41084 41084 1
+1 41085 1
+41085 41085 1
+1 41086 1
+41086 41086 1
+1 41087 1
+41087 41087 1
+1 41088 1
+41088 41088 1
+1 41089 1
+41089 41089 1
+1 41090 1
+41090 41090 1
+1 41091 1
+41091 41091 1
+1 41092 1
+41092 41092 1
+1 41093 1
+41093 41093 1
+1 41094 1
+41094 41094 1
+1 41095 1
+41095 41095 1
+1 41096 1
+41096 41096 1
+1 41097 1
+41097 41097 1
+1 41098 1
+41098 41098 1
+1 41099 1
+41099 41099 1
+1 41100 1
+41100 41100 1
+1 41101 1
+41101 41101 1
+1 41102 1
+41102 41102 1
+1 41103 1
+41103 41103 1
+1 41104 1
+41104 41104 1
+1 41105 1
+41105 41105 1
+1 41106 1
+41106 41106 1
+1 41107 1
+41107 41107 1
+1 41108 1
+41108 41108 1
+1 41109 1
+41109 41109 1
+1 41110 1
+41110 41110 1
+1 41111 1
+41111 41111 1
+1 41112 1
+41112 41112 1
+1 41113 1
+41113 41113 1
+1 41114 1
+41114 41114 1
+1 41115 1
+41115 41115 1
+1 41116 1
+41116 41116 1
+1 41117 1
+41117 41117 1
+1 41118 1
+41118 41118 1
+1 41119 1
+41119 41119 1
+1 41120 1
+41120 41120 1
+1 41121 1
+41121 41121 1
+1 41122 1
+41122 41122 1
+1 41123 1
+41123 41123 1
+1 41124 1
+41124 41124 1
+1 41125 1
+41125 41125 1
+1 41126 1
+41126 41126 1
+1 41127 1
+41127 41127 1
+1 41128 1
+41128 41128 1
+1 41129 1
+41129 41129 1
+1 41130 1
+41130 41130 1
+1 41131 1
+41131 41131 1
+1 41132 1
+41132 41132 1
+1 41133 1
+41133 41133 1
+1 41134 1
+41134 41134 1
+1 41135 1
+41135 41135 1
+1 41136 1
+41136 41136 1
+1 41137 1
+41137 41137 1
+1 41138 1
+41138 41138 1
+1 41139 1
+41139 41139 1
+1 41140 1
+41140 41140 1
+1 41141 1
+41141 41141 1
+1 41142 1
+41142 41142 1
+1 41143 1
+41143 41143 1
+1 41144 1
+41144 41144 1
+1 41145 1
+41145 41145 1
+1 41146 1
+41146 41146 1
+1 41147 1
+41147 41147 1
+1 41148 1
+41148 41148 1
+1 41149 1
+41149 41149 1
+1 41150 1
+41150 41150 1
+1 41151 1
+41151 41151 1
+1 41152 1
+41152 41152 1
+1 41153 1
+41153 41153 1
+1 41154 1
+41154 41154 1
+1 41155 1
+41155 41155 1
+1 41156 1
+41156 41156 1
+1 41157 1
+41157 41157 1
+1 41158 1
+41158 41158 1
+1 41159 1
+41159 41159 1
+1 41160 1
+41160 41160 1
+1 41161 1
+41161 41161 1
+1 41162 1
+41162 41162 1
+1 41163 1
+41163 41163 1
+1 41164 1
+41164 41164 1
+1 41165 1
+41165 41165 1
+1 41166 1
+41166 41166 1
+1 41167 1
+41167 41167 1
+1 41168 1
+41168 41168 1
+1 41169 1
+41169 41169 1
+1 41170 1
+41170 41170 1
+1 41171 1
+41171 41171 1
+1 41172 1
+41172 41172 1
+1 41173 1
+41173 41173 1
+1 41174 1
+41174 41174 1
+1 41175 1
+41175 41175 1
+1 41176 1
+41176 41176 1
+1 41177 1
+41177 41177 1
+1 41178 1
+41178 41178 1
+1 41179 1
+41179 41179 1
+1 41180 1
+41180 41180 1
+1 41181 1
+41181 41181 1
+1 41182 1
+41182 41182 1
+1 41183 1
+41183 41183 1
+1 41184 1
+41184 41184 1
+1 41185 1
+41185 41185 1
+1 41186 1
+41186 41186 1
+1 41187 1
+41187 41187 1
+1 41188 1
+41188 41188 1
+1 41189 1
+41189 41189 1
+1 41190 1
+41190 41190 1
+1 41191 1
+41191 41191 1
+1 41192 1
+41192 41192 1
+1 41193 1
+41193 41193 1
+1 41194 1
+41194 41194 1
+1 41195 1
+41195 41195 1
+1 41196 1
+41196 41196 1
+1 41197 1
+41197 41197 1
+1 41198 1
+41198 41198 1
+1 41199 1
+41199 41199 1
+1 41200 1
+41200 41200 1
+1 41201 1
+41201 41201 1
+1 41202 1
+41202 41202 1
+1 41203 1
+41203 41203 1
+1 41204 1
+41204 41204 1
+1 41205 1
+41205 41205 1
+1 41206 1
+41206 41206 1
+1 41207 1
+41207 41207 1
+1 41208 1
+41208 41208 1
+1 41209 1
+41209 41209 1
+1 41210 1
+41210 41210 1
+1 41211 1
+41211 41211 1
+1 41212 1
+41212 41212 1
+1 41213 1
+41213 41213 1
+1 41214 1
+41214 41214 1
+1 41215 1
+41215 41215 1
+1 41216 1
+41216 41216 1
+1 41217 1
+41217 41217 1
+1 41218 1
+41218 41218 1
+1 41219 1
+41219 41219 1
+1 41220 1
+41220 41220 1
+1 41221 1
+41221 41221 1
+1 41222 1
+41222 41222 1
+1 41223 1
+41223 41223 1
+1 41224 1
+41224 41224 1
+1 41225 1
+41225 41225 1
+1 41226 1
+41226 41226 1
+1 41227 1
+41227 41227 1
+1 41228 1
+41228 41228 1
+1 41229 1
+41229 41229 1
+1 41230 1
+41230 41230 1
+1 41231 1
+41231 41231 1
+1 41232 1
+41232 41232 1
+1 41233 1
+41233 41233 1
+1 41234 1
+41234 41234 1
+1 41235 1
+41235 41235 1
+1 41236 1
+41236 41236 1
+1 41237 1
+41237 41237 1
+1 41238 1
+41238 41238 1
+1 41239 1
+41239 41239 1
+1 41240 1
+41240 41240 1
+1 41241 1
+41241 41241 1
+1 41242 1
+41242 41242 1
+1 41243 1
+41243 41243 1
+1 41244 1
+41244 41244 1
+1 41245 1
+41245 41245 1
+1 41246 1
+41246 41246 1
+1 41247 1
+41247 41247 1
+1 41248 1
+41248 41248 1
+1 41249 1
+41249 41249 1
+1 41250 1
+41250 41250 1
+1 41251 1
+41251 41251 1
+1 41252 1
+41252 41252 1
+1 41253 1
+41253 41253 1
+1 41254 1
+41254 41254 1
+1 41255 1
+41255 41255 1
+1 41256 1
+41256 41256 1
+1 41257 1
+41257 41257 1
+1 41258 1
+41258 41258 1
+1 41259 1
+41259 41259 1
+1 41260 1
+41260 41260 1
+1 41261 1
+41261 41261 1
+1 41262 1
+41262 41262 1
+1 41263 1
+41263 41263 1
+1 41264 1
+41264 41264 1
+1 41265 1
+41265 41265 1
+1 41266 1
+41266 41266 1
+1 41267 1
+41267 41267 1
+1 41268 1
+41268 41268 1
+1 41269 1
+41269 41269 1
+1 41270 1
+41270 41270 1
+1 41271 1
+41271 41271 1
+1 41272 1
+41272 41272 1
+1 41273 1
+41273 41273 1
+1 41274 1
+41274 41274 1
+1 41275 1
+41275 41275 1
+1 41276 1
+41276 41276 1
+1 41277 1
+41277 41277 1
+1 41278 1
+41278 41278 1
+1 41279 1
+41279 41279 1
+1 41280 1
+41280 41280 1
+1 41281 1
+41281 41281 1
+1 41282 1
+41282 41282 1
+1 41283 1
+41283 41283 1
+1 41284 1
+41284 41284 1
+1 41285 1
+41285 41285 1
+1 41286 1
+41286 41286 1
+1 41287 1
+41287 41287 1
+1 41288 1
+41288 41288 1
+1 41289 1
+41289 41289 1
+1 41290 1
+41290 41290 1
+1 41291 1
+41291 41291 1
+1 41292 1
+41292 41292 1
+1 41293 1
+41293 41293 1
+1 41294 1
+41294 41294 1
+1 41295 1
+41295 41295 1
+1 41296 1
+41296 41296 1
+1 41297 1
+41297 41297 1
+1 41298 1
+41298 41298 1
+1 41299 1
+41299 41299 1
+1 41300 1
+41300 41300 1
+1 41301 1
+41301 41301 1
+1 41302 1
+41302 41302 1
+1 41303 1
+41303 41303 1
+1 41304 1
+41304 41304 1
+1 41305 1
+41305 41305 1
+1 41306 1
+41306 41306 1
+1 41307 1
+41307 41307 1
+1 41308 1
+41308 41308 1
+1 41309 1
+41309 41309 1
+1 41310 1
+41310 41310 1
+1 41311 1
+41311 41311 1
+1 41312 1
+41312 41312 1
+1 41313 1
+41313 41313 1
+1 41314 1
+41314 41314 1
+1 41315 1
+41315 41315 1
+1 41316 1
+41316 41316 1
+1 41317 1
+41317 41317 1
+1 41318 1
+41318 41318 1
+1 41319 1
+41319 41319 1
+1 41320 1
+41320 41320 1
+1 41321 1
+41321 41321 1
+1 41322 1
+41322 41322 1
+1 41323 1
+41323 41323 1
+1 41324 1
+41324 41324 1
+1 41325 1
+41325 41325 1
+1 41326 1
+41326 41326 1
+1 41327 1
+41327 41327 1
+1 41328 1
+41328 41328 1
+1 41329 1
+41329 41329 1
+1 41330 1
+41330 41330 1
+1 41331 1
+41331 41331 1
+1 41332 1
+41332 41332 1
+1 41333 1
+41333 41333 1
+1 41334 1
+41334 41334 1
+1 41335 1
+41335 41335 1
+1 41336 1
+41336 41336 1
+1 41337 1
+41337 41337 1
+1 41338 1
+41338 41338 1
+1 41339 1
+41339 41339 1
+1 41340 1
+41340 41340 1
+1 41341 1
+41341 41341 1
+1 41342 1
+41342 41342 1
+1 41343 1
+41343 41343 1
+1 41344 1
+41344 41344 1
+1 41345 1
+41345 41345 1
+1 41346 1
+41346 41346 1
+1 41347 1
+41347 41347 1
+1 41348 1
+41348 41348 1
+1 41349 1
+41349 41349 1
+1 41350 1
+41350 41350 1
+1 41351 1
+41351 41351 1
+1 41352 1
+41352 41352 1
+1 41353 1
+41353 41353 1
+1 41354 1
+41354 41354 1
+1 41355 1
+41355 41355 1
+1 41356 1
+41356 41356 1
+1 41357 1
+41357 41357 1
+1 41358 1
+41358 41358 1
+1 41359 1
+41359 41359 1
+1 41360 1
+41360 41360 1
+1 41361 1
+41361 41361 1
+1 41362 1
+41362 41362 1
+1 41363 1
+41363 41363 1
+1 41364 1
+41364 41364 1
+1 41365 1
+41365 41365 1
+1 41366 1
+41366 41366 1
+1 41367 1
+41367 41367 1
+1 41368 1
+41368 41368 1
+1 41369 1
+41369 41369 1
+1 41370 1
+41370 41370 1
+1 41371 1
+41371 41371 1
+1 41372 1
+41372 41372 1
+1 41373 1
+41373 41373 1
+1 41374 1
+41374 41374 1
+1 41375 1
+41375 41375 1
+1 41376 1
+41376 41376 1
+1 41377 1
+41377 41377 1
+1 41378 1
+41378 41378 1
+1 41379 1
+41379 41379 1
+1 41380 1
+41380 41380 1
+1 41381 1
+41381 41381 1
+1 41382 1
+41382 41382 1
+1 41383 1
+41383 41383 1
+1 41384 1
+41384 41384 1
+1 41385 1
+41385 41385 1
+1 41386 1
+41386 41386 1
+1 41387 1
+41387 41387 1
+1 41388 1
+41388 41388 1
+1 41389 1
+41389 41389 1
+1 41390 1
+41390 41390 1
+1 41391 1
+41391 41391 1
+1 41392 1
+41392 41392 1
+1 41393 1
+41393 41393 1
+1 41394 1
+41394 41394 1
+1 41395 1
+41395 41395 1
+1 41396 1
+41396 41396 1
+1 41397 1
+41397 41397 1
+1 41398 1
+41398 41398 1
+1 41399 1
+41399 41399 1
+1 41400 1
+41400 41400 1
+1 41401 1
+41401 41401 1
+1 41402 1
+41402 41402 1
+1 41403 1
+41403 41403 1
+1 41404 1
+41404 41404 1
+1 41405 1
+41405 41405 1
+1 41406 1
+41406 41406 1
+1 41407 1
+41407 41407 1
+1 41408 1
+41408 41408 1
+1 41409 1
+41409 41409 1
+1 41410 1
+41410 41410 1
+1 41411 1
+41411 41411 1
+1 41412 1
+41412 41412 1
+1 41413 1
+41413 41413 1
+1 41414 1
+41414 41414 1
+1 41415 1
+41415 41415 1
+1 41416 1
+41416 41416 1
+1 41417 1
+41417 41417 1
+1 41418 1
+41418 41418 1
+1 41419 1
+41419 41419 1
+1 41420 1
+41420 41420 1
+1 41421 1
+41421 41421 1
+1 41422 1
+41422 41422 1
+1 41423 1
+41423 41423 1
+1 41424 1
+41424 41424 1
+1 41425 1
+41425 41425 1
+1 41426 1
+41426 41426 1
+1 41427 1
+41427 41427 1
+1 41428 1
+41428 41428 1
+1 41429 1
+41429 41429 1
+1 41430 1
+41430 41430 1
+1 41431 1
+41431 41431 1
+1 41432 1
+41432 41432 1
+1 41433 1
+41433 41433 1
+1 41434 1
+41434 41434 1
+1 41435 1
+41435 41435 1
+1 41436 1
+41436 41436 1
+1 41437 1
+41437 41437 1
+1 41438 1
+41438 41438 1
+1 41439 1
+41439 41439 1
+1 41440 1
+41440 41440 1
+1 41441 1
+41441 41441 1
+1 41442 1
+41442 41442 1
+1 41443 1
+41443 41443 1
+1 41444 1
+41444 41444 1
+1 41445 1
+41445 41445 1
+1 41446 1
+41446 41446 1
+1 41447 1
+41447 41447 1
+1 41448 1
+41448 41448 1
+1 41449 1
+41449 41449 1
+1 41450 1
+41450 41450 1
+1 41451 1
+41451 41451 1
+1 41452 1
+41452 41452 1
+1 41453 1
+41453 41453 1
+1 41454 1
+41454 41454 1
+1 41455 1
+41455 41455 1
+1 41456 1
+41456 41456 1
+1 41457 1
+41457 41457 1
+1 41458 1
+41458 41458 1
+1 41459 1
+41459 41459 1
+1 41460 1
+41460 41460 1
+1 41461 1
+41461 41461 1
+1 41462 1
+41462 41462 1
+1 41463 1
+41463 41463 1
+1 41464 1
+41464 41464 1
+1 41465 1
+41465 41465 1
+1 41466 1
+41466 41466 1
+1 41467 1
+41467 41467 1
+1 41468 1
+41468 41468 1
+1 41469 1
+41469 41469 1
+1 41470 1
+41470 41470 1
+1 41471 1
+41471 41471 1
+1 41472 1
+41472 41472 1
+1 41473 1
+41473 41473 1
+1 41474 1
+41474 41474 1
+1 41475 1
+41475 41475 1
+1 41476 1
+41476 41476 1
+1 41477 1
+41477 41477 1
+1 41478 1
+41478 41478 1
+1 41479 1
+41479 41479 1
+1 41480 1
+41480 41480 1
+1 41481 1
+41481 41481 1
+1 41482 1
+41482 41482 1
+1 41483 1
+41483 41483 1
+1 41484 1
+41484 41484 1
+1 41485 1
+41485 41485 1
+1 41486 1
+41486 41486 1
+1 41487 1
+41487 41487 1
+1 41488 1
+41488 41488 1
+1 41489 1
+41489 41489 1
+1 41490 1
+41490 41490 1
+1 41491 1
+41491 41491 1
+1 41492 1
+41492 41492 1
+1 41493 1
+41493 41493 1
+1 41494 1
+41494 41494 1
+1 41495 1
+41495 41495 1
+1 41496 1
+41496 41496 1
+1 41497 1
+41497 41497 1
+1 41498 1
+41498 41498 1
+1 41499 1
+41499 41499 1
+1 41500 1
+41500 41500 1
+1 41501 1
+41501 41501 1
+1 41502 1
+41502 41502 1
+1 41503 1
+41503 41503 1
+1 41504 1
+41504 41504 1
+1 41505 1
+41505 41505 1
+1 41506 1
+41506 41506 1
+1 41507 1
+41507 41507 1
+1 41508 1
+41508 41508 1
+1 41509 1
+41509 41509 1
+1 41510 1
+41510 41510 1
+1 41511 1
+41511 41511 1
+1 41512 1
+41512 41512 1
+1 41513 1
+41513 41513 1
+1 41514 1
+41514 41514 1
+1 41515 1
+41515 41515 1
+1 41516 1
+41516 41516 1
+1 41517 1
+41517 41517 1
+1 41518 1
+41518 41518 1
+1 41519 1
+41519 41519 1
+1 41520 1
+41520 41520 1
+1 41521 1
+41521 41521 1
+1 41522 1
+41522 41522 1
+1 41523 1
+41523 41523 1
+1 41524 1
+41524 41524 1
+1 41525 1
+41525 41525 1
+1 41526 1
+41526 41526 1
+1 41527 1
+41527 41527 1
+1 41528 1
+41528 41528 1
+1 41529 1
+41529 41529 1
+1 41530 1
+41530 41530 1
+1 41531 1
+41531 41531 1
+1 41532 1
+41532 41532 1
+1 41533 1
+41533 41533 1
+1 41534 1
+41534 41534 1
+1 41535 1
+41535 41535 1
+1 41536 1
+41536 41536 1
+1 41537 1
+41537 41537 1
+1 41538 1
+41538 41538 1
+1 41539 1
+41539 41539 1
+1 41540 1
+41540 41540 1
+1 41541 1
+41541 41541 1
+1 41542 1
+41542 41542 1
+1 41543 1
+41543 41543 1
+1 41544 1
+41544 41544 1
+1 41545 1
+41545 41545 1
+1 41546 1
+41546 41546 1
+1 41547 1
+41547 41547 1
+1 41548 1
+41548 41548 1
+1 41549 1
+41549 41549 1
+1 41550 1
+41550 41550 1
+1 41551 1
+41551 41551 1
+1 41552 1
+41552 41552 1
+1 41553 1
+41553 41553 1
+1 41554 1
+41554 41554 1
+1 41555 1
+41555 41555 1
+1 41556 1
+41556 41556 1
+1 41557 1
+41557 41557 1
+1 41558 1
+41558 41558 1
+1 41559 1
+41559 41559 1
+1 41560 1
+41560 41560 1
+1 41561 1
+41561 41561 1
+1 41562 1
+41562 41562 1
+1 41563 1
+41563 41563 1
+1 41564 1
+41564 41564 1
+1 41565 1
+41565 41565 1
+1 41566 1
+41566 41566 1
+1 41567 1
+41567 41567 1
+1 41568 1
+41568 41568 1
+1 41569 1
+41569 41569 1
+1 41570 1
+41570 41570 1
+1 41571 1
+41571 41571 1
+1 41572 1
+41572 41572 1
+1 41573 1
+41573 41573 1
+1 41574 1
+41574 41574 1
+1 41575 1
+41575 41575 1
+1 41576 1
+41576 41576 1
+1 41577 1
+41577 41577 1
+1 41578 1
+41578 41578 1
+1 41579 1
+41579 41579 1
+1 41580 1
+41580 41580 1
+1 41581 1
+41581 41581 1
+1 41582 1
+41582 41582 1
+1 41583 1
+41583 41583 1
+1 41584 1
+41584 41584 1
+1 41585 1
+41585 41585 1
+1 41586 1
+41586 41586 1
+1 41587 1
+41587 41587 1
+1 41588 1
+41588 41588 1
+1 41589 1
+41589 41589 1
+1 41590 1
+41590 41590 1
+1 41591 1
+41591 41591 1
+1 41592 1
+41592 41592 1
+1 41593 1
+41593 41593 1
+1 41594 1
+41594 41594 1
+1 41595 1
+41595 41595 1
+1 41596 1
+41596 41596 1
+1 41597 1
+41597 41597 1
+1 41598 1
+41598 41598 1
+1 41599 1
+41599 41599 1
+1 41600 1
+41600 41600 1
+1 41601 1
+41601 41601 1
+1 41602 1
+41602 41602 1
+1 41603 1
+41603 41603 1
+1 41604 1
+41604 41604 1
+1 41605 1
+41605 41605 1
+1 41606 1
+41606 41606 1
+1 41607 1
+41607 41607 1
+1 41608 1
+41608 41608 1
+1 41609 1
+41609 41609 1
+1 41610 1
+41610 41610 1
+1 41611 1
+41611 41611 1
+1 41612 1
+41612 41612 1
+1 41613 1
+41613 41613 1
+1 41614 1
+41614 41614 1
+1 41615 1
+41615 41615 1
+1 41616 1
+41616 41616 1
+1 41617 1
+41617 41617 1
+1 41618 1
+41618 41618 1
+1 41619 1
+41619 41619 1
+1 41620 1
+41620 41620 1
+1 41621 1
+41621 41621 1
+1 41622 1
+41622 41622 1
+1 41623 1
+41623 41623 1
+1 41624 1
+41624 41624 1
+1 41625 1
+41625 41625 1
+1 41626 1
+41626 41626 1
+1 41627 1
+41627 41627 1
+1 41628 1
+41628 41628 1
+1 41629 1
+41629 41629 1
+1 41630 1
+41630 41630 1
+1 41631 1
+41631 41631 1
+1 41632 1
+41632 41632 1
+1 41633 1
+41633 41633 1
+1 41634 1
+41634 41634 1
+1 41635 1
+41635 41635 1
+1 41636 1
+41636 41636 1
+1 41637 1
+41637 41637 1
+1 41638 1
+41638 41638 1
+1 41639 1
+41639 41639 1
+1 41640 1
+41640 41640 1
+1 41641 1
+41641 41641 1
+1 41642 1
+41642 41642 1
+1 41643 1
+41643 41643 1
+1 41644 1
+41644 41644 1
+1 41645 1
+41645 41645 1
+1 41646 1
+41646 41646 1
+1 41647 1
+41647 41647 1
+1 41648 1
+41648 41648 1
+1 41649 1
+41649 41649 1
+1 41650 1
+41650 41650 1
+1 41651 1
+41651 41651 1
+1 41652 1
+41652 41652 1
+1 41653 1
+41653 41653 1
+1 41654 1
+41654 41654 1
+1 41655 1
+41655 41655 1
+1 41656 1
+41656 41656 1
+1 41657 1
+41657 41657 1
+1 41658 1
+41658 41658 1
+1 41659 1
+41659 41659 1
+1 41660 1
+41660 41660 1
+1 41661 1
+41661 41661 1
+1 41662 1
+41662 41662 1
+1 41663 1
+41663 41663 1
+1 41664 1
+41664 41664 1
+1 41665 1
+41665 41665 1
+1 41666 1
+41666 41666 1
+1 41667 1
+41667 41667 1
+1 41668 1
+41668 41668 1
+1 41669 1
+41669 41669 1
+1 41670 1
+41670 41670 1
+1 41671 1
+41671 41671 1
+1 41672 1
+41672 41672 1
+1 41673 1
+41673 41673 1
+1 41674 1
+41674 41674 1
+1 41675 1
+41675 41675 1
+1 41676 1
+41676 41676 1
+1 41677 1
+41677 41677 1
+1 41678 1
+41678 41678 1
+1 41679 1
+41679 41679 1
+1 41680 1
+41680 41680 1
+1 41681 1
+41681 41681 1
+1 41682 1
+41682 41682 1
+1 41683 1
+41683 41683 1
+1 41684 1
+41684 41684 1
+1 41685 1
+41685 41685 1
+1 41686 1
+41686 41686 1
+1 41687 1
+41687 41687 1
+1 41688 1
+41688 41688 1
+1 41689 1
+41689 41689 1
+1 41690 1
+41690 41690 1
+1 41691 1
+41691 41691 1
+1 41692 1
+41692 41692 1
+1 41693 1
+41693 41693 1
+1 41694 1
+41694 41694 1
+1 41695 1
+41695 41695 1
+1 41696 1
+41696 41696 1
+1 41697 1
+41697 41697 1
+1 41698 1
+41698 41698 1
+1 41699 1
+41699 41699 1
+1 41700 1
+41700 41700 1
+1 41701 1
+41701 41701 1
+1 41702 1
+41702 41702 1
+1 41703 1
+41703 41703 1
+1 41704 1
+41704 41704 1
+1 41705 1
+41705 41705 1
+1 41706 1
+41706 41706 1
+1 41707 1
+41707 41707 1
+1 41708 1
+41708 41708 1
+1 41709 1
+41709 41709 1
+1 41710 1
+41710 41710 1
+1 41711 1
+41711 41711 1
+1 41712 1
+41712 41712 1
+1 41713 1
+41713 41713 1
+1 41714 1
+41714 41714 1
+1 41715 1
+41715 41715 1
+1 41716 1
+41716 41716 1
+1 41717 1
+41717 41717 1
+1 41718 1
+41718 41718 1
+1 41719 1
+41719 41719 1
+1 41720 1
+41720 41720 1
+1 41721 1
+41721 41721 1
+1 41722 1
+41722 41722 1
+1 41723 1
+41723 41723 1
+1 41724 1
+41724 41724 1
+1 41725 1
+41725 41725 1
+1 41726 1
+41726 41726 1
+1 41727 1
+41727 41727 1
+1 41728 1
+41728 41728 1
+1 41729 1
+41729 41729 1
+1 41730 1
+41730 41730 1
+1 41731 1
+41731 41731 1
+1 41732 1
+41732 41732 1
+1 41733 1
+41733 41733 1
+1 41734 1
+41734 41734 1
+1 41735 1
+41735 41735 1
+1 41736 1
+41736 41736 1
+1 41737 1
+41737 41737 1
+1 41738 1
+41738 41738 1
+1 41739 1
+41739 41739 1
+1 41740 1
+41740 41740 1
+1 41741 1
+41741 41741 1
+1 41742 1
+41742 41742 1
+1 41743 1
+41743 41743 1
+1 41744 1
+41744 41744 1
+1 41745 1
+41745 41745 1
+1 41746 1
+41746 41746 1
+1 41747 1
+41747 41747 1
+1 41748 1
+41748 41748 1
+1 41749 1
+41749 41749 1
+1 41750 1
+41750 41750 1
+1 41751 1
+41751 41751 1
+1 41752 1
+41752 41752 1
+1 41753 1
+41753 41753 1
+1 41754 1
+41754 41754 1
+1 41755 1
+41755 41755 1
+1 41756 1
+41756 41756 1
+1 41757 1
+41757 41757 1
+1 41758 1
+41758 41758 1
+1 41759 1
+41759 41759 1
+1 41760 1
+41760 41760 1
+1 41761 1
+41761 41761 1
+1 41762 1
+41762 41762 1
+1 41763 1
+41763 41763 1
+1 41764 1
+41764 41764 1
+1 41765 1
+41765 41765 1
+1 41766 1
+41766 41766 1
+1 41767 1
+41767 41767 1
+1 41768 1
+41768 41768 1
+1 41769 1
+41769 41769 1
+1 41770 1
+41770 41770 1
+1 41771 1
+41771 41771 1
+1 41772 1
+41772 41772 1
+1 41773 1
+41773 41773 1
+1 41774 1
+41774 41774 1
+1 41775 1
+41775 41775 1
+1 41776 1
+41776 41776 1
+1 41777 1
+41777 41777 1
+1 41778 1
+41778 41778 1
+1 41779 1
+41779 41779 1
+1 41780 1
+41780 41780 1
+1 41781 1
+41781 41781 1
+1 41782 1
+41782 41782 1
+1 41783 1
+41783 41783 1
+1 41784 1
+41784 41784 1
+1 41785 1
+41785 41785 1
+1 41786 1
+41786 41786 1
+1 41787 1
+41787 41787 1
+1 41788 1
+41788 41788 1
+1 41789 1
+41789 41789 1
+1 41790 1
+41790 41790 1
+1 41791 1
+41791 41791 1
+1 41792 1
+41792 41792 1
+1 41793 1
+41793 41793 1
+1 41794 1
+41794 41794 1
+1 41795 1
+41795 41795 1
+1 41796 1
+41796 41796 1
+1 41797 1
+41797 41797 1
+1 41798 1
+41798 41798 1
+1 41799 1
+41799 41799 1
+1 41800 1
+41800 41800 1
+1 41801 1
+41801 41801 1
+1 41802 1
+41802 41802 1
+1 41803 1
+41803 41803 1
+1 41804 1
+41804 41804 1
+1 41805 1
+41805 41805 1
+1 41806 1
+41806 41806 1
+1 41807 1
+41807 41807 1
+1 41808 1
+41808 41808 1
+1 41809 1
+41809 41809 1
+1 41810 1
+41810 41810 1
+1 41811 1
+41811 41811 1
+1 41812 1
+41812 41812 1
+1 41813 1
+41813 41813 1
+1 41814 1
+41814 41814 1
+1 41815 1
+41815 41815 1
+1 41816 1
+41816 41816 1
+1 41817 1
+41817 41817 1
+1 41818 1
+41818 41818 1
+1 41819 1
+41819 41819 1
+1 41820 1
+41820 41820 1
+1 41821 1
+41821 41821 1
+1 41822 1
+41822 41822 1
+1 41823 1
+41823 41823 1
+1 41824 1
+41824 41824 1
+1 41825 1
+41825 41825 1
+1 41826 1
+41826 41826 1
+1 41827 1
+41827 41827 1
+1 41828 1
+41828 41828 1
+1 41829 1
+41829 41829 1
+1 41830 1
+41830 41830 1
+1 41831 1
+41831 41831 1
+1 41832 1
+41832 41832 1
+1 41833 1
+41833 41833 1
+1 41834 1
+41834 41834 1
+1 41835 1
+41835 41835 1
+1 41836 1
+41836 41836 1
+1 41837 1
+41837 41837 1
+1 41838 1
+41838 41838 1
+1 41839 1
+41839 41839 1
+1 41840 1
+41840 41840 1
+1 41841 1
+41841 41841 1
+1 41842 1
+41842 41842 1
+1 41843 1
+41843 41843 1
+1 41844 1
+41844 41844 1
+1 41845 1
+41845 41845 1
+1 41846 1
+41846 41846 1
+1 41847 1
+41847 41847 1
+1 41848 1
+41848 41848 1
+1 41849 1
+41849 41849 1
+1 41850 1
+41850 41850 1
+1 41851 1
+41851 41851 1
+1 41852 1
+41852 41852 1
+1 41853 1
+41853 41853 1
+1 41854 1
+41854 41854 1
+1 41855 1
+41855 41855 1
+1 41856 1
+41856 41856 1
+1 41857 1
+41857 41857 1
+1 41858 1
+41858 41858 1
+1 41859 1
+41859 41859 1
+1 41860 1
+41860 41860 1
+1 41861 1
+41861 41861 1
+1 41862 1
+41862 41862 1
+1 41863 1
+41863 41863 1
+1 41864 1
+41864 41864 1
+1 41865 1
+41865 41865 1
+1 41866 1
+41866 41866 1
+1 41867 1
+41867 41867 1
+1 41868 1
+41868 41868 1
+1 41869 1
+41869 41869 1
+1 41870 1
+41870 41870 1
+1 41871 1
+41871 41871 1
+1 41872 1
+41872 41872 1
+1 41873 1
+41873 41873 1
+1 41874 1
+41874 41874 1
+1 41875 1
+41875 41875 1
+1 41876 1
+41876 41876 1
+1 41877 1
+41877 41877 1
+1 41878 1
+41878 41878 1
+1 41879 1
+41879 41879 1
+1 41880 1
+41880 41880 1
+1 41881 1
+41881 41881 1
+1 41882 1
+41882 41882 1
+1 41883 1
+41883 41883 1
+1 41884 1
+41884 41884 1
+1 41885 1
+41885 41885 1
+1 41886 1
+41886 41886 1
+1 41887 1
+41887 41887 1
+1 41888 1
+41888 41888 1
+1 41889 1
+41889 41889 1
+1 41890 1
+41890 41890 1
+1 41891 1
+41891 41891 1
+1 41892 1
+41892 41892 1
+1 41893 1
+41893 41893 1
+1 41894 1
+41894 41894 1
+1 41895 1
+41895 41895 1
+1 41896 1
+41896 41896 1
+1 41897 1
+41897 41897 1
+1 41898 1
+41898 41898 1
+1 41899 1
+41899 41899 1
+1 41900 1
+41900 41900 1
+1 41901 1
+41901 41901 1
+1 41902 1
+41902 41902 1
+1 41903 1
+41903 41903 1
+1 41904 1
+41904 41904 1
+1 41905 1
+41905 41905 1
+1 41906 1
+41906 41906 1
+1 41907 1
+41907 41907 1
+1 41908 1
+41908 41908 1
+1 41909 1
+41909 41909 1
+1 41910 1
+41910 41910 1
+1 41911 1
+41911 41911 1
+1 41912 1
+41912 41912 1
+1 41913 1
+41913 41913 1
+1 41914 1
+41914 41914 1
+1 41915 1
+41915 41915 1
+1 41916 1
+41916 41916 1
+1 41917 1
+41917 41917 1
+1 41918 1
+41918 41918 1
+1 41919 1
+41919 41919 1
+1 41920 1
+41920 41920 1
+1 41921 1
+41921 41921 1
+1 41922 1
+41922 41922 1
+1 41923 1
+41923 41923 1
+1 41924 1
+41924 41924 1
+1 41925 1
+41925 41925 1
+1 41926 1
+41926 41926 1
+1 41927 1
+41927 41927 1
+1 41928 1
+41928 41928 1
+1 41929 1
+41929 41929 1
+1 41930 1
+41930 41930 1
+1 41931 1
+41931 41931 1
+1 41932 1
+41932 41932 1
+1 41933 1
+41933 41933 1
+1 41934 1
+41934 41934 1
+1 41935 1
+41935 41935 1
+1 41936 1
+41936 41936 1
+1 41937 1
+41937 41937 1
+1 41938 1
+41938 41938 1
+1 41939 1
+41939 41939 1
+1 41940 1
+41940 41940 1
+1 41941 1
+41941 41941 1
+1 41942 1
+41942 41942 1
+1 41943 1
+41943 41943 1
+1 41944 1
+41944 41944 1
+1 41945 1
+41945 41945 1
+1 41946 1
+41946 41946 1
+1 41947 1
+41947 41947 1
+1 41948 1
+41948 41948 1
+1 41949 1
+41949 41949 1
+1 41950 1
+41950 41950 1
+1 41951 1
+41951 41951 1
+1 41952 1
+41952 41952 1
+1 41953 1
+41953 41953 1
+1 41954 1
+41954 41954 1
+1 41955 1
+41955 41955 1
+1 41956 1
+41956 41956 1
+1 41957 1
+41957 41957 1
+1 41958 1
+41958 41958 1
+1 41959 1
+41959 41959 1
+1 41960 1
+41960 41960 1
+1 41961 1
+41961 41961 1
+1 41962 1
+41962 41962 1
+1 41963 1
+41963 41963 1
+1 41964 1
+41964 41964 1
+1 41965 1
+41965 41965 1
+1 41966 1
+41966 41966 1
+1 41967 1
+41967 41967 1
+1 41968 1
+41968 41968 1
+1 41969 1
+41969 41969 1
+1 41970 1
+41970 41970 1
+1 41971 1
+41971 41971 1
+1 41972 1
+41972 41972 1
+1 41973 1
+41973 41973 1
+1 41974 1
+41974 41974 1
+1 41975 1
+41975 41975 1
+1 41976 1
+41976 41976 1
+1 41977 1
+41977 41977 1
+1 41978 1
+41978 41978 1
+1 41979 1
+41979 41979 1
+1 41980 1
+41980 41980 1
+1 41981 1
+41981 41981 1
+1 41982 1
+41982 41982 1
+1 41983 1
+41983 41983 1
+1 41984 1
+41984 41984 1
+1 41985 1
+41985 41985 1
+1 41986 1
+41986 41986 1
+1 41987 1
+41987 41987 1
+1 41988 1
+41988 41988 1
+1 41989 1
+41989 41989 1
+1 41990 1
+41990 41990 1
+1 41991 1
+41991 41991 1
+1 41992 1
+41992 41992 1
+1 41993 1
+41993 41993 1
+1 41994 1
+41994 41994 1
+1 41995 1
+41995 41995 1
+1 41996 1
+41996 41996 1
+1 41997 1
+41997 41997 1
+1 41998 1
+41998 41998 1
+1 41999 1
+41999 41999 1
+1 42000 1
+42000 42000 1
+1 42001 1
+42001 42001 1
+1 42002 1
+42002 42002 1
+1 42003 1
+42003 42003 1
+1 42004 1
+42004 42004 1
+1 42005 1
+42005 42005 1
+1 42006 1
+42006 42006 1
+1 42007 1
+42007 42007 1
+1 42008 1
+42008 42008 1
+1 42009 1
+42009 42009 1
+1 42010 1
+42010 42010 1
+1 42011 1
+42011 42011 1
+1 42012 1
+42012 42012 1
+1 42013 1
+42013 42013 1
+1 42014 1
+42014 42014 1
+1 42015 1
+42015 42015 1
+1 42016 1
+42016 42016 1
+1 42017 1
+42017 42017 1
+1 42018 1
+42018 42018 1
+1 42019 1
+42019 42019 1
+1 42020 1
+42020 42020 1
+1 42021 1
+42021 42021 1
+1 42022 1
+42022 42022 1
+1 42023 1
+42023 42023 1
+1 42024 1
+42024 42024 1
+1 42025 1
+42025 42025 1
+1 42026 1
+42026 42026 1
+1 42027 1
+42027 42027 1
+1 42028 1
+42028 42028 1
+1 42029 1
+42029 42029 1
+1 42030 1
+42030 42030 1
+1 42031 1
+42031 42031 1
+1 42032 1
+42032 42032 1
+1 42033 1
+42033 42033 1
+1 42034 1
+42034 42034 1
+1 42035 1
+42035 42035 1
+1 42036 1
+42036 42036 1
+1 42037 1
+42037 42037 1
+1 42038 1
+42038 42038 1
+1 42039 1
+42039 42039 1
+1 42040 1
+42040 42040 1
+1 42041 1
+42041 42041 1
+1 42042 1
+42042 42042 1
+1 42043 1
+42043 42043 1
+1 42044 1
+42044 42044 1
+1 42045 1
+42045 42045 1
+1 42046 1
+42046 42046 1
+1 42047 1
+42047 42047 1
+1 42048 1
+42048 42048 1
+1 42049 1
+42049 42049 1
+1 42050 1
+42050 42050 1
+1 42051 1
+42051 42051 1
+1 42052 1
+42052 42052 1
+1 42053 1
+42053 42053 1
+1 42054 1
+42054 42054 1
+1 42055 1
+42055 42055 1
+1 42056 1
+42056 42056 1
+1 42057 1
+42057 42057 1
+1 42058 1
+42058 42058 1
+1 42059 1
+42059 42059 1
+1 42060 1
+42060 42060 1
+1 42061 1
+42061 42061 1
+1 42062 1
+42062 42062 1
+1 42063 1
+42063 42063 1
+1 42064 1
+42064 42064 1
+1 42065 1
+42065 42065 1
+1 42066 1
+42066 42066 1
+1 42067 1
+42067 42067 1
+1 42068 1
+42068 42068 1
+1 42069 1
+42069 42069 1
+1 42070 1
+42070 42070 1
+1 42071 1
+42071 42071 1
+1 42072 1
+42072 42072 1
+1 42073 1
+42073 42073 1
+1 42074 1
+42074 42074 1
+1 42075 1
+42075 42075 1
+1 42076 1
+42076 42076 1
+1 42077 1
+42077 42077 1
+1 42078 1
+42078 42078 1
+1 42079 1
+42079 42079 1
+1 42080 1
+42080 42080 1
+1 42081 1
+42081 42081 1
+1 42082 1
+42082 42082 1
+1 42083 1
+42083 42083 1
+1 42084 1
+42084 42084 1
+1 42085 1
+42085 42085 1
+1 42086 1
+42086 42086 1
+1 42087 1
+42087 42087 1
+1 42088 1
+42088 42088 1
+1 42089 1
+42089 42089 1
+1 42090 1
+42090 42090 1
+1 42091 1
+42091 42091 1
+1 42092 1
+42092 42092 1
+1 42093 1
+42093 42093 1
+1 42094 1
+42094 42094 1
+1 42095 1
+42095 42095 1
+1 42096 1
+42096 42096 1
+1 42097 1
+42097 42097 1
+1 42098 1
+42098 42098 1
+1 42099 1
+42099 42099 1
+1 42100 1
+42100 42100 1
+1 42101 1
+42101 42101 1
+1 42102 1
+42102 42102 1
+1 42103 1
+42103 42103 1
+1 42104 1
+42104 42104 1
+1 42105 1
+42105 42105 1
+1 42106 1
+42106 42106 1
+1 42107 1
+42107 42107 1
+1 42108 1
+42108 42108 1
+1 42109 1
+42109 42109 1
+1 42110 1
+42110 42110 1
+1 42111 1
+42111 42111 1
+1 42112 1
+42112 42112 1
+1 42113 1
+42113 42113 1
+1 42114 1
+42114 42114 1
+1 42115 1
+42115 42115 1
+1 42116 1
+42116 42116 1
+1 42117 1
+42117 42117 1
+1 42118 1
+42118 42118 1
+1 42119 1
+42119 42119 1
+1 42120 1
+42120 42120 1
+1 42121 1
+42121 42121 1
+1 42122 1
+42122 42122 1
+1 42123 1
+42123 42123 1
+1 42124 1
+42124 42124 1
+1 42125 1
+42125 42125 1
+1 42126 1
+42126 42126 1
+1 42127 1
+42127 42127 1
+1 42128 1
+42128 42128 1
+1 42129 1
+42129 42129 1
+1 42130 1
+42130 42130 1
+1 42131 1
+42131 42131 1
+1 42132 1
+42132 42132 1
+1 42133 1
+42133 42133 1
+1 42134 1
+42134 42134 1
+1 42135 1
+42135 42135 1
+1 42136 1
+42136 42136 1
+1 42137 1
+42137 42137 1
+1 42138 1
+42138 42138 1
+1 42139 1
+42139 42139 1
+1 42140 1
+42140 42140 1
+1 42141 1
+42141 42141 1
+1 42142 1
+42142 42142 1
+1 42143 1
+42143 42143 1
+1 42144 1
+42144 42144 1
+1 42145 1
+42145 42145 1
+1 42146 1
+42146 42146 1
+1 42147 1
+42147 42147 1
+1 42148 1
+42148 42148 1
+1 42149 1
+42149 42149 1
+1 42150 1
+42150 42150 1
+1 42151 1
+42151 42151 1
+1 42152 1
+42152 42152 1
+1 42153 1
+42153 42153 1
+1 42154 1
+42154 42154 1
+1 42155 1
+42155 42155 1
+1 42156 1
+42156 42156 1
+1 42157 1
+42157 42157 1
+1 42158 1
+42158 42158 1
+1 42159 1
+42159 42159 1
+1 42160 1
+42160 42160 1
+1 42161 1
+42161 42161 1
+1 42162 1
+42162 42162 1
+1 42163 1
+42163 42163 1
+1 42164 1
+42164 42164 1
+1 42165 1
+42165 42165 1
+1 42166 1
+42166 42166 1
+1 42167 1
+42167 42167 1
+1 42168 1
+42168 42168 1
+1 42169 1
+42169 42169 1
+1 42170 1
+42170 42170 1
+1 42171 1
+42171 42171 1
+1 42172 1
+42172 42172 1
+1 42173 1
+42173 42173 1
+1 42174 1
+42174 42174 1
+1 42175 1
+42175 42175 1
+1 42176 1
+42176 42176 1
+1 42177 1
+42177 42177 1
+1 42178 1
+42178 42178 1
+1 42179 1
+42179 42179 1
+1 42180 1
+42180 42180 1
+1 42181 1
+42181 42181 1
+1 42182 1
+42182 42182 1
+1 42183 1
+42183 42183 1
+1 42184 1
+42184 42184 1
+1 42185 1
+42185 42185 1
+1 42186 1
+42186 42186 1
+1 42187 1
+42187 42187 1
+1 42188 1
+42188 42188 1
+1 42189 1
+42189 42189 1
+1 42190 1
+42190 42190 1
+1 42191 1
+42191 42191 1
+1 42192 1
+42192 42192 1
+1 42193 1
+42193 42193 1
+1 42194 1
+42194 42194 1
+1 42195 1
+42195 42195 1
+1 42196 1
+42196 42196 1
+1 42197 1
+42197 42197 1
+1 42198 1
+42198 42198 1
+1 42199 1
+42199 42199 1
+1 42200 1
+42200 42200 1
+1 42201 1
+42201 42201 1
+1 42202 1
+42202 42202 1
+1 42203 1
+42203 42203 1
+1 42204 1
+42204 42204 1
+1 42205 1
+42205 42205 1
+1 42206 1
+42206 42206 1
+1 42207 1
+42207 42207 1
+1 42208 1
+42208 42208 1
+1 42209 1
+42209 42209 1
+1 42210 1
+42210 42210 1
+1 42211 1
+42211 42211 1
+1 42212 1
+42212 42212 1
+1 42213 1
+42213 42213 1
+1 42214 1
+42214 42214 1
+1 42215 1
+42215 42215 1
+1 42216 1
+42216 42216 1
+1 42217 1
+42217 42217 1
+1 42218 1
+42218 42218 1
+1 42219 1
+42219 42219 1
+1 42220 1
+42220 42220 1
+1 42221 1
+42221 42221 1
+1 42222 1
+42222 42222 1
+1 42223 1
+42223 42223 1
+1 42224 1
+42224 42224 1
+1 42225 1
+42225 42225 1
+1 42226 1
+42226 42226 1
+1 42227 1
+42227 42227 1
+1 42228 1
+42228 42228 1
+1 42229 1
+42229 42229 1
+1 42230 1
+42230 42230 1
+1 42231 1
+42231 42231 1
+1 42232 1
+42232 42232 1
+1 42233 1
+42233 42233 1
+1 42234 1
+42234 42234 1
+1 42235 1
+42235 42235 1
+1 42236 1
+42236 42236 1
+1 42237 1
+42237 42237 1
+1 42238 1
+42238 42238 1
+1 42239 1
+42239 42239 1
+1 42240 1
+42240 42240 1
+1 42241 1
+42241 42241 1
+1 42242 1
+42242 42242 1
+1 42243 1
+42243 42243 1
+1 42244 1
+42244 42244 1
+1 42245 1
+42245 42245 1
+1 42246 1
+42246 42246 1
+1 42247 1
+42247 42247 1
+1 42248 1
+42248 42248 1
+1 42249 1
+42249 42249 1
+1 42250 1
+42250 42250 1
+1 42251 1
+42251 42251 1
+1 42252 1
+42252 42252 1
+1 42253 1
+42253 42253 1
+1 42254 1
+42254 42254 1
+1 42255 1
+42255 42255 1
+1 42256 1
+42256 42256 1
+1 42257 1
+42257 42257 1
+1 42258 1
+42258 42258 1
+1 42259 1
+42259 42259 1
+1 42260 1
+42260 42260 1
+1 42261 1
+42261 42261 1
+1 42262 1
+42262 42262 1
+1 42263 1
+42263 42263 1
+1 42264 1
+42264 42264 1
+1 42265 1
+42265 42265 1
+1 42266 1
+42266 42266 1
+1 42267 1
+42267 42267 1
+1 42268 1
+42268 42268 1
+1 42269 1
+42269 42269 1
+1 42270 1
+42270 42270 1
+1 42271 1
+42271 42271 1
+1 42272 1
+42272 42272 1
+1 42273 1
+42273 42273 1
+1 42274 1
+42274 42274 1
+1 42275 1
+42275 42275 1
+1 42276 1
+42276 42276 1
+1 42277 1
+42277 42277 1
+1 42278 1
+42278 42278 1
+1 42279 1
+42279 42279 1
+1 42280 1
+42280 42280 1
+1 42281 1
+42281 42281 1
+1 42282 1
+42282 42282 1
+1 42283 1
+42283 42283 1
+1 42284 1
+42284 42284 1
+1 42285 1
+42285 42285 1
+1 42286 1
+42286 42286 1
+1 42287 1
+42287 42287 1
+1 42288 1
+42288 42288 1
+1 42289 1
+42289 42289 1
+1 42290 1
+42290 42290 1
+1 42291 1
+42291 42291 1
+1 42292 1
+42292 42292 1
+1 42293 1
+42293 42293 1
+1 42294 1
+42294 42294 1
+1 42295 1
+42295 42295 1
+1 42296 1
+42296 42296 1
+1 42297 1
+42297 42297 1
+1 42298 1
+42298 42298 1
+1 42299 1
+42299 42299 1
+1 42300 1
+42300 42300 1
+1 42301 1
+42301 42301 1
+1 42302 1
+42302 42302 1
+1 42303 1
+42303 42303 1
+1 42304 1
+42304 42304 1
+1 42305 1
+42305 42305 1
+1 42306 1
+42306 42306 1
+1 42307 1
+42307 42307 1
+1 42308 1
+42308 42308 1
+1 42309 1
+42309 42309 1
+1 42310 1
+42310 42310 1
+1 42311 1
+42311 42311 1
+1 42312 1
+42312 42312 1
+1 42313 1
+42313 42313 1
+1 42314 1
+42314 42314 1
+1 42315 1
+42315 42315 1
+1 42316 1
+42316 42316 1
+1 42317 1
+42317 42317 1
+1 42318 1
+42318 42318 1
+1 42319 1
+42319 42319 1
+1 42320 1
+42320 42320 1
+1 42321 1
+42321 42321 1
+1 42322 1
+42322 42322 1
+1 42323 1
+42323 42323 1
+1 42324 1
+42324 42324 1
+1 42325 1
+42325 42325 1
+1 42326 1
+42326 42326 1
+1 42327 1
+42327 42327 1
+1 42328 1
+42328 42328 1
+1 42329 1
+42329 42329 1
+1 42330 1
+42330 42330 1
+1 42331 1
+42331 42331 1
+1 42332 1
+42332 42332 1
+1 42333 1
+42333 42333 1
+1 42334 1
+42334 42334 1
+1 42335 1
+42335 42335 1
+1 42336 1
+42336 42336 1
+1 42337 1
+42337 42337 1
+1 42338 1
+42338 42338 1
+1 42339 1
+42339 42339 1
+1 42340 1
+42340 42340 1
+1 42341 1
+42341 42341 1
+1 42342 1
+42342 42342 1
+1 42343 1
+42343 42343 1
+1 42344 1
+42344 42344 1
+1 42345 1
+42345 42345 1
+1 42346 1
+42346 42346 1
+1 42347 1
+42347 42347 1
+1 42348 1
+42348 42348 1
+1 42349 1
+42349 42349 1
+1 42350 1
+42350 42350 1
+1 42351 1
+42351 42351 1
+1 42352 1
+42352 42352 1
+1 42353 1
+42353 42353 1
+1 42354 1
+42354 42354 1
+1 42355 1
+42355 42355 1
+1 42356 1
+42356 42356 1
+1 42357 1
+42357 42357 1
+1 42358 1
+42358 42358 1
+1 42359 1
+42359 42359 1
+1 42360 1
+42360 42360 1
+1 42361 1
+42361 42361 1
+1 42362 1
+42362 42362 1
+1 42363 1
+42363 42363 1
+1 42364 1
+42364 42364 1
+1 42365 1
+42365 42365 1
+1 42366 1
+42366 42366 1
+1 42367 1
+42367 42367 1
+1 42368 1
+42368 42368 1
+1 42369 1
+42369 42369 1
+1 42370 1
+42370 42370 1
+1 42371 1
+42371 42371 1
+1 42372 1
+42372 42372 1
+1 42373 1
+42373 42373 1
+1 42374 1
+42374 42374 1
+1 42375 1
+42375 42375 1
+1 42376 1
+42376 42376 1
+1 42377 1
+42377 42377 1
+1 42378 1
+42378 42378 1
+1 42379 1
+42379 42379 1
+1 42380 1
+42380 42380 1
+1 42381 1
+42381 42381 1
+1 42382 1
+42382 42382 1
+1 42383 1
+42383 42383 1
+1 42384 1
+42384 42384 1
+1 42385 1
+42385 42385 1
+1 42386 1
+42386 42386 1
+1 42387 1
+42387 42387 1
+1 42388 1
+42388 42388 1
+1 42389 1
+42389 42389 1
+1 42390 1
+42390 42390 1
+1 42391 1
+42391 42391 1
+1 42392 1
+42392 42392 1
+1 42393 1
+42393 42393 1
+1 42394 1
+42394 42394 1
+1 42395 1
+42395 42395 1
+1 42396 1
+42396 42396 1
+1 42397 1
+42397 42397 1
+1 42398 1
+42398 42398 1
+1 42399 1
+42399 42399 1
+1 42400 1
+42400 42400 1
+1 42401 1
+42401 42401 1
+1 42402 1
+42402 42402 1
+1 42403 1
+42403 42403 1
+1 42404 1
+42404 42404 1
+1 42405 1
+42405 42405 1
+1 42406 1
+42406 42406 1
+1 42407 1
+42407 42407 1
+1 42408 1
+42408 42408 1
+1 42409 1
+42409 42409 1
+1 42410 1
+42410 42410 1
+1 42411 1
+42411 42411 1
+1 42412 1
+42412 42412 1
+1 42413 1
+42413 42413 1
+1 42414 1
+42414 42414 1
+1 42415 1
+42415 42415 1
+1 42416 1
+42416 42416 1
+1 42417 1
+42417 42417 1
+1 42418 1
+42418 42418 1
+1 42419 1
+42419 42419 1
+1 42420 1
+42420 42420 1
+1 42421 1
+42421 42421 1
+1 42422 1
+42422 42422 1
+1 42423 1
+42423 42423 1
+1 42424 1
+42424 42424 1
+1 42425 1
+42425 42425 1
+1 42426 1
+42426 42426 1
+1 42427 1
+42427 42427 1
+1 42428 1
+42428 42428 1
+1 42429 1
+42429 42429 1
+1 42430 1
+42430 42430 1
+1 42431 1
+42431 42431 1
+1 42432 1
+42432 42432 1
+1 42433 1
+42433 42433 1
+1 42434 1
+42434 42434 1
+1 42435 1
+42435 42435 1
+1 42436 1
+42436 42436 1
+1 42437 1
+42437 42437 1
+1 42438 1
+42438 42438 1
+1 42439 1
+42439 42439 1
+1 42440 1
+42440 42440 1
+1 42441 1
+42441 42441 1
+1 42442 1
+42442 42442 1
+1 42443 1
+42443 42443 1
+1 42444 1
+42444 42444 1
+1 42445 1
+42445 42445 1
+1 42446 1
+42446 42446 1
+1 42447 1
+42447 42447 1
+1 42448 1
+42448 42448 1
+1 42449 1
+42449 42449 1
+1 42450 1
+42450 42450 1
+1 42451 1
+42451 42451 1
+1 42452 1
+42452 42452 1
+1 42453 1
+42453 42453 1
+1 42454 1
+42454 42454 1
+1 42455 1
+42455 42455 1
+1 42456 1
+42456 42456 1
+1 42457 1
+42457 42457 1
+1 42458 1
+42458 42458 1
+1 42459 1
+42459 42459 1
+1 42460 1
+42460 42460 1
+1 42461 1
+42461 42461 1
+1 42462 1
+42462 42462 1
+1 42463 1
+42463 42463 1
+1 42464 1
+42464 42464 1
+1 42465 1
+42465 42465 1
+1 42466 1
+42466 42466 1
+1 42467 1
+42467 42467 1
+1 42468 1
+42468 42468 1
+1 42469 1
+42469 42469 1
+1 42470 1
+42470 42470 1
+1 42471 1
+42471 42471 1
+1 42472 1
+42472 42472 1
+1 42473 1
+42473 42473 1
+1 42474 1
+42474 42474 1
+1 42475 1
+42475 42475 1
+1 42476 1
+42476 42476 1
+1 42477 1
+42477 42477 1
+1 42478 1
+42478 42478 1
+1 42479 1
+42479 42479 1
+1 42480 1
+42480 42480 1
+1 42481 1
+42481 42481 1
+1 42482 1
+42482 42482 1
+1 42483 1
+42483 42483 1
+1 42484 1
+42484 42484 1
+1 42485 1
+42485 42485 1
+1 42486 1
+42486 42486 1
+1 42487 1
+42487 42487 1
+1 42488 1
+42488 42488 1
+1 42489 1
+42489 42489 1
+1 42490 1
+42490 42490 1
+1 42491 1
+42491 42491 1
+1 42492 1
+42492 42492 1
+1 42493 1
+42493 42493 1
+1 42494 1
+42494 42494 1
+1 42495 1
+42495 42495 1
+1 42496 1
+42496 42496 1
+1 42497 1
+42497 42497 1
+1 42498 1
+42498 42498 1
+1 42499 1
+42499 42499 1
+1 42500 1
+42500 42500 1
+1 42501 1
+42501 42501 1
+1 42502 1
+42502 42502 1
+1 42503 1
+42503 42503 1
+1 42504 1
+42504 42504 1
+1 42505 1
+42505 42505 1
+1 42506 1
+42506 42506 1
+1 42507 1
+42507 42507 1
+1 42508 1
+42508 42508 1
+1 42509 1
+42509 42509 1
+1 42510 1
+42510 42510 1
+1 42511 1
+42511 42511 1
+1 42512 1
+42512 42512 1
+1 42513 1
+42513 42513 1
+1 42514 1
+42514 42514 1
+1 42515 1
+42515 42515 1
+1 42516 1
+42516 42516 1
+1 42517 1
+42517 42517 1
+1 42518 1
+42518 42518 1
+1 42519 1
+42519 42519 1
+1 42520 1
+42520 42520 1
+1 42521 1
+42521 42521 1
+1 42522 1
+42522 42522 1
+1 42523 1
+42523 42523 1
+1 42524 1
+42524 42524 1
+1 42525 1
+42525 42525 1
+1 42526 1
+42526 42526 1
+1 42527 1
+42527 42527 1
+1 42528 1
+42528 42528 1
+1 42529 1
+42529 42529 1
+1 42530 1
+42530 42530 1
+1 42531 1
+42531 42531 1
+1 42532 1
+42532 42532 1
+1 42533 1
+42533 42533 1
+1 42534 1
+42534 42534 1
+1 42535 1
+42535 42535 1
+1 42536 1
+42536 42536 1
+1 42537 1
+42537 42537 1
+1 42538 1
+42538 42538 1
+1 42539 1
+42539 42539 1
+1 42540 1
+42540 42540 1
+1 42541 1
+42541 42541 1
+1 42542 1
+42542 42542 1
+1 42543 1
+42543 42543 1
+1 42544 1
+42544 42544 1
+1 42545 1
+42545 42545 1
+1 42546 1
+42546 42546 1
+1 42547 1
+42547 42547 1
+1 42548 1
+42548 42548 1
+1 42549 1
+42549 42549 1
+1 42550 1
+42550 42550 1
+1 42551 1
+42551 42551 1
+1 42552 1
+42552 42552 1
+1 42553 1
+42553 42553 1
+1 42554 1
+42554 42554 1
+1 42555 1
+42555 42555 1
+1 42556 1
+42556 42556 1
+1 42557 1
+42557 42557 1
+1 42558 1
+42558 42558 1
+1 42559 1
+42559 42559 1
+1 42560 1
+42560 42560 1
+1 42561 1
+42561 42561 1
+1 42562 1
+42562 42562 1
+1 42563 1
+42563 42563 1
+1 42564 1
+42564 42564 1
+1 42565 1
+42565 42565 1
+1 42566 1
+42566 42566 1
+1 42567 1
+42567 42567 1
+1 42568 1
+42568 42568 1
+1 42569 1
+42569 42569 1
+1 42570 1
+42570 42570 1
+1 42571 1
+42571 42571 1
+1 42572 1
+42572 42572 1
+1 42573 1
+42573 42573 1
+1 42574 1
+42574 42574 1
+1 42575 1
+42575 42575 1
+1 42576 1
+42576 42576 1
+1 42577 1
+42577 42577 1
+1 42578 1
+42578 42578 1
+1 42579 1
+42579 42579 1
+1 42580 1
+42580 42580 1
+1 42581 1
+42581 42581 1
+1 42582 1
+42582 42582 1
+1 42583 1
+42583 42583 1
+1 42584 1
+42584 42584 1
+1 42585 1
+42585 42585 1
+1 42586 1
+42586 42586 1
+1 42587 1
+42587 42587 1
+1 42588 1
+42588 42588 1
+1 42589 1
+42589 42589 1
+1 42590 1
+42590 42590 1
+1 42591 1
+42591 42591 1
+1 42592 1
+42592 42592 1
+1 42593 1
+42593 42593 1
+1 42594 1
+42594 42594 1
+1 42595 1
+42595 42595 1
+1 42596 1
+42596 42596 1
+1 42597 1
+42597 42597 1
+1 42598 1
+42598 42598 1
+1 42599 1
+42599 42599 1
+1 42600 1
+42600 42600 1
+1 42601 1
+42601 42601 1
+1 42602 1
+42602 42602 1
+1 42603 1
+42603 42603 1
+1 42604 1
+42604 42604 1
+1 42605 1
+42605 42605 1
+1 42606 1
+42606 42606 1
+1 42607 1
+42607 42607 1
+1 42608 1
+42608 42608 1
+1 42609 1
+42609 42609 1
+1 42610 1
+42610 42610 1
+1 42611 1
+42611 42611 1
+1 42612 1
+42612 42612 1
+1 42613 1
+42613 42613 1
+1 42614 1
+42614 42614 1
+1 42615 1
+42615 42615 1
+1 42616 1
+42616 42616 1
+1 42617 1
+42617 42617 1
+1 42618 1
+42618 42618 1
+1 42619 1
+42619 42619 1
+1 42620 1
+42620 42620 1
+1 42621 1
+42621 42621 1
+1 42622 1
+42622 42622 1
+1 42623 1
+42623 42623 1
+1 42624 1
+42624 42624 1
+1 42625 1
+42625 42625 1
+1 42626 1
+42626 42626 1
+1 42627 1
+42627 42627 1
+1 42628 1
+42628 42628 1
+1 42629 1
+42629 42629 1
+1 42630 1
+42630 42630 1
+1 42631 1
+42631 42631 1
+1 42632 1
+42632 42632 1
+1 42633 1
+42633 42633 1
+1 42634 1
+42634 42634 1
+1 42635 1
+42635 42635 1
+1 42636 1
+42636 42636 1
+1 42637 1
+42637 42637 1
+1 42638 1
+42638 42638 1
+1 42639 1
+42639 42639 1
+1 42640 1
+42640 42640 1
+1 42641 1
+42641 42641 1
+1 42642 1
+42642 42642 1
+1 42643 1
+42643 42643 1
+1 42644 1
+42644 42644 1
+1 42645 1
+42645 42645 1
+1 42646 1
+42646 42646 1
+1 42647 1
+42647 42647 1
+1 42648 1
+42648 42648 1
+1 42649 1
+42649 42649 1
+1 42650 1
+42650 42650 1
+1 42651 1
+42651 42651 1
+1 42652 1
+42652 42652 1
+1 42653 1
+42653 42653 1
+1 42654 1
+42654 42654 1
+1 42655 1
+42655 42655 1
+1 42656 1
+42656 42656 1
+1 42657 1
+42657 42657 1
+1 42658 1
+42658 42658 1
+1 42659 1
+42659 42659 1
+1 42660 1
+42660 42660 1
+1 42661 1
+42661 42661 1
+1 42662 1
+42662 42662 1
+1 42663 1
+42663 42663 1
+1 42664 1
+42664 42664 1
+1 42665 1
+42665 42665 1
+1 42666 1
+42666 42666 1
+1 42667 1
+42667 42667 1
+1 42668 1
+42668 42668 1
+1 42669 1
+42669 42669 1
+1 42670 1
+42670 42670 1
+1 42671 1
+42671 42671 1
+1 42672 1
+42672 42672 1
+1 42673 1
+42673 42673 1
+1 42674 1
+42674 42674 1
+1 42675 1
+42675 42675 1
+1 42676 1
+42676 42676 1
+1 42677 1
+42677 42677 1
+1 42678 1
+42678 42678 1
+1 42679 1
+42679 42679 1
+1 42680 1
+42680 42680 1
+1 42681 1
+42681 42681 1
+1 42682 1
+42682 42682 1
+1 42683 1
+42683 42683 1
+1 42684 1
+42684 42684 1
+1 42685 1
+42685 42685 1
+1 42686 1
+42686 42686 1
+1 42687 1
+42687 42687 1
+1 42688 1
+42688 42688 1
+1 42689 1
+42689 42689 1
+1 42690 1
+42690 42690 1
+1 42691 1
+42691 42691 1
+1 42692 1
+42692 42692 1
+1 42693 1
+42693 42693 1
+1 42694 1
+42694 42694 1
+1 42695 1
+42695 42695 1
+1 42696 1
+42696 42696 1
+1 42697 1
+42697 42697 1
+1 42698 1
+42698 42698 1
+1 42699 1
+42699 42699 1
+1 42700 1
+42700 42700 1
+1 42701 1
+42701 42701 1
+1 42702 1
+42702 42702 1
+1 42703 1
+42703 42703 1
+1 42704 1
+42704 42704 1
+1 42705 1
+42705 42705 1
+1 42706 1
+42706 42706 1
+1 42707 1
+42707 42707 1
+1 42708 1
+42708 42708 1
+1 42709 1
+42709 42709 1
+1 42710 1
+42710 42710 1
+1 42711 1
+42711 42711 1
+1 42712 1
+42712 42712 1
+1 42713 1
+42713 42713 1
+1 42714 1
+42714 42714 1
+1 42715 1
+42715 42715 1
+1 42716 1
+42716 42716 1
+1 42717 1
+42717 42717 1
+1 42718 1
+42718 42718 1
+1 42719 1
+42719 42719 1
+1 42720 1
+42720 42720 1
+1 42721 1
+42721 42721 1
+1 42722 1
+42722 42722 1
+1 42723 1
+42723 42723 1
+1 42724 1
+42724 42724 1
+1 42725 1
+42725 42725 1
+1 42726 1
+42726 42726 1
+1 42727 1
+42727 42727 1
+1 42728 1
+42728 42728 1
+1 42729 1
+42729 42729 1
+1 42730 1
+42730 42730 1
+1 42731 1
+42731 42731 1
+1 42732 1
+42732 42732 1
+1 42733 1
+42733 42733 1
+1 42734 1
+42734 42734 1
+1 42735 1
+42735 42735 1
+1 42736 1
+42736 42736 1
+1 42737 1
+42737 42737 1
+1 42738 1
+42738 42738 1
+1 42739 1
+42739 42739 1
+1 42740 1
+42740 42740 1
+1 42741 1
+42741 42741 1
+1 42742 1
+42742 42742 1
+1 42743 1
+42743 42743 1
+1 42744 1
+42744 42744 1
+1 42745 1
+42745 42745 1
+1 42746 1
+42746 42746 1
+1 42747 1
+42747 42747 1
+1 42748 1
+42748 42748 1
+1 42749 1
+42749 42749 1
+1 42750 1
+42750 42750 1
+1 42751 1
+42751 42751 1
+1 42752 1
+42752 42752 1
+1 42753 1
+42753 42753 1
+1 42754 1
+42754 42754 1
+1 42755 1
+42755 42755 1
+1 42756 1
+42756 42756 1
+1 42757 1
+42757 42757 1
+1 42758 1
+42758 42758 1
+1 42759 1
+42759 42759 1
+1 42760 1
+42760 42760 1
+1 42761 1
+42761 42761 1
+1 42762 1
+42762 42762 1
+1 42763 1
+42763 42763 1
+1 42764 1
+42764 42764 1
+1 42765 1
+42765 42765 1
+1 42766 1
+42766 42766 1
+1 42767 1
+42767 42767 1
+1 42768 1
+42768 42768 1
+1 42769 1
+42769 42769 1
+1 42770 1
+42770 42770 1
+1 42771 1
+42771 42771 1
+1 42772 1
+42772 42772 1
+1 42773 1
+42773 42773 1
+1 42774 1
+42774 42774 1
+1 42775 1
+42775 42775 1
+1 42776 1
+42776 42776 1
+1 42777 1
+42777 42777 1
+1 42778 1
+42778 42778 1
+1 42779 1
+42779 42779 1
+1 42780 1
+42780 42780 1
+1 42781 1
+42781 42781 1
+1 42782 1
+42782 42782 1
+1 42783 1
+42783 42783 1
+1 42784 1
+42784 42784 1
+1 42785 1
+42785 42785 1
+1 42786 1
+42786 42786 1
+1 42787 1
+42787 42787 1
+1 42788 1
+42788 42788 1
+1 42789 1
+42789 42789 1
+1 42790 1
+42790 42790 1
+1 42791 1
+42791 42791 1
+1 42792 1
+42792 42792 1
+1 42793 1
+42793 42793 1
+1 42794 1
+42794 42794 1
+1 42795 1
+42795 42795 1
+1 42796 1
+42796 42796 1
+1 42797 1
+42797 42797 1
+1 42798 1
+42798 42798 1
+1 42799 1
+42799 42799 1
+1 42800 1
+42800 42800 1
+1 42801 1
+42801 42801 1
+1 42802 1
+42802 42802 1
+1 42803 1
+42803 42803 1
+1 42804 1
+42804 42804 1
+1 42805 1
+42805 42805 1
+1 42806 1
+42806 42806 1
+1 42807 1
+42807 42807 1
+1 42808 1
+42808 42808 1
+1 42809 1
+42809 42809 1
+1 42810 1
+42810 42810 1
+1 42811 1
+42811 42811 1
+1 42812 1
+42812 42812 1
+1 42813 1
+42813 42813 1
+1 42814 1
+42814 42814 1
+1 42815 1
+42815 42815 1
+1 42816 1
+42816 42816 1
+1 42817 1
+42817 42817 1
+1 42818 1
+42818 42818 1
+1 42819 1
+42819 42819 1
+1 42820 1
+42820 42820 1
+1 42821 1
+42821 42821 1
+1 42822 1
+42822 42822 1
+1 42823 1
+42823 42823 1
+1 42824 1
+42824 42824 1
+1 42825 1
+42825 42825 1
+1 42826 1
+42826 42826 1
+1 42827 1
+42827 42827 1
+1 42828 1
+42828 42828 1
+1 42829 1
+42829 42829 1
+1 42830 1
+42830 42830 1
+1 42831 1
+42831 42831 1
+1 42832 1
+42832 42832 1
+1 42833 1
+42833 42833 1
+1 42834 1
+42834 42834 1
+1 42835 1
+42835 42835 1
+1 42836 1
+42836 42836 1
+1 42837 1
+42837 42837 1
+1 42838 1
+42838 42838 1
+1 42839 1
+42839 42839 1
+1 42840 1
+42840 42840 1
+1 42841 1
+42841 42841 1
+1 42842 1
+42842 42842 1
+1 42843 1
+42843 42843 1
+1 42844 1
+42844 42844 1
+1 42845 1
+42845 42845 1
+1 42846 1
+42846 42846 1
+1 42847 1
+42847 42847 1
+1 42848 1
+42848 42848 1
+1 42849 1
+42849 42849 1
+1 42850 1
+42850 42850 1
+1 42851 1
+42851 42851 1
+1 42852 1
+42852 42852 1
+1 42853 1
+42853 42853 1
+1 42854 1
+42854 42854 1
+1 42855 1
+42855 42855 1
+1 42856 1
+42856 42856 1
+1 42857 1
+42857 42857 1
+1 42858 1
+42858 42858 1
+1 42859 1
+42859 42859 1
+1 42860 1
+42860 42860 1
+1 42861 1
+42861 42861 1
+1 42862 1
+42862 42862 1
+1 42863 1
+42863 42863 1
+1 42864 1
+42864 42864 1
+1 42865 1
+42865 42865 1
+1 42866 1
+42866 42866 1
+1 42867 1
+42867 42867 1
+1 42868 1
+42868 42868 1
+1 42869 1
+42869 42869 1
+1 42870 1
+42870 42870 1
+1 42871 1
+42871 42871 1
+1 42872 1
+42872 42872 1
+1 42873 1
+42873 42873 1
+1 42874 1
+42874 42874 1
+1 42875 1
+42875 42875 1
+1 42876 1
+42876 42876 1
+1 42877 1
+42877 42877 1
+1 42878 1
+42878 42878 1
+1 42879 1
+42879 42879 1
+1 42880 1
+42880 42880 1
+1 42881 1
+42881 42881 1
+1 42882 1
+42882 42882 1
+1 42883 1
+42883 42883 1
+1 42884 1
+42884 42884 1
+1 42885 1
+42885 42885 1
+1 42886 1
+42886 42886 1
+1 42887 1
+42887 42887 1
+1 42888 1
+42888 42888 1
+1 42889 1
+42889 42889 1
+1 42890 1
+42890 42890 1
+1 42891 1
+42891 42891 1
+1 42892 1
+42892 42892 1
+1 42893 1
+42893 42893 1
+1 42894 1
+42894 42894 1
+1 42895 1
+42895 42895 1
+1 42896 1
+42896 42896 1
+1 42897 1
+42897 42897 1
+1 42898 1
+42898 42898 1
+1 42899 1
+42899 42899 1
+1 42900 1
+42900 42900 1
+1 42901 1
+42901 42901 1
+1 42902 1
+42902 42902 1
+1 42903 1
+42903 42903 1
+1 42904 1
+42904 42904 1
+1 42905 1
+42905 42905 1
+1 42906 1
+42906 42906 1
+1 42907 1
+42907 42907 1
+1 42908 1
+42908 42908 1
+1 42909 1
+42909 42909 1
+1 42910 1
+42910 42910 1
+1 42911 1
+42911 42911 1
+1 42912 1
+42912 42912 1
+1 42913 1
+42913 42913 1
+1 42914 1
+42914 42914 1
+1 42915 1
+42915 42915 1
+1 42916 1
+42916 42916 1
+1 42917 1
+42917 42917 1
+1 42918 1
+42918 42918 1
+1 42919 1
+42919 42919 1
+1 42920 1
+42920 42920 1
+1 42921 1
+42921 42921 1
+1 42922 1
+42922 42922 1
+1 42923 1
+42923 42923 1
+1 42924 1
+42924 42924 1
+1 42925 1
+42925 42925 1
+1 42926 1
+42926 42926 1
+1 42927 1
+42927 42927 1
+1 42928 1
+42928 42928 1
+1 42929 1
+42929 42929 1
+1 42930 1
+42930 42930 1
+1 42931 1
+42931 42931 1
+1 42932 1
+42932 42932 1
+1 42933 1
+42933 42933 1
+1 42934 1
+42934 42934 1
+1 42935 1
+42935 42935 1
+1 42936 1
+42936 42936 1
+1 42937 1
+42937 42937 1
+1 42938 1
+42938 42938 1
+1 42939 1
+42939 42939 1
+1 42940 1
+42940 42940 1
+1 42941 1
+42941 42941 1
+1 42942 1
+42942 42942 1
+1 42943 1
+42943 42943 1
+1 42944 1
+42944 42944 1
+1 42945 1
+42945 42945 1
+1 42946 1
+42946 42946 1
+1 42947 1
+42947 42947 1
+1 42948 1
+42948 42948 1
+1 42949 1
+42949 42949 1
+1 42950 1
+42950 42950 1
+1 42951 1
+42951 42951 1
+1 42952 1
+42952 42952 1
+1 42953 1
+42953 42953 1
+1 42954 1
+42954 42954 1
+1 42955 1
+42955 42955 1
+1 42956 1
+42956 42956 1
+1 42957 1
+42957 42957 1
+1 42958 1
+42958 42958 1
+1 42959 1
+42959 42959 1
+1 42960 1
+42960 42960 1
+1 42961 1
+42961 42961 1
+1 42962 1
+42962 42962 1
+1 42963 1
+42963 42963 1
+1 42964 1
+42964 42964 1
+1 42965 1
+42965 42965 1
+1 42966 1
+42966 42966 1
+1 42967 1
+42967 42967 1
+1 42968 1
+42968 42968 1
+1 42969 1
+42969 42969 1
+1 42970 1
+42970 42970 1
+1 42971 1
+42971 42971 1
+1 42972 1
+42972 42972 1
+1 42973 1
+42973 42973 1
+1 42974 1
+42974 42974 1
+1 42975 1
+42975 42975 1
+1 42976 1
+42976 42976 1
+1 42977 1
+42977 42977 1
+1 42978 1
+42978 42978 1
+1 42979 1
+42979 42979 1
+1 42980 1
+42980 42980 1
+1 42981 1
+42981 42981 1
+1 42982 1
+42982 42982 1
+1 42983 1
+42983 42983 1
+1 42984 1
+42984 42984 1
+1 42985 1
+42985 42985 1
+1 42986 1
+42986 42986 1
+1 42987 1
+42987 42987 1
+1 42988 1
+42988 42988 1
+1 42989 1
+42989 42989 1
+1 42990 1
+42990 42990 1
+1 42991 1
+42991 42991 1
+1 42992 1
+42992 42992 1
+1 42993 1
+42993 42993 1
+1 42994 1
+42994 42994 1
+1 42995 1
+42995 42995 1
+1 42996 1
+42996 42996 1
+1 42997 1
+42997 42997 1
+1 42998 1
+42998 42998 1
+1 42999 1
+42999 42999 1
+1 43000 1
+43000 43000 1
+1 43001 1
+43001 43001 1
+1 43002 1
+43002 43002 1
+1 43003 1
+43003 43003 1
+1 43004 1
+43004 43004 1
+1 43005 1
+43005 43005 1
+1 43006 1
+43006 43006 1
+1 43007 1
+43007 43007 1
+1 43008 1
+43008 43008 1
+1 43009 1
+43009 43009 1
+1 43010 1
+43010 43010 1
+1 43011 1
+43011 43011 1
+1 43012 1
+43012 43012 1
+1 43013 1
+43013 43013 1
+1 43014 1
+43014 43014 1
+1 43015 1
+43015 43015 1
+1 43016 1
+43016 43016 1
+1 43017 1
+43017 43017 1
+1 43018 1
+43018 43018 1
+1 43019 1
+43019 43019 1
+1 43020 1
+43020 43020 1
+1 43021 1
+43021 43021 1
+1 43022 1
+43022 43022 1
+1 43023 1
+43023 43023 1
+1 43024 1
+43024 43024 1
+1 43025 1
+43025 43025 1
+1 43026 1
+43026 43026 1
+1 43027 1
+43027 43027 1
+1 43028 1
+43028 43028 1
+1 43029 1
+43029 43029 1
+1 43030 1
+43030 43030 1
+1 43031 1
+43031 43031 1
+1 43032 1
+43032 43032 1
+1 43033 1
+43033 43033 1
+1 43034 1
+43034 43034 1
+1 43035 1
+43035 43035 1
+1 43036 1
+43036 43036 1
+1 43037 1
+43037 43037 1
+1 43038 1
+43038 43038 1
+1 43039 1
+43039 43039 1
+1 43040 1
+43040 43040 1
+1 43041 1
+43041 43041 1
+1 43042 1
+43042 43042 1
+1 43043 1
+43043 43043 1
+1 43044 1
+43044 43044 1
+1 43045 1
+43045 43045 1
+1 43046 1
+43046 43046 1
+1 43047 1
+43047 43047 1
+1 43048 1
+43048 43048 1
+1 43049 1
+43049 43049 1
+1 43050 1
+43050 43050 1
+1 43051 1
+43051 43051 1
+1 43052 1
+43052 43052 1
+1 43053 1
+43053 43053 1
+1 43054 1
+43054 43054 1
+1 43055 1
+43055 43055 1
+1 43056 1
+43056 43056 1
+1 43057 1
+43057 43057 1
+1 43058 1
+43058 43058 1
+1 43059 1
+43059 43059 1
+1 43060 1
+43060 43060 1
+1 43061 1
+43061 43061 1
+1 43062 1
+43062 43062 1
+1 43063 1
+43063 43063 1
+1 43064 1
+43064 43064 1
+1 43065 1
+43065 43065 1
+1 43066 1
+43066 43066 1
+1 43067 1
+43067 43067 1
+1 43068 1
+43068 43068 1
+1 43069 1
+43069 43069 1
+1 43070 1
+43070 43070 1
+1 43071 1
+43071 43071 1
+1 43072 1
+43072 43072 1
+1 43073 1
+43073 43073 1
+1 43074 1
+43074 43074 1
+1 43075 1
+43075 43075 1
+1 43076 1
+43076 43076 1
+1 43077 1
+43077 43077 1
+1 43078 1
+43078 43078 1
+1 43079 1
+43079 43079 1
+1 43080 1
+43080 43080 1
+1 43081 1
+43081 43081 1
+1 43082 1
+43082 43082 1
+1 43083 1
+43083 43083 1
+1 43084 1
+43084 43084 1
+1 43085 1
+43085 43085 1
+1 43086 1
+43086 43086 1
+1 43087 1
+43087 43087 1
+1 43088 1
+43088 43088 1
+1 43089 1
+43089 43089 1
+1 43090 1
+43090 43090 1
+1 43091 1
+43091 43091 1
+1 43092 1
+43092 43092 1
+1 43093 1
+43093 43093 1
+1 43094 1
+43094 43094 1
+1 43095 1
+43095 43095 1
+1 43096 1
+43096 43096 1
+1 43097 1
+43097 43097 1
+1 43098 1
+43098 43098 1
+1 43099 1
+43099 43099 1
+1 43100 1
+43100 43100 1
+1 43101 1
+43101 43101 1
+1 43102 1
+43102 43102 1
+1 43103 1
+43103 43103 1
+1 43104 1
+43104 43104 1
+1 43105 1
+43105 43105 1
+1 43106 1
+43106 43106 1
+1 43107 1
+43107 43107 1
+1 43108 1
+43108 43108 1
+1 43109 1
+43109 43109 1
+1 43110 1
+43110 43110 1
+1 43111 1
+43111 43111 1
+1 43112 1
+43112 43112 1
+1 43113 1
+43113 43113 1
+1 43114 1
+43114 43114 1
+1 43115 1
+43115 43115 1
+1 43116 1
+43116 43116 1
+1 43117 1
+43117 43117 1
+1 43118 1
+43118 43118 1
+1 43119 1
+43119 43119 1
+1 43120 1
+43120 43120 1
+1 43121 1
+43121 43121 1
+1 43122 1
+43122 43122 1
+1 43123 1
+43123 43123 1
+1 43124 1
+43124 43124 1
+1 43125 1
+43125 43125 1
+1 43126 1
+43126 43126 1
+1 43127 1
+43127 43127 1
+1 43128 1
+43128 43128 1
+1 43129 1
+43129 43129 1
+1 43130 1
+43130 43130 1
+1 43131 1
+43131 43131 1
+1 43132 1
+43132 43132 1
+1 43133 1
+43133 43133 1
+1 43134 1
+43134 43134 1
+1 43135 1
+43135 43135 1
+1 43136 1
+43136 43136 1
+1 43137 1
+43137 43137 1
+1 43138 1
+43138 43138 1
+1 43139 1
+43139 43139 1
+1 43140 1
+43140 43140 1
+1 43141 1
+43141 43141 1
+1 43142 1
+43142 43142 1
+1 43143 1
+43143 43143 1
+1 43144 1
+43144 43144 1
+1 43145 1
+43145 43145 1
+1 43146 1
+43146 43146 1
+1 43147 1
+43147 43147 1
+1 43148 1
+43148 43148 1
+1 43149 1
+43149 43149 1
+1 43150 1
+43150 43150 1
+1 43151 1
+43151 43151 1
+1 43152 1
+43152 43152 1
+1 43153 1
+43153 43153 1
+1 43154 1
+43154 43154 1
+1 43155 1
+43155 43155 1
+1 43156 1
+43156 43156 1
+1 43157 1
+43157 43157 1
+1 43158 1
+43158 43158 1
+1 43159 1
+43159 43159 1
+1 43160 1
+43160 43160 1
+1 43161 1
+43161 43161 1
+1 43162 1
+43162 43162 1
+1 43163 1
+43163 43163 1
+1 43164 1
+43164 43164 1
+1 43165 1
+43165 43165 1
+1 43166 1
+43166 43166 1
+1 43167 1
+43167 43167 1
+1 43168 1
+43168 43168 1
+1 43169 1
+43169 43169 1
+1 43170 1
+43170 43170 1
+1 43171 1
+43171 43171 1
+1 43172 1
+43172 43172 1
+1 43173 1
+43173 43173 1
+1 43174 1
+43174 43174 1
+1 43175 1
+43175 43175 1
+1 43176 1
+43176 43176 1
+1 43177 1
+43177 43177 1
+1 43178 1
+43178 43178 1
+1 43179 1
+43179 43179 1
+1 43180 1
+43180 43180 1
+1 43181 1
+43181 43181 1
+1 43182 1
+43182 43182 1
+1 43183 1
+43183 43183 1
+1 43184 1
+43184 43184 1
+1 43185 1
+43185 43185 1
+1 43186 1
+43186 43186 1
+1 43187 1
+43187 43187 1
+1 43188 1
+43188 43188 1
+1 43189 1
+43189 43189 1
+1 43190 1
+43190 43190 1
+1 43191 1
+43191 43191 1
+1 43192 1
+43192 43192 1
+1 43193 1
+43193 43193 1
+1 43194 1
+43194 43194 1
+1 43195 1
+43195 43195 1
+1 43196 1
+43196 43196 1
+1 43197 1
+43197 43197 1
+1 43198 1
+43198 43198 1
+1 43199 1
+43199 43199 1
+1 43200 1
+43200 43200 1
+1 43201 1
+43201 43201 1
+1 43202 1
+43202 43202 1
+1 43203 1
+43203 43203 1
+1 43204 1
+43204 43204 1
+1 43205 1
+43205 43205 1
+1 43206 1
+43206 43206 1
+1 43207 1
+43207 43207 1
+1 43208 1
+43208 43208 1
+1 43209 1
+43209 43209 1
+1 43210 1
+43210 43210 1
+1 43211 1
+43211 43211 1
+1 43212 1
+43212 43212 1
+1 43213 1
+43213 43213 1
+1 43214 1
+43214 43214 1
+1 43215 1
+43215 43215 1
+1 43216 1
+43216 43216 1
+1 43217 1
+43217 43217 1
+1 43218 1
+43218 43218 1
+1 43219 1
+43219 43219 1
+1 43220 1
+43220 43220 1
+1 43221 1
+43221 43221 1
+1 43222 1
+43222 43222 1
+1 43223 1
+43223 43223 1
+1 43224 1
+43224 43224 1
+1 43225 1
+43225 43225 1
+1 43226 1
+43226 43226 1
+1 43227 1
+43227 43227 1
+1 43228 1
+43228 43228 1
+1 43229 1
+43229 43229 1
+1 43230 1
+43230 43230 1
+1 43231 1
+43231 43231 1
+1 43232 1
+43232 43232 1
+1 43233 1
+43233 43233 1
+1 43234 1
+43234 43234 1
+1 43235 1
+43235 43235 1
+1 43236 1
+43236 43236 1
+1 43237 1
+43237 43237 1
+1 43238 1
+43238 43238 1
+1 43239 1
+43239 43239 1
+1 43240 1
+43240 43240 1
+1 43241 1
+43241 43241 1
+1 43242 1
+43242 43242 1
+1 43243 1
+43243 43243 1
+1 43244 1
+43244 43244 1
+1 43245 1
+43245 43245 1
+1 43246 1
+43246 43246 1
+1 43247 1
+43247 43247 1
+1 43248 1
+43248 43248 1
+1 43249 1
+43249 43249 1
+1 43250 1
+43250 43250 1
+1 43251 1
+43251 43251 1
+1 43252 1
+43252 43252 1
+1 43253 1
+43253 43253 1
+1 43254 1
+43254 43254 1
+1 43255 1
+43255 43255 1
+1 43256 1
+43256 43256 1
+1 43257 1
+43257 43257 1
+1 43258 1
+43258 43258 1
+1 43259 1
+43259 43259 1
+1 43260 1
+43260 43260 1
+1 43261 1
+43261 43261 1
+1 43262 1
+43262 43262 1
+1 43263 1
+43263 43263 1
+1 43264 1
+43264 43264 1
+1 43265 1
+43265 43265 1
+1 43266 1
+43266 43266 1
+1 43267 1
+43267 43267 1
+1 43268 1
+43268 43268 1
+1 43269 1
+43269 43269 1
+1 43270 1
+43270 43270 1
+1 43271 1
+43271 43271 1
+1 43272 1
+43272 43272 1
+1 43273 1
+43273 43273 1
+1 43274 1
+43274 43274 1
+1 43275 1
+43275 43275 1
+1 43276 1
+43276 43276 1
+1 43277 1
+43277 43277 1
+1 43278 1
+43278 43278 1
+1 43279 1
+43279 43279 1
+1 43280 1
+43280 43280 1
+1 43281 1
+43281 43281 1
+1 43282 1
+43282 43282 1
+1 43283 1
+43283 43283 1
+1 43284 1
+43284 43284 1
+1 43285 1
+43285 43285 1
+1 43286 1
+43286 43286 1
+1 43287 1
+43287 43287 1
+1 43288 1
+43288 43288 1
+1 43289 1
+43289 43289 1
+1 43290 1
+43290 43290 1
+1 43291 1
+43291 43291 1
+1 43292 1
+43292 43292 1
+1 43293 1
+43293 43293 1
+1 43294 1
+43294 43294 1
+1 43295 1
+43295 43295 1
+1 43296 1
+43296 43296 1
+1 43297 1
+43297 43297 1
+1 43298 1
+43298 43298 1
+1 43299 1
+43299 43299 1
+1 43300 1
+43300 43300 1
+1 43301 1
+43301 43301 1
+1 43302 1
+43302 43302 1
+1 43303 1
+43303 43303 1
+1 43304 1
+43304 43304 1
+1 43305 1
+43305 43305 1
+1 43306 1
+43306 43306 1
+1 43307 1
+43307 43307 1
+1 43308 1
+43308 43308 1
+1 43309 1
+43309 43309 1
+1 43310 1
+43310 43310 1
+1 43311 1
+43311 43311 1
+1 43312 1
+43312 43312 1
+1 43313 1
+43313 43313 1
+1 43314 1
+43314 43314 1
+1 43315 1
+43315 43315 1
+1 43316 1
+43316 43316 1
+1 43317 1
+43317 43317 1
+1 43318 1
+43318 43318 1
+1 43319 1
+43319 43319 1
+1 43320 1
+43320 43320 1
+1 43321 1
+43321 43321 1
+1 43322 1
+43322 43322 1
+1 43323 1
+43323 43323 1
+1 43324 1
+43324 43324 1
+1 43325 1
+43325 43325 1
+1 43326 1
+43326 43326 1
+1 43327 1
+43327 43327 1
+1 43328 1
+43328 43328 1
+1 43329 1
+43329 43329 1
+1 43330 1
+43330 43330 1
+1 43331 1
+43331 43331 1
+1 43332 1
+43332 43332 1
+1 43333 1
+43333 43333 1
+1 43334 1
+43334 43334 1
+1 43335 1
+43335 43335 1
+1 43336 1
+43336 43336 1
+1 43337 1
+43337 43337 1
+1 43338 1
+43338 43338 1
+1 43339 1
+43339 43339 1
+1 43340 1
+43340 43340 1
+1 43341 1
+43341 43341 1
+1 43342 1
+43342 43342 1
+1 43343 1
+43343 43343 1
+1 43344 1
+43344 43344 1
+1 43345 1
+43345 43345 1
+1 43346 1
+43346 43346 1
+1 43347 1
+43347 43347 1
+1 43348 1
+43348 43348 1
+1 43349 1
+43349 43349 1
+1 43350 1
+43350 43350 1
+1 43351 1
+43351 43351 1
+1 43352 1
+43352 43352 1
+1 43353 1
+43353 43353 1
+1 43354 1
+43354 43354 1
+1 43355 1
+43355 43355 1
+1 43356 1
+43356 43356 1
+1 43357 1
+43357 43357 1
+1 43358 1
+43358 43358 1
+1 43359 1
+43359 43359 1
+1 43360 1
+43360 43360 1
+1 43361 1
+43361 43361 1
+1 43362 1
+43362 43362 1
+1 43363 1
+43363 43363 1
+1 43364 1
+43364 43364 1
+1 43365 1
+43365 43365 1
+1 43366 1
+43366 43366 1
+1 43367 1
+43367 43367 1
+1 43368 1
+43368 43368 1
+1 43369 1
+43369 43369 1
+1 43370 1
+43370 43370 1
+1 43371 1
+43371 43371 1
+1 43372 1
+43372 43372 1
+1 43373 1
+43373 43373 1
+1 43374 1
+43374 43374 1
+1 43375 1
+43375 43375 1
+1 43376 1
+43376 43376 1
+1 43377 1
+43377 43377 1
+1 43378 1
+43378 43378 1
+1 43379 1
+43379 43379 1
+1 43380 1
+43380 43380 1
+1 43381 1
+43381 43381 1
+1 43382 1
+43382 43382 1
+1 43383 1
+43383 43383 1
+1 43384 1
+43384 43384 1
+1 43385 1
+43385 43385 1
+1 43386 1
+43386 43386 1
+1 43387 1
+43387 43387 1
+1 43388 1
+43388 43388 1
+1 43389 1
+43389 43389 1
+1 43390 1
+43390 43390 1
+1 43391 1
+43391 43391 1
+1 43392 1
+43392 43392 1
+1 43393 1
+43393 43393 1
+1 43394 1
+43394 43394 1
+1 43395 1
+43395 43395 1
+1 43396 1
+43396 43396 1
+1 43397 1
+43397 43397 1
+1 43398 1
+43398 43398 1
+1 43399 1
+43399 43399 1
+1 43400 1
+43400 43400 1
+1 43401 1
+43401 43401 1
+1 43402 1
+43402 43402 1
+1 43403 1
+43403 43403 1
+1 43404 1
+43404 43404 1
+1 43405 1
+43405 43405 1
+1 43406 1
+43406 43406 1
+1 43407 1
+43407 43407 1
+1 43408 1
+43408 43408 1
+1 43409 1
+43409 43409 1
+1 43410 1
+43410 43410 1
+1 43411 1
+43411 43411 1
+1 43412 1
+43412 43412 1
+1 43413 1
+43413 43413 1
+1 43414 1
+43414 43414 1
+1 43415 1
+43415 43415 1
+1 43416 1
+43416 43416 1
+1 43417 1
+43417 43417 1
+1 43418 1
+43418 43418 1
+1 43419 1
+43419 43419 1
+1 43420 1
+43420 43420 1
+1 43421 1
+43421 43421 1
+1 43422 1
+43422 43422 1
+1 43423 1
+43423 43423 1
+1 43424 1
+43424 43424 1
+1 43425 1
+43425 43425 1
+1 43426 1
+43426 43426 1
+1 43427 1
+43427 43427 1
+1 43428 1
+43428 43428 1
+1 43429 1
+43429 43429 1
+1 43430 1
+43430 43430 1
+1 43431 1
+43431 43431 1
+1 43432 1
+43432 43432 1
+1 43433 1
+43433 43433 1
+1 43434 1
+43434 43434 1
+1 43435 1
+43435 43435 1
+1 43436 1
+43436 43436 1
+1 43437 1
+43437 43437 1
+1 43438 1
+43438 43438 1
+1 43439 1
+43439 43439 1
+1 43440 1
+43440 43440 1
+1 43441 1
+43441 43441 1
+1 43442 1
+43442 43442 1
+1 43443 1
+43443 43443 1
+1 43444 1
+43444 43444 1
+1 43445 1
+43445 43445 1
+1 43446 1
+43446 43446 1
+1 43447 1
+43447 43447 1
+1 43448 1
+43448 43448 1
+1 43449 1
+43449 43449 1
+1 43450 1
+43450 43450 1
+1 43451 1
+43451 43451 1
+1 43452 1
+43452 43452 1
+1 43453 1
+43453 43453 1
+1 43454 1
+43454 43454 1
+1 43455 1
+43455 43455 1
+1 43456 1
+43456 43456 1
+1 43457 1
+43457 43457 1
+1 43458 1
+43458 43458 1
+1 43459 1
+43459 43459 1
+1 43460 1
+43460 43460 1
+1 43461 1
+43461 43461 1
+1 43462 1
+43462 43462 1
+1 43463 1
+43463 43463 1
+1 43464 1
+43464 43464 1
+1 43465 1
+43465 43465 1
+1 43466 1
+43466 43466 1
+1 43467 1
+43467 43467 1
+1 43468 1
+43468 43468 1
+1 43469 1
+43469 43469 1
+1 43470 1
+43470 43470 1
+1 43471 1
+43471 43471 1
+1 43472 1
+43472 43472 1
+1 43473 1
+43473 43473 1
+1 43474 1
+43474 43474 1
+1 43475 1
+43475 43475 1
+1 43476 1
+43476 43476 1
+1 43477 1
+43477 43477 1
+1 43478 1
+43478 43478 1
+1 43479 1
+43479 43479 1
+1 43480 1
+43480 43480 1
+1 43481 1
+43481 43481 1
+1 43482 1
+43482 43482 1
+1 43483 1
+43483 43483 1
+1 43484 1
+43484 43484 1
+1 43485 1
+43485 43485 1
+1 43486 1
+43486 43486 1
+1 43487 1
+43487 43487 1
+1 43488 1
+43488 43488 1
+1 43489 1
+43489 43489 1
+1 43490 1
+43490 43490 1
+1 43491 1
+43491 43491 1
+1 43492 1
+43492 43492 1
+1 43493 1
+43493 43493 1
+1 43494 1
+43494 43494 1
+1 43495 1
+43495 43495 1
+1 43496 1
+43496 43496 1
+1 43497 1
+43497 43497 1
+1 43498 1
+43498 43498 1
+1 43499 1
+43499 43499 1
+1 43500 1
+43500 43500 1
+1 43501 1
+43501 43501 1
+1 43502 1
+43502 43502 1
+1 43503 1
+43503 43503 1
+1 43504 1
+43504 43504 1
+1 43505 1
+43505 43505 1
+1 43506 1
+43506 43506 1
+1 43507 1
+43507 43507 1
+1 43508 1
+43508 43508 1
+1 43509 1
+43509 43509 1
+1 43510 1
+43510 43510 1
+1 43511 1
+43511 43511 1
+1 43512 1
+43512 43512 1
+1 43513 1
+43513 43513 1
+1 43514 1
+43514 43514 1
+1 43515 1
+43515 43515 1
+1 43516 1
+43516 43516 1
+1 43517 1
+43517 43517 1
+1 43518 1
+43518 43518 1
+1 43519 1
+43519 43519 1
+1 43520 1
+43520 43520 1
+1 43521 1
+43521 43521 1
+1 43522 1
+43522 43522 1
+1 43523 1
+43523 43523 1
+1 43524 1
+43524 43524 1
+1 43525 1
+43525 43525 1
+1 43526 1
+43526 43526 1
+1 43527 1
+43527 43527 1
+1 43528 1
+43528 43528 1
+1 43529 1
+43529 43529 1
+1 43530 1
+43530 43530 1
+1 43531 1
+43531 43531 1
+1 43532 1
+43532 43532 1
+1 43533 1
+43533 43533 1
+1 43534 1
+43534 43534 1
+1 43535 1
+43535 43535 1
+1 43536 1
+43536 43536 1
+1 43537 1
+43537 43537 1
+1 43538 1
+43538 43538 1
+1 43539 1
+43539 43539 1
+1 43540 1
+43540 43540 1
+1 43541 1
+43541 43541 1
+1 43542 1
+43542 43542 1
+1 43543 1
+43543 43543 1
+1 43544 1
+43544 43544 1
+1 43545 1
+43545 43545 1
+1 43546 1
+43546 43546 1
+1 43547 1
+43547 43547 1
+1 43548 1
+43548 43548 1
+1 43549 1
+43549 43549 1
+1 43550 1
+43550 43550 1
+1 43551 1
+43551 43551 1
+1 43552 1
+43552 43552 1
+1 43553 1
+43553 43553 1
+1 43554 1
+43554 43554 1
+1 43555 1
+43555 43555 1
+1 43556 1
+43556 43556 1
+1 43557 1
+43557 43557 1
+1 43558 1
+43558 43558 1
+1 43559 1
+43559 43559 1
+1 43560 1
+43560 43560 1
+1 43561 1
+43561 43561 1
+1 43562 1
+43562 43562 1
+1 43563 1
+43563 43563 1
+1 43564 1
+43564 43564 1
+1 43565 1
+43565 43565 1
+1 43566 1
+43566 43566 1
+1 43567 1
+43567 43567 1
+1 43568 1
+43568 43568 1
+1 43569 1
+43569 43569 1
+1 43570 1
+43570 43570 1
+1 43571 1
+43571 43571 1
+1 43572 1
+43572 43572 1
+1 43573 1
+43573 43573 1
+1 43574 1
+43574 43574 1
+1 43575 1
+43575 43575 1
+1 43576 1
+43576 43576 1
+1 43577 1
+43577 43577 1
+1 43578 1
+43578 43578 1
+1 43579 1
+43579 43579 1
+1 43580 1
+43580 43580 1
+1 43581 1
+43581 43581 1
+1 43582 1
+43582 43582 1
+1 43583 1
+43583 43583 1
+1 43584 1
+43584 43584 1
+1 43585 1
+43585 43585 1
+1 43586 1
+43586 43586 1
+1 43587 1
+43587 43587 1
+1 43588 1
+43588 43588 1
+1 43589 1
+43589 43589 1
+1 43590 1
+43590 43590 1
+1 43591 1
+43591 43591 1
+1 43592 1
+43592 43592 1
+1 43593 1
+43593 43593 1
+1 43594 1
+43594 43594 1
+1 43595 1
+43595 43595 1
+1 43596 1
+43596 43596 1
+1 43597 1
+43597 43597 1
+1 43598 1
+43598 43598 1
+1 43599 1
+43599 43599 1
+1 43600 1
+43600 43600 1
+1 43601 1
+43601 43601 1
+1 43602 1
+43602 43602 1
+1 43603 1
+43603 43603 1
+1 43604 1
+43604 43604 1
+1 43605 1
+43605 43605 1
+1 43606 1
+43606 43606 1
+1 43607 1
+43607 43607 1
+1 43608 1
+43608 43608 1
+1 43609 1
+43609 43609 1
+1 43610 1
+43610 43610 1
+1 43611 1
+43611 43611 1
+1 43612 1
+43612 43612 1
+1 43613 1
+43613 43613 1
+1 43614 1
+43614 43614 1
+1 43615 1
+43615 43615 1
+1 43616 1
+43616 43616 1
+1 43617 1
+43617 43617 1
+1 43618 1
+43618 43618 1
+1 43619 1
+43619 43619 1
+1 43620 1
+43620 43620 1
+1 43621 1
+43621 43621 1
+1 43622 1
+43622 43622 1
+1 43623 1
+43623 43623 1
+1 43624 1
+43624 43624 1
+1 43625 1
+43625 43625 1
+1 43626 1
+43626 43626 1
+1 43627 1
+43627 43627 1
+1 43628 1
+43628 43628 1
+1 43629 1
+43629 43629 1
+1 43630 1
+43630 43630 1
+1 43631 1
+43631 43631 1
+1 43632 1
+43632 43632 1
+1 43633 1
+43633 43633 1
+1 43634 1
+43634 43634 1
+1 43635 1
+43635 43635 1
+1 43636 1
+43636 43636 1
+1 43637 1
+43637 43637 1
+1 43638 1
+43638 43638 1
+1 43639 1
+43639 43639 1
+1 43640 1
+43640 43640 1
+1 43641 1
+43641 43641 1
+1 43642 1
+43642 43642 1
+1 43643 1
+43643 43643 1
+1 43644 1
+43644 43644 1
+1 43645 1
+43645 43645 1
+1 43646 1
+43646 43646 1
+1 43647 1
+43647 43647 1
+1 43648 1
+43648 43648 1
+1 43649 1
+43649 43649 1
+1 43650 1
+43650 43650 1
+1 43651 1
+43651 43651 1
+1 43652 1
+43652 43652 1
+1 43653 1
+43653 43653 1
+1 43654 1
+43654 43654 1
+1 43655 1
+43655 43655 1
+1 43656 1
+43656 43656 1
+1 43657 1
+43657 43657 1
+1 43658 1
+43658 43658 1
+1 43659 1
+43659 43659 1
+1 43660 1
+43660 43660 1
+1 43661 1
+43661 43661 1
+1 43662 1
+43662 43662 1
+1 43663 1
+43663 43663 1
+1 43664 1
+43664 43664 1
+1 43665 1
+43665 43665 1
+1 43666 1
+43666 43666 1
+1 43667 1
+43667 43667 1
+1 43668 1
+43668 43668 1
+1 43669 1
+43669 43669 1
+1 43670 1
+43670 43670 1
+1 43671 1
+43671 43671 1
+1 43672 1
+43672 43672 1
+1 43673 1
+43673 43673 1
+1 43674 1
+43674 43674 1
+1 43675 1
+43675 43675 1
+1 43676 1
+43676 43676 1
+1 43677 1
+43677 43677 1
+1 43678 1
+43678 43678 1
+1 43679 1
+43679 43679 1
+1 43680 1
+43680 43680 1
+1 43681 1
+43681 43681 1
+1 43682 1
+43682 43682 1
+1 43683 1
+43683 43683 1
+1 43684 1
+43684 43684 1
+1 43685 1
+43685 43685 1
+1 43686 1
+43686 43686 1
+1 43687 1
+43687 43687 1
+1 43688 1
+43688 43688 1
+1 43689 1
+43689 43689 1
+1 43690 1
+43690 43690 1
+1 43691 1
+43691 43691 1
+1 43692 1
+43692 43692 1
+1 43693 1
+43693 43693 1
+1 43694 1
+43694 43694 1
+1 43695 1
+43695 43695 1
+1 43696 1
+43696 43696 1
+1 43697 1
+43697 43697 1
+1 43698 1
+43698 43698 1
+1 43699 1
+43699 43699 1
+1 43700 1
+43700 43700 1
+1 43701 1
+43701 43701 1
+1 43702 1
+43702 43702 1
+1 43703 1
+43703 43703 1
+1 43704 1
+43704 43704 1
+1 43705 1
+43705 43705 1
+1 43706 1
+43706 43706 1
+1 43707 1
+43707 43707 1
+1 43708 1
+43708 43708 1
+1 43709 1
+43709 43709 1
+1 43710 1
+43710 43710 1
+1 43711 1
+43711 43711 1
+1 43712 1
+43712 43712 1
+1 43713 1
+43713 43713 1
+1 43714 1
+43714 43714 1
+1 43715 1
+43715 43715 1
+1 43716 1
+43716 43716 1
+1 43717 1
+43717 43717 1
+1 43718 1
+43718 43718 1
+1 43719 1
+43719 43719 1
+1 43720 1
+43720 43720 1
+1 43721 1
+43721 43721 1
+1 43722 1
+43722 43722 1
+1 43723 1
+43723 43723 1
+1 43724 1
+43724 43724 1
+1 43725 1
+43725 43725 1
+1 43726 1
+43726 43726 1
+1 43727 1
+43727 43727 1
+1 43728 1
+43728 43728 1
+1 43729 1
+43729 43729 1
+1 43730 1
+43730 43730 1
+1 43731 1
+43731 43731 1
+1 43732 1
+43732 43732 1
+1 43733 1
+43733 43733 1
+1 43734 1
+43734 43734 1
+1 43735 1
+43735 43735 1
+1 43736 1
+43736 43736 1
+1 43737 1
+43737 43737 1
+1 43738 1
+43738 43738 1
+1 43739 1
+43739 43739 1
+1 43740 1
+43740 43740 1
+1 43741 1
+43741 43741 1
+1 43742 1
+43742 43742 1
+1 43743 1
+43743 43743 1
+1 43744 1
+43744 43744 1
+1 43745 1
+43745 43745 1
+1 43746 1
+43746 43746 1
+1 43747 1
+43747 43747 1
+1 43748 1
+43748 43748 1
+1 43749 1
+43749 43749 1
+1 43750 1
+43750 43750 1
+1 43751 1
+43751 43751 1
+1 43752 1
+43752 43752 1
+1 43753 1
+43753 43753 1
+1 43754 1
+43754 43754 1
+1 43755 1
+43755 43755 1
+1 43756 1
+43756 43756 1
+1 43757 1
+43757 43757 1
+1 43758 1
+43758 43758 1
+1 43759 1
+43759 43759 1
+1 43760 1
+43760 43760 1
+1 43761 1
+43761 43761 1
+1 43762 1
+43762 43762 1
+1 43763 1
+43763 43763 1
+1 43764 1
+43764 43764 1
+1 43765 1
+43765 43765 1
+1 43766 1
+43766 43766 1
+1 43767 1
+43767 43767 1
+1 43768 1
+43768 43768 1
+1 43769 1
+43769 43769 1
+1 43770 1
+43770 43770 1
+1 43771 1
+43771 43771 1
+1 43772 1
+43772 43772 1
+1 43773 1
+43773 43773 1
+1 43774 1
+43774 43774 1
+1 43775 1
+43775 43775 1
+1 43776 1
+43776 43776 1
+1 43777 1
+43777 43777 1
+1 43778 1
+43778 43778 1
+1 43779 1
+43779 43779 1
+1 43780 1
+43780 43780 1
+1 43781 1
+43781 43781 1
+1 43782 1
+43782 43782 1
+1 43783 1
+43783 43783 1
+1 43784 1
+43784 43784 1
+1 43785 1
+43785 43785 1
+1 43786 1
+43786 43786 1
+1 43787 1
+43787 43787 1
+1 43788 1
+43788 43788 1
+1 43789 1
+43789 43789 1
+1 43790 1
+43790 43790 1
+1 43791 1
+43791 43791 1
+1 43792 1
+43792 43792 1
+1 43793 1
+43793 43793 1
+1 43794 1
+43794 43794 1
+1 43795 1
+43795 43795 1
+1 43796 1
+43796 43796 1
+1 43797 1
+43797 43797 1
+1 43798 1
+43798 43798 1
+1 43799 1
+43799 43799 1
+1 43800 1
+43800 43800 1
+1 43801 1
+43801 43801 1
+1 43802 1
+43802 43802 1
+1 43803 1
+43803 43803 1
+1 43804 1
+43804 43804 1
+1 43805 1
+43805 43805 1
+1 43806 1
+43806 43806 1
+1 43807 1
+43807 43807 1
+1 43808 1
+43808 43808 1
+1 43809 1
+43809 43809 1
+1 43810 1
+43810 43810 1
+1 43811 1
+43811 43811 1
+1 43812 1
+43812 43812 1
+1 43813 1
+43813 43813 1
+1 43814 1
+43814 43814 1
+1 43815 1
+43815 43815 1
+1 43816 1
+43816 43816 1
+1 43817 1
+43817 43817 1
+1 43818 1
+43818 43818 1
+1 43819 1
+43819 43819 1
+1 43820 1
+43820 43820 1
+1 43821 1
+43821 43821 1
+1 43822 1
+43822 43822 1
+1 43823 1
+43823 43823 1
+1 43824 1
+43824 43824 1
+1 43825 1
+43825 43825 1
+1 43826 1
+43826 43826 1
+1 43827 1
+43827 43827 1
+1 43828 1
+43828 43828 1
+1 43829 1
+43829 43829 1
+1 43830 1
+43830 43830 1
+1 43831 1
+43831 43831 1
+1 43832 1
+43832 43832 1
+1 43833 1
+43833 43833 1
+1 43834 1
+43834 43834 1
+1 43835 1
+43835 43835 1
+1 43836 1
+43836 43836 1
+1 43837 1
+43837 43837 1
+1 43838 1
+43838 43838 1
+1 43839 1
+43839 43839 1
+1 43840 1
+43840 43840 1
+1 43841 1
+43841 43841 1
+1 43842 1
+43842 43842 1
+1 43843 1
+43843 43843 1
+1 43844 1
+43844 43844 1
+1 43845 1
+43845 43845 1
+1 43846 1
+43846 43846 1
+1 43847 1
+43847 43847 1
+1 43848 1
+43848 43848 1
+1 43849 1
+43849 43849 1
+1 43850 1
+43850 43850 1
+1 43851 1
+43851 43851 1
+1 43852 1
+43852 43852 1
+1 43853 1
+43853 43853 1
+1 43854 1
+43854 43854 1
+1 43855 1
+43855 43855 1
+1 43856 1
+43856 43856 1
+1 43857 1
+43857 43857 1
+1 43858 1
+43858 43858 1
+1 43859 1
+43859 43859 1
+1 43860 1
+43860 43860 1
+1 43861 1
+43861 43861 1
+1 43862 1
+43862 43862 1
+1 43863 1
+43863 43863 1
+1 43864 1
+43864 43864 1
+1 43865 1
+43865 43865 1
+1 43866 1
+43866 43866 1
+1 43867 1
+43867 43867 1
+1 43868 1
+43868 43868 1
+1 43869 1
+43869 43869 1
+1 43870 1
+43870 43870 1
+1 43871 1
+43871 43871 1
+1 43872 1
+43872 43872 1
+1 43873 1
+43873 43873 1
+1 43874 1
+43874 43874 1
+1 43875 1
+43875 43875 1
+1 43876 1
+43876 43876 1
+1 43877 1
+43877 43877 1
+1 43878 1
+43878 43878 1
+1 43879 1
+43879 43879 1
+1 43880 1
+43880 43880 1
+1 43881 1
+43881 43881 1
+1 43882 1
+43882 43882 1
+1 43883 1
+43883 43883 1
+1 43884 1
+43884 43884 1
+1 43885 1
+43885 43885 1
+1 43886 1
+43886 43886 1
+1 43887 1
+43887 43887 1
+1 43888 1
+43888 43888 1
+1 43889 1
+43889 43889 1
+1 43890 1
+43890 43890 1
+1 43891 1
+43891 43891 1
+1 43892 1
+43892 43892 1
+1 43893 1
+43893 43893 1
+1 43894 1
+43894 43894 1
+1 43895 1
+43895 43895 1
+1 43896 1
+43896 43896 1
+1 43897 1
+43897 43897 1
+1 43898 1
+43898 43898 1
+1 43899 1
+43899 43899 1
+1 43900 1
+43900 43900 1
+1 43901 1
+43901 43901 1
+1 43902 1
+43902 43902 1
+1 43903 1
+43903 43903 1
+1 43904 1
+43904 43904 1
+1 43905 1
+43905 43905 1
+1 43906 1
+43906 43906 1
+1 43907 1
+43907 43907 1
+1 43908 1
+43908 43908 1
+1 43909 1
+43909 43909 1
+1 43910 1
+43910 43910 1
+1 43911 1
+43911 43911 1
+1 43912 1
+43912 43912 1
+1 43913 1
+43913 43913 1
+1 43914 1
+43914 43914 1
+1 43915 1
+43915 43915 1
+1 43916 1
+43916 43916 1
+1 43917 1
+43917 43917 1
+1 43918 1
+43918 43918 1
+1 43919 1
+43919 43919 1
+1 43920 1
+43920 43920 1
+1 43921 1
+43921 43921 1
+1 43922 1
+43922 43922 1
+1 43923 1
+43923 43923 1
+1 43924 1
+43924 43924 1
+1 43925 1
+43925 43925 1
+1 43926 1
+43926 43926 1
+1 43927 1
+43927 43927 1
+1 43928 1
+43928 43928 1
+1 43929 1
+43929 43929 1
+1 43930 1
+43930 43930 1
+1 43931 1
+43931 43931 1
+1 43932 1
+43932 43932 1
+1 43933 1
+43933 43933 1
+1 43934 1
+43934 43934 1
+1 43935 1
+43935 43935 1
+1 43936 1
+43936 43936 1
+1 43937 1
+43937 43937 1
+1 43938 1
+43938 43938 1
+1 43939 1
+43939 43939 1
+1 43940 1
+43940 43940 1
+1 43941 1
+43941 43941 1
+1 43942 1
+43942 43942 1
+1 43943 1
+43943 43943 1
+1 43944 1
+43944 43944 1
+1 43945 1
+43945 43945 1
+1 43946 1
+43946 43946 1
+1 43947 1
+43947 43947 1
+1 43948 1
+43948 43948 1
+1 43949 1
+43949 43949 1
+1 43950 1
+43950 43950 1
+1 43951 1
+43951 43951 1
+1 43952 1
+43952 43952 1
+1 43953 1
+43953 43953 1
+1 43954 1
+43954 43954 1
+1 43955 1
+43955 43955 1
+1 43956 1
+43956 43956 1
+1 43957 1
+43957 43957 1
+1 43958 1
+43958 43958 1
+1 43959 1
+43959 43959 1
+1 43960 1
+43960 43960 1
+1 43961 1
+43961 43961 1
+1 43962 1
+43962 43962 1
+1 43963 1
+43963 43963 1
+1 43964 1
+43964 43964 1
+1 43965 1
+43965 43965 1
+1 43966 1
+43966 43966 1
+1 43967 1
+43967 43967 1
+1 43968 1
+43968 43968 1
+1 43969 1
+43969 43969 1
+1 43970 1
+43970 43970 1
+1 43971 1
+43971 43971 1
+1 43972 1
+43972 43972 1
+1 43973 1
+43973 43973 1
+1 43974 1
+43974 43974 1
+1 43975 1
+43975 43975 1
+1 43976 1
+43976 43976 1
+1 43977 1
+43977 43977 1
+1 43978 1
+43978 43978 1
+1 43979 1
+43979 43979 1
+1 43980 1
+43980 43980 1
+1 43981 1
+43981 43981 1
+1 43982 1
+43982 43982 1
+1 43983 1
+43983 43983 1
+1 43984 1
+43984 43984 1
+1 43985 1
+43985 43985 1
+1 43986 1
+43986 43986 1
+1 43987 1
+43987 43987 1
+1 43988 1
+43988 43988 1
+1 43989 1
+43989 43989 1
+1 43990 1
+43990 43990 1
+1 43991 1
+43991 43991 1
+1 43992 1
+43992 43992 1
+1 43993 1
+43993 43993 1
+1 43994 1
+43994 43994 1
+1 43995 1
+43995 43995 1
+1 43996 1
+43996 43996 1
+1 43997 1
+43997 43997 1
+1 43998 1
+43998 43998 1
+1 43999 1
+43999 43999 1
+1 44000 1
+44000 44000 1
+1 44001 1
+44001 44001 1
+1 44002 1
+44002 44002 1
+1 44003 1
+44003 44003 1
+1 44004 1
+44004 44004 1
+1 44005 1
+44005 44005 1
+1 44006 1
+44006 44006 1
+1 44007 1
+44007 44007 1
+1 44008 1
+44008 44008 1
+1 44009 1
+44009 44009 1
+1 44010 1
+44010 44010 1
+1 44011 1
+44011 44011 1
+1 44012 1
+44012 44012 1
+1 44013 1
+44013 44013 1
+1 44014 1
+44014 44014 1
+1 44015 1
+44015 44015 1
+1 44016 1
+44016 44016 1
+1 44017 1
+44017 44017 1
+1 44018 1
+44018 44018 1
+1 44019 1
+44019 44019 1
+1 44020 1
+44020 44020 1
+1 44021 1
+44021 44021 1
+1 44022 1
+44022 44022 1
+1 44023 1
+44023 44023 1
+1 44024 1
+44024 44024 1
+1 44025 1
+44025 44025 1
+1 44026 1
+44026 44026 1
+1 44027 1
+44027 44027 1
+1 44028 1
+44028 44028 1
+1 44029 1
+44029 44029 1
+1 44030 1
+44030 44030 1
+1 44031 1
+44031 44031 1
+1 44032 1
+44032 44032 1
+1 44033 1
+44033 44033 1
+1 44034 1
+44034 44034 1
+1 44035 1
+44035 44035 1
+1 44036 1
+44036 44036 1
+1 44037 1
+44037 44037 1
+1 44038 1
+44038 44038 1
+1 44039 1
+44039 44039 1
+1 44040 1
+44040 44040 1
+1 44041 1
+44041 44041 1
+1 44042 1
+44042 44042 1
+1 44043 1
+44043 44043 1
+1 44044 1
+44044 44044 1
+1 44045 1
+44045 44045 1
+1 44046 1
+44046 44046 1
+1 44047 1
+44047 44047 1
+1 44048 1
+44048 44048 1
+1 44049 1
+44049 44049 1
+1 44050 1
+44050 44050 1
+1 44051 1
+44051 44051 1
+1 44052 1
+44052 44052 1
+1 44053 1
+44053 44053 1
+1 44054 1
+44054 44054 1
+1 44055 1
+44055 44055 1
+1 44056 1
+44056 44056 1
+1 44057 1
+44057 44057 1
+1 44058 1
+44058 44058 1
+1 44059 1
+44059 44059 1
+1 44060 1
+44060 44060 1
+1 44061 1
+44061 44061 1
+1 44062 1
+44062 44062 1
+1 44063 1
+44063 44063 1
+1 44064 1
+44064 44064 1
+1 44065 1
+44065 44065 1
+1 44066 1
+44066 44066 1
+1 44067 1
+44067 44067 1
+1 44068 1
+44068 44068 1
+1 44069 1
+44069 44069 1
+1 44070 1
+44070 44070 1
+1 44071 1
+44071 44071 1
+1 44072 1
+44072 44072 1
+1 44073 1
+44073 44073 1
+1 44074 1
+44074 44074 1
+1 44075 1
+44075 44075 1
+1 44076 1
+44076 44076 1
+1 44077 1
+44077 44077 1
+1 44078 1
+44078 44078 1
+1 44079 1
+44079 44079 1
+1 44080 1
+44080 44080 1
+1 44081 1
+44081 44081 1
+1 44082 1
+44082 44082 1
+1 44083 1
+44083 44083 1
+1 44084 1
+44084 44084 1
+1 44085 1
+44085 44085 1
+1 44086 1
+44086 44086 1
+1 44087 1
+44087 44087 1
+1 44088 1
+44088 44088 1
+1 44089 1
+44089 44089 1
+1 44090 1
+44090 44090 1
+1 44091 1
+44091 44091 1
+1 44092 1
+44092 44092 1
+1 44093 1
+44093 44093 1
+1 44094 1
+44094 44094 1
+1 44095 1
+44095 44095 1
+1 44096 1
+44096 44096 1
+1 44097 1
+44097 44097 1
+1 44098 1
+44098 44098 1
+1 44099 1
+44099 44099 1
+1 44100 1
+44100 44100 1
+1 44101 1
+44101 44101 1
+1 44102 1
+44102 44102 1
+1 44103 1
+44103 44103 1
+1 44104 1
+44104 44104 1
+1 44105 1
+44105 44105 1
+1 44106 1
+44106 44106 1
+1 44107 1
+44107 44107 1
+1 44108 1
+44108 44108 1
+1 44109 1
+44109 44109 1
+1 44110 1
+44110 44110 1
+1 44111 1
+44111 44111 1
+1 44112 1
+44112 44112 1
+1 44113 1
+44113 44113 1
+1 44114 1
+44114 44114 1
+1 44115 1
+44115 44115 1
+1 44116 1
+44116 44116 1
+1 44117 1
+44117 44117 1
+1 44118 1
+44118 44118 1
+1 44119 1
+44119 44119 1
+1 44120 1
+44120 44120 1
+1 44121 1
+44121 44121 1
+1 44122 1
+44122 44122 1
+1 44123 1
+44123 44123 1
+1 44124 1
+44124 44124 1
+1 44125 1
+44125 44125 1
+1 44126 1
+44126 44126 1
+1 44127 1
+44127 44127 1
+1 44128 1
+44128 44128 1
+1 44129 1
+44129 44129 1
+1 44130 1
+44130 44130 1
+1 44131 1
+44131 44131 1
+1 44132 1
+44132 44132 1
+1 44133 1
+44133 44133 1
+1 44134 1
+44134 44134 1
+1 44135 1
+44135 44135 1
+1 44136 1
+44136 44136 1
+1 44137 1
+44137 44137 1
+1 44138 1
+44138 44138 1
+1 44139 1
+44139 44139 1
+1 44140 1
+44140 44140 1
+1 44141 1
+44141 44141 1
+1 44142 1
+44142 44142 1
+1 44143 1
+44143 44143 1
+1 44144 1
+44144 44144 1
+1 44145 1
+44145 44145 1
+1 44146 1
+44146 44146 1
+1 44147 1
+44147 44147 1
+1 44148 1
+44148 44148 1
+1 44149 1
+44149 44149 1
+1 44150 1
+44150 44150 1
+1 44151 1
+44151 44151 1
+1 44152 1
+44152 44152 1
+1 44153 1
+44153 44153 1
+1 44154 1
+44154 44154 1
+1 44155 1
+44155 44155 1
+1 44156 1
+44156 44156 1
+1 44157 1
+44157 44157 1
+1 44158 1
+44158 44158 1
+1 44159 1
+44159 44159 1
+1 44160 1
+44160 44160 1
+1 44161 1
+44161 44161 1
+1 44162 1
+44162 44162 1
+1 44163 1
+44163 44163 1
+1 44164 1
+44164 44164 1
+1 44165 1
+44165 44165 1
+1 44166 1
+44166 44166 1
+1 44167 1
+44167 44167 1
+1 44168 1
+44168 44168 1
+1 44169 1
+44169 44169 1
+1 44170 1
+44170 44170 1
+1 44171 1
+44171 44171 1
+1 44172 1
+44172 44172 1
+1 44173 1
+44173 44173 1
+1 44174 1
+44174 44174 1
+1 44175 1
+44175 44175 1
+1 44176 1
+44176 44176 1
+1 44177 1
+44177 44177 1
+1 44178 1
+44178 44178 1
+1 44179 1
+44179 44179 1
+1 44180 1
+44180 44180 1
+1 44181 1
+44181 44181 1
+1 44182 1
+44182 44182 1
+1 44183 1
+44183 44183 1
+1 44184 1
+44184 44184 1
+1 44185 1
+44185 44185 1
+1 44186 1
+44186 44186 1
+1 44187 1
+44187 44187 1
+1 44188 1
+44188 44188 1
+1 44189 1
+44189 44189 1
+1 44190 1
+44190 44190 1
+1 44191 1
+44191 44191 1
+1 44192 1
+44192 44192 1
+1 44193 1
+44193 44193 1
+1 44194 1
+44194 44194 1
+1 44195 1
+44195 44195 1
+1 44196 1
+44196 44196 1
+1 44197 1
+44197 44197 1
+1 44198 1
+44198 44198 1
+1 44199 1
+44199 44199 1
+1 44200 1
+44200 44200 1
+1 44201 1
+44201 44201 1
+1 44202 1
+44202 44202 1
+1 44203 1
+44203 44203 1
+1 44204 1
+44204 44204 1
+1 44205 1
+44205 44205 1
+1 44206 1
+44206 44206 1
+1 44207 1
+44207 44207 1
+1 44208 1
+44208 44208 1
+1 44209 1
+44209 44209 1
+1 44210 1
+44210 44210 1
+1 44211 1
+44211 44211 1
+1 44212 1
+44212 44212 1
+1 44213 1
+44213 44213 1
+1 44214 1
+44214 44214 1
+1 44215 1
+44215 44215 1
+1 44216 1
+44216 44216 1
+1 44217 1
+44217 44217 1
+1 44218 1
+44218 44218 1
+1 44219 1
+44219 44219 1
+1 44220 1
+44220 44220 1
+1 44221 1
+44221 44221 1
+1 44222 1
+44222 44222 1
+1 44223 1
+44223 44223 1
+1 44224 1
+44224 44224 1
+1 44225 1
+44225 44225 1
+1 44226 1
+44226 44226 1
+1 44227 1
+44227 44227 1
+1 44228 1
+44228 44228 1
+1 44229 1
+44229 44229 1
+1 44230 1
+44230 44230 1
+1 44231 1
+44231 44231 1
+1 44232 1
+44232 44232 1
+1 44233 1
+44233 44233 1
+1 44234 1
+44234 44234 1
+1 44235 1
+44235 44235 1
+1 44236 1
+44236 44236 1
+1 44237 1
+44237 44237 1
+1 44238 1
+44238 44238 1
+1 44239 1
+44239 44239 1
+1 44240 1
+44240 44240 1
+1 44241 1
+44241 44241 1
+1 44242 1
+44242 44242 1
+1 44243 1
+44243 44243 1
+1 44244 1
+44244 44244 1
+1 44245 1
+44245 44245 1
+1 44246 1
+44246 44246 1
+1 44247 1
+44247 44247 1
+1 44248 1
+44248 44248 1
+1 44249 1
+44249 44249 1
+1 44250 1
+44250 44250 1
+1 44251 1
+44251 44251 1
+1 44252 1
+44252 44252 1
+1 44253 1
+44253 44253 1
+1 44254 1
+44254 44254 1
+1 44255 1
+44255 44255 1
+1 44256 1
+44256 44256 1
+1 44257 1
+44257 44257 1
+1 44258 1
+44258 44258 1
+1 44259 1
+44259 44259 1
+1 44260 1
+44260 44260 1
+1 44261 1
+44261 44261 1
+1 44262 1
+44262 44262 1
+1 44263 1
+44263 44263 1
+1 44264 1
+44264 44264 1
+1 44265 1
+44265 44265 1
+1 44266 1
+44266 44266 1
+1 44267 1
+44267 44267 1
+1 44268 1
+44268 44268 1
+1 44269 1
+44269 44269 1
+1 44270 1
+44270 44270 1
+1 44271 1
+44271 44271 1
+1 44272 1
+44272 44272 1
+1 44273 1
+44273 44273 1
+1 44274 1
+44274 44274 1
+1 44275 1
+44275 44275 1
+1 44276 1
+44276 44276 1
+1 44277 1
+44277 44277 1
+1 44278 1
+44278 44278 1
+1 44279 1
+44279 44279 1
+1 44280 1
+44280 44280 1
+1 44281 1
+44281 44281 1
+1 44282 1
+44282 44282 1
+1 44283 1
+44283 44283 1
+1 44284 1
+44284 44284 1
+1 44285 1
+44285 44285 1
+1 44286 1
+44286 44286 1
+1 44287 1
+44287 44287 1
+1 44288 1
+44288 44288 1
+1 44289 1
+44289 44289 1
+1 44290 1
+44290 44290 1
+1 44291 1
+44291 44291 1
+1 44292 1
+44292 44292 1
+1 44293 1
+44293 44293 1
+1 44294 1
+44294 44294 1
+1 44295 1
+44295 44295 1
+1 44296 1
+44296 44296 1
+1 44297 1
+44297 44297 1
+1 44298 1
+44298 44298 1
+1 44299 1
+44299 44299 1
+1 44300 1
+44300 44300 1
+1 44301 1
+44301 44301 1
+1 44302 1
+44302 44302 1
+1 44303 1
+44303 44303 1
+1 44304 1
+44304 44304 1
+1 44305 1
+44305 44305 1
+1 44306 1
+44306 44306 1
+1 44307 1
+44307 44307 1
+1 44308 1
+44308 44308 1
+1 44309 1
+44309 44309 1
+1 44310 1
+44310 44310 1
+1 44311 1
+44311 44311 1
+1 44312 1
+44312 44312 1
+1 44313 1
+44313 44313 1
+1 44314 1
+44314 44314 1
+1 44315 1
+44315 44315 1
+1 44316 1
+44316 44316 1
+1 44317 1
+44317 44317 1
+1 44318 1
+44318 44318 1
+1 44319 1
+44319 44319 1
+1 44320 1
+44320 44320 1
+1 44321 1
+44321 44321 1
+1 44322 1
+44322 44322 1
+1 44323 1
+44323 44323 1
+1 44324 1
+44324 44324 1
+1 44325 1
+44325 44325 1
+1 44326 1
+44326 44326 1
+1 44327 1
+44327 44327 1
+1 44328 1
+44328 44328 1
+1 44329 1
+44329 44329 1
+1 44330 1
+44330 44330 1
+1 44331 1
+44331 44331 1
+1 44332 1
+44332 44332 1
+1 44333 1
+44333 44333 1
+1 44334 1
+44334 44334 1
+1 44335 1
+44335 44335 1
+1 44336 1
+44336 44336 1
+1 44337 1
+44337 44337 1
+1 44338 1
+44338 44338 1
+1 44339 1
+44339 44339 1
+1 44340 1
+44340 44340 1
+1 44341 1
+44341 44341 1
+1 44342 1
+44342 44342 1
+1 44343 1
+44343 44343 1
+1 44344 1
+44344 44344 1
+1 44345 1
+44345 44345 1
+1 44346 1
+44346 44346 1
+1 44347 1
+44347 44347 1
+1 44348 1
+44348 44348 1
+1 44349 1
+44349 44349 1
+1 44350 1
+44350 44350 1
+1 44351 1
+44351 44351 1
+1 44352 1
+44352 44352 1
+1 44353 1
+44353 44353 1
+1 44354 1
+44354 44354 1
+1 44355 1
+44355 44355 1
+1 44356 1
+44356 44356 1
+1 44357 1
+44357 44357 1
+1 44358 1
+44358 44358 1
+1 44359 1
+44359 44359 1
+1 44360 1
+44360 44360 1
+1 44361 1
+44361 44361 1
+1 44362 1
+44362 44362 1
+1 44363 1
+44363 44363 1
+1 44364 1
+44364 44364 1
+1 44365 1
+44365 44365 1
+1 44366 1
+44366 44366 1
+1 44367 1
+44367 44367 1
+1 44368 1
+44368 44368 1
+1 44369 1
+44369 44369 1
+1 44370 1
+44370 44370 1
+1 44371 1
+44371 44371 1
+1 44372 1
+44372 44372 1
+1 44373 1
+44373 44373 1
+1 44374 1
+44374 44374 1
+1 44375 1
+44375 44375 1
+1 44376 1
+44376 44376 1
+1 44377 1
+44377 44377 1
+1 44378 1
+44378 44378 1
+1 44379 1
+44379 44379 1
+1 44380 1
+44380 44380 1
+1 44381 1
+44381 44381 1
+1 44382 1
+44382 44382 1
+1 44383 1
+44383 44383 1
+1 44384 1
+44384 44384 1
+1 44385 1
+44385 44385 1
+1 44386 1
+44386 44386 1
+1 44387 1
+44387 44387 1
+1 44388 1
+44388 44388 1
+1 44389 1
+44389 44389 1
+1 44390 1
+44390 44390 1
+1 44391 1
+44391 44391 1
+1 44392 1
+44392 44392 1
+1 44393 1
+44393 44393 1
+1 44394 1
+44394 44394 1
+1 44395 1
+44395 44395 1
+1 44396 1
+44396 44396 1
+1 44397 1
+44397 44397 1
+1 44398 1
+44398 44398 1
+1 44399 1
+44399 44399 1
+1 44400 1
+44400 44400 1
+1 44401 1
+44401 44401 1
+1 44402 1
+44402 44402 1
+1 44403 1
+44403 44403 1
+1 44404 1
+44404 44404 1
+1 44405 1
+44405 44405 1
+1 44406 1
+44406 44406 1
+1 44407 1
+44407 44407 1
+1 44408 1
+44408 44408 1
+1 44409 1
+44409 44409 1
+1 44410 1
+44410 44410 1
+1 44411 1
+44411 44411 1
+1 44412 1
+44412 44412 1
+1 44413 1
+44413 44413 1
+1 44414 1
+44414 44414 1
+1 44415 1
+44415 44415 1
+1 44416 1
+44416 44416 1
+1 44417 1
+44417 44417 1
+1 44418 1
+44418 44418 1
+1 44419 1
+44419 44419 1
+1 44420 1
+44420 44420 1
+1 44421 1
+44421 44421 1
+1 44422 1
+44422 44422 1
+1 44423 1
+44423 44423 1
+1 44424 1
+44424 44424 1
+1 44425 1
+44425 44425 1
+1 44426 1
+44426 44426 1
+1 44427 1
+44427 44427 1
+1 44428 1
+44428 44428 1
+1 44429 1
+44429 44429 1
+1 44430 1
+44430 44430 1
+1 44431 1
+44431 44431 1
+1 44432 1
+44432 44432 1
+1 44433 1
+44433 44433 1
+1 44434 1
+44434 44434 1
+1 44435 1
+44435 44435 1
+1 44436 1
+44436 44436 1
+1 44437 1
+44437 44437 1
+1 44438 1
+44438 44438 1
+1 44439 1
+44439 44439 1
+1 44440 1
+44440 44440 1
+1 44441 1
+44441 44441 1
+1 44442 1
+44442 44442 1
+1 44443 1
+44443 44443 1
+1 44444 1
+44444 44444 1
+1 44445 1
+44445 44445 1
+1 44446 1
+44446 44446 1
+1 44447 1
+44447 44447 1
+1 44448 1
+44448 44448 1
+1 44449 1
+44449 44449 1
+1 44450 1
+44450 44450 1
+1 44451 1
+44451 44451 1
+1 44452 1
+44452 44452 1
+1 44453 1
+44453 44453 1
+1 44454 1
+44454 44454 1
+1 44455 1
+44455 44455 1
+1 44456 1
+44456 44456 1
+1 44457 1
+44457 44457 1
+1 44458 1
+44458 44458 1
+1 44459 1
+44459 44459 1
+1 44460 1
+44460 44460 1
+1 44461 1
+44461 44461 1
+1 44462 1
+44462 44462 1
+1 44463 1
+44463 44463 1
+1 44464 1
+44464 44464 1
+1 44465 1
+44465 44465 1
+1 44466 1
+44466 44466 1
+1 44467 1
+44467 44467 1
+1 44468 1
+44468 44468 1
+1 44469 1
+44469 44469 1
+1 44470 1
+44470 44470 1
+1 44471 1
+44471 44471 1
+1 44472 1
+44472 44472 1
+1 44473 1
+44473 44473 1
+1 44474 1
+44474 44474 1
+1 44475 1
+44475 44475 1
+1 44476 1
+44476 44476 1
+1 44477 1
+44477 44477 1
+1 44478 1
+44478 44478 1
+1 44479 1
+44479 44479 1
+1 44480 1
+44480 44480 1
+1 44481 1
+44481 44481 1
+1 44482 1
+44482 44482 1
+1 44483 1
+44483 44483 1
+1 44484 1
+44484 44484 1
+1 44485 1
+44485 44485 1
+1 44486 1
+44486 44486 1
+1 44487 1
+44487 44487 1
+1 44488 1
+44488 44488 1
+1 44489 1
+44489 44489 1
+1 44490 1
+44490 44490 1
+1 44491 1
+44491 44491 1
+1 44492 1
+44492 44492 1
+1 44493 1
+44493 44493 1
+1 44494 1
+44494 44494 1
+1 44495 1
+44495 44495 1
+1 44496 1
+44496 44496 1
+1 44497 1
+44497 44497 1
+1 44498 1
+44498 44498 1
+1 44499 1
+44499 44499 1
+1 44500 1
+44500 44500 1
+1 44501 1
+44501 44501 1
+1 44502 1
+44502 44502 1
+1 44503 1
+44503 44503 1
+1 44504 1
+44504 44504 1
+1 44505 1
+44505 44505 1
+1 44506 1
+44506 44506 1
+1 44507 1
+44507 44507 1
+1 44508 1
+44508 44508 1
+1 44509 1
+44509 44509 1
+1 44510 1
+44510 44510 1
+1 44511 1
+44511 44511 1
+1 44512 1
+44512 44512 1
+1 44513 1
+44513 44513 1
+1 44514 1
+44514 44514 1
+1 44515 1
+44515 44515 1
+1 44516 1
+44516 44516 1
+1 44517 1
+44517 44517 1
+1 44518 1
+44518 44518 1
+1 44519 1
+44519 44519 1
+1 44520 1
+44520 44520 1
+1 44521 1
+44521 44521 1
+1 44522 1
+44522 44522 1
+1 44523 1
+44523 44523 1
+1 44524 1
+44524 44524 1
+1 44525 1
+44525 44525 1
+1 44526 1
+44526 44526 1
+1 44527 1
+44527 44527 1
+1 44528 1
+44528 44528 1
+1 44529 1
+44529 44529 1
+1 44530 1
+44530 44530 1
+1 44531 1
+44531 44531 1
+1 44532 1
+44532 44532 1
+1 44533 1
+44533 44533 1
+1 44534 1
+44534 44534 1
+1 44535 1
+44535 44535 1
+1 44536 1
+44536 44536 1
+1 44537 1
+44537 44537 1
+1 44538 1
+44538 44538 1
+1 44539 1
+44539 44539 1
+1 44540 1
+44540 44540 1
+1 44541 1
+44541 44541 1
+1 44542 1
+44542 44542 1
+1 44543 1
+44543 44543 1
+1 44544 1
+44544 44544 1
+1 44545 1
+44545 44545 1
+1 44546 1
+44546 44546 1
+1 44547 1
+44547 44547 1
+1 44548 1
+44548 44548 1
+1 44549 1
+44549 44549 1
+1 44550 1
+44550 44550 1
+1 44551 1
+44551 44551 1
+1 44552 1
+44552 44552 1
+1 44553 1
+44553 44553 1
+1 44554 1
+44554 44554 1
+1 44555 1
+44555 44555 1
+1 44556 1
+44556 44556 1
+1 44557 1
+44557 44557 1
+1 44558 1
+44558 44558 1
+1 44559 1
+44559 44559 1
+1 44560 1
+44560 44560 1
+1 44561 1
+44561 44561 1
+1 44562 1
+44562 44562 1
+1 44563 1
+44563 44563 1
+1 44564 1
+44564 44564 1
+1 44565 1
+44565 44565 1
+1 44566 1
+44566 44566 1
+1 44567 1
+44567 44567 1
+1 44568 1
+44568 44568 1
+1 44569 1
+44569 44569 1
+1 44570 1
+44570 44570 1
+1 44571 1
+44571 44571 1
+1 44572 1
+44572 44572 1
+1 44573 1
+44573 44573 1
+1 44574 1
+44574 44574 1
+1 44575 1
+44575 44575 1
+1 44576 1
+44576 44576 1
+1 44577 1
+44577 44577 1
+1 44578 1
+44578 44578 1
+1 44579 1
+44579 44579 1
+1 44580 1
+44580 44580 1
+1 44581 1
+44581 44581 1
+1 44582 1
+44582 44582 1
+1 44583 1
+44583 44583 1
+1 44584 1
+44584 44584 1
+1 44585 1
+44585 44585 1
+1 44586 1
+44586 44586 1
+1 44587 1
+44587 44587 1
+1 44588 1
+44588 44588 1
+1 44589 1
+44589 44589 1
+1 44590 1
+44590 44590 1
+1 44591 1
+44591 44591 1
+1 44592 1
+44592 44592 1
+1 44593 1
+44593 44593 1
+1 44594 1
+44594 44594 1
+1 44595 1
+44595 44595 1
+1 44596 1
+44596 44596 1
+1 44597 1
+44597 44597 1
+1 44598 1
+44598 44598 1
+1 44599 1
+44599 44599 1
+1 44600 1
+44600 44600 1
+1 44601 1
+44601 44601 1
+1 44602 1
+44602 44602 1
+1 44603 1
+44603 44603 1
+1 44604 1
+44604 44604 1
+1 44605 1
+44605 44605 1
+1 44606 1
+44606 44606 1
+1 44607 1
+44607 44607 1
+1 44608 1
+44608 44608 1
+1 44609 1
+44609 44609 1
+1 44610 1
+44610 44610 1
+1 44611 1
+44611 44611 1
+1 44612 1
+44612 44612 1
+1 44613 1
+44613 44613 1
+1 44614 1
+44614 44614 1
+1 44615 1
+44615 44615 1
+1 44616 1
+44616 44616 1
+1 44617 1
+44617 44617 1
+1 44618 1
+44618 44618 1
+1 44619 1
+44619 44619 1
+1 44620 1
+44620 44620 1
+1 44621 1
+44621 44621 1
+1 44622 1
+44622 44622 1
+1 44623 1
+44623 44623 1
+1 44624 1
+44624 44624 1
+1 44625 1
+44625 44625 1
+1 44626 1
+44626 44626 1
+1 44627 1
+44627 44627 1
+1 44628 1
+44628 44628 1
+1 44629 1
+44629 44629 1
+1 44630 1
+44630 44630 1
+1 44631 1
+44631 44631 1
+1 44632 1
+44632 44632 1
+1 44633 1
+44633 44633 1
+1 44634 1
+44634 44634 1
+1 44635 1
+44635 44635 1
+1 44636 1
+44636 44636 1
+1 44637 1
+44637 44637 1
+1 44638 1
+44638 44638 1
+1 44639 1
+44639 44639 1
+1 44640 1
+44640 44640 1
+1 44641 1
+44641 44641 1
+1 44642 1
+44642 44642 1
+1 44643 1
+44643 44643 1
+1 44644 1
+44644 44644 1
+1 44645 1
+44645 44645 1
+1 44646 1
+44646 44646 1
+1 44647 1
+44647 44647 1
+1 44648 1
+44648 44648 1
+1 44649 1
+44649 44649 1
+1 44650 1
+44650 44650 1
+1 44651 1
+44651 44651 1
+1 44652 1
+44652 44652 1
+1 44653 1
+44653 44653 1
+1 44654 1
+44654 44654 1
+1 44655 1
+44655 44655 1
+1 44656 1
+44656 44656 1
+1 44657 1
+44657 44657 1
+1 44658 1
+44658 44658 1
+1 44659 1
+44659 44659 1
+1 44660 1
+44660 44660 1
+1 44661 1
+44661 44661 1
+1 44662 1
+44662 44662 1
+1 44663 1
+44663 44663 1
+1 44664 1
+44664 44664 1
+1 44665 1
+44665 44665 1
+1 44666 1
+44666 44666 1
+1 44667 1
+44667 44667 1
+1 44668 1
+44668 44668 1
+1 44669 1
+44669 44669 1
+1 44670 1
+44670 44670 1
+1 44671 1
+44671 44671 1
+1 44672 1
+44672 44672 1
+1 44673 1
+44673 44673 1
+1 44674 1
+44674 44674 1
+1 44675 1
+44675 44675 1
+1 44676 1
+44676 44676 1
+1 44677 1
+44677 44677 1
+1 44678 1
+44678 44678 1
+1 44679 1
+44679 44679 1
+1 44680 1
+44680 44680 1
+1 44681 1
+44681 44681 1
+1 44682 1
+44682 44682 1
+1 44683 1
+44683 44683 1
+1 44684 1
+44684 44684 1
+1 44685 1
+44685 44685 1
+1 44686 1
+44686 44686 1
+1 44687 1
+44687 44687 1
+1 44688 1
+44688 44688 1
+1 44689 1
+44689 44689 1
+1 44690 1
+44690 44690 1
+1 44691 1
+44691 44691 1
+1 44692 1
+44692 44692 1
+1 44693 1
+44693 44693 1
+1 44694 1
+44694 44694 1
+1 44695 1
+44695 44695 1
+1 44696 1
+44696 44696 1
+1 44697 1
+44697 44697 1
+1 44698 1
+44698 44698 1
+1 44699 1
+44699 44699 1
+1 44700 1
+44700 44700 1
+1 44701 1
+44701 44701 1
+1 44702 1
+44702 44702 1
+1 44703 1
+44703 44703 1
+1 44704 1
+44704 44704 1
+1 44705 1
+44705 44705 1
+1 44706 1
+44706 44706 1
+1 44707 1
+44707 44707 1
+1 44708 1
+44708 44708 1
+1 44709 1
+44709 44709 1
+1 44710 1
+44710 44710 1
+1 44711 1
+44711 44711 1
+1 44712 1
+44712 44712 1
+1 44713 1
+44713 44713 1
+1 44714 1
+44714 44714 1
+1 44715 1
+44715 44715 1
+1 44716 1
+44716 44716 1
+1 44717 1
+44717 44717 1
+1 44718 1
+44718 44718 1
+1 44719 1
+44719 44719 1
+1 44720 1
+44720 44720 1
+1 44721 1
+44721 44721 1
+1 44722 1
+44722 44722 1
+1 44723 1
+44723 44723 1
+1 44724 1
+44724 44724 1
+1 44725 1
+44725 44725 1
+1 44726 1
+44726 44726 1
+1 44727 1
+44727 44727 1
+1 44728 1
+44728 44728 1
+1 44729 1
+44729 44729 1
+1 44730 1
+44730 44730 1
+1 44731 1
+44731 44731 1
+1 44732 1
+44732 44732 1
+1 44733 1
+44733 44733 1
+1 44734 1
+44734 44734 1
+1 44735 1
+44735 44735 1
+1 44736 1
+44736 44736 1
+1 44737 1
+44737 44737 1
+1 44738 1
+44738 44738 1
+1 44739 1
+44739 44739 1
+1 44740 1
+44740 44740 1
+1 44741 1
+44741 44741 1
+1 44742 1
+44742 44742 1
+1 44743 1
+44743 44743 1
+1 44744 1
+44744 44744 1
+1 44745 1
+44745 44745 1
+1 44746 1
+44746 44746 1
+1 44747 1
+44747 44747 1
+1 44748 1
+44748 44748 1
+1 44749 1
+44749 44749 1
+1 44750 1
+44750 44750 1
+1 44751 1
+44751 44751 1
+1 44752 1
+44752 44752 1
+1 44753 1
+44753 44753 1
+1 44754 1
+44754 44754 1
+1 44755 1
+44755 44755 1
+1 44756 1
+44756 44756 1
+1 44757 1
+44757 44757 1
+1 44758 1
+44758 44758 1
+1 44759 1
+44759 44759 1
+1 44760 1
+44760 44760 1
+1 44761 1
+44761 44761 1
+1 44762 1
+44762 44762 1
+1 44763 1
+44763 44763 1
+1 44764 1
+44764 44764 1
+1 44765 1
+44765 44765 1
+1 44766 1
+44766 44766 1
+1 44767 1
+44767 44767 1
+1 44768 1
+44768 44768 1
+1 44769 1
+44769 44769 1
+1 44770 1
+44770 44770 1
+1 44771 1
+44771 44771 1
+1 44772 1
+44772 44772 1
+1 44773 1
+44773 44773 1
+1 44774 1
+44774 44774 1
+1 44775 1
+44775 44775 1
+1 44776 1
+44776 44776 1
+1 44777 1
+44777 44777 1
+1 44778 1
+44778 44778 1
+1 44779 1
+44779 44779 1
+1 44780 1
+44780 44780 1
+1 44781 1
+44781 44781 1
+1 44782 1
+44782 44782 1
+1 44783 1
+44783 44783 1
+1 44784 1
+44784 44784 1
+1 44785 1
+44785 44785 1
+1 44786 1
+44786 44786 1
+1 44787 1
+44787 44787 1
+1 44788 1
+44788 44788 1
+1 44789 1
+44789 44789 1
+1 44790 1
+44790 44790 1
+1 44791 1
+44791 44791 1
+1 44792 1
+44792 44792 1
+1 44793 1
+44793 44793 1
+1 44794 1
+44794 44794 1
+1 44795 1
+44795 44795 1
+1 44796 1
+44796 44796 1
+1 44797 1
+44797 44797 1
+1 44798 1
+44798 44798 1
+1 44799 1
+44799 44799 1
+1 44800 1
+44800 44800 1
+1 44801 1
+44801 44801 1
+1 44802 1
+44802 44802 1
+1 44803 1
+44803 44803 1
+1 44804 1
+44804 44804 1
+1 44805 1
+44805 44805 1
+1 44806 1
+44806 44806 1
+1 44807 1
+44807 44807 1
+1 44808 1
+44808 44808 1
+1 44809 1
+44809 44809 1
+1 44810 1
+44810 44810 1
+1 44811 1
+44811 44811 1
+1 44812 1
+44812 44812 1
+1 44813 1
+44813 44813 1
+1 44814 1
+44814 44814 1
+1 44815 1
+44815 44815 1
+1 44816 1
+44816 44816 1
+1 44817 1
+44817 44817 1
+1 44818 1
+44818 44818 1
+1 44819 1
+44819 44819 1
+1 44820 1
+44820 44820 1
+1 44821 1
+44821 44821 1
+1 44822 1
+44822 44822 1
+1 44823 1
+44823 44823 1
+1 44824 1
+44824 44824 1
+1 44825 1
+44825 44825 1
+1 44826 1
+44826 44826 1
+1 44827 1
+44827 44827 1
+1 44828 1
+44828 44828 1
+1 44829 1
+44829 44829 1
+1 44830 1
+44830 44830 1
+1 44831 1
+44831 44831 1
+1 44832 1
+44832 44832 1
+1 44833 1
+44833 44833 1
+1 44834 1
+44834 44834 1
+1 44835 1
+44835 44835 1
+1 44836 1
+44836 44836 1
+1 44837 1
+44837 44837 1
+1 44838 1
+44838 44838 1
+1 44839 1
+44839 44839 1
+1 44840 1
+44840 44840 1
+1 44841 1
+44841 44841 1
+1 44842 1
+44842 44842 1
+1 44843 1
+44843 44843 1
+1 44844 1
+44844 44844 1
+1 44845 1
+44845 44845 1
+1 44846 1
+44846 44846 1
+1 44847 1
+44847 44847 1
+1 44848 1
+44848 44848 1
+1 44849 1
+44849 44849 1
+1 44850 1
+44850 44850 1
+1 44851 1
+44851 44851 1
+1 44852 1
+44852 44852 1
+1 44853 1
+44853 44853 1
+1 44854 1
+44854 44854 1
+1 44855 1
+44855 44855 1
+1 44856 1
+44856 44856 1
+1 44857 1
+44857 44857 1
+1 44858 1
+44858 44858 1
+1 44859 1
+44859 44859 1
+1 44860 1
+44860 44860 1
+1 44861 1
+44861 44861 1
+1 44862 1
+44862 44862 1
+1 44863 1
+44863 44863 1
+1 44864 1
+44864 44864 1
+1 44865 1
+44865 44865 1
+1 44866 1
+44866 44866 1
+1 44867 1
+44867 44867 1
+1 44868 1
+44868 44868 1
+1 44869 1
+44869 44869 1
+1 44870 1
+44870 44870 1
+1 44871 1
+44871 44871 1
+1 44872 1
+44872 44872 1
+1 44873 1
+44873 44873 1
+1 44874 1
+44874 44874 1
+1 44875 1
+44875 44875 1
+1 44876 1
+44876 44876 1
+1 44877 1
+44877 44877 1
+1 44878 1
+44878 44878 1
+1 44879 1
+44879 44879 1
+1 44880 1
+44880 44880 1
+1 44881 1
+44881 44881 1
+1 44882 1
+44882 44882 1
+1 44883 1
+44883 44883 1
+1 44884 1
+44884 44884 1
+1 44885 1
+44885 44885 1
+1 44886 1
+44886 44886 1
+1 44887 1
+44887 44887 1
+1 44888 1
+44888 44888 1
+1 44889 1
+44889 44889 1
+1 44890 1
+44890 44890 1
+1 44891 1
+44891 44891 1
+1 44892 1
+44892 44892 1
+1 44893 1
+44893 44893 1
+1 44894 1
+44894 44894 1
+1 44895 1
+44895 44895 1
+1 44896 1
+44896 44896 1
+1 44897 1
+44897 44897 1
+1 44898 1
+44898 44898 1
+1 44899 1
+44899 44899 1
+1 44900 1
+44900 44900 1
+1 44901 1
+44901 44901 1
+1 44902 1
+44902 44902 1
+1 44903 1
+44903 44903 1
+1 44904 1
+44904 44904 1
+1 44905 1
+44905 44905 1
+1 44906 1
+44906 44906 1
+1 44907 1
+44907 44907 1
+1 44908 1
+44908 44908 1
+1 44909 1
+44909 44909 1
+1 44910 1
+44910 44910 1
+1 44911 1
+44911 44911 1
+1 44912 1
+44912 44912 1
+1 44913 1
+44913 44913 1
+1 44914 1
+44914 44914 1
+1 44915 1
+44915 44915 1
+1 44916 1
+44916 44916 1
+1 44917 1
+44917 44917 1
+1 44918 1
+44918 44918 1
+1 44919 1
+44919 44919 1
+1 44920 1
+44920 44920 1
+1 44921 1
+44921 44921 1
+1 44922 1
+44922 44922 1
+1 44923 1
+44923 44923 1
+1 44924 1
+44924 44924 1
+1 44925 1
+44925 44925 1
+1 44926 1
+44926 44926 1
+1 44927 1
+44927 44927 1
+1 44928 1
+44928 44928 1
+1 44929 1
+44929 44929 1
+1 44930 1
+44930 44930 1
+1 44931 1
+44931 44931 1
+1 44932 1
+44932 44932 1
+1 44933 1
+44933 44933 1
+1 44934 1
+44934 44934 1
+1 44935 1
+44935 44935 1
+1 44936 1
+44936 44936 1
+1 44937 1
+44937 44937 1
+1 44938 1
+44938 44938 1
+1 44939 1
+44939 44939 1
+1 44940 1
+44940 44940 1
+1 44941 1
+44941 44941 1
+1 44942 1
+44942 44942 1
+1 44943 1
+44943 44943 1
+1 44944 1
+44944 44944 1
+1 44945 1
+44945 44945 1
+1 44946 1
+44946 44946 1
+1 44947 1
+44947 44947 1
+1 44948 1
+44948 44948 1
+1 44949 1
+44949 44949 1
+1 44950 1
+44950 44950 1
+1 44951 1
+44951 44951 1
+1 44952 1
+44952 44952 1
+1 44953 1
+44953 44953 1
+1 44954 1
+44954 44954 1
+1 44955 1
+44955 44955 1
+1 44956 1
+44956 44956 1
+1 44957 1
+44957 44957 1
+1 44958 1
+44958 44958 1
+1 44959 1
+44959 44959 1
+1 44960 1
+44960 44960 1
+1 44961 1
+44961 44961 1
+1 44962 1
+44962 44962 1
+1 44963 1
+44963 44963 1
+1 44964 1
+44964 44964 1
+1 44965 1
+44965 44965 1
+1 44966 1
+44966 44966 1
+1 44967 1
+44967 44967 1
+1 44968 1
+44968 44968 1
+1 44969 1
+44969 44969 1
+1 44970 1
+44970 44970 1
+1 44971 1
+44971 44971 1
+1 44972 1
+44972 44972 1
+1 44973 1
+44973 44973 1
+1 44974 1
+44974 44974 1
+1 44975 1
+44975 44975 1
+1 44976 1
+44976 44976 1
+1 44977 1
+44977 44977 1
+1 44978 1
+44978 44978 1
+1 44979 1
+44979 44979 1
+1 44980 1
+44980 44980 1
+1 44981 1
+44981 44981 1
+1 44982 1
+44982 44982 1
+1 44983 1
+44983 44983 1
+1 44984 1
+44984 44984 1
+1 44985 1
+44985 44985 1
+1 44986 1
+44986 44986 1
+1 44987 1
+44987 44987 1
+1 44988 1
+44988 44988 1
+1 44989 1
+44989 44989 1
+1 44990 1
+44990 44990 1
+1 44991 1
+44991 44991 1
+1 44992 1
+44992 44992 1
+1 44993 1
+44993 44993 1
+1 44994 1
+44994 44994 1
+1 44995 1
+44995 44995 1
+1 44996 1
+44996 44996 1
+1 44997 1
+44997 44997 1
+1 44998 1
+44998 44998 1
+1 44999 1
+44999 44999 1
+1 45000 1
+45000 45000 1
+1 45001 1
+45001 45001 1
+1 45002 1
+45002 45002 1
+1 45003 1
+45003 45003 1
+1 45004 1
+45004 45004 1
+1 45005 1
+45005 45005 1
+1 45006 1
+45006 45006 1
+1 45007 1
+45007 45007 1
+1 45008 1
+45008 45008 1
+1 45009 1
+45009 45009 1
+1 45010 1
+45010 45010 1
+1 45011 1
+45011 45011 1
+1 45012 1
+45012 45012 1
+1 45013 1
+45013 45013 1
+1 45014 1
+45014 45014 1
+1 45015 1
+45015 45015 1
+1 45016 1
+45016 45016 1
+1 45017 1
+45017 45017 1
+1 45018 1
+45018 45018 1
+1 45019 1
+45019 45019 1
+1 45020 1
+45020 45020 1
+1 45021 1
+45021 45021 1
+1 45022 1
+45022 45022 1
+1 45023 1
+45023 45023 1
+1 45024 1
+45024 45024 1
+1 45025 1
+45025 45025 1
+1 45026 1
+45026 45026 1
+1 45027 1
+45027 45027 1
+1 45028 1
+45028 45028 1
+1 45029 1
+45029 45029 1
+1 45030 1
+45030 45030 1
+1 45031 1
+45031 45031 1
+1 45032 1
+45032 45032 1
+1 45033 1
+45033 45033 1
+1 45034 1
+45034 45034 1
+1 45035 1
+45035 45035 1
+1 45036 1
+45036 45036 1
+1 45037 1
+45037 45037 1
+1 45038 1
+45038 45038 1
+1 45039 1
+45039 45039 1
+1 45040 1
+45040 45040 1
+1 45041 1
+45041 45041 1
+1 45042 1
+45042 45042 1
+1 45043 1
+45043 45043 1
+1 45044 1
+45044 45044 1
+1 45045 1
+45045 45045 1
+1 45046 1
+45046 45046 1
+1 45047 1
+45047 45047 1
+1 45048 1
+45048 45048 1
+1 45049 1
+45049 45049 1
+1 45050 1
+45050 45050 1
+1 45051 1
+45051 45051 1
+1 45052 1
+45052 45052 1
+1 45053 1
+45053 45053 1
+1 45054 1
+45054 45054 1
+1 45055 1
+45055 45055 1
+1 45056 1
+45056 45056 1
+1 45057 1
+45057 45057 1
+1 45058 1
+45058 45058 1
+1 45059 1
+45059 45059 1
+1 45060 1
+45060 45060 1
+1 45061 1
+45061 45061 1
+1 45062 1
+45062 45062 1
+1 45063 1
+45063 45063 1
+1 45064 1
+45064 45064 1
+1 45065 1
+45065 45065 1
+1 45066 1
+45066 45066 1
+1 45067 1
+45067 45067 1
+1 45068 1
+45068 45068 1
+1 45069 1
+45069 45069 1
+1 45070 1
+45070 45070 1
+1 45071 1
+45071 45071 1
+1 45072 1
+45072 45072 1
+1 45073 1
+45073 45073 1
+1 45074 1
+45074 45074 1
+1 45075 1
+45075 45075 1
+1 45076 1
+45076 45076 1
+1 45077 1
+45077 45077 1
+1 45078 1
+45078 45078 1
+1 45079 1
+45079 45079 1
+1 45080 1
+45080 45080 1
+1 45081 1
+45081 45081 1
+1 45082 1
+45082 45082 1
+1 45083 1
+45083 45083 1
+1 45084 1
+45084 45084 1
+1 45085 1
+45085 45085 1
+1 45086 1
+45086 45086 1
+1 45087 1
+45087 45087 1
+1 45088 1
+45088 45088 1
+1 45089 1
+45089 45089 1
+1 45090 1
+45090 45090 1
+1 45091 1
+45091 45091 1
+1 45092 1
+45092 45092 1
+1 45093 1
+45093 45093 1
+1 45094 1
+45094 45094 1
+1 45095 1
+45095 45095 1
+1 45096 1
+45096 45096 1
+1 45097 1
+45097 45097 1
+1 45098 1
+45098 45098 1
+1 45099 1
+45099 45099 1
+1 45100 1
+45100 45100 1
+1 45101 1
+45101 45101 1
+1 45102 1
+45102 45102 1
+1 45103 1
+45103 45103 1
+1 45104 1
+45104 45104 1
+1 45105 1
+45105 45105 1
+1 45106 1
+45106 45106 1
+1 45107 1
+45107 45107 1
+1 45108 1
+45108 45108 1
+1 45109 1
+45109 45109 1
+1 45110 1
+45110 45110 1
+1 45111 1
+45111 45111 1
+1 45112 1
+45112 45112 1
+1 45113 1
+45113 45113 1
+1 45114 1
+45114 45114 1
+1 45115 1
+45115 45115 1
+1 45116 1
+45116 45116 1
+1 45117 1
+45117 45117 1
+1 45118 1
+45118 45118 1
+1 45119 1
+45119 45119 1
+1 45120 1
+45120 45120 1
+1 45121 1
+45121 45121 1
+1 45122 1
+45122 45122 1
+1 45123 1
+45123 45123 1
+1 45124 1
+45124 45124 1
+1 45125 1
+45125 45125 1
+1 45126 1
+45126 45126 1
+1 45127 1
+45127 45127 1
+1 45128 1
+45128 45128 1
+1 45129 1
+45129 45129 1
+1 45130 1
+45130 45130 1
+1 45131 1
+45131 45131 1
+1 45132 1
+45132 45132 1
+1 45133 1
+45133 45133 1
+1 45134 1
+45134 45134 1
+1 45135 1
+45135 45135 1
+1 45136 1
+45136 45136 1
+1 45137 1
+45137 45137 1
+1 45138 1
+45138 45138 1
+1 45139 1
+45139 45139 1
+1 45140 1
+45140 45140 1
+1 45141 1
+45141 45141 1
+1 45142 1
+45142 45142 1
+1 45143 1
+45143 45143 1
+1 45144 1
+45144 45144 1
+1 45145 1
+45145 45145 1
+1 45146 1
+45146 45146 1
+1 45147 1
+45147 45147 1
+1 45148 1
+45148 45148 1
+1 45149 1
+45149 45149 1
+1 45150 1
+45150 45150 1
+1 45151 1
+45151 45151 1
+1 45152 1
+45152 45152 1
+1 45153 1
+45153 45153 1
+1 45154 1
+45154 45154 1
+1 45155 1
+45155 45155 1
+1 45156 1
+45156 45156 1
+1 45157 1
+45157 45157 1
+1 45158 1
+45158 45158 1
+1 45159 1
+45159 45159 1
+1 45160 1
+45160 45160 1
+1 45161 1
+45161 45161 1
+1 45162 1
+45162 45162 1
+1 45163 1
+45163 45163 1
+1 45164 1
+45164 45164 1
+1 45165 1
+45165 45165 1
+1 45166 1
+45166 45166 1
+1 45167 1
+45167 45167 1
+1 45168 1
+45168 45168 1
+1 45169 1
+45169 45169 1
+1 45170 1
+45170 45170 1
+1 45171 1
+45171 45171 1
+1 45172 1
+45172 45172 1
+1 45173 1
+45173 45173 1
+1 45174 1
+45174 45174 1
+1 45175 1
+45175 45175 1
+1 45176 1
+45176 45176 1
+1 45177 1
+45177 45177 1
+1 45178 1
+45178 45178 1
+1 45179 1
+45179 45179 1
+1 45180 1
+45180 45180 1
+1 45181 1
+45181 45181 1
+1 45182 1
+45182 45182 1
+1 45183 1
+45183 45183 1
+1 45184 1
+45184 45184 1
+1 45185 1
+45185 45185 1
+1 45186 1
+45186 45186 1
+1 45187 1
+45187 45187 1
+1 45188 1
+45188 45188 1
+1 45189 1
+45189 45189 1
+1 45190 1
+45190 45190 1
+1 45191 1
+45191 45191 1
+1 45192 1
+45192 45192 1
+1 45193 1
+45193 45193 1
+1 45194 1
+45194 45194 1
+1 45195 1
+45195 45195 1
+1 45196 1
+45196 45196 1
+1 45197 1
+45197 45197 1
+1 45198 1
+45198 45198 1
+1 45199 1
+45199 45199 1
+1 45200 1
+45200 45200 1
+1 45201 1
+45201 45201 1
+1 45202 1
+45202 45202 1
+1 45203 1
+45203 45203 1
+1 45204 1
+45204 45204 1
+1 45205 1
+45205 45205 1
+1 45206 1
+45206 45206 1
+1 45207 1
+45207 45207 1
+1 45208 1
+45208 45208 1
+1 45209 1
+45209 45209 1
+1 45210 1
+45210 45210 1
+1 45211 1
+45211 45211 1
+1 45212 1
+45212 45212 1
+1 45213 1
+45213 45213 1
+1 45214 1
+45214 45214 1
+1 45215 1
+45215 45215 1
+1 45216 1
+45216 45216 1
+1 45217 1
+45217 45217 1
+1 45218 1
+45218 45218 1
+1 45219 1
+45219 45219 1
+1 45220 1
+45220 45220 1
+1 45221 1
+45221 45221 1
+1 45222 1
+45222 45222 1
+1 45223 1
+45223 45223 1
+1 45224 1
+45224 45224 1
+1 45225 1
+45225 45225 1
+1 45226 1
+45226 45226 1
+1 45227 1
+45227 45227 1
+1 45228 1
+45228 45228 1
+1 45229 1
+45229 45229 1
+1 45230 1
+45230 45230 1
+1 45231 1
+45231 45231 1
+1 45232 1
+45232 45232 1
+1 45233 1
+45233 45233 1
+1 45234 1
+45234 45234 1
+1 45235 1
+45235 45235 1
+1 45236 1
+45236 45236 1
+1 45237 1
+45237 45237 1
+1 45238 1
+45238 45238 1
+1 45239 1
+45239 45239 1
+1 45240 1
+45240 45240 1
+1 45241 1
+45241 45241 1
+1 45242 1
+45242 45242 1
+1 45243 1
+45243 45243 1
+1 45244 1
+45244 45244 1
+1 45245 1
+45245 45245 1
+1 45246 1
+45246 45246 1
+1 45247 1
+45247 45247 1
+1 45248 1
+45248 45248 1
+1 45249 1
+45249 45249 1
+1 45250 1
+45250 45250 1
+1 45251 1
+45251 45251 1
+1 45252 1
+45252 45252 1
+1 45253 1
+45253 45253 1
+1 45254 1
+45254 45254 1
+1 45255 1
+45255 45255 1
+1 45256 1
+45256 45256 1
+1 45257 1
+45257 45257 1
+1 45258 1
+45258 45258 1
+1 45259 1
+45259 45259 1
+1 45260 1
+45260 45260 1
+1 45261 1
+45261 45261 1
+1 45262 1
+45262 45262 1
+1 45263 1
+45263 45263 1
+1 45264 1
+45264 45264 1
+1 45265 1
+45265 45265 1
+1 45266 1
+45266 45266 1
+1 45267 1
+45267 45267 1
+1 45268 1
+45268 45268 1
+1 45269 1
+45269 45269 1
+1 45270 1
+45270 45270 1
+1 45271 1
+45271 45271 1
+1 45272 1
+45272 45272 1
+1 45273 1
+45273 45273 1
+1 45274 1
+45274 45274 1
+1 45275 1
+45275 45275 1
+1 45276 1
+45276 45276 1
+1 45277 1
+45277 45277 1
+1 45278 1
+45278 45278 1
+1 45279 1
+45279 45279 1
+1 45280 1
+45280 45280 1
+1 45281 1
+45281 45281 1
+1 45282 1
+45282 45282 1
+1 45283 1
+45283 45283 1
+1 45284 1
+45284 45284 1
+1 45285 1
+45285 45285 1
+1 45286 1
+45286 45286 1
+1 45287 1
+45287 45287 1
+1 45288 1
+45288 45288 1
+1 45289 1
+45289 45289 1
+1 45290 1
+45290 45290 1
+1 45291 1
+45291 45291 1
+1 45292 1
+45292 45292 1
+1 45293 1
+45293 45293 1
+1 45294 1
+45294 45294 1
+1 45295 1
+45295 45295 1
+1 45296 1
+45296 45296 1
+1 45297 1
+45297 45297 1
+1 45298 1
+45298 45298 1
+1 45299 1
+45299 45299 1
+1 45300 1
+45300 45300 1
+1 45301 1
+45301 45301 1
+1 45302 1
+45302 45302 1
+1 45303 1
+45303 45303 1
+1 45304 1
+45304 45304 1
+1 45305 1
+45305 45305 1
+1 45306 1
+45306 45306 1
+1 45307 1
+45307 45307 1
+1 45308 1
+45308 45308 1
+1 45309 1
+45309 45309 1
+1 45310 1
+45310 45310 1
+1 45311 1
+45311 45311 1
+1 45312 1
+45312 45312 1
+1 45313 1
+45313 45313 1
+1 45314 1
+45314 45314 1
+1 45315 1
+45315 45315 1
+1 45316 1
+45316 45316 1
+1 45317 1
+45317 45317 1
+1 45318 1
+45318 45318 1
+1 45319 1
+45319 45319 1
+1 45320 1
+45320 45320 1
+1 45321 1
+45321 45321 1
+1 45322 1
+45322 45322 1
+1 45323 1
+45323 45323 1
+1 45324 1
+45324 45324 1
+1 45325 1
+45325 45325 1
+1 45326 1
+45326 45326 1
+1 45327 1
+45327 45327 1
+1 45328 1
+45328 45328 1
+1 45329 1
+45329 45329 1
+1 45330 1
+45330 45330 1
+1 45331 1
+45331 45331 1
+1 45332 1
+45332 45332 1
+1 45333 1
+45333 45333 1
+1 45334 1
+45334 45334 1
+1 45335 1
+45335 45335 1
+1 45336 1
+45336 45336 1
+1 45337 1
+45337 45337 1
+1 45338 1
+45338 45338 1
+1 45339 1
+45339 45339 1
+1 45340 1
+45340 45340 1
+1 45341 1
+45341 45341 1
+1 45342 1
+45342 45342 1
+1 45343 1
+45343 45343 1
+1 45344 1
+45344 45344 1
+1 45345 1
+45345 45345 1
+1 45346 1
+45346 45346 1
+1 45347 1
+45347 45347 1
+1 45348 1
+45348 45348 1
+1 45349 1
+45349 45349 1
+1 45350 1
+45350 45350 1
+1 45351 1
+45351 45351 1
+1 45352 1
+45352 45352 1
+1 45353 1
+45353 45353 1
+1 45354 1
+45354 45354 1
+1 45355 1
+45355 45355 1
+1 45356 1
+45356 45356 1
+1 45357 1
+45357 45357 1
+1 45358 1
+45358 45358 1
+1 45359 1
+45359 45359 1
+1 45360 1
+45360 45360 1
+1 45361 1
+45361 45361 1
+1 45362 1
+45362 45362 1
+1 45363 1
+45363 45363 1
+1 45364 1
+45364 45364 1
+1 45365 1
+45365 45365 1
+1 45366 1
+45366 45366 1
+1 45367 1
+45367 45367 1
+1 45368 1
+45368 45368 1
+1 45369 1
+45369 45369 1
+1 45370 1
+45370 45370 1
+1 45371 1
+45371 45371 1
+1 45372 1
+45372 45372 1
+1 45373 1
+45373 45373 1
+1 45374 1
+45374 45374 1
+1 45375 1
+45375 45375 1
+1 45376 1
+45376 45376 1
+1 45377 1
+45377 45377 1
+1 45378 1
+45378 45378 1
+1 45379 1
+45379 45379 1
+1 45380 1
+45380 45380 1
+1 45381 1
+45381 45381 1
+1 45382 1
+45382 45382 1
+1 45383 1
+45383 45383 1
+1 45384 1
+45384 45384 1
+1 45385 1
+45385 45385 1
+1 45386 1
+45386 45386 1
+1 45387 1
+45387 45387 1
+1 45388 1
+45388 45388 1
+1 45389 1
+45389 45389 1
+1 45390 1
+45390 45390 1
+1 45391 1
+45391 45391 1
+1 45392 1
+45392 45392 1
+1 45393 1
+45393 45393 1
+1 45394 1
+45394 45394 1
+1 45395 1
+45395 45395 1
+1 45396 1
+45396 45396 1
+1 45397 1
+45397 45397 1
+1 45398 1
+45398 45398 1
+1 45399 1
+45399 45399 1
+1 45400 1
+45400 45400 1
+1 45401 1
+45401 45401 1
+1 45402 1
+45402 45402 1
+1 45403 1
+45403 45403 1
+1 45404 1
+45404 45404 1
+1 45405 1
+45405 45405 1
+1 45406 1
+45406 45406 1
+1 45407 1
+45407 45407 1
+1 45408 1
+45408 45408 1
+1 45409 1
+45409 45409 1
+1 45410 1
+45410 45410 1
+1 45411 1
+45411 45411 1
+1 45412 1
+45412 45412 1
+1 45413 1
+45413 45413 1
+1 45414 1
+45414 45414 1
+1 45415 1
+45415 45415 1
+1 45416 1
+45416 45416 1
+1 45417 1
+45417 45417 1
+1 45418 1
+45418 45418 1
+1 45419 1
+45419 45419 1
+1 45420 1
+45420 45420 1
+1 45421 1
+45421 45421 1
+1 45422 1
+45422 45422 1
+1 45423 1
+45423 45423 1
+1 45424 1
+45424 45424 1
+1 45425 1
+45425 45425 1
+1 45426 1
+45426 45426 1
+1 45427 1
+45427 45427 1
+1 45428 1
+45428 45428 1
+1 45429 1
+45429 45429 1
+1 45430 1
+45430 45430 1
+1 45431 1
+45431 45431 1
+1 45432 1
+45432 45432 1
+1 45433 1
+45433 45433 1
+1 45434 1
+45434 45434 1
+1 45435 1
+45435 45435 1
+1 45436 1
+45436 45436 1
+1 45437 1
+45437 45437 1
+1 45438 1
+45438 45438 1
+1 45439 1
+45439 45439 1
+1 45440 1
+45440 45440 1
+1 45441 1
+45441 45441 1
+1 45442 1
+45442 45442 1
+1 45443 1
+45443 45443 1
+1 45444 1
+45444 45444 1
+1 45445 1
+45445 45445 1
+1 45446 1
+45446 45446 1
+1 45447 1
+45447 45447 1
+1 45448 1
+45448 45448 1
+1 45449 1
+45449 45449 1
+1 45450 1
+45450 45450 1
+1 45451 1
+45451 45451 1
+1 45452 1
+45452 45452 1
+1 45453 1
+45453 45453 1
+1 45454 1
+45454 45454 1
+1 45455 1
+45455 45455 1
+1 45456 1
+45456 45456 1
+1 45457 1
+45457 45457 1
+1 45458 1
+45458 45458 1
+1 45459 1
+45459 45459 1
+1 45460 1
+45460 45460 1
+1 45461 1
+45461 45461 1
+1 45462 1
+45462 45462 1
+1 45463 1
+45463 45463 1
+1 45464 1
+45464 45464 1
+1 45465 1
+45465 45465 1
+1 45466 1
+45466 45466 1
+1 45467 1
+45467 45467 1
+1 45468 1
+45468 45468 1
+1 45469 1
+45469 45469 1
+1 45470 1
+45470 45470 1
+1 45471 1
+45471 45471 1
+1 45472 1
+45472 45472 1
+1 45473 1
+45473 45473 1
+1 45474 1
+45474 45474 1
+1 45475 1
+45475 45475 1
+1 45476 1
+45476 45476 1
+1 45477 1
+45477 45477 1
+1 45478 1
+45478 45478 1
+1 45479 1
+45479 45479 1
+1 45480 1
+45480 45480 1
+1 45481 1
+45481 45481 1
+1 45482 1
+45482 45482 1
+1 45483 1
+45483 45483 1
+1 45484 1
+45484 45484 1
+1 45485 1
+45485 45485 1
+1 45486 1
+45486 45486 1
+1 45487 1
+45487 45487 1
+1 45488 1
+45488 45488 1
+1 45489 1
+45489 45489 1
+1 45490 1
+45490 45490 1
+1 45491 1
+45491 45491 1
+1 45492 1
+45492 45492 1
+1 45493 1
+45493 45493 1
+1 45494 1
+45494 45494 1
+1 45495 1
+45495 45495 1
+1 45496 1
+45496 45496 1
+1 45497 1
+45497 45497 1
+1 45498 1
+45498 45498 1
+1 45499 1
+45499 45499 1
+1 45500 1
+45500 45500 1
+1 45501 1
+45501 45501 1
+1 45502 1
+45502 45502 1
+1 45503 1
+45503 45503 1
+1 45504 1
+45504 45504 1
+1 45505 1
+45505 45505 1
+1 45506 1
+45506 45506 1
+1 45507 1
+45507 45507 1
+1 45508 1
+45508 45508 1
+1 45509 1
+45509 45509 1
+1 45510 1
+45510 45510 1
+1 45511 1
+45511 45511 1
+1 45512 1
+45512 45512 1
+1 45513 1
+45513 45513 1
+1 45514 1
+45514 45514 1
+1 45515 1
+45515 45515 1
+1 45516 1
+45516 45516 1
+1 45517 1
+45517 45517 1
+1 45518 1
+45518 45518 1
+1 45519 1
+45519 45519 1
+1 45520 1
+45520 45520 1
+1 45521 1
+45521 45521 1
+1 45522 1
+45522 45522 1
+1 45523 1
+45523 45523 1
+1 45524 1
+45524 45524 1
+1 45525 1
+45525 45525 1
+1 45526 1
+45526 45526 1
+1 45527 1
+45527 45527 1
+1 45528 1
+45528 45528 1
+1 45529 1
+45529 45529 1
+1 45530 1
+45530 45530 1
+1 45531 1
+45531 45531 1
+1 45532 1
+45532 45532 1
+1 45533 1
+45533 45533 1
+1 45534 1
+45534 45534 1
+1 45535 1
+45535 45535 1
+1 45536 1
+45536 45536 1
+1 45537 1
+45537 45537 1
+1 45538 1
+45538 45538 1
+1 45539 1
+45539 45539 1
+1 45540 1
+45540 45540 1
+1 45541 1
+45541 45541 1
+1 45542 1
+45542 45542 1
+1 45543 1
+45543 45543 1
+1 45544 1
+45544 45544 1
+1 45545 1
+45545 45545 1
+1 45546 1
+45546 45546 1
+1 45547 1
+45547 45547 1
+1 45548 1
+45548 45548 1
+1 45549 1
+45549 45549 1
+1 45550 1
+45550 45550 1
+1 45551 1
+45551 45551 1
+1 45552 1
+45552 45552 1
+1 45553 1
+45553 45553 1
+1 45554 1
+45554 45554 1
+1 45555 1
+45555 45555 1
+1 45556 1
+45556 45556 1
+1 45557 1
+45557 45557 1
+1 45558 1
+45558 45558 1
+1 45559 1
+45559 45559 1
+1 45560 1
+45560 45560 1
+1 45561 1
+45561 45561 1
+1 45562 1
+45562 45562 1
+1 45563 1
+45563 45563 1
+1 45564 1
+45564 45564 1
+1 45565 1
+45565 45565 1
+1 45566 1
+45566 45566 1
+1 45567 1
+45567 45567 1
+1 45568 1
+45568 45568 1
+1 45569 1
+45569 45569 1
+1 45570 1
+45570 45570 1
+1 45571 1
+45571 45571 1
+1 45572 1
+45572 45572 1
+1 45573 1
+45573 45573 1
+1 45574 1
+45574 45574 1
+1 45575 1
+45575 45575 1
+1 45576 1
+45576 45576 1
+1 45577 1
+45577 45577 1
+1 45578 1
+45578 45578 1
+1 45579 1
+45579 45579 1
+1 45580 1
+45580 45580 1
+1 45581 1
+45581 45581 1
+1 45582 1
+45582 45582 1
+1 45583 1
+45583 45583 1
+1 45584 1
+45584 45584 1
+1 45585 1
+45585 45585 1
+1 45586 1
+45586 45586 1
+1 45587 1
+45587 45587 1
+1 45588 1
+45588 45588 1
+1 45589 1
+45589 45589 1
+1 45590 1
+45590 45590 1
+1 45591 1
+45591 45591 1
+1 45592 1
+45592 45592 1
+1 45593 1
+45593 45593 1
+1 45594 1
+45594 45594 1
+1 45595 1
+45595 45595 1
+1 45596 1
+45596 45596 1
+1 45597 1
+45597 45597 1
+1 45598 1
+45598 45598 1
+1 45599 1
+45599 45599 1
+1 45600 1
+45600 45600 1
+1 45601 1
+45601 45601 1
+1 45602 1
+45602 45602 1
+1 45603 1
+45603 45603 1
+1 45604 1
+45604 45604 1
+1 45605 1
+45605 45605 1
+1 45606 1
+45606 45606 1
+1 45607 1
+45607 45607 1
+1 45608 1
+45608 45608 1
+1 45609 1
+45609 45609 1
+1 45610 1
+45610 45610 1
+1 45611 1
+45611 45611 1
+1 45612 1
+45612 45612 1
+1 45613 1
+45613 45613 1
+1 45614 1
+45614 45614 1
+1 45615 1
+45615 45615 1
+1 45616 1
+45616 45616 1
+1 45617 1
+45617 45617 1
+1 45618 1
+45618 45618 1
+1 45619 1
+45619 45619 1
+1 45620 1
+45620 45620 1
+1 45621 1
+45621 45621 1
+1 45622 1
+45622 45622 1
+1 45623 1
+45623 45623 1
+1 45624 1
+45624 45624 1
+1 45625 1
+45625 45625 1
+1 45626 1
+45626 45626 1
+1 45627 1
+45627 45627 1
+1 45628 1
+45628 45628 1
+1 45629 1
+45629 45629 1
+1 45630 1
+45630 45630 1
+1 45631 1
+45631 45631 1
+1 45632 1
+45632 45632 1
+1 45633 1
+45633 45633 1
+1 45634 1
+45634 45634 1
+1 45635 1
+45635 45635 1
+1 45636 1
+45636 45636 1
+1 45637 1
+45637 45637 1
+1 45638 1
+45638 45638 1
+1 45639 1
+45639 45639 1
+1 45640 1
+45640 45640 1
+1 45641 1
+45641 45641 1
+1 45642 1
+45642 45642 1
+1 45643 1
+45643 45643 1
+1 45644 1
+45644 45644 1
+1 45645 1
+45645 45645 1
+1 45646 1
+45646 45646 1
+1 45647 1
+45647 45647 1
+1 45648 1
+45648 45648 1
+1 45649 1
+45649 45649 1
+1 45650 1
+45650 45650 1
+1 45651 1
+45651 45651 1
+1 45652 1
+45652 45652 1
+1 45653 1
+45653 45653 1
+1 45654 1
+45654 45654 1
+1 45655 1
+45655 45655 1
+1 45656 1
+45656 45656 1
+1 45657 1
+45657 45657 1
+1 45658 1
+45658 45658 1
+1 45659 1
+45659 45659 1
+1 45660 1
+45660 45660 1
+1 45661 1
+45661 45661 1
+1 45662 1
+45662 45662 1
+1 45663 1
+45663 45663 1
+1 45664 1
+45664 45664 1
+1 45665 1
+45665 45665 1
+1 45666 1
+45666 45666 1
+1 45667 1
+45667 45667 1
+1 45668 1
+45668 45668 1
+1 45669 1
+45669 45669 1
+1 45670 1
+45670 45670 1
+1 45671 1
+45671 45671 1
+1 45672 1
+45672 45672 1
+1 45673 1
+45673 45673 1
+1 45674 1
+45674 45674 1
+1 45675 1
+45675 45675 1
+1 45676 1
+45676 45676 1
+1 45677 1
+45677 45677 1
+1 45678 1
+45678 45678 1
+1 45679 1
+45679 45679 1
+1 45680 1
+45680 45680 1
+1 45681 1
+45681 45681 1
+1 45682 1
+45682 45682 1
+1 45683 1
+45683 45683 1
+1 45684 1
+45684 45684 1
+1 45685 1
+45685 45685 1
+1 45686 1
+45686 45686 1
+1 45687 1
+45687 45687 1
+1 45688 1
+45688 45688 1
+1 45689 1
+45689 45689 1
+1 45690 1
+45690 45690 1
+1 45691 1
+45691 45691 1
+1 45692 1
+45692 45692 1
+1 45693 1
+45693 45693 1
+1 45694 1
+45694 45694 1
+1 45695 1
+45695 45695 1
+1 45696 1
+45696 45696 1
+1 45697 1
+45697 45697 1
+1 45698 1
+45698 45698 1
+1 45699 1
+45699 45699 1
+1 45700 1
+45700 45700 1
+1 45701 1
+45701 45701 1
+1 45702 1
+45702 45702 1
+1 45703 1
+45703 45703 1
+1 45704 1
+45704 45704 1
+1 45705 1
+45705 45705 1
+1 45706 1
+45706 45706 1
+1 45707 1
+45707 45707 1
+1 45708 1
+45708 45708 1
+1 45709 1
+45709 45709 1
+1 45710 1
+45710 45710 1
+1 45711 1
+45711 45711 1
+1 45712 1
+45712 45712 1
+1 45713 1
+45713 45713 1
+1 45714 1
+45714 45714 1
+1 45715 1
+45715 45715 1
+1 45716 1
+45716 45716 1
+1 45717 1
+45717 45717 1
+1 45718 1
+45718 45718 1
+1 45719 1
+45719 45719 1
+1 45720 1
+45720 45720 1
+1 45721 1
+45721 45721 1
+1 45722 1
+45722 45722 1
+1 45723 1
+45723 45723 1
+1 45724 1
+45724 45724 1
+1 45725 1
+45725 45725 1
+1 45726 1
+45726 45726 1
+1 45727 1
+45727 45727 1
+1 45728 1
+45728 45728 1
+1 45729 1
+45729 45729 1
+1 45730 1
+45730 45730 1
+1 45731 1
+45731 45731 1
+1 45732 1
+45732 45732 1
+1 45733 1
+45733 45733 1
+1 45734 1
+45734 45734 1
+1 45735 1
+45735 45735 1
+1 45736 1
+45736 45736 1
+1 45737 1
+45737 45737 1
+1 45738 1
+45738 45738 1
+1 45739 1
+45739 45739 1
+1 45740 1
+45740 45740 1
+1 45741 1
+45741 45741 1
+1 45742 1
+45742 45742 1
+1 45743 1
+45743 45743 1
+1 45744 1
+45744 45744 1
+1 45745 1
+45745 45745 1
+1 45746 1
+45746 45746 1
+1 45747 1
+45747 45747 1
+1 45748 1
+45748 45748 1
+1 45749 1
+45749 45749 1
+1 45750 1
+45750 45750 1
+1 45751 1
+45751 45751 1
+1 45752 1
+45752 45752 1
+1 45753 1
+45753 45753 1
+1 45754 1
+45754 45754 1
+1 45755 1
+45755 45755 1
+1 45756 1
+45756 45756 1
+1 45757 1
+45757 45757 1
+1 45758 1
+45758 45758 1
+1 45759 1
+45759 45759 1
+1 45760 1
+45760 45760 1
+1 45761 1
+45761 45761 1
+1 45762 1
+45762 45762 1
+1 45763 1
+45763 45763 1
+1 45764 1
+45764 45764 1
+1 45765 1
+45765 45765 1
+1 45766 1
+45766 45766 1
+1 45767 1
+45767 45767 1
+1 45768 1
+45768 45768 1
+1 45769 1
+45769 45769 1
+1 45770 1
+45770 45770 1
+1 45771 1
+45771 45771 1
+1 45772 1
+45772 45772 1
+1 45773 1
+45773 45773 1
+1 45774 1
+45774 45774 1
+1 45775 1
+45775 45775 1
+1 45776 1
+45776 45776 1
+1 45777 1
+45777 45777 1
+1 45778 1
+45778 45778 1
+1 45779 1
+45779 45779 1
+1 45780 1
+45780 45780 1
+1 45781 1
+45781 45781 1
+1 45782 1
+45782 45782 1
+1 45783 1
+45783 45783 1
+1 45784 1
+45784 45784 1
+1 45785 1
+45785 45785 1
+1 45786 1
+45786 45786 1
+1 45787 1
+45787 45787 1
+1 45788 1
+45788 45788 1
+1 45789 1
+45789 45789 1
+1 45790 1
+45790 45790 1
+1 45791 1
+45791 45791 1
+1 45792 1
+45792 45792 1
+1 45793 1
+45793 45793 1
+1 45794 1
+45794 45794 1
+1 45795 1
+45795 45795 1
+1 45796 1
+45796 45796 1
+1 45797 1
+45797 45797 1
+1 45798 1
+45798 45798 1
+1 45799 1
+45799 45799 1
+1 45800 1
+45800 45800 1
+1 45801 1
+45801 45801 1
+1 45802 1
+45802 45802 1
+1 45803 1
+45803 45803 1
+1 45804 1
+45804 45804 1
+1 45805 1
+45805 45805 1
+1 45806 1
+45806 45806 1
+1 45807 1
+45807 45807 1
+1 45808 1
+45808 45808 1
+1 45809 1
+45809 45809 1
+1 45810 1
+45810 45810 1
+1 45811 1
+45811 45811 1
+1 45812 1
+45812 45812 1
+1 45813 1
+45813 45813 1
+1 45814 1
+45814 45814 1
+1 45815 1
+45815 45815 1
+1 45816 1
+45816 45816 1
+1 45817 1
+45817 45817 1
+1 45818 1
+45818 45818 1
+1 45819 1
+45819 45819 1
+1 45820 1
+45820 45820 1
+1 45821 1
+45821 45821 1
+1 45822 1
+45822 45822 1
+1 45823 1
+45823 45823 1
+1 45824 1
+45824 45824 1
+1 45825 1
+45825 45825 1
+1 45826 1
+45826 45826 1
+1 45827 1
+45827 45827 1
+1 45828 1
+45828 45828 1
+1 45829 1
+45829 45829 1
+1 45830 1
+45830 45830 1
+1 45831 1
+45831 45831 1
+1 45832 1
+45832 45832 1
+1 45833 1
+45833 45833 1
+1 45834 1
+45834 45834 1
+1 45835 1
+45835 45835 1
+1 45836 1
+45836 45836 1
+1 45837 1
+45837 45837 1
+1 45838 1
+45838 45838 1
+1 45839 1
+45839 45839 1
+1 45840 1
+45840 45840 1
+1 45841 1
+45841 45841 1
+1 45842 1
+45842 45842 1
+1 45843 1
+45843 45843 1
+1 45844 1
+45844 45844 1
+1 45845 1
+45845 45845 1
+1 45846 1
+45846 45846 1
+1 45847 1
+45847 45847 1
+1 45848 1
+45848 45848 1
+1 45849 1
+45849 45849 1
+1 45850 1
+45850 45850 1
+1 45851 1
+45851 45851 1
+1 45852 1
+45852 45852 1
+1 45853 1
+45853 45853 1
+1 45854 1
+45854 45854 1
+1 45855 1
+45855 45855 1
+1 45856 1
+45856 45856 1
+1 45857 1
+45857 45857 1
+1 45858 1
+45858 45858 1
+1 45859 1
+45859 45859 1
+1 45860 1
+45860 45860 1
+1 45861 1
+45861 45861 1
+1 45862 1
+45862 45862 1
+1 45863 1
+45863 45863 1
+1 45864 1
+45864 45864 1
+1 45865 1
+45865 45865 1
+1 45866 1
+45866 45866 1
+1 45867 1
+45867 45867 1
+1 45868 1
+45868 45868 1
+1 45869 1
+45869 45869 1
+1 45870 1
+45870 45870 1
+1 45871 1
+45871 45871 1
+1 45872 1
+45872 45872 1
+1 45873 1
+45873 45873 1
+1 45874 1
+45874 45874 1
+1 45875 1
+45875 45875 1
+1 45876 1
+45876 45876 1
+1 45877 1
+45877 45877 1
+1 45878 1
+45878 45878 1
+1 45879 1
+45879 45879 1
+1 45880 1
+45880 45880 1
+1 45881 1
+45881 45881 1
+1 45882 1
+45882 45882 1
+1 45883 1
+45883 45883 1
+1 45884 1
+45884 45884 1
+1 45885 1
+45885 45885 1
+1 45886 1
+45886 45886 1
+1 45887 1
+45887 45887 1
+1 45888 1
+45888 45888 1
+1 45889 1
+45889 45889 1
+1 45890 1
+45890 45890 1
+1 45891 1
+45891 45891 1
+1 45892 1
+45892 45892 1
+1 45893 1
+45893 45893 1
+1 45894 1
+45894 45894 1
+1 45895 1
+45895 45895 1
+1 45896 1
+45896 45896 1
+1 45897 1
+45897 45897 1
+1 45898 1
+45898 45898 1
+1 45899 1
+45899 45899 1
+1 45900 1
+45900 45900 1
+1 45901 1
+45901 45901 1
+1 45902 1
+45902 45902 1
+1 45903 1
+45903 45903 1
+1 45904 1
+45904 45904 1
+1 45905 1
+45905 45905 1
+1 45906 1
+45906 45906 1
+1 45907 1
+45907 45907 1
+1 45908 1
+45908 45908 1
+1 45909 1
+45909 45909 1
+1 45910 1
+45910 45910 1
+1 45911 1
+45911 45911 1
+1 45912 1
+45912 45912 1
+1 45913 1
+45913 45913 1
+1 45914 1
+45914 45914 1
+1 45915 1
+45915 45915 1
+1 45916 1
+45916 45916 1
+1 45917 1
+45917 45917 1
+1 45918 1
+45918 45918 1
+1 45919 1
+45919 45919 1
+1 45920 1
+45920 45920 1
+1 45921 1
+45921 45921 1
+1 45922 1
+45922 45922 1
+1 45923 1
+45923 45923 1
+1 45924 1
+45924 45924 1
+1 45925 1
+45925 45925 1
+1 45926 1
+45926 45926 1
+1 45927 1
+45927 45927 1
+1 45928 1
+45928 45928 1
+1 45929 1
+45929 45929 1
+1 45930 1
+45930 45930 1
+1 45931 1
+45931 45931 1
+1 45932 1
+45932 45932 1
+1 45933 1
+45933 45933 1
+1 45934 1
+45934 45934 1
+1 45935 1
+45935 45935 1
+1 45936 1
+45936 45936 1
+1 45937 1
+45937 45937 1
+1 45938 1
+45938 45938 1
+1 45939 1
+45939 45939 1
+1 45940 1
+45940 45940 1
+1 45941 1
+45941 45941 1
+1 45942 1
+45942 45942 1
+1 45943 1
+45943 45943 1
+1 45944 1
+45944 45944 1
+1 45945 1
+45945 45945 1
+1 45946 1
+45946 45946 1
+1 45947 1
+45947 45947 1
+1 45948 1
+45948 45948 1
+1 45949 1
+45949 45949 1
+1 45950 1
+45950 45950 1
+1 45951 1
+45951 45951 1
+1 45952 1
+45952 45952 1
+1 45953 1
+45953 45953 1
+1 45954 1
+45954 45954 1
+1 45955 1
+45955 45955 1
+1 45956 1
+45956 45956 1
+1 45957 1
+45957 45957 1
+1 45958 1
+45958 45958 1
+1 45959 1
+45959 45959 1
+1 45960 1
+45960 45960 1
+1 45961 1
+45961 45961 1
+1 45962 1
+45962 45962 1
+1 45963 1
+45963 45963 1
+1 45964 1
+45964 45964 1
+1 45965 1
+45965 45965 1
+1 45966 1
+45966 45966 1
+1 45967 1
+45967 45967 1
+1 45968 1
+45968 45968 1
+1 45969 1
+45969 45969 1
+1 45970 1
+45970 45970 1
+1 45971 1
+45971 45971 1
+1 45972 1
+45972 45972 1
+1 45973 1
+45973 45973 1
+1 45974 1
+45974 45974 1
+1 45975 1
+45975 45975 1
+1 45976 1
+45976 45976 1
+1 45977 1
+45977 45977 1
+1 45978 1
+45978 45978 1
+1 45979 1
+45979 45979 1
+1 45980 1
+45980 45980 1
+1 45981 1
+45981 45981 1
+1 45982 1
+45982 45982 1
+1 45983 1
+45983 45983 1
+1 45984 1
+45984 45984 1
+1 45985 1
+45985 45985 1
+1 45986 1
+45986 45986 1
+1 45987 1
+45987 45987 1
+1 45988 1
+45988 45988 1
+1 45989 1
+45989 45989 1
+1 45990 1
+45990 45990 1
+1 45991 1
+45991 45991 1
+1 45992 1
+45992 45992 1
+1 45993 1
+45993 45993 1
+1 45994 1
+45994 45994 1
+1 45995 1
+45995 45995 1
+1 45996 1
+45996 45996 1
+1 45997 1
+45997 45997 1
+1 45998 1
+45998 45998 1
+1 45999 1
+45999 45999 1
+1 46000 1
+46000 46000 1
+1 46001 1
+46001 46001 1
+1 46002 1
+46002 46002 1
+1 46003 1
+46003 46003 1
+1 46004 1
+46004 46004 1
+1 46005 1
+46005 46005 1
+1 46006 1
+46006 46006 1
+1 46007 1
+46007 46007 1
+1 46008 1
+46008 46008 1
+1 46009 1
+46009 46009 1
+1 46010 1
+46010 46010 1
+1 46011 1
+46011 46011 1
+1 46012 1
+46012 46012 1
+1 46013 1
+46013 46013 1
+1 46014 1
+46014 46014 1
+1 46015 1
+46015 46015 1
+1 46016 1
+46016 46016 1
+1 46017 1
+46017 46017 1
+1 46018 1
+46018 46018 1
+1 46019 1
+46019 46019 1
+1 46020 1
+46020 46020 1
+1 46021 1
+46021 46021 1
+1 46022 1
+46022 46022 1
+1 46023 1
+46023 46023 1
+1 46024 1
+46024 46024 1
+1 46025 1
+46025 46025 1
+1 46026 1
+46026 46026 1
+1 46027 1
+46027 46027 1
+1 46028 1
+46028 46028 1
+1 46029 1
+46029 46029 1
+1 46030 1
+46030 46030 1
+1 46031 1
+46031 46031 1
+1 46032 1
+46032 46032 1
+1 46033 1
+46033 46033 1
+1 46034 1
+46034 46034 1
+1 46035 1
+46035 46035 1
+1 46036 1
+46036 46036 1
+1 46037 1
+46037 46037 1
+1 46038 1
+46038 46038 1
+1 46039 1
+46039 46039 1
+1 46040 1
+46040 46040 1
+1 46041 1
+46041 46041 1
+1 46042 1
+46042 46042 1
+1 46043 1
+46043 46043 1
+1 46044 1
+46044 46044 1
+1 46045 1
+46045 46045 1
+1 46046 1
+46046 46046 1
+1 46047 1
+46047 46047 1
+1 46048 1
+46048 46048 1
+1 46049 1
+46049 46049 1
+1 46050 1
+46050 46050 1
+1 46051 1
+46051 46051 1
+1 46052 1
+46052 46052 1
+1 46053 1
+46053 46053 1
+1 46054 1
+46054 46054 1
+1 46055 1
+46055 46055 1
+1 46056 1
+46056 46056 1
+1 46057 1
+46057 46057 1
+1 46058 1
+46058 46058 1
+1 46059 1
+46059 46059 1
+1 46060 1
+46060 46060 1
+1 46061 1
+46061 46061 1
+1 46062 1
+46062 46062 1
+1 46063 1
+46063 46063 1
+1 46064 1
+46064 46064 1
+1 46065 1
+46065 46065 1
+1 46066 1
+46066 46066 1
+1 46067 1
+46067 46067 1
+1 46068 1
+46068 46068 1
+1 46069 1
+46069 46069 1
+1 46070 1
+46070 46070 1
+1 46071 1
+46071 46071 1
+1 46072 1
+46072 46072 1
+1 46073 1
+46073 46073 1
+1 46074 1
+46074 46074 1
+1 46075 1
+46075 46075 1
+1 46076 1
+46076 46076 1
+1 46077 1
+46077 46077 1
+1 46078 1
+46078 46078 1
+1 46079 1
+46079 46079 1
+1 46080 1
+46080 46080 1
+1 46081 1
+46081 46081 1
+1 46082 1
+46082 46082 1
+1 46083 1
+46083 46083 1
+1 46084 1
+46084 46084 1
+1 46085 1
+46085 46085 1
+1 46086 1
+46086 46086 1
+1 46087 1
+46087 46087 1
+1 46088 1
+46088 46088 1
+1 46089 1
+46089 46089 1
+1 46090 1
+46090 46090 1
+1 46091 1
+46091 46091 1
+1 46092 1
+46092 46092 1
+1 46093 1
+46093 46093 1
+1 46094 1
+46094 46094 1
+1 46095 1
+46095 46095 1
+1 46096 1
+46096 46096 1
+1 46097 1
+46097 46097 1
+1 46098 1
+46098 46098 1
+1 46099 1
+46099 46099 1
+1 46100 1
+46100 46100 1
+1 46101 1
+46101 46101 1
+1 46102 1
+46102 46102 1
+1 46103 1
+46103 46103 1
+1 46104 1
+46104 46104 1
+1 46105 1
+46105 46105 1
+1 46106 1
+46106 46106 1
+1 46107 1
+46107 46107 1
+1 46108 1
+46108 46108 1
+1 46109 1
+46109 46109 1
+1 46110 1
+46110 46110 1
+1 46111 1
+46111 46111 1
+1 46112 1
+46112 46112 1
+1 46113 1
+46113 46113 1
+1 46114 1
+46114 46114 1
+1 46115 1
+46115 46115 1
+1 46116 1
+46116 46116 1
+1 46117 1
+46117 46117 1
+1 46118 1
+46118 46118 1
+1 46119 1
+46119 46119 1
+1 46120 1
+46120 46120 1
+1 46121 1
+46121 46121 1
+1 46122 1
+46122 46122 1
+1 46123 1
+46123 46123 1
+1 46124 1
+46124 46124 1
+1 46125 1
+46125 46125 1
+1 46126 1
+46126 46126 1
+1 46127 1
+46127 46127 1
+1 46128 1
+46128 46128 1
+1 46129 1
+46129 46129 1
+1 46130 1
+46130 46130 1
+1 46131 1
+46131 46131 1
+1 46132 1
+46132 46132 1
+1 46133 1
+46133 46133 1
+1 46134 1
+46134 46134 1
+1 46135 1
+46135 46135 1
+1 46136 1
+46136 46136 1
+1 46137 1
+46137 46137 1
+1 46138 1
+46138 46138 1
+1 46139 1
+46139 46139 1
+1 46140 1
+46140 46140 1
+1 46141 1
+46141 46141 1
+1 46142 1
+46142 46142 1
+1 46143 1
+46143 46143 1
+1 46144 1
+46144 46144 1
+1 46145 1
+46145 46145 1
+1 46146 1
+46146 46146 1
+1 46147 1
+46147 46147 1
+1 46148 1
+46148 46148 1
+1 46149 1
+46149 46149 1
+1 46150 1
+46150 46150 1
+1 46151 1
+46151 46151 1
+1 46152 1
+46152 46152 1
+1 46153 1
+46153 46153 1
+1 46154 1
+46154 46154 1
+1 46155 1
+46155 46155 1
+1 46156 1
+46156 46156 1
+1 46157 1
+46157 46157 1
+1 46158 1
+46158 46158 1
+1 46159 1
+46159 46159 1
+1 46160 1
+46160 46160 1
+1 46161 1
+46161 46161 1
+1 46162 1
+46162 46162 1
+1 46163 1
+46163 46163 1
+1 46164 1
+46164 46164 1
+1 46165 1
+46165 46165 1
+1 46166 1
+46166 46166 1
+1 46167 1
+46167 46167 1
+1 46168 1
+46168 46168 1
+1 46169 1
+46169 46169 1
+1 46170 1
+46170 46170 1
+1 46171 1
+46171 46171 1
+1 46172 1
+46172 46172 1
+1 46173 1
+46173 46173 1
+1 46174 1
+46174 46174 1
+1 46175 1
+46175 46175 1
+1 46176 1
+46176 46176 1
+1 46177 1
+46177 46177 1
+1 46178 1
+46178 46178 1
+1 46179 1
+46179 46179 1
+1 46180 1
+46180 46180 1
+1 46181 1
+46181 46181 1
+1 46182 1
+46182 46182 1
+1 46183 1
+46183 46183 1
+1 46184 1
+46184 46184 1
+1 46185 1
+46185 46185 1
+1 46186 1
+46186 46186 1
+1 46187 1
+46187 46187 1
+1 46188 1
+46188 46188 1
+1 46189 1
+46189 46189 1
+1 46190 1
+46190 46190 1
+1 46191 1
+46191 46191 1
+1 46192 1
+46192 46192 1
+1 46193 1
+46193 46193 1
+1 46194 1
+46194 46194 1
+1 46195 1
+46195 46195 1
+1 46196 1
+46196 46196 1
+1 46197 1
+46197 46197 1
+1 46198 1
+46198 46198 1
+1 46199 1
+46199 46199 1
+1 46200 1
+46200 46200 1
+1 46201 1
+46201 46201 1
+1 46202 1
+46202 46202 1
+1 46203 1
+46203 46203 1
+1 46204 1
+46204 46204 1
+1 46205 1
+46205 46205 1
+1 46206 1
+46206 46206 1
+1 46207 1
+46207 46207 1
+1 46208 1
+46208 46208 1
+1 46209 1
+46209 46209 1
+1 46210 1
+46210 46210 1
+1 46211 1
+46211 46211 1
+1 46212 1
+46212 46212 1
+1 46213 1
+46213 46213 1
+1 46214 1
+46214 46214 1
+1 46215 1
+46215 46215 1
+1 46216 1
+46216 46216 1
+1 46217 1
+46217 46217 1
+1 46218 1
+46218 46218 1
+1 46219 1
+46219 46219 1
+1 46220 1
+46220 46220 1
+1 46221 1
+46221 46221 1
+1 46222 1
+46222 46222 1
+1 46223 1
+46223 46223 1
+1 46224 1
+46224 46224 1
+1 46225 1
+46225 46225 1
+1 46226 1
+46226 46226 1
+1 46227 1
+46227 46227 1
+1 46228 1
+46228 46228 1
+1 46229 1
+46229 46229 1
+1 46230 1
+46230 46230 1
+1 46231 1
+46231 46231 1
+1 46232 1
+46232 46232 1
+1 46233 1
+46233 46233 1
+1 46234 1
+46234 46234 1
+1 46235 1
+46235 46235 1
+1 46236 1
+46236 46236 1
+1 46237 1
+46237 46237 1
+1 46238 1
+46238 46238 1
+1 46239 1
+46239 46239 1
+1 46240 1
+46240 46240 1
+1 46241 1
+46241 46241 1
+1 46242 1
+46242 46242 1
+1 46243 1
+46243 46243 1
+1 46244 1
+46244 46244 1
+1 46245 1
+46245 46245 1
+1 46246 1
+46246 46246 1
+1 46247 1
+46247 46247 1
+1 46248 1
+46248 46248 1
+1 46249 1
+46249 46249 1
+1 46250 1
+46250 46250 1
+1 46251 1
+46251 46251 1
+1 46252 1
+46252 46252 1
+1 46253 1
+46253 46253 1
+1 46254 1
+46254 46254 1
+1 46255 1
+46255 46255 1
+1 46256 1
+46256 46256 1
+1 46257 1
+46257 46257 1
+1 46258 1
+46258 46258 1
+1 46259 1
+46259 46259 1
+1 46260 1
+46260 46260 1
+1 46261 1
+46261 46261 1
+1 46262 1
+46262 46262 1
+1 46263 1
+46263 46263 1
+1 46264 1
+46264 46264 1
+1 46265 1
+46265 46265 1
+1 46266 1
+46266 46266 1
+1 46267 1
+46267 46267 1
+1 46268 1
+46268 46268 1
+1 46269 1
+46269 46269 1
+1 46270 1
+46270 46270 1
+1 46271 1
+46271 46271 1
+1 46272 1
+46272 46272 1
+1 46273 1
+46273 46273 1
+1 46274 1
+46274 46274 1
+1 46275 1
+46275 46275 1
+1 46276 1
+46276 46276 1
+1 46277 1
+46277 46277 1
+1 46278 1
+46278 46278 1
+1 46279 1
+46279 46279 1
+1 46280 1
+46280 46280 1
+1 46281 1
+46281 46281 1
+1 46282 1
+46282 46282 1
+1 46283 1
+46283 46283 1
+1 46284 1
+46284 46284 1
+1 46285 1
+46285 46285 1
+1 46286 1
+46286 46286 1
+1 46287 1
+46287 46287 1
+1 46288 1
+46288 46288 1
+1 46289 1
+46289 46289 1
+1 46290 1
+46290 46290 1
+1 46291 1
+46291 46291 1
+1 46292 1
+46292 46292 1
+1 46293 1
+46293 46293 1
+1 46294 1
+46294 46294 1
+1 46295 1
+46295 46295 1
+1 46296 1
+46296 46296 1
+1 46297 1
+46297 46297 1
+1 46298 1
+46298 46298 1
+1 46299 1
+46299 46299 1
+1 46300 1
+46300 46300 1
+1 46301 1
+46301 46301 1
+1 46302 1
+46302 46302 1
+1 46303 1
+46303 46303 1
+1 46304 1
+46304 46304 1
+1 46305 1
+46305 46305 1
+1 46306 1
+46306 46306 1
+1 46307 1
+46307 46307 1
+1 46308 1
+46308 46308 1
+1 46309 1
+46309 46309 1
+1 46310 1
+46310 46310 1
+1 46311 1
+46311 46311 1
+1 46312 1
+46312 46312 1
+1 46313 1
+46313 46313 1
+1 46314 1
+46314 46314 1
+1 46315 1
+46315 46315 1
+1 46316 1
+46316 46316 1
+1 46317 1
+46317 46317 1
+1 46318 1
+46318 46318 1
+1 46319 1
+46319 46319 1
+1 46320 1
+46320 46320 1
+1 46321 1
+46321 46321 1
+1 46322 1
+46322 46322 1
+1 46323 1
+46323 46323 1
+1 46324 1
+46324 46324 1
+1 46325 1
+46325 46325 1
+1 46326 1
+46326 46326 1
+1 46327 1
+46327 46327 1
+1 46328 1
+46328 46328 1
+1 46329 1
+46329 46329 1
+1 46330 1
+46330 46330 1
+1 46331 1
+46331 46331 1
+1 46332 1
+46332 46332 1
+1 46333 1
+46333 46333 1
+1 46334 1
+46334 46334 1
+1 46335 1
+46335 46335 1
+1 46336 1
+46336 46336 1
+1 46337 1
+46337 46337 1
+1 46338 1
+46338 46338 1
+1 46339 1
+46339 46339 1
+1 46340 1
+46340 46340 1
+1 46341 1
+46341 46341 1
+1 46342 1
+46342 46342 1
+1 46343 1
+46343 46343 1
+1 46344 1
+46344 46344 1
+1 46345 1
+46345 46345 1
+1 46346 1
+46346 46346 1
+1 46347 1
+46347 46347 1
+1 46348 1
+46348 46348 1
+1 46349 1
+46349 46349 1
+1 46350 1
+46350 46350 1
+1 46351 1
+46351 46351 1
+1 46352 1
+46352 46352 1
+1 46353 1
+46353 46353 1
+1 46354 1
+46354 46354 1
+1 46355 1
+46355 46355 1
+1 46356 1
+46356 46356 1
+1 46357 1
+46357 46357 1
+1 46358 1
+46358 46358 1
+1 46359 1
+46359 46359 1
+1 46360 1
+46360 46360 1
+1 46361 1
+46361 46361 1
+1 46362 1
+46362 46362 1
+1 46363 1
+46363 46363 1
+1 46364 1
+46364 46364 1
+1 46365 1
+46365 46365 1
+1 46366 1
+46366 46366 1
+1 46367 1
+46367 46367 1
+1 46368 1
+46368 46368 1
+1 46369 1
+46369 46369 1
+1 46370 1
+46370 46370 1
+1 46371 1
+46371 46371 1
+1 46372 1
+46372 46372 1
+1 46373 1
+46373 46373 1
+1 46374 1
+46374 46374 1
+1 46375 1
+46375 46375 1
+1 46376 1
+46376 46376 1
+1 46377 1
+46377 46377 1
+1 46378 1
+46378 46378 1
+1 46379 1
+46379 46379 1
+1 46380 1
+46380 46380 1
+1 46381 1
+46381 46381 1
+1 46382 1
+46382 46382 1
+1 46383 1
+46383 46383 1
+1 46384 1
+46384 46384 1
+1 46385 1
+46385 46385 1
+1 46386 1
+46386 46386 1
+1 46387 1
+46387 46387 1
+1 46388 1
+46388 46388 1
+1 46389 1
+46389 46389 1
+1 46390 1
+46390 46390 1
+1 46391 1
+46391 46391 1
+1 46392 1
+46392 46392 1
+1 46393 1
+46393 46393 1
+1 46394 1
+46394 46394 1
+1 46395 1
+46395 46395 1
+1 46396 1
+46396 46396 1
+1 46397 1
+46397 46397 1
+1 46398 1
+46398 46398 1
+1 46399 1
+46399 46399 1
+1 46400 1
+46400 46400 1
+1 46401 1
+46401 46401 1
+1 46402 1
+46402 46402 1
+1 46403 1
+46403 46403 1
+1 46404 1
+46404 46404 1
+1 46405 1
+46405 46405 1
+1 46406 1
+46406 46406 1
+1 46407 1
+46407 46407 1
+1 46408 1
+46408 46408 1
+1 46409 1
+46409 46409 1
+1 46410 1
+46410 46410 1
+1 46411 1
+46411 46411 1
+1 46412 1
+46412 46412 1
+1 46413 1
+46413 46413 1
+1 46414 1
+46414 46414 1
+1 46415 1
+46415 46415 1
+1 46416 1
+46416 46416 1
+1 46417 1
+46417 46417 1
+1 46418 1
+46418 46418 1
+1 46419 1
+46419 46419 1
+1 46420 1
+46420 46420 1
+1 46421 1
+46421 46421 1
+1 46422 1
+46422 46422 1
+1 46423 1
+46423 46423 1
+1 46424 1
+46424 46424 1
+1 46425 1
+46425 46425 1
+1 46426 1
+46426 46426 1
+1 46427 1
+46427 46427 1
+1 46428 1
+46428 46428 1
+1 46429 1
+46429 46429 1
+1 46430 1
+46430 46430 1
+1 46431 1
+46431 46431 1
+1 46432 1
+46432 46432 1
+1 46433 1
+46433 46433 1
+1 46434 1
+46434 46434 1
+1 46435 1
+46435 46435 1
+1 46436 1
+46436 46436 1
+1 46437 1
+46437 46437 1
+1 46438 1
+46438 46438 1
+1 46439 1
+46439 46439 1
+1 46440 1
+46440 46440 1
+1 46441 1
+46441 46441 1
+1 46442 1
+46442 46442 1
+1 46443 1
+46443 46443 1
+1 46444 1
+46444 46444 1
+1 46445 1
+46445 46445 1
+1 46446 1
+46446 46446 1
+1 46447 1
+46447 46447 1
+1 46448 1
+46448 46448 1
+1 46449 1
+46449 46449 1
+1 46450 1
+46450 46450 1
+1 46451 1
+46451 46451 1
+1 46452 1
+46452 46452 1
+1 46453 1
+46453 46453 1
+1 46454 1
+46454 46454 1
+1 46455 1
+46455 46455 1
+1 46456 1
+46456 46456 1
+1 46457 1
+46457 46457 1
+1 46458 1
+46458 46458 1
+1 46459 1
+46459 46459 1
+1 46460 1
+46460 46460 1
+1 46461 1
+46461 46461 1
+1 46462 1
+46462 46462 1
+1 46463 1
+46463 46463 1
+1 46464 1
+46464 46464 1
+1 46465 1
+46465 46465 1
+1 46466 1
+46466 46466 1
+1 46467 1
+46467 46467 1
+1 46468 1
+46468 46468 1
+1 46469 1
+46469 46469 1
+1 46470 1
+46470 46470 1
+1 46471 1
+46471 46471 1
+1 46472 1
+46472 46472 1
+1 46473 1
+46473 46473 1
+1 46474 1
+46474 46474 1
+1 46475 1
+46475 46475 1
+1 46476 1
+46476 46476 1
+1 46477 1
+46477 46477 1
+1 46478 1
+46478 46478 1
+1 46479 1
+46479 46479 1
+1 46480 1
+46480 46480 1
+1 46481 1
+46481 46481 1
+1 46482 1
+46482 46482 1
+1 46483 1
+46483 46483 1
+1 46484 1
+46484 46484 1
+1 46485 1
+46485 46485 1
+1 46486 1
+46486 46486 1
+1 46487 1
+46487 46487 1
+1 46488 1
+46488 46488 1
+1 46489 1
+46489 46489 1
+1 46490 1
+46490 46490 1
+1 46491 1
+46491 46491 1
+1 46492 1
+46492 46492 1
+1 46493 1
+46493 46493 1
+1 46494 1
+46494 46494 1
+1 46495 1
+46495 46495 1
+1 46496 1
+46496 46496 1
+1 46497 1
+46497 46497 1
+1 46498 1
+46498 46498 1
+1 46499 1
+46499 46499 1
+1 46500 1
+46500 46500 1
diff --git a/SPQR/Matrix/ash219.mtx b/SPQR/Matrix/ash219.mtx
new file mode 100644
index 0000000..fd0e81e
--- /dev/null
+++ b/SPQR/Matrix/ash219.mtx
@@ -0,0 +1,452 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/HB/ash219
+% name: HB/ash219
+% [UNSYMMETRIC OVERDETERMINED PATTERN OF HOLLAND SURVEY. ASHKENAZI,1974]
+% id: 7
+% date: 1974
+% author: V. Askenazi
+% ed: A. Curtis, I. Duff, J. Reid
+% fields: title A name id date author ed kind
+% kind: least squares problem
+%-------------------------------------------------------------------------------
+219 85 438
+1 1
+2 1
+3 1
+4 1
+1 2
+5 2
+6 2
+7 2
+8 2
+5 3
+9 3
+10 3
+9 4
+11 4
+12 4
+13 4
+14 4
+11 5
+15 5
+16 5
+4 6
+17 6
+18 6
+19 6
+20 6
+3 7
+17 7
+21 7
+22 7
+23 7
+24 7
+2 8
+8 8
+23 8
+25 8
+26 8
+27 8
+7 9
+27 9
+28 9
+29 9
+30 9
+31 9
+32 9
+6 10
+10 10
+14 10
+30 10
+33 10
+13 11
+31 11
+33 11
+34 11
+35 11
+36 11
+37 11
+12 12
+16 12
+35 12
+38 12
+39 12
+20 13
+40 13
+41 13
+18 14
+22 14
+42 14
+43 14
+44 14
+45 14
+21 15
+45 15
+46 15
+47 15
+48 15
+49 15
+50 15
+24 16
+26 16
+49 16
+51 16
+52 16
+50 17
+51 17
+53 17
+54 17
+55 17
+56 17
+25 18
+29 18
+52 18
+55 18
+57 18
+58 18
+59 18
+28 19
+58 19
+60 19
+61 19
+62 19
+32 20
+34 20
+61 20
+63 20
+64 20
+37 21
+64 21
+65 21
+66 21
+67 21
+68 21
+69 21
+36 22
+38 22
+67 22
+70 22
+71 22
+15 23
+39 23
+70 23
+72 23
+73 23
+68 24
+71 24
+73 24
+74 24
+75 24
+76 24
+77 24
+69 25
+75 25
+78 25
+79 25
+65 26
+78 26
+80 26
+81 26
+82 26
+83 26
+62 27
+63 27
+66 27
+82 27
+84 27
+85 27
+86 27
+59 28
+60 28
+86 28
+87 28
+88 28
+56 29
+57 29
+88 29
+89 29
+90 29
+91 29
+53 30
+90 30
+92 30
+93 30
+94 30
+95 30
+46 31
+54 31
+94 31
+96 31
+97 31
+98 31
+72 32
+76 32
+99 32
+100 32
+77 33
+100 33
+101 33
+102 33
+103 33
+74 34
+79 34
+83 34
+103 34
+104 34
+105 34
+106 34
+107 34
+105 35
+108 35
+109 35
+110 35
+111 35
+80 36
+106 36
+110 36
+112 36
+113 36
+81 37
+84 37
+113 37
+114 37
+115 37
+109 38
+112 38
+115 38
+116 38
+117 38
+118 38
+119 38
+85 39
+87 39
+91 39
+114 39
+117 39
+120 39
+121 39
+122 39
+123 39
+89 40
+95 40
+122 40
+124 40
+125 40
+126 40
+121 41
+126 41
+127 41
+128 41
+92 42
+125 42
+129 42
+130 42
+131 42
+132 42
+93 43
+96 43
+131 43
+133 43
+134 43
+135 43
+41 44
+136 44
+137 44
+138 44
+139 44
+19 45
+40 45
+44 45
+136 45
+140 45
+141 45
+142 45
+43 46
+140 46
+143 46
+144 46
+145 46
+42 47
+48 47
+143 47
+146 47
+147 47
+47 48
+98 48
+146 48
+148 48
+149 48
+150 48
+97 49
+135 49
+148 49
+151 49
+152 49
+153 49
+130 50
+133 50
+154 50
+155 50
+156 50
+134 51
+151 51
+155 51
+157 51
+158 51
+159 51
+137 52
+142 52
+160 52
+161 52
+162 52
+139 53
+163 53
+164 53
+165 53
+138 54
+162 54
+163 54
+166 54
+167 54
+168 54
+164 55
+168 55
+169 55
+170 55
+171 55
+172 55
+167 56
+169 56
+173 56
+174 56
+175 56
+141 57
+145 57
+160 57
+176 57
+177 57
+178 57
+144 58
+147 58
+150 58
+178 58
+179 58
+180 58
+149 59
+153 59
+179 59
+181 59
+182 59
+183 59
+184 59
+152 60
+159 60
+184 60
+185 60
+158 61
+181 61
+185 61
+186 61
+187 61
+188 61
+189 61
+190 61
+186 62
+191 62
+192 62
+193 62
+194 62
+101 63
+195 63
+99 64
+102 64
+107 64
+195 64
+196 64
+104 65
+111 65
+196 65
+197 65
+108 66
+118 66
+197 66
+198 66
+119 67
+198 67
+199 67
+200 67
+199 68
+201 68
+116 69
+123 69
+200 69
+201 69
+202 69
+120 70
+128 70
+202 70
+203 70
+124 71
+127 71
+132 71
+203 71
+204 71
+129 72
+156 72
+204 72
+205 72
+154 73
+157 73
+190 73
+194 73
+205 73
+206 73
+191 74
+206 74
+207 74
+208 74
+207 75
+209 75
+187 76
+192 76
+208 76
+209 76
+210 76
+211 76
+210 77
+212 77
+188 78
+193 78
+211 78
+212 78
+213 78
+182 79
+189 79
+213 79
+214 79
+176 80
+180 80
+183 80
+214 80
+215 80
+161 81
+166 81
+173 81
+177 81
+215 81
+216 81
+174 82
+216 82
+217 82
+170 83
+175 83
+217 83
+218 83
+171 84
+218 84
+219 84
+165 85
+172 85
+219 85
diff --git a/SPQR/Matrix/b1_ss.mtx b/SPQR/Matrix/b1_ss.mtx
new file mode 100644
index 0000000..72aef08
--- /dev/null
+++ b/SPQR/Matrix/b1_ss.mtx
@@ -0,0 +1,29 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Grund/b1_ss
+% name: Grund/b1_ss
+% [Unsymmetric Matrix b1_ss, F. Grund, Dec 1994.]
+% id: 449
+% date: 1997
+% author: F. Grund
+% ed: F. Grund
+% fields: title A b name id date author ed kind
+% kind: chemical process simulation problem
+%-------------------------------------------------------------------------------
+7 7 15
+5 1 -.03599942
+6 1 -.0176371
+7 1 -.007721779
+1 2 1
+2 2 -1
+1 3 1
+3 3 -1
+1 4 1
+4 4 -1
+2 5 .45
+5 5 1
+3 6 .1
+6 6 1
+4 7 .45
+7 7 1
diff --git a/SPQR/Matrix/bcspwr01.mtx b/SPQR/Matrix/bcspwr01.mtx
new file mode 100644
index 0000000..6b3ae06
--- /dev/null
+++ b/SPQR/Matrix/bcspwr01.mtx
@@ -0,0 +1,99 @@
+%%MatrixMarket matrix coordinate pattern symmetric
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/HB/bcspwr01
+% name: HB/bcspwr01
+% [SYMMETRIC STRUCTURE (STANDARD TEST POWER SYSTEM - NEW ENGLAND)]
+% id: 13
+% date: 1981
+% author: B. Dembart, J. Lewis
+% ed: I. Duff, R. Grimes, J. Lewis
+% fields: title A name id date author ed kind
+% kind: power network problem
+%-------------------------------------------------------------------------------
+39 39 85
+1 1
+2 1
+39 1
+2 2
+3 2
+25 2
+30 2
+3 3
+4 3
+18 3
+4 4
+14 4
+18 4
+5 5
+6 5
+8 5
+6 6
+7 6
+11 6
+31 6
+7 7
+8 7
+8 8
+9 8
+9 9
+39 9
+10 10
+11 10
+13 10
+32 10
+11 11
+12 11
+12 12
+13 12
+13 13
+14 13
+14 14
+15 14
+15 15
+16 15
+16 16
+17 16
+19 16
+21 16
+24 16
+17 17
+18 17
+27 17
+18 18
+19 19
+20 19
+33 19
+20 20
+34 20
+21 21
+22 21
+22 22
+23 22
+35 22
+23 23
+24 23
+36 23
+24 24
+25 25
+26 25
+37 25
+26 26
+27 26
+28 26
+29 26
+27 27
+28 28
+29 28
+29 29
+38 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
diff --git a/SPQR/Matrix/bfwa62.mtx b/SPQR/Matrix/bfwa62.mtx
new file mode 100644
index 0000000..8b6a8eb
--- /dev/null
+++ b/SPQR/Matrix/bfwa62.mtx
@@ -0,0 +1,464 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/Bai/bfwa62
+% name: Bai/bfwa62
+% [BOUNDED FINLINE WAVEGUIDE EIGENMODES B SHULTZ AND S GEDNEY]
+% id: 293
+% date: 1994
+% author: B. Schultz, S. Gedney
+% ed: Z. Bai, D. Day, J. Demmel, J. Dongarra
+% fields: title A name id date author ed kind
+% kind: electromagnetics problem
+%-------------------------------------------------------------------------------
+62 62 450
+1 1 .7610708
+4 1 .157815
+18 1 -.244898
+20 1 .0132868
+22 1 -.604686
+24 1 .0132868
+25 1 -.244898
+2 2 .7610708
+3 2 .1290924
+6 2 .07890749999999999
+15 2 -.302343
+19 2 -.489796
+21 2 .0132868
+29 2 -.302343
+30 2 .0132868
+2 3 .1290924
+3 3 1.52214
+5 3 .1290924
+6 3 .2334952
+7 3 .3846668
+16 3 .0132868
+19 3 -.489796
+21 3 -.604686
+26 3 -.489796
+28 3 .0132868
+29 3 .0132868
+32 3 .9206941999999999
+34 3 -.604686
+36 3 .0132868
+1 4 .157815
+4 4 1.52214
+8 4 .157815
+17 4 .0132868
+20 4 -.489796
+22 4 -.604686
+25 4 .0132868
+27 4 -.489796
+33 4 .0132868
+35 4 -.604686
+37 4 .0132868
+3 5 .1290924
+5 5 .7610709
+7 5 .2334952
+9 5 .3057593
+23 5 .0132868
+26 5 -.489796
+28 5 -.302343
+34 5 .0132868
+38 5 .9206941999999999
+40 5 -.302343
+2 6 .07890749999999999
+3 6 .00664342
+6 6 1.63397
+7 6 .1252753
+10 6 .1885068
+19 6 .0132868
+29 6 -.302343
+32 6 -.4745279999999999
+34 6 .0132868
+41 6 -.740741
+42 6 .0132868
+3 7 .157815
+5 7 .00664342
+6 7 -.008983950000000001
+7 7 3.670719999999999
+9 7 .1252753
+10 7 .00664342
+11 7 .3770137
+26 7 .0132868
+30 7 .0132868
+32 7 .0625095
+34 7 -.604686
+38 7 -.4745279999999999
+40 7 .0132868
+41 7 .0132868
+44 7 .0132868
+46 7 -1.48148
+48 7 .0132868
+4 8 .157815
+6 8 -.120833
+8 8 2.71239
+9 8 .1208333
+12 8 .3770137
+27 8 .0132868
+31 8 .0132868
+32 8 .4833333
+33 8 -.8448979999999999
+35 8 -.604686
+38 8 -.483333
+39 8 -.8448979999999999
+45 8 .0132868
+47 8 -1.48148
+49 8 .0132868
+5 9 .07890749999999999
+7 9 -.008983950000000001
+9 9 2.03675
+11 9 .00664342
+13 9 .1885068
+36 9 .0132868
+38 9 .0625095
+40 9 -.302343
+46 9 .0132868
+50 9 .0132868
+52 9 -.740741
+6 10 .2810994
+7 10 .099236
+10 10 1.95132
+11 10 .3066433
+32 10 .3836572
+41 10 -.740741
+44 10 -1.2
+46 10 .0132868
+53 10 -.740741
+54 10 .0132868
+7 11 .4696063
+9 11 .099236
+10 11 .3066433
+11 11 3.90264
+13 11 .3066433
+38 11 .3836572
+42 11 .0132868
+44 11 -1.2
+46 11 -1.48148
+50 11 -1.2
+52 11 .0132868
+53 11 .0132868
+57 11 -1.48148
+59 11 .0132868
+8 12 .3770137
+12 12 3.90264
+14 12 .3770137
+39 12 .0132868
+43 12 .0132868
+45 12 -1.2
+47 12 -1.48148
+51 12 -1.2
+56 12 .0132868
+58 12 -1.48148
+60 12 .0132868
+9 13 .1885068
+11 13 .3066433
+13 13 1.95132
+48 13 .0132868
+50 13 -1.2
+52 13 -.740741
+57 13 .0132868
+62 13 -.740741
+12 14 .3770137
+14 14 1.95132
+51 14 .0132868
+55 14 .0132868
+56 14 -.6
+58 14 -1.48148
+61 14 -.6
+2 15 -.302343
+15 15 .9881873999999999
+16 15 -.5429430000000001
+3 16 .0132868
+15 16 -.5429430000000001
+16 16 1.97637
+19 16 -.657834
+21 16 -.5429430000000001
+4 17 .0132868
+17 17 1.97637
+18 17 -.657834
+20 17 -.657834
+22 17 -.5429430000000001
+1 18 -.244898
+17 18 -.657834
+18 18 .9881873999999999
+2 19 -.489796
+3 19 -.489796
+6 19 .0132868
+16 19 -.657834
+19 19 1.97637
+21 19 -.0531474
+29 19 -.0531474
+30 19 -.657834
+1 20 .0132868
+4 20 -.489796
+17 20 -.657834
+20 20 1.97637
+22 20 -.0531474
+31 20 -.657834
+2 21 .0132868
+3 21 -.604686
+16 21 -.5429430000000001
+19 21 -.0531474
+21 21 1.97637
+23 21 -.5429430000000001
+1 22 -.604686
+4 22 -.604686
+17 22 -.5429430000000001
+20 22 -.0531474
+22 22 1.97637
+24 22 -.5429430000000001
+25 22 -.0531474
+5 23 .0132868
+21 23 -.5429430000000001
+23 23 1.97637
+26 23 -.657834
+28 23 -.5429430000000001
+1 24 .0132868
+22 24 -.5429430000000001
+24 24 1.97637
+25 24 -.657834
+27 24 -.657834
+1 25 -.244898
+4 25 .0132868
+22 25 -.0531474
+24 25 -.657834
+25 25 .9881873999999999
+3 26 -.489796
+5 26 -.489796
+7 26 .0132868
+23 26 -.657834
+26 26 1.97637
+28 26 -.0531474
+34 26 -.0531474
+36 26 -.657834
+4 27 -.489796
+8 27 .0132868
+24 27 -.657834
+27 27 1.97637
+35 27 -.0531474
+37 27 -.657834
+3 28 .0132868
+5 28 -.302343
+23 28 -.5429430000000001
+26 28 -.0531474
+28 28 .9881873999999999
+2 29 -.302343
+3 29 .0132868
+6 29 -.302343
+19 29 -.0531474
+29 29 .9881873999999999
+30 29 -.5429430000000001
+2 30 .0132868
+6 30 -.907407
+7 30 .0132868
+19 30 -.657834
+29 30 -.5429430000000001
+30 30 1.97637
+32 30 -2.47265
+34 30 -.5429430000000001
+8 31 .0132868
+20 31 -.657834
+31 31 1.97637
+33 31 -.657834
+35 31 -.5429430000000001
+3 32 .0132868
+6 32 .0625095
+7 32 -.4745279999999999
+10 32 .0132868
+30 32 -.657834
+32 32 6.118930000000001
+34 32 -.0531474
+41 32 -.0531474
+42 32 -1.53463
+4 33 .0132868
+6 33 .4833333
+7 33 -.483333
+8 33 -.8448979999999999
+31 33 -.657834
+33 33 3.56337
+35 33 -.0531474
+43 33 -1.53463
+3 34 -.604686
+5 34 .0132868
+6 34 .0132868
+7 34 -1.51209
+26 34 -.0531474
+30 34 -.5429430000000001
+32 34 -1.86796
+34 34 1.97637
+36 34 -.5429430000000001
+4 35 -.604686
+8 35 -.604686
+27 35 -.0531474
+31 35 -.5429430000000001
+33 35 -.0531474
+35 35 1.97637
+37 35 -.5429430000000001
+3 36 .0132868
+7 36 -.907407
+9 36 .0132868
+26 36 -.657834
+34 36 -.5429430000000001
+36 36 1.97637
+38 36 -2.47265
+40 36 -.5429430000000001
+4 37 .0132868
+27 37 -.657834
+35 37 -.5429430000000001
+37 37 1.97637
+39 37 -.657834
+5 38 .0132868
+7 38 .0625095
+9 38 -.4745279999999999
+11 38 .0132868
+36 38 -.657834
+38 38 6.118930000000001
+40 38 -.0531474
+46 38 -.0531474
+48 38 -1.53463
+7 39 .4833333
+8 39 -.8448979999999999
+9 39 -.483333
+12 39 .0132868
+37 39 -.657834
+39 39 3.56337
+47 39 -.0531474
+49 39 -1.53463
+5 40 -.302343
+7 40 .0132868
+9 40 -1.20975
+36 40 -.5429430000000001
+38 40 -1.86796
+40 40 .9881873999999999
+6 41 -1.11111
+7 41 .0132868
+10 41 -.740741
+32 41 -.793888
+41 41 2.57519
+42 41 -1.25315
+6 42 .0132868
+7 42 -.37037
+11 42 .0132868
+32 42 -2.27537
+41 42 -1.25315
+42 42 5.15037
+44 42 -1.53463
+46 42 -1.25315
+12 43 .0132868
+33 43 -1.53463
+43 43 5.15037
+45 43 -1.53463
+47 43 -1.25315
+7 44 .0132868
+10 44 -1.2
+11 44 -1.2
+42 44 -1.53463
+44 44 5.15037
+46 44 -.0531474
+53 44 -.0531474
+54 44 -1.53463
+8 45 .0132868
+12 45 -1.2
+43 45 -1.53463
+45 45 5.15037
+47 45 -.0531474
+55 45 -1.53463
+7 46 -1.85185
+9 46 .0132868
+10 46 .0132868
+11 46 -1.48148
+38 46 -.793888
+42 46 -1.25315
+44 46 -.0531474
+46 46 5.15037
+48 46 -1.25315
+8 47 -1.48148
+12 47 -1.48148
+39 47 -.0531474
+43 47 -1.25315
+45 47 -.0531474
+47 47 5.15037
+49 47 -1.25315
+7 48 .0132868
+9 48 -.37037
+13 48 .0132868
+38 48 -2.27537
+46 48 -1.25315
+48 48 5.15037
+50 48 -1.53463
+52 48 -1.25315
+8 49 .0132868
+39 49 -1.53463
+47 49 -1.25315
+49 49 5.15037
+51 49 -1.53463
+9 50 .0132868
+11 50 -1.2
+13 50 -1.2
+48 50 -1.53463
+50 50 5.15037
+52 50 -.0531474
+57 50 -.0531474
+59 50 -1.53463
+12 51 -1.2
+14 51 .0132868
+49 51 -1.53463
+51 51 5.15037
+58 51 -.0531474
+60 51 -1.53463
+9 52 -.740741
+11 52 .0132868
+13 52 -.740741
+48 52 -1.25315
+50 52 -.0531474
+52 52 2.57519
+10 53 -.740741
+11 53 .0132868
+44 53 -.0531474
+53 53 2.57519
+54 53 -1.25315
+10 54 .0132868
+44 54 -1.53463
+53 54 -1.25315
+54 54 5.15037
+57 54 -1.25315
+14 55 .0132868
+45 55 -1.53463
+55 55 5.15037
+56 55 -1.53463
+58 55 -1.25315
+12 56 .0132868
+14 56 -.6
+55 56 -1.53463
+56 56 2.57519
+58 56 -.0531474
+11 57 -1.48148
+13 57 .0132868
+50 57 -.0531474
+54 57 -1.25315
+57 57 5.15037
+59 57 -1.25315
+12 58 -1.48148
+14 58 -1.48148
+51 58 -.0531474
+55 58 -1.25315
+56 58 -.0531474
+58 58 5.15037
+60 58 -1.25315
+11 59 .0132868
+50 59 -1.53463
+57 59 -1.25315
+59 59 5.15037
+62 59 -1.25315
+12 60 .0132868
+51 60 -1.53463
+58 60 -1.25315
+60 60 5.15037
+61 60 -1.53463
+14 61 -.6
+60 61 -1.53463
+61 61 2.57519
+13 62 -.740741
+59 62 -1.25315
+62 62 2.57519
diff --git a/SPQR/Matrix/c2.mtx b/SPQR/Matrix/c2.mtx
new file mode 100644
index 0000000..430948d
--- /dev/null
+++ b/SPQR/Matrix/c2.mtx
@@ -0,0 +1,12 @@
+%%MatrixMarket matrix coordinate complex general
+%-------------------------------------------------------------------------------
+% A complex 2-by-2 matrix, all nonzero:
+%
+%  1.1000 + 0.1100i   1.2000 + 0.1200i
+%  2.1000 + 0.2100i   2.2000 + 0.2200i
+%-------------------------------------------------------------------------------
+2 2 4
+0 0 1.1 0.11
+1 0 2.1 0.21
+0 1 1.2 0.12
+1 1 2.2 0.22
diff --git a/SPQR/Matrix/c32.mtx b/SPQR/Matrix/c32.mtx
new file mode 100644
index 0000000..cd42343
--- /dev/null
+++ b/SPQR/Matrix/c32.mtx
@@ -0,0 +1,16 @@
+%%MatrixMarket matrix coordinate complex general
+%-------------------------------------------------------------------------------
+% A complex 3-by-2 matrix, all nonzero:
+%
+%   -1.1000 + 0.1100i   1.2000 + 0.1200i
+%    4.1000 + 0.2100i   2.2000 + 0.2200i
+%    9.1000 + 0.3900i   3.2000 + 0.9900i
+%-------------------------------------------------------------------------------
+3 2 6
+0 0 -1.1 0.11
+0 1 1.2  0.12
+1 0 4.1  0.21
+1 1 2.2  0.22
+2 0 9.1  0.39
+2 1 3.2  0.99
+
diff --git a/SPQR/Matrix/lfat5b.mtx b/SPQR/Matrix/lfat5b.mtx
new file mode 100644
index 0000000..ff1a7a4
--- /dev/null
+++ b/SPQR/Matrix/lfat5b.mtx
@@ -0,0 +1,70 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% Same pattern as Oberwolfach/LFAT5, but with random numerical values
+% The nonzero pattern is given below.  The matrix splits into three
+% connected components, with no entries in the off-diagonal blocks.
+% Two blocks are 3-by-3, the other is 8-by-8.
+%
+%   X . . X X . . . . . . . . .
+%   . X . . . X . . . . . . . .
+%   . . X . . . X . . . . . . .
+%   X . . X . . . X X . . . . .
+%   X . . . X . . X X . . . . .
+%   . X . . . X . . . X . . . .
+%   . . X . . . X . . . X . . .
+%   . . . X X . . X . . . X X .
+%   . . . X X . . . X . . X X .
+%   . . . . . X . . . X . . . .
+%   . . . . . . X . . . X . . .
+%   . . . . . . . X X . . X . X
+%   . . . . . . . X X . . . X X
+%   . . . . . . . . . . . X X X
+% 
+%-------------------------------------------------------------------------------
+14 14 46
+1 1 .8147236863931789
+4 1 .9057919370756192
+5 1 .12698681629350606
+2 2 .9133758561390194
+6 2 .6323592462254095
+3 3 .09754040499940952
+7 3 .2784982188670484
+1 4 .5468815192049838
+4 4 .9575068354342976
+8 4 .9648885351992765
+9 4 .15761308167754828
+1 5 .9705927817606157
+5 5 .9571669482429456
+8 5 .4853756487228412
+9 5 .8002804688888001
+2 6 .14188633862721534
+6 6 .421761282626275
+10 6 .9157355251890671
+3 7 .7922073295595544
+7 7 .959492426392903
+11 7 .6557406991565868
+4 8 .035711678574189554
+5 8 .8491293058687771
+8 8 .9339932477575505
+12 8 .6787351548577735
+13 8 .7577401305783334
+4 9 .7431324681249162
+5 9 .39222701953416816
+9 9 .6554778901775566
+12 9 .17118668781156177
+13 9 .7060460880196088
+6 10 .031832846377420676
+10 10 .27692298496088996
+7 11 .04617139063115394
+11 11 .09713178123584754
+8 12 .8234578283272926
+9 12 .694828622975817
+12 12 .31709948006086053
+14 12 .9502220488383549
+8 13 .03444608050290876
+9 13 .43874435965639824
+13 13 .3815584570930084
+14 13 .7655167881490024
+12 14 .7951999011370632
+13 14 .1868726045543786
+14 14 .48976439578823106
diff --git a/SPQR/Matrix/lp_e226.mtx b/SPQR/Matrix/lp_e226.mtx
new file mode 100644
index 0000000..8e2d738
--- /dev/null
+++ b/SPQR/Matrix/lp_e226.mtx
@@ -0,0 +1,2834 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/LPnetlib/lp_e226
+% name: LPnetlib/lp_e226
+% [Netlib LP problem e226: minimize c'*x, where Ax=b, lo<=x<=hi]
+% id: 620
+% date: 
+% author: M. Saunders
+% ed: D. Gay
+% fields: title name A b id aux kind date author ed notes
+% aux: c lo hi z0
+% kind: linear programming problem
+%-------------------------------------------------------------------------------
+% notes:
+% A Netlib LP problem, in lp/data.  For more information                        
+% send email to netlib at ornl.gov with the message:                               
+%                                                                               
+% 	 send index from lp                                                          
+% 	 send readme from lp/data                                                    
+% 	 send minos from lp/data                                                     
+%                                                                               
+% The following are relevant excerpts from lp/data/readme (by David M. Gay):    
+%                                                                               
+% The column and nonzero counts in the PROBLEM SUMMARY TABLE below exclude      
+% slack and surplus columns and the right-hand side vector, but include         
+% the cost row.  We have omitted other free rows and all but the first          
+% right-hand side vector, as noted below.  The byte count is for the            
+% MPS compressed file; it includes a newline character at the end of each       
+% line.  These files start with a blank initial line intended to prevent        
+% mail programs from discarding any of the data.  The BR column indicates       
+% whether a problem has bounds or ranges:  B stands for "has bounds", R         
+% for "has ranges".                                                             
+%                                                                               
+% The optimal value is from MINOS version 5.3 (of Sept. 1988)                   
+% running on a VAX with default options.                                        
+%                                                                               
+%                        PROBLEM SUMMARY TABLE                                  
+%                                                                               
+% Name       Rows   Cols   Nonzeros    Bytes  BR      Optimal Value             
+% E226        224    282     2767      17749       -1.8751929066E+01            
+%                                                                               
+% From Michael Saunders, Systems Optimization Laboratory at Stanford University.
+% When included in Netlib: Extra free rows omitted.                             
+%                                                                               
+% The following are relevant excerts from lp/data/minos (by Michael Saunders),  
+% regarding experience with MINOS 5.0 on the problems he provided:              
+%                                                                               
+%                                                      (unscaled)   (scaled)    
+% File   Name    Rows  Cols  Elems  Optimal Objective  Itns  Time  Itns  Time   
+% ---- --------  ----  ----  -----  -----------------  ----  ----  ----  ----   
+%   8. E226       226   282   3038 -1.8751929E+01       570   9.4   471   7.5   
+%                                                                               
+% * Objective  is the first row of type N.  It is minimized except as shown.    
+%                                                                               
+% * Itns       is the number of iterations required to solve the problem        
+%              by the primal simplex method, as implemented in the Fortran      
+%              code MINOS 5.0 (May 1985), using default values for all          
+%              parameters.  (The initial basis is triangular.)                  
+%                                                                               
+% * Time       is the processor time required on an IBM 3081K.  The MINOS       
+%              source code was compiled with the IBM Fortran 77 compiler        
+%              VS FORTRAN, using the options NOSDUMP, NOSYM and OPT(3).         
+%                                                                               
+%-------------------------------------------------------------------------------
+223 472 2768
+1 1 1
+3 2 1
+8 3 1
+9 4 1
+10 5 1
+11 6 1
+12 7 1
+13 8 1
+14 9 1
+15 10 1
+16 11 1
+18 12 1
+20 13 1
+21 14 1
+22 15 1
+24 16 1
+25 17 1
+26 18 1
+27 19 1
+28 20 1
+29 21 1
+30 22 1
+31 23 1
+32 24 1
+33 25 1
+34 26 1
+35 27 1
+36 28 1
+38 29 1
+39 30 1
+40 31 1
+41 32 1
+42 33 1
+43 34 1
+44 35 1
+45 36 1
+46 37 1
+47 38 1
+48 39 1
+49 40 1
+50 41 1
+51 42 1
+52 43 1
+53 44 1
+54 45 1
+55 46 1
+56 47 1
+57 48 1
+58 49 1
+59 50 1
+60 51 1
+61 52 1
+62 53 1
+63 54 1
+64 55 1
+65 56 1
+66 57 1
+68 58 1
+69 59 1
+70 60 1
+71 61 1
+72 62 1
+73 63 1
+74 64 1
+75 65 1
+78 66 1
+79 67 1
+80 68 1
+81 69 1
+82 70 1
+83 71 1
+87 72 1
+88 73 1
+89 74 1
+90 75 1
+91 76 1
+92 77 1
+93 78 1
+94 79 1
+95 80 1
+99 81 1
+100 82 1
+102 83 1
+103 84 1
+105 85 1
+106 86 1
+109 87 1
+110 88 1
+111 89 -1
+112 90 1
+113 91 1
+114 92 1
+115 93 1
+116 94 1
+117 95 1
+118 96 1
+119 97 1
+120 98 1
+121 99 -1
+122 100 1
+123 101 -1
+124 102 1
+125 103 1
+126 104 1
+127 105 1
+128 106 1
+129 107 1
+130 108 1
+131 109 1
+132 110 1
+133 111 1
+134 112 1
+135 113 1
+136 114 1
+137 115 1
+138 116 1
+139 117 1
+140 118 1
+141 119 1
+142 120 1
+143 121 1
+144 122 1
+145 123 1
+146 124 1
+147 125 1
+148 126 1
+149 127 1
+150 128 1
+151 129 1
+152 130 1
+153 131 1
+154 132 1
+155 133 1
+156 134 1
+157 135 1
+158 136 1
+159 137 1
+160 138 1
+161 139 1
+162 140 1
+163 141 1
+164 142 1
+165 143 1
+166 144 1
+167 145 1
+168 146 1
+169 147 1
+170 148 1
+172 149 1
+173 150 1
+174 151 1
+175 152 1
+176 153 1
+177 154 1
+178 155 1
+179 156 1
+180 157 1
+181 158 1
+183 159 1
+185 160 1
+186 161 1
+187 162 1
+188 163 1
+190 164 1
+191 165 1
+192 166 1
+193 167 1
+194 168 1
+195 169 1
+200 170 1
+201 171 1
+202 172 1
+203 173 1
+204 174 1
+205 175 1
+206 176 1
+207 177 1
+208 178 1
+210 179 1
+211 180 1
+212 181 -1
+213 182 1
+215 183 1
+216 184 1
+217 185 -1
+218 186 1
+220 187 1
+221 188 1
+222 189 1
+223 190 1
+189 191 1
+190 191 1
+191 192 1
+213 192 1
+186 193 1
+188 193 1
+23 194 1
+46 194 1
+220 195 1
+221 195 .63
+222 195 .37
+19 196 1
+46 196 1
+47 197 2.857
+53 197 .984
+60 197 1
+209 198 1
+210 198 1
+89 199 1
+93 199 1
+94 199 1
+24 200 1
+36 200 -.4286
+40 200 1
+186 201 1
+194 201 -1
+20 202 1
+22 202 1
+36 202 -.2195
+1 203 -1
+102 204 1
+4 205 -.04
+214 205 .1
+42 206 .362
+43 206 1
+44 206 .362
+45 206 .829
+47 206 2.127
+88 207 1
+90 207 -.25
+91 207 .12
+93 207 1
+94 207 1
+131 208 1
+132 208 1
+112 209 -.272
+113 209 -.272
+114 209 -.272
+115 209 -.272
+101 210 1
+103 210 -1
+104 210 -.1614
+105 210 1.1614
+106 210 1.1614
+41 211 1
+42 211 -1
+181 212 -2.9155
+198 212 1
+99 213 1
+118 213 -1
+199 214 1
+205 214 .6526
+153 215 1
+154 215 1
+17 216 1
+46 216 1
+142 217 1
+143 217 1
+109 218 -1
+110 218 1
+111 218 1
+37 219 1
+38 219 -.5
+39 219 1
+41 219 1
+64 220 1
+65 220 1
+18 221 1.25
+21 221 1
+36 221 -.25
+42 222 1
+109 222 -1
+54 223 1
+55 223 1
+57 223 -1.667
+54 224 1
+56 224 1
+57 224 -1.367
+139 225 5.2638
+164 225 7.593
+139 226 15.7829
+165 226 18.5185
+25 227 1
+41 227 1
+221 227 -1
+25 228 1
+26 228 1
+27 228 -.2
+41 228 1
+29 229 1
+32 229 1
+41 229 1
+42 230 1
+99 230 1
+124 230 2
+201 230 1
+28 231 1
+37 231 -1
+38 231 1
+41 231 -1
+32 232 1
+33 232 1.062
+35 232 .0638
+41 232 1
+25 233 -1
+27 233 1
+28 233 1
+41 233 -1
+45 234 -11.055
+76 234 24.476
+77 234 1
+201 234 -2.5386
+202 234 10.0375
+41 235 1
+109 235 -1
+184 236 -.42
+189 236 1
+161 237 75.9202
+168 237 19.7239
+161 238 151.8405
+169 238 12.3305
+150 239 14.5377
+166 239 14.1044
+150 240 25.3995
+167 240 12.3305
+184 241 -.66
+185 241 .66
+193 241 1
+103 242 1
+184 242 -.7
+185 242 .7
+76 243 17.372
+77 243 1
+184 243 -.9
+187 243 1
+57 244 8.33
+58 244 1
+59 244 1.483
+182 244 -9.648
+184 244 -.014
+185 244 .014
+53 245 .982
+57 245 10
+60 245 1
+182 245 -9.648
+184 245 -.0126
+185 245 .0126
+99 246 1
+184 246 -.78
+185 246 .78
+62 247 1
+63 247 1
+59 248 -1
+61 248 1
+62 248 1
+60 249 -1
+62 249 .7763
+76 249 4.401
+77 249 .2237
+93 250 -1
+120 250 1
+67 251 -1
+196 251 -6
+197 251 -3.3
+198 251 -1.6
+199 251 -.916
+87 252 1
+92 252 1
+94 252 1
+122 252 1
+67 253 -1
+68 253 1
+196 253 -18.4
+197 253 .462
+198 253 -4.2
+199 253 -.966
+90 254 1
+91 254 -1
+92 254 1
+93 254 -1
+122 254 1
+67 255 -1
+78 255 1
+196 255 -5.4
+197 255 -3.96
+198 255 -1.68
+199 255 -.927
+67 256 -1
+79 256 1
+196 256 -7.1
+197 256 9.9
+198 256 -1.97
+199 256 -.946
+67 257 -1
+69 257 1
+196 257 -2.5
+197 257 -20.46
+198 257 -1.6
+199 257 -.861
+67 258 -1
+70 258 1
+196 258 -2.8
+197 258 -14.685
+198 258 -2.6
+199 258 -.892
+67 259 -1
+71 259 1
+196 259 -3.7
+197 259 3.135
+198 259 -2.8
+199 259 -.915
+67 260 -1
+72 260 1
+196 260 -3.4
+197 260 9.735
+198 260 -3.1
+199 260 -.942
+67 261 -1
+73 261 1
+196 261 -1.1
+197 261 -16.5
+198 261 -1.74
+199 261 -.862
+67 262 -1
+74 262 1
+196 262 -3.9
+197 262 -1.65
+198 262 -2.71
+199 262 -.894
+95 263 1
+180 263 1
+65 264 1
+67 264 -1
+196 264 .3
+197 264 -23.1
+198 264 -1.25
+199 264 -.845
+180 265 .00026
+181 265 1
+183 265 1
+180 266 .00026
+182 266 1
+183 266 1
+122 267 1
+184 267 -.56
+67 268 -1
+75 268 1
+196 268 -1.1
+197 268 -9.9
+198 268 -2.15
+199 268 -.878
+84 269 1
+85 269 1
+120 270 1
+184 270 -.66
+185 270 .66
+77 271 1
+84 271 -1
+76 272 1
+86 272 -1
+180 273 -.0029
+203 273 -.0007
+204 273 .44
+205 273 -.0459
+206 273 1
+209 273 -.78
+108 274 1
+161 274 -1.125
+180 275 1
+184 275 -1
+62 276 1
+67 276 -1
+196 276 1.2
+197 276 -23.1
+198 276 -1
+199 276 -.832
+131 277 -1
+133 277 64
+134 277 -66
+135 277 73
+136 277 -92
+137 277 40
+138 277 -50
+139 277 .24
+140 277 317.5
+141 277 -613.2
+164 277 -1
+165 277 -1
+193 277 1
+131 278 -1
+133 278 1
+134 278 -3
+135 278 -17
+136 278 -2
+137 278 -24
+138 278 14
+139 278 1.29
+140 278 -5.1
+141 278 -19.2
+164 278 -1
+165 278 -1
+194 278 1
+131 279 -1
+133 279 -9
+134 279 7
+135 279 -52
+136 279 33
+137 279 -70
+138 279 60
+139 279 -.7
+140 279 -81
+141 279 95.8
+164 279 -1
+165 279 -1
+176 279 1
+131 280 -1
+133 280 -9
+134 280 7
+135 280 -52
+136 280 33
+137 280 -69
+138 280 59
+139 280 -3.23
+140 280 -80.6
+141 280 95.8
+164 280 -1
+165 280 -1
+177 280 1
+131 281 -1
+133 281 -9
+134 281 7
+135 281 -52
+136 281 33
+137 281 -68
+138 281 58
+139 281 -4.94
+140 281 -80.2
+141 281 95.8
+164 281 -1
+165 281 -1
+178 281 1
+131 282 -1
+133 282 1.1
+134 282 -3.1
+135 282 22
+136 282 -41
+137 282 49
+138 282 -59
+139 282 7.48
+140 282 44
+141 282 -59
+164 282 -1
+165 282 -1
+175 282 1
+131 283 -1
+133 283 -9
+134 283 7
+135 283 -52
+136 283 33
+137 283 -67
+138 283 57
+139 283 -6.21
+140 283 -79.8
+141 283 95.8
+164 283 -1
+165 283 -1
+179 283 1
+103 284 1
+131 284 -1
+133 284 4
+134 284 -6
+135 284 58
+136 284 -77
+137 284 40
+138 284 -50
+139 284 10.99
+140 284 70
+141 284 -118.2
+164 284 -1
+165 284 -1
+170 284 1
+171 284 -1
+131 285 -1
+133 285 1.5
+134 285 -3.5
+135 285 40
+136 285 -59
+137 285 38
+138 285 -48
+139 285 2.98
+140 285 50.2
+141 285 -80.2
+164 285 -1
+165 285 -1
+170 285 1
+200 285 1
+76 286 -.7977
+180 286 -.0071
+200 286 -.0059
+201 286 -.0039
+202 286 -.0033
+203 286 .0065
+204 286 -.09
+205 286 -.0564
+207 286 1
+209 286 -.925
+180 287 -.0017
+196 287 1
+200 287 .0036
+201 287 .0024
+202 287 .002
+203 287 .0011
+204 287 .32
+205 287 .0696
+76 288 .152
+180 288 -.0005
+197 288 1
+200 288 .0006
+201 288 .0004
+202 288 .00035
+203 288 -.0023
+204 288 .042
+76 289 .6075
+77 289 .05
+180 289 .0006
+200 289 -.00112
+201 289 -.00075
+202 289 -.00063
+203 289 -.039
+204 289 1
+205 289 .1969
+208 289 1
+209 289 2.375
+107 290 1
+159 290 1
+160 290 -1
+162 290 .4
+67 291 1
+76 291 -7.383
+77 291 -.4
+180 291 -.04495
+200 291 -.19654
+201 291 -.13103
+202 291 -.10919
+203 291 -.22573
+204 291 4.569
+206 291 -6
+207 291 -2
+208 291 -2
+209 291 1.49
+210 291 -1.3
+211 291 1
+212 291 1
+97 292 1
+155 292 1
+156 292 -1
+162 292 4
+163 292 -8
+98 293 1
+157 293 1
+158 293 -1
+162 293 .5
+163 293 -1
+120 294 1
+131 294 -1
+133 294 53
+134 294 -55
+135 294 73
+136 294 -92
+137 294 40
+138 294 -50
+139 294 7.34
+140 294 273.5
+141 294 -525.2
+164 294 -1
+165 294 -1
+122 295 1
+131 295 -1
+133 295 169
+134 295 -171
+135 295 98
+136 295 -117
+137 295 70
+138 295 -80
+139 295 -2.56
+140 295 762
+141 295 -1478.2
+164 295 -1
+165 295 -1
+84 296 -1
+86 296 -20.051
+84 297 -1
+86 297 -15.911
+84 298 -1
+86 298 -5.395
+80 299 1
+84 299 1
+86 299 7.925
+81 300 1
+84 300 1
+86 300 3.117
+82 301 1
+84 301 1
+86 301 1.954
+83 302 1
+84 302 1
+86 302 -1.117
+68 303 1
+84 303 -1
+86 303 -6.192
+35 304 1
+84 304 -1
+86 304 -27.4598
+36 305 1
+84 305 -1
+86 305 -28.869
+78 306 1
+84 306 -1
+86 306 -6.248
+79 307 1
+84 307 -1
+86 307 -2.346
+69 308 1
+84 308 -1
+86 308 -15.619
+70 309 1
+84 309 -1
+86 309 -9.972
+71 310 1
+84 310 -1
+86 310 -5.883
+72 311 1
+84 311 -1
+86 311 -.923
+73 312 1
+84 312 -1
+86 312 -15.292
+74 313 1
+84 313 -1
+86 313 -9.503
+65 314 1
+84 314 -1
+86 314 -15.911
+142 315 -1
+144 315 -2.5
+145 315 .5
+146 315 -14.32
+147 315 -5.7
+148 315 9
+149 315 -19
+150 315 2.01
+151 315 -4.56
+152 315 16.1
+166 315 -1
+167 315 -1
+223 315 1
+142 316 -1
+144 316 -.2
+145 316 -1.8
+146 316 1.64
+147 316 -21.6
+148 316 30
+149 316 -40
+150 316 6.61
+151 316 21.02
+152 316 -18.2
+166 316 -1
+167 316 -1
+195 316 1
+153 317 -1
+155 317 -.2
+156 317 -1.8
+157 317 9
+158 317 -29
+159 317 30
+160 317 -40
+161 317 -2.38
+162 317 24.7
+163 317 -25.6
+168 317 -1
+169 317 -1
+195 317 1
+153 318 -1
+155 318 -2.5
+156 318 .5
+157 318 -12
+158 318 -8
+159 318 9
+160 318 -19
+161 318 -6.93
+162 318 -3.4
+163 318 13.8
+168 318 -1
+169 318 -1
+223 318 1
+142 319 -1
+144 319 66
+145 319 -68
+146 319 51.8
+147 319 -71.8
+148 319 40
+149 319 -50
+150 319 -3.78
+151 319 314.9
+152 319 -598
+166 319 -1
+167 319 -1
+193 319 1
+142 320 -1
+144 320 3
+145 320 -5
+146 320 -16.6
+147 320 -3.4
+148 320 -24
+149 320 14
+150 320 -2.69
+151 320 3.1
+152 320 -25.6
+166 320 -1
+167 320 -1
+194 320 1
+153 321 -1
+155 321 66
+156 321 -68
+157 321 75
+158 321 -95
+159 321 40
+160 321 -50
+161 321 -12.74
+162 321 326.5
+163 321 -621.2
+168 321 -1
+169 321 -1
+193 321 1
+153 322 -1
+155 322 3
+156 322 -5
+157 322 -15
+158 322 -5
+159 322 -24
+160 322 14
+161 322 -6.68
+162 322 3.9
+163 322 -27.2
+168 322 -1
+169 322 -1
+194 322 1
+142 323 -1
+145 323 -2
+146 323 -.64
+147 323 -19.4
+148 323 45
+149 323 -55
+150 323 5.74
+151 323 26.68
+152 323 -17.6
+166 323 -1
+167 323 -1
+172 323 1
+142 324 -1
+144 324 1
+145 324 -3
+146 324 3.16
+147 324 -23.2
+148 324 46
+149 324 -56
+150 324 5.55
+151 324 32.98
+152 324 -29.4
+166 324 -1
+167 324 -1
+173 324 1
+142 325 -1
+144 325 2
+145 325 -4
+146 325 6.96
+147 325 -27
+148 325 47
+149 325 -57
+150 325 5.15
+151 325 39.28
+152 325 -41.2
+166 325 -1
+167 325 -1
+174 325 1
+153 326 -1
+156 326 -2
+157 326 6
+158 326 -26
+159 326 45
+160 326 -55
+161 326 -1.05
+162 326 30
+163 326 -24.2
+168 326 -1
+169 326 -1
+172 326 1
+153 327 -1
+155 327 1
+156 327 -3
+157 327 11
+158 327 -31
+159 327 46
+160 327 -56
+161 327 -1.27
+162 327 36.9
+163 327 -37.2
+168 327 -1
+169 327 -1
+173 327 1
+153 328 -1
+155 328 2
+156 328 -4
+157 328 16
+158 328 -36
+159 328 47
+160 328 -57
+161 328 -1.71
+162 328 43.8
+163 328 -50.2
+168 328 -1
+169 328 -1
+174 328 1
+84 329 1
+184 329 -1
+142 330 -1
+144 330 -7
+145 330 5
+146 330 -43.2
+147 330 23.2
+148 330 -70
+149 330 60
+150 330 -3.65
+151 330 -68.6
+152 330 81
+166 330 -1
+167 330 -1
+176 330 1
+142 331 -1
+144 331 -7
+145 331 5
+146 331 -43.2
+147 331 23.2
+148 331 -69
+149 331 59
+150 331 -5.85
+151 331 -68.2
+152 331 81
+166 331 -1
+167 331 -1
+177 331 1
+142 332 -1
+144 332 -7
+145 332 5
+146 332 -43.2
+147 332 23.2
+148 332 -68
+149 332 58
+150 332 -7.63
+151 332 -67.8
+152 332 81
+166 332 -1
+167 332 -1
+178 332 1
+142 333 -1
+144 333 3.5
+145 333 -5.5
+146 333 13.04
+147 333 -33
+148 333 49
+149 333 -59
+150 333 4.43
+151 333 49.12
+152 333 -59.2
+166 333 -1
+167 333 -1
+175 333 1
+142 334 -1
+144 334 -7
+145 334 5
+146 334 -43.2
+147 334 23.2
+148 334 -67
+149 334 57
+150 334 -8.38
+151 334 -67.4
+152 334 81
+166 334 -1
+167 334 -1
+179 334 1
+153 335 -1
+155 335 -7
+156 335 5
+157 335 -50
+158 335 30
+159 335 -70
+160 335 60
+161 335 -10.34
+162 335 -72
+163 335 87.8
+168 335 -1
+169 335 -1
+176 335 1
+153 336 -1
+155 336 -7
+156 336 5
+157 336 -50
+158 336 30
+159 336 -69
+160 336 59
+161 336 -12.38
+162 336 -71.6
+163 336 87.8
+168 336 -1
+169 336 -1
+177 336 1
+153 337 -1
+155 337 -7
+156 337 5
+157 337 -50
+158 337 30
+159 337 -68
+160 337 58
+161 337 -14.06
+162 337 -71.2
+163 337 87.8
+168 337 -1
+169 337 -1
+178 337 1
+153 338 -1
+155 338 3.5
+156 338 -5.5
+157 338 24
+158 338 -44
+159 338 49
+160 338 -59
+161 338 -2.38
+162 338 54.6
+163 338 -70.2
+168 338 -1
+169 338 -1
+175 338 1
+153 339 -1
+155 339 -7
+156 339 5
+157 339 -50
+158 339 30
+159 339 -67
+160 339 57
+161 339 -14.97
+162 339 -70.8
+163 339 87.8
+168 339 -1
+169 339 -1
+179 339 1
+75 340 1
+84 340 -1
+86 340 -13.855
+142 341 -1
+144 341 -6.5
+145 341 4.5
+146 341 -34.08
+147 341 14.1
+148 341 -50
+149 341 40
+150 341 2.44
+151 341 -54.04
+152 341 67.9
+166 341 -1
+167 341 -1
+202 341 1
+153 342 -1
+155 342 -6.5
+156 342 4.5
+157 342 -38
+158 342 18
+159 342 -50
+160 342 40
+161 342 -6.68
+162 342 -56
+163 342 71.8
+168 342 -1
+169 342 -1
+202 342 1
+142 343 -1
+144 343 -8
+145 343 6
+146 343 -29.52
+147 343 21.7
+148 343 -56
+149 343 46
+150 343 1.92
+151 343 -60.16
+152 343 87.5
+166 343 -1
+167 343 -1
+201 343 1
+153 344 -1
+155 344 -8
+156 344 6
+157 344 -48
+158 344 28
+159 344 -56
+160 344 46
+161 344 -7.02
+162 344 -69.4
+163 344 93.8
+168 344 -1
+169 344 -1
+201 344 1
+103 345 1
+142 345 -1
+144 345 6
+145 345 -8
+146 345 40.4
+147 345 -60.4
+148 345 40
+149 345 -50
+150 345 6.96
+151 345 69.2
+152 345 -106.6
+166 345 -1
+167 345 -1
+170 345 1
+171 345 .20083
+142 346 -1
+144 346 3.5
+145 346 -5.5
+146 346 26.72
+147 346 -46.7
+148 346 38
+149 346 -48
+150 346 -1.19
+151 346 51.56
+152 346 -72.9
+166 346 -1
+167 346 -1
+170 346 1
+200 346 1
+153 347 -1
+155 347 3.5
+156 347 -5.5
+157 347 42
+158 347 -62
+159 347 38
+160 347 -48
+161 347 -10.17
+162 347 59.2
+163 347 -88.2
+168 347 -1
+169 347 -1
+170 347 1
+200 347 1
+62 348 1
+66 348 -1
+84 348 -1
+86 348 -20.051
+52 349 2.63
+67 349 -.33
+84 349 .33
+86 349 .49
+196 349 -2.013
+197 349 3.267
+198 349 -1.0164
+199 349 -.3102
+120 350 1
+142 350 -1
+144 350 55
+145 350 -57
+146 350 51.8
+147 350 -71.8
+148 350 40
+149 350 -50
+150 350 3.25
+151 350 270.9
+152 350 -510
+166 350 -1
+167 350 -1
+122 351 1
+142 351 -1
+144 351 171
+145 351 -173
+146 351 70.8
+147 351 -90.8
+148 351 70
+149 351 -80
+150 351 -6.36
+151 351 756.4
+152 351 -1457
+166 351 -1
+167 351 -1
+120 352 1
+121 352 1
+153 352 -1
+155 352 55
+156 352 -57
+157 352 75
+158 352 -95
+159 352 40
+160 352 -50
+161 352 -5.81
+162 352 282.5
+163 352 -533.2
+168 352 -1
+169 352 -1
+122 353 1
+123 353 1
+153 353 -1
+155 353 171
+156 353 -173
+157 353 100
+158 353 -120
+159 353 70
+160 353 -80
+161 353 -15.15
+162 353 771
+163 353 -1486.2
+168 353 -1
+169 353 -1
+84 354 -.033
+86 354 -.007
+100 354 1
+102 354 1
+106 354 1
+180 354 -.079
+189 354 -.3351
+191 354 -.0347
+195 354 -.3769
+84 355 -.0059
+86 355 -.114
+180 355 -.0802
+186 355 -.0427
+191 355 -.0586
+193 355 -.1917
+194 355 -.4058
+203 355 1
+96 356 1
+109 356 1
+153 356 -1
+155 356 -9
+156 356 7
+157 356 -40
+158 356 20
+159 356 -60
+160 356 50
+161 356 65.12
+162 356 -71
+163 356 93.8
+168 356 -1
+169 356 -1
+54 357 -5.7
+84 357 -.01
+86 357 -.151
+116 357 1
+119 357 .4762
+180 357 -.315
+184 357 .085
+222 357 -.198
+223 357 -.462
+54 358 -5.05
+84 358 -.005
+86 358 -.076
+119 358 .4673
+172 358 -.34
+176 358 -.413
+180 358 -.219
+184 358 .085
+54 359 -5.38
+84 359 -.005
+86 359 -.076
+119 359 .4673
+173 359 -.316
+177 359 -.401
+180 359 -.259
+184 359 .085
+54 360 -5.7
+84 360 -.01
+86 360 -.151
+119 360 .657
+174 360 -.288
+178 360 -.372
+180 360 -.315
+184 360 .085
+54 361 -5.7
+84 361 -.01
+86 361 -.151
+119 361 1.2129
+175 361 -.235
+179 361 -.349
+180 361 -.395
+184 361 .085
+54 362 -5.47
+84 362 -.005
+86 362 -.076
+117 362 1
+119 362 .4673
+172 362 -.209
+176 362 -.561
+180 362 -.2
+184 362 .085
+54 363 -6.13
+84 363 -.01
+86 363 -.151
+117 363 1
+119 363 .4673
+173 363 -.212
+177 363 -.521
+180 363 -.235
+184 363 .085
+54 364 -6.79
+84 364 -.01
+86 364 -.151
+117 364 1
+119 364 .4932
+174 364 -.222
+178 364 -.471
+180 364 -.282
+184 364 .085
+54 365 -5.8
+84 365 -.052
+86 365 -.786
+118 365 1
+119 365 .4673
+172 365 -.218
+176 365 -.538
+180 365 -.167
+184 365 .085
+54 366 -6.51
+84 366 -.057
+86 366 -.861
+118 366 1
+119 366 .4673
+173 366 -.231
+177 366 -.502
+180 366 -.188
+184 366 .085
+54 367 -7.21
+84 367 -.081
+86 367 -1.224
+118 367 1
+119 367 .5055
+174 367 -.231
+178 367 -.442
+180 367 -.225
+184 367 .085
+54 368 -5.05
+84 368 -.005
+86 368 -.076
+116 368 1
+119 368 .4673
+172 368 -.34
+176 368 -.413
+180 368 -.219
+184 368 .085
+54 369 -5.38
+84 369 -.005
+86 369 -.076
+116 369 1
+119 369 .4673
+173 369 -.316
+177 369 -.401
+180 369 -.259
+184 369 .085
+54 370 -5.7
+84 370 -.01
+86 370 -.151
+116 370 1
+119 370 .657
+174 370 -.288
+178 370 -.372
+180 370 -.315
+184 370 .085
+54 371 -7.45
+84 371 -.015
+86 371 -.227
+117 371 1
+119 371 1.1306
+175 371 -.216
+179 371 -.427
+180 371 -.331
+184 371 .085
+54 372 -7.92
+84 372 -.086
+86 372 -1.299
+118 372 1
+119 372 .8789
+175 372 -.23
+179 372 -.394
+180 372 -.279
+184 372 .085
+54 373 -5.7
+84 373 -.01
+86 373 -.151
+116 373 1
+119 373 1.2129
+175 373 -.235
+179 373 -.349
+180 373 -.395
+184 373 .085
+96 374 -1
+97 374 -8.5
+98 374 -62.5
+107 374 -100
+108 374 -55.95
+96 375 -1
+97 375 -.9
+98 375 16
+107 375 20
+108 375 -46.04
+96 376 1
+97 376 64
+98 376 115
+104 376 1
+107 376 100
+108 376 64
+14 377 .92
+15 377 1
+16 377 1
+96 377 -.08
+97 377 -.856
+98 377 -3.72
+107 377 -4.656
+108 377 -4.4312
+96 378 -1
+97 378 -15
+98 378 -100
+103 378 1
+104 378 .1614
+107 378 -100
+108 378 -60.28
+34 379 1
+35 379 -.7
+36 379 1
+96 379 -.3
+98 379 6.3
+107 379 6
+108 379 -19.314
+96 380 1
+97 380 8.5
+98 380 62.5
+100 380 -.62
+101 380 -.38
+107 380 100
+108 380 55.95
+113 380 .652
+114 380 .652
+96 381 -1
+97 381 -.9
+98 381 16
+99 381 1
+107 381 20
+108 381 -46.04
+96 382 1
+97 382 2.2
+98 382 -16
+107 382 22.4
+108 382 49.12
+114 382 .43
+115 382 .43
+116 382 -1
+96 383 1
+97 383 1.1
+98 383 -30
+107 383 -7.4
+108 383 48.08
+112 383 .534
+115 383 .534
+117 383 -1
+96 384 1
+97 384 11
+98 384 94
+100 384 -.419
+101 384 -.581
+107 384 100
+108 384 59
+112 384 .742
+113 384 .742
+96 385 1
+97 385 64
+98 385 115
+107 385 100
+108 385 64
+109 385 1
+130 385 1
+96 386 1
+97 386 15
+98 386 100
+107 386 100
+108 386 60.28
+109 386 1
+130 386 1
+96 387 1
+97 387 2.2
+98 387 -16
+107 387 22.4
+108 387 49.12
+109 387 1
+130 387 1
+96 388 1
+97 388 1.1
+98 388 -30
+107 388 -7.4
+108 388 48.08
+109 388 1
+130 388 1
+96 389 1
+97 389 .9
+98 389 -16
+107 389 -20
+108 389 46.04
+109 389 1
+130 389 1
+96 390 1
+97 390 8.5
+98 390 62.5
+107 390 100
+108 390 55.95
+109 390 1
+130 390 1
+96 391 1
+97 391 11
+98 391 94
+107 391 100
+108 391 59
+184 391 -.71
+185 391 .71
+96 392 1
+97 392 2.2
+98 392 -16
+107 392 22.4
+108 392 49.12
+184 392 -.74
+185 392 .74
+96 393 1
+97 393 1.1
+98 393 -30
+107 393 -7.4
+108 393 48.08
+184 393 -.75
+185 393 .75
+96 394 1
+97 394 8.5
+98 394 62.5
+107 394 100
+108 394 55.95
+184 394 -.72
+185 394 .72
+96 395 1
+97 395 64
+98 395 115
+107 395 100
+108 395 64
+109 395 1
+125 395 1
+126 395 .096
+127 395 -.126
+128 395 55
+129 395 -50
+192 395 50.5
+96 396 1
+97 396 15
+98 396 100
+107 396 100
+108 396 60.28
+109 396 1
+125 396 1
+126 396 .05
+127 396 -.08
+128 396 50
+129 396 -50
+192 396 1.5
+96 397 1
+97 397 11
+98 397 94
+107 397 100
+108 397 59
+109 397 1
+125 397 1
+126 397 .03
+127 397 -.06
+128 397 47
+129 397 -50
+192 397 -2.5
+96 398 1
+97 398 2.2
+98 398 -16
+107 398 22.4
+108 398 49.12
+109 398 1
+125 398 1
+126 398 -.06
+127 398 .03
+128 398 -50
+129 398 14
+192 398 -11.3
+96 399 1
+97 399 1.1
+98 399 -30
+107 399 -7.4
+108 399 48.08
+109 399 1
+125 399 1
+126 399 -.069
+127 399 .039
+128 399 -73
+129 399 45
+192 399 -12.4
+96 400 1
+97 400 .9
+98 400 -16
+107 400 -20
+108 400 46.04
+109 400 1
+125 400 1
+126 400 -.083
+127 400 .053
+128 400 -68
+129 400 60
+192 400 -12.6
+96 401 1
+97 401 8.5
+98 401 62.5
+107 401 100
+108 401 55.95
+109 401 1
+125 401 1
+126 401 .006
+127 401 -.036
+128 401 15
+129 401 -50
+192 401 -5
+30 402 3.6
+31 402 -4.4
+32 402 -1
+41 402 -1
+96 402 1
+97 402 6
+98 402 26
+107 402 54
+108 402 53.08
+109 402 1
+30 403 4.6
+31 403 -5.4
+32 403 -1
+41 403 -1
+96 403 1
+97 403 7
+98 403 27.5
+107 403 54.8
+108 403 53.27
+109 403 1
+30 404 5.6
+31 404 -6.4
+32 404 -1
+41 404 -1
+96 404 1
+97 404 8
+98 404 29
+107 404 55.6
+108 404 53.46
+109 404 1
+96 405 1
+97 405 10.7
+98 405 46.5
+107 405 58.2
+108 405 55.39
+109 405 1
+142 405 -1
+144 405 1.7
+145 405 -3.7
+146 405 -.26
+147 405 -19.7
+148 405 -1.8
+149 405 -8.2
+150 405 12.86
+151 405 14.95
+152 405 -31.5
+166 405 -1
+167 405 -1
+5 406 1
+12 406 1
+62 406 -.34
+84 406 -.366
+86 406 -.091
+96 406 -.2857
+97 406 -1.9999
+98 406 -5.3997
+107 406 -11.5709
+108 406 -15.105
+120 406 -.0043
+122 406 -.002
+180 406 -.00112
+4 407 1
+12 407 1
+62 407 -.34
+84 407 -.366
+86 407 -.9088
+96 407 -.2856
+97 407 -1.9992
+98 407 -5.3978
+107 407 -11.5382
+108 407 -15.105
+120 407 -.0044
+122 407 -.002
+180 407 -.00112
+2 408 1
+10 408 1
+25 408 -.135
+65 408 -.266
+74 408 -.152
+84 408 -.21
+86 408 1.4839
+96 408 -.2018
+97 408 -1.4126
+98 408 -3.814
+107 408 -11.7448
+108 408 -10.7963
+120 408 -.0172
+122 408 -.008
+180 408 -.00504
+8 409 .746
+49 409 -.29
+62 409 -.238
+65 409 -.035
+78 409 -.242
+79 409 -.048
+84 409 -.29
+86 409 3.69
+96 409 -.1292
+97 409 -.9044
+98 409 -2.1189
+107 409 -5.5427
+108 409 -7.2107
+120 409 -.0058
+122 409 -.006
+180 409 -.00336
+8 410 1.111
+48 410 -.205
+62 410 -.238
+65 410 -.035
+78 410 -.237
+79 410 -.138
+84 410 -.205
+86 410 2.714
+96 410 -.1292
+97 410 -.9044
+98 410 -2.1189
+107 410 -5.5427
+108 410 -7.2107
+120 410 -.0058
+122 410 -.006
+180 410 -.00336
+3 411 -1
+12 411 1
+62 411 -.28
+84 411 -.467
+86 411 .601
+96 411 -.2321
+97 411 -1.6247
+98 411 -4.4099
+107 411 -8.9823
+108 411 -12.0181
+120 411 -.0069
+122 411 -.005
+180 411 -.00504
+219 411 1
+3 412 -1
+13 412 1
+62 412 -.28
+66 412 .28
+84 412 -.467
+86 412 .601
+96 412 -.2321
+97 412 -1.6247
+98 412 -4.4099
+107 412 -8.9823
+108 412 -12.0181
+120 412 -.0069
+122 412 -.005
+180 412 -.00504
+219 412 1
+8 413 .746
+50 413 -.29
+51 413 -.03
+62 413 -.238
+65 413 -.035
+78 413 -.26
+79 413 -.03
+84 413 -.29
+86 413 3.69
+96 413 -.1292
+97 413 -.9044
+98 413 -2.1189
+107 413 -5.5427
+108 413 -7.2107
+120 413 -.0058
+122 413 -.006
+180 413 -.00336
+1 414 1
+11 414 .111
+37 414 -.126
+65 414 -.222
+75 414 -.019
+84 414 -.36
+86 414 .3341
+96 414 -.2729
+97 414 -1.9103
+98 414 -3.8479
+107 414 -8.9328
+108 414 -13.9793
+120 414 .0039
+122 414 -.001
+180 414 -.0017
+2 415 1
+11 415 .111
+37 415 -.116
+65 415 -.16
+75 415 -.025
+84 415 -.39
+86 415 .0148
+96 415 -.2847
+97 415 -1.9929
+98 415 -3.8435
+107 415 -10.9325
+108 415 -14.8044
+120 415 -.0083
+122 415 -.008
+180 415 -.00504
+8 416 .746
+28 416 -.15
+49 416 -.29
+62 416 -.088
+65 416 -.035
+78 416 -.242
+79 416 -.048
+84 416 -.29
+86 416 3.69
+96 416 -.1292
+97 416 -.9044
+98 416 -2.1189
+107 416 -5.5427
+108 416 -7.2107
+120 416 -.0058
+122 416 -.006
+180 416 -.00336
+8 417 1.111
+28 417 -.15
+48 417 -.205
+62 417 -.088
+65 417 -.035
+78 417 -.237
+79 417 -.138
+84 417 -.205
+86 417 2.724
+96 417 -.1292
+97 417 -.9044
+98 417 -2.1189
+107 417 -5.5427
+108 417 -7.2107
+120 417 -.0058
+122 417 -.006
+180 417 -.00336
+8 418 .746
+28 418 -.15
+50 418 -.29
+51 418 -.03
+62 418 -.088
+65 418 -.035
+78 418 -.26
+79 418 -.03
+84 418 -.29
+86 418 3.69
+96 418 -.1292
+97 418 -.9044
+98 418 -2.1189
+107 418 -5.5427
+108 418 -7.2107
+120 418 -.0058
+122 418 -.006
+180 418 -.00336
+2 419 1
+11 419 .111
+25 419 -.116
+65 419 -.306
+84 419 -.342
+86 419 .5595
+96 419 -.2018
+97 419 -1.4126
+98 419 -3.814
+107 419 -11.7448
+108 419 -10.7963
+120 419 -.0172
+122 419 -.008
+180 419 -.00504
+7 420 1
+10 420 1
+17 420 -.1343
+18 420 -.235
+65 420 -.115
+73 420 -.062
+74 420 -.146
+84 420 -.14
+86 420 .5247
+96 420 -.2755
+97 420 -1.9285
+98 420 -5.2345
+107 420 -6.9977
+108 420 -14.5023
+120 420 -.0125
+122 420 -.009
+180 420 -.0028
+4 421 1
+10 421 1
+17 421 -.1293
+18 421 -.19
+65 421 -.19
+73 421 -.037
+74 421 -.193
+84 421 -.16
+86 421 1.589
+96 421 -.2165
+97 421 -1.5155
+98 421 -6.5167
+107 421 -13.8127
+108 421 -11.6585
+120 421 -.0095
+122 421 -.002
+180 421 -.00112
+6 422 1
+10 422 1
+62 422 -.299
+73 422 -.05
+74 422 -.175
+84 422 -.18
+86 422 1.787
+96 422 -.1965
+97 422 -1.3755
+98 422 -5.8164
+99 422 -.085
+107 422 -12.3599
+108 422 -10.5776
+120 422 -.0065
+122 422 -.004
+180 422 -.00224
+1 423 1
+10 423 1
+17 423 -.1143
+18 423 -.2
+65 423 -.16
+73 423 -.052
+74 423 -.2
+84 423 -.16
+86 423 1.5197
+96 423 -.2232
+97 423 -1.5624
+98 423 -6.071
+107 423 -9.7315
+108 423 -11.3765
+120 423 -.0008
+122 423 -.001
+180 423 -.00168
+3 424 -1
+11 424 .132
+23 424 -.7
+24 424 -.196
+75 424 -.06
+84 424 -.437
+86 424 1.0927
+96 424 -.1429
+97 424 -1.0003
+98 424 -4.2156
+99 424 -.08
+107 424 -9.7029
+108 424 -7.638
+120 424 -.0161
+122 424 -.005
+180 424 -.00504
+219 424 1
+2 425 1
+10 425 1
+17 425 -.1086
+18 425 -.19
+65 425 -.14
+73 425 -.042
+74 425 -.187
+84 425 -.21
+86 425 1.484
+96 425 -.1963
+97 425 -1.3741
+98 425 -4.829
+107 425 -11.7976
+108 425 -10.5256
+120 425 -.0177
+122 425 -.008
+180 425 -.00504
+3 426 -1
+10 426 1
+19 426 -.0777
+20 426 -.11152
+65 426 -.12
+73 426 -.08
+74 426 -.182
+84 426 -.255
+86 426 2.274
+96 426 -.2015
+97 426 -1.4105
+98 426 -3.9091
+107 426 -9.1481
+108 426 -10.4982
+120 426 -.0115
+122 426 -.005
+180 426 -.00504
+219 426 1
+7 427 1
+11 427 .118
+17 427 -.1229
+18 427 -.215
+65 427 -.155
+75 427 -.075
+84 427 -.253
+86 427 -.3722
+96 427 -.2755
+97 427 -1.9285
+98 427 -5.2345
+107 427 -6.9977
+108 427 -14.5023
+120 427 -.0125
+122 427 -.009
+180 427 -.0028
+1 428 1
+10 428 1
+25 428 -.141
+62 428 -.212
+73 428 -.054
+74 428 -.2
+84 428 -.16
+86 428 1.5197
+96 428 -.2286
+97 428 -1.6002
+98 428 -3.7033
+107 428 -9.5326
+108 428 -11.8026
+120 428 -.0004
+122 428 -.001
+180 428 -.00168
+2 429 1
+10 429 1
+25 429 -.135
+62 429 -.216
+73 429 -.015
+74 429 -.187
+84 429 -.21
+86 429 1.4839
+96 429 -.2018
+97 429 -1.4126
+98 429 -3.814
+107 429 -11.7448
+108 429 -10.7963
+120 429 -.0172
+122 429 -.008
+180 429 -.00504
+4 430 1
+11 430 .111
+19 430 -.1086
+20 430 -.1558
+62 430 -.15
+75 430 -.075
+84 430 -.355
+86 430 .5765
+96 430 -.2165
+97 430 -1.5155
+98 430 -6.6249
+107 430 -13.8127
+108 430 -11.6585
+120 430 -.0095
+122 430 -.002
+180 430 -.00112
+4 431 1
+11 431 .118
+17 431 -.0983
+18 431 -.172
+65 431 -.216
+75 431 -.035
+84 431 -.323
+86 431 .435
+96 431 -.2424
+97 431 -1.6968
+98 431 -6.3266
+107 431 -13.2108
+108 431 -12.9563
+120 431 -.0076
+122 431 -.002
+180 431 -.00112
+4 432 1
+11 432 .139
+17 432 -.0983
+18 432 -.172
+65 432 -.216
+75 432 -.118
+84 432 -.24
+86 432 1.6186
+96 432 -.2421
+97 432 -1.6947
+98 432 -6.3914
+107 432 -13.1702
+108 432 -12.9378
+120 432 -.0079
+122 432 -.002
+180 432 -.00112
+1 433 1
+11 433 .111
+17 433 -.1143
+18 433 -.2
+65 433 -.16
+75 433 -.052
+84 433 -.36
+86 433 .3341
+96 433 -.2232
+97 433 -1.5624
+98 433 -6.071
+107 433 -9.7315
+108 433 -11.3765
+120 433 -.0008
+122 433 -.001
+180 433 -.00168
+11 434 .114
+62 434 -.252
+75 434 -.081
+84 434 -.493
+86 434 3.436
+96 434 -.1409
+97 434 -.9863
+98 434 -2.8462
+99 434 -.026
+107 434 -7.045
+108 434 -7.7143
+120 434 -.0031
+122 434 -.003
+180 434 -.00056
+214 434 1
+1 435 1
+11 435 .111
+37 435 -.126
+62 435 -.164
+75 435 -.077
+84 435 -.36
+86 435 .3341
+96 435 -.2729
+97 435 -1.9103
+98 435 -3.8479
+107 435 -8.9238
+108 435 -13.9397
+120 435 .0039
+122 435 -.001
+180 435 -.0017
+2 436 1
+11 436 .111
+37 436 -.116
+62 436 -.11
+75 436 -.075
+84 436 -.39
+86 436 .0148
+96 436 -.2847
+97 436 -1.9929
+98 436 -3.8435
+107 436 -10.9325
+108 436 -14.8044
+120 436 -.0083
+122 436 -.008
+180 436 -.00504
+4 437 1
+11 437 .115
+62 437 -.306
+75 437 -.066
+84 437 -.334
+86 437 .346
+96 437 -.1882
+97 437 -1.3174
+98 437 -6.7376
+99 437 -.09
+107 437 -14.2279
+108 437 -10.2381
+120 437 -.0118
+122 437 -.002
+180 437 -.00112
+1 438 1
+11 438 .111
+25 438 -.141
+62 438 -.212
+75 438 -.054
+84 438 -.36
+86 438 .3341
+96 438 -.2286
+97 438 -1.6002
+98 438 -3.7033
+107 438 -9.5326
+108 438 -11.8026
+120 438 -.0004
+122 438 -.001
+180 438 -.00168
+2 439 1
+11 439 .111
+25 439 -.135
+62 439 -.216
+75 439 -.022
+84 439 -.39
+86 439 .0148
+96 439 -.2018
+97 439 -1.4126
+98 439 -3.814
+107 439 -11.7448
+108 439 -10.7963
+120 439 -.0172
+122 439 -.008
+180 439 -.00504
+3 440 -1
+9 440 1
+44 440 -.152
+62 440 -.143
+69 440 -.046
+70 440 -.105
+71 440 -.065
+72 440 -.065
+84 440 -.255
+86 440 2.274
+96 440 -.1388
+97 440 -.9716
+98 440 -4.2334
+107 440 -9.6882
+108 440 -7.423
+120 440 -.0162
+122 440 -.005
+180 440 -.00504
+219 440 1
+3 441 -1
+9 441 1
+16 441 -.05
+61 441 -.245
+62 441 -.245
+70 441 -.1
+71 441 -.065
+72 441 -.065
+84 441 -.255
+86 441 2.274
+96 441 -.1938
+97 441 -1.3566
+98 441 -3.9148
+107 441 -9.1474
+108 441 -10.144
+120 441 -.0122
+122 441 -.005
+180 441 -.00504
+219 441 1
+3 442 -1
+9 442 1
+17 442 -.0777
+18 442 -.136
+65 442 -.12
+69 442 -.027
+70 442 -.105
+71 442 -.065
+72 442 -.065
+84 442 -.255
+86 442 2.274
+96 442 -.2015
+97 442 -1.4105
+98 442 -3.9091
+107 442 -9.1481
+108 442 -10.4982
+120 442 -.0115
+122 442 -.005
+180 442 -.00504
+219 442 1
+3 443 -1
+9 443 1
+37 443 -.1
+62 443 -.07
+69 443 -.082
+70 443 -.105
+71 443 -.065
+72 443 -.065
+84 443 -.255
+86 443 2.274
+96 443 -.2377
+97 443 -1.6639
+98 443 -4.5638
+107 443 -8.9851
+108 443 -12.2986
+120 443 -.0063
+122 443 -.005
+180 443 -.00504
+219 443 1
+7 444 1
+10 444 1
+17 444 -.1343
+18 444 -.235
+62 444 -.09
+73 444 -.087
+74 444 -.146
+84 444 -.14
+86 444 .5247
+96 444 -.2755
+97 444 -1.9285
+98 444 -5.2345
+107 444 -6.9977
+108 444 -14.5023
+120 444 -.0125
+122 444 -.009
+180 444 -.0028
+3 445 -1
+9 445 1
+25 445 -.11
+62 445 -.129
+69 445 -.052
+70 445 -.105
+71 445 -.065
+72 445 -.065
+84 445 -.255
+86 445 2.274
+96 445 -.1928
+97 445 -1.3494
+98 445 -3.8946
+107 445 -9.1474
+108 445 -10.0719
+120 445 -.0122
+122 445 -.005
+180 445 -.00504
+219 445 1
+4 446 1
+10 446 1
+17 446 -.1293
+18 446 -.19
+62 446 -.15
+73 446 -.077
+74 446 -.193
+84 446 -.16
+86 446 1.589
+96 446 -.2165
+97 446 -1.5155
+98 446 -6.5167
+107 446 -13.8127
+108 446 -11.6585
+120 446 -.0095
+122 446 -.002
+180 446 -.00112
+3 447 -1
+9 447 1
+62 447 -.28
+70 447 -.082
+71 447 -.065
+72 447 -.065
+84 447 -.255
+86 447 2.274
+96 447 -.1429
+97 447 -1.0003
+98 447 -4.2156
+99 447 -.08
+107 447 -9.7029
+108 447 -7.638
+120 447 -.0161
+122 447 -.005
+180 447 -.00504
+219 447 1
+1 448 1
+10 448 1
+30 448 -.4248
+31 448 .2832
+32 448 -.177
+74 448 -.2
+84 448 -.16
+86 448 1.5197
+96 448 -.1792
+97 448 -1.2544
+98 448 -3.7811
+107 448 -10.4474
+108 448 -9.3901
+120 448 -.0048
+122 448 -.001
+180 448 -.00168
+1 449 1
+10 449 1
+17 449 -.1143
+18 449 -.2
+62 449 -.104
+73 449 -.108
+74 449 -.2
+84 449 -.16
+86 449 1.52
+96 449 -.2232
+97 449 -1.5624
+98 449 -4.955
+107 449 -9.7315
+108 449 -11.5484
+120 449 -.0008
+122 449 -.001
+180 449 -.00168
+2 450 1
+10 450 1
+17 450 -.1086
+18 450 -.19
+62 450 -.09
+73 450 -.092
+74 450 -.187
+84 450 -.21
+86 450 1.4839
+96 450 -.1964
+97 450 -1.3748
+98 450 -4.8511
+107 450 -11.8036
+108 450 -10.531
+120 450 -.0176
+122 450 -.008
+180 450 -.00504
+2 451 1
+10 451 1
+30 451 -.3984
+31 451 .2656
+32 451 -.166
+62 451 -.094
+73 451 -.045
+74 451 -.283
+84 451 -.21
+86 451 1.4839
+96 451 -.146
+97 451 -1.022
+98 451 -6.5846
+107 451 -12.2932
+108 451 -7.976
+120 451 -.021
+122 451 -.008
+180 451 -.00504
+11 452 .114
+30 452 -.3504
+31 452 .2336
+32 452 -.146
+62 452 -.124
+75 452 -.118
+84 452 -.493
+86 452 3.436
+96 452 -.1089
+97 452 -.7623
+98 452 -2.5918
+107 452 -7.2527
+108 452 -6.0178
+120 452 -.0061
+122 452 -.003
+180 452 -.00056
+214 452 1
+7 453 1
+11 453 .118
+17 453 -.1343
+18 453 -.235
+62 453 -.09
+75 453 -.12
+84 453 -.253
+86 453 -.28
+96 453 -.2756
+97 453 -1.9292
+98 453 -5.264
+107 453 -7.0278
+108 453 -14.5076
+120 453 -.0124
+122 453 -.009
+180 453 -.0028
+7 454 1
+11 454 .139
+17 454 -.1343
+18 454 -.235
+62 454 -.09
+75 454 -.203
+84 454 -.17
+86 454 .3468
+96 454 -.2755
+97 454 -1.9285
+98 454 -4.408
+107 454 -6.9977
+108 454 -14.5023
+120 454 -.0125
+122 454 -.009
+180 454 -.0028
+1 455 1
+11 455 .111
+30 455 -.4248
+31 455 .2832
+32 455 -.177
+62 455 -.23
+75 455 -.045
+84 455 -.36
+86 455 .3341
+96 455 -.1792
+97 455 -1.2544
+98 455 -3.7811
+107 455 -10.4474
+108 455 -9.3901
+120 455 -.0048
+122 455 -.001
+180 455 -.00168
+2 456 1
+11 456 .111
+17 456 -.1086
+18 456 -.19
+62 456 -.09
+75 456 -.099
+84 456 -.39
+86 456 1.5031
+96 456 -.1964
+97 456 -1.3748
+98 456 -4.8511
+107 456 -11.8036
+108 456 -10.531
+120 456 -.0176
+122 456 -.008
+180 456 -.00504
+2 457 1
+11 457 .111
+30 457 -.3984
+31 457 .2656
+32 457 -.166
+62 457 -.094
+75 457 -.148
+84 457 -.39
+86 457 1.5031
+96 457 -.146
+97 457 -1.022
+98 457 -6.5846
+107 457 -12.2932
+108 457 -7.976
+120 457 -.021
+122 457 -.008
+180 457 -.00504
+3 458 -1
+10 458 1
+62 458 -.28
+74 458 -.212
+84 458 -.255
+86 458 .2274
+96 458 -.1429
+97 458 -1.0003
+98 458 -4.2156
+99 458 -.08
+107 458 -9.7029
+108 458 -7.638
+120 458 -.0161
+122 458 -.005
+180 458 -.00504
+219 458 1
+3 459 -1
+11 459 .114
+37 459 -.1
+62 459 -.07
+75 459 -.12
+84 459 -.452
+86 459 .786
+96 459 -.2377
+97 459 -1.6639
+98 459 -4.5638
+107 459 -8.9851
+108 459 -12.2986
+120 459 -.0063
+122 459 -.005
+180 459 -.00504
+219 459 1
+3 460 -1
+11 460 .139
+37 460 -.1
+62 460 -.07
+75 460 -.242
+84 460 -.33
+86 460 2.897
+96 460 -.2377
+97 460 -1.6639
+98 460 -4.5638
+107 460 -8.9851
+108 460 -12.2986
+120 460 -.0063
+122 460 -.005
+180 460 -.00504
+219 460 1
+3 461 -1
+11 461 .116
+25 461 -.11
+62 461 -.129
+75 461 -.142
+84 461 -.4
+86 461 1.249
+96 461 -.1928
+97 461 -1.3496
+98 461 -3.8946
+107 461 -9.1474
+108 461 -10.0719
+120 461 -.0122
+122 461 -.005
+180 461 -.00504
+219 461 1
+3 462 -1
+11 462 .139
+25 462 -.11
+62 462 -.129
+75 462 -.212
+84 462 -.33
+86 462 2.897
+96 462 -.1928
+97 462 -1.3496
+98 462 -3.8946
+107 462 -9.1002
+108 462 -10.0719
+120 462 -.0122
+122 462 -.005
+180 462 -.00504
+219 462 1
+3 463 -1
+11 463 .118
+62 463 -.25
+75 463 -.06
+84 463 -.437
+86 463 .955
+96 463 -.1429
+97 463 -1.0003
+98 463 -4.2156
+99 463 -.08
+107 463 -9.7029
+108 463 -7.638
+120 463 -.0161
+122 463 -.005
+180 463 -.00504
+219 463 1
+3 464 -1
+11 464 .139
+62 464 -.25
+75 464 -.167
+84 464 -.33
+86 464 2.897
+96 464 -.1429
+97 464 -1.0003
+98 464 -4.2156
+99 464 -.08
+107 464 -9.7029
+108 464 -7.638
+120 464 -.0161
+122 464 -.005
+180 464 -.00504
+219 464 1
+3 465 -1
+9 465 1
+30 465 -.3648
+31 465 .2432
+32 465 -.152
+62 465 -.143
+69 465 -.046
+70 465 -.105
+71 465 -.065
+72 465 -.065
+84 465 -.255
+86 465 2.274
+96 465 -.1388
+97 465 -.9716
+98 465 -4.2334
+107 465 -9.6882
+108 465 -7.43
+120 465 -.0162
+122 465 -.005
+180 465 -.00504
+219 465 1
+3 466 -1
+10 466 1
+30 466 -.3648
+31 466 .2432
+32 466 -.152
+62 466 -.143
+73 466 -.096
+74 466 -.185
+84 466 -.255
+86 466 2.274
+96 466 -.1388
+97 466 -.9716
+98 466 -4.2334
+107 466 -9.6882
+108 466 -7.43
+120 466 -.0162
+122 466 -.005
+180 466 -.00504
+219 466 1
+3 467 -1
+11 467 .114
+30 467 -.3648
+31 467 .2432
+32 467 -.152
+62 467 -.143
+75 467 -.12
+84 467 -.416
+86 467 1.192
+96 467 -.1388
+97 467 -.9716
+98 467 -4.2334
+107 467 -9.6882
+108 467 -7.43
+120 467 -.0162
+122 467 -.005
+180 467 -.00504
+219 467 1
+3 468 -1
+11 468 .118
+17 468 -.0777
+18 468 -.136
+62 468 -.117
+75 468 -.11
+84 468 -.41
+86 468 1.216
+96 468 -.2015
+97 468 -1.4105
+98 468 -3.9091
+107 468 -9.1481
+108 468 -10.4982
+120 468 -.0115
+122 468 -.005
+180 468 -.00504
+219 468 1
+3 469 -1
+11 469 .139
+30 469 -.3648
+31 469 .2432
+32 469 -.152
+62 469 -.143
+75 469 -.206
+84 469 -.33
+86 469 2.897
+96 469 -.1388
+97 469 -.9716
+98 469 -4.2334
+107 469 -9.6882
+108 469 -7.43
+120 469 -.0162
+122 469 -.005
+180 469 -.00504
+219 469 1
+3 470 -1
+11 470 .139
+17 470 -.0777
+18 470 -.136
+62 470 -.117
+75 470 -.19
+84 470 -.33
+86 470 2.897
+96 470 -.2015
+97 470 -1.4105
+98 470 -3.9091
+107 470 -9.1481
+108 470 -10.4982
+120 470 -.0115
+122 470 -.005
+180 470 -.00504
+219 470 1
+96 471 1
+97 471 1.1
+98 471 -30
+107 471 -7.4
+108 471 48.08
+112 471 .534
+115 471 .534
+215 471 -1
+54 472 -1.25
+84 472 -.03
+86 472 -.4092
+180 472 -.246
+215 472 1
+216 472 1
+217 472 1
+218 472 -.62
diff --git a/SPQR/Matrix/lp_e226_transposed.mtx b/SPQR/Matrix/lp_e226_transposed.mtx
new file mode 100644
index 0000000..3612def
--- /dev/null
+++ b/SPQR/Matrix/lp_e226_transposed.mtx
@@ -0,0 +1,2770 @@
+%%MatrixMarket matrix coordinate real general
+472 223 2768
+1 1 1
+203 1 -1
+414 1 1
+423 1 1
+428 1 1
+433 1 1
+435 1 1
+438 1 1
+448 1 1
+449 1 1
+455 1 1
+408 2 1
+415 2 1
+419 2 1
+425 2 1
+429 2 1
+436 2 1
+439 2 1
+450 2 1
+451 2 1
+456 2 1
+457 2 1
+2 3 1
+411 3 -1
+412 3 -1
+424 3 -1
+426 3 -1
+440 3 -1
+441 3 -1
+442 3 -1
+443 3 -1
+445 3 -1
+447 3 -1
+458 3 -1
+459 3 -1
+460 3 -1
+461 3 -1
+462 3 -1
+463 3 -1
+464 3 -1
+465 3 -1
+466 3 -1
+467 3 -1
+468 3 -1
+469 3 -1
+470 3 -1
+205 4 -.04
+407 4 1
+421 4 1
+430 4 1
+431 4 1
+432 4 1
+437 4 1
+446 4 1
+406 5 1
+422 6 1
+420 7 1
+427 7 1
+444 7 1
+453 7 1
+454 7 1
+3 8 1
+409 8 .746
+410 8 1.111
+413 8 .746
+416 8 .746
+417 8 1.111
+418 8 .746
+4 9 1
+440 9 1
+441 9 1
+442 9 1
+443 9 1
+445 9 1
+447 9 1
+465 9 1
+5 10 1
+408 10 1
+420 10 1
+421 10 1
+422 10 1
+423 10 1
+425 10 1
+426 10 1
+428 10 1
+429 10 1
+444 10 1
+446 10 1
+448 10 1
+449 10 1
+450 10 1
+451 10 1
+458 10 1
+466 10 1
+6 11 1
+414 11 .111
+415 11 .111
+419 11 .111
+424 11 .132
+427 11 .118
+430 11 .111
+431 11 .118
+432 11 .139
+433 11 .111
+434 11 .114
+435 11 .111
+436 11 .111
+437 11 .115
+438 11 .111
+439 11 .111
+452 11 .114
+453 11 .118
+454 11 .139
+455 11 .111
+456 11 .111
+457 11 .111
+459 11 .114
+460 11 .139
+461 11 .116
+462 11 .139
+463 11 .118
+464 11 .139
+467 11 .114
+468 11 .118
+469 11 .139
+470 11 .139
+7 12 1
+406 12 1
+407 12 1
+411 12 1
+8 13 1
+412 13 1
+9 14 1
+377 14 .92
+10 15 1
+377 15 1
+11 16 1
+377 16 1
+441 16 -.05
+216 17 1
+420 17 -.1343
+421 17 -.1293
+423 17 -.1143
+425 17 -.1086
+427 17 -.1229
+431 17 -.0983
+432 17 -.0983
+433 17 -.1143
+442 17 -.0777
+444 17 -.1343
+446 17 -.1293
+449 17 -.1143
+450 17 -.1086
+453 17 -.1343
+454 17 -.1343
+456 17 -.1086
+468 17 -.0777
+470 17 -.0777
+12 18 1
+221 18 1.25
+420 18 -.235
+421 18 -.19
+423 18 -.2
+425 18 -.19
+427 18 -.215
+431 18 -.172
+432 18 -.172
+433 18 -.2
+442 18 -.136
+444 18 -.235
+446 18 -.19
+449 18 -.2
+450 18 -.19
+453 18 -.235
+454 18 -.235
+456 18 -.19
+468 18 -.136
+470 18 -.136
+196 19 1
+426 19 -.0777
+430 19 -.1086
+13 20 1
+202 20 1
+426 20 -.11152
+430 20 -.1558
+14 21 1
+221 21 1
+15 22 1
+202 22 1
+194 23 1
+424 23 -.7
+16 24 1
+200 24 1
+424 24 -.196
+17 25 1
+227 25 1
+228 25 1
+233 25 -1
+408 25 -.135
+419 25 -.116
+428 25 -.141
+429 25 -.135
+438 25 -.141
+439 25 -.135
+445 25 -.11
+461 25 -.11
+462 25 -.11
+18 26 1
+228 26 1
+19 27 1
+228 27 -.2
+233 27 1
+20 28 1
+231 28 1
+233 28 1
+416 28 -.15
+417 28 -.15
+418 28 -.15
+21 29 1
+229 29 1
+22 30 1
+402 30 3.6
+403 30 4.6
+404 30 5.6
+448 30 -.4248
+451 30 -.3984
+452 30 -.3504
+455 30 -.4248
+457 30 -.3984
+465 30 -.3648
+466 30 -.3648
+467 30 -.3648
+469 30 -.3648
+23 31 1
+402 31 -4.4
+403 31 -5.4
+404 31 -6.4
+448 31 .2832
+451 31 .2656
+452 31 .2336
+455 31 .2832
+457 31 .2656
+465 31 .2432
+466 31 .2432
+467 31 .2432
+469 31 .2432
+24 32 1
+229 32 1
+232 32 1
+402 32 -1
+403 32 -1
+404 32 -1
+448 32 -.177
+451 32 -.166
+452 32 -.146
+455 32 -.177
+457 32 -.166
+465 32 -.152
+466 32 -.152
+467 32 -.152
+469 32 -.152
+25 33 1
+232 33 1.062
+26 34 1
+379 34 1
+27 35 1
+232 35 .0638
+304 35 1
+379 35 -.7
+28 36 1
+200 36 -.4286
+202 36 -.2195
+221 36 -.25
+305 36 1
+379 36 1
+219 37 1
+231 37 -1
+414 37 -.126
+415 37 -.116
+435 37 -.126
+436 37 -.116
+443 37 -.1
+459 37 -.1
+460 37 -.1
+29 38 1
+219 38 -.5
+231 38 1
+30 39 1
+219 39 1
+31 40 1
+200 40 1
+32 41 1
+211 41 1
+219 41 1
+227 41 1
+228 41 1
+229 41 1
+231 41 -1
+232 41 1
+233 41 -1
+235 41 1
+402 41 -1
+403 41 -1
+404 41 -1
+33 42 1
+206 42 .362
+211 42 -1
+222 42 1
+230 42 1
+34 43 1
+206 43 1
+35 44 1
+206 44 .362
+440 44 -.152
+36 45 1
+206 45 .829
+234 45 -11.055
+37 46 1
+194 46 1
+196 46 1
+216 46 1
+38 47 1
+197 47 2.857
+206 47 2.127
+39 48 1
+410 48 -.205
+417 48 -.205
+40 49 1
+409 49 -.29
+416 49 -.29
+41 50 1
+413 50 -.29
+418 50 -.29
+42 51 1
+413 51 -.03
+418 51 -.03
+43 52 1
+349 52 2.63
+44 53 1
+197 53 .984
+245 53 .982
+45 54 1
+223 54 1
+224 54 1
+357 54 -5.7
+358 54 -5.05
+359 54 -5.38
+360 54 -5.7
+361 54 -5.7
+362 54 -5.47
+363 54 -6.13
+364 54 -6.79
+365 54 -5.8
+366 54 -6.51
+367 54 -7.21
+368 54 -5.05
+369 54 -5.38
+370 54 -5.7
+371 54 -7.45
+372 54 -7.92
+373 54 -5.7
+472 54 -1.25
+46 55 1
+223 55 1
+47 56 1
+224 56 1
+48 57 1
+223 57 -1.667
+224 57 -1.367
+244 57 8.33
+245 57 10
+49 58 1
+244 58 1
+50 59 1
+244 59 1.483
+248 59 -1
+51 60 1
+197 60 1
+245 60 1
+249 60 -1
+52 61 1
+248 61 1
+441 61 -.245
+53 62 1
+247 62 1
+248 62 1
+249 62 .7763
+276 62 1
+348 62 1
+406 62 -.34
+407 62 -.34
+409 62 -.238
+410 62 -.238
+411 62 -.28
+412 62 -.28
+413 62 -.238
+416 62 -.088
+417 62 -.088
+418 62 -.088
+422 62 -.299
+428 62 -.212
+429 62 -.216
+430 62 -.15
+434 62 -.252
+435 62 -.164
+436 62 -.11
+437 62 -.306
+438 62 -.212
+439 62 -.216
+440 62 -.143
+441 62 -.245
+443 62 -.07
+444 62 -.09
+445 62 -.129
+446 62 -.15
+447 62 -.28
+449 62 -.104
+450 62 -.09
+451 62 -.094
+452 62 -.124
+453 62 -.09
+454 62 -.09
+455 62 -.23
+456 62 -.09
+457 62 -.094
+458 62 -.28
+459 62 -.07
+460 62 -.07
+461 62 -.129
+462 62 -.129
+463 62 -.25
+464 62 -.25
+465 62 -.143
+466 62 -.143
+467 62 -.143
+468 62 -.117
+469 62 -.143
+470 62 -.117
+54 63 1
+247 63 1
+55 64 1
+220 64 1
+56 65 1
+220 65 1
+264 65 1
+314 65 1
+408 65 -.266
+409 65 -.035
+410 65 -.035
+413 65 -.035
+414 65 -.222
+415 65 -.16
+416 65 -.035
+417 65 -.035
+418 65 -.035
+419 65 -.306
+420 65 -.115
+421 65 -.19
+423 65 -.16
+425 65 -.14
+426 65 -.12
+427 65 -.155
+431 65 -.216
+432 65 -.216
+433 65 -.16
+442 65 -.12
+57 66 1
+348 66 -1
+412 66 .28
+251 67 -1
+253 67 -1
+255 67 -1
+256 67 -1
+257 67 -1
+258 67 -1
+259 67 -1
+260 67 -1
+261 67 -1
+262 67 -1
+264 67 -1
+268 67 -1
+276 67 -1
+291 67 1
+349 67 -.33
+58 68 1
+253 68 1
+303 68 1
+59 69 1
+257 69 1
+308 69 1
+440 69 -.046
+442 69 -.027
+443 69 -.082
+445 69 -.052
+465 69 -.046
+60 70 1
+258 70 1
+309 70 1
+440 70 -.105
+441 70 -.1
+442 70 -.105
+443 70 -.105
+445 70 -.105
+447 70 -.082
+465 70 -.105
+61 71 1
+259 71 1
+310 71 1
+440 71 -.065
+441 71 -.065
+442 71 -.065
+443 71 -.065
+445 71 -.065
+447 71 -.065
+465 71 -.065
+62 72 1
+260 72 1
+311 72 1
+440 72 -.065
+441 72 -.065
+442 72 -.065
+443 72 -.065
+445 72 -.065
+447 72 -.065
+465 72 -.065
+63 73 1
+261 73 1
+312 73 1
+420 73 -.062
+421 73 -.037
+422 73 -.05
+423 73 -.052
+425 73 -.042
+426 73 -.08
+428 73 -.054
+429 73 -.015
+444 73 -.087
+446 73 -.077
+449 73 -.108
+450 73 -.092
+451 73 -.045
+466 73 -.096
+64 74 1
+262 74 1
+313 74 1
+408 74 -.152
+420 74 -.146
+421 74 -.193
+422 74 -.175
+423 74 -.2
+425 74 -.187
+426 74 -.182
+428 74 -.2
+429 74 -.187
+444 74 -.146
+446 74 -.193
+448 74 -.2
+449 74 -.2
+450 74 -.187
+451 74 -.283
+458 74 -.212
+466 74 -.185
+65 75 1
+268 75 1
+340 75 1
+414 75 -.019
+415 75 -.025
+424 75 -.06
+427 75 -.075
+430 75 -.075
+431 75 -.035
+432 75 -.118
+433 75 -.052
+434 75 -.081
+435 75 -.077
+436 75 -.075
+437 75 -.066
+438 75 -.054
+439 75 -.022
+452 75 -.118
+453 75 -.12
+454 75 -.203
+455 75 -.045
+456 75 -.099
+457 75 -.148
+459 75 -.12
+460 75 -.242
+461 75 -.142
+462 75 -.212
+463 75 -.06
+464 75 -.167
+467 75 -.12
+468 75 -.11
+469 75 -.206
+470 75 -.19
+234 76 24.476
+243 76 17.372
+249 76 4.401
+272 76 1
+286 76 -.7977
+288 76 .152
+289 76 .6075
+291 76 -7.383
+234 77 1
+243 77 1
+249 77 .2237
+271 77 1
+289 77 .05
+291 77 -.4
+66 78 1
+255 78 1
+306 78 1
+409 78 -.242
+410 78 -.237
+413 78 -.26
+416 78 -.242
+417 78 -.237
+418 78 -.26
+67 79 1
+256 79 1
+307 79 1
+409 79 -.048
+410 79 -.138
+413 79 -.03
+416 79 -.048
+417 79 -.138
+418 79 -.03
+68 80 1
+299 80 1
+69 81 1
+300 81 1
+70 82 1
+301 82 1
+71 83 1
+302 83 1
+269 84 1
+271 84 -1
+296 84 -1
+297 84 -1
+298 84 -1
+299 84 1
+300 84 1
+301 84 1
+302 84 1
+303 84 -1
+304 84 -1
+305 84 -1
+306 84 -1
+307 84 -1
+308 84 -1
+309 84 -1
+310 84 -1
+311 84 -1
+312 84 -1
+313 84 -1
+314 84 -1
+329 84 1
+340 84 -1
+348 84 -1
+349 84 .33
+354 84 -.033
+355 84 -.0059
+357 84 -.01
+358 84 -.005
+359 84 -.005
+360 84 -.01
+361 84 -.01
+362 84 -.005
+363 84 -.01
+364 84 -.01
+365 84 -.052
+366 84 -.057
+367 84 -.081
+368 84 -.005
+369 84 -.005
+370 84 -.01
+371 84 -.015
+372 84 -.086
+373 84 -.01
+406 84 -.366
+407 84 -.366
+408 84 -.21
+409 84 -.29
+410 84 -.205
+411 84 -.467
+412 84 -.467
+413 84 -.29
+414 84 -.36
+415 84 -.39
+416 84 -.29
+417 84 -.205
+418 84 -.29
+419 84 -.342
+420 84 -.14
+421 84 -.16
+422 84 -.18
+423 84 -.16
+424 84 -.437
+425 84 -.21
+426 84 -.255
+427 84 -.253
+428 84 -.16
+429 84 -.21
+430 84 -.355
+431 84 -.323
+432 84 -.24
+433 84 -.36
+434 84 -.493
+435 84 -.36
+436 84 -.39
+437 84 -.334
+438 84 -.36
+439 84 -.39
+440 84 -.255
+441 84 -.255
+442 84 -.255
+443 84 -.255
+444 84 -.14
+445 84 -.255
+446 84 -.16
+447 84 -.255
+448 84 -.16
+449 84 -.16
+450 84 -.21
+451 84 -.21
+452 84 -.493
+453 84 -.253
+454 84 -.17
+455 84 -.36
+456 84 -.39
+457 84 -.39
+458 84 -.255
+459 84 -.452
+460 84 -.33
+461 84 -.4
+462 84 -.33
+463 84 -.437
+464 84 -.33
+465 84 -.255
+466 84 -.255
+467 84 -.416
+468 84 -.41
+469 84 -.33
+470 84 -.33
+472 84 -.03
+269 85 1
+272 86 -1
+296 86 -20.051
+297 86 -15.911
+298 86 -5.395
+299 86 7.925
+300 86 3.117
+301 86 1.954
+302 86 -1.117
+303 86 -6.192
+304 86 -27.4598
+305 86 -28.869
+306 86 -6.248
+307 86 -2.346
+308 86 -15.619
+309 86 -9.972
+310 86 -5.883
+311 86 -.923
+312 86 -15.292
+313 86 -9.503
+314 86 -15.911
+340 86 -13.855
+348 86 -20.051
+349 86 .49
+354 86 -.007
+355 86 -.114
+357 86 -.151
+358 86 -.076
+359 86 -.076
+360 86 -.151
+361 86 -.151
+362 86 -.076
+363 86 -.151
+364 86 -.151
+365 86 -.786
+366 86 -.861
+367 86 -1.224
+368 86 -.076
+369 86 -.076
+370 86 -.151
+371 86 -.227
+372 86 -1.299
+373 86 -.151
+406 86 -.091
+407 86 -.9088
+408 86 1.4839
+409 86 3.69
+410 86 2.714
+411 86 .601
+412 86 .601
+413 86 3.69
+414 86 .3341
+415 86 .0148
+416 86 3.69
+417 86 2.724
+418 86 3.69
+419 86 .5595
+420 86 .5247
+421 86 1.589
+422 86 1.787
+423 86 1.5197
+424 86 1.0927
+425 86 1.484
+426 86 2.274
+427 86 -.3722
+428 86 1.5197
+429 86 1.4839
+430 86 .5765
+431 86 .435
+432 86 1.6186
+433 86 .3341
+434 86 3.436
+435 86 .3341
+436 86 .0148
+437 86 .346
+438 86 .3341
+439 86 .0148
+440 86 2.274
+441 86 2.274
+442 86 2.274
+443 86 2.274
+444 86 .5247
+445 86 2.274
+446 86 1.589
+447 86 2.274
+448 86 1.5197
+449 86 1.52
+450 86 1.4839
+451 86 1.4839
+452 86 3.436
+453 86 -.28
+454 86 .3468
+455 86 .3341
+456 86 1.5031
+457 86 1.5031
+458 86 .2274
+459 86 .786
+460 86 2.897
+461 86 1.249
+462 86 2.897
+463 86 .955
+464 86 2.897
+465 86 2.274
+466 86 2.274
+467 86 1.192
+468 86 1.216
+469 86 2.897
+470 86 2.897
+472 86 -.4092
+72 87 1
+252 87 1
+73 88 1
+207 88 1
+74 89 1
+199 89 1
+75 90 1
+207 90 -.25
+254 90 1
+76 91 1
+207 91 .12
+254 91 -1
+77 92 1
+252 92 1
+254 92 1
+78 93 1
+199 93 1
+207 93 1
+250 93 -1
+254 93 -1
+79 94 1
+199 94 1
+207 94 1
+252 94 1
+80 95 1
+263 95 1
+356 96 1
+374 96 -1
+375 96 -1
+376 96 1
+377 96 -.08
+378 96 -1
+379 96 -.3
+380 96 1
+381 96 -1
+382 96 1
+383 96 1
+384 96 1
+385 96 1
+386 96 1
+387 96 1
+388 96 1
+389 96 1
+390 96 1
+391 96 1
+392 96 1
+393 96 1
+394 96 1
+395 96 1
+396 96 1
+397 96 1
+398 96 1
+399 96 1
+400 96 1
+401 96 1
+402 96 1
+403 96 1
+404 96 1
+405 96 1
+406 96 -.2857
+407 96 -.2856
+408 96 -.2018
+409 96 -.1292
+410 96 -.1292
+411 96 -.2321
+412 96 -.2321
+413 96 -.1292
+414 96 -.2729
+415 96 -.2847
+416 96 -.1292
+417 96 -.1292
+418 96 -.1292
+419 96 -.2018
+420 96 -.2755
+421 96 -.2165
+422 96 -.1965
+423 96 -.2232
+424 96 -.1429
+425 96 -.1963
+426 96 -.2015
+427 96 -.2755
+428 96 -.2286
+429 96 -.2018
+430 96 -.2165
+431 96 -.2424
+432 96 -.2421
+433 96 -.2232
+434 96 -.1409
+435 96 -.2729
+436 96 -.2847
+437 96 -.1882
+438 96 -.2286
+439 96 -.2018
+440 96 -.1388
+441 96 -.1938
+442 96 -.2015
+443 96 -.2377
+444 96 -.2755
+445 96 -.1928
+446 96 -.2165
+447 96 -.1429
+448 96 -.1792
+449 96 -.2232
+450 96 -.1964
+451 96 -.146
+452 96 -.1089
+453 96 -.2756
+454 96 -.2755
+455 96 -.1792
+456 96 -.1964
+457 96 -.146
+458 96 -.1429
+459 96 -.2377
+460 96 -.2377
+461 96 -.1928
+462 96 -.1928
+463 96 -.1429
+464 96 -.1429
+465 96 -.1388
+466 96 -.1388
+467 96 -.1388
+468 96 -.2015
+469 96 -.1388
+470 96 -.2015
+471 96 1
+292 97 1
+374 97 -8.5
+375 97 -.9
+376 97 64
+377 97 -.856
+378 97 -15
+380 97 8.5
+381 97 -.9
+382 97 2.2
+383 97 1.1
+384 97 11
+385 97 64
+386 97 15
+387 97 2.2
+388 97 1.1
+389 97 .9
+390 97 8.5
+391 97 11
+392 97 2.2
+393 97 1.1
+394 97 8.5
+395 97 64
+396 97 15
+397 97 11
+398 97 2.2
+399 97 1.1
+400 97 .9
+401 97 8.5
+402 97 6
+403 97 7
+404 97 8
+405 97 10.7
+406 97 -1.9999
+407 97 -1.9992
+408 97 -1.4126
+409 97 -.9044
+410 97 -.9044
+411 97 -1.6247
+412 97 -1.6247
+413 97 -.9044
+414 97 -1.9103
+415 97 -1.9929
+416 97 -.9044
+417 97 -.9044
+418 97 -.9044
+419 97 -1.4126
+420 97 -1.9285
+421 97 -1.5155
+422 97 -1.3755
+423 97 -1.5624
+424 97 -1.0003
+425 97 -1.3741
+426 97 -1.4105
+427 97 -1.9285
+428 97 -1.6002
+429 97 -1.4126
+430 97 -1.5155
+431 97 -1.6968
+432 97 -1.6947
+433 97 -1.5624
+434 97 -.9863
+435 97 -1.9103
+436 97 -1.9929
+437 97 -1.3174
+438 97 -1.6002
+439 97 -1.4126
+440 97 -.9716
+441 97 -1.3566
+442 97 -1.4105
+443 97 -1.6639
+444 97 -1.9285
+445 97 -1.3494
+446 97 -1.5155
+447 97 -1.0003
+448 97 -1.2544
+449 97 -1.5624
+450 97 -1.3748
+451 97 -1.022
+452 97 -.7623
+453 97 -1.9292
+454 97 -1.9285
+455 97 -1.2544
+456 97 -1.3748
+457 97 -1.022
+458 97 -1.0003
+459 97 -1.6639
+460 97 -1.6639
+461 97 -1.3496
+462 97 -1.3496
+463 97 -1.0003
+464 97 -1.0003
+465 97 -.9716
+466 97 -.9716
+467 97 -.9716
+468 97 -1.4105
+469 97 -.9716
+470 97 -1.4105
+471 97 1.1
+293 98 1
+374 98 -62.5
+375 98 16
+376 98 115
+377 98 -3.72
+378 98 -100
+379 98 6.3
+380 98 62.5
+381 98 16
+382 98 -16
+383 98 -30
+384 98 94
+385 98 115
+386 98 100
+387 98 -16
+388 98 -30
+389 98 -16
+390 98 62.5
+391 98 94
+392 98 -16
+393 98 -30
+394 98 62.5
+395 98 115
+396 98 100
+397 98 94
+398 98 -16
+399 98 -30
+400 98 -16
+401 98 62.5
+402 98 26
+403 98 27.5
+404 98 29
+405 98 46.5
+406 98 -5.3997
+407 98 -5.3978
+408 98 -3.814
+409 98 -2.1189
+410 98 -2.1189
+411 98 -4.4099
+412 98 -4.4099
+413 98 -2.1189
+414 98 -3.8479
+415 98 -3.8435
+416 98 -2.1189
+417 98 -2.1189
+418 98 -2.1189
+419 98 -3.814
+420 98 -5.2345
+421 98 -6.5167
+422 98 -5.8164
+423 98 -6.071
+424 98 -4.2156
+425 98 -4.829
+426 98 -3.9091
+427 98 -5.2345
+428 98 -3.7033
+429 98 -3.814
+430 98 -6.6249
+431 98 -6.3266
+432 98 -6.3914
+433 98 -6.071
+434 98 -2.8462
+435 98 -3.8479
+436 98 -3.8435
+437 98 -6.7376
+438 98 -3.7033
+439 98 -3.814
+440 98 -4.2334
+441 98 -3.9148
+442 98 -3.9091
+443 98 -4.5638
+444 98 -5.2345
+445 98 -3.8946
+446 98 -6.5167
+447 98 -4.2156
+448 98 -3.7811
+449 98 -4.955
+450 98 -4.8511
+451 98 -6.5846
+452 98 -2.5918
+453 98 -5.264
+454 98 -4.408
+455 98 -3.7811
+456 98 -4.8511
+457 98 -6.5846
+458 98 -4.2156
+459 98 -4.5638
+460 98 -4.5638
+461 98 -3.8946
+462 98 -3.8946
+463 98 -4.2156
+464 98 -4.2156
+465 98 -4.2334
+466 98 -4.2334
+467 98 -4.2334
+468 98 -3.9091
+469 98 -4.2334
+470 98 -3.9091
+471 98 -30
+81 99 1
+213 99 1
+230 99 1
+246 99 1
+381 99 1
+422 99 -.085
+424 99 -.08
+434 99 -.026
+437 99 -.09
+447 99 -.08
+458 99 -.08
+463 99 -.08
+464 99 -.08
+82 100 1
+354 100 1
+380 100 -.62
+384 100 -.419
+210 101 1
+380 101 -.38
+384 101 -.581
+83 102 1
+204 102 1
+354 102 1
+84 103 1
+210 103 -1
+242 103 1
+284 103 1
+345 103 1
+378 103 1
+210 104 -.1614
+376 104 1
+378 104 .1614
+85 105 1
+210 105 1.1614
+86 106 1
+210 106 1.1614
+354 106 1
+290 107 1
+374 107 -100
+375 107 20
+376 107 100
+377 107 -4.656
+378 107 -100
+379 107 6
+380 107 100
+381 107 20
+382 107 22.4
+383 107 -7.4
+384 107 100
+385 107 100
+386 107 100
+387 107 22.4
+388 107 -7.4
+389 107 -20
+390 107 100
+391 107 100
+392 107 22.4
+393 107 -7.4
+394 107 100
+395 107 100
+396 107 100
+397 107 100
+398 107 22.4
+399 107 -7.4
+400 107 -20
+401 107 100
+402 107 54
+403 107 54.8
+404 107 55.6
+405 107 58.2
+406 107 -11.5709
+407 107 -11.5382
+408 107 -11.7448
+409 107 -5.5427
+410 107 -5.5427
+411 107 -8.9823
+412 107 -8.9823
+413 107 -5.5427
+414 107 -8.9328
+415 107 -10.9325
+416 107 -5.5427
+417 107 -5.5427
+418 107 -5.5427
+419 107 -11.7448
+420 107 -6.9977
+421 107 -13.8127
+422 107 -12.3599
+423 107 -9.7315
+424 107 -9.7029
+425 107 -11.7976
+426 107 -9.1481
+427 107 -6.9977
+428 107 -9.5326
+429 107 -11.7448
+430 107 -13.8127
+431 107 -13.2108
+432 107 -13.1702
+433 107 -9.7315
+434 107 -7.045
+435 107 -8.9238
+436 107 -10.9325
+437 107 -14.2279
+438 107 -9.5326
+439 107 -11.7448
+440 107 -9.6882
+441 107 -9.1474
+442 107 -9.1481
+443 107 -8.9851
+444 107 -6.9977
+445 107 -9.1474
+446 107 -13.8127
+447 107 -9.7029
+448 107 -10.4474
+449 107 -9.7315
+450 107 -11.8036
+451 107 -12.2932
+452 107 -7.2527
+453 107 -7.0278
+454 107 -6.9977
+455 107 -10.4474
+456 107 -11.8036
+457 107 -12.2932
+458 107 -9.7029
+459 107 -8.9851
+460 107 -8.9851
+461 107 -9.1474
+462 107 -9.1002
+463 107 -9.7029
+464 107 -9.7029
+465 107 -9.6882
+466 107 -9.6882
+467 107 -9.6882
+468 107 -9.1481
+469 107 -9.6882
+470 107 -9.1481
+471 107 -7.4
+274 108 1
+374 108 -55.95
+375 108 -46.04
+376 108 64
+377 108 -4.4312
+378 108 -60.28
+379 108 -19.314
+380 108 55.95
+381 108 -46.04
+382 108 49.12
+383 108 48.08
+384 108 59
+385 108 64
+386 108 60.28
+387 108 49.12
+388 108 48.08
+389 108 46.04
+390 108 55.95
+391 108 59
+392 108 49.12
+393 108 48.08
+394 108 55.95
+395 108 64
+396 108 60.28
+397 108 59
+398 108 49.12
+399 108 48.08
+400 108 46.04
+401 108 55.95
+402 108 53.08
+403 108 53.27
+404 108 53.46
+405 108 55.39
+406 108 -15.105
+407 108 -15.105
+408 108 -10.7963
+409 108 -7.2107
+410 108 -7.2107
+411 108 -12.0181
+412 108 -12.0181
+413 108 -7.2107
+414 108 -13.9793
+415 108 -14.8044
+416 108 -7.2107
+417 108 -7.2107
+418 108 -7.2107
+419 108 -10.7963
+420 108 -14.5023
+421 108 -11.6585
+422 108 -10.5776
+423 108 -11.3765
+424 108 -7.638
+425 108 -10.5256
+426 108 -10.4982
+427 108 -14.5023
+428 108 -11.8026
+429 108 -10.7963
+430 108 -11.6585
+431 108 -12.9563
+432 108 -12.9378
+433 108 -11.3765
+434 108 -7.7143
+435 108 -13.9397
+436 108 -14.8044
+437 108 -10.2381
+438 108 -11.8026
+439 108 -10.7963
+440 108 -7.423
+441 108 -10.144
+442 108 -10.4982
+443 108 -12.2986
+444 108 -14.5023
+445 108 -10.0719
+446 108 -11.6585
+447 108 -7.638
+448 108 -9.3901
+449 108 -11.5484
+450 108 -10.531
+451 108 -7.976
+452 108 -6.0178
+453 108 -14.5076
+454 108 -14.5023
+455 108 -9.3901
+456 108 -10.531
+457 108 -7.976
+458 108 -7.638
+459 108 -12.2986
+460 108 -12.2986
+461 108 -10.0719
+462 108 -10.0719
+463 108 -7.638
+464 108 -7.638
+465 108 -7.43
+466 108 -7.43
+467 108 -7.43
+468 108 -10.4982
+469 108 -7.43
+470 108 -10.4982
+471 108 48.08
+87 109 1
+218 109 -1
+222 109 -1
+235 109 -1
+356 109 1
+385 109 1
+386 109 1
+387 109 1
+388 109 1
+389 109 1
+390 109 1
+395 109 1
+396 109 1
+397 109 1
+398 109 1
+399 109 1
+400 109 1
+401 109 1
+402 109 1
+403 109 1
+404 109 1
+405 109 1
+88 110 1
+218 110 1
+89 111 -1
+218 111 1
+90 112 1
+209 112 -.272
+383 112 .534
+384 112 .742
+471 112 .534
+91 113 1
+209 113 -.272
+380 113 .652
+384 113 .742
+92 114 1
+209 114 -.272
+380 114 .652
+382 114 .43
+93 115 1
+209 115 -.272
+382 115 .43
+383 115 .534
+471 115 .534
+94 116 1
+357 116 1
+368 116 1
+369 116 1
+370 116 1
+373 116 1
+382 116 -1
+95 117 1
+362 117 1
+363 117 1
+364 117 1
+371 117 1
+383 117 -1
+96 118 1
+213 118 -1
+365 118 1
+366 118 1
+367 118 1
+372 118 1
+97 119 1
+357 119 .4762
+358 119 .4673
+359 119 .4673
+360 119 .657
+361 119 1.2129
+362 119 .4673
+363 119 .4673
+364 119 .4932
+365 119 .4673
+366 119 .4673
+367 119 .5055
+368 119 .4673
+369 119 .4673
+370 119 .657
+371 119 1.1306
+372 119 .8789
+373 119 1.2129
+98 120 1
+250 120 1
+270 120 1
+294 120 1
+350 120 1
+352 120 1
+406 120 -.0043
+407 120 -.0044
+408 120 -.0172
+409 120 -.0058
+410 120 -.0058
+411 120 -.0069
+412 120 -.0069
+413 120 -.0058
+414 120 .0039
+415 120 -.0083
+416 120 -.0058
+417 120 -.0058
+418 120 -.0058
+419 120 -.0172
+420 120 -.0125
+421 120 -.0095
+422 120 -.0065
+423 120 -.0008
+424 120 -.0161
+425 120 -.0177
+426 120 -.0115
+427 120 -.0125
+428 120 -.0004
+429 120 -.0172
+430 120 -.0095
+431 120 -.0076
+432 120 -.0079
+433 120 -.0008
+434 120 -.0031
+435 120 .0039
+436 120 -.0083
+437 120 -.0118
+438 120 -.0004
+439 120 -.0172
+440 120 -.0162
+441 120 -.0122
+442 120 -.0115
+443 120 -.0063
+444 120 -.0125
+445 120 -.0122
+446 120 -.0095
+447 120 -.0161
+448 120 -.0048
+449 120 -.0008
+450 120 -.0176
+451 120 -.021
+452 120 -.0061
+453 120 -.0124
+454 120 -.0125
+455 120 -.0048
+456 120 -.0176
+457 120 -.021
+458 120 -.0161
+459 120 -.0063
+460 120 -.0063
+461 120 -.0122
+462 120 -.0122
+463 120 -.0161
+464 120 -.0161
+465 120 -.0162
+466 120 -.0162
+467 120 -.0162
+468 120 -.0115
+469 120 -.0162
+470 120 -.0115
+99 121 -1
+352 121 1
+100 122 1
+252 122 1
+254 122 1
+267 122 1
+295 122 1
+351 122 1
+353 122 1
+406 122 -.002
+407 122 -.002
+408 122 -.008
+409 122 -.006
+410 122 -.006
+411 122 -.005
+412 122 -.005
+413 122 -.006
+414 122 -.001
+415 122 -.008
+416 122 -.006
+417 122 -.006
+418 122 -.006
+419 122 -.008
+420 122 -.009
+421 122 -.002
+422 122 -.004
+423 122 -.001
+424 122 -.005
+425 122 -.008
+426 122 -.005
+427 122 -.009
+428 122 -.001
+429 122 -.008
+430 122 -.002
+431 122 -.002
+432 122 -.002
+433 122 -.001
+434 122 -.003
+435 122 -.001
+436 122 -.008
+437 122 -.002
+438 122 -.001
+439 122 -.008
+440 122 -.005
+441 122 -.005
+442 122 -.005
+443 122 -.005
+444 122 -.009
+445 122 -.005
+446 122 -.002
+447 122 -.005
+448 122 -.001
+449 122 -.001
+450 122 -.008
+451 122 -.008
+452 122 -.003
+453 122 -.009
+454 122 -.009
+455 122 -.001
+456 122 -.008
+457 122 -.008
+458 122 -.005
+459 122 -.005
+460 122 -.005
+461 122 -.005
+462 122 -.005
+463 122 -.005
+464 122 -.005
+465 122 -.005
+466 122 -.005
+467 122 -.005
+468 122 -.005
+469 122 -.005
+470 122 -.005
+101 123 -1
+353 123 1
+102 124 1
+230 124 2
+103 125 1
+395 125 1
+396 125 1
+397 125 1
+398 125 1
+399 125 1
+400 125 1
+401 125 1
+104 126 1
+395 126 .096
+396 126 .05
+397 126 .03
+398 126 -.06
+399 126 -.069
+400 126 -.083
+401 126 .006
+105 127 1
+395 127 -.126
+396 127 -.08
+397 127 -.06
+398 127 .03
+399 127 .039
+400 127 .053
+401 127 -.036
+106 128 1
+395 128 55
+396 128 50
+397 128 47
+398 128 -50
+399 128 -73
+400 128 -68
+401 128 15
+107 129 1
+395 129 -50
+396 129 -50
+397 129 -50
+398 129 14
+399 129 45
+400 129 60
+401 129 -50
+108 130 1
+385 130 1
+386 130 1
+387 130 1
+388 130 1
+389 130 1
+390 130 1
+109 131 1
+208 131 1
+277 131 -1
+278 131 -1
+279 131 -1
+280 131 -1
+281 131 -1
+282 131 -1
+283 131 -1
+284 131 -1
+285 131 -1
+294 131 -1
+295 131 -1
+110 132 1
+208 132 1
+111 133 1
+277 133 64
+278 133 1
+279 133 -9
+280 133 -9
+281 133 -9
+282 133 1.1
+283 133 -9
+284 133 4
+285 133 1.5
+294 133 53
+295 133 169
+112 134 1
+277 134 -66
+278 134 -3
+279 134 7
+280 134 7
+281 134 7
+282 134 -3.1
+283 134 7
+284 134 -6
+285 134 -3.5
+294 134 -55
+295 134 -171
+113 135 1
+277 135 73
+278 135 -17
+279 135 -52
+280 135 -52
+281 135 -52
+282 135 22
+283 135 -52
+284 135 58
+285 135 40
+294 135 73
+295 135 98
+114 136 1
+277 136 -92
+278 136 -2
+279 136 33
+280 136 33
+281 136 33
+282 136 -41
+283 136 33
+284 136 -77
+285 136 -59
+294 136 -92
+295 136 -117
+115 137 1
+277 137 40
+278 137 -24
+279 137 -70
+280 137 -69
+281 137 -68
+282 137 49
+283 137 -67
+284 137 40
+285 137 38
+294 137 40
+295 137 70
+116 138 1
+277 138 -50
+278 138 14
+279 138 60
+280 138 59
+281 138 58
+282 138 -59
+283 138 57
+284 138 -50
+285 138 -48
+294 138 -50
+295 138 -80
+117 139 1
+225 139 5.2638
+226 139 15.7829
+277 139 .24
+278 139 1.29
+279 139 -.7
+280 139 -3.23
+281 139 -4.94
+282 139 7.48
+283 139 -6.21
+284 139 10.99
+285 139 2.98
+294 139 7.34
+295 139 -2.56
+118 140 1
+277 140 317.5
+278 140 -5.1
+279 140 -81
+280 140 -80.6
+281 140 -80.2
+282 140 44
+283 140 -79.8
+284 140 70
+285 140 50.2
+294 140 273.5
+295 140 762
+119 141 1
+277 141 -613.2
+278 141 -19.2
+279 141 95.8
+280 141 95.8
+281 141 95.8
+282 141 -59
+283 141 95.8
+284 141 -118.2
+285 141 -80.2
+294 141 -525.2
+295 141 -1478.2
+120 142 1
+217 142 1
+315 142 -1
+316 142 -1
+319 142 -1
+320 142 -1
+323 142 -1
+324 142 -1
+325 142 -1
+330 142 -1
+331 142 -1
+332 142 -1
+333 142 -1
+334 142 -1
+341 142 -1
+343 142 -1
+345 142 -1
+346 142 -1
+350 142 -1
+351 142 -1
+405 142 -1
+121 143 1
+217 143 1
+122 144 1
+315 144 -2.5
+316 144 -.2
+319 144 66
+320 144 3
+324 144 1
+325 144 2
+330 144 -7
+331 144 -7
+332 144 -7
+333 144 3.5
+334 144 -7
+341 144 -6.5
+343 144 -8
+345 144 6
+346 144 3.5
+350 144 55
+351 144 171
+405 144 1.7
+123 145 1
+315 145 .5
+316 145 -1.8
+319 145 -68
+320 145 -5
+323 145 -2
+324 145 -3
+325 145 -4
+330 145 5
+331 145 5
+332 145 5
+333 145 -5.5
+334 145 5
+341 145 4.5
+343 145 6
+345 145 -8
+346 145 -5.5
+350 145 -57
+351 145 -173
+405 145 -3.7
+124 146 1
+315 146 -14.32
+316 146 1.64
+319 146 51.8
+320 146 -16.6
+323 146 -.64
+324 146 3.16
+325 146 6.96
+330 146 -43.2
+331 146 -43.2
+332 146 -43.2
+333 146 13.04
+334 146 -43.2
+341 146 -34.08
+343 146 -29.52
+345 146 40.4
+346 146 26.72
+350 146 51.8
+351 146 70.8
+405 146 -.26
+125 147 1
+315 147 -5.7
+316 147 -21.6
+319 147 -71.8
+320 147 -3.4
+323 147 -19.4
+324 147 -23.2
+325 147 -27
+330 147 23.2
+331 147 23.2
+332 147 23.2
+333 147 -33
+334 147 23.2
+341 147 14.1
+343 147 21.7
+345 147 -60.4
+346 147 -46.7
+350 147 -71.8
+351 147 -90.8
+405 147 -19.7
+126 148 1
+315 148 9
+316 148 30
+319 148 40
+320 148 -24
+323 148 45
+324 148 46
+325 148 47
+330 148 -70
+331 148 -69
+332 148 -68
+333 148 49
+334 148 -67
+341 148 -50
+343 148 -56
+345 148 40
+346 148 38
+350 148 40
+351 148 70
+405 148 -1.8
+127 149 1
+315 149 -19
+316 149 -40
+319 149 -50
+320 149 14
+323 149 -55
+324 149 -56
+325 149 -57
+330 149 60
+331 149 59
+332 149 58
+333 149 -59
+334 149 57
+341 149 40
+343 149 46
+345 149 -50
+346 149 -48
+350 149 -50
+351 149 -80
+405 149 -8.2
+128 150 1
+239 150 14.5377
+240 150 25.3995
+315 150 2.01
+316 150 6.61
+319 150 -3.78
+320 150 -2.69
+323 150 5.74
+324 150 5.55
+325 150 5.15
+330 150 -3.65
+331 150 -5.85
+332 150 -7.63
+333 150 4.43
+334 150 -8.38
+341 150 2.44
+343 150 1.92
+345 150 6.96
+346 150 -1.19
+350 150 3.25
+351 150 -6.36
+405 150 12.86
+129 151 1
+315 151 -4.56
+316 151 21.02
+319 151 314.9
+320 151 3.1
+323 151 26.68
+324 151 32.98
+325 151 39.28
+330 151 -68.6
+331 151 -68.2
+332 151 -67.8
+333 151 49.12
+334 151 -67.4
+341 151 -54.04
+343 151 -60.16
+345 151 69.2
+346 151 51.56
+350 151 270.9
+351 151 756.4
+405 151 14.95
+130 152 1
+315 152 16.1
+316 152 -18.2
+319 152 -598
+320 152 -25.6
+323 152 -17.6
+324 152 -29.4
+325 152 -41.2
+330 152 81
+331 152 81
+332 152 81
+333 152 -59.2
+334 152 81
+341 152 67.9
+343 152 87.5
+345 152 -106.6
+346 152 -72.9
+350 152 -510
+351 152 -1457
+405 152 -31.5
+131 153 1
+215 153 1
+317 153 -1
+318 153 -1
+321 153 -1
+322 153 -1
+326 153 -1
+327 153 -1
+328 153 -1
+335 153 -1
+336 153 -1
+337 153 -1
+338 153 -1
+339 153 -1
+342 153 -1
+344 153 -1
+347 153 -1
+352 153 -1
+353 153 -1
+356 153 -1
+132 154 1
+215 154 1
+133 155 1
+292 155 1
+317 155 -.2
+318 155 -2.5
+321 155 66
+322 155 3
+327 155 1
+328 155 2
+335 155 -7
+336 155 -7
+337 155 -7
+338 155 3.5
+339 155 -7
+342 155 -6.5
+344 155 -8
+347 155 3.5
+352 155 55
+353 155 171
+356 155 -9
+134 156 1
+292 156 -1
+317 156 -1.8
+318 156 .5
+321 156 -68
+322 156 -5
+326 156 -2
+327 156 -3
+328 156 -4
+335 156 5
+336 156 5
+337 156 5
+338 156 -5.5
+339 156 5
+342 156 4.5
+344 156 6
+347 156 -5.5
+352 156 -57
+353 156 -173
+356 156 7
+135 157 1
+293 157 1
+317 157 9
+318 157 -12
+321 157 75
+322 157 -15
+326 157 6
+327 157 11
+328 157 16
+335 157 -50
+336 157 -50
+337 157 -50
+338 157 24
+339 157 -50
+342 157 -38
+344 157 -48
+347 157 42
+352 157 75
+353 157 100
+356 157 -40
+136 158 1
+293 158 -1
+317 158 -29
+318 158 -8
+321 158 -95
+322 158 -5
+326 158 -26
+327 158 -31
+328 158 -36
+335 158 30
+336 158 30
+337 158 30
+338 158 -44
+339 158 30
+342 158 18
+344 158 28
+347 158 -62
+352 158 -95
+353 158 -120
+356 158 20
+137 159 1
+290 159 1
+317 159 30
+318 159 9
+321 159 40
+322 159 -24
+326 159 45
+327 159 46
+328 159 47
+335 159 -70
+336 159 -69
+337 159 -68
+338 159 49
+339 159 -67
+342 159 -50
+344 159 -56
+347 159 38
+352 159 40
+353 159 70
+356 159 -60
+138 160 1
+290 160 -1
+317 160 -40
+318 160 -19
+321 160 -50
+322 160 14
+326 160 -55
+327 160 -56
+328 160 -57
+335 160 60
+336 160 59
+337 160 58
+338 160 -59
+339 160 57
+342 160 40
+344 160 46
+347 160 -48
+352 160 -50
+353 160 -80
+356 160 50
+139 161 1
+237 161 75.9202
+238 161 151.8405
+274 161 -1.125
+317 161 -2.38
+318 161 -6.93
+321 161 -12.74
+322 161 -6.68
+326 161 -1.05
+327 161 -1.27
+328 161 -1.71
+335 161 -10.34
+336 161 -12.38
+337 161 -14.06
+338 161 -2.38
+339 161 -14.97
+342 161 -6.68
+344 161 -7.02
+347 161 -10.17
+352 161 -5.81
+353 161 -15.15
+356 161 65.12
+140 162 1
+290 162 .4
+292 162 4
+293 162 .5
+317 162 24.7
+318 162 -3.4
+321 162 326.5
+322 162 3.9
+326 162 30
+327 162 36.9
+328 162 43.8
+335 162 -72
+336 162 -71.6
+337 162 -71.2
+338 162 54.6
+339 162 -70.8
+342 162 -56
+344 162 -69.4
+347 162 59.2
+352 162 282.5
+353 162 771
+356 162 -71
+141 163 1
+292 163 -8
+293 163 -1
+317 163 -25.6
+318 163 13.8
+321 163 -621.2
+322 163 -27.2
+326 163 -24.2
+327 163 -37.2
+328 163 -50.2
+335 163 87.8
+336 163 87.8
+337 163 87.8
+338 163 -70.2
+339 163 87.8
+342 163 71.8
+344 163 93.8
+347 163 -88.2
+352 163 -533.2
+353 163 -1486.2
+356 163 93.8
+142 164 1
+225 164 7.593
+277 164 -1
+278 164 -1
+279 164 -1
+280 164 -1
+281 164 -1
+282 164 -1
+283 164 -1
+284 164 -1
+285 164 -1
+294 164 -1
+295 164 -1
+143 165 1
+226 165 18.5185
+277 165 -1
+278 165 -1
+279 165 -1
+280 165 -1
+281 165 -1
+282 165 -1
+283 165 -1
+284 165 -1
+285 165 -1
+294 165 -1
+295 165 -1
+144 166 1
+239 166 14.1044
+315 166 -1
+316 166 -1
+319 166 -1
+320 166 -1
+323 166 -1
+324 166 -1
+325 166 -1
+330 166 -1
+331 166 -1
+332 166 -1
+333 166 -1
+334 166 -1
+341 166 -1
+343 166 -1
+345 166 -1
+346 166 -1
+350 166 -1
+351 166 -1
+405 166 -1
+145 167 1
+240 167 12.3305
+315 167 -1
+316 167 -1
+319 167 -1
+320 167 -1
+323 167 -1
+324 167 -1
+325 167 -1
+330 167 -1
+331 167 -1
+332 167 -1
+333 167 -1
+334 167 -1
+341 167 -1
+343 167 -1
+345 167 -1
+346 167 -1
+350 167 -1
+351 167 -1
+405 167 -1
+146 168 1
+237 168 19.7239
+317 168 -1
+318 168 -1
+321 168 -1
+322 168 -1
+326 168 -1
+327 168 -1
+328 168 -1
+335 168 -1
+336 168 -1
+337 168 -1
+338 168 -1
+339 168 -1
+342 168 -1
+344 168 -1
+347 168 -1
+352 168 -1
+353 168 -1
+356 168 -1
+147 169 1
+238 169 12.3305
+317 169 -1
+318 169 -1
+321 169 -1
+322 169 -1
+326 169 -1
+327 169 -1
+328 169 -1
+335 169 -1
+336 169 -1
+337 169 -1
+338 169 -1
+339 169 -1
+342 169 -1
+344 169 -1
+347 169 -1
+352 169 -1
+353 169 -1
+356 169 -1
+148 170 1
+284 170 1
+285 170 1
+345 170 1
+346 170 1
+347 170 1
+284 171 -1
+345 171 .20083
+149 172 1
+323 172 1
+326 172 1
+358 172 -.34
+362 172 -.209
+365 172 -.218
+368 172 -.34
+150 173 1
+324 173 1
+327 173 1
+359 173 -.316
+363 173 -.212
+366 173 -.231
+369 173 -.316
+151 174 1
+325 174 1
+328 174 1
+360 174 -.288
+364 174 -.222
+367 174 -.231
+370 174 -.288
+152 175 1
+282 175 1
+333 175 1
+338 175 1
+361 175 -.235
+371 175 -.216
+372 175 -.23
+373 175 -.235
+153 176 1
+279 176 1
+330 176 1
+335 176 1
+358 176 -.413
+362 176 -.561
+365 176 -.538
+368 176 -.413
+154 177 1
+280 177 1
+331 177 1
+336 177 1
+359 177 -.401
+363 177 -.521
+366 177 -.502
+369 177 -.401
+155 178 1
+281 178 1
+332 178 1
+337 178 1
+360 178 -.372
+364 178 -.471
+367 178 -.442
+370 178 -.372
+156 179 1
+283 179 1
+334 179 1
+339 179 1
+361 179 -.349
+371 179 -.427
+372 179 -.394
+373 179 -.349
+157 180 1
+263 180 1
+265 180 .00026
+266 180 .00026
+273 180 -.0029
+275 180 1
+286 180 -.0071
+287 180 -.0017
+288 180 -.0005
+289 180 .0006
+291 180 -.04495
+354 180 -.079
+355 180 -.0802
+357 180 -.315
+358 180 -.219
+359 180 -.259
+360 180 -.315
+361 180 -.395
+362 180 -.2
+363 180 -.235
+364 180 -.282
+365 180 -.167
+366 180 -.188
+367 180 -.225
+368 180 -.219
+369 180 -.259
+370 180 -.315
+371 180 -.331
+372 180 -.279
+373 180 -.395
+406 180 -.00112
+407 180 -.00112
+408 180 -.00504
+409 180 -.00336
+410 180 -.00336
+411 180 -.00504
+412 180 -.00504
+413 180 -.00336
+414 180 -.0017
+415 180 -.00504
+416 180 -.00336
+417 180 -.00336
+418 180 -.00336
+419 180 -.00504
+420 180 -.0028
+421 180 -.00112
+422 180 -.00224
+423 180 -.00168
+424 180 -.00504
+425 180 -.00504
+426 180 -.00504
+427 180 -.0028
+428 180 -.00168
+429 180 -.00504
+430 180 -.00112
+431 180 -.00112
+432 180 -.00112
+433 180 -.00168
+434 180 -.00056
+435 180 -.0017
+436 180 -.00504
+437 180 -.00112
+438 180 -.00168
+439 180 -.00504
+440 180 -.00504
+441 180 -.00504
+442 180 -.00504
+443 180 -.00504
+444 180 -.0028
+445 180 -.00504
+446 180 -.00112
+447 180 -.00504
+448 180 -.00168
+449 180 -.00168
+450 180 -.00504
+451 180 -.00504
+452 180 -.00056
+453 180 -.0028
+454 180 -.0028
+455 180 -.00168
+456 180 -.00504
+457 180 -.00504
+458 180 -.00504
+459 180 -.00504
+460 180 -.00504
+461 180 -.00504
+462 180 -.00504
+463 180 -.00504
+464 180 -.00504
+465 180 -.00504
+466 180 -.00504
+467 180 -.00504
+468 180 -.00504
+469 180 -.00504
+470 180 -.00504
+472 180 -.246
+158 181 1
+212 181 -2.9155
+265 181 1
+244 182 -9.648
+245 182 -9.648
+266 182 1
+159 183 1
+265 183 1
+266 183 1
+236 184 -.42
+241 184 -.66
+242 184 -.7
+243 184 -.9
+244 184 -.014
+245 184 -.0126
+246 184 -.78
+267 184 -.56
+270 184 -.66
+275 184 -1
+329 184 -1
+357 184 .085
+358 184 .085
+359 184 .085
+360 184 .085
+361 184 .085
+362 184 .085
+363 184 .085
+364 184 .085
+365 184 .085
+366 184 .085
+367 184 .085
+368 184 .085
+369 184 .085
+370 184 .085
+371 184 .085
+372 184 .085
+373 184 .085
+391 184 -.71
+392 184 -.74
+393 184 -.75
+394 184 -.72
+160 185 1
+241 185 .66
+242 185 .7
+244 185 .014
+245 185 .0126
+246 185 .78
+270 185 .66
+391 185 .71
+392 185 .74
+393 185 .75
+394 185 .72
+161 186 1
+193 186 1
+201 186 1
+355 186 -.0427
+162 187 1
+243 187 1
+163 188 1
+193 188 1
+191 189 1
+236 189 1
+354 189 -.3351
+164 190 1
+191 190 1
+165 191 1
+192 191 1
+354 191 -.0347
+355 191 -.0586
+166 192 1
+395 192 50.5
+396 192 1.5
+397 192 -2.5
+398 192 -11.3
+399 192 -12.4
+400 192 -12.6
+401 192 -5
+167 193 1
+241 193 1
+277 193 1
+319 193 1
+321 193 1
+355 193 -.1917
+168 194 1
+201 194 -1
+278 194 1
+320 194 1
+322 194 1
+355 194 -.4058
+169 195 1
+316 195 1
+317 195 1
+354 195 -.3769
+251 196 -6
+253 196 -18.4
+255 196 -5.4
+256 196 -7.1
+257 196 -2.5
+258 196 -2.8
+259 196 -3.7
+260 196 -3.4
+261 196 -1.1
+262 196 -3.9
+264 196 .3
+268 196 -1.1
+276 196 1.2
+287 196 1
+349 196 -2.013
+251 197 -3.3
+253 197 .462
+255 197 -3.96
+256 197 9.9
+257 197 -20.46
+258 197 -14.685
+259 197 3.135
+260 197 9.735
+261 197 -16.5
+262 197 -1.65
+264 197 -23.1
+268 197 -9.9
+276 197 -23.1
+288 197 1
+349 197 3.267
+212 198 1
+251 198 -1.6
+253 198 -4.2
+255 198 -1.68
+256 198 -1.97
+257 198 -1.6
+258 198 -2.6
+259 198 -2.8
+260 198 -3.1
+261 198 -1.74
+262 198 -2.71
+264 198 -1.25
+268 198 -2.15
+276 198 -1
+349 198 -1.0164
+214 199 1
+251 199 -.916
+253 199 -.966
+255 199 -.927
+256 199 -.946
+257 199 -.861
+258 199 -.892
+259 199 -.915
+260 199 -.942
+261 199 -.862
+262 199 -.894
+264 199 -.845
+268 199 -.878
+276 199 -.832
+349 199 -.3102
+170 200 1
+285 200 1
+286 200 -.0059
+287 200 .0036
+288 200 .0006
+289 200 -.00112
+291 200 -.19654
+346 200 1
+347 200 1
+171 201 1
+230 201 1
+234 201 -2.5386
+286 201 -.0039
+287 201 .0024
+288 201 .0004
+289 201 -.00075
+291 201 -.13103
+343 201 1
+344 201 1
+172 202 1
+234 202 10.0375
+286 202 -.0033
+287 202 .002
+288 202 .00035
+289 202 -.00063
+291 202 -.10919
+341 202 1
+342 202 1
+173 203 1
+273 203 -.0007
+286 203 .0065
+287 203 .0011
+288 203 -.0023
+289 203 -.039
+291 203 -.22573
+355 203 1
+174 204 1
+273 204 .44
+286 204 -.09
+287 204 .32
+288 204 .042
+289 204 1
+291 204 4.569
+175 205 1
+214 205 .6526
+273 205 -.0459
+286 205 -.0564
+287 205 .0696
+289 205 .1969
+176 206 1
+273 206 1
+291 206 -6
+177 207 1
+286 207 1
+291 207 -2
+178 208 1
+289 208 1
+291 208 -2
+198 209 1
+273 209 -.78
+286 209 -.925
+289 209 2.375
+291 209 1.49
+179 210 1
+198 210 1
+291 210 -1.3
+180 211 1
+291 211 1
+181 212 -1
+291 212 1
+182 213 1
+192 213 1
+205 214 .1
+434 214 1
+452 214 1
+183 215 1
+471 215 -1
+472 215 1
+184 216 1
+472 216 1
+185 217 -1
+472 217 1
+186 218 1
+472 218 -.62
+411 219 1
+412 219 1
+424 219 1
+426 219 1
+440 219 1
+441 219 1
+442 219 1
+443 219 1
+445 219 1
+447 219 1
+458 219 1
+459 219 1
+460 219 1
+461 219 1
+462 219 1
+463 219 1
+464 219 1
+465 219 1
+466 219 1
+467 219 1
+468 219 1
+469 219 1
+470 219 1
+187 220 1
+195 220 1
+188 221 1
+195 221 .63
+227 221 -1
+189 222 1
+195 222 .37
+357 222 -.198
+190 223 1
+315 223 1
+318 223 1
+357 223 -.462
diff --git a/SPQR/Matrix/lp_share1b.mtx b/SPQR/Matrix/lp_share1b.mtx
new file mode 100644
index 0000000..ea77457
--- /dev/null
+++ b/SPQR/Matrix/lp_share1b.mtx
@@ -0,0 +1,1245 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/LPnetlib/lp_share1b
+% name: LPnetlib/lp_share1b
+% [Netlib LP problem share1b: minimize c'*x, where Ax=b, lo<=x<=hi]
+% id: 681
+% date: 
+% author: M. Saunders
+% ed: D. Gay
+% fields: title name A b id aux kind date author ed notes
+% aux: c lo hi z0
+% kind: linear programming problem
+%-------------------------------------------------------------------------------
+% notes:
+% A Netlib LP problem, in lp/data.  For more information                        
+% send email to netlib at ornl.gov with the message:                               
+%                                                                               
+% 	 send index from lp                                                          
+% 	 send readme from lp/data                                                    
+% 	 send minos from lp/data                                                     
+%                                                                               
+% The following are relevant excerpts from lp/data/readme (by David M. Gay):    
+%                                                                               
+% The column and nonzero counts in the PROBLEM SUMMARY TABLE below exclude      
+% slack and surplus columns and the right-hand side vector, but include         
+% the cost row.  We have omitted other free rows and all but the first          
+% right-hand side vector, as noted below.  The byte count is for the            
+% MPS compressed file; it includes a newline character at the end of each       
+% line.  These files start with a blank initial line intended to prevent        
+% mail programs from discarding any of the data.  The BR column indicates       
+% whether a problem has bounds or ranges:  B stands for "has bounds", R         
+% for "has ranges".                                                             
+%                                                                               
+% The optimal value is from MINOS version 5.3 (of Sept. 1988)                   
+% running on a VAX with default options.                                        
+%                                                                               
+%                        PROBLEM SUMMARY TABLE                                  
+%                                                                               
+% Name       Rows   Cols   Nonzeros    Bytes  BR      Optimal Value             
+% SHARE1B     118    225     1182       8380       -7.6589318579E+04            
+%                                                                               
+% From Michael Saunders, Systems Optimization Laboratory at Stanford University.
+%                                                                               
+%                                                                               
+% The following are relevant excerts from lp/data/minos (by Michael Saunders),  
+% regarding experience with MINOS 5.0 on the problems he provided:              
+%                                                                               
+%                                                      (unscaled)   (scaled)    
+% File   Name    Rows  Cols  Elems  Optimal Objective  Itns  Time  Itns  Time   
+% ---- --------  ----  ----  -----  -----------------  ----  ----  ----  ----   
+%   4. SHARE1B    118   225   1182 -7.6589319E+04       296   3.4   260   2.8   
+%                                                                               
+% * Objective  is the first row of type N.  It is minimized except as shown.    
+%                                                                               
+% * Itns       is the number of iterations required to solve the problem        
+%              by the primal simplex method, as implemented in the Fortran      
+%              code MINOS 5.0 (May 1985), using default values for all          
+%              parameters.  (The initial basis is triangular.)                  
+%                                                                               
+% * Time       is the processor time required on an IBM 3081K.  The MINOS       
+%              source code was compiled with the IBM Fortran 77 compiler        
+%              VS FORTRAN, using the options NOSDUMP, NOSYM and OPT(3).         
+%                                                                               
+%-------------------------------------------------------------------------------
+117 253 1179
+15 1 1
+18 2 1
+19 3 1
+22 4 1
+25 5 1
+26 6 1
+29 7 1
+32 8 1
+41 9 1
+42 10 1
+43 11 1
+52 12 1
+53 13 1
+54 14 1
+70 15 1
+73 16 1
+75 17 1
+78 18 1
+81 19 1
+82 20 1
+85 21 1
+88 22 1
+97 23 1
+98 24 1
+99 25 1
+108 26 1
+109 27 1
+110 28 1
+13 29 -1
+14 29 1
+15 29 100
+16 29 130.5
+17 29 -101
+19 29 -14
+1 30 1
+13 30 1
+15 30 -106
+16 30 -126
+17 30 339
+18 30 -447.5098
+4 31 1
+13 31 1
+15 31 -91.4
+16 31 -99.3
+17 31 83
+18 31 -18.24
+7 32 1
+13 32 1
+15 32 -106.6
+16 32 -141
+17 32 68
+18 32 -301.1599
+10 33 1
+13 33 1
+15 33 -102.6
+16 33 -190
+17 33 12
+18 33 985.6399
+19 33 100
+13 34 1
+15 34 -106.2
+16 34 -245
+17 34 6
+18 34 1101.0898
+61 34 1
+20 35 -1
+21 35 1
+22 35 102.7
+23 35 136.2
+24 35 -101
+26 35 -12
+1 36 1
+20 36 1
+22 36 -105
+23 36 -114
+24 36 339
+25 36 -397.3999
+4 37 1
+20 37 1
+22 37 -89.7
+23 37 -97
+24 37 83
+25 37 39.93
+7 38 1
+20 38 1
+22 38 -105.2
+23 38 -134
+24 38 68
+25 38 -245.37
+10 39 1
+20 39 1
+22 39 -102
+23 39 -158
+24 39 12
+25 39 1053.9199
+26 39 100
+20 40 1
+22 40 -105.4
+23 40 -218
+24 40 6
+25 40 1170.2
+61 40 1
+27 41 -1
+28 41 1
+29 41 104.6
+30 41 147.3
+31 41 -101
+1 42 1
+27 42 1
+29 42 -107
+30 42 -131
+31 42 339
+32 42 -287.1499
+4 43 1
+27 43 1
+29 43 -92.5
+30 43 -100.7
+31 43 83
+32 43 167.91
+7 44 1
+27 44 1
+29 44 -107.4
+30 44 -146
+31 44 68
+32 44 -122.63
+10 45 1
+27 45 1
+29 45 -102.9
+30 45 -203
+31 45 12
+32 45 1204.1199
+27 46 1
+29 46 -106.5
+30 46 -255
+31 46 6
+32 46 1322.23
+61 46 1
+27 47 1
+29 47 -107.1
+30 47 -153
+31 47 65
+32 47 -107.5
+112 47 1
+33 48 -1
+34 48 1
+35 48 7.15
+36 48 -.91
+39 48 -1
+40 48 -131
+41 48 -50
+42 48 50
+43 48 90
+35 49 -1.3
+37 49 -1
+35 50 -5.5
+113 50 -1
+38 51 -1
+33 52 1
+35 52 5.85
+36 52 -80
+40 52 1100
+41 52 100
+42 52 -100
+43 52 -100
+113 52 1.3
+6 53 1
+33 53 1
+35 53 4.4
+36 53 -70.7
+40 53 61
+41 53 33.5
+42 53 -71.3
+43 53 -100
+113 53 1
+9 54 1.1236
+33 54 1
+35 54 4.8
+36 54 -38.7
+40 54 20
+41 54 8
+42 54 -13
+43 54 -84.5
+113 54 1
+10 55 1
+33 55 1
+35 55 -5
+36 55 -23.4
+40 55 12
+43 55 -100
+113 55 1
+11 56 1
+33 56 1
+35 56 8.26
+36 56 -42.4
+40 56 115
+41 56 53.2
+42 56 -63.2
+43 56 -96
+113 56 1.4
+33 57 1
+35 57 8
+36 57 -28.1
+40 57 176
+41 57 75.8
+42 57 -85.3
+43 57 -100
+66 57 1
+113 57 3.2
+44 58 -1
+45 58 1
+46 58 6.325
+47 58 -2.28
+50 58 -1
+51 58 -140
+52 58 -50
+53 58 50
+54 58 90
+44 59 1
+46 59 -7.8
+47 59 -80
+51 59 1100
+52 59 100
+53 59 -100
+54 59 -100
+115 59 1.3
+2 60 1
+44 60 1
+46 60 17.55
+47 60 -68
+51 60 218
+52 60 97
+53 60 -98.5
+54 60 -100
+115 60 1.3
+3 61 1
+44 61 1
+46 61 12.7
+47 61 -63.7
+51 61 171
+52 61 87.7
+53 61 -93
+54 61 -100
+115 61 1
+5 62 1
+44 62 1
+46 62 .3
+47 62 -54.6
+51 62 169
+52 62 96.5
+53 62 -98
+54 62 -100
+115 62 1.5
+8 63 1
+44 63 1
+46 63 10.4
+47 63 -78.2
+51 63 65
+52 63 80
+53 63 -98
+54 63 -100
+115 63 1
+9 64 1.0989
+44 64 1
+46 64 5.9
+47 64 -57.4
+51 64 22
+52 64 16
+53 64 -33.4
+54 64 -95
+115 64 1
+68 65 -1
+69 65 1
+70 65 100
+71 65 130.5
+72 65 -101
+74 65 45
+75 65 -13
+55 66 1
+68 66 1
+70 66 -106
+71 66 -130
+72 66 346
+73 66 -440.7
+74 66 -100
+57 67 1
+68 67 1
+70 67 -99.5
+71 67 -100
+72 67 114
+73 67 -278.47
+74 67 -88.96
+58 68 1
+68 68 1
+70 68 -89
+71 68 -92
+72 68 32
+73 68 50.36
+60 69 1
+68 69 1
+70 69 -106
+71 69 -147
+72 69 67
+73 69 -303.5898
+74 69 -14.69
+61 70 1
+68 70 1
+70 70 -104
+71 70 -200
+72 70 6
+73 70 1101.0898
+76 71 -1
+77 71 1
+78 71 102.7
+79 71 136.2
+80 71 -101
+82 71 -11
+55 72 1
+76 72 1
+78 72 -104.3
+79 72 -120
+80 72 346
+81 72 -390.6099
+57 73 1
+76 73 1
+78 73 -98.1
+79 73 -83
+80 73 114
+81 73 -224.85
+60 74 1
+76 74 1
+78 74 -104.5
+79 74 -137
+80 74 67
+81 74 -247.74
+61 75 1
+76 75 1
+78 75 -103.5
+79 75 -190
+80 75 6
+81 75 1170.2
+83 76 -1
+84 76 1
+85 76 104.6
+86 76 147.3
+87 76 -101
+55 77 1
+83 77 1
+85 77 -106.8
+86 77 -135
+87 77 346
+88 77 -280.4099
+57 78 1
+83 78 1
+85 78 -100.4
+86 78 -109
+87 78 114
+88 78 -106.88
+60 79 1
+83 79 1
+85 79 -106.8
+86 79 -151.5
+87 79 67
+88 79 -124.88
+61 80 1
+83 80 1
+85 80 -104.2
+86 80 -205
+87 80 6
+88 80 1322.23
+89 81 -1
+90 81 1
+91 81 11
+92 81 -2
+95 81 -1
+96 81 -131
+97 81 -50
+98 81 50
+99 81 90
+94 82 -1
+91 83 -2
+93 83 -1
+91 84 -5.5
+114 84 -1
+89 85 1
+91 85 5.85
+92 85 -82.2
+96 85 1100
+97 85 100
+98 85 -100
+99 85 -100
+114 85 1.3
+60 86 1
+89 86 1
+91 86 4.8
+92 86 -71.3
+96 86 67
+97 86 37
+98 86 -61.2
+99 86 -100
+114 86 1
+62 87 1
+89 87 1
+91 87 22.1
+92 87 -68.2
+96 87 32
+97 87 23.3
+98 87 -70
+99 87 -100
+114 87 1
+63 88 1
+89 88 1
+91 88 -17.55
+92 88 -28.8
+99 88 -100
+114 88 2.7
+65 89 1.1236
+89 89 1
+91 89 14.22
+92 89 -52.2
+96 89 25
+97 89 9.3
+98 89 -18
+99 89 -82
+114 89 1.8
+66 90 1
+89 90 1
+91 90 8
+92 90 -28.1
+96 90 176
+97 90 75.8
+98 90 -85.3
+99 90 -100
+114 90 3.2
+67 91 -.1
+100 91 -1
+101 91 1
+102 91 8.25
+103 91 -.59
+106 91 -1
+107 91 -140
+108 91 -50
+109 91 50
+110 91 90
+100 92 1
+102 92 -7.8
+103 92 -82.2
+107 92 1100
+108 92 100
+109 92 -100
+110 92 -100
+116 92 1.3
+56 93 1
+100 93 1
+102 93 20.8
+103 93 -80.2
+107 93 271
+108 93 100
+109 93 -100
+110 93 -100
+116 93 1.3
+59 94 1
+100 94 1
+102 94 3
+103 94 -59.3
+107 94 195
+108 94 100
+109 94 -100
+110 94 -100
+116 94 1.5
+62 95 1
+100 95 1
+102 95 11.6
+103 95 -68.2
+107 95 32
+108 95 70
+109 95 -95
+110 95 -100
+116 95 1
+65 96 1.0989
+100 96 1
+102 96 7.38
+103 96 -49.2
+107 96 19
+108 96 15.5
+109 96 -29.8
+110 96 -93.8
+116 96 1.8
+67 97 1
+100 97 1
+102 97 -7
+103 97 -30
+107 97 6
+108 97 2.3
+109 97 -10
+110 97 -82
+116 97 1.4
+100 98 1
+102 98 12.2
+103 98 -68.2
+107 98 243
+108 98 90.8
+109 98 -94.7
+110 98 -100
+111 98 1
+116 98 1
+84 99 -1
+1 100 1
+33 100 1
+35 100 9.62
+36 100 -80
+40 100 339
+41 100 100
+42 100 -100
+43 100 -100
+113 100 1.3
+7 101 1
+33 101 1
+35 101 5.5
+36 101 -75.2
+40 101 68
+41 101 32
+42 101 -63
+43 101 -100
+113 101 1
+12 102 1
+44 102 1
+46 102 -.7
+47 102 -39.9
+51 102 6
+54 102 -76.8
+115 102 1.4
+44 103 1
+46 103 16
+47 103 -71.2
+51 103 47
+52 103 61.8
+53 103 -87
+54 103 -100
+115 103 1
+117 103 1
+46 104 -1.15
+48 104 -1
+46 105 -5.5
+115 105 -1
+49 106 -1
+56 107 1
+57 108 1
+58 109 1
+62 110 1
+55 111 1
+89 111 1
+91 111 8.45
+92 111 -63.2
+96 111 346
+97 111 100
+98 111 -100
+99 111 -100
+114 111 1.3
+57 112 1
+89 112 1
+91 112 20.5
+92 112 -70
+96 112 114
+97 112 100
+98 112 -100
+99 112 -100
+114 112 1
+64 113 1
+89 113 1
+91 113 -22.95
+96 113 5
+99 113 -93
+114 113 2.7
+102 114 -1.5
+104 114 -1
+102 115 -5.5
+116 115 -1
+105 116 -1
+28 117 -1
+34 118 -1
+45 119 -1
+90 120 -1
+101 121 -1
+20 122 1
+22 122 -104.7
+23 122 -145.3
+24 122 65
+25 122 -230.54
+112 122 1
+5 123 1
+33 123 1
+35 123 16.05
+36 123 -54.6
+40 123 169
+41 123 94.2
+42 123 -96.5
+43 123 -100
+113 123 1.5
+11 124 1
+44 124 1
+46 124 -6.44
+47 124 -42.4
+51 124 115
+52 124 63.2
+53 124 -73
+54 124 -99.7
+115 124 1.4
+63 125 1
+68 125 1
+70 125 -101
+71 125 -170
+73 125 982.3098
+75 125 100
+63 126 1
+76 126 1
+78 126 -100.6
+79 126 -165
+81 126 1050.3398
+82 126 100
+63 127 1
+83 127 1
+85 127 -101.8
+86 127 -173
+88 127 1200
+59 128 1
+89 128 1
+91 128 18.75
+92 128 -59.3
+96 128 195
+97 128 100
+98 128 -100
+99 128 -100
+114 128 1.5
+57 129 1
+100 129 1
+102 129 10
+103 129 -70
+107 129 114
+108 129 100
+109 129 -100
+110 129 -100
+116 129 1
+74 130 -1
+13 131 1
+15 131 -109
+16 131 -146
+17 131 1100
+18 131 -479.5598
+6 132 1
+13 132 1
+15 132 -106.5
+16 132 -138.5
+17 132 61
+18 132 -275.1899
+13 133 1
+15 133 -106
+16 133 -136
+17 133 367
+18 133 -429.7898
+55 133 1
+13 134 1
+15 134 -101
+16 134 -150
+18 134 1020
+19 134 100
+63 134 1
+13 135 1
+15 135 -106
+16 135 -150
+17 135 65
+18 135 -286.47
+112 135 1
+20 136 1
+22 136 -107.3
+23 136 -139
+24 136 1100
+25 136 -432.7998
+6 137 1
+20 137 1
+22 137 -105.3
+23 137 -131.8
+24 137 61
+25 137 -219.01
+20 138 1
+22 138 -104.3
+23 138 -124.5
+24 138 367
+25 138 -386
+55 138 1
+20 139 1
+22 139 -100.6
+23 139 -130
+25 139 1081
+26 139 100
+63 139 1
+27 140 1
+29 140 -110
+30 140 -150
+31 140 1100
+32 140 -329.9299
+6 141 1
+27 141 1
+29 141 -107.3
+30 141 -141
+31 141 61
+32 141 -95.42
+27 142 1
+29 142 -107.8
+30 142 -139.3
+31 142 351
+32 142 -273.3899
+55 142 1
+27 143 1
+29 143 -102.8
+30 143 -170
+31 143 6
+32 143 1237
+63 143 1
+36 144 35
+37 144 3.34
+38 144 84
+39 144 1
+36 145 35
+37 145 3.68
+38 145 105
+39 145 1
+36 146 35
+37 146 3.91
+38 146 121.8
+39 146 1
+36 147 40
+37 147 3.93
+38 147 84
+39 147 1
+36 148 40
+37 148 4.32
+38 148 105
+39 148 1
+36 149 40
+37 149 4.61
+38 149 121.8
+39 149 1
+36 150 45
+37 150 4.56
+38 150 84
+39 150 1
+36 151 45
+37 151 5.05
+38 151 105
+39 151 1
+36 152 45
+37 152 5.38
+38 152 121.8
+39 152 1
+36 153 50
+37 153 5.25
+38 153 84
+39 153 1
+36 154 50
+37 154 5.77
+38 154 105
+39 154 1
+36 155 50
+37 155 6.199
+38 155 121.8
+39 155 1
+36 156 55
+37 156 5.98
+38 156 84
+39 156 1
+36 157 55
+37 157 6.65
+38 157 105
+39 157 1
+36 158 55
+37 158 7.107
+38 158 121.8
+39 158 1
+34 159 1
+90 159 -1
+2 160 1
+33 160 1
+35 160 31.2
+36 160 -68
+40 160 218
+41 160 95
+42 160 -97
+43 160 -100
+113 160 1.3
+3 161 1
+33 161 1
+35 161 23.2
+36 161 -63.7
+40 161 171
+41 161 76.5
+42 161 -87.7
+43 161 -99.7
+113 161 1
+8 162 1
+33 162 1
+35 162 20.9
+36 162 -78.2
+40 162 65
+41 162 43
+42 162 -80
+43 162 -100
+96 162 61
+113 162 1
+12 163 1
+33 163 1
+35 163 14
+36 163 -39.9
+40 163 6
+43 163 -39
+113 163 1.4
+33 164 1
+35 164 26.5
+36 164 -71.2
+40 164 47
+41 164 21.5
+42 164 -61.8
+43 164 -100
+113 164 1
+117 164 1
+11 165 -1
+45 165 1
+4 166 1
+44 166 1
+46 166 11.8
+47 166 -64.2
+51 166 83
+52 166 83.5
+53 166 -94.4
+54 166 -100
+115 166 1
+44 167 1
+46 167 12.2
+47 167 -68.2
+51 167 243
+52 167 90.8
+53 167 -94.7
+54 167 -100
+111 167 1
+115 167 1
+47 168 50
+50 168 1
+47 169 50
+48 169 2.064
+49 169 12.6
+50 169 1
+47 170 50
+48 170 3.617
+49 170 25.2
+50 170 1
+47 171 50
+48 171 4.806
+49 171 37.8
+50 171 1
+47 172 50
+48 172 5.743
+49 172 50.4
+50 172 1
+47 173 55
+50 173 1
+47 174 55
+48 174 2.329
+49 174 12.6
+50 174 1
+47 175 55
+48 175 4.094
+49 175 25.2
+50 175 1
+47 176 55
+48 176 5.449
+49 176 37.8
+50 176 1
+47 177 55
+48 177 6.543
+49 177 50.4
+50 177 1
+47 178 60
+50 178 1
+47 179 60
+48 179 2.614
+49 179 12.6
+50 179 1
+47 180 60
+48 180 4.609
+49 180 25.2
+50 180 1
+47 181 60
+48 181 6.147
+49 181 37.8
+50 181 1
+47 182 60
+48 182 7.379
+49 182 50.4
+50 182 1
+47 183 65
+50 183 1
+47 184 65
+48 184 2.91
+49 184 12.6
+50 184 1
+47 185 65
+48 185 5.143
+49 185 25.2
+50 185 1
+47 186 65
+48 186 6.881
+49 186 37.8
+50 186 1
+47 187 65
+48 187 9.19
+49 187 50.4
+50 187 1
+47 188 70
+50 188 1
+47 189 70
+48 189 3.217
+49 189 12.6
+50 189 1
+47 190 70
+48 190 5.701
+49 190 25.2
+50 190 1
+47 191 70
+48 191 7.657
+49 191 37.8
+50 191 1
+47 192 70
+48 192 9.241
+49 192 50.4
+50 192 1
+68 193 1
+70 193 -109
+71 193 -146
+72 193 1100
+73 193 -479.5598
+74 193 -100
+76 194 1
+78 194 -107.3
+79 194 -139
+80 194 1100
+81 194 -432.7998
+58 195 1
+76 195 1
+78 195 -87
+79 195 -75
+80 195 32
+81 195 110.29
+83 196 1
+85 196 -110
+86 196 -150
+87 196 1100
+88 196 -329.9299
+58 197 1
+83 197 1
+85 197 -89.5
+86 197 -101
+87 197 32
+88 197 242.13
+111 198 1
+92 199 35
+95 199 1
+92 200 35
+93 200 1.05
+94 200 21
+95 200 1
+92 201 35
+93 201 2.46
+94 201 42
+95 201 1
+92 202 35
+93 202 2.96
+94 202 63
+95 202 1
+92 203 35
+93 203 3.34
+94 203 84
+95 203 1
+92 204 40
+95 204 1
+92 205 40
+93 205 1.78
+94 205 21
+95 205 1
+92 206 40
+93 206 2.89
+94 206 42
+95 206 1
+92 207 40
+93 207 3.49
+94 207 63
+95 207 1
+92 208 40
+93 208 3.93
+94 208 84
+95 208 1
+92 209 45
+95 209 1
+92 210 45
+93 210 2.13
+94 210 21
+95 210 1
+92 211 45
+93 211 3.35
+94 211 42
+95 211 1
+92 212 45
+93 212 4.04
+94 212 63
+95 212 1
+92 213 45
+93 213 4.56
+94 213 84
+95 213 1
+92 214 50
+95 214 1
+92 215 50
+93 215 2.46
+94 215 21
+95 215 1
+92 216 50
+93 216 3.84
+94 216 42
+95 216 1
+92 217 50
+93 217 4.64
+94 217 63
+95 217 1
+92 218 50
+93 218 5.25
+94 218 84
+95 218 1
+92 219 55
+95 219 1
+92 220 55
+93 220 2.78
+94 220 21
+95 220 1
+92 221 55
+93 221 4.35
+94 221 42
+95 221 1
+92 222 55
+93 222 5.29
+94 222 63
+95 222 1
+92 223 55
+93 223 5.98
+94 223 84
+95 223 1
+56 224 1
+89 224 1
+91 224 34.45
+92 224 -80.2
+96 224 271
+97 224 100
+98 224 -100
+99 224 -100
+114 224 1.3
+61 225 1
+89 225 1
+91 225 -31.05
+92 225 -5.2
+96 225 6
+98 225 -55
+99 225 -100
+114 225 2.7
+58 226 1
+100 226 1
+102 226 14
+103 226 -61.2
+107 226 32
+108 226 94
+109 226 -100
+110 226 -100
+116 226 1
+66 227 1
+100 227 1
+102 227 -25.6
+103 227 -28.1
+107 227 176
+108 227 85.3
+109 227 -92.8
+110 227 -100
+116 227 3.2
+103 228 50
+106 228 1
+103 229 50
+104 229 2.064
+105 229 12.6
+106 229 1
+103 230 50
+104 230 3.617
+105 230 25.2
+106 230 1
+103 231 50
+104 231 4.806
+105 231 37.8
+106 231 1
+103 232 50
+104 232 5.743
+105 232 50.4
+106 232 1
+103 233 55
+106 233 1
+103 234 55
+104 234 2.329
+105 234 12.6
+106 234 1
+103 235 55
+104 235 4.094
+105 235 25.2
+106 235 1
+103 236 55
+104 236 5.449
+105 236 37.8
+106 236 1
+103 237 55
+104 237 6.543
+105 237 50.4
+106 237 1
+103 238 60
+106 238 1
+103 239 60
+104 239 2.614
+105 239 12.6
+106 239 1
+103 240 60
+104 240 4.609
+105 240 25.2
+106 240 1
+103 241 60
+104 241 6.147
+105 241 37.8
+106 241 1
+103 242 60
+104 242 7.379
+105 242 50.4
+106 242 1
+103 243 65
+106 243 1
+103 244 65
+104 244 2.91
+105 244 12.6
+106 244 1
+103 245 65
+104 245 5.143
+105 245 25.2
+106 245 1
+103 246 65
+104 246 6.881
+105 246 37.8
+106 246 1
+103 247 65
+104 247 9.19
+105 247 50.4
+106 247 1
+103 248 70
+106 248 1
+103 249 70
+104 249 3.217
+105 249 12.6
+106 249 1
+103 250 70
+104 250 5.701
+105 250 25.2
+106 250 1
+103 251 70
+104 251 7.567
+105 251 37.8
+106 251 1
+103 252 70
+104 252 9.241
+105 252 50.4
+106 252 1
+67 253 1
diff --git a/SPQR/Matrix/lpi_galenet.mtx b/SPQR/Matrix/lpi_galenet.mtx
new file mode 100644
index 0000000..0ff1715
--- /dev/null
+++ b/SPQR/Matrix/lpi_galenet.mtx
@@ -0,0 +1,58 @@
+%%MatrixMarket matrix coordinate integer general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/LPnetlib/lpi_galenet
+% name: LPnetlib/lpi_galenet
+% [Netlib LP problem galenet: minimize c'*x, where Ax=b, lo<=x<=hi]
+% id: 715
+% date: 
+% author: H. Greenberg
+% ed: J. Chinneck
+% fields: title name A b id aux kind date author ed notes
+% aux: c lo hi z0
+% kind: linear programming problem
+%-------------------------------------------------------------------------------
+% notes:
+% An infeasible Netlib LP problem, in lp/infeas.  For more information        
+% send email to netlib at ornl.gov with the message:                             
+%                                                                             
+% 	send index from lp                                                         
+% 	send readme from lp/infeas                                                 
+%                                                                             
+% The lp/infeas directory contains infeasible linear programming test problems
+% collected by John W. Chinneck, Carleton Univ, Ontario Canada.  The following
+% are relevant excerpts from lp/infeas/readme (by John W. Chinneck):          
+%                                                                             
+% PROBLEM DESCRIPTION                                                         
+% -------------------                                                         
+%                                                                             
+% GALENET:  a very small network problem.  Contributor:  H.J.  Greenberg,     
+% University of Colorado at Denver.                                           
+%                                                                             
+% Name       Rows   Cols   Nonzeros Bounds      Notes                         
+% galenet       9      8       16   B                                         
+%                                                                             
+%-------------------------------------------------------------------------------
+8 14 22
+1 1 1
+2 2 1
+3 3 1
+6 4 -1
+7 5 -1
+8 6 -1
+1 7 1
+4 7 1
+2 8 1
+4 8 1
+2 9 1
+5 9 1
+3 10 1
+5 10 1
+4 11 -1
+6 11 1
+4 12 -1
+7 12 1
+5 13 -1
+7 13 1
+5 14 -1
+8 14 1
diff --git a/SPQR/Matrix/lpi_itest6.mtx b/SPQR/Matrix/lpi_itest6.mtx
new file mode 100644
index 0000000..823c9fe
--- /dev/null
+++ b/SPQR/Matrix/lpi_itest6.mtx
@@ -0,0 +1,79 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/LPnetlib/lpi_itest6
+% name: LPnetlib/lpi_itest6
+% [Netlib LP problem itest6: minimize c'*x, where Ax=b, lo<=x<=hi]
+% id: 720
+% date: 1991
+% author: J. Chinneck, E. Dravnieks
+% ed: J. Chinneck
+% fields: title name A b id aux kind date author ed notes
+% aux: c lo hi z0
+% kind: linear programming problem
+%-------------------------------------------------------------------------------
+% notes:
+% An infeasible Netlib LP problem, in lp/infeas.  For more information        
+% send email to netlib at ornl.gov with the message:                             
+%                                                                             
+% 	send index from lp                                                         
+% 	send readme from lp/infeas                                                 
+%                                                                             
+% The lp/infeas directory contains infeasible linear programming test problems
+% collected by John W. Chinneck, Carleton Univ, Ontario Canada.  The following
+% are relevant excerpts from lp/infeas/readme (by John W. Chinneck):          
+%                                                                             
+% In the following, IIS stands for Irreducible Infeasible Subsystem, a set    
+% of constraints which is itself infeasible, but becomes feasible when any    
+% one member is removed.  Isolating an IIS from within the larger set of      
+% constraints defining the model is one analysis approach.                    
+%                                                                             
+% PROBLEM DESCRIPTION                                                         
+% -------------------                                                         
+%                                                                             
+% ITEST6, ITEST2:  very small problems having numerous clustered IISs.        
+% These match problems 1 and 2, respectively, in Chinneck and Dravnieks       
+% [1991].  Contributors:  J.W.  Chinneck and E.W.  Dravnieks, Carleton        
+% University.                                                                 
+%                                                                             
+% Name       Rows   Cols   Nonzeros Bounds      Notes                         
+% itest6       12      8       23                                             
+%                                                                             
+% REFERENCES                                                                  
+% ----------                                                                  
+%                                                                             
+% J.W.  Chinneck and E.W.  Dravnieks (1991).  "Locating Minimal Infeasible    
+% Constraint Sets in Linear Programs", ORSA Journal on Computing, Volume      
+% 3, No. 2.                                                                   
+%                                                                             
+%-------------------------------------------------------------------------------
+11 17 29
+1 1 1
+2 2 1
+3 3 1
+4 4 -1
+5 5 -1
+6 6 1
+7 7 -1
+8 8 1
+11 9 -1
+2 10 1
+4 11 -1
+5 11 -1
+9 11 1
+10 11 1
+11 11 1
+1 12 .8
+4 12 1
+6 12 1
+9 12 -.05
+10 12 -.04
+1 13 1
+5 13 1
+10 13 -.05
+7 14 -3
+8 14 .5
+3 15 2
+8 15 .6
+7 16 1
+3 17 -1
diff --git a/SPQR/Matrix/pwr01b.mtx b/SPQR/Matrix/pwr01b.mtx
new file mode 100644
index 0000000..02182c6
--- /dev/null
+++ b/SPQR/Matrix/pwr01b.mtx
@@ -0,0 +1,136 @@
+%%MatrixMarket matrix coordinate pattern general
+%-------------------------------------------------------------------------------
+% permuted HB/bcspwr01 with MATLAB q=colamd(A), A=A(:,q)
+%-------------------------------------------------------------------------------
+39 39 131
+10 1
+32 1
+2 2
+30 2
+6 3
+31 3
+6 4
+7 4
+8 4
+5 5
+6 5
+8 5
+5 6
+7 6
+8 6
+9 6
+8 7
+9 7
+39 7
+1 8
+9 8
+39 8
+5 9
+6 9
+7 9
+11 9
+31 9
+1 10
+2 10
+39 10
+25 11
+37 11
+29 12
+38 12
+26 13
+28 13
+29 13
+26 14
+28 14
+29 14
+38 14
+25 15
+26 15
+27 15
+28 15
+29 15
+17 16
+26 16
+27 16
+20 17
+34 17
+19 18
+20 18
+34 18
+19 19
+33 19
+22 20
+35 20
+23 21
+36 21
+22 22
+23 22
+24 22
+36 22
+21 23
+22 23
+23 23
+35 23
+16 24
+23 24
+24 24
+16 25
+21 25
+22 25
+16 26
+19 26
+20 26
+33 26
+14 27
+15 27
+16 27
+15 28
+16 28
+17 28
+19 28
+21 28
+24 28
+16 29
+17 29
+18 29
+27 29
+3 30
+4 30
+17 30
+18 30
+3 31
+4 31
+14 31
+18 31
+1 32
+2 32
+3 32
+25 32
+30 32
+2 33
+3 33
+4 33
+18 33
+2 34
+25 34
+26 34
+37 34
+10 35
+11 35
+13 35
+32 35
+6 36
+10 36
+11 36
+12 36
+11 37
+12 37
+13 37
+10 38
+12 38
+13 38
+14 38
+4 39
+13 39
+14 39
+15 39
diff --git a/SPQR/Matrix/r2.mtx b/SPQR/Matrix/r2.mtx
new file mode 100644
index 0000000..e5aa3a2
--- /dev/null
+++ b/SPQR/Matrix/r2.mtx
@@ -0,0 +1,12 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% A "squeezed" R matrix
+%
+%       1.1     1.2  1,3
+%        0       0   2.3
+%-------------------------------------------------------------------------------
+2 3 4
+0 0 1.1
+0 1 1.2
+0 2 1.3
+1 2 2.3
diff --git a/SPQR/Matrix/s32.mtx b/SPQR/Matrix/s32.mtx
new file mode 100644
index 0000000..f9003b9
--- /dev/null
+++ b/SPQR/Matrix/s32.mtx
@@ -0,0 +1,15 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% 3-by-2 matrix with no nonzeros:
+%
+%  -1.1    1.2
+%   4.1    2.2
+%   9.1    3.2
+%-------------------------------------------------------------------------------
+3 2 6
+0 0 -1.1
+0 1 1.2
+1 0 4.1
+1 1 2.2
+2 0 9.1
+2 1 3.2
diff --git a/SPQR/Matrix/west0067.mtx b/SPQR/Matrix/west0067.mtx
new file mode 100644
index 0000000..2160071
--- /dev/null
+++ b/SPQR/Matrix/west0067.mtx
@@ -0,0 +1,308 @@
+%%MatrixMarket matrix coordinate real general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/HB/west0067
+% name: HB/west0067
+% [U CAVETT PROBLEM WITH 5 COMPONENTS ( CHEM. ENG. FROM WESTERBERG )]
+% id: 262
+% date: 1983
+% author: A. Westerberg
+% ed: I. Duff, R. Grimes, J. Lewis
+% fields: title A name id date author ed kind
+% kind: chemical process simulation problem
+%-------------------------------------------------------------------------------
+67 67 294
+5 1 -.2788416
+6 1 -.2680186
+7 1 -.2323717
+8 1 -.1575082
+9 1 -.06325978
+25 1 .1394208
+26 1 .1340093
+27 1 .1161859
+28 1 .07875411
+29 1 .03162989
+5 2 -.8
+21 2 -.9159533
+25 2 .4
+61 2 1
+6 3 -.8
+22 3 -.9159533
+26 3 .4
+61 3 1
+7 4 -.8
+23 4 -.9159533
+27 4 .4
+61 4 1
+8 5 -.8
+24 5 -.9159533
+28 5 .4
+61 5 1
+9 6 -.8
+29 6 .4
+61 6 1
+5 7 .1344622
+6 7 .1175679
+7 7 .08859262
+8 7 .04759439
+9 7 .01178291
+1 8 -.8341818
+5 8 .4
+57 8 1
+2 9 -.8341818
+6 9 .4
+57 9 1
+3 10 -.8341818
+7 10 .4
+57 10 1
+4 11 -.8341818
+8 11 .4
+57 11 1
+9 12 .4
+57 12 1
+1 13 1.265823
+5 13 .4
+10 13 -1.265823
+11 13 .3333333
+58 13 1
+2 14 1.012658
+6 14 .4
+10 14 -1.012658
+12 14 .3333333
+58 14 1
+3 15 .7594937
+7 15 .4
+10 15 -.7594937
+13 15 .3333333
+58 15 1
+4 16 .5063291
+8 16 .4
+10 16 -.5063291
+14 16 .3333333
+58 16 1
+9 17 .4
+10 17 -.2531646
+15 17 .3333333
+58 17 1
+1 18 -.3361556
+2 18 -.2939196
+3 18 -.2214815
+4 18 -.118986
+10 18 1
+15 19 .6666667
+56 19 1
+11 20 -.2071759
+12 20 -.2140392
+13 20 -.2144206
+14 20 -.1986768
+15 20 -.1656874
+16 20 .1243055
+17 20 .1284235
+18 20 .1286524
+19 20 .1192061
+20 20 .09941246
+11 21 -1
+16 21 .6
+59 21 1
+12 22 -1
+17 22 .6
+59 22 1
+13 23 -1
+18 23 .6
+59 23 1
+14 24 -1
+19 24 .6
+59 24 1
+15 25 -1
+20 25 .6
+59 25 1
+16 26 .45
+36 26 -.9583187
+40 26 .5
+64 26 1
+17 27 .45
+37 27 -.9583187
+41 27 .5
+64 27 1
+18 28 .45
+38 28 -.9583187
+42 28 .5
+64 28 1
+19 29 .45
+39 29 -.9583187
+43 29 .5
+64 29 1
+20 30 .45
+44 30 .5
+64 30 1
+16 31 -.2070986
+17 31 -.2232997
+18 31 -.2286264
+19 31 -.2024528
+20 31 -.1385226
+25 31 -.2070986
+26 31 -.2232997
+27 31 -.2286264
+28 31 -.2024528
+29 31 -.1385226
+16 32 -1.05
+25 32 -1.05
+60 32 1
+17 33 -1.05
+26 33 -1.05
+60 33 1
+18 34 -1.05
+27 34 -1.05
+60 34 1
+19 35 -1.05
+28 35 -1.05
+60 35 1
+20 36 -1.05
+29 36 -1.05
+60 36 1
+25 37 .08147449
+26 37 .09789015
+27 37 .1131608
+28 37 .1150555
+29 37 .09241909
+31 37 .09052721
+32 37 .1087668
+33 37 .1257342
+34 37 .1278394
+35 37 .1026879
+21 38 1.567398
+25 38 .65
+30 38 -1.567398
+31 38 .7222222
+62 38 1
+22 39 1.253918
+26 39 .65
+30 39 -1.253918
+32 39 .7222222
+62 39 1
+23 40 .9404389
+27 40 .65
+30 40 -.9404389
+33 40 .7222222
+62 40 1
+24 41 .6269592
+28 41 .65
+30 41 -.6269592
+34 41 .7222222
+62 41 1
+29 42 .65
+30 42 -.3134796
+35 42 .7222222
+62 42 1
+21 43 -.2788416
+22 43 -.2680186
+23 43 -.2323717
+24 43 -.1575082
+30 43 1
+31 44 .25
+46 44 -.8242248
+50 44 .5
+66 44 1
+32 45 .25
+47 45 -.8242248
+51 45 .5
+66 45 1
+33 46 .25
+48 46 -.8242248
+52 46 .5
+66 46 1
+34 47 .25
+49 47 -.8242248
+53 47 .5
+66 47 1
+35 48 .25
+54 48 .5
+66 48 1
+31 49 -.1581626
+32 49 -.1947711
+33 49 -.2303917
+34 49 -.2362845
+35 49 -.18039
+40 49 -.1581626
+41 49 -.1947711
+42 49 -.2303917
+43 49 -.2362845
+44 49 -.18039
+31 50 -.9722222
+40 50 -.9722222
+63 50 1
+32 51 -.9722222
+41 51 -.9722222
+63 51 1
+33 52 -.9722222
+42 52 -.9722222
+63 52 1
+34 53 -.9722222
+43 53 -.9722222
+63 53 1
+35 54 -.9722222
+44 54 -.9722222
+63 54 1
+40 55 .05322864
+41 55 .07574542
+42 55 .1061028
+43 55 .1333878
+44 55 .1315353
+50 55 -.1064573
+51 55 -.1514908
+52 55 -.2122056
+53 55 -.2667757
+54 55 -.2630706
+36 56 1.863354
+40 56 .4722222
+45 56 -1.863354
+50 56 -.9444444
+65 56 1
+37 57 1.490683
+41 57 .4722222
+45 57 -1.490683
+51 57 -.9444444
+65 57 1
+38 58 1.118012
+42 58 .4722222
+45 58 -1.118012
+52 58 -.9444444
+65 58 1
+39 59 .7453416
+43 59 .4722222
+45 59 -.7453416
+53 59 -.9444444
+65 59 1
+44 60 .4722222
+45 60 -.3726708
+54 60 -.9444444
+65 60 1
+36 61 -.2069954
+37 61 -.2356469
+38 61 -.2475675
+39 61 -.2074873
+45 61 1
+46 62 1.863354
+50 62 .4444444
+55 62 -1.863354
+67 62 1
+47 63 1.490683
+51 63 .4444444
+55 63 -1.490683
+67 63 1
+48 64 1.118012
+52 64 .4444444
+55 64 -1.118012
+67 64 1
+49 65 .7453416
+53 65 .4444444
+55 65 -.7453416
+67 65 1
+54 66 .4444444
+55 66 -.3726708
+67 66 1
+46 67 -.1443354
+47 67 -.1918557
+48 67 -.2421498
+49 67 -.2541193
+55 67 1
diff --git a/SPQR/Matrix/young1c.mtx b/SPQR/Matrix/young1c.mtx
new file mode 100644
index 0000000..06e4078
--- /dev/null
+++ b/SPQR/Matrix/young1c.mtx
@@ -0,0 +1,4115 @@
+%%MatrixMarket matrix coordinate complex general
+%-------------------------------------------------------------------------------
+% UF Sparse Matrix Collection, Tim Davis
+% http://www.cise.ufl.edu/research/sparse/matrices/HB/young1c
+% name: HB/young1c
+% [complex matrix from aero research, David Young, corrected CUA version]
+% id: 278
+% date: 1984
+% author: D. Young
+% ed: I. Duff, R. Grimes, J. Lewis
+% fields: title A name id notes date author ed kind
+% kind: acoustics problem
+%-------------------------------------------------------------------------------
+% notes:
+% The YOUNG*C matrices originally appeared in the Harwell/Boeing     
+% collection as type CSA (complex symmetric).  However, both upper   
+% and lower triangular parts are present in the original files       
+% (an invalid specification; only the lower part can be present      
+% in the file).  If the entries in the upper triangular part are     
+% considered as part of the matrix, the matrices become unsymmetric. 
+% The matrices have been corrected in the UF Sparse Matrix Collection
+% by changing their type to CUA so that the entries in the original  
+% files are not ignored.  In addition, the YOUNG3C matrix has a zero 
+% imaginary part, and thus appears here as a real matrix.            
+%-------------------------------------------------------------------------------
+841 841 4089
+1 1 -218.46 0
+2 1 64 0
+30 1 64 0
+1 2 64 0
+2 2 -218.46 0
+3 2 64 0
+31 2 64 0
+2 3 64 0
+3 3 -218.46 0
+4 3 64 0
+32 3 64 0
+3 4 64 0
+4 4 -218.46 0
+5 4 64 0
+33 4 64 0
+4 5 64 0
+5 5 -218.46 0
+6 5 64 0
+34 5 64 0
+5 6 64 0
+6 6 -218.46 0
+7 6 64 0
+35 6 64 0
+6 7 64 0
+7 7 -218.46 0
+8 7 64 0
+36 7 64 0
+7 8 64 0
+8 8 -218.46 0
+9 8 64 0
+37 8 64 0
+8 9 64 0
+9 9 -218.46 0
+10 9 64 0
+38 9 64 0
+9 10 64 0
+10 10 -218.46 0
+11 10 64 0
+39 10 64 0
+10 11 64 0
+11 11 -218.46 0
+12 11 64 0
+40 11 64 0
+11 12 64 0
+12 12 -218.46 0
+13 12 64 0
+41 12 64 0
+12 13 64 0
+13 13 -218.46 0
+14 13 64 0
+42 13 64 0
+13 14 64 0
+14 14 -218.46 0
+15 14 64 0
+43 14 64 0
+14 15 64 0
+15 15 -218.46 0
+16 15 64 0
+44 15 64 0
+15 16 64 0
+16 16 -218.46 0
+17 16 64 0
+45 16 64 0
+16 17 64 0
+17 17 -218.46 0
+18 17 64 0
+46 17 64 0
+17 18 64 0
+18 18 -218.46 0
+19 18 64 0
+47 18 64 0
+18 19 64 0
+19 19 -218.46 0
+20 19 64 0
+48 19 64 0
+19 20 64 0
+20 20 -218.46 0
+21 20 64 0
+49 20 64 0
+20 21 64 0
+21 21 -218.46 0
+22 21 64 0
+50 21 64 0
+21 22 64 0
+22 22 -218.46 0
+23 22 64 0
+51 22 64 0
+22 23 64 0
+23 23 -218.46 0
+24 23 64 0
+52 23 64 0
+23 24 64 0
+24 24 -218.46 0
+25 24 64 0
+53 24 64 0
+24 25 64 0
+25 25 -218.46 0
+26 25 64 0
+54 25 64 0
+25 26 64 0
+26 26 -218.46 0
+27 26 64 0
+55 26 64 0
+26 27 64 0
+27 27 -218.46 0
+28 27 64 0
+56 27 64 0
+27 28 64 0
+28 28 -218.46 0
+29 28 64 0
+57 28 64 0
+28 29 64 0
+29 29 -218.46 0
+58 29 64 0
+1 30 64 0
+30 30 -218.46 0
+31 30 64 0
+59 30 64 0
+2 31 64 0
+30 31 64 0
+31 31 -218.46 0
+32 31 64 0
+60 31 64 0
+3 32 64 0
+31 32 64 0
+32 32 -218.46 0
+33 32 64 0
+61 32 64 0
+4 33 64 0
+32 33 64 0
+33 33 -218.46 0
+34 33 64 0
+62 33 64 0
+5 34 64 0
+33 34 64 0
+34 34 -218.46 0
+35 34 64 0
+63 34 64 0
+6 35 64 0
+34 35 64 0
+35 35 -218.46 0
+36 35 64 0
+64 35 64 0
+7 36 64 0
+35 36 64 0
+36 36 -218.46 0
+37 36 64 0
+65 36 64 0
+8 37 64 0
+36 37 64 0
+37 37 -218.46 0
+38 37 64 0
+66 37 64 0
+9 38 64 0
+37 38 64 0
+38 38 -218.46 0
+39 38 64 0
+67 38 64 0
+10 39 64 0
+38 39 64 0
+39 39 -218.46 0
+40 39 64 0
+68 39 64 0
+11 40 64 0
+39 40 64 0
+40 40 -218.46 0
+41 40 64 0
+69 40 64 0
+12 41 64 0
+40 41 64 0
+41 41 -218.46 0
+42 41 64 0
+70 41 64 0
+13 42 64 0
+41 42 64 0
+42 42 -218.46 0
+43 42 64 0
+71 42 64 0
+14 43 64 0
+42 43 64 0
+43 43 -218.46 0
+44 43 64 0
+72 43 64 0
+15 44 64 0
+43 44 64 0
+44 44 -218.46 0
+45 44 64 0
+73 44 64 0
+16 45 64 0
+44 45 64 0
+45 45 -218.46 0
+46 45 64 0
+74 45 64 0
+17 46 64 0
+45 46 64 0
+46 46 -218.46 0
+47 46 64 0
+75 46 64 0
+18 47 64 0
+46 47 64 0
+47 47 -218.46 0
+48 47 64 0
+76 47 64 0
+19 48 64 0
+47 48 64 0
+48 48 -218.46 0
+49 48 64 0
+77 48 64 0
+20 49 64 0
+48 49 64 0
+49 49 -218.46 0
+50 49 64 0
+78 49 64 0
+21 50 64 0
+49 50 64 0
+50 50 -218.46 0
+51 50 64 0
+79 50 64 0
+22 51 64 0
+50 51 64 0
+51 51 -218.46 0
+52 51 64 0
+80 51 64 0
+23 52 64 0
+51 52 64 0
+52 52 -218.46 0
+53 52 64 0
+81 52 64 0
+24 53 64 0
+52 53 64 0
+53 53 -218.46 0
+54 53 64 0
+82 53 64 0
+25 54 64 0
+53 54 64 0
+54 54 -218.46 0
+55 54 64 0
+83 54 64 0
+26 55 64 0
+54 55 64 0
+55 55 -218.46 0
+56 55 64 0
+84 55 64 0
+27 56 64 0
+55 56 64 0
+56 56 -218.46 0
+57 56 64 0
+85 56 64 0
+28 57 64 0
+56 57 64 0
+57 57 -218.46 0
+58 57 64 0
+86 57 64 0
+29 58 64 0
+57 58 64 0
+58 58 -218.46 0
+87 58 64 0
+30 59 64 0
+59 59 -218.46 0
+60 59 64 0
+88 59 64 0
+31 60 64 0
+59 60 64 0
+60 60 -218.46 0
+61 60 64 0
+89 60 64 0
+32 61 64 0
+60 61 64 0
+61 61 -218.46 0
+62 61 64 0
+90 61 64 0
+33 62 64 0
+61 62 64 0
+62 62 -218.46 0
+63 62 64 0
+91 62 64 0
+34 63 64 0
+62 63 64 0
+63 63 -218.46 0
+64 63 64 0
+92 63 64 0
+35 64 64 0
+63 64 64 0
+64 64 -218.46 0
+65 64 64 0
+93 64 64 0
+36 65 64 0
+64 65 64 0
+65 65 -218.46 0
+66 65 64 0
+94 65 64 0
+37 66 64 0
+65 66 64 0
+66 66 -218.46 0
+67 66 64 0
+95 66 64 0
+38 67 64 0
+66 67 64 0
+67 67 -218.46 0
+68 67 64 0
+96 67 64 0
+39 68 64 0
+67 68 64 0
+68 68 -218.46 0
+69 68 64 0
+97 68 64 0
+40 69 64 0
+68 69 64 0
+69 69 -218.46 0
+70 69 64 0
+98 69 64 0
+41 70 64 0
+69 70 64 0
+70 70 -218.46 0
+71 70 64 0
+99 70 64 0
+42 71 64 0
+70 71 64 0
+71 71 -218.46 0
+72 71 64 0
+100 71 64 0
+43 72 64 0
+71 72 64 0
+72 72 -218.46 0
+73 72 64 0
+101 72 64 0
+44 73 64 0
+72 73 64 0
+73 73 -218.46 0
+74 73 64 0
+102 73 64 0
+45 74 64 0
+73 74 64 0
+74 74 -218.46 0
+75 74 64 0
+103 74 64 0
+46 75 64 0
+74 75 64 0
+75 75 -218.46 0
+76 75 64 0
+104 75 64 0
+47 76 64 0
+75 76 64 0
+76 76 -218.46 0
+77 76 64 0
+105 76 64 0
+48 77 64 0
+76 77 64 0
+77 77 -218.46 0
+78 77 64 0
+106 77 64 0
+49 78 64 0
+77 78 64 0
+78 78 -218.46 0
+79 78 64 0
+107 78 64 0
+50 79 64 0
+78 79 64 0
+79 79 -218.46 0
+80 79 64 0
+108 79 64 0
+51 80 64 0
+79 80 64 0
+80 80 -218.46 0
+81 80 64 0
+109 80 64 0
+52 81 64 0
+80 81 64 0
+81 81 -218.46 0
+82 81 64 0
+110 81 64 0
+53 82 64 0
+81 82 64 0
+82 82 -218.46 0
+83 82 64 0
+111 82 64 0
+54 83 64 0
+82 83 64 0
+83 83 -218.46 0
+84 83 64 0
+112 83 64 0
+55 84 64 0
+83 84 64 0
+84 84 -218.46 0
+85 84 64 0
+113 84 64 0
+56 85 64 0
+84 85 64 0
+85 85 -218.46 0
+86 85 64 0
+114 85 64 0
+57 86 64 0
+85 86 64 0
+86 86 -218.46 0
+87 86 64 0
+115 86 64 0
+58 87 64 0
+86 87 64 0
+87 87 -218.46 0
+116 87 64 0
+59 88 64 0
+88 88 -218.46 0
+89 88 64 0
+117 88 64 0
+60 89 64 0
+88 89 64 0
+89 89 -218.46 0
+90 89 64 0
+118 89 64 0
+61 90 64 0
+89 90 64 0
+90 90 -218.46 0
+91 90 64 0
+119 90 64 0
+62 91 64 0
+90 91 64 0
+91 91 -218.46 0
+92 91 64 0
+120 91 64 0
+63 92 64 0
+91 92 64 0
+92 92 -218.46 0
+93 92 64 0
+121 92 64 0
+64 93 64 0
+92 93 64 0
+93 93 -218.46 0
+94 93 64 0
+122 93 64 0
+65 94 64 0
+93 94 64 0
+94 94 -218.46 0
+95 94 64 0
+123 94 64 0
+66 95 64 0
+94 95 64 0
+95 95 -218.46 0
+96 95 64 0
+124 95 64 0
+67 96 64 0
+95 96 64 0
+96 96 -218.46 0
+97 96 64 0
+125 96 64 0
+68 97 64 0
+96 97 64 0
+97 97 -218.46 0
+98 97 64 0
+126 97 64 0
+69 98 22.627 0
+97 98 22.627 0
+98 98 -63.965 -26.544
+99 98 22.627 0
+127 98 22.627 0
+70 99 22.627 0
+98 99 22.627 0
+99 99 -63.965 -26.544
+100 99 22.627 0
+128 99 22.627 0
+71 100 22.627 0
+99 100 22.627 0
+100 100 -63.965 -26.544
+101 100 22.627 0
+129 100 22.627 0
+72 101 64 0
+100 101 64 0
+101 101 -218.46 0
+102 101 64 0
+130 101 64 0
+73 102 64 0
+101 102 64 0
+102 102 -218.46 0
+103 102 64 0
+131 102 64 0
+74 103 64 0
+102 103 64 0
+103 103 -218.46 0
+104 103 64 0
+132 103 64 0
+75 104 22.627 0
+103 104 22.627 0
+104 104 -63.965 -26.544
+105 104 22.627 0
+133 104 22.627 0
+76 105 22.627 0
+104 105 22.627 0
+105 105 -63.965 -26.544
+106 105 22.627 0
+134 105 22.627 0
+77 106 22.627 0
+105 106 22.627 0
+106 106 -63.965 -26.544
+107 106 22.627 0
+135 106 22.627 0
+78 107 64 0
+106 107 64 0
+107 107 -218.46 0
+108 107 64 0
+136 107 64 0
+79 108 64 0
+107 108 64 0
+108 108 -218.46 0
+109 108 64 0
+137 108 64 0
+80 109 64 0
+108 109 64 0
+109 109 -218.46 0
+110 109 64 0
+138 109 64 0
+81 110 64 0
+109 110 64 0
+110 110 -218.46 0
+111 110 64 0
+139 110 64 0
+82 111 64 0
+110 111 64 0
+111 111 -218.46 0
+112 111 64 0
+140 111 64 0
+83 112 64 0
+111 112 64 0
+112 112 -218.46 0
+113 112 64 0
+141 112 64 0
+84 113 64 0
+112 113 64 0
+113 113 -218.46 0
+114 113 64 0
+142 113 64 0
+85 114 64 0
+113 114 64 0
+114 114 -218.46 0
+115 114 64 0
+143 114 64 0
+86 115 64 0
+114 115 64 0
+115 115 -218.46 0
+116 115 64 0
+144 115 64 0
+87 116 64 0
+115 116 64 0
+116 116 -218.46 0
+145 116 64 0
+88 117 64 0
+117 117 -218.46 0
+118 117 64 0
+146 117 64 0
+89 118 64 0
+117 118 64 0
+118 118 -218.46 0
+119 118 64 0
+147 118 64 0
+90 119 64 0
+118 119 64 0
+119 119 -218.46 0
+120 119 64 0
+148 119 64 0
+91 120 64 0
+119 120 64 0
+120 120 -218.46 0
+121 120 64 0
+149 120 64 0
+92 121 64 0
+120 121 64 0
+121 121 -218.46 0
+122 121 64 0
+150 121 64 0
+93 122 64 0
+121 122 64 0
+122 122 -218.46 0
+123 122 64 0
+151 122 64 0
+94 123 64 0
+122 123 64 0
+123 123 -218.46 0
+124 123 64 0
+152 123 64 0
+95 124 64 0
+123 124 64 0
+124 124 -218.46 0
+125 124 64 0
+153 124 64 0
+96 125 22.627 0
+124 125 22.627 0
+125 125 -63.965 -26.544
+126 125 22.627 0
+154 125 22.627 0
+97 126 22.627 0
+125 126 22.627 0
+126 126 -63.965 -26.544
+127 126 22.627 0
+155 126 22.627 0
+98 127 22.627 0
+126 127 22.627 0
+127 127 -63.965 -26.544
+128 127 22.627 0
+156 127 22.627 0
+99 128 22.627 0
+127 128 22.627 0
+128 128 -63.965 -26.544
+129 128 22.627 0
+157 128 22.627 0
+100 129 6.4e-5 0
+128 129 6.4e-5 0
+129 129 -.00021846 -37.54
+130 129 6.4e-5 0
+158 129 6.4e-5 0
+101 130 64 0
+129 130 64 0
+130 130 -218.46 0
+131 130 64 0
+159 130 64 0
+102 131 64 0
+130 131 64 0
+131 131 -218.46 0
+132 131 64 0
+160 131 64 0
+103 132 64 0
+131 132 64 0
+132 132 -218.46 0
+133 132 64 0
+161 132 64 0
+104 133 6.4e-5 0
+132 133 6.4e-5 0
+133 133 -.00021846 -37.54
+134 133 6.4e-5 0
+162 133 6.4e-5 0
+105 134 22.627 0
+133 134 22.627 0
+134 134 -63.965 -26.544
+135 134 22.627 0
+163 134 22.627 0
+106 135 22.627 0
+134 135 22.627 0
+135 135 -63.965 -26.544
+136 135 22.627 0
+164 135 22.627 0
+107 136 22.627 0
+135 136 22.627 0
+136 136 -63.965 -26.544
+137 136 22.627 0
+165 136 22.627 0
+108 137 22.627 0
+136 137 22.627 0
+137 137 -63.965 -26.544
+138 137 22.627 0
+166 137 22.627 0
+109 138 64 0
+137 138 64 0
+138 138 -218.46 0
+139 138 64 0
+167 138 64 0
+110 139 64 0
+138 139 64 0
+139 139 -218.46 0
+140 139 64 0
+168 139 64 0
+111 140 64 0
+139 140 64 0
+140 140 -218.46 0
+141 140 64 0
+169 140 64 0
+112 141 64 0
+140 141 64 0
+141 141 -218.46 0
+142 141 64 0
+170 141 64 0
+113 142 64 0
+141 142 64 0
+142 142 -218.46 0
+143 142 64 0
+171 142 64 0
+114 143 64 0
+142 143 64 0
+143 143 -218.46 0
+144 143 64 0
+172 143 64 0
+115 144 64 0
+143 144 64 0
+144 144 -218.46 0
+145 144 64 0
+173 144 64 0
+116 145 64 0
+144 145 64 0
+145 145 -218.46 0
+174 145 64 0
+117 146 64 0
+146 146 -218.46 0
+147 146 64 0
+175 146 64 0
+118 147 64 0
+146 147 64 0
+147 147 -218.46 0
+148 147 64 0
+176 147 64 0
+119 148 64 0
+147 148 64 0
+148 148 -218.46 0
+149 148 64 0
+177 148 64 0
+120 149 64 0
+148 149 64 0
+149 149 -218.46 0
+150 149 64 0
+178 149 64 0
+121 150 64 0
+149 150 64 0
+150 150 -218.46 0
+151 150 64 0
+179 150 64 0
+122 151 64 0
+150 151 64 0
+151 151 -218.46 0
+152 151 64 0
+180 151 64 0
+123 152 64 0
+151 152 64 0
+152 152 -218.46 0
+153 152 64 0
+181 152 64 0
+124 153 22.627 0
+152 153 22.627 0
+153 153 -63.965 -26.544
+154 153 22.627 0
+182 153 22.627 0
+125 154 22.627 0
+153 154 22.627 0
+154 154 -63.965 -26.544
+155 154 22.627 0
+183 154 22.627 0
+126 155 6.4e-5 0
+154 155 6.4e-5 0
+155 155 -.00021846 -37.54
+156 155 6.4e-5 0
+184 155 6.4e-5 0
+127 156 6.4e-5 0
+155 156 6.4e-5 0
+156 156 -.00021846 -37.54
+157 156 6.4e-5 0
+185 156 6.4e-5 0
+128 157 6.4e-5 0
+156 157 6.4e-5 0
+157 157 -.00021846 -37.54
+158 157 6.4e-5 0
+186 157 6.4e-5 0
+129 158 6.4e-5 0
+157 158 6.4e-5 0
+158 158 -.00021846 -37.54
+159 158 6.4e-5 0
+187 158 6.4e-5 0
+130 159 64 0
+158 159 64 0
+159 159 -218.46 0
+160 159 64 0
+188 159 64 0
+131 160 64 0
+159 160 64 0
+160 160 -218.46 0
+161 160 64 0
+189 160 64 0
+132 161 64 0
+160 161 64 0
+161 161 -218.46 0
+162 161 64 0
+190 161 64 0
+133 162 6.4e-5 0
+161 162 6.4e-5 0
+162 162 -.00021846 -37.54
+163 162 6.4e-5 0
+191 162 6.4e-5 0
+134 163 6.4e-5 0
+162 163 6.4e-5 0
+163 163 -.00021846 -37.54
+164 163 6.4e-5 0
+192 163 6.4e-5 0
+135 164 6.4e-5 0
+163 164 6.4e-5 0
+164 164 -.00021846 -37.54
+165 164 6.4e-5 0
+193 164 6.4e-5 0
+136 165 6.4e-5 0
+164 165 6.4e-5 0
+165 165 -.00021846 -37.54
+166 165 6.4e-5 0
+194 165 6.4e-5 0
+137 166 22.627 0
+165 166 22.627 0
+166 166 -63.965 -26.544
+167 166 22.627 0
+195 166 22.627 0
+138 167 22.627 0
+166 167 22.627 0
+167 167 -63.965 -26.544
+168 167 22.627 0
+196 167 22.627 0
+139 168 64 0
+167 168 64 0
+168 168 -218.46 0
+169 168 64 0
+197 168 64 0
+140 169 64 0
+168 169 64 0
+169 169 -218.46 0
+170 169 64 0
+198 169 64 0
+141 170 64 0
+169 170 64 0
+170 170 -218.46 0
+171 170 64 0
+199 170 64 0
+142 171 64 0
+170 171 64 0
+171 171 -218.46 0
+172 171 64 0
+200 171 64 0
+143 172 64 0
+171 172 64 0
+172 172 -218.46 0
+173 172 64 0
+201 172 64 0
+144 173 64 0
+172 173 64 0
+173 173 -218.46 0
+174 173 64 0
+202 173 64 0
+145 174 64 0
+173 174 64 0
+174 174 -218.46 0
+203 174 64 0
+146 175 64 0
+175 175 -218.46 0
+176 175 64 0
+204 175 64 0
+147 176 64 0
+175 176 64 0
+176 176 -218.46 0
+177 176 64 0
+205 176 64 0
+148 177 64 0
+176 177 64 0
+177 177 -218.46 0
+178 177 64 0
+206 177 64 0
+149 178 64 0
+177 178 64 0
+178 178 -218.46 0
+179 178 64 0
+207 178 64 0
+150 179 64 0
+178 179 64 0
+179 179 -218.46 0
+180 179 64 0
+208 179 64 0
+151 180 64 0
+179 180 64 0
+180 180 -218.46 0
+181 180 64 0
+209 180 64 0
+152 181 22.627 0
+180 181 22.627 0
+181 181 -63.965 -26.544
+182 181 22.627 0
+210 181 22.627 0
+153 182 22.627 0
+181 182 22.627 0
+182 182 -63.965 -26.544
+183 182 22.627 0
+211 182 22.627 0
+154 183 6.4e-5 0
+182 183 6.4e-5 0
+183 183 -.00021846 -37.54
+184 183 6.4e-5 0
+212 183 6.4e-5 0
+155 184 6.4e-5 0
+183 184 6.4e-5 0
+184 184 -.00021846 -37.54
+185 184 6.4e-5 0
+213 184 6.4e-5 0
+156 185 6.4e-5 0
+184 185 6.4e-5 0
+185 185 -.00021846 -37.54
+186 185 6.4e-5 0
+214 185 6.4e-5 0
+157 186 64 0
+185 186 64 0
+186 186 -218.46 0
+187 186 64 0
+215 186 64 0
+158 187 64 0
+186 187 64 0
+187 187 -218.46 0
+188 187 64 0
+216 187 64 0
+159 188 64 0
+187 188 64 0
+188 188 -218.46 0
+189 188 64 0
+217 188 64 0
+160 189 64 0
+188 189 64 0
+189 189 -218.46 0
+190 189 64 0
+218 189 64 0
+161 190 64 0
+189 190 64 0
+190 190 -218.46 0
+191 190 64 0
+219 190 64 0
+162 191 64 0
+190 191 64 0
+191 191 -218.46 0
+192 191 64 0
+220 191 64 0
+163 192 64 0
+191 192 64 0
+192 192 -218.46 0
+193 192 64 0
+221 192 64 0
+164 193 6.4e-5 0
+192 193 6.4e-5 0
+193 193 -.00021846 -37.54
+194 193 6.4e-5 0
+222 193 6.4e-5 0
+165 194 6.4e-5 0
+193 194 6.4e-5 0
+194 194 -.00021846 -37.54
+195 194 6.4e-5 0
+223 194 6.4e-5 0
+166 195 6.4e-5 0
+194 195 6.4e-5 0
+195 195 -.00021846 -37.54
+196 195 6.4e-5 0
+224 195 6.4e-5 0
+167 196 22.627 0
+195 196 22.627 0
+196 196 -63.965 -26.544
+197 196 22.627 0
+225 196 22.627 0
+168 197 22.627 0
+196 197 22.627 0
+197 197 -63.965 -26.544
+198 197 22.627 0
+226 197 22.627 0
+169 198 64 0
+197 198 64 0
+198 198 -218.46 0
+199 198 64 0
+227 198 64 0
+170 199 64 0
+198 199 64 0
+199 199 -218.46 0
+200 199 64 0
+228 199 64 0
+171 200 64 0
+199 200 64 0
+200 200 -218.46 0
+201 200 64 0
+229 200 64 0
+172 201 64 0
+200 201 64 0
+201 201 -218.46 0
+202 201 64 0
+230 201 64 0
+173 202 64 0
+201 202 64 0
+202 202 -218.46 0
+203 202 64 0
+231 202 64 0
+174 203 64 0
+202 203 64 0
+203 203 -218.46 0
+232 203 64 0
+175 204 64 0
+204 204 -218.46 0
+205 204 64 0
+233 204 64 0
+176 205 64 0
+204 205 64 0
+205 205 -218.46 0
+206 205 64 0
+234 205 64 0
+177 206 64 0
+205 206 64 0
+206 206 -218.46 0
+207 206 64 0
+235 206 64 0
+178 207 64 0
+206 207 64 0
+207 207 -218.46 0
+208 207 64 0
+236 207 64 0
+179 208 64 0
+207 208 64 0
+208 208 -218.46 0
+209 208 64 0
+237 208 64 0
+180 209 22.627 0
+208 209 22.627 0
+209 209 -63.965 -26.544
+210 209 22.627 0
+238 209 22.627 0
+181 210 22.627 0
+209 210 22.627 0
+210 210 -63.965 -26.544
+211 210 22.627 0
+239 210 22.627 0
+182 211 6.4e-5 0
+210 211 6.4e-5 0
+211 211 -.00021846 -37.54
+212 211 6.4e-5 0
+240 211 6.4e-5 0
+183 212 6.4e-5 0
+211 212 6.4e-5 0
+212 212 -.00021846 -37.54
+213 212 6.4e-5 0
+241 212 6.4e-5 0
+184 213 64 0
+212 213 64 0
+213 213 -218.46 0
+214 213 64 0
+242 213 64 0
+185 214 64 0
+213 214 64 0
+214 214 -218.46 0
+215 214 64 0
+243 214 64 0
+186 215 64 0
+214 215 64 0
+215 215 -218.46 0
+216 215 64 0
+244 215 64 0
+187 216 64 0
+215 216 64 0
+216 216 -218.46 0
+217 216 64 0
+245 216 64 0
+188 217 64 0
+216 217 64 0
+217 217 -218.46 0
+218 217 64 0
+246 217 64 0
+189 218 64 0
+217 218 64 0
+218 218 -218.46 0
+219 218 64 0
+247 218 64 0
+190 219 64 0
+218 219 64 0
+219 219 -218.46 0
+220 219 64 0
+248 219 64 0
+191 220 64 0
+219 220 64 0
+220 220 -218.46 0
+221 220 64 0
+249 220 64 0
+192 221 64 0
+220 221 64 0
+221 221 -218.46 0
+222 221 64 0
+250 221 64 0
+193 222 64 0
+221 222 64 0
+222 222 -218.46 0
+223 222 64 0
+251 222 64 0
+194 223 64 0
+222 223 64 0
+223 223 -218.46 0
+224 223 64 0
+252 223 64 0
+195 224 6.4e-5 0
+223 224 6.4e-5 0
+224 224 -.00021846 -37.54
+225 224 6.4e-5 0
+253 224 6.4e-5 0
+196 225 6.4e-5 0
+224 225 6.4e-5 0
+225 225 -.00021846 -37.54
+226 225 6.4e-5 0
+254 225 6.4e-5 0
+197 226 22.627 0
+225 226 22.627 0
+226 226 -63.965 -26.544
+227 226 22.627 0
+255 226 22.627 0
+198 227 22.627 0
+226 227 22.627 0
+227 227 -63.965 -26.544
+228 227 22.627 0
+256 227 22.627 0
+199 228 64 0
+227 228 64 0
+228 228 -218.46 0
+229 228 64 0
+257 228 64 0
+200 229 64 0
+228 229 64 0
+229 229 -218.46 0
+230 229 64 0
+258 229 64 0
+201 230 64 0
+229 230 64 0
+230 230 -218.46 0
+231 230 64 0
+259 230 64 0
+202 231 64 0
+230 231 64 0
+231 231 -218.46 0
+232 231 64 0
+260 231 64 0
+203 232 64 0
+231 232 64 0
+232 232 -218.46 0
+261 232 64 0
+204 233 64 0
+233 233 -218.46 0
+234 233 64 0
+262 233 64 0
+205 234 64 0
+233 234 64 0
+234 234 -218.46 0
+235 234 64 0
+263 234 64 0
+206 235 64 0
+234 235 64 0
+235 235 -218.46 0
+236 235 64 0
+264 235 64 0
+207 236 64 0
+235 236 64 0
+236 236 -218.46 0
+237 236 64 0
+265 236 64 0
+208 237 22.627 0
+236 237 22.627 0
+237 237 -63.965 -26.544
+238 237 22.627 0
+266 237 22.627 0
+209 238 22.627 0
+237 238 22.627 0
+238 238 -63.965 -26.544
+239 238 22.627 0
+267 238 22.627 0
+210 239 6.4e-5 0
+238 239 6.4e-5 0
+239 239 -.00021846 -37.54
+240 239 6.4e-5 0
+268 239 6.4e-5 0
+211 240 6.4e-5 0
+239 240 6.4e-5 0
+240 240 -.00021846 -37.54
+241 240 6.4e-5 0
+269 240 6.4e-5 0
+212 241 64 0
+240 241 64 0
+241 241 -218.46 0
+242 241 64 0
+270 241 64 0
+213 242 64 0
+241 242 64 0
+242 242 -218.46 0
+243 242 64 0
+271 242 64 0
+214 243 64 0
+242 243 64 0
+243 243 -218.46 0
+244 243 64 0
+272 243 64 0
+215 244 64 0
+243 244 64 0
+244 244 -218.46 0
+245 244 64 0
+273 244 64 0
+216 245 64 0
+244 245 64 0
+245 245 -218.46 0
+246 245 64 0
+274 245 64 0
+217 246 64 0
+245 246 64 0
+246 246 -218.46 0
+247 246 64 0
+275 246 64 0
+218 247 64 0
+246 247 64 0
+247 247 -218.46 0
+248 247 64 0
+276 247 64 0
+219 248 64 0
+247 248 64 0
+248 248 -218.46 0
+249 248 64 0
+277 248 64 0
+220 249 64 0
+248 249 64 0
+249 249 -218.46 0
+250 249 64 0
+278 249 64 0
+221 250 64 0
+249 250 64 0
+250 250 -218.46 0
+251 250 64 0
+279 250 64 0
+222 251 64 0
+250 251 64 0
+251 251 -218.46 0
+252 251 64 0
+280 251 64 0
+223 252 64 0
+251 252 64 0
+252 252 -218.46 0
+253 252 64 0
+281 252 64 0
+224 253 64 0
+252 253 64 0
+253 253 -218.46 0
+254 253 64 0
+282 253 64 0
+225 254 6.4e-5 0
+253 254 6.4e-5 0
+254 254 -.00021846 -37.54
+255 254 6.4e-5 0
+283 254 6.4e-5 0
+226 255 6.4e-5 0
+254 255 6.4e-5 0
+255 255 -.00021846 -37.54
+256 255 6.4e-5 0
+284 255 6.4e-5 0
+227 256 22.627 0
+255 256 22.627 0
+256 256 -63.965 -26.544
+257 256 22.627 0
+285 256 22.627 0
+228 257 22.627 0
+256 257 22.627 0
+257 257 -63.965 -26.544
+258 257 22.627 0
+286 257 22.627 0
+229 258 64 0
+257 258 64 0
+258 258 -218.46 0
+259 258 64 0
+287 258 64 0
+230 259 64 0
+258 259 64 0
+259 259 -218.46 0
+260 259 64 0
+288 259 64 0
+231 260 64 0
+259 260 64 0
+260 260 -218.46 0
+261 260 64 0
+289 260 64 0
+232 261 64 0
+260 261 64 0
+261 261 -218.46 0
+290 261 64 0
+233 262 64 0
+262 262 -218.46 0
+263 262 64 0
+291 262 64 0
+234 263 64 0
+262 263 64 0
+263 263 -218.46 0
+264 263 64 0
+292 263 64 0
+235 264 64 0
+263 264 64 0
+264 264 -218.46 0
+265 264 64 0
+293 264 64 0
+236 265 64 0
+264 265 64 0
+265 265 -218.46 0
+266 265 64 0
+294 265 64 0
+237 266 22.627 0
+265 266 22.627 0
+266 266 -63.965 -26.544
+267 266 22.627 0
+295 266 22.627 0
+238 267 6.4e-5 0
+266 267 6.4e-5 0
+267 267 -.00021846 -37.54
+268 267 6.4e-5 0
+296 267 6.4e-5 0
+239 268 6.4e-5 0
+267 268 6.4e-5 0
+268 268 -.00021846 -37.54
+269 268 6.4e-5 0
+297 268 6.4e-5 0
+240 269 64 0
+268 269 64 0
+269 269 -218.46 0
+270 269 64 0
+298 269 64 0
+241 270 64 0
+269 270 64 0
+270 270 -218.46 0
+271 270 64 0
+299 270 64 0
+242 271 64 0
+270 271 64 0
+271 271 -218.46 0
+272 271 64 0
+300 271 64 0
+243 272 64 0
+271 272 64 0
+272 272 -218.46 0
+273 272 64 0
+301 272 64 0
+244 273 64 0
+272 273 64 0
+273 273 -218.46 0
+274 273 64 0
+302 273 64 0
+245 274 64 0
+273 274 64 0
+274 274 -218.46 0
+275 274 64 0
+303 274 64 0
+246 275 64 0
+274 275 64 0
+275 275 -218.46 0
+276 275 64 0
+304 275 64 0
+247 276 64 0
+275 276 64 0
+276 276 -218.46 0
+277 276 64 0
+305 276 64 0
+248 277 64 0
+276 277 64 0
+277 277 -218.46 0
+278 277 64 0
+306 277 64 0
+249 278 64 0
+277 278 64 0
+278 278 -218.46 0
+279 278 64 0
+307 278 64 0
+250 279 64 0
+278 279 64 0
+279 279 -218.46 0
+280 279 64 0
+308 279 64 0
+251 280 64 0
+279 280 64 0
+280 280 -218.46 0
+281 280 64 0
+309 280 64 0
+252 281 64 0
+280 281 64 0
+281 281 -218.46 0
+282 281 64 0
+310 281 64 0
+253 282 64 0
+281 282 64 0
+282 282 -218.46 0
+283 282 64 0
+311 282 64 0
+254 283 64 0
+282 283 64 0
+283 283 -218.46 0
+284 283 64 0
+312 283 64 0
+255 284 6.4e-5 0
+283 284 6.4e-5 0
+284 284 -.00021846 -37.54
+285 284 6.4e-5 0
+313 284 6.4e-5 0
+256 285 6.4e-5 0
+284 285 6.4e-5 0
+285 285 -.00021846 -37.54
+286 285 6.4e-5 0
+314 285 6.4e-5 0
+257 286 22.627 0
+285 286 22.627 0
+286 286 -63.965 -26.544
+287 286 22.627 0
+315 286 22.627 0
+258 287 64 0
+286 287 64 0
+287 287 -218.46 0
+288 287 64 0
+316 287 64 0
+259 288 64 0
+287 288 64 0
+288 288 -218.46 0
+289 288 64 0
+317 288 64 0
+260 289 64 0
+288 289 64 0
+289 289 -218.46 0
+290 289 64 0
+318 289 64 0
+261 290 64 0
+289 290 64 0
+290 290 -218.46 0
+319 290 64 0
+262 291 64 0
+291 291 -218.46 0
+292 291 64 0
+320 291 64 0
+263 292 64 0
+291 292 64 0
+292 292 -218.46 0
+293 292 64 0
+321 292 64 0
+264 293 64 0
+292 293 64 0
+293 293 -218.46 0
+294 293 64 0
+322 293 64 0
+265 294 22.627 0
+293 294 22.627 0
+294 294 -63.965 -26.544
+295 294 22.627 0
+323 294 22.627 0
+266 295 22.627 0
+294 295 22.627 0
+295 295 -63.965 -26.544
+296 295 22.627 0
+324 295 22.627 0
+267 296 6.4e-5 0
+295 296 6.4e-5 0
+296 296 -.00021846 -37.54
+297 296 6.4e-5 0
+325 296 6.4e-5 0
+268 297 6.4e-5 0
+296 297 6.4e-5 0
+297 297 -.00021846 -37.54
+298 297 6.4e-5 0
+326 297 6.4e-5 0
+269 298 64 0
+297 298 64 0
+298 298 -218.46 0
+299 298 64 0
+327 298 64 0
+270 299 64 0
+298 299 64 0
+299 299 -218.46 0
+300 299 64 0
+328 299 64 0
+271 300 64 0
+299 300 64 0
+300 300 -218.46 0
+301 300 64 0
+329 300 64 0
+272 301 64 0
+300 301 64 0
+301 301 -218.46 0
+302 301 64 0
+330 301 64 0
+273 302 64 0
+301 302 64 0
+302 302 -218.46 0
+303 302 64 0
+331 302 64 0
+274 303 64 0
+302 303 64 0
+303 303 -218.46 0
+304 303 64 0
+332 303 64 0
+275 304 64 0
+303 304 64 0
+304 304 -218.46 0
+305 304 64 0
+333 304 64 0
+276 305 64 0
+304 305 64 0
+305 305 -218.46 0
+306 305 64 0
+334 305 64 0
+277 306 64 0
+305 306 64 0
+306 306 -218.46 0
+307 306 64 0
+335 306 64 0
+278 307 64 0
+306 307 64 0
+307 307 -218.46 0
+308 307 64 0
+336 307 64 0
+279 308 64 0
+307 308 64 0
+308 308 -218.46 0
+309 308 64 0
+337 308 64 0
+280 309 64 0
+308 309 64 0
+309 309 -218.46 0
+310 309 64 0
+338 309 64 0
+281 310 64 0
+309 310 64 0
+310 310 -218.46 0
+311 310 64 0
+339 310 64 0
+282 311 64 0
+310 311 64 0
+311 311 -218.46 0
+312 311 64 0
+340 311 64 0
+283 312 64 0
+311 312 64 0
+312 312 -218.46 0
+313 312 64 0
+341 312 64 0
+284 313 6.4e-5 0
+312 313 6.4e-5 0
+313 313 -.00021846 -37.54
+314 313 6.4e-5 0
+342 313 6.4e-5 0
+285 314 6.4e-5 0
+313 314 6.4e-5 0
+314 314 -.00021846 -37.54
+315 314 6.4e-5 0
+343 314 6.4e-5 0
+286 315 22.627 0
+314 315 22.627 0
+315 315 -63.965 -26.544
+316 315 22.627 0
+344 315 22.627 0
+287 316 22.627 0
+315 316 22.627 0
+316 316 -63.965 -26.544
+317 316 22.627 0
+345 316 22.627 0
+288 317 64 0
+316 317 64 0
+317 317 -218.46 0
+318 317 64 0
+346 317 64 0
+289 318 64 0
+317 318 64 0
+318 318 -218.46 0
+319 318 64 0
+347 318 64 0
+290 319 64 0
+318 319 64 0
+319 319 -218.46 0
+348 319 64 0
+291 320 64 0
+320 320 -218.46 0
+321 320 64 0
+349 320 64 0
+292 321 64 0
+320 321 64 0
+321 321 -218.46 0
+322 321 64 0
+350 321 64 0
+293 322 64 0
+321 322 64 0
+322 322 -218.46 0
+323 322 64 0
+351 322 64 0
+294 323 22.627 0
+322 323 22.627 0
+323 323 -63.965 -26.544
+324 323 22.627 0
+352 323 22.627 0
+295 324 22.627 0
+323 324 22.627 0
+324 324 -63.965 -26.544
+325 324 22.627 0
+353 324 22.627 0
+296 325 6.4e-5 0
+324 325 6.4e-5 0
+325 325 -.00021846 -37.54
+326 325 6.4e-5 0
+354 325 6.4e-5 0
+297 326 64 0
+325 326 64 0
+326 326 -218.46 0
+327 326 64 0
+355 326 64 0
+298 327 64 0
+326 327 64 0
+327 327 -218.46 0
+328 327 64 0
+356 327 64 0
+299 328 64 0
+327 328 64 0
+328 328 -218.46 0
+329 328 64 0
+357 328 64 0
+300 329 64 0
+328 329 64 0
+329 329 -218.46 0
+330 329 64 0
+358 329 64 0
+301 330 64 0
+329 330 64 0
+330 330 -218.46 0
+331 330 64 0
+359 330 64 0
+302 331 64 0
+330 331 64 0
+331 331 -218.46 0
+332 331 64 0
+360 331 64 0
+303 332 64 0
+331 332 64 0
+332 332 -218.46 0
+333 332 64 0
+361 332 64 0
+304 333 64 0
+332 333 64 0
+333 333 -218.46 0
+334 333 64 0
+362 333 64 0
+305 334 64 0
+333 334 64 0
+334 334 -218.46 0
+335 334 64 0
+363 334 64 0
+306 335 64 0
+334 335 64 0
+335 335 -218.46 0
+336 335 64 0
+364 335 64 0
+307 336 64 0
+335 336 64 0
+336 336 -218.46 0
+337 336 64 0
+365 336 64 0
+308 337 64 0
+336 337 64 0
+337 337 -218.46 0
+338 337 64 0
+366 337 64 0
+309 338 64 0
+337 338 64 0
+338 338 -218.46 0
+339 338 64 0
+367 338 64 0
+310 339 64 0
+338 339 64 0
+339 339 -218.46 0
+340 339 64 0
+368 339 64 0
+311 340 64 0
+339 340 64 0
+340 340 -218.46 0
+341 340 64 0
+369 340 64 0
+312 341 64 0
+340 341 64 0
+341 341 -218.46 0
+342 341 64 0
+370 341 64 0
+313 342 64 0
+341 342 64 0
+342 342 -218.46 0
+343 342 64 0
+371 342 64 0
+314 343 6.4e-5 0
+342 343 6.4e-5 0
+343 343 -.00021846 -37.54
+344 343 6.4e-5 0
+372 343 6.4e-5 0
+315 344 22.627 0
+343 344 22.627 0
+344 344 -63.965 -26.544
+345 344 22.627 0
+373 344 22.627 0
+316 345 22.627 0
+344 345 22.627 0
+345 345 -63.965 -26.544
+346 345 22.627 0
+374 345 22.627 0
+317 346 64 0
+345 346 64 0
+346 346 -218.46 0
+347 346 64 0
+375 346 64 0
+318 347 64 0
+346 347 64 0
+347 347 -218.46 0
+348 347 64 0
+376 347 64 0
+319 348 64 0
+347 348 64 0
+348 348 -218.46 0
+377 348 64 0
+320 349 64 0
+349 349 -218.46 0
+350 349 64 0
+378 349 64 0
+321 350 64 0
+349 350 64 0
+350 350 -218.46 0
+351 350 64 0
+379 350 64 0
+322 351 64 0
+350 351 64 0
+351 351 -218.46 0
+352 351 64 0
+380 351 64 0
+323 352 22.627 0
+351 352 22.627 0
+352 352 -63.965 -26.544
+353 352 22.627 0
+381 352 22.627 0
+324 353 6.4e-5 0
+352 353 6.4e-5 0
+353 353 -.00021846 -37.54
+354 353 6.4e-5 0
+382 353 6.4e-5 0
+325 354 6.4e-5 0
+353 354 6.4e-5 0
+354 354 -.00021846 -37.54
+355 354 6.4e-5 0
+383 354 6.4e-5 0
+326 355 64 0
+354 355 64 0
+355 355 -218.46 0
+356 355 64 0
+384 355 64 0
+327 356 64 0
+355 356 64 0
+356 356 -218.46 0
+357 356 64 0
+385 356 64 0
+328 357 64 0
+356 357 64 0
+357 357 -218.46 0
+358 357 64 0
+386 357 64 0
+329 358 64 0
+357 358 64 0
+358 358 -218.46 0
+359 358 64 0
+387 358 64 0
+330 359 64 0
+358 359 64 0
+359 359 -218.46 0
+360 359 64 0
+388 359 64 0
+331 360 64 0
+359 360 64 0
+360 360 -218.46 0
+361 360 64 0
+389 360 64 0
+332 361 64 0
+360 361 64 0
+361 361 -218.46 0
+362 361 64 0
+390 361 64 0
+333 362 64 0
+361 362 64 0
+362 362 -218.46 0
+363 362 64 0
+391 362 64 0
+334 363 64 0
+362 363 64 0
+363 363 -218.46 0
+364 363 64 0
+392 363 64 0
+335 364 64 0
+363 364 64 0
+364 364 -218.46 0
+365 364 64 0
+393 364 64 0
+336 365 64 0
+364 365 64 0
+365 365 -218.46 0
+366 365 64 0
+394 365 64 0
+337 366 64 0
+365 366 64 0
+366 366 -218.46 0
+367 366 64 0
+395 366 64 0
+338 367 64 0
+366 367 64 0
+367 367 -218.46 0
+368 367 64 0
+396 367 64 0
+339 368 64 0
+367 368 64 0
+368 368 -218.46 0
+369 368 64 0
+397 368 64 0
+340 369 64 0
+368 369 64 0
+369 369 -218.46 0
+370 369 64 0
+398 369 64 0
+341 370 64 0
+369 370 64 0
+370 370 -218.46 0
+371 370 64 0
+399 370 64 0
+342 371 64 0
+370 371 64 0
+371 371 -218.46 0
+372 371 64 0
+400 371 64 0
+343 372 6.4e-5 0
+371 372 6.4e-5 0
+372 372 -.00021846 -37.54
+373 372 6.4e-5 0
+401 372 6.4e-5 0
+344 373 6.4e-5 0
+372 373 6.4e-5 0
+373 373 -.00021846 -37.54
+374 373 6.4e-5 0
+402 373 6.4e-5 0
+345 374 22.627 0
+373 374 22.627 0
+374 374 -63.965 -26.544
+375 374 22.627 0
+403 374 22.627 0
+346 375 64 0
+374 375 64 0
+375 375 -218.46 0
+376 375 64 0
+404 375 64 0
+347 376 64 0
+375 376 64 0
+376 376 -218.46 0
+377 376 64 0
+405 376 64 0
+348 377 64 0
+376 377 64 0
+377 377 -218.46 0
+406 377 64 0
+349 378 64 0
+378 378 -218.46 0
+379 378 64 0
+407 378 64 0
+350 379 64 0
+378 379 64 0
+379 379 -218.46 0
+380 379 64 0
+408 379 64 0
+351 380 64 0
+379 380 64 0
+380 380 -218.46 0
+381 380 64 0
+409 380 64 0
+352 381 22.627 0
+380 381 22.627 0
+381 381 -63.965 -26.544
+382 381 22.627 0
+410 381 22.627 0
+353 382 6.4e-5 0
+381 382 6.4e-5 0
+382 382 -.00021846 -37.54
+383 382 6.4e-5 0
+411 382 6.4e-5 0
+354 383 6.4e-5 0
+382 383 6.4e-5 0
+383 383 -.00021846 -37.54
+384 383 6.4e-5 0
+412 383 6.4e-5 0
+355 384 64 0
+383 384 64 0
+384 384 -218.46 0
+385 384 64 0
+413 384 64 0
+356 385 64 0
+384 385 64 0
+385 385 -218.46 0
+386 385 64 0
+414 385 64 0
+357 386 64 0
+385 386 64 0
+386 386 -218.46 0
+387 386 64 0
+415 386 64 0
+358 387 64 0
+386 387 64 0
+387 387 -218.46 0
+388 387 64 0
+416 387 64 0
+359 388 64 0
+387 388 64 0
+388 388 -218.46 0
+389 388 64 0
+417 388 64 0
+360 389 64 0
+388 389 64 0
+389 389 -218.46 0
+390 389 64 0
+418 389 64 0
+361 390 64 0
+389 390 64 0
+390 390 -218.46 0
+391 390 64 0
+419 390 64 0
+362 391 64 0
+390 391 64 0
+391 391 -218.46 0
+392 391 64 0
+420 391 64 0
+363 392 64 0
+391 392 64 0
+392 392 -218.46 0
+393 392 64 0
+421 392 64 0
+364 393 64 0
+392 393 64 0
+393 393 -218.46 0
+394 393 64 0
+422 393 64 0
+365 394 64 0
+393 394 64 0
+394 394 -218.46 0
+395 394 64 0
+423 394 64 0
+366 395 64 0
+394 395 64 0
+395 395 -218.46 0
+396 395 64 0
+424 395 64 0
+367 396 64 0
+395 396 64 0
+396 396 -218.46 0
+397 396 64 0
+425 396 64 0
+368 397 64 0
+396 397 64 0
+397 397 -218.46 0
+398 397 64 0
+426 397 64 0
+369 398 64 0
+397 398 64 0
+398 398 -218.46 0
+399 398 64 0
+427 398 64 0
+370 399 64 0
+398 399 64 0
+399 399 -218.46 0
+400 399 64 0
+428 399 64 0
+371 400 64 0
+399 400 64 0
+400 400 -218.46 0
+401 400 64 0
+429 400 64 0
+372 401 6.4e-5 0
+400 401 6.4e-5 0
+401 401 -.00021846 -37.54
+402 401 6.4e-5 0
+430 401 6.4e-5 0
+373 402 6.4e-5 0
+401 402 6.4e-5 0
+402 402 -.00021846 -37.54
+403 402 6.4e-5 0
+431 402 6.4e-5 0
+374 403 22.627 0
+402 403 22.627 0
+403 403 -63.965 -26.544
+404 403 22.627 0
+432 403 22.627 0
+375 404 64 0
+403 404 64 0
+404 404 -218.46 0
+405 404 64 0
+433 404 64 0
+376 405 64 0
+404 405 64 0
+405 405 -218.46 0
+406 405 64 0
+434 405 64 0
+377 406 64 0
+405 406 64 0
+406 406 -218.46 0
+435 406 64 0
+378 407 64 0
+407 407 -218.46 0
+408 407 64 0
+436 407 64 0
+379 408 64 0
+407 408 64 0
+408 408 -218.46 0
+409 408 64 0
+437 408 64 0
+380 409 22.627 0
+408 409 22.627 0
+409 409 -63.965 -26.544
+410 409 22.627 0
+438 409 22.627 0
+381 410 22.627 0
+409 410 22.627 0
+410 410 -63.965 -26.544
+411 410 22.627 0
+439 410 22.627 0
+382 411 6.4e-5 0
+410 411 6.4e-5 0
+411 411 -.00021846 -37.54
+412 411 6.4e-5 0
+440 411 6.4e-5 0
+383 412 6.4e-5 0
+411 412 6.4e-5 0
+412 412 -.00021846 -37.54
+413 412 6.4e-5 0
+441 412 6.4e-5 0
+384 413 64 0
+412 413 64 0
+413 413 -218.46 0
+414 413 64 0
+442 413 64 0
+385 414 64 0
+413 414 64 0
+414 414 -218.46 0
+415 414 64 0
+443 414 64 0
+386 415 64 0
+414 415 64 0
+415 415 -218.46 0
+416 415 64 0
+444 415 64 0
+387 416 64 0
+415 416 64 0
+416 416 -218.46 0
+417 416 64 0
+445 416 64 0
+388 417 64 0
+416 417 64 0
+417 417 -218.46 0
+418 417 64 0
+446 417 64 0
+389 418 64 0
+417 418 64 0
+418 418 -218.46 0
+419 418 64 0
+447 418 64 0
+390 419 64 0
+418 419 64 0
+419 419 -218.46 0
+420 419 64 0
+448 419 64 0
+391 420 64 0
+419 420 64 0
+420 420 -218.46 0
+421 420 64 0
+449 420 64 0
+392 421 64 0
+420 421 64 0
+421 421 -218.46 0
+422 421 64 0
+450 421 64 0
+393 422 64 0
+421 422 64 0
+422 422 -218.46 0
+423 422 64 0
+451 422 64 0
+394 423 64 0
+422 423 64 0
+423 423 -218.46 0
+424 423 64 0
+452 423 64 0
+395 424 64 0
+423 424 64 0
+424 424 -218.46 0
+425 424 64 0
+453 424 64 0
+396 425 64 0
+424 425 64 0
+425 425 -218.46 0
+426 425 64 0
+454 425 64 0
+397 426 64 0
+425 426 64 0
+426 426 -218.46 0
+427 426 64 0
+455 426 64 0
+398 427 64 0
+426 427 64 0
+427 427 -218.46 0
+428 427 64 0
+456 427 64 0
+399 428 64 0
+427 428 64 0
+428 428 -218.46 0
+429 428 64 0
+457 428 64 0
+400 429 64 0
+428 429 64 0
+429 429 -218.46 0
+430 429 64 0
+458 429 64 0
+401 430 6.4e-5 0
+429 430 6.4e-5 0
+430 430 -.00021846 -37.54
+431 430 6.4e-5 0
+459 430 6.4e-5 0
+402 431 6.4e-5 0
+430 431 6.4e-5 0
+431 431 -.00021846 -37.54
+432 431 6.4e-5 0
+460 431 6.4e-5 0
+403 432 22.627 0
+431 432 22.627 0
+432 432 -63.965 -26.544
+433 432 22.627 0
+461 432 22.627 0
+404 433 22.627 0
+432 433 22.627 0
+433 433 -63.965 -26.544
+434 433 22.627 0
+462 433 22.627 0
+405 434 64 0
+433 434 64 0
+434 434 -218.46 0
+435 434 64 0
+463 434 64 0
+406 435 64 0
+434 435 64 0
+435 435 -218.46 0
+464 435 64 0
+407 436 64 0
+436 436 -218.46 0
+437 436 64 0
+465 436 64 0
+408 437 64 0
+436 437 64 0
+437 437 -218.46 0
+438 437 64 0
+466 437 64 0
+409 438 64 0
+437 438 64 0
+438 438 -218.46 0
+439 438 64 0
+467 438 64 0
+410 439 22.627 0
+438 439 22.627 0
+439 439 -63.965 -26.544
+440 439 22.627 0
+468 439 22.627 0
+411 440 6.4e-5 0
+439 440 6.4e-5 0
+440 440 -.00021846 -37.54
+441 440 6.4e-5 0
+469 440 6.4e-5 0
+412 441 6.4e-5 0
+440 441 6.4e-5 0
+441 441 -.00021846 -37.54
+442 441 6.4e-5 0
+470 441 6.4e-5 0
+413 442 64 0
+441 442 64 0
+442 442 -218.46 0
+443 442 64 0
+471 442 64 0
+414 443 64 0
+442 443 64 0
+443 443 -218.46 0
+444 443 64 0
+472 443 64 0
+415 444 64 0
+443 444 64 0
+444 444 -218.46 0
+445 444 64 0
+473 444 64 0
+416 445 64 0
+444 445 64 0
+445 445 -218.46 0
+446 445 64 0
+474 445 64 0
+417 446 64 0
+445 446 64 0
+446 446 -218.46 0
+447 446 64 0
+475 446 64 0
+418 447 64 0
+446 447 64 0
+447 447 -218.46 0
+448 447 64 0
+476 447 64 0
+419 448 64 0
+447 448 64 0
+448 448 -218.46 0
+449 448 64 0
+477 448 64 0
+420 449 64 0
+448 449 64 0
+449 449 -218.46 0
+450 449 64 0
+478 449 64 0
+421 450 64 0
+449 450 64 0
+450 450 -218.46 0
+451 450 64 0
+479 450 64 0
+422 451 64 0
+450 451 64 0
+451 451 -218.46 0
+452 451 64 0
+480 451 64 0
+423 452 64 0
+451 452 64 0
+452 452 -218.46 0
+453 452 64 0
+481 452 64 0
+424 453 64 0
+452 453 64 0
+453 453 -218.46 0
+454 453 64 0
+482 453 64 0
+425 454 64 0
+453 454 64 0
+454 454 -218.46 0
+455 454 64 0
+483 454 64 0
+426 455 64 0
+454 455 64 0
+455 455 -218.46 0
+456 455 64 0
+484 455 64 0
+427 456 64 0
+455 456 64 0
+456 456 -218.46 0
+457 456 64 0
+485 456 64 0
+428 457 64 0
+456 457 64 0
+457 457 -218.46 0
+458 457 64 0
+486 457 64 0
+429 458 64 0
+457 458 64 0
+458 458 -218.46 0
+459 458 64 0
+487 458 64 0
+430 459 6.4e-5 0
+458 459 6.4e-5 0
+459 459 -.00021846 -37.54
+460 459 6.4e-5 0
+488 459 6.4e-5 0
+431 460 6.4e-5 0
+459 460 6.4e-5 0
+460 460 -.00021846 -37.54
+461 460 6.4e-5 0
+489 460 6.4e-5 0
+432 461 22.627 0
+460 461 22.627 0
+461 461 -63.965 -26.544
+462 461 22.627 0
+490 461 22.627 0
+433 462 64 0
+461 462 64 0
+462 462 -218.46 0
+463 462 64 0
+491 462 64 0
+434 463 64 0
+462 463 64 0
+463 463 -218.46 0
+464 463 64 0
+492 463 64 0
+435 464 64 0
+463 464 64 0
+464 464 -218.46 0
+493 464 64 0
+436 465 64 0
+465 465 -218.46 0
+466 465 64 0
+494 465 64 0
+437 466 64 0
+465 466 64 0
+466 466 -218.46 0
+467 466 64 0
+495 466 64 0
+438 467 64 0
+466 467 64 0
+467 467 -218.46 0
+468 467 64 0
+496 467 64 0
+439 468 22.627 0
+467 468 22.627 0
+468 468 -63.965 -26.544
+469 468 22.627 0
+497 468 22.627 0
+440 469 6.4e-5 0
+468 469 6.4e-5 0
+469 469 -.00021846 -37.54
+470 469 6.4e-5 0
+498 469 6.4e-5 0
+441 470 6.4e-5 0
+469 470 6.4e-5 0
+470 470 -.00021846 -37.54
+471 470 6.4e-5 0
+499 470 6.4e-5 0
+442 471 64 0
+470 471 64 0
+471 471 -218.46 0
+472 471 64 0
+500 471 64 0
+443 472 64 0
+471 472 64 0
+472 472 -218.46 0
+473 472 64 0
+501 472 64 0
+444 473 64 0
+472 473 64 0
+473 473 -218.46 0
+474 473 64 0
+502 473 64 0
+445 474 64 0
+473 474 64 0
+474 474 -218.46 0
+475 474 64 0
+503 474 64 0
+446 475 64 0
+474 475 64 0
+475 475 -218.46 0
+476 475 64 0
+504 475 64 0
+447 476 64 0
+475 476 64 0
+476 476 -218.46 0
+477 476 64 0
+505 476 64 0
+448 477 64 0
+476 477 64 0
+477 477 -218.46 0
+478 477 64 0
+506 477 64 0
+449 478 64 0
+477 478 64 0
+478 478 -218.46 0
+479 478 64 0
+507 478 64 0
+450 479 64 0
+478 479 64 0
+479 479 -218.46 0
+480 479 64 0
+508 479 64 0
+451 480 64 0
+479 480 64 0
+480 480 -218.46 0
+481 480 64 0
+509 480 64 0
+452 481 64 0
+480 481 64 0
+481 481 -218.46 0
+482 481 64 0
+510 481 64 0
+453 482 64 0
+481 482 64 0
+482 482 -218.46 0
+483 482 64 0
+511 482 64 0
+454 483 64 0
+482 483 64 0
+483 483 -218.46 0
+484 483 64 0
+512 483 64 0
+455 484 64 0
+483 484 64 0
+484 484 -218.46 0
+485 484 64 0
+513 484 64 0
+456 485 64 0
+484 485 64 0
+485 485 -218.46 0
+486 485 64 0
+514 485 64 0
+457 486 64 0
+485 486 64 0
+486 486 -218.46 0
+487 486 64 0
+515 486 64 0
+458 487 64 0
+486 487 64 0
+487 487 -218.46 0
+488 487 64 0
+516 487 64 0
+459 488 6.4e-5 0
+487 488 6.4e-5 0
+488 488 -.00021846 -37.54
+489 488 6.4e-5 0
+517 488 6.4e-5 0
+460 489 6.4e-5 0
+488 489 6.4e-5 0
+489 489 -.00021846 -37.54
+490 489 6.4e-5 0
+518 489 6.4e-5 0
+461 490 22.627 0
+489 490 22.627 0
+490 490 -63.965 -26.544
+491 490 22.627 0
+519 490 22.627 0
+462 491 64 0
+490 491 64 0
+491 491 -218.46 0
+492 491 64 0
+520 491 64 0
+463 492 64 0
+491 492 64 0
+492 492 -218.46 0
+493 492 64 0
+521 492 64 0
+464 493 64 0
+492 493 64 0
+493 493 -218.46 0
+522 493 64 0
+465 494 64 0
+494 494 -218.46 0
+495 494 64 0
+523 494 64 0
+466 495 64 0
+494 495 64 0
+495 495 -218.46 0
+496 495 64 0
+524 495 64 0
+467 496 64 0
+495 496 64 0
+496 496 -218.46 0
+497 496 64 0
+525 496 64 0
+468 497 22.627 0
+496 497 22.627 0
+497 497 -63.965 -26.544
+498 497 22.627 0
+526 497 22.627 0
+469 498 22.627 0
+497 498 22.627 0
+498 498 -63.965 -26.544
+499 498 22.627 0
+527 498 22.627 0
+470 499 6.4e-5 0
+498 499 6.4e-5 0
+499 499 -.00021846 -37.54
+500 499 6.4e-5 0
+528 499 6.4e-5 0
+471 500 64 0
+499 500 64 0
+500 500 -218.46 0
+501 500 64 0
+529 500 64 0
+472 501 64 0
+500 501 64 0
+501 501 -218.46 0
+502 501 64 0
+530 501 64 0
+473 502 64 0
+501 502 64 0
+502 502 -218.46 0
+503 502 64 0
+531 502 64 0
+474 503 64 0
+502 503 64 0
+503 503 -218.46 0
+504 503 64 0
+532 503 64 0
+475 504 64 0
+503 504 64 0
+504 504 -218.46 0
+505 504 64 0
+533 504 64 0
+476 505 64 0
+504 505 64 0
+505 505 -218.46 0
+506 505 64 0
+534 505 64 0
+477 506 64 0
+505 506 64 0
+506 506 -218.46 0
+507 506 64 0
+535 506 64 0
+478 507 64 0
+506 507 64 0
+507 507 -218.46 0
+508 507 64 0
+536 507 64 0
+479 508 64 0
+507 508 64 0
+508 508 -218.46 0
+509 508 64 0
+537 508 64 0
+480 509 64 0
+508 509 64 0
+509 509 -218.46 0
+510 509 64 0
+538 509 64 0
+481 510 64 0
+509 510 64 0
+510 510 -218.46 0
+511 510 64 0
+539 510 64 0
+482 511 64 0
+510 511 64 0
+511 511 -218.46 0
+512 511 64 0
+540 511 64 0
+483 512 64 0
+511 512 64 0
+512 512 -218.46 0
+513 512 64 0
+541 512 64 0
+484 513 64 0
+512 513 64 0
+513 513 -218.46 0
+514 513 64 0
+542 513 64 0
+485 514 64 0
+513 514 64 0
+514 514 -218.46 0
+515 514 64 0
+543 514 64 0
+486 515 64 0
+514 515 64 0
+515 515 -218.46 0
+516 515 64 0
+544 515 64 0
+487 516 64 0
+515 516 64 0
+516 516 -218.46 0
+517 516 64 0
+545 516 64 0
+488 517 6.4e-5 0
+516 517 6.4e-5 0
+517 517 -.00021846 -37.54
+518 517 6.4e-5 0
+546 517 6.4e-5 0
+489 518 22.627 0
+517 518 22.627 0
+518 518 -63.965 -26.544
+519 518 22.627 0
+547 518 22.627 0
+490 519 22.627 0
+518 519 22.627 0
+519 519 -63.965 -26.544
+520 519 22.627 0
+548 519 22.627 0
+491 520 64 0
+519 520 64 0
+520 520 -218.46 0
+521 520 64 0
+549 520 64 0
+492 521 64 0
+520 521 64 0
+521 521 -218.46 0
+522 521 64 0
+550 521 64 0
+493 522 64 0
+521 522 64 0
+522 522 -218.46 0
+551 522 64 0
+494 523 64 0
+523 523 -218.46 0
+524 523 64 0
+552 523 64 0
+495 524 64 0
+523 524 64 0
+524 524 -218.46 0
+525 524 64 0
+553 524 64 0
+496 525 64 0
+524 525 64 0
+525 525 -218.46 0
+526 525 64 0
+554 525 64 0
+497 526 22.627 0
+525 526 22.627 0
+526 526 -63.965 -26.544
+527 526 22.627 0
+555 526 22.627 0
+498 527 22.627 0
+526 527 22.627 0
+527 527 -63.965 -26.544
+528 527 22.627 0
+556 527 22.627 0
+499 528 6.4e-5 0
+527 528 6.4e-5 0
+528 528 -.00021846 -37.54
+529 528 6.4e-5 0
+557 528 6.4e-5 0
+500 529 6.4e-5 0
+528 529 6.4e-5 0
+529 529 -.00021846 -37.54
+530 529 6.4e-5 0
+558 529 6.4e-5 0
+501 530 64 0
+529 530 64 0
+530 530 -218.46 0
+531 530 64 0
+559 530 64 0
+502 531 64 0
+530 531 64 0
+531 531 -218.46 0
+532 531 64 0
+560 531 64 0
+503 532 64 0
+531 532 64 0
+532 532 -218.46 0
+533 532 64 0
+561 532 64 0
+504 533 64 0
+532 533 64 0
+533 533 -218.46 0
+534 533 64 0
+562 533 64 0
+505 534 64 0
+533 534 64 0
+534 534 -218.46 0
+535 534 64 0
+563 534 64 0
+506 535 64 0
+534 535 64 0
+535 535 -218.46 0
+536 535 64 0
+564 535 64 0
+507 536 64 0
+535 536 64 0
+536 536 -218.46 0
+537 536 64 0
+565 536 64 0
+508 537 64 0
+536 537 64 0
+537 537 -218.46 0
+538 537 64 0
+566 537 64 0
+509 538 64 0
+537 538 64 0
+538 538 -218.46 0
+539 538 64 0
+567 538 64 0
+510 539 64 0
+538 539 64 0
+539 539 -218.46 0
+540 539 64 0
+568 539 64 0
+511 540 64 0
+539 540 64 0
+540 540 -218.46 0
+541 540 64 0
+569 540 64 0
+512 541 64 0
+540 541 64 0
+541 541 -218.46 0
+542 541 64 0
+570 541 64 0
+513 542 64 0
+541 542 64 0
+542 542 -218.46 0
+543 542 64 0
+571 542 64 0
+514 543 64 0
+542 543 64 0
+543 543 -218.46 0
+544 543 64 0
+572 543 64 0
+515 544 64 0
+543 544 64 0
+544 544 -218.46 0
+545 544 64 0
+573 544 64 0
+516 545 6.4e-5 0
+544 545 6.4e-5 0
+545 545 -.00021846 -37.54
+546 545 6.4e-5 0
+574 545 6.4e-5 0
+517 546 6.4e-5 0
+545 546 6.4e-5 0
+546 546 -.00021846 -37.54
+547 546 6.4e-5 0
+575 546 6.4e-5 0
+518 547 22.627 0
+546 547 22.627 0
+547 547 -63.965 -26.544
+548 547 22.627 0
+576 547 22.627 0
+519 548 22.627 0
+547 548 22.627 0
+548 548 -63.965 -26.544
+549 548 22.627 0
+577 548 22.627 0
+520 549 64 0
+548 549 64 0
+549 549 -218.46 0
+550 549 64 0
+578 549 64 0
+521 550 64 0
+549 550 64 0
+550 550 -218.46 0
+551 550 64 0
+579 550 64 0
+522 551 64 0
+550 551 64 0
+551 551 -218.46 0
+580 551 64 0
+523 552 64 0
+552 552 -218.46 0
+553 552 64 0
+581 552 64 0
+524 553 64 0
+552 553 64 0
+553 553 -218.46 0
+554 553 64 0
+582 553 64 0
+525 554 64 0
+553 554 64 0
+554 554 -218.46 0
+555 554 64 0
+583 554 64 0
+526 555 64 0
+554 555 64 0
+555 555 -218.46 0
+556 555 64 0
+584 555 64 0
+527 556 22.627 0
+555 556 22.627 0
+556 556 -63.965 -26.544
+557 556 22.627 0
+585 556 22.627 0
+528 557 6.4e-5 0
+556 557 6.4e-5 0
+557 557 -.00021846 -37.54
+558 557 6.4e-5 0
+586 557 6.4e-5 0
+529 558 6.4e-5 0
+557 558 6.4e-5 0
+558 558 -.00021846 -37.54
+559 558 6.4e-5 0
+587 558 6.4e-5 0
+530 559 64 0
+558 559 64 0
+559 559 -218.46 0
+560 559 64 0
+588 559 64 0
+531 560 64 0
+559 560 64 0
+560 560 -218.46 0
+561 560 64 0
+589 560 64 0
+532 561 64 0
+560 561 64 0
+561 561 -218.46 0
+562 561 64 0
+590 561 64 0
+533 562 64 0
+561 562 64 0
+562 562 -218.46 0
+563 562 64 0
+591 562 64 0
+534 563 64 0
+562 563 64 0
+563 563 -218.46 0
+564 563 64 0
+592 563 64 0
+535 564 64 0
+563 564 64 0
+564 564 -218.46 0
+565 564 64 0
+593 564 64 0
+536 565 64 0
+564 565 64 0
+565 565 -218.46 0
+566 565 64 0
+594 565 64 0
+537 566 64 0
+565 566 64 0
+566 566 -218.46 0
+567 566 64 0
+595 566 64 0
+538 567 64 0
+566 567 64 0
+567 567 -218.46 0
+568 567 64 0
+596 567 64 0
+539 568 64 0
+567 568 64 0
+568 568 -218.46 0
+569 568 64 0
+597 568 64 0
+540 569 64 0
+568 569 64 0
+569 569 -218.46 0
+570 569 64 0
+598 569 64 0
+541 570 64 0
+569 570 64 0
+570 570 -218.46 0
+571 570 64 0
+599 570 64 0
+542 571 64 0
+570 571 64 0
+571 571 -218.46 0
+572 571 64 0
+600 571 64 0
+543 572 64 0
+571 572 64 0
+572 572 -218.46 0
+573 572 64 0
+601 572 64 0
+544 573 64 0
+572 573 64 0
+573 573 -218.46 0
+574 573 64 0
+602 573 64 0
+545 574 6.4e-5 0
+573 574 6.4e-5 0
+574 574 -.00021846 -37.54
+575 574 6.4e-5 0
+603 574 6.4e-5 0
+546 575 6.4e-5 0
+574 575 6.4e-5 0
+575 575 -.00021846 -37.54
+576 575 6.4e-5 0
+604 575 6.4e-5 0
+547 576 22.627 0
+575 576 22.627 0
+576 576 -63.965 -26.544
+577 576 22.627 0
+605 576 22.627 0
+548 577 64 0
+576 577 64 0
+577 577 -218.46 0
+578 577 64 0
+606 577 64 0
+549 578 64 0
+577 578 64 0
+578 578 -218.46 0
+579 578 64 0
+607 578 64 0
+550 579 64 0
+578 579 64 0
+579 579 -218.46 0
+580 579 64 0
+608 579 64 0
+551 580 64 0
+579 580 64 0
+580 580 -218.46 0
+609 580 64 0
+552 581 64 0
+581 581 -218.46 0
+582 581 64 0
+610 581 64 0
+553 582 64 0
+581 582 64 0
+582 582 -218.46 0
+583 582 64 0
+611 582 64 0
+554 583 64 0
+582 583 64 0
+583 583 -218.46 0
+584 583 64 0
+612 583 64 0
+555 584 64 0
+583 584 64 0
+584 584 -218.46 0
+585 584 64 0
+613 584 64 0
+556 585 22.627 0
+584 585 22.627 0
+585 585 -63.965 -26.544
+586 585 22.627 0
+614 585 22.627 0
+557 586 22.627 0
+585 586 22.627 0
+586 586 -63.965 -26.544
+587 586 22.627 0
+615 586 22.627 0
+558 587 6.4e-5 0
+586 587 6.4e-5 0
+587 587 -.00021846 -37.54
+588 587 6.4e-5 0
+616 587 6.4e-5 0
+559 588 6.4e-5 0
+587 588 6.4e-5 0
+588 588 -.00021846 -37.54
+589 588 6.4e-5 0
+617 588 6.4e-5 0
+560 589 64 0
+588 589 64 0
+589 589 -218.46 0
+590 589 64 0
+618 589 64 0
+561 590 64 0
+589 590 64 0
+590 590 -218.46 0
+591 590 64 0
+619 590 64 0
+562 591 64 0
+590 591 64 0
+591 591 -218.46 0
+592 591 64 0
+620 591 64 0
+563 592 64 0
+591 592 64 0
+592 592 -218.46 0
+593 592 64 0
+621 592 64 0
+564 593 64 0
+592 593 64 0
+593 593 -218.46 0
+594 593 64 0
+622 593 64 0
+565 594 64 0
+593 594 64 0
+594 594 -218.46 0
+595 594 64 0
+623 594 64 0
+566 595 64 0
+594 595 64 0
+595 595 -218.46 0
+596 595 64 0
+624 595 64 0
+567 596 64 0
+595 596 64 0
+596 596 -218.46 0
+597 596 64 0
+625 596 64 0
+568 597 64 0
+596 597 64 0
+597 597 -218.46 0
+598 597 64 0
+626 597 64 0
+569 598 64 0
+597 598 64 0
+598 598 -218.46 0
+599 598 64 0
+627 598 64 0
+570 599 64 0
+598 599 64 0
+599 599 -218.46 0
+600 599 64 0
+628 599 64 0
+571 600 64 0
+599 600 64 0
+600 600 -218.46 0
+601 600 64 0
+629 600 64 0
+572 601 64 0
+600 601 64 0
+601 601 -218.46 0
+602 601 64 0
+630 601 64 0
+573 602 6.4e-5 0
+601 602 6.4e-5 0
+602 602 -.00021846 -37.54
+603 602 6.4e-5 0
+631 602 6.4e-5 0
+574 603 6.4e-5 0
+602 603 6.4e-5 0
+603 603 -.00021846 -37.54
+604 603 6.4e-5 0
+632 603 6.4e-5 0
+575 604 22.627 0
+603 604 22.627 0
+604 604 -63.965 -26.544
+605 604 22.627 0
+633 604 22.627 0
+576 605 22.627 0
+604 605 22.627 0
+605 605 -63.965 -26.544
+606 605 22.627 0
+634 605 22.627 0
+577 606 64 0
+605 606 64 0
+606 606 -218.46 0
+607 606 64 0
+635 606 64 0
+578 607 64 0
+606 607 64 0
+607 607 -218.46 0
+608 607 64 0
+636 607 64 0
+579 608 64 0
+607 608 64 0
+608 608 -218.46 0
+609 608 64 0
+637 608 64 0
+580 609 64 0
+608 609 64 0
+609 609 -218.46 0
+638 609 64 0
+581 610 64 0
+610 610 -218.46 0
+611 610 64 0
+639 610 64 0
+582 611 64 0
+610 611 64 0
+611 611 -218.46 0
+612 611 64 0
+640 611 64 0
+583 612 64 0
+611 612 64 0
+612 612 -218.46 0
+613 612 64 0
+641 612 64 0
+584 613 64 0
+612 613 64 0
+613 613 -218.46 0
+614 613 64 0
+642 613 64 0
+585 614 64 0
+613 614 64 0
+614 614 -218.46 0
+615 614 64 0
+643 614 64 0
+586 615 22.627 0
+614 615 22.627 0
+615 615 -63.965 -26.544
+616 615 22.627 0
+644 615 22.627 0
+587 616 22.627 0
+615 616 22.627 0
+616 616 -63.965 -26.544
+617 616 22.627 0
+645 616 22.627 0
+588 617 6.4e-5 0
+616 617 6.4e-5 0
+617 617 -.00021846 -37.54
+618 617 6.4e-5 0
+646 617 6.4e-5 0
+589 618 6.4e-5 0
+617 618 6.4e-5 0
+618 618 -.00021846 -37.54
+619 618 6.4e-5 0
+647 618 6.4e-5 0
+590 619 64 0
+618 619 64 0
+619 619 -218.46 0
+620 619 64 0
+648 619 64 0
+591 620 64 0
+619 620 64 0
+620 620 -218.46 0
+621 620 64 0
+649 620 64 0
+592 621 64 0
+620 621 64 0
+621 621 -218.46 0
+622 621 64 0
+650 621 64 0
+593 622 64 0
+621 622 64 0
+622 622 -218.46 0
+623 622 64 0
+651 622 64 0
+594 623 64 0
+622 623 64 0
+623 623 -218.46 0
+624 623 64 0
+652 623 64 0
+595 624 64 0
+623 624 64 0
+624 624 -218.46 0
+625 624 64 0
+653 624 64 0
+596 625 64 0
+624 625 64 0
+625 625 -218.46 0
+626 625 64 0
+654 625 64 0
+597 626 64 0
+625 626 64 0
+626 626 -218.46 0
+627 626 64 0
+655 626 64 0
+598 627 64 0
+626 627 64 0
+627 627 -218.46 0
+628 627 64 0
+656 627 64 0
+599 628 64 0
+627 628 64 0
+628 628 -218.46 0
+629 628 64 0
+657 628 64 0
+600 629 64 0
+628 629 64 0
+629 629 -218.46 0
+630 629 64 0
+658 629 64 0
+601 630 6.4e-5 0
+629 630 6.4e-5 0
+630 630 -.00021846 -37.54
+631 630 6.4e-5 0
+659 630 6.4e-5 0
+602 631 6.4e-5 0
+630 631 6.4e-5 0
+631 631 -.00021846 -37.54
+632 631 6.4e-5 0
+660 631 6.4e-5 0
+603 632 22.627 0
+631 632 22.627 0
+632 632 -63.965 -26.544
+633 632 22.627 0
+661 632 22.627 0
+604 633 22.627 0
+632 633 22.627 0
+633 633 -63.965 -26.544
+634 633 22.627 0
+662 633 22.627 0
+605 634 64 0
+633 634 64 0
+634 634 -218.46 0
+635 634 64 0
+663 634 64 0
+606 635 64 0
+634 635 64 0
+635 635 -218.46 0
+636 635 64 0
+664 635 64 0
+607 636 64 0
+635 636 64 0
+636 636 -218.46 0
+637 636 64 0
+665 636 64 0
+608 637 64 0
+636 637 64 0
+637 637 -218.46 0
+638 637 64 0
+666 637 64 0
+609 638 64 0
+637 638 64 0
+638 638 -218.46 0
+667 638 64 0
+610 639 64 0
+639 639 -218.46 0
+640 639 64 0
+668 639 64 0
+611 640 64 0
+639 640 64 0
+640 640 -218.46 0
+641 640 64 0
+669 640 64 0
+612 641 64 0
+640 641 64 0
+641 641 -218.46 0
+642 641 64 0
+670 641 64 0
+613 642 64 0
+641 642 64 0
+642 642 -218.46 0
+643 642 64 0
+671 642 64 0
+614 643 64 0
+642 643 64 0
+643 643 -218.46 0
+644 643 64 0
+672 643 64 0
+615 644 64 0
+643 644 64 0
+644 644 -218.46 0
+645 644 64 0
+673 644 64 0
+616 645 22.627 0
+644 645 22.627 0
+645 645 -63.965 -26.544
+646 645 22.627 0
+674 645 22.627 0
+617 646 22.627 0
+645 646 22.627 0
+646 646 -63.965 -26.544
+647 646 22.627 0
+675 646 22.627 0
+618 647 6.4e-5 0
+646 647 6.4e-5 0
+647 647 -.00021846 -37.54
+648 647 6.4e-5 0
+676 647 6.4e-5 0
+619 648 6.4e-5 0
+647 648 6.4e-5 0
+648 648 -.00021846 -37.54
+649 648 6.4e-5 0
+677 648 6.4e-5 0
+620 649 6.4e-5 0
+648 649 6.4e-5 0
+649 649 -.00021846 -37.54
+650 649 6.4e-5 0
+678 649 6.4e-5 0
+621 650 64 0
+649 650 64 0
+650 650 -218.46 0
+651 650 64 0
+679 650 64 0
+622 651 64 0
+650 651 64 0
+651 651 -218.46 0
+652 651 64 0
+680 651 64 0
+623 652 64 0
+651 652 64 0
+652 652 -218.46 0
+653 652 64 0
+681 652 64 0
+624 653 64 0
+652 653 64 0
+653 653 -218.46 0
+654 653 64 0
+682 653 64 0
+625 654 64 0
+653 654 64 0
+654 654 -218.46 0
+655 654 64 0
+683 654 64 0
+626 655 64 0
+654 655 64 0
+655 655 -218.46 0
+656 655 64 0
+684 655 64 0
+627 656 64 0
+655 656 64 0
+656 656 -218.46 0
+657 656 64 0
+685 656 64 0
+628 657 6.4e-5 0
+656 657 6.4e-5 0
+657 657 -.00021846 -37.54
+658 657 6.4e-5 0
+686 657 6.4e-5 0
+629 658 6.4e-5 0
+657 658 6.4e-5 0
+658 658 -.00021846 -37.54
+659 658 6.4e-5 0
+687 658 6.4e-5 0
+630 659 6.4e-5 0
+658 659 6.4e-5 0
+659 659 -.00021846 -37.54
+660 659 6.4e-5 0
+688 659 6.4e-5 0
+631 660 22.627 0
+659 660 22.627 0
+660 660 -63.965 -26.544
+661 660 22.627 0
+689 660 22.627 0
+632 661 22.627 0
+660 661 22.627 0
+661 661 -63.965 -26.544
+662 661 22.627 0
+690 661 22.627 0
+633 662 64 0
+661 662 64 0
+662 662 -218.46 0
+663 662 64 0
+691 662 64 0
+634 663 64 0
+662 663 64 0
+663 663 -218.46 0
+664 663 64 0
+692 663 64 0
+635 664 64 0
+663 664 64 0
+664 664 -218.46 0
+665 664 64 0
+693 664 64 0
+636 665 64 0
+664 665 64 0
+665 665 -218.46 0
+666 665 64 0
+694 665 64 0
+637 666 64 0
+665 666 64 0
+666 666 -218.46 0
+667 666 64 0
+695 666 64 0
+638 667 64 0
+666 667 64 0
+667 667 -218.46 0
+696 667 64 0
+639 668 64 0
+668 668 -218.46 0
+669 668 64 0
+697 668 64 0
+640 669 64 0
+668 669 64 0
+669 669 -218.46 0
+670 669 64 0
+698 669 64 0
+641 670 64 0
+669 670 64 0
+670 670 -218.46 0
+671 670 64 0
+699 670 64 0
+642 671 64 0
+670 671 64 0
+671 671 -218.46 0
+672 671 64 0
+700 671 64 0
+643 672 64 0
+671 672 64 0
+672 672 -218.46 0
+673 672 64 0
+701 672 64 0
+644 673 64 0
+672 673 64 0
+673 673 -218.46 0
+674 673 64 0
+702 673 64 0
+645 674 64 0
+673 674 64 0
+674 674 -218.46 0
+675 674 64 0
+703 674 64 0
+646 675 22.627 0
+674 675 22.627 0
+675 675 -63.965 -26.544
+676 675 22.627 0
+704 675 22.627 0
+647 676 22.627 0
+675 676 22.627 0
+676 676 -63.965 -26.544
+677 676 22.627 0
+705 676 22.627 0
+648 677 6.4e-5 0
+676 677 6.4e-5 0
+677 677 -.00021846 -37.54
+678 677 6.4e-5 0
+706 677 6.4e-5 0
+649 678 6.4e-5 0
+677 678 6.4e-5 0
+678 678 -.00021846 -37.54
+679 678 6.4e-5 0
+707 678 6.4e-5 0
+650 679 6.4e-5 0
+678 679 6.4e-5 0
+679 679 -.00021846 -37.54
+680 679 6.4e-5 0
+708 679 6.4e-5 0
+651 680 6.4e-5 0
+679 680 6.4e-5 0
+680 680 -.00021846 -37.54
+681 680 6.4e-5 0
+709 680 6.4e-5 0
+652 681 6.4e-5 0
+680 681 6.4e-5 0
+681 681 -.00021846 -37.54
+682 681 6.4e-5 0
+710 681 6.4e-5 0
+653 682 6.4e-5 0
+681 682 6.4e-5 0
+682 682 -.00021846 -37.54
+683 682 6.4e-5 0
+711 682 6.4e-5 0
+654 683 6.4e-5 0
+682 683 6.4e-5 0
+683 683 -.00021846 -37.54
+684 683 6.4e-5 0
+712 683 6.4e-5 0
+655 684 6.4e-5 0
+683 684 6.4e-5 0
+684 684 -.00021846 -37.54
+685 684 6.4e-5 0
+713 684 6.4e-5 0
+656 685 6.4e-5 0
+684 685 6.4e-5 0
+685 685 -.00021846 -37.54
+686 685 6.4e-5 0
+714 685 6.4e-5 0
+657 686 6.4e-5 0
+685 686 6.4e-5 0
+686 686 -.00021846 -37.54
+687 686 6.4e-5 0
+715 686 6.4e-5 0
+658 687 6.4e-5 0
+686 687 6.4e-5 0
+687 687 -.00021846 -37.54
+688 687 6.4e-5 0
+716 687 6.4e-5 0
+659 688 22.627 0
+687 688 22.627 0
+688 688 -63.965 -26.544
+689 688 22.627 0
+717 688 22.627 0
+660 689 22.627 0
+688 689 22.627 0
+689 689 -63.965 -26.544
+690 689 22.627 0
+718 689 22.627 0
+661 690 64 0
+689 690 64 0
+690 690 -218.46 0
+691 690 64 0
+719 690 64 0
+662 691 64 0
+690 691 64 0
+691 691 -218.46 0
+692 691 64 0
+720 691 64 0
+663 692 64 0
+691 692 64 0
+692 692 -218.46 0
+693 692 64 0
+721 692 64 0
+664 693 64 0
+692 693 64 0
+693 693 -218.46 0
+694 693 64 0
+722 693 64 0
+665 694 64 0
+693 694 64 0
+694 694 -218.46 0
+695 694 64 0
+723 694 64 0
+666 695 64 0
+694 695 64 0
+695 695 -218.46 0
+696 695 64 0
+724 695 64 0
+667 696 64 0
+695 696 64 0
+696 696 -218.46 0
+725 696 64 0
+668 697 64 0
+697 697 -218.46 0
+698 697 64 0
+726 697 64 0
+669 698 64 0
+697 698 64 0
+698 698 -218.46 0
+699 698 64 0
+727 698 64 0
+670 699 64 0
+698 699 64 0
+699 699 -218.46 0
+700 699 64 0
+728 699 64 0
+671 700 64 0
+699 700 64 0
+700 700 -218.46 0
+701 700 64 0
+729 700 64 0
+672 701 64 0
+700 701 64 0
+701 701 -218.46 0
+702 701 64 0
+730 701 64 0
+673 702 64 0
+701 702 64 0
+702 702 -218.46 0
+703 702 64 0
+731 702 64 0
+674 703 64 0
+702 703 64 0
+703 703 -218.46 0
+704 703 64 0
+732 703 64 0
+675 704 64 0
+703 704 64 0
+704 704 -218.46 0
+705 704 64 0
+733 704 64 0
+676 705 22.627 0
+704 705 22.627 0
+705 705 -63.965 -26.544
+706 705 22.627 0
+734 705 22.627 0
+677 706 22.627 0
+705 706 22.627 0
+706 706 -63.965 -26.544
+707 706 22.627 0
+735 706 22.627 0
+678 707 22.627 0
+706 707 22.627 0
+707 707 -63.965 -26.544
+708 707 22.627 0
+736 707 22.627 0
+679 708 22.627 0
+707 708 22.627 0
+708 708 -63.965 -26.544
+709 708 22.627 0
+737 708 22.627 0
+680 709 6.4e-5 0
+708 709 6.4e-5 0
+709 709 -.00021846 -37.54
+710 709 6.4e-5 0
+738 709 6.4e-5 0
+681 710 6.4e-5 0
+709 710 6.4e-5 0
+710 710 -.00021846 -37.54
+711 710 6.4e-5 0
+739 710 6.4e-5 0
+682 711 6.4e-5 0
+710 711 6.4e-5 0
+711 711 -.00021846 -37.54
+712 711 6.4e-5 0
+740 711 6.4e-5 0
+683 712 6.4e-5 0
+711 712 6.4e-5 0
+712 712 -.00021846 -37.54
+713 712 6.4e-5 0
+741 712 6.4e-5 0
+684 713 6.4e-5 0
+712 713 6.4e-5 0
+713 713 -.00021846 -37.54
+714 713 6.4e-5 0
+742 713 6.4e-5 0
+685 714 22.627 0
+713 714 22.627 0
+714 714 -63.965 -26.544
+715 714 22.627 0
+743 714 22.627 0
+686 715 22.627 0
+714 715 22.627 0
+715 715 -63.965 -26.544
+716 715 22.627 0
+744 715 22.627 0
+687 716 22.627 0
+715 716 22.627 0
+716 716 -63.965 -26.544
+717 716 22.627 0
+745 716 22.627 0
+688 717 22.627 0
+716 717 22.627 0
+717 717 -63.965 -26.544
+718 717 22.627 0
+746 717 22.627 0
+689 718 64 0
+717 718 64 0
+718 718 -218.46 0
+719 718 64 0
+747 718 64 0
+690 719 64 0
+718 719 64 0
+719 719 -218.46 0
+720 719 64 0
+748 719 64 0
+691 720 64 0
+719 720 64 0
+720 720 -218.46 0
+721 720 64 0
+749 720 64 0
+692 721 64 0
+720 721 64 0
+721 721 -218.46 0
+722 721 64 0
+750 721 64 0
+693 722 64 0
+721 722 64 0
+722 722 -218.46 0
+723 722 64 0
+751 722 64 0
+694 723 64 0
+722 723 64 0
+723 723 -218.46 0
+724 723 64 0
+752 723 64 0
+695 724 64 0
+723 724 64 0
+724 724 -218.46 0
+725 724 64 0
+753 724 64 0
+696 725 64 0
+724 725 64 0
+725 725 -218.46 0
+754 725 64 0
+697 726 64 0
+726 726 -218.46 0
+727 726 64 0
+755 726 64 0
+698 727 64 0
+726 727 64 0
+727 727 -218.46 0
+728 727 64 0
+756 727 64 0
+699 728 64 0
+727 728 64 0
+728 728 -218.46 0
+729 728 64 0
+757 728 64 0
+700 729 64 0
+728 729 64 0
+729 729 -218.46 0
+730 729 64 0
+758 729 64 0
+701 730 64 0
+729 730 64 0
+730 730 -218.46 0
+731 730 64 0
+759 730 64 0
+702 731 64 0
+730 731 64 0
+731 731 -218.46 0
+732 731 64 0
+760 731 64 0
+703 732 64 0
+731 732 64 0
+732 732 -218.46 0
+733 732 64 0
+761 732 64 0
+704 733 64 0
+732 733 64 0
+733 733 -218.46 0
+734 733 64 0
+762 733 64 0
+705 734 64 0
+733 734 64 0
+734 734 -218.46 0
+735 734 64 0
+763 734 64 0
+706 735 64 0
+734 735 64 0
+735 735 -218.46 0
+736 735 64 0
+764 735 64 0
+707 736 22.627 0
+735 736 22.627 0
+736 736 -63.965 -26.544
+737 736 22.627 0
+765 736 22.627 0
+708 737 22.627 0
+736 737 22.627 0
+737 737 -63.965 -26.544
+738 737 22.627 0
+766 737 22.627 0
+709 738 22.627 0
+737 738 22.627 0
+738 738 -63.965 -26.544
+739 738 22.627 0
+767 738 22.627 0
+710 739 22.627 0
+738 739 22.627 0
+739 739 -63.965 -26.544
+740 739 22.627 0
+768 739 22.627 0
+711 740 22.627 0
+739 740 22.627 0
+740 740 -63.965 -26.544
+741 740 22.627 0
+769 740 22.627 0
+712 741 22.627 0
+740 741 22.627 0
+741 741 -63.965 -26.544
+742 741 22.627 0
+770 741 22.627 0
+713 742 22.627 0
+741 742 22.627 0
+742 742 -63.965 -26.544
+743 742 22.627 0
+771 742 22.627 0
+714 743 22.627 0
+742 743 22.627 0
+743 743 -63.965 -26.544
+744 743 22.627 0
+772 743 22.627 0
+715 744 22.627 0
+743 744 22.627 0
+744 744 -63.965 -26.544
+745 744 22.627 0
+773 744 22.627 0
+716 745 64 0
+744 745 64 0
+745 745 -218.46 0
+746 745 64 0
+774 745 64 0
+717 746 64 0
+745 746 64 0
+746 746 -218.46 0
+747 746 64 0
+775 746 64 0
+718 747 64 0
+746 747 64 0
+747 747 -218.46 0
+748 747 64 0
+776 747 64 0
+719 748 64 0
+747 748 64 0
+748 748 -218.46 0
+749 748 64 0
+777 748 64 0
+720 749 64 0
+748 749 64 0
+749 749 -218.46 0
+750 749 64 0
+778 749 64 0
+721 750 64 0
+749 750 64 0
+750 750 -218.46 0
+751 750 64 0
+779 750 64 0
+722 751 64 0
+750 751 64 0
+751 751 -218.46 0
+752 751 64 0
+780 751 64 0
+723 752 64 0
+751 752 64 0
+752 752 -218.46 0
+753 752 64 0
+781 752 64 0
+724 753 64 0
+752 753 64 0
+753 753 -218.46 0
+754 753 64 0
+782 753 64 0
+725 754 64 0
+753 754 64 0
+754 754 -218.46 0
+783 754 64 0
+726 755 64 0
+755 755 -218.46 0
+756 755 64 0
+784 755 64 0
+727 756 64 0
+755 756 64 0
+756 756 -218.46 0
+757 756 64 0
+785 756 64 0
+728 757 64 0
+756 757 64 0
+757 757 -218.46 0
+758 757 64 0
+786 757 64 0
+729 758 64 0
+757 758 64 0
+758 758 -218.46 0
+759 758 64 0
+787 758 64 0
+730 759 64 0
+758 759 64 0
+759 759 -218.46 0
+760 759 64 0
+788 759 64 0
+731 760 64 0
+759 760 64 0
+760 760 -218.46 0
+761 760 64 0
+789 760 64 0
+732 761 64 0
+760 761 64 0
+761 761 -218.46 0
+762 761 64 0
+790 761 64 0
+733 762 64 0
+761 762 64 0
+762 762 -218.46 0
+763 762 64 0
+791 762 64 0
+734 763 64 0
+762 763 64 0
+763 763 -218.46 0
+764 763 64 0
+792 763 64 0
+735 764 64 0
+763 764 64 0
+764 764 -218.46 0
+765 764 64 0
+793 764 64 0
+736 765 64 0
+764 765 64 0
+765 765 -218.46 0
+766 765 64 0
+794 765 64 0
+737 766 64 0
+765 766 64 0
+766 766 -218.46 0
+767 766 64 0
+795 766 64 0
+738 767 64 0
+766 767 64 0
+767 767 -218.46 0
+768 767 64 0
+796 767 64 0
+739 768 64 0
+767 768 64 0
+768 768 -218.46 0
+769 768 64 0
+797 768 64 0
+740 769 22.627 0
+768 769 22.627 0
+769 769 -63.965 -26.544
+770 769 22.627 0
+798 769 22.627 0
+741 770 64 0
+769 770 64 0
+770 770 -218.46 0
+771 770 64 0
+799 770 64 0
+742 771 64 0
+770 771 64 0
+771 771 -218.46 0
+772 771 64 0
+800 771 64 0
+743 772 64 0
+771 772 64 0
+772 772 -218.46 0
+773 772 64 0
+801 772 64 0
+744 773 64 0
+772 773 64 0
+773 773 -218.46 0
+774 773 64 0
+802 773 64 0
+745 774 64 0
+773 774 64 0
+774 774 -218.46 0
+775 774 64 0
+803 774 64 0
+746 775 64 0
+774 775 64 0
+775 775 -218.46 0
+776 775 64 0
+804 775 64 0
+747 776 64 0
+775 776 64 0
+776 776 -218.46 0
+777 776 64 0
+805 776 64 0
+748 777 64 0
+776 777 64 0
+777 777 -218.46 0
+778 777 64 0
+806 777 64 0
+749 778 64 0
+777 778 64 0
+778 778 -218.46 0
+779 778 64 0
+807 778 64 0
+750 779 64 0
+778 779 64 0
+779 779 -218.46 0
+780 779 64 0
+808 779 64 0
+751 780 64 0
+779 780 64 0
+780 780 -218.46 0
+781 780 64 0
+809 780 64 0
+752 781 64 0
+780 781 64 0
+781 781 -218.46 0
+782 781 64 0
+810 781 64 0
+753 782 64 0
+781 782 64 0
+782 782 -218.46 0
+783 782 64 0
+811 782 64 0
+754 783 64 0
+782 783 64 0
+783 783 -218.46 0
+812 783 64 0
+755 784 64 0
+784 784 -218.46 0
+785 784 64 0
+813 784 64 0
+756 785 64 0
+784 785 64 0
+785 785 -218.46 0
+786 785 64 0
+814 785 64 0
+757 786 64 0
+785 786 64 0
+786 786 -218.46 0
+787 786 64 0
+815 786 64 0
+758 787 64 0
+786 787 64 0
+787 787 -218.46 0
+788 787 64 0
+816 787 64 0
+759 788 64 0
+787 788 64 0
+788 788 -218.46 0
+789 788 64 0
+817 788 64 0
+760 789 64 0
+788 789 64 0
+789 789 -218.46 0
+790 789 64 0
+818 789 64 0
+761 790 64 0
+789 790 64 0
+790 790 -218.46 0
+791 790 64 0
+819 790 64 0
+762 791 64 0
+790 791 64 0
+791 791 -218.46 0
+792 791 64 0
+820 791 64 0
+763 792 64 0
+791 792 64 0
+792 792 -218.46 0
+793 792 64 0
+821 792 64 0
+764 793 64 0
+792 793 64 0
+793 793 -218.46 0
+794 793 64 0
+822 793 64 0
+765 794 64 0
+793 794 64 0
+794 794 -218.46 0
+795 794 64 0
+823 794 64 0
+766 795 64 0
+794 795 64 0
+795 795 -218.46 0
+796 795 64 0
+824 795 64 0
+767 796 64 0
+795 796 64 0
+796 796 -218.46 0
+797 796 64 0
+825 796 64 0
+768 797 64 0
+796 797 64 0
+797 797 -218.46 0
+798 797 64 0
+826 797 64 0
+769 798 64 0
+797 798 64 0
+798 798 -218.46 0
+799 798 64 0
+827 798 64 0
+770 799 64 0
+798 799 64 0
+799 799 -218.46 0
+800 799 64 0
+828 799 64 0
+771 800 64 0
+799 800 64 0
+800 800 -218.46 0
+801 800 64 0
+829 800 64 0
+772 801 64 0
+800 801 64 0
+801 801 -218.46 0
+802 801 64 0
+830 801 64 0
+773 802 64 0
+801 802 64 0
+802 802 -218.46 0
+803 802 64 0
+831 802 64 0
+774 803 64 0
+802 803 64 0
+803 803 -218.46 0
+804 803 64 0
+832 803 64 0
+775 804 64 0
+803 804 64 0
+804 804 -218.46 0
+805 804 64 0
+833 804 64 0
+776 805 64 0
+804 805 64 0
+805 805 -218.46 0
+806 805 64 0
+834 805 64 0
+777 806 64 0
+805 806 64 0
+806 806 -218.46 0
+807 806 64 0
+835 806 64 0
+778 807 64 0
+806 807 64 0
+807 807 -218.46 0
+808 807 64 0
+836 807 64 0
+779 808 64 0
+807 808 64 0
+808 808 -218.46 0
+809 808 64 0
+837 808 64 0
+780 809 64 0
+808 809 64 0
+809 809 -218.46 0
+810 809 64 0
+838 809 64 0
+781 810 64 0
+809 810 64 0
+810 810 -218.46 0
+811 810 64 0
+839 810 64 0
+782 811 64 0
+810 811 64 0
+811 811 -218.46 0
+812 811 64 0
+840 811 64 0
+783 812 64 0
+811 812 64 0
+812 812 -218.46 0
+841 812 64 0
+784 813 64 0
+813 813 -218.46 0
+814 813 64 0
+785 814 64 0
+813 814 64 0
+814 814 -218.46 0
+815 814 64 0
+786 815 64 0
+814 815 64 0
+815 815 -218.46 0
+816 815 64 0
+787 816 64 0
+815 816 64 0
+816 816 -218.46 0
+817 816 64 0
+788 817 64 0
+816 817 64 0
+817 817 -218.46 0
+818 817 64 0
+789 818 64 0
+817 818 64 0
+818 818 -218.46 0
+819 818 64 0
+790 819 64 0
+818 819 64 0
+819 819 -218.46 0
+820 819 64 0
+791 820 64 0
+819 820 64 0
+820 820 -218.46 0
+821 820 64 0
+792 821 64 0
+820 821 64 0
+821 821 -218.46 0
+822 821 64 0
+793 822 64 0
+821 822 64 0
+822 822 -218.46 0
+823 822 64 0
+794 823 64 0
+822 823 64 0
+823 823 -218.46 0
+824 823 64 0
+795 824 64 0
+823 824 64 0
+824 824 -218.46 0
+825 824 64 0
+796 825 64 0
+824 825 64 0
+825 825 -218.46 0
+826 825 64 0
+797 826 64 0
+825 826 64 0
+826 826 -218.46 0
+827 826 64 0
+798 827 64 0
+826 827 64 0
+827 827 -218.46 0
+828 827 64 0
+799 828 64 0
+827 828 64 0
+828 828 -218.46 0
+829 828 64 0
+800 829 64 0
+828 829 64 0
+829 829 -218.46 0
+830 829 64 0
+801 830 64 0
+829 830 64 0
+830 830 -218.46 0
+831 830 64 0
+802 831 64 0
+830 831 64 0
+831 831 -218.46 0
+832 831 64 0
+803 832 64 0
+831 832 64 0
+832 832 -218.46 0
+833 832 64 0
+804 833 64 0
+832 833 64 0
+833 833 -218.46 0
+834 833 64 0
+805 834 64 0
+833 834 64 0
+834 834 -218.46 0
+835 834 64 0
+806 835 64 0
+834 835 64 0
+835 835 -218.46 0
+836 835 64 0
+807 836 64 0
+835 836 64 0
+836 836 -218.46 0
+837 836 64 0
+808 837 64 0
+836 837 64 0
+837 837 -218.46 0
+838 837 64 0
+809 838 64 0
+837 838 64 0
+838 838 -218.46 0
+839 838 64 0
+810 839 64 0
+838 839 64 0
+839 839 -218.46 0
+840 839 64 0
+811 840 64 0
+839 840 64 0
+840 840 -218.46 0
+841 840 64 0
+812 841 64 0
+840 841 64 0
+841 841 -218.46 0
diff --git a/SPQR/README.txt b/SPQR/README.txt
new file mode 100644
index 0000000..c9a8bc7
--- /dev/null
+++ b/SPQR/README.txt
@@ -0,0 +1,62 @@
+SuiteSparseQR Copyright (c) 2008-2013, Timothy A. Davis,
+GPU modules Copyright (c) 2013, Timothy A. Davis, Sencer Nuri Yeralan,
+and Sanjay Ranka.
+http://www.suitesparse.com
+
+NOTE: Version 2.0.0 of SuiteSparseQR is an alpha release.  This package
+adds a major new feature:  support for GPU computing.
+
+SuiteSparseQR is a multithreaded, multifrontal, rank-revealing sparse QR
+factorization method.
+
+QUICK START FOR MATLAB USERS (on Windows, Linux, Solaris, or the Mac OS): To
+compile and test the MATLAB mexFunctions, do this in the MATLAB command window:
+
+    cd SuiteSparse/SPQR/MATLAB
+    spqr_install
+    spqr_demo
+
+FOR MORE DETAILS: please see the User Guide in Doc/spqr_user_guide.pdf.
+
+FOR LINUX/UNIX/Mac USERS who want to use the C++ callable library:
+
+    To compile the C++ library and run a short demo, just type "make" in
+        the Unix shell.
+
+    To compile the SuiteSparseQR C++ library, in the Unix shell, do:
+
+        cd Lib ; make
+
+    To compile and test an exhaustive test, edit the Tcov/Makefile to select
+    the LAPACK and BLAS libraries, and then do (in the Unix shell):
+
+        cd Tcov ; make
+
+    Compilation options in SuiteSparse_config/SuiteSparse_config.mk,
+    SPQR/*/Makefile, or SPQR/MATLAB/spqr_make.m:
+
+        -DNPARTITION    to compile without METIS (default is to use METIS)
+
+        -DNEXPERT       to compile without the min 2-norm solution option
+                        (default is to include the Expert routines)
+
+        -DHAVE_TBB      to compile with Intel's Threading Building Blocks
+                        (default is to not use Intel TBB)
+
+        -DTIMING        to compile with timing and exact flop counts enabled
+                        (default is to not compile with timing and flop counts)
+
+--------------------------------------------------------------------------------
+
+SuiteSparseQR is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+SuiteSparseQR is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this Module; if not, write to the Free Software Foundation, Inc., 51 Franklin
+Street, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/SPQR/SPQRGPU/spqrgpu_buildAssemblyMaps.cpp b/SPQR/SPQRGPU/spqrgpu_buildAssemblyMaps.cpp
new file mode 100644
index 0000000..33eaac0
--- /dev/null
+++ b/SPQR/SPQRGPU/spqrgpu_buildAssemblyMaps.cpp
@@ -0,0 +1,191 @@
+// =============================================================================
+// === spqrgpu_buildAssemblyMaps ===============================================
+// =============================================================================
+
+#ifdef GPU_BLAS
+#include "spqr.hpp"
+
+void spqrgpu_buildAssemblyMaps
+(
+    Long numFronts,
+    Long n,
+    Long *Fmap,
+    Long *Post,
+    Long *Super,
+    Long *Rp,
+    Long *Rj,
+    Long *Sleft,
+    Long *Sp,
+    Long *Sj,
+    double *Sx,
+    Long *Fm,
+    Long *Cm,
+    Long *Childp,
+    Long *Child,
+    Long *CompleteStair,
+    int *CompleteRjmap,
+    Long *RjmapOffsets,
+    int *CompleteRimap,
+    Long *RimapOffsets,
+    SEntry *cpuS
+)
+{
+    PR (("GPU: building assembly maps:\n")) ;
+
+    /* Use Fmap and Stair to map a front's local rows to global rows. */
+    Long sindex = 0;
+
+    for(Long pf=0; pf<numFronts; pf++) // iterate in post-order
+    {
+        Long f = Post[pf];
+
+        /* Build Fmap for front f. */
+        Long pstart = Rp[f], pend = Rp[f+1];
+        for (Long p=pstart; p<pend ; p++)
+        {
+            Fmap[Rj[p]] = p - pstart;
+        }
+
+        /* Get workspaces for offset front members */
+        Long *Stair = CompleteStair + Rp[f];
+
+        // ---------------------------------------------------------------------
+        // initialize the staircase for front F
+        // ---------------------------------------------------------------------
+
+        // initialize the staircase with original rows of S
+        Long col1 = Super[f], col2 = Super[f+1];
+        Long fp = col2 - col1;
+        Long fn = Rp[f+1] - Rp[f];
+
+        for (Long j = 0 ; j < fp ; j++)
+        {
+            // global column j+col1 is the jth pivot column of front F
+            Long col = j + col1 ;
+            Stair[j] = Sleft [col+1] - Sleft [col] ;
+            PR (("GPU init rows, j: %ld count %ld\n", j, Stair[j])) ;
+        }
+
+        // contribution blocks from children will be added here
+        for (Long j = fp ; j < fn ; j++){ Stair[j] = 0; }
+
+        /* Build Rjmap and Stair for each child of the current front. */
+        for(Long p=Childp[f]; p<Childp[f+1]; p++)
+        {
+            Long c = Child[p];
+            PR (("child %ld\n", c)) ;
+            ASSERT (c >= 0 && c < f) ;
+            int *Rjmap = CompleteRjmap + RjmapOffsets[c];
+            Long pc = Rp [c] ;
+            Long pcend = Rp [c+1] ;
+            Long fnc = pcend - pc ;              // total # cols in child F
+            Long fpc = Super [c+1] - Super [c] ; // # of pivot cols in child
+            Long cm = Cm [c] ;                   // # of rows in child C
+            Long cn = fnc - fpc ;                // # of cols in child C
+
+            // Create the relative column indices of the child's contributions
+            // to the parent.  The global column 'col' in the child is a
+            // contribution to the jth column of its parent front.  j is
+            // a relative column index.
+            for (Long pp=0 ; pp<cn ; pp++)
+            {
+                Long col = Rj [pc+fpc+pp] ;    // global column index
+                Long j = Fmap [col] ;          // relative column index
+                Rjmap [pp] = j ;               // Save this column
+            }
+
+            ASSERT (cm >= 0 && cm <= cn) ;
+            pc += fpc ;                        // pointer to column indices in C
+            ASSERT (pc + cn == Rp [c+1]) ;
+            PR (("  cm %ld cn %ld\n", cm, cn)) ;
+
+            // add the child rows to the staircase
+            for (Long ci = 0 ; ci < cm ; ci++)
+            {
+                Long col = Rj [pc + ci] ;      // leftmost col of this row of C
+                Long j = Fmap [col] ;          // global col is jth col of F
+                PR (("  child col %ld j %ld\n", col, j)) ;
+                ASSERT (j >= 0 && j < fn) ;
+                Stair[j]++ ;                   // add this row to jth staircase
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // replace Stair with cumsum ([0 Stair]), and find # rows of F
+        // ---------------------------------------------------------------------
+
+        Long fm = 0 ;
+        for (Long j = 0 ; j < fn ; j++)
+        {
+            Long t = fm ;
+            fm += Stair[j] ;
+            Stair[j] = t ;
+        }
+        PR (("fm %ld %ld\n", fm, Stair[fn-1])) ;
+
+        // ---------------------------------------------------------------------
+        // pack all the S values into the cpuS workspace & advance scalar stair
+        // ---------------------------------------------------------------------
+
+        Long Scount = MAX(0, Sp[Sleft[Super[f+1]]] - Sp[Sleft[Super[f]]]);
+        if(Scount > 0)
+        {
+            for(Long k=0 ; k<fp ; k++)
+            {
+                /* pack all rows whose leftmost global column index is k+col1 */
+                Long leftcol = k + col1 ;
+
+                /* for each row of S whose leftmost column is leftcol */
+                for (Long row = Sleft [leftcol]; row < Sleft [leftcol+1]; row++)
+                {
+                    // get the location of this row in F & advance the staircase
+                    Long i = Stair[k]++;
+
+                    /* Pack into S */
+                    for (Long p=Sp[row] ; p<Sp[row+1] ; p++)
+                    {
+                        Long j = Sj[p];
+                        cpuS[sindex].findex = i*fn + j;
+                        cpuS[sindex].value = Sx[p];
+                        sindex++;
+                    }
+                }
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // build Rimap
+        // ---------------------------------------------------------------------
+
+        for (Long p = Childp [f] ; p < Childp [f+1] ; p++)
+        {
+            /* Get child details */
+            Long c = Child [p] ;                 // get the child c of front F
+            int *Rimap = CompleteRimap + RimapOffsets[c];
+            int *Rjmap = CompleteRjmap + RjmapOffsets[c];
+            Long pc = Rp [c] ;
+            // Long pcend = Rp [c+1] ;
+            // Long fnc = pcend - pc ;           // total # cols in child F
+            Long fpc = Super [c+1] - Super [c] ; // # of pivot cols in child
+            Long cm = Cm [c] ;                   // # of rows in child C
+            // Long cn = (fnc - fpc) ;           // cn =# of cols in child C
+            // ASSERT (cm >= 0 && cm <= cn) ;
+            pc += fpc ;                        // pointer to column indices in C
+            // ASSERT (pc + cn == Rp [c+1]) ;
+
+            /* -------------------------------------------------------------- */
+            /* construct the Rimap                                            */
+            /* -------------------------------------------------------------- */
+
+            for (Long ci = 0 ; ci < cm ; ci++)
+            {
+                Long j = Rjmap[ci] ;          // global col is jth col of F
+                ASSERT (j >= 0 && j < fn) ;
+                Long i = Stair[j]++ ;         // add row F(i,:) to jth staircase
+                ASSERT (i >= 0 && i < fm) ;
+                Rimap[ci] = i ;               // keep track of the mapping
+            }
+        }
+    }
+}
+#endif
diff --git a/SPQR/SPQRGPU/spqrgpu_computeFrontStaging.cpp b/SPQR/SPQRGPU/spqrgpu_computeFrontStaging.cpp
new file mode 100644
index 0000000..051f3ea
--- /dev/null
+++ b/SPQR/SPQRGPU/spqrgpu_computeFrontStaging.cpp
@@ -0,0 +1,231 @@
+// =============================================================================
+// === spqrgpu_computeFrontStaging =============================================
+// =============================================================================
+
+// Returns a front staging and whether the staging is feasible.
+// A front staging is infeasible if a front and its children do not fit on
+// the GPU at the same time.
+
+#ifdef GPU_BLAS
+#include "spqr.hpp"
+#include "GPUQREngine_Scheduler.hpp"
+
+void spqrgpu_computeFrontStaging
+(
+    // inputs, not modified on output
+    Long numFronts,     // total number of fronts (nf in caller)
+    Long *Parent,       // size nf+1, assembly tree (f=nf is placeholder)
+    Long *Childp,       // size nf+2, children of f are
+                        //      Child [Childp [f] ... Childp [f+1]-1]
+    Long *Child,        // size nf+1.
+
+    Long *Fm,           // size nf+1, front f has Fm [f] rows
+    Long *Cm,           // size nf+1, front f has Cm [f] rows in contrib
+    Long *Rp,           // size nf+1, Rj[Rp[f]...Rp[f+1]-1] are the cols in f
+    Long *Sp,           // size m+1, row pointers for sparse matrix S
+    Long *Sleft,        // size n+2, see spqr_stranspose for description
+    Long *Super,        // size nf+1, front f pivotal cols are
+                        //      Super[f]..Super[f+1]-1
+    Long *Post,         // size nf+1, front f is kth, if f = Post [k]
+
+    Long RimapSize,     // scalar, size of Rimap on the GPU (# of int's)
+    Long RjmapSize,     // scalar, size of Rimap on the GPU (# of int's)
+
+    // output, not defined on input:
+    bool *feasible,     // scalar, true if feasible, false if GPU memory too low
+    Long *numStages,    // scalar, number of stages
+    Long *Stagingp,     // size nf+2, fronts are in the list
+                        //      Post [Stagingp [stage]...Stagingp[stage+1]-1]
+    Long *StageMap,     // size nf, front f is in stage StageMap [f]
+
+    size_t *FSize,      // size nf+1, FSize[stage]: size in bytes of MongoF
+    size_t *RSize,      // size nf+1, Rsize[stage]: size in bytes of MongoR
+    size_t *SSize,      // size nf+1, Ssize[stage]: size in bytes of S
+    Long *FOffsets,     // size nf, front f in MondoF [FOffsets[f]...] on GPU
+    Long *ROffsets,     // size nf, R block in MondoR [Roffsets[f]...] on CPU
+    Long *SOffsets,     // size nf, S entries for front f are in
+                        //      wsS [SOffsets[f]...]
+
+    // input/output:
+    cholmod_common *cc
+)
+{
+
+    // -------------------------------------------------------------------------
+    // determine available GPU memory, required for all stages
+    // -------------------------------------------------------------------------
+
+    // gpuMemorySize = 0 is for testing only.  This value forces each front to
+    // appear in its own stage.  gpuMemorySize = 1 is also for testing, to
+    // check how this function handles problem that is infeasible due to lack
+    // of GPU memory.  We must also ensure that gpuMemorySize does not
+    // accidentally become negative.
+
+    size_t gpuMemorySize = cc->gpuMemorySize;
+
+//  printf ("GPU mem starts %g MB\n", (double) gpuMemorySize / (1024*1024)) ;
+
+    // account for two Scheduler work queues in the GPU memory
+    if (gpuMemorySize > 1)
+    {
+        // The GPU must hold two workspace queues, each of size maxQueueSize,
+        // and where each entry is of size sizeof(TaskDescriptor)
+        size_t maxQueueSize = ssgpu_maxQueueSize (gpuMemorySize) ;
+        size_t s = 2 * maxQueueSize * sizeof (TaskDescriptor) ;
+        gpuMemorySize = (gpuMemorySize > s) ? (gpuMemorySize-s) : 0 ;
+    }
+
+    // account for Rimap in the GPU memory
+    if (gpuMemorySize > 1)
+    {
+        size_t s = RimapSize * sizeof (int) ;
+        gpuMemorySize = (gpuMemorySize > s) ? (gpuMemorySize-s) : 0 ;
+    }
+
+    // account for Rjmap in the GPU memory
+    if (gpuMemorySize > 1)
+    {
+        size_t s = RjmapSize * sizeof (int) ;
+        gpuMemorySize = (gpuMemorySize > s) ? (gpuMemorySize-s) : 0 ;
+    }
+
+    // account for cudaMalloc memory manager overhead in the GPU memory
+    if (gpuMemorySize > 1)
+    {
+        size_t s = 1024 * 1024 ;        // just 1 MB for good measure
+        gpuMemorySize = (gpuMemorySize > s) ? (gpuMemorySize-s) : 0 ;
+    }
+
+//  printf ("GPU mem now    %g MB\n", (double) gpuMemorySize / (1024*1024)) ;
+
+    // -------------------------------------------------------------------------
+    // assign fronts to stages based on remaining GPU memory availability
+    // -------------------------------------------------------------------------
+
+    /* The memory requirement for a front is the summation of the memory
+       requirements from its children plus its own memory requirement.
+       If we use a postorder traversal, we only need to keep a rolling sum. */
+    size_t ReqMem = 0;   // also used in FOffsets
+
+    /* RMem is always < ReqMem.
+       RMem is not just for R, but an upper-bound on the amount of front data
+       we have to pull back from the GPU in the event that the front is staged.
+       We already would have room to pull back the CBlock if we account for it.
+       The QREngine is intelligent enough to pull only the needed FrontData.
+       The language is clearer in QREngine as well ("R" renamed "FrontData") */
+    size_t RMem = 0;     // also used in ROffsets
+
+    /* SMem is twice the number of S values (one for index, one for value). */
+    size_t SMem = 0;     // also used in SOffsets
+
+    /* VTMem is the amount of memory required for the VT blocks. */
+    size_t VTMem = 0;
+
+    Long stage = 0;
+    Stagingp[0] = 0;
+    for(Long p=0; p<numFronts; p++)
+    {
+        Long f = Post[p]; // The postordering ensures we visit children first
+
+        Long fm = Fm[f];
+        Long fn = Rp[f+1] - Rp[f];
+        Long fp = Super[f+1] - Super[f];
+        Long frank = MIN(fm, fp);
+        // Long cn = fn - fp ;
+        Long cm = Cm[f] ;
+        size_t frontMem = fm * fn;          // F
+        size_t rMem = (frank + cm) * fn;    // R + C
+
+        // for sMem, "2 *" assumes sizeof (SEntry) is 2*sizeof(double)
+        size_t sMem = 2 * (Sp[Sleft[Super[f+1]]] - Sp[Sleft[Super[f]]]);
+
+        // CEIL is defined in GPUQREngine
+        size_t vtMem = CEIL(fm, TILESIZE) * (TILESIZE+1) * TILESIZE ;
+
+        size_t childMemOld = 0;
+        size_t childMemNew = 0;
+
+        /* Add contribution block memory from children in earlier stages. */
+        for(Long cp=Childp[f]; cp<Childp[f+1]; cp++)
+        {
+            Long c = Child[cp];
+
+            // Long cfm = Fm[c];
+            Long cfn = Rp[c+1] - Rp[c];
+            Long cfp = Super[c+1] - Super[c];
+            // Long crank = MIN(cfm, cfp);
+            Long ccn = cfn - cfp ;
+            Long ccm = Cm[c];
+
+            if(StageMap[c] < stage)
+            {
+                childMemOld += ccm * ccn;
+            }
+            else
+            {
+                childMemNew += ccm * ccn;
+            }
+        }
+
+        /* determine which stage will contain this front */
+        if((ReqMem + (frontMem + childMemOld + sMem + vtMem)) * sizeof(double)
+            < gpuMemorySize)
+        {
+            /* If we can add the front to the current stage, accum its mem. */
+            FOffsets[f] = ReqMem;
+            ROffsets[f] = RMem;
+            SOffsets[f] = SMem / 2; // correct for data width
+            ReqMem += frontMem + childMemOld;
+            RMem += rMem;
+            SMem += sMem;
+            VTMem += vtMem;
+        }
+        else if (gpuMemorySize == 0 ||
+            ((frontMem + childMemOld + childMemNew + sMem + vtMem)
+             * sizeof(double) < gpuMemorySize))
+        {
+            /* Else if the front and its children fit on the GPU, add it
+               to the next stage and reset the mem accumulator. */
+            PR (("gpuMemorySize: move front to next stage\n")) ;
+            FSize[stage] = ReqMem;  // save the sizes for the stage
+            RSize[stage] = RMem;
+            SSize[stage] = SMem / 2; // correct for data width
+            Stagingp[++stage] = p;
+            ReqMem = 0;             // move onto the next stage
+            RMem = 0;
+            SMem = 0;
+            VTMem = 0;
+            FOffsets[f] = ReqMem;
+            ROffsets[f] = RMem;
+            SOffsets[f] = SMem / 2; // correct for data width
+            ReqMem += frontMem + childMemOld + childMemNew;
+            RMem += rMem;
+            SMem += sMem;
+            VTMem += vtMem;
+        }
+        else
+        {
+            /* Else the front and its children can't fit on the GPU,
+               so we have an infeasible schedule. */
+            PR (("gpuMemorySize too small: schedule infeasible\n")) ;
+            ERROR (CHOLMOD_GPU_PROBLEM, "GPU memory too small\n") ;
+            *numStages = 0 ;
+            *feasible = false ;
+            return ;
+        }
+        StageMap[f] = stage;
+    }
+
+    /* Make sure that even if everything fits in one stage
+       that we finalize the stage. */
+    FSize[stage] = ReqMem;
+    RSize[stage] = RMem;
+    SSize[stage] = SMem / 2;  // correct for data width
+    Stagingp[++stage] = numFronts;
+    if(Stagingp[stage] == Stagingp[stage-1]) stage--;
+
+    *numStages = stage;
+    *feasible = true;
+    return;
+}
+#endif
diff --git a/SPQR/SPQRGPU/spqrgpu_kernel.cpp b/SPQR/SPQRGPU/spqrgpu_kernel.cpp
new file mode 100644
index 0000000..999fb73
--- /dev/null
+++ b/SPQR/SPQRGPU/spqrgpu_kernel.cpp
@@ -0,0 +1,737 @@
+// =============================================================================
+// === spqrgpu_kernel ==========================================================
+// =============================================================================
+
+// Compute the QR factorization on the GPU.  Does not handle rank-deficient
+// matrices (R is OK, but will not be 'squeezed').  Does not handle complex
+// matrices.  Does not return the Householder vectors.
+
+#ifdef GPU_BLAS
+#include "spqr.hpp"
+
+#ifdef SUITESPARSE_TIMER_ENABLED
+#define INIT_TIME(x)    double x = 0.0; double time_ ## x;
+#define TIC(x)          time_ ## x = SuiteSparse_time();
+#define TOC(x)          x += SuiteSparse_time() - time_ ## x;
+#else
+#define INIT_TIME(x)
+#define TIC(x)
+#define TOC(x)
+#endif
+
+// -----------------------------------------------------------------------------
+// numfronts_in_stage
+// -----------------------------------------------------------------------------
+
+void numfronts_in_stage
+(
+    // input, not modified
+    Long stage,         // count the # of fronts in this stage
+    Long *Stagingp,     // fronts are in the list
+                        //      Post [Stagingp [stage]...Stagingp[stage+1]-1]
+    Long *StageMap,     // front f is in stage StageMap [f]
+    Long *Post,         // array of size nf (# of fronts)
+    Long *Child,        // list of children for each front is
+    Long *Childp,       //      in Child [Childp [f] ... Childp [f+1]-1]
+
+    // output, not defined on input
+    Long *p_numFronts,          // number of fronts in stage (a scalar)
+    Long *p_leftoverChildren    // number of leftover children (a scalar)
+)
+{
+    // the # of fronts at this stage is given by the Stagingp workspace
+    // plus any children within the stage that must still be assembled
+    Long sStart = Stagingp[stage];
+    Long sEnd = Stagingp[stage+1];
+    Long numFronts = (sEnd - sStart);
+    Long leftoverChildren = 0;
+    for(Long p=sStart; p<sEnd; p++) // for each front in the stage
+    {
+        Long f = Post[p];
+        for(Long cp=Childp[f]; cp<Childp[f+1]; cp++)
+        {
+            Long c = Child[cp];
+            if(StageMap[c] < stage) leftoverChildren++;
+        }
+    }
+    numFronts += leftoverChildren ;
+    *p_numFronts = numFronts ;
+    *p_leftoverChildren = leftoverChildren ;
+}
+
+
+// -----------------------------------------------------------------------------
+// spqrgpu_kernel
+// -----------------------------------------------------------------------------
+
+void spqrgpu_kernel
+(
+    spqr_blob <double> *Blob
+)
+{
+
+    INIT_TIME(complete);
+    TIC(complete);
+
+    // -------------------------------------------------------------------------
+    // get the Blob
+    // -------------------------------------------------------------------------
+
+    spqr_symbolic *QRsym = Blob->QRsym ;
+    spqr_numeric <double> *QRnum = Blob->QRnum ;
+    spqr_work <double> *Work = Blob->Work ;
+    double *Sx = Blob->Sx ;
+//  Long ntol = Blob->ntol ;        // no rank detection on the GPU
+    cholmod_common *cc = Blob->cc ;
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QR symbolic object
+    // -------------------------------------------------------------------------
+
+    Long *   Super = QRsym->Super ;      // size nf+1, gives pivot columns in F
+    Long *   Rp = QRsym->Rp ;            // size nf+1, pointers for pattern of R
+    Long *   Rj = QRsym->Rj ;            // size QRsym->rjsize, col indices of R
+    Long *   Sleft = QRsym->Sleft ;      // size n+2, leftmost column sets
+    Long *   Sp = QRsym->Sp ;            // size m+1, row pointers for S
+    Long *   Sj = QRsym->Sj ;            // size anz, column indices for S
+    Long *   Parent = QRsym->Parent ;    // size nf, for parent index
+    Long *   Child = QRsym->Child ;      // size nf, for lists of children
+    Long *   Childp = QRsym->Childp ;    // size nf+1, for lists of children
+    Long *   Fm = QRsym->Fm ;            // number of rows in F
+    Long *   Cm = QRsym->Cm ;            // # of rows in contribution blocks
+    Long     nf = QRsym->nf ;            // number of fronts
+    Long     n = QRsym->n ;              // number of columns
+    Long     m = QRsym->m ;              // number of rows
+    Long *   Post = QRsym->Post ;        // size nf
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QR numeric object
+    // -------------------------------------------------------------------------
+
+    double ** Rblock = QRnum->Rblock ;
+    char *    Rdead = QRnum->Rdead ;
+
+    // -------------------------------------------------------------------------
+    // get the stack for this task and the head/top pointers
+    // -------------------------------------------------------------------------
+
+    Long stack = 0 ;                    // no mixing of GPU and TBB parallelism
+    ASSERT (QRnum->ntasks == 1) ;
+
+    double * Stack_top = Work [stack].Stack_top ;
+    double * Stack_head = Work [stack].Stack_head ;
+
+    Long sumfrank = Work [stack].sumfrank ;
+    Long maxfrank = Work [stack].maxfrank ;
+
+    // -------------------------------------------------------------------------
+    // get the SPQR GPU members from symbolic analysis
+    // -------------------------------------------------------------------------
+
+    spqr_gpu *QRgpu = QRsym->QRgpu;
+
+    // assembly metadata
+    Long *RjmapOffsets = QRgpu->RjmapOffsets;
+    Long *RimapOffsets = QRgpu->RimapOffsets;
+    Long RjmapSize = MAX(1, QRgpu->RjmapSize);
+    Long RimapSize = MAX(1, QRgpu->RimapSize);
+
+    // staging metadata
+    Long numStages = QRgpu->numStages;
+    Long *Stagingp = QRgpu->Stagingp;
+    Long *StageMap = QRgpu->StageMap;
+    size_t *FSize = QRgpu->FSize;
+    size_t *RSize = QRgpu->RSize;
+    size_t *SSize = QRgpu->SSize;
+    Long *FOffsets = QRgpu->FOffsets;
+    Long *ROffsets = QRgpu->ROffsets;
+    Long *SOffsets = QRgpu->SOffsets;
+
+    // gpu parameters
+    size_t gpuMemorySize = cc->gpuMemorySize;
+
+    // -------------------------------------------------------------------------
+    // use a CUDA stream for asynchronous memory transfers
+    // -------------------------------------------------------------------------
+
+    cudaStream_t memoryStreamH2D;
+    cudaError_t result = cudaStreamCreate(&memoryStreamH2D);
+    if(result != cudaSuccess)
+    {
+        ERROR (CHOLMOD_GPU_PROBLEM, "cannot create CUDA stream to GPU") ;
+        return ;
+    }
+
+    // -------------------------------------------------------------------------
+    // use one mongo Stair for the entire problem
+    // -------------------------------------------------------------------------
+
+    Long stairsize = Rp [nf] ;
+    Long *Stair = (Long*) cholmod_l_malloc (stairsize, sizeof(Long), cc);
+
+    // -------------------------------------------------------------------------
+    // use a workspace directory to store contribution blocks, if needed
+    // semantics: create as needed, destroy after used
+    // -------------------------------------------------------------------------
+
+    Workspace **LimboDirectory =
+        (Workspace**) cholmod_l_calloc (nf, sizeof(Workspace*), cc);
+
+    // -------------------------------------------------------------------------
+    // allocate, construct, and ship S, Rimap, and Rjmap for the entire problem
+    // -------------------------------------------------------------------------
+
+    // malloc wsMondoS on the CPU (pagelocked), not on the GPU
+    Workspace *wsMondoS = Workspace::allocate (Sp[m],       // CPU pagelocked
+        sizeof(SEntry), false, true, false, true) ;
+
+    // malloc wsRimap and wsRjmap on both the CPU and GPU (not pagelocked)
+    Workspace *wsRimap  = Workspace::allocate (RimapSize,   // CPU and GPU
+        sizeof(int), false, true, true, false) ;
+    Workspace *wsRjmap  = Workspace::allocate (RjmapSize,   // CPU and GPU
+        sizeof(int), false, true, true, false) ;
+
+    // use shared Long workspace (Iwork) for Fmap and InvPost [ [
+    // Note that Iwork (0:nf-1) is already in use for Blob.Cm (size nf)
+    // was: Long *Fmap = (Long*) cholmod_l_malloc (n, sizeof(Long), cc);
+    cholmod_l_allocate_work (0, 2*nf + n + 1, 0, cc) ;
+    Long *Wi = (Long *) cc->Iwork ;     // Cm is size nf, already in use
+    Long *InvPost = Wi + nf ;           // InvPost is size nf+1
+    Long *Fmap    = Wi + (nf+1) ;       // Fmap is size n
+
+    Long numFronts = 0 ;
+    Front *fronts = NULL ;
+    Workspace *wsMondoF = NULL ;
+    Workspace *wsMondoR = NULL ;
+    Workspace *wsS = NULL ;
+
+    Long wsMondoF_size = 0 ;
+    Long wsMondoR_size = 0 ;
+    Long wsS_size = 0 ;
+    Long maxfronts_in_stage = 0 ;
+
+    // -------------------------------------------------------------------------
+    // check if out of memory
+    // -------------------------------------------------------------------------
+
+#define FREE_ALL_WORKSPACE \
+        cudaStreamDestroy(memoryStreamH2D); \
+        memoryStreamH2D = NULL ; \
+        Stair = (Long*) cholmod_l_free (stairsize, sizeof(Long), Stair, cc) ; \
+        if (LimboDirectory != NULL) \
+        { \
+            for (Long f2 = 0 ; f2 < nf ; f2++) \
+            { \
+                Workspace *wsLimbo2 = LimboDirectory[f2]; \
+                if (wsLimbo2 != NULL) \
+                { \
+                    wsLimbo2->assign(wsLimbo2->cpu(), NULL); \
+                    LimboDirectory[f2] = Workspace::destroy(wsLimbo2); \
+                } \
+            } \
+        } \
+        LimboDirectory = (Workspace**) \
+            cholmod_l_free (nf, sizeof(Workspace*), LimboDirectory, cc); \
+        wsMondoS = Workspace::destroy(wsMondoS); \
+        wsRjmap  = Workspace::destroy(wsRjmap); \
+        wsRimap  = Workspace::destroy(wsRimap); \
+        fronts = (Front*) \
+            cholmod_l_free (maxfronts_in_stage, sizeof(Front), fronts, cc) ; \
+        wsMondoF = Workspace::destroy(wsMondoF); \
+        wsMondoR = Workspace::destroy(wsMondoR); \
+        if (wsS != NULL) wsS->assign(NULL, wsS->gpu()); \
+        wsS = Workspace::destroy(wsS);
+
+        // was: Fmap = (Long*) cholmod_l_free (n, sizeof(Long), Fmap, cc);
+
+    if (cc->status < CHOLMOD_OK     // ensures Fmap and InvPost are allocated
+        || !Stair || !LimboDirectory || !wsMondoS || !wsRimap || !wsRjmap)
+    {
+        // cholmod_l_allocate_work will set cc->status if it fails, but it
+        // will "never" fail since the symbolic analysis has already allocated
+        // a larger Iwork than is required by the factorization
+        ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+        FREE_ALL_WORKSPACE ;
+        return;
+    }
+
+    // -------------------------------------------------------------------------
+    // build the assembly maps
+    // -------------------------------------------------------------------------
+
+    // construct/pack S, Rimap, and Rjmap
+    spqrgpu_buildAssemblyMaps (
+        nf, n,
+        Fmap,       // workspace for spqrgpu_buildAssemblyMaps
+        Post, Super, Rp, Rj,
+        Sleft, Sp, Sj, Sx,
+        Fm, Cm,
+        Childp, Child,
+        Stair,      // StairOffsets not needed because Rp suffices as offsets
+        CPU_REFERENCE(wsRjmap, int*), RjmapOffsets,
+        CPU_REFERENCE(wsRimap, int*), RimapOffsets,
+        CPU_REFERENCE(wsMondoS, SEntry*)
+                    // , Sp[m] (parameterno longer needed)
+    ) ;
+
+    // done using Iwork for Fmap ]
+    // Fmap = (Long*) cholmod_l_free (n, sizeof(Long), Fmap, cc);
+
+    // -------------------------------------------------------------------------
+    // ship the assembly maps asynchronously along the H2D memory stream.
+    // -------------------------------------------------------------------------
+
+    wsRjmap->transfer(cudaMemcpyHostToDevice, false, memoryStreamH2D);
+    wsRimap->transfer(cudaMemcpyHostToDevice, false, memoryStreamH2D);
+
+    // Keep track of where we are in MondoS
+    Long SOffset = 0;
+
+    // -------------------------------------------------------------------------
+    // allocate workspace for all stages
+    // -------------------------------------------------------------------------
+
+    for(Long stage=0; stage<numStages; stage++)
+    {
+        // find the memory requirements of this stage
+        Long leftoverChildren ;
+        numfronts_in_stage (stage, Stagingp, StageMap, Post, Child, Childp,
+            &numFronts, &leftoverChildren) ;
+        wsMondoF_size      = MAX (wsMondoF_size,      FSize [stage]) ;
+        wsMondoR_size      = MAX (wsMondoR_size,      RSize [stage]) ;
+        wsS_size           = MAX (wsS_size,           SSize [stage]) ;
+        maxfronts_in_stage = MAX (maxfronts_in_stage, numFronts) ;
+    }
+
+    // The front listing has fronts in the stage at
+    // the beginning with children needing assembly appearing at the end
+    fronts = (Front*) cholmod_l_malloc (maxfronts_in_stage, sizeof(Front),cc) ;
+
+    // This allocate is done once for each stage, but we still need
+    // to set the first FSize[stage] entries in wsMondoF to zero, for each
+    // stage.  So malloc the space on the GPU once, but see cudaMemset below.
+    // This workspace is not on the CPU.
+    wsMondoF = Workspace::allocate (wsMondoF_size,      // GPU only
+        sizeof(double), false, false, true, false) ;
+
+    // malloc R for each front on the CPU (not on the GPU)
+    wsMondoR = Workspace::allocate (wsMondoR_size,      // CPU only
+        sizeof(double), false, true, false, false) ;
+
+    // malloc S on the GPU (not on the CPU)
+    wsS = Workspace::allocate (wsS_size,                // GPU only
+        sizeof(SEntry), false, false, true, false) ;
+
+    if(!fronts || !wsMondoF || !wsMondoR || !wsS)
+    {
+        ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+        FREE_ALL_WORKSPACE ;
+        return ;
+    }
+
+    // -------------------------------------------------------------------------
+    // construct InvPost, the inverse postordering
+    // -------------------------------------------------------------------------
+
+    for (Long k = 0 ; k < nf ; k++)
+    {
+        Long f = Post [k] ;     // front f is the kth front in the postoder
+        ASSERT (f >= 0 && f < nf) ;
+        InvPost [f] = k ;       // record the same info in InvPost
+    }
+    InvPost [nf] = nf ;         // final placeholder
+
+    // -------------------------------------------------------------------------
+    // iterate over the staging schedule and factorize each stage
+    // -------------------------------------------------------------------------
+
+    for(Long stage=0; stage<numStages; stage++)
+    {
+        Long leftoverChildren ;
+
+        PR (("Building stage %ld of %ld\n", stage+1, numStages));
+
+        numfronts_in_stage (stage, Stagingp, StageMap, Post, Child, Childp,
+            &numFronts, &leftoverChildren) ;
+
+        Long sStart = Stagingp[stage];
+        Long sEnd = Stagingp[stage+1];
+        Long pNextChild = 0;
+
+        PR (("# fronts in stage has %ld (%ld regular + %ld leftovers).\n",
+            numFronts, numFronts-leftoverChildren, leftoverChildren));
+
+        // set fronts on the GPU to all zero
+        cudaMemset (wsMondoF->gpu(), (size_t) 0,
+            FSize [stage] * sizeof (double)) ;
+
+        // surgically transfer S input values to the GPU
+        Workspace surgical_S (SSize [stage], sizeof (SEntry)) ;
+        surgical_S.assign (((SEntry*) wsMondoS->cpu()) + SOffset, wsS->gpu());
+        surgical_S.transfer(cudaMemcpyHostToDevice, false, memoryStreamH2D);
+        surgical_S.assign (NULL, NULL) ;
+
+        SOffset += SSize[stage];
+
+        // get the fronts ready for GPUQREngine
+        for(Long p=sStart; p<sEnd; p++)
+        {
+            // get the front, parent, and relative p
+            Long f = Post[p];
+
+            // compute basic front fields
+            Long fm = Fm[f];                    // F is fm-by-fn
+            Long fn = Rp [f+1] - Rp [f];
+            Long col1 = Super [f] ;             // first global pivot col in F
+            Long fp = Super[f+1] - col1 ;       // with fp pivot columns
+            Long frank = MIN(fm, fp);
+
+            // create the front
+            Long frelp = leftoverChildren + (p - sStart);
+            Long pid = Parent[f];
+            Long gpid = Parent[pid];
+            Long prelp = EMPTY;      // assume that we have no parent in stage
+
+            // if we have a non-dummy parent in same stage.
+            if(gpid != EMPTY && StageMap[pid] == stage)
+            {
+                Long pp = InvPost [pid] ;
+                prelp = leftoverChildren + (pp - sStart);
+            }
+
+            PR (("building front %ld (%ld) with parent %ld (%ld)\n",
+                f, frelp, pid, prelp));
+
+            // using placement new
+            Front *front = new (&fronts[frelp]) Front(frelp, prelp, fm, fn);
+            front->fidg = f;
+            front->pidg = pid;
+
+            // override the default (dense) rank
+            front->rank = frank;
+
+            // attach the Stair
+            front->Stair = Stair + Rp[f];
+
+            // set pointer offsets into mondo workspaces
+            front->gpuF = GPU_REFERENCE(wsMondoF, double*) + FOffsets[f];
+            front->cpuR = CPU_REFERENCE(wsMondoR, double*) + ROffsets[f];
+
+            front->sparseMeta = SparseMeta();
+            SparseMeta *meta = &(front->sparseMeta);
+            meta->isSparse = true;
+            meta->fp = fp;
+            meta->nc = Childp[f+1] - Childp[f];
+
+            // S assembly
+            Long pSStart, pSEnd;
+            pSStart = Sp[Sleft[Super[f]]];
+            pSEnd = Sp[Sleft[Super[f+1]]];
+            meta->Scount = MAX(0, pSEnd - pSStart);
+            meta->cpuS = CPU_REFERENCE(wsS, SEntry*) + SOffsets[f];
+            meta->gpuS = GPU_REFERENCE(wsS, SEntry*) + SOffsets[f];
+
+            // pack assembly
+            meta->cn = fn - fp;
+            meta->cm = Cm[f];
+            meta->csize = meta->cm * meta->cn;
+            if(prelp != EMPTY) // parent in stage
+            {
+                meta->pn = Rp[pid+1] - Rp[pid];
+                meta->pc = Rp[f] + meta->fp;
+                meta->gpuRjmap = GPU_REFERENCE(wsRjmap, int*) + RjmapOffsets[f];
+                meta->gpuRimap = GPU_REFERENCE(wsRimap, int*) + RimapOffsets[f];
+                meta->gpuC = front->gpuF + front->rank * front->fn + meta->fp;
+            }
+            else if(Parent[pid] != EMPTY) // parent not in stage
+            {
+                meta->isStaged = true;
+            }
+
+            // build any lingering children
+            // the memory for the child fronts is at the end of its parent
+            // the Front metadata resides at the beginning of the frontList
+            Long ChildOffset = FOffsets[f] + fm*fn;
+            for(Long cp=Childp[f]; cp<Childp[f+1]; cp++)
+            {
+                Long c = Child[cp];
+                if(StageMap[c] == stage) continue; // only consider leftovers
+
+                // Long cfm = Fm[c];
+                Long cfn = Rp [c+1] - Rp [c];
+                Long cfp = Super[c+1] - Super[c];
+                // Long crank = MIN(cfm, cfp);
+                Long ccn = cfn - cfp;
+                Long ccm = Cm[c];
+
+                // only copy the exact CBlock back to the GPU
+                PR (("building child %ld (%ld) with parent %ld (%ld)\n",
+                    c, pNextChild, f, frelp));
+                Front *child = new (&fronts[pNextChild])
+                                   Front(pNextChild, frelp, ccm, ccn);
+                child->fidg = c;
+                child->pidg = f;
+
+                child->sparseMeta = SparseMeta();
+                SparseMeta *cmeta = &(child->sparseMeta);
+                cmeta->isSparse = true;
+                cmeta->pushOnly = true;
+                cmeta->nc = 0;
+                cmeta->pn = fn;
+                cmeta->cm = (int) ccm;
+                cmeta->cn = (int) ccn;
+                cmeta->csize = (int) ccm * (int) ccn;
+                cmeta->gpuRimap = GPU_REFERENCE(wsRimap, int*)+RimapOffsets[c];
+                cmeta->gpuRjmap = GPU_REFERENCE(wsRjmap, int*)+RjmapOffsets[c];
+
+                // the memory layout for children can be right next to
+                // its parent in memory since we're already charging our
+                // staging algorithm for the space of a front and its children
+                child->gpuF = cmeta->gpuC =
+                    GPU_REFERENCE(wsMondoF, double*) + ChildOffset;
+
+                // surgically copy the data to the GPU asynchronously
+                Workspace *wsLimbo = LimboDirectory[c];
+                wsLimbo->assign(wsLimbo->cpu(), child->gpuF);
+                wsLimbo->transfer(cudaMemcpyHostToDevice, false,
+                    memoryStreamH2D);
+
+                // advance the child offset in case we have more children
+                ChildOffset += ccm * ccn;
+
+                // advance the next child index
+                pNextChild++;
+            }
+        }
+
+        // wait for data to go down to the GPU.
+        cudaStreamSynchronize(memoryStreamH2D);
+
+        // now we can free limbo children
+        for(Long p=sStart; p<sEnd; p++)
+        {
+            Long f = Post[p];
+            for(Long cp=Childp[f]; cp<Childp[f+1]; cp++)
+            {
+                Long c = Child[cp];
+                if(StageMap[c] == stage) continue;
+                Workspace *wsLimbo = LimboDirectory[c];
+                wsLimbo->assign(wsLimbo->cpu(), NULL);
+                LimboDirectory[c] = Workspace::destroy(wsLimbo);
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // Run the QR Engine
+        // ---------------------------------------------------------------------
+
+        INIT_TIME(engine);
+        TIC(engine);
+
+        QREngineStats stats;
+        GPUQREngine(gpuMemorySize, fronts, numFronts, Parent, Childp, Child,
+            &stats);
+        cc->gpuKernelTime += stats.kernelTime;
+        cc->gpuFlops += stats.flopsActual;
+        cc->gpuNumKernelLaunches += stats.numLaunches;
+        TOC(engine);
+        PR (("%f engine time\n", engine));
+
+#ifndef NDEBUG
+        for(Long p=sStart; p<sEnd; p++)
+        {
+            Long f = Post[p];
+            Long relp = leftoverChildren + (p - sStart);
+
+            Long fm = Fm[f];                     // F has fm rows
+            Long fn = Rp [f+1] - Rp [f] ;        // F has fn cols
+            Long fp = Super [f+1] - Super [f] ;  // F has fp pivot columns
+            Long frank = MIN(fm, fp);
+            double *cpuF = (&fronts[relp])->cpuR;
+
+            PR (("\n --- Front factorized, front %ld fm %ld fn %ld fp %ld frank %ld",
+                f, fm, fn, fp, frank)) ;
+            PR ((" : rows %ld to %ld of R (1-based)\n",
+                1+ Super [f], 1+ Super [f+1]-1)) ;
+            PR (("     Printing just R part, stored by row:\n")) ;
+            for (Long j = 0 ; j < fn ; j++)
+            {
+                PR (("   --- column %ld of %ld\n", j, fn)) ;
+                for (Long i = 0 ; i < frank ; i++)
+                {
+                    if (i == j) PR (("      [ diag:     ")) ;
+                    else        PR (("      row %4ld    ", i)) ;
+                    PR ((" %10.4g", cpuF [fn*i+j])) ;
+                    if (i == j) PR ((" ]\n")) ;
+                    else        PR (("\n")) ;
+                }
+                PR (("\n")) ;
+            }
+        }
+#endif
+
+        // ---------------------------------------------------------------------
+        // Pack R from each front onto the Davis Stack.
+        // ---------------------------------------------------------------------
+
+        for(Long p=sStart; p<sEnd; p++)
+        {
+            Long f = Post[p];
+            Long relp = leftoverChildren + (p - sStart);
+
+            Long fm = Fm[f];                     // F has fm rows
+            Long fn = Rp [f+1] - Rp [f] ;        // F has fn cols
+            Long fp = Super [f+1] - Super [f] ;  // F has fp pivot columns
+            Long frank = MIN(fm, fp);
+            double *cpuF = (&fronts[relp])->cpuR;
+
+            // cpuF for frontal matrix f has been factorized on the GPU and
+            // copied to the CPU.  It is (frank+cm)-by-fn, stored by row.  The
+            // entries in R for this front f are in the first frank rows, in
+            // upper triangular form and stored in unpacked form.  On the Davis
+            // stack, R is stored by columns in packed form.
+
+            // Record where R is in the Davis stack
+            Rblock [f] = Stack_head ;
+
+            // copy the leading upper triangular part from cpuF to R
+            for (Long j = 0 ; j < frank ; j++)
+            {
+                // copy column j of the front from cpuF to R
+                for (Long i = 0 ; i <= j ; i++)
+                {
+                    (*Stack_head++) = cpuF [fn*i+j] ;
+                }
+            }
+            // copy the rectangular part from cpuF to R
+            for (Long j = frank ; j < fn ; j++)
+            {
+                // copy column j of the front from cpuF to R
+                for (Long i = 0 ; i < frank ; i++)
+                {
+                    (*Stack_head++) = cpuF [fn*i+j] ;
+                }
+            }
+
+            // When packed, R has frank*fn - (frank*(frank-1))/2 entries.
+            ASSERT ((Stack_head - Rblock [f]) ==
+                    (frank*fn - (frank*(frank-1))/2)) ;
+
+            // If the front needs to be staged, copy the CBlock into limbo.
+            SparseMeta *meta = &((&fronts[relp])->sparseMeta);
+            if(meta->isStaged)
+            {
+                // offset into R to get the start of C
+                double *C = cpuF + frank * fn + fp;
+
+                PR (("   ===> move to Limbo\n")) ;
+
+                // allocate a Limbo
+                int cn = fn - fp;
+                int cm = MIN (fm-frank, cn);
+
+                PR (("frontList[%ld] is front %ld, staged;", relp, f)) ;
+                PR (("CBlock is %d by %d\n", cm, cn)) ;
+
+                // calloc pagelocked memory on the CPU
+                Workspace *wsLimbo =
+                    LimboDirectory[f] = Workspace::allocate (cm * cn,   // CPU
+                    sizeof(double), true, true, false, true);
+
+                if (wsLimbo == NULL)
+                {
+                    ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+                    FREE_ALL_WORKSPACE ;
+                    return ;
+                }
+
+                double *L = CPU_REFERENCE(wsLimbo, double*);
+
+                // copy from C into Limbo
+                for(Long i=0; i<cm; i++)
+                {
+                    for(Long j=i; j<cn; j++)
+                    {
+                        double value = C[i*fn+j];
+                        L[i*cn+j] = value;
+                        PR (("%f\n", value));
+                    }
+                    PR (("\n"));
+                }
+            }
+        }
+
+        // cleanup after this stage
+
+        #if 0
+        // This is not needed since Front->F is NULL (nothing on the CPU)
+        for(int f=0; f<numFronts; f++)
+        {
+            // invoke destructor without freeing memory
+            Front *front = (&fronts[f]);
+            front->~Front();
+        }
+        #endif
+
+    }
+
+    // -------------------------------------------------------------------------
+    // cleanup the cuda memory transfer stream and free workspaces
+    // -------------------------------------------------------------------------
+
+    FREE_ALL_WORKSPACE ;
+    // done using Iwork for InvPost ]
+
+    // -------------------------------------------------------------------------
+    // cleanup rank detection results (no rank detection done by the GPU)
+    // -------------------------------------------------------------------------
+
+    Work [stack].Stack_head = Stack_head  ;
+    Work [stack].Stack_top = Stack_top ;
+
+    // Compute sumfrank and maxfrank in a last-minute manner, and find Rdead
+    for(Long f=0; f<nf; f++)
+    {
+        // compute basic front fields
+        Long fm = Fm[f];                    // F is fm-by-fn
+        // Long fn = Rp [f+1] - Rp [f];
+        Long col1 = Super [f] ;             // first global pivot col in F
+        Long fp = Super[f+1] - col1 ;       // with fp pivot columns
+        Long frank = MIN(fm, fp);
+        PR (("cleanup front %ld, %ld by %ld with %ld pivots, frank %ld\n",
+            f, fm, Rp [f+1] - Rp [f], fp, frank)) ;
+
+        if (fp > fm)
+        {
+            // hit the wall.  The front is fm-by-fn but has fp pivot columns
+            PR (("hit the wall, npiv %ld k %ld rank %ld\n", fp, fm, fm)) ;
+            for (Long k = fm ; k < fp ; k++)
+            {
+                Rdead [col1 + k] = 1 ;
+            }
+        }
+
+        sumfrank += frank ;
+        maxfrank = MAX (maxfrank, frank) ;
+    }
+
+    Work [stack].sumfrank = sumfrank ;  // sum rank of fronts for this stack
+    Work [stack].maxfrank = maxfrank ;  // max rank of fronts for this stack
+
+    TOC(complete) ;
+    PR (("%f complete time\n", complete));
+}
+
+// -------------------------------------------------------------------------
+
+void spqrgpu_kernel
+(
+    spqr_blob <Complex> *Blob
+)
+{
+    // complex case not yet supported on the GPU
+    cholmod_common *cc = Blob->cc ;
+    ERROR (CHOLMOD_INVALID, "complex case not yet supported on the GPU") ;
+    return ;
+}
+#endif
diff --git a/SPQR/Source/SuiteSparseQR.cpp b/SPQR/Source/SuiteSparseQR.cpp
new file mode 100644
index 0000000..b302fde
--- /dev/null
+++ b/SPQR/Source/SuiteSparseQR.cpp
@@ -0,0 +1,1433 @@
+// =============================================================================
+// === SuiteSparseQR ===========================================================
+// =============================================================================
+
+//  QR factorization of a sparse matrix, and optionally solve a least squares
+//  problem, Q*R = A*E where A is m-by-n, E is a permutation matrix, R is
+//  upper triangular if A is full rank, and Q is an orthogonal matrix.
+//  R is upper trapezoidal or a "squeezed" upper trapezoidal matrix if A is
+//  found to be rank deficient.
+//
+//  All output arrays are optional.  If you pass NULL for the C, R, E, X,
+//  and/or H array handles, those arrays will not be returned.
+//
+//  The Z output (either sparse or dense) is either C, C', or X where
+//  C = Q'*B and X = E*(R\(Q'*B)).  The latter gives the result of X=A\B,
+//  which is the least-squares solution if m > n.
+//
+//  To return full-sized results, set econ = m.  Then C and R will have m rows,
+//  and C' will have m columns.
+//
+//  To return economy-sized results, set econ = n.  Then C and R will have k
+//  rows and C' will have k columns, where k = min(m,n).
+//
+//  To return rank-sized results, set econ = 0.  Then C and R will have k rows
+//  and C' will have k columns, where k = r = the estimated rank of A.
+//
+//  In all three cases, k = max (min (m, econ), r).
+//
+//  To compute Q, pass in B = speye (m), and then set getCTX to 1
+//  (Q is then returned as Zsparse).
+//
+//  The Householder representation of Q is returned in H, HTau, and HPinv.
+//  E is a permutation vector represention of the column permutation, for
+//  the factorization Q*R=A*E.
+
+
+#include "spqr.hpp"
+
+#define XCHUNK 4            // FUTURE: make this a parameter
+
+#define FREE_ALL \
+        spqr_freefac (&QR, cc) ; \
+        cholmod_l_free (rjsize+1, sizeof (Long),  H2p, cc) ; \
+        cholmod_l_free_dense  (&HTau, cc) ; \
+        cholmod_l_free_sparse (&H, cc) ; \
+        cholmod_l_free_sparse (&R, cc) ; \
+        cholmod_l_free_sparse (&Xsparse, cc) ; \
+        cholmod_l_free_sparse (&Zsparse, cc) ; \
+        cholmod_l_free_dense  (&Zdense, cc) ; \
+        cholmod_l_free (xsize, sizeof (Entry), Xwork, cc) ; \
+        cholmod_l_free (csize, sizeof (Entry), C, cc) ; \
+        cholmod_l_free (wsize, sizeof (Entry), W, cc) ; \
+        cholmod_l_free (maxfrank, sizeof (Long), Rlive, cc) ; \
+        cholmod_l_free (maxfrank, sizeof (Entry *), Rcolp, cc) ; \
+        cholmod_l_free (n+bncols, sizeof (Long), E, cc) ; \
+        cholmod_l_free (m, sizeof (Long), HP1inv, cc) ;
+
+// returns rank(A) estimate if successful, EMPTY otherwise
+template <typename Entry> Long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // number of rows of C and R to return; a value
+                            // less than the rank r of A is treated as r, and
+                            // a value greater than m is treated as m.
+                            // That is, e = max(min(m,econ),rank(A)) gives the
+                            // number of rows of C and R, and columns of C'.
+
+    int getCTX,             // if 0: return Z = C of size econ-by-bncols
+                            // if 1: return Z = C' of size bncols-by-econ
+                            // if 2: return Z = X of size econ-by-bncols
+
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // B is either sparse or dense.  If Bsparse is non-NULL, B is sparse and
+    // Bdense is ignored.  If Bsparse is NULL and Bdense is non-NULL, then B is
+    // dense.  B is not present if both are NULL.
+    cholmod_sparse *Bsparse,    // B is m-by-bncols
+    cholmod_dense *Bdense,
+
+    // output arrays, neither allocated nor defined on input.
+
+    // Z is the matrix C, C', or X, either sparse or dense.  If p_Zsparse is
+    // non-NULL, then Z is returned as a sparse matrix.  If p_Zsparse is NULL
+    // and p_Zdense is non-NULL, then Z is returned as a dense matrix.  Neither
+    // are returned if both arguments are NULL.
+    cholmod_sparse **p_Zsparse,
+    cholmod_dense  **p_Zdense,
+
+    cholmod_sparse **p_R,   // the R factor
+    Long **p_E,             // size n; fill-reducing ordering of A.
+    cholmod_sparse **p_H,   // the Householder vectors (m-by-nh)
+    Long **p_HPinv,         // size m; row permutation for H
+    cholmod_dense **p_HTau, // size 1-by-nh, Householder coefficients
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Long *Q1fill, *R1p, *R1j, *P1inv, *Zp, *Zi, *Rp, *Ri, *Rap, *Hp, *H2p,
+        *Hi, *HP1inv, // *Ap, *Ai,
+        *Rlive, *E, *Bp, *Bi ;
+    Entry *R1x, *B, *Zx, *Rx, *X2, *C, *Hx, *C1, *X1, *Xwork, // *Ax,
+        *W, **Rcolp, *Bx ;
+    Long i, j, k, p, p2, n1cols, n1rows, B_is_sparse, Z_is_sparse, getC,
+        getR, getH, getE, getX, getZ, iold, inew, rank, n2, rnz, znz, zn, zm,
+        pr, xsize, getT, nh, k1, k2, xchunk, xncol, m, n, csize, wsize, ldb,
+        maxfrank, rjsize, bncols, bnrows ;
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+    SuiteSparseQR_factorization <Entry> *QR ;
+    cholmod_sparse *Xsparse, *Zsparse, *R, *H ;
+    cholmod_dense *Zdense, *HTau ;
+
+    double t0 = SuiteSparse_time ( ) ;
+
+    int ok = TRUE ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    if (p_Zsparse != NULL) *p_Zsparse = NULL ;
+    if (p_Zdense  != NULL) *p_Zdense  = NULL ;
+    if (p_R != NULL) *p_R = NULL ;
+    if (p_E  != NULL) *p_E  = NULL ;
+    if (p_H != NULL) *p_H = NULL ;
+    if (p_HPinv != NULL) *p_HPinv = NULL ;
+    if (p_HTau  != NULL) *p_HTau  = NULL ;
+
+    RETURN_IF_NULL_COMMON (EMPTY) ;
+    RETURN_IF_NULL (A, EMPTY) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (A, EMPTY) ;
+    if (Bsparse != NULL) RETURN_IF_XTYPE_INVALID (Bsparse, EMPTY) ;
+    if (Bdense  != NULL) RETURN_IF_XTYPE_INVALID (Bdense,  EMPTY) ;
+    cc->status = CHOLMOD_OK ;
+
+    n = 0 ;
+    m = 0 ;
+    rnz = 0 ;
+    nh = 0 ;
+
+    Rap = NULL ;
+
+    R = NULL ;
+    Rp = NULL ;
+    Ri = NULL ;
+    Rx = NULL ;
+
+    Xsparse = NULL ;
+    Zsparse = NULL ;
+    Zdense = NULL ;
+
+    Zp = NULL ;
+    Zi = NULL ;
+    Zx = NULL ;
+
+    H = NULL ;
+    Hp = NULL ;
+    Hi = NULL ;
+    Hx = NULL ;
+    H2p = NULL ;
+
+    HTau = NULL ;
+    HP1inv = NULL ;
+
+    maxfrank = 0 ;
+    xsize = 0 ;
+    csize = 0 ;
+    wsize = 0 ;
+
+    Xwork = NULL ;
+    C = NULL ;
+    Rcolp = NULL ;
+    Rlive = NULL ;
+
+    E = NULL ;
+    W = NULL ;
+
+    m = A->nrow ;
+    n = A->ncol ;
+    // Ap = (Long *) A->p ;
+    // Ai = (Long *) A->i ;
+    // Ax = (Entry *) A->x ;
+
+    // B is an optional input.  It can be sparse or dense
+    B_is_sparse = (Bsparse != NULL) ;
+    if (B_is_sparse)
+    {
+        // B is sparse
+        bncols = Bsparse->ncol ;
+        bnrows = Bsparse->nrow ;
+        Bp = (Long *) Bsparse->p ;
+        Bi = (Long *) Bsparse->i ;
+        Bx = (Entry *) Bsparse->x ;
+        ldb = 0 ;       // unused
+    }
+    else if (Bdense != NULL)
+    {
+        // B is dense
+        bncols = Bdense->ncol ;
+        bnrows = Bdense->nrow ;
+        Bp = NULL ;
+        Bi = NULL ;
+        Bx = (Entry *) Bdense->x ;
+        ldb = Bdense->d ;
+    }
+    else
+    {
+        // B is not present
+        bncols = 0 ;
+        bnrows = m ;
+        Bp = NULL ;
+        Bi = NULL ;
+        Bx = NULL ;
+        ldb = 0 ;
+    }
+
+    if (bnrows != m)
+    {
+        ERROR (CHOLMOD_INVALID, "A and B must have the same # of rows") ;
+        return (EMPTY) ;
+    }
+    PR (("bncols : %ld\n", bncols)) ;
+
+    // Z = C, C', or X, can be sparse or dense
+    Z_is_sparse = (p_Zsparse != NULL) ;
+    getZ = (Z_is_sparse || p_Zdense != NULL) && (getCTX >= 0 && getCTX <= 2) ;
+
+    // Z = C is an optional output of size econ-by-bncols, sparse or dense
+    getC = getZ && (getCTX == 0) ;
+
+    // Z = C' is an optional output of size bncols-by-econ, sparse or dense
+    getT = getZ && (getCTX == 1) ;
+
+    // Z = X is an optional output of size n-by-bncols, sparse or dense
+    getX = getZ && (getCTX == 2) ;
+
+    // R is an optional output of size econ-by-n.  It is always sparse
+    getR = (p_R != NULL) ;
+
+    // E is an optional output; it is a permutation vector of length n+bncols
+    getE = (p_E != NULL) ;
+
+    // H is an optional output, of size m-by-nh.  It is always sparse
+    getH = (p_H != NULL && p_HPinv != NULL && p_HTau != NULL) ;
+
+    // at most one of C, C', or X will be returned as the Z matrix
+    ASSERT (getC + getT + getX <= 1) ;
+
+    PR (("getCTX %d getZ %ld getC %ld getT %ld getX %ld getR %ld getE %ld"
+        "getH %ld\n", getCTX, getZ, getC, getT, getX, getR, getE, getH)) ;
+
+    // -------------------------------------------------------------------------
+    // symbolic and numeric QR factorization of [A B], exploiting singletons
+    // -------------------------------------------------------------------------
+
+    QR = spqr_1factor (ordering, tol, bncols, getH, A, ldb, Bp, Bi, Bx, cc) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        return (EMPTY) ;
+    }
+
+    R1p = QR->R1p ;
+    R1j = QR->R1j ;
+    R1x = QR->R1x ;
+    P1inv = QR->P1inv ;
+    Q1fill = QR->Q1fill ;
+    QRsym = QR->QRsym ;
+    QRnum = QR->QRnum ;
+    n1rows = QR->n1rows ;
+    n1cols = QR->n1cols ;
+    n2 = n - n1cols ;
+    rank = QR->rank ;
+    tol = QR->tol ;
+
+    PR (("Singletons: n1cols %ld n1rows %ld\n", n1cols, n1rows)) ;
+    PR (("n2 %ld n %ld QRsym->n %ld\n", n2, n, QRsym->n)) ;
+
+    // -------------------------------------------------------------------------
+    // determine the economy size
+    // -------------------------------------------------------------------------
+
+    // econ gives the number of rows of C and R to return.  It must be at least
+    // as large as the estimated rank of R (all entries in R are always
+    // returned).  It can be no larger than m (all of C and R are returned).
+    // If X is requested but not C nor R, then only rows 0 to rank-1 of C is
+    // extracted from the QR factorization.
+
+    if (getX && !getR)
+    {
+        econ = rank ;
+    }
+    else
+    {
+        // constrain econ to be between rank and m
+        econ = MIN (m, econ) ;
+        econ = MAX (econ, rank) ;
+    }
+    PR (("getX %ld econ %ld\n", getX, econ)) ;
+
+    zm = getT ? bncols : econ ;     // number of rows of Z, if present
+    zn = getT ? econ : bncols ;     // number of columns of Z, if present
+
+    ASSERT (rank <= econ && econ <= m) ;
+
+    // -------------------------------------------------------------------------
+    // count the entries in the R factor of Y
+    // -------------------------------------------------------------------------
+
+    if (getZ)
+    {
+        // Zsparse is zm-by-zn, but with no entries so far
+        Zsparse = cholmod_l_allocate_sparse (zm, zn, 0, TRUE, TRUE, 0, xtype,
+            cc) ;
+        Zp = Zsparse ? ((Long *) Zsparse->p) : NULL ;
+        PR (("Z is zm %ld by zn %ld\n", zm, zn)) ;
+    }
+
+    if (getR)
+    {
+        // R is econ-by-n, but with no entries so far
+        R = cholmod_l_allocate_sparse (econ, n, 0, TRUE, TRUE, 0, xtype, cc) ;
+        Rp = R ? ((Long *) R->p) : NULL ;
+        Rap = Rp + n1cols ;
+    }
+
+    rjsize = QRsym->rjsize ;    // rjsize is an upper bound on nh
+
+    if (getH)
+    {
+        H2p = (Long *) cholmod_l_malloc (rjsize+1, sizeof (Long), cc) ;
+    }
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        FREE_ALL ;
+        return (EMPTY) ;
+    }
+
+    // count the number of nonzeros in each column of the R factor of Y,
+    // and count the entries in the Householder vectors
+    spqr_rcount (QRsym, QRnum, n1rows, econ, n2, getT, Rap, Zp, H2p, &nh) ;
+
+#ifndef NDEBUG
+    if (getZ) for (k = 0 ; k < zn ; k++)
+    {
+        PR (("Zp [%ld] %ld count\n", k, Zp [k])) ;
+    }
+    if (getR) for (k = 0 ; k < n ; k++)
+    {
+        PR (("R factor count Rp [%ld] = %ld\n", k, Rp [k])) ;
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // count the entries in the singleton rows, R1
+    // -------------------------------------------------------------------------
+
+    if (getR)
+    {
+        // add the entries in the singleton rows R11 and R12
+        for (k = 0 ; k < n1rows ; k++)
+        {
+            for (p = R1p [k] ; p < R1p [k+1] ; p++)
+            {
+                j = R1j [p] ;
+                ASSERT (j >= k && j < n) ;
+                Rp [j]++ ;
+            }
+        }
+    }
+
+#ifndef NDEBUG
+    if (getR) for (k = 0 ; k < n ; k++)
+    {
+        PR (("R factor count Rp [%ld] = %ld after R1\n", k, Rp [k])) ;
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // count the entries in B1 and add them to the counts of Z
+    // -------------------------------------------------------------------------
+
+    if (getZ && n1rows > 0)
+    {
+        // add the entries in the singleton rows of B1
+        if (B_is_sparse)
+        {
+            // B is sparse
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // count the nonzero entries in column k of B1
+                for (p = Bp [k] ; p < Bp [k+1] ; p++)
+                {
+                    iold = Bi [p] ;
+                    inew = P1inv [iold] ;
+                    if (inew < n1rows)
+                    {
+                        Zp [getT ? inew : k]++ ;
+                    }
+                }
+            }
+        }
+        else
+        {
+            // B is dense
+            B = Bx ;
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // count the nonzero entries in column k of B1
+                for (iold = 0 ; iold < m ; iold++)
+                {
+                    inew = P1inv [iold] ;
+                    if (inew < n1rows && B [iold] != (Entry) 0)
+                    {
+                        Zp [getT ? inew : k]++ ;
+                    }
+                }
+                B += ldb ;
+            }
+        }
+        #ifndef NDEBUG
+        for (k = 0 ; k < zn ; k++)
+        {
+            PR (("after adding singletons Zp [%ld] %ld count\n", k, Zp [k])) ;
+        }
+        #endif
+    }
+
+    // -------------------------------------------------------------------------
+    // compute the Rp and Zp column pointers (skip if NULL)
+    // -------------------------------------------------------------------------
+
+    // no Long overflow can occur
+    rnz = spqr_cumsum (n, Rp) ;     // Rp = cumsum ([0 Rp])
+    znz = spqr_cumsum (zn, Zp) ;    // Zp = cumsum ([0 Zp])
+
+    // -------------------------------------------------------------------------
+    // allocate R, Z, and H
+    // -------------------------------------------------------------------------
+
+    if (getR)
+    {
+        // R now has space for rnz entries
+        cholmod_l_reallocate_sparse (rnz, R, cc) ;
+        Ri = (Long  *) R->i ;
+        Rx = (Entry *) R->x ;
+    }
+
+    if (getZ)
+    {
+        // Zsparse now has space for znz entries
+        cholmod_l_reallocate_sparse (znz, Zsparse, cc) ;
+        Zi = (Long  *) Zsparse->i ;
+        Zx = (Entry *) Zsparse->x ;
+    }
+
+    if (getH)
+    {
+        // H is m-by-nh with hnz entries, where nh <= rjsize
+        Long hnz = H2p [nh] ;
+        H = cholmod_l_allocate_sparse (m, nh, hnz, TRUE, TRUE, 0, xtype, cc) ;
+        // copy the column pointers from H2p to Hp
+        if (cc->status == CHOLMOD_OK)
+        {
+            Hp = (Long  *) H->p ;
+            Hi = (Long  *) H->i ;
+            Hx = (Entry *) H->x ;
+            for (k = 0 ; k <= nh ; k++)
+            {
+                Hp [k] = H2p [k] ;
+            }
+        }
+        // free the H2p workspace, and allocate HTau
+        cholmod_l_free (rjsize+1, sizeof (Long), H2p, cc) ;
+        H2p = NULL ;
+        HTau = cholmod_l_allocate_dense (1, nh, 1, xtype, cc) ;
+    }
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        FREE_ALL ;
+        return (EMPTY) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // place the singleton rows in R
+    // -------------------------------------------------------------------------
+
+    if (getR)
+    {
+        // add the entries in the singleton rows R11 and R12
+        for (k = 0 ; k < n1rows ; k++)
+        {
+            for (p = R1p [k] ; p < R1p [k+1] ; p++)
+            {
+                j = R1j [p] ;
+                ASSERT (j >= k && j < n) ;
+                pr = Rp [j]++ ;
+                Ri [pr] = k ;
+                Rx [pr] = R1x [p] ;
+            }
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // place the B1 entries in C or C' 
+    // -------------------------------------------------------------------------
+
+    if (getZ && n1rows > 0)
+    {
+        if (B_is_sparse)
+        {
+            // B is sparse
+            PR (("B1 sparse:\n")) ;
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // copy the nonzero entries in column k of B1 into C or C'
+                for (p = Bp [k] ; p < Bp [k+1] ; p++)
+                {
+                    iold = Bi [p] ;
+                    inew = P1inv [iold] ;
+                    if (inew < n1rows)
+                    {
+                        if (getT)
+                        {
+                            p2 = Zp [inew]++ ;
+                            Zi [p2] = k ;
+                            Zx [p2] = spqr_conj (Bx [p]) ;
+                        }
+                        else
+                        {
+                            p2 = Zp [k]++ ;
+                            Zi [p2] = inew ;
+                            Zx [p2] = Bx [p] ;
+                        }
+                    }
+                }
+            }
+        }
+        else
+        {
+            // B is dense
+            B = Bx ;
+            PR (("B1 dense:\n")) ;
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // copy the nonzero entries in column k of B1 into C or C'
+                for (iold = 0 ; iold < m ; iold++)
+                {
+                    inew = P1inv [iold] ;
+                    if (inew < n1rows && B [iold] != (Entry) 0)
+                    {
+                        if (getT)
+                        {
+                            p2 = Zp [inew]++ ;
+                            Zi [p2] = k ;
+                            Zx [p2] = spqr_conj (B [iold]) ;
+                        }
+                        else
+                        {
+                            p2 = Zp [k]++ ;
+                            Zi [p2] = inew ;
+                            Zx [p2] = B [iold] ;
+                        }
+                    }
+                }
+                B += ldb ;
+            }
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // place the R factor entries in Z and R, and get H
+    // -------------------------------------------------------------------------
+
+    spqr_rconvert (QRsym, QRnum, n1rows, econ, n2, getT, Rap, Ri, Rx,
+        Zp, Zi, Zx, Hp, Hi, Hx, HTau ? ((Entry *) HTau->x) : NULL) ;
+
+    // -------------------------------------------------------------------------
+    // finalize the column pointers of Z and R
+    // -------------------------------------------------------------------------
+
+    spqr_shift (n, Rp) ;
+    spqr_shift (zn, Zp) ;
+
+    // -------------------------------------------------------------------------
+    // Finalize Z: either Z = E*(R\Z) or Z = full (Z)
+    // -------------------------------------------------------------------------
+
+    if (getX)
+    {
+
+        // ---------------------------------------------------------------------
+        // solve the least squares problem: X = E*(R\C)
+        // ---------------------------------------------------------------------
+
+        // result X is n-by-bncols with leading dimension n, sparse or dense 
+        maxfrank = QRnum->maxfrank  ;
+
+        if (Z_is_sparse)
+        {
+
+            // -----------------------------------------------------------------
+            // create the sparse result X
+            // -----------------------------------------------------------------
+
+            // ask for space for n+1 entries; this is increased later if needed
+            Xsparse = cholmod_l_allocate_sparse (n, bncols, n+1, TRUE, TRUE, 0,
+                xtype, cc) ;
+            xncol = 0 ;
+
+            if (cc->status < CHOLMOD_OK)
+            {
+                // out of memory
+                FREE_ALL ;
+                return (EMPTY) ;
+            }
+
+            // Xwork will be a temporary dense result
+            xchunk = MIN (bncols, XCHUNK) ;
+
+            // xsize = n * xchunk ;
+            xsize = spqr_mult (n, xchunk, &ok) ;
+
+            // csize = rank * xchunk ;
+            csize = spqr_mult (rank, xchunk, &ok) ;
+
+            // wsize = maxfrank * xchunk ;
+            wsize = spqr_mult (maxfrank, xchunk, &ok) ;
+
+            if (ok)
+            {
+                Xwork = (Entry *) cholmod_l_malloc (xsize, sizeof (Entry), cc) ;
+                C = (Entry *) cholmod_l_calloc (csize, sizeof (Entry), cc) ;
+                W = (Entry *) cholmod_l_malloc (wsize, sizeof (Entry), cc) ;
+            }
+
+            // -----------------------------------------------------------------
+            // punt: use less workspace if we ran out of memory
+            // -----------------------------------------------------------------
+
+            if (!ok || (cc->status < CHOLMOD_OK && xchunk > 1))
+            {
+                // PUNT: out of memory; try again with xchunk = 1
+                cc->status = CHOLMOD_OK ;
+                ok = TRUE ;
+                cholmod_l_free (xsize, sizeof (Entry), Xwork, cc) ;
+                cholmod_l_free (csize, sizeof (Entry), C, cc) ;
+                cholmod_l_free (wsize, sizeof (Entry), W, cc) ;
+                xchunk = 1 ;
+                xsize = n ;
+                csize = rank ;
+                wsize = maxfrank ;
+                Xwork = (Entry *) cholmod_l_malloc (xsize, sizeof (Entry), cc) ;
+                C = (Entry *) cholmod_l_calloc (csize, sizeof (Entry), cc) ;
+                W = (Entry *) cholmod_l_malloc (wsize, sizeof (Entry), cc) ;
+            }
+
+            // -----------------------------------------------------------------
+            // use Xwork for the solve
+            // -----------------------------------------------------------------
+
+            X2 = Xwork ;
+
+        }
+        else
+        {
+
+            // -----------------------------------------------------------------
+            // construct the dense X
+            // -----------------------------------------------------------------
+
+            xchunk = bncols ;
+
+            // csize = rank * xchunk ;
+            csize = spqr_mult (rank, xchunk, &ok) ;
+
+            // wsize = maxfrank * xchunk ;
+            wsize = spqr_mult (maxfrank, xchunk, &ok) ;
+
+            if (ok)
+            {
+                C = (Entry *) cholmod_l_calloc (csize, sizeof (Entry), cc) ;
+                W = (Entry *) cholmod_l_malloc (wsize, sizeof (Entry), cc) ;
+            }
+
+            // allocate the dense X and use it for the solve
+            Zdense = cholmod_l_allocate_dense (n, bncols, n, xtype, cc) ;
+            X2 = Zdense ? ((Entry *) Zdense->x) : NULL ;
+        }
+
+        Rlive = (Long *)   cholmod_l_malloc (maxfrank, sizeof (Long),    cc) ;
+        Rcolp = (Entry **) cholmod_l_malloc (maxfrank, sizeof (Entry *), cc) ;
+
+        if (!ok || cc->status < CHOLMOD_OK)
+        {
+            // still out of memory (or problem too large)
+            FREE_ALL ;
+            ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+            return (EMPTY) ;
+        }
+
+        for (k1 = 0 ; k1 < bncols ; k1 += xchunk)
+        {
+
+            // -----------------------------------------------------------------
+            // this iteration computes X (:,k1:k2-1)
+            // -----------------------------------------------------------------
+
+            k2 = MIN (bncols, k1+xchunk) ;
+            PR (("k1 %ld k2 %ld bncols %ld n1rows %ld\n",
+                k1, k2, bncols, n1rows)) ;
+
+#ifndef NDEBUG
+            for (i = 0 ; i < rank*(k2-k1) ; i++)
+            {
+                ASSERT (C [i] == (Entry) 0) ;
+            }
+#endif
+
+            // -----------------------------------------------------------------
+            // scatter C
+            // -----------------------------------------------------------------
+
+            C1 = C ;
+            for (k = k1 ; k < k2 ; k++)
+            {
+                // scatter C (0:rank-1,k1:k2-1) into workspace
+                for (p = Zp [k] ; p < Zp [k+1] ; p++)
+                {
+                    i = Zi [p] ;
+                    if (i < rank)
+                    {
+                        C1 [i] = Zx [p] ;
+                    }
+                }
+                C1 += rank ;
+            }
+
+            // -----------------------------------------------------------------
+            // X = E*(R\C)
+            // -----------------------------------------------------------------
+
+            spqr_rsolve (QR, TRUE, k2-k1, rank, C, X2, Rcolp, Rlive, W, cc) ;
+
+            // -----------------------------------------------------------------
+            // clear workspace C ; skip if this is the last k (C is freed)
+            // -----------------------------------------------------------------
+
+            if (k2 < bncols)
+            {
+                C1 = C ;
+                for (k = k1 ; k < k2 ; k++)
+                {
+                    for (p = Zp [k] ; p < Zp [k+1] ; p++)
+                    {
+                        i = Zi [p] ;
+                        if (i < rank)
+                        {
+                            C1 [i] = 0 ;
+                        }
+                    }
+                    C1 += rank ;
+                }
+            }
+
+            // -----------------------------------------------------------------
+            // save the result, either sparse or dense
+            // -----------------------------------------------------------------
+
+            if (Z_is_sparse)
+            {
+                // append the columns of X2 onto the sparse X
+                X1 = X2 ;
+                for (k = 0 ; k < k2-k1 ; k++)
+                {
+                    spqr_append (X1, NULL, Xsparse, &xncol, cc) ;
+                    X1 += n ;
+                    if (cc->status < CHOLMOD_OK)
+                    {
+                        // out of memory
+                        FREE_ALL ;
+                        return (EMPTY) ;
+                    }
+                }
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // free workspace
+        // ---------------------------------------------------------------------
+
+        C     = (Entry *)  cholmod_l_free (csize,    sizeof (Entry), C, cc) ;
+        W     = (Entry *)  cholmod_l_free (wsize,    sizeof (Entry), W, cc) ;
+        Rlive = (Long *)   cholmod_l_free (maxfrank, sizeof (Long),  Rlive, cc);
+        Rcolp = (Entry **) cholmod_l_free (maxfrank, sizeof (Entry *), Rcolp,
+            cc) ;
+
+        // ---------------------------------------------------------------------
+        // free the sparse Z
+        // ---------------------------------------------------------------------
+
+        cholmod_l_free_sparse (&Zsparse, cc) ;
+
+        // ---------------------------------------------------------------------
+        // finalize the sparse X
+        // ---------------------------------------------------------------------
+
+        if (Z_is_sparse)
+        {
+
+            // -----------------------------------------------------------------
+            // reduce X in size so that nnz(X) == nzmax(X)
+            // -----------------------------------------------------------------
+
+            znz = cholmod_l_nnz (Xsparse, cc) ;
+            cholmod_l_reallocate_sparse (znz, Xsparse, cc) ;
+            ASSERT (cc->status == CHOLMOD_OK) ;
+
+            // -----------------------------------------------------------------
+            // Z becomes the sparse X
+            // -----------------------------------------------------------------
+
+            Zsparse = Xsparse ;
+            Xsparse = NULL ;
+
+            // -----------------------------------------------------------------
+            // free the dense Xwork
+            // -----------------------------------------------------------------
+
+            cholmod_l_free (xsize, sizeof (Entry), Xwork, cc) ;
+            Xwork = NULL ;
+            xsize = 0 ;
+        }
+
+    }
+    else if ((getC || getT) && !Z_is_sparse)
+    {
+
+        // ---------------------------------------------------------------------
+        // convert C or C' to full
+        // ---------------------------------------------------------------------
+
+        Zdense = cholmod_l_sparse_to_dense (Zsparse, cc) ;
+        cholmod_l_free_sparse (&Zsparse, cc) ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            FREE_ALL ;
+            return (EMPTY) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // extract permutations, if requested, from the QR factors
+    // -------------------------------------------------------------------------
+
+    if (getE)
+    {
+        // preserve Q1fill if E has been requested
+        E = QR->Q1fill ;
+        QR->Q1fill = NULL ;
+    }
+
+    if (getH)
+    {
+        // preserve HP1inv if E has been requested.  If there are no singletons,
+        // the QR->HP1inv is NULL, and QR->QRnum->HPinv serves in its place.
+        if (n1cols > 0)
+        {
+            // singletons are present, get E from QR->HP1inv
+            HP1inv = QR->HP1inv ;
+            QR->HP1inv = NULL ;
+        }
+        else
+        {
+            // no singletons are present, get E from QR->QRnum->HPinv
+            ASSERT (QR->HP1inv == NULL) ;
+            HP1inv = QRnum->HPinv ;
+            QRnum->HPinv = NULL ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // free the QR factors
+    // -------------------------------------------------------------------------
+
+    spqr_freefac (&QR, cc) ;
+
+    // -------------------------------------------------------------------------
+    // convert R to trapezoidal, if rank < n and ordering is not fixed
+    // -------------------------------------------------------------------------
+
+    if (getR && ordering != SPQR_ORDERING_FIXED && rank < n && tol >= 0)
+    {
+        Long *Rtrapp, *Rtrapi, *Qtrap ;
+        Entry *Rtrapx ;
+
+        // find Rtrap and Qtrap. This may fail if tol < 0 and the matrix
+        // is structurally rank deficient; in that case, k2 = EMPTY and
+        // Rtrap is returned NULL.
+        k2 = spqr_trapezoidal (n, Rp, Ri, Rx, bncols, Q1fill, TRUE,
+            &Rtrapp, &Rtrapi, &Rtrapx, &Qtrap, cc) ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            // This is very unlikely to fail since the QR factorization object
+            // has just been freed
+            FREE_ALL ;
+            return (EMPTY) ;
+        }
+
+        ASSERT (k2 == EMPTY || rank == k2) ;
+
+        if (Rtrapp != NULL)
+        {
+            // Rtrap was created (it was skipped if R was already in upper
+            // trapezoidal form)
+
+            // free the old R and Q1fill
+            cholmod_l_free (n+1,      sizeof (Long),  Rp, cc) ;
+            cholmod_l_free (rnz,      sizeof (Long),  Ri, cc) ;
+            cholmod_l_free (rnz,      sizeof (Entry), Rx, cc) ;
+            cholmod_l_free (n+bncols, sizeof (Long),  E,  cc) ;
+
+            // replace R and Q1fill with Rtrap and Qtrap
+            R->p = Rtrapp ;
+            R->i = Rtrapi ;
+            R->x = Rtrapx ;
+            E = Qtrap ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // return results
+    // -------------------------------------------------------------------------
+
+    if (getZ)
+    {
+        // return C, C',  or X
+        if (Z_is_sparse)
+        {
+            *p_Zsparse = Zsparse ;
+        }
+        else
+        {
+            *p_Zdense = Zdense ;
+        }
+    }
+
+    if (getH)
+    {
+        // return H, of size m-by-nh in sparse column-oriented form
+        *p_H = H ;
+        *p_HTau = HTau ;
+        *p_HPinv = HP1inv ;     // this is QR->HP1inv or QR->QRnum->HPinv
+    }
+
+    if (getR)
+    {
+        // return R, of size econ-by-n in sparse column-oriented form
+        *p_R = R ;
+    }
+
+    if (getE)
+    {
+        // return E of size n+bncols (NULL if ordering == SPQR_ORDERING_FIXED)
+        *p_E = E ;
+    }
+
+    double t3 = SuiteSparse_time ( ) ;
+    double total_time = t3 - t0 ;
+    cc->SPQR_solve_time =
+        total_time - cc->SPQR_analyze_time - cc->SPQR_factorize_time ;
+
+    return (rank) ;
+}
+
+
+template Long SuiteSparseQR <double>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // number of rows of C and R to return; a value
+                            // less than the rank r of A is treated as r, and
+                            // a value greater than m is treated as m.
+
+    int getCTX,             // if 0: return Z = C of size econ-by-bncols
+                            // if 1: return Z = C' of size bncols-by-econ
+                            // if 2: return Z = X of size econ-by-bncols
+
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *Bsparse,
+    cholmod_dense *Bdense,
+
+    // output arrays, neither allocated nor defined on input.
+
+    // Z is the matrix C, C', or X
+    cholmod_sparse **p_Zsparse,
+    cholmod_dense  **p_Zdense,
+    cholmod_sparse **p_R,   // the R factor
+    Long **p_E,             // size n; fill-reducing ordering of A.
+    cholmod_sparse **p_H,   // the Householder vectors (m-by-nh)
+    Long **p_HPinv,         // size m; row permutation for H
+    cholmod_dense **p_HTau, // size 1-by-nh, Householder coefficients
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template Long SuiteSparseQR <Complex>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // number of rows of C and R to return; a value
+                            // less than the rank r of A is treated as r, and
+                            // a value greater than m is treated as m.
+
+    int getCTX,             // if 0: return Z = C of size econ-by-bncols
+                            // if 1: return Z = C' of size bncols-by-econ
+                            // if 2: return Z = X of size econ-by-bncols
+
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *Bsparse,
+    cholmod_dense *Bdense,
+
+    // output arrays, neither allocated nor defined on input.
+
+    // Z is the matrix C, C', or X
+    cholmod_sparse **p_Zsparse,
+    cholmod_dense  **p_Zdense,
+    cholmod_sparse **p_R,   // the R factor
+    Long **p_E,             // size n; fill-reducing ordering of A.
+    cholmod_sparse **p_H,   // the Householder vectors (m-by-nh)
+    Long **p_HPinv,         // size m; row permutation for H
+    cholmod_dense **p_HTau, // size 1-by-nh, Householder coefficients
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === SuiteSparseQR overloaded functions ======================================
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+// X=A\B where X and B are dense
+// -----------------------------------------------------------------------------
+
+template <typename Entry> cholmod_dense *SuiteSparseQR
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    cholmod_dense *X ;
+    SuiteSparseQR <Entry> (ordering, tol, 0, 2, A,   
+        NULL, B, NULL, &X, NULL, NULL, NULL, NULL, NULL, cc) ;
+    return (X) ;
+}
+
+template cholmod_dense *SuiteSparseQR <double>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template cholmod_dense *SuiteSparseQR <Complex>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// -----------------------------------------------------------------------------
+// X=A\B where X and B are dense, default ordering and tol
+// -----------------------------------------------------------------------------
+
+template <typename Entry> cholmod_dense *SuiteSparseQR
+(
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    cholmod_dense *X ;
+    SuiteSparseQR <Entry> (SPQR_ORDERING_DEFAULT, SPQR_DEFAULT_TOL, 0, 2, A,   
+        NULL, B, NULL, &X, NULL, NULL, NULL, NULL, NULL, cc) ;
+    return (X) ;
+}
+
+template cholmod_dense *SuiteSparseQR <double>
+(
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template cholmod_dense *SuiteSparseQR <Complex>
+(
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+
+// -----------------------------------------------------------------------------
+// X=A\B where X and B are sparse 
+// -----------------------------------------------------------------------------
+
+template <typename Entry> cholmod_sparse *SuiteSparseQR
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+)
+{
+
+    cholmod_sparse *X ;
+    SuiteSparseQR <Entry> (ordering, tol, 0, 2, A,   
+        B, NULL, &X, NULL, NULL, NULL, NULL, NULL, NULL, cc) ;
+
+    return (X) ;
+}
+
+template cholmod_sparse *SuiteSparseQR <double>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template cholmod_sparse *SuiteSparseQR <Complex>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+
+// -----------------------------------------------------------------------------
+// [Q,R,E] = qr(A), returning Q as a sparse matrix
+// -----------------------------------------------------------------------------
+
+template <typename Entry> Long SuiteSparseQR     // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **Q,     // m-by-e sparse matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    cholmod_sparse *I ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_NULL_COMMON (EMPTY) ;
+    RETURN_IF_NULL (A, EMPTY) ;
+    Long m = A->nrow ;
+    I = cholmod_l_speye (m, m, xtype, cc) ;
+    Long rank = (I == NULL) ? EMPTY : SuiteSparseQR <Entry> (ordering, tol,
+        econ, 1, A, I, NULL, Q, NULL, R, E, NULL, NULL, NULL, cc) ;
+    cholmod_l_free_sparse (&I, cc) ;
+    return (rank) ;
+}
+
+template Long SuiteSparseQR <Complex>     // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **Q,     // m-by-e sparse matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    Long **E,               // permutation of 0:n-1
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template Long SuiteSparseQR <double>     // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **Q,     // m-by-e sparse matrix where e=max(econ,rank(A))
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    Long **E,               // permutation of 0:n-1
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// -----------------------------------------------------------------------------
+// [Q,R,E] = qr(A), discarding Q
+// -----------------------------------------------------------------------------
+
+template <typename Entry> Long SuiteSparseQR     // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    return (SuiteSparseQR <Entry> (ordering, tol, econ, 1, A,   
+        NULL, NULL, NULL, NULL, R, E, NULL, NULL, NULL, cc)) ;
+}
+
+template Long SuiteSparseQR <Complex>     // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template Long SuiteSparseQR <double>     // returns rank(A) estimate
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// -----------------------------------------------------------------------------
+// [C,R,E] = qr(A,B) where C and B are both dense
+// -----------------------------------------------------------------------------
+
+// returns rank(A) estimate if successful, EMPTY otherwise
+template <typename Entry> Long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs dense matrix
+    // outputs
+    cholmod_dense  **C,     // C = Q'*B, an e-by-nrhs dense matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    return (SuiteSparseQR <Entry> (ordering, tol, econ, 0, A, NULL, B,
+        NULL, C, R, E, NULL, NULL, NULL, cc)) ;
+}
+
+template Long SuiteSparseQR <double>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs dense matrix
+    // outputs
+    cholmod_dense  **C,     // C = Q'*B, an e-by-nrhs dense matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+
+template Long SuiteSparseQR <Complex>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-nrhs dense matrix
+    // outputs
+    cholmod_dense  **C,     // C = Q'*B, an e-by-nrhs dense matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+
+// -----------------------------------------------------------------------------
+// [C,R,E] = qr(A,B) where C and B are both sparse
+// -----------------------------------------------------------------------------
+
+// returns rank(A) estimate if successful, EMPTY otherwise
+template <typename Entry> Long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs sparse matrix
+    // outputs
+    cholmod_sparse **C,     // C = Q'*B, an e-by-nrhs sparse matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    return (SuiteSparseQR <Entry> (ordering, tol, econ, 0, A, B, NULL,
+        C, NULL, R, E, NULL, NULL, NULL, cc)) ;
+}
+
+template Long SuiteSparseQR <double>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs sparse matrix
+    // outputs
+    cholmod_sparse **C,     // C = Q'*B, an e-by-nrhs sparse matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+
+template Long SuiteSparseQR <Complex>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-nrhs sparse matrix
+    // outputs
+    cholmod_sparse **C,     // C = Q'*B, an e-by-nrhs sparse matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix where e=max(econ,rank(A))
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// -----------------------------------------------------------------------------
+// [Q,R,E] = qr(A) where Q is returned in Householder form
+// -----------------------------------------------------------------------------
+
+// returns rank(A) estimate if successful, EMPTY otherwise
+template <typename Entry> Long SuiteSparseQR
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // the R factor
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_sparse **H,     // the Householder vectors (m-by-nh)
+    Long **HPinv,           // size m; row permutation for H
+    cholmod_dense **HTau,   // size 1-by-nh, Householder coefficients
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    return (SuiteSparseQR <Entry> (ordering, tol, econ, EMPTY, A,
+        NULL, NULL, NULL, NULL, R, E, H, HPinv, HTau, cc)) ;
+}
+
+template Long SuiteSparseQR <double>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // the R factor
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_sparse **H,     // the Householder vectors (m-by-nh)
+    Long **HPinv,           // size m; row permutation for H
+    cholmod_dense **HTau,   // size 1-by-nh, Householder coefficients
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template Long SuiteSparseQR <Complex>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as zero
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    // outputs
+    cholmod_sparse **R,     // the R factor
+    Long **E,               // permutation of 0:n-1, NULL if identity
+    cholmod_sparse **H,     // the Householder vectors (m-by-nh)
+    Long **HPinv,           // size m; row permutation for H
+    cholmod_dense **HTau,   // size 1-by-nh, Householder coefficients
+    cholmod_common *cc      // workspace and parameters
+) ;
diff --git a/SPQR/Source/SuiteSparseQR_C.cpp b/SPQR/Source/SuiteSparseQR_C.cpp
new file mode 100644
index 0000000..ef8f3a6
--- /dev/null
+++ b/SPQR/Source/SuiteSparseQR_C.cpp
@@ -0,0 +1,367 @@
+// =============================================================================
+// === SuiteSparseQR_C =========================================================
+// =============================================================================
+
+// This C++ file provides a set of C-callable wrappers so that a C program can
+// call SuiteSparseQR.
+
+#include "spqr.hpp"
+#include "SuiteSparseQR_C.h"
+
+extern "C" {
+
+// =============================================================================
+// === SuiteSparseQR_C =========================================================
+// =============================================================================
+
+// Primary sparse QR function, with all inputs/outputs available.  The primary
+// uses of this function are to perform any one of the the MATLAB equivalent
+// statements:
+//
+//      X = A\B                 % where B is sparse or dense
+//      [C,R,E] = qr (A,B)      % where Q*R=A*E and C=Q'*B
+//      [Q,R,E] = qr (A)        % with Q in Householder form (H, HPinv, HTau)
+//      [Q,R,E] = qr (A)        % where Q is discarded (the "Q-less" QR)
+//      R = qr (A)              % as above, but with E=I
+//
+// To obtain the factor Q in sparse matrix form, use SuiteSparseQR_C_QR instead.
+
+Long SuiteSparseQR_C             // returns rank(A) estimate, (-1) if failure
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as 0
+    Long econ,              // e = max(min(m,econ),rank(A))
+    int getCTX,             // 0: Z=C (e-by-k), 1: Z=C', 2: Z=X (e-by-k)
+    cholmod_sparse *A,      // m-by-n sparse matrix to factorize
+    cholmod_sparse *Bsparse,// sparse m-by-k B
+    cholmod_dense  *Bdense, // dense  m-by-k B
+    // outputs:
+    cholmod_sparse **Zsparse,   // sparse Z
+    cholmod_dense  **Zdense,    // dense Z
+    cholmod_sparse **R,     // R factor, e-by-n
+    Long **E,               // size n column permutation, NULL if identity
+    cholmod_sparse **H,     // m-by-nh Householder vectors
+    Long **HPinv,           // size m row permutation
+    cholmod_dense **HTau,   // 1-by-nh Householder coefficients
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (EMPTY) ;
+    RETURN_IF_NULL (A, EMPTY) ;
+    cc->status = CHOLMOD_OK ;
+
+    return ((A->xtype == CHOLMOD_REAL) ?
+        SuiteSparseQR <double>  (ordering, tol, econ, getCTX, A, Bsparse,
+            Bdense, Zsparse, Zdense, R, E, H, HPinv, HTau, cc) :
+        SuiteSparseQR <Complex> (ordering, tol, econ, getCTX, A, Bsparse,
+            Bdense, Zsparse, Zdense, R, E, H, HPinv, HTau, cc)) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_QR ======================================================
+// =============================================================================
+
+// [Q,R,E] = qr(A), returning Q as a sparse matrix
+
+Long SuiteSparseQR_C_QR          // returns rank(A) estimate, (-1) if failure
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as 0
+    Long econ,              // e = max(min(m,econ),rank(A))
+    cholmod_sparse *A,      // m-by-n sparse matrix to factorize
+    // outputs:
+    cholmod_sparse **Q,     // m-by-e sparse matrix
+    cholmod_sparse **R,     // e-by-n sparse matrix
+    Long **E,               // size n column permutation, NULL if identity
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (EMPTY) ;
+    RETURN_IF_NULL (A, EMPTY) ;
+    cc->status = CHOLMOD_OK ;
+
+    return ((A->xtype == CHOLMOD_REAL) ?
+        SuiteSparseQR <double>  (ordering, tol, econ, A, Q, R, E, cc) :
+        SuiteSparseQR <Complex> (ordering, tol, econ, A, Q, R, E, cc)) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_backslash ===============================================
+// =============================================================================
+
+// X = A\B where B is dense
+cholmod_dense *SuiteSparseQR_C_backslash    // returns X, NULL if failure
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as 0
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-k
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (A, NULL) ;
+    RETURN_IF_NULL (B, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    return ((A->xtype == CHOLMOD_REAL) ?
+        SuiteSparseQR <double>  (ordering, tol, A, B, cc) :
+        SuiteSparseQR <Complex> (ordering, tol, A, B, cc)) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_backslash_default =======================================
+// =============================================================================
+
+// X = A\B where B is dense, using default ordering and tol
+cholmod_dense *SuiteSparseQR_C_backslash_default   // returns X, NULL if failure
+(
+    // inputs:
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_dense  *B,      // m-by-k
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    return (SuiteSparseQR_C_backslash (SPQR_ORDERING_DEFAULT, SPQR_DEFAULT_TOL,
+        A, B, cc)) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_backslash_sparse ========================================
+// =============================================================================
+
+// X = A\B where B is sparse
+cholmod_sparse *SuiteSparseQR_C_backslash_sparse   // returns X, NULL if failure
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as 0
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_sparse *B,      // m-by-k
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (A, NULL) ;
+    RETURN_IF_NULL (B, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    return ((A->xtype == CHOLMOD_REAL) ?
+        SuiteSparseQR <double>  (ordering, tol, A, B, cc) :
+        SuiteSparseQR <Complex> (ordering, tol, A, B, cc)) ;
+}
+
+#ifndef NEXPERT
+
+// =============================================================================
+// === C wrappers for expert routines ==========================================
+// =============================================================================
+
+// =============================================================================
+// === SuiteSparseQR_C_factorize ===============================================
+// =============================================================================
+
+SuiteSparseQR_C_factorization *SuiteSparseQR_C_factorize
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // columns with 2-norm <= tol are treated as 0
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (FALSE) ;
+    RETURN_IF_NULL (A, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    SuiteSparseQR_C_factorization *QR ;
+    QR = (SuiteSparseQR_C_factorization *)
+        cholmod_l_malloc (1, sizeof (SuiteSparseQR_C_factorization), cc) ;
+    if (cc->status < CHOLMOD_OK)
+    {
+        return (NULL) ;
+    }
+    QR->xtype = A->xtype ;
+    QR->factors = (A->xtype == CHOLMOD_REAL) ?
+        ((void *) SuiteSparseQR_factorize <double>  (ordering, tol, A, cc)) :
+        ((void *) SuiteSparseQR_factorize <Complex> (ordering, tol, A, cc)) ;
+    if (cc->status < CHOLMOD_OK)
+    {
+        SuiteSparseQR_C_free (&QR, cc) ;
+    }
+    return (QR) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_symbolic ================================================
+// =============================================================================
+
+SuiteSparseQR_C_factorization *SuiteSparseQR_C_symbolic
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    int allow_tol,          // if FALSE, tol is ignored by the numeric
+                            // factorization, and no rank detection is performed
+    cholmod_sparse *A,      // sparse matrix to factorize (A->x ignored)
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (A, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    SuiteSparseQR_C_factorization *QR ;
+    QR = (SuiteSparseQR_C_factorization *)
+        cholmod_l_malloc (1, sizeof (SuiteSparseQR_C_factorization), cc) ;
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        return (NULL) ;
+    }
+    QR->xtype = A->xtype ;
+    QR->factors = (A->xtype == CHOLMOD_REAL) ?
+        ((void *) SuiteSparseQR_symbolic <double>  (ordering, allow_tol, A,cc)):
+        ((void *) SuiteSparseQR_symbolic <Complex> (ordering, allow_tol, A,cc));
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        SuiteSparseQR_C_free (&QR, cc) ;
+    }
+    return (QR) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_numeric =================================================
+// =============================================================================
+
+// numeric QR factorization; must be preceded by a call to
+// SuiteSparseQR_C_symbolic.
+
+int SuiteSparseQR_C_numeric // returns TRUE if successful, FALSE otherwise
+(
+    // inputs:
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // input/output:
+    SuiteSparseQR_C_factorization *QR,
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (FALSE) ;
+    RETURN_IF_NULL (A, FALSE) ;
+    RETURN_IF_NULL (QR, FALSE) ;
+    cc->status = CHOLMOD_OK ;
+
+    if (QR->xtype == CHOLMOD_REAL)
+    {
+        SuiteSparseQR_factorization <double> *QR2 ;
+        QR2 = (SuiteSparseQR_factorization <double> *) (QR->factors) ;
+        SuiteSparseQR_numeric <double> (tol, A, QR2, cc) ;
+    }
+    else
+    {
+        SuiteSparseQR_factorization <Complex> *QR2 ;
+        QR2 = (SuiteSparseQR_factorization <Complex> *) (QR->factors) ;
+        SuiteSparseQR_numeric <Complex> (tol, A, QR2, cc) ;
+    }
+    return (TRUE) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_free ====================================================
+// =============================================================================
+
+int SuiteSparseQR_C_free
+(
+    // input/output:
+    SuiteSparseQR_C_factorization **QR_handle,
+    cholmod_common *cc
+)
+{
+    RETURN_IF_NULL_COMMON (FALSE) ;
+
+    SuiteSparseQR_C_factorization *QR ;
+    if (QR_handle == NULL || *QR_handle == NULL) return (TRUE) ;
+    QR = *QR_handle ;
+    if (QR->xtype == CHOLMOD_REAL)
+    {
+        SuiteSparseQR_factorization <double> *QR2 ;
+        QR2 = (SuiteSparseQR_factorization <double> *) (QR->factors) ;
+        spqr_freefac <double> (&QR2, cc) ;
+    }
+    else
+    {
+        SuiteSparseQR_factorization <Complex> *QR2 ;
+        QR2 = (SuiteSparseQR_factorization <Complex> *) (QR->factors) ;
+        spqr_freefac <Complex> (&QR2, cc) ;
+    }
+    cholmod_l_free (1, sizeof (SuiteSparseQR_C_factorization), QR, cc) ;
+    *QR_handle = NULL ;
+    return (TRUE) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_solve ===================================================
+// =============================================================================
+
+// Solve an upper or lower triangular system using R from the QR factorization
+//
+// system=SPQR_RX_EQUALS_B    (0): X = R\B         B is m-by-k and X is n-by-k
+// system=SPQR_RETX_EQUALS_B  (1): X = E*(R\B)     as above, E is a permutation
+// system=SPQR_RTX_EQUALS_B   (2): X = R'\B        B is n-by-k and X is m-by-k
+// system=SPQR_RTX_EQUALS_ETB (3): X = R'\(E'*B)   as above, E is a permutation
+
+cholmod_dense* SuiteSparseQR_C_solve    // returnx X, or NULL if failure
+(
+    // inputs:
+    int system,                 // which system to solve
+    SuiteSparseQR_C_factorization *QR,  // of an m-by-n sparse matrix A
+    cholmod_dense *B,           // right-hand-side, m-by-k or n-by-k
+    cholmod_common *cc          // workspace and parameters
+)
+{
+    RETURN_IF_NULL (QR, NULL) ;
+    return ((QR->xtype == CHOLMOD_REAL) ?
+        SuiteSparseQR_solve <double>   (system,
+            (SuiteSparseQR_factorization <double>  *) QR->factors, B, cc) :
+        SuiteSparseQR_solve <Complex>  (system,
+            (SuiteSparseQR_factorization <Complex> *) QR->factors, B, cc)) ;
+}
+
+// =============================================================================
+// === SuiteSparseQR_C_qmult ===================================================
+// =============================================================================
+
+// Applies Q in Householder form (as stored in the QR factorization object
+// returned by SuiteSparseQR_C_factorize) to a dense matrix X.
+//
+//  method SPQR_QTX (0): Y = Q'*X
+//  method SPQR_QX  (1): Y = Q*X
+//  method SPQR_XQT (2): Y = X*Q'
+//  method SPQR_XQ  (3): Y = X*Q
+
+// returns Y of size m-by-n, or NULL on failure
+cholmod_dense *SuiteSparseQR_C_qmult
+(
+    // inputs:
+    int method,                 // 0,1,2,3
+    SuiteSparseQR_C_factorization *QR,  // of an m-by-n sparse matrix A
+    cholmod_dense *X,           // size m-by-n with leading dimension ldx
+    cholmod_common *cc          // workspace and parameters
+)
+{
+    RETURN_IF_NULL (QR, NULL) ;
+    return ((QR->xtype == CHOLMOD_REAL) ?
+        SuiteSparseQR_qmult <double>   (method,
+            (SuiteSparseQR_factorization <double>  *) QR->factors, X, cc) :
+        SuiteSparseQR_qmult <Complex>  (method,
+            (SuiteSparseQR_factorization <Complex> *) QR->factors, X, cc)) ;
+}
+
+#endif
+
+// =============================================================================
+}
diff --git a/SPQR/Source/SuiteSparseQR_expert.cpp b/SPQR/Source/SuiteSparseQR_expert.cpp
new file mode 100644
index 0000000..6f93fd4
--- /dev/null
+++ b/SPQR/Source/SuiteSparseQR_expert.cpp
@@ -0,0 +1,1736 @@
+// =============================================================================
+// === SuiteSparseQR_expert ====================================================
+// =============================================================================
+
+// This file includes a suite of "expert" user-callable routines that allow the
+// reuse of a QR factorization, including the ability to find the min 2-norm
+// solution of an under-determined system of equations:
+//
+// The QR factorization can be computed in one of two ways:
+//
+//      SuiteSparseQR_factorize  QR factorization, returning a QR object
+//                               This performs both symbolic analysis and
+//                               numeric factorization, and exploits singletons.
+//                               Note that H is always kept.
+//
+//      SuiteSparseQR_symbolic   symbolic QR factorization, based purely on the
+//                               nonzero pattern of A; to be followed by:
+//      SuiteSparseQR_numeric    numeric QR factorization.  Does not exploit
+//                               singletons.  Note that H is always kept.
+//
+//      SuiteSparseQR_solve      forward/backsolve using R from the QR object
+//      SuiteSparseQR_qmult      multiply by Q or Q', using Q from the QR object
+//      SuiteSparseQR_min2norm   min 2-norm solution for x=A\b
+//      SuiteSparseQR_free       free the QR object
+//
+// All of these functions keep the Householder vectors.  The
+// SuiteSparseQR_solve function does not require the Householder vectors, but
+// in the current version, it is only used in that case.  Since these functions
+// require the Householder vectors, the GPU is never used in these functions.
+//
+// If all you need is to solve a least-squares problem, or to compute a QR
+// factorization and return the results in vanilla sparse matrix format, see
+// the routines in SuiteSparseQR.cpp and SuiteSparseQR_qmult.cpp instead.
+//
+// NOTE: Q the matrix is not formed; H the Householder vectors are always kept.
+
+#ifndef NEXPERT
+#include "spqr.hpp"
+
+// =============================================================================
+// === SuiteSparseQR_symbolic ==================================================
+// =============================================================================
+
+// This returns a QR factorization object with a NULL numeric part.  It must
+// be followed by a numeric factorization, by SuiteSparseQR_numeric.
+
+template <typename Entry> 
+SuiteSparseQR_factorization <Entry> *SuiteSparseQR_symbolic
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    int allow_tol,          // if FALSE, tol is ignored by the numeric
+                            // factorization, and no rank detection is performed
+    cholmod_sparse *A,      // sparse matrix to factorize (A->x ignored)
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    double t0 = SuiteSparse_time ( ) ;
+
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (A, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (A, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    // -------------------------------------------------------------------------
+    // get inputs and allocate result
+    // -------------------------------------------------------------------------
+
+    SuiteSparseQR_factorization <Entry> *QR ;
+    spqr_symbolic *QRsym ;
+
+    QR = (SuiteSparseQR_factorization <Entry> *)
+        cholmod_l_malloc (1, sizeof (SuiteSparseQR_factorization <Entry>), cc) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // perform the symbolic analysis
+    // -------------------------------------------------------------------------
+
+    // Using SuiteSparseQR_symbolic followed by SuiteSparseQR_numeric requires
+    // that the Householder vectors be kept, and thus the GPU will not be used.
+    int keepH = TRUE ;
+    QR->QRsym = QRsym = spqr_analyze (A, ordering, NULL, allow_tol, keepH, cc) ;
+
+    QR->QRnum = NULL ;          // allocated later, by numeric factorization
+
+    // singleton information:
+    QR->R1p = NULL ;            // no singletons; these always remain NULL or 0
+    QR->R1j = NULL ;
+    QR->R1x = NULL ;
+    QR->P1inv = NULL ;
+    QR->HP1inv = NULL ;     
+    QR->r1nz = 0 ;
+    QR->n1rows = 0 ;
+    QR->n1cols = 0 ;
+    cc->SPQR_istat [5] = 0 ;    // number of columns singletons
+    cc->SPQR_istat [6] = 0 ;    // number of singleton rows
+
+    QR->Q1fill = NULL ;         // may change below
+
+    QR->Rmap = NULL ;           // may be allocated by numeric factorization
+    QR->RmapInv = NULL ;
+
+    QR->narows = A->nrow ;
+    QR->nacols = A->ncol ;
+    QR->bncols = 0 ;            // [A B] is not factorized
+
+    QR->allow_tol = (allow_tol != 0) ;
+    QR->tol = QR->allow_tol ? SPQR_DEFAULT_TOL : EMPTY ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freefac (&QR, cc) ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // copy the fill-reducing ordering
+    // -------------------------------------------------------------------------
+
+    if (QRsym->Qfill != NULL)
+    {
+        Long n, k, *Qfill, *Q1fill ;
+        Qfill = QRsym->Qfill ;
+        n = A->ncol ;
+        Q1fill = (Long *) cholmod_l_malloc (n, sizeof (Long), cc) ;
+        QR->Q1fill = Q1fill ;
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            spqr_freefac (&QR, cc) ;
+            return (NULL) ;
+        }
+        for (k = 0 ; k < n ; k++)
+        {
+            Q1fill [k] = Qfill [k] ;
+        }
+    }
+
+    double t1 = SuiteSparse_time ( ) ;
+    cc->SPQR_analyze_time = t1 - t0 ;
+
+    return (QR) ;
+}
+
+template
+SuiteSparseQR_factorization <double> *SuiteSparseQR_symbolic <double>
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    int allow_tol,          // if FALSE, tol is ignored by the numeric
+                            // factorization, and no rank detection is performed
+    cholmod_sparse *A,      // sparse matrix to factorize (A->x ignored)
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template
+SuiteSparseQR_factorization <Complex> *SuiteSparseQR_symbolic <Complex>
+(
+    // inputs:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    int allow_tol,          // if FALSE, tol is ignored by the numeric
+                            // factorization, and no rank detection is performed
+    cholmod_sparse *A,      // sparse matrix to factorize (A->x ignored)
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// =============================================================================
+// === SuiteSparseQR_numeric ===================================================
+// =============================================================================
+
+// numeric QR factorization; must be preceded by a call to
+// SuiteSparseQR_symbolic.  Alternatively, if SuiteSparseQR_factorize
+// did not find any singletons (QR->n1cols == 0), a call to
+// SuiteSparseQR_factorize can be followed by a factorization by this function.
+//
+// Returns TRUE if successful, FALSE otherwise.
+//
+// The GPU is not used by this function, since it requires the Householder
+// vectors to be kept.
+
+template <typename Entry> int SuiteSparseQR_numeric
+(
+    // inputs:
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // input/output
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    double t0 = SuiteSparse_time ( ) ;
+
+    RETURN_IF_NULL_COMMON (FALSE) ;
+    RETURN_IF_NULL (A, FALSE) ;
+    RETURN_IF_NULL (QR, FALSE) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (A, FALSE) ;
+    cc->status = CHOLMOD_OK ;
+
+    if (QR->n1cols > 0 || QR->bncols > 0)
+    {
+        // this numeric factorization phase cannot be used if singletons were
+        // found, or if [A B] was factorized.
+        ERROR (CHOLMOD_INVALID, "cannot refactorize w/singletons or [A B]") ;
+        return (FALSE) ;
+    }
+
+    Long n = A->ncol ;
+
+    // -------------------------------------------------------------------------
+    // get the column 2-norm tolerance
+    // -------------------------------------------------------------------------
+
+    if (QR->allow_tol)
+    {
+        // compute default tol, if requested
+        if (tol <= SPQR_DEFAULT_TOL)
+        {
+            tol = spqr_tol <Entry> (A, cc) ;
+        }
+    }
+    else
+    {
+        // tol is ignored; no rank detection performed
+        tol = EMPTY ;
+    }
+    QR->tol = tol ;
+
+    // -------------------------------------------------------------------------
+    // numeric factorization
+    // -------------------------------------------------------------------------
+
+    // free the existing numeric factorization, if any
+    spqr_freenum (&(QR->QRnum), cc) ;
+
+    // compute the new factorization
+    QR->QRnum = spqr_factorize <Entry> (&A, FALSE, tol, n, QR->QRsym, cc) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory; QR factorization remains a symbolic-only object
+        ASSERT (QR->QRnum == NULL) ;
+        return (FALSE) ;
+    }
+
+    QR->rank = QR->QRnum->rank1 ;
+
+    // -------------------------------------------------------------------------
+    // find the mapping for the squeezed R, if A is rank deficient
+    // -------------------------------------------------------------------------
+
+    if (QR->rank < n && !spqr_rmap (QR, cc))
+    {
+        // out of memory; QR factorization remains a symbolic-only object
+        spqr_freenum (&(QR->QRnum), cc) ;
+        return (FALSE) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // output statistics
+    // -------------------------------------------------------------------------
+
+    cc->SPQR_istat [4] = QR->rank ;         // estimated rank of A
+    cc->SPQR_tol_used = tol ;               // tol used
+
+    double t1 = SuiteSparse_time ( ) ;
+    cc->SPQR_factorize_time = t1 - t0 ;
+
+    return (TRUE) ;
+}
+
+template int SuiteSparseQR_numeric <double>
+(
+    // inputs:
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // input/output
+    SuiteSparseQR_factorization <double> *QR,
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+template int SuiteSparseQR_numeric <Complex>
+(
+    // inputs:
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // input/output
+    SuiteSparseQR_factorization <Complex> *QR,
+    cholmod_common *cc      // workspace and parameters
+) ;
+
+// =============================================================================
+// === SuiteSparseQR_factorize =================================================
+// =============================================================================
+
+// QR factorization of a sparse matrix A, including symbolic ordering/analysis,
+// and numeric factorization.  This function is a combined symbolic+numeric
+// factorization, because it exploits singletons.  It factorizes A*E into Q*R,
+// where E is the fill-reducing ordering, Q is in Householder form, and R is
+// composed of a set of singleton rows followed by the rows of the multifrontal
+// factorization of the singleton-free submatrix.
+//
+// The MATLAB equivalent of this function is [Q,R,E]=spqr(A,opts) where opts.Q
+// = 'Householder', except that Q, R, and E are all stored in a single QR
+// object (of type SuiteSparseQR_factorization), rather than being put into
+// MATLAB format.  That extraction is done by the overloaded SuiteSparseQR
+// function, which also frees its QR object after extracting Q, R, and E.
+//
+// If you have a least-squares problem with a single right-hand-side B (where B
+// is a vector or matrix, or sparse or dense), and do not need to reuse the QR
+// factorization of A, then use the SuiteSparseQR function instead (which
+// corresponds to the MATLAB statement x=A\B, using a sparse QR factorization).
+//
+// The GPU is not used because the Householder vectors are always kept.
+
+template <typename Entry>
+SuiteSparseQR_factorization <Entry> *SuiteSparseQR_factorize
+(
+    // inputs, not modified:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    cholmod_common *cc      // workspace and parameters
+)
+{
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (A, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (A, NULL) ;
+    cc->status = CHOLMOD_OK ;
+    // B is not present, and always keep H:
+    int keepH = TRUE ;
+    return (spqr_1factor <Entry> (ordering, tol, 0, keepH, A,
+        0, NULL, NULL, NULL, cc)) ;
+}
+
+template SuiteSparseQR_factorization <double> *SuiteSparseQR_factorize <double>
+(
+    // inputs, not modified:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template SuiteSparseQR_factorization <Complex> *SuiteSparseQR_factorize<Complex>
+(
+    // inputs, not modified:
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // treat columns with 2-norm <= tol as zero
+    cholmod_sparse *A,      // sparse matrix to factorize
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === spqr_private_rtsolve ====================================================
+// =============================================================================
+
+// Solve X = R'\(E'*B) or X = R'\B using the QR factorization from spqr_1factor
+// or SuiteSparseQR_factorize (including the singleton-row R and the
+// multifrontal R).  A is m-by-n.  B is n-by-nrhs, and X is m-by-nrhs.
+
+template <typename Entry> void spqr_private_rtsolve
+(
+    // inputs
+    SuiteSparseQR_factorization <Entry> *QR,
+    int use_Q1fill,
+
+    Long nrhs,              // number of columns of B
+    Long ldb,               // leading dimension of B
+    Entry *B,               // size n-by-nrhs with leading dimension ldb
+
+    // output, contents undefined on input
+    Entry *X,               // size m-by-nrhs with leading dimension m
+
+    cholmod_common *cc
+)
+{
+    Entry xi ;
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+    Long *R1p, *R1j, *Rmap, *Rp, *Rj, *Super, *HStair, *Hm, *Stair, *Q1fill,
+        *RmapInv ;
+    Entry *R1x, **Rblock, *R, *X1, *X2 ;
+    char *Rdead ;
+    Long i, j, k, m, n, p, kk, n1rows, n1cols, rank, nf, f, col1, col2, fp, pr,
+        fn, rm, row1, keepH, fm, h, t, live, jj ;
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QR factorization
+    // -------------------------------------------------------------------------
+
+    QRsym = QR->QRsym ;
+    QRnum = QR->QRnum ;
+    n1rows = QR->n1rows ;
+    n1cols = QR->n1cols ;
+    n = QR->nacols ;
+    m = QR->narows ;
+    Q1fill = use_Q1fill ? QR->Q1fill : NULL ;
+    R1p = QR->R1p ;
+    R1j = QR->R1j ;
+    R1x = QR->R1x ;
+    Rmap = QR->Rmap ;
+    RmapInv = QR->RmapInv ;
+    rank = QR->rank ;
+    ASSERT ((Rmap == NULL) == (rank == n)) ;
+    ASSERT ((RmapInv == NULL) == (rank == n)) ;
+    ASSERT (rank <= MIN (m,n)) ;
+
+    keepH = QRnum->keepH ;
+    PR (("\nrtsolve keepH %ld n1rows %ld n1cols %ld\n", keepH, n1rows, n1cols));
+
+    // This code is only used when keepH is true.  keepH is tested below,
+    // however, in case this changes in the future (the following assert would
+    // also need to be removed).
+    ASSERT (keepH) ;
+
+    nf = QRsym->nf ;
+    Rblock = QRnum->Rblock ;
+    Rp = QRsym->Rp ;
+    Rj = QRsym->Rj ;
+    Super = QRsym->Super ;
+    Rdead = QRnum->Rdead ;
+
+    HStair = QRnum->HStair ;
+    Hm = QRnum->Hm ;
+
+    ASSERT (ldb >= n) ;
+
+    // -------------------------------------------------------------------------
+    // X = E'*B or X = B
+    // -------------------------------------------------------------------------
+
+    X1 = X ;
+    if (rank == n)
+    {
+        // R is in upper triangular form
+        ASSERT (n <= m) ;
+        for (kk = 0 ; kk < nrhs ; kk++)
+        {
+            for (k = 0 ; k < n ; k++)
+            {
+                X1 [k] = B [Q1fill ? Q1fill [k] : k] ;
+            }
+            for ( ; k < m ; k++)
+            {
+                X1 [k] = 0 ;
+            }
+            X1 += m ;
+            B += ldb ;
+        }
+    }
+    else
+    {
+        // R is in squeezed form; use the mapping to trapezoidal
+        for (kk = 0 ; kk < nrhs ; kk++)
+        {
+            for (i = 0 ; i < rank ; i++)
+            {
+                k = RmapInv [i] ;
+                ASSERT (k >= 0 && k < n) ;
+                Long knew = Q1fill ? Q1fill [k] : k ;
+                ASSERT (knew >= 0 && knew < n) ;
+                X1 [i] = B [knew] ;
+            }
+            for ( ; i < m ; i++)
+            {
+                X1 [i] = 0 ;
+            }
+            X1 += m ;
+            B += ldb ;
+        }
+    }
+
+    // =========================================================================
+    // === solve with the singleton rows of R ==================================
+    // =========================================================================
+
+    X1 = X ;
+    for (kk = 0 ; kk < nrhs ; kk++)
+    {
+        for (i = 0 ; i < n1rows ; i++)
+        {
+            // divide by the diagonal (the singleton entry itself)
+            p = R1p [i] ;
+            xi = spqr_divide (X1 [i], spqr_conj (R1x [p]), cc) ;
+            X1 [i] = xi ;
+
+            // solve with the off-diagonal entries
+            for (p++ ; p < R1p [i+1] ; p++)
+            {
+                j = R1j [p] ;
+                ASSERT (j >= i && j < n) ;
+                k = Rmap ? Rmap [j] : j ;
+                ASSERT (k >= 0 && k < n) ;
+                if (k < rank)
+                {
+                    // the jth column of R is live, and is the kth column of
+                    // the squeezed R
+                    X1 [k] -= spqr_conj (R1x [p]) * xi ;
+                }
+            }
+        }
+        X1 += m ;
+    }
+
+    // =========================================================================
+    // === solve with the multifrontal rows of R ===============================
+    // =========================================================================
+
+    Stair = NULL ;
+    fm = 0 ;
+    h = 0 ;
+    t = 0 ;
+
+    // start with row1 = n1rows, the first non-singleton row, which is the
+    // first row of the multifrontal R.
+
+    row1 = n1rows ;
+    for (f = 0 ; f < nf ; f++)
+    {
+
+        // ---------------------------------------------------------------------
+        // get the R block for front F
+        // ---------------------------------------------------------------------
+
+        R = Rblock [f] ;
+        col1 = Super [f] ;                  // first pivot column in front F
+        col2 = Super [f+1] ;                // col2-1 is last pivot col
+        fp = col2 - col1 ;                  // number of pivots in front F
+        pr = Rp [f] ;                       // pointer to row indices for F
+        fn = Rp [f+1] - pr ;                // # of columns in front F
+
+        if (keepH)
+        {
+            Stair = HStair + pr ;           // staircase of front F
+            fm = Hm [f] ;                   // # of rows in front F
+            h = 0 ;                         // H vector starts in row h
+        }
+
+        // ---------------------------------------------------------------------
+        // solve with the squeezed upper triangular part of R
+        // ---------------------------------------------------------------------
+
+        rm = 0 ;                            // number of rows in R block
+        for (k = 0 ; k < fp ; k++)
+        {
+            j = col1 + k ;
+            ASSERT (Rj [pr + k] == j) ;
+            if (j+n1cols >= n) return ;     // in case [A Binput] was factorized
+            if (keepH)
+            {
+                t = Stair [k] ;             // length of R+H vector
+                ASSERT (t >= 0 && t <= fm) ;
+                if (t == 0)
+                {
+                    live = FALSE ;          // column k is dead
+                    t = rm ;                // dead col, R only, no H
+                    h = rm ;
+                }
+                else
+                {
+                    live = (rm < fm) ;      // k is live, unless we hit the wall
+                    h = rm + 1 ;            // H vector starts in row h
+                }
+                ASSERT (t >= h) ;
+            }
+            else
+            {
+                // Ironically, this statement is itself dead code.  In the
+                // current version, keepH is always TRUE whenever rtsolve is
+                // used.  If H was not kept, this statement would determine
+                // whether the the pivot column is live or dead.
+                live = (!Rdead [j]) ;                                   // DEAD
+            }
+
+            if (live)
+            {
+                // This is a live pivot column of the R block.  rm has not been
+                // incremented yet, so at this point it is equal to the number
+                // of entries in the pivot column above the diagonal entry.
+                // The corresponding rows of the global R (and the solution X)
+                // are row1:row1+rm, and row1+rm is the "diagonal".
+                X1 = X + row1 ;
+                ASSERT (IMPLIES (Rmap != NULL, Rmap [j+n1cols] == row1 + rm)) ;
+                ASSERT (IMPLIES (Rmap == NULL, j+n1cols == row1 + rm)) ;
+                for (kk = 0 ; kk < nrhs ; kk++)
+                {
+                    xi = X1 [rm] ;      // xi = X (row1+rm,kk)
+                    for (i = 0 ; i < rm ; i++)
+                    {
+                        xi -= spqr_conj (R [i]) * X1 [i] ;
+                    }
+                    X1 [rm] = spqr_divide (xi, spqr_conj (R [rm]), cc) ;
+                    X1 += m ;
+                }
+                // After rm is incremented, it represents the number of rows
+                // so far in the R block
+                rm++ ;
+            }
+
+            // advance to the next column of R in the R block
+            R += rm + (keepH ? (t-h) : 0) ;
+        }
+
+        // ---------------------------------------------------------------------
+        // solve with the rectangular part of R
+        // ---------------------------------------------------------------------
+
+        for ( ; k < fn ; k++)
+        {
+            j = Rj [pr + k] ;
+            ASSERT (j >= col2 && j < QRsym->n) ;
+            jj = j + n1cols ;
+            if (jj >= n) break ;            // in case [A Binput] was factorized
+
+            Long ii = Rmap ? Rmap [jj] : jj ;
+            ASSERT (ii >= n1rows && ii < n) ;
+            if (ii < rank)
+            {
+                // X (ii,:) -= R (row1:row+rm-1,:)' * X (row1:row1+rm-1,:)
+                X2 = X + row1 ;                     // pointer to X (row1,0)
+                X1 = X ;
+                for (kk = 0 ; kk < nrhs ; kk++)
+                {
+                    xi = X1 [ii] ;                  // X (ii,kk)
+                    for (i = 0 ; i < rm ; i++)
+                    {
+                        xi -= spqr_conj (R [i]) * X2 [i] ;
+                    }
+                    X1 [ii] = xi ;
+                    X1 += m ;
+                    X2 += m ;
+                }
+            }
+
+            // go to the next column of R
+            R += rm ;
+            if (keepH)
+            {
+                t = Stair [k] ;             // length of R+H vector
+                ASSERT (t >= 0 && t <= fm) ;
+                h = MIN (h+1, fm) ;         // H vector starts in row h
+                ASSERT (t >= h) ;
+                R += (t-h) ;
+            }
+        }
+
+        row1 += rm ;    // advance past the rm rows of R in this front
+    }
+    ASSERT (row1 == rank) ;
+}
+
+
+// =============================================================================
+// === SuiteSparseQR_solve (dense case) ========================================
+// =============================================================================
+
+// Use the R factor from a QR object returned by SuiteSparseQR_factorize to
+// solve an upper or lower triangular system.  SuiteSparseQR_factorize computes
+// a QR object whose MATLAB equivalent is [Q,R,E]=spqr(A,opts) where opts.Q =
+// 'Householder' (QR contains Q in Householder form, R, and the permutation
+// vector E of 0:n-1).  This function performs one of the following operations,
+// where A is m-by-n:
+//
+// system=SPQR_RX_EQUALS_B    (0): X = R\B         B is m-by-k and X is n-by-k
+// system=SPQR_RETX_EQUALS_B  (1): X = E*(R\B)     as above, E is a permutation
+// system=SPQR_RTX_EQUALS_B   (2): X = R'\B        B is n-by-k and X is m-by-k
+// system=SPQR_RTX_EQUALS_ETB (3): X = R'\(E'*B)   as above, E is a permutation
+//
+// Both X and B are dense matrices.  Only the first r rows and columns of R are
+// used, where r is the rank estimate of A found by SuiteSparseQR_factorize.
+
+template <typename Entry> cholmod_dense *SuiteSparseQR_solve    // returns X
+(
+    // inputs, not modified:
+    int system,                 // which system to solve (0,1,2,3)
+    SuiteSparseQR_factorization <Entry> *QR,    // of an m-by-n sparse matrix A
+    cholmod_dense *B,           // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Entry *Bx ;
+    cholmod_dense *W, *X ;
+    Long m, n, nrhs, ldb, ok ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (B, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (B, NULL) ;
+    RETURN_IF_NULL (QR, NULL) ;
+    RETURN_IF_NULL (QR->QRnum, NULL) ;
+    if (system < SPQR_RX_EQUALS_B || system > SPQR_RTX_EQUALS_ETB)
+    {
+        ERROR (CHOLMOD_INVALID, "Invalid system") ;
+        return (NULL) ;
+    }
+    m = QR->narows ;
+    n = QR->nacols ;
+    if ((Long) B->nrow != ((system <= SPQR_RETX_EQUALS_B) ? m : n))
+    {
+        ERROR (CHOLMOD_INVALID, "invalid dimensions") ;
+        return (NULL) ;
+    }
+
+    ASSERT (QR->bncols == 0) ;
+
+    cc->status = CHOLMOD_OK ;
+
+    nrhs = B->ncol ;
+    Bx = (Entry *) B->x ;
+    ldb = B->d ;
+
+    if (system == SPQR_RX_EQUALS_B || system == SPQR_RETX_EQUALS_B)
+    {
+
+        // ---------------------------------------------------------------------
+        // X = E*(R\B) or X=R\B
+        // ---------------------------------------------------------------------
+
+        Long *Rlive ;
+        Entry **Rcolp ;
+        X = cholmod_l_allocate_dense (n, nrhs, n, xtype, cc) ;
+        Long maxfrank = QR->QRnum->maxfrank  ;
+        W = cholmod_l_allocate_dense (maxfrank, nrhs, maxfrank, xtype, cc) ;
+        Rlive = (Long *)   cholmod_l_malloc (maxfrank, sizeof (Long),    cc) ;
+        Rcolp = (Entry **) cholmod_l_malloc (maxfrank, sizeof (Entry *), cc) ;
+        ok = (X != NULL) && (W != NULL) && (cc->status == CHOLMOD_OK) ;
+        if (ok)
+        {
+            spqr_rsolve (QR, system == SPQR_RETX_EQUALS_B, nrhs, ldb, Bx,
+                (Entry *) X->x, Rcolp, Rlive, (Entry *) W->x, cc) ;
+        }
+        cholmod_l_free (maxfrank, sizeof (Long),    Rlive, cc) ;
+        cholmod_l_free (maxfrank, sizeof (Entry *), Rcolp, cc) ;
+        cholmod_l_free_dense (&W, cc) ;
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // X = R'\(E'*B) or R'\B
+        // ---------------------------------------------------------------------
+
+        X = cholmod_l_allocate_dense (m, nrhs, m, xtype, cc) ;
+        ok = (X != NULL) ;
+        if (ok)
+        {
+            spqr_private_rtsolve (QR, system == SPQR_RTX_EQUALS_ETB, nrhs, ldb,
+                Bx, (Entry *) X->x, cc) ;
+        }
+    }
+
+    if (!ok)
+    {
+        // out of memory
+        ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+        cholmod_l_free_dense (&X, cc) ;
+        return (NULL) ;
+    }
+
+    return (X) ;
+}
+
+
+template cholmod_dense *SuiteSparseQR_solve <Complex>
+(
+    // inputs, not modified:
+    int system,                 // which system to solve
+    SuiteSparseQR_factorization <Complex> *QR,  // of an m-by-n sparse matrix A
+    cholmod_dense *B,           // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template cholmod_dense *SuiteSparseQR_solve <double>
+(
+    // inputs, not modified:
+    int system,                 // which system to solve
+    SuiteSparseQR_factorization <double> *QR,   // of an m-by-n sparse matrix A
+    cholmod_dense *B,           // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === SuiteSparseQR_solve (sparse case) =======================================
+// =============================================================================
+
+template <typename Entry> cholmod_sparse *SuiteSparseQR_solve    // returns X
+(
+    // inputs, not modified:
+    int system,                 // which system to solve (0,1,2,3)
+    SuiteSparseQR_factorization <Entry> *QR,    // of an m-by-n sparse matrix A
+    cholmod_sparse *Bsparse,    // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    cholmod_dense *Bdense, *Xdense ;
+    cholmod_sparse *Xsparse = NULL ;
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (QR, NULL) ;
+    RETURN_IF_NULL (Bsparse, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (Bsparse, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    Bdense = cholmod_l_sparse_to_dense (Bsparse, cc) ;
+    Xdense = SuiteSparseQR_solve <Entry> (system, QR, Bdense, cc) ;
+    cholmod_l_free_dense (&Bdense, cc) ;
+    Xsparse = cholmod_l_dense_to_sparse (Xdense, TRUE, cc) ;
+    cholmod_l_free_dense (&Xdense, cc) ;
+
+    if (Xsparse == NULL)
+    {
+        cc->status = CHOLMOD_OUT_OF_MEMORY ;
+    }
+    return (Xsparse) ;
+}
+
+template cholmod_sparse *SuiteSparseQR_solve <double>
+(
+    // inputs, not modified:
+    int system,                 // which system to solve (0,1,2,3)
+    SuiteSparseQR_factorization <double> *QR,   // of an m-by-n sparse matrix A
+    cholmod_sparse *Bsparse,    // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template cholmod_sparse *SuiteSparseQR_solve <Complex>
+(
+    // inputs, not modified:
+    int system,                 // which system to solve (0,1,2,3)
+    SuiteSparseQR_factorization <Complex> *QR,  // of an m-by-n sparse matrix A
+    cholmod_sparse *Bsparse,    // right-hand-side, m-by-nrhs or n-by-nrhs
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === spqr_private_get_H_vectors ==============================================
+// =============================================================================
+
+// Get pointers to the Householder vectors in a single front.
+// Returns # Householder vectors in F.
+
+template <typename Entry> Long spqr_private_get_H_vectors
+(
+    // inputs
+    Long f,                 // front to operate on
+    SuiteSparseQR_factorization <Entry> *QR,
+
+    // outputs
+    Entry *H_Tau,           // size QRsym->maxfn
+    Long *H_start,          // size QRsym->maxfn
+    Long *H_end,            // size QRsym->maxfn
+    cholmod_common *cc
+)
+{
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+    Entry *Tau ;
+    Long *Rj, *Stair ;
+    Long col1, col2, fp, pr, fn, fm, h, nh, p, rm, k, j, t, n1cols, n ;
+
+    // -------------------------------------------------------------------------
+    // get the R block for front F
+    // -------------------------------------------------------------------------
+
+    QRsym = QR->QRsym ;
+    QRnum = QR->QRnum ;
+    n1cols = QR->n1cols ;
+    Rj = QRsym->Rj ;
+    n = QR->nacols ;
+
+    col1 = QRsym->Super [f] ;           // first pivot column in front F
+    col2 = QRsym->Super [f+1] ;         // col2-1 is last pivot col
+    fp = col2 - col1 ;                  // number of pivots in front F
+    pr = QRsym->Rp [f] ;                // pointer to row indices for F
+    fn = QRsym->Rp [f+1] - pr ;         // # of columns in front F
+
+    Stair = QRnum->HStair + pr ;        // staircase of front F
+    Tau = QRnum->HTau + pr ;            // Householder coeff. for front F
+
+    fm = QRnum->Hm [f] ;                // # of rows in front F
+    h = 0 ;                             // H vector starts in row h
+    nh = 0 ;                            // number of Householder vectors
+    p = 0 ;                             // index into R+H block
+
+    // -------------------------------------------------------------------------
+    // find all the Householder vectors in the R+H block
+    // -------------------------------------------------------------------------
+
+    rm = 0 ;                            // number of rows in R block
+    for (k = 0 ; k < fn && nh < fm ; k++)
+    {
+        if (k < fp)
+        {
+            // a pivotal column of front F
+            j = col1 + k ;
+            ASSERT (Rj [pr + k] == j) ;
+            t = Stair [k] ;                 // length of R+H vector
+            ASSERT (t >= 0 && t <= fm) ;
+            if (t == 0)
+            {
+                p += rm ;                   // no H vector, skip over R
+                continue ;
+            }
+            else if (rm < fm)
+            {
+                rm++ ;                      // column k is not dead
+            }
+            h = rm ;                        // H vector starts in row h
+            ASSERT (t >= h) ;
+        }
+        else
+        {
+            // a non-pivotal column of front F
+            j = Rj [pr + k] ;
+            ASSERT (j >= col2 && j < QRsym->n) ;
+            t = Stair [k] ;                 // length of R+H vector
+            ASSERT (t >= rm && t <= fm) ;
+            h = MIN (h+1,fm) ;              // one more row of C to skip
+            ASSERT (t >= h) ;
+        }
+        if (j+n1cols >= n) break ;          // in case [A Binput] was factorized
+        p += rm ;                           // skip over R
+        H_Tau [nh] = Tau [k] ;              // one more H vector found
+        H_start [nh] = p ;                  // H vector starts here
+        p += (t-h) ;                        // skip over the H vector
+        H_end [nh] = p ;                    // H vector ends here
+        nh++ ;
+        if (h == fm) break ;                // that was the last H vector
+    }
+
+    return (nh) ;
+}
+
+
+// =============================================================================
+// === spqr_private_load_H_vectors =============================================
+// =============================================================================
+
+// Load Householder vectors h1:h2-1 into the panel V.  Return # of rows in V.
+
+template <typename Entry> Long spqr_private_load_H_vectors
+(
+    // input
+    Long h1,            // load vectors h1 to h2-1
+    Long h2,
+    Long *H_start,      // vector h starts at R [H_start [h]]
+    Long *H_end,        // vector h ends at R [H_end [h]-1]
+    Entry *R,           // Rblock [f]
+    // output
+    Entry *V,           // V is v-by-(h2-h1) and lower triangular
+    cholmod_common *cc
+)
+{
+    // v = length of last H vector
+    Long v = H_end [h2-1] - H_start [h2-1] + (h2-h1) ;
+    Entry *V1 = V ;
+    for (Long h = h1 ; h < h2 ; h++)
+    {
+        Long i ;
+        // This part of V is not accessed, for testing only:
+        // for (i = 0 ; i < h-h1 ; i++) V1 [i] = 0 ;
+        i = h-h1 ;
+        V1 [i++] = 1 ;
+        for (Long p = H_start [h] ; p < H_end [h] ; p++)
+        {
+            V1 [i++] = R [p] ;
+        }
+        for ( ; i < v ; i++)
+        {
+            V1 [i] = 0 ;
+        }
+        V1 += v ;
+    }
+    return (v) ;
+}
+
+
+// =============================================================================
+// === spqr_private_Happly =====================================================
+// =============================================================================
+
+// Given a QR factorization from spqr_1factor, apply the Householder vectors
+// to a dense matrix X.
+
+template <typename Entry> void spqr_private_Happly
+(
+    // inputs
+    int method,             // 0,1,2,3
+    SuiteSparseQR_factorization <Entry> *QR,
+    Long hchunk,            // apply hchunk Householder vectors at a time
+
+    // input/output
+    Long m,
+    Long n,
+    Entry *X,               // size m-by-n with leading dimension m; only
+                            // X (n1rows:m-1,:) or X (:,n1rows:n-1) is modified
+
+    // workspace, not defined on input or output
+    Entry *H_Tau,           // size QRsym->maxfn
+    Long *H_start,          // size QRsym->maxfn
+    Long *H_end,            // size QRsym->maxfn
+    Entry *V,               // size v-by-hchunk, where v = QRnum->maxfm
+    Entry *C,               // size: method 0,1: v*n,     method 2,3: m*v
+    Entry *W,               // size: method 0,1: h*h+n*h, method 2,3: h*h+m*h
+                            // where h = hchunk
+    cholmod_common *cc
+)
+{
+
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+    Entry **Rblock, *R, *X2 ;
+    Long *Hii, *Hip, *Hi ;
+    Long nf, f, nh, h1, h2, v, n1rows, m2, n2 ;
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QR factorization
+    // -------------------------------------------------------------------------
+
+    QRsym = QR->QRsym ;
+    QRnum = QR->QRnum ;
+    ASSERT (QRnum->keepH) ;
+    nf = QRsym->nf ;
+    Rblock = QRnum->Rblock ;
+    Hii = QRnum->Hii ;
+    Hip = QRsym->Hip ;
+    ASSERT (QR->narows == ((method <= SPQR_QX) ? m : n)) ;
+    n1rows = QR->n1rows ;
+
+    // -------------------------------------------------------------------------
+    // operate on X (n1rows:m-1,:) or X (:,n1rows:n-1)
+    // -------------------------------------------------------------------------
+
+    // The Householder vectors must be shifted downwards by n1rows, past the
+    // singleton rows which are not part of the multifrontal part of the
+    // QR factorization.
+
+    if (method == SPQR_QTX || method == SPQR_QX)
+    {
+        // Q*X or Q'*X
+        X2 = X + n1rows ;
+        n2 = n ;
+        m2 = m - n1rows ;
+    }
+    else
+    {
+        X2 = X + n1rows * m ;
+        n2 = n - n1rows ; 
+        m2 = m ;
+    }
+
+    // -------------------------------------------------------------------------
+    // apply the Householder vectors
+    // -------------------------------------------------------------------------
+
+    if (method == SPQR_QTX || method == SPQR_XQ)
+    {
+
+        // ---------------------------------------------------------------------
+        // apply in forward direction
+        // ---------------------------------------------------------------------
+
+        for (f = 0 ; f < nf ; f++)
+        {
+            // get the Householder vectors for front F
+            nh = spqr_private_get_H_vectors (f, QR, H_Tau, H_start, H_end, cc) ;
+            R = Rblock [f] ;
+            Hi = &Hii [Hip [f]] ;               // list of row indices of H
+
+            // apply the Householder vectors, one panel at a time
+            for (h1 = 0 ; h1 < nh ; h1 = h2)
+            {
+                // load vectors h1:h2-1 from R into the panel V and apply them
+                h2 = MIN (h1 + hchunk, nh) ;
+                v = spqr_private_load_H_vectors (h1, h2, H_start, H_end, R, V,
+                    cc) ;
+                ASSERT (v+h1 <= QR->QRnum->Hm [f]) ;
+                spqr_panel (method, m2, n2, v, h2-h1, Hi+h1, V, H_Tau+h1,
+                    m, X2, C, W, cc) ;
+            }
+        }
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // apply in backward direction
+        // ---------------------------------------------------------------------
+
+        for (f = nf-1 ; f >= 0 ; f--)
+        {
+
+            // get the Householder vectors for front F
+            nh = spqr_private_get_H_vectors (f, QR, H_Tau, H_start, H_end, cc) ;
+            R = Rblock [f] ;
+            Hi = &Hii [Hip [f]] ;               // list of row indices of H
+
+            // apply the Householder vectors, one panel at a time
+            for (h2 = nh ; h2 > 0 ; h2 = h1)
+            {
+                // load vectors h1:h2-1 from R into the panel V and apply them
+                h1 = MAX (h2 - hchunk, 0) ;
+                v = spqr_private_load_H_vectors (h1, h2, H_start, H_end, R, V,
+                    cc) ;
+                ASSERT (v+h1 <= QR->QRnum->Hm [f]) ;
+                spqr_panel (method, m2, n2, v, h2-h1, Hi+h1, V, H_Tau+h1,
+                    m, X2, C, W, cc) ;
+            }
+        }
+    }
+}
+
+
+// =============================================================================
+// === SuiteSparseQR_qmult (dense case) ========================================
+// =============================================================================
+
+// Applies Q in Householder form (as stored in the QR factorization object
+// returned by SuiteSparseQR_factorize) to a dense matrix X.
+//
+//  method SPQR_QTX (0): Y = Q'*X
+//  method SPQR_QX  (1): Y = Q*X
+//  method SPQR_XQT (2): Y = X*Q'
+//  method SPQR_XQ  (3): Y = X*Q
+
+#define HCHUNK 32        // FUTURE: make this an input parameter
+
+#define FREE_WORK \
+{ \
+    cholmod_l_free_dense (&Zdense, cc) ; \
+    cholmod_l_free_dense (&Vdense, cc) ; \
+    cholmod_l_free_dense (&Wdense, cc) ; \
+    cholmod_l_free_dense (&Cdense, cc) ; \
+    cholmod_l_free (maxfn, sizeof (Entry), H_Tau,   cc) ; \
+    cholmod_l_free (maxfn, sizeof (Long),  H_start, cc) ; \
+    cholmod_l_free (maxfn, sizeof (Long),  H_end,   cc) ; \
+}
+
+// returns Y of size m-by-n, or NULL on failure
+template <typename Entry> cholmod_dense *SuiteSparseQR_qmult
+(
+    // inputs, not modified
+    int method,             // 0,1,2,3
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_dense *Xdense,  // size m-by-n with leading dimension ldx
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    cholmod_dense *Ydense, *Cdense, *Vdense, *Wdense, *Zdense ;
+    Entry *X, *Y, *X1, *Y1, *Z1, *C, *V, *Z, *W, *H_Tau ;
+    Long *HPinv, *H_start, *H_end ;
+    Long i, k, mh, v, hchunk, ldx, m, n, maxfn, ok ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (QR, NULL) ;
+    RETURN_IF_NULL (QR->QRnum, NULL) ;
+    RETURN_IF_NULL (QR->QRnum->Hm, NULL) ;
+    RETURN_IF_NULL (Xdense, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (Xdense, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    // get HPinv from QR->HP1inv if singletons exist, else QR->QRnum->HPinv
+    HPinv = (QR->n1cols > 0) ? QR->HP1inv : QR->QRnum->HPinv ;
+
+    v = QR->QRnum->maxfm ;
+    mh = QR->narows ;
+    maxfn = QR->QRsym->maxfn ;
+
+    X = (Entry *) Xdense->x ;
+    m = Xdense->nrow ;
+    n = Xdense->ncol ;
+    ldx = Xdense->d ;
+    ASSERT (ldx >= m) ;
+
+    if (method == SPQR_QTX || method == SPQR_QX)
+    {
+        // rows of H and X must be the same
+        if (mh != m)
+        {
+            ERROR (CHOLMOD_INVALID, "mismatched dimensions") ;
+            return (NULL) ;
+        }
+    }
+    else if (method == SPQR_XQT || method == SPQR_XQ)
+    {
+        // rows of H and columns of X must be the same
+        if (mh != n)
+        {
+            ERROR (CHOLMOD_INVALID, "mismatched dimensions") ;
+            return (NULL) ;
+        }
+    }
+    else
+    {
+        ERROR (CHOLMOD_INVALID, "invalid method") ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate result Y
+    // -------------------------------------------------------------------------
+
+    Ydense = cholmod_l_allocate_dense (m, n, m, xtype, cc) ;
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        return (NULL) ;
+    }
+    Y = (Entry *) Ydense->x ;
+
+    if (m == 0 || n == 0)
+    {
+        // nothing to do
+        return (Ydense) ;    
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate workspace
+    // -------------------------------------------------------------------------
+
+    Z = NULL ;
+    Zdense = NULL ;
+    ok = TRUE ;
+    if (method == SPQR_QX || method == SPQR_XQT)
+    {
+        // Z of size m-by-n is needed only for Q*X and X*Q'
+        Zdense = cholmod_l_allocate_dense (m, n, m, xtype, cc) ;
+        ok = (Zdense != NULL) ;
+    }
+
+    hchunk = HCHUNK ;
+    ASSERT (v <= mh) ;
+
+    // C is workspace of size v-by-n or m-by-v
+    Cdense = cholmod_l_allocate_dense (v, (method <= SPQR_QX) ? n : m,
+        v, xtype, cc) ;
+    Vdense = NULL ;
+    Wdense = NULL ;
+
+    H_Tau   = (Entry *) cholmod_l_malloc (maxfn, sizeof (Entry), cc) ;
+    H_start = (Long *)  cholmod_l_malloc (maxfn, sizeof (Long),  cc) ;
+    H_end   = (Long *)  cholmod_l_malloc (maxfn, sizeof (Long),  cc) ;
+
+    if (!ok || Cdense == NULL || cc->status < CHOLMOD_OK)
+    {
+        // out of memory; free workspace and result Y
+        ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+        cholmod_l_free_dense (&Ydense, cc) ;
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // copy X into Z
+    // -------------------------------------------------------------------------
+
+    if (method == SPQR_QX || method == SPQR_XQT)
+    {
+        // Z = X
+        Z = (Entry *) Zdense->x ;
+        Z1 = Z ;
+        X1 = X ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (i = 0 ; i < m ; i++)
+            {
+                Z1 [i] = X1 [i] ;
+            }
+            X1 += ldx ;
+            Z1 += m ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate O(hchunk) workspace
+    // -------------------------------------------------------------------------
+
+    // V is workspace of size v-by-hchunk
+    Vdense = cholmod_l_allocate_dense (v, hchunk, v, xtype, cc) ;
+
+    // W is workspace of size h*h+n*h or h*h+m*h where h = hchunk
+    Wdense = cholmod_l_allocate_dense (hchunk,
+        hchunk + ((method <= SPQR_QX) ? n : m), hchunk, xtype, cc) ;
+
+    // -------------------------------------------------------------------------
+    // punt if out of memory
+    // -------------------------------------------------------------------------
+
+    if (Vdense == NULL || Wdense == NULL)
+    {
+        // PUNT: out of memory; try again with hchunk = 1
+        cc->status = CHOLMOD_OK ;
+        hchunk = 1 ;
+
+        cholmod_l_free_dense (&Vdense, cc) ;
+        cholmod_l_free_dense (&Wdense, cc) ;
+
+        Vdense = cholmod_l_allocate_dense (v, hchunk, v, xtype, cc) ;
+        Wdense = cholmod_l_allocate_dense (hchunk,
+            hchunk + ((method <= SPQR_QX) ? n : m), hchunk, xtype, cc) ;
+
+        if (Vdense == NULL || Wdense == NULL)
+        {
+            // out of memory; free workspace and result Y
+            ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+            cholmod_l_free_dense (&Ydense, cc) ;
+            FREE_WORK ;
+            return (NULL) ;
+        }
+    }
+
+    // the dimension (->nrow, ->ncol, and ->d) of this workspace is not used,
+    // just the arrays themselves.
+    V = (Entry *) Vdense->x ;
+    C = (Entry *) Cdense->x ;
+    W = (Entry *) Wdense->x ;
+
+    // -------------------------------------------------------------------------
+    // Y = Q'*X, Q*X, X*Q, or X*Q'
+    // -------------------------------------------------------------------------
+
+    PR (("Qfmult Method %d m %ld n %ld X %p Y %p\n", method, m, n, X, Y)) ;
+
+    if (method == SPQR_QTX)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = Q'*X
+        // ---------------------------------------------------------------------
+
+        // Y (P,:) = X, and change leading dimension from ldx to m
+        X1 = X ;
+        Y1 = Y ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [HPinv [i]] = X1 [i] ;
+            }
+            X1 += ldx ;
+            Y1 += m ;
+        }
+
+        // apply H to Y
+        spqr_private_Happly (method, QR, hchunk, m, n, Y, H_Tau, H_start, H_end,
+            V, C, W, cc) ;
+
+    }
+    else if (method == SPQR_QX)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = Q*X
+        // ---------------------------------------------------------------------
+
+        // apply H to Z
+        spqr_private_Happly (method, QR, hchunk, m, n, Z, H_Tau, H_start, H_end,
+            V, C, W, cc) ;
+
+        // Y = Z (P,:)
+        Z1 = Z ;
+        Y1 = Y ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [i] = Z1 [HPinv [i]] ;
+            }
+            Z1 += m ;
+            Y1 += m ;
+        }
+
+    }
+    else if (method == SPQR_XQT)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = X*Q'
+        // ---------------------------------------------------------------------
+
+        // apply H to Z
+        spqr_private_Happly (method, QR, hchunk, m, n, Z, H_Tau, H_start, H_end,
+            V, C, W, cc) ;
+
+        // Y = Z (:,P)
+        Y1 = Y ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Z1 = Z + HPinv [k] * m ;    // m = leading dimension of Z
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [i] = Z1 [i] ;
+            }
+            Y1 += m ;
+        }
+
+    }
+    else if (method == SPQR_XQ)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = X*Q
+        // ---------------------------------------------------------------------
+
+        // Y (:,P) = X and change leading dimension from ldx to m
+        X1 = X ;
+        for (k = 0 ; k < n ; k++)
+        {
+            Y1 = Y + HPinv [k] * m ;    // m = leading dimension of Y
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [i] = X1 [i] ;
+            }
+            X1 += ldx ;
+        }
+
+        // apply H to Y
+        spqr_private_Happly (method, QR, hchunk, m, n, Y, H_Tau, H_start, H_end,
+            V, C, W, cc) ;
+
+    }
+
+    // -------------------------------------------------------------------------
+    // free workspace and return Y
+    // -------------------------------------------------------------------------
+
+    FREE_WORK ;
+
+    if (CHECK_BLAS_INT && !cc->blas_ok)
+    {
+        ERROR (CHOLMOD_INVALID, "problem too large for the BLAS") ;
+        cholmod_l_free_dense (&Ydense, cc) ;
+        return (NULL) ;
+    }
+
+    return (Ydense) ;
+}
+
+
+template cholmod_dense *SuiteSparseQR_qmult <double>
+(
+    // inputs, not modified
+    int method,             // 0,1,2,3
+    SuiteSparseQR_factorization <double> *QR,
+    cholmod_dense *Xdense,  // size m-by-n with leading dimension ldx
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+template cholmod_dense *SuiteSparseQR_qmult <Complex>
+(
+    // inputs, not modified
+    int method,             // 0,1,2,3
+    SuiteSparseQR_factorization <Complex> *QR,
+    cholmod_dense *Xdense,  // size m-by-n with leading dimension ldx
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === SuiteSparseQR_qmult (sparse case) =======================================
+// =============================================================================
+
+// returns Y of size m-by-n, or NULL on failure
+template <typename Entry> cholmod_sparse *SuiteSparseQR_qmult
+(
+    // inputs, not modified
+    int method,                 // 0,1,2,3
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_sparse *Xsparse,    // size m-by-n
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    cholmod_dense *Xdense, *Ydense ;
+    cholmod_sparse *Ysparse = NULL ;
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (QR, NULL) ;
+    RETURN_IF_NULL (Xsparse, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (Xsparse, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    Xdense = cholmod_l_sparse_to_dense (Xsparse, cc) ;
+    Ydense = SuiteSparseQR_qmult <Entry> (method, QR, Xdense, cc) ;
+    cholmod_l_free_dense (&Xdense, cc) ;
+    Ysparse = cholmod_l_dense_to_sparse (Ydense, TRUE, cc) ;
+    cholmod_l_free_dense (&Ydense, cc) ;
+
+    if (Ysparse == NULL)
+    {
+        cc->status = CHOLMOD_OUT_OF_MEMORY ;
+    }
+    return (Ysparse) ;
+}
+
+template cholmod_sparse *SuiteSparseQR_qmult <double>
+(
+    // inputs, not modified
+    int method,                 // 0,1,2,3
+    SuiteSparseQR_factorization <double> *QR,
+    cholmod_sparse *Xsparse,    // size m-by-n
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template cholmod_sparse *SuiteSparseQR_qmult <Complex>
+(
+    // inputs, not modified
+    int method,                 // 0,1,2,3
+    SuiteSparseQR_factorization <Complex> *QR,
+    cholmod_sparse *Xsparse,    // size m-by-n
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === SuiteSparseQR_free ======================================================
+// =============================================================================
+
+// Free the QR object; this is just a user-callable wrapper for spqr_freefac.
+
+template <typename Entry> int SuiteSparseQR_free
+(
+    SuiteSparseQR_factorization <Entry> **QR,
+    cholmod_common *cc
+)
+{
+    RETURN_IF_NULL_COMMON (FALSE) ;
+    spqr_freefac <Entry> (QR, cc) ;
+    return (TRUE) ;
+}
+
+template int SuiteSparseQR_free <double>
+(
+    SuiteSparseQR_factorization <double> **QR,
+    cholmod_common *cc
+) ;
+
+template int SuiteSparseQR_free <Complex>
+(
+    SuiteSparseQR_factorization <Complex> **QR,
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === SuiteSparseQR_min2norm ==================================================
+// =============================================================================
+
+// Find the min 2-norm solution for underdetermined systems (A is m-by-n with
+// m<n), or find a least-squares solution otherwise.
+
+template <typename Entry> cholmod_dense *SuiteSparseQR_min2norm
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_dense *B,
+    cholmod_common *cc
+)
+{
+    cholmod_dense *X ; 
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (A, NULL) ;
+    RETURN_IF_NULL (B, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (A, NULL) ;
+    RETURN_IF_XTYPE_INVALID (B, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    if (A->nrow < A->ncol)
+    {
+
+        double t0 = SuiteSparse_time ( ) ;
+
+        // x=A\B, using a QR factorization of A'
+        SuiteSparseQR_factorization <Entry> *QR ;
+        cholmod_sparse *AT ;
+        cholmod_dense *Y ; 
+        // [Q,R,E] = qr (A')
+        AT = cholmod_l_transpose (A, 2, cc) ;
+        QR = SuiteSparseQR_factorize <Entry> (ordering, tol, AT, cc);
+        cholmod_l_free_sparse (&AT, cc) ;
+        // solve Y = R'\(E'*B)
+        Y = SuiteSparseQR_solve (SPQR_RTX_EQUALS_ETB, QR, B, cc) ;
+        // X = Q*Y
+        X = SuiteSparseQR_qmult (SPQR_QX, QR, Y, cc) ;
+        cholmod_l_free_dense (&Y, cc) ;
+        spqr_freefac (&QR, cc) ;
+
+        double t3 = SuiteSparse_time ( ) ;
+        double total_time = t3 - t0 ;
+        cc->SPQR_solve_time =
+            total_time - cc->SPQR_analyze_time - cc->SPQR_factorize_time ;
+
+    }
+    else
+    {
+        // x=A\B, using a QR factorization of A
+        SuiteSparseQR <Entry> (ordering, tol, 0, 2, A, NULL, B, NULL, &X,
+            NULL, NULL, NULL, NULL, NULL, cc) ;
+    }
+
+    if (X == NULL)
+    {
+        // After A and B are valid, the only way any of the above functions can
+        // fail is by running out of memory.  However, if (say) AT is NULL
+        // because of insufficient memory, SuiteSparseQR_factorize will report
+        // CHOLMOD_INVALID since its input is NULL.  In that case, restore the
+        // error back to CHOLMOD_OUT_OF_MEMORY.
+        cc->status = CHOLMOD_OUT_OF_MEMORY ;
+    }
+
+    return (X) ;
+}
+
+template cholmod_dense *SuiteSparseQR_min2norm <double>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_dense *B,
+    cholmod_common *cc
+) ;
+
+template cholmod_dense *SuiteSparseQR_min2norm <Complex>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_dense *B,
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === SuiteSparseQR_min2norm (sparse case) ====================================
+// =============================================================================
+
+template <typename Entry> cholmod_sparse *SuiteSparseQR_min2norm    // returns X
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_sparse *Bsparse,
+    cholmod_common *cc
+)
+{
+    double t0 = SuiteSparse_time ( ) ;
+
+    cholmod_dense *Bdense, *Xdense ;
+    cholmod_sparse *Xsparse = NULL ;
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (A, NULL) ;
+    RETURN_IF_NULL (Bsparse, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (A, NULL) ;
+    RETURN_IF_XTYPE_INVALID (Bsparse, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    Bdense = cholmod_l_sparse_to_dense (Bsparse, cc) ;
+    Xdense = SuiteSparseQR_min2norm <Entry> (ordering, tol, A, Bdense, cc) ;
+    cholmod_l_free_dense (&Bdense, cc) ;
+    Xsparse = cholmod_l_dense_to_sparse (Xdense, TRUE, cc) ;
+    cholmod_l_free_dense (&Xdense, cc) ;
+
+    if (Xsparse == NULL)
+    {
+        cc->status = CHOLMOD_OUT_OF_MEMORY ;
+    }
+
+    double t3 = SuiteSparse_time ( ) ;
+    double total_time = t3 - t0 ;
+    cc->SPQR_solve_time =
+        total_time - cc->SPQR_analyze_time - cc->SPQR_factorize_time ;
+
+    return (Xsparse) ;
+}
+
+template cholmod_sparse *SuiteSparseQR_min2norm <double>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_sparse *Bsparse,
+    cholmod_common *cc
+) ;
+
+template cholmod_sparse *SuiteSparseQR_min2norm <Complex>
+(
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,
+    cholmod_sparse *A,
+    cholmod_sparse *Bsparse,
+    cholmod_common *cc
+) ;
+#endif
diff --git a/SPQR/Source/SuiteSparseQR_qmult.cpp b/SPQR/Source/SuiteSparseQR_qmult.cpp
new file mode 100644
index 0000000..dc4f3ab
--- /dev/null
+++ b/SPQR/Source/SuiteSparseQR_qmult.cpp
@@ -0,0 +1,730 @@
+// =============================================================================
+// === SuiteSparseQR_qmult =====================================================
+// =============================================================================
+
+// Applies Q in Householder form to a sparse or dense matrix X.  These functions
+// use the Householder form in plain sparse column form, as returned by
+// the SuiteSparseQR function.
+//
+// The result Y is sparse if X is sparse, or dense if X is dense.
+// The sparse/dense cases are handled via overloaded functions.
+//
+//  method SPQR_QTX (0): Y = Q'*X      
+//  method SPQR_QX  (1): Y = Q*X
+//  method SPQR_XQT (2): Y = X*Q'
+//  method SPQR_XQ  (3): Y = X*Q
+//
+//  Q is held in its Householder form, as the mh-by-nh sparse matrix H,
+//  a vector HTau of length nh, and a permutation vector HPinv of length mh.
+//  mh is m for methods 0 and 1, and n for methods 2 and 3.  If HPinv is
+//  NULL, the identity permutation is used.
+
+#include "spqr.hpp"
+
+// =============================================================================
+// === SuiteSparseQR_qmult (dense) =============================================
+// =============================================================================
+
+#define HCHUNK_DENSE 32        // FUTURE: make this an input parameter
+
+// returns Y of size m-by-n, or NULL on failure
+template <typename Entry> cholmod_dense *SuiteSparseQR_qmult
+(
+    // inputs, not modified
+    int method,             // 0,1,2,3
+    cholmod_sparse *H,      // either m-by-nh or n-by-nh
+    cholmod_dense *HTau,    // size 1-by-nh
+    Long *HPinv,            // size mh, identity permutation if NULL
+    cholmod_dense *Xdense,  // size m-by-n with leading dimension ldx
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    cholmod_dense *Ydense ;
+    Entry *X, *Y, *X1, *Y1, *Z1, *Hx, *C, *V, *Z, *CV, *Tau ;
+    Long *Hp, *Hi, *Wi, *Wmap ;
+    Long i, k, zsize, nh, mh, vmax, hchunk, vsize, csize, cvsize, wisize, ldx,
+        m, n ;
+    int ok = TRUE ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (H, NULL) ;
+    RETURN_IF_NULL (HTau, NULL) ;
+    RETURN_IF_NULL (Xdense, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (H, NULL) ;
+    RETURN_IF_XTYPE_INVALID (HTau, NULL) ;
+    RETURN_IF_XTYPE_INVALID (Xdense, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    Hp = (Long *) H->p ;
+    Hi = (Long *) H->i ;
+    Hx = (Entry *) H->x ;
+    nh = H->ncol ;
+    mh = H->nrow ;
+
+    X = (Entry *) Xdense->x ;
+    m = Xdense->nrow ;
+    n = Xdense->ncol ;
+    ldx = Xdense->d ;
+    ASSERT (ldx >= m) ;
+
+    if (method == SPQR_QTX || method == SPQR_QX)
+    {
+        // rows of H and X must be the same
+        if (mh != m)
+        {
+            ERROR (CHOLMOD_INVALID, "mismatched dimensions") ;
+            return (NULL) ;
+        }
+    }
+    else if (method == SPQR_XQT || method == SPQR_XQ)
+    {
+        // rows of H and columns of X must be the same
+        if (mh != n)
+        {
+            ERROR (CHOLMOD_INVALID, "mismatched dimensions") ;
+            return (NULL) ;
+        }
+    }
+    else
+    {
+        ERROR (CHOLMOD_INVALID, "invalid method") ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate result Y
+    // -------------------------------------------------------------------------
+
+    Ydense = cholmod_l_allocate_dense (m, n, m, xtype, cc) ;
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        return (NULL) ;
+    }
+    Y = (Entry *) Ydense->x ;
+
+    if (m == 0 || n == 0)
+    {
+        // nothing to do
+        return (Ydense) ;    
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate workspace
+    // -------------------------------------------------------------------------
+
+    Z = NULL ;
+    zsize = m*n ;
+    if (method == SPQR_QX || method ==  SPQR_XQT)
+    {
+        // Z is needed only for methods SPQR_QX and SPQR_XQT
+        Z = (Entry *) cholmod_l_malloc (zsize, sizeof (Entry), cc) ;
+    }
+
+    hchunk = MIN (HCHUNK_DENSE, nh) ;
+    ok = spqr_happly_work (method, m, n, nh, Hp, hchunk, &vmax, &vsize, &csize);
+
+    ASSERT (vmax <= mh) ;
+
+    wisize = mh + vmax ;
+    Wi = (Long *) cholmod_l_malloc (wisize, sizeof (Long), cc) ;
+    Wmap = Wi + vmax ;              // Wmap is of size mh, Wi of size vmax
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory; free workspace and result Y
+        cholmod_l_free_dense (&Ydense, cc) ;
+        cholmod_l_free (zsize,  sizeof (Entry), Z,  cc) ;
+        cholmod_l_free (wisize, sizeof (Long), Wi, cc) ;
+        return (NULL) ;
+    }
+
+    if (method == SPQR_QX || method ==  SPQR_XQT)
+    {
+        // Z = X
+        Z1 = Z ;
+        X1 = X ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (i = 0 ; i < m ; i++)
+            {
+                Z1 [i] = X1 [i] ;
+            }
+            X1 += ldx ;
+            Z1 += m ;
+        }
+    }
+
+    for (i = 0 ; i < mh ; i++)
+    {
+        Wmap [i] = EMPTY ;
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate O(hchunk) workspace
+    // -------------------------------------------------------------------------
+
+    // cvsize = csize + vsize ;
+    cvsize = spqr_add (csize, vsize, &ok) ;
+    CV = NULL ;
+
+    if (ok)
+    {
+        CV = (Entry *) cholmod_l_malloc (cvsize, sizeof (Entry), cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // punt if out of memory
+    // -------------------------------------------------------------------------
+
+    if (!ok || cc->status < CHOLMOD_OK)
+    {
+        // PUNT: out of memory; try again with hchunk = 1
+        cc->status = CHOLMOD_OK ;
+        ok = TRUE ;
+        hchunk = 1 ;
+        ok = spqr_happly_work (method, m, n, nh, Hp, hchunk,
+            &vmax, &vsize, &csize) ;
+        // note that vmax has changed, but wisize is left as-is
+        // cvsize = csize + vsize ;
+        cvsize = spqr_add (csize, vsize, &ok) ;
+        if (ok)
+        {
+            CV = (Entry *) cholmod_l_malloc (cvsize, sizeof (Entry), cc) ;
+        }
+        if (!ok || cc->status < CHOLMOD_OK)
+        {
+            // out of memory (or problem too large); free workspace and result Y
+            cholmod_l_free_dense (&Ydense, cc) ;
+            cholmod_l_free (zsize,  sizeof (Entry), Z,  cc) ;
+            cholmod_l_free (wisize, sizeof (Long), Wi, cc) ;
+            ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+            return (NULL) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // split up workspace
+    // -------------------------------------------------------------------------
+
+    C = CV ;            // size csize
+    V = C + csize ;     // size vsize
+
+    // -------------------------------------------------------------------------
+    // Y = Q'*X, Q*X, X*Q, or X*Q'
+    // -------------------------------------------------------------------------
+
+    PR (("Method %d m %ld n %ld X %p Y %p P %p\n", method, m, n, X, Y, HPinv)) ;
+    PR (("Hp %p Hi %p Hx %p\n", Hp, Hi, Hx)) ;
+    ASSERT (IMPLIES ((nh > 0), Hp != NULL && Hi != NULL && Hx != NULL)) ;
+    Tau = (Entry *) HTau->x ;
+    PR (("Tau %p\n", Tau)) ;
+    ASSERT (Tau != NULL) ;
+
+    if (method == SPQR_QTX)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = Q'*X
+        // ---------------------------------------------------------------------
+
+        // Y (P,:) = X
+        X1 = X ;
+        Y1 = Y ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [HPinv ? HPinv [i] : i] = X1 [i] ;
+            }
+            X1 += ldx ;
+            Y1 += m ;
+        }
+
+        // apply H to Y
+        spqr_happly (method, m, n, nh, Hp, Hi, Hx, Tau, Y,
+            vmax, hchunk, Wi, Wmap, C, V, cc) ;
+
+    }
+    else if (method == SPQR_QX)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = Q*X
+        // ---------------------------------------------------------------------
+
+        // apply H to Z
+        spqr_happly (method, m, n, nh, Hp, Hi, Hx, Tau, Z,
+            vmax, hchunk, Wi, Wmap, C, V, cc) ;
+
+        // Y = Z (P,:)
+        Z1 = Z ;
+        Y1 = Y ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [i] = Z1 [HPinv ? HPinv [i] : i] ;
+            }
+            Z1 += m ;
+            Y1 += m ;
+        }
+
+    }
+    else if (method == SPQR_XQT)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = X*Q'
+        // ---------------------------------------------------------------------
+
+        // apply H to Z
+        spqr_happly (method, m, n, nh, Hp, Hi, Hx, Tau, Z,
+            vmax, hchunk, Wi, Wmap, C, V, cc) ;
+
+        // Y = Z (:,P)
+        Y1 = Y ;
+        for (k = 0 ; k < n ; k++)
+        {
+            ASSERT (IMPLIES (HPinv != NULL, HPinv [k] >= 0 && HPinv [k] < n)) ;
+            Z1 = Z + (HPinv ? HPinv [k] : k) * m ;  // m = leading dim. of Z
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [i] = Z1 [i] ;
+            }
+            Y1 += m ;
+        }
+
+    }
+    else if (method == SPQR_XQ)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = X*Q
+        // ---------------------------------------------------------------------
+
+        // Y (:,P) = X
+        X1 = X ;
+        for (k = 0 ; k < n ; k++)
+        {
+            ASSERT (IMPLIES (HPinv != NULL, HPinv [k] >= 0 && HPinv [k] < n)) ;
+            Y1 = Y + (HPinv ? HPinv [k] : k) * m ;  // m = leading dim. of Y
+            for (i = 0 ; i < m ; i++)
+            {
+                Y1 [i] = X1 [i] ;
+            }
+            X1 += ldx ;
+        }
+
+        // apply H to Y
+        spqr_happly (method, m, n, nh, Hp, Hi, Hx, Tau, Y,
+            vmax, hchunk, Wi, Wmap, C, V, cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // free workspace and return Y
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free (cvsize, sizeof (Entry), CV, cc) ;
+    cholmod_l_free (zsize,  sizeof (Entry), Z,  cc) ;
+    cholmod_l_free (wisize, sizeof (Long), Wi, cc) ;
+
+    if (CHECK_BLAS_INT && !cc->blas_ok)
+    {
+        ERROR (CHOLMOD_INVALID, "problem too large for the BLAS") ;
+        cholmod_l_free_dense (&Ydense, cc) ;
+        return (NULL) ;
+    }
+
+    return (Ydense) ;
+}
+
+
+// =============================================================================
+
+template cholmod_dense *SuiteSparseQR_qmult <double>
+(
+    // inputs, not modified
+    int method,             // 0,1,2,3
+    cholmod_sparse *H,      // either m-by-nh or n-by-nh
+    cholmod_dense *HTau,    // size 1-by-nh
+    Long *HPinv,            // size mh
+    cholmod_dense *Xdense,  // size m-by-n with leading dimension ldx
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template cholmod_dense *SuiteSparseQR_qmult <Complex>
+(
+    // inputs, not modified
+    int method,             // 0,1,2,3
+    cholmod_sparse *H,      // either m-by-nh or n-by-nh
+    cholmod_dense *HTau,    // size 1-by-nh
+    Long *HPinv,            // size mh
+    cholmod_dense *Xdense,  // size m-by-n with leading dimension ldx
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+
+// =============================================================================
+// === SuiteSparseQR_qmult (sparse) ============================================
+// =============================================================================
+
+// Applies Q in Householder form to a sparse matrix X>
+
+#define XCHUNK 4            // FUTURE: make a parameter
+#define HCHUNK_SPARSE 4     // FUTURE: make a parameter
+
+template <typename Entry> cholmod_sparse *SuiteSparseQR_qmult
+(
+    // inputs, not modified
+    int method,             // 0,1,2,3
+    cholmod_sparse *H,      // size m-by-nh or n-by-nh
+    cholmod_dense *HTau,    // size 1-by-nh
+    Long *HPinv,            // size mh, identity permutation if NULL
+    cholmod_sparse *Xsparse,
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *Ysparse ;
+    Entry *W, *W1, *Hx, *Xx, *C, *V, *CVW, *Tau ;
+    Long *Hp, *Hi, *Xp, *Xi, *Wi, *Wmap ;
+    Long i, k, ny, k1, xchunk, p, k2, m, n, nh, vmax, hchunk, vsize,
+        csize, cvwsize, wsize, wisize ;
+    int ok = TRUE ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    RETURN_IF_NULL_COMMON (NULL) ;
+    RETURN_IF_NULL (H, NULL) ;
+    RETURN_IF_NULL (HTau, NULL) ;
+    RETURN_IF_NULL (Xsparse, NULL) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    RETURN_IF_XTYPE_INVALID (H, NULL) ;
+    RETURN_IF_XTYPE_INVALID (HTau, NULL) ;
+    RETURN_IF_XTYPE_INVALID (Xsparse, NULL) ;
+    cc->status = CHOLMOD_OK ;
+
+    if (method == SPQR_QTX || method == SPQR_QX)
+    {
+        // rows of H and X must be the same
+        if (H->nrow != Xsparse->nrow)
+        {
+            ERROR (CHOLMOD_INVALID, "mismatched dimensions") ;
+            return (NULL) ;
+        }
+    }
+    else if (method == SPQR_XQT || method == SPQR_XQ)
+    {
+        // rows of H and columns of X must be the same
+        if (H->nrow != Xsparse->ncol)
+        {
+            ERROR (CHOLMOD_INVALID, "mismatched dimensions") ;
+            return (NULL) ;
+        }
+    }
+    else
+    {
+        ERROR (CHOLMOD_INVALID, "invalid method") ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // methods 2 or 3: Y = X*Q' = (Q*X')' or Y = X*Q = (Q'*X')'
+    // -------------------------------------------------------------------------
+
+    if (method == SPQR_XQT || method == SPQR_XQ)
+    {
+        cholmod_sparse *XT, *YT ;
+        XT = cholmod_l_transpose (Xsparse, 2, cc) ;
+        YT = SuiteSparseQR_qmult <Entry>
+            ((method == SPQR_XQT) ? SPQR_QX : SPQR_QTX, H, HTau, HPinv, XT, cc);
+        cholmod_l_free_sparse (&XT, cc) ;
+        Ysparse = cholmod_l_transpose (YT, 2, cc) ;
+        cholmod_l_free_sparse (&YT, cc) ;
+        return (Ysparse) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // get H and X
+    // -------------------------------------------------------------------------
+
+    Hp = (Long *) H->p ;
+    Hi = (Long *) H->i ;
+    Hx = (Entry *) H->x ;
+    m = H->nrow ;
+    nh = H->ncol ;
+
+    Xp = (Long *) Xsparse->p ;
+    Xi = (Long *) Xsparse->i ;
+    Xx = (Entry *) Xsparse->x ;
+    n = Xsparse->ncol ;
+
+    Tau = (Entry *) HTau->x ;
+
+    // -------------------------------------------------------------------------
+    // allocate Long workspace
+    // -------------------------------------------------------------------------
+
+    xchunk = MIN (XCHUNK, n) ;
+    hchunk = MIN (HCHUNK_SPARSE, nh) ;
+
+    ok = spqr_happly_work (method, m, xchunk, nh, Hp, hchunk,
+        &vmax, &vsize, &csize) ;
+
+    wisize = m + vmax ;
+    Wi = (Long *) cholmod_l_malloc (wisize, sizeof (Long), cc) ;
+    Wmap = Wi + vmax ;              // Wmap is of size m, Wi is of size vmax
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        return (NULL) ;
+    }
+
+    for (i = 0 ; i < m ; i++)
+    {
+        Wmap [i] = EMPTY ;
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate O(xchunk + hchunk) workspace
+    // -------------------------------------------------------------------------
+
+    // wsize = xchunk * m ;
+    wsize = spqr_mult (xchunk, m, &ok) ;
+
+    // cvwsize = wsize + csize + vsize ;
+    cvwsize = spqr_add (wsize, csize, &ok) ;
+    cvwsize = spqr_add (cvwsize, vsize, &ok) ;
+    CVW = NULL ;
+
+    if (ok)
+    {
+        CVW = (Entry *) cholmod_l_malloc (cvwsize, sizeof (Entry), cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // punt if out of memory
+    // -------------------------------------------------------------------------
+
+    if (!ok || cc->status < CHOLMOD_OK)
+    {
+        // PUNT: out of memory; try again with xchunk = 1 and hchunk = 1
+        cc->status = CHOLMOD_OK ;
+        xchunk = 1 ;
+        hchunk = 1 ;
+        ok = spqr_happly_work (method, m, xchunk, nh, Hp, hchunk,
+            &vmax, &vsize, &csize) ;
+        wsize = m ;
+
+        // cvwsize = wsize + csize + vsize ;
+        cvwsize = spqr_add (wsize, csize, &ok) ;
+        cvwsize = spqr_add (cvwsize, vsize, &ok) ;
+        if (ok)
+        {
+            CVW = (Entry *) cholmod_l_malloc (cvwsize, sizeof (Entry), cc) ;
+        }
+        if (!ok || cc->status < CHOLMOD_OK)
+        {
+            // still out of memory (or problem too large)
+            ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+            cholmod_l_free (wisize, sizeof (Long), Wi, cc) ;
+            return (NULL) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // split up workspace
+    // -------------------------------------------------------------------------
+
+    C = CVW ;                       // C is of size csize Entry's
+    V = C + csize ;                 // V is of size vsize Entry's
+    W = V + vsize ;                 // W is of size wsize Entry's
+
+    // -------------------------------------------------------------------------
+    // allocate result Y
+    // -------------------------------------------------------------------------
+
+    // Y is a sparse matrix of size m-ny-n with space for m+1 entries
+    Ysparse = cholmod_l_allocate_sparse (m, n, m+1, TRUE, TRUE, 0, xtype, cc) ;
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        cholmod_l_free (cvwsize, sizeof (Entry), CVW, cc) ;
+        cholmod_l_free (wisize,  sizeof (Long),  Wi,  cc) ;
+        return (NULL) ;
+    }
+    ny = 0 ;
+
+    // -------------------------------------------------------------------------
+    // methods 0 or 1: Y = Q'*X or Q*X
+    // -------------------------------------------------------------------------
+
+    if (method == SPQR_QTX)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = Q'*X
+        // ---------------------------------------------------------------------
+
+        // apply in blocks of xchunk columns each
+        for (k1 = 0 ; k1 < n ; k1 += xchunk)
+        {
+            // scatter W:  W (P,0:3) = X (:, k:k+3)
+            W1 = W ;
+            k2 = MIN (k1+xchunk, n) ;
+            for (k = k1 ; k < k2 ; k++)
+            {
+                // W1 = 0
+                for (i = 0 ; i < m ; i++)
+                {
+                    W1 [i] = 0 ;
+                }
+                for (p = Xp [k] ; p < Xp [k+1] ; p++)
+                {
+                    i = Xi [p] ;
+                    W1 [HPinv ? HPinv [i] : i] = Xx [p] ;
+                }
+                W1 += m ;
+            }
+
+            // apply H to W
+
+            spqr_happly (method, m, k2-k1, nh, Hp, Hi, Hx, Tau, W,
+                vmax, hchunk, Wi, Wmap, C, V, cc) ;
+
+            // append W onto Y
+            W1 = W ;
+            for (k = k1 ; k < k2 ; k++)
+            {
+                spqr_append (W1, NULL, Ysparse, &ny, cc) ;
+
+                if (cc->status < CHOLMOD_OK)
+                {
+                    // out of memory
+                    cholmod_l_free_sparse (&Ysparse, cc) ;
+                    cholmod_l_free (cvwsize, sizeof (Entry), CVW, cc) ;
+                    cholmod_l_free (wisize,  sizeof (Long),  Wi,  cc) ;
+                    return (NULL) ;
+                }
+
+                W1 += m ;
+            }
+        }
+
+    }
+    else // if (method == SPQR_QX)
+    {
+
+        // ---------------------------------------------------------------------
+        // Y = Q*X
+        // ---------------------------------------------------------------------
+
+        // apply in blocks of xchunk columns each
+        for (k1 = 0 ; k1 < n ; k1 += xchunk)
+        {
+            // scatter W:  W (:,0:3) = X (:, k:k+3)
+            W1 = W ;
+            k2 = MIN (k1+xchunk, n) ;
+            for (k = k1 ; k < k2 ; k++)
+            {
+                // W1 = 0
+                for (i = 0 ; i < m ; i++)
+                {
+                    W1 [i] = 0 ;
+                }
+                for (p = Xp [k] ; p < Xp [k+1] ; p++)
+                {
+                    i = Xi [p] ;
+                    W1 [i] = Xx [p] ;
+                }
+                W1 += m ;
+            }
+
+            // apply H to W
+            spqr_happly (method, m, k2-k1, nh, Hp, Hi, Hx, Tau, W,
+                vmax, hchunk, Wi, Wmap, C, V, cc) ;
+
+            // append W (P,:) onto Y
+            W1 = W ;
+            for (k = k1 ; k < k2 ; k++)
+            {
+                spqr_append (W1, HPinv, Ysparse, &ny, cc) ;
+                if (cc->status < CHOLMOD_OK)
+                {
+                    // out of memory
+                    cholmod_l_free_sparse (&Ysparse, cc) ;
+                    cholmod_l_free (cvwsize, sizeof (Entry), CVW, cc) ;
+                    cholmod_l_free (wisize,  sizeof (Long),  Wi,  cc) ;
+                    return (NULL) ;
+                }
+                W1 += m ;
+            }
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // free workspace and reduce Y in size so that nnz (Y) == nzmax (Y)
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free (cvwsize, sizeof (Entry), CVW, cc) ;
+    cholmod_l_free (wisize,  sizeof (Long),  Wi,  cc) ;
+    cholmod_l_reallocate_sparse (cholmod_l_nnz (Ysparse,cc), Ysparse, cc) ;
+
+    if (CHECK_BLAS_INT && !cc->blas_ok)
+    {
+        ERROR (CHOLMOD_INVALID, "problem too large for the BLAS") ;
+        cholmod_l_free_sparse (&Ysparse, cc) ;
+        return (NULL) ;
+    }
+
+    return (Ysparse) ;
+}
+
+
+// =============================================================================
+
+template cholmod_sparse *SuiteSparseQR_qmult <double>
+(
+    // inputs, not modified
+    int method,                 // 0,1,2,3
+    cholmod_sparse *H,          // size m-by-nh or n-by-nh
+    cholmod_dense *HTau,        // size 1-by-nh
+    Long *HPinv,                // size mh
+    cholmod_sparse *Xsparse,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template cholmod_sparse *SuiteSparseQR_qmult <Complex>
+(
+    // inputs, not modified
+    int method,                 // 0,1,2,3
+    cholmod_sparse *H,          // size m-by-nh or n-by-nh
+    cholmod_dense *HTau,        // size 1-by-nh
+    Long *HPinv,                // size mh
+    cholmod_sparse *Xsparse,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_1colamd.cpp b/SPQR/Source/spqr_1colamd.cpp
new file mode 100644
index 0000000..9d9d7eb
--- /dev/null
+++ b/SPQR/Source/spqr_1colamd.cpp
@@ -0,0 +1,811 @@
+// =============================================================================
+// === spqr_1colamd ============================================================
+// =============================================================================
+
+//  Find column singletons, with column permutations allowed.  After column
+//  singletons are found (and ordered first in Q1fill), the remaining columns
+//  are optionally permuted via COLAMD or CHOLMOD's internal ordering method(s).
+//  This function handles the natural, COLAMD, and CHOLMOD ordering options
+//  (not the fixed ordering option).
+//
+//  Returns a sparse matrix Y with column pointers allocated and initialized,
+//  but no values.  Y has n-n1cols+bncols columns, and m-n1rows rows.  B is
+//  empty and no singletons are found, Y is NULL.
+
+
+#include "spqr.hpp"
+
+template <typename Entry> int spqr_1colamd  // TRUE if OK, FALSE otherwise
+(
+    // inputs, not modified
+    int ordering,           // all available, except 0:fixed and 3:given
+                            // treated as 1:natural
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // outputs, neither allocated nor defined on input
+
+    Long **p_Q1fill,        // size n+bncols, fill-reducing
+                            // or natural ordering
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Long *Q1fill, *Degree, *Qrows, *W, *Winv, *ATp, *ATj, *R1p, *P1inv, *Yp,
+        *Ap, *Ai, *Work ;
+    Entry *Ax ;
+    Long p, d, j, i, k, n1cols, n1rows, row, pend, n2rows, n2cols = EMPTY,
+        nz2, kk, p2, col2, ynz, fill_reducing_ordering, m, n, xtype, worksize ;
+    cholmod_sparse *AT, *Y ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    xtype = spqr_type <Entry> ( ) ;
+
+    m = A->nrow ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    Ai = (Long *) A->i ;
+    Ax = (Entry *) A->x ;
+
+    // set outputs to NULL in case of early return
+    *p_Q1fill = NULL ;
+    *p_R1p = NULL ;
+    *p_P1inv = NULL ;
+    *p_Y = NULL ;
+    *p_n1cols = EMPTY ;
+    *p_n1rows = EMPTY ;
+
+    // -------------------------------------------------------------------------
+    // allocate result Q1fill (Y, R1p, P1inv allocated later)
+    // -------------------------------------------------------------------------
+
+    Q1fill = (Long *) cholmod_l_malloc (n+bncols, sizeof (Long), cc) ;
+
+    // -------------------------------------------------------------------------
+    // allocate workspace
+    // -------------------------------------------------------------------------
+
+    fill_reducing_ordering = !
+        ((ordering == SPQR_ORDERING_FIXED) ||
+         (ordering == SPQR_ORDERING_GIVEN) ||
+         (ordering == SPQR_ORDERING_NATURAL)) ;
+
+    worksize = ((fill_reducing_ordering) ? 3:2) * n ;
+
+    Work = (Long *) cholmod_l_malloc (worksize, sizeof (Long), cc) ;
+    Degree = Work ;         // size n
+    Qrows  = Work + n ;     // size n
+    Winv   = Qrows ;        // Winv and Qrows not needed at the same time
+    W      = Qrows + n ;    // size n if fill-reducing ordering, else size 0
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory; free everything and return
+        cholmod_l_free (worksize, sizeof (Long), Work, cc) ;
+        cholmod_l_free (n+bncols, sizeof (Long), Q1fill, cc) ;
+        return (FALSE) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // initialze queue with empty columns, and columns with just one entry
+    // -------------------------------------------------------------------------
+
+    n1cols = 0 ;
+    n1rows = 0 ;
+
+    for (j = 0 ; j < n ; j++)
+    {
+        p = Ap [j] ;
+        d = Ap [j+1] - p ;
+        if (d == 0)
+        {
+            // j is a dead column singleton
+            PR (("initial dead %ld\n", j)) ;
+            Q1fill [n1cols] = j ;
+            Qrows [n1cols] = EMPTY ;
+            n1cols++ ;
+            Degree [j] = EMPTY ;
+        }
+        else if (d == 1 && spqr_abs (Ax [p], cc) > tol)
+        {
+            // j is a column singleton, live or dead
+            PR (("initial live %ld %ld\n", j, Ai [p])) ;
+            Q1fill [n1cols] = j ;
+            Qrows [n1cols] = Ai [p] ;       // this might be a duplicate
+            n1cols++ ;
+            Degree [j] = EMPTY ;
+        }
+        else
+        {
+            // j has degree > 1, it is not (yet) a singleton
+            Degree [j] = d ;
+        }
+    }
+
+    // Degree [j] = EMPTY if j is in the singleton queue, or the Degree [j] > 1
+    // is the degree of column j otherwise
+
+    // -------------------------------------------------------------------------
+    // create AT = spones (A')
+    // -------------------------------------------------------------------------
+
+    AT = cholmod_l_transpose (A, 0, cc) ;       // [
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory; free everything and return
+        cholmod_l_free (worksize, sizeof (Long), Work, cc) ;
+        cholmod_l_free (n+bncols, sizeof (Long), Q1fill, cc) ;
+        return (FALSE) ;
+    }
+
+    ATp = (Long *) AT->p ;
+    ATj = (Long *) AT->i ;
+
+    // -------------------------------------------------------------------------
+    // remove column singletons via breadth-first-search
+    // -------------------------------------------------------------------------
+
+    for (k = 0 ; k < n1cols ; k++)
+    {
+
+        // ---------------------------------------------------------------------
+        // get a new singleton from the queue
+        // ---------------------------------------------------------------------
+
+        // Long col = Q1fill [k] ;   unused variable, for debugging
+        #define col (Q1fill [k])
+
+        row = Qrows [k] ;
+        PR (("\n---- singleton col %ld row %ld\n", col, row)) ;
+        ASSERT (Degree [col] == EMPTY) ;
+
+        if (row == EMPTY || ATp [row] < 0)
+        {
+
+            // -----------------------------------------------------------------
+            // col is a dead column singleton; remove duplicate row index
+            // -----------------------------------------------------------------
+
+            Qrows [k] = EMPTY ;
+            row = EMPTY ;
+            PR (("dead: %ld\n", col)) ;
+
+        }
+        else
+        {
+
+            // -----------------------------------------------------------------
+            // col is a live col singleton; remove its row from matrix
+            // -----------------------------------------------------------------
+
+            n1rows++ ;
+            p = ATp [row] ;
+            ATp [row] = FLIP (p) ;          // flag the singleton row
+            pend = UNFLIP (ATp [row+1]) ;
+            PR (("live: %ld row %ld\n", col, row)) ;
+            for ( ; p < pend ; p++)
+            {
+                // look for new column singletons after row is removed
+                j = ATj [p] ;
+                d = Degree [j] ;
+                if (d == EMPTY)
+                {
+                    // j is already in the singleton queue
+                    continue ;
+                }
+                ASSERT (d >= 1) ;
+                ASSERT2 (spqrDebug_listcount (j, Q1fill, n1cols, 0, cc) == 0) ;
+                d-- ;
+                Degree [j] = d ;
+                if (d == 0)
+                {
+                    // a new dead col singleton
+                    PR (("newly dead %ld\n", j)) ;
+                    Q1fill [n1cols] = j ;
+                    Qrows [n1cols] = EMPTY ;
+                    n1cols++ ;
+                    Degree [j] = EMPTY ;
+                }
+                else if (d == 1)
+                {
+                    // a new live col singleton; find its single live row
+                    for (p2 = Ap [j] ; p2 < Ap [j+1] ; p2++)
+                    {
+                        i = Ai [p2] ;
+                        if (ATp [i] >= 0 && spqr_abs (Ax [p2], cc) > tol)
+                        {
+                            // i might appear in Qrows [k+1:n1cols-1]
+                            PR (("newly live %ld\n", j)) ;
+                            ASSERT2 (spqrDebug_listcount (i,Qrows,k+1,1,cc)==0);
+                            Q1fill [n1cols] = j ;
+                            Qrows [n1cols] = i ;
+                            n1cols++ ;
+                            Degree [j] = EMPTY ;
+                            break ;
+                        }
+                    }
+                }
+            }
+        }
+        // Q1fill [0:k] and Qrows [0:k] have no duplicates
+        ASSERT2 (spqrDebug_listcount (col, Q1fill, n1cols, 0, cc) == 1) ; 
+        ASSERT2 (IMPLIES (row >= 0, spqrDebug_listcount 
+            (row, Qrows, k+1, 1, cc) == 1)) ; 
+
+        // used for debugging only
+        #undef col
+    }
+
+    // -------------------------------------------------------------------------
+    // Degree flags the column singletons, ATp flags their rows
+    // -------------------------------------------------------------------------
+
+#ifndef NDEBUG
+    k = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+        PR (("j %ld Degree[j] %ld\n", j, Degree [j])) ;
+        if (Degree [j] > 0) k++ ;        // j is not a column singleton
+    }
+    PR (("k %ld n %ld n1cols %ld\n", k, n, n1cols)) ;
+    ASSERT (k == n - n1cols) ;
+    for (k = 0 ; k < n1cols ; k++)
+    {
+        Long col = Q1fill [k] ;
+        ASSERT (Degree [col] <= 0) ;
+    }
+    k = 0 ;
+    for (i = 0 ; i < m ; i++)
+    {
+        if (ATp [i] >= 0) k++ ;     // i is not a row of a col singleton
+    }
+    ASSERT (k == m - n1rows) ;
+    for (k = 0 ; k < n1cols ; k++)
+    {
+        row = Qrows [k] ;
+        ASSERT (IMPLIES (row != EMPTY, ATp [row] < 0)) ;
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // find the row ordering
+    // -------------------------------------------------------------------------
+
+    if (n1cols == 0)
+    {
+
+        // ---------------------------------------------------------------------
+        // no singletons in the matrix; no R1 matrix, no P1inv permutation
+        // ---------------------------------------------------------------------
+
+        ASSERT (n1rows == 0) ;
+        R1p = NULL ;
+        P1inv = NULL ;
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // construct the row singleton permutation
+        // ---------------------------------------------------------------------
+
+        // allocate result arrays R1p and P1inv
+        R1p   = (Long *) cholmod_l_malloc (n1rows+1, sizeof (Long), cc) ;
+        P1inv = (Long *) cholmod_l_malloc (m,        sizeof (Long), cc) ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory; free everything and return
+            cholmod_l_free_sparse (&AT, cc) ;
+            cholmod_l_free (worksize, sizeof (Long), Work, cc) ;
+            cholmod_l_free (n+bncols, sizeof (Long), Q1fill, cc) ;
+            cholmod_l_free (n1rows+1, sizeof (Long), R1p, cc) ;
+            cholmod_l_free (m,        sizeof (Long), P1inv, cc) ;
+            return (FALSE) ;
+        }
+
+#ifndef NDEBUG
+        for (i = 0 ; i < m ; i++) P1inv [i] = EMPTY ;
+#endif
+
+        kk = 0 ;
+        for (k = 0 ; k < n1cols ; k++)
+        {
+            i = Qrows [k] ;
+            PR (("singleton col %ld row %ld\n", Q1fill [k], i)) ;
+            if (i != EMPTY)
+            {
+                // row i is the kk-th singleton row
+                ASSERT (ATp [i] < 0) ;
+                ASSERT (P1inv [i] == EMPTY) ;
+                P1inv [i] = kk ;
+                // also find # of entries in row kk of R1
+                R1p [kk] = UNFLIP (ATp [i+1]) - UNFLIP (ATp [i]) ;
+                kk++ ;
+            }
+        }
+        ASSERT (kk == n1rows) ;
+        for (i = 0 ; i < m ; i++)
+        {
+            if (ATp [i] >= 0)
+            {
+                // row i is not a singleton row
+                ASSERT (P1inv [i] == EMPTY) ;
+                P1inv [i] = kk ;
+                kk++ ;
+            }
+        }
+        ASSERT (kk == m) ;
+
+    }
+
+    // Qrows is no longer needed.
+
+    // -------------------------------------------------------------------------
+    // complete the column ordering
+    // -------------------------------------------------------------------------
+
+    if (!fill_reducing_ordering)
+    {
+
+        // ---------------------------------------------------------------------
+        // natural ordering
+        // ---------------------------------------------------------------------
+
+        if (n1cols == 0)
+        {
+
+            // no singletons, so natural ordering is 0:n-1 for now
+            for (k = 0 ; k < n ; k++)
+            {
+                Q1fill [k] = k ;
+            }
+
+        }
+        else
+        {
+
+            // singleton columns appear first, then non column singletons
+            k = n1cols ;
+            for (j = 0 ; j < n ; j++)
+            {
+                if (Degree [j] > 0)
+                {
+                    // column j is not a column singleton
+                    Q1fill [k++] = j ;
+                }
+            }
+            ASSERT (k == n) ;
+        }
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // fill-reducing ordering of pruned submatrix
+        // ---------------------------------------------------------------------
+
+        if (n1cols == 0)
+        {
+
+            // -----------------------------------------------------------------
+            // no singletons found; do fill-reducing on entire matrix
+            // -----------------------------------------------------------------
+
+            n2cols = n ;
+            n2rows = m ;
+
+        }
+        else
+        {
+
+            // -----------------------------------------------------------------
+            // create the pruned matrix for fill-reducing by removing singletons
+            // -----------------------------------------------------------------
+
+            // find the mapping of original columns to pruned columns
+            n2cols = 0 ;
+            for (j = 0 ; j < n ; j++)
+            {
+                if (Degree [j] > 0)
+                {
+                    // column j is not a column singleton
+                    W [j] = n2cols++ ;
+                    PR (("W [%ld] = %ld\n", j, W [j])) ;
+                }
+                else
+                {
+                    // column j is a column singleton
+                    W [j] = EMPTY ;
+                    PR (("W [%ld] = %ld (j is col singleton)\n", j, W [j])) ;
+                }
+            }
+            ASSERT (n2cols == n - n1cols) ;
+
+            // W is now a mapping of the original columns to the columns in the
+            // pruned matrix.  W [col] == EMPTY if col is a column singleton.
+            // Otherwise col2 = W [j] is a column of the pruned matrix.
+
+            // -----------------------------------------------------------------
+            // delete row and column singletons from A'
+            // -----------------------------------------------------------------
+
+            // compact A' by removing row and column singletons
+            nz2 = 0 ;
+            n2rows = 0 ;
+            for (i = 0 ; i < m ; i++)
+            {
+                p = ATp [i] ;
+                if (p >= 0)
+                {
+                    // row i is not a row of a column singleton
+                    ATp [n2rows++] = nz2 ;
+                    pend = UNFLIP (ATp [i+1]) ;
+                    for (p = ATp [i] ; p < pend ; p++)
+                    {
+                        j = ATj [p] ;
+                        ASSERT (W [j] >= 0 && W [j] < n-n1cols) ;
+                        ATj [nz2++] = W [j] ;
+                    }
+                }
+            }
+            ATp [n2rows] = nz2 ;
+            ASSERT (n2rows == m - n1rows) ;
+        }
+
+        // ---------------------------------------------------------------------
+        // fill-reducing ordering of the transpose of the pruned A' matrix
+        // ---------------------------------------------------------------------
+
+        PR (("n1cols %ld n1rows %ld n2cols %ld n2rows %ld\n",
+            n1cols, n1rows, n2cols, n2rows)) ;
+        ASSERT ((Long) AT->nrow == n) ;
+        ASSERT ((Long) AT->ncol == m) ;
+
+        AT->nrow = n2cols ;
+        AT->ncol = n2rows ;
+
+        // save the current CHOLMOD settings
+        Long save [6] ;
+        save [0] = cc->supernodal ;
+        save [1] = cc->nmethods ;
+        save [2] = cc->postorder ;
+        save [3] = cc->method [0].ordering ;
+        save [4] = cc->method [1].ordering ;
+        save [5] = cc->method [2].ordering ;
+
+        // follow the ordering with a postordering of the column etree
+        cc->postorder = TRUE ;
+
+        // 8:best: best of COLAMD(A), AMD(A'A), and METIS (if available)
+        if (ordering == SPQR_ORDERING_BEST)
+        {
+            ordering = SPQR_ORDERING_CHOLMOD ;
+            cc->nmethods = 2 ;
+            cc->method [0].ordering = CHOLMOD_COLAMD ;
+            cc->method [1].ordering = CHOLMOD_AMD ;
+#ifndef NPARTITION
+            cc->nmethods = 3 ;
+            cc->method [2].ordering = CHOLMOD_METIS ;
+#endif
+        }
+
+        // 9:bestamd: best of COLAMD(A) and AMD(A'A)
+        if (ordering == SPQR_ORDERING_BESTAMD)
+        {
+            // if METIS is not installed, this option is the same as 8:best
+            ordering = SPQR_ORDERING_CHOLMOD ;
+            cc->nmethods = 2 ;
+            cc->method [0].ordering = CHOLMOD_COLAMD ;
+            cc->method [1].ordering = CHOLMOD_AMD ;
+        }
+
+#ifdef NPARTITION
+        if (ordering == SPQR_ORDERING_METIS)
+        {
+            // METIS not installed; use default ordering
+            ordering = SPQR_ORDERING_DEFAULT ;
+        }
+#endif
+
+        if (ordering == SPQR_ORDERING_DEFAULT)
+        {
+            // Version 1.2.0:  just use COLAMD
+            ordering = SPQR_ORDERING_COLAMD ;
+
+#if 0
+            // Version 1.1.2 and earlier:
+            if (n2rows <= 2*n2cols)
+            {
+                // just use COLAMD; do not try AMD or METIS
+                ordering = SPQR_ORDERING_COLAMD ;
+            }
+            else
+            {
+#ifndef NPARTITION
+                // use CHOLMOD's default ordering: try AMD and then METIS
+                // if AMD gives high fill-in, and take the best ordering found
+                ordering = SPQR_ORDERING_CHOLMOD ;
+                cc->nmethods = 0 ;
+#else
+                // METIS is not installed, so just use AMD
+                ordering = SPQR_ORDERING_AMD ;
+#endif
+            }
+#endif
+
+        }
+
+        if (ordering == SPQR_ORDERING_AMD)
+        {
+            // use CHOLMOD's interface to AMD to order A'*A
+            cholmod_l_amd (AT, NULL, 0, (Long *) (Q1fill + n1cols), cc) ;
+        }
+#ifndef NPARTITION
+        else if (ordering == SPQR_ORDERING_METIS)
+        {
+            // use CHOLMOD's interface to METIS to order A'*A (if installed)
+            cholmod_l_metis (AT, NULL, 0, TRUE,
+                (Long *) (Q1fill + n1cols), cc) ;
+        }
+#endif
+        else if (ordering == SPQR_ORDERING_CHOLMOD)
+        {
+            // use CHOLMOD's internal ordering (defined by cc) to order AT
+            PR (("Using CHOLMOD, nmethods %d\n", cc->nmethods)) ;
+            cc->supernodal = CHOLMOD_SIMPLICIAL ;
+            cc->postorder = TRUE ;
+            cholmod_factor *Sc ;
+            Sc = cholmod_l_analyze_p2 (FALSE, AT, NULL, NULL, 0, cc) ;
+            if (Sc != NULL)
+            {
+                // copy perm from Sc->Perm [0:n2cols-1] to Q1fill (n1cols:n)
+                Long *Sc_perm = (Long *) Sc->Perm ;
+                for (k = 0 ; k < n2cols ; k++)
+                {
+                    Q1fill [k + n1cols] = Sc_perm [k] ;
+                }
+                // CHOLMOD selected an ordering; determine the ordering used
+                switch (Sc->ordering)
+                {
+                    case CHOLMOD_AMD:    ordering = SPQR_ORDERING_AMD    ;break;
+                    case CHOLMOD_COLAMD: ordering = SPQR_ORDERING_COLAMD ;break;
+                    case CHOLMOD_METIS:  ordering = SPQR_ORDERING_METIS  ;break;
+                }
+            }
+            cholmod_l_free_factor (&Sc, cc) ;
+            PR (("CHOLMOD used method %d : ordering: %d\n", cc->selected,
+                cc->method [cc->selected].ordering)) ;
+        }
+        else // SPQR_ORDERING_DEFAULT or SPQR_ORDERING_COLAMD
+        {
+            // use CHOLMOD's interface to COLAMD to order AT
+            ordering = SPQR_ORDERING_COLAMD ;
+            cholmod_l_colamd (AT, NULL, 0, TRUE,
+                (Long *) (Q1fill + n1cols), cc) ;
+        }
+
+        cc->SPQR_istat [7] = ordering ;
+
+        // restore the CHOLMOD settings
+        cc->supernodal              = save [0] ;
+        cc->nmethods                = save [1] ;
+        cc->postorder               = save [2] ;
+        cc->method [0].ordering     = save [3] ;
+        cc->method [1].ordering     = save [4] ;
+        cc->method [2].ordering     = save [5] ;
+
+        AT->nrow = n ;
+        AT->ncol = m ;
+    }
+
+    // -------------------------------------------------------------------------
+    // free AT
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free_sparse (&AT, cc) ;   // ]
+
+    // -------------------------------------------------------------------------
+    // check if the method succeeded
+    // -------------------------------------------------------------------------
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory; free everything and return
+        cholmod_l_free (worksize, sizeof (Long), Work, cc) ;
+        cholmod_l_free (n+bncols, sizeof (Long), Q1fill, cc) ;
+        cholmod_l_free (n1rows+1, sizeof (Long), R1p, cc) ;
+        cholmod_l_free (m,        sizeof (Long), P1inv, cc) ;
+        return (FALSE) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // map the fill-reducing ordering ordering back to A
+    // -------------------------------------------------------------------------
+
+    if (n1cols > 0 && fill_reducing_ordering)
+    {
+        // Winv is workspace of size n2cols <= n
+
+        #ifndef NDEBUG
+        for (j = 0 ; j < n2cols ; j++) Winv [j] = EMPTY ;
+        #endif
+
+        for (j = 0 ; j < n ; j++)
+        {
+            // j is a column of A.  col2 = W [j] is either EMPTY, or it is 
+            // the corresponding column of the pruned matrix
+            col2 = W [j] ;
+            if (col2 != EMPTY)
+            {
+                ASSERT (col2 >= 0 && col2 < n2cols) ;
+                Winv [col2] = j ;
+            }
+        }
+
+        for (k = n1cols ; k < n ; k++)
+        {
+            // col2 is a column of the pruned matrix
+            col2 = Q1fill [k] ;
+            // j is the corresonding column of the A matrix
+            j = Winv [col2] ;
+            ASSERT (j >= 0 && j < n) ;
+            Q1fill [k] = j ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // identity permutation of the columns of B
+    // -------------------------------------------------------------------------
+
+    for (k = n ; k < n+bncols ; k++)
+    {
+        // tack on the identity permutation for columns of B
+        Q1fill [k] = k ;
+    }
+
+    // -------------------------------------------------------------------------
+    // find column pointers for Y = [A2 B2]; columns of A2
+    // -------------------------------------------------------------------------
+
+    if (n1cols == 0 && bncols == 0)
+    {
+        // A will be factorized instead of Y
+        Y = NULL ;
+    }
+    else
+    {
+        // Y has no entries yet; nnz(Y) will be determined later
+        Y = cholmod_l_allocate_sparse (m-n1rows, n-n1cols+bncols, 0,
+            FALSE, TRUE, 0, xtype, cc) ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory; free everything and return
+            cholmod_l_free (worksize, sizeof (Long), Work, cc) ;
+            cholmod_l_free (n+bncols, sizeof (Long), Q1fill, cc) ;
+            cholmod_l_free (n1rows+1, sizeof (Long), R1p, cc) ;
+            cholmod_l_free (m,        sizeof (Long), P1inv, cc) ;
+            return (FALSE) ;
+        }
+
+        Yp = (Long *) Y->p ; 
+
+        ynz = 0 ;
+        PR (("1c wrapup: n1cols %ld n %ld\n", n1cols, n)) ;
+        for (k = n1cols ; k < n ; k++)
+        {
+            j = Q1fill [k] ;
+            d = Degree [j] ;
+            ASSERT (d >= 1 && d <= m) ;
+            Yp [k-n1cols] = ynz ;
+            ynz += d ;
+        }
+        Yp [n-n1cols] = ynz ;
+    }
+
+    // -------------------------------------------------------------------------
+    // free workspace and return results
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free (worksize, sizeof (Long), Work, cc) ;
+
+    *p_Q1fill = Q1fill ;
+    *p_R1p    = R1p ;
+    *p_P1inv  = P1inv ;
+    *p_Y      = Y ;
+    *p_n1cols = n1cols ;
+    *p_n1rows = n1rows ;
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+
+template int spqr_1colamd <double>
+(
+    // inputs, not modified
+    int ordering,           // all available, except 0:fixed and 3:given
+                            // treated as 1:natural
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // output arrays, neither allocated nor defined on input.
+
+    Long **p_Q1fill,        // size n+bncols, fill-reducing
+                            // or natural ordering
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template int spqr_1colamd <Complex>
+(
+    // inputs, not modified
+    int ordering,           // all available, except 0:fixed and 3:given
+                            // treated as 1:natural
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // output arrays, neither allocated nor defined on input.
+
+    Long **p_Q1fill,        // size n+bncols, fill-reducing
+                            // or natural ordering
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_1factor.cpp b/SPQR/Source/spqr_1factor.cpp
new file mode 100644
index 0000000..4d40f07
--- /dev/null
+++ b/SPQR/Source/spqr_1factor.cpp
@@ -0,0 +1,790 @@
+// =============================================================================
+// === spqr_1factor ============================================================
+// =============================================================================
+
+/* Compute the QR factorization of a sparse matrix, both symbolic and numeric.
+
+    This function exploits column singletons, and thus cannot be
+    split into symbolic and numeric phases.
+
+    Outline:
+
+        function [C,R,E,X,H] = sparseQR (A,B)
+        E = fill reducing ordering of A, with singletons coming first
+        S = A*E
+        Y = [S B] or [S2 B2]
+        QR factorization of Y, obtaining factor R, Householder vectors H,
+            and applying H to B2 to get C2
+        X = E*(R\C)
+
+        ordering options:
+            0 or 3: fixed
+            1: natural (only look for singletons)
+            2: colamd after finding singletons
+            4: CHOLMOD fter finding singletons
+            5: amd(A'*A) after finding singletons
+            6: metis(A'*A) after finding singletons
+            7: SuiteSparseQR default (selects COLAMD, AMD, or METIS)
+
+    First, the column singletons of the sparse matrix A are found.  If the
+    column singletons and their corresponding rows are permuted to the left and
+    top, respectively, of a matrix, and the matrix is not rank deficient, the
+    result looks like:
+
+        c x x x x x x x
+        . c x x x x x x
+        . . c x x x x x
+        . . . c x x x x
+        . . . . a a a a
+        . . . . a a a a
+        . . . . a a a a
+        . . . . a a a a
+        . . . . a a a a
+
+    where c denotes a column singleton j and its corresponding row i, x denotes
+    an entry in a singleton row, and a denotes the rest of the matrix.  No
+    column in the S2 submatrix (the "a" entries) has just one entry in it
+    unless that entry falls below tol.
+
+    A singleton entry c is not accepted if its magnitude falls below tol.  If
+    tol is negative, any entry present in the data structure of A is
+    acceptable, even an explicitly-stored zero entry).
+
+    If the matrix is structurally rank-deficient, then the permuted matrix can
+    look like the following, where in this case the 3rd column is "dead":
+
+        c x x x x x x x
+        . c x x x x x x
+        . . . c x x x x
+        . . . . a a a a
+        . . . . a a a a
+        . . . . a a a a
+        . . . . a a a a
+        . . . . a a a a
+        . . . . a a a a
+
+    After the column singletons are found, the remaining S2 matrix (and R12) is
+    ordered with a fill-reducing ordering, resulting in the ordering E.  The
+    columns of B are not permuted.
+
+    The matrix [A*E B] is split into a block 2-by-3 form:
+
+        R11 R12 B1
+        0   S2  B2
+
+    where R1 = [R11 R12] are the singleton rows of A, and [R11 ; 0] are the
+    singleton columns.  R1 is stored in row-oriented form (with sorted rows)
+    and Y = [S2 B2] is stored in column-oriented form (with sorted columns if
+    the input matrix A has sorted columns).  S2 contains no empty columns, and
+    any columns in S2 with just one entry have a 2-norm less than tol.  Note
+    that the rows of Y are permuted according to the singleton rows.
+*/
+
+#include "spqr.hpp"
+
+template <typename Entry> SuiteSparseQR_factorization <Entry> *spqr_1factor
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // only accept singletons above tol.  If tol <= -2,
+                            // then use the default tolerance
+    Long bncols,            // number of columns of B
+    int keepH,              // if TRUE, keep the Householder vectors
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    Long ldb,               // if dense, the leading dimension of B
+    Long *Bp,               // size bncols+1, column pointers of B
+    Long *Bi,               // size bnz = Bp [bncols], row indices of B
+    Entry *Bx,              // size bnz, numerical values of B
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+    SuiteSparseQR_factorization <Entry> *QR ;
+    Long *Yp, *Yi, *Q1fill, *R1p, *R1j, *P1inv, *Ap, *Ai ;
+    Entry *Yx, *R1x, *Ax ;
+    Long noY, anz, a2nz, r1nz, ynz, i, j, k, p, p2, bnz, py, n1rows,
+        n1cols, n2, Bsparse, d, iold, inew, m, n ;
+    cholmod_sparse *Y = NULL ;
+
+    double t0 = SuiteSparse_time ( ) ;
+    double t1, t2 ;
+
+    // -------------------------------------------------------------------------
+    // get inputs and allocate result
+    // -------------------------------------------------------------------------
+
+    m = A->nrow ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    Ai = (Long *) A->i ;
+    Ax = (Entry *) A->x ;
+
+    QR = (SuiteSparseQR_factorization <Entry> *)
+        cholmod_l_malloc (1, sizeof (SuiteSparseQR_factorization <Entry>), cc) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        return (NULL) ;
+    }
+
+    QR->QRsym = NULL ;
+    QR->QRnum = NULL ;
+
+    QR->R1p = NULL ;
+    QR->R1j = NULL ;
+    QR->R1x = NULL ;
+    QR->P1inv = NULL ;
+    QR->Q1fill = NULL ;
+    QR->Rmap = NULL ;
+    QR->RmapInv = NULL ;
+    QR->HP1inv = NULL ;
+
+    QR->narows = m ;
+    QR->nacols = n ;
+    QR->n1rows = 0 ;
+    QR->n1cols = 0 ;
+
+    QR->r1nz = 0 ;
+    r1nz = 0 ;
+
+    // B is an optional input.  It can be sparse or dense
+    Bsparse = (Bp != NULL && Bi != NULL) ;
+    if (Bx == NULL)
+    {
+        // B is not present; force bncols to be zero
+        bncols = 0 ;
+    }
+
+    QR->bncols = bncols ;
+
+    // -------------------------------------------------------------------------
+    // find the default tol, if requested
+    // -------------------------------------------------------------------------
+
+    if (tol <= SPQR_DEFAULT_TOL)
+    {
+        tol = spqr_tol <Entry> (A, cc) ; 
+    }
+    if (tol < 0)
+    {
+        // no rank detection will be performed
+        QR->allow_tol = FALSE ;
+        tol = EMPTY ;
+    }
+    else
+    {
+        QR->allow_tol = TRUE ;
+    }
+    QR->tol = tol ;
+
+    // -------------------------------------------------------------------------
+    // find singletons and construct column pointers for the A part of Y
+    // -------------------------------------------------------------------------
+
+    // These return R1p, P1inv, and Y; but they are all NULL if out of memory.
+    // Note that only Y->p is allocated (Y->i and Y->x are dummy placeholders
+    // of one Long and one Entry, each, actually).  The entries of Y are
+    // allocated later, below.
+
+    if (ordering == SPQR_ORDERING_GIVEN)
+    {
+        ordering = SPQR_ORDERING_FIXED ;
+    }
+
+    if (ordering == SPQR_ORDERING_FIXED)
+    {
+        // fixed ordering: find column singletons without permuting columns
+        Q1fill = NULL ;
+        spqr_1fixed <Entry> (tol, bncols, A,
+            &R1p, &P1inv, &Y, &n1cols, &n1rows, cc) ;
+    }
+    else
+    {
+        // natural or fill-reducing ordering: find column singletons with
+        // column permutations allowed, then permute the pruned submatrix with
+        // a fill-reducing ordering if ordering is not SPQR_ORDERING_NATURAL.
+        spqr_1colamd <Entry> (ordering, tol, bncols, A, &Q1fill,
+            &R1p, &P1inv, &Y, &n1cols, &n1rows, cc) ;
+        ordering = cc->SPQR_istat [7]  ;
+    }
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freefac (&QR, cc) ;
+        return (NULL) ;
+    }
+
+    QR->R1p = R1p ;
+    QR->P1inv = P1inv ;
+    QR->Q1fill = Q1fill ;
+    QR->n1rows = n1rows ;
+    QR->n1cols = n1cols ;
+
+    noY = (Y == NULL) ;                         // A will be factorized, not Y
+    ASSERT (noY == (n1cols == 0 && bncols == 0)) ;
+    Yp = noY ? NULL : (Long *) Y->p ;
+    anz = Ap [n] ;                              // nonzeros in A
+    a2nz = noY ? anz : Yp [n-n1cols] ;          // nonzeros in S2
+    n2 = n - n1cols ;                           // number of columns of S2
+
+    // Y is NULL, or of size (m-n1rows)-by-(n-n1cols+bncols)
+    ASSERT (IMPLIES (Y != NULL, ((Long) Y->nrow == m-n1rows))) ;
+    ASSERT (IMPLIES (Y != NULL, ((Long) Y->ncol == n-n1cols+bncols))) ;
+
+    // Y, if allocated, has no space for any entries yet
+    ynz = 0 ;
+
+    // -------------------------------------------------------------------------
+    // construct the column pointers for the B or B2 part of Y
+    // -------------------------------------------------------------------------
+
+    if (noY)
+    {
+
+        // A will be factorized instead of Y.  There is no B.  C or X can exist
+        // as empty matrices with rows but no columns.
+        // There are no singletons.
+        ASSERT (Yp == NULL) ;
+        ASSERT (R1p == NULL) ;
+        ASSERT (P1inv == NULL) ;
+        ASSERT (n1rows == 0) ;
+        ASSERT (n1cols == 0) ;
+        ASSERT (a2nz == Ap [n]) ;
+        ASSERT (bncols == 0) ;
+
+    }
+    else if (n1cols == 0)
+    {
+
+        // ---------------------------------------------------------------------
+        // construct the column pointers for the B part of Y = [S B]
+        // ---------------------------------------------------------------------
+
+        ASSERT (R1p == NULL) ;
+        ASSERT (P1inv == NULL) ;
+        ASSERT (n1rows == 0) ;
+        ASSERT (a2nz == Ap [n]) ;
+
+        ynz = a2nz ;
+        if (Bsparse)
+        {
+            // B is sparse
+            for (k = 0 ; k < bncols ; k++)
+            {
+                Yp [(n-n1cols)+k] = ynz ;
+                d = Bp [k+1] - Bp [k] ;
+                ynz += d ;
+            }
+        }
+        else
+        {
+            // B is dense
+            Entry *B1 = Bx ;
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // count the nonzero entries in column k of B
+                Yp [(n-n1cols)+k] = ynz ;
+                d = 0 ;
+                for (i = 0 ; i < m ; i++)
+                {
+                    if (B1 [i] != (Entry) 0)
+                    {
+                        d++ ;
+                    }
+                }
+                B1 += ldb ;
+                ynz += d ;
+            }
+        }
+        Yp [(n-n1cols)+bncols] = ynz ;
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // construct the column pointers for the B2 part of Y = [S2 B2]
+        // ---------------------------------------------------------------------
+
+        ynz = a2nz ;
+        if (Bsparse)
+        {
+            // B is sparse
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // count the nonzero entries in column k of B2
+                Yp [(n-n1cols)+k] = ynz ;
+                d = 0 ;
+                for (p = Bp [k] ; p < Bp [k+1] ; p++)
+                {
+                    iold = Bi [p] ;
+                    inew = P1inv [iold] ;
+                    if (inew >= n1rows)
+                    {
+                        d++ ;
+                    }
+                }
+                ynz += d ;
+            }
+        }
+        else
+        {
+            // B is dense
+            Entry *B1 = Bx ;
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // count the nonzero entries in column k of B2
+                Yp [(n-n1cols)+k] = ynz ;
+                d = 0 ;
+                for (iold = 0 ; iold < m ; iold++)
+                {
+                    inew = P1inv [iold] ;
+                    if (inew >= n1rows && B1 [iold] != (Entry) 0)
+                    {
+                        d++ ;
+                    }
+                }
+                B1 += ldb ;
+                ynz += d ;
+            }
+        }
+        Yp [(n-n1cols)+bncols] = ynz ;
+    }
+
+
+    // -------------------------------------------------------------------------
+    // allocate the nonzeros for Y
+    // -------------------------------------------------------------------------
+
+    if (noY)
+    {
+        // no singletons found, and B is empty.  pass Y=A to QR factorization,
+        // and pass in Q1fill as the "user-provided" ordering
+        ASSERT (Yp == NULL) ;
+        Yi = NULL ;
+        Yx = NULL ;
+    }
+    else
+    {
+        cholmod_l_reallocate_sparse (ynz, Y, cc) ;
+        Yi = (Long  *) Y->i ;
+        Yx = (Entry *) Y->x ;
+    }
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freefac (&QR, cc) ;
+        cholmod_l_free_sparse (&Y, cc) ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // create the pattern and values of Y and R1
+    // -------------------------------------------------------------------------
+
+    if (noY)
+    {
+
+        // ---------------------------------------------------------------------
+        // R1 does not exist
+        // ---------------------------------------------------------------------
+
+        ASSERT (R1p == NULL) ;
+        R1j = NULL ;
+        R1x = NULL ;
+
+    }
+    else if (n1cols == 0)
+    {
+
+        // ---------------------------------------------------------------------
+        // R1 does not exist
+        // ---------------------------------------------------------------------
+
+        ASSERT (R1p == NULL) ;
+        R1j = NULL ;
+        R1x = NULL ;
+
+        // ---------------------------------------------------------------------
+        // construct the A part of Y = [S B]
+        // ---------------------------------------------------------------------
+
+        ASSERT (anz == a2nz) ;
+        py = 0 ;
+        for (k = 0 ; k < n ; k++)
+        {
+            j = Q1fill ? Q1fill [k] : k ;
+            ASSERT (py == Yp [k]) ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                Yi [py] = Ai [p] ;
+                Yx [py] = Ax [p] ;
+                py++ ;
+            }
+        }
+        ASSERT (py == anz) ;
+        ASSERT (py == Yp [n]) ;
+
+        // ---------------------------------------------------------------------
+        // construct the B part of Y = [S B]
+        // ---------------------------------------------------------------------
+
+        if (Bsparse)
+        {
+            // B is sparse
+            bnz = Bp [bncols] ;
+            for (p = 0 ; p < bnz ; p++)
+            {
+                Yi [py++] = Bi [p] ;
+            }
+            py = anz ;
+            for (p = 0 ; p < bnz ; p++)
+            {
+                Yx [py++] = Bx [p] ;
+            }
+        }
+        else
+        {
+            // B is dense
+            Entry *B1 = Bx ;
+            for (k = 0 ; k < bncols ; k++)
+            {
+                ASSERT (py == Yp [n+k]) ;
+                for (i = 0 ; i < m ; i++)
+                {
+                    Entry bij = B1 [i] ;
+                    if (bij != (Entry) 0)
+                    {
+                        Yi [py] = i ;
+                        Yx [py] = bij ;
+                        py++ ;
+                    }
+                }
+                B1 += ldb ;
+            }
+        }
+        ASSERT (py == ynz) ;
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // R1p = cumsum ([0 R1p])
+        // ---------------------------------------------------------------------
+
+        r1nz = spqr_cumsum (n1rows, R1p) ;      // Long overflow cannot occur
+        PR (("total nonzeros in R1: %ld\n", r1nz)) ;
+
+        // ---------------------------------------------------------------------
+        // allocate R1
+        // ---------------------------------------------------------------------
+
+        R1j = (Long  *) cholmod_l_malloc (r1nz, sizeof (Long ), cc) ;
+        R1x = (Entry *) cholmod_l_malloc (r1nz, sizeof (Entry), cc) ;
+        QR->R1j = R1j ;
+        QR->R1x = R1x ;
+        QR->r1nz = r1nz ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            spqr_freefac (&QR, cc) ;
+            cholmod_l_free_sparse (&Y, cc) ;
+            return (NULL) ;
+        }
+
+        // ---------------------------------------------------------------------
+        // scan A and construct R11
+        // ---------------------------------------------------------------------
+
+        // At this point, R1p [i] points to the start of row i:
+        // for (Long t = 0 ; t <= n1rows ; t++) Rsave [t] = R1p [t] ;
+
+        for (k = 0 ; k < n1cols ; k++)
+        {
+            j = Q1fill ? Q1fill [k] : k ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                // row i of A is row inew after singleton permutation
+                i = Ai [p] ;
+                inew = P1inv [i] ;
+                ASSERT (inew < n1rows) ;
+                // A (i,j) is in a singleton row.  It becomes R1 (inew,k)
+                p2 = R1p [inew]++ ;
+                ASSERT (p2 < R1p [inew+1]) ;
+                R1j [p2] = k ;
+                R1x [p2] = Ax [p] ;
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // scan A and construct R12 and the S2 part of Y = [S2 B2]
+        // ---------------------------------------------------------------------
+
+        py = 0 ;
+        for ( ; k < n ; k++)
+        {
+            j = Q1fill ? Q1fill [k] : k ;
+            ASSERT (py == Yp [k-n1cols]) ;
+            for (p = Ap [j] ; p < Ap [j+1] ; p++)
+            {
+                // row i of A is row inew after singleton permutation
+                i = Ai [p] ;
+                inew = P1inv [i] ;
+                if (inew < n1rows)
+                {
+                    // A (i,j) is in a singleton row.  It becomes R1 (inew,k)
+                    p2 = R1p [inew]++ ;
+                    ASSERT (p2 < R1p [inew+1]) ;
+                    R1j [p2] = k ;
+                    R1x [p2] = Ax [p] ;
+                }
+                else
+                {
+                    // A (i,j) is not in a singleton row.  Place it in
+                    // Y (inew-n1rows, k-n1cols)
+                    Yi [py] = inew - n1rows ;
+                    Yx [py] = Ax [p] ;
+                    py++ ;
+                }
+            }
+        }
+        ASSERT (py == Yp [n-n1cols]) ;
+
+        // ---------------------------------------------------------------------
+        // restore the row pointers for R1
+        // ---------------------------------------------------------------------
+
+        spqr_shift (n1rows, R1p) ;
+
+        // the row pointers are back to what they were:
+        // for (Long t = 0 ; t <= n1rows ; t++) ASSERT (Rsave [t] == R1p [t]) ;
+
+        // ---------------------------------------------------------------------
+        // construct the B2 part of Y = [S2 B2]
+        // ---------------------------------------------------------------------
+
+        if (Bsparse)
+        {
+            // B is sparse
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // construct the nonzero entries in column k of B2
+                ASSERT (py == Yp [k+(n-n1cols)]) ;
+                for (p = Bp [k] ; p < Bp [k+1] ; p++)
+                {
+                    iold = Bi [p] ;
+                    inew = P1inv [iold] ;
+                    if (inew >= n1rows)
+                    {
+                        Yi [py] = inew - n1rows ;
+                        Yx [py] = Bx [p] ;
+                        py++ ;
+                    }
+                }
+            }
+        }
+        else
+        {
+            // B is dense
+            Entry *B1 = Bx ;
+            for (k = 0 ; k < bncols ; k++)
+            {
+                // construct the nonzero entries in column k of B2
+                ASSERT (py == Yp [k+(n-n1cols)]) ;
+                for (iold = 0 ; iold < m ; iold++)
+                {
+                    inew = P1inv [iold] ;
+                    if (inew >= n1rows)
+                    {
+                        Entry bij = B1 [iold] ;
+                        if (bij != (Entry) 0)
+                        {
+                            Yi [py] = inew - n1rows ;
+                            Yx [py] = bij ;
+                            py++ ;
+                        }
+                    }
+                }
+                B1 += ldb ;
+            }
+        }
+        ASSERT (py == ynz) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // QR factorization of A or Y
+    // -------------------------------------------------------------------------
+
+    if (noY)
+    {
+        // factorize A, with fill-reducing ordering already given in Q1fill
+        QRsym = spqr_analyze (A, SPQR_ORDERING_GIVEN, Q1fill,
+            tol >= 0, keepH, cc) ;
+        t1 = SuiteSparse_time ( ) ;
+        QRnum = spqr_factorize <Entry> (&A, FALSE, tol, n, QRsym, cc) ;
+    }
+    else
+    {
+        // fill-reducing ordering is already applied to Y; free Y when loaded
+        QRsym = spqr_analyze (Y, SPQR_ORDERING_FIXED, NULL,
+            tol >= 0, keepH, cc) ;
+        t1 = SuiteSparse_time ( ) ;
+        QRnum = spqr_factorize <Entry> (&Y, TRUE, tol, n2, QRsym, cc) ;
+        // Y has been freed
+        ASSERT (Y == NULL) ;
+    }
+
+    // record the actual ordering used (this will have been changed to GIVEN
+    // or FIXED, in spqr_analyze, but change it back to the ordering used by
+    // spqr_1fixed or spqr_1colamd.
+    cc->SPQR_istat [7] = ordering ;
+
+    QR->QRsym = QRsym ;
+    QR->QRnum = QRnum ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freefac (&QR, cc) ;
+        return (NULL) ;
+    }
+
+    // singletons do not take part in the symbolic analysis, and any columns
+    // of B are tacked on and do take part.
+    ASSERT (QRsym->n == n - n1cols + bncols) ;
+
+    cc->SPQR_istat [0] += r1nz ;       // nnz (R)
+
+    // rank estimate of A, including singletons but excluding the columns of
+    // of B, in case [A B] was factorized.
+    QR->rank = n1rows + QRnum->rank1 ;
+    PR (("rank estimate of A: QR->rank = %ld = %ld + %ld\n",
+    QR->rank, n1rows, QRnum->rank1)) ;
+
+    // -------------------------------------------------------------------------
+    // construct global row permutation if H is kept and singletons exist
+    // -------------------------------------------------------------------------
+
+    // If there are no singletons, then HP1inv [0:m-1] and HPinv [0:m-1] would
+    // be identical, so HP1inv is not needed.
+
+    ASSERT ((n1cols == 0) == (P1inv == NULL)) ;
+    ASSERT (IMPLIES (n1cols == 0, n1rows == 0)) ;
+    ASSERT (n1cols >= n1rows) ;
+
+    if (keepH && n1cols > 0)
+    {
+        // construct the global row permutation.  Currently, the row indices
+        // in H reflect the global R.  P1inv is the singleton permutation,
+        // where a row index of Y = (P1inv (row of A) - n1rows), and
+        // row of R2 = QRnum->HPinv (row of Y).   Combine these two into
+        // HP1inv, where a global row of R = HP1inv (a row of A)
+
+        Long kk ;
+        Long *HP1inv, *HPinv ;
+        QR->HP1inv = HP1inv = (Long *) cholmod_l_malloc (m, sizeof (Long), cc) ;
+        HPinv = QRnum->HPinv ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            spqr_freefac (&QR, cc) ;
+            return (NULL) ;
+        }
+
+        for (i = 0 ; i < m ; i++)
+        {
+            // i is a row of A, k is a row index after row singletons are
+            // permuted.  Then kk is a row index of the global R.
+            k = P1inv ? P1inv [i] : i ;
+            ASSERT (k >= 0 && k < m) ;
+            if (k < n1rows)
+            {
+                kk = k ;
+            }
+            else
+            {
+                // k-n1rows is a row index of Y, the matrix factorized by
+                // the QR factorization kernels (in QRsym and QRnum).
+                // HPinv [k-n1rows] gives a row index of R2, to which n1rows
+                // must be added to give a row of the global R.
+                kk = HPinv [k - n1rows] + n1rows ;
+            }
+            ASSERT (kk >= 0 && kk < m) ;
+            HP1inv [i] = kk ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // find the mapping for the squeezed R, if A is rank deficient
+    // -------------------------------------------------------------------------
+
+    if (QR->rank < n && !spqr_rmap <Entry> (QR, cc))
+    {
+        // out of memory
+        spqr_freefac (&QR, cc) ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // output statistics
+    // -------------------------------------------------------------------------
+
+    cc->SPQR_istat [4] = QR->rank ;         // estimated rank of A
+    cc->SPQR_istat [5] = n1cols ;           // number of columns singletons
+    cc->SPQR_istat [6] = n1rows ;           // number of singleton rows
+    cc->SPQR_tol_used = tol ;               // tol used
+
+    t2 = SuiteSparse_time ( ) ;
+    cc->SPQR_analyze_time = t1 - t0 ;   // analyze time, including singletons
+    cc->SPQR_factorize_time = t2 - t1 ; // factorize time
+
+    return (QR) ;
+}
+
+
+// =============================================================================
+
+template SuiteSparseQR_factorization <double> *spqr_1factor <double>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    int keepH,              // if TRUE, keep the Householder vectors
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    Long ldb,               // if dense, the leading dimension of B
+    Long *Bp,               // size bncols+1, column pointers of B
+    Long *Bi,               // size bnz = Bp [bncols], row indices of B
+    double *Bx,             // size bnz, numerical values of B
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template SuiteSparseQR_factorization <Complex> *spqr_1factor <Complex>
+(
+    // inputs, not modified
+    int ordering,           // all, except 3:given treated as 0:fixed
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    int keepH,              // if TRUE, keep the Householder vectors
+    cholmod_sparse *A,      // m-by-n sparse matrix
+    Long ldb,               // if dense, the leading dimension of B
+    Long *Bp,               // size bncols+1, column pointers of B
+    Long *Bi,               // size bnz = Bp [bncols], row indices of B
+    Complex *Bx,            // size bnz, numerical values of B
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_1fixed.cpp b/SPQR/Source/spqr_1fixed.cpp
new file mode 100644
index 0000000..6405b50
--- /dev/null
+++ b/SPQR/Source/spqr_1fixed.cpp
@@ -0,0 +1,358 @@
+// =============================================================================
+// === spqr_1fixed =============================================================
+// =============================================================================
+
+//  Find column singletons, but do not permute the columns of A.  If there are
+//  no column singletons, and no right-hand side B, then this takes only
+//  O(m+n) time and memory.
+//
+//  Returns a sparse matrix Y with column pointers allocated and initialized,
+//  but no values (nzmax(Y) is zero).  Y has n-n1cols+bncols columns, and
+//  m-n1rows rows.  B is empty and no singletons are found, Y is NULL.
+
+#include "spqr.hpp"
+
+template <typename Entry> int spqr_1fixed
+(
+    // inputs, not modified
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // output arrays, neither allocated nor defined on input.
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *Y ;
+    Long *P1inv, *R1p, *Yp, *Qrows, *Ap, *Ai ;
+    char *Mark ;
+    Entry *Ax ;
+    Long i, j, k, p, d, row, n1rows, n1cols, ynz, iold, inew, kk, m, n, xtype ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    xtype = spqr_type <Entry> ( ) ;
+
+    m = A->nrow ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    Ai = (Long *) A->i ;
+    Ax = (Entry *) A->x ;
+
+    // set outputs to NULL in case of early return
+    *p_R1p    = NULL ;
+    *p_P1inv  = NULL ;
+    *p_Y      = NULL ;
+    *p_n1cols = EMPTY ;
+    *p_n1rows = EMPTY ;
+
+    // -------------------------------------------------------------------------
+    // allocate workspace
+    // -------------------------------------------------------------------------
+
+    Mark = (char *) cholmod_l_calloc (m, sizeof (char), cc) ;
+    Qrows = (Long *) cholmod_l_malloc (n, sizeof (Long), cc) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        cholmod_l_free (m, sizeof (char), Mark, cc) ;
+        cholmod_l_free (n, sizeof (Long), Qrows, cc) ;
+        return (FALSE) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // find singletons; no column permutations allowed
+    // -------------------------------------------------------------------------
+
+    n1cols = 0 ;        // number of column singletons found
+    n1rows = 0 ;        // number of corresponding singleton rows
+
+    for (j = 0 ; j < n ; j++)
+    {
+        // count the number of unmarked rows in column j
+        Entry aij = 0 ;
+        d = 0 ;
+        row = EMPTY ;
+        for (p = Ap [j] ; d < 2 && p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            if (!Mark [i])
+            {
+                // row i is not taken by a prior column singleton.  If this
+                // is the only unflagged row and the value is large enough,
+                // it will become the row for this column singleton. 
+                aij = Ax [p] ;
+                row = i ;
+                d++ ;
+            }
+        }
+        if (d == 0)
+        {
+            // j is a dead column singleton
+            Qrows [n1cols++] = EMPTY ;
+        }
+        else if (d == 1 && spqr_abs (aij, cc) > tol)
+        {
+            // j is a live column singleton
+            Qrows [n1cols++] = row ;
+            // flag row i as taken
+            Mark [row] = TRUE ;
+            n1rows++ ;
+        }
+        else
+        {
+            // j is not a singleton; quit searching
+            break ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // construct P1inv permutation, row counts R1p, and col pointers Yp
+    // -------------------------------------------------------------------------
+
+    if (n1cols == 0 && bncols == 0)
+    {
+
+        // ---------------------------------------------------------------------
+        // no singletons, and B empty; Y=A will be done via pointer alias
+        // ---------------------------------------------------------------------
+
+        Y = NULL ;
+        Yp = NULL ;
+        P1inv = NULL ;
+        R1p = NULL ;
+
+    }
+    else if (n1cols == 0)
+    {
+
+        // ---------------------------------------------------------------------
+        // no singletons in the matrix; no R1 matrix, no P1inv permutation
+        // ---------------------------------------------------------------------
+
+        // Y has no entries yet; nnz(Y) will be determined later
+        Y = cholmod_l_allocate_sparse (m, n+bncols, 0,
+            FALSE, TRUE, 0, xtype, cc) ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            cholmod_l_free (m, sizeof (char), Mark, cc) ;
+            cholmod_l_free (n, sizeof (Long), Qrows, cc) ;
+            return (FALSE) ;
+        }
+
+        Yp = (Long *) Y->p ;
+
+        ASSERT (n1rows == 0) ;
+        P1inv = NULL ;
+        R1p = NULL ;
+
+        // ---------------------------------------------------------------------
+        // copy the column pointers of A for the first part of Y = [A B]
+        // ---------------------------------------------------------------------
+
+        ynz = Ap [n] ;
+        for (k = 0 ; k <= n ; k++)
+        {
+            Yp [k] = Ap [k] ;
+        }
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // construct the row singleton permutation
+        // ---------------------------------------------------------------------
+
+        // Y has no entries yet; nnz(Y) will be determined later
+        Y = cholmod_l_allocate_sparse (m-n1rows, n-n1cols+bncols, 0,
+            TRUE, TRUE, 0, xtype, cc) ;
+        P1inv = (Long *) cholmod_l_malloc (m, sizeof (Long), cc) ;
+        R1p   = (Long *) cholmod_l_calloc (n1rows+1, sizeof (Long), cc) ;
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            cholmod_l_free_sparse (&Y, cc) ;
+            cholmod_l_free (m, sizeof (Long), P1inv, cc) ;
+            cholmod_l_free (n1rows+1, sizeof (Long), R1p, cc) ;
+            cholmod_l_free (m, sizeof (char), Mark, cc) ;
+            cholmod_l_free (n, sizeof (Long), Qrows, cc) ;
+            return (FALSE) ;
+        }
+
+        Yp = (Long *) Y->p ;
+
+#ifndef NDEBUG
+        for (i = 0 ; i < m ; i++) P1inv [i] = EMPTY ;
+#endif
+
+        kk = 0 ;
+        for (k = 0 ; k < n1cols ; k++)
+        {
+            i = Qrows [k] ;
+            if (i != EMPTY)
+            {
+                // row i is the kk-th singleton row
+                ASSERT (Mark [i]) ;
+                ASSERT (P1inv [i] == EMPTY) ;
+                P1inv [i] = kk ;
+                kk++ ;
+            }
+        }
+        for (i = 0 ; i < m ; i++)
+        {
+            if (!Mark [i])
+            {
+                // row i is not a singleton row
+                ASSERT (P1inv [i] == EMPTY) ;
+                P1inv [i] = kk ;
+                kk++ ;
+            }
+        }
+        ASSERT (kk == m) ;
+
+        // ---------------------------------------------------------------------
+        // find row counts for R11
+        // ---------------------------------------------------------------------
+
+        for (k = 0 ; k < n1cols ; k++)
+        {
+            for (p = Ap [k] ; p < Ap [k+1] ; p++)
+            {
+                iold = Ai [p] ;
+                inew = P1inv [iold] ;
+                ASSERT (inew < n1rows) ;
+                R1p [inew]++ ;              // a singleton row; in R1
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // find row counts for R12 and column pointers for A2 part of Y
+        // ---------------------------------------------------------------------
+
+        ynz = 0 ;
+        for ( ; k < n ; k++)
+        {
+            Yp [k-n1cols] = ynz ;
+            for (p = Ap [k] ; p < Ap [k+1] ; p++)
+            {
+                iold = Ai [p] ;
+                inew = P1inv [iold] ;
+                if (inew < n1rows)
+                {
+                    R1p [inew]++ ;          // a singleton row; in R1
+                }
+                else
+                {
+                    ynz++ ;                 // not a singleton row; in A2
+                }
+            }
+        }
+        Yp [n-n1cols] = ynz ;
+
+#ifndef NDEBUG
+        PR (("n1cols: %ld\n", n1cols)) ;
+        for (i = 0 ; i < n1rows ; i++)
+        {
+            PR (("R1p [%ld] is %ld\n", i, R1p [i])) ;
+            ASSERT (R1p [i] > 0) ;
+        }
+#endif
+    }
+
+    // -------------------------------------------------------------------------
+    // free workspace and return results
+    // -------------------------------------------------------------------------
+
+    cholmod_l_free (n, sizeof (Long), Qrows, cc) ;
+    cholmod_l_free (m, sizeof (char), Mark, cc) ;
+
+    *p_R1p    = R1p ;
+    *p_P1inv  = P1inv ;
+    *p_Y      = Y ;
+    *p_n1cols = n1cols ;
+    *p_n1rows = n1rows ;
+
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+
+template int spqr_1fixed <double>
+(
+    // inputs, not modified
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // output arrays, neither allocated nor defined on input.
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template int spqr_1fixed <Complex>
+(
+    // inputs, not modified
+    double tol,             // only accept singletons above tol
+    Long bncols,            // number of columns of B
+    cholmod_sparse *A,      // m-by-n sparse matrix
+
+    // output arrays, neither allocated nor defined on input.
+
+    Long **p_R1p,           // size n1rows+1, R1p [k] = # of nonzeros in kth
+                            // row of R1.  NULL if n1cols == 0.
+    Long **p_P1inv,         // size m, singleton row inverse permutation.
+                            // If row i of A is the kth singleton row, then
+                            // P1inv [i] = k.  NULL if n1cols is zero.
+
+    cholmod_sparse **p_Y,   // on output, only the first n-n1cols+1 entries of
+                            // Y->p are defined (if Y is not NULL), where
+                            // Y = [A B] or Y = [A2 B2].  If B is empty and
+                            // there are no column singletons, Y is NULL
+
+    Long *p_n1cols,         // number of column singletons found
+    Long *p_n1rows,         // number of corresponding rows found
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_analyze.cpp b/SPQR/Source/spqr_analyze.cpp
new file mode 100644
index 0000000..881a5ac
--- /dev/null
+++ b/SPQR/Source/spqr_analyze.cpp
@@ -0,0 +1,1788 @@
+// =============================================================================
+// === spqr_analyze ============================================================
+// =============================================================================
+
+// Given the nonzero pattern of a sparse m-by-n matrix A, analyze it for
+// subsequent numerical factorization.  This function operates on the pattern
+// of A only; it does not need to be templatized.
+
+#include "spqr.hpp"
+
+// =============================================================================
+
+#define FREE_WORK \
+    cholmod_l_free_factor (&Sc, cc) ; \
+    cholmod_l_free (2*(nf+1), sizeof (double), Flops,         cc) ; \
+    cholmod_l_free (ns+2,     sizeof (Long),    Stack_stack,   cc) ; \
+    cholmod_l_free (nf,       sizeof (Long),    Rh,            cc) ; \
+    cholmod_l_free (ntasks,   sizeof (Long),    TaskParent,    cc) ;
+
+// =============================================================================
+// === spqr_analyze ============================================================
+// =============================================================================
+
+spqr_symbolic *spqr_analyze
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+    int ordering,           // all options available
+    Long *Quser,            // user provided ordering, if given (may be NULL)
+
+    int do_rank_detection,  // if TRUE, then rank deficient matrices may be
+                            // considered during numerical factorization,
+    // with tol >= 0 (tol < 0 is also allowed).  If FALSE, then the tol
+    // parameter is ignored by the numerical factorization, and no rank
+    // detection is performed.  Ignored when using GPU acceleration
+    // (no rank detection is performed in that case).
+
+    int keepH,              // if TRUE, keep the Householder vectors
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    spqr_symbolic *QRsym ;
+    Long *Parent, *Child, *Childp, *W, *Rj, *Rp, *Super, *Stair, *Fmap, *Sleft,
+        *Post, *Ap, *Weight, *On_stack, *Task, *TaskParent,
+        *TaskChildp, *TaskChild, *Fm, *Cm, *TaskFront, *TaskFrontp, *Rh,
+        *Stack_stack, *Stack_maxstack, *Hip,
+        *TaskStack, *InvPost ;
+    Long nf, f, j, col1, col2, p, p1, p2, t, parent, anz, fp, csize_max,
+        fmc, fnc, fpc, cm, cn, ci, fm, fn, cm_min, cm_max, csize_min, kf,
+        rm, rn, col, c, pc, rsize, maxfn, csize, m, n, klast,
+        stack, maxstack, rxsize, hisize,
+        rhxsize, ctot, fsize, ns, ntasks, task ;
+    cholmod_sparse *AT ;
+    cholmod_factor *Sc ;
+    int ok = TRUE, do_parallel_analysis ;
+    double total_flops = 0 ;
+    double *Flops, *Flops_subtree ;
+    Long *Sp, *Sj;
+
+#ifdef GPU_BLAS
+    spqr_gpu *QRgpu ;
+    Long *RjmapOffsets, *RimapOffsets ;
+    Long RjmapSize, RimapSize;
+    Long numStages;             // staging
+    Long *Stagingp, *StageMap, *FOffsets, *ROffsets, *SOffsets;
+    size_t *FSize, *RSize, *SSize;
+#endif
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    PR (("\n ========================== QR analyze\n")) ;
+
+    ASSERT (cc != NULL) ;
+    ASSERT (A != NULL) ;
+    ASSERT (cc->status == CHOLMOD_OK) ;
+
+    m = A->nrow ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    // Ai = (Long *) A->i ;
+    anz = Ap [n] ;
+
+    do_parallel_analysis = (cc->SPQR_grain > 1) ;
+
+    // The analysis for TBB parallelism attempts to construct a task graph with
+    // leaf nodes with flop counts >= max ((total flops) / cc->SPQR_grain,
+    // cc->SPQR_small).  If cc->SPQR_grain <= 1, or if the total flop
+    // count is less than cc->SPQR_small, then no parallelism will be
+    // exploited.  A decent value of cc->SPQR_grain is about 2 times the
+    // number of cores.
+
+    PR (("grainsize knobs %g %g\n", cc->SPQR_grain, cc->SPQR_small)) ;
+
+    // -------------------------------------------------------------------------
+    // GPU selection
+    // -------------------------------------------------------------------------
+
+#ifdef GPU_BLAS
+    // See if the user wants to use GPU acceleration.
+    bool useGPU ;
+
+    if (cc->useGPU == -1)
+    {
+        // only CHOLMOD uses this option.  Not in use yet for SPQR
+        useGPU = FALSE ;
+    }
+    else
+    {
+        useGPU = cc->useGPU ;
+    }
+
+    // Disable the GPU if the Householder vectors are requested, if we're
+    // using TBB, if rank detection is requested, or if A is not real
+    if (keepH || do_parallel_analysis || do_rank_detection ||
+        A->xtype != CHOLMOD_REAL)
+    {
+        useGPU = FALSE ;
+    }
+
+    PR (("GPU: %d : %d %d %d %d", cc->useGPU,
+        keepH, do_parallel_analysis,
+        do_rank_detection, A->xtype != CHOLMOD_REAL)) ;
+
+    if (useGPU)
+    {
+        PR ((" ============================= USE GPU")) ;
+    }
+    PR (("\n")) ;
+
+#else
+    // the GPU is not in use (not installed at compile-time)
+    bool useGPU = FALSE ;
+#endif
+
+    // cc->for_GPU = (int) useGPU ;    // keep track of if we are using the GPU
+
+    // -------------------------------------------------------------------------
+    // allocate workspace for this function and cholmod_l_postorder
+    // -------------------------------------------------------------------------
+
+    // the number of frontal matrices (nf) is not yet known, but nf <= n will
+    // hold.  cholmod_l_analyze_p2, below, will allocate m+6*n in cc->Iwork.
+
+    nf = n ;    // just a placeholder; will be changed later to some nf <= n
+
+    cholmod_l_allocate_work (n+1, MAX (m, 2*(n+1) + 2*(nf+2)) + 1, 0, cc) ;
+
+    // workspace allocated later:
+    Rh = NULL ;
+    Flops = NULL ;
+    Flops_subtree = NULL ;
+    Sc = NULL ;
+    Stack_stack = NULL ;
+    TaskParent = NULL ;
+    ns = 0 ;                    // number of stacks
+    ntasks = 0 ;                // number of tasks in Task tree
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // supernodal Cholesky ordering and analysis of A'A
+    // -------------------------------------------------------------------------
+
+    AT = cholmod_l_transpose (A, 0, cc) ;   // AT = spones (A') [
+
+    // save the current CHOLMOD settings
+    Long save [6] ;
+    save [0] = cc->supernodal ;
+    save [1] = cc->nmethods ;
+    save [2] = cc->postorder ;
+    save [3] = cc->method [0].ordering ;
+    save [4] = cc->method [1].ordering ;
+    save [5] = cc->method [2].ordering ;
+
+    // SuiteSparseQR requires a supernodal analysis to find its frontal matrices
+    cc->supernodal = CHOLMOD_SUPERNODAL ;
+
+    /* ---------------------------------------------------------------------- */
+    /* determine ordering */
+    /* ---------------------------------------------------------------------- */
+
+    // 1:natural and 3:given become the same as 1:fixed
+    if (ordering == SPQR_ORDERING_NATURAL ||
+       (ordering == SPQR_ORDERING_GIVEN && Quser == NULL))
+    {
+        ordering = SPQR_ORDERING_FIXED ;
+    }
+
+    // 8:best: best of COLAMD(A), AMD(A'A), and METIS (if available)
+    if (ordering == SPQR_ORDERING_BEST)
+    {
+        ordering = SPQR_ORDERING_CHOLMOD ;
+        cc->postorder = TRUE ;
+        cc->nmethods = 2 ;
+        cc->method [0].ordering = CHOLMOD_COLAMD ;
+        cc->method [1].ordering = CHOLMOD_AMD ;
+#ifndef NPARTITION
+        cc->nmethods = 3 ;
+        cc->method [2].ordering = CHOLMOD_METIS ;
+#endif
+    }
+
+    // 9:best: best of COLAMD(A) and AMD(A'A),
+    if (ordering == SPQR_ORDERING_BESTAMD)
+    {
+        ordering = SPQR_ORDERING_CHOLMOD ;
+        cc->postorder = TRUE ;
+        cc->nmethods = 2 ;
+        cc->method [0].ordering = CHOLMOD_COLAMD ;
+        cc->method [1].ordering = CHOLMOD_AMD ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* set up the ordering */
+    /* ---------------------------------------------------------------------- */
+
+    if (ordering == SPQR_ORDERING_FIXED)
+    {
+        // fixed column ordering
+        cc->nmethods = 1 ;
+        cc->method [0].ordering = CHOLMOD_NATURAL ;
+        cc->postorder = FALSE ;
+        Quser = NULL ;
+    }
+    else if (ordering == SPQR_ORDERING_GIVEN)
+    {
+        // user-provided column ordering
+        cc->nmethods = 1 ;
+        cc->method [0].ordering = CHOLMOD_GIVEN ;
+        cc->postorder = FALSE ;
+    }
+    else if (ordering == SPQR_ORDERING_CHOLMOD)
+    {
+        // CHOLMOD default, defined in cc.  If not modified, this is
+        // to try AMD(A'A), and then try METIS if available, and take the best
+        // available.
+        Quser = NULL ;
+    }
+    else if (ordering == SPQR_ORDERING_AMD)
+    {
+        // AMD (A'*A)
+        cc->nmethods = 1 ;
+        cc->method [0].ordering = CHOLMOD_AMD ;
+        cc->postorder = TRUE ;
+        Quser = NULL ;
+    }
+#ifndef NPARTITION
+    else if (ordering == SPQR_ORDERING_METIS)
+    {
+        // METIS (A'*A), if installed
+        cc->nmethods = 1 ;
+        cc->method [0].ordering = CHOLMOD_METIS ;
+        cc->postorder = TRUE ;
+        Quser = NULL ;
+    }
+#endif
+    else // if (ordering == SPQR_ORDERING_COLAMD)
+         // or ordering == SPQR_ORDERING_DEFAULT
+         // or ordering == SPQR_ORDERING_METIS and METIS not installed
+    {
+        // Version 1.2.0: default is COLAMD
+        // COLAMD (A)
+        ordering = SPQR_ORDERING_COLAMD ;
+        cc->nmethods = 1 ;
+        cc->method [0].ordering = CHOLMOD_COLAMD ;
+        cc->postorder = TRUE ;
+        Quser = NULL ;
+    }
+
+    // multifrontal QR ordering and analysis.
+    // The GPU-accelerated SPQR requires additional supernodal analysis.
+    Sc = cholmod_l_analyze_p2 (
+        useGPU ? CHOLMOD_ANALYZE_FOR_SPQRGPU : CHOLMOD_ANALYZE_FOR_SPQR,
+        AT, (SuiteSparse_long *) Quser, NULL, 0, cc) ;
+
+    // record the actual ordering used
+    if (Sc != NULL)
+    {
+        switch (Sc->ordering)
+        {
+            case CHOLMOD_NATURAL: ordering = SPQR_ORDERING_NATURAL ; break ;
+            case CHOLMOD_GIVEN:   ordering = SPQR_ORDERING_GIVEN   ; break ;
+            case CHOLMOD_AMD:     ordering = SPQR_ORDERING_AMD     ; break ;
+            case CHOLMOD_COLAMD:  ordering = SPQR_ORDERING_COLAMD  ; break ;
+            case CHOLMOD_METIS:   ordering = SPQR_ORDERING_METIS   ; break ;
+        }
+    }
+
+    cc->SPQR_istat [7] = ordering ;
+
+    // restore the CHOLMOD settings
+    cc->supernodal              = save [0] ;
+    cc->nmethods                = save [1] ;
+    cc->postorder               = save [2] ;
+    cc->method [0].ordering     = save [3] ;
+    cc->method [1].ordering     = save [4] ;
+    cc->method [2].ordering     = save [5] ;
+
+    cholmod_l_free_sparse (&AT, cc) ;       // ]
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    ASSERT (Sc != NULL && Sc->is_ll && Sc->is_super) ;
+
+    // -------------------------------------------------------------------------
+    // extract the contents of CHOLMOD's supernodal factorization
+    // -------------------------------------------------------------------------
+
+    QRsym = (spqr_symbolic *) cholmod_l_malloc (1, sizeof (spqr_symbolic), cc) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    QRsym->m = m ;
+    QRsym->n = n ;
+    QRsym->do_rank_detection = do_rank_detection ;
+    QRsym->anz = anz ;
+    QRsym->nf = nf = Sc->nsuper ;       // number of supernodes / fronts
+    QRsym->rjsize = Sc->ssize ;         // size of int part of supernodal R
+    QRsym->keepH = keepH ;
+    QRsym->maxcsize = Sc->maxcsize;
+    QRsym->maxesize = Sc->maxesize;
+
+    QRsym->Qfill = (Long *) Sc->Perm ;           // size n column perm
+    Sc->Perm = NULL ;
+
+    QRsym->Super = Super = (Long *) Sc->super ;  // Super is size nf+1
+    Sc->super = NULL ;
+
+    QRsym->Rp = Rp = (Long *) Sc->pi ;           // Rp is size nf+1
+    Sc->pi = NULL ;
+
+    QRsym->Rj = Rj = (Long *) Sc->s ;            // Rj is size rjsize
+    Sc->s = NULL ;
+
+    // ColCount is required for the GPU factorization
+    QRsym->ColCount = (Long *) Sc->ColCount ;
+    Sc->ColCount = NULL ;
+
+    cholmod_l_free_factor (&Sc, cc) ;
+
+    // -------------------------------------------------------------------------
+    // allocate the rest of QRsym
+    // -------------------------------------------------------------------------
+
+    ASSERT (nf <= n) ;
+    QRsym->Parent = Parent = (Long *) cholmod_l_malloc (nf+1, sizeof(Long), cc);
+    QRsym->Childp = Childp = (Long *) cholmod_l_calloc (nf+2, sizeof(Long), cc);
+    QRsym->Child  = Child  = (Long *) cholmod_l_calloc (nf+1, sizeof(Long), cc);
+    QRsym->Post   = Post   = (Long *) cholmod_l_malloc (nf+1, sizeof(Long), cc);
+    QRsym->PLinv           = (Long *) cholmod_l_malloc (m,    sizeof(Long), cc);
+    QRsym->Sleft  = Sleft  = (Long *) cholmod_l_malloc (n+2,  sizeof(Long), cc);
+    QRsym->Sp     = Sp     = (Long *) cholmod_l_malloc (m+1,  sizeof(Long), cc);
+    QRsym->Sj     = Sj     = (Long *) cholmod_l_malloc (anz,  sizeof(Long), cc);
+    QRsym->Fm              = (Long *) cholmod_l_malloc (nf+1, sizeof(Long), cc);
+    QRsym->Cm              = (Long *) cholmod_l_malloc (nf+1, sizeof(Long), cc);
+
+    if (keepH)
+    {
+        QRsym->Hip = Hip = (Long *) cholmod_l_malloc (nf+1, sizeof (Long), cc) ;
+    }
+    else
+    {
+        QRsym->Hip = Hip = NULL ;
+    }
+
+    // allocated later (or skipped if no parallelism)
+    QRsym->TaskChild  = NULL ;
+    QRsym->TaskChildp = NULL ;
+    QRsym->TaskFront = NULL ;
+    QRsym->TaskFrontp = NULL ;
+    QRsym->TaskStack = NULL ;
+    QRsym->On_stack = NULL ;
+    QRsym->Stack_maxstack = NULL ;
+    QRsym->ntasks = EMPTY ;         // computed later
+    QRsym->ns = EMPTY ;
+
+    // allocated later (or skipped if not using GPU)
+    QRsym->QRgpu = NULL ;
+
+#ifdef GPU_BLAS
+
+    QRgpu = NULL ;
+    RjmapOffsets = NULL ;
+    RimapOffsets = NULL ;
+    Stagingp = NULL ;
+    StageMap = NULL ;
+    FSize = NULL ;
+    RSize = NULL ;
+    SSize = NULL ;
+    FOffsets = NULL ;
+    ROffsets = NULL ;
+    SOffsets = NULL ;
+
+    // FUTURE: Add a parameter that disables the GPU if the arithmetic
+    // intensity drops below a user-definable threshold.
+
+    if (useGPU)
+    {
+        // use calloc so that the pointers inside are all NULL
+        QRgpu = (spqr_gpu *) cholmod_l_calloc (1, sizeof(spqr_gpu), cc) ;
+        QRsym->QRgpu = QRgpu ;
+        if(QRgpu)
+        {
+            RimapOffsets = (Long*) cholmod_l_malloc(nf, sizeof(Long), cc) ;
+            QRgpu->RimapOffsets = RimapOffsets  ;
+
+            RjmapOffsets = (Long*) cholmod_l_malloc(nf, sizeof(Long), cc) ;
+            QRgpu->RjmapOffsets = RjmapOffsets ;
+
+            // allocated later
+            QRgpu->numStages = 0 ;
+            QRgpu->Stagingp = (Long*)   NULL ;
+            QRgpu->StageMap = (Long*)   NULL ;
+            QRgpu->FSize    = (size_t*) NULL ;
+            QRgpu->RSize    = (size_t*) NULL ;
+            QRgpu->SSize    = (size_t*) NULL ;
+            QRgpu->FOffsets = (Long*)   NULL ;
+            QRgpu->ROffsets = (Long*)   NULL ;
+            QRgpu->SOffsets = (Long*)   NULL ;
+        }
+
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            spqr_freesym (&QRsym, cc) ;
+            FREE_WORK ;
+            return (NULL) ;
+        }
+    }
+
+    // initialize assembly map sizes (used later)
+    RimapSize = RjmapSize = 0;
+#endif
+
+    // -------------------------------------------------------------------------
+    // allocate workspace needed for parallel analysis
+    // -------------------------------------------------------------------------
+
+    if (do_parallel_analysis)
+    {
+        // allocate Flops and Flops_subtree, each of size nf+1
+        Flops = (double *) cholmod_l_malloc (2*(nf+1), sizeof (double), cc) ;
+        Flops_subtree = Flops + (nf+1) ;
+        if (keepH)
+        {
+            // Rh, size nf; Rh [f] is the size of R and H for front f
+            Rh = (Long *) cholmod_l_malloc (nf, sizeof (Long), cc) ;
+        }
+    }
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freesym (&QRsym, cc) ;
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // construct the supernodal tree and its postordering
+    // -------------------------------------------------------------------------
+
+    // Parent is identical to Sparent of the relaxed supernodes in
+    // cholmod_super_symbolic, but it was not kept.  It needs to be
+    // reconstructed here.   FUTURE WORK: tell CHOLMOD to keep Sparent; some of
+    // this code could be deleted.  Note that cholmod_analyze postorders the
+    // children in order of increasing row count of R, so that bigger children
+    // come later, and the biggest child of front f is front f-1.
+
+    W = (Long *) cc->Iwork ;
+
+    // use W [0:n-1] for SuperMap [
+
+    for (f = 0 ; f < nf ; f++)
+    {
+        // front f has global pivot columns col1: col2-1
+        col1 = Super [f] ;
+        col2 = Super [f+1] ;
+        for (j = col1 ; j < col2 ; j++)
+        {
+            // W [j] = f means that column j is a pivotal column in front f
+            W [j] = f ;
+        }
+    }
+
+    // find the parent of each front
+    for (f = 0 ; f < nf ; f++)
+    {
+        col1 = Super [f] ;              // front f has columns col1:col2-1
+        col2 = Super [f+1] ;
+        p1 = Rp [f] ;                   // Rj [p1..p2-1] = columns in F
+        p2 = Rp [f+1] ;
+        fp = col2 - col1 ;              // first fp columns are pivotal
+        p = p1 + fp ;                   // pointer to first non-pivotal col
+        if (p < p2)
+        {
+            j = Rj [p] ;                // first non-pivot column in F
+            ASSERT (j >= col2 && j < n) ;
+            parent = W [j] ;            // get j's pivotal front
+        }
+        else
+        {
+            parent = nf ;               // placeholder front; root of all
+        }
+        Parent [f] = parent ;
+        Childp [parent]++ ;             // increment count of children
+    }
+    Parent [nf] = EMPTY ;               // placeholder front; root of all
+
+    // W no longer needed for SuperMap ]
+
+    // -------------------------------------------------------------------------
+    // postorder the frontal tree
+    // -------------------------------------------------------------------------
+
+    // use W (2*(nf+1):3*(nf+1)-1) for node weights [
+    Weight = W + 2*(nf+1) ;
+
+    for (f = 0 ; f < nf ; f++)
+    {
+        // Weight [f] = degree of node f (# of columns in front)
+        Weight [f] = (Rp [f+1] - Rp [f]) ;
+        // or ... reverse that order, so big nodes come first.  This can have
+        // an affect on memory usage (sometimes less, sometimes more)
+        // Weight [f] = n - (Rp [f+1] - Rp [f]) ;
+    }
+    Weight [nf] = 1 ;                   // any value will do
+
+    // ensure that CHOLMOD does not reallocate the workspace [
+    cc->no_workspace_reallocate = TRUE ;
+
+    // uses CHOLMOD workspace: Head (nf+1), Iwork (2*(nf+1)).  Guaranteed
+    // to succeed since enough workspace has already been allocated above.
+    cholmod_l_postorder ((SuiteSparse_long *) Parent, nf+1,
+        (SuiteSparse_long *) Weight, (SuiteSparse_long *) Post, cc) ;
+
+    ASSERT (cc->status == CHOLMOD_OK) ;
+    ASSERT (Post [nf] == nf) ;          // placeholder is last
+
+
+    // CHOLMOD can now reallocate the workspace as needed ]
+    cc->no_workspace_reallocate = FALSE ;
+
+    // done using W (2*(nf+1):3*(nf+1)-1) for node weights ]
+
+    // -------------------------------------------------------------------------
+    // construct the lists of children of each front
+    // -------------------------------------------------------------------------
+
+    // replace Childp with cumsum ([0 Childp])
+    spqr_cumsum (nf+1, Childp) ;
+
+    // create the child lists
+    for (kf = 0 ; kf < nf ; kf++)
+    {
+        // place the child c in the list of its parent
+        c = Post [kf] ;
+        ASSERT (c >= 0 && c < nf) ;
+        parent = Parent [c] ;
+        ASSERT (c < parent && parent != EMPTY && parent <= nf) ;
+        Child [Childp [parent]++] = c ;
+    }
+
+    spqr_shift (nf+1, Childp) ;
+    ASSERT (Childp [0] == 0) ;
+    ASSERT (Childp [nf+1] == nf) ;
+
+#ifndef NDEBUG
+    for (kf = 0 ; kf <= nf ; kf++)
+    {
+        f = Post [kf] ;
+        ASSERT (f >= 0 && f <= nf) ;
+        PR (("Front %ld Parent %ld\n", f, Parent [f])) ;
+        for (p = Childp [f] ; p < Childp [f+1] ; p++)
+        {
+            c = Child [p] ;                 // get the child c of front F
+            ASSERT (c < f) ;
+            PR (("   child: %ld\n", c)) ;
+        }
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // S = A (P,Q) in row form, where P = leftmost column sort of A(:,Q)
+    // -------------------------------------------------------------------------
+
+    // use W [0:m-1] workspace in spqr_stranspose1:
+    spqr_stranspose1 (A, QRsym->Qfill, QRsym->Sp, QRsym->Sj, QRsym->PLinv,
+        Sleft, W) ;
+
+    // -------------------------------------------------------------------------
+    // determine flop counts, front sizes, and sequential memory usage
+    // -------------------------------------------------------------------------
+
+    ASSERT (nf <= n) ;
+
+    // was Iwork workspace usage, now saved in QRsym:
+    Fm = QRsym->Fm ;
+    Cm = QRsym->Cm ;
+
+    // The space for Stair and Fmap (total size 2*n+2) is later used for
+    // Task and InvPost (total size 2*nf+2)
+    Stair = W ;             // size n+1 [
+    Fmap = Stair + (n+1) ;  // size n+1 [
+
+    stack = 0 ;             // current stack usage
+    maxstack = 0 ;          // peak stack usage
+
+    rxsize = 0 ;            // total size of the real part of R
+    rhxsize = 0 ;           // total size of the real part of R+H
+    maxfn = 0 ;             // maximum # of columns in any front
+
+    PR (("\n\n =========== sequential\n")) ;
+
+    for (kf = 0 ; ok && kf < nf ; kf++)
+    {
+        f = Post [kf] ;
+        PR (("\n-------------------------- front: %ld\n", f)) ;
+        ASSERT (f >= 0 && f < nf) ;
+
+        // ---------------------------------------------------------------------
+        // analyze the factorization of front F
+        // ---------------------------------------------------------------------
+
+        // pivotal columns Super [f] ... Super [f+1]-1
+        col1 = Super [f] ;          // front f has pivot columns col1:col2-1
+        col2 = Super [f+1] ;
+        p1 = Rp [f] ;               // Rj [p1..p2-1] = columns in F
+        p2 = Rp [f+1] ;
+        fp = col2 - col1 ;          // first fp columns are pivotal
+        fn = p2 - p1 ;              // exact number of columns of F
+        maxfn = MAX (maxfn, fn) ;
+        ASSERT (fp > 0) ;           // all fronts have at least one pivot col
+        ASSERT (fp <= fn) ;
+        ASSERT (fn <= n) ;
+        PR (("  fn %ld fp %ld\n", fn, fp)) ;
+
+        // ---------------------------------------------------------------------
+        // create the Fmap for front F
+        // ---------------------------------------------------------------------
+
+        #ifndef NDEBUG
+        for (col = 0 ; col < n ; col++) Fmap [col] = EMPTY ;
+        #endif
+
+        for (p = p1, j = 0 ; p < p2 ; p++, j++)
+        {
+            col = Rj [p] ;              // global column col is jth col of F
+            Fmap [col] = j ;
+            PR (("  column in front %ld: %ld\n", f, col)) ;
+            #ifndef NPRINT
+            if (j == fp-1) PR (("  -----\n")) ;
+            #endif
+        }
+
+        // If do_rank_detection is false, then there are no possible pivot
+        // column failures; in this case, the analysis is exact.  If
+        // do_rank_detection is true, then worst-case pivot column failures are
+        // considered; in this case, the analysis gives an upper bound.
+
+        // ---------------------------------------------------------------------
+        // initialize the staircase for front F
+        // ---------------------------------------------------------------------
+
+        // initialize the staircase with original rows of S
+        for (j = 0 ; j < fp ; j++)
+        {
+            // global column j+col1 is the jth pivot column of front F
+            col = j + col1 ;
+            Stair [j] = Sleft [col+1] - Sleft [col] ;
+#ifndef NDEBUG
+            for (Long row = Sleft [col] ; row < Sleft [col+1] ; row++)
+            {
+                PR (("Assemble row %ld into stair [%ld] col %ld\n",
+                    row,j, col)) ;
+            }
+#endif
+        }
+
+        // contribution blocks from children will be added here
+        for ( ; j < fn ; j++)
+        {
+            Stair [j] = 0 ;
+        }
+
+        // ---------------------------------------------------------------------
+        // assemble each child
+        // ---------------------------------------------------------------------
+
+        ctot = 0 ;
+        for (p = Childp [f] ; p < Childp [f+1] ; p++)
+        {
+            c = Child [p] ;                 // get the child c of front F
+            ASSERT (c >= 0 && c < f) ;
+            pc = Rp [c] ;
+            fnc = Rp [c+1] - pc ;           // total # cols in child F
+            fpc = Super [c+1] - Super [c] ; // # of pivot cols in child
+            cn = fnc - fpc ;                // # of cols in child C
+            fmc = Fm [c] ;                  // max or exact # rows in child
+
+            if (do_rank_detection)
+            {
+                // with possible pivot failures
+                // fmc is an upper bound on the # of rows in child F
+                cm = MIN (fmc, cn) ;        // max # rows in child C
+            }
+            else
+            {
+                // with no pivot failures
+                // fmc is the exact # of rows in child F
+                Long rc = MIN (fmc, fpc) ;   // exact # of rows in child R
+                cm = MAX (fmc - rc, 0) ;
+                cm = MIN (cm, cn) ;         // exact # rows in C
+            }
+            ASSERT (cm >= 0 && cm <= cn) ;
+            ASSERT (pc + cm <= Rp [c+1]) ;
+
+            ASSERT (cm == Cm [c]) ;
+
+            // add the child rows to the staircase
+            for (ci = 0 ; ci < cm ; ci++)
+            {
+                col = Rj [pc + fpc + ci] ;  // leftmost col of row ci
+                j = Fmap [col] ;            // global col is jth col of F
+                ASSERT (j >= 0 && j < fn) ;
+                Stair [j]++ ;               // add row ci to jth Stair
+                #ifndef NDEBUG
+                {
+                    PR (("Assemble c %ld into stair [%ld] col %ld\n",
+                        c,j,col)) ;
+                }
+                #endif
+                ASSERT (col >= Super [c+1] && col < n) ;
+            }
+
+            // Keep track of total sizes of C blocks of all children.  The
+            // C block of this child has at most cm rows, and always has
+            // (fnc-fpc) columns.  Long overflow cannot occur because csize
+            // < fsize of the child and fsize has already been checked.
+            csize = cm*(cm+1)/2 + cm*(cn-cm) ;
+            ctot += csize ;
+
+            PR (("child %ld size %ld  = %ld * %ld\n", c, cm*cn, cm, cn)) ;
+        }
+
+        // ---------------------------------------------------------------------
+        // replace Stair with cumsum (Stair), and find # rows of F
+        // ---------------------------------------------------------------------
+
+        fm = 0 ;
+        for (j = 0 ; j < fn ; j++)
+        {
+            fm += Stair [j] ;
+            Stair [j] = fm ;
+            PR (("j %ld Stair %ld\n", j, Stair [j])) ;
+        }
+        PR (("fm %ld\n", fm)) ;
+
+        // ---------------------------------------------------------------------
+        // determine upper bounds on the size F
+        // ---------------------------------------------------------------------
+
+        // The front F is at most fm-by-fn, with fp pivotal columns.
+
+        fsize = spqr_mult (fm, fn, &ok) ;
+        PR (("fm %ld fn %ld rank %d\n", fm, fn, do_rank_detection)) ;
+        if (!ok)
+        {
+            // problem too large
+            break ;
+        }
+
+        ASSERT (fm >= 0) ;
+        ASSERT (fn >= 0) ;
+        ASSERT (fp >= 0 && fp <= fn) ;
+
+        Fm [f] = fm ;        // keep track of # rows of F
+
+        // ---------------------------------------------------------------------
+        // determine upper bounds on the size R, if H not kept
+        // ---------------------------------------------------------------------
+
+        // The R block of F is at most rm-by-rn packed upper trapezoidal.
+        rm = MIN (fm, fp) ;     // exact/max # of rows of R block
+        rn = fn ;               // exact/max # of columns of R block
+        ASSERT (rm <= rn) ;
+        ASSERT (rm >= 0) ;
+        ASSERT (rm <= fm) ;
+        rsize = rm*(rm+1)/2 + rm*(rn-rm) ;  // Long overflow cannot occur
+        ASSERT (rsize >= 0 && rsize <= fsize) ;
+        rxsize += rsize ;
+        PR ((" rm %ld rn %ld rsize %ld\n", rm, rn, rsize)) ;
+
+        // ---------------------------------------------------------------------
+        // determine upper bounds on the size C
+        // ---------------------------------------------------------------------
+
+        // The C block of F is at most cm-by-cn packed upper trapezoidal
+        cn = fn - fp ;          // exact # of columns in C block
+
+        // with rank detection and possible pivot failures
+        cm_max = fm ;
+        cm_max = MIN (cm_max, cn) ;         // max # rows in C block of F
+
+        // with no pivot failures
+        cm_min = MAX (fm - rm, 0) ;
+        cm_min = MIN (cm_min, cn) ;         // exact # rows in C block
+
+        // Long overflow cannot occur:
+        csize_max = cm_max*(cm_max+1)/2 + cm_max*(cn-cm_max) ;
+        csize_min = cm_min*(cm_min+1)/2 + cm_min*(cn-cm_min) ;
+        csize = do_rank_detection ? csize_max : csize_min ;
+
+        Cm [f] = do_rank_detection ? cm_max : cm_min ;
+
+        PR (("this front cm: [ %ld %ld ], cn %ld csize %ld [%ld to %ld]\n",
+            cm_min, cm_max, cn, csize, csize_min, csize_max)) ;
+        ASSERT (csize >= 0 && csize <= fsize) ;
+        ASSERT (cm_min >= 0) ;
+        ASSERT (cm_max >= 0) ;
+        ASSERT (cn >= 0) ;
+        ASSERT (cm_min <= cn) ;
+        ASSERT (cm_max <= cn) ;
+        ASSERT (cm_min <= cm_max) ;
+        ASSERT (csize_min <= csize_max) ;
+
+#ifdef GPU_BLAS
+        if(useGPU)
+        {
+            // Compute Rjmap Offsets.
+            RjmapOffsets[f] = RjmapSize;
+            RjmapSize += fn - fp;               // # cols - # piv cols
+
+            // Compute Rimap Offsets.
+            RimapOffsets[f] = RimapSize;
+            RimapSize += Cm[f];                 // # rows of C
+
+            // Munge Sj to cut down on assembly time.
+            for(Long k=0 ; k<fp ; k++)
+            {
+                /* assemble all rows whose leftmost global column index is
+                 * k+col1 */
+                Long leftcol = k + col1 ;
+                for (Long row = Sleft[leftcol] ; row < Sleft[leftcol+1] ; row++)
+                {
+                    /* scatter the row into F */
+                    for (p=Sp[row] ; p<Sp[row+1] ; p++) Sj[p] = Fmap[Sj[p]];
+                }
+            }
+        }
+#endif
+
+        // ---------------------------------------------------------------------
+        // determine flop counts and upper bounds on the size R+H if H kept
+        // ---------------------------------------------------------------------
+
+        double fflops = 0 ;                 // flop count for this front
+        Long rhsize = 0 ;                   // count entire staircase
+        for (j = 0 ; j < fn ; j++)
+        {
+            t = MAX (j+1, Stair [j]) ;      // assume diagonal is present
+            t = MIN (t, fm) ;               // except t cannot exceed fm
+            PR (("   j %ld Stair %ld t %ld\n", j, Stair [j], t)) ;
+            rhsize += t ;                   // Long overflow cannot occur
+            if (t > j)
+            {
+                double h = (t-j) ;          // length of Householder vector
+                fflops += 3*h               // compute Householder vector
+                    + 4*h*(fn-j-1) ;        // apply to cols j+1:fn-1
+            }
+        }
+
+        rhsize -= csize_min ;               // then exclude C block
+
+        if (keepH && do_parallel_analysis)
+        {
+            Rh [f] = rhsize ;
+        }
+
+        rhxsize += rhsize ;
+
+        PR (("\n --- front f %ld fsize %ld csize %ld\n",
+            f, fsize, csize)) ;
+        PR (("    rsize %ld  rhsize %ld\n", rsize, rhsize)) ;
+        PR (("    parent %ld\n", Parent [f])) ;
+        PR (("Front %ld RHSIZE predicted: %ld\n", f, rhsize)) ;
+        ASSERT (rhsize >= 0 && rhsize <= fsize) ;
+
+        ASSERT (rhsize >= rsize) ;
+
+        // ---------------------------------------------------------------------
+        // find the flop count for node f and all its descendants
+        // ---------------------------------------------------------------------
+
+        total_flops += fflops ;
+        if (do_parallel_analysis)
+        {
+            Flops [f] = fflops ;            // flops for just f itself
+            for (p = Childp [f] ; p < Childp [f+1] ; p++)
+            {
+                fflops += Flops_subtree [Child [p]] ;
+            }
+            // flops for entire subtree rooted at f, including f itself
+            Flops_subtree [f] = fflops ;
+        }
+
+        // ---------------------------------------------------------------------
+        // estimate stack usage for sequential case
+        // ---------------------------------------------------------------------
+
+        // allocate the front F
+        stack = spqr_add (stack, fsize, &ok) ;
+        maxstack = MAX (maxstack, stack) ;
+
+        // assemble/delete children and factor F
+        stack -= ctot ;
+        ASSERT (stack >= 0) ;
+
+        // create the C block for front F
+        stack = spqr_add (stack, csize, &ok) ;
+        maxstack = MAX (maxstack, stack) ;
+
+        // delete F
+        stack -= fsize ;
+        ASSERT (stack >= 0) ;
+
+        if (keepH)
+        {
+            // allocate RH in place of F (no additional memory required)
+            stack += rhsize ;
+
+        }
+        else
+        {
+            // allocate R in place of F (no additional memory required)
+            stack += rsize ;
+        }
+    }
+
+#ifdef GPU_BLAS
+    if(useGPU)
+    {
+        /* Save GPU size members. */
+        QRgpu->RjmapSize = RjmapSize;
+        QRgpu->RimapSize = RimapSize;
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // compute Hip
+    // -------------------------------------------------------------------------
+
+    hisize = 0 ;            // total size of the row indices of H
+    if (keepH)
+    {
+        for (f = 0 ; f < nf ; f++)
+        {
+            // allocate Hi
+            fm = Fm [f] ;           // # rows of F
+            Hip [f] = hisize ;
+            hisize = spqr_add (hisize, fm, &ok) ;
+        }
+        Hip [nf] = hisize ;
+    }
+
+    // -------------------------------------------------------------------------
+    // check for Long overflow
+    // -------------------------------------------------------------------------
+
+    PR (("stack     %ld\n", stack)) ;
+    PR (("maxstack  %ld\n", maxstack)) ;
+    PR (("rxsize    %ld\n", rxsize)) ;
+    PR (("ok %d m %ld n %ld nf: %ld stacksize: %ld\n", ok,
+        m, n, nf, maxstack)) ;
+
+    if (!ok)
+    {
+        // Long overflow has occured
+        spqr_freesym (&QRsym, cc) ;
+        FREE_WORK ;
+        ERROR (CHOLMOD_TOO_LARGE, "problem too large") ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // finalize flop counts and turn off parallelism if problem too small
+    // -------------------------------------------------------------------------
+
+    if (do_parallel_analysis)
+    {
+        Flops [nf] = 0 ;
+        Flops_subtree [nf] = total_flops ;
+
+#ifndef NDEBUG
+        double fflops2 = 0 ;
+        for (p = Childp [nf] ; p < Childp [nf+1] ; p++)
+        {
+            c = Child [p] ;                 // get a root (child of nf)
+            fflops2 += Flops_subtree [c] ;  // add the flops of the root
+        }
+        PR (("fflops2 %g %g\n", fflops2, total_flops)) ;
+        ASSERT (fflops2 == total_flops) ;
+#endif
+
+        if (total_flops < cc->SPQR_small)
+        {
+            // problem is too small for parallelism
+            do_parallel_analysis = FALSE ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // sequential wrap-up
+    // -------------------------------------------------------------------------
+
+    ASSERT (IMPLIES (!keepH, stack == rxsize)) ;
+    ASSERT (IMPLIES (keepH, stack == rhxsize)) ;
+
+    QRsym->maxstack = maxstack ;    // max size of stack
+    QRsym->hisize = hisize ;        // max size of int part of H
+    QRsym->maxfn = maxfn ;          // max # of columns in any frontal matrix
+
+    cc->SPQR_flopcount_bound = total_flops ;   // total bound on flop count
+
+    cc->SPQR_istat [0] = rxsize ;              // nnz (R)
+    cc->SPQR_istat [1] = rhxsize - rxsize ;    // nnz (H)
+    cc->SPQR_istat [2] = nf ;                  // number of frontal matrices
+    cc->SPQR_istat [3] = 1 ;                   // ntasks, for now
+
+    DEBUG (spqrDebug_dump_Parent (nf+1, Parent, "pfile")) ;
+    DEBUG (spqrDebug_dump_Parent (1, NULL, "tfile")) ;
+
+    PR (("flops %g\n", total_flops)) ;
+
+#ifdef GPU_BLAS
+
+    // -------------------------------------------------------------------------
+    // if we're using GPU acceleration, construct static gpu stages
+    // -------------------------------------------------------------------------
+
+    if(useGPU)
+    {
+        /* Compute a schedule based on memory requirements. */
+        QRgpu->Stagingp = (Long*)   cholmod_l_malloc(nf+2, sizeof(Long), cc);
+        QRgpu->StageMap = (Long*)   cholmod_l_malloc(nf, sizeof(Long), cc);
+        QRgpu->FSize    = (size_t*) cholmod_l_malloc(nf+1, sizeof(size_t), cc);
+        QRgpu->RSize    = (size_t*) cholmod_l_malloc(nf+1, sizeof(size_t), cc);
+        QRgpu->SSize    = (size_t*) cholmod_l_malloc(nf+1, sizeof(size_t), cc);
+        QRgpu->FOffsets = (Long*)   cholmod_l_malloc(nf, sizeof(Long), cc);
+        QRgpu->ROffsets = (Long*)   cholmod_l_malloc(nf, sizeof(Long), cc);
+        QRgpu->SOffsets = (Long*)   cholmod_l_malloc(nf, sizeof(Long), cc);
+
+        Stagingp = QRgpu->Stagingp ;
+        StageMap = QRgpu->StageMap ;
+        FSize    = QRgpu->FSize    ;
+        RSize    = QRgpu->RSize    ;
+        SSize    = QRgpu->SSize    ;
+        FOffsets = QRgpu->FOffsets ;
+        ROffsets = QRgpu->ROffsets ;
+        SOffsets = QRgpu->SOffsets ;
+
+        /* Check for out of memory when allocating staging fields. */
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            spqr_freesym (&QRsym, cc) ;
+            FREE_WORK ;
+            return (NULL) ;
+        }
+
+        /* Compute the front staging. */
+        bool feasible;
+        spqrgpu_computeFrontStaging (nf, Parent, Childp, Child, Fm, Cm, Rp,
+            Sp, Sleft, Super, Post, RimapSize, RjmapSize,
+            &feasible, &numStages, Stagingp, StageMap,
+            FSize, RSize, SSize, FOffsets, ROffsets, SOffsets, cc);
+
+        #ifndef NPRINT
+        PR (("Is schedule feasible? %s with %ld stages.\n",
+            feasible ? "yes" : "no", numStages)) ;
+        #endif
+
+        /* If we're not feasible then return that the problem is
+           too large to run on the GPU. */
+        if(!feasible)
+        {
+            spqr_freesym (&QRsym, cc) ;
+            FREE_WORK ;
+            return (NULL) ;
+        }
+
+        // save the total # of stages
+        QRgpu->numStages = numStages;
+    }
+
+#endif
+
+    // -------------------------------------------------------------------------
+    // quick return if no parallel analysis
+    // -------------------------------------------------------------------------
+
+    if (!do_parallel_analysis)
+    {
+        // turn off parallelism and return the QRsym result
+        QRsym->ntasks = 1 ;
+        QRsym->ns = 1 ;
+        FREE_WORK ;
+        return (QRsym) ;
+    }
+
+    // =========================================================================
+    // === parallel analysis ===================================================
+    // =========================================================================
+
+    // a front f is "big" if the work in the subtree rooted at f is > big_flops
+
+    double big_flops = total_flops / cc->SPQR_grain ;
+    big_flops = MAX (big_flops, cc->SPQR_small) ;
+    double small_flops = big_flops / 16 ;
+    PR (("total flops %g\n", total_flops)) ;
+    PR (("big flops   %g\n", big_flops)) ;
+    PR (("small flops %g\n", small_flops)) ;
+
+    // -------------------------------------------------------------------------
+    // initialize task assignment for each node
+    // -------------------------------------------------------------------------
+
+    // Stair, Fmap no longer needed ] ]
+    // Still need Fm, Cm, Rh, Flops, and Flops_subtree however.
+    // Since Stair and Fmap are no longer needed, we can use that workspace for
+    // Task and InvPost.  Fm and Cm in W [0:...] are still needed.
+
+    Task = W ;                          // size nf+1 [
+    InvPost = Task + (nf+1) ;           // size nf+1 [
+
+    for (Long k = 0 ; k <= nf ; k++)
+    {
+        f = Post [k] ;
+        InvPost [f] = k ;
+    }
+
+    // Task [f] will be in one of four states: (a) small and unassigned, (b)
+    // small and assigned, (c) pending with no small child task, (c) pending
+    // with small child task.  For big nodes, the task assignment is pending,
+    // and a pending task can have registered with it a small child task t.
+    // This is done by setting Task [f] to -t-3; note that this value is always
+    // < -2.  A pending node f with no small child task t is denoted with Task
+    // [f] = -2.  For small nodes, the task assignment is empty (-1) or is
+    // assigned to a task t = Task [f] where t >= 0.
+
+#define PENDING (-2)
+#define TASK_IS_PENDING(f) (Task [f] <= PENDING)
+#define SMALL_TASK(f) (TASK_IS_PENDING (f) ? ((- Task [f]) - 3) : EMPTY)
+#define ASSIGN_SMALL_TASK(f,task) { Task [f] = -(task) - 3 ; }
+
+    for (f = 0 ; f < nf ; f++)
+    {
+        // a big node is marked pending, and will not be assigned in first pass.
+        // Task [f] = PENDING means that the subtree rooted at f has more than
+        // big_flops work in it.
+        Task [f] = (Flops_subtree [f] > big_flops) ? PENDING : EMPTY ;
+        ASSERT (SMALL_TASK (f) == EMPTY) ;
+    }
+    Task [nf] = PENDING ;
+    ASSERT (SMALL_TASK (nf) == EMPTY) ;
+
+    for (f = 0 ; f <= nf ; f++)
+    {
+        PR (("front %ld parent %ld flops %g subtree flops %g task %ld\n",
+            f, Parent [f], Flops [f], Flops_subtree [f], Task [f])) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // assign small subtrees to tasks
+    // -------------------------------------------------------------------------
+
+    // The contents of Flops_subtree is required only for fronts marked with
+    // Task [f] = EMPTY.  For a big front (one marked Task [f] = PENDING), this
+    // information is no longer needed.  However, a large front f keeps track
+    // of its mostly recently seen small child, and for this Flops_subtree [f]
+    // is used.
+
+    ntasks = 0 ;
+
+    PR (("\n\n =========== parallel \n")) ;
+
+    for (kf = 0 ; kf < nf ; kf++)
+    {
+        Long fstart = Post [kf] ;
+        if (Task [fstart] != EMPTY)
+        {
+            // fstart is already assigned to a task, or it's a pending big
+            // task; skip it
+            continue ;
+        }
+
+        PR (("\nfstart: %ld\n", fstart)) ;
+        ASSERT (!TASK_IS_PENDING (fstart)) ;
+
+        // ---------------------------------------------------------------------
+        // traverse f towards the root, stopping at a pending (big) node
+        // ---------------------------------------------------------------------
+
+        for (f = fstart ; Task [Parent [f]] == EMPTY ; f = Parent [f])
+        {
+            PR (("    front %ld flops %g %g parent %ld (%ld)\n", f,
+                Flops [f], Flops_subtree [f],
+                Parent [f], Task [Parent [f]])) ;
+            ASSERT (f >= 0 && f < nf) ;
+            ASSERT (Parent [f] >= 0 && Parent [f] <= nf) ;
+            ASSERT (Task [f] == EMPTY) ;
+            ASSERT (!TASK_IS_PENDING (f)) ;
+        }
+
+        Long flast = f ;
+        parent = Parent [flast] ;
+
+        PR (("    >>> flast is %ld  flops: %g parent: %ld\n", flast,
+            Flops_subtree [flast], parent)) ;
+
+        // we are guaranteed not to see an assigned node
+        ASSERT (flast >= 0 && flast < nf) ;
+        ASSERT (parent >= 0 && parent <= nf) ;
+
+        // the task assignment of the parent is pending
+        // ASSERT (Task [parent] == PENDING) ;
+        ASSERT (TASK_IS_PENDING (parent)) ;
+
+        // the path is fstart --> flast, all marked empty
+
+        // ---------------------------------------------------------------------
+        // start a new task, or merge with a prior sibling
+        // ---------------------------------------------------------------------
+
+        double flops = Flops_subtree [flast] ;
+        if (SMALL_TASK (parent) == EMPTY)
+        {
+            // pending parent of flast has no small child task;  get new task
+            task = ntasks++ ;
+            if (flops <= small_flops)
+            {
+                // this task is small; register it and its flop count w/ parent
+                PR (("    a new small task child of %ld\n", parent)) ;
+                ASSIGN_SMALL_TASK (parent, task) ;
+                Flops_subtree [parent] = flops ;
+            }
+        }
+        else
+        {
+            // The parent of flast has a prior small child task, which is rooted
+            // at a node that is a sibling of flast.  Reuse that task for
+            // the subtree rooted at flast.  Keep track of the flops of this
+            // new subtree and the old small_task, and remove the small task
+            // if it gets large enough to be no longer "small".
+            task = SMALL_TASK (parent) ;
+            Flops_subtree [parent] += flops ;
+            PR (("    merge with prior small task %ld of parent %ld\n",
+                task, parent)) ;
+            if (flops > small_flops)
+            {
+                // the merged task is now large enough to be no longer small;
+                // remove it from the small child task of the parent so the
+                // next child of this parent doesn't merge with it.
+                ASSIGN_SMALL_TASK (parent, task) ;
+                Flops_subtree [parent] = 0 ;
+                PR (("    no longer small, flops is %g\n", flops)) ;
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // place all nodes in the subtree rooted at flast in the current task
+        // ---------------------------------------------------------------------
+
+        klast = InvPost [flast] ;
+        for (Long k = kf ; k <= klast ; k++)
+        {
+            f = Post [k] ;
+            PR (("    assign %ld to %ld\n", f, task)) ;
+            ASSERT (Task [f] == EMPTY) ;
+            Task [f] = task ;
+        }
+    }
+
+    // InvPost [0:nf] no longer needed ]
+
+    for (f = 0 ; f <= nf ; f++)
+    {
+        PR (("Front %ld task %ld : parent %ld task %ld\n",
+            f, Task [f], Parent [f],
+            (Parent [f] == EMPTY) ? -999 : Task [Parent [f]])) ;
+        ASSERT (Task [f] != EMPTY) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // complete the assignment for large nodes
+    // -------------------------------------------------------------------------
+
+    for (f = 0 ; f < nf ; f++)
+    {
+        // if (Task [f] == PENDING)
+        if (TASK_IS_PENDING (f))
+        {
+            // if f has no children, or children in more than one task
+            // the create a new task for f.  Otherwise, assign f to the task
+            // of its child(ren).
+            PR (("\nassign pending front %ld:\n", f)) ;
+            if ((Childp [f+1] - Childp [f]) == 0)
+            {
+                // task f has no children; create a new task for it
+                task = ntasks++ ;
+                PR (("Pending %ld has no children (new task %ld)\n", f,task)) ;
+            }
+            else
+            {
+                task = EMPTY ;
+                for (p = Childp [f] ; p < Childp [f+1] ; p++)
+                {
+                    c = Child [p] ;
+                    PR (("child %ld in task %ld\n", c, Task [c])) ;
+                    ASSERT (!TASK_IS_PENDING (c)) ;
+                    if (task == EMPTY)
+                    {
+                        // get the task of the first child of f
+                        task = Task [c] ;
+                        ASSERT (task >= 0 && task < ntasks) ;
+                    }
+                    else if (Task [c] != task)
+                    {
+                        // f has children from more than one task; create a new
+                        // task for front f
+                        task = ntasks++ ;
+                        PR (("Pending %ld (new task %ld)\n", f, task)) ;
+                        break ;
+                    }
+                }
+            }
+            PR (("Assign %ld to task %ld\n", f, task)) ;
+            ASSERT (task != EMPTY) ;
+            Task [f] = task ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // quick return if only one real task found
+    // -------------------------------------------------------------------------
+
+    if (ntasks <= 1)
+    {
+        // No parallelism found
+        QRsym->ntasks = 1 ;
+        QRsym->ns = 1 ;
+        FREE_WORK ;
+        return (QRsym) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // wrap-up the task assignment
+    // -------------------------------------------------------------------------
+
+    Task [nf] = ntasks++ ;      // give the placeholder its own task
+
+#ifndef NDEBUG
+    PR (("\nFinal assignment: ntasks %ld nf %ld\n", ntasks, nf)) ;
+    ASSERT (ntasks <= nf+1) ;
+    // reuse Flops_subtree to compute flops for each task
+    for (task = 0 ; task < ntasks ; task++)
+    {
+        Flops_subtree [task] = 0 ;
+    }
+    for (f = 0 ; f < nf ; f++)
+    {
+        ASSERT (Task [f] >= 0 && Task [f] < ntasks) ;
+        Flops_subtree [Task [f]] += Flops [f] ;
+    }
+    for (f = 0 ; f <= nf ; f++)
+    {
+        PR (("Front %ld task %ld : parent %ld task %ld\n",
+            f, Task [f], Parent [f],
+            (Parent [f] == EMPTY) ? -999 : Task [Parent [f]])) ;
+        ASSERT (!TASK_IS_PENDING (f)) ;
+        ASSERT (Task [f] >= 0 && Task [f] < ntasks) ;
+        if (f < nf && Task [f] != Task [Parent [f]])
+        {
+            PR (("%ld task %ld parent %ld flops %g\n",
+                f, Task [f],
+                Task [Parent [f]],
+                Flops_subtree [Task [f]])) ;
+        }
+    }
+    PR (("\n")) ;
+#endif
+
+    // Flops no longer needed
+    cholmod_l_free (2*(nf+1), sizeof (double), Flops, cc) ;
+    Flops = NULL ;
+    Flops_subtree = NULL ;
+
+    // In the frontal tree, there is one node per front (0 to nf-1), plus one
+    // placeholder node (nf) that is the root of the tree, for a total of nf+1
+    // nodes.  Note that a tree can have nf=0 (a matrix with m=0 rows).  There
+    // is at most one task per node, including the placeholder.
+    ASSERT (ntasks <= nf + 1) ;
+    ASSERT (ntasks >= 3) ;
+    QRsym->ntasks = ntasks ;
+    cc->SPQR_istat [3] = ntasks ;
+
+    // -------------------------------------------------------------------------
+    // allocate space for the parallel analysis
+    // -------------------------------------------------------------------------
+
+    // FUTURE: TaskStack could be deleted as temp workspace.
+    // During factorization, just get On_stack [f] for first f in the task.
+
+    // TaskParent is temporary workspace:
+    TaskParent = (Long *) cholmod_l_malloc (ntasks,   sizeof (Long), cc) ;
+
+    TaskChildp = (Long *) cholmod_l_calloc (ntasks+2, sizeof (Long), cc) ;
+    TaskChild  = (Long *) cholmod_l_calloc (ntasks+1, sizeof (Long), cc) ;
+    TaskFront  = (Long *) cholmod_l_malloc (nf+1,     sizeof (Long), cc) ;
+    TaskFrontp = (Long *) cholmod_l_calloc (ntasks+2, sizeof (Long), cc) ;
+    TaskStack  = (Long *) cholmod_l_malloc (ntasks+1, sizeof (Long), cc) ;
+    On_stack   = (Long *) cholmod_l_malloc (nf+1,     sizeof (Long), cc) ;
+
+    QRsym->TaskFront  = TaskFront ;
+    QRsym->TaskFrontp = TaskFrontp ;
+    QRsym->TaskChild  = TaskChild ;
+    QRsym->TaskChildp = TaskChildp ;
+    QRsym->TaskStack  = TaskStack ;
+    QRsym->On_stack   = On_stack ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freesym (&QRsym, cc) ;
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // build the task tree
+    // -------------------------------------------------------------------------
+
+    for (task = 0 ; task < ntasks ; task++)
+    {
+        TaskParent [task] = EMPTY ;
+    }
+
+    for (f = 0 ; f < nf ; f++)
+    {
+        Long my_task = Task [f] ;
+        Long parent_task = Task [Parent [f]] ;
+        PR (("f %ld Task %ld parent %ld, Task of parent %ld\n",
+            f, my_task, Parent [f], Task [Parent [f]])) ;
+        if (my_task != parent_task)
+        {
+            TaskParent [my_task] = parent_task ;
+        }
+    }
+
+    DEBUG (spqrDebug_dump_Parent (ntasks, TaskParent, "tfile")) ;
+
+    // count the child tasks of each task
+    for (task = 0 ; task < ntasks ; task++)
+    {
+        parent = TaskParent [task] ;
+        if (parent != EMPTY)
+        {
+            TaskChildp [parent]++ ;
+        }
+    }
+
+    // construct TaskChildp pointers
+    spqr_cumsum (ntasks, TaskChildp) ;
+
+    // create the child lists
+    for (Long child_task = 0 ; child_task < ntasks ; child_task++)
+    {
+        // place the child c in the list of its parent
+        parent = TaskParent [child_task] ;
+        if (parent != EMPTY)
+        {
+            TaskChild [TaskChildp [parent]++] =  child_task ;
+        }
+    }
+
+    spqr_shift (ntasks, TaskChildp) ;
+
+#ifndef NPRINT
+    for (task = 0 ; task < ntasks ; task++)
+    {
+        PR (("Task %ld children:\n", task)) ;
+        for (p = TaskChildp [task] ; p < TaskChildp [task+1] ; p++)
+        {
+            PR (("  %ld\n", TaskChild [p])) ;
+        }
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // create lists of fronts for each task
+    // -------------------------------------------------------------------------
+
+    // count the number of fronts in each task
+    for (f = 0 ; f < nf ; f++)
+    {
+        TaskFrontp [Task [f]]++ ;
+    }
+
+    // construct TaskFrontp pointers
+    spqr_cumsum (ntasks+1, TaskFrontp) ;
+
+    // create the front lists for each task, in postorder
+    for (kf = 0 ; kf < nf ; kf++)
+    {
+        f = Post [kf] ;
+        task = Task [f] ;
+        TaskFront [TaskFrontp [task]++] = f ;
+    }
+
+    spqr_shift (ntasks+1, TaskFrontp) ;
+
+    // Task [0:nf] no longer needed ]
+
+    // -------------------------------------------------------------------------
+    // assign a stack to each task
+    // -------------------------------------------------------------------------
+
+    PR (("\n\nAssign stacks to tasks\n")) ;
+
+    for (task = 0 ; task < ntasks ; task++)
+    {
+        TaskStack [task] = EMPTY ;
+    }
+
+    for (Long task_start = 0 ; task_start < ntasks ; task_start++)
+    {
+        if (TaskStack [task_start] == EMPTY)
+        {
+            // start a new stack
+            Long s = ns++ ;
+            for (task = task_start ;
+                task != EMPTY && TaskStack [task] == EMPTY ;
+                task = TaskParent [task])
+            {
+                TaskStack [task] = s ;
+            }
+        }
+        PR (("Task %ld on stack %ld   parent %ld\n",
+            task_start, TaskStack [task_start], TaskParent [task_start])) ;
+    }
+
+    // first task (task = 0) always uses the first stack
+    ASSERT (TaskStack [0] == 0) ;
+
+    // There is exactly one stack per leaf in the task tree, and thus at most
+    // one stack per task.
+    ASSERT (ns > 1 && ns <= ntasks) ;
+    QRsym->ns = ns ;
+
+    for (task = 0 ; task < ntasks ; task++)
+    {
+        Long s = TaskStack [task] ;
+        PR (("\nTask %ld children:\n", task)) ;
+        for (p = TaskChildp [task] ; p < TaskChildp [task+1] ; p++)
+        {
+            PR (("  child Task %ld\n", TaskChild [p])) ;
+        }
+        PR (("\nTask %ld fronts: nf = %ld\n", task, nf)) ;
+        for (p = TaskFrontp [task] ; p < TaskFrontp [task+1] ; p++)
+        {
+            f = TaskFront [p] ;
+            PR (("  Front %ld task %ld stack %ld\n",f, task, TaskStack [task]));
+            ASSERT (f >= 0 && f < nf) ;
+            On_stack [f] = s ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate the rest of QRsym
+    // -------------------------------------------------------------------------
+
+    // temporary workspace:
+    // Stack_stack (s): current stack usage
+    Stack_stack = (Long *) cholmod_l_calloc (ns+2, sizeof (Long), cc) ;
+
+    // permanent part of QRsym:
+    // Stack_maxstack (s): peak stack usage if H not kept
+    Stack_maxstack = (Long *) cholmod_l_calloc (ns+2, sizeof (Long), cc) ;
+
+    // FUTURE: keep track of maxfn for each stack
+
+    QRsym->Stack_maxstack = Stack_maxstack ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freesym (&QRsym, cc) ;
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // find the stack sizes
+    // -------------------------------------------------------------------------
+
+    for (kf = 0 ; kf < nf ; kf++)
+    {
+
+        // ---------------------------------------------------------------------
+        // analyze the factorization of front F on stack s
+        // ---------------------------------------------------------------------
+
+        f = Post [kf] ;
+        Long s = On_stack [f] ;
+        PR (("\n----------------------- front: %ld on stack %ld\n", f, s)) ;
+        ASSERT (f >= 0 && f < nf) ;
+        ASSERT (s >= 0 && s < ns) ;
+
+        // fp = # of pivotal columns (Super [f] ... Super [f+1]-1)
+        fp = Super [f+1] - Super[f] ;
+        fn = Rp [f+1] - Rp [f] ;    // exact number of columns of F
+        ASSERT (fp > 0) ;           // all fronts have at least one pivot col
+        ASSERT (fp <= fn) ;
+        ASSERT (fn <= n) ;
+        PR (("  fn %ld fp %ld\n", fn, fp)) ;
+
+        // ---------------------------------------------------------------------
+        // assemble each child (ignore children from other stacks)
+        // ---------------------------------------------------------------------
+
+        ctot = 0 ;
+        for (p = Childp [f] ; p < Childp [f+1] ; p++)
+        {
+            c = Child [p] ;                 // get the child c of front F
+            ASSERT (c >= 0 && c < f) ;
+            if (On_stack [c] != s)
+            {
+                // skip this child if not on my own stack
+                PR (("child %ld skip\n", c)) ;
+                continue ;
+            }
+            fnc = Rp [c+1] - Rp [c] ;       // total # cols in child F
+            fpc = Super [c+1] - Super [c] ; // # of pivot cols in child
+            cn = fnc - fpc ;                // # of cols in child C
+            cm = Cm [c] ;                   // # of rows in child C
+            ASSERT (cm >= 0 && cm <= cn) ;
+            csize = cm*(cm+1)/2 + cm*(cn-cm) ;
+            ctot += csize ;
+            PR (("child %ld size %ld  = %ld * %ld\n", c, cm*cn, cm, cn)) ;
+        }
+
+        // ---------------------------------------------------------------------
+        // determine upper bounds on the size F
+        // ---------------------------------------------------------------------
+
+        // The front F is at most fm-by-fn, with fp pivotal columns.
+        fm = Fm [f] ;                       // # rows of F
+        fsize = fm * fn ;
+        ASSERT (fm >= 0) ;
+        ASSERT (fn >= 0) ;
+        ASSERT (fp >= 0 && fp <= fn) ;
+        PR (("fm %ld fn %ld rank %d\n", fm, fn, do_rank_detection)) ;
+        ASSERT (IMPLIES (keepH, fm == (Hip [f+1] - Hip [f]))) ;
+
+        // ---------------------------------------------------------------------
+        // determine upper bounds on the size R
+        // ---------------------------------------------------------------------
+
+        // The R block of F is at most rm-by-rn packed upper trapezoidal.
+        rm = MIN (fm, fp) ;     // exact/max # of rows of R block
+        rn = fn ;               // exact/max # of columns of R block
+        ASSERT (rm <= rn) ;
+        ASSERT (rm >= 0) ;
+        ASSERT (rm <= fm) ;
+        rsize = rm*(rm+1)/2 + rm*(rn-rm) ;
+        ASSERT (rsize >= 0 && rsize <= fsize) ;
+        PR ((" rm %ld rn %ld rsize %ld\n", rm, rn, rsize)) ;
+
+        // ---------------------------------------------------------------------
+        // determine upper bounds on the size C
+        // ---------------------------------------------------------------------
+
+        // The C block of F is at most cm-by-cn packed upper trapezoidal
+        cn = fn - fp ;          // exact # of columns in C block
+
+        // with rank detection and possible pivot failures
+        cm_max = fm ;
+        cm_max = MIN (cm_max, cn) ;         // max # rows in C block of F
+
+        // with no pivot failures
+        cm_min = MAX (fm - rm, 0) ;
+        cm_min = MIN (cm_min, cn) ;         // exact # rows in C block
+
+        // Long overflow cannot occur:
+        csize_max = cm_max*(cm_max+1)/2 + cm_max*(cn-cm_max) ;
+        csize_min = cm_min*(cm_min+1)/2 + cm_min*(cn-cm_min) ;
+        csize = do_rank_detection ? csize_max : csize_min ;
+
+        ASSERT (Cm [f] == (do_rank_detection ? cm_max : cm_min)) ;
+
+        PR (("this front cm: [ %ld %ld ], cn %ld csize %ld [%ld to %ld]\n",
+            cm_min, cm_max, cn, csize, csize_min, csize_max)) ;
+        ASSERT (csize >= 0 && csize <= fsize) ;
+        ASSERT (cm_min >= 0) ;
+        ASSERT (cm_max >= 0) ;
+        ASSERT (cn >= 0) ;
+        ASSERT (cm_min <= cn) ;
+        ASSERT (cm_max <= cn) ;
+        ASSERT (cm_min <= cm_max) ;
+        ASSERT (csize_min <= csize_max) ;
+
+        // ---------------------------------------------------------------------
+        // determine upper bounds on the size R+H
+        // ---------------------------------------------------------------------
+
+        PR (("\n --- front f %ld fsize %ld ctot %ld csize %ld\n",
+            f, fsize, ctot, csize)) ;
+        PR (("    parent %ld\n", Parent [f])) ;
+
+        // ---------------------------------------------------------------------
+        // estimate stack usage for parallel case
+        // ---------------------------------------------------------------------
+
+        Long ss = Stack_stack [s] ;  // current size of stack
+        Long sm = Stack_maxstack [s] ;  // max size of stack
+        PR (("current ss: %ld fsize %ld ctot %ld csize %ld rsize %ld\n",
+            ss, fsize, ctot, csize, rsize)) ;
+
+        // allocate front F on stack s
+        ss += fsize ;
+        sm = MAX (sm, ss) ;
+
+        // assemble and delete children on s, then factor F
+        ss -= ctot ;
+        ASSERT (ss >= 0) ;
+
+        // create C for front F
+        ss += csize ;
+        sm = MAX (sm, ss) ;
+
+        // delete F
+        ss -= fsize ;
+        ASSERT (ss >= 0) ;
+
+        if (keepH)
+        {
+            // allocate R and H in place of F
+            ss += Rh [f] ;
+        }
+        else
+        {
+            // allocate R in place of F (no memory allocated)
+            ss += rsize ;
+        }
+
+        PR (("new ss %ld\n", ss)) ;
+        Stack_stack [s] = ss ;      // new size of stack s
+        Stack_maxstack [s] = sm ;   // new max of stack s
+    }
+
+    // Cm no longer needed in Iwork ]
+
+    // -------------------------------------------------------------------------
+    // free workspace and return result
+    // -------------------------------------------------------------------------
+
+    FREE_WORK ;
+    return (QRsym) ;
+}
diff --git a/SPQR/Source/spqr_append.cpp b/SPQR/Source/spqr_append.cpp
new file mode 100644
index 0000000..ca919a3
--- /dev/null
+++ b/SPQR/Source/spqr_append.cpp
@@ -0,0 +1,165 @@
+// =============================================================================
+// === spqr_append =============================================================
+// =============================================================================
+
+// Appends a dense column X onto a sparse matrix A, increasing nnzmax(A) as
+// needed.  The column pointer array is not modified; it must be large enough
+// to accomodate the new column.
+
+#include "spqr.hpp"
+
+template <typename Entry> int spqr_append       // TRUE/FALSE if OK or not
+(
+    // inputs, not modified
+    Entry *X,           // size m-by-1
+    Long *P,            // size m, or NULL; permutation to apply to X.
+                        // P [k] = i if row k of A is row i of X
+
+    // input/output
+    cholmod_sparse *A,  // size m-by-(A->ncol) where A->ncol > n must hold
+    Long *p_n,          // n = # of columns of A so far; increased one
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Entry *Ax ;
+    Long *Ai, *Ap ;
+    Long nzmax, nz, i, k, nznew, n, m, nz2 ;
+    int ok = TRUE ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    m = A->nrow ;
+    n = *p_n ;
+    Ap = (Long *) A->p ;
+
+    if (m == 0)
+    {
+        // quick return
+        n++ ;
+        *p_n = n ;
+        Ap [n] = 0 ;
+        return (TRUE) ;
+    }
+
+    Ai = (Long *) A->i ;
+    Ax = (Entry *) A->x ;
+    nzmax = A->nzmax ;      // current nzmax(A)
+    nz = Ap [n] ;           // current nnz(A)
+    PR (("nz %ld nzmax %ld\n", nz, nzmax)) ;
+    ASSERT (nz <= nzmax) ;
+
+    // -------------------------------------------------------------------------
+    // append X onto A
+    // -------------------------------------------------------------------------
+
+    nz2 = spqr_add (nz, m, &ok) ;
+
+    if (ok && nz2 <= nzmax)
+    {
+
+        // ---------------------------------------------------------------------
+        // A is large enough to hold all of X without reallocating
+        // ---------------------------------------------------------------------
+
+        for (k = 0 ; k < m ; k++)
+        {
+            i = P ? P [k] : k ;
+            if (X [i] != (Entry) 0)
+            {
+                Ai [nz] = k ;
+                Ax [nz] = X [i] ;
+                nz++ ;
+            }
+        }
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // A might need to be increased in size
+        // ---------------------------------------------------------------------
+
+        for (k = 0 ; k < m ; k++)
+        {
+            i = P ? P [k] : k ;
+            if (X [i] != (Entry) 0)
+            {
+                if (nz >= nzmax)
+                {
+                    // Ai and Ax are not big enough; increase their size.
+                    // nznew = 2*nzmax + m ;
+                    nznew = spqr_mult (2, nzmax, &ok) ;
+                    nznew = spqr_add (nznew, m, &ok) ;
+                    if (!ok || !cholmod_l_reallocate_sparse (nznew, A, cc))
+                    {
+                        // out of memory
+                        ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+                        return (FALSE) ;
+                    }
+                    // Ai and Ax have moved, reaquire the pointers
+                    Ai = (Long *) A->i ;
+                    Ax = (Entry *) A->x ;
+                    PR (("reallocated from %ld to %ld\n", nzmax, nznew)) ;
+                    nzmax = nznew ;
+                }
+                Ai [nz] = k ;
+                Ax [nz] = X [i] ;
+                nz++ ;
+            }
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // finalize column pointers
+    // -------------------------------------------------------------------------
+
+    PR (("new nz %ld\n", nz)) ;
+    n++ ;
+    *p_n = n ;
+
+    A->nzmax = nzmax ;
+    A->i = Ai ;
+    A->x = Ax ;
+    Ap [n] = nz ;
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+
+template int spqr_append <double>
+(
+    // inputs, not modified
+    double *X,      // size m-by-1
+    Long *P,        // size m, or NULL; permutation to apply to X.
+                    // P [k] = i if row k of A is row i of X
+
+    // input/output
+    cholmod_sparse *A,    // size m-by-n2 where n2 > n
+    Long *p_n,       // number of columns of A; increased by one
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template int spqr_append <Complex>
+(
+    // inputs, not modified
+    Complex *X,     // size m-by-1
+    Long *P,        // size m, or NULL; permutation to apply to X.
+                    // P [k] = i if row k of A is row i of X
+
+    // input/output
+    cholmod_sparse *A,    // size m-by-n2 where n2 > n
+    Long *p_n,      // number of columns of A; increased by one
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_assemble.cpp b/SPQR/Source/spqr_assemble.cpp
new file mode 100644
index 0000000..1d33083
--- /dev/null
+++ b/SPQR/Source/spqr_assemble.cpp
@@ -0,0 +1,519 @@
+// =============================================================================
+// === spqr_assemble ===========================================================
+// =============================================================================
+
+/* Assemble the children into the current front.
+
+    Example:  Suppose there are 3 pivot columns in F (5, 6, 7), and 4
+    non-pivotal columns of F (8, 9, 11, 12).  We have fn = 7.
+
+    col1 = 3.  fp = 3, so pivot columns are [5 6 7].
+    Rj [Rp [f]...Rp[f+1]-1] = [5 6 7 8 9 11 12]. 
+
+    Seven rows of S are to be assembled (rows 16 to 22).  The rows of S are
+    stored in compressed-row form, and the rows themselves appear in S in
+    increasing order of leftmost column index.  Column indices in the rows
+    of S are in ascending order, but this is not required for assembly.
+
+            5 6 7 8 9 11 12
+        16: * . x x . x x       The pattern of these rows is a subset of
+        17: # x . . . . x       [pivot columns] [non pivot columns].
+        18: # x . x x x .       The leftmost columns are marked with #.
+        19:   * x . x . x       Suppose Sleft [5] = 16.  Then
+        20:   # . x . . x       Sleft [6] = 16 + 3 = 19.
+        21:     * . . x x       Sleft [7] = 19 + 2 = 21. 
+        22:     # x x x x       Sleft [8] = 21 + 2 = 23.
+        23:       *
+
+    The values of Sleft [5 6 7 8] are marked with "*", above.
+
+    Three children are to be assembled, one of which happens to be trapezoidal.
+    They are stored in packed column-major upper trapezoidal form.
+
+            6 8 11          6 7 8 12            5 7 9 11
+        b1: # x x       c1: # x x x         d1: # x x x 
+        b2:   # x       c2:   # x x         d2:   # x x
+        b3:     #       c3:     # x         d3:     # x
+                        c4:       #
+
+    The number of rows of these 4 blocks (S, b, c, and d) with leftmost
+    column in j = 0:6 is [4 4 4 2 1 1 1], which is Stair [0:fn-1]
+    before the cumulative sum.  After the cumulative sum,
+    Stair [0:fn-1] is [0 4 8 12 14 15 16].
+
+    Lining up the rows of each block (not done except conceptually) gives:
+
+            5 6 7 8 9 11 12
+        16: # . x x . x x
+        17: # x . . . . x
+        18: # x . x x x .
+        19:   # x . x . x
+        20:   # . x . . x
+        21:     # . . x x
+        22:     # x x x x
+
+        b1:   # . x . x .
+        b2:       # . x .
+        b3:           # .
+
+        c1:   # x x . . x
+        c2:     # x . . x
+        c3:       # . . x
+        c4:             #
+
+        d1: # . x . x x .
+        d2:     # . x x .
+        d3:         # x .
+
+    These rows are assembled into F in order of increasing leftmost column (the
+    # symbols in each row).  The resulting F is given below.  Note the local
+    row indices which correspond to the initial and final values of Stair.
+
+            5 6 7 8 9 11 12
+        16: # . x x . x x   <- row 0 of F
+        17: # x . . . . x
+        18: # x . x x x .
+        d1: # . x . x x .
+        19:   # x . x . x   <- 4
+        20:   # . x . . x
+        b1:   # . x . x .
+        c1:   # x x . . x
+        21:     # . . x x   <- 8
+        22:     # x x x x
+        d2:     # . x x .
+        c2:     # x . . x
+        b2:       # . x .   <- 12
+        c3:       # . . x
+        d3:         # x .   <- 14
+        b3:           # .   <- 15
+        c4:             #   <- 16
+
+    After the front is assembled, Stair is [4 8 12 14 15 16 17], because Stair
+    [j] is incremented once for each row whose leftmost column is column j in
+    F.  That is, ignoring explicit zeros stored within the staircase:
+
+        0    # x x x x x x
+        1    # x x x x x x
+        2    # x x x x x x
+        3    # x x x x x x
+        4    - # x x x x x   <- Stair [0] = 4
+        5      # x x x x x
+        6      # x x x x x
+        7      # x x x x x
+        8      - # x x x x   <- Stair [1] = 8
+        9        # x x x x
+       10        # x x x x
+       11        # x x x x
+       12        - # x x x   <- Stair [2] = 12
+       13          # x x x
+       14          - # x x   <- Stair [3] = 14
+       15            - # x   <- Stair [4] = 15
+       16              - #   <- Stair [5] = 16
+                         -   <- Stair [6] = 17
+
+    The rows of S are assembled first.  For this example, after assembling the
+    rows of S, the front contains:
+
+                5 6 7 8 9 11 12
+        0   16: # . x x . x x
+        1   17: # x . . . . x
+        2   18: # x . x x x .
+        3     :                 <- Stair [0] = 3 (was 0)
+        4   19:   # x . x . x
+        5   20:   # . x . . x
+        6     :                 <- Stair [1] = 6 (was 4)
+        7     :
+        8   21:     # . . x x
+        9   22:     # x x x x
+       10     :                 <- Stair [2] = 10 (was 8)
+       11     :
+       12     :                 <- Stair [3] = 12
+       13     :
+       14     :                 <- Stair [4] = 14
+       15     :                 <- Stair [5] = 15
+       16     :                 <- Stair [6] = 16
+
+   Next, the C block of each child is assembled.  Suppose the children are
+   assembled in order b, c, and d.  After child b:
+
+            b1:   # . x . x .
+            b2:       # . x .
+            b3:           # .
+
+                5 6 7 8 9 11 12
+        0   16: # . x x . x x
+        1   17: # x . . . . x
+        2   18: # x . x x x .
+        3     :                 <- Stair [0] = 3
+        4   19:   # x . x . x
+        5   20:   # . x . . x
+        6   b1:   # . x . x .
+        7     :                 <- Stair [1] = 7 (was 6)
+        8   21:     # . . x x
+        9   22:     # x x x x
+       10     :                 <- Stair [2] = 10
+       11     :
+       12   b2:       # . x .
+       13     :                 <- Stair [3] = 13 (was 12)
+       14     :                 <- Stair [4] = 14
+       15   b3:           # .
+       16     :                 <- Stair [5] = 16 (was 15)
+                                   Stair [5] = 16
+
+    Assembling child c:
+
+            c1:   # x x . . x
+            c2:     # x . . x
+            c3:       # . . x
+            c4:             #
+
+                5 6 7 8 9 11 12
+        0   16: # . x x . x x
+        1   17: # x . . . . x
+        2   18: # x . x x x .
+        3     :                 <- Stair [0] = 3
+        4   19:   # x . x . x
+        5   20:   # . x . . x
+        6   b1:   # . x . x .
+        7   c1:   # x x . . x
+        8   21:     # . . x x   <- Stair [1] = 8 (was 7)
+        9   22:     # x x x x
+       10   c2:     # x . . x
+       11     :                 <- Stair [2] = 11 (was 10)
+       12   b2:       # . x .
+       13   c3:       # . . x
+       14     :                 <- Stair [3] = 14 (was 13)
+                                   Stair [4] = 14
+       15   b3:           # .
+       16   c4:             #   <- Stair [5] = 16
+                                   Stair [6] = 17 (was 16)
+
+    Assembling child d gives the final front.
+
+            d1: # . x . x x .
+            d2:     # . x x .
+            d3:         # x .
+
+    The final front is shown below, where (-) denotes the zero entry
+    pointed to by Stair.
+
+                5 6 7 8 9 11 12
+        0   16: # . x x . x x
+        1   17: # x . . . . x
+        2   18: # x . x x x .
+        3   d1: # . x . x x .
+        4   19: - # x . x . x   <- Stair [0] = 4 (was 3)
+        5   20:   # . x . . x
+        6   b1:   # . x . x .
+        7   c1:   # x x . . x
+        8   21:   - # . . x x   <- Stair [1] = 8
+        9   22:     # x x x x
+       10   c2:     # x . . x
+       11   d2:     # . x x .
+       12   b2:     - # . x .   <- Stair [2] = 12 (was 11)
+       13   c3:       # . . x
+       14   d3:       - # x .   <- Stair [3] = 14
+       15   b3:         - # .   <- Stair [4] = 15 (was 14)
+       16   c4:           - #   <- Stair [5] = 16
+                            -   <- Stair [6] = 17
+
+    The final Stair [0:fn-1] = [4 8 12 14 15 16 17].  Note that column j in F
+    has entries in rows 0 through Stair [j]-1, inclusive.  The staircase of the
+    last column will always be fm.
+ */
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_assemble
+(
+    /* inputs, not modified */
+    Long f,                 /* front to assemble F */
+    Long fm,                /* number of rows of F */
+    int keepH,              /* if TRUE, then construct row pattern of H */
+    Long *Super,
+    Long *Rp,
+    Long *Rj,
+    Long *Sp,
+    Long *Sj,
+    Long *Sleft,
+    Long *Child,
+    Long *Childp,
+    Entry *Sx,
+    Long *Fmap,
+    Long *Cm,
+    Entry **Cblock,
+#ifndef NDEBUG
+    char *Rdead,
+#endif
+    Long *Hr,
+
+    /* input/output */
+    Long *Stair,
+    Long *Hii,              /* if keepH, construct list of row indices for F */
+    // input only
+    Long *Hip,
+
+    /* outputs, not defined on input */
+    Entry *F,
+
+    /* workspace, not defined on input or output */
+    Long *Cmap
+)
+{
+    Entry *Fi, *Fj, *C ;
+    Long k, fsize, fn, col1, col2, p, p1, p2, fp, j, leftcol, row, col, i,
+        cm, cn, ci, cj, c, pc, fnc, fpc, rmc ;
+    Long *Hi = NULL, *Hichild = NULL ;
+
+    /* ---------------------------------------------------------------------- */
+    /* get the front F */
+    /* ---------------------------------------------------------------------- */
+
+    /* pivotal columns Super [f] ... Super [f+1]-1 */
+    col1 = Super [f] ;      /* front F has columns col1:col2-1 */
+    col2 = Super [f+1] ;
+    p1 = Rp [f] ;           /* Rj [p1:p2-1] = columns in F */
+    p2 = Rp [f+1] ;
+    fp = col2 - col1 ;      /* first fp columns are pivotal */
+    fn = p2 - p1 ;          /* exact number of columns of F */
+
+    ASSERT (fp > 0) ;       /* all fronts have at least one pivot column */
+    ASSERT (fp <= fn) ;
+
+    /* set F to zero */
+    fsize = fm * fn ;
+    for (k = 0 ; k < fsize ; k++)
+    {
+        F [k] = 0 ;
+    }
+
+    if (keepH)
+    {
+        Hi = &Hii [Hip [f]] ;   // list of rows for front F will be constructed
+    }
+
+#ifndef NDEBUG
+    for (k = 0 ; k < fn ; k++) PR (("stair [%ld] = %ld\n", k, Stair [k])) ;
+#endif
+
+    /* ---------------------------------------------------------------------- */
+    /* assemble the rows of S whose leftmost column is a pivot column in F */
+    /* ---------------------------------------------------------------------- */
+
+    for (k = 0 ; k < fp ; k++)
+    {
+        /* assemble all rows whose leftmost global column index is k+col1 */
+        leftcol = k + col1 ;
+
+        /* for each row of S whose leftmost column is leftcol */
+        for (row = Sleft [leftcol] ; row < Sleft [leftcol+1] ; row++)
+        {
+            /* get the location of this row in F, and advance the staircase */
+            i = Stair [k]++ ;
+            Fi = F + i ;                /* pointer to F (i,:) */
+            PR (("assemble row: %ld i: %ld j %ld\n", row, i, k)) ;
+
+            /* scatter the row into F */
+            ASSERT (Sj [Sp [row]] == leftcol) ;
+            for (p = Sp [row] ; p < Sp [row+1] ; p++)
+            {
+                col = Sj [p] ;          /* global column index of S */
+                ASSERT (col >= leftcol /* && col < n */) ;
+                j = Fmap [col] ;        /* column index in F */
+                ASSERT (j >= 0 && j < fn) ;
+                Fi [j*fm] = Sx [p] ;    /* F (i,j) = S (row,col) ; */
+            }
+
+            /* construct the pattern of the Householder vectors */
+            if (keepH)
+            {
+                Hi [i] = row ;         /* this row of S is row i of F */
+            }
+        }
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* assemble each child */
+    /* ---------------------------------------------------------------------- */
+
+    for (p = Childp [f] ; p < Childp [f+1] ; p++)
+    {
+
+        /* ------------------------------------------------------------------ */
+        /* get the child */
+        /* ------------------------------------------------------------------ */
+
+        c = Child [p] ;                 /* get the child c of front F */
+        pc = Rp [c] ;                   /* get the pattern of child R */
+        cm = Cm [c] ;                   /* # of rows in child C */
+        fnc = Rp [c+1] - pc ;           /* total # cols in child F */
+        fpc = Super [c+1] - Super [c] ; /* # of pivot cols in child */
+        cn = fnc - fpc ;                /* # of cols in child C */
+        ASSERT (cm >= 0 && cm <= cn) ;
+        pc += fpc ;                     /* pointer to column indices in C */
+        ASSERT (pc + cn == Rp [c+1]) ;
+        C = Cblock [c] ;                /* pointer to numerical C block */
+
+        if (keepH)
+        {
+            /* get the list of row indices of the C block of the child */
+            rmc = Hr [c] ;
+#ifndef NDEBUG
+            {
+                Long rmc2 = 0 ;
+                for (j = Super [c] ; j < Super [c+1] ; j++)
+                {
+                    if (!Rdead [j])
+                    {
+                        rmc2++ ;        /* count # of rows in child R */
+                    }
+                }
+                ASSERT (rmc2 == rmc) ;
+            }
+#endif
+            // Hchild = HHi [c] + rmc ;    /* list of rows in child C block */
+            Hichild = &Hii [Hip [c] + rmc] ;
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* construct the Cmap */
+        /* ------------------------------------------------------------------ */
+
+        /* The contents of Cmap are currently undefined.  Cmap [0..cm-1] gives
+           the mapping of the rows of C to the rows of F.  If row ci of C is
+           row i of F, then Cmap [ci] = i */
+
+        for (ci = 0 ; ci < cm ; ci++)
+        {
+            col = Rj [pc + ci] ;        /* leftmost col of row i */
+            j = Fmap [col] ;            /* global col is jth col of F */
+            ASSERT (j >= 0 && j < fn) ;
+            i = Stair [j]++ ;           /* add row F(i,:) to jth staircase */
+            ASSERT (i >= 0 && i < fm) ;
+            Cmap [ci] = i ;             /* keep track of the mapping */
+            if (keepH)
+            {
+                /* get global row index for C(ci,:) from child Householder,
+                   which becomes the local row index F(i,:) */
+                Hi [i] = Hichild [ci] ;
+                ASSERT (Hi [i] >= 0 /* && Hi [i] < m */) ;
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* copy the triangular part of C into F (cm-by-cm, upper triangular) */
+        /* ------------------------------------------------------------------ */
+
+        for (cj = 0 ; cj < cm ; cj++)
+        {
+            /* copy C (:,cj) into F */
+            col = Rj [pc + cj] ;            /* global col of column cj of C */
+            j = Fmap [col] ;                /* and also column j of F */
+            Fj = F + fm * j ;               /* pointer to F(:,j) */
+            for (ci = 0 ; ci <= cj ; ci++)
+            {
+                i = Cmap [ci] ;             /* row ci of C is row fi of F */
+                Fj [i] = *(C++) ;           /* F (Cmap (ci), j) = C(ci,cj) */
+            }
+        }
+
+        /* ------------------------------------------------------------------ */
+        /* copy the rectangular part of C into F (cm-by-(cn-cm) in size) */
+        /* ------------------------------------------------------------------ */
+
+        for ( ; cj < cn ; cj++)
+        {
+            /* copy C (:,cj) into F */
+            col = Rj [pc + cj] ;            /* global col of column cj of C */
+            j = Fmap [col] ;                /* and also column j of F */
+            Fj = F + fm * j ;               /* pointer to F(:,j) */
+            for (ci = 0 ; ci < cm ; ci++)
+            {
+                i = Cmap [ci] ;             /* row ci of C is row fi of F */
+                Fj [i] = *(C++) ;           /* F (Cmap (ci), j) = C(ci,cj) */
+            }
+        }
+
+        /* the contents of Cmap are no longer needed */
+    }
+
+    /* the Stair is now complete */
+    ASSERT (Stair [fn-1] == fm) ;
+}
+
+
+/* ========================================================================== */
+
+template void spqr_assemble <double>
+(
+    /* inputs, not modified */
+    Long f,                 /* front to assemble F */
+    Long fm,                /* number of rows of F */
+    int keepH,              /* if TRUE, then construct row pattern of H */
+    Long *Super,
+    Long *Rp,
+    Long *Rj,
+    Long *Sp,
+    Long *Sj,
+    Long *Sleft,
+    Long *Child,
+    Long *Childp,
+    double *Sx,
+    Long *Fmap,
+    Long *Cm,
+    double **Cblock,
+#ifndef NDEBUG
+    char *Rdead,
+#endif
+    Long *Hr,
+
+    /* input/output */
+    Long *Stair,
+    Long *Hii,              /* if keepH, construct list of row indices for F */
+    // input only
+    Long *Hip,
+
+    /* outputs, not defined on input */
+    double *F,
+
+    /* workspace, not defined on input or output */
+    Long *Cmap
+) ;
+
+/* ========================================================================== */
+
+template void spqr_assemble <Complex>
+(
+    /* inputs, not modified */
+    Long f,                 /* front to assemble F */
+    Long fm,                /* number of rows of F */
+    int keepH,              /* if TRUE, then construct row pattern of H */
+    Long *Super,
+    Long *Rp,
+    Long *Rj,
+    Long *Sp,
+    Long *Sj,
+    Long *Sleft,
+    Long *Child,
+    Long *Childp,
+    Complex *Sx,
+    Long *Fmap,
+    Long *Cm,
+    Complex **Cblock,
+#ifndef NDEBUG
+    char *Rdead,
+#endif
+    Long *Hr,
+
+    /* input/output */
+    Long *Stair,
+    Long *Hii,              /* if keepH, construct list of row indices for F */
+    // input only
+    Long *Hip,
+
+    /* outputs, not defined on input */
+    Complex *F,
+
+    /* workspace, not defined on input or output */
+    Long *Cmap
+) ;
diff --git a/SPQR/Source/spqr_cpack.cpp b/SPQR/Source/spqr_cpack.cpp
new file mode 100644
index 0000000..09e0715
--- /dev/null
+++ b/SPQR/Source/spqr_cpack.cpp
@@ -0,0 +1,140 @@
+// =============================================================================
+// === spqr_cpack ==============================================================
+// =============================================================================
+
+//  spqr_cpack copies the C matrix from the frontal matrix F and
+//  stores it in packed form.  F can be overwritten with C (the pack can occur
+//  in-place), but in that case, the R and H matrices are destroyed.
+//
+//  In this example, m = 5, n = 6, npiv = 2, and rank = 2 (the number of good
+//  pivot columns found; equivalently, the number of rows in the R block).  The
+//  number of columns in C is cn = n-npiv.  The number of rows is
+//  cm = MIN (m-rank,cn).  In this example, MIN (m-rank,cn) = 3.
+//
+//      . . . . . .
+//      . . . . . .
+//      . . c c c c     <- rank = 2
+//      . . . c c c
+//      . . . . c c
+//
+//  In the next example below, m = 8 instead.  Note that
+//  cm = MIN (m-rank,cn) = 4.
+//
+//      . . . . . .
+//      . . . . . .
+//      . . c c c c     <- rank = 2
+//      . . . c c c
+//      . . . . c c
+//      . . . . . c
+//      . . . . . .
+//      . . . . . .
+
+#include "spqr.hpp"
+
+template <typename Entry> Long spqr_cpack     // returns # of rows in C
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long rank,              // the C block starts at F (rank,npiv)
+
+    // input, not modified unless the pack occurs in-place
+    Entry *F,               // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    Entry *C                // packed columns of C, of size cm-by-cn in upper
+                            // trapezoidal form.
+)
+{
+    Long i, k, cm, cn ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    ASSERT (m >= 0 && n >= 0 && npiv >= 0 && npiv <= n) ;
+
+    ASSERT (rank >= 0 && rank <= MIN (m,npiv)) ;
+    cn = n - npiv ;                     // number of columns of C
+    cm = MIN (m-rank, cn) ;             // number of rows of C
+    ASSERT (cm <= cn) ;
+    if (cm <= 0 || cn <= 0)
+    {
+        return (0) ;                    // nothing to do
+    }
+
+    ASSERT (C != NULL && F != NULL) ;
+    ASSERT (C <= F                      // C can be packed in-place, in F
+         || C >= F + m*n) ;             // or C must appear after F
+
+    F += INDEX (rank,npiv,m) ;          // C starts at F (rank,npiv)
+
+    // -------------------------------------------------------------------------
+    // pack the upper triangular part of C
+    // -------------------------------------------------------------------------
+
+    for (k = 0 ; k < cm ; k++)
+    {
+        // pack C (0:k,k)
+        for (i = 0 ; i <= k ; i++)
+        {
+            *(C++) = F [i] ;
+        }
+        F += m ;                        // advance to the next column of F
+    }
+
+    // -------------------------------------------------------------------------
+    // pack the rectangular part of C
+    // -------------------------------------------------------------------------
+
+    for ( ; k < cn ; k++)
+    {
+        // pack C (0:cm-1,k)
+        for (i = 0 ; i < cm ; i++)
+        {
+            *(C++) = F [i] ;
+        }
+        F += m ;                        // advance to the next column of F
+    }
+
+    PR (("Cpack rank %ld cm %ld cn %ld\n", rank, cm, cn)) ;
+    return (cm) ;                       // return # of rows in C
+}
+
+
+// =============================================================================
+
+template Long spqr_cpack <double>     // returns # of rows in C
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long rank,              // the C block starts at F (rank,npiv)
+
+    // input, not modified unless the pack occurs in-place
+    double *F,              // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    double *C               // packed columns of C, of size cm-by-cn in upper
+                            // trapezoidal form.
+) ;
+
+// =============================================================================
+
+template Long spqr_cpack <Complex>    // returns # of rows in C
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long rank,              // the C block starts at F (rank,npiv)
+
+    // input, not modified unless the pack occurs in-place
+    Complex *F,             // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    Complex *C              // packed columns of C, of size cm-by-cn in upper
+                            // trapezoidal form.
+) ;
diff --git a/SPQR/Source/spqr_csize.cpp b/SPQR/Source/spqr_csize.cpp
new file mode 100644
index 0000000..dfab542
--- /dev/null
+++ b/SPQR/Source/spqr_csize.cpp
@@ -0,0 +1,29 @@
+// =============================================================================
+// === spqr_csize ==============================================================
+// =============================================================================
+
+#include "spqr.hpp"
+
+Long spqr_csize     // returns # of entries in C of a child
+(
+    // input, not modified
+    Long c,                 // child c
+    Long *Rp,               // size nf+1, pointers for pattern of R
+    Long *Cm,               // size nf, Cm [c] = # of rows in child C
+    Long *Super             // size nf, pivotal columns in each front
+)
+{
+    Long pc, cm, fnc, fpc, cn, csize ;
+
+    pc = Rp [c] ;                   // get the pattern of child R
+    cm = Cm [c] ;                   // # of rows in child C
+    fnc = Rp [c+1] - pc ;           // total # cols in child F
+    fpc = Super [c+1] - Super [c] ; // # of pivot cols in child
+    cn = fnc - fpc ;                // # of cols in child C
+    ASSERT (cm >= 0 && cm <= cn) ;
+    ASSERT (pc + cm <= Rp [c+1]) ;
+    // Note that this is safe from Long overflow
+    csize = (cm * (cm+1)) / 2 + cm * (cn - cm) ;
+    return (csize) ;
+}
+
diff --git a/SPQR/Source/spqr_cumsum.cpp b/SPQR/Source/spqr_cumsum.cpp
new file mode 100644
index 0000000..c706d58
--- /dev/null
+++ b/SPQR/Source/spqr_cumsum.cpp
@@ -0,0 +1,42 @@
+// =============================================================================
+// === spqr_cumsum =============================================================
+// =============================================================================
+
+#include "spqr.hpp"
+
+//  Overwrite a vector of length n with its cumulative sum of length n+1.
+//  On input, X [0:n-1] contains the counts.  On output, X [k] is replaced with
+//  the sum of the input counts X [0:k-1].  No work is done if n < 0 or if
+//  X is NULL.  Long overflow is not checked (SuiteSparseQR doesn't need it;
+//  it has already been checked whereever this function is used).
+
+Long spqr_cumsum
+(
+    // input, not modified
+    Long n,
+
+    // input/output
+    Long *X                         // size n+1. X = cumsum ([0 X])
+)
+{
+    Long itot, t, x, k ;
+
+    // -------------------------------------------------------------------------
+    // X = cumsum ([0 X])
+    // -------------------------------------------------------------------------
+
+    itot = 0 ;
+    if (X != NULL)
+    {
+        for (k = 0 ; k < n ; k++)
+        {
+            t = itot ;              // t = sum (X [0:k-1])
+            x = X [k] ;
+            itot += x ;
+            X [k] = t ;
+        }
+        X [n] = itot ;
+    }
+
+    return (itot) ;
+}
diff --git a/SPQR/Source/spqr_debug.cpp b/SPQR/Source/spqr_debug.cpp
new file mode 100644
index 0000000..fa9e325
--- /dev/null
+++ b/SPQR/Source/spqr_debug.cpp
@@ -0,0 +1,292 @@
+// =============================================================================
+// === spqr_debug ==============================================================
+// =============================================================================
+
+#include "spqr.hpp"
+
+// =============================================================================
+// This file is for debugging only.
+// =============================================================================
+
+
+#ifndef NDEBUG
+
+#ifndef NPRINT
+
+// =============================================================================
+// === spqrDebug_print =========================================================
+// =============================================================================
+
+void spqrDebug_print
+(
+    double x
+)
+{
+    PR ((" %10.4g", x)) ;
+}
+
+void spqrDebug_print
+(
+    Complex x
+)
+{
+    PR ((" (%10.4g + 1i*(%10.4g))", x.real ( ), x.imag ( ))) ;
+}
+
+// =============================================================================
+// === spqrDebug_dumpdense =====================================================
+// =============================================================================
+
+template <typename Entry> void spqrDebug_dumpdense
+(
+    Entry *A,
+    Long m,
+    Long n,
+    Long lda,
+    cholmod_common *cc
+)
+{
+    Long i, j ;
+    if (cc == NULL) return ;
+    PR (("Dense: m %ld n %ld lda %ld p %p\n", m, n, lda, A)) ;
+    if (m < 0 || n < 0 || lda < m || A == NULL)
+    {
+        PR (("bad dense matrix!\n")) ;
+        ASSERT (0) ;
+        return ;
+    }
+
+    for (j = 0 ; j < n ; j++)
+    {
+        PR (("   --- column %ld of %ld\n", j, n)) ;
+        for (i = 0 ; i < m ; i++)
+        {
+            if (i == j) PR (("      [ diag:     ")) ;
+            else        PR (("      row %4ld    ", i)) ;
+            spqrDebug_print (A [i + j*lda]) ;
+            if (i == j) PR ((" ]\n")) ;
+            else        PR (("\n")) ;
+        }
+        PR (("\n")) ;
+    }
+
+#if 0
+    for (i = 0 ; i < m ; i++)
+    {
+        for (j = 0 ; j < n ; j++)
+        {
+//          if (A [i+j*lda] != (Entry) 0)
+//          {
+//              PR (("X"))  ;
+//          }
+//          else
+//          {
+//              PR (("."))  ;
+//          }
+            spqrDebug_print (A [i + j*lda]) ;
+        }
+        PR (("\n")) ;
+    }
+#endif
+
+}
+
+template void spqrDebug_dumpdense <double>
+(
+    double *A,
+    Long m,
+    Long n,
+    Long lda,
+    cholmod_common *cc
+) ;
+
+template void spqrDebug_dumpdense <Complex>
+(
+    Complex *A,
+    Long m,
+    Long n,
+    Long lda,
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+// === spqrDebug_dumpsparse ====================================================
+// =============================================================================
+
+template <typename Entry> void spqrDebug_dumpsparse
+(
+    Long *Ap,
+    Long *Ai,
+    Entry *Ax,
+    Long m,
+    Long n,
+    cholmod_common *cc
+)
+{
+    Long p, i, j ;
+    if (cc == NULL) return ;
+    PR (("\nSparse: m %ld n %ld nz %ld Ap %p Ai %p Ax %p\n",
+        m, n, Ap [n], Ap, Ai,Ax)) ;
+    if (m < 0 || n < 0 || Ax == NULL || Ap == NULL || Ai == NULL) return ;
+    for (j = 0 ; j < n ; j++)
+    {
+        PR (("  column %ld\n", j)) ;
+        for (p = Ap [j] ; p < Ap [j+1] ; p++)
+        {
+            i = Ai [p] ;
+            PR (("   %ld :", i)) ;
+            spqrDebug_print (Ax [p]) ;
+            PR (("\n")) ;
+            ASSERT (i >= 0 && i < m) ;
+        }
+    }
+}
+
+template void spqrDebug_dumpsparse <double>
+(
+    Long *Ap,
+    Long *Ai,
+    double *Ax,
+    Long m,
+    Long n,
+    cholmod_common *cc
+) ;
+
+template void spqrDebug_dumpsparse <Complex>
+(
+    Long *Ap,
+    Long *Ai,
+    Complex *Ax,
+    Long m,
+    Long n,
+    cholmod_common *cc
+) ;
+
+#endif
+
+// =============================================================================
+// === spqrDebug_listcount =====================================================
+// =============================================================================
+
+#ifdef DEBUG_EXPENSIVE
+
+// returns # of times x is in the List [0..len-1]
+Long spqrDebug_listcount
+(
+    Long x, Long *List, Long len, Long what,
+    cholmod_common *cc
+)
+{
+    Long k, nfound = 0 ;
+    if (cc == NULL) return (EMPTY) ;
+    if (what == 0)
+    {
+        k = 0 ;
+        PR (("\nQfill, j %ld len %ld\n", x, len)) ;
+    }
+    if (what == 1)
+    {
+        k = 0 ;
+        PR (("\nQrows, i %ld len %ld\n", x, len)) ;
+    }
+    for (k = 0 ; k < len ; k++)
+    {
+        if (List [k] == x) nfound++ ;
+        PR (("   %ld ( %ld ) %ld\n", x, List [k], nfound)) ;
+    }
+    PR (("total found %ld\n\n", nfound)) ;
+    return (nfound) ;
+}
+#endif
+
+// =============================================================================
+// === spqrDebug_rhsize ========================================================
+// =============================================================================
+
+// Count the number of entries in the R+H block for a single front.
+
+Long spqrDebug_rhsize       // returns # of entries in R+H
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long *Stair,            // size n; column j is dead if Stair [j] == 0.
+                            // Only the first npiv columns can be dead.
+    cholmod_common *cc
+)
+{
+    Long k, h, t, rm, rhsize = 0 ;
+
+    ASSERT (m >= 0 && n >= 0 && npiv <= n && npiv >= 0) ;
+
+    if (cc == NULL) return (EMPTY) ;
+    if (m <= 0 || n <= 0) return (0) ;                     // nothing to do
+
+    PR (("Try RHSIZE: m %ld n %ld npiv %ld\n", m, n, npiv)) ;
+
+    // -------------------------------------------------------------------------
+    // count the squeezed part of R+H
+    // -------------------------------------------------------------------------
+
+    rm = 0 ;                            // number of rows in R (:,0:k)
+    for (k = 0 ; k < npiv ; k++)
+    {
+        // get the staircase
+        t = Stair [k] ;                 // F (0:t-1,k) contains R and H
+        if (t == 0)
+        {
+            t = rm ;                    // dead col, R (0:rm-1,k) only, no H
+        }
+        else if (rm < m)
+        {
+            rm++ ;                      // col k not dead; one more row of R
+        }
+        PR (("  for RHSIZE, k %ld Stair %ld t %ld (piv)\n", k, Stair[k], t)) ;
+        // pack R (0:rm-1,k) and H (rm:t-1,k)
+        rhsize += t ;
+    }
+
+    // -------------------------------------------------------------------------
+    // count the rectangular part of R and trapezoidal part of H
+    // -------------------------------------------------------------------------
+
+    h = rm ;                            // the column of H starts in row h
+    for ( ; k < n ; k++)
+    {
+        // get the staircase
+        t = Stair [k] ;
+        // pack R (0:rm-1,k)
+        rhsize += rm ;
+        h = MIN (h+1, m) ;              // one more row of C to skip over
+        // pack H (h:t-1,k)
+        PR (("  for RHSIZE, k %ld Stair %ld t %ld\n", k, Stair[k], t)) ;
+        rhsize += (t-h) ;
+    }
+
+    PR (("  RHSIZE: m %ld n %ld npiv %ld is %ld\n", m, n, npiv, rhsize)) ;
+    return (rhsize) ;                   // return # of entries in R+H
+}
+
+
+// =============================================================================
+// === spqrDebug_dump_Parent ===================================================
+// =============================================================================
+
+void spqrDebug_dump_Parent (Long n, Long *Parent, const char *filename)
+{
+    FILE *pfile = fopen (filename, "w") ;
+    if (Parent == NULL)
+    {
+        fprintf (pfile, "0\n") ;
+    }
+    else
+    {
+        for (Long f = 0 ; f < n ; f++)
+        {
+            fprintf (pfile, "%ld\n", 1+Parent [f]) ;
+        }
+    }
+    fclose (pfile) ;
+}
+#endif
diff --git a/SPQR/Source/spqr_factorize.cpp b/SPQR/Source/spqr_factorize.cpp
new file mode 100644
index 0000000..8e1ccf2
--- /dev/null
+++ b/SPQR/Source/spqr_factorize.cpp
@@ -0,0 +1,778 @@
+// =============================================================================
+// === spqr_factorize ==========================================================
+// =============================================================================
+
+// Given an m-by-n sparse matrix A and its symbolic analsys, compute its
+// numeric QR factorization.
+//
+// Note that the first part of the code allocates workspace, and the resulting
+// QR factors.  It then does all its work in that amount of space, with no
+// reallocations.  The size of the memory blocks that are allocated are known
+// a priori, from the symbolic analysis, and do not depend upon the specific
+// numerical values.  When done, it frees its workspace.
+//
+// Furthermore, if rank detection is disabled (with tol < 0), the actual flops
+// become perfectly repeatable; the code does the same thing regardless of
+// the actual numerical values.
+//
+// These characteristics make this QR factorization a candidate for a
+// hardware-in-the-loop solution, for control applications (for example).
+// However, the Stacks must not be shrunk when the factorization is done.
+//
+// FUTURE: split this function into three parts:
+//     (a) allocate workspace and resulting QR factors
+//     (b) factorize (no malloc/free)
+//     (c) free workspace and optionally shrink the Stacks
+// Then part (b) could be called many times with different values but same
+// nonzero pattern.
+
+// =============================================================================
+// === macros ==================================================================
+// =============================================================================
+
+#include "spqr.hpp"
+
+#define FCHUNK 32        // FUTURE: make a parameter; Householder block size
+
+// Free Sx, A, and all of Work except the Work [0:ns-1] array itself
+#define FREE_WORK_PART1 \
+{ \
+    free_Work <Entry> (Work, ns, n, maxfn, wtsize, cc) ; \
+    if (freeA) cholmod_l_free_sparse (Ahandle, cc) ; \
+    cholmod_l_free (anz, sizeof (Entry), Sx, cc) ; \
+    Sx = NULL ; \
+}
+
+// Free Cblock and the Work array itself
+#define FREE_WORK_PART2 \
+{ \
+    cholmod_l_free (ns, sizeof (spqr_work <Entry>), Work, cc) ; \
+    Work = NULL ; \
+    cholmod_l_free (nf+1, sizeof (Entry *), Cblock, cc) ; \
+    Cblock = NULL ; \
+}
+
+// Free all workspace
+#define FREE_WORK \
+{ \
+    FREE_WORK_PART1 ; \
+    FREE_WORK_PART2 ; \
+}
+
+
+// =============================================================================
+// === get_Work ================================================================
+// =============================================================================
+
+// Allocate the Work object, which is an array of structs.  The entry Work [s]
+// contains workspace for the Stack s, for each Stack 0 to ns-1.
+
+template <typename Entry> spqr_work <Entry> *get_Work
+(
+    Long ns,            // number of stacks
+    Long n,             // number of columns of A
+    Long maxfn,         // largest number of columns in any front
+    Long keepH,         // if true, H is kept
+    Long fchunk,
+    Long *p_wtsize,     // size of WTwork for each 
+    cholmod_common *cc
+)
+{
+    int ok = TRUE ;
+    spqr_work <Entry> *Work ;
+    Long wtsize ;
+    *p_wtsize = 0 ;
+
+    // wtsize = (fchunk + (keepH ? 0:1)) * maxfn ;
+    wtsize = spqr_mult (fchunk + (keepH ? 0:1), maxfn, &ok) ;
+
+    Work = (spqr_work <Entry> *)    
+        cholmod_l_malloc (ns, sizeof (spqr_work <Entry>), cc) ;
+
+    if (!ok || cc->status < CHOLMOD_OK)
+    {
+        // out of memory or Long overflow
+        cholmod_l_free (ns, sizeof (spqr_work <Entry>), Work, cc) ;
+        ERROR (CHOLMOD_OUT_OF_MEMORY, "out of memory") ;
+        return (NULL) ;
+    }
+
+    for (Long stack = 0 ; stack < ns ; stack++)
+    {
+        Work [stack].Fmap = (Long *) cholmod_l_malloc (n, sizeof (Long), cc) ;
+        Work [stack].Cmap = (Long *) cholmod_l_malloc (maxfn, sizeof(Long), cc);
+        if (keepH)
+        {
+            // Staircase is a permanent part of H
+            Work [stack].Stair1 = NULL ;
+        }
+        else
+        {
+            // Staircase workspace reused for each front
+            Work [stack].Stair1 =
+                (Long *) cholmod_l_malloc (maxfn, sizeof (Long), cc) ;
+        }
+        Work [stack].WTwork =
+            (Entry *) cholmod_l_malloc (wtsize, sizeof (Entry), cc) ;
+        Work [stack].sumfrank = 0 ;
+        Work [stack].maxfrank = 0 ;
+
+        Work [stack].wscale = 0 ;
+        Work [stack].wssq   = 0 ;
+    }
+
+    *p_wtsize = wtsize ;
+    return (Work) ;
+}
+
+
+// =============================================================================
+// === free_Work ===============================================================
+// =============================================================================
+
+// Free the contents of Work, but not the Work array itself
+
+template <typename Entry> void free_Work
+(
+    spqr_work <Entry> *Work,
+    Long ns,            // number of stacks
+    Long n,             // number of columns of A
+    Long maxfn,         // largest number of columns in any front
+    Long wtsize,        // size of WTwork array for each Stack
+    cholmod_common *cc
+)
+{
+    if (Work != NULL)
+    {
+        for (Long stack = 0 ; stack < ns ; stack++)
+        {
+            cholmod_l_free (n,      sizeof (Long),   Work [stack].Fmap,   cc) ;
+            cholmod_l_free (maxfn,  sizeof (Long),   Work [stack].Cmap,   cc) ;
+            cholmod_l_free (maxfn,  sizeof (Long),   Work [stack].Stair1, cc) ;
+            cholmod_l_free (wtsize, sizeof (Entry), Work [stack].WTwork, cc) ;
+            Work [stack].Fmap = NULL ;
+            Work [stack].Cmap = NULL ;
+            Work [stack].Stair1 = NULL ;
+            Work [stack].WTwork = NULL ;
+        }
+    }
+}
+
+
+// =============================================================================
+// === spqr_factorize ==========================================================
+// =============================================================================
+
+template <typename Entry> spqr_numeric <Entry> *spqr_factorize
+(
+    // input, optionally freed on output
+    cholmod_sparse **Ahandle,
+
+    // inputs, not modified
+    Long freeA,                     // if TRUE, free A on output
+    double tol,                     // for rank detection
+    Long ntol,                      // apply tol only to first ntol columns
+    spqr_symbolic *QRsym,
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Long *Wi, *Qfill, *PLinv, *Cm, *Sp, *Stack_size,
+        *TaskFront, *TaskFrontp, *TaskStack, *Stack_maxstack ;
+    Entry *Sx, **Rblock, **Cblock, **Stacks ;
+    spqr_numeric <Entry> *QRnum ;
+    Long nf, m, n, anz, fchunk, maxfn, rank, maxfrank, rjsize, rank1,
+        maxstack,j, wtsize, stack, ns, ntasks, keepH, hisize ;
+    char *Rdead ;
+    cholmod_sparse *A ;
+    spqr_work <Entry> *Work ;
+
+    // -------------------------------------------------------------------------
+    // get inputs and contents of symbolic object
+    // -------------------------------------------------------------------------
+
+    if (QRsym == NULL)
+    {
+        // out of memory in caller
+        if (freeA)
+        {
+            // if freeA is true, A must always be freed, even on error
+            cholmod_l_free_sparse (Ahandle, cc) ;
+        }
+        return (NULL) ;
+    }
+
+    A = *Ahandle ;
+
+    nf = QRsym->nf ;                // number of frontal matrices
+    m = QRsym->m ;                  // A is m-by-n
+    n = QRsym->n ;
+    anz = QRsym->anz ;              // nnz (A)
+
+    keepH = QRsym->keepH ;
+
+    rjsize = QRsym->rjsize ;
+
+    Sp = QRsym->Sp ;                // size m+1, row pointers for S
+    Qfill = QRsym->Qfill ;          // fill-reducing ordering
+    PLinv = QRsym->PLinv ;          // size m, leftmost column sort
+
+    ns = QRsym->ns ;                // number of stacks
+    ntasks = QRsym->ntasks ;        // number of tasks
+
+    // FUTURE: compute a unique maxfn for each stack.  Current maxfn is OK, but
+    // it's a global max of the fn of all fronts, and need only be max fn of
+    // the fronts in any given stack.
+
+    maxfn  = QRsym->maxfn ;         // max # of columns in any front
+    ASSERT (maxfn <= n) ;
+    hisize = QRsym->hisize ;        // # of integers in Hii, Householder vectors
+
+    TaskFrontp = QRsym->TaskFrontp ;
+    TaskFront  = QRsym->TaskFront ;
+    TaskStack  = QRsym->TaskStack ;
+
+    maxstack = QRsym->maxstack ;
+    Stack_maxstack = QRsym->Stack_maxstack ;
+
+    if (!(QRsym->do_rank_detection))
+    {
+        // disable rank detection if not accounted for in analysis
+        tol = -1 ;
+    }
+
+    // If there is one task, there is only one stack, and visa versa
+    ASSERT ((ns == 1) == (ntasks == 1)) ;
+
+    PR (("factorize with ns %ld ntasks %ld\n", ns, ntasks)) ;
+
+    // -------------------------------------------------------------------------
+    // allocate workspace
+    // -------------------------------------------------------------------------
+
+    cholmod_l_allocate_work (0, MAX (m,nf), 0, cc) ;
+
+    // shared Long workspace
+    Wi = (Long *) cc->Iwork ;   // size m, aliased with the rest of Iwork
+    Cm = Wi ;                   // size nf
+
+    // Cblock is workspace shared by all threads
+    Cblock = (Entry **) cholmod_l_malloc (nf+1, sizeof (Entry *), cc) ;
+
+    Work = NULL ;               // Work and its contents not yet allocated
+    fchunk = MIN (m, FCHUNK) ;
+    wtsize = 0 ;
+
+    // -------------------------------------------------------------------------
+    // create S
+    // -------------------------------------------------------------------------
+
+    // create numeric values of S = A(p,q) in row-form in Sx
+    Sx = (Entry *) cholmod_l_malloc (anz, sizeof (Entry), cc) ;
+
+    if (cc->status == CHOLMOD_OK)
+    {
+        // use Wi as workspace (Iwork (0:m-1)) [
+        spqr_stranspose2 (A, Qfill, Sp, PLinv, Sx, Wi) ;
+        // Wi no longer needed ]
+    }
+
+    PR (("in spqr_factorize, status after creating Sx: %d\n", cc->status)) ;
+
+    // -------------------------------------------------------------------------
+    // input matrix A no longer needed; free it if the user doesn't need it
+    // -------------------------------------------------------------------------
+
+    if (freeA)
+    {
+        // this is done even if out of memory, above
+        cholmod_l_free_sparse (Ahandle, cc) ;
+        ASSERT (*Ahandle == NULL) ;
+    }
+    PR (("in spqr_factorize, freed A, status %d\n", cc->status)) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        PR (("in spqr_factorize, failure %d\n", cc->status)) ;
+        // out of memory
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate numeric object
+    // -------------------------------------------------------------------------
+
+    QRnum = (spqr_numeric<Entry> *)
+        cholmod_l_malloc (1, sizeof (spqr_numeric<Entry>), cc) ;
+    PR (("after allocating numeric object header, status %d\n", cc->status)) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    Rblock     = (Entry **) cholmod_l_malloc (nf, sizeof (Entry *), cc) ;
+    Rdead      = (char *)   cholmod_l_calloc (n,  sizeof (char),    cc) ;
+
+    // these may be revised (with ns=1) if we run out of memory
+    Stacks     = (Entry **) cholmod_l_calloc (ns, sizeof (Entry *), cc) ;
+    Stack_size = (Long *)   cholmod_l_calloc (ns, sizeof (Long),    cc) ;
+
+    QRnum->Rblock     = Rblock ;
+    QRnum->Rdead      = Rdead ;
+    QRnum->Stacks     = Stacks ;
+    QRnum->Stack_size = Stack_size ;
+
+    if (keepH)
+    {
+        // allocate permanent space for Stair, Tau, Hii for each front
+        QRnum->HStair= (Long *)  cholmod_l_malloc (rjsize, sizeof (Long),  cc) ;
+        QRnum->HTau  = (Entry *) cholmod_l_malloc (rjsize, sizeof (Entry), cc) ;
+        QRnum->Hii   = (Long *)  cholmod_l_malloc (hisize, sizeof (Long),  cc) ;
+        QRnum->Hm    = (Long *)  cholmod_l_malloc (nf,     sizeof (Long),  cc) ;
+        QRnum->Hr    = (Long *)  cholmod_l_malloc (nf,     sizeof (Long),  cc) ;
+        QRnum->HPinv = (Long *)  cholmod_l_malloc (m,      sizeof (Long),  cc) ;
+    }
+    else
+    {
+        // H is not kept; this part of the numeric object is not used
+        QRnum->HStair = NULL ;
+        QRnum->HTau = NULL ;
+        QRnum->Hii = NULL ;
+        QRnum->Hm = NULL ;
+        QRnum->Hr = NULL ;
+        QRnum->HPinv = NULL ;
+    }
+
+    QRnum->n = n ;
+    QRnum->m = m ;
+    QRnum->nf = nf ;
+    QRnum->rjsize = rjsize ;
+    QRnum->hisize = hisize ;
+    QRnum->keepH = keepH ;
+    QRnum->maxstack = maxstack ;
+    QRnum->ns = ns ;
+    QRnum->ntasks = ntasks ;
+    QRnum->maxfm = EMPTY ;      // max (Hm [0:nf-1]), computed only if H is kept
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        spqr_freenum (&QRnum, cc) ;
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    PR (("after allocating rest of numeric object, status %d\n", cc->status)) ;
+
+    // -------------------------------------------------------------------------
+    // allocate workspace
+    // -------------------------------------------------------------------------
+
+    Work = get_Work <Entry> (ns, n, maxfn, keepH, fchunk, &wtsize, cc) ;
+    PR (("after allocating work, status %d\n", cc->status)) ;
+
+    // -------------------------------------------------------------------------
+    // allocate and initialize each Stack
+    // -------------------------------------------------------------------------
+
+    if (cc->status == CHOLMOD_OK)
+    {
+        for (stack = 0 ; stack < ns ; stack++)
+        {
+            Entry *Stack ;
+            size_t stacksize = (ntasks == 1) ?
+                maxstack : Stack_maxstack [stack] ;
+            Stack_size [stack] = stacksize ;
+            Stack = (Entry *) cholmod_l_malloc (stacksize, sizeof (Entry), cc) ;
+            Stacks [stack] = Stack ;
+            Work [stack].Stack_head = Stack ;
+            Work [stack].Stack_top  = Stack + stacksize ;
+        }
+    }
+
+    PR (("after allocating the stacks, status %d\n", cc->status)) ;
+
+    // -------------------------------------------------------------------------
+    // punt to sequential case and fchunk = 1 if out of memory
+    // -------------------------------------------------------------------------
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // PUNT: ran out of memory; try again with smaller workspace
+        // out of memory; free any stacks that were successfully allocated
+        if (Stacks != NULL)
+        {
+            for (stack = 0 ; stack < ns ; stack++)
+            {
+                size_t stacksize = (ntasks == 1) ?
+                    maxstack : Stack_maxstack [stack] ;
+                cholmod_l_free (stacksize, sizeof (Entry), Stacks [stack], cc) ;
+            }
+        }
+        cholmod_l_free (ns, sizeof (Entry *), Stacks,     cc) ;
+        cholmod_l_free (ns, sizeof (Long),    Stack_size, cc) ;
+
+        // free the contents of Work, and the Work array itself
+        free_Work <Entry> (Work, ns, n, maxfn, wtsize, cc) ;
+        cholmod_l_free (ns, sizeof (spqr_work <Entry>), Work, cc) ;
+
+        // punt to a single stack, a single task, and fchunk of 1
+        ns = 1 ;
+        ntasks = 1 ;
+        fchunk = 1 ;
+        cc->status = CHOLMOD_OK ;
+        Work = get_Work <Entry> (ns, n, maxfn, keepH, fchunk, &wtsize, cc) ;
+        Stacks     = (Entry **) cholmod_l_calloc (ns, sizeof (Entry *), cc) ;
+        Stack_size = (Long *)   cholmod_l_calloc (ns, sizeof (Long),    cc) ;
+        QRnum->Stacks     = Stacks ;
+        QRnum->Stack_size = Stack_size ;
+        if (cc->status == CHOLMOD_OK)
+        {
+            Entry *Stack ;
+            Stack_size [0] = maxstack ;
+            Stack = (Entry *) cholmod_l_malloc (maxstack, sizeof (Entry), cc) ;
+            Stacks [0] = Stack ;
+            Work [0].Stack_head = Stack ;
+            Work [0].Stack_top  = Stack + maxstack ;
+        }
+    }
+
+    // actual # of stacks and tasks used
+    QRnum->ns = ns ;
+    QRnum->ntasks = ntasks ;
+
+    // -------------------------------------------------------------------------
+    // check if everything was allocated OK
+    // -------------------------------------------------------------------------
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        spqr_freenum (&QRnum, cc) ;
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // At this point, the factorization is guaranteed to succeed, unless
+    // sizeof (BLAS_INT) < sizeof (Long), in which case, you really should get
+    // a 64-bit BLAS.
+
+    // -------------------------------------------------------------------------
+    // create the Blob : everything the numeric factorization kernel needs
+    // -------------------------------------------------------------------------
+
+    spqr_blob <Entry> Blob ;
+    Blob.QRsym = QRsym ;
+    Blob.QRnum = QRnum ;
+    Blob.tol = tol ;
+    Blob.Work = Work ;
+    Blob.Cm = Cm ;
+    Blob.Cblock = Cblock ;
+    Blob.Sx = Sx ;
+    Blob.ntol = ntol ;
+    Blob.fchunk = fchunk ;
+    Blob.cc = cc ;
+
+    // -------------------------------------------------------------------------
+    // initialize the "pure" flop count (for performance testing only)
+    // -------------------------------------------------------------------------
+
+    cc->SPQR_flopcount = 0 ;
+
+    // -------------------------------------------------------------------------
+    // numeric QR factorization
+    // -------------------------------------------------------------------------
+
+    PR (("[ calling the kernel\n")) ;
+
+    if (ntasks == 1)
+    {
+        // Just one task, with or without TBB installed: don't use TBB
+        spqr_kernel (0, &Blob) ;        // sequential case
+    }
+    else
+    {
+#ifdef HAVE_TBB
+        // parallel case: TBB is installed, and there is more than one task
+        int nthreads = MAX (0, cc->SPQR_nthreads) ;
+        spqr_parallel (ntasks, nthreads, &Blob) ;
+#else
+        // TBB not installed, but the work is still split into multiple tasks.
+        // do tasks 0 to ntasks-2 (skip the placeholder root task id = ntasks-1)
+        for (Long id = 0 ; id < ntasks-1 ; id++)
+        {
+            spqr_kernel (id, &Blob) ;
+        }
+#endif
+    }
+
+    PR (("] did the kernel\n")) ;
+
+    // -------------------------------------------------------------------------
+    // check for BLAS Long overflow on the CPU, or GPU failure
+    // -------------------------------------------------------------------------
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // On the CPU, this case can only occur if the problem is too large for
+        // the BLAS.  This can only occur if, for example you're on a 64-bit
+        // platform (with sizeof (Long) = 8) and using a 32-bit BLAS (with
+        // sizeof (BLAS_INT) = 4).  On the GPU, this case can more easily
+        // occur, if we run out of memory in spqrgpu_kernel, or if we fail to
+        // communicate with the GPU.
+        spqr_freenum (&QRnum, cc) ;
+        FREE_WORK ;
+        return (NULL) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // finalize the rank
+    // -------------------------------------------------------------------------
+
+    PR (("finalize the rank\n")) ;
+    rank = 0 ;
+    maxfrank = 1 ;
+    for (stack = 0 ; stack < ns ; stack++)
+    {
+        PR (("stack: %ld Work [stack].sumfrank: %ld\n", stack, Work [stack].sumfrank)) ;
+        rank += Work [stack].sumfrank ;
+        maxfrank = MAX (maxfrank, Work [stack].maxfrank) ;
+    }
+    QRnum->rank = rank ;                    // required by spqr_hpinv
+    QRnum->maxfrank = maxfrank ;
+    PR (("m %ld n %ld my QR rank %ld\n", m, n, rank)) ;
+
+    // -------------------------------------------------------------------------
+    // finalize norm(w) for the dead column 2-norms
+    // -------------------------------------------------------------------------
+
+    double wscale = 0 ;
+    double wssq = 1 ;
+    for (stack = 0 ; stack < ns ; stack++)
+    {
+        // norm_E_fro = norm (s.*sqrt(q)) ; see also LAPACK's dnrm2
+        double ws = Work [stack].wscale ;
+        double wq = Work [stack].wssq ;
+        if (wq != 0)
+        {
+            double wk = ws * sqrt (wq) ;
+            if (wscale < wk)
+            {
+                double rr = wscale / wk ;
+                wssq = 1 + wssq * rr * rr ;
+                wscale = wk ;
+            }
+            else
+            {
+                double rr = wk / wscale ;
+                wssq += rr * rr ;
+            }
+        }
+    }
+    QRnum->norm_E_fro = wscale * sqrt (wssq) ;
+    cc->SPQR_norm_E_fro = QRnum->norm_E_fro ;
+
+    // -------------------------------------------------------------------------
+    // free all workspace, except Cblock and Work
+    // -------------------------------------------------------------------------
+
+    FREE_WORK_PART1 ;
+
+    // -------------------------------------------------------------------------
+    // shrink the Stacks to hold just R (and H, if H kept)
+    // -------------------------------------------------------------------------
+
+    // If shrink is <= 0, then the Stacks are not modified.
+    // If shrink is 1, each Stack is realloc'ed to the right size (default)
+    // If shrink is > 1, then each Stack is forcibly moved and shrunk.
+    // This option is mainly meant for testing, not production use.
+    // It should be left at 1 for production use.
+
+    Long any_moved = FALSE ;
+
+    int shrink = cc->SPQR_shrink ;
+
+    if (shrink > 0)
+    {
+        for (stack = 0 ; stack < ns ; stack++)
+        {
+            // stacksize is the current size of the this Stack
+            size_t stacksize = Stack_size [stack] ;
+            Entry *Stack = Stacks [stack] ;
+            // Work [stack].Stack_head points to the first empty slot in stack,
+            // so newstacksize is the size of the space in use by R and H.
+            size_t newstacksize = Work [stack].Stack_head - Stack ;
+            ASSERT (newstacksize <= stacksize) ;
+            // Reduce the size of this stack.  Cblock [0:nf-1] is no longer
+            // needed for holding pointers to the C blocks of each frontal
+            // matrix.  Reuse it to hold the reallocated stacks. 
+            if (shrink > 1)
+            {
+                // force the block to move by malloc'ing a new one;
+                // this option is mainly for testing only.
+                Cblock [stack] = (Entry *) cholmod_l_malloc (newstacksize,
+                    sizeof (Entry), cc) ;
+                if (Cblock [stack] == NULL)
+                {
+                    // oops, the malloc failed; just use the old block
+                    cc->status = CHOLMOD_OK ;
+                    Cblock [stack] = Stack ;
+                    // update the memory usage statistics, however
+		    cc->memory_inuse +=
+                        ((newstacksize-stacksize) * sizeof (Entry)) ;
+                }
+                else
+                {
+                    // malloc is OK; copy the block over and free the old one
+                    memcpy (Cblock [stack], Stack, newstacksize*sizeof(Entry)) ;
+                    cholmod_l_free (stacksize, sizeof (Entry), Stack, cc) ;
+                }
+                // the Stack has been shrunk to the new size
+                stacksize = newstacksize ;
+            }
+            else
+            {
+                // normal method; just realloc the block
+                PR (("Normal shrink of the stack: %ld to %ld\n",
+                    stacksize, newstacksize)) ;
+                Cblock [stack] =    // pointer to the new Stack
+                    (Entry *) cholmod_l_realloc (
+                    newstacksize,   // requested size of Stack, in # of Entries
+                    sizeof (Entry), // size of each Entry in the Stack
+                    Stack,          // pointer to the old Stack
+                    &stacksize,     // input: old stack size; output: new size
+                    cc) ;
+            }
+            Stack_size [stack] = stacksize ;
+            any_moved = any_moved || (Cblock [stack] != Stack) ;
+            // reducing the size of a block of memory always succeeds
+            ASSERT (cc->status == CHOLMOD_OK) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // adjust the Rblock pointers if the Stacks have been moved
+    // -------------------------------------------------------------------------
+
+    if (any_moved)
+    {
+        // at least one Stack has moved; check all fronts and adjust them
+        for (Long task = 0 ; task < ntasks ; task++)
+        {
+            Long kfirst, klast ;
+            if (ntasks == 1)
+            {
+                // sequential case
+                kfirst = 0 ;
+                klast = nf ;
+                stack = 0 ;
+            }
+            else
+            {
+                kfirst = TaskFrontp [task] ;
+                klast  = TaskFrontp [task+1] ;
+                stack  = TaskStack [task] ;
+            }
+            ASSERT (stack >= 0 && stack < ns) ;
+            Entry *Old_Stack = Stacks [stack] ;
+            Entry *New_Stack = Cblock [stack] ;
+            if (New_Stack != Old_Stack)
+            {
+                for (Long kf = kfirst ; kf < klast ; kf++)
+                {
+                    Long f = (ntasks == 1) ? kf : TaskFront [kf] ;
+                    Rblock [f] = New_Stack + (Rblock [f] - Old_Stack) ;
+                }
+            }
+        }
+        // finalize the Stacks
+        for (stack = 0 ; stack < ns ; stack++)
+        {
+            Stacks [stack] = Cblock [stack] ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // free the rest of the workspace
+    // -------------------------------------------------------------------------
+    
+    FREE_WORK_PART2 ;
+
+    // -------------------------------------------------------------------------
+    // extract the implicit row permutation for H
+    // -------------------------------------------------------------------------
+
+    // this must be done sequentially, when all threads are finished
+    if (keepH)
+    {
+        // use Wi as workspace (Iwork (0:m-1)) [
+        spqr_hpinv (QRsym, QRnum, Wi) ;
+        // Wi no longer needed ]
+    }
+
+    // -------------------------------------------------------------------------
+    // find the rank and return the result
+    // -------------------------------------------------------------------------
+
+    // find the rank of the first ntol columns of A
+    PR (("find rank of first ntol cols of A: ntol %ld n %ld\n", ntol, n)) ;
+    if (ntol >= n)
+    {
+        rank1 = rank ;
+        PR (("rank1 is rank: %ld\n", rank1)) ;
+    }
+    else
+    {
+        rank1 = 0 ;
+        for (j = 0 ; j < ntol ; j++)
+        {
+            PR (("column %ld Rdead: %d\n", j, (int) Rdead [j])) ;
+            if (!Rdead [j])
+            {
+                rank1++ ;
+            }
+        }
+        PR (("rank1 is sum of non-Rdead: %ld\n", rank1)) ;
+    }
+    QRnum->rank1 = rank1 ;
+    return (QRnum) ;
+}
+
+
+// =============================================================================
+
+template spqr_numeric <double> *spqr_factorize <double>
+(
+    // input, optionally freed on output
+    cholmod_sparse **Ahandle,
+
+    // inputs, not modified
+    Long freeA,                     // if TRUE, free A on output
+    double tol,                     // for rank detection
+    Long ntol,                      // apply tol only to first ntol columns
+    spqr_symbolic *QRsym,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template spqr_numeric <Complex> *spqr_factorize <Complex>
+(
+    // input, optionally freed on output
+    cholmod_sparse **Ahandle,
+
+    // inputs, not modified
+    Long freeA,                     // if TRUE, free A on output
+    double tol,                     // for rank detection
+    Long ntol,                      // apply tol only to first ntol columns
+    spqr_symbolic *QRsym,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_fcsize.cpp b/SPQR/Source/spqr_fcsize.cpp
new file mode 100644
index 0000000..20f7add
--- /dev/null
+++ b/SPQR/Source/spqr_fcsize.cpp
@@ -0,0 +1,25 @@
+// =============================================================================
+// === spqr_fcsize =============================================================
+// =============================================================================
+
+#include "spqr.hpp"
+
+Long spqr_fcsize    // returns # of entries in C of current front F
+(
+    // input, not modified
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long rank               // the C block starts at F (rank,npiv)
+)
+{
+    Long cm, cn, csize ;
+    ASSERT (m >= 0 && n >= 0 && npiv >= 0 && npiv <= n) ;
+    ASSERT (rank >= 0 && rank <= MIN (m,npiv)) ;
+    cn = n - npiv ;                         // number of columns of C
+    cm = MIN (m-rank, cn) ;                 // number of rows of C
+    ASSERT (cm <= cn) ;
+    // Note that this is safe from Long overflow:
+    csize = (cm * (cm+1)) / 2 + cm * (cn - cm) ;
+    return (csize) ;                        // return # of entries in C
+}
diff --git a/SPQR/Source/spqr_freefac.cpp b/SPQR/Source/spqr_freefac.cpp
new file mode 100644
index 0000000..4d0cde0
--- /dev/null
+++ b/SPQR/Source/spqr_freefac.cpp
@@ -0,0 +1,68 @@
+// =============================================================================
+// === spqr_freefac ============================================================
+// =============================================================================
+
+// Frees the contents of the QR factor object.
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_freefac
+(
+    SuiteSparseQR_factorization <Entry> **QR_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+
+{
+    SuiteSparseQR_factorization <Entry> *QR ;
+    Long n, m, bncols, n1rows, r1nz ;
+
+    if (QR_handle == NULL || *QR_handle == NULL)
+    {
+        // nothing to do; caller probably ran out of memory
+        return ;
+    }
+    QR = *QR_handle ;
+
+    n      = QR->nacols ;
+    m      = QR->narows ;
+    bncols = QR->bncols ;
+    n1rows = QR->n1rows ;
+    r1nz   = QR->r1nz ;
+
+    spqr_freenum (& (QR->QRnum), cc) ;
+    spqr_freesym (& (QR->QRsym), cc) ;
+
+    cholmod_l_free (n+bncols, sizeof (Long),  QR->Q1fill,  cc) ; 
+    cholmod_l_free (m,        sizeof (Long),  QR->P1inv,   cc) ;
+    cholmod_l_free (m,        sizeof (Long),  QR->HP1inv,  cc) ;
+    cholmod_l_free (n1rows+1, sizeof (Long),  QR->R1p,     cc) ;
+    cholmod_l_free (r1nz,     sizeof (Long),  QR->R1j,     cc) ;
+    cholmod_l_free (r1nz,     sizeof (Entry), QR->R1x,     cc) ;
+    cholmod_l_free (n,        sizeof (Long),  QR->Rmap,    cc) ;
+    cholmod_l_free (n,        sizeof (Long),  QR->RmapInv, cc) ;
+
+    cholmod_l_free (1, sizeof (SuiteSparseQR_factorization <Entry>), QR, cc) ;
+    *QR_handle = NULL ;
+}
+
+// =============================================================================
+
+template void spqr_freefac <double>
+(
+    SuiteSparseQR_factorization <double> **QR_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template void spqr_freefac <Complex>
+(
+    SuiteSparseQR_factorization <Complex> **QR_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_freenum.cpp b/SPQR/Source/spqr_freenum.cpp
new file mode 100644
index 0000000..c6202f1
--- /dev/null
+++ b/SPQR/Source/spqr_freenum.cpp
@@ -0,0 +1,84 @@
+// =============================================================================
+// === spqr_freenum ============================================================
+// =============================================================================
+
+// Frees the contents of the QR Numeric object
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_freenum
+(
+    spqr_numeric <Entry> **QRnum_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    spqr_numeric <Entry> *QRnum ;
+    Long nf, n, m, rjsize, hisize, ns, stack, maxstack ;
+
+    if (QRnum_handle == NULL || *QRnum_handle == NULL)
+    {
+        // nothing to do; caller probably ran out of memory
+        return ;
+    }
+    QRnum = *QRnum_handle ;
+
+    n  = QRnum->n ;
+    m  = QRnum->m ;
+    nf = QRnum->nf ;
+    rjsize = QRnum->rjsize ;
+    hisize = QRnum->hisize ;
+    ns = QRnum->ns ;
+    maxstack = QRnum->maxstack ;
+
+    cholmod_l_free (nf, sizeof (Entry *), QRnum->Rblock, cc) ;
+    cholmod_l_free (n,  sizeof (char),    QRnum->Rdead,  cc) ;
+
+    if (QRnum->keepH)
+    {
+        // QRnum->H* items are present only if H is kept
+        cholmod_l_free (rjsize, sizeof (Long),  QRnum->HStair,  cc) ;
+        cholmod_l_free (rjsize, sizeof (Entry), QRnum->HTau,    cc) ;
+        cholmod_l_free (nf,     sizeof (Long),  QRnum->Hm,      cc) ;
+        cholmod_l_free (nf,     sizeof (Long),  QRnum->Hr,      cc) ;
+        cholmod_l_free (hisize, sizeof (Long),  QRnum->Hii,     cc) ;
+        cholmod_l_free (m,      sizeof (Long),  QRnum->HPinv,   cc) ;
+    }
+
+    // free each stack
+    if (QRnum->Stacks != NULL)
+    {
+        Long *Stack_size = QRnum->Stack_size ;
+        for (stack = 0 ; stack < ns ; stack++)
+        {
+            size_t s = Stack_size ? (Stack_size [stack]) : maxstack ;
+            cholmod_l_free (s, sizeof (Entry), QRnum->Stacks [stack], cc) ;
+        }
+    }
+    cholmod_l_free (ns, sizeof (Entry *), QRnum->Stacks, cc) ;
+    cholmod_l_free (ns, sizeof (Long), QRnum->Stack_size, cc) ;
+
+    cholmod_l_free (1, sizeof (spqr_numeric<Entry>), QRnum, cc) ;
+    *QRnum_handle = NULL ;
+}
+
+// =============================================================================
+
+template void spqr_freenum <double>
+(
+    spqr_numeric <double> **QRnum_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template void spqr_freenum <Complex>
+(
+    spqr_numeric <Complex> **QRnum_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_freesym.cpp b/SPQR/Source/spqr_freesym.cpp
new file mode 100644
index 0000000..8d6e605
--- /dev/null
+++ b/SPQR/Source/spqr_freesym.cpp
@@ -0,0 +1,87 @@
+// =============================================================================
+// === spqr_freesym ============================================================
+// =============================================================================
+
+// Frees the contents of the QR Symbolic object
+
+#include "spqr.hpp"
+
+void spqr_freesym
+(
+    spqr_symbolic **QRsym_handle,
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    spqr_symbolic *QRsym ;
+    spqr_gpu *QRgpu ;
+    Long m, n, anz, nf, rjsize, ns, ntasks ;
+
+    if (QRsym_handle == NULL || *QRsym_handle == NULL)
+    {
+        // nothing to do; caller probably ran out of memory
+        return ;
+    }
+    QRsym = *QRsym_handle  ;
+
+    m = QRsym->m ;
+    n = QRsym->n ;
+    nf = QRsym->nf ;
+    anz = QRsym->anz ;
+    rjsize = QRsym->rjsize ;
+
+    cholmod_l_free (n,      sizeof (Long), QRsym->Qfill, cc) ;
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Super, cc) ;
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Rp, cc) ;
+    cholmod_l_free (rjsize, sizeof (Long), QRsym->Rj, cc) ;
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Parent, cc) ;
+    cholmod_l_free (nf+2,   sizeof (Long), QRsym->Childp, cc) ;
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Child, cc) ;
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Post, cc) ;
+    cholmod_l_free (m,      sizeof (Long), QRsym->PLinv, cc) ;
+    cholmod_l_free (n+2,    sizeof (Long), QRsym->Sleft, cc) ;
+    cholmod_l_free (m+1,    sizeof (Long), QRsym->Sp, cc) ;
+    cholmod_l_free (anz,    sizeof (Long), QRsym->Sj, cc) ;
+
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Hip, cc) ;
+
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Fm, cc) ;
+    cholmod_l_free (nf+1,   sizeof (Long), QRsym->Cm, cc) ;
+
+    cholmod_l_free (n,      sizeof (Long), QRsym->ColCount, cc) ;
+
+    // gpu metadata
+    QRgpu = QRsym->QRgpu;
+    if(QRgpu)
+    {
+        cholmod_l_free (nf,   sizeof (Long),   QRgpu->RimapOffsets, cc) ;
+        cholmod_l_free (nf,   sizeof (Long),   QRgpu->RjmapOffsets, cc) ;
+        cholmod_l_free (nf+2, sizeof (Long),   QRgpu->Stagingp, cc) ;
+        cholmod_l_free (nf,   sizeof (Long),   QRgpu->StageMap, cc) ;
+        cholmod_l_free (nf+1, sizeof (size_t), QRgpu->FSize, cc) ;
+        cholmod_l_free (nf+1, sizeof (size_t), QRgpu->RSize, cc) ;
+        cholmod_l_free (nf+1, sizeof (size_t), QRgpu->SSize, cc) ;
+        cholmod_l_free (nf,   sizeof (Long),   QRgpu->FOffsets, cc) ;
+        cholmod_l_free (nf,   sizeof (Long),   QRgpu->ROffsets, cc) ;
+        cholmod_l_free (nf,   sizeof (Long),   QRgpu->SOffsets, cc) ;
+
+        cholmod_l_free (1, sizeof (spqr_gpu), QRgpu, cc) ;
+    }
+
+    // parallel analysis
+    ntasks = QRsym->ntasks ;
+    cholmod_l_free (ntasks+2, sizeof (Long), QRsym->TaskChildp, cc) ;
+    cholmod_l_free (ntasks+1, sizeof (Long), QRsym->TaskChild, cc) ;
+    cholmod_l_free (nf+1,     sizeof (Long), QRsym->TaskFront, cc) ;
+    cholmod_l_free (ntasks+2, sizeof (Long), QRsym->TaskFrontp, cc) ;
+    cholmod_l_free (ntasks+1, sizeof (Long), QRsym->TaskStack, cc) ;
+    cholmod_l_free (nf+1,     sizeof (Long), QRsym->On_stack, cc) ;
+
+    ns = QRsym->ns ;
+    cholmod_l_free (ns+2,     sizeof (Long), QRsym->Stack_maxstack, cc) ;
+
+    cholmod_l_free (1, sizeof (spqr_symbolic), QRsym, cc) ;
+
+    *QRsym_handle = NULL ;
+}
diff --git a/SPQR/Source/spqr_front.cpp b/SPQR/Source/spqr_front.cpp
new file mode 100644
index 0000000..4e519e1
--- /dev/null
+++ b/SPQR/Source/spqr_front.cpp
@@ -0,0 +1,655 @@
+// =============================================================================
+// === spqr_front ==============================================================
+// =============================================================================
+
+/* Given an m-by-n frontal matrix, use Householder reflections to reduce it
+   to upper trapezoidal form.  Columns 0:npiv-1 are checked against tol.
+
+        0    # x x x x x x
+        1    # x x x x x x
+        2    # x x x x x x
+        3    # x x x x x x
+        4    - # x x x x x   <- Stair [0] = 4
+        5      # x x x x x
+        6      # x x x x x
+        7      # x x x x x
+        8      - # x x x x   <- Stair [1] = 8
+        9        # x x x x
+       10        # x x x x
+       11        # x x x x
+       12        - # x x x   <- Stair [2] = 12
+       13          # x x x
+       14          - # x x   <- Stair [3] = 14
+       15            - # x   <- Stair [4] = 15
+       16              - #   <- Stair [5] = 16
+                         -   <- Stair [6] = 17
+
+    Suppose npiv = 3, and no columns fall below tol:
+
+        0    R r r r r r r
+        1    h R r r r r r
+        2    h h R r r r r
+        3    h h h C c c c
+        4    - h h h C c c   <- Stair [0] = 4
+        5      h h h h C c
+        6      h h h h h C
+        7      h h h h h h
+        8      - h h h h h   <- Stair [1] = 8
+        9        h h h h h
+       10        h h h h h
+       11        h h h h h
+       12        - h h h h   <- Stair [2] = 12
+       13          h h h h
+       14          - h h h   <- Stair [3] = 14
+       15            - h h   <- Stair [4] = 15
+       16              - h   <- Stair [5] = 16
+                         -   <- Stair [6] = 17
+
+    where r is an entry in the R block, c is an entry in the C (contribution)
+    block, and h is an entry in the H block (Householder vectors).  Diagonal
+    entries are capitalized.
+
+    Suppose the 2nd column has a norm <= tol; the result is a "squeezed" R:
+
+        0    R r r r r r r   <- Stair [1] = 0 to denote a dead pivot column
+        1    h - R r r r r
+        2    h - h C c c c
+        3    h - h h C c c
+        4    - - h h h C c   <- Stair [0] = 4
+        5      - h h h h C
+        6      - h h h h h
+        7      - h h h h h
+        8      - h h h h h
+        9        h h h h h
+       10        h h h h h
+       11        h h h h h
+       12        - h h h h   <- Stair [2] = 12
+       13          h h h h
+       14          - h h h   <- Stair [3] = 14
+       15            - h h   <- Stair [4] = 15
+       16              - h   <- Stair [5] = 16
+                         -   <- Stair [6] = 17
+
+    where "diagonal" entries are capitalized.  The 2nd H vector is missing
+    (it is H2 = I, identity).  The 2nd column of R is not deleted.  The
+    contribution block is always triangular, but the first npiv columns of
+    the R can become "staggered".  Columns npiv to n-1 in the R block are
+    always the same length.
+
+    If columns are found "dead", the staircase may be updated.  Stair[k] is
+    set to zero if k is dead.  Also, Stair[k] is increased, if necessary, to
+    ensure that R and C reside within the staircase.  For example:
+
+        0 0 0
+        0 0 x
+
+    with npiv = 2 has a Stair = [ 0 1 2 ] on output, to reflect the C block:
+
+        - C c
+        - - C
+
+    A tol of zero means that any nonzero norm (however small) is accepted;
+    only exact zero columns are flagged as dead.  A negative tol means that
+    the norms are ignored; a column is never flagged dead.  The default tol
+    is set elsewhere as 20 * (m+1) * eps * max column 2-norm of A.
+
+    LAPACK's dlarf* routines are used to construct and apply the Householder
+    reflections.  The panel size (block size) is provided as an input
+    parameter, which defines the number of Householder vectors in a panel.
+    However, when the front is small (or when the remaining part
+    of a front is small) the block size is increased to include the entire
+    front.  "Small" is defined, below, as fronts with fewer than 5000 entries.
+
+    NOTE: this function does not check its inputs.  If the caller runs out of
+    memory and passes NULL pointers, this function will segfault.
+*/
+
+#include "spqr.hpp"
+
+#define SMALL 5000
+#define MINCHUNK 4
+#define MINCHUNK_RATIO 4
+
+// =============================================================================
+// === spqr_private_house ======================================================
+// =============================================================================
+
+// Construct a Householder reflection H = I - tau * v * v' such that H*x is
+//  reduced to zero except for the first element.  Returns X [0] = the first
+//  entry of H*x, and X [1:n-1] = the Householder vector V [1:n-1], where
+//  V [0] = 1.  If X [1:n-1] is zero, then the H=I (tau = 0) is returned,
+//  and V [1:n-1] is all zero.  In MATLAB (1-based indexing), ignoring the
+//  rescaling done in dlarfg/zlarfg, this function computes the following:
+
+/*
+    function [x, tau] = house (x)
+    n = length (x) ;
+    beta = norm (x) ;
+    if (x (1) > 0)
+        beta = -beta ;
+    end
+    tau = (beta - x (1)) / beta ;
+    x (2:n) = x (2:n) / (x (1) - beta) ;
+    x (1) = beta ;
+*/
+
+//  Note that for the complex case, the reflection must be applied as H'*x,
+//  which requires that tau be conjugated in spqr_private_apply1.
+//
+//  This function performs about 3*n+2 flops
+
+inline double spqr_private_larfg (Long n, double *X, cholmod_common *cc)
+{
+    double tau = 0 ;
+    BLAS_INT N = n, one = 1 ;
+    if (CHECK_BLAS_INT && !EQ (N,n))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_DLARFG (&N, X, X + 1, &one, &tau) ;
+    }
+    return (tau) ;
+}
+
+
+inline Complex spqr_private_larfg (Long n, Complex *X, cholmod_common *cc)
+{
+    Complex tau = 0 ;
+    BLAS_INT N = n, one = 1 ;
+    if (CHECK_BLAS_INT && !EQ (N,n))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_ZLARFG (&N, X, X + 1, &one, &tau) ;
+    }
+    return (tau) ;
+}
+
+
+template <typename Entry> Entry spqr_private_house  // returns tau
+(
+    // inputs, not modified
+    Long n,
+
+    // input/output
+    Entry *X,           // size n
+
+    cholmod_common *cc
+)
+{
+    return (spqr_private_larfg (n, X, cc)) ;
+}
+
+
+// =============================================================================
+// === spqr_private_apply1 =====================================================
+// =============================================================================
+
+// Apply a single Householder reflection; C = C - tau * v * v' * C.  The
+// algorithm used by dlarf is:
+
+/*
+    function C = apply1 (C, v, tau)
+    w = C'*v ;
+    C = C - tau*v*w' ;
+*/
+
+//  For the complex case, we need to apply H', which requires that tau be
+//  conjugated.
+//
+//  If applied to a single column, this function performs 2*n-1 flops to
+//  compute w, and 2*n+1 to apply it to C, for a total of 4*n flops.
+
+inline void spqr_private_larf (Long m, Long n, double *V, double tau,
+    double *C, Long ldc, double *W, cholmod_common *cc)
+{
+    BLAS_INT M = m, N = n, LDC = ldc, one = 1 ;
+    char left = 'L' ;
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDC,ldc)))
+    {
+        cc->blas_ok = FALSE ;
+        
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_DLARF (&left, &M, &N, V, &one, &tau, C, &LDC, W) ;
+    }
+}
+
+inline void spqr_private_larf (Long m, Long n, Complex *V, Complex tau,
+    Complex *C, Long ldc, Complex *W, cholmod_common *cc)
+{
+    BLAS_INT M = m, N = n, LDC = ldc, one = 1 ;
+    char left = 'L' ;
+    Complex conj_tau = spqr_conj (tau) ;
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDC,ldc)))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_ZLARF (&left, &M, &N, V, &one, &conj_tau, C, &LDC, W) ;
+    }
+}
+
+
+template <typename Entry> void spqr_private_apply1
+(
+    // inputs, not modified
+    Long m,             // C is m-by-n
+    Long n,
+    Long ldc,           // leading dimension of C
+    Entry *V,           // size m, Householder vector V
+    Entry tau,          // Householder coefficient
+
+    // input/output
+    Entry *C,           // size m-by-n
+
+    // workspace, not defined on input or output
+    Entry *W,           // size n
+
+    cholmod_common *cc
+)
+{
+    Entry vsave ;
+    if (m <= 0 || n <= 0)
+    {
+        return ;        // nothing to do
+    }
+    vsave = V [0] ;     // temporarily restore unit diagonal of V
+    V [0] = 1 ;
+    spqr_private_larf (m, n, V, tau, C, ldc, W, cc) ;
+    V [0] = vsave ;     // restore V [0]
+}
+
+
+// =============================================================================
+// === spqr_front ==============================================================
+// =============================================================================
+
+// Factorize a front F into a sequence of Householder vectors H, and an upper
+// trapezoidal matrix R.  R may be a squeezed upper trapezoidal matrix if any
+// of the leading npiv columns are linearly dependent.  Returns the row index
+// rank that indicates the first entry in C, which is F (rank,npiv), or 0
+// on error.
+
+template <typename Entry> Long spqr_front
+(
+    // input, not modified
+    Long m,             // F is m-by-n with leading dimension m
+    Long n,
+    Long npiv,          // number of pivot columns
+    double tol,         // a column is flagged as dead if its norm is <= tol
+    Long ntol,          // apply tol only to first ntol pivot columns
+    Long fchunk,        // block size for compact WY Householder reflections,
+                        // treated as 1 if fchunk <= 1
+
+    // input/output
+    Entry *F,           // frontal matrix F of size m-by-n
+    Long *Stair,        // size n, entries F (Stair[k]:m-1, k) are all zero,
+                        // for each k = 0:n-1, and remain zero on output.
+    char *Rdead,        // size npiv; all zero on input.  If k is dead,
+                        // Rdead [k] is set to 1
+
+    // output, not defined on input
+    Entry *Tau,         // size n, Householder coefficients
+
+    // workspace, undefined on input and output
+    Entry *W,           // size b*n, where b = min (fchunk,n,m)
+
+    // input/output
+    double *wscale,
+    double *wssq,
+
+    cholmod_common *cc
+)
+{
+    Entry tau ;
+    double wk ;
+    Entry *V ;
+    Long k, t, g, g1, nv, k1, k2, i, t0, vzeros, mleft, nleft, vsize, minchunk,
+        rank ;
+
+    // NOTE: inputs are not checked for NULL (except if debugging enabled)
+
+    ASSERT (F != NULL) ;
+    ASSERT (Stair != NULL) ;
+    ASSERT (Rdead != NULL) ;
+    ASSERT (Tau != NULL) ;
+    ASSERT (W != NULL) ;
+    ASSERT (m >= 0 && n >= 0) ;
+
+    npiv = MAX (0, npiv) ;  // npiv must be between 0 and n
+    npiv = MIN (n, npiv) ;
+
+    g1 = 0 ;                // row index of first queued-up Householder
+    k1 = 0 ;                // pending Householders are in F (g1:t, k1:k2-1)
+    k2 = 0 ;
+    V = F ;                 // Householder vectors start here
+    g = 0 ;                 // number of good Householders found
+    nv = 0 ;                // number of Householder reflections queued up
+    vzeros = 0 ;            // number of explicit zeros in queued-up H's
+    t = 0 ;                 // staircase of current column
+    fchunk = MAX (fchunk, 1) ;
+    minchunk = MAX (MINCHUNK, fchunk/MINCHUNK_RATIO) ;
+    rank = MIN (m,npiv) ;  // F (rank,npiv) is the first entry in C.  rank
+                           // is also the number of rows in the R block,
+                           // and the number of good pivot columns found.
+
+    ntol = MIN (ntol, npiv) ;   // Note ntol can be negative, which means to
+                                // not use tol at all.
+
+    PR (("Front %ld by %ld with %ld pivots\n", m, n, npiv)) ;
+    for (k = 0 ; k < n ; k++)
+    {
+
+        // ---------------------------------------------------------------------
+        // reduce the kth column of F to eliminate all but "diagonal" F (g,k)
+        // ---------------------------------------------------------------------
+
+        // get the staircase for the kth column, and operate on the "diagonal"
+        // F (g,k); eliminate F (g+1:t-1, k) to zero
+        t0 = t ;            // t0 = staircase of column k-1
+        t = Stair [k] ;     // t = staircase of this column k
+
+        PR (("k %ld g %ld m %ld n %ld npiv %ld\n", k, g, m, n, npiv)) ;
+        if (g >= m)
+        {
+            // F (g,k) is outside the matrix, so we're done.  If this happens
+            // when k < npiv, then there is no contribution block.
+            PR (("hit the wall, npiv: %ld k %ld rank %ld\n", npiv, k, rank)) ;
+            for ( ; k < npiv ; k++)
+            {
+                Rdead [k] = 1 ;
+                Stair [k] = 0 ;         // remaining pivot columns all dead
+                Tau [k] = 0 ;
+            }
+            for ( ; k < n ; k++)
+            {
+                Stair [k] = m ;         // non-pivotal columns
+                Tau [k] = 0 ;
+            }
+            ASSERT (nv == 0) ;          // there can be no pending updates
+            return (rank) ;
+        }
+
+        // if t < g+1, then this column is all zero; fix staircase so that R is
+        // always inside the staircase.
+        t = MAX (g+1,t) ;
+        Stair [k] = t ;
+
+        // ---------------------------------------------------------------------
+        // If t just grew a lot since the last t, apply H now to all of F
+        // ---------------------------------------------------------------------
+
+        // vzeros is the number of zero entries in V after including the next
+        // Householder vector.  If it would exceed 50% of the size of V,
+        // apply the pending Householder reflections now, but only if
+        // enough vectors have accumulated.
+
+        vzeros += nv * (t - t0) ;
+        if (nv >= minchunk)
+        {
+            vsize = (nv*(nv+1))/2 + nv*(t-g1-nv) ;
+            if (vzeros > MAX (16, vsize/2))
+            {
+                // apply pending block of Householder reflections
+                PR (("(1) apply k1 %ld k2 %ld\n", k1, k2)) ;
+                spqr_larftb (
+                    0,                          // method 0: Left, Transpose
+                    t0-g1, n-k2, nv, m, m,
+                    V,                          // F (g1:t-1, k1:k1+nv-1)
+                    &Tau [k1],                  // Tau (k1:k-1)
+                    &F [INDEX (g1,k2,m)],       // F (g1:t-1, k2:n-1)
+                    W, cc) ;                    // size nv*nv + nv*(n-k2)
+                nv = 0 ;        // clear queued-up Householder reflections
+                vzeros = 0 ;
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // find a Householder reflection that reduces column k
+        // ---------------------------------------------------------------------
+
+        tau = spqr_private_house (t-g, &F [INDEX (g,k,m)], cc) ;
+
+        // ---------------------------------------------------------------------
+        // check to see if the kth column is OK
+        // ---------------------------------------------------------------------
+
+        if (k < ntol && (wk = spqr_abs (F [INDEX (g,k,m)], cc)) <= tol)
+        {
+
+            // -----------------------------------------------------------------
+            // norm (F (g:t-1, k)) is too tiny; the kth pivot column is dead
+            // -----------------------------------------------------------------
+
+            // keep track of the 2-norm of w, the dead column 2-norms
+            if (wk != 0)
+            {
+                // see also LAPACK's dnrm2 function
+                if ((*wscale) == 0)
+                {
+                    // this is the nonzero first entry in w
+                    (*wssq) = 1 ;
+                }
+                if ((*wscale) < wk)
+                {
+                    double rr = (*wscale) / wk ;
+                    (*wssq) = 1 + (*wssq) * rr * rr ;
+                    (*wscale) = wk ;
+                }
+                else
+                {
+                    double rr = wk / (*wscale) ;
+                    (*wssq) += rr * rr ;
+                }
+            }
+
+            // zero out F (g:m-1,k) and flag it as dead
+            for (i = g ; i < m ; i++)
+            {
+                // This is not strictly necessary.  On output, entries outside
+                // the staircase are ignored.
+                F [INDEX (i,k,m)] = 0 ;
+            }
+            Stair [k] = 0 ;
+            Tau [k] = 0 ;
+            Rdead [k] = 1 ;
+
+            if (nv > 0)
+            {
+                // apply pending block of Householder reflections
+                PR (("(2) apply k1 %ld k2 %ld\n", k1, k2)) ;
+                spqr_larftb (
+                    0,                          // method 0: Left, Transpose
+                    t0-g1, n-k2, nv, m, m,
+                    V,                          // F (g1:t-1, k1:k1+nv-1)
+                    &Tau [k1],                  // Tau (k1:k-1)
+                    &F [INDEX (g1,k2,m)],       // F (g1:t-1, k2:n-1)
+                    W, cc) ;                    // size nv*nv + nv*(n-k2)
+                nv = 0 ;        // clear queued-up Householder reflections
+                vzeros = 0 ;
+            }
+
+        }
+        else
+        {
+
+            // -----------------------------------------------------------------
+            // one more good pivot column found
+            // -----------------------------------------------------------------
+
+            Tau [k] = tau ;             // save the Householder coefficient
+            if (nv == 0)
+            {
+                // start the queue of pending Householder updates, and define
+                // the current panel as k1:k2-1
+                g1 = g ;                        // first row of V
+                k1 = k ;                        // first column of V
+                k2 = MIN (n, k+fchunk) ;        // k2-1 is last col in panel
+                V = &F [INDEX (g1,k1,m)] ;      // pending V starts here
+
+                // check for switch to unblocked code
+                mleft = m-g1 ;                  // number of rows left
+                nleft = n-k1 ;                  // number of columns left
+                if (mleft * (nleft-(fchunk+4)) < SMALL || mleft <= fchunk/2
+                    || fchunk <= 1)
+                {
+                    // remaining matrix is small; switch to unblocked code by
+                    // including the rest of the matrix in the panel.  Always
+                    // use unblocked code if fchunk <= 1.
+                    k2 = n ;
+                }
+            }
+            nv++ ;  // one more pending update; V is F (g1:t-1, k1:k1+nv-1)
+
+            // -----------------------------------------------------------------
+            // keep track of "pure" flops, for performance testing only
+            // -----------------------------------------------------------------
+
+            // The Householder vector is of length t-g, including the unit
+            // diagonal, and takes 3*(t-g) flops to compute.  It will be
+            // applied as a block, but compute the "pure" flops by assuming
+            // that this single Householder vector is computed and then applied
+            // just by itself to the rest of the frontal matrix (columns
+            // k+1:n-1, or n-k-1 columns).  Applying the Householder reflection
+            // to just one column takes 4*(t-g) flops.  This computation only
+            // works if TBB is disabled, merely because it uses a global
+            // variable to keep track of the flop count.  If TBB is used, this
+            // computation may result in a race condition; it is disabled in
+            // that case.
+
+            FLOP_COUNT ((t-g) * (3 + 4 * (n-k-1))) ;
+
+            // -----------------------------------------------------------------
+            // apply the kth Householder reflection to the current panel
+            // -----------------------------------------------------------------
+
+            // F (g:t-1, k+1:k2-1) -= v * tau * v' * F (g:t-1, k+1:k2-1), where
+            // v is stored in F (g:t-1,k).  This applies just one reflection
+            // to the current panel.
+            PR (("apply 1: k %ld\n", k)) ;
+            spqr_private_apply1 (t-g, k2-k-1, m, &F [INDEX (g,k,m)], tau,
+                &F [INDEX (g,k+1,m)], W, cc) ;
+
+            g++ ;   // one more pivot found
+
+            // -----------------------------------------------------------------
+            // apply the Householder reflections if end of panel reached
+            // -----------------------------------------------------------------
+
+            if (k == k2-1 || g == m)            // or if last pivot is found
+            {
+                // apply pending block of Householder reflections
+                PR (("(3) apply k1 %ld k2 %ld\n", k1, k2)) ;
+                spqr_larftb (
+                    0,                          // method 0: Left, Transpose
+                    t-g1, n-k2, nv, m, m,
+                    V,                          // F (g1:t-1, k1:k1+nv-1)
+                    &Tau [k1],                  // Tau (k1:k2-1)
+                    &F [INDEX (g1,k2,m)],       // F (g1:t-1, k2:n-1)
+                    W, cc) ;                    // size nv*nv + nv*(n-k2)
+                nv = 0 ;        // clear queued-up Householder reflections
+                vzeros = 0 ;
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // determine the rank of the pivot columns
+        // ---------------------------------------------------------------------
+
+        if (k == npiv-1)
+        {
+            // the rank is the number of good columns found in the first
+            // npiv columns.  It is also the number of rows in the R block.
+            // F (rank,npiv) is first entry in the C block.
+            rank = g ;
+            PR (("rank of Front pivcols: %ld\n", rank)) ;
+        }
+    }
+
+    if (CHECK_BLAS_INT && !cc->blas_ok)
+    {
+        // This cannot occur if the BLAS_INT and the Long are the same integer.
+        // In that case, CHECK_BLAS_INT is FALSE at compile-time, and the
+        // compiler will then remove this as dead code.
+        ERROR (CHOLMOD_INVALID, "problem too large for the BLAS") ;
+        return (0) ;
+    }
+
+    return (rank) ;
+}
+
+
+// =============================================================================
+
+template Long spqr_front <double>
+(
+    // input, not modified
+    Long m,             // F is m-by-n with leading dimension m
+    Long n,
+    Long npiv,          // number of pivot columns
+    double tol,         // a column is flagged as dead if its norm is <= tol
+    Long ntol,          // apply tol only to first ntol pivot columns
+    Long fchunk,        // block size for compact WY Householder reflections,
+                        // treated as 1 if fchunk <= 1 (in which case the
+                        // unblocked code is used).
+
+    // input/output
+    double *F,          // frontal matrix F of size m-by-n
+    Long *Stair,        // size n, entries F (Stair[k]:m-1, k) are all zero,
+                        // and remain zero on output.
+    char *Rdead,        // size npiv; all zero on input.  If k is dead,
+                        // Rdead [k] is set to 1
+
+    // output, not defined on input
+    double *Tau,        // size n, Householder coefficients
+
+    // workspace, undefined on input and output
+    double *W,          // size b*n, where b = min (fchunk,n,m)
+
+    // input/output
+    double *wscale,
+    double *wssq,
+
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template Long spqr_front <Complex>
+(
+    // input, not modified
+    Long m,             // F is m-by-n with leading dimension m
+    Long n,
+    Long npiv,          // number of pivot columns
+    double tol,         // a column is flagged as dead if its norm is <= tol
+    Long ntol,          // apply tol only to first ntol pivot columns
+    Long fchunk,        // block size for compact WY Householder reflections,
+                        // treated as 1 if fchunk <= 1 (in which case the
+                        // unblocked code is used). 
+
+    // input/output
+    Complex *F,         // frontal matrix F of size m-by-n
+    Long *Stair,        // size n, entries F (Stair[k]:m-1, k) are all zero,
+                        // and remain zero on output.
+    char *Rdead,        // size npiv; all zero on input.  If k is dead,
+                        // Rdead [k] is set to 1
+
+    // output, not defined on input
+    Complex *Tau,       // size n, Householder coefficients
+
+    // workspace, undefined on input and output
+    Complex *W,         // size b*n, where b = min (fchunk,n,m)
+
+    // input/output
+    double *wscale,
+    double *wssq,
+
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_fsize.cpp b/SPQR/Source/spqr_fsize.cpp
new file mode 100644
index 0000000..95305de
--- /dev/null
+++ b/SPQR/Source/spqr_fsize.cpp
@@ -0,0 +1,130 @@
+// =============================================================================
+// === spqr_fsize ==============================================================
+// =============================================================================
+
+// Compute the number of rows in front F, initialize its staircase, and 
+// create its Fmap
+
+#include "spqr.hpp"
+
+Long spqr_fsize     // returns # of rows of F
+(
+    // inputs, not modified
+    Long f,
+    Long *Super,            // size nf, from QRsym
+    Long *Rp,               // size nf, from QRsym
+    Long *Rj,               // size rjsize, from QRsym
+    Long *Sleft,            // size n+2, from QRsym
+    Long *Child,            // size nf, from QRsym
+    Long *Childp,           // size nf+1, from QRsym
+    Long *Cm,               // size nf
+
+    // outputs, not defined on input
+    Long *Fmap,             // size n
+    Long *Stair             // size fn
+)
+{
+    Long col1, col2, p1, p2, fp, fn, fm, col, p, j, c, pc, cm, ci, t, fpc ;
+
+    // -------------------------------------------------------------------------
+    // get the front F
+    // -------------------------------------------------------------------------
+
+    // pivotal columns Super [f] ... Super [f+1]-1
+    col1 = Super [f] ;      // front F has columns col1:col2-1
+    col2 = Super [f+1] ;
+    p1 = Rp [f] ;           // Rj [p1:p2-1] = columns in F
+    p2 = Rp [f+1] ;
+    fp = col2 - col1 ;      // first fp columns are pivotal
+    fn = p2 - p1 ;          // exact number of columns of F
+    ASSERT (fp > 0) ;       // all fronts have at least one pivot column
+    ASSERT (fp <= fn) ;
+
+    PR (("\n---- Front: %ld\n", f)) ;
+    PR (("Get Fsize: col1 %ld col2 %ld fp %ld fn %ld\n", col1, col2, fp, fn)) ;
+
+    // -------------------------------------------------------------------------
+    // create the Fmap for front F
+    // -------------------------------------------------------------------------
+
+    for (p = p1, j = 0 ; p < p2 ; p++, j++)
+    {
+        col = Rj [p] ;              // global column col is jth col of F
+        Fmap [col] = j ;
+        PR (("Fmap (%ld): %ld \n", col, j)) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // initialize the staircase for front F
+    // -------------------------------------------------------------------------
+
+    // initialize the staircase with original rows of S
+    for (j = 0 ; j < fp ; j++)
+    {
+        // global column j+col1 is the jth pivot column of front F
+        col = j + col1 ;
+        Stair [j] = Sleft [col+1] - Sleft [col] ;
+        PR (("init rows, j: %ld count %ld\n", j, Stair [j])) ;
+    }
+
+    // contribution blocks from children will be added here
+    for ( ; j < fn ; j++)
+    {
+        Stair [j] = 0 ;
+    }
+
+    // -------------------------------------------------------------------------
+    // construct the staircase for each child
+    // -------------------------------------------------------------------------
+
+    for (p = Childp [f] ; p < Childp [f+1] ; p++)
+    {
+        c = Child [p] ;                 // get the child c of front F
+        PR (("child %ld\n", c)) ;
+        pc = Rp [c] ;                   // get the pattern of child R
+        cm = Cm [c] ;                   // # of rows in child C
+        // fnc = (Rp [c+1] - pc) ;      // total # cols in child F
+        fpc = Super [c+1] - Super [c] ; // # of pivot cols in child
+        // cn = (fnc - fpc) ;           // # of cols in child C
+        // ASSERT (cm >= 0 && cm <= cn) ;
+        pc += fpc ;                     // pointer to column indices in C
+        // ASSERT (pc + cn == Rp [c+1]) ;
+        // PR (("  cm %ld cn %ld\n", cm, cn)) ;
+
+        // add the child rows to the staircase
+        for (ci = 0 ; ci < cm ; ci++)
+        {
+            col = Rj [pc + ci] ;        // leftmost col of this row of C
+            j = Fmap [col] ;            // global col is jth col of F
+            PR (("  child col %ld j %ld\n", col, j)) ;
+            ASSERT (j >= 0 && j < fn) ;
+            Stair [j]++ ;               // add this row to jth staircase
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // replace Stair with cumsum ([0 Stair]), and find # rows of F
+    // -------------------------------------------------------------------------
+
+    fm = 0 ;
+    for (j = 0 ; j < fn ; j++)
+    {
+        t = fm ;
+        fm += Stair [j] ;
+        Stair [j] = t ;
+    }
+    PR (("fm %ld %ld\n", fm, Stair [fn-1])) ;
+
+    // Note that the above code differs from the symbolic analysis.  The
+    // nonzero values in column j of F will reside in row 0 of F to row
+    // Stair [j+1]-1 of F.  Once the rows of S and the children of F are
+    // assembled, this will change to Stair [j]-1.
+    //
+    // When a row is assembled into F whose leftmost column is j, it is placed
+    // as row Stair [j], which is then incremented to accommodate the next row
+    // with leftmost column j.  At that point, Stair [0:fn-1] will then "equal"
+    // Stair [0:fn-1] in the symbolic analysis (except that the latter is an
+    // upper bound if rank detection has found failed pivot columns).
+
+    return (fm) ;
+}
diff --git a/SPQR/Source/spqr_happly.cpp b/SPQR/Source/spqr_happly.cpp
new file mode 100644
index 0000000..2df3823
--- /dev/null
+++ b/SPQR/Source/spqr_happly.cpp
@@ -0,0 +1,443 @@
+// =============================================================================
+// === spqr_happly =============================================================
+// =============================================================================
+
+// Applies a set n of sparse Householder vectors to a dense m-by-n matrix X.
+//
+//  Let H(k) = I - Tau(k) * V(k) * V(k)', then either of the following is done:
+//
+//  method 0: X = Q'*X
+//      X = H(nh-1) * ... * H(1) * H(0) * X         where H is m-by-nh
+//
+//  method 1: X = Q*X
+//      X = H(0)' * H(1)' * ... * H(nh-1)' * X      where H is m-by-nh
+//
+//  method 2: X = X*Q'
+//      X = X * H(nh-1) * ... * H(1) * H(0)         where H is n-by-nh
+//
+//  method 3: X = X*Q
+//      X = X * H(0)' * H(1) * ... * H(nh-1)'       where H is n-by-nh
+//
+//  The first nonzero entry in each column of H is assumed to be equal to 1.
+//  This function does not apply the row permutation vector (the Q.P part of
+//  the Q struct in the MATLAB interface).
+
+#include "spqr.hpp"
+
+// =============================================================================
+// === spqr_private_do_panel ===================================================
+// =============================================================================
+
+// Loads V with a panel of Householder vectors and applies them to X
+
+template <typename Entry> void spqr_private_do_panel
+(
+    // inputs, not modified
+    int method,         // which method to use (0,1,2,3)
+    Long m,
+    Long n,
+    Long v,             // number of Householder vectors in the panel
+    Long *Wi,           // Wi [0:v-1] defines the pattern of the panel
+    Long h1,            // load H (h1) to H (h2-1) into V
+    Long h2,
+
+    // FUTURE : make H cholmod_sparse:
+    Long *Hp,           // Householder vectors: mh-by-nh sparse matrix
+    Long *Hi,
+    Entry *Hx,
+
+    Entry *Tau,         // Householder coefficients (size nh)
+
+    // input/output
+    Long *Wmap,         // inverse of Wi on input, set to all EMPTY on output
+    Entry *X,           // m-by-n with leading dimension m
+
+    // workspace, undefined on input and output
+    Entry *V,           // dense panel
+    Entry *C,           // workspace
+    Entry *W,           // workspace
+    cholmod_common *cc
+)
+{
+    Entry *V1 ;
+    Long h, k, p, i ;
+
+    // -------------------------------------------------------------------------
+    // load the panel with Householder vectors h1 ... h2-1
+    // -------------------------------------------------------------------------
+
+    // Wi [0 .. v-1] defines the pattern of the panel, and Wmap gives its
+    // inverse (Wmap [Wi [k]] == k for k = 0 to v-1).  The V matrix is v-by-k.
+
+#ifndef NDEBUG
+    for (k = 0 ; k < v ; k++) ASSERT (Wmap [Wi [k]] == k) ;
+#endif
+
+    V1 = V ;
+    for (h = h1 ; h < h2 ; h++)
+    {
+        PR (("loading %ld\n", h)) ;
+        for (k = 0 ; k < v ; k++)
+        {
+            V1 [k] = 0 ;
+        }
+        for (p = Hp [h] ; p < Hp [h+1] ; p++)
+        {
+            i = Hi [p] ;
+            ASSERT (Wmap [i] >= 0 && Wmap [i] < v) ;
+            V1 [Wmap [i]] = Hx [p] ;
+        }
+        V1 += v ;
+    }
+
+    // -------------------------------------------------------------------------
+    // apply the panel
+    // -------------------------------------------------------------------------
+
+    spqr_panel (method, m, n, v, h2-h1, Wi, V, Tau+h1, m, X, C, W, cc) ;
+
+    // -------------------------------------------------------------------------
+    // clear the panel mapping
+    // -------------------------------------------------------------------------
+
+    for (k = 0 ; k < v ; k++)
+    {
+        i = Wi [k] ;
+        Wmap [i] = EMPTY ;
+    }
+}
+
+
+// =============================================================================
+// === spqr_happly =============================================================
+// =============================================================================
+
+template <typename Entry> void spqr_happly
+(
+    // input
+    int method,     // 0,1,2,3
+
+    Long m,         // X is m-by-n with leading dimension m
+    Long n,
+
+    // FUTURE : make H cholmod_sparse:
+    Long nh,        // number of Householder vectors
+    Long *Hp,       // size nh+1, column pointers for H
+    Long *Hi,       // size hnz = Hp [nh], row indices of H
+    Entry *Hx,      // size hnz, Householder values.  Note that the first
+                    // entry in each column must be equal to 1.0
+
+    Entry *Tau,     // size nh
+
+    // input/output
+    Entry *X,       // size m-by-n with leading dimension m
+
+    // workspace
+    Long vmax,
+    Long hchunk,
+    Long *Wi,       // size vmax
+    Long *Wmap,     // size MAX(mh,1) where H is mh-by-nh; all EMPTY
+    Entry *C,       // size csize
+    Entry *V,       // size vsize
+    cholmod_common *cc
+)
+{
+    Entry *W ;
+    Long h, h1, h2, i, k, hmax, hmin, v, v1, p, done, v2, mh ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    if (m == 0 || n == 0 || nh == 0)
+    {
+        // nothing to do
+        return ;
+    }
+
+    // number of rows of H
+    mh = (method == 0 || method == 1) ? m : n ;
+
+    W = V + vmax * hchunk ;
+
+    // -------------------------------------------------------------------------
+    // apply the Householder vectors
+    // -------------------------------------------------------------------------
+
+    if (method == 0 || method == 3)
+    {
+
+        // ---------------------------------------------------------------------
+        // apply in forward direction
+        // ---------------------------------------------------------------------
+
+        PR (("\nHAPPLY Forward, method %d\n", method)) ;
+
+        for (h1 = 0 ; h1 < nh ; h1 = h2)
+        {
+
+            // -----------------------------------------------------------------
+            // start the panel with Householder vector h1
+            // -----------------------------------------------------------------
+
+#ifndef NDEBUG
+            for (i = 0 ; i < mh ; i++) ASSERT (Wmap [i] == EMPTY) ;
+            PR (("\n ------ h1 %ld\n", h1)) ;
+#endif
+
+            v = 0 ;
+            for (p = Hp [h1] ; p < Hp [h1+1] ; p++)
+            {
+                i = Hi [p] ;
+                Wmap [i] = v ;
+                Wi [v] = i ;
+                v++ ;
+            }
+            Long this_vmax = 2*v + 8 ;               // max # rows in this panel
+            this_vmax = MIN (this_vmax, mh) ;
+            ASSERT (this_vmax <= vmax) ;
+
+            // -----------------------------------------------------------------
+            // acquire pattern of panel of Householder vectors
+            // -----------------------------------------------------------------
+
+            hmax = MIN (h1 + hchunk, nh) ;   // at most h1 .. hmax-1 in panel
+            done = FALSE ;
+            for (h2 = h1+1 ; h2 < hmax ; h2++)
+            {
+                PR (("try %ld\n", h2)) ;
+                p = Hp [h2] ;
+                i = Hi [p] ;
+                // check to see that this vector fits in the lower triangle
+                if (h2-h1 >= v || Wi [h2-h1] != i)
+                {
+                    // h2 will not be part of this panel
+                    PR (("triangle broken\n")) ;
+                    break ;
+                }
+                v1 = v ;      // save this in case h2 is not part of panel
+                for ( ; p < Hp [h2+1] ; p++)
+                {
+                    i = Hi [p] ;
+                    if (Wmap [i] == EMPTY)
+                    {
+                        if (v >= this_vmax)
+                        {
+                            // h2 is not part of this panel
+                            for (v2 = v1 ; v2 < v ; v2++)
+                            {
+                                // clear the partial column h2 from the panel
+                                Wmap [Wi [v2]] = EMPTY ;
+                            }
+                            v = v1 ;
+                            done = TRUE ;
+                            PR (("too long\n")) ;
+                            break ;
+                        }
+                        Wmap [i] = v ;
+                        Wi [v] = i ;
+                        v++ ;
+                    }
+                }
+                if (done)
+                {
+                    break ;
+                }
+            }
+
+            // -----------------------------------------------------------------
+            // load and apply the panel
+            // -----------------------------------------------------------------
+
+            spqr_private_do_panel (method, m, n, v, Wi, h1, h2, Hp, Hi, Hx, Tau,
+                Wmap, X, V, C, W, cc) ;
+        }
+
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // apply in backward direction
+        // ---------------------------------------------------------------------
+
+        PR (("\nHAPPLY Backward, method %d\n", method)) ;
+
+        for (h2 = nh ; h2 > 0 ; h2 = h1)
+        {
+
+            // -----------------------------------------------------------------
+            // start the panel with Householder vector h2-1 as the last one
+            // -----------------------------------------------------------------
+
+#ifndef NDEBUG
+            for (i = 0 ; i < mh ; i++) ASSERT (Wmap [i] == EMPTY) ;
+            PR (("\n ------ h2 %ld\n", h2)) ;
+#endif
+
+            // use Wi as a stack, growing upwards starting at Wi [vmax-1]
+            h = h2-1 ;
+            v = vmax ;
+            for (p = Hp [h+1]-1 ; p >= Hp [h] ; p--)
+            {
+                i = Hi [p] ;
+                v-- ;
+                Wmap [i] = v ;              // this will be shifted later
+                Wi [v] = i ;
+            }
+            Long this_vmin = v - 32 ;
+            this_vmin = MAX (this_vmin, 0) ;
+
+            // -----------------------------------------------------------------
+            // acquire pattern of panel of Householder vectors
+            // -----------------------------------------------------------------
+
+            hmin = MAX (h2 - hchunk, 0) ;    // at most hmin .. h2-1 in panel
+            done = FALSE ;
+
+            for (h1 = h2-2 ; h1 >= hmin ; h1--)
+            {
+                // try to add h1 to the panel
+                PR (("try %ld\n", h1)) ;
+
+                p = Hp [h1] ;
+
+                // check to see that this vector fits in the lower triangle
+                Long hlen = Hp [h1+1] - p ;
+                if (hlen > 1 && Hi [p+1] != Wi [v])
+                {
+                    // h1 will not be part of this panel
+                    h1++ ;
+                    PR (("triangle broken\n")) ;
+                    break ;
+                }
+
+                // ensure that the first entry of h1 is not in Wi
+                i = Hi [p] ;
+                if (Wmap [i] != EMPTY)
+                {
+                    h1++ ;
+                    PR (("first entry %ld present; triangle broken\n", i)) ;
+                    break ;
+                }
+
+                // ensure that all of h1 is already in Wi (except first entry)
+                for (p++ ; p < Hp [h1+1] ; p++)
+                {
+                    i = Hi [p] ;
+                    if (Wmap [i] == EMPTY)
+                    {
+                        // h1 is not in the panel
+                        done = TRUE ;
+                        PR (("pattern broken\n")) ;
+                        h1++ ;
+                        break ;
+                    }
+                }
+
+                if (done)
+                {
+                    break;
+                }
+
+                // h1 is added to the panel
+                p = Hp [h1] ;
+                i = Hi [p] ;
+                v-- ;
+                Wi [v] = i ;
+                Wmap [i] = v ;              // this will be shifted later
+
+#ifndef NDEBUG
+                for (k = v ; k < vmax ; k++) ASSERT (Wmap [Wi [k]] == k) ;
+#endif
+            }
+
+            h1 = MAX (h1, hmin) ;
+
+            // shift Wi upwards from Wi [v..vmax-1] to Wi [0...], and
+            // recompute Wmap
+
+            v2 = 0 ;
+            for (k = v ; k < vmax ; k++)
+            {
+                Wi [v2++] = Wi [k] ;
+            }
+            v = v2 ;
+
+            for (k = 0 ; k < v ; k++)
+            {
+                Wmap [Wi [k]] = k ;
+            }
+
+            // -----------------------------------------------------------------
+            // load and apply the panel
+            // -----------------------------------------------------------------
+
+            spqr_private_do_panel (method, m, n, v, Wi, h1, h2, Hp, Hi, Hx, Tau,
+                Wmap, X, V, C, W, cc) ;
+        }
+    }
+}
+
+
+// =============================================================================
+
+template void spqr_happly <double>
+(
+    // input
+    int method,     // 0,1,2,3
+
+    Long m,         // X is m-by-n
+    Long n,
+
+    Long nh,        // number of Householder vectors
+    Long *Hp,       // size nh+1, column pointers for H
+    Long *Hi,       // size hnz = Hp [nh], row indices of H
+    double *Hx,     // size hnz, Householder values.  Note that the first
+                    // entry in each column must be equal to 1.0
+
+    double *Tau,    // size nh
+
+    // input/output
+    double *X,      // size m-by-n with leading dimension m
+
+    // workspace
+    Long vmax,
+    Long hchunk,
+    Long *Wi,       // size vmax
+    Long *Wmap,     // size MAX(mh,1) where H is mh-by-nh
+    double *C,      // size csize
+    double *V,      // size vsize
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template void spqr_happly <Complex>
+(
+    // input
+    int method,     // 0,1,2,3
+
+    Long m,         // X is m-by-n
+    Long n,
+
+    Long nh,        // number of Householder vectors
+    Long *Hp,       // size nh+1, column pointers for H
+    Long *Hi,       // size hnz = Hp [nh], row indices of H
+    Complex *Hx,    // size hnz, Householder values.  Note that the first
+                    // entry in each column must be equal to 1.0
+
+    Complex *Tau,   // size nh
+
+    // input/output
+    Complex *X,     // size m-by-n with leading dimension m
+
+    // workspace
+    Long vmax,
+    Long hchunk,
+    Long *Wi,       // size vmax
+    Long *Wmap,     // size MAX(mh,1) where H is mh-by-nh
+    Complex *C,     // size csize
+    Complex *V,     // size vsize
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_happly_work.cpp b/SPQR/Source/spqr_happly_work.cpp
new file mode 100644
index 0000000..b49b472
--- /dev/null
+++ b/SPQR/Source/spqr_happly_work.cpp
@@ -0,0 +1,96 @@
+// =============================================================================
+// === spqr_happly_work ========================================================
+// =============================================================================
+
+// Determines the workspace workspace needed by spqr-happly
+
+#include "spqr.hpp"
+
+int spqr_happly_work
+(
+    // input
+    int method,     // 0,1,2,3 
+
+    Long m,         // X is m-by-n
+    Long n,
+
+    // FUTURE : make H cholmod_sparse:
+    Long nh,        // number of Householder vectors
+    Long *Hp,       // size nh+1, column pointers for H
+    Long hchunk,
+
+    // outputs; sizes of workspaces needed
+    Long *p_vmax, 
+    Long *p_vsize, 
+    Long *p_csize
+)
+{
+    Long maxhlen, h, hlen, vmax, mh, vsize, csize, vsize1, vsize2 ;
+    int ok = TRUE ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    *p_vmax = 0 ;
+    *p_vsize = 0 ;
+    *p_csize = 0 ;
+
+    if (m == 0 || n == 0 || nh == 0)
+    {
+        // nothing to do
+        return (TRUE) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // determine the length of the longest Householder vector
+    // -------------------------------------------------------------------------
+
+    maxhlen = 1 ;
+    for (h = 0 ; h < nh ; h++)
+    {
+        hlen = Hp [h+1] - Hp [h] ;
+        maxhlen = MAX (maxhlen, hlen) ;
+    }
+
+    // number of rows of H
+    mh = (method == 0 || method == 1) ? m : n ;
+
+    // -------------------------------------------------------------------------
+    // determine workspace sizes
+    // -------------------------------------------------------------------------
+
+    // Long overflow cannot occur with vmax since H is already allocated
+    if (method == 0 || method == 3)
+    {
+        // apply H in the forward direction; H(0) first, H(nh-1) last
+        vmax = 2 * maxhlen + 8 ;
+    }
+    else
+    {
+        // apply H in the backward direction; H(nh-1) first, H(0) last
+        vmax = maxhlen + hchunk ;
+    }
+
+    vmax = MIN (vmax, mh) ;
+    vmax = MAX (vmax, 2) ;
+
+    // csize = vmax * ((method <= 1) ? n : m) ;
+    csize = spqr_mult (vmax, (method <= 1) ? n : m, &ok) ;
+
+    // vsize = (hchunk*hchunk + ((method <= 1) ? n : m)*hchunk + vmax*hchunk) ;
+    vsize  = spqr_mult (hchunk, hchunk, &ok) ;
+    vsize1 = spqr_mult ((method <= 1) ? n : m, hchunk, &ok) ;
+    vsize2 = spqr_mult (vmax, hchunk, &ok) ;
+    vsize = spqr_add (vsize, vsize1, &ok) ;
+    vsize = spqr_add (vsize, vsize2, &ok) ;
+
+    // -------------------------------------------------------------------------
+    // return workspace sizes
+    // -------------------------------------------------------------------------
+
+    *p_vmax = vmax ;
+    *p_vsize = vsize ;
+    *p_csize = csize ;
+    return (ok) ;
+}
diff --git a/SPQR/Source/spqr_hpinv.cpp b/SPQR/Source/spqr_hpinv.cpp
new file mode 100644
index 0000000..ad24351
--- /dev/null
+++ b/SPQR/Source/spqr_hpinv.cpp
@@ -0,0 +1,189 @@
+// =============================================================================
+// === spqr_hpinv ==============================================================
+// =============================================================================
+
+// Finalizes the row permutation that is implicit in the pattern of H.  This
+// must be done sequentially, after all threads have finished factorizing the
+// matrix and finding all the dead columns.  Also determines QRnum->maxfm.
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_hpinv
+(
+    // input
+    spqr_symbolic *QRsym,
+    // input/output
+    spqr_numeric <Entry> *QRnum,
+    // workspace
+    Long *W              // size QRnum->m
+)
+{
+    Long *Hi, *Hii, *Hip, *HPinv, *Hr, *Super, *Rp, *Hm, *Sleft, *PLinv ;
+    Long nf, m, n, f, rm, i, row1, row2, fm, fn, fp, cm, cn, maxfm ;
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QRsym and QRnum objects
+    // -------------------------------------------------------------------------
+
+    // this function must not be called if Householder vectors weren't kept
+    ASSERT (QRnum->keepH) ;
+
+    nf = QRsym->nf ;
+    m = QRsym->m ;
+    n = QRsym->n ;
+    Hr = QRnum->Hr ;
+    Hm = QRnum->Hm ;
+    Hii = QRnum->Hii ;
+    Hip = QRsym->Hip ;
+    HPinv = QRnum->HPinv ;
+    Super = QRsym->Super ;
+    Rp = QRsym->Rp ;
+    Sleft = QRsym->Sleft ;
+    PLinv = QRsym->PLinv ;
+    maxfm = 0 ;
+
+#ifndef NDEBUG
+    for (f = 0 ; f < nf ; f++)
+    {
+        Long j ;
+        rm = 0 ;
+        for (j = Super [f] ; j < Super [f+1] ; j++)
+        {
+            if (!(QRnum->Rdead [j]))
+            {
+                rm++ ;                      // column j is not dead
+            }
+        }
+        ASSERT (Hr [f] == rm) ;             // # rows in R block
+    }
+    for (i = 0 ; i < m ; i++)
+    {
+        W [i] = EMPTY ;
+        PR (("For S, PLinv row perm (%ld) = %ld\n", i, PLinv [i])) ;
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // extract the inverse permutation for R1
+    // -------------------------------------------------------------------------
+
+    row1 = 0 ;                              // number of squeezed rows of R
+    row2 = m ;                              // for ordering empty rows of R
+
+    // order the empty rows of S
+    ASSERT (Sleft [n+1] == m) ;
+    PR (("Sleft [%ld] = %ld, m = %ld\n", n, Sleft [n], m)) ;
+    for (i = Sleft [n] ; i < m ; i++)
+    {
+        // row i of S is empty, and so it does not appear as a row in the Hi
+        // pattern of any front
+        PR (("empty row %ld\n", i)) ;
+        W [i] = (--row2) ;
+    }
+
+    // order the non-empty rows of S that appear in frontal matrices
+    for (f = 0 ; f < nf ; f++)              // traverse in natural order
+    {
+        Hi = &Hii [Hip [f]] ;               // list of row indices of H
+
+        // order the pivotal rows of F
+        rm = Hr [f] ;                       // number of rows in R block
+        for (i = 0 ; i < rm ; i++)
+        {
+            // row1 is a row of R; it is row Hi [i] of H and S
+            ASSERT (Hi [i] >= 0 && Hi [i] < m) ;
+            ASSERT (W [Hi [i]] == EMPTY) ;
+            W [Hi [i]] = row1++ ;
+        }
+
+        // order the non-pivotal rows of F which are not in the C block
+        fp = Super [f+1] - Super [f] ;
+        fn = Rp [f+1] - Rp [f] ;
+        fm = Hm [f] ;
+        maxfm = MAX (maxfm, fm) ;
+        cn = fn - fp ;
+        cm = MIN (fm - rm, cn) ;
+        for (i = fm-1 ; i >= rm + cm ; i--)
+        {
+            // row2 is an empty row of R (does not appear in the rank-size R);
+            // it is row Hi [i] of H and S
+            ASSERT (Hi [i] >= 0 && Hi [i] < m) ;
+            ASSERT (W [Hi [i]] == EMPTY) ;
+            W [Hi [i]] = (--row2) ;
+        }
+    }
+    ASSERT (row1 == QRnum->rank) ;
+    ASSERT (row1 == row2) ;
+
+    QRnum->maxfm = maxfm ;
+
+#ifndef NDEBUG
+    for (i = 0 ; i < m ; i++)
+    {
+        PR (("H row perm W (%ld) = %ld\n", i, W [i])) ;
+        ASSERT (W [i] >= 0 && W [i] < m) ;
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // combine the permutations
+    // -------------------------------------------------------------------------
+
+    // At this point, W [i] = k if row i of S is row k of R, and
+    // PLinv [i] = k if row i of A is row k of S.  Combine the two permutations
+    // into a single one, HPinv [row i of A] = row k of R
+
+    for (i = 0 ; i < m ; i++)
+    {
+        HPinv [i] = W [PLinv [i]] ;
+        PR (("Combined H row perm HPinv (%ld) = %ld\n", i, HPinv [i])) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // revise the pattern of the frontal matrices
+    // -------------------------------------------------------------------------
+
+    for (f = 0 ; f < nf ; f++)
+    {
+        Hi = &Hii [Hip [f]] ;                   // list of row indices of H
+        fm = Hm [f] ;
+        for (i = 0 ; i < fm ; i++)
+        {
+            ASSERT (Hi [i] >= 0 && Hi [i] < m) ;
+            Hi [i] = W [Hi [i]] ;
+        }
+        // Now Hi [0..fm-1] contains a list of row indices for front F which
+        // correspond to rows of R.  The row indices are also sorted.
+#ifndef NDEBUG
+        for (i = 1 ; i < fm ; i++)
+        {
+            ASSERT (Hi [i] > Hi [i-1]) ;
+        }
+#endif
+    }
+}
+
+
+// =============================================================================
+
+template void spqr_hpinv <double>
+(
+    // input
+    spqr_symbolic *QRsym,
+    // input/output
+    spqr_numeric <double> *QRnum,
+    // workspace
+    Long *W              // size QRnum->m
+) ;
+
+// =============================================================================
+
+template void spqr_hpinv <Complex>
+(
+    // input
+    spqr_symbolic *QRsym,
+    // input/output
+    spqr_numeric <Complex> *QRnum,
+    // workspace
+    Long *W              // size QRnum->m
+) ;
diff --git a/SPQR/Source/spqr_kernel.cpp b/SPQR/Source/spqr_kernel.cpp
new file mode 100644
index 0000000..eccd9f4
--- /dev/null
+++ b/SPQR/Source/spqr_kernel.cpp
@@ -0,0 +1,349 @@
+// =============================================================================
+// === spqr_kernel =============================================================
+// =============================================================================
+
+// Factorize all the fronts in a single task
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_kernel // _worker
+(
+    Long task,
+    spqr_blob <Entry> *Blob
+)
+{
+
+    // -------------------------------------------------------------------------
+    // get the Blob
+    // -------------------------------------------------------------------------
+
+    spqr_symbolic *          QRsym = Blob->QRsym ;
+    spqr_numeric <Entry> *   QRnum = Blob->QRnum ;
+    double                   tol = Blob->tol ;
+    Long                     ntol = Blob->ntol ;
+    Long                     fchunk = Blob->fchunk ;
+    spqr_work <Entry> *      Work = Blob->Work ;
+    Long *                   Cm = Blob->Cm ;
+    Entry **                 Cblock = Blob->Cblock ;
+    Entry *                  Sx = Blob->Sx ;
+    cholmod_common *         cc = Blob->cc ;
+
+    // -------------------------------------------------------------------------
+    // if we're using the GPU, reroute into the gpu-accelerated kernel code
+    // -------------------------------------------------------------------------
+
+#ifdef GPU_BLAS
+    if (QRsym->QRgpu != NULL)
+    {
+        ASSERT (task == 0) ;
+        spqrgpu_kernel (Blob) ;
+        return ;
+    }
+#endif
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QR symbolic object
+    // -------------------------------------------------------------------------
+
+    Long *  Super = QRsym->Super ;      // size nf+1, gives pivot columns in F
+    Long *  Rp = QRsym->Rp ;            // size nf+1, pointers for pattern of R
+    Long *  Rj = QRsym->Rj ;            // size QRsym->rjsize, col indices of R
+    Long *  Sleft = QRsym->Sleft ;      // size n+2, leftmost column sets
+    Long *  Sp = QRsym->Sp ;            // size m+1, row pointers for S
+    Long *  Sj = QRsym->Sj ;            // size anz, column indices for S
+    Long *  Child = QRsym->Child ;      // size nf, for lists of children
+    Long *  Childp = QRsym->Childp ;    // size nf+1, for lists of children
+    Long    maxfn  = QRsym->maxfn ;     // max # of columns in any front
+    Long    nf = QRsym->nf ;            // number of fronts
+
+    Long *  Hip = QRsym->Hip ;          // only used if H is kept
+
+    // these arrays are all NULL if QRsym->ntasks:
+    Long *  TaskFront = QRsym->TaskFront ;      // size nf+1
+    Long *  TaskFrontp = QRsym->TaskFrontp ;    // size ntasks+1
+    Long *  TaskStack = QRsym->TaskStack ;      // size ntasks+1
+    Long *  On_stack = QRsym->On_stack ;        // size nf+1
+
+    // used for sequential case (when QRnum->ntasks == 1)
+    Long *  Post = QRsym->Post ;                // size nf
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QR numeric object
+    // -------------------------------------------------------------------------
+
+    Entry ** Rblock = QRnum->Rblock ;
+    char *   Rdead = QRnum->Rdead ;
+    Long *   HStair = QRnum->HStair ;
+    Entry *  HTau = QRnum->HTau ;
+    Long *   Hii = QRnum->Hii ;          // only used if H is kept
+    Long *   Hm = QRnum->Hm ;
+    Long *   Hr = QRnum->Hr ;
+    Long     keepH = QRnum->keepH ;
+    Long     ntasks = QRnum->ntasks ;    // number of tasks
+
+    // -------------------------------------------------------------------------
+    // get the stack for this task and the head/top pointers
+    // -------------------------------------------------------------------------
+
+    Long stack, kfirst, klast ;
+
+    if (ntasks == 1)
+    {
+        // sequential case
+        kfirst = 0 ;
+        klast  = nf ;
+        stack  = 0 ;
+    }
+    else
+    {
+        kfirst = TaskFrontp [task] ;
+        klast  = TaskFrontp [task+1] ;
+        stack  = TaskStack [task] ;
+    }
+
+    Entry * Stack_head = Work [stack].Stack_head ;
+    Entry * Stack_top = Work [stack].Stack_top ;
+
+#ifndef NDEBUG
+    Entry **Stacks = QRnum->Stacks ;
+    Entry *Stack = Stacks [stack] ;    // stack being used
+    Long stacksize = (ntasks == 1) ?
+            QRsym->maxstack :
+            QRsym->Stack_maxstack [stack] ;
+#endif
+
+    // if H kept, Tau and Stair will point to permanent space in QRnum
+    Entry * Tau = keepH ? NULL : Work [stack].WTwork ;
+    Long *  Stair = keepH ? NULL : Work [stack].Stair1 ;
+    Entry * W = Work [stack].WTwork + (keepH ? 0 : maxfn) ;
+
+    Long *  Fmap = Work [stack].Fmap ;
+    Long *  Cmap = Work [stack].Cmap ;
+
+    Long    sumfrank = Work [stack].sumfrank ;
+    Long    maxfrank = Work [stack].maxfrank ;
+
+    // for keeping track of norm(w) for dead column 2-norms
+    double wscale = Work [stack].wscale ;
+    double wssq   = Work [stack].wssq   ;
+
+    // -------------------------------------------------------------------------
+    // factorize all the fronts in this task
+    // -------------------------------------------------------------------------
+
+    for (Long kf = kfirst ; kf < klast ; kf++)
+    {
+
+        // ---------------------------------------------------------------------
+        // factorize front F
+        // ---------------------------------------------------------------------
+
+        Long f = (ntasks == 1) ? Post [kf] : TaskFront [kf] ;
+
+#ifndef NDEBUG
+        ASSERT (f >= 0 && f < QRsym->nf) ;
+        for (Long col = 0 ; col < QRsym->n ; col++) Fmap [col] = EMPTY ;
+#endif
+
+        if (keepH)
+        {
+            // get the permanent Stair and Tau vectors for this front
+            Stair = HStair + Rp [f] ;
+            Tau = HTau + Rp [f] ;
+        }
+
+        // ---------------------------------------------------------------------
+        // determine the size of F, its staircase, and its Fmap
+        // ---------------------------------------------------------------------
+
+        Long fm = spqr_fsize (f, Super, Rp, Rj, Sleft, Child, Childp, Cm,
+            Fmap, Stair) ;
+        Long fn = Rp [f+1] - Rp [f] ;        // F is fm-by-fn
+        Long col1 = Super [f] ;              // first global pivot column in F
+        Long fp = Super [f+1] - col1 ;       // with fp pivot columns
+        Long fsize = fm * fn ;
+        if (keepH)
+        {
+            Hm [f] = fm ;
+        }
+
+#ifndef NDEBUG
+        PR (("\n --- Front f %ld fm %ld fn %ld fp %ld\n", f, fm, fn, fp)) ;
+        ASSERT (Stack_head <= Stack_top) ;
+#endif
+
+        // ---------------------------------------------------------------------
+        // allocate F
+        // ---------------------------------------------------------------------
+
+        // allocate F; this will reduce in size to hold just R or RH when done
+        Entry *F = Stack_head ;
+        Rblock [f] = F ;
+        Stack_head += fsize ;
+
+#ifndef NDEBUG
+        PR (("Stack head %ld top %ld total %ld stacksize %ld\n",
+            (Long) (Stack_head - Stack),
+            (Long) (Stack_top - Stack),
+            (Stack_head - Stack) +
+            stacksize - (Stack_top - Stack),
+            stacksize)) ;
+        ASSERT (Stack_head <= Stack_top) ;
+#endif
+
+        // ---------------------------------------------------------------------
+        // assemble the C blocks of the children of F
+        // ---------------------------------------------------------------------
+
+        spqr_assemble (f, fm, keepH,
+            Super, Rp, Rj, Sp, Sj, Sleft, Child, Childp,
+            Sx, Fmap, Cm, Cblock,
+#ifndef NDEBUG
+            Rdead,
+#endif
+            Hr, Stair, Hii, Hip, F, Cmap) ;
+
+#ifndef NDEBUG
+#ifndef NPRINT
+        PR (("\n --- Front assembled: f %ld\n", f)) ;
+        spqrDebug_dumpdense (F, fm, fn, fm, cc) ;
+        PR (("\n --- Freeing children from stack %ld\n", stack)) ;
+#endif
+#endif
+
+        // ---------------------------------------------------------------------
+        // free the C blocks of the children of F
+        // ---------------------------------------------------------------------
+
+        for (Long p = Childp [f] ; p < Childp [f+1] ; p++)
+        {
+            Long c = Child [p] ;
+            ASSERT (c >= 0 && c < f) ;
+            PR (("   child %ld on stack %ld\n", c,
+                (ntasks == 1) ? 0 : On_stack [c])) ;
+            if (ntasks == 1 || On_stack [c] == stack)
+            {
+                Long ccsize = spqr_csize (c, Rp, Cm, Super) ;
+                Stack_top = MAX (Stack_top, Cblock [c] + ccsize) ;
+            }
+        }
+
+        ASSERT (Stack_head >= Stack && Stack_head <= Stack_top) ;
+        ASSERT (Stack_top <= Stack + stacksize) ;
+
+        // ---------------------------------------------------------------------
+        // factorize the front F
+        // ---------------------------------------------------------------------
+
+        Long frank = spqr_front (fm, fn, fp, tol, ntol - col1,
+            fchunk, F, Stair, Rdead + col1, Tau, W,
+            &wscale, &wssq, cc) ;
+
+#ifndef NDEBUG
+#ifndef NPRINT
+        PR (("\n F factorized: f %ld fp %ld frank %ld \n", f, fp, frank)) ;
+        for (Long jj = col1 ; jj < Super [f+1] ; jj++)
+            PR (("Rdead [%ld] = %d\n", jj, Rdead [jj])) ;
+        PR (("\n ::: Front factorized:\n")) ;
+        spqrDebug_dumpdense (F, fm, fn, fm, cc) ;
+#endif
+#endif
+
+        // ---------------------------------------------------------------------
+        // keep track of the rank of fronts (just for this stack)
+        // ---------------------------------------------------------------------
+
+        sumfrank += frank ;
+        maxfrank = MAX (maxfrank, frank) ;
+
+        // ---------------------------------------------------------------------
+        // pack the C block of front F on stack
+        // ---------------------------------------------------------------------
+
+        Long csize = spqr_fcsize (fm, fn, fp, frank) ;
+        Stack_top -= csize ;
+
+#ifndef NDEBUG
+        PR (("Front f %ld csize %ld piv rank %ld\n", f, csize, frank)) ;
+        PR (("Stack head %ld top %ld total %ld stacksize %ld\n",
+            (Long) (Stack_head - Stack),
+            (Long) (Stack_top - Stack),
+            (Stack_head - Stack) +
+            stacksize - (Stack_top - Stack),
+            stacksize)) ;
+        ASSERT (Stack_head <= Stack_top) ;
+#endif
+
+        Cblock [f] = Stack_top ;
+        Cm [f] = spqr_cpack (fm, fn, fp, frank, F, Cblock [f]) ;
+
+        // ---------------------------------------------------------------------
+        // pack R or RH of front F in place
+        // ---------------------------------------------------------------------
+
+        Long rm ;
+        Long rsize = spqr_rhpack (keepH, fm, fn, fp, Stair, F, F, &rm) ;
+        if (keepH)
+        {
+            Hr [f] = rm ;
+        }
+
+#ifndef NDEBUG
+        PR (("Cm of f %ld is %ld, csize: %ld\n", f, Cm [f], csize)) ;
+        if (keepH)
+        {
+            ASSERT (rsize <= fsize - csize) ;
+            PR (("Front %ld RHSIZE actual: %ld\n", f, rsize)) ;
+            PR (("Hr [ %ld ] =  %ld\n", f, Hr [f])) ;
+            ASSERT (spqrDebug_rhsize (fm, fn, fp, Stair, cc) == rsize) ;
+        }
+        else
+        {
+            ASSERT (rsize <= frank*(frank+1)/2 + frank*(fn-frank)) ;
+            ASSERT (rsize <= fsize) ;
+            ASSERT (spqrDebug_rhsize (fm, fn, fp, Stair, cc) >= rsize) ;
+        }
+#endif
+
+        // ---------------------------------------------------------------------
+        // free F, leaving R or RH in its place
+        // ---------------------------------------------------------------------
+
+        Stack_head -= fsize ;             // free F
+        Stack_head += rsize ;             // allocate R or RH
+
+#ifndef NDEBUG
+        PR (("front %ld r/hsize %ld fp %ld fn %ld if trapezoidal %ld\n",
+            f, rsize, fp, fn, fp*(fp+1)/2 + fp*(fn-fp))) ;
+        PR (("rsize %ld frank %ld fn %ld\n", rsize, frank, fn)) ;
+        ASSERT (Stack_head <= Stack_top) ;
+#endif
+    }
+
+    // -------------------------------------------------------------------------
+    // save the stack top & head pointers for the next task on this stack
+    // -------------------------------------------------------------------------
+
+    Work [stack].Stack_head = Stack_head  ;
+    Work [stack].Stack_top = Stack_top ;
+    Work [stack].sumfrank = sumfrank ;  // sum rank of fronts for this stack
+    Work [stack].maxfrank = maxfrank ;  // max rank of fronts for this stack
+
+    // for keeping track of norm(w) for dead column 2-norms
+    Work [stack].wscale = wscale ;
+    Work [stack].wssq   = wssq   ;
+}
+
+// =============================================================================
+
+template void spqr_kernel <double>
+(
+    Long task,
+    spqr_blob <double> *Blob
+) ;
+
+template void spqr_kernel <Complex>
+(
+    Long task,
+    spqr_blob <Complex> *Blob
+) ;
diff --git a/SPQR/Source/spqr_larftb.cpp b/SPQR/Source/spqr_larftb.cpp
new file mode 100644
index 0000000..83eebe3
--- /dev/null
+++ b/SPQR/Source/spqr_larftb.cpp
@@ -0,0 +1,237 @@
+// =============================================================================
+// === spqr_larftb =============================================================
+// =============================================================================
+
+// Apply a set of Householder reflections to a matrix.  Given the vectors
+// V and coefficients Tau, construct the matrix T and then apply the updates.
+// In MATLAB (1-based indexing), this function computes the following:
+
+/*
+    function C = larftb (C, V, Tau, method)
+    [v k] = size (V) ;
+    [m n] = size (C) ;
+    % construct T for the compact WY representation
+    V = tril (V,-1) + eye (v,k) ;
+    T = zeros (k,k) ;
+    T (1,1) = Tau (1) ;
+    for j = 2:k
+        tau = Tau (j) ;
+        z = -tau * V (:, 1:j-1)' * V (:,j) ;
+        T (1:j-1,j) = T (1:j-1,1:j-1) * z ;
+        T (j,j) = tau ;
+    end
+    % apply the updates
+    if (method == 0)
+        C = C - V * T' * V' * C ;       % method 0: Left, Transpose
+    elseif (method == 1)
+        C = C - V * T * V' * C ;        % method 1: Left, No Transpose
+    elseif (method == 2)
+        C = C - C * V * T' * V' ;       % method 2: Right, Transpose
+    elseif (method == 3)
+        C = C - C * V * T * V' ;        % method 3: Right, No Transpose
+    end
+*/
+
+#include "spqr.hpp"
+
+inline void spqr_private_larft (char direct, char storev, Long n, Long k,
+    double *V, Long ldv, double *Tau, double *T, Long ldt, cholmod_common *cc)
+{
+    BLAS_INT N = n, K = k, LDV = ldv, LDT = ldt ;
+    if (CHECK_BLAS_INT &&
+        !(EQ (N,n) && EQ (K,k) && EQ (LDV,ldv) && EQ (LDT,ldt)))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_DLARFT (&direct, &storev, &N, &K, V, &LDV, Tau, T, &LDT) ;
+    }
+}
+
+inline void spqr_private_larft (char direct, char storev, Long n, Long k,
+    Complex *V, Long ldv, Complex *Tau, Complex *T, Long ldt,
+    cholmod_common *cc)
+{
+    BLAS_INT N = n, K = k, LDV = ldv, LDT = ldt ;
+    if (CHECK_BLAS_INT &&
+        !(EQ (N,n) && EQ (K,k) && EQ (LDV,ldv) && EQ (LDT,ldt)))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_ZLARFT (&direct, &storev, &N, &K, V, &LDV, Tau, T, &LDT) ;
+    }
+}
+
+
+inline void spqr_private_larfb (char side, char trans, char direct, char storev,
+    Long m, Long n, Long k, double *V, Long ldv, double *T, Long ldt, double *C,
+    Long ldc, double *Work, Long ldwork, cholmod_common *cc)
+{
+    BLAS_INT M = m, N = n, K = k, LDV = ldv, LDT = ldt, LDC = ldc,
+        LDWORK = ldwork ;
+    if (CHECK_BLAS_INT &&
+        !(EQ (M,m) && EQ (N,n) && EQ (K,k) && EQ (LDV,ldv) &&
+          EQ (LDT,ldt) && EQ (LDV,ldv) && EQ (LDWORK,ldwork)))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_DLARFB (&side, &trans, &direct, &storev, &M, &N, &K, V, &LDV,
+            T, &LDT, C, &LDC, Work, &LDWORK) ;
+    }
+}
+
+
+inline void spqr_private_larfb (char side, char trans, char direct, char storev,
+    Long m, Long n, Long k, Complex *V, Long ldv, Complex *T, Long ldt,
+    Complex *C, Long ldc, Complex *Work, Long ldwork, cholmod_common *cc)
+{
+    char tr = (trans == 'T') ? 'C' : 'N' ;      // change T to C
+    BLAS_INT M = m, N = n, K = k, LDV = ldv, LDT = ldt, LDC = ldc,
+        LDWORK = ldwork ;
+    if (CHECK_BLAS_INT &&
+        !(EQ (M,m) && EQ (N,n) && EQ (K,k) && EQ (LDV,ldv) &&
+          EQ (LDT,ldt) && EQ (LDV,ldv) && EQ (LDWORK,ldwork)))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        LAPACK_ZLARFB (&side, &tr, &direct, &storev, &M, &N, &K, V, &LDV,
+            T, &LDT, C, &LDC, Work, &LDWORK) ;
+    }
+}
+
+
+// =============================================================================
+
+template <typename Entry> void spqr_larftb
+(
+    // inputs, not modified (V is modified and then restored on output)
+    int method,     // 0,1,2,3
+    Long m,         // C is m-by-n
+    Long n,
+    Long k,         // V is v-by-k
+                    // for methods 0 and 1, v = m,
+                    // for methods 2 and 3, v = n
+    Long ldc,       // leading dimension of C
+    Long ldv,       // leading dimension of V
+    Entry *V,       // V is v-by-k, unit lower triangular (diag not stored)
+    Entry *Tau,     // size k, the k Householder coefficients
+
+    // input/output
+    Entry *C,       // C is m-by-n, with leading dimension ldc
+
+    // workspace, not defined on input or output
+    Entry *W,       // for methods 0,1: size k*k + n*k
+                    // for methods 2,3: size k*k + m*k
+    cholmod_common *cc
+)
+{
+    Entry *T, *Work ;
+
+    // -------------------------------------------------------------------------
+    // check inputs and split up workspace
+    // -------------------------------------------------------------------------
+
+    if (m <= 0 || n <= 0 || k <= 0)
+    {
+        return ; // nothing to do
+    }
+
+    T = W ;             // triangular k-by-k matrix for block reflector
+    Work = W + k*k ;    // workspace of size n*k or m*k for larfb
+
+    // -------------------------------------------------------------------------
+    // construct and apply the k-by-k upper triangular matrix T
+    // -------------------------------------------------------------------------
+
+    // larft and larfb are always used "Forward" and "Columnwise"
+
+    if (method == SPQR_QTX)
+    {
+        ASSERT (m >= k) ;
+        spqr_private_larft ('F', 'C', m, k, V, ldv, Tau, T, k, cc) ;
+        // Left, Transpose, Forward, Columwise:
+        spqr_private_larfb ('L', 'T', 'F', 'C', m, n, k, V, ldv, T, k, C, ldc,
+            Work, n, cc) ;
+    }
+    else if (method == SPQR_QX)
+    {
+        ASSERT (m >= k) ;
+        spqr_private_larft ('F', 'C', m, k, V, ldv, Tau, T, k, cc) ;
+        // Left, No Transpose, Forward, Columwise:
+        spqr_private_larfb ('L', 'N', 'F', 'C', m, n, k, V, ldv, T, k, C, ldc,
+            Work, n, cc) ;
+    }
+    else if (method == SPQR_XQT)
+    {
+        ASSERT (n >= k) ;
+        spqr_private_larft ('F', 'C', n, k, V, ldv, Tau, T, k, cc) ;
+        // Right, Transpose, Forward, Columwise:
+        spqr_private_larfb ('R', 'T', 'F', 'C', m, n, k, V, ldv, T, k, C, ldc,
+            Work, m, cc) ;
+    }
+    else if (method == SPQR_XQ)
+    {
+        ASSERT (n >= k) ;
+        spqr_private_larft ('F', 'C', n, k, V, ldv, Tau, T, k, cc) ;
+        // Right, No Transpose, Forward, Columwise:
+        spqr_private_larfb ('R', 'N', 'F', 'C', m, n, k, V, ldv, T, k, C, ldc,
+            Work, m, cc) ;
+    }
+}
+
+// =============================================================================
+
+template void spqr_larftb <double>
+(
+    // inputs, not modified (V is modified and then restored on output)
+    int method,     // 0,1,2,3
+    Long m,         // C is m-by-n
+    Long n,
+    Long k,         // V is v-by-k
+                    // for methods 0 and 1, v = m,
+                    // for methods 2 and 3, v = n
+    Long ldc,       // leading dimension of C
+    Long ldv,       // leading dimension of V
+    double *V,      // V is v-by-k, unit lower triangular (diag not stored)
+    double *Tau,    // size k, the k Householder coefficients
+
+    // input/output
+    double *C,      // C is m-by-n, with leading dimension ldc
+
+    // workspace, not defined on input or output
+    double *W,      // for methods 0,1: size k*k + n*k
+                    // for methods 2,3: size k*k + m*k
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template void spqr_larftb <Complex>
+(
+    // inputs, not modified (V is modified and then restored on output)
+    int method,     // 0,1,2,3
+    Long m,         // C is m-by-n
+    Long n,
+    Long k,         // V is v-by-k
+                    // for methods 0 and 1, v = m,
+                    // for methods 2 and 3, v = n
+    Long ldc,       // leading dimension of C
+    Long ldv,       // leading dimension of V
+    Complex *V,     // V is v-by-k, unit lower triangular (diag not stored)
+    Complex *Tau,   // size k, the k Householder coefficients
+
+    // input/output
+    Complex *C,     // C is m-by-n, with leading dimension ldc
+
+    // workspace, not defined on input or output
+    Complex *W,     // for methods 0,1: size k*k + n*k
+                    // for methods 2,3: size k*k + m*k
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_maxcolnorm.cpp b/SPQR/Source/spqr_maxcolnorm.cpp
new file mode 100644
index 0000000..8b54433
--- /dev/null
+++ b/SPQR/Source/spqr_maxcolnorm.cpp
@@ -0,0 +1,101 @@
+// =============================================================================
+// === spqr_maxcolnorm =========================================================
+// =============================================================================
+
+// Given an m-by-n sparse matrix A, compute the max 2-norm of its columns.
+
+#include "spqr.hpp"
+
+inline double spqr_private_nrm2 (Long n, double *X, cholmod_common *cc)
+{
+    double norm = 0 ;
+    BLAS_INT N = n, one = 1 ;
+    if (CHECK_BLAS_INT && !EQ (N,n))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        norm = BLAS_DNRM2 (&N, X, &one) ;
+    }
+    return (norm) ;
+}
+
+inline double spqr_private_nrm2 (Long n, Complex *X, cholmod_common *cc)
+{
+    double norm = 0 ;
+    BLAS_INT N = n, one = 1 ;
+    if (CHECK_BLAS_INT && !EQ (N,n))
+    {
+        cc->blas_ok = FALSE ;
+    }
+    if (!CHECK_BLAS_INT || cc->blas_ok)
+    {
+        norm = BLAS_DZNRM2 (&N, X, &one) ;
+    }
+    return (norm) ;
+}
+
+
+// =============================================================================
+// === spqr_maxcolnorm =========================================================
+// =============================================================================
+
+template <typename Entry> double spqr_maxcolnorm
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    double norm, maxnorm ;
+    Long j, p, len, n, *Ap ;
+    Entry *Ax ;
+
+    RETURN_IF_NULL_COMMON (EMPTY) ;
+    RETURN_IF_NULL (A, EMPTY) ;
+
+    cc->blas_ok = TRUE ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    Ax = (Entry *) A->x ;
+
+    maxnorm = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+        p = Ap [j] ;
+        len = Ap [j+1] - p ;
+        norm = spqr_private_nrm2 (len, Ax + p, cc) ;
+        maxnorm = MAX (maxnorm, norm) ;
+    }
+
+    if (CHECK_BLAS_INT && !cc->blas_ok)
+    {
+        ERROR (CHOLMOD_INVALID, "problem too large for the BLAS") ;
+        return (EMPTY) ;
+    }
+
+    return (maxnorm) ;
+}
+
+// =============================================================================
+
+template double spqr_maxcolnorm <double>
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template double spqr_maxcolnorm <Complex>
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_panel.cpp b/SPQR/Source/spqr_panel.cpp
new file mode 100644
index 0000000..a03037f
--- /dev/null
+++ b/SPQR/Source/spqr_panel.cpp
@@ -0,0 +1,192 @@
+// =============================================================================
+// === spqr_panel ==============================================================
+// =============================================================================
+
+// Applies a panel of Householder vectors to a dense m-by-n matrix X.
+//
+//  Let H(k) = I - Tau(k) * V(k) * V(k)', then either of the following is done:
+//
+//  method SPQR_QTX (0): X = Q'*X
+//      X = H(h-1) * ... * H(1) * H(0) * X         where H is m-by-h
+//
+//  method SPQR_QX  (1): X = Q*X
+//      X = H(0)' * H(1)' * ... * H(h-1)' * X      where H is m-by-h
+//
+//  method SPQR_XQT (2): X = X*Q'
+//      X = X * H(h-1) * ... * H(1) * H(0)         where H is n-by-h
+//
+//  method SPQR_XQ  (3): X = X*Q
+//      X = X * H(0)' * H(1) * ... * H(h-1)'       where H is n-by-h
+//
+//  The first nonzero entry in each column of H is assumed to be equal to 1.
+//  This function does not apply the row permutation vector (the Q.P part of
+//  the Q struct in the MATLAB interface).
+//
+//  The Householder vectors are stored in a sparse block format.  The vectors
+//  are held in V, an array of size v-by-h.  The nonzero patterns of each of
+//  these vectors is the same; it is held in Vi [0:v-1].  The array V is lower
+//  triangular with implicit unit diagonal (the unit need not be actually
+//  present).
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_panel
+(
+    // input
+    int method,         // 0,1,2,3
+    Long m,
+    Long n,
+    Long v,             // length of the first vector in V
+    Long h,             // number of Householder vectors in the panel
+    Long *Vi,           // Vi [0:v-1] defines the pattern of the panel
+    Entry *V,           // v-by-h, panel of Householder vectors
+    Entry *Tau,         // size h, Householder coefficients for the panel
+    Long ldx,
+
+    // input/output
+    Entry *X,           // m-by-n with leading dimension ldx
+
+    // workspace
+    Entry *C,           // method 0,1: v-by-n;  method 2,3: m-by-v
+    Entry *W,           // method 0,1: h*h+n*h; method 2,3: h*h+m*h
+
+    cholmod_common *cc
+)
+{
+    Entry *C1, *X1 ;
+    Long k, p, i ;
+
+    // -------------------------------------------------------------------------
+    // gather X into workspace C
+    // -------------------------------------------------------------------------
+
+    if (method == SPQR_QTX || method == SPQR_QX)
+    {
+        // X is m-by-n with leading dimension ldx
+        // C is v-by-n with leading dimension v
+        C1 = C ;
+        X1 = X ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (p = 0 ; p < v ; p++)
+            {
+                i = Vi [p] ;
+                C1 [p] = X1 [i] ;
+            }
+            C1 += v ;
+            X1 += ldx ;
+        }
+    }
+    else // if (method == SPQR_XQT || method == SPQR_XQ)
+    {
+        // X is m-by-n with leading dimension ldx
+        // C is m-by-v with leading dimension m
+        C1 = C ;
+        for (p = 0 ; p < v ; p++)
+        {
+            i = Vi [p] ;
+            X1 = X + i*ldx ;
+            for (k = 0 ; k < m ; k++)
+            {
+                C1 [k] = X1 [k] ;
+            }
+            C1 += m ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // apply the Householder panel to C
+    // -------------------------------------------------------------------------
+
+    if (method == SPQR_QTX || method == SPQR_QX)
+    {
+        spqr_larftb (method, v, n, h, v, v, V, Tau, C, W, cc) ;
+    }
+    else // if (method == SPQR_XQT || method == SPQR_XQ)
+    {
+        spqr_larftb (method, m, v, h, m, v, V, Tau, C, W, cc) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // scatter C back into X
+    // -------------------------------------------------------------------------
+
+    if (method == SPQR_QTX || method == SPQR_QX)
+    {
+        C1 = C ;
+        X1 = X ;
+        for (k = 0 ; k < n ; k++)
+        {
+            for (p = 0 ; p < v ; p++)
+            {
+                i = Vi [p] ;
+                X1 [i] = C1 [p] ;
+            }
+            C1 += v ;
+            X1 += ldx ;
+        }
+    }
+    else // if (method == SPQR_XQT || method == SPQR_XQ)
+    {
+        C1 = C ;
+        for (p = 0 ; p < v ; p++)
+        {
+            i = Vi [p] ;
+            X1 = X + i*ldx ;
+            for (k = 0 ; k < m ; k++)
+            {
+                X1 [k] = C1 [k] ;
+            }
+            C1 += m ;
+        }
+    }
+}
+
+
+// =============================================================================
+
+template void spqr_panel <double>
+(
+    // input
+    int method,
+    Long m,
+    Long n,
+    Long v,
+    Long h,             // number of Householder vectors in the panel
+    Long *Vi,           // Vi [0:v-1] defines the pattern of the panel
+    double *V,          // v-by-h, panel of Householder vectors
+    double *Tau,        // size h, Householder coefficients for the panel
+    Long ldx,
+
+    // input/output
+    double *X,          // m-by-n with leading dimension m 
+
+    // workspace
+    double *C,          // method 0,1: v-by-n;  method 2,3: m-by-v
+    double *W,          // method 0,1: k*k+n*k; method 2,3: k*k+m*k
+
+    cholmod_common *cc
+) ;
+
+template void spqr_panel <Complex>
+(
+    // input
+    int method,
+    Long m,
+    Long n,
+    Long v,
+    Long h,             // number of Householder vectors in the panel
+    Long *Vi,           // Vi [0:v-1] defines the pattern of the panel
+    Complex *V,         // v-by-h, panel of Householder vectors
+    Complex *Tau,       // size h, Householder coefficients for the panel
+    Long ldx,
+
+    // input/output
+    Complex *X,         // m-by-n with leading dimension m
+
+    // workspace
+    Complex *C,         // method 0,1: v-by-n;  method 2,3: m-by-v
+    Complex *W,         // method 0,1: k*k+n*k; method 2,3: k*k+m*k
+
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_parallel.cpp b/SPQR/Source/spqr_parallel.cpp
new file mode 100644
index 0000000..0b484d1
--- /dev/null
+++ b/SPQR/Source/spqr_parallel.cpp
@@ -0,0 +1,114 @@
+// =============================================================================
+// === spqr_parallel ===========================================================
+// =============================================================================
+
+// Factorize all the tasks in parallel with TBB.
+// The GPU is not used.
+
+#ifdef HAVE_TBB
+#include "spqr.hpp"
+#include <tbb/task_scheduler_init.h>
+#include <tbb/task.h>
+
+using namespace tbb ;
+
+// =============================================================================
+// === spqr_zippy ==============================================================
+// =============================================================================
+
+template <typename Entry> class spqr_zippy: public task
+{
+  public:
+
+    // -------------------------------------------------------------------------
+    // spqr_zippy state
+    // -------------------------------------------------------------------------
+
+    const Long id ;
+    spqr_blob <Entry> *Blob ;
+
+    // -------------------------------------------------------------------------
+    // spqr_zippy constructor
+    // -------------------------------------------------------------------------
+
+    spqr_zippy (Long id_, spqr_blob <Entry> *Blob_) : id (id_), Blob (Blob_) { }
+
+    // -------------------------------------------------------------------------
+    // spqr_zippy task
+    // -------------------------------------------------------------------------
+
+    task* execute ( )
+    {
+
+        // ---------------------------------------------------------------------
+        // spawn my children
+        // ---------------------------------------------------------------------
+
+        Long *TaskChildp = Blob->QRsym->TaskChildp ;
+        Long *TaskChild  = Blob->QRsym->TaskChild ;
+        Long pfirst = TaskChildp [id] ;
+        Long plast  = TaskChildp [id+1] ;
+        Long nchildren = plast - pfirst ;
+
+        if (nchildren > 0)
+        {
+            // create a list of TBB tasks, one for each child
+            task_list TasksToDo ;
+            for (Long i = 0 ; i < nchildren ; i++)
+            {
+                Long child = TaskChild [pfirst+i] ;
+                TasksToDo.push_back (*new (allocate_child ( ))
+                    spqr_zippy (child, Blob)) ;
+            }
+            // spawn all children and wait for all of them to finish
+            set_ref_count (nchildren + 1) ;
+            spawn_and_wait_for_all (TasksToDo) ;
+        }
+
+        // ---------------------------------------------------------------------
+        // chilren are done, do my own task
+        // ---------------------------------------------------------------------
+
+        spqr_kernel (id, Blob) ;
+
+        return (NULL) ;
+    }
+} ;
+
+
+// =============================================================================
+// === spqr_parallel ===========================================================
+// =============================================================================
+
+template <typename Entry> void spqr_parallel
+(
+    Long ntasks,
+    int nthreads,
+    spqr_blob <Entry> *Blob
+)
+{
+    // fire up TBB on the task tree, starting at the root id = ntasks-1
+    task_scheduler_init
+        init (nthreads <= 0 ? (task_scheduler_init::automatic) : nthreads) ;
+    spqr_zippy <Entry> & a = *new (task::allocate_root ( ))
+        spqr_zippy <Entry> (ntasks-1, Blob) ;
+    task::spawn_root_and_wait (a) ;
+}
+
+// =============================================================================
+
+template void spqr_parallel <double>
+(
+    Long ntasks,
+    int nthreads,
+    spqr_blob <double> *Blob
+) ;
+
+template void spqr_parallel <Complex>
+(
+    Long ntasks,
+    int nthreads,
+    spqr_blob <Complex> *Blob
+) ;
+
+#endif
diff --git a/SPQR/Source/spqr_rconvert.cpp b/SPQR/Source/spqr_rconvert.cpp
new file mode 100644
index 0000000..c663d43
--- /dev/null
+++ b/SPQR/Source/spqr_rconvert.cpp
@@ -0,0 +1,398 @@
+// =============================================================================
+// === spqr_rconvert ===========================================================
+// =============================================================================
+
+// Converts the packed supernodal form of R into two MATLAB-style
+// compressed-column form matrices, Ra and Rb.  Ra is the first n2 columns
+// of R, and Rb is the last n-n2 columns of R.  The matrix Ra is not created
+// if any of its arrays (Rap, Rai, Rax) are NULL; likewise for Rb.
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_rconvert
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric <Entry> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra, Rb, and H
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, get Rb' instead of Rb
+
+    // input/output
+    // FUTURE : make Ra, Rb, H2 cholmod_sparse:
+    Long *Rap,          // size n2+1; on input, Rap [j] is the column pointer
+                        // for Ra.  Incremented on output by the number of
+                        // entries added to column j of Ra.
+
+    // output, not defined on input
+    Long *Rai,          // size rnz1 = nnz(Ra); row indices of Ra
+    Entry *Rax,         // size rnz; numerical values of Ra
+
+    // input/output
+    Long *Rbp,          // if getT is false:
+                        // size (n-n2)+1; on input, Rbp [j] is the column
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to column j of Rb.
+                        // if getT is true:
+                        // size econ+1; on input, Rbp [i] is the row
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to row i of Rb.
+
+    // output, not defined on input
+    Long *Rbi,          // size rnz2 = nnz(Rb); indices of Rb
+    Entry *Rbx,         // size rnz2; numerical values of Rb
+
+    // input
+    Long *H2p,          // size nh+1; H2p [j] is the column pointer for H.
+                        // H2p, H2i, and H2x are ignored if H was not kept
+                        // during factorization.  nh computed by rcount
+
+    // output, not defined on input
+    Long *H2i,          // size hnz = nnz(H); indices of H
+    Entry *H2x,         // size hnz; numerical values of H
+
+    Entry *H2Tau        // size nh; Householder coefficients
+)
+{
+    Entry rij, hij ;
+    Entry **Rblock, *R, *Tau, *HTau ;
+    Long *Rp, *Rj, *Super, *HStair, *Hii, *Stair, *Hip, *Hm, *Hi ;
+    char *Rdead ;
+    Long nf, j, f, col1, fp, pr, fn, rm, k, i, p, getRa, getRb, row1, fm,
+        // n, rjsize,
+        h, getH, keepH, ph, t, nh ;
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QRsym and QRnum objects
+    // -------------------------------------------------------------------------
+
+    keepH = QRnum->keepH ;
+    getRa = (Rap != NULL && Rai != NULL && Rax != NULL) ;
+    getRb = (Rbp != NULL && Rbi != NULL && Rbx != NULL) ;
+    getH  = (H2p != NULL && H2i != NULL && H2x != NULL && H2Tau != NULL)
+            && keepH ;
+    if (!(getRa || getRb || getH))
+    {
+        // nothing to do
+        return ;
+    }
+
+#ifndef NDEBUG
+    if (getRa)
+    {
+        for (k = 0 ; k <= n2 ; k++)
+        {
+            PR (("Rap [%ld] = %ld on input\n", k, Rap [k])) ;
+        }
+    }
+    if (getRb)
+    {
+        Long n = QRsym->n ;
+        Long zn = getT ? econ : n-n2 ;
+        for (k = 0 ; k <= zn ; k++)
+        {
+            PR (("Rbp [%ld] = %ld on input\n", k, Rbp [k])) ;
+        }
+    }
+#endif
+
+    nf = QRsym->nf ;
+    // n = QRsym->n ;
+    Rblock = QRnum->Rblock ;
+    Rp = QRsym->Rp ;
+    Rj = QRsym->Rj ;
+    Super = QRsym->Super ;
+    Rdead = QRnum->Rdead ;
+
+    HStair = QRnum->HStair ;
+    HTau = QRnum->HTau ;
+    Hm = QRnum->Hm ;
+    Hii = QRnum->Hii ;
+    Hip = QRsym->Hip ;
+    // rjsize = QRsym->rjsize ;
+    Stair = NULL ;
+    Hi = NULL ;
+    Tau = NULL ;
+    fm = 0 ;
+    h = 0 ;
+    t = 0 ;
+    nh = 0 ;
+
+    // -------------------------------------------------------------------------
+    // convert the packed block for each front F
+    // -------------------------------------------------------------------------
+
+    row1 = n1rows ;
+    ph = 0 ;                                // pointer for constructing H
+    PR (("rconvert nf : %ld xtype %d\n", nf, spqr_type <Entry> ( ))) ;
+    for (f = 0 ; f < nf ; f ++)
+    {
+        PR (("\n---- rconvert front f %ld\n", f)) ;
+        R = Rblock [f] ;
+        col1 = Super [f] ;                  // first pivot column in front F
+        fp = Super [f+1] - col1 ;           // number of pivots in front F
+        pr = Rp [f] ;                       // pointer to row indices for F
+        fn = Rp [f+1] - pr ;                // # of columns in front F
+
+        if (keepH)
+        {
+            Stair = HStair + pr ;           // staircase of front F
+            Tau = HTau + pr ;               // Householder coeff. for front F
+            Hi = &Hii [Hip [f]] ;           // list of row indices of H
+            fm = Hm [f] ;                   // # of rows in front F
+            PR (("f %ld fm %ld Hip [f] %ld Hip [f+1] %ld\n",
+                f, fm, Hip [f], Hip [f+1])) ;
+            ASSERT (fm <= Hip [f+1]-Hip[f]) ;
+            h = 0 ;                         // H vector starts in row h
+        }
+
+        // ---------------------------------------------------------------------
+        // extract each column of the R or R+H block
+        // ---------------------------------------------------------------------
+
+        rm = 0 ;                            // number of rows in R block
+        for (k = 0 ; k < fn ; k++)
+        {
+            // -----------------------------------------------------------------
+            // get the column and its staircase
+            // -----------------------------------------------------------------
+
+            if (k < fp)
+            {
+                // a pivotal column of front F
+                j = col1 + k ;
+                PR (("\nk %ld pivotal column of front f %ld, global j %ld\n",
+                    k, f, j)) ;
+                ASSERT (Rj [pr + k] == j) ;
+                if (keepH)
+                {
+                    t = Stair [k] ;             // length of R+H vector
+                    ASSERT (t >= 0 && t <= fm) ;
+                    if (t == 0)
+                    {
+                        t = rm ;                // dead col, R only, no H
+                    }
+                    else if (rm < fm)
+                    {
+                        rm++ ;                  // column k is not dead
+                    }
+                    h = rm ;                    // H vector starts in row h
+                    ASSERT (t >= h) ;
+                }
+                else
+                {
+                    PR (("  k %ld j %ld Rdead[j] %d old rm %ld ",
+                        k, j, (int) (Rdead [j]), rm)) ;
+                    if (!Rdead [j])
+                    {
+                        rm++ ;                  // column k is not dead
+                    }
+                    PR ((" new rm %ld\n", rm)) ;
+                }
+            }
+            else
+            {
+                // a non-pivotal column of front F
+                j = Rj [pr + k] ;
+                PR (("\nk %ld non-pivotal column of front f %ld, global j %ld\n",
+                    k, f, j)) ;
+                ASSERT (j >= Super [f+1] && j < QRsym->n) ;
+                if (keepH)
+                {
+                    t = Stair [k] ;             // length of R+H vector
+                    ASSERT (t >= rm && t <= fm) ;
+                    h = MIN (h+1, fm) ;         // one more row of C to skip
+                    ASSERT (t >= h) ;
+                }
+            }
+
+            // -----------------------------------------------------------------
+            // extract the column of R
+            // -----------------------------------------------------------------
+
+            PR (("extract column j (%ld) of R (rm %ld entries)\n", j, rm)) ;
+
+            #ifndef NDEBUG
+            for (i = 0 ; i < rm ; i++)
+            {
+                rij = R [i] ;
+                PR (("  got row %ld col %ld value", row1+i, j)) ;
+                PRVAL ((rij)) ;
+                PR (("\n")) ;
+            }
+            #endif
+
+            for (i = 0 ; i < rm ; i++)
+            {
+                rij = *(R++) ;
+
+                if (rij != (Entry) 0)
+                {
+                    // R (row1+i,j) is nonzero, copy into Ra or Rb
+                    if (j < n2)
+                    {
+                        if (getRa && row1 + i < econ)
+                        {
+                            p = Rap [j]++ ;
+                            Rai [p] = row1 + i ;
+                            Rax [p] = rij ;
+                            ASSERT (p < Rap [j+1]) ;
+                        }
+                    }
+                    else
+                    {
+                        if (getRb && row1 + i < econ)
+                        {
+                            if (getT)
+                            {
+                                p = Rbp [row1+i]++ ;
+                                Rbi [p] = j-n2 ;
+                                Rbx [p] = spqr_conj (rij) ;
+                                ASSERT (p < Rbp [row1+i+1]) ;
+                            }
+                            else
+                            {
+                                p = Rbp [j-n2]++ ;
+                                Rbi [p] = row1 + i ;
+                                Rbx [p] = rij ;
+                                ASSERT (p < Rbp [j-n2+1]) ;
+                            }
+                        }
+                    }
+                }
+            }
+
+            // -----------------------------------------------------------------
+            // extract the column of H
+            // -----------------------------------------------------------------
+
+            ASSERT (IMPLIES (keepH, t >= h)) ;
+            if (keepH && t >= h)
+            {
+                // skip the Householder reflection if it's empty
+                if (getH && Tau [k] != (Entry) 0)
+                {
+                    H2Tau [nh++] = Tau [k] ;
+                    H2i [ph] = Hi [h-1] + n1rows ;  // the implicit identity
+                    H2x [ph] = 1 ;
+                    ph++ ;
+                    for (i = h ; i < t ; i++)
+                    {
+                        hij = *(R++) ;
+                        if (hij != (Entry) 0)
+                        {
+                            H2i [ph] = Hi [i] + n1rows ;
+                            H2x [ph] = hij ;
+                            ph++ ;
+                        }
+                    }
+                }
+                else
+                {
+                    R += (t-h) ;            // skip over the column of H
+                }
+            }
+        }
+        ASSERT (IMPLIES (keepH, QRnum->Hr [f] == rm)) ;
+        row1 += rm ;                        // count the squeezed rows of R
+    }
+}
+
+
+// =============================================================================
+
+template void spqr_rconvert <double>
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric <double> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra, Rb, and H
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, get Rb' instead of Rb
+
+    // input/output
+    Long *Rap,          // size n2+1; on input, Rap [j] is the column pointer
+                        // for Ra.  Incremented on output by the number of
+                        // entries added to column j of Ra.
+
+    // output, not defined on input
+    Long *Rai,          // size rnz1 = nnz(Ra); row indices of Ra
+    double *Rax,        // size rnz; numerical values of Ra
+
+    // input/output
+    Long *Rbp,          // if getT is false:
+                        // size (n-n2)+1; on input, Rbp [j] is the column
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to column j of Rb.
+
+                        // if getT is true:
+                        // size econ+1; on input, Rbp [i] is the row
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to row i of Rb.
+
+    // output, not defined on input
+    Long *Rbi,          // size rnz2 = nnz(Rb); indices of Rb
+    double *Rbx,        // size rnz2; numerical values of Rb
+
+    // input
+    Long *H2p,          // size nh+1; H2p [j] is the column pointer for H.
+                        // H2p, H2i, and H2x are ignored if H was not kept
+                        // during factorization.  nh computed by rcount
+
+    // output, not defined on input
+    Long *H2i,          // size hnz = nnz(H); indices of H
+    double *H2x,        // size hnz; numerical values of H
+    double *H2Tau       // size nh; Householder coefficients
+) ;
+
+// =============================================================================
+
+template void spqr_rconvert <Complex>
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric<Complex> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra, Rb, and H
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, get Rb' instead of Rb
+
+    // input/output
+    Long *Rap,          // size n2+1; on input, Rap [j] is the column pointer
+                        // for Ra.  Incremented on output by the number of
+                        // entries added to column j of Ra.
+
+    // output, not defined on input
+    Long *Rai,          // size rnz1 = nnz(Ra); row indices of Ra
+    Complex *Rax,       // size rnz; numerical values of Ra
+
+    // input/output
+    Long *Rbp,          // if getT is false:
+                        // size (n-n2)+1; on input, Rbp [j] is the column
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to column j of Rb.
+
+                        // if getT is true:
+                        // size econ+1; on input, Rbp [i] is the row
+                        // pointer for Rb.  Incremented on output by the number
+                        // of entries added to row i of Rb.
+
+    // output, not defined on input
+    Long *Rbi,          // size rnz2 = nnz(Rb); indices of Rb
+    Complex *Rbx,       // size rnz2; numerical values of Rb
+
+    // input
+    Long *H2p,          // size nh+1; H2p [j] is the column pointer for H.
+                        // H2p, H2i, and H2x are ignored if H was not kept
+                        // during factorization.  nh computed by rcount
+
+    // output, not defined on input
+    Long *H2i,          // size hnz = nnz(H); indices of H
+    Complex *H2x,       // size hnz; numerical values of H
+    Complex *H2Tau      // size nh; Householder coefficients
+) ;
diff --git a/SPQR/Source/spqr_rcount.cpp b/SPQR/Source/spqr_rcount.cpp
new file mode 100644
index 0000000..c9bb232
--- /dev/null
+++ b/SPQR/Source/spqr_rcount.cpp
@@ -0,0 +1,266 @@
+// =============================================================================
+// === spqr_rcount =============================================================
+// =============================================================================
+
+// Count the number of explicit nonzeros in each column of R.  Exact zero
+// entries are excluded.
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_rcount
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric <Entry> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra and Rb
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, count Rb' instead of Rb
+
+    // input/output
+    // FUTURE : make Ra, Rb, H2 cholmod_sparse
+    Long *Ra,           // size n2; Ra [j] += nnz (R (:,j)) if j < n2
+    Long *Rb,           // If getT is false: size n-n2 and
+                        // Rb [j-n2] += nnz (R (:,j)) if j >= n2.
+                        // If getT is true: size econ, and
+                        // Rb [i] += nnz (R (i, n2:n-1))
+    Long *H2p,          // size rjsize+1.  Column pointers for H.
+                        // Only computed if H was kept during factorization.
+                        // Only H2p [0..nh] is used.
+    Long *p_nh          // number of Householder vectors (nh <= rjsize)
+)
+{
+    Entry **Rblock, *R, *Tau, *HTau ;
+    Long *Rp, *Rj, *Super, *HStair, *Stair, *Hm ;
+    char *Rdead ;
+    Long nf, j, f, col1, fp, pr, fn, rm, k, i, t, fm, h, getRa, getRb, nh,
+        row1, keepH, getH, hnz ;
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QRsym and QRnum objects
+    // -------------------------------------------------------------------------
+
+    keepH = QRnum->keepH ; 
+
+    getRa = (Ra != NULL) ;
+    getRb = (Rb != NULL) ;
+    getH  = (H2p != NULL && p_nh != NULL) && keepH ;
+    if (!(getRa || getRb || getH))
+    {
+        // nothing to do
+        return ;
+    }
+
+    nf = QRsym->nf ;
+    // n = QRsym->n ;
+    Rblock = QRnum->Rblock ;
+    Rp = QRsym->Rp ;
+    Rj = QRsym->Rj ;
+    Super = QRsym->Super ;
+    Rdead = QRnum->Rdead ;
+
+    HStair = QRnum->HStair ;
+    HTau = QRnum->HTau ;
+    Hm = QRnum->Hm ;
+    Stair = NULL ;
+    Tau = NULL ;
+    fm = 0 ;
+    h = 0 ;
+    t = 0 ;
+    nh = 0 ;
+    hnz = 0 ;
+
+    // -------------------------------------------------------------------------
+    // examine the packed block for each front F
+    // -------------------------------------------------------------------------
+
+    row1 = n1rows ;
+    for (f = 0 ; f < nf ; f ++)
+    {
+        R = Rblock [f] ;
+        col1 = Super [f] ;                  // first pivot column in front F
+        fp = Super [f+1] - col1 ;           // number of pivots in front F
+        pr = Rp [f] ;                       // pointer to row indices for F
+        fn = Rp [f+1] - pr ;                // # of columns in front F
+
+        if (keepH)
+        {
+            Stair = HStair + pr ;           // staircase of front F
+            Tau = HTau + pr ;               // Householder coeff. for front F
+            fm = Hm [f] ;                   // # of rows in front F
+            h = 0 ;                         // H vbector starts in row h
+        }
+
+        rm = 0 ;                            // number of rows in R block
+        for (k = 0 ; k < fn ; k++)
+        {
+            // -----------------------------------------------------------------
+            // get the column and its staircase
+            // -----------------------------------------------------------------
+
+            if (k < fp)
+            {
+                // a pivotal column of front F
+                j = col1 + k ;
+                ASSERT (Rj [pr + k] == j) ;
+                if (keepH)
+                {
+                    t = Stair [k] ;             // length of R+H vector
+                    ASSERT (t >= 0 && t <= fm) ;
+                    if (t == 0)
+                    {
+                        t = rm ;                // dead col, R only, no H
+                    }
+                    else if (rm < fm)
+                    {
+                        rm++ ;                  // column k is not dead
+                    }
+                    h = rm ;                    // H vector starts in row h
+                }
+                else
+                {
+                    if (!Rdead [j])
+                    {
+                        rm++ ;                  // column k is not dead
+                    }
+                }
+            }
+            else
+            {
+                // a non-pivotal column of front F
+                j = Rj [pr + k] ;
+                ASSERT (j >= Super [f+1] && j < QRsym->n) ;
+                if (keepH)
+                {
+                    t = Stair [k] ;             // length of R+H vector
+                    ASSERT (t >= rm && t <= fm) ;
+                    h = MIN (h+1, fm) ;         // one more row of C to skip
+                }
+            }
+
+            // -----------------------------------------------------------------
+            // count nnz (R (0:econ-1,j)) for this R block
+            // -----------------------------------------------------------------
+
+            for (i = 0 ; i < rm ; i++)
+            {
+                // R (i,j) is nonzero (i local)
+                Entry rij = *(R++) ;
+                if (rij != (Entry) 0)
+                {
+                    if (j < n2)
+                    {
+                        if (getRa && row1 + i < econ)
+                        {
+                            Ra [j]++ ;
+                        }
+                    }
+                    else
+                    {
+                        if (getRb && row1 + i < econ)
+                        {
+                            if (getT)
+                            {
+                                Rb [row1+i]++ ;
+                            }
+                            else
+                            {
+                                Rb [j-n2]++ ;
+                            }
+                        }
+                    }
+                }
+            }
+
+            // -----------------------------------------------------------------
+            // count nnz (H (:,pr+k))
+            // -----------------------------------------------------------------
+
+            if (keepH && t >= h)
+            {
+                // the Householder reflection is not empty
+                PR (("count terms in H k %ld, t %ld h %ld\n", k, t, h)) ;
+                if (getH && Tau [k] != (Entry) 0)
+                {
+                    H2p [nh++] = hnz++ ;    // count the implicit identity
+                    for (i = h ; i < t ; i++)
+                    {
+                        Entry hij = *(R++) ;
+                        if (hij != (Entry) 0)
+                        {
+                            hnz++ ;         // H (i,pr+k) is nonzero
+                        }
+                    }
+                }
+                else
+                {
+                    R += (t-h) ;            // skip over the column of H
+                }
+            }
+        }
+        ASSERT (IMPLIES (keepH, QRnum->Hr [f] == rm)) ;
+        row1 += rm ;                        // count the squeezed rows of R
+    }
+
+    // -------------------------------------------------------------------------
+    // finalize the H column pointers
+    // -------------------------------------------------------------------------
+
+    if (getH)
+    {
+        H2p [nh] = hnz ;
+        *p_nh = nh ;
+    }
+}
+
+
+// =============================================================================
+
+template void spqr_rcount <double>
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric <double> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra and Rb
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, count Rb' instead of Rb
+
+    // input/output
+    Long *Ra,           // size n2; Ra [j] += nnz (R (:,j)) if j < n2
+    Long *Rb,           // If getT is false: size n-n2 and
+                        // Rb [j-n2] += nnz (R (:,j)) if j >= n2.
+                        // If getT is true: size econ, and
+                        // Rb [i] += nnz (R (i, n2:n-1))
+    Long *H2p,          // size rjsize+1.  Column pointers for H.
+                        // Only computed if H was kept during factorization.
+                        // Only H2p [0..nh] is used.
+    Long *p_nh          // number of Householder vectors (nh <= rjsize)
+) ;
+
+// =============================================================================
+
+template void spqr_rcount <Complex>
+(
+    // inputs, not modified
+    spqr_symbolic *QRsym,
+    spqr_numeric <Complex> *QRnum,
+
+    Long n1rows,        // added to each row index of Ra and Rb
+    Long econ,          // only get entries in rows n1rows to econ-1
+    Long n2,            // Ra = R (:,0:n2-1), Rb = R (:,n2:n-1)
+    int getT,           // if true, count Rb' instead of Rb
+
+    // input/output
+    Long *Ra,           // size n2; Ra [j] += nnz (R (:,j)) if j < n2
+    Long *Rb,           // If getT is false: size n-n2 and
+                        // Rb [j-n2] += nnz (R (:,j)) if j >= n2.
+                        // If getT is true: size econ, and
+                        // Rb [i] += nnz (R (i, n2:n-1))
+    Long *H2p,          // size rjsize+1.  Column pointers for H.
+                        // Only computed if H was kept during factorization.
+                        // Only H2p [0..nh] is used.
+    Long *p_nh          // number of Householder vectors (nh <= rjsize)
+) ;
diff --git a/SPQR/Source/spqr_rhpack.cpp b/SPQR/Source/spqr_rhpack.cpp
new file mode 100644
index 0000000..e143ae5
--- /dev/null
+++ b/SPQR/Source/spqr_rhpack.cpp
@@ -0,0 +1,181 @@
+// =============================================================================
+// === spqr_rhpack =============================================================
+// =============================================================================
+
+/*  Copy the R matrix and optionally the H matrix in the frontal matrix F and
+    store them in packed form.  The columns of R and H are interleaved.  F can
+    be overwritten with R+H (the pack can occur in-place), but in that case,
+    the C matrix is destroyed.  If H is not kept and the pack is done in-place,
+    then H is destroyed.  H is not stored in packed form if it is not kept.
+
+    If dead columns appear in F, the leading part of R is a squeezed upper
+    triangular matrix.  In the example below, m = 9, n =  6, npiv = 4,
+    and the 3rd column is dead (Stair [2] == 0).
+
+        0:  r r r r r r     <- Stair [2] = 0, denotes dead column
+        1:  h r r r r r
+        2:  h h . r r r
+        3:  h h . h c c
+        4:  - h . h h c     <- Stair [0] = 4
+        5:  . h . h h h
+        6:  . - . h h h     <- Stair [1] = 6
+        7:  . . . - - h     <- Stair [3] = Stair [4] = 6
+        8:  . . . . . h
+                      -     <- Stair [5] = 9
+
+    The number of rows of R is equal to the number of leading npiv columns that
+    are not dead; this number must be <= m.  In this example, rm = 3.
+
+    The staircase defines the number of entries in each column, or is equal
+    to zero to denote a dead column.
+*/
+
+#include "spqr.hpp"
+
+template <typename Entry> Long spqr_rhpack   // returns # of entries in R+H
+(
+    // input, not modified
+    int keepH,              // if true, then H is packed
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long *Stair,            // size npiv; column j is dead if Stair [j] == 0.
+                            // Only the first npiv columns can be dead.
+
+    // input, not modified (unless the pack occurs in-place)
+    Entry *F,               // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    Entry *R,               // packed columns of R+H
+    Long *p_rm              // number of rows in R block
+)
+{
+    Entry *R0 = R ;
+    Long i, k, h, t, rm ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    ASSERT (m >= 0 && n >= 0 && npiv <= n && npiv >= 0) ;
+
+    if (m <= 0 || n <= 0)
+    {
+        *p_rm = 0 ;                     // no rows in R block
+        return (0) ;                    // nothing to do
+    }
+
+    ASSERT (R != NULL && F != NULL) ;
+    ASSERT (R <= F                      // can be packed in-place, in F
+         || R >= F + m*n) ;             // or must appear after F
+
+    // -------------------------------------------------------------------------
+    // pack the squeezed upper triangular part of R
+    // -------------------------------------------------------------------------
+
+    rm = 0 ;                            // number of rows in R block
+    for (k = 0 ; k < npiv ; k++)
+    {
+        // get the staircase
+        t = Stair [k] ;                 // F (0:t-1,k) contains R and H
+        ASSERT (t >= 0 && t <= m) ;
+        if (t == 0)
+        {
+            t = rm ;                    // dead col, R (0:rm-1,k) only, no H
+        }
+        else if (rm < m)
+        {
+            rm++ ;                      // column k is not dead
+        }
+        if (keepH)
+        {
+            // pack R (0:rm-1,k) and H (rm:t-1,k)
+            for (i = 0 ; i < t ; i++)
+            {
+                *(R++) = F [i] ;
+            }
+        }
+        else
+        {
+            // pack R (0:rm-1,k), discarding H
+            for (i = 0 ; i < rm ; i++)
+            {
+                *(R++) = F [i] ;
+            }
+        }
+        F += m ;                        // advance to the next column of F
+    }
+
+    // -------------------------------------------------------------------------
+    // pack the rectangular part of R
+    // -------------------------------------------------------------------------
+
+    h = rm ;                        // the column of H starts in row h
+    for ( ; k < n ; k++)
+    {
+
+        // pack R (0:rm-1,k)
+        for (i = 0 ; i < rm ; i++)
+        {
+            *(R++) = F [i] ;
+        }
+
+        if (keepH)
+        {
+            // pack H (h:t-1,k)
+            t = Stair [k] ;             // get the staircase
+            ASSERT (t >= rm && t <= m) ;
+            h = MIN (h+1, m) ;          // one more row of C to skip over
+            for (i = h ; i < t ; i++)
+            {
+                *(R++) = F [i] ;
+            }
+        }
+
+        F += m ;                    // advance to the next column of F
+    }
+
+    *p_rm = rm ;                        // return # of rows in R block
+    return (R-R0) ;                     // return # of packed entries
+}
+
+
+// =============================================================================
+
+template Long spqr_rhpack <double>   // returns # of entries in R+H
+(
+    // input, not modified
+    int keepH,              // if true, then H is packed
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long *Stair,            // size npiv; column j is dead if Stair [j] == 0.
+                            // Only the first npiv columns can be dead.
+
+    // input, not modified (unless the pack occurs in-place)
+    double *F,              // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    double *R,              // packed columns of R+H
+    Long *p_rm              // number of rows in R block
+) ;
+
+// =============================================================================
+
+template Long spqr_rhpack <Complex>   // returns # of entries in R+H
+(
+    // input, not modified
+    int keepH,              // if true, then H is packed
+    Long m,                 // # of rows in F
+    Long n,                 // # of columns in F
+    Long npiv,              // number of pivotal columns in F
+    Long *Stair,            // size npiv; column j is dead if Stair [j] == 0.
+                            // Only the first npiv columns can be dead.
+
+    // input, not modified (unless the pack occurs in-place)
+    Complex *F,             // m-by-n frontal matrix in column-major order
+
+    // output, contents not defined on input
+    Complex *R,             // packed columns of R+H
+    Long *p_rm              // number of rows in R block
+) ;
diff --git a/SPQR/Source/spqr_rmap.cpp b/SPQR/Source/spqr_rmap.cpp
new file mode 100644
index 0000000..5e585d0
--- /dev/null
+++ b/SPQR/Source/spqr_rmap.cpp
@@ -0,0 +1,121 @@
+// =============================================================================
+// === spqr_rmap ===============================================================
+// =============================================================================
+
+// R is squeezed, find the mapping that permutes it to trapezoidal form
+
+// Rmap is a permutation that converts R from squeezed to upper trapezoidal.
+// If R is already in upper triangular form, then Rmap is NULL (an implicit
+// identity; Rmap [0:n-1] = 0:n-1), and this function is not used.
+
+// If R is rank deficient, Rmap [j] = k if column j of the squeezed R is the
+// kth column in the trapezoidal R.  If j is a live column then
+// k = Rmap [j] < QR->rank; otherwise k = Rmap [j] > QR->rank.  RmapInv is
+// the inverse of Rmap.
+
+// Example:  Suppose R has the following format:
+//
+//      0 1 2 3 4 5 6
+//      X x x x x x x
+//      . X x x x x x
+//      . . . X x x x
+//      . . . . . X x
+//      . . . . . . X
+//  
+// Then Rmap is [0 1 5 2 6 3 4] and RmapInv is [0 1 3 5 6 2 4].  The rank of R
+// is 5, and thus columns 2 and 4 (with Rmap [2] = 5 and Rmap [4] = 6) are both
+// dead.
+
+#include "spqr.hpp"
+
+template <typename Entry> int spqr_rmap
+(
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_common *cc
+)
+{
+    Long n, j, i, p, n1rows, n1cols ;
+    Long *Rmap, *RmapInv, *R1p, *R1j ;
+
+    n = QR->nacols ;
+    Rmap = QR->Rmap ;
+    RmapInv = QR->RmapInv ;
+
+    if (Rmap == NULL)
+    {
+        ASSERT (RmapInv == NULL) ;
+        QR->Rmap    = Rmap    = (Long *) cholmod_l_malloc (n, sizeof(Long), cc);
+        QR->RmapInv = RmapInv = (Long *) cholmod_l_malloc (n, sizeof(Long), cc);
+        if (cc->status < CHOLMOD_OK)
+        {
+            // out of memory
+            return (FALSE) ;
+        }
+    }
+
+    for (j = 0 ; j < n ; j++)
+    {
+        Rmap [j] = EMPTY ;
+    }
+
+    R1p = QR->R1p ;
+    R1j = QR->R1j ;
+    n1rows = QR->n1rows ;
+    n1cols = QR->n1cols ;
+
+    // find the mapping for the singleton rows
+    for (i = 0 ; i < n1rows ; i++)
+    {
+        // The ith row of R is a singleton row; find its corresponding
+        // pivotal column.
+        p = R1p [i] ;
+        ASSERT (R1p [i] < R1p [i+1]) ;
+        j = R1j [p] ;
+        ASSERT (j >= 0 && j < n1cols) ;
+        Rmap [j] = i ;
+    }
+
+    // find the mapping for the pivotal rows of the multifrontal R
+    char *Rdead = QR->QRnum->Rdead ;
+    for (j = n1cols ; j < n ; j++)
+    {
+        if (!Rdead [j-n1cols])
+        {
+            Rmap [j] = i++ ;
+        }
+    }
+    ASSERT (i == QR->rank) ;
+
+    // finish the mapping with the dead columns of R, both in the singleton
+    // part of R and the multifrontal part of R
+    for (j = 0 ; j < n ; j++)
+    {
+        if (Rmap [j] == EMPTY)
+        {
+            Rmap [j] = i++ ;
+        }
+        PR (("Rmap [%ld] = %ld (%d),  rank = %ld\n",
+            j, Rmap [j], Rmap [j] >= QR->rank, QR->rank)) ;
+    }
+    ASSERT (i == n) ;
+
+    // construct the inverse of Rmap
+    for (j = 0 ; j < n ; j++)
+    {
+        i = Rmap [j] ;
+        RmapInv [i] = j ;
+    }
+    return (TRUE) ;
+}
+
+template int spqr_rmap <double>
+(
+    SuiteSparseQR_factorization <double> *QR,
+    cholmod_common *cc
+) ;
+
+template int spqr_rmap <Complex>
+(
+    SuiteSparseQR_factorization <Complex> *QR,
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_rsolve.cpp b/SPQR/Source/spqr_rsolve.cpp
new file mode 100644
index 0000000..5baf0b2
--- /dev/null
+++ b/SPQR/Source/spqr_rsolve.cpp
@@ -0,0 +1,420 @@
+// =============================================================================
+// === spqr_rsolve =============================================================
+// =============================================================================
+
+// Solve X = E*(R\B) or X=R\B using the QR factorization from spqr_1factor
+// (including the singleton-row R and the multifrontal R).
+
+/*
+   Let A by an m-by-n matrix.
+
+   If just A was factorized, then the QR factorization in QRsym and QRnum
+   contains the global R factor:
+
+        R22
+         0
+
+   where n1cols = 0, n1rows = 0, A is m-by-n, R22 is (QRnum->rank1)-by-n.
+   R22 is the multifrontal part of R.
+
+   If [A Binput] was factorized and no singletons were removed prior to
+   factorization, then the QR factorization in QRsym and QRnum contains the
+   global R factor:
+
+        R22 C2
+         0  C3
+
+   where R22 is (QRnum->rank1)-by-n and where A is m-by-n and [C2 ; C2] is
+   m-by-bncols.
+
+   If [A Binput] was factorized and singletons were removed prior to
+   factorization, then the QR factorization of the [S2 B2] matrix was computed
+   (the global R):
+
+       R11 R12 C1
+        0  R22 C2
+        0   0  C3
+
+    where R11 has n1cols columns and n1rows rows.  [R11 R12] is the singleton-
+    row part of R.  The R1 = [R11 R12] matrix (not in QRsym and QRnum) contains
+    the singleton rows.  The QR factorization in QRsym and QRnum contains only
+    the R factor:
+
+        R22 C2
+         0  C3
+
+    To solve with R22, the columns of R22 must be shifted by n1cols and then
+    permuted via Q1fill to get a column index in the range n1cols to n-1, where
+    A is m-by-n.  However, the QR factorization (and Q1fill) also contain column
+    indices >= n.  If a column index in the QR factorization is >= n, then it
+    refers to a column of C and is ignored in this solve phase.
+
+    The row indices of R22 must also be shifted, by n1rows.
+
+    Note that in all cases, the number of rows of R22 is given by QRnum->rank1.
+*/
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_rsolve
+(
+    // inputs
+    SuiteSparseQR_factorization <Entry> *QR,
+    int use_Q1fill,         // if TRUE, do X=E*(R\B), otherwise do X=R\B
+
+    Long nrhs,              // number of columns of B
+    Long ldb,               // leading dimension of B
+    Entry *B,               // size m-by-nrhs with leading dimesion ldb
+
+    // output
+    Entry *X,               // size n-by-nrhs with leading dimension n
+
+    // workspace
+    Entry **Rcolp,          // size QRnum->maxfrank
+    Long *Rlive,            // size QRnum->maxfrank
+    Entry *W,               // size QRnum->maxfrank * nrhs
+
+    cholmod_common *cc
+)
+{
+    spqr_symbolic *QRsym ;
+    spqr_numeric <Entry> *QRnum ;
+    Long n1rows, n1cols, n ;
+    Long *Q1fill, *R1p, *R1j ;
+    Entry *R1x ;
+
+    Entry xi ;
+    Entry **Rblock, *R, *W1, *B1, *X1 ;
+    Long *Rp, *Rj, *Super, *HStair, *Hm, *Stair ;
+    char *Rdead ;
+    Long nf, // m,
+        rank, j, f, col1, col2, fp, pr, fn, rm, k, i, row1, row2, ii,
+        keepH, fm, h, t, live, kk ;
+
+    // -------------------------------------------------------------------------
+    // get the contents of the QR object
+    // -------------------------------------------------------------------------
+
+    QRsym = QR->QRsym ;
+    QRnum = QR->QRnum ;
+    n1rows = QR->n1rows ;
+    n1cols = QR->n1cols ;
+    n = QR->nacols ;
+    Q1fill = use_Q1fill ? QR->Q1fill : NULL ;
+    R1p = QR->R1p ;
+    R1j = QR->R1j ;
+    R1x = QR->R1x ;
+
+    keepH = QRnum->keepH ;
+    PR (("rsolve keepH %ld\n", keepH)) ;
+    nf = QRsym->nf ;
+    // m = QRsym->m ;
+    Rblock = QRnum->Rblock ;
+    Rp = QRsym->Rp ;
+    Rj = QRsym->Rj ;
+    Super = QRsym->Super ;
+    Rdead = QRnum->Rdead ;
+    rank = QR->rank ;   // R22 is R(n1rows:rank-1,n1cols:n-1) of
+                        // the global R.
+    HStair = QRnum->HStair ;
+    Hm = QRnum->Hm ;
+
+    // -------------------------------------------------------------------------
+    // X = 0
+    // -------------------------------------------------------------------------
+
+    X1 = X ;
+    for (kk = 0 ; kk < nrhs ; kk++)
+    {
+        for (i = 0 ; i < n ; i++)
+        {
+            X1 [i] = 0 ;
+        }
+        X1 += n ;
+    }
+
+    // =========================================================================
+    // === solve with the multifrontal rows of R ===============================
+    // =========================================================================
+
+    Stair = NULL ;
+    fm = 0 ;
+    h = 0 ;
+    t = 0 ;
+
+    // start with row2 = QR-num->rank + n1rows, the last row of the combined R
+    // factor of [A Binput]
+
+    row2 = QRnum->rank + n1rows ;
+    for (f = nf-1 ; f >= 0 ; f--)
+    {
+
+        // ---------------------------------------------------------------------
+        // get the R block for front F
+        // ---------------------------------------------------------------------
+
+        R = Rblock [f] ;
+        col1 = Super [f] ;                  // first pivot column in front F
+        col2 = Super [f+1] ;                // col2-1 is last pivot col
+        fp = col2 - col1 ;                  // number of pivots in front F
+        pr = Rp [f] ;                       // pointer to row indices for F
+        fn = Rp [f+1] - pr ;                // # of columns in front F
+
+        if (keepH)
+        {
+            Stair = HStair + pr ;           // staircase of front F
+            fm = Hm [f] ;                   // # of rows in front F
+            h = 0 ;                         // H vector starts in row h
+        }
+
+        // ---------------------------------------------------------------------
+        // find the live pivot columns in this R or RH block
+        // ---------------------------------------------------------------------
+
+        rm = 0 ;                            // number of rows in R block
+        for (k = 0 ; k < fp ; k++)
+        {
+            j = col1 + k ;
+            ASSERT (Rj [pr + k] == j) ;
+            if (keepH)
+            {
+                t = Stair [k] ;             // length of R+H vector
+                ASSERT (t >= 0 && t <= fm) ;
+                if (t == 0)
+                {
+                    live = FALSE ;          // column k is dead
+                    t = rm ;                // dead col, R only, no H
+                    h = rm ;
+                }
+                else
+                {
+                    live = (rm < fm) ;      // k is live, unless we hit the wall
+                    h = rm + 1 ;            // H vector starts in row h
+                }
+                ASSERT (t >= h) ;
+            }
+            else
+            {
+                live = (!Rdead [j])  ;
+            }
+
+            if (live)
+            {
+                // R (rm,k) is a "diagonal"; rm and k are local indices.
+                // Keep track of a pointer to the first entry R(0,k)
+                Rcolp [rm] = R ;
+                Rlive [rm] = j ;
+                rm++ ;
+            }
+            else
+            {
+                // compute the basic solution; dead columns are zero
+                ii = Q1fill ? Q1fill [j+n1cols] : j+n1cols ;
+                if (ii < n)
+                {
+                    for (kk = 0 ; kk < nrhs ; kk++)
+                    {
+                        // X (ii,kk) = 0; note this is stride n
+                        X [INDEX (ii,kk,n)] = 0 ;
+                    }
+                }
+            }
+
+            // advance to the next column of R in the R block
+            R += rm + (keepH ? (t-h) : 0) ;
+        }
+
+        // There are rm rows in this R block, corresponding to the rm live
+        // columns in the range col1:col2-1.  The list of live global column
+        // indices is given in Rlive [0:rm-1].  Pointers to the numerical
+        // entries for each of these columns in this R block are given in
+        // Rcolp [0:rm-1].   The rm rows in this R block correspond to
+        // row1:row2-1 of R and b.
+
+        row1 = row2 - rm ;
+
+        // ---------------------------------------------------------------------
+        // get the right-hand sides for these rm equations
+        // ---------------------------------------------------------------------
+
+        // W = B (row1:row2-1,:)
+        ASSERT (rm <= QRnum->maxfrank) ;
+        W1 = W ;
+        B1 = B ;
+        for (kk = 0 ; kk < nrhs ; kk++)
+        {
+            for (i = 0 ; i < rm ; i++)
+            {
+                ii = row1 + i ;
+                ASSERT (ii >= n1rows) ;
+                W1 [i] = (ii < rank) ? B1 [ii] : 0 ;
+            }
+            W1 += rm ;
+            B1 += ldb ;
+        }
+
+        // ---------------------------------------------------------------------
+        // solve with the rectangular part of R (W = W - R2*x2)
+        // ---------------------------------------------------------------------
+
+        for ( ; k < fn ; k++)
+        {
+            j = Rj [pr + k] ;
+            ASSERT (j >= col2 && j < QRsym->n) ;
+            ii = Q1fill ? Q1fill [j+n1cols] : j+n1cols ;
+            ASSERT ((ii < n) == (j+n1cols < n)) ;
+            // break if past the last column of A in QR of [A Binput]
+            if (ii >= n) break ;
+
+            if (!Rdead [j])
+            {
+                // global column j is live
+                W1 = W ;
+                for (kk = 0 ; kk < nrhs ; kk++)
+                {
+                    xi = X [INDEX (ii,kk,n)] ;        // xi = X (ii,kk)
+                    if (xi != (Entry) 0)
+                    {
+                        FLOP_COUNT (2*rm) ;
+                        for (i = 0 ; i < rm ; i++)
+                        {
+                            W1 [i] -= R [i] * xi ;
+                        }
+                    }
+                    W1 += rm ;
+                }
+            }
+
+            // go to the next column of R
+            R += rm ;
+            if (keepH)
+            {
+                t = Stair [k] ;             // length of R+H vector
+                ASSERT (t >= 0 && t <= fm) ;
+                h = MIN (h+1, fm) ;         // H vector starts in row h
+                ASSERT (t >= h) ;
+                R += (t-h) ;
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // solve with the squeezed upper triangular part of R
+        // ---------------------------------------------------------------------
+
+        for (k = rm-1 ; k >= 0 ; k--)
+        {
+            R = Rcolp [k] ;                 // kth live pivot column
+            j = Rlive [k] ;                 // is jth global column
+            ii = Q1fill ? Q1fill [j+n1cols] : j+n1cols ;
+            ASSERT ((ii < n) == (j+n1cols < n)) ;
+            if (ii < n)
+            {
+                W1 = W ;
+                for (kk = 0 ; kk < nrhs ; kk++)
+                {
+                    // divide by the "diagonal"
+                    // xi = W1 [k] / R [k] ;
+                    xi = spqr_divide (W1 [k], R [k], cc) ;
+                    FLOP_COUNT (1) ;
+                    X [INDEX(ii,kk,n)] = xi ;
+                    if (xi != (Entry) 0)
+                    {
+                        FLOP_COUNT (2*k) ;
+                        for (i = 0 ; i < k ; i++)
+                        {
+                            W1 [i] -= R [i] * xi ;
+                        }
+                    }
+                    W1 += rm ;
+                }
+            }
+        }
+
+        // ---------------------------------------------------------------------
+        // prepare for the R block for front f-1
+        // ---------------------------------------------------------------------
+
+        row2 = row1 ;
+    }
+    ASSERT (row2 == n1rows) ;
+
+    // =========================================================================
+    // === solve with the singleton rows of R ==================================
+    // =========================================================================
+
+    FLOP_COUNT ((n1rows <= 0) ? 0 :
+        nrhs * (n1rows + (2 * (R1p [n1rows] - n1rows)))) ;
+
+    for (kk = 0 ; kk < nrhs ; kk++)
+    {
+        for (i = n1rows-1 ; i >= 0 ; i--)
+        {
+            // get the right-hand side for this ith singleton row
+            Entry x = B [i] ;
+            // solve with the "off-diagonal" entries, x = x-R(i,:)*x2
+            for (Long p = R1p [i] + 1 ; p < R1p [i+1] ; p++)
+            {
+                Long jnew = R1j [p] ;
+                ASSERT (jnew >= i && jnew < n) ;
+                Long jold = Q1fill ? Q1fill [jnew] : jnew ;
+                ASSERT (jold >= 0 && jold < n) ;
+                x -= R1x [p] * X [jold] ;
+            }
+            // divide by the "diagonal" (the singleton entry itself)
+            Long p = R1p [i] ;
+            Long jnew = R1j [p] ;
+            Long jold = Q1fill ? Q1fill [jnew] : jnew ;
+            ASSERT (jold >= 0 && jold < n) ;
+            // X [jold] = x / R1x [p] ; using cc->complex_divide
+            X [jold] = spqr_divide (x, R1x [p], cc) ;
+        }
+        B += ldb ;
+        X += n ;
+    }
+}
+
+// =============================================================================
+
+template void spqr_rsolve <double>
+(
+    // inputs
+    SuiteSparseQR_factorization <double> *QR,
+    int use_Q1fill,
+
+    Long nrhs,              // number of columns of B
+    Long ldb,               // leading dimension of B
+    double *B,              // size m-by-nrhs with leading dimesion ldb
+
+    // output
+    double *X,              // size n-by-nrhs with leading dimension n
+
+    // workspace
+    double **Rcolp,
+    Long *Rlive,
+    double *W,
+
+    cholmod_common *cc
+) ;
+
+
+template void spqr_rsolve <Complex>
+(
+    // inputs
+    SuiteSparseQR_factorization <Complex> *QR,
+    int use_Q1fill,
+
+    Long nrhs,              // number of columns of B
+    Long ldb,               // leading dimension of B
+    Complex *B,             // size m-by-nrhs with leading dimesion ldb
+
+    // output
+    Complex *X,             // size n-by-nrhs with leading dimension n
+
+    // workspace
+    Complex **Rcolp,
+    Long *Rlive,
+    Complex *W,
+
+    cholmod_common *cc
+) ;
+
diff --git a/SPQR/Source/spqr_shift.cpp b/SPQR/Source/spqr_shift.cpp
new file mode 100644
index 0000000..c8211c2
--- /dev/null
+++ b/SPQR/Source/spqr_shift.cpp
@@ -0,0 +1,28 @@
+// =============================================================================
+// === spqr_shift ==============================================================
+// =============================================================================
+
+// Insert a zero as the first entry in a vector, shifting all the other entries
+// down by one position.  Does nothing if X is NULL.
+
+#include "spqr.hpp"
+
+void spqr_shift
+(
+    // input, not modified
+    Long n,
+
+    // input/output
+    Long *X                     // size n+1
+)
+{
+    Long k ;
+    if (X != NULL)
+    {
+        for (k = n ; k >= 1 ; k--)
+        {
+            X [k] = X [k-1] ;
+        }
+        X [0] = 0 ;
+    }
+}
diff --git a/SPQR/Source/spqr_stranspose1.cpp b/SPQR/Source/spqr_stranspose1.cpp
new file mode 100644
index 0000000..3861053
--- /dev/null
+++ b/SPQR/Source/spqr_stranspose1.cpp
@@ -0,0 +1,160 @@
+// =============================================================================
+// === spqr_stranspose =========================================================
+// =============================================================================
+
+// Given a fill-reducing ordering, Qfill, and the user's input matrix A in 
+// standard compressed-column form, construct S=A(P,Qfill)' if S is considered
+// to be in compressed-column form (S is A(P,Qfill) in compressed-row form).
+// The permutation P sorts the rows of S according to the leftmost column index
+// in each row.  Empty rows of A are placed last in S.  The input matrix A need
+// not have sorted columns, but it cannot have duplicate entries.  Note that P
+// itself is not returned; its inverse PLinv is returned instead.
+//
+// The time taken by this function is O(nnz(A)+m+n).  In practice, it takes
+// slightly more time than computing the transpose, S=A'.
+
+#include "spqr.hpp"
+
+void spqr_stranspose1
+(
+    // input, not modified
+    cholmod_sparse *A,  // m-by-n
+    Long *Qfill,        // size n, fill-reducing column permutation;
+                        // Qfill [k] = j
+                        // if the kth column of S is the jth column of A.
+                        // Identity permutation is used if Qfill is NULL.
+
+    // output, contents not defined on input
+    // FUTURE : make S cholmod_sparse
+    Long *Sp,           // size m+1, row pointers of S
+    Long *Sj,           // size nz, column indices of S
+    Long *PLinv,        // size m, inverse row permutation, PLinv [i] = k
+    Long *Sleft,        // size n+2, Sleft [j] ... Sleft [j+1]-1 is the list of
+                        // rows of S whose leftmost column index is j.  The list
+                        // can be empty (that is, Sleft [j] == Sleft [j+1]).
+                        // Sleft [n] is the number of non-empty rows of S, and
+                        // Sleft [n+1] is always m.  That is, Sleft [n] ...
+                        // Sleft [n+1]-1 gives the empty rows of S.
+
+    // workspace, not defined on input or output
+    Long *W              // size m
+)
+{
+    Long i, j, p, pend, t, k, row, col, kstart, s, m, n, *Ap, *Ai ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    m = A->nrow ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    Ai = (Long *) A->i ;
+
+    // -------------------------------------------------------------------------
+    // clear the inverse permutation
+    // -------------------------------------------------------------------------
+
+    for (i = 0 ; i < m ; i++)
+    {
+        PLinv [i] = EMPTY ;             // position of A(i,:) undefined in S
+        DEBUG (W [i] = EMPTY) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // count the entries in each row of A and find PLinv
+    // -------------------------------------------------------------------------
+
+    k = 0 ;
+    for (col = 0 ; col < n ; col++)     // for each column of A(:,Qfill)
+    {
+        j = Qfill ? Qfill [col] : col ;         // col of S is column j of A
+        ASSERT (j >= 0 && j < n) ;
+        kstart = k ;
+        pend = Ap [j+1] ;
+        for (p = Ap [j] ; p < pend ; p++)
+        {
+            i = Ai [p] ;                // the entry A(i,j)
+            row = PLinv [i] ;           // row of S is row i of A
+            if (row == EMPTY)
+            {
+                // column j is the first row index in A(i,Qfill),
+                // so this row becomes the next row in S
+                row = k++ ;
+                PLinv [i] = row ;
+                W [row] = 1 ;           // initialize row count
+            }
+            else
+            {
+                ASSERT (W [row] >= 1) ;
+                W [row]++ ;             // one more entry S(row,col)
+            }
+        }
+        Sleft [col] = k - kstart ;      // number of rows of S with leftmost
+                                        // column in col
+    }
+
+    // -------------------------------------------------------------------------
+    // compute Sleft = cumsum ([0 Sleft])
+    // -------------------------------------------------------------------------
+
+    s = 0 ;
+    for (col = 0 ; col < n ; col++)     // for each column of A(:,Qfill)
+    {
+        t = s ;
+        s += Sleft [col] ;
+        Sleft [col] = t ;
+    }
+    Sleft [n] = k ;
+    Sleft [n+1] = m ;
+
+    // -------------------------------------------------------------------------
+    // finish up the row permutation, in case A has empty rows
+    // -------------------------------------------------------------------------
+
+    if (k < m)
+    {
+        for (i = 0 ; i < m ; i++)
+        {
+            if (PLinv [i] == EMPTY)     // ith row of A is empty
+            {
+                row = k++ ;             // it becomes a row of S
+                PLinv [i] = row ;
+                W [row] = 0 ;           // with no entries
+            }
+        }
+    }
+    ASSERT (k == m) ;
+    DEBUG (for (i = 0 ; i < m ; i++) ASSERT (W [i] >= 0)) ;
+
+    // -------------------------------------------------------------------------
+    // compute the row pointers of S (and a copy in W)
+    // -------------------------------------------------------------------------
+
+    p = 0 ;
+    for (row = 0 ; row < m ; row++)
+    {
+        t = p ;
+        p += W [row] ;
+        W [row] = t ;                   // replace W with cumsum ([0 W])
+        Sp [row] = t ;                  // and copy into Sp as well
+    }
+    Sp [m] = p ;
+
+    // -------------------------------------------------------------------------
+    // create S = A (p,q)', or S=A(p,q) if S is considered to be in row-form
+    // -------------------------------------------------------------------------
+
+    for (col = 0 ; col < n ; col++)     // for each column of A(:,Qfill)
+    {
+        j = Qfill ? Qfill [col] : col ; // col of S is column j of A
+        pend = Ap [j+1] ;
+        for (p = Ap [j] ; p < pend ; p++)
+        {
+            i = Ai [p] ;                // the entry A(i,j)
+            row = PLinv [i] ;           // row of S is row i of A
+            s = W [row]++ ;             // place S(row,col) in position
+            Sj [s] = col ;
+        }
+    }
+}
diff --git a/SPQR/Source/spqr_stranspose2.cpp b/SPQR/Source/spqr_stranspose2.cpp
new file mode 100644
index 0000000..8ff3837
--- /dev/null
+++ b/SPQR/Source/spqr_stranspose2.cpp
@@ -0,0 +1,106 @@
+// =============================================================================
+// === spqr_stranspose2 ========================================================
+// =============================================================================
+
+// Construct the numerical values of S = A (p,q) in compressed-row form
+
+#include "spqr.hpp"
+
+template <typename Entry> void spqr_stranspose2
+(
+    // input, not modified
+    cholmod_sparse *A,  // m-by-n
+    Long *Qfill,        // size n, fill-reducing column permutation;
+                        // Qfill [k] = j
+                        // if the kth column of S is the jth column of A.
+                        // Identity permutation is used if Qfill is NULL.
+
+    Long *Sp,           // size m+1, row pointers of S
+    Long *PLinv,        // size m, inverse row permutation, PLinv [i] = k
+
+    // output, contents not defined on input
+    Entry *Sx,          // size nz, numerical values of S
+
+    // workspace, not defined on input or output
+    Long *W             // size m
+)
+{
+    Long i, j, p, pend, row, col, s, m, n, *Ap, *Ai ;
+    Entry *Ax ;
+
+    // -------------------------------------------------------------------------
+    // get inputs
+    // -------------------------------------------------------------------------
+
+    m = A->nrow ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    Ai = (Long *) A->i ;
+    Ax = (Entry *) A->x ;
+
+    // -------------------------------------------------------------------------
+    // create S = A (p,q)', or S=A(p,q) if S is considered to be in row-form
+    // -------------------------------------------------------------------------
+
+    for (row = 0 ; row < m ; row++)
+    {
+        W [row] = Sp [row] ;
+    }
+
+    for (col = 0 ; col < n ; col++)     // for each column of A(:,Qfill)
+    {
+        j = Qfill ? Qfill [col] : col ; // col of S is column j of A
+        pend = Ap [j+1] ;
+        for (p = Ap [j] ; p < pend ; p++)
+        {
+            i = Ai [p] ;                // the entry A(i,j)
+            row = PLinv [i] ;           // row of S is row i of A
+            s = W [row]++ ;             // place S(row,col) in position
+            Sx [s] = Ax [p] ;
+        }
+    }
+}
+
+
+// =============================================================================
+
+template void spqr_stranspose2 <double>
+(
+    // input, not modified
+    cholmod_sparse *A,  // m-by-n
+    Long *Qfill,        // size n, fill-reducing column permutation;
+                        // Qfill [k] = j
+                        // if the kth column of S is the jth column of A.
+                        // Identity permutation is used if Qfill is NULL.
+
+    Long *Sp,           // size m+1, row pointers of S
+    Long *PLinv,        // size m, inverse row permutation, PLinv [i] = k
+
+    // output, contents not defined on input
+    double *Sx,         // size nz, numerical values of S
+
+    // workspace, not defined on input or output
+    Long *W             // size m
+) ;
+
+// =============================================================================
+
+template void spqr_stranspose2 <Complex>
+(
+    // input, not modified
+    cholmod_sparse *A,  // m-by-n
+    Long *Qfill,        // size n, fill-reducing column permutation;
+                        // Qfill [k] = j
+                        // if the kth column of S is the jth column of A.
+                        // Identity permutation is used if Qfill is NULL.
+
+    Long *Sp,           // size m+1, row pointers of S
+    Long *PLinv,        // size m, inverse row permutation, PLinv [i] = k
+
+    // output, contents not defined on input
+    Complex *Sx,        // size nz, numerical values of S
+
+    // workspace, not defined on input or output
+    Long *W             // size m
+) ;
+
diff --git a/SPQR/Source/spqr_tol.cpp b/SPQR/Source/spqr_tol.cpp
new file mode 100644
index 0000000..035924b
--- /dev/null
+++ b/SPQR/Source/spqr_tol.cpp
@@ -0,0 +1,42 @@
+// =============================================================================
+// === spqr_tol ================================================================
+// =============================================================================
+
+// Return the default column 2-norm tolerance
+
+#include "spqr.hpp"
+
+// return the default tol (-1 if error)
+template <typename Entry> double spqr_tol
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    RETURN_IF_NULL_COMMON (EMPTY) ;
+    RETURN_IF_NULL (A, EMPTY) ;
+    return (20 * ((double) A->nrow + (double) A->ncol) * DBL_EPSILON *
+        spqr_maxcolnorm <Entry> (A, cc)) ;
+}
+
+template double spqr_tol <Complex>   // return the default tol
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+template double spqr_tol <double>    // return the default tol
+(
+    // inputs, not modified
+    cholmod_sparse *A,
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
diff --git a/SPQR/Source/spqr_trapezoidal.cpp b/SPQR/Source/spqr_trapezoidal.cpp
new file mode 100644
index 0000000..f394945
--- /dev/null
+++ b/SPQR/Source/spqr_trapezoidal.cpp
@@ -0,0 +1,277 @@
+// =============================================================================
+// === spqr_trapezoidal ========================================================
+// =============================================================================
+
+// Permute the columns of a "squeezed" R, possibly rank-deficient, into
+// upper trapezoidal form.  On input, Qfill gives the column permutation of
+// A that gave the factor R (Q*R = A(:,Qfill).  On output, T is upper
+// trapezoidal, and Qtrap is the adjusted column ordering so that
+// Q*T = A(:,Qtrap).  T is permuted so that T = [T1 T2], where T1 is square
+// and upper triangular (or upper trapezoidal), with nnz (diag (T1)) == rank.
+// On input, the row indices of the matrix R must be sorted.
+
+#include "spqr.hpp"
+
+template <typename Entry> Long spqr_trapezoidal // rank of R; EMPTY on failure
+(
+    // inputs, not modified
+
+    // FUTURE : make R and T cholmod_sparse:
+    Long n,         // R is m-by-n (m is not needed here; can be economy R)
+    Long *Rp,       // size n+1, column pointers of R
+    Long *Ri,       // size rnz = Rp [n], row indices of R
+    Entry *Rx,      // size rnz, numerical values of R
+
+    Long bncols,    // number of columns of B
+
+    Long *Qfill,    // size n+bncols, fill-reducing ordering.  Qfill [k] = j if
+                    // the jth column of A is the kth column of R.  If Qfill is
+                    // NULL, then it is assumed to be the identity
+                    // permutation.
+
+    int skip_if_trapezoidal,        // if R is already in trapezoidal form,
+                                    // and skip_if_trapezoidal is TRUE, then
+                                    // the matrix T is not created.
+
+    // outputs, not allocated on input
+    Long **p_Tp,    // size n+1, column pointers of T
+    Long **p_Ti,    // size rnz, row indices of T
+    Entry **p_Tx,   // size rnz, numerical values of T
+
+    Long **p_Qtrap,  // size n+bncols, modified Qfill
+
+    // workspace and parameters
+    cholmod_common *cc
+)
+{
+    Entry *Tx ;
+    Long *Tp, *Ti, *Qtrap ;
+    Long rnz, i, rank, k, p, pend, len, t1nz, t2nz, k1, k2, p1, p2, found_dead,
+        is_trapezoidal ;
+
+    // -------------------------------------------------------------------------
+    // find the rank of R, nnz(T1), and nnz(T2) 
+    // -------------------------------------------------------------------------
+
+    rank = 0 ;              // rank of R
+    t1nz = 0 ;              // number of nonzeros in T1
+    t2nz = 0 ;              // number of nonzeros in T2
+    found_dead = FALSE ;    // true when first dead column is found
+    is_trapezoidal = TRUE ; // becomes false if is R not in trapezoidal form
+
+    *p_Tp = NULL ;
+    *p_Ti = NULL ;
+    *p_Tx = NULL ;
+    *p_Qtrap = NULL ;
+
+    for (k = 0 ; k < n ; k++)
+    {
+        // get the row index of the last entry in R (:,k)
+        p = Rp [k] ;
+        pend = Rp [k+1] ;
+        len = pend - p ;
+        i = (len > 0) ? Ri [pend - 1] : EMPTY ;
+
+        // determine status of column k
+        if (i > rank)
+        {
+            // R is not upper triangular, squeezed or otherwise.  Do not create
+            // T and Qtrap; R is left in its original non-trapezoidal form.
+            PR (("R not upper, k = %ld\n", k)) ;
+            return (EMPTY) ;
+        }
+        else if (i == rank)
+        {
+            // column k is live
+            rank++ ;
+            t1nz += len ;
+            if (found_dead)
+            {
+                // If all live columns appear first (if any), then all dead
+                // columns, then the matrix is already in upper trapezoidal
+                // form.  We just found a live column after one or more dead
+                // columns, so the matrix R is not upper trapezoidal.
+                is_trapezoidal = FALSE ;
+            }
+        }
+        else
+        {
+            // column k is dead
+            found_dead = TRUE ;
+            t2nz += len ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // quick return if already trapezoidal
+    // -------------------------------------------------------------------------
+
+    if (is_trapezoidal)
+    {
+        PR (("already trapezoidal\n")) ;
+        if (skip_if_trapezoidal)
+        {
+            // do not create T
+            return (rank) ;
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // allocate the results (T and Qtrap)
+    // -------------------------------------------------------------------------
+
+    rnz = Rp [n] ;
+
+    Tp    = (Long  *) cholmod_l_malloc (n+1,      sizeof (Long),  cc) ;
+    Ti    = (Long  *) cholmod_l_malloc (rnz,      sizeof (Long),  cc) ;
+    Tx    = (Entry *) cholmod_l_malloc (rnz,      sizeof (Entry), cc) ;
+    Qtrap = (Long  *) cholmod_l_malloc (n+bncols, sizeof (Long),  cc) ;
+
+    if (cc->status < CHOLMOD_OK)
+    {
+        // out of memory
+        cholmod_l_free (n+1,      sizeof (Long),  Tp,    cc) ;
+        cholmod_l_free (rnz,      sizeof (Long),  Ti,    cc) ;
+        cholmod_l_free (rnz,      sizeof (Entry), Tx,    cc) ;
+        cholmod_l_free (n+bncols, sizeof (Long),  Qtrap, cc) ;
+        return (EMPTY) ;
+    }
+
+    PR (("rank %ld of T, nnz(T1) %ld nnz(T2) %ld\n", rank, t1nz, t2nz)) ;
+
+    // -------------------------------------------------------------------------
+    // find the column pointers Tp and permutation Qtrap
+    // -------------------------------------------------------------------------
+
+    k1 = 0 ;                // first column of T1
+    k2 = rank ;             // first column of T2
+    p1 = 0 ;                // T1 starts at Ti,Tx [0]
+    p2 = t1nz ;             // T2 starts at Ti,Tx [p2]
+    rank = 0 ;              // rank of R
+
+    for (k = 0 ; k < n ; k++)
+    {
+        // get the row index of the last entry in R (:,k)
+        p = Rp [k] ;
+        pend = Rp [k+1] ;
+        len = pend - p ;
+        i = (len > 0) ? Ri [pend - 1] : EMPTY ;
+
+        // column k is live if i is a new row index
+        ASSERT (! (i > rank)) ;
+        if (i == rank)
+        {
+            // column k is live; place it in T1
+            rank++ ;
+            Tp [k1] = p1 ;
+            Qtrap [k1] = Qfill ? Qfill [k] : k ;
+            k1++ ;
+            for ( ; p < pend ; p++)
+            {
+                Ti [p1] = Ri [p] ;
+                Tx [p1] = Rx [p] ;
+                p1++ ;
+            }
+        }
+        else
+        {
+            // column k is dead; place it in T2
+            Tp [k2] = p2 ;
+            Qtrap [k2] = Qfill ? Qfill [k] : k ;
+            k2++ ;
+            for ( ; p < pend ; p++)
+            {
+                Ti [p2] = Ri [p] ;
+                Tx [p2] = Rx [p] ;
+                p2++ ;
+            }
+        }
+    }
+
+    for ( ; k < n+bncols ; k++)
+    {
+        Qtrap [k] = Qfill ? Qfill [k] : k ;
+    }
+
+    // -------------------------------------------------------------------------
+    // finalize the column pointers and return the results
+    // -------------------------------------------------------------------------
+
+    ASSERT (k1 == rank) ;
+    ASSERT (k2 == n) ;
+    ASSERT (p1 == t1nz) ;
+    ASSERT (p2 == rnz) ;
+    Tp [n] = rnz ;
+    *p_Tp = Tp ;
+    *p_Ti = Ti ;
+    *p_Tx = Tx ;
+    *p_Qtrap = Qtrap ;
+    return (rank) ;
+}
+
+
+// =============================================================================
+
+template Long spqr_trapezoidal <double>      // rank of R, or EMPTY on failure
+(
+    // inputs, not modified
+
+    Long n,         // R is m-by-n (m is not needed here; can be economy R)
+    Long *Rp,       // size n+1, column pointers of R
+    Long *Ri,       // size rnz = Rp [n], row indices of R
+    double *Rx,     // size rnz, numerical values of R
+
+    Long bncols,    // number of columns of B
+
+    Long *Qfill,    // size n+bncols, fill-reducing ordering.  Qfill [k] = j if
+                    // the jth column of A is the kth column of R.  If Qfill is
+                    // NULL, then it is assumed to be the identity
+                    // permutation.
+
+    int skip_if_trapezoidal,        // if R is already in trapezoidal form,
+                                    // and skip_if_trapezoidal is TRUE, then
+                                    // the matrix T is not created.
+
+    // outputs, not allocated on input
+    Long **p_Tp,    // size n+1, column pointers of T
+    Long **p_Ti,    // size rnz, row indices of T
+    double **p_Tx,  // size rnz, numerical values of T
+
+    Long **p_Qtrap,  // size n+bncols, modified Qfill
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
+
+// =============================================================================
+
+template Long spqr_trapezoidal <Complex>     // rank of R, or EMPTY on failure
+(
+    // inputs, not modified
+
+    Long n,         // R is m-by-n (m is not needed here; can be economy R)
+    Long *Rp,       // size n+1, column pointers of R
+    Long *Ri,       // size rnz = Rp [n], row indices of R
+    Complex *Rx,    // size rnz, numerical values of R
+
+    Long bncols,    // number of columns of B
+
+    Long *Qfill,    // size n+bncols, fill-reducing ordering.  Qfill [k] = j if
+                    // the jth column of A is the kth column of R.  If Qfill is
+                    // NULL, then it is assumed to be the identity
+                    // permutation.
+
+    int skip_if_trapezoidal,        // if R is already in trapezoidal form,
+                                    // and skip_if_trapezoidal is TRUE, then
+                                    // the matrix T is not created.
+
+    // outputs, not allocated on input
+    Long **p_Tp,    // size n+1, column pointers of T
+    Long **p_Ti,    // size rnz, row indices of T
+    Complex **p_Tx, // size rnz, numerical values of T
+
+    Long **p_Qtrap, // size n+bncols, modified Qfill
+
+    // workspace and parameters
+    cholmod_common *cc
+) ;
diff --git a/SPQR/Source/spqr_type.cpp b/SPQR/Source/spqr_type.cpp
new file mode 100644
index 0000000..c795b50
--- /dev/null
+++ b/SPQR/Source/spqr_type.cpp
@@ -0,0 +1,18 @@
+// =============================================================================
+// === spqr_type ===============================================================
+// =============================================================================
+
+// Return the CHOLMOD type, based on the SuiteSparseQR template Entry type.
+// Note that CHOLMOD_REAL is 1 an CHOLMOD_COMPLEX is 2.
+
+#include "spqr.hpp"
+
+template <> int spqr_type <double> (void)
+{
+    return (CHOLMOD_REAL) ;
+}
+
+template <> int spqr_type <Complex> (void)
+{
+    return (CHOLMOD_COMPLEX) ;
+}
diff --git a/SPQR/Tcov/Makefile b/SPQR/Tcov/Makefile
new file mode 100644
index 0000000..23249c1
--- /dev/null
+++ b/SPQR/Tcov/Makefile
@@ -0,0 +1,529 @@
+#===============================================================================
+# SuiteSparseQR/Tcov/Makefile
+#===============================================================================
+
+# This test requires METIS
+
+# run statement-coverage test without Valgrind
+default: $(METIS) go
+
+# to run with Valgrind as well
+valgrind: $(METIS) vgo
+
+ccode: all
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+# for statement coverage (with gcov; see go) and picky compiler warnings
+CF = -pg \
+	-O0 -g -fprofile-arcs -ftest-coverage \
+	-Wall -W -Wshadow -Winline -Wno-unused-parameter \
+	-Wredundant-decls -Wdisabled-optimization \
+	-ansi -fexceptions
+
+# Use the standard reference BLAS, and LAPACK, both compiled with -g,
+# for best diagnostics.  Also, some BLAS (such as the Goto BLAS) cause
+# problems for Valgrind (using instructions that Valgrind doesn't understand).
+  FLIB = -llapack_plain -lblas_plain -lgfortran
+# FLIB = -llapack_plain -lblas_plain -lgfortran -lg2c
+
+# This can be used, but severe valgrind failures may occur in the BLAS,
+# because of how the BLAS is optimized:
+# FLIB = $(LAPACK) $(BLAS)
+
+#-------------------------------------------------------------------------------
+
+CUDA_LIB = $(CUDART_LIB) $(CUBLAS_LIB)
+
+NVCC = /usr/local/cuda/bin/nvcc -g --profile --generate-line-info $(NV20) \
+	-Xcompiler -fprofile-arcs -Xcompiler -ftest-coverage
+
+#-------------------------------------------------------------------------------
+
+CLIB = ../../CHOLMOD/Lib/libcholmod.a \
+       ../../AMD/Lib/libamd.a \
+       ../../COLAMD/Lib/libcolamd.a \
+       ../../CCOLAMD/Lib/libccolamd.a \
+       ../../CAMD/Lib/libcamd.a \
+       ../../SuiteSparse_config/libsuitesparseconfig.a \
+       $(METIS)
+
+all: qrtest gpudemo qrdemo_gpu
+
+library: qrtest gpudemo
+
+purge: distclean
+
+distclean: clean
+	- $(RM) qrtest qrtest_out.txt pfile tfile cov.out qrtest_out1.txt
+	- $(RM) gpuqrengine_demo troll.m qrdemo_gpu gpu_results.txt
+
+clean:
+	- $(RM) $(CLEAN)
+	- $(RM) -r *.dSYM
+
+INC = ../Include/spqr.hpp ../Include/SuiteSparseQR_C.h \
+	../Include/SuiteSparseQR_definitions.h \
+	../Include/SuiteSparseQR.hpp
+# Makefile
+
+OBJ = \
+    spqr_rmap.o                              \
+    SuiteSparseQR_C.o                        \
+    SuiteSparseQR_expert.o                   \
+    spqr_parallel.o                          \
+    spqr_kernel.o                            \
+    spqr_analyze.o                           \
+    spqr_assemble.o                          \
+    spqr_cpack.o                             \
+    spqr_csize.o                             \
+    spqr_fcsize.o                            \
+    spqr_debug.o                             \
+    spqr_front.o                             \
+    spqr_factorize.o                         \
+    spqr_freenum.o                           \
+    spqr_freesym.o                           \
+    spqr_freefac.o                           \
+    spqr_fsize.o                             \
+    spqr_maxcolnorm.o                        \
+    spqr_rconvert.o                          \
+    spqr_rcount.o                            \
+    spqr_rhpack.o                            \
+    spqr_rsolve.o                            \
+    spqr_stranspose1.o                       \
+    spqr_stranspose2.o                       \
+    spqr_hpinv.o                             \
+    spqr_1fixed.o                            \
+    spqr_1colamd.o                           \
+    SuiteSparseQR.o                          \
+    spqr_1factor.o                           \
+    spqr_cumsum.o                            \
+    spqr_shift.o                             \
+    spqr_happly.o                            \
+    spqr_panel.o                             \
+    spqr_happly_work.o                       \
+    SuiteSparseQR_qmult.o                    \
+    spqr_trapezoidal.o                       \
+    spqr_larftb.o                            \
+    spqr_append.o                            \
+    spqr_type.o                              \
+    spqr_tol.o                               \
+    qrtestc.o
+
+ifneq ($(GPU_CONFIG),)
+OBJ += \
+    spqrgpu_kernel.o                         \
+    spqrgpu_buildAssemblyMaps.o              \
+    spqrgpu_computeFrontStaging.o            \
+    SuiteSparseGPU_Workspace.o               \
+    SuiteSparseGPU_Workspace_cpuAllocators.o \
+    SuiteSparseGPU_Workspace_gpuAllocators.o \
+    SuiteSparseGPU_Workspace_transfer.o      \
+    GPUQREngine_GraphVizHelper.o             \
+    GPUQREngine_UberKernel.o                 \
+    GPUQREngine_ExpertSparse.o               \
+    GPUQREngine_Internal.o                   \
+    GPUQREngine_ExpertDense.o                \
+    BucketList.o                 \
+    BucketList_AdvanceBundles.o  \
+    BucketList_CreateBundles.o   \
+    BucketList_FillWorkQueue.o   \
+    BucketList_GrowBundles.o     \
+    BucketList_Manage.o          \
+    BucketList_PostProcessing.o  \
+    LLBundle.o                               \
+    LLBundle_AddTiles.o                      \
+    LLBundle_Advance.o                       \
+    LLBundle_GPUPack.o                       \
+    LLBundle_PipelinedRearrange.o            \
+    LLBundle_UpdateSecondMinIndex.o          \
+    Scheduler.o                              \
+    Scheduler_FillWorkQueue.o                \
+    Scheduler_Front.o                        \
+    Scheduler_LaunchKernel.o                 \
+    Scheduler_PostProcess.o                  \
+    Scheduler_Render.o                       \
+    Scheduler_TransferData.o                 \
+    ssgpu_maxQueueSize.o                     \
+    TaskDescriptor_flops.o
+endif
+
+$(OBJ): $(INC)
+
+I = -I../../CHOLMOD/Include -I../../SuiteSparse_config -I../Include \
+
+ifneq ($(GPU_CONFIG),)
+    I += -I../../SuiteSparse_GPURuntime/Include \
+        -I../../GPUQREngine/Include \
+        -I$(CUDA_INC_PATH)
+endif
+
+C = $(CXX) $(CF) $(I) $(SPQR_CONFIG) $(GPU_CONFIG)
+
+LIBS = $(CLIB) $(FLIB) $(LIB) $(CUDA_LIB)
+
+qrtestc.o: qrtestc.c $(INC)
+	$(CC) $(CF) $(I) -c $<
+
+qrtest: $(CLIB) qrtest.cpp $(INC) $(OBJ)
+	$(C) qrtest.cpp -o qrtest $(OBJ) $(LIBS) -lm
+
+ifneq ($(GPU_CONFIG),)
+gpu: gpuqrengine_demo qrdemo_gpu
+	- ./gpuqrengine_demo
+	- ./qrdemo_gpu ../Matrix/west0067.mtx 2
+	- ./qrdemo_gpu ../Matrix/lp_e226_transposed.mtx 2
+	- ./qrdemo_gpu ../Matrix/lp_e226_transposed.mtx 6
+	- ./qrdemo_gpu ../Matrix/Groebner_id2003_aug.mtx 6
+	- ./qrdemo_gpu ../Matrix/Franz6_id1959_aug.mtx 6
+else
+gpu:
+endif
+
+gpuqrengine_demo: $(CLIB) \
+        ../../GPUQREngine/Demo/gpuqrengine_demo.cpp $(INC) $(OBJ)
+	$(C) $(GPUQRDEMO)/gpuqrengine_demo.cpp -o gpuqrengine_demo \
+                $(OBJ) $(LIBS) -lm
+
+qrdemo_gpu: ../Demo/qrdemo_gpu.cpp $(INC) $(OBJ)
+ifneq ($(GPU_CONFIG),)
+	$(C) ../Demo/qrdemo_gpu.cpp -o qrdemo_gpu $(OBJ) $(LIBS)
+endif
+
+go: qrtest gpu qrdemo_gpu
+	- ./qrtest matrixlist.txt > qrtest_out.txt
+	- ./cov
+
+go1: qrtest
+	- ./qrtest matrix1.txt > qrtest_out1.txt
+	- ./cov
+
+vgo1: qrtest
+	- valgrind ./qrtest matrix1.txt > qrtest_out1.txt
+	# - valgrind --leak-check=full --show-reachable=yes ./qrtest matrix1.txt > qrtest_out1.txt
+	- ./cov
+
+vgo: qrtest
+	- valgrind --leak-check=full --show-reachable=yes ./qrtest matrixlist.txt > qrtest_out.txt
+	- ./cov
+
+spqr_1colamd.o: ../Source/spqr_1colamd.cpp
+	$(C) -c $<
+
+spqr_1factor.o: ../Source/spqr_1factor.cpp
+	$(C) -c $<
+
+spqr_1fixed.o: ../Source/spqr_1fixed.cpp
+	$(C) -c $<
+
+spqr_analyze.o: ../Source/spqr_analyze.cpp
+	$(C) -c $<
+
+spqr_parallel.o: ../Source/spqr_parallel.cpp
+	$(C) -c $<
+
+spqr_kernel.o: ../Source/spqr_kernel.cpp
+	$(C) -c $<
+
+spqr_append.o: ../Source/spqr_append.cpp
+	$(C) -c $<
+
+spqr_assemble.o: ../Source/spqr_assemble.cpp
+	$(C) -c $<
+
+spqr_cpack.o: ../Source/spqr_cpack.cpp
+	$(C) -c $<
+
+spqr_csize.o: ../Source/spqr_csize.cpp
+	$(C) -c $<
+
+spqr_cumsum.o: ../Source/spqr_cumsum.cpp
+	$(C) -c $<
+
+spqr_debug.o: ../Source/spqr_debug.cpp
+	$(C) -c $<
+
+spqr_factorize.o: ../Source/spqr_factorize.cpp
+	$(C) -c $<
+
+spqr_fcsize.o: ../Source/spqr_fcsize.cpp
+	$(C) -c $<
+
+spqr_freefac.o: ../Source/spqr_freefac.cpp
+	$(C) -c $<
+
+spqr_freenum.o: ../Source/spqr_freenum.cpp
+	$(C) -c $<
+
+spqr_freesym.o: ../Source/spqr_freesym.cpp
+	$(C) -c $<
+
+spqr_fsize.o: ../Source/spqr_fsize.cpp
+	$(C) -c $<
+
+spqr_happly.o: ../Source/spqr_happly.cpp
+	$(C) -c $<
+
+spqr_panel.o: ../Source/spqr_panel.cpp
+	$(C) -c $<
+
+spqr_happly_work.o: ../Source/spqr_happly_work.cpp
+	$(C) -c $<
+
+spqr_hpinv.o: ../Source/spqr_hpinv.cpp
+	$(C) -c $<
+
+spqr_larftb.o: ../Source/spqr_larftb.cpp
+	$(C) -c $<
+
+spqr_rconvert.o: ../Source/spqr_rconvert.cpp
+	$(C) -c $<
+
+spqr_rcount.o: ../Source/spqr_rcount.cpp
+	$(C) -c $<
+
+spqr_rhpack.o: ../Source/spqr_rhpack.cpp
+	$(C) -c $<
+
+spqr_rsolve.o: ../Source/spqr_rsolve.cpp
+	$(C) -c $<
+
+spqr_shift.o: ../Source/spqr_shift.cpp
+	$(C) -c $<
+
+spqr_stranspose1.o: ../Source/spqr_stranspose1.cpp
+	$(C) -c $<
+
+spqr_stranspose2.o: ../Source/spqr_stranspose2.cpp
+	$(C) -c $<
+
+spqr_trapezoidal.o: ../Source/spqr_trapezoidal.cpp
+	$(C) -c $<
+
+spqr_type.o: ../Source/spqr_type.cpp
+	$(C) -c $<
+
+spqr_front.o: ../Source/spqr_front.cpp
+	$(C) -c $<
+
+SuiteSparseQR_expert.o: ../Source/SuiteSparseQR_expert.cpp
+	$(C) -c $<
+
+spqr_maxcolnorm.o: ../Source/spqr_maxcolnorm.cpp
+	$(C) -c $<
+
+SuiteSparseQR_qmult.o: ../Source/SuiteSparseQR_qmult.cpp
+	$(C) -c $<
+
+SuiteSparseQR.o: ../Source/SuiteSparseQR.cpp
+	$(C) -c $<
+
+spqr_tol.o: ../Source/spqr_tol.cpp
+	$(C) -c $<
+
+SuiteSparseQR_C.o: ../Source/SuiteSparseQR_C.cpp
+	$(C) -c $<
+
+spqr_rmap.o: ../Source/spqr_rmap.cpp
+	$(C) -c $<
+
+spqrgpu_kernel.o: ../SPQRGPU/spqrgpu_kernel.cpp
+	$(C) -c $<
+
+spqrgpu_buildAssemblyMaps.o: ../SPQRGPU/spqrgpu_buildAssemblyMaps.cpp
+	$(C) -c $<
+
+spqrgpu_computeFrontStaging.o: ../SPQRGPU/spqrgpu_computeFrontStaging.cpp
+	$(C) -c $<
+
+#-------------------------------------------------------------------------------
+# libraries compiled without test coverage
+#-------------------------------------------------------------------------------
+
+$(METIS):
+	( cd ../../metis-4.0/Lib && $(MAKE) )
+
+../../CHOLMOD/Lib/libcholmod.a:
+	( cd ../../CHOLMOD && $(MAKE) library )
+
+../../AMD/Lib/libamd.a:
+	( cd ../../AMD && $(MAKE) library )
+
+../../COLAMD/Lib/libcolamd.a:
+	( cd ../../COLAMD && $(MAKE) library )
+
+../../CCOLAMD/Lib/libccolamd.a:
+	( cd ../../CCOLAMD && $(MAKE) library )
+
+../../CAMD/Lib/libcamd.a:
+	( cd ../../CAMD && $(MAKE) library )
+
+../../SuiteSparse_config/libsuitesparseconfig.a:
+	( cd ../../SuiteSparse_config ; $(MAKE) library )
+
+#-------------------------------------------------------------------------------
+# SuiteSparse_GPURuntime
+#-------------------------------------------------------------------------------
+
+GPURUNTIME = ../../SuiteSparse_GPURuntime
+GPURUNSRC = $(GPURUNTIME)/Source
+GPURUNINC = -I$(GPURUNTIME)/Include -I../../SuiteSparse_config
+
+RUNH = \
+        $(GPURUNTIME)/Include/SuiteSparseGPU_Workspace.hpp \
+        $(GPURUNTIME)/Include/SuiteSparseGPU_debug.hpp \
+        $(GPURUNTIME)/Include/SuiteSparseGPU_macros.hpp \
+        $(GPURUNTIME)/Include/SuiteSparseGPU_workspace_macros.hpp \
+        $(GPURUNTIME)/Include/SuiteSparseGPU_Runtime.hpp
+#        Makefile
+
+SuiteSparseGPU_Workspace.o: $(GPURUNSRC)/SuiteSparseGPU_Workspace.cpp $(RUNH)
+	$(NVCC) -c $(GPURUNINC) $<
+
+SuiteSparseGPU_Workspace_cpuAllocators.o: \
+        $(GPURUNSRC)/SuiteSparseGPU_Workspace_cpuAllocators.cpp $(RUNH)
+	$(NVCC) -c $(GPURUNINC) $<
+
+SuiteSparseGPU_Workspace_gpuAllocators.o: \
+        $(GPURUNSRC)/SuiteSparseGPU_Workspace_gpuAllocators.cpp $(RUNH)
+	$(NVCC) -c $(GPURUNINC) $<
+
+SuiteSparseGPU_Workspace_memset.o: \
+        $(GPURUNSRC)/SuiteSparseGPU_Workspace_memset.cpp $(RUNH)
+	$(NVCC) -c $(GPURUNINC) $<
+
+SuiteSparseGPU_Workspace_transfer.o: \
+        $(GPURUNSRC)/SuiteSparseGPU_Workspace_transfer.cpp $(RUNH)
+	$(NVCC) -c $(GPURUNINC) $<
+
+#-------------------------------------------------------------------------------
+# GPUQREngine
+#-------------------------------------------------------------------------------
+
+GPUQR = ../../GPUQREngine
+GPUQRSRC = $(GPUQR)/Source
+GPUQRDEMO = $(GPUQR)/Demo
+GPUQRINC = $(GPURUNINC) -I$(GPUQR)/Include
+
+KERNELH = \
+    $(GPUQR)/Include/GPUQREngine_Common.hpp \
+    $(GPUQR)/Include/GPUQREngine_BucketList.hpp \
+    $(GPUQR)/Include/GPUQREngine_Front.hpp \
+    $(GPUQR)/Include/GPUQREngine_FrontState.hpp \
+    $(GPUQR)/Include/GPUQREngine.hpp \
+    $(GPUQR)/Include/GPUQREngine_Internal.hpp \
+    $(GPUQR)/Include/GPUQREngine_GraphVizHelper.hpp \
+    $(GPUQR)/Include/Kernel/Apply/block_apply_1_by_1.cu \
+    $(GPUQR)/Include/Kernel/Apply/block_apply_1.cu \
+    $(GPUQR)/Include/Kernel/Apply/block_apply_2_by_1.cu \
+    $(GPUQR)/Include/Kernel/Apply/block_apply_2.cu \
+    $(GPUQR)/Include/Kernel/Apply/block_apply_3_by_1.cu \
+    $(GPUQR)/Include/Kernel/Apply/block_apply_3.cu \
+    $(GPUQR)/Include/Kernel/Apply/block_apply_chunk.cu \
+    $(GPUQR)/Include/Kernel/Apply/block_apply.cu \
+    $(GPUQR)/Include/Kernel/Apply/cevta_tile.cu \
+    $(GPUQR)/Include/Kernel/Apply/pipelined_rearrange.cu \
+    $(GPUQR)/Include/Kernel/Assemble/packAssemble.cu \
+    $(GPUQR)/Include/Kernel/Assemble/sAssemble.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_3_by_1.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_vt_1_by_1.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_vt_1_by_1_edge.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_vt_2_by_1.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_vt_2_by_1_edge.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_vt_3_by_1.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_vt_3_by_1_edge.cu \
+    $(GPUQR)/Include/Kernel/Factorize/factorize_vt.cu \
+    $(GPUQR)/Include/Kernel/qrKernel.cu \
+    $(GPUQR)/Include/Kernel/sharedMemory.hpp \
+    $(GPUQR)/Include/Kernel/uberKernel.cu \
+    $(GPUQR)/Include/GPUQREngine_LLBundle.hpp \
+    $(GPUQR)/Include/GPUQREngine_Stats.hpp \
+    $(GPUQR)/Include/GPUQREngine_Scheduler.hpp \
+    $(GPUQR)/Include/GPUQREngine_SEntry.hpp \
+    $(GPUQR)/Include/GPUQREngine_SparseMeta.hpp \
+    $(GPUQR)/Include/GPUQREngine_TaskDescriptor.hpp \
+    $(GPUQR)/Include/GPUQREngine_Timing.hpp
+#   Makefile
+
+GPUQREngine_GraphVizHelper.o: \
+        $(GPUQRSRC)/GPUQREngine_GraphVizHelper.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+GPUQREngine_UberKernel.o: $(GPUQRSRC)/GPUQREngine_UberKernel.cu $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+GPUQREngine_ExpertDense.o: $(GPUQRSRC)/GPUQREngine_ExpertDense.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+GPUQREngine_Internal.o: $(GPUQRSRC)/GPUQREngine_Internal.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+GPUQREngine_ExpertSparse.o: $(GPUQRSRC)/GPUQREngine_ExpertSparse.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+BucketList.o: $(GPUQRSRC)/BucketList/BucketList.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+BucketList_AdvanceBundles.o: $(GPUQRSRC)/BucketList/BucketList_AdvanceBundles.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+BucketList_CreateBundles.o: $(GPUQRSRC)/BucketList/BucketList_CreateBundles.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+BucketList_FillWorkQueue.o: $(GPUQRSRC)/BucketList/BucketList_FillWorkQueue.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+BucketList_GrowBundles.o: $(GPUQRSRC)/BucketList/BucketList_GrowBundles.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+BucketList_Manage.o: $(GPUQRSRC)/BucketList/BucketList_Manage.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+BucketList_PostProcessing.o: $(GPUQRSRC)/BucketList/BucketList_PostProcessing.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+LLBundle.o: $(GPUQRSRC)/LLBundle/LLBundle.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+LLBundle_AddTiles.o: $(GPUQRSRC)/LLBundle/LLBundle_AddTiles.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+LLBundle_Advance.o: $(GPUQRSRC)/LLBundle/LLBundle_Advance.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+LLBundle_GPUPack.o: $(GPUQRSRC)/LLBundle/LLBundle_GPUPack.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+LLBundle_PipelinedRearrange.o: $(GPUQRSRC)/LLBundle/LLBundle_PipelinedRearrange.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+LLBundle_UpdateSecondMinIndex.o: $(GPUQRSRC)/LLBundle/LLBundle_UpdateSecondMinIndex.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+Scheduler.o: $(GPUQRSRC)/Scheduler/Scheduler.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+Scheduler_FillWorkQueue.o: $(GPUQRSRC)/Scheduler/Scheduler_FillWorkQueue.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+Scheduler_Front.o: $(GPUQRSRC)/Scheduler/Scheduler_Front.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+Scheduler_LaunchKernel.o: $(GPUQRSRC)/Scheduler/Scheduler_LaunchKernel.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+Scheduler_PostProcess.o: $(GPUQRSRC)/Scheduler/Scheduler_PostProcess.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+Scheduler_Render.o: $(GPUQRSRC)/Scheduler/Scheduler_Render.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+Scheduler_TransferData.o: $(GPUQRSRC)/Scheduler/Scheduler_TransferData.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+ssgpu_maxQueueSize.o: $(GPUQRSRC)/Scheduler/ssgpu_maxQueueSize.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
+TaskDescriptor_flops.o: $(GPUQRSRC)/TaskDescriptor/TaskDescriptor_flops.cpp $(KERNELH)
+	$(NVCC) -c  $(GPUQRINC) $<
+
diff --git a/SPQR/Tcov/README.txt b/SPQR/Tcov/README.txt
new file mode 100644
index 0000000..82d5f2c
--- /dev/null
+++ b/SPQR/Tcov/README.txt
@@ -0,0 +1,30 @@
+SuiteSparseQR exhaustive statement coverage tests.
+
+This test exercises all of SuiteSparseQR and checks its results.  On a 32-bit
+platform, all lines are tested.  Some lines of code that handle integer
+overflow are not tested (nor are they likely to be testable) on 64-bit
+platforms.
+
+A few lines of code in SuiteSparseQR are provably dead code.  This is
+intentional; the code has been left for future use.  They are marked with
+the comment "// DEAD", and excluded from the test coverage summary.
+
+To run the Tcov tests, first edit the SPQR/Tcov/Makefile to select the
+right BLAS and LAPACK libraries (use non-optimized versions for best results).
+The just type "make" in this directory.  The output should look like the
+make_output.txt file.
+
+Requires Linux; might also work on other Unix platforms.
+
+Files in this directory:
+
+    cov                 csh script that summarizes the statement coverage
+    Makefile            for compiling and running the test
+    make_output.txt     output of "make"
+    matrix1.txt         input file for qrtest, a single matrix
+    matrixlist.txt      input file for qrtest, all matrices in ../Matrix
+    qrtestc.c           for testing the C interface
+    qrtest.cpp          the test program itself.  Rather lengthy.
+    README.txt          this file
+
+Timothy A. Davis, http://www.suitesparse.com
diff --git a/SPQR/Tcov/cov b/SPQR/Tcov/cov
new file mode 100755
index 0000000..c33a014
--- /dev/null
+++ b/SPQR/Tcov/cov
@@ -0,0 +1,37 @@
+#!/bin/csh
+
+echo "Test coverage summary" > cov.out
+echo '=================================================================' >> cov.out
+
+foreach file (../Source/*)
+	gcov $file >& /dev/null
+	end
+
+foreach file (../SPQRGPU/*)
+	gcov $file >& /dev/null
+	end
+
+foreach file (../../SuiteSparse_GPURuntime/Source/*)
+	gcov $file >& /dev/null
+	end
+
+foreach file (../../GPUQREngine/Source/*p)
+	gcov $file >& /dev/null
+	end
+
+foreach file (../../GPUQREngine/Source/*/*p)
+	gcov $file >& /dev/null
+	end
+
+foreach file (*.?cov)
+	echo $file >> cov.out
+	grep "#####" $file | grep -v "__dev" | grep -v "__major" | \
+	    grep -v "#####:[ ]*[0-9]*:[{}]" | grep -v DEAD >> cov.out
+	echo '=================================================================' >> cov.out
+	end
+
+echo -n "statements not tested: "
+grep "\#\#\#\#\#:" *v | grep -v DEAD | wc -l
+
+set status=0
+
diff --git a/SPQR/Tcov/matrix1.txt b/SPQR/Tcov/matrix1.txt
new file mode 100644
index 0000000..44babfa
--- /dev/null
+++ b/SPQR/Tcov/matrix1.txt
@@ -0,0 +1 @@
+1 ../Matrix/west0067.mtx
diff --git a/SPQR/Tcov/matrixlist.txt b/SPQR/Tcov/matrixlist.txt
new file mode 100644
index 0000000..297d5d1
--- /dev/null
+++ b/SPQR/Tcov/matrixlist.txt
@@ -0,0 +1,26 @@
+0 ../Matrix/west0067.mtx
+0 ../Matrix/r2.mtx
+0 ../Matrix/a04.mtx
+0 ../Matrix/a2.mtx
+0 ../Matrix/c2.mtx
+0 ../Matrix/a0.mtx
+0 ../Matrix/lfat5b.mtx
+0 ../Matrix/bfwa62.mtx
+0 ../Matrix/LFAT5.mtx
+0 ../Matrix/b1_ss.mtx
+0 ../Matrix/bcspwr01.mtx
+0 ../Matrix/lpi_galenet.mtx
+0 ../Matrix/lpi_itest6.mtx
+0 ../Matrix/ash219.mtx
+0 ../Matrix/a4.mtx
+0 ../Matrix/s32.mtx
+0 ../Matrix/c32.mtx
+1 ../Matrix/lp_share1b.mtx
+1 ../Matrix/a1.mtx
+1 ../Matrix/GD06_theory.mtx
+1 ../Matrix/GD01_b.mtx
+1 ../Matrix/Tina_AskCal_perm.mtx
+1 ../Matrix/Tina_AskCal.mtx
+1 ../Matrix/GD98_a.mtx
+1 ../Matrix/Ragusa16.mtx
+0 ../Matrix/arrow.mtx
diff --git a/SPQR/Tcov/qrtest.cpp b/SPQR/Tcov/qrtest.cpp
new file mode 100644
index 0000000..b4e074f
--- /dev/null
+++ b/SPQR/Tcov/qrtest.cpp
@@ -0,0 +1,2855 @@
+// =============================================================================
+// === qrtest ==================================================================
+// =============================================================================
+
+// This is an exhaustive test for SuiteSparseQR.  With the right input matrices,
+// it tests each and every line of code in the package.  A malloc wrapper is
+// used that can pretend to run out of memory, to test the out-of-memory
+// conditions in the package.
+//
+// To compile and run this test, type "make".  To compile and run with valgrind,
+// type "make vgo".
+//
+// For best results, this test requires a vanilla BLAS and LAPACK library (see
+// the FLIB definition in the Makefile).  The vanilla BLAS should be the
+// standard reference BLAS, and both it and LAPACK should be compiled with -g
+// for best results.  With some highly-optimized BLAS packages, valgrind
+// complains about not understanding some of the assembly-level instructions
+// used.
+
+#include "spqr.hpp"
+#include "SuiteSparseQR_C.h"
+
+// Use a global variable, to compute Inf.  This could be done with
+// #define INF (1./0.), but the overzealous g++ compiler complains
+// about divide-by-zero.
+double xx = 1 ;
+double yy = 0 ;         
+#define INF (xx / yy)
+#define CHECK_NAN(x) (((x) < 0) || ((x) != (x)) ? INF : (x))
+
+#define NTOL 4
+
+// =============================================================================
+// === qrtest_C ================================================================
+// =============================================================================
+
+extern "C" {
+void qrtest_C
+(
+    cholmod_sparse *A,
+    double anorm,
+    double errs [5],
+    double maxresid [2][2],
+    cholmod_common *cc
+) ;
+}
+
+// =============================================================================
+// === memory testing ==========================================================
+// =============================================================================
+
+Long my_tries = -2 ;     // number of mallocs to allow (-2 means allow all)
+Long my_punt = FALSE ;   // if true, then my_malloc will fail just once
+
+void set_tries (Long tries)
+{
+    my_tries = tries ;
+}
+
+void set_punt (Long punt)
+{
+    my_punt = punt ;
+}
+
+void *my_malloc (size_t size)
+{
+    if (my_tries >= 0 || (my_punt && my_tries >= -1)) my_tries-- ;
+    if (my_tries == -1)
+    {
+        // printf ("malloc pretends to fail\n") ;
+        return (NULL) ;          // pretend to fail
+    }
+    return (malloc (size)) ;
+}
+
+void *my_calloc (size_t n, size_t size)
+{
+    if (my_tries >= 0 || (my_punt && my_tries >= -1)) my_tries-- ;
+    if (my_tries == -1)
+    {
+        // printf ("calloc pretends to fail\n") ;
+        return (NULL) ;          // pretend to fail
+    }
+    return (calloc (n, size)) ;
+}
+
+void *my_realloc (void *p, size_t size)
+{
+    if (my_tries >= 0 || (my_punt && my_tries >= -1)) my_tries-- ;
+    if (my_tries == -1)
+    {
+        // printf ("realloc pretends to fail\n") ;
+        return (NULL) ;          // pretend to fail
+    }
+    return (realloc (p, size)) ;
+}
+
+void my_free (void *p)
+{
+    if (p) free (p) ;
+}
+
+void my_handler (int status, const char *file, int line, const char *msg)
+{
+    printf ("ERROR: %d in %s line %d : %s\n", status, file, line, msg) ;
+}
+
+void normal_memory_handler (cholmod_common *cc)
+{
+    SuiteSparse_config.printf_func = printf ;
+    SuiteSparse_config.malloc_func = malloc ;
+    SuiteSparse_config.calloc_func = calloc ;
+    SuiteSparse_config.realloc_func = realloc ;
+    SuiteSparse_config.free_func = free ;
+
+    cc->error_handler = my_handler ;
+    cholmod_l_free_work (cc) ;
+    my_tries = -2 ;
+    my_punt = FALSE ;
+}
+
+void test_memory_handler (cholmod_common *cc)
+{
+    SuiteSparse_config.printf_func = NULL ;
+    SuiteSparse_config.malloc_func = my_malloc ;
+    SuiteSparse_config.calloc_func = my_calloc ;
+    SuiteSparse_config.realloc_func = my_realloc ;
+    SuiteSparse_config.free_func = my_free ;
+
+    cc->error_handler = NULL ;
+    cholmod_l_free_work (cc) ;
+    my_tries = -2 ;
+    my_punt = FALSE ;
+}
+
+
+// =============================================================================
+// === SPQR_qmult ==============================================================
+// =============================================================================
+
+// wrapper for SuiteSparseQR_qmult (dense), optionally testing memory alloc.
+
+template <typename Entry> cholmod_dense *SPQR_qmult
+(
+    // arguments for SuiteSparseQR_qmult: 
+    Long method,
+    cholmod_sparse *H,
+    cholmod_dense *Tau,
+    Long *HPinv,
+    cholmod_dense *X,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_dense *Y = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        Y = SuiteSparseQR_qmult <Entry> (method, H, Tau, HPinv, X, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            Y = SuiteSparseQR_qmult <Entry> (method, H, Tau, HPinv, X, cc) ;
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (Y) ;
+}
+
+
+// =============================================================================
+// === SPQR_qmult_sparse =======================================================
+// =============================================================================
+
+// wrapper for SuiteSparseQR_qmult (sparse), optionally testing memory alloc.
+
+template <typename Entry> cholmod_sparse *SPQR_qmult
+(
+    // arguments for SuiteSparseQR_qmult: 
+    Long method,
+    cholmod_sparse *H,
+    cholmod_dense *Tau,
+    Long *HPinv,
+    cholmod_sparse *X,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_sparse *Y = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        Y = SuiteSparseQR_qmult <Entry> (method, H, Tau, HPinv, X, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            Y = SuiteSparseQR_qmult <Entry> (method, H, Tau, HPinv, X, cc);
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (Y) ;
+}
+
+#ifndef NEXPERT
+
+// =============================================================================
+// === SPQR_qmult (dense case) =================================================
+// =============================================================================
+
+// wrapper for SuiteSparseQR_qmult (dense), optionally testing memory alloc.
+
+template <typename Entry> cholmod_dense *SPQR_qmult
+(
+    // arguments for SuiteSparseQR_qmult: 
+    Long method,
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_dense *X,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_dense *Y = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        Y = SuiteSparseQR_qmult <Entry> (method, QR, X, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            Y = SuiteSparseQR_qmult <Entry> (method, QR, X, cc) ;
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (Y) ;
+}
+
+// =============================================================================
+// === SPQR_qmult (sparse case) ================================================
+// =============================================================================
+
+// wrapper for SuiteSparseQR_qmult (sparse), optionally testing memory alloc.
+
+template <typename Entry> cholmod_sparse *SPQR_qmult
+(
+    // arguments for SuiteSparseQR_qmult: 
+    Long method,
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_sparse *X,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_sparse *Y = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        Y = SuiteSparseQR_qmult <Entry> (method, QR, X, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            Y = SuiteSparseQR_qmult <Entry> (method, QR, X, cc) ;
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (Y) ;
+}
+
+
+// =============================================================================
+// === SPQR_solve (dense case) =================================================
+// =============================================================================
+
+// Wrapper for testing SuiteSparseQR_solve
+
+template <typename Entry> cholmod_dense *SPQR_solve
+(
+    // arguments for SuiteSparseQR_solve: 
+    Long system,
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_dense *B,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_dense *X = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        X = SuiteSparseQR_solve (system, QR, B, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            X = SuiteSparseQR_solve (system, QR, B, cc) ;
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (X) ;
+}
+
+
+// =============================================================================
+// === SPQR_solve (sparse case) ================================================
+// =============================================================================
+
+// Wrapper for testing SuiteSparseQR_solve
+
+template <typename Entry> cholmod_sparse *SPQR_solve
+(
+    // arguments for SuiteSparseQR_solve: 
+    Long system,
+    SuiteSparseQR_factorization <Entry> *QR,
+    cholmod_sparse *B,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_sparse *X = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        X = SuiteSparseQR_solve (system, QR, B, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            X = SuiteSparseQR_solve (system, QR, B, cc) ;
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (X) ;
+}
+
+
+// =============================================================================
+// === SPQR_min2norm (dense case) ==============================================
+// =============================================================================
+
+// Wrapper for testing SuiteSparseQR_min2norm
+
+template <typename Entry> cholmod_dense *SPQR_min2norm
+(
+    // arguments for SuiteSparseQR_min2norm: 
+    int ordering,
+    double tol,
+    cholmod_sparse *A,
+    cholmod_dense *B,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_dense *X = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        X = SuiteSparseQR_min2norm <Entry> (ordering, tol, A, B, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            X = SuiteSparseQR_min2norm <Entry> (ordering, tol, A, B, cc) ;
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (X) ;
+}
+
+// =============================================================================
+// === SPQR_min2norm (sparse case) =============================================
+// =============================================================================
+
+// Wrapper for testing SuiteSparseQR_min2norm
+
+template <typename Entry> cholmod_sparse *SPQR_min2norm
+(
+    // arguments for SuiteSparseQR_min2norm: 
+    int ordering,
+    double tol,
+    cholmod_sparse *A,
+    cholmod_sparse *B,
+    cholmod_common *cc,
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    cholmod_sparse *X = NULL ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        X = SuiteSparseQR_min2norm <Entry> (ordering, tol, A, B, cc) ;
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            X = SuiteSparseQR_min2norm <Entry> (ordering, tol, A, B, cc) ;
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (X) ;
+}
+
+// =============================================================================
+// === SPQR_factorize ==========================================================
+// =============================================================================
+
+// Wrapper for testing SuiteSparseQR_factorize or
+// SuiteSparseQR_symbolic and SuiteSparseQR_numeric
+
+template <typename Entry> SuiteSparseQR_factorization <Entry> *SPQR_factorize
+(
+    // arguments for SuiteSparseQR_factorize: 
+    int ordering,
+    double tol,
+    cholmod_sparse *A,
+    cholmod_common *cc,
+
+    // method to use
+    int split,              // if 1 use SuiteSparseQR_symbolic followed by
+                            // SuiteSparseQR_numeric, if 0 use
+                            // SuiteSparseQR_factorize, if 2, do the
+                            // numeric factorization twice, just for testing.
+                            // if 3 use SuiteSparseQR_C_factorize
+                            // if 3 use SuiteSparseQR_C_symbolic / _C_numeric
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    SuiteSparseQR_factorization <Entry> *QR ;
+    SuiteSparseQR_C_factorization *C_QR ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+
+        if (split == 4)
+        {
+
+            C_QR = SuiteSparseQR_C_symbolic (ordering, tol >= 0, A, cc) ;
+            SuiteSparseQR_C_numeric (tol, A, C_QR, cc) ;
+            if (C_QR == NULL)
+            {
+                cc->status = CHOLMOD_OUT_OF_MEMORY ;
+                QR = NULL ;
+            }
+            else
+            {
+                QR = (SuiteSparseQR_factorization <Entry> *)
+                    (C_QR->factors) ;
+                if (QR == NULL || QR->QRnum == NULL)
+                {
+                    cc->status = CHOLMOD_OUT_OF_MEMORY ;
+                    QR = NULL  ;
+                }
+                else
+                {
+                    // QR itself will be kept; free the C wrapper
+                    C_QR->factors = NULL ;
+                    cc->status = CHOLMOD_OK ;
+                    if (QR == NULL) printf ("Hey!\n") ;
+                }
+            }
+            SuiteSparseQR_C_free (&C_QR, cc) ;
+
+        }
+        else if (split == 3)
+        {
+
+            C_QR = SuiteSparseQR_C_factorize (ordering, tol, A, cc) ;
+            int save = cc->status ;
+            if (C_QR == NULL)
+            {
+                QR = NULL ;
+            }
+            else
+            {
+                QR = (SuiteSparseQR_factorization <Entry> *) (C_QR->factors) ;
+                C_QR->factors = NULL ;
+                SuiteSparseQR_C_free (&C_QR, cc) ;
+            }
+            cc->status = save ;
+
+        }
+        else if (split == 2)
+        {
+            QR = SuiteSparseQR_symbolic <Entry> (ordering,
+                tol >= 0 || tol <= SPQR_DEFAULT_TOL, A, cc) ;
+            ASSERT (QR != NULL) ;
+            SuiteSparseQR_numeric <Entry> (tol, A, QR, cc) ;
+            // just for testing
+            SuiteSparseQR_numeric <Entry> (tol, A, QR, cc) ;
+        }
+        else if (split == 1)
+        {
+            // split symbolic/numeric, no singletons exploited
+            QR = SuiteSparseQR_symbolic <Entry> (ordering,
+                tol >= 0 || tol <= SPQR_DEFAULT_TOL, A, cc) ;
+            ASSERT (QR != NULL) ;
+            SuiteSparseQR_numeric <Entry> (tol, A, QR, cc) ;
+        }
+        else
+        {
+            QR = SuiteSparseQR_factorize <Entry> (ordering, tol, A, cc) ;
+        }
+
+    }
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+
+            if (split == 4)
+            {
+
+                C_QR = SuiteSparseQR_C_symbolic (ordering, tol >= 0, A, cc) ;
+                SuiteSparseQR_C_numeric (tol, A, C_QR, cc) ;
+                if (C_QR == NULL)
+                {
+                    cc->status = CHOLMOD_OUT_OF_MEMORY ;
+                    QR = NULL ;
+                }
+                else
+                {
+                    QR = (SuiteSparseQR_factorization <Entry> *)
+                        (C_QR->factors) ;
+                    if (QR == NULL || QR->QRnum == NULL)
+                    {
+                        cc->status = CHOLMOD_OUT_OF_MEMORY ;
+                        QR = NULL  ;
+                    }
+                    else
+                    {
+                        // QR itself will be kept; free the C wrapper
+                        C_QR->factors = NULL ;
+                        cc->status = CHOLMOD_OK ;
+                        if (QR == NULL) printf ("Hey!!\n") ;
+                    }
+                }
+                SuiteSparseQR_C_free (&C_QR, cc) ;
+
+
+            }
+            else if (split == 3)
+            {
+
+                C_QR = SuiteSparseQR_C_factorize (ordering, tol, A, cc) ;
+                int save = cc->status ;
+                if (C_QR == NULL)
+                {
+                    QR = NULL ;
+                }
+                else
+                {
+                    QR = (SuiteSparseQR_factorization <Entry> *) C_QR->factors ;
+                    C_QR->factors = NULL ;
+                    SuiteSparseQR_C_free (&C_QR, cc) ;
+                }
+                cc->status = save ;
+
+            }
+            else if (split == 1 || split == 2)
+            {
+                // split symbolic/numeric, no singletons exploited
+                QR = SuiteSparseQR_symbolic <Entry> (ordering,
+                    tol >= 0 || tol <= SPQR_DEFAULT_TOL, A, cc) ;
+                if (cc->status < CHOLMOD_OK)
+                {
+                    continue ;
+                }
+                ASSERT (QR != NULL) ;
+                SuiteSparseQR_numeric <Entry> (tol, A, QR, cc) ;
+                if (cc->status < CHOLMOD_OK)
+                {
+                    SuiteSparseQR_free <Entry> (&QR, cc) ;
+                }
+            }
+            else
+            {
+                QR = SuiteSparseQR_factorize <Entry> (ordering, tol, A, cc) ;
+            }
+
+            if (cc->status == CHOLMOD_OK) break ;
+        }
+        normal_memory_handler (cc) ;
+    }
+
+    if (QR == NULL) printf ("huh?? split: %d ordering %d tol %g\n", split,
+        ordering, tol) ;
+    return (QR) ;
+}
+
+
+#endif
+
+// =============================================================================
+// === SPQR_qr =================================================================
+// =============================================================================
+
+// wrapper for SuiteSparseQR, optionally testing memory allocation
+
+template <typename Entry> Long SPQR_qr
+(
+    // arguments for SuiteSparseQR: 
+    int ordering,
+    double tol,
+    Long econ,
+    Long getCTX,
+    cholmod_sparse *A,
+    cholmod_sparse *Bsparse,
+    cholmod_dense *Bdense,
+    cholmod_sparse **Zsparse,
+    cholmod_dense  **Zdense,
+    cholmod_sparse **R,
+    Long **E,
+    cholmod_sparse **H,
+    Long **HPinv,
+    cholmod_dense **HTau,
+    cholmod_common *cc,
+
+    // which version to use (C or C++)
+    int use_c_version,      // if TRUE use C version, otherwise use C++
+
+    // malloc control
+    Long memory_test,        // if TRUE, test malloc error handling
+    Long memory_punt         // if TRUE, test punt case
+)
+{
+    Long rank ;
+    if (!memory_test)
+    {
+        // just call the method directly; no memory testing
+        if (use_c_version)
+        {
+            rank = SuiteSparseQR_C (ordering, tol, econ, getCTX, A,
+                Bsparse, Bdense, Zsparse, Zdense, R, E, H, HPinv, HTau, cc) ;
+        }
+        else
+        {
+            rank = SuiteSparseQR <Entry> (ordering, tol, econ, getCTX, A,
+                Bsparse, Bdense, Zsparse, Zdense, R, E, H, HPinv, HTau, cc) ;
+        }
+    } 
+    else
+    {
+        // test malloc error handling
+        Long tries ;
+        test_memory_handler (cc) ;
+        my_punt = memory_punt ;
+        for (tries = 0 ; my_tries < 0 ; tries++)
+        {
+            my_tries = tries ;
+            if (use_c_version)
+            {
+                rank = SuiteSparseQR_C (ordering, tol, econ, getCTX, A,
+                    Bsparse, Bdense, Zsparse, Zdense, R, E, H, HPinv, HTau, cc);
+            }
+            else
+            {
+                rank = SuiteSparseQR <Entry> (ordering, tol, econ, getCTX, A,
+                    Bsparse, Bdense, Zsparse, Zdense, R, E, H, HPinv, HTau, cc);
+            }
+            if (cc->status == CHOLMOD_OK)
+            {
+                break ;
+            }
+        }
+        normal_memory_handler (cc) ;
+    }
+    return (rank) ;
+}
+
+
+// =============================================================================
+// === my_rand =================================================================
+// =============================================================================
+
+// The POSIX example of rand, duplicated here so that the same sequence will
+// be generated on different machines.
+
+static unsigned long next = 1 ;
+
+#define MY_RAND_MAX 32767
+
+// RAND_MAX assumed to be 32767
+Long my_rand (void)
+{
+   next = next * 1103515245 + 12345 ;
+   return ((unsigned)(next/65536) % (MY_RAND_MAX + 1)) ;
+}
+
+void my_srand (unsigned seed)
+{
+   next = seed ;
+}
+
+unsigned long my_seed (void)
+{
+   return (next) ;
+}
+
+Long nrand (Long n)       // return a random Long between 0 and n-1
+{
+    return ((n <= 0) ? 0 : (my_rand ( ) % n)) ;
+}
+
+double xrand ( )        // return a random double between -1 and 1
+{
+    double x = ((double) my_rand ( )) / MY_RAND_MAX ;
+    return (2*x-1) ;
+}
+
+double erand (double range)
+{
+    return (range * xrand ( )) ;
+}
+
+Complex erand (Complex range)
+{
+    Complex x ;
+    x.real ( ) = xrand ( ) ;
+    x.imag ( ) = xrand ( ) ;
+    return (range * x) ;
+}
+
+
+// =============================================================================
+// === getreal =================================================================
+// =============================================================================
+
+// return real part of a scalar x
+
+inline double getreal (double x)
+{
+    return (x) ;
+}
+
+inline double getreal (Complex x)
+{
+    return (x.real ( )) ;
+}
+
+// =============================================================================
+// === getimag =================================================================
+// =============================================================================
+
+// return imaginary part of a scalar x
+inline double getimag (double x)        // x is an unused parameter
+{
+    return (0) ;
+}
+
+inline double getimag (Complex x)
+{
+    return (x.imag ( )) ;
+}
+
+
+// =============================================================================
+// === dense_wrapper ===========================================================
+// =============================================================================
+
+// place a column-oriented matrix in a cholmod_dense wrapper
+
+template <typename Entry> cholmod_dense *dense_wrapper
+(
+    cholmod_dense *X,
+    Long nrow,
+    Long ncol,
+    Entry *Xx
+)
+{
+    X->xtype = spqr_type <Entry> ( ) ;
+    X->nrow = nrow ;
+    X->ncol = ncol ;
+    X->d = nrow ;           // leading dimension = nrow
+    X->nzmax = nrow * ncol ;
+    X->x = Xx ;
+    X->z = NULL ;           // ZOMPLEX case not supported
+    X->dtype = CHOLMOD_DOUBLE ;
+    return (X) ;
+}
+
+// =============================================================================
+// === sparse_split ============================================================
+// =============================================================================
+
+// Return the real or imaginary part of a packed complex sparse matrix
+
+cholmod_sparse *sparse_split
+(
+    cholmod_sparse *A,
+    Long part,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *C ;
+    if (!A || A->xtype != CHOLMOD_COMPLEX || A->nz != NULL) return (NULL) ;
+    if (! (part == 0 || part == 1)) return (NULL) ;
+
+    Long nz = cholmod_l_nnz (A, cc) ;
+    C = cholmod_l_allocate_sparse (A->nrow, A->ncol, nz, TRUE, TRUE, 0,
+        CHOLMOD_REAL, cc) ;
+
+    Long *Ap = (Long *) A->p ;
+    Long *Ai = (Long *) A->i ;
+    double *Ax = (double *) A->x ;
+
+    Long *Cp = (Long *) C->p ;
+    Long *Ci = (Long *) C->i ;
+    double *Cx = (double *) C->x ;
+
+    Long n = A->ncol ;
+
+    for (Long k = 0 ; k < n+1 ; k++)
+    {
+        Cp [k] = Ap [k] ;
+    }
+
+    for (Long k = 0 ; k < nz ; k++)
+    {
+        Ci [k] = Ai [k] ;
+    }
+
+    for (Long k = 0 ; k < nz ; k++)
+    {
+        Cx [k] = Ax [2*k + part] ;
+    }
+
+    return (C) ;
+}
+
+cholmod_sparse *sparse_real (cholmod_sparse *A, cholmod_common *cc)
+{
+    return (sparse_split (A, 0, cc)) ;
+}
+
+cholmod_sparse *sparse_imag (cholmod_sparse *A, cholmod_common *cc)
+{
+    return (sparse_split (A, 1, cc)) ;
+}
+
+// =============================================================================
+// === sparse_merge ============================================================
+// =============================================================================
+
+// Add the real and imaginary parts of a matrix (both stored in real form)
+// into a single matrix.  The two parts must have the same nonzero pattern.
+// A is CHOLMOD_REAL on input and holds the real part, it is CHOLMOD_COMPLEX
+// on output.  A_imag is CHOLMOD_REAL on input; it holds the imaginary part
+// of A as a real matrix.
+
+int sparse_merge
+(
+    cholmod_sparse *A,          // input/output
+    cholmod_sparse *A_imag,     // input only
+    cholmod_common *cc
+)
+{
+    if (A == NULL || A_imag == NULL)
+    {
+        return (FALSE) ;
+    }
+    Long nz1 = cholmod_l_nnz (A, cc) ;
+    Long nz2 = cholmod_l_nnz (A_imag, cc) ;
+    if (A->xtype != CHOLMOD_REAL || A_imag->xtype != CHOLMOD_REAL || nz1 != nz2)
+    {
+        return (FALSE) ;
+    }
+
+    // change A from real to complex
+    cholmod_l_sparse_xtype (CHOLMOD_COMPLEX, A, cc) ;
+
+    double *Ax = (double *) A->x ;
+    double *Az = (double *) A_imag->x ;
+
+    // merge in the imaginary part from A_imag into A
+    for (Long k = 0 ; k < nz1 ; k++)
+    {
+        Ax [2*k+1] = Az [k] ;
+    }
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+// === sparse_diff =============================================================
+// =============================================================================
+
+// Compute C = A-B where A and B are either both real, or both complex
+
+template <typename Entry> cholmod_sparse *sparse_diff
+(
+    cholmod_sparse *A,
+    cholmod_sparse *B,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *C ;
+    double one [2] = {1,0}, minusone [2] = {-1,0} ;
+
+    if (spqr_type <Entry> ( ) == CHOLMOD_REAL)
+    {
+        // C = A - B
+        C = cholmod_l_add (A, B, one, minusone, TRUE, TRUE, cc) ;
+    }
+    else
+    {
+        cholmod_sparse *A_real, *A_imag, *B_real, *B_imag, *C_imag ;
+
+        A_real = sparse_real (A, cc) ;
+        A_imag = sparse_imag (A, cc) ;
+
+        B_real = sparse_real (B, cc) ;
+        B_imag = sparse_imag (B, cc) ;
+
+        // real(C) = real(A) - real (B)
+        C = cholmod_l_add (A_real, B_real, one, minusone, TRUE, TRUE, cc) ;
+
+        // imag(C) = imag(A) - imag (B)
+        C_imag = cholmod_l_add (A_imag, B_imag, one, minusone, TRUE, TRUE, cc) ;
+
+        // C = real(C) + 1i*imag(C)
+        sparse_merge (C, C_imag, cc) ;
+        cholmod_l_free_sparse (&C_imag, cc) ;
+
+        cholmod_l_free_sparse (&A_real, cc) ;
+        cholmod_l_free_sparse (&A_imag, cc) ;
+        cholmod_l_free_sparse (&B_real, cc) ;
+        cholmod_l_free_sparse (&B_imag, cc) ;
+    }
+
+    return (C) ;
+}
+
+
+// =============================================================================
+// === permute_columns =========================================================
+// =============================================================================
+
+// compute A(:,P)
+
+template <typename Entry> cholmod_sparse *permute_columns
+(
+    cholmod_sparse *A,
+    Long *P,
+    cholmod_common *cc
+) 
+{
+    Long m = A->nrow ;
+    Long n = A->ncol ;
+    Long nz = cholmod_l_nnz (A, cc) ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    Long *Ap = (Long *) A->p ;
+    Long *Ai = (Long *) A->i ;
+    Entry *Ax = (Entry *) A->x ;
+    cholmod_sparse *C ;
+
+    // allocate empty matrix C with space for nz entries
+    C = cholmod_l_allocate_sparse (m, n, nz, TRUE, TRUE, 0, xtype, cc) ;
+    Long *Cp = (Long *) C->p ;
+    Long *Ci = (Long *) C->i ;
+    Entry *Cx = (Entry *) C->x ;
+
+    // construct column pointers for C
+    for (Long k = 0 ; k < n ; k++)
+    {
+        // column j of A becomes column k of C
+        Long j = P ? P [k] : k ;
+        Cp [k] = Ap [j+1] - Ap [j] ;
+    }
+    spqr_cumsum (n, Cp) ;
+
+    // copy columns from A to C
+    for (Long k = 0 ; k < n ; k++)
+    {
+        // copy column k of A into column j of C
+        Long j = P ? P [k] : k ;
+        Long pdest = Cp [k] ;
+        Long psrc = Ap [j] ;
+        Long len = Ap [j+1] - Ap [j] ;
+        for (Long t = 0 ; t < len ; t++)
+        {
+            Ci [pdest + t] = Ai [psrc + t] ;
+            Cx [pdest + t] = Ax [psrc + t] ;
+        }
+    }
+
+    return (C) ;
+}
+
+
+// =============================================================================
+// === sparse_multiply =========================================================
+// =============================================================================
+
+// compute A*B where A and B can be both real or both complex
+
+template <typename Entry> cholmod_sparse *sparse_multiply
+(
+    cholmod_sparse *A,
+    cholmod_sparse *B,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *C ;
+
+    if (spqr_type <Entry> ( ) == CHOLMOD_REAL)
+    {
+        // C = A*B
+        C = cholmod_l_ssmult (A, B, 0, TRUE, TRUE, cc) ;
+    }
+    else
+    {
+        // cholmod_ssmult and cholmod_add only work for real matrices
+        cholmod_sparse *A_real, *A_imag, *B_real, *B_imag, *C_imag, *T1, *T2 ;
+        double one [2] = {1,0}, minusone [2] = {-1,0} ;
+
+        A_real = sparse_real (A, cc) ;
+        A_imag = sparse_imag (A, cc) ;
+
+        B_real = sparse_real (B, cc) ;
+        B_imag = sparse_imag (B, cc) ;
+
+        // real(C) = real(A)*real(B) - imag(A)*imag(B)
+        T1 = cholmod_l_ssmult (A_real, B_real, 0, TRUE, TRUE, cc) ;
+        T2 = cholmod_l_ssmult (A_imag, B_imag, 0, TRUE, TRUE, cc) ;
+        C = cholmod_l_add (T1, T2, one, minusone, TRUE, TRUE, cc) ;
+        cholmod_l_free_sparse (&T1, cc) ;
+        cholmod_l_free_sparse (&T2, cc) ;
+
+        // imag(C) = imag(A)*real(B) + real(A)*imag(B)
+        T1 = cholmod_l_ssmult (A_imag, B_real, 0, TRUE, TRUE, cc) ;
+        T2 = cholmod_l_ssmult (A_real, B_imag, 0, TRUE, TRUE, cc) ;
+        C_imag = cholmod_l_add (T1, T2, one, one, TRUE, TRUE, cc) ;
+        cholmod_l_free_sparse (&T1, cc) ;
+        cholmod_l_free_sparse (&T2, cc) ;
+
+        // C = real(C) + 1i*imag(C)
+        sparse_merge (C, C_imag, cc) ;
+        cholmod_l_free_sparse (&C_imag, cc) ;
+
+        cholmod_l_free_sparse (&A_real, cc) ;
+        cholmod_l_free_sparse (&A_imag, cc) ;
+        cholmod_l_free_sparse (&B_real, cc) ;
+        cholmod_l_free_sparse (&B_imag, cc) ;
+    }
+
+    return (C) ;
+}
+
+
+// =============================================================================
+// === sparse_resid ============================================================
+// =============================================================================
+
+// compute norm (A*x-b,1) for A,x, and b all sparse
+
+template <typename Entry> double sparse_resid
+(
+    cholmod_sparse *A,
+    double anorm,
+    cholmod_sparse *X,
+    cholmod_sparse *B,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *AX, *Resid ;
+    // AX = A*X
+    AX = sparse_multiply <Entry> (A, X, cc) ;
+    // Resid = AX - B
+    Resid = sparse_diff <Entry> (AX, B, cc) ;
+    // resid = norm (Resid,1)
+    double resid = cholmod_l_norm_sparse (Resid, 1, cc) ;
+    resid = CHECK_NAN (resid) ;
+    cholmod_l_free_sparse (&AX, cc) ;
+    cholmod_l_free_sparse (&Resid, cc) ;
+    return (CHECK_NAN (resid / anorm)) ;
+}
+
+
+// =============================================================================
+// === dense_resid =============================================================
+// =============================================================================
+
+// compute norm (A*x-b,1) for A sparse, x and b dense
+
+template <typename Entry> double dense_resid
+(
+    cholmod_sparse *A,
+    double anorm,
+    cholmod_dense *X,
+    Long nb,
+    Entry *Bx,
+    cholmod_common *cc
+)
+{
+    cholmod_dense *B, Bmatrix, *Resid ;
+    double one [2] = {1,0}, minusone [2] = {-1,0} ;
+
+    B = dense_wrapper (&Bmatrix, A->nrow, nb, Bx) ;
+    // Resid = B
+    Resid = cholmod_l_copy_dense (B, cc) ;
+
+    // Resid = A*X - Resid
+    cholmod_l_sdmult (A, FALSE, one, minusone, X, Resid, cc) ;
+
+    // resid = norm (Resid,1)
+    double resid = cholmod_l_norm_dense (Resid, 1, cc) ;
+    resid = CHECK_NAN (resid) ;
+    cholmod_l_free_dense (&Resid, cc) ;
+    return (CHECK_NAN (resid / anorm)) ;
+}
+
+// =============================================================================
+// === check_r_factor ==========================================================
+// =============================================================================
+
+// compute norm (R'*R - (A(:,P))'*(A(:,P)), 1) / norm (A'*A,1)
+
+template <typename Entry> double check_r_factor
+(
+    cholmod_sparse *R,
+    cholmod_sparse *A,
+    Long *P,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *RTR, *RT, *C, *CT, *CTC, *D ;
+
+    // RTR = R'*R
+    RT = cholmod_l_transpose (R, 2, cc) ;
+    RTR = sparse_multiply <Entry> (RT, R, cc) ;
+    cholmod_l_free_sparse (&RT, cc) ;
+
+    // C = A(:,P)
+    C = permute_columns<Entry> (A, P, cc) ;
+
+    // CTC = C'*C
+    CT = cholmod_l_transpose (C, 2, cc) ;
+    CTC = sparse_multiply <Entry> (CT, C, cc) ;
+    cholmod_l_free_sparse (&CT, cc) ;
+    cholmod_l_free_sparse (&C, cc) ;
+
+    double ctcnorm = cholmod_l_norm_sparse (CTC, 1, cc) ;
+    if (ctcnorm == 0) ctcnorm = 1 ;
+    ctcnorm = CHECK_NAN (ctcnorm) ;
+
+    // D = RTR - CTC
+    D = sparse_diff <Entry> (RTR, CTC, cc) ;
+    cholmod_l_free_sparse (&CTC, cc) ;
+    cholmod_l_free_sparse (&RTR, cc) ;
+
+    // err = norm (D,1)
+    double err = cholmod_l_norm_sparse (D, 1, cc) / ctcnorm ;
+    err = CHECK_NAN (err) ;
+
+    cholmod_l_free_sparse (&D, cc) ;
+    return (CHECK_NAN (err)) ;
+}
+
+
+// =============================================================================
+// === check_qr ================================================================
+// =============================================================================
+
+// compute norm (Q*R - A(:,P)) / norm (A)
+
+template <typename Entry> double check_qr
+(
+    cholmod_sparse *Q,
+    cholmod_sparse *R,
+    cholmod_sparse *A,
+    Long *P,
+    double anorm,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *QR, *C, *D ;
+
+    // C = A(:,P)
+    C = permute_columns<Entry> (A, P, cc) ;
+
+    // QR = Q*R
+    QR = sparse_multiply <Entry> (Q, R, cc) ;
+
+    // D = RTR - CTC
+    D = sparse_diff <Entry> (QR, C, cc) ;
+    cholmod_l_free_sparse (&QR, cc) ;
+    cholmod_l_free_sparse (&C, cc) ;
+
+    // err = norm (D,1)
+    double err = cholmod_l_norm_sparse (D, 1, cc) / anorm ;
+    err = CHECK_NAN (err) ;
+
+    cholmod_l_free_sparse (&D, cc) ;
+    return (CHECK_NAN (err)) ;
+}
+
+
+// =============================================================================
+// === Rsolve ==================================================================
+// =============================================================================
+
+template <typename Entry> int Rsolve
+(
+    // R is n-by-n, upper triangular with zero-free diagonal
+    Long n,
+    cholmod_sparse *R,
+    Entry *X,       // X is n-by-nx, leading dimension n, overwritten with soln
+    Long nx,
+    cholmod_common *cc
+)
+{
+    // Long n = R->n ;
+    Long *Rp = (Long *) R->p ; 
+    Long *Ri = (Long *) R->i ; 
+    Entry *Rx = (Entry *) R->x ; 
+
+    // check the diagonal
+    for (Long j = 0 ; j < n ; j++)
+    {
+        if (Rp [j] == Rp [j+1] || Ri [Rp [j+1]-1] != j)
+        {
+            printf ("Rsolve: R not upper triangular w/ zero-free diagonal\n") ;
+            return (FALSE) ;
+        }
+    }
+
+    // do the backsolve
+    for (Long k = 0 ; k < nx ; k++)
+    {
+        for (Long j = n-1 ; j >= 0 ; j--)
+        {
+            Entry rjj = Rx [Rp [j+1]-1] ;
+            if (rjj == (Entry) 0)
+            {
+                printf ("Rsolve: R has an explicit zero on the diagonal\n") ;
+                return (FALSE) ;
+            }
+            X [j] /= rjj ;
+            for (Long p = Rp [j] ; p < Rp [j+1]-1 ; p++)
+            {
+                X [Ri [p]] -= Rx [p] * X [j] ;
+            }
+        }
+        X += n ;
+    }
+
+    return (TRUE) ;
+}
+
+
+// =============================================================================
+// === create_Q ================================================================
+// =============================================================================
+
+// create a sparse Q
+template <typename Entry> cholmod_sparse *create_Q
+(
+    cholmod_sparse *H,
+    cholmod_dense *HTau,
+    Long *HPinv,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *Q, *I ;
+    Long m = H->nrow ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    I = cholmod_l_speye (m, m, xtype, cc) ;
+    Q = SPQR_qmult <Entry> (1, H, HTau, HPinv, I, cc, m<300, nrand (2)) ;
+    cholmod_l_free_sparse (&I, cc) ;
+    return (Q) ;
+}
+
+
+// =============================================================================
+// === QRsolve =================================================================
+// =============================================================================
+
+// solve Ax=b using H, R, and E
+
+template <typename Entry> double QRsolve
+(
+    cholmod_sparse *A,
+    double anorm,
+    Long rank,
+    Long method,
+    cholmod_sparse *H,
+    cholmod_dense *HTau,
+    Long *HPinv,
+    cholmod_sparse *R,
+    Long *Qfill,
+    cholmod_dense *Bdense,
+    cholmod_common *cc
+)
+{
+    double one [2] = {1,0}, zero [2] = {0,0}, resid = EMPTY ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    Long n = A->ncol ;
+    Long m = A->nrow ;
+    Long nrhs = Bdense->ncol ;
+    Entry *X, *Y = NULL, *B ;
+    cholmod_dense *Ydense = NULL ;
+    cholmod_dense *Xdense ;
+
+    B = (Entry *) Bdense->x ;
+    Xdense = cholmod_l_zeros (n, nrhs, xtype, cc) ;
+    X = (Entry *) Xdense->x ;
+
+    if (method == 0)
+    {
+        // solve Ax=b using H, R, and E
+        // Y = Q'*B
+        Ydense = SPQR_qmult <Entry> (0, H, HTau, HPinv, Bdense, cc,
+            m < 300, nrand (2)) ;
+    }
+    else
+    {
+        cholmod_sparse *Q, *QT ;
+        // solve using Q instead of qmult
+        Q = create_Q <Entry> (H, HTau, HPinv, cc) ;
+        QT = cholmod_l_transpose (Q, 2, cc) ;
+        // Y = Q'*B
+        Ydense = cholmod_l_zeros (m, nrhs, xtype, cc) ;
+        cholmod_l_sdmult (QT, FALSE, one, zero, Bdense, Ydense, cc) ;
+        cholmod_l_free_sparse (&Q, cc) ;
+        cholmod_l_free_sparse (&QT, cc) ;
+    }
+
+    // Y (1:rank) = R (1:rank,1:rank) \ Y (1:rank)
+    Y = (Entry *) Ydense->x ;
+    Long ok = Rsolve (rank, R, Y, nrhs, cc) ;
+    // X = E*Y
+    if (ok)
+    {
+        for (Long kk = 0 ; kk < nrhs ; kk++)
+        {
+            for (Long k = 0 ; k < rank ; k++)
+            {
+                Long j = Qfill ? Qfill [k] : k ;
+                X [j] = Y [k] ;
+            }
+            X += n ;
+            Y += m ;
+        }
+        // check norm (A*x-b), x and b dense
+        resid = dense_resid (A, anorm, Xdense, nrhs, B, cc) ;
+    }
+
+    cholmod_l_free_dense (&Ydense, cc) ;
+    cholmod_l_free_dense (&Xdense, cc) ;
+    return (CHECK_NAN (resid)) ;
+}
+
+
+// =============================================================================
+// === check_qmult =============================================================
+// =============================================================================
+
+// Test qmult
+
+template <typename Entry> double check_qmult
+(
+    cholmod_sparse *H,
+    cholmod_dense *HTau,
+    Long *HPinv,
+    Long test_errors,
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *Q, *QT, *Xsparse, *Ssparse, *Zsparse ;
+    cholmod_dense *Xdense, *Zdense, *Sdense, *Ydense ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    Entry *X, *Y, *Z, *S ;
+    double err, maxerr = 0 ;
+    double one [2] = {1,0}, zero [2] = {0,0} ;
+    Entry range = (Entry) 1.0 ;
+    Long k ;
+
+    Long m = H->nrow ;
+    Q = create_Q <Entry> (H, HTau, HPinv, cc) ;     // construct Q from H
+
+    QT = cholmod_l_transpose (Q, 2, cc) ;           // QT = Q'
+
+    // compare Q with qmult for sparse and dense X
+    for (Long nx = 0 ; nx < 5 ; nx++)                // # of columns of X
+    {
+        Long xsize = m * nx ;                        // size of X
+        for (Long nz = 1 ; nz <= xsize+1 ; nz *= 16) // # of nonzeros in X
+        {
+
+            // -----------------------------------------------------------------
+            // create X as m-by-nx, both sparse and dense
+            // -----------------------------------------------------------------
+
+            Xdense = cholmod_l_zeros (m, nx, xtype, cc) ;
+            X = (Entry *) Xdense->x ;
+            for (k = 0 ; k < nz ; k++)
+            {
+                X [nrand (xsize)] += erand (range) ;
+            }
+            Xsparse = cholmod_l_dense_to_sparse (Xdense, TRUE, cc) ;
+
+            // -----------------------------------------------------------------
+            // Y = Q'*X for method 0, Y = Q*X for method 1
+            // -----------------------------------------------------------------
+
+            for (int method = 0 ; method <= 1 ; method++)
+            {
+                // Y = Q'*X or Q*X
+                Ydense = SPQR_qmult <Entry> (method, H, HTau, HPinv, Xdense, cc,
+                    m < 300, nrand (2)) ;
+                Y = (Entry *) Ydense->x ;
+
+                Zdense = cholmod_l_zeros (m, nx, xtype, cc) ;
+                cholmod_l_sdmult (Q, (method == 0), one, zero,
+                    Xdense, Zdense, cc) ;
+                Z = (Entry *) Zdense->x ;
+
+                for (err = 0, k = 0 ; k < xsize ; k++)
+                {
+                    double e1 = spqr_abs (Y [k] - Z [k], cc) ;
+                    e1 = CHECK_NAN (e1) ;
+                    err = MAX (err, e1) ;
+                }
+                maxerr = MAX (maxerr, err) ;
+
+                // S = Q'*Xsparse or Q*Xsparse
+                Ssparse = SPQR_qmult <Entry> (
+                    method, H, HTau, HPinv, Xsparse, cc, m < 300, nrand (2)) ;
+                Sdense = cholmod_l_sparse_to_dense (Ssparse, cc) ;
+                S = (Entry *) Sdense->x ;
+
+                for (err = 0, k = 0 ; k < xsize ; k++)
+                {
+                    double e1 = spqr_abs (S [k] - Y [k], cc) ;
+                    e1 = CHECK_NAN (e1) ;
+                    err = MAX (err, e1) ;
+                }
+                maxerr = MAX (maxerr, err) ;
+
+                cholmod_l_free_dense (&Ydense, cc) ;
+                cholmod_l_free_dense (&Zdense, cc) ;
+                cholmod_l_free_sparse (&Ssparse, cc) ;
+                cholmod_l_free_dense (&Sdense, cc) ;
+            }
+
+            cholmod_l_free_dense (&Xdense, cc) ;
+            cholmod_l_free_sparse (&Xsparse, cc) ;
+
+            // -----------------------------------------------------------------
+            // create X as nx-by-m, both sparse and dense
+            // -----------------------------------------------------------------
+
+            Xdense = cholmod_l_zeros (nx, m, xtype, cc) ;
+            X = (Entry *) Xdense->x ;
+            for (k = 0 ; k < nz ; k++)
+            {
+                X [nrand (xsize)] += erand (range) ;
+            }
+            Xsparse = cholmod_l_dense_to_sparse (Xdense, TRUE, cc) ;
+
+            // -----------------------------------------------------------------
+            // Y = X*Q' for method 2, Y = X*Q for method 3
+            // -----------------------------------------------------------------
+
+            for (int method = 2 ; method <= 3 ; method++)
+            {
+                // Y = X*Q' or X*Q
+                Ydense = SPQR_qmult <Entry> (method, H, HTau, HPinv, Xdense, cc,
+                    m < 300, nrand (2)) ;
+                Y = (Entry *) Ydense->x ;
+
+                if (method == 2)
+                {
+                    // Zsparse = (X*Q')
+                    Zsparse = sparse_multiply <Entry> (Xsparse, QT, cc) ;
+                }
+                else
+                {
+                    // Zsparse = (X*Q)
+                    Zsparse = sparse_multiply <Entry> (Xsparse, Q, cc) ;
+                }
+                Zdense = cholmod_l_sparse_to_dense (Zsparse, cc) ;
+
+                Z = (Entry *) Zdense->x ;
+
+                for (err = 0, k = 0 ; k < xsize ; k++)
+                {
+                    double e1 = spqr_abs (Y [k] - Z [k], cc) ;
+                    e1 = CHECK_NAN (e1) ;
+                    err = MAX (err, e1) ;
+                }
+                maxerr = MAX (maxerr, err) ;
+
+                // S = X*Q' or X*Q
+                Ssparse = SPQR_qmult <Entry> (
+                    method, H, HTau, HPinv, Xsparse, cc, m < 300, nrand (2)) ;
+                Sdense = cholmod_l_sparse_to_dense (Ssparse, cc) ;
+                S = (Entry *) Sdense->x ;
+
+                for (err = 0, k = 0 ; k < xsize ; k++)
+                {
+                    double e1 = spqr_abs (S [k] - Y [k], cc) ;
+                    e1 = CHECK_NAN (e1) ;
+                    err = MAX (err, e1) ;
+                }
+                maxerr = MAX (maxerr, err) ;
+
+                cholmod_l_free_dense (&Ydense, cc) ;
+                cholmod_l_free_dense (&Zdense, cc) ;
+                cholmod_l_free_sparse (&Ssparse, cc) ;
+                cholmod_l_free_sparse (&Zsparse, cc) ;
+                cholmod_l_free_dense (&Sdense, cc) ;
+            }
+
+            cholmod_l_free_dense (&Xdense, cc) ;
+            cholmod_l_free_sparse (&Xsparse, cc) ;
+
+        }
+    }
+    cholmod_l_free_sparse (&Q, cc) ;
+    cholmod_l_free_sparse (&QT, cc) ;
+
+    // -------------------------------------------------------------------------
+    // qmult error conditions
+    // -------------------------------------------------------------------------
+
+    // These should fail; expect 6 error messages in the output
+
+    if (test_errors)
+    {
+        err = 0 ;
+        printf ("The following six errors are expected:\n") ;
+        Xdense = cholmod_l_zeros (m+1, 1, xtype,cc) ;
+        Ydense = SuiteSparseQR_qmult <Entry> (0, H, HTau, HPinv, Xdense, cc) ;
+        if (Ydense != NULL || cc->status != CHOLMOD_INVALID) err++ ;
+        cholmod_l_free_dense (&Xdense, cc) ;
+
+        Xdense = cholmod_l_zeros (1, m+1, xtype,cc) ;
+        Ydense = SuiteSparseQR_qmult <Entry> (2, H, HTau, HPinv, Xdense, cc) ;
+        if (Ydense != NULL || cc->status != CHOLMOD_INVALID) err++ ;
+        Ydense = SuiteSparseQR_qmult <Entry> (42, H, HTau, HPinv, Xdense, cc) ;
+        if (Ydense != NULL || cc->status != CHOLMOD_INVALID) err++ ;
+        cholmod_l_free_dense (&Xdense, cc) ;
+
+        Xsparse = cholmod_l_speye (m+1, m+1, xtype, cc) ;
+
+        Q = SuiteSparseQR_qmult <Entry> (0, H, HTau, HPinv, Xsparse, cc);
+        if (Q != NULL || cc->status != CHOLMOD_INVALID) err++ ;
+        Q = SuiteSparseQR_qmult <Entry> (2, H, HTau, HPinv, Xsparse, cc);
+        if (Q != NULL || cc->status != CHOLMOD_INVALID) err++ ;
+        Q = SuiteSparseQR_qmult <Entry> (9, H, HTau, HPinv, Xsparse, cc);
+        if (Q != NULL || cc->status != CHOLMOD_INVALID) err++ ;
+
+        printf (" ... error handling done\n\n") ;
+        cholmod_l_free_sparse (&Xsparse, cc) ;
+
+        maxerr = MAX (maxerr, err) ;
+    }
+
+    return (CHECK_NAN (maxerr)) ;
+}
+
+
+// =============================================================================
+// === check_rc ================================================================
+// =============================================================================
+
+// X = Q'*B has been done, continue with C=R\C and 
+
+template <typename Entry> double check_rc
+(
+    Long rank,
+    cholmod_sparse *R,
+    cholmod_sparse *A,
+    Entry *B,
+    cholmod_dense *X,
+    Long nrhs,
+    double anorm,
+    Long *Qfill,
+    cholmod_common *cc
+)
+{
+    double resid = EMPTY ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    cholmod_dense *W ;
+    Long n, ok ;
+    Entry *W1, *X1 ;
+    if (!R || !X)
+    {
+        ok = 0 ;
+    }
+    else
+    {
+        n = X->nrow ;
+        X1 = (Entry *) X->x ;
+        // solve X = R\X, overwriting X with solution
+        ok = Rsolve (rank, R, X1, nrhs, cc) ;
+    }
+    if (ok)
+    {
+        // W = E*X
+        // W = (Entry *) cholmod_l_calloc (A->ncol * nrhs, sizeof (Entry), cc) ;
+        W = cholmod_l_zeros (A->ncol, nrhs, xtype, cc) ;
+        W1 = (Entry *) W->x ;
+        for (Long col = 0 ; col < nrhs ; col++)
+        {
+            for (Long k = 0 ; k < rank ; k++)
+            {
+                Long j = Qfill ? Qfill [k] : k ;
+                if (j < (Long) A->ncol) W1 [j] = X1 [k] ;
+            }
+            W1 += A->ncol ;
+            X1 += n ;
+        }
+        // check norm (A*x-b), x and b dense
+        resid = dense_resid (A, anorm, W, nrhs, B, cc) ;
+        // cholmod_l_free (A->ncol * nrhs, sizeof (Entry), W, cc) ;
+        cholmod_l_free_dense (&W, cc) ;
+    }
+    return (CHECK_NAN (resid)) ;
+}
+
+
+// =============================================================================
+// === transpose ===============================================================
+// =============================================================================
+
+// Transpose a dense matrix.
+
+template <typename Entry> cholmod_dense *transpose
+(
+    cholmod_dense *Xdense,
+    cholmod_common *cc
+)
+{
+    Entry *X, *Y ;
+    cholmod_dense *Ydense ;
+    if (Xdense == NULL)
+    {
+        printf ("transpose failed!\n") ;
+        return (NULL) ;
+    }
+    Long m = Xdense->nrow ;
+    Long n = Xdense->ncol ;
+    Long ldx = Xdense->d ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    Ydense = cholmod_l_allocate_dense (n, m, n, xtype, cc) ;
+    X = (Entry *) Xdense->x ;
+    Y = (Entry *) Ydense->x ;
+    for (Long i = 0 ; i < m ; i++)
+    {
+        for (Long j = 0 ; j < n ; j++)
+        {
+            Y [j+i*n] = spqr_conj (X [i+j*ldx]) ;
+        }
+    }
+    return (Ydense) ;
+}
+
+// =============================================================================
+// === qrtest ==================================================================
+// =============================================================================
+
+template <typename Entry> void qrtest
+(
+    cholmod_sparse *A,
+    double errs [5],
+    cholmod_common *cc
+)
+{
+    cholmod_sparse *H, *I, *R, *Q, *Csparse, *Xsparse, *AT, *Bsparse ;
+    cholmod_dense *Cdense, *Xdense, *Bdense, *HTau ; ;
+    double tol = DBL_EPSILON, err, resid, maxerr, maxresid [2][2] ;
+    double tols [ ] = { SPQR_DEFAULT_TOL, -1, 0, DBL_EPSILON } ;
+    Long n, m, nz, *HPinv, ntol, *Ai, *Ap, k, *Qfill, rank, nb, *Cp, *Ci, econ,
+        which ;
+    Entry *B, *Ax, *Cx ;
+    Long xtype = spqr_type <Entry> ( ) ;
+    int ordering ;
+    Entry range = (Entry) 1.0 ;
+
+    errs [0] = EMPTY ;
+    errs [1] = EMPTY ;
+    errs [2] = EMPTY ;
+    errs [3] = EMPTY ;
+    errs [4] = EMPTY ;
+    if (A == NULL)
+    {
+        fprintf (stderr, "qrtest: no input matrix\n") ;
+        return ;
+    }
+
+    m = A->nrow ;
+    n = A->ncol ;
+    Ap = (Long *) A->p ;
+    Ai = (Long *) A->i ;
+    Ax = (Entry *) A->x ;
+    double anorm = cholmod_l_norm_sparse (A, 1, cc) ;
+    anorm = CHECK_NAN (anorm) ;
+    printf ("\n===========================================================\n") ;
+    printf ("Matrix: %ld by %ld, nnz(A) = %ld, norm(A,1) = %g\n",
+        m, n, cholmod_l_nnz (A, cc), anorm) ;
+    printf (  "===========================================================\n") ;
+
+    if (anorm == 0) anorm = 1 ;
+
+    // these should all be zero, no matter what the matrix
+    maxerr = 0 ;
+
+    // residuals for well-determined or under-determined systems.  If
+    // not rank deficient, these should be zero
+    maxresid [0][0] = 0 ;      // for m <= n, default tol, ordering not fixed
+    maxresid [0][1] = 0 ;      // for m <= n, all other cases
+
+    // residuals for least-squares systems (these will not be zero)
+    maxresid [1][0] = 0 ;      // for m > n, default tol, ordering not fixed
+    maxresid [1][1] = 0 ;      // for m > n, all other cases
+
+    my_srand (m+n) ;
+
+    if (m > 45000)
+    {
+        // The only thing returned are the statistics (rank, etc)
+        printf ("\n=== QR huge (expect int overflow):\n") ;
+        rank = SPQR_qr <Entry> (
+            0, 0, 0, 0, A,
+            NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+            cc, FALSE, FALSE, FALSE) ;
+        return ;
+    }
+
+    if (MAX (m,n) >= 300) fprintf (stderr, "please wait ... ") ;
+
+    AT = cholmod_l_transpose (A, 2, cc) ;
+
+    // -------------------------------------------------------------------------
+    // test QR routines
+    // -------------------------------------------------------------------------
+
+    econ = m ;
+
+    for (ordering = 0 ; ordering <= 9 ; ordering++)
+    {
+
+        // skip SPQR_ORDERING_GIVEN, unless the matrix is tiny
+        if (ordering == SPQR_ORDERING_GIVEN && MAX (m,n) > 10) continue ;
+
+        for (ntol = 0 ; ntol < NTOL ; ntol++)
+        {
+
+            tol = tols [ntol] ;
+            if // (ntol == 0)                   // this old test is fragile ...
+               (tol == SPQR_DEFAULT_TOL)        // use this instead
+            {
+                // with default tolerance, the fixed ordering can sometimes
+                // fail if the matrix is rank deficient (R cannot be permuted
+                // to upper trapezoidal form).
+                which = (ordering == 0) ;
+            }
+            else
+            {
+                // with non-default tolerance, the solution can sometimes be
+                // poor; this is expected.
+                which = 1 ;
+            }
+            printf ("\n=== QR with ordering %d tol %g:\n", ordering, tol) ;
+
+            // -----------------------------------------------------------------
+            // create dense and sparse right-hand-sides
+            // -----------------------------------------------------------------
+
+            nb = 5 ;
+            Bdense = cholmod_l_zeros (m, nb, xtype, cc) ;
+            B = (Entry *) Bdense->x ;
+            for (k = 0 ; k < m*nb ; k++)
+            {
+                B [k] = ((double) (my_rand ( ) % 2)) * erand (range) ;
+            }
+            Bsparse = cholmod_l_dense_to_sparse (Bdense, TRUE, cc) ;
+
+            // -----------------------------------------------------------------
+            // X = qrsolve(A,B) where X and B are dense
+            // -----------------------------------------------------------------
+
+            // X = A\B
+            if (ordering == SPQR_ORDERING_DEFAULT && tol == SPQR_DEFAULT_TOL)
+            {
+                printf ("[ backslach, A and B and X dense: defaults\n") ;
+                Xdense = SuiteSparseQR <Entry> (A, Bdense, cc) ;
+                printf ("] done backslach, A and B and X dense: defaults\n") ;
+            }
+            else
+            {
+                printf ("[ backslach, A and B and X dense: tol %g order %d\n",
+                    tol, ordering) ;
+                Xdense = SuiteSparseQR <Entry> (ordering, tol, A, Bdense, cc) ;
+                printf ("] done backslach, A B X dense: tol %g order %d\n",
+                    tol, ordering) ;
+            }
+
+            // check norm (A*x-b), x and b dense
+            resid = dense_resid (A, anorm, Xdense, nb, B, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid0b %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_dense  (&Xdense, cc) ;
+
+            if (cc->useGPU)
+            {
+                // error testing for infeasible GPU memory
+                Long save = cc->gpuMemorySize ;
+                cc->gpuMemorySize = 1 ;
+                printf ("[ Pretend GPU memory is too small:\n") ;
+                Xdense = SuiteSparseQR <Entry> (ordering, tol, A, Bdense, cc) ;
+                cc->gpuMemorySize = save ;
+                printf ("] test done infeasible GPU, status %2d, useGPU: %d\n",
+                    cc->status, cc->useGPU) ;
+                cholmod_l_free_dense (&Xdense, cc) ;
+            }
+
+            cholmod_l_free_dense  (&Bdense, cc) ;
+
+            // -----------------------------------------------------------------
+            // X = qrsolve(A,B) where X and B are sparse
+            // -----------------------------------------------------------------
+
+            // X = A\B
+            printf ("[ backslash with sparse B: tol  %g\n", tol) ;
+            Xsparse = SuiteSparseQR <Entry> (ordering, tol, A, Bsparse, cc) ;
+            printf ("] did tol %g\n", tol) ;
+
+            // check norm (A*x-b), x and b sparse
+            resid = sparse_resid <Entry> (A, anorm, Xsparse, Bsparse, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid0 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_sparse (&Xsparse, cc) ;
+            cholmod_l_free_sparse (&Bsparse, cc) ;
+            
+            // -----------------------------------------------------------------
+            // X = qrsolve (A,B) where X and B are sparse, with memory test
+            // -----------------------------------------------------------------
+
+            // use B = A and solve AX=B where X is sparse
+            cc->SPQR_shrink = 0 ;         // shrink = 0 ;
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 2, A,
+                A, NULL, &Xsparse, NULL, NULL, &Qfill, NULL, NULL, NULL,
+                cc, TRUE, m < 300, nrand (2)) ;
+            cc->SPQR_shrink = 1 ;         // restore default shrink = 1 ;
+
+            if // (ntol == 0)               // old test is fragile ...
+               (tol == SPQR_DEFAULT_TOL)    // use this instead.
+            {
+                printf ("using default tol: %g\n", cc->SPQR_tol_used) ;
+            }
+
+            // check norm (A*x-b), x and b sparse
+            resid = sparse_resid <Entry> (A, anorm, Xsparse, A, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid1 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_sparse (&Xsparse, cc) ;
+            cholmod_l_free (n+n, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // X = qrsolve (A,B) where X and B are dense, with memory test
+            // -----------------------------------------------------------------
+
+            // use B = dense m-by-2 matrix with some zeros
+            nb = 5 ;
+            Bdense = cholmod_l_zeros (m, nb, xtype, cc) ;
+            B = (Entry *) Bdense->x ;
+            for (k = 0 ; k < m*nb ; k++)
+            {
+                B [k] = (k+1) % 7 ;
+            }
+
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 2, A,
+                NULL, Bdense, NULL, &Xdense, NULL, &Qfill, NULL, NULL, NULL,
+                cc, FALSE, m < 300, nrand (2)) ;
+
+            // check norm (A*x-b), x and b dense
+            resid = dense_resid (A, anorm, Xdense, nb, B, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid2 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_dense (&Xdense, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // X = qrsolve (A,B) where X and B are full and H is kept
+            // -----------------------------------------------------------------
+
+            cc->SPQR_shrink = 2 ;         // shrink = 2 ;
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 2, A,
+                NULL, Bdense, NULL, &Xdense, NULL, &Qfill, &H, &HPinv, &HTau,
+                cc, FALSE, m < 300, nrand (2)) ;
+            cc->SPQR_shrink = 1 ;         // restore default shrink = 1 ;
+
+            cholmod_l_free_dense (&HTau, cc) ;
+            cholmod_l_free (m, sizeof (Long), HPinv, cc) ;
+            cholmod_l_free_sparse (&H, cc) ;
+
+            // check norm (A*x-b), x and b dense
+            resid = dense_resid (A, anorm, Xdense, nb, B, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid3 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_dense (&Xdense, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [C,R,E] = qr (A,B) where C is sparse and B is full
+            // -----------------------------------------------------------------
+
+            cc->SPQR_shrink = 2 ;         // shrink = 2 ;
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 0, A,
+                NULL, Bdense, &Csparse, NULL, &R, &Qfill, NULL, NULL, NULL,
+                cc, FALSE, m < 300, nrand (2)) ;
+            cc->SPQR_shrink = 1 ;         // restore default shrink = 1 ;
+
+            // compute x=R\C and check norm (A*x-b)
+            Cdense = cholmod_l_sparse_to_dense (Csparse, cc) ;
+            resid = check_rc (rank, R, A, B, Cdense, nb, anorm, Qfill, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid4 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+            cholmod_l_free_dense (&Cdense, cc) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err1:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_sparse (&Csparse, cc) ;
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [C,R,E] = qr (A,B) where C and B are full
+            // -----------------------------------------------------------------
+
+            cc->SPQR_shrink = 0 ;         // shrink = 0 ;
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 0, A,
+                NULL, Bdense, NULL, &Cdense, &R, &Qfill, NULL, NULL, NULL,
+                cc, FALSE, m < 300, nrand (2)) ;
+            cc->SPQR_shrink = 1 ;         // restore default shrink = 1 ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err2:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_dense (&Cdense, cc) ;
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [C,R,E] = qr (A,B) where C and B are full, simple wrapper
+            // -----------------------------------------------------------------
+
+            SuiteSparseQR <Entry> (ordering, tol, econ, A, Bdense,
+                &Cdense, &R, &Qfill, cc) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err3:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_dense (&Cdense, cc) ;
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [C,R,E] = qr (A,B) where C and B are sparse, simple wrapper
+            // -----------------------------------------------------------------
+            
+            Bsparse = cholmod_l_dense_to_sparse (Bdense, TRUE, cc) ;
+
+            SuiteSparseQR <Entry> (ordering, tol, econ, A, Bsparse,
+                &Csparse, &R, &Qfill, cc) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err4:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_sparse (&Csparse, cc) ;
+            cholmod_l_free_sparse (&Bsparse, cc) ;
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [CT,R,E] = qr (A,B), but do not return R
+            // -----------------------------------------------------------------
+
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 1, A,
+                NULL, Bdense, &Csparse, NULL, NULL, &Qfill, NULL, NULL, NULL,
+                cc, FALSE, m < 300, nrand (2)) ;
+
+            cholmod_l_free_sparse (&Csparse, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [Q,R,E] = qr (A), Q in Householder form
+            // -----------------------------------------------------------------
+
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, -1, A,
+                NULL, NULL, NULL, NULL, &R, &Qfill, &H, &HPinv, &HTau,
+                cc, FALSE, m < 300, nrand (2)) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err5:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            // solve Ax=b using Householder form
+            resid = QRsolve <Entry> (A, anorm, rank, 0, H, HTau, HPinv, R,
+                Qfill, Bdense, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid5 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            // solve Ax=b using Q matrix form
+            resid = QRsolve <Entry> (A, anorm, rank, 1, H, HTau, HPinv, R,
+                Qfill, Bdense, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid6 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_dense (&HTau, cc) ;
+            cholmod_l_free_sparse (&H, cc) ;
+            cholmod_l_free (m, sizeof (Long), HPinv, cc) ;
+            cholmod_l_free (n, sizeof (Long), Qfill, cc) ;
+            cholmod_l_free_sparse (&R, cc) ;
+
+            // -----------------------------------------------------------------
+            // [Q,R,E] = qr (A), non-economy
+            // -----------------------------------------------------------------
+
+            cc->SPQR_shrink = 0 ;         // shrink = 0 ;
+            I = cholmod_l_speye (m, m, xtype, cc) ;
+            rank = SPQR_qr <Entry> (
+                ordering, tol, m, 1, A,
+                I, NULL, &Q, NULL, &R, &Qfill, NULL, NULL, NULL,
+                cc, FALSE, m<300, nrand (2)) ;
+            cc->SPQR_shrink = 1 ;         // restore default shrink = 1 ;
+
+            // ensure norm (Q*R - A*E) is small
+            err = check_qr <Entry> (Q, R, A, Qfill, anorm, cc) ;
+            printf ("order %d : Q*R-A*E           Err6:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_sparse (&I, cc) ;
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free_sparse (&Q, cc) ;
+            cholmod_l_free (n+m, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [Q,R,E] = qr (A), non-economy, using simple wrapper
+            // -----------------------------------------------------------------
+
+            if (nrand (2))
+            {
+                // use C version
+                SuiteSparseQR_C_QR (ordering, tol, m, A, &Q, &R, &Qfill, cc) ;
+            }
+            else
+            {
+                // use C++ version
+                SuiteSparseQR <Entry> (ordering, tol, m, A, &Q, &R, &Qfill, cc);
+            }
+
+            // ensure norm (Q*R - A*E) is small
+            err = check_qr <Entry> (Q, R, A, Qfill, anorm, cc) ;
+            printf ("order %d : Q*R-A*E           Err7:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free_sparse (&Q, cc) ;
+            cholmod_l_free (n+m, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [R,E] = qr (A)
+            // -----------------------------------------------------------------
+
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 0, A,
+                NULL, NULL, NULL, NULL, &R, &Qfill, NULL, NULL, NULL,
+                cc, FALSE, m < 300, nrand (2)) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err8:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+            Long rank1 = rank ;
+
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free (n, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [R,E] = qr (A) using simple wrapper
+            // -----------------------------------------------------------------
+
+            SuiteSparseQR <Entry> (ordering, tol, econ, A, &R, &Qfill, cc) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err9:  %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free (n, sizeof (Long), Qfill, cc) ;
+
+            // -----------------------------------------------------------------
+            // [ ] = qr (A)
+            // -----------------------------------------------------------------
+
+            // The only thing returned are the statistics (rank, etc)
+            cc->SPQR_shrink = 0 ;         // shrink = 0 ;
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 0, A,
+                NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                cc, FALSE, m < 300, nrand (2)) ;
+            cc->SPQR_shrink = 1 ;         // restore default shrink = 1 ;
+
+            err = (rank != rank1) ;
+            printf ("order %d : rank %6ld %6ld Err10: %g\n", ordering,
+                rank, rank1, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            // -----------------------------------------------------------------
+            // [C,H,R,E] = qr (A)
+            // -----------------------------------------------------------------
+
+            rank = SPQR_qr <Entry> (
+                ordering, tol, econ, 0, A,
+                NULL, Bdense, &Csparse, NULL, &R, &Qfill, &H, &HPinv, &HTau,
+                cc, FALSE, m < 300, nrand (2)) ;
+
+            // compute x=R\C and check norm (A*x-b)
+            Cdense = cholmod_l_sparse_to_dense (Csparse, cc) ;
+            resid = check_rc (rank, R, A, B, Cdense, nb, anorm, Qfill, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("Resid7 %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+            cholmod_l_free_dense (&Cdense, cc) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err11: %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_sparse (&Csparse, cc) ;
+            cholmod_l_free_sparse (&R, cc) ;
+
+            // compare Q with qmult
+            err = check_qmult <Entry> (H, HTau, HPinv,
+                ordering == 2 && /* ntol == 0 */ tol == SPQR_DEFAULT_TOL, cc) ;
+            printf ("order %d : check qmult       Err12: %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_dense (&HTau, cc) ;
+            cholmod_l_free_sparse (&H, cc) ;
+            cholmod_l_free (m, sizeof (Long), HPinv, cc) ;
+            cholmod_l_free (n+nb, sizeof (Long), Qfill, cc) ;
+            cholmod_l_free_dense (&Bdense, cc) ;
+
+            // -----------------------------------------------------------------
+            // [H,R,E] = qr (A), simple wrapper
+            // -----------------------------------------------------------------
+
+            SuiteSparseQR <Entry> (ordering, tol, econ, A,
+                &R, &Qfill, &H, &HPinv, &HTau, cc) ;
+
+            // check that R'*R = (A*E)'*(A*E)
+            err = check_r_factor <Entry> (R, A, Qfill, cc) ;
+            printf ("order %d : R'R-(A*E)'*(A*E), Err13: %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            // compare Q with qmult
+            err = check_qmult <Entry> (H, HTau, HPinv, FALSE, cc) ;
+            printf ("order %d : check qmult       Err14: %g\n", ordering, err) ;
+            maxerr = MAX (maxerr, err) ;
+
+            cholmod_l_free_sparse (&R, cc) ;
+            cholmod_l_free_dense (&HTau, cc) ;
+            cholmod_l_free_sparse (&H, cc) ;
+            cholmod_l_free (m, sizeof (Long), HPinv, cc) ;
+            cholmod_l_free (n, sizeof (Long), Qfill, cc) ;
+
+#ifndef NEXPERT
+
+            // =================================================================
+            // === expert routines =============================================
+            // =================================================================
+
+            SuiteSparseQR_factorization <Entry> *QR ;
+            cholmod_dense *XT, *Zdense, *BT, *Ydense ;
+            cholmod_sparse *Ysparse ;
+
+            // -----------------------------------------------------------------
+            // QR = qr (A), then solve
+            // -----------------------------------------------------------------
+
+            for (int split = 0 ; split <= 4 ; split++)
+            {
+
+                QR = SPQR_factorize <Entry> (ordering, tol, A, cc,
+                    split, m < 300, nrand (2)) ;
+
+                // split == 4 does not use singletons, so it can fail if
+                // rank < n
+                int wh = which || (split == 4) ;
+
+                // solve Ax=b
+                nb = 5 ;
+                Bdense = cholmod_l_zeros (m, nb, xtype, cc) ;
+                B = (Entry *) Bdense->x ;
+                for (k = 0 ; k < m*nb ; k++)
+                {
+                    B [k] = erand (range) ;
+                }
+
+                // Y = Q'*B
+                Ydense = SPQR_qmult (SPQR_QTX, QR, Bdense, cc,
+                        m < 300, nrand (2)) ;
+
+                // X = R\(E*Y)
+                Xdense = SPQR_solve (SPQR_RETX_EQUALS_B, QR, Ydense, cc,
+                        m < 300, nrand (2)) ;
+                // check norm (A*x-b), x and b dense
+                resid = dense_resid (A, anorm, Xdense, nb, B, cc) ;
+                maxresid [m>n][wh] = MAX (maxresid [m>n][wh], resid) ;
+                printf ("Resid8_%d %d %ld %d : %g (%d) tol %g\n",
+                    split, m>n, ntol, ordering, resid, wh, tol) ;
+                cholmod_l_free_dense (&Xdense, cc) ;
+                cholmod_l_free_dense (&Ydense, cc) ;
+
+                // Y = (B'*Q)'
+                BT = transpose <Entry> (Bdense, cc) ;
+                XT = SPQR_qmult (SPQR_XQ, QR, BT, cc,
+                        m < 300, nrand (2)) ;
+
+                Ydense = transpose <Entry> (XT, cc) ;
+                cholmod_l_free_dense (&XT, cc) ;
+                cholmod_l_free_dense (&BT, cc) ;
+
+                // X = R\(E*Y)
+                Xdense = SPQR_solve (SPQR_RETX_EQUALS_B, QR, Ydense, cc,
+                        m < 300, nrand (2)) ;
+                // check norm (A*x-b), x and b dense
+                resid = dense_resid (A, anorm, Xdense, nb, B, cc) ;
+                maxresid [m>n][wh] = MAX (maxresid [m>n][wh], resid) ;
+                printf ("Resid9_%d %d %ld %d : %g (%d) tol %g\n",
+                    split, m>n, ntol, ordering, resid, wh, tol) ;
+                cholmod_l_free_dense (&Xdense, cc) ;
+                cholmod_l_free_dense (&Ydense, cc) ;
+
+                // -------------------------------------------------------------
+                // error testing
+                // -------------------------------------------------------------
+
+                if (ordering == 0 && /* ntol == 0 */ tol == SPQR_DEFAULT_TOL)
+                {
+                    printf ("Error handling ... expect 3 error messages: \n") ;
+                    err = (SuiteSparseQR_qmult <Entry> (-1, QR, Bdense, cc)
+                        != NULL) ;
+                    cholmod_l_free_dense (&Bdense, cc) ;
+                    Bdense = cholmod_l_zeros (m+1, 1, xtype, cc) ;
+                    err += (SuiteSparseQR_qmult <Entry> (SPQR_QX,QR,Bdense,cc)
+                        != NULL);
+                    cholmod_l_free_dense (&Bdense, cc) ;
+                    Bdense = cholmod_l_zeros (1, m+1, xtype, cc) ;
+                    err += (SuiteSparseQR_qmult <Entry> (SPQR_XQ,QR,Bdense,cc)
+                        != NULL);
+                    if (QR->n1cols > 0)
+                    {
+                        // this will fail; cannot refactorize with singletons
+                        printf ("Error handling ... expect error message:\n") ;
+                        err += (SuiteSparseQR_numeric <Entry> (tol, A, QR, cc) 
+                            != FALSE) ;
+                    }
+                    printf ("order %d : error handling    Err15: %g\n",
+                        ordering, err) ;
+                    maxerr = MAX (maxerr, err) ;
+                    printf (" ... error handling done\n\n") ;
+                }
+
+                cholmod_l_free_dense (&Bdense, cc) ;
+
+                // -------------------------------------------------------------
+
+                // solve A'x=b
+                nb = 5 ;
+                Bdense = cholmod_l_zeros (n, nb, xtype, cc) ;
+                B = (Entry *) Bdense->x ;
+                for (k = 0 ; k < n*nb ; k++)
+                {
+                    B [k] = erand (range) ;
+                }
+                // Y = R'\(E'*B)
+                Ydense = SPQR_solve (SPQR_RTX_EQUALS_ETB, QR, Bdense, cc,
+                        m < 300, nrand (2)) ;
+                // X = Q*Y
+                Xdense = SPQR_qmult (SPQR_QX, QR, Ydense, cc,
+                        m < 300, nrand (2)) ;
+                // check norm (A'*x-b), x and b dense
+                resid = dense_resid (AT, anorm, Xdense, nb, B, cc) ;
+                maxresid [m<n][wh] = MAX (maxresid [m<n][wh], resid) ;
+                printf ("ResidA_%d %d %ld %d : %g (%d) tol %g\n",
+                    split, m<n, ntol, ordering, resid, wh, tol) ;
+                cholmod_l_free_dense (&Xdense, cc) ;
+                cholmod_l_free_dense (&Ydense, cc) ;
+
+                // -------------------------------------------------------------
+                // error testing
+                // -------------------------------------------------------------
+
+                if (!split && ordering == 0 && /* ntol == 0 */
+                    tol == SPQR_DEFAULT_TOL)
+                {
+                    printf ("Error testing ... expect 3 error messages:\n") ;
+                    err = (SuiteSparseQR_solve <Entry> (-1, QR, Bdense, cc)
+                        != NULL) ;
+                    cholmod_l_free_dense (&Bdense, cc) ;
+                    err += (SuiteSparseQR_solve <Entry> (SPQR_RTX_EQUALS_ETB,
+                        QR, Bdense, cc) != NULL) ;
+                    Bdense = cholmod_l_zeros (n+1, 1, xtype, cc) ;
+                    err += (SuiteSparseQR_solve (SPQR_RTX_EQUALS_ETB,
+                        QR, Bdense, cc) != NULL) ;
+                    printf ("order %d : error handling    Err16: %g\n",
+                        ordering, err) ;
+                    maxerr = MAX (maxerr, err) ;
+                    printf (" ... error handling done\n\n") ;
+                }
+
+                SuiteSparseQR_free (&QR, cc) ;
+                cholmod_l_free_dense (&Bdense, cc) ;
+            }
+
+            // -----------------------------------------------------------------
+            // QR = qr (A'), then solve
+            // -----------------------------------------------------------------
+
+            // use qmult to solve min-2-norm problem
+            QR = SuiteSparseQR_factorize <Entry> (ordering, tol, AT, cc) ;
+
+            nb = 5 ;
+            Bdense = cholmod_l_zeros (m, nb, xtype, cc) ;
+            B = (Entry *) Bdense->x ;
+            for (k = 0 ; k < m*nb ; k++)
+            {
+                B [k] = erand (range) ;
+            }
+
+            // solve X = R'\B
+            Xdense = SPQR_solve (SPQR_RTX_EQUALS_B, QR, Bdense, cc,
+                    m < 300, nrand (2)) ;
+            cholmod_l_free_dense (&Xdense, cc) ;
+
+            // solve X = R'\(E'*B)
+            Xdense = SPQR_solve (SPQR_RTX_EQUALS_ETB, QR, Bdense, cc,
+                    m < 300, nrand (2)) ;
+
+            // Y = Q*X
+            Ydense = SPQR_qmult (SPQR_QX, QR, Xdense, cc,
+                    m < 300, nrand (2)) ;
+
+            // check norm (A*y-b), y and b dense
+            resid = dense_resid (A, anorm, Ydense, nb, B, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("ResidB %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+            cholmod_l_free_dense (&Ydense, cc) ;
+
+            // Y = (X'*Q')'
+            XT = transpose <Entry> (Xdense, cc) ;
+            Zdense = SPQR_qmult (SPQR_XQT, QR, XT, cc,
+                    m < 300, nrand (2)) ;
+            Ydense = transpose <Entry> (Zdense, cc) ;
+            cholmod_l_free_dense (&XT, cc) ;
+            cholmod_l_free_dense (&Zdense, cc) ;
+
+            // check norm (A*y-b), y and b dense
+            resid = dense_resid (A, anorm, Ydense, nb, B, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("ResidC %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+            cholmod_l_free_dense (&Ydense, cc) ;
+            cholmod_l_free_dense (&Xdense, cc) ;
+
+            // -----------------------------------------------------------------
+            // min 2-norm solution using min2norm
+            // -----------------------------------------------------------------
+
+            Xdense = SPQR_min2norm <Entry> (ordering, tol, A, Bdense, cc,
+                    m < 300, nrand (2)) ;
+
+            // check norm (A*x-b), y and b dense
+            resid = dense_resid (A, anorm, Xdense, nb, B, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("ResidD %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+            cholmod_l_free_dense (&Xdense, cc) ;
+
+            cholmod_l_free_dense (&Bdense, cc) ;
+
+            // -----------------------------------------------------------------
+            // sparse case
+            // -----------------------------------------------------------------
+
+            nb = 5 ;
+            Bdense = cholmod_l_zeros (m, nb, xtype, cc) ;
+            B = (Entry *) Bdense->x ;
+            for (k = 0 ; k < m*nb ; k++)
+            {
+                B [k] = ((double) (my_rand ( ) % 2)) * erand (range) ;
+            }
+            Bsparse = cholmod_l_dense_to_sparse (Bdense, TRUE, cc) ;
+            cholmod_l_free_dense  (&Bdense, cc) ;
+
+            // solve X = R'\(E'*B)
+            Xsparse = NULL ;
+            Xsparse = SPQR_solve (SPQR_RTX_EQUALS_ETB, QR, Bsparse, cc,
+                    m < 300, nrand (2)) ;
+
+            // Y = Q*X
+            Ysparse = NULL ;
+            Ysparse = SPQR_qmult (SPQR_QX, QR, Xsparse, cc,
+                    m < 300, nrand (2)) ;
+
+            // check norm (A*y-b), y and b sparse
+            resid = sparse_resid <Entry> (A, anorm, Ysparse, Bsparse, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("ResidE %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_sparse (&Xsparse, cc) ;
+            cholmod_l_free_sparse (&Ysparse, cc) ;
+
+            Xsparse = SPQR_min2norm <Entry> (ordering, tol, A, Bsparse, cc,
+                    m < 300, nrand (2)) ;
+
+            // check norm (A*x-b), x and b sparse
+            resid = sparse_resid <Entry> (A, anorm, Xsparse, Bsparse, cc) ;
+            maxresid [m>n][which] = MAX (maxresid [m>n][which], resid) ;
+            printf ("ResidF %d %ld %d : %g\n", m>n, ntol, ordering, resid) ;
+
+            cholmod_l_free_sparse (&Xsparse, cc) ;
+            cholmod_l_free_sparse (&Bsparse, cc) ;
+
+            SuiteSparseQR_free (&QR, cc) ;
+#endif
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // check error handling
+    // -------------------------------------------------------------------------
+
+    printf ("Check error handling, one error message is expected:\n") ;
+    cholmod_dense *Bgunk = cholmod_l_ones (m+1, 1, xtype, cc) ;
+    rank = SuiteSparseQR <Entry> (
+        0, 0, econ, -1, A,
+        NULL, Bgunk, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+        cc) ;
+    cholmod_l_free_dense (&Bgunk, cc) ;
+    err = (rank != EMPTY) ;
+    maxerr = MAX (maxerr, err) ;     // rank should be EMPTY
+    printf (" ... error handling done\n\n") ;
+
+    // -------------------------------------------------------------------------
+    // test non-user callable functions
+    // -------------------------------------------------------------------------
+
+    // attempt to permute A to upper triangular form
+    Long *Qtrap ;
+    rank = spqr_trapezoidal (n, Ap, Ai, Ax, 0, NULL, FALSE, &Cp, &Ci, &Cx,
+        &Qtrap, cc) ;
+    printf ("Rank of A, if A*P permutable to upper trapezoidal: %ld\n", rank) ;
+    if (Cp != NULL)
+    {
+        nz = Cp [n] ;
+        cholmod_l_free (n+1, sizeof (Long), Cp, cc) ;
+        cholmod_l_free (nz, sizeof (Long), Ci, cc) ;
+        cholmod_l_free (nz, sizeof (Entry), Cx, cc) ;
+        cholmod_l_free (n, sizeof (Long), Qtrap, cc) ;
+    }
+    cholmod_l_free_sparse (&AT, cc) ;
+
+    // -------------------------------------------------------------------------
+    // test the C API
+    // -------------------------------------------------------------------------
+
+    qrtest_C (A, anorm, errs, maxresid, cc) ;
+
+    // -------------------------------------------------------------------------
+    // final results
+    // -------------------------------------------------------------------------
+
+    errs [0] = CHECK_NAN (maxerr) ;
+    errs [1] = CHECK_NAN (maxresid [0][0]) ;
+    errs [2] = CHECK_NAN (maxresid [0][1]) ;
+    errs [3] = CHECK_NAN (maxresid [1][0]) ;
+    errs [4] = CHECK_NAN (maxresid [1][1]) ;
+}
+
+
+// =============================================================================
+// === do_matrix ===============================================================
+// =============================================================================
+
+// Read in a matrix, and use it to test SuiteSparseQR
+// If kind == 0, then the first two residuals should be low.
+
+int do_matrix2 (int kind, cholmod_sparse *A, cholmod_common *cc) ;
+
+int do_matrix (int kind, FILE *file, cholmod_common *cc)
+{
+    cholmod_sparse *A ;
+
+    int nfail0 = 0 ;
+    int nfail1 = 0 ;
+    int nfail2 = 0 ;
+    int nfail3 = 0 ;
+
+    // -------------------------------------------------------------------------
+    // read in the matrix
+    // -------------------------------------------------------------------------
+
+    A = cholmod_l_read_sparse (file, cc) ;
+    if (A == NULL)
+    {
+        fprintf (stderr, "Unable to read matrix\n") ;
+        return (1) ;
+    }
+    Long m = A->nrow ;
+    Long n = A->ncol ;
+    fprintf (stderr, "%5ld by %5ld : ", m, n) ;
+    if (sizeof (Long) > sizeof (int) && (m > 10000 || n > 10000))
+    {
+        fprintf (stderr, "(test skipped on 64-bit systems)\n") ;
+        cholmod_l_free_sparse (&A, cc) ;
+        return (0) ;
+    }
+
+    // defaults
+    cc->SPQR_grain = 1 ;         // no parallel analysis
+    printf ("\nBeginning CPU tests [\n") ;
+    fprintf (stderr, " CPU ") ;
+    nfail0 = do_matrix2 (kind, A, cc) ;
+
+    // non-defaults to test TBB, if installed (will not use the GPU)
+    cc->SPQR_grain = 4 ;         // grain size relative to total work
+    nfail2 = do_matrix2 (kind, A, cc) ;
+    cc->SPQR_grain = 1 ;         // no parallel analysis
+    printf ("\nCPU tests done ]\n") ;
+
+    // test the GPU, if installed
+    #ifdef GPU_BLAS
+    cc->useGPU = TRUE ;
+    // was 3.5 * ((size_t) 1024 * 1024 * 1024) ;
+    size_t totmem, availmem ;
+    double t = SuiteSparse_time ( ) ;
+    cholmod_l_gpu_memorysize (&totmem, &availmem, cc) ;
+    t = SuiteSparse_time ( ) - t ;
+    cc->gpuMemorySize = availmem ;
+    printf ("\nBeginning GPU tests, GPU memory %g MB warmup time %g[\n",
+        (double) (cc->gpuMemorySize) / (1024*1024), t) ;
+    fprintf (stderr, " GPU ") ;
+    nfail1 = do_matrix2 (kind, A, cc) ;
+    printf ("\nGPU tests done ]\n") ;
+    if (m > 200)
+    {
+        // try with a tiny GPU memory size, but only for a few matrices
+        // in the test set.  Each front will go in its own stage.
+        printf ("\nBeginning GPU tests with tiny GPU memory [\n") ;
+        cc->gpuMemorySize = 0 ;
+        nfail3 = do_matrix2 (kind, A, cc) ;
+        // restore defaults
+        cc->useGPU = FALSE ;
+        printf ("\nGPU tests done (tiny memory) ]\n") ;
+    }
+    #endif
+
+    cholmod_l_free_sparse (&A, cc) ;
+
+    printf ("\n") ;
+    fprintf (stderr, "\n") ;
+    return (nfail0 + nfail1 + nfail2 + nfail3) ;
+}
+
+
+
+int do_matrix2 (int kind, cholmod_sparse *A, cholmod_common *cc)
+{
+    double errs [5] = {0,0,0,0,0} ;
+    Long m = A->nrow ;
+    Long n = A->ncol ;
+
+    // -------------------------------------------------------------------------
+    // use it to test SuiteSparseQR
+    // -------------------------------------------------------------------------
+
+    if (A->xtype == CHOLMOD_COMPLEX && A->stype == 0)
+    {
+        qrtest <Complex> (A, errs, cc) ;
+    }
+    else if (A->xtype == CHOLMOD_REAL)
+    {
+        if (A->stype != 0)
+        {
+            cholmod_sparse *A1 ;
+            A1 = cholmod_l_copy (A, 0, 1, cc) ;
+            qrtest <double> (A1, errs, cc) ;
+            cholmod_l_free_sparse (&A1, cc) ;
+        }
+        else
+        {
+            qrtest <double> (A, errs, cc) ;
+        }
+    }
+    else
+    {
+        // cannot handle ZOMPLEX, PATTERN, or symmetric/Hermitian COMPLEX
+        fprintf (stderr, "invalid matrix\n") ;
+        errs [0] = 1 ;
+    }
+
+    // -------------------------------------------------------------------------
+    // report the results
+    // -------------------------------------------------------------------------
+
+    if (kind == 0)
+    {
+        printf ("First Resid and ") ;
+    }
+    printf ("Err should be low:\n") ;
+    printf ("RESULT:  Err %8.1e Resid %8.1e %8.1e", errs [0],
+        errs [1], errs [2]) ;
+    if (m == n)
+    {
+        printf ("                  ") ;
+    }
+    else
+    {
+        printf (" %8.1e %8.1e", errs [3], errs [4]) ;
+    }
+
+    if (errs [0] > 1e-10)
+    {
+        printf (" : FAIL\n") ;
+        fprintf (stderr, "Error: %g FAIL\n", errs [0]) ;
+        return (1) ;
+    }
+
+    // if kind == 0, then this full-rank matrix should have low residual
+    if (kind == 0 && (errs [1] > 1e-10))
+    {
+        printf (" : FAIL\n") ;
+        fprintf (stderr, "error: %g FAIL\n", errs [1]) ;
+        return (1) ;
+    }
+
+    printf (" : OK.") ;
+    fprintf (stderr, "OK.") ;
+    return (0) ;
+}
+
+
+// =============================================================================
+// === qrtest main =============================================================
+// =============================================================================
+
+#define LEN 200
+
+int main (int argc, char **argv)
+{
+    cholmod_common Common, *cc ;
+    char matrix_name [LEN+1] ;
+    int kind, nfail = 0 ;
+
+    // -------------------------------------------------------------------------
+    // start CHOLMOD
+    // -------------------------------------------------------------------------
+
+    cc = &Common ;
+    cholmod_l_start (cc) ;
+    normal_memory_handler (cc) ;
+
+    if (argc == 1)
+    {
+
+        // ---------------------------------------------------------------------
+        // Usage:  qrtest < input.mtx
+        // ---------------------------------------------------------------------
+
+        nfail += do_matrix (1, stdin, cc) ;
+    }
+    else
+    {
+
+        // ---------------------------------------------------------------------
+        // Usage:  qrtest matrixlist
+        // ---------------------------------------------------------------------
+
+        // Each line of the matrixlist file contains an integer indicating if
+        // the residuals should all be low (0=lo, 1=can be high), and a file
+        // name containing the matrix in Matrix Market format.
+
+        FILE *file = fopen (argv [1], "r") ;
+        if (file == NULL)
+        {
+            fprintf (stderr, "Unable to open %s\n", argv [1]) ;
+            exit (1) ;
+        }
+
+        while (1)
+        {
+            if (fscanf (file, "%d %100s\n", &kind, matrix_name) != 2)
+            {
+                break ;
+            }
+            fprintf (stderr, "%-30s ", matrix_name) ;
+            FILE *matrix = fopen (matrix_name, "r") ;
+            if (matrix == NULL)
+            {
+                fprintf (stderr, "Unable to open %s\n", matrix_name) ;
+                nfail++ ;
+            }
+            nfail += do_matrix (kind, matrix, cc) ;
+
+            fclose (matrix) ;
+        }
+        fclose (file) ;
+    }
+
+    // -------------------------------------------------------------------------
+    // report the results
+    // -------------------------------------------------------------------------
+
+    cholmod_l_finish (cc) ;
+
+    if (cc->malloc_count != 0)
+    {
+        nfail++ ;
+        fprintf (stderr, "memory leak: %ld objects\n", (Long) cc->malloc_count);
+    }
+    if (cc->memory_inuse != 0)
+    {
+        nfail++ ;
+        fprintf (stderr, "memory leak: %ld bytes\n", (Long) cc->memory_inuse) ;
+    }
+
+    if (nfail == 0)
+    {
+        fprintf (stderr, "\nAll tests passed\n") ;
+    }
+    else
+    {
+        fprintf (stderr, "\nTest FAILURES: %d\n", nfail) ;
+    }
+
+    return (0) ;
+}
diff --git a/SPQR/Tcov/qrtestc.c b/SPQR/Tcov/qrtestc.c
new file mode 100644
index 0000000..f957413
--- /dev/null
+++ b/SPQR/Tcov/qrtestc.c
@@ -0,0 +1,113 @@
+/* ========================================================================== */
+/* === qrtest_C ============================================================= */
+/* ========================================================================== */
+
+/* Test the C wrapper functions. */
+
+#include "SuiteSparseQR_C.h"
+#define Long SuiteSparse_long
+
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+
+void qrtest_C
+(
+    cholmod_sparse *A,
+    double anorm,
+    double errs [5],
+    double maxresid [2][2],
+    cholmod_common *cc
+)
+{
+    cholmod_dense *B, *X, *Resid ;
+    cholmod_sparse *Bsparse, *Xsparse ;
+    SuiteSparseQR_C_factorization *QR ;
+    double resid, one [2] = {1,0}, minusone [2] = {-1,0} ;
+    Long m, n ;
+#ifndef NEXPERT
+    cholmod_dense *Y ;
+    int split ;
+#endif
+
+    m = A->nrow ;
+    n = A->ncol ;
+
+    B = cholmod_l_ones (m, 1, A->xtype, cc) ;
+
+    /* X = A\B */
+    X = SuiteSparseQR_C_backslash_default (A, B, cc) ;
+
+    /* Resid = A*X - B */
+    Resid = cholmod_l_copy_dense (B, cc) ;
+    cholmod_l_sdmult (A, 0, one, minusone, X, Resid, cc) ;
+
+    /* resid = norm (Resid,1) */
+    resid = cholmod_l_norm_dense (Resid, 1, cc) / MAX (anorm, 1) ;
+    resid = (resid < 0 || resid != resid) ? 9e99 : resid ;
+    cholmod_l_free_dense (&Resid, cc) ;
+    cholmod_l_free_dense (&X, cc) ;
+
+    maxresid [m>n][0] = MAX (maxresid [m>n][0], resid) ;
+    printf ("Resid_C1  %d : %g\n", m>n, resid) ;
+
+    /* X = A\B */
+    Bsparse = cholmod_l_dense_to_sparse (B, 1, cc) ;
+    Xsparse = SuiteSparseQR_C_backslash_sparse (2, -2, A, Bsparse, cc) ;
+    X = cholmod_l_sparse_to_dense (Xsparse, cc) ;
+    cholmod_l_free_sparse (&Bsparse, cc) ;
+    cholmod_l_free_sparse (&Xsparse, cc) ;
+
+    /* Resid = A*X - B */
+    Resid = cholmod_l_copy_dense (B, cc) ;
+    cholmod_l_sdmult (A, 0, one, minusone, X, Resid, cc) ;
+
+    /* resid = norm (Resid,1) */
+    resid = cholmod_l_norm_dense (Resid, 1, cc) / MAX (anorm, 1) ;
+    resid = (resid < 0 || resid != resid) ? 9e99 : resid ;
+    cholmod_l_free_dense (&Resid, cc) ;
+    cholmod_l_free_dense (&X, cc) ;
+
+    maxresid [m>n][0] = MAX (maxresid [m>n][0], resid) ;
+    printf ("Resid_C2  %d : %g\n", m>n, resid) ;
+
+#ifndef NEXPERT
+
+    for (split = 0 ; split <= 1 ; split++)
+    {
+        if (split)
+        {
+            /* split symbolic/numeric QR factorization */
+            QR = SuiteSparseQR_C_symbolic (2, 1, A, cc) ;
+            SuiteSparseQR_C_numeric (-2, A, QR, cc) ;
+        }
+        else
+        {
+            /* QR factorization, single pass */
+            QR = SuiteSparseQR_C_factorize (2, -2, A, cc) ;
+        }
+
+        /* Y = Q'*B */
+        Y = SuiteSparseQR_C_qmult (0, QR, B, cc) ;
+
+        /* X = E*(R\Y) */
+        X = SuiteSparseQR_C_solve (1, QR, Y, cc) ;
+
+        /* Resid = A*X - B */
+        Resid = cholmod_l_copy_dense (B, cc) ;
+        cholmod_l_sdmult (A, 0, one, minusone, X, Resid, cc) ;
+
+        /* resid = norm (Resid,1) */
+        resid = cholmod_l_norm_dense (Resid, 1, cc) / MAX (anorm, 1) ;
+        resid = (resid < 0 || resid != resid) ? 9e99 : resid ;
+        cholmod_l_free_dense (&Resid, cc) ;
+        cholmod_l_free_dense (&X, cc) ;
+
+        maxresid [m>n][0] = MAX (maxresid [m>n][0], resid) ;
+        printf ("Resid_C3  %d : %g\n", m>n, resid) ;
+
+        cholmod_l_free_dense (&Y, cc) ;
+        SuiteSparseQR_C_free (&QR, cc) ;
+    }
+#endif
+
+    cholmod_l_free_dense (&B, cc) ;
+}
diff --git a/SSMULT/Contents.m b/SSMULT/Contents.m
deleted file mode 100644
index fafca51..0000000
--- a/SSMULT/Contents.m
+++ /dev/null
@@ -1,18 +0,0 @@
-% SSMULT:  sparse matrix multiplication (sparse times sparse)
-%
-% SSMULT computes C=A*B where A and B are sparse.  It is typically faster
-% than C=A*B in MATLAB 7.4 (or earlier), and always uses less memory.
-%
-%   ssmult          - multiplies two sparse matrices.
-%   ssmult_install  - compiles, installs, and tests ssmult.
-%   ssmult_unsorted - multiplies two sparse matrices, returning non-standard result.
-%   ssmultsym       - computes nnz(C), memory, and flops to compute C=A*B; A and B sparse.
-%   ssmult_test     - tests ssmult, ssmultsym (sparse times sparse matrix multiply)
-%   ssmult_demo     - simple demo for ssmult.
-%   sstest          - exhaustive performance test for SSMULT.
-%   sstest2         - exhaustive performance test for SSMULT.  Requires UFget.
-%
-% Example:
-%   C = ssmult(A,B) ;    % computes C = A*B
-%
-% Copyright 2007, Timothy A. Davis, University of Florida
diff --git a/SSMULT/README.txt b/SSMULT/README.txt
deleted file mode 100644
index 98f59b8..0000000
--- a/SSMULT/README.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-SSMULT version 1.1.0, Nov 1, 2007.
-Distributed under the GNU GPL license (see below).  Copyright (c) 2007, Timothy
-A. Davis, University of Florida.  SSMULT is also available under other
-licenses; contact the author for details.
-http://www.cise.ufl.edu/research/sparse
-
-SSMULT is a MATLAB toolbox for multiplying two sparse matrices, C = A*B.  It
-always uses less memory than the built-in C=A*B (in MATLAB 7.4 or earlier, at
-least).  It is typically faster, particularly when A or B are complex.  It is
-also much faster when A or B are diagonal or permutations of diagonal matrices.
-Requires MATLAB 6.1 or later (it may work on earlier versions; it has been
-tested on MATLAB 6.1, 6.5, 7.0.1, 7.0.4, 7.1, 7.2, 7.3, and 7.4).  Works on
-32-bit and 64-bit MATLAB.  Either A or B, or both, can be complex.  It should
-work in 64-bit Windows, but it has only been tested on Linux for the 64-bit
-case.  Only "double" sparse matrices are supported.
-
-To compile, install, and test, type
-
-    ssmult_install
-
-in the MATLAB command window.  Then edit your path (with pathtool, or startup.m)
-to add the SSMULT directory to your MATLAB path.  For more extensive tests
-(which require the UFget package) type sstest2 after installing SSMULT.
-
-For best performance, do not use the "lcc" compiler that ships with MATLAB 7.4
-(or earlier) for Windows.  Use another compiler instead.  Type "mex -setup" or
-"doc mex" for more information.  For Linux/Unix/Mac, edit your mexopts.sh file
-and use the option:
-
-    COPTIMFLAGS='-O3 -DNDEBUG'
-
-Note that there is a workaround for a minor "gcc -O" bug (handling floating-
-point underflow) in ssmult_template.c.  Use -DNO_GCC_BUG if this bug does not
-affect you, and you might slightly increase your performance.
-
-The Results directory contains the result of sstest on various platforms.
-The first three are all on the same laptop, an Intel Core Duo (2GHz, 2GB
-memory, 2MB of cache):
-
-CoreDuo_Linux.png       MATLAB 7.4, Intel Core Duo, Linux, gcc v4.1, -O3
-CoreDuo_MS_lcc.png      MATLAB 7.4, same laptop as above, lcc compiler.
-CoreDuo_MS_vc2005.png   MATLAB 7.4, same laptop, MS VC++ 2005 compiler.
-
-Opteron64_Linux.png     MATLAB 7.3, AMD Opteron (64-bit)
-Pentium4M_Linux.png     MATLAB 7.3, Pentium 4M, Linux, gcc version 4.1, -O3
-
-These results show that ssmult is always faster for the matrices in this test,
-when using gcc -O3 in Linux.  Comparing the CoreDuo_*.png results, you can see
-that lcc generates very slow code; these results are on the same laptop.  If
-you see that ssmult is slower than C=A*B in sstest, then check your compiler
-and its optimization options.  In particular, "lcc" as the default compiler
-used by the "mex" function in MATLAB on Windows will lead to poor performance.
-In particular, Microsoft provides Visual C++ 2005 Express Edition for free.
-Intel's compiler also generates high-quality code.
-
-If you do not have a C compiler for Windows (other than "lcc" provided with
-MATLAB) do the following.  Download and install the following from
-www.microsoft.com:
-
-    Microsoft Visual C++ 2005 Express Edition
-    Microsoft Platform SDK (Windows Server 2003)
-
-Next, install the compiler for use in the MATLAB "mex" command:
-
-    Right click My Computer and select Properties.
-    Click the Advanced tab.
-    Click the Environment Variables button.
-    Create a new environment variable called MSSdk and set its value to the
-        path to the Microsoft Platform SDK.  The default location is
-        C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\
-    In MATLAB, type the command "mex -setup".  Select the Microsoft Visual C++
-        2005 Express Edition compiler.
-
---------------------------------------------------------------------------------
-
-SSMULT is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-SSMULT is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this Module; if not, write to the Free Software Foundation, Inc., 51 Franklin
-Street, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/SSMULT/ssmult.c b/SSMULT/ssmult.c
deleted file mode 100644
index 2c826c6..0000000
--- a/SSMULT/ssmult.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/* ========================================================================== */
-/* === ssmult =============================================================== */
-/* ========================================================================== */
-
-/* C = ssmult (A,B) multiplies two sparse matrices A and B, in MATLAB.  Either
- * A or B, or both, can be complex.  C is returned as a proper MATLAB sparse
- * matrix, with sorted row indices and no explicit zero entries.  If A or B are
- * complex, but the imaginary part of C is computed to be zero, then C is
- * returned as a real sparse matrix (as in MATLAB).
- *
- * These extra checks (sorting, dropping zeros, and dropping the complex part
- * if it is all zero) take time, particulary the requirement that C have sorted
- * columns.  If you are interested in speed, try compiling with -DUNSORTED.  The
- * resulting matrix C can have columns with unsorted row indices, but many
- * MATLAB functions work just fine when given a matrix with unsorted columns.
- *
- * When compiled to return C sorted, this function is called SSMULT.  When
- * compiled without returning C sorted, this function is called SSMULT_UNSORTED.
- *
- * Copyright 2007, Timothy A. Davis, University of Florida
- */
-
-#include "ssmult.h"
-
-#ifndef UNSORTED
-
-/* -------------------------------------------------------------------------- */
-/* merge Left [0..nleft-1] and Right [0..nright-1] into S [0..nleft+nright-1] */
-/* -------------------------------------------------------------------------- */
-
-static void merge
-(
-    Int S [ ],		    /* output of length nleft + nright */
-    const Int Left [ ],	    /* left input of length nleft */
-    const Int nleft,
-    const Int Right [ ],    /* right input of length nright */
-    const Int nright
-)
-{
-    Int p, pleft, pright ;
-
-    /* merge the two inputs, Left and Right, while both inputs exist */
-    for (p = 0, pleft = 0, pright = 0 ; pleft < nleft && pright < nright ; p++)
-    {
-	if (Left [pleft] < Right [pright])
-	{
-	    S [p] = Left [pleft++] ;
-	}
-	else
-	{
-	    S [p] = Right [pright++] ;
-	}
-    }
-
-    /* either input is exhausted; copy the remaining list into S */
-    for ( ; pleft < nleft ; p++)
-    {
-	S [p] = Left [pleft++] ;
-    }
-    for ( ; pright < nright ; p++)
-    {
-	S [p] = Right [pright++] ;
-    }
-}
-
-
-/* -------------------------------------------------------------------------- */
-/* SORT(a,b) sorts [a b] in ascending order, so that a < b holds on output */
-/* -------------------------------------------------------------------------- */
-
-#define SORT(a,b) { if (a > b) { t = a ; a = b ; b = t ; } }
-
-
-/* -------------------------------------------------------------------------- */
-/* BUBBLE(a,b) sorts [a b] in ascending order, and sets done to 0 if it swaps */
-/* -------------------------------------------------------------------------- */
-
-#define BUBBLE(a,b) { if (a > b) { t = a ; a = b ; b = t ; done = 0 ; } }
-
-
-/* -------------------------------------------------------------------------- */
-/* mergesort */
-/* -------------------------------------------------------------------------- */
-
-/* mergesort (A, W, n) sorts an Int array A of length n in ascending order. W is
- * a workspace array of size n.  function is used for sorting the row indices
- * in each column of C.  Small lists (of length SMALL or less) are sorted with
- * a bubble sort.  A value of 10 for SMALL works well on an Intel Core Duo, an
- * Intel Pentium 4M, and a 64-bit AMD Opteron.  SMALL must be in the range 4 to
- * 10. */
-
-#ifndef SMALL
-#define SMALL 10
-#endif
-
-static void mergesort
-(
-    Int A [ ],	    /* array to sort, of size n */
-    Int W [ ],	    /* workspace of size n */
-    Int n
-)
-{
-    if (n <= SMALL)
-    {
-
-	/* ------------------------------------------------------------------ */
-	/* bubble sort for small lists of length SMALL or less */
-	/* ------------------------------------------------------------------ */
-
-	Int t, done ;
-	switch (n)
-	{
-
-#if SMALL >= 10
-	    case 10:
-		/* 10-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		BUBBLE (A [2], A [3]) ;
-		BUBBLE (A [3], A [4]) ;
-		BUBBLE (A [4], A [5]) ;
-		BUBBLE (A [5], A [6]) ;
-		BUBBLE (A [6], A [7]) ;
-		BUBBLE (A [7], A [8]) ;
-		BUBBLE (A [8], A [9]) ;
-		if (done) return ;
-#endif
-
-#if SMALL >= 9
-	    case 9:
-		/* 9-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		BUBBLE (A [2], A [3]) ;
-		BUBBLE (A [3], A [4]) ;
-		BUBBLE (A [4], A [5]) ;
-		BUBBLE (A [5], A [6]) ;
-		BUBBLE (A [6], A [7]) ;
-		BUBBLE (A [7], A [8]) ;
-		if (done) return ;
-#endif
-
-#if SMALL >= 8
-	    case 8:
-		/* 7-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		BUBBLE (A [2], A [3]) ;
-		BUBBLE (A [3], A [4]) ;
-		BUBBLE (A [4], A [5]) ;
-		BUBBLE (A [5], A [6]) ;
-		BUBBLE (A [6], A [7]) ;
-		if (done) return ;
-#endif
-
-#if SMALL >= 7
-	    case 7:
-		/* 7-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		BUBBLE (A [2], A [3]) ;
-		BUBBLE (A [3], A [4]) ;
-		BUBBLE (A [4], A [5]) ;
-		BUBBLE (A [5], A [6]) ;
-		if (done) return ;
-#endif
-
-#if SMALL >= 6
-	    case 6:
-		/* 6-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		BUBBLE (A [2], A [3]) ;
-		BUBBLE (A [3], A [4]) ;
-		BUBBLE (A [4], A [5]) ;
-		if (done) return ;
-#endif
-
-#if SMALL >= 5
-	    case 5:
-		/* 5-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		BUBBLE (A [2], A [3]) ;
-		BUBBLE (A [3], A [4]) ;
-		if (done) return ;
-#endif
-
-	    case 4:
-		/* 4-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		BUBBLE (A [2], A [3]) ;
-		if (done) return ;
-
-	    case 3:
-		/* 3-element bubble sort */
-		done = 1 ;
-		BUBBLE (A [0], A [1]) ;
-		BUBBLE (A [1], A [2]) ;
-		if (done) return ;
-
-	    case 2:
-		/* 2-element bubble sort */
-		SORT (A [0], A [1]) ; 
-
-	    case 1:
-	    case 0:
-		/* nothing to do */
-		;
-	}
-
-    }
-    else
-    {
-
-	/* ------------------------------------------------------------------ */
-	/* recursive mergesort if A has length 5 or more */
-	/* ------------------------------------------------------------------ */
-
-	Int n1, n2, n3, n4, n12, n34, n123 ;
-
-	n12 = n / 2 ;		/* split n into n12 and n34 */
-	n34 = n - n12 ;
-
-	n1 = n12 / 2 ;		/* split n12 into n1 and n2 */
-	n2 = n12 - n1 ;
-
-	n3 = n34 / 2 ;		/* split n34 into n3 and n4 */
-	n4 = n34 - n3 ;
-
-	n123 = n12 + n3 ;	/* start of 4th subset = n1 + n2 + n3 */
-
-	mergesort (A,        W, n1) ;	    /* sort A [0  ... n1-1] */
-	mergesort (A + n1,   W, n2) ;	    /* sort A [n1 ... n12-1] */
-	mergesort (A + n12,  W, n3) ;	    /* sort A [n12 ... n123-1] */
-	mergesort (A + n123, W, n4) ;	    /* sort A [n123 ... n-1]  */
-
-	/* merge A [0 ... n1-1] and A [n1 ... n12-1] into W [0 ... n12-1] */
-	merge (W, A, n1, A + n1, n2) ;
-
-	/* merge A [n12 ... n123-1] and A [n123 ... n-1] into W [n12 ... n-1] */
-	merge (W + n12, A + n12, n3, A + n123, n4) ;
-
-	/* merge W [0 ... n12-1] and W [n12 ... n-1] into A [0 ... n-1] */
-	merge (A, W, n12, W + n12, n34) ;
-    }
-}
-#endif
-
-
-/* -------------------------------------------------------------------------- */
-/* ssmult mexFunction */
-/* -------------------------------------------------------------------------- */
-
-void mexFunction
-(
-    int nargout,
-    mxArray *pargout [ ],
-    int nargin,
-    const mxArray *pargin [ ]
-)
-{
-    double *Ax, *Az, *Bx, *Bz, *Cx, *Cz, *W, *Wz ;
-    double bkj, bzkj, cij, czij ;
-    Int *Ap, *Ai, *Bp, *Bi, *Cp, *Ci, *Flag ;
-    Int Anrow, Ancol, Bnrow, Bncol, p, i, j, k, cnz, pb, pa, pbend, paend, mark,
-	pc, pcstart, blen, drop, zallzero, pend, needs_sorting, pcmax ;
-    int A_is_complex, B_is_complex, C_is_complex, A_is_diagonal,
-	A_is_permutation ;
-
-    /* ---------------------------------------------------------------------- */
-    /* get inputs and workspace */
-    /* ---------------------------------------------------------------------- */
-
-    if (nargin != 2 || nargout > 1)
-    {
-	mexErrMsgTxt ("Usage: C = ssmult (A,B)") ;
-    }
-
-    Ap = mxGetJc (pargin [0]) ;
-    Ai = mxGetIr (pargin [0]) ;
-    Ax = mxGetPr (pargin [0]) ;
-    Az = mxGetPi (pargin [0]) ;
-    Anrow = mxGetM (pargin [0]) ;
-    Ancol = mxGetN (pargin [0]) ;
-    A_is_complex = mxIsComplex (pargin [0]) ;
-
-    Bp = mxGetJc (pargin [1]) ;
-    Bi = mxGetIr (pargin [1]) ;
-    Bx = mxGetPr (pargin [1]) ;
-    Bz = mxGetPi (pargin [1]) ;
-    Bnrow = mxGetM (pargin [1]) ;
-    Bncol = mxGetN (pargin [1]) ;
-    B_is_complex = mxIsComplex (pargin [1]) ;
-
-    if (Ancol != Bnrow || !mxIsSparse (pargin [0]) || !mxIsSparse (pargin [1]))
-    {
-	mexErrMsgTxt ("wrong dimensions, or A and B not sparse") ;
-    }
-
-#ifndef MATLAB_6p1_OR_EARLIER
-    if (!mxIsDouble (pargin [0]) || !mxIsDouble (pargin [1]))
-    {
-	mexErrMsgTxt ("A and B must be of class 'double'") ;
-    }
-#endif
-
-    Flag = mxCalloc (Anrow, sizeof (Int)) ;	/* workspace */
-    Cp = mxMalloc ((Bncol+1) * sizeof (Int)) ;	/* allocate C column pointers */
-
-    /* ---------------------------------------------------------------------- */
-    /* compute # of nonzeros in result */
-    /* ---------------------------------------------------------------------- */
-
-    pb = 0 ;
-    cnz = 0 ;
-    mark = 0 ;
-    for (j = 0 ; j < Bncol ; j++)
-    {
-	/* Compute nnz (C (:,j)) */
-	mark-- ;			/* Flag [0..n-1] != mark is now true */ 
-	pb = Bp [j] ;
-	pbend = Bp [j+1] ;
-	pcstart = cnz ;
-	pcmax = cnz + Anrow ;
-	Cp [j] = cnz ;
-	/* cnz += nnz (C (:,j)), stopping early if nnz(C(:,j)) == Anrow */
-	for ( ; pb < pbend && cnz < pcmax ; pb++)
-	{
-	    k = Bi [pb] ;		/* nonzero entry B(k,j) */
-	    paend = Ap [k+1] ;
-	    for (pa = Ap [k] ; pa < paend ; pa++)
-	    {
-		i = Ai [pa] ;		/* nonzero entry A(i,k) */
-		if (Flag [i] != mark)
-		{
-		    /* C(i,j) is a new nonzero */
-		    Flag [i] = mark ;	/* mark i as appearing in C(:,j) */
-		    cnz++ ;
-		}
-	    }
-	}
-	if (cnz < pcstart)
-	{
-	    /* integer overflow has occurred */
-	    mexErrMsgTxt ("problem too large") ;
-	}
-    }
-    Cp [Bncol] = cnz ;
-
-    /* ---------------------------------------------------------------------- */
-    /* allocate C */
-    /* ---------------------------------------------------------------------- */
-
-    Ci = mxMalloc (MAX (cnz,1) * sizeof (Int)) ;
-    Cx = mxMalloc (MAX (cnz,1) * sizeof (double)) ;
-    C_is_complex = A_is_complex || B_is_complex ;
-    Cz = (C_is_complex) ? mxMalloc (MAX (cnz,1) * sizeof (double)) : NULL ;
-
-    /* ---------------------------------------------------------------------- */
-    /* C = A*B */
-    /* ---------------------------------------------------------------------- */
-
-    if (A_is_complex)
-    {
-	if (B_is_complex)
-	{
-	    /* all of C, A, and B are complex */
-#define ACOMPLEX
-#define BCOMPLEX
-#include "ssmult_template.c"
-	}
-	else
-	{
-	    /* C and A are complex, B is real */
-#define ACOMPLEX
-#include "ssmult_template.c"
-	}
-    }
-    else
-    {
-	if (B_is_complex)
-	{
-	    /* C and B are complex, A is real */
-#define BCOMPLEX
-#include "ssmult_template.c"
-	}
-	else
-	{
-	    /* all of C, A, and B are real */
-#include "ssmult_template.c"
-	}
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* free workspace */
-    /* ---------------------------------------------------------------------- */
-
-    mxFree (Flag) ;
-
-#ifndef UNSORTED
-
-    /* ---------------------------------------------------------------------- */
-    /* convert C to real if Cz is all zero */
-    /* ---------------------------------------------------------------------- */
-
-    if (C_is_complex && zallzero)
-    {
-	C_is_complex = 0 ;
-	mxFree (Cz) ;
-	Cz = NULL ;
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* drop zeros from C and reduce its size, if any zeros appear */
-    /* ---------------------------------------------------------------------- */
-
-    if (drop)
-    {
-	if (C_is_complex)
-	{
-	    for (cnz = 0, p = 0, j = 0 ; j < Bncol ; j++)
-	    {
-		Cp [j] = cnz ;
-		pend = Cp [j+1] ;
-		for ( ; p < pend ; p++)
-		{
-		    if (Cx [p] != 0 || Cz [p] != 0)
-		    {
-			Ci [cnz] = Ci [p] ;	    /* keep this entry */
-			Cx [cnz] = Cx [p] ;
-			Cz [cnz] = Cz [p] ;
-			cnz++ ;
-		    }
-		}
-	    }
-	    Cz = mxRealloc (Cz, MAX (cnz,1) * sizeof (double)) ;
-	}
-	else
-	{
-	    for (cnz = 0, p = 0, j = 0 ; j < Bncol ; j++)
-	    {
-		Cp [j] = cnz ;
-		pend = Cp [j+1] ;
-		for ( ; p < pend ; p++)
-		{
-		    if (Cx [p] != 0)
-		    {
-			Ci [cnz] = Ci [p] ;	    /* keep this entry */
-			Cx [cnz] = Cx [p] ;
-			cnz++ ;
-		    }
-		}
-	    }
-	}
-	Cp [Bncol] = cnz ;
-	Ci = mxRealloc (Ci, MAX (cnz,1) * sizeof (Int)) ;
-	Cx = mxRealloc (Cx, MAX (cnz,1) * sizeof (double)) ;
-    }
-
-#endif
-
-    /* ---------------------------------------------------------------------- */
-    /* return C */
-    /* ---------------------------------------------------------------------- */
-
-    pargout [0] = mxCreateSparse (0, 0, 0, C_is_complex ? mxCOMPLEX : mxREAL) ;
-    mxFree (mxGetJc (pargout [0])) ;
-    mxFree (mxGetIr (pargout [0])) ;
-    mxFree (mxGetPr (pargout [0])) ;
-    mxFree (mxGetPi (pargout [0])) ;
-    mxSetJc (pargout [0], Cp) ;
-    mxSetIr (pargout [0], Ci) ;
-    mxSetPr (pargout [0], Cx) ;
-    mxSetPi (pargout [0], Cz) ;
-    mxSetNzmax (pargout [0], MAX (cnz,1)) ;
-    mxSetM (pargout [0], Anrow) ;
-    mxSetN (pargout [0], Bncol) ;
-}
diff --git a/SSMULT/ssmult.h b/SSMULT/ssmult.h
deleted file mode 100644
index 960a690..0000000
--- a/SSMULT/ssmult.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ========================================================================== */
-/* === ssmult.h ============================================================= */
-/* ========================================================================== */
-
-/* Include file for ssmult.c and ssmultsym.c
- * Copyright 2007, Timothy A. Davis, University of Florida
- */
-
-#include "mex.h"
-#include <stdlib.h>
-
-/* define the MATLAB integer */
-#ifdef IS64
-#define Int mwSignedIndex
-#else
-#define Int int
-#endif
-
-/* turn off debugging */
-#ifndef NDEBUG
-#define NDEBUG
-#endif
-
-#define MAX(a,b) (((a) > (b)) ? (a) : (b))
diff --git a/SSMULT/ssmult.m b/SSMULT/ssmult.m
deleted file mode 100644
index 4425cb2..0000000
--- a/SSMULT/ssmult.m
+++ /dev/null
@@ -1,20 +0,0 @@
-function C = ssmult (A,B)						    %#ok
-%SSMULT multiplies two sparse matrices.
-% C = ssmult (A,B) computes C=A*B where A and B are sparse.  This function is
-% typically faster than C=A*B in MATLAB 7.4, and always uses less memory.
-% Either A or B, or both, can be complex.  Only matrices of class "double" are
-% supported.
-%
-% Example:
-%   load west0479
-%   A = west0479 ;
-%   B = sprand (west0479) ;
-%   C = A*B ;
-%   D = ssmult (A,B) ;
-%   C-D
-%
-% See also ssmultsym, mtimes.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-error ('ssmult mexFunction not found') ;
diff --git a/SSMULT/ssmult_demo.m b/SSMULT/ssmult_demo.m
deleted file mode 100644
index 6c96388..0000000
--- a/SSMULT/ssmult_demo.m
+++ /dev/null
@@ -1,18 +0,0 @@
-function ssmult_demo
-%SSMULT_DEMO simple demo for ssmult.
-%
-% Example:
-%   ssmult_demo
-%
-% See also ssmult, ssmult_unsorted, ssmultsym, sstest, sstest2.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-type ssmult_demo
-load west0479
-A = west0479 ;
-B = sprand (A) ;
-C = A*B ;
-D = ssmult (A,B) ;
-err = norm (C-D,1) / norm (C,1) ;
-fprintf ('ssmult west0479 error: %g\n', err) ;
diff --git a/SSMULT/ssmult_install.m b/SSMULT/ssmult_install.m
deleted file mode 100644
index d0dd7d5..0000000
--- a/SSMULT/ssmult_install.m
+++ /dev/null
@@ -1,74 +0,0 @@
-function ssmult_install (dotests)
-%SSMULT_INSTALL compiles, installs, and tests ssmult.
-% Note that the "lcc" compiler provided with MATLAB for Windows can generate
-% slow code; use another compiler if possible.  Your current directory must be
-% SSMULT for ssmult_install to work properly.  If you use Linux/Unix/Mac, I
-% recommend that you use COPTIMFLAGS='-O3 -DNDEBUG' in your mexopts.sh file.
-%
-% Example:
-%   ssmult_install          % compile and install
-%   ssmult_install (0)      % just compile and install, do not test
-%
-% See also ssmult, ssmultsym, ssmult_unsorted, sstest, sstest2, mtimes.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-%-------------------------------------------------------------------------------
-% print an introduction
-%-------------------------------------------------------------------------------
-
-help ssmult
-help ssmult_install
-
-%-------------------------------------------------------------------------------
-% compile ssmult and add it to the path
-%-------------------------------------------------------------------------------
-
-d = '' ;
-if (~isempty (strfind (computer, '64')))
-    % 64-bit MATLAB
-    d = ' -largeArrayDims -DIS64' ;
-end
-
-v = getversion ;
-if (v < 6.5)
-    % mxIsDouble is false for a double sparse matrix in MATLAB 6.1 or earlier
-    d = [d ' -DMATLAB_6p1_OR_EARLIER'] ;
-end
-
-cmd = sprintf ('mex -O%s ssmult.c', d) ;
-disp (cmd) ;
-eval (cmd) ;
-
-cmd = sprintf ('mex -O%s ssmultsym.c', d) ;
-disp (cmd) ;
-eval (cmd) ;
-
-cmd = sprintf ('mex -O%s -DUNSORTED ssmult.c -output ssmult_unsorted', d) ;
-disp (cmd) ;
-eval (cmd) ;
-
-addpath (pwd) ;
-fprintf ('\nssmult has been compiled, and the following directory has been\n') ;
-fprintf ('added to your MATLAB path.  Use pathtool to add it permanently:\n') ;
-fprintf ('\n%s\n\n', pwd) ;
-fprintf ('If you cannot save your path with pathtool, add the following\n') ;
-fprintf ('to your MATLAB startup.m file (type "doc startup" for help):\n') ;
-fprintf ('\naddpath (''%s'') ;\n\n', pwd) ;
-
-%-------------------------------------------------------------------------------
-% test ssmult and ssmultsym
-%-------------------------------------------------------------------------------
-
-if (nargin < 1)
-    dotests = 1 ;
-end
-if (dotests)
-    ssmult_test ;
-end
-
-%-------------------------------------------------------------------------------
-function v = getversion
-% determine the MATLAB version, and return it as a double.
-v = sscanf (version, '%d.%d.%d') ;
-v = 10.^(0:-1:-(length(v)-1)) * v ;
diff --git a/SSMULT/ssmult_template.c b/SSMULT/ssmult_template.c
deleted file mode 100644
index dc83f94..0000000
--- a/SSMULT/ssmult_template.c
+++ /dev/null
@@ -1,419 +0,0 @@
-/* ========================================================================== */
-/* === ssmult_template.c ==================================================== */
-/* ========================================================================== */
-
-/* C = A*B, where A and B are sparse.  The column pointers for C (the Cp array)
- * have already been computed.  entries are dropped.  This code fragment is
- * #include'd into ssmult.c four times, with all four combinations of ACOMPLEX
- * (defined or not) and BCOMPLEX (defined or not).
- *
- * By default, C is returned with sorted column indices, and with explicit
- * zero entries dropped.  If C is complex with an all-zero imaginary part, then
- * the imaginary part is freed and C becomes real.  Thus, C is a pure MATLAB
- * sparse matrix.
- *
- * If UNSORTED is defined (-DUNSORTED), then the nonzero pattern of C is
- * returned with unsorted column indices, explicit zeros may be present in C,
- * and the imaginary of a complex C may be all zero.  This is much faster than
- * returning a pure MATLAB sparse matrix.
- *
- * If the compiler bug discussed below does not affect you, then uncomment the
- * following line, or compile with code with -DNO_GCC_BUG.
-
-#define NO_GCC_BUG
-
- * The gcc bug occurs when cij underflows to zero:
- *
- *	cij = aik * bkj ;
- *	if (cij == 0)
- *	{
- *	    drop this entry 
- *	}
- *
- * If cij underflows, cij is zero but the above test is incorrectly FALSE with
- * gcc -O, using gcc version 4.1.0 on an Intel Pentium.  The bug does not appear
- * on an AMD Opteron with the same compiler.  The solution is to store cij to
- * memory first, and then to read it back in and test it, which is slower.
- */
-
-/* -------------------------------------------------------------------------- */
-/* MULT: multiply (or multiply and accumulate, depending on op) */
-/* -------------------------------------------------------------------------- */
-
-/* op can be "=" or "+=" */
-
-#ifdef ACOMPLEX
-#ifdef BCOMPLEX
-#define MULT(x,z,op) \
-    x op Ax [pa] * bkj - Az [pa] * bzkj ; \
-    z op Az [pa] * bkj + Ax [pa] * bzkj ;
-#else
-#define MULT(x,z,op) \
-    x op Ax [pa] * bkj ; \
-    z op Az [pa] * bkj ;
-#endif
-#else
-#ifdef BCOMPLEX
-#define MULT(x,z,op) \
-    x op Ax [pa] * bkj ; \
-    z op Ax [pa] * bzkj ;
-#else
-#define MULT(x,z,op) \
-    x op Ax [pa] * bkj ;
-#endif
-#endif
-
-/* -------------------------------------------------------------------------- */
-/* ASSIGN_BKJ: copy B(k,j) into a local scalar */
-/* -------------------------------------------------------------------------- */
-
-#ifdef BCOMPLEX
-#define ASSIGN_BKJ \
-    bkj = Bx [pb] ; \
-    bzkj = Bz [pb] ;
-#else
-#define ASSIGN_BKJ \
-    bkj = Bx [pb] ;
-#endif
-
-/* -------------------------------------------------------------------------- */
-/* DROP_CHECK: check if an entry must be dropped */
-/* -------------------------------------------------------------------------- */
-
-#ifndef UNSORTED
-#if defined (ACOMPLEX) || defined (BCOMPLEX)
-#define DROP_CHECK(x,z) \
-    if (x == 0 && z == 0) drop = 1 ; \
-    if (z != 0) zallzero = 0 ;
-#else
-#define DROP_CHECK(x,z) if (x == 0) drop = 1 ;
-#endif
-#else
-#define DROP_CHECK(x,z)
-#endif
-
-/* -------------------------------------------------------------------------- */
-/* sparse matrix multiply template */
-/* -------------------------------------------------------------------------- */
-
-{
-
-    /* ---------------------------------------------------------------------- */
-    /* initialize drop tests */
-    /* ---------------------------------------------------------------------- */
-
-#ifndef UNSORTED
-    drop = 0 ;			/* true if any entry in C is zero */
-    zallzero = 1 ;		/* true if Cz is all zero */
-#endif
-
-    /* ---------------------------------------------------------------------- */
-    /* quick check if A is diagonal, or a permutation matrix */
-    /* ---------------------------------------------------------------------- */
-
-    if (Anrow == Ancol && Ap [Ancol] == Ancol)
-    {
-	/* A is square, with n == nnz (A); check the pattern */
-	A_is_permutation = 1 ;
-	A_is_diagonal = 1 ;
-	for (j = 0 ; j < Ancol ; j++)
-	{
-	    if (Ap [j] != j)
-	    {
-		/* A has a column with no entries, or more than 1 entry */
-		A_is_permutation = 0 ;
-		A_is_diagonal = 0 ;
-		break ;
-	    }
-	}
-	mark-- ;			/* Flag [0..n-1] != mark is now true */ 
-	for (j = 0 ; j < Ancol && (A_is_permutation || A_is_diagonal) ; j++)
-	{
-	    /* A has one entry in each column, so j == Ap [j] */
-	    i = Ai [j] ;
-	    if (i != j)
-	    {
-		/* A is not diagonal, but might still be a permutation */
-		A_is_diagonal = 0 ;
-	    }
-	    if (Flag [i] == mark)
-	    {
-		/* row i appears twice; A is neither permutation nor diagonal */
-		A_is_permutation = 0 ;
-		A_is_diagonal = 0 ;
-	    }
-	    /* mark row i, so we know if we see it again */
-	    Flag [i] = mark ;
-	}
-    }
-    else
-    {
-	/* A is not square, or nnz (A) is not equal to n */
-	A_is_permutation = 0 ;
-	A_is_diagonal = 0 ;
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* allocate workspace */
-    /* ---------------------------------------------------------------------- */
-
-#ifndef UNSORTED
-    W = NULL ;
-    if (!A_is_diagonal)
-    {
-#if defined (ACOMPLEX) || defined (BCOMPLEX)
-	W = mxMalloc (Anrow * 2 * sizeof (double)) ;
-	Wz = W + Anrow ;
-#else
-	W = mxMalloc (Anrow * sizeof (double)) ;
-#endif
-    }
-#endif
-
-    /* ---------------------------------------------------------------------- */
-    /* compute C one column at a time */
-    /* ---------------------------------------------------------------------- */
-
-    if (A_is_diagonal)
-    {
-
-	/* ------------------------------------------------------------------ */
-	/* C = A*B where A is diagonal */
-	/* ------------------------------------------------------------------ */
-
-	pb = 0 ;
-	for (j = 0 ; j < Bncol ; j++)
-	{
-	    pcstart = pb ;
-	    pbend = Bp [j+1] ;	/* column B is in Bi,Bx,Bz [pb ... pbend+1] */
-	    for ( ; pb < pbend ; pb++)
-	    {
-		k = Bi [pb] ;			/* nonzero entry B(k,j) */
-		ASSIGN_BKJ ;
-		Ci [pb] = k ;
-		pa = k ;
-		MULT (Cx [pb], Cz [pb], =) ;	/* C(k,j) = A(k,k)*B(k,j) */
-#ifdef NO_GCC_BUG
-		DROP_CHECK (Cx [pb], Cz [pb]) ;	/* check if C(k,j) == 0 */
-#endif
-	    }
-
-#ifndef UNSORTED
-#ifndef NO_GCC_BUG
-	    for (pc = pcstart ; pc < pbend ; pc++)
-	    {
-		DROP_CHECK (Cx [pc], Cz [pc]) ;   /* check if C(k,j) == 0 */
-	    }
-#endif
-#endif
-	}
-
-    }
-    else
-    {
-
-	/* ------------------------------------------------------------------ */
-	/* C = A*B, general case, or A permutation */
-	/* ------------------------------------------------------------------ */
-
-	pb = 0 ;
-	cnz = 0 ;
-	for (j = 0 ; j < Bncol ; j++)
-	{
-
-	    /* -------------------------------------------------------------- */
-	    /* compute jth column of C: C(:,j) = A * B(:,j) */
-	    /* -------------------------------------------------------------- */
-
-	    pbend = Bp [j+1] ;	/* column B is in Bi,Bx,Bz [pb ... pbend+1] */
-	    pcstart = cnz ;	/* start of column j in C */
-	    blen = pbend - pb ;	/* number of entries in B */
-	    needs_sorting = 0 ;	/* true if column j needs sorting */
-
-	    if (blen == 0)
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* nothing to do, B(:,j) and C(:,j) are empty */
-		/* ---------------------------------------------------------- */
-
-		continue ;
-
-	    }
-	    else if (blen == 1)
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* B(:,j) contains only one nonzero */
-		/* ---------------------------------------------------------- */
-
-		/* since there is only one entry in B, just scale column A(:,k):
-		 * C(:,j) = A(:,k) * B(k,j)
-		 * C is sorted only if A is sorted on input */
-
-		k = Bi [pb] ;			/* nonzero entry B(k,j) */
-		ASSIGN_BKJ ;
-		paend = Ap [k+1] ;
-		for (pa = Ap [k] ; pa < paend ; pa++, cnz++)
-		{
-		    Ci [cnz] = Ai [pa] ;	    /* nonzero entry A(i,k) */
-		    MULT (Cx [cnz], Cz [cnz], =) ;  /* C(i,j) = A(i,k)*B(k,j) */
-#ifdef NO_GCC_BUG
-		    DROP_CHECK (Cx [cnz], Cz [cnz]) ;	/* check C(i,j) == 0 */
-#endif
-		}
-		pb++ ;
-
-#ifndef UNSORTED
-#ifndef NO_GCC_BUG
-		for (pc = pcstart ; pc < cnz ; pc++)
-		{
-		    DROP_CHECK (Cx [pc], Cz [pc]) ;   /* check if C(i,j) == 0 */
-		}
-#endif
-#endif
-
-	    }
-	    else
-	    {
-
-		/* ---------------------------------------------------------- */
-		/* B(:,j) has two or more entries */
-		/* ---------------------------------------------------------- */
-
-		if (A_is_permutation)
-		{
-
-		    /* ------------------------------------------------------ */
-		    /* A is a permutation matrix */
-		    /* ------------------------------------------------------ */
-
-		    needs_sorting = 1 ;
-		    for ( ; pb < pbend ; pb++)
-		    {
-			k = Bi [pb] ;		/* nonzero entry B(k,j) */
-			ASSIGN_BKJ ;
-			i = Ai [k] ;		/* nonzero entry A(i,k) */
-			Ci [pb] = i ;
-			pa = k ;
-			/* C(i,j) = A(i,k)*B(k,j) */
-#ifndef UNSORTED
-			MULT (W [i], Wz [i], =) ;
-#else
-			MULT (Cx [pb], Cz [pb], =) ;
-#endif
-		    }
-		    cnz = pbend ;
-
-		}
-		else
-		{
-
-		    /* ------------------------------------------------------ */
-		    /* general case */
-		    /* ------------------------------------------------------ */
-
-		    /* first entry in jth column of B is simpler */
-		    /* C(:,j) = A (:,k) * B (k,j) */
-		    k = Bi [pb] ;		    /* nonzero entry B(k,j) */
-		    ASSIGN_BKJ ;
-		    paend = Ap [k+1] ;
-		    for (pa = Ap [k] ; pa < paend ; pa++)
-		    {
-			i = Ai [pa] ;		    /* nonzero entry A(i,k) */
-			Flag [i] = cnz ;
-			Ci [cnz] = i ;		    /* new entry C(i,j) */
-			/* C(i,j) = A(i,k)*B(k,j) */
-#ifndef UNSORTED
-			MULT (W [i], Wz [i], =) ;
-#else
-			MULT (Cx [cnz], Cz [cnz], =) ;
-#endif
-			cnz++ ;
-		    }
-		    pb++ ;
-		    for ( ; pb < pbend ; pb++)
-		    {
-			k = Bi [pb] ;		    /* nonzero entry B(k,j) */
-			ASSIGN_BKJ ;
-			/* C(:,j) += A (:,k) * B (k,j) */
-			paend = Ap [k+1] ;
-			for (pa = Ap [k] ; pa < paend ; pa++)
-			{
-			    i = Ai [pa] ;	    /* nonzero entry A(i,k) */
-			    pc = Flag [i] ;
-			    if (pc < pcstart)
-			    {
-				pc = cnz++ ;
-				Flag [i] = pc ;
-				Ci [pc] = i ;		/* new entry C(i,j) */
-				/* C(i,j) = A(i,k)*B(k,j) */
-#ifndef UNSORTED
-				MULT (W [i], Wz [i], =) ;
-				needs_sorting = 1 ;
-#else
-				MULT (Cx [pc], Cz [pc], =) ;
-#endif
-			    }
-			    else
-			    {
-				/* C(i,j) += A(i,k)*B(k,j) */
-#ifndef UNSORTED
-				MULT (W [i], Wz [i], +=) ;
-#else
-				MULT (Cx [pc], Cz [pc], +=) ;
-#endif
-			    }
-			}
-		    }
-		}
-
-		/* ---------------------------------------------------------- */
-		/* sort the pattern of C(:,j) and gather the values of C(:,j) */
-		/* ---------------------------------------------------------- */
-
-#ifndef UNSORTED
-		/* Sort the row indices in C(:,j).  Use Cx as Int workspace.
-		 * This assumes sizeof (Int) < sizeof (double). If blen <= 1,
-		 * or if subsequent entries in B(:,j) appended entries onto C,
-		 * there is no need to sort C(:,j), assuming A is sorted. */
-		if (needs_sorting)
-		{
-		    mergesort (Ci + pcstart, (Int *) (Cx + pcstart),
-			cnz - pcstart) ;
-		}
-		for (pc = pcstart ; pc < cnz ; pc++)
-		{
-#if defined (ACOMPLEX) || defined (BCOMPLEX)
-		    i = Ci [pc] ;
-		    cij = W [i] ;		    /* get C(i,j) from W */
-		    czij = Wz [i] ;
-		    Cx [pc] = cij ;		    /* copy C(i,j) into C */
-		    Cz [pc] = czij ;
-#else
-		    cij = W [Ci [pc]] ;		    /* get C(i,j) from W */
-		    Cx [pc] = cij ;		    /* copy C(i,j) into C */
-#endif
-		    DROP_CHECK (cij, czij) ;	    /* check if C(i,j) == 0 */
-		}
-#endif
-	    }
-	}
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* free workspace */
-    /* ---------------------------------------------------------------------- */
-
-#ifndef UNSORTED
-    mxFree (W) ;
-#endif
-
-
-}
-
-#undef ACOMPLEX
-#undef BCOMPLEX
-#undef MULT
-#undef ASSIGN_BKJ
-#undef DROP_CHECK
diff --git a/SSMULT/ssmult_test.m b/SSMULT/ssmult_test.m
deleted file mode 100644
index d979156..0000000
--- a/SSMULT/ssmult_test.m
+++ /dev/null
@@ -1,115 +0,0 @@
-function ssmult_test
-%SSMULT_TEST tests ssmult, ssmultsym (sparse times sparse matrix multiply)
-%
-% Example:
-%   ssmult_test
-%
-% See also ssmult, ssmult_unsorted, ssmultsym, sstest, sstest2.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-fprintf ('Please wait while your new ssmult function is tested ...\n') ;
-
-ssmult_demo ;
-
-fprintf ('\ntesting large matrices (may fail if you are low on memory):\n') 
-rand ('state', 0) ;
-
-n = 10000 ;
-A = sprand (n, n, 0.01) ;
-B = sprand (n, n, 0.001) ;
-test_large (A,B) ;
-
-msg = { 'real', 'complex' } ;
-
-% all of these calls to ssmult should fail:
-fprintf ('\ntesting error handling (the errors below are expected):\n') ;
-A = { 3, 'gunk', sparse(1), sparse(1), sparse(rand(3,2)) } ;
-B = { 4,   0   , 5,         msg,       sparse(rand(3,4)) } ;
-for k = 1:length(A)
-    try
-	% the following statement is supposed to fail 
-	C = ssmult (A {k}, B {k}) ;					    %#ok
-	error ('test failed\n') ;
-    catch
-	disp (lasterr) ;
-    end
-end
-fprintf ('error handling tests: ok.\n') ;
-
-% err should be zero:
-rand ('state', 0)
-for Acomplex = 0:1
-    for Bcomplex = 0:1
-	err = 0 ;
-	fprintf ('\ntesting C = A*B where A is %s, B is %s\n', ...
-	    msg {Acomplex+1}, msg {Bcomplex+1}) ;
-	for m = [ 0:30 100 ]
-	    fprintf ('.') ;
-	    for n = [ 0:30 100 ]
-		for k = [ 0:30 100 ]
-		    A = sprand (m,k,0.1) ;
-		    if (Acomplex)
-			A = A + 1i*sprand (A) ;
-		    end
-		    B = sprand (k,n,0.1) ;
-		    if (Bcomplex)
-			B = B + 1i*sprand (B) ;
-		    end
-		    C = A*B ;
-		    D = ssmult (A,B) ;
-		    s = ssmultsym (A,B) ;
-		    err = max (err, norm (C-D,1)) ;
-		    err = max (err, nnz (C-D)) ;
-		    err = max (err, isreal (D) ~= (norm (imag (D), 1) == 0)) ;
-		    err = max (err, s.nz > nnz (C)) ;
-		    [i j x] = find (D) ;				    %#ok
-		    if (~isempty (x))
-			err = max (err, any (x == 0)) ;
-		    end
-		end
-	    end
-	end
-	fprintf (' maximum error: %g\n', err) ;
-    end
-end
-
-sstest ;
-fprintf ('\nSSMULT tests complete.\n') ;
-
-
-
-%-------------------------------------------------------------------------------
-function test_large (A,B)
-% test large matrices
-n = size (A,1) ;
-fprintf ('dimension %d   nnz(A): %d   nnz(B): %d\n', n, nnz (A), nnz (B)) ;
-c = ssmultsym (A,B) ;
-fprintf ('nnz(C): %d   flops: %g   memory: %g MB\n', ...
-    c.nz, c.flops, c.memory/2^20) ;
-try
-    % warmup for accurate timings
-    C = A*B ;								    %#ok
-    D = ssmult (A,B) ;							    %#ok
-    E = ssmult_unsorted (A,B) ;						    %#ok
-    tic ;
-    C = A*B ;
-    t1 = toc ;
-    tic ;
-    D = ssmult (A,B) ;
-    t2 = toc ;
-    tic ;
-    E = ssmult_unsorted (A,B) ;
-    t3 = toc ;
-    E = E'' ;			    % sort E, to be safe ...
-    fprintf ('MATLAB time:          %g\n', t1) ;
-    err = norm (C-D,1) ;
-    fprintf ('SSMULT time:          %g err: %g\n', t2, err) ;
-    err = norm (C-E,1) ;
-    fprintf ('SSMULT_UNSORTED time: %g err: %g\n', t3, err) ;
-catch
-    disp (lasterr)
-    fprintf ('tests with large random matrices failed ...\n') ;
-end
-clear C D E
-
diff --git a/SSMULT/ssmult_unsorted.m b/SSMULT/ssmult_unsorted.m
deleted file mode 100644
index 8bde44b..0000000
--- a/SSMULT/ssmult_unsorted.m
+++ /dev/null
@@ -1,37 +0,0 @@
-function C = ssmult_unsorted (A,B)					    %#ok
-%SSMULT_UNSORTED multiplies two sparse matrices, returning non-standard result.
-% C = ssmult_unsorted (A,B) computes C=A*B where A and B are sparse.  It returns
-% C with unsorted row indices in its columns, and possibly with explicit zero
-% entries due to numeric cancellation.  This does *NOT* conform to the MATLAB
-% standard (as of MATLAB 7.4 ...) for MATLAB sparse matrices.  However, such
-% matrices are often safe to use in subsequent operations (such as C*X where 
-% X is a full matrix).   Computing C'' (a double transpose) gives a sorted
-% result.  This function is typically MUCH faster than C=A*B in MATLAB 7.4, and
-% uses less memory.  Either A or B, or both, can be complex.  Only matrices of
-% class "double" are supported.  The primary reason for this function is to
-% demonstrate how much performance MATLAB loses by insisting on keeping its
-% sparse matrices sorted.
-%
-% *** USE AT YOUR OWN RISK.  USE SSMULT TO BE SAFE. ***
-%
-% Example:
-%   load west0479
-%   A = west0479 ;
-%   B = sprand (west0479) ;
-%   tic ; C = A*B ; toc
-%   tic ; D = ssmult_unsorted (A,B) ; toc
-%   C-D
-%
-% To see that the result D from ssmult_unsorted has unsorted columns:
-%
-%   spparms ('spumoni', 1)
-%   colamd (D) ;
-%   spparms ('spumoni', 0)
-%
-% See also ssmult, ssmultsym, mtimes.
-%
-% *** USE AT YOUR OWN RISK.  USE SSMULT TO BE SAFE. ***
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-error ('ssmult_unsorted mexFunction not found') ;
diff --git a/SSMULT/ssmultsym.c b/SSMULT/ssmultsym.c
deleted file mode 100644
index 441ec3e..0000000
--- a/SSMULT/ssmultsym.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* ========================================================================== */
-/* === ssmultsym ============================================================ */
-/* ========================================================================== */
-
-/* s = ssmultsym (A,B) computes nnz(A*B), and the flops and memory required to
- * compute it, where A and B are both sparse.  Either A or B, or both, can be
- * complex.  Memory usage includes C itself, and workspace.  If C is m-by-n,
- * ssmultsym requires only 4*m bytes for 32-bit MATLAB, 8*m for 64-bit MATLAB.
- *
- * Copyright 2007, Timothy A. Davis, University of Florida.
- */
-
-#include "ssmult.h"
-
-/* -------------------------------------------------------------------------- */
-/* ssmultsym mexFunction */
-/* -------------------------------------------------------------------------- */
-
-void mexFunction
-(
-    int nargout,
-    mxArray *pargout [ ],
-    int nargin,
-    const mxArray *pargin [ ]
-)
-{
-    double cnz, flops, mem, e, multadds ;
-    Int *Ap, *Ai, *Bp, *Bi, *Flag ;
-    Int Anrow, Ancol, Bnrow, Bncol, i, j, k, pb, pa, pbend, paend, mark,
-	A_is_complex, B_is_complex, C_is_complex, pbstart, cjnz ;
-    static const char *snames [ ] =
-    {
-	"nz",		/* # of nonzeros in C=A*B */
-	"flops",	/* flop count required to compute C=A*B */
-	"memory"	/* memory requirement in bytes */
-    } ;
-
-    /* ---------------------------------------------------------------------- */
-    /* get inputs and workspace */
-    /* ---------------------------------------------------------------------- */
-
-    if (nargin != 2 || nargout > 1)
-    {
-	mexErrMsgTxt ("Usage: s = ssmultsym (A,B)") ;
-    }
-
-    Ap = mxGetJc (pargin [0]) ;
-    Ai = mxGetIr (pargin [0]) ;
-    Anrow = mxGetM (pargin [0]) ;
-    Ancol = mxGetN (pargin [0]) ;
-    A_is_complex = mxIsComplex (pargin [0]) ;
-
-    Bp = mxGetJc (pargin [1]) ;
-    Bi = mxGetIr (pargin [1]) ;
-    Bnrow = mxGetM (pargin [1]) ;
-    Bncol = mxGetN (pargin [1]) ;
-    B_is_complex = mxIsComplex (pargin [1]) ;
-
-    if (Ancol != Bnrow || !mxIsSparse (pargin [0]) || !mxIsSparse (pargin [1]))
-    {
-	mexErrMsgTxt ("wrong dimensions, or A and B not sparse") ;
-    }
-
-#ifndef MATLAB_6p1_OR_EARLIER
-    if (!mxIsDouble (pargin [0]) || !mxIsDouble (pargin [1]))
-    {
-	mexErrMsgTxt ("A and B must be of class 'double'") ;
-    }
-#endif
-
-    Flag = mxCalloc (Anrow, sizeof (Int)) ;	/* workspace */
-
-    /* ---------------------------------------------------------------------- */
-    /* compute # of nonzeros in result, flop count, and memory */
-    /* ---------------------------------------------------------------------- */
-
-    pb = 0 ;
-    cnz = 0 ;
-    multadds = 0 ;
-    for (j = 0 ; j < Bncol ; j++)	/* compute C(:,j) */
-    {
-	mark = j+1 ;
-	pbstart = Bp [j] ;
-	pbend = Bp [j+1] ;
-	cjnz = 0 ;
-	for ( ; pb < pbend ; pb++)
-	{
-	    k = Bi [pb] ;		/* nonzero entry B(k,j) */
-	    pa = Ap [k] ;
-	    paend = Ap [k+1] ;
-	    multadds += (paend - pa) ;	/* one mult-add per entry in A(:,k) */
-	    if (cjnz == Anrow)
-	    {
-		/* C(:,j) is already completely dense; no need to scan A.
-		 * Continue scanning B(:,j) to compute flop count. */
-		continue ;
-	    }
-	    for ( ; pa < paend ; pa++)
-	    {
-		i = Ai [pa] ;		/* nonzero entry A(i,k) */
-		if (Flag [i] != mark)
-		{
-		    /* C(i,j) is a new nonzero */
-		    Flag [i] = mark ;	/* mark i as appearing in C(:,j) */
-		    cjnz++ ;
-		}
-	    }
-	}
-	cnz += cjnz ;
-    }
-
-    C_is_complex = A_is_complex || B_is_complex ;
-    e = (C_is_complex ? 2 : 1) ;
-
-    mem =
-	Anrow * sizeof (Int)		/* Flag */
-#ifndef UNSORTED
-	/* the workspace W is not required if C is returned unsorted */
-	+ e * Anrow * sizeof (double)	/* W */
-#endif
-	+ (Bncol+1) * sizeof (Int)	/* Cp */
-	+ cnz * sizeof (Int)		/* Ci */
-	+ e * cnz * sizeof (double) ;	/* Cx and Cx */
-
-    if (A_is_complex)
-    {
-	if (B_is_complex)
-	{
-	    /* all of C, A, and B are complex */
-	    flops = 8 * multadds - 2 * cnz ;
-	}
-	else
-	{
-	    /* C and A are complex, B is real */
-	    flops = 4 * multadds - 2 * cnz ;
-	}
-    }
-    else
-    {
-	if (B_is_complex)
-	{
-	    /* C and B are complex, A is real */
-	    flops = 4 * multadds - 2 * cnz ;
-	}
-	else
-	{
-	    /* all of C, A, and B are real */
-	    flops = 2 * multadds - cnz ;
-	}
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* return result */
-    /* ---------------------------------------------------------------------- */
-
-    pargout [0] = mxCreateStructMatrix (1, 1, 3, snames) ;
-    mxSetFieldByNumber (pargout [0], 0, 0, mxCreateScalarDouble (cnz)) ;
-    mxSetFieldByNumber (pargout [0], 0, 1, mxCreateScalarDouble (flops)) ;
-    mxSetFieldByNumber (pargout [0], 0, 2, mxCreateScalarDouble (mem)) ;
-}
diff --git a/SSMULT/ssmultsym.m b/SSMULT/ssmultsym.m
deleted file mode 100644
index e3f047b..0000000
--- a/SSMULT/ssmultsym.m
+++ /dev/null
@@ -1,33 +0,0 @@
-function s = ssmultsym (A,B)						    %#ok
-%SSMULTSYM computes nnz(C), memory, and flops to compute C=A*B; A and B sparse.
-% s = ssmultsym (A,B) returns a struct s with the following fields:
-%
-%   s.nz            nnz (A*B), assuming no numerical cancelation
-%   s.flops         flops required to compute C=A*B
-%   s.memory        memory required to compute C=A*B, including C itself.
-%
-% Either A or B, or both, can be complex.  Only matrices of class "double" are
-% supported.  If i is the size of an integer (4 bytes on 32-bit MATLAB, 8 bytes
-% on 64-bit MATLAB) and x is the size of an entry (8 bytes if real, 16 if
-% complex), and [m n]=size(C), then the memory usage of SSMULT is
-% (i+x)*nnz(C) + i*(n+1) for C itself, and (i+x)*m for temporary workspace.
-% SSMULTSYM itself does not compute C, and uses only i*m workspace.
-%
-% Example:
-%   load west0479
-%   A = west0479 ;
-%   B = sprand (west0479) ;
-%   C = A*B ;
-%   D = ssmult (A,B) ;
-%   C-D
-%   ssmultsym (A,B)
-%   nnz (C)
-%   whos ('C')
-%   [m n] = size (C)
-%   mem = 12*nnz(C) + 4*(n+1) + (12*m)          % assuming real, 32-bit MATLAB
-%
-% See also ssmult, mtimes.
-
-% Copyright 2007, Timothy A. Davis, University of Florida
-
-error ('ssmultsym mexFunction not found') ;
diff --git a/SSMULT/sstest.m b/SSMULT/sstest.m
deleted file mode 100644
index 422e4b6..0000000
--- a/SSMULT/sstest.m
+++ /dev/null
@@ -1,163 +0,0 @@
-function sstest
-%SSTEST exhaustive performance test for SSMULT.
-%
-% Example
-%   sstest
-%
-% See also ssmult, ssmultsym, ssmult_unsorted, ssmult_install, sstest2, mtimes.
-
-% Copyright 2007, Timothy A. Davis, University of Florida.
-
-N = [500:50:1000 1100:100:3000 3200:200:5000 ] ;
-
-rand ('state',0) ;
-
-% warmup for more accurate timings
-A = sparse (1) ;
-B = sparse (1) ;
-C = A*B ;
-D = ssmult(A,B) ;
-err = norm (C-D,1) ;
-if (err > 0)
-    error ('test failure') ;
-end
-clear C D
-
-titles = { ...
-    'C=A*B blue, C=B*A red, both real', ...
-    'A real, B complex', 'A complex, B real', 'both complex' } ;
-
-xlabels = { '(A random, B diagonal)', '(A random, B permutation)', ...
-    '(A random, B tridiagonal)' } ;
-
-fprintf ('\nIn the next plots, speedup is the time for MATLAB C=A*B divided\n');
-fprintf ('by the time for C=ssmult(A,B).  The X-axis is n, the dimension\n') ;
-fprintf ('of the square matrices A and B.  A is a sparse random matrix with\n');
-fprintf ('1%% nonzero values.  B is diagonal in the first row of plots,\n') ;
-fprintf ('a permutation in the 2nd row, and tridiagonal in the third.\n') ;
-fprintf ('C=A*B is in blue, C=B*A is in red.  A and B are both real in the\n') ;
-fprintf ('first column of plots, B is complex in the 2nd, A in the 3rd, and\n');
-fprintf ('both are complex in the 4th column of plots.  You will want to\n') ;
-fprintf ('maximize the figure; otherwise the text is too hard to read.\n') ; 
-
-tlim = 0.1 ;
-figure (1) ;
-clf ;
-
-for fig = 1:3
-
-    fprintf ('Testing C=A*B and C=B*A %s\n', xlabels {fig}) ;
-
-    T = zeros (length(N),4,4) ;
-
-    for k = 1:length(N)
-
-	n = N (k) ;
-	try
-
-	    A = sprand (n,n,0.01) ;
-	    if (fig == 1)
-		% B diagonal
-		B = spdiags (rand (n,1), 0, n, n) ;
-	    elseif (fig == 2)
-		% B permutation
-		B = spdiags (rand (n,1), 0, n, n) ;
-		B = B (:,randperm(n)) ;
-	    else
-		% B tridiagonal
-		B = spdiags (rand (n,3), -1:1, n, n) ;
-	    end
-
-	    for kind = 1:4
-
-		if (kind == 2)
-		    % A complex, B real
-		    A = A + 1i*sprand (A) ;
-		elseif (kind == 3)
-		    % A real, B complex
-		    A = real (A) ;
-		    B = B + 1i*sprand (B) ;
-		elseif (kind == 4)
-		    % both complex
-		    A = A + 1i*sprand (A) ;
-		    B = B + 1i*sprand (B) ;
-		end
-
-		t1 = 0 ;
-		trials = 0 ;
-		tic
-		while (t1 < tlim)
-		    C = A*B ;
-		    trials = trials + 1 ;
-		    t1 = toc ;
-		end
-		t1 = t1 / trials ;
-
-		t2 = 0 ;
-		trials = 0 ;
-		tic
-		while (t2 < tlim)
-		    D = ssmult (A,B) ;
-		    trials = trials + 1 ;
-		    t2 = toc ;
-		end
-		t2 = t2 / trials ;
-
-		err = norm (C-D,1) ;
-		if (err > 0)
-		    error ('test failure') ;
-		end
-		clear C
-		clear D
-
-		t3 = 0 ;
-		trials = 0 ;
-		tic
-		while (t3 < tlim)
-		    C = B*A ;
-		    trials = trials + 1 ;
-		    t3 = toc ;
-		end
-		t3 = t3 / trials ;
-
-		t4 = 0 ;
-		trials = 0 ;
-		tic
-		while (t4 < tlim)
-		    D = ssmult (B,A) ;
-		    trials = trials + 1 ;
-		    t4 = toc ;
-		end
-		t4 = t4 / trials ;
-
-		err = norm (C-D,1) ;
-		if (err > 0)
-		    error ('test failure') ;
-		end
-		clear C
-		clear D
-
-		T (k,kind,1) = t1 ;
-		T (k,kind,2) = t2 ;
-		T (k,kind,3) = t3 ;
-		T (k,kind,4) = t4 ;
-		subplot (3,4,kind + 4*(fig-1)) ;
-		plot (N(1:k), T (1:k,kind,1) ./ T (1:k,kind,2), 'o', ...
-		      N(1:k), T (1:k,kind,3) ./ T (1:k,kind,4), 'rx', ...
-		      [N(1) n], [1 1], 'k') ;
-		xlabel (['n ' xlabels{fig}]) ;
-		ylabel ('speedup') ;
-		axis tight
-		title (titles {kind}) ;
-		drawnow
-
-	    end
-
-	catch
-	    % probably because we ran out of memory ...
-	    disp (lasterr) ;
-	    break ;
-	end
-    end
-end
-
diff --git a/SSMULT/sstest2.m b/SSMULT/sstest2.m
deleted file mode 100644
index 89f2dea..0000000
--- a/SSMULT/sstest2.m
+++ /dev/null
@@ -1,215 +0,0 @@
-function sstest2
-%SSTEST2 exhaustive performance test for SSMULT.  Requires UFget.
-% UFget is available at http://www.cise.ufl.edu/research/sparse, or in MATLAB
-% Central.
-%
-% Example
-%   sstest2
-%
-% See also ssmult, ssmultsym, ssmult_unsorted, ssmult_install, sstest, UFget, mtimes.
-
-% Copyright 2007, Timothy A. Davis, University of Florida.
-
-help sstest2
-
-try
-    index = UFget ;
-catch
-    fprintf ('\nsstest2 requires UFget.\n') ;
-    fprintf ('see http://www.cise.ufl.edu/research/sparse\n') ;
-    return ;
-end
-[ignore, f] = sort (index.nnz) ;					    %#ok
-
-nmat = length (f) ;
-TM = zeros (nmat, 4) ;
-T1 = zeros (nmat, 4) ;
-TU = zeros (nmat, 4) ;
-tlim = 0.01 ;
-
-tmin = 1 ;
-tmax = 0 ;
-
-check = 1 ;
-rand ('state', 0)
-
-for k = 1:nmat
-
-    Prob = UFget (f (k), index) ;
-    A = Prob.A ;
-    clear Prob
-
-    for kind = 1:4
-
-	try
-	    if (~isreal (A))
-		A = spones (A) ;
-	    end
-	    B = A' ;
-
-	    if (kind == 2)
-		A = sprand (A) + 1i*sprand(A) ;
-		B = sprand (B) ;
-	    elseif (kind == 3)
-		A = sprand (A) ;
-		B = sprand (B) + 1i*sprand(B) ;
-	    elseif (kind == 4)
-		A = sprand (A) + 1i*sprand(A) ;
-		B = sprand (B) + 1i*sprand(B) ;
-	    end
-
-	    C = A*B	; % warmup
-
-	    if (check)
-
-		D = ssmult (A,B) ;
-		err = norm (C-D,1) ;
-		if (err > 0)
-		    fprintf ('err: %g\n', err) ;
-		    error ('!')
-		end
-		clear D
-
-		D = ssmult_unsorted (A,B) ;
-		err = norm (C-D,1) ;
-		if (err > 0)
-		    fprintf ('err: %g\n', err) ;
-		    error ('!')
-		end
-		clear D
-
-	    else
-
-		% warmup, for accurate timings
-		C = ssmult_unsorted (A,B) ;				    %#ok
-		C = ssmult (A,B) ;					    %#ok
-		clear C
-
-	    end
-
-	    tr = 0 ;
-	    tm = 0 ;
-	    tic
-	    while (tm < tlim)
-		C = A*B ;						    %#ok
-		clear C
-		tr = tr + 1 ;
-		tm = toc ;
-	    end
-	    tm = tm / tr ;
-
-	    tr = 0 ;
-	    t1 = 0 ;
-	    tic
-	    while (t1 < tlim)
-		C = ssmult (A,B) ;					    %#ok
-		clear C
-		tr = tr + 1 ;
-		t1 = toc ;
-	    end
-	    t1 = t1 / tr ;
-
-	    tr = 0 ;
-	    tu = 0 ;
-	    tic
-	    while (tu < tlim)
-		C = ssmult_unsorted (A,B) ;				    %#ok
-		clear C
-		tr = tr + 1 ;
-		tu = toc ;
-	    end
-	    tu = tu / tr ;
-
-	    fprintf ('%4d: %4d ', k, f(k)) ;
-	    fprintf (...
-	    'MATLAB %12.6f SSMULT %12.6f  unsorted %12.6f speedup %12.3f', ....
-		tm, t1, tu, tm / t1) ;
-	    
-	    if (tm < t1)
-		fprintf (' ****') ;
-	    end
-	    fprintf ('\n') ;
-
-	    TM (k,kind) = tm ;
-	    T1 (k,kind) = t1 ;
-	    TU (k,kind) = tu ;
-
-	    tmin = min (tmin, tm) ;
-	    tmax = max (tmax, tm) ;
-
-	catch
-	    disp (lasterr)
-	    TM (k,kind) = 1 ;
-	    T1 (k,kind) = 1 ;
-	    TU (k,kind) = 1 ;
-	end
-
-    end
-
-    for kind = 1:4
-
-	subplot (2,4,kind) ;
-	r = TM (1:k,kind) ./ T1 (1:k,kind) ;
-	rmin = min (r) ;
-	rmax = max (r) ;
-	loglog (TM (1:k,kind), r, 'o', ...
-	    [tmin tmax], [1 1], 'r-', ...
-	    [tmin tmax], [1.1 1.1], 'r-', ...
-	    [tmin tmax], [1/1.1 1/1.1], 'r-', ...
-	    [tmin tmax], [2 2], 'g-', ...
-	    [tmin tmax], [1.5 1.5], 'g-', ...
-	    [tmin tmax], [1/1.5 1/1.5], 'g-', ...
-	    [tmin tmax], [.5 .5], 'g-' );
-	if (k > 2)
-	    axis ([tmin tmax rmin rmax]) ;
-	end
-	xlabel ('MATLAB time') ; 
-	ylabel ('MATLAB/SM time') ; 
-	if (kind == 1)
-	    title ('real*real') ;
-	elseif (kind == 2)
-	    title ('complex*real') ;
-	elseif (kind == 3)
-	    title ('real*complex') ;
-	elseif (kind == 4)
-	    title ('complex*complex') ;
-	end
-
-	subplot (2,4,kind+4) ;
-	r = T1 (1:k,kind) ./ TU (1:k,kind) ;
-	rmin = min (r) ;
-	rmax = max (r) ;
-	loglog (TM (1:k,kind), r, 'o', ...
-	    [tmin tmax], [1 1], 'r-', ...
-	    [tmin tmax], [1.1 1.1], 'r-', ...
-	    [tmin tmax], [1/1.1 1/1.1], 'r-', ...
-	    [tmin tmax], [2 2], 'g-', ...
-	    [tmin tmax], [1.5 1.5], 'g-', ...
-	    [tmin tmax], [1/1.5 1/1.5], 'g-', ...
-	    [tmin tmax], [.5 .5], 'g-' );
-	if (k > 2)
-	    axis ([tmin tmax rmin rmax]) ;
-	end
-	xlabel ('MATLAB time') ; 
-	ylabel ('SSMULT/unsorted time') ; 
-	if (kind == 1)
-	    title ('real*real') ;
-	elseif (kind == 2)
-	    title ('complex*real') ;
-	elseif (kind == 3)
-	    title ('real*complex') ;
-	elseif (kind == 4)
-	    title ('complex*complex') ;
-	end
-
-    end
-
-    drawnow
-
-    clear A B C
-    save sstest2_results.mat TM T1 TU f
-    diary off
-    diary on
-
-end
-
diff --git a/SuiteSparse_GPURuntime/Doc/ChangeLog b/SuiteSparse_GPURuntime/Doc/ChangeLog
new file mode 100644
index 0000000..2e15935
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Doc/ChangeLog
@@ -0,0 +1,3 @@
+Oct 17, 2014: version 1.0.0
+
+    * first stable release
diff --git a/SSMULT/gpl.txt b/SuiteSparse_GPURuntime/Doc/gpl.txt
similarity index 100%
rename from SSMULT/gpl.txt
rename to SuiteSparse_GPURuntime/Doc/gpl.txt
diff --git a/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp
new file mode 100644
index 0000000..111ceff
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp
@@ -0,0 +1,32 @@
+// =============================================================================
+// === SuiteSparse_GPURuntime/Include/SuiteSparse_GPURuntime.hpp ===============
+// =============================================================================
+
+#ifndef SUITESPARSEGPU_RUNTIME_HPP
+#define SUITESPARSEGPU_RUNTIME_HPP
+
+#include "cuda_runtime.h"
+#include "SuiteSparse_config.h"
+
+#include <stdlib.h>
+
+#include "SuiteSparseGPU_macros.hpp"
+
+#if DEBUG_ATLEAST_ERRORONLY
+#include <stdio.h>
+#endif
+
+class Workspace;
+
+#include "SuiteSparseGPU_Workspace.hpp"
+
+// Version information:
+#define SUITESPARSE_GPURUNTIME_DATE "Oct 1, 2014"
+#define SUITESPARSE_GPURUNTIME_VER_CODE(main,sub) ((main) * 1000 + (sub))
+#define SUITESPARSE_GPURUNTIME_MAIN_VERSION 1
+#define SUITESPARSE_GPURUNTIME_SUB_VERSION 0
+#define SUITESPARSE_GPURUNTIME_SUBSUB_VERSION 0
+#define SUITESPARSE_GPURUNTIME_VERSION \
+    SUITESPARSE_GPURUNTIME_VER_CODE(SUITESPARSE_GPURUNTIME_MAIN_VERSION,SUITESPARSE_GPURUNTIME_SUB_VERSION)
+
+#endif
diff --git a/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Workspace.hpp b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Workspace.hpp
new file mode 100644
index 0000000..b135b54
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Workspace.hpp
@@ -0,0 +1,110 @@
+// =============================================================================
+// === SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Workspace.hpp =============
+// =============================================================================
+
+#ifndef SUITESPARSE_GPURUNTIME_WORKSPACE_HPP
+#define SUITESPARSE_GPURUNTIME_WORKSPACE_HPP
+
+#include "SuiteSparseGPU_Runtime.hpp"
+
+class Workspace
+{
+private:
+
+    size_t nitems;          // number of items to allocate
+    size_t size_of_item;    // size of each item, in bytes
+    size_t totalSize;       // nitems * size_of_item
+
+//  bool lazyAllocate;      // no longer used (for possible future use)
+    bool pageLocked;        // true if CPU memory is pagelocked
+
+    void *cpuReference;     // pointer to CPU memory
+    void *gpuReference;     // pointer to GPU memory
+
+public:
+    // Read-Only Properties
+    size_t getCount(void){ return nitems; }
+    size_t getStride(void){ return size_of_item; }
+    void *cpu(void){ return cpuReference; }
+    void *gpu(void){ return gpuReference; }
+
+    // Constructor/Destructor
+    void *operator new(size_t bytes, Workspace* ptr){ return ptr; }
+    Workspace(size_t nitems, size_t size_of_item);
+    ~Workspace();
+
+    // Memory management wrappers
+    static void *cpu_malloc(size_t nitems, size_t size_of_item,
+        bool pageLocked=false);
+    static void *cpu_calloc(size_t nitems, size_t size_of_item,
+        bool pageLocked=false);
+    static void *cpu_free(void *address, bool pageLocked = false);
+    static void *gpu_malloc(size_t nitems, size_t size_of_item);
+    static void *gpu_calloc(size_t nitems, size_t size_of_item);
+    static void *gpu_free(void *);
+
+    // Workspace management
+    static Workspace *allocate
+    (
+        size_t nitems,              // number of items to allocate
+        size_t size_of_item,        // size of each item, in bytes
+        bool doCalloc = false,      // if true, then calloc; else malloc
+        bool cpuAlloc = true,       // if true, then allocate CPU memory
+        bool gpuAlloc = true,       // if true, then allocate GPU memory
+        bool pageLocked = false     // true if CPU memory is pagelocked
+    );
+
+    // destroy workspace, freeing memory on both the CPU and GPU
+    static Workspace *destroy
+    (
+        Workspace *address
+    );
+
+    // Reference manipulation functions
+    template <typename T> void extract(T *cpu_arg, T *gpu_arg)
+    {
+        *cpu_arg = (T) cpuReference;
+        *gpu_arg = (T) gpuReference;
+    }
+    void assign(void *cpu_arg, void *gpu_arg)
+    {
+        cpuReference = cpu_arg;
+        gpuReference = gpu_arg;
+    }
+
+//  unused, left commented out for possible future use
+//  void setLazy()
+//  {
+//      lazyAllocate = true;
+//  }
+
+    // Memory management for workspaces
+    virtual bool ws_malloc(bool cpuAlloc = true, bool gpuAlloc = true);
+    virtual bool ws_calloc(bool cpuAlloc = true, bool gpuAlloc = true);
+    virtual void ws_free(bool cpuFree=true, bool gpuFree=true);
+
+    // GPU-CPU transfer routines
+    virtual bool transfer(cudaMemcpyKind direction, bool synchronous=true,
+        cudaStream_t stream=0);
+
+    // CPU & GPU memory functions
+    // memset functions unused, left commented out for possible future use
+    // bool gpu_memset(size_t newValue);
+    // bool cpu_memset(size_t newValue);
+
+    // Debug
+#if DEBUG_ATLEAST_ERRORONLY
+    static void print(Workspace *workspace)
+    {
+        printf (
+            "(%ld,%ld) has %ld entries of size %ld each.\n",
+            (size_t) workspace->cpu(),
+            (size_t) workspace->gpu(),
+            workspace->getCount(),
+            workspace->getStride()
+        );
+    }
+#endif
+};
+
+#endif
diff --git a/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_debug.hpp b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_debug.hpp
new file mode 100644
index 0000000..5efa319
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_debug.hpp
@@ -0,0 +1,43 @@
+// =============================================================================
+// === SuiteSparse_GPURuntime/Include/SuiteSparseGPU_debug.hpp =================
+// =============================================================================
+
+#ifndef SUITESPARSE_GPURUNTIME_DEBUG_HPP
+#define SUITESPARSE_GPURUNTIME_DEBUG_HPP
+
+#define GPURUNTIME_DLEVEL_OFF         0
+#define GPURUNTIME_DLEVEL_ERRORONLY   1
+#define GPURUNTIME_DLEVEL_CASUAL      2
+#define GPURUNTIME_DLEVEL_VERBOSE     3
+#define GPURUNTIME_DLEVEL_EXTREME     4
+
+//------------------------------------------------------------------------------
+// force debugging off
+//------------------------------------------------------------------------------
+
+#ifndef NDEBUG
+#define NDEBUG
+#endif
+
+// uncomment this line to turn on debugging
+// #undef NDEBUG
+
+//------------------------------------------------------------------------------
+
+#ifndef NDEBUG
+#define GPURUNTIME_DLEVEL       GPURUNTIME_DLEVEL_CASUAL
+#else
+// no debugging
+#define GPURUNTIME_DLEVEL       GPURUNTIME_DLEVEL_OFF
+#endif
+
+#define DEBUG_ATLEAST_ERRORONLY (GPURUNTIME_DLEVEL >= GPURUNTIME_DLEVEL_ERRORONLY)
+#define DEBUG_ATLEAST_CASUAL    (GPURUNTIME_DLEVEL >= GPURUNTIME_DLEVEL_CASUAL)
+#define DEBUG_ATLEAST_VERBOSE   (GPURUNTIME_DLEVEL >= GPURUNTIME_DLEVEL_VERBOSE)
+#define DEBUG_ATLEAST_EXTREME   (GPURUNTIME_DLEVEL >= GPURUNTIME_DLEVEL_EXTREME)
+
+#ifndef GPURUNTIME_LOGFILE_PATH
+#define GPURUNTIME_LOGFILE_PATH "SuiteSparse_GPURuntime-logfile.txt"
+#endif
+
+#endif
diff --git a/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_macros.hpp b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_macros.hpp
new file mode 100644
index 0000000..b3f9085
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_macros.hpp
@@ -0,0 +1,15 @@
+// =============================================================================
+// === SuiteSparse_GPURuntime/Include/SuiteSparseGPU_macros.hpp ================
+// =============================================================================
+
+#ifndef SUITESPARSE_GPURUNTIME_MACROS_HPP
+#define SUITESPARSE_GPURUNTIME_MACROS_HPP
+
+#ifndef IMPLIES
+#define IMPLIES(p,q)    (!(p) || ((p) && (q)))
+#endif
+
+#include "SuiteSparseGPU_debug.hpp"
+#include "SuiteSparseGPU_workspace_macros.hpp"
+
+#endif
diff --git a/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_workspace_macros.hpp b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_workspace_macros.hpp
new file mode 100644
index 0000000..284cf90
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_workspace_macros.hpp
@@ -0,0 +1,18 @@
+// =============================================================================
+// SuiteSparse_GPURuntime/Include/SuiteSparseGPU_workspace_macros.hpp
+// =============================================================================
+
+#ifndef SUITESPARSE_GPURUNTIME_WORKSPACE_MACROS_HPP
+#define SUITESPARSE_GPURUNTIME_WORKSPACE_MACROS_HPP
+
+#ifndef GPU_REFERENCE
+#define GPU_REFERENCE(WORKSPACE, TYPE) \
+    ((TYPE) (WORKSPACE != NULL ? (WORKSPACE)->gpu() : NULL))
+#endif
+
+#ifndef CPU_REFERENCE
+#define CPU_REFERENCE(WORKSPACE, TYPE) \
+    ((TYPE) (WORKSPACE != NULL ? (WORKSPACE)->cpu() : NULL))
+#endif
+
+#endif
diff --git a/SuiteSparse_GPURuntime/Lib/Makefile b/SuiteSparse_GPURuntime/Lib/Makefile
new file mode 100644
index 0000000..bea188f
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Lib/Makefile
@@ -0,0 +1,51 @@
+#-------------------------------------------------------------------------------
+# SuiteSparse_GPURuntime/Lib/Makfile
+#-------------------------------------------------------------------------------
+
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+OBJS = SuiteSparseGPU_Workspace.o                     \
+       SuiteSparseGPU_Workspace_cpuAllocators.o       \
+       SuiteSparseGPU_Workspace_gpuAllocators.o       \
+       SuiteSparseGPU_Workspace_transfer.o
+
+INC = -I../Include -I../../SuiteSparse_config
+LIBS = $(CUDART_LIB)
+
+H = \
+        ../Include/SuiteSparseGPU_Workspace.hpp \
+        ../Include/SuiteSparseGPU_debug.hpp \
+        ../Include/SuiteSparseGPU_macros.hpp \
+        ../Include/SuiteSparseGPU_workspace_macros.hpp \
+        ../Include/SuiteSparseGPU_Runtime.hpp \
+        Makefile
+
+#-------------------------------------------------------------------------------
+
+all: runtime
+
+library: runtime
+
+lib: runtime
+
+clean:
+	$(RM) -f *.o
+
+purge: clean
+	$(RM) -f libSuiteSparse_GPURuntime.a
+
+runtime: $(OBJS)
+	$(AR) -r "libSuiteSparse_GPURuntime.a" $(OBJS)
+
+SuiteSparseGPU_Workspace.o: ../Source/SuiteSparseGPU_Workspace.cpp $(H)
+	$(NVCC) -c $(INC) $<
+
+SuiteSparseGPU_Workspace_cpuAllocators.o: ../Source/SuiteSparseGPU_Workspace_cpuAllocators.cpp $(H)
+	$(NVCC) -c $(INC) $<
+
+SuiteSparseGPU_Workspace_gpuAllocators.o: ../Source/SuiteSparseGPU_Workspace_gpuAllocators.cpp $(H)
+	$(NVCC) -c $(INC) $<
+
+SuiteSparseGPU_Workspace_transfer.o: ../Source/SuiteSparseGPU_Workspace_transfer.cpp $(H)
+	$(NVCC) -c $(INC) $<
+
diff --git a/SuiteSparse_GPURuntime/Makefile b/SuiteSparse_GPURuntime/Makefile
new file mode 100644
index 0000000..d4f9eeb
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Makefile
@@ -0,0 +1,40 @@
+#-------------------------------------------------------------------------------
+# SuiteSparse_GPURuntime Makefile
+#-------------------------------------------------------------------------------
+
+VERSION = 1.0.0
+
+default: all
+
+include ../SuiteSparse_config/SuiteSparse_config.mk
+
+# Compile the C-callable libraries only (there is no Demo for this package)
+all: library
+
+# Compile the C-callable libraries only.
+library:
+	( cd Lib ; $(MAKE) )
+
+# Remove all files not in the original distribution
+purge:
+	( cd Lib ; $(MAKE) purge )
+
+# Remove all files not in the original distribution, except keep the 
+# compiled libraries.
+clean:
+	( cd Lib ; $(MAKE) clean )
+
+distclean: purge
+
+ccode: all
+
+# install SuiteSparse_GPURuntime (just the library, not the include files)
+install:
+	$(CP) Lib/libSuiteSparse_GPURuntime.a $(INSTALL_LIB)/libSuiteSparse_GPURuntime.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libSuiteSparse_GPURuntime.$(VERSION).a libSuiteSparse_GPURuntime.a )
+	chmod 644 $(INSTALL_LIB)/libSuiteSparse_GPURuntime*.a
+
+# uninstall SuiteSparse_GPURuntime
+uninstall:
+	$(RM) $(INSTALL_LIB)/libSuiteSparse_GPURuntime*.a
+
diff --git a/SuiteSparse_GPURuntime/README.txt b/SuiteSparse_GPURuntime/README.txt
new file mode 100644
index 0000000..e3d398d
--- /dev/null
+++ b/SuiteSparse_GPURuntime/README.txt
@@ -0,0 +1,28 @@
+SuiteSparse_GPURuntime Copyright (c) 2013, Timothy A. Davis,
+Sencer Nuri Yeralan, and Sanjay Ranka.  http://www.suitesparse.com
+
+SuiteSparse_GPURuntime provides helper functions for the GPU.
+
+FOR LINUX/UNIX/Mac USERS who want to use the C++ callable library:
+
+    To compile the SuiteSparse_GPURuntime C++ library, in the Unix shell, do:
+
+        cd Lib ; make
+
+    or just 'make' in this directory.
+
+--------------------------------------------------------------------------------
+
+SuiteSparse_GPURuntime is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option) any
+later version.
+
+SuiteSparse_GPURuntime is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+details.
+
+You should have received a copy of the GNU General Public License along with
+this Module; if not, write to the Free Software Foundation, Inc., 51 Franklin
+Street, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace.cpp b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace.cpp
new file mode 100644
index 0000000..6f3745f
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace.cpp
@@ -0,0 +1,153 @@
+// =============================================================================
+// === SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace.cpp ==============
+// =============================================================================
+
+// The SuiteSparse_GPURuntime Workspace provides a convenient way to allocate
+// and free memory on the CPU and/or GPU, and to transfer data between the
+// CPU and GPU.
+
+#include "SuiteSparseGPU_Runtime.hpp"
+
+// -----------------------------------------------------------------------------
+// Workspace constructor
+// -----------------------------------------------------------------------------
+
+Workspace::Workspace
+(
+    size_t _nitems,                 // number of items to allocate
+    size_t _size_of_item            // size of each item
+)
+{
+    nitems = _nitems;
+    size_of_item = _size_of_item;
+
+    totalSize = nitems * size_of_item;
+
+    // check for integer overflow
+    if (totalSize != ((double) nitems) * size_of_item)
+    {
+        totalSize = 0 ;            // size_t overflow
+    }
+
+    // lazyAllocate = false;       // always false, left for future use
+
+    cpuReference = NULL;            // no CPU memory allocated yet
+    gpuReference = NULL;            // no GPU memory allocated yet
+}
+
+// -----------------------------------------------------------------------------
+// Workspace destructor
+// -----------------------------------------------------------------------------
+
+Workspace::~Workspace()
+{
+}
+
+// -----------------------------------------------------------------------------
+// allocate workspace
+// -----------------------------------------------------------------------------
+
+Workspace *Workspace::allocate
+(
+    size_t nitems,          // number of items
+    size_t size_of_item,    // size of each item
+    bool doCalloc,          // true if calloc instead of malloc
+    bool cpuAlloc,          // true if allocating on the CPU
+    bool gpuAlloc,          // true if allocating on the GPU
+    bool pageLocked         // true if pagelocked on the CPU
+)
+{
+    // Cannot use calloc directly since that's a member function,
+    // and this is a static member function.
+    Workspace *returner = (Workspace*)
+        Workspace::cpu_calloc (1, sizeof(Workspace), false) ;
+
+    if (returner)
+    {
+        new (returner) Workspace (nitems, size_of_item) ;
+
+        /* Set whether the user wants the address page-locked. */
+        returner->pageLocked = pageLocked ;
+
+        /* Do the allocation & handle any errors. */
+        bool okay = (doCalloc ? returner->ws_calloc (cpuAlloc, gpuAlloc)  :
+                                returner->ws_malloc (cpuAlloc, gpuAlloc)) ;
+        if (!okay)
+        {
+            returner = Workspace::destroy (returner) ;
+        }
+    }
+
+    return (returner) ;
+}
+
+// -----------------------------------------------------------------------------
+// destroy workspace, freeing memory
+// -----------------------------------------------------------------------------
+
+Workspace *Workspace::destroy
+(
+    Workspace *address
+)
+{
+    if(address)
+    {
+        address->ws_free(address->cpu(), address->gpu());
+        SuiteSparse_free(address);
+    }
+    return NULL;
+}
+
+// -----------------------------------------------------------------------------
+// ws_malloc: malloc workspace on CPU and/or GPU
+// -----------------------------------------------------------------------------
+
+bool Workspace::ws_malloc(bool cpuAlloc, bool gpuAlloc)
+{
+    if(cpuAlloc)
+    {
+        cpuReference = Workspace::cpu_malloc(nitems, size_of_item, pageLocked);
+    }
+    if(gpuAlloc)
+    {
+        gpuReference = Workspace::gpu_malloc(nitems, size_of_item);
+    }
+
+    bool cpuSideOk = IMPLIES(cpuAlloc, cpuReference != NULL);
+    bool gpuSideOk = IMPLIES(gpuAlloc, gpuReference != NULL)
+        // || lazyAllocate
+        ;
+    return (cpuSideOk && gpuSideOk);
+}
+
+// -----------------------------------------------------------------------------
+// ws_calloc: calloc workspace on CPU and/or GPU
+// -----------------------------------------------------------------------------
+
+bool Workspace::ws_calloc(bool cpuAlloc, bool gpuAlloc)
+{
+    if(cpuAlloc)
+    {
+        cpuReference = Workspace::cpu_calloc(nitems, size_of_item, pageLocked);
+    }
+    if(gpuAlloc)
+    {
+        gpuReference = Workspace::gpu_calloc(nitems, size_of_item);
+    }
+
+    bool cpuSideOk = IMPLIES(cpuAlloc, cpuReference != NULL);
+    bool gpuSideOk = IMPLIES(gpuAlloc, gpuReference != NULL)
+        // || lazyAllocate
+        ;
+    return (cpuSideOk && gpuSideOk);
+}
+
+// -----------------------------------------------------------------------------
+// ws_free: free workspace on CPU and/or GPU
+// -----------------------------------------------------------------------------
+
+void Workspace::ws_free(bool cpuFree, bool gpuFree)
+{
+    if(cpuFree) Workspace::cpu_free(cpuReference, pageLocked);
+    if(gpuFree) Workspace::gpu_free(gpuReference);
+}
diff --git a/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_cpuAllocators.cpp b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_cpuAllocators.cpp
new file mode 100644
index 0000000..b1f9a55
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_cpuAllocators.cpp
@@ -0,0 +1,129 @@
+// =============================================================================
+// === SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_cpuAllocators.cpp
+// =============================================================================
+
+#include "SuiteSparseGPU_Runtime.hpp"
+#include <string.h>
+
+// -----------------------------------------------------------------------------
+// cpu_malloc: malloc memory on the CPU, optionally pagelocked
+// -----------------------------------------------------------------------------
+
+void *Workspace::cpu_malloc(size_t nitems, size_t size_of_item, bool pageLocked)
+{
+
+    if (nitems == 0)
+    {
+        /* make sure something gets allocated, to avoid spurious failures */
+        nitems = 1 ;
+    }
+
+    /* If we're not pageLocked, just use the standard malloc. */
+    void *returner;
+    if(!pageLocked)
+    {
+        returner = SuiteSparse_malloc(nitems, size_of_item);
+    }
+    else
+    {
+        size_t requestSize = nitems * size_of_item;
+
+        // check for integer overflow
+        if (requestSize != ((double) nitems) * size_of_item)
+        {
+            return (NULL) ;     // size_t overflow
+        }
+
+        cudaError_t result = cudaMallocHost(&returner, requestSize);
+        if (!result == cudaSuccess)
+        {
+            return (NULL) ;     // failed to malloc pagelocked memory
+        }
+    }
+
+    return returner;
+}
+
+// -----------------------------------------------------------------------------
+// cpu_calloc: calloc memory on the CPU, optionally pagelocked
+// -----------------------------------------------------------------------------
+
+void *Workspace::cpu_calloc(size_t nitems, size_t size_of_item, bool pageLocked)
+{
+
+    if (nitems == 0)
+    {
+        /* make sure something gets allocated, to avoid spurious failures */
+        nitems = 1 ;
+    }
+
+    /* If we're not pageLocked, just use the standard calloc. */
+    void *returner;
+    if(!pageLocked)
+    {
+        returner = SuiteSparse_calloc(nitems, size_of_item);
+    }
+    else
+    {
+        // malloc pagelocked memory on the CPU
+        returner = cpu_malloc (nitems, size_of_item, true) ;
+
+        #if 0
+        size_t requestSize = nitems * size_of_item;
+
+        // check for integer overflow
+        if (requestSize != ((double) nitems) * size_of_item)
+        {
+            return (NULL) ;     // size_t overflow
+        }
+
+        cudaError_t result = cudaMallocHost(&returner, requestSize);
+        if (!result == cudaSuccess)
+        { 
+            return (NULL) ;     // failed to malloc pagelocked memory
+        }
+        #endif
+
+        // set the memory to all zeros
+        if (returner != NULL)
+        {
+            // size_t overflow already checked by cpu_malloc
+            memset (returner, 0, nitems * size_of_item) ;
+        }
+    }
+
+    return returner;
+}
+
+// -----------------------------------------------------------------------------
+// cpu_free: free memory on the CPU, optionally pagelocked
+// -----------------------------------------------------------------------------
+
+void *Workspace::cpu_free(void *address, bool pageLocked)
+{
+    if(!address) return NULL;
+
+    if(!pageLocked)
+    {
+        SuiteSparse_free(address);
+    }
+    else
+    {
+        cudaError_t result = cudaFreeHost(address);
+    }
+
+    return NULL;        // not an error, but for convenience for the caller
+}
+
+// -----------------------------------------------------------------------------
+// cpu_memset:  set entire CPU memory block to a single value
+// -----------------------------------------------------------------------------
+
+// unused.  Left commented out for possible future use.
+
+// bool Workspace::cpu_memset(size_t value)
+// {
+//     memset(cpuReference, value, totalSize);
+//     return true;
+// }
+
diff --git a/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_gpuAllocators.cpp b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_gpuAllocators.cpp
new file mode 100644
index 0000000..30ac125
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_gpuAllocators.cpp
@@ -0,0 +1,93 @@
+// =============================================================================
+// === SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_gpuAllocators.cpp
+// =============================================================================
+
+#include "SuiteSparseGPU_Runtime.hpp"
+#include <stdio.h>
+
+// -----------------------------------------------------------------------------
+// gpu_malloc: malloc memory on the GPU
+// -----------------------------------------------------------------------------
+
+void *Workspace::gpu_malloc(size_t nitems, size_t size_of_item)
+{
+
+    if (nitems == 0)
+    {
+        // make sure something gets allocated, to avoid spurious failures
+        nitems = 1 ;
+    }
+
+    void *returner = NULL;
+
+    size_t requestSize = nitems*size_of_item;
+
+    // check for integer overflow
+    if (requestSize != ((double) nitems) * size_of_item)
+    {
+        return (NULL) ;     // size_t overflow
+    }
+
+    cudaError_t result = cudaMalloc(&returner, requestSize);
+
+    if(result != cudaSuccess)
+    {
+        return (NULL) ;     // failed to malloc on the GPU
+    }
+
+    return returner;
+}
+
+// -----------------------------------------------------------------------------
+// gpu_calloc: calloc memory on the GPU
+// -----------------------------------------------------------------------------
+
+void *Workspace::gpu_calloc(size_t nitems, size_t size_of_item)
+{
+
+    if (nitems == 0)
+    {
+        // make sure something gets allocated, to avoid spurious failures
+        nitems = 1 ;
+    }
+
+    void *returner = gpu_malloc(nitems, size_of_item);
+    if(returner)
+    {
+        cudaError_t result = cudaMemset(returner, 0, nitems*size_of_item);
+
+        if(result != cudaSuccess)
+        {
+            returner = gpu_free(returner);      // memset failed on GPU
+        }
+    }
+
+    return returner;
+}
+
+// -----------------------------------------------------------------------------
+// gpu_free: free memory on the GPU
+// -----------------------------------------------------------------------------
+
+void *Workspace::gpu_free(void *address)
+{
+    if(!address) return NULL;
+
+    cudaError_t result = cudaFree(address);
+
+    return NULL;        // not an error, but for convenience for the caller
+}
+
+
+// -----------------------------------------------------------------------------
+// gpu_memset:  set entire GPU memory block to a single value
+// -----------------------------------------------------------------------------
+
+// unused.  Left commented out for possible future use.
+
+// bool Workspace::gpu_memset(size_t value)
+// {
+//     cudaError_t result = cudaMemset(gpuReference, value, totalSize);
+//     return (result == cudaSuccess) ;
+// }
+
diff --git a/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_transfer.cpp b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_transfer.cpp
new file mode 100644
index 0000000..2c50170
--- /dev/null
+++ b/SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_transfer.cpp
@@ -0,0 +1,60 @@
+// =============================================================================
+// SuiteSparse_GPURuntime/Source/SuiteSparseGPU_Workspace_transfer.cpp =========
+// =============================================================================
+
+#include "SuiteSparseGPU_Runtime.hpp"
+
+// -----------------------------------------------------------------------------
+// transfer: synchronous/asynchronous transfer of memory to/from the CPU/GPU
+// -----------------------------------------------------------------------------
+
+bool Workspace::transfer(cudaMemcpyKind direction, bool synchronous,
+    cudaStream_t stream)
+{
+    /* Check inputs */
+//  if(!cpuReference || (!gpuReference && !lazyAllocate)) return false;
+    if(!cpuReference ||  !gpuReference                  ) return false;
+
+//  // Handle lazy allocate (for possible future use)
+//  if(direction == cudaMemcpyHostToDevice && lazyAllocate && !gpuReference)
+//  {
+//      gpuReference = Workspace::gpu_malloc(nitems, size_of_item);
+//      if(!gpuReference) return false;
+//  }
+
+    // Set the src and dst depending on the direction.
+    void *src = NULL, *dst = NULL;
+    if(direction == cudaMemcpyHostToDevice)
+    {
+        src = cpuReference;
+        dst = gpuReference;
+    }
+    else if(direction == cudaMemcpyDeviceToHost)
+    {
+        src = gpuReference;
+        dst = cpuReference;
+    }
+    else
+    {
+        // Unhandled cudaMemcpyKind value in Workspace::transfer
+        return false;
+    }
+
+    // Do the transfer and if synchronous wait until completed.
+    cudaError_t result;
+    if(synchronous)
+    {
+        result = cudaMemcpy(dst, src, totalSize, direction);
+    }
+    else
+    {
+        result = cudaMemcpyAsync(dst, src, totalSize, direction, stream);
+    }
+
+    if(result != cudaSuccess)
+    {
+        return false;       // memcpy failed
+    }
+
+    return true;            // success
+}
diff --git a/SuiteSparse_config/Makefile b/SuiteSparse_config/Makefile
new file mode 100644
index 0000000..daf1559
--- /dev/null
+++ b/SuiteSparse_config/Makefile
@@ -0,0 +1,48 @@
+#-------------------------------------------------------------------------------
+# SuiteSparse_config Makefile
+#-------------------------------------------------------------------------------
+
+VERSION = 4.4.0
+
+default: ccode
+
+include SuiteSparse_config.mk
+
+ccode: libsuitesparseconfig.a
+
+all: libsuitesparseconfig.a
+
+library: libsuitesparseconfig.a
+
+libsuitesparseconfig.a: SuiteSparse_config.c SuiteSparse_config.h
+	$(CC) $(CF) -c SuiteSparse_config.c
+	$(ARCHIVE) libsuitesparseconfig.a SuiteSparse_config.o
+	$(RANLIB) libsuitesparseconfig.a
+	- $(RM) SuiteSparse_config.o
+
+distclean: purge
+
+purge: clean
+	- $(RM) *.o *.a
+
+clean:
+	- $(RM) -r $(CLEAN)
+
+# install SuiteSparse_config
+install:
+	$(CP) libsuitesparseconfig.a $(INSTALL_LIB)/libsuitesparseconfig.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libsuitesparseconfig.$(VERSION).a libsuitesparseconfig.a )
+	$(CP) SuiteSparse_config.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libsuitesparseconfig*.a
+	chmod 644 $(INSTALL_INCLUDE)/SuiteSparse_config.h
+
+# uninstall SuiteSparse_config
+uninstall:
+	$(RM) $(INSTALL_LIB)/libsuitesparseconfig*.a
+	$(RM) $(INSTALL_INCLUDE)/SuiteSparse_config.h
+
+dif:
+	- diff SuiteSparse_config.mk SuiteSparse_config_linux.mk
+	- diff SuiteSparse_config_linux.mk SuiteSparse_config_GPU_gcc.mk
+	- diff SuiteSparse_config_GPU_gcc.mk SuiteSparse_config_GPU_icc.mk
+	- diff SuiteSparse_config_GPU_icc.mk SuiteSparse_config_GPU_icc10.mk
diff --git a/SuiteSparse_config/README.txt b/SuiteSparse_config/README.txt
new file mode 100644
index 0000000..586a425
--- /dev/null
+++ b/SuiteSparse_config/README.txt
@@ -0,0 +1,71 @@
+SuiteSparse_config, 2014, Timothy A. Davis, http://www.suitesparse.com
+(formerly the UFconfig package)
+
+This directory contains a default SuiteSparse_config.mk file, which
+in the original distribution is the same as SuiteSparse_config_linux.mk.
+The various config file versions are:
+
+    SuiteSparse_config_GPU_icc.mk   for GPU with the Intel compiler
+    SuiteSparse_config_GPU_icc10.mk ditto, but for 10 cores
+    SuiteSparse_config_GPU_gcc.mk   for GPU with the gcc compiler
+    SuiteSparse_config_linux.mk     for linux, no GPU
+    SuiteSparse_config_Mac.mk       for Mac
+    SuiteSparse_config.mk           the actual one in use
+
+To use a GPU for CHOLMOD, using gcc, do this:
+
+    cp SuiteSparse_config_GPU_gcc.mk SuiteSparse_config.mk
+
+To use a GPU for CHOLMOD, using icc and the Intel MKL, do this:
+
+    cp SuiteSparse_config_GPU_icc.mk SuiteSparse_config.mk
+
+To compile SuiteSparse for the Mac, do this:
+
+    cp SuiteSparse_config_Mac.mk SuiteSparse_config.mk
+
+To use a GPU for CHOLMOD, using icc and the Intel MKL,
+and for a system with 10 cores, do this
+
+    cp SuiteSparse_config_GPU_icc10.mk SuiteSparse_config.mk
+
+For other alternatives, see the comments in the SuiteSparse_config.mk file.
+
+--------------------------------------------------------------------------------
+
+SuiteSparse_config contains configuration settings for all many of the software
+packages that I develop or co-author.  Note that older versions of some of
+these packages do not require SuiteSparse_config.
+
+  Package  Description
+  -------  -----------
+  AMD      approximate minimum degree ordering
+  CAMD     constrained AMD
+  COLAMD   column approximate minimum degree ordering
+  CCOLAMD  constrained approximate minimum degree ordering
+  UMFPACK  sparse LU factorization, with the BLAS
+  CXSparse int/long/real/complex version of CSparse
+  CHOLMOD  sparse Cholesky factorization, update/downdate
+  KLU      sparse LU factorization, BLAS-free
+  BTF      permutation to block triangular form
+  LDL      concise sparse LDL'
+  LPDASA   LP Dual Active Set Algorithm
+  RBio     read/write files in Rutherford/Boeing format
+  SPQR     sparse QR factorization (full name: SuiteSparseQR)
+
+SuiteSparse_config is not required by these packages:
+
+  CSparse       a Concise Sparse matrix package
+  MATLAB_Tools  toolboxes for use in MATLAB
+
+In addition, the xerbla/ directory contains Fortan and C versions of the
+BLAS/LAPACK xerbla routine, which is called when an invalid input is passed to
+the BLAS or LAPACK.  The xerbla provided here does not print any message, so
+the entire Fortran I/O library does not need to be linked into a C application.
+Most versions of the BLAS contain xerbla, but those from K. Goto do not.  Use
+this if you need too.
+
+If you edit this directory (SuiteSparse_config.mk in particular) then you
+must do "make purge ; make" in the parent directory to recompile all of
+SuiteSparse.  Otherwise, the changes will not necessarily be applied.
+
diff --git a/SuiteSparse_config/SuiteSparse_config.c b/SuiteSparse_config/SuiteSparse_config.c
new file mode 100644
index 0000000..0d5dbaf
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config.c
@@ -0,0 +1,531 @@
+/* ========================================================================== */
+/* === SuiteSparse_config =================================================== */
+/* ========================================================================== */
+
+/* SuiteSparse configuration : memory manager and printf functions. */
+
+/* Copyright (c) 2013, Timothy A. Davis.  No licensing restrictions
+ * apply to this file or to the SuiteSparse_config directory.
+ * Author: Timothy A. Davis.
+ */
+
+#include <math.h>
+#include <stdlib.h>
+
+#ifndef NPRINT
+#include <stdio.h>
+#endif
+
+#ifdef MATLAB_MEX_FILE
+#include "mex.h"
+#include "matrix.h"
+#endif
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#include "SuiteSparse_config.h"
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_config : a global extern struct */
+/* -------------------------------------------------------------------------- */
+
+/* The SuiteSparse_config struct is available to all SuiteSparse functions and
+    to all applications that use those functions.  It must be modified with
+    care, particularly in a multithreaded context.  Normally, the application
+    will initialize this object once, via SuiteSparse_start, possibily followed
+    by application-specific modifications if the applications wants to use
+    alternative memory manager functions.
+
+    The user can redefine these global pointers at run-time to change the
+    memory manager and printf function used by SuiteSparse.
+
+    If -DNMALLOC is defined at compile-time, then no memory-manager is
+    specified.  You must define them at run-time, after calling
+    SuiteSparse_start.
+
+    If -DPRINT is defined a compile time, then printf is disabled, and
+    SuiteSparse will not use printf.
+ */
+
+struct SuiteSparse_config_struct SuiteSparse_config =
+{
+
+    /* memory management functions */
+    #ifndef NMALLOC
+        #ifdef MATLAB_MEX_FILE
+            /* MATLAB mexFunction: */
+            mxMalloc, mxCalloc, mxRealloc, mxFree,
+        #else
+            /* standard ANSI C: */
+            malloc, calloc, realloc, free,
+        #endif
+    #else
+        /* no memory manager defined; you must define one at run-time: */
+        NULL, NULL, NULL, NULL,
+    #endif
+
+    /* printf function */
+    #ifndef NPRINT
+        #ifdef MATLAB_MEX_FILE
+            /* MATLAB mexFunction: */
+            mexPrintf,
+        #else
+            /* standard ANSI C: */
+            printf,
+        #endif
+    #else
+        /* printf is disabled */
+        NULL,
+    #endif
+
+    SuiteSparse_hypot,
+    SuiteSparse_divcomplex
+
+} ;
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_start */
+/* -------------------------------------------------------------------------- */
+
+/* All applications that use SuiteSparse should call SuiteSparse_start prior
+   to using any SuiteSparse function.  Only a single thread should call this
+   function, in a multithreaded application.  Currently, this function is
+   optional, since all this function currently does is to set the four memory
+   function pointers to NULL (which tells SuiteSparse to use the default
+   functions).  In a multi- threaded application, only a single thread should
+   call this function.
+
+   Future releases of SuiteSparse might enforce a requirement that
+   SuiteSparse_start be called prior to calling any SuiteSparse function.
+ */
+
+void SuiteSparse_start ( void )
+{
+
+    /* memory management functions */
+    #ifndef NMALLOC
+        #ifdef MATLAB_MEX_FILE
+            /* MATLAB mexFunction: */
+            SuiteSparse_config.malloc_func  = mxMalloc ;
+            SuiteSparse_config.calloc_func  = mxCalloc ;
+            SuiteSparse_config.realloc_func = mxRealloc ;
+            SuiteSparse_config.free_func    = mxFree ;
+        #else
+            /* standard ANSI C: */
+            SuiteSparse_config.malloc_func  = malloc ;
+            SuiteSparse_config.calloc_func  = calloc ;
+            SuiteSparse_config.realloc_func = realloc ;
+            SuiteSparse_config.free_func    = free ;
+        #endif
+    #else
+        /* no memory manager defined; you must define one after calling
+           SuiteSparse_start */
+        SuiteSparse_config.malloc_func  = NULL ;
+        SuiteSparse_config.calloc_func  = NULL ;
+        SuiteSparse_config.realloc_func = NULL ;
+        SuiteSparse_config.free_func    = NULL ;
+    #endif
+
+    /* printf function */
+    #ifndef NPRINT
+        #ifdef MATLAB_MEX_FILE
+            /* MATLAB mexFunction: */
+            SuiteSparse_config.printf_func = mexPrintf ;
+        #else
+            /* standard ANSI C: */
+            SuiteSparse_config.printf_func = printf ;
+        #endif
+    #else
+        /* printf is disabled */
+        SuiteSparse_config.printf_func = NULL ;
+    #endif
+
+    /* math functions */
+    SuiteSparse_config.hypot_func = SuiteSparse_hypot ;
+    SuiteSparse_config.divcomplex_func = SuiteSparse_divcomplex ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_finish */
+/* -------------------------------------------------------------------------- */
+
+/* This currently does nothing, but in the future, applications should call
+   SuiteSparse_start before calling any SuiteSparse function, and then
+   SuiteSparse_finish after calling the last SuiteSparse function, just before
+   exiting.  In a multithreaded application, only a single thread should call
+   this function.
+
+   Future releases of SuiteSparse might use this function for any
+   SuiteSparse-wide cleanup operations or finalization of statistics.
+ */
+
+void SuiteSparse_finish ( void )
+{
+    /* do nothing */ ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_malloc: malloc wrapper */
+/* -------------------------------------------------------------------------- */
+
+void *SuiteSparse_malloc    /* pointer to allocated block of memory */
+(
+    size_t nitems,          /* number of items to malloc */
+    size_t size_of_item     /* sizeof each item */
+)
+{
+    void *p ;
+    size_t size ;
+    if (nitems < 1) nitems = 1 ;
+    if (size_of_item < 1) size_of_item = 1 ;
+    size = nitems * size_of_item  ;
+
+    if (size != ((double) nitems) * size_of_item)
+    {
+        /* size_t overflow */
+        p = NULL ;
+    }
+    else
+    {
+        p = (void *) (SuiteSparse_config.malloc_func) (size) ;
+    }
+    return (p) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_calloc: calloc wrapper */
+/* -------------------------------------------------------------------------- */
+
+void *SuiteSparse_calloc    /* pointer to allocated block of memory */
+(
+    size_t nitems,          /* number of items to calloc */
+    size_t size_of_item     /* sizeof each item */
+)
+{
+    void *p ;
+    size_t size ;
+    if (nitems < 1) nitems = 1 ;
+    if (size_of_item < 1) size_of_item = 1 ;
+    size = nitems * size_of_item  ;
+
+    if (size != ((double) nitems) * size_of_item)
+    {
+        /* size_t overflow */
+        p = NULL ;
+    }
+    else
+    {
+        p = (void *) (SuiteSparse_config.calloc_func) (nitems, size_of_item) ;
+    }
+    return (p) ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_realloc: realloc wrapper */
+/* -------------------------------------------------------------------------- */
+
+/* If p is non-NULL on input, it points to a previously allocated object of
+   size nitems_old * size_of_item.  The object is reallocated to be of size
+   nitems_new * size_of_item.  If p is NULL on input, then a new object of that
+   size is allocated.  On success, a pointer to the new object is returned,
+   and ok is returned as 1.  If the allocation fails, ok is set to 0 and a
+   pointer to the old (unmodified) object is returned.
+ */
+
+void *SuiteSparse_realloc   /* pointer to reallocated block of memory, or
+                               to original block if the realloc failed. */
+(
+    size_t nitems_new,      /* new number of items in the object */
+    size_t nitems_old,      /* old number of items in the object */
+    size_t size_of_item,    /* sizeof each item */
+    void *p,                /* old object to reallocate */
+    int *ok                 /* 1 if successful, 0 otherwise */
+)
+{
+    size_t size ;
+    if (nitems_old < 1) nitems_old = 1 ;
+    if (nitems_new < 1) nitems_new = 1 ;
+    if (size_of_item < 1) size_of_item = 1 ;
+    size = nitems_new * size_of_item  ;
+
+    if (size != ((double) nitems_new) * size_of_item)
+    {
+        /* size_t overflow */
+        (*ok) = 0 ;
+    }
+    else if (p == NULL)
+    {
+        /* a fresh object is being allocated */
+        p = SuiteSparse_malloc (nitems_new, size_of_item) ;
+        (*ok) = (p != NULL) ;
+    }
+    else if (nitems_old == nitems_new)
+    {
+        /* the object does not change; do nothing */
+        (*ok) = 1 ;
+    }
+    else
+    {
+        /* change the size of the object from nitems_old to nitems_new */
+        void *pnew ;
+        pnew = (void *) (SuiteSparse_config.realloc_func) (p, size) ;
+        if (pnew == NULL)
+        {
+            if (nitems_new < nitems_old)
+            {
+                /* the attempt to reduce the size of the block failed, but
+                   the old block is unchanged.  So pretend to succeed. */
+                (*ok) = 1 ;
+            }
+            else
+            {
+                /* out of memory */
+                (*ok) = 0 ;
+            }
+        }
+        else
+        {
+            /* success */
+            p = pnew ;
+            (*ok) = 1 ;
+        }
+    }
+    return (p) ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_free: free wrapper */
+/* -------------------------------------------------------------------------- */
+
+void *SuiteSparse_free      /* always returns NULL */
+(
+    void *p                 /* block to free */
+)
+{
+    if (p)
+    {
+        (SuiteSparse_config.free_func) (p) ;
+    }
+    return (NULL) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_tic: return current wall clock time */
+/* -------------------------------------------------------------------------- */
+
+/* Returns the number of seconds (tic [0]) and nanoseconds (tic [1]) since some
+ * unspecified but fixed time in the past.  If no timer is installed, zero is
+ * returned.  A scalar double precision value for 'tic' could be used, but this
+ * might cause loss of precision because clock_getttime returns the time from
+ * some distant time in the past.  Thus, an array of size 2 is used.
+ *
+ * The timer is enabled by default.  To disable the timer, compile with
+ * -DNTIMER.  If enabled on a POSIX C 1993 system, the timer requires linking
+ * with the -lrt library.
+ *
+ * example:
+ *
+ *      double tic [2], r, s, t ;
+ *      SuiteSparse_tic (tic) ;     // start the timer
+ *      // do some work A
+ *      t = SuiteSparse_toc (tic) ; // t is time for work A, in seconds
+ *      // do some work B
+ *      s = SuiteSparse_toc (tic) ; // s is time for work A and B, in seconds
+ *      SuiteSparse_tic (tic) ;     // restart the timer
+ *      // do some work C
+ *      r = SuiteSparse_toc (tic) ; // s is time for work C, in seconds
+ *
+ * A double array of size 2 is used so that this routine can be more easily
+ * ported to non-POSIX systems.  The caller does not rely on the POSIX
+ * <time.h> include file.
+ */
+
+#ifdef SUITESPARSE_TIMER_ENABLED
+
+#include <time.h>
+
+void SuiteSparse_tic
+(
+    double tic [2]      /* output, contents undefined on input */
+)
+{
+    /* POSIX C 1993 timer, requires -librt */
+    struct timespec t ;
+    clock_gettime (CLOCK_MONOTONIC, &t) ;
+    tic [0] = (double) (t.tv_sec) ;
+    tic [1] = (double) (t.tv_nsec) ;
+}
+
+#else
+
+void SuiteSparse_tic
+(
+    double tic [2]      /* output, contents undefined on input */
+)
+{
+    /* no timer installed */
+    tic [0] = 0 ;
+    tic [1] = 0 ;
+}
+
+#endif
+
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_toc: return time since last tic */
+/* -------------------------------------------------------------------------- */
+
+/* Assuming SuiteSparse_tic is accurate to the nanosecond, this function is
+ * accurate down to the nanosecond for 2^53 nanoseconds since the last call to
+ * SuiteSparse_tic, which is sufficient for SuiteSparse (about 104 days).  If
+ * additional accuracy is required, the caller can use two calls to
+ * SuiteSparse_tic and do the calculations differently.
+ */
+
+double SuiteSparse_toc  /* returns time in seconds since last tic */
+(
+    double tic [2]  /* input, not modified from last call to SuiteSparse_tic */
+)
+{
+    double toc [2] ;
+    SuiteSparse_tic (toc) ;
+    return ((toc [0] - tic [0]) + 1e-9 * (toc [1] - tic [1])) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_time: return current wallclock time in seconds */
+/* -------------------------------------------------------------------------- */
+
+/* This function might not be accurate down to the nanosecond. */
+
+double SuiteSparse_time  /* returns current wall clock time in seconds */
+(
+    void
+)
+{
+    double toc [2] ;
+    SuiteSparse_tic (toc) ;
+    return (toc [0] + 1e-9 * toc [1]) ;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_version: return the current version of SuiteSparse */
+/* -------------------------------------------------------------------------- */
+
+int SuiteSparse_version
+(
+    int version [3]
+)
+{
+    if (version != NULL)
+    {
+        version [0] = SUITESPARSE_MAIN_VERSION ;
+        version [1] = SUITESPARSE_SUB_VERSION ;
+        version [2] = SUITESPARSE_SUBSUB_VERSION ;
+    }
+    return (SUITESPARSE_VERSION) ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_hypot */
+/* -------------------------------------------------------------------------- */
+
+/* There is an equivalent routine called hypot in <math.h>, which conforms
+ * to ANSI C99.  However, SuiteSparse does not assume that ANSI C99 is
+ * available.  You can use the ANSI C99 hypot routine with:
+ *
+ *	#include <math.h>
+ *	SuiteSparse_config.hypot_func = hypot ;
+ *
+ * Default value of the SuiteSparse_config.hypot_func pointer is
+ * SuiteSparse_hypot, defined below.
+ *
+ * s = hypot (x,y) computes s = sqrt (x*x + y*y) but does so more accurately.
+ * The NaN cases for the double relops x >= y and x+y == x are safely ignored.
+ * 
+ * Source: Algorithm 312, "Absolute value and square root of a complex number,"
+ * P. Friedland, Comm. ACM, vol 10, no 10, October 1967, page 665.
+ */
+
+double SuiteSparse_hypot (double x, double y)
+{
+    double s, r ;
+    x = fabs (x) ;
+    y = fabs (y) ;
+    if (x >= y)
+    {
+	if (x + y == x)
+	{
+	    s = x ;
+	}
+	else
+	{
+	    r = y / x ;
+	    s = x * sqrt (1.0 + r*r) ;
+	}
+    }
+    else
+    {
+	if (y + x == y)
+	{
+	    s = y ;
+	}
+	else
+	{
+	    r = x / y ;
+	    s = y * sqrt (1.0 + r*r) ;
+	}
+    } 
+    return (s) ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* SuiteSparse_divcomplex */
+/* -------------------------------------------------------------------------- */
+
+/* c = a/b where c, a, and b are complex.  The real and imaginary parts are
+ * passed as separate arguments to this routine.  The NaN case is ignored
+ * for the double relop br >= bi.  Returns 1 if the denominator is zero,
+ * 0 otherwise.
+ *
+ * This uses ACM Algo 116, by R. L. Smith, 1962, which tries to avoid
+ * underflow and overflow.
+ *
+ * c can be the same variable as a or b.
+ *
+ * Default value of the SuiteSparse_config.divcomplex_func pointer is
+ * SuiteSparse_divcomplex.
+ */
+
+int SuiteSparse_divcomplex
+(
+    double ar, double ai,	/* real and imaginary parts of a */
+    double br, double bi,	/* real and imaginary parts of b */
+    double *cr, double *ci	/* real and imaginary parts of c */
+)
+{
+    double tr, ti, r, den ;
+    if (fabs (br) >= fabs (bi))
+    {
+	r = bi / br ;
+	den = br + r * bi ;
+	tr = (ar + ai * r) / den ;
+	ti = (ai - ar * r) / den ;
+    }
+    else
+    {
+	r = br / bi ;
+	den = r * br + bi ;
+	tr = (ar * r + ai) / den ;
+	ti = (ai * r - ar) / den ;
+    }
+    *cr = tr ;
+    *ci = ti ;
+    return (den == 0.) ;
+}
diff --git a/SuiteSparse_config/SuiteSparse_config.h b/SuiteSparse_config/SuiteSparse_config.h
new file mode 100644
index 0000000..903fac2
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config.h
@@ -0,0 +1,247 @@
+/* ========================================================================== */
+/* === SuiteSparse_config =================================================== */
+/* ========================================================================== */
+
+/* Configuration file for SuiteSparse: a Suite of Sparse matrix packages
+ * (AMD, COLAMD, CCOLAMD, CAMD, CHOLMOD, UMFPACK, CXSparse, and others).
+ *
+ * SuiteSparse_config.h provides the definition of the long integer.  On most
+ * systems, a C program can be compiled in LP64 mode, in which long's and
+ * pointers are both 64-bits, and int's are 32-bits.  Windows 64, however, uses
+ * the LLP64 model, in which int's and long's are 32-bits, and long long's and
+ * pointers are 64-bits.
+ *
+ * SuiteSparse packages that include long integer versions are
+ * intended for the LP64 mode.  However, as a workaround for Windows 64
+ * (and perhaps other systems), the long integer can be redefined.
+ *
+ * If _WIN64 is defined, then the __int64 type is used instead of long.
+ *
+ * The long integer can also be defined at compile time.  For example, this
+ * could be added to SuiteSparse_config.mk:
+ *
+ * CFLAGS = -O -D'SuiteSparse_long=long long' \
+ *  -D'SuiteSparse_long_max=9223372036854775801' -D'SuiteSparse_long_idd="lld"'
+ *
+ * This file defines SuiteSparse_long as either long (on all but _WIN64) or
+ * __int64 on Windows 64.  The intent is that a SuiteSparse_long is always a
+ * 64-bit integer in a 64-bit code.  ptrdiff_t might be a better choice than
+ * long; it is always the same size as a pointer.
+ *
+ * This file also defines the SUITESPARSE_VERSION and related definitions.
+ *
+ * Copyright (c) 2012, Timothy A. Davis.  No licensing restrictions apply
+ * to this file or to the SuiteSparse_config directory.
+ * Author: Timothy A. Davis.
+ */
+
+#ifndef SUITESPARSE_CONFIG_H
+#define SUITESPARSE_CONFIG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <limits.h>
+#include <stdlib.h>
+
+/* ========================================================================== */
+/* === SuiteSparse_long ===================================================== */
+/* ========================================================================== */
+
+#ifndef SuiteSparse_long
+
+#ifdef _WIN64
+
+#define SuiteSparse_long __int64
+#define SuiteSparse_long_max _I64_MAX
+#define SuiteSparse_long_idd "I64d"
+
+#else
+
+#define SuiteSparse_long long
+#define SuiteSparse_long_max LONG_MAX
+#define SuiteSparse_long_idd "ld"
+
+#endif
+#define SuiteSparse_long_id "%" SuiteSparse_long_idd
+#endif
+
+/* ========================================================================== */
+/* === SuiteSparse_config parameters and functions ========================== */
+/* ========================================================================== */
+
+/* SuiteSparse-wide parameters are placed in this struct.  It is meant to be
+   an extern, globally-accessible struct.  It is not meant to be updated
+   frequently by multiple threads.  Rather, if an application needs to modify
+   SuiteSparse_config, it should do it once at the beginning of the application,
+   before multiple threads are launched.
+
+   The intent of these function pointers is that they not be used in your
+   application directly, except to assign them to the desired user-provided
+   functions.  Rather, you should use the
+ */
+
+struct SuiteSparse_config_struct
+{
+    void *(*malloc_func) (size_t) ;             /* pointer to malloc */
+    void *(*calloc_func) (size_t, size_t) ;     /* pointer to calloc */
+    void *(*realloc_func) (void *, size_t) ;    /* pointer to realloc */
+    void (*free_func) (void *) ;                /* pointer to free */
+    int (*printf_func) (const char *, ...) ;    /* pointer to printf */
+    double (*hypot_func) (double, double) ;     /* pointer to hypot */
+    int (*divcomplex_func) (double, double, double, double, double *, double *);
+} ;
+
+extern struct SuiteSparse_config_struct SuiteSparse_config ;
+
+void SuiteSparse_start ( void ) ;   /* called to start SuiteSparse */
+
+void SuiteSparse_finish ( void ) ;  /* called to finish SuiteSparse */
+
+void *SuiteSparse_malloc    /* pointer to allocated block of memory */
+(
+    size_t nitems,          /* number of items to malloc (>=1 is enforced) */
+    size_t size_of_item     /* sizeof each item */
+) ;
+
+void *SuiteSparse_calloc    /* pointer to allocated block of memory */
+(
+    size_t nitems,          /* number of items to calloc (>=1 is enforced) */
+    size_t size_of_item     /* sizeof each item */
+) ;
+
+void *SuiteSparse_realloc   /* pointer to reallocated block of memory, or
+                               to original block if the realloc failed. */
+(
+    size_t nitems_new,      /* new number of items in the object */
+    size_t nitems_old,      /* old number of items in the object */
+    size_t size_of_item,    /* sizeof each item */
+    void *p,                /* old object to reallocate */
+    int *ok                 /* 1 if successful, 0 otherwise */
+) ;
+
+void *SuiteSparse_free      /* always returns NULL */
+(
+    void *p                 /* block to free */
+) ;
+
+void SuiteSparse_tic    /* start the timer */
+(
+    double tic [2]      /* output, contents undefined on input */
+) ;
+
+double SuiteSparse_toc  /* return time in seconds since last tic */
+(
+    double tic [2]      /* input: from last call to SuiteSparse_tic */
+) ;
+
+double SuiteSparse_time  /* returns current wall clock time in seconds */
+(
+    void
+) ;
+
+/* returns sqrt (x^2 + y^2), computed reliably */
+double SuiteSparse_hypot (double x, double y) ;
+
+/* complex division of c = a/b */
+int SuiteSparse_divcomplex
+(
+    double ar, double ai,	/* real and imaginary parts of a */
+    double br, double bi,	/* real and imaginary parts of b */
+    double *cr, double *ci	/* real and imaginary parts of c */
+) ;
+
+/* determine which timer to use, if any */
+#ifndef NTIMER
+#ifdef _POSIX_C_SOURCE
+#if    _POSIX_C_SOURCE >= 199309L
+#define SUITESPARSE_TIMER_ENABLED
+#endif
+#endif
+#endif
+
+/* SuiteSparse printf macro */
+#define SUITESPARSE_PRINTF(params) \
+{ \
+    if (SuiteSparse_config.printf_func != NULL) \
+    { \
+        (void) (SuiteSparse_config.printf_func) params ; \
+    } \
+}
+
+/* ========================================================================== */
+/* === SuiteSparse version ================================================== */
+/* ========================================================================== */
+
+/* SuiteSparse is not a package itself, but a collection of packages, some of
+ * which must be used together (UMFPACK requires AMD, CHOLMOD requires AMD,
+ * COLAMD, CAMD, and CCOLAMD, etc).  A version number is provided here for the
+ * collection itself.  The versions of packages within each version of
+ * SuiteSparse are meant to work together.  Combining one package from one
+ * version of SuiteSparse, with another package from another version of
+ * SuiteSparse, may or may not work.
+ *
+ * SuiteSparse contains the following packages:
+ *
+ *  SuiteSparse_config version 4.4.1 (version always the same as SuiteSparse)
+ *  AMD             version 2.4.1
+ *  BTF             version 1.2.1
+ *  CAMD            version 2.4.1
+ *  CCOLAMD         version 2.9.1
+ *  CHOLMOD         version 3.0.3
+ *  COLAMD          version 2.9.1
+ *  CSparse         version 3.1.4
+ *  CXSparse        version 3.1.4
+ *  KLU             version 1.3.2
+ *  LDL             version 2.2.1
+ *  RBio            version 2.2.1
+ *  SPQR            version 2.0.0
+ *  GPUQREngine     version 1.0.0
+ *  SuiteSparse_GPURuntime  version 1.0.0
+ *  UMFPACK         version 5.7.1
+ *  MATLAB_Tools    various packages & M-files
+ *
+ * Other package dependencies:
+ *  BLAS            required by CHOLMOD and UMFPACK
+ *  LAPACK          required by CHOLMOD
+ *  METIS 4.0.1     required by CHOLMOD (optional) and KLU (optional)
+ *  CUBLAS, CUDART  NVIDIA libraries required by CHOLMOD and SPQR when
+ *                  they are compiled with GPU acceleration.
+ */
+
+
+int SuiteSparse_version     /* returns SUITESPARSE_VERSION */
+(
+    /* output, not defined on input.  Not used if NULL.  Returns
+       the three version codes in version [0..2]:
+       version [0] is SUITESPARSE_MAIN_VERSION
+       version [1] is SUITESPARSE_SUB_VERSION
+       version [2] is SUITESPARSE_SUBSUB_VERSION
+       */
+    int version [3]
+) ;
+
+/* Versions prior to 4.2.0 do not have the above function.  The following
+   code fragment will work with any version of SuiteSparse:
+
+   #ifdef SUITESPARSE_HAS_VERSION_FUNCTION
+   v = SuiteSparse_version (NULL) ;
+   #else
+   v = SUITESPARSE_VERSION ;
+   #endif
+*/
+#define SUITESPARSE_HAS_VERSION_FUNCTION
+
+#define SUITESPARSE_DATE "Oct 23, 2014"
+#define SUITESPARSE_VER_CODE(main,sub) ((main) * 1000 + (sub))
+#define SUITESPARSE_MAIN_VERSION 4
+#define SUITESPARSE_SUB_VERSION 4
+#define SUITESPARSE_SUBSUB_VERSION 1
+#define SUITESPARSE_VERSION \
+    SUITESPARSE_VER_CODE(SUITESPARSE_MAIN_VERSION,SUITESPARSE_SUB_VERSION)
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk
new file mode 100644
index 0000000..ba2da23
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config.mk
@@ -0,0 +1,452 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+  CFLAGS = 
+# CFLAGS = -g
+# for the icc compiler and OpenMP:
+# CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = /usr/local/lib
+INSTALL_INCLUDE = /usr/local/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+  BLAS = -lblas -lgfortran
+  LAPACK = -llapack
+
+# MKL 
+# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+# LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+  CUDA_ROOT     =
+  GPU_BLAS_PATH =
+  GPU_CONFIG    =
+  CUDA_PATH     =
+  CUDART_LIB    =
+  CUBLAS_LIB    =
+  CUDA_INC_PATH =
+  NV20          =
+  NV30          =
+  NV35          =
+  NVCC          = echo
+  NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+# CUDA_ROOT     = /usr/local/cuda
+# GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+# CUDA_PATH     = $(CUDA_ROOT)
+# CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+# CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+# CUDA_INC_PATH = $(CUDA_ROOT)/include/
+# NV20          = -arch=sm_20 -Xcompiler -fPIC
+# NV30          = -arch=sm_30 -Xcompiler -fPIC
+# NV35          = -arch=sm_35 -Xcompiler -fPIC
+# NVCC          = $(CUDA_ROOT)/bin/nvcc
+# NVCCFLAGS     = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+METIS_PATH = ../../metis-4.0
+METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG)
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+# PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+  PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+# CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+# F77 = gfortran
+# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+# BLAS = -framework Accelerate
+# LAPACK = -framework Accelerate
+# LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/SuiteSparse_config/SuiteSparse_config_GPU_debug.mk b/SuiteSparse_config/SuiteSparse_config_GPU_debug.mk
new file mode 100644
index 0000000..be6a62f
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config_GPU_debug.mk
@@ -0,0 +1,452 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+# CFLAGS = 
+  CFLAGS = -g
+# for the icc compiler and OpenMP:
+# CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = /usr/local/lib
+INSTALL_INCLUDE = /usr/local/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+  BLAS = -lblas -lgfortran
+  LAPACK = -llapack
+
+# MKL 
+# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+# LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+# CUDA_ROOT     =
+# GPU_BLAS_PATH =
+# GPU_CONFIG    =
+# CUDA_PATH     =
+# CUDART_LIB    =
+# CUBLAS_LIB    =
+# CUDA_INC_PATH =
+# NV20          =
+# NV30          =
+# NV35          =
+# NVCC          = echo
+# NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+  CUDA_ROOT     = /usr/local/cuda
+  GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+  GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+  CUDA_PATH     = $(CUDA_ROOT)
+  CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+  CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+  CUDA_INC_PATH = $(CUDA_ROOT)/include/
+  NV20          = -arch=sm_20 -Xcompiler -fPIC
+  NV30          = -arch=sm_30 -Xcompiler -fPIC
+  NV35          = -arch=sm_35 -Xcompiler -fPIC
+  NVCC          = $(CUDA_ROOT)/bin/nvcc
+  NVCCFLAGS     = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+METIS_PATH = ../../metis-4.0
+METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG)
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+# PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+  PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+# CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+# F77 = gfortran
+# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+# BLAS = -framework Accelerate
+# LAPACK = -framework Accelerate
+# LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/SuiteSparse_config/SuiteSparse_config_GPU_gcc.mk b/SuiteSparse_config/SuiteSparse_config_GPU_gcc.mk
new file mode 100644
index 0000000..79d888c
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config_GPU_gcc.mk
@@ -0,0 +1,452 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+  CFLAGS = 
+# CFLAGS = -g
+# for the icc compiler and OpenMP:
+# CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = /usr/local/lib
+INSTALL_INCLUDE = /usr/local/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+  BLAS = -lblas -lgfortran
+  LAPACK = -llapack
+
+# MKL 
+# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+# LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+# CUDA_ROOT     =
+# GPU_BLAS_PATH =
+# GPU_CONFIG    =
+# CUDA_PATH     =
+# CUDART_LIB    =
+# CUBLAS_LIB    =
+# CUDA_INC_PATH =
+# NV20          =
+# NV30          =
+# NV35          =
+# NVCC          = echo
+# NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+  CUDA_ROOT     = /usr/local/cuda
+  GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+  GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+  CUDA_PATH     = $(CUDA_ROOT)
+  CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+  CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+  CUDA_INC_PATH = $(CUDA_ROOT)/include/
+  NV20          = -arch=sm_20 -Xcompiler -fPIC
+  NV30          = -arch=sm_30 -Xcompiler -fPIC
+  NV35          = -arch=sm_35 -Xcompiler -fPIC
+  NVCC          = $(CUDA_ROOT)/bin/nvcc
+  NVCCFLAGS     = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+METIS_PATH = ../../metis-4.0
+METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG)
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+# PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+  PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+# CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+# F77 = gfortran
+# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+# BLAS = -framework Accelerate
+# LAPACK = -framework Accelerate
+# LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/SuiteSparse_config/SuiteSparse_config_GPU_icc.mk b/SuiteSparse_config/SuiteSparse_config_GPU_icc.mk
new file mode 100644
index 0000000..8f75139
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config_GPU_icc.mk
@@ -0,0 +1,452 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+  CFLAGS = 
+# CFLAGS = -g
+# for the icc compiler and OpenMP:
+  CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = /usr/local/lib
+INSTALL_INCLUDE = /usr/local/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+# BLAS = -lblas -lgfortran
+# LAPACK = -llapack
+
+# MKL 
+  BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+  LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+# CUDA_ROOT     =
+# GPU_BLAS_PATH =
+# GPU_CONFIG    =
+# CUDA_PATH     =
+# CUDART_LIB    =
+# CUBLAS_LIB    =
+# CUDA_INC_PATH =
+# NV20          =
+# NV30          =
+# NV35          =
+# NVCC          = echo
+# NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+  CUDA_ROOT     = /usr/local/cuda
+  GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+  GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+  CUDA_PATH     = $(CUDA_ROOT)
+  CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+  CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+  CUDA_INC_PATH = $(CUDA_ROOT)/include/
+  NV20          = -arch=sm_20 -Xcompiler -fPIC
+  NV30          = -arch=sm_30 -Xcompiler -fPIC
+  NV35          = -arch=sm_35 -Xcompiler -fPIC
+  NVCC          = $(CUDA_ROOT)/bin/nvcc
+  NVCCFLAGS     = -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -Xcompiler -fPIC
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+METIS_PATH = ../../metis-4.0
+METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG)
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+# PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+  PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+  CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+# F77 = gfortran
+# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+# BLAS = -framework Accelerate
+# LAPACK = -framework Accelerate
+# LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/SuiteSparse_config/SuiteSparse_config_GPU_icc10.mk b/SuiteSparse_config/SuiteSparse_config_GPU_icc10.mk
new file mode 100644
index 0000000..8e2fde3
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config_GPU_icc10.mk
@@ -0,0 +1,453 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+  CFLAGS = 
+# CFLAGS = -g
+# for the icc compiler and OpenMP:
+  CXX = icpc
+  CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = /usr/local/lib
+INSTALL_INCLUDE = /usr/local/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+# BLAS = -lblas -lgfortran
+# LAPACK = -llapack
+
+# MKL 
+  BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+  LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+# CUDA_ROOT     =
+# GPU_BLAS_PATH =
+# GPU_CONFIG    =
+# CUDA_PATH     =
+# CUDART_LIB    =
+# CUBLAS_LIB    =
+# CUDA_INC_PATH =
+# NV20          =
+# NV30          =
+# NV35          =
+# NVCC          = echo
+# NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+#  CUDA_ROOT     = /usr/local/cuda
+  GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+ GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+ CUDA_PATH     = $(CUDA_ROOT)
+ CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+ CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+ CUDA_INC_PATH = $(CUDA_ROOT)/include/
+ NV20          = -arch=sm_20 -Xcompiler -fPIC
+ NV30          = -arch=sm_30 -Xcompiler -fPIC
+ NV35          = -arch=sm_35 -Xcompiler -fPIC
+ NVCC          = $(CUDA_ROOT)/bin/nvcc
+ NVCCFLAGS     = -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -Xcompiler -fPIC
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+METIS_PATH = ../../metis-4.0
+METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG)
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+# PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+  PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+  CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+# F77 = gfortran
+# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+# BLAS = -framework Accelerate
+# LAPACK = -framework Accelerate
+# LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/SuiteSparse_config/SuiteSparse_config_Mac.mk b/SuiteSparse_config/SuiteSparse_config_Mac.mk
new file mode 100644
index 0000000..9179819
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config_Mac.mk
@@ -0,0 +1,452 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+  CFLAGS = 
+# CFLAGS = -g
+# for the icc compiler and OpenMP:
+# CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = /usr/local/lib
+INSTALL_INCLUDE = /usr/local/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+  BLAS = -lblas -lgfortran
+  LAPACK = -llapack
+
+# MKL 
+# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+# LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+  CUDA_ROOT     =
+  GPU_BLAS_PATH =
+  GPU_CONFIG    =
+  CUDA_PATH     =
+  CUDART_LIB    =
+  CUBLAS_LIB    =
+  CUDA_INC_PATH =
+  NV20          =
+  NV30          =
+  NV35          =
+  NVCC          = echo
+  NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+# CUDA_ROOT     = /usr/local/cuda
+# GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+# CUDA_PATH     = $(CUDA_ROOT)
+# CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+# CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+# CUDA_INC_PATH = $(CUDA_ROOT)/include/
+# NV20          = -arch=sm_20 -Xcompiler -fPIC
+# NV30          = -arch=sm_30 -Xcompiler -fPIC
+# NV35          = -arch=sm_35 -Xcompiler -fPIC
+# NVCC          = $(CUDA_ROOT)/bin/nvcc
+# NVCCFLAGS     = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+METIS_PATH = ../../metis-4.0
+METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG)
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+  PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+# PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+# CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+  F77 = gfortran
+  CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+  BLAS = -framework Accelerate
+  LAPACK = -framework Accelerate
+  LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/SuiteSparse_config/SuiteSparse_config_linux.mk b/SuiteSparse_config/SuiteSparse_config_linux.mk
new file mode 100644
index 0000000..ba2da23
--- /dev/null
+++ b/SuiteSparse_config/SuiteSparse_config_linux.mk
@@ -0,0 +1,452 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+  CFLAGS = 
+# CFLAGS = -g
+# for the icc compiler and OpenMP:
+# CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = /usr/local/lib
+INSTALL_INCLUDE = /usr/local/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+  BLAS = -lblas -lgfortran
+  LAPACK = -llapack
+
+# MKL 
+# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+# LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+  CUDA_ROOT     =
+  GPU_BLAS_PATH =
+  GPU_CONFIG    =
+  CUDA_PATH     =
+  CUDART_LIB    =
+  CUBLAS_LIB    =
+  CUDA_INC_PATH =
+  NV20          =
+  NV30          =
+  NV35          =
+  NVCC          = echo
+  NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+# CUDA_ROOT     = /usr/local/cuda
+# GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+# CUDA_PATH     = $(CUDA_ROOT)
+# CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+# CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+# CUDA_INC_PATH = $(CUDA_ROOT)/include/
+# NV20          = -arch=sm_20 -Xcompiler -fPIC
+# NV30          = -arch=sm_30 -Xcompiler -fPIC
+# NV35          = -arch=sm_35 -Xcompiler -fPIC
+# NVCC          = $(CUDA_ROOT)/bin/nvcc
+# NVCCFLAGS     = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+METIS_PATH = ../../metis-4.0
+METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG)
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+# PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+  PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+# CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+# F77 = gfortran
+# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+# BLAS = -framework Accelerate
+# LAPACK = -framework Accelerate
+# LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/SuiteSparse_config/xerbla/Makefile b/SuiteSparse_config/xerbla/Makefile
new file mode 100644
index 0000000..9de7330
--- /dev/null
+++ b/SuiteSparse_config/xerbla/Makefile
@@ -0,0 +1,33 @@
+# Makefile for null-output xerbla
+
+default: ccode
+
+include ../SuiteSparse_config.mk
+
+ccode: libcerbla.a
+
+fortran: libxerbla.a 
+
+all: libxerbla.a libcerbla.a
+
+# Fortran version:
+libxerbla.a: xerbla.f
+	$(F77) $(F77FLAGS) -c xerbla.f
+	$(ARCHIVE)  libxerbla.a xerbla.o
+	- $(RANLIB) libxerbla.a
+	- $(RM) xerbla.o
+
+# C version:
+libcerbla.a: xerbla.c xerbla.h
+	$(CC) $(CF) -c xerbla.c
+	$(ARCHIVE)  libcerbla.a xerbla.o
+	- $(RANLIB) libcerbla.a
+	- $(RM) xerbla.o
+
+distclean: purge
+
+purge: clean
+	- $(RM) *.o *.a
+
+clean:
+	- $(RM) $(CLEAN)
diff --git a/UFconfig/xerbla/xerbla.c b/SuiteSparse_config/xerbla/xerbla.c
similarity index 100%
rename from UFconfig/xerbla/xerbla.c
rename to SuiteSparse_config/xerbla/xerbla.c
diff --git a/UFconfig/xerbla/xerbla.f b/SuiteSparse_config/xerbla/xerbla.f
similarity index 100%
rename from UFconfig/xerbla/xerbla.f
rename to SuiteSparse_config/xerbla/xerbla.f
diff --git a/UFconfig/xerbla/xerbla.h b/SuiteSparse_config/xerbla/xerbla.h
similarity index 100%
rename from UFconfig/xerbla/xerbla.h
rename to SuiteSparse_config/xerbla/xerbla.h
diff --git a/SuiteSparse_demo.m b/SuiteSparse_demo.m
index 2fc6c1c..ea5a775 100644
--- a/SuiteSparse_demo.m
+++ b/SuiteSparse_demo.m
@@ -1,4 +1,4 @@
-function SuiteSparse_demo (matrixpath)
+function SuiteSparse_demo (matrixpath, dopause)
 %SUITESPARSE_DEMO a demo of all packages in SuiteSparse
 %
 % Example:
@@ -7,123 +7,184 @@ function SuiteSparse_demo (matrixpath)
 % See also umfpack, cholmod, amd, camd, colamd, ccolamd, btf, klu,
 %   CSparse, CXSparse, ldlsparse
 
-% Copyright (c) Timothy A. Davis, Univ. of Florida
+% Copyright 2013, Timothy A. Davis, http://www.suitesparse.com.
 
-if (nargin < 1)
+if (nargin < 1 || isempty (matrixpath) || ~ischar (matrixpath))
     try
 	% older versions of MATLAB do not have an input argument to mfilename
 	p = mfilename ('fullpath') ;
-	t = strfind (p, filesep) ;
+	t = strfind (p, '/') ;
 	matrixpath = [ p(1:t(end)) 'CXSparse/Matrix' ] ;
-    catch
+    catch me    %#ok
 	% mfilename failed, assume we're in the SuiteSparse directory
 	matrixpath = 'CXSparse/Matrix' ;
     end
 end
 
-input ('Hit enter to run the CXSparse demo: ') ;
+if (nargin < 2)
+    dopause = false ;
+end
+
+if (dopause)
+    input ('Hit enter to run the CXSparse demo: ', 's') ;
+end
 try
     cs_demo (0, matrixpath)
-catch
+catch me
+    disp (me.message) ;
     fprintf ('\nIf you have an older version of MATLAB, you must run the\n') ;
     fprintf ('SuiteSparse_demo while in the SuiteSparse directory.\n\n') ;
     fprintf ('CXSparse demo failed\n' )
 end
 
-input ('Hit enter to run the UMFPACK demo: ') ;
+if (dopause)
+    input ('Hit enter to run the UMFPACK demo: ', 's') ;
+end
 try
     umfpack_demo (1)
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('UMFPACK demo failed\n' )
 end
 
-input ('Hit enter to run the CHOLMOD demo: ') ;
+if (dopause)
+    input ('Hit enter to run the CHOLMOD demo: ', 's') ;
+end
 try
     cholmod_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('CHOLMOD demo failed\n' )
 end
 
-input ('Hit enter to run the CHOLMOD graph partitioning demo: ') ;
+if (dopause)
+    input ('Hit enter to run the CHOLMOD graph partitioning demo: ', 's') ;
+end
 try
     graph_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('graph_demo failed, probably because METIS not installed\n') ;
 end
 
-input ('Hit enter to run the AMD demo: ') ;
+if (dopause)
+    input ('Hit enter to run the AMD demo: ', 's') ;
+end
 try
     amd_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('AMD demo failed\n' )
 end
 
-input ('Hit enter to run the CAMD demo: ') ;
+if (dopause)
+    input ('Hit enter to run the CAMD demo: ', 's') ;
+end
 try
     camd_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('CAMD demo failed\n' )
 end
 
-input ('Hit enter to run the COLAMD demo: ') ;
+if (dopause)
+    input ('Hit enter to run the COLAMD demo: ', 's') ;
+end
 try
     colamd_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('COLAMD demo failed\n' )
 end
 
-input ('Hit enter to run the CCOLAMD demo: ') ;
+if (dopause)
+    input ('Hit enter to run the CCOLAMD demo: ', 's') ;
+end
 try
     ccolamd_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('CCOLAMD demo failed\n' )
 end
 
-input ('Hit enter to run the BTF demo: ') ;
+if (dopause)
+    input ('Hit enter to run the BTF demo: ', 's') ;
+end
 try
     btf_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('BTF demo failed\n' )
 end
 
-input ('Hit enter to run the KLU demo: ') ;
+if (dopause)
+    input ('Hit enter to run the KLU demo: ', 's') ;
+end
 try
     klu_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('KLU demo failed\n' )
 end
 
-input ('Hit enter to run the LDL demo: ') ;
+if (dopause)
+    input ('Hit enter to run the LDL demo: ', 's') ;
+end
 try
     ldldemo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('LDL demo failed\n' )
 end
 
-input ('Hit enter to run the SSMULT demo: ') ;
+if (dopause)
+    input ('Hit enter to run the SSMULT demo: ', 's') ;
+end
 try
     ssmult_demo
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('SSMULT demo failed\n' )
 end
 
-input ('Hit enter to run the MESHND demo: ') ;
+if (dopause)
+    input ('Hit enter to run the MESHND demo: ', 's') ;
+end
 try
     meshnd_example
-catch
-    disp (lasterr) ;
+catch me
+    disp (me.message) ;
     fprintf ('MESHND demo failed\n' )
 end
 
+if (dopause)
+    input ('Hit enter to run the SPARSEINV demo: ', 's') ;
+end
+try
+    sparseinv_test
+catch me
+    disp (me.message) ;
+    fprintf ('SPARSEINV demo failed\n' )
+end
+
+if (dopause)
+    input ('Hit enter to run the SuiteSparseQR demo: ', 's') ;
+end
+try
+    spqr_demo
+catch me
+    disp (me.message) ;
+    fprintf ('SuiteSparseQR demo failed\n' )
+end
+
+if (dopause)
+    input ('Hit enter to run the quick spqr_rank demo: ', 's') ;
+end
+try
+    quickdemo_spqr_rank
+catch me
+    disp (me.message) ;
+    fprintf ('spqr_rank demo failed\n' )
+end
+
 fprintf ('\n\n---- SuiteSparse demos complete\n') ;
diff --git a/SuiteSparse_install.m b/SuiteSparse_install.m
index ee1249e..be28a55 100644
--- a/SuiteSparse_install.m
+++ b/SuiteSparse_install.m
@@ -1,7 +1,6 @@
 function SuiteSparse_install (do_demo)
 %SuiteSparse_install: compiles and installs all of SuiteSparse
-% A Suite of Sparse matrix packages, authored or co-authored by Tim Davis, Univ.
-% Florida. You must be in the same directory as SuiteSparse_install to use this.
+% A Suite of Sparse matrix packages, authored or co-authored by Tim Davis.
 %
 % Packages in SuiteSparse:
 %
@@ -11,255 +10,310 @@ function SuiteSparse_install (do_demo)
 % COLAMD         sparse column approximate minimum degree ordering
 % CAMD           constrained AMD
 % CCOLAMD        constrained COLAMD
-% CSparse        a Concise Sparse matrix package (32-bit/real only)
+% CSparse        a Concise Sparse matrix package (32-bit or 64-bit, real only)
 % CXSparse       extended version of CSparse (32-bit/64-bit/real/complex)
 % UFget          interface to UF Sparse Matrix Collection (MATLAB 7.0 or later)
 % KLU            sparse LU factorization (left-looking)
 % BTF            permutation to block triangular form (like dmperm)
 % LDL            sparse LDL' factorization
 % UFcollection   tools for managing the UF Sparse Matrix Collection
-% RBio           read/write Rutherford/Boeing files (requires Fortran compiler)
+% RBio           read/write Rutherford/Boeing files
 % SSMULT         sparse matrix times sparse matrix
 % MESHND         2D and 3D regular mesh generation and nested dissection
-% LINFACTOR      illustrates the use of LU and CHOL (MATLAB 7.3 or later)
+% FACTORIZE      an object-oriented solver for x=A\b
+% SPARSEINV      sparse inverse subset; computes entries of inv(sparse(A))
 % MATLAB_Tools   various simple m-files and demos
-%
-% CXSparse is installed in place of CSparse; cd to CSparse/MATLAB and type
-% cs_install if you wish to use the latter.  Since Microsoft Windows does not
-% support ANSI C99, CXSparse does not support complex matrices on Windows.
-%
-% Except where noted, all packages work on MATLAB 6.1 or later.  They have not
-% been tested on earlier versions, but they might work there.  Please let me
-% know if you try SuiteSparse on MATLAB 6.0 or earlier, whether it works or not.
+% SuiteSparseQR  sparse QR factorization
+% spqr_rank      MATLAB toolbox for sparse rank deficient matrices
 %
 % Example:
-%    SuiteSparse_install
-%    help SuiteSparse      % for more details
+%    SuiteSparse_install        % compile and prompt to run each package's demo
+%    SuiteSparse_install(0)     % compile but do not run the demo
+%    SuiteSparse_install(1)     % compile and run the demos with no prompts
+%    help SuiteSparse           % for more details
 %
 % See also AMD, COLAMD, CAMD, CCOLAMD, CHOLMOD, UMFPACK, CSPARSE, CXSPARSE,
-%      UFget, RBio, UFcollection, KLU, BTF, MESHND, SSMULT, LINFACTOR,
-%      SuiteSparse, PATHTOOL, PATH.
-
-% Copyright 1990-2007, Timothy A. Davis.
-% http://www.cise.ufl.edu/research/sparse
+%      UFget, RBio, UFcollection, KLU, BTF, MESHND, SSMULT, LINFACTOR, SPOK,
+%      SPQR_RANK, SuiteSparse, SPQR, PATHTOOL, PATH, FACTORIZE, SPARSEINV.
+%
+% This script installs the full-featured CXSparse rather than CSparse.
+%
+% Copyright 1990-2014, Timothy A. Davis, http://www.suitesparse.com.
 % In collaboration with Patrick Amestoy, Yanqing Chen, Iain Duff, John Gilbert,
-% Steve Hadfield, Bill Hager, Stefan Larimore, Esmond Ng, Eka Palamadai, and
-% Siva Rajamanickam.
+% Steve Hadfield, William Hager, Stefan Larimore, Leslie Foster,
+% Eka Palamadai Natarajan, Esmond Ng, and Siva Rajamanickam.
+
+%-------------------------------------------------------------------------------
+% initializations
+%-------------------------------------------------------------------------------
 
 paths = { } ;
 SuiteSparse = pwd ;
 
-% add MATLAB_Tools to the path (for getversion)
-cd ([SuiteSparse '/MATLAB_Tools']) ;
-paths = add_to_path (paths, pwd) ;
-cd (SuiteSparse) ;
-
 % determine the MATLAB version (6.1, 6.5, 7.0, ...)
-v = getversion ;
+v = version ;
 pc = ispc ;
 
-% check if METIS 4.0.1 is present where it's supposed to be
-have_metis = exist ('metis-4.0', 'dir') ;
-if (~have_metis)
-    fprintf ('CHOLMOD and KLU optionally use METIS 4.0.1.  Download it\n') ;
-    fprintf ('from http://glaros.dtc.umn.edu/gkhome/views/metis\n');
-    fprintf ('and place the metis-4.0 directory in this directory.\n') ;
-    fprintf ('Now compiling without METIS...\n\n') ;
-end
-
 % print the introduction
 help SuiteSparse_install
 
-fprintf ('MATLAB version %g (%s)\n', v, version) ;
+fprintf ('\nInstalling SuiteSparse for MATLAB version %s\n\n', v) ;
+
+% check if METIS 4.0.1 is present where it's supposed to be
+have_metis = exist ('metis-4.0/Lib', 'dir') ;
+if (~have_metis)
+    fprintf ('METIS 4.0.1 is not present.  CHOLMOD, KLU, UMFPACK and SPQR\n') ;
+    fprintf ('optionally use it as an ordering method.  To use METIS,\n') ;
+    fprintf ('download it from http://glaros.dtc.umn.edu/gkhome/views/metis\n');
+    fprintf ('and place the metis-4.0 directory in this directory\n') ;
+    fprintf ('so that ./metis-4.0/Lib exists.\n\n') ;
+    fprintf ('Now compiling without METIS.\n') ;
+else
+    fprintf ('\nCompiling with METIS 4.0.1.  You may safely ignore warnings\n');
+    fprintf ('in metis-4.0/Lib/util.c regarding a malformed format string.\n') ;
+end
 
 % add SuiteSparse to the path
-fprintf ('\nPlease wait while SuiteSparse is compiled and installed...\n') ;
+fprintf ('\n\nPlease wait while SuiteSparse is compiled and installed.\n\n') ;
 paths = add_to_path (paths, SuiteSparse) ;
 
+%-------------------------------------------------------------------------------
+% compile and install the packages
+%-------------------------------------------------------------------------------
+
 % compile and install UMFPACK
 try
-    cd ([SuiteSparse '/UMFPACK/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    umfpack_make
-catch
-    try
-	fprintf ('Trying to install with lcc_lib/libmwlapack.lib instead\n') ;
-	umfpack_make ('lcc_lib/libmwlapack.lib') ;
-    catch
-	fprintf ('UMFPACK not installed\n') ;
-    end
+    paths = add_to_path (paths, [SuiteSparse '/UMFPACK/MATLAB']) ;
+    umfpack_make ;
+catch me
+    disp (me.message) ;
+    fprintf ('UMFPACK not installed\n') ;
 end
 
 % compile and install CHOLMOD
 try
-    % determine whether or not to compile CHOLMOD
-    cd ([SuiteSparse '/CHOLMOD/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    if (have_metis)
-       cholmod_make
-    else
-       cholmod_make ('no metis') ;
-    end
-catch
+    paths = add_to_path (paths, [SuiteSparse '/CHOLMOD/MATLAB']) ;
+    cholmod_make ;
+catch me
+    disp (me.message) ;
     fprintf ('CHOLMOD not installed\n') ;
 end
 
 % compile and install AMD
 try
-    cd ([SuiteSparse '/AMD/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    amd_make
-catch
+    paths = add_to_path (paths, [SuiteSparse '/AMD/MATLAB']) ;
+    amd_make ;
+catch me
+    disp (me.message) ;
     fprintf ('AMD not installed\n') ;
 end
 
 % compile and install COLAMD
 try
-    cd ([SuiteSparse '/COLAMD/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    colamd_make
-catch
+    paths = add_to_path (paths, [SuiteSparse '/COLAMD/MATLAB']) ;
+    colamd_make ;
+catch me
+    disp (me.message) ;
     fprintf ('COLAMD not installed\n') ;
 end
 
 % compile and install CCOLAMD
 try
-    cd ([SuiteSparse '/CCOLAMD/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    ccolamd_make
-catch
+    paths = add_to_path (paths, [SuiteSparse '/CCOLAMD/MATLAB']) ;
+    ccolamd_make ;
+catch me
+    disp (me.message) ;
     fprintf ('CCOLAMD not installed\n') ;
 end
 
 % compile and install CAMD
 try
-    cd ([SuiteSparse '/CAMD/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    camd_make
-catch
+    paths = add_to_path (paths, [SuiteSparse '/CAMD/MATLAB']) ;
+    camd_make ;
+catch me
+    disp (me.message) ;
     fprintf ('CAMD not installed\n') ;
 end
 
-% compile and install CXSparse and UFget
+% install UFget, unless it's already in the path
 try
-    cd ([SuiteSparse '/CXSparse/MATLAB/CSparse']) ;
-    paths = add_to_path (paths, [SuiteSparse '/CXSparse/MATLAB/CSparse']) ;
-    paths = add_to_path (paths, [SuiteSparse '/CXSparse/MATLAB/Demo']) ;
-    if (v >= 7.0)
-	paths = add_to_path (paths, [SuiteSparse '/CXSparse/MATLAB/UFget']) ;
-	fprintf ('UFget installed successfully\n') ;
-    else
-	fprintf ('UFget skipped; requires MATLAB 7.0 or later\n') ;
+    % if this fails, then UFget is not yet installed
+    index = UFget ;
+    fprintf ('UFget already installed:\n') ;
+    which UFget
+catch
+    index = [ ] ;
+end
+if (isempty (index))
+    % UFget is not installed.  Use SuiteSparse/UFget
+    fprintf ('Installing SuiteSparse/UFget\n') ;
+    try
+        paths = add_to_path (paths, [SuiteSparse '/UFget']) ;
+    catch me
+        disp (me.message) ;
+        fprintf ('UFget not installed\n') ;
     end
+end
+
+% compile and install CXSparse
+try
+    paths = add_to_path (paths, [SuiteSparse '/CXSparse/MATLAB/Demo']) ;
+    paths = add_to_path (paths, [SuiteSparse '/CXSparse/MATLAB/CSparse']) ;
+    fprintf ('Compiling CXSparse:\n') ;
     if (pc)
 	% Windows does not support ANSI C99 complex, which CXSparse requires
-	fprintf ('Compiling CXSparse without complex support\n') ;
 	cs_make (1, 0) ;
     else
 	cs_make (1) ;
     end
-catch
+catch me
+    disp (me.message) ;
     fprintf ('CXSparse not installed\n') ;
 end
 
 % compile and install LDL
 try
-    cd ([SuiteSparse '/LDL/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    ldl_make
-catch
+    paths = add_to_path (paths, [SuiteSparse '/LDL/MATLAB']) ;
+    ldl_make ;
+catch me
+    disp (me.message) ;
     fprintf ('LDL not installed\n') ;
 end
 
 % compile and install BTF
 try
-    cd ([SuiteSparse '/BTF/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    btf_make
-catch
+    paths = add_to_path (paths, [SuiteSparse '/BTF/MATLAB']) ;
+    btf_make ;
+catch me
+    disp (me.message) ;
     fprintf ('BTF not installed\n') ;
 end
 
 % compile and install KLU
 try
-    cd ([SuiteSparse '/KLU/MATLAB']) ;
-    paths = add_to_path (paths, pwd) ;
-    klu_make (have_metis) ;
-catch
+    paths = add_to_path (paths, [SuiteSparse '/KLU/MATLAB']) ;
+    klu_make ;
+catch me
+    disp (me.message) ;
     fprintf ('KLU not installed\n') ;
 end
 
-% compile and install SSMULT
+% compile and install SuiteSparseQR
 try
-    cd ([SuiteSparse '/SSMULT']) ;
-    paths = add_to_path (paths, pwd) ;
-    ssmult_install (0) ;
-catch
-    fprintf ('SSMULT not installed\n') ;
+    if (pc)
+        fprintf ('Note that SuiteSparseQR will not compile with the lcc\n') ;
+        fprintf ('compiler provided with MATLAB on Windows\n') ;
+    end
+    paths = add_to_path (paths, [SuiteSparse '/SPQR/MATLAB']) ;
+    spqr_make ;
+catch me
+    disp (me.message) ;
+    fprintf ('SuiteSparseQR not installed\n') ;
+end
+
+% compile and install RBio
+try
+    paths = add_to_path (paths, [SuiteSparse '/RBio/RBio']) ;
+    RBmake ;
+catch me
+    disp (me.message) ;
+    fprintf ('RBio not installed.\n') ;
+end
+
+% install MATLAB_Tools/*
+try
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/Factorize']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/MESHND']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/LINFACTOR']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/find_components']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/GEE']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/shellgui']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/waitmex']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/spqr_rank']) ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/spqr_rank/SJget']) ;
+    fprintf ('MATLAB_Tools installed\n') ;
+catch me
+    disp (me.message) ;
+    fprintf ('MATLAB_Tools not installed\n') ;
 end
 
 % compile and install UFcollection
 try
     % do not try to compile with large-file I/O for MATLAB 6.5 or earlier
-    cd ([SuiteSparse '/UFcollection']) ;
-    paths = add_to_path (paths, pwd) ;
-    UFcollection_install (v < 7.0) ;
-catch
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/UFcollection']) ;
+    UFcollection_install (verLessThan ('matlab', '7.0')) ;
+catch me
+    disp (me.message) ;
     fprintf ('UFcollection not installed\n') ;
 end
 
-% install LINFACTOR, MESHND, MATLAB_Tools/*
+% compile and install SSMULT
 try
-    cd ([SuiteSparse '/MESHND']) ;
-    paths = add_to_path (paths, pwd) ;
-    if (v > 7.2)
-        % LINFACTOR requires MATLAB 7.3 or later
-        cd ([SuiteSparse '/LINFACTOR']) ;
-        paths = add_to_path (paths, pwd) ;
-        fprintf ('LINFACTOR installed\n') ;
-    end
-    cd ([SuiteSparse '/MATLAB_Tools/shellgui']) ;
-    paths = add_to_path (paths, pwd) ;
-    cd ([SuiteSparse '/MATLAB_Tools/waitmex']) ;
-    paths = add_to_path (paths, pwd) ;
-    fprintf ('MESHND, MATLAB_Tools installed\n') ;
-catch
-    fprintf ('LINFACTOR, MESHND, or MATLAB_Tools not installed\n') ;
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/SSMULT']) ;
+    ssmult_install ;
+catch me
+    disp (me.message) ;
+    fprintf ('SSMULT not installed\n') ;
 end
 
-% compile and install RBio (not on Windows ... no default Fortran compiler)
-if (~pc)
-    try
-	cd ([SuiteSparse '/RBio']) ;
-	RBmake
-	paths = add_to_path (paths, pwd) ;
-    catch
-	disp (lasterr)
-	fprintf ('RBio not installed (Fortran compiler required).\n') ;
-    end
+% compile and install dimacs10
+try
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/dimacs10']) ;
+    dimacs10_install (0) ;
+catch me
+    disp (me.message) ;
+    fprintf ('MATLAB_Tools/dimacs10 not installed\n') ;
 end
 
+% compile and install spok
+try
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/spok']) ;
+    spok_install ;
+catch me
+    disp (me.message) ;
+    fprintf ('MATLAB_Tools/spok not installed\n') ;
+end
+
+% compile and install sparsinv
+try
+    paths = add_to_path (paths, [SuiteSparse '/MATLAB_Tools/sparseinv']) ;
+    sparseinv_install ;
+catch me
+    disp (me.message) ;
+    fprintf ('MATLAB_Tools/sparseinv not installed\n') ;
+end
+
+%-------------------------------------------------------------------------------
 % post-install wrapup
+%-------------------------------------------------------------------------------
 
 cd (SuiteSparse)
-fprintf ('SuiteSparse is now installed.\n') ;
+fprintf ('SuiteSparse is now installed.\n\n') ;
 
+% run the demo, if requested
 if (nargin < 1)
     % ask if demo should be run
-    y = input ('Hit enter to run the SuiteSparse demo (or "n" to quit): ', 's') ;
+    y = input ('Hit enter to run the SuiteSparse demo (or "n" to quit): ', 's');
     if (isempty (y))
         y = 'y' ;
     end
     do_demo = (y (1) ~= 'n') ;
+    do_pause = true ;
+else
+    % run the demo without pausing
+    do_pause = false ;
 end
 if (do_demo)
     try
-	SuiteSparse_demo ;
-    catch
+	SuiteSparse_demo ([ ], do_pause) ;
+    catch me
+        disp (me.message) ;
 	fprintf ('SuiteSparse demo failed\n') ;
     end
 end
 
+% print the list of new directories added to the path
 fprintf ('\nSuiteSparse installation is complete.  The following paths\n') ;
 fprintf ('have been added for this session.  Use pathtool to add them\n') ;
 fprintf ('permanently.  If you cannot save the new path because of file\n');
@@ -270,10 +324,11 @@ for k = 1:length (paths)
 end
 cd (SuiteSparse)
 
-fprintf ('\nSuiteSparse for MATLAB %g installation complete\n', getversion) ;
+fprintf ('\nSuiteSparse for MATLAB %s installation complete\n', v) ;
 
 %-------------------------------------------------------------------------------
 function paths = add_to_path (paths, newpath)
 % add a path
+cd (newpath) ;
 addpath (newpath) ;
 paths = [paths { newpath } ] ;						    %#ok
diff --git a/SuiteSparse_test.m b/SuiteSparse_test.m
index 01647ae..f9d230d 100644
--- a/SuiteSparse_test.m
+++ b/SuiteSparse_test.m
@@ -10,19 +10,22 @@ function SuiteSparse_test
 %
 % See also SuiteSparse_install, SuiteSparse_demo.
 
-% Copyright 2007, Tim Davis, University of Florida
+% Copyright 1990-2013, Timothy A. Davis, http://www.suitesparse.com.
 
-npackages = 13 ;
+help SuiteSparse_test
+
+npackages = 18 ;
 h = waitbar (0, 'SuiteSparse test:') ;
 SuiteSparse = pwd ;
+package = 0 ;
 
-v = getversion ;
-if (v < 7)
+if (verLessThan ('matlab', '7.0'))
     error ('SuiteSparse_test requires MATLAB 7.0 or later') ;
 end
 
 % if at UF, ensure pre-installed UF Sparse Matrix Collection is used
-uf = { '/cise/homes/davis/Install/UFget', 'd:/UFget', '/share/UFget' } ;
+uf = { '/cise/homes/davis/Install/UFget', 'd:/UFget', '/share/UFget', ...
+    '/windows/UFget', '/cise/research/sparse/UFget' } ;
 for k = 1:length(uf)
     if (exist (uf {k}, 'dir'))
         addpath (uf {k}) ;
@@ -33,31 +36,30 @@ end
 try
 
     %---------------------------------------------------------------------------
-    % CSparse (32-bit MATLAB only)
+    % CSparse (both 64-bit and 32-bit MATLAB)
     %---------------------------------------------------------------------------
 
-    if (isempty (strfind (computer, '64')))
-        % compile and install CSparse (not installed by SuiteSparse_install)
-        waitbar (1/(npackages+1), h, 'SuiteSparse test: CSparse') ;
-        addpath ([SuiteSparse '/CSparse/MATLAB/CSparse']) ;
-        addpath ([SuiteSparse '/CSparse/MATLAB/Demo']) ;
-        cd ([SuiteSparse '/CSparse/MATLAB/CSparse']) ;
-        cs_make ;
-
-        % test CSparse
-        cd ([SuiteSparse '/CSparse/MATLAB/Test']) ;
-        testall ;
-
-        % uninstall CSparse by removing it from path
-        rmpath ([SuiteSparse '/CSparse/MATLAB/CSparse']) ;
-        rmpath ([SuiteSparse '/CSparse/MATLAB/Demo']) ;
-    end
+    % compile and install CSparse (not installed by SuiteSparse_install)
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: CSparse') ;
+    addpath ([SuiteSparse '/CSparse/MATLAB/CSparse']) ;
+    addpath ([SuiteSparse '/CSparse/MATLAB/Demo']) ;
+    cd ([SuiteSparse '/CSparse/MATLAB/CSparse']) ;
+    cs_make ;
+    % test CSparse
+    cd ([SuiteSparse '/CSparse/MATLAB/Test']) ;
+    testall ;
+    % uninstall CSparse by removing it from path
+    rmpath ([SuiteSparse '/CSparse/MATLAB/CSparse']) ;
+    rmpath ([SuiteSparse '/CSparse/MATLAB/Demo']) ;
+    rmpath ([SuiteSparse '/CSparse/MATLAB/UFget']) ;
 
     %---------------------------------------------------------------------------
     % CXSparse
     %---------------------------------------------------------------------------
 
-    waitbar (2/(npackages+1), h, 'SuiteSparse test: CXSparse') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: CXSparse') ;
     cd ([SuiteSparse '/CXSparse/MATLAB/Test']) ;
     testall ;
 
@@ -65,7 +67,8 @@ try
     % COLAMD
     %---------------------------------------------------------------------------
 
-    waitbar (3/(npackages+1), h, 'SuiteSparse test: COLAMD') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: COLAMD') ;
     cd ([SuiteSparse '/COLAMD/MATLAB']) ;
     colamd_test ;
 
@@ -73,7 +76,8 @@ try
     % CCOLAMD
     %---------------------------------------------------------------------------
 
-    waitbar (4/(npackages+1), h, 'SuiteSparse test: CCOLAMD') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: CCOLAMD') ;
     cd ([SuiteSparse '/CCOLAMD/MATLAB']) ;
     ccolamd_test ;
 
@@ -81,15 +85,17 @@ try
     % UMFPACK
     %---------------------------------------------------------------------------
 
-    waitbar (5/(npackages+1), h, 'SuiteSparse test: UMFPACK') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: UMFPACK') ;
     cd ([SuiteSparse '/UMFPACK/MATLAB']) ;
-    umfpack_test (800) ;
+    umfpack_test (100) ;
 
     %---------------------------------------------------------------------------
     % CHOLMOD
     %---------------------------------------------------------------------------
 
-    waitbar (6/(npackages+1), h, 'SuiteSparse test: CHOLMOD') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: CHOLMOD') ;
     cd ([SuiteSparse '/CHOLMOD/MATLAB/Test']) ;
     cholmod_test ;
 
@@ -97,7 +103,8 @@ try
     % BTF
     %---------------------------------------------------------------------------
 
-    waitbar (7/(npackages+1), h, 'SuiteSparse test: BTF') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: BTF') ;
     cd ([SuiteSparse '/BTF/MATLAB/Test']) ;
     btf_test ;
 
@@ -105,15 +112,17 @@ try
     % KLU
     %---------------------------------------------------------------------------
 
-    waitbar (8/(npackages+1), h, 'SuiteSparse test: KLU') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: KLU') ;
     cd ([SuiteSparse '/KLU/MATLAB/Test']) ;
-    klu_test ;
+    klu_test (100) ;
 
     %---------------------------------------------------------------------------
     % LDL
     %---------------------------------------------------------------------------
 
-    waitbar (9/(npackages+1), h, 'SuiteSparse test: LDL') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: LDL') ;
     cd ([SuiteSparse '/LDL/MATLAB']) ;
     ldlmain2 ;
     ldltest ;
@@ -122,9 +131,12 @@ try
     % LINFACTOR:  MATLAB 7.3 (R2006b) or later required
     %---------------------------------------------------------------------------
 
-    if (v > 7.2)
-        waitbar (10/(npackages+1), h, 'SuiteSparse test: LINFACTOR') ;
-        cd ([SuiteSparse '/LINFACTOR']) ;
+    package = package + 1 ;
+    if (verLessThan ('matlab', '7.3'))
+        % skip test of LINFACTOR
+    else
+        waitbar (package/(npackages+1), h, 'SuiteSparse test: LINFACTOR') ;
+        cd ([SuiteSparse '/MATLAB_Tools/LINFACTOR']) ;
         lintests ;
     end
 
@@ -132,36 +144,66 @@ try
     % MESHND
     %---------------------------------------------------------------------------
 
-    waitbar (11/(npackages+1), h, 'SuiteSparse test: MESHND') ;
-    cd ([SuiteSparse '/MESHND']) ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: MESHND') ;
+    cd ([SuiteSparse '/MATLAB_Tools/MESHND']) ;
     meshnd_quality ;
 
     %---------------------------------------------------------------------------
     % SSMULT
     %---------------------------------------------------------------------------
 
-    waitbar (12/(npackages+1), h, 'SuiteSparse test: SSMULT') ;
-    cd ([SuiteSparse '/SSMULT']) ;
-    ssmult_test ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: SSMULT') ;
+    cd ([SuiteSparse '/MATLAB_Tools/SSMULT']) ;
+    sstest3 ;
 
     %---------------------------------------------------------------------------
-    % MATLAB_Tools
+    % other MATLAB_Tools
     %---------------------------------------------------------------------------
 
-    waitbar (13/(npackages+1), h, 'SuiteSparse test: MATLAB Tools') ;
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: MATLAB Tools') ;
     cd ([SuiteSparse '/MATLAB_Tools']) ;
-    figure (1) ;
-    clf
-    pagerankdemo (1000) ;
-    figure (2) ;
-    clf
+    fprintf ('getversion: %g\n', getversion) ;
     seashell ;
     shellgui ;
     cd ([SuiteSparse '/MATLAB_Tools/waitmex']) ;
     waitmex ;
-    url = 'http://www.cise.ufl.edu/research/sparse' ;
+    url = 'http://www.suitesparse.com' ;
     fprintf ('<a href="%s">Click here for more details</a>\n', url) ;
     hprintf ('or see <a href="%s">\n', url) ;
+    cd ([SuiteSparse '/MATLAB_Tools/find_components']) ;
+    find_components_example (1, 0) ;
+    cd ([SuiteSparse '/MATLAB_Tools/spok']) ;
+    spok_test ;
+
+    %---------------------------------------------------------------------------
+    % FACTORIZE
+    %---------------------------------------------------------------------------
+
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: FACTORIZE') ;
+    cd ([SuiteSparse '/MATLAB_Tools/Factorize/Test']) ;
+    test_all ;
+
+    %---------------------------------------------------------------------------
+    % SPARSEINV
+    %---------------------------------------------------------------------------
+
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: SPARSEINV') ;
+    cd ([SuiteSparse '/MATLAB_Tools/sparseinv']) ;
+    sparseinv_test
+
+    %---------------------------------------------------------------------------
+    % SPQR_RANK
+    %---------------------------------------------------------------------------
+
+    package = package + 1 ;
+    waitbar (package/(npackages+1), h, 'SuiteSparse test: spqr_rank') ;
+    cd ([SuiteSparse '/MATLAB_Tools/spqr_rank']) ;
+    demo_spqr_rank ;
 
     %---------------------------------------------------------------------------
     % AMD, CAMD, UFcollection, UFget
@@ -169,14 +211,14 @@ try
 
     % no exhaustive tests; tested via other packages
 
-catch
+catch                                                                       %#ok
 
     %---------------------------------------------------------------------------
     % test failure
     %---------------------------------------------------------------------------
 
     cd (SuiteSparse) ;
-    disp (lasterr) ;
+    disp (lasterr) ;                                                        %#ok
     fprintf ('SuiteSparse test: FAILED\n') ;
     return
 
diff --git a/UFcollection/Doc/ChangeLog b/UFcollection/Doc/ChangeLog
deleted file mode 100644
index fcda4ab..0000000
--- a/UFcollection/Doc/ChangeLog
+++ /dev/null
@@ -1,20 +0,0 @@
-Nov 1, 2007, version 1.1.1
-
-    * added isND field to the index
-
-    * minor change to web page creation
-
-May 31, 2007, version 1.1.0
-
-    * port to 64-bit MATLAB
-
-Dec 12, 2006, version 1.0.1
-
-    * very minor MATLAB cleanup
-
-Dec 2, 2006, version 1.0.
-
-    * UFcollection Version 1.0 released.  Used for substantial changes to the
-	UF Sparse Matrix Collection.  See the Change Log for that collection
-	at http://www.cise.ufl.edu/research/sparse/mat/ChangeLog.
-
diff --git a/UFcollection/Doc/License.txt b/UFcollection/Doc/License.txt
deleted file mode 100644
index 1fbc603..0000000
--- a/UFcollection/Doc/License.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-UFcollection toolbox.  Version 1.0.  Copyright (C) 2006,
-Timothy A. Davis
-UFcollection is also available under other licenses; contact authors for
-details.
-http://www.cise.ufl.edu/research/sparse
-
---------------------------------------------------------------------------------
-
-UFcollection is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-UFcollection is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this Module; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
diff --git a/UFcollection/README.txt b/UFcollection/README.txt
deleted file mode 100644
index 54870d9..0000000
--- a/UFcollection/README.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-UFcollection, Version 1.1.1, Nov 1, 2007.
-
-UFcollection is a MATLAB toolbox for managing the UF Sparse Matrix Collection.
-If you are a MATLAB user of the collection, you would not normally need to use
-this toolbox.  It contains code for creating the index for the collection (the
-UF_Index.mat file in the UFget package), for creating the web pages for the
-collection, and creating the Matrix Market and Rutherford/Boeing versions of
-the matrices.  This code is posted here primarily so that users of the
-collection can see how the matrices and their statistics were generated.
-
-This software (UFread, specifically) also allows the user to keep a single copy
-of the collection for use both inside MATLAB and outside MATLAB.  The MM/ and
-RB/ versions of the collection can be read into MATLAB via UFread, even without
-explicitly extracting the tar files.  They can also be read by non-MATLAB
-programs.  Since the whole collection is about 8GB in size (compressed, as of
-Dec 2006), this can save some space.  UFread is much slower than UFget,
-however.
-
-
---------------------------------------------------------------------------------
-MATLAB help for the UFcollection toolbox:
---------------------------------------------------------------------------------
-
-  UFcollection: software for managing the UF Sparse Matrix Collection
-
-  To create the index:
-
-    UFindex    - create the index for the UF Sparse Matrix Collection
-    UFstats    - compute matrix statistics for the UF Sparse Matrix Collection
-
-  To create the web pages:
-
-    UFallpages - create all web pages for the UF Sparse Matrix Collection
-    UFgplot    - draw a plot of the graph of a sparse matrix
-    UFint      - print an integer to a string, adding commas every 3 digits
-    UFlist     - create a web page index for the UF Sparse Matrix Collection
-    UFlists    - create the web pages for each matrix list (group, name, etc.)
-    UFlocation - URL and top-level directory of the UF Sparse Matrix Collection
-    UFpage     - create web page for a matrix in UF Sparse Matrix Collection
-    UFpages    - create web page for each matrix in UF Sparse Matrix Collection
-    dsxy2figxy - Transform point or position from axis to figure coords
-
-  To create the Matrix Market and Rutherford/Boeing versions of the collection:
-
-    UFexport     - export to Matrix Market and Rutherford/Boeing formats
-    UFread       - read a Problem in Matrix Market or Rutherford/Boeing format
-    UFwrite      - write a Problem in Matrix Market or Rutherford/Boeing format
-    UFfull_read  - read a full matrix using a subset of Matrix Market format
-    UFfull_write - write a full matrix using a subset of Matrix Market format
-
-  Example:
-    UFindex       % create index (UF_Index.mat) for use by UFget
-    UFallpages    % create all web pages for the UF Sparse Matrix Collection
-
-  Requires UFget, CSparse, CHOLMOD, AMD, COLAMD, RBio, and METIS.
-
-  Copyright 2007, Timothy A. Davis
-
---------------------------------------------------------------------------------
-Files:
---------------------------------------------------------------------------------
-
-    Contents.m		    MATLAB help
-    dsxy2figxy.m	    convert XY points for plot annotations
-    Makefile		    Unix/Linux installation, or use UFcollection_install
-    README.txt		    this file
-    UFallpages.m	    create all web pages
-    UFexport.m		    export to MM and RB
-    UFcollection_install.m  installation
-    UFfull_read.m	    read a full matrix
-    UFfull_write.c	    write a full matrix
-    UFfull_write.m	    MATLAB help for UFfull_write
-    UFgplot.m		    plot a graph
-    UFindex.m		    create UF_Index.mat
-    UFint.m		    print an integer
-    UFlist.m		    create a web page index
-    UFlists.m		    create all web page indices
-    UFlocation.m	    URL and directory for the collection
-    UFpage.m		    create a web page for a matrix
-    UFpages.m		    create web pages for all matrices
-    UFread.m		    read a Problem
-    UFstats.m		    compute statistics about a matrix
-    UFwrite.m		    write a Problem
-
-./Doc:
-    gpl.txt		    GNU GPL license
-    License.txt
-
---------------------------------------------------------------------------------
-To add a matrix to the collection:
---------------------------------------------------------------------------------
-
-These instructions are for the maintainer of the collection (that is, just
-notes to myself), but they also indicate how the above software is used.
-
-Requires most of SuiteSparse (UFget, CHOLMOD, AMD, COLAMD, CSparse, RBio, and
-UFcollection), and METIS 4.0.1.
-
-1) Get the matrix into MATLAB (method depending on how the matrix was
-    submitted).  Use load and sparse2, RBread, mread, or specialized code
-    written just for that matrix.
-
-2) Add the matrix to the end of UF_Listing.txt (a line in the form Group/Name).
-
-3) Create a new directory /cise/research/sparse/public_html/mat/Group,
-    where Group is the new matrix group.  Add a README.txt file to this
-    directory, the first line of which is a one-line summary that will appear
-    in the top-level web page for the collection.  Skip this step if adding a
-    matrix to an existing group.
-
-4) Create the Problem struct; type "help UFwrite" for details.  Required fields:
-
-    Problem.name    full name of the matrix (Group/Name)
-    Problem.title   short descriptive title
-    Problem.A	    the sparse matrix
-    Problem.id	    integer corresponding to the line number in UF_Listing.txt
-    Problem.date    date the matrix was created, or added to the collection
-    Problem.author  matrix author
-    Problem.ed	    matrix editor/collector
-    Problem.kind    a string.  For a description, see:
-
-	http://www.cise.ufl.edu/research/sparse/matrices/kind.html
-
-    optional fields:
-
-    Problem.Zeros   binary pattern of explicit zero entries
-    Problem.b	    right-hand-side
-    Problem.x	    solution
-    Problem.notes   a char array
-    Problem.aux	    auxiliary matrices (contents are problem dependent)
-
-    Save to a MATLAB mat-file.  In the mat directory, do:
-
-    save (Problem.name, 'Problem', '-v7') ;
-
-5) Compute matrix statistics and extend the UF_Index:
-
-    UFindex (ids)
-
-    where ids is a list of the new matrix id's.
-
-    If updating UF_Index.mat, a copy must exist in the current directory for
-    UFindex to find it.  (At UF, do so in the 2sparse/Matrix directory,
-    and copy the current UF_Index.mat there first).
-
-    Copy the new UF_Index.mat file into /cise/research/sparse/public_html/mat.
-
-6) Update the web pages:
-
-    In the /cise/research/sparse/public_html directory, do:
-
-    UFlists
-    UFpages (1, ids)
-
-7) Export the matrix in Matrix Market and Rutherford/Boeing formats.
-
-    UFexport (ids)
-
-    or
-
-    UFexport (ids, 'check')
-
-    then tar and compress the resulting MM/Group/Name and RB/Group/Name
-    directories, one per Problem (if UFexport has not already done so).
-    Copy the MM and RB matrices from the 2sparse/MM and /RB directories into
-    the sparse/public_html directory.
-
-8) Make the collection world-readable.  In /cise/research/sparse/public_html do:
-
-    chmod -R og+rX mat matrices MM RB
-
-9) Optional: if a new group was added, manually edit the
-    /cise/research/sparse/public_html/matrices/index.html file, adding a
-    new thumbnail image to the Sample Gallery.  If a new Problem.kind was
-    introduced, describe it in the matrices/kind.html file.
-
diff --git a/UFcollection/UFcollection_install.m b/UFcollection/UFcollection_install.m
deleted file mode 100644
index 529fe77..0000000
--- a/UFcollection/UFcollection_install.m
+++ /dev/null
@@ -1,29 +0,0 @@
-function UFcollection_install (nlargefile)
-%UFCOLLECTION_INSTALL install the UFcollection toolbox
-%
-% Example:
-%   UFcollection_install
-%
-% See also UFget.
-
-% Copyright 2006-2007, Timothy A. Davis
-
-if (nargin < 1)
-    % try with large-file I/O
-    nlargefile = 0 ;
-end
-
-if (nlargefile)
-    fprintf ('Trying to compile without large file support...\n') ;
-    mex -I../UFconfig -DNLARGEFILE UFfull_write.c
-else
-    try
-	mex -I../UFconfig UFfull_write.c
-    catch
-	fprintf ('Trying to compile without large file support...\n') ;
-	mex -I../UFconfig -DNLARGEFILE UFfull_write.c
-    end
-end
-
-addpath (pwd) ;
-fprintf ('UFcollection toolbox successfully compiled.\n') ;
diff --git a/UFcollection/UFexport.m b/UFcollection/UFexport.m
deleted file mode 100644
index f5f2881..0000000
--- a/UFcollection/UFexport.m
+++ /dev/null
@@ -1,78 +0,0 @@
-function UFexport (list, check, tmp)
-%UFEXPORT export to Matrix Market and Rutherford/Boeing formats
-%
-% Example:
-%   UFexport ;          % export the entire collection
-%   UFexport (list) ;   % just export matrices whose id's are given in the list
-%   UFexport (list, 'check') ;      % also read them back in, to check
-%
-% If the list is empty, all matrices in the collection are exported.
-% A 3rd argument tmp changes the tmp directory for UFread.
-%
-% See also UFget, UFwrite, RBio, mwrite.
-
-
-% Copyright 2006-2007, Timothy A. Davis
-
-%-------------------------------------------------------------------------------
-% get the input arguments
-%-------------------------------------------------------------------------------
-
-index = UFget ;
-nmat = length (index.nrows) ;
-
-if (nargin < 1 || isempty (list))
-    list = 1:nmat ;
-end
-
-check = ((nargin > 1) && strcmp (check, 'check')) ;
-
-if (nargin < 3)
-    tmp = '' ;
-end
-
-%-------------------------------------------------------------------------------
-% determine the top-level directory to use
-%-------------------------------------------------------------------------------
-
-[url topdir] = UFlocation ;
-
-%-------------------------------------------------------------------------------
-% export the matrices
-%-------------------------------------------------------------------------------
-
-for id = list
-
-    % get the MATLAB version
-    Problem = UFget (id, index) ;
-    disp (Problem) ;
-
-    % create the MM and RB versions
-    UFwrite (Problem, [topdir 'MM'], 'MM', 'tar') ;
-    UFwrite (Problem, [topdir 'RB'], 'RB', 'tar') ;
-
-    % check the new MM and RB versions
-    if (check)
-	for format = { 'MM' , 'RB' }
-	    try
-		if (isempty (tmp))
-		    P2 = UFread ([topdir format{1} filesep Problem.name]) ;
-		else
-		    P2 = UFread ([topdir format{1} filesep Problem.name], tmp) ;
-		end
-	    catch
-		% The Problem may be too large for two copies to be in the
-		% MATLAB workspace at the same time.  This is not an error,
-		% but it means that the Problem cannot be checked.
-		P2 = [ ] ;
-		fprintf ('Unable to read %s/%s\n', format {1}, Problem.name) ;
-		fprintf ('%s\n', lasterr) ;
-	    end
-	    if (~isempty (P2) && ~isequal (Problem, P2))
-		error ('%s version mismatch: %s\n', format {1}, Problem.name) ;
-	    end
-	    clear P2
-	end
-    end
-end
-
diff --git a/UFcollection/UFfull_write.c b/UFcollection/UFfull_write.c
deleted file mode 100644
index edee0d2..0000000
--- a/UFcollection/UFfull_write.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* ========================================================================== */
-/* === UFcollection/UFfull ================================================== */
-/* ========================================================================== */
-
-/* UFcollection: a MATLAB toolbox for managing the UF Sparse Matrix Collection.
- * Copyright (c) 2007, Timothy A. Davis, Univ. Florida.  */
-
-/* ========================================================================== */
-
-/* UFfull_write (filename, X): write a full matrix to a file.  A small subset of
- * the Matrix Market format is used.  The first line is one of:
- *
- *	%%MatrixMarket matrix real complex general
- *	%%MatrixMarket matrix array complex general
- * 
- * The 2nd line contains two numbers: m and n, where X is m-by-n.  The next
- * m*n lines contain the numerical values (one per line if real, two per line
- * if complex, containing the real and imaginary parts).  The values are
- * listed in column-major order.  The resulting file can be read by any
- * Matrix Market reader, or by UFfull_read.  No comments or blank lines are
- * used.
- */
-
-#ifndef NLARGEFILE
-#include "io64.h"
-#endif
-
-#include "UFconfig.h"
-#include "mex.h"
-#include <math.h>
-#define MAXLINE 1030
-#define BIG 1e308
-
-/* -------------------------------------------------------------------------- */
-/* print_value */
-/* -------------------------------------------------------------------------- */
-
-static void print_value (FILE *f, double x, char *s)
-{
-    double y ;
-    int k, width ;
-
-    /* change -inf to -BIG, and change +inf and nan to +BIG */
-    if (x != x || x >= BIG)
-    {
-	x = BIG ;
-    }
-    else if (x <= -BIG)
-    {
-	x = -BIG ;
-    }
-
-    /* convert to int and back again */
-    k = (int) x ;
-    y = (double) k ;
-    if (y == x)
-    {
-	/* x is a small integer */
-	fprintf (f, "%d", k) ;
-    }
-    else
-    {
-	/* x is not an integer, use the smallest width possible */
-	for (width = 6 ; width < 20 ; width++)
-	{
-	    /* write the value to a string, read it back in, and check */
-	    sprintf (s, "%.*g", width, x) ;
-	    sscanf (s, "%lg", &y) ;
-	    if (x == y) break ;
-	}
-	fprintf (f, "%s", s) ;
-    }
-}
-
-
-/* -------------------------------------------------------------------------- */
-/* UFfull */
-/* -------------------------------------------------------------------------- */
-
-void mexFunction
-(
-    int nargout,
-    mxArray *pargout [ ],
-    int nargin,
-    const mxArray *pargin [ ]
-)
-{
-    int iscomplex ;
-    size_t nrow, ncol, i, j ;
-    double *Ax, *Az ;
-    char filename [MAXLINE], s [MAXLINE] ;
-    FILE *f ;
-
-    /* ---------------------------------------------------------------------- */
-    /* check inputs */
-    /* ---------------------------------------------------------------------- */
-
-    if (nargout > 0 || nargin != 2)
-    {
-	mexErrMsgTxt ("usage: UFfull (filename,A)") ;
-    }
-    if (mxIsSparse (pargin [1]) || !mxIsClass (pargin [1], "double"))
-    {
-	mexErrMsgTxt ("A must be full and double") ;
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* get filename and open the file */
-    /* ---------------------------------------------------------------------- */
-
-    if (!mxIsChar (pargin [0]))
-    {
-	mexErrMsgTxt ("first parameter must be a filename") ;
-    }
-    mxGetString (pargin [0], filename, MAXLINE) ;
-    f = fopen (filename, "w") ;
-    if (f == NULL)
-    {
-	mexErrMsgTxt ("error openning file") ;
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* get the matrix */
-    /* ---------------------------------------------------------------------- */
-
-    iscomplex = mxIsComplex (pargin [1]) ;
-    nrow = mxGetM (pargin [1]) ;
-    ncol = mxGetN (pargin [1]) ;
-    Ax = mxGetPr (pargin [1]) ;
-    Az = mxGetPi (pargin [1]) ;
-
-    /* ---------------------------------------------------------------------- */
-    /* write the matrix */
-    /* ---------------------------------------------------------------------- */
-
-    if (iscomplex)
-    {
-	fprintf (f, "%%%%MatrixMarket matrix array complex general\n") ;
-    }
-    else
-    {
-	fprintf (f, "%%%%MatrixMarket matrix array real general\n") ;
-    }
-    fprintf (f, "%d %d\n", nrow, ncol) ;
-    for (j = 0 ; j < ncol ; j++)
-    {
-	for (i = 0 ; i < nrow ; i++)
-	{
-	    print_value (f, Ax [i + j*nrow], s) ;
-	    if (iscomplex)
-	    {
-		fprintf (f, " ") ;
-		print_value (f, Az [i + j*nrow], s) ;
-	    }
-	    fprintf (f, "\n") ;
-	}
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* close the file */
-    /* ---------------------------------------------------------------------- */
-
-    fclose (f) ;
-}
diff --git a/UFcollection/UFfull_write.m b/UFcollection/UFfull_write.m
deleted file mode 100644
index 7d42907..0000000
--- a/UFcollection/UFfull_write.m
+++ /dev/null
@@ -1,29 +0,0 @@
-function UFfull_write (filename, A)					    %#ok
-%UFFULL_WRITE write a full matrix using a subset of Matrix Market format
-% Usage:
-%
-%   UFfull_write (filename, A)
-%
-% A small subset of the Matrix Market format is used.  The first line is one of:
-%
-%    %%MatrixMarket matrix real complex general
-%    %%MatrixMarket matrix array complex general
-% 
-% The second line contains two numbers: m and n, where A is m-by-n.  The next
-% m*n lines contain the numerical values (one per line if real, two per line
-% if complex, containing the real and imaginary parts).  The values are listed
-% in column-major order.  The resulting file can be read by any Matrix Market
-% reader, or by UFfull_read.  No comments or blank lines are used.
-%
-% Example:
-%   x = rand (8)
-%   UFfull_write ('xfile', x)
-%   y = UFfull_read ('xfile')
-%   norm (x-y)
-%
-% See also mread, mwrite, RBwrite, RBread.
-
-% Copyright 2006-2007, Timothy A. Davis
-
-error ('UFfull_write mexFunction not found') ;
-
diff --git a/UFcollection/UFindex.m b/UFcollection/UFindex.m
deleted file mode 100644
index 5bfb030..0000000
--- a/UFcollection/UFindex.m
+++ /dev/null
@@ -1,396 +0,0 @@
-function UF_Index = UFindex (matrixlist)
-%UFINDEX create the index for the UF Sparse Matrix Collection
-%
-% UF_Index = UFindex (matrixlist)
-%
-% matrixlist: an integer list, in the range of 1 to the length of the
-%   UF_Listing.txt file, containing a list of matrices for which to modify
-%   the UF_Index entries.  If matrixlist is not present, then the UF_Index
-%   is created from scratch.
-%
-% UF_Index:  a struct containing the index information, with the
-%   following fields, assuming that there are n matrices in the collection:
-%
-%   LastRevisionDate: a string with the date and time the index was updated.
-%   DowloadTimeStamp: date and time the index was last downloaded.
-%
-%   Group: an n-by-1 cell array.  Group {i} is the group for matrix i.
-%   Name: n-by-1 cell array.  Name {i} is the name of matrix i.
-%
-%   The following fields are n-by-1 vectors unless otherwise specified.
-%   nrows(id) gives the number of rows of the matrix with id = Problem.id,
-%   for example.
-%
-%   nrows           number of rows
-%   ncols           number of columns
-%   nnz             number of entries in A
-%   RBtype          Rutherford/Boeing type, an n-by-3 char array
-%   isBinary        1 if binary, 0 otherwise
-%   isReal          1 if real, 0 if complex
-%   cholcand        1 if a candidate for sparse Cholesky, 0 otherwise
-%   numerical_symmetry  numeric symmetry (0 to 1, where 1=symmetric)
-%   pattern_symmetry    pattern symmetry (0 to 1, where 1=symmetric)
-%   nnzdiag         nnz (diag (A)) if A is square, 0 otherwise
-%   nzero           nnz (Problem.Zeros)
-%   amd_lnz         nnz(L) for chol(C(p,p)) where, C=A+A', p=amd(C)
-%   amd_flops       flop count for chol(C(p,p)) where, C=A+A', p=amd(C)
-%   amd_vnz         nnz in Householder vectors for qr(A(:,colamd(A)))
-%   amd_rnz         nnz in R for qr(A(:,colamd(A)))
-%   metis_lnz       nnz(L) for chol(C(p,p)) where, C=A+A', p=metis(C)
-%   metis_flops     flop count for chol(C(p,p)) where, C=A+A', p=metis(C)
-%   metis_vnz       nnz in Householder vectors for qr(A(:,metis(A,'col')))
-%   metis_rnz       nnz in R for qr(A(:,metis(A,'col')))
-%   nblocks         # of blocks from dmperm
-%   sprank          sprank(A)
-%   nzoff           # of entries not in diagonal blocks from dmperm
-%   ncc             # of strongly connected components
-%   dmperm_lnz      nnz(L), using dmperm plus amd or metis
-%   dmperm_unz      nnz(U), using dmperm plus amd or metis
-%   dmperm_flops    flop count with dperm plus
-%   dmperm_vnz      nnz in Householder vectors for dmperm plus
-%   dmperm_rnz      nnz in R for dmperm plus
-%   posdef          1 if positive definite, 0 otherwise
-%   isND	    1 if a 2D/3D problem, 0 otherwise
-%
-% If the statistic is not computed, it is set to -2.  Some statistics are not
-% computed for rectangular or structurally singular matrices, for example.
-% If an attempt to compute the statistic was made, but failed, it is set to -1.
-%
-% Example:
-%   UFindex
-%   UFindex (267:300)
-%
-% See also UFstats, amd, metis, RBtype, cs_scc, cs_sqr, cs_dmperm.
-
-% Copyright 2006-2007, Timothy A. Davis
-
-% Requires the SuiteSparse set of packages: CHOLMOD, AMD, COLAMD, RBio, CSparse;
-% and METIS.
-
-%   10/13/2001: Created by Erich Mirabal
-%   12/6/2001, 1/17/2003, 11/16/2006:  modified by Tim Davis
-
-%-------------------------------------------------------------------------------
-% initialize an empty index
-%-------------------------------------------------------------------------------
-
-% load the filenames
-[url topdir] = UFlocation ;
-files = textread ([topdir 'mat' filesep 'UF_Listing.txt'], '%s') ;
-
-% if no input, assume we have to do the whole file list
-create_new = 0 ;
-if (nargin < 1)
-    matrixlist = 1:length(files) ;
-    create_new = 1 ;
-else
-    % validate the input : range is limited by the files variable
-    if (min (matrixlist) < 1) || (max (matrixlist) > length (files))
-        error ('%s: %s', mfilename, 'Invalid input parameter.') ;
-    end
-end
-
-if (~create_new)
-    % load the index from file
-    fprintf ('Loading existing UF_Index.mat file\n') ;
-    UF_Index = load ('UF_Index.mat') ;
-    UF_Index = UF_Index.UF_Index ;
-end
-
-% revision tracking device
-UF_Index.LastRevisionDate = datestr (now) ;
-
-% the index structure needs a download date for version tracking
-UF_Index.DownloadTimeStamp = now ;
-
-% start the index from scratch
-if (create_new)
-
-    fprintf ('Creating new UF_Index.mat file\n') ;
-    nothing = -ones (1, length (files)) ;
-
-    UF_Index.Group = cell (size (files)) ;
-    UF_Index.Name = cell (size (files)) ;       
-
-    UF_Index.nrows = nothing ;
-    UF_Index.ncols = nothing ;
-    UF_Index.nnz = nothing ;
-    UF_Index.nzero = nothing ;
-    UF_Index.pattern_symmetry = nothing ;
-    UF_Index.numerical_symmetry = nothing ;
-    UF_Index.isBinary = nothing ;
-    UF_Index.isReal = nothing ;
-
-    % removed has_b, has_guess, has_x, has_Zeros, is_lp, has_coord, zdiag
-
-    UF_Index.nnzdiag = nothing ;
-
-    UF_Index.posdef = nothing ;
-
-    UF_Index.amd_lnz	= nothing ;
-    UF_Index.amd_flops	= nothing ;
-    UF_Index.amd_vnz	= nothing ;
-    UF_Index.amd_rnz	= nothing ;
-
-    UF_Index.metis_lnz	= nothing ;
-    UF_Index.metis_flops = nothing ;
-    UF_Index.metis_vnz	= nothing ;
-    UF_Index.metis_rnz	= nothing ;
-
-    UF_Index.nblocks	= nothing ;
-    UF_Index.sprank	= nothing ;
-    UF_Index.nzoff	= nothing ;
-
-    UF_Index.dmperm_lnz	= nothing ;
-    UF_Index.dmperm_unz	= nothing ;
-    UF_Index.dmperm_flops = nothing ;
-    UF_Index.dmperm_vnz	= nothing ;
-    UF_Index.dmperm_rnz	= nothing ;
-
-    % added RBtype, cholcand, ncc
-    UF_Index.RBtype = char (' '*ones (length (files),3)) ;
-    UF_Index.cholcand = nothing ;
-    UF_Index.ncc = nothing ;
-
-    % added isND
-    UF_Index.isND = nothing ;
-
-else
-
-    % make sure we have the right length for the arrays
-    if length (UF_Index.nrows) < max (matrixlist)
-
-        len = max (matrixlist) - length (UF_Index.nrows) ;
-        nothing = -ones (1, len) ;
-
-	if (len > 0)
-
-	    % don't worry about the cell arrays, only append to numeric arrays
-	    UF_Index.nrows = [UF_Index.nrows nothing] ;
-	    UF_Index.ncols = [UF_Index.ncols nothing] ;
-	    UF_Index.nnz = [UF_Index.nnz nothing] ;
-	    UF_Index.nzero = [UF_Index.nzero nothing] ;
-	    UF_Index.pattern_symmetry = [UF_Index.pattern_symmetry nothing] ;
-	    UF_Index.numerical_symmetry = [UF_Index.numerical_symmetry nothing];
-	    UF_Index.isBinary = [UF_Index.isBinary nothing] ;
-	    UF_Index.isReal = [UF_Index.isReal nothing] ;
-
-	    UF_Index.nnzdiag = [UF_Index.nnzdiag nothing] ;
-
-	    UF_Index.posdef = [UF_Index.posdef nothing] ;
-
-	    UF_Index.amd_lnz	= [UF_Index.amd_lnz nothing] ;
-	    UF_Index.amd_flops	= [UF_Index.amd_flops nothing] ;
-	    UF_Index.amd_vnz	= [UF_Index.amd_vnz nothing] ;
-	    UF_Index.amd_rnz	= [UF_Index.amd_rnz nothing] ;
-
-	    UF_Index.metis_lnz	= [UF_Index.metis_lnz nothing] ;
-	    UF_Index.metis_flops= [UF_Index.metis_flops nothing] ;
-	    UF_Index.metis_vnz	= [UF_Index.metis_vnz nothing] ;
-	    UF_Index.metis_rnz	= [UF_Index.metis_rnz nothing] ;
-
-	    UF_Index.nblocks	= [UF_Index.nblocks nothing] ;
-	    UF_Index.sprank	= [UF_Index.sprank nothing] ;
-	    UF_Index.nzoff	= [UF_Index.nzoff nothing] ;
-
-	    UF_Index.dmperm_lnz	= [UF_Index.dmperm_lnz nothing] ;
-	    UF_Index.dmperm_unz	= [UF_Index.dmperm_unz nothing] ;
-	    UF_Index.dmperm_flops= [UF_Index.dmperm_flops nothing] ;
-	    UF_Index.dmperm_vnz	= [UF_Index.dmperm_vnz nothing] ;
-	    UF_Index.dmperm_rnz	= [UF_Index.dmperm_rnz nothing] ;
-
-	    UF_Index.RBtype = [UF_Index.RBtype ; char (' '*ones (len,3))] ;
-	    UF_Index.cholcand = [UF_Index.cholcand nothing] ;
-	    UF_Index.ncc = [UF_Index.ncc nothing] ;
-
-	    UF_Index.isND = [UF_Index.isND nothing] ;
-	end
-
-    end
-end
-
-fprintf ('Will process %d files\n', length (matrixlist)) ;
-
-nmat = length (UF_Index.nrows) ;
-filesize = zeros (nmat,1) ;
-
-%-------------------------------------------------------------------------------
-% look through the directory listing, and sort matrixlist by size
-%-------------------------------------------------------------------------------
-
-for i = matrixlist
-
-    % note that the matrix is not loaded in this for loop
-    ffile = deblank (files {i}) ;
-
-    % group is the first part of the string up to the character before
-    % the last file separator
-    gi = find (ffile == filesep) ;
-    gi = gi (end) ;
-    groupN = char (ffile (1:gi-1)) ;
-
-    % name is the last section of the string after the last file separator
-    matrixN = char (ffile (gi+1:end)) ;
-
-    % get the directory info of the .mat file
-    fileInfo = dir ([topdir 'mat' filesep ffile '.mat']) ;
-
-    % set the file's data into the data arrays
-    UF_Index.Name {i} = matrixN ;
-    UF_Index.Group {i} = groupN ;
-
-    if (length (fileInfo) > 0)						    %#ok
-	filesize (i) = fileInfo.bytes ;
-    else
-	filesize (i) = 9999999999 ;
-    end
-    % fprintf ('%s / %s filesize %d\n', groupN, matrixN, fileInfo.bytes) ;
-
-end
-
-fprintf ('\n======================================================\n') ;
-fprintf ('Matrices will processed in the following order:\n') ;
-for i = matrixlist
-    ffile = deblank (files {i}) ;
-    fprintf ('Matrix %d: %s filesize %d\n', i, ffile, filesize (i)) ;
-    if (filesize (i) == 9999999999)
-	fprintf ('skip this file\n') ;
-	continue ;
-    end
-end
-
-%-------------------------------------------------------------------------------
-% load the matrices
-%-------------------------------------------------------------------------------
-
-% metis (A,'col') fails with a seg fault for these matrices:
-skip_metis = [850 858 1257 1258] ;
-
-% these matrices are known to be positive definite, and indefinite,
-% respectively, but sparse Cholesky fails (on a 4GB Penitum 4) on some of them:
-known_posdef = [ 939 1252 1267 1268 1423 1453 1455 ] ;
-known_indef = [ 1348:1368 1586 1411 ] ;
-
-% these matrices are known to be irreducible, but dmperm fails
-known_irreducible = 916 ;
-
-for k = 1:length (matrixlist)
-
-    %---------------------------------------------------------------------------
-    % get the matrix
-    %---------------------------------------------------------------------------
-
-    id = matrixlist (k) ;
-    ffile = deblank (files {id}) ;
-    fprintf ('\n============================== Matrix %d: %s\n', id, ffile) ;
-    if (filesize (id) == 9999999999)
-	fprintf ('skip this file\n') ;
-	continue ;
-    end
-    load ([topdir 'mat' filesep ffile]) ;
-
-    % display the Problem struct
-    disp (Problem) ;
-
-    %---------------------------------------------------------------------------
-    % get all stats
-    %---------------------------------------------------------------------------
-
-    nometis = any (id == skip_metis) ;
-    if (nometis)
-	fprintf ('skip metis - will fail\n') ;
-    end
-
-    fprintf ('%s/%s\n', UF_Index.Group {id}, UF_Index.Name {id}) ;
-
-    if (isfield (Problem, 'Zeros'))
-	stats = UFstats (Problem.A, Problem.kind, nometis, Problem.Zeros) ;
-    else
-	stats = UFstats (Problem.A, Problem.kind, nometis) ;
-    end
-
-    %---------------------------------------------------------------------------
-    % fix special cases
-    %---------------------------------------------------------------------------
-
-    if (stats.posdef == -1)
-	if (any (id == known_posdef))
-	    fprintf ('known posdef\n') ;
-	    stats.posdef = 1 ;
-	elseif (any (id == known_indef))
-	    fprintf ('known indef\n') ;
-	    stats.posdef = 0 ;
-	end
-    end
-    if (any (id == known_irreducible) && stats.sprank < 0)
-	% full sprank, and not reducible to block triangular form,
-	% but the matrix is to big for dmperm
-	fprintf ('known irreducible\n') ;
-	stats.sprank = stats.nrows  ;
-	stats.nzoff = 0 ;
-	stats.nblocks = 1 ;
-	stats.ncc = 1 ;
-    end
-
-    % display the stats
-    disp (stats) ;
-
-    %---------------------------------------------------------------------------
-    % save the stats in the index
-    %---------------------------------------------------------------------------
-
-    UF_Index.nrows (id) = stats.nrows ;
-    UF_Index.ncols (id) = stats.ncols ;
-    UF_Index.nnz (id) = stats.nnz ;
-    UF_Index.nzero (id) = stats.nzero ;
-
-    UF_Index.pattern_symmetry (id) = stats.psym ;
-    UF_Index.numerical_symmetry (id) = stats.nsym ;
-    UF_Index.isBinary (id) = stats.isBinary ;
-    UF_Index.isReal (id) = stats.isReal ;
-
-    UF_Index.nnzdiag (id) = stats.nnzdiag ;
-
-    UF_Index.posdef (id) = stats.posdef ;
-
-    UF_Index.amd_lnz (id) = stats.amd_lnz ;
-    UF_Index.amd_flops (id) = stats.amd_flops ;
-    UF_Index.amd_vnz (id) = stats.amd_vnz ;
-    UF_Index.amd_rnz (id) = stats.amd_rnz ;
-
-    UF_Index.metis_lnz (id) = stats.metis_lnz ;
-    UF_Index.metis_flops (id) = stats.metis_flops ;
-    UF_Index.metis_vnz (id) = stats.metis_vnz ;
-    UF_Index.metis_rnz (id) = stats.metis_rnz ;
-
-    UF_Index.nblocks (id) = stats.nblocks ;
-    UF_Index.sprank (id) = stats.sprank ;
-    UF_Index.nzoff (id) = stats.nzoff ;
-
-    UF_Index.dmperm_lnz (id) = stats.dmperm_lnz ;
-    UF_Index.dmperm_unz (id) = stats.dmperm_unz ;
-    UF_Index.dmperm_flops (id) = stats.dmperm_flops ;
-    UF_Index.dmperm_vnz (id) = stats.dmperm_vnz ;
-    UF_Index.dmperm_rnz (id) = stats.dmperm_rnz ;
-
-    UF_Index.RBtype (id,:) = stats.RBtype ;
-    UF_Index.cholcand (id) = stats.cholcand ;
-    UF_Index.ncc (id) = stats.ncc ;
-
-    UF_Index.isND (id) = stats.isND ;
-
-    %---------------------------------------------------------------------------
-    % clear the problem and save the index
-    %---------------------------------------------------------------------------
-
-    clear Problem
-    save UF_Index UF_Index
-
-    % flush the diary
-    if (strcmp (get (0, 'Diary'), 'on'))
-	diary off
-	diary on
-    end
-end
-
-
diff --git a/UFcollection/UFlist.m b/UFcollection/UFlist.m
deleted file mode 100644
index 44e46e7..0000000
--- a/UFcollection/UFlist.m
+++ /dev/null
@@ -1,339 +0,0 @@
-function UFlist (what, group)
-%UFLIST create a web page index for the UF Sparse Matrix Collection
-%
-% Usage: UFlist (what)
-%
-%  what:
-%       'group'     sort by group, then filename
-%       'name'      sort by name
-%       'dimension' sort by max row or col dimension
-%       'id'        sort by id (default, if "what" is not present)
-%       'number of nonzeros'   sort by number of nonzeros
-%       'type'      sort by type, then dimension
-%       'symmetry'  sort by symmetry.  Rectangular matrices first, sorted by
-%                   min(nrow,ncol)-max(nrow,ncol), then numerical symmetry
-%                   0 to just less than one.  Then numerical symmetry = 1
-%                   but not spd (sorted by dimension).  Then spd sorted
-%                   by dimension.
-%
-% If two arguments are present, only that group is created.
-% In this case, "what" must be "group".
-%
-% Example:
-%
-%   UFlist ('id')
-%   UFlist ('group', 'HB')
-%
-% See also UFget, UFint.
-
-% Copyright 2006-2007, Timothy A. Davis
-
-index = UFget ;
-
-if (nargin < 1)
-    what = 'id' ;
-end
-
-by_group = (nargin > 1) ;
-
-% create the primary directory
-[url topdir] = UFlocation ;
-matrices = [topdir 'matrices'] ;
-if (~exist (matrices, 'dir'))
-    mkdir (matrices) ;
-end
-
-if (by_group)
-    fprintf ('group: %s\n', group) ;
-    loc = '../' ;
-    if (~exist ([matrices filesep group], 'dir'))
-	mkdir ([matrices filesep group]) ;
-    end
-    f = fopen ([matrices filesep group filesep 'index.html'], 'w') ;
-else
-    fprintf ('list: %s\n', what) ;
-    f = fopen ([matrices filesep 'list_by_' what '.html'], 'w') ;
-    loc = '' ;
-end
-if (f < 0)
-    error ('unable to create html file\n') ;
-end
-
-nmat = length (index.nrows) ;
-
-% add the header
-fprintf (f, ...
-    '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n') ;
-fprintf (f, '<html lang="EN"><head>\n') ;
-fprintf (f, '<meta http-equiv="content-type" content="text/html; charset=') ;
-fprintf (f, 'iso-8859-1">') ;
-if (by_group)
-    fprintf (f, '<title>UF Sparse Matrix Collection - %s group', group) ;
-else
-    fprintf (f, '<title>UF Sparse Matrix Collection - sorted by ') ;
-    if (strcmp (what, 'nnz'))
-	fprintf (f, 'number of nonzeros') ;
-    else
-	fprintf (f, '%s', what) ;
-    end
-end
-fprintf (f, '</title></head>\n') ;
-fprintf (f, '<body bgcolor="#ffffff" link="#0021a5">\n') ;
-fprintf (f, ...
-    '<li><a href="%sindex.html">UF Sparse Matrix Collection</a><hr>\n', loc) ;
-if (by_group)
-    fprintf (f, '<p>UF Sparse Matrix Collection: %s group.<p>\n', group) ;
-else
-    fprintf (f, '<p>UF Sparse Matrix Collection, sorted by %s.\n', what) ;
-    fprintf (f, '  Click on a column header to sort by that column.<p>\n') ;
-end
-
-% add link to mat/<group>/README.txt
-if (by_group)
-    fprintf (f, '<li><a href="../../mat/%s/README.txt">', group) ;
-    fprintf (f, 'Click here for a description of the %s group.</a>\n', group) ;
-end
-
-fprintf (f, '<li><a href="%sgroups.html">', loc) ;
-fprintf (f, 'Click here for a list of all matrix groups.</a>\n') ;
-
-fprintf (f, '<li><a href="%slist_by_id.html">', loc) ;
-fprintf (f, 'Click here for a list of all matrices.</a>\n') ;
-
-fprintf (f, '<p><table border=1>\n') ;
-
-% sort by filename
-[ignore, iname] = sort (lower (index.Name)) ;
-
-if (by_group)
-
-    list = [ ] ;
-    for i = 1:nmat
-	if (strcmp (group, index.Group {i}))
-	    list = [list i] ;						    %#ok
-	end
-    end
-    [ignore i] = sort (lower (index.Name (list))) ;
-    list = list (i) ;
-
-    if (isempty (list))
-	error ('empty group!') ;
-    end
-
-elseif (strcmp (what, 'group'))
-
-    % sort by filename, then stable sort by group
-    [ignore, i] = sort (lower (index.Group (iname))) ;
-    list = iname (i) ;
-
-elseif (strcmp (what, 'name'))
-
-    % sort by filename only
-    list = iname' ;
-
-elseif (strcmp (what, 'dimension'))
-
-    % sort by filename, then stable sort by max dimension
-    [ignore, i] = sort (max (index.nrows (iname), index.ncols (iname))) ;
-    list = iname (i) ;
-
-elseif (strcmp (what, 'id'))
-
-    list = 1:nmat ;
-
-elseif (strcmp (what, 'nnz'))
-
-    % sort by filename, then stable sort by nnz
-    [ignore, i] = sort (index.nnz (iname)) ;
-    list = iname (i) ;
-
-elseif (strcmp (what, 'symmetry'))
-
-%	'symmetry'  sort by symmetry.  Rectangular matrices first, sorted by
-%			min(nrow,ncol)-max(nrow,ncol), then numerical symmetry
-%			0 to just less than one.  Then numerical symmetry = 1
-%			but not spd (sorted by dimension).  Then spd sorted
-%			by dimension.
-
-
-    s1 = min (index.nrows, index.ncols) - max (index.nrows, index.ncols) ;
-    s2 = index.numerical_symmetry ;
-    s2 (find (s2) == -1) = 1 ;
-    s3 = index.posdef ;
-    s3 (find (s3) == -1) = 2 ;
-    s4 = max (index.nrows, index.ncols) ;
-
-    [ignore list] = sortrows ([s1' s2' s3' s4'], [1 2 3 4]) ;
-
-elseif (strcmp (what, 'type'))
-
-    [ignore i1] = sort (max (index.nrows, index.ncols)) ;
-    s = index.RBtype (i1,:) ;
-    [ignore i2] = sortrows (s) ;
-    list = i1 (i2) ;
-
-else
-    error ('unknown list') ;
-end
-
-% ensure list is a row vector
-list = list (:)' ;
-
-% print the header
-fprintf (f, '<tr>\n') ;
-
-if (by_group)
-    fprintf (f, '<th>thumbnail</th>\n') ;
-    fprintf (f, '<th>Group\n') ;
-    fprintf (f, 'and Name</th>\n') ;
-    fprintf (f, '<th>id</th>\n') ;
-    fprintf (f, '<th>download</th>\n') ;
-    fprintf (f, '<th># rows</th>\n') ;
-    fprintf (f, '<th># cols</th>\n') ;
-    fprintf (f, '<th>nonzeros</th>\n') ;
-    fprintf (f, '<th>type</th>\n') ;
-    fprintf (f, '<th>sym</th>\n') ;
-    fprintf (f, '<th>spd?</th>\n') ;
-else
-    fprintf (f, '<th>thumbnail</th>\n') ;
-    fprintf (f, '<th><a href=%slist_by_group.html>Group</a>\n', loc) ;
-    fprintf (f, 'and <a href=%slist_by_name.html>Name</a></th>\n', loc) ;
-    fprintf (f, '<th><a href=%slist_by_id.html>id</a></th>\n', loc) ;
-    fprintf (f, '<th>download</th>\n') ;
-    fprintf (f, '<th><a href=%slist_by_dimension.html># rows</a></th>\n', loc) ;
-    fprintf (f, '<th><a href=%slist_by_dimension.html># cols</a></th>\n', loc) ;
-    fprintf (f, '<th><a href=%slist_by_nnz.html>nonzeros</a></th>\n', loc) ;
-    fprintf (f, '<th><a href=%slist_by_type.html>type</a></th>\n', loc) ;
-    fprintf (f, '<th><a href=%slist_by_symmetry.html>sym</a></th>\n', loc) ;
-    fprintf (f, '<th><a href=%slist_by_symmetry.html>spd?</a></th>\n', loc) ;
-end
-
-for id = list
-
-    group = index.Group {id} ;
-    name = index.Name {id} ;
-    nrows = index.nrows (id) ;
-    ncols = index.ncols (id) ;
-    nz = index.nnz (id) ;
-    sym = index.numerical_symmetry (id) ;
-    mtype = index.RBtype (id,:) ;
-
-    s = index.posdef (id) ;
-    if (s == 0)
-	ss = '-' ;
-    elseif (s == 1)
-	ss = 'yes' ;
-    else
-	ss = '?' ;
-    end
-
-    fprintf (f, '<tr>\n') ;
-
-    % thumbnail link to the matrix page
-    fprintf (f, '<td>\n') ;
-    w = 'width="96" height="72"' ;
-    if (by_group)
-	fprintf (f, '<a href="%s.html"><img %s alt="%s/%s"', ...
-            name, w, group, name) ;
-	fprintf (f, ' src="%s_thumb.png"></a>\n', name) ;
-    else
-	fprintf (f, '<a href="%s/%s.html"><img %s alt="%s/%s"', ...
-	    group, name, w, group, name) ;
-	fprintf (f, ' src="%s/%s_thumb.png"></a>\n', group, name) ;
-    end
-    fprintf (f, '</td>\n') ;
-
-    % group
-    if (by_group)
-	fprintf (f, '<td>%s/', group) ;
-    else
-	fprintf (f, '<td><a href="%s/index.html">%s</a>/', group, group);
-    end
-    
-    % name
-    if (by_group)
-	fprintf (f, '<a href="%s.html">%s</a></td>\n', name, name) ;
-    else
-	fprintf (f, '<a href="%s/%s.html">%s</a></td>\n', group, name, name) ;
-    end
-
-    % id
-    fprintf (f, '<td>%d</td>\n', id) ;
-
-    % download links
-    fprintf (f, '<td>\n') ;
-    fprintf (f, '<a href="%s../mat/%s/%s.mat">MAT</a>', loc, group, name) ;
-    fprintf (f, ', <a href="%s../MM/%s/%s.tar.gz">MM</a>', loc, group, name) ;
-    fprintf (f, ', <a href="%s../RB/%s/%s.tar.gz">RB</a>', loc, group, name) ;
-    fprintf (f, '</td>\n') ;
-
-    % nrow
-    fprintf (f, '<td align=right>%s</td>\n', UFint (nrows)) ;
-
-    % ncols
-    fprintf (f, '<td align=right>%s</td>\n', UFint (ncols)) ;
-
-    % nz
-    fprintf (f, '<td align=right>%s</td>\n', UFint (nz)) ;
-
-    % print the Rutherford/Boeing type
-    mattype = '' ;
-    if (mtype (1) == 'r')
-	mattype = 'real' ;
-    elseif (mtype (1) == 'c')
-	mattype = 'complex' ;
-    elseif (mtype (1) == 'i')
-	mattype = 'integer' ;
-    elseif (mtype (1) == 'p')
-	mattype = 'binary' ;
-    end
-    if (mtype (2) == 'r')
-	mattype = [mattype ' rectangular'] ;				    %#ok
-    elseif (mtype (2) == 'u')
-	mattype = [mattype ' unsymmetric'] ;				    %#ok
-    elseif (mtype (2) == 's')
-	mattype = [mattype ' symmetric'] ;				    %#ok
-    elseif (mtype (2) == 'h')
-	mattype = [mattype ' Hermitian'] ;				    %#ok
-    elseif (mtype (2) == 'z')
-	mattype = [mattype ' skew-symmetric'] ;				    %#ok
-    end
-    fprintf (f, '<td>%s</td>\n', mattype) ;
-
-    % numerical symmetry (as a percentage)
-    if (sym == -1)
-	fprintf (f, '<td align=right>?</td>\n') ;
-    elseif (sym == 1)
-	fprintf (f, '<td align=right>yes</td>\n') ;
-    elseif (nrows ~= ncols)
-	fprintf (f, '<td align=right>-</td>\n') ;
-    else
-	if (sym > 0 && sym < 0.01)
-	    fprintf (f, '<td align=right>%5.2f%%</td>\n', sym * 100) ;
-	else
-	    fprintf (f, '<td align=right>%5.0f%%</td>\n', sym * 100) ;
-	end
-    end
-
-    % positive definite?
-    fprintf (f, '<td>%s</td>\n', ss) ;
-
-    fprintf (f, '</tr>\n\n') ;
-end
-
-fprintf (f, '</table>\n\n') ;
-
-fprintf (f, '<p><p><i>Maintained by <a href="http://www.cise.ufl.edu/~davis">');
-fprintf (f, 'Tim Davis</a>, last updated %s.', date) ;
-fprintf (f, '<br>Matrix pictures by <a href=') ;
-fprintf (f, '"%sCSparse/CSparse/MATLAB/CSparse/cspy.m">cspy</a>, a MATLAB', ...
-    url) ;
-fprintf (f, ' function in the <a href="%sCSparse">CSparse</a> package.\n', ...
-    url) ;
-fprintf (f, '<br>See <a href="%smat/UFget">UFget</a> to download directly', ...
-    url) ;
-fprintf (f, ' into MATLAB.') ;
-fprintf (f, '</body>\n') ;
-fprintf (f, '</html>\n') ;
-
-fclose (f) ;
diff --git a/UFcollection/UFlists.m b/UFcollection/UFlists.m
deleted file mode 100644
index 8d4cb7e..0000000
--- a/UFcollection/UFlists.m
+++ /dev/null
@@ -1,114 +0,0 @@
-function UFlists
-%UFLISTS create the web pages for each matrix list (group, name, etc.)
-% Places the web pages in the matrices/ subdirectory of the current directory.
-%
-% Example:
-%   UFlists
-%
-% See also UFget, UFlist
-
-% Copyright 2006-2007, Timothy A. Davis
-
-% create all the web pages for the lists
-UFlist ('group') ;
-UFlist ('name') ;
-UFlist ('id') ;
-UFlist ('dimension') ;
-UFlist ('nnz') ;
-UFlist ('symmetry') ;
-UFlist ('type') ;
-
-% do all the group pages, and the list of groups
-index = UFget ;
-nmat = length (index.nrows) ;
-
-[ignore, i] = sort (index.Group) ;
-g = index.Group (i) ;
-
-% create the primary directory
-[url topdir] = UFlocation ;
-matrices = [topdir 'matrices'] ;
-if (~exist (matrices, 'dir'))
-    mkdir (matrices) ;
-end
-
-% create the groups.html file
-f = fopen ([matrices filesep 'groups.html'], 'w') ;
-if (f < 0)
-    error ('unable to create groups.html file\n') ;
-end
-
-% add the header
-fprintf (f, ...
-	'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n') ;
-fprintf (f, '<html lang="EN"><head>\n') ;
-fprintf (f, '<meta http-equiv="content-type" content="text/html; charset=') ;
-fprintf (f, 'iso-8859-1"><title>UF Sparse Matrix Collection: group list') ;
-fprintf (f, '</title></head>\n') ;
-fprintf (f, '<body bgcolor="#ffffff" link="#0021a5">\n') ;
-fprintf (f, '<li><a href="./index.html">UF Sparse Matrix Collection</a>\n') ;
-
-fprintf (f, '<p>List of matrix groups in the UF Sparse Matrix Collection:\n') ;
-fprintf (f, '<p><table border=1>\n') ;
-fprintf (f, '<th>Group</th>\n') ;
-fprintf (f, '<th># matrices</th>\n') ;
-fprintf (f, '<th>details</th>\n') ;
-fprintf (f, '<th>description</th>\n') ;
-
-% find all the groups
-group = '' ;
-ngroup = 0 ;
-for i = 1:nmat
-    if (strcmp (group, g {i}))
-	continue
-    end
-    group = g {i} ;
-    ngroup = ngroup + 1 ;
-    groups {ngroup} = group ;						    %#ok
-end
-
-nmat = 0 ;
-for i = 1:ngroup
-    group = groups {i} ;
-    UFlist ('group', group) ;
-    fprintf (f, '<tr>\n') ;
-
-    % link to group
-    fprintf (f, '<td><a href="%s/index.html">%s</a></td>\n', group, group) ;
-
-    % number of matrices
-    d = dir ([topdir 'mat' filesep group filesep '*.mat']) ;
-    nmat_group = size (d,1) ;
-    fprintf (f, '<td>%d</td>\n', nmat_group) ;
-    nmat = nmat + nmat_group ;
-
-    % link to README.txt file ("details")
-    f2 = fopen ([topdir filesep 'mat' filesep group filesep 'README.txt'], 'r');
-    if (f2 < 0)
-	error (['no README file for group: ' group]) ;
-    else
-	s = fgets (f2) ;
-	fprintf (f, ...
-	    '<td><a href="../mat/%s/README.txt">details</a></td>\n', group) ;
-    end
-
-    % one-line description (first line of README.txt)
-    fprintf (f, '<td>%s</td>\n', s) ;
-    fclose (f2);
-
-    fprintf (f, '</tr>\n') ;
-end
-fprintf (f, '</table>\n') ;
-
-fprintf (f, '<p>Total number of matrices in UF Sparse Matrix Collection:') ;
-fprintf (f, ' %d\n', nmat) ;
-fprintf (f, '<p><p><i>Maintained by <a href="http://www.cise.ufl.edu/~davis">');
-fprintf (f, 'Tim Davis</a>, last updated %s.', date) ;
-fprintf (f, '<br>Matrix pictures by <a href=') ;
-fprintf (f, '"%sCSparse/CSparse/MATLAB/CSparse/cspy.m">cspy</a>, a MATLAB', ...
-    url) ;
-fprintf (f, ' function in the <a href="%sCSparse">CSparse</a> package.\n', ...
-    url) ;
-fprintf (f, '</body>\n') ;
-fprintf (f, '</html>\n') ;
-fclose (f) ;
diff --git a/UFcollection/UFlocation.m b/UFcollection/UFlocation.m
deleted file mode 100644
index f22399d..0000000
--- a/UFcollection/UFlocation.m
+++ /dev/null
@@ -1,17 +0,0 @@
-function [url, topdir] = UFlocation
-%UFLOCATION URL and top-level directory of the UF Sparse Matrix Collection
-%
-% Example:
-%   [url, topdir] = UFlocation
-%
-% See also UFget.
-
-% Copyright 2006-2007, Timothy A. Davis
-
-params = UFget_defaults ;
-t = find (params.dir == filesep) ;
-topdir = regexprep (params.dir (1:t(end-1)), '[\/\\]', filesep) ;
-
-t = find (params.url == '/') ;
-url = params.url (1:t(end)) ;
-
diff --git a/UFcollection/UFpage.m b/UFcollection/UFpage.m
deleted file mode 100644
index 09e99cf..0000000
--- a/UFcollection/UFpage.m
+++ /dev/null
@@ -1,604 +0,0 @@
-function UFpage (matrix, index, figures)
-%UFPAGE create web page for a matrix in UF Sparse Matrix Collection
-%
-% Usage:
-%      UFpage (matrix, index, figures)
-%
-% matrix: id or name of matrix to create the web page for.
-% index: the UF index, from UFget.
-% figures: 1 if the figures are to be created, 0 otherwise
-%
-% Example:
-%
-%   UFpage (267)
-%   UFpage ('HB/west0479')
-%
-% See also UFget, cspy, UFgplot, UFint.
-
-% This function assumes that the mat/, MM/, and RB/ directories all reside in
-% the same parent directory, given by the download directory specified by
-% UFget_defaults.
-
-% Copyright 2006-2007, Timothy A. Davis
-
-%-------------------------------------------------------------------------------
-% get inputs
-%-------------------------------------------------------------------------------
-
-if (nargin < 2)
-    index = UFget ;
-end
-if (nargin < 3)
-    figures = 1 ;
-end
-
-%-------------------------------------------------------------------------------
-% get the Problem and its contents
-%-------------------------------------------------------------------------------
-
-Problem = UFget (matrix,index) ;
-disp (Problem) ;
-fullname = Problem.name ;
-s = strfind (fullname, '/') ;
-grp = fullname (1:s-1) ;
-name = fullname (s+1:end) ;
-id = Problem.id ;
-
-% create the primary directory
-[url topdir] = UFlocation ;
-matrices = [topdir 'matrices'] ;
-if (~exist (matrices, 'dir'))
-    mkdir (matrices) ;
-end
-
-% create the group directory
-if (~exist ([matrices filesep grp], 'dir'))
-    mkdir ([matrices filesep grp]) ;
-end
-
-% determine the full path of the problem
-fullpath = regexprep ([matrices filesep fullname], '[\/\\]', filesep) ;
-
-ptitle = Problem.title ;
-
-z = 0 ;
-if (isfield (Problem, 'Zeros'))
-    z = nnz (Problem.Zeros) ;
-    Problem = rmfield (Problem, 'Zeros') ;
-end
-
-nblocks = index.nblocks (id) ;
-ncc = index.ncc (id) ;
-
-has_b = isfield (Problem, 'b') ;
-has_x = isfield (Problem, 'x') ;
-has_aux = isfield (Problem, 'aux') ;
-
-if (has_b)
-    b = Problem.b ;
-    Problem = rmfield (Problem, 'b') ;
-    if (iscell (b))
-	b = sprintf ('cell %d-by-%d\n', size (b)) ;
-    elseif (issparse (b))
-	b = sprintf ('sparse %d-by-%d\n', size (b)) ;
-    else
-	b = sprintf ('full %d-by-%d\n', size (b)) ;
-    end
-end
-
-if (has_x)
-    x = Problem.x ;
-    Problem = rmfield (Problem, 'x') ;
-    if (iscell (x))
-	x = sprintf ('cell %d-by-%d\n', size (x)) ;
-    elseif (issparse (x))
-	x = sprintf ('sparse %d-by-%d\n', size (x)) ;
-    else
-	x = sprintf ('full %d-by-%d\n', size (x)) ;
-    end
-end
-
-nodename = [ ] ;
-if (has_aux)
-    aux = Problem.aux ;
-    Problem = rmfield (Problem, 'aux') ;
-    auxfields = fields (aux) ;
-    has_coord = isfield (aux, 'coord') ;
-    has_nodename = isfield (aux, 'nodename') ;
-    auxs = cell (1, length (auxfields)) ;
-    for k = 1:length(auxfields)
-	siz = size (aux.(auxfields{k})) ;
-	if (iscell (aux.(auxfields{k})))
-	    auxs {k} = sprintf ('cell %d-by-%d\n', siz) ;
-	elseif (issparse (aux.(auxfields{k})))
-	    auxs {k} = sprintf ('sparse %d-by-%d\n', siz) ;
-	else
-	    auxs {k} = sprintf ('full %d-by-%d\n', siz) ;
-	end
-    end
-    if (has_coord)
-	xyz = aux.coord ;
-    end
-    if (has_nodename)
-	nodename = aux.nodename ;
-    end
-    clear aux
-else
-    has_coord = 0 ;
-end
-
-kind = Problem.kind ;
-if (isfield (Problem, 'notes'))
-    notes = Problem.notes ;
-else
-    notes = '' ;
-end
-
-au = Problem.author ;
-ed = Problem.ed ;
-da = Problem.date ;
-
-m = index.nrows (id) ;
-n = index.ncols (id) ;
-nz = index.nnz (id) ;
-nnzdiag = index.nnzdiag (id) ;
-
-if (strfind (kind, 'graph'))
-    bipartite = ~isempty (strfind (kind, 'bipartite')) ;
-    directed = ~isempty (regexp (kind, '\<directed', 'once')) ;
-else
-    bipartite = (m ~= n) ;
-    directed = (index.pattern_symmetry (id) < 1) ;
-end
-
-%-------------------------------------------------------------------------------
-% create the pictures
-%-------------------------------------------------------------------------------
-
-if (figures)
-
-    try
-	A = Problem.A ;
-    catch
-	fprintf ('failed to extract A from Problem struct\n') ;
-	A = sparse (0) ;
-    end
-    clear Problem
-
-    %---------------------------------------------------------------------------
-    % create the gplot
-    %---------------------------------------------------------------------------
-
-    do_gplot = has_coord ;
-    if (do_gplot)
-	UFgplot (A, xyz, directed, nodename) ;
-	print (gcf, '-dpng', '-r128', [fullpath '_gplot.png']) ;
-	print (gcf, '-dpng', '-r512', [fullpath '_gplot_big.png']) ;
-    end
-
-    %---------------------------------------------------------------------------
-    % create the thumbnail picture
-    %---------------------------------------------------------------------------
-
-    cspy (A, 16) ;
-    print (gcf, '-dpng', '-r12', [fullpath '_thumb.png']) ;
-
-    %---------------------------------------------------------------------------
-    % create the regular picture
-    %---------------------------------------------------------------------------
-
-    cspy (A, 128) ;
-    print (gcf, '-dpng', '-r64', [fullpath '.png']) ;
-
-    %---------------------------------------------------------------------------
-    % create the dmperm figure, but not for graphs
-    %---------------------------------------------------------------------------
-
-    do_dmspy = (nblocks > 1) & (isempty (strfind (kind, 'graph'))) ;
-    if (do_dmspy)
-	try
-	    cs_dmspy (A, 128) ;
-	    title ('Dulmage-Mendelsohn permutation') ;
-	catch
-	    fprintf ('dmspy failed\n') ;
-	    delete ([fullpath '_dmperm.png']) ;
-	    do_dmspy = 0 ;
-	end
-	print (gcf, '-dpng', '-r64', [fullpath '_dmperm.png']) ;
-    end
-
-    %---------------------------------------------------------------------------
-    % create the ccspy figure
-    %---------------------------------------------------------------------------
-
-    do_scc = (ncc > 1) ;
-    if (do_dmspy && m == n && nnzdiag == n)
-	% don't do scc for a square matrix with zero-free diagonal
-	do_scc = 0 ;
-    end
-    if (do_scc)
-	try
-	    ccspy (A, bipartite, 128) ;
-	    if (bipartite)
-		title ('connected components of the bipartite graph') ;
-	    else
-		title ('strongly connected components of the graph') ;
-	    end
-	    print (gcf, '-dpng', '-r64', [fullpath '_scc.png']) ;
-	catch
-	    fprintf ('ccspy failed\n') ;
-	    delete ([fullpath '_cc.png']) ;
-	    do_scc = 0 ;
-	end
-    end
-
-else
-
-    %---------------------------------------------------------------------------
-    % the plots already exist - check the files
-    %---------------------------------------------------------------------------
-
-    do_scc   = exist ([fullpath '_scc.png'], 'file') ;
-    do_dmspy = exist ([fullpath '_dmperm.png'], 'file') ;
-    do_gplot = exist ([fullpath '_gplot.png'], 'file') ;
-
-end
-
-clear Problem
-
-%-------------------------------------------------------------------------------
-% create the web page for the matrix
-%-------------------------------------------------------------------------------
-
-f = fopen ([fullpath '.html'], 'w') ;
-if (f < 0)
-    error ('unable to create matrix web page') ;
-end
-
-% add the header
-fprintf (f,'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n');
-fprintf (f, '<html lang="EN"><head>\n') ;
-fprintf (f, '<meta http-equiv="content-type" content="text/html; charset=') ;
-fprintf (f, 'iso-8859-1"><title>%s sparse matrix</title></head>\n', fullname) ;
-fprintf (f, '<body bgcolor="#ffffff" link="#0021a5">\n') ;
-
-% link to UF collection
-fprintf (f, '<li><a href="..">UF Sparse Matrix Collection</a>\n') ;
-
-% link to group
-fprintf (f, '<li><a href="./index.html">Matrix group: %s</a>\n', grp) ;
-
-% add link to mat/<group>/README.txt
-fprintf (f, '<li><a href="../../mat/%s/README.txt">', grp) ;
-fprintf (f, 'Click here for a description of the %s group.</a>\n', grp) ;
-
-% link to all matrices
-fprintf (f, '<li><a href="../list_by_id.html">') ;
-fprintf (f, 'Click here for a list of all matrices</a>\n') ;
-
-% link to all groups
-fprintf (f, '<li><a href="../groups.html">') ;
-fprintf (f, 'Click here for a list of all matrix groups</a>\n') ;
-
-% matrix name and description
-fprintf (f, '<p><hr><li>Matrix: %s\n', fullname) ;
-fprintf (f, '<li>Description: %s\n', ptitle) ;
-
-% download link for MATLAB format
-fprintf (f, ...
-    '<li><a href="../../mat/%s.mat">download as a MATLAB mat-file</a>',...
-    fullname) ;
-fsize (f, [topdir 'mat/' fullname '.mat']) ; 
-
-fprintf (f, 'Use <a href="%smat/UFget.html">UFget</a>(%d)', url, id) ;
-fprintf (f, ' or UFget(''%s'') in MATLAB.\n', fullname) ;
-
-% download link for Matrix Market format
-fprintf (f, ...
-'<li><a href="../../MM/%s.tar.gz">download in Matrix Market format</a>',...
-fullname) ;
-fsize (f, [topdir 'MM/' fullname '.tar.gz']) ;
-
-% download link for Rutherford/Boeing format
-fprintf (f, ...
-'<li><a href="../../RB/%s.tar.gz">download in Rutherford/Boeing format</a>',...
-fullname) ;
-fsize (f, [topdir 'RB/' fullname '.tar.gz']) ;
-
-%-------------------------------------------------------------------------------
-% link to images
-%-------------------------------------------------------------------------------
-
-fprintf (f, '<p><img alt="%s" src="%s.png"></a>\n', fullname, name) ;
-
-% dmspy, if it exists
-if (do_dmspy)
-    fprintf (f, '<p><img alt="dmperm of %s" src="%s_dmperm.png">\n', ...
-    fullname, name) ;
-end
-
-% ccspy, if it exists
-if (do_scc)
-    fprintf (f, '<p><img alt="scc of %s" src="%s_scc.png">\n', ...
-    fullname, name) ;
-end
-
-% gplot, if it exists
-if (do_gplot)
-    fprintf (f, '<p>') ;
-    fprintf (f, ...
-'<a href="%s_gplot_big.png"><img alt="%s graph" src="%s_gplot.png"></a>\n', ...
-    name, fullname, name) ;
-end
-
-%-------------------------------------------------------------------------------
-% table of matrix properties
-%-------------------------------------------------------------------------------
-
-fprintf (f, '<p><table border=1>\n') ;
-stat (f, '<i><a href="../legend.html">Matrix properties</a></i>', '%s', ' ') ;
-stat (f, 'number of rows', '%s', UFint (m)) ;
-stat (f, 'number of columns', '%s', UFint (n)) ;
-stat (f, 'nonzeros', '%s', UFint (nz)) ;
-
-srank = index.sprank (id) ;
-if (srank == min (m,n))
-    stat (f, 'structural full rank?', '%s', 'yes') ;
-else
-    stat (f, 'structural full rank?', '%s', 'no') ;
-end
-stat (f, 'structural rank', '%s', UFint (srank)) ;
-
-stat (f, '# of blocks from dmperm', '%s', UFint (nblocks)) ;
-stat (f, '# strongly connected comp.', '%s', UFint (ncc)) ;
-
-if (srank == min (m,n))
-    stat (f, 'entries not in dmperm blocks', '%s', ...
-	UFint (index.nzoff (id))) ;
-end
-
-stat (f, 'explicit zero entries', '%s', UFint (z)) ;
-
-s = index.pattern_symmetry (id) ;
-if (s == 1)
-    stat (f, 'nonzero pattern symmetry', '%s', 'symmetric') ;
-else
-    stat (f, 'nonzero pattern symmetry', '%8.0f%%', s*100) ;
-end
-
-s = index.numerical_symmetry (id) ;
-if (s == -1)
-    stat (f, 'numeric value symmetry', '%s', 'unknown') ;
-elseif (s == 1)
-    stat (f, 'numeric value symmetry', '%s', 'symmetric') ;
-else
-    stat (f, 'numeric value symmetry', '%8.0f%%', s*100) ;
-end
-
-% print the Rutherford/Boeing type
-mtype = index.RBtype (id,:) ;
-ss = '-' ;
-if (mtype (1) == 'r')
-    ss = 'real' ;
-elseif (mtype (1) == 'c')
-    ss = 'complex' ;
-elseif (mtype (1) == 'i')
-    ss = 'integer' ;
-elseif (mtype (1) == 'p')
-    ss = 'binary' ;
-end
-stat (f, 'type', '%s', ss) ;
-
-ss = '-' ;
-if (mtype (2) == 'r')
-    ss = 'rectangular' ;
-elseif (mtype (2) == 'u')
-    ss = 'unsymmetric' ;
-elseif (mtype (2) == 's')
-    ss = 'symmetric' ;
-elseif (mtype (2) == 'h')
-    ss = 'Hermitian' ;
-elseif (mtype (2) == 'z')
-    ss = 'skew-symmetric' ;
-end
-stat (f, 'structure', '%s', ss) ;
-
-if (index.cholcand (id) == 1)
-    ss = 'yes' ;
-elseif (index.cholcand (id) == 0)
-    ss = 'no' ;
-else
-    ss = '?' ;
-end
-stat (f, 'Cholesky candidate?', '%s', ss) ;
-
-s = index.posdef (id) ;
-if (s == 0)
-    ss = 'no' ;
-elseif (s == 1)
-    ss = 'yes' ;
-else
-    ss = 'unknown' ;
-end
-stat (f, 'positive definite?', '%s', ss) ;
-
-fprintf (f, '</table><p>\n') ;
-
-%-------------------------------------------------------------------------------
-% problem author, ed, kind
-%-------------------------------------------------------------------------------
-
-fprintf (f, '<p><table border=1>\n') ;
-fprintf (f, '<tr><td>author</td><td align=left>%s</td>\n', au) ;
-fprintf (f, '<tr><td>editor</td><td align=left>%s</td>\n', ed) ;
-fprintf (f, '<tr><td>date</td><td align=left>%s</td>\n', da) ;
-fprintf (f, '<tr><td><a href=../kind.html>kind</a></td><td align=left>%s</td>\n', kind);
-s = index.isND (id) ;
-if (s == 0)
-    ss = 'no' ;
-else
-    ss = 'yes' ;
-end
-fprintf (f, '<tr><td>2D/3D problem?</td><td align=left>%s</td>\n', ss) ;
-fprintf (f, '</table><p>\n') ;
-
-%-------------------------------------------------------------------------------
-% fields
-%-------------------------------------------------------------------------------
-
-if (has_b || has_x || has_aux)
-    fprintf (f, '<p><table border=1>\n') ;
-    stat (f, 'Additional fields', '%s', 'size and type') ;
-    if (has_b)
-	stat (f, 'b', '%s', b) ;
-    end
-    if (has_x)
-	stat (f, 'x', '%s', x) ;
-    end
-    if (has_aux)
-	for k = 1:length(auxfields)
-	    stat (f, auxfields{k}, '%s', char (auxs{k})) ;
-	end
-    end
-    fprintf (f, '</table><p>\n') ;
-end
-
-%-------------------------------------------------------------------------------
-% Notes
-%-------------------------------------------------------------------------------
-
-if (~isempty (notes))
-    fprintf (f, '<p>Notes:<p><pre>\n') ;
-    for k = 1:size(notes,1)
-	fprintf (f, '%s\n', notes (k,:)) ;
-    end
-    fprintf (f, '</pre>\n') ;
-end
-
-%-------------------------------------------------------------------------------
-% ordering statistics
-%-------------------------------------------------------------------------------
-
-fprintf (f, '<p><table border=1>\n') ;
-if (nblocks == 1 || index.nzoff (id) == -2)
-
-    stat (f, ...
-    '<i><a href="../legend.html">Ordering statistics:</a></i>', ...
-    '%s', '<i>AMD</i>', '<i>METIS</i>') ;
-
-    if (index.amd_lnz (id) > -2)
-	stat (f, 'nnz(chol(P*(A+A''+s*I)*P''))', '%s', ...
-	    UFint (index.amd_lnz (id)), ...
-	    UFint (index.metis_lnz (id))) ;
-	stat (f, 'Cholesky flop count', '%7.1e', ...
-	    index.amd_flops (id), ...
-	    index.metis_flops (id)) ;
-	stat (f, 'nnz(L+U), no partial pivoting', '%s', ...
-	    UFint (2*index.amd_lnz (id) - min(m,n)), ...
-	    UFint (2*index.metis_lnz (id) - min(m,n))) ;
-    end
-
-    stat (f, 'nnz(V) for QR, upper bound nnz(L) for LU', '%s', ...
-	UFint (index.amd_vnz (id)), ...
-	UFint (index.metis_vnz (id))) ;
-    stat (f, 'nnz(R) for QR, upper bound nnz(U) for LU', '%s', ...
-	UFint (index.amd_rnz (id)), ...
-	UFint (index.metis_rnz (id))) ;
-
-else
-
-    stat (f, ...
-    '<i><a href="../legend.html">Ordering statistics:</a></i>', ...
-    '%s', '<i>AMD</i>', '<i>METIS</i>', '<i>DMPERM+</i>') ;
-
-    if (index.amd_lnz (id) > -2)
-	stat (f, 'nnz(chol(P*(A+A''+s*I)*P''))', '%s', ...
-	    UFint (index.amd_lnz (id)), ...
-	    UFint (index.metis_lnz (id)), ...
-	    UFint (index.dmperm_lnz (id))) ;
-	stat (f, 'Cholesky flop count', '%7.1e', ...
-	    index.amd_flops (id), ...
-	    index.metis_flops (id), ...
-	    index.dmperm_flops (id)) ;
-	stat (f, 'nnz(L+U), no partial pivoting', '%s', ...
-	    UFint (2*index.amd_lnz (id) - min(m,n)), ...
-	    UFint (2*index.metis_lnz (id) - min(m,n)), ...
-	    UFint (index.dmperm_lnz (id) + index.dmperm_unz (id)-min(m,n))) ;
-    end
-
-    stat (f, 'nnz(V) for QR, upper bound nnz(L) for LU', '%s', ...
-	UFint (index.amd_vnz (id)), ...
-	UFint (index.metis_vnz (id)), ...
-	UFint (index.dmperm_vnz (id))) ;
-    stat (f, 'nnz(R) for QR, upper bound nnz(U) for LU', '%s', ...
-	UFint (index.amd_rnz (id)), ...
-	UFint (index.metis_rnz (id)), ...
-	UFint (index.dmperm_rnz (id))) ;
-
-end
-fprintf (f, '</table><p>\n') ;
-
-%-------------------------------------------------------------------------------
-% note regarding orderings
-%-------------------------------------------------------------------------------
-
-if (z > 0)
-    fprintf (f, '<p><i>Note that all matrix statistics (except nonzero');
-    fprintf (f, ' pattern symmetry) exclude the %d explicit zero entries.\n',z);
-    fprintf (f, '<i>\n') ;
-end
-
-%-------------------------------------------------------------------------------
-% etc ...
-%-------------------------------------------------------------------------------
-
-fprintf (f, '<p><p><i>Maintained by <a href="http://www.cise.ufl.edu/~davis">');
-fprintf (f, 'Tim Davis</a>, last updated %s.', date) ;
-fprintf (f, '<br>Matrix pictures by <a href=') ;
-fprintf (f, '"%sCSparse/CSparse/MATLAB/CSparse/cspy.m">cspy</a>, a ', url) ;
-fprintf (f, 'MATLAB function in the <a href="%sCSparse">CSparse</a>', url) ;
-fprintf (f, ' package.\n</body>\n</html>\n') ;
-
-fclose (f) ;
-
-
-%-------------------------------------------------------------------------------
-
-function fsize (f, filename)
-% fsize: print the filesize
-d = dir (regexprep (filename, '[\/\\]', filesep)) ;
-if (isempty (d))
-    fprintf ('\n') ;
-elseif (d.bytes < 1024)
-    fprintf (f, ', file size: %4d bytes.\n', d.bytes) ;
-elseif (d.bytes > 2^20)
-    fprintf (f, ', file size: %8.0f MB.\n', d.bytes / 2^20) ;
-else
-    fprintf (f, ', file size: %8.0f KB.\n', d.bytes / 2^10) ;
-end
-
-
-%-------------------------------------------------------------------------------
-
-function stat (f, what, format, value1, value2, value3)
-% stat: print one row of a table
-s = val (format, value1) ;
-fprintf (f, '<tr><td>%s</td><td align=right>%s</td>\n', what, s) ;
-if (nargin > 4)
-    fprintf (f, '<td align=right>%s</td>\n', val (format, value2)) ;
-end
-if (nargin > 5)
-    fprintf (f, '<td align=right>%s</td>\n', val (format, value3)) ;
-end
-fprintf (f, '</tr>\n') ;
-
-
-%-------------------------------------------------------------------------------
-
-function s = val (format, value)
-% val: print a value in a table
-if (~ischar (value) && value < 0)
-    s = '-' ;
-else
-    s = sprintf (format, value) ;
-end
diff --git a/UFcollection/UFread.m b/UFcollection/UFread.m
deleted file mode 100644
index 9b07eb3..0000000
--- a/UFcollection/UFread.m
+++ /dev/null
@@ -1,449 +0,0 @@
-function Problem = UFread (directory, tmp)
-%UFREAD read a Problem in Matrix Market or Rutherford/Boeing format
-% containing a set of files created by UFwrite, in either Matrix Market or
-% Rutherford/Boeing format. See UFwrite for a description of the Problem struct.
-%
-% Usage: Problem = UFread (directory)
-%
-% Example:
-%
-%   load west0479
-%   clear Problem
-%   Problem.name = 'HB/west0479' ;
-%   Problem.title = '8 STAGE COLUMN SECTION, ALL SECTIONS RIGOROUS (CHEM.ENG.)';
-%   Problem.A = west0479 ;
-%   Problem.id = 267 ;          % the id number of west0479 in the UF collection
-%   Problem.date = '1983' ;
-%   Problem.author = 'A. Westerberg' ;
-%   Problem.ed = 'I. Duff, R. Grimes, J. Lewis'
-%   Problem.kind = 'chemical process simulation problem' ;
-%   UFwrite (Problem, 'RB/', '') ;
-%   Prob3 = UFread ('RB/HB/west0479')
-%   isequal (Problem, Prob3)
-%
-% This part of the example requires CHOLMOD, for the mread function:
-%
-%   UFwrite (Problem, 'MM/') ;
-%   Prob2 = UFread ('MM/HB/west0479')
-%   isequal (Problem, Prob2)
-%
-% You can also compare this Problem with the version in the UF Sparse Matrix
-% Collection, with UFget(267) or UFget('HB/west0479').  Note that this includes
-% the 22 explicit zero entries present in the west0479 Harwell/Boeing matrix,
-% but not included in the MATLAB west0479.mat demo matrix.  Those entries are
-% present in the UF Sparse Matrix Collection.  This example assumes your current
-% directory is the RBio directory, containing the west0479 problem in the
-% RBio/Test directory:
-%
-%   Prob5 = UFget ('HB/west0479')
-%   Prob6 = UFread ('Test/west0479')
-%   isequal (Prob5, Prob6)
-%
-% The directory can be a compressed tar file of the form "name.tar.gz", in
-% which case the tarfile is uncompressed into a temporary directory, and
-% the temporary directory is deleted when done.  The '.tar.gz' should not be
-% part of the directory argument.  In this case, a 2nd input argument can be
-% provided:  Problem = UFread (directory, tmp).  The problem is extracted into
-% the tmp directory.  If tmp is not present, the output of the tempdir function
-% is used instead.
-%
-% Note that UFget is much faster than UFread.  UFread is useful if you are
-% short on disk space, and want to have just one copy of the collection that
-% can be read by MATLAB (via UFread) and a non-MATLAB program (the MM or RB
-% versions of the collection).
-%
-% See also UFwrite, mread, mwrite, RBread, RBread, UFget, untar, tempdir.
-
-% Optionally uses the CHOLMOD mread mexFunction, for reading Problems in
-% Matrix Market format.
-
-% Copyright 2006-2007, Timothy A. Davis, Univ. of Florida
-
-%-------------------------------------------------------------------------------
-% determine the Problem name from the directory name
-%-------------------------------------------------------------------------------
-
-directory = regexprep (directory, '[\/\\]', filesep) ;
-t = find (directory == filesep) ;
-if (isempty (t))
-    name = directory ;
-else
-    name = directory (t(end)+1:end) ;
-end
-
-%-------------------------------------------------------------------------------
-% open the directory, or untar the tar.gz file
-%-------------------------------------------------------------------------------
-
-d = dir (directory) ;
-is_tar = 0 ;
-
-if (isempty (d))
-    % look for a .tar.gz file
-    if (nargin < 2)
-	tmpdir = [tempname '_UFread_' name] ;
-    else
-	tmpdir = [tmp filesep name] ;
-    end
-    try
-	% try untaring the problem
-	untar ([directory '.tar.gz'], tmpdir) ;
-    catch
-	% untar failed, make sure tmpdir is deleted
-	try
-	    rmdir (tmpdir, 's') ;
-	catch
-	end
-	error (['unable to read problem: ' directory]) ;
-    end
-    directory = [tmpdir filesep name] ;
-    d = dir (directory) ;
-    is_tar = 1 ;
-end 
-
-%-------------------------------------------------------------------------------
-% read the problem
-%-------------------------------------------------------------------------------
-
-try
-
-    %---------------------------------------------------------------------------
-    % get name, title, id, kind, date, author, editor, notes from master file
-    %---------------------------------------------------------------------------
-
-    masterfile = [directory filesep name] ;
-    [Problem notes RB] = get_header (masterfile) ;
-
-    %---------------------------------------------------------------------------
-    % get the A and Zero matrices from the master file and add to the Problem
-    %---------------------------------------------------------------------------
-
-    if (RB)
-	% read in the primary Rutherford/Boeing file
-	[Problem.A Zeros] = RBread ([masterfile '.rb']) ;
-    else
-	% read in the primary Matrix Market file.  Get patterns as binary.
-	[Problem.A Zeros] = mread ([masterfile '.mtx'], 1) ;
-    end
-    if (nnz (Zeros) > 0)
-	Problem.Zeros = Zeros ;
-    end
-
-    % add the notes after A and Zeros
-    if (~isempty (notes))
-	Problem.notes = notes ;
-    end
-
-    namelen = length (name) ;
-
-    %---------------------------------------------------------------------------
-    % read b, x, aux (incl. any aux.cell sequences), stored as separate files
-    %---------------------------------------------------------------------------
-
-    for k = 1:length(d)
-
-	% get the next filename in the directory
-	file = d(k).name ;
-	fullfilename = [directory filesep file] ;
-
-	if (length (file) < length (name) + 1)
-
-	    % unrecognized file; skip it
-	    continue
-
-	elseif (strcmp (file, [name '.mtx']))
-
-	    % skip the master file; already read in
-	    continue
-
-	elseif (strcmp (file, [name '_b.mtx']))
-
-	    % read in b as a Matrix Market file
-	    Problem.b = mtx_read (fullfilename, RB) ;
-
-	elseif (strcmp (file, [name '_x.mtx']))
-
-	    % read in x as a Matrix Market file
-	    Problem.x = mtx_read (fullfilename, RB) ;
-
-	elseif (strcmp (file, [name '_b.rb']))
-
-	    % read in b as a Rutherford/Boeing file
-	    Problem.b = RBread (fullfilename) ;
-
-	elseif (strcmp (file, [name '_x.rb']))
-
-	    % read in x as a Rutherford/Boeing file
-	    Problem.x = RBread (fullfilename) ;
-
-	elseif (strcmp (file (1:length(name)+1), [name '_']))
-
-	    % read in an aux component, in the form name_whatever.mtx
-	    thedot = find (file == '.', 1, 'last') ;
-	    ext = file (thedot:end) ;
-
-	    if (strcmp (ext, '.txt'))
-
-		% get a txt file
-		% first, determine the longest line in the file
-		f = fopen (fullfilename) ;
-		if (f < 0)
-		    error (['cannot open ' fullfilename]) ;
-		end
-		len = 0 ;
-		nline = 0 ;
-		while (1)
-		    s = fgetl (f) ;
-		    if (~ischar (s))
-			break 
-		    end
-		    len = max (len, length (s)) ;
-		    nline = nline + 1 ;
-		end
-		fclose (f) ;
-		% next, read in the file as a char array
-		C = repmat (' ', nline, len) ;
-		f = fopen (fullfilename) ;
-		if (f < 0)
-		    error (['cannot open ' fullfilename]) ;
-		end
-		i = 0 ;
-		while (1)
-		    s = fgetl (f) ;
-		    if (~ischar (s))
-			break 
-		    end
-		    i = i + 1 ;
-		    len = length (s) ;
-		    if (len > 0)
-			C (i, 1:len) = s ;
-		    end
-		end
-		fclose (f) ;
-
-	    elseif (strcmp (ext, '.mtx'))
-
-		% read a full or sparse auxiliary matrix in the Matrix Market
-		% form, or a full auxiliary matrix in the Rutherford/Boeing form.
-		C = mtx_read (fullfilename, RB) ;
-
-	    elseif (strcmp (ext, '.rb'))
-
-		% read in a sparse matrix, for a Rutherford/Boeing collection
-		C = RBread (fullfilename) ;
-
-	    else
-
-		% this file is not recognized - skip it.
-		C = [ ] ;
-
-	    end
-
-	    % determine the name of the component and place it in the Problem
-	    if (~isempty (C))
-		% Determine if this is part of an aux.whatever cell sequence.
-		% These filenames have the form name_whatever_#.mtx, where name
-		% is the name of the Problem, and # is a number (1 or more
-		% digts) greater than zero.  If # = i, this becomes the
-		% aux.whatever{i} matrix.
-		suffix = file (namelen+2:thedot-1) ;
-		t = find (suffix == '_', 1, 'last') ;
-		what = suffix (1:t-1) ;
-		i = str2num (suffix (t+1:end)) ;			    %#ok
-		if (~isempty (i) && i > 0 && ~isempty (what))
-		    % this is part of aux.whatever{i} cell array
-		    Problem.aux.(what) {i,1} = C ;
-		elseif (~isempty (suffix))
-		    % this is not a cell, simply an aux.whatever matrix
-		    Problem.aux.(suffix) = C ;
-		end
-	    end
-	end
-    end
-
-    %---------------------------------------------------------------------------
-    % delete the uncompressed version of the tar file
-    %---------------------------------------------------------------------------
-
-    if (is_tar)
-	rmdir (tmpdir, 's') ;
-    end
-
-catch
-
-    %---------------------------------------------------------------------------
-    % catch the error, delete the temp directory, and rethrow the error
-    %---------------------------------------------------------------------------
-
-    try
-	if (is_tar)
-	    rmdir (tmpdir, 's') ;
-	end
-    catch
-    end
-    rethrow (lasterror) ;
-
-end
-
-
-%-------------------------------------------------------------------------------
-% get_header: get the header of the master file (Group/name/name.txt or .mtx)
-%-------------------------------------------------------------------------------
-
-function [Problem, notes, RB] = get_header (masterfile)
-% Get the name, title, id, kind, date, author, editor and notes from the master
-% file.  The name, title, and id are required.  They appear as structured
-% comments in the Matrix Market file (masterfile.mtx) or in the text file for
-% a problem in Rutherford/Boeing format (masterfile.txt).  RB is returned as
-% 1 if the problem is in Rutherford/Boeing format, 0 otherwise.
-
-% first assume it's in Matrix Market format
-f = fopen ([masterfile '.mtx'], 'r') ;
-if (f < 0)
-    % oops, that failed.  This must be a problem in Rutherford/Boeing format
-    RB = 1 ;
-    f = fopen ([masterfile '.txt'], 'r') ;
-    if (f < 0)
-	% oops again, this is not a valid problem in the UF Sparse collection
-	error (['invalid problem: ' masterfile]) ;
-    end
-else
-    % we found the Matrix Market file
-    RB = 0 ;
-end
-Problem = [ ] ;
-notes = [ ] ;
-
-while (1)
-
-    % get the next line
-    s = fgetl (f) ;
-    if (~ischar (s) || length (s) < 3 || s (1) ~= '%')
-	% end of file or end of leading comments ... no notes found
-	fclose (f) ;
-	[Problem notes] = valid_problem (Problem, [ ]) ;
-	return ;
-    end
-
-    % remove the leading '% ' and get the first token
-    s = s (3:end) ;
-    [t r] = strtok (s) ;
-
-    % parse the line
-    if (strcmp (t, 'name:'))
-
-	% get the Problem.name.  It must be of the form Group/Name.
-	Problem.name = strtrim (r) ;
-	if (length (find (Problem.name == '/')) ~= 1)
-	    fclose (f) ;
-	    error (['invalid problem name ' Problem.name]) ;
-	end
-
-    elseif (s (1) == '[')
-
-	% get the Problem.title
-	k = find (s == ']', 1, 'last') ;
-	if (isempty (k))
-	    fclose (f) ;
-	    error ('invalid problem title') ;
-	end
-	Problem.title = s (2:k-1) ;
-
-    elseif (strcmp (t, 'id:'))
-
-	% get the Problem.id
-	Problem.id = str2num (r) ;					    %#ok
-	if (isempty (Problem.id) || Problem.id < 0)
-	    fclose (f) ;
-	    error ('invalid problem id') ;
-	end
-
-    elseif (strcmp (t, 'kind:'))
-
-	% get the Problem.kind
-	Problem.kind = strtrim (r) ;
-
-    elseif (strcmp (t, 'date:'))
-
-	% get the Problem.date
-	Problem.date = strtrim (r) ;
-
-    elseif (strcmp (t, 'author:'))
-
-	% get the Problem.author
-	Problem.author = strtrim (r) ;
-
-    elseif (strcmp (t, 'ed:'))
-
-	% get the Problem.ed
-	Problem.ed = strtrim (r) ;
-
-    elseif (strcmp (t, 'notes:'))
-
-	% get the notes, which always appear last
-	k = 0 ;
-	notes = [ ] ;
-	while (1)
-	    % get the next line
-	    s = fgetl (f) ;
-	    if (~ischar (s) || length (s) < 2 || ~strcmp (s (1:2), '% '))
-		% end of file or end of notes ... convert notes to char array
-		fclose (f) ;
-		[Problem notes] = valid_problem (Problem, notes) ;
-		return ;
-	    end
-	    % add the line to the notes
-	    k = k + 1 ;
-	    notes {k} = s ;						    %#ok
-	end
-    end
-end
-
-
-%-------------------------------------------------------------------------------
-% valid_problem: determine if a problem is valid, and finalizes the notes
-%-------------------------------------------------------------------------------
-
-function [Problem, notes] = valid_problem (Problem, notes)
-% make sure the required fields (name, title, id, date, author, ed) are present.
-% Convert notes to char, and strip off the leading '% ', inserted when the notes
-% were printed in the Matrix Market file.
-if (~isfield (Problem, 'name') || ~isfield (Problem, 'title') || ...
-    ~isfield (Problem, 'id') || ~isfield (Problem, 'date') || ...
-    ~isfield (Problem, 'author') || ~isfield (Problem, 'ed') || ...
-    ~isfield (Problem, 'kind'))
-    error ('invalid Problem mfile') ;
-end
-if (~isempty (notes))
-    notes = char (notes) ;
-    notes = notes (:, 3:end) ;
-end
-
-
-%-------------------------------------------------------------------------------
-% mtx_read: read a *.mtx file
-%-------------------------------------------------------------------------------
-
-% In the Rutherford/Boeing form, a *.mtx file is used only for full matrices,
-% using a tiny subset of the Matrix Market format.  In the Matrix Market form,
-% the *.mtx is used for all b, x, and aux matrices (both full and sparse).
-
-function C = mtx_read (file, RB)
-
-if (~RB)
-
-    % Get a Matrix Market file, using full Matrix Market features.
-    C = mread (file, 1) ;
-
-else
-
-    % mread is not installed.  The RB format uses a tiny subset of the Matrix
-    % Market format for full matrices: just the one header line, and no comment
-    % or blank lines permitted.  Allowable header lines are:
-    %	%%MatrixMarket matrix array real general
-    %	%%MatrixMarket matrix array complex general
-    % This tiny subset can be read by UFfull_read.
-    C = UFfull_read (file) ;
-
-end
-
diff --git a/UFcollection/UFstats.m b/UFcollection/UFstats.m
deleted file mode 100644
index 2d0093d..0000000
--- a/UFcollection/UFstats.m
+++ /dev/null
@@ -1,610 +0,0 @@
-function stats = UFstats (A, kind, nometis, Z)
-%UFSTATS compute matrix statistics for the UF Sparse Matrix Collection
-% Example:
-%   stats = UFstats (A,kind,nometis,Z)
-%
-% A: a sparse matrix
-% kind: a string with the Problem.kind
-% nometis: if nonzero then metis(A,'col') is not used, nor is metis used in the
-%       dmperm+ ordering.
-% Z: empty, or a sparse matrix the same size as A.  Only used for psym and
-%       nzero statistics, described below.
-%
-% Requires amd, cholmod, metis, RBio, and CSparse.  Computes the following
-% statistics, returning them as fields in the stats struct:
-%
-%   nrows           number of rows
-%   ncols           number of columns
-%   nnz             number of entries in A
-%   RBtype          Rutherford/Boeing type
-%   isBinary        1 if binary, 0 otherwise
-%   isReal          1 if real, 0 if complex
-%   cholcand        1 if a candidate for sparse Cholesky, 0 otherwise
-%   nsym            numeric symmetry (0 to 1, where 1=symmetric)
-%   psym            pattern symmetry (0 to 1, where 1=symmetric)
-%   nnzdiag         nnz (diag (A)) if A is square, 0 otherwise
-%   nzero           nnz (Z)
-%   amd_lnz         nnz(L) for chol(C(p,p)) where, C=A+A', p=amd(C)
-%   amd_flops       flop count for chol(C(p,p)) where, C=A+A', p=amd(C)
-%   amd_vnz         nnz in Householder vectors for qr(A(:,colamd(A)))
-%   amd_rnz         nnz in R for qr(A(:,colamd(A)))
-%   metis_lnz       nnz(L) for chol(C(p,p)) where, C=A+A', p=metis(C)
-%   metis_flops     flop count for chol(C(p,p)) where, C=A+A', p=metis(C)
-%   metis_vnz       nnz in Householder vectors for qr(A(:,metis(A,'col')))
-%   metis_rnz       nnz in R for qr(A(:,metis(A,'col')))
-%   nblocks         # of blocks from dmperm
-%   sprank          sprank(A)
-%   nzoff           # of entries not in diagonal blocks from dmperm
-%   ncc             # of strongly connected components
-%   dmperm_lnz      nnz(L), using dmperm plus amd or metis
-%   dmperm_unz      nnz(U), using dmperm plus amd or metis
-%   dmperm_flops    flop count with dperm plus
-%   dmperm_vnz      nnz in Householder vectors for dmperm plus
-%   dmperm_rnz      nnz in R for dmperm plus
-%   posdef          1 if positive definite, 0 otherwise
-%   isND	    1 if a 2D/3D problem, 0 otherwise
-%
-% The *_lnz, *_unz, and *_flops statistics are not computed for rectangular
-% or structurally singular matrices.  nzoff and the dmperm_* stats are not
-% computed for structurally singular matrices.  If a statistic is not computed,
-% it is set to -2.  If an attempt to compute the statistic was made but failed,
-% it is set to -1.
-%
-% See also UFget, UFindex, amd, metis, RBtype, cs_scc, cs_sqr, dmperm.
-
-% Copyright 2006-2007, Timothy A. Davis
-
-% Requires the SuiteSparse set of packages: CHOLMOD, AMD, COLAMD, RBio, CSparse;
-% and METIS.
-
-if (nargin < 3)
-    nometis = 0 ;
-end
-
-%-------------------------------------------------------------------------------
-% ensure the matrix is sparse
-%-------------------------------------------------------------------------------
-
-if (~issparse (A))
-    A = sparse (A) ;
-end
-
-%-------------------------------------------------------------------------------
-% basic stats
-%-------------------------------------------------------------------------------
-
-tic ;
-[m n] = size (A) ;
-stats.nrows = m ;
-stats.ncols = n ;
-stats.nnz = nnz (A) ;
-stats.RBtype = RBtype (A) ;			% Rutherford/Boeing type
-stats.isBinary = (stats.RBtype (1) == 'p') ;
-stats.isReal = (stats.RBtype (1) ~= 'c') ;
-
-fprintf ('RBtype: %s time: %g\n', stats.RBtype, toc) ;
-
-%-------------------------------------------------------------------------------
-% symmetry and Cholesky candidacy
-%-------------------------------------------------------------------------------
-
-% get the symmetry
-tic ;
-[s xmatched pmatched nzoffdiag nnzdiag] = spsym (A) ;
-
-stats.cholcand = (s >= 6) ; % check if Cholesky candidate
-
-if (m ~= n)
-    stats.nsym = 0 ;
-    stats.psym = 0 ;
-elseif (nzoffdiag > 0)
-    stats.nsym = xmatched / nzoffdiag ;
-    stats.psym = pmatched / nzoffdiag ;
-else
-    stats.nsym = 1 ;
-    stats.psym = 1 ;
-end
-
-fprintf ('cholcand: %d\n', stats.cholcand) ;
-fprintf ('nsym: %g psym: %g time: %g\n', stats.nsym, stats.psym, toc) ;
-tic ;
-
-stats.nnzdiag = nnzdiag ;
-
-if (nargin > 3)
-    stats.nzero = nnz (Z) ;
-
-    % recompute the pattern symmetry with Z included
-    if (m == n)
-	try
-	    AZ = A+Z ;
-	    if (nnz (AZ) ~= nnz (A) + nnz (Z))
-		error ('A and Z overlap!')
-	    end
-	    [s xmatched pmatched nzoffdiag] = spsym (AZ) ;
-	    clear AZ
-	    if (nzoffdiag > 0)
-		stats.psym = pmatched / nzoffdiag ;
-	    else
-		stats.psym = 1 ;
-	    end
-	catch
-	    fprintf ('failed to compute symmetry of pattern of A+Z\n') ;
-	end
-    end
-
-else
-    stats.nzero = 0 ;
-end
-
-fprintf ('nsym: %g psym: %g time: %g\n', stats.nsym, stats.psym, toc) ;
-tic ;
-
-%-------------------------------------------------------------------------------
-% intialize ordering statistics
-%-------------------------------------------------------------------------------
-
-% if square, Cholesky of C(p,p) where C=A+A', p = amd(C)
-stats.amd_lnz = -1 ;	    % nnz (chol (C))
-stats.amd_flops = -1 ;	    % flop counts for chol (C)
-
-% if square or rectangular
-stats.amd_vnz = -1 ;	    % nnz (V), upper bound on L, for A(:,colamd(A))
-stats.amd_rnz = -1 ;	    % nnz (R), upper bound on U, for A(:,colamd(A))
-
-% if square, Cholesky of C(p,p) where C=A+A', p = metis(C)
-stats.metis_lnz = -1 ;	    % nnz (chol (C))
-stats.metis_flops = -1 ;    % flop counts for chol (C)
-
-% if square or rectangular
-stats.metis_vnz = -1 ;	    % nnz (V), upper bound on L, for A(:,metis(A))
-stats.metis_rnz = -1 ;	    % nnz (R), upper bound on U, for A(:,metis(A))
-
-% dmperm analysis
-stats.nblocks = -1 ;	    % # of blocks in block-triangular form
-stats.sprank = -1 ;	    % structural rank
-stats.nzoff = -1 ;	    % # of entries of A in off-diagonal blocks
-
-% cs_scc2
-stats.ncc = -1 ;	    % # of strongly connected components
-
-% dmperm: best of amd/metis on each square block, best of colamd/metis
-% on rectangular blocks
-stats.dmperm_lnz = -1 ;	    % nnz (L), for square struct full rank matrices 
-stats.dmperm_unz = -1 ;	    % nnz (U) + nzoff, for square struct full rank mat
-stats.dmperm_flops = -1 ;   % Cholesky flop count of each square block
-stats.dmperm_vnz = -1 ;	    % nnz (V), upper bound on L
-stats.dmperm_rnz = -1 ;	    % nnz (R), upper bound on U
-
-stats.isND = -1 ;	    % 1 if 2D/3D problem, 0 otherwise
-
-d = max (m,n) ;
-
-% if the matrix has a symmetric nonzero pattern, nzoff will always be zero
-if (stats.psym == 1)
-    stats.nzoff = 0 ;
-end
-
-%-------------------------------------------------------------------------------
-% determine if positive definite
-%-------------------------------------------------------------------------------
-
-if (~stats.cholcand)
-
-    % not a candidate for Cholesky, so it cannot be positive definite
-    stats.posdef = 0 ;
-
-else
-
-    % try chol
-    try
-	[x, cstats] = cholmod2 (A, ones (stats.ncols,1)) ;
-	rcond = cstats (1) ;
-	fprintf ('rcond: %g\n', rcond) ;
-	stats.posdef = (rcond > 0) ;
-    catch
-	% chol failed
-	disp (lasterr) ;
-	fprintf ('sparse Cholesky failed\n') ;
-	stats.posdef = -1 ;
-    end
-    clear x cstats
-end
-
-fprintf ('posdef: %d time: %g\n', stats.posdef, toc) ;
-tic ;
-
-%-------------------------------------------------------------------------------
-% transpose A if m < n, for ordering methods
-%-------------------------------------------------------------------------------
-
-if (m < n)
-    try
-	A = A' ;		    % A is now tall and thin, or square
-    catch
-	disp (lasterr) ;
-	fprintf ('transpose failed...\n') ;
-	return ;
-    end
-    [m n] = size (A) ;
-end
-
-if (~isreal (A))
-    try
-	A = spones (A) ;
-    catch
-	disp (lasterr) ;
-	fprintf ('conversion from complex failed...\n') ;
-	return ;
-    end
-end
-
-fprintf ('computed A transpose if needed, time: %g\n', toc) ;
-tic ;
-
-%-------------------------------------------------------------------------------
-% order entire matrix with AMD and METIS, if square
-%-------------------------------------------------------------------------------
-
-if (m == n)
-
-    tic ;
-    try
-	if (stats.RBtype (2) == 'u')
-	    C = A|A' ;
-	else
-	    C = A ;
-	end
-    catch
-	disp (lasterr) ;
-	fprintf ('A+A'' failed\n') ;
-    end
-    fprintf ('computed A+A'', time: %g\n', toc) ;
-
-    % order the whole matrix with AMD
-    tic ;
-    try
-	p = amd (C) ;
-	c = symbfact (C (p,p)) ;
-	stats.amd_lnz = sum (c) ;
-	stats.amd_flops = sum (c.^2) ;
-    catch
-	disp (lasterr) ;
-	fprintf ('amd failed\n') ;
-    end
-    clear p c
-    fprintf ('AMD   lnz %d flops %g time: %g\n', ...
-	stats.amd_lnz, stats.amd_flops, toc) ;
-
-    % order the whole matrix with METIS
-    tic ;
-    try
-	p = metis (C) ;
-	c = symbfact (C (p,p)) ;
-	stats.metis_lnz = sum (c) ;
-	stats.metis_flops = sum (c.^2) ;
-    catch
-	disp (lasterr) ;
-	fprintf ('metis failed\n') ;
-    end
-    clear p c C
-    fprintf ('METIS lnz %d flops %g time: %g\n', ...
-	stats.metis_lnz, stats.metis_flops, toc) ;
-
-else
-
-    % not computed if rectangular
-    stats.amd_lnz = -2 ;
-    stats.amd_flops = -2 ;
-    stats.metis_lnz = -2 ;
-    stats.metis_flops = -2 ;
-
-end
-
-%-------------------------------------------------------------------------------
-% order entire matrix with COLAMD, for LU bounds
-%-------------------------------------------------------------------------------
-
-tic ;
-try
-    % do not ignore any rows, and do not do etree postordering
-    q = colamd2mex (A, [d 10]) ;
-    [vnz,rnz] = cs_sqr (A (:,q)) ;
-    stats.amd_rnz = rnz ;
-    stats.amd_vnz = vnz ;
-catch
-    disp (lasterr) ;
-    fprintf ('colamd2 and cs_sqr failed\n') ;
-end
-clear q
-fprintf ('COLAMD rnz %d vnz %d time: %g\n', stats.amd_rnz, stats.amd_vnz, toc) ;
-tic ;
-
-%-------------------------------------------------------------------------------
-% order entire matrix with METIS, for LU bounds
-%-------------------------------------------------------------------------------
-
-if (~nometis)
-    try
-	q = metis (A, 'col') ;
-	[vnz,rnz] = cs_sqr (A (:,q)) ;
-	stats.metis_rnz = rnz ;
-	stats.metis_vnz = vnz ;
-    catch
-	disp (lasterr) ;
-	fprintf ('metis(A''*A) and cs_sqr failed\n') ;
-    end
-end
-clear q
-fprintf ('METIS  rnz %d vnz %d time: %g\n', ...
-    stats.metis_rnz, stats.metis_vnz, toc) ;
-tic ;
-
-%-------------------------------------------------------------------------------
-% strongly connected components
-%-------------------------------------------------------------------------------
-
-try
-    % find the # of strongly connected components of the graph of a square A,
-    % or # of connected components of the bipartite graph of a rectangular A.
-    % [p,q,r,s] = cs_scc2 (A) ;
-    if (m == n)
-	[p r] = cs_scc (A) ;
-    else
-	[p r] = cs_scc (spaugment (A)) ;
-    end
-    stats.ncc = length (r) - 1 ;
-    clear p r
-catch
-    disp (lasterr) ;
-    fprintf ('cs_scc failed\n') ;
-end
-
-fprintf ('scc %d, time: %g\n', stats.ncc, toc) ;
-tic ;
-
-%-------------------------------------------------------------------------------
-% isND
-%-------------------------------------------------------------------------------
-
-s = 0 ;
-if (strfind (kind, 'structural'))
-    s = 1 ;
-elseif (strfind (kind, 'fluid'))
-    s = 1 ;
-elseif (strfind (kind, '2D'))
-    s = 1 ;
-elseif (strfind (kind, 'reduction'))
-    s = 1 ;
-elseif (strfind (kind, 'electromagnetics'))
-    s = 1 ;
-elseif (strfind (kind, 'semiconductor'))
-    s = 1 ;
-elseif (strfind (kind, 'thermal'))
-    s = 1 ;
-elseif (strfind (kind, 'materials'))
-    s = 1 ;
-elseif (strfind (kind, 'acoustics'))
-    s = 1 ;
-elseif (strfind (kind, 'vision'))
-    s = 1 ;
-elseif (strfind (kind, 'robotics'))
-    s = 1 ;
-end
-stats.isND = s ;
-
-fprintf ('isND %d\n', stats.isND) ;
-
-%-------------------------------------------------------------------------------
-% Dulmage-Mendelsohn permutation, and order each block
-%-------------------------------------------------------------------------------
-
-try
-    % find the Dulmage-Mendelsohn decomposition
-    [p,q,r,s,cc,rr] = cs_dmperm (A) ;
-    nblocks = length (r) - 1 ;
-    stats.nblocks = nblocks ;
-    stats.sprank = rr(4)-1 ;
-catch
-    disp (lasterr) ;
-    fprintf ('cs_dmperm failed\n') ;
-end
-
-fprintf ('sprank %d, time: %g\n', stats.sprank, toc) ;
-fprintf ('nblocks %d\n', stats.nblocks) ;
-tic
-
-ok_square = 1 ;
-ok_vnz = 1 ;
-
-try
-
-    mm = diff (r) ;
-    nn = diff (s) ;
-    square = all (mm == nn) ;
-
-    if (~square)
-
-	% not computed if the matrix is rectangular
-	stats.dmperm_lnz = -2 ;
-	stats.dmperm_unz = -2 ;
-	stats.dmperm_flops = -2 ;
-
-    end
-
-    if (stats.sprank < min (m,n))
-
-	% do not report DMPERM results for structurally singular matrices
-	stats.nzoff = -2 ;
-	stats.dmperm_lnz = -2 ;
-	stats.dmperm_unz = -2 ;
-	stats.dmperm_flops = -2 ;
-	stats.dmperm_vnz = -2 ;
-	stats.dmperm_rnz = -2 ;
-
-    elseif (nblocks == n && m == n)
-
-	% square triangular or diagonal
-	C = A (p,q) ;
-	clear p q r s
-
-	stats.nzoff = nnz (triu (C, 1)) ;
-	stats.dmperm_lnz = n ;
-	stats.dmperm_unz = n + stats.nzoff ;
-	stats.dmperm_flops = n ;
-	stats.dmperm_vnz = n ;
-	stats.dmperm_rnz = nnz (C) ;
-
-    elseif (nblocks == 1 && m == n)
-
-	% only one block of structural full rank, so don't redo analysis
-	clear p q r s
-
-	stats.nzoff = 0 ;
-	if (stats.metis_lnz < 0 || stats.amd_lnz < stats.metis_lnz)
-	    stats.dmperm_lnz = stats.amd_lnz ;
-	    stats.dmperm_unz = stats.amd_lnz ;
-	    stats.dmperm_flops = stats.amd_flops ;
-	else
-	    stats.dmperm_lnz = stats.metis_lnz ;
-	    stats.dmperm_unz = stats.metis_lnz ;
-	    stats.dmperm_flops = stats.metis_flops ;
-	end
-
-	if (stats.metis_vnz < 0 || stats.amd_rnz < stats.metis_rnz)
-	    stats.dmperm_vnz = stats.amd_vnz ;
-	    stats.dmperm_rnz = stats.amd_rnz ;
-	else
-	    stats.dmperm_vnz = stats.metis_vnz ;
-	    stats.dmperm_rnz = stats.metis_rnz ;
-	end
-
-    else
-
-	% analyze each block of the permuted matrix
-	C = A (p,q) ;
-	clear p q
-
-	nzoff = nnz (C) ;
-	lnz = 0 ;
-	unz = 0 ;
-	flops = 0 ;
-	vnz = 0 ;
-	rnz = 0 ;
-
-	for k = 1:nblocks
-	    i1 = r (k) ;
-	    i2 = r (k+1) - 1 ;
-	    j1 = s (k) ;
-	    j2 = s (k+1) - 1 ;
-
-	    if (i2-i1 == 1 && j2-j1 == 1)
-		% singleton case
-		nzoff = nzoff - 1 ;
-		unz = unz + 1 ;
-		lnz = lnz + 1 ;
-		flops = flops + 1 ;
-		rnz = rnz + 1 ;
-		vnz = vnz + 1 ;
-		continue ;
-	    end
-
-	    % get the kth block
-	    S = C (i1:i2, j1:j2) ;
-	    [ms ns] = size (S) ;
-	    nzoff = nzoff - nnz (S) ;
-
-	    if (ok_square)
-		try
-		    if (square)
-
-			% all blocks are square, analyze a square block
-			% best of amd and metis
-			if (nometis)
-			    [pblock c] = analyze (S|S', 'sym', 1) ;
-			else
-			    [pblock c] = analyze (S|S', 'sym', 3) ;
-			end
-			lnzblock = sum (c) ;
-			unz = unz + lnzblock ;
-			lnz = lnz + lnzblock ;
-			flops = flops + sum (c.^2) ;
-			clear c pblock
-
-		    end
-		catch
-		    % ordering failed, but keep going to compute nzoff
-		    ok_square = 0 ;
-		end
-	    end
-
-	    if (ok_vnz)
-		try
-
-		    % analyze a rectangular block, or LU bounds for square block
-		    if (ms < ns)
-			S = S' ;
-		    end
-		    % best of amd and metis
-		    try
-			if (nometis)
-			    pblock = analyze (S, 'col', 1) ;
-			else
-			    pblock = analyze (S, 'col', 3) ;
-			end
-		    catch
-			pblock = colamd2mex (S, [d 10]) ;
-		    end
-		    [vnz2,rnz2] = cs_sqr (S (:, pblock)) ;
-		    rnz = rnz + rnz2 ;
-		    vnz = vnz + vnz2 ;
-
-		catch
-		    % ordering failed, but keep going to compute nzoff
-		    ok_vnz = 0 ;
-		end
-	    end
-
-	    clear S pblock
-
-	end
-
-	stats.nzoff = nzoff ;
-
-	if (ok_square)
-	    if (~square)
-		stats.dmperm_unz = -2 ;
-		stats.dmperm_lnz = -2 ;
-		stats.dmperm_flops = -2 ;
-	    else
-		stats.dmperm_lnz = lnz ;
-		stats.dmperm_unz = unz + nzoff ;
-		stats.dmperm_flops = flops ;
-	    end
-	end
-
-	if (ok_vnz)
-	    stats.dmperm_vnz = vnz ;
-	    stats.dmperm_rnz = rnz + nzoff ;
-	end
-
-	clear C r s
-
-    end
-
-    if (~ok_square)
-	disp (lasterr) ;
-	fprintf ('cs_dmperm (square: lnz, unz, flops) ordering failed\n') ;
-    end
-    if (~ok_vnz)
-	disp (lasterr) ;
-	fprintf ('cs_dmperm (LU bounds: vnz, rnz) ordering failed\n') ;
-    end
-
-catch
-    disp (lasterr) ;
-    fprintf ('cs_dmperm ordering and nzoff failed\n') ;
-end
-
-fprintf ('dmperm stats done, time %g\n', toc) ;
-fprintf ('UFstats done\n') ;
diff --git a/UFcollection/UFwrite.m b/UFcollection/UFwrite.m
deleted file mode 100644
index ead6d46..0000000
--- a/UFcollection/UFwrite.m
+++ /dev/null
@@ -1,444 +0,0 @@
-function UFwrite (Problem, Master, arg3, arg4)
-%UFWRITE write a Problem in Matrix Market or Rutherford/Boeing format
-% containing a set of text files in either Matrix Market or Rutherford/Boeing
-% format.  The Problem can be read from the files back into MATLAB via UFread.
-% See http://www.cise.ufl.edu/research/sparse/matrices for the UF Sparse
-% Matrix Collection home page.  The Problem directory is optionally compressed
-% via tar and gzip.  Arguments 3 and 4, below, are optional and can appear in
-% any order.
-%
-%    UFwrite (Problem)          % Matrix Market format, no tar, use current dir.
-%
-% The following usages write the Problem into the Master/Group/Name directory,
-% where Problem.name = 'Group/Name' is given in the Problem.
-%
-%    UFwrite (Problem, Master)                 % Matrix Market, no tar
-%    UFwrite (Problem, Master, 'MM')           % ditto
-%    UFwrite (Problem, Master, 'RB')           % Rutherford/Boeing, no tar
-%    UFwrite (Problem, Master, 'tar')          % Matrix Market, with tar
-%    UFwrite (Problem, Master, 'MM', 'tar')    % ditto
-%    UFwrite (Problem, Master, 'RB', 'tar')    % Rutherford/Boeing, with tar
-%
-% Problem is a struct, in the UF Sparse Matrix format (see below).  Master is
-% the top-level directory in which directory containing the problem will be
-% placed.  Master defaults to the current working directory if not present (an
-% empty string also means the current directory will be used).
-%
-% The following fields are always present in a UF Sparse Matrix Problem:
-%
-%       name    the group directory and problem name (i.e. 'HB/arc130')
-%
-%       title   short descriptive title
-%
-%       A       an m-by-n sparse matrix, real or complex
-%
-%       id      an integer in the range of 1 to the # of problems in the
-%               collection.  Identical to the line number of
-%               http://www.cise.ufl.edu/research/sparse/mat/UF_Listing.txt
-%               containing the Problem.name.  New matrices are always added at
-%               the end of this list.
-%
-%       date    a string containing the date the matrix was created, or added
-%               to the collection if the creating date is unknown (but is likely
-%               close to the creation date); empty string otherwise.
-%
-%       author  a string containing the name of the author; the computational
-%               scientist who created the matrix from his or her application.
-%               Empty string, or "author unknown" if unknown.
-%
-%       ed      a string containing the name of the editor/collector; the person
-%               who acquired the matrix from the author, for inclusion in this
-%               (or other) sparse matrix / graph collections.
-%
-%       kind    a string (i.e. 'directed graph') describing the type of problem;
-%               a list of words from a well-defined set (see the UF Sparse
-%               Matrix Collection home page for a description, or
-%               http://www.cise.ufl.edu/research/sparse/matrices/kind.html).
-%
-% A Problem struct may also have the following optional fields.
-%
-%       Zeros   pattern of explicit zero entries in A as a binary m-by-n matrix.
-%               These entries are provided by the matrix submittor with zero
-%               numerical value.  MATLAB drops explicit zero entries from any
-%               sparse matrix.  These entries can be important to the problem,
-%               if (for example) the matrix is first in a series of matrices
-%               arising in a nonlinear solver (those entries will become nonzero
-%               later).  These entries are thus kept in the binary matrix Zeros.
-%
-%       b       right-hand-side, any size, real or complex, full or sparse
-%
-%       x       supposed solution to A*x=b, any size, real or complex, full or
-%               sparse
-%
-%       notes   a character array with notes about the problem.
-%
-%       aux     a struct, containing auxiliary information.  The contents of
-%               this struct are problem dependent, but its fields must not
-%               end with '_[0-9]*' where [0-9]* means zero or more digits, nor
-%               can there be an aux.b or aux.x matrix (there can be aux.b
-%               and aux.x cells).  The aux struct must not include any structs,
-%               just matrices and cell arrays of matrices.  The matrices in aux
-%               can be full or sparse, and real, complex, or char.
-%
-% -------------------------------------------------
-% for Problems written in Rutherford/Boeing format:
-% -------------------------------------------------
-%
-% The Problem.name (including the full 'Group/Name'), date, author, and editor
-% define the Rutherford/Boeing title (first line of the file), followed by a
-% '|' in the 72nd column, and then up to 8 characters of the key.  If the key
-% is an empty string, the Problem.id is used as the key.  The A and Zeros
-% matrices are merged and written to this file.  The full name, title, id,
-% kind, date, author, editor, and notes are written to a file of the same name
-% as the primary file, but with a .txt extension.
-%
-% Additional Rutherford/Boeing files are created for b, x, and each sparse
-% matrix in aux.  Full arrays are written using a tiny subset of the Matrix
-% Market format.  The first line of the file is the header, either of:
-%
-%   %%MatrixMarket array real general
-%   %%MatrixMarket array complex general
-%
-% The 2nd row contains the # of rows and columns, and subsequent lines contain
-% one matrix entry each (two values if complex) listed in column-major order.
-% No comments or blank lines are permitted.  The header is ignored when the
-% matrix is read back in by UFread; the real/complex case is determined by how
-% many entries appear on each line.  You can of course read these files with
-% mread, the Matrix Market reader.  The header is added only to make it easier
-% for functions *other* than UFread to read and understand the data (the file
-% can be read in by mread, for example, but mread is not required).  Thus, a
-% complete Rutherord/Boeing directory can be read/written via UFread/UFwrite,
-% without requiring the installation of mread/mwrite (in CHOLMOD), or
-% mmread/mmread (M-file functions from NIST that read/write a Matrix Market
-% file).
-%
-% ---------------------------------------------
-% for Problems written in Matrix Market format:
-% ---------------------------------------------
-%
-% The name, title, A, id, Zeros, kind, date, author, editor, and notes fields of
-% the Problem are written to the primary Matrix Market file, with a .mtx
-% extension.  Additional Matrix Market files are created for b (as name_b),
-% x (as name_x), and each sparse or full matrix in aux.
-%
-% -----------------
-% for both formats:
-% -----------------
-%
-% A matrix Problem.aux.whatever is written out as name_whatever.xxx, without
-% the 'aux' part.  If Problem.aux.whatever is a char array, it is written as
-% the file name_whatever.txt, with one line per row of the char array (trailing
-% spaces in each line are not printed).  If aux.whatever is a cell array, each
-% entry aux.whatever{i} is written as the file name_whatever_<i>.xxx
-% (name_whatever_1.mtx, name_whatever_2.mtx, etc).  All files are placed in the
-% single directory, given by the Problem.name (Group/Name, or 'HB/arc130' for
-% example).  Each directory can only hold one MATLAB Problem struct of the UF
-% Sparse Matrix Collection.
-%
-% Example:
-%
-%   Problem = UFget ('HB/arc130')   % get the HB/arc130 MATLAB Problem
-%   UFwrite (Problem) ;             % write a MM version in current directory
-%   UFwrite (Problem, 'MM') ;       % write a MM version in MM/HB/arc130
-%   UFwrite (Problem, '', 'RB') ;   % write a RB version in current directory
-%
-% See also mwrite, mread, RBwrite, RBread, UFread, UFget, tar
-
-% Optionally uses the CHOLMOD mwrite mexFunction, for writing Problems in
-% Matrix Market format.
-
-% Copyright 2006-2007, Timothy A. Davis, University of Florida.
-
-%-------------------------------------------------------------------------------
-% check inputs
-%-------------------------------------------------------------------------------
-
-if (nargin < 2)
-    % place the result in the current directory
-    Master = '' ;
-end
-if (nargin < 3)
-    arg3 = '' ;
-end
-if (nargin < 4)
-    arg4 = '' ;
-end
-arg3 = lower (arg3) ;
-arg4 = lower (arg4) ;
-
-do_tar = (strcmp (arg3, 'tar') | strcmp (arg4, 'tar')) ;
-RB = (strcmp (arg3, 'rb') | strcmp (arg4, 'rb')) ;
-
-Master = regexprep (Master, '[\/\\]', filesep) ;
-if (~isempty (Master) && Master (end) ~= filesep)
-    Master = [Master filesep] ;
-end
-
-%-------------------------------------------------------------------------------
-% create the problem directory.  Do not report any errors
-%-------------------------------------------------------------------------------
-
-t = find (Problem.name == '/') ;
-group = Problem.name (1:t-1) ;
-name = Problem.name (t+1:end) ;
-groupdir = [Master group] ;
-probdir = [groupdir filesep name] ;
-probname = [probdir filesep name] ;
-
-s = warning ('query', 'MATLAB:MKDIR:DirectoryExists') ;	    % get current state
-warning ('off', 'MATLAB:MKDIR:DirectoryExists') ;
-mkdir (groupdir) ;
-mkdir (probdir) ;
-warning (s) ;						    % restore state
-
-%-------------------------------------------------------------------------------
-% write the name, title, id, kind, date, author, ed, list of fields, and notes
-%-------------------------------------------------------------------------------
-
-cfile = [probname '.txt'] ;
-if (RB)
-    prefix = '%' ;
-else
-    prefix = '' ;
-end
-cf = fopen (cfile, 'w') ;
-print_header (cf, prefix, Problem.name) ;
-fprintf (cf, '%s [%s]\n', prefix, Problem.title) ;
-fprintf (cf, '%s id: %d\n', prefix, Problem.id) ;
-fprintf (cf, '%s date: %s\n', prefix, Problem.date) ;
-fprintf (cf, '%s author: %s\n', prefix, Problem.author) ;
-fprintf (cf, '%s ed: %s\n', prefix, Problem.ed) ;
-fprintf (cf, '%s fields:', prefix) ;
-s = fields (Problem) ;
-for k = 1:length(s)
-    fprintf (cf, ' %s', s {k}) ;
-end
-fprintf (cf, '\n') ;
-if (isfield (Problem, 'aux'))
-    aux = Problem.aux ; 
-    fprintf (cf, '%s aux:', prefix) ;
-    auxfields = fields (aux) ;
-    for k = 1:length(auxfields)
-	fprintf (cf, ' %s', auxfields {k}) ;
-    end
-    fprintf (cf, '\n') ;
-else
-    auxfields = { } ;
-end
-fprintf (cf, '%s kind: %s\n', prefix, Problem.kind) ;
-print_separator (cf, prefix) ;
-if (isfield (Problem, 'notes'))
-    fprintf (cf, '%s notes:\n', prefix) ;
-    for k = 1:size (Problem.notes,1)
-	fprintf (cf, '%s %s\n', prefix, Problem.notes (k,:)) ;
-    end
-    print_separator (cf, prefix) ;
-end
-fclose(cf) ;
-
-%-------------------------------------------------------------------------------
-% write out the A and Z matrices to the RB or MM primary file
-%-------------------------------------------------------------------------------
-
-A = Problem.A ;
-[m n] = size (A) ;
-if (~issparse (A) || m == 0 || n == 0)
-    error ('A must be sparse and non-empty') ;
-end
-if (isfield (Problem, 'Zeros'))
-    Z = Problem.Zeros ;
-    if (any (size (A) ~= size (Z)) || ~isreal (Z) || ~issparse (Z))
-	error ('Zeros must have same size as A, and be sparse and real') ;
-    end
-else
-    Z = [ ] ;
-end
-
-% use the Problem.id number as the RB key
-key = sprintf ('%d', Problem.id) ;
-
-if (RB)
-    % write the files in Rutherford/Boeing form
-    ptitle = [Problem.name '; ' Problem.date '; ' etal(Problem.author)] ;
-    ptitle = [ptitle '; ed: ' etal(Problem.ed)] ;
-    % note that b, g, and x are NOT written to the RB file
-    RBwrite ([probname '.rb'], A, Z, ptitle, key) ;
-else
-    % write the files in Matrix Market form
-    mwrite ([probname '.mtx'], A, Z, cfile) ;
-    delete (cfile) ;    % the comments file has been included in the .mtx file.
-end
-
-%-------------------------------------------------------------------------------
-% write out the b and x matrices as separate files
-%-------------------------------------------------------------------------------
-
-if (isfield (Problem, 'b'))
-    write_component (probname, Problem.name, 'b', Problem.b, cfile, ...
-	prefix, RB, [key 'b']) ;
-end
-if (isfield (Problem, 'x'))
-    write_component (probname, Problem.name, 'x', Problem.x, cfile, ...
-	prefix, RB, [key 'x']) ;
-end
-
-%-------------------------------------------------------------------------------
-% write out each component of aux, each in a separate file
-%-------------------------------------------------------------------------------
-
-for k = 1:length(auxfields)
-    what = auxfields {k} ;
-    X = aux.(what) ;
-
-    if (~iscell (X) && (strcmp (what, 'b') || strcmp (what, 'x')))
-	% aux.b or aux.x would get written out with the same filename as the
-	% Problem.b and Problem.x matrices, and read back in by UFread as
-	% Problem.b and Problem.x instead of aux.b and aux.x.
-	error (['invalid aux component: ' what]) ;
-    end
-
-    if (regexp (what, '_[0-9]*\>'))
-	% aux.whatever_42 would be written as the file name_whatever_42, which
-	% would be intrepretted as aux.whatever{42} when read back in by UFread.
-	error (['invalid aux component: ' what]) ;
-    end
-
-    if (iscell (X))
-	len = length (X) ;
-	for i = 1:len
-	    % this problem includes a sequence of matrices in the new
-	    % format (kind = 'sequence', and Problem.id > 1377).
-	    write_component (probname, Problem.name, ...
-		sprintf (fmt (i, len), what, i) , X{i}, cfile, ...
-		prefix, RB, [key what(1) sprintf('%d', i)]) ;
-	end
-    else
-	% This is a non-cell component of aux.  For an LP problem, this might
-	% be c, lo, or hi.  For an Oberwolfach model reduction problem, this
-	% might be M, C, or E.  For a graph in the Pajek collection, it could
-	% be a vector 'year', with the publication of each article in the graph.
-	% The possibilities are endless, and problem dependent.  Adding new
-	% components to aux can be done without modifying UFread or UFwrite.
-	write_component (probname, Problem.name, what, X, cfile, ...
-	    prefix, RB, [key what]) ;
-    end
-end
-
-%-------------------------------------------------------------------------------
-% tar up the result, if requested
-%-------------------------------------------------------------------------------
-
-if (do_tar)
-    try
-	tar ([probdir '.tar.gz'], probdir) ;
-	rmdir (probdir, 's') ;
-    catch
-	warning ('SuiteSparse:UFwrite', ...
-	    'unable to create tar file; directly left uncompressed') ;
-    end
-end
-
-
-
-%-------------------------------------------------------------------------------
-% fmt
-%-------------------------------------------------------------------------------
-
-function s = fmt (i, len)
-% fmt: determine the format to use for the name of component in a aux.cell array
-if (len < 10)
-    s = '%s_%d' ;		% x1 through x9
-elseif (len < 100)
-    if (i < 10)
-	s = '%s_0%d' ;		% x01 through x09
-    else
-	s = '%s_%d' ;		% x10 through x99
-    end
-else
-    if (i < 10)
-	s = '%s_00%d' ;		% x001 through x009
-    elseif (i < 100)
-	s = '%s_0%d' ;		% x010 through x099
-    else
-	s = '%s_%d' ;		% x100 through x999
-    end
-end
-
-
-%-------------------------------------------------------------------------------
-% write_component
-%-------------------------------------------------------------------------------
-
-function write_component (probname, name, what, X, cfile, prefix, RB, key)
-% write_component: write out a single component of the Problem to a file
-if (isempty (X))
-    % empty matrices (one or more zero dimensions) are not supported
-    error (['invalid component: ' what ' (cannot be empty)']) ;
-elseif (ischar (X))
-    % Write out a char array as a text file.  Remove trailing spaces from the
-    % strings.  Keep the leading spaces; they might be significant.
-    ff = fopen ([probname '_' what '.txt'], 'w') ;
-    for i = 1:size (X,1)
-	fprintf (ff, '%s\n', deblank (X (i,:))) ;
-    end
-    fclose (ff) ;
-elseif (RB)
-    % write out a full or sparse matrix in Rutherford/Boeing format
-    if (issparse (X))
-	% write out the component as a Rutherford/Boeing sparse matrix
-	RBwrite ([probname '_' what '.rb'], X, [ ], [name '_' what], key) ;
-    else
-	% Write out a full matrix in column oriented form,
-	% using a tiny subset of the Matrix Market format for full matrices.
-	UFfull_write ([probname '_' what '.mtx'], X) ;
-    end
-else
-    % write out the component in Matrix Market format (full or sparse)
-    cf = fopen (cfile, 'w') ;
-    print_header (cf, prefix, name, what) ;
-    print_separator (cf, prefix) ;
-    fclose(cf) ;
-    mwrite ([probname '_' what '.mtx'], X, cfile) ;
-    delete (cfile) ;
-end
-
-
-%-------------------------------------------------------------------------------
-% print_separator
-%-------------------------------------------------------------------------------
-
-function print_separator (cf, prefix)
-% print_separator: print a separator line in the comment file
-fprintf (cf, '%s---------------------------------------', prefix) ;
-fprintf (cf, '----------------------------------------\n') ;
-
-
-%-------------------------------------------------------------------------------
-% print_header
-%-------------------------------------------------------------------------------
-
-function print_header (cf, prefix, name, what)
-% print_header: print the header to the comment file
-print_separator (cf, prefix) ;
-fprintf (cf, '%s UF Sparse Matrix Collection, Tim Davis\n', prefix) ;
-fprintf (cf, '%s http://www.cise.ufl.edu/research/sparse/matrices/%s\n', ...
-    prefix, name) ;
-fprintf (cf, '%s name: %s', prefix, name) ;
-if (nargin > 3)
-    fprintf (cf, ' : %s matrix', what) ;
-end
-fprintf (cf, '\n') ;
-
-
-%-------------------------------------------------------------------------------
-% etal
-%-------------------------------------------------------------------------------
-
-function s = etal(name)
-% etal: change a long list of authors to first author 'et al.'
-t = find (name == ',') ;
-if (length (t) > 1)
-    s = [name(1:t(1)-1) ' et al.'] ;
-else
-    s = name ;
-end
diff --git a/UFconfig/README.txt b/UFconfig/README.txt
deleted file mode 100644
index eb26fe1..0000000
--- a/UFconfig/README.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-UFconfig contains configuration settings for all many of the software packages
-that I develop or co-author.  Note that older versions of some of these packages
-do not require UFconfig.
-
-  Package  Description
-  -------  -----------
-  AMD	   approximate minimum degree ordering
-  CAMD	   constrained AMD
-  COLAMD   column approximate minimum degree ordering
-  CCOLAMD  constrained approximate minimum degree ordering
-  UMFPACK  sparse LU factorization, with the BLAS
-  CXSparse int/long/real/complex version of CSparse
-  CHOLMOD  sparse Cholesky factorization, update/downdate
-  KLU	   sparse LU factorization, BLAS-free
-  BTF	   permutation to block triangular form
-  LDL	   concise sparse LDL'
-  LPDASA   LP Dual Active Set Algorithm
-
-UFconfig is not required by:
-
-  CSparse	a Concise Sparse matrix package
-  RBio		read/write files in Rutherford/Boeing format
-  UFcollection	tools for managing the UF Sparse Matrix Collection
-  LINFACTOR     simple m-file to show how to use LU and CHOL to solve Ax=b
-  MESHND        2D and 3D mesh generation and nested dissection ordering
-  MATLAB_Tools  misc collection of m-files
-  SSMULT        sparse matrix times sparse matrix, for use in MATLAB
-
-In addition, the xerbla/ directory contains Fortan and C versions of the
-BLAS/LAPACK xerbla routine, which is called when an invalid input is passed to
-the BLAS or LAPACK.  The xerbla provided here does not print any message, so
-the entire Fortran I/O library does not need to be linked into a C application.
-Most versions of the BLAS contain xerbla, but those from K. Goto do not.  Use
-this if you need too.
diff --git a/UFconfig/UFconfig.h b/UFconfig/UFconfig.h
deleted file mode 100644
index 36c1bd3..0000000
--- a/UFconfig/UFconfig.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* ========================================================================== */
-/* === UFconfig.h =========================================================== */
-/* ========================================================================== */
-
-/* Configuration file for SuiteSparse: a Suite of Sparse matrix packages
- * (AMD, COLAMD, CCOLAMD, CAMD, CHOLMOD, UMFPACK, CXSparse, and others).
- *
- * UFconfig.h provides the definition of the long integer.  On most systems,
- * a C program can be compiled in LP64 mode, in which long's and pointers are
- * both 64-bits, and int's are 32-bits.  Windows 64, however, uses the LLP64
- * model, in which int's and long's are 32-bits, and long long's and pointers
- * are 64-bits.
- *
- * SuiteSparse packages that include long integer versions are
- * intended for the LP64 mode.  However, as a workaround for Windows 64
- * (and perhaps other systems), the long integer can be redefined.
- *
- * If _WIN64 is defined, then the __int64 type is used instead of long.
- *
- * The long integer can also be defined at compile time.  For example, this
- * could be added to UFconfig.mk:
- *
- * CFLAGS = -O -D'UF_long=long long' -D'UF_long_max=9223372036854775801' \
- *   -D'UF_long_id="%lld"'
- *
- * This file defines UF_long as either long (on all but _WIN64) or
- * __int64 on Windows 64.  The intent is that a UF_long is always a 64-bit
- * integer in a 64-bit code.  ptrdiff_t might be a better choice than long;
- * it is always the same size as a pointer.
- *
- * This file also defines the SUITESPARSE_VERSION and related definitions.
- *
- * Copyright (c) 2007, University of Florida.  No licensing restrictions
- * apply to this file or to the UFconfig directory.  Author: Timothy A. Davis.
- */
-
-#ifndef _UFCONFIG_H
-#define _UFCONFIG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <limits.h>
-
-/* ========================================================================== */
-/* === UF_long ============================================================== */
-/* ========================================================================== */
-
-#ifndef UF_long
-
-#ifdef _WIN64
-
-#define UF_long __int64
-#define UF_long_max _I64_MAX
-#define UF_long_id "%I64d"
-
-#else
-
-#define UF_long long
-#define UF_long_max LONG_MAX
-#define UF_long_id "%ld"
-
-#endif
-#endif
-
-/* ========================================================================== */
-/* === SuiteSparse version ================================================== */
-/* ========================================================================== */
-
-/* SuiteSparse is not a package itself, but a collection of packages, some of
- * which must be used together (UMFPACK requires AMD, CHOLMOD requires AMD,
- * COLAMD, CAMD, and CCOLAMD, etc).  A version number is provided here for the
- * collection itself.  The versions of packages within each version of
- * SuiteSparse are meant to work together.  Combining one packge from one
- * version of SuiteSparse, with another package from another version of
- * SuiteSparse, may or may not work.
- *
- * SuiteSparse Version 3.1.0 contains the following packages:
- *
- *  AMD		    version 2.2.0
- *  CAMD	    version 2.2.0
- *  COLAMD	    version 2.7.1
- *  CCOLAMD	    version 2.7.1
- *  CHOLMOD	    version 1.6.0
- *  CSparse	    version 2.2.1
- *  CXSparse	    version 2.2.1
- *  KLU		    version 1.0.1
- *  BTF		    version 1.0.1
- *  LDL		    version 2.0.1
- *  UFconfig	    version number is the same as SuiteSparse
- *  UMFPACK	    version 5.2.0
- *  RBio	    version 1.1.1
- *  UFcollection    version 1.1.1
- *  LINFACTOR       version 1.1.0
- *  MESHND          version 1.1.0
- *  SSMULT          version 1.1.0
- *  MATLAB_Tools    no specific version number
- *
- * Other package dependencies:
- *  BLAS	    required by CHOLMOD and UMFPACK
- *  LAPACK	    required by CHOLMOD
- *  METIS 4.0.1	    required by CHOLMOD (optional) and KLU (optional)
- */
-
-#define SUITESPARSE_DATE "Nov 1, 2007"
-#define SUITESPARSE_VER_CODE(main,sub) ((main) * 1000 + (sub))
-#define SUITESPARSE_MAIN_VERSION 3
-#define SUITESPARSE_SUB_VERSION 1
-#define SUITESPARSE_SUBSUB_VERSION 0
-#define SUITESPARSE_VERSION \
-    SUITESPARSE_VER_CODE(SUITESPARSE_MAIN_VERSION,SUITESPARSE_SUB_VERSION)
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/UFconfig/UFconfig.mk b/UFconfig/UFconfig.mk
deleted file mode 100644
index 5f4f8e2..0000000
--- a/UFconfig/UFconfig.mk
+++ /dev/null
@@ -1,310 +0,0 @@
-#===============================================================================
-# UFconfig.mk:  common configuration file for the SuiteSparse
-#===============================================================================
-
-# This file contains all configuration settings for all packages authored or
-# co-authored by Tim Davis at the University of Florida:
-#
-# Package Version       Description
-# ------- -------       -----------
-# AMD	  1.2 or later  approximate minimum degree ordering
-# COLAMD  2.4 or later  column approximate minimum degree ordering
-# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
-# CAMD    any		constrained approximate minimum degree ordering
-# UMFPACK 4.5 or later	sparse LU factorization, with the BLAS
-# CHOLMOD any		sparse Cholesky factorization, update/downdate
-# KLU	  0.8 or later  sparse LU factorization, BLAS-free
-# BTF	  0.8 or later  permutation to block triangular form
-# LDL	  1.2 or later	concise sparse LDL'
-# LPDASA  any		linear program solve (dual active set algorithm)
-# CXSparse any		extended version of CSparse (int/long, real/complex)
-#
-# The UFconfig directory and the above packages should all appear in a single
-# directory, in order for the Makefile's within each package to find this file.
-#
-# To enable an option of the form "# OPTION = ...", edit this file and
-# delete the "#" in the first column of the option you wish to use.
-
-#------------------------------------------------------------------------------
-# Generic configuration
-#------------------------------------------------------------------------------
-
-# C compiler and compiler flags:  These will normally not give you optimal
-# performance.  You should select the optimization parameters that are best
-# for your system.  On Linux, use "CFLAGS = -O3 -fexceptions" for example.
-CC = cc
-CFLAGS = -O
-
-# ranlib, and ar, for generating libraries
-RANLIB = ranlib
-AR = ar cr
-
-# delete and rename a file
-RM = rm -f
-MV = mv -f
-
-# Fortran compiler (not normally required)
-F77 = f77
-F77FLAGS = -O
-F77LIB =
-
-# C and Fortran libraries
-LIB = -lm
-
-# For compiling MATLAB mexFunctions (MATLAB 7.5)
-MEX = mex -O -largeArrayDims -lmwlapack -lmwblas
-
-# For compiling MATLAB mexFunctions (MATLAB 7.3 and 7.4)
-# MEX = mex -O -largeArrayDims -lmwlapack
-
-# For MATLAB 7.2 or earlier, you must use one of these options:
-# MEX = mex -O -lmwlapack
-# MEX = mex -O
-
-# Which version of MAKE you are using (default is "make")
-# MAKE = make
-# MAKE = gmake
-
-#------------------------------------------------------------------------------
-# BLAS and LAPACK configuration:
-#------------------------------------------------------------------------------
-
-# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
-# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
-# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
-# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
-# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
-# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
-# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
-# on a 2.5Ghz dual-core AMD Opteron.
-
-# These settings will probably not work, since there is no fixed convention for
-# naming the BLAS and LAPACK library (*.a or *.so) files.
-
-# Using the Goto BLAS:
-# BLAS = -lgoto -lgfortran -lgfortranbegin
-
-# This is probably slow ... it might connect to the Standard Reference BLAS:
-BLAS = -lblas -lgfortran -lgfortranbegin
-LAPACK = -llapack
-
-# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
-# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
-# stops the application program if an error occurs.  A C version of xerbla
-# distributed with this software (UFconfig/xerbla/libcerbla.a) includes a
-# Fortran-callable xerbla routine that prints nothing and does not stop the
-# application program.  This is optional.
-# XERBLA = ../../UFconfig/xerbla/libcerbla.a 
-
-# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
-# use this option:
-XERBLA = 
-
-# If you wish to use the Fortran UFconfig/xerbla/xerbla.f instead, use this:
-# XERBLA = ../../UFconfig/xerbla/libxerbla.a 
-
-#------------------------------------------------------------------------------
-# METIS, optionally used by CHOLMOD
-#------------------------------------------------------------------------------
-
-# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
-# compile CHOLMOD with the -DNPARTITION flag.  You must also use the
-# "METIS =" option, below.
-
-# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
-# You may wish to use an absolute path.  METIS is optional.  Compile
-# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
-METIS_PATH = ../../metis-4.0
-METIS = ../../metis-4.0/libmetis.a
-
-# If you use CHOLMOD_CONFIG = -DNPARTITION then you must use the following
-# options:
-# METIS_PATH =
-# METIS =
-
-#------------------------------------------------------------------------------
-# UMFPACK configuration:
-#------------------------------------------------------------------------------
-
-# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
-#
-# -DNBLAS	do not use the BLAS.  UMFPACK will be very slow.
-# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
-#  		LAPACK and the BLAS (defaults to 'int')
-# -DNSUNPERF	do not use the Sun Perf. Library (default is use it on Solaris)
-# -DNPOSIX	do not use POSIX routines sysconf and times.
-# -DGETRUSAGE	use getrusage
-# -DNO_TIMER	do not use any timing routines
-# -DNRECIPROCAL	do not multiply by the reciprocal
-# -DNO_DIVIDE_BY_ZERO	do not divide by zero
-
-UMFPACK_CONFIG = 
-
-#------------------------------------------------------------------------------
-# CHOLMOD configuration
-#------------------------------------------------------------------------------
-
-# CHOLMOD Library Modules, which appear in libcholmod.a:
-# Core		requires: none
-# Check		requires: Core
-# Cholesky	requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
-# MatrixOps	requires: Core
-# Modify	requires: Core
-# Partition	requires: Core, CCOLAMD, METIS.  optional: Cholesky
-# Supernodal	requires: Core, BLAS, LAPACK
-#
-# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
-# Tcov		requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
-#		optional: Partition
-# Valgrind	same as Tcov
-# Demo		requires: Core, Check, Cholesky, MatrixOps, Supernodal
-#		optional: Partition
-#
-# Configuration flags:
-# -DNCHECK	    do not include the Check module.	   License GNU LGPL
-# -DNCHOLESKY	    do not include the Cholesky module.	   License GNU LGPL
-# -DNPARTITION	    do not include the Partition module.   License GNU LGPL
-#		    also do not include METIS.
-# -DNGPL	    do not include any GNU GPL Modules in the CHOLMOD library:
-# -DNMATRIXOPS	    do not include the MatrixOps module.   License GNU GPL
-# -DNMODIFY	    do not include the Modify module.      License GNU GPL
-# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
-#
-# -DNPRINT	    do not print anything.
-# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
-#  		    	LAPACK and the BLAS (defaults to 'int')
-# -DNSUNPERF	    for Solaris only.  If defined, do not use the Sun
-#			Performance Library
-
-CHOLMOD_CONFIG =
-
-#------------------------------------------------------------------------------
-# Linux
-#------------------------------------------------------------------------------
-
-# Using default compilers:
-# CC = gcc
-CFLAGS = -O3
-
-# alternatives:
-# CFLAGS = -g -fexceptions \
-   	-Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
-    	-Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
-# CFLAGS = -O3 -fexceptions \
-   	-Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
-    	-Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
-# CFLAGS = -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
-# CFLAGS = -O3
-
-# consider:
-# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
-# -frename-registers -ffast-math -funroll-loops
-
-# Using the Goto BLAS:
-# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
-
-# Using Intel's icc and ifort compilers:
-#   (does not work for mexFunctions unless you add a mexopts.sh file)
-# F77 = ifort
-# CC = icc
-# CFLAGS = -O3 -xN -vec_report=0
-# CFLAGS = -g
-# old (broken): CFLAGS = -ansi -O3 -ip -tpp7 -xW -vec_report0
-
-# 64bit:
-# F77FLAGS = -O -m64
-# CFLAGS = -O3 -fexceptions -m64
-# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
-# LAPACK = -llapack64
-
-
-# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
-# F77 = gfortran
-# BLAS = -lgoto_opteron64 -lgfortran
-
-# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
-# F77 = gfortran
-# BLAS = -lgoto -lgfortran
-
-#------------------------------------------------------------------------------
-# Solaris
-#------------------------------------------------------------------------------
-
-# 32-bit
-# CFLAGS = -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil
-
-# 64-bit
-# CFLAGS = -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -xarch=v9
-
-# BLAS = -xlic_lib=sunperf
-# LAPACK =
-
-#------------------------------------------------------------------------------
-# Compaq Alpha
-#------------------------------------------------------------------------------
-
-# 64-bit mode only
-# CFLAGS = -O2 -std1
-# BLAS = -ldxml
-# LAPACK =
-
-#------------------------------------------------------------------------------
-# Macintosh
-#------------------------------------------------------------------------------
-
-# CC = gcc
-# CFLAGS = -O3 -fno-common -no-cpp-precomp -fexceptions
-# LIB = -lstdc++
-# BLAS = -framework Accelerate
-# LAPACK = -framework Accelerate
-
-#------------------------------------------------------------------------------
-# IBM RS 6000
-#------------------------------------------------------------------------------
-
-# BLAS = -lessl
-# LAPACK =
-
-# 32-bit mode:
-# CFLAGS   = -O4 -qipa -qmaxmem=16384 -qproto
-# F77FLAGS = -O4 -qipa -qmaxmem=16384
-
-# 64-bit mode:
-# CFLAGS   = -O4 -qipa -qmaxmem=16384 -q64 -qproto
-# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
-# AR = ar -X64
-
-#------------------------------------------------------------------------------
-# SGI IRIX
-#------------------------------------------------------------------------------
-
-# BLAS = -lscsl
-# LAPACK =
-
-# 32-bit mode
-# CFLAGS = -O
-
-# 64-bit mode (32 bit int's and 64-bit long's):
-# CFLAGS = -64
-# F77FLAGS = -64
-
-# SGI doesn't have ranlib
-# RANLIB = echo
-
-#------------------------------------------------------------------------------
-# AMD Opteron (64 bit)
-#------------------------------------------------------------------------------
-
-# BLAS = -lgoto_opteron64 -lg2c
-# LAPACK = -llapack_opteron64
-
-# SUSE Linux 10.1, AMD Opteron
-# F77 = gfortran
-# BLAS = -lgoto_opteron64 -lgfortran
-# LAPACK = -llapack_opteron64
-
-#------------------------------------------------------------------------------
-# remove object files and profile output
-#------------------------------------------------------------------------------
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d
diff --git a/UFconfig/xerbla/Makefile b/UFconfig/xerbla/Makefile
deleted file mode 100644
index 7eb2d58..0000000
--- a/UFconfig/xerbla/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-# Makefile for null-output xerbla
-
-default: ccode
-
-include ../UFconfig.mk
-
-ccode: libcerbla.a
-
-fortran: libxerbla.a 
-
-all: libxerbla.a libcerbla.a
-
-# Fortran version:
-libxerbla.a: xerbla.f
-	$(F77) $(F77FLAGS) -c xerbla.f
-	$(AR) libxerbla.a xerbla.o
-	- $(RM) xerbla.o
-
-# C version:
-libcerbla.a: xerbla.c xerbla.h
-	$(CC) $(CFLAGS) -c xerbla.c
-	$(AR) libcerbla.a xerbla.o
-	- $(RM) xerbla.o
-
-distclean: purge
-
-purge: clean
-	- $(RM) *.o *.a
-
-clean:
-	- $(RM) $(CLEAN)
diff --git a/UFget/Contents.m b/UFget/Contents.m
new file mode 100644
index 0000000..fa07d67
--- /dev/null
+++ b/UFget/Contents.m
@@ -0,0 +1,18 @@
+% UFget: MATLAB interface for the UF Sparse Matrix Collection.
+%
+%   UFget             - loads a matrix from the UF Sparse Matrix Collection.
+%   UFweb             - opens the URL for a matrix.
+%   UFgrep            - search for matrices in the UF Sparse Matrix Collection.
+%   UFkinds           - get 'kind' of each problem in the UF collection.
+%   UFsvd             - singular values of a matrix in the UF collection.
+%
+% Helper functions:
+%
+%   UFget_defaults    - returns default parameter settings for UFget.
+%   UFget_example     - a demo for UFget.
+%   UFget_lookup      - gets the group, name, and id of a matrix.
+%
+% Example:
+%   help UFget
+
+% Copyright 2012, Timothy A. Davis
diff --git a/UFget/Makefile b/UFget/Makefile
new file mode 100644
index 0000000..54dab27
--- /dev/null
+++ b/UFget/Makefile
@@ -0,0 +1,7 @@
+UFgui.jar:  UFgui.java UFhelp.html
+	javac UFgui.java
+	jar cfe UFgui.jar UFgui *.class UFhelp.html
+	- $(RM) *.class
+
+run: UFgui.jar
+	java -jar UFgui.jar
diff --git a/UFget/README.txt b/UFget/README.txt
new file mode 100644
index 0000000..83a882d
--- /dev/null
+++ b/UFget/README.txt
@@ -0,0 +1,124 @@
+UFget:  MATLAB and Java interfaces to the UF sparse matrix collection.
+Copyright 2005-2012, Timothy A. Davis, http://www.suitesparse.com
+
+REQUIREMENTS:
+
+    Java JRE 1.6.0 or later is required for the UFgui Java program.
+    UFget requires MATLAB 7.0.  A few of the largest matrices require MATLAB
+    7.3 or later.
+
+See http://www.suitesparse.com
+for a single archive file with all the files listed below:
+
+    UFget/README.txt            this file
+    UFget/UFsettings.txt        default settings for Java and MATLAB
+
+    for Java:
+    UFget/UFgui.java            a stand-alone Java interface to the collection
+    UFget/UFgui.jar             the compiled UFgui program
+    UFget/UFhelp.html           help for UFgui
+    UFget/Makefile              for compiling UFgui.java into UFgui.jar
+    UFget/matrices/UFstats.txt  matrix statistics file for UFgui.java
+
+    for MATLAB:
+    UFget/Contents.m            help for UFget in MATLAB
+    UFget/UFget_defaults.m      default parameter settings for UFget
+    UFget/UFget_example.m       demo for UFget
+    UFget/UFget_lookup.m        get the group, name, and id of a matrix
+    UFget/UFget.m               primary user interface
+    UFget/UFgrep.m              searches for matrices by name
+    UFget/UFkinds.m             returns the 'kind' for all matrices
+    UFget/UFweb.m               opens the URL for a matrix or collection
+    UFget/mat/UF_Index.mat      index to the UF sparse matrix collection
+
+    download directories:
+    UFget/MM                    for Matrix Market files
+    UFget/RB                    for Rutherford/Boeing files
+    UFget/mat                   for *.mat files
+    UFget/matrices              for *.png icon images of the matrices
+
+For the Java UFgui program:
+
+    To run the UFgui on Windows or Mac OS X, just double-click the UFgui.jar
+    file.  Or, on any platform, type the following command in your command
+    window:
+
+        java -jar UFgui.jar
+
+    If that doesn't work, then you need to install the Java JDK or JRE and add
+    it to your path.  See http://java.sun.com/javase/downloads/index.jsp and
+    http://java.sun.com/javase/6/webnotes/install/index.html for more
+    information.  For Ubuntu, you can install Java by running the Synaptics
+    package manager.
+
+    The UFgui.jar file is the compiled version of UFgui.java.  If you modify
+    UFgui.java, you can recompile it (for Unix/Linux/Mac/Solaris) by typing
+    the command:
+
+        make
+
+    To run the UFgui in Linux/Solaris/Unix, your window manager might support
+    double-clicking the UFgui.jar file as well.  If not, type either of
+    the following commands:
+
+        java -jar UFgui.jar
+
+    or
+
+        make run
+        
+
+For the UFget.m MATLAB interface:
+
+    To install the MATLAB package, just add the path containing the UFget
+    directory to your MATLAB path.  Type "pathtool" in MATLAB for more details.
+
+    For a simple example of use, type this command in MATLAB:
+
+        UFget_example
+
+    The MATLAB statement
+
+        Problem = UFget ('HB/arc130')
+
+    (for example), will download a sparse matrix called HB/arc130 (a laser
+    simulation problem) and load it into MATLAB.  You don't need to use your
+    web browser to load the matrix.  The statement
+
+        Problem = UFget (6)
+
+    will also load same the HB/arc130 matrix.  Each matrix in the collection
+    has a unique identifier, in the range 1 to the number of matrices.  As new
+    matrices are added, the id's of existing matrices will not change.
+
+    To view an index of the entire collection, just type
+
+        UFget
+
+    in MATLAB.  To modify your download directory, edit the UFget_defaults.m
+    file (note that this will not modify the download directory for the
+    UFgui java program, however).
+
+    To open a URL of the entire collection, just type
+
+        UFweb
+
+    To open the URL of a group of matrices in the collection:
+
+        UFweb ('HB')
+
+    To open the web page for one matrix, use either of these formats:
+
+        UFweb ('HB/arc130')
+        UFweb (6)
+
+    To download a new index, to get access to new matrices:
+
+        UFget ('refresh')
+
+    (by default, using UFget downloads the index every 90 days anyway).
+
+    To search for matrices
+
+For more information on how the matrix statistics were created, see
+http://www.suitesparse.com.
diff --git a/UFget/UFget.m b/UFget/UFget.m
new file mode 100644
index 0000000..afe49c0
--- /dev/null
+++ b/UFget/UFget.m
@@ -0,0 +1,198 @@
+function Problem = UFget (matrix, UF_Index)
+%UFGET loads a matrix from the UF Sparse Matrix Collection.
+%
+%   Problem = UFget(matrix) loads a matrix from the UF sparse matrix collection,
+%   specified as either a number (1 to the # of matrices in the collection) or
+%   as a string (the name of the matrix).  With no input parameters, index=UFget
+%   returns an index of matrices in the collection.  A local copy of the matrix
+%   is saved.  If no input or output arguments are provided, the index is
+%   printed.  With a 2nd parameter (Problem = UFget (matrix, index)), the index
+%   file is not loaded.  This is faster if you are loading lots of matrices.
+%
+%   Examples:
+%       index = UFget ;                     % loads index
+%       index = UFget ('refresh') ;         % forces download of new index
+%       index = UFget ('update') ;          % same as 'refresh'
+%
+%       Problem = UFget (6)                 % 4 ways of loading the same Problem
+%       Problem = UFget ('HB/arc130')
+%       Problem = UFget (6, index)
+%       Problem = UFget ('HB/arc130', index)
+%
+%   See also UFgrep, UFweb, UFget_example, UFget_defaults, urlwrite.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+%-------------------------------------------------------------------------------
+% get the parameter settings
+%-------------------------------------------------------------------------------
+
+params = UFget_defaults ;
+
+% The UF_Index.mat file is used by UFget only, not by UFgui.java.
+indexfile = sprintf ('%sUF_Index.mat', params.dir) ;
+indexurl  = sprintf ('%s/UF_Index.mat', params.url) ;
+
+% The UFstats.csv file is used by the UFgui.java program.  It is also used by
+% the UFkinds.m function, which reads the file to find the problem kind for
+% each matrix in the collection.
+statfile = sprintf ('%smatrices/UFstats.csv', params.topdir) ;
+staturl  = sprintf ('%s/matrices/UFstats.csv', params.topurl) ;
+
+%-------------------------------------------------------------------------------
+% get the index file (download a new one if necessary)
+%-------------------------------------------------------------------------------
+
+refresh = 0 ;
+if nargin == 0
+    % if the user passed in a zero or no argument at all, return the index file
+    matrix = 0 ;
+else
+    % UFget ('refresh') downloads the latest index file from the web
+    if (ischar (matrix))
+        if (strcmp (matrix, 'refresh') || strcmp (matrix, 'update'))
+            matrix = 0 ;
+            refresh = 1 ;
+        end
+    end
+end
+
+if (~refresh)
+    try
+        % load the existing index file
+        if (nargin < 2)
+            load (indexfile) ;
+        end
+        % see if the index file is old; if so, download a fresh copy
+        fileinfo = dir (indexfile) ;
+        refresh = (fileinfo.datenum + params.refresh < now) ;
+    catch
+        % oops, no index file, or a refresh is due.  download it.
+        refresh = 1 ;
+    end
+end
+
+err = '' ;      % to catch a download error, if any
+
+if (refresh)
+    % a new UF_Index.mat file to get access to new matrices (if any)
+    try
+        if (~exist (params.dir, 'dir'))
+            mkdir (params.dir) ;
+        end
+
+        % get a new UF_index.mat file
+        tmp = tempname ;                        % download to a temp file first
+        old = sprintf ('%sUF_Index_old.mat', params.dir) ;
+        urlwrite (indexurl, tmp) ;              % download the latest index file
+        try
+            movefile (indexfile, old, 'f') ;    % keep a backup of the old index
+        catch
+            % backup failed, continue anyway
+        end
+        movefile (tmp, indexfile, 'f') ;        % move the new index into place
+
+        % get a new UFstats.csv file
+        tmp = tempname ;                        % download to a temp file first
+        old = sprintf ('%smatrices/UFstats_old.csv', params.topdir) ;
+        urlwrite (staturl, tmp) ;               % download the latest stats file
+        try
+            movefile (statfile, old, 'f') ;     % keep a backup of the old stats
+        catch
+            % backup failed, continue anyway
+        end
+        movefile (tmp, statfile, 'f') ;         % move the new index into place
+
+    catch
+        err = lasterr ;
+    end
+    load (indexfile) ;
+    UF_Index.DownloadTimeStamp = now ;
+    save (indexfile, 'UF_Index') ;
+end
+
+%-------------------------------------------------------------------------------
+% return the index file if requested
+%-------------------------------------------------------------------------------
+
+if (matrix == 0)
+    if (nargout == 0)
+        % no output arguments have been passed, so print the index file
+        fprintf ('\nUF sparse matrix collection index:  %s\n', ...
+            UF_Index.LastRevisionDate) ;
+        fprintf ('\nLegend:\n') ;
+        fprintf ('(p,n)sym:  symmetry of the pattern and values\n') ;
+        fprintf ('           (0 = unsymmetric, 1 = symmetric, - = not computed)\n') ;
+        fprintf ('type:      real\n') ;
+        fprintf ('           complex\n') ;
+        fprintf ('           binary:  all entries are 0 or 1\n') ;
+        nmat = length (UF_Index.nrows) ;
+        for j = 1:nmat
+            if (mod (j, 25) == 1)
+                fprintf ('\n') ;
+                fprintf ('ID   Group/Name                nrows-by-  ncols  nonzeros  (p,n)sym  type\n') ;
+            end
+            s = sprintf ('%s/%s', UF_Index.Group {j}, UF_Index.Name {j}) ;
+            fprintf ('%4d %-30s %7d-by-%7d %9d ', ...
+            j, s, UF_Index.nrows (j), UF_Index.ncols (j), UF_Index.nnz (j)) ;
+            psym = UF_Index.pattern_symmetry (j) ;
+            nsym = UF_Index.numerical_symmetry (j) ;
+            if (psym < 0)
+                fprintf ('  -  ') ;
+            else
+                fprintf (' %4.2f', psym) ;
+            end
+            if (nsym < 0)
+                fprintf ('  -  ') ;
+            else
+                fprintf (' %4.2f', nsym) ;
+            end
+            if (UF_Index.isBinary (j))
+                fprintf (' binary\n') ;
+            elseif (~UF_Index.isReal (j))
+                fprintf (' complex\n') ;
+            else
+                fprintf (' real\n') ;
+            end
+        end
+    else
+        Problem = UF_Index ;
+    end
+
+    if (~isempty (err))
+        fprintf ('\nUFget: unable to download latest index; using old one.\n') ;
+        disp (err) ;
+    end
+    return ;
+end
+
+%-------------------------------------------------------------------------------
+% determine if the matrix parameter is a matrix index or name
+%-------------------------------------------------------------------------------
+
+[group matrix id] = UFget_lookup (matrix, UF_Index) ;
+
+if (id == 0)
+    error ('invalid matrix') ;
+end
+
+%-------------------------------------------------------------------------------
+% download the matrix (if needed) and load it into MATLAB
+
+matdir = sprintf ('%s%s%s%s.mat', params.dir, group) ;
+matfile = sprintf ('%s%s%s.mat', matdir, filesep, matrix) ;
+maturl = sprintf ('%s/%s/%s.mat', params.url, group, matrix) ;
+
+if (~exist (matdir, 'dir'))
+    mkdir (matdir) ;                        % create the Group directory
+end
+
+if (~exist (matfile, 'file'))
+    fprintf ('downloading %s\n', maturl) ;
+    fprintf ('to %s\n', matfile) ;
+    tmp = tempname ;                        % download to a temp file first
+    urlwrite (maturl, tmp) ;
+    movefile (tmp, matfile, 'f') ;          % move the new matrix into place
+end
+
+load (matfile) ;
diff --git a/UFget/UFget_defaults.m b/UFget/UFget_defaults.m
new file mode 100644
index 0000000..71be200
--- /dev/null
+++ b/UFget/UFget_defaults.m
@@ -0,0 +1,71 @@
+function params = UFget_defaults
+%UFGET_DEFAULTS returns default parameter settings for UFget.
+%   Usage:  params = UFget_defaults ; Returns the default parameter settings for
+%   UFget.  Edit the UFget/UFsettings.txt file to change these settings.
+%
+%   params.url: URL for *.mat files
+%   params.dir: your local directory for downloaded *.mat files
+%   params.refresh:  how many days should elapse before re-downloading the
+%       index file (for obtaining access to new matrices in the collection).
+%   params.topurl: URL for UF Sparse Matrix Collection
+%   params.topdir: your directory for mat/, matrices/, MM/ and RB/ directories
+%
+%   Example:
+%       params = UFget_defaults ;
+%
+%   See also UFget.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+% decode the current directory for this M-file
+s = which (mfilename) ;
+i = find (s == filesep) ;
+this = s (1:i(end)) ;
+
+% defaults, if UFsettings.txt is not present
+params.topdir = '' ;
+params.topurl = 'http://www.cise.ufl.edu/research/sparse' ;
+params.refresh = 30 ;
+
+% open the UFsettings.txt file, if present, and read the default settings
+
+f = -1 ;
+try
+    f = fopen (sprintf ('%sUFsettings.txt', this), 'r') ;
+    if (f >= 0)
+        % get the location of the mat directory
+        s = fgetl (f) ;
+        if (ischar (s))
+            params.topdir = s ;
+        end
+        % get the default URL
+        s = fgetl (f) ;
+        if (ischar (s))
+            params.topurl = s ;
+        end
+        % get the refresh rate
+        s = fgetl (f) ;
+        if (ischar (s) && ~isempty (s))
+            params.refresh = str2double (s) ;
+        end
+    end
+catch
+end
+
+try
+    if (f >= 0)
+        fclose (f) ;
+    end
+catch
+end
+
+if (isempty (params.topdir))
+    params.topdir = this ;
+end
+
+if (params.topdir (end) ~= filesep)
+    params.topdir = [params.topdir filesep] ;
+end
+
+params.url = [params.topurl '/mat'] ;
+params.dir = sprintf ('%smat%s', params.topdir, filesep) ;
diff --git a/UFget/UFget_example.m b/UFget/UFget_example.m
new file mode 100644
index 0000000..be9c209
--- /dev/null
+++ b/UFget/UFget_example.m
@@ -0,0 +1,30 @@
+%UFGET_EXAMPLE a demo for UFget.
+%   This example script gets the index file of the UF sparse matrix collection,
+%   and then loads in all symmetric non-binary matrices, in increasing order of
+%   number of rows in the matrix.
+%
+%   Example:
+%       type UFget_example ; % to see an example of how to use UFget
+%
+%   See also UFget, UFweb, UFgrep.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+type UFget_example ;
+
+index = UFget ;
+f = find (index.numerical_symmetry == 1 & ~index.isBinary) ;
+[y, j] = sort (index.nrows (f)) ;
+f = f (j) ;
+
+for i = f
+    fprintf ('Loading %s%s%s, please wait ...\n', ...
+        index.Group {i}, filesep, index.Name {i}) ;
+    Problem = UFget (i,index) ;
+    disp (Problem) ;
+    spy (Problem.A) ;
+    title (sprintf ('%s:%s', Problem.name, Problem.title')) ;
+    UFweb (i) ;
+    input ('hit enter to continue:') ;
+end
+
diff --git a/UFget/UFget_lookup.m b/UFget/UFget_lookup.m
new file mode 100644
index 0000000..6c8a815
--- /dev/null
+++ b/UFget/UFget_lookup.m
@@ -0,0 +1,77 @@
+function [group, name, id] = UFget_lookup (matrix, UF_Index)
+%UFGET_LOOKUP gets the group, name, and id of a matrix.
+%
+%   Example:
+%       [group name id] = UFget_lookup (matrix, UF_Index)
+%
+%   See also UFget.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+if (isnumeric (matrix))
+
+    % make sure that the matrix parameter is only one integer value
+    % this means that if we get an array, just use the first value
+    id = fix (full (matrix (1))) ;
+
+    % if the index is less than one or bigger than the length of the array,
+    % then no particular matrix is accessed
+    if (id > length (UF_Index.nrows) | id < 1)                              %#ok
+        id = 0 ;
+        group = '' ;
+        name = '' ;
+    else
+        % assign the group and name for the given id
+        group = UF_Index.Group {matrix} ;
+        name = UF_Index.Name {matrix} ;
+    end
+
+elseif (ischar (matrix))
+
+    % the group and matrix name are in the string as in GroupName\MatrixName
+
+    % find the group index for the file separator
+    % check both types of slashes, and a colon
+    gi = find (matrix == '/') ;
+    if (length (gi) == 0)                                                   %#ok
+        gi = find (matrix == '\') ;
+    end
+    if (length (gi) == 0)                                                   %#ok
+        gi = find (matrix == ':') ;
+    end
+
+    % if no name divider is in the string, a whole group is specified
+    if (length (gi) == 0)                                                   %#ok
+
+        id = 0 ;
+        group = matrix ;
+        name = '' ;
+
+    else
+
+        % group equals the first part of the string up to the character before
+        % the last file separator
+        group = matrix (1:gi(end)-1) ;
+
+        % group equals the last section of the string after the last file
+        % separator
+        name = matrix (gi(end)+1:end) ;
+
+        % validate the given name and group by checking the index for a match
+        refName = strmatch (name, UF_Index.Name) ;
+        refGroup = strmatch (group, UF_Index.Group) ;
+        id = intersect (refName, refGroup) ;
+        if (length (id) >= 1)
+            id = id (1) ;
+        else
+            % the given group/matrix does not exist in the index file
+            id = 0 ;
+        end
+    end
+
+else
+
+    % there is an error in the argument types passed into the function
+    error ('invalid input') ;
+
+end
diff --git a/UFget/UFgrep.m b/UFget/UFgrep.m
new file mode 100644
index 0000000..6712139
--- /dev/null
+++ b/UFget/UFgrep.m
@@ -0,0 +1,53 @@
+function list = UFgrep (expression, index)
+%UFGREP search for matrices in the UF Sparse Matrix Collection.
+% UFgrep returns a list of Problem id's whose Problem.name string matches an
+% expression.  With no output arguments, the list is displayed.  Otherwise, it
+% is returned as a list of integer id's.
+%
+% Example:
+%   UFgrep ('HB') ;         % all matrices in the HB group
+%   UFgrep ('\<B*') ;       % all matrices in groups starting with the letter B
+%   UFgrep ('bp') ;         % all bp matrices (in the HB group)
+%   UFgrep ('[0-9]') ;      % all matrices with a digit in their name
+%   UFgrep ('c-') ;         % all c-* optimization matrices (in 2 groups)
+%
+% An optional 2nd input argument is the UF index, which is a little faster if
+% UFgrep is used multiple times.  With no input arguments, all Problems are
+% listed.
+%
+%   index = UFget ;
+%   UFgrep ('HB/*', index) ;
+%
+% See also regexp, UFget.
+
+% Copyright 2009, Timothy A. Davis
+
+if (nargin < 2)
+    index = UFget ;
+end
+
+if (nargin < 1)
+    expression = '.' ;
+end
+
+nmat = length (index.nrows) ;
+list1 = zeros (1, nmat) ;
+matched = 0 ;
+
+for id = 1:nmat
+    name = [index.Group{id} '/' index.Name{id}] ;
+    if (~isempty (regexp (name, expression, 'once')))
+        matched = matched + 1 ;
+        list1 (matched) = id ;
+    end
+end
+
+list1 = list1 (1,1:matched) ;
+
+if (nargout == 0)
+    for id = list1
+        fprintf ('%4d: %s/%s\n', id, index.Group {id}, index.Name {id}) ;
+    end
+else
+    list = list1 ;
+end
diff --git a/UFget/UFgui.jar b/UFget/UFgui.jar
new file mode 100644
index 0000000..cbb3b40
Binary files /dev/null and b/UFget/UFgui.jar differ
diff --git a/UFget/UFgui.java b/UFget/UFgui.java
new file mode 100644
index 0000000..d4f1136
--- /dev/null
+++ b/UFget/UFgui.java
@@ -0,0 +1,2589 @@
+//------------------------------------------------------------------------------
+// UFgui: a Java GUI interface for viewing, selecting, and downloading matrices
+// from the University of Florida Sparse Matrix Collection.  To compile this
+// program, type the following in your OS command window:
+//
+//      javac UFgui.java
+//      jar cfe UFgui.jar UFgui *.class UFhelp.html
+//
+// You can then delete the *.class files.  To run the program, type:
+// 
+//      java -jar UFgui.jar
+//
+// In all platforms except Windows (Mac, Linux, Solaris, ...) compile with:
+//
+//      make
+//
+// and run with
+//
+//      make run
+//
+// Copyright (c) 2009, Timothy A. Davis.  See UFhelp.html for the license, and
+// for help on how to use this program, or click "Help" in the GUI.
+//------------------------------------------------------------------------------
+
+import java.io.* ;
+import java.util.* ;
+import java.text.* ;
+import java.net.* ;
+import javax.swing.* ;
+import javax.swing.table.* ;
+import javax.swing.event.* ;
+import java.awt.* ;
+import java.awt.event.* ;
+
+public class UFgui extends JFrame
+{
+
+    //--------------------------------------------------------------------------
+    // private variables, accessible to all methods in this class
+    //--------------------------------------------------------------------------
+
+    private static final String UFstats = "matrices/UFstats.csv",
+        UFindex = "mat/UF_Index.mat",
+        all_kinds = "(all kinds)", all_groups = "(all groups)" ;
+    private static final int K = 1024, M = K*K, BUFSIZE = K,
+        MSEC_PER_DAY = 86400000 ;
+
+    private static long INF = Long.MAX_VALUE ;
+
+    private long refresh = 90 ;
+    private int nselected ;
+    private int [ ] download_ids = null ;
+    private boolean gui_ready, downloading, cancel, get_icons,
+        new_matrices = false, debug = false ;
+    // private boolean get_UFstats ;
+
+    private matrix_Table_Model matrix_model = null ;
+
+    private File mat, MM, RB, iconDir ;
+    private String [ ] Kinds, Groups ;
+    private Object [ ][ ] Stats ;
+
+    private Date today, last_download ;
+
+    // files and input/output streams
+    private static String ftemp_name = null ;
+    private static BufferedOutputStream ftemp_out = null ;
+    private static BufferedInputStream url_in = null ;
+    private static BufferedReader in_reader = null ;
+    private static PrintWriter print_out = null ;
+    private static String UFsite, UFarchive, proxy_server, proxy_port ;
+
+    // Java Swing components available to all methods in this class:
+    private JTable matrix_Table ;
+    private JButton download_Button, cancel_Button ;
+    // private JButton update_Button ;
+    private JTextField minrow_Field, maxrow_Field, mincol_Field, maxcol_Field,
+        minnz_Field, maxnz_Field, minpsym_Field, maxpsym_Field, minnsym_Field,
+        maxnsym_Field ;
+    private JRadioButton posdef_yes_Button, posdef_no_Button,
+        posdef_either_Button, nd_yes_Button, nd_no_Button, nd_either_Button,
+        real_yes_Button, real_no_Button, real_either_Button,
+        shape_square_Button, shape_rect_Button, shape_either_Button ;
+    private JLabel nselected_Label, progress_size_Label, icon_Label ;
+    private JCheckBox format_mat_Button, format_mm_Button, format_rb_Button ;
+    private JProgressBar progress1_Bar, progress2_Bar ;
+    private JFileChooser chooser ;
+    private JList Group_List, Kind_List ;
+
+    //--------------------------------------------------------------------------
+    // create the GUI
+    //--------------------------------------------------------------------------
+
+    private String get_setting (String default_setting)
+    {
+        String s ;
+        try
+        {
+            s = in_reader.readLine ( ) ;
+        }
+        catch (Exception e)
+        {
+            // use defaults if file is not found
+            s = default_setting ;
+        }
+        return (s) ;
+    }
+
+    private UFgui ( )
+    {
+        gui_ready = false ;
+        downloading = false ;
+        cancel = false ;
+        final Font plain_Font = new Font ("SansSerif", Font.PLAIN, 12) ;
+        final Font small_Font = new Font ("SansSerif", Font.PLAIN, 10) ;
+        today = new Date ( ) ;
+        last_download = new Date ( ) ;
+
+        //----------------------------------------------------------------------
+        // get the settings 
+
+        try
+        {
+            in_reader = new BufferedReader (new FileReader ("UFsettings.txt")) ;
+        }
+        catch (Exception e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this,
+                "Settings file UFsettings.txt missing (using defaults).",
+                "Warning", JOptionPane.WARNING_MESSAGE) ;
+        }
+
+        // first line in UFsettings.txt is blank, or the path to the
+        // directory containing the mat, matrices, MM, and RB directories.
+        UFarchive = get_setting ("") ;
+
+        // second line is URL for the UF Sparse Matrix Collection
+        UFsite = get_setting ("http://www.cise.ufl.edu/research/sparse") ;
+
+        // third line is the refresh time, in days
+        String s = get_setting ("90") ;
+        try
+        {
+            if (s.equals ("inf") || s.equals ("Inf"))
+            {
+                refresh = INF ;                 // never refresh
+            }
+            else
+            {
+                refresh = Long.parseLong (s) ;
+            }
+        }
+        catch (Exception e)
+        {
+            refresh = 90 ;  // default: every 90 days
+        }
+
+        // fourth line, if non-empty, is the HTTP proxy server
+        // If none (default), then leave blank.
+        proxy_server = get_setting ("") ;
+
+        // fifth and final line is the proxy port (default is 80)
+        proxy_port = get_setting ("") ;
+
+        // sixth line, if present and starts with a 'd', enables debugging
+        s = get_setting ("") ;
+        debug = (s.length ( ) > 0 && s.charAt (0) == 'd') ;
+
+        close_reader (in_reader) ;
+
+        // set up the HTTP proxy
+        if (proxy_server.length ( ) > 0)
+        {
+            if (proxy_port.length ( ) == 0)
+            {
+                proxy_port = "80" ;
+            }
+            // set the proxy server and port
+            System.setProperty ("proxySet", "true" ) ;
+            System.setProperty ("http.proxyHost", proxy_server) ;
+            System.setProperty ("http.proxyPort", proxy_port) ;
+        }
+
+        // UFarchive defaults to current working directory, if empty
+        if (UFarchive.length ( ) == 0)
+        {
+            UFarchive = System.getProperty ("user.dir") ;
+        }
+        UFarchive = UFarchive.replace ('\\', File.separatorChar) ;
+        UFarchive = UFarchive.replace ('/', File.separatorChar) ;
+        char c = UFarchive.charAt (UFarchive.length ( ) - 1) ;
+        if (c != File.separatorChar)
+        {
+            UFarchive += File.separatorChar ;
+        }
+
+        if (debug)
+        {
+            System.out.println ("") ;
+            System.out.println ("UFgui, debugging enabled.") ;
+            System.out.println ("local archive: [" + UFarchive    + "]") ;
+            System.out.println ("UF url:        [" + UFsite       + "]") ;
+            System.out.println ("refresh:       [" + refresh      + "]") ;
+            System.out.println ("proxy server:  [" + proxy_server + "]") ;
+            System.out.println ("proxy port:    [" + proxy_port   + "]") ;
+        }
+
+        //----------------------------------------------------------------------
+        // make sure the top-level directories exist
+
+        mat = CheckDir ("mat") ;
+        MM = CheckDir ("MM") ;
+        RB = CheckDir ("RB") ;
+        iconDir = CheckDir ("matrices") ;
+
+        //----------------------------------------------------------------------
+        // read in the matrix statistics
+
+        Stats = load_UFstats ( ) ;
+
+        if (Stats == null ||
+            ((today.getTime ( ) - last_download.getTime ( )) / MSEC_PER_DAY
+            > refresh))
+        {
+            // UFstats file is missing, or old.  Download both
+            // matrices/UFstats.csv and mat/UF_Index.mat.
+            Stats = download_matrix_stats ( ) ;
+            if (debug) System.out.println ("downloading new UFstats.csv file") ;
+        }
+
+        if (Stats == null)
+        {
+            // display error dialog and quit
+            JOptionPane.showMessageDialog (this,
+                "Download of matrix statistics file failed.",
+                "Error", JOptionPane.ERROR_MESSAGE) ;
+            System.exit (-1) ;
+        }
+
+        //----------------------------------------------------------------------
+        // set the title, and close on [x]
+
+        setTitle ("UFgui: UF Sparse Matrix Collection") ;
+        setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE) ;
+
+        //----------------------------------------------------------------------
+        // selection buttons
+
+        JPanel select_Button_Panel = new JPanel ( ) ;
+
+        JButton select_Button = new JButton ("Select") ;
+        JButton unselect_Button = new JButton ("Deselect") ;
+        JButton reset_Button = new JButton ("Reset criteria") ;
+        JButton clear_Button = new JButton ("Clear selections") ;
+        JButton help_Button = new JButton ("Help") ;
+
+        select_Button_Panel.add (select_Button) ;
+        select_Button_Panel.add (unselect_Button) ;
+        select_Button_Panel.add (reset_Button) ;
+        select_Button_Panel.add (clear_Button) ;
+        select_Button_Panel.add (help_Button) ;
+
+        select_Button.setToolTipText
+        ("Click to add matrices that fit the criteria to your selection.") ;
+        unselect_Button.setToolTipText ("Click to remove matrices " +
+            "that fit the criteria from your selection.") ;
+        reset_Button.setToolTipText ("Click to reset criteria, above.  " +
+            "Prior selections, below, are not cleared.") ;
+        clear_Button.setToolTipText ("Click to clear selections, below.  " +
+            "Criteria, above, is not reset).") ;
+        help_Button.setToolTipText ("For help, click here") ;
+
+        select_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    make_selection (true) ;
+                }
+            }
+        ) ;
+
+        unselect_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    make_selection (false) ;
+                }
+            }
+        ) ;
+
+        reset_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    reset_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        clear_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    clear_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        help_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    help_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        //----------------------------------------------------------------------
+        // download button and format options
+
+        JPanel format_Panel = new JPanel ( ) ;
+
+        format_mat_Button = new JCheckBox ("MATLAB (mat)") ;
+        format_mm_Button = new JCheckBox ("Matrix Market (MM)") ;
+        format_rb_Button = new JCheckBox ("Rutherford/Boeing (RB)    ") ;
+
+        format_mat_Button.setSelected (true) ;
+
+        format_mat_Button.setToolTipText ("Download in MATLAB *.mat format.") ;
+        format_mm_Button.setToolTipText ("Download in Matrix Market.") ;
+        format_rb_Button.setToolTipText
+            ("Download in Rutherford/Boeing format.") ;
+
+        nselected = 0 ;
+        nselected_Label = new JLabel ( ) ;
+        download_Button = new JButton ("Download") ;
+        // update_Button = new JButton ("Update") ;
+        // update_Button_status (true) ;
+
+        format_Panel.add (download_Button) ;
+        format_Panel.add (format_mat_Button) ;
+        format_Panel.add (format_mm_Button) ;
+        format_Panel.add (format_rb_Button) ;
+        format_Panel.add (nselected_Label) ;
+        // format_Panel.add (update_Button) ;
+        format_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        // progress bar and cancel button
+        FlowLayout progress_Layout = new FlowLayout (FlowLayout.LEADING) ;
+        JPanel progress_Panel = new JPanel (progress_Layout) ;
+
+        cancel_Button = new JButton ("Cancel") ;
+        cancel_Button.setEnabled (false) ;
+        progress1_Bar = new JProgressBar ( ) ;
+        progress2_Bar = new JProgressBar ( ) ;
+        progress_size_Label = new JLabel ("") ;
+        progress1_Bar.setMinimumSize (new Dimension (200,16)) ;
+        progress2_Bar.setMinimumSize (new Dimension (200,16)) ;
+        progress_Panel.add (cancel_Button) ;
+        progress_Panel.add (new JLabel ("   Overall progress:")) ;
+        progress_Panel.add (progress1_Bar) ;
+        progress_Panel.add (new JLabel ("   Current file:")) ;
+        progress_Panel.add (progress2_Bar) ;
+        progress_Panel.add (progress_size_Label) ;
+        progress_Panel.setMaximumSize (new Dimension (0,0)) ;
+        cancel_Button.setToolTipText ("No downloads in progress.") ;
+
+        download_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    download_Button_action (e) ;
+                }
+            }
+        ) ;
+
+        cancel_Button.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    cancel_Button_action (e) ;
+                }
+            }
+        ) ;
+
+//      update_Button.addActionListener
+//      (
+//          new ActionListener ( )
+//          {
+//              public void actionPerformed (ActionEvent e)
+//              {
+//                  update_Button_action (e) ;
+//              }
+//          }
+//      ) ;
+
+        JPanel download_Panel = new JPanel ( ) ;
+        GroupLayout layout3 = new GroupLayout (download_Panel) ;
+        download_Panel.setLayout (layout3) ;
+
+        layout3.setAutoCreateGaps (true) ;
+        layout3.setAutoCreateContainerGaps (false) ;
+
+        layout3.setHorizontalGroup
+        (
+            layout3.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (format_Panel)
+                .addComponent (progress_Panel)
+        ) ;
+
+        layout3.setVerticalGroup
+        (
+            layout3.createSequentialGroup ( )
+                .addComponent (format_Panel)
+                .addComponent (progress_Panel)
+        ) ;
+
+        download_Panel.setBorder
+            (BorderFactory.createTitledBorder ("download")) ;
+        download_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // panel for m, n, nnz, psym, and nsym
+
+        // # of rows
+        minrow_Field = new JTextField ("") ;
+        JLabel rowlabel = new JLabel (" \u2264 number of rows \u2264 ") ;
+        maxrow_Field = new JTextField ("") ;
+        minrow_Field.setColumns (16) ;
+        maxrow_Field.setColumns (16) ;
+        minrow_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxrow_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        minrow_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxrow_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // # of columns
+        mincol_Field = new JTextField ("") ;
+        JLabel collabel = new JLabel (" \u2264 number of columns \u2264 ") ;
+        maxcol_Field = new JTextField ("") ;
+        mincol_Field.setColumns (16) ;
+        maxcol_Field.setColumns (16) ;
+        mincol_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxcol_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        mincol_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxcol_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // # of entries
+        minnz_Field = new JTextField ("") ;
+        JLabel nnzlabel = new JLabel (" \u2264 number of nonzeros \u2264 ") ;
+        maxnz_Field = new JTextField ("") ;
+        minnz_Field.setColumns (16) ;
+        maxnz_Field.setColumns (16) ;
+        minnz_Field.setToolTipText ("Leave blank for 'zero'.") ;
+        maxnz_Field.setToolTipText ("Leave blank for 'infinite'.") ;
+        minnz_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxnz_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // pattern symmetry
+        minpsym_Field = new JTextField ("0.0") ;
+        JLabel psymlabel = new JLabel (" \u2264 pattern symmetry \u2264 ") ;
+        maxpsym_Field = new JTextField ("1.0") ;
+        minpsym_Field.setColumns (16) ;
+        maxpsym_Field.setColumns (16) ;
+        maxpsym_Field.setToolTipText (
+        "Refers to position of nonzeros, not their values.\n" +
+        "1 = perfectly symmetric pattern, 0 = perfectly unsymmetric pattern.") ;
+        minpsym_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxpsym_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        // numerical symmetry
+        minnsym_Field = new JTextField ("0.0") ;
+        JLabel nsymlabel = new JLabel (" \u2264 numerical symmetry \u2264 ") ;
+        maxnsym_Field = new JTextField ("1.0") ;
+        minnsym_Field.setColumns (16) ;
+        maxnsym_Field.setColumns (16) ;
+        maxnsym_Field.setToolTipText (
+        "1 means A=A', 0 means no nonzero entry A(i,j) = A(j,i).") ;
+        minnsym_Field.setMinimumSize (new Dimension (120,0)) ;
+        maxnsym_Field.setMinimumSize (new Dimension (120,0)) ;
+
+        JPanel range_Panel = new JPanel ( ) ;
+        GroupLayout layout5 = new GroupLayout (range_Panel) ;
+        range_Panel.setLayout (layout5) ;
+        layout5.setAutoCreateGaps (false) ;
+        layout5.setAutoCreateContainerGaps (false) ;
+
+        layout5.setHorizontalGroup
+        (
+            layout5.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minrow_Field)
+                        .addComponent (mincol_Field)
+                        .addComponent (minnz_Field)
+                        .addComponent (minpsym_Field)
+                        .addComponent (minnsym_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (rowlabel)
+                        .addComponent (collabel)
+                        .addComponent (nnzlabel)
+                        .addComponent (psymlabel)
+                        .addComponent (nsymlabel)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (maxrow_Field)
+                        .addComponent (maxcol_Field)
+                        .addComponent (maxnz_Field)
+                        .addComponent (maxpsym_Field)
+                        .addComponent (maxnsym_Field)
+                )
+        ) ;
+
+        layout5.setVerticalGroup
+        (
+            layout5.createSequentialGroup ( )
+
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minrow_Field)
+                        .addComponent (rowlabel)
+                        .addComponent (maxrow_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (mincol_Field)
+                        .addComponent (collabel)
+                        .addComponent (maxcol_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minnz_Field)
+                        .addComponent (nnzlabel)
+                        .addComponent (maxnz_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minpsym_Field)
+                        .addComponent (psymlabel)
+                        .addComponent (maxpsym_Field)
+                )
+                .addGroup
+                (
+                    layout5.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (minnsym_Field)
+                        .addComponent (nsymlabel)
+                        .addComponent (maxnsym_Field)
+                )
+
+        ) ;
+
+        range_Panel.setMaximumSize (new Dimension (0,0)) ;
+        // range_Panel.setBorder (BorderFactory.createTitledBorder ("range")) ;
+
+        //----------------------------------------------------------------------
+        // checkbox panel for posdef, ND, real, and format
+
+        // square or rectangular
+        JLabel shape_label = new JLabel ("shape ") ;
+        shape_square_Button = new JRadioButton ("square   ") ;
+        shape_rect_Button = new JRadioButton ("rectangular   ") ;
+        shape_either_Button = new JRadioButton ("either   ") ;
+        shape_either_Button.setSelected (true) ;
+        ButtonGroup shape_group = new ButtonGroup ( ) ;
+        shape_group.add (shape_square_Button) ;
+        shape_group.add (shape_rect_Button) ;
+        shape_group.add (shape_either_Button) ;
+        shape_square_Button.setToolTipText
+            ("Select 'yes' for square matrices.") ;
+        shape_rect_Button.setToolTipText
+            ("Select 'no' for rectangular matrices only.") ;
+        shape_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        // positive definite
+        JLabel posdef_label = new JLabel ("positive definite? ") ;
+        posdef_yes_Button = new JRadioButton ("yes") ;
+        posdef_no_Button = new JRadioButton ("no") ;
+        posdef_either_Button = new JRadioButton ("either") ;
+        posdef_either_Button.setSelected (true) ;
+        ButtonGroup posdef_group = new ButtonGroup ( ) ;
+        posdef_group.add (posdef_yes_Button) ;
+        posdef_group.add (posdef_no_Button) ;
+        posdef_group.add (posdef_either_Button) ;
+
+        posdef_yes_Button.setToolTipText
+            ("Select 'yes' for symmetric positive definite matrices only.") ;
+        posdef_no_Button.setToolTipText
+            ("Select 'no' for non-positive definite matrices only.") ;
+        posdef_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        // 2D/3D
+        JLabel nd_label = new JLabel ("2D/3D discretization?    ") ;
+        nd_yes_Button = new JRadioButton ("yes") ;
+        nd_no_Button = new JRadioButton ("no") ;
+        nd_either_Button = new JRadioButton ("either") ;
+        nd_either_Button.setSelected (true) ;
+        ButtonGroup nd_group = new ButtonGroup ( ) ;
+        nd_group.add (nd_yes_Button) ;
+        nd_group.add (nd_no_Button) ;
+        nd_group.add (nd_either_Button) ;
+
+        nd_yes_Button.setToolTipText
+            ("Select 'yes' for matrices " +
+            "arising from 2D or 3D discretizations only.") ;
+        nd_no_Button.setToolTipText
+            ("Select 'no' to exclude matrices " +
+            "arising from 2D or 3D discretizations.") ;
+        nd_either_Button.setToolTipText ("Select 'either' for any matrix.") ;
+
+        // real or complex
+        JLabel real_label = new JLabel ("real or complex? ") ;
+        real_yes_Button = new JRadioButton ("real") ;
+        real_no_Button = new JRadioButton ("complex") ;
+        real_either_Button = new JRadioButton ("either") ;
+        real_either_Button.setSelected (true) ;
+        ButtonGroup real_group = new ButtonGroup ( ) ;
+        real_group.add (real_yes_Button) ;
+        real_group.add (real_no_Button) ;
+        real_group.add (real_either_Button) ;
+
+        real_yes_Button.setToolTipText
+            ("Select 'real' for real matrices only (includes integer and binary).") ;
+        real_no_Button.setToolTipText
+            ("Select 'complex' for complex matrices only.") ;
+        real_either_Button.setToolTipText
+            ("Select 'either' for any matrix.") ;
+
+        JPanel check_Panel = new JPanel ( ) ;
+        GroupLayout layout4 = new GroupLayout (check_Panel) ;
+        check_Panel.setLayout (layout4) ;
+        layout4.setAutoCreateGaps (false) ;
+        layout4.setAutoCreateContainerGaps (false) ;
+
+        layout4.setHorizontalGroup
+        (
+            layout4.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_label)
+                        .addComponent (posdef_label)
+                        .addComponent (nd_label)
+                        .addComponent (real_label)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_square_Button)
+                        .addComponent (posdef_yes_Button)
+                        .addComponent (nd_yes_Button)
+                        .addComponent (real_yes_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_rect_Button)
+                        .addComponent (posdef_no_Button)
+                        .addComponent (nd_no_Button)
+                        .addComponent (real_no_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_either_Button)
+                        .addComponent (posdef_either_Button)
+                        .addComponent (nd_either_Button)
+                        .addComponent (real_either_Button)
+                )
+        ) ;
+
+        layout4.setVerticalGroup
+        (
+            layout4.createSequentialGroup ( )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (shape_label)
+                        .addComponent (shape_square_Button)
+                        .addComponent (shape_rect_Button)
+                        .addComponent (shape_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (posdef_label)
+                        .addComponent (posdef_yes_Button)
+                        .addComponent (posdef_no_Button)
+                        .addComponent (posdef_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (nd_label)
+                        .addComponent (nd_yes_Button)
+                        .addComponent (nd_no_Button)
+                        .addComponent (nd_either_Button)
+                )
+                .addGroup
+                (
+                    layout4.createParallelGroup (GroupLayout.Alignment.LEADING)
+                        .addComponent (real_label)
+                        .addComponent (real_yes_Button)
+                        .addComponent (real_no_Button)
+                        .addComponent (real_either_Button)
+                )
+        ) ;
+
+        check_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // Group and Kind lists
+
+        Kinds = FindKinds ( ) ;
+        Groups = FindGroups ( ) ;
+
+        Group_List = new JList ((Object [ ]) Groups) ;
+        Kind_List = new JList ((Object [ ]) Kinds) ;
+
+        JScrollPane Group_Pane = new JScrollPane (Group_List) ;
+        JScrollPane Kind_Pane = new JScrollPane (Kind_List) ;
+
+        Kind_Pane.setBorder (BorderFactory.createTitledBorder ("kind")) ;
+        Group_Pane.setBorder (BorderFactory.createTitledBorder ("group")) ;
+
+        Group_List.setFont (plain_Font) ;
+        Kind_List.setFont (plain_Font) ;
+
+        Group_Pane.setVerticalScrollBarPolicy
+            (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
+        Kind_Pane.setVerticalScrollBarPolicy
+            (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
+
+        Group_List.setVisibleRowCount (5) ;
+        Kind_List.setVisibleRowCount (5) ;
+
+        // Group_List.setPreferredSize (new Dimension (200,100)) ;
+        // Kind_List.setPreferredSize (new Dimension (200,100)) ;
+
+        JPanel list_Panel = new JPanel ( ) ;
+        GroupLayout layout9 = new GroupLayout (list_Panel) ;
+        list_Panel.setLayout (layout9) ;
+
+        layout9.setAutoCreateGaps (true) ;
+        layout9.setAutoCreateContainerGaps (false) ;
+
+        layout9.setHorizontalGroup
+        (
+            layout9.createSequentialGroup ( )
+                .addComponent (Group_Pane)
+                .addComponent (Kind_Pane)
+        ) ;
+
+        layout9.setVerticalGroup
+        (
+            layout9.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (Group_Pane)
+                .addComponent (Kind_Pane)
+        ) ;
+
+        list_Panel.setMinimumSize (new Dimension (450,150)) ;
+
+        //----------------------------------------------------------------------
+        // selection panel
+        JPanel selection_Panel = new JPanel ( ) ;
+        GroupLayout layout2 = new GroupLayout (selection_Panel) ;
+        selection_Panel.setLayout (layout2) ;
+        layout2.setAutoCreateGaps (true) ;
+        layout2.setAutoCreateContainerGaps (false) ;
+        layout2.setHorizontalGroup
+        (
+            layout2.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (range_Panel)
+                .addComponent (check_Panel)
+                .addComponent (list_Panel)
+                .addComponent (select_Button_Panel)
+        ) ;
+        layout2.setVerticalGroup
+        (
+            layout2.createSequentialGroup ( )
+                .addComponent (range_Panel)
+                .addComponent (check_Panel)
+                .addComponent (list_Panel)
+                .addComponent (select_Button_Panel)
+        ) ;
+        selection_Panel.setBorder
+            (BorderFactory.createTitledBorder ("selection criteria")) ;
+        selection_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // create the table of matrices
+
+        matrix_model = new matrix_Table_Model ( ) ;
+        matrix_Table = new JTable (matrix_model)
+        {
+            // table header tool tips
+            protected JTableHeader createDefaultTableHeader ( )
+            {
+                return new JTableHeader (columnModel)
+                {
+                    public String getToolTipText (MouseEvent e)
+                    {
+                        String tip = null ;
+                        java.awt.Point p = e.getPoint ( ) ;
+                        int i = columnModel.getColumnIndexAtX (p.x) ;
+                        int j = columnModel.getColumn (i).getModelIndex ( ) ;
+                        return matrix_column_tooltips [j] ;
+                    }
+                } ;
+            }
+        } ;
+
+        JTableHeader header = matrix_Table.getTableHeader ( ) ;
+        final TableCellRenderer hr = header.getDefaultRenderer ( ) ;
+        header.setDefaultRenderer
+        (
+            new TableCellRenderer ( )
+            {
+                public Component getTableCellRendererComponent (JTable table,
+                    Object value, boolean isSelected, boolean hasFocus,
+                    int row, int column)
+                {
+                    Component co = hr.getTableCellRendererComponent (
+                        table, value, isSelected, hasFocus, row, column) ;
+                    co.setFont (small_Font) ;
+                    return (co) ;
+                }
+            }
+        ) ;
+
+        matrix_model.load_data (Stats) ;
+
+        //----------------------------------------------------------------------
+        // popup menu for the table
+
+        JPopupMenu popup = new JPopupMenu ( ) ;
+
+        JMenuItem select_menuItem =
+            new JMenuItem ("Select highlighted matrices") ;
+        select_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    popup_action (e, true) ;
+                }
+            }
+        ) ;
+
+        JMenuItem unselect_menuItem =
+            new JMenuItem ("Deselect highlighted matrices") ;
+        unselect_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    popup_action (e, false) ;
+                }
+            }
+        ) ;
+
+        JMenuItem exportcsv_menuItem =
+            new JMenuItem ("Export selected matrices as CSV file") ;
+        exportcsv_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    export_list_action (e, true) ;
+                }
+            }
+        ) ;
+
+        JMenuItem exportm_menuItem =
+            new JMenuItem ("Export selected matrices as MATLAB *.m file") ;
+        exportm_menuItem.addActionListener
+        (
+            new ActionListener ( )
+            {
+                public void actionPerformed (ActionEvent e)
+                {
+                    export_list_action (e, false) ;
+                }
+            }
+        ) ;
+
+        popup.add (select_menuItem) ;
+        popup.add (unselect_menuItem) ;
+        popup.add (exportcsv_menuItem) ;
+        popup.add (exportm_menuItem) ;
+
+        // Add listener to components that can bring up popup menus.
+        matrix_Table.addMouseListener (new matrix_Table_PopupListener (popup)) ;
+
+        //----------------------------------------------------------------------
+        // set default column widths
+
+        int [ ] columnwidth = {
+            40,     // 0:select
+            30,     // 1:mat
+            25,     // 2:MM
+            25,     // 3:RB
+            38,     // 4:id
+            110,    // 5:Group
+            150,    // 6:Name
+            70,     // 7:nrows
+            70,     // 8:ncols
+            70,     // 9:nnz
+            40,     // 10:isReal
+            40,     // 11:isBinary
+            40,     // 12:isND
+            40,     // 13:posdef
+            50,     // 14:psym
+            50,     // 15:nsym
+            200 } ; // 16:kind
+
+        TableColumn column = null ;
+        for (int col = 0 ; col < 17 ; col++)
+        {
+            column = matrix_Table.getColumnModel ( ).getColumn (col) ;
+            column.setPreferredWidth (columnwidth [col]) ;
+        }
+
+        //----------------------------------------------------------------------
+        // set the view size, sort by id, and add the table to a scroll pane
+
+        matrix_Table.setPreferredScrollableViewportSize
+            (new Dimension (500,70)) ;
+        matrix_Table.setFillsViewportHeight (true) ;
+        matrix_Table.setAutoCreateRowSorter (true) ;
+
+        matrix_Table.getSelectionModel ( )
+            .addListSelectionListener (new matrix_Table_RowListener ( )) ;
+
+        // sort by id
+        java.util.List <RowSorter.SortKey> sortKeys =
+            new ArrayList<RowSorter.SortKey> ( ) ;
+        sortKeys.add (new RowSorter.SortKey (4, SortOrder.ASCENDING)) ;
+        (matrix_Table.getRowSorter ( )).setSortKeys (sortKeys) ; 
+
+        matrix_Table.getTableHeader ( ).setReorderingAllowed (false) ;
+        JScrollPane scroll_Pane = new JScrollPane (matrix_Table) ;
+        scroll_Pane.setBorder (BorderFactory.createTitledBorder (UFarchive)) ;
+
+        //----------------------------------------------------------------------
+        // create the icon and display the default matrix
+
+        icon_Label = new JLabel ( ) ;
+        icon_Label.setFont (plain_Font) ;
+        icon_Label.setVerticalTextPosition (JLabel.BOTTOM) ;
+        icon_Label.setHorizontalTextPosition (JLabel.CENTER) ;
+        icon_Label.setBorder (BorderFactory.createTitledBorder ("matrix icon"));
+        update_icon ("HB/west0479") ;
+
+        //----------------------------------------------------------------------
+        // create the top panel (selection panel and icon)
+
+        JPanel top_Panel = new JPanel ( ) ;
+        GroupLayout layout8 = new GroupLayout (top_Panel) ;
+        top_Panel.setLayout (layout8) ;
+
+        layout8.setAutoCreateGaps (true) ;
+        layout8.setAutoCreateContainerGaps (false) ;
+
+        layout8.setHorizontalGroup
+        (
+            layout8.createSequentialGroup ( )
+                .addComponent (selection_Panel)
+                .addComponent (icon_Label)
+        ) ;
+
+        layout8.setVerticalGroup
+        (
+            layout8.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (selection_Panel)
+                .addComponent (icon_Label)
+        ) ;
+
+        top_Panel.setMaximumSize (new Dimension (0,0)) ;
+
+        //----------------------------------------------------------------------
+        // create the root layout manager
+
+        Container pane = getContentPane ( ) ;
+        GroupLayout layout = new GroupLayout (pane) ;
+        pane.setLayout (layout) ;
+        layout.setAutoCreateGaps (true) ;
+        layout.setAutoCreateContainerGaps (false) ;
+
+        layout.setHorizontalGroup
+        (
+            layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+                .addComponent (top_Panel)
+                .addComponent (scroll_Pane)
+                .addComponent (download_Panel)
+        ) ;
+
+        layout.setVerticalGroup
+        (
+            layout.createSequentialGroup ( )
+                .addComponent (top_Panel)
+                .addComponent (scroll_Pane)
+                .addComponent (download_Panel)
+        ) ;
+
+        setSize (1100,750) ;
+
+        //----------------------------------------------------------------------
+        // create the file chooser; not shown until "export" is chosen
+
+        chooser = new JFileChooser ( ) ;
+        chooser.setFileSelectionMode (JFileChooser.FILES_AND_DIRECTORIES) ;
+
+        gui_ready = true ;
+        set_selected_label (true) ;
+
+        //----------------------------------------------------------------------
+        // start a thread to download any icons not present
+
+        get_all_icons ( ) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // yes/no/unknown
+    //--------------------------------------------------------------------------
+
+    private String yes_no (int k)
+    {
+        if (k < 0)
+        {
+            return ("?") ;
+        }
+        else if (k == 0)
+        {
+            return ("no") ;
+        }
+        else
+        {
+            return ("yes") ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // ternary
+    //--------------------------------------------------------------------------
+
+    private int ternary (String s)
+    {
+        long k = Long.parseLong (s) ;
+        if (k < 0)
+        {
+            return (-1) ;
+        }
+        else if (k == 0)
+        {
+            return (0) ;
+        }
+        else
+        {
+            return (1) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // read the UFstats file
+    //--------------------------------------------------------------------------
+
+    private Object [ ][ ] load_UFstats ( )
+    {
+        if (debug) System.out.println ("reading UFstats.csv file") ;
+        Object [ ][ ] S = null ;
+        int nmatrices = 0 ;
+        in_reader = null ;
+        try
+        {
+            // get the number of matrices in the UF Sparse Matrix Collection
+            in_reader = new BufferedReader (new FileReader
+                (fix_name (UFstats))) ;
+            nmatrices = Integer.parseInt (in_reader.readLine ( )) ;
+            // skip past the creation date and time
+            String ignore = in_reader.readLine ( ) ;
+            // get the time of last download from the file modification time
+            last_download =
+                new Date (new File (fix_name (UFstats)).lastModified ( )) ;
+        }
+        catch (Exception e)
+        {
+            // this is OK, for now, since we can try to download a new one
+            if (debug) System.out.println ("reading UFstats.csv file failed") ;
+            return (null) ;
+        }
+        try
+        {
+            // read the rest of the file
+            S = new Object [nmatrices][13] ;
+            for (int id = 1 ; id <= nmatrices ; id++)
+            {
+                // split the tokens by comma
+                String [ ] r = (in_reader.readLine ( )).split (",") ;
+                S [id-1][0]  = id ;                             // id
+                S [id-1][1]  = r [0] ;                          // Group
+                S [id-1][2]  = r [1] ;                          // Name
+                S [id-1][3]  = Long.parseLong (r [2]) ;         // nrows
+                S [id-1][4]  = Long.parseLong (r [3]) ;         // ncols
+                S [id-1][5]  = Long.parseLong (r [4]) ;         // nnz
+
+                S [id-1][6]  = ternary (r [5]) ;                // isReal
+                S [id-1][7]  = ternary (r [6]) ;                // isBinary
+                S [id-1][8]  = ternary (r [7]) ;                // isND
+                S [id-1][9]  = ternary (r [8]) ;                // posdef
+
+                S [id-1][10] = Double.parseDouble (r [9]) ;     // psym
+                S [id-1][11] = Double.parseDouble (r [10]) ;    // nsym
+                S [id-1][12] = r [11] ;                         // kind
+            }
+        }
+        catch (Exception e)
+        {
+            // this is OK, for now, since we can try to download a new one
+            if (debug) System.out.println ("reading UFstats.csv file failed") ;
+            return (null) ;
+        }
+        finally
+        {
+            close_reader (in_reader) ;
+        }
+        return (S) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // tool tips for each column of the matrix table
+    //--------------------------------------------------------------------------
+
+    protected String [ ] matrix_column_tooltips =
+    {
+        // 0:select:
+        "Click to select a matrix.  This is the only column you can edit.",
+        "'x' if MAT format already downloaded",                 // 1:mat
+        "'x' if MM format already downloaded",                  // 2:MM
+        "'x' if RB format already downloaded",                  // 3:MM
+        "matrix id",                                        // 4:id
+        "matrix group (typically a person or organization)",// 5:Group
+        "matrix name (full name is Group/Name)",            // 6:Name
+        "# of rows in the matrix",                          // 7:nrows
+        "# of columns in the matrix",                       // 8:ncols
+        "# of nonzeros in the matrix",                      // 9:nnz
+        "if the matrix is real (not complex)",              // 10:isReal
+        "if the matrix is binary",                          // 11:isBinary
+        "if the matrix arises from a 2D/3D discretization", // 12:isND
+        "if the matrix is symmetric positive definite",     // 13:posdef
+        // 14:psym:
+        "symmetry of nonzero pattern (0: none, 1: pattern(A)=pattern(A')",
+        "symmetry of nonzero values (0: none, 1: A=A'",     // 15:nsym
+        // 16:kind:
+        "the matrix 'kind' is the problem domain from which it arises" 
+    } ;
+
+    //--------------------------------------------------------------------------
+    // control whether changes to the table cause updates to fire
+    //--------------------------------------------------------------------------
+
+    public boolean fire_status = true ;
+
+    public void fire_updates (boolean fire)
+    {
+        fire_status = fire ;
+        if (fire)
+        {
+            // touch the table to force a fire
+            set_table_value (get_table_value (1, 0), 1, 0) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // table of matrix statistics
+    //--------------------------------------------------------------------------
+
+    class matrix_Table_Model extends AbstractTableModel
+    {
+        private String [ ] columnNames =
+            {
+            "select", "mat", "MM", "RB",
+            "id", "Group", "Name", "# rows", "# cols", "# nonzeros", "real",
+            "binary", "2D/3D", "posdef", "psym", "nsym", "kind" } ;
+
+        private Object [ ][ ] data = null ;
+
+        public int getColumnCount ( )
+        {
+            return (columnNames.length) ;
+        }
+
+        public int getRowCount ( )
+        {
+            return (data.length) ;
+        }
+
+        public String getColumnName (int col)
+        {
+            return (columnNames [col]) ;
+        }
+
+        public Object getValueAt (int row, int col)
+        {
+            return (data [row][col]) ;
+        }
+
+        public boolean isCellEditable (int row, int col)
+        {
+            // only the "select" column is edittable
+            return (col == 0) ;
+        }
+
+        public void setValueAt (Object value, int row, int col)
+        {
+            if (col == 0 && gui_ready && ((Boolean) data [row][0]) != value)
+            {
+                if ((Boolean) value == false)
+                {
+                    // changing from selected to unselected
+                    nselected-- ;
+                }
+                else
+                {
+                    // changing from unselected to selected
+                    nselected++ ;
+                }
+                set_selected_label (download_Button.isEnabled ( )) ;
+            }
+            data [row][col] = value ;
+            if (fire_status) fireTableDataChanged ( ) ;
+        }
+
+        public Class getColumnClass (int col)
+        {
+            return (getValueAt (0, col).getClass ( )) ;
+        }
+
+        public void load_data (Object [ ][ ] newstats)
+        {
+            // load the matrix table with all matrix statistics
+            data = new Object [newstats.length][17] ;
+            nselected = 0 ;
+            for (int i = 0 ; i < newstats.length ; i++)
+            {
+                // i and j are in terms of the view, but the table is not yet
+                // sorted because it is not yet visible
+                data [i][0] = false ;   // select column is false
+                for (int j = 1 ; j < 4 ; j++)
+                {
+                    // mat, MM, and RB, which can change later:
+                    data [i][j] = "-" ;
+                }
+                for (int j = 0 ; j < 13 ; j++)
+                {
+                    // matrix stats, which do not change:
+                    // 4:id, 5:Group, 6:Name, 7:nrows, 8:ncols, 9:nnz,
+                    // 10:isreal, 11:isBinary, 12:isND, 13:posdef, 14: psym,
+                    // 15:nsym, 16:kind
+                    if (j >= 6 && j <= 9)
+                    {
+                        int k = (Integer) newstats [i][j] ;
+                        if (k < 0)
+                        {
+                            data [i][j+4] = " ?" ;
+                        }
+                        else if (k == 0)
+                        {
+                            data [i][j+4] = " no" ;
+                        }
+                        else
+                        {
+                            data [i][j+4] = " yes" ;
+                        }
+                    }
+                    else
+                    {
+                        data [i][j+4] = newstats [i][j] ;
+                    }
+                }
+            }
+            fireTableDataChanged ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // get a value from the matrix table
+    //--------------------------------------------------------------------------
+
+    private Object get_table_value (int id, int j)
+    {
+        // id is in the range 1 to Stats.length.  The model index is id-1.
+        // Convert this to the row index of the view and then get the data.
+        // j is in the range 0 to 16, and is the same in the view and the
+        // model, since column rearranging is never done.
+
+        int i = matrix_Table.convertRowIndexToView (id-1) ;
+        return (matrix_Table.getValueAt (i, j)) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // set a value in the matrix table
+    //--------------------------------------------------------------------------
+
+    private void set_table_value (Object value, int id, int j)
+    {
+        // just like get_table_value, setting the data instead of getting it
+
+        int i = matrix_Table.convertRowIndexToView (id-1) ;
+        matrix_Table.setValueAt (value, i, j) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // get ids of highlighted matrices
+    //--------------------------------------------------------------------------
+
+    private int [ ] get_highlighted_ids ( )
+    {
+        // return a list of highlighted matrix id's
+
+        // get the highlighted row indices in the current view
+        int [ ] highlighted = matrix_Table.getSelectedRows ( ) ;
+        // convert the row view indices to matrix id's
+        for (int k = 0 ; k < highlighted.length ; k++)
+        {
+            int i = highlighted [k] ;
+            int id = 1 + matrix_Table.convertRowIndexToModel (i) ;
+            highlighted [k] = id ;
+        }
+        return (highlighted) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // get ids of matrices selected for download
+    //--------------------------------------------------------------------------
+
+    private int [ ] get_download_ids ( )
+    {
+        // get the list of ids to download, in view order
+        nselected = 0 ;
+        for (int i = 0 ; i < Stats.length ; i++)
+        {
+            if ((Boolean) matrix_Table.getValueAt (i, 0))
+            {
+                nselected++ ;
+            }
+        }
+        int [ ] downloads = new int [nselected] ;
+        int k = 0 ;
+        for (int i = 0 ; i < Stats.length ; i++)
+        {
+            if ((Boolean) matrix_Table.getValueAt (i, 0))
+            {
+                int id = 1 + matrix_Table.convertRowIndexToModel (i) ;
+                downloads [k++] = id ;
+            }
+        }
+        return (downloads) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // set "Matrices selected:" label and download tool tip
+    //--------------------------------------------------------------------------
+
+    private void set_selected_label (boolean enabled)
+    {
+        if (gui_ready)
+        {
+            nselected_Label.setText
+                ("   Matrices selected: " + nselected + "   ") ;
+            download_Button.setEnabled (enabled) ;
+            if (enabled)
+            {
+                if (nselected == 0)
+                {
+                    download_Button.setToolTipText
+                        ("No matrices have been selected for download") ;
+                }
+                else if (nselected == 1)
+                {
+                    download_Button.setToolTipText
+                        ("Click to download the single selected matrix") ;
+                }
+                else
+                {
+                    download_Button.setToolTipText
+                        ("Click to download the " + nselected +
+                        " selected matrices") ;
+                }
+            }
+            else
+            {
+                download_Button.setToolTipText ("Download in progress.") ;
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // show matrix icon
+    //--------------------------------------------------------------------------
+
+    private void show_highlighted_icon ( )
+    {
+        // show icon of last entry in the highlighted list
+        int [ ] highlighted = get_highlighted_ids ( ) ;
+        int n = highlighted.length ;
+        if (n > 0)
+        {
+            int id = highlighted [n-1] ;
+            String Group = (String) Stats [id-1][1] ;
+            String Name  = (String) Stats [id-1][2] ;
+            update_icon (Group + "/" + Name) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // matrix table popup listener
+    //--------------------------------------------------------------------------
+
+    private class matrix_Table_PopupListener extends MouseAdapter
+    {
+        JPopupMenu pop ;
+
+        matrix_Table_PopupListener (JPopupMenu popupMenu)
+        {
+            pop = popupMenu ;
+        }
+
+        public void mousePressed (MouseEvent e)
+        {
+            maybeShowPopup (e) ;
+        }
+
+        public void mouseReleased (MouseEvent e)
+        {
+            maybeShowPopup (e) ;
+        }
+
+        private void maybeShowPopup (MouseEvent e)
+        {
+            if (e.isPopupTrigger ( ))
+            {
+                pop.show (e.getComponent ( ), e.getX ( ), e.getY ( )) ;
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // matrix table row listener
+    //--------------------------------------------------------------------------
+
+    private class matrix_Table_RowListener implements ListSelectionListener
+    {
+        public void valueChanged (ListSelectionEvent event)
+        {
+            if (event.getValueIsAdjusting ( ))
+            {
+                return ;
+            }
+            show_highlighted_icon ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // FindKinds:  determine the set of all Problem kinds
+    //--------------------------------------------------------------------------
+
+    private String [ ] FindKinds ( )
+    {
+        Set<String> KindSet = new TreeSet<String> ( ) ;
+        KindSet.add (all_kinds) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            KindSet.add (SimplifyKind ((String) Stats [id-1][12])) ;
+        }
+        return ((String [ ]) KindSet.toArray (new String [0])) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // FindGroups:  determine the set of all groups
+    //--------------------------------------------------------------------------
+
+    private String [ ] FindGroups ( )
+    {
+        Set<String> GroupSet = new TreeSet<String> ( ) ;
+        GroupSet.add (all_groups) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            GroupSet.add ((String) Stats [id-1][1]) ;
+        }
+        return ((String [ ]) GroupSet.toArray (new String [0])) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // SimplifyKind: remove extranneous terms from a string
+    //--------------------------------------------------------------------------
+
+    private String SimplifyKind (String kind)
+    {
+        // remove terms from a matrix-kind string
+        String result = null ;
+        String [ ] token = kind.split (" ") ;
+        for (int i = 0 ; i < token.length ; i++)
+        {
+            if (! (token [i].equals ("subsequent")
+                || token [i].equals ("sequence")
+                || token [i].equals ("problem")
+                || token [i].equals ("duplicate")))
+            {
+                if (result == null)
+                {
+                    result = token [i] ;
+                }
+                else
+                {
+                    result = result + " " + token [i] ;
+                }
+            }
+        }
+        return (result) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // CheckDir:  return a directory, creating it if it doesn't exist
+    //--------------------------------------------------------------------------
+
+    private File CheckDir (String directory_name)
+    {
+        File dir = new File (fix_name (directory_name)) ;
+        if (!dir.isDirectory ( ))
+        {
+            dir.mkdirs ( ) ;
+        }
+        return (dir) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // CheckExistence: determine which files exist in the local file system
+    //--------------------------------------------------------------------------
+
+    private void CheckExistence ( )
+    {
+        // check the existence all matrices in all 3 formats
+        fire_updates (false) ;
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            CheckExistence (id) ;
+        }
+        fire_updates (true) ;
+    }
+
+    private boolean [ ] CheckExistence (int id)
+    {
+        // check the existence of a single file (in all 3 formats)
+        boolean [ ] exists = new boolean [4] ;
+        boolean [ ] etable = new boolean [3] ;
+
+        String Group = (String) Stats [id-1][1] ;
+        String Name  = (String) Stats [id-1][2] ;
+
+        for (int j = 0 ; j < 3 ; j++)
+        {
+            etable [j] = (((String) get_table_value (id, j+1)).charAt (0) == 'x') ;
+        }
+
+        for (int j = 0 ; j < 4 ; j++)
+        {
+            exists [j] = false ;
+        }
+
+        // check for mat/HB/west0067.mat
+        File G = new File (mat, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".mat")).exists ( ))
+        {
+            exists [0] = true ;
+        }
+
+        // check for MM/HB/west0067.tar.gz
+        G = new File (MM, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".tar.gz")).exists ( ))
+        {
+            exists [1] = true ;
+        }
+
+        // check for MM/HB/west0067.tar.gz
+        G = new File (RB, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".tar.gz")).exists ( ))
+        {
+            exists [2] = true ;
+        }
+
+        // check for matrices/HB/west0067.png
+        G = new File (iconDir, Group) ;
+        if (G.isDirectory ( ) && (new File (G, Name + ".png")).exists ( ))
+        {
+            exists [3] = true ;
+        }
+
+        // update the matrix table (mat, MM, and RB columns)
+        for (int j = 0 ; j < 3 ; j++)
+        {
+            if (etable [j] != exists [j])
+            {
+                // only update the table if the existence status has changed
+                set_table_value (exists [j] ? "x" : "-", id, j+1) ;
+            }
+        }
+        return (exists) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get long from JTextField
+    //-------------------------------------------------------------------------
+
+    private long getLong (JTextField tfield, long Default)
+    {
+        String s = tfield.getText ( ) ;
+        long result = Default ;
+        if (s.length ( ) > 0)
+        {
+            try
+            {
+                result = Long.parseLong (s) ;
+            }
+            catch (Exception e)
+            {
+            }
+        }
+        return (result) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get double from JTextField
+    //-------------------------------------------------------------------------
+
+    private double getDouble (JTextField tfield, double Default)
+    {
+        String s = tfield.getText ( ) ;
+        double result = Default ;
+        if (s.length ( ) > 0)
+        {
+            try
+            {
+                result = Double.parseDouble (s) ;
+            }
+            catch (Exception e)
+            {
+            }
+        }
+        return (result) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // change to a wait cursor
+    //-------------------------------------------------------------------------
+
+    private void please_wait ( )
+    {
+        this.setCursor (Cursor.getPredefinedCursor (Cursor.WAIT_CURSOR)) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // change to a normal cursor
+    //-------------------------------------------------------------------------
+
+    private void the_long_wait_is_over ( )
+    {
+        this.setCursor (Cursor.getDefaultCursor ( )) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // make or clear a selection
+    //-------------------------------------------------------------------------
+
+    private void make_selection (boolean action)
+    {
+        // set selections according to controls
+        please_wait ( ) ;
+        fire_updates (false) ;
+
+        long minrow = getLong (minrow_Field, 0) ;
+        long maxrow = getLong (maxrow_Field, INF) ;
+
+        long mincol = getLong (mincol_Field, 0) ;
+        long maxcol = getLong (maxcol_Field, INF) ;
+
+        long minnz = getLong (minnz_Field, 0) ;
+        long maxnz = getLong (maxnz_Field, INF) ;
+
+        double minpsym = getDouble (minpsym_Field, 0) ;
+        double maxpsym = getDouble (maxpsym_Field, 1.0) ;
+
+        double minnsym = getDouble (minnsym_Field, 0) ;
+        double maxnsym = getDouble (maxnsym_Field, 1.0) ;
+
+        boolean shape_square = shape_square_Button.isSelected ( ) ;
+        boolean shape_rect   = shape_rect_Button.isSelected ( ) ;
+        boolean shape_either = shape_either_Button.isSelected ( ) ;
+
+        boolean posdef_yes    = posdef_yes_Button.isSelected ( ) ;
+        boolean posdef_no     = posdef_no_Button.isSelected ( ) ;
+        boolean posdef_either = posdef_either_Button.isSelected ( ) ;
+
+        boolean nd_yes    = nd_yes_Button.isSelected ( ) ;
+        boolean nd_no     = nd_no_Button.isSelected ( ) ;
+        boolean nd_either = nd_either_Button.isSelected ( ) ;
+
+        boolean real_yes    = real_yes_Button.isSelected ( ) ;
+        boolean real_no     = real_no_Button.isSelected ( ) ;
+        boolean real_either = real_either_Button.isSelected ( ) ;
+
+        // create HashSet for the selected groups
+        Set<String> Gset = null ;
+        Object [ ] Gsel = Group_List.getSelectedValues ( ) ;
+        int ngroups = Gsel.length ;
+        if (ngroups > 0)
+        {
+            for (int i = 0 ; i < ngroups ; i++)
+            {
+                if (((String) Gsel [i]).equals (all_groups)) ngroups = 0 ;
+            }
+            Gset = new HashSet<String> ( ) ;
+            for (int i = 0 ; i < ngroups ; i++)
+            {
+                Gset.add ((String) Gsel [i]) ;
+            }
+        }
+
+        // create HashSet for the selected kinds
+        Set<String> Kset = null ;
+        Object [ ] Ksel = Kind_List.getSelectedValues ( ) ;
+        int nkinds = Ksel.length ;
+        if (nkinds > 0)
+        {
+            for (int i = 0 ; i < nkinds ; i++)
+            {
+                if (((String) Ksel [i]).equals (all_kinds)) nkinds = 0 ;
+            }
+            Kset = new HashSet<String> ( ) ;
+            for (int i = 0 ; i < nkinds ; i++)
+            {
+                Kset.add ((String) Ksel [i]) ;
+            }
+        }
+
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+
+            // look at the matrix properties to see if it fits the selection
+            long nrows = (Long) Stats [id-1][3] ;
+            long ncols = (Long) Stats [id-1][4] ;
+            long nnz   = (Long) Stats [id-1][5] ;
+
+            int isReal   = (Integer) Stats [id-1][6] ;
+            int isBinary = (Integer) Stats [id-1][7] ;
+            int isND     = (Integer) Stats [id-1][8] ;
+            int posdef   = (Integer) Stats [id-1][9] ;
+
+            double psym = (Double) Stats [id-1][10] ;
+            double nsym = (Double) Stats [id-1][11] ;
+
+            boolean choose_group = true ;
+            if (ngroups > 0)
+            {
+                String group = (String) Stats [id-1][1] ;
+                choose_group = Gset.contains (group) ;
+            }
+
+            boolean choose_kind = true ;
+            if (nkinds > 0)
+            {
+                String kind = SimplifyKind ((String) Stats [id-1][12]) ;
+                choose_kind = Kset.contains (kind) ;
+            }
+
+            if ((minrow <= nrows && nrows <= maxrow) &&
+                (mincol <= ncols && ncols <= maxcol) &&
+                (minnz <= nnz && nnz <= maxnz) &&
+                (minpsym <= psym && psym <= maxpsym) &&
+                (minnsym <= nsym && nsym <= maxnsym) &&
+                (posdef_either ||
+                    (posdef_yes && posdef == 1) ||
+                    (posdef_no && posdef == 0)) &&
+                (nd_either ||
+                    (nd_yes && isND == 1) ||
+                    (nd_no && isND == 0)) &&
+                (real_either ||
+                    (real_yes && isReal == 1) ||
+                    (real_no && isReal == 0)) &&
+                (shape_either ||
+                    (shape_square && nrows == ncols) ||
+                    (shape_rect && nrows != ncols)) &&
+                choose_group && choose_kind)
+            {
+                // change the selection box for this matrix id
+                set_table_value (action, id, 0) ;
+            }
+        }
+        fire_updates (true) ;
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // reset button
+    //-------------------------------------------------------------------------
+
+    private void reset_Button_action (ActionEvent e)
+    {
+        // reset the selection criteria to the defaults
+        minrow_Field.setText ("") ;
+        maxrow_Field.setText ("") ;
+
+        mincol_Field.setText ("") ;
+        maxcol_Field.setText ("") ;
+
+        minnz_Field.setText ("") ;
+        maxnz_Field.setText ("") ;
+
+        minpsym_Field.setText ("0.0") ;
+        maxpsym_Field.setText ("1.0") ;
+
+        minnsym_Field.setText ("0.0") ;
+        maxnsym_Field.setText ("1.0") ;
+
+        shape_either_Button.setSelected (true) ;
+        posdef_either_Button.setSelected (true) ;
+        nd_either_Button.setSelected (true) ;
+        real_either_Button.setSelected (true) ;
+
+        Group_List.clearSelection ( ) ;
+        Kind_List.clearSelection ( ) ;
+
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // clear button
+    //-------------------------------------------------------------------------
+
+    private void clear_Button_action (ActionEvent e)
+    {
+        // set selections according to controls
+        please_wait ( ) ;
+        fire_updates (false) ;
+
+        for (int id = 1 ; id <= Stats.length ; id++)
+        {
+            // clear the selection box for this matrix id
+            set_table_value (false, id, 0) ;
+        }
+        fire_updates (true) ;
+        progress1_Bar.setValue (0) ;
+        progress2_Bar.setValue (0) ;
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // select popup menu item
+    //-------------------------------------------------------------------------
+
+    private void popup_action (ActionEvent e, boolean action)
+    {
+        // select or deselect the highlight matrices
+        please_wait ( ) ;
+        int [ ] highlighted = get_highlighted_ids ( ) ;
+        int n = highlighted.length ;
+        for (int k = 0 ; k < n ; k++)
+        {
+            set_table_value (action, highlighted [k], 0) ;
+        }
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // export popup menu item
+    //-------------------------------------------------------------------------
+
+    private void export_list_action (ActionEvent e, boolean csv)
+    {
+        // export the list in the order of the current view
+        if (chooser.showSaveDialog (UFgui.this) == JFileChooser.APPROVE_OPTION)
+        {
+            please_wait ( ) ;
+            print_out = null ;
+            try
+            {
+                print_out = new PrintWriter (chooser.getSelectedFile ( )) ;
+                int [ ] ids = get_download_ids ( ) ;
+                int n = ids.length ;
+
+                // print the header
+                if (csv)
+                {
+                    print_out.println ("mat, MM, RB, id, Group, Name, rows, " +
+                        "cols, nonzeros, real, binary, 2D/3D, posdef, psym, " +
+                        "nsym, kind") ;
+                }
+                else
+                {
+                    print_out.println ("%% Matrices selected from UFgui:") ;
+                    print_out.println ("% Example usage:") ;
+                    print_out.println ("% for k = 1:length(ids)") ;
+                    print_out.println ("%    Problem = UFget (ids (k))") ;
+                    print_out.println ("% end") ;
+                    print_out.println ("ids = [")  ;
+                }
+
+                for (int k = 0 ; k < n ; k++)
+                {
+                    // get the matrix id and stats
+                    int id = ids [k] ;
+                    boolean [ ] exists = CheckExistence (id) ;
+                    String Group       = (String)  Stats [id-1][1] ;
+                    String Name        = (String)  Stats [id-1][2] ;
+                    long nrows         = (Long)    Stats [id-1][3] ;
+                    long ncols         = (Long)    Stats [id-1][4] ;
+                    long nnz           = (Long)    Stats [id-1][5] ;
+                    int isReal         = (Integer) Stats [id-1][6] ;
+                    int isBinary       = (Integer) Stats [id-1][7] ;
+                    int isND           = (Integer) Stats [id-1][8] ;
+                    int posdef         = (Integer) Stats [id-1][9] ;
+                    double psym        = (Double)  Stats [id-1][10] ;
+                    double nsym        = (Double)  Stats [id-1][11] ;
+                    String kind        = (String)  Stats [id-1][12] ;
+
+                    if (csv)
+                    {
+                        // print the matrix stats in a single CSV line of text
+                        print_out.println (
+                            exists [0] + ", " + exists [1] + ", " +
+                            exists [2] + ", " + id + ", " + Group + ", " +
+                            Name + ", " + nrows + ", " + ncols + ", " +
+                            nnz + ", " + isReal + ", " + isBinary + ", " +
+                            isND + ", " + posdef + ", " + psym + ", " +
+                            nsym + ", " + kind) ;
+                    }
+                    else
+                    {
+                        // print the matrix id, with a comment for the name
+                        print_out.println (id + " % " + Group + "/" + Name) ;
+                    }
+                }
+                if (!csv)
+                {
+                    print_out.println ("] ;")  ;
+                }
+            }
+            catch (Exception err)
+            {
+                // display warning dialog
+                JOptionPane.showMessageDialog (this, "Export failed.",
+                    "Warning", JOptionPane.WARNING_MESSAGE) ;
+            }
+            finally
+            {
+                close_printer_stream (print_out) ;
+            }
+            the_long_wait_is_over ( ) ;
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // help button
+    //-------------------------------------------------------------------------
+
+    private void help_Button_action (ActionEvent e)
+    {
+        // create the Help window
+        please_wait ( ) ;
+        JFrame help_Frame = new JFrame ("Help: UF Sparse Matrix Collection") ;
+
+        // open the HTML help file and put it in an editor pane
+        JEditorPane editorPane = new JEditorPane ( ) ;
+        editorPane.setEditable (false) ;
+        URL helpURL = UFgui.class.getResource ("UFhelp.html") ;
+        if (helpURL != null)
+        {
+            try
+            {
+                editorPane.setPage (helpURL) ;
+            }
+            catch (IOException error)
+            {
+                // display warning dialog
+                JOptionPane.showMessageDialog (this,
+                    "Sorry, Help document UFhelp.html not found.",
+                    "Warning", JOptionPane.WARNING_MESSAGE) ;
+            }
+        }
+
+        // Put the editor pane in a scroll pane.
+        JScrollPane editorScrollPane = new JScrollPane (editorPane) ;
+
+        // Add the scroll pane to the Help window
+        help_Frame.getContentPane ( ).add (editorScrollPane) ;
+        help_Frame.setSize (800,600) ;
+        help_Frame.setVisible (true) ;
+
+        the_long_wait_is_over ( ) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // get the icon filename
+    //-------------------------------------------------------------------------
+
+    private String icon_file (String fullname)
+    {
+        return ("matrices/" + fullname + ".png") ;
+    }
+
+    //-------------------------------------------------------------------------
+    // update the icon
+    //-------------------------------------------------------------------------
+
+    private void update_icon (String fullname)
+    {
+        // fullname is of the form Group/Name (HB/west0479, for example)
+        icon_Label.setText (fullname) ;
+        ImageIcon icon = new ImageIcon (fix_name (icon_file (fullname))) ;
+        if (icon.getIconWidth ( ) < 0)
+        {
+            // icon image failed to load; get the image from the web
+            icon = new ImageIcon (get_url (UFsite +"/"+ icon_file (fullname))) ;
+        }
+        icon_Label.setIcon (icon) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // cancel button
+    //--------------------------------------------------------------------------
+
+    private void cancel_Button_action (ActionEvent e)
+    {
+        if (downloading && !cancel)
+        {
+            cancel = true ;
+            cancel_Button.setEnabled (false) ;
+            cancel_Button.setToolTipText ("canceling...") ;
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // get all icons
+    //-------------------------------------------------------------------------
+
+    private void get_all_icons ( )
+    {
+        // get all icons
+        start_download_thread (0) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // update button
+    //-------------------------------------------------------------------------
+
+//  private void update_Button_action (ActionEvent e)
+//  {
+//      // get the latest UFstats file
+//      start_download_thread (1) ;
+//  }
+
+    //-------------------------------------------------------------------------
+    // download button
+    //-------------------------------------------------------------------------
+
+    private void download_Button_action (ActionEvent e)
+    {
+        // get the selected matrices
+        start_download_thread (2) ;
+    }
+
+    //-------------------------------------------------------------------------
+    // enable/disable update button
+    //-------------------------------------------------------------------------
+
+/*
+    private void update_Button_status (boolean enable)
+    {
+        if (new_matrices)
+        {
+            update_Button.setEnabled (false) ;
+            update_Button.setToolTipText
+                ("New matrices available (restart required).") ;
+        }
+        else if (enable)
+        {
+            update_Button.setEnabled (true) ;
+            update_Button.setToolTipText ("Click to update matrix table.") ;
+        }
+        else
+        {
+            update_Button.setEnabled (false) ;
+            update_Button.setToolTipText ("Update in progress.") ;
+        }
+    }
+*/
+
+    //-------------------------------------------------------------------------
+    // start the downloader thread
+    //-------------------------------------------------------------------------
+
+    private void start_download_thread (int what)
+    {
+        if (!downloading)
+        {
+            // only allow one active download at a time
+            downloading = true ;
+            cancel = false ;
+
+            if (gui_ready)
+            {
+                cancel_Button.setEnabled (true) ;
+                cancel_Button.setToolTipText
+                    ("Click to cancel the current download.") ;
+                // update_Button_status (false) ;
+            }
+
+            if (what == 0)
+            {
+                // get all the icons
+                // get_UFstats = false ;
+                get_icons = true ;
+                download_ids = null ;
+            }
+//          else if (what == 1)
+//          {
+//              // download the UFstats file and then get all the new icons
+//              get_UFstats = true ;
+//              get_icons = true ;
+//              download_ids = null ;
+//          }
+            else
+            {
+                // download one or more matrices
+                // get_UFstats = false ;
+                get_icons = false ;
+                download_ids = get_download_ids ( ) ;
+            }
+            set_selected_label (false) ;
+            // start the downloader thread
+            UFdownload tt = new UFdownload ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // downloader thread
+    //--------------------------------------------------------------------------
+
+    private class UFdownload implements Runnable
+    {
+
+        // constructor starts the downloader thread
+        public UFdownload ( )
+        {
+            Thread thread = new Thread (this) ;
+            thread.start ( ) ;
+        }
+
+        // thread.start calls the run method
+        public void run ( )
+        {
+
+//          if (get_UFstats)
+//          {
+//              // get the UFstats file
+//              Object [ ][ ] S2 = download_matrix_stats ( ) ;
+//              if (S2 != null && S2.length > Stats.length)
+//              {
+//                  // new matrices available
+//                  new_matrices = true ;
+//              }
+//          }
+
+            if (get_icons)
+            {
+                // get all missing icons
+                progress1_Bar.setValue (1) ;
+                progress1_Bar.setMaximum (Stats.length) ;
+                icon_Label.setBorder (BorderFactory.createTitledBorder
+                    ("checking for new matrix icons")) ;
+                for (int id = 1 ; !cancel && id <= Stats.length ; id++)
+                {
+                    boolean [ ] exists = CheckExistence (id) ;
+                    if (!exists [3])
+                    {
+                        icon_Label.setBorder (BorderFactory.createTitledBorder
+                            ("downloading new matrix icons")) ;
+                        String Group = (String) Stats [id-1][1] ;
+                        String Name  = (String) Stats [id-1][2] ;
+                        String fullname = Group + "/" + Name ;
+                        CheckDir ("matrices/" + Group) ;
+                        download_file (icon_file (fullname)) ;
+                        update_icon (fullname) ;
+                    }
+                    progress1_Bar.setValue (id+2) ;
+                }
+                progress1_Bar.setValue (Stats.length) ;
+                icon_Label.setBorder (BorderFactory.createTitledBorder
+                    ("matrix icon")) ;
+            }
+
+            if (download_ids != null && download_ids.length > 0)
+            {
+                // download all selected matrices in the requested formats
+
+                // determine which formats to download
+                int barmax = download_ids.length + 2 ;
+
+                boolean format_mat = format_mat_Button.isSelected ( ) ;
+                boolean format_mm  = format_mm_Button.isSelected ( ) ;
+                boolean format_rb  = format_rb_Button.isSelected ( ) ;
+
+                // start the overall progress bar
+                progress1_Bar.setValue (1) ;
+                progress1_Bar.setMaximum (barmax) ;
+
+                // download all the files
+                for (int k = 0 ; !cancel && k < download_ids.length ; k++)
+                {
+                    int id = download_ids [k] ;
+
+                    // get matrxx
+                    String Group = (String) Stats [id-1][1] ;
+                    String Name  = (String) Stats [id-1][2] ;
+                    String fullname = Group + "/" + Name ;
+
+                    // recheck to see if the matrix exists in the 4 formats
+                    boolean [ ] exists = CheckExistence (id) ;
+
+                    if (!exists [3])
+                    {
+                        // always download the matrix icon if it doesn't exist
+                        CheckDir ("matrices/" + Group) ;
+                        download_file (icon_file (fullname)) ;
+                        update_icon (fullname) ;
+                    }
+
+                    if (!exists [0] && format_mat)
+                    {
+                        // download the matrix in MATLAB format
+                        update_icon (fullname) ;
+                        CheckDir ("mat/" + Group) ;
+                        download_file ("mat/" + fullname + ".mat") ;
+                    }
+
+                    if (!exists [1] && format_mm)
+                    {
+                        // download the matrix in Matrix Market format
+                        update_icon (fullname) ;
+                        CheckDir ("MM/" + Group) ;
+                        download_file ("MM/" + fullname + ".tar.gz") ;
+                    }
+
+                    if (!exists [2] && format_rb)
+                    {
+                        // download the matrix in Rutherford/Boeing format
+                        update_icon (fullname) ;
+                        CheckDir ("RB/" + Group) ;
+                        download_file ("RB/" + fullname + ".tar.gz") ;
+                    }
+
+                    progress1_Bar.setValue (k+2) ;
+                }
+
+                // update the mat/MM/RB check boxes
+                for (int k = 0 ; k < download_ids.length ; k++)
+                {
+                    int id = download_ids [k] ;
+                    CheckExistence (id) ;
+                }
+
+                // finish the overall progress bar
+                progress1_Bar.setValue (barmax) ;
+            }
+
+            // update_Button_status (true) ;
+            cancel_Button.setEnabled (false) ;
+            cancel_Button.setToolTipText ("No downloads in progress.") ;
+
+            set_selected_label (true) ;
+            cancel = false ;
+            downloading = false ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // get a URL
+    //--------------------------------------------------------------------------
+
+    private URL get_url (String urlstring)
+    {
+        try
+        {
+            return (new URL (urlstring)) ;
+        }
+        catch (MalformedURLException e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this, "Invalid URL: "
+                + urlstring, "Warning", JOptionPane.WARNING_MESSAGE) ;
+            return (null) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // download a file
+    //--------------------------------------------------------------------------
+
+    private void download_file (String filename)
+    {
+        boolean ok = true ;
+        if (cancel) return ;
+        String urlstring = UFsite + "/" + filename ;
+        if (debug) System.out.println ("downloading: " + urlstring) ;
+
+        // create the URL
+        URL url = get_url (urlstring) ;
+        if (url == null) return ;
+
+        // download the file
+        url_in = null ;
+        ftemp_out = null ;
+        ftemp_name = filename + "_IN_PROGRESS" ;
+        int barmax = 1 ;
+
+        try
+        {
+            // determine the file size (fails for files > 2GB)
+            int len = url.openConnection ( ).getContentLength ( ) ;
+
+            // start the progress bar
+            if (gui_ready)
+            {
+                if (len < 0)
+                {
+                    progress2_Bar.setIndeterminate (true) ;
+                    progress_size_Label.setText ("") ;
+                }
+                else
+                {
+                    progress2_Bar.setValue (0) ;
+                    // display the filesize to the right of the progress bar
+                    if (len < M)
+                    {
+                        barmax = 1 + len / K ;
+                        progress_size_Label.setText (((len+K/2) / K) + " KB") ;
+                    }
+                    else
+                    {
+                        barmax = 1 + len / M ;
+                        progress_size_Label.setText (((len+M/2) / M) + " MB") ;
+                    }
+                }
+                progress2_Bar.setMaximum (barmax) ;
+            }
+
+            // open the source and destination files
+            url_in = new BufferedInputStream (url.openStream ( )) ;
+            ftemp_out = new BufferedOutputStream (new FileOutputStream
+                (fix_name (ftemp_name)), BUFSIZE) ;
+
+            // transfer the data
+            byte buffer [ ] = new byte [BUFSIZE] ;
+            long bytes_read = 0 ;
+            int count = 0 ;
+            while (!cancel && (count = url_in.read (buffer, 0, BUFSIZE)) >= 0)
+            {
+                if (ftemp_out != null) ftemp_out.write (buffer, 0, count) ;
+                bytes_read += count ;
+                if (gui_ready && len > 0)
+                {
+                    if (len < M)
+                    {
+                        progress2_Bar.setValue ((int) (bytes_read / K)) ;
+                    }
+                    else
+                    {
+                        progress2_Bar.setValue ((int) (bytes_read / M)) ;
+                    }
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            // display warning dialog
+            JOptionPane.showMessageDialog (this, "Download failed: "
+                + urlstring, "Warning", JOptionPane.WARNING_MESSAGE) ;
+            ok = false ;
+        }
+
+        if (gui_ready)
+        {
+            progress2_Bar.setIndeterminate (false) ;
+            progress2_Bar.setValue (barmax) ;
+            progress_size_Label.setText ("") ;
+        }
+
+        // wrap-up
+        if (ok && !cancel)
+        {
+            // success:  rename the temp file to the permanent filename
+            cleanup (false) ;
+            File fsrc = new File (fix_name (ftemp_name)) ;
+            File fdst = new File (fix_name (filename)) ;
+            fsrc.renameTo (fdst) ;
+        }
+        else
+        {
+            // cancelled, or something failed:  delete the files if they exist
+            cleanup (true) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // download the latest matrix stats
+    //--------------------------------------------------------------------------
+
+    private Object [ ][ ] download_matrix_stats ( )
+    {
+        download_file (UFindex) ;       // download mat/UF_Index.mat for UFget.m
+        download_file (UFstats) ;       // download matrices/UFstats.csv
+        return (load_UFstats ( )) ;     // load the UFstats.csv file
+    }
+
+    //--------------------------------------------------------------------------
+    // prepend the UF archive directory and replace '/' with the file separator
+    //--------------------------------------------------------------------------
+
+    private static String fix_name (String s)
+    {
+        // file separator is '/' on Unix/Solaris/Linux/Mac, and '\' on Windows
+        String r = UFarchive ;
+        if (s != null)
+        {
+            r = r + s ;
+        }
+        return (r.replace ('/', File.separatorChar)) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // close an output stream
+    //--------------------------------------------------------------------------
+
+    private static void close_output (OutputStream out)
+    {
+        try
+        {
+            if (out != null) out.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // close an input stream
+    //--------------------------------------------------------------------------
+
+    private static void close_reader (Reader in)
+    {
+        try
+        {
+            if (in != null) in.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // close a printer stream
+    //--------------------------------------------------------------------------
+
+    private static void close_printer_stream (PrintWriter out)
+    {
+        if (out != null) out.close ( ) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // delete a file
+    //--------------------------------------------------------------------------
+
+    private static void delete_file (String filename)
+    {
+        if (filename != null)
+        {
+            File ff = new File (fix_name (filename)) ;
+            if (ff.exists ( )) ff.delete ( ) ;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // cleanup
+    //--------------------------------------------------------------------------
+
+    private static void cleanup (boolean delete)
+    {
+        // close input streams, if any
+        try
+        {
+            if (url_in != null) url_in.close ( ) ;
+        }
+        catch (IOException e)
+        {
+        }
+        url_in = null ;
+
+        // close temporary file
+        close_output (ftemp_out) ;
+        ftemp_out = null ; 
+
+        if (delete)
+        {
+            // delete temporary file
+            delete_file (ftemp_name) ;
+            ftemp_name = null ;
+        }
+
+        // close the printer stream, if any
+        close_printer_stream (print_out) ;
+        
+        // close the reader stream, if any
+        close_reader (in_reader) ;
+    }
+
+    //--------------------------------------------------------------------------
+    // main method
+    //--------------------------------------------------------------------------
+
+    public static void main (String args [ ])
+    {
+        // register a shutdown hook
+        Runtime.getRuntime ( ).addShutdownHook
+        (
+            new Thread ( )
+            {
+                public void run ( )
+                {
+                    // delete any temporary files when the UFgui shuts down,
+                    // and close any files
+                    cleanup (true) ;
+                }
+            }
+        ) ;
+
+        // start the GUI in its own thread
+        EventQueue.invokeLater
+        (
+            new Runnable ( )
+            {
+                public void run ( )
+                {
+                    new UFgui ( ).setVisible (true) ;
+                }
+            }
+        ) ;
+    }
+}
diff --git a/UFget/UFhelp.html b/UFget/UFhelp.html
new file mode 100644
index 0000000..55618f1
--- /dev/null
+++ b/UFget/UFhelp.html
@@ -0,0 +1,545 @@
+<STYLE TYPE="text/css">
+<!--
+BODY
+   {
+      font-family:sans-serif;
+      font-size:16;
+    }
+-->
+</STYLE>
+
+<html>
+<body>
+<font family="sans-serif">
+<h1>The University of Florida Sparse Matrix Collection</h1>
+
+Tim Davis, http://www.suitesparse.com
+
+<h2>1. Overview</h2>
+
+UFgui is a Java GUI interface to the University of Florida Sparse Matrix
+Collection at http://www.cise.ufl.edu/research/sparse/matrices.  It provides an
+easy way to select matrices from the collection based on their matrix
+properties.  As of October 2010, there were 2328 matrices ranging in size
+from 1-by-2 (with a single nonzero entry) to a square matrix with nearly 28
+million rows and 760 million entries.  The total size of the collection in all
+three formats exceeds 47 GB, and is constantly growing in size.
+
+<h2>2. Quick Start</h2>
+
+First, download the UFget archive (tar.gz or zip file), and uncompress it.
+Open the UFget folder.
+
+<p>
+If your web browswer requires an HTTP proxy, or if you wish to change
+the download location, first see the <b>Customization</b> section below,
+to configure UFgui before you run it.
+
+<p>
+To run UFgui, double-click its icon or type the following command in your
+command window / terminal:
+
+<pre>
+        java -jar UFgui.jar
+</pre>
+
+If the above command fails, then you need to install Java.
+See <a href=http://www.java.com/en/download/manual.jsp>
+http://www.java.com/en/download/manual.jsp</a> for details.
+
+<p>
+You can skip reading this document by simply navigating the GUI itself.  Most
+of the buttons, check boxes, lists, and table columns have a short "tool tip"
+which is visible if you hover your mouse over the item.
+
+<p> When the UFgui starts, it checks for any missing matrix icons and
+downloads a new table if needed.  This might take a few minutes, so
+just sit back and enjoy the slideshow.  It will only happen occassionaly.
+
+<h2>3. A Sparse Matrix Problem</h2>
+
+The UF Sparse Matrix Collection is a simplified name.  It is actually a
+collection
+of sparse matrix <i>problems</i>, not just sparse matrices.  Each problem
+includes one primary sparse matrix and meta-data about that matrix.  Some
+problems include additional matrices and vectors (sparse or dense) such as
+right-hand-sides to a linear system <i>Ax=b</i>, or cost constraints for a
+linear programming problem.  As a short-hand, a "problem" in the collection is
+often called simply a "matrix", refering to the primary sparse matrix in the
+problem (<i>A</i>, below).
+
+<p>
+The following data is always present in any sparse matrix problem
+(not all fields are shown in the table in the UFgui program, however):
+
+    <ul>
+    <li> <b>name</b>: the full name of the problem, in the form
+        <i>Group/Name</i>, where <i>Group</i> indicates the source of the
+        problem (a person, organization, or other collection), and <i>Name</i>
+        is the name of the problem within that <i>Group</i>.  As of September
+        2009, there were 153 matrix Groups.
+
+    <li> <b>title</b>: a short descriptive title.
+
+    <li> <b>A</b>: the primary sparse matrix itself.
+        It is the properties of this matrix that determine
+        the selection criteria.
+
+    <li> <b>id</b>: a unique serial number ranging from 1 to the number of
+        matrices in the collection.  As new matrices are added to the
+        collection they are given higher id's, so new matrices are always
+        at the end of the table when sorted by id.
+
+    <li> <b>date</b>: the date the matrix was created, or the date it was
+        added to the UF Sparse Matrix Collection if the creation date is not
+        known.
+
+    <li> <b>author</b>: the person or persons who created the matrix.
+
+    <li> <b>ed</b>: the person or persons to acquired the matrix from the
+        author and placed it in a widely accessible collection (this
+        one or others such as the Rutherford/Boeing collection or
+        the Matrix Market collection).
+
+    <li> <b>kind</b>: the domain of the problem, such as "circuit simulation",
+        "chemical process simulation", "finite-element problem", and so on.
+        As of September 2009, there were 36 different matrix kinds.
+
+    </ul>
+
+The following data is present in some problems but not all:
+
+    <ul>
+    <li> <b>Zeros</b>: a binary matrix holding the pattern of 
+        entries explicitly provided by the matrix author which are equal to
+        zero.  These may represent entries that may become nonzero later on in
+        a simulation, but they are equal to zero in this instance of the
+        matrix.  Since they were provided by the matrix author(s), they are
+        preserved in this collection.  In the MATLAB format, this matrix is
+        held as a different sparse matrix, since MATLAB removes explicit zeros
+        from its sparse matrices.  In the Matrix Market and Rutherford/Boeing
+        collection, these entries are included in the primary sparse matrix
+        itself, as explicitly zero entries.
+
+    <li> <b>b</b>: the right-hand-side to a linear system or least-squares
+        problem.  This can be a vector or matrix, real or complex, and
+        sparse or dense.
+
+    <li> <b>x</b>: the solution to a linear system or least-squares problem.
+
+    <li> <b>notes</b>: text, with a discussion about the problem, in no
+        particular format.
+
+    <li> <b>aux</b>: Any number of matrices, vectors, or text.  For example, an
+        optimization problem may include a cost vector <i>c</i>, and vectors
+        that specify upper/lower bounds on the solution.  Details of how to
+        interpret this auxiliary data are normally given in the <i>notes</i>
+        field.  In the MATLAB format this is a struct containing each of the
+        items.  In the Matrix Market and Rutherford/Boeing formats, this data
+        resides alongsize the primary matrix in a single compressed folder.
+
+    </ul>
+
+<h2>4. Matrix Formats</h2>
+
+Each matrix in the collection appears in three different formats.  The data
+within each format is identical, down to the very last bit (if you find a
+discrepency between the same problem in different formats, please let me know).
+
+<ul>
+<li> <b>MATLAB™ *.mat file</b>.  This can be loaded into MATLAB directly,
+    or it can be accessed via the UFget.m MATLAB interface to the collection.
+    Type <i>help UFget</i> in MATLAB for more details.  The name of the MATLAB
+    file is of the form mat/Group/Name.mat (such as mat/HB/west0067.mat for the
+    west0067 matrix from the HB, or Harwell/Boeing, group).
+
+<li> <b>Matrix Market *.mtx file</b> and associated files.  Short meta-data
+    (name, title, id, date, author, ed, kind, and notes) is given as structured
+    comments in the primary *.mtx file.  This file and any associated files (b,
+    x, and any aux matrices) are in a single folder which is then archived into
+    a *.tar.gz file.  Windows users will need a 3rd-party program for handling
+    *.tar.gz files.  For example, the Matrix Market format for the HB/west0067
+    matrix is held in the MM/HB/west0067.tar.gz file. See
+    http://math.nist.gov/MatrixMarket/index.html for more information about the
+    Matrix Market format.
+
+<li> <b>Rutherford/Boeing *.rb file</b> and associated files.  Short meta-data
+    (name, title, id, date, author, ed, kind, and notes) is given as structured
+    comments in a separate text file.  The matrix file, the informational text
+    file, and any associated files (b, x, and any aux matrices) are in a single
+    folder which is then archived into a *.tar.gz file.  For example, the
+    Rutherford/Boeing format for the HB/west0067 file is held in the
+    RB/HB/west0067.tar.gz file.  See http://www.cse.scitech.ac.uk/nag/hb/ for
+    more information about the Rutherford/Boeing format.
+
+</ul>
+
+<h2>5. Selecting Matrices</h2>
+
+In the UFgui you are presented with four primary panels.
+
+<p> <b>Selection Criteria panel</b>:
+
+This is used for rule-based selections of matrix subsets.  A matrix must
+satisfy all properties in this panel to be selected.  With the default settings
+(available when the UFgui starts or after clicking <i>Reset criteria</i>) all
+matrices fit the criteria.  However, no matrix is selected until you press the
+<i>Select</i> button or select them individually in the table by clicking the
+checkbox in the <i>select</i> column.
+
+<p> The selection criteria are based on the matrices properties described in
+the matrix table (described below).  To select matrices from one or more groups
+and/or "kinds," click on the choices in the "group" and/or "kind" lists.
+Shift-click the list to select a range of groups or kinds, and control-click
+the list to add a single item to your highlighted choices.  To clear your
+choices, click the <i>Reset criteria</i> button, described below.
+
+<p> When you select/deselect matrices, the boxes to the left of each matrix in
+the Table of Matrices get checked/unchecked.  You still see all the matrices
+in the list, because you can then modify your selection by checking/unchecking
+matrices one at a time in the Table itself.
+
+<p>
+At the bottom of the Selection Criteria panel is a row of buttons:
+
+    <ul>
+    <li> <b>Select</b>: Click this to add matrices to your selection
+        that fit the criteria.  No matrix is removed from any prior selection.
+        For example, to select all square matrices with fewer than 1000 rows,
+        plus all complex matrices, do the following.  First enter 1000 in the
+        top-right text field, click the <i>square</i> radio button, and then
+        click <i>Select</i>.  Then click <i>Reset criteria</i>.  Next, click
+        <i>complex</i> and then <i>Select</i>.
+
+    <li> <b>Deselect</b>: Click this to remove matrices from your selection
+        that fit the criteria.  In general, if you want matrices that meet some
+        criteria (a) but not (b), then set the controls for (a) and click
+        <i>Select</i>.  Next, click <i>Reset criteria</i>, set the criteria
+        (b), and click <i>Deselect</i>.  For example, to select all square
+        matrices with fewer than 1000 rows that are not complex, you could just
+        do this with a single click of <i>Select</i> (click <i>square</i>,
+        <i>real</i>, and enter 1000 in the top-right text field, then click
+        <i>Select</i>).  Alternatively, you could click <i>square</i> and enter
+        1000 as the upper bound on the number of rows and click <i>Select</i>
+        then <i>Reset criteria</i>, select <i>complex</i>, and click
+        <i>Deselect</i>.
+
+    <li> <b>Reset criteria</b>:  This has no effect on your selection.  It
+        simply resets the criteria to the default (all matrices).  Thus, to
+        select all matrices, click <i>Reset criteria</i> and then
+        <i>Select</i>.  To deselect all matrices, click <i>Reset criteria</i>
+        and then <i>Deselect</i>.
+
+    <li> <b>Clear selections</b>:  This has no effect on your selection
+        criteria.  It simply clears all selections, deselecting all matrices by
+        unchecking the <i>select</i> column in the table.  This is useful if
+        you have a complex selection criteria and don't want to lose it by
+        clicking <i>Reset criteria</i>, but you wish to clear all your
+        selections anyway.
+
+    <li> <b>Help</b>: this button brings up the text you're reading.
+
+    </ul>
+
+<p> <b>Matrix icon panel</b>:
+
+To the right of the Selection Criteria panel is an icon of the most recent
+matrix highlighted, downloaded, or in the process of being downloaded.
+
+<p> <b>Table of matrices</b>:
+
+This is a list of all the matrices in the collection.  You can click on any
+column header to sort the table by that column.  Clicking a row (to the right
+of the select column) will highlight that row.  You can highlight a range of
+rows by shift-clicking another row.  Control-click will add individual rows.
+Next, right-clicking in the table will pull up a pop-up menu allowing you to
+select or deselect the highlighted matrices and to export your selection to a
+file.  You can export a list of your selected matrices to a comma-separarted
+file (*.csv) or to a MATLAB (*.m) file.  When you highlight a matrix, its icon
+is displayed.
+
+<p> The table contains the following columns (you can also hover your mouse
+over each column header for a short description):
+
+        <ul>
+        <li><b>select</b>: whether or not you have selected the matrix. 
+            You can click on the check boxes in this column to modify your
+            selection on a matrix-by-matrix basis.  This is the only column in
+            the table that you can edit.
+
+        <li><b>mat</b>: this box is checked if you have downloaded the matrix
+            in its MATLAB format.  The location of the HB/west0067.mat file
+            will be UFget/mat/HB/west0067.mat, for example.
+
+        <li><b>MM</b>: this is checked if you have already downloaded
+            the matrix in its Matrix Market format.
+
+        <li><b>RB</b>: this is checked if you have already downloaded
+            the matrix in its Rutherford/Boeing format.
+
+        <li><b>id</b>: the matrix id, in the range 1 to the number of
+            matrices in the collection.  When the UFgui starts,
+            the table is sorted in this order.
+
+        <li><b>Group</b>: the group the matrix belongs to.
+
+        <li><b>Name</b>: the (short) name of the matrix.  The full name of
+            a matrix is Group/Name.
+
+        <li><b># rows</b>: the number of rows of the matrix.
+
+        <li><b># cols</b>: the number of columns of the matrix.
+
+        <li><b># nonzeros</b>: the number of nonzeros in the matrix.
+
+        <li><b>real</b>: this box is checked if the matrix is real.
+            It is complex otherwise.
+            Note that <i>real</i> matrices include any matrix that is not
+            complex.  In particular, integer and binary matrices are
+            considered <i>real</i> in this search criterion.
+
+        <li><b>binary</b>: this box is checked if the matrix is binary.
+            It is non-binary otherwise (there are no binary complex matrices,
+            so any matrix that is binary is also marked as real).
+
+        <li><b>2D/3D</b>: this box is checked if the matrix comes
+            from a discretization of a 2D or 3D geometry.
+
+        <li> <b>posdef</b>: this box is checked if the matrix is
+            symmetric and positive definite.
+
+        <li><b>psym</b>: the symmetry of the nonzero pattern of the
+            matrix A (including the binary <i>Zeros</i> matrix as well).  Let
+            <i>S = pattern(pattern(A)+Zeros)</i> where <i>pattern(A)</i> is a
+            binary matrix with entries equal to 1 where <i>A(i,j)</i> is
+            nonzero, and zero elsewhere.  The <i>psym</i> metric is zero if the
+            pattern of <i>S</i> is completely unsymmetric, and 1.0 if the
+            pattern is exactly symmetric.  Let <i>pmatched</i> be the number of
+            off-diagonal entries <i>S(i,j)</i> for which <i>S(i,j)=S(j,i)</i>
+            and let <i>pnzoffdiag</i> be the total number off-diagonal entries
+            in <i>S</i>.  Then <i>psym</i> is the ratio
+            <i>pmatched/pnzoffdiag</i>.
+
+        <li><b>nsym</b>:  the symmetry of the numerical values of the
+            matrix.  This property ignores the <i>Zeros</i> matrix.  It is
+            equal to 0 for a perfectly unsymmetric matrix, and 1.0 for a
+            symmetric matrix.  Let <i>matched</i> be the number of nonzero
+            off-diagonal entries <i>A(i,j)</i> for which <i>A(i,j)=A(j,i)</i>
+            and let <i>nzoffdiag</i> be the total number off-diagonal nonzero
+            entries in <i>A</i>.  Then <i>psym</i> is the ratio
+            <i>matched/nzoffdiag</i>.
+
+        <li><b>kind</b>: the problem domain.  Note that this is typically
+            related to the problem group, since many matrix authors submit
+            matrices to the collection that arise from a single problem domain.
+            Some group have problems from many domains, however.
+
+        </ul>
+
+<p> <b>Download panel</b>:
+
+This panel controls the downloading of matrices, with
+three check boxes, three buttons, and informational items:
+
+    <ul>
+
+    <li> <b>Download</b>: click this to begin the download of the
+        selected matrices.  Matrices that are already downloaded are skipped
+        (thus, if one of your matrix files happens to get corrupted, simply
+        remove the file and restart the UFgui).  Matrices are downloaded into
+        the <i>mat</i>, <i>MM</i>, and <i>RB</i> folders inside the UFget
+        folder, in the same order as they appear in the table view.  For
+        example, if you click on the <i># nonzeros</i> column heading prior to
+        clicking <i>Download</i>, your selected matrices will be downloaded in
+        order of increasing number of nonzero entries.  If you hover your mouse
+        over the download button, a tool tip will tell you what it will do.
+
+    <li><b>MATLAB (mat)</b> format: click this to download the selected
+        matrices in MATLAB *.mat format.
+
+    <li><b>Matrix Market (MM)</b> format: click this to download the selected
+        matrices in Matrix Market format.
+
+    <li> <b>Rutherford/Boeing (RB)</b> format: click this to download the
+        selected matrices in Rutherford/Boeing format.
+
+    <li> <b>Matrices selected:</b> gives a running total of the number of
+        matrices selected in the table.
+
+    <li> <b>Cancel</b>: click to cancel the current download, deleting the
+        matrix currently being downloaded.  Matrices already fully downloaded
+        are never deleted by the UFgui program.
+
+    <li> <b>Overall progress</b>:  this progress bar advances after each
+        matrix is downloaded.
+
+    <li> <b>Current file</b>:  this progress bar advances as the current
+        matrix is downloaded.  The icon and name of the matrix currently
+        being downloaded is shown in the icon panel.
+
+    </ul>
+</ul>
+
+<p> The contents of the <i>mat</i>, <i>matrices</i>, <i>MM</i>, and <i>RB</i>
+    folders ("directories" for Unix users), and the UFstats.txt file itself,
+    maybe be deleted at will when the program is not running.  They will be
+    recreated when the program restarts.  If you delete the <i>matrices</i>
+    directory, for example, matrix icons are redownloaded, which makes for a
+    fun slide show.  Sit back and watch.
+
+<h2>6. Customization</h2>
+
+The <i>UFsettings.txt</i> includes six lines of text, each with parameters
+that you can modify.  If this file is missing, or shorter than 6 lines
+long, then defaults are used.
+
+<ul>
+<li> The first line is the default folder containing the <i>mat</i>,
+    <i>matrices</i>, <i>MM</i>, and <i>RB</i> directories.  It is displayed
+    on the GUI just above the table of matrices.  The line is blank
+    by default.  If left blank, these four folders are to be found in the
+    current working directory.  You can modify this first line to refer to
+    another folder.  For example, if I were to create my own folder called
+    <i>MyMatrices</i> in my home directory, I would use
+    <i>/home/davis/MyMatrices/</i> in Unix/Linux,
+    <i>/Users/davis/MyMatrices/</i> in Mac OS X, or <i>C:\Documents and
+    Settings\davis\My Documents\MyMatrices\</i> in Windows.  The trailing
+    file-separator is optional.  Both the slash (\) and backslash (/)
+    characters are interpretted as your system's file-separator ('\' for
+    Windows, '/' for everything else).
+
+<li> The second line is the root URL of the UF Sparse Matrix Collection,
+    http://www.cise.ufl.edu/research/sparse.  This only needs to change in the
+    event that the entire collection moves to a new URL.
+
+<li> The third line is the number of days after which a new list of matrices (in
+    <i>matrices/UFstats.csv</i> and <i>mat/UF_Index.mat</i>) should be
+    downloaded.  By default this is set to 30.  A value of <i>inf</i> means
+    that this <i>UFstats.csv</i> file is never downloaded automatically.  If
+    the <i>matrices/UFstats.csv</i> is missing or corrupted when UFgui starts,
+    it will download fresh copies of both files.  Thus, to force a refresh,
+    simply delete the <i>matrices/UFstats.csv</i> file and then start UFgui.
+    You may also download the files with the MATLAB command
+    <i>UFget('refresh')</i> prior to running UFgui.  The <i>UFsettings.txt</i>
+    is also used by the <i>UFget</i> MATLAB interface.
+
+<li> The fourth line gives the name of your HTTP proxy server, if you connect to
+    the internet via a proxy.  If left blank, no proxy is used.
+
+<li>The fifth line is the port number for your HTTP proxy.  If blank,
+    the default of 80 is used.
+
+<li>The sixth and final line controls debug diagnostics.  If this line is
+    "debug" (without the quotes), then diagnostics are printed on the standard
+    output (System.out).  You should also start the UFgui.jar via the
+    command line, otherwise the diagnostic output is not visible.
+
+</ul>
+
+<h2>7. Limitations and known issues</h2>
+
+<ul>
+
+<li> When a download is complete, the table order jitters slightly.  This is
+    because the <i>mat</i>, <i>MM</i>, and <i>RB</i> columns are updated. The
+    table sort order is temporarily modified, even if you have not currently
+    selected one of those columns to sort.  It then returns to the proper order
+    immediately.  This appears to be a limitation of the Java Swing library in
+    JDK 6.
+
+<li> When cancelling a download with the Cancel button, or terminating the
+    program normally (by clicking the [x] icon to close the UFgui window), any
+    partial file currently being downloaded is safely deleted.  These files
+    have the term _IN_PROGRESS appended to their name.  If the UFgui program
+    terminates abnormally and suddenly in the middle of a download, however, it
+    will leave behind files of this form.  You can safely delete any
+    *_IN_PROGRESS file when the UFgui program is not running.
+
+<li> Working through an HTTP proxy can be sluggish, and I have even seen
+    downloads stall completely.  I am currently investigating why this
+    occurs and how to work around a sluggish proxy.  If you are using a
+    proxy and the download stalls, try clicking <i>Cancel</i> and then
+    <i>Download</i>.  If that fails, terminate UFgui.  If you terminate it
+    abnormally (not by clicking the [x] in the window, but with "kill -9"
+    in Linux, or by forcing it to quit via your OS), you may need to
+    delete the *_IN_PROGRESS file.  Please let me know if this happens.
+
+</ul>
+
+<h2>8. Copyright and License</h2>
+
+Copyright (c) 2009-2012, Timothy A. Davis.  All rights reserved.
+
+<p> Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+<ul>
+    <li> Redistributions of source code must retain the above copyright 
+      notice, this list of conditions and the following disclaimer.
+    <li> Redistributions in binary form must reproduce the above copyright 
+      notice, this list of conditions and the following disclaimer in 
+      the documentation and/or other materials provided with the distribution
+    <li> Neither the name of the University of Florida nor the names 
+      of its contributors may be used to endorse or promote products derived 
+      from this software without specific prior written permission.
+</ul>
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+<h2>9. Version and Change-Log</h2>
+
+<ul>
+<li> Version 1.0.4, October 27, 2010.  Update to this help file only.
+
+<li> Version 1.0.3, October 9, 2009.  Removed the Update button which when
+    clicked would download a fresh copy of <i>matrices/UFstats.csv</i>.  UFgui
+    updates itself automatically every 30 days.  If you want to force a
+    refresh, just delete that file and restart UFgui.  Changed the appearence
+    of the mat, MM, RB columns. (from Iain Duff's comments). 
+
+<li> Version 1.0.2, October 8, 2009.  Added HTTP proxy option
+    (suggested by Iain Duff), and debug diagnostic option.
+
+<li> Version 1.0.1, October 7, 2009.  Added "Clear selections" button
+    (suggested by Xiangrui Meng).
+
+<li> UFgui Version 1.0, October 7, 2009, released.
+
+<li> When a new version of this software is available, simply move the
+    <i>mat</i>, <i>matrices</i>, <i>MM</i>, and <i>RB</i> folders from the old
+    <i>UFget</i> folder into the new one, to preserve the matrices you have
+    already downloaded.  Alternatively, you can edit the <i>UFsettings.txt</i>
+    file to reflect the folder containing your previous <i>mat</i>,
+    <i>matrices</i>, <i>MM</i>, and <i>RB</i> folders (see the
+    <b>Customization</b> section, above).
+
+</ul>
+
+<h2>10. For Further Help</h2>
+
+Contact the author of this UFgui program, and the maintainer of the UF Sparse
+Matrix Collection: Tim Davis
+(<a href=http://www.suitesparse.com>
+http://www.suitesparse.com</a>, email
+<a href=mailto:DrTimothyAldenDavis at gmail.com>DrTimothyAldenDavis at gmail.com</a>).
+To print this document,
+open the file <i>UFhelp.html</i> in your favorite web browser.
+
+<h2>11. Acknowledgements</h2>
+
+I would like to thank Iain Duff and Xiangrui Meng for their feedback,
+which has improved this package.  Designing a GUI is an art, and getting
+usability feedback from others is vital. 
+
+</font>
+</body>
+</html>
diff --git a/UFget/UFkinds.m b/UFget/UFkinds.m
new file mode 100644
index 0000000..6d87b77
--- /dev/null
+++ b/UFget/UFkinds.m
@@ -0,0 +1,71 @@
+function kinds = UFkinds
+%UFKINDS: get 'kind' of each problem in the UF collection.
+%
+% A problem 'kind' is the domain from which the problem arises.  Examples
+% include 'circuit simulation', 'optimization', 'least squares', and 'robotics'.
+% See UFget/README.txt for a complete list.
+%
+% A 'kind' is related to the matrix 'Group'.  The latter is determined by
+% person, persons, or organization that created the matrix.  'Group' may also
+% refer to another matrix collection that has been included in this collection
+% (such as 'HB' for the Harwell/Boeing collection).
+%
+% kinds = UFkinds returns a cell array with one row per matrix.  kinds{id}
+% is the same as Problem.kind where Problem=UFget(id).  If an error occurs,
+% an empty cell array is returned.
+%
+% Example:
+%
+%   kinds = UFkinds ;
+%   Problem = UFget (42)
+%   kinds{42}
+%
+% results in the following output:
+%
+%   Problem = 
+%        title: 'SYMMETRIC STIFFNESS MATRIX - FRAME WITHIN A SUSPENSION BRIDGE'
+%            A: [485x485 double]
+%         name: 'HB/bcsstk20'
+%           id: 42
+%         date: '1984'
+%       author: 'J. Lewis'
+%           ed: 'I. Duff, R. Grimes, J. Lewis'
+%         kind: 'structural problem'
+%
+%   ans =
+%       'structural problem'
+%
+% To find a list t of the id's all matrices from material science:
+%
+%   kinds = UFkinds ;
+%   t = zeros (1, length (kinds)) ;
+%   for id = 1:length(kinds)
+%       t (id) = ~isempty (strfind (kinds {id}, 'material')) ;
+%   end
+%   t = find (t) ;
+%   for id = t
+%       Problem = UFget (id)
+%   end
+%
+% See also UFget.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+params = UFget_defaults ;
+statfile = sprintf ('%smatrices/UFstats.csv', params.topdir) ;
+
+try
+    f = fopen (statfile, 'r') ;
+    nmat = str2double (fgetl (f)) ;     % number of matrices
+    s = fgetl (f) ;                     % date the UFstats.csv file was created
+    kinds = cell (nmat,1) ;
+    for id = 1:nmat
+        s = fgetl (f) ;
+        t = find (s == ',', 1, 'last') ;
+        r = s ((t+1):end) ;
+        kinds {id} = r ;
+    end
+catch
+    kinds = cell (0,0) ;                % return empty string on error
+end
+
diff --git a/UFget/UFsettings.txt b/UFget/UFsettings.txt
new file mode 100644
index 0000000..7103fa7
--- /dev/null
+++ b/UFget/UFsettings.txt
@@ -0,0 +1,6 @@
+
+http://www.cise.ufl.edu/research/sparse
+30
+
+
+no debug
diff --git a/UFget/UFsvd.m b/UFget/UFsvd.m
new file mode 100644
index 0000000..138097a
--- /dev/null
+++ b/UFget/UFsvd.m
@@ -0,0 +1,54 @@
+function S = UFsvd (matrix, UF_Index)
+%UFsvd singular values of a matrix in the UF collection.
+%
+% As of Nov 2012, only matrices for which min(size(A)) <= 30401
+% have their singular values computed.
+%
+% Examples:
+%   S = UFsvd ('HB/arc130')
+%   S = UFsvd (6)
+%   index = UFget
+%   S = UFsvd (6, index)
+%
+% S is a struct containing:
+%   s       the singular values (a column vector of size min(size(A)))
+%   how     a string
+
+if (nargin < 2)
+    % load the UF index
+    UF_Index = UFget ;
+end
+
+% look up the matrix in the UF index
+[group matrix id] = UFget_lookup (matrix, UF_Index) ;
+if (id == 0)
+    error ('invalid matrix') ;
+end
+
+% determine where the files go
+params = UFget_defaults ;
+svddir = sprintf ('%ssvd%s%s', params.topdir, filesep, group) ;
+svdfile = sprintf ('%s%s%s_SVD.mat', svddir, filesep, matrix) ;
+svdurl = sprintf ('%s/svd/%s/%s_SVD.mat', params.topurl, group, matrix) ;
+
+% make sure the mat/Group directory exists
+if (~exist (svddir, 'dir'))
+    mkdir (svddir) ;
+end
+
+% download the *_SVD.mat file, if not already downloaded
+if (~exist (svdfile, 'file'))
+    fprintf ('downloading %s\n', svdurl) ;
+    fprintf ('to %s\n', svdfile) ;
+    tmp = tempname ;                        % download to a temp file first
+    try
+        urlwrite (svdurl, tmp) ;
+    catch me                                %#ok
+        error ('SVD not yet computed for this matrix (or URL not found)') ;
+    end
+    movefile (tmp, svdfile, 'f') ;          % move the new matrix into place
+end
+
+% load the SVD
+load (svdfile) ;
+
diff --git a/UFget/UFweb.m b/UFget/UFweb.m
new file mode 100644
index 0000000..4b2a0c1
--- /dev/null
+++ b/UFget/UFweb.m
@@ -0,0 +1,124 @@
+function stats = UFweb (matrix, opts)
+%UFWEB opens the URL for a matrix.
+%
+%   UFweb(matrix) opens the URL for a matrix.  This parameter can be a string,
+%   or an integer.  If it is a string with no "/" character, the web page for a
+%   matrix group is displayed.  With no arguments, a list of all the matrix
+%   groups is displayed.
+%
+%   Example:
+%
+%   If Problem = UFget ('HB/arc130'), the first four examples display
+%   the same thing, the web page for the HB/arc130 matrix:
+%
+%       UFweb (6)
+%       UFweb ('HB/arc130')
+%       stats = UFweb (6)
+%
+%   The latter also returns statistics about the matrix or matrix group.
+%   To display the web page for the HB (Harwell-Boeing) group:
+%
+%       UFweb ('HB')
+%
+%   To display the home page for the UF sparse matrix collection:
+%
+%       UFweb
+%       UFweb (0)
+%       UFweb ('')
+%
+%   The latter two are useful if a second optional parameter is specified.
+%   The second optional argument is a string passed as additional parameters to
+%   the MATLAB web command.  To use the system web browser instead of the MATLAB
+%   browser, for example, use UFweb ('HB/arc130', '-browser').
+%
+%   See also web, UFget, UFget_defaults.
+
+% Copyright 2009-2012, Timothy A. Davis, http://www.suitesparse.com
+
+params = UFget_defaults ;
+UF_Index = UFget ;
+
+if (nargin < 1)
+    matrix = '' ;
+end
+if (nargin < 2)
+    opts = '' ;
+end
+
+% get the matrix group, name, and id
+[group name id] = UFget_lookup (matrix, UF_Index) ;
+
+url = params.url ;
+len = length (url) ;
+if (strcmp (url ((len-3):len), '/mat'))
+    % remove the trailing '/mat'
+    url = url (1:(len-4)) ;
+end
+
+% open the web page for the matrix, group, or whole collection
+if (id == 0)
+    if (isempty (group))
+        eval (['web ' url '/matrices/index.html ' opts])
+    else
+        eval (['web ' url '/matrices/' group '/index.html ' opts])
+    end
+else
+    eval (['web ' url '/matrices/' group '/' name '.html ' opts])
+end
+
+% return stats
+if (nargout > 0)
+
+    if (id == 0)
+
+        if (isempty (group))
+
+            % return stats about the whole collection
+            stats.nmatrices = length (UF_Index.nrows) ;
+            stats.LastRevisionDate = UF_Index.LastRevisionDate ;
+            stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
+
+        else
+
+            % return stats about one matrix group
+            nmat = length (UF_Index.nrows) ;
+            ngroup = 0 ;
+            for i = 1:nmat
+                if (strcmp (group, UF_Index.Group {i}))
+                    ngroup = ngroup + 1 ;
+                end
+            end
+            stats.nmatrices = ngroup ;
+            stats.LastRevisionDate = UF_Index.LastRevisionDate ;
+            stats.DownloadTime = datestr (UF_Index.DownloadTimeStamp) ;
+
+        end
+    else
+
+        % look up the matrix statistics
+        stats.Group = group ;
+        stats.Name = name ;
+        stats.nrows = UF_Index.nrows (id) ;
+        stats.ncols = UF_Index.ncols (id) ;
+        stats.nnz = UF_Index.nnz (id) ;
+        stats.nzero = UF_Index.nzero (id) ;
+        stats.pattern_symmetry = UF_Index.pattern_symmetry (id) ;
+        stats.numerical_symmetry = UF_Index.numerical_symmetry (id) ;
+        stats.isBinary = UF_Index.isBinary (id) ;
+        stats.isReal = UF_Index.isReal (id) ;
+        stats.nnzdiag = UF_Index.nnzdiag (id) ;
+        stats.posdef = UF_Index.posdef (id) ;
+        stats.amd_lnz = UF_Index.amd_lnz (id) ;
+        stats.amd_flops = UF_Index.amd_flops (id) ;
+        stats.amd_vnz = UF_Index.amd_vnz (id) ;
+        stats.amd_rnz = UF_Index.amd_rnz (id) ;
+        stats.nblocks = UF_Index.nblocks (id) ;
+        stats.sprank = UF_Index.sprank (id) ;
+        stats.RBtype = UF_Index.RBtype (id,:) ;
+        stats.cholcand = UF_Index.cholcand (id) ;
+        stats.ncc = UF_Index.ncc (id) ;
+        stats.isND = UF_Index.isND (id) ;
+        stats.isGraph = UF_Index.isGraph (id) ;
+
+    end
+end
diff --git a/UFget/mat/UF_Index.mat b/UFget/mat/UF_Index.mat
new file mode 100644
index 0000000..33213c8
Binary files /dev/null and b/UFget/mat/UF_Index.mat differ
diff --git a/UFget/matrices/UFstats.csv b/UFget/matrices/UFstats.csv
new file mode 100644
index 0000000..6c42242
--- /dev/null
+++ b/UFget/matrices/UFstats.csv
@@ -0,0 +1,2652 @@
+2650
+03-Dec-2012 16:02:06
+HB,1138_bus,1138,1138,4054,1,0,0,1,1,1,power network problem
+HB,494_bus,494,494,1666,1,0,0,1,1,1,power network problem
+HB,662_bus,662,662,2474,1,0,0,1,1,1,power network problem
+HB,685_bus,685,685,3249,1,0,0,1,1,1,power network problem
+HB,abb313,313,176,1557,1,1,0,0,0,0,least squares problem
+HB,arc130,130,130,1037,1,0,1,0,0.7586805555555556,0,materials problem
+HB,ash219,219,85,438,1,1,0,0,0,0,least squares problem
+HB,ash292,292,292,2208,1,1,0,0,1,1,least squares problem
+HB,ash331,331,104,662,1,1,0,0,0,0,least squares problem
+HB,ash608,608,188,1216,1,1,0,0,0,0,least squares problem
+HB,ash85,85,85,523,1,1,0,0,1,1,least squares problem
+HB,ash958,958,292,1916,1,1,0,0,0,0,least squares problem
+HB,bcspwr01,39,39,131,1,1,0,0,1,1,power network problem
+HB,bcspwr02,49,49,167,1,1,0,0,1,1,power network problem
+HB,bcspwr03,118,118,476,1,1,0,0,1,1,power network problem
+HB,bcspwr04,274,274,1612,1,1,0,0,1,1,power network problem
+HB,bcspwr05,443,443,1623,1,1,0,0,1,1,power network problem
+HB,bcspwr06,1454,1454,5300,1,1,0,0,1,1,power network problem
+HB,bcspwr07,1612,1612,5824,1,1,0,0,1,1,power network problem
+HB,bcspwr08,1624,1624,6050,1,1,0,0,1,1,power network problem
+HB,bcspwr09,1723,1723,6511,1,1,0,0,1,1,power network problem
+HB,bcspwr10,5300,5300,21842,1,1,0,0,1,1,power network problem
+HB,bcsstk01,48,48,400,1,0,1,1,1,1,structural problem
+HB,bcsstk02,66,66,4356,1,0,1,1,1,1,structural problem
+HB,bcsstk03,112,112,640,1,0,1,1,1,1,structural problem
+HB,bcsstk04,132,132,3648,1,0,1,1,1,1,structural problem
+HB,bcsstk05,153,153,2423,1,0,1,1,1,1,structural problem
+HB,bcsstk06,420,420,7860,1,0,1,1,1,1,structural problem
+HB,bcsstk07,420,420,7860,1,0,1,1,1,1,duplicate structural problem
+HB,bcsstk08,1074,1074,12960,1,0,1,1,1,1,structural problem
+HB,bcsstk09,1083,1083,18437,1,0,1,1,1,1,structural problem
+HB,bcsstk10,1086,1086,22070,1,0,1,1,1,1,structural problem
+HB,bcsstk11,1473,1473,34241,1,0,1,1,1,1,structural problem
+HB,bcsstk12,1473,1473,34241,1,0,1,1,1,1,duplicate structural problem
+HB,bcsstk13,2003,2003,83883,1,0,1,1,1,1,computational fluid dynamics problem
+HB,bcsstk14,1806,1806,63454,1,0,1,1,1,1,structural problem
+HB,bcsstk15,3948,3948,117816,1,0,1,1,1,1,structural problem
+HB,bcsstk16,4884,4884,290378,1,0,1,1,1,1,structural problem
+HB,bcsstk17,10974,10974,428650,1,0,1,1,1,1,structural problem
+HB,bcsstk18,11948,11948,149090,1,0,1,1,1,1,structural problem
+HB,bcsstk19,817,817,6853,1,0,1,1,1,1,structural problem
+HB,bcsstk20,485,485,3135,1,0,1,1,1,1,structural problem
+HB,bcsstk21,3600,3600,26600,1,0,1,1,1,1,structural problem
+HB,bcsstk22,138,138,696,1,0,1,1,1,1,structural problem
+HB,bcsstk23,3134,3134,45178,1,0,1,1,1,1,structural problem
+HB,bcsstk24,3562,3562,159910,1,0,1,1,1,1,structural problem
+HB,bcsstk25,15439,15439,252241,1,0,1,1,1,1,structural problem
+HB,bcsstk26,1922,1922,30336,1,0,1,1,1,1,structural problem
+HB,bcsstk27,1224,1224,56126,1,0,1,1,1,1,structural problem
+HB,bcsstk28,4410,4410,219024,1,0,1,1,1,1,structural problem
+HB,bcsstk29,13992,13992,619488,1,1,1,0,1,1,structural problem
+HB,bcsstk30,28924,28924,2043492,1,1,1,0,1,1,structural problem
+HB,bcsstk31,35588,35588,1181416,1,1,1,0,1,1,structural problem
+HB,bcsstk32,44609,44609,2014701,1,1,1,0,1,1,structural problem
+HB,bcsstk33,8738,8738,591904,1,1,1,0,1,1,structural problem
+HB,bcsstm01,48,48,24,1,0,1,0,1,1,structural problem
+HB,bcsstm02,66,66,66,1,0,1,1,1,1,structural problem
+HB,bcsstm03,112,112,72,1,0,1,0,1,1,structural problem
+HB,bcsstm04,132,132,66,1,0,1,0,1,1,structural problem
+HB,bcsstm05,153,153,153,1,0,1,1,1,1,structural problem
+HB,bcsstm06,420,420,420,1,0,1,1,1,1,structural problem
+HB,bcsstm07,420,420,7252,1,0,1,1,1,1,structural problem
+HB,bcsstm08,1074,1074,1074,1,0,1,1,1,1,structural problem
+HB,bcsstm09,1083,1083,1083,1,0,1,1,1,1,structural problem
+HB,bcsstm10,1086,1086,22092,1,0,1,0,1,1,structural problem
+HB,bcsstm11,1473,1473,1473,1,0,1,1,1,1,structural problem
+HB,bcsstm12,1473,1473,19659,1,0,1,1,1,1,structural problem
+HB,bcsstm13,2003,2003,21181,1,0,1,0,1,1,computational fluid dynamics problem
+HB,bcsstm19,817,817,817,1,0,1,1,1,1,structural problem
+HB,bcsstm20,485,485,485,1,0,1,1,1,1,structural problem
+HB,bcsstm21,3600,3600,3600,1,0,1,1,1,1,structural problem
+HB,bcsstm22,138,138,138,1,0,1,1,1,1,structural problem
+HB,bcsstm23,3134,3134,3134,1,0,1,1,1,1,structural problem
+HB,bcsstm24,3562,3562,3562,1,0,1,1,1,1,structural problem
+HB,bcsstm25,15439,15439,15439,1,0,1,1,1,1,structural problem
+HB,bcsstm26,1922,1922,1922,1,0,1,1,1,1,structural problem
+HB,bcsstm27,1224,1224,56126,1,0,1,0,1,1,structural problem
+HB,beacxc,497,506,50409,1,0,0,0,0,0,economic problem
+HB,beaflw,497,507,53403,1,0,0,0,0,0,economic problem
+HB,beause,497,507,44551,1,0,0,0,0,0,economic problem
+HB,blckhole,2132,2132,14872,1,1,1,0,1,1,structural problem
+HB,bp_0,822,822,3276,1,0,0,0,0.009160305343511451,0.001221374045801527,optimization problem sequence
+HB,bp_1000,822,822,4661,1,0,0,0,0.009448142581060769,0.0004294610264118531,subsequent optimization problem
+HB,bp_1200,822,822,4726,1,0,0,0,0.009322033898305085,0.000423728813559322,subsequent optimization problem
+HB,bp_1400,822,822,4790,1,0,0,0,0.01044932079414838,0.0004179728317659352,subsequent optimization problem
+HB,bp_1600,822,822,4841,1,0,0,0,0.01075491209927611,0.0004136504653567735,subsequent optimization problem
+HB,bp_200,822,822,3802,1,0,0,0,0.00631578947368421,0,subsequent optimization problem
+HB,bp_400,822,822,4028,1,0,0,0,0.00546448087431694,0.0004967709885742673,subsequent optimization problem
+HB,bp_600,822,822,4172,1,0,0,0,0.006235011990407674,0.0004796163069544365,subsequent optimization problem
+HB,bp_800,822,822,4534,1,0,0,0,0.005298013245033113,0.0004415011037527594,subsequent optimization problem
+HB,can_1054,1054,1054,12196,1,1,1,0,1,1,structural problem
+HB,can_1072,1072,1072,12444,1,1,1,0,1,1,structural problem
+HB,can_144,144,144,1296,1,1,1,0,1,1,structural problem
+HB,can_161,161,161,1377,1,1,1,0,1,1,structural problem
+HB,can_187,187,187,1491,1,1,1,0,1,1,structural problem
+HB,can_229,229,229,1777,1,1,1,0,1,1,structural problem
+HB,can_24,24,24,160,1,1,1,0,1,1,structural problem
+HB,can_256,256,256,2916,1,1,1,0,1,1,structural problem
+HB,can_268,268,268,3082,1,1,1,0,1,1,structural problem
+HB,can_292,292,292,2540,1,1,1,0,1,1,structural problem
+HB,can_445,445,445,3809,1,1,1,0,1,1,structural problem
+HB,can_61,61,61,557,1,1,1,0,1,1,structural problem
+HB,can_62,62,62,218,1,1,1,0,1,1,structural problem
+HB,can_634,634,634,7228,1,1,1,0,1,1,structural problem
+HB,can_715,715,715,6665,1,1,1,0,1,1,structural problem
+HB,can_73,73,73,377,1,1,1,0,1,1,structural problem
+HB,can_838,838,838,10010,1,1,1,0,1,1,structural problem
+HB,can_96,96,96,768,1,1,1,0,1,1,structural problem
+HB,curtis54,54,54,291,1,1,1,0,0.9535864978902954,0.9535864978902954,2D/3D problem
+HB,dwt_1005,1005,1005,8621,1,1,1,0,1,1,structural problem
+HB,dwt_1007,1007,1007,8575,1,1,1,0,1,1,structural problem
+HB,dwt_1242,1242,1242,10426,1,1,1,0,1,1,structural problem
+HB,dwt_162,162,162,1182,1,1,1,0,1,1,structural problem
+HB,dwt_193,193,193,3493,1,1,1,0,1,1,structural problem
+HB,dwt_198,198,198,1392,1,1,1,0,1,1,structural problem
+HB,dwt_209,209,209,1743,1,1,1,0,1,1,structural problem
+HB,dwt_221,221,221,1629,1,1,1,0,1,1,structural problem
+HB,dwt_234,234,234,834,1,1,1,0,1,1,structural problem
+HB,dwt_245,245,245,1461,1,1,1,0,1,1,structural problem
+HB,dwt_2680,2680,2680,25026,1,1,1,0,1,1,structural problem
+HB,dwt_307,307,307,2523,1,1,1,0,1,1,structural problem
+HB,dwt_310,310,310,2448,1,1,1,0,1,1,structural problem
+HB,dwt_346,346,346,3226,1,1,1,0,1,1,structural problem
+HB,dwt_361,361,361,2953,1,1,1,0,1,1,structural problem
+HB,dwt_419,419,419,3563,1,1,1,0,1,1,structural problem
+HB,dwt_492,492,492,3156,1,1,1,0,1,1,structural problem
+HB,dwt_503,503,503,6027,1,1,1,0,1,1,structural problem
+HB,dwt_512,512,512,3502,1,1,1,0,1,1,structural problem
+HB,dwt_59,59,59,267,1,1,1,0,1,1,structural problem
+HB,dwt_592,592,592,5104,1,1,1,0,1,1,structural problem
+HB,dwt_607,607,607,5131,1,1,1,0,1,1,structural problem
+HB,dwt_66,66,66,320,1,1,1,0,1,1,structural problem
+HB,dwt_72,72,72,222,1,1,1,0,1,1,structural problem
+HB,dwt_758,758,758,5994,1,1,1,0,1,1,structural problem
+HB,dwt_869,869,869,7285,1,1,1,0,1,1,structural problem
+HB,dwt_87,87,87,541,1,1,1,0,1,1,structural problem
+HB,dwt_878,878,878,7448,1,1,1,0,1,1,structural problem
+HB,dwt_918,918,918,7384,1,1,1,0,1,1,structural problem
+HB,dwt_992,992,992,16744,1,1,1,0,1,1,structural problem
+HB,eris1176,1176,1176,18552,1,1,0,0,1,1,power network problem
+HB,fs_183_1,183,183,998,1,0,1,0,0.417607223476298,0,2D/3D problem sequence
+HB,fs_183_3,183,183,1069,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_183_4,183,183,1069,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_183_6,183,183,1000,1,0,1,0,0.417607223476298,0,subsequent 2D/3D problem
+HB,fs_541_1,541,541,4282,1,0,1,0,0.6826923076923077,0,2D/3D problem sequence
+HB,fs_541_2,541,541,4282,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_541_3,541,541,4282,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_541_4,541,541,4273,1,0,1,0,0.6826923076923077,0,subsequent 2D/3D problem
+HB,fs_680_1,680,680,2184,1,0,1,0,0.5106815869786369,0,2D/3D problem sequence
+HB,fs_680_2,680,680,2424,1,0,1,0,0.5106815869786369,0,subsequent 2D/3D problem
+HB,fs_680_3,680,680,2471,1,0,1,0,0.5106815869786369,0,subsequent 2D/3D problem
+HB,fs_760_1,760,760,5739,1,0,1,0,0.6510736196319018,0,2D/3D problem sequence
+HB,fs_760_2,760,760,5739,1,0,1,0,0.6510736196319018,0,subsequent 2D/3D problem
+HB,fs_760_3,760,760,5816,1,0,1,0,0.6510736196319018,0,subsequent 2D/3D problem
+HB,gemat1,4929,10595,46591,1,0,0,0,0,0,power network problem
+HB,gemat11,4929,4929,33108,1,0,0,0,0.001326419872181358,0,power network problem sequence
+HB,gemat12,4929,4929,33044,1,0,0,0,0.001450063440275512,0,subsequent power network problem
+HB,gent113,113,113,655,1,1,0,0,0.05663716814159292,0.05663716814159292,statistical/mathematical problem
+HB,gr_30_30,900,900,7744,1,0,1,1,1,1,2D/3D problem
+HB,gre_1107,1107,1107,5664,1,0,0,0,0,0,directed weighted graph
+HB,gre_115,115,115,421,1,0,0,0,0.2549019607843137,0,directed weighted graph
+HB,gre_185,185,185,975,1,0,0,0,0.4146341463414634,0,directed weighted graph
+HB,gre_216a,216,216,812,1,0,0,0,0,0,directed weighted graph
+HB,gre_216b,216,216,812,1,0,0,0,0,0,directed weighted graph
+HB,gre_343,343,343,1310,1,0,0,0,0,0,directed weighted graph
+HB,gre_512,512,512,1976,1,0,0,0,0,0,directed weighted graph
+HB,hor_131,434,434,4182,1,0,0,0,1,0.3740661686232657,directed weighted graph
+HB,ibm32,32,32,126,1,1,0,0,0.0851063829787234,0.0851063829787234,directed graph
+HB,illc1033,1033,320,4719,1,0,0,0,0,0,least squares problem
+HB,illc1850,1850,712,8636,1,0,0,0,0,0,least squares problem
+HB,impcol_a,207,207,572,1,0,0,0,0.02482269503546099,0.01063829787234043,chemical process simulation problem
+HB,impcol_b,59,59,271,1,0,0,0,0.09491525423728814,0,chemical process simulation problem
+HB,impcol_c,137,137,400,1,0,0,0,0.04444444444444445,0.01146131805157593,chemical process simulation problem
+HB,impcol_d,425,425,1255,1,0,0,0,0.05674846625766871,0.0228198859005705,chemical process simulation problem
+HB,impcol_e,225,225,1303,1,0,0,0,0.1038338658146965,0.001603849238171612,chemical process simulation problem
+HB,jagmesh1,936,936,6264,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh2,1009,1009,6865,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh3,1089,1089,7361,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh4,1440,1440,9504,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh5,1180,1180,7750,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh6,1377,1377,8993,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh7,1138,1138,7450,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh8,1141,1141,7465,1,1,1,0,1,1,2D/3D problem
+HB,jagmesh9,1349,1349,9101,1,1,1,0,1,1,2D/3D problem
+HB,jgl009,9,9,50,1,1,0,0,0.4761904761904762,0.4761904761904762,counter-example problem
+HB,jgl011,11,11,76,1,1,0,0,0.5151515151515151,0.5151515151515151,counter-example problem
+HB,jpwh_991,991,991,6027,1,0,1,0,0.9364575059571089,0.9364575059571089,semiconductor device problem
+HB,lns_131,131,131,536,1,0,1,0,0.7028301886792453,0.01886792452830189,computational fluid dynamics problem
+HB,lns_3937,3937,3937,25407,1,0,1,0,0.849666726715907,0.001351107908484958,computational fluid dynamics problem
+HB,lns_511,511,511,2796,1,0,1,0,0.7994945240101096,0.02021903959561921,computational fluid dynamics problem
+HB,lnsp3937,3937,3937,25407,1,0,1,0,0.849666726715907,0.001351107908484958,computational fluid dynamics problem
+HB,lnsp_131,131,131,536,1,0,1,0,0.7028301886792453,0.01886792452830189,computational fluid dynamics problem
+HB,lnsp_511,511,511,2796,1,0,1,0,0.7994945240101096,0.02021903959561921,computational fluid dynamics problem
+HB,lshp1009,1009,1009,6865,1,1,1,0,1,1,duplicate thermal problem
+HB,lshp1270,1270,1270,8668,1,1,1,0,1,1,thermal problem
+HB,lshp1561,1561,1561,10681,1,1,1,0,1,1,thermal problem
+HB,lshp1882,1882,1882,12904,1,1,1,0,1,1,thermal problem
+HB,lshp2233,2233,2233,15337,1,1,1,0,1,1,thermal problem
+HB,lshp2614,2614,2614,17980,1,1,1,0,1,1,thermal problem
+HB,lshp3025,3025,3025,20833,1,1,1,0,1,1,thermal problem
+HB,lshp3466,3466,3466,23896,1,1,1,0,1,1,thermal problem
+HB,lshp_265,265,265,1753,1,1,1,0,1,1,thermal problem
+HB,lshp_406,406,406,2716,1,1,1,0,1,1,thermal problem
+HB,lshp_577,577,577,3889,1,1,1,0,1,1,thermal problem
+HB,lshp_778,778,778,5272,1,1,1,0,1,1,thermal problem
+HB,lund_a,147,147,2449,1,0,1,1,1,1,structural problem
+HB,lund_b,147,147,2441,1,0,1,1,1,1,structural problem
+HB,mahindas,1258,1258,7682,1,0,0,0,0.01663146779303062,0,economic problem
+HB,mbeacxc,496,496,49920,1,0,0,0,0.3162614104531868,0,economic problem
+HB,mbeaflw,496,496,49920,1,0,0,0,0.3162614104531868,0,economic problem
+HB,mbeause,496,496,41063,1,0,0,0,0.2190689324447286,0.007771192484568281,economic problem
+HB,mcca,180,180,2659,1,0,1,0,0.6446147640177491,0,2D/3D problem
+HB,mcfe,765,765,24382,1,0,1,0,0.699411440911208,0,2D/3D problem
+HB,nnc1374,1374,1374,8588,1,0,1,0,0.8169596690796277,0.5918631769888573,2D/3D problem
+HB,nnc261,261,261,1500,1,0,1,0,0.8237037037037037,0.6133333333333333,2D/3D problem
+HB,nnc666,666,666,4032,1,0,1,0,0.817831590533847,0.5919381557150746,2D/3D problem
+HB,nos1,237,237,1017,1,0,1,1,1,1,structural problem
+HB,nos2,957,957,4137,1,0,1,1,1,1,structural problem
+HB,nos3,960,960,15844,1,0,1,1,1,1,structural problem
+HB,nos4,100,100,594,1,0,1,1,1,1,structural problem
+HB,nos5,468,468,5172,1,0,1,1,1,1,structural problem
+HB,nos6,675,675,3255,1,0,1,1,1,1,2D/3D problem
+HB,nos7,729,729,4617,1,0,1,1,1,1,2D/3D problem
+HB,orani678,2529,2529,90158,1,0,0,0,0.07068607068607069,2.223531635296341e-05,economic problem
+HB,orsirr_1,1030,1030,6858,1,0,1,0,1,0.4094028826355525,computational fluid dynamics problem
+HB,orsirr_2,886,886,5970,1,0,1,0,1,0.4118804091266719,computational fluid dynamics problem
+HB,orsreg_1,2205,2205,14133,1,0,1,0,1,0.4119718309859155,computational fluid dynamics problem
+HB,plat1919,1919,1919,32399,1,0,1,1,1,1,2D/3D problem
+HB,plat362,362,362,5786,1,0,1,1,1,1,2D/3D problem
+HB,plsk1919,1919,1919,9662,1,0,1,0,1,0,2D/3D problem
+HB,plskz362,362,362,1760,1,0,1,0,1,0,2D/3D problem
+HB,pores_1,30,30,180,1,0,1,0,0.6266666666666667,0.2933333333333333,computational fluid dynamics problem
+HB,pores_2,1224,1224,9613,1,0,1,0,0.6119918941470974,0.3914650137084277,computational fluid dynamics problem
+HB,pores_3,532,532,3474,1,0,1,0,0.7423521414004078,0.3052345343303875,computational fluid dynamics problem
+HB,psmigr_1,3140,3140,543160,1,0,0,0,0.4786508697793794,0.01044772250019444,economic problem
+HB,psmigr_2,3140,3140,540022,1,0,0,0,0.4786508697793794,0,economic problem
+HB,psmigr_3,3140,3140,543160,1,0,0,0,0.4786508697793794,0,economic problem
+HB,rgg010,10,10,76,1,1,0,0,0.6363636363636364,0.6363636363636364,counter-example problem
+HB,saylr1,238,238,1128,1,0,1,0,1,0.647191011235955,computational fluid dynamics problem
+HB,saylr3,1000,1000,3750,1,0,1,0,1,1,computational fluid dynamics problem
+HB,saylr4,3564,3564,22316,1,0,1,0,1,1,computational fluid dynamics problem
+HB,sherman1,1000,1000,3750,1,0,1,0,1,1,computational fluid dynamics problem
+HB,sherman2,1080,1080,23094,1,0,1,0,0.6708458253838466,0.004905968928863451,computational fluid dynamics problem
+HB,sherman3,5005,5005,20033,1,0,1,0,1,0.4532871972318339,computational fluid dynamics problem
+HB,sherman4,1104,1104,3786,1,0,1,0,1,0,computational fluid dynamics problem
+HB,sherman5,3312,3312,20793,1,0,1,0,0.7386305131285396,0.1534237171786511,computational fluid dynamics problem
+HB,shl_0,663,663,1687,1,0,0,0,0,0,optimization problem sequence
+HB,shl_200,663,663,1726,1,0,0,0,0,0,subsequent optimization problem
+HB,shl_400,663,663,1712,1,0,0,0,0,0,subsequent optimization problem
+HB,sstmodel,3345,3345,22749,1,1,1,0,1,1,structural problem
+HB,steam1,240,240,2248,1,0,1,0,1,0.2729083665338645,computational fluid dynamics problem
+HB,steam2,600,600,5660,1,0,1,0,1,0.1877470355731225,computational fluid dynamics problem
+HB,steam3,80,80,314,1,0,1,0,1,0.3247863247863248,computational fluid dynamics problem
+HB,str_0,363,363,2454,1,0,0,0,0.004893964110929853,0,optimization problem sequence
+HB,str_200,363,363,3068,1,0,0,0,0.01108936725375081,0,subsequent optimization problem
+HB,str_400,363,363,3157,1,0,0,0,0.0196513470681458,0,subsequent optimization problem
+HB,str_600,363,363,3279,1,0,0,0,0.01893129770992366,0,subsequent optimization problem
+HB,watt_1,1856,1856,11360,1,0,1,0,0.9865319865319865,0.9865319865319865,computational fluid dynamics problem
+HB,watt_2,1856,1856,11550,1,0,1,0,0.9804002475758201,0.9671962038374252,computational fluid dynamics problem
+HB,well1033,1033,320,4732,1,0,0,0,0,0,least squares problem
+HB,well1850,1850,712,8755,1,0,0,0,0,0,least squares problem
+HB,west0067,67,67,294,1,0,0,0,0.03424657534246575,0,chemical process simulation problem
+HB,west0132,132,132,413,1,0,0,0,0.0196078431372549,0.004914004914004914,chemical process simulation problem
+HB,west0156,156,156,362,1,0,0,0,0,0,chemical process simulation problem
+HB,west0167,167,167,506,1,0,0,0,0.01622718052738337,0,chemical process simulation problem
+HB,west0381,381,381,2134,1,0,0,0,0.005565862708719851,0.0009376465072667605,chemical process simulation problem
+HB,west0479,479,479,1888,1,0,0,0,0.01366982124079916,0,chemical process simulation problem
+HB,west0497,497,497,1721,1,0,0,0,0.006972690296339338,0,chemical process simulation problem
+HB,west0655,655,655,2808,1,0,0,0,0.005616005616005616,0,chemical process simulation problem
+HB,west0989,989,989,3518,1,0,0,0,0.01812004530011325,0.003985197836606889,chemical process simulation problem
+HB,west1505,1505,1505,5414,1,0,0,0,0.001102941176470588,0,chemical process simulation problem
+HB,west2021,2021,2021,7310,1,0,0,0,0.00326619488296135,0,chemical process simulation problem
+HB,will199,199,199,701,1,1,1,0,0.05596465390279824,0.05596465390279824,structural problem
+HB,will57,57,57,281,1,1,1,0,0.8660714285714286,0.8660714285714286,semiconductor device problem
+HB,wm1,207,277,2909,1,0,0,0,0,0,economic problem
+HB,wm2,207,260,2942,1,0,0,0,0,0,economic problem
+HB,wm3,207,260,2948,1,0,0,0,0,0,economic problem
+HB,young1c,841,841,4089,0,0,1,0,1,0.8479064039408867,acoustics problem
+HB,young2c,841,841,4089,0,0,1,0,1,0.8479064039408867,duplicate acoustics problem
+HB,young3c,841,841,3988,1,0,1,0,0.9380362249761678,0.8071178900540197,acoustics problem
+HB,young4c,841,841,4089,0,0,1,0,1,0.8004926108374384,acoustics problem
+HB,zenios,2873,2873,1314,1,0,0,0,1,1,optimization problem
+ATandT,onetone1,36057,36057,335552,1,0,0,0,0.0742956282869174,0.04331285111284008,frequency-domain circuit simulation problem
+ATandT,onetone2,36057,36057,222596,1,0,0,0,0.1128682425939654,0.06622764699821082,frequency-domain circuit simulation problem
+ATandT,pre2,659033,659033,5834044,1,0,0,0,0.3317760910564062,0.06536187196755584,frequency-domain circuit simulation problem
+ATandT,twotone,120750,120750,1206265,1,0,0,0,0.2445668624008717,0.1058542372000797,frequency-domain circuit simulation problem
+Averous,epb0,1794,1794,7764,1,0,1,0,0.5008375209380235,0,thermal problem
+Averous,epb1,14734,14734,95053,1,0,1,0,0.7293915511896314,0,thermal problem
+Averous,epb2,25228,25228,175027,1,0,1,0,0.6705385216189694,0,thermal problem
+Averous,epb3,84617,84617,463625,1,0,1,0,0.6674107142857143,0.03155606214116852,thermal problem
+Bai,af23560,23560,23560,460598,1,0,1,0,0.9973084203031934,0,computational fluid dynamics problem
+Bai,bfwa398,398,398,3678,1,0,1,0,0.9890243902439024,0.9432926829268292,electromagnetics problem
+Bai,bfwa62,62,62,450,1,0,1,0,0.9690721649484536,0.8144329896907216,electromagnetics problem
+Bai,bfwa782,782,782,7514,1,0,1,0,0.9916815210932858,0.9604872251931076,electromagnetics problem
+Bai,bfwb398,398,398,2910,1,0,1,0,1,1,electromagnetics problem
+Bai,bfwb62,62,62,342,1,0,1,0,1,1,electromagnetics problem
+Bai,bfwb782,782,782,5982,1,0,1,0,1,1,electromagnetics problem
+Bai,bwm200,200,200,796,1,0,0,0,1,0.6644295302013423,chemical process simulation problem
+Bai,bwm2000,2000,2000,7996,1,0,0,0,1,0.6664442961974649,chemical process simulation problem
+Bai,cdde1,961,961,4681,1,0,1,0,1,0,computational fluid dynamics problem sequence
+Bai,cdde2,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde3,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde4,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde5,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,cdde6,961,961,4681,1,0,1,0,1,0,subsequent computational fluid dynamics problem
+Bai,ck104,104,104,992,1,0,1,0,1,0,2D/3D problem
+Bai,ck400,400,400,2860,1,0,1,0,0.9886178861788618,0.001626016260162602,2D/3D problem
+Bai,ck656,656,656,3884,1,0,1,0,0.9913258983890955,0,2D/3D problem
+Bai,dw1024,2048,2048,10114,1,0,1,0,0.9848747830399207,0.9481775353334987,electromagnetics problem
+Bai,dw256A,512,512,2480,1,0,1,0,0.9796747967479674,0.9146341463414634,electromagnetics problem
+Bai,dw256B,512,512,2500,1,0,1,0,0.9698189134808853,0.8832997987927566,electromagnetics problem
+Bai,dw4096,8192,8192,41746,1,0,1,0,0.9626274065685164,0.9154199201287477,electromagnetics problem
+Bai,lop163,163,163,935,1,0,0,0,0.4507772020725389,0,statistical/mathematical problem
+Bai,mhda416,416,416,8562,1,0,1,0,0.7675276752767528,0.2675871920009523,electromagnetics problem
+Bai,mhdb416,416,416,2312,1,0,1,1,1,1,electromagnetics problem
+Bai,odepa400,400,400,1201,1,0,1,0,0.9962546816479401,0.9937578027465668,2D/3D problem
+Bai,odepb400,400,400,399,1,0,1,0,1,1,2D/3D problem
+Bai,olm100,100,100,396,1,0,1,0,0.668918918918919,0.3310810810810811,computational fluid dynamics problem
+Bai,olm1000,1000,1000,3996,1,0,1,0,0.6668891855807744,0.3331108144192256,computational fluid dynamics problem
+Bai,olm2000,2000,2000,7996,1,0,1,0,0.6667778519012675,0.3332221480987325,computational fluid dynamics problem
+Bai,olm500,500,500,1996,1,0,1,0,0.6671122994652406,0.3328877005347594,computational fluid dynamics problem
+Bai,olm5000,5000,5000,19996,1,0,1,0,0.6667111229661243,0.3332888770338757,computational fluid dynamics problem
+Bai,pde225,225,225,1065,1,0,1,0,1,0.5,2D/3D problem
+Bai,pde2961,2961,2961,14585,1,0,1,0,1,0.5013764624913971,2D/3D problem
+Bai,pde900,900,900,4380,1,0,1,0,1,0.5,2D/3D problem
+Bai,qc2534,2534,2534,463360,0,0,1,0,1,0,electromagnetics problem
+Bai,qc324,324,324,26730,0,0,1,0,1,0,electromagnetics problem
+Bai,qh882,882,882,3354,1,0,0,0,0.9264705882352942,0,power network problem
+Bai,rbsa480,480,480,17088,1,0,1,0,0.07485627126598615,0.0007039774727208729,robotics problem
+Bai,rbsb480,480,480,17088,1,0,1,0,0.07568201818715166,0.0008213552361396304,robotics problem
+Bai,rdb2048,2048,2048,12032,1,0,1,0,1,0.7948717948717948,computational fluid dynamics problem
+Bai,rdb5000,5000,5000,29600,1,0,1,0,1,0.7967479674796748,computational fluid dynamics problem
+Bai,rdb968,968,968,5632,1,0,1,0,1,0.7924528301886793,computational fluid dynamics problem
+Bai,rw136,136,136,479,1,0,0,0,0.44258872651357,0.02922755741127349,statistical/mathematical problem
+Bai,rw496,496,496,1859,1,0,0,0,0.4690693921463152,0,statistical/mathematical problem
+Bai,rw5151,5151,5151,20199,1,0,0,0,0.4902222882320907,0,statistical/mathematical problem
+Bai,tub100,100,100,396,1,0,1,0,1,0,computational fluid dynamics problem
+Bai,tub1000,1000,1000,3996,1,0,1,0,1,0,computational fluid dynamics problem
+Boeing,bcsstk34,588,588,21418,1,0,1,1,1,1,structural problem
+Boeing,bcsstk35,30237,30237,1450163,1,0,1,0,1,1,structural problem
+Boeing,bcsstk36,23052,23052,1143140,1,0,1,1,1,1,structural problem
+Boeing,bcsstk37,25503,25503,1140977,1,0,1,0,1,1,structural problem
+Boeing,bcsstk38,8032,8032,355460,1,0,1,1,1,1,structural problem
+Boeing,bcsstm34,588,588,24270,1,0,1,0,1,1,structural problem
+Boeing,bcsstm35,30237,30237,20619,1,0,1,0,1,1,structural problem
+Boeing,bcsstm36,23052,23052,320606,1,0,1,0,1,1,structural problem
+Boeing,bcsstm37,25503,25503,15525,1,0,1,0,1,1,structural problem
+Boeing,bcsstm38,8032,8032,10485,1,0,1,0,1,1,structural problem
+Boeing,bcsstm39,46772,46772,46772,1,0,1,1,1,1,structural problem
+Boeing,crystk01,4875,4875,315891,1,0,1,0,1,1,materials problem
+Boeing,crystk02,13965,13965,968583,1,0,1,0,1,1,materials problem
+Boeing,crystk03,24696,24696,1751178,1,0,1,0,1,1,materials problem
+Boeing,crystm01,4875,4875,105339,1,0,1,1,1,1,materials problem
+Boeing,crystm02,13965,13965,322905,1,0,1,1,1,1,materials problem
+Boeing,crystm03,24696,24696,583770,1,0,1,1,1,1,materials problem
+Boeing,ct20stif,52329,52329,2600295,1,0,1,1,1,1,structural problem
+Boeing,msc00726,726,726,34518,1,0,1,1,1,1,structural problem
+Boeing,msc01050,1050,1050,26198,1,0,1,1,1,1,structural problem
+Boeing,msc01440,1440,1440,44998,1,0,1,1,1,1,structural problem
+Boeing,msc04515,4515,4515,97707,1,0,1,1,1,1,structural problem
+Boeing,msc10848,10848,10848,1229776,1,0,1,1,1,1,structural problem
+Boeing,msc23052,23052,23052,1142686,1,0,1,1,1,1,structural problem
+Boeing,nasa1824,1824,1824,39208,1,0,1,0,1,1,duplicate structural problem
+Boeing,nasa2910,2910,2910,174296,1,1,1,0,1,1,duplicate structural problem
+Boeing,nasa4704,4704,4704,104756,1,1,1,0,1,1,duplicate structural problem
+Boeing,pcrystk02,13965,13965,968583,1,1,1,0,1,1,duplicate materials problem
+Boeing,pcrystk03,24696,24696,1751178,1,1,1,0,1,1,duplicate materials problem
+Boeing,pct20stif,52329,52329,2698463,1,1,1,0,1,1,structural problem
+Boeing,pwtk,217918,217918,11524432,1,0,1,1,1,1,structural problem
+Bomhof,circuit_1,2624,2624,35823,1,0,0,0,0.999548641410646,0.2060602413263924,circuit simulation problem
+Bomhof,circuit_2,4510,4510,21199,1,0,0,0,0.8065636603186011,0.4152593124925141,circuit simulation problem
+Bomhof,circuit_3,12127,12127,48137,1,0,0,0,0.7700717835450027,0.3001104362230811,circuit simulation problem
+Bomhof,circuit_4,80209,80209,307604,1,0,0,0,0.8292028705104302,0.3635452210926232,circuit simulation problem
+Bova,rma10,46835,46835,2329092,1,0,1,0,1,0.2355549300354827,computational fluid dynamics problem
+Brethour,coater1,1348,1348,19457,1,0,1,0,0.5922916666666667,0.395,computational fluid dynamics problem
+Brethour,coater2,9540,9540,207308,1,0,1,0,0.5941884735804569,0.1280874338061923,computational fluid dynamics problem
+Brunetiere,thermal,3456,3456,66528,1,0,1,0,1,0.0730593607305936,thermal problem
+Cote,mplate,5962,5962,142190,0,0,1,0,1,0.05311683354376486,acoustics problem
+Cote,vibrobox,12328,12328,301700,1,0,1,0,1,1,acoustics problem
+DRIVCAV,cavity01,317,317,7280,1,0,1,0,0.8037831733483908,0.5198237885462555,computational fluid dynamics problem sequence
+DRIVCAV,cavity02,317,317,5923,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity03,317,317,7311,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity04,317,317,5923,1,0,1,0,0.8037831733483908,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity05,1182,1182,32632,1,0,1,0,0.9049083605322621,0.6103499322813317,computational fluid dynamics problem sequence
+DRIVCAV,cavity06,1182,1182,29675,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity07,1182,1182,32702,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity08,1182,1182,29675,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity09,1182,1182,32702,1,0,1,0,0.9049083605322621,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity10,2597,2597,76171,1,0,1,0,0.9372682821986997,0.6400172395216033,computational fluid dynamics problem sequence
+DRIVCAV,cavity11,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity12,2597,2597,76258,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity13,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity14,2597,2597,76258,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity15,2597,2597,71601,1,0,1,0,0.9372682821986997,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity16,4562,4562,137887,1,0,1,0,0.9531982436361479,0.6542773036781541,computational fluid dynamics problem sequence
+DRIVCAV,cavity17,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity18,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity19,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity20,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity21,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity22,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity23,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity24,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity25,4562,4562,131735,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+DRIVCAV,cavity26,4562,4562,138040,1,0,1,0,0.9531982436361479,0,subsequent computational fluid dynamics problem
+FIDAP,ex1,216,216,4317,1,0,1,0,1,0.9980657640232108,computational fluid dynamics problem
+FIDAP,ex10,2410,2410,54840,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex10hs,2548,2548,57308,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex11,16614,16614,1096948,1,0,1,0,1,0.9999981487206734,computational fluid dynamics problem
+FIDAP,ex12,3973,3973,79077,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex13,2568,2568,75628,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex14,3251,3251,65875,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex15,6867,6867,98671,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex18,5773,5773,71701,1,0,1,0,1,0.4973910933139182,computational fluid dynamics problem
+FIDAP,ex19,12005,12005,259577,1,0,1,0,1,0.4284006268883396,computational fluid dynamics problem
+FIDAP,ex2,441,441,26839,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex20,2203,2203,67830,1,0,1,0,1,0.9705407160221662,computational fluid dynamics problem
+FIDAP,ex21,656,656,18964,1,0,1,0,1,0.9422327996538296,computational fluid dynamics problem
+FIDAP,ex22,839,839,22460,1,0,1,0,1,0.88617551561714,computational fluid dynamics problem
+FIDAP,ex23,1409,1409,42760,1,0,1,0,1,0.9386855719486492,computational fluid dynamics problem
+FIDAP,ex24,2283,2283,47901,1,0,1,0,1,0.862361129122898,computational fluid dynamics problem
+FIDAP,ex25,848,848,24369,1,0,1,0,1,0.9755481671646816,computational fluid dynamics problem
+FIDAP,ex26,2163,2163,74464,1,0,1,0,1,0.7325380026938618,computational fluid dynamics problem
+FIDAP,ex27,974,974,37652,1,0,1,0,1,0.5304041225928939,computational fluid dynamics problem
+FIDAP,ex28,2603,2603,77031,1,0,1,0,1,0.9877623772912288,computational fluid dynamics problem
+FIDAP,ex29,2870,2870,23754,1,0,1,0,1,0.9963608504117986,computational fluid dynamics problem
+FIDAP,ex3,1821,1821,52685,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex31,3909,3909,91223,1,0,1,0,1,0.7266897116346767,computational fluid dynamics problem
+FIDAP,ex32,1159,1159,11047,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex33,1733,1733,22189,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex35,19716,19716,227872,1,0,1,0,1,0.4608754972232364,computational fluid dynamics problem
+FIDAP,ex36,3079,3079,53099,1,0,1,0,1,0.9952497822816879,computational fluid dynamics problem
+FIDAP,ex37,3565,3565,67591,1,0,1,0,1,0.9536750695030144,computational fluid dynamics problem
+FIDAP,ex4,1601,1601,31849,1,0,1,0,1,1,computational fluid dynamics problem
+FIDAP,ex40,7740,7740,456188,1,0,1,0,1,0.7709917560940942,computational fluid dynamics problem
+FIDAP,ex5,27,27,279,1,0,1,1,1,1,computational fluid dynamics problem
+FIDAP,ex6,1651,1651,49062,1,0,1,0,1,0.9792406332233408,computational fluid dynamics problem
+FIDAP,ex7,1633,1633,46626,1,0,1,0,1,0.8240392950014447,computational fluid dynamics problem
+FIDAP,ex8,3096,3096,90841,1,0,1,0,1,0.4310900906034532,computational fluid dynamics problem
+FIDAP,ex9,3363,3363,99471,1,0,1,1,1,1,computational fluid dynamics problem
+Gaertner,big,13209,13209,91465,1,0,0,0,1,0.999974442854222,directed weighted graph
+Gaertner,nopoly,10774,10774,70842,1,0,0,0,1,1,undirected weighted graph
+Gaertner,pesa,11738,11738,79566,1,0,0,0,1,0.999970513652179,directed weighted graph
+Garon,garon1,3175,3175,84723,1,0,1,0,1,0.6720847366622736,computational fluid dynamics problem
+Garon,garon2,13535,13535,373235,1,0,1,0,1,0.6726819817326322,computational fluid dynamics problem
+Goodwin,goodwin,7320,7320,324772,1,0,1,0,0.6353114022282706,0.001199255331506196,computational fluid dynamics problem
+Goodwin,rim,22560,22560,1014951,1,0,1,0,0.6390640220938991,0,computational fluid dynamics problem
+Graham,graham1,9035,9035,335472,1,0,1,0,0.718197839525901,0.0004322586733311619,computational fluid dynamics problem
+Grund,b1_ss,7,7,15,1,0,0,0,0,0,chemical process simulation problem
+Grund,b2_ss,1089,1089,3895,1,0,0,0,0.0146710837671557,0.0005136106831022085,chemical process simulation problem
+Grund,b_dyn,1089,1089,4144,1,0,0,0,0.01454716095729704,0.0004828585224529213,chemical process simulation problem
+Grund,bayer01,57735,57735,275094,1,0,0,0,0.0002304047924196823,2.908118011428904e-05,chemical process simulation problem
+Grund,bayer02,13935,13935,63307,1,0,0,0,0.001884570082449941,0.000284346713425904,chemical process simulation problem
+Grund,bayer03,6747,6747,29195,1,0,0,0,0.003132397173723459,0.0002740852405097985,chemical process simulation problem
+Grund,bayer04,20545,20545,85537,1,0,0,0,0.001584088708967702,0.0002104352502425851,chemical process simulation problem
+Grund,bayer05,3268,3268,20712,1,0,0,0,0.006682474671265359,0.00135200386286818,chemical process simulation problem
+Grund,bayer06,3008,3008,20715,1,0,0,0,0.006745484877058098,0.001351808043257857,chemical process simulation problem
+Grund,bayer07,3268,3268,20963,1,0,0,0,0.006682474671265359,0.0013358141310052,chemical process simulation problem
+Grund,bayer08,3008,3008,20698,1,0,0,0,0.006745484877058098,0.001352918438345574,chemical process simulation problem
+Grund,bayer09,3083,3083,11767,1,0,0,0,0.02112012068640392,0.0001700246535747683,chemical process simulation problem
+Grund,bayer10,13436,13436,71594,1,0,0,0,0.002528365095919851,0.0002234917796929782,chemical process simulation problem
+Grund,d_dyn,87,87,230,1,0,0,0,0.07692307692307693,0.01769911504424779,chemical process simulation problem
+Grund,d_dyn1,87,87,232,1,0,0,0,0.07692307692307693,0.01754385964912281,chemical process simulation problem
+Grund,d_ss,53,53,144,1,0,0,0,0.04137931034482759,0,chemical process simulation problem
+Grund,meg1,2904,2904,58142,1,0,0,0,0.002374602082078637,0.001996042329863202,circuit simulation problem
+Grund,meg4,5860,5860,25258,1,0,0,0,1,1,circuit simulation problem
+Grund,poli,4008,4008,8188,1,0,0,0,0.0291866028708134,0.002392344497607655,economic problem
+Grund,poli_large,15575,15575,33033,1,0,0,0,0.003543059603405909,0.0004582426394776034,economic problem
+Gset,G1,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G10,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G11,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G12,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G13,800,800,3200,1,0,0,0,1,1,undirected weighted random graph
+Gset,G14,800,800,9388,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G15,800,800,9322,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G16,800,800,9344,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G17,800,800,9334,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G18,800,800,9388,1,0,0,0,1,1,undirected weighted random graph
+Gset,G19,800,800,9322,1,0,0,0,1,1,undirected weighted random graph
+Gset,G2,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G20,800,800,9344,1,0,0,0,1,1,undirected weighted random graph
+Gset,G21,800,800,9334,1,0,0,0,1,1,undirected weighted random graph
+Gset,G22,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G23,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G24,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G25,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G26,2000,2000,39980,1,1,0,0,1,1,undirected random graph
+Gset,G27,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G28,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G29,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G3,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G30,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G31,2000,2000,39980,1,0,0,0,1,1,undirected weighted random graph
+Gset,G32,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G33,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G34,2000,2000,8000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G35,2000,2000,23556,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G36,2000,2000,23532,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G37,2000,2000,23570,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G38,2000,2000,23558,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G39,2000,2000,23556,1,0,0,0,1,1,undirected weighted random graph
+Gset,G4,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G40,2000,2000,23532,1,0,0,0,1,1,undirected weighted random graph
+Gset,G41,2000,2000,23570,1,0,0,0,1,1,undirected weighted random graph
+Gset,G42,2000,2000,23558,1,0,0,0,1,1,undirected weighted random graph
+Gset,G43,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G44,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G45,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G46,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G47,1000,1000,19980,1,1,0,0,1,1,undirected random graph
+Gset,G48,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G49,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G5,800,800,38352,1,1,0,0,1,1,undirected random graph
+Gset,G50,3000,3000,12000,1,1,0,0,1,1,undirected random graph
+Gset,G51,1000,1000,11818,1,1,0,0,1,1,undirected random graph
+Gset,G52,1000,1000,11832,1,1,0,0,1,1,undirected random graph
+Gset,G53,1000,1000,11828,1,1,0,0,1,1,undirected random graph
+Gset,G54,1000,1000,11832,1,1,0,0,1,1,undirected random graph
+Gset,G55,5000,5000,24996,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G56,5000,5000,24996,1,0,0,0,1,1,undirected weighted random graph
+Gset,G57,5000,5000,20000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G58,5000,5000,59140,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G59,5000,5000,59140,1,0,0,0,1,1,undirected weighted random graph
+Gset,G6,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G60,7000,7000,34296,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G61,7000,7000,34296,1,0,0,0,1,1,undirected weighted random graph
+Gset,G62,7000,7000,28000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G63,7000,7000,82918,1,1,0,0,1,1,duplicate undirected random graph
+Gset,G64,7000,7000,82918,1,0,0,0,1,1,undirected weighted random graph
+Gset,G65,8000,8000,32000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G66,9000,9000,36000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G67,10000,10000,40000,1,0,0,0,1,1,undirected weighted random graph
+Gset,G7,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G8,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gset,G9,800,800,38352,1,0,0,0,1,1,undirected weighted random graph
+Gupta,gupta1,31802,31802,2164210,1,1,0,0,1,1,optimization problem
+Gupta,gupta2,62064,62064,4248286,1,1,0,0,1,1,optimization problem
+Gupta,gupta3,16783,16783,9323427,1,1,0,0,1,1,optimization problem
+Hamm,add20,2395,2395,13151,1,0,0,0,1,0.5265898103384158,circuit simulation problem
+Hamm,add32,4960,4960,19848,1,0,0,0,1,0.3052122514777001,circuit simulation problem
+Hamm,bcircuit,68902,68902,375558,1,0,0,0,1,0.9084315976207868,circuit simulation problem
+Hamm,hcircuit,105676,105676,513072,1,0,0,0,0.9999410961997232,0.1951139297670355,circuit simulation problem
+Hamm,memplus,17758,17758,99147,1,0,0,0,1,0.4962095614886533,circuit simulation problem
+Hamm,scircuit,170998,170998,958936,1,0,0,0,0.9999467019956295,0.8008355096685118,circuit simulation problem
+Hollinger,g7jac010,2880,2880,18229,1,0,0,0,0.07102357505222322,0,economic problem
+Hollinger,g7jac010sc,2880,2880,18229,1,0,0,0,0.07102357505222322,0,economic problem
+Hollinger,g7jac020,5850,5850,42568,1,0,0,0,0.06184526063359838,0,economic problem
+Hollinger,g7jac020sc,5850,5850,42568,1,0,0,0,0.06184526063359838,0,economic problem
+Hollinger,g7jac040,11790,11790,107383,1,0,0,0,0.04830823961664447,0,economic problem
+Hollinger,g7jac040sc,11790,11790,107383,1,0,0,0,0.04830823961664447,0,economic problem
+Hollinger,g7jac050sc,14760,14760,145157,1,0,0,0,0.04349647420233192,0,economic problem
+Hollinger,g7jac060,17730,17730,183325,1,0,0,0,0.04035864774282543,0,economic problem
+Hollinger,g7jac060sc,17730,17730,183325,1,0,0,0,0.04035864774282543,0,economic problem
+Hollinger,g7jac080,23670,23670,259648,1,0,0,0,0.03703210435580416,0,economic problem
+Hollinger,g7jac080sc,23670,23670,259648,1,0,0,0,0.03703210435580416,0,economic problem
+Hollinger,g7jac100,29610,29610,335972,1,0,0,0,0.03529318979455026,0,economic problem
+Hollinger,g7jac100sc,29610,29610,335972,1,0,0,0,0.03529318979455026,0,economic problem
+Hollinger,g7jac120,35550,35550,412306,1,0,0,0,0.0342243022108217,0,economic problem
+Hollinger,g7jac120sc,35550,35550,412306,1,0,0,0,0.0342243022108217,0,economic problem
+Hollinger,g7jac140,41490,41490,488633,1,0,0,0,0.03350074170680273,0,economic problem
+Hollinger,g7jac140sc,41490,41490,488633,1,0,0,0,0.03350074170680273,0,economic problem
+Hollinger,g7jac160,47430,47430,564952,1,0,0,0,0.03297843351620031,0,economic problem
+Hollinger,g7jac160sc,47430,47430,564952,1,0,0,0,0.03297843351620031,0,economic problem
+Hollinger,g7jac180,53370,53370,641290,1,0,0,0,0.03258366406977314,0,economic problem
+Hollinger,g7jac180sc,53370,53370,641290,1,0,0,0,0.03258366406977314,0,economic problem
+Hollinger,g7jac200,59310,59310,717620,1,0,0,0,0.03227480202305086,0,economic problem
+Hollinger,g7jac200sc,59310,59310,717620,1,0,0,0,0.03227480202305086,0,economic problem
+Hollinger,jan99jac020,6774,6774,33744,1,0,0,0,0.003759634062284604,0,economic problem
+Hollinger,jan99jac020sc,6774,6774,33744,1,0,0,0,0.003759634062284604,0,economic problem
+Hollinger,jan99jac040,13694,13694,72734,1,0,0,0,0.003470816220281136,0,economic problem
+Hollinger,jan99jac040sc,13694,13694,72734,1,0,0,0,0.003470816220281136,0,economic problem
+Hollinger,jan99jac060,20614,20614,111903,1,0,0,0,0.003378124765408002,0,economic problem
+Hollinger,jan99jac060sc,20614,20614,111903,1,0,0,0,0.003378124765408002,0,economic problem
+Hollinger,jan99jac080,27534,27534,151063,1,0,0,0,0.003333611134261188,0,economic problem
+Hollinger,jan99jac080sc,27534,27534,151063,1,0,0,0,0.003333611134261188,0,economic problem
+Hollinger,jan99jac100,34454,34454,190224,1,0,0,0,0.003307461633445052,0,economic problem
+Hollinger,jan99jac100sc,34454,34454,190224,1,0,0,0,0.003307461633445052,0,economic problem
+Hollinger,jan99jac120,41374,41374,229385,1,0,0,0,0.003290255360374358,0,economic problem
+Hollinger,jan99jac120sc,41374,41374,229385,1,0,0,0,0.003290255360374358,0,economic problem
+Hollinger,mark3jac020,9129,9129,52883,1,0,0,0,0.07363006419249245,0.01351166293878669,economic problem
+Hollinger,mark3jac020sc,9129,9129,52883,1,0,0,0,0.07363006419249245,0.007349249098461679,economic problem
+Hollinger,mark3jac040,18289,18289,106803,1,0,0,0,0.07382338721543732,0.01389985784236298,economic problem
+Hollinger,mark3jac040sc,18289,18289,106803,1,0,0,0,0.07382338721543732,0.01173364623056615,economic problem
+Hollinger,mark3jac060,27449,27449,160723,1,0,0,0,0.07388687991287715,0.01402730528871371,economic problem
+Hollinger,mark3jac060sc,27449,27449,160723,1,0,0,0,0.07388687991287715,0.0121839735039789,economic problem
+Hollinger,mark3jac080,36609,36609,214643,1,0,0,0,0.07391845139171971,0.01409066941898426,economic problem
+Hollinger,mark3jac080sc,36609,36609,214643,1,0,0,0,0.07391845139171971,0.0125985842018466,economic problem
+Hollinger,mark3jac100,45769,45769,268563,1,0,0,0,0.07393733869014309,0.01412857360574466,economic problem
+Hollinger,mark3jac100sc,45769,45769,268563,1,0,0,0,0.07393733869014309,0.01261351717213372,economic problem
+Hollinger,mark3jac120,54929,54929,322483,1,0,0,0,0.07394990714529154,0.01415379562098285,economic problem
+Hollinger,mark3jac120sc,54929,54929,322483,1,0,0,0,0.07394990714529154,0.01276529035436745,economic problem
+Hollinger,mark3jac140,64089,64089,376395,1,0,0,0,0.07395887333678935,0.01417215070061332,economic problem
+Hollinger,mark3jac140sc,64089,64089,376395,1,0,0,0,0.07395887333678935,0.0128291219789848,economic problem
+LPnetlib,lp_25fv47,821,1876,10705,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_80bau3b,2262,12061,23264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_adlittle,56,138,424,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_afiro,27,51,102,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg,488,615,2862,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg2,516,758,4740,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_agg3,516,758,4756,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bandm,305,472,2494,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_beaconfd,173,295,3408,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_blend,74,114,522,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bnl1,643,1586,5532,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bnl2,2324,4486,14996,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_bore3d,233,334,1448,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_brandy,220,303,2202,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_capri,271,482,1896,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_a,3516,7248,18168,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_b,9648,77137,260785,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_c,3068,6411,15977,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cre_d,8926,73948,246614,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_cycle,1903,3371,21234,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_czprob,929,3562,10708,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_d2q06c,2171,5831,33081,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_d6cube,415,6184,37704,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_degen2,444,757,4201,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_degen3,1503,2604,25432,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_dfl001,6071,12230,35632,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_e226,223,472,2768,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_etamacro,400,816,2537,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fffff800,524,1028,6401,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_finnis,497,1064,2760,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit1d,24,1049,13427,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit1p,627,1677,9868,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit2d,25,10524,129042,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_fit2p,3000,13525,50284,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ganges,1309,1706,6937,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_gfrd_pnc,616,1160,2445,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_greenbea,2392,5598,31070,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_greenbeb,2392,5598,31070,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow15,300,645,5620,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow22,440,946,8252,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_grow7,140,301,2612,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_israel,174,316,2443,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_kb2,43,68,313,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_07,2426,3602,8404,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_11,14694,21349,49058,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_13,28632,42659,97246,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ken_18,105127,154699,358171,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_lotfi,153,366,1136,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_maros,846,1966,10137,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_maros_r7,3136,9408,144848,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_modszk1,687,1620,3168,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_07,1118,25067,144812,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_14,2337,54797,317097,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_30,4350,104374,604488,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_osa_60,10280,243246,1408073,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_02,2953,7716,16571,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_06,9881,29351,63220,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_10,16558,49932,107605,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pds_20,33874,108175,232647,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_perold,625,1506,6148,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot,1441,4860,44375,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot4,410,1123,5264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot87,2030,6680,74949,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot_ja,940,2267,14977,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilot_we,722,2928,9265,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_pilotnov,975,2446,13331,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap12,3192,8856,38304,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap15,6330,22275,94950,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_qap8,912,1632,7296,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_recipe,91,204,687,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc105,105,163,340,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc205,205,317,665,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc50a,50,78,160,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sc50b,50,78,148,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scagr25,471,671,1725,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scagr7,129,185,465,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm1,330,600,2732,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm2,660,1200,5469,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scfxm3,990,1800,8206,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scorpion,388,466,1534,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scrs8,490,1275,3288,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd1,77,760,2388,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd6,147,1350,4316,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_scsd8,397,2750,8584,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap1,300,660,1872,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap2,1090,2500,7334,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sctap3,1480,3340,9734,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_share1b,117,253,1179,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_share2b,96,162,777,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_shell,536,1777,3558,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship04l,402,2166,6380,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship04s,402,1506,4400,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship08l,778,4363,12882,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship08s,778,2467,7194,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship12l,1151,5533,16276,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_ship12s,1151,2869,8284,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_sierra,1227,2735,8001,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stair,356,614,4003,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standata,359,1274,3230,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standgub,361,1383,3338,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_standmps,467,1274,3878,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor1,117,165,501,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor2,2157,3045,9357,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_stocfor3,16675,23541,72721,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_truss,1000,8806,27836,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_tuff,333,628,4561,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_vtp_base,198,346,1051,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_wood1p,244,2595,70216,1,0,0,0,0,0,linear programming problem
+LPnetlib,lp_woodw,1098,8418,37487,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgdbg1,348,629,1662,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgetam,400,816,2537,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgindy,2671,10880,66266,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_bgprtr,20,40,70,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_box1,231,261,651,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ceria3d,3576,4400,21178,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_chemcom,288,744,1590,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_cplex1,3005,5224,10947,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_cplex2,224,378,1215,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ex72a,197,215,467,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_ex73a,193,211,457,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_forest6,66,131,246,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_galenet,8,14,22,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_gosh,3792,13455,99953,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_gran,2658,2525,20111,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_greenbea,2393,5596,31074,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_itest2,9,13,26,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_itest6,11,17,29,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein1,54,108,750,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein2,477,531,5062,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_klein3,994,1082,13101,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_mondou2,312,604,1208,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_pang,361,741,2933,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_pilot4i,410,1123,5264,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_qual,323,464,1646,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_reactor,318,808,2591,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_refinery,323,464,1626,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_vol1,323,464,1646,1,0,0,0,0,0,linear programming problem
+LPnetlib,lpi_woodinfe,35,89,140,1,0,0,0,0,0,linear programming problem
+Li,li,22695,22695,1215181,1,0,1,0,1,0.8685670104303111,electromagnetics problem
+Li,pli,22695,22695,1350309,1,1,1,0,1,1,duplicate electromagnetics problem
+Mallya,lhr01,1477,1477,18427,1,0,0,0,0.007324823611784348,0,chemical process simulation problem
+Mallya,lhr02,2954,2954,36875,1,0,0,0,0.007320486597050275,0,chemical process simulation problem
+Mallya,lhr04,4101,4101,81057,1,0,0,0,0.01515885315769082,0,chemical process simulation problem
+Mallya,lhr04c,4101,4101,82682,1,0,0,0,0.01515885315769082,0,chemical process simulation problem
+Mallya,lhr07,7337,7337,154660,1,0,0,0,0.0173680609288971,0,chemical process simulation problem
+Mallya,lhr07c,7337,7337,156508,1,0,0,0,0.0173680609288971,0,chemical process simulation problem
+Mallya,lhr10,10672,10672,228395,1,0,0,0,0.008791586915847653,1.752395305332977e-05,chemical process simulation problem
+Mallya,lhr10c,10672,10672,232633,1,0,0,0,0.008791586915847653,1.720467106819501e-05,chemical process simulation problem
+Mallya,lhr11,10964,10964,231806,1,0,0,0,0.008200580375103791,3.452591601570929e-05,chemical process simulation problem
+Mallya,lhr11c,10964,10964,233741,1,0,0,0,0.008200580375103791,4.280052387841227e-05,chemical process simulation problem
+Mallya,lhr14,14270,14270,305750,1,0,0,0,0.006622946983926842,0,chemical process simulation problem
+Mallya,lhr14c,14270,14270,307858,1,0,0,0,0.006622946983926842,0,chemical process simulation problem
+Mallya,lhr17,17576,17576,379761,1,0,0,0,0.001513390098553639,0.0001527473453564807,chemical process simulation problem
+Mallya,lhr17c,17576,17576,381975,1,0,0,0,0.001513390098553639,5.236643939631969e-06,chemical process simulation problem
+Mallya,lhr34,35152,35152,746972,1,0,0,0,0.00151326330781556,0.0001553140154832006,chemical process simulation problem
+Mallya,lhr34c,35152,35152,764014,1,0,0,0,0.00151326330781556,5.236205217354879e-06,chemical process simulation problem
+Mallya,lhr71,70304,70304,1494006,1,0,0,0,0.001513199920413014,0.0001553075692357127,chemical process simulation problem
+Mallya,lhr71c,70304,70304,1528092,1,0,0,0,0.001513199920413014,5.235985883782057e-06,chemical process simulation problem
+Mulvey,finan512,74752,74752,596992,1,0,0,1,1,1,economic problem
+Mulvey,pfinan512,74752,74752,596992,1,1,0,0,1,1,duplicate economic problem
+Nasa,barth,6691,6691,26439,1,1,1,0,0,0,duplicate structural problem
+Nasa,barth4,6019,6019,23492,1,1,1,0,0,0,duplicate structural problem
+Nasa,barth5,15606,15606,61484,1,1,1,0,0,0,duplicate structural problem
+Nasa,nasa1824,1824,1824,39208,1,0,1,1,1,1,structural problem
+Nasa,nasa2146,2146,2146,72250,1,0,1,1,1,1,structural problem
+Nasa,nasa2910,2910,2910,174296,1,0,1,1,1,1,structural problem
+Nasa,nasa4704,4704,4704,104756,1,0,1,1,1,1,structural problem
+Nasa,nasasrb,54870,54870,2677324,1,0,1,1,1,1,structural problem
+Nasa,pwt,36519,36519,326107,1,1,1,0,1,1,duplicate structural problem
+Nasa,shuttle_eddy,10429,10429,103599,1,1,1,0,1,1,duplicate structural problem
+Nasa,skirt,12598,12598,196520,1,1,1,0,1,1,duplicate structural problem
+Nemeth,nemeth01,9506,9506,725054,1,0,0,0,1,1,theoretical/quantum chemistry problem sequence
+Nemeth,nemeth02,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth03,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth04,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth05,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth06,9506,9506,394808,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth07,9506,9506,394812,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth08,9506,9506,394816,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth09,9506,9506,395506,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth10,9506,9506,401448,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth11,9506,9506,408264,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth12,9506,9506,446818,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth13,9506,9506,474472,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth14,9506,9506,496144,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth15,9506,9506,539802,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth16,9506,9506,587012,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth17,9506,9506,629620,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth18,9506,9506,695234,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth19,9506,9506,818302,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth20,9506,9506,971870,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth21,9506,9506,1173746,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth22,9506,9506,1358832,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth23,9506,9506,1506810,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth24,9506,9506,1506550,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth25,9506,9506,1511758,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Nemeth,nemeth26,9506,9506,1511760,1,0,0,0,1,1,subsequent theoretical/quantum chemistry problem
+Okunbor,aft01,8205,8205,125567,1,0,1,1,1,1,acoustics problem
+Okunbor,aft02,8184,8184,127762,0,0,1,0,1,0.9963538443526401,acoustics problem
+Qaplib,lp_nug05,210,225,1050,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug06,372,486,2232,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug07,602,931,4214,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug08,912,1632,7296,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug12,3192,8856,38304,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug15,6330,22275,94950,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug20,15240,72600,304800,1,0,0,0,0,0,linear programming problem
+Qaplib,lp_nug30,52260,379350,1567800,1,0,0,0,0,0,linear programming problem
+Ronis,xenon1,48600,48600,1181120,1,0,1,0,1,0.775813230671423,materials problem
+Ronis,xenon2,157464,157464,3866688,1,0,1,0,1,0.7756792256277864,materials problem
+Rothberg,3dtube,45330,45330,3213618,1,1,1,0,1,1,computational fluid dynamics problem
+Rothberg,cfd1,70656,70656,1825580,1,0,1,1,1,1,computational fluid dynamics problem
+Rothberg,cfd2,123440,123440,3085406,1,0,1,1,1,1,computational fluid dynamics problem
+Rothberg,gearbox,153746,153746,9080404,1,1,1,0,1,1,structural problem
+Rothberg,struct3,53570,53570,1173694,1,1,1,0,1,1,structural problem
+Rothberg,struct4,4350,4350,237798,1,1,1,0,1,1,structural problem
+Shyy,shyy161,76480,76480,329762,1,0,1,0,0.7263358696509635,0.1824427535660244,computational fluid dynamics problem
+Shyy,shyy41,4720,4720,20042,1,0,1,0,0.7234369459874719,0.1843753693416854,computational fluid dynamics problem
+Simon,appu,14000,14000,1853104,1,0,0,0,1,0.9429754924136972,directed weighted random graph
+Simon,bbmat,38744,38744,1771722,1,0,1,0,0.5295358625441292,0.0005851199495896658,computational fluid dynamics problem
+Simon,olafu,16146,16146,1015156,1,0,1,1,1,1,structural problem
+Simon,raefsky1,3242,3242,293409,1,0,1,0,1,0.09040311269027836,computational fluid dynamics problem sequence
+Simon,raefsky2,3242,3242,293551,1,0,1,0,1,0.09753745147411895,subsequent computational fluid dynamics problem
+Simon,raefsky3,21200,21200,1488768,1,0,1,0,1,0.4763745189320018,computational fluid dynamics problem
+Simon,raefsky4,19779,19779,1316789,1,0,1,1,1,1,structural problem
+Simon,raefsky5,6316,6316,167178,1,0,1,0,0,0,structural problem
+Simon,raefsky6,3402,3402,130371,1,0,1,0,0,0,structural problem
+Simon,venkat01,62424,62424,1717792,1,0,1,0,1,0.05542936676316082,computational fluid dynamics problem sequence
+Simon,venkat25,62424,62424,1717763,1,0,1,0,1,0.05539650790563141,subsequent computational fluid dynamics problem
+Simon,venkat50,62424,62424,1717777,1,0,1,0,1,0.05539603939461855,subsequent computational fluid dynamics problem
+TOKAMAK,utm1700b,1700,1700,21509,1,0,1,0,0.5232974910394266,0,electromagnetics problem
+TOKAMAK,utm300,300,300,3155,1,0,1,0,0.4651488616462347,0,electromagnetics problem
+TOKAMAK,utm3060,3060,3060,42211,1,0,1,0,0.524686470332814,0,electromagnetics problem
+TOKAMAK,utm5940,5940,5940,83842,1,0,1,0,0.5290493183743677,0,electromagnetics problem
+Vavasis,av41092,41092,41092,1683902,1,0,1,0,0.0009359570219938022,0,2D/3D problem
+Wang,swang1,3169,3169,20841,1,0,1,0,1,0,semiconductor device problem sequence
+Wang,swang2,3169,3169,20841,1,0,1,0,1,0,subsequent semiconductor device problem
+Wang,wang1,2903,2903,19093,1,0,1,0,1,0.808153180975911,semiconductor device problem sequence
+Wang,wang2,2903,2903,19093,1,0,1,0,1,0.808153180975911,subsequent semiconductor device problem
+Wang,wang3,26064,26064,177168,1,0,1,0,1,0.9780019059720457,semiconductor device problem
+Wang,wang4,26068,26068,177196,1,0,1,0,1,0.04647715843523371,semiconductor device problem
+Zhao,Zhao1,33861,33861,166453,1,0,1,0,0.9224990949680222,0,electromagnetics problem
+Zhao,Zhao2,33861,33861,166453,1,0,1,0,0.9224990949680222,0,electromagnetics problem
+Zitney,extr1,2837,2837,10967,1,0,0,0,0.004209049456331112,0.000364797081623347,chemical process simulation problem
+Zitney,hydr1,5308,5308,22680,1,0,0,0,0.004126315789473685,0.0006173383896287151,chemical process simulation problem
+Zitney,radfr1,1048,1048,13299,1,0,0,0,0.05374309287714783,0,chemical process simulation problem
+Zitney,rdist1,4134,4134,94408,1,0,0,0,0.05878038669628716,0,chemical process simulation problem
+Zitney,rdist2,3198,3198,56834,1,0,0,0,0.04562603575332323,0,chemical process simulation problem
+Zitney,rdist3a,2398,2398,61896,1,0,0,0,0.1404154186743065,0,chemical process simulation problem
+Cunningham,k3plates,11107,11107,378927,1,0,1,0,1,0.999260507857104,acoustics problem
+Cunningham,m3plates,11107,11107,6639,1,0,1,0,1,1,acoustics problem
+Cunningham,qa8fk,66127,66127,1660579,1,0,1,0,1,1,acoustics problem
+Cunningham,qa8fm,66127,66127,1660579,1,0,1,1,1,1,acoustics problem
+Boeing,bcsstk39,46772,46772,2060662,1,0,1,0,1,1,structural problem
+Chen,pkustk01,22044,22044,979380,1,1,1,0,1,1,structural problem
+Chen,pkustk02,10800,10800,810000,1,1,1,0,1,1,structural problem
+Chen,pkustk03,63336,63336,3130416,1,1,1,0,1,1,structural problem
+Chen,pkustk04,55590,55590,4218660,1,1,1,0,1,1,structural problem
+Chen,pkustk05,37164,37164,2205144,1,1,1,0,1,1,structural problem
+Chen,pkustk06,43164,43164,2571768,1,1,1,0,1,1,structural problem
+Chen,pkustk07,16860,16860,2418804,1,1,1,0,1,1,structural problem
+Chen,pkustk08,22209,22209,3226671,1,1,1,0,1,1,structural problem
+Chen,pkustk09,33960,33960,1583640,1,1,1,0,1,1,structural problem
+Chen,pkustk10,80676,80676,4308984,1,1,1,0,1,1,structural problem
+Chen,pkustk11,87804,87804,5217912,1,1,1,0,1,1,structural problem
+Chen,pkustk12,94653,94653,7512317,1,1,1,0,1,1,structural problem
+Chen,pkustk13,94893,94893,6616827,1,1,1,0,1,1,structural problem
+Chen,pkustk14,151926,151926,14836504,1,1,1,0,1,1,structural problem
+MathWorks,pivtol,102,102,306,1,0,0,0,0.9901960784313726,0,statistical/mathematical problem
+Kim,kim1,38415,38415,933195,0,0,1,0,0.9897360244976419,0,2D/3D problem
+Kim,kim2,456976,456976,11330020,0,0,1,0,0.9970363405132914,0,2D/3D problem
+Langemyr,comsol,1500,1500,97645,1,0,1,0,0.9990327110094128,0.0008944822923708982,structural problem
+Pothen,barth,6691,6691,46187,1,1,1,0,1,1,structural problem
+Pothen,barth4,6019,6019,40965,1,1,1,0,1,1,structural problem
+Pothen,barth5,15606,15606,107362,1,1,1,0,1,1,structural problem
+Pothen,bodyy4,17546,17546,121550,1,0,1,1,1,1,structural problem
+Pothen,bodyy5,18589,18589,128853,1,0,1,1,1,1,structural problem
+Pothen,bodyy6,19366,19366,134208,1,0,1,1,1,1,structural problem
+Pothen,commanche_dual,7920,7920,31680,1,1,1,0,1,1,structural problem
+Pothen,mesh1e1,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh1em1,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh1em6,48,48,306,1,0,1,1,1,1,structural problem
+Pothen,mesh2e1,306,306,2018,1,0,1,1,1,1,structural problem
+Pothen,mesh2em5,306,306,2018,1,0,1,1,1,1,structural problem
+Pothen,mesh3e1,289,289,1377,1,0,1,1,1,1,structural problem
+Pothen,mesh3em5,289,289,1377,1,0,1,1,1,1,structural problem
+Pothen,onera_dual,85567,85567,419201,1,1,1,0,1,1,structural problem
+Pothen,pwt,36519,36519,326107,1,1,1,0,1,1,structural problem
+Pothen,shuttle_eddy,10429,10429,103599,1,1,1,0,1,1,structural problem
+Pothen,skirt,12598,12598,196520,1,1,1,0,1,1,structural problem
+Pothen,sphere2,66,66,450,1,1,1,0,1,1,structural problem
+Pothen,sphere3,258,258,1794,1,1,1,0,1,1,structural problem
+Pothen,tandem_dual,94069,94069,460493,1,1,1,0,1,1,structural problem
+Pothen,tandem_vtx,18454,18454,253350,1,1,1,0,1,1,structural problem
+Norris,fv1,9604,9604,85264,1,0,1,1,1,1,2D/3D problem
+Norris,fv2,9801,9801,87025,1,0,1,1,1,1,2D/3D problem
+Norris,fv3,9801,9801,87025,1,0,1,1,1,1,2D/3D problem
+Norris,heart1,3557,3557,1385317,1,0,1,0,1,0,2D/3D problem
+Norris,heart2,2339,2339,680341,1,0,1,0,1,0,2D/3D problem
+Norris,heart3,2339,2339,680341,1,0,1,0,1,0,2D/3D problem
+Norris,lung1,1650,1650,7419,1,0,1,0,0.5713295198474606,0,computational fluid dynamics problem
+Norris,lung2,109460,109460,492564,1,0,1,0,0.5714270798529903,0,computational fluid dynamics problem
+Norris,stomach,213360,213360,3021648,1,0,1,0,0.8474914253808726,0,2D/3D problem
+Norris,torso1,116158,116158,8516500,1,0,1,0,0.4243874832715144,0,2D/3D problem
+Norris,torso2,115967,115967,1033473,1,0,1,0,0.9916360219987662,0,2D/3D problem
+Norris,torso3,259156,259156,4429042,1,0,1,0,0.9513722917125312,0,2D/3D problem
+Shen,e40r0100,17281,17281,553562,1,0,1,0,0.3079877899832364,0.001965387548691824,2D/3D problem
+Shen,shermanACa,3432,3432,25220,1,0,1,0,0.163759867817147,0.02157150725169818,2D/3D problem
+Shen,shermanACb,18510,18510,145149,1,0,1,0,0.1493062958488302,0.02665845434660729,2D/3D problem
+Shen,shermanACd,6136,6136,53329,1,0,1,0,0.1520140698832454,0.01665501239590617,2D/3D problem
+Pereyra,landmark,71952,2704,1146848,1,0,0,0,0,0,least squares problem
+vanHeukelum,cage3,5,5,19,1,0,0,0,1,0,directed weighted graph
+vanHeukelum,cage4,9,9,49,1,0,0,0,1,0,directed weighted graph
+vanHeukelum,cage5,37,37,233,1,0,0,0,1,0.04081632653061224,directed weighted graph
+vanHeukelum,cage6,93,93,785,1,0,0,0,1,0.09248554913294797,directed weighted graph
+vanHeukelum,cage7,340,340,3084,1,0,0,0,1,0.1020408163265306,directed weighted graph
+vanHeukelum,cage8,1015,1015,11003,1,0,0,0,1,0.144973968762515,directed weighted graph
+vanHeukelum,cage9,3534,3534,41594,1,0,0,0,1,0.1535470310036784,directed weighted graph
+vanHeukelum,cage10,11397,11397,150645,1,0,0,0,1,0.1743077099850626,directed weighted graph
+vanHeukelum,cage11,39082,39082,559722,1,0,0,0,1,0.1821988322065151,directed weighted graph
+vanHeukelum,cage12,130228,130228,2032536,1,0,0,0,1,0.1935123018985359,directed weighted graph
+vanHeukelum,cage13,445315,445315,7479343,1,0,0,0,1,0.2004785878020389,directed weighted graph
+vanHeukelum,cage14,1505785,1505785,27130349,1,0,0,0,1,0.2073316837703073,directed weighted graph
+vanHeukelum,cage15,5154859,5154859,99199551,1,0,0,0,1,0.2131193964673732,directed weighted graph
+Hohn,fd12,7500,7500,28462,1,0,1,0,0.0002810765230834094,0,materials problem
+Hohn,fd15,11532,11532,44206,1,0,1,0,0,0,materials problem
+Hohn,fd18,16428,16428,63406,1,0,1,0,3.154275620603729e-05,0,materials problem
+Hohn,sinc12,7500,7500,283992,1,0,1,0,0.01755337541442645,0,materials problem
+Hohn,sinc15,11532,11532,551184,1,0,1,0,0.01378652867239141,0,materials problem
+Hohn,sinc18,16428,16428,948696,1,0,1,0,0.01157085557378834,0,materials problem
+Alemdar,Alemdar,6245,6245,42581,1,0,1,0,1,1,2D/3D problem
+Andrews,Andrews,60000,60000,760154,1,0,1,1,1,1,computer graphics/vision problem
+FEMLAB,ns3Da,20414,20414,1679599,1,0,1,0,0.9999825339398674,0,computational fluid dynamics problem
+FEMLAB,poisson2D,367,367,2417,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,poisson3Da,13514,13514,352762,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,poisson3Db,85623,85623,2374949,1,0,1,0,1,0,computational fluid dynamics problem
+FEMLAB,problem1,415,415,2779,1,0,1,0,1,0.6548223350253807,2D/3D problem
+FEMLAB,sme3Da,12504,12504,874887,1,0,1,0,0.9999710105602732,0.4370888572710733,structural problem
+FEMLAB,sme3Db,29067,29067,2081063,1,0,1,0,0.999978557463075,0.4406373111838425,structural problem
+FEMLAB,sme3Dc,42930,42930,3148656,1,0,1,0,0.9999793929020139,0.4391179389295772,structural problem
+FEMLAB,waveguide3D,21036,21036,303468,0,0,1,0,1,0,electromagnetics problem
+Lucifora,cell1,7055,7055,30082,1,0,0,0,0.9970503597122302,0,directed weighted graph
+Lucifora,cell2,7055,7055,30082,1,0,0,0,0.9970503597122302,0.004342728101793546,directed weighted graph
+ND,nd3k,9000,9000,3279690,1,0,1,1,1,1,2D/3D problem
+ND,nd6k,18000,18000,6897316,1,0,1,1,1,1,2D/3D problem
+ND,nd12k,36000,36000,14220946,1,0,1,1,1,1,2D/3D problem
+ND,nd24k,72000,72000,28715634,1,0,1,1,1,1,2D/3D problem
+Schenk_AFE,af_shell1,504855,504855,17562051,1,0,1,0,1,1,structural problem sequence
+Schenk_AFE,af_shell2,504855,504855,17562051,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell3,504855,504855,17562051,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell4,504855,504855,17562051,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell5,504855,504855,17579155,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell6,504855,504855,17579155,1,0,1,0,1,1,subsequent structural problem
+Schenk_AFE,af_shell7,504855,504855,17579155,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell8,504855,504855,17579155,1,0,1,1,1,1,subsequent structural problem
+Schenk_AFE,af_shell9,504855,504855,17588845,1,0,1,0,1,1,subsequent structural problem
+Schenk_IBMNA,c-62,41731,41731,559341,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-64,51035,51035,707985,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-66,49989,49989,444853,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-67,57975,57975,530229,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMNA,c-73,169422,169422,1279274,1,0,0,0,1,1,optimization problem sequence
+Schenk_IBMSDS,2D_27628_bjtcai,27628,27628,206670,1,0,1,0,0.9995761793531919,0.2185967538342959,semiconductor device problem
+Schenk_IBMSDS,2D_54019_highK,54019,54019,486129,1,0,1,0,0.9980889117620531,0.189734095484946,semiconductor device problem
+Schenk_IBMSDS,3D_28984_Tetra,28984,28984,285092,1,0,1,0,0.9874041102377119,0.3613007012666531,semiconductor device problem
+Schenk_IBMSDS,3D_51448_3D,51448,51448,537038,1,0,1,0,0.9920908271502504,0.1870343293725159,semiconductor device problem
+Schenk_IBMSDS,ibm_matrix_2,51448,51448,537038,1,0,1,0,0.9920908271502504,0.185666920653226,semiconductor device problem
+Schenk_IBMSDS,matrix_9,103430,103430,1205518,1,0,1,0,0.9966503478484926,0.1744833443427385,semiconductor device problem
+Schenk_IBMSDS,matrix-new_3,125329,125329,893984,1,0,1,0,0.9871118002084263,0.2826079320371298,semiconductor device problem
+Schenk_ISEI,barrier2-10,115625,115625,2158759,1,0,1,0,1,0.1989334147759642,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-11,115625,115625,2158759,1,0,1,0,1,0.1988805553760946,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-12,115625,115625,2158759,1,0,1,0,1,0.1983617501551521,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-1,113076,113076,2129496,1,0,1,0,1,0.1972208170916773,semiconductor device problem sequence
+Schenk_ISEI,barrier2-2,113076,113076,2129496,1,0,1,0,1,0.1971642812509299,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-3,113076,113076,2129496,1,0,1,0,1,0.1980361234266671,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-4,113076,113076,2129496,1,0,1,0,1,0.189249263546285,subsequent semiconductor device problem
+Schenk_ISEI,barrier2-9,115625,115625,2158759,1,0,1,0,1,0.2036036406422221,semiconductor device problem sequence
+Schenk_ISEI,igbt3,10938,10938,130500,1,0,1,0,1,0.1720279018417223,semiconductor device problem
+Schenk_ISEI,nmos3,18588,18588,237130,1,0,1,0,1,0.1670891636390259,semiconductor device problem
+Schenk_ISEI,ohne2,181343,181343,6869939,1,0,1,0,1,0.09493801090692276,semiconductor device problem
+Schenk_ISEI,para-10,155924,155924,2094873,1,0,1,0,1,0.1980866954210761,subsequent semiconductor device problem
+Schenk_ISEI,para-4,153226,153226,2930882,1,0,1,0,1,0.2900222345747638,semiconductor device problem
+Schenk_ISEI,para-5,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,semiconductor device problem sequence
+Schenk_ISEI,para-6,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,subsequent semiconductor device problem
+Schenk_ISEI,para-7,155924,155924,2094873,1,0,1,0,1,0.3692588097985042,subsequent semiconductor device problem
+Schenk_ISEI,para-8,155924,155924,2094873,1,0,1,0,1,0.1779654854253516,subsequent semiconductor device problem
+Schenk_ISEI,para-9,155924,155924,2094873,1,0,1,0,1,0.1810599453621524,subsequent semiconductor device problem
+Kamvar,Stanford,281903,281903,2312497,1,1,0,0,0.2766368994208425,0.2766368994208425,directed graph
+Kamvar,Stanford_Berkeley,683446,683446,7583376,1,1,0,0,0.2502051856587356,0.2502051856587356,directed graph
+Sumner,graphics,29493,11822,117954,1,0,1,0,0,0,computer graphics/vision problem
+Tromble,language,399130,399130,1216334,1,0,0,0,0.05790231080611451,0,directed weighted graph
+Sanghavi,ecl32,51993,51993,380415,1,0,1,0,0.9219175329301935,0.6030290297239527,semiconductor device problem
+Sandia,adder_dcop_01,1813,1813,11156,1,0,0,0,0.6544094067343666,0.01582041688936398,subsequent circuit simulation problem
+Sandia,adder_dcop_02,1813,1813,11246,1,0,0,0,0.6481736368448915,0.02604552673372154,subsequent circuit simulation problem
+Sandia,adder_dcop_03,1813,1813,11148,1,0,0,0,0.6429870546699475,0.03509147319995721,subsequent circuit simulation problem
+Sandia,adder_dcop_04,1813,1813,11107,1,0,0,0,0.6505480335267569,0.003868471953578337,subsequent circuit simulation problem
+Sandia,adder_dcop_05,1813,1813,11097,1,0,0,0,0.6473752151462995,0.01333907056798623,subsequent circuit simulation problem
+Sandia,adder_dcop_06,1813,1813,11224,1,0,0,0,0.6486257030669638,0.01464501751034702,subsequent circuit simulation problem
+Sandia,adder_dcop_07,1813,1813,11226,1,0,0,0,0.6484880636604774,0.005941644562334218,subsequent circuit simulation problem
+Sandia,adder_dcop_08,1813,1813,11242,1,0,0,0,0.6478127317021501,0.005296049147336087,subsequent circuit simulation problem
+Sandia,adder_dcop_09,1813,1813,11239,1,0,0,0,0.6484424666242848,0.006145369781733418,subsequent circuit simulation problem
+Sandia,adder_dcop_10,1813,1813,11232,1,0,0,0,0.6478634291167427,0.00572579790054077,subsequent circuit simulation problem
+Sandia,adder_dcop_11,1813,1813,11243,1,0,0,0,0.6481677610675705,0.00487184918449481,subsequent circuit simulation problem
+Sandia,adder_dcop_12,1813,1813,11246,1,0,0,0,0.6481736368448915,0.004446797247220751,subsequent circuit simulation problem
+Sandia,adder_dcop_13,1813,1813,11245,1,0,0,0,0.6482422702244811,0.002753070732740364,subsequent circuit simulation problem
+Sandia,adder_dcop_14,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008258337744838539,subsequent circuit simulation problem
+Sandia,adder_dcop_15,1813,1813,11246,1,0,0,0,0.6481736368448915,0.005929062996294336,subsequent circuit simulation problem
+Sandia,adder_dcop_16,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008258337744838539,subsequent circuit simulation problem
+Sandia,adder_dcop_17,1813,1813,11246,1,0,0,0,0.6481736368448915,0.009105346744309158,subsequent circuit simulation problem
+Sandia,adder_dcop_18,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_19,1813,1813,11245,1,0,0,0,0.6482422702244811,0.007623888182973317,subsequent circuit simulation problem
+Sandia,adder_dcop_20,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_21,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_22,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_23,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_24,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_25,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_26,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_27,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_28,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_29,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_30,1813,1813,11246,1,0,0,0,0.6481736368448915,0.008046585494970884,subsequent circuit simulation problem
+Sandia,adder_dcop_31,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_32,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_33,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_34,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_35,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_36,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_37,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_38,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_39,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_40,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_41,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_42,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_43,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_44,1813,1813,11245,1,0,0,0,0.6482422702244811,0.007623888182973317,subsequent circuit simulation problem
+Sandia,adder_dcop_45,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_46,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_47,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_48,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_49,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_50,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_51,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_52,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_53,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007411328745367919,subsequent circuit simulation problem
+Sandia,adder_dcop_54,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_55,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_56,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007623080995235574,subsequent circuit simulation problem
+Sandia,adder_dcop_57,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_58,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_59,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_60,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_61,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_62,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_63,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_64,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_65,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_66,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_67,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_68,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_dcop_69,1813,1813,11246,1,0,0,0,0.6481736368448915,0.007834833245103229,subsequent circuit simulation problem
+Sandia,adder_trans_01,1814,1814,14579,1,0,0,0,1,0.03115703773289494,circuit simulation problem sequence
+Sandia,adder_trans_02,1814,1814,14579,1,0,0,0,1,0.03115703773289494,subsequent circuit simulation problem
+Sandia,fpga_dcop_01,1220,1220,5892,1,0,0,0,0.8183347350714887,0.2733389402859546,circuit simulation problem sequence
+Sandia,fpga_dcop_02,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3271656854499579,subsequent circuit simulation problem
+Sandia,fpga_dcop_03,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3448275862068966,subsequent circuit simulation problem
+Sandia,fpga_dcop_04,1220,1220,5884,1,0,0,0,0.818871103622578,0.3546756529064869,subsequent circuit simulation problem
+Sandia,fpga_dcop_05,1220,1220,5852,1,0,0,0,0.8210347752332485,0.359626802374894,subsequent circuit simulation problem
+Sandia,fpga_dcop_06,1220,1220,5860,1,0,0,0,0.8204911092294666,0.3539373412362405,subsequent circuit simulation problem
+Sandia,fpga_dcop_07,1220,1220,5855,1,0,0,0,0.8205128205128205,0.3432930705657978,subsequent circuit simulation problem
+Sandia,fpga_dcop_08,1220,1220,5888,1,0,0,0,0.8186026936026936,0.3425925925925926,subsequent circuit simulation problem
+Sandia,fpga_dcop_09,1220,1220,5888,1,0,0,0,0.8186026936026936,0.3337542087542087,subsequent circuit simulation problem
+Sandia,fpga_dcop_10,1220,1220,5884,1,0,0,0,0.818871103622578,0.3323504633529907,subsequent circuit simulation problem
+Sandia,fpga_dcop_11,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3301093355761144,subsequent circuit simulation problem
+Sandia,fpga_dcop_12,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_13,1220,1220,5892,1,0,0,0,0.8183347350714887,0.325063078216989,subsequent circuit simulation problem
+Sandia,fpga_dcop_14,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3187552565180824,subsequent circuit simulation problem
+Sandia,fpga_dcop_15,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3221194280908327,subsequent circuit simulation problem
+Sandia,fpga_dcop_16,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3221194280908327,subsequent circuit simulation problem
+Sandia,fpga_dcop_17,1220,1220,5892,1,0,0,0,0.8183347350714887,0.31959629941127,subsequent circuit simulation problem
+Sandia,fpga_dcop_18,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3191757779646762,subsequent circuit simulation problem
+Sandia,fpga_dcop_19,1220,1220,5892,1,0,0,0,0.8183347350714887,0.31959629941127,subsequent circuit simulation problem
+Sandia,fpga_dcop_20,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3212783851976451,subsequent circuit simulation problem
+Sandia,fpga_dcop_21,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_22,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3263246425567704,subsequent circuit simulation problem
+Sandia,fpga_dcop_23,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3216989066442388,subsequent circuit simulation problem
+Sandia,fpga_dcop_24,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3254835996635829,subsequent circuit simulation problem
+Sandia,fpga_dcop_25,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3259041211101766,subsequent circuit simulation problem
+Sandia,fpga_dcop_26,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3254835996635829,subsequent circuit simulation problem
+Sandia,fpga_dcop_27,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3271656854499579,subsequent circuit simulation problem
+Sandia,fpga_dcop_28,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3284272497897393,subsequent circuit simulation problem
+Sandia,fpga_dcop_29,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_30,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3292682926829268,subsequent circuit simulation problem
+Sandia,fpga_dcop_31,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3284272497897393,subsequent circuit simulation problem
+Sandia,fpga_dcop_32,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_33,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3280067283431455,subsequent circuit simulation problem
+Sandia,fpga_dcop_34,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3275862068965517,subsequent circuit simulation problem
+Sandia,fpga_dcop_35,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3288477712363331,subsequent circuit simulation problem
+Sandia,fpga_dcop_36,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3288477712363331,subsequent circuit simulation problem
+Sandia,fpga_dcop_37,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_38,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_39,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3296888141295206,subsequent circuit simulation problem
+Sandia,fpga_dcop_40,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3313708999158957,subsequent circuit simulation problem
+Sandia,fpga_dcop_41,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3301093355761144,subsequent circuit simulation problem
+Sandia,fpga_dcop_42,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3313708999158957,subsequent circuit simulation problem
+Sandia,fpga_dcop_43,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_44,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_dcop_45,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_dcop_46,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_47,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_48,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_49,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_50,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3317914213624895,subsequent circuit simulation problem
+Sandia,fpga_dcop_51,1220,1220,5892,1,0,0,0,0.8183347350714887,0.3322119428090833,subsequent circuit simulation problem
+Sandia,fpga_trans_01,1220,1220,7382,1,0,0,0,1,0.214193962748876,circuit simulation problem sequence
+Sandia,fpga_trans_02,1220,1220,7382,1,0,0,0,1,0.2138728323699422,subsequent circuit simulation problem
+Sandia,init_adder1,1813,1813,11156,1,0,0,0,0.6544094067343666,0.01582041688936398,circuit simulation problem sequence
+Sandia,mult_dcop_01,25187,25187,193276,1,0,0,0,0.6144759258929472,0.003383612629779353,circuit simulation problem sequence
+Sandia,mult_dcop_02,25187,25187,193276,1,0,0,0,0.6144759258929472,0.003383612629779353,subsequent circuit simulation problem
+Sandia,mult_dcop_03,25187,25187,193216,1,0,0,0,0.6142197994049846,0.01294544504421048,subsequent circuit simulation problem
+Sandia,oscil_dcop_01,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,circuit simulation problem sequence
+Sandia,oscil_dcop_02,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_03,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_04,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_05,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_06,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_07,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_08,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_09,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_10,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_11,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_12,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_13,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_14,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_15,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_16,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_17,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_18,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_19,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_20,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_21,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_22,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_23,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_24,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_25,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_26,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_27,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_28,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_29,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_30,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_31,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_32,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_33,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_34,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_35,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_36,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_37,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_38,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_39,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_40,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_41,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_42,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_43,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_44,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_45,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_46,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_47,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_48,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_49,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_50,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_51,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_52,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_53,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_54,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_55,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_56,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_dcop_57,430,430,1544,1,0,0,0,0.9762308998302207,0.6977928692699491,subsequent circuit simulation problem
+Sandia,oscil_trans_01,430,430,1614,1,0,0,0,0.9737274220032841,0.7175697865353038,circuit simulation problem
+MathWorks,Pd,8081,8081,13036,1,0,0,0,0,0,counter-example problem
+MathWorks,Pd_rhs,8081,12406,6323,1,0,0,0,0,0,counter-example problem
+MathWorks,Harvard500,500,500,2636,1,1,0,0,0.4057744830277019,0.4057744830277019,directed graph
+HB,cegb2802,2802,2802,277362,1,1,1,0,1,1,structural problem
+HB,cegb2919,2919,2919,321543,1,1,1,0,1,1,structural problem
+HB,cegb3024,3024,3024,79848,1,1,1,0,1,1,structural problem
+HB,cegb3306,3306,3306,74916,1,1,1,0,1,1,structural problem
+HB,lap_25,25,25,169,1,1,1,0,1,1,structural problem
+HB,lock1074,1074,1074,51588,1,1,1,0,1,1,structural problem
+HB,lock2232,2232,2232,80352,1,1,1,0,1,1,structural problem
+HB,lock3491,3491,3491,160444,1,1,1,0,1,1,structural problem
+HB,lock_700,700,700,22175,1,1,1,0,1,1,structural problem
+HB,man_5976,5976,5976,225046,1,1,1,0,1,1,structural problem
+IBM_Austin,coupled,11341,11341,97193,1,0,0,0,1,0.7823373235828404,circuit simulation problem
+ACUSIM,Pres_Poisson,14822,14822,715804,1,0,1,1,1,1,computational fluid dynamics problem
+Rajat,rajat01,6833,6833,43250,1,1,0,0,0.9957479284779764,0.9957479284779764,circuit simulation problem
+Rajat,rajat02,1960,1960,11187,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat03,7602,7602,32653,1,0,0,0,1,0.4024380527448012,circuit simulation problem
+Rajat,rajat04,1041,1041,8725,1,0,0,0,1,0.03991188285603214,circuit simulation problem
+Rajat,rajat05,301,301,1250,1,0,0,0,0.7697974217311234,0.7058823529411765,circuit simulation problem
+Rajat,rajat06,10922,10922,46983,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat07,14842,14842,63913,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat08,19362,19362,83443,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat09,24482,24482,105573,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat10,30202,30202,130303,1,1,0,0,1,1,circuit simulation problem
+Rajat,rajat11,135,135,665,1,0,0,0,0.8911764705882353,0.6303939962476548,circuit simulation problem
+Rajat,rajat12,1879,1879,12818,1,0,0,0,1,0.4548776032151991,circuit simulation problem
+Rajat,rajat13,7598,7598,48762,1,0,0,0,1,0.2965265970366772,circuit simulation problem
+Rajat,rajat14,180,180,1475,1,0,0,0,1,0.0245398773006135,circuit simulation problem
+Hamrle,Hamrle1,32,32,98,1,0,0,0,0.06451612903225806,0,circuit simulation problem
+Hamrle,Hamrle2,5952,5952,22162,1,0,0,0,0.0009930486593843098,0.0001805543017062382,circuit simulation problem
+Hamrle,Hamrle3,1447360,1447360,5514242,1,0,0,0,2.538882993038383e-06,0,circuit simulation problem
+Oberwolfach,gyro_k,17361,17361,1021159,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,gyro_m,17361,17361,340431,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t2dah_a,11445,11445,176117,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t2dah_e,11445,11445,176117,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t2dal_a,4257,4257,37465,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t2dal_e,4257,4257,4257,1,0,1,1,1,1,duplicate model reduction problem
+Oberwolfach,t3dh_a,79171,79171,4352105,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dh_e,79171,79171,4352105,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dl_a,20360,20360,509866,1,0,1,0,1,1,duplicate model reduction problem
+Oberwolfach,t3dl_e,20360,20360,20360,1,0,1,1,1,1,duplicate model reduction problem
+LiuWenzhuo,powersim,15838,15838,64424,1,0,0,0,0.5913695769855386,0.5337339974478245,power network problem
+Lin,Lin,256000,256000,1766400,1,0,1,0,1,1,structural problem
+Cannizzo,sts4098,4098,4098,72356,1,0,1,1,1,1,structural problem
+GHS_indef,aug2d,29008,29008,76832,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug2dc,30200,30200,80000,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug3d,24300,24300,69984,1,0,1,0,1,1,2D/3D problem
+GHS_indef,aug3dcqp,35543,35543,128115,1,0,1,0,1,1,2D/3D problem
+GHS_indef,bmw3_2,227362,227362,11288630,1,0,1,0,1,1,structural problem
+GHS_indef,c-55,32780,32780,403450,1,0,0,0,1,1,optimization problem
+GHS_indef,c-58,37595,37595,552551,1,0,0,0,1,1,optimization problem
+GHS_indef,c-59,41282,41282,480536,1,0,0,0,1,1,optimization problem
+GHS_indef,c-62ghs,41731,41731,559339,1,0,0,0,1,1,subsequent optimization problem
+GHS_indef,c-63,44234,44234,434704,1,0,0,0,1,1,optimization problem
+GHS_indef,c-68,64810,64810,565996,1,0,0,0,1,1,optimization problem
+GHS_indef,c-69,67458,67458,623914,1,0,0,0,1,1,optimization problem
+GHS_indef,c-70,68924,68924,658986,1,0,0,0,1,1,optimization problem
+GHS_indef,c-71,76638,76638,859520,1,0,0,0,1,1,optimization problem
+GHS_indef,c-72,84064,84064,707546,1,0,0,0,1,1,optimization problem
+GHS_indef,copter2,55476,55476,759952,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,d_pretok,182730,182730,1641672,1,0,1,0,1,1,2D/3D problem
+GHS_indef,darcy003,389874,389874,2097566,1,0,1,0,1,1,2D/3D problem
+GHS_indef,dawson5,51537,51537,1010777,1,0,1,0,1,1,structural problem
+GHS_indef,dtoc,24993,24993,69972,1,0,0,0,1,1,optimization problem
+GHS_indef,exdata_1,6001,6001,2269500,1,0,0,0,1,1,optimization problem
+GHS_indef,helm2d03,392257,392257,2741935,1,0,1,0,1,1,2D/3D problem
+GHS_indef,helm3d01,32226,32226,428444,1,0,1,0,1,1,2D/3D problem
+GHS_indef,k1_san,67759,67759,559774,1,0,1,0,1,1,2D/3D problem
+GHS_indef,laser,3002,3002,9000,1,0,1,0,1,1,materials problem
+GHS_indef,mario001,38434,38434,204912,1,0,1,0,1,1,2D/3D problem
+GHS_indef,mario002,389874,389874,2097566,1,0,1,0,1,1,duplicate 2D/3D problem
+GHS_indef,ncvxqp1,12111,12111,73963,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp9,16554,16554,54040,1,0,0,0,1,1,optimization problem
+GHS_indef,olesnik0,88263,88263,744216,1,0,1,0,1,1,2D/3D problem
+GHS_indef,sit100,10262,10262,61046,1,0,1,0,1,1,2D/3D problem
+GHS_indef,stokes128,49666,49666,558594,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,stokes64,12546,12546,140034,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,stokes64s,12546,12546,140034,1,0,1,0,1,1,computational fluid dynamics problem
+GHS_indef,tuma1,22967,22967,87760,1,0,1,0,1,1,2D/3D problem
+GHS_indef,tuma2,12992,12992,49365,1,0,1,0,1,1,2D/3D problem
+GHS_indef,turon_m,189924,189924,1690876,1,0,1,0,1,1,2D/3D problem
+GHS_psdef,audikw_1,943695,943695,77651847,1,0,1,1,1,1,structural problem
+GHS_psdef,bmw7st_1,141347,141347,7318399,1,0,1,1,1,1,structural problem
+GHS_psdef,bmwcra_1,148770,148770,10641602,1,0,1,1,1,1,structural problem
+GHS_psdef,copter1,17222,17222,211064,1,1,1,0,1,1,computational fluid dynamics problem
+GHS_psdef,copter2,55476,55476,759952,1,1,1,0,1,1,duplicate computational fluid dynamics problem
+GHS_psdef,crankseg_1,52804,52804,10614210,1,0,1,1,1,1,structural problem
+GHS_psdef,crankseg_2,63838,63838,14148858,1,0,1,1,1,1,structural problem
+DNVS,crplat2,18010,18010,960946,1,1,1,0,1,1,structural problem
+DNVS,fcondp2,201822,201822,11294316,1,1,1,0,1,1,structural problem
+GHS_psdef,finance256,37376,37376,298496,1,1,0,0,1,1,optimization problem
+GHS_psdef,ford1,18728,18728,101576,1,1,1,0,1,1,structural problem
+GHS_psdef,ford2,100196,100196,544688,1,1,1,0,1,1,structural problem
+DNVS,fullb,199187,199187,11708077,1,1,1,0,1,1,structural problem
+DNVS,halfb,224617,224617,12387821,1,1,1,0,1,1,structural problem
+GHS_psdef,hood,220542,220542,9895422,1,0,1,1,1,1,structural problem
+GHS_psdef,inline_1,503712,503712,36816170,1,0,1,1,1,1,structural problem
+GHS_psdef,ldoor,952203,952203,42493817,1,0,1,1,1,1,structural problem
+DNVS,m_t1,97578,97578,9753570,1,0,1,1,1,1,structural problem
+GHS_psdef,oilpan,73752,73752,2148558,1,0,1,1,1,1,structural problem
+GHS_psdef,opt1,15449,15449,1930655,1,1,1,0,1,1,structural problem
+GHS_psdef,pds10,16558,16558,149658,1,1,0,0,1,1,optimization problem
+GHS_psdef,pwt,36519,36519,326107,1,1,1,0,1,1,duplicate structural problem
+GHS_psdef,ramage02,16830,16830,2866352,1,1,1,0,1,1,computational fluid dynamics problem
+GHS_psdef,s3dkq4m2,90449,90449,4427725,1,0,1,1,1,1,structural problem
+GHS_psdef,s3dkt3m2,90449,90449,3686223,1,0,1,1,1,1,structural problem
+DNVS,ship_001,34920,34920,3896496,1,0,1,1,1,1,structural problem
+DNVS,ship_003,121728,121728,3777036,1,0,1,1,1,1,structural problem
+DNVS,shipsec1,140874,140874,3568176,1,0,1,1,1,1,structural problem
+DNVS,shipsec5,179860,179860,4598604,1,0,1,1,1,1,structural problem
+DNVS,shipsec8,114919,114919,3303553,1,0,1,1,1,1,structural problem
+GHS_psdef,srb1,54924,54924,2962152,1,1,1,0,1,1,structural problem
+DNVS,thread,29736,29736,4444880,1,0,1,1,1,1,structural problem
+DNVS,trdheim,22098,22098,1935324,1,1,1,0,1,1,structural problem
+DNVS,troll,213453,213453,11985111,1,1,1,0,1,1,structural problem
+DNVS,tsyl201,20685,20685,2454957,1,1,1,0,1,1,structural problem
+GHS_psdef,vanbody,47072,47072,2329056,1,0,1,1,1,1,structural problem
+GHS_psdef,wathen100,30401,30401,471601,1,0,1,1,1,1,random 2D/3D problem
+GHS_psdef,wathen120,36441,36441,565761,1,0,1,1,1,1,random 2D/3D problem
+DNVS,x104,108384,108384,8713602,1,0,1,1,1,1,structural problem
+GHS_indef,a0nsdsil,80016,80016,355034,1,0,0,0,1,1,optimization problem
+GHS_indef,a2nnsnsl,80016,80016,347222,1,0,0,0,1,1,optimization problem
+GHS_indef,a5esindl,60008,60008,255004,1,0,0,0,1,1,optimization problem
+GHS_indef,blockqp1,60012,60012,640033,1,0,0,0,1,1,optimization problem
+GHS_indef,bloweya,30004,30004,150009,1,0,1,0,1,1,materials problem
+GHS_indef,boyd1,93279,93279,1211231,1,0,0,0,1,1,optimization problem
+GHS_indef,boyd2,466316,466316,1500397,1,0,0,0,1,1,optimization problem
+GHS_indef,brainpc2,27607,27607,179395,1,0,0,0,1,1,optimization problem
+GHS_indef,bratu3d,27792,27792,173796,1,0,1,0,1,1,2D/3D problem
+GHS_indef,cont-201,80595,80595,438795,1,0,0,0,1,1,optimization problem
+GHS_indef,cont-300,180895,180895,988195,1,0,0,0,1,1,optimization problem
+GHS_indef,dixmaanl,60000,60000,299998,1,0,0,0,1,1,optimization problem
+GHS_indef,linverse,11999,11999,95977,1,0,0,0,1,1,statistical/mathematical problem
+GHS_indef,ncvxbqp1,50000,50000,349968,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp3,75000,75000,499964,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp5,62500,62500,424966,1,0,0,0,1,1,optimization problem
+GHS_indef,ncvxqp7,87500,87500,574962,1,0,0,0,1,1,optimization problem
+GHS_indef,sparsine,50000,50000,1548988,1,0,1,0,1,1,structural problem
+GHS_indef,spmsrtls,29995,29995,229947,1,0,0,0,1,1,statistical/mathematical problem
+GHS_psdef,cvxbqp1,50000,50000,349968,1,0,0,1,1,1,optimization problem
+GHS_psdef,gridgena,48962,48962,512084,1,0,0,1,1,1,optimization problem
+GHS_psdef,jnlbrng1,40000,40000,199200,1,0,0,1,1,1,optimization problem
+GHS_psdef,minsurfo,40806,40806,203622,1,0,0,1,1,1,optimization problem
+GHS_psdef,obstclae,40000,40000,197608,1,0,0,1,1,1,optimization problem
+GHS_psdef,torsion1,40000,40000,197608,1,0,0,1,1,1,duplicate optimization problem
+Rajat,rajat15,37261,37261,443573,1,0,0,0,1,0.943060217954145,circuit simulation problem
+Bydder,mri1,65536,147456,589824,1,0,1,0,0,0,computer graphics/vision problem
+Bydder,mri2,63240,147456,569160,1,0,1,0,0,0,computer graphics/vision problem
+Engwirda,airfoil_2d,14214,14214,259688,1,0,1,0,0.981668119637925,0,computational fluid dynamics problem
+IBM_EDA,dc1,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426284829292399,circuit simulation problem sequence
+IBM_EDA,dc2,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426284829292399,subsequent circuit simulation problem
+IBM_EDA,dc3,116835,116835,766396,1,0,0,0,0.8542477149952045,0.2426407989395915,subsequent circuit simulation problem
+IBM_EDA,trans4,116835,116835,749800,1,0,0,0,0.8542477149952045,0.3020988522272163,circuit simulation problem sequence
+IBM_EDA,trans5,116835,116835,749800,1,0,0,0,0.8542477149952045,0.3018997890878642,subsequent circuit simulation problem
+Morandini,robot,120,120,870,1,0,1,0,0.2177215189873418,0.05316455696202532,robotics problem
+Morandini,rotor1,100,100,708,1,0,1,0,0.514018691588785,0.07165109034267912,structural problem
+Morandini,rotor2,791,791,10685,1,0,1,0,0.2341063574570172,0.1155537784886046,structural problem
+MathWorks,tomography,500,500,28726,1,0,1,0,1,0.9331113158081201,computer graphics/vision problem
+Kemelmacher,Kemelmacher,28452,9693,100875,1,0,1,0,0,0,computer graphics/vision problem
+MathWorks,Kuu,7102,7102,340200,1,0,1,1,1,1,structural problem
+MathWorks,Muu,7102,7102,170134,1,0,1,1,1,1,structural problem
+Toledo,deltaX,68600,21961,247424,1,0,0,0,0,0,counter-example problem
+VanVelzen,std1_Jac2_db,21982,21982,498771,1,0,0,0,0.3261820218167785,8.389455293641422e-06,chemical process simulation problem
+VanVelzen,std1_Jac2,21982,21982,1248213,1,0,0,0,1.441471454060305e-05,0,chemical process simulation problem
+VanVelzen,std1_Jac3_db,21982,21982,531826,1,0,0,0,0.3593020610225873,7.84553706623987e-06,chemical process simulation problem
+VanVelzen,std1_Jac3,21982,21982,1455374,1,0,0,0,1.37377639453759e-05,0,chemical process simulation problem
+VanVelzen,Zd_Jac2_db,22835,22835,676439,1,0,0,0,0.3038965489807284,3.059956793410077e-06,chemical process simulation problem
+VanVelzen,Zd_Jac2,22835,22835,1642407,1,0,0,0,0.000249569948369456,0,chemical process simulation problem
+VanVelzen,Zd_Jac3_db,22835,22835,713907,1,0,0,0,0.3299540424152621,2.894054454528616e-06,chemical process simulation problem
+VanVelzen,Zd_Jac3,22835,22835,1915726,1,0,0,0,0.0002609405864378739,0,chemical process simulation problem
+VanVelzen,Zd_Jac6_db,22835,22835,663643,1,0,0,0,0.3245527521504101,3.121059662176502e-06,chemical process simulation problem
+VanVelzen,Zd_Jac6,22835,22835,1711557,1,0,0,0,0.0002161245251101651,0,chemical process simulation problem
+Rajat,rajat16,94294,94294,476766,1,0,0,0,0.9900237892855388,0.6363336955309653,circuit simulation problem
+Rajat,rajat17,94294,94294,479246,1,0,0,0,0.9900237892855388,0.2705152684049277,circuit simulation problem
+Rajat,rajat18,94294,94294,479151,1,0,0,0,0.626033640830624,0.2849580148146621,circuit simulation problem
+Rajat,rajat19,1157,1157,3699,1,0,0,0,0.9041281299345816,0.9193154034229829,circuit simulation problem
+Lourakis,bundle1,10581,10581,770811,1,0,1,1,1,1,computer graphics/vision problem
+PARSEC,benzene,8219,8219,242669,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,CO,221119,221119,7666057,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga10As10H30,113081,113081,6115633,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga19As19H42,133123,133123,8884839,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga3As3H12,61349,61349,5970947,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ga41As41H72,268096,268096,18488476,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,GaAsH6,61349,61349,3381809,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ge87H76,112985,112985,7892195,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Ge99H100,112985,112985,8451395,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,H2O,67024,67024,2216736,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Na5,5832,5832,305630,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si10H16,17077,17077,875923,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si2,769,769,17801,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si34H36,97569,97569,5156379,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si41Ge41H72,185639,185639,15011265,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si5H12,19896,19896,738598,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,Si87H76,240369,240369,10661631,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiH4,5041,5041,171903,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiNa,5743,5743,198787,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiO2,155331,155331,11283503,1,0,0,0,1,1,theoretical/quantum chemistry problem
+PARSEC,SiO,33401,33401,1317655,1,0,0,0,1,1,theoretical/quantum chemistry problem
+Rajat,rajat20,86916,86916,604299,1,0,0,0,0.9906228863063395,0.1122042623922186,circuit simulation problem
+Rajat,rajat21,411676,411676,1876011,1,0,0,0,0.7647530446640561,0.6145057622905241,circuit simulation problem
+Rajat,rajat22,39899,39899,195429,1,0,0,0,0.9800702079331211,0.3342735182643515,circuit simulation problem
+Rajat,rajat23,110355,110355,555441,1,0,0,0,0.9891581094231137,0.3324988529606978,circuit simulation problem
+Rajat,rajat24,358172,358172,1946979,1,0,0,0,0.996935347128458,0.2716106951495262,circuit simulation problem
+Rajat,rajat25,87190,87190,606489,1,0,0,0,0.9906572831072957,0.1118151951820715,circuit simulation problem
+Rajat,rajat26,51032,51032,247528,1,0,0,0,0.9853537517311467,0.3271800826884766,circuit simulation problem
+Rajat,rajat27,20640,20640,97353,1,0,0,0,0.9645908149382882,0.3035747337767303,circuit simulation problem
+Rajat,rajat28,87190,87190,606489,1,0,0,0,0.9906572831072957,0.1072533437604223,circuit simulation problem
+MathWorks,Sieber,2290,2290,14873,1,0,0,0,0.7272727272727273,0,counter-example problem
+Andrianov,ex3sta1,16782,16782,678998,1,1,0,0,1,1,optimization problem
+Andrianov,fxm3_6,5026,5026,94026,1,1,0,0,1,1,optimization problem
+Andrianov,fxm4_6,18892,18892,497844,1,1,0,0,1,1,optimization problem
+Andrianov,ins2,309412,309412,2751484,1,1,0,0,1,1,optimization problem
+Andrianov,lp1,534388,534388,1643420,1,1,0,0,1,1,optimization problem
+Andrianov,lpl1,32460,32460,328036,1,1,0,0,1,1,optimization problem
+Andrianov,mip1,66463,66463,10352819,1,1,0,0,1,1,optimization problem
+Andrianov,net100,29920,29920,2033200,1,1,0,0,1,1,optimization problem
+Andrianov,net125,36720,36720,2577200,1,1,0,0,1,1,optimization problem
+Andrianov,net150,43520,43520,3121200,1,1,0,0,1,1,optimization problem
+Andrianov,net25,9520,9520,401200,1,1,0,0,1,1,optimization problem
+Andrianov,net4-1,88343,88343,2441727,1,1,0,0,1,1,optimization problem
+Andrianov,net50,16320,16320,945200,1,1,0,0,1,1,optimization problem
+Andrianov,net75,23120,23120,1489200,1,1,0,0,1,1,optimization problem
+Andrianov,pattern1,19242,19242,9323432,1,1,0,0,1,1,optimization problem
+Andrianov,pf2177,9728,9728,725144,1,1,0,0,1,1,optimization problem
+MKS,fp,7548,7548,834222,1,0,1,0,0.7575174939506899,0.002912877385765126,electromagnetics problem
+Rajat,rajat29,643994,643994,3760246,1,0,0,0,0.6856406275660725,0.6910598008173955,circuit simulation problem
+Rajat,rajat30,643994,643994,6175244,1,0,0,0,0.9945912407336421,0.009194565053000587,circuit simulation problem
+Rajat,rajat31,4690002,4690002,20316253,1,0,0,0,1,0.4000960614178773,circuit simulation problem
+Raju,laminar_duct3D,67173,67173,3788857,1,0,1,0,0.9022908019592145,0.5518386226500883,computational fluid dynamics problem
+Bates,Chem97Zt,2541,31022,62044,1,1,0,0,0,0,statistical/mathematical problem
+Bates,Chem97ZtZ,2541,2541,7361,1,0,0,1,1,1,statistical/mathematical problem
+Schmid,thermal1,82654,82654,574458,1,0,1,1,1,1,thermal problem
+Schmid,thermal2,1228045,1228045,8580313,1,0,1,1,1,1,thermal problem
+MathWorks,Kaufhold,8765,8765,42471,1,0,0,0,1,0.778437073518068,counter-example problem
+Bindel,ted_A,10605,10605,424587,1,0,1,0,0.5657922767749357,0.1057079149564699,thermal problem
+Bindel,ted_B,10605,10605,144579,1,0,1,1,1,1,thermal problem
+Bindel,ted_AB,10605,10605,522387,0,0,1,0,0.6415700434950818,0,thermal problem
+Bindel,ted_A_unscaled,10605,10605,424587,1,0,1,0,0.5657922767749357,0.1057079149564699,thermal problem
+Bindel,ted_B_unscaled,10605,10605,144579,1,0,1,1,1,1,thermal problem
+Bindel,ted_AB_unscaled,10605,10605,522387,0,0,1,0,0.6415700434950818,0,thermal problem
+Koutsovasilis,F1,343791,343791,26837113,1,0,1,0,1,1,structural problem
+AMD,G2_circuit,150102,150102,726674,1,0,0,1,1,1,circuit simulation problem
+IBM_EDA,ckt11752_dc_1,49702,49702,333029,1,0,0,0,0.9838102263462359,0.7355387943965807,circuit simulation problem
+IBM_EDA,ckt11752_tr_0,49702,49702,332807,1,0,0,0,0.9838102263462359,0.7360237367761078,circuit simulation problem
+Sandia,ASIC_100k,99340,99340,940621,1,0,0,0,1,0.002631466347182405,circuit simulation problem
+Sandia,ASIC_100ks,99190,99190,578890,1,0,0,0,1,0.0007546383156139254,circuit simulation problem
+Sandia,ASIC_320k,321821,321821,1931828,1,0,0,0,1,0.3578041366837217,circuit simulation problem
+Sandia,ASIC_320ks,321671,321671,1316085,1,0,0,0,1,0.2891089626654492,circuit simulation problem
+Sandia,ASIC_680k,682862,682862,2638997,1,0,0,0,1,0.004444308126428144,circuit simulation problem
+Sandia,ASIC_680ks,682712,682712,1693767,1,0,0,0,1,0.005801860432914134,circuit simulation problem
+AMD,G3_circuit,1585478,1585478,7660826,1,0,0,1,1,1,circuit simulation problem
+GHS_psdef,apache1,80800,80800,542184,1,0,1,1,1,1,structural problem
+GHS_psdef,apache2,715176,715176,4817870,1,0,1,1,1,1,structural problem
+GHS_indef,bloweybl,30003,30003,109999,1,0,1,0,1,1,materials problem
+GHS_indef,bloweybq,10001,10001,49999,1,0,1,1,1,1,materials problem
+GHS_indef,cvxqp3,17500,17500,114962,1,0,0,0,1,1,optimization problem
+GHS_indef,qpband,20000,20000,45000,1,0,0,0,1,1,optimization problem
+Oberwolfach,chipcool0,20082,20082,281150,1,0,1,0,1,0.8688617524936032,model reduction problem
+Oberwolfach,chipcool1,20082,20082,281150,1,0,1,0,1,0.08556391438245974,model reduction problem
+Oberwolfach,filter2D,1668,1668,10750,1,0,1,0,1,1,model reduction problem
+Oberwolfach,filter3D,106437,106437,2707179,1,0,1,0,1,1,model reduction problem
+Oberwolfach,flowmeter0,9669,9669,67391,1,0,1,0,1,1,model reduction problem
+Oberwolfach,flowmeter5,9669,9669,67391,1,0,1,0,1,0.06222930598385364,model reduction problem
+Oberwolfach,gas_sensor,66917,66917,1703365,1,0,1,0,1,1,model reduction problem
+Oberwolfach,gyro,17361,17361,1021159,1,0,1,1,1,1,model reduction problem
+Oberwolfach,inlet,11730,11730,328323,1,0,1,0,0.6083330964361183,9.475888601453601e-05,model reduction problem
+Oberwolfach,LF10000,19998,19998,99982,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LF10,18,18,82,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LFAT5000,19994,19994,79966,1,0,1,1,1,1,model reduction problem
+Oberwolfach,LFAT5,14,14,46,1,0,1,1,1,1,model reduction problem
+Oberwolfach,piston,2025,2025,100015,1,0,1,0,1,0.03275844473925911,model reduction problem
+Oberwolfach,rail_1357,1357,1357,8985,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_20209,20209,20209,139233,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_5177,5177,5177,35185,1,0,1,0,1,1,model reduction problem
+Oberwolfach,rail_79841,79841,79841,553921,1,0,1,0,1,1,model reduction problem
+Oberwolfach,spiral,1434,1434,18228,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dah,11445,11445,176117,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dal_bci,4257,4257,37465,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t2dal,4257,4257,37465,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t3dh,79171,79171,4352105,1,0,1,0,1,1,model reduction problem
+Oberwolfach,t3dl,20360,20360,509866,1,0,1,0,1,1,model reduction problem
+Oberwolfach,windscreen,22692,22692,1482390,0,0,1,0,1,0,model reduction problem
+Oberwolfach,bone010,986703,986703,47851783,1,0,1,1,1,1,model reduction problem
+Oberwolfach,boneS01,127224,127224,5516602,1,0,1,1,1,1,model reduction problem
+Oberwolfach,boneS10,914898,914898,40878708,1,0,1,1,1,1,model reduction problem
+Pajek,California,9664,9664,16150,1,1,0,0,0.02241486068111455,0.02241486068111455,directed graph
+Pajek,Cities,55,46,1342,1,0,0,0,0,0,weighted bipartite graph
+Pajek,CSphd,1882,1882,1740,1,1,0,0,0,0,directed graph
+Pajek,dictionary28,52652,52652,178076,1,1,0,0,1,1,undirected graph
+Pajek,divorce,50,9,225,1,1,0,0,0,0,bipartite graph
+Pajek,EAT_RS,23219,23219,325592,1,0,0,0,0.1236262721980876,0.03102501938294547,directed weighted graph
+Pajek,EAT_SR,23219,23219,325589,1,0,0,0,0.1236274132759018,0.03102530574571187,directed weighted graph
+Pajek,EPA,4772,4772,8965,1,1,0,0,0.01249302844394869,0.01249302844394869,directed graph
+Pajek,Erdos02,6927,6927,16944,1,1,0,0,1,1,undirected graph
+Pajek,Erdos971,472,472,2628,1,1,0,0,1,1,undirected graph
+Pajek,Erdos972,5488,5488,14170,1,1,0,0,1,1,undirected graph
+Pajek,Erdos981,485,485,2762,1,1,0,0,1,1,undirected graph
+Pajek,Erdos982,5822,5822,14750,1,1,0,0,1,1,undirected graph
+Pajek,Erdos991,492,492,2834,1,1,0,0,1,1,undirected graph
+Pajek,Erdos992,6100,6100,15030,1,1,0,0,1,1,undirected graph
+Pajek,EVA,8497,8497,6726,1,1,0,0,0.003866745984533016,0.003866745984533016,directed graph
+Pajek,FA,10617,10617,72176,1,0,0,0,0.232333869090506,0.005847142936318794,directed weighted graph
+Pajek,foldoc,13356,13356,120238,1,0,0,0,0.4785009730700777,0.459472047106572,directed weighted graph
+Pajek,football,35,35,118,1,0,0,0,0,0,directed weighted graph
+Pajek,GD00_a,352,352,458,1,1,0,0,0,0,directed graph
+Pajek,GD00_c,638,638,1041,1,0,0,0,0.02133850630455868,0.01551891367604268,directed multigraph
+Pajek,GD01_a,311,311,645,1,0,0,0,0.01550387596899225,0.01550387596899225,directed weighted graph
+Pajek,GD01_A,953,953,645,1,0,0,0,0.01550387596899225,0.01550387596899225,directed multigraph
+Pajek,GD01_b,18,18,37,1,1,0,0,0.5142857142857142,0.5142857142857142,directed graph
+Pajek,GD01_c,33,33,135,1,0,0,0,0,0,directed multigraph
+Pajek,GD02_a,23,23,87,1,1,0,0,0.6436781609195402,0.6436781609195402,directed graph
+Pajek,GD02_b,80,80,232,1,1,0,0,0,0,directed graph
+Pajek,GD06_Java,1538,1538,8032,1,1,0,0,0.05353585657370518,0.05353585657370518,directed graph
+Pajek,GD06_theory,101,101,380,1,1,0,0,1,1,undirected graph
+Pajek,GD95_a,36,36,57,1,1,0,0,0.03508771929824561,0.03508771929824561,directed graph
+Pajek,GD95_b,73,73,96,1,1,0,0,0,0,directed graph
+Pajek,GD95_c,62,62,287,1,1,0,0,0.9965156794425087,0.9965156794425087,directed graph
+Pajek,GD96_a,1096,1096,1677,1,0,0,0,0,0,directed multigraph
+Pajek,GD96_b,111,111,193,1,1,0,0,0,0,directed graph
+Pajek,GD96_c,65,65,250,1,1,0,0,1,1,undirected graph
+Pajek,GD96_d,180,180,229,1,1,0,0,0.008733624454148471,0.008733624454148471,directed graph
+Pajek,GD97_a,84,84,332,1,1,0,0,1,1,directed graph
+Pajek,GD97_b,47,47,264,1,0,0,0,1,1,undirected weighted graph
+Pajek,GD97_c,452,452,460,1,0,0,0,0,0,directed multigraph
+Pajek,GD98_a,38,38,50,1,1,0,0,0.16,0.16,directed graph
+Pajek,GD98_b,121,121,207,1,1,0,0,0.7246376811594203,0.7246376811594203,directed graph
+Pajek,GD98_c,112,112,336,1,1,0,0,1,1,undirected graph
+Pajek,GD99_b,64,64,252,1,0,0,0,1,1,undirected multigraph
+Pajek,GD99_c,105,105,149,1,1,0,0,0.3892617449664429,0.3892617449664429,directed graph
+Pajek,geom,7343,7343,23796,1,0,0,0,1,1,undirected weighted graph
+Pajek,GlossGT,72,72,122,1,1,0,0,0.06557377049180328,0.06557377049180328,directed graph
+Pajek,HEP-th,27240,27240,342437,1,1,0,0,0.002774548916757691,0.002774548916757691,directed graph
+Pajek,HEP-th-new,27770,27770,352807,1,1,0,0,0.002738343613933237,0.002738343613933237,directed graph
+Pajek,IMDB,428440,896308,3782463,1,1,0,0,0,0,bipartite graph
+Pajek,internet,124651,124651,207214,1,0,0,0,0.01444913320583093,0.002245819852432203,directed weighted graph
+Pajek,Journals,124,124,12068,1,0,0,1,1,1,undirected weighted graph
+Pajek,Kohonen,4470,4470,12731,1,1,0,0,0.001728336868567837,0.001728336868567837,directed graph
+Pajek,Lederberg,8843,8843,41601,1,0,0,0,0.003029210241615579,0.003029210241615579,directed multigraph
+Barabasi,NotreDame_actors,392400,127823,1470404,1,1,0,0,0,0,bipartite graph
+Barabasi,NotreDame_www,325729,325729,929849,1,1,0,0,0.3315875213545298,0.3315875213545298,directed graph
+Barabasi,NotreDame_yeast,2114,2114,4480,1,1,0,0,1,1,undirected graph
+Pajek,ODLIS,2909,2909,18246,1,0,0,0,0.2043747601556932,0.1997697494654898,directed multigraph
+Pajek,patents_main,240547,240547,560943,1,0,0,0,0,0,directed weighted graph
+Pajek,patents,3774768,3774768,14970767,1,1,0,0,0,0,directed graph
+Pajek,Ragusa16,24,24,81,1,0,0,0,0.3661971830985916,0.1971830985915493,directed weighted graph
+Pajek,Ragusa18,23,23,64,1,0,0,0,0.3278688524590164,0.1967213114754098,directed weighted graph
+Pajek,Reuters911,13332,13332,296076,1,0,0,0,1,1,undirected weighted graph sequence
+Pajek,Roget,1022,1022,5075,1,1,0,0,0.5620811982656682,0.5620811982656682,directed graph
+Pajek,Sandi_authors,86,86,248,1,0,0,0,1,1,undirected weighted graph
+Pajek,Sandi_sandi,314,360,613,1,1,0,0,0,0,bipartite graph
+Pajek,SciMet,3084,3084,10413,1,0,0,0,0.002497118709181713,0.002497118709181713,directed multigraph
+Pajek,SmaGri,1059,1059,4919,1,0,0,0,0.0008133387555917039,0.0008133387555917039,directed multigraph
+Pajek,SmallW,396,396,994,1,0,0,0,0,0,directed multigraph
+Pajek,Stranke94,10,10,90,1,0,0,0,1,1,undirected weighted graph
+Pajek,Tina_AskCal,11,11,29,1,1,0,0,0.2758620689655172,0.2758620689655172,directed graph
+Pajek,Tina_AskCog,11,11,36,1,1,0,0,0.5,0.5,directed graph
+Pajek,Tina_DisCal,11,11,41,1,1,0,0,0.4390243902439024,0.4390243902439024,directed graph
+Pajek,Tina_DisCog,11,11,48,1,1,0,0,0.5,0.5,directed graph
+Pajek,USAir97,332,332,4252,1,0,0,0,1,1,undirected weighted graph
+Pajek,USpowerGrid,4941,4941,13188,1,1,0,0,1,1,undirected graph
+Pajek,Wordnet3,82670,82670,132964,1,0,0,0,0.1765463136851033,0.1741230992912098,directed weighted graph
+Pajek,WorldCities,315,100,7518,1,0,0,0,0,0,weighted bipartite graph
+Pajek,yeast,2361,2361,13828,1,1,0,0,1,1,undirected graph
+Pajek,Zewail,6752,6752,54233,1,0,0,0,0.001843929783153858,0.001843929783153858,directed multigraph
+Zitney,extr1b,2836,2836,10965,1,0,0,0,0.003859310586790632,0,chemical process simulation problem sequence
+Zitney,hydr1c,5308,5308,22592,1,0,0,0,0.004126315789473685,0.0006197432492253209,chemical process simulation problem sequence
+Schenk_IBMNA,c-18,2169,2169,15145,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-19,2327,2327,21817,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-20,2921,2921,20445,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-21,3509,3509,32145,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-22,3792,3792,28870,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-23,3969,3969,31079,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-24,4119,4119,35699,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-25,3797,3797,49635,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-26,4307,4307,34537,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-27,4563,4563,30927,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-28,4598,4598,30590,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-29,5033,5033,43731,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-30,5321,5321,65693,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-31,5339,5339,78571,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-32,5975,5975,54471,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-33,6317,6317,56123,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-34,6611,6611,64333,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-35,6537,6537,62891,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-36,7479,7479,65941,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-37,8204,8204,74676,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-38,8127,8127,77689,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-39,9271,9271,116587,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-40,9941,9941,81501,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-41,9769,9769,101635,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-42,10471,10471,110285,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-43,11125,11125,123659,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-44,10728,10728,85000,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-45,13206,13206,174452,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-46,14913,14913,130397,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-47,15343,15343,211401,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-48,18354,18354,166080,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-49,21132,21132,157040,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-50,22401,22401,180245,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-51,23196,23196,203048,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-52,23948,23948,202708,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-53,30235,30235,355139,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-54,31793,31793,385987,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-56,35910,35910,380240,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-57,37833,37833,403373,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-60,43640,43640,298570,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-61,43618,43618,310016,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-65,48066,48066,360428,1,0,0,0,1,1,optimization problem
+Schenk_IBMNA,c-big,345241,345241,2340859,1,0,0,0,1,1,optimization problem
+Schenk_AFE,af_0_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_1_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_2_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_3_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_4_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_5_k101,503625,503625,17550675,1,0,1,1,1,1,structural problem
+Schenk_AFE,af_shell10,1508065,1508065,52259885,1,0,1,0,1,1,structural problem
+Schenk_IBMNA,c-64b,51035,51035,707601,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-66b,49989,49989,444851,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-67b,57975,57975,530583,1,0,0,0,1,1,subsequent optimization problem
+Schenk_IBMNA,c-73b,169422,169422,1279274,1,0,0,0,1,1,subsequent optimization problem
+QCD,conf5_0-4x4-10,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-14,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-18,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-22,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_0-4x4-26,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-4x4-20,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-4x4-30,3072,3072,119808,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-05,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-10,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-15,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf5_4-8x8-20,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-20,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-30,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+QCD,conf6_0-8x8-80,49152,49152,1916928,0,0,0,0,0.9230769230769231,0.4615384615384616,theoretical/quantum chemistry problem
+Cylshell,s1rmq4m1,5489,5489,262411,1,0,1,1,1,1,structural problem
+Cylshell,s2rmq4m1,5489,5489,263351,1,0,1,1,1,1,structural problem
+Cylshell,s3rmq4m1,5489,5489,262943,1,0,1,1,1,1,structural problem
+Cylshell,s1rmt3m1,5489,5489,217651,1,0,1,1,1,1,structural problem
+Cylshell,s2rmt3m1,5489,5489,217681,1,0,1,1,1,1,structural problem
+Cylshell,s3rmt3m1,5489,5489,217669,1,0,1,1,1,1,structural problem
+Cylshell,s3rmt3m3,5357,5357,207123,1,0,1,1,1,1,structural problem
+Bai,cryg10000,10000,10000,49699,1,0,1,0,0.9974558553112169,0,materials problem
+Bai,cryg2500,2500,2500,12349,1,0,1,0,0.9948218093207433,0,materials problem
+Bai,dw2048,2048,2048,10114,1,0,1,0,0.9848747830399207,0.9481775353334987,electromagnetics problem
+Bai,dw8192,8192,8192,41746,1,0,1,0,0.9626274065685164,0.9154199201287477,electromagnetics problem
+Bai,dwa512,512,512,2480,1,0,1,0,0.9796747967479674,0.9146341463414634,electromagnetics problem
+Bai,dwb512,512,512,2500,1,0,1,0,0.9698189134808853,0.8832997987927566,electromagnetics problem
+Bai,dwg961a,961,961,3405,0,0,1,0,1,0.36,electromagnetics problem
+Bai,dwg961b,961,961,10591,0,0,1,0,1,0.3476635514018692,electromagnetics problem
+Bai,mhd1280a,1280,1280,47906,0,0,1,0,0.8978403914290535,0.3060992070187278,electromagnetics problem
+Bai,mhd1280b,1280,1280,22778,0,0,1,1,1,1,electromagnetics problem
+Bai,mhd3200a,3200,3200,68026,1,0,1,0,0.7676029990571827,0.2674009667619461,electromagnetics problem
+Bai,mhd3200b,3200,3200,18316,1,0,1,1,1,1,electromagnetics problem
+Bai,mhd4800a,4800,4800,102252,1,0,1,0,0.7677879876950033,0.2677033659541848,electromagnetics problem
+Bai,mhd4800b,4800,4800,27520,1,0,1,1,1,1,electromagnetics problem
+Bai,qh1484,1484,1484,6110,1,0,0,0,1,0.05377207062600321,power network problem
+Bai,qh768,768,768,2934,1,0,0,0,0.9347300564061241,0,power network problem
+Bai,rdb1250,1250,1250,7300,1,0,1,0,1,0.7933884297520661,computational fluid dynamics problem
+Bai,rdb1250l,1250,1250,7300,1,0,1,0,1,0.7933884297520661,computational fluid dynamics problem
+Bai,rdb200,200,200,1120,1,0,1,0,1,0.7826086956521739,computational fluid dynamics problem
+Bai,rdb200l,200,200,1120,1,0,1,0,1,0.7826086956521739,computational fluid dynamics problem
+Bai,rdb2048_noL,2048,2048,12032,1,0,1,0,1,0.7948717948717948,computational fluid dynamics problem
+Bai,rdb3200l,3200,3200,18880,1,0,1,0,1,0.7959183673469388,computational fluid dynamics problem
+Bai,rdb450,450,450,2580,1,0,1,0,1,0.7887323943661971,computational fluid dynamics problem
+Bai,rdb450l,450,450,2580,1,0,1,0,1,0.7887323943661971,computational fluid dynamics problem
+Bai,rdb800l,800,800,4640,1,0,1,0,1,0.7916666666666666,computational fluid dynamics problem
+Bai,tols1090,1090,1090,3546,1,0,1,0,0.3178758414360509,0,computational fluid dynamics problem
+Bai,tols2000,2000,2000,5184,1,0,1,0,0.3387276785714285,0,computational fluid dynamics problem
+Bai,tols340,340,340,2196,1,0,1,0,0.2858627858627859,0,computational fluid dynamics problem
+Bai,tols4000,4000,4000,8784,1,0,1,0,0.3606733524355301,0,computational fluid dynamics problem
+Bai,tols90,90,90,1746,1,0,1,0,0.2688172043010753,0,computational fluid dynamics problem
+POLYFLOW,invextr1_new,30412,30412,1793881,1,0,1,0,0.971442083756505,0.7213486599424203,computational fluid dynamics problem
+POLYFLOW,mixtank_new,29957,29957,1990919,1,0,1,0,1,0.9890905426943581,computational fluid dynamics problem
+INPRO,msdoor,415863,415863,19173163,1,0,1,1,1,1,structural problem
+Mittelmann,nug08-3rd,19728,29856,148416,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-30,49944,158489,340635,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-40,66844,217531,466800,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-50,83060,275814,590833,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-60,99431,336421,719557,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-70,114944,390005,833465,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-80,129181,434580,927826,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-90,142823,475448,1014136,1,0,0,0,0,0,linear programming problem
+Mittelmann,pds-100,156243,514577,1096002,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail507,507,63516,409856,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail516,516,47827,315412,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail582,582,56097,402290,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail2586,2586,923269,8011362,1,0,0,0,0,0,linear programming problem
+Mittelmann,rail4284,4284,1096894,11284032,1,0,0,0,0,0,linear programming problem
+Mittelmann,sgpf5y6,246077,312540,831976,1,0,0,0,0,0,linear programming problem
+Mittelmann,stormG2_1000,528185,1377306,3459881,1,0,0,0,0,0,linear programming problem
+Mittelmann,watson_1,201155,386992,1055093,1,0,0,0,0,0,linear programming problem
+Mittelmann,watson_2,352013,677224,1846391,1,0,0,0,0,0,linear programming problem
+Mittelmann,cont11_l,1468599,1961394,5382999,1,0,0,0,0,0,linear programming problem
+Mittelmann,cont1_l,1918399,1921596,7031999,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome11,12142,24460,71264,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome12,24284,48920,142528,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome13,48568,97840,285056,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome20,33874,108175,232647,1,0,0,0,0,0,linear programming problem
+Mittelmann,fome21,67748,216350,465294,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos,479119,515905,1526794,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos1,131581,133473,599590,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos2,132568,134128,685087,1,0,0,0,0,0,linear programming problem
+Mittelmann,neos3,512209,518832,2055024,1,0,0,0,0,0,linear programming problem
+Mittelmann,spal_004,10203,321696,46168124,1,0,0,0,0,0,linear programming problem
+Meszaros,gams10am,114,171,407,1,0,0,0,0,0,linear programming problem
+Meszaros,gams30am,354,531,1287,1,0,0,0,0,0,linear programming problem
+Meszaros,gams60am,714,1071,2607,1,0,0,0,0,0,linear programming problem
+Meszaros,gas11,459,862,2166,1,0,0,0,0,0,linear programming problem
+Meszaros,aa01,823,8904,72965,1,1,0,0,0,0,linear programming problem
+Meszaros,aa03,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aa3,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aa4,426,7195,52121,1,1,0,0,0,0,linear programming problem
+Meszaros,aa5,801,8308,65953,1,1,0,0,0,0,linear programming problem
+Meszaros,aa6,646,7292,51728,1,1,0,0,0,0,linear programming problem
+Meszaros,air02,50,6774,61555,1,1,0,0,0,0,linear programming problem
+Meszaros,air03,124,10757,91028,1,1,0,0,0,0,linear programming problem
+Meszaros,air04,823,8904,72965,1,1,0,0,0,0,linear programming problem
+Meszaros,air05,426,7195,52121,1,1,0,0,0,0,linear programming problem
+Meszaros,air06,825,8627,70806,1,1,0,0,0,0,linear programming problem
+Meszaros,aircraft,3754,7517,20267,1,0,0,0,0,0,linear programming problem
+Meszaros,bas1lp,5411,9825,587775,1,0,0,0,0,0,linear programming problem
+Meszaros,baxter,27441,30733,111576,1,0,0,0,0,0,linear programming problem
+Meszaros,car4,16384,33052,63724,1,0,0,0,0,0,linear programming problem
+Meszaros,cari,400,1200,152800,1,0,0,0,0,0,linear programming problem
+Meszaros,ch,3700,8291,24102,1,0,0,0,0,0,linear programming problem
+Meszaros,co5,5774,12325,57993,1,0,0,0,0,0,linear programming problem
+Meszaros,co9,10789,22924,109651,1,0,0,0,0,0,linear programming problem
+Meszaros,complex,1023,1408,46463,1,0,0,0,0,0,linear programming problem
+Meszaros,cq5,5048,11748,51571,1,0,0,0,0,0,linear programming problem
+Meszaros,cq9,9278,21534,96653,1,0,0,0,0,0,linear programming problem
+Meszaros,cr42,905,1513,6614,1,0,0,0,0,0,linear programming problem
+Meszaros,crew1,135,6469,46950,1,1,0,0,0,0,linear programming problem
+Meszaros,dano3mip,3202,15851,81633,1,0,0,0,0,0,linear programming problem
+Meszaros,dbic1,43200,226317,1081843,1,0,0,0,0,0,linear programming problem
+Meszaros,dbir1,18804,45775,1077025,1,0,0,0,0,0,linear programming problem
+Meszaros,dbir2,18906,45877,1158159,1,0,0,0,0,0,linear programming problem
+Meszaros,df2177,630,10358,22336,1,1,0,0,0,0,linear programming problem
+Meszaros,e18,24617,38602,156466,1,0,0,0,0,0,linear programming problem
+Meszaros,ex3sta1,17443,17516,68779,1,0,0,0,0,0,linear programming problem
+Meszaros,farm,7,17,41,1,0,0,0,0,0,linear programming problem
+Meszaros,gams10a,114,171,407,1,0,0,0,0,0,linear programming problem
+Meszaros,gams30a,354,531,1287,1,0,0,0,0,0,linear programming problem
+Meszaros,ge,10099,16369,44825,1,0,0,0,0,0,linear programming problem
+Meszaros,iiasa,669,3639,7317,1,0,0,0,0,0,linear programming problem
+Meszaros,jendrec1,2109,4228,89608,1,0,0,0,0,0,linear programming problem
+Meszaros,kl02,71,36699,212536,1,1,0,0,0,0,linear programming problem
+Meszaros,l9,244,1483,4659,1,0,0,0,0,0,linear programming problem
+Meszaros,lp22,2958,16392,68518,1,0,0,0,0,0,linear programming problem
+Meszaros,lpl2,3294,10881,32232,1,0,0,0,0,0,linear programming problem
+Meszaros,lpl3,10828,33686,100525,1,0,0,0,0,0,linear programming problem
+Meszaros,mod2,34774,66409,199810,1,0,0,0,0,0,linear programming problem
+Meszaros,model1,362,798,3028,1,0,0,0,0,0,linear programming problem
+Meszaros,model2,379,1321,7607,1,0,0,0,0,0,linear programming problem
+Meszaros,model3,1609,4578,23974,1,0,0,0,0,0,linear programming problem
+Meszaros,model4,1337,4962,45753,1,0,0,0,0,0,linear programming problem
+Meszaros,model5,1888,11802,89925,1,0,0,0,0,0,linear programming problem
+Meszaros,model6,2096,5289,27628,1,0,0,0,0,0,linear programming problem
+Meszaros,model7,3358,9582,51027,1,0,0,0,0,0,linear programming problem
+Meszaros,model8,2896,6464,25277,1,0,0,0,0,0,linear programming problem
+Meszaros,model9,2879,10939,55956,1,0,0,0,0,0,linear programming problem
+Meszaros,model10,4400,16819,150372,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsafm,334,2348,2826,1,0,0,0,0,0,linear programming problem
+Meszaros,nemscem,651,1712,3840,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsemm1,3945,75352,1053986,1,0,0,0,0,0,linear programming problem
+Meszaros,nemsemm2,6943,48878,182012,1,0,0,0,0,0,linear programming problem
+Meszaros,nemspmm1,2372,8903,55867,1,0,0,0,0,0,linear programming problem
+Meszaros,nemspmm2,2301,8734,68225,1,0,0,0,0,0,linear programming problem
+Meszaros,nemswrld,7138,28550,192283,1,0,0,0,0,0,linear programming problem
+Meszaros,nl,7039,15325,47035,1,0,0,0,0,0,linear programming problem
+Meszaros,nw14,73,123409,904910,1,1,0,0,0,0,linear programming problem
+Meszaros,p0033,15,48,113,1,0,0,0,0,0,linear programming problem
+Meszaros,p0040,23,63,133,1,0,0,0,0,0,linear programming problem
+Meszaros,p010,10090,19090,118000,1,0,0,0,0,0,linear programming problem
+Meszaros,p0201,133,334,2056,1,0,0,0,0,0,linear programming problem
+Meszaros,p0282,241,523,2207,1,0,0,0,0,0,linear programming problem
+Meszaros,p0291,252,543,2283,1,0,0,0,0,0,linear programming problem
+Meszaros,p0548,176,724,1887,1,0,0,0,0,0,linear programming problem
+Meszaros,p05,5090,9590,59045,1,0,0,0,0,0,linear programming problem
+Meszaros,p2756,755,3511,9692,1,0,0,0,0,0,linear programming problem
+Meszaros,p6000,2095,7967,19826,1,0,0,0,0,0,linear programming problem
+Meszaros,pcb1000,1565,2820,20463,1,0,0,0,0,0,linear programming problem
+Meszaros,pcb3000,3960,7732,57479,1,0,0,0,0,0,linear programming problem
+Meszaros,pf2177,9728,10178,30984,1,1,0,0,0,0,linear programming problem
+Meszaros,primagaz,1554,10836,21665,1,0,0,0,0,0,linear programming problem
+Meszaros,problem,12,46,86,1,0,0,0,0,0,linear programming problem
+Meszaros,progas,1650,1900,8897,1,0,0,0,0,0,linear programming problem
+Meszaros,qiulp,1192,1900,4492,1,0,0,0,0,0,linear programming problem
+Meszaros,r05,5190,9690,104145,1,0,0,0,0,0,linear programming problem
+Meszaros,refine,29,62,153,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfddd,4050,61521,264627,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfdual,8052,74970,282031,1,0,0,0,0,0,linear programming problem
+Meszaros,rlfprim,58866,62716,320591,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen1,520,1544,23794,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen2,1032,3080,47536,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen7,264,776,8034,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen8,520,1544,16058,1,0,0,0,0,0,linear programming problem
+Meszaros,rosen10,2056,6152,64192,1,0,0,0,0,0,linear programming problem
+Meszaros,route,20894,43019,206782,1,0,0,0,0,0,linear programming problem
+Meszaros,seymourl,4944,6316,38493,1,0,0,0,0,0,linear programming problem
+Meszaros,slptsk,2861,3347,72465,1,0,0,0,0,0,linear programming problem
+Meszaros,south31,18425,36321,112398,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v1,5995,197472,588798,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v2,29089,957432,2852184,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v3,33841,1113780,3317736,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v4,3173,63076,491336,1,0,0,0,0,0,linear programming problem
+Meszaros,stat96v5,2307,75779,233921,1,0,0,0,0,0,linear programming problem
+Meszaros,t0331-4l,664,46915,430982,1,1,0,0,0,0,linear programming problem
+Meszaros,testbig,17613,31223,61639,1,0,0,0,0,0,linear programming problem
+Meszaros,ulevimin,6590,46937,164538,1,0,0,0,0,0,linear programming problem
+Meszaros,us04,163,28016,297538,1,1,0,0,0,0,linear programming problem
+Meszaros,world,34506,67147,198883,1,0,0,0,0,0,linear programming problem
+Meszaros,zed,116,142,666,1,0,0,0,0,0,linear programming problem
+Meszaros,de063155,852,1848,4913,1,0,0,0,0,0,linear programming problem
+Meszaros,de063157,936,1908,5119,1,0,0,0,0,0,linear programming problem
+Meszaros,de080285,936,1908,5082,1,0,0,0,0,0,linear programming problem
+Meszaros,gen1,769,2561,63086,1,0,0,0,0,0,linear programming problem
+Meszaros,gen2,1121,3264,81855,1,0,0,0,0,0,linear programming problem
+Meszaros,gen4,1537,4298,107103,1,0,0,0,0,0,linear programming problem
+Meszaros,gen,769,2561,63086,1,0,0,0,0,0,linear programming problem
+Meszaros,iprob,3001,3001,9000,1,0,0,0,1,0.5,linear programming problem
+Meszaros,l30,2701,16281,52070,1,0,0,0,0,0,linear programming problem
+Meszaros,stoch_aircraft,3754,7517,20267,1,0,0,0,0,0,linear programming problem
+Meszaros,cep1,1521,4769,8233,1,0,0,0,0,0,linear programming problem
+Meszaros,deter0,1923,5468,11173,1,0,0,0,0,0,linear programming problem
+Meszaros,deter1,5527,15737,32187,1,0,0,0,0,0,linear programming problem
+Meszaros,deter2,6095,17313,35731,1,0,0,0,0,0,linear programming problem
+Meszaros,deter3,7647,21777,44547,1,0,0,0,0,0,linear programming problem
+Meszaros,deter4,3235,9133,19231,1,0,0,0,0,0,linear programming problem
+Meszaros,deter5,5103,14529,29715,1,0,0,0,0,0,linear programming problem
+Meszaros,deter6,4255,12113,24771,1,0,0,0,0,0,linear programming problem
+Meszaros,deter7,6375,18153,37131,1,0,0,0,0,0,linear programming problem
+Meszaros,deter8,3831,10905,22299,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm2-6,1520,2845,12812,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm2-16,3900,7335,32972,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm3_6,6200,12625,57722,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm3_16,41340,85575,392252,1,0,0,0,0,0,linear programming problem
+Meszaros,fxm4_6,22400,47185,265442,1,0,0,0,0,0,linear programming problem
+Meszaros,pgp2,4034,13254,22474,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-125,66185,172431,433256,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-27,14441,37485,94274,1,0,0,0,0,0,linear programming problem
+Meszaros,stormg2-8,4409,11322,28553,1,0,0,0,0,0,linear programming problem
+Meszaros,degme,185501,659415,8127528,1,0,0,0,0,0,linear programming problem
+Meszaros,karted,46502,133115,1770349,1,0,0,0,0,0,linear programming problem
+Meszaros,tp-6,142752,1014301,11537419,1,0,0,0,0,0,linear programming problem
+Meszaros,ts-palko,22002,47235,1076903,1,0,0,0,0,0,linear programming problem
+Meszaros,delf,3170,6654,15397,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,kleemin,8,16,44,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,large,4282,8617,20635,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsct,23003,37563,697738,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsic,465,897,3449,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,nsir,4453,10057,154939,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,plddb,3069,5049,10839,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,rat,3136,9408,268908,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,small,677,1400,3207,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,pltexpa,26894,70364,143059,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sc205-2r,35213,62423,123239,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2b,9743,13847,35885,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2c,2447,3479,9005,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scagr7-2r,32847,46679,120141,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scfxm1-2b,19036,33047,111052,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scfxm1-2r,37980,65943,221388,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2b,1820,3499,7367,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2c,1820,3499,7367,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scrs8-2r,14364,27691,58439,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2b,5130,35910,112770,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2c,5130,35910,112770,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,scsd8-2r,8650,60550,190210,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2b,15390,33858,99454,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2c,3390,7458,21854,1,0,0,0,0,0,linear programming problem sequence
+Meszaros,sctap1-2r,28830,63426,186366,1,0,0,0,0,0,linear programming problem sequence
+Gleich,wb-cs-stanford,9914,9914,36854,1,1,0,0,0.4572071438616228,0.4572071438616228,directed graph
+Gleich,wb-edu,9845725,9845725,57156537,1,1,0,0,0.3281596169311674,0.3281596169311674,directed graph
+Gleich,wikipedia-20051105,1634989,1634989,19753078,1,1,0,0,0.1211282592272251,0.1211282592272251,directed graph
+Gleich,wikipedia-20060925,2983494,2983494,37269096,1,1,0,0,0.1182841447575249,0.1182841447575249,directed graph
+Gleich,wikipedia-20061104,3148440,3148440,39383235,1,1,0,0,0.1179357318284389,0.1179357318284389,directed graph
+Gleich,wikipedia-20070206,3566907,3566907,45030389,1,1,0,0,0.1171832378930545,0.1171832378930545,directed graph
+UTEP,Dubcova1,16129,16129,253009,1,0,1,1,1,1,2D/3D problem
+UTEP,Dubcova2,65025,65025,1030225,1,0,1,1,1,1,2D/3D problem
+UTEP,Dubcova3,146689,146689,3636643,1,0,1,1,1,1,2D/3D problem
+BenElechi,BenElechi1,245874,245874,13150496,1,0,1,1,1,1,2D/3D problem
+Botonakis,FEM_3D_thermal1,17880,17880,430740,1,0,1,0,1,0.950733904955675,thermal problem
+Botonakis,FEM_3D_thermal2,147900,147900,3489300,1,0,1,0,1,0.9502082959238642,thermal problem
+Wissgott,parabolic_fem,525825,525825,3674625,1,0,1,1,1,1,computational fluid dynamics problem
+Watson,chem_master1,40401,40401,201201,1,0,1,0,1,0,2D/3D problem
+Watson,Baumann,112211,112211,748331,1,0,1,0,1,0,2D/3D problem
+Sinclair,3Dspectralwave,680943,680943,30290827,0,0,1,0,1,1,materials problem
+Sinclair,3Dspectralwave2,292008,292008,12935272,0,0,1,0,1,1,materials problem
+QLi,crashbasis,160000,160000,1750416,1,0,0,0,0.5503013048158469,0.0002439613283568576,optimization problem
+QLi,majorbasis,160000,160000,1750416,1,0,0,0,0.5503013048158469,0.0002376736652548767,optimization problem
+Springer,ESOC,327062,37830,6019939,1,0,0,0,0,0,least squares problem
+Koutsovasilis,F2,71505,71505,5294285,1,0,1,0,1,1,structural problem
+Szczerba,Ill_Stokes,20896,20896,191368,1,0,1,0,0.9897436481194791,0.3299904380293234,computational fluid dynamics problem
+Rajat,Raj1,263743,263743,1300261,1,0,0,0,0.998585875116119,0.5762090211971218,circuit simulation problem
+Muite,Chebyshev1,261,261,2319,1,0,1,0,0.5014577259475219,0,structural problem
+Muite,Chebyshev2,2053,2053,18447,1,0,1,0,0.5001829937782115,0,structural problem
+Muite,Chebyshev3,4101,4101,36879,1,0,1,0,0.5000915248032217,0,structural problem
+Muite,Chebyshev4,68121,68121,5377761,1,0,1,0,0.3020408163265306,0.0002369275506437348,structural problem
+Quaglino,viscoplastic1,4326,4326,61166,1,0,1,0,0.7408163265306122,0,materials problem
+Quaglino,viscoplastic2,32769,32769,381326,1,0,1,0,0.5699899872904575,0,materials problem
+YCheng,psse0,26722,11028,102432,1,0,0,0,0,0,power network problem
+YCheng,psse1,14318,11028,57376,1,0,0,0,0,0,power network problem
+YCheng,psse2,28634,11028,115262,1,0,0,0,0,0,power network problem
+Dehghani,light_in_tissue,29282,29282,406084,0,0,1,0,1,0,electromagnetics problem
+HVDC,hvdc1,24842,24842,158426,1,0,0,0,0.9817003233707516,0.09899271099935641,power network problem
+HVDC,hvdc2,189860,189860,1339638,1,0,0,0,0.9885955341075688,0.06323365458033522,power network problem
+Zaoui,kkt_power,2063494,2063494,12771361,1,0,0,0,1,1,optimization problem
+Rost,RFdevice,74104,74104,365580,0,0,1,0,0.0001203589980660497,0.0001148881345175929,semiconductor device problem
+Lee,fem_filter,74062,74062,1731206,0,0,1,0,1,0.6131971633123011,electromagnetics problem
+Mancktelow,viscorocks,37762,37762,1133641,1,0,1,0,1,0.279507135368047,materials problem
+Rudnyi,water_tank,60740,60740,2035281,1,0,1,0,0.9691204183655847,0.9180067671423384,computational fluid dynamics problem
+Rucci,Rucci1,1977885,109900,7791168,1,0,0,0,0,0,least squares problem
+McRae,ecology1,1000000,1000000,4996000,1,0,1,0,1,1,2D/3D problem
+McRae,ecology2,999999,999999,4995991,1,0,1,1,1,1,2D/3D problem
+NYPA,Maragal_1,32,14,234,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_2,555,350,4357,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_3,1690,860,18391,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_4,1964,1034,26719,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_5,4654,3320,93091,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_6,21255,10152,537694,1,0,0,0,0,0,least squares problem
+NYPA,Maragal_7,46845,26564,1200537,1,0,0,0,0,0,least squares problem
+Marini,eurqsa,7245,7245,46142,1,0,0,0,1,1,economic problem
+Castrillon,denormal,89400,89400,1156224,1,0,0,1,1,1,counter-example problem
+QLi,largebasis,440020,440020,5240084,1,0,0,0,1,0,optimization problem
+MathWorks,QRpivot,660,749,3808,1,0,0,0,0,0,counter-example problem
+Luong,photogrammetry,1388,390,11816,1,0,1,0,0,0,computer graphics/vision problem
+YZhou,circuit204,1020,1020,5883,1,0,0,0,0.4379791625712601,0.3727147631216827,circuit simulation problem
+CEMW,t2em,921632,921632,4590832,1,0,1,0,0.9988182710127548,0.9988182710127548,electromagnetics problem
+CEMW,tmt_unsym,917825,917825,4584801,1,0,1,0,1,0,electromagnetics problem
+CEMW,tmt_sym,726713,726713,5080961,1,0,1,1,1,1,electromagnetics problem
+CEMW,vfem,93476,93476,1434636,0,0,1,0,1,0.8209624504160578,electromagnetics problem
+Schenk,nlpkkt80,1062400,1062400,28192672,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt120,3542400,3542400,95117792,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt160,8345600,8345600,225422112,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt200,16240000,16240000,440225632,1,0,0,0,1,1,optimization problem
+Schenk,nlpkkt240,27993600,27993600,760648352,1,0,0,0,1,1,optimization problem
+TKK,s4dkt3m2,90449,90449,3753461,1,1,1,0,1,1,structural problem
+TKK,g3rmt3m3,5357,5357,207695,1,1,1,0,1,1,structural problem
+TKK,t520,5563,5563,286341,1,0,1,0,1,1,structural problem
+TKK,smt,25710,25710,3749582,1,0,1,1,1,1,structural problem
+TKK,engine,143571,143571,4706073,1,0,1,0,1,1,structural problem
+TKK,plbuckle,1282,1282,30644,1,0,1,1,1,1,structural problem
+TKK,cbuckle,13681,13681,676515,1,0,1,1,1,1,structural problem
+TKK,cyl6,13681,13681,714241,1,0,1,0,1,1,structural problem
+TKK,tube1,21498,21498,897056,1,1,1,0,1,1,structural problem
+TKK,tube2,21498,21498,897056,1,0,1,0,1,1,structural problem
+TKK,t2d_q4,9801,9801,87025,1,0,1,0,1,0.6937221589143272,structural problem sequence
+TKK,t2d_q9,9801,9801,87025,1,0,1,0,1,0.6937221589143272,structural problem sequence
+Luong,photogrammetry2,4472,936,37056,1,0,1,0,0,0,computer graphics/vision problem
+Um,2cubes_sphere,101492,101492,1647264,1,0,1,1,1,1,electromagnetics problem
+JGD_BIBD,bibd_9_3,36,84,252,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_9_5,36,126,1260,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_11_5,55,462,4620,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_12_4,66,495,2970,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_12_5,66,792,7920,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_13_6,78,1716,25740,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_14_7,91,3432,72072,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_15_3,105,455,1365,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_15_7,105,6435,135135,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_16_8,120,12870,360360,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_3,136,680,2040,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_4b,136,2380,14280,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_4,136,2380,14280,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_17_8,136,24310,680680,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_18_9,153,48620,1750320,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_19_9,171,92378,3325608,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_20_10,190,184756,8314020,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_22_8,231,319770,8953560,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_49_3,1176,18424,55272,1,1,0,0,0,0,combinatorial problem
+JGD_BIBD,bibd_81_2,3240,3240,3240,1,1,0,1,1,1,combinatorial problem
+JGD_BIBD,bibd_81_3,3240,85320,255960,1,1,0,0,0,0,combinatorial problem
+JGD_CAG,CAG_mat1916,1916,1916,195985,1,0,0,0,0.3002540333592691,0.2119864584245809,combinatorial problem
+JGD_CAG,CAG_mat364,364,364,13585,1,0,0,0,0.4155510173209288,0.2804628999319265,combinatorial problem
+JGD_CAG,CAG_mat72,72,72,1012,1,0,0,0,0.5574468085106383,0.3340425531914893,combinatorial problem
+JGD_Forest,TF10,99,107,622,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF11,216,236,1607,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF12,488,552,4231,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF13,1121,1302,11185,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF14,2644,3160,29862,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF15,6334,7742,80057,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF16,15437,19321,216173,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF17,38132,48630,586218,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF18,95368,123867,1597545,1,0,0,0,0,0,combinatorial problem
+JGD_Forest,TF19,241029,317955,4370721,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz1,2240,768,5120,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz2,4032,4480,21504,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz3,1280,2800,11520,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz4,6784,5252,46528,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz5,7382,2882,44056,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz6,7576,3016,45456,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz7,10164,1740,40424,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz8,16728,7176,100368,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz9,19588,4164,97508,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz10,19588,4164,97508,1,0,0,0,0,0,combinatorial problem
+JGD_Franz,Franz11,47104,30144,329728,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-6,30,77,251,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-7,62,150,549,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-8,156,292,1711,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-9,342,540,4570,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-10,652,976,10273,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-11,1227,1692,22110,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-12,2296,2875,46260,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-13,3994,4731,91209,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-14,6735,7621,173337,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-15,11369,11987,323509,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-16,18846,18485,588326,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-17,30162,27944,1035008,1,0,0,0,0,0,combinatorial problem
+JGD_G5,IG5-18,47894,41550,1790490,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_6,469,201,2526,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_7,636,470,5378,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_8,544,637,6153,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_9,340,545,4349,1,0,0,0,0,0,combinatorial problem
+JGD_GL6,GL6_D_10,163,341,2053,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d10,1,60,8,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d11,1019,60,1513,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d12,8899,1019,37519,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d13,47271,8899,356232,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d14,171375,47271,1831183,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d15,460261,171375,6080381,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d16,955128,460261,14488881,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d17,1548650,955128,25978098,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d18,1955309,1548650,35590540,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d19,1911130,1955309,37322725,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d20,1437547,1911130,29893084,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d21,822922,1437547,18174775,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d22,349443,822922,8251000,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d23,105054,349443,2695430,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d24,21074,105054,593892,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d25,2798,21074,81671,1,0,0,0,0,0,combinatorial problem
+JGD_GL7d,GL7d26,305,2798,7412,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,c8_mat11,4562,5761,2462970,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,c8_mat11_I,4562,5761,2462970,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,f855_mat9,2456,2511,171214,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,f855_mat9_I,2456,2511,171214,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,HFE18_96_in,2372,4096,933343,1,1,0,0,0,0,combinatorial problem
+JGD_Groebner,rkat7_mat5,694,738,38114,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,robot24c1_mat5,404,302,15118,1,0,0,0,0,0,combinatorial problem
+JGD_Groebner,robot24c1_mat5_J,302,404,15118,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch3-3-b1,18,9,36,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch3-3-b2,6,18,18,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b1,72,16,144,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b2,96,72,288,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch4-4-b3,24,96,96,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b1,200,25,400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b2,600,200,1800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch5-5-b3,600,600,2400,1,0,0,0,0.02168473728106756,0.01417848206839033,combinatorial problem
+JGD_Homology,ch5-5-b4,120,600,600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b1,450,36,900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b2,2400,450,7200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b3,5400,2400,21600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b4,4320,5400,21600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch6-6-b5,720,4320,4320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b1,630,42,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b2,4200,630,12600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b3,12600,4200,50400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b4,15120,12600,75600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-6-b5,5040,15120,30240,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b1,882,49,1764,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b2,7350,882,22050,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-7-b5,35280,52920,211680,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b1,1176,56,2352,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b2,11760,1176,35280,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b3,58800,11760,235200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b4,141120,58800,705600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-8-b5,141120,141120,846720,1,0,0,0,0.0003732057190233348,0.0002054993516141147,combinatorial problem
+JGD_Homology,ch7-9-b1,1512,63,3024,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b2,17640,1512,52920,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b3,105840,17640,423360,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b4,317520,105840,1587600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch7-9-b5,423360,317520,2540160,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b1,1568,64,3136,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b2,18816,1568,56448,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b3,117600,18816,470400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b4,376320,117600,1881600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,ch8-8-b5,564480,376320,3386880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b1,210,21,420,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b13,6300,25605,88200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b14,920,6300,13800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b15,60,920,960,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b2,1330,210,3990,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b3,5970,1330,23880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,cis-n4c6-b4,20058,5970,100290,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,D6-6,120576,23740,146520,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,klein-b1,30,10,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,klein-b2,20,30,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,lutz30-23-b6,1716,3003,12012,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,m133-b3,200200,200200,800800,1,0,0,0,4.495504495504496e-05,2.747252747252747e-05,combinatorial problem
+JGD_Homology,mk10-b1,630,45,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b2,3150,630,9450,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b3,4725,3150,18900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk10-b4,945,4725,4725,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b1,990,55,1980,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b2,6930,990,20790,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b3,17325,6930,69300,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b4,10395,17325,51975,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk11-b4b,9450,17325,47250,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b1,1485,66,2970,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b2,13860,1485,41580,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b3,51975,13860,207900,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b4,62370,51975,311850,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk12-b5,10395,62370,62370,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk13-b5,135135,270270,810810,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b1,378,36,756,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b2,1260,378,3780,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,mk9-b3,945,1260,3780,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b10,30,306,330,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b1,105,15,210,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b3,1365,455,5460,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b4,3003,1365,15015,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b5,4945,3003,29670,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b6,5715,4945,40005,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b7,3990,5715,31920,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b8,1470,3990,13230,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n2c6-b9,306,1470,3060,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b1,15,6,30,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b2,20,15,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b3,15,20,60,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c4-b4,6,15,30,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b1,45,10,90,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b2,120,45,360,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b3,210,120,840,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b4,252,210,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b5,210,252,1260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b6,120,210,840,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c5-b7,30,120,240,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b10,675,2511,7425,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b1,105,105,210,1,0,0,0,0.08571428571428572,0.0761904761904762,combinatorial problem
+JGD_Homology,n3c6-b11,60,675,720,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b3,1365,455,5460,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b4,3003,1365,15015,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b5,5005,3003,30030,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b6,6435,5005,45045,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b7,6435,6435,51480,1,0,0,0,1,0.5333333333333333,combinatorial problem
+JGD_Homology,n3c6-b8,4935,6435,44415,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n3c6-b9,2511,4935,25110,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b10,120,630,1320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b1,105,15,210,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b11,10,120,120,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b2,455,105,1365,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b3,1350,455,5400,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b4,2852,1350,14260,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b5,4340,2852,26040,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b6,4735,4340,33145,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b7,3635,4735,29080,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b8,1895,3635,17055,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c5-b9,630,1895,6300,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b10,132402,186558,1456422,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b11,69235,132402,830820,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b1,210,21,420,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b12,25605,69235,332865,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b13,6300,25605,88200,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b14,920,6300,13800,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b15,60,920,960,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b2,1330,210,3990,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b3,5970,1330,23880,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b4,20058,5970,100290,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b5,51813,20058,310878,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b6,104115,51813,728805,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b7,163215,104115,1305720,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b8,198895,163215,1790055,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,n4c6-b9,186558,198895,1865580,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b1,17160,286,34320,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b2,200200,17160,600600,1,0,0,0,0,0,combinatorial problem
+JGD_Homology,shar_te2-b3,200200,200200,800800,1,0,0,0,7.492516848797264e-05,2.997006739518906e-05,combinatorial problem
+QY,case39,40216,40216,1042160,1,0,0,0,1,1,power network problem sequence
+JGD_Kocay,Trec3,1,2,1,1,1,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec4,2,3,3,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec5,3,7,12,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec6,6,15,40,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec7,11,36,147,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec8,23,84,549,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec9,47,201,2147,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec10,106,478,8612,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec11,235,1138,35705,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec12,551,2726,151219,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec13,1301,6561,654517,1,0,0,0,0,0,combinatorial problem
+JGD_Kocay,Trec14,3159,15905,2872265,1,0,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_2_1,85,85,254,1,1,0,0,0.03252032520325204,0.03252032520325204,combinatorial problem
+JGD_Margulies,cat_ears_2_4,1009,2689,7982,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_3_1,204,181,542,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_3_4,5226,13271,39592,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_4_1,377,313,938,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,cat_ears_4_4,19020,44448,132888,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_4_1,121,129,386,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_4_4,1837,5529,16466,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_5_1,211,201,602,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_5_4,5226,14721,43942,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_7_1,463,393,1178,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_7_4,27693,67593,202218,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_8_1,625,513,1538,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,flower_8_4,55081,125361,375266,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_10_4_1,349651,330751,992252,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_6_2_1,601,676,2027,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,kneser_8_3_1,15737,15681,47042,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_3_1,21,25,74,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_4_1,36,41,122,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_5_1,57,61,182,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_601,902103,723605,2170814,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_6_1,83,85,254,1,1,0,0,0,0,combinatorial problem
+JGD_Margulies,wheel_7_1,114,113,338,1,1,0,0,0,0,combinatorial problem
+JGD_Relat,rel3,12,5,18,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel4,66,12,104,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel5,340,35,656,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel6,2340,157,5101,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel7,21924,1045,50636,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel8,345688,12347,821839,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,rel9,9888048,274669,23667183,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat3,12,5,24,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat4,66,12,172,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat5,340,35,1058,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat6,2340,157,8108,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat7b,21924,1045,81355,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat7,21924,1045,81355,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat8,345688,12347,1334038,1,0,0,0,0,0,combinatorial problem
+JGD_Relat,relat9,12360060,549336,38955420,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_5,434,115,1832,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_6,970,435,6491,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_7,1270,971,12714,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_8,1132,1271,14966,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_9,815,1133,12395,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_10,460,816,7614,1,0,0,0,0,0,combinatorial problem
+JGD_SL6,D_11,169,461,2952,1,0,0,0,0,0,combinatorial problem
+JGD_SPG,08blocks,300,300,592,1,0,0,0,0.0273972602739726,0,combinatorial problem
+JGD_SPG,EX1,560,560,8736,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX2,560,560,8736,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX3,2600,2600,71760,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX4,2600,2600,71760,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX5,6545,6545,295680,1,1,0,0,1,1,combinatorial problem
+JGD_SPG,EX6,6545,6545,295680,1,1,0,0,1,1,combinatorial problem
+JGD_Taha,abtaha2,37932,331,137228,1,0,0,0,0,0,combinatorial problem
+JGD_Taha,abtaha1,14596,209,51307,1,0,0,0,0,0,combinatorial problem
+JGD_Trefethen,Trefethen_20b,19,19,147,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20,20,20,158,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_150,150,150,2040,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_200b,199,199,2873,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_200,200,200,2890,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_300,300,300,4678,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_500,500,500,8478,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_700,700,700,12654,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_2000,2000,2000,41906,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20000b,19999,19999,554435,1,0,0,1,1,1,combinatorial problem
+JGD_Trefethen,Trefethen_20000,20000,20000,554466,1,0,0,1,1,1,combinatorial problem
+QY,case9,14454,14454,147972,1,0,0,0,1,1,power network problem sequence
+FreeFieldTechnologies,mono_500Hz,169410,169410,5033796,0,0,1,0,1,0.820796293715178,acoustics problem
+Freescale,Freescale1,3428755,3428755,17052626,1,0,0,0,0.9061379876258038,0.3945743467477048,circuit simulation problem
+NYPA,Maragal_8,33212,75077,1308415,1,0,0,0,0,0,least squares problem
+Bates,sls,1748122,62729,6804304,1,0,0,0,0,0,least squares problem
+TSOPF,TSOPF_RS_b2383,38120,38120,16171169,1,0,0,0,0.002485718029041526,0.0003350401831305099,power network problem
+TSOPF,TSOPF_FS_b300,29214,29214,4400122,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c1,10798,10798,608540,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c3,30798,30798,1801300,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b162_c4,40798,40798,2398220,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c1,29214,29214,4400122,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c2,56814,56814,8767466,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b300_c3,84414,84414,13135930,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c19,76216,76216,1977600,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c30,120216,120216,3121160,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b39_c7,28216,28216,730080,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b9_c1,2454,2454,25032,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_FS_b9_c6,14454,14454,147972,1,0,0,0,1,1,power network problem
+TSOPF,TSOPF_RS_b162_c1,5374,5374,205399,1,0,0,0,0.02981942459702805,0.002418331351367556,power network problem
+TSOPF,TSOPF_RS_b162_c3,15374,15374,610299,1,0,0,0,0.02683526094131803,0.0008133934303355415,power network problem
+TSOPF,TSOPF_RS_b162_c4,20374,20374,812749,1,0,0,0,0.02645844479664045,0.0006107347997698388,power network problem
+TSOPF,TSOPF_RS_b2052_c1,25626,25626,6761100,1,0,0,0,0.003886561090908282,0.0002050869579089441,power network problem
+TSOPF,TSOPF_RS_b2383_c1,38120,38120,16171169,1,0,0,0,0.002485718029041526,0.0003350401831305099,power network problem
+TSOPF,TSOPF_RS_b300_c1,14538,14538,1474325,1,0,0,0,0.01034334678703541,0.0003506683588241378,power network problem
+TSOPF,TSOPF_RS_b300_c2,28338,28338,2943887,1,0,0,0,0.00991209710027776,0.0001755931670937033,power network problem
+TSOPF,TSOPF_RS_b300_c3,42138,42138,4413449,1,0,0,0,0.009768063952888569,0.0001171197776188222,power network problem
+TSOPF,TSOPF_RS_b39_c19,38098,38098,684206,1,0,0,0,0.05914025923776359,0.0001300058038305281,power network problem
+TSOPF,TSOPF_RS_b39_c30,60098,60098,1079986,1,0,0,0,0.05903687108113011,8.236061201778597e-05,power network problem
+TSOPF,TSOPF_RS_b39_c7,14098,14098,252446,1,0,0,0,0.05962284731399325,0.0003524007299729407,power network problem
+TSOPF,TSOPF_RS_b678_c1,18696,18696,4396289,1,0,0,0,0.004448301852317109,0.0003256971884064591,power network problem
+TSOPF,TSOPF_RS_b678_c2,35696,35696,8781949,1,0,0,0,0.004170134538170976,0.0001630280691806068,power network problem
+TSOPF,TSOPF_RS_b9_c6,7224,7224,54082,1,0,0,0,0.1544436146377894,0.0002560546249866638,power network problem
+Lee,fem_hifreq_circuit,491100,491100,20239237,0,0,1,0,0.999999037883928,0.4990933575151925,electromagnetics problem
+Buss,connectus,512,394792,1127525,1,1,0,0,0,0,undirected bipartite graph
+Yoshiyasu,image_interp,240000,120000,711683,1,0,1,0,0,0,computer graphics/vision problem
+Yoshiyasu,mesh_deform,234023,9393,853829,1,0,1,0,0,0,computer graphics/vision problem
+Priebel,130bit,584,575,6120,1,1,0,0,0,0,combinatorial problem
+Priebel,145bit,1002,993,11315,1,1,0,0,0,0,combinatorial problem
+Priebel,162bit,3606,3597,37118,1,1,0,0,0,0,combinatorial problem
+Priebel,176bit,7441,7431,82270,1,1,0,0,0,0,combinatorial problem
+Priebel,192bit,13691,13682,154303,1,1,0,0,0,0,combinatorial problem
+Priebel,208bit,24430,24421,299756,1,1,0,0,0,0,combinatorial problem
+MathWorks,TS,2142,2142,45262,1,0,0,0,0.9525732031943213,0.04130434782608695,counter-example problem
+Botonakis,thermomech_TC,102158,102158,711558,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_TK,102158,102158,711558,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_dM,204316,204316,1423116,1,0,1,1,1,1,thermal problem
+Botonakis,thermomech_dK,204316,204316,2846228,1,0,1,0,1,0.6652727267221619,thermal problem
+MaxPlanck,shallow_water1,81920,81920,327680,1,0,1,1,1,1,computational fluid dynamics problem
+MaxPlanck,shallow_water2,81920,81920,327680,1,0,1,1,1,1,computational fluid dynamics problem
+Buss,12month1,12471,872622,22624727,1,1,0,0,0,0,undirected bipartite graph
+Clark,tomographic1,73159,59498,647495,1,0,1,0,0,0,computer graphics/vision problem
+Bourchtein,atmosmodd,1270432,1270432,8814880,1,0,1,0,1,0.6690207156308852,computational fluid dynamics problem
+Bourchtein,atmosmodj,1270432,1270432,8814880,1,0,1,0,1,0.6690207156308852,computational fluid dynamics problem
+Bourchtein,atmosmodl,1489752,1489752,10319760,1,0,1,0,1,0.6714503542918647,computational fluid dynamics problem
+Bourchtein,atmosmodm,1489752,1489752,10319760,1,0,1,0,1,0.6714503542918647,computational fluid dynamics problem
+Puri,ABACUS_shell_ud,23412,23412,218484,1,0,1,0,1,0.9753731955380578,model reduction problem
+Puri,ABACUS_shell_ld,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Puri,ABACUS_shell_md,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Puri,ABACUS_shell_hd,23412,23412,218484,0,0,1,0,1,0.8850885826771654,model reduction problem
+Stevenson,LargeRegFile,2111154,801374,4944201,1,0,0,0,0,0,circuit simulation problem
+Freescale,memchip,2707524,2707524,13343948,1,0,0,0,0.9058013004223939,0.4015860962358702,circuit simulation problem
+Freescale,transient,178866,178866,961368,1,0,0,0,0.9996742983044353,0.243597788123496,circuit simulation problem
+Freescale,circuit5M,5558326,5558326,59524291,1,0,0,0,0.9999998517635799,0.4198865531852634,circuit simulation problem
+Freescale,circuit5M_dc,3523317,3523317,14865409,1,0,0,0,0.9072118240231114,0.7150571517141635,circuit simulation problem
+Grund,poli3,16955,16955,37849,1,0,0,0,0.00507322676366421,0.0005743275581506652,economic problem
+Grund,poli4,33833,33833,73249,1,0,0,0,0.003551857113862391,0.0002029632636492795,economic problem
+Belcastro,human_gene1,22283,22283,24669643,1,0,0,0,1,1,undirected weighted graph
+Belcastro,human_gene2,14340,14340,18068388,1,0,0,0,1,1,undirected weighted graph
+Belcastro,mouse_gene,45101,45101,28967291,1,0,0,0,1,1,undirected weighted graph
+Um,offshore,259789,259789,4242673,1,0,1,1,1,1,electromagnetics problem
+SNAP,soc-Epinions1,75888,75888,508837,1,1,0,0,0.405226035056413,0.405226035056413,directed graph
+SNAP,soc-LiveJournal1,4847571,4847571,68993773,1,1,0,0,0.7484193555024753,0.7484193555024753,directed graph
+SNAP,soc-Slashdot0811,77360,77360,905468,1,1,0,0,0.8669352939826918,0.8669352939826918,directed graph
+SNAP,soc-Slashdot0902,82168,82168,948464,1,1,0,0,0.8410650442849082,0.8410650442849082,directed graph
+SNAP,wiki-Vote,8297,8297,103689,1,1,0,0,0.0564572905515532,0.0564572905515532,directed graph
+SNAP,email-EuAll,265214,265214,420045,1,1,0,0,0.2600511748250413,0.2600511748250413,directed graph
+SNAP,email-Enron,36692,36692,367662,1,1,0,0,1,1,directed graph
+SNAP,wiki-Talk,2394385,2394385,5021410,1,1,0,0,0.1441208744157517,0.1441208744157517,directed graph
+SNAP,cit-HepPh,34546,34546,421578,1,1,0,0,0.003117186276789061,0.003117186276789061,directed graph
+SNAP,cit-HepTh,27770,27770,352807,1,1,0,0,0.002738343613933237,0.002738343613933237,directed graph
+SNAP,cit-Patents,3774768,3774768,16518948,1,1,0,0,0,0,directed graph
+SNAP,ca-AstroPh,18772,18772,396160,1,1,0,0,1,1,undirected graph
+SNAP,ca-CondMat,23133,23133,186936,1,1,0,0,1,1,undirected graph
+SNAP,ca-GrQc,5242,5242,28980,1,1,0,0,1,1,undirected graph
+SNAP,ca-HepPh,12008,12008,237010,1,1,0,0,1,1,undirected graph
+SNAP,ca-HepTh,9877,9877,51971,1,1,0,0,1,1,undirected graph
+SNAP,web-BerkStan,685230,685230,7600595,1,1,0,0,0.2502764586193581,0.2502764586193581,directed graph
+SNAP,web-Google,916428,916428,5105039,1,1,0,0,0.3067510355944391,0.3067510355944391,directed graph
+SNAP,web-NotreDame,325729,325729,1497134,1,1,0,0,0.5165359238309862,0.5165359238309862,directed graph
+SNAP,web-Stanford,281903,281903,2312497,1,1,0,0,0.2766368994208425,0.2766368994208425,directed graph
+SNAP,amazon0302,262111,262111,1234877,1,1,0,0,0.5427018237443891,0.5427018237443891,directed graph
+SNAP,amazon0312,400727,400727,3200440,1,1,0,0,0.5315337891039982,0.5315337891039982,directed graph
+SNAP,amazon0505,410236,410236,3356824,1,1,0,0,0.5465803390347542,0.5465803390347542,directed graph
+SNAP,amazon0601,403394,403394,3387388,1,1,0,0,0.5573497928197183,0.5573497928197183,directed graph
+SNAP,p2p-Gnutella04,10879,10879,39994,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella05,8846,8846,31839,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella06,8717,8717,31525,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella08,6301,6301,20777,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella09,8114,8114,26013,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella24,26518,26518,65369,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella25,22687,22687,54705,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella30,36682,36682,88328,1,1,0,0,0,0,directed graph
+SNAP,p2p-Gnutella31,62586,62586,147892,1,1,0,0,0,0,directed graph
+SNAP,roadNet-CA,1971281,1971281,5533214,1,1,0,0,1,1,undirected graph
+SNAP,roadNet-PA,1090920,1090920,3083796,1,1,0,0,1,1,undirected graph
+SNAP,roadNet-TX,1393383,1393383,3843320,1,1,0,0,1,1,undirected graph
+SNAP,as-735,7716,7716,26467,1,1,0,0,1,1,undirected graph sequence
+SNAP,as-Skitter,1696415,1696415,22190596,1,1,0,0,1,1,undirected graph
+SNAP,as-caida,31379,31379,106762,1,0,0,0,1,0.07869841329311927,directed weighted graph sequence
+SNAP,Oregon-1,11492,11492,46818,1,1,0,0,1,1,undirected graph sequence
+SNAP,Oregon-2,11806,11806,65460,1,1,0,0,1,1,undirected graph sequence
+SNAP,soc-sign-epinions,131828,131828,841372,1,0,0,0,0.3082520316984202,0.3018224331855771,directed weighted graph
+SNAP,soc-sign-Slashdot081106,77357,77357,516575,1,0,0,0,0.1859207278710739,0.1786110438948846,directed weighted graph
+SNAP,soc-sign-Slashdot090216,81871,81871,545671,1,0,0,0,0.175926519826049,0.168574104176326,directed weighted graph
+SNAP,soc-sign-Slashdot090221,82144,82144,549202,1,0,0,0,0.1774246998372184,0.1703271291801559,directed weighted graph
+Dziekonski,gsm_106857,589446,589446,21758924,1,0,1,0,1,1,electromagnetics problem
+Gleich,flickr,820878,820878,9837214,1,1,0,0,0.653017002578169,0.653017002578169,directed graph
+Gleich,minnesota,2642,2642,6606,1,1,0,0,1,1,undirected graph
+Gleich,usroads-48,126146,126146,323900,1,1,0,0,1,1,undirected graph
+Gleich,usroads,129164,129164,330870,1,1,0,0,1,1,undirected graph
+Fluorem,DK01R,903,903,11766,1,0,1,0,0.9614287029365737,0,computational fluid dynamics problem
+Fluorem,GT01R,7980,7980,430909,1,0,1,0,0.8811455350661695,9.457852263618717e-06,computational fluid dynamics problem
+Fluorem,PR02R,161070,161070,8185136,1,0,1,0,0.9476492341912441,0.0001697393815055858,computational fluid dynamics problem
+Fluorem,RM07R,381689,381689,37464962,1,0,1,0,0.9261667922354103,4.260681089287885e-06,computational fluid dynamics problem
+Rommes,ww_36_pmec_36,66,66,1194,1,0,1,0,0.3339191564147627,0,eigenvalue/model reduction problem
+Rommes,ww_vref_6405,13251,13251,48737,1,0,1,0,0.707540090603374,0.5856980072816208,eigenvalue/model reduction problem
+Rommes,xingo_afonso_itaipu,13250,13250,48735,1,0,1,0,0.7075597554196776,0.5857142857142857,eigenvalue/model reduction problem
+Rommes,mimo8x8_system,13309,13309,48872,1,0,1,0,0.7060291752177048,0.5844472793832159,eigenvalue/model reduction problem
+Rommes,mimo28x28_system,13251,13251,48737,1,0,1,0,0.707540090603374,0.5856980072816208,eigenvalue/model reduction problem
+Rommes,mimo46x46_system,13250,13250,48735,1,0,1,0,0.7075597554196776,0.5857142857142857,eigenvalue/model reduction problem
+Rommes,juba40k,40337,40337,144945,1,0,1,0,0.6934462083788981,0.5830536596402579,eigenvalue/model reduction problem
+Rommes,bauru5727,40366,40366,145019,1,0,1,0,0.6931521565005984,0.5828064190876452,eigenvalue/model reduction problem
+Rommes,zeros_nopss_13k,13296,13296,48827,1,0,1,0,0.7083056110002218,0.5842204479929031,eigenvalue/model reduction problem
+Rommes,descriptor_xingo6u,20738,20738,73916,1,0,1,0,0.6848202865775669,0.5745268504272713,eigenvalue/model reduction problem
+Rommes,nopss_11k,11685,11685,44941,1,0,1,0,0.7502077151335311,0.6233827893175075,eigenvalue/model reduction problem
+Rommes,xingo3012,20944,20944,74386,1,0,1,0,0.681002526603102,0.5712336093539642,eigenvalue/model reduction problem
+Rommes,bips98_606,7135,7135,34738,1,0,1,0,0.9086859688195991,0.7583878152166104,eigenvalue/model reduction problem
+Rommes,bips98_1142,9735,9735,40983,1,0,1,0,0.8020552507215579,0.6694154587839767,eigenvalue/model reduction problem
+Rommes,bips98_1450,11305,11305,44678,1,0,1,0,0.7593684272891549,0.6277809047012471,eigenvalue/model reduction problem
+Rommes,bips07_1693,13275,13275,49044,1,0,1,0,0.706761938919083,0.5845449278560985,eigenvalue/model reduction problem
+Rommes,bips07_1998,15066,15066,62198,1,0,1,0,0.7978660841804587,0.6687809795849786,eigenvalue/model reduction problem
+Rommes,bips07_2476,16861,16861,66498,1,0,1,0,0.7574573297176583,0.6349098739830914,eigenvalue/model reduction problem
+Rommes,bips07_3078,21128,21128,75729,1,0,1,0,0.6861363964744979,0.5750975292587777,eigenvalue/model reduction problem
+Rommes,M10PI_n1,528,528,1317,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M20PI_n1,1028,1028,2547,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M40PI_n1,2028,2028,5007,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M80PI_n1,4028,4028,9927,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,M10PI_n,682,682,1633,1,0,1,0,1,0.1132075471698113,eigenvalue/model reduction problem
+Rommes,M20PI_n,1182,1182,2881,1,0,1,0,1,0.04173622704507512,eigenvalue/model reduction problem
+Rommes,M40PI_n,2182,2182,5341,1,0,1,0,1,0.02274795268425842,eigenvalue/model reduction problem
+Rommes,M80PI_n,4182,4182,10261,1,0,1,0,1,0.01191043353978085,eigenvalue/model reduction problem
+Rommes,S10PI_n1,528,528,1317,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S20PI_n1,1028,1028,2547,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S40PI_n1,2028,2028,5007,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S80PI_n1,4028,4028,9927,1,0,1,0,1,0,eigenvalue/model reduction problem
+Rommes,S10PI_n,682,682,1633,1,0,1,0,1,0.1132075471698113,eigenvalue/model reduction problem
+Rommes,S20PI_n,1182,1182,2881,1,0,1,0,1,0.04173622704507512,eigenvalue/model reduction problem
+Rommes,S40PI_n,2182,2182,5341,1,0,1,0,1,0.02274795268425842,eigenvalue/model reduction problem
+Rommes,S80PI_n,4182,4182,10261,1,0,1,0,1,0.01191043353978085,eigenvalue/model reduction problem
+Williams,pdb1HYS,36417,36417,4344765,1,0,0,1,1,1,weighted undirected graph
+Williams,consph,83334,83334,6010480,1,0,1,1,1,1,2D/3D problem
+Williams,cant,62451,62451,4007383,1,0,1,1,1,1,2D/3D problem
+Williams,mac_econ_fwd500,206500,206500,1273389,1,0,0,0,0.05995735832675801,0.005599217836274841,economic problem
+Williams,mc2depi,525825,525825,2100225,1,0,1,0,0,0,2D/3D problem
+Williams,cop20k_A,121192,121192,2624331,1,0,1,0,1,1,2D/3D problem
+Williams,webbase-1M,1000005,1000005,3105536,1,0,0,0,0.09552554676231316,0.01588957844838191,weighted directed graph
+Freescale,FullChip,2987012,2987012,26621983,1,0,0,0,0.9999996192108144,0.005614865134161801,circuit simulation problem
+Dattorro,EternityII_E,11077,262144,1503732,1,0,0,0,0,0,optimization problem
+Dattorro,EternityII_Etilde,10054,204304,1170516,1,0,0,0,0,0,optimization problem
+Dattorro,EternityII_A,7362,150638,782087,1,0,0,0,0,0,optimization problem
+Fluorem,HV15R,2017169,2017169,283073458,1,0,1,0,0.8446615474952066,0.0007082780488857875,computational fluid dynamics problem
+Dziekonski,dielFilterV2clx,607232,607232,25309272,0,0,1,0,1,0.9712899015627859,electromagnetics problem
+Dziekonski,dielFilterV2real,1157456,1157456,48538952,1,0,1,0,1,1,electromagnetics problem
+Dziekonski,dielFilterV3clx,420408,420408,32886208,0,0,1,0,1,0.8873627016737613,electromagnetics problem
+Dziekonski,dielFilterV3real,1102824,1102824,89306020,1,0,1,0,1,1,electromagnetics problem
+Newman,adjnoun,112,112,850,1,1,0,0,1,1,undirected graph
+Newman,as-22july06,22963,22963,96872,1,1,0,0,1,1,undirected graph
+Newman,astro-ph,16706,16706,242502,1,0,0,0,1,1,undirected weighted graph
+Newman,celegansneural,297,297,2345,1,0,0,0,0.1680170575692964,0.04946695095948828,directed weighted graph
+Newman,cond-mat,16726,16726,95188,1,0,0,0,1,1,undirected weighted graph
+Newman,cond-mat-2003,31163,31163,240058,1,0,0,0,1,1,undirected weighted graph
+Newman,cond-mat-2005,40421,40421,351382,1,0,0,0,1,1,undirected weighted graph
+Newman,dolphins,62,62,318,1,1,0,0,1,1,undirected graph
+Newman,football,115,115,1226,1,0,0,0,1,1,undirected multigraph
+Newman,hep-th,8361,8361,31502,1,0,0,0,1,1,undirected weighted graph
+Newman,karate,34,34,156,1,1,0,0,1,1,undirected graph
+Newman,lesmis,77,77,508,1,0,0,0,1,1,undirected weighted graph
+Newman,netscience,1589,1589,5484,1,0,0,0,1,1,undirected weighted graph
+Newman,polblogs,1490,1490,19025,1,0,0,0,0.242561244874356,0.2414046893071181,directed multigraph
+Newman,polbooks,105,105,882,1,1,0,0,1,1,undirected graph
+Newman,power,4941,4941,13188,1,1,0,0,1,1,undirected graph
+Arenas,PGPgiantcompo,10680,10680,48632,1,0,0,0,1,1,undirected multigraph
+Arenas,jazz,198,198,5484,1,0,0,0,1,1,undirected multigraph
+Arenas,celegans_metabolic,453,453,4065,1,0,0,0,1,1,undirected multigraph
+Arenas,email,1133,1133,10902,1,1,0,0,1,1,undirected graph
+AG-Monien,3elt,4720,4720,27444,1,1,1,0,1,1,2D/3D problem
+AG-Monien,3elt_dual,9000,9000,26556,1,1,1,0,1,1,2D/3D problem
+AG-Monien,airfoil1,4253,4253,24578,1,1,1,0,1,1,2D/3D problem
+AG-Monien,airfoil1_dual,8034,8034,23626,1,1,1,0,1,1,2D/3D problem
+AG-Monien,big_dual,30269,30269,89858,1,1,1,0,1,1,2D/3D problem
+AG-Monien,crack,10240,10240,60760,1,1,1,0,1,1,2D/3D problem
+AG-Monien,crack_dual,20141,20141,60086,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid1,252,252,952,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid1_dual,224,224,840,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid2,3296,3296,12864,1,1,1,0,1,1,2D/3D problem
+AG-Monien,grid2_dual,3136,3136,12224,1,1,1,0,1,1,2D/3D problem
+AG-Monien,netz4504,1961,1961,5156,1,1,1,0,1,1,2D/3D problem
+AG-Monien,netz4504_dual,615,615,2342,1,1,1,0,1,1,2D/3D problem
+AG-Monien,ukerbe1,5981,5981,15704,1,1,1,0,1,1,2D/3D problem
+AG-Monien,ukerbe1_dual,1866,1866,7076,1,1,1,0,1,1,2D/3D problem
+AG-Monien,whitaker3,9800,9800,57978,1,1,1,0,1,1,2D/3D problem
+AG-Monien,whitaker3_dual,19190,19190,57162,1,1,1,0,1,1,2D/3D problem
+AG-Monien,brack2,62631,62631,733118,1,1,1,0,1,1,2D/3D problem
+AG-Monien,wave,156317,156317,2118662,1,1,1,0,1,1,2D/3D problem
+AG-Monien,diag,2559,2559,8184,1,1,1,0,1,1,2D/3D problem
+AG-Monien,L,956,956,3640,1,1,1,0,1,1,2D/3D problem
+AG-Monien,L-9,17983,17983,71192,1,1,1,0,1,1,2D/3D problem
+AG-Monien,stufe,1036,1036,3736,1,1,1,0,1,1,2D/3D problem
+AG-Monien,stufe-10,24010,24010,92828,1,1,1,0,1,1,2D/3D problem
+AG-Monien,biplane-9,21701,21701,84076,1,1,1,0,1,1,2D/3D problem
+AG-Monien,shock-9,36476,36476,142580,1,1,1,0,1,1,2D/3D problem
+AG-Monien,bfly,49152,49152,196608,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,cage,366,366,5124,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,cca,49152,49152,139264,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,ccc,49152,49152,147456,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,debr,1048576,1048576,4194298,1,1,0,0,1,1,undirected graph sequence
+AG-Monien,se,32768,32768,98300,1,1,0,0,1,1,undirected graph sequence
+LAW,cnr-2000,325557,325557,3216152,1,1,0,0,0.2491384628169437,0.2491384628169437,directed graph
+LAW,in-2004,1382908,1382908,16917053,1,1,0,0,0.3564974165403691,0.3564974165403691,directed graph
+LAW,eu-2005,862664,862664,19235140,1,1,0,0,0.277066804642518,0.277066804642518,directed graph
+LAW,enron,69244,69244,276143,1,1,0,0,0.1468201946046729,0.1468201946046729,directed graph
+LAW,amazon-2008,735323,735323,5158388,1,1,0,0,0.6338864001699756,0.6338864001699756,directed graph
+LAW,ljournal-2008,5363260,5363260,79023142,1,1,0,0,0.7302651670539438,0.7302651670539438,directed graph
+LAW,hollywood-2009,1139905,1139905,113891327,1,1,0,0,1,1,undirected graph
+LAW,dblp-2010,326186,326186,1615400,1,1,0,0,1,1,undirected graph
+LAW,webbase-2001,118142155,118142155,1019903190,1,1,0,0,0.2780598082364509,0.2780598082364509,directed graph
+LAW,uk-2002,18520486,18520486,298113762,1,1,0,0,0.2084315853924949,0.2084315853924949,directed graph
+LAW,indochina-2004,7414866,7414866,194109311,1,1,0,0,0.4240142027924715,0.4240142027924715,directed graph
+LAW,it-2004,41291594,41291594,1150725436,1,1,0,0,0.1906175218924703,0.1906175218924703,directed graph
+LAW,arabic-2005,22744080,22744080,639999458,1,1,0,0,0.2447917196533005,0.2447917196533005,directed graph
+LAW,sk-2005,50636154,50636154,1949412601,1,1,0,0,0.1245713694644861,0.1245713694644861,directed graph
+LAW,uk-2005,39459925,39459925,936364282,1,1,0,0,0.3002522210250522,0.3002522210250522,directed graph
+DIMACS10,caidaRouterLevel,192244,192244,1218132,1,1,0,0,1,1,undirected graph
+DIMACS10,chesapeake,39,39,340,1,1,0,0,1,1,undirected graph
+DIMACS10,road_central,14081816,14081816,33866826,1,1,0,0,1,1,undirected graph
+DIMACS10,road_usa,23947347,23947347,57708624,1,1,0,0,1,1,undirected graph
+DIMACS10,citationCiteseer,268495,268495,2313294,1,1,0,0,1,1,undirected graph
+DIMACS10,coAuthorsCiteseer,227320,227320,1628268,1,1,0,0,1,1,undirected graph
+DIMACS10,coAuthorsDBLP,299067,299067,1955352,1,1,0,0,1,1,undirected graph
+DIMACS10,coPapersCiteseer,434102,434102,32073440,1,1,0,0,1,1,undirected graph
+DIMACS10,coPapersDBLP,540486,540486,30491458,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n10,1024,1024,6112,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n11,2048,2048,12254,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n12,4096,4096,24528,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n13,8192,8192,49094,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n14,16384,16384,98244,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n15,32768,32768,196548,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n16,65536,65536,393150,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n17,131072,131072,786352,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n18,262144,262144,1572792,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n19,524288,524288,3145646,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n20,1048576,1048576,6291372,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n21,2097152,2097152,12582816,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n22,4194304,4194304,25165738,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n23,8388608,8388608,50331568,1,1,0,0,1,1,undirected graph
+DIMACS10,delaunay_n24,16777216,16777216,100663202,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00000,18318143,18318143,54940162,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00010,19458087,19458087,58359528,1,1,0,0,1,1,undirected graph
+DIMACS10,hugebubbles-00020,21198119,21198119,63580358,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00000,4588484,4588484,13758266,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00010,12057441,12057441,36164358,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetrace-00020,16002413,16002413,47997626,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00000,5824554,5824554,17467046,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00010,6592765,6592765,19771708,1,1,0,0,1,1,undirected graph
+DIMACS10,hugetric-00020,7122792,7122792,21361554,1,1,0,0,1,1,undirected graph
+DIMACS10,kron_g500-logn16,65536,65536,4912469,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn17,131072,131072,10228360,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn18,262144,262144,21165908,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn19,524288,524288,43562265,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn20,1048576,1048576,89239674,1,0,0,0,1,1,undirected multigraph
+DIMACS10,kron_g500-logn21,2097152,2097152,182082942,1,0,0,0,1,1,undirected multigraph
+DIMACS10,adaptive,6815744,6815744,27248640,1,1,0,0,1,1,undirected graph
+DIMACS10,channel-500x100x100-b050,4802000,4802000,85362744,1,1,0,0,1,1,undirected graph
+DIMACS10,packing-500x100x100-b050,2145852,2145852,34976486,1,1,0,0,1,1,undirected graph
+DIMACS10,venturiLevel3,4026819,4026819,16108474,1,1,0,0,1,1,undirected graph
+DIMACS10,rgg_n_2_15_s0,32768,32768,320480,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_16_s0,65536,65536,684254,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_17_s0,131072,131072,1457506,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_18_s0,262144,262144,3094566,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_19_s0,524288,524288,6539532,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_20_s0,1048576,1048576,13783240,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_21_s0,2097152,2097152,28975990,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_22_s0,4194304,4194304,60718396,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_23_s0,8388608,8388608,127002786,1,1,0,0,1,1,undirected random graph
+DIMACS10,rgg_n_2_24_s0,16777216,16777216,265114400,1,1,0,0,1,1,undirected random graph
+DIMACS10,asia_osm,11950757,11950757,25423206,1,1,0,0,1,1,undirected graph
+DIMACS10,belgium_osm,1441295,1441295,3099940,1,1,0,0,1,1,undirected graph
+DIMACS10,europe_osm,50912018,50912018,108109320,1,1,0,0,1,1,undirected graph
+DIMACS10,germany_osm,11548845,11548845,24738362,1,1,0,0,1,1,undirected graph
+DIMACS10,great-britain_osm,7733822,7733822,16313034,1,1,0,0,1,1,undirected graph
+DIMACS10,italy_osm,6686493,6686493,14027956,1,1,0,0,1,1,undirected graph
+DIMACS10,luxembourg_osm,114599,114599,239332,1,1,0,0,1,1,undirected graph
+DIMACS10,netherlands_osm,2216688,2216688,4882476,1,1,0,0,1,1,undirected graph
+DIMACS10,144,144649,144649,2148786,1,1,0,0,1,1,undirected graph
+DIMACS10,598a,110971,110971,1483868,1,1,0,0,1,1,undirected graph
+DIMACS10,auto,448695,448695,6629222,1,1,0,0,1,1,undirected graph
+DIMACS10,cs4,22499,22499,87716,1,1,0,0,1,1,undirected graph
+DIMACS10,cti,16840,16840,96464,1,1,0,0,1,1,undirected graph
+DIMACS10,data,2851,2851,30186,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_4elt2,11143,11143,65636,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_body,45087,45087,327468,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_ocean,143437,143437,819186,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_rotor,99617,99617,1324862,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_sphere,16386,16386,98304,1,1,0,0,1,1,undirected graph
+DIMACS10,fe_tooth,78136,78136,905182,1,1,0,0,1,1,undirected graph
+DIMACS10,m14b,214765,214765,3358036,1,1,0,0,1,1,undirected graph
+DIMACS10,t60k,60005,60005,178880,1,1,0,0,1,1,undirected graph
+DIMACS10,uk,4824,4824,13674,1,1,0,0,1,1,undirected graph
+DIMACS10,wing,62032,62032,243088,1,1,0,0,1,1,undirected graph
+DIMACS10,wing_nodal,10937,10937,150976,1,1,0,0,1,1,undirected graph
+IPSO,HTC_336_4438,226340,226340,783496,1,0,0,0,1,1,power network problem
+IPSO,HTC_336_9129,226340,226340,762969,1,0,0,0,1,1,power network problem
+IPSO,OPF_10000,43887,43887,426898,1,0,0,0,1,1,power network problem
+IPSO,OPF_3754,15435,15435,141478,1,0,0,0,1,1,power network problem
+IPSO,OPF_6000,29902,29902,274697,1,0,0,0,1,1,power network problem
+IPSO,TSC_OPF_1047,8140,8140,2012833,1,0,0,0,1,1,power network problem
+IPSO,TSC_OPF_300,9774,9774,820783,1,0,0,0,1,1,power network problem
+Janna,Serena,1391349,1391349,64131971,1,0,1,1,1,1,structural problem
+Janna,Emilia_923,923136,923136,40373538,1,0,1,1,1,1,structural problem
+Janna,Fault_639,638802,638802,27245944,1,0,1,1,1,1,structural problem
+Janna,Flan_1565,1564794,1564794,114165372,1,0,1,1,1,1,structural problem
+Janna,Geo_1438,1437960,1437960,60236322,1,0,1,1,1,1,structural problem
+Janna,Hook_1498,1498023,1498023,59374451,1,0,1,1,1,1,structural problem
+Janna,StocF-1465,1465137,1465137,21005389,1,0,1,1,1,1,computational fluid dynamics problem
+Janna,Cube_Coup_dt0,2164760,2164760,124406070,1,0,1,0,1,1,structural problem
+Janna,Cube_Coup_dt6,2164760,2164760,124406070,1,0,1,0,1,1,structural problem
+Janna,Long_Coup_dt0,1470152,1470152,84422970,1,0,1,0,1,1,structural problem
+Janna,Long_Coup_dt6,1470152,1470152,84422970,1,0,1,0,1,1,structural problem
+Schulthess,N_biocarta,1922,1996,4335,1,0,0,0,0,0,biochemical network
+Schulthess,N_pid,3625,3923,8054,1,0,0,0,0,0,biochemical network
+Schulthess,N_reactome,10204,16559,43816,1,0,0,0,0,0,biochemical network
+Chevron,Chevron1,37365,37365,330633,0,0,0,0,0.994503321194266,0.7103673090824775,other problem
+Chevron,Chevron2,90249,90249,803173,0,0,0,0,0.9963698795383519,0.6400065084076283,other problem
+Chevron,Chevron3,381381,381381,3413113,0,0,0,0,0.998180577966654,0.5728441696033818,other problem
+Chevron,Chevron4,711450,711450,6376412,0,0,0,0,0.9986570077610406,0.5561276492234193,other problem
+CPM,cz148,148,148,1527,1,0,1,0,0.4263959390862944,0.2306018854242204,2D/3D problem
+CPM,cz308,308,308,3182,1,0,1,0,0.4342379958246347,0.2219902574808629,2D/3D problem
+CPM,cz628,628,628,6346,1,0,1,0,0.441413081497027,0.2308499475341028,2D/3D problem
+CPM,cz1268,1268,1268,12786,1,0,1,0,0.4386178155929849,0.2340684146553221,2D/3D problem
+CPM,cz2548,2548,2548,25674,1,0,1,0,0.4322407679667906,0.2349736227622589,2D/3D problem
+CPM,cz5108,5108,5108,51412,1,0,1,0,0.433914996544575,0.2362214927436075,2D/3D problem
+CPM,cz10228,10228,10228,102876,1,0,1,0,0.4358431914342458,0.2371988602020551,2D/3D problem
+CPM,cz20468,20468,20468,206076,1,0,1,0,0.4354769190983147,0.2377052713245119,2D/3D problem
+CPM,cz40948,40948,40948,412148,1,0,1,0,0.4349030172413793,0.2372683189655172,2D/3D problem
+Davis,FX_March2010,1319,9498,301899,1,0,0,0,0,0,term/document graph
+Bodendiek,CurlCurl_0,11083,11083,113343,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_1,226451,226451,2472071,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_2,806529,806529,8921789,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_3,1219574,1219574,13544618,1,0,1,0,1,1,model reduction problem
+Bodendiek,CurlCurl_4,2380515,2380515,26515867,1,0,1,0,1,1,model reduction problem
+DIMACS10,G_n_pin_pout,100000,100000,1002396,1,1,0,0,1,1,random undirected graph
+DIMACS10,preferentialAttachment,100000,100000,999970,1,1,0,0,1,1,random undirected graph
+DIMACS10,smallworld,100000,100000,999996,1,1,0,0,1,1,random undirected graph
+DIMACS10,333SP,3712815,3712815,22217266,1,1,0,0,1,1,undirected graph
+DIMACS10,AS365,3799275,3799275,22736152,1,1,0,0,1,1,undirected graph
+DIMACS10,M6,3501776,3501776,21003872,1,1,0,0,1,1,undirected graph
+DIMACS10,NACA0015,1039183,1039183,6229636,1,1,0,0,1,1,undirected graph
+DIMACS10,NLR,4163763,4163763,24975952,1,1,0,0,1,1,undirected graph
+DIMACS10,ak2010,45292,45292,217098,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,al2010,252266,252266,1230482,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ar2010,186211,186211,904310,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,az2010,241666,241666,1196094,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ca2010,710145,710145,3489366,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,co2010,201062,201062,974574,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ct2010,67578,67578,336352,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,de2010,24115,24115,116056,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,fl2010,484481,484481,2346294,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ga2010,291086,291086,1418056,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,hi2010,25016,25016,124126,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ia2010,216007,216007,1021170,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,id2010,149842,149842,728264,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,il2010,451554,451554,2164464,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,in2010,267071,267071,1281716,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ks2010,238600,238600,1121798,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ky2010,161672,161672,787778,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,la2010,204447,204447,980634,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ma2010,157508,157508,776610,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,md2010,145247,145247,700378,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,me2010,69518,69518,335476,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mi2010,329885,329885,1578090,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mn2010,259777,259777,1227102,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mo2010,343565,343565,1656568,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ms2010,171778,171778,839980,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,mt2010,132288,132288,638668,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nc2010,288987,288987,1416620,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nd2010,133769,133769,625946,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ne2010,193352,193352,913854,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nh2010,48837,48837,234550,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nj2010,169588,169588,829912,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nm2010,168609,168609,830970,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,nv2010,84538,84538,416998,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ny2010,350169,350169,1709544,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,oh2010,365344,365344,1768240,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ok2010,269118,269118,1274148,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,or2010,196621,196621,979512,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,pa2010,421545,421545,2058462,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ri2010,25181,25181,125750,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,sc2010,181908,181908,893160,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,sd2010,88360,88360,410722,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,tn2010,240116,240116,1193966,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,tx2010,914231,914231,4456272,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,ut2010,115406,115406,572066,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,va2010,285762,285762,1402128,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,vt2010,32580,32580,155598,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wa2010,195574,195574,947432,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wi2010,253096,253096,1209404,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wv2010,135218,135218,662922,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,wy2010,86204,86204,427586,1,0,0,0,1,1,undirected weighted graph
+DIMACS10,vsp_barth5_1Ksep_50in_5Kout,32212,32212,203610,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_bcsstk30_500sep_10in_1Kout,58348,58348,4033156,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_befref_fxm_2_4_air02,14109,14109,196448,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_bump2_e18_aa01_model1_crew1,56438,56438,601602,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_c-30_data_data,11023,11023,124368,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_c-60_data_cti_cs4,85830,85830,482160,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_data_and_seymourl,9167,9167,111732,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_finan512_scagr7-2c_rlfddd,139752,139752,1104040,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_mod2_pgp2_slptsk,101364,101364,778736,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_model1_crew1_cr42_south31,45101,45101,379952,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_msc10848_300sep_100in_1Kout,21996,21996,2442056,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_p0291_seymourl_iiasa,10498,10498,107736,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_sctap1-2b_and_seymourl,40174,40174,281662,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_south31_slptsk,39668,39668,379828,1,1,0,0,1,1,random unweighted graph
+DIMACS10,vsp_vibrobox_scagr7-2c_rlfddd,77328,77328,871172,1,1,0,0,1,1,random unweighted graph
+Janna,CoupCons3D,416800,416800,17277420,1,0,1,0,1,0.008881642549324996,structural problem
+Janna,ML_Laplace,377002,377002,27582698,1,0,1,0,1,7.351401706466176e-08,structural problem
+Janna,Transport,1602111,1602111,23487281,1,0,1,0,1,0,structural problem
+Janna,ML_Geer,1504002,1504002,110686677,1,0,1,0,1,2.381330188145693e-07,structural problem
diff --git a/UMFPACK/Demo/Makefile b/UMFPACK/Demo/Makefile
index 9107259..b4b3861 100644
--- a/UMFPACK/Demo/Makefile
+++ b/UMFPACK/Demo/Makefile
@@ -2,19 +2,61 @@
 # compile the UMFPACK demos (for GNU make and original make)
 #-------------------------------------------------------------------------------
 
-# UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis.
+# UMFPACK Copyright (c) Timothy A. Davis.
 # All Rights Reserved.  See ../Doc/License for License.
 
 default: libs run
 
-include ../../UFconfig/UFconfig.mk
+all: libs run hb
 
-C = $(CC) $(CFLAGS) $(UMFPACK_CONFIG) -I../Include -I../../AMD/Include \
-    -I../../UFconfig
+all32: libs run hb fortran
 
-INC = ../Include/umfpack.h ../../AMD/Include/amd.h ../../UFconfig/UFconfig.h
+all64: libs run hb fortran64
 
-LIBS = $(BLAS) $(XERBLA) $(LIB)
+include ../../SuiteSparse_config/SuiteSparse_config.mk
+
+#-------------------------------------------------------------------------------
+# the optional Partition module requires METIS, CAMD, and CCOLAMD
+I_WITH_PARTITION = 
+LIB_WITH_PARTITION =
+CONFIG1 = -DNCHOLMOD
+CONFIG2 = -DNPARTITION
+ifeq (,$(findstring -DNCHOLMOD, $(UMFPACK_CONFIG)))
+    # CHOLMOD is requested.  See if it is available
+    ifeq (../../CHOLMOD, $(wildcard ../../CHOLMOD))
+        ifeq (../../COLAMD, $(wildcard ../../COLAMD))
+            # CHOLMOD and COLAMD are available
+            CONFIG1 =
+            LIB_WITH_CHOLMOD = ../../CHOLMOD/Lib/libcholmod.a \
+                ../../COLAMD/Lib/libcolamd.a
+            # check if METIS is requested and available
+            ifeq (,$(findstring -DNPARTITION, $(CHOLMOD_CONFIG)))
+                # METIS is requested.  See if it is available
+                ifeq ($(METIS_PATH), $(wildcard $(METIS_PATH)))
+                    ifeq (../../CAMD, $(wildcard ../../CAMD))
+                        ifeq (../../CCOLAMD, $(wildcard ../../CCOLAMD))
+                            # METIS, CAMD, and CCOLAMD are available
+                            LIB_WITH_PARTITION = $(METIS) \
+                                ../../CCOLAMD/Lib/libccolamd.a \
+                                ../../CAMD/Lib/libcamd.a
+                            I_WITH_PARTITION = -I$(METIS_PATH)/Lib \
+                                -I../../CCOLAMD/Include -I../../CAMD/Include
+                            CONFIG2 =
+                        endif
+                    endif
+                endif
+            endif
+        endif
+    endif
+endif
+#-------------------------------------------------------------------------------
+
+C = $(CC) $(CF) $(UMFPACK_CONFIG) $(CONFIG1) $(CONFIG2) \
+    -I../Include -I../../AMD/Include -I../../SuiteSparse_config
+
+INC = ../Include/umfpack.h ../../AMD/Include/amd.h ../../SuiteSparse_config/SuiteSparse_config.h
+
+LIBS = $(LAPACK) $(BLAS) $(XERBLA) $(LIB) $(LIB_WITH_CHOLMOD) $(LIB_WITH_PARTITION) $(CUBLAS_LIB) $(CUDART_LIB)
 
 ../Lib/libumfpack.a:
 	( cd ../Lib ; $(MAKE) )
@@ -22,11 +64,30 @@ LIBS = $(BLAS) $(XERBLA) $(LIB)
 ../../AMD/Lib/libamd.a:
 	( cd ../../AMD ; $(MAKE) library )
 
-UMFPACK = ../Lib/libumfpack.a ../../AMD/Lib/libamd.a
+../../SuiteSparse_config/libsuitesparseconfig.a:
+	( cd ../../SuiteSparse_config ; $(MAKE) library )
 
-libs:
-	( cd ../Lib ; $(MAKE) )
-	( cd ../../AMD ; $(MAKE) library )
+../../CHOLMOD/Lib/libcholmod.a:
+	- ( cd ../../CHOLMOD && $(MAKE) library )
+
+../../COLAMD/Lib/libcolamd.a:
+	- ( cd ../../COLAMD && $(MAKE) library )
+
+
+../../CCOLAMD/Lib/libccolamd.a:
+	- ( cd ../../CCOLAMD && $(MAKE) library )
+
+../../CAMD/Lib/libcamd.a:
+	- ( cd ../../CAMD && $(MAKE) library )
+
+$(METIS):
+	( cd $(METIS_PATH) && $(MAKE) )
+
+UMFPACK = ../Lib/libumfpack.a ../../AMD/Lib/libamd.a \
+    ../../SuiteSparse_config/libsuitesparseconfig.a \
+    $(LIB_WITH_CHOLMOD) $(LIB_WITH_PARTITION) 
+
+libs: $(UMFPACK)
 
 #-------------------------------------------------------------------------------
 # Create the demo programs, run them, and compare the output
@@ -54,7 +115,7 @@ umfpack_di_demo.c: umfpack_xx_demo.c umfpack_di_demo.sed
 umfpack_di_demo: umfpack_di_demo.c $(INC) $(UMFPACK)
 	$(C) -o umfpack_di_demo umfpack_di_demo.c $(UMFPACK) $(LIBS)
 
-# double-precision, UF_long verion:
+# double-precision, SuiteSparse_long verion:
 umfpack_dl_demo.c: umfpack_xx_demo.c umfpack_dl_demo.sed
 	- sed -f umfpack_dl_demo.sed < umfpack_xx_demo.c > umfpack_dl_demo.c
 
@@ -68,7 +129,7 @@ umfpack_zi_demo.c: umfpack_xx_demo.c umfpack_zi_demo.sed
 umfpack_zi_demo: umfpack_zi_demo.c $(INC) $(UMFPACK)
 	$(C) -o umfpack_zi_demo umfpack_zi_demo.c $(UMFPACK) $(LIBS)
 
-# complex, UF_long verion:
+# complex, SuiteSparse_long verion:
 umfpack_zl_demo.c: umfpack_xx_demo.c umfpack_zl_demo.sed
 	- sed -f umfpack_zl_demo.sed < umfpack_xx_demo.c > umfpack_zl_demo.c
 
@@ -130,6 +191,7 @@ readhb_nozeros:  readhb_nozeros.f
 # compile the FORTRAN interface and demo
 #-------------------------------------------------------------------------------
 
+# This doesn't seem to work on the Mac (Snow Leopard, OS X 10.6.1)
 fortran: $(UMFPACK) umf4hb.f umf4_f77wrapper.o umf4zhb.f umf4_f77zwrapper.o $(UMFPACK)
 	$(F77) $(F77FLAGS) -o umf4hb umf4hb.f umf4_f77wrapper.o \
 	    $(UMFPACK) $(LIBS)
@@ -156,7 +218,7 @@ umf4_f77wrapper64.o: umf4_f77wrapper.c $(INC)
 	$(C) -DDLONG -c umf4_f77wrapper.c -o umf4_f77wrapper64.o
 
 umf4_f77zwrapper64.o: umf4_f77zwrapper.c $(INC)
-	$(C) -DDLONG -c umf4_f77zwrapper.c -o umf4_f77zwrapper64.o
+	$(C) -DZLONG -c umf4_f77zwrapper.c -o umf4_f77zwrapper64.o
 
 #-------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
@@ -171,6 +233,7 @@ purge: clean
 	- $(RM) umf4hb umf4zhb *.umf my_umf4hb.out
 	- $(RM) umf4hb64 my_umf4hb64.out my_umf4zhb.out
 	- $(RM) umf4 readhb readhb_nozeros readhb_size tmp/*
+	- $(RM) -r *.dSYM
 
 clean:
 	- $(RM) $(CLEAN)
diff --git a/UMFPACK/Demo/dodefault b/UMFPACK/Demo/dodefault
index c5a9d35..6638445 100755
--- a/UMFPACK/Demo/dodefault
+++ b/UMFPACK/Demo/dodefault
@@ -17,9 +17,9 @@ echo '0.7'	>> tmp/control.umf4 ; # 7: initial alloc
 echo '2'	>> tmp/control.umf4 ; # 8: max iter. refinement
 echo '1'	>> tmp/control.umf4 ; # 9:
 echo '0'	>> tmp/control.umf4 ; # 10:
-echo '0'	>> tmp/control.umf4 ; # 11:
+echo '0'	>> tmp/control.umf4 ; # 11: disable singletons
 echo '0'	>> tmp/control.umf4 ; # 12:
-echo '0.01'	>> tmp/control.umf4 ; # 13: 2-by-2 tolerance
+echo '0'   	>> tmp/control.umf4 ; # 13:
 echo '0'	>> tmp/control.umf4 ; # 14: Q fixed (auto)
 echo '10'	>> tmp/control.umf4 ; # 15: AMD dense row control
 echo '0.001'	>> tmp/control.umf4 ; # 16: diag pivot tolerance DEFAULT
diff --git a/UMFPACK/Demo/dospd b/UMFPACK/Demo/dospd
index 46714ac..ab6302e 100755
--- a/UMFPACK/Demo/dospd
+++ b/UMFPACK/Demo/dospd
@@ -17,9 +17,9 @@ echo '0.7'	>> tmp/control.umf4 ; # 7: initial alloc
 echo '2'	>> tmp/control.umf4 ; # 8: max iter. refinement
 echo '1'	>> tmp/control.umf4 ; # 9:
 echo '0'	>> tmp/control.umf4 ; # 10:
-echo '0'	>> tmp/control.umf4 ; # 11:
+echo '0'	>> tmp/control.umf4 ; # 11: disable singleons
 echo '0'	>> tmp/control.umf4 ; # 12:
-echo '0.01'	>> tmp/control.umf4 ; # 13: 2-by-2 tolerance
+echo '0'   	>> tmp/control.umf4 ; # 13:
 echo '0'	>> tmp/control.umf4 ; # 14: Q fixed (auto)
 echo '10'	>> tmp/control.umf4 ; # 15: AMD dense row control
 echo '0'	>> tmp/control.umf4 ; # 16: diag pivot tolerance, NON-DEFAULT
diff --git a/UMFPACK/Demo/readhb.f b/UMFPACK/Demo/readhb.f
index aed8691..535b68d 100644
--- a/UMFPACK/Demo/readhb.f
+++ b/UMFPACK/Demo/readhb.f
@@ -3,9 +3,9 @@ c== readhb =============================================================
 c=======================================================================
 
 c-----------------------------------------------------------------------
-c UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis.  CISE
-c Dept, Univ. of Florida.  All Rights Reserved.  See ../Doc/License for
-c License.  web: http://www.cise.ufl.edu/research/sparse/umfpack
+c UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,
+c http://www.suitesparse.com.  All Rights Reserved.  See ../Doc/License
+c for License.
 c-----------------------------------------------------------------------
 
 c readhb:
diff --git a/UMFPACK/Demo/readhb_nozeros.f b/UMFPACK/Demo/readhb_nozeros.f
index 11a135d..d54bb9a 100644
--- a/UMFPACK/Demo/readhb_nozeros.f
+++ b/UMFPACK/Demo/readhb_nozeros.f
@@ -3,9 +3,9 @@ c== readhb_nozeros =====================================================
 c=======================================================================
 
 c-----------------------------------------------------------------------
-c UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis.  CISE
-c Dept, Univ. of Florida.  All Rights Reserved.  See ../Doc/License for
-c License.  web: http://www.cise.ufl.edu/research/sparse/umfpack
+c UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,
+c http://www.suitesparse.com All Rights Reserved.  See ../Doc/License
+c for License.
 c-----------------------------------------------------------------------
 
 c readhb_nozeros:
diff --git a/UMFPACK/Demo/readhb_size.f b/UMFPACK/Demo/readhb_size.f
index 8556cd7..9bdefa5 100644
--- a/UMFPACK/Demo/readhb_size.f
+++ b/UMFPACK/Demo/readhb_size.f
@@ -3,9 +3,9 @@ c== readhb_size ========================================================
 c=======================================================================
 
 c-----------------------------------------------------------------------
-c UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis.  CISE
-c Dept, Univ. of Florida.  All Rights Reserved.  See ../Doc/License for
-c License.  web: http://www.cise.ufl.edu/research/sparse/umfpack
+c UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,
+c http://www.suitesparse.com All Rights Reserved.  See ../Doc/License
+c for License.
 c-----------------------------------------------------------------------
 
 c readhb_size:
diff --git a/UMFPACK/Demo/simple_compile b/UMFPACK/Demo/simple_compile
index 1e3ed9a..681c02c 100755
--- a/UMFPACK/Demo/simple_compile
+++ b/UMFPACK/Demo/simple_compile
@@ -9,7 +9,7 @@
 # No BLAS is used here.  You should modify this to add your BLAS.
 # Otherwise your performance will be low.
 
-cc -DDINT -DNBLAS -I../../UFconfig \
+cc -DDINT -DNBLAS -I../../SuiteSparse_config \
     -I../Include -I../Source -I../../AMD/Include -I../../AMD/Source \
 	umfpack_di_demo.c \
 	../Source/umf_multicompile.c \
@@ -33,7 +33,6 @@ cc -DDINT -DNBLAS -I../../UFconfig \
 	../../AMD/Source/amd_postorder.c \
 	../../AMD/Source/amd_preprocess.c \
 	../../AMD/Source/amd_valid.c \
-	../Source/umf_2by2.c \
 	../Source/umf_analyze.c \
 	../Source/umf_apply_order.c \
 	../Source/umf_blas3_update.c \
diff --git a/UMFPACK/Demo/umf4.c b/UMFPACK/Demo/umf4.c
index 628a034..78d2e39 100644
--- a/UMFPACK/Demo/umf4.c
+++ b/UMFPACK/Demo/umf4.c
@@ -3,9 +3,9 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /* Demo program for UMFPACK.  Reads in a triplet-form matrix in the
@@ -18,11 +18,9 @@
  *	umf4 a		default "auto" strategy, 1-norm row scaling
  *	umf4 u		unsymmetric strategy, 1-norm row scaling
  *	umf4 s		symmetric strategy, 1-norm row scaling
- *	umf4 2		2-by-2 strategy, maxnorm row scaling
  *	umf4 A		default "auto" strategy, maxnorm row scaling
  *	umf4 U		unsymmetric strategy, maxnorm row scaling
  *	umf4 S		symmetric strategy, maxnorm row scaling
- *	umf4 T		2-by-2 strategy , maxnorm row scaling
  *
  * To test a matrix in the Harwell/Boeing format, do the following:
  *
@@ -67,6 +65,7 @@
 #define SMAX 256
 #define ABS(x) ((x) >= 0 ? (x) : -(x))
 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define ISNAN(x) ((x) != (x))
 
 #define XTRUE(i,n) (1.0 + ((double) i) / ((double) n))
 
@@ -95,7 +94,7 @@ static double err
 
     for (i = 0 ; i < n ; i++)
     {
-	if (isnan (x [i]))
+	if (ISNAN (x [i]))
 	{
 	    enorm = x [i] ;
 	    break ;
@@ -174,7 +173,7 @@ static double resid
     bnorm = 0. ;
     for (i = 0 ; i < n ; i++)
     {
-	if (isnan (r [i]))
+	if (ISNAN (r [i]))
 	{
 	    rnorm = r [i] ;
 	    break ;
@@ -184,7 +183,7 @@ static double resid
     }
     for (i = 0 ; i < n ; i++)
     {
-	if (isnan (b [i]))
+	if (ISNAN (b [i]))
 	{
 	    bnorm = b [i] ;
 	    break ;
@@ -283,51 +282,50 @@ int main (int argc, char **argv)
 
     if (argc > 1)
     {
-	char *s = argv [1] ;
+	char *t = argv [1] ;
 
 	/* get the strategy */
-	if (s [0] == 'u')
+	if (t [0] == 'u')
 	{
 	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_UNSYMMETRIC ;
 	}
-	else if (s [0] == 'a')
+	else if (t [0] == 'a')
 	{
 	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_AUTO ;
 	}
-	else if (s [0] == 's')
+	else if (t [0] == 's')
 	{
 	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_SYMMETRIC ;
 	}
-	else if (s [0] == '2')
+	else if (t [0] == '2')
 	{
-	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_2BY2 ;
+	    printf ("unrecognized strategy: %s\n", argv [1]) ;
 	}
-	else if (s [0] == 'U')
+	else if (t [0] == 'U')
 	{
 	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_UNSYMMETRIC ;
 	    Control [UMFPACK_SCALE] = UMFPACK_SCALE_MAX ;
 	}
-	else if (s [0] == 'A')
+	else if (t [0] == 'A')
 	{
 	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_AUTO ;
 	    Control [UMFPACK_SCALE] = UMFPACK_SCALE_MAX ;
 	}
-	else if (s [0] == 'S')
+	else if (t [0] == 'S')
 	{
 	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_SYMMETRIC ;
 	    Control [UMFPACK_SCALE] = UMFPACK_SCALE_MAX ;
 	}
-	else if (s [0] == 'T')
+	else if (t [0] == 'T')
 	{
-	    Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_2BY2 ;
-	    Control [UMFPACK_SCALE] = UMFPACK_SCALE_MAX ;
+	    printf ("unrecognized strategy: %s\n", argv [1]) ;
 	}
 	else
 	{
 	    printf ("unrecognized strategy: %s\n", argv [1]) ;
 	}
 
-	if (s [1] == 'n')
+	if (t [1] == 'n')
 	{
 	    /* no aggressive absorption */
 	    Control [UMFPACK_AGGRESSIVE] = FALSE ;
@@ -447,11 +445,13 @@ int main (int argc, char **argv)
     b = (double *) malloc (n * sizeof (double)) ;
     r = (double *) malloc (n * sizeof (double)) ;
     x = (double *) malloc (n * sizeof (double)) ;
+
     if (!Ap || !Ai || !Ax || !b || !r)
     {
 	printf ("out of memory") ;
 	exit (1) ;
     }
+
     umfpack_tic (stats) ;
     status = umfpack_di_triplet_to_col (nrow, ncol, nz, Ti, Tj, Tx, Ap, Ai, Ax,
 	(int *) NULL) ;
@@ -646,5 +646,12 @@ int main (int argc, char **argv)
     free (Pamd) ;
     printf ("AMD test done\n") ;
 
+    free (Ap) ;
+    free (Ai) ;
+    free (Ax) ;
+    free (b) ;
+    free (r) ;
+    free (x) ;
+
     return (0) ;
 }
diff --git a/UMFPACK/Demo/umf4.out b/UMFPACK/Demo/umf4.out
index a76b120..b1d5f26 100644
--- a/UMFPACK/Demo/umf4.out
+++ b/UMFPACK/Demo/umf4.out
@@ -1,15 +1,11 @@
-cc -O3  -I../Include -I../../AMD/Include -I../../UFconfig -o umf4 umf4.c ../Lib/libumfpack.a ../../AMD/Lib/libamd.a -lblas -lgfortran -lgfortranbegin  -lm
-f77 -O -o readhb readhb.f 
-f77 -O -o readhb_nozeros readhb_nozeros.f 
-f77 -O -o readhb_size readhb_size.f 
 ./readhb_nozeros < HB/can_24.psa > tmp/A
 ./readhb_size    < HB/can_24.psa > tmp/Asize
 ./umf4
 
 ===========================================================
-=== UMFPACK v5.2.0 ========================================
+=== UMFPACK v5.6.0 ========================================
 ===========================================================
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -21,9 +17,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -37,32 +34,31 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 File: tmp/A
 File: tmp/Asize
 n 24 nrow 24 ncol 24 nz 160
 triplet-form matrix, n_row = 24, n_col = 24 nz = 160. OK
 
-triplet-to-col time: wall 0 cpu 0
+triplet-to-col time: wall 1.447e-05 cpu 1.447e-05
 column-form matrix, n_row 24 n_col 24, nz = 160. OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       24
     number of columns in matrix A:    24
     entries in matrix A:              160
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -90,11 +86,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            8
         number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 725
+    symbolic memory usage (Units):                 720
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         131
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     symbolic/numeric factorization:      upper bound               actual      %
@@ -118,18 +113,18 @@ Symbolic object: OK
 
 Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       24
     number of columns in matrix A:    24
     entries in matrix A:              160
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -157,11 +152,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            8
         number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 725
+    symbolic memory usage (Units):                 720
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         131
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -200,7 +194,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        0
     numeric factorization reallocations:           0
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.06000e+03
@@ -208,13 +201,12 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  7.86e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.21700e+03
 
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.6.0 (Jun 1, 2012): OK
 
 dense vector, n = 24. OK
 
@@ -235,7 +227,7 @@ umf4 done, strategy: 0
 the UMFPACK analysis or factorization, above, but a separate
 test of just the AMD ordering routine.
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.3.0, Jun 1, 2012: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -244,7 +236,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
 
 AMD ordering time: cpu       0.00 wall       0.00
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.3.0, Jun 1, 2012, results:
     status: OK
     n, dimension of A:                                  24
     nz, number of nonzeros in A:                        160
@@ -279,9 +271,9 @@ AMD test done
 ./umf4
 
 ===========================================================
-=== UMFPACK v5.2.0 ========================================
+=== UMFPACK v5.6.0 ========================================
 ===========================================================
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -293,9 +285,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -309,32 +302,31 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 File: tmp/A
 File: tmp/Asize
 n 67 nrow 67 ncol 67 nz 294
 triplet-form matrix, n_row = 67, n_col = 67 nz = 294. OK
 
-triplet-to-col time: wall 0 cpu 0
+triplet-to-col time: wall 1.8673e-05 cpu 1.8673e-05
 column-form matrix, n_row 67 n_col 67, nz = 294. OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       67
     number of columns in matrix A:    67
     entries in matrix A:              294
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -354,8 +346,7 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         252
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
-    symbolic factorization wallclock time(sec):    0.01
+    symbolic factorization wallclock time(sec):    0.00
 
     symbolic/numeric factorization:      upper bound               actual      %
     variable-sized part of Numeric object:
@@ -378,18 +369,18 @@ Symbolic object: OK
 
 Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       67
     number of columns in matrix A:    67
     entries in matrix A:              294
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -409,8 +400,7 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         252
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
-    symbolic factorization wallclock time(sec):    0.01
+    symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
     minimum sum (abs (rows of A)):              1.00000e+00
@@ -420,53 +410,51 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     variable-sized part of Numeric object:
         initial size (Units)                    1711                 1577    92%
         peak size (Units)                       6115                 3581    59%
-        final size (Units)                      1628                  682    42%
-    Numeric final size (Units)                  2108                 1129    54%
+        final size (Units)                      1628                  681    42%
+    Numeric final size (Units)                  2108                 1128    54%
     Numeric final size (MBytes)                  0.0                  0.0    54%
     peak memory usage (Units)                   7476                 4942    66%
     peak memory usage (MBytes)                   0.1                  0.0    66%
-    numeric factorization flops          1.41920e+04          2.50100e+03    18%
-    nz in L (incl diagonal)                      542                  323    60%
+    numeric factorization flops          1.41920e+04          2.51700e+03    18%
+    nz in L (incl diagonal)                      542                  325    60%
     nz in U (incl diagonal)                      902                  339    38%
-    nz in L+U (incl diagonal)                   1377                  595    43%
+    nz in L+U (incl diagonal)                   1377                  597    43%
     largest front (# entries)                    483                   80    17%
     largest # rows in front                       21                   10    48%
     largest # columns in front                    23                   11    48%
 
     initial allocation ratio used:                 0.7
     # of forced updates due to frontal growth:     0
-    nz in L (incl diagonal), if none dropped       323
+    nz in L (incl diagonal), if none dropped       325
     nz in U (incl diagonal), if none dropped       339
     number of small entries dropped                0
     nonzeros on diagonal of U:                     67
     min abs. value on diagonal of U:               2.74e-02
     max abs. value on diagonal of U:               2.28e+00
     estimate of reciprocal of condition number:    1.20e-02
-    indices in compressed pattern:                 263
-    numerical values stored in Numeric object:     599
+    indices in compressed pattern:                 259
+    numerical values stored in Numeric object:     600
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
-    solve flops:                                   6.16500e+03
+    solve flops:                                   6.17300e+03
     iterative refinement steps taken:              1
     iterative refinement steps attempted:          1
-    sparse backward error omega1:                  1.32e-16
+    sparse backward error omega1:                  1.21e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
-    total symbolic + numeric + solve flops:        8.66600e+03
+    total symbolic + numeric + solve flops:        8.69000e+03
 
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.6.0 (Jun 1, 2012): OK
 
 dense vector, n = 67. OK
 
-relative maxnorm of residual, ||Ax-b||/||b||: 9.15507e-17
-relative maxnorm of error, ||x-xtrue||/||xtrue||: 2.349e-15
+relative maxnorm of residual, ||Ax-b||/||b||: 1.83101e-16
+relative maxnorm of error, ||x-xtrue||/||xtrue||: 1.78971e-15
 
 Writing tmp/x
 Writing tmp/info.umf4
@@ -482,7 +470,7 @@ umf4 done, strategy: 0
 the UMFPACK analysis or factorization, above, but a separate
 test of just the AMD ordering routine.
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.3.0, Jun 1, 2012: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -491,7 +479,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
 
 AMD ordering time: cpu       0.00 wall       0.00
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.3.0, Jun 1, 2012, results:
     status: OK
     n, dimension of A:                                  67
     nz, number of nonzeros in A:                        294
@@ -526,9 +514,9 @@ AMD test done
 ./umf4
 
 ===========================================================
-=== UMFPACK v5.2.0 ========================================
+=== UMFPACK v5.6.0 ========================================
 ===========================================================
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -540,9 +528,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -556,43 +545,42 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 File: tmp/A
 File: tmp/Asize
 n 183 nrow 183 ncol 183 nz 1000
 triplet-form matrix, n_row = 183, n_col = 183 nz = 1000. OK
 
-triplet-to-col time: wall 0 cpu 0
+triplet-to-col time: wall 0.000115879 cpu 0.000115879
 column-form matrix, n_row 183 n_col 183, nz = 1000. OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       183
     number of columns in matrix A:    183
     entries in matrix A:              1000
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
-    strategy used:                    symmetric 2-by-2
-    ordering used:                    amd on A+A'
-    modify Q during factorization:    no
-    prefer diagonal pivoting:         yes
+    strategy used:                    unsymmetric
+    ordering used:                    colamd on A
+    modify Q during factorization:    yes
+    prefer diagonal pivoting:         no
     pivots with zero Markowitz cost:               36
     submatrix S after removing zero-cost pivots:
         number of "dense" rows:                    4
-        number of "dense" columns:                 0
+        number of "dense" columns:                 3
         number of empty rows:                      0
         number of empty columns                    0
         submatrix S square and diagonal preserved
@@ -602,71 +590,57 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               1114
         nz on diagonal of matrix S:                147
         fraction of nz on diagonal:                1.000000
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          7
-        # unmatched:                               7
-        symmetry of P2*S:                          0.490515
-        nz in P2*S+(P2*S)' (excl. diag.):          1114
-        nz on diagonal of P2*S:                    147
-        fraction of nz on diag of P2*S:            1.000000
-    AMD statistics, for strict diagonal pivoting:
-        est. flops for LU factorization:           1.02930e+04
-        est. nz in L+U (incl. diagonal):           1625
-        est. largest front (# entries):            196
-        est. max nz in any column of L:            14
-        number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4846
+    symbolic memory usage (Units):                 4760
     symbolic memory usage (MBytes):                0.0
-    Symbolic size (Units):                         763
+    Symbolic size (Units):                         677
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     symbolic/numeric factorization:      upper bound               actual      %
     variable-sized part of Numeric object:
         initial size (Units)                    4458                    -      -
-        peak size (Units)                      26277                    -      -
-        final size (Units)                     15717                    -      -
-    Numeric final size (Units)                 16951                    -      -
+        peak size (Units)                      33789                    -      -
+        final size (Units)                     17855                    -      -
+    Numeric final size (Units)                 19089                    -      -
     Numeric final size (MBytes)                  0.1                    -      -
-    peak memory usage (Units)                  29687                    -      -
-    peak memory usage (MBytes)                   0.2                    -      -
-    numeric factorization flops          2.67903e+05                    -      -
-    nz in L (incl diagonal)                     2122                    -      -
-    nz in U (incl diagonal)                     9931                    -      -
-    nz in L+U (incl diagonal)                  11870                    -      -
-    largest front (# entries)                   2337                    -      -
-    largest # rows in front                       21                    -      -
+    peak memory usage (Units)                  37170                    -      -
+    peak memory usage (MBytes)                   0.3                    -      -
+    numeric factorization flops          2.89794e+05                    -      -
+    nz in L (incl diagonal)                     2693                    -      -
+    nz in U (incl diagonal)                    10464                    -      -
+    nz in L+U (incl diagonal)                  12974                    -      -
+    largest front (# entries)                   5304                    -      -
+    largest # rows in front                       39                    -      -
     largest # columns in front                   136                    -      -
 
 Symbolic object: OK
 
 Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       183
     number of columns in matrix A:    183
     entries in matrix A:              1000
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
-    strategy used:                    symmetric 2-by-2
-    ordering used:                    amd on A+A'
-    modify Q during factorization:    no
-    prefer diagonal pivoting:         yes
+    strategy used:                    unsymmetric
+    ordering used:                    colamd on A
+    modify Q during factorization:    yes
+    prefer diagonal pivoting:         no
     pivots with zero Markowitz cost:               36
     submatrix S after removing zero-cost pivots:
         number of "dense" rows:                    4
-        number of "dense" columns:                 0
+        number of "dense" columns:                 3
         number of empty rows:                      0
         number of empty columns                    0
         submatrix S square and diagonal preserved
@@ -676,25 +650,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               1114
         nz on diagonal of matrix S:                147
         fraction of nz on diagonal:                1.000000
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          7
-        # unmatched:                               7
-        symmetry of P2*S:                          0.490515
-        nz in P2*S+(P2*S)' (excl. diag.):          1114
-        nz on diagonal of P2*S:                    147
-        fraction of nz on diag of P2*S:            1.000000
-    AMD statistics, for strict diagonal pivoting:
-        est. flops for LU factorization:           1.02930e+04
-        est. nz in L+U (incl. diagonal):           1625
-        est. largest front (# entries):            196
-        est. max nz in any column of L:            14
-        number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4846
+    symbolic memory usage (Units):                 4760
     symbolic memory usage (MBytes):                0.0
-    Symbolic size (Units):                         763
+    Symbolic size (Units):                         677
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -704,55 +664,53 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     symbolic/numeric factorization:      upper bound               actual      %
     variable-sized part of Numeric object:
         initial size (Units)                    4458                 4090    92%
-        peak size (Units)                      26277                 8488    32%
-        final size (Units)                     15717                 1658    11%
-    Numeric final size (Units)                 16951                 2801    17%
-    Numeric final size (MBytes)                  0.1                  0.0    17%
-    peak memory usage (Units)                  29687                11898    40%
-    peak memory usage (MBytes)                   0.2                  0.1    40%
-    numeric factorization flops          2.67903e+05          7.82700e+03     3%
-    nz in L (incl diagonal)                     2122                  838    39%
-    nz in U (incl diagonal)                     9931                  804     8%
-    nz in L+U (incl diagonal)                  11870                 1459    12%
-    largest front (# entries)                   2337                  420    18%
-    largest # rows in front                       21                   14    67%
-    largest # columns in front                   136                   36    26%
-
-    initial allocation ratio used:                 0.265
+        peak size (Units)                      33789                10049    30%
+        final size (Units)                     17855                 2002    11%
+    Numeric final size (Units)                 19089                 3145    16%
+    Numeric final size (MBytes)                  0.1                  0.0    16%
+    peak memory usage (Units)                  37170                13430    36%
+    peak memory usage (MBytes)                   0.3                  0.1    36%
+    numeric factorization flops          2.89794e+05          7.58700e+03     3%
+    nz in L (incl diagonal)                     2693                  702    26%
+    nz in U (incl diagonal)                    10464                 1119    11%
+    nz in L+U (incl diagonal)                  12974                 1638    13%
+    largest front (# entries)                   5304                  532    10%
+    largest # rows in front                       39                   19    49%
+    largest # columns in front                   136                   59    43%
+
+    initial allocation ratio used:                 0.7
     # of forced updates due to frontal growth:     0
-    number of off-diagonal pivots:                 3
-    nz in L (incl diagonal), if none dropped       838
-    nz in U (incl diagonal), if none dropped       804
+    nz in L (incl diagonal), if none dropped       702
+    nz in U (incl diagonal), if none dropped       1119
     number of small entries dropped                0
     nonzeros on diagonal of U:                     183
     min abs. value on diagonal of U:               2.30e-09
     max abs. value on diagonal of U:               1.00e+00
     estimate of reciprocal of condition number:    2.30e-09
-    indices in compressed pattern:                 550
-    numerical values stored in Numeric object:     1396
-    numeric factorization defragmentations:        1
-    numeric factorization reallocations:           1
+    indices in compressed pattern:                 865
+    numerical values stored in Numeric object:     1576
+    numeric factorization defragmentations:        0
+    numeric factorization reallocations:           0
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
+    numeric factorization mflops (wallclock):      3.75
 
-    solve flops:                                   2.73290e+04
+    solve flops:                                   1.86630e+04
     iterative refinement steps taken:              1
-    iterative refinement steps attempted:          2
-    sparse backward error omega1:                  2.78e-16
+    iterative refinement steps attempted:          1
+    sparse backward error omega1:                  1.59e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
-    total symbolic + numeric + solve flops:        3.51560e+04
+    total symbolic + numeric + solve flops:        2.62500e+04
 
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.6.0 (Jun 1, 2012): OK
 
 dense vector, n = 183. OK
 
 relative maxnorm of residual, ||Ax-b||/||b||: 1.55669e-16
-relative maxnorm of error, ||x-xtrue||/||xtrue||: 9.12839e-07
+relative maxnorm of error, ||x-xtrue||/||xtrue||: 9.16596e-07
 
 Writing tmp/x
 Writing tmp/info.umf4
@@ -768,7 +726,7 @@ umf4 done, strategy: 0
 the UMFPACK analysis or factorization, above, but a separate
 test of just the AMD ordering routine.
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.3.0, Jun 1, 2012: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -777,7 +735,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
 
 AMD ordering time: cpu       0.00 wall       0.00
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.3.0, Jun 1, 2012, results:
     status: OK
     n, dimension of A:                                  183
     nz, number of nonzeros in A:                        1000
@@ -812,9 +770,9 @@ AMD test done
 ./umf4
 
 ===========================================================
-=== UMFPACK v5.2.0 ========================================
+=== UMFPACK v5.6.0 ========================================
 ===========================================================
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -826,9 +784,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -842,43 +801,42 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 File: tmp/A
 File: tmp/Asize
 n 183 nrow 183 ncol 183 nz 1069
 triplet-form matrix, n_row = 183, n_col = 183 nz = 1069. OK
 
-triplet-to-col time: wall 0 cpu 0
+triplet-to-col time: wall 0.000117101 cpu 0.000117101
 column-form matrix, n_row 183 n_col 183, nz = 1069. OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       183
     number of columns in matrix A:    183
     entries in matrix A:              1069
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
-    strategy used:                    symmetric 2-by-2
-    ordering used:                    amd on A+A'
-    modify Q during factorization:    no
-    prefer diagonal pivoting:         yes
+    strategy used:                    unsymmetric
+    ordering used:                    colamd on A
+    modify Q during factorization:    yes
+    prefer diagonal pivoting:         no
     pivots with zero Markowitz cost:               29
     submatrix S after removing zero-cost pivots:
         number of "dense" rows:                    4
-        number of "dense" columns:                 0
+        number of "dense" columns:                 3
         number of empty rows:                      0
         number of empty columns                    0
         submatrix S square and diagonal preserved
@@ -888,71 +846,57 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               1286
         nz on diagonal of matrix S:                154
         fraction of nz on diagonal:                1.000000
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          7
-        # unmatched:                               7
-        symmetry of P2*S:                          0.446860
-        nz in P2*S+(P2*S)' (excl. diag.):          1286
-        nz on diagonal of P2*S:                    154
-        fraction of nz on diag of P2*S:            1.000000
-    AMD statistics, for strict diagonal pivoting:
-        est. flops for LU factorization:           1.78450e+04
-        est. nz in L+U (incl. diagonal):           2080
-        est. largest front (# entries):            400
-        est. max nz in any column of L:            20
-        number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4966
+    symbolic memory usage (Units):                 4869
     symbolic memory usage (MBytes):                0.0
-    Symbolic size (Units):                         773
+    Symbolic size (Units):                         676
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     symbolic/numeric factorization:      upper bound               actual      %
     variable-sized part of Numeric object:
         initial size (Units)                    4742                    -      -
-        peak size (Units)                      26357                    -      -
-        final size (Units)                     17822                    -      -
-    Numeric final size (Units)                 19056                    -      -
-    Numeric final size (MBytes)                  0.1                    -      -
-    peak memory usage (Units)                  29809                    -      -
-    peak memory usage (MBytes)                   0.2                    -      -
-    numeric factorization flops          3.51312e+05                    -      -
-    nz in L (incl diagonal)                     2633                    -      -
-    nz in U (incl diagonal)                    10968                    -      -
-    nz in L+U (incl diagonal)                  13418                    -      -
-    largest front (# entries)                   3220                    -      -
-    largest # rows in front                       25                    -      -
-    largest # columns in front                   140                    -      -
+        peak size (Units)                      38453                    -      -
+        final size (Units)                     20711                    -      -
+    Numeric final size (Units)                 21945                    -      -
+    Numeric final size (MBytes)                  0.2                    -      -
+    peak memory usage (Units)                  41871                    -      -
+    peak memory usage (MBytes)                   0.3                    -      -
+    numeric factorization flops          5.25530e+05                    -      -
+    nz in L (incl diagonal)                     3847                    -      -
+    nz in U (incl diagonal)                    11575                    -      -
+    nz in L+U (incl diagonal)                  15239                    -      -
+    largest front (# entries)                   6486                    -      -
+    largest # rows in front                       47                    -      -
+    largest # columns in front                   138                    -      -
 
 Symbolic object: OK
 
 Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       183
     number of columns in matrix A:    183
     entries in matrix A:              1069
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
-    strategy used:                    symmetric 2-by-2
-    ordering used:                    amd on A+A'
-    modify Q during factorization:    no
-    prefer diagonal pivoting:         yes
+    strategy used:                    unsymmetric
+    ordering used:                    colamd on A
+    modify Q during factorization:    yes
+    prefer diagonal pivoting:         no
     pivots with zero Markowitz cost:               29
     submatrix S after removing zero-cost pivots:
         number of "dense" rows:                    4
-        number of "dense" columns:                 0
+        number of "dense" columns:                 3
         number of empty rows:                      0
         number of empty columns                    0
         submatrix S square and diagonal preserved
@@ -962,25 +906,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               1286
         nz on diagonal of matrix S:                154
         fraction of nz on diagonal:                1.000000
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          7
-        # unmatched:                               7
-        symmetry of P2*S:                          0.446860
-        nz in P2*S+(P2*S)' (excl. diag.):          1286
-        nz on diagonal of P2*S:                    154
-        fraction of nz on diag of P2*S:            1.000000
-    AMD statistics, for strict diagonal pivoting:
-        est. flops for LU factorization:           1.78450e+04
-        est. nz in L+U (incl. diagonal):           2080
-        est. largest front (# entries):            400
-        est. max nz in any column of L:            20
-        number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4966
+    symbolic memory usage (Units):                 4869
     symbolic memory usage (MBytes):                0.0
-    Symbolic size (Units):                         773
+    Symbolic size (Units):                         676
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -990,55 +920,53 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     symbolic/numeric factorization:      upper bound               actual      %
     variable-sized part of Numeric object:
         initial size (Units)                    4742                 4372    92%
-        peak size (Units)                      26357                11189    42%
-        final size (Units)                     17822                 2107    12%
-    Numeric final size (Units)                 19056                 3250    17%
-    Numeric final size (MBytes)                  0.1                  0.0    17%
-    peak memory usage (Units)                  29809                14641    49%
-    peak memory usage (MBytes)                   0.2                  0.1    49%
-    numeric factorization flops          3.51312e+05          1.19670e+04     3%
-    nz in L (incl diagonal)                     2633                 1136    43%
-    nz in U (incl diagonal)                    10968                  870     8%
-    nz in L+U (incl diagonal)                  13418                 1823    14%
-    largest front (# entries)                   3220                  728    23%
-    largest # rows in front                       25                   20    80%
-    largest # columns in front                   140                   58    41%
-
-    initial allocation ratio used:                 0.282
-    # of forced updates due to frontal growth:     1
-    number of off-diagonal pivots:                 3
-    nz in L (incl diagonal), if none dropped       1136
-    nz in U (incl diagonal), if none dropped       870
+        peak size (Units)                      38453                14784    38%
+        final size (Units)                     20711                 2302    11%
+    Numeric final size (Units)                 21945                 3445    16%
+    Numeric final size (MBytes)                  0.2                  0.0    16%
+    peak memory usage (Units)                  41871                18202    43%
+    peak memory usage (MBytes)                   0.3                  0.1    43%
+    numeric factorization flops          5.25530e+05          1.75060e+04     3%
+    nz in L (incl diagonal)                     3847                  859    22%
+    nz in U (incl diagonal)                    11575                 1301    11%
+    nz in L+U (incl diagonal)                  15239                 1977    13%
+    largest front (# entries)                   6486                  950    15%
+    largest # rows in front                       47                   27    57%
+    largest # columns in front                   138                   59    43%
+
+    initial allocation ratio used:                 0.7
+    # of forced updates due to frontal growth:     5
+    nz in L (incl diagonal), if none dropped       859
+    nz in U (incl diagonal), if none dropped       1301
     number of small entries dropped                0
     nonzeros on diagonal of U:                     183
     min abs. value on diagonal of U:               2.30e-09
     max abs. value on diagonal of U:               1.00e+00
     estimate of reciprocal of condition number:    2.30e-09
-    indices in compressed pattern:                 741
-    numerical values stored in Numeric object:     1781
-    numeric factorization defragmentations:        1
-    numeric factorization reallocations:           1
-    costly numeric factorization reallocations:    1
-    numeric factorization CPU time (sec):          0.00
+    indices in compressed pattern:                 830
+    numerical values stored in Numeric object:     1927
+    numeric factorization defragmentations:        0
+    numeric factorization reallocations:           0
+    costly numeric factorization reallocations:    0
     numeric factorization wallclock time (sec):    0.00
+    numeric factorization mflops (wallclock):      7.72
 
-    solve flops:                                   3.04790e+04
+    solve flops:                                   2.06400e+04
     iterative refinement steps taken:              1
-    iterative refinement steps attempted:          2
-    sparse backward error omega1:                  3.97e-16
+    iterative refinement steps attempted:          1
+    sparse backward error omega1:                  2.06e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
-    total symbolic + numeric + solve flops:        4.24460e+04
+    total symbolic + numeric + solve flops:        3.81460e+04
 
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.6.0 (Jun 1, 2012): OK
 
 dense vector, n = 183. OK
 
-relative maxnorm of residual, ||Ax-b||/||b||: 1.55669e-16
-relative maxnorm of error, ||x-xtrue||/||xtrue||: 1.0186e-06
+relative maxnorm of residual, ||Ax-b||/||b||: 1.94586e-16
+relative maxnorm of error, ||x-xtrue||/||xtrue||: 1.2614e-06
 
 Writing tmp/x
 Writing tmp/info.umf4
@@ -1054,7 +982,7 @@ umf4 done, strategy: 0
 the UMFPACK analysis or factorization, above, but a separate
 test of just the AMD ordering routine.
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.3.0, Jun 1, 2012: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1063,7 +991,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
 
 AMD ordering time: cpu       0.00 wall       0.00
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.3.0, Jun 1, 2012, results:
     status: OK
     n, dimension of A:                                  183
     nz, number of nonzeros in A:                        1069
@@ -1098,9 +1026,9 @@ AMD test done
 ./umf4
 
 ===========================================================
-=== UMFPACK v5.2.0 ========================================
+=== UMFPACK v5.6.0 ========================================
 ===========================================================
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -1112,9 +1040,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -1128,32 +1057,31 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 File: tmp/A
 File: tmp/Asize
 n 130 nrow 130 ncol 130 nz 1282
 triplet-form matrix, n_row = 130, n_col = 130 nz = 1282. OK
 
-triplet-to-col time: wall 0 cpu 0
+triplet-to-col time: wall 0.00012349 cpu 0.00012349
 column-form matrix, n_row 130 n_col 130, nz = 1282. OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       130
     number of columns in matrix A:    130
     entries in matrix A:              1282
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1181,11 +1109,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            18
         number of "dense" rows/columns in S+S':    2
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4766
+    symbolic memory usage (Units):                 4459
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         644
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     symbolic/numeric factorization:      upper bound               actual      %
@@ -1209,18 +1136,18 @@ Symbolic object: OK
 
 Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       130
     number of columns in matrix A:    130
     entries in matrix A:              1282
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1248,11 +1175,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            18
         number of "dense" rows/columns in S+S':    2
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4766
+    symbolic memory usage (Units):                 4459
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         644
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1291,21 +1217,20 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
+    numeric factorization mflops (wallclock):      3.37
 
     solve flops:                                   1.80440e+04
     iterative refinement steps taken:              1
     iterative refinement steps attempted:          1
-    sparse backward error omega1:                  1.06e-16
+    sparse backward error omega1:                  1.47e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        2.22530e+04
 
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.6.0 (Jun 1, 2012): OK
 
 dense vector, n = 130. OK
 
@@ -1326,7 +1251,7 @@ umf4 done, strategy: 0
 the UMFPACK analysis or factorization, above, but a separate
 test of just the AMD ordering routine.
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.3.0, Jun 1, 2012: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1335,7 +1260,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
 
 AMD ordering time: cpu       0.00 wall       0.00
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.3.0, Jun 1, 2012, results:
     status: OK
     n, dimension of A:                                  130
     nz, number of nonzeros in A:                        1282
@@ -1370,9 +1295,9 @@ AMD test done
 ./umf4
 
 ===========================================================
-=== UMFPACK v5.2.0 ========================================
+=== UMFPACK v5.6.0 ========================================
 ===========================================================
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -1384,9 +1309,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -1400,32 +1326,31 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 File: tmp/A
 File: tmp/Asize
 n 130 nrow 130 ncol 130 nz 1037
 triplet-form matrix, n_row = 130, n_col = 130 nz = 1037. OK
 
-triplet-to-col time: wall 0 cpu 0
+triplet-to-col time: wall 0.00010607 cpu 0.00010607
 column-form matrix, n_row 130 n_col 130, nz = 1037. OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       130
     number of columns in matrix A:    130
     entries in matrix A:              1037
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1453,12 +1378,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            17
         number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4118
+    symbolic memory usage (Units):                 3958
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         534
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
-    symbolic factorization wallclock time(sec):    0.01
+    symbolic factorization wallclock time(sec):    0.00
 
     symbolic/numeric factorization:      upper bound               actual      %
     variable-sized part of Numeric object:
@@ -1481,18 +1405,18 @@ Symbolic object: OK
 
 Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       130
     number of columns in matrix A:    130
     entries in matrix A:              1037
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1520,12 +1444,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            17
         number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4118
+    symbolic memory usage (Units):                 3958
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         534
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
-    symbolic factorization wallclock time(sec):    0.01
+    symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
     minimum sum (abs (rows of A)):              7.94859e-01
@@ -1563,7 +1486,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.58270e+04
@@ -1571,13 +1493,12 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          1
     sparse backward error omega1:                  1.06e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.99340e+04
 
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.6.0 (Jun 1, 2012): OK
 
 dense vector, n = 130. OK
 
@@ -1598,7 +1519,7 @@ umf4 done, strategy: 0
 the UMFPACK analysis or factorization, above, but a separate
 test of just the AMD ordering routine.
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.3.0, Jun 1, 2012: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1607,7 +1528,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
 
 AMD ordering time: cpu       0.00 wall       0.00
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.3.0, Jun 1, 2012, results:
     status: OK
     n, dimension of A:                                  130
     nz, number of nonzeros in A:                        1037
@@ -1642,10 +1563,10 @@ AMD test done
 ./umf4 a 1e-6
 
 ===========================================================
-=== UMFPACK v5.2.0 ========================================
+=== UMFPACK v5.6.0 ========================================
 ===========================================================
 droptol 1e-06
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -1657,9 +1578,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -1673,32 +1595,31 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 File: tmp/A
 File: tmp/Asize
 n 130 nrow 130 ncol 130 nz 1037
 triplet-form matrix, n_row = 130, n_col = 130 nz = 1037. OK
 
-triplet-to-col time: wall 0 cpu 0
+triplet-to-col time: wall 0.000105891 cpu 0.000105891
 column-form matrix, n_row 130 n_col 130, nz = 1037. OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       130
     number of columns in matrix A:    130
     entries in matrix A:              1037
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1726,11 +1647,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            17
         number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4118
+    symbolic memory usage (Units):                 3958
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         534
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     symbolic/numeric factorization:      upper bound               actual      %
@@ -1754,18 +1674,18 @@ Symbolic object: OK
 
 Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       130
     number of columns in matrix A:    130
     entries in matrix A:              1037
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1793,11 +1713,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            17
         number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 4118
+    symbolic memory usage (Units):                 3958
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         534
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1836,7 +1755,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   2.06060e+04
@@ -1844,13 +1762,12 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          2
     sparse backward error omega1:                  1.47e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        2.47130e+04
 
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.6.0 (Jun 1, 2012): OK
 
 dense vector, n = 130. OK
 
@@ -1871,7 +1788,7 @@ umf4 done, strategy: 0
 the UMFPACK analysis or factorization, above, but a separate
 test of just the AMD ordering routine.
 
-AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
+AMD version 2.3.0, Jun 1, 2012: approximate minimum degree ordering
     dense row parameter: 10
     (rows with more than max (10 * sqrt (n), 16) entries are
     considered "dense", and placed last in output permutation)
@@ -1880,7 +1797,7 @@ AMD version 2.2.0, May 31, 2007: approximate minimum degree ordering
 
 AMD ordering time: cpu       0.00 wall       0.00
 
-AMD version 2.2.0, May 31, 2007, results:
+AMD version 2.3.0, Jun 1, 2012, results:
     status: OK
     n, dimension of A:                                  130
     nz, number of nonzeros in A:                        1037
diff --git a/UMFPACK/Demo/umf4_f77wrapper.c b/UMFPACK/Demo/umf4_f77wrapper.c
index f08d0b3..007fb8d 100644
--- a/UMFPACK/Demo/umf4_f77wrapper.c
+++ b/UMFPACK/Demo/umf4_f77wrapper.c
@@ -3,19 +3,19 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /* FORTRAN interface for the C-callable UMFPACK library (double / int version
- * only and double / UF_long versions only).  This is HIGHLY non-portable.  You
- * will need to modify this depending on how your FORTRAN and C compilers
- * behave.  This has been tested in Linux, Sun Solaris, SGI IRIX, and IBM AIX,
- * with various compilers.  It has not been exhaustively tested on all possible
- * combinations of C and FORTRAN compilers.  The UF_long version works on
- * Solaris, SGI IRIX, and IBM AIX when the UMFPACK library is compiled in
- * 64-bit mode.
+ * only and double / SuiteSparse_long versions only).  This is HIGHLY
+ * non-portable.  You will need to modify this depending on how your FORTRAN
+ * and C compilers behave.  This has been tested in Linux, Sun Solaris, SGI
+ * IRIX, and IBM AIX, with various compilers.  It has not been exhaustively
+ * tested on all possible combinations of C and FORTRAN compilers.  The
+ * SuiteSparse_long version works on Solaris, SGI IRIX, and IBM AIX when the
+ * UMFPACK library is compiled in 64-bit mode.
  *
  * Only a subset of UMFPACK's capabilities are provided.  Refer to the UMFPACK
  * User Guide for details.
@@ -55,7 +55,8 @@
  * compiled in 64-bit mode.
  *
  * If you want to use 64-bit integers, try compiling this file with the -DDLONG
- * compiler option (via "make fortran64").  First modify your UFconfig.mk
+ * compiler option (via "make fortran64").  First modify your
+ * SuiteSparse_config.mk
  * file to compile UMFPACK in LP64 mode (see the User Guide for details).
  * Your FORTRAN code should use integer*8.  See umf4hb64.f for an example.
  *
@@ -84,12 +85,12 @@
 #define LEN 200
 
 /* -------------------------------------------------------------------------- */
-/* integer type: int or UF_long */
+/* integer type: int or SuiteSparse_long */
 /* -------------------------------------------------------------------------- */
 
 #if defined (DLONG)
 
-#define Int UF_long
+#define Int SuiteSparse_long
 #define UMFPACK_defaults	 umfpack_dl_defaults
 #define UMFPACK_free_numeric	 umfpack_dl_free_numeric
 #define UMFPACK_free_symbolic	 umfpack_dl_free_symbolic
diff --git a/UMFPACK/Demo/umf4_f77zwrapper.c b/UMFPACK/Demo/umf4_f77zwrapper.c
index 5fb1535..101c3c5 100644
--- a/UMFPACK/Demo/umf4_f77zwrapper.c
+++ b/UMFPACK/Demo/umf4_f77zwrapper.c
@@ -3,15 +3,15 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /* FORTRAN interface for the C-callable UMFPACK library (complex / int version
- * only and complex / UF_long versions only).  This is HIGHLY non-portable.  You
- * will need to modify this depending on how your FORTRAN and C compilers
- * behave.
+ * only and complex / SuiteSparse_long versions only).  This is HIGHLY
+ * non-portable.  You will need to modify this depending on how your FORTRAN
+ * and C compilers behave.
  *
  * See umf4z_f77wrapper.c for more information.
  *
@@ -32,12 +32,12 @@
 #define LEN 200
 
 /* -------------------------------------------------------------------------- */
-/* integer type: int or UF_long */
+/* integer type: int or SuiteSparse_long */
 /* -------------------------------------------------------------------------- */
 
 #if defined (ZLONG)
 
-#define Int UF_long
+#define Int SuiteSparse_long
 #define UMFPACK_defaults	 umfpack_zl_defaults
 #define UMFPACK_free_numeric	 umfpack_zl_free_numeric
 #define UMFPACK_free_symbolic	 umfpack_zl_free_symbolic
diff --git a/UMFPACK/Demo/umf4hb.f b/UMFPACK/Demo/umf4hb.f
index 263ed8e..fe3a693 100644
--- a/UMFPACK/Demo/umf4hb.f
+++ b/UMFPACK/Demo/umf4hb.f
@@ -3,9 +3,9 @@ c== umf4hb =============================================================
 c=======================================================================
 
 c-----------------------------------------------------------------------
-c UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis.  CISE
-c Dept, Univ. of Florida.  All Rights Reserved.  See ../Doc/License for
-c License.  web: http://www.cise.ufl.edu/research/sparse/umfpack
+c UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,
+c http://www.suitesparse.com.  All Rights Reserved.  See ../Doc/License
+c for License.
 c-----------------------------------------------------------------------
 
 c umf4hb:
diff --git a/UMFPACK/Demo/umf4hb.out b/UMFPACK/Demo/umf4hb.out
index e8b3113..d02520d 100644
--- a/UMFPACK/Demo/umf4hb.out
+++ b/UMFPACK/Demo/umf4hb.out
@@ -1,5 +1,4 @@
- Matrix key: WEST0067                      
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -11,9 +10,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -27,42 +27,23 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
-symbolic analysis:
-   status:     0.
-   time:      0.00E+00 (sec)
-   estimates (upper bound) for numeric LU:
-   size of LU:          0.02 (MB)
-   memory needed:       0.06 (MB)
-   flop count:      0.14E+05
-   nnz (L):             542.
-   nnz (U):             902.
-numeric factorization:
-   status:     0.
-   time:      0.00E+00
-   actual numeric LU statistics:
-   size of LU:          0.01 (MB)
-   memory needed:       0.04 (MB)
-   flop count:      0.25E+04
-   nnz (L):             323.
-   nnz (U):             339.
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       67
     number of columns in matrix A:    67
     entries in matrix A:              294
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -82,7 +63,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         252
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -93,44 +73,61 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     variable-sized part of Numeric object:
         initial size (Units)                    1711                 1577    92%
         peak size (Units)                       6115                 3581    59%
-        final size (Units)                      1628                  682    42%
-    Numeric final size (Units)                  2108                 1129    54%
+        final size (Units)                      1628                  681    42%
+    Numeric final size (Units)                  2108                 1128    54%
     Numeric final size (MBytes)                  0.0                  0.0    54%
     peak memory usage (Units)                   7476                 4942    66%
     peak memory usage (MBytes)                   0.1                  0.0    66%
-    numeric factorization flops          1.41920e+04          2.50100e+03    18%
-    nz in L (incl diagonal)                      542                  323    60%
+    numeric factorization flops          1.41920e+04          2.51700e+03    18%
+    nz in L (incl diagonal)                      542                  325    60%
     nz in U (incl diagonal)                      902                  339    38%
-    nz in L+U (incl diagonal)                   1377                  595    43%
+    nz in L+U (incl diagonal)                   1377                  597    43%
     largest front (# entries)                    483                   80    17%
     largest # rows in front                       21                   10    48%
     largest # columns in front                    23                   11    48%
 
     initial allocation ratio used:                 0.7
     # of forced updates due to frontal growth:     0
-    nz in L (incl diagonal), if none dropped       323
+    nz in L (incl diagonal), if none dropped       325
     nz in U (incl diagonal), if none dropped       339
     number of small entries dropped                0
     nonzeros on diagonal of U:                     67
     min abs. value on diagonal of U:               2.74e-02
     max abs. value on diagonal of U:               2.28e+00
     estimate of reciprocal of condition number:    1.20e-02
-    indices in compressed pattern:                 263
-    numerical values stored in Numeric object:     599
+    indices in compressed pattern:                 259
+    numerical values stored in Numeric object:     600
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
-    solve flops:                                   1.19000e+03
+    solve flops:                                   1.19400e+03
     iterative refinement steps taken:              0
     iterative refinement steps attempted:          0
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
-    total symbolic + numeric + solve flops:        3.69100e+03
+    total symbolic + numeric + solve flops:        3.71100e+03
 
- norm (A*x-b):   0.
- norm (A*x-b):   0.
- norm (A*x-b):   0.
+ Matrix key: WEST0067                      
+symbolic analysis:
+   status:     0.
+   time:      0.17E-03 (sec)
+   estimates (upper bound) for numeric LU:
+   size of LU:          0.02 (MB)
+   memory needed:       0.06 (MB)
+   flop count:      0.14E+05
+   nnz (L):             542.
+   nnz (U):             902.
+numeric factorization:
+   status:     0.
+   time:      0.46E-03
+   actual numeric LU statistics:
+   size of LU:          0.01 (MB)
+   memory needed:       0.04 (MB)
+   flop count:      0.25E+04
+   nnz (L):             325.
+   nnz (U):             339.
+ norm (A*x-b):   2.44249065417534439E-015
+ norm (A*x-b):   2.13162820728030056E-014
+ norm (A*x-b):   2.13162820728030056E-014
diff --git a/UMFPACK/Demo/umf4hb64.f b/UMFPACK/Demo/umf4hb64.f
index c4ef6ff..2f69ea6 100644
--- a/UMFPACK/Demo/umf4hb64.f
+++ b/UMFPACK/Demo/umf4hb64.f
@@ -3,9 +3,9 @@ c== umf4hb =============================================================
 c=======================================================================
 
 c-----------------------------------------------------------------------
-c UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis.  CISE
-c Dept, Univ. of Florida.  All Rights Reserved.  See ../Doc/License for
-c License.  web: http://www.cise.ufl.edu/research/sparse/umfpack
+c UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,
+c http://www.suitesparse.com.  All Rights Reserved.  See ../Doc/License
+c for License.
 c-----------------------------------------------------------------------
 
 c umf4hb64:
diff --git a/UMFPACK/Demo/umf4hb64.out b/UMFPACK/Demo/umf4hb64.out
index 9189d17..8fff8a7 100644
--- a/UMFPACK/Demo/umf4hb64.out
+++ b/UMFPACK/Demo/umf4hb64.out
@@ -1,7 +1,6 @@
- Matrix key: WEST0067                      
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
 
     0: print level: 2
     1: dense row parameter:    0.2
@@ -11,9 +10,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -27,42 +27,23 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 8 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 8 pointer: 8 double: 8 Entry: 8 (in bytes)
 
-symbolic analysis:
-   status:     0.
-   time:      0.00E+00 (sec)
-   estimates (upper bound) for numeric LU:
-   size of LU:          0.02 (MB)
-   memory needed:       0.08 (MB)
-   flop count:      0.14E+05
-   nnz (L):             542.
-   nnz (U):             902.
-numeric factorization:
-   status:     0.
-   time:      0.00E+00
-   actual numeric LU statistics:
-   size of LU:          0.01 (MB)
-   memory needed:       0.06 (MB)
-   flop count:      0.25E+04
-   nnz (L):             323.
-   nnz (U):             339.
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       67
     number of columns in matrix A:    67
     entries in matrix A:              294
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -82,7 +63,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         241
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -93,44 +73,61 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     variable-sized part of Numeric object:
         initial size (Units)                    1517                 1448    95%
         peak size (Units)                       3917                 2423    62%
-        final size (Units)                       981                  435    44%
-    Numeric final size (Units)                  1381                  802    58%
+        final size (Units)                       981                  434    44%
+    Numeric final size (Units)                  1381                  801    58%
     Numeric final size (MBytes)                  0.0                  0.0    58%
     peak memory usage (Units)                   5133                 3639    71%
     peak memory usage (MBytes)                   0.1                  0.1    71%
-    numeric factorization flops          1.41920e+04          2.50100e+03    18%
-    nz in L (incl diagonal)                      542                  323    60%
+    numeric factorization flops          1.41920e+04          2.51700e+03    18%
+    nz in L (incl diagonal)                      542                  325    60%
     nz in U (incl diagonal)                      902                  339    38%
-    nz in L+U (incl diagonal)                   1377                  595    43%
+    nz in L+U (incl diagonal)                   1377                  597    43%
     largest front (# entries)                    483                   80    17%
     largest # rows in front                       21                   10    48%
     largest # columns in front                    23                   11    48%
 
     initial allocation ratio used:                 0.7
     # of forced updates due to frontal growth:     0
-    nz in L (incl diagonal), if none dropped       323
+    nz in L (incl diagonal), if none dropped       325
     nz in U (incl diagonal), if none dropped       339
     number of small entries dropped                0
     nonzeros on diagonal of U:                     67
     min abs. value on diagonal of U:               2.74e-02
     max abs. value on diagonal of U:               2.28e+00
     estimate of reciprocal of condition number:    1.20e-02
-    indices in compressed pattern:                 249
-    numerical values stored in Numeric object:     605
+    indices in compressed pattern:                 245
+    numerical values stored in Numeric object:     606
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
-    solve flops:                                   1.19000e+03
+    solve flops:                                   1.19400e+03
     iterative refinement steps taken:              0
     iterative refinement steps attempted:          0
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
-    total symbolic + numeric + solve flops:        3.69100e+03
+    total symbolic + numeric + solve flops:        3.71100e+03
 
- norm (A*x-b):   3.10862447E-15
- norm (A*x-b):   2.13162821E-14
- norm (A*x-b):   2.13162821E-14
+ Matrix key: WEST0067                      
+symbolic analysis:
+   status:     0.
+   time:      0.17E-03 (sec)
+   estimates (upper bound) for numeric LU:
+   size of LU:          0.02 (MB)
+   memory needed:       0.08 (MB)
+   flop count:      0.14E+05
+   nnz (L):             542.
+   nnz (U):             902.
+numeric factorization:
+   status:     0.
+   time:      0.46E-03
+   actual numeric LU statistics:
+   size of LU:          0.01 (MB)
+   memory needed:       0.06 (MB)
+   flop count:      0.25E+04
+   nnz (L):             325.
+   nnz (U):             339.
+ norm (A*x-b):   2.88657986402540701E-015
+ norm (A*x-b):   9.76996261670137756E-015
+ norm (A*x-b):   9.76996261670137756E-015
diff --git a/UMFPACK/Demo/umf4zhb.f b/UMFPACK/Demo/umf4zhb.f
index 003c3e4..f4bfee6 100644
--- a/UMFPACK/Demo/umf4zhb.f
+++ b/UMFPACK/Demo/umf4zhb.f
@@ -3,9 +3,9 @@ c== umf4zhb ============================================================
 c=======================================================================
 
 c-----------------------------------------------------------------------
-c UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis.  CISE
-c Dept, Univ. of Florida.  All Rights Reserved.  See ../Doc/License for
-c License.  web: http://www.cise.ufl.edu/research/sparse/umfpack
+c UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,
+c http://www.suitesparse.com.  All Rights Reserved.  See ../Doc/License
+c for License.
 c-----------------------------------------------------------------------
 
 c umf4zhb:
diff --git a/UMFPACK/Demo/umf4zhb.out b/UMFPACK/Demo/umf4zhb.out
index d6916e5..a6c68ac 100644
--- a/UMFPACK/Demo/umf4zhb.out
+++ b/UMFPACK/Demo/umf4zhb.out
@@ -1,5 +1,4 @@
- Matrix key: QC324                         
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.6.0 (Jun 1, 2012), Control:
     Matrix entry defined as: double complex
     Int (generic integer) defined as: int
 
@@ -11,9 +10,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -27,42 +27,23 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 16 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 16 (in bytes)
 
-symbolic analysis:
-   status:     0.
-   time:      0.00E+00 (sec)
-   estimates (upper bound) for numeric LU:
-   size of LU:          1.17 (MB)
-   memory needed:       2.40 (MB)
-   flop count:      0.26E+08
-   nnz (L):           24027.
-   nnz (U):           39609.
-numeric factorization:
-   status:     0.
-   time:      0.10E-01
-   actual numeric LU statistics:
-   size of LU:          0.72 (MB)
-   memory needed:       1.14 (MB)
-   flop count:      0.14E+08
-   nnz (L):           23247.
-   nnz (U):           23247.
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.6.0 (Jun 1, 2012), Info:
     matrix entry defined as:          double complex
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       324
     number of columns in matrix A:    324
     entries in matrix A:              26730
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -90,12 +71,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         est. max nz in any column of L:            121
         number of "dense" rows/columns in S+S':    0
     symbolic factorization defragmentations:       0
-    symbolic memory usage (Units):                 63473
-    symbolic memory usage (MBytes):                0.5
+    symbolic memory usage (Units):                 50109
+    symbolic memory usage (MBytes):                0.4
     Symbolic size (Units):                         1425
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
-    symbolic factorization wallclock time(sec):    0.01
+    symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
     minimum sum (abs (rows of A)):              2.55982e-01
@@ -133,19 +113,35 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        0
     numeric factorization reallocations:           0
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.01
     numeric factorization wallclock time (sec):    0.01
-    numeric factorization mflops (CPU time):       1435.19
-    numeric factorization mflops (wallclock):      1435.19
-    symbolic + numeric wall clock time (sec):      0.02
-    symbolic + numeric mflops (wall clock):        717.60
+    numeric factorization mflops (wallclock):      1530.21
+    symbolic + numeric wall clock time (sec):      0.01
+    symbolic + numeric mflops (wall clock):        1083.99
 
     solve flops:                                   3.70332e+05
     iterative refinement steps taken:              0
     iterative refinement steps attempted:          0
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.47223e+07
 
- norm (A*x-b):   0.
+ Matrix key: QC324                         
+symbolic analysis:
+   status:     0.
+   time:      0.39E-02 (sec)
+   estimates (upper bound) for numeric LU:
+   size of LU:          1.17 (MB)
+   memory needed:       2.40 (MB)
+   flop count:      0.26E+08
+   nnz (L):           24027.
+   nnz (U):           39609.
+numeric factorization:
+   status:     0.
+   time:      0.94E-02
+   actual numeric LU statistics:
+   size of LU:          0.72 (MB)
+   memory needed:       1.14 (MB)
+   flop count:      0.14E+08
+   nnz (L):           23247.
+   nnz (U):           23247.
+ norm (A*x-b):   2.42925031304605699E-013
diff --git a/UMFPACK/Demo/umfpack_di_demo.c b/UMFPACK/Demo/umfpack_di_demo.c
index 0ebf80a..c41dfa0 100644
--- a/UMFPACK/Demo/umfpack_di_demo.c
+++ b/UMFPACK/Demo/umfpack_di_demo.c
@@ -4,9 +4,9 @@
 
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -314,7 +314,7 @@ int main (int argc, char **argv)
     /* modify one numerical value in the column-form of A */
     /* ---------------------------------------------------------------------- */
 
-    /* change A (1,4), look for row index 1 in column 4. */
+    /* change A (1,4), look for row 1 in column 4. */
     row = 1 ;
     col = 4 ;
     for (p = Ap [col] ; p < Ap [col+1] ; p++)
diff --git a/UMFPACK/Demo/umfpack_di_demo.out b/UMFPACK/Demo/umfpack_di_demo.out
index be6d587..1ec2a6c 100644
--- a/UMFPACK/Demo/umfpack_di_demo.out
+++ b/UMFPACK/Demo/umfpack_di_demo.out
@@ -1,7 +1,7 @@
 
-UMFPACK V5.2 (Nov 1, 2007) demo: _di_ version
+UMFPACK V5.7 (Oct 10, 2014) demo: _di_ version
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
 
 UMFPACK License:
@@ -37,11 +37,10 @@ UMFPACK License:
    Copyright, this License, and the Availability note are retained,
    and a notice that the code was modified is included.
 
-Availability: http://www.cise.ufl.edu/research/sparse/umfpack
+Availability: http://www.suitesparse.com
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
-
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.7.1 (Oct 10, 2014), Control:
     Matrix entry defined as: double
     Int (generic integer) defined as: int
 
@@ -53,9 +52,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -69,11 +69,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 
 b: dense vector, n = 5. 
@@ -280,18 +279,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -312,19 +311,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -362,7 +353,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.19000e+02
@@ -370,15 +360,14 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  1.18e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.25000e+02
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 
 x (solution of Ax=b): dense vector, n = 5. 
@@ -392,9 +381,9 @@ x (solution of Ax=b): dense vector, n = 5.
 maxnorm of residual: 1.06581e-14
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 determinant: (1.14) * 10^(2)
 
@@ -408,18 +397,18 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5.
 
 maxnorm of residual: 1.06581e-14
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -440,19 +429,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -490,7 +471,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.11000e+02
@@ -498,7 +478,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  7.64e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.17000e+02
@@ -646,18 +625,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -678,19 +657,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -728,7 +699,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.17000e+02
@@ -736,7 +706,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  7.89e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.21000e+02
@@ -903,18 +872,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -935,19 +904,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -985,7 +946,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.19000e+02
@@ -993,7 +953,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  1.04e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.25000e+02
@@ -1304,18 +1263,18 @@ Freeing numeric object:
 Loading numeric object:
 
 Done loading numeric object
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1336,19 +1295,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1386,7 +1337,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.11000e+02
@@ -1394,7 +1344,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  8.07e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.17000e+02
@@ -1412,18 +1361,18 @@ maxnorm of residual: 3.55271e-15
 
 
 Solving C'x=b again, using umfpack_di_wsolve instead:
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1444,19 +1393,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1494,7 +1435,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.11000e+02
@@ -1502,7 +1442,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  8.07e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.17000e+02
diff --git a/UMFPACK/Demo/umfpack_dl_demo.c b/UMFPACK/Demo/umfpack_dl_demo.c
index eaa8668..2e161ab 100644
--- a/UMFPACK/Demo/umfpack_dl_demo.c
+++ b/UMFPACK/Demo/umfpack_dl_demo.c
@@ -4,9 +4,9 @@
 
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -57,9 +57,9 @@
 /* triplet form of the matrix.  The triplets can be in any order. */
 /* -------------------------------------------------------------------------- */
 
-static UF_long n = 5, nz = 12 ;
-static UF_long Arow [ ] = { 0,  4,  1,  1,   2,   2,  0,  1,  2,  3,  4,  4} ;
-static UF_long Acol [ ] = { 0,  4,  0,  2,   1,   2,  1,  4,  3,  2,  1,  2} ;
+static SuiteSparse_long n = 5, nz = 12 ;
+static SuiteSparse_long Arow [ ] = { 0,  4,  1,  1,   2,   2,  0,  1,  2,  3,  4,  4} ;
+static SuiteSparse_long Acol [ ] = { 0,  4,  0,  2,   1,   2,  1,  4,  3,  2,  1,  2} ;
 static double Aval [ ] = {2., 1., 3., 4., -1., -3., 3., 6., 2., 1., 4., 2.} ;
 static double b [ ] = {8., 45., -3., 3., 19.}, x [5], r [5] ;
 
@@ -84,13 +84,13 @@ static void error
 
 static double resid
 (
-    UF_long transpose,
-    UF_long Ap [ ],
-    UF_long Ai [ ],
+    SuiteSparse_long transpose,
+    SuiteSparse_long Ap [ ],
+    SuiteSparse_long Ai [ ],
     double Ax [ ]
 )
 {
-    UF_long i, j, p ;
+    SuiteSparse_long i, j, p ;
     double norm ;
 
     for (i = 0 ; i < n ; i++)
@@ -136,7 +136,7 @@ int main (int argc, char **argv)
 {
     double Info [UMFPACK_INFO], Control [UMFPACK_CONTROL], *Ax, *Cx, *Lx, *Ux,
 	*W, t [2], *Dx, rnorm, *Rb, *y, *Rs ;
-    UF_long *Ap, *Ai, *Cp, *Ci, row, col, p, lnz, unz, nr, nc, *Lp, *Li, *Ui, *Up,
+    SuiteSparse_long *Ap, *Ai, *Cp, *Ci, row, col, p, lnz, unz, nr, nc, *Lp, *Li, *Ui, *Up,
 	*P, *Q, *Lj, i, j, k, anz, nfr, nchains, *Qinit, fnpiv, lnz1, unz1, nz1,
 	status, *Front_npivcol, *Front_parent, *Chain_start, *Wi, *Pinit, n1,
 	*Chain_maxrows, *Chain_maxcols, *Front_1strow, *Front_leftmostdesc,
@@ -181,8 +181,8 @@ int main (int argc, char **argv)
 
     /* convert to column form */
     nz1 = MAX (nz,1) ;	/* ensure arrays are not of size zero. */
-    Ap = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Ai = (UF_long *) malloc (nz1 * sizeof (UF_long)) ;
+    Ap = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Ai = (SuiteSparse_long *) malloc (nz1 * sizeof (SuiteSparse_long)) ;
     Ax = (double *) malloc (nz1 * sizeof (double)) ;
     if (!Ap || !Ai || !Ax)
     {
@@ -190,7 +190,7 @@ int main (int argc, char **argv)
     }
 
     status = umfpack_dl_triplet_to_col (n, n, nz, Arow, Acol, Aval,
-	Ap, Ai, Ax, (UF_long *) NULL) ;
+	Ap, Ai, Ax, (SuiteSparse_long *) NULL) ;
 
     if (status < 0)
     {
@@ -314,7 +314,7 @@ int main (int argc, char **argv)
     /* modify one numerical value in the column-form of A */
     /* ---------------------------------------------------------------------- */
 
-    /* change A (1,4), look for row index 1 in column 4. */
+    /* change A (1,4), look for row 1 in column 4. */
     row = 1 ;
     col = 4 ;
     for (p = Ap [col] ; p < Ap [col+1] ; p++)
@@ -454,15 +454,15 @@ int main (int argc, char **argv)
     /* C = transpose of A */
     /* ---------------------------------------------------------------------- */
 
-    Cp = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Ci = (UF_long *) malloc (nz1 * sizeof (UF_long)) ;
+    Cp = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Ci = (SuiteSparse_long *) malloc (nz1 * sizeof (SuiteSparse_long)) ;
     Cx = (double *) malloc (nz1 * sizeof (double)) ;
     if (!Cp || !Ci || !Cx)
     {
 	error ("out of memory") ;
     }
     status = umfpack_dl_transpose (n, n, Ap, Ai, Ax,
-	(UF_long *) NULL, (UF_long *) NULL, Cp, Ci, Cx) ;
+	(SuiteSparse_long *) NULL, (SuiteSparse_long *) NULL, Cp, Ci, Cx) ;
     if (status < 0)
     {
 	umfpack_dl_report_status (Control, status) ;
@@ -492,15 +492,15 @@ int main (int argc, char **argv)
 
     printf ("\nGet the contents of the Symbolic object for C:\n") ;
     printf ("(compare with umfpack_dl_report_symbolic output, above)\n") ;
-    Pinit = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Qinit = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_npivcol = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_1strow = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_leftmostdesc = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_parent = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Chain_start = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Chain_maxrows = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Chain_maxcols = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
+    Pinit = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Qinit = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_npivcol = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_1strow = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_leftmostdesc = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_parent = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Chain_start = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Chain_maxrows = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Chain_maxcols = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
     if (!Pinit || !Qinit || !Front_npivcol || !Front_parent || !Chain_start ||
 	!Chain_maxrows || !Chain_maxcols || !Front_1strow ||
 	!Front_leftmostdesc)
@@ -578,14 +578,14 @@ int main (int argc, char **argv)
     /* ensure arrays are not of zero size */
     lnz1 = MAX (lnz,1) ;
     unz1 = MAX (unz,1) ;
-    Lp = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Lj = (UF_long *) malloc (lnz1 * sizeof (UF_long)) ;
+    Lp = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Lj = (SuiteSparse_long *) malloc (lnz1 * sizeof (SuiteSparse_long)) ;
     Lx = (double *) malloc (lnz1 * sizeof (double)) ;
-    Up = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Ui = (UF_long *) malloc (unz1 * sizeof (UF_long)) ;
+    Up = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Ui = (SuiteSparse_long *) malloc (unz1 * sizeof (SuiteSparse_long)) ;
     Ux = (double *) malloc (unz1 * sizeof (double)) ;
-    P = (UF_long *) malloc (n * sizeof (UF_long)) ;
-    Q = (UF_long *) malloc (n * sizeof (UF_long)) ;
+    P = (SuiteSparse_long *) malloc (n * sizeof (SuiteSparse_long)) ;
+    Q = (SuiteSparse_long *) malloc (n * sizeof (SuiteSparse_long)) ;
     Dx = (double *) NULL ;	/* D vector not requested */
     Rs  = (double *) malloc (n * sizeof (double)) ;
     if (!Lp || !Lj || !Lx || !Up || !Ui || !Ux || !P || !Q || !Rs)
@@ -626,7 +626,7 @@ int main (int argc, char **argv)
     /* by umfpack_dl_col_to_triplet. */
 
     printf ("\nConverting L to triplet form, and printing it:\n") ;
-    Li = (UF_long *) malloc (lnz1 * sizeof (UF_long)) ;
+    Li = (SuiteSparse_long *) malloc (lnz1 * sizeof (SuiteSparse_long)) ;
     if (!Li)
     {
 	error ("out of memory") ;
@@ -683,7 +683,7 @@ int main (int argc, char **argv)
     /* ---------------------------------------------------------------------- */
 
     printf ("\nSolving C'x=b again, using umfpack_dl_wsolve instead:\n") ;
-    Wi = (UF_long *) malloc (n * sizeof (UF_long)) ;
+    Wi = (SuiteSparse_long *) malloc (n * sizeof (SuiteSparse_long)) ;
     W = (double *) malloc (5*n * sizeof (double)) ;
     if (!Wi || !W)
     {
diff --git a/UMFPACK/Demo/umfpack_dl_demo.out b/UMFPACK/Demo/umfpack_dl_demo.out
index fbcc7ec..c310a09 100644
--- a/UMFPACK/Demo/umfpack_dl_demo.out
+++ b/UMFPACK/Demo/umfpack_dl_demo.out
@@ -1,7 +1,7 @@
 
-UMFPACK V5.2 (Nov 1, 2007) demo: _dl_ version
+UMFPACK V5.7 (Oct 10, 2014) demo: _dl_ version
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
 
 UMFPACK License:
@@ -37,13 +37,12 @@ UMFPACK License:
    Copyright, this License, and the Availability note are retained,
    and a notice that the code was modified is included.
 
-Availability: http://www.cise.ufl.edu/research/sparse/umfpack
+Availability: http://www.suitesparse.com
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
-
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.7.1 (Oct 10, 2014), Control:
     Matrix entry defined as: double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
 
     0: print level: 5
     1: dense row parameter:    0.2
@@ -53,9 +52,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -69,11 +69,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 8 pointer: 8 double: 8 Entry: 8 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 8 pointer: 8 double: 8 Entry: 8 (in bytes)
 
 
 b: dense vector, n = 5. 
@@ -280,18 +279,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -312,19 +311,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -362,7 +353,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.19000e+02
@@ -370,15 +360,14 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  1.18e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.25000e+02
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 
 x (solution of Ax=b): dense vector, n = 5. 
@@ -392,9 +381,9 @@ x (solution of Ax=b): dense vector, n = 5.
 maxnorm of residual: 1.06581e-14
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 determinant: (1.14) * 10^(2)
 
@@ -408,18 +397,18 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5.
 
 maxnorm of residual: 1.06581e-14
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -440,19 +429,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -490,7 +471,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.11000e+02
@@ -498,7 +478,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  7.64e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.17000e+02
@@ -646,18 +625,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -678,19 +657,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -728,7 +699,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.17000e+02
@@ -736,7 +706,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  7.89e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.21000e+02
@@ -903,18 +872,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -935,19 +904,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -985,7 +946,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.19000e+02
@@ -993,7 +953,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  1.04e-16
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.25000e+02
@@ -1304,18 +1263,18 @@ Freeing numeric object:
 Loading numeric object:
 
 Done loading numeric object
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1336,19 +1295,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1386,7 +1337,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.11000e+02
@@ -1394,7 +1344,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  8.07e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.17000e+02
@@ -1412,18 +1361,18 @@ maxnorm of residual: 3.55271e-15
 
 
 Solving C'x=b again, using umfpack_dl_wsolve instead:
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          8 bytes
 
@@ -1444,19 +1393,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1494,7 +1435,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.11000e+02
@@ -1502,7 +1442,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  8.07e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.17000e+02
diff --git a/UMFPACK/Demo/umfpack_dl_demo.sed b/UMFPACK/Demo/umfpack_dl_demo.sed
index 7c1f326..facd3f4 100644
--- a/UMFPACK/Demo/umfpack_dl_demo.sed
+++ b/UMFPACK/Demo/umfpack_dl_demo.sed
@@ -1,6 +1,6 @@
 /::/d
 1,$s/_xx_/_dl_/g
-1,$s/Int/UF_long/g
+1,$s/Int/SuiteSparse_long/g
 1,$s/WSIZE/5/
 /define ABS/ {
 	s/ABS/ABS(x) ((x) >= 0 ? (x) : -(x))/
diff --git a/UMFPACK/Demo/umfpack_simple.c b/UMFPACK/Demo/umfpack_simple.c
index f16bb5a..a4dffb0 100644
--- a/UMFPACK/Demo/umfpack_simple.c
+++ b/UMFPACK/Demo/umfpack_simple.c
@@ -1,7 +1,7 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 #include <stdio.h>
diff --git a/UMFPACK/Demo/umfpack_xx_demo.c b/UMFPACK/Demo/umfpack_xx_demo.c
index 013f70c..13ae097 100644
--- a/UMFPACK/Demo/umfpack_xx_demo.c
+++ b/UMFPACK/Demo/umfpack_xx_demo.c
@@ -7,15 +7,15 @@
 :: four different C demo programs:
 ::
 :: umfpack_di_demo.c:  double precision, int integers
-:: umfpack_dl_demo.c:  double precision, UF_long integers
+:: umfpack_dl_demo.c:  double precision, SuiteSparse_long integers
 :: umfpack_zi_demo.c:  complex double precision, int integers
-:: umfpack_zl_demo.c:  complex double precision, UF_long integers
+:: umfpack_zl_demo.c:  complex double precision, SuiteSparse_long integers
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -71,7 +71,7 @@
 /* -------------------------------------------------------------------------- */
 
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: Int is either int or UF_long:
+:: Int is either int or SuiteSparse_long:
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 static Int n = 5, nz = 12 ;
 static Int Arow [ ] = { 0,  4,  1,  1,   2,   2,  0,  1,  2,  3,  4,  4} ;
@@ -352,7 +352,7 @@ int main (int argc, char **argv)
     /* modify one numerical value in the column-form of A */
     /* ---------------------------------------------------------------------- */
 
-    /* change A (1,4), look for row index 1 in column 4. */
+    /* change A (1,4), look for row 1 in column 4. */
     row = 1 ;
     col = 4 ;
     for (p = Ap [col] ; p < Ap [col+1] ; p++)
diff --git a/UMFPACK/Demo/umfpack_zi_demo.c b/UMFPACK/Demo/umfpack_zi_demo.c
index ea63767..7f6d5f7 100644
--- a/UMFPACK/Demo/umfpack_zi_demo.c
+++ b/UMFPACK/Demo/umfpack_zi_demo.c
@@ -4,9 +4,9 @@
 
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -337,7 +337,7 @@ int main (int argc, char **argv)
     /* modify one numerical value in the column-form of A */
     /* ---------------------------------------------------------------------- */
 
-    /* change A (1,4), look for row index 1 in column 4. */
+    /* change A (1,4), look for row 1 in column 4. */
     row = 1 ;
     col = 4 ;
     for (p = Ap [col] ; p < Ap [col+1] ; p++)
diff --git a/UMFPACK/Demo/umfpack_zi_demo.out b/UMFPACK/Demo/umfpack_zi_demo.out
index 9bee8db..f29347a 100644
--- a/UMFPACK/Demo/umfpack_zi_demo.out
+++ b/UMFPACK/Demo/umfpack_zi_demo.out
@@ -1,7 +1,7 @@
 
-UMFPACK V5.2 (Nov 1, 2007) demo: _zi_ version
+UMFPACK V5.7 (Oct 10, 2014) demo: _zi_ version
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
 
 UMFPACK License:
@@ -37,11 +37,10 @@ UMFPACK License:
    Copyright, this License, and the Availability note are retained,
    and a notice that the code was modified is included.
 
-Availability: http://www.cise.ufl.edu/research/sparse/umfpack
+Availability: http://www.suitesparse.com
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
-
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.7.1 (Oct 10, 2014), Control:
     Matrix entry defined as: double complex
     Int (generic integer) defined as: int
 
@@ -53,9 +52,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -69,11 +69,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 4 pointer: 8 double: 8 Entry: 16 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 16 (in bytes)
 
 
 b: dense vector, n = 5. 
@@ -280,18 +279,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -312,19 +311,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -362,7 +353,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.02800e+03
@@ -370,15 +360,14 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          1
     sparse backward error omega1:                  5.28e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.06200e+03
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 
 x (solution of Ax=b): dense vector, n = 5. 
@@ -392,9 +381,9 @@ x (solution of Ax=b): dense vector, n = 5.
 maxnorm of residual: 1.77636e-15
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 determinant: (-1.7814+ (2.3784)i) * 10^(2)
 
@@ -408,18 +397,18 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5.
 
 maxnorm of residual: 1.77636e-14
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -440,19 +429,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -490,7 +471,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   4.80000e+02
@@ -498,7 +478,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  7.82e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.14000e+02
@@ -646,18 +625,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -678,19 +657,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -728,7 +699,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   5.15000e+02
@@ -736,7 +706,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  6.01e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.32000e+02
@@ -903,18 +872,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -935,19 +904,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -985,7 +946,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   5.23000e+02
@@ -993,7 +953,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  8.05e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.57000e+02
@@ -1304,18 +1263,18 @@ Freeing numeric object:
 Loading numeric object:
 
 Done loading numeric object
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -1336,19 +1295,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1386,7 +1337,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   4.80000e+02
@@ -1394,7 +1344,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  9.42e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.14000e+02
@@ -1412,18 +1361,18 @@ maxnorm of residual: 4.88498e-15
 
 
 Solving C'x=b again, using umfpack_zi_wsolve instead:
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
     Int (generic integer) defined as: int
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         8-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -1444,19 +1393,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 151
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         52
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1494,7 +1435,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   4.80000e+02
@@ -1502,7 +1442,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  9.42e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.14000e+02
diff --git a/UMFPACK/Demo/umfpack_zl_demo.c b/UMFPACK/Demo/umfpack_zl_demo.c
index 8f2ebaa..2491443 100644
--- a/UMFPACK/Demo/umfpack_zl_demo.c
+++ b/UMFPACK/Demo/umfpack_zl_demo.c
@@ -4,9 +4,9 @@
 
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* UMFPACK Copyright (c) 2005-2012 by Timothy A. Davis,                       */
+/* http://www.suitesparse.com. All Rights Reserved.  See ../Doc/License       */
+/* for License.                                                               */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -58,9 +58,9 @@
 /* triplet form of the matrix.  The triplets can be in any order. */
 /* -------------------------------------------------------------------------- */
 
-static UF_long n = 5, nz = 12 ;
-static UF_long Arow [ ] = { 0,  4,  1,  1,   2,   2,  0,  1,  2,  3,  4,  4} ;
-static UF_long Acol [ ] = { 0,  4,  0,  2,   1,   2,  1,  4,  3,  2,  1,  2} ;
+static SuiteSparse_long n = 5, nz = 12 ;
+static SuiteSparse_long Arow [ ] = { 0,  4,  1,  1,   2,   2,  0,  1,  2,  3,  4,  4} ;
+static SuiteSparse_long Acol [ ] = { 0,  4,  0,  2,   1,   2,  1,  4,  3,  2,  1,  2} ;
 static double Aval [ ] = {2., 1., 3., 4., -1., -3., 3., 6., 2., 1., 4., 2.} ;
 static double Avalz[ ] = {1., .4, .1, .2, -1., -.2, 0., 6., 3., 0., .3, .3} ;
 static double b [ ] = {8., 45., -3., 3., 19.}, x [5], r [5] ;
@@ -89,14 +89,14 @@ static void error
 
 static double resid
 (
-    UF_long transpose,
-    UF_long Ap [ ],
-    UF_long Ai [ ],
+    SuiteSparse_long transpose,
+    SuiteSparse_long Ap [ ],
+    SuiteSparse_long Ai [ ],
     double Ax [ ]
     , double Az [ ]
 )
 {
-    UF_long i, j, p ;
+    SuiteSparse_long i, j, p ;
     double norm ;
 
     for (i = 0 ; i < n ; i++)
@@ -151,7 +151,7 @@ int main (int argc, char **argv)
     double Info [UMFPACK_INFO], Control [UMFPACK_CONTROL], *Ax, *Cx, *Lx, *Ux,
 	*W, t [2], *Dx, rnorm, *Rb, *y, *Rs ;
     double *Az, *Lz, *Uz, *Dz, *Cz, *Rbz, *yz ;
-    UF_long *Ap, *Ai, *Cp, *Ci, row, col, p, lnz, unz, nr, nc, *Lp, *Li, *Ui, *Up,
+    SuiteSparse_long *Ap, *Ai, *Cp, *Ci, row, col, p, lnz, unz, nr, nc, *Lp, *Li, *Ui, *Up,
 	*P, *Q, *Lj, i, j, k, anz, nfr, nchains, *Qinit, fnpiv, lnz1, unz1, nz1,
 	status, *Front_npivcol, *Front_parent, *Chain_start, *Wi, *Pinit, n1,
 	*Chain_maxrows, *Chain_maxcols, *Front_1strow, *Front_leftmostdesc,
@@ -196,8 +196,8 @@ int main (int argc, char **argv)
 
     /* convert to column form */
     nz1 = MAX (nz,1) ;	/* ensure arrays are not of size zero. */
-    Ap = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Ai = (UF_long *) malloc (nz1 * sizeof (UF_long)) ;
+    Ap = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Ai = (SuiteSparse_long *) malloc (nz1 * sizeof (SuiteSparse_long)) ;
     Ax = (double *) malloc (nz1 * sizeof (double)) ;
     Az = (double *) malloc (nz1 * sizeof (double)) ;
     if (!Ap || !Ai || !Ax || !Az)
@@ -206,7 +206,7 @@ int main (int argc, char **argv)
     }
 
     status = umfpack_zl_triplet_to_col (n, n, nz, Arow, Acol, Aval, Avalz,
-	Ap, Ai, Ax, Az, (UF_long *) NULL) ;
+	Ap, Ai, Ax, Az, (SuiteSparse_long *) NULL) ;
 
     if (status < 0)
     {
@@ -337,7 +337,7 @@ int main (int argc, char **argv)
     /* modify one numerical value in the column-form of A */
     /* ---------------------------------------------------------------------- */
 
-    /* change A (1,4), look for row index 1 in column 4. */
+    /* change A (1,4), look for row 1 in column 4. */
     row = 1 ;
     col = 4 ;
     for (p = Ap [col] ; p < Ap [col+1] ; p++)
@@ -479,8 +479,8 @@ int main (int argc, char **argv)
     /* C = transpose of A */
     /* ---------------------------------------------------------------------- */
 
-    Cp = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Ci = (UF_long *) malloc (nz1 * sizeof (UF_long)) ;
+    Cp = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Ci = (SuiteSparse_long *) malloc (nz1 * sizeof (SuiteSparse_long)) ;
     Cx = (double *) malloc (nz1 * sizeof (double)) ;
     Cz = (double *) malloc (nz1 * sizeof (double)) ;
     if (!Cp || !Ci || !Cx || !Cz)
@@ -488,7 +488,7 @@ int main (int argc, char **argv)
 	error ("out of memory") ;
     }
     status = umfpack_zl_transpose (n, n, Ap, Ai, Ax, Az,
-	(UF_long *) NULL, (UF_long *) NULL, Cp, Ci, Cx, Cz, TRUE) ;
+	(SuiteSparse_long *) NULL, (SuiteSparse_long *) NULL, Cp, Ci, Cx, Cz, TRUE) ;
     if (status < 0)
     {
 	umfpack_zl_report_status (Control, status) ;
@@ -518,15 +518,15 @@ int main (int argc, char **argv)
 
     printf ("\nGet the contents of the Symbolic object for C:\n") ;
     printf ("(compare with umfpack_zl_report_symbolic output, above)\n") ;
-    Pinit = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Qinit = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_npivcol = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_1strow = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_leftmostdesc = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Front_parent = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Chain_start = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Chain_maxrows = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Chain_maxcols = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
+    Pinit = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Qinit = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_npivcol = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_1strow = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_leftmostdesc = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Front_parent = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Chain_start = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Chain_maxrows = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Chain_maxcols = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
     if (!Pinit || !Qinit || !Front_npivcol || !Front_parent || !Chain_start ||
 	!Chain_maxrows || !Chain_maxcols || !Front_1strow ||
 	!Front_leftmostdesc)
@@ -604,16 +604,16 @@ int main (int argc, char **argv)
     /* ensure arrays are not of zero size */
     lnz1 = MAX (lnz,1) ;
     unz1 = MAX (unz,1) ;
-    Lp = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Lj = (UF_long *) malloc (lnz1 * sizeof (UF_long)) ;
+    Lp = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Lj = (SuiteSparse_long *) malloc (lnz1 * sizeof (SuiteSparse_long)) ;
     Lx = (double *) malloc (lnz1 * sizeof (double)) ;
     Lz = (double *) malloc (lnz1 * sizeof (double)) ;
-    Up = (UF_long *) malloc ((n+1) * sizeof (UF_long)) ;
-    Ui = (UF_long *) malloc (unz1 * sizeof (UF_long)) ;
+    Up = (SuiteSparse_long *) malloc ((n+1) * sizeof (SuiteSparse_long)) ;
+    Ui = (SuiteSparse_long *) malloc (unz1 * sizeof (SuiteSparse_long)) ;
     Ux = (double *) malloc (unz1 * sizeof (double)) ;
     Uz = (double *) malloc (unz1 * sizeof (double)) ;
-    P = (UF_long *) malloc (n * sizeof (UF_long)) ;
-    Q = (UF_long *) malloc (n * sizeof (UF_long)) ;
+    P = (SuiteSparse_long *) malloc (n * sizeof (SuiteSparse_long)) ;
+    Q = (SuiteSparse_long *) malloc (n * sizeof (SuiteSparse_long)) ;
     Dx = (double *) NULL ;	/* D vector not requested */
     Dz = (double *) NULL ;
     Rs  = (double *) malloc (n * sizeof (double)) ;
@@ -655,7 +655,7 @@ int main (int argc, char **argv)
     /* by umfpack_zl_col_to_triplet. */
 
     printf ("\nConverting L to triplet form, and printing it:\n") ;
-    Li = (UF_long *) malloc (lnz1 * sizeof (UF_long)) ;
+    Li = (SuiteSparse_long *) malloc (lnz1 * sizeof (SuiteSparse_long)) ;
     if (!Li)
     {
 	error ("out of memory") ;
@@ -712,7 +712,7 @@ int main (int argc, char **argv)
     /* ---------------------------------------------------------------------- */
 
     printf ("\nSolving C'x=b again, using umfpack_zl_wsolve instead:\n") ;
-    Wi = (UF_long *) malloc (n * sizeof (UF_long)) ;
+    Wi = (SuiteSparse_long *) malloc (n * sizeof (SuiteSparse_long)) ;
     W = (double *) malloc (10*n * sizeof (double)) ;
     if (!Wi || !W)
     {
diff --git a/UMFPACK/Demo/umfpack_zl_demo.out b/UMFPACK/Demo/umfpack_zl_demo.out
index f34ec93..c1b8488 100644
--- a/UMFPACK/Demo/umfpack_zl_demo.out
+++ b/UMFPACK/Demo/umfpack_zl_demo.out
@@ -1,7 +1,7 @@
 
-UMFPACK V5.2 (Nov 1, 2007) demo: _zl_ version
+UMFPACK V5.7 (Oct 10, 2014) demo: _zl_ version
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
 
 UMFPACK License:
@@ -37,13 +37,12 @@ UMFPACK License:
    Copyright, this License, and the Availability note are retained,
    and a notice that the code was modified is included.
 
-Availability: http://www.cise.ufl.edu/research/sparse/umfpack
+Availability: http://www.suitesparse.com
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
-
-UMFPACK V5.2.0 (Nov 1, 2007), Control:
+UMFPACK V5.7.1 (Oct 10, 2014), Control:
     Matrix entry defined as: double complex
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
 
     0: print level: 5
     1: dense row parameter:    0.2
@@ -53,9 +52,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
     3: pivot tolerance: 0.1
     4: block size for dense matrix kernels: 32
     5: strategy: 0 (auto)
+    10: ordering: 1 AMD/COLAMD
+    11: singleton filter: enabled
     6: initial allocation ratio: 0.7
     7: max iterative refinement steps: 2
-    12: 2-by-2 pivot tolerance: 0.01
     13: Q fixed during numerical factorization: 0 (auto)
     14: AMD dense row/col parameter:    10
        "dense" rows/columns have > max (16, (10)*sqrt(n)) entries
@@ -69,11 +69,10 @@ UMFPACK V5.2.0 (Nov 1, 2007), Control:
 
     The following options can only be changed at compile-time:
     8: BLAS library used:  Fortran BLAS.  size of BLAS integer: 4
-    9: compiled for ANSI C
-    10: CPU timer is POSIX times ( ) routine.
-    11: compiled for normal operation (debugging disabled)
+    compiled for ANSI C
+    POSIX C clock_getttime.
     computer/operating system: Linux
-    size of int: 4 UF_long: 8 Int: 8 pointer: 8 double: 8 Entry: 16 (in bytes)
+    size of int: 4 SuiteSparse_long: 8 Int: 8 pointer: 8 double: 8 Entry: 16 (in bytes)
 
 
 b: dense vector, n = 5. 
@@ -280,18 +279,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -312,19 +311,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -362,7 +353,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   1.02800e+03
@@ -370,15 +360,14 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          1
     sparse backward error omega1:                  5.28e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        1.06200e+03
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 
 x (solution of Ax=b): dense vector, n = 5. 
@@ -392,9 +381,9 @@ x (solution of Ax=b): dense vector, n = 5.
 maxnorm of residual: 1.77636e-15
 
 
-UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.
+UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.
 
-UMFPACK V5.2.0 (Nov 1, 2007): OK
+UMFPACK V5.7.1 (Oct 10, 2014): OK
 
 determinant: (-1.7814+ (2.3784)i) * 10^(2)
 
@@ -408,18 +397,18 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5.
 
 maxnorm of residual: 1.77636e-14
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -440,19 +429,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -490,7 +471,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   4.80000e+02
@@ -498,7 +478,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  7.82e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.14000e+02
@@ -646,18 +625,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -678,19 +657,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -728,7 +699,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   5.15000e+02
@@ -736,7 +706,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  6.01e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.32000e+02
@@ -903,18 +872,18 @@ diagonal of U: dense vector, n = 5.
 
     Numeric object:  OK
 
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -935,19 +904,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -985,7 +946,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   5.23000e+02
@@ -993,7 +953,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  8.05e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.57000e+02
@@ -1304,18 +1263,18 @@ Freeing numeric object:
 Loading numeric object:
 
 Done loading numeric object
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -1336,19 +1295,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1386,7 +1337,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   4.80000e+02
@@ -1394,7 +1344,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  9.42e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.14000e+02
@@ -1412,18 +1361,18 @@ maxnorm of residual: 4.88498e-15
 
 
 Solving C'x=b again, using umfpack_zl_wsolve instead:
-UMFPACK V5.2.0 (Nov 1, 2007), Info:
+UMFPACK V5.7.1 (Oct 10, 2014), Info:
     matrix entry defined as:          double complex
-    Int (generic integer) defined as: UF_long
+    Int (generic integer) defined as: SuiteSparse_long
     BLAS library used: Fortran BLAS.  size of BLAS integer: 4
     MATLAB:                           no.
-    CPU timer:                        POSIX times ( ) routine.
+    CPU timer:                        POSIX C clock_getttime ( ) routine.
     number of rows in matrix A:       5
     number of columns in matrix A:    5
     entries in matrix A:              12
     memory usage reported in:         16-byte Units
     size of int:                      4 bytes
-    size of UF_long:                  8 bytes
+    size of SuiteSparse_long:         8 bytes
     size of pointer:                  8 bytes
     size of numerical entry:          16 bytes
 
@@ -1444,19 +1393,11 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
         nz in S+S' (excl. diagonal):               4
         nz on diagonal of matrix S:                2
         fraction of nz on diagonal:                0.666667
-    2-by-2 pivoting to place large entries on diagonal:
-        # of small diagonal entries of S:          1
-        # unmatched:                               0
-        symmetry of P2*S:                          0.000000
-        nz in P2*S+(P2*S)' (excl. diag.):          6
-        nz on diagonal of P2*S:                    3
-        fraction of nz on diag of P2*S:            1.000000
     symbolic factorization defragmentations:       0
     symbolic memory usage (Units):                 138
     symbolic memory usage (MBytes):                0.0
     Symbolic size (Units):                         41
     Symbolic size (MBytes):                        0
-    symbolic factorization CPU time (sec):         0.00
     symbolic factorization wallclock time(sec):    0.00
 
     matrix scaled: yes (divided each row by sum of abs values in each row)
@@ -1494,7 +1435,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     numeric factorization defragmentations:        1
     numeric factorization reallocations:           1
     costly numeric factorization reallocations:    0
-    numeric factorization CPU time (sec):          0.00
     numeric factorization wallclock time (sec):    0.00
 
     solve flops:                                   4.80000e+02
@@ -1502,7 +1442,6 @@ UMFPACK V5.2.0 (Nov 1, 2007), Info:
     iterative refinement steps attempted:          0
     sparse backward error omega1:                  9.42e-17
     sparse backward error omega2:                  0.00e+00
-    solve CPU time (sec):                          0.00
     solve wall clock time (sec):                   0.00
 
     total symbolic + numeric + solve flops:        5.14000e+02
@@ -1520,4 +1459,4 @@ maxnorm of residual: 4.88498e-15
 
 
 umfpack_zl_demo complete.
-Total time:  0.00 seconds (CPU time),  0.01 seconds (wallclock time)
+Total time:  0.00 seconds (CPU time),  0.00 seconds (wallclock time)
diff --git a/UMFPACK/Demo/umfpack_zl_demo.sed b/UMFPACK/Demo/umfpack_zl_demo.sed
index 67516d3..a0b3a23 100644
--- a/UMFPACK/Demo/umfpack_zl_demo.sed
+++ b/UMFPACK/Demo/umfpack_zl_demo.sed
@@ -1,6 +1,6 @@
 /::/d
 1,$s/_xx_/_zl_/g
-1,$s/Int/UF_long/g
+1,$s/Int/SuiteSparse_long/g
 1,$s/WSIZE/10/
 /define ABS/ {
 	s/ABS/ABS(x,z) ((x) >= 0 ? (x) : -(x)) + ((z) >= 0 ? (z) : -(z))/
diff --git a/UMFPACK/Doc/ChangeLog b/UMFPACK/Doc/ChangeLog
index 82f50aa..5736af7 100644
--- a/UMFPACK/Doc/ChangeLog
+++ b/UMFPACK/Doc/ChangeLog
@@ -1,3 +1,69 @@
+Oct 10, 2014: version 5.7.1
+
+    modified MATLAB/umfpack_make.m.  No change to C code except version number.
+
+July 31, 2013: version 5.7.0
+
+    * changed malloc, printf, hypot and divcomplex pointers to use
+        SuiteSparse_config
+
+April 25, 2013: version 5.6.2
+
+    * bug fix in Demo/Makefile for Fortran interface
+
+Jun 20, 2012: verison 5.6.1
+
+    * minor update for Windows (removed filesep)
+
+Jun 1, 2012: version 5.6.0
+
+    * UFconfig replaced with SuiteSparse_config
+    * -DNO_TIMER option removed.  See SuiteSparse_config to configure the timer.
+
+Dec 7, 2011, version 5.5.2
+
+    * fixed the Makefile to better align with CFLAGS and other standards
+    * minor fix to umfpack_make.m
+    * Makefile now detects whether or not METIS is present, and
+        sets -DNPARTITION if it is not
+
+Jan 25, 2011, version 5.5.1
+
+    * minor fix to "make install"
+    * Demo/Makefile updated, to allow for METIS to be in a non-default path
+
+Nov 30, 2009, version 5.5.0
+
+    * changed and simplified how UMFPACK connects to 64-bit BLAS
+    * added user-ordering function option (umfpack_*_fsymbolic)
+    * added interface to CHOLMOD's ordering methods (METIS, in particular)
+    * added an option to disable the search for singletons.  Disabling this
+        search for singletons can slow UMFPACK down quite a bit for some
+        matrices, but it does ensure that L is well-conditioned and that
+        any ill-conditioning of A is captured only in U.
+    * removed UMFPACK/MATLAB/GNUmakefile and UMFPACK/MATLAB/Makefile;
+        to compile the UMFPACK mexFunction, use umfpack_make.m in MATLAB.
+    * added "make install" and "make uninstall"
+
+May 20, 2009, version 5.4.0
+
+    * bug fix in umfpack_make.m for Windows
+    * disabled 2-by-2 strategy.  It conflicts with how structurally singular
+	matrices are handled.
+
+March 24, 2009, version 5.3.0
+
+    * bug fix for 2-by-2 strategy (diagonal map) for structurally singular
+	matrices
+
+    * compiler workaround for gcc 4.2.{3,4} in umf_singletons.c
+
+    * added additional timer options in umfpack_timer.c (for POSIX)
+
+Sept 22, 2008
+
+    * minor update to documentation; no change to code
+
 Nov 1, 2007, version 5.2.0
 
     * change of license to GNU GPL from GNU LGPL.  This is the primary change to
diff --git a/UMFPACK/Doc/License b/UMFPACK/Doc/License
index 19f2fa9..d29de06 100644
--- a/UMFPACK/Doc/License
+++ b/UMFPACK/Doc/License
@@ -1,4 +1,4 @@
-UMFPACK Version 5.1.1, Copyright 1995-2007 by Timothy A. Davis.
+UMFPACK, Copyright 1995-2009 by Timothy A. Davis.
 All Rights Reserved.
 UMFPACK is available under alternate licenses, contact T. Davis for details.
 
@@ -34,5 +34,5 @@ UMFPACK License:
 
 Availability:
 
-    http://www.cise.ufl.edu/research/sparse/umfpack
+    http://www.suitesparse.com
 
diff --git a/UMFPACK/Doc/Makefile b/UMFPACK/Doc/Makefile
index 41cf07e..6b93e0f 100644
--- a/UMFPACK/Doc/Makefile
+++ b/UMFPACK/Doc/Makefile
@@ -7,7 +7,7 @@
 
 default: dist
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 #-------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
diff --git a/UMFPACK/Doc/QuickStart.pdf b/UMFPACK/Doc/QuickStart.pdf
index 34bc326..2c30c10 100644
Binary files a/UMFPACK/Doc/QuickStart.pdf and b/UMFPACK/Doc/QuickStart.pdf differ
diff --git a/UMFPACK/Doc/QuickStart.tex b/UMFPACK/Doc/QuickStart.tex
index e210577..ce4abba 100644
--- a/UMFPACK/Doc/QuickStart.tex
+++ b/UMFPACK/Doc/QuickStart.tex
@@ -8,7 +8,7 @@
 \newcommand{\tr}{^{\sf T}}          % transpose
 
 \topmargin 0in
-\textheight 9in
+\textheight 8.5in
 \oddsidemargin 0pt
 \evensidemargin 0pt
 \textwidth 6.5in
@@ -16,10 +16,9 @@
 \begin{document}
 
 \author{Timothy A. Davis \\
-Dept. of Computer and Information Science and Engineering \\
-Univ. of Florida, Gainesville, FL}
-\title{UMFPACK Version 5.2 Quick Start Guide}
-\date{Nov 1, 2007}
+DrTimothyAldenDavis at gmail.com, http://www.suitesparse.com}
+\title{UMFPACK Quick Start Guide}
+\date{VERSION 5.7.1, Oct 10, 2014}
 \maketitle
 
 %-------------------------------------------------------------------------------
@@ -35,10 +34,9 @@ Univ. of Florida, Gainesville, FL}
 \end{abstract}
 %-------------------------------------------------------------------------------
 
-UMFPACK Version 5.2, Copyright\copyright 1995-2006 by Timothy A. Davis.
+Copyright\copyright 1995-2013 by Timothy A. Davis.
 All Rights Reserved.  Refer to the UMFPACK User Guide
-for the License. See \newline
-http://www.cise.ufl.edu/research/sparse/umfpack
+for the License. See http://www.suitesparse.com
 for the code and full documentation.
 
 %-------------------------------------------------------------------------------
@@ -220,12 +218,12 @@ for more details.
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO], Ax [nz], X [n], B [n] ;
     void *Symbolic, *Numeric ;
 
+    umfpack_di_defaults (Control) ;
     status = umfpack_di_symbolic (m, n, Ap, Ai, Ax, &Symbolic, Control, Info) ;
     status = umfpack_di_numeric (Ap, Ai, Ax, Symbolic, &Numeric, Control, Info) ;
     status = umfpack_di_solve (sys, Ap, Ai, Ax, X, B, Numeric, Control, Info) ;
     umfpack_di_free_symbolic (&Symbolic) ;
     umfpack_di_free_numeric (&Numeric) ;
-    umfpack_di_defaults (Control) ;
 \end{verbatim}
 }
 
@@ -234,21 +232,26 @@ for more details.
 \label{Install}
 %-------------------------------------------------------------------------------
 
-You will need to install both UMFPACK v5.2 and AMD v2.2 to use UMFPACK.
-Note that UMFPACK v5.2 cannot use AMD v1.2 or earlier.
+You will need to install both UMFPACK and AMD to use UMFPACK.
 The {\tt UMFPACK} and {\tt AMD} subdirectories must be placed side-by-side
 within the same parent directory.  AMD is a stand-alone package that
 is required by UMFPACK.  UMFPACK can be compiled without the
-BLAS but your performance will be much less than what it should be.
+BLAS
+but your performance will be much less than what it should be.
+
+UMFPACK also requires CHOLMOD, CCAMD, CCOLAMD, COLAMD, and metis-4.0
+by default.  You can remove this dependency by compiling with
+{\tt -DNCHOLMOD}.  Add this to the {\tt UMFPACK\_CONFIG} definition
+in {\tt SuiteSparse\_config/SuiteSparse\_config.mk}.
 
-System-dependent configurations are in the {\tt UFconfig/UFconfig.mk}
+System-dependent configurations are in the {\tt SuiteSparse\_config/SuiteSparse\_config.mk}
 file.  The default
 settings will work on most systems, except for the BLAS definition.
 Sample configurations are provided
-for Linux, Sun Solaris, SGI IRIX, IBM AIX, and the DEC/Compaq Alpha.
+for Linux, Mac, Sun Solaris, SGI IRIX, IBM AIX, and the DEC/Compaq Alpha.
 
 To compile and install both packages,
-go to the UMFPACK directory and type {\tt make}.  This will compile the
+go to the {\tt UMFPACK} directory and type {\tt make}.  This will compile the
 libraries ({\tt AMD/Lib/libamd.a} and {\tt UMFPACK/Lib/libumfpack.a}).
 A demo of the AMD ordering routine will be compiled and tested in
 the {\tt AMD/Demo} directory, and five demo programs will then be
@@ -258,31 +261,29 @@ files in the distribution.  Expect to see a few differences, such as
 residual norms, compile-time control settings, and perhaps memory usage
 differences.
 
-To use {\tt make} to compile the MATLAB mexFunctions for MATLAB
-and AMD, you can either type {\tt make mex} in the UMFPACK directory.
-You may first need to edit the {\tt UFconfig/UFconfig.mk} file to
-modify the definition of the {\tt MEX}, if you have a version of MATLAB
-older than Version 7.2.  Remove the {\tt -largeArrayDims} definition.
-If you use the MATLAB command {\tt umfpack\_make} in the MATLAB directory,
-then this case is handled for you automatically.
+If you have trouble with {\tt make} for UMFPACK,
+try using the plain {\tt Makefile} instead of {\tt GNUmakefile}.
+Go to the UMFPACK/Lib directory and type {\tt make -f Makefile}.
+
+Use the MATLAB command {\tt umfpack\_make} in the MATLAB directory
+to compile UMFPACK and AMD for use in MATLAB.
 
 If you compile UMFPACK and AMD and then later change the
-{\tt UFconfig/UFconfig.mk} file
+{\tt SuiteSparse\_config/SuiteSparse\_config.mk} file
 then you should type {\tt make purge} and then {\tt make} to recompile.
 
 Here are the various parameters that you can control in your
-{\tt UFconfig/UFconfig.mk} file:
+{\tt SuiteSparse\_config/SuiteSparse\_config.mk} file:
 
 \begin{itemize}
 \item {\tt CC = } your C compiler, such as {\tt cc}.
 \item {\tt RANLIB = } your system's {\tt ranlib} program, if needed.
 \item {\tt CFLAGS = } optimization flags, such as {\tt -O}.
-\item {\tt UMFPACK\_CONFIG = } configuration settings, for the BLAS,
+\item {\tt UMFPACK\_CONFIG = } configuration settings for the BLAS,
     memory allocation routines, and timing routines.
 \item {\tt LIB = } your libraries, such as {\tt -lm} or {\tt -lblas}.
 \item {\tt RM =} the command to delete a file.
 \item {\tt MV =} the command to rename a file.
-\item {\tt MEX =} the command to compile a MATLAB mexFunction.
 \item {\tt F77 =} the command to compile a Fortran program (optional).
 \item {\tt F77FLAGS =} the Fortran compiler flags (optional).
 \item {\tt F77LIB =} the Fortran libraries (optional).
@@ -303,18 +304,22 @@ most deal with how the BLAS are called:
     Sun Solaris, SGI Irix, Red Hat Linux, Compaq Alpha, and
     AIX (the IBM RS 6000).
 
-\item {\tt -DGETRUSAGE} if you have the {\tt getrusage} function.
-\item {\tt -DNPOSIX} if you do not have the POSIX-compliant
-    {\tt sysconf} and {\tt times} routines.
 \item {\tt -DNRECIPROCAL} controls a trade-off between speed and accuracy.
     This is off by default (speed preferred over accuracy) except when
     compiling for MATLAB.
 \end{itemize}
 
 When you compile your program that uses the C-callable UMFPACK library,
-you need to add the both {\tt UMFPACK/Lib/libumfpack.a} and
-{\tt AMD/Lib/libamd.a}
-libraries, and you need to tell your compiler to look in the
+you need to link your program with all libraries
+({\tt UMFPACK/Lib/libumfpack.a} and {\tt AMD/Lib/libamd.a},
+and unless you compile with \verb'-DNCHOLMOD' you also must link with
+{\tt CHOLMOD/Lib/libcholmod.a}, \newline
+{\tt COLAMD/Lib/libcolamd.a},
+{\tt CCOLAMD/Lib/libccolamd.a},
+{\tt CAMD/Lib/libcamd.a},
+and \newline
+{\tt metis-4.0/libmetis.a}).
+You need to tell your compiler to look in the
 directories {\tt UMFPACK/Include} and {\tt AMD/Include} for include
 files.  See {\tt UMFPACK/Demo/Makefile} for an example.
 You do not need to directly include any AMD include files in your
@@ -451,16 +456,6 @@ Arguments:
                 [UMFPACK_PIVOT_TOLERANCE] (default 0.1) times the largest entry
                 in its column.
 
-            UMFPACK_STRATEGY_2BY2:  a row permutation P2 is found that places
-                large entries on the diagonal.  The matrix P2*A is then
-                factorized using the symmetric strategy, described above.
-                Refer to the User Guide for more information.
-
-        Control [UMFPACK_2BY2_TOLERANCE]:  a diagonal entry S (k,k) is
-            considered "small" if it is < tol * max (abs (S (:,k))), where S a
-            submatrix of the scaled input matrix, with pivots of zero Markowitz
-            cost removed.
-
         Control [UMFPACK_SCALE]:  This parameter is new to V4.1.  See
             umfpack_numeric.h for a description.  Only affects the 2-by-2
             strategy.  Default: UMFPACK_SCALE_SUM.
@@ -509,7 +504,7 @@ Arguments:
             UMFPACK_ERROR_internal_error
 
                 Something very serious went wrong.  This is a bug.
-                Please contact the author (davis at cise.ufl.edu).
+                Please contact the author (DrTimothyAldenDavis at gmail.com).
 
         Info [UMFPACK_SIZE_OF_UNIT]:  the number of bytes in a Unit,
             for memory usage statistics below.
@@ -564,8 +559,7 @@ Arguments:
         Info [UMFPACK_SYMBOLIC_TIME]:  The CPU time taken, in seconds.
 
         Info [UMFPACK_STRATEGY_USED]: The ordering strategy used:
-            UMFPACK_STRATEGY_SYMMETRIC, UMFPACK_STRATEGY_UNSYMMETRIC, or
-            UMFPACK_STRATEGY_2BY2.
+            UMFPACK_STRATEGY_SYMMETRIC or UMFPACK_STRATEGY_UNSYMMETRIC
 \end{verbatim}
 }
 
@@ -659,8 +653,8 @@ Arguments:
             increase in the total work.
 
         Control [UMFPACK_SYM_PIVOT_TOLERANCE]:  This parameter is new to V4.1.
-            If diagonal pivoting is attempted (the symmetric or symmetric-2by2
-            strategies are used) then this parameter is used to control when the
+            If diagonal pivoting is attempted (the symmetric
+            strategy is used) then this parameter is used to control when the
             diagonal entry is selected in a given pivot column.  The absolute
             value of the entry must be >= Control [UMFPACK_SYM_PIVOT_TOLERANCE]
             times the largest absolute value in the column.  A value of zero
diff --git a/UMFPACK/Doc/UserGuide.bib b/UMFPACK/Doc/UserGuide.bib
index 540f12e..614c1c4 100644
--- a/UMFPACK/Doc/UserGuide.bib
+++ b/UMFPACK/Doc/UserGuide.bib
@@ -24,16 +24,6 @@
 	,number={3}
 	,pages={381-388}}
 
- at techreport{AmestoyDavisDuff03_user,
-	author={Amestoy, P. R. and Davis, T. A. and Duff, I. S.},
-	title={{AMD} Version 1.0 User Guide},
-	institution={CISE Dept., Univ. of Florida},
-	year={2003}
-	,number={TR-03-011}
-	,address={Gainesville, FL}
-	,note={www.cise.ufl.edu/tech-reports.}
-	}
-
 @article{Davis03,
 	author={Davis, T. A.},
 	title={A column pre-ordering strategy for the unsymmetric-pattern multifrontal method},
@@ -52,26 +42,6 @@
 	,number={2}
 	,pages={196-199}}
 
- at techreport{Davis03_umf,
-	author={Davis, T. A.},
-	title={{UMFPACK} User Guide},
-	institution={Univ. of Florida, CISE Dept.},
-	year={2005}
-	,number={TR-04-003 (revised)}
-	,address={Gainesville, FL}
-	,note={(www.cise.ufl.edu/tech-reports)}
-	}
-
- at techreport{Davis03_umfquick,
-	author={Davis, T. A.},
-	title={{UMFPACK} Quick Start Guide},
-	institution={Univ. of Florida, CISE Dept.},
-	year={2005}
-	,number={TR-04-005 (revised)}
-	,address={Gainesville, FL}
-	,note={(www.cise.ufl.edu/tech-reports)}
-	}
-
 @article{DavisDuff97,
 	author={Davis, T. A. and Duff, I. S.},
 	title={An unsymmetric-pattern multifrontal method for sparse {LU} factorization},
@@ -195,15 +165,6 @@
 	number={3},
 	pages={250-269}}
 
- at techreport{Larimore98,
-	author={Larimore, S. I.},
-	title={An approximate minimum degree column ordering algorithm},
-	institution={Univ. of Florida, CISE Dept.},
-	year={1998}
-	,number={TR-98-016}
-	,address={Gainesville, FL}
-	,note={www.cise.ufl.edu/tech-reports}}
-
 @article{DavisGilbertLarimoreNg00,
 	author={Davis, T. A. and Gilbert, J. R. and Larimore, S. I. and Ng, E. G.},
 	title={A column approximate minimum degree ordering algorithm},
diff --git a/UMFPACK/Doc/UserGuide.pdf b/UMFPACK/Doc/UserGuide.pdf
index 3f5161a..21fe846 100644
Binary files a/UMFPACK/Doc/UserGuide.pdf and b/UMFPACK/Doc/UserGuide.pdf differ
diff --git a/UMFPACK/Doc/UserGuide.stex b/UMFPACK/Doc/UserGuide.stex
index 271419c..2b8ca08 100644
--- a/UMFPACK/Doc/UserGuide.stex
+++ b/UMFPACK/Doc/UserGuide.stex
@@ -10,7 +10,7 @@
 \newcommand{\implies}{\rightarrow}
 
 \topmargin 0in
-\textheight 9in
+\textheight 8.5in
 \oddsidemargin 0pt
 \evensidemargin 0pt
 \textwidth 6.5in
@@ -18,10 +18,9 @@
 \begin{document}
 
 \author{Timothy A. Davis \\
-Dept. of Computer and Information Science and Engineering \\
-Univ. of Florida, Gainesville, FL}
-\title{UMFPACK Version 5.2.0 User Guide}
-\date{Nov 1, 2007}
+DrTimothyAldenDavis at gmail.com, http://www.suitesparse.com}
+\title{UMFPACK User Guide}
+\date{VERSION 5.7.1, Oct 10, 2014}
 \maketitle
 
 %-------------------------------------------------------------------------------
@@ -38,7 +37,7 @@ Univ. of Florida, Gainesville, FL}
 
 Technical Report TR-04-003 (revised)
 
-UMFPACK Version 5.2.0, Copyright\copyright 1995-2006 by Timothy A. Davis.
+Copyright\copyright 1995-2013 by Timothy A. Davis.
 All Rights Reserved.
 UMFPACK is available under alternate licences; contact T. Davis for details.
 
@@ -72,7 +71,7 @@ UMFPACK is available under alternate licences; contact T. Davis for details.
     and a notice that the code was modified is included.
 
 {\bf Availability:}
-    http://www.cise.ufl.edu/research/sparse/umfpack
+    http://www.suitesparse.com
 
 {\bf Acknowledgments:}
 
@@ -116,10 +115,9 @@ Rectangular matrices can only be factorized.
 
 UMFPACK first finds a column pre-ordering that reduces fill-in, without regard
 to numerical values.  It scales and analyzes the matrix, and then automatically
-selects one of three strategies for pre-ordering the rows and columns:
-{\em unsymmetric},
-{\em 2-by-2}, and
-{\em symmetric}.  These strategies are described below.
+selects one of two strategies for pre-ordering the rows and columns:
+{\em unsymmetric}
+and {\em symmetric}.  These strategies are described below.
 
 First, all pivots with zero Markowitz cost are eliminated and placed in the
 LU factors.  The remaining submatrix $\m{S}$ is then analyzed.
@@ -139,49 +137,20 @@ the strategy.
     An {\em entry} is a value in $\m{A}$ which is present
     in the input data structure.  All nonzeros are entries, but some entries
     may be numerically zero.
-    Rule 3: $\sigma_1 < 0.1 \implies$ unsymmetric.
-    The matrix is very unsymmetric.
-\item Let $d$ be the number of nonzero entries on the diagonal of $\m{S}$.
+    Let $d$ be the number of nonzero entries on the diagonal of $\m{S}$.
     Let $\m{S}$ be $\nu$-by-$\nu$.
-    Rule 4: $(\sigma_1 \ge 0.7) \:\wedge\: (d = \nu) \implies$ symmetric.
-    The matrix has a nearly symmetric nonzero pattern, and a zero-free
-    diagonal.
-\end{itemize}
-
-If the strategy has not yet been determined,
-the 2-by-2 strategy is attempted.  A row permutation $\m{P}_2$
-is found which attempts to reduce the number of small
-diagonal entries of $\m{P}_2 \m{S}$.
-An entry $s_{ij}$ is determined to be small if
-$|s_{ij}| < 0.01 \max |s_{*j}|$, or large otherwise.
-If $s_{ii}$ is numerically small, the method attempts to swap
-two rows $i$ and $j$, such that both $s_{ij}$ and $s_{ji}$ are large.
-Once these rows are swapped,
-they remain in place.  Let $\sigma_2$ be the symmetry of $\m{P}_2 \m{S}$,
-and let $d_2$ be the number of nonzero entries (either small or large)
-on the diagonal of $\m{P}_2 \m{S}$.
-
-\begin{itemize}
-\item Rule 5:
-    ($\sigma_2 > 1.1 \sigma_1) \:\wedge\: (d_2 > 0.9 \nu) \implies$ 2-by-2.
-    The 2-by-2 permutation has made the matrix significantly more symmetric.
-\item Rule 6: $\sigma_2 < 0.7 \sigma_1 \implies$ unsymmetric.
-    The 2-by-2 strategy has significantly deteriorated the symmetry,
-\item Rule 7: $\sigma_2 < 0.25 \implies$ unsymmetric.
-    The matrix is still very unsymmetric.
-\item Rule 8: $\sigma_2 \ge 0.51 \implies$ 2-by-2.
-    The matrix is roughly symmetric.
-\item Rule 9: $\sigma_2 \ge 0.999 \sigma_1 \implies$ 2-by-2.
-    The 2-by-2 permutation has preserved symmetry, or made it only
-    slightly worse.
-\item Rule 10: if no rule has yet triggered, use the unsymmetric strategy.
+    Rule 3: $(\sigma_1 \ge 0.5) \:\wedge\: (d \ge 0.9 \nu) \implies$ symmetric.
+    The matrix has a nearly symmetric nonzero pattern (50\% or more),
+    and a mostly-zero-free diagonal (90\% or more nonzero).
+\item Rule 4:
+    Otherwise, the unsymmetric strategy is used.
 \end{itemize}
 
 Each strategy is described below:
 \begin{itemize}
 \item {\em unsymmetric}:
 The column pre-ordering of $\m{S}$ is computed by a modified version of COLAMD
-\cite{DavisGilbertLarimoreNg00_algo,DavisGilbertLarimoreNg00,Larimore98}.
+\cite{DavisGilbertLarimoreNg00_algo,DavisGilbertLarimoreNg00}.
 The method finds a symmetric permutation $\m{Q}$ of the matrix $\m{S}\tr\m{S}$
 (without forming $\m{S}\tr\m{S}$ explicitly).  This is a good choice for
 $\m{Q}$, since the Cholesky factors of $\m{(SQ)\tr(SQ)}$ are an upper bound (in
@@ -198,10 +167,6 @@ entry.  Within a given pivot column $j$, an entry $a_{ij}$ can be chosen if
 $|a_{ij}| \ge 0.1 \max |a_{*j}|$.  Among those numerically acceptable
 entries, the sparsest row $i$ is chosen as the pivot row.
 
-\item {\em 2-by-2}:
-The symmetric strategy (see below) is applied to the matrix $\m{P}_2 \m{S}$,
-rather than $\m{S}$.
-
 \item {\em symmetric}:
 The column ordering is computed from AMD
 \cite{AmestoyDavisDuff96,AmestoyDavisDuff03},
@@ -216,8 +181,10 @@ using the same method used by the unsymmetric strategy.
 
 \end{itemize}
 
-The symmetric and 2-by-2 strategies, and their automatic selection,
+The symmetric strategy, and their automatic selection,
 are new to Version 4.1.  Version 4.0 only used the unsymmetric strategy.
+Versions 4.1 through 5.3 included a {\em 2-by-2} ordering strategy,
+but this option has been disabled in Version 5.4.
 
 Once the strategy is selected,
 the factorization of the matrix $\m{A}$ is broken down into the factorization
@@ -255,24 +222,24 @@ COLMMD-style approximate degrees \cite{GilbertMolerSchreiber}), a pivot row can
 be selected based on sparsity-preserving criteria (low degree) as well as
 numerical considerations (relaxed threshold partial pivoting).
 
-When the symmetric or 2-by-2 strategies are used,
+When the symmetric strategy are used,
 the column preordering is not refined during numeric factorization.
 Row pivoting for sparsity and numerical accuracy is performed if the
 diagonal entry is too small.
 
 More details of the method, including experimental results, are
 described in \cite{Davis03,Davis03_algo}, available at
-http://www.cise.ufl.edu/tech-reports.
+http://www.suitesparse.com.
 
 %-------------------------------------------------------------------------------
 \section{Availability}
 %-------------------------------------------------------------------------------
 
 In addition to appearing as a Collected Algorithm of the ACM,
-UMFPACK is available at http://www.cise.ufl.edu/research/sparse.
+UMFPACK is available at \newline http://www.suitesparse.com.
 It is included as a built-in routine in MATLAB.
 Version 4.0 (in MATLAB 6.5)
-does not have the symmetric or 2-by-2 strategies and it takes
+does not have the symmetric strategy and it takes
 less advantage of the level-3
 BLAS \cite{DaydeDuff99,ACM679a,ATLAS,GotoVandeGeijn02}.
 Versions 5.x through v4.1 tend to be much faster than Version 4.0,
@@ -282,11 +249,11 @@ Version 3.0 and following make
 use of a modified version of COLAMD V2.0 by Timothy A.~Davis, Stefan
 Larimore, John Gilbert, and Esmond Ng.  The original COLAMD V2.1 is available in
 as a built-in routine in MATLAB V6.0 (or later), and at
-http://www.cise.ufl.edu/research/sparse.
+http://www.suitesparse.com.
 These codes are also available in Netlib \cite{netlib} at
 http://www.netlib.org.
 UMFPACK Versions 2.2.1 and earlier, co-authored with Iain Duff,
-are available at http://www.cise.ufl.edu/research/sparse and as
+are available as
 MA38 (functionally equivalent to Version 2.2.1) in the Harwell
 Subroutine Library.
 
@@ -300,6 +267,48 @@ an old version of AMD with a newer version of UMFPACK can fail.}
 A detailed list of changes is in the {\tt ChangeLog} file.
 
 %-------------------------------------------------------------------------------
+\subsection{Version 5.7.0}
+%-------------------------------------------------------------------------------
+
+Replaced memory manager functions and printf with functions
+in {\tt SuiteSparse\_config}.
+
+%-------------------------------------------------------------------------------
+\subsection{Version 5.6.0}
+%-------------------------------------------------------------------------------
+
+Replaced {\tt UFconfig} with {\tt SuiteSparse\_config}, for {\tt
+SuiteSparse\_timer}.  The {\tt UF\_long} type is replaced with {\tt
+SuiteSparse\_long} to avoid potential name conflicts with the {\tt UF\_}
+prefix, but the former is still available for user programs.
+User programs may safely {\tt \#undef} the {\tt UF\_long} macro and
+use {\tt SuiteSparse\_long} instead.  In future versions, {\tt UF\_long} will
+be removed completely from {\tt SuiteSparse\_config.h}.
+
+%-------------------------------------------------------------------------------
+\subsection{Version 5.5.0}
+%-------------------------------------------------------------------------------
+
+Added more user ordering options (interface to CHOLMOD and METIS orderings,
+and the ability to pass in a user ordering function).
+Minor change to how the 64-bit BLAS is used.
+Added an option to disable the search for singletons.
+
+%-------------------------------------------------------------------------------
+\subsection{Version 5.4.0}
+%-------------------------------------------------------------------------------
+
+Disabled the 2-by-2 ordering strategy.
+Bug fix for \verb'umfpack_make.m' for Windows.
+
+%-------------------------------------------------------------------------------
+\subsection{Version 5.3.0}
+%-------------------------------------------------------------------------------
+
+A bug fix for structurally singular matrices, and a compiler workaround for
+gcc versions 4.2.(3 and 4).
+
+%-------------------------------------------------------------------------------
 \subsection{Version 5.2.0}
 %-------------------------------------------------------------------------------
 
@@ -446,16 +455,9 @@ and with nonzero entries that are not confined in a narrow band.
 It is also used for the {\tt [L,U,P,Q] = lu (A)} usage of {\tt lu}.
 Type {\tt help lu} in MATLAB 6.5 or later for more details.
 
-To use the UMFPACK mexFunction, you must download and compile it,
-since the mexFunction itself is not part of MATLAB.
-The following discussion assumes that
-you have MATLAB Version 6.0 or later (which includes the BLAS, and the
-{\tt colamd} ordering routine).  To compile both the UMFPACK and AMD
-mexFunctions, just type {\tt make} in the Unix system shell,
-while in the {\tt UMFPACK} directory.
-You can also type {\tt umfpack\_make} in MATLAB, if you are in the
-{\tt UMFPACK/MATLAB} directory, or if that directory is in your MATLAB path.
-This works on any system with MATLAB, including Windows.
+To compile both the UMFPACK and AMD mexFunctions, just type {\tt umfpack\_make}
+in MATLAB, while in the {\tt UMFPACK/MATLAB} directory.
+
 See Section~\ref{Install} for more details on how to install UMFPACK.
 Once installed, the UMFPACK mexFunction can analyze, factor, and solve linear
 systems.  Table~\ref{matlab} summarizes some of the more common uses
@@ -498,7 +500,7 @@ x = A \ b ;
  & & \\
 \begin{minipage}[t]{1.5in}
 Solve $\m{Ax}=\m{b}$ using a different row and column pre-ordering
-(symmetric ordering).
+(symmetric strategy).
 \end{minipage}
 &
 \begin{minipage}[t]{2.2in}
@@ -506,7 +508,7 @@ Solve $\m{Ax}=\m{b}$ using a different row and column pre-ordering
 S = spones (A) ;
 Q = symamd (S+S') ;
 Control = umfpack ;
-Control (6) = 3 ;
+Control.strategy = 'symmetric' ;
 x = umfpack (A,Q,'\',b,Control) ;
 \end{verbatim}
 \end{minipage}
@@ -643,7 +645,8 @@ and {\tt m} $<$ {\tt n}, then {\tt umfpack} might not find a factor
 {\tt U} with a structurally zero-free diagonal.
 Unless the matrix ill-conditioned or
 poorly scaled, factorizing {\tt A'} in this case will guarantee that both
-factors will have zero-free diagonals.  Note that there is no guarantee
+factors will have zero-free diagonals (in the structural sense; they may
+be numerically zero).  Note that there is no guarantee
 as to the size of the diagonal entries of {\tt U}; UMFPACK does not do a
 rank-revealing factorization.  Here's how you can factorize {\tt A'}
 and get the factors of {\tt A} instead:
@@ -706,9 +709,9 @@ include file.  All but three of the routines come in four versions, with
 different sizes of integers and for real or complex floating-point numbers:
 \begin{enumerate}
 \item {\tt umfpack\_di\_*}: real double precision, {\tt int} integers.
-\item {\tt umfpack\_dl\_*}: real double precision, {\tt UF\_long} integers.
+\item {\tt umfpack\_dl\_*}: real double precision, {\tt SuiteSparse\_long} integers.
 \item {\tt umfpack\_zi\_*}: complex double precision, {\tt int} integers.
-\item {\tt umfpack\_zl\_*}: complex double precision, {\tt UF\_long} integers.
+\item {\tt umfpack\_zl\_*}: complex double precision, {\tt SuiteSparse\_long} integers.
 \end{enumerate}
 where {\tt *} denotes the specific name of one of the routines.
 Routine names beginning with {\tt umf\_} are internal to the package,
@@ -718,7 +721,7 @@ The other three routines are the same for all four versions.
 
 In addition, the C-callable AMD library distributed with UMFPACK
 includes 4 user-callable routines (in two versions with {\tt int} and
-{\tt UF\_long} integers) and one include file.  Refer to the AMD documentation
+{\tt SuiteSparse\_long} integers) and one include file.  Refer to the AMD documentation
 for more details.
 
 Use only one version for any one problem; do not attempt to use one version
@@ -727,7 +730,7 @@ to analyze the matrix and another version to factorize the matrix, for example.
 The notation {\tt umfpack\_di\_*} refers to all user-callable routines
 for the real double precision and {\tt int} integer case.  The notation
 {\tt umfpack\_*\_numeric}, for example, refers all four versions
-(real/complex, int/UF\_long) of a single operation
+(real/complex, int/SuiteSparse\_long) of a single operation
 (in this case numeric factorization).
 
 %-------------------------------------------------------------------------------
@@ -736,7 +739,7 @@ for the real double precision and {\tt int} integer case.  The notation
 
 The {\tt umfpack\_di\_*} and {\tt umfpack\_zi\_*} routines use {\tt int} integer
 arguments; those starting with {\tt umfpack\_dl\_} or {\tt umfpack\_zl\_}
-use {\tt UF\_long} integer arguments.  If you compile UMFPACK in the standard
+use {\tt SuiteSparse\_long} integer arguments.  If you compile UMFPACK in the standard
 ILP32 mode (32-bit {\tt int}'s, {\tt long}'s, and pointers) then the versions
 are essentially identical.  You will be able to solve problems using up to 2GB
 of memory.  If you compile UMFPACK in the standard LP64 mode, the size of an
@@ -751,7 +754,7 @@ architectures, and are not portable.  UMFPACK and AMD should be compiled
 in the same mode.
 If you compile UMFPACK and AMD in the LP64 mode,
 be sure to add {\tt -DLP64} to the compilation command.  See the examples in
-the {\tt UFconfig/UFconfig.mk} file.
+the {\tt SuiteSparse\_config/SuiteSparse\_config.mk} file.
 
 %-------------------------------------------------------------------------------
 \subsection{Real and complex floating-point}
@@ -849,12 +852,12 @@ with {\tt nz} entries.  For the {\tt int} version of UMFPACK:
 \end{verbatim}
 }
 
-For the {\tt UF\_long} version of UMFPACK:
+For the {\tt SuiteSparse\_long} version of UMFPACK:
 
 {\footnotesize
 \begin{verbatim}
-     UF_long Ap [n+1] ;
-     UF_long Ai [nz] ;
+     SuiteSparse_long Ap [n+1] ;
+     SuiteSparse_long Ai [nz] ;
      double Ax [nz] ;
 \end{verbatim}
 }
@@ -988,7 +991,64 @@ behavior.  They are fully described in Section~\ref{Alternative}:
     nearly always give about the same quality of results.  There may be
     cases where the automatic strategy fails to pick a good strategy. Also,
     you can save some computing time if you know the right strategy for your
-    set of matrix problems.
+    set of matrix problems.  The default is \verb'UMFPACK_STRATEGY_AUTO',
+    in which UMFPACK selects the strategy by itself.
+    \verb'UMFPACK_STRATEGY_UNSYMMETRIC' gives the unsymmetric
+    strategy, which is to use a column pre-ordering (such as COLAMD)
+    and to give no preference to the diagonal during partial pivoting.
+    \verb'UMFPACK_STRATEGY_SYMMETRIC' gives the symmetric strategy,
+    which is to use a symmetric row and column ordering (such as AMD)
+    and to give strong preference to the diagonal during partial pivoting.
+
+    The parameter {\tt Control [UMFPACK\_ORDERING]} defines what ordering
+    method UMFPACK should use.  The options are:
+
+    \begin{itemize}
+    \item \verb'UMFPACK_ORDERING_CHOLMOD' (0).
+        This is the method used by CHOLMOD.  It first tries AMD or COLAMD
+        (depending on what strategy is used).  If that method gives low
+        fill-in, it is used without trying METIS at all.
+        Otherwise METIS is tried (on $\m{A}^T\m{A}$ for the unsymmetric
+        strategy, or $\m{A}+\m{A}^T$ for the symmetric strategy),
+        and the ordering (AMD/COLAMD or METIS) giving the lowest fill-in is
+        used.
+
+    \item \verb'UMFPACK_ORDERING_DEFAULT'.  This is the same as
+    \verb'UMFPACK_ORDERING_AMD'.
+
+    \item \verb'UMFPACK_ORDERING_AMD' (1).  This is the default.
+        AMD is used for the symmetric strategy, on the pattern of
+        $\m{A}+\m{A}^T$.  COLAMD is used on $\m{A}$ for the unsymmetric
+        strategy.
+
+    \item \verb'UMFPACK_ORDERING_GIVEN' (2).  This is assumed if
+        a permutation is provided to \newline
+        {\tt umfpack\_*\_qsymbolic}.
+
+    \item \verb'UMFPACK_ORDERING_METIS' (3).
+        Use METIS (on $\m{A}^T\m{A}$ for the unsymmetric
+        strategy, or $\m{A}+\m{A}^T$ for the symmetric strategy).
+
+    \item \verb'UMFPACK_ORDERING_BEST' (4).
+        Try three methods and take the best.  The three methods are
+        AMD/COLAMD, METIS, and NESDIS (CHOLMOD's nested dissection
+        ordering, based on METIS and CCAMD/CCOLAMD).  This results the
+        highest analysis time, but the lowest numerical factorization time.
+
+    \item \verb'UMFPACK_ORDERING_NONE' (5).
+        The matrix is factorized as-is, except that singletons are still
+        removed.
+
+    \item \verb'UMFPACK_ORDERING_USER' (6).  Use the user-ordering function
+        passed to \newline {\tt umfpack\_*\_fsymbolic}.    Refer to 
+        \verb'UMFPACK/Source/umf_cholmod.c' for an example.
+
+    \end{itemize}
+
+    To disable the singleton filter, set \verb'Control [UMFPACK_SINGLETONS]' to
+    0.  Disabling this search for singletons can slow UMFPACK down quite a bit
+    for some matrices, but it does ensure that $\m{L}$ is well-conditioned and
+    that any ill-conditioning of $\m{A}$ is captured only in $\m{U}$.
 
 \item {\tt umfpack\_*\_qsymbolic}:
 
@@ -997,7 +1057,14 @@ behavior.  They are fully described in Section~\ref{Alternative}:
     or AMD pre-orderings.  For example, a graph partitioning-based order
     of $\m{A}\tr\m{A}$ would be suitable for UMFPACK's unsymmetric strategy.
     A partitioning of $\m{A}+\m{A}\tr$ would be suitable for UMFPACK's
-    symmetric or 2-by-2 strategies.
+    symmetric strategy.
+
+\item {\tt umfpack\_*\_fsymbolic}:
+
+    An alternative to {\tt umfpack\_*\_symbolic}.
+    Allows the user to pass a pointer to a function,
+    which is called to compute the ordering on the matrix
+    (or on a submatrix with singletons removed, if any exist).
 
 \item {\tt umfpack\_*\_wsolve}:
 
@@ -1028,12 +1095,12 @@ four arrays.  For the {\tt int} version of UMFPACK:
 \end{verbatim}
 }
 
-For the {\tt UF\_long} version:
+For the {\tt SuiteSparse\_long} version:
 
 {\footnotesize
 \begin{verbatim}
-     UF_long Ti [nz] ;
-     UF_long Tj [nz] ;
+     SuiteSparse_long Ti [nz] ;
+     SuiteSparse_long Tj [nz] ;
      double Tx [nz] ;
 \end{verbatim}
 }
@@ -1299,17 +1366,10 @@ printed (similar to the MATLAB commands
 \subsection{Utility routines}
 %-------------------------------------------------------------------------------
 
-UMFPACK v4.0 included a routine that returns the time used by the process,
-{\tt umfpack\_timer}.  The routine uses either {\tt getrusage} (which is
-preferred), or the ANSI C {\tt clock} routine if that is not available.
-It is fully described in Section~\ref{Utility}.  It is still available in
-UMFPACK v4.1 and following, but not used internally.
-Two new timing routines are provided in UMFPACK Version 4.1 and following,
-{\tt umfpack\_tic} and {\tt umfpack\_toc}.  They use POSIX-compliant
-{\tt sysconf} and {\tt times} routines to find both the CPU time
-and wallclock time.
+Three timing routines are provided in UMFPACK Version 4.1 and following,
+{\tt umfpack\_tic}, {\tt umfpack\_toc}, and {\tt umfpack\_timer}.
 These three routines are the only user-callable
-routine that is identical in all four {\tt int}/{\tt UF\_long}, real/complex
+routine that is identical in all four {\tt int}/{\tt SuiteSparse\_long}, real/complex
 versions (there is no {\tt umfpack\_di\_timer} routine, for example).
 
 %-------------------------------------------------------------------------------
@@ -1345,32 +1405,28 @@ indexing.  Thus, {\tt Control(1)} in MATLAB is the same as
 \hline
 
 MATLAB & ANSI C & default & description \\
+\verb'struct' & & & \\
 \hline
-{\tt Control(1)}  & {\tt Control[UMFPACK\_PRL]} & 1 & printing level \\
-{\tt Control(2)}  & {\tt Control[UMFPACK\_DENSE\_ROW]} & 0.2 & dense row parameter \\
-{\tt Control(3)}  & {\tt Control[UMFPACK\_DENSE\_COL]} & 0.2 & dense column parameter \\
-{\tt Control(4)}  & {\tt Control[UMFPACK\_PIVOT\_TOLERANCE]} & 0.1 & partial pivoting tolerance \\
-{\tt Control(5)}  & {\tt Control[UMFPACK\_BLOCK\_SIZE]} & 32 & BLAS block size \\
-{\tt Control(6)}  & {\tt Control[UMFPACK\_STRATEGY]} & 0 (auto) & select strategy \\
-{\tt Control(7)}  & {\tt Control[UMFPACK\_ALLOC\_INIT]} & 0.7 & initial memory allocation  \\
-{\tt Control(8)}  & {\tt Control[UMFPACK\_IRSTEP]} & 2 & max iter. refinement steps \\
-{\tt Control(13)} & {\tt Control[UMFPACK\_2BY2\_TOLERANCE]} & 0.01 & defines ``large'' entries \\
-{\tt Control(14)} & {\tt Control[UMFPACK\_FIXQ]} & 0 (auto) & fix or modify Q \\
-{\tt Control(15)} & {\tt Control[UMFPACK\_AMD\_DENSE]} & 10 & AMD dense row/column parameter \\
-{\tt Control(16)} & {\tt Control[UMFPACK\_SYM\_PIVOT\_TOLERANCE]} & 0.001 & for diagonal entries \\
-{\tt Control(17)} & {\tt Control[UMFPACK\_SCALE]} & 1 (sum) & row scaling (none, sum, or max) \\
-{\tt Control(18)} & {\tt Control[UMFPACK\_FRONT\_ALLOC\_INIT]} & 0.5 & frontal matrix allocation ratio \\
-{\tt Control(19)} & {\tt Control[UMFPACK\_DROPTOL]} & 0 & drop tolerance \\
-{\tt Control(20)} & {\tt Control[UMFPACK\_AGGRESSIVE]} & 1 (yes) & aggressive absorption \\
- & & & in AMD and COLAMD \\
+{\tt prl}           & {\tt Control[UMFPACK\_PRL]} & 1 & printing level \\
+-                   & {\tt Control[UMFPACK\_DENSE\_ROW]} & 0.2 & dense row parameter \\
+-                   & {\tt Control[UMFPACK\_DENSE\_COL]} & 0.2 & dense column parameter \\
+{\tt tol}           & {\tt Control[UMFPACK\_PIVOT\_TOLERANCE]} & 0.1 & partial pivoting tolerance \\
+-                   & {\tt Control[UMFPACK\_BLOCK\_SIZE]} & 32 & BLAS block size \\
+{\tt strategy}      & {\tt Control[UMFPACK\_STRATEGY]} & 0 (auto) & select strategy \\
+{\tt ordering}      & {\tt Control[UMFPACK\_ORDERING]} & 1 (AMD) & select ordering \\
+-                   & {\tt Control[UMFPACK\_ALLOC\_INIT]} & 0.7 & initial memory allocation  \\
+{\tt irstep}        & {\tt Control[UMFPACK\_IRSTEP]} & 2 & max iter. refinement steps \\
+% {\tt Control(13)} & ignored & & \\
+-                   & {\tt Control[UMFPACK\_FIXQ]} & 0 (auto) & fix or modify Q \\
+-                   & {\tt Control[UMFPACK\_AMD\_DENSE]} & 10 & AMD dense row/col param. \\
+{\tt symtol}        & {\tt Control[UMFPACK\_SYM\_PIVOT\_TOLERANCE]} & 0.001 & for diagonal entries \\
+{\tt scale}         & {\tt Control[UMFPACK\_SCALE]} & 1 (sum) & row scaling (none, sum, max) \\
+-                   & {\tt Control[UMFPACK\_FRONT\_ALLOC\_INIT]} & 0.5 & frontal matrix allocation ratio \\
+-                   & {\tt Control[UMFPACK\_DROPTOL]} & 0 & drop tolerance \\
+-                   & {\tt Control[UMFPACK\_AGGRESSIVE]} & 1 (yes) & aggressive absorption \\
+{\tt singletons}    & {\tt Control[UMFPACK\_SINGLETONS]} & 1 (enable) & enable singleton filter \\
 %
 \hline
-\multicolumn{4}{l}{Can only be changed at compile time:} \\
-{\tt Control(9)}  & {\tt Control[UMFPACK\_COMPILED\_WITH\_BLAS]} & - & true if BLAS is used \\
-{\tt Control(10)} & {\tt Control[UMFPACK\_COMPILED\_FOR\_MATLAB]} & - & true for mexFunction \\
-{\tt Control(11)} & {\tt Control[UMFPACK\_COMPILED\_WITH\_GETRUSAGE]} & - & 1 if {\tt getrusage} used \\
-{\tt Control(12)} & {\tt Control[UMFPACK\_COMPILED\_IN\_DEBUG\_MODE]} & - & true if debug mode enabled \\
-\hline
 \end{tabular}
 }
 \end{table}
@@ -1392,7 +1448,9 @@ In AMD, a row/column of the square matrix $\m{S}+\m{S}\tr$ is
 considered ``dense'' if it has more than $\max (16, \alpha \sqrt{n})$ entries.
 These rows/columns are placed last in AMD's output ordering.
 For more details on the control parameters, refer to the documentation of
-{\tt umfpack\_*\_qsymbolic}, {\tt umfpack\_*\_numeric}, {\tt umfpack\_*\_solve},
+{\tt umfpack\_*\_qsymbolic},
+{\tt umfpack\_*\_fsymbolic},
+{\tt umfpack\_*\_numeric}, {\tt umfpack\_*\_solve},
 and the {\tt umfpack\_*\_report\_*} routines,
 in Sections~\ref{Primary}~through~\ref{Report}, below.
 
@@ -1516,6 +1574,9 @@ In this case, no {\tt Symbolic} or {\tt Numeric} object was created.
     be the wrong one, and an earlier end-of-file condition would then result
     in this error.
 
+\item {\tt UMFPACK\_ERROR\_ordering\_failed},  (-18):
+    The ordering method failed.
+
 \item {\tt UMFPACK\_ERROR\_internal\_error},  (-911):  
     An internal error has occurred, of unknown cause.  This is either a bug
     in UMFPACK, or the result of a memory overrun from your program.
@@ -1525,8 +1586,8 @@ In this case, no {\tt Symbolic} or {\tt Numeric} object was created.
     A failed assertion might occur which
     can give you a better indication as to what is going wrong.  Be aware that
     UMFPACK will be extraordinarily slow when running in debug mode.
-    If all else fails, contact the developer (davis at cise.ufl.edu) with
-    as many details as possible.
+    If all else fails, contact the developer (DrTimothyAldenDavis at gmail.com)
+    with as many details as possible.
 
 \end{itemize}
 
@@ -1542,7 +1603,10 @@ user-callable C interface to UMFPACK.  The only features that it does not use
 are the support for the triplet form (MATLAB's sparse arrays are already in the
 compressed column form) and the ability to reuse the {\tt Symbolic} object to
 numerically factorize a matrix whose pattern is the same as a prior matrix
-analyzed by {\tt umfpack\_*\_symbolic} or {\tt umfpack\_*\_qsymbolic}.  The
+analyzed by {\tt umfpack\_*\_symbolic},
+{\tt umfpack\_*\_qsymbolic} or
+{\tt umfpack\_*\_fsymbolic}.
+The
 latter is an important feature, but the mexFunction does not return its opaque
 {\tt Symbolic} and {\tt Numeric} objects to MATLAB.  Instead, it gets the
 contents of these objects after extracting them via the {\tt umfpack\_*\_get\_*}
@@ -1553,7 +1617,7 @@ The {\tt umf4.c} program for reading matrices in Harwell/Boeing format
 ({\tt readhb.f}, {\tt readhb\_nozeros.f}, and {\tt readhb\_size.f})
 for reading in the sample Harwell/Boeing files in the {\tt UMFPACK/Demo/HB}
 directory.  More matrices are available at
-http://www.cise.ufl.edu/research/sparse/matrices.
+http://www.suitesparse.com.
 Type {\tt make hb} in the {\tt UMFPACK/Demo/HB} directory
 to compile and run this demo.  This program was used for the experimental
 results in \cite{Davis03}.
@@ -1568,15 +1632,15 @@ values, and calling sequences of the routines in one category.  Variables with
 the same name as those already listed in a prior category have the same size
 and type.
 
-The real, {\tt UF\_long} integer {\tt umfpack\_dl\_*} routines are
+The real, {\tt SuiteSparse\_long} integer {\tt umfpack\_dl\_*} routines are
 identical to the real, {\tt int} routines, except that {\tt \_di\_} is replaced
 with {\tt \_dl\_} in the name, and all {\tt int} arguments become
-{\tt UF\_long}.
-Similarly, the complex, {\tt UF\_long} integer {\tt umfpack\_zl\_*} routines are
+{\tt SuiteSparse\_long}.
+Similarly, the complex, {\tt SuiteSparse\_long} integer {\tt umfpack\_zl\_*} routines are
 identical to the complex, {\tt int} routines, except that {\tt \_zi\_} is
 replaced
 with {\tt \_zl\_} in the name, and all {\tt int} arguments become
-{\tt UF\_long}.
+{\tt SuiteSparse\_long}.
 Only the real and complex {\tt int} versions are listed in the synopsis below.
 
 The matrix $\m{A}$ is {\tt m}-by-{\tt n} with {\tt nz} entries.
@@ -1659,6 +1723,7 @@ double W [5*n] ;
 
 umfpack_di_defaults (Control) ;
 status = umfpack_di_qsymbolic (m, n, Ap, Ai, Ax, Qinit, &Symbolic, Control, Info) ;
+status = umfpack_di_fsymbolic (m, n, Ap, Ai, Ax, &user_ordering, user_params, &Symbolic, Control, Info) ;
 status = umfpack_di_wsolve (sys, Ap, Ai, Ax, X, B, Numeric, Control, Info, Wi, W) ;
 \end{verbatim}
 }
@@ -1762,6 +1827,7 @@ double Wz [10*n] ;
 
 umfpack_zi_defaults (Control) ;
 status = umfpack_zi_qsymbolic (m, n, Ap, Ai, Ax, Az, Qinit, &Symbolic, Control, Info) ;
+status = umfpack_zi_fsymbolic (m, n, Ap, Ai, Ax, Az, &user_ordering, user_params, &Symbolic, Control, Info) ;
 status = umfpack_zi_wsolve (sys, Ap, Ai, Ax, Az, Xx, Xz, Bx, Bz, Numeric, Control, Info, Wi, Wz) ;
 \end{verbatim}
 }
@@ -1862,7 +1928,7 @@ UMFPACK makes use of the AMD ordering package for its symmetric ordering
 strategy.  You may also use these four user-callable routines in your own C
 programs.  You need to include the {\tt amd.h} file only if you make direct
 calls to the AMD routines themselves.  The {\tt int} versions are summarized
-below; {\tt UF\_long} versions are also available.  Refer to the AMD User Guide
+below; {\tt SuiteSparse\_long} versions are also available.  Refer to the AMD User Guide
 for more information, or to the file {\tt amd.h} which documents these routines.
 
 {\footnotesize
@@ -2051,16 +2117,21 @@ the UMFPACK and AMD mexFunctions in MATLAB.
 
 You will need to install both UMFPACK and AMD to use UMFPACK.
 The {\tt UMFPACK} and {\tt AMD} subdirectories must be placed side-by-side
-within the same directory.  AMD is a stand-alone package that
+within the same parent directory.  AMD is a stand-alone package that
 is required by UMFPACK.  UMFPACK can be compiled without the
 BLAS \cite{DaydeDuff99,ACM679a,ATLAS,GotoVandeGeijn02},
 but your performance will be much less than what it should be.
 
-System-dependent configurations are in the {\tt UFconfig/UFconfig.mk}
+UMFPACK also requires CHOLMOD, CCAMD, CCOLAMD, COLAMD, and metis-4.0
+by default.  You can remove this dependency by compiling with
+{\tt -DNCHOLMOD}.  Add this to the {\tt UMFPACK\_CONFIG} definition
+in {\tt SuiteSparse\_config/SuiteSparse\_config.mk}.
+
+System-dependent configurations are in the {\tt SuiteSparse\_config/SuiteSparse\_config.mk}
 file.  The default
 settings will work on most systems, except that UMFPACK will be compiled so
 that it does not use the BLAS.  Sample configurations are provided
-for Linux, Sun Solaris, SGI IRIX, IBM AIX, and the DEC/Compaq Alpha.
+for Linux, Mac, Sun Solaris, SGI IRIX, IBM AIX, and the DEC/Compaq Alpha.
 
 To compile and install both packages,
 go to the {\tt UMFPACK} directory and type {\tt make}.  This will compile the
@@ -2073,31 +2144,30 @@ files in the distribution.  Expect to see a few differences, such as
 residual norms, compile-time control settings, and perhaps memory usage
 differences.
 
-To use {\tt make} to compile the MATLAB mexFunctions for MATLAB
-and AMD, you can either type {\tt make mex} in the UMFPACK directory.
-You may first need to edit the {\tt UFconfig/UFconfig.mk} file to
-modify the definition of the {\tt MEX}, if you have a version of MATLAB
-older than Version 7.2.  Remove the {\tt -largeArrayDims} definition.
-If you use the MATLAB command {\tt umfpack\_make} in the MATLAB directory,
-then this case is handled for you automatically.
+If you have trouble with {\tt make} for UMFPACK,
+try using the plain {\tt Makefile} instead of {\tt GNUmakefile}.
+Go to the UMFPACK/Lib directory and type {\tt make -f Makefile}.
+
+Use the MATLAB command {\tt umfpack\_make} in the MATLAB directory
+to compile UMFPACK and AMD for use in MATLAB.
 
 If you have the GNU version of {\tt make}, the {\tt Lib/GNUmakefile} and
 {\tt MATLAB/GNUmakefile} files are used.  These are much more concise than
 what the ``old'' version of {\tt make} can handle.  If you do not have
 GNU {\tt make}, the {\tt Lib/Makefile} and {\tt MATLAB/Makefile} files
 are used instead.  Each UMFPACK source file is compiled into four
-versions ({\tt double} / complex, and {\tt int} / {\tt UF\_long}).  A proper
+versions ({\tt double} / complex, and {\tt int} / {\tt SuiteSparse\_long}).  A proper
 old-style {\tt Makefile} is cumbersome in this case, so these two
 {\tt Makefile}'s have been constructed by brute force.  They ignore
 dependencies, and simply compile everything.  I highly recommend using GNU
 {\tt make} if you wish to modify UMFPACK.
 
 If you compile UMFPACK and AMD and then later change the
-{\tt UFconfig/UFconfig.mk} file
+{\tt SuiteSparse\_config/SuiteSparse\_config.mk} file
 then you should type {\tt make purge} and then {\tt make} to recompile.
 
 Here are the various parameters that you can control in your
-{\tt UFconfig/UFconfig.mk} file:
+{\tt SuiteSparse\_config/SuiteSparse\_config.mk} file:
 
 \begin{itemize}
 \item {\tt CC = } your C compiler, such as {\tt cc}.
@@ -2108,9 +2178,6 @@ Here are the various parameters that you can control in your
 \item {\tt LIB = } your libraries, such as {\tt -lm} or {\tt -lblas}.
 \item {\tt RM =} the command to delete a file.
 \item {\tt MV =} the command to rename a file.
-\item {\tt MEX =} the command to compile a MATLAB mexFunction.
-    If you are using MATLAB 5, you need to add {\tt -DNBLAS} and
-    {\tt -DNUTIL} to this command.
 \item {\tt F77 =} the command to compile a Fortran program (optional).
 \item {\tt F77FLAGS =} the Fortran compiler flags (optional).
 \item {\tt F77LIB =} the Fortran libraries (optional).
@@ -2131,10 +2198,6 @@ most deal with how the BLAS are called:
     Sun Solaris, SGI Irix, Red Hat Linux, Compaq Alpha, and
     AIX (the IBM RS 6000).
 
-\item {\tt -DGETRUSAGE} if you have the {\tt getrusage} function.
-\item {\tt -DNPOSIX} if you do not have the POSIX-compliant
-    {\tt sysconf} and {\tt times} routines used by
-    {\tt umfpack\_tic} and {\tt umfpack\_toc}.
 \item {\tt -DNRECIPROCAL} controls a trade-off between speed and accuracy.
     If defined (or if the pivot value itself is less than $10^{-12}$),
     then the pivot column is divided by the pivot value during numeric
@@ -2157,9 +2220,7 @@ most deal with how the BLAS are called:
     zero is performed (a zero entry on the diagonal of $\m{U}$ is
     treated as if it were equal to one).  By default,
     UMFPACK will divide by zero.
-\item {\tt -DNO\_TIMER} controls whether or not timing routines
-    are to be called.  If defined, no timers are used.
-    Timers are included by default.
+
 \end{itemize}
 
 If a Fortran BLAS package is used you may see compiler warnings.  The BLAS
@@ -2180,9 +2241,16 @@ a dense matrix (stored in sparse format) is 900 Mflops, as compared to
 when {\tt A} is stored as a regular full matrix.
 
 When you compile your program that uses the C-callable UMFPACK library,
-you need to link your program with both libraries
-({\tt UMFPACK/Lib/libumfpack.a} and {\tt AMD/Lib/libamd.a})
-and you need to tell your compiler to look in the
+you need to link your program with all libraries
+({\tt UMFPACK/Lib/libumfpack.a} and {\tt AMD/Lib/libamd.a},
+and unless you compile with \verb'-DNCHOLMOD' you also must link with
+{\tt CHOLMOD/Lib/libcholmod.a}, \newline
+{\tt COLAMD/Lib/libcolamd.a},
+{\tt CCOLAMD/Lib/libccolamd.a},
+{\tt CAMD/Lib/libcamd.a},
+and \newline
+{\tt metis-4.0/libmetis.a}).
+You need to tell your compiler to look in the
 directories {\tt UMFPACK/Include} and {\tt AMD/Include} for include
 files.  See {\tt UMFPACK/Demo/Makefile} for an example.
 You do not need to directly include any AMD include files in your
@@ -2193,11 +2261,11 @@ program, unless you directly call AMD routines.  You only need the
 statement, as described in Section~\ref{Synopsis}.
 
 If you would like to compile both 32-bit and 64-bit versions of the libraries,
-you will need to do it in two steps.  Modify your {\tt UFconfig/UFconfig.mk}
+you will need to do it in two steps.  Modify your {\tt SuiteSparse\_config/SuiteSparse\_config.mk}
 file, and select the 32-bit option.  Type {\tt make} in the {\tt UMFPACK}
 directory, which creates the {\tt UMFPACK/Lib/libumfpack.a} and
 {\tt AMD/Lib/libamd.a} libraries.  Rename those two files.  Edit your
-{\tt UFconfig/UFconfig.mk} file and select the 64-bit option.
+{\tt SuiteSparse\_config/SuiteSparse\_config.mk} file and select the 64-bit option.
 Type {\tt make purge},
 and then {\tt make}, and you will create the 64-bit libraries.
 You can use the same {\tt umfpack.h} include file for both 32-bit and
@@ -2217,13 +2285,11 @@ compilation of UMFPACK in Microsoft Visual Studio, for Windows.
 \subsection{Installing the MATLAB interface}
 %-------------------------------------------------------------------------------
 
-If all you want to do is use the UMFPACK mexFunction in MATLAB, you can skip
-the use of the {\tt make} command described above.  Simply type
+Simply type
 {\tt umfpack\_make} in MATLAB while in the {\tt UMFPACK/MATLAB} directory.
 You can also type {\tt amd\_make} in the {\tt AMD/MATLAB} directory
 to compile the stand-alone AMD mexFunction (this is not required to
-compile the UMFPACK mexFunction).  This works on any computer with MATLAB,
-including Windows.
+compile the UMFPACK mexFunction).
 
 If you are using Windows and the {\tt lcc} compiler bundled with
 MATLAB 6.1, then you may need to copy the
@@ -2263,6 +2329,9 @@ You may need to modify the interface routines in the file
 {\tt umf4\_f77wrapper.c} if you are using compilers for which this interface
 has not been tested.
 
+In particular, I was not able to get C and Fortran to work together on
+the Mac (Snow Leopard).
+
 %-------------------------------------------------------------------------------
 \subsection{Known Issues}
 %-------------------------------------------------------------------------------
@@ -2365,7 +2434,7 @@ let me know and I could consider including them:
 
 \item A method that takes time proportional to the number of nonzeros in
     $\m{A}$ to compute the symbolic factorization \cite{GilbertNgPeyton94}.
-    This would improve the performance of the symmetric and 2-by-2 strategies,
+    This would improve the performance of the symmetric strategy,
     and the unsymmetric strategy when dense rows are present.
     The current method takes
     time proportional to the number of nonzeros in the upper bound of $\m{U}$.
@@ -2395,7 +2464,7 @@ let me know and I could consider including them:
 
 The include files are the same for all four versions of
 UMFPACK.  The generic integer type is {\tt Int}, which is an {\tt int} or
-{\tt UF\_long}, depending on which version of UMFPACK you are using.
+{\tt SuiteSparse\_long}, depending on which version of UMFPACK you are using.
 
 \subsection{umfpack\_*\_symbolic}
 
@@ -2456,7 +2525,7 @@ INCLUDE umfpack_defaults.h via sed
 }
 
 \newpage
-\subsection{umfpack\_*\_qsymbolic}
+\subsection{umfpack\_*\_qsymbolic and umfpack\_*\_fsymbolic}
 
 {\footnotesize
 \begin{verbatim}
diff --git a/UMFPACK/Include/umfpack.h b/UMFPACK/Include/umfpack.h
index c720aba..62ef2f9 100644
--- a/UMFPACK/Include/umfpack.h
+++ b/UMFPACK/Include/umfpack.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -27,8 +26,7 @@
 extern "C" {
 #endif
 
-/* define UF_long */
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
 
 /* -------------------------------------------------------------------------- */
 /* size of Info and Control arrays */
@@ -97,10 +95,10 @@ extern "C" {
 /* Version, copyright, and license */
 /* -------------------------------------------------------------------------- */
 
-#define UMFPACK_VERSION "UMFPACK V5.2.0 (Nov 1, 2007)"
+#define UMFPACK_VERSION "UMFPACK V5.7.1 (Oct 10, 2014)"
 
 #define UMFPACK_COPYRIGHT \
-"UMFPACK:  Copyright (c) 2005-2006 by Timothy A. Davis.  All Rights Reserved.\n"
+"UMFPACK:  Copyright (c) 2005-2013 by Timothy A. Davis.  All Rights Reserved.\n"
 
 #define UMFPACK_LICENSE_PART1 \
 "\nUMFPACK License:\n" \
@@ -140,7 +138,7 @@ extern "C" {
 
 #define UMFPACK_LICENSE_PART3 \
 "\n" \
-"Availability: http://www.cise.ufl.edu/research/sparse/umfpack\n" \
+"Availability: http://www.suitesparse.com" \
 "\n"
 
 /* UMFPACK Version 4.5 and later will include the following definitions.
@@ -163,11 +161,11 @@ extern "C" {
  * above.
  */
 
-#define UMFPACK_DATE "Nov 1, 2007"
+#define UMFPACK_DATE "Oct 10, 2014"
 #define UMFPACK_VER_CODE(main,sub) ((main) * 1000 + (sub))
 #define UMFPACK_MAIN_VERSION 5
-#define UMFPACK_SUB_VERSION 2
-#define UMFPACK_SUBSUB_VERSION 0
+#define UMFPACK_SUB_VERSION 7
+#define UMFPACK_SUBSUB_VERSION 1
 #define UMFPACK_VER UMFPACK_VER_CODE(UMFPACK_MAIN_VERSION,UMFPACK_SUB_VERSION)
 
 /* -------------------------------------------------------------------------- */
@@ -188,7 +186,7 @@ extern "C" {
 
 /* computed in UMFPACK_*symbolic: */
 #define UMFPACK_SIZE_OF_INT 4		/* sizeof (int) */
-#define UMFPACK_SIZE_OF_LONG 5		/* sizeof (UF_long) */
+#define UMFPACK_SIZE_OF_LONG 5		/* sizeof (SuiteSparse_long) */
 #define UMFPACK_SIZE_OF_POINTER 6	/* sizeof (void *) */
 #define UMFPACK_SIZE_OF_ENTRY 7		/* sizeof (Entry), real or complex */
 #define UMFPACK_NDENSE_ROW 8		/* number of dense rows */
@@ -200,7 +198,7 @@ extern "C" {
 #define UMFPACK_SYMBOLIC_SIZE 14	/* size of Symbolic object, in Units */
 #define UMFPACK_SYMBOLIC_TIME 15	/* time (sec.) for symbolic analysis */
 #define UMFPACK_SYMBOLIC_WALLTIME 17	/* wall clock time for sym. analysis */
-#define UMFPACK_STRATEGY_USED 18	/* strategy used: sym, unsym, 2by2 */
+#define UMFPACK_STRATEGY_USED 18	/* strategy used: sym, unsym */
 #define UMFPACK_ORDERING_USED 19	/* ordering used: colamd, amd, given */
 #define UMFPACK_QFIXED 31		/* whether Q is fixed or refined */
 #define UMFPACK_DIAG_PREFERRED 32	/* whether diagonal pivoting attempted*/
@@ -214,12 +212,7 @@ extern "C" {
 #define UMFPACK_SYMMETRIC_NDENSE 38	/* # of "dense" rows/cols in S+S' */
 #define UMFPACK_SYMMETRIC_DMAX 39	/* max nz in cols of L, for AMD */
 
-/* statistics for 2-by-2 strategy */
-#define UMFPACK_2BY2_NWEAK 51		    /* number of weak diagonal entries*/
-#define UMFPACK_2BY2_UNMATCHED 52	    /* # of weak diagonals not matched*/
-#define UMFPACK_2BY2_PATTERN_SYMMETRY 53    /* symmetry of pattern of P*S */
-#define UMFPACK_2BY2_NZ_PA_PLUS_PAT 54	    /* nz in PS+(PS)' */
-#define UMFPACK_2BY2_NZDIAG 55		    /* nz on diagonal of PS+(PS)' */
+/* 51:55 unused */
 
 /* statistcs for singleton pruning */
 #define UMFPACK_COL_SINGLETONS 56	/* # of column singletons */
@@ -290,13 +283,6 @@ extern "C" {
 /* Unused parts of Info may be used in future versions of UMFPACK. */
 
 /* -------------------------------------------------------------------------- */
-
-/* Info [UMFPACK_ORDERING_USED] is one of the following: */
-#define UMFPACK_ORDERING_COLAMD 0	/* COLAMD(A) */
-#define UMFPACK_ORDERING_AMD 1		/* AMD(A+A') */
-#define UMFPACK_ORDERING_GIVEN 2	/* Q is provided on input */
-
-/* -------------------------------------------------------------------------- */
 /* contents of Control */
 /* -------------------------------------------------------------------------- */
 
@@ -307,12 +293,12 @@ extern "C" {
 #define UMFPACK_DENSE_ROW 1		/* dense row parameter */
 #define UMFPACK_DENSE_COL 2		/* dense col parameter */
 #define UMFPACK_BLOCK_SIZE 4		/* BLAS-3 block size */
-#define UMFPACK_STRATEGY 5		/* auto, symmetric, unsym., or 2by2 */
-#define UMFPACK_2BY2_TOLERANCE 12	/* 2-by-2 pivot tolerance */
+#define UMFPACK_STRATEGY 5		/* auto, symmetric, or unsym. */
+#define UMFPACK_ORDERING 10             /* ordering method to use */
 #define UMFPACK_FIXQ 13			/* -1: no fixQ, 0: default, 1: fixQ */
 #define UMFPACK_AMD_DENSE 14		/* for AMD ordering */
-#define UMFPACK_AGGRESSIVE 19		/* whether or not to use aggressive
-					 * absorption in AMD and COLAMD */
+#define UMFPACK_AGGRESSIVE 19		/* whether or not to use aggressive */
+#define UMFPACK_SINGLETONS 11           /* singleton filter on if true */
 
 /* used in UMFPACK_numeric only: */
 #define UMFPACK_PIVOT_TOLERANCE 3	/* threshold partial pivoting setting */
@@ -327,9 +313,8 @@ extern "C" {
 
 /* compile-time settings - Control [8..11] cannot be changed at run time: */
 #define UMFPACK_COMPILED_WITH_BLAS 8	    /* uses the BLAS */
-#define UMFPACK_COMPILED_FOR_MATLAB 9	    /* 1 if MATLAB mexFunction, etc. */
-#define UMFPACK_COMPILED_WITH_GETRUSAGE 10  /* uses getrusage timer, or not */
-#define UMFPACK_COMPILED_IN_DEBUG_MODE 11   /* debugging enabled (very slow!) */
+
+/* 9,12: unused */
 
 /* -------------------------------------------------------------------------- */
 
@@ -337,9 +322,7 @@ extern "C" {
 #define UMFPACK_STRATEGY_AUTO 0		/* use sym. or unsym. strategy */
 #define UMFPACK_STRATEGY_UNSYMMETRIC 1	/* COLAMD(A), coletree postorder,
 					   not prefer diag*/
-#define UMFPACK_STRATEGY_2BY2 2		/* AMD(PA+PA'), no coletree postorder,
-					   prefer diag(PA) where P is pseudo
-					   max transversal */
+#define UMFPACK_STRATEGY_OBSOLETE 2     /* 2-by-2 is no longer available */
 #define UMFPACK_STRATEGY_SYMMETRIC 3	/* AMD(A+A'), no coletree postorder,
 					   prefer diagonal */
 
@@ -348,6 +331,16 @@ extern "C" {
 #define UMFPACK_SCALE_SUM 1	/* default: divide each row by sum (abs (row))*/
 #define UMFPACK_SCALE_MAX 2	/* divide each row by max (abs (row)) */
 
+/* Control [UMFPACK_ORDERING] and Info [UMFPACK_ORDERING_USED] are one of: */
+#define UMFPACK_ORDERING_CHOLMOD 0      /* use CHOLMOD (AMD/COLAMD then METIS)*/
+#define UMFPACK_ORDERING_AMD 1          /* use AMD/COLAMD */
+#define UMFPACK_ORDERING_GIVEN 2        /* user-provided Qinit */
+#define UMFPACK_ORDERING_METIS 3        /* use METIS */
+#define UMFPACK_ORDERING_BEST 4         /* try many orderings, pick best */
+#define UMFPACK_ORDERING_NONE 5         /* natural ordering */
+#define UMFPACK_ORDERING_USER 6         /* user-provided function */
+/* AMD/COLAMD means: use AMD for symmetric strategy, COLAMD for unsymmetric */
+
 /* -------------------------------------------------------------------------- */
 /* default values of Control: */
 /* -------------------------------------------------------------------------- */
@@ -356,7 +349,6 @@ extern "C" {
 #define UMFPACK_DEFAULT_DENSE_ROW 0.2
 #define UMFPACK_DEFAULT_DENSE_COL 0.2
 #define UMFPACK_DEFAULT_PIVOT_TOLERANCE 0.1
-#define UMFPACK_DEFAULT_2BY2_TOLERANCE 0.01
 #define UMFPACK_DEFAULT_SYM_PIVOT_TOLERANCE 0.001
 #define UMFPACK_DEFAULT_BLOCK_SIZE 32
 #define UMFPACK_DEFAULT_ALLOC_INIT 0.7
@@ -368,6 +360,8 @@ extern "C" {
 #define UMFPACK_DEFAULT_FIXQ 0
 #define UMFPACK_DEFAULT_AGGRESSIVE 1
 #define UMFPACK_DEFAULT_DROPTOL 0
+#define UMFPACK_DEFAULT_ORDERING UMFPACK_ORDERING_AMD
+#define UMFPACK_DEFAULT_SINGLETONS TRUE
 
 /* default values of Control may change in future versions of UMFPACK. */
 
@@ -399,6 +393,8 @@ extern "C" {
 #define UMFPACK_ERROR_internal_error (-911) /* yes, call me if you get this! */
 #define UMFPACK_ERROR_file_IO (-17)
 
+#define UMFPACK_ERROR_ordering_failed (-18)
+
 /* -------------------------------------------------------------------------- */
 /* solve codes */
 /* -------------------------------------------------------------------------- */
diff --git a/UMFPACK/Include/umfpack_col_to_triplet.h b/UMFPACK/Include/umfpack_col_to_triplet.h
index 948a65e..8fa096f 100644
--- a/UMFPACK/Include/umfpack_col_to_triplet.h
+++ b/UMFPACK/Include/umfpack_col_to_triplet.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_col_to_triplet
@@ -15,11 +14,11 @@ int umfpack_di_col_to_triplet
     int Tj [ ]
 ) ;
 
-UF_long umfpack_dl_col_to_triplet
+SuiteSparse_long umfpack_dl_col_to_triplet
 (
-    UF_long n_col,
-    const UF_long Ap [ ],
-    UF_long Tj [ ]
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    SuiteSparse_long Tj [ ]
 ) ;
 
 int umfpack_zi_col_to_triplet
@@ -29,11 +28,11 @@ int umfpack_zi_col_to_triplet
     int Tj [ ]
 ) ;
 
-UF_long umfpack_zl_col_to_triplet
+SuiteSparse_long umfpack_zl_col_to_triplet
 (
-    UF_long n_col,
-    const UF_long Ap [ ],
-    UF_long Tj [ ]
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    SuiteSparse_long Tj [ ]
 ) ;
 
 /*
@@ -43,10 +42,10 @@ double int Syntax:
     int n_col, *Tj, *Ap, status ;
     status = umfpack_di_col_to_triplet (n_col, Ap, Tj) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_col, *Tj, *Ap, status ;
+    SuiteSparse_long n_col, *Tj, *Ap, status ;
     status = umfpack_dl_col_to_triplet (n_col, Ap, Tj) ;
 
 complex int Syntax:
@@ -55,10 +54,10 @@ complex int Syntax:
     int n_col, *Tj, *Ap, status ;
     status = umfpack_zi_col_to_triplet (n_col, Ap, Tj) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_col, *Tj, *Ap, status ;
+    SuiteSparse_long n_col, *Tj, *Ap, status ;
     status = umfpack_zl_col_to_triplet (n_col, Ap, Tj) ;
 
 Purpose:
diff --git a/UMFPACK/Include/umfpack_defaults.h b/UMFPACK/Include/umfpack_defaults.h
index a588d4f..e1a3a8b 100644
--- a/UMFPACK/Include/umfpack_defaults.h
+++ b/UMFPACK/Include/umfpack_defaults.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 void umfpack_di_defaults
@@ -35,7 +34,7 @@ double int Syntax:
     double Control [UMFPACK_CONTROL] ;
     umfpack_di_defaults (Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL] ;
@@ -47,7 +46,7 @@ complex int Syntax:
     double Control [UMFPACK_CONTROL] ;
     umfpack_zi_defaults (Control) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL] ;
diff --git a/UMFPACK/Include/umfpack_free_numeric.h b/UMFPACK/Include/umfpack_free_numeric.h
index 986a6ab..c86d909 100644
--- a/UMFPACK/Include/umfpack_free_numeric.h
+++ b/UMFPACK/Include/umfpack_free_numeric.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 void umfpack_di_free_numeric
@@ -35,7 +34,7 @@ double int Syntax:
     void *Numeric ;
     umfpack_di_free_numeric (&Numeric) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
@@ -47,7 +46,7 @@ complex int Syntax:
     void *Numeric ;
     umfpack_zi_free_numeric (&Numeric) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
diff --git a/UMFPACK/Include/umfpack_free_symbolic.h b/UMFPACK/Include/umfpack_free_symbolic.h
index ad3aeb6..8cb1eba 100644
--- a/UMFPACK/Include/umfpack_free_symbolic.h
+++ b/UMFPACK/Include/umfpack_free_symbolic.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 void umfpack_di_free_symbolic
@@ -35,7 +34,7 @@ double int Syntax:
     void *Symbolic ;
     umfpack_di_free_symbolic (&Symbolic) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
@@ -47,7 +46,7 @@ complex int Syntax:
     void *Symbolic ;
     umfpack_zi_free_symbolic (&Symbolic) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
diff --git a/UMFPACK/Include/umfpack_get_determinant.h b/UMFPACK/Include/umfpack_get_determinant.h
index 702c1f1..333d5fc 100644
--- a/UMFPACK/Include/umfpack_get_determinant.h
+++ b/UMFPACK/Include/umfpack_get_determinant.h
@@ -3,10 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
-/* UMFPACK_get_determinant contributed by David Bateman, Motorola, Paris. */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_get_determinant
@@ -17,7 +15,7 @@ int umfpack_di_get_determinant
     double User_Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_dl_get_determinant
+SuiteSparse_long umfpack_dl_get_determinant
 (
     double *Mx,
     double *Ex,
@@ -34,7 +32,7 @@ int umfpack_zi_get_determinant
     double User_Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_zl_get_determinant
+SuiteSparse_long umfpack_zl_get_determinant
 (
     double *Mx,
     double *Mz,
@@ -52,11 +50,11 @@ double int Syntax:
     double Mx, Ex, Info [UMFPACK_INFO] ;
     status = umfpack_di_get_determinant (&Mx, &Ex, Numeric, Info) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status ;
+    SuiteSparse_long status ;
     double Mx, Ex, Info [UMFPACK_INFO] ;
     status = umfpack_dl_get_determinant (&Mx, &Ex, Numeric, Info) ;
 
@@ -72,7 +70,7 @@ complex int Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status ;
+    SuiteSparse_long status ;
     double *Mx, *Mz, *Ex, Info [UMFPACK_INFO] ;
     status = umfpack_zl_get_determinant (&Mx, &Mz, &Ex, Numeric, Info) ;
 
diff --git a/UMFPACK/Include/umfpack_get_lunz.h b/UMFPACK/Include/umfpack_get_lunz.h
index 512cffa..58b9ff2 100644
--- a/UMFPACK/Include/umfpack_get_lunz.h
+++ b/UMFPACK/Include/umfpack_get_lunz.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_get_lunz
@@ -18,13 +17,13 @@ int umfpack_di_get_lunz
     void *Numeric
 ) ;
 
-UF_long umfpack_dl_get_lunz
+SuiteSparse_long umfpack_dl_get_lunz
 (
-    UF_long *lnz,
-    UF_long *unz,
-    UF_long *n_row,
-    UF_long *n_col,
-    UF_long *nz_udiag,
+    SuiteSparse_long *lnz,
+    SuiteSparse_long *unz,
+    SuiteSparse_long *n_row,
+    SuiteSparse_long *n_col,
+    SuiteSparse_long *nz_udiag,
     void *Numeric
 ) ;
 
@@ -38,13 +37,13 @@ int umfpack_zi_get_lunz
     void *Numeric
 ) ;
 
-UF_long umfpack_zl_get_lunz
+SuiteSparse_long umfpack_zl_get_lunz
 (
-    UF_long *lnz,
-    UF_long *unz,
-    UF_long *n_row,
-    UF_long *n_col,
-    UF_long *nz_udiag,
+    SuiteSparse_long *lnz,
+    SuiteSparse_long *unz,
+    SuiteSparse_long *n_row,
+    SuiteSparse_long *n_col,
+    SuiteSparse_long *nz_udiag,
     void *Numeric
 ) ;
 
@@ -57,11 +56,11 @@ double int Syntax:
     status = umfpack_di_get_lunz (&lnz, &unz, &n_row, &n_col, &nz_udiag,
 	Numeric) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status, lnz, unz, n_row, n_col, nz_udiag ;
+    SuiteSparse_long status, lnz, unz, n_row, n_col, nz_udiag ;
     status = umfpack_dl_get_lunz (&lnz, &unz, &n_row, &n_col, &nz_udiag,
 	Numeric) ;
 
@@ -73,11 +72,11 @@ complex int Syntax:
     status = umfpack_zi_get_lunz (&lnz, &unz, &n_row, &n_col, &nz_udiag,
 	Numeric) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status, lnz, unz, n_row, n_col, nz_udiag ;
+    SuiteSparse_long status, lnz, unz, n_row, n_col, nz_udiag ;
     status = umfpack_zl_get_lunz (&lnz, &unz, &n_row, &n_col, &nz_udiag,
 	Numeric) ;
 
diff --git a/UMFPACK/Include/umfpack_get_numeric.h b/UMFPACK/Include/umfpack_get_numeric.h
index 45ba0e6..708608d 100644
--- a/UMFPACK/Include/umfpack_get_numeric.h
+++ b/UMFPACK/Include/umfpack_get_numeric.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_get_numeric
@@ -24,18 +23,18 @@ int umfpack_di_get_numeric
     void *Numeric
 ) ;
 
-UF_long umfpack_dl_get_numeric
+SuiteSparse_long umfpack_dl_get_numeric
 (
-    UF_long Lp [ ],
-    UF_long Lj [ ],
+    SuiteSparse_long Lp [ ],
+    SuiteSparse_long Lj [ ],
     double Lx [ ],
-    UF_long Up [ ],
-    UF_long Ui [ ],
+    SuiteSparse_long Up [ ],
+    SuiteSparse_long Ui [ ],
     double Ux [ ],
-    UF_long P [ ],
-    UF_long Q [ ],
+    SuiteSparse_long P [ ],
+    SuiteSparse_long Q [ ],
     double Dx [ ],
-    UF_long *do_recip,
+    SuiteSparse_long *do_recip,
     double Rs [ ],
     void *Numeric
 ) ;
@@ -56,18 +55,18 @@ int umfpack_zi_get_numeric
     void *Numeric
 ) ;
 
-UF_long umfpack_zl_get_numeric
+SuiteSparse_long umfpack_zl_get_numeric
 (
-    UF_long Lp [ ],
-    UF_long Lj [ ],
+    SuiteSparse_long Lp [ ],
+    SuiteSparse_long Lj [ ],
     double Lx [ ], double Lz [ ],
-    UF_long Up [ ],
-    UF_long Ui [ ],
+    SuiteSparse_long Up [ ],
+    SuiteSparse_long Ui [ ],
     double Ux [ ], double Uz [ ],
-    UF_long P [ ],
-    UF_long Q [ ],
+    SuiteSparse_long P [ ],
+    SuiteSparse_long Q [ ],
     double Dx [ ], double Dz [ ],
-    UF_long *do_recip,
+    SuiteSparse_long *do_recip,
     double Rs [ ],
     void *Numeric
 ) ;
@@ -82,11 +81,11 @@ double int Syntax:
     status = umfpack_di_get_numeric (Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx,
 	&do_recip, Rs, Numeric) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
+    SuiteSparse_long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
     double *Lx, *Ux, *Dx, *Rs ;
     status = umfpack_dl_get_numeric (Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx,
 	&do_recip, Rs, Numeric) ;
@@ -100,16 +99,16 @@ complex int Syntax:
     status = umfpack_zi_get_numeric (Lp, Lj, Lx, Lz, Up, Ui, Ux, Uz, P, Q,
 	Dx, Dz, &do_recip, Rs, Numeric) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
+    SuiteSparse_long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
     double *Lx, *Lz, *Ux, *Uz, *Dx, *Dz, *Rs ;
     status = umfpack_zl_get_numeric (Lp, Lj, Lx, Lz, Up, Ui, Ux, Uz, P, Q,
 	Dx, Dz, &do_recip, Rs, Numeric) ;
 
-packed complex int/UF_long Syntax:
+packed complex int/SuiteSparse_long Syntax:
 
     Same as above, except Lz, Uz, and Dz are all NULL.
 
diff --git a/UMFPACK/Include/umfpack_get_symbolic.h b/UMFPACK/Include/umfpack_get_symbolic.h
index 21b7cc2..8ef3f70 100644
--- a/UMFPACK/Include/umfpack_get_symbolic.h
+++ b/UMFPACK/Include/umfpack_get_symbolic.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_get_symbolic
@@ -28,23 +27,23 @@ int umfpack_di_get_symbolic
     void *Symbolic
 ) ;
 
-UF_long umfpack_dl_get_symbolic
+SuiteSparse_long umfpack_dl_get_symbolic
 (
-    UF_long *n_row,
-    UF_long *n_col,
-    UF_long *n1,
-    UF_long *nz,
-    UF_long *nfr,
-    UF_long *nchains,
-    UF_long P [ ],
-    UF_long Q [ ],
-    UF_long Front_npivcol [ ],
-    UF_long Front_parent [ ],
-    UF_long Front_1strow [ ],
-    UF_long Front_leftmostdesc [ ],
-    UF_long Chain_start [ ],
-    UF_long Chain_maxrows [ ],
-    UF_long Chain_maxcols [ ],
+    SuiteSparse_long *n_row,
+    SuiteSparse_long *n_col,
+    SuiteSparse_long *n1,
+    SuiteSparse_long *nz,
+    SuiteSparse_long *nfr,
+    SuiteSparse_long *nchains,
+    SuiteSparse_long P [ ],
+    SuiteSparse_long Q [ ],
+    SuiteSparse_long Front_npivcol [ ],
+    SuiteSparse_long Front_parent [ ],
+    SuiteSparse_long Front_1strow [ ],
+    SuiteSparse_long Front_leftmostdesc [ ],
+    SuiteSparse_long Chain_start [ ],
+    SuiteSparse_long Chain_maxrows [ ],
+    SuiteSparse_long Chain_maxcols [ ],
     void *Symbolic
 ) ;
 
@@ -68,23 +67,23 @@ int umfpack_zi_get_symbolic
     void *Symbolic
 ) ;
 
-UF_long umfpack_zl_get_symbolic
+SuiteSparse_long umfpack_zl_get_symbolic
 (
-    UF_long *n_row,
-    UF_long *n_col,
-    UF_long *n1,
-    UF_long *nz,
-    UF_long *nfr,
-    UF_long *nchains,
-    UF_long P [ ],
-    UF_long Q [ ],
-    UF_long Front_npivcol [ ],
-    UF_long Front_parent [ ],
-    UF_long Front_1strow [ ],
-    UF_long Front_leftmostdesc [ ],
-    UF_long Chain_start [ ],
-    UF_long Chain_maxrows [ ],
-    UF_long Chain_maxcols [ ],
+    SuiteSparse_long *n_row,
+    SuiteSparse_long *n_col,
+    SuiteSparse_long *n1,
+    SuiteSparse_long *nz,
+    SuiteSparse_long *nfr,
+    SuiteSparse_long *nchains,
+    SuiteSparse_long P [ ],
+    SuiteSparse_long Q [ ],
+    SuiteSparse_long Front_npivcol [ ],
+    SuiteSparse_long Front_parent [ ],
+    SuiteSparse_long Front_1strow [ ],
+    SuiteSparse_long Front_leftmostdesc [ ],
+    SuiteSparse_long Chain_start [ ],
+    SuiteSparse_long Chain_maxrows [ ],
+    SuiteSparse_long Chain_maxcols [ ],
     void *Symbolic
 ) ;
 
@@ -102,10 +101,10 @@ double int Syntax:
 	Front_leftmostdesc, Chain_start, Chain_maxrows, Chain_maxcols,
 	Symbolic) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status, n_row, n_col, nz, nfr, nchains, *P, *Q,
+    SuiteSparse_long status, n_row, n_col, nz, nfr, nchains, *P, *Q,
 	*Front_npivcol, *Front_parent, *Front_1strow, *Front_leftmostdesc,
 	*Chain_start, *Chain_maxrows, *Chain_maxcols ;
     void *Symbolic ;
@@ -126,10 +125,10 @@ complex int Syntax:
 	Front_leftmostdesc, Chain_start, Chain_maxrows, Chain_maxcols,
 	Symbolic) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status, n_row, n_col, nz, nfr, nchains, *P, *Q,
+    SuiteSparse_long status, n_row, n_col, nz, nfr, nchains, *P, *Q,
 	*Front_npivcol, *Front_parent, *Front_1strow, *Front_leftmostdesc,
 	*Chain_start, *Chain_maxrows, *Chain_maxcols ;
     void *Symbolic ;
@@ -214,11 +213,9 @@ Arguments:
 	become a pivot row.  If P [k] = i, row i typically will not be the kth
 	pivot row.
 
-	For the symmetric strategy, P = Q.  For the 2-by-2 strategy, P is the
-	row permutation that places large entries on the diagonal of P*A*Q.
-	If no pivoting occurs during numerical factorization, P [k] = i also
-	defines the final permutation of umfpack_*_numeric, for either the
-	symmetric or 2-by-2 strategies.
+        For the symmetric strategy, P = Q.  If no pivoting occurs during
+        numerical factorization, P [k] = i also defines the final permutation
+        of umfpack_*_numeric, for the symmetric strategy.
 
     Int Q [n_col] ;	Output argument.
 
@@ -227,7 +224,7 @@ Arguments:
 	not necessarily the same as the final column permutation Q, computed by
 	umfpack_*_numeric.  The numeric factorization may reorder the pivot
 	columns within each frontal matrix to reduce fill-in.  If the matrix is
-	structurally singular, and if the symmetric or 2-by-2 strategies or
+	structurally singular, and if the symmetric strategy is
 	used (or if Control [UMFPACK_FIXQ] > 0), then this Q will be the same
 	as the final column permutation computed in umfpack_*_numeric.
 
diff --git a/UMFPACK/Include/umfpack_global.h b/UMFPACK/Include/umfpack_global.h
index 51c64dd..ba5db82 100644
--- a/UMFPACK/Include/umfpack_global.h
+++ b/UMFPACK/Include/umfpack_global.h
@@ -3,20 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
-/* prototypes for global variables, and basic operators for complex values  */
-
-#ifndef EXTERN
-#define EXTERN extern
-#endif
-
-EXTERN double (*umfpack_hypot) (double, double) ;
-EXTERN int (*umfpack_divcomplex) (double, double, double, double, double *, double *) ;
-
-double umf_hypot (double x, double y) ;
-int umf_divcomplex (double, double, double, double, double *, double *) ;
-
+    /* moved to SuiteSparse_config */
diff --git a/UMFPACK/Include/umfpack_load_numeric.h b/UMFPACK/Include/umfpack_load_numeric.h
index 0b84c99..1696b9a 100644
--- a/UMFPACK/Include/umfpack_load_numeric.h
+++ b/UMFPACK/Include/umfpack_load_numeric.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_load_numeric
@@ -14,7 +13,7 @@ int umfpack_di_load_numeric
     char *filename
 ) ;
 
-UF_long umfpack_dl_load_numeric
+SuiteSparse_long umfpack_dl_load_numeric
 (
     void **Numeric,
     char *filename
@@ -26,7 +25,7 @@ int umfpack_zi_load_numeric
     char *filename
 ) ;
 
-UF_long umfpack_zl_load_numeric
+SuiteSparse_long umfpack_zl_load_numeric
 (
     void **Numeric,
     char *filename
@@ -41,10 +40,10 @@ double int Syntax:
     void *Numeric ;
     status = umfpack_di_load_numeric (&Numeric, filename) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Numeric ;
     status = umfpack_dl_load_numeric (&Numeric, filename) ;
@@ -57,10 +56,10 @@ complex int Syntax:
     void *Numeric ;
     status = umfpack_zi_load_numeric (&Numeric, filename) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Numeric ;
     status = umfpack_zl_load_numeric (&Numeric, filename) ;
diff --git a/UMFPACK/Include/umfpack_load_symbolic.h b/UMFPACK/Include/umfpack_load_symbolic.h
index 8bd5728..e860029 100644
--- a/UMFPACK/Include/umfpack_load_symbolic.h
+++ b/UMFPACK/Include/umfpack_load_symbolic.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_load_symbolic
@@ -14,7 +13,7 @@ int umfpack_di_load_symbolic
     char *filename
 ) ;
 
-UF_long umfpack_dl_load_symbolic
+SuiteSparse_long umfpack_dl_load_symbolic
 (
     void **Symbolic,
     char *filename
@@ -26,7 +25,7 @@ int umfpack_zi_load_symbolic
     char *filename
 ) ;
 
-UF_long umfpack_zl_load_symbolic
+SuiteSparse_long umfpack_zl_load_symbolic
 (
     void **Symbolic,
     char *filename
@@ -41,10 +40,10 @@ double int Syntax:
     void *Symbolic ;
     status = umfpack_di_load_symbolic (&Symbolic, filename) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Symbolic ;
     status = umfpack_dl_load_symbolic (&Symbolic, filename) ;
@@ -57,10 +56,10 @@ complex int Syntax:
     void *Symbolic ;
     status = umfpack_zi_load_symbolic (&Symbolic, filename) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Symbolic ;
     status = umfpack_zl_load_symbolic (&Symbolic, filename) ;
diff --git a/UMFPACK/Include/umfpack_numeric.h b/UMFPACK/Include/umfpack_numeric.h
index d871ef1..a12447a 100644
--- a/UMFPACK/Include/umfpack_numeric.h
+++ b/UMFPACK/Include/umfpack_numeric.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_numeric
@@ -19,10 +18,10 @@ int umfpack_di_numeric
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_dl_numeric
+SuiteSparse_long umfpack_dl_numeric
 (
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ],
     void *Symbolic,
     void **Numeric,
@@ -41,10 +40,10 @@ int umfpack_zi_numeric
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_zl_numeric
+SuiteSparse_long umfpack_zl_numeric
 (
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ], const double Az [ ],
     void *Symbolic,
     void **Numeric,
@@ -61,11 +60,11 @@ double int Syntax:
     double *Ax, Control [UMFPACK_CONTROL], Info [UMFPACK_INFO] ;
     status = umfpack_di_numeric (Ap, Ai, Ax, Symbolic, &Numeric, Control, Info);
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic, *Numeric ;
-    UF_long *Ap, *Ai, status ;
+    SuiteSparse_long *Ap, *Ai, status ;
     double *Ax, Control [UMFPACK_CONTROL], Info [UMFPACK_INFO] ;
     status = umfpack_dl_numeric (Ap, Ai, Ax, Symbolic, &Numeric, Control, Info);
 
@@ -78,11 +77,11 @@ complex int Syntax:
     status = umfpack_zi_numeric (Ap, Ai, Ax, Az, Symbolic, &Numeric,
 	Control, Info) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic, *Numeric ;
-    UF_long *Ap, *Ai, status ;
+    SuiteSparse_long *Ap, *Ai, status ;
     double *Ax, *Az, Control [UMFPACK_CONTROL], Info [UMFPACK_INFO] ;
     status = umfpack_zl_numeric (Ap, Ai, Ax, Az, Symbolic, &Numeric,
 	Control, Info) ;
@@ -179,8 +178,8 @@ Arguments:
 	    sqrt (a_real^2 + a_imag^2)).
 
 	Control [UMFPACK_SYM_PIVOT_TOLERANCE]:
-	    If diagonal pivoting is attempted (the symmetric or symmetric-2by2
-	    strategies are used) then this parameter is used to control when the
+	    If diagonal pivoting is attempted (the symmetric
+	    strategy is used) then this parameter is used to control when the
 	    diagonal entry is selected in a given pivot column.  The absolute
 	    value of the entry must be >= Control [UMFPACK_SYM_PIVOT_TOLERANCE]
 	    times the largest absolute value in the column.  A value of zero
@@ -525,7 +524,7 @@ Arguments:
 	    grew larger than its current working array.
 
 	Info [UMFPACK_NOFF_DIAG]: number of off-diagonal pivots selected, if the
-	    symmetric or 2-by-2 strategies are used.
+	    symmetric strategy is used.
 
 	Info [UMFPACK_NZDROPPED]: the number of entries smaller in absolute
 	    value than Control [UMFPACK_DROPTOL] that were dropped from L and U.
diff --git a/UMFPACK/Include/umfpack_qsymbolic.h b/UMFPACK/Include/umfpack_qsymbolic.h
index 00f9cd4..f2390a7 100644
--- a/UMFPACK/Include/umfpack_qsymbolic.h
+++ b/UMFPACK/Include/umfpack_qsymbolic.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_qsymbolic
@@ -21,14 +20,14 @@ int umfpack_di_qsymbolic
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_dl_qsymbolic
+SuiteSparse_long umfpack_dl_qsymbolic
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ],
-    const UF_long Qinit [ ],
+    const SuiteSparse_long Qinit [ ],
     void **Symbolic,
     const double Control [UMFPACK_CONTROL],
     double Info [UMFPACK_INFO]
@@ -47,14 +46,99 @@ int umfpack_zi_qsymbolic
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_zl_qsymbolic
+SuiteSparse_long umfpack_zl_qsymbolic
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ], const double Az [ ],
-    const UF_long Qinit [ ],
+    const SuiteSparse_long Qinit [ ],
+    void **Symbolic,
+    const double Control [UMFPACK_CONTROL],
+    double Info [UMFPACK_INFO]
+) ;
+
+int umfpack_di_fsymbolic
+(
+    int n_row,
+    int n_col,
+    const int Ap [ ],
+    const int Ai [ ],
+    const double Ax [ ],
+
+    /* user-provided ordering function */
+    int (*user_ordering)    /* TRUE if OK, FALSE otherwise */
+    (
+        /* inputs, not modified on output */
+        int,            /* nrow */
+        int,            /* ncol */
+        int,            /* sym: if TRUE and nrow==ncol do A+A', else do A'A */
+        int *,          /* Ap, size ncol+1 */
+        int *,          /* Ai, size nz */
+        /* output */
+        int *,          /* size ncol, fill-reducing permutation */
+        /* input/output */
+        void *,         /* user_params (ignored by UMFPACK) */
+        double *        /* user_info[0..2], optional output for symmetric case.
+                           user_info[0]: max column count for L=chol(A+A')
+                           user_info[1]: nnz (L)
+                           user_info[2]: flop count for chol(A+A'), if A real */
+    ),
+    void *user_params,  /* passed to user_ordering function */
+
+    void **Symbolic,
+    const double Control [UMFPACK_CONTROL],
+    double Info [UMFPACK_INFO]
+) ;
+
+SuiteSparse_long umfpack_dl_fsymbolic
+(
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
+    const double Ax [ ],
+
+    int (*user_ordering) (SuiteSparse_long, SuiteSparse_long, SuiteSparse_long,
+        SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *, void *,
+        double *),
+    void *user_params,
+
+    void **Symbolic,
+    const double Control [UMFPACK_CONTROL],
+    double Info [UMFPACK_INFO]
+) ;
+
+int umfpack_zi_fsymbolic
+(
+    int n_row,
+    int n_col,
+    const int Ap [ ],
+    const int Ai [ ],
+    const double Ax [ ], const double Az [ ],
+
+    int (*user_ordering) (int, int, int, int *, int *, int *, void *, double *),
+    void *user_params,
+
+    void **Symbolic,
+    const double Control [UMFPACK_CONTROL],
+    double Info [UMFPACK_INFO]
+) ;
+
+SuiteSparse_long umfpack_zl_fsymbolic
+(
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
+    const double Ax [ ], const double Az [ ],
+
+    int (*user_ordering) (SuiteSparse_long, SuiteSparse_long, SuiteSparse_long,
+        SuiteSparse_long *, SuiteSparse_long *, SuiteSparse_long *, void *,
+        double *),
+    void *user_params,
+
     void **Symbolic,
     const double Control [UMFPACK_CONTROL],
     double Info [UMFPACK_INFO]
@@ -70,11 +154,11 @@ double int Syntax:
     status = umfpack_di_qsymbolic (n_row, n_col, Ap, Ai, Ax, Qinit,
 	&Symbolic, Control, Info) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
-    UF_long n_row, n_col, *Ap, *Ai, *Qinit, status ;
+    SuiteSparse_long n_row, n_col, *Ap, *Ai, *Qinit, status ;
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO], *Ax ;
     status = umfpack_dl_qsymbolic (n_row, n_col, Ap, Ai, Ax, Qinit,
 	&Symbolic, Control, Info) ;
@@ -88,11 +172,11 @@ complex int Syntax:
     status = umfpack_zi_qsymbolic (n_row, n_col, Ap, Ai, Ax, Az, Qinit,
 	&Symbolic, Control, Info) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
-    UF_long n_row, n_col, *Ap, *Ai, *Qinit, status ;
+    SuiteSparse_long n_row, n_col, *Ap, *Ai, *Qinit, status ;
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO], *Ax, *Az ;
     status = umfpack_zl_qsymbolic (n_row, n_col, Ap, Ai, Ax, Az, Qinit,
 	&Symbolic, Control, Info) ;
@@ -112,10 +196,11 @@ Purpose:
     can differ from the final Q found in umfpack_*_numeric.  The unsymmetric
     strategy will perform a column etree postordering done in
     umfpack_*_qsymbolic and sparsity-preserving modifications are made within
-    each frontal matrix during umfpack_*_numeric.  The symmetric and 2-by-2
-    strategies will preserve Qinit, unless the matrix is structurally singular.
+    each frontal matrix during umfpack_*_numeric.  The symmetric
+    strategy will preserve Qinit, unless the matrix is structurally singular.
 
-    See umfpack_*_symbolic for more information.
+    See umfpack_*_symbolic for more information.  Note that Ax and Ax are
+    optional.  The may be NULL.
 
     *** WARNING ***  A poor choice of Qinit can easily cause umfpack_*_numeric
     to use a huge amount of memory and do a lot of work.  The "default" symbolic
diff --git a/UMFPACK/Include/umfpack_report_control.h b/UMFPACK/Include/umfpack_report_control.h
index 361a353..00eae25 100644
--- a/UMFPACK/Include/umfpack_report_control.h
+++ b/UMFPACK/Include/umfpack_report_control.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 void umfpack_di_report_control
@@ -35,7 +34,7 @@ double int Syntax:
     double Control [UMFPACK_CONTROL] ;
     umfpack_di_report_control (Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL] ;
@@ -47,7 +46,7 @@ complex int Syntax:
     double Control [UMFPACK_CONTROL] ;
     umfpack_zi_report_control (Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL] ;
diff --git a/UMFPACK/Include/umfpack_report_info.h b/UMFPACK/Include/umfpack_report_info.h
index 5822721..23a4ddd 100644
--- a/UMFPACK/Include/umfpack_report_info.h
+++ b/UMFPACK/Include/umfpack_report_info.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 void umfpack_di_report_info
@@ -39,7 +38,7 @@ double int Syntax:
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO] ;
     umfpack_di_report_info (Control, Info) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO] ;
@@ -51,7 +50,7 @@ complex int Syntax:
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO] ;
     umfpack_zi_report_info (Control, Info) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO] ;
diff --git a/UMFPACK/Include/umfpack_report_matrix.h b/UMFPACK/Include/umfpack_report_matrix.h
index 0d17e2d..599dbf8 100644
--- a/UMFPACK/Include/umfpack_report_matrix.h
+++ b/UMFPACK/Include/umfpack_report_matrix.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_report_matrix
@@ -19,14 +18,14 @@ int umfpack_di_report_matrix
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_dl_report_matrix
+SuiteSparse_long umfpack_dl_report_matrix
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ],
-    UF_long col_form,
+    SuiteSparse_long col_form,
     const double Control [UMFPACK_CONTROL]
 ) ;
 
@@ -41,14 +40,14 @@ int umfpack_zi_report_matrix
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_zl_report_matrix
+SuiteSparse_long umfpack_zl_report_matrix
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ], const double Az [ ],
-    UF_long col_form,
+    SuiteSparse_long col_form,
     const double Control [UMFPACK_CONTROL]
 ) ;
 
@@ -62,10 +61,10 @@ double int Syntax:
 or:
     status = umfpack_di_report_matrix (n_row, n_col, Ap, Ai, Ax, 0, Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, *Ap, *Ai, status ;
+    SuiteSparse_long n_row, n_col, *Ap, *Ai, status ;
     double *Ax, Control [UMFPACK_CONTROL] ;
     status = umfpack_dl_report_matrix (n_row, n_col, Ap, Ai, Ax, 1, Control) ;
 or:
@@ -82,10 +81,10 @@ or:
     status = umfpack_zi_report_matrix (n_row, n_col, Ap, Ai, Ax, Az, 0,
         Control) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, *Ap, *Ai, status ;
+    SuiteSparse_long n_row, n_col, *Ap, *Ai, status ;
     double *Ax, Control [UMFPACK_CONTROL] ;
     status = umfpack_zl_report_matrix (n_row, n_col, Ap, Ai, Ax, Az, 1,
 	Control) ;
diff --git a/UMFPACK/Include/umfpack_report_numeric.h b/UMFPACK/Include/umfpack_report_numeric.h
index ff4eb11..db3ad30 100644
--- a/UMFPACK/Include/umfpack_report_numeric.h
+++ b/UMFPACK/Include/umfpack_report_numeric.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_report_numeric
@@ -14,7 +13,7 @@ int umfpack_di_report_numeric
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_dl_report_numeric
+SuiteSparse_long umfpack_dl_report_numeric
 (
     void *Numeric,
     const double Control [UMFPACK_CONTROL]
@@ -26,7 +25,7 @@ int umfpack_zi_report_numeric
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_zl_report_numeric
+SuiteSparse_long umfpack_zl_report_numeric
 (
     void *Numeric,
     const double Control [UMFPACK_CONTROL]
@@ -41,12 +40,12 @@ double int Syntax:
     int status ;
     status = umfpack_di_report_numeric (Numeric, Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
     double Control [UMFPACK_CONTROL] ;
-    UF_long status ;
+    SuiteSparse_long status ;
     status = umfpack_dl_report_numeric (Numeric, Control) ;
 
 complex int Syntax:
@@ -57,12 +56,12 @@ complex int Syntax:
     int status ;
     status = umfpack_zi_report_numeric (Numeric, Control) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
     double Control [UMFPACK_CONTROL] ;
-    UF_long status ;
+    SuiteSparse_long status ;
     status = umfpack_zl_report_numeric (Numeric, Control) ;
 
 Purpose:
diff --git a/UMFPACK/Include/umfpack_report_perm.h b/UMFPACK/Include/umfpack_report_perm.h
index 4810e32..e1abfc0 100644
--- a/UMFPACK/Include/umfpack_report_perm.h
+++ b/UMFPACK/Include/umfpack_report_perm.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_report_perm
@@ -15,10 +14,10 @@ int umfpack_di_report_perm
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_dl_report_perm
+SuiteSparse_long umfpack_dl_report_perm
 (
-    UF_long np,
-    const UF_long Perm [ ],
+    SuiteSparse_long np,
+    const SuiteSparse_long Perm [ ],
     const double Control [UMFPACK_CONTROL]
 ) ;
 
@@ -29,10 +28,10 @@ int umfpack_zi_report_perm
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_zl_report_perm
+SuiteSparse_long umfpack_zl_report_perm
 (
-    UF_long np,
-    const UF_long Perm [ ],
+    SuiteSparse_long np,
+    const SuiteSparse_long Perm [ ],
     const double Control [UMFPACK_CONTROL]
 ) ;
 
@@ -44,10 +43,10 @@ double int Syntax:
     double Control [UMFPACK_CONTROL] ;
     status = umfpack_di_report_perm (np, Perm, Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long np, *Perm, status ;
+    SuiteSparse_long np, *Perm, status ;
     double Control [UMFPACK_CONTROL] ;
     status = umfpack_dl_report_perm (np, Perm, Control) ;
 
@@ -58,10 +57,10 @@ complex int Syntax:
     double Control [UMFPACK_CONTROL] ;
     status = umfpack_zi_report_perm (np, Perm, Control) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long np, *Perm, status ;
+    SuiteSparse_long np, *Perm, status ;
     double Control [UMFPACK_CONTROL] ;
     status = umfpack_zl_report_perm (np, Perm, Control) ;
 
diff --git a/UMFPACK/Include/umfpack_report_status.h b/UMFPACK/Include/umfpack_report_status.h
index 24376ae..58d82d4 100644
--- a/UMFPACK/Include/umfpack_report_status.h
+++ b/UMFPACK/Include/umfpack_report_status.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 void umfpack_di_report_status
@@ -17,7 +16,7 @@ void umfpack_di_report_status
 void umfpack_dl_report_status
 (
     const double Control [UMFPACK_CONTROL],
-    UF_long status
+    SuiteSparse_long status
 ) ;
 
 void umfpack_zi_report_status
@@ -29,7 +28,7 @@ void umfpack_zi_report_status
 void umfpack_zl_report_status
 (
     const double Control [UMFPACK_CONTROL],
-    UF_long status
+    SuiteSparse_long status
 ) ;
 
 /*
@@ -40,11 +39,11 @@ double int Syntax:
     int status ;
     umfpack_di_report_status (Control, status) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL] ;
-    UF_long status ;
+    SuiteSparse_long status ;
     umfpack_dl_report_status (Control, status) ;
 
 complex int Syntax:
@@ -54,11 +53,11 @@ complex int Syntax:
     int status ;
     umfpack_zi_report_status (Control, status) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     double Control [UMFPACK_CONTROL] ;
-    UF_long status ;
+    SuiteSparse_long status ;
     umfpack_zl_report_status (Control, status) ;
 
 Purpose:
diff --git a/UMFPACK/Include/umfpack_report_symbolic.h b/UMFPACK/Include/umfpack_report_symbolic.h
index eb61182..6415ff5 100644
--- a/UMFPACK/Include/umfpack_report_symbolic.h
+++ b/UMFPACK/Include/umfpack_report_symbolic.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_report_symbolic
@@ -14,7 +13,7 @@ int umfpack_di_report_symbolic
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_dl_report_symbolic
+SuiteSparse_long umfpack_dl_report_symbolic
 (
     void *Symbolic,
     const double Control [UMFPACK_CONTROL]
@@ -26,7 +25,7 @@ int umfpack_zi_report_symbolic
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_zl_report_symbolic
+SuiteSparse_long umfpack_zl_report_symbolic
 (
     void *Symbolic,
     const double Control [UMFPACK_CONTROL]
@@ -41,12 +40,12 @@ double int Syntax:
     int status ;
     status = umfpack_di_report_symbolic (Symbolic, Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
     double Control [UMFPACK_CONTROL] ;
-    UF_long status ;
+    SuiteSparse_long status ;
     status = umfpack_dl_report_symbolic (Symbolic, Control) ;
 
 complex int Syntax:
@@ -57,12 +56,12 @@ complex int Syntax:
     int status ;
     status = umfpack_zi_report_symbolic (Symbolic, Control) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
     double Control [UMFPACK_CONTROL] ;
-    UF_long status ;
+    SuiteSparse_long status ;
     status = umfpack_zl_report_symbolic (Symbolic, Control) ;
 
 Purpose:
diff --git a/UMFPACK/Include/umfpack_report_triplet.h b/UMFPACK/Include/umfpack_report_triplet.h
index 4e7a605..01b3680 100644
--- a/UMFPACK/Include/umfpack_report_triplet.h
+++ b/UMFPACK/Include/umfpack_report_triplet.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_report_triplet
@@ -19,13 +18,13 @@ int umfpack_di_report_triplet
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_dl_report_triplet
+SuiteSparse_long umfpack_dl_report_triplet
 (
-    UF_long n_row,
-    UF_long n_col,
-    UF_long nz,
-    const UF_long Ti [ ],
-    const UF_long Tj [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    SuiteSparse_long nz,
+    const SuiteSparse_long Ti [ ],
+    const SuiteSparse_long Tj [ ],
     const double Tx [ ],
     const double Control [UMFPACK_CONTROL]
 ) ;
@@ -41,13 +40,13 @@ int umfpack_zi_report_triplet
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_zl_report_triplet
+SuiteSparse_long umfpack_zl_report_triplet
 (
-    UF_long n_row,
-    UF_long n_col,
-    UF_long nz,
-    const UF_long Ti [ ],
-    const UF_long Tj [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    SuiteSparse_long nz,
+    const SuiteSparse_long Ti [ ],
+    const SuiteSparse_long Tj [ ],
     const double Tx [ ], const double Tz [ ],
     const double Control [UMFPACK_CONTROL]
 ) ;
@@ -60,10 +59,10 @@ double int Syntax:
     double *Tx, Control [UMFPACK_CONTROL] ;
     status = umfpack_di_report_triplet (n_row, n_col, nz, Ti, Tj, Tx, Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, nz, *Ti, *Tj, status ;
+    SuiteSparse_long n_row, n_col, nz, *Ti, *Tj, status ;
     double *Tx, Control [UMFPACK_CONTROL] ;
     status = umfpack_dl_report_triplet (n_row, n_col, nz, Ti, Tj, Tx, Control) ;
 
@@ -75,10 +74,10 @@ complex int Syntax:
     status = umfpack_zi_report_triplet (n_row, n_col, nz, Ti, Tj, Tx, Tz,
 	Control) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, nz, *Ti, *Tj, status ;
+    SuiteSparse_long n_row, n_col, nz, *Ti, *Tj, status ;
     double *Tx, *Tz, Control [UMFPACK_CONTROL] ;
     status = umfpack_zl_report_triplet (n_row, n_col, nz, Ti, Tj, Tx, Tz,
 	Control) ;
diff --git a/UMFPACK/Include/umfpack_report_vector.h b/UMFPACK/Include/umfpack_report_vector.h
index 2c4c386..4663107 100644
--- a/UMFPACK/Include/umfpack_report_vector.h
+++ b/UMFPACK/Include/umfpack_report_vector.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_report_vector
@@ -15,9 +14,9 @@ int umfpack_di_report_vector
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_dl_report_vector
+SuiteSparse_long umfpack_dl_report_vector
 (
-    UF_long n,
+    SuiteSparse_long n,
     const double X [ ],
     const double Control [UMFPACK_CONTROL]
 ) ;
@@ -29,9 +28,9 @@ int umfpack_zi_report_vector
     const double Control [UMFPACK_CONTROL]
 ) ;
 
-UF_long umfpack_zl_report_vector
+SuiteSparse_long umfpack_zl_report_vector
 (
-    UF_long n,
+    SuiteSparse_long n,
     const double Xx [ ], const double Xz [ ],
     const double Control [UMFPACK_CONTROL]
 ) ;
@@ -44,10 +43,10 @@ double int Syntax:
     double *X, Control [UMFPACK_CONTROL] ;
     status = umfpack_di_report_vector (n, X, Control) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n, status ;
+    SuiteSparse_long n, status ;
     double *X, Control [UMFPACK_CONTROL] ;
     status = umfpack_dl_report_vector (n, X, Control) ;
 
@@ -58,10 +57,10 @@ complex int Syntax:
     double *Xx, *Xz, Control [UMFPACK_CONTROL] ;
     status = umfpack_zi_report_vector (n, Xx, Xz, Control) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n, status ;
+    SuiteSparse_long n, status ;
     double *Xx, *Xz, Control [UMFPACK_CONTROL] ;
     status = umfpack_zl_report_vector (n, Xx, Xz, Control) ;
 
diff --git a/UMFPACK/Include/umfpack_save_numeric.h b/UMFPACK/Include/umfpack_save_numeric.h
index 708e581..af742db 100644
--- a/UMFPACK/Include/umfpack_save_numeric.h
+++ b/UMFPACK/Include/umfpack_save_numeric.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_save_numeric
@@ -14,7 +13,7 @@ int umfpack_di_save_numeric
     char *filename
 ) ;
 
-UF_long umfpack_dl_save_numeric
+SuiteSparse_long umfpack_dl_save_numeric
 (
     void *Numeric,
     char *filename
@@ -26,7 +25,7 @@ int umfpack_zi_save_numeric
     char *filename
 ) ;
 
-UF_long umfpack_zl_save_numeric
+SuiteSparse_long umfpack_zl_save_numeric
 (
     void *Numeric,
     char *filename
@@ -41,10 +40,10 @@ double int Syntax:
     void *Numeric ;
     status = umfpack_di_save_numeric (Numeric, filename) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Numeric ;
     status = umfpack_dl_save_numeric (Numeric, filename) ;
@@ -57,10 +56,10 @@ complex int Syntax:
     void *Numeric ;
     status = umfpack_zi_save_numeric (Numeric, filename) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Numeric ;
     status = umfpack_zl_save_numeric (Numeric, filename) ;
diff --git a/UMFPACK/Include/umfpack_save_symbolic.h b/UMFPACK/Include/umfpack_save_symbolic.h
index 2dffdd6..79c08a1 100644
--- a/UMFPACK/Include/umfpack_save_symbolic.h
+++ b/UMFPACK/Include/umfpack_save_symbolic.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_save_symbolic
@@ -14,7 +13,7 @@ int umfpack_di_save_symbolic
     char *filename
 ) ;
 
-UF_long umfpack_dl_save_symbolic
+SuiteSparse_long umfpack_dl_save_symbolic
 (
     void *Symbolic,
     char *filename
@@ -26,7 +25,7 @@ int umfpack_zi_save_symbolic
     char *filename
 ) ;
 
-UF_long umfpack_zl_save_symbolic
+SuiteSparse_long umfpack_zl_save_symbolic
 (
     void *Symbolic,
     char *filename
@@ -41,10 +40,10 @@ double int Syntax:
     void *Symbolic ;
     status = umfpack_di_save_symbolic (Symbolic, filename) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Symbolic ;
     status = umfpack_dl_save_symbolic (Symbolic, filename) ;
@@ -57,10 +56,10 @@ complex int Syntax:
     void *Symbolic ;
     status = umfpack_zi_save_symbolic (Symbolic, filename) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long status ;
+    SuiteSparse_long status ;
     char *filename ;
     void *Symbolic ;
     status = umfpack_zl_save_symbolic (Symbolic, filename) ;
diff --git a/UMFPACK/Include/umfpack_scale.h b/UMFPACK/Include/umfpack_scale.h
index 62fc32a..7cc163f 100644
--- a/UMFPACK/Include/umfpack_scale.h
+++ b/UMFPACK/Include/umfpack_scale.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_scale
@@ -15,7 +14,7 @@ int umfpack_di_scale
     void *Numeric
 ) ;
 
-UF_long umfpack_dl_scale
+SuiteSparse_long umfpack_dl_scale
 (
     double X [ ],
     const double B [ ],
@@ -29,7 +28,7 @@ int umfpack_zi_scale
     void *Numeric
 ) ;
 
-UF_long umfpack_zl_scale
+SuiteSparse_long umfpack_zl_scale
 (
     double Xx [ ],	 double Xz [ ],
     const double Bx [ ], const double Bz [ ],
@@ -44,7 +43,7 @@ double int Syntax:
     double *B, *X ;
     status = umfpack_di_scale (X, B, Numeric) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
@@ -58,7 +57,7 @@ complex int Syntax:
     double *Bx, *Bz, *Xx, *Xz ;
     status = umfpack_zi_scale (Xx, Xz, Bx, Bz, Numeric) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
diff --git a/UMFPACK/Include/umfpack_solve.h b/UMFPACK/Include/umfpack_solve.h
index 0932091..fe22b67 100644
--- a/UMFPACK/Include/umfpack_solve.h
+++ b/UMFPACK/Include/umfpack_solve.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_solve
@@ -21,11 +20,11 @@ int umfpack_di_solve
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_dl_solve
+SuiteSparse_long umfpack_dl_solve
 (
-    UF_long sys,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long sys,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ],
     double X [ ],
     const double B [ ],
@@ -47,11 +46,11 @@ int umfpack_zi_solve
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_zl_solve
+SuiteSparse_long umfpack_zl_solve
 (
-    UF_long sys,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long sys,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ], const double Az [ ],
     double Xx [ ],	 double Xz [ ],
     const double Bx [ ], const double Bz [ ],
@@ -69,11 +68,11 @@ double int Syntax:
     double *B, *X, *Ax, Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ;
     status = umfpack_di_solve (sys, Ap, Ai, Ax, X, B, Numeric, Control, Info) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status, *Ap, *Ai, sys ;
+    SuiteSparse_long status, *Ap, *Ai, sys ;
     double *B, *X, *Ax, Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ;
     status = umfpack_dl_solve (sys, Ap, Ai, Ax, X, B, Numeric, Control, Info) ;
 
@@ -87,11 +86,11 @@ complex int Syntax:
     status = umfpack_zi_solve (sys, Ap, Ai, Ax, Az, Xx, Xz, Bx, Bz, Numeric,
 	Control, Info) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status, *Ap, *Ai, sys ;
+    SuiteSparse_long status, *Ap, *Ai, sys ;
     double *Bx, *Bz, *Xx, *Xz, *Ax, *Az, Info [UMFPACK_INFO],
 	Control [UMFPACK_CONTROL] ;
     status = umfpack_zl_solve (sys, Ap, Ai, Ax, Az, Xx, Xz, Bx, Bz, Numeric,
diff --git a/UMFPACK/Include/umfpack_symbolic.h b/UMFPACK/Include/umfpack_symbolic.h
index 1deacc2..3cf8216 100644
--- a/UMFPACK/Include/umfpack_symbolic.h
+++ b/UMFPACK/Include/umfpack_symbolic.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_symbolic
@@ -20,12 +19,12 @@ int umfpack_di_symbolic
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_dl_symbolic
+SuiteSparse_long umfpack_dl_symbolic
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ],
     void **Symbolic,
     const double Control [UMFPACK_CONTROL],
@@ -44,12 +43,12 @@ int umfpack_zi_symbolic
     double Info [UMFPACK_INFO]
 ) ;
 
-UF_long umfpack_zl_symbolic
+SuiteSparse_long umfpack_zl_symbolic
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ], const double Az [ ],
     void **Symbolic,
     const double Control [UMFPACK_CONTROL],
@@ -66,11 +65,11 @@ double int Syntax:
     status = umfpack_di_symbolic (n_row, n_col, Ap, Ai, Ax,
 	&Symbolic, Control, Info) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
-    UF_long n_row, n_col, *Ap, *Ai, status ;
+    SuiteSparse_long n_row, n_col, *Ap, *Ai, status ;
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO], *Ax ;
     status = umfpack_dl_symbolic (n_row, n_col, Ap, Ai, Ax,
 	&Symbolic, Control, Info) ;
@@ -84,11 +83,11 @@ complex int Syntax:
     status = umfpack_zi_symbolic (n_row, n_col, Ap, Ai, Ax, Az,
 	&Symbolic, Control, Info) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Symbolic ;
-    UF_long n_row, n_col, *Ap, *Ai, status ;
+    SuiteSparse_long n_row, n_col, *Ap, *Ai, status ;
     double Control [UMFPACK_CONTROL], Info [UMFPACK_INFO], *Ax, *Az ;
     status = umfpack_zl_symbolic (n_row, n_col, Ap, Ai, Ax, Az,
 	&Symbolic, Control, Info) ;
@@ -101,10 +100,11 @@ Purpose:
 
     Given nonzero pattern of a sparse matrix A in column-oriented form,
     umfpack_*_symbolic performs a column pre-ordering to reduce fill-in
-    (using COLAMD or AMD) and a symbolic factorization.  This is required
+    (using COLAMD, AMD or METIS) and a symbolic factorization.  This is required
     before the matrix can be numerically factorized with umfpack_*_numeric.
-    If you wish to bypass the COLAMD or AMD pre-ordering and provide your own
-    ordering, use umfpack_*_qsymbolic instead.
+    If you wish to bypass the COLAMD/AMD/METIS pre-ordering and provide your own
+    ordering, use umfpack_*_qsymbolic instead.  If you wish to pass in a
+    pointer to a user-provided ordering function, use umfpack_*_fsymbolic.
 
     Since umfpack_*_symbolic and umfpack_*_qsymbolic are very similar, options
     for both routines are discussed below.
@@ -147,20 +147,18 @@ Arguments:
 	and sum up the duplicate entries.  See umfpack_*_report_matrix for how
 	to print the matrix A.
 
-    double Ax [nz] ;	Optional input argument, not modified.
+    double Ax [nz] ;	Optional input argument, not modified.  May be NULL.
 			Size 2*nz for packed complex case.
 
 	The numerical values of the sparse matrix A.  The nonzero pattern (row
 	indices) for column j is stored in Ai [(Ap [j]) ... (Ap [j+1]-1)], and
 	the corresponding numerical values are stored in
-	Ax [(Ap [j]) ... (Ap [j+1]-1)].  Used only by the 2-by-2 strategy to
-	determine whether entries are "large" or "small".  You do not have to
-	pass the same numerical values to umfpack_*_numeric.  If Ax is not
-	present (a (double *) NULL pointer), then any entry in A is assumed to
-	be "large".
+	Ax [(Ap [j]) ... (Ap [j+1]-1)].  Used only for gathering statistics
+        about how many nonzeros are placed on the diagonal by the fill-reducing
+        ordering.
 
     double Az [nz] ;	Optional input argument, not modified, for complex
-			versions.
+			versions.  May be NULL.
 
 	For the complex versions, this holds the imaginary part of A.  The
 	imaginary part of column j is held in Az [(Ap [j]) ... (Ap [j+1]-1)].
@@ -169,7 +167,7 @@ Arguments:
 	and imaginary parts are contained in Ax[0..2*nz-1], with Ax[2*k]
 	and Ax[2*k+1] being the real and imaginary part of the kth entry.
 
-	Used by the 2-by-2 strategy only.  See the description of Ax, above.
+	Used for statistics only.  See the description of Ax, above.
 
     void **Symbolic ;	Output argument.
 
@@ -226,10 +224,17 @@ Arguments:
 		[UMFPACK_PIVOT_TOLERANCE] (default 0.1) times the largest entry
 		in its column.
 
-	    UMFPACK_STRATEGY_2BY2:  a row permutation P2 is found that places
-		large entries on the diagonal.  The matrix P2*A is then
-		factorized using the symmetric strategy, described above.
-		Refer to the User Guide for more information.
+	Control [UMFPACK_ORDERING]:  The ordering method to use:
+            UMFPACK_ORDERING_CHOLMOD    try AMD/COLAMD, then METIS if needed
+            UMFPACK_ORDERING_AMD        just AMD or COLAMD
+            UMFPACK_ORDERING_GIVEN      just Qinit (umfpack_*_qsymbolic only)
+            UMFPACK_ORDERING_NONE       no fill-reducing ordering
+            UMFPACK_ORDERING_METIS      just METIS(A+A') or METIS(A'A)
+            UMFPACK_ORDERING_BEST       try AMD/COLAMD, METIS, and NESDIS
+            UMFPACK_ORDERING_USER       just user function (*_fsymbolic only)
+
+        Control [UMFPACK_SINGLETONS]: If false (0), then singletons are
+            not removed prior to factorization.  Default: true (1).
 
 	Control [UMFPACK_DENSE_COL]:
 	    If COLAMD is used, columns with more than
@@ -255,14 +260,6 @@ Arguments:
 	    Assuming the block size is large enough (8 or so), this parameter
 	    has a modest effect on performance.
 
-	Control [UMFPACK_2BY2_TOLERANCE]:  a diagonal entry S (k,k) is
-	    considered "small" if it is < tol * max (abs (S (:,k))), where S a
-	    submatrix of the scaled input matrix, with pivots of zero Markowitz
-	    cost removed.
-
-	Control [UMFPACK_SCALE]:  See umfpack_numeric.h for a description.
-	    Only affects the 2-by-2 strategy.  Default: UMFPACK_SCALE_SUM.
-
 	Control [UMFPACK_FIXQ]:  If > 0, then the pre-ordering Q is not modified
 	    during numeric factorization.  If < 0, then Q may be modified.  If
 	    zero, then this is controlled automatically (the unsymmetric
@@ -314,7 +311,7 @@ Arguments:
 	    UMFPACK_ERROR_internal_error
 
 		Something very serious went wrong.  This is a bug.
-		Please contact the author (davis at cise.ufl.edu).
+		Please contact the author (DrTimothyAldenDavis at gmail.com).
 
 	Info [UMFPACK_NROW]:  the value of the input argument n_row.
 
@@ -328,7 +325,7 @@ Arguments:
 
 	Info [UMFPACK_SIZE_OF_INT]:  the number of bytes in an int.
 
-	Info [UMFPACK_SIZE_OF_LONG]:  the number of bytes in a UF_long.
+	Info [UMFPACK_SIZE_OF_LONG]:  the number of bytes in a SuiteSparse_long.
 
 	Info [UMFPACK_SIZE_OF_POINTER]:  the number of bytes in a void *
 	    pointer.
@@ -396,7 +393,7 @@ Arguments:
 	    umfpack_*_symbolic (Info [UMFPACK_SYMBOLIC_PEAK_MEMORY]).  The
 	    count includes the size of both the Symbolic and Numeric objects
 	    themselves.  It can be a very loose upper bound, particularly when
-	    the symmetric or 2-by-2 strategies are used.
+	    the symmetric strategy is used.
 
 	Info [UMFPACK_FLOPS_ESTIMATE]:  an estimate of the total floating-point
 	    operations required to factorize the matrix.  This is a "true"
@@ -442,12 +439,14 @@ Arguments:
 	Info [UMFPACK_SYMBOLIC_WALLTIME]:  The wallclock time taken, in seconds.
 
 	Info [UMFPACK_STRATEGY_USED]: The ordering strategy used:
-	    UMFPACK_STRATEGY_SYMMETRIC, UMFPACK_STRATEGY_UNSYMMETRIC, or
-	    UMFPACK_STRATEGY_2BY2.
+	    UMFPACK_STRATEGY_SYMMETRIC or UMFPACK_STRATEGY_UNSYMMETRIC
 
 	Info [UMFPACK_ORDERING_USED]:  The ordering method used:
-	    UMFPACK_ORDERING_COLAMD or UMFPACK_ORDERING_AMD.  It can be
-	    UMFPACK_ORDERING_GIVEN for umfpack_*_qsymbolic.
+            UMFPACK_ORDERING_AMD
+            UMFPACK_ORDERING_GIVEN
+            UMFPACK_ORDERING_NONE
+            UMFPACK_ORDERING_METIS
+            UMFPACK_ORDERING_USER
 
 	Info [UMFPACK_QFIXED]: 1 if the column pre-ordering will be refined
 	    during numerical factorization, 0 if not.
@@ -499,7 +498,7 @@ Arguments:
 	    pattern of the matrix is symmetric, this is normally a lower bound
 	    on the floating-point operation count in the actual numerical
 	    factorization, for matrices that fit the criteria for the symmetric
-	    or 2-by-2 strategies
+	    strategy.
 
 	Info [UMFPACK_SYMMETRIC_NDENSE]: The number of "dense" rows/columns of
 	    S+S' that were ignored during the AMD ordering.  These are placed
@@ -511,25 +510,6 @@ Arguments:
 	    factorization.  Excludes the part of the LU factorization for
 	    pivots with zero Markowitz cost.
 
-	------------------------------------------------------------------------
-	The following statistics are computed only if the 2-by-2 strategy is
-	used or attempted:
-	------------------------------------------------------------------------
-
-	Info [UMFPACK_2BY2_NWEAK]: the number of small diagonal entries in S.
-
-	Info [UMFPACK_2BY2_UNMATCHED]: the number of small diagonal entries
-	    in P2*S.
-
-	Info [UMFPACK_2BY2_PATTERN_SYMMETRY]: the symmetry of P2*S.
-
-	Info [UMFPACK_2BY2_NZ_PA_PLUS_AT]:  the number of off-diagonal entries
-	    in (P2*S)+(P2*S)'.
-
-	Info [UMFPACK_2BY2_NZDIAG]:  the number of nonzero entries on the
-	    diagonal of P2*S.
-
-
 	At the start of umfpack_*_symbolic, all of Info is set of -1, and then
 	after that only the above listed Info [...] entries are accessed.
 	Future versions might modify different parts of Info.
diff --git a/UMFPACK/Include/umfpack_tictoc.h b/UMFPACK/Include/umfpack_tictoc.h
index da10426..b79f7c2 100644
--- a/UMFPACK/Include/umfpack_tictoc.h
+++ b/UMFPACK/Include/umfpack_tictoc.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 void umfpack_tic (double stats [2]) ;
@@ -24,10 +23,8 @@ Syntax (for all versions: di, dl, zi, and zl):
 
 Purpose:
 
-    umfpack_tic returns the CPU time and wall clock time used by the process.
-    The CPU time includes both "user" and "system" time (the latter is time
-    spent by the system on behalf of the process, and is thus charged to the
-    process).  umfpack_toc returns the CPU time and wall clock time since the
+    umfpack_tic returns the wall clock time.
+    umfpack_toc returns the wall clock time since the
     last call to umfpack_tic with the same stats array.
 
     Typical usage:
@@ -36,25 +33,13 @@ Purpose:
 	... do some work ...
 	umfpack_toc (stats) ;
 
-    then stats [1] contains the time in seconds used by the code between
-    umfpack_tic and umfpack_toc, and stats [0] contains the wall clock time
-    elapsed between the umfpack_tic and umfpack_toc.  These two routines act
-    just like tic and toc in MATLAB, except that the both process time and
-    wall clock time are returned.
-
-    This routine normally uses the sysconf and times routines in the POSIX
-    standard.  If -DNPOSIX is defined at compile time, then the ANSI C clock
-    routine is used instead, and only the CPU time is returned (stats [0]
-    is set to zero).
-
-    umfpack_tic and umfpack_toc are the routines used internally in UMFPACK
-    to time the symbolic analysis, numerical factorization, and the forward/
-    backward solve.
+    then stats [0] contains the elapsed wall clock time in seconds between
+    umfpack_tic and umfpack_toc.
 
 Arguments:
 
     double stats [2]:
 
 	stats [0]:  wall clock time, in seconds
-	stats [1]:  CPU time, in seconds
+	stats [1]:  (same; was CPU time in prior versions)
 */
diff --git a/UMFPACK/Include/umfpack_timer.h b/UMFPACK/Include/umfpack_timer.h
index 413a177..44e16df 100644
--- a/UMFPACK/Include/umfpack_timer.h
+++ b/UMFPACK/Include/umfpack_timer.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 double umfpack_timer ( void ) ;
@@ -19,19 +18,7 @@ Syntax (for all versions: di, dl, zi, and zl):
 
 Purpose:
 
-    Returns the CPU time used by the process.  Includes both "user" and "system"
-    time (the latter is time spent by the system on behalf of the process, and
-    is thus charged to the process).  It does not return the wall clock time.
-    See umfpack_tic and umfpack_toc (the file umfpack_tictoc.h) for the timer
-    used internally by UMFPACK.
-
-    This routine uses the Unix getrusage routine, if available.  It is less
-    subject to overflow than the ANSI C clock routine.  If getrusage is not
-    available, the portable ANSI C clock routine is used instead.
-    Unfortunately, clock ( ) overflows if the CPU time exceeds 2147 seconds
-    (about 36 minutes) when sizeof (clock_t) is 4 bytes.  If you have getrusage,
-    be sure to compile UMFPACK with the -DGETRUSAGE flag set; see umf_config.h
-    and the User Guide for details.  Even the getrusage routine can overlow.
+    Returns the current wall clock time on POSIX C 1993 systems.
 
 Arguments:
 
diff --git a/UMFPACK/Include/umfpack_transpose.h b/UMFPACK/Include/umfpack_transpose.h
index b12bb0b..3cdfd2e 100644
--- a/UMFPACK/Include/umfpack_transpose.h
+++ b/UMFPACK/Include/umfpack_transpose.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_transpose
@@ -22,17 +21,17 @@ int umfpack_di_transpose
     double Rx [ ]
 ) ;
 
-UF_long umfpack_dl_transpose
+SuiteSparse_long umfpack_dl_transpose
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ],
-    const UF_long P [ ],
-    const UF_long Q [ ],
-    UF_long Rp [ ],
-    UF_long Ri [ ],
+    const SuiteSparse_long P [ ],
+    const SuiteSparse_long Q [ ],
+    SuiteSparse_long Rp [ ],
+    SuiteSparse_long Ri [ ],
     double Rx [ ]
 ) ;
 
@@ -51,19 +50,19 @@ int umfpack_zi_transpose
     int do_conjugate
 ) ;
 
-UF_long umfpack_zl_transpose
+SuiteSparse_long umfpack_zl_transpose
 (
-    UF_long n_row,
-    UF_long n_col,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ], const double Az [ ],
-    const UF_long P [ ],
-    const UF_long Q [ ],
-    UF_long Rp [ ],
-    UF_long Ri [ ],
+    const SuiteSparse_long P [ ],
+    const SuiteSparse_long Q [ ],
+    SuiteSparse_long Rp [ ],
+    SuiteSparse_long Ri [ ],
     double Rx [ ], double Rz [ ],
-    UF_long do_conjugate
+    SuiteSparse_long do_conjugate
 ) ;
 
 /*
@@ -74,10 +73,10 @@ double int Syntax:
     double *Ax, *Rx ;
     status = umfpack_di_transpose (n_row, n_col, Ap, Ai, Ax, P, Q, Rp, Ri, Rx) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, status, *Ap, *Ai, *P, *Q, *Rp, *Ri ;
+    SuiteSparse_long n_row, n_col, status, *Ap, *Ai, *P, *Q, *Rp, *Ri ;
     double *Ax, *Rx ;
     status = umfpack_dl_transpose (n_row, n_col, Ap, Ai, Ax, P, Q, Rp, Ri, Rx) ;
 
@@ -89,10 +88,10 @@ complex int Syntax:
     status = umfpack_zi_transpose (n_row, n_col, Ap, Ai, Ax, Az, P, Q,
 	Rp, Ri, Rx, Rz, do_conjugate) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, status, *Ap, *Ai, *P, *Q, *Rp, *Ri, do_conjugate ;
+    SuiteSparse_long n_row, n_col, status, *Ap, *Ai, *P, *Q, *Rp, *Ri, do_conjugate ;
     double *Ax, *Az, *Rx, *Rz ;
     status = umfpack_zl_transpose (n_row, n_col, Ap, Ai, Ax, Az, P, Q,
 	Rp, Ri, Rx, Rz, do_conjugate) ;
diff --git a/UMFPACK/Include/umfpack_triplet_to_col.h b/UMFPACK/Include/umfpack_triplet_to_col.h
index cb45278..308dc34 100644
--- a/UMFPACK/Include/umfpack_triplet_to_col.h
+++ b/UMFPACK/Include/umfpack_triplet_to_col.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_triplet_to_col
@@ -22,18 +21,18 @@ int umfpack_di_triplet_to_col
     int Map [ ]
 ) ;
 
-UF_long umfpack_dl_triplet_to_col
+SuiteSparse_long umfpack_dl_triplet_to_col
 (
-    UF_long n_row,
-    UF_long n_col,
-    UF_long nz,
-    const UF_long Ti [ ],
-    const UF_long Tj [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    SuiteSparse_long nz,
+    const SuiteSparse_long Ti [ ],
+    const SuiteSparse_long Tj [ ],
     const double Tx [ ],
-    UF_long Ap [ ],
-    UF_long Ai [ ],
+    SuiteSparse_long Ap [ ],
+    SuiteSparse_long Ai [ ],
     double Ax [ ],
-    UF_long Map [ ]
+    SuiteSparse_long Map [ ]
 ) ;
 
 int umfpack_zi_triplet_to_col
@@ -50,18 +49,18 @@ int umfpack_zi_triplet_to_col
     int Map [ ]
 ) ;
 
-UF_long umfpack_zl_triplet_to_col
+SuiteSparse_long umfpack_zl_triplet_to_col
 (
-    UF_long n_row,
-    UF_long n_col,
-    UF_long nz,
-    const UF_long Ti [ ],
-    const UF_long Tj [ ],
+    SuiteSparse_long n_row,
+    SuiteSparse_long n_col,
+    SuiteSparse_long nz,
+    const SuiteSparse_long Ti [ ],
+    const SuiteSparse_long Tj [ ],
     const double Tx [ ], const double Tz [ ],
-    UF_long Ap [ ],
-    UF_long Ai [ ],
+    SuiteSparse_long Ap [ ],
+    SuiteSparse_long Ai [ ],
     double Ax [ ], double Az [ ],
-    UF_long Map [ ]
+    SuiteSparse_long Map [ ]
 ) ;
 
 /*
@@ -73,10 +72,10 @@ double int Syntax:
     status = umfpack_di_triplet_to_col (n_row, n_col, nz, Ti, Tj, Tx,
 	Ap, Ai, Ax, Map) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, nz, *Ti, *Tj, *Ap, *Ai, status, *Map ;
+    SuiteSparse_long n_row, n_col, nz, *Ti, *Tj, *Ap, *Ai, status, *Map ;
     double *Tx, *Ax ;
     status = umfpack_dl_triplet_to_col (n_row, n_col, nz, Ti, Tj, Tx,
 	Ap, Ai, Ax, Map) ;
@@ -89,10 +88,10 @@ complex int Syntax:
     status = umfpack_zi_triplet_to_col (n_row, n_col, nz, Ti, Tj, Tx, Tz,
 	Ap, Ai, Ax, Az, Map) ;
 
-UF_long Syntax:
+SuiteSparse_long Syntax:
 
     #include "umfpack.h"
-    UF_long n_row, n_col, nz, *Ti, *Tj, *Ap, *Ai, status, *Map ;
+    SuiteSparse_long n_row, n_col, nz, *Ti, *Tj, *Ap, *Ai, status, *Map ;
     double *Tx, *Tz, *Ax, *Az ;
     status = umfpack_zl_triplet_to_col (n_row, n_col, nz, Ti, Tj, Tx, Tz,
 	Ap, Ai, Ax, Az, Map) ;
diff --git a/UMFPACK/Include/umfpack_wsolve.h b/UMFPACK/Include/umfpack_wsolve.h
index 38d15ba..cc64101 100644
--- a/UMFPACK/Include/umfpack_wsolve.h
+++ b/UMFPACK/Include/umfpack_wsolve.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 int umfpack_di_wsolve
@@ -23,18 +22,18 @@ int umfpack_di_wsolve
     double W [ ]
 ) ;
 
-UF_long umfpack_dl_wsolve
+SuiteSparse_long umfpack_dl_wsolve
 (
-    UF_long sys,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long sys,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ],
     double X [ ],
     const double B [ ],
     void *Numeric,
     const double Control [UMFPACK_CONTROL],
     double Info [UMFPACK_INFO],
-    UF_long Wi [ ],
+    SuiteSparse_long Wi [ ],
     double W [ ]
 ) ;
 
@@ -53,18 +52,18 @@ int umfpack_zi_wsolve
     double W [ ]
 ) ;
 
-UF_long umfpack_zl_wsolve
+SuiteSparse_long umfpack_zl_wsolve
 (
-    UF_long sys,
-    const UF_long Ap [ ],
-    const UF_long Ai [ ],
+    SuiteSparse_long sys,
+    const SuiteSparse_long Ap [ ],
+    const SuiteSparse_long Ai [ ],
     const double Ax [ ], const double Az [ ],
     double Xx [ ],	 double Xz [ ],
     const double Bx [ ], const double Bz [ ],
     void *Numeric,
     const double Control [UMFPACK_CONTROL],
     double Info [UMFPACK_INFO],
-    UF_long Wi [ ],
+    SuiteSparse_long Wi [ ],
     double W [ ]
 ) ;
 
@@ -78,11 +77,11 @@ double int Syntax:
     status = umfpack_di_wsolve (sys, Ap, Ai, Ax, X, B, Numeric,
 	Control, Info, Wi, W) ;
 
-double UF_long Syntax:
+double SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status, *Ap, *Ai, *Wi, sys ;
+    SuiteSparse_long status, *Ap, *Ai, *Wi, sys ;
     double *B, *X, *Ax, *W, Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ;
     status = umfpack_dl_wsolve (sys, Ap, Ai, Ax, X, B, Numeric,
 	Control, Info, Wi, W) ;
@@ -97,11 +96,11 @@ complex int Syntax:
     status = umfpack_zi_wsolve (sys, Ap, Ai, Ax, Az, Xx, Xz, Bx, Bz, Numeric,
 	Control, Info, Wi, W) ;
 
-complex UF_long Syntax:
+complex SuiteSparse_long Syntax:
 
     #include "umfpack.h"
     void *Numeric ;
-    UF_long status, *Ap, *Ai, *Wi, sys ;
+    SuiteSparse_long status, *Ap, *Ai, *Wi, sys ;
     double *Bx, *Bz, *Xx, *Xz, *Ax, *Az, *W,
 	Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ;
     status = umfpack_zl_wsolve (sys, Ap, Ai, Ax, Az, Xx, Xz, Bx, Bz, Numeric,
diff --git a/UMFPACK/Lib/GNUmakefile b/UMFPACK/Lib/GNUmakefile
index 559ed99..c5d7235 100644
--- a/UMFPACK/Lib/GNUmakefile
+++ b/UMFPACK/Lib/GNUmakefile
@@ -2,12 +2,19 @@
 # UMFPACK Makefile for compiling on Unix systems (for GNU Make)
 #-------------------------------------------------------------------------------
 
-default: ../Lib/libumfpack.a
+default: libumfpack.a
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(UMFPACK_CONFIG) \
-    -I../Include -I../Source -I../../AMD/Include -I../../UFconfig
+# UMFPACK can use CHOLMOD by default as an ordering option
+ifneq (,$(findstring -DNCHOLMOD, $(UMFPACK_CONFIG)))
+    I = -I../Include -I../Source -I../../AMD/Include -I../../SuiteSparse_config
+else
+    I = -I../Include -I../Source -I../../AMD/Include \
+        -I../../SuiteSparse_config -I../../CHOLMOD/Include
+endif
+
+C = $(CC) $(CF) $(UMFPACK_CONFIG) $(I)
 
 #-------------------------------------------------------------------------------
 # source files
@@ -23,24 +30,26 @@ UMFCH = umf_assemble umf_blas3_update umf_build_tuples umf_create_element \
 	umf_report_vector umf_row_search umf_scale_column \
 	umf_set_stats umf_solve umf_symbolic_usage umf_transpose \
 	umf_tuple_lengths umf_usolve umf_utsolve umf_valid_numeric \
-	umf_valid_symbolic umf_grow_front umf_start_front umf_2by2 \
+	umf_valid_symbolic umf_grow_front umf_start_front \
 	umf_store_lu umf_scale
 
-# non-user-callable umf_*.[ch] files, int/UF_long versions only (no real/complex):
+# non-user-callable umf_*.[ch] files, int/SuiteSparse_long versions only
+# (no real/complex):
 UMFINT = umf_analyze umf_apply_order umf_colamd umf_free umf_fsize \
 	umf_is_permutation umf_malloc umf_realloc umf_report_perm \
-	umf_singletons
+	umf_singletons umf_cholmod
 
 # non-user-callable, created from umf_ltsolve.c, umf_utsolve.c,
-# umf_triplet.c, and umf_assemble.c , with int/UF_long and real/complex versions:
+# umf_triplet.c, and umf_assemble.c , with int/SuiteSparse_long
+# and real/complex versions:
 UMF_CREATED = umf_lhsolve umf_uhsolve umf_triplet_map_nox \
 	umf_triplet_nomap_x umf_triplet_nomap_nox umf_triplet_map_x \
 	umf_assemble_fixq umf_store_lu_drop
 
-# non-user-callable, int/UF_long and real/complex versions:
+# non-user-callable, int/SuiteSparse_long and real/complex versions:
 UMF = $(UMF_CREATED) $(UMFCH)
 
-# user-callable umfpack_*.[ch] files (int/UF_long and real/complex):
+# user-callable umfpack_*.[ch] files (int/SuiteSparse_long and real/complex):
 UMFPACK = umfpack_col_to_triplet umfpack_defaults umfpack_free_numeric \
 	umfpack_free_symbolic umfpack_get_numeric umfpack_get_lunz \
 	umfpack_get_symbolic umfpack_get_determinant umfpack_numeric \
@@ -53,19 +62,20 @@ UMFPACK = umfpack_col_to_triplet umfpack_defaults umfpack_free_numeric \
 	umfpack_load_symbolic umfpack_save_symbolic
 
 # user-callable, created from umfpack_solve.c (umfpack_wsolve.h exists, though):
-# with int/UF_long and real/complex versions:
+# with int/SuiteSparse_long and real/complex versions:
 UMFPACKW = umfpack_wsolve
 
 USER = $(UMFPACKW) $(UMFPACK)
 
-# user-callable, only one version for int/UF_long, real/complex, *.[ch] files:
-GENERIC = umfpack_timer umfpack_tictoc umfpack_global
+# user-callable, only one version for int/SuiteSparse_long,
+# real/complex, *.[ch] files:
+GENERIC = umfpack_timer umfpack_tictoc
 
 #-------------------------------------------------------------------------------
 # include files:
 #-------------------------------------------------------------------------------
 
-INC = ../Include/umfpack.h ../../UFconfig/UFconfig.h \
+INC = ../Include/umfpack.h ../../SuiteSparse_config/SuiteSparse_config.h \
 	../Source/umf_config.h ../Source/umf_version.h \
 	../Source/umf_internal.h ../Source/umf_triplet.h \
 	$(addprefix ../Source/,  $(addsuffix .h,$(UMFCH))) \
@@ -87,7 +97,7 @@ LL = $(addsuffix .o, $(subst umf_,umf_l_,$(UMFINT)))
 GN = $(addsuffix .o, $(subst umfpack_,umfpack_gn_,$(GENERIC)))
 
 #-------------------------------------------------------------------------------
-# compile each int and UF_long routine (with no real/complex version)
+# compile each int and SuiteSparse_long routine (with no real/complex version)
 #-------------------------------------------------------------------------------
 
 umf_i_%.o: ../Source/umf_%.c $(INC)
@@ -240,19 +250,22 @@ umfpack_gn_%.o: ../Source/umfpack_%.c $(INC)
 	$(C) -c $< -o $@
 
 #-------------------------------------------------------------------------------
-# Create the ../Lib/libumfpack.a library
+# Create the libumfpack.a library
 #-------------------------------------------------------------------------------
 
-../Lib/libumfpack.a: $(II) $(LL) $(GN) $(DI) $(DL) $(ZI) $(ZL)
-	$(AR) ../Lib/libumfpack.a $^
-	- $(RANLIB) ../Lib/libumfpack.a
+libumfpack.a: $(II) $(LL) $(GN) $(DI) $(DL) $(ZI) $(ZL)
+	$(ARCHIVE)  libumfpack.a $^
+	- $(RANLIB) libumfpack.a
+
+so: $(II) $(LL) $(GN) $(DI) $(DL) $(ZI) $(ZL)
+	gcc -shared -Wl,-soname,libumfpack.so -o libumfpack.so $^
 
 #-------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
 #-------------------------------------------------------------------------------
 
 purge: clean
-	- $(RM) ../Lib/libumfpack.a
+	- $(RM) libumfpack.a
 
 clean:
 	- $(RM) $(CLEAN)
diff --git a/UMFPACK/Lib/Makefile b/UMFPACK/Lib/Makefile
index 8444719..f9cb0ea 100644
--- a/UMFPACK/Lib/Makefile
+++ b/UMFPACK/Lib/Makefile
@@ -8,16 +8,17 @@
 
 default: everything
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(UMFPACK_CONFIG) -I../Include -I../../AMD/Include \
-    -I../Source
+C = $(CC) $(CF) $(UMFPACK_CONFIG) \
+    -I../Include -I../Source -I../../AMD/Include -I../../SuiteSparse_config \
+    -I../../CHOLMOD/Include
 
 everything:
-	$(C) -c ../Source/umfpack_global.c -o umfpack_gn_global.o
 	$(C) -DDINT -c ../Source/umf_analyze.c -o umf_i_analyze.o
 	$(C) -DDINT -c ../Source/umf_apply_order.c -o umf_i_apply_order.o
 	$(C) -DDINT -c ../Source/umf_colamd.c -o umf_i_colamd.o
+	$(C) -DDINT -c ../Source/umf_cholmod.c -o umf_i_cholmod.o
 	$(C) -DDINT -c ../Source/umf_free.c -o umf_i_free.o
 	$(C) -DDINT -c ../Source/umf_fsize.c -o umf_i_fsize.o
 	$(C) -DDINT -c ../Source/umf_is_permutation.c -o umf_i_is_permutation.o
@@ -28,6 +29,7 @@ everything:
 	$(C) -DDLONG -c ../Source/umf_analyze.c -o umf_l_analyze.o
 	$(C) -DDLONG -c ../Source/umf_apply_order.c -o umf_l_apply_order.o
 	$(C) -DDLONG -c ../Source/umf_colamd.c -o umf_l_colamd.o
+	$(C) -DDLONG -c ../Source/umf_cholmod.c -o umf_l_cholmod.o
 	$(C) -DDLONG -c ../Source/umf_free.c -o umf_l_free.o
 	$(C) -DDLONG -c ../Source/umf_fsize.c -o umf_l_fsize.o
 	$(C) -DDLONG -c ../Source/umf_is_permutation.c -o umf_l_is_permutation.o
@@ -79,7 +81,6 @@ everything:
 	$(C) -DDINT -c ../Source/umf_valid_symbolic.c -o umf_di_valid_symbolic.o
 	$(C) -DDINT -c ../Source/umf_grow_front.c -o umf_di_grow_front.o
 	$(C) -DDINT -c ../Source/umf_start_front.c -o umf_di_start_front.o
-	$(C) -DDINT -c ../Source/umf_2by2.c -o umf_di_2by2.o
 	$(C) -DDINT -c ../Source/umf_store_lu.c -o umf_di_store_lu.o
 	$(C) -DDINT -c ../Source/umf_scale.c -o umf_di_scale.o
 	$(C) -DDINT -DWSOLVE -c ../Source/umfpack_solve.c -o umfpack_di_wsolve.o
@@ -153,7 +154,6 @@ everything:
 	$(C) -DDLONG -c ../Source/umf_valid_symbolic.c -o umf_dl_valid_symbolic.o
 	$(C) -DDLONG -c ../Source/umf_grow_front.c -o umf_dl_grow_front.o
 	$(C) -DDLONG -c ../Source/umf_start_front.c -o umf_dl_start_front.o
-	$(C) -DDLONG -c ../Source/umf_2by2.c -o umf_dl_2by2.o
 	$(C) -DDLONG -c ../Source/umf_store_lu.c -o umf_dl_store_lu.o
 	$(C) -DDLONG -c ../Source/umf_scale.c -o umf_dl_scale.o
 	$(C) -DDLONG -DWSOLVE -c ../Source/umfpack_solve.c -o umfpack_dl_wsolve.o
@@ -227,7 +227,6 @@ everything:
 	$(C) -DZINT -c ../Source/umf_valid_symbolic.c -o umf_zi_valid_symbolic.o
 	$(C) -DZINT -c ../Source/umf_grow_front.c -o umf_zi_grow_front.o
 	$(C) -DZINT -c ../Source/umf_start_front.c -o umf_zi_start_front.o
-	$(C) -DZINT -c ../Source/umf_2by2.c -o umf_zi_2by2.o
 	$(C) -DZINT -c ../Source/umf_store_lu.c -o umf_zi_store_lu.o
 	$(C) -DZINT -c ../Source/umf_scale.c -o umf_zi_scale.o
 	$(C) -DZINT -DWSOLVE -c ../Source/umfpack_solve.c -o umfpack_zi_wsolve.o
@@ -301,7 +300,6 @@ everything:
 	$(C) -DZLONG -c ../Source/umf_valid_symbolic.c -o umf_zl_valid_symbolic.o
 	$(C) -DZLONG -c ../Source/umf_grow_front.c -o umf_zl_grow_front.o
 	$(C) -DZLONG -c ../Source/umf_start_front.c -o umf_zl_start_front.o
-	$(C) -DZLONG -c ../Source/umf_2by2.c -o umf_zl_2by2.o
 	$(C) -DZLONG -c ../Source/umf_store_lu.c -o umf_zl_store_lu.o
 	$(C) -DZLONG -c ../Source/umf_scale.c -o umf_zl_scale.o
 	$(C) -DZLONG -DWSOLVE -c ../Source/umfpack_solve.c -o umfpack_zl_wsolve.o
@@ -333,13 +331,14 @@ everything:
 	$(C) -DZLONG -c ../Source/umfpack_save_numeric.c -o umfpack_zl_save_numeric.o
 	$(C) -DZLONG -c ../Source/umfpack_load_symbolic.c -o umfpack_zl_load_symbolic.o
 	$(C) -DZLONG -c ../Source/umfpack_save_symbolic.c -o umfpack_zl_save_symbolic.o
-	$(AR) ../Lib/libumfpack.a \
-	    umfpack_gn_global.o \
+	$(ARCHIVE)  ../Lib/libumfpack.a \
 	    umf_i_analyze.o umf_i_apply_order.o umf_i_colamd.o umf_i_free.o \
-	    umf_i_fsize.o umf_i_is_permutation.o umf_i_malloc.o umf_i_realloc.o \
+            umf_i_cholmod.o umf_i_fsize.o umf_i_is_permutation.o \
+            umf_i_malloc.o umf_i_realloc.o \
 	    umf_i_report_perm.o umf_i_singletons.o \
 	    umf_l_analyze.o umf_l_apply_order.o umf_l_colamd.o umf_l_free.o \
-	    umf_l_fsize.o umf_l_is_permutation.o umf_l_malloc.o umf_l_realloc.o \
+            umf_l_cholmod.o umf_l_fsize.o umf_l_is_permutation.o \
+            umf_l_malloc.o umf_l_realloc.o \
 	    umf_l_report_perm.o umf_l_singletons.o \
 	    umfpack_gn_timer.o umfpack_gn_tictoc.o \
 	    umf_di_lhsolve.o \
@@ -358,7 +357,7 @@ everything:
 	    umf_di_set_stats.o umf_di_solve.o umf_di_symbolic_usage.o \
 	    umf_di_transpose.o umf_di_tuple_lengths.o umf_di_usolve.o \
 	    umf_di_utsolve.o umf_di_valid_numeric.o umf_di_valid_symbolic.o \
-	    umf_di_grow_front.o umf_di_start_front.o umf_di_2by2.o \
+	    umf_di_grow_front.o umf_di_start_front.o \
 	    umf_di_store_lu.o umf_di_scale.o umfpack_di_wsolve.o \
 	    umfpack_di_col_to_triplet.o umfpack_di_defaults.o \
 	    umfpack_di_free_numeric.o umfpack_di_free_symbolic.o \
@@ -390,7 +389,7 @@ everything:
 	    umf_dl_set_stats.o umf_dl_solve.o umf_dl_symbolic_usage.o \
 	    umf_dl_transpose.o umf_dl_tuple_lengths.o umf_dl_usolve.o \
 	    umf_dl_utsolve.o umf_dl_valid_numeric.o umf_dl_valid_symbolic.o \
-	    umf_dl_grow_front.o umf_dl_start_front.o umf_dl_2by2.o \
+	    umf_dl_grow_front.o umf_dl_start_front.o \
 	    umf_dl_store_lu.o umf_dl_scale.o umfpack_dl_wsolve.o \
 	    umfpack_dl_col_to_triplet.o umfpack_dl_defaults.o \
 	    umfpack_dl_free_numeric.o umfpack_dl_free_symbolic.o \
@@ -422,7 +421,7 @@ everything:
 	    umf_zi_set_stats.o umf_zi_solve.o umf_zi_symbolic_usage.o \
 	    umf_zi_transpose.o umf_zi_tuple_lengths.o umf_zi_usolve.o \
 	    umf_zi_utsolve.o umf_zi_valid_numeric.o umf_zi_valid_symbolic.o \
-	    umf_zi_grow_front.o umf_zi_start_front.o umf_zi_2by2.o \
+	    umf_zi_grow_front.o umf_zi_start_front.o \
 	    umf_zi_store_lu.o umf_zi_scale.o umfpack_zi_wsolve.o \
 	    umfpack_zi_col_to_triplet.o umfpack_zi_defaults.o \
 	    umfpack_zi_free_numeric.o umfpack_zi_free_symbolic.o \
@@ -454,7 +453,7 @@ everything:
 	    umf_zl_set_stats.o umf_zl_solve.o umf_zl_symbolic_usage.o \
 	    umf_zl_transpose.o umf_zl_tuple_lengths.o umf_zl_usolve.o \
 	    umf_zl_utsolve.o umf_zl_valid_numeric.o umf_zl_valid_symbolic.o \
-	    umf_zl_grow_front.o umf_zl_start_front.o umf_zl_2by2.o \
+	    umf_zl_grow_front.o umf_zl_start_front.o \
 	    umf_zl_store_lu.o umf_zl_scale.o umfpack_zl_wsolve.o \
 	    umfpack_zl_col_to_triplet.o umfpack_zl_defaults.o \
 	    umfpack_zl_free_numeric.o umfpack_zl_free_symbolic.o \
diff --git a/UMFPACK/Lib/libumfpack.def b/UMFPACK/Lib/libumfpack.def
index 72e6991..4ddc471 100644
--- a/UMFPACK/Lib/libumfpack.def
+++ b/UMFPACK/Lib/libumfpack.def
@@ -10,6 +10,7 @@ umfpack_di_get_symbolic
 umfpack_di_get_determinant
 umfpack_di_numeric
 umfpack_di_qsymbolic
+umfpack_di_fsymbolic
 umfpack_di_report_control
 umfpack_di_report_info
 umfpack_di_report_matrix
@@ -35,6 +36,7 @@ umfpack_dl_get_symbolic
 umfpack_dl_get_determinant
 umfpack_dl_numeric
 umfpack_dl_qsymbolic
+umfpack_dl_fsymbolic
 umfpack_dl_report_control
 umfpack_dl_report_info
 umfpack_dl_report_matrix
@@ -60,6 +62,7 @@ umfpack_zi_get_symbolic
 umfpack_zi_get_determinant
 umfpack_zi_numeric
 umfpack_zi_qsymbolic
+umfpack_zi_fsymbolic
 umfpack_zi_report_control
 umfpack_zi_report_info
 umfpack_zi_report_matrix
@@ -85,6 +88,7 @@ umfpack_zl_get_symbolic
 umfpack_zl_get_determinant
 umfpack_zl_numeric
 umfpack_zl_qsymbolic
+umfpack_zl_fsymbolic
 umfpack_zl_report_control
 umfpack_zl_report_info
 umfpack_zl_report_matrix
diff --git a/UMFPACK/MATLAB/Contents.m b/UMFPACK/MATLAB/Contents.m
index b936449..95af6fb 100644
--- a/UMFPACK/MATLAB/Contents.m
+++ b/UMFPACK/MATLAB/Contents.m
@@ -26,7 +26,7 @@
 % source code for the built-in umfpack, but the MATLAB function has been renamed
 % here to umfpack2, to avoid a filename clash with itself.
 %
-% Copyright 1995-2007 by Timothy A. Davis.
+% Copyright 1995-2009 by Timothy A. Davis.
 % All Rights Reserved.  Type umfpack_details for License.
 
 help Contents
diff --git a/UMFPACK/MATLAB/GNUmakefile b/UMFPACK/MATLAB/GNUmakefile
deleted file mode 100644
index b6e7ad1..0000000
--- a/UMFPACK/MATLAB/GNUmakefile
+++ /dev/null
@@ -1,240 +0,0 @@
-#-------------------------------------------------------------------------------
-# UMFPACK GNUmakefile for the UMFPACK MATLAB mexFunction (GNU "make" only)
-#-------------------------------------------------------------------------------
-
-default: umfpack2 luflop
-
-include ../../UFconfig/UFconfig.mk
-
-I =  -I../Include -I../Source -I../../AMD/Include -I../../UFconfig
-
-MX = $(MEX) $(I)
-    
-
-#-------------------------------------------------------------------------------
-# source files
-#-------------------------------------------------------------------------------
-
-# non-user-callable umf_*.[ch] files:
-UMFCH = umf_assemble umf_blas3_update \
-	umf_build_tuples umf_create_element \
-	umf_dump umf_extend_front umf_garbage_collection \
-	umf_get_memory umf_init_front umf_kernel \
-	umf_kernel_init umf_kernel_wrapup \
-	umf_local_search umf_lsolve umf_ltsolve \
-	umf_mem_alloc_element umf_mem_alloc_head_block \
-	umf_mem_alloc_tail_block umf_mem_free_tail_block \
-	umf_mem_init_memoryspace \
-	umf_report_vector umf_row_search umf_scale_column \
-	umf_set_stats umf_solve umf_symbolic_usage umf_transpose \
-	umf_tuple_lengths umf_usolve umf_utsolve umf_valid_numeric \
-	umf_valid_symbolic umf_grow_front umf_start_front umf_2by2 \
-	umf_store_lu umf_scale
-
-# non-user-callable umf_*.[ch] files, int/UF_long versions only (no real/complex):
-UMFINT = umf_analyze umf_apply_order umf_colamd umf_free umf_fsize \
-	umf_is_permutation umf_malloc umf_realloc umf_report_perm \
-	umf_singletons
-
-# non-user-callable and user-callable amd_*.[ch] files (int/UF_long versions only):
-AMD = amd_aat amd_1 amd_2 amd_dump amd_postorder amd_post_tree amd_defaults \
-	amd_order amd_control amd_info amd_valid amd_preprocess amd_global
-
-# non-user-callable, created from umf_ltsolve.c, umf_utsolve.c,
-# umf_triplet.c, and umf_assemble.c , with int/UF_long and real/complex versions:
-UMF_CREATED = umf_lhsolve umf_uhsolve umf_triplet_map_nox \
-	umf_triplet_nomap_x umf_triplet_nomap_nox umf_triplet_map_x \
-	umf_assemble_fixq umf_store_lu_drop
-
-# non-user-callable, int/UF_long and real/complex versions:
-UMF = $(UMF_CREATED) $(UMFCH)
-
-# user-callable umfpack_*.[ch] files (int/UF_long and real/complex):
-UMFPACK = umfpack_col_to_triplet umfpack_defaults umfpack_free_numeric \
-	umfpack_free_symbolic umfpack_get_numeric umfpack_get_lunz \
-	umfpack_get_symbolic umfpack_get_determinant umfpack_numeric \
-	umfpack_qsymbolic umfpack_report_control umfpack_report_info \
-	umfpack_report_matrix umfpack_report_numeric umfpack_report_perm \
-	umfpack_report_status umfpack_report_symbolic umfpack_report_triplet \
-	umfpack_report_vector umfpack_solve umfpack_symbolic \
-	umfpack_transpose umfpack_triplet_to_col umfpack_scale \
-	umfpack_load_numeric umfpack_save_numeric \
-	umfpack_load_symbolic umfpack_save_symbolic
-
-# user-callable, created from umfpack_solve.c (umfpack_wsolve.h exists, though):
-# with int/UF_long and real/complex versions:
-UMFPACKW = umfpack_wsolve
-
-USER = $(UMFPACKW) $(UMFPACK)
-
-# user-callable, only one version for int/UF_long, real/complex, *.[ch] files:
-GENERIC = umfpack_timer umfpack_tictoc umfpack_global
-
-#-------------------------------------------------------------------------------
-# include files:
-#-------------------------------------------------------------------------------
-
-AMDH = ../../AMD/Include/amd_internal.h ../../AMD/Include/amd.h \
-    ../../UFconfig/UFconfig.h
-
-INC1 = umf_config.h umf_version.h umf_internal.h umf_triplet.h
-
-INC = ../Include/umfpack.h \
-	$(addprefix ../Source/, $(INC1)) \
-	$(addprefix ../Source/, $(addsuffix .h,$(UMFCH))) \
-	$(addprefix ../Source/, $(addsuffix .h,$(UMFINT))) \
-	$(addprefix ../Include/, $(addsuffix .h,$(USER))) \
-	$(addprefix ../Include/, $(addsuffix .h,$(GENERIC))) \
-	$(AMDH)
-
-#-------------------------------------------------------------------------------
-# Create the umfpack and amd mexFunctions for MATLAB (int versions only)
-#-------------------------------------------------------------------------------
-
-MEXI   = $(addsuffix .o, $(subst umf_,umf_m_,$(UMFINT)))
-MEXDI  = $(addsuffix .o, $(subst umf_,umf_md_,$(UMF)) $(subst umfpack_,umfpack_md_,$(USER)))
-MEXZI  = $(addsuffix .o, $(subst umf_,umf_mz_,$(UMF)) $(subst umfpack_,umfpack_mz_,$(USER)) )
-MEXAMD = $(addsuffix .o, $(subst amd_,amd_m_,$(AMD)))
-MEXGN  = $(addsuffix .o, $(subst umfpack_,umfpack_m_,$(GENERIC)))
-
-MEXUMFPACK = $(MEXI) $(MEXDI) $(MEXZI) $(MEXGN)
-
-# Note that mex has no "-o" option, thus the need for $(MV) commands.
-# If it did, then the rules would be much simpler:
-#	$(MX) -DDLONG -c $< -o $@
-
-#----------------------------------------
-# integer-only routines (no real/complex):
-#----------------------------------------
-
-amd_m_%.o: ../../AMD/Source/amd_%.c $(AMDH)
-	$(MX) -DDLONG -c $<
-	- $(MV) amd_$*.o $@
-
-umf_m_%.o: ../Source/umf_%.c $(INC)
-	$(MX) -DDLONG -c $<
-	- $(MV) umf_$*.o $@
-
-#----------------------------------------
-# Double precision, int version, for MATLAB
-#----------------------------------------
-
-umf_md_%.o: ../Source/umf_%.c $(INC)
-	$(MX) -DDLONG -c $<
-	- $(MV) umf_$*.o $@
-
-umf_md_%hsolve.o: ../Source/umf_%tsolve.c $(INC)
-	$(MX) -DDLONG -DCONJUGATE_SOLVE -c $<
-	- $(MV) umf_$*tsolve.o $@
-
-umf_md_triplet_map_x.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DDLONG -DDO_MAP -DDO_VALUES -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_md_triplet_map_nox.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DDLONG -DDO_MAP -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_md_triplet_nomap_x.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DDLONG -DDO_VALUES -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_md_triplet_nomap_nox.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DDLONG -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_md_assemble_fixq.o: ../Source/umf_assemble.c $(INC)
-	$(MX) -DDLONG -DFIXQ -c $<
-	- $(MV) umf_assemble.o $@
-
-umf_md_store_lu_drop.o: ../Source/umf_store_lu.c $(INC)
-	$(MX) -DDLONG -DDROP -c $<
-	- $(MV) umf_store_lu.o $@
-
-umfpack_md_wsolve.o: ../Source/umfpack_solve.c $(INC)
-	$(MX) -DDLONG -DWSOLVE -c $<
-	- $(MV) umfpack_solve.o $@
-
-umfpack_md_%.o: ../Source/umfpack_%.c $(INC)
-	$(MX) -DDLONG -c $<
-	- $(MV) umfpack_$*.o $@
-
-#----------------------------------------
-# Complex double precision, int version, for MATLAB
-#----------------------------------------
-
-umf_mz_%.o: ../Source/umf_%.c $(INC)
-	$(MX) -DZLONG -c $<
-	- $(MV) umf_$*.o $@
-
-umf_mz_%hsolve.o: ../Source/umf_%tsolve.c $(INC)
-	$(MX) -DZLONG -DCONJUGATE_SOLVE -c $<
-	- $(MV) umf_$*tsolve.o $@
-
-umf_mz_triplet_map_x.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DZLONG -DDO_MAP -DDO_VALUES -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_mz_triplet_map_nox.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DZLONG -DDO_MAP -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_mz_triplet_nomap_x.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DZLONG -DDO_VALUES -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_mz_triplet_nomap_nox.o: ../Source/umf_triplet.c $(INC)
-	$(MX) -DZLONG -c $<
-	- $(MV) umf_triplet.o $@
-
-umf_mz_assemble_fixq.o: ../Source/umf_assemble.c $(INC)
-	$(MX) -DZLONG -DFIXQ -c $<
-	- $(MV) umf_assemble.o $@
-
-umf_mz_store_lu_drop.o: ../Source/umf_store_lu.c $(INC)
-	$(MX) -DZLONG -DDROP -c $<
-	- $(MV) umf_store_lu.o $@
-
-umfpack_mz_wsolve.o: ../Source/umfpack_solve.c $(INC)
-	$(MX) -DZLONG -DWSOLVE -c $<
-	- $(MV) umfpack_solve.o $@
-
-umfpack_mz_%.o: ../Source/umfpack_%.c $(INC)
-	$(MX) -DZLONG -c $<
-	- $(MV) umfpack_$*.o $@
-
-#----------------------------------------
-# Generic routines for MATLAB
-#----------------------------------------
-
-umfpack_m_timer.o: ../Source/umfpack_timer.c $(INC)
-	$(MX) -c $<
-	- $(MV) umfpack_timer.o $@
-
-umfpack_m_tictoc.o: ../Source/umfpack_tictoc.c $(INC)
-	$(MX) -c $<
-	- $(MV) umfpack_tictoc.o $@
-
-umfpack_m_global.o: ../Source/umfpack_global.c $(INC)
-	$(MX) -c $<
-	- $(MV) umfpack_global.o $@
-
-#----------------------------------------
-# umfpack mexFunction
-#----------------------------------------
-
-umfpack2: umfpackmex.c $(MEXUMFPACK) $(MEXAMD)
-	$(MX) -output umfpack2 umfpackmex.c $(MEXUMFPACK) $(MEXAMD)
-
-luflop: luflopmex.c
-	$(MX) -output luflop luflopmex.c
-
-#-------------------------------------------------------------------------------
-# Remove all but the files in the original distribution
-#-------------------------------------------------------------------------------
-
-purge: clean
-	- $(RM) *.mex*
-
-clean:
-	- $(RM) $(CLEAN)
diff --git a/UMFPACK/MATLAB/Makefile b/UMFPACK/MATLAB/Makefile
index 4eab588..fc1eb6a 100644
--- a/UMFPACK/MATLAB/Makefile
+++ b/UMFPACK/MATLAB/Makefile
@@ -1,445 +1,18 @@
 #-------------------------------------------------------------------------------
-# UMFPACK Makefile for the UMFPACK MATLAB mexFunction (old "make" only)
+# UMFPACK Makefile just for cleanup (use umfpack_make.m to compile, in MATLAB)
 #-------------------------------------------------------------------------------
 
-# This is a very ugly Makefile, and is only provided for those who do not
-# have GNU make.  Note that it is not used if you have GNU make.  It ignores
-# dependency checking and just compiles everything.
+default:
+	- echo "Use umfpack_make.m in MATLAB to compile the UMFPACK mexFunction"
 
-default: umfpack luflop
-
-include ../../UFconfig/UFconfig.mk
-
-MX = $(MEX) -I../Include -I../Source -I../../AMD/Include -I../../UFconfig
-
-umfpack:
-	$(MX) -c ../Source/umfpack_global.c
-	$(MV) -f umfpack_global.o umfpack_m_global.o
-	$(MX) -DDLONG -c ../Source/umf_analyze.c
-	$(MV) -f umf_analyze.o umf_m_analyze.o
-	$(MX) -DDLONG -c ../Source/umf_apply_order.c
-	$(MV) -f umf_apply_order.o umf_m_apply_order.o
-	$(MX) -DDLONG -c ../Source/umf_colamd.c
-	$(MV) -f umf_colamd.o umf_m_colamd.o
-	$(MX) -DDLONG -c ../Source/umf_free.c
-	$(MV) -f umf_free.o umf_m_free.o
-	$(MX) -DDLONG -c ../Source/umf_fsize.c
-	$(MV) -f umf_fsize.o umf_m_fsize.o
-	$(MX) -DDLONG -c ../Source/umf_is_permutation.c
-	$(MV) -f umf_is_permutation.o umf_m_is_permutation.o
-	$(MX) -DDLONG -c ../Source/umf_malloc.c
-	$(MV) -f umf_malloc.o umf_m_malloc.o
-	$(MX) -DDLONG -c ../Source/umf_realloc.c
-	$(MV) -f umf_realloc.o umf_m_realloc.o
-	$(MX) -DDLONG -c ../Source/umf_report_perm.c
-	$(MV) -f umf_report_perm.o umf_m_report_perm.o
-	$(MX) -DDLONG -c ../Source/umf_singletons.c
-	$(MV) -f umf_singletons.o umf_m_singletons.o
-	$(MX) -DDLONG -DCONJUGATE_SOLVE -c ../Source/umf_ltsolve.c
-	$(MV) -f umf_ltsolve.o umf_md_lhsolve.o
-	$(MX) -DDLONG -DCONJUGATE_SOLVE -c ../Source/umf_utsolve.c
-	$(MV) -f umf_utsolve.o umf_md_uhsolve.o
-	$(MX) -DDLONG -DDO_MAP -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_md_triplet_map_nox.o
-	$(MX) -DDLONG -DDO_VALUES -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_md_triplet_nomap_x.o
-	$(MX) -DDLONG -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_md_triplet_nomap_nox.o
-	$(MX) -DDLONG -DDO_MAP -DDO_VALUES -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_md_triplet_map_x.o
-	$(MX) -DDLONG -DFIXQ -c ../Source/umf_assemble.c
-	$(MV) -f umf_assemble.o umf_md_assemble_fixq.o
-	$(MX) -DDLONG -DDROP -c ../Source/umf_store_lu.c
-	$(MV) -f umf_store_lu.o umf_md_store_lu_drop.o
-	$(MX) -DDLONG -c ../Source/umf_assemble.c
-	$(MV) -f umf_assemble.o umf_md_assemble.o
-	$(MX) -DDLONG -c ../Source/umf_blas3_update.c
-	$(MV) -f umf_blas3_update.o umf_md_blas3_update.o
-	$(MX) -DDLONG -c ../Source/umf_build_tuples.c
-	$(MV) -f umf_build_tuples.o umf_md_build_tuples.o
-	$(MX) -DDLONG -c ../Source/umf_create_element.c
-	$(MV) -f umf_create_element.o umf_md_create_element.o
-	$(MX) -DDLONG -c ../Source/umf_dump.c
-	$(MV) -f umf_dump.o umf_md_dump.o
-	$(MX) -DDLONG -c ../Source/umf_extend_front.c
-	$(MV) -f umf_extend_front.o umf_md_extend_front.o
-	$(MX) -DDLONG -c ../Source/umf_garbage_collection.c
-	$(MV) -f umf_garbage_collection.o umf_md_garbage_collection.o
-	$(MX) -DDLONG -c ../Source/umf_get_memory.c
-	$(MV) -f umf_get_memory.o umf_md_get_memory.o
-	$(MX) -DDLONG -c ../Source/umf_init_front.c
-	$(MV) -f umf_init_front.o umf_md_init_front.o
-	$(MX) -DDLONG -c ../Source/umf_kernel.c
-	$(MV) -f umf_kernel.o umf_md_kernel.o
-	$(MX) -DDLONG -c ../Source/umf_kernel_init.c
-	$(MV) -f umf_kernel_init.o umf_md_kernel_init.o
-	$(MX) -DDLONG -c ../Source/umf_kernel_wrapup.c
-	$(MV) -f umf_kernel_wrapup.o umf_md_kernel_wrapup.o
-	$(MX) -DDLONG -c ../Source/umf_local_search.c
-	$(MV) -f umf_local_search.o umf_md_local_search.o
-	$(MX) -DDLONG -c ../Source/umf_lsolve.c
-	$(MV) -f umf_lsolve.o umf_md_lsolve.o
-	$(MX) -DDLONG -c ../Source/umf_ltsolve.c
-	$(MV) -f umf_ltsolve.o umf_md_ltsolve.o
-	$(MX) -DDLONG -c ../Source/umf_mem_alloc_element.c
-	$(MV) -f umf_mem_alloc_element.o umf_md_mem_alloc_element.o
-	$(MX) -DDLONG -c ../Source/umf_mem_alloc_head_block.c
-	$(MV) -f umf_mem_alloc_head_block.o umf_md_mem_alloc_head_block.o
-	$(MX) -DDLONG -c ../Source/umf_mem_alloc_tail_block.c
-	$(MV) -f umf_mem_alloc_tail_block.o umf_md_mem_alloc_tail_block.o
-	$(MX) -DDLONG -c ../Source/umf_mem_free_tail_block.c
-	$(MV) -f umf_mem_free_tail_block.o umf_md_mem_free_tail_block.o
-	$(MX) -DDLONG -c ../Source/umf_mem_init_memoryspace.c
-	$(MV) -f umf_mem_init_memoryspace.o umf_md_mem_init_memoryspace.o
-	$(MX) -DDLONG -c ../Source/umf_report_vector.c
-	$(MV) -f umf_report_vector.o umf_md_report_vector.o
-	$(MX) -DDLONG -c ../Source/umf_row_search.c
-	$(MV) -f umf_row_search.o umf_md_row_search.o
-	$(MX) -DDLONG -c ../Source/umf_scale_column.c
-	$(MV) -f umf_scale_column.o umf_md_scale_column.o
-	$(MX) -DDLONG -c ../Source/umf_set_stats.c
-	$(MV) -f umf_set_stats.o umf_md_set_stats.o
-	$(MX) -DDLONG -c ../Source/umf_solve.c
-	$(MV) -f umf_solve.o umf_md_solve.o
-	$(MX) -DDLONG -c ../Source/umf_symbolic_usage.c
-	$(MV) -f umf_symbolic_usage.o umf_md_symbolic_usage.o
-	$(MX) -DDLONG -c ../Source/umf_transpose.c
-	$(MV) -f umf_transpose.o umf_md_transpose.o
-	$(MX) -DDLONG -c ../Source/umf_tuple_lengths.c
-	$(MV) -f umf_tuple_lengths.o umf_md_tuple_lengths.o
-	$(MX) -DDLONG -c ../Source/umf_usolve.c
-	$(MV) -f umf_usolve.o umf_md_usolve.o
-	$(MX) -DDLONG -c ../Source/umf_utsolve.c
-	$(MV) -f umf_utsolve.o umf_md_utsolve.o
-	$(MX) -DDLONG -c ../Source/umf_valid_numeric.c
-	$(MV) -f umf_valid_numeric.o umf_md_valid_numeric.o
-	$(MX) -DDLONG -c ../Source/umf_valid_symbolic.c
-	$(MV) -f umf_valid_symbolic.o umf_md_valid_symbolic.o
-	$(MX) -DDLONG -c ../Source/umf_grow_front.c
-	$(MV) -f umf_grow_front.o umf_md_grow_front.o
-	$(MX) -DDLONG -c ../Source/umf_start_front.c
-	$(MV) -f umf_start_front.o umf_md_start_front.o
-	$(MX) -DDLONG -c ../Source/umf_2by2.c
-	$(MV) -f umf_2by2.o umf_md_2by2.o
-	$(MX) -DDLONG -c ../Source/umf_store_lu.c
-	$(MV) -f umf_store_lu.o umf_md_store_lu.o
-	$(MX) -DDLONG -c ../Source/umf_scale.c
-	$(MV) -f umf_scale.o umf_md_scale.o
-	$(MX) -DDLONG -DWSOLVE -c ../Source/umfpack_solve.c
-	$(MV) -f umfpack_solve.o umfpack_md_wsolve.o
-	$(MX) -DDLONG -c ../Source/umfpack_col_to_triplet.c
-	$(MV) -f umfpack_col_to_triplet.o umfpack_md_col_to_triplet.o
-	$(MX) -DDLONG -c ../Source/umfpack_defaults.c
-	$(MV) -f umfpack_defaults.o umfpack_md_defaults.o
-	$(MX) -DDLONG -c ../Source/umfpack_free_numeric.c
-	$(MV) -f umfpack_free_numeric.o umfpack_md_free_numeric.o
-	$(MX) -DDLONG -c ../Source/umfpack_free_symbolic.c
-	$(MV) -f umfpack_free_symbolic.o umfpack_md_free_symbolic.o
-	$(MX) -DDLONG -c ../Source/umfpack_get_numeric.c
-	$(MV) -f umfpack_get_numeric.o umfpack_md_get_numeric.o
-	$(MX) -DDLONG -c ../Source/umfpack_get_lunz.c
-	$(MV) -f umfpack_get_lunz.o umfpack_md_get_lunz.o
-	$(MX) -DDLONG -c ../Source/umfpack_get_symbolic.c
-	$(MV) -f umfpack_get_symbolic.o umfpack_md_get_symbolic.o
-	$(MX) -DDLONG -c ../Source/umfpack_get_determinant.c
-	$(MV) -f umfpack_get_determinant.o umfpack_md_get_determinant.o
-	$(MX) -DDLONG -c ../Source/umfpack_numeric.c
-	$(MV) -f umfpack_numeric.o umfpack_md_numeric.o
-	$(MX) -DDLONG -c ../Source/umfpack_qsymbolic.c
-	$(MV) -f umfpack_qsymbolic.o umfpack_md_qsymbolic.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_control.c
-	$(MV) -f umfpack_report_control.o umfpack_md_report_control.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_info.c
-	$(MV) -f umfpack_report_info.o umfpack_md_report_info.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_matrix.c
-	$(MV) -f umfpack_report_matrix.o umfpack_md_report_matrix.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_numeric.c
-	$(MV) -f umfpack_report_numeric.o umfpack_md_report_numeric.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_perm.c
-	$(MV) -f umfpack_report_perm.o umfpack_md_report_perm.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_status.c
-	$(MV) -f umfpack_report_status.o umfpack_md_report_status.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_symbolic.c
-	$(MV) -f umfpack_report_symbolic.o umfpack_md_report_symbolic.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_triplet.c
-	$(MV) -f umfpack_report_triplet.o umfpack_md_report_triplet.o
-	$(MX) -DDLONG -c ../Source/umfpack_report_vector.c
-	$(MV) -f umfpack_report_vector.o umfpack_md_report_vector.o
-	$(MX) -DDLONG -c ../Source/umfpack_solve.c
-	$(MV) -f umfpack_solve.o umfpack_md_solve.o
-	$(MX) -DDLONG -c ../Source/umfpack_symbolic.c
-	$(MV) -f umfpack_symbolic.o umfpack_md_symbolic.o
-	$(MX) -DDLONG -c ../Source/umfpack_transpose.c
-	$(MV) -f umfpack_transpose.o umfpack_md_transpose.o
-	$(MX) -DDLONG -c ../Source/umfpack_triplet_to_col.c
-	$(MV) -f umfpack_triplet_to_col.o umfpack_md_triplet_to_col.o
-	$(MX) -DDLONG -c ../Source/umfpack_scale.c
-	$(MV) -f umfpack_scale.o umfpack_md_scale.o
-	$(MX) -DDLONG -c ../Source/umfpack_load_numeric.c
-	$(MV) -f umfpack_load_numeric.o umfpack_md_load_numeric.o
-	$(MX) -DDLONG -c ../Source/umfpack_save_numeric.c
-	$(MV) -f umfpack_save_numeric.o umfpack_md_save_numeric.o
-	$(MX) -DDLONG -c ../Source/umfpack_load_symbolic.c
-	$(MV) -f umfpack_load_symbolic.o umfpack_md_load_symbolic.o
-	$(MX) -DDLONG -c ../Source/umfpack_save_symbolic.c
-	$(MV) -f umfpack_save_symbolic.o umfpack_md_save_symbolic.o
-	$(MX) -DZLONG -DCONJUGATE_SOLVE -c ../Source/umf_ltsolve.c
-	$(MV) -f umf_ltsolve.o umf_mz_lhsolve.o
-	$(MX) -DZLONG -DCONJUGATE_SOLVE -c ../Source/umf_utsolve.c
-	$(MV) -f umf_utsolve.o umf_mz_uhsolve.o
-	$(MX) -DZLONG -DDO_MAP -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_mz_triplet_map_nox.o
-	$(MX) -DZLONG -DDO_VALUES -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_mz_triplet_nomap_x.o
-	$(MX) -DZLONG -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_mz_triplet_nomap_nox.o
-	$(MX) -DZLONG -DDO_MAP -DDO_VALUES -c ../Source/umf_triplet.c
-	$(MV) -f umf_triplet.o umf_mz_triplet_map_x.o
-	$(MX) -DZLONG -DFIXQ -c ../Source/umf_assemble.c
-	$(MV) -f umf_assemble.o umf_mz_assemble_fixq.o
-	$(MX) -DZLONG -DDROP -c ../Source/umf_store_lu.c
-	$(MV) -f umf_store_lu.o umf_mz_store_lu_drop.o
-	$(MX) -DZLONG -c ../Source/umf_assemble.c
-	$(MV) -f umf_assemble.o umf_mz_assemble.o
-	$(MX) -DZLONG -c ../Source/umf_blas3_update.c
-	$(MV) -f umf_blas3_update.o umf_mz_blas3_update.o
-	$(MX) -DZLONG -c ../Source/umf_build_tuples.c
-	$(MV) -f umf_build_tuples.o umf_mz_build_tuples.o
-	$(MX) -DZLONG -c ../Source/umf_create_element.c
-	$(MV) -f umf_create_element.o umf_mz_create_element.o
-	$(MX) -DZLONG -c ../Source/umf_dump.c
-	$(MV) -f umf_dump.o umf_mz_dump.o
-	$(MX) -DZLONG -c ../Source/umf_extend_front.c
-	$(MV) -f umf_extend_front.o umf_mz_extend_front.o
-	$(MX) -DZLONG -c ../Source/umf_garbage_collection.c
-	$(MV) -f umf_garbage_collection.o umf_mz_garbage_collection.o
-	$(MX) -DZLONG -c ../Source/umf_get_memory.c
-	$(MV) -f umf_get_memory.o umf_mz_get_memory.o
-	$(MX) -DZLONG -c ../Source/umf_init_front.c
-	$(MV) -f umf_init_front.o umf_mz_init_front.o
-	$(MX) -DZLONG -c ../Source/umf_kernel.c
-	$(MV) -f umf_kernel.o umf_mz_kernel.o
-	$(MX) -DZLONG -c ../Source/umf_kernel_init.c
-	$(MV) -f umf_kernel_init.o umf_mz_kernel_init.o
-	$(MX) -DZLONG -c ../Source/umf_kernel_wrapup.c
-	$(MV) -f umf_kernel_wrapup.o umf_mz_kernel_wrapup.o
-	$(MX) -DZLONG -c ../Source/umf_local_search.c
-	$(MV) -f umf_local_search.o umf_mz_local_search.o
-	$(MX) -DZLONG -c ../Source/umf_lsolve.c
-	$(MV) -f umf_lsolve.o umf_mz_lsolve.o
-	$(MX) -DZLONG -c ../Source/umf_ltsolve.c
-	$(MV) -f umf_ltsolve.o umf_mz_ltsolve.o
-	$(MX) -DZLONG -c ../Source/umf_mem_alloc_element.c
-	$(MV) -f umf_mem_alloc_element.o umf_mz_mem_alloc_element.o
-	$(MX) -DZLONG -c ../Source/umf_mem_alloc_head_block.c
-	$(MV) -f umf_mem_alloc_head_block.o umf_mz_mem_alloc_head_block.o
-	$(MX) -DZLONG -c ../Source/umf_mem_alloc_tail_block.c
-	$(MV) -f umf_mem_alloc_tail_block.o umf_mz_mem_alloc_tail_block.o
-	$(MX) -DZLONG -c ../Source/umf_mem_free_tail_block.c
-	$(MV) -f umf_mem_free_tail_block.o umf_mz_mem_free_tail_block.o
-	$(MX) -DZLONG -c ../Source/umf_mem_init_memoryspace.c
-	$(MV) -f umf_mem_init_memoryspace.o umf_mz_mem_init_memoryspace.o
-	$(MX) -DZLONG -c ../Source/umf_report_vector.c
-	$(MV) -f umf_report_vector.o umf_mz_report_vector.o
-	$(MX) -DZLONG -c ../Source/umf_row_search.c
-	$(MV) -f umf_row_search.o umf_mz_row_search.o
-	$(MX) -DZLONG -c ../Source/umf_scale_column.c
-	$(MV) -f umf_scale_column.o umf_mz_scale_column.o
-	$(MX) -DZLONG -c ../Source/umf_set_stats.c
-	$(MV) -f umf_set_stats.o umf_mz_set_stats.o
-	$(MX) -DZLONG -c ../Source/umf_solve.c
-	$(MV) -f umf_solve.o umf_mz_solve.o
-	$(MX) -DZLONG -c ../Source/umf_symbolic_usage.c
-	$(MV) -f umf_symbolic_usage.o umf_mz_symbolic_usage.o
-	$(MX) -DZLONG -c ../Source/umf_transpose.c
-	$(MV) -f umf_transpose.o umf_mz_transpose.o
-	$(MX) -DZLONG -c ../Source/umf_tuple_lengths.c
-	$(MV) -f umf_tuple_lengths.o umf_mz_tuple_lengths.o
-	$(MX) -DZLONG -c ../Source/umf_usolve.c
-	$(MV) -f umf_usolve.o umf_mz_usolve.o
-	$(MX) -DZLONG -c ../Source/umf_utsolve.c
-	$(MV) -f umf_utsolve.o umf_mz_utsolve.o
-	$(MX) -DZLONG -c ../Source/umf_valid_numeric.c
-	$(MV) -f umf_valid_numeric.o umf_mz_valid_numeric.o
-	$(MX) -DZLONG -c ../Source/umf_valid_symbolic.c
-	$(MV) -f umf_valid_symbolic.o umf_mz_valid_symbolic.o
-	$(MX) -DZLONG -c ../Source/umf_grow_front.c
-	$(MV) -f umf_grow_front.o umf_mz_grow_front.o
-	$(MX) -DZLONG -c ../Source/umf_start_front.c
-	$(MV) -f umf_start_front.o umf_mz_start_front.o
-	$(MX) -DZLONG -c ../Source/umf_2by2.c
-	$(MV) -f umf_2by2.o umf_mz_2by2.o
-	$(MX) -DZLONG -c ../Source/umf_store_lu.c
-	$(MV) -f umf_store_lu.o umf_mz_store_lu.o
-	$(MX) -DZLONG -c ../Source/umf_scale.c
-	$(MV) -f umf_scale.o umf_mz_scale.o
-	$(MX) -DZLONG -DWSOLVE -c ../Source/umfpack_solve.c
-	$(MV) -f umfpack_solve.o umfpack_mz_wsolve.o
-	$(MX) -DZLONG -c ../Source/umfpack_col_to_triplet.c
-	$(MV) -f umfpack_col_to_triplet.o umfpack_mz_col_to_triplet.o
-	$(MX) -DZLONG -c ../Source/umfpack_defaults.c
-	$(MV) -f umfpack_defaults.o umfpack_mz_defaults.o
-	$(MX) -DZLONG -c ../Source/umfpack_free_numeric.c
-	$(MV) -f umfpack_free_numeric.o umfpack_mz_free_numeric.o
-	$(MX) -DZLONG -c ../Source/umfpack_free_symbolic.c
-	$(MV) -f umfpack_free_symbolic.o umfpack_mz_free_symbolic.o
-	$(MX) -DZLONG -c ../Source/umfpack_get_numeric.c
-	$(MV) -f umfpack_get_numeric.o umfpack_mz_get_numeric.o
-	$(MX) -DZLONG -c ../Source/umfpack_get_lunz.c
-	$(MV) -f umfpack_get_lunz.o umfpack_mz_get_lunz.o
-	$(MX) -DZLONG -c ../Source/umfpack_get_symbolic.c
-	$(MV) -f umfpack_get_symbolic.o umfpack_mz_get_symbolic.o
-	$(MX) -DZLONG -c ../Source/umfpack_get_determinant.c
-	$(MV) -f umfpack_get_determinant.o umfpack_mz_get_determinant.o
-	$(MX) -DZLONG -c ../Source/umfpack_numeric.c
-	$(MV) -f umfpack_numeric.o umfpack_mz_numeric.o
-	$(MX) -DZLONG -c ../Source/umfpack_qsymbolic.c
-	$(MV) -f umfpack_qsymbolic.o umfpack_mz_qsymbolic.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_control.c
-	$(MV) -f umfpack_report_control.o umfpack_mz_report_control.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_info.c
-	$(MV) -f umfpack_report_info.o umfpack_mz_report_info.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_matrix.c
-	$(MV) -f umfpack_report_matrix.o umfpack_mz_report_matrix.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_numeric.c
-	$(MV) -f umfpack_report_numeric.o umfpack_mz_report_numeric.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_perm.c
-	$(MV) -f umfpack_report_perm.o umfpack_mz_report_perm.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_status.c
-	$(MV) -f umfpack_report_status.o umfpack_mz_report_status.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_symbolic.c
-	$(MV) -f umfpack_report_symbolic.o umfpack_mz_report_symbolic.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_triplet.c
-	$(MV) -f umfpack_report_triplet.o umfpack_mz_report_triplet.o
-	$(MX) -DZLONG -c ../Source/umfpack_report_vector.c
-	$(MV) -f umfpack_report_vector.o umfpack_mz_report_vector.o
-	$(MX) -DZLONG -c ../Source/umfpack_solve.c
-	$(MV) -f umfpack_solve.o umfpack_mz_solve.o
-	$(MX) -DZLONG -c ../Source/umfpack_symbolic.c
-	$(MV) -f umfpack_symbolic.o umfpack_mz_symbolic.o
-	$(MX) -DZLONG -c ../Source/umfpack_transpose.c
-	$(MV) -f umfpack_transpose.o umfpack_mz_transpose.o
-	$(MX) -DZLONG -c ../Source/umfpack_triplet_to_col.c
-	$(MV) -f umfpack_triplet_to_col.o umfpack_mz_triplet_to_col.o
-	$(MX) -DZLONG -c ../Source/umfpack_scale.c
-	$(MV) -f umfpack_scale.o umfpack_mz_scale.o
-	$(MX) -DZLONG -c ../Source/umfpack_load_numeric.c
-	$(MV) -f umfpack_load_numeric.o umfpack_mz_load_numeric.o
-	$(MX) -DZLONG -c ../Source/umfpack_save_numeric.c
-	$(MV) -f umfpack_save_numeric.o umfpack_mz_save_numeric.o
-	$(MX) -DZLONG -c ../Source/umfpack_load_symbolic.c
-	$(MV) -f umfpack_load_symbolic.o umfpack_mz_load_symbolic.o
-	$(MX) -DZLONG -c ../Source/umfpack_save_symbolic.c
-	$(MV) -f umfpack_save_symbolic.o umfpack_mz_save_symbolic.o
-	$(MX) -c ../Source/umfpack_timer.c
-	$(MV) -f umfpack_timer.o umfpack_m_timer.o
-	$(MX) -c ../Source/umfpack_tictoc.c
-	$(MV) -f umfpack_tictoc.o umfpack_m_tictoc.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_global.c
-	$(MV) -f amd_global.o amd_m_global.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_aat.c
-	$(MV) -f amd_aat.o amd_m_aat.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_1.c
-	$(MV) -f amd_1.o amd_m_1.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_2.c
-	$(MV) -f amd_2.o amd_m_2.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_dump.c
-	$(MV) -f amd_dump.o amd_m_dump.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_postorder.c
-	$(MV) -f amd_postorder.o amd_m_postorder.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_post_tree.c
-	$(MV) -f amd_post_tree.o amd_m_post_tree.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_defaults.c
-	$(MV) -f amd_defaults.o amd_m_defaults.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_order.c
-	$(MV) -f amd_order.o amd_m_order.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_control.c
-	$(MV) -f amd_control.o amd_m_control.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_info.c
-	$(MV) -f amd_info.o amd_m_info.o
-	$(MX) -DDLONG -c ../../AMD/Source/amd_valid.c
-	$(MV) -f amd_valid.o amd_m_valid.o
-	$(MX) -output umfpack2 umfpackmex.c \
-	    umf_m_analyze.o umf_m_apply_order.o umf_m_colamd.o umf_m_free.o \
-	    umf_m_fsize.o umf_m_is_permutation.o umf_m_malloc.o \
-	    umf_m_realloc.o umf_m_report_perm.o umf_m_singletons.o \
-	    umf_md_lhsolve.o umf_md_uhsolve.o umf_md_triplet_map_nox.o \
-	    umf_md_triplet_nomap_x.o umf_md_triplet_nomap_nox.o \
-	    umf_md_triplet_map_x.o umf_md_assemble_fixq.o \
-	    umf_md_store_lu_drop.o umf_md_assemble.o umf_md_blas3_update.o \
-	    umf_md_build_tuples.o umf_md_create_element.o umf_md_dump.o \
-	    umf_md_extend_front.o umf_md_garbage_collection.o \
-	    umf_md_get_memory.o umf_md_init_front.o umf_md_kernel.o \
-	    umf_md_kernel_init.o umf_md_kernel_wrapup.o umf_md_local_search.o \
-	    umf_md_lsolve.o umf_md_ltsolve.o umf_md_mem_alloc_element.o \
-	    umf_md_mem_alloc_head_block.o umf_md_mem_alloc_tail_block.o \
-	    umf_md_mem_free_tail_block.o umf_md_mem_init_memoryspace.o \
-	    umf_md_report_vector.o umf_md_row_search.o umf_md_scale_column.o \
-	    umf_md_set_stats.o umf_md_solve.o umf_md_symbolic_usage.o \
-	    umf_md_transpose.o umf_md_tuple_lengths.o umf_md_usolve.o \
-	    umf_md_utsolve.o umf_md_valid_numeric.o umf_md_valid_symbolic.o \
-	    umf_md_grow_front.o umf_md_start_front.o umf_md_2by2.o \
-	    umf_md_store_lu.o umf_md_scale.o umfpack_md_wsolve.o \
-	    umfpack_md_col_to_triplet.o umfpack_md_defaults.o \
-	    umfpack_md_free_numeric.o umfpack_md_free_symbolic.o \
-	    umfpack_md_get_numeric.o umfpack_md_get_lunz.o \
-	    umfpack_md_get_symbolic.o umfpack_md_get_determinant.o \
-	    umfpack_md_numeric.o \
-	    umfpack_md_qsymbolic.o umfpack_md_report_control.o \
-	    umfpack_md_report_info.o umfpack_md_report_matrix.o \
-	    umfpack_md_report_numeric.o umfpack_md_report_perm.o \
-	    umfpack_md_report_status.o umfpack_md_report_symbolic.o \
-	    umfpack_md_report_triplet.o umfpack_md_report_vector.o \
-	    umfpack_md_solve.o umfpack_md_symbolic.o umfpack_md_transpose.o \
-	    umfpack_md_triplet_to_col.o umfpack_md_scale.o \
-	    umfpack_md_load_numeric.o umfpack_md_save_numeric.o \
-	    umfpack_md_load_symbolic.o umfpack_md_save_symbolic.o \
-	    umf_mz_lhsolve.o umf_mz_uhsolve.o umf_mz_triplet_map_nox.o \
-	    umf_mz_triplet_nomap_x.o umf_mz_triplet_nomap_nox.o \
-	    umf_mz_triplet_map_x.o umf_mz_assemble_fixq.o \
-	    umf_mz_store_lu_drop.o umf_mz_assemble.o umf_mz_blas3_update.o \
-	    umf_mz_build_tuples.o umf_mz_create_element.o umf_mz_dump.o \
-	    umf_mz_extend_front.o umf_mz_garbage_collection.o \
-	    umf_mz_get_memory.o umf_mz_init_front.o umf_mz_kernel.o \
-	    umf_mz_kernel_init.o umf_mz_kernel_wrapup.o umf_mz_local_search.o \
-	    umf_mz_lsolve.o umf_mz_ltsolve.o umf_mz_mem_alloc_element.o \
-	    umf_mz_mem_alloc_head_block.o umf_mz_mem_alloc_tail_block.o \
-	    umf_mz_mem_free_tail_block.o umf_mz_mem_init_memoryspace.o \
-	    umf_mz_report_vector.o umf_mz_row_search.o umf_mz_scale_column.o \
-	    umf_mz_set_stats.o umf_mz_solve.o umf_mz_symbolic_usage.o \
-	    umf_mz_transpose.o umf_mz_tuple_lengths.o umf_mz_usolve.o \
-	    umf_mz_utsolve.o umf_mz_valid_numeric.o umf_mz_valid_symbolic.o \
-	    umf_mz_grow_front.o umf_mz_start_front.o umf_mz_2by2.o \
-	    umf_mz_store_lu.o umf_mz_scale.o umfpack_mz_wsolve.o \
-	    umfpack_mz_col_to_triplet.o umfpack_mz_defaults.o \
-	    umfpack_mz_free_numeric.o umfpack_mz_free_symbolic.o \
-	    umfpack_mz_get_numeric.o umfpack_mz_get_lunz.o \
-	    umfpack_mz_get_symbolic.o umfpack_mz_get_determinant.o \
-	    umfpack_mz_numeric.o \
-	    umfpack_mz_qsymbolic.o umfpack_mz_report_control.o \
-	    umfpack_mz_report_info.o umfpack_mz_report_matrix.o \
-	    umfpack_mz_report_numeric.o umfpack_mz_report_perm.o \
-	    umfpack_mz_report_status.o umfpack_mz_report_symbolic.o \
-	    umfpack_mz_report_triplet.o umfpack_mz_report_vector.o \
-	    umfpack_mz_solve.o umfpack_mz_symbolic.o umfpack_mz_transpose.o \
-	    umfpack_mz_triplet_to_col.o umfpack_mz_scale.o \
-	    umfpack_mz_load_numeric.o umfpack_mz_save_numeric.o \
-	    umfpack_mz_load_symbolic.o umfpack_mz_save_symbolic.o \
-	    umfpack_m_timer.o umfpack_m_tictoc.o umfpack_m_global.o \
-	    amd_m_global.o \
-	    amd_m_aat.o amd_m_1.o amd_m_2.o amd_m_dump.o \
-	    amd_m_postorder.o amd_m_post_tree.o amd_m_defaults.o amd_m_order.o \
-	    amd_m_control.o amd_m_info.o amd_m_valid.o
-
-luflop: luflopmex.c
-	$(MX) -output luflop luflopmex.c
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 #-------------------------------------------------------------------------------
 # Remove all but the files in the original distribution
 #-------------------------------------------------------------------------------
 
 purge: clean
-	- $(RM) *.mex*
+	- $(RM) *.mex* rename.h
 
 clean:
 	- $(RM) $(CLEAN)
diff --git a/UMFPACK/MATLAB/lu_normest.m b/UMFPACK/MATLAB/lu_normest.m
index e170817..bd311cc 100644
--- a/UMFPACK/MATLAB/lu_normest.m
+++ b/UMFPACK/MATLAB/lu_normest.m
@@ -9,11 +9,6 @@ function rho = lu_normest (A, L, U)
 %
 %       rho = norm (A-L*U, 1)
 %
-% Authors:  William W. Hager, Math Dept., Univ. of Florida
-%       Timothy A. Davis, CISE Dept., Univ. of Florida
-%       Gainesville, FL, 32611, USA.
-%       based on normest1, contributed on November, 1997
-%
 % This code can be quite easily adapted to estimate the 1-norm of any
 % matrix E, where E itself is dense or not explicitly represented, but the
 % computation of E (and E') times a vector is easy.  In this case, our matrix
@@ -36,7 +31,7 @@ function rho = lu_normest (A, L, U)
 % The three places that the matrix-vector multiply E*x is used are highlighted.
 % Note that E is never formed explicity.
 
-% Copyright 1995-2007 by William W. Hager and Timothy A. Davis
+% Copyright 1995-2009 by William W. Hager and Timothy A. Davis
 
 [m n] = size (A) ;
 
diff --git a/UMFPACK/MATLAB/luflop.m b/UMFPACK/MATLAB/luflop.m
index 4a871ed..ad14e84 100644
--- a/UMFPACK/MATLAB/luflop.m
+++ b/UMFPACK/MATLAB/luflop.m
@@ -20,7 +20,7 @@ function f = luflop (L, U)						    %#ok
 %
 % See also LU
 
-% Copyright 1995-2007 by Timothy A. Davis.
+% Copyright 1995-2009 by Timothy A. Davis.
 
 help luflop
 error ('luflop mexFunction not found!  Use umfpack_make to compile luflop.') ;
diff --git a/UMFPACK/MATLAB/luflopmex.c b/UMFPACK/MATLAB/luflopmex.c
index e85b95e..556ad29 100644
--- a/UMFPACK/MATLAB/luflopmex.c
+++ b/UMFPACK/MATLAB/luflopmex.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -18,12 +17,11 @@
         f = 2*Lnz*Unz + sum (Lnz) ;
 
     without allocating O (lunz) space.
-
-    v5.1: port to 64-bit MATLAB
 */
 
 #include "mex.h"
-#include "UFconfig.h"
+#include "SuiteSparse_config.h"
+#define Long SuiteSparse_long
 
 #ifndef TRUE
 #define TRUE (1)
@@ -47,7 +45,7 @@ void mexFunction
 
     double flop_count ;
     double *pflop ;
-    UF_long *Lp, *Li, *Up, *Ui, *Unz, n, k, row, col, p, Lnz_k, Unz_k ;
+    Long *Lp, *Li, *Up, *Ui, *Unz, n, k, row, col, p, Lnz_k, Unz_k ;
     mxArray *Lmatrix, *Umatrix ;
 
     /* ---------------------------------------------------------------------- */
@@ -73,13 +71,13 @@ void mexFunction
 	mexErrMsgTxt ("Usage:  f = luflop (L, U) ;  L and U must be sparse") ;
     }
 
-    Lp = (UF_long *) mxGetJc (Lmatrix) ;
-    Li = (UF_long *) mxGetIr (Lmatrix) ;
+    Lp = (Long *) mxGetJc (Lmatrix) ;
+    Li = (Long *) mxGetIr (Lmatrix) ;
 
-    Up = (UF_long *) mxGetJc (Umatrix) ;
-    Ui = (UF_long *) mxGetIr (Umatrix) ;
+    Up = (Long *) mxGetJc (Umatrix) ;
+    Ui = (Long *) mxGetIr (Umatrix) ;
 
-    Unz = (UF_long *) mxMalloc (n * sizeof (UF_long)) ;
+    Unz = (Long *) mxMalloc (n * sizeof (Long)) ;
 
     /* ---------------------------------------------------------------------- */
     /* count the nonzeros in each row of U */
diff --git a/UMFPACK/MATLAB/umfpack2.m b/UMFPACK/MATLAB/umfpack2.m
index 91e407d..f811378 100644
--- a/UMFPACK/MATLAB/umfpack2.m
+++ b/UMFPACK/MATLAB/umfpack2.m
@@ -36,10 +36,29 @@ function [out1, out2, out3, out4, out5] = umfpack2(in1, in2, in3, in4, in5) %#ok
 % MATLAB-equivalent column in the table above.  Type umfpack_details for more
 % information.
 %
+% An optional final input argument provides control parameters:
+%
+%   opts.prl        >= 0, default 1 (errors only)
+%   opts.strategy   'auto', 'unsymmetric', 'symmetric', default auto
+%   opts.ordering   'amd'       AMD for A+A', COLAMD for A'A
+%                   'default'   use CHOLMOD (AMD then METIS; take best fount)
+%                   'metis'     use METIS
+%                   'none'      no fill-reducing ordering
+%                   'given'     use Qinit (this is default if Qinit present)
+%                   'best'      try AMD/COLAMD, METIS, and NESDIS; take best
+%   opts.tol        default 0.1
+%   opts.symtol     default 0.001
+%   opts.scale      row scaling: 'none', 'sum', 'max'
+%   opts.irstep     max # of steps of iterative refinement, default 2
+%   opts.singletons 'enable','disable' default 'enable'
+%
+% An optional final output argument provides informational output, in a
+% struct whos contents are mostly self-explanatory.
+%
 % See also: lu_normest, colamd, amd, umfpack.
 % To use UMFPACK for an arbitrary b, see umfpack_solve.
 
-% Copyright 1995-2007 by Timothy A. Davis.
+% Copyright 1995-2009 by Timothy A. Davis.
 
 help umfpack2
 error ('umfpack2 mexFunction not found') ;
diff --git a/UMFPACK/MATLAB/umfpack_btf.m b/UMFPACK/MATLAB/umfpack_btf.m
index 87cfc10..f9699e7 100644
--- a/UMFPACK/MATLAB/umfpack_btf.m
+++ b/UMFPACK/MATLAB/umfpack_btf.m
@@ -12,7 +12,7 @@ function [x, info] = umfpack_btf (A, b, Control)
 %
 % See also umfpack, umfpack2, umfpack_details, dmperm
 
-% Copyright 1995-2007 by Timothy A. Davis.
+% Copyright 1995-2009 by Timothy A. Davis.
 
 if (nargin < 2)
     help umfpack_btf
@@ -43,7 +43,8 @@ end
 [p,q,r] = dmperm (A) ;
 nblocks = length (r) - 1 ;
 
-info = [0 0 0] ;    % [nnz(L), nnz(U), nnz(F)], optional 2nd output
+info.nnz_in_L_plus_U = 0 ;
+info.offnz = 0 ;
 
 %-------------------------------------------------------------------------------
 % solve the system
@@ -56,7 +57,7 @@ if (nblocks == 1 | sprank (A) < n)					    %#ok
     %---------------------------------------------------------------------------
 
     [x info2] = umfpack2 (A, '\', b, Control) ;
-    info = [info2(78) info2(79) 0] ;
+    info.nnz_in_L_plus_U = info2.nnz_in_L_plus_U ;
 
 else
 
@@ -93,8 +94,8 @@ else
         F2 = A (1:k1-1, k1:k2) ;
         b (1:k1-1,:) = b (1:k1-1,:) - F2 * x (k1:k2,:) ;
 
-        info (1:2) = info (1:2) + info2 (1:2) ;
-        info (3) = info (3) + nnz (F2) ;
+        info.nnz_in_L_plus_U = info.nnz_in_L_plus_U + info2.nnz_in_L_plus_U ;
+        info.offnz = info.offnz + nnz (F2) ;
 
     end
 
@@ -130,12 +131,12 @@ function [x, info] = solver (A, b, is_triangular, Control)
 if (is_triangular)
     % back substitution only
     x = A \ b ;
-    info = [nnz(A) 0 0] ;
+    info.nnz_in_L_plus_U = nnz (A) ;
 elseif (size (A,1) < 4)
     % a very small matrix, solve it as a dense linear system
     x = full (A) \ b ;
     n = size (A,1) ;
-    info = [(n^2+n)/2 (n^2+n)/2 0] ;
+    info.nnz_in_L_plus_U = n^2 ;
 else
     % solve it as a sparse linear system
     [x info] = umfpack_solve (A, '\', b, Control) ;
diff --git a/UMFPACK/MATLAB/umfpack_demo.m b/UMFPACK/MATLAB/umfpack_demo.m
index 81807ab..ebca358 100644
--- a/UMFPACK/MATLAB/umfpack_demo.m
+++ b/UMFPACK/MATLAB/umfpack_demo.m
@@ -9,7 +9,7 @@ function umfpack_demo (c)
 % See also umfpack, umfpack2, umfpack_make, umfpack_details, umfpack_report,
 % and umfpack_simple.
 
-% Copyright 1995-2007 by Timothy A. Davis.
+% Copyright 1995-2009 by Timothy A. Davis.
 
 %-------------------------------------------------------------------------------
 % get default control parameters
@@ -25,7 +25,7 @@ end
 if (isempty (c))
     c = 1 ;
 end
-control (1) = c ;
+control.prl = c ;
 
 %-------------------------------------------------------------------------------
 % solve a simple system
@@ -33,7 +33,7 @@ control (1) = c ;
 
 fprintf ('\n--------------------------------------------------------------\n') ;
 fprintf ('Factor and solve a small system, Ax=b, using default parameters\n') ;
-if (control (1) > 1)
+if (control.prl > 1)
     fprintf ('(except for verbose printing enabled)\n') ;
 end
 
@@ -56,7 +56,6 @@ fprintf ('Difference between UMFPACK and MATLAB solution: %g\n', ...
 % spy the results
 %-------------------------------------------------------------------------------
 
-figure (1)
 clf
 
 subplot (2,3,1)
@@ -95,11 +94,6 @@ title ('UMFPACK LU factors') ;
 
 subplot (2,3,6)
 fprintf ('\nFactorizing [L, U, P] = lu (A (:, q))\n') ;
-fprintf ('If you are using a version of MATLAB prior to V6.0, then the\n') ;
-fprintf ('following statement (q = colamd (A)) may fail.  Either download\n');
-fprintf ('colamd from http://www.cise.ufl.edu/research/sparse, upgrade to\n') ;
-fprintf ('MATLAB V6.0 or later, or replace the statement with\n') ;
-fprintf ('q = colmmd (A) ;\n') ;
 try
     q = colamd (A) ;
 catch
diff --git a/UMFPACK/MATLAB/umfpack_demo.m.out b/UMFPACK/MATLAB/umfpack_demo.m.out
index c0c60ba..cac4324 100644
--- a/UMFPACK/MATLAB/umfpack_demo.m.out
+++ b/UMFPACK/MATLAB/umfpack_demo.m.out
@@ -3,7 +3,6 @@ umfpack_demo
 Enter the printing level for UMFPACK's output statistics:
 0: none, 1: errors only, 2: statistics, 4: print some outputs
 5: print all output [default is 1]: 
-
 --------------------------------------------------------------
 Factor and solve a small system, Ax=b, using default parameters
 Solving Ax=b via UMFPACK:
@@ -23,17 +22,12 @@ x = Q * (U \ (L \ (P * (R \ b))))
 UMFPACK flop count: 2453
 
 Factorizing [L, U, P] = lu (A (:, q))
-If you are using a version of MATLAB prior to V6.0, then the
-following statement (q = colamd (A)) may fail.  Either download
-colamd from http://www.cise.ufl.edu/research/sparse, upgrade to
-MATLAB V6.0 or later, or replace the statement with
-q = colmmd (A) ;
 
 Solution to Ax=b via MATLAB factorization:
 x = U \ (L \ (P * b)) ; x (q) = x ;
-Difference between UMFPACK and MATLAB solution: 5.55112e-15
+Difference between UMFPACK and MATLAB solution: 1.77636e-14
 
-MATLAB LU flop count: 3160
+MATLAB LU flop count: 3263
 
 --------------------------------------------------------------
 Solve A'x=b:
@@ -53,22 +47,22 @@ norm (P*(R\C)*Q - L*U, 1) = 1.17961e-16 (exact) 5.60533e-17 (estimated)
 Solution to Ax=b via UMFPACK, using the factors of C:
 x = R \ (P' * (L' \ (U' \ (Q' * b)))) ;
 Solution to Ax=b via MATLAB:
-Difference between UMFPACK and MATLAB solution: 3.55271e-15
+Difference between UMFPACK and MATLAB solution: 4.44089e-15
 
 --------------------------------------------------------------
 
 Solve AX=B, where B is n-by-10, and sparse
-Difference between UMFPACK and MATLAB solution: 6.3926e-14
+Difference between UMFPACK and MATLAB solution: 7.18666e-14
 
 --------------------------------------------------------------
 
 Solve AX=B, where B is n-by-10, and sparse, using umfpack_btf
-Difference between UMFPACK and MATLAB solution: 4.41347e-14
+Difference between UMFPACK and MATLAB solution: 6.26305e-14
 
 --------------------------------------------------------------
 
 Solve A'X=B, where B is n-by-10, and sparse
-Difference between UMFPACK and MATLAB solution: 8.90054e-14
+Difference between UMFPACK and MATLAB solution: 8.42113e-14
 
 --------------------------------------------------------------
 det(A): -4.07453e-05  UMFPACK determinant: -4.07453e-05
diff --git a/UMFPACK/MATLAB/umfpack_details.m b/UMFPACK/MATLAB/umfpack_details.m
index 5eb67d7..0ef0b82 100644
--- a/UMFPACK/MATLAB/umfpack_details.m
+++ b/UMFPACK/MATLAB/umfpack_details.m
@@ -110,7 +110,7 @@ function umfpack_details
 %
 % Control = umfpack2 ;
 %
-%       Returns a 20-by-1 vector of default parameter settings for umfpack2.
+%       Returns a struct of default parameter settings for umfpack2.
 %
 % umfpack_report (Control, Info) ;
 %
@@ -126,12 +126,12 @@ function umfpack_details
 %
 % If present, Qinit is a user-supplied 1-by-n permutation vector.  It is an
 % initial fill-reducing column pre-ordering for A; if not present, then colamd
-% or amd are used instead.  If present, Control is a user-supplied 20-by-1
-% array.   Control and Info are optional; if Control is not present, defaults
+% or amd are used instead.  If present, Control is a user-supplied struct.
+% Control and Info are optional; if Control is not present, defaults
 % are used.  If a Control entry is NaN, then the default is used for that entry.
 %
 %
-% Copyright 1995-2007 by Timothy A. Davis, University of Florida.
+% Copyright 1995-2012 by Timothy A. Davis, http://www.suitesparse.com
 % All Rights Reserved.
 % UMFPACK is available under alternate licenses, contact T. Davis for details.
 %
@@ -165,7 +165,7 @@ function umfpack_details
 %   Copyright, this License, and the Availability note are retained,
 %   and a notice that the code was modified is included.
 %
-% Availability: http://www.cise.ufl.edu/research/sparse/umfpack
+% Availability: http://www.suitesparse.com
 %
 % See also umfpack, umfpack2, umfpack_make, umfpack_report,
 %    umfpack_demo, and umfpack_simple.
diff --git a/UMFPACK/MATLAB/umfpack_make.m b/UMFPACK/MATLAB/umfpack_make.m
index 8875ff3..074674c 100644
--- a/UMFPACK/MATLAB/umfpack_make.m
+++ b/UMFPACK/MATLAB/umfpack_make.m
@@ -1,36 +1,50 @@
-function umfpack_make (lapack)
+function umfpack_make
 %UMFPACK_MAKE to compile umfpack2 for use in MATLAB
 %
 % Compiles the umfpack2 mexFunction and then runs a simple demo.
 %
 % Example:
-%   umfpack_make                                % use default LAPACK and BLAS
-%   umfpack_make ('lcc_lib/libmwlapack.lib')    % for Windows
-%   umfpack_make ('-lmwlapack -lmwblas')        % for Linux, Unix, Mac
+%   umfpack_make
 %
-% the string gives the locations of the LAPACK and BLAS libraries.
+% UMFPACK relies on AMD and its own built-in version of COLAMD for its ordering
+% options.  The default is for UMFPACK to also use CHOLMOD, CCOLAMD, CAMD, and
+% METIS for more ordering options as well.  This results in lower fill-in and
+% higher performance.  A copy of METIS 4.0.1 must be placed in ../../metis-4.0.
+% METIS is optional; if not present, it is not used.
 %
 % See also: umfpack, umfpack2, umfpack_details, umfpack_report, umfpack_demo,
 % and umfpack_simple.
 
-% Copyright 1995-2007 by Timothy A. Davis.
+% Copyright 1995-2009 by Timothy A. Davis.
 
-details = 0 ;
+metis_path = '../../metis-4.0' ;
+with_cholmod = exist ([metis_path '/Lib'], 'dir') ;
 
-d = '' ;
-if (~isempty (strfind (computer, '64')))
-    d = ' -largeArrayDims' ;
+details = 0 ;   % set to 1 to print out each mex command as it's executed
+
+flags = '' ;
+is64 = ~isempty (strfind (computer, '64')) ;
+if (is64)
+    flags = ' -largeArrayDims' ;
+end
+
+% MATLAB 8.3.0 now has a -silent option to keep 'mex' from burbling too much
+if (~verLessThan ('matlab', '8.3.0'))
+    flags = ['-silent ' flags] ;
 end
 
-v = getversion ;
+v = version ;
 try
     % ispc does not appear in MATLAB 5.3
     pc = ispc ;
+    mac = ismac ;
 catch
     % if ispc fails, assume we are on a Windows PC if it's not unix
     pc = ~isunix ;
+    mac = 0 ;
 end
-fprintf ('Compiling UMFPACK for MATLAB Version %g\n', v) ;
+
+fprintf ('Compiling UMFPACK for MATLAB Version %s\n', v) ;
 
 if (pc)
     obj = 'obj' ;
@@ -47,73 +61,81 @@ kk = 0 ;
 % This is exceedingly ugly.  The MATLAB mex command needs to be told where to
 % fine the LAPACK and BLAS libraries, which is a real portability nightmare.
 
-if (nargin < 1)
-    if (pc)
-	if (v < 6.5)
-	    % MATLAB 6.1 and earlier: use the version supplied here
-	    lapack = 'lcc_lib/libmwlapack.lib' ;
-	    fprintf ('Using %s.  If this fails with dgemm and others\n',lapack);
-	    fprintf ('undefined, then edit umfpack_make.m and modify the') ;
-	    fprintf (' statement:\nlapack = ''%s'' ;\n', lapack) ;
-	elseif (v < 7.5)
-	    lapack = 'libmwlapack.lib' ;
-        else
-            % MATLAB R2007b (7.5) made the problem worse
-	    lapack = 'libmwlapack.lib libmwblas.lib' ;
-	end
+if (pc)
+    if (verLessThan ('matlab', '6.5'))
+        % MATLAB 6.1 and earlier: use the version supplied here
+        lapack = 'lcc_lib/libmwlapack.lib' ;
+        fprintf ('Using %s.  If this fails with dgemm and others\n',lapack);
+        fprintf ('undefined, then edit umfpack_make.m and modify the') ;
+        fprintf (' statement:\nlapack = ''%s'' ;\n', lapack) ;
+    elseif (verLessThan ('matlab', '7.5'))
+        lapack = 'libmwlapack.lib' ;
     else
-	% For other systems, mex should find lapack on its own, but this has
-	% been broken in MATLAB R2007a; the following is now required.
-        if (v < 7.5)
-            lapack = '-lmwlapack' ;
-        else
-            % MATLAB R2007b (7.5) made the problem worse
-            lapack = '-lmwlapack -lmwblas' ;
-        end
+        % MATLAB R2007b (7.5) made the problem worse
+        lapack = 'libmwlapack.lib libmwblas.lib' ;
+    end
+else
+    % For other systems, mex should find lapack on its own, but this has
+    % been broken in MATLAB R2007a; the following is now required.
+    if (verLessThan ('matlab', '7.5'))
+        lapack = '-lmwlapack' ;
+    else
+        % MATLAB R2007b (7.5) made the problem worse
+        lapack = '-lmwlapack -lmwblas' ;
     end
 end
 
-%-------------------------------------------------------------------------------
-% -DNPOSIX option (for sysconf and times timer routines)
-%-------------------------------------------------------------------------------
+if (is64 && ~verLessThan ('matlab', '7.8'))
+    % versions 7.8 and later on 64-bit platforms use a 64-bit BLAS
+    fprintf ('with 64-bit BLAS\n') ;
+    flags = [flags ' -DBLAS64'] ;
+end
 
-posix = '' ;
-
-% if (~pc)
-%     msg = [ ...
-%    '--------------------------------------------------------------\n', ...
-%    '\nUMFPACK can use the POSIX routines sysconf () and times ()\n', ...
-%    'to provide CPU time and wallclock time statistics.  If you do not\n', ...
-%    'have a POSIX-compliant operating system, then UMFPACK won''t\n', ...
-%    'compile.  If you don''t know which option to pick, try the\n', ...
-%    'default.  If you get an error saying that sysconf and/or times\n', ...
-%    'are not defined, then recompile with the non-POSIX option.\n', ...
-%    '\nPlease select one of the following options:\n', ...
-%    '    1:  use POSIX sysconf and times routines (default)\n', ...
-%    '    2:  do not use POSIX routines\n'] ;
-%    fprintf (msg) ;
-%    posix = str2num (input (': ', 's')) ;
-%    if (isempty (posix))
-%	posix = 1 ;
-%    end
-%    if (posix == 2)
-%        fprintf ('\nNot using POSIX sysconf and times routines.\n') ;
-%        posix = ' -DNPOSIX' ;
-%    else
-%        fprintf ('\nUsing POSIX sysconf and times routines.\n') ;
-%        posix = '' ;
-%    end
-% end
+if (~(pc || mac))
+    % for POSIX timing routine
+    lapack = [lapack ' -lrt'] ;
+end
 
 %-------------------------------------------------------------------------------
-% mex command
+% Source and include directories
 %-------------------------------------------------------------------------------
 
 umfdir = '../Source/' ;
 amddir = '../../AMD/Source/' ;
-incdir = ' -I../Include -I../Source -I../../AMD/Include -I../../UFconfig' ;
-mx = sprintf ('mex -O%s%s%s ', posix, incdir, d) ;
-% fprintf ('compile options:\n%s\n', mx) ;
+incdir = ' -I. -I../Include -I../Source -I../../AMD/Include -I../../SuiteSparse_config' ;
+
+if (with_cholmod)
+    incdir = [incdir ' -I../../CCOLAMD/Include -I../../CAMD/Include ' ...
+    ' -I../../CHOLMOD/Include -I' metis_path '/Lib -I../../COLAMD/Include'] ;
+end
+
+%-------------------------------------------------------------------------------
+% METIS patch
+%-------------------------------------------------------------------------------
+
+% fix the METIS 4.0.1 rename.h file
+if (with_cholmod)
+    fprintf ('with CHOLMOD, CAMD, CCOLAMD, and METIS\n') ;
+    f = fopen ('rename.h', 'w') ;
+    if (f == -1)
+        error ('unable to create rename.h in current directory') ;
+    end
+    fprintf (f, '/* do not edit this file; generated by umfpack_make.m */\n') ;
+    fprintf (f, '#undef log2\n') ;
+    fprintf (f, '#include "%s/Lib/rename.h"\n', metis_path) ;
+    fprintf (f, '#undef log2\n') ;
+    fprintf (f, '#define log2 METIS__log2\n') ;
+    fprintf (f, '#include "mex.h"\n') ;
+    fprintf (f, '#define malloc mxMalloc\n') ;
+    fprintf (f, '#define free mxFree\n') ;
+    fprintf (f, '#define calloc mxCalloc\n') ;
+    fprintf (f, '#define realloc mxRealloc\n') ;
+    fclose (f) ;
+    flags = [' -DNSUPERNODAL -DNMODIFY -DNMATRIXOPS ' flags] ;
+else
+    fprintf ('without CHOLMOD, CAMD, CCOLAMD, and METIS\n') ;
+    flags = [' -DNCHOLMOD ' flags] ;
+end
 
 %-------------------------------------------------------------------------------
 % source files
@@ -132,13 +154,13 @@ umfch = { 'assemble', 'blas3_update', ...
         'report_vector', 'row_search', 'scale_column', ...
         'set_stats', 'solve', 'symbolic_usage', 'transpose', ...
         'tuple_lengths', 'usolve', 'utsolve', 'valid_numeric', ...
-        'valid_symbolic', 'grow_front', 'start_front', '2by2', ...
+        'valid_symbolic', 'grow_front', 'start_front', ...
 	'store_lu', 'scale' } ;
 
 % non-user-callable umf_*.[ch] files, int versions only (no real/complex):
 umfint = { 'analyze', 'apply_order', 'colamd', 'free', 'fsize', ...
         'is_permutation', 'malloc', 'realloc', 'report_perm', ...
-	'singletons' } ;
+	'singletons', 'cholmod' } ;
 
 % non-user-callable and user-callable amd_*.[ch] files (int versions only):
 amdsrc = { 'aat', '1', '2', 'dump', 'postorder', 'post_tree', 'defaults', ...
@@ -160,6 +182,150 @@ generic = { 'timer', 'tictoc', 'global' } ;
 
 M = cell (0) ;
 
+% add the SuiteSparse_timer function
+other_source = { '../../SuiteSparse_config/SuiteSparse_config' } ;
+
+% add CHOLMOD and its supporting libraries
+if (with_cholmod)
+
+    ordering_src = { ...
+        '../../CAMD/Source/camd_1', ...
+        '../../CAMD/Source/camd_2', ...
+        '../../CAMD/Source/camd_aat', ...
+        '../../CAMD/Source/camd_control', ...
+        '../../CAMD/Source/camd_defaults', ...
+        '../../CAMD/Source/camd_dump', ...
+        '../../CAMD/Source/camd_global', ...
+        '../../CAMD/Source/camd_info', ...
+        '../../CAMD/Source/camd_order', ...
+        '../../CAMD/Source/camd_postorder', ...
+        '../../CAMD/Source/camd_preprocess', ...
+        '../../CAMD/Source/camd_valid', ...
+        '../../COLAMD/Source/colamd', ...
+        '../../COLAMD/Source/colamd_global', ...
+        '../../CCOLAMD/Source/ccolamd', ...
+        '../../CCOLAMD/Source/ccolamd_global' } ;
+
+    metis_src = {
+        'Lib/balance', ...
+        'Lib/bucketsort', ...
+        'Lib/ccgraph', ...
+        'Lib/coarsen', ...
+        'Lib/compress', ...
+        'Lib/debug', ...
+        'Lib/estmem', ...
+        'Lib/fm', ...
+        'Lib/fortran', ...
+        'Lib/frename', ...
+        'Lib/graph', ...
+        'Lib/initpart', ...
+        'Lib/kmetis', ...
+        'Lib/kvmetis', ...
+        'Lib/kwayfm', ...
+        'Lib/kwayrefine', ...
+        'Lib/kwayvolfm', ...
+        'Lib/kwayvolrefine', ...
+        'Lib/match', ...
+        'Lib/mbalance2', ...
+        'Lib/mbalance', ...
+        'Lib/mcoarsen', ...
+        'Lib/memory', ...
+        'Lib/mesh', ...
+        'Lib/meshpart', ...
+        'Lib/mfm2', ...
+        'Lib/mfm', ...
+        'Lib/mincover', ...
+        'Lib/minitpart2', ...
+        'Lib/minitpart', ...
+        'Lib/mkmetis', ...
+        'Lib/mkwayfmh', ...
+        'Lib/mkwayrefine', ...
+        'Lib/mmatch', ...
+        'Lib/mmd', ...
+        'Lib/mpmetis', ...
+        'Lib/mrefine2', ...
+        'Lib/mrefine', ...
+        'Lib/mutil', ...
+        'Lib/myqsort', ...
+        'Lib/ometis', ...
+        'Lib/parmetis', ...
+        'Lib/pmetis', ...
+        'Lib/pqueue', ...
+        'Lib/refine', ...
+        'Lib/separator', ...
+        'Lib/sfm', ...
+        'Lib/srefine', ...
+        'Lib/stat', ...
+        'Lib/subdomains', ...
+        'Lib/timing', ...
+        'Lib/util' } ;
+
+    for i = 1:length (metis_src)
+        metis_src {i} = [metis_path '/' metis_src{i}] ;
+    end
+
+    cholmod_src = {
+        '../../CHOLMOD/Core/cholmod_aat', ...
+        '../../CHOLMOD/Core/cholmod_add', ...
+        '../../CHOLMOD/Core/cholmod_band', ...
+        '../../CHOLMOD/Core/cholmod_change_factor', ...
+        '../../CHOLMOD/Core/cholmod_common', ...
+        '../../CHOLMOD/Core/cholmod_complex', ...
+        '../../CHOLMOD/Core/cholmod_copy', ...
+        '../../CHOLMOD/Core/cholmod_dense', ...
+        '../../CHOLMOD/Core/cholmod_error', ...
+        '../../CHOLMOD/Core/cholmod_factor', ...
+        '../../CHOLMOD/Core/cholmod_memory', ...
+        '../../CHOLMOD/Core/cholmod_sparse', ...
+        '../../CHOLMOD/Core/cholmod_transpose', ...
+        '../../CHOLMOD/Core/cholmod_triplet', ...
+        '../../CHOLMOD/Check/cholmod_check', ...
+        '../../CHOLMOD/Cholesky/cholmod_amd', ...
+        '../../CHOLMOD/Cholesky/cholmod_analyze', ...
+        '../../CHOLMOD/Cholesky/cholmod_colamd', ...
+        '../../CHOLMOD/Cholesky/cholmod_etree', ...
+        '../../CHOLMOD/Cholesky/cholmod_postorder', ...
+        '../../CHOLMOD/Cholesky/cholmod_rowcolcounts', ...
+        '../../CHOLMOD/Partition/cholmod_ccolamd', ...
+        '../../CHOLMOD/Partition/cholmod_csymamd', ...
+        '../../CHOLMOD/Partition/cholmod_camd', ...
+        '../../CHOLMOD/Partition/cholmod_metis', ...
+        '../../CHOLMOD/Partition/cholmod_nesdis' } ;
+
+    other_source = [other_source cholmod_src metis_src ordering_src] ;
+    % other_source = [other_source { '../User/umfpack_l_cholmod' }] ;       %#ok
+end
+
+if (pc && with_cholmod)
+    % Windows does not have drand48 and srand48, required by METIS.  Use
+    % drand48 and srand48 in CHOLMOD/MATLAB/Windows/rand48.c instead.
+    other_source = [other_source {'../../CHOLMOD/MATLAB/Windows/rand48'}] ;
+    incdir = [incdir ' -I../../CHOLMOD/MATLAB/Windows'] ;
+end
+
+%-------------------------------------------------------------------------------
+% mex command
+%-------------------------------------------------------------------------------
+
+% with optimization:
+mx = sprintf ('mex -O%s%s ', incdir, flags) ;
+% no optimization:
+%% mx = sprintf ('mex -g %s%s%s ', incdir, flags) ;
+fprintf ('compile options:\n%s\n', mx) ;
+
+%-------------------------------------------------------------------------------
+% CHOLMOD, CAMD, C*OLAMD, METIS, SuiteSparse_config, and rand48 for Windows
+%-------------------------------------------------------------------------------
+
+for k = 1:length(other_source)
+    fs = other_source {k} ;
+    slash = strfind (fs, '/') ;
+    slash = slash (end) + 1 ;
+    o = fs (slash:end) ;
+    kk = cmd (sprintf ('%s -DDLONG -c %s.c', mx, fs), kk, details) ;
+    M {end+1} = [o '.' obj] ;
+end
+
 %-------------------------------------------------------------------------------
 % Create the umfpack2 and amd2 mexFunctions for MATLAB (int versions only)
 %-------------------------------------------------------------------------------
@@ -233,7 +399,7 @@ for k = 1:length(generic)
 end
 
 %----------------------------------------
-% AMD routines (int only)
+% AMD routines (long only)
 %----------------------------------------
 
 for k = 1:length(amdsrc)
@@ -291,7 +457,15 @@ if (length (dir (src)) == 0)	%#ok
     fprintf ('File does not exist: %s\n', src) ;
     error ('File does not exist') ;
 end
-copyfile (src, dst) ;
+try
+    copyfile (src, dst) ;
+catch ME
+    % ignore errors of the form "cp: preserving permissions: ...
+    % Operation not supported".  rethrow all other errors.
+    if (isempty (strfind (ME.message, 'Operation not supported')))
+        rethrow (ME) ;
+    end
+end
 
 %-------------------------------------------------------------------------------
 
@@ -325,10 +499,3 @@ src = sprintf (src, file1, obj) ;
 dst = sprintf (dst, kind, file2, obj) ;
 mvfile (src, dst) ;
 M {end + 1} = dst ;
-
-
-%-------------------------------------------------------------------------------
-function v = getversion
-% determine the MATLAB version, and return it as a double.
-v = sscanf (version, '%d.%d.%d') ;
-v = 10.^(0:-1:-(length(v)-1)) * v ;
diff --git a/UMFPACK/MATLAB/umfpack_report.m b/UMFPACK/MATLAB/umfpack_report.m
index 627b394..c69c58a 100644
--- a/UMFPACK/MATLAB/umfpack_report.m
+++ b/UMFPACK/MATLAB/umfpack_report.m
@@ -8,7 +8,7 @@ function umfpack_report (Control, Info)
 % information returned by umfpack2 in the Info array.  If Control is
 % an empty matrix, then the default control settings are printed.
 %
-% Control is 20-by-1, and Info is 90-by-1.  Not all entries are used.
+% Control and Info are structs.
 %
 % Alternative usages:
 %
@@ -16,7 +16,6 @@ function umfpack_report (Control, Info)
 %                                       and the Info array.
 %       umfpack_report (Control) ;      print the control parameters only.
 %       umfpack_report ;                print the default control parameters
-%                                       and an empty Info array.
 %
 % See also umfpack, umfpack2, umfpack_make, umfpack_details,
 % umfpack_demo, and umfpack_simple.
@@ -28,310 +27,13 @@ function umfpack_report (Control, Info)
 %-------------------------------------------------------------------------------
 
 % The contents of Control and Info are defined in umfpack.h
-if (nargin < 1)
-    Control = [] ;
-end
-if (nargin < 2)
-    Info = [] ;
-end
-if (isempty (Control))
+if (nargin < 1 || isempty (Control))
     Control = umfpack2 ;
 end
-if (isempty (Info))
-    Info = [ 0 (-ones (1, 89)) ] ;
-end
-
-%-------------------------------------------------------------------------------
-% control settings
-%-------------------------------------------------------------------------------
-
-fprintf ('\nUMFPACK:  Control settings:\n\n') ;
-fprintf ('    Control (1): print level: %d\n', Control (1)) ;
-fprintf ('    Control (2): dense row parameter:    %g\n', Control (2)) ;
-fprintf ('       "dense" rows have    > max (16, (%g)*16*sqrt(n_col)) entries\n', Control (2)) ;
-fprintf ('    Control (3): dense column parameter: %g\n', Control (3)) ;
-fprintf ('       "dense" columns have > max (16, (%g)*16*sqrt(n_row)) entries\n', Control (3)) ;
-fprintf ('    Control (4): pivot tolerance: %g\n', Control (4)) ;
-fprintf ('    Control (5): max block size for dense matrix kernels: %d\n', Control (5)) ;
-prstrat ('    Control (6): strategy: %g ', Control (6)) ;
-fprintf ('    Control (7): initial allocation ratio: %g\n', Control (7)) ;
-fprintf ('    Control (8): max iterative refinement steps: %d\n', Control (8)) ;
-fprintf ('    Control (13): 2-by-2 pivot tolerance: %g\n', Control (13)) ;
-fprintf ('    Control (14): Q fixed during numeric factorization: %g ', Control (14)) ;
-if (Control (14) > 0)
-    fprintf ('(yes)\n') ;
-elseif (Control (14) < 0)
-    fprintf ('(no)\n') ;
-else
-    fprintf ('(auto)\n') ;
-end
-fprintf ('    Control (15): AMD dense row/column parameter: %g\n', Control (15)) ;
-fprintf ('       "dense" rows/columns in A+A'' have > max (16, (%g)*sqrt(n)) entries.\n', Control (15)) ;
-fprintf ('        Only used if the AMD ordering is used.\n') ;
-fprintf ('    Control (16): diagonal pivot tolerance: %g\n', Control (16)) ;
-fprintf ('        Only used if diagonal pivoting is attempted.\n') ;
-
-fprintf ('    Control (17): scaling option: %g ', Control (17)) ;
-if (Control (17) == 0)
-    fprintf ('(none)\n') ;
-elseif (Control (17) == 2)
-    fprintf ('(scale the matrix by\n') ;
-    fprintf ('        dividing each row by max. abs. value in each row)\n') ;
-else
-    fprintf ('(scale the matrix by\n') ;
-    fprintf ('        dividing each row by sum of abs. values in each row)\n') ;
-end
-
-fprintf ('    Control (18): frontal matrix allocation ratio: %g\n', Control (18)) ;
-fprintf ('    Control (19): drop tolerance: %g\n', Control (19)) ;
-fprintf ('    Control (20): AMD and COLAMD aggressive absorption: %g ', Control (20)) ;
-yes_no (Control (20)) ;
-
-% compile-time options:
-
-fprintf ('\n  The following options can only be changed at compile-time:\n') ;
-
-if (Control (9) == 1)
-    fprintf ('    Control (9): compiled to use the BLAS\n') ;
-else
-    fprintf ('    Control (9): compiled without the BLAS\n') ;
-    fprintf ('        (you will not get the best possible performance)\n') ;
-end
-
-if (Control (10) == 1)
-    fprintf ('    Control (10): compiled for MATLAB\n') ;
-elseif (Control (10) == 2)
-    fprintf ('    Control (10): compiled for MATLAB\n') ;
-else
-    fprintf ('    Control (10): not compiled for MATLAB\n') ;
-    fprintf ('        Printing will be in terms of 0-based matrix indexing,\n') ;
-    fprintf ('        not 1-based as is expected in MATLAB.  Diary output may\n') ;
-    fprintf ('        not be properly recorded.\n') ;
-end
-
-if (Control (11) == 2)
-    fprintf ('    Control (11): uses POSIX times ( ) to get CPU time and wallclock time.\n') ;
-elseif (Control (11) == 1)
-    fprintf ('    Control (11): uses getrusage to get CPU time.\n') ;
-else
-    fprintf ('    Control (11): uses ANSI C clock to get CPU time.\n') ;
-    fprintf ('        The CPU time may wrap around, type "help cputime".\n') ;
-end
-
-if (Control (12) == 1)
-    fprintf ('    Control (12): compiled with debugging enabled\n') ;
-    fprintf ('        ###########################################\n') ;
-    fprintf ('        ### This will be exceedingly slow! ########\n') ;
-    fprintf ('        ###########################################\n') ;
-else
-    fprintf ('    Control (12): compiled for normal operation (no debugging)\n') ;
+fprintf ('\nUMFPACK Control:\n') ;
+disp (Control) ;
+if (nargin > 1 && ~isempty (Info))
+    fprintf ('\nUMFPACK Info:\n') ;
+    disp (Info) ;
 end
 
-%-------------------------------------------------------------------------------
-% Info:
-%-------------------------------------------------------------------------------
-
-if (nargin == 1)
-    return
-end
-
-status = Info (1) ;
-fprintf ('\nUMFPACK status:  Info (1): %d, ', status) ;
-
-if (status == 0)
-    fprintf ('OK\n') ;
-elseif (status == 1)
-    fprintf ('WARNING  matrix is singular\n') ;
-elseif (status == -1)
-    fprintf ('ERROR    out of memory\n') ;
-elseif (status == -3)
-    fprintf ('ERROR    numeric LU factorization is invalid\n') ;
-elseif (status == -4)
-    fprintf ('ERROR    symbolic LU factorization is invalid\n') ;
-elseif (status == -5)
-    fprintf ('ERROR    required argument is missing\n') ;
-elseif (status == -6)
-    fprintf ('ERROR    n <= 0\n') ;
-elseif (status <= -7 & status >= -12 | status == -14)			    %#ok
-    fprintf ('ERROR    matrix A is corrupted\n') ;
-elseif (status == -13)
-    fprintf ('ERROR    invalid system\n') ;
-elseif (status == -15)
-    fprintf ('ERROR    invalid permutation\n') ;
-elseif (status == -911)
-    fprintf ('ERROR    internal error!\n') ;
-    fprintf ('Please report this error to Tim Davis (davis at cise.ufl.edu)\n') ;
-else
-    fprintf ('ERROR    unrecognized error.  Info array corrupted\n') ;
-end
-
-fprintf ('    (a -1 means the entry has not been computed):\n') ;
-
-fprintf ('\n  Basic statistics:\n') ;
-fprintf ('    Info (2):  %d, # of rows of A\n', Info (2)) ;
-fprintf ('    Info (17): %d, # of columns of A\n', Info (17)) ;
-fprintf ('    Info (3): %d, nnz (A)\n', Info (3)) ;
-fprintf ('    Info (4): %d, Unit size, in bytes, for memory usage reported below\n', Info (4)) ;
-fprintf ('    Info (5): %d, size of int (in bytes)\n', Info (5)) ;
-fprintf ('    Info (6): %d, size of UF_long (in bytes)\n', Info (6)) ;
-fprintf ('    Info (7): %d, size of pointer (in bytes)\n', Info (7)) ;
-fprintf ('    Info (8): %d, size of numerical entry (in bytes)\n', Info (8)) ;
-
-fprintf ('\n  Pivots with zero Markowitz cost removed to obtain submatrix S:\n') ;
-fprintf ('    Info (57): %d, # of pivots with one entry in pivot column\n', Info (57)) ;
-fprintf ('    Info (58): %d, # of pivots with one entry in pivot row\n', Info (58)) ;
-fprintf ('    Info (59): %d, # of rows/columns in submatrix S (if square)\n', Info (59)) ;
-fprintf ('    Info (60): ') ;
-if (Info (60) > 0)
-    fprintf ('submatrix S square and diagonal preserved\n') ;
-elseif (Info  (60) == 0)
-    fprintf ('submatrix S not square or diagonal not preserved\n') ;
-else
-    fprintf ('\n') ;
-end
-fprintf ('    Info (9):  %d, # of "dense" rows in S\n', Info (9)) ;
-fprintf ('    Info (10): %d, # of empty rows in S\n', Info (10)) ;
-fprintf ('    Info (11): %d, # of "dense" columns in S\n', Info (11)) ;
-fprintf ('    Info (12): %d, # of empty columns in S\n', Info (12)) ;
-fprintf ('    Info (34): %g, symmetry of pattern of S\n', Info (34)) ;
-fprintf ('    Info (35): %d, # of off-diagonal nonzeros in S+S''\n', Info (35)) ;
-fprintf ('    Info (36): %d, nnz (diag (S))\n', Info (36)) ;
-
-fprintf ('\n  2-by-2 pivoting to place large entries on diagonal:\n') ;
-fprintf ('    Info (52): %d, # of small diagonal entries of S\n', Info (52)) ;
-fprintf ('    Info (53): %d, # of unmatched small diagonal entries\n', Info (53)) ;
-fprintf ('    Info (54): %g, symmetry of P2*S\n', Info (54)) ;
-fprintf ('    Info (55): %d, # of off-diagonal entries in (P2*S)+(P2*S)''\n', Info (55)) ;
-fprintf ('    Info (56): %d, nnz (diag (P2*S))\n', Info (56)) ;
-
-fprintf ('\n  AMD results, for strict diagonal pivoting:\n') ;
-fprintf ('    Info (37): %d, est. nz in L and U\n', Info (37)) ;
-fprintf ('    Info (38): %g, est. flop count\n', Info (38)) ;
-fprintf ('    Info (39): %g, # of "dense" rows in S+S''\n', Info (39)) ;
-fprintf ('    Info (40): %g, est. max. nz in any column of L\n', Info (40)) ;
-
-fprintf ('\n  Final strategy selection, based on the analysis above:\n') ;
-prstrat ('    Info (19): %d, strategy used ', Info (19)) ;
-fprintf ('    Info (20): %d, ordering used ', Info (20)) ;
-if (Info (20) == 0)
-    fprintf ('(COLAMD on A)\n') ;
-elseif (Info (20) == 1)
-    fprintf ('(AMD on A+A'')\n') ;
-elseif (Info (20) == 2)
-    fprintf ('(provided by user)\n') ;
-else
-    fprintf ('(undefined ordering option)\n') ;
-end
-fprintf ('    Info (32): %d, Q fixed during numeric factorization: ', Info (32)) ;
-yes_no (Info (32)) ;
-fprintf ('    Info (33): %d, prefer diagonal pivoting: ', Info (33)) ;
-yes_no (Info (33)) ;
-
-fprintf ('\n  symbolic analysis time and memory usage:\n') ;
-fprintf ('    Info (13): %d, defragmentations during symbolic analysis\n', Info (13)) ;
-fprintf ('    Info (14): %d, memory used during symbolic analysis (Units)\n', Info (14)) ;
-fprintf ('    Info (15): %d, final size of symbolic factors (Units)\n', Info (15)) ;
-fprintf ('    Info (16): %.2f, symbolic analysis CPU time (seconds)\n', Info (16)) ;
-fprintf ('    Info (18): %.2f, symbolic analysis wall clock time (seconds)\n', Info (18)) ;
-
-fprintf ('\n  Estimates computed in the symbolic analysis:\n') ;
-fprintf ('    Info (21): %d, est. size of LU factors (Units)\n', Info (21)) ;
-fprintf ('    Info (22): %d, est. total peak memory usage (Units)\n', Info (22)) ;
-fprintf ('    Info (23): %d, est. factorization flop count\n', Info (23)) ;
-fprintf ('    Info (24): %d, est. nnz (L)\n', Info (24)) ;
-fprintf ('    Info (25): %d, est. nnz (U)\n', Info (25)) ;
-fprintf ('    Info (26): %d, est. initial size, variable-part of LU (Units)\n', Info (26)) ;
-fprintf ('    Info (27): %d, est. peak size, of variable-part of LU (Units)\n', Info (27)) ;
-fprintf ('    Info (28): %d, est. final size, of variable-part of LU (Units)\n', Info (28)) ;
-fprintf ('    Info (29): %d, est. max frontal matrix size (# of entries)\n', Info (29)) ;
-fprintf ('    Info (30): %d, est. max # of rows in frontal matrix\n', Info (30)) ;
-fprintf ('    Info (31): %d, est. max # of columns in frontal matrix\n', Info (31)) ;
-
-fprintf ('\n  Computed in the numeric factorization (estimates shown above):\n') ;
-fprintf ('    Info (41): %d, size of LU factors (Units)\n', Info (41)) ;
-fprintf ('    Info (42): %d, total peak memory usage (Units)\n', Info (42)) ;
-fprintf ('    Info (43): %d, factorization flop count\n', Info (43)) ;
-fprintf ('    Info (44): %d, nnz (L)\n', Info (44)) ;
-fprintf ('    Info (45): %d, nnz (U)\n', Info (45)) ;
-fprintf ('    Info (46): %d, initial size of variable-part of LU (Units)\n', Info (46)) ;
-fprintf ('    Info (47): %d, peak size of variable-part of LU (Units)\n', Info (47)) ;
-fprintf ('    Info (48): %d, final size of variable-part of LU (Units)\n', Info (48)) ;
-fprintf ('    Info (49): %d, max frontal matrix size (# of numerical entries)\n', Info (49)) ;
-fprintf ('    Info (50): %d, max # of rows in frontal matrix\n', Info (50)) ;
-fprintf ('    Info (51): %d, max # of columns in frontal matrix\n', Info (51)) ;
-
-fprintf ('\n  Computed in the numeric factorization (no estimates computed a priori):\n') ;
-fprintf ('    Info (61): %d, defragmentations during numeric factorization\n', Info (61)) ;
-fprintf ('    Info (62): %d, reallocations during numeric factorization\n', Info (62)) ;
-fprintf ('    Info (63): %d, costly reallocations during numeric factorization\n', Info (63)) ;
-fprintf ('    Info (64): %d, integer indices in compressed pattern of L and U\n', Info (64)) ;
-fprintf ('    Info (65): %d, numerical values stored in L and U\n', Info (65)) ;
-fprintf ('    Info (66): %.2f, numeric factorization CPU time (seconds)\n', Info (66)) ;
-fprintf ('    Info (76): %.2f, numeric factorization wall clock time (seconds)\n', Info (76)) ;
-if (Info (66) > 0.05 & Info (43) > 0)					    %#ok
-fprintf ('    mflops in numeric factorization phase: %.2f\n', 1e-6 * Info (43) / Info (66)) ;
-end
-fprintf ('    Info (67): %d, nnz (diag (U))\n', Info (67)) ;
-fprintf ('    Info (68): %g, reciprocal condition number estimate\n', Info (68)) ;
-fprintf ('    Info (69): %g, matrix was ', Info (69)) ;
-if (Info (69) == 0)
-    fprintf ('not scaled\n') ;
-elseif (Info (69) == 2)
-    fprintf ('scaled (row max)\n') ;
-else
-    fprintf ('scaled (row sum)\n') ;
-end
-fprintf ('    Info (70): %g, min. scale factor of rows of A\n', Info (70)) ;
-fprintf ('    Info (71): %g, max. scale factor of rows of A\n', Info (71)) ;
-fprintf ('    Info (72): %g, min. abs. on diagonal of U\n', Info (72)) ;
-fprintf ('    Info (73): %g, max. abs. on diagonal of U\n', Info (73)) ;
-fprintf ('    Info (74): %g, initial allocation parameter used\n', Info (74)) ;
-fprintf ('    Info (75): %g, # of forced updates due to frontal growth\n', Info (75)) ;
-fprintf ('    Info (77): %d, # of off-diaogonal pivots\n', Info (77)) ;
-fprintf ('    Info (78): %d, nnz (L), if no small entries dropped\n', Info (78)) ;
-fprintf ('    Info (79): %d, nnz (U), if no small entries dropped\n', Info (79)) ;
-fprintf ('    Info (80): %d, # of small entries dropped\n', Info (80)) ;
-
-fprintf ('\n  Computed in the solve step:\n') ;
-fprintf ('    Info (81): %d, iterative refinement steps taken\n', Info (81)) ;
-fprintf ('    Info (82): %d, iterative refinement steps attempted\n', Info (82)) ;
-fprintf ('    Info (83): %g, omega(1), sparse-backward error estimate\n', Info (83)) ;
-fprintf ('    Info (84): %g, omega(2), sparse-backward error estimate\n', Info (84)) ;
-fprintf ('    Info (85): %d, solve flop count\n', Info (85)) ;
-fprintf ('    Info (86): %.2f, solve CPU time (seconds)\n', Info (86)) ;
-fprintf ('    Info (87): %.2f, solve wall clock time (seconds)\n', Info (87)) ;
-
-fprintf ('\n    Info (88:90): unused\n\n') ;
-
-%-------------------------------------------------------------------------------
-
-function prstrat (fmt, strategy)
-% prstrat print the ordering strategy
-fprintf (fmt, strategy) ;
-if (strategy == 1)
-    fprintf ('(unsymmetric)\n') ;
-    fprintf ('        Q = COLAMD (A), Q refined during numerical\n') ;
-    fprintf ('        factorization, and no attempt at diagonal pivoting.\n') ;
-elseif (strategy == 2)
-    fprintf ('(symmetric, with 2-by-2 pivoting)\n') ;
-    fprintf ('        P2 = row permutation to place large values on the diagonal\n') ;
-    fprintf ('        Q = AMD (P2*A+(P2*A)''), Q not refined during numeric factorization,\n') ;
-    fprintf ('        and diagonal pivoting attempted.\n') ;
-elseif (strategy == 3)
-    fprintf ('(symmetric)\n') ;
-    fprintf ('        Q = AMD (A+A''), Q not refined during numeric factorization,\n') ;
-    fprintf ('        and diagonal pivoting (P=Q'') attempted.\n') ;
-else
-    % strategy = 0 ;
-    fprintf ('(auto)\n') ;
-end
-
-%-------------------------------------------------------------------------------
-
-function yes_no (s)
-% yes_no print yes or no
-if (s == 0)
-    fprintf ('(no)\n') ;
-else
-    fprintf ('(yes)\n') ;
-end
diff --git a/UMFPACK/MATLAB/umfpack_simple.m b/UMFPACK/MATLAB/umfpack_simple.m
index e96ef07..4e3e281 100644
--- a/UMFPACK/MATLAB/umfpack_simple.m
+++ b/UMFPACK/MATLAB/umfpack_simple.m
@@ -3,7 +3,7 @@
 % Example:
 %   umfpack_simple
 %
-% Copyright 1995-2007 by Timothy A. Davis.
+% Copyright 1995-2007 by Timothy A. Davis, http://www.suitesparse.com
 %
 % UMFPACK License:
 %
@@ -13,8 +13,6 @@
 %     modify it under the terms of the GNU General Public
 %     License as published by the Free Software Foundation; either
 %     version 2 of the License, or (at your option) any later version.
-
-% Availability: http://www.cise.ufl.edu/research/sparse/umfpack
 %
 % See also: umfpack, umfpack2, umfpack_details
 
diff --git a/UMFPACK/MATLAB/umfpack_solve.m b/UMFPACK/MATLAB/umfpack_solve.m
index 6464586..fca1702 100644
--- a/UMFPACK/MATLAB/umfpack_solve.m
+++ b/UMFPACK/MATLAB/umfpack_solve.m
@@ -41,11 +41,10 @@ if ((op == '\' & n ~= m1) | (op == '/' & n1 ~= m))			    %#ok
 end
 
 if (nargin < 4)
+    % get default controls
     Control = umfpack2 ;
 end
 
-info = [0 0 0] ; % [nnz(L), nnz(U), 0], optional 2nd output
-
 %-------------------------------------------------------------------------------
 % solve the system
 %-------------------------------------------------------------------------------
@@ -56,19 +55,18 @@ if (op == '\')
 
 	% A is not sparse, so just use MATLAB
 	x = A\b ;
+        info.nnz_in_L_plus_U = n^2 ;
 
     elseif (n1 == 1 & ~issparse (b))					    %#ok
 
 	% the UMFPACK '\' requires b to be a dense column vector
 	[x info] = umfpack2 (A, '\', b, Control) ;
-        info = [info(78) info(79) 0] ;
 
     else
 
 	% factorize with UMFPACK and do the forward/back solves in MATLAB
 	[L, U, P, Q, R, info] = umfpack2 (A, Control) ;
 	x = Q * (U \ (L \ (P * (R \ b)))) ;
-        info = [info(78) info(79) 0] ;
 
     end
 
@@ -78,12 +76,12 @@ else
 
 	% A is not sparse, so just use MATLAB
 	x = b/A ;
+        info.nnz_in_L_plus_U = n^2 ;
 
     elseif (m1 == 1 & ~issparse (b))					    %#ok
 
 	% the UMFPACK '\' requires b to be a dense column vector
 	[x info] = umfpack2 (b, '/', A, Control) ;
-        info = [info(78) info(79) 0] ;
 
     else
 
@@ -91,7 +89,6 @@ else
 	% this mimics the behavior of x = b/A, except for the row scaling
 	[L, U, P, Q, R, info] = umfpack2 (A.', Control) ;
 	x = (Q * (U \ (L \ (P * (R \ (b.')))))).' ;
-        info = [info(78) info(79) 0] ;
 
 	% an alternative method:
 	% [L, U, P, Q, r] = umfpack2 (A, Control) ;
diff --git a/UMFPACK/MATLAB/umfpack_test.m b/UMFPACK/MATLAB/umfpack_test.m
index a527695..fc2bfe0 100644
--- a/UMFPACK/MATLAB/umfpack_test.m
+++ b/UMFPACK/MATLAB/umfpack_test.m
@@ -23,9 +23,8 @@ nmat = max (nmat, 1) ;
 f = f (1:nmat) ;
 
 Control = umfpack2 ;
-Control (1) = 0 ;
+Control.prl = 0 ;
 
-figure (1)
 clf
 
 h = waitbar (0, 'UMFPACK test') ;
@@ -35,7 +34,7 @@ for k = 1:nmat
     i = f (k) ;
     waitbar (k/nmat, h, 'UMFPACK test') ;
 
-    try
+%    try
 
         fprintf ('\nmatrix: %s %s %d\n', ...
             index.Group{i}, index.Name{i}, index.nrows(i)) ;
@@ -64,7 +63,7 @@ for k = 1:nmat
 	% P(R\A)Q = LU
 	%-----------------------------------------------------------------------
 
-	[L,U,P,Q,R,Info] = umfpack2 (A) ;
+	[L,U,P,Q,R,Info] = umfpack2 (A, struct ('details',1)) ;
 	err = lu_normest (P*(R\A)*Q, L, U) ;
 	fprintf ('norm est PR\\AQ-LU: %g relative: %g\n', ...
 	    err, err / norm (A,1)) ;
@@ -73,8 +72,8 @@ for k = 1:nmat
 	spy (P*A*Q)
 	title ('PAQ') ;
 
-	cs = Info (57) ;
-	rs = Info (58) ;
+	cs = Info.number_of_column_singletons ; % (57) ;
+	rs = Info.number_of_row_singletons ; % (58) ;
 
 	subplot (2,2,4)
 	hold off
@@ -112,30 +111,30 @@ for k = 1:nmat
 	m2 = norm (A*y1-c) ;
 
 	% factor the transpose
-	Control (8) = 2 ;
+	Control.irstep = 2 ;
 	[x, info] = umfpack2 (A', '\', c, Control) ;
-	lunz0 = info (44) + info (45) - info (67) ;
+	lunz0 = info.nnz_in_L_plus_U ;
 	r = norm (A'*x-c) ;
 
 	fprintf (':: %8.2e  matlab: %8.2e %8.2e\n',  r, m1, m2) ;
 
 	% factor the original matrix and solve xA=b
 	for ir = 0:4
-	    Control (8) = ir ;
+            Control.irstep = ir ;
 	    [x, info] = umfpack2 (b, '/', A, Control) ;
 	    r = norm (b-x*A) ;
 	    if (ir == 0)
-		lunz1 = info (44) + info (45) - info (67) ;
+		lunz1 = info.nnz_in_L_plus_U ;
 	    end
-	    fprintf ('%d: %8.2e %d %d\n', ir, r, info (81), info (82)) ;
+	    fprintf ('%d: %8.2e %d\n', ir, r, info.iterative_refinement_steps) ;
 	end
 
 	% factor the original matrix and solve Ax=b
 	for ir = 0:4
-	    Control (8) = ir ;
+            Control.irstep = ir ;
 	    [x, info] = umfpack2 (A, '\', c, Control) ;
 	    r = norm (A*x-c) ;
-	    fprintf ('%d: %8.2e %d %d\n', ir, r, info (81), info (82)) ;
+	    fprintf ('%d: %8.2e %d\n', ir, r, info.iterative_refinement_steps) ;
 	end
 
 	fprintf (...
@@ -165,15 +164,15 @@ for k = 1:nmat
 	    real(det3), imag(det3), dexp3) ;
 	fprintf ('diff %g %g\n', err, err3) ;
 
-    catch
-        % out-of-memory is OK, other errors are not
-        disp (lasterr) ;
-        if (isempty (strfind (lasterr, 'Out of memory')))
-            error (lasterr) ;                                               %#ok
-        else
-            fprintf ('test terminated early, but otherwise OK\n') ;
-        end
-    end
+%    catch
+%        % out-of-memory is OK, other errors are not
+%        disp (lasterr) ;
+%        if (isempty (strfind (lasterr, 'Out of memory')))
+%            error (lasterr) ;                                               %#ok
+%        else
+%            fprintf ('test terminated early, but otherwise OK\n') ;
+%        end
+%    end
 
 end
 
diff --git a/UMFPACK/MATLAB/umfpack_test2.m b/UMFPACK/MATLAB/umfpack_test2.m
new file mode 100644
index 0000000..e75d0c1
--- /dev/null
+++ b/UMFPACK/MATLAB/umfpack_test2.m
@@ -0,0 +1,52 @@
+function umfpack_test2
+%UMFPACK_TEST2 try all UMFPACK strategies and orderings.
+% Requires UFget, CHOLMOD, CAMD, CCOLAMD, COLAMD, metis-4.0.
+
+Prob = UFget (45) ;
+A = Prob.A ;
+n = size (A,1) ;
+b = rand (n,1) ;
+
+Strategy = {'auto', 'unsymmetric', 'symmetric'} ;
+Ordering = { 'amd', 'default', 'metis', 'none', 'given' } ;
+Scale = { 'none', 'sum', 'max' } ;
+
+for k1 = 1:length (Strategy)
+    for k2 = 1:length (Ordering)
+        for k3 = 1:length (Scale)
+
+            strategy = Strategy {k1} ;
+            ordering = Ordering {k2} ;
+            scale = Scale {k3} ;
+
+            opts.strategy = strategy ;
+            opts.ordering = ordering ;
+            opts.scale = scale ;
+
+            clear L U P Q R
+            L = [ ] ;
+            U = [ ] ;
+            P = speye (n) ;
+            Q = speye (n) ;
+
+            try
+                tic ;
+                [L,U,P,Q,R] = umfpack2 (A, opts) ;
+                t = toc ;
+                lunz = nnz (L+U) ;
+            catch
+                disp (lasterr) ;
+                t = inf ;
+                lunz = 0 ;
+            end
+
+            fprintf ('%11s %7s %4s : time %10.4f lunz %10.3e million\n', ...
+                strategy, ordering, scale, t, lunz / 1e6) ;
+
+            subplot (1,2,1) ; cspy (P*A*Q) ;
+            subplot (1,2,2) ; cspy (L+U) ;
+            drawnow
+
+        end
+    end
+end
diff --git a/UMFPACK/MATLAB/umfpackmex.c b/UMFPACK/MATLAB/umfpackmex.c
index 13f2e66..3391123 100644
--- a/UMFPACK/MATLAB/umfpackmex.c
+++ b/UMFPACK/MATLAB/umfpackmex.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -23,11 +22,11 @@
     scaled matrix has an infinity norm of 1.  The scale factors r (i) are
     returned in a diagonal sparse matrix.  If the factorization is:
 
-	[L, U, P, Q, R] = umfpack (A) ;
+        [L, U, P, Q, R] = umfpack (A) ;
 
     then the factorization is
 
-	L*U = P * (R \ A) * Q
+        L*U = P * (R \ A) * Q
 
     This is safer than returning a matrix R such that L*U = P*R*A*Q, because
     it avoids the division by small entries.  If r(i) is subnormal, multiplying
@@ -35,7 +34,7 @@
 
     The factorization
 
-	[L, U, P, Q] = umfpack (A) ;
+        [L, U, P, Q] = umfpack (A) ;
 
     returns LU factors such that L*U = P*A*Q, with no scaling.
 
@@ -45,29 +44,13 @@
     Thus, is also provides another example of how user C code can access
     UMFPACK.
 
-    If NO_TRANSPOSE_FORWARD_SLASH is not defined at compile time, then the
-    forward slash (/) operator acts almost like x = b/A in MATLAB 6.1.  It is
-    solved by factorizing the array transpose, and then x = (A.'\b.').' is
-    solved.  This is the default behavior (for historical reasons), since
-    factorizing A can behave perform much differently than factorizing its
-    transpose.
-
-    If NO_TRANSPOSE_FORWARD_SLASH is defined at compile time, then the forward
-    slash operator does not act like x=b/A in MATLAB 6.1.  It is solved by
-    factorizing A, and then solving via the transposed L and U matrices.
-    The solution is still x = (A.'\b.').', except that A is factorized instead
-    of A.'.
-
-    Modified for v4.3.1, Jan 10, 2005: default has been changed to
-    NO_TRANSPOSE_FORWARD_SLASH, to test iterative refinement for b/A.
-    v4.4: added method for computing the determinant.
+    Unlike MATLAB, x=b/A is solved by factorizing A, and then solving via the
+    transposed L and U matrices.  The solution is still x = (A.'\b.').', except
+    that A is factorized instead of A.'.
 
     v5.1: port to 64-bit MATLAB
 */
 
-#define NO_TRANSPOSE_FORWARD_SLASH  /* default has changed for v4.3.1 */
-
-#include "UFconfig.h"
 #include "umfpack.h"
 #include "mex.h"
 #include "matrix.h"
@@ -77,13 +60,14 @@
 
 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
-#define STRING_MATCH(s1,s2) (strcmp ((s1), (s2)) == 0)
+#define MATCH(s1,s2) (strcmp ((s1), (s2)) == 0)
 #ifndef TRUE
 #define TRUE (1)
 #endif
 #ifndef FALSE
 #define FALSE (0)
 #endif
+#define Long SuiteSparse_long
 
 /* ========================================================================== */
 /* === error ================================================================ */
@@ -94,16 +78,15 @@
 static void error
 (
     char *s,
-    UF_long A_is_complex,
+    Long A_is_complex,
     int nargout,
     mxArray *pargout [ ],
     double Control [UMFPACK_CONTROL],
     double Info [UMFPACK_INFO],
-    UF_long status,
-    UF_long do_info
+    Long status
 )
 {
-    UF_long i ;
+    Long i ;
     double *Out_Info ;
     if (A_is_complex)
     {
@@ -115,17 +98,757 @@ static void error
 	umfpack_dl_report_status (Control, status) ;
 	umfpack_dl_report_info (Control, Info) ;
     }
-    if (do_info > 0)
+
+    mexErrMsgTxt (s) ;
+}
+
+
+/* ========================================================================== */
+/* === get_option =========================================================== */
+/* ========================================================================== */
+
+/* get a single string or numeric option from the MATLAB options struct */
+
+static int get_option
+(
+    /* inputs: */
+    const mxArray *mxopts,      /* the MATLAB struct */
+    const char *field,          /* the field to get from the MATLAB struct */
+
+    /* outputs: */
+    double *x,                  /* double value of the field, if present */
+    Long *x_present,            /* true if double x is present */
+    char **s                    /* char value of the field, if present; */
+                                /* must be mxFree'd by caller when done */
+)
+{
+    Long f ;
+    mxArray *p ;
+
+    /* find the field number */
+    if (mxopts == NULL || mxIsEmpty (mxopts) || !mxIsStruct (mxopts))
     {
-	/* return Info */
-	pargout [do_info] = mxCreateDoubleMatrix (1, UMFPACK_INFO, mxREAL) ;
-	Out_Info = mxGetPr (pargout [do_info]) ;
-	for (i = 0 ; i < UMFPACK_INFO ; i++)
-	{
-	    Out_Info [i] = Info [i] ;
-	}
+        /* mxopts is not present, or [ ], or not a struct */
+        f = -1 ;
     }
-    mexErrMsgTxt (s) ;
+    else
+    {
+        /* f will be -1 if the field is not present */
+        f = mxGetFieldNumber (mxopts, field) ;
+    }
+
+    /* get the field, or NULL if not present */
+    if (f == -1)
+    {
+        p = NULL ;
+    }
+    else
+    {
+        p = mxGetFieldByNumber (mxopts, 0, f) ;
+    }
+
+    *x_present = FALSE ;
+    if (s != NULL)
+    {
+        *s = NULL ;
+    }
+
+    if (p == NULL)
+    {
+        /* option not present */
+        return (TRUE) ;
+    }
+    if (mxIsNumeric (p))
+    {
+        /* option is numeric */
+        if (x == NULL)
+        {
+            mexPrintf ("opts.%s field must be a string\n", field) ;
+            mexErrMsgIdAndTxt ("UMFPACK:invalidInput", "invalid option") ;
+        }
+        *x = mxGetScalar (p) ;
+        *x_present = TRUE ;
+    }
+    else if (mxIsChar (p))
+    {
+        /* option is a MATLAB string; convert it to a C-style string */
+        if (s == NULL)
+        {
+            mexPrintf ("opts.%s field must be a numeric value\n", field) ;
+            mexErrMsgIdAndTxt ("UMFPACK:invalidInput", "invalid option") ;
+        }
+        *s = mxArrayToString (p) ;
+    }
+    return (TRUE) ;
+}
+
+
+/* ========================================================================== */
+/* === get_all_options ====================================================== */
+/* ========================================================================== */
+
+/* get all the options from the MATLAB struct.
+
+    opts.prl        >= 0, default 1 (errors only)
+    opts.strategy   'auto', 'unsymmetric', 'symmetric', default auto
+    opts.ordering   'amd'       AMD for A+A', COLAMD for A'A
+                    'default'   use CHOLMOD (AMD then METIS; take best fount)
+                    'metis'     use METIS
+                    'none'      no fill-reducing ordering
+                    'given'     use Qinit (this is default if Qinit present)
+                    'best'      try AMD/COLAMD, METIS, and NESDIS; take best
+    opts.tol        default 0.1
+    opts.symtol     default 0.001
+    opts.scale      row scaling: 'none', 'sum', 'max'
+    opts.irstep     max # of steps of iterative refinement, default 2
+    opts.singletons 'yes','no' default 'yes'
+ */
+
+int get_all_options
+(
+    const mxArray *mxopts,
+    double *Control
+)
+{
+    double x ;
+    char *s ;
+    Long x_present, i, info_details ;
+
+    /* ---------------------------------------------------------------------- */
+    /* prl: an integer, default 1 */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "prl", &x, &x_present, NULL) ;
+    Control [UMFPACK_PRL] = x_present ? ((Long) x) : UMFPACK_DEFAULT_PRL ;
+    if (mxIsNaN (Control [UMFPACK_PRL]))
+    {
+	Control [UMFPACK_PRL] = UMFPACK_DEFAULT_PRL ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* strategy: a string */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "strategy", NULL, &x_present, &s) ;
+    if (s != NULL)
+    {
+        if (MATCH (s, "auto"))
+        {
+            Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_AUTO ;
+        }
+        else if (MATCH (s, "unsymmetric"))
+        {
+            Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_UNSYMMETRIC ;
+        }
+        else if (MATCH (s, "symmetric"))
+        {
+            Control [UMFPACK_STRATEGY] = UMFPACK_STRATEGY_SYMMETRIC ;
+        }
+        else if (MATCH (s, "default"))
+        {
+            Control [UMFPACK_STRATEGY] = UMFPACK_DEFAULT_STRATEGY ;
+        }
+        else
+        {
+            mexErrMsgIdAndTxt ("UMFPACK:invalidInput","invalid strategy") ;
+        }
+        mxFree (s) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* ordering: a string */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "ordering", NULL, &x_present, &s) ;
+    if (s != NULL)
+    {
+        if (MATCH (s, "amd") || MATCH (s, "colamd") || MATCH (s,"bestamd"))
+        {
+            Control [UMFPACK_ORDERING] = UMFPACK_ORDERING_AMD ;
+        }
+#ifndef NCHOLMOD
+        else if (MATCH (s, "fixed") || MATCH (s, "none") || MATCH (s,"natural"))
+        {
+            Control [UMFPACK_ORDERING] = UMFPACK_ORDERING_NONE ;
+        }
+        else if (MATCH (s, "metis"))
+        {
+            Control [UMFPACK_ORDERING] = UMFPACK_ORDERING_METIS ;
+        }
+        else if (MATCH (s, "cholmod"))
+        {
+            Control [UMFPACK_ORDERING] = UMFPACK_ORDERING_CHOLMOD ;
+        }
+        else if (MATCH (s, "best"))
+        {
+            Control [UMFPACK_ORDERING] = UMFPACK_ORDERING_BEST ;
+        }
+#endif
+        else if (MATCH (s, "given"))
+        {
+            Control [UMFPACK_ORDERING] = UMFPACK_ORDERING_GIVEN ;
+        }
+        else if (MATCH (s, "default"))
+        {
+            Control [UMFPACK_ORDERING] = UMFPACK_DEFAULT_ORDERING ;
+        }
+        else
+        {
+            mexErrMsgIdAndTxt ("UMFPACK:invalidInput","invalid ordering") ;
+        }
+        mxFree (s) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* scale: a string */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "scale", NULL, &x_present, &s) ;
+    if (s != NULL)
+    {
+        if (MATCH (s, "none"))
+        {
+            Control [UMFPACK_SCALE] = UMFPACK_SCALE_NONE ;
+        }
+        else if (MATCH (s, "sum"))
+        {
+            Control [UMFPACK_SCALE] = UMFPACK_SCALE_SUM ;
+        }
+        else if (MATCH (s, "max"))
+        {
+            Control [UMFPACK_SCALE] = UMFPACK_SCALE_MAX ;
+        }
+        else if (MATCH (s, "default"))
+        {
+            Control [UMFPACK_SCALE] = UMFPACK_DEFAULT_SCALE ;
+        }
+        else
+        {
+            mexErrMsgIdAndTxt ("UMFPACK:invalidInput","invalid scale") ;
+        }
+        mxFree (s) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* tol: a double */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "tol", &x, &x_present, NULL) ;
+    Control [UMFPACK_PIVOT_TOLERANCE]
+        = x_present ? x : UMFPACK_DEFAULT_PIVOT_TOLERANCE ;
+
+    /* ---------------------------------------------------------------------- */
+    /* symtol: a double */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "symtol", &x, &x_present, NULL) ;
+    Control [UMFPACK_SYM_PIVOT_TOLERANCE]
+        = x_present ? x : UMFPACK_DEFAULT_SYM_PIVOT_TOLERANCE ;
+
+    /* ---------------------------------------------------------------------- */
+    /* irstep: an integer */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "irstep", &x, &x_present, NULL) ;
+    Control [UMFPACK_IRSTEP] = x_present ? x : UMFPACK_DEFAULT_IRSTEP ;
+
+    /* ---------------------------------------------------------------------- */
+    /* singletons: a string */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "singletons", NULL, &x_present, &s) ;
+    if (s != NULL)
+    {
+        if (MATCH (s, "enable"))
+        {
+            Control [UMFPACK_SINGLETONS] = TRUE ;
+        }
+        else if (MATCH (s, "disable"))
+        {
+            Control [UMFPACK_SINGLETONS] = FALSE ;
+        }
+        else if (MATCH (s, "default"))
+        {
+            Control [UMFPACK_SINGLETONS] = UMFPACK_DEFAULT_SINGLETONS ;
+        }
+        mxFree (s) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* details: an int */
+    /* ---------------------------------------------------------------------- */
+
+    get_option (mxopts, "details", &x, &x_present, NULL) ;
+    info_details = x_present ? x : 0 ;
+    return (info_details) ;
+}
+
+
+/* ========================================================================== */
+/* === umfpack_mx_info_details ============================================== */
+/* ========================================================================== */
+
+/* Return detailed info struct; useful for UMFPACK development only  */
+
+#define XFIELD(x) mxSetFieldByNumber (info, 0, k++, mxCreateDoubleScalar (x))
+#define SFIELD(s) mxSetFieldByNumber (info, 0, k++, mxCreateString (s))
+#define YESNO(x) ((x) ? "yes" : "no")
+
+mxArray *umfpack_mx_info_details    /* return a struct with info statistics */
+(
+    double *Control,
+    double *Info
+)
+{
+    Long k = 0 ;
+    mxArray *info ;
+    Long sizeof_unit = (Long) Info [UMFPACK_SIZE_OF_UNIT] ;
+
+    const char *info_struct [ ] =
+    {
+        "control_prl",
+        "control_dense_row",
+        "control_dense_col",
+        "control_tol",
+        "control_block_size",
+        "control_strategy",
+        "control_alloc_init",
+        "control_irstep",
+        "umfpack_compiled_with_BLAS",
+        "control_ordering",
+        "control_singletons",
+        "control_fixQ",
+        "control_amd_dense",
+        "control_symtol",
+        "control_scale",
+        "control_front_alloc",
+        "control_droptol",
+        "control_aggressive",
+
+        "status",
+
+        "nrow",
+        "ncol",
+        "anz",
+
+        "sizeof_unit",
+        "sizeof_int",
+        "sizeof_long",
+        "sizeof_pointer",
+        "sizeof_entry",
+        "number_of_dense_rows",
+        "number_of_empty_rows",
+        "number_of_dense_cols",
+        "number_of_empty_cols",
+
+        "number_of_memory_defragmentations_during_symbolic_analysis",
+        "memory_usage_for_symbolic_analysis_in_bytes",
+        "size_of_symbolic_factorization_in_bytes",
+        "symbolic_time",
+        "symbolic_walltime",
+        "strategy_used",
+        "ordering_used",
+        "Qfixed",
+        "diagonol_pivots_preferred",
+
+        "number_of_column_singletons",
+        "number_of_row_singletons",
+
+        /* only computed if symmetric strategy used */
+        "symmetric_strategy_S_size",
+        "symmetric_strategy_S_symmetric",
+        "symmetric_strategy_pattern_symmetry",
+        "symmetric_strategy_nnz_A_plus_AT",
+        "symmetric_strategy_nnz_diag",
+        "symmetric_strategy_lunz",
+        "symmetric_strategy_flops",
+        "symmetric_strategy_ndense",
+        "symmetric_strategy_dmax",
+
+        "estimated_size_of_numeric_factorization_in_bytes",
+        "estimated_peak_memory_in_bytes",
+        "estimated_number_of_floating_point_operations",
+        "estimated_number_of_entries_in_L",
+        "estimated_number_of_entries_in_U",
+        "estimated_variable_init_in_bytes",
+        "estimated_variable_peak_in_bytes",
+        "estimated_variable_final_in_bytes",
+        "estimated_number_of_entries_in_largest_frontal_matrix",
+        "estimated_largest_frontal_matrix_row_dimension",
+        "estimated_largest_frontal_matrix_col_dimension",
+
+        "size_of_numeric_factorization_in_bytes",
+        "total_memory_usage_in_bytes",
+        "number_of_floating_point_operations",
+        "number_of_entries_in_L",
+        "number_of_entries_in_U",
+        "variable_init_in_bytes",
+        "variable_peak_in_bytes",
+        "variable_final_in_bytes",
+        "number_of_entries_in_largest_frontal_matrix",
+        "largest_frontal_matrix_row_dimension",
+        "largest_frontal_matrix_col_dimension",
+
+        "number_of_memory_defragmentations_during_numeric_factorization",
+        "number_of_memory_reallocations_during_numeric_factorization",
+        "number_of_costly_memory_reallocations_during_numeric_factorization",
+        "number_of_integers_in_compressed_pattern_of_L_and_U",
+        "number_of_entries_in_LU_data_structure",
+        "numeric_time",
+        "nnz_diagonal_of_U",
+        "rcond_estimate",
+        "scaling_used",
+        "min_abs_row_sum_of_A",
+        "max_abs_row_sum_of_A",
+        "min_abs_diagonal_of_U",
+        "max_abs_diagonal_of_U",
+        "alloc_init_used",
+        "number_of_forced_updates",
+        "numeric_walltime",
+        "symmetric_strategy_number_off_diagonal_pivots",
+
+        "number_of_entries_in_L_including_dropped_entries",
+        "number_of_entries_in_U_including_dropped_entries",
+        "number_of_small_entries_dropped_from_L_and_U",
+
+        "number_of_iterative_refinement_steps_taken",
+        "number_of_iterative_refinement_steps_attempted",
+        "omega1",
+        "omega2",
+        "solve_flops",
+        "solve_time",
+        "solve_walltime"
+    } ;
+
+    info = mxCreateStructMatrix (1, 1, 100, info_struct) ;
+
+    XFIELD (Control [UMFPACK_PRL]) ;
+    XFIELD (Control [UMFPACK_DENSE_ROW]) ;
+    XFIELD (Control [UMFPACK_DENSE_COL]) ;
+    XFIELD (Control [UMFPACK_PIVOT_TOLERANCE]) ;
+    XFIELD (Control [UMFPACK_BLOCK_SIZE]) ;
+
+    switch ((int) Control [UMFPACK_STRATEGY])
+    {
+        case UMFPACK_STRATEGY_UNSYMMETRIC: SFIELD ("unsymmetric") ;  break ;
+        case UMFPACK_STRATEGY_SYMMETRIC:   SFIELD ("symmetric") ;    break ;
+        default:
+        case UMFPACK_DEFAULT_STRATEGY:     SFIELD ("auto") ;         break ;
+    }
+
+    XFIELD (Control [UMFPACK_ALLOC_INIT]) ;
+    XFIELD (Control [UMFPACK_IRSTEP]) ;
+    SFIELD (YESNO (Control [UMFPACK_COMPILED_WITH_BLAS])) ;
+
+    switch ((int) Control [UMFPACK_ORDERING])
+    {
+        case UMFPACK_ORDERING_NONE:     SFIELD ("none") ;    break ;
+        case UMFPACK_ORDERING_AMD:      SFIELD ("amd") ;     break ;
+        case UMFPACK_ORDERING_METIS:    SFIELD ("metis") ;   break ;
+        default:
+        case UMFPACK_ORDERING_CHOLMOD:  SFIELD ("cholmod") ; break ;
+        case UMFPACK_ORDERING_BEST:     SFIELD ("best") ;    break ;
+        case UMFPACK_ORDERING_GIVEN:    SFIELD ("given") ;   break ;
+    }
+
+    SFIELD (YESNO (Control [UMFPACK_SINGLETONS])) ;
+
+    if (Control [UMFPACK_FIXQ] > 0)
+    {
+        SFIELD ("forced true") ;
+    }
+    else if (Control [UMFPACK_FIXQ] < 0)
+    {
+        SFIELD ("forced false") ;
+    }
+    else
+    {
+        SFIELD ("auto") ;
+    }
+
+    XFIELD (Control [UMFPACK_AMD_DENSE]) ;
+    XFIELD (Control [UMFPACK_SYM_PIVOT_TOLERANCE]) ;
+
+    switch ((int) Control [UMFPACK_SCALE])
+    {
+        case UMFPACK_SCALE_NONE: SFIELD ("none") ;  break ;
+        case UMFPACK_SCALE_MAX:  SFIELD ("max") ;   break ;
+        default:
+        case UMFPACK_SCALE_SUM:  SFIELD ("sum") ;   break ;
+    }
+
+    XFIELD (Control [UMFPACK_FRONT_ALLOC_INIT]) ;
+    XFIELD (Control [UMFPACK_DROPTOL]) ;
+    SFIELD (YESNO (Control [UMFPACK_AGGRESSIVE])) ;
+
+    switch ((int) Info [UMFPACK_STATUS])
+    {
+        case UMFPACK_OK:
+            SFIELD ("ok") ; break ;
+        case UMFPACK_WARNING_singular_matrix:
+            SFIELD ("singular matrix") ; break ;
+        case UMFPACK_WARNING_determinant_underflow:
+            SFIELD ("determinant underflow") ; break ;
+        case UMFPACK_WARNING_determinant_overflow:
+            SFIELD ("determinant overflow") ; break ;
+        case UMFPACK_ERROR_out_of_memory:
+            SFIELD ("out of memory") ; break ;
+        case UMFPACK_ERROR_invalid_Numeric_object:
+            SFIELD ("invalid numeric LU object") ; break ;
+        case UMFPACK_ERROR_invalid_Symbolic_object:
+            SFIELD ("invalid symbolic LU object") ; break ;
+        case UMFPACK_ERROR_argument_missing:
+            SFIELD ("argument missing") ; break ;
+        case UMFPACK_ERROR_n_nonpositive:
+            SFIELD ("n < 0") ; break ;
+        case UMFPACK_ERROR_invalid_matrix:
+            SFIELD ("invalid matrix") ; break ;
+        case UMFPACK_ERROR_different_pattern:
+            SFIELD ("pattern changed") ; break ;
+        case UMFPACK_ERROR_invalid_system:
+            SFIELD ("invalid system") ; break ;
+        case UMFPACK_ERROR_invalid_permutation:
+            SFIELD ("invalid permutation") ; break ;
+        case UMFPACK_ERROR_internal_error:
+            SFIELD ("internal error; contact DrTimothyAldenDavis at gmail.com") ;
+            break ;
+        case UMFPACK_ERROR_file_IO:
+            SFIELD ("file I/O error") ; break ;
+        case UMFPACK_ERROR_ordering_failed:
+            SFIELD ("ordering failed") ; break ;
+        default:
+            if (Info [UMFPACK_STATUS] < 0)
+            {
+                SFIELD ("unknown error") ;
+            }
+            else
+            {
+                SFIELD ("unknown warning") ;
+            }
+        break ;
+    }
+
+    XFIELD (Info [UMFPACK_NROW]) ;
+    XFIELD (Info [UMFPACK_NCOL]) ;
+    XFIELD (Info [UMFPACK_NZ]) ;
+
+    XFIELD (Info [UMFPACK_SIZE_OF_UNIT]) ;
+    XFIELD (Info [UMFPACK_SIZE_OF_INT]) ;
+    XFIELD (Info [UMFPACK_SIZE_OF_LONG]) ;
+    XFIELD (Info [UMFPACK_SIZE_OF_POINTER]) ;
+    XFIELD (Info [UMFPACK_SIZE_OF_ENTRY]) ;
+    XFIELD (Info [UMFPACK_NDENSE_ROW]) ;
+    XFIELD (Info [UMFPACK_NEMPTY_ROW]) ;
+    XFIELD (Info [UMFPACK_NDENSE_COL]) ;
+    XFIELD (Info [UMFPACK_NEMPTY_COL]) ;
+
+    XFIELD (Info [UMFPACK_SYMBOLIC_DEFRAG]) ;
+    XFIELD (Info [UMFPACK_SYMBOLIC_PEAK_MEMORY] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_SYMBOLIC_SIZE] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_SYMBOLIC_TIME]) ;
+    XFIELD (Info [UMFPACK_SYMBOLIC_WALLTIME]) ;
+
+    switch ((int) Info [UMFPACK_STRATEGY_USED])
+    {
+        default:
+        case UMFPACK_STRATEGY_UNSYMMETRIC: SFIELD ("unsymmetric") ;  break ;
+        case UMFPACK_STRATEGY_SYMMETRIC:   SFIELD ("symmetric") ;    break ;
+    }
+
+    switch ((int) Info [UMFPACK_ORDERING_USED])
+    {
+        case UMFPACK_ORDERING_AMD:      SFIELD ("amd") ;     break ;
+        case UMFPACK_ORDERING_METIS:    SFIELD ("metis") ;   break ;
+        case UMFPACK_ORDERING_GIVEN:    SFIELD ("given") ;   break ;
+        default:                        SFIELD ("none") ;    break ;
+    }
+
+    SFIELD (YESNO (Info [UMFPACK_QFIXED])) ;
+    SFIELD (YESNO (Info [UMFPACK_DIAG_PREFERRED])) ;
+
+    XFIELD (Info [UMFPACK_COL_SINGLETONS]) ;
+    XFIELD (Info [UMFPACK_ROW_SINGLETONS]) ;
+
+    /* only computed if symmetric ordering is used */
+    XFIELD (Info [UMFPACK_N2]) ;
+    SFIELD (YESNO (Info [UMFPACK_S_SYMMETRIC])) ;
+    XFIELD (Info [UMFPACK_PATTERN_SYMMETRY]) ;
+    XFIELD (Info [UMFPACK_NZ_A_PLUS_AT]) ;
+    XFIELD (Info [UMFPACK_NZDIAG]) ;
+    XFIELD (Info [UMFPACK_SYMMETRIC_LUNZ]) ;
+    XFIELD (Info [UMFPACK_SYMMETRIC_FLOPS]) ;
+    XFIELD (Info [UMFPACK_SYMMETRIC_NDENSE]) ;
+    XFIELD (Info [UMFPACK_SYMMETRIC_DMAX]) ;
+
+    XFIELD (Info [UMFPACK_NUMERIC_SIZE_ESTIMATE] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_PEAK_MEMORY_ESTIMATE] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_FLOPS_ESTIMATE]) ;
+    XFIELD (Info [UMFPACK_LNZ_ESTIMATE]) ;
+    XFIELD (Info [UMFPACK_UNZ_ESTIMATE]) ;
+    XFIELD (Info [UMFPACK_VARIABLE_INIT_ESTIMATE] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_VARIABLE_PEAK_ESTIMATE] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_VARIABLE_FINAL_ESTIMATE] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_MAX_FRONT_SIZE_ESTIMATE]) ;
+    XFIELD (Info [UMFPACK_MAX_FRONT_NROWS_ESTIMATE]) ;
+    XFIELD (Info [UMFPACK_MAX_FRONT_NCOLS_ESTIMATE]) ;
+
+    XFIELD (Info [UMFPACK_NUMERIC_SIZE] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_PEAK_MEMORY] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_FLOPS]) ;
+    XFIELD (Info [UMFPACK_LNZ]) ;
+    XFIELD (Info [UMFPACK_UNZ]) ;
+    XFIELD (Info [UMFPACK_VARIABLE_INIT] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_VARIABLE_PEAK] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_VARIABLE_FINAL] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_MAX_FRONT_SIZE]) ;
+    XFIELD (Info [UMFPACK_MAX_FRONT_NROWS]) ;
+    XFIELD (Info [UMFPACK_MAX_FRONT_NCOLS]) ;
+
+    XFIELD (Info [UMFPACK_NUMERIC_DEFRAG]) ;
+    XFIELD (Info [UMFPACK_NUMERIC_REALLOC]) ;
+    XFIELD (Info [UMFPACK_NUMERIC_COSTLY_REALLOC]) ;
+    XFIELD (Info [UMFPACK_COMPRESSED_PATTERN]) ;
+    XFIELD (Info [UMFPACK_LU_ENTRIES]) ;
+    XFIELD (Info [UMFPACK_NUMERIC_TIME]) ;
+    XFIELD (Info [UMFPACK_UDIAG_NZ]) ;
+    XFIELD (Info [UMFPACK_RCOND]) ;
+
+    switch ((int) Info [UMFPACK_WAS_SCALED])
+    {
+        case UMFPACK_SCALE_NONE: SFIELD ("none") ;  break ;
+        case UMFPACK_SCALE_MAX:  SFIELD ("max") ;   break ;
+        default:
+        case UMFPACK_SCALE_SUM:  SFIELD ("sum") ;   break ;
+    }
+
+    XFIELD (Info [UMFPACK_RSMIN]) ;
+    XFIELD (Info [UMFPACK_RSMAX]) ;
+    XFIELD (Info [UMFPACK_UMIN]) ;
+    XFIELD (Info [UMFPACK_UMAX]) ;
+    XFIELD (Info [UMFPACK_ALLOC_INIT_USED]) ;
+    XFIELD (Info [UMFPACK_FORCED_UPDATES]) ;
+    XFIELD (Info [UMFPACK_NUMERIC_WALLTIME]) ;
+    XFIELD (Info [UMFPACK_NOFF_DIAG]) ;
+
+    XFIELD (Info [UMFPACK_ALL_LNZ]) ;
+    XFIELD (Info [UMFPACK_ALL_UNZ]) ;
+    XFIELD (Info [UMFPACK_NZDROPPED]) ;
+
+    XFIELD (Info [UMFPACK_IR_TAKEN]) ;
+    XFIELD (Info [UMFPACK_IR_ATTEMPTED]) ;
+    XFIELD (Info [UMFPACK_OMEGA1]) ;
+    XFIELD (Info [UMFPACK_OMEGA2]) ;
+    XFIELD (Info [UMFPACK_SOLVE_FLOPS]) ;
+    XFIELD (Info [UMFPACK_SOLVE_TIME]) ;
+    XFIELD (Info [UMFPACK_SOLVE_WALLTIME]) ;
+
+    return (info) ;
+}
+
+
+/* ========================================================================== */
+/* === umfpack_mx_info_user ================================================= */
+/* ========================================================================== */
+
+/* Return user-friendly info struct */
+
+mxArray *umfpack_mx_info_user    /* return a struct with info statistics */
+(
+    double *Control,
+    double *Info,
+    Long do_solve
+)
+{
+    Long k = 0 ;
+    mxArray *info ;
+    Long sizeof_unit = (Long) Info [UMFPACK_SIZE_OF_UNIT] ;
+
+    const char *info_struct [ ] =
+    {
+        "analysis_time",
+        "strategy_used",
+        "ordering_used",
+        "memory_usage_in_bytes",
+        "factorization_flop_count",
+        "nnz_in_L_plus_U",
+        "rcond_estimate",
+        "factorization_time",
+        /* if solve */
+        "iterative_refinement_steps",
+        "solve_flop_count",
+        "solve_time"
+    } ;
+
+    info = mxCreateStructMatrix (1, 1, do_solve ? 11 : 8, info_struct) ;
+
+    XFIELD (Info [UMFPACK_SYMBOLIC_WALLTIME]) ;
+
+    switch ((int) Info [UMFPACK_STRATEGY_USED])
+    {
+        default:
+        case UMFPACK_STRATEGY_UNSYMMETRIC: SFIELD ("unsymmetric") ;  break ;
+        case UMFPACK_STRATEGY_SYMMETRIC:   SFIELD ("symmetric") ;    break ;
+    }
+
+    switch ((int) Info [UMFPACK_ORDERING_USED])
+    {
+        case UMFPACK_ORDERING_AMD:      SFIELD ("amd") ;     break ;
+        case UMFPACK_ORDERING_METIS:    SFIELD ("metis") ;   break ;
+        case UMFPACK_ORDERING_GIVEN:    SFIELD ("given") ;   break ;
+        default:                        SFIELD ("none") ;    break ;
+    }
+
+    XFIELD (Info [UMFPACK_PEAK_MEMORY] * sizeof_unit) ;
+    XFIELD (Info [UMFPACK_FLOPS]) ;
+    XFIELD (Info [UMFPACK_LNZ] + Info [UMFPACK_UNZ] - Info [UMFPACK_UDIAG_NZ]) ;
+    XFIELD (Info [UMFPACK_RCOND]) ;
+    XFIELD (Info [UMFPACK_NUMERIC_WALLTIME]) ;
+
+    if (do_solve)
+    {
+        XFIELD (Info [UMFPACK_IR_TAKEN]) ;
+        XFIELD (Info [UMFPACK_SOLVE_FLOPS]) ;
+        XFIELD (Info [UMFPACK_SOLVE_WALLTIME]) ;
+    }
+
+    return (info) ;
+}
+
+
+/* ========================================================================== */
+/* === umfpack_mx_defaults ================================================== */
+/* ========================================================================== */
+
+/* Return a struct with default Control settings (except opts.details). */
+
+mxArray *umfpack_mx_defaults ( void )
+{
+    mxArray *opts ;
+    const char *opts_struct [ ] =
+    {
+        "prl",
+        "strategy",
+        "ordering",
+        "tol",
+        "symtol",
+        "scale",
+        "irstep",
+        "singletons"
+    } ;
+    opts = mxCreateStructMatrix (1, 1, 8, opts_struct) ;
+    mxSetFieldByNumber (opts, 0, 0,
+        mxCreateDoubleScalar (UMFPACK_DEFAULT_PRL)) ;
+    mxSetFieldByNumber (opts, 0, 1, mxCreateString ("auto")) ;
+    mxSetFieldByNumber (opts, 0, 2, mxCreateString ("default")) ;
+    mxSetFieldByNumber (opts, 0, 3,
+        mxCreateDoubleScalar (UMFPACK_DEFAULT_PIVOT_TOLERANCE)) ;
+    mxSetFieldByNumber (opts, 0, 4,
+        mxCreateDoubleScalar (UMFPACK_DEFAULT_SYM_PIVOT_TOLERANCE)) ;
+    mxSetFieldByNumber (opts, 0, 5, mxCreateString ("sum")) ;
+    mxSetFieldByNumber (opts, 0, 6,
+        mxCreateDoubleScalar (UMFPACK_DEFAULT_IRSTEP)) ;
+    mxSetFieldByNumber (opts, 0, 7, mxCreateString ("enable")) ;
+    return (opts) ;
 }
 
 
@@ -150,46 +873,32 @@ void mexFunction
     double *Lx, *Lz, *Ux, *Uz, *Ax, *Az, *Bx, *Bz, *Xx, *Xz, *User_Control,
 	*p, *q, *Out_Info, *p1, *p2, *p3, *p4, *Ltx, *Ltz, *Rs, *Px, *Qx ;
     void *Symbolic, *Numeric ;
-    UF_long *Lp, *Li, *Up, *Ui, *Ap, *Ai, *P, *Q, do_solve, lnz, unz, nn, i,
+    Long *Lp, *Li, *Up, *Ui, *Ap, *Ai, *P, *Q, do_solve, lnz, unz, nn, i,
 	transpose, size, do_info, do_numeric, *Front_npivcol, op, k, *Rp, *Ri,
 	*Front_parent, *Chain_start, *Chain_maxrows, *Chain_maxcols, nz, status,
 	nfronts, nchains, *Ltp, *Ltj, *Qinit, print_level, status2, no_scale,
 	*Front_1strow, *Front_leftmostdesc, n_row, n_col, n_inner, sys,
 	ignore1, ignore2, ignore3, A_is_complex, B_is_complex, X_is_complex,
 	*Pp, *Pi, *Qp, *Qi, do_recip, do_det ;
-    mxArray *Amatrix, *Bmatrix, *User_Control_matrix, *User_Qinit ;
+    mxArray *Amatrix, *Bmatrix, *User_Control_struct, *User_Qinit ;
     char *operator, *operation ;
     mxComplexity Atype, Xtype ;
     char warning [200] ;
-
-#ifndef NO_TRANSPOSE_FORWARD_SLASH
-    UF_long *Cp, *Ci ;
-    double *Cx, *Cz ;
-#endif
-
-    /* ---------------------------------------------------------------------- */
-    /* define the memory manager and printf functions for UMFPACK and AMD */ 
-    /* ---------------------------------------------------------------------- */
-
-    /* with these settings, the UMFPACK mexFunction can use ../Lib/libumfpack.a
-     * and ../Lib/libamd.a, instead compiling UMFPACK and AMD specifically for
-     * the MATLAB mexFunction. */
-    amd_malloc = mxMalloc ;
-    amd_free = mxFree ;
-    amd_calloc = mxCalloc ;
-    amd_realloc = mxRealloc ;
-    amd_printf = mexPrintf ;
-
-    /* The default values for these function pointers are fine.
-    umfpack_hypot = umf_hypot ;
-    umfpack_divcomplex = umf_divcomplex ;
-    */
+    int info_details ;
 
     /* ---------------------------------------------------------------------- */
     /* get inputs A, b, and the operation to perform */
     /* ---------------------------------------------------------------------- */
 
-    User_Control_matrix = (mxArray *) NULL ;
+    if (nargin > 1 && mxIsStruct (pargin [nargin-1]))
+    {
+        User_Control_struct = (mxArray *) (pargin [nargin-1]) ;
+    }
+    else
+    {
+        User_Control_struct = (mxArray *) NULL ;
+    }
+
     User_Qinit = (mxArray *) NULL ;
 
     do_info = 0 ;
@@ -214,7 +923,7 @@ void mexFunction
     {
 	operator = mxArrayToString (pargin [op]) ;
 
-	if (STRING_MATCH (operator, "\\"))
+	if (MATCH (operator, "\\"))
 	{
 
 	    /* -------------------------------------------------------------- */
@@ -224,8 +933,8 @@ void mexFunction
 	    /*
 		[x, Info] = umfpack (A, '\', b) ;
 		[x, Info] = umfpack (A, '\', b, Control) ;
-		[x, Info] = umfpack (A, Qinit, '\', b, Control) ;
 		[x, Info] = umfpack (A, Qinit, '\', b) ;
+		[x, Info] = umfpack (A, Qinit, '\', b, Control) ;
 	    */
 
 	    operation = "x = A\\b" ;
@@ -241,17 +950,13 @@ void mexFunction
 	    {
 		User_Qinit = (mxArray *) pargin [1] ;
 	    }
-	    if ((op == 1 && nargin == 4) || (op == 2 && nargin == 5))
-	    {
-		User_Control_matrix = (mxArray *) pargin [nargin-1] ;
-	    }
 	    if (nargin < 3 || nargin > 5 || nargout > 2)
 	    {
 		mexErrMsgTxt ("wrong number of arguments") ;
 	    }
 
 	}
-	else if (STRING_MATCH (operator, "/"))
+	else if (MATCH (operator, "/"))
 	{
 
 	    /* -------------------------------------------------------------- */
@@ -275,30 +980,17 @@ void mexFunction
 	    {
 		do_info = 1 ;
 	    }
-	    if (nargin == 5)
+	    if (nargin >= 4 && mxIsDouble (pargin [3]))
 	    {
 		User_Qinit = (mxArray *) pargin [3] ;
-		User_Control_matrix = (mxArray *) pargin [4] ;
-	    }
-	    else if (nargin == 4)
-	    {
-		/* Control is k-by-1 where k > 1, Qinit is 1-by-n */
-		if (mxGetM (pargin [3]) == 1)
-		{
-		    User_Qinit = (mxArray *) pargin [3] ;
-		}
-		else
-		{
-		    User_Control_matrix = (mxArray *) pargin [3] ;
-		}
 	    }
-	    else if (nargin < 3 || nargin > 5 || nargout > 2)
+	    if (nargin < 3 || nargin > 5 || nargout > 2)
 	    {
 		mexErrMsgTxt ("wrong number of arguments") ;
 	    }
 
 	}
-	else if (STRING_MATCH (operator, "symbolic"))
+	else if (MATCH (operator, "symbolic"))
 	{
 
 	    /* -------------------------------------------------------------- */
@@ -324,17 +1016,13 @@ void mexFunction
 	    {
 		User_Qinit = (mxArray *) pargin [1] ;
 	    }
-	    if ((op == 1 && nargin == 3) || (op == 2 && nargin == 4))
-	    {
-		User_Control_matrix = (mxArray *) pargin [nargin-1] ;
-	    }
 	    if (nargin < 2 || nargin > 4 || nargout > 5 || nargout < 4)
 	    {
 		mexErrMsgTxt ("wrong number of arguments") ;
 	    }
 
 	}
-	else if (STRING_MATCH (operator, "det"))
+	else if (MATCH (operator, "det"))
 	{
 
 	    /* -------------------------------------------------------------- */
@@ -388,30 +1076,17 @@ void mexFunction
 	operation = "numeric factorization" ;
 	Amatrix = (mxArray *) pargin [0] ;
 
-	no_scale = nargout <= 4 ;
+	no_scale = (nargout <= 4) ;
 
 	if (nargout == 6)
 	{
 	    do_info = 5 ;
 	}
-	if (nargin == 3)
-	{
-	    User_Qinit = (mxArray *) pargin [1] ;
-	    User_Control_matrix = (mxArray *) pargin [2] ;
-	}
-	else if (nargin == 2)
-	{
-	    /* Control is k-by-1 where k > 1, Qinit is 1-by-n */
-	    if (mxGetM (pargin [1]) == 1)
-	    {
-		User_Qinit = (mxArray *) pargin [1] ;
-	    }
-	    else
-	    {
-		User_Control_matrix = (mxArray *) pargin [1] ;
-	    }
-	}
-	else if (nargin > 3 || nargout > 6 || nargout < 4)
+        if (nargin >= 2 && mxIsDouble (pargin [1]))
+        {
+            User_Qinit = (mxArray *) pargin [1] ;
+        }
+	if (nargin > 3 || nargout > 6 || nargout < 4)
 	{
 	    mexErrMsgTxt ("wrong number of arguments") ;
 	}
@@ -434,10 +1109,8 @@ void mexFunction
 	    mexErrMsgTxt ("wrong number of arguments") ;
 	}
 
-	pargout [0] = mxCreateDoubleMatrix (UMFPACK_CONTROL, 1, mxREAL) ;
-	User_Control = mxGetPr (pargout [0]) ;
-	umfpack_dl_defaults (User_Control) ;
-
+        /* return default opts struct */
+	pargout [0] = umfpack_mx_defaults ( ) ;
 	return ;
     }
 
@@ -470,8 +1143,8 @@ void mexFunction
     /* (umfpack_dl_* or umfpack_zl_*). */
     A_is_complex = mxIsComplex (Amatrix) ;
     Atype = A_is_complex ? mxCOMPLEX : mxREAL ;
-    Ap = (UF_long *) mxGetJc (Amatrix) ;
-    Ai = (UF_long *) mxGetIr (Amatrix) ;
+    Ap = (Long *) mxGetJc (Amatrix) ;
+    Ai = (Long *) mxGetIr (Amatrix) ;
     Ax = mxGetPr (Amatrix) ;
     Az = mxGetPi (Amatrix) ;
 
@@ -529,20 +1202,11 @@ void mexFunction
     {
 	umfpack_dl_defaults (Control) ;
     }
-    if (User_Control_matrix)
+
+    info_details = 0 ;
+    if (User_Control_struct != NULL)
     {
-	if (mxGetClassID (User_Control_matrix) != mxDOUBLE_CLASS ||
-	    mxIsSparse (User_Control_matrix))
-	{
-	    mexErrMsgTxt ("Control must be a dense real matrix") ;
-	}
-	size = UMFPACK_CONTROL ;
-	size = MIN (size, mxGetNumberOfElements (User_Control_matrix)) ;
-	User_Control = mxGetPr (User_Control_matrix) ;
-	for (i = 0 ; i < size ; i++)
-	{
-	    Control [i] = User_Control [i] ;
-	}
+        info_details = get_all_options (User_Control_struct, Control) ;
     }
 
     if (no_scale)
@@ -553,16 +1217,7 @@ void mexFunction
 	Control [UMFPACK_SCALE] = UMFPACK_SCALE_NONE ;
     }
 
-    if (mxIsNaN (Control [UMFPACK_PRL]))
-    {
-	print_level = UMFPACK_DEFAULT_PRL ;
-    }
-    else
-    {
-	print_level = (UF_long) Control [UMFPACK_PRL] ;
-    }
-
-    Control [UMFPACK_PRL] = print_level ;
+    print_level = (Long) Control [UMFPACK_PRL] ;
 
     /* ---------------------------------------------------------------------- */
     /* get Qinit, if present */
@@ -590,20 +1245,20 @@ void mexFunction
 	{
 	    mexErrMsgTxt ("input Qinit must be dense") ;
 	}
-	Qinit = (UF_long *) mxMalloc (n_col * sizeof (UF_long)) ;
+	Qinit = (Long *) mxMalloc (n_col * sizeof (Long)) ;
 	p = mxGetPr (User_Qinit) ;
 	for (k = 0 ; k < n_col ; k++)
 	{
-	    /* convert from 1-based to 0-based indexing */
-	    Qinit [k] = ((UF_long) (p [k])) - 1 ;
+	    /* convert from 1-based to 0-based */
+	    Qinit [k] = ((Long) (p [k])) - 1 ;
 	}
-
+        Control [UMFPACK_ORDERING] = UMFPACK_ORDERING_GIVEN ;
     }
     else
     {
 	/* umfpack_*_qsymbolic will call colamd to get Qinit. This is the */
 	/* same as calling umfpack_*_symbolic with Qinit set to NULL*/
-	Qinit = (UF_long *) NULL ;
+	Qinit = (Long *) NULL ;
     }
 
     /* ---------------------------------------------------------------------- */
@@ -641,52 +1296,6 @@ void mexFunction
 	}
     }
 
-#ifndef NO_TRANSPOSE_FORWARD_SLASH
-    /* ---------------------------------------------------------------------- */
-    /* create the array transpose for x = b/A */
-    /* ---------------------------------------------------------------------- */
-
-    if (transpose)
-    {
-	/* note that in this case A will be square (nn = n_row = n_col) */
-	/* x = (A.'\b.').' will be computed */
-
-	/* make sure Ci and Cx exist, avoid malloc of zero-sized arrays. */
-	nz = MAX (Ap [nn], 1) ;
-
-	Cp = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
-	Ci = (UF_long *) mxMalloc (nz * sizeof (UF_long)) ;
-	Cx = (double *) mxMalloc (nz * sizeof (double)) ;
-	if (A_is_complex)
-	{
-	    Cz = (double *) mxMalloc (nz * sizeof (double)) ;
-	    status = umfpack_zl_transpose (nn, nn, Ap, Ai, Ax, Az,
-	        (UF_long *) NULL, (UF_long *) NULL, Cp, Ci, Cx, Cz, FALSE) ;
-	}
-	else
-	{
-	    status = umfpack_dl_transpose (nn, nn, Ap, Ai, Ax,
-	        (UF_long *) NULL, (UF_long *) NULL, Cp, Ci, Cx) ;
-	}
-
-	if (status != UMFPACK_OK)
-	{
-	    error ("transpose of A failed", A_is_complex, nargout, pargout,
-		Control, Info, status, do_info);
-	    return ;
-	}
-
-	/* modify pointers so that C will be factorized and solved, not A */
-	Ap = Cp ;
-	Ai = Ci ;
-	Ax = Cx ;
-	if (A_is_complex)
-	{
-	    Az = Cz ;
-	}
-    }
-#endif
-
     /* ---------------------------------------------------------------------- */
     /* perform the symbolic factorization */
     /* ---------------------------------------------------------------------- */
@@ -710,7 +1319,7 @@ void mexFunction
     if (status < 0)
     {
 	error ("symbolic factorization failed", A_is_complex, nargout, pargout,
-	    Control, Info, status, do_info) ;
+	    Control, Info, status) ;
 	return ;
     }
 
@@ -769,7 +1378,7 @@ void mexFunction
 	if (status < 0)
 	{
 	    error ("numeric factorization failed", A_is_complex, nargout,
-		pargout, Control, Info, status, do_info);
+		pargout, Control, Info, status);
 	    return ;
 	}
 
@@ -792,20 +1401,6 @@ void mexFunction
 	    /* solve Ax=b or A'x'=b', and return just the solution x */
 	    /* -------------------------------------------------------------- */
 
-#ifndef NO_TRANSPOSE_FORWARD_SLASH
-	    if (transpose)
-	    {
-		/* A.'x.'=b.' gives the same x=b/A as solving A'x'=b' */
-		/* since C=A.' was factorized, solve with sys = UMFPACK_A */
-		/* since x and b are vectors, x.' and b.' are implicit */
-		pargout [0] = mxCreateDoubleMatrix (1, nn, Xtype) ;
-	    }
-	    else
-	    {
-		pargout [0] = mxCreateDoubleMatrix (nn, 1, Xtype) ;
-	    }
-	    sys = UMFPACK_A ;
-#else
 	    if (transpose)
 	    {
 		/* If A is real, A'x=b is the same as A.'x=b. */
@@ -826,7 +1421,6 @@ void mexFunction
 		pargout [0] = mxCreateDoubleMatrix (nn, 1, Xtype) ;
 		sys = UMFPACK_A ;
 	    }
-#endif
 
 	    /* -------------------------------------------------------------- */
 	    /* print the right-hand-side, B */
@@ -878,23 +1472,6 @@ void mexFunction
 		    Numeric, Control, Info) ;
 	    }
 
-#ifndef NO_TRANSPOSE_FORWARD_SLASH
-	    /* -------------------------------------------------------------- */
-	    /* free the transposed matrix C */
-	    /* -------------------------------------------------------------- */
-
-	    if (transpose)
-	    {
-	        mxFree (Cp) ;
-	        mxFree (Ci) ;
-	        mxFree (Cx) ;
-	        if (A_is_complex)
-	        {
-	            mxFree (Cz) ;
-	        }
-	    }
-#endif
-
 	    /* -------------------------------------------------------------- */
 	    /* free the Numeric object */
 	    /* -------------------------------------------------------------- */
@@ -916,7 +1493,7 @@ void mexFunction
 	    {
 		mxDestroyArray (pargout [0]) ;
 		error ("solve failed", A_is_complex, nargout, pargout, Control,
-			Info, status, do_info) ;
+			Info, status) ;
 		return ;
 	    }
 
@@ -940,27 +1517,21 @@ void mexFunction
 
 	    /* no warning is given if Control (1) is zero */
 
-	    if (Control [UMFPACK_PRL] >= 1)
+	    if (print_level >= 1)
 	    {
 		if (status == UMFPACK_WARNING_singular_matrix)
 		{
-		    sprintf (warning, "matrix is singular\n"
-			"Try increasing Control (%d) and Control (%d).\n"
-			"(Suppress this warning with Control (%d) = 0.)\n",
-			1+UMFPACK_PIVOT_TOLERANCE,
-			1+UMFPACK_SYM_PIVOT_TOLERANCE,
-			1+UMFPACK_PRL) ;
-		    mexWarnMsgTxt (warning) ;
+		    mexWarnMsgTxt (
+                        "matrix is singular\n"
+			"Try increasing opts.tol and opts.symtol.\n"
+                        "Suppress this warning with opts.prl=0\n") ;
 		}
 		else if (Info [UMFPACK_RCOND] < DBL_EPSILON)
 		{
 		    sprintf (warning, "matrix is nearly singular, rcond = %g\n"
-			"Try increasing Control (%d) and Control (%d).\n"
-			"(Suppress this warning with Control (%d) = 0.)\n",
-			Info [UMFPACK_RCOND],
-			1+UMFPACK_PIVOT_TOLERANCE,
-			1+UMFPACK_SYM_PIVOT_TOLERANCE,
-			1+UMFPACK_PRL) ;
+			"Try increasing opts.tol and opts.symtol.\n"
+                        "Suppress this warning with opts.prl=0\n",
+			Info [UMFPACK_RCOND]) ;
 		    mexWarnMsgTxt (warning) ;
 		}
 	    }
@@ -1002,7 +1573,7 @@ void mexFunction
 	    if (status < 0)
 	    {
 		error ("extracting LU factors failed", A_is_complex, nargout,
-		    pargout, Control, Info, status, do_info) ;
+		    pargout, Control, Info, status) ;
 	    }
 	    if (A_is_complex)
 	    {
@@ -1055,7 +1626,7 @@ void mexFunction
 		    umfpack_dl_free_numeric (&Numeric) ;
 		}
 		error ("extracting LU factors failed", A_is_complex, nargout,
-		    pargout, Control, Info, status, do_info) ;
+		    pargout, Control, Info, status) ;
 		return ;
 	    }
 
@@ -1064,8 +1635,8 @@ void mexFunction
 	    unz = MAX (unz, 1) ;
 
 	    /* get temporary space, for the *** ROW *** form of L */
-	    Ltp = (UF_long *) mxMalloc ((n_row+1) * sizeof (UF_long)) ;
-	    Ltj = (UF_long *) mxMalloc (lnz * sizeof (UF_long)) ;
+	    Ltp = (Long *) mxMalloc ((n_row+1) * sizeof (Long)) ;
+	    Ltj = (Long *) mxMalloc (lnz * sizeof (Long)) ;
 	    Ltx = (double *) mxMalloc (lnz * sizeof (double)) ;
 	    if (A_is_complex)
 	    {
@@ -1078,14 +1649,14 @@ void mexFunction
 
 	    /* create permanent copy of the output matrix U */
 	    pargout [1] = mxCreateSparse (n_inner, n_col, unz, Atype) ;
-	    Up = (UF_long *) mxGetJc (pargout [1]) ;
-	    Ui = (UF_long *) mxGetIr (pargout [1]) ;
+	    Up = (Long *) mxGetJc (pargout [1]) ;
+	    Ui = (Long *) mxGetIr (pargout [1]) ;
 	    Ux = mxGetPr (pargout [1]) ;
 	    Uz = mxGetPi (pargout [1]) ;
 
 	    /* temporary space for the integer permutation vectors */
-	    P = (UF_long *) mxMalloc (n_row * sizeof (UF_long)) ;
-	    Q = (UF_long *) mxMalloc (n_col * sizeof (UF_long)) ;
+	    P = (Long *) mxMalloc (n_row * sizeof (Long)) ;
+	    Q = (Long *) mxMalloc (n_col * sizeof (Long)) ;
 
 	    /* get scale factors, if requested */
 	    status2 = UMFPACK_OK ;
@@ -1093,8 +1664,8 @@ void mexFunction
 	    {
 		/* create a diagonal sparse matrix for the scale factors */
 		pargout [4] = mxCreateSparse (n_row, n_row, n_row, mxREAL) ;
-		Rp = (UF_long *) mxGetJc (pargout [4]) ;
-		Ri = (UF_long *) mxGetIr (pargout [4]) ;
+		Rp = (Long *) mxGetJc (pargout [4]) ;
+		Ri = (Long *) mxGetIr (pargout [4]) ;
 		for (i = 0 ; i < n_row ; i++)
 		{
 		    Rp [i] = i ;
@@ -1137,14 +1708,14 @@ void mexFunction
 		mxFree (Q) ;
 		mxDestroyArray (pargout [1]) ;
 		error ("extracting LU factors failed", A_is_complex, nargout,
-		    pargout, Control, Info, status, do_info) ;
+		    pargout, Control, Info, status) ;
 		return ;
 	    }
 
 	    /* create sparse permutation matrix for P */
 	    pargout [2] = mxCreateSparse (n_row, n_row, n_row, mxREAL) ;
-	    Pp = (UF_long *) mxGetJc (pargout [2]) ;
-	    Pi = (UF_long *) mxGetIr (pargout [2]) ;
+	    Pp = (Long *) mxGetJc (pargout [2]) ;
+	    Pi = (Long *) mxGetIr (pargout [2]) ;
 	    Px = mxGetPr (pargout [2]) ;
 	    for (k = 0 ; k < n_row ; k++)
 	    {
@@ -1156,8 +1727,8 @@ void mexFunction
 
 	    /* create sparse permutation matrix for Q */
 	    pargout [3] = mxCreateSparse (n_col, n_col, n_col, mxREAL) ;
-	    Qp = (UF_long *) mxGetJc (pargout [3]) ;
-	    Qi = (UF_long *) mxGetIr (pargout [3]) ;
+	    Qp = (Long *) mxGetJc (pargout [3]) ;
+	    Qi = (Long *) mxGetIr (pargout [3]) ;
 	    Qx = mxGetPr (pargout [3]) ;
 	    for (k = 0 ; k < n_col ; k++)
 	    {
@@ -1169,8 +1740,8 @@ void mexFunction
 
 	    /* permanent copy of L */
 	    pargout [0] = mxCreateSparse (n_row, n_inner, lnz, Atype) ;
-	    Lp = (UF_long *) mxGetJc (pargout [0]) ;
-	    Li = (UF_long *) mxGetIr (pargout [0]) ;
+	    Lp = (Long *) mxGetJc (pargout [0]) ;
+	    Li = (Long *) mxGetIr (pargout [0]) ;
 	    Lx = mxGetPr (pargout [0]) ;
 	    Lz = mxGetPi (pargout [0]) ;
 
@@ -1179,13 +1750,13 @@ void mexFunction
 	    {
 		/* non-conjugate array transpose */
 	        status = umfpack_zl_transpose (n_inner, n_row, Ltp, Ltj, Ltx,
-		    Ltz, (UF_long *) NULL, (UF_long *) NULL, Lp, Li, Lx, Lz,
+		    Ltz, (Long *) NULL, (Long *) NULL, Lp, Li, Lx, Lz,
 		    FALSE) ;
 	    }
 	    else
 	    {
 	        status = umfpack_dl_transpose (n_inner, n_row, Ltp, Ltj, Ltx,
-		    (UF_long *) NULL, (UF_long *) NULL, Lp, Li, Lx) ;
+		    (Long *) NULL, (Long *) NULL, Lp, Li, Lx) ;
 	    }
 
 	    mxFree (Ltp) ;
@@ -1202,7 +1773,7 @@ void mexFunction
 		mxDestroyArray (pargout [2]) ;
 		mxDestroyArray (pargout [3]) ;
 		error ("constructing L failed", A_is_complex, nargout, pargout,
-		    Control, Info, status, do_info) ;
+		    Control, Info, status) ;
 		return ;
 	    }
 
@@ -1250,15 +1821,15 @@ void mexFunction
 	/* return the symbolic factorization */
 	/* ------------------------------------------------------------------ */
 
-	Q = (UF_long *) mxMalloc (n_col * sizeof (UF_long)) ;
-	P = (UF_long *) mxMalloc (n_row * sizeof (UF_long)) ;
-	Front_npivcol = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
-	Front_parent = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
-	Front_1strow = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
-	Front_leftmostdesc = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
-	Chain_start = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
-	Chain_maxrows = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
-	Chain_maxcols = (UF_long *) mxMalloc ((nn+1) * sizeof (UF_long)) ;
+	Q = (Long *) mxMalloc (n_col * sizeof (Long)) ;
+	P = (Long *) mxMalloc (n_row * sizeof (Long)) ;
+	Front_npivcol = (Long *) mxMalloc ((nn+1) * sizeof (Long)) ;
+	Front_parent = (Long *) mxMalloc ((nn+1) * sizeof (Long)) ;
+	Front_1strow = (Long *) mxMalloc ((nn+1) * sizeof (Long)) ;
+	Front_leftmostdesc = (Long *) mxMalloc ((nn+1) * sizeof (Long)) ;
+	Chain_start = (Long *) mxMalloc ((nn+1) * sizeof (Long)) ;
+	Chain_maxrows = (Long *) mxMalloc ((nn+1) * sizeof (Long)) ;
+	Chain_maxcols = (Long *) mxMalloc ((nn+1) * sizeof (Long)) ;
 
 	if (A_is_complex)
 	{
@@ -1289,14 +1860,14 @@ void mexFunction
 	    mxFree (Chain_maxrows) ;
 	    mxFree (Chain_maxcols) ;
 	    error ("extracting symbolic factors failed", A_is_complex, nargout,
-		pargout, Control, Info, status, do_info) ;
+		pargout, Control, Info, status) ;
 	    return ;
 	}
 
 	/* create sparse permutation matrix for P */
 	pargout [0] = mxCreateSparse (n_row, n_row, n_row, mxREAL) ;
-	Pp = (UF_long *) mxGetJc (pargout [0]) ;
-	Pi = (UF_long *) mxGetIr (pargout [0]) ;
+	Pp = (Long *) mxGetJc (pargout [0]) ;
+	Pi = (Long *) mxGetIr (pargout [0]) ;
 	Px = mxGetPr (pargout [0]) ;
 	for (k = 0 ; k < n_row ; k++)
 	{
@@ -1308,8 +1879,8 @@ void mexFunction
 
 	/* create sparse permutation matrix for Q */
 	pargout [1] = mxCreateSparse (n_col, n_col, n_col, mxREAL) ;
-	Qp = (UF_long *) mxGetJc (pargout [1]) ;
-	Qi = (UF_long *) mxGetIr (pargout [1]) ;
+	Qp = (Long *) mxGetJc (pargout [1]) ;
+	Qi = (Long *) mxGetIr (pargout [1]) ;
 	Qx = mxGetPr (pargout [1]) ;
 	for (k = 0 ; k < n_col ; k++)
 	{
@@ -1377,11 +1948,13 @@ void mexFunction
     if (do_info > 0)
     {
 	/* return Info */
-	pargout [do_info] = mxCreateDoubleMatrix (1, UMFPACK_INFO, mxREAL) ;
-	Out_Info = mxGetPr (pargout [do_info]) ;
-	for (i = 0 ; i < UMFPACK_INFO ; i++)
-	{
-	    Out_Info [i] = Info [i] ;
-	}
+        if (info_details > 0)
+        {
+            pargout [do_info] = umfpack_mx_info_details (Control, Info) ;
+        }
+        else
+        {
+            pargout [do_info] = umfpack_mx_info_user (Control, Info, do_solve) ;
+        }
     }
 }
diff --git a/UMFPACK/Makefile b/UMFPACK/Makefile
index a707234..606654e 100644
--- a/UMFPACK/Makefile
+++ b/UMFPACK/Makefile
@@ -1,29 +1,23 @@
 #-------------------------------------------------------------------------------
-# UMFPACK makefile (for GNU make or original make)
+# UMFPACK Makefile
 #-------------------------------------------------------------------------------
 
+VERSION = 5.7.1
+
 # UMFPACK requires the AMD package to be in ../AMD
 
-default: library
+default: all
 
-include ../UFconfig/UFconfig.mk
+include ../SuiteSparse_config/SuiteSparse_config.mk
 
-# compile all C code (except hb, fortran, and fortran64), including AMD and the
-# MATLAB mexFunctions
+# compile all C code (except hb, fortran, and fortran64), incl. AMD and demos
 all:
-	( cd ../AMD ; $(MAKE) library )
-	( cd ../AMD ; $(MAKE) mex )
 	( cd Lib    ; $(MAKE) )
 	( cd Demo   ; $(MAKE) )
-	( cd MATLAB ; $(MAKE) )
-	- cat Doc/License
 
-# compile just the C-callable libraries and demo programs (not mexFunctions)
+# compile just the C-callable UMFPACK library
 library:
-	( cd ../AMD ; $(MAKE) library )
 	( cd Lib    ; $(MAKE) )
-	( cd Demo   ; $(MAKE) )
-	- cat Doc/License
 
 # compile the FORTRAN interface and demo program
 fortran:
@@ -39,28 +33,25 @@ hb:
 
 # remove object files, but keep the compiled programs and library archives
 clean:
-	( cd ../AMD ; $(MAKE) clean )
 	( cd Lib    ; $(MAKE) clean )
 	( cd Demo   ; $(MAKE) clean )
-	( cd MATLAB ; $(MAKE) clean )
 	( cd Doc    ; $(MAKE) clean )
+	( cd MATLAB ; $(RM) $(CLEAN) rename.h )
 
 # clean, and then remove compiled programs and library archives
 purge:
-	( cd ../AMD ; $(MAKE) purge )
 	( cd Lib    ; $(MAKE) purge )
 	( cd Demo   ; $(MAKE) purge )
-	( cd MATLAB ; $(MAKE) purge )
 	( cd Doc    ; $(MAKE) purge )
+	( cd Tcov   ; $(MAKE) purge )
+	( cd MATLAB ; $(RM) $(CLEAN) rename.h *.mex* )
 
 # create PDF documents for the original distribution
-doc:
-	( cd ../AMD ; $(MAKE) doc )
+docs:
 	( cd Doc    ; $(MAKE) )
 
 # get ready for distribution
 dist: purge
-	( cd ../AMD ; $(MAKE) dist )
 	( cd Demo   ; $(MAKE) dist )
 	( cd Doc    ; $(MAKE) )
 
@@ -68,12 +59,22 @@ distclean: purge
 
 ccode: library
 
-# compile the MATLAB mexFunction
-mex:
-	( cd ../AMD/MATLAB ; $(MAKE) )
-	( cd MATLAB ; $(MAKE) )
+lib: library
 
 # statement coverage (requires Linux; takes a lot of time and disk space)
 cov: purge
-	( cd Tcov ; ./DO.linux ; ./covall )
+	( cd Tcov ; ./DO.all )
+
+# install UMFPACK
+install:
+	$(CP) Lib/libumfpack.a $(INSTALL_LIB)/libumfpack.$(VERSION).a
+	( cd $(INSTALL_LIB) ; ln -sf libumfpack.$(VERSION).a libumfpack.a )
+	$(CP) Include/*.h $(INSTALL_INCLUDE)
+	chmod 644 $(INSTALL_LIB)/libumfpack*.a
+	chmod 644 $(INSTALL_INCLUDE)/umfpack*.h
+
+# uninstall UMFPACK
+uninstall:
+	$(RM) $(INSTALL_LIB)/libumfpack*.a
+	$(RM) $(INSTALL_INCLUDE)/umfpack*.h
 
diff --git a/UMFPACK/README.txt b/UMFPACK/README.txt
index d4f9d7b..4cdd79e 100644
--- a/UMFPACK/README.txt
+++ b/UMFPACK/README.txt
@@ -1,39 +1,45 @@
+UMFPACK, Copyright (c) 1995-2013 by Timothy A. Davis,
+http://www.suitesparse.com
+
 UMFPACK :  a set of routines solving sparse linear systems via LU
     factorization.  Requires three other packages:  the BLAS (dense matrix
-    operations), AMD (sparse matrix minimum degree ordering), and UFconfig.
+    operations), AMD (sparse matrix minimum degree ordering), and
+    SuiteSparse_config.
+
     Includes a C-callable and MATLAB interface, and a basic FORTRAN 77
     interface to a subset of the C-callable routines.  Requires AMD Version
     2.0 or later.
 
-The AMD, UFconfig, and UMFPACK directories must all reside in the same parent
-directory.
+    Unless you compile with -DNCHOLMOD, addtional packages are required:
+    CHOLMOD, CAMD, CCOLAMD, COLAMD, and metis-4.0.
+
+The AMD, SuiteSparse_config, and UMFPACK directories must all reside in the
+same parent directory.  If the -DNCHOLMOD is not used, the CHOLMOD, CAMD,
+CCOLAMD, COLAMD, and metis-4.0 also also exist in the same parent.
 
 Quick start (Unix, or Windows with Cygwin):
 
     To compile, test, and install both UMFPACK and AMD, the UMFPACK and AMD
-    directories must be in the same parent directory.  To configure, edit
-    the UFconfig/UFconfig.mk file (otherwise, you may get warnings that the
-    BLAS (dgemm, etc) are not found).  You may use UMFPACK_CONFIG = -DNBLAS in
-    the UFconfig/UFconfig.mk file, to avoid using the BLAS, but UMFPACK will be
-    slow.  Next, cd to this directory (UMFPACK) and type "make".  To compile
-    and run a FORTRAN demo program for Harwell/Boeing matrices, type "make hb".
-    To compile a FORTRAN main program that calls the 32-bit C-callable UMFPACK
-    library, type "make fortran".  When done, type "make clean" to remove
-    unused *.o files (keeps the compiled libraries and demo programs).  See
-    the User Guide (Doc/UserGuide.pdf), or ../UFconfig/UFconfig.mk for more
-    details (including options for compiling in 64-bit mode).
+    directories must be in the same parent directory.  To configure, edit the
+    SuiteSparse_config/SuiteSparse_config.mk file (otherwise, you may get
+    warnings that the BLAS (dgemm, etc) are not found).  You may use
+    UMFPACK_CONFIG = -DNBLAS in the SuiteSparse_config/SuiteSparse_config.mk
+    file, to avoid using the BLAS, but UMFPACK will be slow.  Next, cd to this
+    directory (UMFPACK) and type "make".  To compile and run a FORTRAN demo
+    program for Harwell/Boeing matrices, type "make hb".  To compile a FORTRAN
+    main program that calls the 32-bit C-callable UMFPACK library, type "make
+    fortran".  When done, type "make clean" to remove unused *.o files (keeps
+    the compiled libraries and demo programs).  See the User Guide
+    (Doc/UserGuide.pdf), or ../SuiteSparse_config/SuiteSparse_config.mk for
+    more details (including options for compiling in 64-bit mode).
 
 Quick start (for MATLAB users):
 
     To compile, test, and install the UMFPACK mexFunction, cd to the
     UMFPACK/MATLAB directory and type umfpack_make at the MATLAB prompt.
 
-    NOTE: DO NOT ATTEMPT TO USE THIS CODE IN 64-BIT MATLAB (v7.3).
-    It is not yet ported to that version of MATLAB.
-
 --------------------------------------------------------------------------------
 
-UMFPACK, Copyright (c) 1995-2006 by Timothy A.  Davis.  All Rights Reserved.
 UMFPACK is available under alternate licences; contact T. Davis for details.
 
 UMFPACK License:
@@ -68,13 +74,13 @@ UMFPACK License:
 
 Availability:
 
-    http://www.cise.ufl.edu/research/sparse/umfpack
+    http://www.suitesparse.com
 
     UMFPACK (including versions 2.2.1 and earlier, in FORTRAN) is available at
-    http://www.cise.ufl.edu/research/sparse.  MA38 is available in the Harwell
+    http://www.suitesparse.com.  MA38 is available in the Harwell
     Subroutine Library.  This version of UMFPACK includes a modified form of
     COLAMD Version 2.0, originally released on Jan. 31, 2000, also available at
-    http://www.cise.ufl.edu/research/sparse.  COLAMD V2.0 is also incorporated
+    http://www.suitesparse.com.  COLAMD V2.0 is also incorporated
     as a built-in function in MATLAB version 6.1, by The MathWorks, Inc.
     (http://www.mathworks.com).  COLAMD V1.0 appears as a column-preordering
     in SuperLU (SuperLU is available at http://www.netlib.org).
@@ -105,10 +111,10 @@ Description:
 
 Authors:
 
-    Timothy A. Davis (davis at cise.ufl.edu), University of Florida.
+    Timothy A. Davis (DrTimothyAldenDavis at gmail.com)
 
     Includes a modified version of COLAMD V2.0, by Stefan I. Larimore and
-    Timothy A. Davis, University of Florida.  The COLAMD algorithm was developed
+    Timothy A. Davis.  The COLAMD algorithm was developed
     in collaboration with John Gilbert, Xerox Palo Alto Research Center, and
     Esmond Ng, Lawrence Berkeley National Laboratory.
 
@@ -130,7 +136,7 @@ Acknowledgements:
     I would also like to thank the many researchers who provided sparse
     matrices from a wide range of domains and used earlier versions of UMFPACK/
     MA38 in their applications, and thus assisted in the practical development
-    of the algorithm (see http://www.cise.ufl.edu/research/sparse, future
+    of the algorithm (see http://www.suitesparse.com, future
     contributions of matrices are always welcome).
 
     The MathWorks, Inc., provided a pre-release of MATLAB V6 which allowed me
@@ -224,15 +230,15 @@ Files and directories in the UMFPACK distribution:
 
     umf_config.h		configuration file (BLAS, memory, timer)
     umf_internal.h		definitions internal to UMFPACK
-    umf_version.h		version definitions (int/UF_long, real/complex)
+    umf_version.h		version definitions (int/long, real/complex)
 
-    umf_2by2.[ch]
     umf_analyze.[ch]		symbolic factorization of A'*A
     umf_apply_order.[ch]	apply column etree postorder
     umf_assemble.[ch]		assemble elements into current front
     umf_blas3_update.[ch]	rank-k update.  Uses level-3 BLAS
     umf_build_tuples.[ch]	construct tuples for elements
     umf_colamd.[ch]		COLAMD pre-ordering, modified for UMFPACK
+    umf_cholmod.[ch]		interface to CHOLMOD
     umf_create_element.[ch]	create a new element
     umf_dump.[ch]		debugging routines, not normally active
     umf_extend_front.[ch]	extend the current frontal matrix
@@ -334,9 +340,9 @@ Files and directories in the UMFPACK distribution:
     umfpack_zl_demo.sed		for creating umfpack_zl_demo.c
 
     umfpack_di_demo.c		a full demo (real/int version)
-    umfpack_dl_demo.c		a full demo (real/UF_long version)
+    umfpack_dl_demo.c		a full demo (real/long version)
     umfpack_zi_demo.c		a full demo (complex/int version)
-    umfpack_zl_demo.c		a full demo (complex/UF_long version)
+    umfpack_zl_demo.c		a full demo (complex/long version)
 
     umfpack_di_demo.out		umfpack_di_demo output
     umfpack_dl_demo.out		umfpack_dl_demo output
@@ -386,7 +392,7 @@ Files and directories in the UMFPACK distribution:
     umfpack_report.m		report statistics
     umfpack_simple.m		a simple umfpack demo
     umfpack_solve.m		x=A\b or b/A for arbitrary b
-    umfpack_test.m		extensive test, requires UF sparse matrices
+    umfpack_test.m		extensive test, requires UFget
     umfpackmex.c		the umfpack mexFunction
     west0067.mat		sparse matrix for umfpack_demo.m
 
diff --git a/UMFPACK/Source/cholmod_blas.h b/UMFPACK/Source/cholmod_blas.h
index 7957968..2cc47e3 100644
--- a/UMFPACK/Source/cholmod_blas.h
+++ b/UMFPACK/Source/cholmod_blas.h
@@ -2,15 +2,6 @@
 /* === Include/cholmod_blas.h =============================================== */
 /* ========================================================================== */
 
-/* -----------------------------------------------------------------------------
- * CHOLMOD/Include/cholmod_blas.h.
- * Copyright (C) 2005-2006, Univ. of Florida.  Author: Timothy A. Davis
- * CHOLMOD/Include/cholmod_blas.h is licensed under Version 2.1 of the GNU
- * Lesser General Public License.  See lesser.txt for a text of the license.
- * CHOLMOD is also available under other licenses; contact authors for details.
- * http://www.cise.ufl.edu/research/sparse
- * -------------------------------------------------------------------------- */
-
 /* This does not need to be included in the user's program. */
 
 #ifndef CHOLMOD_BLAS_H
@@ -32,10 +23,15 @@
 #define CHOLMOD_LINUX
 #define CHOLMOD_ARCHITECTURE "Linux"
 
+#elif defined (__APPLE__)
+#define CHOLMOD_MAC
+#define CHOLMOD_ARCHITECTURE "Mac"
+
 #elif defined (_AIX) || defined (MIBM_RS) || defined (ARCH_IBM_RS)
 #define CHOLMOD_AIX
 #define CHOLMOD_ARCHITECTURE "IBM AIX"
-#define BLAS_NO_UNDERSCORE
+/* recent reports from IBM AIX seem to indicate that this is not needed: */
+/* #define BLAS_NO_UNDERSCORE */
 
 #elif defined (__alpha) || defined (MALPHA) || defined (ARCH_ALPHA)
 #define CHOLMOD_ALPHA
@@ -68,7 +64,6 @@
 #define CHOLMOD_ARCHITECTURE "unknown"
 #endif
 
-
 /* ========================================================================== */
 /* === BLAS and LAPACK names ================================================ */
 /* ========================================================================== */
@@ -76,7 +71,7 @@
 /* Prototypes for the various versions of the BLAS.  */
 
 /* Determine if the 64-bit Sun Performance BLAS is to be used */
-#if defined(CHOLMOD_SOL2) && !defined(NSUNPERF) && defined(LONG) && defined(LONGBLAS)
+#if defined(CHOLMOD_SOL2) && !defined(NSUNPERF) && defined(BLAS64)
 #define SUN64
 #endif
 
@@ -146,23 +141,20 @@
 /* === BLAS and LAPACK integer arguments ==================================== */
 /* ========================================================================== */
 
-/* CHOLMOD can be compiled with -D'LONGBLAS=long' for the Sun Performance
- * Library, or -D'LONGBLAS=long long' for SGI's SCSL BLAS.  This defines the
- * integer used in the BLAS for the cholmod_l_* routines.
- *
- * The "int" version of CHOLMOD always uses the "int" version of the BLAS.
- */
+/* Compile CHOLMOD, UMFPACK, and SPQR with -DBLAS64 if you have a BLAS that
+ * uses 64-bit integers */
 
-#if defined (LONGBLAS) && defined (LONG)
-#define BLAS_INT LONGBLAS
+#if defined (LONGBLAS) || defined (BLAS64)
+#define BLAS_INT SuiteSparse_long
 #else
 #define BLAS_INT int
 #endif
 
 /* If the BLAS integer is smaller than the basic CHOLMOD integer, then we need
- * to check for integer overflow when converting from one to the other.  If
- * any integer overflows, the externally-defined blas_ok variable is set to
- * FALSE.  blas_ok should be set to TRUE before calling any BLAS_* macro.
+ * to check for integer overflow when converting from Int to BLAS_INT.  If
+ * any integer overflows, the externally-defined BLAS_OK variable is
+ * set to FALSE.  BLAS_OK should be set to TRUE before calling any
+ * BLAS_* macro.
  */
 
 #define CHECK_BLAS_INT (sizeof (BLAS_INT) < sizeof (Int))
@@ -179,12 +171,12 @@ void BLAS_DGEMV (char *trans, BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_dgemv(trans,m,n,alpha,A,lda,X,incx,beta,Y,incy) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DGEMV (trans, &M, &N, alpha, A, &LDA, X, &INCX, beta, Y, &INCY) ; \
     } \
@@ -197,12 +189,12 @@ void BLAS_ZGEMV (char *trans, BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_zgemv(trans,m,n,alpha,A,lda,X,incx,beta,Y,incy) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZGEMV (trans, &M, &N, alpha, A, &LDA, X, &INCX, beta, Y, &INCY) ; \
     } \
@@ -214,11 +206,11 @@ void BLAS_DTRSV (char *uplo, char *trans, char *diag, BLAS_INT *n, double *A,
 #define BLAS_dtrsv(uplo,trans,diag,n,A,lda,X,incx) \
 { \
     BLAS_INT N = n, LDA = lda, INCX = incx ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DTRSV (uplo, trans, diag, &N, A, &LDA, X, &INCX) ; \
     } \
@@ -230,11 +222,11 @@ void BLAS_ZTRSV (char *uplo, char *trans, char *diag, BLAS_INT *n, double *A,
 #define BLAS_ztrsv(uplo,trans,diag,n,A,lda,X,incx) \
 { \
     BLAS_INT N = n, LDA = lda, INCX = incx ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZTRSV (uplo, trans, diag, &N, A, &LDA, X, &INCX) ; \
     } \
@@ -247,11 +239,12 @@ void BLAS_DTRSM (char *side, char *uplo, char *transa, char *diag, BLAS_INT *m,
 #define BLAS_dtrsm(side,uplo,transa,diag,m,n,alpha,A,lda,B,ldb) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, LDB = ldb ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (LDB,ldb))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (LDB,ldb) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DTRSM (side, uplo, transa, diag, &M, &N, alpha, A, &LDA, B, &LDB);\
     } \
@@ -264,11 +257,12 @@ void BLAS_ZTRSM (char *side, char *uplo, char *transa, char *diag, BLAS_INT *m,
 #define BLAS_ztrsm(side,uplo,transa,diag,m,n,alpha,A,lda,B,ldb) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, LDB = ldb ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+        EQ (LDB,ldb))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (LDB,ldb) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZTRSM (side, uplo, transa, diag, &M, &N, alpha, A, &LDA, B, &LDB);\
     } \
@@ -281,12 +275,12 @@ void BLAS_DGEMM (char *transa, char *transb, BLAS_INT *m, BLAS_INT *n,
 #define BLAS_dgemm(transa,transb,m,n,k,alpha,A,lda,B,ldb,beta,C,ldc) \
 { \
     BLAS_INT M = m, N = n, K = k, LDA = lda, LDB = ldb, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (K,k) && \
+        EQ (LDA,lda) && EQ (LDB,ldb) && EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (K,k) && EQ (LDA,lda) \
-		&& EQ (LDB,ldb) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DGEMM (transa, transb, &M, &N, &K, alpha, A, &LDA, B, &LDB, beta, \
 	    C, &LDC) ; \
@@ -300,12 +294,12 @@ void BLAS_ZGEMM (char *transa, char *transb, BLAS_INT *m, BLAS_INT *n,
 #define BLAS_zgemm(transa,transb,m,n,k,alpha,A,lda,B,ldb,beta,C,ldc) \
 { \
     BLAS_INT M = m, N = n, K = k, LDA = lda, LDB = ldb, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (K,k) && \
+        EQ (LDA,lda) && EQ (LDB,ldb) && EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (K,k) && EQ (LDA,lda) \
-		&& EQ (LDB,ldb) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZGEMM (transa, transb, &M, &N, &K, alpha, A, &LDA, B, &LDB, beta, \
 	    C, &LDC) ; \
@@ -319,11 +313,12 @@ void BLAS_DSYRK (char *uplo, char *trans, BLAS_INT *n, BLAS_INT *k,
 #define BLAS_dsyrk(uplo,trans,n,k,alpha,A,lda,beta,C,ldc) \
 { \
     BLAS_INT N = n, K = k, LDA = lda, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && \
+        EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DSYRK (uplo, trans, &N, &K, alpha, A, &LDA, beta, C, &LDC) ; \
     } \
@@ -336,11 +331,12 @@ void BLAS_ZHERK (char *uplo, char *trans, BLAS_INT *n, BLAS_INT *k,
 #define BLAS_zherk(uplo,trans,n,k,alpha,A,lda,beta,C,ldc) \
 { \
     BLAS_INT N = n, K = k, LDA = lda, LDC = ldc ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && \
+        EQ (LDC,ldc))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (K,k) && EQ (LDA,lda) && EQ (LDC,ldc) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZHERK (uplo, trans, &N, &K, alpha, A, &LDA, beta, C, &LDC) ; \
     } \
@@ -352,11 +348,11 @@ void LAPACK_DPOTRF (char *uplo, BLAS_INT *n, double *A, BLAS_INT *lda,
 #define LAPACK_dpotrf(uplo,n,A,lda,info) \
 { \
     BLAS_INT N = n, LDA = lda, INFO = 1 ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	LAPACK_DPOTRF (uplo, &N, A, &LDA, &INFO) ; \
     } \
@@ -369,11 +365,11 @@ void LAPACK_ZPOTRF (char *uplo, BLAS_INT *n, double *A, BLAS_INT *lda,
 #define LAPACK_zpotrf(uplo,n,A,lda,info) \
 { \
     BLAS_INT N = n, LDA = lda, INFO = 1 ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (LDA,lda))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (LDA,lda) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	LAPACK_ZPOTRF (uplo, &N, A, &LDA, &INFO) ; \
     } \
@@ -387,11 +383,11 @@ void BLAS_DSCAL (BLAS_INT *n, double *alpha, double *Y, BLAS_INT *incy) ;
 #define BLAS_dscal(n,alpha,Y,incy) \
 { \
     BLAS_INT N = n, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DSCAL (&N, alpha, Y, &INCY) ; \
     } \
@@ -402,11 +398,11 @@ void BLAS_ZSCAL (BLAS_INT *n, double *alpha, double *Y, BLAS_INT *incy) ;
 #define BLAS_zscal(n,alpha,Y,incy) \
 { \
     BLAS_INT N = n, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (N,n) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (N,n) && EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZSCAL (&N, alpha, Y, &INCY) ; \
     } \
@@ -419,12 +415,12 @@ void BLAS_DGER (BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_dger(m,n,alpha,X,incx,Y,incy,A,lda) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+          EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_DGER (&M, &N, alpha, X, &INCX, Y, &INCY, A, &LDA) ; \
     } \
@@ -437,12 +433,12 @@ void BLAS_ZGER (BLAS_INT *m, BLAS_INT *n, double *alpha,
 #define BLAS_zgeru(m,n,alpha,X,incx,Y,incy,A,lda) \
 { \
     BLAS_INT M = m, N = n, LDA = lda, INCX = incx, INCY = incy ; \
-    if (CHECK_BLAS_INT) \
+    if (CHECK_BLAS_INT && !(EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && \
+          EQ (INCX,incx) && EQ (INCY,incy))) \
     { \
-	blas_ok &= EQ (M,m) && EQ (N,n) && EQ (LDA,lda) && EQ (INCX,incx) \
-		&& EQ (INCY,incy) ; \
+	BLAS_OK = FALSE ; \
     } \
-    if (blas_ok) \
+    if (!CHECK_BLAS_INT || BLAS_OK) \
     { \
 	BLAS_ZGER (&M, &N, alpha, X, &INCX, Y, &INCY, A, &LDA) ; \
     } \
diff --git a/UMFPACK/Source/umf_2by2.c b/UMFPACK/Source/umf_2by2.c
deleted file mode 100644
index 0e31011..0000000
--- a/UMFPACK/Source/umf_2by2.c
+++ /dev/null
@@ -1,860 +0,0 @@
-/* ========================================================================== */
-/* === UMF_2by2 ============================================================= */
-/* ========================================================================== */
-
-/* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
-/* -------------------------------------------------------------------------- */
-
-/*  Not user-callable.  Computes a row permutation P so that A (P,:) has a
- *  mostly zero-free diagonal, with large entries on the diagonal.  It does this
- *  by swapping pairs of rows.  Once a row is swapped it is not swapped again.
- *  This is a "cheap" assignment, not a complete max. transversal or
- *  bi-partite matching.  It is only a partial matching.  For most matrices
- *  for which this algorithm is used, however, the matching is complete (in
- *  UMFPACK this algorithm is used for matrices with roughly symmetric pattern,
- *  and these matrices typically have a mostly-zero-free diagonal to begin with.
- *  This algorithm is not meant to be used on arbitrary unsymmetric matrices
- *  (for those matrices, UMFPACK uses its unsymmetric strategy and does not
- *  use this algorithm).
- *
- *  Even if incomplete, the matching is usually good enough for UMFPACK's
- *  symmetric strategy, which can easily pivot off the diagonal during numerical
- *  factorization if it finds a weak diagonal entry.
- *
- *  The algorithms works as follows.  First, row scaling factors are computed,
- *  and weak diagonal entries are found.  A weak entry is a value A(k,k) whose
- *  absolute value is < tol * max (abs (A (:,k))).  For each weak diagonal k in
- *  increasing order of degree in A+A', the algorithm finds an index j such
- *  that A (k,j) and A (j,k) are "large" (greater than or equal to tol times
- *  the largest magnitude in their columns).  Row j must also not have already
- *  been swapped.  Rows j and k are then swapped.  If we come to a diagonal k
- *  that has already been swapped, then it is not modified.  This case occurs
- *  for "oxo" pivots:
- *
- *    k j
- *  k o x
- *  j x o
- *
- *  which are swapped once to obtain
- *
- *    k j
- *  j x o
- *  k o x
- *
- *  These two rows are then not modified any further (A (j,j) was weak, but
- *  after one swap the permuted the jth diagonal entry is strong.
- *
- *  This algorithm only works on square matrices (real, complex, or pattern-
- *  only).  The numerical values are optional.  If not present, each entry is
- *  treated as numerically acceptable (tol is ignored), and the algorithm
- *  operates by just using the pattern, not the values.  Each column of the
- *  input matrix A must be sorted, with no duplicate entries.  The matrix A
- *  can be optionally scaled prior to the numerical test.  The matrix A (:,P)
- *  has the same diagonal entries as A (:,P), except in different order.  So
- *  the output permutation P can also be used to swap the columns of A.
- */
-
-#include "umf_internal.h"
-#include "umf_2by2.h"
-
-#ifndef NDEBUG
-#include "umf_is_permutation.h"
-#endif
-
-/* x is "weak" if it is less than ctol.  If x or ctol are NaN, then define
- * x as not "weak".  This is a rather arbitrary choice, made to simplify the
- * computation.  On all but a PC with Microsoft C/C++, this test becomes
- * ((x) - ctol < 0). */
-#define WEAK(x,ctol) (SCALAR_IS_LTZERO ((x)-(ctol)))
-
-/* For flag value in Next [col] */
-#define IS_WEAK -2
-
-/* ========================================================================== */
-/* === two_by_two =========================================================== */
-/* ========================================================================== */
-
-PRIVATE Int two_by_two	    /* returns # unmatched weak diagonals */
-(
-    /* input, not modified */
-    Int n2,		/* C is n2-by-n2 */
-    Int Cp [ ],		/* size n2+1, column pointers for C */
-    Int Ci [ ],		/* size snz = Cp [n2], row indices for C */
-    Int Degree [ ],	/* Degree [i] = degree of row i of C+C' */
-
-    /* input, not defined on output */
-    Int Next [ ],	/* Next [k] == IS_WEAK if k is a weak diagonal */
-    Int Ri [ ],		/* Ri [i] is the length of row i in C */
-
-    /* output, not defined on input */
-    Int P [ ],
-
-    /* workspace, not defined on input or output */
-    Int Rp [ ],
-    Int Head [ ]
-)
-{
-    Int deg, newcol, row, col, p, p2, unmatched, k, j, j2, j_best, best, jdiff,
-	jdiff_best, jdeg, jdeg_best, cp, cp1, cp2, rp, rp1, rp2, maxdeg,
-	mindeg ;
-
-    /* ---------------------------------------------------------------------- */
-    /* place weak diagonals in the degree lists */
-    /* ---------------------------------------------------------------------- */
-
-    for (deg = 0 ; deg < n2 ; deg++)
-    {
-	Head [deg] = EMPTY ;
-    }
-
-    maxdeg = 0 ;
-    mindeg = Int_MAX ;
-    for (newcol = n2-1 ; newcol >= 0 ; newcol--)
-    {
-	if (Next [newcol] == IS_WEAK)
-	{
-	    /* add this column to the list of weak nodes */
-	    DEBUGm1 (("    newcol "ID" has a weak diagonal deg "ID"\n",
-		newcol, deg)) ;
-	    deg = Degree [newcol] ;
-	    ASSERT (deg >= 0 && deg < n2) ;
-	    Next [newcol] = Head [deg] ;
-	    Head [deg] = newcol ;
-	    maxdeg = MAX (maxdeg, deg) ;
-	    mindeg = MIN (mindeg, deg) ;
-	}
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* construct R = C' (C = strong entries in pruned submatrix) */
-    /* ---------------------------------------------------------------------- */
-
-    /* Ri [0..n2-1] is the length of each row of R */
-    /* use P as temporary pointer into the row form of R [ */
-    Rp [0] = 0 ;
-    for (row = 0 ; row < n2 ; row++)
-    {
-	Rp [row+1] = Rp [row] + Ri [row] ;
-	P [row] = Rp [row] ;
-    }
-    /* Ri no longer needed for row counts */
-
-    /* all entries in C are strong */
-    for (col = 0 ; col < n2 ; col++)
-    {
-	p2 = Cp [col+1] ;
-	for (p = Cp [col] ; p < p2 ; p++)
-	{
-	    /* place the column index in row = Ci [p] */
-	    Ri [P [Ci [p]]++] = col ;
-	}
-    }
-
-    /* contents of P no longer needed ] */
-
-#ifndef NDEBUG
-    DEBUG0 (("==================R: row form of strong entries in A:\n")) ;
-    UMF_dump_col_matrix ((double *) NULL,
-#ifdef COMPLEX
-	    (double *) NULL,
-#endif
-	    Ri, Rp, n2, n2, Rp [n2]) ;
-#endif
-    ASSERT (AMD_valid (n2, n2, Rp, Ri) == AMD_OK) ;
-
-    /* ---------------------------------------------------------------------- */
-    /* for each weak diagonal, find a pair of strong off-diagonal entries */
-    /* ---------------------------------------------------------------------- */
-
-    for (row = 0 ; row < n2 ; row++)
-    {
-	P [row] = EMPTY ;
-    }
-
-    unmatched = 0 ;
-    best = EMPTY ;
-    jdiff = EMPTY ;
-    jdeg = EMPTY ;
-
-    for (deg = mindeg ; deg <= maxdeg ; deg++)
-    {
-	/* find the next weak diagonal of lowest degree */
-	DEBUGm2 (("---------------------------------- Deg: "ID"\n", deg)) ;
-	for (k = Head [deg] ; k != EMPTY ; k = Next [k])
-	{
-	    DEBUGm2 (("k: "ID"\n", k)) ;
-	    if (P [k] == EMPTY)
-	    {
-		/* C (k,k) is a weak diagonal entry.  Find an index j != k such
-		 * that C (j,k) and C (k,j) are both strong, and also such
-		 * that Degree [j] is minimized.  In case of a tie, pick
-		 * the smallest index j.  C and R contain the pattern of
-		 * strong entries only.
-		 *
-		 * Note that row k of R and column k of C are both sorted. */
-
-		DEBUGm4 (("===== Weak diagonal k = "ID"\n", k)) ;
-		DEBUG1 (("Column k of C:\n")) ;
-		for (p = Cp [k] ; p < Cp [k+1] ; p++)
-		{
-		    DEBUG1 (("    "ID": deg "ID"\n", Ci [p], Degree [Ci [p]]));
-		}
-		DEBUG1 (("Row k of R (strong entries only):\n")) ;
-		for (p = Rp [k] ; p < Rp [k+1] ; p++)
-		{
-		    DEBUG1 (("    "ID": deg "ID"\n", Ri [p], Degree [Ri [p]]));
-		}
-
-		/* no (C (k,j), C (j,k)) pair exists yet */
-		j_best = EMPTY ;
-		jdiff_best = Int_MAX ;
-		jdeg_best = Int_MAX ;
-
-		/* pointers into column k (including values) */
-		cp1 = Cp [k] ;
-		cp2 = Cp [k+1] ;
-		cp = cp1 ;
-
-		/* pointers into row k (strong entries only, no values) */
-		rp1 = Rp [k] ;
-		rp2 = Rp [k+1] ;
-		rp = rp1 ;
-
-		/* while entries searched in column k and row k */
-		while (TRUE)
-		{
-
-		    if (cp >= cp2)
-		    {
-			/* no more entries in this column */
-			break ;
-		    }
-
-		    /* get C (j,k), which is strong */
-		    j = Ci [cp] ;
-
-		    if (rp >= rp2)
-		    {
-			/* no more entries in this column */
-			break ;
-		    }
-
-		    /* get R (k,j2), which is strong */
-		    j2 = Ri [rp] ;
-
-		    if (j < j2)
-		    {
-			/* C (j,k) is strong, but R (k,j) is not strong */
-			cp++ ;
-			continue ;
-		    }
-
-		    if (j2 < j)
-		    {
-			/* C (k,j2) is strong, but R (j2,k) is not strong */
-			rp++ ;
-			continue ;
-		    }
-
-		    /* j == j2: C (j,k) is strong and R (k,j) is strong */
-
-		    best = FALSE ;
-
-		    if (P [j] == EMPTY)
-		    {
-			/* j has not yet been matched */
-			jdeg = Degree [j] ;
-			jdiff = SCALAR_ABS (k-j) ;
-
-			DEBUG1 (("Try candidate j "ID" deg "ID" diff "ID
-				    "\n", j, jdeg, jdiff)) ;
-
-			if (j_best == EMPTY)
-			{
-			    /* this is the first candidate seen */
-			    DEBUG1 (("   first\n")) ;
-			    best = TRUE ;
-			}
-			else
-			{
-			    if (jdeg < jdeg_best)
-			    {
-				/* the degree of j is best seen so far. */
-				DEBUG1 (("   least degree\n")) ;
-				best = TRUE ;
-			    }
-			    else if (jdeg == jdeg_best)
-			    {
-				/* degree of j and j_best are the same */
-				/* tie break by nearest node number */
-				if (jdiff < jdiff_best)
-				{
-				    DEBUG1 (("   tie degree, closer\n")) ;
-				    best = TRUE ;
-				}
-				else if (jdiff == jdiff_best)
-				{
-				    /* |j-k| = |j_best-k|.  For any given k
-				     * and j_best there is only one other j
-				     * than can be just as close as j_best.
-				     * Tie break by picking the smaller of
-				     * j and j_best */
-				    DEBUG1 (("   tie degree, as close\n"));
-				    best = j < j_best ;
-				}
-			    }
-			    else
-			    {
-				/* j has higher degree than best so far */
-				best = FALSE ;
-			    }
-			}
-		    }
-
-		    if (best)
-		    {
-			/* j is best match for k */
-			/* found a strong pair, A (j,k) and A (k,j) */
-			DEBUG1 ((" --- Found pair k: "ID" j: " ID
-			    " jdeg: "ID" jdiff: "ID"\n",
-			    k, j, jdeg, jdiff)) ;
-			ASSERT (jdiff != EMPTY) ;
-			ASSERT (jdeg != EMPTY) ;
-			j_best = j ;
-			jdeg_best = jdeg ;
-			jdiff_best = jdiff ;
-		    }
-
-		    /* get the next entries in column k and row k */
-		    cp++ ;
-		    rp++ ;
-		}
-
-		/* save the pair (j,k), if we found one */
-		if (j_best != EMPTY)
-		{
-		    j = j_best ;
-		    DEBUGm4 ((" --- best pair j: "ID" for k: "ID"\n", j, k)) ;
-		    P [k] = j ;
-		    P [j] = k ;
-		}
-		else
-		{
-		    /* no match was found for k */
-		    unmatched++ ;
-		}
-	    }
-	}
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* finalize the row permutation, P */
-    /* ---------------------------------------------------------------------- */
-
-    for (k = 0 ; k < n2 ; k++)
-    {
-	if (P [k] == EMPTY)
-	{
-	    P [k] = k ;
-	}
-    }
-    ASSERT (UMF_is_permutation (P, Rp, n2, n2)) ;
-
-    return (unmatched) ;
-}
-
-
-/* ========================================================================== */
-/* === UMF_2by2 ============================================================= */
-/* ========================================================================== */
-
-GLOBAL void UMF_2by2
-(
-    /* input, not modified: */
-    Int n,		    /* A is n-by-n */
-    const Int Ap [ ],	    /* size n+1 */
-    const Int Ai [ ],	    /* size nz = Ap [n] */
-    const double Ax [ ],    /* size nz if present */
-#ifdef COMPLEX
-    const double Az [ ],    /* size nz if present */
-#endif
-    double tol,		/* tolerance for determining whether or not an
-			 * entry is numerically acceptable.  If tol <= 0
-			 * then all numerical values ignored. */
-    Int scale,		/* scaling to perform (none, sum, or max) */
-    Int Cperm1 [ ],	/* singleton permutations */
-#ifndef NDEBUG
-    Int Rperm1 [ ],	/* not needed, since Rperm1 = Cperm1 for submatrix S */
-#endif
-    Int InvRperm1 [ ],	/* inverse of Rperm1 */
-    Int n1,		/* number of singletons */
-    Int nempty,		/* number of empty rows/cols */
-
-    /* input, contents undefined on output: */
-    Int Degree [ ],	/* Degree [j] is the number of off-diagonal
-			 * entries in row/column j of S+S', where
-			 * where S = A (Cperm1 [n1..], Rperm1 [n1..]).
-			 * Note that S is not used, nor formed. */
-
-    /* output: */
-    Int P [ ],		/* P [k] = i means original row i is kth row in S(P,:)
-			 * where S = A (Cperm1 [n1..], Rperm1 [n1..]) */
-    Int *p_nweak,
-    Int *p_unmatched,
-
-    /* workspace (not defined on input or output): */
-    Int Ri [ ],		/* of size >= max (nz, n) */
-    Int Rp [ ],		/* of size n+1 */
-    double Rs [ ],	/* of size n if present.  Rs = sum (abs (A),2) or
-			 * max (abs (A),2), the sum or max of each row.  Unused
-			 * if scale is equal to UMFPACK_SCALE_NONE. */
-    Int Head [ ],	/* of size n.  Head pointers for bucket sort */
-    Int Next [ ],	/* of size n.  Next pointers for bucket sort */
-    Int Ci [ ],		/* size nz */
-    Int Cp [ ]		/* size n+1 */
-)
-{
-
-    /* ---------------------------------------------------------------------- */
-    /* local variables */
-    /* ---------------------------------------------------------------------- */
-
-    Entry aij ;
-    double cmax, value, rs, ctol, dvalue ;
-    Int k, p, row, col, do_values, do_sum, do_max, do_scale, nweak, weak,
-	p1, p2, dfound, unmatched, n2, oldrow, newrow, oldcol, newcol, pp ;
-#ifdef COMPLEX
-    Int split = SPLIT (Az) ;
-#endif
-#ifndef NRECIPROCAL
-    Int do_recip = FALSE ;
-#endif
-
-#ifndef NDEBUG
-    /* UMF_debug += 99 ; */
-    DEBUGm3 (("\n ==================================UMF_2by2: tol %g\n", tol)) ;
-    ASSERT (AMD_valid (n, n, Ap, Ai) == AMD_OK) ;
-    for (k = n1 ; k < n - nempty ; k++)
-    {
-	ASSERT (Cperm1 [k] == Rperm1 [k]) ;
-    }
-#endif
-
-    /* ---------------------------------------------------------------------- */
-    /* determine scaling options */
-    /* ---------------------------------------------------------------------- */
-
-    /* use the values, but only if they are present */
-    /* ignore the values if tol <= 0 */
-    do_values = (tol > 0) && (Ax != (double *) NULL) ;
-    if (do_values && (Rs != (double *) NULL))
-    {
-	do_sum = (scale == UMFPACK_SCALE_SUM) ;
-	do_max = (scale == UMFPACK_SCALE_MAX) ;
-    }
-    else
-    {
-	/* no scaling */
-	do_sum = FALSE ;
-	do_max = FALSE ;
-    }
-    do_scale = do_max || do_sum ;
-    DEBUGm3 (("do_values "ID" do_sum "ID" do_max "ID" do_scale "ID"\n",
-	do_values, do_sum, do_max, do_scale)) ;
-
-    /* ---------------------------------------------------------------------- */
-    /* compute the row scaling, if requested */
-    /* ---------------------------------------------------------------------- */
-
-    /* see also umf_kernel_init */
-
-    if (do_scale)
-    {
-#ifndef NRECIPROCAL
-	double rsmin ;
-#endif
-	for (row = 0 ; row < n ; row++)
-	{
-	    Rs [row] = 0.0 ;
-	}
-	for (col = 0 ; col < n ; col++)
-	{
-	    p2 = Ap [col+1] ;
-	    for (p = Ap [col] ; p < p2 ; p++)
-	    {
-		row = Ai [p] ;
-		ASSIGN (aij, Ax, Az, p, split) ;
-		APPROX_ABS (value, aij) ;
-		rs = Rs [row] ;
-		if (!SCALAR_IS_NAN (rs))
-		{
-		    if (SCALAR_IS_NAN (value))
-		    {
-			/* if any entry in a row is NaN, then the scale factor
-			 * for the row is NaN.  It will be set to 1 later. */
-			Rs [row] = value ;
-		    }
-		    else if (do_max)
-		    {
-			Rs [row] = MAX (rs, value) ;
-		    }
-		    else
-		    {
-			Rs [row] += value ;
-		    }
-		}
-	    }
-	}
-#ifndef NRECIPROCAL
-	rsmin = Rs [0] ;
-	if (SCALAR_IS_ZERO (rsmin) || SCALAR_IS_NAN (rsmin))
-	{
-	    rsmin = 1.0 ;
-	}
-#endif
-	for (row = 0 ; row < n ; row++)
-	{
-	    /* do not scale an empty row, or a row with a NaN */
-	    rs = Rs [row] ;
-	    if (SCALAR_IS_ZERO (rs) || SCALAR_IS_NAN (rs))
-	    {
-		Rs [row] = 1.0 ;
-	    }
-#ifndef NRECIPROCAL
-	    rsmin = MIN (rsmin, Rs [row]) ;
-#endif
-	}
-
-#ifndef NRECIPROCAL
-	/* multiply by the reciprocal if Rs is not too small */
-	do_recip = (rsmin >= RECIPROCAL_TOLERANCE) ;
-	if (do_recip)
-	{
-	    /* invert the scale factors */
-	    for (row = 0 ; row < n ; row++)
-	    {
-		Rs [row] = 1.0 / Rs [row] ;
-	    }
-	}
-#endif
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* compute the max in each column and find diagonal */
-    /* ---------------------------------------------------------------------- */
-
-    nweak = 0 ;
-
-#ifndef NDEBUG
-    for (k = 0 ; k < n ; k++)
-    {
-	ASSERT (Rperm1 [k] >= 0 && Rperm1 [k] < n) ;
-	ASSERT (InvRperm1 [Rperm1 [k]] == k) ;
-    }
-#endif
-
-    n2 = n - n1 - nempty ;
-
-    /* use Ri to count the number of strong entries in each row */
-    for (row = 0 ; row < n2 ; row++)
-    {
-	Ri [row] = 0 ;
-    }
-
-    pp = 0 ;
-    ctol = 0 ;
-    dvalue = 1 ;
-
-    /* construct C = pruned submatrix, strong values only, column form */
-
-    for (k = n1 ; k < n - nempty ; k++)
-    {
-	oldcol = Cperm1 [k] ;
-	newcol = k - n1 ;
-	Next [newcol] = EMPTY ;
-	DEBUGm1 (("Column "ID" newcol "ID" oldcol "ID"\n", k, newcol, oldcol)) ;
-
-	Cp [newcol] = pp ;
-
-	dfound = FALSE ;
-	p1 = Ap [oldcol] ;
-	p2 = Ap [oldcol+1] ;
-	if (do_values)
-	{
-	    cmax = 0 ;
-	    dvalue = 0 ;
-
-	    if (!do_scale)
-	    {
-		/* no scaling */
-		for (p = p1 ; p < p2 ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    ASSERT (oldrow >= 0 && oldrow < n) ;
-		    newrow = InvRperm1 [oldrow] - n1 ;
-		    ASSERT (newrow >= -n1 && newrow < n2) ;
-		    if (newrow < 0) continue ;
-		    ASSIGN (aij, Ax, Az, p, split) ;
-		    APPROX_ABS (value, aij) ;
-		    /* if either cmax or value is NaN, define cmax as NaN */
-		    if (!SCALAR_IS_NAN (cmax))
-		    {
-			if (SCALAR_IS_NAN (value))
-			{
-			    cmax = value ;
-			}
-			else
-			{
-			    cmax = MAX (cmax, value) ;
-			}
-		    }
-		    if (oldrow == oldcol)
-		    {
-			/* we found the diagonal entry in this column */
-			dvalue = value ;
-			dfound = TRUE ;
-			ASSERT (newrow == newcol) ;
-		    }
-		}
-	    }
-#ifndef NRECIPROCAL
-	    else if (do_recip)
-	    {
-		/* multiply by the reciprocal */
-		for (p = p1 ; p < p2 ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    ASSERT (oldrow >= 0 && oldrow < n) ;
-		    newrow = InvRperm1 [oldrow] - n1 ;
-		    ASSERT (newrow >= -n1 && newrow < n2) ;
-		    if (newrow < 0) continue ;
-		    ASSIGN (aij, Ax, Az, p, split) ;
-		    APPROX_ABS (value, aij) ;
-		    value *= Rs [oldrow] ;
-		    /* if either cmax or value is NaN, define cmax as NaN */
-		    if (!SCALAR_IS_NAN (cmax))
-		    {
-			if (SCALAR_IS_NAN (value))
-			{
-			    cmax = value ;
-			}
-			else
-			{
-			    cmax = MAX (cmax, value) ;
-			}
-		    }
-		    if (oldrow == oldcol)
-		    {
-			/* we found the diagonal entry in this column */
-			dvalue = value ;
-			dfound = TRUE ;
-			ASSERT (newrow == newcol) ;
-		    }
-		}
-	    }
-#endif
-	    else
-	    {
-		/* divide instead */
-		for (p = p1 ; p < p2 ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    ASSERT (oldrow >= 0 && oldrow < n) ;
-		    newrow = InvRperm1 [oldrow] - n1 ;
-		    ASSERT (newrow >= -n1 && newrow < n2) ;
-		    if (newrow < 0) continue ;
-		    ASSIGN (aij, Ax, Az, p, split) ;
-		    APPROX_ABS (value, aij) ;
-		    value /= Rs [oldrow] ;
-		    /* if either cmax or value is NaN, define cmax as NaN */
-		    if (!SCALAR_IS_NAN (cmax))
-		    {
-			if (SCALAR_IS_NAN (value))
-			{
-			    cmax = value ;
-			}
-			else
-			{
-			    cmax = MAX (cmax, value) ;
-			}
-		    }
-		    if (oldrow == oldcol)
-		    {
-			/* we found the diagonal entry in this column */
-			dvalue = value ;
-			dfound = TRUE ;
-			ASSERT (newrow == newcol) ;
-		    }
-		}
-	    }
-
-	    ctol = tol * cmax ;
-	    DEBUGm1 (("    cmax col "ID" %g  ctol %g\n", oldcol, cmax, ctol)) ;
-	}
-	else
-	{
-	    for (p = p1 ; p < p2 ; p++)
-	    {
-		oldrow = Ai [p] ;
-		ASSERT (oldrow >= 0 && oldrow < n) ;
-		newrow = InvRperm1 [oldrow] - n1 ;
-		ASSERT (newrow >= -n1 && newrow < n2) ;
-		if (newrow < 0) continue ;
-		Ci [pp++] = newrow ;
-		if (oldrow == oldcol)
-		{
-		    /* we found the diagonal entry in this column */
-		    ASSERT (newrow == newcol) ;
-		    dfound = TRUE ;
-		}
-		/* count the entries in each column */
-		Ri [newrow]++ ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* flag the weak diagonals */
-	/* ------------------------------------------------------------------ */
-
-	if (!dfound)
-	{
-	    /* no diagonal entry present */
-	    weak = TRUE ;
-	}
-	else
-	{
-	    /* diagonal entry is present, check its value */
-	    weak = (do_values) ?  WEAK (dvalue, ctol) : FALSE ;
-	}
-	if (weak)
-	{
-	    /* flag this column as weak */
-	    DEBUG0 (("Weak!\n")) ;
-	    Next [newcol] = IS_WEAK ;
-	    nweak++ ;
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* count entries in each row that are not numerically weak */
-	/* ------------------------------------------------------------------ */
-
-	if (do_values)
-	{
-	    if (!do_scale)
-	    {
-		/* no scaling */
-		for (p = p1 ; p < p2 ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    newrow = InvRperm1 [oldrow] - n1 ;
-		    if (newrow < 0) continue ;
-		    ASSIGN (aij, Ax, Az, p, split) ;
-		    APPROX_ABS (value, aij) ;
-		    weak = WEAK (value, ctol) ;
-		    if (!weak)
-		    {
-			DEBUG0 (("    strong: row "ID": %g\n", oldrow, value)) ;
-			Ci [pp++] = newrow ;
-			Ri [newrow]++ ;
-		    }
-		}
-	    }
-#ifndef NRECIPROCAL
-	    else if (do_recip)
-	    {
-		/* multiply by the reciprocal */
-		for (p = p1 ; p < p2 ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    newrow = InvRperm1 [oldrow] - n1 ;
-		    if (newrow < 0) continue ;
-		    ASSIGN (aij, Ax, Az, p, split) ;
-		    APPROX_ABS (value, aij) ;
-		    value *= Rs [oldrow] ;
-		    weak = WEAK (value, ctol) ;
-		    if (!weak)
-		    {
-			DEBUG0 (("    strong: row "ID": %g\n", oldrow, value)) ;
-			Ci [pp++] = newrow ;
-			Ri [newrow]++ ;
-		    }
-		}
-	    }
-#endif
-	    else
-	    {
-		/* divide instead */
-		for (p = p1 ; p < p2 ; p++)
-		{
-		    oldrow = Ai [p] ;
-		    newrow = InvRperm1 [oldrow] - n1 ;
-		    if (newrow < 0) continue ;
-		    ASSIGN (aij, Ax, Az, p, split) ;
-		    APPROX_ABS (value, aij) ;
-		    value /= Rs [oldrow] ;
-		    weak = WEAK (value, ctol) ;
-		    if (!weak)
-		    {
-			DEBUG0 (("    strong: row "ID": %g\n", oldrow, value)) ;
-			Ci [pp++] = newrow ;
-			Ri [newrow]++ ;
-		    }
-		}
-	    }
-	}
-    }
-    Cp [n2] = pp ;
-    ASSERT (AMD_valid (n2, n2, Cp, Ci) == AMD_OK) ;
-
-    if (nweak == 0)
-    {
-	/* nothing to do, quick return */
-	DEBUGm2 (("\n =============================UMF_2by2: quick return\n")) ;
-	for (k = 0 ; k < n ; k++)
-	{
-	    P [k] = k ;
-	}
-	*p_nweak = 0 ;
-	*p_unmatched = 0 ;
-	return ;
-    }
-
-#ifndef NDEBUG
-    for (k = 0 ; k < n2 ; k++)
-    {
-	P [k] = EMPTY ;
-    }
-    for (k = 0 ; k < n2 ; k++)
-    {
-	ASSERT (Degree [k] >= 0 && Degree [k] < n2) ;
-    }
-#endif
-
-    /* ---------------------------------------------------------------------- */
-    /* find the 2-by-2 permutation */
-    /* ---------------------------------------------------------------------- */
-
-    /* The matrix S is now mapped to the index range 0 to n2-1.  We have
-     * S = A (Rperm [n1 .. n-nempty-1], Cperm [n1 .. n-nempty-1]), and then
-     * C = pattern of strong entries in S.  A weak diagonal k in S is marked
-     * with Next [k] = IS_WEAK. */
-
-    unmatched = two_by_two (n2, Cp, Ci, Degree, Next, Ri, P, Rp, Head) ;
-
-    /* ---------------------------------------------------------------------- */
-
-    *p_nweak = nweak ;
-    *p_unmatched = unmatched ;
-
-#ifndef NDEBUG
-    DEBUGm4 (("UMF_2by2: weak "ID"  unmatched "ID"\n", nweak, unmatched)) ;
-    for (row = 0 ; row < n ; row++)
-    {
-	DEBUGm2 (("P ["ID"] = "ID"\n", row, P [row])) ;
-    }
-    DEBUGm2 (("\n =============================UMF_2by2: done\n\n")) ;
-#endif
-}
diff --git a/UMFPACK/Source/umf_2by2.h b/UMFPACK/Source/umf_2by2.h
deleted file mode 100644
index 3cb8b45..0000000
--- a/UMFPACK/Source/umf_2by2.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
-/* -------------------------------------------------------------------------- */
-
-GLOBAL void UMF_2by2
-(
-    Int n,
-    const Int Ap [ ],
-    const Int Ai [ ],
-    const double Ax [ ],
-#ifdef COMPLEX
-    const double Az [ ],
-#endif
-    double tol,
-    Int scale,
-    Int Cperm1 [ ],
-#ifndef NDEBUG
-    Int Rperm1 [ ],
-#endif
-    Int InvRperm [ ],
-    Int n1,
-    Int nempty,
-    Int Degree [ ],
-    Int P [ ],
-    Int *p_nweak,
-    Int *p_nmatched,
-    Int Ri [ ],
-    Int Rp [ ],
-    double Rs [ ],
-    Int Head [ ],
-    Int Next [ ],
-    Int Si [ ],
-    Int Sp [ ]
-) ;
diff --git a/UMFPACK/Source/umf_analyze.c b/UMFPACK/Source/umf_analyze.c
index 62e65d6..7af0b4a 100644
--- a/UMFPACK/Source/umf_analyze.c
+++ b/UMFPACK/Source/umf_analyze.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -19,7 +18,7 @@
 
     Uses workspace of size O(nonzeros in A).  On input, the matrix A is
     stored in row-form at the tail end of Ai.  It is destroyed on output.
-    The rows of A must be sorted by increasing first column index.
+    The rows of A must be sorted by increasing first nonzero column.
     The matrix is assumed to be valid.
 
     Empty rows and columns have already been removed.
@@ -48,7 +47,7 @@ GLOBAL Int UMF_analyze
 			/* Ap [0..n_row]: row pointers */
 			/* Row i is in Ai [Ap [i] ... Ap [i+1]-1] */
 
-			/* rows must have smallest col index first, or be */
+			/* rows must have smallest col first, or be */
 			/* in sorted form.  Used as workspace of size n_col */
 			/* and destroyed. */
 
@@ -303,10 +302,10 @@ GLOBAL Int UMF_analyze
 	    }
 	}
 
-	/* rows krow ... knext-1 all have first column index of j */
+	/* rows krow ... knext-1 all have first column of j */
 	/* (or are empty) */
 
-	/* row knext has first column index of jnext */
+	/* row knext has first column of jnext */
 	/* if knext = n_row, then jnext is n_col */
 	if (knext == n_row)
 	{
diff --git a/UMFPACK/Source/umf_analyze.h b/UMFPACK/Source/umf_analyze.h
index 733ba03..ed05574 100644
--- a/UMFPACK/Source/umf_analyze.h
+++ b/UMFPACK/Source/umf_analyze.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_analyze
diff --git a/UMFPACK/Source/umf_apply_order.c b/UMFPACK/Source/umf_apply_order.c
index 6192af4..a438655 100644
--- a/UMFPACK/Source/umf_apply_order.c
+++ b/UMFPACK/Source/umf_apply_order.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_apply_order.h b/UMFPACK/Source/umf_apply_order.h
index dd7e682..59e050a 100644
--- a/UMFPACK/Source/umf_apply_order.h
+++ b/UMFPACK/Source/umf_apply_order.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_apply_order
diff --git a/UMFPACK/Source/umf_assemble.c b/UMFPACK/Source/umf_assemble.c
index 04a3de3..5ec6eb6 100644
--- a/UMFPACK/Source/umf_assemble.c
+++ b/UMFPACK/Source/umf_assemble.c
@@ -3,14 +3,13 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*  Degree update and numerical assembly.  This is compiled twice (with and
- *  without FIXQ) for each real/complex int/UF_long version, for a total of 8
- *  versions.*/
+ *  without FIXQ) for each real/complex int/SuiteSparse_long version, for a
+ *  total of 8 versions.*/
 
 #include "umf_internal.h"
 #include "umf_assemble.h"
diff --git a/UMFPACK/Source/umf_assemble.h b/UMFPACK/Source/umf_assemble.h
index e976b48..d5faa4b 100644
--- a/UMFPACK/Source/umf_assemble.h
+++ b/UMFPACK/Source/umf_assemble.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_assemble
diff --git a/UMFPACK/Source/umf_blas3_update.c b/UMFPACK/Source/umf_blas3_update.c
index c4e9ee7..fa206dc 100644
--- a/UMFPACK/Source/umf_blas3_update.c
+++ b/UMFPACK/Source/umf_blas3_update.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 #include "umf_internal.h"
diff --git a/UMFPACK/Source/umf_blas3_update.h b/UMFPACK/Source/umf_blas3_update.h
index c77b9ac..f7c29f5 100644
--- a/UMFPACK/Source/umf_blas3_update.h
+++ b/UMFPACK/Source/umf_blas3_update.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_blas3_update
diff --git a/UMFPACK/Source/umf_build_tuples.c b/UMFPACK/Source/umf_build_tuples.c
index c2ab324..7b243dd 100644
--- a/UMFPACK/Source/umf_build_tuples.c
+++ b/UMFPACK/Source/umf_build_tuples.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_build_tuples.h b/UMFPACK/Source/umf_build_tuples.h
index 0b0410c..c0251cf 100644
--- a/UMFPACK/Source/umf_build_tuples.h
+++ b/UMFPACK/Source/umf_build_tuples.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_build_tuples
diff --git a/UMFPACK/Source/umf_cholmod.c b/UMFPACK/Source/umf_cholmod.c
new file mode 100644
index 0000000..96481b8
--- /dev/null
+++ b/UMFPACK/Source/umf_cholmod.c
@@ -0,0 +1,233 @@
+/* ========================================================================== */
+/* === umf_cholmod ========================================================== */
+/* ========================================================================== */
+
+/* umfpack_cholmod: user-defined ordering function to interface UMFPACK
+ * to CHOLMOD.
+ *
+ * This routine is an example of a user-provided ordering function for UMFPACK.
+ *
+ * This function can be passed to umfpack_*_fsymbolic as the
+ * user_ordering function pointer.
+ */
+
+#include "umf_internal.h"
+#include "umf_cholmod.h"
+
+#ifndef NCHOLMOD
+#include "cholmod.h"
+#endif
+
+#if defined (DINT) || defined (ZINT)
+#define CHOLMOD_start       cholmod_start
+#define CHOLMOD_transpose   cholmod_transpose
+#define CHOLMOD_analyze     cholmod_analyze
+#define CHOLMOD_free_sparse cholmod_free_sparse
+#define CHOLMOD_free_factor cholmod_free_factor
+#define CHOLMOD_finish      cholmod_finish
+#define CHOLMOD_print_common      cholmod_print_common
+#else
+#define CHOLMOD_start       cholmod_l_start
+#define CHOLMOD_transpose   cholmod_l_transpose
+#define CHOLMOD_analyze     cholmod_l_analyze
+#define CHOLMOD_free_sparse cholmod_l_free_sparse
+#define CHOLMOD_free_factor cholmod_l_free_factor
+#define CHOLMOD_finish      cholmod_l_finish
+#define CHOLMOD_print_common      cholmod_l_print_common
+#endif
+
+int UMF_cholmod
+(
+    /* inputs */
+    Int nrow,               /* A is nrow-by-ncol */
+    Int ncol,               /* A is nrow-by-ncol */
+    Int symmetric,          /* if true and nrow=ncol do A+A', else do A'A */
+    Int Ap [ ],             /* column pointers, size ncol+1 */
+    Int Ai [ ],             /* row indices, size nz = Ap [ncol] */
+    /* output */
+    Int Perm [ ],           /* fill-reducing permutation, size ncol */
+    /* user-defined */
+    void *user_params,      /* Int array of size 3 */
+    double user_info [3]    /* [0]: max col count for L=chol(P(A+A')P')
+                               [1]: nnz (L)
+                               [2]: flop count for chol, if A real */
+)
+{
+#ifndef NCHOLMOD
+    double dmax, flops, c, lnz ;
+    cholmod_sparse Amatrix, *A, *AT, *S ;
+    cholmod_factor *L ;
+    cholmod_common cm ;
+    Int *P, *ColCount ;
+    Int k, ordering_option, print_level, *params ;
+
+    params = (Int *) user_params ;
+    ordering_option = params [0] ;
+    print_level = params [1] - 1 ;
+    params [2] = -1 ;
+
+    if (Ap == NULL || Ai == NULL || Perm == NULL || nrow < 0 || ncol < 0)
+    {
+        /* invalid inputs */
+        return (FALSE) ;
+    }
+    if (nrow != ncol)
+    {
+        /* force symmetric to be false */
+        symmetric = FALSE ;
+    }
+
+    /* start CHOLMOD */
+    CHOLMOD_start (&cm) ;
+    cm.supernodal = CHOLMOD_SIMPLICIAL ;
+    cm.print = print_level ;
+
+    /* adjust cm based on ordering_option */
+    switch (ordering_option)
+    {
+
+        default:
+        case UMFPACK_ORDERING_AMD:
+            /* AMD on A+A' if symmetric, COLAMD on A otherwise */
+            cm.nmethods = 1 ;
+            cm.method [0].ordering = symmetric ? CHOLMOD_AMD : CHOLMOD_COLAMD ;
+            cm.postorder = TRUE ;
+            break ;
+
+        case UMFPACK_ORDERING_METIS:
+            /* metis on A+A' if symmetric, A'A otherwise */
+            cm.nmethods = 1 ;
+            cm.method [0].ordering = CHOLMOD_METIS ;
+            cm.postorder = TRUE ;
+            break ;
+
+        case UMFPACK_ORDERING_NONE:
+        case UMFPACK_ORDERING_GIVEN:
+        case UMFPACK_ORDERING_USER:
+            /* no ordering.  No input permutation here, and no user
+               function, so all these are the same as "none". */
+            cm.nmethods = 1 ;
+            cm.method [0].ordering = CHOLMOD_NATURAL ;
+            cm.postorder = FALSE ;
+            break ;
+
+        case UMFPACK_ORDERING_BEST:
+            /* try AMD, METIS and NESDIS on A+A', or COLAMD(A), METIS(A'A),
+               and NESDIS (A'A) */
+            cm.nmethods = 3 ;
+            cm.method [0].ordering = symmetric ? CHOLMOD_AMD : CHOLMOD_COLAMD ;
+            cm.method [1].ordering = CHOLMOD_METIS ;
+            cm.method [2].ordering = CHOLMOD_NESDIS ;
+            cm.postorder = TRUE ;
+            break ;
+
+        case UMFPACK_ORDERING_CHOLMOD:
+            /* no change to CHOLMOD defaults:
+            Do not use given permutation, since it's not provided.
+            Try AMD.  If fill-in and flop count are low, use AMD.
+            Otherwise, try METIS and take the best of AMD and METIS.
+            cm.method [0].ordering = CHOLMOD_GIVEN
+            cm.method [1].ordering = CHOLMOD_AMD
+            cm.method [2].ordering = CHOLMOD_METIS
+            cm.nmethods = 2 if METIS installed, 3 otherwise ('given' is skipped)
+            */
+            break ;
+    }
+
+    /* construct a CHOLMOD version of the input matrix A */
+    A = &Amatrix ;
+    A->nrow = nrow ;                /* A is nrow-by-ncol */
+    A->ncol = ncol ;
+    A->nzmax = Ap [ncol] ;          /* with nzmax entries */
+    A->packed = TRUE ;              /* there is no A->nz array */
+    if (symmetric)
+    {
+        A->stype = 1 ;                  /* A is symmetric */
+    }
+    else
+    {
+        A->stype = 0 ;                  /* A is unsymmetric */
+    }
+    A->itype = CHOLMOD_INT ;
+    A->xtype = CHOLMOD_PATTERN ;
+    A->dtype = CHOLMOD_DOUBLE ;
+    A->nz = NULL ;
+    A->p = Ap ;                     /* column pointers */
+    A->i = Ai ;                     /* row indices */
+    A->x = NULL ;                   /* no numerical values */
+    A->z = NULL ;
+    A->sorted = FALSE ;             /* columns of A might not be sorted */
+
+    if (symmetric)
+    {
+        /* CHOLMOD with order the symmetric matrix A */
+        AT = NULL ;
+        S = A ;
+    }
+    else
+    {
+        /* S = A'.  CHOLMOD will order S*S', which is A'*A */
+        AT = CHOLMOD_transpose (A, 0, &cm) ;
+        S = AT ;
+    }
+
+    /* order and analyze S or S*S' */
+    L = CHOLMOD_analyze (S, &cm) ;
+    CHOLMOD_free_sparse (&AT, &cm) ;
+    if (L == NULL)
+    {
+        return (FALSE) ;
+    }
+
+    /* determine the ordering used */
+    switch (L->ordering)
+    {
+
+        case CHOLMOD_AMD:
+        case CHOLMOD_COLAMD:
+            params [2] = UMFPACK_ORDERING_AMD ;
+            break ;
+
+        case CHOLMOD_METIS:
+        case CHOLMOD_NESDIS:
+            params [2] = UMFPACK_ORDERING_METIS ;
+            break ;
+
+        case CHOLMOD_GIVEN:
+        case CHOLMOD_NATURAL:
+        default:
+            params [2] = UMFPACK_ORDERING_NONE ;
+            break ;
+    }
+
+    /* copy the permutation from L to the output and compute statistics */
+    P = L->Perm ;
+    ColCount = L->ColCount ;
+    dmax = 1 ;
+    lnz = 0 ;
+    flops = 0 ;
+    for (k = 0 ; k < ncol ; k++)
+    {
+        Perm [k] = P [k] ;
+        c = ColCount [k] ;
+        if (c > dmax) dmax = c ;
+        lnz += c ;
+        flops += c*c ;
+    }
+    user_info [0] = dmax ;
+    user_info [1] = lnz ;
+    user_info [2] = flops ;
+
+    CHOLMOD_free_factor (&L, &cm) ;
+    if (print_level > 0) 
+    {
+        CHOLMOD_print_common ("for UMFPACK", &cm) ;
+    }
+    CHOLMOD_finish (&cm) ;
+    return (TRUE) ;
+#else
+    /* CHOLMOD and its supporting packages (CAMD, CCOLAMD, COLAMD, metis-4.0)
+      not installed */
+    return (FALSE) ;
+#endif
+}
diff --git a/UMFPACK/Source/umf_cholmod.h b/UMFPACK/Source/umf_cholmod.h
new file mode 100644
index 0000000..8879deb
--- /dev/null
+++ b/UMFPACK/Source/umf_cholmod.h
@@ -0,0 +1,37 @@
+#include "umfpack.h"
+
+int umf_i_cholmod
+(
+    /* inputs */
+    int nrow,               /* A is nrow-by-ncol */
+    int ncol,               /* A is nrow-by-ncol */
+    int symmetric,          /* if true and nrow=ncol do A+A', else do A'A */
+    int Ap [ ],             /* column pointers, size ncol+1 */
+    int Ai [ ],             /* row indices, size nz = Ap [ncol] */
+    /* output */
+    int Perm [ ],           /* fill-reducing permutation, size ncol */
+    /* user-defined */
+    void *ignore,           /* not needed */
+    double user_info [3]    /* [0]: max col count for L=chol(P(A+A')P')
+                               [1]: nnz (L)
+                               [2]: flop count for chol, if A real */
+) ;
+
+
+int umf_l_cholmod
+(
+    /* inputs */
+    SuiteSparse_long nrow,      /* A is nrow-by-ncol */
+    SuiteSparse_long ncol,      /* A is nrow-by-ncol */
+    SuiteSparse_long symmetric, /* if true and nrow=ncol do A+A', else do A'A */
+    SuiteSparse_long Ap [ ],    /* column pointers, size ncol+1 */
+    SuiteSparse_long Ai [ ],    /* row indices, size nz = Ap [ncol] */
+    /* output */
+    SuiteSparse_long Perm [ ],  /* fill-reducing permutation, size ncol */
+    /* user-defined */
+    void *ignore,           /* not needed */
+    double user_info [3]    /* [0]: max col count for L=chol(P(A+A')P')
+                               [1]: nnz (L)
+                               [2]: flop count for chol, if A real */
+) ;
+
diff --git a/UMFPACK/Source/umf_colamd.c b/UMFPACK/Source/umf_colamd.c
index 5a9b168..3efd0b1 100644
--- a/UMFPACK/Source/umf_colamd.c
+++ b/UMFPACK/Source/umf_colamd.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -38,7 +37,7 @@ Purpose:
 Authors:
 
     The authors of the COLAMD code itself are Stefan I. Larimore and Timothy A.
-    Davis, University of Florida.  The algorithm was developed in collaboration
+    Davis.  The algorithm was developed in collaboration
     with John Gilbert, Xerox PARC, and Esmond Ng, Oak Ridge National Laboratory.
     The AMD metric on which this is based is by Patrick Amestoy, T. Davis,
     and Iain Duff.
@@ -60,7 +59,7 @@ See the UMFPACK README file for the License for your use of this code.
 Availability:
 
     Both UMFPACK and the original unmodified colamd/symamd library are
-    available at http://www.cise.ufl.edu/research/sparse.
+    available at http://www.suitesparse.com.
 
 Changes for inclusion in UMFPACK:
 
@@ -83,8 +82,7 @@ For more information, see:
 
 	Davis, T. A. and Gilbert, J. R. and Larimore, S. I. and Ng, E. G.,
 	A column approximate minimum degree ordering algorithm,
-	Univ. of Florida, CISE Dept., TR-00-005, Gainesville, FL
-	Oct. 2000.  Submitted to ACM Trans. Math. Softw.
+	ACM Trans. Math. Softw., vol 3, no 3, 2004
 
 */
 
@@ -313,8 +311,7 @@ For more information, see:
 
 	Example:
 
-	    See http://www.cise.ufl.edu/~davis/colamd/example.c
-	    for a complete example.
+	    See colamd_example.c for a complete example.
 
 	    To order the columns of a 5-by-4 matrix with 11 nonzero entries in
 	    the following nonzero pattern
diff --git a/UMFPACK/Source/umf_colamd.h b/UMFPACK/Source/umf_colamd.h
index 51675a5..4eff029 100644
--- a/UMFPACK/Source/umf_colamd.h
+++ b/UMFPACK/Source/umf_colamd.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -13,7 +12,7 @@
 Authors:
 
     The authors of the COLAMD code itself are Stefan I. Larimore and Timothy A.
-    Davis, University of Florida.  The algorithm was developed in collaboration
+    Davis.  The algorithm was developed in collaboration
     with John Gilbert, Xerox PARC, and Esmond Ng, Oak Ridge National Laboratory.
 
 Date:
@@ -33,7 +32,7 @@ See the UMFPACK README file for the License for your use of this code.
 Availability:
 
     Both UMFPACK and the original unmodified colamd/symamd library are
-    available at http://www.cise.ufl.edu/research/sparse.
+    available at http://www.suitesparse.com.
 
 */
 
diff --git a/UMFPACK/Source/umf_config.h b/UMFPACK/Source/umf_config.h
index 79e9f5d..0f6c2a3 100644
--- a/UMFPACK/Source/umf_config.h
+++ b/UMFPACK/Source/umf_config.h
@@ -3,17 +3,17 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
     This file controls the compile-time configuration of UMFPACK.  Modify the
-    UFconfig/UFconfig.mk file and this file if necessary, to control these
-    options.  The following flags may be given as options to your C compiler
-    (as in "cc -DNSUNPERF", for example).  These flags are normally placed in
-    your UMFPACK_CONFIG string, defined in the UFconfig/UFconfig.mk file.
+    SuiteSparse_config/SuiteSparse_config.mk file and this file if necessary,
+    to control these options.  The following flags may be given as options to
+    your C compiler (as in "cc -DNSUNPERF", for example).  These flags are
+    normally placed in your UMFPACK_CONFIG string, defined in the
+    SuiteSparse_config/SuiteSparse_config.mk file.
 
     All of these options, except for the timer, are for accessing the BLAS.
 
@@ -27,29 +27,6 @@
 
 	-DLONGBLAS
 
-	-DNPOSIX
-
-	    If -DNPOSIX is set, then your Unix operating system is not POSIX-
-	    compliant, and the POSIX routines sysconf ( ) and times ( )
-	    routines are not used.  These routines provide CPU time and
-	    wallclock time information.  If -DNPOSIX is set, then the ANSI
-	    C clock ( ) routine is used.  If -DNPOSIX is not set, then
-	    sysconf ( ) and times ( ) are used in umfpack_tic and umfpack_toc.
-	    See umfpack_tictoc.c for more information.
-	    The default is to use the POSIX routines, except for Windows,
-	    which is not POSIX-compliant.
-
-	-DGETRUSAGE
-
-	    If -DGETRUSAGE is set, then your system's getrusage ( ) routine
-	    will be used for getting the process CPU time.  Otherwise the ANSI
-	    C clock ( ) routine will be used.  The default is to use getrusage
-	    ( ) on Unix systems, and to use clock on all other architectures.
-
-	-DNO_TIMER
-
-	    If -DNO_TIMER is set, then no timing routines are used at all.
-
 	-DNRECIPROCAL
 
 	    This option controls a tradeoff between speed and accuracy.  Using
@@ -117,7 +94,7 @@
 /* === AMD configuration ==================================================== */
 /* ========================================================================== */
 
-/* NDEBUG, PRINTF defined in amd_internal.h */
+#define PRINTF(params) SUITESPARSE_PRINTF(params)
 
 /* ========================================================================== */
 /* === reciprocal option ==================================================== */
@@ -157,34 +134,12 @@
 #define INDEX(i) (i)
 #endif
 
-/* ========================================================================== */
-/* === Timer ================================================================ */
-/* ========================================================================== */
-
-/*
-    If you have the getrusage routine (all Unix systems I've test do), then use
-    that.  Otherwise, use the ANSI C clock function.   Note that on many
-    systems, the ANSI clock function wraps around after only 2147 seconds, or
-    about 36 minutes.  BE CAREFUL:  if you compare the run time of UMFPACK with
-    other sparse matrix packages, be sure to use the same timer.  See
-    umfpack_tictoc.c for the timer used internally by UMFPACK.  See also
-    umfpack_timer.c for the timer used in an earlier version of UMFPACK.
-    That timer is still available as a user-callable routine, but it is no
-    longer used internally by UMFPACK.
-*/
-
-/* Sun Solaris, SGI Irix, Linux, Compaq Alpha, and IBM RS 6000 all have */
-/* getrusage.  It's in BSD unix, so perhaps all unix systems have it. */
-#if defined (UMF_SOL2) || defined (UMF_SGI) || defined (UMF_LINUX) \
-|| defined (UMF_ALPHA) || defined (UMF_AIX) || defined (UMF_CYGWIN)
-#define GETRUSAGE
-#endif
-
 
 /* ========================================================================== */
 /* === BLAS ================================================================= */
 /* ========================================================================== */
 
+#define BLAS_OK blas_ok
 #include "cholmod_blas.h"
 
 
diff --git a/UMFPACK/Source/umf_create_element.c b/UMFPACK/Source/umf_create_element.c
index bb487ec..f7a97e0 100644
--- a/UMFPACK/Source/umf_create_element.c
+++ b/UMFPACK/Source/umf_create_element.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_create_element.h b/UMFPACK/Source/umf_create_element.h
index b6025bb..43e84b3 100644
--- a/UMFPACK/Source/umf_create_element.h
+++ b/UMFPACK/Source/umf_create_element.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_create_element
diff --git a/UMFPACK/Source/umf_dump.c b/UMFPACK/Source/umf_dump.c
index 888a316..b79aad0 100644
--- a/UMFPACK/Source/umf_dump.c
+++ b/UMFPACK/Source/umf_dump.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* These routines, and external variables, are used only when debugging. */
@@ -245,7 +244,7 @@ GLOBAL void UMF_dump_rowcol
 {
     Entry value ;
     Entry *C ;
-    Int f, nrows, j, jj, len, e, deg, index, n_row, n_col, *Cols, *Rows, nn,
+    Int f, nrows, j, jj, len, e, deg, rowcol, n_row, n_col, *Cols, *Rows, nn,
 	dumpdeg, ncols, preve, *E, tpi, *Pattern, approx_deg, not_in_use ;
     Tuple *tp, *tend ;
     Element *ep ;
@@ -382,31 +381,31 @@ GLOBAL void UMF_dump_rowcol
 		{
 		    for (j = 0 ; j < jj ; j++)
 		    {
-			index = Pattern [j] ;
+			rowcol = Pattern [j] ;
 			value =
 			    C [ (dumpwhich == 0) ? (f+nrows*j) : (j+nrows*f) ] ;
-			if (index >= 0)
+			if (rowcol >= 0)
 			{
-			    DEBUG8 (("\t\t"ID":", index)) ;
+			    DEBUG8 (("\t\t"ID":", rowcol)) ;
 			    EDEBUG8 (value) ;
 			    DEBUG8 (("\n")) ;
 			    if (dumpwhich == 0)
 			    {
 				/* col must be in the range 0..n_col-1 */
-				ASSERT (index < n_col) ;
+				ASSERT (rowcol < n_col) ;
 			    }
 			    else
 			    {
 				/* row must be in the range 0..n_row-1 */
-				ASSERT (index < n_row) ;
+				ASSERT (rowcol < n_row) ;
 			    }
 
 			    if (nn <= UMF_DBMAX)
 			    {
-				if (UMF_DBscatter [index] != UMF_DBflag)
+				if (UMF_DBscatter [rowcol] != UMF_DBflag)
 				{
-				    UMF_DBpacked [deg++] = index ;
-				    UMF_DBscatter [index] = UMF_DBflag ;
+				    UMF_DBpacked [deg++] = rowcol ;
+				    UMF_DBscatter [rowcol] = UMF_DBflag ;
 				}
 			    }
 			}
@@ -430,10 +429,10 @@ GLOBAL void UMF_dump_rowcol
 	    DEBUG7 ((" Assembled, actual deg: "ID" : ", deg)) ;
 	    for (j = 0 ; j < deg ; j++)
 	    {
-		index = UMF_DBpacked [j] ;
-		DEBUG8 ((ID" ", index)) ;
+		rowcol = UMF_DBpacked [j] ;
+		DEBUG8 ((ID" ", rowcol)) ;
 		if (j % 20 == 19) DEBUG8 (("\n ")) ;
-		ASSERT (UMF_DBscatter [index] == UMF_DBflag) ;
+		ASSERT (UMF_DBscatter [rowcol] == UMF_DBflag) ;
 	    }
 	    DEBUG7 (("\n")) ;
 	}
@@ -1091,8 +1090,10 @@ GLOBAL void UMF_dump_start
     sizeof (int), sizeof (int) / sizeof (int), UNITS (int, 1) )) ;
     DEBUG2 (("sizeof (size_t)        %u %u %u\n",
     sizeof (size_t), sizeof (size_t) / sizeof (size_t), UNITS (size_t, 1) )) ;
-    DEBUG2 (("sizeof (UF_long)       %u %u %u\n",
-    sizeof (UF_long), sizeof (UF_long) / sizeof (UF_long), UNITS (UF_long, 1)));
+    DEBUG2 (("sizeof (SuiteSparse_long)       %u %u %u\n",
+    sizeof (SuiteSparse_long),
+    sizeof (SuiteSparse_long) / sizeof (SuiteSparse_long),
+    UNITS (SuiteSparse_long, 1)));
     DEBUG2 (("sizeof (double)        %u %u %u\n",
     sizeof (double), sizeof (double) / sizeof (int), UNITS (double, 1) )) ;
     DEBUG2 (("sizeof (Unit)          %u %u %u\n",
@@ -1184,21 +1185,17 @@ GLOBAL void UMF_dump_diagonal_map
 (
     Int Diagonal_map [ ],
     Int Diagonal_imap [ ],
-    Int n1,
-    Int nn,
-    Int nempty
+    Int nn
 )
 {
     Int row, col ;
     if (Diagonal_map != (Int *) NULL)
     {
-	DEBUG2 (("\nDump the Diagonal_map: n1 "ID" nn "ID" nempty "ID"\n",
-	    n1, nn, nempty)) ;
-	for (col = n1 ; col < nn - nempty ; col++)
+	DEBUG2 (("\nDump the Diagonal_map: nn "ID"\n", nn)) ;
+	for (col = 0 ; col < nn ; col++)
 	{
 	    row = Diagonal_map [col] ;
-	    DEBUG2 (("     Diagonal_map [col = "ID"] gives "ID": ",
-		col, row)) ;
+	    DEBUG2 (("     Diagonal_map [col = "ID"] gives "ID": ", col, row)) ;
 	    row = UNFLIP (row) ;
 	    DEBUG2 ((" row "ID"\n", row)) ;
 	    ASSERT (Diagonal_imap [row] == col) ;
diff --git a/UMFPACK/Source/umf_dump.h b/UMFPACK/Source/umf_dump.h
index 71ec745..710baaa 100644
--- a/UMFPACK/Source/umf_dump.h
+++ b/UMFPACK/Source/umf_dump.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* umf_dump.h: debugging definitions. */
@@ -103,9 +102,7 @@ GLOBAL void UMF_dump_diagonal_map
 (
     Int Diagonal_map [ ],
     Int Diagonal_imap [ ],
-    Int n1,
-    Int nn,
-    Int nempty
+    Int nn
 ) ;
 
 #define UMF_DBMAX 50000
diff --git a/UMFPACK/Source/umf_extend_front.c b/UMFPACK/Source/umf_extend_front.c
index 317c0c6..98253e2 100644
--- a/UMFPACK/Source/umf_extend_front.c
+++ b/UMFPACK/Source/umf_extend_front.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Called by kernel. */
diff --git a/UMFPACK/Source/umf_extend_front.h b/UMFPACK/Source/umf_extend_front.h
index 6c51986..1ee86ca 100644
--- a/UMFPACK/Source/umf_extend_front.h
+++ b/UMFPACK/Source/umf_extend_front.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_extend_front
diff --git a/UMFPACK/Source/umf_free.c b/UMFPACK/Source/umf_free.c
index 867ab22..ff72280 100644
--- a/UMFPACK/Source/umf_free.c
+++ b/UMFPACK/Source/umf_free.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -30,8 +29,7 @@ GLOBAL void *UMF_free
     if (p)
     {
 
-	/* see AMD/Source/amd_global.c for the memory allocator selection */
-	amd_free (p) ;
+	SuiteSparse_free (p) ;
 
 #if defined (UMF_MALLOC_COUNT) || !defined (NDEBUG)
 	/* One more object has been free'd.  Keep track of the count. */
diff --git a/UMFPACK/Source/umf_free.h b/UMFPACK/Source/umf_free.h
index cacf331..9c156df 100644
--- a/UMFPACK/Source/umf_free.h
+++ b/UMFPACK/Source/umf_free.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void *UMF_free
diff --git a/UMFPACK/Source/umf_fsize.c b/UMFPACK/Source/umf_fsize.c
index 634b525..48c88e8 100644
--- a/UMFPACK/Source/umf_fsize.c
+++ b/UMFPACK/Source/umf_fsize.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Determine the largest frontal matrix size for each subtree.   Called by
diff --git a/UMFPACK/Source/umf_fsize.h b/UMFPACK/Source/umf_fsize.h
index 1bd83d4..66529d4 100644
--- a/UMFPACK/Source/umf_fsize.h
+++ b/UMFPACK/Source/umf_fsize.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_fsize
diff --git a/UMFPACK/Source/umf_garbage_collection.c b/UMFPACK/Source/umf_garbage_collection.c
index 716270b..c32b766 100644
--- a/UMFPACK/Source/umf_garbage_collection.c
+++ b/UMFPACK/Source/umf_garbage_collection.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_garbage_collection.h b/UMFPACK/Source/umf_garbage_collection.h
index 9d2d8b7..3cacae9 100644
--- a/UMFPACK/Source/umf_garbage_collection.h
+++ b/UMFPACK/Source/umf_garbage_collection.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_garbage_collection
diff --git a/UMFPACK/Source/umf_get_memory.c b/UMFPACK/Source/umf_get_memory.c
index 696955b..217d327 100644
--- a/UMFPACK/Source/umf_get_memory.c
+++ b/UMFPACK/Source/umf_get_memory.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_get_memory.h b/UMFPACK/Source/umf_get_memory.h
index 317d97a..98be54e 100644
--- a/UMFPACK/Source/umf_get_memory.h
+++ b/UMFPACK/Source/umf_get_memory.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_get_memory
diff --git a/UMFPACK/Source/umf_grow_front.c b/UMFPACK/Source/umf_grow_front.c
index 611c3a1..c3e8154 100644
--- a/UMFPACK/Source/umf_grow_front.c
+++ b/UMFPACK/Source/umf_grow_front.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Current frontal matrix is too small.  Make it bigger. */
diff --git a/UMFPACK/Source/umf_grow_front.h b/UMFPACK/Source/umf_grow_front.h
index 8078897..02be4fb 100644
--- a/UMFPACK/Source/umf_grow_front.h
+++ b/UMFPACK/Source/umf_grow_front.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_grow_front
diff --git a/UMFPACK/Source/umf_init_front.c b/UMFPACK/Source/umf_init_front.c
index 201f1f8..1413b50 100644
--- a/UMFPACK/Source/umf_init_front.c
+++ b/UMFPACK/Source/umf_init_front.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 #include "umf_internal.h"
@@ -137,7 +136,7 @@ GLOBAL Int UMF_init_front
 	for (i = fnrows ; i < fnrows_extended ; i++)
 	{
 	    Fl [i] = Wy [i] ;
-	    /* flip the row index, since Wrp must be < 0 */
+	    /* flip the row, since Wrp must be < 0 */
 	    row = Frows [i] ;
 	    Work->NewRows [i] = FLIP (row) ;
 	}
diff --git a/UMFPACK/Source/umf_init_front.h b/UMFPACK/Source/umf_init_front.h
index 9801b72..8a613bd 100644
--- a/UMFPACK/Source/umf_init_front.h
+++ b/UMFPACK/Source/umf_init_front.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_init_front
diff --git a/UMFPACK/Source/umf_internal.h b/UMFPACK/Source/umf_internal.h
index cd46b03..1facfb6 100644
--- a/UMFPACK/Source/umf_internal.h
+++ b/UMFPACK/Source/umf_internal.h
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -46,6 +45,10 @@
 #define UMF_LINUX
 #define UMFPACK_ARCHITECTURE "Linux"
 
+#elif defined (__APPLE__)
+#define UMF_MAC
+#define UMFPACK_ARCHITECTURE "Mac"
+
 #elif defined (_AIX) || defined (MIBM_RS) || defined (ARCH_IBM_RS)
 #define UMF_AIX
 #define UMFPACK_ARCHITECTURE "IBM AIX"
@@ -103,7 +106,7 @@
 #endif
 
 /* -------------------------------------------------------------------------- */
-/* Real/complex and int/UF_long definitions, double relops */
+/* Real/complex and int/SuiteSparse_long definitions, double relops */
 /* -------------------------------------------------------------------------- */
 
 #include "umf_version.h"
@@ -200,15 +203,7 @@
 /* Memory allocator */
 /* -------------------------------------------------------------------------- */
 
-/* See AMD/Source/amd_global.c and AMD/Source/amd.h for the
- * definition of the memory allocator used by UMFPACK.  Versions 4.4 and
- * earlier had their memory allocator definitions here.   Other global
- * function pointers for UMFPACK are located in umf_global.c.
- *
- * The MATLAB mexFunction uses MATLAB's memory manager and mexPrintf, while the
- * C-callable AMD library uses the ANSI C malloc, free, realloc, and printf
- * routines.
- */
+    /* see SuiteSparse_config */
 
 /* -------------------------------------------------------------------------- */
 /* Memory space definitions */
@@ -668,7 +663,7 @@ typedef struct	/* SymbolicType */
 	maxnrows,		/* largest number of rows in any front */
 	maxncols,		/* largest number of columns in any front */
 	*Front_npivcol,		/* Front_npivcol [j] = size of jth supercolumn*/
-	*Front_1strow,		/* first row index in front j */
+	*Front_1strow,		/* first row in front j */
 	*Front_leftmostdesc,	/* leftmost desc of front j */
 	*Front_parent,		/* super-column elimination tree */
 	*Cperm_init,		/* initial column ordering */
@@ -678,7 +673,7 @@ typedef struct	/* SymbolicType */
 	dense_row_threshold,
 	n1,			/* number of singletons */
 	nempty,			/* MIN (nempty_row, nempty_col) */
-	*Diagonal_map,		/* initial "diagonal" (after 2by2) */
+	*Diagonal_map,		/* initial "diagonal" */
 	esize,			/* size of Esize array */
 	nfr,
 	n_row, n_col,		/* matrix A is n_row-by-n_col */
diff --git a/UMFPACK/Source/umf_is_permutation.c b/UMFPACK/Source/umf_is_permutation.c
index 689c65e..5971c83 100644
--- a/UMFPACK/Source/umf_is_permutation.c
+++ b/UMFPACK/Source/umf_is_permutation.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Return TRUE if P is a r-permutation vector, FALSE otherwise */
diff --git a/UMFPACK/Source/umf_is_permutation.h b/UMFPACK/Source/umf_is_permutation.h
index 2468545..7bda1d1 100644
--- a/UMFPACK/Source/umf_is_permutation.h
+++ b/UMFPACK/Source/umf_is_permutation.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_is_permutation
diff --git a/UMFPACK/Source/umf_kernel.c b/UMFPACK/Source/umf_kernel.c
index 6168829..2ca0de3 100644
--- a/UMFPACK/Source/umf_kernel.c
+++ b/UMFPACK/Source/umf_kernel.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_kernel.h b/UMFPACK/Source/umf_kernel.h
index 0f5d70d..68c0778 100644
--- a/UMFPACK/Source/umf_kernel.h
+++ b/UMFPACK/Source/umf_kernel.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_kernel
diff --git a/UMFPACK/Source/umf_kernel_init.c b/UMFPACK/Source/umf_kernel_init.c
index ff1c69f..ef1af77 100644
--- a/UMFPACK/Source/umf_kernel_init.c
+++ b/UMFPACK/Source/umf_kernel_init.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -486,17 +485,29 @@ GLOBAL Int UMF_kernel_init
 	ASSERT (n_row == n_col) ;
 	ASSERT (nempty_col == Symbolic->nempty_row) ;
 	ASSERT (nempty_col == nempty) ;
+
+#ifndef NDEBUG
 	for (i = 0 ; i < nn ; i++)
 	{
 	    Diagonal_map [i] = EMPTY ;
 	    Diagonal_imap [i] = EMPTY ;
 	}
-	for (k = n1 ; k < nn - nempty ; k++)
+#endif
+
+	for (k = 0 ; k < nn ; k++)
 	{
 	    newrow = Symbolic->Diagonal_map [k] ;
 	    Diagonal_map [k] = newrow ;
 	    Diagonal_imap [newrow] = k ;
 	}
+
+#ifndef NDEBUG
+	for (i = 0 ; i < nn ; i++)
+	{
+	    ASSERT (Diagonal_map [i] != EMPTY) ;
+	    ASSERT (Diagonal_imap [i] != EMPTY) ;
+	}
+#endif
     }
 
     /* ---------------------------------------------------------------------- */
@@ -759,9 +770,6 @@ GLOBAL Int UMF_kernel_init
 
 	cdeg = Cdeg [k] ;
 	ASSERT (cdeg >= 0) ;
-	ASSERT (IMPLIES (
-	    (Symbolic->ordering != UMFPACK_ORDERING_GIVEN) && n1 > 0,
-	    cdeg > 1 || cdeg == 0)) ;
 
 	/* if fixQ: set Col_degree to 0 for the NON_PIVOTAL_COL macro */
 	Col_degree [k] = fixQ ? 0 : cdeg ;
@@ -923,7 +931,7 @@ GLOBAL Int UMF_kernel_init
     {
 	Entry aij ;
 	Int *InvCperm, newcol ;
-	UMF_dump_diagonal_map (Diagonal_map, Diagonal_imap, n1, nn, nempty) ;
+	UMF_dump_diagonal_map (Diagonal_map, Diagonal_imap, nn) ;
 	InvCperm = (Int *) malloc (n_col * sizeof (Int)) ;
 	ASSERT (InvCperm != (Int *) NULL) ;
 	for (newcol = 0 ; newcol < n_col ; newcol++)
diff --git a/UMFPACK/Source/umf_kernel_init.h b/UMFPACK/Source/umf_kernel_init.h
index dc86d04..21f8c30 100644
--- a/UMFPACK/Source/umf_kernel_init.h
+++ b/UMFPACK/Source/umf_kernel_init.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_kernel_init
diff --git a/UMFPACK/Source/umf_kernel_wrapup.c b/UMFPACK/Source/umf_kernel_wrapup.c
index d9c3cd5..3066d26 100644
--- a/UMFPACK/Source/umf_kernel_wrapup.c
+++ b/UMFPACK/Source/umf_kernel_wrapup.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* The matrix is factorized.  Finish the LU data structure. */
diff --git a/UMFPACK/Source/umf_kernel_wrapup.h b/UMFPACK/Source/umf_kernel_wrapup.h
index e3e8fbd..923d513 100644
--- a/UMFPACK/Source/umf_kernel_wrapup.h
+++ b/UMFPACK/Source/umf_kernel_wrapup.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_kernel_wrapup
diff --git a/UMFPACK/Source/umf_local_search.c b/UMFPACK/Source/umf_local_search.c
index 4e7cabe..5d79dc8 100644
--- a/UMFPACK/Source/umf_local_search.c
+++ b/UMFPACK/Source/umf_local_search.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -1907,14 +1906,17 @@ GLOBAL Int UMF_local_search
     /* keep track of the diagonal */
     /* ---------------------------------------------------------------------- */
 
-    if (Symbolic->prefer_diagonal
-	&& Work->pivcol < Work->n_col - Symbolic->nempty_col)
+    if (Symbolic->prefer_diagonal)
     {
 	Diagonal_map = Work->Diagonal_map ;
 	Diagonal_imap = Work->Diagonal_imap ;
 	ASSERT (Diagonal_map != (Int *) NULL) ;
 	ASSERT (Diagonal_imap != (Int *) NULL) ;
 
+#ifndef NDEBUG
+	UMF_dump_diagonal_map (Diagonal_map, Diagonal_imap, Symbolic->n_col) ;
+#endif
+
 	row2 = Diagonal_map  [Work->pivcol] ;
 	col2 = Diagonal_imap [Work->pivrow] ;
 
@@ -1944,8 +1946,7 @@ GLOBAL Int UMF_local_search
 	}
 	ASSERT (n_row == n_col) ;
 #ifndef NDEBUG
-	UMF_dump_diagonal_map (Diagonal_map, Diagonal_imap, Symbolic->n1,
-	    Symbolic->n_col, Symbolic->nempty_col) ;
+	UMF_dump_diagonal_map (Diagonal_map, Diagonal_imap, Symbolic->n_col) ;
 #endif
     }
 
diff --git a/UMFPACK/Source/umf_local_search.h b/UMFPACK/Source/umf_local_search.h
index 434d66f..97aa6fd 100644
--- a/UMFPACK/Source/umf_local_search.h
+++ b/UMFPACK/Source/umf_local_search.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_local_search
diff --git a/UMFPACK/Source/umf_lsolve.c b/UMFPACK/Source/umf_lsolve.c
index 7e1943c..3d0f46f 100644
--- a/UMFPACK/Source/umf_lsolve.c
+++ b/UMFPACK/Source/umf_lsolve.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*  solves Lx = b, where L is the lower triangular factor of a matrix */
diff --git a/UMFPACK/Source/umf_lsolve.h b/UMFPACK/Source/umf_lsolve.h
index 211adff..8501b13 100644
--- a/UMFPACK/Source/umf_lsolve.h
+++ b/UMFPACK/Source/umf_lsolve.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL double UMF_lsolve
diff --git a/UMFPACK/Source/umf_ltsolve.c b/UMFPACK/Source/umf_ltsolve.c
index 1792dfa..793e9b4 100644
--- a/UMFPACK/Source/umf_ltsolve.c
+++ b/UMFPACK/Source/umf_ltsolve.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*  Solves L'x = b or L.'x=b, where L is the lower triangular factor of a */
diff --git a/UMFPACK/Source/umf_ltsolve.h b/UMFPACK/Source/umf_ltsolve.h
index 02f7734..4787d68 100644
--- a/UMFPACK/Source/umf_ltsolve.h
+++ b/UMFPACK/Source/umf_ltsolve.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL double UMF_ltsolve
diff --git a/UMFPACK/Source/umf_malloc.c b/UMFPACK/Source/umf_malloc.c
index d7ff561..c597435 100644
--- a/UMFPACK/Source/umf_malloc.c
+++ b/UMFPACK/Source/umf_malloc.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -61,20 +60,7 @@ GLOBAL void *UMF_malloc
 
     DEBUG0 (("UMF_malloc: ")) ;
 
-    /* make sure that we allocate something */
-    n_objects = MAX (1, n_objects) ;
-
-    size = (size_t) n_objects ;
-    ASSERT (size_of_object > 1) ;
-    if (size > Int_MAX / size_of_object)
-    {
-	/* object is too big for integer pointer arithmetic */
-	return ((void *) NULL) ;
-    }
-    size *= size_of_object ;
-
-    /* see AMD/Source/amd_global.c for the memory allocator selection */
-    p = amd_malloc (size) ;
+    p = SuiteSparse_malloc (n_objects, size_of_object) ;
 
     DEBUG0 ((ID"\n", (Int) p)) ;
 
diff --git a/UMFPACK/Source/umf_malloc.h b/UMFPACK/Source/umf_malloc.h
index 8ee9934..7ebf243 100644
--- a/UMFPACK/Source/umf_malloc.h
+++ b/UMFPACK/Source/umf_malloc.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 #ifndef _UMF_MALLOC
diff --git a/UMFPACK/Source/umf_mem_alloc_element.c b/UMFPACK/Source/umf_mem_alloc_element.c
index cac0db8..633b371 100644
--- a/UMFPACK/Source/umf_mem_alloc_element.c
+++ b/UMFPACK/Source/umf_mem_alloc_element.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* The UMF_mem_* routines manage the Numeric->Memory memory space. */
diff --git a/UMFPACK/Source/umf_mem_alloc_element.h b/UMFPACK/Source/umf_mem_alloc_element.h
index e0b259f..f374f5c 100644
--- a/UMFPACK/Source/umf_mem_alloc_element.h
+++ b/UMFPACK/Source/umf_mem_alloc_element.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_mem_alloc_element
diff --git a/UMFPACK/Source/umf_mem_alloc_head_block.c b/UMFPACK/Source/umf_mem_alloc_head_block.c
index 6d7355c..efbeb79 100644
--- a/UMFPACK/Source/umf_mem_alloc_head_block.c
+++ b/UMFPACK/Source/umf_mem_alloc_head_block.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* The UMF_mem_* routines manage the Numeric->Memory memory space. */
diff --git a/UMFPACK/Source/umf_mem_alloc_head_block.h b/UMFPACK/Source/umf_mem_alloc_head_block.h
index 510a6fa..f2266a3 100644
--- a/UMFPACK/Source/umf_mem_alloc_head_block.h
+++ b/UMFPACK/Source/umf_mem_alloc_head_block.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_mem_alloc_head_block
diff --git a/UMFPACK/Source/umf_mem_alloc_tail_block.c b/UMFPACK/Source/umf_mem_alloc_tail_block.c
index a16698a..7041252 100644
--- a/UMFPACK/Source/umf_mem_alloc_tail_block.c
+++ b/UMFPACK/Source/umf_mem_alloc_tail_block.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* The UMF_mem_* routines manage the Numeric->Memory memory space. */
diff --git a/UMFPACK/Source/umf_mem_alloc_tail_block.h b/UMFPACK/Source/umf_mem_alloc_tail_block.h
index d072a73..7d2e7c6 100644
--- a/UMFPACK/Source/umf_mem_alloc_tail_block.h
+++ b/UMFPACK/Source/umf_mem_alloc_tail_block.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_mem_alloc_tail_block
diff --git a/UMFPACK/Source/umf_mem_free_tail_block.c b/UMFPACK/Source/umf_mem_free_tail_block.c
index 9bec421..26ba206 100644
--- a/UMFPACK/Source/umf_mem_free_tail_block.c
+++ b/UMFPACK/Source/umf_mem_free_tail_block.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* The UMF_mem_* routines manage the Numeric->Memory memory space. */
diff --git a/UMFPACK/Source/umf_mem_free_tail_block.h b/UMFPACK/Source/umf_mem_free_tail_block.h
index 14c7324..7462cba 100644
--- a/UMFPACK/Source/umf_mem_free_tail_block.h
+++ b/UMFPACK/Source/umf_mem_free_tail_block.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_mem_free_tail_block
diff --git a/UMFPACK/Source/umf_mem_init_memoryspace.c b/UMFPACK/Source/umf_mem_init_memoryspace.c
index 0e05f5c..01f782f 100644
--- a/UMFPACK/Source/umf_mem_init_memoryspace.c
+++ b/UMFPACK/Source/umf_mem_init_memoryspace.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* The UMF_mem_* routines manage the Numeric->Memory memory space. */
diff --git a/UMFPACK/Source/umf_mem_init_memoryspace.h b/UMFPACK/Source/umf_mem_init_memoryspace.h
index 45d552f..b0903c5 100644
--- a/UMFPACK/Source/umf_mem_init_memoryspace.h
+++ b/UMFPACK/Source/umf_mem_init_memoryspace.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_mem_init_memoryspace
diff --git a/UMFPACK/Source/umf_multicompile.c b/UMFPACK/Source/umf_multicompile.c
index 0603560..a075c91 100644
--- a/UMFPACK/Source/umf_multicompile.c
+++ b/UMFPACK/Source/umf_multicompile.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* This file is not needed if you have the Unix/Linux "make" command for
diff --git a/UMFPACK/Source/umf_realloc.c b/UMFPACK/Source/umf_realloc.c
index feae25a..607e164 100644
--- a/UMFPACK/Source/umf_realloc.c
+++ b/UMFPACK/Source/umf_realloc.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -57,8 +56,7 @@ GLOBAL void *UMF_realloc
     DEBUG0 (("UMF_realloc: "ID" n_objects "ID"  size_of_object "ID"\n",
 	(Int) p, n_objects, (Int) size_of_object)) ;
 
-    /* see AMD/Source/amd_global.c for the memory allocator selection */
-    p2 = amd_realloc (p, size) ;
+    p2 = SuiteSparse_config.realloc_func (p, size) ;
 
 #if defined (UMF_MALLOC_COUNT) || !defined (NDEBUG)
     /* If p didn't exist on input, and p2 exists, then a new object has been
diff --git a/UMFPACK/Source/umf_realloc.h b/UMFPACK/Source/umf_realloc.h
index 5b2f1c2..b40eccf 100644
--- a/UMFPACK/Source/umf_realloc.h
+++ b/UMFPACK/Source/umf_realloc.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void *UMF_realloc
diff --git a/UMFPACK/Source/umf_report_perm.c b/UMFPACK/Source/umf_report_perm.c
index aa5260d..fc6aa76 100644
--- a/UMFPACK/Source/umf_report_perm.c
+++ b/UMFPACK/Source/umf_report_perm.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 #include "umf_internal.h"
diff --git a/UMFPACK/Source/umf_report_perm.h b/UMFPACK/Source/umf_report_perm.h
index 6b18d85..a6233f6 100644
--- a/UMFPACK/Source/umf_report_perm.h
+++ b/UMFPACK/Source/umf_report_perm.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_report_perm
diff --git a/UMFPACK/Source/umf_report_vector.c b/UMFPACK/Source/umf_report_vector.c
index 5533683..e26daad 100644
--- a/UMFPACK/Source/umf_report_vector.c
+++ b/UMFPACK/Source/umf_report_vector.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 #include "umf_internal.h"
diff --git a/UMFPACK/Source/umf_report_vector.h b/UMFPACK/Source/umf_report_vector.h
index 6a758d7..82211b9 100644
--- a/UMFPACK/Source/umf_report_vector.h
+++ b/UMFPACK/Source/umf_report_vector.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_report_vector
diff --git a/UMFPACK/Source/umf_row_search.c b/UMFPACK/Source/umf_row_search.c
index f20ca0c..505fe51 100644
--- a/UMFPACK/Source/umf_row_search.c
+++ b/UMFPACK/Source/umf_row_search.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_row_search.h b/UMFPACK/Source/umf_row_search.h
index e0171ee..c105923 100644
--- a/UMFPACK/Source/umf_row_search.h
+++ b/UMFPACK/Source/umf_row_search.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_row_search
diff --git a/UMFPACK/Source/umf_scale.c b/UMFPACK/Source/umf_scale.c
index 04f09df..6ca8556 100644
--- a/UMFPACK/Source/umf_scale.c
+++ b/UMFPACK/Source/umf_scale.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Divide a vector of stride 1 by the pivot value. */
diff --git a/UMFPACK/Source/umf_scale.h b/UMFPACK/Source/umf_scale.h
index 99799f5..b030afb 100644
--- a/UMFPACK/Source/umf_scale.h
+++ b/UMFPACK/Source/umf_scale.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_scale
diff --git a/UMFPACK/Source/umf_scale_column.c b/UMFPACK/Source/umf_scale_column.c
index 9fd3796..74cb476 100644
--- a/UMFPACK/Source/umf_scale_column.c
+++ b/UMFPACK/Source/umf_scale_column.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_scale_column.h b/UMFPACK/Source/umf_scale_column.h
index 2306787..25a93a8 100644
--- a/UMFPACK/Source/umf_scale_column.h
+++ b/UMFPACK/Source/umf_scale_column.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_scale_column
diff --git a/UMFPACK/Source/umf_set_stats.c b/UMFPACK/Source/umf_set_stats.c
index fb1f232..8eaf0f9 100644
--- a/UMFPACK/Source/umf_set_stats.c
+++ b/UMFPACK/Source/umf_set_stats.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_set_stats.h b/UMFPACK/Source/umf_set_stats.h
index f4342ce..29e1c00 100644
--- a/UMFPACK/Source/umf_set_stats.h
+++ b/UMFPACK/Source/umf_set_stats.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL void UMF_set_stats
diff --git a/UMFPACK/Source/umf_singletons.c b/UMFPACK/Source/umf_singletons.c
index 8288220..3e2ec1a 100644
--- a/UMFPACK/Source/umf_singletons.c
+++ b/UMFPACK/Source/umf_singletons.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Find and order the row and column singletons of a matrix A.  If there are
@@ -748,6 +747,7 @@ GLOBAL Int UMF_singletons
     const Int Ai [ ],	    /* size nz = Ap [n_col] */
     const Int Quser [ ],    /* size n_col if present */
     Int strategy,	    /* strategy requested by user */
+    Int do_singletons,      /* if false, then do not look for singletons */
 
     /* output, not defined on input: */
     Int Cdeg [ ],	/* size n_col */
@@ -822,7 +822,14 @@ GLOBAL Int UMF_singletons
     /* find singletons */
     /* ---------------------------------------------------------------------- */
 
-    if (Quser != (Int *) NULL)
+    if (!do_singletons)
+    {
+        /* do not look for singletons at all */
+        n1 = 0 ;
+        n1r = 0 ;
+        n1c = 0 ;
+    }
+    else if (Quser != (Int *) NULL)
     {
 	/* user has provided an input column ordering */
 	if (strategy == UMFPACK_STRATEGY_UNSYMMETRIC)
@@ -885,17 +892,26 @@ GLOBAL Int UMF_singletons
     /* see if pruned submatrix is square and has been symmetrically permuted */
     /* ---------------------------------------------------------------------- */
 
+    /* The prior version of this code (with a "break" statement; UMFPACK 5.2)
+     * causes UMFPACK to fail when optimization is enabled with gcc version
+     * 4.2.4 in a 64-bit Linux environment.  The bug is a compiler bug, not a
+     * an UMFPACK bug.  It is fixed in gcc version 4.3.2.  However, as a
+     * workaround for the compiler, the code below has been "fixed". */
+
     if (n_row == n_col && nempty_row == nempty_col)
     {
 	/* is_sym is true if the submatrix is square, and
 	 * Rperm [n1..n_row-nempty_row-1] = Cperm [n1..n_col-nempty_col-1] */
 	is_sym = TRUE ;
-	for (s = n1 ; s < n_col - nempty_col ; s++)
+	for (s = n1 ; /* replaced the break with this test: */ is_sym &&
+            /* the remainder of this test is unchanged from v5.2.0: */
+            s < n_col - nempty_col ; s++)
 	{
 	    if (Cperm [s] != Rperm [s])
 	    {
 		is_sym = FALSE ;
-		break ;
+		/* removed a break statement here, which is OK but it tickles
+                 * the gcc 4.2.{3,4} compiler bug */
 	    }
 	}
     }
@@ -903,6 +919,7 @@ GLOBAL Int UMF_singletons
     {
 	is_sym = FALSE ;
     }
+
     DEBUGm4 (("Submatrix square and symmetrically permuted? "ID"\n", is_sym)) ;
     DEBUGm4 (("singletons "ID" row "ID" col "ID"\n", n1, n1r, n1c)) ;
     DEBUGm4 (("Empty cols "ID" rows "ID"\n", nempty_col, nempty_row)) ;
diff --git a/UMFPACK/Source/umf_singletons.h b/UMFPACK/Source/umf_singletons.h
index 5b2e498..4093188 100644
--- a/UMFPACK/Source/umf_singletons.h
+++ b/UMFPACK/Source/umf_singletons.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_singletons
@@ -12,6 +11,7 @@ GLOBAL Int UMF_singletons
     const Int Ai [ ],
     const Int Quser [ ],
     Int strategy,
+    Int do_singletons,
     Int Cdeg [ ],
     Int Cperm [ ],
     Int Rdeg [ ],
diff --git a/UMFPACK/Source/umf_solve.c b/UMFPACK/Source/umf_solve.c
index 42bf879..71b8b54 100644
--- a/UMFPACK/Source/umf_solve.c
+++ b/UMFPACK/Source/umf_solve.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_solve.h b/UMFPACK/Source/umf_solve.h
index 80a796c..9183c15 100644
--- a/UMFPACK/Source/umf_solve.h
+++ b/UMFPACK/Source/umf_solve.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_solve
diff --git a/UMFPACK/Source/umf_start_front.c b/UMFPACK/Source/umf_start_front.c
index 47aa354..902e258 100644
--- a/UMFPACK/Source/umf_start_front.c
+++ b/UMFPACK/Source/umf_start_front.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Allocate the initial frontal matrix working array for a single chain.  The
diff --git a/UMFPACK/Source/umf_start_front.h b/UMFPACK/Source/umf_start_front.h
index 1a1c4f2..f59c8d9 100644
--- a/UMFPACK/Source/umf_start_front.h
+++ b/UMFPACK/Source/umf_start_front.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_start_front
diff --git a/UMFPACK/Source/umf_store_lu.c b/UMFPACK/Source/umf_store_lu.c
index 97e1081..7b0f55c 100644
--- a/UMFPACK/Source/umf_store_lu.c
+++ b/UMFPACK/Source/umf_store_lu.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_store_lu.h b/UMFPACK/Source/umf_store_lu.h
index 82627ad..4379a11 100644
--- a/UMFPACK/Source/umf_store_lu.h
+++ b/UMFPACK/Source/umf_store_lu.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_store_lu
diff --git a/UMFPACK/Source/umf_symbolic_usage.c b/UMFPACK/Source/umf_symbolic_usage.c
index 31abdf9..b16ce92 100644
--- a/UMFPACK/Source/umf_symbolic_usage.c
+++ b/UMFPACK/Source/umf_symbolic_usage.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Returns the final size of the Symbolic object, in Units */
diff --git a/UMFPACK/Source/umf_symbolic_usage.h b/UMFPACK/Source/umf_symbolic_usage.h
index 3fad24a..1caeeca 100644
--- a/UMFPACK/Source/umf_symbolic_usage.h
+++ b/UMFPACK/Source/umf_symbolic_usage.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL double UMF_symbolic_usage
diff --git a/UMFPACK/Source/umf_transpose.c b/UMFPACK/Source/umf_transpose.c
index 6ac7435..262fede 100644
--- a/UMFPACK/Source/umf_transpose.c
+++ b/UMFPACK/Source/umf_transpose.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*  Not user-callable.  Computes a permuted transpose, R = (A (P,Q(1:nq)))' in
diff --git a/UMFPACK/Source/umf_transpose.h b/UMFPACK/Source/umf_transpose.h
index 4c4dee9..b6b93ff 100644
--- a/UMFPACK/Source/umf_transpose.h
+++ b/UMFPACK/Source/umf_transpose.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_transpose
diff --git a/UMFPACK/Source/umf_triplet.c b/UMFPACK/Source/umf_triplet.c
index aaca50c..13a43c0 100644
--- a/UMFPACK/Source/umf_triplet.c
+++ b/UMFPACK/Source/umf_triplet.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umf_triplet.h b/UMFPACK/Source/umf_triplet.h
index 62f9729..e1b3b69 100644
--- a/UMFPACK/Source/umf_triplet.h
+++ b/UMFPACK/Source/umf_triplet.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_triplet_map_x
diff --git a/UMFPACK/Source/umf_tuple_lengths.c b/UMFPACK/Source/umf_tuple_lengths.c
index 8dd349e..61da4af 100644
--- a/UMFPACK/Source/umf_tuple_lengths.c
+++ b/UMFPACK/Source/umf_tuple_lengths.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Determine the tuple list lengths, and the amount of memory required for */
diff --git a/UMFPACK/Source/umf_tuple_lengths.h b/UMFPACK/Source/umf_tuple_lengths.h
index a31ccb9..038bdd0 100644
--- a/UMFPACK/Source/umf_tuple_lengths.h
+++ b/UMFPACK/Source/umf_tuple_lengths.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_tuple_lengths
diff --git a/UMFPACK/Source/umf_usolve.c b/UMFPACK/Source/umf_usolve.c
index f5a127d..4ea12ef 100644
--- a/UMFPACK/Source/umf_usolve.c
+++ b/UMFPACK/Source/umf_usolve.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*  solves Ux = b, where U is the upper triangular factor of a matrix. */
diff --git a/UMFPACK/Source/umf_usolve.h b/UMFPACK/Source/umf_usolve.h
index 3b950d3..55b6142 100644
--- a/UMFPACK/Source/umf_usolve.h
+++ b/UMFPACK/Source/umf_usolve.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL double UMF_usolve
diff --git a/UMFPACK/Source/umf_utsolve.c b/UMFPACK/Source/umf_utsolve.c
index 3d557b6..708a04c 100644
--- a/UMFPACK/Source/umf_utsolve.c
+++ b/UMFPACK/Source/umf_utsolve.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*  solves U'x = b or U.'x=b, where U is the upper triangular factor of a */
diff --git a/UMFPACK/Source/umf_utsolve.h b/UMFPACK/Source/umf_utsolve.h
index dae3143..44f9485 100644
--- a/UMFPACK/Source/umf_utsolve.h
+++ b/UMFPACK/Source/umf_utsolve.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL double UMF_utsolve
diff --git a/UMFPACK/Source/umf_valid_numeric.c b/UMFPACK/Source/umf_valid_numeric.c
index 76855e3..48c0686 100644
--- a/UMFPACK/Source/umf_valid_numeric.c
+++ b/UMFPACK/Source/umf_valid_numeric.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* Returns TRUE if the Numeric object is valid, FALSE otherwise. */
diff --git a/UMFPACK/Source/umf_valid_numeric.h b/UMFPACK/Source/umf_valid_numeric.h
index 0b258e4..8ea1da4 100644
--- a/UMFPACK/Source/umf_valid_numeric.h
+++ b/UMFPACK/Source/umf_valid_numeric.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_valid_numeric
diff --git a/UMFPACK/Source/umf_valid_symbolic.c b/UMFPACK/Source/umf_valid_symbolic.c
index dd81851..d396839 100644
--- a/UMFPACK/Source/umf_valid_symbolic.c
+++ b/UMFPACK/Source/umf_valid_symbolic.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 #include "umf_internal.h"
diff --git a/UMFPACK/Source/umf_valid_symbolic.h b/UMFPACK/Source/umf_valid_symbolic.h
index 741a799..299f0fd 100644
--- a/UMFPACK/Source/umf_valid_symbolic.h
+++ b/UMFPACK/Source/umf_valid_symbolic.h
@@ -1,7 +1,6 @@
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 GLOBAL Int UMF_valid_symbolic
diff --git a/UMFPACK/Source/umf_version.h b/UMFPACK/Source/umf_version.h
index 98d765f..186078f 100644
--- a/UMFPACK/Source/umf_version.h
+++ b/UMFPACK/Source/umf_version.h
@@ -3,17 +3,16 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
    Define routine names, depending on version being compiled.
 
    DINT:	double precision, int's as integers
-   DLONG:	double precision, UF_long's as integers
-   ZLONG:	complex double precision, UF_long's as integers
+   DLONG:	double precision, SuiteSparse_long's as integers
+   ZLONG:	complex double precision, SuiteSparse_long's as integers
    ZINT:	complex double precision, int's as integers
 */
 
@@ -28,7 +27,7 @@
 #endif
 
 /* -------------------------------------------------------------------------- */
-/* integer type (Int is int or UF_long) now defined in amd_internal.h */
+/* integer type (Int is int or SuiteSparse_long) defined in amd_internal.h */
 /* -------------------------------------------------------------------------- */
 
 #if defined (DLONG) || defined (ZLONG)
@@ -353,7 +352,8 @@ typedef struct
 /* c = a/b, using function pointer */
 #define DIV(c,a,b) \
 { \
-    (void) umfpack_divcomplex ((a).Real, (a).Imag, (b).Real, (b).Imag, \
+    (void) SuiteSparse_config.divcomplex_func \
+        ((a).Real, (a).Imag, (b).Real, (b).Imag, \
 	&((c).Real), &((c).Imag)) ; \
 }
 
@@ -362,7 +362,8 @@ typedef struct
 /* c = a/conjugate(b), using function pointer */
 #define DIV_CONJ(c,a,b) \
 { \
-    (void) umfpack_divcomplex ((a).Real, (a).Imag, (b).Real, (-(b).Imag), \
+    (void) SuiteSparse_config.divcomplex_func \
+        ((a).Real, (a).Imag, (b).Real, (-(b).Imag), \
 	&((c).Real), &((c).Imag)) ; \
 }
 
@@ -379,7 +380,7 @@ typedef struct
 /* exact absolute value, s = sqrt (a.real^2 + a.imag^2) */
 #define ABS(s,a) \
 { \
-    (s) = umfpack_hypot ((a).Real, (a).Imag) ; \
+    (s) = SuiteSparse_config.hypot_func ((a).Real, (a).Imag) ; \
 }
 
 /* -------------------------------------------------------------------------- */
@@ -475,7 +476,7 @@ typedef struct
 #define UMF_triplet_map_nox	 umfdi_triplet_map_nox
 #define UMF_triplet_nomap_x	 umfdi_triplet_nomap_x
 #define UMF_triplet_nomap_nox	 umfdi_triplet_nomap_nox
-#define UMF_2by2		 umfdi_2by2
+#define UMF_cholmod		 umf_i_cholmod
 
 #define UMFPACK_col_to_triplet	 umfpack_di_col_to_triplet
 #define UMFPACK_defaults	 umfpack_di_defaults
@@ -487,6 +488,7 @@ typedef struct
 #define UMFPACK_get_determinant	 umfpack_di_get_determinant
 #define UMFPACK_numeric		 umfpack_di_numeric
 #define UMFPACK_qsymbolic	 umfpack_di_qsymbolic
+#define UMFPACK_fsymbolic	 umfpack_di_fsymbolic
 #define UMFPACK_report_control	 umfpack_di_report_control
 #define UMFPACK_report_info	 umfpack_di_report_info
 #define UMFPACK_report_matrix	 umfpack_di_report_matrix
@@ -529,7 +531,7 @@ typedef struct
 #endif
 
 /* -------------------------------------------------------------------------- */
-/* Double precision, with UF_long's as integers */
+/* Double precision, with SuiteSparse_long's as integers */
 /* -------------------------------------------------------------------------- */
 
 #ifdef DLONG
@@ -590,7 +592,7 @@ typedef struct
 #define UMF_triplet_map_nox	 umfdl_triplet_map_nox
 #define UMF_triplet_nomap_x	 umfdl_triplet_nomap_x
 #define UMF_triplet_nomap_nox	 umfdl_triplet_nomap_nox
-#define UMF_2by2		 umfdl_2by2
+#define UMF_cholmod		 umf_l_cholmod
 
 #define UMFPACK_col_to_triplet	 umfpack_dl_col_to_triplet
 #define UMFPACK_defaults	 umfpack_dl_defaults
@@ -602,6 +604,7 @@ typedef struct
 #define UMFPACK_get_determinant	 umfpack_dl_get_determinant
 #define UMFPACK_numeric		 umfpack_dl_numeric
 #define UMFPACK_qsymbolic	 umfpack_dl_qsymbolic
+#define UMFPACK_fsymbolic	 umfpack_dl_fsymbolic
 #define UMFPACK_report_control	 umfpack_dl_report_control
 #define UMFPACK_report_info	 umfpack_dl_report_info
 #define UMFPACK_report_matrix	 umfpack_dl_report_matrix
@@ -705,7 +708,7 @@ typedef struct
 #define UMF_triplet_map_nox	 umfzi_triplet_map_nox
 #define UMF_triplet_nomap_x	 umfzi_triplet_nomap_x
 #define UMF_triplet_nomap_nox	 umfzi_triplet_nomap_nox
-#define UMF_2by2		 umfzi_2by2
+#define UMF_cholmod		 umf_i_cholmod
 
 #define UMFPACK_col_to_triplet	 umfpack_zi_col_to_triplet
 #define UMFPACK_defaults	 umfpack_zi_defaults
@@ -717,6 +720,7 @@ typedef struct
 #define UMFPACK_get_determinant	 umfpack_zi_get_determinant
 #define UMFPACK_numeric		 umfpack_zi_numeric
 #define UMFPACK_qsymbolic	 umfpack_zi_qsymbolic
+#define UMFPACK_fsymbolic	 umfpack_zi_fsymbolic
 #define UMFPACK_report_control	 umfpack_zi_report_control
 #define UMFPACK_report_info	 umfpack_zi_report_info
 #define UMFPACK_report_matrix	 umfpack_zi_report_matrix
@@ -759,7 +763,7 @@ typedef struct
 #endif
 
 /* -------------------------------------------------------------------------- */
-/* Complex double precision, with UF_long's as integers */
+/* Complex double precision, with SuiteSparse_long's as integers */
 /* -------------------------------------------------------------------------- */
 
 #ifdef ZLONG
@@ -820,7 +824,7 @@ typedef struct
 #define UMF_triplet_map_nox	 umfzl_triplet_map_nox
 #define UMF_triplet_nomap_x	 umfzl_triplet_nomap_x
 #define UMF_triplet_nomap_nox	 umfzl_triplet_nomap_nox
-#define UMF_2by2		 umfzl_2by2
+#define UMF_cholmod		 umf_l_cholmod
 
 #define UMFPACK_col_to_triplet	 umfpack_zl_col_to_triplet
 #define UMFPACK_defaults	 umfpack_zl_defaults
@@ -832,6 +836,7 @@ typedef struct
 #define UMFPACK_get_determinant	 umfpack_zl_get_determinant
 #define UMFPACK_numeric		 umfpack_zl_numeric
 #define UMFPACK_qsymbolic	 umfpack_zl_qsymbolic
+#define UMFPACK_fsymbolic	 umfpack_zl_fsymbolic
 #define UMFPACK_report_control	 umfpack_zl_report_control
 #define UMFPACK_report_info	 umfpack_zl_report_info
 #define UMFPACK_report_matrix	 umfpack_zl_report_matrix
diff --git a/UMFPACK/Source/umfpack_col_to_triplet.c b/UMFPACK/Source/umfpack_col_to_triplet.c
index f49a13d..9e157b6 100644
--- a/UMFPACK/Source/umfpack_col_to_triplet.c
+++ b/UMFPACK/Source/umfpack_col_to_triplet.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_defaults.c b/UMFPACK/Source/umfpack_defaults.c
index 761ecd1..8b242e8 100644
--- a/UMFPACK/Source/umfpack_defaults.c
+++ b/UMFPACK/Source/umfpack_defaults.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -40,15 +39,13 @@ GLOBAL void UMFPACK_defaults
     /* used in UMFPACK_report_* routines: */
     Control [UMFPACK_PRL] = UMFPACK_DEFAULT_PRL ;
 
-    /* used in UMFPACK_*symbolic: */
     Control [UMFPACK_DENSE_ROW] = UMFPACK_DEFAULT_DENSE_ROW ;
     Control [UMFPACK_DENSE_COL] = UMFPACK_DEFAULT_DENSE_COL ;
     Control [UMFPACK_AMD_DENSE] = UMFPACK_DEFAULT_AMD_DENSE ;
     Control [UMFPACK_STRATEGY] = UMFPACK_DEFAULT_STRATEGY ;
-    Control [UMFPACK_2BY2_TOLERANCE] = UMFPACK_DEFAULT_2BY2_TOLERANCE ;
     Control [UMFPACK_AGGRESSIVE] = UMFPACK_DEFAULT_AGGRESSIVE ;
-
-    /* used in UMFPACK_numeric: */
+    Control [UMFPACK_SINGLETONS] = UMFPACK_DEFAULT_SINGLETONS ;
+    Control [UMFPACK_ORDERING] = UMFPACK_DEFAULT_ORDERING ;
     Control [UMFPACK_PIVOT_TOLERANCE] = UMFPACK_DEFAULT_PIVOT_TOLERANCE ;
     Control [UMFPACK_SYM_PIVOT_TOLERANCE] = UMFPACK_DEFAULT_SYM_PIVOT_TOLERANCE;
     Control [UMFPACK_BLOCK_SIZE] = UMFPACK_DEFAULT_BLOCK_SIZE ;
@@ -70,45 +67,4 @@ GLOBAL void UMFPACK_defaults
     /* use externally-provided BLAS (dgemm, dger, dgemv, zgemm, zgeru, zgemv) */
     Control [UMFPACK_COMPILED_WITH_BLAS] = 1 ;
 #endif
-
-#ifdef MATLAB_MEX_FILE
-    /* compiled as a MATLAB mexFunction */ 
-    Control [UMFPACK_COMPILED_FOR_MATLAB] = 1 ;
-#else
-#ifdef MATHWORKS
-    /* compiled for internal use in MATLAB */ 
-    Control [UMFPACK_COMPILED_FOR_MATLAB] = 2 ;
-#else
-    /* use ANSI C malloc, free, realloc, and printf */
-    Control [UMFPACK_COMPILED_FOR_MATLAB] = 0 ;
-#endif
-#endif
-
-#ifdef NO_TIMER
-    /* no timer used */
-    Control [UMFPACK_COMPILED_WITH_GETRUSAGE] = 3 ;
-#ifndef NPOSIX
-    /* uses the POSIX sysconf ( ) and times ( ) routines in UMFPACK_tic, toc */
-    Control [UMFPACK_COMPILED_WITH_GETRUSAGE] = 2 ;
-#else
-#ifdef GETRUSAGE
-    /* uses the non-standard getrusage to get CPU time (Solaris) */
-    Control [UMFPACK_COMPILED_WITH_GETRUSAGE] = 1 ;
-#else
-    /* uses the ANSI standard clock routine to get CPU time */
-    /* this may wrap around */
-    Control [UMFPACK_COMPILED_WITH_GETRUSAGE] = 0 ;
-#endif
-#endif
-#endif
-
-#ifndef NDEBUG
-    /* UMFPACK is compiled in debug mode. */
-    /* This is exceedingly slow. */
-    DEBUG0 (("UMFPACK is running in debug mode.  This is very slow!\n")) ;
-    Control [UMFPACK_COMPILED_IN_DEBUG_MODE] = 1 ;
-#else
-    /* UMFPACK is compiled in normal (non-debug) mode */
-    Control [UMFPACK_COMPILED_IN_DEBUG_MODE] = 0 ;
-#endif
 }
diff --git a/UMFPACK/Source/umfpack_free_numeric.c b/UMFPACK/Source/umfpack_free_numeric.c
index 7e4e531..b8fbe6b 100644
--- a/UMFPACK/Source/umfpack_free_numeric.c
+++ b/UMFPACK/Source/umfpack_free_numeric.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*  User-callable.  Free the entire Numeric object (consists of 11 to 13
diff --git a/UMFPACK/Source/umfpack_free_symbolic.c b/UMFPACK/Source/umfpack_free_symbolic.c
index b865c43..529b2a5 100644
--- a/UMFPACK/Source/umfpack_free_symbolic.c
+++ b/UMFPACK/Source/umfpack_free_symbolic.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_get_determinant.c b/UMFPACK/Source/umfpack_get_determinant.c
index bfeacaa..c3ec011 100644
--- a/UMFPACK/Source/umfpack_get_determinant.c
+++ b/UMFPACK/Source/umfpack_get_determinant.c
@@ -3,12 +3,12 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
-/* UMFPACK_get_determinant contributed by David Bateman, Motorola, Paris. */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
+/* UMFPACK_get_determinant contributed by David Bateman, Motorola, Paris. */
+
 /*
     User-callable.  From the LU factors, scale factor, and permutation vectors
     held in the Numeric object, calculates the determinant of the matrix A.
diff --git a/UMFPACK/Source/umfpack_get_lunz.c b/UMFPACK/Source/umfpack_get_lunz.c
index 21752d3..407899d 100644
--- a/UMFPACK/Source/umfpack_get_lunz.c
+++ b/UMFPACK/Source/umfpack_get_lunz.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_get_numeric.c b/UMFPACK/Source/umfpack_get_numeric.c
index 9dd2208..63faf0b 100644
--- a/UMFPACK/Source/umfpack_get_numeric.c
+++ b/UMFPACK/Source/umfpack_get_numeric.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_get_symbolic.c b/UMFPACK/Source/umfpack_get_symbolic.c
index 560d38c..fec93bb 100644
--- a/UMFPACK/Source/umfpack_get_symbolic.c
+++ b/UMFPACK/Source/umfpack_get_symbolic.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_global.c b/UMFPACK/Source/umfpack_global.c
index b227573..f57ee36 100644
--- a/UMFPACK/Source/umfpack_global.c
+++ b/UMFPACK/Source/umfpack_global.c
@@ -3,128 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
-/*
-    Global variables.  UMFPACK uses these function pointers for several
-    user-redefinable functions.   The amd_* functions are defined in
-    AMD/Source/amd_global.c.
-
-    Function pointer	    default	    for mexFunction
-					    (see MATLAB/umfpackmex.c)
-    ----------------	    -------	    ---------------
-    amd_malloc		    malloc	    mxMalloc
-    amd_free		    free	    mxFree
-    amd_realloc		    realloc	    mxRealloc
-    amd_calloc		    calloc	    mxCalloc
-    amd_printf		    printf	    mexPrintf
-
-    umfpack_hypot	    umf_hypot	    umf_hypot
-    umfpack_divcomplex	    umf_divcomplex  umf_divcomplex
-
-    This routine is compiled just once for all four versions of UMFPACK
-    (int/UF_long, double/complex).
-*/
-
-#include "umf_internal.h"
-
-double (*umfpack_hypot) (double, double) = umf_hypot ;
-int (*umfpack_divcomplex) (double, double, double, double, double *, double *)
-    = umf_divcomplex ;
-
-
-/* ========================================================================== */
-/* === umf_hypot ============================================================ */
-/* ========================================================================== */
-
-/* There is an equivalent routine called hypot in <math.h>, which conforms
- * to ANSI C99.  However, UMFPACK does not assume that ANSI C99 is available.
- * You can use the ANSI C99 hypot routine with:
- *
- *	#include <math.h>
- *	umfpack_hypot = hypot ;
- *
- * prior to calling any UMFPACK routine.
- *
- * s = hypot (x,y) computes s = sqrt (x*x + y*y) but does so more accurately.
- *
- * The NaN case for the double relops x >= y and x+y == x is safely ignored.
- */
-
-double umf_hypot (double x, double y)
-{
-    double s, r ;
-    x = SCALAR_ABS (x) ;
-    y = SCALAR_ABS (y) ;
-    if (x >= y)
-    {
-	if (x + y == x)
-	{
-	    s = x ;
-	}
-	else
-	{
-	    r = y / x ;
-	    s = x * sqrt (1.0 + r*r) ;
-	}
-    }
-    else
-    {
-	if (y + x == y)
-	{
-	    s = y ;
-	}
-	else
-	{
-	    r = x / y ;
-	    s = y * sqrt (1.0 + r*r) ;
-	}
-    } 
-    return (s) ;
-}
-
-
-/* ========================================================================== */
-/* === umf_divcomplex ======================================================= */
-/* ========================================================================== */
-
-/* c = a/b where c, a, and b are complex.  The real and imaginary parts are
- * passed as separate arguments to this routine.  The NaN case is ignored
- * for the double relop br >= bi.  Returns TRUE (1) if the denominator is
- * zero, FALSE (0) otherwise.
- *
- * This uses ACM Algo 116, by R. L. Smith, 1962, which tries to avoid
- * underflow and overflow.
- *
- * c can be the same variable as a or b.
- */
-
-int umf_divcomplex
-(
-    double ar, double ai,	/* real and imaginary parts of a */
-    double br, double bi,	/* real and imaginary parts of b */
-    double *cr, double *ci	/* real and imaginary parts of c */
-)
-{
-    double tr, ti, r, den ;
-    if (SCALAR_ABS (br) >= SCALAR_ABS (bi))
-    {
-	r = bi / br ;
-	den = br + r * bi ;
-	tr = (ar + ai * r) / den ;
-	ti = (ai - ar * r) / den ;
-    }
-    else
-    {
-	r = br / bi ;
-	den = r * br + bi ;
-	tr = (ar * r + ai) / den ;
-	ti = (ai * r - ar) / den ;
-    }
-    *cr = tr ;
-    *ci = ti ;
-    return (SCALAR_IS_ZERO (den)) ;
-}
+    /* moved to SuiteSparse_config */
diff --git a/UMFPACK/Source/umfpack_load_numeric.c b/UMFPACK/Source/umfpack_load_numeric.c
index a234902..4451376 100644
--- a/UMFPACK/Source/umfpack_load_numeric.c
+++ b/UMFPACK/Source/umfpack_load_numeric.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_load_symbolic.c b/UMFPACK/Source/umfpack_load_symbolic.c
index 10db361..75b46d4 100644
--- a/UMFPACK/Source/umfpack_load_symbolic.c
+++ b/UMFPACK/Source/umfpack_load_symbolic.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_numeric.c b/UMFPACK/Source/umfpack_numeric.c
index a96a9fd..a89bce6 100644
--- a/UMFPACK/Source/umfpack_numeric.c
+++ b/UMFPACK/Source/umfpack_numeric.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -161,8 +160,9 @@ GLOBAL Int UMFPACK_numeric
 	return (UMFPACK_ERROR_invalid_Symbolic_object) ;
     }
 
-    /* compute alloc_init automatically for AMD ordering */
-    if (Symbolic->ordering == UMFPACK_ORDERING_AMD && alloc_init >= 0)
+    /* compute alloc_init automatically for AMD or other symmetric ordering */
+    if (/* Symbolic->ordering == UMFPACK_ORDERING_AMD */ alloc_init >= 0
+        && Symbolic->amd_lunz > 0)
     {
 	alloc_init = (Symbolic->nz + Symbolic->amd_lunz) / Symbolic->lunz_bound;
 	alloc_init = MIN (1.0, alloc_init) ;
diff --git a/UMFPACK/Source/umfpack_qsymbolic.c b/UMFPACK/Source/umfpack_qsymbolic.c
index 3e2674f..2063014 100644
--- a/UMFPACK/Source/umfpack_qsymbolic.c
+++ b/UMFPACK/Source/umfpack_qsymbolic.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -28,8 +27,8 @@
 #include "umf_is_permutation.h"
 #include "umf_malloc.h"
 #include "umf_free.h"
-#include "umf_2by2.h"
 #include "umf_singletons.h"
+#include "umf_cholmod.h"
 
 typedef struct	/* SWType */
 {
@@ -46,7 +45,6 @@ typedef struct	/* SWType */
     Int *Si ;		    /* size nz */
     Int *Sp ;		    /* size n_col + 1 */
     double *Rs ;	    /* size n_row */
-    Int *Rperm_2by2 ;	    /* size n_row */
 
 } SWType ;
 
@@ -83,25 +81,383 @@ PRIVATE Int init_count ;
 #endif
 
 /* ========================================================================== */
+/* === inverse_permutation ================================================== */
+/* ========================================================================== */
+
+/* Check a permutation, and return its inverse */
+
+PRIVATE int inverse_permutation
+(
+    Int *P,     /* input, size n, P[k]=i means i is kth object in permutation */
+    Int *Pinv,  /* output, size n, Pinv[i]=k if P[k]=i */
+    Int n       /* input */
+)
+{
+    Int i, k ;
+    for (i = 0 ; i < n ; i++)
+    {
+        Pinv [i] = EMPTY ;
+    }
+    for (k = 0 ; k < n ; k++)
+    {
+        i = P [k] ;
+        if (i < 0 || i >= n || Pinv [i] != EMPTY)
+        {
+            /* invalid permutation */
+            return (FALSE) ;
+        }
+        Pinv [i] = k ;
+    }
+    return (TRUE) ;
+}
+
+
+/* ========================================================================== */
+/* === do_amd_1 ============================================================= */
+/* ========================================================================== */
+
+/* do_amd_1: Construct A+A' for a sparse matrix A and perform the AMD ordering
+ * or user_ordering.  Modified from AMD/Source/amd_1.c
+ *
+ * The n-by-n sparse matrix A can be unsymmetric.  It is stored in MATLAB-style
+ * compressed-column form, with sorted row indices in each column, and no
+ * duplicate entries.  Diagonal entries may be present, but they are ignored.
+ * Row indices of column j of A are stored in Ai [Ap [j] ... Ap [j+1]-1].
+ * Ap [0] must be zero, and nz = Ap [n] is the number of entries in A.  The
+ * size of the matrix, n, must be greater than or equal to zero.
+ *
+ * This routine must be preceded by a call to AMD_aat, which computes the
+ * number of entries in each row/column in A+A', excluding the diagonal.
+ * Len [j], on input, is the number of entries in row/column j of A+A'.  This
+ * routine constructs the matrix A+A' and then calls AMD_2 or the user_ordering.
+ * No error checking is performed (this was done in AMD_valid).
+ */
+
+PRIVATE int do_amd_1
+(
+    Int n,		/* n > 0 */
+    Int Ap [ ],	        /* input of size n+1, not modified */
+    Int Ai [ ],	        /* input of size nz = Ap [n], not modified */
+    Int P [ ],		/* size n output permutation */
+    Int Pinv [ ],	/* size n output inverse permutation */
+    Int Len [ ],	/* size n input, undefined on output */
+    Int slen,		/* slen >= sum (Len [0..n-1]) + 7n+1,
+			 * ideally slen = 1.2 * sum (Len) + 8n */
+    Int S [ ],		/* size slen workspace */
+    Int ordering_option,
+    Int print_level,
+
+    /* user-provided ordering function */
+    int (*user_ordering)    /* TRUE if OK, FALSE otherwise */
+    (
+        /* inputs, not modified on output */
+        Int,            /* nrow */
+        Int,            /* ncol */
+        Int,            /* sym: if TRUE and nrow==ncol do A+A', else do A'A */
+        Int *,          /* Ap, size ncol+1 */
+        Int *,          /* Ai, size nz */
+        /* output */
+        Int *,          /* size ncol, fill-reducing permutation */
+        /* input/output */
+        void *,         /* user_params (ignored by UMFPACK) */
+        double *        /* user_info[0..2], optional output for symmetric case.
+                           user_info[0]: max column count for L=chol(P(A+A')P')
+                           user_info[1]: nnz (L)
+                           user_info[2]: flop count for chol, if A real */
+    ),
+    void *user_params,  /* passed to user_ordering function */
+
+    Int *ordering_used,
+
+    double amd_Control [ ],	/* input array of size AMD_CONTROL */
+    double amd_Info [ ] 	/* output array of size AMD_INFO */
+)
+{
+    Int i, j, k, p, pfree, iwlen, pj, p1, p2, pj2, anz, *Iw, *Pe, *Nv, *Head,
+	*Elen, *Degree, *s, *W, *Sp, *Tp ;
+
+    /* --------------------------------------------------------------------- */
+    /* construct the matrix for AMD_2 or user_ordering */
+    /* --------------------------------------------------------------------- */
+
+    ASSERT (n > 0) ;
+#ifndef NDEBUG
+    for (p = 0 ; p < slen ; p++) S [p] = EMPTY ;
+#endif
+
+    s = S ;
+    Pe = s ;	    s += (n+1) ;    slen -= (n+1) ;
+    Nv = s ;	    s += n ;        slen -= n ;
+
+    if (user_ordering == NULL)
+    {
+        /* iwlen = slen - (3*n+1) ; */
+        Head = s ;      s += n ;    slen -= n ;
+        Elen = s ;      s += n ;    slen -= n ;
+        Degree = s ;    s += n ;    slen -= n ;
+    }
+    else
+    {
+        /* iwlen = slen - (6*n+1) ; */
+        Head = NULL ;
+        Elen = NULL ;
+        Degree = NULL ;
+    }
+
+    W = s ;	    s += n ;        slen -= n ;
+
+    iwlen = slen ;
+    Iw = s ;	    s += iwlen ;
+
+    ASSERT (AMD_valid (n, n, Ap, Ai) == AMD_OK) ;
+    anz = Ap [n] ;
+
+    /* construct the pointers for A+A' */
+    Sp = Nv ;			/* use Nv and W as workspace for Sp and Tp [ */
+    Tp = W ;
+    pfree = 0 ;
+    for (j = 0 ; j < n ; j++)
+    {
+	Pe [j] = pfree ;
+	Sp [j] = pfree ;
+	pfree += Len [j] ;
+    }
+    Pe [n] = pfree ;
+
+#ifndef NDEBUG
+    if (user_ordering == NULL)
+    {
+        /* Note that this restriction on iwlen is slightly more restrictive than
+         * what is strictly required in AMD_2.  AMD_2 can operate with no elbow
+         * room at all, but it will be very slow.  For better performance, at
+         * least size-n elbow room is enforced. */
+        ASSERT (iwlen >= pfree + n) ;
+    }
+    else
+    {
+        ASSERT (iwlen >= pfree) ;
+    }
+    for (p = 0 ; p < iwlen ; p++) Iw [p] = EMPTY ;
+#endif
+
+    for (k = 0 ; k < n ; k++)
+    {
+	AMD_DEBUG1 (("Construct row/column k= "ID" of A+A'\n", k))  ;
+	p1 = Ap [k] ;
+	p2 = Ap [k+1] ;
+
+	/* construct A+A' */
+	for (p = p1 ; p < p2 ; )
+	{
+	    /* scan the upper triangular part of A */
+	    j = Ai [p] ;
+	    ASSERT (j >= 0 && j < n) ;
+	    if (j < k)
+	    {
+		/* entry A (j,k) in the strictly upper triangular part */
+		ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ;
+		ASSERT (Sp [k] < (k == n-1 ? pfree : Pe [k+1])) ;
+		Iw [Sp [j]++] = k ;
+		Iw [Sp [k]++] = j ;
+		p++ ;
+	    }
+	    else if (j == k)
+	    {
+		/* skip the diagonal */
+		p++ ;
+		break ;
+	    }
+	    else /* j > k */
+	    {
+		/* first entry below the diagonal */
+		break ;
+	    }
+	    /* scan lower triangular part of A, in column j until reaching
+	     * row k.  Start where last scan left off. */
+	    ASSERT (Ap [j] <= Tp [j] && Tp [j] <= Ap [j+1]) ;
+	    pj2 = Ap [j+1] ;
+	    for (pj = Tp [j] ; pj < pj2 ; )
+	    {
+		i = Ai [pj] ;
+		ASSERT (i >= 0 && i < n) ;
+		if (i < k)
+		{
+		    /* A (i,j) is only in the lower part, not in upper */
+		    ASSERT (Sp [i] < (i == n-1 ? pfree : Pe [i+1])) ;
+		    ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ;
+		    Iw [Sp [i]++] = j ;
+		    Iw [Sp [j]++] = i ;
+		    pj++ ;
+		}
+		else if (i == k)
+		{
+		    /* entry A (k,j) in lower part and A (j,k) in upper */
+		    pj++ ;
+		    break ;
+		}
+		else /* i > k */
+		{
+		    /* consider this entry later, when k advances to i */
+		    break ;
+		}
+	    }
+	    Tp [j] = pj ;
+	}
+	Tp [k] = p ;
+    }
+
+    /* clean up, for remaining mismatched entries */
+    for (j = 0 ; j < n ; j++)
+    {
+	for (pj = Tp [j] ; pj < Ap [j+1] ; pj++)
+	{
+	    i = Ai [pj] ;
+	    ASSERT (i >= 0 && i < n) ;
+	    /* A (i,j) is only in the lower part, not in upper */
+	    ASSERT (Sp [i] < (i == n-1 ? pfree : Pe [i+1])) ;
+	    ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ;
+	    Iw [Sp [i]++] = j ;
+	    Iw [Sp [j]++] = i ;
+	}
+    }
+
+#ifndef NDEBUG
+    for (j = 0 ; j < n ; j++) ASSERT (Sp [j] == Pe [j+1]) ;
+#endif
+
+    /* Tp and Sp no longer needed ] */
+
+    /* --------------------------------------------------------------------- */
+    /* order the matrix */
+    /* --------------------------------------------------------------------- */
+
+    if (ordering_option == UMFPACK_ORDERING_AMD)
+    {
+
+        /* use AMD as the symmetric ordering */
+        AMD_2 (n, Pe, Iw, Len, iwlen, pfree,
+            Nv, Pinv, P, Head, Elen, Degree, W, amd_Control, amd_Info) ;
+        *ordering_used = UMFPACK_ORDERING_AMD ;
+        return (TRUE) ;
+
+    }
+    else
+    {
+
+        /* use the user-provided symmetric ordering, or umf_cholmod */
+        double user_info [3], dmax, lnz, flops ;
+        int ok ;
+        user_info [0] = EMPTY ;
+        user_info [1] = EMPTY ;
+        user_info [2] = EMPTY ;
+
+        if (ordering_option == UMFPACK_ORDERING_USER)
+        {
+            ok = (*user_ordering) (n, n, TRUE, Pe, Iw, P,
+                user_params, user_info) ;
+            *ordering_used = UMFPACK_ORDERING_USER ;
+        }
+        else
+        /* if (ordering_option == UMFPACK_ORDERING_CHOLMOD
+            || ordering_option == UMFPACK_ORDERING_GIVEN
+            || ordering_option == UMFPACK_ORDERING_NONE
+            || ordering_option == UMFPACK_ORDERING_METIS
+            || ordering_option == UMFPACK_ORDERING_BEST) */
+        {
+            Int params [3] ;
+            params [0] = ordering_option ;
+            params [1] = print_level ;
+            ok = UMF_cholmod (n, n, TRUE, Pe, Iw, P, &params, user_info) ;
+            *ordering_used = params [2] ;
+        }
+
+        if (!ok)
+        {
+            /* user_ordering or UMF_cholmod failed */
+            amd_Info [AMD_STATUS] = AMD_INVALID ;
+            return (FALSE) ;
+        }
+
+        /* get the user ordering statistics, if computed */
+        dmax  = user_info [0] ;
+        lnz   = user_info [1] ;
+        flops = user_info [2] ;
+
+        /* construct amd_Info, as if AMD was called */
+        amd_Info [AMD_STATUS] = AMD_OK ;
+        amd_Info [AMD_N] = n ;
+        amd_Info [AMD_NZ] = anz ;
+        /* amd_Info [AMD_SYMMETRY] not computed ; */
+        /* amd_Info [AMD_NZDIAG] not computed ; */
+        amd_Info [AMD_NZ_A_PLUS_AT] = pfree ;
+        amd_Info [AMD_NDENSE] = 0 ;
+        /* amd_Info [AMD_MEMORY] not computed ; */
+        amd_Info [AMD_NCMPA] = 0 ;
+        amd_Info [AMD_LNZ] = lnz ;
+        amd_Info [AMD_NDIV] = lnz ;
+        if (flops >= 0)
+        {
+            amd_Info [AMD_NMULTSUBS_LDL] = (flops - n) / 2 ;
+            amd_Info [AMD_NMULTSUBS_LU]  = (flops - n) ;
+        }
+        else
+        {
+            amd_Info [AMD_NMULTSUBS_LDL] = EMPTY ;
+            amd_Info [AMD_NMULTSUBS_LU]  = EMPTY ;
+        }
+        amd_Info [AMD_DMAX] = dmax ;
+
+        /* construct the inverse permutation */
+        return (inverse_permutation (P, Pinv, n)) ;
+    }
+}
+
+
+/* ========================================================================== */
 /* === do_amd =============================================================== */
 /* ========================================================================== */
 
-PRIVATE void do_amd
+PRIVATE int do_amd
 (
     Int n,
-    const Int Ap [ ],		/* size n+1 */
-    const Int Ai [ ],		/* size nz = Ap [n] */
+    Int Ap [ ],		        /* size n+1 */
+    Int Ai [ ],		        /* size nz = Ap [n] */
     Int Q [ ],			/* output permutation, j = Q [k] */
     Int Qinv [ ],		/* output inverse permutation, Qinv [j] = k */
     Int Sdeg [ ],		/* degree of A+A', from AMD_aat */
     Int Clen,			/* size of Ci */
-    Int Ci [ ],			/* size Ci workspace */
+    Int Ci [ ],			/* size Clen workspace */
     double amd_Control [ ],	/* AMD control parameters */
     double amd_Info [ ],	/* AMD info */
     SymbolicType *Symbolic,	/* Symbolic object */
-    double Info [ ]		/* UMFPACK info */
+    double Info [ ],		/* UMFPACK info */
+    Int ordering_option,
+    Int print_level,
+
+    /* user-provided ordering function */
+    int (*user_ordering)    /* TRUE if OK, FALSE otherwise */
+    (
+        /* inputs, not modified on output */
+        Int,            /* nrow */
+        Int,            /* ncol */
+        Int,            /* sym: if TRUE and nrow==ncol do A+A', else do A'A */
+        Int *,          /* Ap, size ncol+1 */
+        Int *,          /* Ai, size nz */
+        /* output */
+        Int *,          /* size ncol, fill-reducing permutation */
+        /* input/output */
+        void *,         /* user_params (ignored by UMFPACK) */
+        double *        /* user_info[0..2], optional output for symmetric case.
+                           user_info[0]: max column count for L=chol(P(A+A')P')
+                           user_info[1]: nnz (L)
+                           user_info[2]: flop count for chol, if A real */
+    ),
+    void *user_params,  /* passed to user_ordering function */
+    Int *ordering_used
 )
 {
+    int ok = TRUE ;
+    *ordering_used = UMFPACK_ORDERING_NONE ;
 
     if (n == 0)
     {
@@ -114,18 +470,24 @@ PRIVATE void do_amd
     }
     else
     {
-	AMD_1 (n, Ap, Ai, Q, Qinv, Sdeg, Clen, Ci, amd_Control, amd_Info) ;
-
-	/* return estimates computed from AMD on PA+PA' */
-	Symbolic->amd_dmax = amd_Info [AMD_DMAX] ;
-	Symbolic->amd_lunz = 2 * amd_Info [AMD_LNZ] + n ;
-	Info [UMFPACK_SYMMETRIC_LUNZ] = Symbolic->amd_lunz ;
-	Info [UMFPACK_SYMMETRIC_FLOPS] = DIV_FLOPS * amd_Info [AMD_NDIV] +
-	    MULTSUB_FLOPS * amd_Info [AMD_NMULTSUBS_LU] ;
-	Info [UMFPACK_SYMMETRIC_DMAX] = Symbolic->amd_dmax ;
-	Info [UMFPACK_SYMMETRIC_NDENSE] = amd_Info [AMD_NDENSE] ;
-	Info [UMFPACK_SYMBOLIC_DEFRAG] += amd_Info [AMD_NCMPA] ;
-    }
+	ok = do_amd_1 (n, Ap, Ai, Q, Qinv, Sdeg, Clen,
+            Ci, ordering_option, print_level, user_ordering, user_params,
+            ordering_used, amd_Control, amd_Info) ;
+
+        /* return estimates computed from AMD or user ordering P(A+A')P' */
+        if (ok)
+        {
+            Symbolic->amd_dmax = amd_Info [AMD_DMAX] ;
+            Symbolic->amd_lunz = 2 * amd_Info [AMD_LNZ] + n ;
+            Info [UMFPACK_SYMMETRIC_LUNZ] = Symbolic->amd_lunz ;
+            Info [UMFPACK_SYMMETRIC_FLOPS] = DIV_FLOPS * amd_Info [AMD_NDIV] +
+                MULTSUB_FLOPS * amd_Info [AMD_NMULTSUBS_LU] ;
+            Info [UMFPACK_SYMMETRIC_DMAX] = Symbolic->amd_dmax ;
+            Info [UMFPACK_SYMMETRIC_NDENSE] = amd_Info [AMD_NDENSE] ;
+            Info [UMFPACK_SYMBOLIC_DEFRAG] += amd_Info [AMD_NCMPA] ;
+        }
+    }
+    return (ok) ;
 }
 
 /* ========================================================================== */
@@ -292,10 +654,10 @@ PRIVATE void combine_ordering
 }
 
 /* ========================================================================== */
-/* === UMFPACK_qsymbolic ==================================================== */
+/* === symbolic_analysis ==================================================== */
 /* ========================================================================== */
 
-GLOBAL Int UMFPACK_qsymbolic
+PRIVATE Int symbolic_analysis
 (
     Int n_row,
     Int n_col,
@@ -305,7 +667,30 @@ GLOBAL Int UMFPACK_qsymbolic
 #ifdef COMPLEX
     const double Az [ ],
 #endif
+
+    /* user-provided ordering (may be NULL) */
     const Int Quser [ ],
+
+    /* user-provided ordering function */
+    int (*user_ordering)    /* TRUE if OK, FALSE otherwise */
+    (
+        /* inputs, not modified on output */
+        Int,            /* nrow */
+        Int,            /* ncol */
+        Int,            /* sym: if TRUE and nrow==ncol do A+A', else do A'A */
+        Int *,          /* Ap, size ncol+1 */
+        Int *,          /* Ai, size nz */
+        /* output */
+        Int *,          /* size ncol, fill-reducing permutation */
+        /* input/output */
+        void *,         /* user_params (ignored by UMFPACK) */
+        double *        /* user_info[0..2], optional output for symmetric case.
+                           user_info[0]: max column count for L=chol(P(A+A')P')
+                           user_info[1]: nnz (L)
+                           user_info[2]: flop count for chol, if A real */
+    ),
+    void *user_params,  /* passed to user_ordering function */
+
     void **SymbolicHandle,
     const double Control [UMFPACK_CONTROL],
     double User_Info [UMFPACK_INFO]
@@ -320,7 +705,7 @@ GLOBAL Int UMFPACK_qsymbolic
 	Info2 [UMFPACK_INFO], drow, dcol, dtail_usage, dlf, duf, dmax_usage,
 	dhead_usage, dlnz, dunz, dmaxfrsize, dClen, dClen_analyze, sym,
 	amd_Info [AMD_INFO], dClen_amd, dr, dc, cr, cc, cp,
-	amd_Control [AMD_CONTROL], stats [2], tol ;
+	amd_Control [AMD_CONTROL], stats [2] ;
     double *Info ;
     Int i, nz, j, newj, status, f1, f2, maxnrows, maxncols, nfr, col,
 	nchains, maxrows, maxcols, p, nb, nn, *Chain_start, *Chain_maxrows,
@@ -333,8 +718,10 @@ GLOBAL Int UMFPACK_qsymbolic
 	*Wq, *Sdeg, *Fr_npivcol, nempty, *Fr_nrows, *Fr_ncols, *Fr_parent,
 	*Fr_cols, nempty_row, nempty_col, user_auto_strategy, fail, max_rdeg,
 	head_usage, tail_usage, lnz, unz, esize, *Esize, rdeg, *Cdeg, *Rdeg,
-	*Cperm1, *Rperm1, n1, oldcol, newcol, n1c, n1r, *Rperm_2by2, oldrow,
-	dense_row_threshold, tlen, aggressive, scale, *Rp, *Ri ;
+	*Cperm1, *Rperm1, n1, oldcol, newcol, n1c, n1r, oldrow,
+	dense_row_threshold, tlen, aggressive, *Rp, *Ri ;
+    Int do_singletons, ordering_option, print_level ;
+    int ok ;
 
     SymbolicType *Symbolic ;
     SWType SWspace, *SW ;
@@ -361,15 +748,37 @@ GLOBAL Int UMFPACK_qsymbolic
     dcol = GET_CONTROL (UMFPACK_DENSE_COL, UMFPACK_DEFAULT_DENSE_COL) ;
     nb = GET_CONTROL (UMFPACK_BLOCK_SIZE, UMFPACK_DEFAULT_BLOCK_SIZE) ;
     strategy = GET_CONTROL (UMFPACK_STRATEGY, UMFPACK_DEFAULT_STRATEGY) ;
-    tol = GET_CONTROL (UMFPACK_2BY2_TOLERANCE, UMFPACK_DEFAULT_2BY2_TOLERANCE) ;
-    scale = GET_CONTROL (UMFPACK_SCALE, UMFPACK_DEFAULT_SCALE) ;
     force_fixQ = GET_CONTROL (UMFPACK_FIXQ, UMFPACK_DEFAULT_FIXQ) ;
+    do_singletons = GET_CONTROL (UMFPACK_SINGLETONS,UMFPACK_DEFAULT_SINGLETONS);
     AMD_defaults (amd_Control) ;
     amd_Control [AMD_DENSE] =
 	GET_CONTROL (UMFPACK_AMD_DENSE, UMFPACK_DEFAULT_AMD_DENSE) ;
     aggressive =
 	(GET_CONTROL (UMFPACK_AGGRESSIVE, UMFPACK_DEFAULT_AGGRESSIVE) != 0) ;
     amd_Control [AMD_AGGRESSIVE] = aggressive ;
+    print_level = GET_CONTROL (UMFPACK_PRL, UMFPACK_DEFAULT_PRL) ;
+
+    /* get the ordering_option */
+    ordering_option = GET_CONTROL (UMFPACK_ORDERING, UMFPACK_DEFAULT_ORDERING) ;
+    if (ordering_option < 0 || ordering_option > UMFPACK_ORDERING_USER)
+    {
+        ordering_option = UMFPACK_DEFAULT_ORDERING ;
+    }
+    if (Quser == (Int *) NULL)
+    {
+        /* Quser is NULL, so ordering cannot be "given" */
+        /* user_ordering function not provided, so ordering cannot be "user" */
+        if (ordering_option == UMFPACK_ORDERING_GIVEN ||
+           (ordering_option == UMFPACK_ORDERING_USER && !user_ordering))
+        {
+            ordering_option = UMFPACK_ORDERING_NONE ;
+        }
+    }
+    else
+    {
+        /* if Quser is not NULL, then always use it */
+        ordering_option = UMFPACK_ORDERING_GIVEN ;
+    }
 
     nb = MAX (2, nb) ;
     nb = MIN (nb, MAXNB) ;
@@ -378,12 +787,6 @@ GLOBAL Int UMFPACK_qsymbolic
     DEBUG0 (("UMFPACK_qsymbolic: nb = "ID" aggressive = "ID"\n", nb,
 	aggressive)) ;
 
-    tol = MAX (0.0, MIN (tol,  1.0)) ;
-    if (scale != UMFPACK_SCALE_NONE && scale != UMFPACK_SCALE_MAX)
-    {
-	scale = UMFPACK_DEFAULT_SCALE ;
-    }
-
     if (User_Info != (double *) NULL)
     {
 	/* return Info in user's array */
@@ -408,10 +811,16 @@ GLOBAL Int UMFPACK_qsymbolic
     Info [UMFPACK_NCOL] = n_col ;
     Info [UMFPACK_SIZE_OF_UNIT] = (double) (sizeof (Unit)) ;
     Info [UMFPACK_SIZE_OF_INT] = (double) (sizeof (int)) ;
-    Info [UMFPACK_SIZE_OF_LONG] = (double) (sizeof (UF_long)) ;
+    Info [UMFPACK_SIZE_OF_LONG] = (double) (sizeof (SuiteSparse_long)) ;
     Info [UMFPACK_SIZE_OF_POINTER] = (double) (sizeof (void *)) ;
     Info [UMFPACK_SIZE_OF_ENTRY] = (double) (sizeof (Entry)) ;
     Info [UMFPACK_SYMBOLIC_DEFRAG] = 0 ;
+    Info [UMFPACK_ORDERING_USED] = EMPTY ;
+
+    if (SymbolicHandle != NULL)
+    {
+        *SymbolicHandle = (void *) NULL ;
+    }
 
     if (!Ai || !Ap || !SymbolicHandle)
     {
@@ -419,8 +828,6 @@ GLOBAL Int UMFPACK_qsymbolic
 	return (UMFPACK_ERROR_argument_missing) ;
     }
 
-    *SymbolicHandle = (void *) NULL ;
-
     if (n_row <= 0 || n_col <= 0)	/* n_row, n_col must be > 0 */
     {
 	Info [UMFPACK_STATUS] = UMFPACK_ERROR_n_nonpositive ;
@@ -449,7 +856,8 @@ GLOBAL Int UMFPACK_qsymbolic
     }
 
     if (strategy < UMFPACK_STRATEGY_AUTO
-     || strategy > UMFPACK_STRATEGY_SYMMETRIC)
+     || strategy > UMFPACK_STRATEGY_SYMMETRIC
+     || strategy == UMFPACK_STRATEGY_OBSOLETE)
     {
 	/* unrecognized strategy */
 	strategy = UMFPACK_STRATEGY_AUTO ;
@@ -459,10 +867,6 @@ GLOBAL Int UMFPACK_qsymbolic
     {
 	/* when the user provides Q, only symmetric and unsymmetric strategies
 	 * are available */
-	if (strategy == UMFPACK_STRATEGY_2BY2)
-	{
-	    strategy = UMFPACK_STRATEGY_SYMMETRIC ;
-	}
 	if (strategy != UMFPACK_STRATEGY_SYMMETRIC)
 	{
 	    strategy = UMFPACK_STRATEGY_UNSYMMETRIC ;
@@ -493,9 +897,8 @@ GLOBAL Int UMFPACK_qsymbolic
     dClen = MAX (dClen, dClen_analyze) ;
 
     /* The space for AMD can be larger than what's required for colamd: */
-    dClen_amd = 2.4 * (double) nz + 8 * (double) n_inner ;
-    /* additional space for the 2-by-2 strategy */
-    dClen_amd += (double) MAX (nn, nz) ;
+    dClen_amd = 2.4 * (double) nz + 8 * (double) n_inner + 1 ;
+
     dClen = MAX (dClen, dClen_amd) ;
 
     /* worst case total memory usage for UMFPACK_symbolic (revised below) */
@@ -508,7 +911,8 @@ GLOBAL Int UMFPACK_qsymbolic
 	/* :: int overflow, Clen too large :: */
 	/* Problem is too large for array indexing (Ci [i]) with an Int i. */
 	/* Cannot even analyze the problem to determine upper bounds on */
-	/* memory usage. Need to use the UF_long version, umfpack_*l_*. */
+	/* memory usage. Need to use the SuiteSparse_long version, */
+        /* umfpack_*l_*. */
 	DEBUGm4 (("out of memory: symbolic int overflow\n")) ;
 	Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
 	return (UMFPACK_ERROR_out_of_memory) ;
@@ -518,8 +922,7 @@ GLOBAL Int UMFPACK_qsymbolic
     Clen = UMF_COLAMD_RECOMMENDED (nz, n_row, n_col) ;
     Clen_analyze = UMF_ANALYZE_CLEN (nz, n_row, n_col, nn) ;
     Clen = MAX (Clen, Clen_analyze) ;
-    Clen_amd = 2.4 * nz + 8 * n_inner ;
-    Clen_amd += MAX (nn, nz) ;			/* for Ri, in UMF_2by2 */
+    Clen_amd = 2.4 * nz + 8 * n_inner + 1 ;
     Clen = MAX (Clen, Clen_amd) ;
 
     /* ---------------------------------------------------------------------- */
@@ -556,6 +959,9 @@ GLOBAL Int UMFPACK_qsymbolic
     Symbolic->Front_leftmostdesc = (Int *) NULL ;
     Symbolic->Esize = (Int *) NULL ;
     Symbolic->esize = 0 ;
+    Symbolic->ordering = EMPTY ;    /* not yet determined */
+    Symbolic->amd_lunz = EMPTY ;
+    Symbolic->max_nchains = EMPTY ;
 
     Symbolic->Cperm_init   = (Int *) UMF_malloc (n_col+1, sizeof (Int)) ;
     Symbolic->Rperm_init   = (Int *) UMF_malloc (n_row+1, sizeof (Int)) ;
@@ -580,6 +986,8 @@ GLOBAL Int UMFPACK_qsymbolic
     Symbolic->n_col = n_col ;
     Symbolic->nz = nz ;
     Symbolic->nb = nb ;
+    Cdeg [n_col] = EMPTY ;      /* unused space */
+    Rdeg [n_row] = EMPTY ;
 
     /* ---------------------------------------------------------------------- */
     /* check user's input permutation */
@@ -640,9 +1048,6 @@ GLOBAL Int UMFPACK_qsymbolic
     SW->Rperm1	      = (Int *) UMF_malloc (n_row, sizeof (Int)) ;
     SW->InFront	      = (Int *) UMF_malloc (n_row, sizeof (Int)) ;
 
-    /* this is allocated later, and free'd after Cperm1 but before Ci */
-    SW->Rperm_2by2    = (Int *) NULL ;   /* will be nn Int's */
-
     /* this is allocated last, and free'd first */
     SW->Rs	      = (double *) NULL ;	/* will be n_row double's */
 
@@ -657,7 +1062,6 @@ GLOBAL Int UMFPACK_qsymbolic
     Si	       = SW->Si ;
     Sp	       = SW->Sp ;
     InvRperm1  = SW->InvRperm1 ;
-    Rperm_2by2 = (Int *) NULL ;
     InFront    = SW->InFront ;
 
     if (!Ci || !Fr_npivcol || !Fr_nrows || !Fr_ncols || !Fr_parent || !Fr_cols
@@ -682,6 +1086,7 @@ GLOBAL Int UMFPACK_qsymbolic
     ASSERT (Clen >= nz + n_row + MAX (n_row, n_col)) ;
 
     status = UMF_singletons (n_row, n_col, Ap, Ai, Quser, strategy,
+        do_singletons, /* if false, then do not look for singletons */
 	Cdeg, Cperm1, Rdeg,
 	Rperm1, InvRperm1, &n1, &n1c, &n1r, &nempty_col, &nempty_row, &is_sym,
 	&max_rdeg, /* workspace: */ Rperm_init, Ci, Ci + nz, Ci + nz + n_row) ;
@@ -751,9 +1156,8 @@ GLOBAL Int UMFPACK_qsymbolic
 
     if (strategy != UMFPACK_STRATEGY_UNSYMMETRIC)
     {
-	/* This also determines the degree of each node in S+S' (Sdeg), which
-	 * is needed by the 2-by-2 strategy, the symmetry of S, and the number
-	 * of nonzeros on the diagonal of S. */
+	/* This also determines the degree of each node in S+S' (Sdeg), the
+         * symmetry of S, and the number of nonzeros on the diagonal of S. */
 	ASSERT (n_row == n_col) ;
 	ASSERT (nempty_row == nempty_col) ;
 
@@ -827,259 +1231,33 @@ GLOBAL Int UMFPACK_qsymbolic
 
     if (strategy == UMFPACK_STRATEGY_AUTO)
     {
-	if (sym < 0.10)
-	{
-	    /* highly unsymmetric: use the unsymmetric strategy */
-	    strategy = UMFPACK_STRATEGY_UNSYMMETRIC ;
-	    DEBUGm4 (("Strategy: select unsymmetric\n")) ;
-	}
-	else if (sym >= 0.7 && nzdiag == n2)
-	{
-	    /* mostly symmetric, zero-free diagonal: use symmetric strategy */
+        if (sym >= 0.5 && nzdiag >= 0.9 * n2)
+        {
+            /* pattern is mostly symmetric (50% or more) and the diagonal is
+             * mostly zero-free (90% or more).  Use symmetric strategy. */
 	    strategy = UMFPACK_STRATEGY_SYMMETRIC ;
-	    DEBUGm4 (("Strategy: select symmetric\n")) ;
-	}
-	else
-	{
-	    /* Evaluate the symmetric 2-by-2 strategy, and select it, or
-	     * the unsymmetric strategy if the 2-by-2 strategy doesn't look
-	     * promising. */
-	    strategy = UMFPACK_STRATEGY_2BY2 ;
-	    DEBUGm4 (("Strategy: try 2-by-2\n")) ;
-	}
-    }
-
-    /* ---------------------------------------------------------------------- */
-    /* try the 2-by-2 strategy */
-    /* ---------------------------------------------------------------------- */
-
-    /* (3) If the 2-by-2 strategy is attempted, additional workspace of size
-     * nn integers and nn double's is allocated, where nn = n_row = n_col.
-     * The real workspace is immediately free'd.  The integer workspace of
-     * size nn remains until the end of umfpack_qsymbolic. */
-
-    /* If the resulting matrix S (Rperm_2by2, :) is too unsymmetric, then the
-     * unsymmetric strategy will be used instead. */
-
-    if (strategy == UMFPACK_STRATEGY_2BY2)
-    {
-	double sym2 ;
-	Int *Blen, *W, nz_papat, nzd2, nweak, unmatched, Clen3 ;
-
-	/* ------------------------------------------------------------------ */
-	/* get workspace for UMF_2by2 */
-	/* ------------------------------------------------------------------ */
-
-	ASSERT (n_row == n_col && nn == n_row) ;
-
-#ifndef NDEBUG
-	for (k = 0 ; k < n2 ; k++)
-	{
-	    ASSERT (Sdeg [k] >= 0 && Sdeg [k] < n2) ;
-	}
-#endif
-
-	/* allocate Rperm_2by2 */
-	SW->Rperm_2by2 = (Int *) UMF_malloc (nn, sizeof (Int)) ;
-	Rperm_2by2 = SW->Rperm_2by2 ;
-	if (Rperm_2by2 == (Int *) NULL)
-	{
-	    DEBUGm4 (("out of memory: Rperm_2by2\n")) ;
-	    Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-	    error (&Symbolic, SW) ;
-	    return (UMFPACK_ERROR_out_of_memory) ;
-	}
-
-	/* allocate Ri from the tail end of Ci [ */
-	Clen3 = Clen - (MAX (nn, nz) + 1) ;
-	Ri = Ci + Clen3 ;
-	ASSERT (Clen3 >= nz) ;	/* space required for UMF_2by2 */
-
-	/* use Fr_* as workspace for Rp, Blen, and W [ */
-	Rp = Fr_npivcol ;
-	Blen = Fr_ncols ;
-	W = Fr_cols ;
-
-	if (scale != UMFPACK_SCALE_NONE)
-	{
-	    SW->Rs = (double *) UMF_malloc (nn, sizeof (double)) ;
-	    if (SW->Rs == (double *) NULL)
-	    {
-		DEBUGm4 (("out of memory: scale factors for 2-by-2\n")) ;
-		Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-		error (&Symbolic, SW) ;
-		return (UMFPACK_ERROR_out_of_memory) ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* find the 2-by-2 row permutation */
-	/* ------------------------------------------------------------------ */
-
-	/* find a row permutation Rperm_2by2 such that S (Rperm_2by2, :)
-	 * has a healthy diagonal */
-
-	UMF_2by2 (nn, Ap, Ai, Ax,
-#ifdef COMPLEX
-		Az,
-#endif
-		tol, scale, Cperm1,
-#ifndef NDEBUG
-		Rperm1,
-#endif
-		InvRperm1, n1, nempty, Sdeg, Rperm_2by2, &nweak, &unmatched,
-		Ri, Rp, SW->Rs, Blen, W, Ci, Wq) ;
-	DEBUGm3 (("2by2: nweak "ID" unmatched "ID"\n", nweak, unmatched)) ;
-	Info [UMFPACK_2BY2_NWEAK] = nweak ;
-	Info [UMFPACK_2BY2_UNMATCHED] = unmatched ;
-
-	SW->Rs = (double *) UMF_free ((void *) SW->Rs) ;
-
-	/* R = S (Rperm_2by2,:)' */
-	(void) UMF_transpose (n2, n2, Sp, Si, (double *) NULL, Rperm_2by2,
-	    (Int *) NULL, 0, Rp, Ri, (double *) NULL, W, FALSE
-#ifdef COMPLEX
-	    , (double *) NULL, (double *) NULL, FALSE
-#endif
-	    ) ;
-	ASSERT (AMD_valid (n2, n2, Rp, Ri) == AMD_OK) ;
-
-	/* contents of Si and Sp no longer needed, but the space is
-	 * still needed */
-
-	/* ------------------------------------------------------------------ */
-	/* find symmetry of S (Rperm_2by2, :)', and prepare to order with AMD */
-	/* ------------------------------------------------------------------ */
-
-	for (i = 0 ; i < AMD_INFO ; i++)
-	{
-	    amd_Info [i] = EMPTY ;
-	}
-	nz_papat = AMD_aat (n2, Rp, Ri, Sdeg, Wq, amd_Info) ;
-	sym2 = amd_Info [AMD_SYMMETRY] ;
-	nzd2 = amd_Info [AMD_NZDIAG] ;
-
-	Info [UMFPACK_2BY2_PATTERN_SYMMETRY] = sym2 ;
-	Info [UMFPACK_2BY2_NZ_PA_PLUS_PAT] = nz_papat ;
-	Info [UMFPACK_2BY2_NZDIAG] = nzd2 ;
-
-	DEBUG0 (("2by2: sym2 %g nzd2 "ID" n2 "ID"\n", sym2, nzd2, n2)) ;
-
-	/* ------------------------------------------------------------------ */
-	/* evaluate the 2-by-2 results */
-	/* ------------------------------------------------------------------ */
-
-	if (user_auto_strategy)
-	{
-	    if ((sym2 > 1.1 * sym) && (nzd2 > 0.9 * n2))
-	    {
-		/* 2-by-2 made it much more symmetric */
-		DEBUGm4 (("eval Strategy 2by2: much more symmetric:  2by2\n")) ;
-		strategy = UMFPACK_STRATEGY_2BY2 ;
-	    }
-	    else if (sym2 < 0.7 * sym)
-	    {
-		/* 2-by-2 made it much more unsymmetric */
-		DEBUGm4 (("eval Strategy 2by2: much more UNsymmetric:unsym\n"));
-		strategy = UMFPACK_STRATEGY_UNSYMMETRIC ;
-	    }
-	    else if (sym2 < 0.25)
-	    {
-		DEBUGm4 (("eval Strategy 2by2: is UNsymmetric: unsym\n"));
-		strategy = UMFPACK_STRATEGY_UNSYMMETRIC ;
-	    }
-	    else if (sym2 >= 0.51)
-	    {
-		DEBUGm4 (("eval Strategy 2by2: sym2 >= 0.51: 2by2\n")) ;
-		strategy = UMFPACK_STRATEGY_2BY2 ;
-	    }
-	    else if (sym2 >= 0.999 * sym)
-	    {
-		/* 2-by-2 improved symmetry, or made it only slightly worse */
-		DEBUGm4 (("eval Strategy 2by2: sym2 >= 0.999 sym: 2by2\n")) ;
-		strategy = UMFPACK_STRATEGY_2BY2 ;
-	    }
-	    else
-	    {
-		/* can't decide what to do, so pick the unsymmetric strategy */
-		DEBUGm4 (("eval Strategy 2by2: punt: unsym\n"));
-		strategy = UMFPACK_STRATEGY_UNSYMMETRIC ;
-	    }
-	}
-
-	/* ------------------------------------------------------------------ */
-	/* if the 2-by-2 strategy is selected: */
-	/* ------------------------------------------------------------------ */
-
-	if (strategy == UMFPACK_STRATEGY_2BY2)
-	{
-	    if (Quser == (Int *) NULL)
-	    {
-		/* 2-by-2 strategy is successful */
-		/* compute amd (S) */
-		Int *Qinv = Fr_npivcol ;
-		ASSERT (Clen3 >= (nz_papat + nz_papat/5 + nn) + 7*nn) ;
-		do_amd (n2, Rp, Ri, Wq, Qinv, Sdeg, Clen3, Ci,
-		    amd_Control, amd_Info, Symbolic, Info) ;
-		/* combine the singleton ordering and the AMD ordering */
-		combine_ordering (n1, nempty, nn, Cperm_init, Cperm1, Qinv) ;
-	    }
-	    /* fix Rperm_2by2 to reflect A, not S */
-	    for (k = 0 ; k < n1 ; k++)
-	    {
-		oldcol = Cperm1 [k] ;
-		i = k ;
-		oldrow = Rperm1 [k] ;
-		W [oldcol] = oldrow ;
-	    }
-	    for (k = n1 ; k < nn - nempty ; k++)
-	    {
-		oldcol = Cperm1 [k] ;
-		i = Rperm_2by2 [k - n1] + n1 ;
-		oldrow = Rperm1 [i] ;
-		W [oldcol] = oldrow ;
-	    }
-	    for (k = nn - nempty ; k < nn ; k++)
-	    {
-		oldcol = Cperm1 [k] ;
-		i = k ;
-		oldrow = Rperm1 [k] ;
-		W [oldcol] = oldrow ;
-	    }
-	    for (k = 0 ; k < nn ; k++)
-	    {
-		Rperm_2by2 [k] = W [k] ;
-	    }
-
-	    /* Now, the "diagonal" entry in oldcol (where oldcol is the user's
-	     * name for a column, is the entry in row oldrow (where oldrow is
-	     * the user's name for a row, and oldrow = Rperm_2by2 [oldcol] */
-	}
-
-	/* Fr_* no longer needed for Rp, Blen, W ] */
+	    DEBUG0 (("Strategy: select symmetric\n")) ;
+        }
+        else
+        {
+            /* otherwise use unsymmetric strategy */
+	    strategy = UMFPACK_STRATEGY_UNSYMMETRIC ;
+	    DEBUG0 (("Strategy: select unsymmetric\n")) ;
+        }
     }
 
     /* ---------------------------------------------------------------------- */
     /* finalize the strategy, including fixQ and prefer_diagonal */
     /* ---------------------------------------------------------------------- */
 
+    DEBUG0 (("strategy is now "ID"\n", strategy)) ;
+
     if (strategy == UMFPACK_STRATEGY_SYMMETRIC)
     {
 	/* use given Quser or AMD (A+A'), fix Q during factorization,
 	 * prefer diagonal */
 	DEBUG0 (("\nStrategy: symmetric\n")) ;
 	ASSERT (n_row == n_col) ;
-	Symbolic->ordering = UMFPACK_ORDERING_AMD ;
-	fixQ = TRUE ;
-	prefer_diagonal = TRUE ;
-    }
-    else if (strategy == UMFPACK_STRATEGY_2BY2)
-    {
-	/* use Q = given Quser or Q = AMD (PA+PA'), fix Q during factorization,
-	 * prefer diagonal, and factorize PAQ, where P is found by UMF_2by2. */
-	DEBUG0 (("\nStrategy: symmetric 2-by-2\n")) ;
-	ASSERT (n_row == n_col) ;
-	Symbolic->ordering = UMFPACK_ORDERING_AMD ;
 	fixQ = TRUE ;
 	prefer_diagonal = TRUE ;
     }
@@ -1089,16 +1267,10 @@ GLOBAL Int UMFPACK_qsymbolic
 	 * no diagonal preference */
 	ASSERT (strategy == UMFPACK_STRATEGY_UNSYMMETRIC) ;
 	DEBUG0 (("\nStrategy: unsymmetric\n")) ;
-	Symbolic->ordering = UMFPACK_ORDERING_COLAMD ;
 	fixQ = FALSE ;
 	prefer_diagonal = FALSE ;
     }
 
-    if (Quser != (Int *) NULL)
-    {
-	Symbolic->ordering = UMFPACK_ORDERING_GIVEN ;
-    }
-
     if (force_fixQ > 0)
     {
 	fixQ = TRUE ;
@@ -1110,7 +1282,7 @@ GLOBAL Int UMFPACK_qsymbolic
 	DEBUG0 (("Force fixQ false\n")) ;
     }
 
-    DEBUG0 (("Strategy: ordering:   "ID"\n", Symbolic->ordering)) ;
+    DEBUG0 (("Strategy: ordering:   "ID"\n", ordering_option)) ;
     DEBUG0 (("Strategy: fixQ:       "ID"\n", fixQ)) ;
     DEBUG0 (("Strategy: prefer diag "ID"\n", prefer_diagonal)) ;
 
@@ -1120,7 +1292,6 @@ GLOBAL Int UMFPACK_qsymbolic
     Symbolic->prefer_diagonal = prefer_diagonal ;
 
     Info [UMFPACK_STRATEGY_USED] = strategy ;
-    Info [UMFPACK_ORDERING_USED] = Symbolic->ordering ;
     Info [UMFPACK_QFIXED] = fixQ ;
     Info [UMFPACK_DIAG_PREFERRED] = prefer_diagonal ;
 
@@ -1131,12 +1302,24 @@ GLOBAL Int UMFPACK_qsymbolic
     if (strategy == UMFPACK_STRATEGY_SYMMETRIC && Quser == (Int *) NULL)
     {
 	/* symmetric strategy for a matrix with mostly symmetric pattern */
+        Int ordering_used ;
 	Int *Qinv = Fr_npivcol ;
 	ASSERT (n_row == n_col && nn == n_row) ;
-	ASSERT (Clen >= (nzaat + nzaat/5 + nn) + 7*nn) ;
-	do_amd (n2, Sp, Si, Wq, Qinv, Sdeg, Clen, Ci,
-		amd_Control, amd_Info, Symbolic, Info) ;
+	ASSERT (Clen >= (nzaat + nzaat/5 + nn) + 7*nn + 1) ;
+        ok = do_amd (n2, Sp, Si, Wq, Qinv, Sdeg, Clen, Ci,
+                amd_Control, amd_Info, Symbolic, Info,
+                ordering_option, print_level, user_ordering, user_params,
+                &ordering_used) ;
+        if (!ok)
+        {
+            DEBUGm4 (("symmetric ordering failed\n")) ;
+            status = UMFPACK_ERROR_ordering_failed ;
+            Info [UMFPACK_STATUS] = status ;
+            error (&Symbolic, SW) ;
+            return (status) ;
+        }
 	/* combine the singleton ordering and the AMD ordering */
+        Symbolic->ordering = ordering_used ;
 	combine_ordering (n1, nempty, nn, Cperm_init, Cperm1, Qinv) ;
     }
     /* Sdeg no longer needed ] */
@@ -1154,14 +1337,16 @@ GLOBAL Int UMFPACK_qsymbolic
 	{
 	    Cperm_init [k] = Cperm1 [k] ;
 	}
+        Symbolic->ordering = UMFPACK_ORDERING_GIVEN ;
     }
 
     /* ---------------------------------------------------------------------- */
-    /* use COLAMD to order the matrix */
+    /* use COLAMD or user_ordering to order the matrix */
     /* ---------------------------------------------------------------------- */
 
     if (strategy == UMFPACK_STRATEGY_UNSYMMETRIC && Quser == (Int *) NULL)
     {
+        Int nrow2, ncol2 ;
 
 	/* ------------------------------------------------------------------ */
 	/* copy the matrix into colamd workspace (colamd destroys its input) */
@@ -1182,48 +1367,129 @@ GLOBAL Int UMFPACK_qsymbolic
 #endif
 	    ) ;
 
-	/* ------------------------------------------------------------------ */
-	/* set UMF_colamd defaults */
-	/* ------------------------------------------------------------------ */
-
-	UMF_colamd_set_defaults (knobs) ;
-	knobs [COLAMD_DENSE_ROW] = drow ;
-	knobs [COLAMD_DENSE_COL] = dcol ;
-	knobs [COLAMD_AGGRESSIVE] = aggressive ;
-
-	/* ------------------------------------------------------------------ */
-	/* check input matrix and find the initial column pre-ordering */
-	/* ------------------------------------------------------------------ */
-
-	/* NOTE: umf_colamd is not given any original empty rows or columns.
-	 * Those have already been removed via prune_singletons, above.  The
-	 * umf_colamd routine has been modified to assume that all rows and
-	 * columns have at least one entry in them.  It will break if it is
-	 * given empty rows or columns (an assertion is triggered when running
-	 * in debug mode. */
-
-	(void) UMF_colamd (
-		n_row - n1 - nempty_row,
-		n_col - n1 - nempty_col,
-		Clen, Ci, Cperm_init, knobs, colamd_stats,
-		Fr_npivcol, Fr_nrows, Fr_ncols, Fr_parent, Fr_cols, &nfr,
-		InFront) ;
-	ASSERT (colamd_stats [COLAMD_EMPTY_ROW] == 0) ;
-	ASSERT (colamd_stats [COLAMD_EMPTY_COL] == 0) ;
-
-	/* # of dense rows will be recomputed below */
-	Info [UMFPACK_NDENSE_ROW]  = colamd_stats [COLAMD_DENSE_ROW] ;
-	Info [UMFPACK_NDENSE_COL]  = colamd_stats [COLAMD_DENSE_COL] ;
-	Info [UMFPACK_SYMBOLIC_DEFRAG] = colamd_stats [COLAMD_DEFRAG_COUNT] ;
-
-	/* re-analyze if any "dense" rows or cols ignored by UMF_colamd */
-	do_UMF_analyze =
-	    colamd_stats [COLAMD_DENSE_ROW] > 0 ||
-	    colamd_stats [COLAMD_DENSE_COL] > 0 ;
-
-	/* Combine the singleton and colamd ordering into Cperm_init */
-	/* Note that colamd returns its inverse permutation in Ci */
-	combine_ordering (n1, nempty_col, n_col, Cperm_init, Cperm1, Ci) ;
+        /* size of pruned matrix */
+        nrow2 = n_row - n1 - nempty_row ;
+        ncol2 = n_col - n1 - nempty_col ;
+
+        if ((ordering_option == UMFPACK_ORDERING_USER
+            || ordering_option == UMFPACK_ORDERING_NONE
+            || ordering_option == UMFPACK_ORDERING_METIS
+            || ordering_option == UMFPACK_ORDERING_CHOLMOD
+            || ordering_option == UMFPACK_ORDERING_BEST)
+            && nrow2 > 0 && ncol2 > 0)
+        {
+
+            /* -------------------------------------------------------------- */
+            /* use the user-provided column ordering */
+            /* -------------------------------------------------------------- */
+
+            double user_info [3] ;    /* not needed */
+            Int *Qinv = Fr_npivcol ;  /* use Fr_npivcol as workspace for Qinv */
+            Int *QQ = Fr_nrows ;      /* use Fr_nrows as workspace for QQ */
+
+            /* analyze the resulting ordering for UMFPACK */
+            do_UMF_analyze = TRUE ;
+
+            if (ordering_option == UMFPACK_ORDERING_USER)
+            {
+                ok = (*user_ordering) (
+                    /* inputs */
+                    nrow2,
+                    ncol2,
+                    FALSE,
+                    Cperm_init, /* column pointers, Cp [0 ... ncol] */
+                    Ci, /* row indices */
+                    /* outputs, contents not defined on input */
+                    QQ, /* size ncol, QQ [k] = j if col j is kth col of A*Q */
+                    /* parameters and info for user ordering */
+                    user_params,
+                    user_info) ;
+                Symbolic->ordering = UMFPACK_ORDERING_USER ;
+            }
+            else
+            {
+                Int params [3] ;
+                params [0] = ordering_option ;
+                params [1] = print_level ;
+                ok = UMF_cholmod (
+                    /* inputs */
+                    nrow2,
+                    ncol2,
+                    FALSE,
+                    Cperm_init, /* column pointers, Cp [0 ... ncol] */
+                    Ci, /* row indices */
+                    /* outputs, contents not defined on input */
+                    QQ, /* size ncol, QQ [k] = j if col j is kth col of A*Q */
+                    /* parameters and info for user ordering */
+                    &params,
+                    user_info) ;
+                Symbolic->ordering = params [2] ;
+            }
+
+            /* compute Qinv from QQ */
+            if (!ok || !inverse_permutation (QQ, Qinv, ncol2))
+            {
+                /* user ordering failed */
+                DEBUGm4 (("user ordering failed\n")) ;
+                status = UMFPACK_ERROR_ordering_failed ;
+                Info [UMFPACK_STATUS] = status ;
+                error (&Symbolic, SW) ;
+                return (status) ;
+            }
+
+            /* Combine the singleton and colamd ordering into Cperm_init */
+            /* Note that the user_unsymmetric_ordering function returns its
+             * inverse permutation in Qinv */
+            combine_ordering (n1, nempty_col, n_col, Cperm_init, Cperm1, Qinv) ;
+
+        }
+        else
+        {
+
+            /* -------------------------------------------------------------- */
+            /* set UMF_colamd defaults */
+            /* -------------------------------------------------------------- */
+
+            UMF_colamd_set_defaults (knobs) ;
+            knobs [COLAMD_DENSE_ROW] = drow ;
+            knobs [COLAMD_DENSE_COL] = dcol ;
+            knobs [COLAMD_AGGRESSIVE] = aggressive ;
+
+            /* -------------------------------------------------------------- */
+            /* check input matrix and find the initial column pre-ordering */
+            /* -------------------------------------------------------------- */
+
+            /* NOTE: umf_colamd is not given any original empty rows or
+             * columns.  Those have already been removed via prune_singletons,
+             * above.  The umf_colamd routine has been modified to assume that
+             * all rows and columns have at least one entry in them.  It will
+             * break if it is given empty rows or columns (an assertion is
+             * triggered when running in debug mode. */
+
+            (void) UMF_colamd (
+                    n_row - n1 - nempty_row,
+                    n_col - n1 - nempty_col,
+                    Clen, Ci, Cperm_init, knobs, colamd_stats,
+                    Fr_npivcol, Fr_nrows, Fr_ncols, Fr_parent, Fr_cols, &nfr,
+                    InFront) ;
+            ASSERT (colamd_stats [COLAMD_EMPTY_ROW] == 0) ;
+            ASSERT (colamd_stats [COLAMD_EMPTY_COL] == 0) ;
+            Symbolic->ordering = UMFPACK_ORDERING_AMD ;
+
+            /* # of dense rows will be recomputed below */
+            Info [UMFPACK_NDENSE_ROW]  = colamd_stats [COLAMD_DENSE_ROW] ;
+            Info [UMFPACK_NDENSE_COL]  = colamd_stats [COLAMD_DENSE_COL] ;
+            Info [UMFPACK_SYMBOLIC_DEFRAG] = colamd_stats [COLAMD_DEFRAG_COUNT];
+
+            /* re-analyze if any "dense" rows or cols ignored by UMF_colamd */
+            do_UMF_analyze =
+                colamd_stats [COLAMD_DENSE_ROW] > 0 ||
+                colamd_stats [COLAMD_DENSE_COL] > 0 ;
+
+            /* Combine the singleton and colamd ordering into Cperm_init */
+            /* Note that colamd returns its inverse permutation in Ci */
+            combine_ordering (n1, nempty_col, n_col, Cperm_init, Cperm1, Ci) ;
+        }
 
 	/* contents of Ci no longer needed */
 
@@ -1250,6 +1516,10 @@ GLOBAL Int UMFPACK_qsymbolic
 
     }
 
+    /* ordering has been finalized */
+    Info [UMFPACK_ORDERING_USED] = Symbolic->ordering ;
+    DEBUG0 (("Final ordering used: "ID"\n", Symbolic->ordering)) ;
+
     Cperm_init [n_col] = EMPTY ;	/* unused in Cperm_init */
 
     /* ---------------------------------------------------------------------- */
@@ -1280,7 +1550,7 @@ GLOBAL Int UMFPACK_qsymbolic
     if (do_UMF_analyze)
     {
 
-	Int *W, *Bp, *Bi, *Cperm2, ok, *P, Clen2, bsize, Clen0 ;
+	Int *W, *Bp, *Bi, *Cperm2, *P, Clen2, bsize, Clen0 ;
 
 	/* ------------------------------------------------------------------ */
 	/* construct column pre-ordered, pruned submatrix */
@@ -1504,10 +1774,6 @@ GLOBAL Int UMFPACK_qsymbolic
     /* determine the size of the Symbolic object */
     /* ---------------------------------------------------------------------- */
 
-    /* ---------------------------------------------------------------------- */
-    /* determine the size of the Symbolic object */
-    /* ---------------------------------------------------------------------- */
-
     nchains = 0 ;
     for (i = 0 ; i < nfr ; i++)
     {
@@ -1577,7 +1843,6 @@ GLOBAL Int UMFPACK_qsymbolic
     DEBUG0 (("Symbolic UMF_malloc_count - init_count = "ID"\n",
 	UMF_malloc_count - init_count)) ;
     ASSERT (UMF_malloc_count == init_count + 21
-	+ (SW->Rperm_2by2 != (Int *) NULL)
 	+ (Symbolic->Esize != (Int *) NULL)) ;
 
     Front_npivcol = Symbolic->Front_npivcol ;
@@ -1790,11 +2055,8 @@ GLOBAL Int UMFPACK_qsymbolic
 
     /* Rperm_init [newrow] = row gives the row permutation that is implied
      * by the column permutation, where "row" is a row index of the original
-     * matrix A.  It is not dependent on the Rperm_2by2 permutation, which
-     * only redefines the "diagonal".   Both are used to construct the
-     * Diagonal_map.  Diagonal_map only needs to be defined for
-     * k = n1 to nn - nempty, but go ahead and define it for all of
-     * k = 0 to nn */
+     * matrix A.  It is used to construct the Diagonal_map.
+     */
 
     if (prefer_diagonal)
     {
@@ -1821,29 +2083,15 @@ GLOBAL Int UMFPACK_qsymbolic
 	    ASSERT (oldrow >= 0 && oldrow < nn) ;
 	    Ci [oldrow] = newrow ;
 	}
-	if (strategy == UMFPACK_STRATEGY_2BY2)
-	{
-	    ASSERT (Rperm_2by2 != (Int *) NULL) ;
-	    for (newcol = 0 ; newcol < nn ; newcol++)
-	    {
-		oldcol = Cperm_init [newcol] ;
-		/* 2-by-2 pivoting done in S */
-		oldrow = Rperm_2by2 [oldcol] ;
-		newrow = Ci [oldrow] ;
-		Diagonal_map [newcol] = newrow ;
-	    }
-	}
-	else
-	{
-	    for (newcol = 0 ; newcol < nn ; newcol++)
-	    {
-		oldcol = Cperm_init [newcol] ;
-		/* no 2-by-2 pivoting in S */
-		oldrow = oldcol ;
-		newrow = Ci [oldrow] ;
-		Diagonal_map [newcol] = newrow ;
-	    }
-	}
+
+        for (newcol = 0 ; newcol < nn ; newcol++)
+        {
+            oldcol = Cperm_init [newcol] ;
+            oldrow = oldcol ;
+            newrow = Ci [oldrow] ;
+            ASSERT (newrow >= 0 && newrow < nn) ;
+            Diagonal_map [newcol] = newrow ;
+        }
 
 #ifndef NDEBUG
 	DEBUG1 (("\nDiagonal map:\n")) ;
@@ -1970,6 +2218,9 @@ GLOBAL Int UMFPACK_qsymbolic
 	}
     }
 
+    Chain_maxrows [nchains] = 0 ;
+    Chain_maxcols [nchains] = 0 ;
+
     /* for Info only: */
     dmaxfrsize = ceil (dmaxfrsize) ;
     DEBUGm1 (("dmaxfrsize %30.20g Int_MAX "ID"\n", dmaxfrsize, Int_MAX)) ;
@@ -2240,7 +2491,7 @@ GLOBAL Int UMFPACK_qsymbolic
 	    /* The flop count computed here is "canonical". */
 
 	    /* factorize the frontal matrix */
-	    flops += DIV_FLOPS * (f*r + (f-1)*f/2)  /* scale pivot columns */
+	    flops += DIV_FLOPS * (f*r + (f-1)*f/2)  /* divide by pivot */
 		/* f outer products: */
 		+ MULTSUB_FLOPS * (f*r*c + (r+c)*(f-1)*f/2 + (f-1)*f*(2*f-1)/6);
 
@@ -2374,7 +2625,6 @@ PRIVATE void free_work
 {
     if (SW)
     {
-	SW->Rperm_2by2 = (Int *) UMF_free ((void *) SW->Rperm_2by2) ;
 	SW->InvRperm1 = (Int *) UMF_free ((void *) SW->InvRperm1) ;
 	SW->Rs = (double *) UMF_free ((void *) SW->Rs) ;
 	SW->Si = (Int *) UMF_free ((void *) SW->Si) ;
@@ -2409,3 +2659,94 @@ PRIVATE void error
     UMFPACK_free_symbolic ((void **) Symbolic) ;
     ASSERT (UMF_malloc_count == init_count) ;
 }
+
+
+/* ========================================================================== */
+/* === UMFPACK_qsymbolic ==================================================== */
+/* ========================================================================== */
+
+GLOBAL Int UMFPACK_qsymbolic
+(
+    Int n_row,
+    Int n_col,
+    const Int Ap [ ],
+    const Int Ai [ ],
+    const double Ax [ ],
+#ifdef COMPLEX
+    const double Az [ ],
+#endif
+    const Int Quser [ ],
+    void **SymbolicHandle,
+    const double Control [UMFPACK_CONTROL],
+    double User_Info [UMFPACK_INFO]
+)
+{
+    return (symbolic_analysis (n_row, n_col, Ap, Ai, Ax,
+#ifdef COMPLEX
+        Az,
+#endif
+
+        /* user-provided ordering (ignored if NULL) */
+        Quser,
+
+        /* no user provided ordering function */
+        (void *) NULL,
+        (void *) NULL,
+
+        SymbolicHandle, Control, User_Info)) ;
+}
+
+
+/* ========================================================================== */
+/* === UMFPACK_fsymbolic ==================================================== */
+/* ========================================================================== */
+
+GLOBAL Int UMFPACK_fsymbolic
+(
+    Int n_row,
+    Int n_col,
+    const Int Ap [ ],
+    const Int Ai [ ],
+    const double Ax [ ],
+#ifdef COMPLEX
+    const double Az [ ],
+#endif
+
+    /* user-provided ordering function */
+    int (*user_ordering)    /* TRUE if OK, FALSE otherwise */
+    (
+        /* inputs, not modified on output */
+        Int,            /* nrow */
+        Int,            /* ncol */
+        Int,            /* sym: if TRUE and nrow==ncol do A+A', else do A'A */
+        Int *,          /* Ap, size ncol+1 */
+        Int *,          /* Ai, size nz */
+        /* output */
+        Int *,          /* size ncol, fill-reducing permutation */
+        /* input/output */
+        void *,         /* user_params (ignored by UMFPACK) */
+        double *        /* user_info[0..2], optional output for symmetric case.
+                           user_info[0]: max column count for L=chol(P(A+A')P')
+                           user_info[1]: nnz (L)
+                           user_info[2]: flop count for chol, if A real */
+    ),
+    void *user_params,  /* passed to user_ordering function */
+
+    void **SymbolicHandle,
+    const double Control [UMFPACK_CONTROL],
+    double User_Info [UMFPACK_INFO]
+)
+{
+    return (symbolic_analysis (n_row, n_col, Ap, Ai, Ax,
+#ifdef COMPLEX
+        Az,
+#endif
+
+        /* user ordering not provided */
+        (Int *) NULL,
+        /* user ordering functions used instead */
+        user_ordering,
+        user_params,
+
+        SymbolicHandle, Control, User_Info)) ;
+}
diff --git a/UMFPACK/Source/umfpack_report_control.c b/UMFPACK/Source/umfpack_report_control.c
index 30a51b9..615788c 100644
--- a/UMFPACK/Source/umfpack_report_control.c
+++ b/UMFPACK/Source/umfpack_report_control.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -21,8 +20,9 @@ GLOBAL void UMFPACK_report_control
 )
 {
     double drow, dcol, relpt, relpt2, alloc_init, front_alloc_init, amd_alpha,
-	tol, force_fixQ, droptol, aggr ;
+	force_fixQ, droptol, aggr ;
     Int prl, nb, irstep, strategy, scale, s ;
+    Int do_singletons, ordering_option ;
 
     prl = GET_CONTROL (UMFPACK_PRL, UMFPACK_DEFAULT_PRL) ;
 
@@ -48,7 +48,7 @@ GLOBAL void UMFPACK_report_control
 #endif
 #ifdef DLONG
     PRINTF (("    Matrix entry defined as: double\n")) ;
-    PRINTF (("    Int (generic integer) defined as: UF_long\n")) ;
+    PRINTF (("    Int (generic integer) defined as: SuiteSparse_long\n")) ;
 #endif
 #ifdef ZINT
     PRINTF (("    Matrix entry defined as: double complex\n")) ;
@@ -56,7 +56,7 @@ GLOBAL void UMFPACK_report_control
 #endif
 #ifdef ZLONG
     PRINTF (("    Matrix entry defined as: double complex\n")) ;
-    PRINTF (("    Int (generic integer) defined as: UF_long\n")) ;
+    PRINTF (("    Int (generic integer) defined as: SuiteSparse_long\n")) ;
 #endif
 
     /* ---------------------------------------------------------------------- */
@@ -127,14 +127,6 @@ GLOBAL void UMFPACK_report_control
 	"        Q = COLAMD (A), Q refined during numerical\n"
 	"        factorization, and no attempt at diagonal pivoting.\n")) ;
     }
-    else if (strategy == UMFPACK_STRATEGY_2BY2)
-    {
-	PRINTF ((" (symmetric, with 2-by-2 block pivoting)\n"
-	"        P2 = row permutation that tries to place large entries on\n"
-	"        the diagonal.  Q = AMD (P2*A+(P2*A)'), Q not refined during\n"
-	"        numerical factorization, attempt to select pivots from the\n"
-	"        diagonal of P2*A.\n")) ;
-    }
     else /* auto strategy */
     {
 	strategy = UMFPACK_STRATEGY_AUTO ;
@@ -142,6 +134,61 @@ GLOBAL void UMFPACK_report_control
     }
 
     /* ---------------------------------------------------------------------- */
+    /* ordering */
+    /* ---------------------------------------------------------------------- */
+
+    ordering_option = GET_CONTROL (UMFPACK_ORDERING, UMFPACK_DEFAULT_ORDERING) ;
+    if (ordering_option < 0 || ordering_option > UMFPACK_ORDERING_USER)
+    {
+        ordering_option = UMFPACK_DEFAULT_ORDERING ;
+    }
+    PRINTF (("    "ID": ordering: "ID,
+	(Int) INDEX (UMFPACK_ORDERING), ordering_option)) ;
+    if (ordering_option == UMFPACK_ORDERING_CHOLMOD)
+    {
+        PRINTF ((" CHOLMOD: AMD/COLAMD, then try METIS, and select best\n")) ;
+    }
+    else if (ordering_option == UMFPACK_ORDERING_AMD)
+    {
+        PRINTF ((" AMD/COLAMD\n")) ;
+    }
+    else if (ordering_option == UMFPACK_ORDERING_GIVEN)
+    {
+        PRINTF ((" user-provided permutation vector\n")) ;
+    }
+    else if (ordering_option == UMFPACK_ORDERING_NONE)
+    {
+        PRINTF ((" none\n")) ;
+    }
+    else if (ordering_option == UMFPACK_ORDERING_METIS)
+    {
+        PRINTF ((" METIS\n")) ;
+    }
+    else if (ordering_option == UMFPACK_ORDERING_BEST)
+    {
+        PRINTF ((" best effort. Try AMD/COLAMD and METIS, select best\n")) ;
+    }
+    else if (ordering_option == UMFPACK_ORDERING_USER)
+    {
+        PRINTF ((" user-provided ordering function\n")) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
+    /* disable singletons (default is FALSE) */
+    /* ---------------------------------------------------------------------- */
+
+    do_singletons = GET_CONTROL (UMFPACK_SINGLETONS,UMFPACK_DEFAULT_SINGLETONS);
+    PRINTF (("    "ID": singleton filter:", (Int) INDEX (UMFPACK_SINGLETONS))) ;
+    if (do_singletons)
+    {
+	PRINTF ((" enabled\n")) ;
+    }
+    else
+    {
+	PRINTF ((" disabled\n")) ;
+    }
+
+    /* ---------------------------------------------------------------------- */
     /* initial allocation parameter */
     /* ---------------------------------------------------------------------- */
 
@@ -169,15 +216,6 @@ GLOBAL void UMFPACK_report_control
 	(Int) INDEX (UMFPACK_IRSTEP), irstep)) ;
 
     /* ---------------------------------------------------------------------- */
-    /* 2-by-2 pivot tolerance */
-    /* ---------------------------------------------------------------------- */
-
-    tol = GET_CONTROL (UMFPACK_2BY2_TOLERANCE, UMFPACK_DEFAULT_2BY2_TOLERANCE) ;
-    tol = MAX (0.0, MIN (tol, 1.0)) ;
-    PRINTF (("    "ID": 2-by-2 pivot tolerance: %g\n",
-	(Int) INDEX (UMFPACK_2BY2_TOLERANCE), tol)) ;
-
-    /* ---------------------------------------------------------------------- */
     /* force fixQ */
     /* ---------------------------------------------------------------------- */
 
@@ -312,50 +350,21 @@ GLOBAL void UMFPACK_report_control
 #endif
 
 #ifdef MATLAB_MEX_FILE
-    PRINTF (("    "ID": compiled for MATLAB\n",
-	(Int) INDEX (UMFPACK_COMPILED_FOR_MATLAB))) ;
-#else
-#ifdef MATHWORKS
-    PRINTF (("    "ID": compiled for MATLAB\n",
-	(Int) INDEX (UMFPACK_COMPILED_FOR_MATLAB))) ;
+    PRINTF (("    compiled for MATLAB\n")) ;
 #else
-    PRINTF (("    "ID": compiled for ANSI C\n",
-	(Int) INDEX (UMFPACK_COMPILED_FOR_MATLAB))) ;
-#endif
+    PRINTF (("    compiled for ANSI C\n")) ;
 #endif
 
-#ifdef NO_TIMER
-    PRINTF (("    "ID": no CPU timer \n",
-	(Int) INDEX (UMFPACK_COMPILED_WITH_GETRUSAGE))) ;
-#else
-#ifndef NPOSIX
-    PRINTF (("    "ID": CPU timer is POSIX times ( ) routine.\n",
-	(Int) INDEX (UMFPACK_COMPILED_WITH_GETRUSAGE))) ;
-#else
-#ifdef GETRUSAGE
-    PRINTF (("    "ID": CPU timer is getrusage.\n",
-	(Int) INDEX (UMFPACK_COMPILED_WITH_GETRUSAGE))) ;
-#else
-    PRINTF (("    "ID": CPU timer is ANSI C clock (may wrap around).\n",
-	(Int) INDEX (UMFPACK_COMPILED_WITH_GETRUSAGE))) ;
-#endif
-#endif
-#endif
-
-#ifndef NDEBUG
-    PRINTF ((
-"**** Debugging enabled (UMFPACK will be exceedingly slow!) *****************\n"
-"    "ID": compiled with debugging enabled. ",
-	(Int) INDEX (UMFPACK_COMPILED_IN_DEBUG_MODE))) ;
+#ifdef SUITESPARSE_TIMER_ENABLED
+    PRINTF (("    POSIX C clock_getttime.\n")) ;
 #else
-    PRINTF (("    "ID": compiled for normal operation (debugging disabled)\n",
-	(Int) INDEX (UMFPACK_COMPILED_IN_DEBUG_MODE))) ;
+    PRINTF (("    no timer used.\n")) ;
 #endif
 
     PRINTF (("    computer/operating system: %s\n", UMFPACK_ARCHITECTURE)) ;
-    PRINTF (("    size of int: %g UF_long: %g Int: %g pointer: %g"
+    PRINTF (("    size of int: %g SuiteSparse_long: %g Int: %g pointer: %g"
 	" double: %g Entry: %g (in bytes)\n\n", (double) sizeof (int),
-	(double) sizeof (UF_long), (double) sizeof (Int),
+	(double) sizeof (SuiteSparse_long), (double) sizeof (Int),
 	(double) sizeof (void *), (double) sizeof (double),
 	(double) sizeof (Entry))) ;
 }
diff --git a/UMFPACK/Source/umfpack_report_info.c b/UMFPACK/Source/umfpack_report_info.c
index ac55466..03aacfd 100644
--- a/UMFPACK/Source/umfpack_report_info.c
+++ b/UMFPACK/Source/umfpack_report_info.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -81,8 +80,8 @@ GLOBAL void UMFPACK_report_info
 {
 
     double lnz_est, unz_est, lunz_est, lnz, unz, lunz, tsym, tnum, fnum, tsolve,
-	fsolve, ttot, ftot, twsym, twnum, twsolve, twtot, n2 ;
-    Int n_row, n_col, n_inner, prl, is_sym ;
+	fsolve, ftot, twsym, twnum, twsolve, twtot, n2 ;
+    Int n_row, n_col, n_inner, prl, is_sym, strategy ;
 
     /* ---------------------------------------------------------------------- */
     /* get control settings and status to determine what to print */
@@ -120,7 +119,7 @@ GLOBAL void UMFPACK_report_info
 #endif
 #ifdef DLONG
     PRINTF (("    matrix entry defined as:          double\n")) ;
-    PRINTF (("    Int (generic integer) defined as: UF_long\n")) ;
+    PRINTF (("    Int (generic integer) defined as: SuiteSparse_long\n")) ;
 #endif
 #ifdef ZINT
     PRINTF (("    matrix entry defined as:          double complex\n")) ;
@@ -128,7 +127,7 @@ GLOBAL void UMFPACK_report_info
 #endif
 #ifdef ZLONG
     PRINTF (("    matrix entry defined as:          double complex\n")) ;
-    PRINTF (("    Int (generic integer) defined as: UF_long\n")) ;
+    PRINTF (("    Int (generic integer) defined as: SuiteSparse_long\n")) ;
 #endif
 
     /* ---------------------------------------------------------------------- */
@@ -156,18 +155,10 @@ GLOBAL void UMFPACK_report_info
 #endif
 
     PRINTF (("    CPU timer:                        ")) ;
-#ifdef NO_TIMER
-    PRINTF (("none.\n")) ;
-#else
-#ifndef NPOSIX
-    PRINTF (("POSIX times ( ) routine.\n")) ;
-#else
-#ifdef GETRUSAGE
-    PRINTF (("getrusage ( ) routine.\n")) ;
+#ifdef SUITESPARSE_TIMER_ENABLED
+    PRINTF (("POSIX C clock_getttime ( ) routine.\n")) ;
 #else
-    PRINTF (("ANSI clock ( ) routine.\n")) ;
-#endif
-#endif
+    PRINTF (("none.\n")) ;
 #endif
 
     /* ---------------------------------------------------------------------- */
@@ -187,7 +178,7 @@ GLOBAL void UMFPACK_report_info
 
     PRINT_INFO ("    size of int:                      "ID" bytes\n",
 	(Int) Info [UMFPACK_SIZE_OF_INT]) ;
-    PRINT_INFO ("    size of UF_long:                  "ID" bytes\n",
+    PRINT_INFO ("    size of SuiteSparse_long:         "ID" bytes\n",
 	(Int) Info [UMFPACK_SIZE_OF_LONG]) ;
     PRINT_INFO ("    size of pointer:                  "ID" bytes\n",
 	(Int) Info [UMFPACK_SIZE_OF_POINTER]) ;
@@ -198,30 +189,62 @@ GLOBAL void UMFPACK_report_info
     /* symbolic parameters */
     /* ---------------------------------------------------------------------- */
 
-    if (Info [UMFPACK_STRATEGY_USED] == UMFPACK_STRATEGY_SYMMETRIC)
+    strategy = Info [UMFPACK_STRATEGY_USED] ;
+    if (strategy == UMFPACK_STRATEGY_SYMMETRIC)
     {
 	PRINTF (("\n    strategy used:                    symmetric\n")) ;
+        if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_AMD)
+        {
+            PRINTF (("    ordering used:                    amd on A+A'\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_GIVEN)
+        {
+            PRINTF (("    ordering used:                    user perm.\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_USER)
+        {
+            PRINTF (("    ordering used:                    user function\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_NONE)
+        {
+            PRINTF (("    ordering used:                    none\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_METIS)
+        {
+            PRINTF (("    ordering used:                    metis on A+A'\n")) ;
+        }
+        else
+        {
+            PRINTF (("    ordering used:                    not computed\n")) ;
+        }
     }
-    else if (Info [UMFPACK_STRATEGY_USED] == UMFPACK_STRATEGY_UNSYMMETRIC)
+    else
     {
 	PRINTF (("\n    strategy used:                    unsymmetric\n")) ;
-    }
-    else if (Info [UMFPACK_STRATEGY_USED] == UMFPACK_STRATEGY_2BY2)
-    {
-	PRINTF (("\n    strategy used:                    symmetric 2-by-2\n"));
-    }
-
-    if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_AMD)
-    {
-	PRINTF (("    ordering used:                    amd on A+A'\n")) ;
-    }
-    else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_COLAMD)
-    {
-	PRINTF (("    ordering used:                    colamd on A\n")) ;
-    }
-    else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_GIVEN)
-    {
-	PRINTF (("    ordering used:                    provided by user\n")) ;
+        if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_AMD)
+        {
+            PRINTF (("    ordering used:                    colamd on A\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_GIVEN)
+        {
+            PRINTF (("    ordering used:                    user perm.\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_USER)
+        {
+            PRINTF (("    ordering used:                    user function\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_NONE)
+        {
+            PRINTF (("    ordering used:                    none\n")) ;
+        }
+        else if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_METIS)
+        {
+            PRINTF (("    ordering used:                    metis on A'A\n")) ;
+        }
+        else
+        {
+            PRINTF (("    ordering used:                    not computed\n")) ;
+        }
     }
 
     if (Info [UMFPACK_QFIXED] == 1)
@@ -291,31 +314,11 @@ GLOBAL void UMFPACK_report_info
     }
 
     /* ---------------------------------------------------------------------- */
-    /* statistics from 2-by-2 permutation */
-    /* ---------------------------------------------------------------------- */
-
-    PRINT_INFO ("    2-by-2 pivoting to place large entries on diagonal:\n"
-		"        # of small diagonal entries of S:          %.0f\n",
-	Info [UMFPACK_2BY2_NWEAK]) ;
-    PRINT_INFO ("        # unmatched:                               %.0f\n",
-	Info [UMFPACK_2BY2_UNMATCHED]) ;
-    PRINT_INFO ("        symmetry of P2*S:                          %.6f\n",
-	Info [UMFPACK_2BY2_PATTERN_SYMMETRY]) ;
-    PRINT_INFO ("        nz in P2*S+(P2*S)' (excl. diag.):          %.0f\n",
-	Info [UMFPACK_2BY2_NZ_PA_PLUS_PAT]) ;
-    PRINT_INFO ("        nz on diagonal of P2*S:                    %.0f\n",
-	Info [UMFPACK_2BY2_NZDIAG]) ;
-    if (Info [UMFPACK_2BY2_NZDIAG] >= 0 && n2 > 0)
-    {
-	PRINTF (("        fraction of nz on diag of P2*S:            %.6f\n",
-	Info [UMFPACK_2BY2_NZDIAG] / n2)) ;
-    }
-
-    /* ---------------------------------------------------------------------- */
     /* statistics from AMD */
     /* ---------------------------------------------------------------------- */
 
-    if (Info [UMFPACK_ORDERING_USED] == UMFPACK_ORDERING_AMD)
+    if (strategy == UMFPACK_STRATEGY_SYMMETRIC && 
+        Info [UMFPACK_ORDERING_USED] != UMFPACK_ORDERING_GIVEN)
     {
 	double dmax = Info [UMFPACK_SYMMETRIC_DMAX] ;
 	PRINTF (("    AMD statistics, for strict diagonal pivoting:\n")) ;
@@ -323,8 +326,12 @@ GLOBAL void UMFPACK_report_info
 	    Info [UMFPACK_SYMMETRIC_FLOPS]) ;
 	PRINT_INFO ("        est. nz in L+U (incl. diagonal):           %.0f\n",
 	    Info [UMFPACK_SYMMETRIC_LUNZ]) ;
-	PRINT_INFO ("        est. largest front (# entries):            %.0f\n",
+        if (dmax > 0)
+        {
+            PRINT_INFO
+            ("        est. largest front (# entries):            %.0f\n",
 	    dmax*dmax) ;
+        }
 	PRINT_INFO ("        est. max nz in any column of L:            %.0f\n",
 	    dmax) ;
 	PRINT_INFO (
@@ -349,8 +356,6 @@ GLOBAL void UMFPACK_report_info
 	Info [UMFPACK_SYMBOLIC_SIZE]) ;
     PRINT_INFO ("    Symbolic size (MBytes):                        %.0f\n",
 	MBYTES (Info [UMFPACK_SYMBOLIC_SIZE])) ;
-    PRINT_INFO ("    symbolic factorization CPU time (sec):         %.2f\n",
-	tsym) ;
     PRINT_INFO ("    symbolic factorization wallclock time(sec):    %.2f\n",
 	twsym) ;
 
@@ -483,19 +488,11 @@ GLOBAL void UMFPACK_report_info
 	Info [UMFPACK_NUMERIC_REALLOC]) ;
     PRINT_INFO ("    costly numeric factorization reallocations:    %.0f\n",
 	Info [UMFPACK_NUMERIC_COSTLY_REALLOC]) ;
-    PRINT_INFO ("    numeric factorization CPU time (sec):          %.2f\n",
-	tnum) ;
     PRINT_INFO ("    numeric factorization wallclock time (sec):    %.2f\n",
 	twnum) ;
 
 #define TMIN 0.001
 
-    if (tnum > TMIN && fnum > 0)
-    {
-	PRINT_INFO (
-	   "    numeric factorization mflops (CPU time):       %.2f\n",
-	   1e-6 * fnum / tnum) ;
-    }
     if (twnum > TMIN && fnum > 0)
     {
 	PRINT_INFO (
@@ -503,20 +500,7 @@ GLOBAL void UMFPACK_report_info
 	   1e-6 * fnum / twnum) ;
     }
 
-    ttot = EMPTY ;
     ftot = fnum ;
-    if (tsym >= TMIN && tnum >= 0)
-    {
-	ttot = tsym + tnum ;
-	PRINT_INFO ("    symbolic + numeric CPU time (sec):             %.2f\n",
-	    ttot) ;
-	if (ftot > 0 && ttot > TMIN)
-	{
-	    PRINT_INFO (
-		"    symbolic + numeric mflops (CPU time):          %.2f\n",
-		1e-6 * ftot / ttot) ;
-	}
-    }
 
     twtot = EMPTY ;
     if (twsym >= TMIN && twnum >= TMIN)
@@ -550,16 +534,8 @@ GLOBAL void UMFPACK_report_info
 	Info [UMFPACK_OMEGA1]) ;
     PRINT_INFO ("    sparse backward error omega2:                  %.2e\n",
 	Info [UMFPACK_OMEGA2]) ;
-    PRINT_INFO ("    solve CPU time (sec):                          %.2f\n",
-	tsolve) ;
     PRINT_INFO ("    solve wall clock time (sec):                   %.2f\n",
 	twsolve) ;
-    if (fsolve > 0 && tsolve > TMIN)
-    {
-	PRINT_INFO (
-	    "    solve mflops (CPU time):                       %.2f\n",
-	    1e-6 * fsolve / tsolve) ;
-    }
     if (fsolve > 0 && twsolve > TMIN)
     {
 	PRINT_INFO (
@@ -574,23 +550,6 @@ GLOBAL void UMFPACK_report_info
 	"\n    total symbolic + numeric + solve flops:        %.5e\n", ftot) ;
     }
 
-    if (tsolve >= TMIN)
-    {
-	if (ttot >= TMIN && ftot >= 0)
-	{
-	    ttot += tsolve ;
-	    PRINT_INFO (
-		"    total symbolic + numeric + solve CPU time:     %.2f\n",
-		ttot) ;
-	    if (ftot > 0 && ttot > TMIN)
-	    {
-		PRINT_INFO (
-		"    total symbolic + numeric + solve mflops (CPU): %.2f\n",
-		1e-6 * ftot / ttot) ;
-	    }
-	}
-    }
-
     if (twsolve >= TMIN)
     {
 	if (twtot >= TMIN && ftot >= 0)
diff --git a/UMFPACK/Source/umfpack_report_matrix.c b/UMFPACK/Source/umfpack_report_matrix.c
index 6074ea4..68b478c 100644
--- a/UMFPACK/Source/umfpack_report_matrix.c
+++ b/UMFPACK/Source/umfpack_report_matrix.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -31,7 +30,7 @@ GLOBAL Int UMFPACK_report_matrix
 {
     Entry a ;
     Int prl, i, k, length, ilast, p, nz, prl1, p1, p2, n, n_i, do_values ;
-    char *vector, *index ;
+    char *vector_kind, *index_kind ;
 #ifdef COMPLEX
     Int split = SPLIT (Az) ;
 #endif
@@ -49,20 +48,21 @@ GLOBAL Int UMFPACK_report_matrix
 
     if (col_form)
     {
-	vector = "column" ;	/* column vectors */
-	index = "row" ;		/* with row indices */
+	vector_kind = "column" ;	/* column vectors */
+	index_kind = "row" ;		/* with row indices */
 	n = n_col ;
 	n_i = n_row ;
     }
     else
     {
-	vector = "row" ;	/* row vectors */
-	index = "column" ;	/* with column indices */
+	vector_kind = "row" ;	/* row vectors */
+	index_kind = "column" ;	/* with column indices */
 	n = n_row ;
 	n_i = n_col ;
     }
 
-    PRINTF (("%s-form matrix, n_row "ID" n_col "ID", ", vector, n_row, n_col)) ;
+    PRINTF (("%s-form matrix, n_row "ID" n_col "ID", ",
+        vector_kind, n_row, n_col)) ;
 
     if (n_row <= 0 || n_col <= 0)
     {
@@ -125,7 +125,7 @@ GLOBAL Int UMFPACK_report_matrix
 	if (length < 0)
 	{
 	    PRINTF (("ERROR: # entries in %s "ID" is < 0\n\n",
-		vector, INDEX (k))) ;
+		vector_kind, INDEX (k))) ;
 	    return (UMFPACK_ERROR_invalid_matrix) ;
 	}
     }
@@ -148,12 +148,12 @@ GLOBAL Int UMFPACK_report_matrix
 	p2 = Ap [k+1] ;
 	length = p2 - p1 ;
 	PRINTF4 (("\n    %s "ID": start: "ID" end: "ID" entries: "ID"\n",
-	    vector, INDEX (k), p1, p2-1, length)) ;
+	    vector_kind, INDEX (k), p1, p2-1, length)) ;
 	ilast = EMPTY ;
 	for (p = p1 ; p < p2 ; p++)
 	{
 	    i = Ai [p] ;
-	    PRINTF4 (("\t%s "ID" ", index, INDEX (i))) ;
+	    PRINTF4 (("\t%s "ID" ", index_kind, INDEX (i))) ;
 	    if (do_values && prl >= 4)
 	    {
 		PRINTF ((":")) ;
@@ -163,13 +163,14 @@ GLOBAL Int UMFPACK_report_matrix
 	    if (i < 0 || i >= n_i)
 	    {
 		PRINTF ((" ERROR: %s index "ID" out of range in %s "ID"\n\n",
-		    index, INDEX (i), vector, INDEX (k))) ;
+		    index_kind, INDEX (i), vector_kind, INDEX (k))) ;
 		return (UMFPACK_ERROR_invalid_matrix) ;
 	    }
 	    if (i <= ilast)
 	    {
 		PRINTF ((" ERROR: %s index "ID" out of order (or duplicate) in "
-		    "%s "ID"\n\n", index, INDEX (i), vector, INDEX (k))) ;
+		    "%s "ID"\n\n", index_kind, INDEX (i),
+                    vector_kind, INDEX (k))) ;
 		return (UMFPACK_ERROR_invalid_matrix) ;
 	    }
 	    PRINTF4 (("\n")) ;
@@ -194,7 +195,7 @@ GLOBAL Int UMFPACK_report_matrix
     /* return the status of the matrix */
     /* ---------------------------------------------------------------------- */
 
-    PRINTF4 (("    %s-form matrix ", vector)) ;
+    PRINTF4 (("    %s-form matrix ", vector_kind)) ;
     PRINTF (("OK\n\n")) ;
 
     return (UMFPACK_OK) ;
diff --git a/UMFPACK/Source/umfpack_report_numeric.c b/UMFPACK/Source/umfpack_report_numeric.c
index f70555f..21cb6c5 100644
--- a/UMFPACK/Source/umfpack_report_numeric.c
+++ b/UMFPACK/Source/umfpack_report_numeric.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_report_perm.c b/UMFPACK/Source/umfpack_report_perm.c
index 5f3baab..9a3810b 100644
--- a/UMFPACK/Source/umfpack_report_perm.c
+++ b/UMFPACK/Source/umfpack_report_perm.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_report_status.c b/UMFPACK/Source/umfpack_report_status.c
index 5e4e142..dd923d1 100644
--- a/UMFPACK/Source/umfpack_report_status.c
+++ b/UMFPACK/Source/umfpack_report_status.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -100,6 +99,10 @@ GLOBAL void UMFPACK_report_status
 	    PRINTF (("ERROR: pattern of matrix (Ap and/or Ai) has changed\n")) ;
 	    break ;
 
+        case UMFPACK_ERROR_ordering_failed:
+	    PRINTF (("ERROR: ordering failed\n")) ;
+	    break ;
+
 	case UMFPACK_ERROR_internal_error:
 	    PRINTF (("INTERNAL ERROR!\n"
 	    "Input arguments might be corrupted or aliased, or an internal\n"
@@ -107,7 +110,8 @@ GLOBAL void UMFPACK_report_status
 	    "umfpack_*_report_* routines before calling the umfpack_*\n"
 	    "computational routines.  Recompile UMFPACK with debugging\n"
 	    "enabled, and look for failed assertions.  If all else fails\n"
-	    "please report this error to Tim Davis (davis at cise.ufl.edu).\n"
+	    "please report this error to Tim Davis\n"
+            "(DrTimothyAldenDavis at gmail.com).\n"
 	    )) ;
 	    break ;
 
diff --git a/UMFPACK/Source/umfpack_report_symbolic.c b/UMFPACK/Source/umfpack_report_symbolic.c
index 57e134e..4b96294 100644
--- a/UMFPACK/Source/umfpack_report_symbolic.c
+++ b/UMFPACK/Source/umfpack_report_symbolic.c
@@ -3,14 +3,13 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
     User-callable.  Prints the Symbolic object. See umfpack_report_symbolic.h
-    for details.  Does not print new Cdeg, Rdeg, Esize, and the Diagonal_map.
+    for details.  Not all of the object is printed.
 
     Dynamic memory usage:  Allocates a size MAX (n_row,n_col)*sizeof(Int)
     workspace via a single call to UMF_malloc and then frees all of it via
@@ -83,30 +82,45 @@ GLOBAL Int UMFPACK_report_symbolic
 	/* strategy cannot be auto */
 	if (Symbolic->strategy == UMFPACK_STRATEGY_SYMMETRIC)
 	{
-	    PRINTF (("symmetric")) ;
+	    PRINTF (("symmetric\n")) ;
+            PRINTF (("    ordering used:                              ")) ;
+            if (Symbolic->ordering == UMFPACK_ORDERING_AMD)
+            {
+                PRINTF (("amd on A\n")) ;
+            }
+            else if (Symbolic->ordering == UMFPACK_ORDERING_GIVEN)
+            {
+                PRINTF (("user permutation")) ;
+            }
+            else if (Symbolic->ordering == UMFPACK_ORDERING_USER)
+            {
+                PRINTF (("user function")) ;
+            }
+            else if (Symbolic->ordering == UMFPACK_ORDERING_METIS)
+            {
+                PRINTF (("metis on A")) ;
+            }
 	}
-	else if (Symbolic->strategy == UMFPACK_STRATEGY_UNSYMMETRIC)
+	else /* if (Symbolic->strategy == UMFPACK_STRATEGY_UNSYMMETRIC) */
 	{
-	    PRINTF (("unsymmetric")) ;
-	}
-	else if (Symbolic->strategy == UMFPACK_STRATEGY_2BY2)
-	{
-	    PRINTF (("symmetric 2-by-2")) ;
-	}
-	PRINTF (("\n")) ;
-
-	PRINTF (("    ordering used:                              ")) ;
-	if (Symbolic->ordering == UMFPACK_ORDERING_COLAMD)
-	{
-	    PRINTF (("colamd on A\n")) ;
-	}
-	else if (Symbolic->ordering == UMFPACK_ORDERING_AMD)
-	{
-	    PRINTF (("amd on A+A'\n")) ;
-	}
-	else if (Symbolic->ordering == UMFPACK_ORDERING_GIVEN)
-	{
-	    PRINTF (("provided by user")) ;
+	    PRINTF (("unsymmetric\n")) ;
+            PRINTF (("    ordering used:                              ")) ;
+            if (Symbolic->ordering == UMFPACK_ORDERING_AMD)
+            {
+                PRINTF (("colamd on A\n")) ;
+            }
+            else if (Symbolic->ordering == UMFPACK_ORDERING_GIVEN)
+            {
+                PRINTF (("user permutation")) ;
+            }
+            else if (Symbolic->ordering == UMFPACK_ORDERING_USER)
+            {
+                PRINTF (("user function")) ;
+            }
+            else if (Symbolic->ordering == UMFPACK_ORDERING_METIS)
+            {
+                PRINTF (("metis on A'A")) ;
+            }
 	}
 	PRINTF (("\n")) ;
 
diff --git a/UMFPACK/Source/umfpack_report_triplet.c b/UMFPACK/Source/umfpack_report_triplet.c
index ba11a69..3ee7f5e 100644
--- a/UMFPACK/Source/umfpack_report_triplet.c
+++ b/UMFPACK/Source/umfpack_report_triplet.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_report_vector.c b/UMFPACK/Source/umfpack_report_vector.c
index a88804c..7140352 100644
--- a/UMFPACK/Source/umfpack_report_vector.c
+++ b/UMFPACK/Source/umfpack_report_vector.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_save_numeric.c b/UMFPACK/Source/umfpack_save_numeric.c
index 0e4d8a2..cc8a5aa 100644
--- a/UMFPACK/Source/umfpack_save_numeric.c
+++ b/UMFPACK/Source/umfpack_save_numeric.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -24,6 +23,7 @@
 	fclose (f) ; \
 	return (UMFPACK_ERROR_file_IO) ; \
     } \
+    fflush (f) ; \
 }
 
 /* ========================================================================== */
@@ -83,6 +83,9 @@ GLOBAL Int UMFPACK_save_numeric
     {
 	WRITE (Numeric->Upattern, Int, Numeric->ulen+1) ;
     }
+    /* It is possible that some parts of Numeric->Memory are
+       unitialized and unused; this is OK, but it can generate
+       a valgrind warning. */
     WRITE (Numeric->Memory, Unit, Numeric->size) ;
 
     /* close the file */
diff --git a/UMFPACK/Source/umfpack_save_symbolic.c b/UMFPACK/Source/umfpack_save_symbolic.c
index ae00189..74a0d50 100644
--- a/UMFPACK/Source/umfpack_save_symbolic.c
+++ b/UMFPACK/Source/umfpack_save_symbolic.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -24,6 +23,7 @@
 	fclose (f) ; \
 	return (UMFPACK_ERROR_file_IO) ; \
     } \
+    fflush (f) ; \
 }
 
 /* ========================================================================== */
diff --git a/UMFPACK/Source/umfpack_scale.c b/UMFPACK/Source/umfpack_scale.c
index 49467a5..419b2af 100644
--- a/UMFPACK/Source/umfpack_scale.c
+++ b/UMFPACK/Source/umfpack_scale.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_solve.c b/UMFPACK/Source/umfpack_solve.c
index c4e8263..604f26f 100644
--- a/UMFPACK/Source/umfpack_solve.c
+++ b/UMFPACK/Source/umfpack_solve.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_symbolic.c b/UMFPACK/Source/umfpack_symbolic.c
index 41be72b..7f75e7d 100644
--- a/UMFPACK/Source/umfpack_symbolic.c
+++ b/UMFPACK/Source/umfpack_symbolic.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -30,10 +29,9 @@ GLOBAL Int UMFPACK_symbolic
     double Info [UMFPACK_INFO]
 )
 {
-    Int *Qinit = (Int *) NULL ;
     return (UMFPACK_qsymbolic (n_row, n_col, Ap, Ai, Ax,
 #ifdef COMPLEX
-	Az,
+        Az,
 #endif
-	Qinit, SymbolicHandle, Control, Info)) ;
+        (Int *) NULL, SymbolicHandle, Control, Info)) ;
 }
diff --git a/UMFPACK/Source/umfpack_tictoc.c b/UMFPACK/Source/umfpack_tictoc.c
index 7fc5fba..188ba39 100644
--- a/UMFPACK/Source/umfpack_tictoc.c
+++ b/UMFPACK/Source/umfpack_tictoc.c
@@ -3,104 +3,32 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
-    User-callable.  Returns the time in seconds used by the process, and
-    the current wall clock time.  BE CAREFUL:  if you compare the run time of
-    UMFPACK with other sparse matrix packages, be sure to use the same timer.
-    See umfpack_tictoc.h for details.
+    User-callable.  Returns the current wall clock time.  BE CAREFUL:  if you
+    compare the run time of UMFPACK with other sparse matrix packages, be sure
+    to use the same timer.  See umfpack_tictoc.h for details.
 
     These routines conform to the POSIX standard.  See umf_config.h for
     more details.
+
+    In a prior version, two timings were returned: wall clock and cpu time.
+    In the current version, both times are set to the wall clock time.
 */
 
 #include "umf_internal.h"
 
-#ifdef NO_TIMER
-
-/* -------------------------------------------------------------------------- */
-/* no timer used if -DNO_TIMER is defined at compile time */
-/* -------------------------------------------------------------------------- */
-
-void umfpack_tic (double stats [2])
-{
-    stats [0] = 0 ;
-    stats [1] = 0 ;
-}
-
-void umfpack_toc (double stats [2])
-{
-    stats [0] = 0 ;
-    stats [1] = 0 ;
-}
-
-#else
-
-/* -------------------------------------------------------------------------- */
-/* timer routines, using either times() or clock() */
-/* -------------------------------------------------------------------------- */
-
-#define TINY_TIME 1e-4
-
-#ifndef NPOSIX
-
-#include <unistd.h>
-#include <sys/times.h>
-
 void umfpack_tic (double stats [2])
 {
-    /* Return the current time */
-    /* stats [0]: current wallclock time, in seconds */
-    /* stats [1]: user + system time for the process, in seconds */
-
-    double ticks ;
-    struct tms t ;
-
-    ticks = (double) sysconf (_SC_CLK_TCK) ;
-    stats [0] = (double) times (&t) / ticks ;
-    stats [1] = (double) (t.tms_utime + t.tms_stime) / ticks ;
-
-    /* if time is tiny, just return zero */
-    if (stats [0] < TINY_TIME) stats [0] = 0 ;
-    if (stats [1] < TINY_TIME) stats [1] = 0 ;
+    stats [0] = SuiteSparse_time ( ) ;
+    stats [1] = stats [0] ;
 }
 
-#else
-
-/* Generic ANSI C: use the ANSI clock function.  No wallclock time. */
-
-#include <time.h>
-
-void umfpack_tic (double stats [2])
-{
-    stats [0] = 0 ;
-    stats [1] = ((double) (clock ( ))) / ((double) (CLOCKS_PER_SEC)) ;
-    if (stats [1] < TINY_TIME) stats [1] = 0 ;
-}
-
-#endif
-
-/* -------------------------------------------------------------------------- */
-
 void umfpack_toc (double stats [2])
 {
-    /* Return the current time since the last call to umfpack_tic. */
-    /* On input, stats holds the values returned by umfpack_tic. */
-    /* On ouput, stats holds the time since the last umfpack_tic. */
-
-    double done [2] ;
-    umfpack_tic (done) ;
-
-    stats [0] = done [0] - stats [0] ;
-    stats [1] = done [1] - stats [1] ;
-
-    if (stats [0] < 0) stats [0] = 0 ;
-    if (stats [1] < 0) stats [1] = 0 ;
-
+    stats [0] = SuiteSparse_time ( ) - stats [0] ;
+    stats [1] = stats [0] ;
 }
-
-#endif
diff --git a/UMFPACK/Source/umfpack_timer.c b/UMFPACK/Source/umfpack_timer.c
index 8e46687..3c53a35 100644
--- a/UMFPACK/Source/umfpack_timer.c
+++ b/UMFPACK/Source/umfpack_timer.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -16,70 +15,9 @@
 */
 
 #include "umfpack_timer.h"
-
-#ifdef NO_TIMER
-
-/* -------------------------------------------------------------------------- */
-/* no timer used if -DNO_TIMER is defined at compile time */
-/* -------------------------------------------------------------------------- */
-
-double umfpack_timer ( void )
-{
-    return (0) ;
-}
-
-#else
-
-#ifdef GETRUSAGE
-
-/* -------------------------------------------------------------------------- */
-/* use getrusage for accurate process times (and no overflow) */
-/* -------------------------------------------------------------------------- */
-
-/*
-    This works under Solaris, SGI Irix, Linux, IBM RS 6000 (AIX), and Compaq
-    Alpha.  It might work on other Unix systems, too.  Includes both the "user
-    time" and the "system time".  The system time is the time spent by the
-    operating system on behalf of the process, and thus should be charged to
-    the process.
-*/
-
-#include <sys/time.h>
-#include <sys/resource.h>
-
-double umfpack_timer ( void )
-{
-    struct rusage ru ;
-    double user_time, sys_time ;
-
-    (void) getrusage (RUSAGE_SELF, &ru) ;
-
-    user_time =
-    ru.ru_utime.tv_sec			/* user time (seconds) */
-    + 1e-6 * ru.ru_utime.tv_usec ;	/* user time (microseconds) */
-
-    sys_time =
-    ru.ru_stime.tv_sec			/* system time (seconds) */
-    + 1e-6 * ru.ru_stime.tv_usec ;	/* system time (microseconds) */
-
-    return (user_time + sys_time) ;
-}
-
-#else
-
-/* -------------------------------------------------------------------------- */
-/* Generic ANSI C: use the ANSI clock function */
-/* -------------------------------------------------------------------------- */
-
-/* This is portable, but may overflow.  On Sun Solaris, when compiling in */
-/* 32-bit mode, the overflow occurs in only 2147 seconds (about 36 minutes). */
-
-#include <time.h>
+#include "SuiteSparse_config.h"
 
 double umfpack_timer ( void )
 {
-    return (((double) (clock ( ))) / ((double) (CLOCKS_PER_SEC))) ;
+    return (SuiteSparse_time ( )) ;
 }
-
-#endif
-#endif
diff --git a/UMFPACK/Source/umfpack_transpose.c b/UMFPACK/Source/umfpack_transpose.c
index 25ea211..a57c461 100644
--- a/UMFPACK/Source/umfpack_transpose.c
+++ b/UMFPACK/Source/umfpack_transpose.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Source/umfpack_triplet_to_col.c b/UMFPACK/Source/umfpack_triplet_to_col.c
index 97750d1..5eb4aa6 100644
--- a/UMFPACK/Source/umfpack_triplet_to_col.c
+++ b/UMFPACK/Source/umfpack_triplet_to_col.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /*
diff --git a/UMFPACK/Tcov/AMD_Demo_Makefile b/UMFPACK/Tcov/AMD_Demo_Makefile
index 2738535..9e18855 100644
--- a/UMFPACK/Tcov/AMD_Demo_Makefile
+++ b/UMFPACK/Tcov/AMD_Demo_Makefile
@@ -4,11 +4,13 @@
 
 default: amd_simple amd_demo amd_demo2 amd_l_demo
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) -I../Include -I../../UFconfig
+C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config
 
-INC = ../Include/amd.h ../../UFconfig/UFconfig.h
+INC = ../Include/amd.h ../../SuiteSparse_config/SuiteSparse_config.h
+
+LIB2 = ../../SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 library:
 	( cd ../Source ; $(MAKE) )
@@ -23,22 +25,22 @@ f77lib:
 dist:
 
 amd_demo: amd_demo.c library $(INC)
-	$(C) -o amd_demo amd_demo.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_demo amd_demo.c ../Lib/libamd.a $(LIB2)
 	./amd_demo > my_amd_demo.out
 	- diff amd_demo.out my_amd_demo.out
 
 amd_l_demo: amd_l_demo.c library $(INC)
-	$(C) -o amd_l_demo amd_l_demo.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_l_demo amd_l_demo.c ../Lib/libamd.a $(LIB2)
 	./amd_l_demo > my_amd_l_demo.out
 	- diff amd_l_demo.out my_amd_l_demo.out
 
 amd_demo2: amd_demo2.c library $(INC)
-	$(C) -o amd_demo2 amd_demo2.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_demo2 amd_demo2.c ../Lib/libamd.a $(LIB2)
 	./amd_demo2 > my_amd_demo2.out
 	- diff amd_demo2.out my_amd_demo2.out
 
 amd_simple: amd_simple.c library $(INC)
-	$(C) -o amd_simple amd_simple.c ../Lib/libamd.a $(LIB)
+	$(C) -o amd_simple amd_simple.c ../Lib/libamd.a $(LIB2)
 	./amd_simple > my_amd_simple.out
 	- diff amd_simple.out my_amd_simple.out
 
@@ -88,3 +90,4 @@ distclean: clean
 	- $(RM) amd_f77demo my_amd_f77demo.out
 	- $(RM) amd_f77simple my_amd_f77simple.out
 	- $(RM) amd_f77cross my_amd_f77cross.out
+	- $(RM) -r *.dSYM
diff --git a/UMFPACK/Tcov/DO b/UMFPACK/Tcov/DO
index 699d2e8..7abc628 100755
--- a/UMFPACK/Tcov/DO
+++ b/UMFPACK/Tcov/DO
@@ -17,30 +17,40 @@ mkdir Out/$1_$2
 # put in UMFPACK (excluding Tcov and MATLAB directories) and AMD
 mkdir Out/$1_$2/UMFPACK
 mkdir Out/$1_$2/UMFPACK/Doc
-/bin/cp -prL ../Source Out/$1_$2/UMFPACK
-/bin/cp -prL ../Lib Out/$1_$2/UMFPACK
-/bin/cp -prL ../Include Out/$1_$2/UMFPACK
-/bin/cp -prL ../Demo Out/$1_$2/UMFPACK
-/bin/cp -prL Top_Makefile Out/$1_$2/UMFPACK/Makefile
-/bin/cp -prL Out/$1_$2/UMFPACK/Lib/GNUmakefile Out/$1_$2/UMFPACK/Source/Makefile
-/bin/cp -prL Demo_Makefile Out/$1_$2/UMFPACK/Demo/Makefile
-/bin/cp -prL ../Doc/License Out/$1_$2/UMFPACK/Doc
+/bin/cp -pr ../Source Out/$1_$2/UMFPACK
+## /bin/cp -pr ../Lib Out/$1_$2/UMFPACK
+( cd Out/$1_$2/UMFPACK ; ln -s Source Lib )
+/bin/cp -pr ../Include Out/$1_$2/UMFPACK
+/bin/cp -pr ../Demo Out/$1_$2/UMFPACK
+/bin/cp -pr Top_Makefile Out/$1_$2/UMFPACK/Makefile
+/bin/cp -pr ../Lib/GNUmakefile Out/$1_$2/UMFPACK/Source/Makefile
+/bin/cp -pr Demo_Makefile Out/$1_$2/UMFPACK/Demo/Makefile
+/bin/cp -pr ../Doc/License Out/$1_$2/UMFPACK/Doc
 
 # put in AMD
-/bin/cp -prL ../../AMD Out/$1_$2
-/bin/cp -prL Top_Makefile Out/$1_$2/AMD/Makefile
-/bin/cp -prL Out/$1_$2/AMD/Lib/GNUmakefile Out/$1_$2/AMD/Source/Makefile
-/bin/cp -prL AMD_Demo_Makefile Out/$1_$2/AMD/Demo/Makefile
+/bin/cp -pr ../../AMD Out/$1_$2
+/bin/rm -rf  Out/$1_$2/AMD/Lib
+( cd Out/$1_$2/AMD ; ln -s Source Lib )
+/bin/cp -pr Top_Makefile Out/$1_$2/AMD/Makefile
+/bin/cp -pr ../../AMD/Lib/GNUmakefile Out/$1_$2/AMD/Source/Makefile
+/bin/cp -pr AMD_Demo_Makefile Out/$1_$2/AMD/Demo/Makefile
+
+# links to CHOLMOD, CAMD, CCOLAMD, and metis
+ln -s ../../../../CHOLMOD Out/$1_$2/CHOLMOD
+ln -s ../../../../CAMD Out/$1_$2/CAMD
+ln -s ../../../../CCOLAMD Out/$1_$2/CCOLAMD
+ln -s ../../../../COLAMD Out/$1_$2/COLAMD
+ln -s ../../../../metis-4.0 Out/$1_$2/metis-4.0
 
 /bin/cp debug.* Out/$1_$2
 
 # put in the makefile
 /bin/cp GNUmakefile.$2 Out/$1_$2/GNUmakefile
 
-# put in the UFconfig.mk and UFconfig.h files
-mkdir Out/$1_$2/UFconfig
-/bin/cp -f Make.$1 Out/$1_$2/UFconfig/UFconfig.mk
-/bin/cp -f ../../UFconfig/UFconfig.h Out/$1_$2/UFconfig
+# put in SuiteSparse_config
+/bin/cp -pr ../../SuiteSparse_config Out/$1_$2
+/bin/rm -rf  Out/$1_$2/SuiteSparse_config/xerbla
+/bin/cp -f  Make.$1 Out/$1_$2/SuiteSparse_config/SuiteSparse_config.mk
 
 # put in the main program
 /bin/cp ut.c Out/$1_$2
@@ -56,26 +66,3 @@ mkdir Out/$1_$2/UFconfig
 
 # compile and run
 ( cd Out/$1_$2 ; time make $3 > $1_$2.out )
-
-# delete the directory
-#### /bin/rm -rf Out/$1_$2
-
-# ( cd $1_$2 ; tail -5 ut.out > ut.tail ; 'rm' -rf ut.out )
-
-# for Solaris
-# ( cd Out/$1_$2 ; tcov -x ut.profile/UMFPACK/Source/umfp*.c )
-# ( cd Out/$1_$2 ; tcov -x ut.profile/UMFPACK/Source/umf_[0-c]*.c )
-# ( cd Out/$1_$2 ; tcov -x ut.profile/UMFPACK/Source/umf_[e-z]*.c )
-# ( cd Out/$1_$2 ; tcov -x ut.profile/AMD/Source/amd_[0-c]*.c )
-# ( cd Out/$1_$2 ; tcov -x ut.profile/AMD/Source/amd_de*.c )
-# ( cd Out/$1_$2 ; tcov -x ut.profile/AMD/Source/amd_[e-z]*.c )
-
-# grep -n "#####" Out/$1_$2/*cov > $1_$2.cov
-
-# cov Out/$1_$2/UMFPACK/Source/umfp*cov
-# cov Out/$1_$2/UMFPACK/Source/umf_[0-c]*cov
-# cov Out/$1_$2/UMFPACK/Source/umf_[e-z]*cov
-# cov Out/$1_$2/AMD/Source/amd_[0-c]*cov
-# cov Out/$1_$2/AMD/Source/amd_de*cov
-# cov Out/$1_$2/AMD/Source/amd_[e-z]*cov
-
diff --git a/UMFPACK/Tcov/DO.all b/UMFPACK/Tcov/DO.all
new file mode 100755
index 0000000..1949cb4
--- /dev/null
+++ b/UMFPACK/Tcov/DO.all
@@ -0,0 +1,54 @@
+#
+#
+
+# no BLAS, test for int overflow
+./DO 1 di
+./DO 1 dl
+./DO 1 zi
+./DO 1 zl
+
+# BLAS, do not test for int overflow
+./DO 2 di
+./DO 2 dl
+./DO 2 zi
+./DO 2 zl
+
+# no BLAS, test for int overflow, no reciprocal
+./DO 5 di
+./DO 5 dl
+./DO 5 zi
+./DO 5 zl
+
+# BLAS, do not test for int overflow.  No timers
+./DO 6 di
+./DO 6 dl
+./DO 6 zi
+./DO 6 zl
+
+# no BLAS, test for int overflow, no divide-by-zero
+./DO 7 di
+./DO 7 dl
+./DO 7 zi
+./DO 7 zl
+
+# BLAS, do not test for int overflow.  No divide-by-zero
+./DO 8 di
+./DO 8 dl
+./DO 8 zi
+./DO 8 zl
+
+# no BLAS, test for int overflow.  Optimizations turned on
+./DO 3 di run
+./DO 3 dl run
+./DO 3 zi run
+./DO 3 zl run
+
+# BLAS, do not test for int overflow.  Optimizations turned on
+./DO 4 di run
+./DO 4 dl run
+./DO 4 zi run
+./DO 4 zl run
+
+# coverage summary.  Any line with "24" is missed in all 24 tests.
+./covall > cover.out
+cat cover.out
diff --git a/UMFPACK/Tcov/DO.linux b/UMFPACK/Tcov/DO.linux
deleted file mode 100755
index 6df59d5..0000000
--- a/UMFPACK/Tcov/DO.linux
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-#
-
-# ILP32, no BLAS, test for int overflow
-./DO 1 di
-./DO 1 dl
-./DO 1 zi
-./DO 1 zl
-
-# ILP32, BLAS, do not test for int overflow
-./DO 2 di
-./DO 2 dl
-./DO 2 zi
-./DO 2 zl
-
-# ILP32, no BLAS, test for int overflow, no reciprocal
-./DO 5 di
-./DO 5 dl
-./DO 5 zi
-./DO 5 zl
-
-# ILP32, BLAS, do not test for int overflow.  No timers
-./DO 6 di
-./DO 6 dl
-./DO 6 zi
-./DO 6 zl
-
-# ILP32, no BLAS, test for int overflow, no divide-by-zero
-./DO 7 di
-./DO 7 dl
-./DO 7 zi
-./DO 7 zl
-
-# ILP32, BLAS, do not test for int overflow.  No divide-by-zero
-./DO 8 di
-./DO 8 dl
-./DO 8 zi
-./DO 8 zl
-
-
-# ILP32, no BLAS, test for int overflow.  Optimizations turned on
-./DO 1g di run
-./DO 1g dl run
-./DO 1g zi run
-./DO 1g zl run
-
-# ILP32, BLAS, do not test for int overflow.  Optimizations turned on
-./DO 2g di run
-./DO 2g dl run
-./DO 2g zi run
-./DO 2g zl run
-
-# coverage summary, include lines not tested by the above 24 coverage tests
-./covall | awk -f cover.awk > cover.out
-cat cover.out
diff --git a/UMFPACK/Tcov/DO.linux.Jan24 b/UMFPACK/Tcov/DO.linux.Jan24
deleted file mode 100644
index 591dcd9..0000000
--- a/UMFPACK/Tcov/DO.linux.Jan24
+++ /dev/null
@@ -1,465 +0,0 @@
-################################################################################
-Tcov test: 1 di
-################################################################################
-/bin/mv: cannot stat `Out/1_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 52.85
-62.928u 18.396s 1:40.67 80.7%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 dl
-################################################################################
-/bin/mv: cannot stat `Out/1_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.44
-55.002u 17.076s 1:47.74 66.8%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 zi
-################################################################################
-/bin/mv: cannot stat `Out/1_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.08
-94.574u 19.999s 2:12.31 86.5%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 zl
-################################################################################
-/bin/mv: cannot stat `Out/1_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 85.85
-94.178u 20.267s 2:20.97 81.1%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2 di
-################################################################################
-/bin/mv: cannot stat `Out/2_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 43.74
-54.336u 17.934s 1:27.28 82.7%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2 dl
-################################################################################
-/bin/mv: cannot stat `Out/2_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 42.64
-54.068u 17.068s 1:26.00 82.6%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2 zi
-################################################################################
-/bin/mv: cannot stat `Out/2_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 66.69
-75.192u 19.914s 1:51.89 84.9%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 2 zl
-################################################################################
-/bin/mv: cannot stat `Out/2_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 85.1
-93.816u 19.893s 2:09.71 87.6%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 di
-################################################################################
-/bin/mv: cannot stat `Out/3_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 6.76e-05 arc130 1.70e-08 omega2) cputime 49.18
-61.050u 19.339s 1:41.90 78.8%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 3 dl
-################################################################################
-/bin/mv: cannot stat `Out/3_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 42.82
-55.075u 18.830s 1:34.96 77.8%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 zi
-################################################################################
-/bin/mv: cannot stat `Out/3_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.97e-09 omega2) cputime 84.1
-93.431u 21.713s 2:25.67 79.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 zl
-################################################################################
-/bin/mv: cannot stat `Out/3_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 84.87
-94.509u 21.778s 2:24.09 80.6%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 4 di
-################################################################################
-/bin/mv: cannot stat `Out/4_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 6.76e-05 arc130 1.70e-08 omega2) cputime 49.36
-60.263u 19.414s 1:41.11 78.7%	0+0k 0+0io 52pf+0w
-################################################################################
-Tcov test: 4 dl
-################################################################################
-/bin/mv: cannot stat `Out/4_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.08
-54.299u 18.897s 1:34.41 77.5%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4 zi
-################################################################################
-/bin/mv: cannot stat `Out/4_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.97e-09 omega2) cputime 84.28
-92.899u 21.968s 2:18.25 83.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4 zl
-################################################################################
-/bin/mv: cannot stat `Out/4_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 84.85
-93.851u 21.883s 2:25.45 79.5%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 di
-################################################################################
-/bin/mv: cannot stat `Out/5_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 51.97
-62.156u 17.755s 1:42.14 78.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 dl
-################################################################################
-/bin/mv: cannot stat `Out/5_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 43.55
-54.453u 17.032s 1:32.39 77.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 zi
-################################################################################
-/bin/mv: cannot stat `Out/5_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 85.39
-93.782u 19.825s 2:15.94 83.5%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 zl
-################################################################################
-/bin/mv: cannot stat `Out/5_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 85.99
-94.275u 19.921s 2:17.38 83.1%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 di
-################################################################################
-/bin/mv: cannot stat `Out/6_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 0
-53.854u 17.179s 1:34.05 75.5%	0+0k 0+0io 14pf+0w
-################################################################################
-Tcov test: 6 dl
-################################################################################
-/bin/mv: cannot stat `Out/6_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 0
-53.387u 16.482s 1:31.79 76.1%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 zi
-################################################################################
-/bin/mv: cannot stat `Out/6_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 0
-74.485u 19.371s 1:58.33 79.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 zl
-################################################################################
-/bin/mv: cannot stat `Out/6_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 0
-93.386u 19.579s 2:23.34 78.7%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 7 di
-################################################################################
-/bin/mv: cannot stat `Out/7_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 52.13
-62.467u 17.903s 1:42.73 78.2%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 7 dl
-################################################################################
-/bin/mv: cannot stat `Out/7_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.24
-54.250u 17.355s 1:35.45 75.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 7 zi
-################################################################################
-/bin/mv: cannot stat `Out/7_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 85.36
-93.683u 20.174s 2:19.06 81.8%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 7 zl
-################################################################################
-/bin/mv: cannot stat `Out/7_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 85.8
-93.905u 20.169s 2:18.58 82.3%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 8 di
-################################################################################
-/bin/mv: cannot stat `Out/8_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 44.16
-54.565u 17.959s 1:46.61 68.0%	0+0k 0+0io 69pf+0w
-################################################################################
-Tcov test: 8 dl
-################################################################################
-/bin/mv: cannot stat `Out/8_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 42.92
-54.176u 17.162s 1:40.86 70.7%	0+0k 0+0io 50pf+0w
-################################################################################
-Tcov test: 8 zi
-################################################################################
-/bin/mv: cannot stat `Out/8_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 66.15
-74.497u 20.146s 1:59.21 79.3%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 8 zl
-################################################################################
-/bin/mv: cannot stat `Out/8_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 85.29
-93.557u 20.215s 2:22.60 79.7%	0+0k 0+0io 51pf+0w
-################################################################################
-Tcov test: 1g di
-################################################################################
-/bin/mv: cannot stat `Out/1g_di': No such file or directory
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 36.37
-73.776u 18.042s 1:56.90 78.5%	0+0k 0+0io 61pf+0w
-################################################################################
-Tcov test: 1g dl
-################################################################################
-/bin/mv: cannot stat `Out/1g_dl': No such file or directory
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 30.98
-69.221u 16.983s 1:46.11 81.2%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 1g zi
-################################################################################
-/bin/mv: cannot stat `Out/1g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.27
-104.147u 19.969s 2:30.77 82.3%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 1g zl
-################################################################################
-/bin/mv: cannot stat `Out/1g_zl': No such file or directory
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.11
-103.657u 19.929s 2:25.30 85.0%	0+0k 0+0io 32pf+0w
-################################################################################
-Tcov test: 2g di
-################################################################################
-/bin/mv: cannot stat `Out/2g_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.06e-10 (1.37e-07 shl0, 5.65e-05 arc130 1.98e-08 omega2) cputime 29.92
-68.398u 17.843s 1:45.71 81.5%	0+0k 0+0io 15pf+0w
-################################################################################
-Tcov test: 2g dl
-################################################################################
-/bin/mv: cannot stat `Out/2g_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 30.88
-70.119u 16.902s 1:46.55 81.6%	0+0k 0+0io 5pf+0w
-################################################################################
-Tcov test: 2g zi
-################################################################################
-/bin/mv: cannot stat `Out/2g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.29e-09 omega2) cputime 49.79
-86.583u 19.904s 2:07.59 83.4%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2g zl
-################################################################################
-/bin/mv: cannot stat `Out/2g_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 67.68
-104.484u 19.575s 2:25.99 84.9%	0+0k 0+0io 9pf+0w
-################################################################################
-Tcov test: 3g di
-################################################################################
-/bin/mv: cannot stat `Out/3g_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 8.27e-09 omega2) cputime 35.6
-74.788u 20.351s 2:20.99 67.4%	0+0k 0+0io 6pf+0w
-################################################################################
-Tcov test: 3g dl
-################################################################################
-/bin/mv: cannot stat `Out/3g_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.32
-70.806u 19.300s 2:01.74 74.0%	0+0k 0+0io 9pf+0w
-################################################################################
-Tcov test: 3g zi
-################################################################################
-/bin/mv: cannot stat `Out/3g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.57e-09 omega2) cputime 68.26
-105.768u 22.114s 2:31.22 84.5%	0+0k 0+0io 6pf+0w
-################################################################################
-Tcov test: 3g zl
-################################################################################
-/bin/mv: cannot stat `Out/3g_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.65
-106.120u 21.851s 2:31.80 84.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4g di
-################################################################################
-/bin/mv: cannot stat `Out/4g_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 8.27e-09 omega2) cputime 36.36
-74.674u 20.200s 1:58.26 80.2%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 4g dl
-################################################################################
-/bin/mv: cannot stat `Out/4g_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.27
-70.664u 19.197s 1:53.65 79.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4g zi
-################################################################################
-/bin/mv: cannot stat `Out/4g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.57e-09 omega2) cputime 68.53
-105.067u 22.053s 2:32.00 83.6%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 4g zl
-################################################################################
-/bin/mv: cannot stat `Out/4g_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 69.12
-105.423u 22.370s 2:33.38 83.3%	0+0k 0+0io 0pf+0w
diff --git a/UMFPACK/Tcov/DO.linux.out b/UMFPACK/Tcov/DO.linux.out
deleted file mode 100644
index 8b614e4..0000000
--- a/UMFPACK/Tcov/DO.linux.out
+++ /dev/null
@@ -1,475 +0,0 @@
-################################################################################
-Tcov test: 1 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 53.07
-63.358u 18.812s 2:43.04 50.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 dl
-################################################################################
-/bin/mv: cannot stat `Out/1_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.34
-54.784u 17.836s 2:23.80 50.4%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 zi
-################################################################################
-/bin/mv: cannot stat `Out/1_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.4
-95.249u 20.442s 3:50.15 50.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 zl
-################################################################################
-/bin/mv: cannot stat `Out/1_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.94
-94.957u 21.488s 3:50.65 50.4%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2 di
-################################################################################
-/bin/mv: cannot stat `Out/2_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 44.55
-54.828u 19.260s 2:24.94 51.1%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 2 dl
-################################################################################
-/bin/mv: cannot stat `Out/2_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.36
-54.572u 18.252s 2:25.22 50.1%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 2 zi
-################################################################################
-/bin/mv: cannot stat `Out/2_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 67.31
-75.985u 20.963s 3:11.22 50.6%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 2 zl
-################################################################################
-/bin/mv: cannot stat `Out/2_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.25
-94.456u 21.096s 3:49.94 50.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 di
-################################################################################
-/bin/mv: cannot stat `Out/3_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 6.76e-05 arc130 1.70e-08 omega2) cputime 50.18
-62.426u 21.521s 2:42.80 51.5%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 3 dl
-################################################################################
-/bin/mv: cannot stat `Out/3_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.28
-56.212u 20.576s 2:29.84 51.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 zi
-################################################################################
-/bin/mv: cannot stat `Out/3_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.97e-09 omega2) cputime 85.12
-95.214u 23.764s 3:53.59 50.9%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 zl
-################################################################################
-/bin/mv: cannot stat `Out/3_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.2
-96.296u 23.560s 3:59.43 50.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4 di
-################################################################################
-/bin/mv: cannot stat `Out/4_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 6.76e-05 arc130 1.70e-08 omega2) cputime 49.83
-61.486u 21.044s 2:42.11 50.9%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 4 dl
-################################################################################
-/bin/mv: cannot stat `Out/4_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.4
-55.564u 20.220s 2:29.76 50.6%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4 zi
-################################################################################
-/bin/mv: cannot stat `Out/4_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.97e-09 omega2) cputime 84.96
-94.538u 23.473s 3:53.76 50.4%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4 zl
-################################################################################
-/bin/mv: cannot stat `Out/4_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.08
-95.423u 23.338s 3:57.96 49.9%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 5 di
-################################################################################
-/bin/mv: cannot stat `Out/5_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 53
-63.501u 17.943s 2:41.69 50.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 dl
-################################################################################
-/bin/mv: cannot stat `Out/5_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 43.84
-55.084u 17.315s 2:30.54 48.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 zi
-################################################################################
-/bin/mv: cannot stat `Out/5_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 86.48
-94.907u 21.155s 3:49.30 50.6%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 zl
-################################################################################
-/bin/mv: cannot stat `Out/5_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 86.93
-94.868u 21.236s 3:52.25 49.9%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 di
-################################################################################
-/bin/mv: cannot stat `Out/6_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 0
-54.642u 17.587s 2:27.30 49.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 dl
-################################################################################
-/bin/mv: cannot stat `Out/6_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 0
-54.264u 17.736s 2:20.31 51.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 zi
-################################################################################
-/bin/mv: cannot stat `Out/6_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 0
-75.619u 21.189s 3:13.07 50.1%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 zl
-################################################################################
-/bin/mv: cannot stat `Out/6_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 0
-94.182u 21.320s 3:49.63 50.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 7 di
-################################################################################
-/bin/mv: cannot stat `Out/7_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 52.86
-63.384u 19.469s 2:43.77 50.5%	0+0k 0+0io 55pf+0w
-################################################################################
-Tcov test: 7 dl
-################################################################################
-/bin/mv: cannot stat `Out/7_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.86
-54.944u 19.117s 2:26.11 50.6%	0+0k 0+0io 58pf+0w
-################################################################################
-Tcov test: 7 zi
-################################################################################
-/bin/mv: cannot stat `Out/7_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.22
-94.791u 21.833s 3:52.75 50.1%	0+0k 0+0io 60pf+0w
-################################################################################
-Tcov test: 7 zl
-################################################################################
-/bin/mv: cannot stat `Out/7_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.55
-94.694u 22.253s 3:53.30 50.1%	0+0k 0+0io 60pf+0w
-################################################################################
-Tcov test: 8 di
-################################################################################
-/bin/mv: cannot stat `Out/8_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 44.71
-54.990u 20.140s 2:29.47 50.2%	0+0k 0+0io 60pf+0w
-################################################################################
-Tcov test: 8 dl
-################################################################################
-/bin/mv: cannot stat `Out/8_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.58
-54.709u 19.432s 2:26.94 50.4%	0+0k 0+0io 60pf+0w
-################################################################################
-Tcov test: 8 zi
-################################################################################
-/bin/mv: cannot stat `Out/8_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 67.5
-75.658u 21.959s 3:14.44 50.1%	0+0k 0+0io 60pf+0w
-################################################################################
-Tcov test: 8 zl
-################################################################################
-/bin/mv: cannot stat `Out/8_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.02
-94.103u 22.569s 3:53.56 49.9%	0+0k 0+0io 57pf+0w
-################################################################################
-Tcov test: 1g di
-################################################################################
-/bin/mv: cannot stat `Out/1g_di': No such file or directory
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 36.56
-74.372u 19.090s 2:57.83 52.5%	0+0k 0+0io 61pf+0w
-################################################################################
-Tcov test: 1g dl
-################################################################################
-/bin/mv: cannot stat `Out/1g_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.58
-70.071u 18.354s 2:48.39 52.5%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1g zi
-################################################################################
-/bin/mv: cannot stat `Out/1g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.92
-104.920u 21.081s 4:06.48 51.1%	0+0k 0+0io 41pf+0w
-################################################################################
-Tcov test: 1g zl
-################################################################################
-/bin/mv: cannot stat `Out/1g_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.64
-104.824u 21.455s 4:06.01 51.3%	0+0k 0+0io 63pf+0w
-################################################################################
-Tcov test: 2g di
-################################################################################
-/bin/mv: cannot stat `Out/2g_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.06e-10 (1.37e-07 shl0, 5.65e-05 arc130 1.98e-08 omega2) cputime 30.1
-68.093u 19.363s 2:46.78 52.4%	0+0k 0+0io 56pf+0w
-################################################################################
-Tcov test: 2g dl
-################################################################################
-/bin/mv: cannot stat `Out/2g_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.43
-70.067u 18.610s 2:47.30 53.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2g zi
-################################################################################
-/bin/mv: cannot stat `Out/2g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.29e-09 omega2) cputime 50.74
-86.726u 20.994s 3:28.71 51.6%	0+0k 0+0io 51pf+0w
-################################################################################
-Tcov test: 2g zl
-################################################################################
-/bin/mv: cannot stat `Out/2g_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.44
-104.450u 21.097s 4:04.16 51.4%	0+0k 0+0io 37pf+0w
-################################################################################
-Tcov test: 3g di
-################################################################################
-/bin/mv: cannot stat `Out/3g_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 8.27e-09 omega2) cputime 35.71
-75.583u 21.676s 3:00.23 53.9%	0+0k 0+0io 56pf+0w
-################################################################################
-Tcov test: 3g dl
-################################################################################
-/bin/mv: cannot stat `Out/3g_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.56
-72.222u 21.825s 2:53.57 54.1%	0+0k 0+0io 47pf+0w
-################################################################################
-Tcov test: 3g zi
-################################################################################
-/bin/mv: cannot stat `Out/3g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.57e-09 omega2) cputime 68.43
-106.248u 24.758s 4:07.88 52.8%	0+0k 0+0io 37pf+0w
-################################################################################
-Tcov test: 3g zl
-################################################################################
-/bin/mv: cannot stat `Out/3g_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.55
-106.854u 24.459s 4:10.50 52.4%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4g di
-################################################################################
-/bin/mv: cannot stat `Out/4g_di': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 8.27e-09 omega2) cputime 36.01
-74.958u 21.536s 3:02.32 52.9%	0+0k 0+0io 32pf+0w
-################################################################################
-Tcov test: 4g dl
-################################################################################
-/bin/mv: cannot stat `Out/4g_dl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.32
-70.889u 21.137s 2:49.23 54.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4g zi
-################################################################################
-/bin/mv: cannot stat `Out/4g_zi': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.57e-09 omega2) cputime 68.48
-105.539u 24.499s 4:08.27 52.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4g zl
-################################################################################
-/bin/mv: cannot stat `Out/4g_zl': No such file or directory
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.66
-106.270u 23.930s 4:06.74 52.7%	0+0k 0+0io 0pf+0w
diff --git a/UMFPACK/Tcov/DO.linux.out2 b/UMFPACK/Tcov/DO.linux.out2
deleted file mode 100644
index 1a5bf74..0000000
--- a/UMFPACK/Tcov/DO.linux.out2
+++ /dev/null
@@ -1,428 +0,0 @@
-################################################################################
-Tcov test: 1 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 58.08
-65.957u 21.743s 4:14.39 34.4%	0+0k 0+0io 56pf+0w
-################################################################################
-Tcov test: 1 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 47.61
-57.147u 19.907s 2:36.09 49.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 87.9
-96.431u 21.184s 5:53.60 33.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 87.89
-95.638u 21.373s 4:55.24 39.6%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 44.76
-55.884u 18.499s 2:30.76 49.3%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 2 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.58
-55.066u 17.643s 2:27.94 49.1%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 68.18
-76.674u 21.814s 3:18.86 49.5%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 2 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 87.68
-95.713u 21.981s 4:56.13 39.7%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 6.76e-05 arc130 1.70e-08 omega2) cputime 52.99
-63.135u 22.242s 4:26.20 32.0%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 3 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 45.62
-57.047u 21.076s 5:13.79 24.8%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.97e-09 omega2) cputime 85.67
-95.359u 23.257s 4:00.29 49.3%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 87.52
-96.462u 23.746s 5:27.63 36.6%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 4 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 6.76e-05 arc130 1.70e-08 omega2) cputime 50.86
-62.001u 21.885s 3:16.46 42.6%	0+0k 0+0io 55pf+0w
-################################################################################
-Tcov test: 4 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.79
-55.750u 20.866s 2:41.32 47.4%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 4 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.97e-09 omega2) cputime 85.85
-95.295u 24.087s 4:09.94 47.7%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 4 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.78
-95.469u 22.687s 3:56.27 50.0%	0+0k 0+0io 57pf+0w
-################################################################################
-Tcov test: 5 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 54.79
-64.073u 19.475s 3:18.85 42.0%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 5 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 44.3
-54.864u 18.963s 3:20.43 36.8%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 5 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 86.29
-94.274u 21.352s 5:45.72 33.4%	0+0k 0+0io 55pf+0w
-################################################################################
-Tcov test: 5 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 86.48
-94.614u 20.459s 4:14.05 45.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 0
-54.133u 18.431s 2:38.62 45.7%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 6 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 0
-53.685u 17.717s 2:18.76 51.4%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 6 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 0
-74.530u 20.591s 3:07.82 50.6%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 6 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 0
-93.008u 21.095s 3:47.37 50.1%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 7 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 52
-62.595u 18.109s 2:39.53 50.5%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 7 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.48
-54.331u 19.149s 2:32.31 48.2%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 7 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 86.22
-94.291u 22.044s 4:07.57 46.9%	0+0k 0+0io 35pf+0w
-################################################################################
-Tcov test: 7 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 85.77
-94.190u 21.226s 4:00.99 47.8%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 8 di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 2.67e-08 omega2) cputime 45.21
-55.138u 19.192s 2:53.18 42.9%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 8 dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 43.36
-54.424u 18.817s 2:51.32 42.7%	0+0k 0+0io 57pf+0w
-################################################################################
-Tcov test: 8 zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.81e-09 omega2) cputime 66.59
-74.890u 21.514s 4:01.29 39.9%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 8 zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 85.8
-93.133u 21.256s 4:41.13 40.6%	0+0k 0+0io 57pf+0w
-################################################################################
-Tcov test: 1g di
-################################################################################
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 36.45
-74.444u 18.155s 4:12.64 36.6%	0+0k 0+0io 4pf+0w
-################################################################################
-Tcov test: 1g dl
-################################################################################
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.88
-70.117u 18.138s 4:06.43 35.8%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 1g zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.88
-104.228u 21.576s 4:20.17 48.3%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 1g zl
-################################################################################
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.77
-103.874u 21.334s 4:04.77 51.1%	0+0k 0+0io 2pf+0w
-################################################################################
-Tcov test: 2g di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.06e-10 (1.37e-07 shl0, 5.65e-05 arc130 1.98e-08 omega2) cputime 30.14
-68.834u 18.537s 2:59.16 48.7%	0+0k 0+0io 11pf+0w
-################################################################################
-Tcov test: 2g dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 32.02
-70.467u 18.482s 2:49.67 52.4%	0+0k 0+0io 10pf+0w
-################################################################################
-Tcov test: 2g zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.29e-09 omega2) cputime 49.84
-86.839u 20.261s 3:27.29 51.6%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 2g zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 67.93
-104.755u 20.972s 4:03.31 51.6%	0+0k 0+0io 64pf+0w
-################################################################################
-Tcov test: 3g di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 8.27e-09 omega2) cputime 36.48
-75.152u 23.653s 3:10.42 51.8%	0+0k 0+0io 1pf+0w
-################################################################################
-Tcov test: 3g dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.52
-71.320u 21.093s 3:01.30 50.9%	0+0k 0+0io 0pf+0w
-################################################################################
-Tcov test: 3g zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.57e-09 omega2) cputime 67.75
-105.546u 22.796s 4:07.55 51.8%	0+0k 0+0io 40pf+0w
-################################################################################
-Tcov test: 3g zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.72
-106.281u 23.809s 4:12.22 51.5%	0+0k 0+0io 7pf+0w
-################################################################################
-Tcov test: 4g di
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 8.27e-09 omega2) cputime 35.69
-74.646u 22.580s 3:44.05 43.3%	0+0k 0+0io 46pf+0w
-################################################################################
-Tcov test: 4g dl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 31.21
-70.200u 19.713s 3:47.80 39.4%	0+0k 0+0io 9pf+0w
-################################################################################
-Tcov test: 4g zi
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 7.77e-05 arc130 2.57e-09 omega2) cputime 68.15
-105.008u 22.823s 5:40.93 37.4%	0+0k 0+0io 3pf+0w
-################################################################################
-Tcov test: 4g zl
-################################################################################
-make[2]: [umfpack_di_demo] Error 1 (ignored)
-make[2]: [umfpack_zi_demo] Error 1 (ignored)
-make[2]: [umfpack_dl_demo] Error 1 (ignored)
-make[2]: [umfpack_zl_demo] Error 1 (ignored)
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.77e-05 arc130 1.35e-09 omega2) cputime 68.44
-105.124u 22.060s 5:40.31 37.3%	0+0k 0+0io 0pf+0w
diff --git a/UMFPACK/Tcov/DO.linux2 b/UMFPACK/Tcov/DO.linux2
deleted file mode 100755
index c5529a2..0000000
--- a/UMFPACK/Tcov/DO.linux2
+++ /dev/null
@@ -1,108 +0,0 @@
-#
-#
-
-./DO 1 di
-./DO 1 dl
-./DO 1 zi
-./DO 1 zl
-
-./DO 2 di
-./DO 2 dl
-./DO 2 zi
-./DO 2 zl
-
-./DO 3 di
-./DO 3 dl
-./DO 3 zi
-./DO 3 zl
-
-./DO 4 di
-./DO 4 dl
-./DO 4 zi
-./DO 4 zl
-
-./DO 5 di
-./DO 5 dl
-./DO 5 zi
-./DO 5 zl
-
-./DO 6 di
-./DO 6 dl
-./DO 6 zi
-./DO 6 zl
-
-./DO 7 di
-./DO 7 dl
-./DO 7 zi
-./DO 7 zl
-
-./DO 8 di
-./DO 8 dl
-./DO 8 zi
-./DO 8 zl
-
-
-./DO 1g di run
-./DO 1g dl run
-./DO 1g zi run
-./DO 1g zl run
-
-./DO 2g di run
-./DO 2g dl run
-./DO 2g zi run
-./DO 2g zl run
-
-./DO 3g di run
-./DO 3g dl run
-./DO 3g zi run
-./DO 3g zl run
-
-./DO 4g di run
-./DO 4g dl run
-./DO 4g zi run
-./DO 4g zl run
-
-
-
-./DO 1i di run
-./DO 1i dl run
-./DO 1i zi run
-./DO 1i zl run
-
-./DO 2i di run
-./DO 2i dl run
-./DO 2i zi run
-./DO 2i zl run
-
-./DO 3i di run
-./DO 3i dl run
-./DO 3i zi run
-./DO 3i zl run
-
-./DO 4i di run
-./DO 4i dl run
-./DO 4i zi run
-./DO 4i zl run
-
-
-
-./DO 1n di run
-./DO 1n dl run
-./DO 1n zi run
-./DO 1n zl run
-
-./DO 2n di run
-./DO 2n dl run
-./DO 2n zi run
-./DO 2n zl run
-
-./DO 3n di run
-./DO 3n dl run
-./DO 3n zi run
-./DO 3n zl run
-
-./DO 4n di run
-./DO 4n dl run
-./DO 4n zi run
-./DO 4n zl run
-
diff --git a/UMFPACK/Tcov/DO.solaris b/UMFPACK/Tcov/DO.solaris
deleted file mode 100755
index 51b7ffc..0000000
--- a/UMFPACK/Tcov/DO.solaris
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-#
-#
-#
-
-
- ./DOsol s1 di run 
- ./DOsol s1 dl run 
- ./DOsol s1 zi run 
- ./DOsol s1 zl run 
- ./DOsol s2 di run 
- ./DOsol s2 dl run 
- ./DOsol s2 zi run 
- ./DOsol s2 zl run
-
- ./DOsol s3 di run 
- ./DOsol s3 dl run 
- ./DOsol s3 zi run 
- ./DOsol s3 zl run 
- ./DOsol s4 di run 
- ./DOsol s4 dl run 
- ./DOsol s4 zi run 
- ./DOsol s4 zl run 
-
- ./DOsol s5 di run 
- ./DOsol s5 dl run 
- ./DOsol s5 zi run 
- ./DOsol s5 zl run 
- ./DOsol n1 di run 
- ./DOsol n1 dl run 
- ./DOsol n1 zi run 
- ./DOsol n1 zl run 
-
- ./DOsol n2 di run 
- ./DOsol n2 dl run 
- ./DOsol n2 zi run 
- ./DOsol n2 zl run 
- ./DOsol n3 di run 
- ./DOsol n3 dl run 
- ./DOsol n3 zi run 
- ./DOsol n3 zl run 
-
- ./DOsol n4 di run 
- ./DOsol n4 dl run 
- ./DOsol n4 zi run 
- ./DOsol n4 zl run 
-
diff --git a/UMFPACK/Tcov/DO.solaris.out.Jan24 b/UMFPACK/Tcov/DO.solaris.out.Jan24
deleted file mode 100644
index e69de29..0000000
diff --git a/UMFPACK/Tcov/DO2 b/UMFPACK/Tcov/DO2
deleted file mode 100755
index aa6f65f..0000000
--- a/UMFPACK/Tcov/DO2
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-#
-
-
-DO 1g zi run
-DO 1g zl run
-DO 2g zl run
-DO 3g zl run
-DO 4g zl run
diff --git a/UMFPACK/Tcov/DO678 b/UMFPACK/Tcov/DO678
deleted file mode 100755
index ea373ec..0000000
--- a/UMFPACK/Tcov/DO678
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-#
-
-DO 6 di
-DO 6 dl
-DO 6 zi
-DO 6 zl
-
-DO 7 di
-DO 7 dl
-DO 7 zi
-DO 7 zl
-
-DO 8 di
-DO 8 dl
-DO 8 zi
-DO 8 zl
diff --git a/UMFPACK/Tcov/DOsol b/UMFPACK/Tcov/DOsol
deleted file mode 100755
index 5582679..0000000
--- a/UMFPACK/Tcov/DOsol
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/csh
-
-#-------------------------------------------------------------------------------
-
-mkdir SolOut/$1_$2
-DOsol2 $1 $2 $3 >& SolOut/$1_$2.stderr
diff --git a/UMFPACK/Tcov/DOsol2 b/UMFPACK/Tcov/DOsol2
deleted file mode 100755
index 4fd89ce..0000000
--- a/UMFPACK/Tcov/DOsol2
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/csh
-
-#-------------------------------------------------------------------------------
-
-echo '################################################################################'
-echo 'Tcov test:' $1 $2
-echo '################################################################################'
-
-# get a clean directory
-# /bin/mv Tests/$1_$2 `mktemp -d Trash2/XXXXXX`
-# mkdir SolOut/$1_$2
-
-# put in UMFPACK (excluding Tcov and MATLAB directories) and AMD
-mkdir SolOut/$1_$2/UMFPACK
-mkdir SolOut/$1_$2/UMFPACK/Doc
-/bin/cp -prL ../Source SolOut/$1_$2/UMFPACK
-/bin/cp -prL ../Lib SolOut/$1_$2/UMFPACK
-/bin/cp -prL ../Include SolOut/$1_$2/UMFPACK
-/bin/cp -prL ../Demo SolOut/$1_$2/UMFPACK
-/bin/cp -prL ../Makefile SolOut/$1_$2/UMFPACK/Makefile
-/bin/cp -prL ../Doc/License SolOut/$1_$2/UMFPACK/Doc
-/bin/cp -prL ../../AMD SolOut/$1_$2
-/bin/cp debug.* SolOut/$1_$2
-
-# put in the makefile
-/bin/cp GNUmakefile.$2 SolOut/$1_$2/GNUmakefile
-
-# put in the UFconfig.mk and UFconfig.h files
-mkdir SolOut/$1_$2/UFconfig
-/bin/cp -f Make.$1 SolOut/$1_$2/UFconfig/UFconfig.mk
-/bin/cp -f ../../UFconfig/UFconfig.h SolOut/$1_$2/UFconfig
-
-# put in the main program
-/bin/cp ut.c SolOut/$1_$2
-
-# put in the test matrices
-/bin/cp -f badnum*.umf SolOut/$1_$2
-/bin/cp -f badsym*.umf SolOut/$1_$2
-/bin/cp -pr TestMat SolOut/$1_$2
-
-# compile and run
-( cd SolOut/$1_$2 ; time make $3 > $1_$2.out )
-
-# for Solaris
-( cd SolOut/$1_$2 ; tail -5 ut.out > $1_$2.tail )
-( cd SolOut/$1_$2 ; tcov -x ut.profile */Source/*.c )
-( cd SolOut/$1_$2 ; grep -n "#####" *cov > $1_$2.cov )
-
-# /bin/rm -rf SolOut/$1_$2
-
-# cov $1_$2/UMFPACK/Source/umfp*cov
-# cov $1_$2/UMFPACK/Source/umf_[0-c]*cov
-# cov $1_$2/UMFPACK/Source/umf_[e-z]*cov
-# cov $1_$2/AMD/Source/amd_[0-c]*cov
-# cov $1_$2/AMD/Source/amd_de*cov
-# cov $1_$2/AMD/Source/amd_[e-z]*cov
-
diff --git a/UMFPACK/Tcov/Demo_Makefile b/UMFPACK/Tcov/Demo_Makefile
index 5063c2f..baa51f0 100644
--- a/UMFPACK/Tcov/Demo_Makefile
+++ b/UMFPACK/Tcov/Demo_Makefile
@@ -7,26 +7,48 @@
 
 default: libs run
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
-C = $(CC) $(CFLAGS) $(UMFPACK_CONFIG) -I../Include -I../../AMD/Include \
-    -I../../UFconfig
+C = $(CC) $(CF) $(UMFPACK_CONFIG) -I../Include -I../../AMD/Include \
+    -I../../SuiteSparse_config
 
-INC = ../Include/umfpack.h ../../AMD/Include/amd.h ../../UFconfig/UFconfig.h
+INC = ../Include/umfpack.h ../../AMD/Include/amd.h ../../SuiteSparse_config/SuiteSparse_config.h
 
-LIBS = $(BLAS) $(XERBLA) $(LIB)
+LIBS = $(LAPACK) $(BLAS) $(XERBLA) $(LIB)
 
 ../Lib/libumfpack.a:
-	( cd ../Source ; $(MAKE) )
+	( cd ../Lib && $(MAKE) )
+
+../../SuiteSparse_config/libsuitesparseconfig.a:
+	( cd ../../SuiteSparse_config && $(MAKE) )
 
 ../../AMD/Lib/libamd.a:
-	( cd ../../AMD ; $(MAKE) library )
+	( cd ../../AMD && $(MAKE) library )
+
+../../CHOLMOD/Lib/libcholmod.a:
+	( cd ../../CHOLMOD && $(MAKE) library )
+
+../../COLAMD/Lib/libcolamd.a:
+	( cd ../../COLAMD && $(MAKE) library )
+
+../../CCOLAMD/Lib/libccolamd.a:
+	( cd ../../CCOLAMD && $(MAKE) library )
+
+../../CAMD/Lib/libcamd.a:
+	( cd ../../CAMD && $(MAKE) library )
+
+../../metis-4.0/libmetis.a:
+	( cd ../../metis-4.0/Lib && $(MAKE) )
 
-UMFPACK = ../Lib/libumfpack.a ../../AMD/Lib/libamd.a
+UMFPACK = ../Lib/libumfpack.a ../../AMD/Lib/libamd.a \
+    ../../CHOLMOD/Lib/libcholmod.a ../../COLAMD/Lib/libcolamd.a \
+    ../../CAMD/Lib/libcamd.a ../../metis-4.0/libmetis.a \
+    ../../CCOLAMD/Lib/libccolamd.a \
+    ../../SuiteSparse_config/libsuitesparseconfig.a
 
 libs:
-	( cd ../Source ; $(MAKE) )
-	( cd ../../AMD ; $(MAKE) library )
+	( cd ../Lib && $(MAKE) )
+	( cd ../../AMD && $(MAKE) library )
 
 #-------------------------------------------------------------------------------
 # Create the demo programs, run them, and compare the output
@@ -54,7 +76,7 @@ umfpack_di_demo.c: umfpack_xx_demo.c umfpack_di_demo.sed
 umfpack_di_demo: umfpack_di_demo.c $(INC) $(UMFPACK)
 	$(C) -o umfpack_di_demo umfpack_di_demo.c $(UMFPACK) $(LIBS)
 
-# double-precision, UF_long verion:
+# double-precision, SuiteSparse_long verion:
 umfpack_dl_demo.c: umfpack_xx_demo.c umfpack_dl_demo.sed
 	- sed -f umfpack_dl_demo.sed < umfpack_xx_demo.c > umfpack_dl_demo.c
 
@@ -68,7 +90,7 @@ umfpack_zi_demo.c: umfpack_xx_demo.c umfpack_zi_demo.sed
 umfpack_zi_demo: umfpack_zi_demo.c $(INC) $(UMFPACK)
 	$(C) -o umfpack_zi_demo umfpack_zi_demo.c $(UMFPACK) $(LIBS)
 
-# complex, UF_long verion:
+# complex, SuiteSparse_long verion:
 umfpack_zl_demo.c: umfpack_xx_demo.c umfpack_zl_demo.sed
 	- sed -f umfpack_zl_demo.sed < umfpack_xx_demo.c > umfpack_zl_demo.c
 
@@ -171,6 +193,7 @@ purge: clean
 	- $(RM) umf4hb umf4zhb *.umf my_umf4hb.out
 	- $(RM) umf4hb64 my_umf4hb64.out my_umf4zhb.out
 	- $(RM) umf4 readhb readhb_nozeros readhb_size tmp/*
+	- $(RM) -r *.dSYM
 
 clean:
 	- $(RM) $(CLEAN)
diff --git a/UMFPACK/Tcov/GNUmakefile.di b/UMFPACK/Tcov/GNUmakefile.di
index 84ab564..51be59f 100644
--- a/UMFPACK/Tcov/GNUmakefile.di
+++ b/UMFPACK/Tcov/GNUmakefile.di
@@ -1,6 +1,6 @@
 all: go
 
-include UFconfig/UFconfig.mk
+include SuiteSparse_config/SuiteSparse_config.mk
 
 go: run
 	- ( cd UMFPACK/Source ; ./ucov.di )
@@ -12,9 +12,9 @@ run: prog
 	#- $(RM) ut.out
 
 prog:
-	( cd UMFPACK ; make library )
-	( cd AMD ; make library )
-	$(CC) -DDINT $(CFLAGS) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -IUFconfig -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a $(LIB)
+	( cd UMFPACK ; $(MAKE) library )
+	( cd AMD ; $(MAKE) library )
+	$(CC) -DDINT $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -ISuiteSparse_config -o ut ut.c UMFPACK/Source/libumfpack.a AMD/Source/libamd.a CHOLMOD/Lib/libcholmod.a CAMD/Lib/libcamd.a COLAMD/Lib/libcolamd.a metis-4.0/libmetis.a CCOLAMD/Lib/libccolamd.a SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 utcov:
 	- ( cd UMFPACK/Source ; ./ucov.di )
@@ -22,5 +22,5 @@ utcov:
 
 
 purge:
-	( cd UMFPACK ; make purge )
-	( cd AMD ; make purge )
+	( cd UMFPACK ; $(MAKE) purge )
+	( cd AMD ; $(MAKE) purge )
diff --git a/UMFPACK/Tcov/GNUmakefile.dl b/UMFPACK/Tcov/GNUmakefile.dl
index 174b905..6f6c564 100644
--- a/UMFPACK/Tcov/GNUmakefile.dl
+++ b/UMFPACK/Tcov/GNUmakefile.dl
@@ -1,6 +1,6 @@
 all: go
 
-include UFconfig/UFconfig.mk
+include SuiteSparse_config/SuiteSparse_config.mk
 
 go: run
 	- ( cd UMFPACK/Source ; ./ucov.dl )
@@ -12,14 +12,15 @@ run: prog
 	#- $(RM) ut.out
 
 prog:
-	( cd UMFPACK ; make library )
-	( cd AMD ; make library )
-	$(CC) -DDLONG $(CFLAGS) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -IUFconfig -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a $(LIB)
+	( cd UMFPACK ; $(MAKE) library )
+	( cd AMD ; $(MAKE) library )
+	$(CC) -DDLONG $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -ISuiteSparse_config -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a CHOLMOD/Lib/libcholmod.a CAMD/Lib/libcamd.a COLAMD/Lib/libcolamd.a metis-4.0/libmetis.a CCOLAMD/Lib/libccolamd.a SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 utcov:
 	- ( cd UMFPACK/Source ; ./ucov.dl )
 	- ( cd AMD/Source     ; ./acov.dl )
 
+
 purge:
-	( cd UMFPACK ; make purge )
-	( cd AMD ; make purge )
+	( cd UMFPACK ; $(MAKE) purge )
+	( cd AMD ; $(MAKE) purge )
diff --git a/UMFPACK/Tcov/GNUmakefile.zi b/UMFPACK/Tcov/GNUmakefile.zi
index 040d1a0..6bf7c1e 100644
--- a/UMFPACK/Tcov/GNUmakefile.zi
+++ b/UMFPACK/Tcov/GNUmakefile.zi
@@ -1,6 +1,6 @@
 all: go
 
-include UFconfig/UFconfig.mk
+include SuiteSparse_config/SuiteSparse_config.mk
 
 go: run
 	- ( cd UMFPACK/Source ; ./ucov.zi )
@@ -12,14 +12,15 @@ run: prog
 	#- $(RM) ut.out
 
 prog:
-	( cd UMFPACK ; make library )
-	( cd AMD ; make library )
-	$(CC) -DZINT $(CFLAGS) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -IUFconfig -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a $(LIB)
+	( cd UMFPACK ; $(MAKE) library )
+	( cd AMD ; $(MAKE) library )
+	$(CC) -DZINT $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -ISuiteSparse_config -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a CHOLMOD/Lib/libcholmod.a CAMD/Lib/libcamd.a COLAMD/Lib/libcolamd.a metis-4.0/libmetis.a CCOLAMD/Lib/libccolamd.a SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 utcov:
 	- ( cd UMFPACK/Source ; ./ucov.zi )
 	- ( cd AMD/Source     ; ./acov.zi )
 
+
 purge:
-	( cd UMFPACK ; make purge )
-	( cd AMD ; make purge )
+	( cd UMFPACK ; $(MAKE) purge )
+	( cd AMD ; $(MAKE) purge )
diff --git a/UMFPACK/Tcov/GNUmakefile.zl b/UMFPACK/Tcov/GNUmakefile.zl
index 1a590cd..80c4b70 100644
--- a/UMFPACK/Tcov/GNUmakefile.zl
+++ b/UMFPACK/Tcov/GNUmakefile.zl
@@ -1,6 +1,6 @@
 all: go
 
-include UFconfig/UFconfig.mk
+include SuiteSparse_config/SuiteSparse_config.mk
 
 go: run
 	- ( cd UMFPACK/Source ; ./ucov.zl )
@@ -12,14 +12,15 @@ run: prog
 	#- $(RM) ut.out
 
 prog:
-	( cd UMFPACK ; make library )
-	( cd AMD ; make library )
-	$(CC) -DZLONG $(CFLAGS) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -IUFconfig -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a $(LIB)
+	( cd UMFPACK ; $(MAKE) library )
+	( cd AMD ; $(MAKE) library )
+	$(CC) -DZLONG $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -ISuiteSparse_config -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a CHOLMOD/Lib/libcholmod.a CAMD/Lib/libcamd.a COLAMD/Lib/libcolamd.a metis-4.0/libmetis.a CCOLAMD/Lib/libccolamd.a SuiteSparse_config/libsuitesparseconfig.a $(LIB)
 
 utcov:
 	- ( cd UMFPACK/Source ; ./ucov.zl )
 	- ( cd AMD/Source     ; ./acov.zl )
 
+
 purge:
-	( cd UMFPACK ; make purge )
-	( cd AMD ; make purge )
+	( cd UMFPACK ; $(MAKE) purge )
+	( cd AMD ; $(MAKE) purge )
diff --git a/UMFPACK/Tcov/Make.1 b/UMFPACK/Tcov/Make.1
index 048b240..6d32474 100644
--- a/UMFPACK/Tcov/Make.1
+++ b/UMFPACK/Tcov/Make.1
@@ -1,17 +1,15 @@
 #===============================================================================
-# ILP32 mode, no BLAS, test for integer overflow.
+# no BLAS, test for integer overflow.
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
+CF = -O0 -g -ftest-coverage -fprofile-arcs -O0
 UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING
-LIB = -lm
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.1g b/UMFPACK/Tcov/Make.1g
deleted file mode 100644
index 3c29ce1..0000000
--- a/UMFPACK/Tcov/Make.1g
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# ILP32 mode, no BLAS, test for integer overflow.
-#===============================================================================
-
-CC = gcc
-CFLAGS = -O3 -fPIC
-UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.1i b/UMFPACK/Tcov/Make.1i
deleted file mode 100644
index 905e265..0000000
--- a/UMFPACK/Tcov/Make.1i
+++ /dev/null
@@ -1,21 +0,0 @@
-#===============================================================================
-# ILP32 mode, no BLAS, test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi -O3 -ip -tpp7 -xW -vec_report0
-
-UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING
-# LIB = -lm -lunwind -lcprts
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.1n b/UMFPACK/Tcov/Make.1n
deleted file mode 100644
index f731477..0000000
--- a/UMFPACK/Tcov/Make.1n
+++ /dev/null
@@ -1,21 +0,0 @@
-#===============================================================================
-# ILP32 mode, no BLAS, test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi
-
-UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING
-# LIB = -lm -lunwind -lcprts
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.2 b/UMFPACK/Tcov/Make.2
index 1971256..608df87 100644
--- a/UMFPACK/Tcov/Make.2
+++ b/UMFPACK/Tcov/Make.2
@@ -1,17 +1,15 @@
 #===============================================================================
-# ILP32 mode, BLAS, do not test for integer overflow.
+# BLAS, do not test for integer overflow.
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
+CF = -O0 -g -ftest-coverage -fprofile-arcs -O0
 UMFPACK_CONFIG = -DTESTING
-LIB = -lblas -lgfortran -lgfortranbegin -lm
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.2g b/UMFPACK/Tcov/Make.2g
deleted file mode 100644
index 5997a19..0000000
--- a/UMFPACK/Tcov/Make.2g
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# ILP32 mode, BLAS, do not test for integer overflow.
-#===============================================================================
-
-CC = gcc
-CFLAGS = -O3 -fPIC
-UMFPACK_CONFIG = -DTESTING
-LIB = -lblas -lgfortran -lgfortranbegin -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.2i b/UMFPACK/Tcov/Make.2i
deleted file mode 100644
index 7d459ca..0000000
--- a/UMFPACK/Tcov/Make.2i
+++ /dev/null
@@ -1,20 +0,0 @@
-#===============================================================================
-# ILP32 mode, BLAS, do not test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi -O3 -ip -tpp7 -xW -vec_report0
-
-UMFPACK_CONFIG = -DTESTING
-LIB = -lblas -lgfortran -lgfortranbegin -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.2n b/UMFPACK/Tcov/Make.2n
deleted file mode 100644
index 922f96a..0000000
--- a/UMFPACK/Tcov/Make.2n
+++ /dev/null
@@ -1,20 +0,0 @@
-#===============================================================================
-# ILP32 mode, BLAS, do not test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi
-
-UMFPACK_CONFIG = -DTESTING
-LIB = -lblas -lgfortran -lgfortranbegin -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.3 b/UMFPACK/Tcov/Make.3
index 16e130e..b0b0d60 100644
--- a/UMFPACK/Tcov/Make.3
+++ b/UMFPACK/Tcov/Make.3
@@ -1,17 +1,15 @@
 #===============================================================================
-# ILP32 mode, C interface /ATLAS BLAS, do not test for integer overflow.
+# no BLAS, test for integer overflow.
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
-UMFPACK_CONFIG = -DCBLAS -DTESTING -I/cise/research/sparse/Install/ATLAS/Linux_P4SSE2/include
-LIB = -lcblas -latlas -lm
+CF = -O3 -fPIC
+UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.3g b/UMFPACK/Tcov/Make.3g
deleted file mode 100644
index 074eaad..0000000
--- a/UMFPACK/Tcov/Make.3g
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# ILP32 mode, C interface /ATLAS BLAS, do not test for integer overflow.
-#===============================================================================
-
-CC = gcc
-CFLAGS = -O3 -fPIC
-UMFPACK_CONFIG = -DCBLAS -DTESTING -I/cise/research/sparse/Install/ATLAS/Linux_P4SSE2/include
-LIB = -lcblas -latlas -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.3i b/UMFPACK/Tcov/Make.3i
deleted file mode 100644
index a61df3d..0000000
--- a/UMFPACK/Tcov/Make.3i
+++ /dev/null
@@ -1,20 +0,0 @@
-#===============================================================================
-# ILP32 mode, C interface /ATLAS BLAS, do not test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi -O3 -ip -tpp7 -xW -vec_report0
-
-UMFPACK_CONFIG = -DCBLAS -DTESTING -I/cise/research/sparse/Install/ATLAS/Linux_P4SSE2/include
-LIB = -lcblas -latlas -lm 
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.3n b/UMFPACK/Tcov/Make.3n
deleted file mode 100644
index 02b7e6b..0000000
--- a/UMFPACK/Tcov/Make.3n
+++ /dev/null
@@ -1,20 +0,0 @@
-#===============================================================================
-# ILP32 mode, C interface /ATLAS BLAS, do not test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi
-
-UMFPACK_CONFIG = -DCBLAS -DTESTING -I/cise/research/sparse/Install/ATLAS/Linux_P4SSE2/include
-LIB = -lcblas -latlas -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.4 b/UMFPACK/Tcov/Make.4
index cc8fd66..83bdc02 100644
--- a/UMFPACK/Tcov/Make.4
+++ b/UMFPACK/Tcov/Make.4
@@ -1,18 +1,15 @@
 #===============================================================================
-# ILP32 mode, Fortran interface to ATLAS BLAS, do not test for integer overflow.
+# BLAS, do not test for integer overflow.
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
+CF = -O3 -fPIC
 UMFPACK_CONFIG = -DTESTING
-CONFIG = -DTESTING -I/cise/research/sparse/Install/ATLAS/Linux_P4SSE2/include
-LIB = -lf77blas -latlas -lfrtbegin -lg2c -lm
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.4g b/UMFPACK/Tcov/Make.4g
deleted file mode 100644
index 272633f..0000000
--- a/UMFPACK/Tcov/Make.4g
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# ILP32 mode, Fortran interface to ATLAS BLAS, do not test for integer overflow.
-#===============================================================================
-
-CC = gcc
-CFLAGS = -O3 -fPIC
-UMFPACK_CONFIG = -DTESTING -I/cise/research/sparse/Install/ATLAS/Linux_P4SSE2/include
-LIB = -lf77blas -latlas -lfrtbegin -lg2c -lm 
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.4i b/UMFPACK/Tcov/Make.4i
deleted file mode 100644
index 9fd0203..0000000
--- a/UMFPACK/Tcov/Make.4i
+++ /dev/null
@@ -1,20 +0,0 @@
-#===============================================================================
-# ILP32 mode, Fortran interface to ATLAS BLAS, do not test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi -O3 -ip -tpp7 -xW -vec_report0
-
-UMFPACK_CONFIG = -DTESTING
-LIB = -lf77blas -latlas -lfrtbegin -lg2c -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.4n b/UMFPACK/Tcov/Make.4n
deleted file mode 100644
index f674ac5..0000000
--- a/UMFPACK/Tcov/Make.4n
+++ /dev/null
@@ -1,20 +0,0 @@
-#===============================================================================
-# ILP32 mode, Fortran interface to ATLAS BLAS, do not test for integer overflow.
-#===============================================================================
-
-# Using Intel's icc compiler:
-CC = icc
-CFLAGS = -ansi
-
-UMFPACK_CONFIG = -DTESTING
-LIB = -lf77blas -latlas -lfrtbegin -lg2c -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.5 b/UMFPACK/Tcov/Make.5
index e103014..f9390e7 100644
--- a/UMFPACK/Tcov/Make.5
+++ b/UMFPACK/Tcov/Make.5
@@ -1,17 +1,15 @@
 #===============================================================================
-# ILP32 mode, no BLAS, test for integer overflow, no reciprocal
+# no BLAS, test for integer overflow, no reciprocal
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
+CF = -O0 -g -ftest-coverage -fprofile-arcs -O0
 UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING -DNRECIPROCAL
-LIB = -lm 
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.6 b/UMFPACK/Tcov/Make.6
index 30c8773..0ed2faa 100644
--- a/UMFPACK/Tcov/Make.6
+++ b/UMFPACK/Tcov/Make.6
@@ -1,17 +1,15 @@
 #===============================================================================
-# ILP32 mode, BLAS, do not test for integer overflow.  No timers
+# BLAS, do not test for integer overflow.  No timers
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
-UMFPACK_CONFIG = -DTESTING -DNO_TIMER
-LIB = -lblas -lgfortran -lgfortranbegin -lm
+CF = -O0 -g -ftest-coverage -fprofile-arcs -O0
+UMFPACK_CONFIG = -DTESTING -DNTIMER
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.7 b/UMFPACK/Tcov/Make.7
index f715beb..642c88c 100644
--- a/UMFPACK/Tcov/Make.7
+++ b/UMFPACK/Tcov/Make.7
@@ -1,17 +1,15 @@
 #===============================================================================
-# ILP32 mode, no BLAS, test for integer overflow.  No divide by zero
+# no BLAS, test for integer overflow.  No divide by zero
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
+CF = -O0 -g -ftest-coverage -fprofile-arcs -O0
 UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING -DNO_DIVIDE_BY_ZERO
-LIB = -lm 
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.8 b/UMFPACK/Tcov/Make.8
index d1e49f9..71d78b8 100644
--- a/UMFPACK/Tcov/Make.8
+++ b/UMFPACK/Tcov/Make.8
@@ -1,17 +1,15 @@
 #===============================================================================
-# ILP32 mode, BLAS, do not test for integer overflow. No divide by zero.
+# BLAS, do not test for integer overflow. No divide by zero.
 #===============================================================================
 
 CC = gcc
-CFLAGS = -O0 -ftest-coverage -fprofile-arcs -O0
+CF = -O0 -g -ftest-coverage -fprofile-arcs -O0
 UMFPACK_CONFIG = -DTESTING -DNO_DIVIDE_BY_ZERO
-LIB = -lblas -lgfortran -lgfortranbegin -lm
+LIB = -llapack -lblas -lgfortran -lgfortranbegin -lm -lrt
 
 RANLIB = ranlib
 MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
+ARCHIVE = ar rv
 
 #===============================================================================
 
diff --git a/UMFPACK/Tcov/Make.n1 b/UMFPACK/Tcov/Make.n1
deleted file mode 100644
index ef57211..0000000
--- a/UMFPACK/Tcov/Make.n1
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris ILP32 mode, no BLAS, test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -xO5 -xlibmil -Xc -xdepend -dalign
-UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.n2 b/UMFPACK/Tcov/Make.n2
deleted file mode 100644
index b23f197..0000000
--- a/UMFPACK/Tcov/Make.n2
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris ILP32 mode, Sunperf BLAS, no test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -xO5 -xlibmil -Xc -xdepend -dalign
-UMFPACK_CONFIG = -DTESTING
-LIB = -xlic_lib=sunperf -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.n3 b/UMFPACK/Tcov/Make.n3
deleted file mode 100644
index 7fc1b46..0000000
--- a/UMFPACK/Tcov/Make.n3
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris LP64 mode, no BLAS, do not test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -xO5 -xlibmil -Xc -xdepend -dalign
-UMFPACK_CONFIG = -DNBLAS -DLP64 -xarch=v9 -DTESTING
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.n4 b/UMFPACK/Tcov/Make.n4
deleted file mode 100644
index f1b437d..0000000
--- a/UMFPACK/Tcov/Make.n4
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris LP64 mode, Sun Performance BLAS, do not test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -xO5 -xlibmil -Xc -xdepend -dalign
-UMFPACK_CONFIG = -DLP64 -xarch=v9 -DTESTING
-LIB = -xlic_lib=sunperf -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.s1 b/UMFPACK/Tcov/Make.s1
deleted file mode 100644
index 1e5deb4..0000000
--- a/UMFPACK/Tcov/Make.s1
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris ILP32 mode, no BLAS, test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -Xc -g -xprofile=tcov -dalign
-UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.s2 b/UMFPACK/Tcov/Make.s2
deleted file mode 100644
index b8bdfc3..0000000
--- a/UMFPACK/Tcov/Make.s2
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris ILP32 mode, Sunperf BLAS, no test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -Xc -g -xprofile=tcov -dalign
-UMFPACK_CONFIG = -DTESTING
-LIB = -xlic_lib=sunperf -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.s3 b/UMFPACK/Tcov/Make.s3
deleted file mode 100644
index ecce67f..0000000
--- a/UMFPACK/Tcov/Make.s3
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris LP64 mode, no BLAS, do not test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -Xc -g -xprofile=tcov -dalign
-UMFPACK_CONFIG = -DNBLAS -DLP64 -xarch=v9 -DTESTING
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.s4 b/UMFPACK/Tcov/Make.s4
deleted file mode 100644
index 9185fdb..0000000
--- a/UMFPACK/Tcov/Make.s4
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris LP64 mode, Sun Performance BLAS, do not test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -Xc -g -xprofile=tcov -dalign
-UMFPACK_CONFIG = -DLP64 -xarch=v9 -DTESTING
-LIB = -xlic_lib=sunperf -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make.s5 b/UMFPACK/Tcov/Make.s5
deleted file mode 100644
index c0f72ba..0000000
--- a/UMFPACK/Tcov/Make.s5
+++ /dev/null
@@ -1,18 +0,0 @@
-#===============================================================================
-# Solaris ILP32 mode, no BLAS, test for integer overflow.
-#===============================================================================
-
-CC = cc
-CFLAGS = -Xc -g -xprofile=tcov -dalign
-UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING -DNRECIPROCAL
-LIB = -lm
-
-RANLIB = ranlib
-MV = mv -f
-RM = rm -f
-MEX = mex -inline -g
-AR = ar cr
-
-#===============================================================================
-
-CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out
diff --git a/UMFPACK/Tcov/Make_file b/UMFPACK/Tcov/Make_file
deleted file mode 100644
index 7c50f48..0000000
--- a/UMFPACK/Tcov/Make_file
+++ /dev/null
@@ -1,24 +0,0 @@
-all: go
-
-include UFconfig/UFconfig.mk
-
-go: prog
-	- ut > ut.out
-	- tail ut.out
-	#- $(RM) ut.out
-	- ( cd UMFPACK/Source ; gcovs umf*.c )
-	- ( cd AMD/Source     ; gcovs amd*.c )
-
-prog:
-	( cd UMFPACK ; make library )
-	( cd AMD ; make library )
-	$(CC) -DDINT $(CFLAGS) $(UMFPACK_CONFIG) -IUMFPACK/Source -IUMFPACK/Include -IAMD/Source -IAMD/Include -o ut ut.c UMFPACK/Lib/libumfpack.a AMD/Lib/libamd.a $(LIB)
-
-utcov:
-	- ( cd UMFPACK/Source ; gcovs umf*.c )
-	- ( cd AMD/Source     ; gcovs amd*.c )
-
-
-purge:
-	( cd UMFPACK ; make purge )
-	( cd AMD ; make purge )
diff --git a/UMFPACK/Tcov/Makefile b/UMFPACK/Tcov/Makefile
index 9ac2a94..142c8c7 100644
--- a/UMFPACK/Tcov/Makefile
+++ b/UMFPACK/Tcov/Makefile
@@ -1,16 +1,14 @@
 
-include ../../UFconfig/UFconfig.mk
+include ../../SuiteSparse_config/SuiteSparse_config.mk
 
 linux: distclean
-	./DO.linux
+	./DO.all
 
-sol: distclean
-	./DO.solaris
+clean:
+	- $(RM) -r Out/*
 
 distclean:
-	- ( cd .. ; make purge )
-	- ( cd ../../AMD ; make purge )
-	- $(RM) -rf Out/*
+	- $(RM) -r Out/* cover.out
 
 purge: distclean
 
diff --git a/UMFPACK/Tcov/README.txt b/UMFPACK/Tcov/README.txt
index 329dcc2..4cff69c 100644
--- a/UMFPACK/Tcov/README.txt
+++ b/UMFPACK/Tcov/README.txt
@@ -1,76 +1,103 @@
 This is the UMFPACK Tcov directory.  It runs a large number of tests on
-UMFPACK and checks the statement coverage (using gcc and gcov on Linux,
-or tcov on Solaris).
-
-You must first do "make purge" in AMD and UMFPACK.  You must also make
-sure the "Out" symbolic link is a valid link.  It should point to a large
-scratch space, for temporary files.  Finally, type DO.linux or DO.solaris.
-
-Alternatively, just type "make" in this directory, for Linux, or "make sol"
-for Solaris.
-
-The last line of each */ut.out file should read
-ALL TESTS PASSED largest maxrnorm 1e-07
-These lines are summarized at the end of the "DO.linux" test.
+UMFPACK and checks the statement coverage (using gcc and gcov on Linux
+or the Mac, or tcov on Solaris).
+
+Timothy A. Davis, http://www.suitesparse.com
+
+METIS is required for this test.
+
+You must first do "make purge" in AMD and UMFPACK.  Then type "make" in
+this directory.
+
+You terminal output will look something like this:
+
+################################################################################
+Tcov test: 1 di
+################################################################################
+make[2]: [run] Error 1 (ignored)
+make[2]: [run] Error 1 (ignored)
+make[2]: [run] Error 1 (ignored)
+make[2]: [run] Error 1 (ignored)
+ALL TESTS PASSED: rnorm 2.22e-10 (1.79e-07 shl0, 9.16e-05 arc130 8.81e-08 omega2) cputime 45.7908
+58.048u 26.549s 1:59.54 70.7%   0+0k 3+340io 0pf+0w
+################################################################################
+Tcov test: 1 dl
+################################################################################
+...
+
+The ignored errors are OK (these are from diff's that do not need to be
+identical, since the output files include timing information, sizeof(void *)
+which can differ on different platforms, and so on).  You may also see warnings
+that *dump.o files have no symbols.  This is normal.  These files contain
+debugging functions only, and debugging is disabled by default.
+
+The last line of each */ut.out file should read something like
+ALL TESTS PASSED: rnorm 1e-07 ( ... )
+These lines are summarized at the end of the "DO.all" test.
 
 If you see "TEST FAILURE" then something went wrong.  "ERROR" messages
 in the output files tmp/*.out are OK.  Those are supposed to be there;
 the test exercises the error-reporting features of UMFPACK.
 
-DO.all		does all tests
+Files and directories:
 
-DO 1 di		runs one test (Make.1 and GNUmakefile.di, in this case)
+../../UMFPACK	UMFPACK original distribution
+../../AMD	AMD original distribution
+../../SuiteSparse_config	configuration directory for all of SuiteSparse
 
-Out/*		subdirectories for each test,
-		contents can be destroyed when done.
+acov.di         AMD test coverage scripts
+acov.dl
+acov.zi
+acov.zl
 
-Make.1		gcc, no optimize Linux no BLAS, test int overflow
-Make.2		gcc, no optimize Linux BLAS
-Make.3		gcc, no optimize Linux ATLAS C-Blas
-Make.4		gcc, no optimize Linux ATLAS Fortran BLAS
+AMD_Demo_Makefile   replacement for AMD/Demo/Makefile, for testing
 
-Make.5		gcc, no optimize Linux no BLAS, test int overflow
-		no reciprocal
+badnum2.umf     intentionally corrupted files to test umfpack_load_* functions
+badnum.umf
+badsym2.umf
+badsym.umf
 
-Make.1i		icc, optimize, Linux no BLAS, test int overflow
-Make.2i		icc, optimize, Linux BLAS
-Make.3i		icc, optimize, Linux ATLAS C-Blas
-Make.4i		icc, optimize, Linux ATLAS Fortran BLAS
+cov		for summarizing tcov output
+covall
+cover.awk
 
-Make.1n		icc, no optimize, Linux no BLAS, test int overflow
-Make.2n		icc, no optimize, Linux BLAS
-Make.3n		icc, no optimize, Linux ATLAS C-Blas
-Make.4n		icc, no optimize, Linux ATLAS Fortran BLAS
+debug.amd
+debug.umf
 
-Make.1g		gcc, optimize, Linux no BLAS, test int overflow
-Make.2g		gcc, optimize, Linux BLAS
-Make.3g		gcc, optimize, Linux ATLAS C-Blas
-Make.4g		gcc, optimize, Linux ATLAS Fortran BLAS
+Demo_Makefile   replacement for UMFPACK/Demo/Makefile, for testing
 
-Make.s1		tcov, Solaris 32 bit, no BLAS
-Make.s2		tcov, Solaris 32 bit, Sunperf BLAS
-Make.s3		tcov, Solaris 64 bit, no BLAS
-Make.s4		tcov, Solaris 64 bit, Sunperf BLAS
+DO              runs one test
+DO.all          run all tests
 
-Make.s5		tcov, Solaris 32 bit, no BLAS, test int overflow, no recip.
+GNUmakefile.di  UMFPACK/Lib/Makefile replacements, for testing
+GNUmakefile.dl
+GNUmakefile.zi
+GNUmakefile.zl
 
-Make.n1		optimize, Solaris 32 bit, no BLAS
-Make.n2		optimize, Solaris 32 bit, Sunperf BLAS
-Make.n3		optimize, Solaris 64 bit, no BLAS
-Make.n4		optimize, Solaris 64 bit, Sunperf BLAS
+Make.1		no optimize, no BLAS, test int overflow
+Make.2		no optimize, BLAS
+Make.3		optimize, no BLAS, test int overflow
+Make.4		optimize, BLAS
+Make.5		no optimize, no BLAS, test int overflow, no reciprocal
+Make.6          no optimize, BLAS, no timers
+Make.7          no optimize, test for int overflow, no divide-by-zero
+Make.8          no optimize, no test for int overflow, no divide-by-zero
 
-Makefile.di	Makefile for *di (double, int)
-Makefile.dl	Makefile for *dl (double, UF_long)
-Makefile.zi	Makefile for *zi (complex, int)
-Makefile.zl	Makefile for *zl (complex, UF_long)
+Makefile        top-level Makefile for Tcov tests
+
+Out/*		subdirectories for each test,
+		contents can be destroyed when done.
+
+README.txt      this file
 
 TestMat		test matrices for ut.c
 
-../../UMFPACK	UMFPACK original distribution
-../../AMD	AMD original distribution
-../../UFconfig	configuration directory for all of UFsparse
+Top_Makefile    replacement for AMD/Makefile and UMFPACK/Makefile, for testing
 
-covall		for summarizing tcov output
+ucov.di         UMFPACK test coverage scripts
+ucov.dl
+ucov.zi
+ucov.zl
 
-ut.c		the test program
+ut.c		the test program itself
 
diff --git a/UMFPACK/Tcov/Top_Makefile b/UMFPACK/Tcov/Top_Makefile
index a5d74f6..abd1824 100644
--- a/UMFPACK/Tcov/Top_Makefile
+++ b/UMFPACK/Tcov/Top_Makefile
@@ -4,7 +4,7 @@
 
 default: library
 
-include ../UFconfig/UFconfig.mk
+include ../SuiteSparse_config/SuiteSparse_config.mk
 
 library:
 	( cd Source ; $(MAKE) )
diff --git a/UMFPACK/Tcov/covall b/UMFPACK/Tcov/covall
index 4a773c9..91584f9 100755
--- a/UMFPACK/Tcov/covall
+++ b/UMFPACK/Tcov/covall
@@ -3,9 +3,9 @@
 #  only print those lines that are "#####" in all tests.
 
 foreach file ( \
-    umf_2by2.c umf_analyze.c umf_apply_order.c umf_assemble.c \
+    umf_analyze.c umf_apply_order.c umf_assemble.c \
     umf_assemble_fixq.c umf_blas3_update.c umf_build_tuples.c \
-    umf_colamd.c umf_create_element.c umf_extend_front.c \
+    umf_cholmod.c umf_colamd.c umf_create_element.c umf_extend_front.c \
     umf_free.c umf_fsize.c umf_garbage_collection.c umf_get_memory.c \
     umf_grow_front.c umf_init_front.c umf_is_permutation.c umf_kernel.c \
     umf_kernel_init.c umf_kernel_wrapup.c umf_lhsolve.c umf_local_search.c \
diff --git a/UMFPACK/Tcov/cover.out b/UMFPACK/Tcov/cover.out
deleted file mode 100644
index d29f7d3..0000000
--- a/UMFPACK/Tcov/cover.out
+++ /dev/null
@@ -1,545 +0,0 @@
-================================================================================
-umf_2by2.c
-================================================================================
-================================================================================
-umf_analyze.c
-================================================================================
-     24    222	    #####:  217:	    return (FALSE) ;	/* internal error! */
-================================================================================
-umf_apply_order.c
-================================================================================
-================================================================================
-umf_assemble.c
-================================================================================
-================================================================================
-umf_assemble_fixq.c
-================================================================================
-================================================================================
-umf_blas3_update.c
-================================================================================
-================================================================================
-umf_build_tuples.c
-================================================================================
-     24     83	    #####:   78:		return (FALSE) ;	/* out of memory for row tuples */
-     24    101	    #####:   96:		return (FALSE) ;	/* out of memory for col tuples */
-================================================================================
-umf_colamd.c
-================================================================================
-     24   2708	    #####: 2703:		KILL_ROW (r) ;
-================================================================================
-umf_create_element.c
-================================================================================
-     24    253	    #####:  248:	    return (FALSE) ;	/* out of memory */
-     24    264	    #####:  259:	    return (FALSE) ;	/* out of memory */
-     24    440	    #####:  435:		    return (UMF_get_memory (Numeric, Work, 0, r2, c2,do_Fcpos));
-     24    543	    #####:  538:		    return (UMF_get_memory (Numeric, Work, 0, r2, c2,do_Fcpos));
-================================================================================
-umf_extend_front.c
-================================================================================
-================================================================================
-umf_free.c
-================================================================================
-================================================================================
-umf_fsize.c
-================================================================================
-     24     58	    #####:   53:		frsize = Int_MAX ;
-================================================================================
-umf_garbage_collection.c
-================================================================================
-================================================================================
-umf_get_memory.c
-================================================================================
-     24    114	    #####:  109:	newsize = (Int) bsize ;	/* we cannot increase the size beyond bsize */
-================================================================================
-umf_grow_front.c
-================================================================================
-     24     93	    #####:   88:	return (FALSE) ;
-     24    121	    #####:  116:	double a = 0.9 * sqrt ((Int_MAX / sizeof (Entry)) / s) ;
-     24    122	    #####:  117:	fnr2 = MAX (fnr_min, a * fnr2) ;
-     24    123	    #####:  118:	fnc2 = MAX (fnc_min, a * fnc2) ;
-     24    125	    #####:  120:	newsize = fnr2 * fnc2 ;
-     24    127	    #####:  122:	if (fnr2 % 2 == 0) fnr2++ ;
-     24    128	    #####:  123:	fnc2 = newsize / fnr2 ;
-     24    186	    #####:  181:	    return (FALSE) ;	/* out of memory */
-================================================================================
-umf_init_front.c
-================================================================================
-     24     80	    #####:   75:	    return (FALSE) ;
-================================================================================
-umf_is_permutation.c
-================================================================================
-================================================================================
-umf_kernel.c
-================================================================================
-================================================================================
-umf_kernel_init.c
-================================================================================
-     24    517	    #####:  512:	return (FALSE) ;	/* pattern changed */
-     24    545	    #####:  540:	    return (FALSE) ;	/* pattern changed */
-     24    609	    #####:  604:		return (FALSE) ;	/* pattern has changed */
-     24    645	    #####:  640:		    return (FALSE) ;	/* pattern has changed */
-     24    713	    #####:  708:		    return (FALSE) ;	/* pattern changed */
-     24    726	    #####:  721:		    return (FALSE) ;	/* pattern changed */
-     24    738	    #####:  733:	    return (FALSE) ;	/* pattern changed */
-     24    830	    #####:  825:		    return (FALSE) ;	/* pattern changed */
-     24    866	    #####:  861:	    return (FALSE) ;	/* pattern changed */
-     24    908	    #####:  903:	    return (FALSE) ;	/* pattern changed */
-     24    922	    #####:  917:	    return (FALSE) ;	/* pattern changed */
-     24   1034	    #####: 1029:	return (FALSE) ;	/* pattern changed */
-================================================================================
-umf_kernel_wrapup.c
-================================================================================
-================================================================================
-umf_lhsolve.c
-================================================================================
-================================================================================
-umf_local_search.c
-================================================================================
-     24    657	    #####:  652:				return (UMFPACK_ERROR_different_pattern) ;
-     24    746	    #####:  741:	    return (UMFPACK_ERROR_different_pattern) ;
-================================================================================
-umf_lsolve.c
-================================================================================
-================================================================================
-umf_ltsolve.c
-================================================================================
-================================================================================
-umf_malloc.c
-================================================================================
-================================================================================
-umf_mem_alloc_element.c
-================================================================================
-     24     49	    #####:   44:	return (0) ;	/* problem is too large */
-================================================================================
-umf_mem_alloc_head_block.c
-================================================================================
-================================================================================
-umf_mem_alloc_tail_block.c
-================================================================================
-================================================================================
-umf_mem_free_tail_block.c
-================================================================================
-================================================================================
-umf_mem_init_memoryspace.c
-================================================================================
-================================================================================
-umf_realloc.c
-================================================================================
-     24     58	    #####:   53:	return ((void *) NULL) ;
-================================================================================
-umf_report_perm.c
-================================================================================
-================================================================================
-umf_report_vector.c
-================================================================================
-================================================================================
-umf_row_search.c
-================================================================================
-     24    618	    #####:  613:		    return (UMFPACK_ERROR_different_pattern) ;
-     24    664	    #####:  659:				return (UMFPACK_ERROR_different_pattern) ;
-     24    751	    #####:  746:		return (UMFPACK_ERROR_different_pattern) ;
-================================================================================
-umf_scale.c
-================================================================================
-================================================================================
-umf_scale_column.c
-================================================================================
-================================================================================
-umf_set_stats.c
-================================================================================
-================================================================================
-umf_singletons.c
-================================================================================
-================================================================================
-umf_solve.c
-================================================================================
-     24   1316	    #####: 1311:	    omega [1] = tau ;
-     24   1317	    #####: 1312:	    omega [2] = tau ;
-     24   1318	    #####: 1313:	    break ;
-================================================================================
-umf_start_front.c
-================================================================================
-     24    156	    #####:  151:	maxfrsize = Int_MAX / sizeof (Entry) ;
-     24    175	    #####:  170:	    fsize = Int_MAX / sizeof (Entry) ;
-     24    193	    #####:  188:		fsize2 = Int_MAX / sizeof (Entry) ;
-================================================================================
-umf_store_lu.c
-================================================================================
-     24    349	    #####:  344:		return (FALSE) ;	/* out of memory */
-     24    355	    #####:  350:		return (FALSE) ;	/* out of memory */
-     24    774	    #####:  769:		return (FALSE) ;	/* out of memory */
-     24    781	    #####:  776:		return (FALSE) ;	/* out of memory */
-================================================================================
-umf_store_lu_drop.c
-================================================================================
-     24    332	    #####:  327:	    if (Work->do_grow)
-     24    336	    #####:  331:		r2 = fnrows ;
-     24    337	    #####:  332:		c2 = fncols ;
-     24    342	    #####:  337:		r2 = MAX (fnrows, Work->fnrows_new + 1) ;
-     24    343	    #####:  338:		c2 = MAX (fncols, Work->fncols_new + 1) ;
-     24    346	    #####:  341:	    if (!UMF_get_memory (Numeric, Work, size, r2, c2, TRUE))
-     24    349	    #####:  344:		return (FALSE) ;	/* out of memory */
-     24    351	    #####:  346:	    p = UMF_mem_alloc_head_block (Numeric, size) ;
-     24    352	    #####:  347:	    if (!p)
-     24    355	    #####:  350:		return (FALSE) ;	/* out of memory */
-     24    358	    #####:  353:	    fnc_curr = Work->fnc_curr ;
-     24    359	    #####:  354:	    fnr_curr = Work->fnr_curr ;
-     24    360	    #####:  355:	    Flublock = Work->Flublock ;
-     24    361	    #####:  356:	    Flblock  = Work->Flblock ;
-     24    362	    #####:  357:	    Fublock  = Work->Fublock ;
-     24    363	    #####:  358:	    Fl1 = Flublock + kk * nb ;
-     24    364	    #####:  359:	    Fl2 = Flblock  + kk * fnr_curr ;
-     24    497	    #####:  492:			pos = llen++ ;
-     24    498	    #####:  493:			Lpattern [pos] = row2 ;
-     24    499	    #####:  494:			Lpos [row2] = pos ;
-     24    500	    #####:  495:			*Li++ = row2 ;
-     24    756	    #####:  751:	    if (Work->do_grow)
-     24    760	    #####:  755:		r2 = fnrows ;
-     24    761	    #####:  756:		c2 = fncols ;
-     24    766	    #####:  761:		r2 = MAX (fnrows, Work->fnrows_new + 1) ;
-     24    767	    #####:  762:		c2 = MAX (fncols, Work->fncols_new + 1) ;
-     24    770	    #####:  765:	    if (!UMF_get_memory (Numeric, Work, size, r2, c2, TRUE))
-     24    774	    #####:  769:		return (FALSE) ;	/* out of memory */
-     24    776	    #####:  771:	    p = UMF_mem_alloc_head_block (Numeric, size) ;
-     24    777	    #####:  772:	    if (!p)
-     24    781	    #####:  776:		return (FALSE) ;	/* out of memory */
-     24    784	    #####:  779:	    fnc_curr = Work->fnc_curr ;
-     24    785	    #####:  780:	    fnr_curr = Work->fnr_curr ;
-     24    786	    #####:  781:	    Flublock = Work->Flublock ;
-     24    787	    #####:  782:	    Flblock  = Work->Flblock ;
-     24    788	    #####:  783:	    Fublock  = Work->Fublock ;
-     24    789	    #####:  784:	    Fu1 = Flublock + kk ;
-     24    790	    #####:  785:	    Fu2 = Fublock  + kk * fnc_curr ;
-================================================================================
-umf_symbolic_usage.c
-================================================================================
-================================================================================
-umf_transpose.c
-================================================================================
-================================================================================
-umf_triplet_map_nox.c
-================================================================================
-================================================================================
-umf_triplet_map_x.c
-================================================================================
-================================================================================
-umf_triplet_nomap_nox.c
-================================================================================
-================================================================================
-umf_triplet_nomap_x.c
-================================================================================
-================================================================================
-umf_tuple_lengths.c
-================================================================================
-================================================================================
-umf_uhsolve.c
-================================================================================
-================================================================================
-umf_usolve.c
-================================================================================
-================================================================================
-umf_utsolve.c
-================================================================================
-================================================================================
-umf_valid_numeric.c
-================================================================================
-================================================================================
-umf_valid_symbolic.c
-================================================================================
-================================================================================
-umfpack_col_to_triplet.c
-================================================================================
-================================================================================
-umfpack_defaults.c
-================================================================================
-================================================================================
-umfpack_free_numeric.c
-================================================================================
-================================================================================
-umfpack_free_symbolic.c
-================================================================================
-================================================================================
-umfpack_get_determinant.c
-================================================================================
-     24    219	    #####:  214:		Info [UMFPACK_STATUS] = UMFPACK_WARNING_singular_matrix ;
-     24    220	    #####:  215:		break ;
-================================================================================
-umfpack_get_lunz.c
-================================================================================
-================================================================================
-umfpack_get_numeric.c
-================================================================================
-================================================================================
-umfpack_get_symbolic.c
-================================================================================
-================================================================================
-umfpack_load_numeric.c
-================================================================================
-     24    101	    #####:   96:	(void) UMF_free ((void *) Numeric) ;
-     24    102	    #####:   97:	fclose (f) ;
-     24    103	    #####:   98:	return (UMFPACK_ERROR_file_IO) ;
-     24    160	    #####:  155:	UMFPACK_free_numeric ((void **) &Numeric) ;
-     24    161	    #####:  156:	return (UMFPACK_ERROR_invalid_Numeric_object) ;
-================================================================================
-umfpack_load_symbolic.c
-================================================================================
-     24    101	    #####:   96:	(void) UMF_free ((void *) Symbolic) ;
-     24    102	    #####:   97:	fclose (f) ;
-     24    103	    #####:   98:	return (UMFPACK_ERROR_file_IO) ;
-     24    164	    #####:  159:	UMFPACK_free_symbolic ((void **) &Symbolic) ;
-     24    165	    #####:  160:	return (UMFPACK_ERROR_invalid_Symbolic_object) ;
-================================================================================
-umfpack_numeric.c
-================================================================================
-     24    188	    #####:  183:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    189	    #####:  184:	return (UMFPACK_ERROR_out_of_memory) ;
-================================================================================
-umfpack_qsymbolic.c
-================================================================================
-     24    518	    #####:  513:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    519	    #####:  514:	return (UMFPACK_ERROR_out_of_memory) ;
-     24    893	    #####:  888:	    Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    894	    #####:  889:	    error (&Symbolic, SW) ;
-     24    895	    #####:  890:	    return (UMFPACK_ERROR_out_of_memory) ;
-     24    914	    #####:  909:		Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    915	    #####:  910:		error (&Symbolic, SW) ;
-     24    916	    #####:  911:		return (UMFPACK_ERROR_out_of_memory) ;
-     24    983	    #####:  978:		strategy = UMFPACK_STRATEGY_2BY2 ;
-     24   1463	    #####: 1458:	    Info [UMFPACK_STATUS] = UMFPACK_ERROR_internal_error ;
-     24   1464	    #####: 1459:	    error (&Symbolic, SW) ;
-     24   1465	    #####: 1460:	    return (UMFPACK_ERROR_internal_error) ;
-     24   1817	    #####: 1812:	    Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24   1818	    #####: 1813:	    error (&Symbolic, SW) ;
-     24   1819	    #####: 1814:	    return (UMFPACK_ERROR_out_of_memory) ;
-================================================================================
-umfpack_report_control.c
-================================================================================
-================================================================================
-umfpack_report_info.c
-================================================================================
-     24    506	    #####:  501:	PRINT_INFO (
-     24    529	    #####:  524:	twtot = twsym + twnum ;
-     24    530	    #####:  525:	PRINT_INFO ("    symbolic + numeric wall clock time (sec):      %.2f\n",
-     24    532	    #####:  527:	if (ftot > 0 && twtot > TMIN)
-     24    534	    #####:  529:	    PRINT_INFO (
-     24    570	    #####:  565:	PRINT_INFO (
-     24    601	    #####:  596:	if (twtot >= TMIN && ftot >= 0)
-     24    603	    #####:  598:	    twtot += tsolve ;
-     24    604	    #####:  599:	    PRINT_INFO (
-     24    607	    #####:  602:	    if (ftot > 0 && twtot > TMIN)
-     24    609	    #####:  604:		PRINT_INFO (
-================================================================================
-umfpack_report_matrix.c
-================================================================================
-================================================================================
-umfpack_report_numeric.c
-================================================================================
-     24    326	    #####:  321:		return (FALSE) ;
-     24    332	    #####:  327:		PRINTF (("\t...\n")) ;
-     24    333	    #####:  328:		prl-- ;
-     24    534	    #####:  529:	    return (FALSE) ;
-     24    641	    #####:  636:	    PRINTF (("    ...\n")) ;
-     24    642	    #####:  637:	    prl-- ;
-     24    653	    #####:  648:		return (FALSE) ;
-     24    659	    #####:  654:		PRINTF (("\t...\n")) ;
-     24    660	    #####:  655:		prl-- ;
-================================================================================
-umfpack_report_perm.c
-================================================================================
-================================================================================
-umfpack_report_status.c
-================================================================================
-================================================================================
-umfpack_report_symbolic.c
-================================================================================
-================================================================================
-umfpack_report_triplet.c
-================================================================================
-================================================================================
-umfpack_report_vector.c
-================================================================================
-================================================================================
-umfpack_save_numeric.c
-================================================================================
-================================================================================
-umfpack_save_symbolic.c
-================================================================================
-================================================================================
-umfpack_scale.c
-================================================================================
-================================================================================
-umfpack_solve.c
-================================================================================
-================================================================================
-umfpack_symbolic.c
-================================================================================
-================================================================================
-umfpack_tictoc.c
-================================================================================
-================================================================================
-umfpack_timer.c
-================================================================================
-================================================================================
-umfpack_transpose.c
-================================================================================
-================================================================================
-umfpack_triplet_to_col.c
-================================================================================
-================================================================================
-umfpack_wsolve.c
-================================================================================
-     24    146	    #####:  141:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_invalid_system ;
-     24    147	    #####:  142:	return (UMFPACK_ERROR_invalid_system) ;
-     24    160	    #####:  155:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_argument_missing ;
-     24    161	    #####:  156:	return (UMFPACK_ERROR_argument_missing) ;
-     24    167	    #####:  162:	irstep = 0 ;
-================================================================================
-amd_1.c
-================================================================================
-================================================================================
-amd_2.c
-================================================================================
-================================================================================
-amd_aat.c
-================================================================================
-================================================================================
-amd_control.c
-================================================================================
-================================================================================
-amd_defaults.c
-================================================================================
-================================================================================
-amd_info.c
-================================================================================
-================================================================================
-amd_order.c
-================================================================================
-     24     84	    #####:   79:	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24     85	    #####:   80:	return (AMD_OUT_OF_MEMORY) ;	    /* problem too large */
-     24    105	    #####:  100:	amd_free (Len) ;
-     24    106	    #####:  101:	amd_free (Pinv) ;
-     24    107	    #####:  102:	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24    108	    #####:  103:	return (AMD_OUT_OF_MEMORY) ;
-     24    122	    #####:  117:	    amd_free (Rp) ;
-     24    123	    #####:  118:	    amd_free (Ri) ;
-     24    124	    #####:  119:	    amd_free (Len) ;
-     24    125	    #####:  120:	    amd_free (Pinv) ;
-     24    126	    #####:  121:	    if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24    127	    #####:  122:	    return (AMD_OUT_OF_MEMORY) ;
-     24    175	    #####:  170:	amd_free (Rp) ;
-     24    176	    #####:  171:	amd_free (Ri) ;
-     24    177	    #####:  172:	amd_free (Len) ;
-     24    178	    #####:  173:	amd_free (Pinv) ;
-     24    179	    #####:  174:	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24    180	    #####:  175:	return (AMD_OUT_OF_MEMORY) ;
-================================================================================
-amd_postorder.c
-================================================================================
-================================================================================
-amd_post_tree.c
-================================================================================
-================================================================================
-amd_preprocess.c
-================================================================================
-================================================================================
-amd_valid.c
-================================================================================
-================================================================================
-Last line of each output file: 
-================================================================================
-Out/1_di/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.54e-08 omega2) cputime 68.89
-=================================================================
-Out/1_dl/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.54e-08 omega2) cputime 60.89
-=================================================================
-Out/1g_di/ut.out
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 53.72
-=================================================================
-Out/1g_dl/ut.out
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 46.99
-=================================================================
-Out/1g_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 5.84e-05 arc130 3.66e-10 omega2) cputime 89.22
-=================================================================
-Out/1g_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 5.84e-05 arc130 3.66e-10 omega2) cputime 87.79
-=================================================================
-Out/1_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 110.06
-=================================================================
-Out/1_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 109.89
-=================================================================
-Out/2_di/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 1.73e-08 omega2) cputime 60.81
-=================================================================
-Out/2_dl/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 1.73e-08 omega2) cputime 55.15
-=================================================================
-Out/2g_di/ut.out
-ALL TESTS PASSED: rnorm 1.06e-10 (1.37e-07 shl0, 5.65e-05 arc130 8.07e-09 omega2) cputime 46.87
-=================================================================
-Out/2g_dl/ut.out
-ALL TESTS PASSED: rnorm 1.06e-10 (1.37e-07 shl0, 5.65e-05 arc130 8.07e-09 omega2) cputime 42.94
-=================================================================
-Out/2g_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 5.69e-05 arc130 1.14e-09 omega2) cputime 67.54
-=================================================================
-Out/2g_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 5.69e-05 arc130 1.14e-09 omega2) cputime 68.33
-=================================================================
-Out/2_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.77e-09 omega2) cputime 90.34
-=================================================================
-Out/2_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.77e-09 omega2) cputime 90.37
-=================================================================
-Out/5_di/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 68.49
-=================================================================
-Out/5_dl/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 60.57
-=================================================================
-Out/5_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 109.19
-=================================================================
-Out/5_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 110.08
-=================================================================
-Out/6_di/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 1.73e-08 omega2) cputime 0
-=================================================================
-Out/6_dl/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 1.73e-08 omega2) cputime 0
-=================================================================
-Out/6_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.77e-09 omega2) cputime 0
-=================================================================
-Out/6_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.77e-09 omega2) cputime 0
-=================================================================
-Out/7_di/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.54e-08 omega2) cputime 69.52
-=================================================================
-Out/7_dl/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.54e-08 omega2) cputime 59.27
-=================================================================
-Out/7_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 109.28
-=================================================================
-Out/7_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 110.39
-=================================================================
-Out/8_di/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 1.73e-08 omega2) cputime 61.45
-=================================================================
-Out/8_dl/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.37e-07 shl0, 6.76e-05 arc130 1.73e-08 omega2) cputime 55.82
-=================================================================
-Out/8_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.77e-09 omega2) cputime 90.46
-=================================================================
-Out/8_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.40e-07 shl0, 6.77e-05 arc130 1.77e-09 omega2) cputime 89.24
-=================================================================
diff --git a/UMFPACK/Tcov/cover.out_May5 b/UMFPACK/Tcov/cover.out_May5
deleted file mode 100644
index 5ea1136..0000000
--- a/UMFPACK/Tcov/cover.out_May5
+++ /dev/null
@@ -1,536 +0,0 @@
-================================================================================
-umf_2by2.c
-================================================================================
-================================================================================
-umf_analyze.c
-================================================================================
-     24    219	    #####:  216:	    return (FALSE) ;	/* internal error! */
-================================================================================
-umf_apply_order.c
-================================================================================
-================================================================================
-umf_assemble.c
-================================================================================
-================================================================================
-umf_assemble_fixq.c
-================================================================================
-================================================================================
-umf_blas3_update.c
-================================================================================
-================================================================================
-umf_build_tuples.c
-================================================================================
-     24     80	    #####:   77:		return (FALSE) ;	/* out of memory for row tuples */
-     24     98	    #####:   95:		return (FALSE) ;	/* out of memory for col tuples */
-================================================================================
-umf_colamd.c
-================================================================================
-     24   2706	    #####: 2703:		KILL_ROW (r) ;
-================================================================================
-umf_create_element.c
-================================================================================
-     24    250	    #####:  247:	    return (FALSE) ;	/* out of memory */
-     24    261	    #####:  258:	    return (FALSE) ;	/* out of memory */
-     24    437	    #####:  434:		    return (UMF_get_memory (Numeric, Work, 0, r2, c2,do_Fcpos));
-     24    540	    #####:  537:		    return (UMF_get_memory (Numeric, Work, 0, r2, c2,do_Fcpos));
-================================================================================
-umf_extend_front.c
-================================================================================
-================================================================================
-umf_free.c
-================================================================================
-================================================================================
-umf_fsize.c
-================================================================================
-     24     55	    #####:   52:		frsize = Int_MAX ;
-================================================================================
-umf_garbage_collection.c
-================================================================================
-================================================================================
-umf_get_memory.c
-================================================================================
-     24    111	    #####:  108:	newsize = (Int) bsize ;	/* we cannot increase the size beyond bsize */
-================================================================================
-umf_grow_front.c
-================================================================================
-     24     90	    #####:   87:	return (FALSE) ;
-     24    118	    #####:  115:	double a = 0.9 * sqrt ((Int_MAX / sizeof (Entry)) / s) ;
-     24    119	    #####:  116:	fnr2 = MAX (fnr_min, a * fnr2) ;
-     24    120	    #####:  117:	fnc2 = MAX (fnc_min, a * fnc2) ;
-     24    122	    #####:  119:	newsize = fnr2 * fnc2 ;
-     24    124	    #####:  121:	if (fnr2 % 2 == 0) fnr2++ ;
-     24    125	    #####:  122:	fnc2 = newsize / fnr2 ;
-     24    183	    #####:  180:	    return (FALSE) ;	/* out of memory */
-================================================================================
-umf_init_front.c
-================================================================================
-     24     77	    #####:   74:	    return (FALSE) ;
-================================================================================
-umf_is_permutation.c
-================================================================================
-================================================================================
-umf_kernel.c
-================================================================================
-================================================================================
-umf_kernel_init.c
-================================================================================
-     24    514	    #####:  511:	return (FALSE) ;	/* pattern changed */
-     24    542	    #####:  539:	    return (FALSE) ;	/* pattern changed */
-     24    606	    #####:  603:		return (FALSE) ;	/* pattern has changed */
-     24    642	    #####:  639:		    return (FALSE) ;	/* pattern has changed */
-     24    710	    #####:  707:		    return (FALSE) ;	/* pattern changed */
-     24    723	    #####:  720:		    return (FALSE) ;	/* pattern changed */
-     24    735	    #####:  732:	    return (FALSE) ;	/* pattern changed */
-     24    827	    #####:  824:		    return (FALSE) ;	/* pattern changed */
-     24    863	    #####:  860:	    return (FALSE) ;	/* pattern changed */
-     24    905	    #####:  902:	    return (FALSE) ;	/* pattern changed */
-     24    919	    #####:  916:	    return (FALSE) ;	/* pattern changed */
-     24   1031	    #####: 1028:	return (FALSE) ;	/* pattern changed */
-================================================================================
-umf_kernel_wrapup.c
-================================================================================
-================================================================================
-umf_lhsolve.c
-================================================================================
-================================================================================
-umf_local_search.c
-================================================================================
-     24    654	    #####:  651:				return (UMFPACK_ERROR_different_pattern) ;
-     24    743	    #####:  740:	    return (UMFPACK_ERROR_different_pattern) ;
-================================================================================
-umf_lsolve.c
-================================================================================
-================================================================================
-umf_ltsolve.c
-================================================================================
-================================================================================
-umf_malloc.c
-================================================================================
-================================================================================
-umf_mem_alloc_element.c
-================================================================================
-     24     46	    #####:   43:	return (0) ;	/* problem is too large */
-================================================================================
-umf_mem_alloc_head_block.c
-================================================================================
-================================================================================
-umf_mem_alloc_tail_block.c
-================================================================================
-================================================================================
-umf_mem_free_tail_block.c
-================================================================================
-================================================================================
-umf_mem_init_memoryspace.c
-================================================================================
-================================================================================
-umf_realloc.c
-================================================================================
-     24     55	    #####:   52:	return ((void *) NULL) ;
-================================================================================
-umf_report_perm.c
-================================================================================
-================================================================================
-umf_report_vector.c
-================================================================================
-================================================================================
-umf_row_search.c
-================================================================================
-     24    616	    #####:  613:		    return (UMFPACK_ERROR_different_pattern) ;
-     24    662	    #####:  659:				return (UMFPACK_ERROR_different_pattern) ;
-     24    749	    #####:  746:		return (UMFPACK_ERROR_different_pattern) ;
-================================================================================
-umf_scale.c
-================================================================================
-================================================================================
-umf_scale_column.c
-================================================================================
-================================================================================
-umf_set_stats.c
-================================================================================
-================================================================================
-umf_singletons.c
-================================================================================
-================================================================================
-umf_solve.c
-================================================================================
-     24   1313	    #####: 1310:	    omega [1] = tau ;
-     24   1314	    #####: 1311:	    omega [2] = tau ;
-     24   1315	    #####: 1312:	    break ;
-================================================================================
-umf_start_front.c
-================================================================================
-     24    153	    #####:  150:	maxfrsize = Int_MAX / sizeof (Entry) ;
-     24    172	    #####:  169:	    fsize = Int_MAX / sizeof (Entry) ;
-     24    190	    #####:  187:		fsize2 = Int_MAX / sizeof (Entry) ;
-================================================================================
-umf_store_lu.c
-================================================================================
-     24    346	    #####:  343:		return (FALSE) ;	/* out of memory */
-     24    352	    #####:  349:		return (FALSE) ;	/* out of memory */
-     24    771	    #####:  768:		return (FALSE) ;	/* out of memory */
-     24    778	    #####:  775:		return (FALSE) ;	/* out of memory */
-================================================================================
-umf_store_lu_drop.c
-================================================================================
-     24    326	    #####:  323:	    Int r2, c2 ;
-     24    329	    #####:  326:	    if (Work->do_grow)
-     24    333	    #####:  330:		r2 = fnrows ;
-     24    334	    #####:  331:		c2 = fncols ;
-     24    339	    #####:  336:		r2 = MAX (fnrows, Work->fnrows_new + 1) ;
-     24    340	    #####:  337:		c2 = MAX (fncols, Work->fncols_new + 1) ;
-     24    343	    #####:  340:	    if (!UMF_get_memory (Numeric, Work, size, r2, c2, TRUE))
-     24    346	    #####:  343:		return (FALSE) ;	/* out of memory */
-     24    348	    #####:  345:	    p = UMF_mem_alloc_head_block (Numeric, size) ;
-     24    349	    #####:  346:	    if (!p)
-     24    352	    #####:  349:		return (FALSE) ;	/* out of memory */
-     24    355	    #####:  352:	    fnc_curr = Work->fnc_curr ;
-     24    356	    #####:  353:	    fnr_curr = Work->fnr_curr ;
-     24    357	    #####:  354:	    Flublock = Work->Flublock ;
-     24    358	    #####:  355:	    Flblock  = Work->Flblock ;
-     24    359	    #####:  356:	    Fublock  = Work->Fublock ;
-     24    360	    #####:  357:	    Fl1 = Flublock + kk * nb ;
-     24    361	    #####:  358:	    Fl2 = Flblock  + kk * fnr_curr ;
-     24    494	    #####:  491:			pos = llen++ ;
-     24    495	    #####:  492:			Lpattern [pos] = row2 ;
-     24    496	    #####:  493:			Lpos [row2] = pos ;
-     24    497	    #####:  494:			*Li++ = row2 ;
-     24    750	    #####:  747:	    Int r2, c2 ;
-     24    753	    #####:  750:	    if (Work->do_grow)
-     24    757	    #####:  754:		r2 = fnrows ;
-     24    758	    #####:  755:		c2 = fncols ;
-     24    763	    #####:  760:		r2 = MAX (fnrows, Work->fnrows_new + 1) ;
-     24    764	    #####:  761:		c2 = MAX (fncols, Work->fncols_new + 1) ;
-     24    767	    #####:  764:	    if (!UMF_get_memory (Numeric, Work, size, r2, c2, TRUE))
-     24    771	    #####:  768:		return (FALSE) ;	/* out of memory */
-     24    773	    #####:  770:	    p = UMF_mem_alloc_head_block (Numeric, size) ;
-     24    774	    #####:  771:	    if (!p)
-     24    778	    #####:  775:		return (FALSE) ;	/* out of memory */
-     24    781	    #####:  778:	    fnc_curr = Work->fnc_curr ;
-     24    782	    #####:  779:	    fnr_curr = Work->fnr_curr ;
-     24    783	    #####:  780:	    Flublock = Work->Flublock ;
-     24    784	    #####:  781:	    Flblock  = Work->Flblock ;
-     24    785	    #####:  782:	    Fublock  = Work->Fublock ;
-     24    786	    #####:  783:	    Fu1 = Flublock + kk ;
-     24    787	    #####:  784:	    Fu2 = Fublock  + kk * fnc_curr ;
-================================================================================
-umf_symbolic_usage.c
-================================================================================
-================================================================================
-umf_transpose.c
-================================================================================
-================================================================================
-umf_triplet_map_nox.c
-================================================================================
-================================================================================
-umf_triplet_map_x.c
-================================================================================
-================================================================================
-umf_triplet_nomap_nox.c
-================================================================================
-================================================================================
-umf_triplet_nomap_x.c
-================================================================================
-================================================================================
-umf_tuple_lengths.c
-================================================================================
-================================================================================
-umf_uhsolve.c
-================================================================================
-================================================================================
-umf_usolve.c
-================================================================================
-================================================================================
-umf_utsolve.c
-================================================================================
-================================================================================
-umf_valid_numeric.c
-================================================================================
-================================================================================
-umf_valid_symbolic.c
-================================================================================
-================================================================================
-umfpack_col_to_triplet.c
-================================================================================
-================================================================================
-umfpack_defaults.c
-================================================================================
-================================================================================
-umfpack_free_numeric.c
-================================================================================
-================================================================================
-umfpack_free_symbolic.c
-================================================================================
-================================================================================
-umfpack_get_determinant.c
-================================================================================
-     24    217	    #####:  214:		Info [UMFPACK_STATUS] = UMFPACK_WARNING_singular_matrix ;
-     24    218	    #####:  215:		break ;
-================================================================================
-umfpack_get_lunz.c
-================================================================================
-================================================================================
-umfpack_get_numeric.c
-================================================================================
-================================================================================
-umfpack_get_symbolic.c
-================================================================================
-================================================================================
-umfpack_load_numeric.c
-================================================================================
-     24     99	    #####:   96:	(void) UMF_free ((void *) Numeric) ;
-     24    100	    #####:   97:	fclose (f) ;
-     24    101	    #####:   98:	return (UMFPACK_ERROR_file_IO) ;
-     24    158	    #####:  155:	UMFPACK_free_numeric ((void **) &Numeric) ;
-     24    159	    #####:  156:	return (UMFPACK_ERROR_invalid_Numeric_object) ;
-================================================================================
-umfpack_load_symbolic.c
-================================================================================
-     24     99	    #####:   96:	(void) UMF_free ((void *) Symbolic) ;
-     24    100	    #####:   97:	fclose (f) ;
-     24    101	    #####:   98:	return (UMFPACK_ERROR_file_IO) ;
-     24    162	    #####:  159:	UMFPACK_free_symbolic ((void **) &Symbolic) ;
-     24    163	    #####:  160:	return (UMFPACK_ERROR_invalid_Symbolic_object) ;
-================================================================================
-umfpack_numeric.c
-================================================================================
-     24    186	    #####:  183:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    187	    #####:  184:	return (UMFPACK_ERROR_out_of_memory) ;
-================================================================================
-umfpack_qsymbolic.c
-================================================================================
-     24    516	    #####:  513:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    517	    #####:  514:	return (UMFPACK_ERROR_out_of_memory) ;
-     24    891	    #####:  888:	    Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    892	    #####:  889:	    error (&Symbolic, SW) ;
-     24    893	    #####:  890:	    return (UMFPACK_ERROR_out_of_memory) ;
-     24    912	    #####:  909:		Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24    913	    #####:  910:		error (&Symbolic, SW) ;
-     24    914	    #####:  911:		return (UMFPACK_ERROR_out_of_memory) ;
-     24    981	    #####:  978:		strategy = UMFPACK_STRATEGY_2BY2 ;
-     24   1461	    #####: 1458:	    Info [UMFPACK_STATUS] = UMFPACK_ERROR_internal_error ;
-     24   1462	    #####: 1459:	    error (&Symbolic, SW) ;
-     24   1463	    #####: 1460:	    return (UMFPACK_ERROR_internal_error) ;
-     24   1815	    #####: 1812:	    Info [UMFPACK_STATUS] = UMFPACK_ERROR_out_of_memory ;
-     24   1816	    #####: 1813:	    error (&Symbolic, SW) ;
-     24   1817	    #####: 1814:	    return (UMFPACK_ERROR_out_of_memory) ;
-================================================================================
-umfpack_report_control.c
-================================================================================
-================================================================================
-umfpack_report_info.c
-================================================================================
-================================================================================
-umfpack_report_matrix.c
-================================================================================
-================================================================================
-umfpack_report_numeric.c
-================================================================================
-     24    324	    #####:  321:		return (FALSE) ;
-     24    330	    #####:  327:		PRINTF (("\t...\n")) ;
-     24    331	    #####:  328:		prl-- ;
-     24    532	    #####:  529:	    return (FALSE) ;
-     24    639	    #####:  636:	    PRINTF (("    ...\n")) ;
-     24    640	    #####:  637:	    prl-- ;
-     24    651	    #####:  648:		return (FALSE) ;
-     24    657	    #####:  654:		PRINTF (("\t...\n")) ;
-     24    658	    #####:  655:		prl-- ;
-================================================================================
-umfpack_report_perm.c
-================================================================================
-================================================================================
-umfpack_report_status.c
-================================================================================
-================================================================================
-umfpack_report_symbolic.c
-================================================================================
-================================================================================
-umfpack_report_triplet.c
-================================================================================
-================================================================================
-umfpack_report_vector.c
-================================================================================
-================================================================================
-umfpack_save_numeric.c
-================================================================================
-================================================================================
-umfpack_save_symbolic.c
-================================================================================
-================================================================================
-umfpack_scale.c
-================================================================================
-================================================================================
-umfpack_solve.c
-================================================================================
-================================================================================
-umfpack_symbolic.c
-================================================================================
-================================================================================
-umfpack_tictoc.c
-================================================================================
-================================================================================
-umfpack_timer.c
-================================================================================
-================================================================================
-umfpack_transpose.c
-================================================================================
-================================================================================
-umfpack_triplet_to_col.c
-================================================================================
-================================================================================
-umfpack_wsolve.c
-================================================================================
-     24    144	    #####:  141:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_invalid_system ;
-     24    145	    #####:  142:	return (UMFPACK_ERROR_invalid_system) ;
-     24    158	    #####:  155:	Info [UMFPACK_STATUS] = UMFPACK_ERROR_argument_missing ;
-     24    159	    #####:  156:	return (UMFPACK_ERROR_argument_missing) ;
-     24    165	    #####:  162:	irstep = 0 ;
-================================================================================
-amd_1.c
-================================================================================
-================================================================================
-amd_2.c
-================================================================================
-================================================================================
-amd_aat.c
-================================================================================
-================================================================================
-amd_control.c
-================================================================================
-================================================================================
-amd_defaults.c
-================================================================================
-================================================================================
-amd_info.c
-================================================================================
-================================================================================
-amd_order.c
-================================================================================
-     24     82	    #####:   79:	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24     83	    #####:   80:	return (AMD_OUT_OF_MEMORY) ;	    /* problem too large */
-     24    103	    #####:  100:	amd_free (Len) ;
-     24    104	    #####:  101:	amd_free (Pinv) ;
-     24    105	    #####:  102:	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24    106	    #####:  103:	return (AMD_OUT_OF_MEMORY) ;
-     24    120	    #####:  117:	    amd_free (Rp) ;
-     24    121	    #####:  118:	    amd_free (Ri) ;
-     24    122	    #####:  119:	    amd_free (Len) ;
-     24    123	    #####:  120:	    amd_free (Pinv) ;
-     24    124	    #####:  121:	    if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24    125	    #####:  122:	    return (AMD_OUT_OF_MEMORY) ;
-     24    173	    #####:  170:	amd_free (Rp) ;
-     24    174	    #####:  171:	amd_free (Ri) ;
-     24    175	    #####:  172:	amd_free (Len) ;
-     24    176	    #####:  173:	amd_free (Pinv) ;
-     24    177	    #####:  174:	if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ;
-     24    178	    #####:  175:	return (AMD_OUT_OF_MEMORY) ;
-================================================================================
-amd_postorder.c
-================================================================================
-================================================================================
-amd_post_tree.c
-================================================================================
-================================================================================
-amd_preprocess.c
-================================================================================
-================================================================================
-amd_valid.c
-================================================================================
-================================================================================
-Last line of each output file: 
-================================================================================
-Out/1_di/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 59.09
-=================================================================
-Out/1_dl/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 51.26
-=================================================================
-Out/1g_di/ut.out
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 39.95
-=================================================================
-Out/1g_dl/ut.out
-ALL TESTS PASSED: rnorm 1.03e-10 (1.19e-07 shl0, 5.65e-05 arc130 4.58e-09 omega2) cputime 34.86
-=================================================================
-Out/1g_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 5.84e-05 arc130 3.66e-10 omega2) cputime 75.33
-=================================================================
-Out/1g_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 5.84e-05 arc130 3.66e-10 omega2) cputime 75.14
-=================================================================
-Out/1_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 98.83
-=================================================================
-Out/1_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 97.77
-=================================================================
-Out/2_di/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.19e-07 shl0, 6.76e-05 arc130 2.84e-08 omega2) cputime 52.76
-=================================================================
-Out/2_dl/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.19e-07 shl0, 6.76e-05 arc130 2.84e-08 omega2) cputime 44.59
-=================================================================
-Out/2g_di/ut.out
-ALL TESTS PASSED: rnorm 1.06e-10 (1.19e-07 shl0, 5.65e-05 arc130 1.16e-08 omega2) cputime 33.96
-=================================================================
-Out/2g_dl/ut.out
-ALL TESTS PASSED: rnorm 1.06e-10 (1.19e-07 shl0, 5.65e-05 arc130 1.16e-08 omega2) cputime 30.15
-=================================================================
-Out/2g_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 5.69e-05 arc130 1.34e-09 omega2) cputime 58.91
-=================================================================
-Out/2g_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 5.69e-05 arc130 1.34e-09 omega2) cputime 58.82
-=================================================================
-Out/2_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 6.77e-05 arc130 1.65e-09 omega2) cputime 79.13
-=================================================================
-Out/2_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 6.77e-05 arc130 1.65e-09 omega2) cputime 79.21
-=================================================================
-Out/5_di/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 59.41
-=================================================================
-Out/5_dl/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 8.09e-05 arc130 1.44e-08 omega2) cputime 49.39
-=================================================================
-Out/5_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 98.82
-=================================================================
-Out/5_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 8.10e-05 arc130 1.13e-09 omega2) cputime 98.19
-=================================================================
-Out/6_di/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.19e-07 shl0, 6.76e-05 arc130 2.84e-08 omega2) cputime 0
-=================================================================
-Out/6_dl/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.19e-07 shl0, 6.76e-05 arc130 2.84e-08 omega2) cputime 0
-=================================================================
-Out/6_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 6.77e-05 arc130 1.65e-09 omega2) cputime 0
-=================================================================
-Out/6_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 6.77e-05 arc130 1.65e-09 omega2) cputime 0
-=================================================================
-Out/7_di/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 61.16
-=================================================================
-Out/7_dl/ut.out
-ALL TESTS PASSED: rnorm 1.35e-10 (1.19e-07 shl0, 7.08e-05 arc130 2.95e-08 omega2) cputime 49.42
-=================================================================
-Out/7_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 96.29
-=================================================================
-Out/7_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 7.31e-05 arc130 6.19e-10 omega2) cputime 95.47
-=================================================================
-Out/8_di/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.19e-07 shl0, 6.76e-05 arc130 2.84e-08 omega2) cputime 51.65
-=================================================================
-Out/8_dl/ut.out
-ALL TESTS PASSED: rnorm 1.49e-10 (1.19e-07 shl0, 6.76e-05 arc130 2.84e-08 omega2) cputime 44.36
-=================================================================
-Out/8_zi/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 6.77e-05 arc130 1.65e-09 omega2) cputime 78.02
-=================================================================
-Out/8_zl/ut.out
-ALL TESTS PASSED: rnorm 9.88e-05 (1.33e-07 shl0, 6.77e-05 arc130 1.65e-09 omega2) cputime 78.32
-=================================================================
diff --git a/UMFPACK/Tcov/ss.awk b/UMFPACK/Tcov/ss.awk
deleted file mode 100644
index 13a8b2d..0000000
--- a/UMFPACK/Tcov/ss.awk
+++ /dev/null
@@ -1,3 +0,0 @@
-/TestMat/
-
-/final det/
diff --git a/UMFPACK/Tcov/ucov.di b/UMFPACK/Tcov/ucov.di
index b9f30e7..b7db237 100755
--- a/UMFPACK/Tcov/ucov.di
+++ b/UMFPACK/Tcov/ucov.di
@@ -4,6 +4,7 @@
 gcov -o umf_i_analyze umf_analyze.c
 gcov -o umf_i_apply_order umf_apply_order.c
 gcov -o umf_i_colamd umf_colamd.c
+gcov -o umf_i_cholmod umf_cholmod.c
 gcov -o umf_i_free umf_free.c
 gcov -o umf_i_fsize umf_fsize.c
 gcov -o umf_i_is_permutation umf_is_permutation.c
@@ -12,7 +13,6 @@ gcov -o umf_i_realloc umf_realloc.c
 gcov -o umf_i_report_perm umf_report_perm.c
 gcov -o umf_i_singletons umf_singletons.c
 
-gcov -o umf_di_2by2 umf_2by2.c
 gcov -o umf_di_blas3_update umf_blas3_update.c
 gcov -o umf_di_build_tuples umf_build_tuples.c
 gcov -o umf_di_create_element umf_create_element.c
diff --git a/UMFPACK/Tcov/ucov.dl b/UMFPACK/Tcov/ucov.dl
index 6b949b4..1f226e3 100755
--- a/UMFPACK/Tcov/ucov.dl
+++ b/UMFPACK/Tcov/ucov.dl
@@ -4,6 +4,7 @@
 gcov -o umf_l_analyze umf_analyze.c
 gcov -o umf_l_apply_order umf_apply_order.c
 gcov -o umf_l_colamd umf_colamd.c
+gcov -o umf_l_cholmod umf_cholmod.c
 gcov -o umf_l_free umf_free.c
 gcov -o umf_l_fsize umf_fsize.c
 gcov -o umf_l_is_permutation umf_is_permutation.c
@@ -12,7 +13,6 @@ gcov -o umf_l_realloc umf_realloc.c
 gcov -o umf_l_report_perm umf_report_perm.c
 gcov -o umf_l_singletons umf_singletons.c
 
-gcov -o umf_dl_2by2 umf_2by2.c
 gcov -o umf_dl_blas3_update umf_blas3_update.c
 gcov -o umf_dl_build_tuples umf_build_tuples.c
 gcov -o umf_dl_create_element umf_create_element.c
diff --git a/UMFPACK/Tcov/ucov.zi b/UMFPACK/Tcov/ucov.zi
index 61648f3..90afb2f 100755
--- a/UMFPACK/Tcov/ucov.zi
+++ b/UMFPACK/Tcov/ucov.zi
@@ -4,6 +4,7 @@
 gcov -o umf_i_analyze umf_analyze.c
 gcov -o umf_i_apply_order umf_apply_order.c
 gcov -o umf_i_colamd umf_colamd.c
+gcov -o umf_i_cholmod umf_cholmod.c
 gcov -o umf_i_free umf_free.c
 gcov -o umf_i_fsize umf_fsize.c
 gcov -o umf_i_is_permutation umf_is_permutation.c
@@ -12,7 +13,6 @@ gcov -o umf_i_realloc umf_realloc.c
 gcov -o umf_i_report_perm umf_report_perm.c
 gcov -o umf_i_singletons umf_singletons.c
 
-gcov -o umf_zi_2by2 umf_2by2.c
 gcov -o umf_zi_blas3_update umf_blas3_update.c
 gcov -o umf_zi_build_tuples umf_build_tuples.c
 gcov -o umf_zi_create_element umf_create_element.c
diff --git a/UMFPACK/Tcov/ucov.zl b/UMFPACK/Tcov/ucov.zl
index 364e7bc..3e75d79 100755
--- a/UMFPACK/Tcov/ucov.zl
+++ b/UMFPACK/Tcov/ucov.zl
@@ -4,6 +4,7 @@
 gcov -o umf_l_analyze umf_analyze.c
 gcov -o umf_l_apply_order umf_apply_order.c
 gcov -o umf_l_colamd umf_colamd.c
+gcov -o umf_l_cholmod umf_cholmod.c
 gcov -o umf_l_free umf_free.c
 gcov -o umf_l_fsize umf_fsize.c
 gcov -o umf_l_is_permutation umf_is_permutation.c
@@ -12,7 +13,6 @@ gcov -o umf_l_realloc umf_realloc.c
 gcov -o umf_l_report_perm umf_report_perm.c
 gcov -o umf_l_singletons umf_singletons.c
 
-gcov -o umf_zl_2by2 umf_2by2.c
 gcov -o umf_zl_blas3_update umf_blas3_update.c
 gcov -o umf_zl_build_tuples umf_build_tuples.c
 gcov -o umf_zl_create_element umf_create_element.c
diff --git a/UMFPACK/Tcov/ut.c b/UMFPACK/Tcov/ut.c
index 57847f2..d8b3c43 100644
--- a/UMFPACK/Tcov/ut.c
+++ b/UMFPACK/Tcov/ut.c
@@ -3,9 +3,8 @@
 /* ========================================================================== */
 
 /* -------------------------------------------------------------------------- */
-/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
-/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
-/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
+/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com.   */
+/* All Rights Reserved.  See ../Doc/License for License.                      */
 /* -------------------------------------------------------------------------- */
 
 /* (Nearly) exhaustive statement-coverage testing for UMFPACK.  */
@@ -59,6 +58,45 @@ static double divide (double x, double y)
 }
 
 /* ========================================================================== */
+/* my_ordering */
+/* ========================================================================== */
+
+int my_ordering
+(
+    Int nrow,
+    Int ncol,
+    Int sym,
+    Int *Ap,
+    Int *Ai,
+    Int *P,         /* size ncol */
+    void *params,
+    double *info
+)
+{
+    /* return a valid permutation for use by UMFPACK ... using AMD/COLAMD */
+    return (UMF_cholmod (nrow, ncol, sym, Ap, Ai, P, params, info)) ;
+}
+
+int my_bad_ordering
+(
+    Int nrow,
+    Int ncol,
+    Int sym,
+    Int *Ap,
+    Int *Ai,
+    Int *P,         /* size ncol */
+    void *params,
+    double *info
+)
+{
+    /* return an invalid permutation, for testing */
+    Int k, *p ;
+    for (k = 0 ; k < ncol ; k++) P [k] = EMPTY ;
+    p = (Int *) params ;
+    return (p [0]) ;
+}
+
+/* ========================================================================== */
 /* inv_umfpack_dense: inverse of UMFPACK_DENSE_COUNT */
 /* ========================================================================== */
 
@@ -1068,8 +1106,20 @@ static double do_solvers
 		dump_mat ("C", n, n, Cp, Ci, CARG(Cx,Cz)) ;
 		dump_mat ("L", n, n, Lp, Li, CARG(Lx,Lz)) ;
 		dump_mat ("U", n, n, Up, Ui, CARG(Ux,Uz)) ;
-		printf ("P = [ ") ; for (k = 0 ; k < n ; k++) printf ("%d ", P [k]) ; printf ("]\n") ;
-		printf ("Q = [ ") ; for (k = 0 ; k < n ; k++) printf ("%d ", Q [k]) ; printf ("]\n") ;
+
+		printf ("P = [ ") ;
+                for (k = 0 ; k < n ; k++)
+                {
+                    printf (ID" ", P [k]) ;
+                }
+                printf ("]\n") ;
+		printf ("Q = [ ") ;
+                for (k = 0 ; k < n ; k++)
+                {
+                    printf (ID" ", Q [k]) ;
+                }
+                printf ("]\n") ;
+
 		error ("transposed (PAQ)'x=b inaccurate\n",rnorm) ;
 	    }
 	    maxrnorm = MAX (rnorm, maxrnorm) ;
@@ -1111,8 +1161,18 @@ static double do_solvers
 		dump_mat ("C", n, n, Cp, Ci, CARG(Cx,Cz)) ;
 		dump_mat ("L", n, n, Lp, Li, CARG(Lx,Lz)) ;
 		dump_mat ("U", n, n, Up, Ui, CARG(Ux,Uz)) ;
-		printf ("P = [ ") ; for (k = 0 ; k < n ; k++) printf ("%d ", P [k]) ; printf ("]\n") ;
-		printf ("Q = [ ") ; for (k = 0 ; k < n ; k++) printf ("%d ", Q [k]) ; printf ("]\n") ;
+		printf ("P = [ ") ;
+                for (k = 0 ; k < n ; k++)
+                {
+                    printf (ID" ", P [k]) ;
+                }
+                printf ("]\n") ;
+		printf ("Q = [ ") ;
+                for (k = 0 ; k < n ; k++)
+                {
+                    printf (ID" ", Q [k]) ;
+                }
+                printf ("]\n") ;
 		error ("transposed (PAQ).'x=b inaccurate\n",rnorm) ;
 	    }
 	    maxrnorm = MAX (rnorm, maxrnorm) ;
@@ -1624,11 +1684,23 @@ static double do_symnum
     if (Qinit)
     {
 	/* dump_perm ("Qinit", n_col, Qinit) ; */
-	status = UMFPACK_qsymbolic (n_row, n_col, Ap, Ai, CARG(Ax,Az), Qinit, &Symbolic, Control, Info) ; /* ( */
+	status = UMFPACK_qsymbolic (n_row, n_col, Ap, Ai, CARG(Ax,Az), Qinit,
+            &Symbolic, Control, Info) ; /* ( */
+    }
+    else if (Control != NULL &&
+        Control [UMFPACK_ORDERING] == UMFPACK_ORDERING_USER)
+    {
+        Int params [3] ;
+        params [0] = UMFPACK_ORDERING_AMD ;
+        params [1] = prl-1 ;
+        params [2] = EMPTY ;
+        status = UMFPACK_fsymbolic (n_row, n_col, Ap, Ai, CARG(Ax,Az),
+            &my_ordering, (void *) params, &Symbolic, Control, Info) ;
     }
     else
     {
-	status = UMFPACK_symbolic (n_row, n_col, Ap, Ai, CARG(Ax,Az), &Symbolic, Control, Info) ;
+	status = UMFPACK_symbolic (n_row, n_col, Ap, Ai, CARG(Ax,Az),
+            &Symbolic, Control, Info) ;
     }
 
     UMFPACK_report_status (Control, status) ;
@@ -1858,7 +1930,7 @@ static double do_symnum
 
 		if (deterr > 1e-7)
 		{
-		    printf ("det: real err %g i: %d\n", deterr, i) ;
+		    printf ("det: real err %g i: "ID"\n", deterr, i) ;
 		    error ("det: bad real part", det_x) ;
 		}
 
@@ -2380,12 +2452,13 @@ static double do_matrix
     Int do_dense
 )
 {
-    double Control [UMFPACK_CONTROL], *b, *bz, maxrnorm, rnorm, tol, init ;
+    double Control [UMFPACK_CONTROL], *b, *bz, maxrnorm, rnorm, tol, init,
+        psave ;
     Int *colhist, *rowhist, *rowdeg, *noQinit, *Qinit, *cknob, *rknob,
 	c, r, cs, rs, row, col, i, coldeg, p, d, nb, ck, rk, *Head, *Next,
 	col1, col2, d1, d2, k, status, n_amd,
 	i_tol, i_nb, i_init, n_tol, n_nb, n_init, n_scale, i_scale, scale,
-	i_pivot, n_pivot, pivopt ;
+	i_pivot, n_pivot, pivopt, ordering, singletons ;
 
     /* ---------------------------------------------------------------------- */
     /* initializations */
@@ -2562,10 +2635,31 @@ static double do_matrix
     printf ("with defaults:\n") ;
     rnorm = do_many (n, n, Ap, Ai, Ax,Az, b,bz, Control, noQinit, MemControl, FALSE, FALSE, 0., 0.) ;
     maxrnorm = MAX (rnorm, maxrnorm) ;
+
     printf ("with defaults and qinit:\n") ;
     rnorm = do_many (n, n, Ap, Ai, Ax,Az, b,bz, Control, Qinit, MemControl, FALSE, FALSE, 0., 0.) ;
     maxrnorm = MAX (rnorm, maxrnorm) ;
 
+    /* with lots of ordering options */
+    psave = Control [UMFPACK_PRL] ;
+    if (n < 15) Control [UMFPACK_PRL] = 4 ;
+    for (singletons = 0 ; singletons <= 1 ; singletons++)
+    {
+        for (ordering = EMPTY ; ordering <= UMFPACK_ORDERING_USER ; ordering++)
+        {
+            Control [UMFPACK_ORDERING] = ordering ;
+            Control [UMFPACK_SINGLETONS] = singletons ;
+            printf ("with ordering method "ID" singletons "ID"\n", ordering,
+                singletons) ;
+            UMFPACK_report_control (Control) ;
+            rnorm = do_many (n, n, Ap, Ai, Ax,Az, b,bz, Control, noQinit, MemControl, FALSE, FALSE, 0., 0.) ;
+            maxrnorm = MAX (rnorm, maxrnorm) ;
+        }
+    }
+    Control [UMFPACK_ORDERING] = UMFPACK_DEFAULT_ORDERING ;
+    Control [UMFPACK_SINGLETONS] = UMFPACK_DEFAULT_SINGLETONS ;
+    Control [UMFPACK_PRL] = psave ;
+
     printf ("starting lengthy tests\n") ;
 
     for (c = 0 ; c <= cs ; c++)
@@ -2616,6 +2710,10 @@ static double do_matrix
 
 			    for (strategy = UMFPACK_STRATEGY_AUTO ; strategy <= UMFPACK_STRATEGY_SYMMETRIC ; strategy ++)
 			    {
+                                if (strategy == UMFPACK_STRATEGY_OBSOLETE)
+                                {
+                                    continue ;
+                                }
 				Control [UMFPACK_STRATEGY] = strategy ;
 				{
 				    rnorm = do_once (n, n, Ap, Ai, Ax,Az, b,bz, Control, noQinit, MemControl, FALSE, TRUE, FALSE, 0., 0.) ;
@@ -4163,12 +4261,12 @@ static int do_amd_transpose
     }
 #endif
 
-    W = amd_malloc (MAX (n,1) * sizeof (Int)) ;
-    Flag = amd_malloc (MAX (n,1) * sizeof (Int)) ;
+    W = SuiteSparse_malloc (n, sizeof (Int)) ;
+    Flag = SuiteSparse_malloc (n, sizeof (Int)) ;
     if (!W || !Flag)
     {
-	amd_free (W) ;
-	amd_free (Flag) ;
+	SuiteSparse_free (W) ;
+	SuiteSparse_free (Flag) ;
 	return (AMD_OUT_OF_MEMORY) ;
     }
 
@@ -4178,8 +4276,8 @@ static int do_amd_transpose
     amd_l_preprocess (n, Ap, Ai, Rp, Ri, W, Flag) ;
 #endif
 
-    amd_free (W) ;
-    amd_free (Flag) ;
+    SuiteSparse_free (W) ;
+    SuiteSparse_free (Flag) ;
     return (AMD_OK) ;
 
 }
@@ -4294,8 +4392,9 @@ static double do_file
     else
     {
 	/* full test */
-	for (strategy = -1 ; strategy <= UMFPACK_STRATEGY_SYMMETRIC ; strategy ++)
+	for (strategy=-1 ; strategy <= UMFPACK_STRATEGY_SYMMETRIC ; strategy++)
 	{
+            if (strategy == UMFPACK_STRATEGY_OBSOLETE) continue ;
 	    Control [UMFPACK_STRATEGY] = strategy ;
 	    if (strategy == UMFPACK_STRATEGY_SYMMETRIC)
 	    {
@@ -4442,6 +4541,7 @@ int main (int argc, char **argv)
 	MemOK [6], MemBad [6], nnrow, nncol, nzud, n_row, n_col, n_row2,
 	n_col2, scale, *Front_1strow, *Front_leftmostdesc, strategy,
 	t, aggressive, *Pamd, mem1, mem2, do_recip ;
+    int ok ;
     void *Symbolic, *Numeric ;
     SymbolicType *Sym ;
     NumericType *Num ;
@@ -4449,6 +4549,8 @@ int main (int argc, char **argv)
     struct dirent *direntp ;
     char filename [200] ;
     FILE *f ;
+    Int my_params [3], csave ;
+    double my_info [3] ;
 
     /* turn off debugging */
     { f = fopen ("debug.umf", "w") ; fprintf (f, "-45\n") ; fclose (f) ; }
@@ -4484,8 +4586,9 @@ int main (int argc, char **argv)
     /* test malloc, realloc, and free */
     /* ---------------------------------------------------------------------- */
 
+    /*
     P = (Int *) UMF_malloc (Int_MAX, 2) ;
-    if (P) error ("should have failed\n", 0.) ;
+    if (P) error ("large malloc should have failed\n", 0.) ;
 
     printf ("reallocing...\n") ;
     P = (Int *) UMF_realloc (P, 1, 4) ;
@@ -4500,6 +4603,7 @@ int main (int argc, char **argv)
 #if defined (UMF_MALLOC_COUNT) || !defined (NDEBUG)
     if (UMF_malloc_count != 0) error ("should be 0", 0.) ;
 #endif
+    */
 
     xnan = divide (0., 0.) ;
     xinf = divide (1., 0.) ;
@@ -4668,7 +4772,7 @@ int main (int argc, char **argv)
 
     n = 30 ;
 
-	printf ("sparse %7d 4*n nz's", n) ;
+	printf ("sparse "ID" 4*n nz's", n) ;
 	matgen_sparse (n, 4*n, 0, 0, 0, 0, &Ap, &Ai, &Ax, &Az, 1, 0) ;	/* [[[[ */
 	rnorm = do_and_free (n, Ap, Ai, Ax, Az, Controls, Ncontrols, MemOK, 1) ; /* ]]]] */
 	maxrnorm = MAX (rnorm, maxrnorm) ;
@@ -5012,7 +5116,7 @@ int main (int argc, char **argv)
     if (s != Info [UMFPACK_STATUS]) error ("huh", (double) __LINE__)  ;
     UMFPACK_report_status (Control, s) ;
     UMFPACK_report_info (Control, Info) ;
-    printf ("p1b status: "ID" Numeric handle bad "ID"\n", s, !Numeric) ;
+    printf ("p1b status: "ID" Numeric handle bad %d\n", s, !Numeric) ;
     s2 = UMFPACK_report_numeric (Numeric, Control) ;
     if (!Numeric || s != UMFPACK_OK) error ("p1b",0.) ;
     printf ("Good numeric, pattern test: ") ;
@@ -5359,7 +5463,7 @@ int main (int argc, char **argv)
 
     n = 10 ;
 
-    printf ("\n all realloc fails sparse %7d 4*n nz's\n", n) ;
+    printf ("\n all realloc fails sparse "ID" 4*n nz's\n", n) ;
     matgen_sparse (n, 4*n, 0, 0, 0, 0, &Ap, &Ai, &Ax, &Az, 1, 0) ;
     rnorm = do_and_free (n, Ap, Ai, Ax,Az, Controls, Ncontrols, MemBad, 1) ;
     printf ("rnorm %g for all-realloc-fails\n", rnorm) ;
@@ -5411,6 +5515,7 @@ int main (int argc, char **argv)
       for (strategy = UMFPACK_STRATEGY_AUTO ; strategy <= UMFPACK_STRATEGY_SYMMETRIC ; strategy++)
       {
         Int *Rp, *Ri ;
+        if (strategy == UMFPACK_STRATEGY_OBSOLETE) continue ;
 
 	printf ("\n[[[[ PRL = "ID" strategy = "ID"\n", prl, strategy) ;
 	for (k = 0 ; k < n ; k++) Pamd [k] = EMPTY ;
@@ -5582,6 +5687,51 @@ int main (int argc, char **argv)
 
 	/* ------------------------------------------------------------------ */
 
+        if (prl >= 0)
+        {
+
+            csave = Con [UMFPACK_ORDERING] ;
+            my_params [0] = 1 ;
+            Con [UMFPACK_ORDERING] = UMFPACK_ORDERING_USER ;
+	    s = UMFPACK_fsymbolic (n, n, Ap, Ai, CARG(Ax,Az), 
+                &my_bad_ordering, my_params, &Symbolic, Con, Info) ;
+            if (s != Info [UMFPACK_STATUS]) error ("huh", (double) __LINE__)  ;
+            UMFPACK_report_status (Con, s) ;
+            UMFPACK_report_info (Con, Info) ;
+            if (Symbolic || s != UMFPACK_ERROR_ordering_failed)error ("6d",0.) ;
+
+            my_params [0] = 0 ;
+	    s = UMFPACK_fsymbolic (n, n, Ap, Ai, CARG(Ax,Az), 
+                &my_bad_ordering, my_params, &Symbolic, Con, Info) ;
+            if (s != Info [UMFPACK_STATUS]) error ("huh", (double) __LINE__)  ;
+            UMFPACK_report_status (Con, s) ;
+            UMFPACK_report_info (Con, Info) ;
+            if (Symbolic || s != UMFPACK_ERROR_ordering_failed)error ("6e",0.) ;
+
+            Con [UMFPACK_ORDERING] = csave ;
+
+        }
+
+	/* ------------------------------------------------------------------ */
+
+        my_params [0] = UMFPACK_ORDERING_AMD ;
+        my_params [1] = prl ;
+        my_params [2] = EMPTY ;
+        my_info [0] = EMPTY ;
+        my_info [1] = EMPTY ;
+        my_info [2] = EMPTY ;
+
+        ok = UMF_cholmod (n, n, TRUE, Ap, Ai, Pamd, my_params, my_info) ;
+        if (!ok) error ("6f", 0.) ;
+
+        ok = UMF_cholmod (n+1, n, TRUE, Ap, Ai, Pamd, my_params, my_info) ;
+        if (!ok) error ("6g", 0.) ;
+
+        ok = UMF_cholmod (n, n, TRUE, NULL, Ai, Pamd, my_params, my_info) ;
+        if (ok) error ("6h", 0.) ;
+
+	/* ------------------------------------------------------------------ */
+
 	Ap [0] = 1 ;	/* Ap broken [ */
 	if (prl > 2) printf ("\nAp [0] != 0: ") ;
 	s = UMFPACK_report_matrix (n, n, Ap, Ai, CARG(Ax,Az), 1, Con) ;
@@ -5768,7 +5918,7 @@ int main (int argc, char **argv)
 	if (s != UMFPACK_ERROR_invalid_matrix) error ("51k",0.); 
 
 	s = do_amd (n, Ap, Ai, Pamd) ;
-	printf ("amd jumbled: %d\n", s) ;
+	printf ("amd jumbled: "ID"\n", s) ;
 	if (s != AMD_OK_BUT_JUMBLED) error ("amd 11", (double) s) ;
 
 	Ai [Ap [3] + 1] = c ;	/* Ai fixed ] */
@@ -7050,7 +7200,7 @@ int main (int argc, char **argv)
 	for (i = 1 ; i <= 24 ; i++)
 	{
 	    umf_fail = i ;
-	    printf ("umf_fail starts at "ID"\n", umf_fail) ;
+	    printf ("umf_fail starts at %d\n", umf_fail) ;
 	    fflush (stdout) ;
 #if defined (UMF_MALLOC_COUNT) || !defined (NDEBUG)
 	    if (UMF_malloc_count != 0) error ("umfpack mem test starts memory leak!!\n",0.) ;
@@ -7085,7 +7235,7 @@ int main (int argc, char **argv)
 	for (i = 1 ; i <= 29 ; i++)
 	{
 	    umf_fail = i ;
-	    printf ("\nDoing numeric, umf_fail = "ID"\n", umf_fail) ;
+	    printf ("\nDoing numeric, umf_fail = %d\n", umf_fail) ;
 	    s = UMFPACK_numeric (Ap, Ai, CARG(Ax,Az), Symbolic, &Numeric, Control, Info) ;
 	    if (s != Info [UMFPACK_STATUS]) error ("huh", (double) __LINE__)  ;
 	    UMFPACK_report_status (Control, s) ;
@@ -7164,7 +7314,7 @@ int main (int argc, char **argv)
 	for (i = 1 ; i <= 2 ; i++)
 	{
 	    umf_fail = i ;
-	    printf ("\nTest 109, "ID"\n", umf_fail) ;
+	    printf ("\nTest 109, %d\n", umf_fail) ;
 	    s = UMFPACK_solve (UMFPACK_A, Ap, Ai, CARG(Ax,Az), CARG(x,xz), CARG(b,bz), Numeric, Control, Info) ;
 	    if (s != Info [UMFPACK_STATUS]) error ("huh", (double) __LINE__)  ;
 	    UMFPACK_report_status (Control, s) ;
@@ -7210,7 +7360,7 @@ int main (int argc, char **argv)
 	s = UMFPACK_get_determinant (CARG (&Mx, &Mz), &Exp, Numeric, Info) ;
 	if (s != Info [UMFPACK_STATUS])
 	{
-	    printf ("s %d %g\n", s, Info [UMFPACK_STATUS]) ;
+	    printf ("s "ID" %g\n", s, Info [UMFPACK_STATUS]) ;
 	    error ("huh", (double) __LINE__)  ;
 	}
 	if (s != UMFPACK_ERROR_out_of_memory) error ("73det",0.) ;
@@ -7260,7 +7410,7 @@ int main (int argc, char **argv)
     n = 100 ;
     for (k = 0 ; k <= 100 ; k++)
     {
-	printf ("NaN/Inf %7d 4*n nz's, k= "ID"\n", n, k) ;
+	printf ("NaN/Inf "ID" 4*n nz's, k= "ID"\n", n, k) ;
 	matgen_sparse (n, 4*n, 0, 0, 0, 0, &Ap, &Ai, &Ax, &Az, 1, 1) ; /* [[[[  */
 	if (k == 100)
 	{
@@ -7411,7 +7561,7 @@ int main (int argc, char **argv)
 
     n = 30 ;
 
-	printf ("sparse %7d 4*n nz's", n) ;
+	printf ("sparse "ID" 4*n nz's", n) ;
 	matgen_sparse (n, 4*n, 0, 0, 0, 0, &Ap, &Ai, &Ax, &Az, 1, 0) ;	/* [[[[ */
 	rnorm = do_and_free (n, Ap, Ai, Ax, Az, Controls, Ncontrols, MemOK, 1) ; /* ]]]] */
 	maxrnorm = MAX (rnorm, maxrnorm) ;
@@ -7419,7 +7569,7 @@ int main (int argc, char **argv)
 
     n = 200 ;
 
-	printf ("sparse %7d 4*n nz's", n) ;
+	printf ("sparse "ID" 4*n nz's", n) ;
 	matgen_sparse (n, 4*n, 0, 0, 0, 0, &Ap, &Ai, &Ax, &Az, 1, 0) ;	/* [[[[ */
 
 	/*
@@ -7611,7 +7761,7 @@ int main (int argc, char **argv)
 
     n = 100 ;
 
-	printf ("tri-diagonal+dense row and col %7d ", n) ;
+	printf ("tri-diagonal+dense row and col "ID" ", n) ;
 	matgen_band (n, 1, 1, 1, n, 1, n, &Ap, &Ai, &Ax, &Az) ;
 	rnorm = do_and_free (n, Ap, Ai, Ax,Az, Controls, Ncontrols, MemOK, 1) ;
 	maxrnorm = MAX (rnorm, maxrnorm) ;
@@ -7624,7 +7774,7 @@ int main (int argc, char **argv)
 
     for (n = 1 ; n < 16 ; n++)
     {
-	printf ("dense %7d ", n) ;
+	printf ("dense "ID" ", n) ;
 	matgen_dense (n, &Ap, &Ai, &Ax, &Az) ;
 	rnorm = do_and_free (n, Ap, Ai, Ax,Az, Controls, Ncontrols, MemOK, 1) ;
 	maxrnorm = MAX (rnorm, maxrnorm) ;
@@ -7633,7 +7783,7 @@ int main (int argc, char **argv)
 
     for (n = 20 ; n <= 80 ; n += 20 )
     {
-	printf ("dense %7d ", n) ;
+	printf ("dense "ID" ", n) ;
 	matgen_dense (n, &Ap, &Ai, &Ax, &Az) ;
 	rnorm = do_and_free (n, Ap, Ai, Ax,Az, Controls, Ncontrols, MemOK, 1) ;
 	maxrnorm = MAX (rnorm, maxrnorm) ;
@@ -7642,7 +7792,7 @@ int main (int argc, char **argv)
 
     n = 130 ;
 
-	printf ("dense %7d ", n) ;
+	printf ("dense "ID" ", n) ;
 	matgen_dense (n, &Ap, &Ai, &Ax, &Az) ;
 	rnorm = do_and_free (n, Ap, Ai, Ax,Az, Controls, Ncontrols, MemOK, 1) ;
 	maxrnorm = MAX (rnorm, maxrnorm) ;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/suitesparse-metis.git



More information about the debian-science-commits mailing list